ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1NWVhOQotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTQ0IEBACisjCisjICAgIENvcHlyaWdodCAoYykgMjAxMC0yMDExIE5lc3QsIEluYy4KKyMgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgICAgVGhpcyBkb2N1bWVudCBpcyB0aGUgcHJvcGVydHkgb2YgTmVzdC4gSXQgaXMgY29uc2lkZXJlZAorIyAgICBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgorIworIyAgICBUaGlzIGRvY3VtZW50IG1heSBub3QgYmUgcmVwcm9kdWNlZCBvciB0cmFuc21pdHRlZCBpbiBhbnkgZm9ybSwKKyMgICAgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YKKyMgICAgTmVzdC4KKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBtYWtlZmlsZSBmb3IgYW4gb3Blbi1zb3VyY2UgdmVyc2lvbiBvZiBBcHBsZSdzCisjICAgICAgQ29yZUZvdW5kYXRpb24gbGlicmFyeS4KKyMKKworQnVpbGRDb25maWdTcGVjaWFsaXplZAk6PSBObworQnVpbGRQcm9kdWN0U3BlY2lhbGl6ZWQJOj0gTm8KKworaW5jbHVkZSBwcmUubWFrCisKK1BhY2thZ2VOYW1lCQk6PSBvcGVuY2ZsaXRlCisKK1BhY2thZ2VFeHRlbnNpb24JOj0gdGFyLmd6CitQYWNrYWdlU2VwYXJhdG9yCTo9IC0KKworUGFja2FnZVBhdGNoQXJncwk6PSAtcDEKKworUGFja2FnZUFyY2hpdmUJCTo9ICQoUGFja2FnZU5hbWUpLiQoUGFja2FnZUV4dGVuc2lvbikKK1BhY2thZ2VTb3VyY2VEaXIJOj0gJChjYWxsIEdlbmVyYXRlQnVpbGRQYXRocywkKFBhY2thZ2VOYW1lKSQoUGFja2FnZVNlcGFyYXRvcikkKFBhY2thZ2VWZXJzaW9uKSkKKworUGFja2FnZUJ1aWxkTWFrZWZpbGUJPSAkKGNhbGwgR2VuZXJhdGVCdWlsZFBhdGhzLE1ha2VmaWxlKQorCitDbGVhblBhdGhzCQkrPSAkKFBhY2thZ2VMaWNlbnNlRmlsZSkKKworIyBYWFggLSBDb3JlRm91bmRhdGlvbiBvY2Nhc3Npb25hbGx5IGhhcyBhIHNlZ21lbnQgZmF1bHQgaW4KKyMgQ0ZEaWN0aW9uYXJ5UmVtb3ZlVmFsdWUgd2hlbiBjb21waWxlZCB3aXRoIC1PMiBvciBoaWdoZXIuIFVudGlsIHRoaXMKKyMgaGFzIGJlZW4gZnVsbHktZGVidWdnZWQsIGJ1aWxkIHdpdGggLU9zLgorCitQYWNrYWdlT3B0aW1pemVyRmxhZ3MJOj0gLWcgLU9zCisKK0lDVVNlYXJjaFBhdGggOj0gJChJQ1VQYXRoKS91c3IKK1VVSURTZWFyY2hQYXRoIDo9ICQoVVVJRFBhdGgpL3VzcgorVHpTZWFyY2hQYXRoIDo9ICQoVHpQYXRoKS91c3IKKworYWxsOiAkKFBhY2thZ2VEZWZhdWx0R29hbCkKKworIyBHZW5lcmF0ZSB0aGUgcGFja2FnZSBsaWNlbnNlIGNvbnRlbnRzLgorCiskKFBhY2thZ2VTb3VyY2VEaXIpL0xJQ0VOU0U6IHNvdXJjZQorCiskKFBhY2thZ2VMaWNlbnNlRmlsZSk6ICQoUGFja2FnZVNvdXJjZURpcikvTElDRU5TRQorCSQoY29weS1yZXN1bHQpCisKKyMgRXh0cmFjdCB0aGUgc291cmNlIGZyb20gdGhlIGFyY2hpdmUgYW5kIGFwcGx5IHBhdGNoZXMsIGlmIGFueS4KKworJChQYWNrYWdlU291cmNlRGlyKTogJChQYWNrYWdlQXJjaGl2ZSkgJChQYWNrYWdlUGF0Y2hQYXRocykgfCAkKEJ1aWxkRGlyZWN0b3J5KQorCSQoY2FsbCBleHBhbmQtYXJjaGl2ZSwkKFBhY2thZ2VBcmNoaXZlKSwkKEJ1aWxkRGlyZWN0b3J5KSkKKwkkKGNhbGwgcGF0Y2gtZGlyZWN0b3J5LCQoQCksJChQYWNrYWdlUGF0Y2hBcmdzKSwkKFBhY2thZ2VQYXRjaFBhdGhzKSkKKwkkKFZlcmJvc2UpdG91Y2ggJChAKQorCisjIFByZXBhcmUgdGhlIHNvdXJjZXMuCisKKy5QSE9OWTogc291cmNlCitzb3VyY2U6IHwgJChQYWNrYWdlU291cmNlRGlyKQorCisjIFBhdGNoIHRoZSBzb3VyY2VzLCBpZiBuZWNlc3NhcnkuCisKKy5QSE9OWTogcGF0Y2gKK3BhdGNoOiBzb3VyY2UKKworUGFja2FnZUNvbmZpZ0ZsYWdzID0gLS1kaXNhYmxlLXByb2ZpbGUKKworIyBUaGUgaG9zdCBjb25maWcgb2YgT1NNIHJlcXVpcmVzIHNoYXJlZCBsaWJyYXJpZXMuCitpZm5lcSAoJChDT05GSUdfT1NNX0hPU1QpLDEpCitQYWNrYWdlQ29uZmlnRmxhZ3MgKz0gLS1kaXNhYmxlLXNoYXJlZAorZW5kaWYKKworIyBHZW5lcmF0ZSB0aGUgcGFja2FnZSBidWlsZCBtYWtlZmlsZS4KKworJChQYWNrYWdlQnVpbGRNYWtlZmlsZSk6IHwgJChQYWNrYWdlU291cmNlRGlyKSAkKEJ1aWxkRGlyZWN0b3J5KQorCSQoVmVyYm9zZSljZCAkKEJ1aWxkRGlyZWN0b3J5KSAmJiBcCisJJChDVVJESVIpLyQoUGFja2FnZVNvdXJjZURpcikvY29uZmlndXJlIFwKKwlDQz0iJChDQykiIENYWD0iJChDWFgpIiBBUj0kKEFSKSBSQU5MSUI9JChSQU5MSUIpIFNUUklQPSQoU1RSSVApIFwKKwlDRkxBR1M9IiQoUGFja2FnZU9wdGltaXplckZsYWdzKSIgXAorCUNYWEZMQUdTPSIkKFBhY2thZ2VPcHRpbWl6ZXJGbGFncykiIFwKKwktLWJ1aWxkPSQoSG9zdFR1cGxlKSBcCisJLS1ob3N0PSQoVGFyZ2V0VHVwbGUpIFwKKwkkKFBhY2thZ2VDb25maWdGbGFncykgXAorCS0td2l0aC1pY3U9JChJQ1VTZWFyY2hQYXRoKSBcCisJLS13aXRoLXV1aWQ9JChVVUlEU2VhcmNoUGF0aCkgXAorCS0td2l0aC10ei1pbmNsdWRlcz0kKFR6U2VhcmNoUGF0aCkgXAorCS0tcHJlZml4PS91c3IgXAorCS0tc3lzY29uZmRpcj0vZXRjIFwKKwktLWxvY2Fsc3RhdGVkaXI9L3ZhcgorCisjIENvbmZpZ3VyZSB0aGUgc291cmNlIGZvciBidWlsZGluZy4KKworLlBIT05ZOiBjb25maWd1cmUKK2NvbmZpZ3VyZTogc291cmNlICQoUGFja2FnZUJ1aWxkTWFrZWZpbGUpCisKKyMgQnVpbGQgdGhlIHNvdXJjZS4KKyMKKworLlBIT05ZOiBidWlsZAorYnVpbGQ6IGNvbmZpZ3VyZQorCSQoVmVyYm9zZSkkKE1BS0UpIC1DICQoQnVpbGREaXJlY3RvcnkpIGFsbAorCisjIFN0YWdlIHRoZSBidWlsZCB0byBhIHRlbXBvcmFyeSBpbnN0YWxsYXRpb24gYXJlYS4KKyMKKyMgV2UgZXhwbGljdGx5IHJlbW92ZSAnbGliZm9vLmxhJyBiZWNhdXNlIHNvbWUgcGFja2FnZXMgdGhhdCBkZXBlbmQgb24KKyMgdGhlc2UgbGlicmFyaWVzIHVzZSBsaWJ0b29sLiBJZiBsaWJ0b29sIGZpbmRzIGEgJ2xpYmZvby5sYScgZmlsZSBmb3IKKyMgYSBsaWJyYXJ5LCBpdCB1c2VzIHRoZSB2YWx1ZSBvZiAnbGliZGlyPTxkaXI+JyBpdCBmaW5kcy4gSW4gb3VyCisjIGNhc2UsIHNpbmNlICctLXByZWZpeD0vdXNyJyB0aGlzIHZhbHVlIGlzICcvdXNyL2xpYicuIEl0IHRoZW4KKyMgcmVzb2x2ZXMgJy1sZm9vJy4gSW4gYSBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudCwgdGhpcyBpcyBsaWtlbHkKKyMgdG8gYmUgbmVpdGhlciB0aGUgcmlnaHQgYXJjaGl0ZWN0dXJlIG5vciB0aGUgcmlnaHQgdmVyc2lvbiB0byBsaW5rCisjIGFnYWluc3QuIEluIHNob3J0LCB3ZSBsb3NlLgorIworIyBXZSBjb3VsZCBhbHNvIGhhbmRsZSB0aGlzIGJ5IHJlbW92aW5nIERFU1RESVIgYW5kIHNldHRpbmcgdGhlIHByZWZpeAorIyB0byAkKFJlc3VsdERpcmVjdG9yeSk7IGhvd2V2ZXIsIHRoYXQgcmVzdWx0cyBpbiBsaWJ0b29sIGhhcmQtY29kaW5nCisjICQoUmVzdWx0RGlyZWN0b3J5KSBhcyB0aGUgUlBBVEggaW4gdGhlIGxpbmtlZCBleGVjdXRhYmxlcyB3aGljaCBpcworIyBOT1Qgd2hhdCB3ZSB3YW50IGVpdGhlci4gV2UgbG9zZSBhZ2Fpbi4KKyMKKyMgQnkgcmVtb3ZpbmcgdGhlICcqLmxhJyBmaWxlLCB3ZSB3aW4gYnkgZW5zdXJpbmcgbmVpdGhlciBhIG1pc2RpcmVjdGVkCisjIGxpbmsgbm9yIGFuIFJQQVRILgorCisuUEhPTlk6IHN0YWdlCitzdGFnZTogYnVpbGQgfCAkKFJlc3VsdERpcmVjdG9yeSkKKwkkKFZlcmJvc2UpJChNQUtFKSAtQyAkKEJ1aWxkRGlyZWN0b3J5KSBERVNURElSPSQoUmVzdWx0RGlyZWN0b3J5KSBpbnN0YWxsCisJJChWZXJib3NlKSQoUk0pICQoUk1GTEFHUykgJChjYWxsIEdlbmVyYXRlUmVzdWx0UGF0aHMsLHVzci9saWIvbGliQ29yZUZvdW5kYXRpb24ubGEgdXNyL2xpYi9saWJDb3JlRm91bmRhdGlvbl9kZWJ1Zy5sYSB1c3IvbGliL2xpYkNvcmVGb3VuZGF0aW9uX3Byb2ZpbGUubGEpCisKK2NsZWFuOgorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpIC1yICQoUGFja2FnZVNvdXJjZURpcikKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAtciAkKEJ1aWxkRGlyZWN0b3J5KS8qICQoQnVpbGREaXJlY3RvcnkpLy4uPyogJChCdWlsZERpcmVjdG9yeSkvLlshLl0qCisJJChWZXJib3NlKSQoUk0pICQoUk1GTEFHUykgLXIgJChSZXN1bHREaXJlY3RvcnkpLyogJChSZXN1bHREaXJlY3RvcnkpLy4uPyogJChSZXN1bHREaXJlY3RvcnkpLy5bIS5dKgorCisuUEhPTlk6IGluc3RhbGwKK2luc3RhbGw6ICQoUGFja2FnZVNvdXJjZURpcikKKwkkKFZlcmJvc2UpY3AgJChQYWNrYWdlU291cmNlRGlyKS9DRkNoYXJhY3RlclNldEJpdG1hcHMuYml0bWFwIC91c3Ivc2hhcmUvQ29yZUZvdW5kYXRpb24vQ2hhcmFjdGVyU2V0cy8KKwkkKFZlcmJvc2UpY3AgJChQYWNrYWdlU291cmNlRGlyKS9DRlVuaWNvZGVEYXRhLUIubWFwcGluZyAvdXNyL3NoYXJlL0NvcmVGb3VuZGF0aW9uL0NoYXJhY3RlclNldHMvCisJJChWZXJib3NlKWNwICQoUGFja2FnZVNvdXJjZURpcikvQ0ZVbmljb2RlRGF0YS1MLm1hcHBpbmcgL3Vzci9zaGFyZS9Db3JlRm91bmRhdGlvbi9DaGFyYWN0ZXJTZXRzLworCSQoVmVyYm9zZSljcCAkKFBhY2thZ2VTb3VyY2VEaXIpL0NGVW5pQ2hhclByb3BlcnR5RGF0YWJhc2UuZGF0YSAvdXNyL3NoYXJlL0NvcmVGb3VuZGF0aW9uL0NoYXJhY3RlclNldHMvCisKK2luY2x1ZGUgcG9zdC5tYWsKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUwLmRlc2NyaXB0aW9uIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTAuZGVzY3JpcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI4OWRhNgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUwLmRlc2NyaXB0aW9uCkBAIC0wLDAgKzEgQEAKK1RoaXMgcGF0Y2ggYWRkcyBBUk0gc3VwcG9ydCwgd2hlcmUgbmVjZXNzYXJ5LgpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTAucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01MC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDAxM2ZmCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTAucGF0Y2gKQEAgLTAsMCArMSw2MyBAQAorZGlmZiAtYXJ1TiBhL0NGQmFzZS5jIGIvQ0ZCYXNlLmMKKy0tLSBhL0NGQmFzZS5jCTIwMDktMDItMTkgMTY6MjU6MDYuMDAwMDAwMDAwIC0wODAwCisrKysgYi9DRkJhc2UuYwkyMDEwLTEwLTAxIDE0OjMxOjM4LjI4NjgzMDY0NSAtMDcwMAorQEAgLTEwNjIsNCArMTA2MiwyMCBAQAorICNlbmRpZgorICNlbmRpZgorIAorLQorKyNpZiBkZWZpbmVkKF9fYXJtX18pCisrX19hc21fXyAoCisrIi50ZXh0XG4iCisrIgkuYWxpZ24gMlxuIgorKyNpZiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1gKKysiLnByaXZhdGVfZXh0ZXJuIF9fX0hBTFRcbiIKKysiX19fSEFMVDpcbiIKKysjZWxpZiBERVBMT1lNRU5UX1RBUkdFVF9MSU5VWAorKyIuZ2xvYmwgX19IQUxUXG4iCisrIl9fSEFMVDpcbiIKKysjZWxzZQorKyIuZ2xvYmwgX19fSEFMVFxuIgorKyJfX19IQUxUOlxuIgorKyNlbmRpZgorKyIJYmtwdFxuIgorKyk7CisrI2VuZGlmIC8qIGRlZmluZWQoX19hcm1fXykgKi8KK2RpZmYgLWFydU4gYS9DRkJhc2UuaCBiL0NGQmFzZS5oCistLS0gYS9DRkJhc2UuaAkyMDA5LTAyLTE5IDE2OjI1OjA2LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZCYXNlLmgJMjAxMC0xMC0wMSAxNDozMDoyMy43OTk2NDQwNzMgLTA3MDAKK0BAIC01MCw2ICs1MCwxMCBAQAorICAgICAjZGVmaW5lIF9fTElUVExFX0VORElBTl9fIDEKKyAjZW5kaWYKKyAKKysjaWYgKGRlZmluZWQoX19BUk1FTF9fKSAmJiAhZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykpCisrCSNkZWZpbmUgX19MSVRUTEVfRU5ESUFOX18gMQorKyNlbmRpZgorKworICNpZiAhZGVmaW5lZChfX0JJR19FTkRJQU5fXykgJiYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCisgI2Vycm9yIERvIG5vdCBrbm93IHRoZSBlbmRpYW5lc3Mgb2YgdGhpcyBhcmNoaXRlY3R1cmUKKyAjZW5kaWYKK2RpZmYgLWFydU4gYS9DRkludGVybmFsLmggYi9DRkludGVybmFsLmgKKy0tLSBhL0NGSW50ZXJuYWwuaAkyMDA5LTAyLTE5IDE2OjI1OjA2LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZJbnRlcm5hbC5oCTIwMTAtMTAtMDEgMTQ6MDU6NDguOTI2Nzk5ODI5IC0wNzAwCitAQCAtMTIxLDYgKzEyMSw4IEBACisgICAgICNlbHNlCisgICAgICAgICAjZXJyb3IgQ29tcGlsZXIgbm90IHN1cHBvcnRlZAorICAgICAjZW5kaWYKKysjZWxpZiBkZWZpbmVkKF9fYXJtX18pCisrCSNkZWZpbmUgSEFMVCBhc20gX192b2xhdGlsZV9fKCJia3B0IikKKyAjZW5kaWYKKyAKKyAjaWYgZGVmaW5lZChERUJVRykKK2RpZmYgLWFydU4gYS9pbmNsdWRlL0F2YWlsYWJpbGl0eU1hY3Jvcy5oIGIvaW5jbHVkZS9BdmFpbGFiaWxpdHlNYWNyb3MuaAorLS0tIGEvaW5jbHVkZS9BdmFpbGFiaWxpdHlNYWNyb3MuaAkyMDA5LTAyLTA0IDEwOjQyOjE5LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvaW5jbHVkZS9BdmFpbGFiaWxpdHlNYWNyb3MuaAkyMDEwLTEwLTAxIDE0OjA3OjE0Ljk5OTc4MDI5MyAtMDcwMAorQEAgLTg0LDcgKzg0LDcgQEAKKyAgICAgI2lmZGVmIF9fRU5WSVJPTk1FTlRfTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRURfXworICAgICAgICAgI2RlZmluZSBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCBfX0VOVklST05NRU5UX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEX18KKyAgICAgI2Vsc2UKKy0gICAgICAgICNpZiBfX3BwYzY0X18gfHwgX19pMzg2X18gfHwgX194ODZfNjRfXworKyAgICAgICAgI2lmIF9fcHBjNjRfXyB8fCBfX2kzODZfXyB8fCBfX3g4Nl82NF9fIHx8IF9fYXJtX18KKyAgICAgICAgICAgICAjZGVmaW5lIE1BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIE1BQ19PU19YX1ZFUlNJT05fMTBfNAorICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgICAjZGVmaW5lIE1BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEIE1BQ19PU19YX1ZFUlNJT05fMTBfMQpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTEuZGVzY3JpcHRpb24gYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01MS5kZXNjcmlwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWQ2NTEyCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTEuZGVzY3JpcHRpb24KQEAgLTAsMCArMSBAQAorVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQgdGhlIHJpZ2h0IExERkxBR1MgYXJlIHBhc3NlZCB3aGVuIHRlc3RpbmcgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdXVpZF9jb21wYXJlIGluIGxpYnV1aWQuCmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01MS5wYXRjaCBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUxLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZDE3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01MS5wYXRjaApAQCAtMCwwICsxLDIzIEBACitkaWZmIC1hcnVOIGEvY29uZmlndXJlIGIvY29uZmlndXJlCistLS0gYS9jb25maWd1cmUJMjAwOS0wMy0xMCAyMzo0NDozNC4wMDAwMDAwMDAgLTA3MDAKKysrKyBiL2NvbmZpZ3VyZQkyMDEwLTEwLTIwIDEzOjEyOjE5LjAwMDAwMDAwMCAtMDcwMAorQEAgLTE4NTI4LDYgKzE4NTI4LDggQEAKKyAJZmkKKyAKKyAJVVVJRF9zYXZlZF9saWJzPSIke0xJQlN9IgorKwlVVUlEX3NhdmVkX2xkZmxhZ3M9IiR7TERGTEFHU30iCisrCUxERkxBR1M9IiR7VVVJRF9MREZMQUdTfSAke0xERkxBR1N9IgorIAlMSUJTPSIiCisgCisgCitAQCAtMTg2MDMsOCArMTg2MDUsMTAgQEAKKyAKKyAKKyAJVVVJRF9MSUJTPSIke1VVSURfTERGTEFHU30gJHtMSUJTfSIKKysJTERGTEFHUz0iJHtVVUlEX3NhdmVkX2xkZmxhZ3N9IgorIAlMSUJTPSIke1VVSURfc2F2ZWRfbGlic30iCisgCXVuc2V0IFVVSURfc2F2ZWRfbGlicworKwl1bnNldCBVVUlEX3NhdmVkX2xkZmxhZ3MKKyAKKyBlbGlmIHRlc3QgIngke1VVSURfQ09ORklHfSIgIT0gIngiOyB0aGVuCisgCVVVSURfQ1BQRkxBR1M9ImAke1VVSURfQ09ORklHfSAtLWNmbGFnc2AiCmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01Mi5kZXNjcmlwdGlvbiBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUyLmRlc2NyaXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZjJiMjUKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01Mi5kZXNjcmlwdGlvbgpAQCAtMCwwICsxIEBACitUaGlzIHBhdGNoIHVwZ3JhZGVzIHRoZSBBc3NlcnRNYWNyb3MuaCBmcm9tIENhcmJvbkhlYWRlcnMtOEE0MjggdG8gdGhhdCBmcm9tIENhcmJvbkhlYWRlcnMtMTguMSB0byBhZGRyZXNzIHJkYXI6Ly9wcm9ibGVtLzQ4MjIzMjYgd2hlcmUgZXhlY3V0aW5nIHZlcmlmeSphY3Rpb24gd2l0aCBicmVhayBvciBjb250aW51ZSBlbmRzIHVwIGZhaWxpbmcgdG8gYWN0dWFsbHkgd29yayBhcyBleHBlY3RlZCBvciBpbnRlbmRlZC4KZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUyLnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTIucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYwZjRhNAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUyLnBhdGNoCkBAIC0wLDAgKzEsMTY2NCBAQAorZGlmZiAtYXJ1TiBhL2luY2x1ZGUvQXNzZXJ0TWFjcm9zLmggYi9pbmNsdWRlL0Fzc2VydE1hY3Jvcy5oCistLS0gYS9pbmNsdWRlL0Fzc2VydE1hY3Jvcy5oCTIwMDktMDItMDMgMjE6Mjg6MjYuMDAwMDAwMDAwIC0wODAwCisrKysgYi9pbmNsdWRlL0Fzc2VydE1hY3Jvcy5oCTIwMDktMDQtMTMgMTA6MDg6MjMuMDAwMDAwMDAwIC0wNzAwCitAQCAtMSwyNiArMSw1MSBAQAorIC8qCistICAgICBGaWxlOiAgICAgICBBc3NlcnRNYWNyb3MuaAorLSAKKy0gICAgIENvbnRhaW5zOiAgIFRoaXMgZmlsZSBkZWZpbmVzIHN0cnVjdHVyZWQgZXJyb3IgaGFuZGxpbmcgYW5kIGFzc2VydGlvbiBtYWNyb3MgZm9yCistICAgICAgICAgICAgICAgICBwcm9ncmFtbWluZyBpbiBDLiBPcmlnaW5hbGx5IHVzZWQgaW4gUXVpY2tEcmF3IEdYIGFuZCBsYXRlciBlbmhhbmNlZC4KKy0gICAgICAgICAgICAgICAgIFRoZXNlIG1hY3JvcyBhcmUgdXNlZCB0aHJvdWdob3V0IEFwcGxlJ3Mgc29mdHdhcmUuCistCistICAgICAgICAgICAgICAgICBTZWUgIkxpdmluZyBJbiBhbiBFeGNlcHRpb25hbCBXb3JsZCIgYnkgU2VhbiBQYXJlbnQKKy0gICAgICAgICAgICAgICAgIChkZXZlbG9wLCBUaGUgQXBwbGUgVGVjaG5pY2FsIEpvdXJuYWwsIElzc3VlIDExLCBBdWd1c3QvU2VwdGVtYmVyIDE5OTIpCistICAgICAgICAgICAgICAgICA8aHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vZGV2L3RlY2hzdXBwb3J0L2RldmVsb3AvaXNzdWUxMXRvYy5zaHRtbD4KKy0gICAgICAgICAgICAgICAgIGZvciB0aGUgbWV0aG9kb2xvZ3kgYmVoaW5kIHRoZXNlIGVycm9yIGhhbmRsaW5nIGFuZCBhc3NlcnRpb24gbWFjcm9zLgorLQorLSAgICAgQ29weXJpZ2h0OiAgqSAyMDAyIGJ5IEFwcGxlIENvbXB1dGVyLCBJbmMuLCBhbGwgcmlnaHRzIHJlc2VydmVkLgorLSAgCistICAgICBCdWdzPzogICAgICBGb3IgYnVnIHJlcG9ydHMsIGNvbnN1bHQgdGhlIGZvbGxvd2luZyBwYWdlIG9uCistICAgICAgICAgICAgICAgICB0aGUgV29ybGQgV2lkZSBXZWI6CisrICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDggYnkgQXBwbGUgSW5jLi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKysgKgorKyAqIEBBUFBMRV9MSUNFTlNFX0hFQURFUl9TVEFSVEAKKysgKiAKKysgKiBUaGlzIGZpbGUgY29udGFpbnMgT3JpZ2luYWwgQ29kZSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBvZiBPcmlnaW5hbCBDb2RlCisrICogYXMgZGVmaW5lZCBpbiBhbmQgdGhhdCBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlCisrICogVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorKyAqIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKysgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2UuYXBwbGUuY29tL2Fwc2wvIGFuZCByZWFkIGl0IGJlZm9yZSB1c2luZyB0aGlzCisrICogZmlsZS4KKysgKiAKKysgKiBUaGUgT3JpZ2luYWwgQ29kZSBhbmQgYWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGFyZQorKyAqIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUgorKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5EIEFQUExFIEhFUkVCWSBESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywKKysgKiBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisrICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULgorKyAqIFBsZWFzZSBzZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZAorKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorKyAqIAorKyAqIEBBUFBMRV9MSUNFTlNFX0hFQURFUl9FTkRACisrICovCisrCisrCisrLyoKKysJRmlsZTogICAgICAgQXNzZXJ0TWFjcm9zLmgKKyAgCistICAgICAgICAgICAgICAgICAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vYnVncmVwb3J0ZXIvIAorKwlDb250YWluczogICBUaGlzIGZpbGUgZGVmaW5lcyBzdHJ1Y3R1cmVkIGVycm9yIGhhbmRsaW5nIGFuZCBhc3NlcnRpb24gbWFjcm9zIGZvcgorKwkJCQlwcm9ncmFtbWluZyBpbiBDLiBPcmlnaW5hbGx5IHVzZWQgaW4gUXVpY2tEcmF3IEdYIGFuZCBsYXRlciBlbmhhbmNlZC4KKysJCQkJVGhlc2UgbWFjcm9zIGFyZSB1c2VkIHRocm91Z2hvdXQgQXBwbGUncyBzb2Z0d2FyZS4KKysJCisrCQkJCU5ldyBjb2RlIG1heSBub3Qgd2FudCB0byBiZWdpbiBhZG9wdGluZyB0aGVzZSBtYWNyb3MgYW5kIGluc3RlYWQgdXNlCisrCQkJCWV4aXN0aW5nIGxhbmd1YWdlIGZ1bmN0aW9uYWxpdHkuCisrCQorKwkJCQlTZWUgIkxpdmluZyBJbiBhbiBFeGNlcHRpb25hbCBXb3JsZCIgYnkgU2VhbiBQYXJlbnQKKysJCQkJKGRldmVsb3AsIFRoZSBBcHBsZSBUZWNobmljYWwgSm91cm5hbCwgSXNzdWUgMTEsIEF1Z3VzdC9TZXB0ZW1iZXIgMTk5MikKKysJCQkJPGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2Rldi90ZWNoc3VwcG9ydC9kZXZlbG9wL2lzc3VlMTF0b2Muc2h0bWw+IG9yCisrCQkJCTxodHRwOi8vd3d3Lm1hY3RlY2guY29tL2FydGljbGVzL2RldmVsb3AvaXNzdWVfMTEvUGFyZW50X2ZpbmFsLmh0bWw+CisrCQkJCWZvciB0aGUgbWV0aG9kb2xvZ3kgYmVoaW5kIHRoZXNlIGVycm9yIGhhbmRsaW5nIGFuZCBhc3NlcnRpb24gbWFjcm9zLgorKwkKKysJQnVncz86ICAgICAgRm9yIGJ1ZyByZXBvcnRzLCBjb25zdWx0IHRoZSBmb2xsb3dpbmcgcGFnZSBvbgorKwkJCQl0aGUgV29ybGQgV2lkZSBXZWI6CisrCisrCSBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9idWdyZXBvcnRlci8gCisgKi8KKyAjaWZuZGVmIF9fQVNTRVJUTUFDUk9TX18KKyAjZGVmaW5lIF9fQVNTRVJUTUFDUk9TX18KKyAKKy0KKyAvKgorICAqICBNYWNybyBvdmVydmlldzoKKyAgKiAgCitAQCAtNjAsNiArODUsMjcgQEAKKyAgKiAgICAgIEJ5IGRlZmF1bHQsIGFsbCBtZXNzYWdlcyB3cml0ZSB0byBzdGRlcnIuICBJZiB5b3Ugd291bGQgbGlrZSB0byB3cml0ZSBhIGN1c3RvbQorICAqICAgICAgZXJyb3IgbWVzc2FnZSBmb3JtYXRlciwgZGVmaW5lZCBERUJVR19BU1NFUlRfTUVTU0FHRSB0byB5b3VyIGZ1bmN0aW9uIG5hbWUuCisgICoKKysgKiAgICAgIEVhY2ggaW5kaXZpZHVhbCBtYWNybyB3aWxsIG9ubHkgYmUgZGVmaW5lZCBpZiBpdCBpcyBub3QgYWxyZWFkeSBkZWZpbmVkLCBzbworKyAqICAgICAgeW91IGNhbiByZWRlZmluZSB0aGVpciBiZWhhdmlvciBzaW5nbHkgYnkgcHJvdmlkaW5nIHlvdXIgb3duIGRlZmluaXRpb24gYmVmb3JlCisrICogICAgICB0aGlzIGZpbGUgaXMgaW5jbHVkZWQuCisrICoKKysgKiAgICAgIElmIHlvdSBkZWZpbmUgX19BU1NFUlRNQUNST1NfXyBiZWZvcmUgdGhpcyBmaWxlIGlzIGluY2x1ZGVkLCB0aGVuIG5vdGhpbmcgaW4KKysgKiAgICAgIHRoaXMgZmlsZSB3aWxsIHRha2UgZWZmZWN0LgorKyAqCisrICogICAgICBQcmlvciB0byBNYWMgT1MgWCAxMC42IHRoZSBtYWNybyBuYW1lcyB1c2VkIGluIHRoaXMgZmlsZSBjb25mbGljdGVkIHdpdGggc29tZQorKyAqICAgICAgdXNlciBjb2RlLCBpbmNsdWRpbmcgbGlicmFyaWVzIGluIGJvb3N0IGFuZCB0aGUgcHJvcG9zZWQgQysrIHN0YW5kYXJkcyBlZmZvcnRzLAorKyAqICAgICAgYW5kIHRoZXJlIHdhcyBubyB3YXkgZm9yIGEgY2xpZW50IG9mIHRoaXMgaGVhZGVyIHRvIHJlc29sdmUgdGhpcyBjb25mbGljdC4gQmVjYXVzZQorKyAqICAgICAgb2YgdGhpcywgbW9zdCBvZiB0aGUgbWFjcm9zIGhhdmUgYmVlbiBjaGFuZ2VkIHNvIHRoYXQgdGhleSBhcmUgcHJlZml4ZWQgd2l0aCAKKysgKiAgICAgIF9fIGFuZCBjb250YWluIGF0IGxlYXN0IG9uZSBjYXBpdGFsIGxldHRlciwgd2hpY2ggc2hvdWxkIGFsbGV2aWF0ZSB0aGUgY3VycmVudAorKyAqICAgICAgYW5kIGZ1dHVyZSBjb25mbGljdHMuICBIb3dldmVyLCB0byBhbGxvdyBjdXJyZW50IHNvdXJjZXMgdG8gY29udGludWUgdG8gY29tcGlsZSwKKysgKiAgICAgIGNvbXBhdGliaWxpdHkgbWFjcm9zIGFyZSBkZWZpbmVkIGF0IHRoZSBlbmQgd2l0aCB0aGUgb2xkIG5hbWVzLiAgQSB0b3BzIHNjcmlwdCAKKysgKiAgICAgIGF0IHRoZSBlbmQgb2YgdGhpcyBmaWxlIHdpbGwgY29udmVydCBhbGwgb2YgdGhlIG9sZCBtYWNybyBuYW1lcyB1c2VkIGluIGEgZGlyZWN0b3J5CisrICogICAgICB0byB0aGUgbmV3IG5hbWVzLiAgQ2xpZW50cyBhcmUgcmVjb21tZW5kZWQgdG8gbWlncmF0ZSBvdmVyIHRvIHRoZXNlIG5ldyBtYWNyb3MgYXMKKysgKiAgICAgIHRoZXkgdXBkYXRlIHRoZWlyIHNvdXJjZXMgYmVjYXVzZSBhIGZ1dHVyZSByZWxlYXNlIG9mIE1hYyBPUyBYIHdpbGwgcmVtb3ZlIHRoZQorKyAqICAgICAgb2xkIG1hY3JvIGRlZmluaXRpb25zICggd2l0aG91dCB0aGUgZG91YmxlLXVuZGVyc2NvcmUgcHJlZml4ICkuICBDbGllbnRzIHdobworKyAqICAgICAgd2FudCB0byBjb21waWxlIHdpdGhvdXQgdGhlIG9sZCBtYWNybyBkZWZpbml0aW9ucyBjYW4gZGVmaW5lIHRoZSBtYWNybworKyAqICAgICAgX19BU1NFUlRfTUFDUk9TX0RFRklORV9WRVJTSU9OU19XSVRIT1VUX1VOREVSU0NPUkVTIHRvIDAgYmVmb3JlIHRoaXMgZmlsZSBpcworKyAqICAgICAgaW5jbHVkZWQuCisgICovCisgCisgCitAQCAtMTY1LDkgKzIxMSw5IEBACisgICovCisgI2lmbmRlZiBERUJVR19BU1NFUlRfTUVTU0FHRQorICAgICNpZmRlZiBLRVJORUwKKy0gICAgICAjaW5jbHVkZSA8c3lzbG9nLmg+CisrICAgICAgI2luY2x1ZGUgPGxpYmtlcm4vbGlia2Vybi5oPgorICAgICAgICNkZWZpbmUgREVCVUdfQVNTRVJUX01FU1NBR0UobmFtZSwgYXNzZXJ0aW9uLCBsYWJlbCwgbWVzc2FnZSwgZmlsZSwgbGluZSwgdmFsdWUpIFwKKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzbG9nKExPR19FUlIsICJBc3NlcnRNYWNyb3M6ICVzLCAlcyBmaWxlOiAlcywgbGluZTogJWRcbiIsIGFzc2VydGlvbiwgKG1lc3NhZ2UhPTApID8gbWVzc2FnZSA6ICIiLCBmaWxlLCBsaW5lKTsKKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCAiQXNzZXJ0TWFjcm9zOiAlcywgJXMgZmlsZTogJXMsIGxpbmU6ICVkXG4iLCBhc3NlcnRpb24sIChtZXNzYWdlIT0wKSA/IG1lc3NhZ2UgOiAiIiwgZmlsZSwgbGluZSk7CisgICAgI2Vsc2UKKyAgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4KKyAgICAgICAjZGVmaW5lIERFQlVHX0FTU0VSVF9NRVNTQUdFKG5hbWUsIGFzc2VydGlvbiwgbGFiZWwsIG1lc3NhZ2UsIGZpbGUsIGxpbmUsIHZhbHVlKSBcCitAQCAtMTgwLDcgKzIyNiw3IEBACisgCisgCisgLyoKKy0gKiAgZGVidWdfc3RyaW5nKG1lc3NhZ2UpCisrICogIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZG9lcyBub3RoaW5nIGFuZCBwcm9kdWNlcyBubyBjb2RlLgorQEAgLTE5MywyNiArMjM5LDI3IEBACisgICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KKyAgKgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSBkZWJ1Z19zdHJpbmcobWVzc2FnZSkKKy0jZWxzZQorLSAgICNkZWZpbmUgZGVidWdfc3RyaW5nKG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19EZWJ1Z19TdHJpbmcKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX0RlYnVnX1N0cmluZyhtZXNzYWdlKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgIiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCistCisgLyoKKy0gKiAgY2hlY2soYXNzZXJ0aW9uKQorKyAqICBfX0NoZWNrKGFzc2VydGlvbikKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBkb2VzIG5vdGhpbmcgYW5kIHByb2R1Y2VzIG5vIGNvZGUuCitAQCAtMjI1LDMyICsyNzIsMjkgQEAKKyAgKiAgICBhc3NlcnRpb246CisgICogICAgICBUaGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24uCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIGNoZWNrKGFzc2VydGlvbikKKy0jZWxzZQorLSAgICNkZWZpbmUgY2hlY2soYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjYXNzZXJ0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19DaGVjaworKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fQ2hlY2soYXNzZXJ0aW9uKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fQ2hlY2soYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNhc3NlcnRpb24sIDAsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgMCApOyAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorICNlbmRpZgorIAorLSNkZWZpbmUgbmNoZWNrKGFzc2VydGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIGNoZWNrKCEoYXNzZXJ0aW9uKSkKKy0KKysjaWZuZGVmIF9fbkNoZWNrCisrCSNkZWZpbmUgX19uQ2hlY2soYXNzZXJ0aW9uKSAgX19DaGVjayghKGFzc2VydGlvbikpCisrI2VuZGlmCisgCisgLyoKKy0gKiAgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKysgKiAgX19DaGVja19TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGRvZXMgbm90aGluZyBhbmQgcHJvZHVjZXMgbm8gY29kZS4KK0BAIC0yNjYsMzIgKzMxMCwyOSBAQAorICAqICAgIG1lc3NhZ2U6CisgICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKy0jZWxzZQorLSAgICNkZWZpbmUgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjYXNzZXJ0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19DaGVja19TdHJpbmcKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX0NoZWNrX1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19DaGVja19TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Fzc2VydGlvbiwgMCwgbWVzc2FnZSwgX19GSUxFX18sIF9fTElORV9fLCAwICk7ICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCistI2RlZmluZSBuY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgY2hlY2tfc3RyaW5nKCEoYXNzZXJ0aW9uKSwgbWVzc2FnZSkKKy0KKysjaWZuZGVmIF9fbkNoZWNrX1N0cmluZworKwkjZGVmaW5lIF9fbkNoZWNrX1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICBfX0NoZWNrX1N0cmluZyghKGFzc2VydGlvbiksIG1lc3NhZ2UpCisrI2VuZGlmCisgCisgLyoKKy0gKiAgY2hlY2tfbm9lcnIoZXJyb3JDb2RlKQorKyAqICBfX0NoZWNrX25vRXJyKGVycm9yQ29kZSkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBkb2VzIG5vdGhpbmcgYW5kIHByb2R1Y2VzIG5vIGNvZGUuCitAQCAtMzA0LDMwICszNDUsMjYgQEAKKyAgKiAgICBlcnJvckNvZGU6CisgICogICAgICBUaGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gdG8gY29tcGFyZSB3aXRoIDAuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIGNoZWNrX25vZXJyKGVycm9yQ29kZSkKKy0jZWxzZQorLSAgICNkZWZpbmUgY2hlY2tfbm9lcnIoZXJyb3JDb2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpbnQgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fQ2hlY2tfbm9FcnIKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX0NoZWNrX25vRXJyKGVycm9yQ29kZSkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX0NoZWNrX25vRXJyKGVycm9yQ29kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGxvbmcgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KDAgIT0gZXZhbE9uY2VFcnJvckNvZGUsIDApICkgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsIDAsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgZXZhbE9uY2VFcnJvckNvZGUgKTsgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCistCisgLyoKKy0gKiAgY2hlY2tfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkKKysgKiAgX19DaGVja19ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGNoZWNrX25vZXJyX3N0cmluZygpIGRvZXMgbm90aGluZyBhbmQgcHJvZHVjZXMKK0BAIC0zNDQsMzAgKzM4MSwyNiBAQAorICAqICAgIG1lc3NhZ2U6CisgICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgY2hlY2tfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkKKy0jZWxzZQorLSAgICNkZWZpbmUgY2hlY2tfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpbnQgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBtZXNzYWdlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fQ2hlY2tfbm9FcnJfU3RyaW5nCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19DaGVja19ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fQ2hlY2tfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgMCwgbWVzc2FnZSwgX19GSUxFX18sIF9fTElORV9fLCBldmFsT25jZUVycm9yQ29kZSApOyBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKy0KKyAvKgorLSAqICB2ZXJpZnkoYXNzZXJ0aW9uKQorKyAqICBfX1ZlcmlmeShhc3NlcnRpb24pCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZXZhbHVhdGUgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uLCBidXQgaWdub3JlCitAQCAtMzgxLDM4ICs0MTQsMzUgQEAKKyAgKiAgICBhc3NlcnRpb246CisgICogICAgICBUaGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24uCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHZlcmlmeShhc3NlcnRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHZlcmlmeShhc3NlcnRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fVmVyaWZ5CisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19WZXJpZnkoYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX1ZlcmlmeShhc3NlcnRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjYXNzZXJ0aW9uLCAwLCAwLCBfX0ZJTEVfXywgX19MSU5FX18sIDAgKTsgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKy0jZGVmaW5lIG52ZXJpZnkoYXNzZXJ0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICB2ZXJpZnkoIShhc3NlcnRpb24pKQorLQorKyNpZm5kZWYgX19uVmVyaWZ5CisrCSNkZWZpbmUgX19uVmVyaWZ5KGFzc2VydGlvbikJX19WZXJpZnkoIShhc3NlcnRpb24pKQorKyNlbmRpZgorIAorIC8qCistICogIHZlcmlmeV9zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorKyAqICBfX1ZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGV2YWx1YXRlIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiwgYnV0IGlnbm9yZQorQEAgLTQyOSwzOCArNDU5LDM1IEBACisgICogICAgbWVzc2FnZToKKyAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSB2ZXJpZnlfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSB2ZXJpZnlfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNhc3NlcnRpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgbWVzc2FnZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1ZlcmlmeV9TdHJpbmcKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX1ZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fVmVyaWZ5X1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNhc3NlcnRpb24sIDAsIG1lc3NhZ2UsIF9fRklMRV9fLCBfX0xJTkVfXywgMCApOyAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorICNlbmRpZgorIAorLSNkZWZpbmUgbnZlcmlmeV9zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIHZlcmlmeV9zdHJpbmcoIShhc3NlcnRpb24pLCBtZXNzYWdlKQorLQorKyNpZm5kZWYgX19uVmVyaWZ5X1N0cmluZworKwkjZGVmaW5lIF9fblZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgX19WZXJpZnlfU3RyaW5nKCEoYXNzZXJ0aW9uKSwgbWVzc2FnZSkKKysjZW5kaWYKKyAKKyAvKgorLSAqICB2ZXJpZnlfbm9lcnIoZXJyb3JDb2RlKQorKyAqICBfX1ZlcmlmeV9ub0VycihlcnJvckNvZGUpCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogZXZhbHVhdGUgdGhlIGVycm9yQ29kZSBleHByZXNzaW9uLCBidXQgaWdub3JlCitAQCAtNDc0LDM2ICs1MDEsMzIgQEAKKyAgKiAgICBlcnJvckNvZGU6CisgICogICAgICBUaGUgZXhwcmVzc2lvbiB0byBjb21wYXJlIHRvIDAuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHZlcmlmeV9ub2VycihlcnJvckNvZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHZlcmlmeV9ub2VycihlcnJvckNvZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaW50IGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggMCAhPSBldmFsT25jZUVycm9yQ29kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNlcnJvckNvZGUgIiA9PSAwICIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgZXZhbE9uY2VFcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1ZlcmlmeV9ub0VycgorKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fVmVyaWZ5X25vRXJyKGVycm9yQ29kZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19WZXJpZnlfbm9FcnIoZXJyb3JDb2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBsb25nIGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IGV2YWxPbmNlRXJyb3JDb2RlLCAwKSApICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjZXJyb3JDb2RlICIgPT0gMCAiLCAwLCAwLCBfX0ZJTEVfXywgX19MSU5FX18sIGV2YWxPbmNlRXJyb3JDb2RlICk7IFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorICNlbmRpZgorIAorLQorIC8qCistICogIHZlcmlmeV9ub2Vycl9zdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorKyAqICBfX1ZlcmlmeV9ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGV2YWx1YXRlIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiwgYnV0IGlnbm9yZQorQEAgLTUyMCwzNiArNTQzLDcxIEBACisgICogICAgbWVzc2FnZToKKyAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSB2ZXJpZnlfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggMCAhPSAoZXJyb3JDb2RlKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSB2ZXJpZnlfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGludCBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoIDAgIT0gZXZhbE9uY2VFcnJvckNvZGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjZXJyb3JDb2RlICIgPT0gMCAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGV2YWxPbmNlRXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19WZXJpZnlfbm9FcnJfU3RyaW5nCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19WZXJpZnlfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIDAgIT0gKGVycm9yQ29kZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX1ZlcmlmeV9ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGxvbmcgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KDAgIT0gZXZhbE9uY2VFcnJvckNvZGUsIDApICkgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsIDAsIG1lc3NhZ2UsIF9fRklMRV9fLCBfX0xJTkVfXywgZXZhbE9uY2VFcnJvckNvZGUgKTsgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCisrLyoKKysgKiAgX19WZXJpZnlfbm9FcnJfQWN0aW9uKGVycm9yQ29kZSwgYWN0aW9uKQorKyAqCisrICogIFN1bW1hcnk6CisrICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCisrICogICAgZXhlY3V0ZSB0aGUgYWN0aW9uIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgKGJsb2NrKS4KKysgKgorKyAqICAgIE5vbi1wcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGVycm9yQ29kZSBleHByZXNzaW9uIGRvZXMgbm90IGVxdWFsIDAgKG5vRXJyKSwKKysgKiAgICBjYWxsIERFQlVHX0FTU0VSVF9NRVNTQUdFIGFuZCB0aGVuIGV4ZWN1dGUgdGhlIGFjdGlvbiBzdGF0ZW1lbnQgb3IgY29tcG91bmQKKysgKiAgICBzdGF0ZW1lbnQgKGJsb2NrKS4KKysgKgorKyAqICBQYXJhbWV0ZXJzOgorKyAqCisrICogICAgZXJyb3JDb2RlOgorKyAqICAgICAgVGhlIGV4cHJlc3Npb24gdG8gY29tcGFyZSB0byAwLgorKyAqCisrICogICAgYWN0aW9uOgorKyAqICAgICAgVGhlIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgKGJsb2NrKS4KKysgKi8KKysjaWZuZGVmIF9fVmVyaWZ5X25vRXJyX0FjdGlvbgorKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fVmVyaWZ5X25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZWxzZSBkbyB7fSB3aGlsZSAoMCkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX1ZlcmlmeV9ub0Vycl9BY3Rpb24oZXJyb3JDb2RlLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGxvbmcgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSB7ICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgICNlcnJvckNvZGUgIiA9PSAwICIsIDAsIDAsIF9fRklMRV9fLCBfX0xJTkVfXywgMCApOyAgICAgICAgICAgIFwKKysJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBlbHNlIGRvIHt9IHdoaWxlICgwKQorKwkjZW5kaWYKKysjZW5kaWYKKyAKKyAvKgorLSAqICB2ZXJpZnlfYWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKQorKyAqICBfX1ZlcmlmeV9BY3Rpb24oYXNzZXJ0aW9uLCBhY3Rpb24pCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwKK0BAIC01NjcsMzcgKzYyNSwyNyBAQAorICAqICAgIGFjdGlvbjoKKyAgKiAgICAgIFRoZSBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IChibG9jaykuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHZlcmlmeV9hY3Rpb24oYXNzZXJ0aW9uLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSB2ZXJpZnlfYWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgIHsgYWN0aW9uOyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1ZlcmlmeV9BY3Rpb24KKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX1ZlcmlmeV9BY3Rpb24oYXNzZXJ0aW9uLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCWFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGVsc2UgZG8ge30gd2hpbGUgKDApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19WZXJpZnlfQWN0aW9uKGFzc2VydGlvbiwgYWN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjYXNzZXJ0aW9uLCAwLCAwLCBfX0ZJTEVfXywgX19MSU5FX18sIDAgKTsgICAgICAgICAgICAgICAgIFwKKysJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBlbHNlIGRvIHt9IHdoaWxlICgwKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKy0KKyAvKgorLSAqICByZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpCisrICogIF9fUmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gZmFsc2UsCitAQCAtNjE0LDQwICs2NjIsMzYgQEAKKyAgKiAgICBleGNlcHRpb25MYWJlbDoKKyAgKiAgICAgIFRoZSBsYWJlbC4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgcmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHJlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNleGNlcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1JlcXVpcmUKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX1JlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19SZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNhc3NlcnRpb24sICNleGNlcHRpb25MYWJlbCwgMCwgX19GSUxFX18sIF9fTElORV9fLCAgMCk7ICAgIFwKKysJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisgI2VuZGlmCisgCistI2RlZmluZSBucmVxdWlyZShhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgcmVxdWlyZSghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsKQorLQorKyNpZm5kZWYgX19uUmVxdWlyZQorKwkjZGVmaW5lIF9fblJlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgIF9fUmVxdWlyZSghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsKQorKyNlbmRpZgorIAorIC8qCistICogIHJlcXVpcmVfYWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysgKiAgX19SZXF1aXJlX0FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwKK0BAIC02NjksNDYgKzcxMyw0NCBAQAorICAqICAgIGFjdGlvbjoKKyAgKiAgICAgIFRoZSBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IChibG9jaykuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHJlcXVpcmVfYWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSByZXF1aXJlX2FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNhc3NlcnRpb24sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjZXhjZXB0aW9uTGFiZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19SZXF1aXJlX0FjdGlvbgorKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9BY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2Vsc2UKKysJICAgI2RlZmluZSBfX1JlcXVpcmVfQWN0aW9uKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjYXNzZXJ0aW9uLCAjZXhjZXB0aW9uTGFiZWwsIDAsICAgX19GSUxFX18sIF9fTElORV9fLCAwKTsgICBcCisrCQkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgX19uUmVxdWlyZV9BY3Rpb24KKysJI2RlZmluZSBfX25SZXF1aXJlX0FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgXAorKwlfX1JlcXVpcmVfQWN0aW9uKCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKyAjZW5kaWYKKyAKKy0jZGVmaW5lIG5yZXF1aXJlX2FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICAgICAgICBcCistICByZXF1aXJlX2FjdGlvbighKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCistCistCisgLyoKKy0gKiAgcmVxdWlyZV9xdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKQorKyAqICBfX1JlcXVpcmVfUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIElmIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gZmFsc2UsIGdvdG8gZXhjZXB0aW9uTGFiZWwuCitAQCAtNzIxLDIxICs3NjMsMjMgQEAKKyAgKiAgICBleGNlcHRpb25MYWJlbDoKKyAgKiAgICAgIFRoZSBsYWJlbC4KKyAgKi8KKy0jZGVmaW5lIHJlcXVpcmVfcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICB9IHdoaWxlICggMCApCistCistI2RlZmluZSBucmVxdWlyZV9xdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgcmVxdWlyZV9xdWlldCghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsKQorKyNpZm5kZWYgX19SZXF1aXJlX1F1aWV0CisrCSNkZWZpbmUgX19SZXF1aXJlX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICB9IHdoaWxlICggMCApCisrI2VuZGlmCisgCisrI2lmbmRlZiBfX25SZXF1aXJlX1F1aWV0CisrCSNkZWZpbmUgX19uUmVxdWlyZV9RdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsKSAgX19SZXF1aXJlX1F1aWV0KCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwpCisrI2VuZGlmCisgCisgLyoKKy0gKiAgcmVxdWlyZV9hY3Rpb25fcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorKyAqICBfX1JlcXVpcmVfQWN0aW9uX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIElmIHRoZSBhc3NlcnRpb24gZXhwcmVzc2lvbiBldmFsdWF0ZXMgdG8gZmFsc2UsIGV4ZWN1dGUgdGhlIGFjdGlvbgorQEAgLTc1MiwyNCArNzk2LDI3IEBACisgICogICAgYWN0aW9uOgorICAqICAgICAgVGhlIHN0YXRlbWVudCBvciBjb21wb3VuZCBzdGF0ZW1lbnQgKGJsb2NrKS4KKyAgKi8KKy0jZGVmaW5lIHJlcXVpcmVfYWN0aW9uX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgICAgICAgICAgICAgICBcCistICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICB9IHdoaWxlICggMCApCistCistI2RlZmluZSBucmVxdWlyZV9hY3Rpb25fcXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgICAgXAorLSAgcmVxdWlyZV9hY3Rpb25fcXVpZXQoIShhc3NlcnRpb24pLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorLQorKyNpZm5kZWYgX19SZXF1aXJlX0FjdGlvbl9RdWlldAorKwkjZGVmaW5lIF9fUmVxdWlyZV9BY3Rpb25fUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgICBcCisrCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgfSB3aGlsZSAoIDAgKQorKyNlbmRpZgorKworKyNpZm5kZWYgX19uUmVxdWlyZV9BY3Rpb25fUXVpZXQKKysJI2RlZmluZSBfX25SZXF1aXJlX0FjdGlvbl9RdWlldChhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgICBcCisrCQlfX1JlcXVpcmVfQWN0aW9uX1F1aWV0KCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysjZW5kaWYKKyAKKyAvKgorLSAqICByZXF1aXJlX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKQorKyAqICBfX1JlcXVpcmVfU3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCisgICoKKyAgKiAgU3VtbWFyeToKKyAgKiAgICBQcm9kdWN0aW9uIGJ1aWxkczogaWYgdGhlIGFzc2VydGlvbiBleHByZXNzaW9uIGV2YWx1YXRlcyB0byBmYWxzZSwKK0BAIC03ODksNDAgKzgzNiwzOCBAQAorICAqICAgIG1lc3NhZ2U6CisgICogICAgICBUaGUgQyBzdHJpbmcgdG8gZGlzcGxheS4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgcmVxdWlyZV9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHJlcXVpcmVfc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAhKGFzc2VydGlvbikgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Fzc2VydGlvbiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNleGNlcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBtZXNzYWdlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1JlcXVpcmVfU3RyaW5nCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKSAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoIShhc3NlcnRpb24pLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgaWYgKCBfX2J1aWx0aW5fZXhwZWN0KCEoYXNzZXJ0aW9uKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgICNhc3NlcnRpb24sICNleGNlcHRpb25MYWJlbCwgIG1lc3NhZ2UsICBfX0ZJTEVfXywgX19MSU5FX18sIDApOyBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorKyNlbmRpZgorKworKyNpZm5kZWYgX19uUmVxdWlyZV9TdHJpbmcKKysJI2RlZmluZSBfX25SZXF1aXJlX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBzdHJpbmcpICAgICAgICAgICAgICAgICAgXAorKwkJX19SZXF1aXJlX1N0cmluZyghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsLCBzdHJpbmcpCisgI2VuZGlmCisgCistI2RlZmluZSBucmVxdWlyZV9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgc3RyaW5nKSAgICAgICAgICAgICAgICAgICAgXAorLSAgcmVxdWlyZV9zdHJpbmcoIShhc3NlcnRpb24pLCBleGNlcHRpb25MYWJlbCwgc3RyaW5nKQorLQorLQorIC8qCistICogIHJlcXVpcmVfYWN0aW9uX3N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisrICogIF9fUmVxdWlyZV9BY3Rpb25fU3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgYXNzZXJ0aW9uIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGZhbHNlLAorQEAgLTg0Nyw0NiArODkyLDQ0IEBACisgICogICAgbWVzc2FnZToKKyAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSByZXF1aXJlX2FjdGlvbl9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggIShhc3NlcnRpb24pICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKy0jZWxzZQorLSAgICNkZWZpbmUgcmVxdWlyZV9hY3Rpb25fc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoICEoYXNzZXJ0aW9uKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjYXNzZXJ0aW9uLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2V4Y2VwdGlvbkxhYmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fUmVxdWlyZV9BY3Rpb25fU3RyaW5nCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCghKGFzc2VydGlvbiksIDApICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjYXNzZXJ0aW9uLCAjZXhjZXB0aW9uTGFiZWwsICBtZXNzYWdlLCAgX19GSUxFX18sICBfX0xJTkVfXywgMCk7IFwKKysJCQkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gd2hpbGUgKCAwICkKKysJI2VuZGlmCisrI2VuZGlmCisrCisrI2lmbmRlZiBfX25SZXF1aXJlX0FjdGlvbl9TdHJpbmcKKysJI2RlZmluZSBfX25SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgICBcCisrCQlfX1JlcXVpcmVfQWN0aW9uX1N0cmluZyghKGFzc2VydGlvbiksIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisgI2VuZGlmCisgCistI2RlZmluZSBucmVxdWlyZV9hY3Rpb25fc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgICAgXAorLSAgcmVxdWlyZV9hY3Rpb25fc3RyaW5nKCEoYXNzZXJ0aW9uKSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkKKy0KKy0KKyAvKgorLSAqICByZXF1aXJlX25vZXJyKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpCisrICogIF9fUmVxdWlyZV9ub0VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCitAQCAtOTAzLDM3ICs5NDYsMzQgQEAKKyAgKiAgICBleGNlcHRpb25MYWJlbDoKKyAgKiAgICAgIFRoZSBsYWJlbC4KKyAgKi8KKy0jaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorLSAgICNkZWZpbmUgcmVxdWlyZV9ub2VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoIDAgIT0gKGVycm9yQ29kZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnIoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaW50IGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggMCAhPSBldmFsT25jZUVycm9yQ29kZSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNlcnJvckNvZGUgIiA9PSAwICIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjZXhjZXB0aW9uTGFiZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fRklMRV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0xJTkVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgZXZhbE9uY2VFcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorKyNpZm5kZWYgX19SZXF1aXJlX25vRXJyCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSAoZXJyb3JDb2RlKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKSAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgICNleGNlcHRpb25MYWJlbCwgIDAsICBfX0ZJTEVfXywgX19MSU5FX18sIGV2YWxPbmNlRXJyb3JDb2RlKTsgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKyAvKgorLSAqICByZXF1aXJlX25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisrICogIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb24oZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgUHJvZHVjdGlvbiBidWlsZHM6IGlmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCitAQCAtOTU1LDQ0ICs5OTUsNDAgQEAKKyAgKiAgICBhY3Rpb246CisgICogICAgICBUaGUgc3RhdGVtZW50IG9yIGNvbXBvdW5kIHN0YXRlbWVudCAoYmxvY2spLgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGlmICggMCAhPSAoZXJyb3JDb2RlKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKy0jZWxzZQorLSAgICNkZWZpbmUgcmVxdWlyZV9ub2Vycl9hY3Rpb24oZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICAgIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpbnQgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNleGNlcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCisrI2lmbmRlZiBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uCisrCSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSAoZXJyb3JDb2RlKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZWxzZQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb24oZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICAgICBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgI2V4Y2VwdGlvbkxhYmVsLCAgMCwgIF9fRklMRV9fLCBfX0xJTkVfXywgIGV2YWxPbmNlRXJyb3JDb2RlKTsgXAorKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKyAjZW5kaWYKKyAKKy0KKyAvKgorLSAqICByZXF1aXJlX25vZXJyX3F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpCisrICogIF9fUmVxdWlyZV9ub0Vycl9RdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKQorICAqCisgICogIFN1bW1hcnk6CisgICogICAgSWYgdGhlIGVycm9yQ29kZSBleHByZXNzaW9uIGRvZXMgbm90IGVxdWFsIDAgKG5vRXJyKSwKK0BAIC0xMDA2LDE4ICsxMDQyLDE5IEBACisgICogICAgZXhjZXB0aW9uTGFiZWw6CisgICogICAgICBUaGUgbGFiZWwuCisgICovCistI2RlZmluZSByZXF1aXJlX25vZXJyX3F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgfSB3aGlsZSAoIDAgKQorLQorKyNpZm5kZWYgX19SZXF1aXJlX25vRXJyX1F1aWV0CisrCSNkZWZpbmUgX19SZXF1aXJlX25vRXJyX1F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICAgICAgICAgICAgICAgICAgICAgIFwKKysJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IChlcnJvckNvZGUpLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICB9IHdoaWxlICggMCApCisrI2VuZGlmCisgCisgLyoKKy0gKiAgcmVxdWlyZV9ub2Vycl9hY3Rpb25fcXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorKyAqICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIElmIHRoZSBlcnJvckNvZGUgZXhwcmVzc2lvbiBkb2VzIG5vdCBlcXVhbCAwIChub0VyciksCitAQCAtMTAzNSwyMSArMTA3MiwyMiBAQAorICAqICAgIGFjdGlvbjoKKyAgKiAgICAgIFRoZSBzdGF0ZW1lbnQgb3IgY29tcG91bmQgc3RhdGVtZW50IChibG9jaykuCisgICovCistI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbl9xdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICAgICAgICAgXAorLSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBhY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgfSB3aGlsZSAoIDAgKQorLQorKyNpZm5kZWYgX19SZXF1aXJlX25vRXJyX0FjdGlvbl9RdWlldAorKwkjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fUXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgICAgICBcCisrCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSAoZXJyb3JDb2RlKSwgMCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCSAgfSB3aGlsZSAoIDAgKQorKyNlbmRpZgorIAorIC8qCistICogIHJlcXVpcmVfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCisrICogIF9fUmVxdWlyZV9ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgbWVzc2FnZSkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gZG9lcyBub3QgZXF1YWwgMCAobm9FcnIpLAorQEAgLTEwNjksMzggKzExMDcsMzQgQEAKKyAgKiAgICBtZXNzYWdlOgorICAqICAgICAgVGhlIEMgc3RyaW5nIHRvIGRpc3BsYXkuCisgICovCistI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKy0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICAgICAgICAgICBcCistICAgICAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IChlcnJvckNvZGUpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgfSB3aGlsZSAoIDAgKQorLSNlbHNlCistICAgI2RlZmluZSByZXF1aXJlX25vZXJyX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKSAgICAgICAgICAgXAorLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIGludCBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoIDAgIT0gZXZhbE9uY2VFcnJvckNvZGUgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBERUJVR19BU1NFUlRfTUVTU0FHRSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICAjZXJyb3JDb2RlICIgPT0gMCAiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2V4Y2VwdGlvbkxhYmVsLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBfX0ZJTEVfXywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19MSU5FX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGV2YWxPbmNlRXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgIH0gd2hpbGUgKCAwICkKKysjaWZuZGVmIF9fUmVxdWlyZV9ub0Vycl9TdHJpbmcKKysJI2lmIERFQlVHX0FTU0VSVF9QUk9EVUNUSU9OX0NPREUKKysJICAgI2RlZmluZSBfX1JlcXVpcmVfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICAgICAgICAgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IChlcnJvckNvZGUpLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyX1N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlKSAgICAgICAgIFwKKysJCSAgZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBsb25nIGV2YWxPbmNlRXJyb3JDb2RlID0gKGVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IGV2YWxPbmNlRXJyb3JDb2RlLCAwKSApICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgREVCVUdfQVNTRVJUX0NPTVBPTkVOVF9OQU1FX1NUUklORywgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkJICAjZXJyb3JDb2RlICIgPT0gMCAiLCAgI2V4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlLCBfX0ZJTEVfXywgIF9fTElORV9fLCAgZXZhbE9uY2VFcnJvckNvZGUpOyBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbmRpZgorICNlbmRpZgorIAorLQorIC8qCistICogIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisrICogIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkKKyAgKgorICAqICBTdW1tYXJ5OgorICAqICAgIFByb2R1Y3Rpb24gYnVpbGRzOiBpZiB0aGUgZXJyb3JDb2RlIGV4cHJlc3Npb24gZG9lcyBub3QgZXF1YWwgMCAobm9FcnIpLAorQEAgLTExMjUsNDEgKzExNTksMjcwIEBACisgICogICAgbWVzc2FnZToKKyAgKiAgICAgIFRoZSBDIHN0cmluZyB0byBkaXNwbGF5LgorICAqLworLSNpZiBERUJVR19BU1NFUlRfUFJPRFVDVElPTl9DT0RFCistICAgI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbl9zdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKVwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpZiAoIDAgIT0gKGVycm9yQ29kZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2Vsc2UKKy0gICAjZGVmaW5lIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpIFwKKy0gICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICBpbnQgZXZhbE9uY2VFcnJvckNvZGUgPSAoZXJyb3JDb2RlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgaWYgKCAwICE9IGV2YWxPbmNlRXJyb3JDb2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgREVCVUdfQVNTRVJUX01FU1NBR0UoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBERUJVR19BU1NFUlRfQ09NUE9ORU5UX05BTUVfU1RSSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgI2Vycm9yQ29kZSAiID09IDAgIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgICNleGNlcHRpb25MYWJlbCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBtZXNzYWdlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICAgICAgX19GSUxFX18sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIF9fTElORV9fLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgICAgICBldmFsT25jZUVycm9yQ29kZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICAgICAgICAgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCistICAgICAgICAgICAgICBnb3RvIGV4Y2VwdGlvbkxhYmVsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorLSAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKy0gICAgICB9IHdoaWxlICggMCApCistI2VuZGlmCisrI2lmbmRlZiBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1N0cmluZworKwkjaWYgREVCVUdfQVNTRVJUX1BST0RVQ1RJT05fQ09ERQorKwkgICAjZGVmaW5lIF9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgXAorKwkJICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIGlmICggX19idWlsdGluX2V4cGVjdCgwICE9IChlcnJvckNvZGUpLCAwKSApICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgYWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCSAgZ290byBleGNlcHRpb25MYWJlbDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJICB9IHdoaWxlICggMCApCisrCSNlbHNlCisrCSAgICNkZWZpbmUgX19SZXF1aXJlX25vRXJyX0FjdGlvbl9TdHJpbmcoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSBcCisrCQkgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCSAgbG9uZyBldmFsT25jZUVycm9yQ29kZSA9IChlcnJvckNvZGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICBpZiAoIF9fYnVpbHRpbl9leHBlY3QoMCAhPSBldmFsT25jZUVycm9yQ29kZSwgMCkgKSAgICAgICAgICAgICAgICAgIFwKKysJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIERFQlVHX0FTU0VSVF9NRVNTQUdFKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIERFQlVHX0FTU0VSVF9DT01QT05FTlRfTkFNRV9TVFJJTkcsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJCSAgI2Vycm9yQ29kZSAiID09IDAgIiwgI2V4Y2VwdGlvbkxhYmVsLCBtZXNzYWdlLCBfX0ZJTEVfXywgX19MSU5FX18sIGV2YWxPbmNlRXJyb3JDb2RlKTsgXAorKwkJCQkgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJCQkgIGFjdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkJCQkgIGdvdG8gZXhjZXB0aW9uTGFiZWw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisrCQkJICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKysJCSAgfSB3aGlsZSAoIDAgKQorKwkjZW5kaWYKKysjZW5kaWYKKysKKysvKgorKyAqICBfX0NoZWNrX0NvbXBpbGVfVGltZShleHByKQorKyAqCisrICogIFN1bW1hcnk6CisrICogICAgYW55IGJ1aWxkOiBpZiB0aGUgZXhwcmVzc2lvbiBpcyBub3QgdHJ1ZSwgZ2VuZXJhdGVkIGEgY29tcGlsZSB0aW1lIGVycm9yLgorKyAqCisrICogIFBhcmFtZXRlcnM6CisrICoKKysgKiAgICBleHByOgorKyAqICAgICAgVGhlIGNvbXBpbGUgdGltZSBleHByZXNzaW9uIHRoYXQgc2hvdWxkIGV2YWx1YXRlIHRvIG5vbi16ZXJvLgorKyAqCisrICogIERpc2N1c3Npb246CisrICogICAgIFRoaXMgZGVjbGFyZXMgYW4gYXJyYXkgd2l0aCBhIHNpemUgdGhhdCBpcyBkZXRlcm1pbmVkIGJ5IGEgY29tcGlsZS10aW1lIGV4cHJlc3Npb24uCisrICogICAgIElmIGZhbHNlLCBpdCBkZWNsYXJlcyBhIG5lZ2F0aXZlbHkgc2l6ZWQgYXJyYXksIHdoaWNoIGdlbmVyYXRlcyBhIGNvbXBpbGUtdGltZSBlcnJvci4KKysgKgorKyAqIEV4YW1wbGVzOgorKyAqICAgICBfX0NoZWNrX0NvbXBpbGVfVGltZSggc2l6ZW9mKCBpbnQgKSA9PSA0ICk7CisrICogICAgIF9fQ2hlY2tfQ29tcGlsZV9UaW1lKCBvZmZzZXRvZiggTXlTdHJ1Y3QsIG15RmllbGQgKSA9PSA0ICk7CisrICogICAgIF9fQ2hlY2tfQ29tcGlsZV9UaW1lKCAoIGtNeUJ1ZmZlclNpemUgJSA1MTIgKSA9PSAwICk7CisrICoKKysgKiAgTm90ZTogVGhpcyBvbmx5IHdvcmtzIHdpdGggY29tcGlsZS10aW1lIGV4cHJlc3Npb25zLgorKyAqICBOb3RlOiBUaGlzIG9ubHkgd29ya3MgaW4gcGxhY2VzIHdoZXJlIGV4dGVybiBkZWNsYXJhdGlvbnMgYXJlIGFsbG93ZWQgKGUuZy4gZ2xvYmFsIHNjb3BlKS4KKysgKi8KKysjaWZuZGVmIF9fQ2hlY2tfQ29tcGlsZV9UaW1lCisrICAgICNpZmRlZiBfX0dOVUNfXyAKKysgICAgICAgICNkZWZpbmUgX19DaGVja19Db21waWxlX1RpbWUoIGV4cHIgKSAgICBcCisrICAgICAgICAgICAgZXh0ZXJuIGludCBjb21waWxlX3RpbWVfYXNzZXJ0X2ZhaWxlZFsgKCBleHByICkgPyAxIDogLTEgXSBfX2F0dHJpYnV0ZV9fKCAoIHVudXNlZCApICkKKysgICAgI2Vsc2UKKysgICAgICAgICNkZWZpbmUgX19DaGVja19Db21waWxlX1RpbWUoIGV4cHIgKSAgICBcCisrICAgICAgICAgICAgZXh0ZXJuIGludCBjb21waWxlX3RpbWVfYXNzZXJ0X2ZhaWxlZFsgKCBleHByICkgPyAxIDogLTEgXQorKyAgICAjZW5kaWYKKysjZW5kaWYKKysKKysvKgorKyAqCUZvciB0aW1lIGltbWVtb3JpYWwsIE1hYyBPUyBYIGhhcyBkZWZpbmVkIHZlcnNpb24gb2YgbW9zdCBvZiB0aGVzZSBtYWNyb3Mgd2l0aG91dCB0aGUgX18gcHJlZml4LCB3aGljaAorKyAqCWNvdWxkIGNvbGxpZGUgd2l0aCBzaW1pbGFybHkgbmFtZWQgZnVuY3Rpb25zIG9yIG1hY3JvcyBpbiB1c2VyIGNvZGUsIGluY2x1ZGluZyBuZXcgZnVuY3Rpb25hbGl0eSBpbgorKyAqCUJvb3N0IGFuZCB0aGUgQysrIHN0YW5kYXJkIGxpYnJhcnkuCisrICoKKysgKglBIGZ1dHVyZSByZWxlYXNlIG9mIE1hYyBPUyBYIHdpbGwgbm8gbG9uZ2VyIGRvIHRoaXMsIGFuZCB3aWxsIHJlcXVpcmUgdGhhdCBjbGllbnRzIG1vdmUgdG8gdGhlCisrICogIG5ldyBtYWNyb3MgYXMgZGVmaW5lZCBhYm92ZS4gIEhvd2V2ZXIsIGluIHRoZSBpbnRlcmltIGJvdGggdGhlIG5ldyBhbmQgb2xkIG1hY3JvcyB3aWxsIHdvcmssIHVubGVzcworKyAqICBjbGllbnRzIGRlZmluZSBhIG1hY3JvIF9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUyBiZWZvcmUgdGhpcyBmaWxlIGlzIGluY2x1ZGVkCisrICogIGluIHRoZWlyIGNvbXBpbGF0aW9ucy4gIENsaWVudHMgd2hvIGRvIG5vdCB3YW50IHRoZSBvbGRlciBtYWNyb3MgZGVmaW5lZCBjYW4gYWNjb21wbGlzaCB0aGlzIGJ5IGFkZGluZworKyAqICAgICNkZWZpbmUgX19BU1NFUlRfTUFDUk9TX0RFRklORV9WRVJTSU9OU19XSVRIT1VUX1VOREVSU0NPUkVTIDAKKysgKiAgYXQgdGhlIHRvcCBvZiB0aGVpciBzb3VyY2VzLCBvciBteSBhZGRpbmcgLURfX0FTU0VSVF9NQUNST1NfREVGSU5FX1ZFUlNJT05TX1dJVEhPVVRfVU5ERVJTQ09SRVM9MCB0byB0aGUKKysgKiAgZ2NjIGNvbXBpbGF0aW9uIG9wdGlvbnMuCisrICoKKysgKiAgVG8gYWlkIHVzZXJzIG9mIHRoZXNlIG1hY3JvcyBpbiBjb252ZXJ0aW5nIHRoZWlyIHNvdXJjZXMsIHRoZSBmb2xsb3dpbmcgdG9wcyBzY3JpcHQgd2lsbCBjb252ZXJ0IHVzYWdlcworKyAqICBvZiB0aGUgb2xkIG1hY3JvcyBpbnRvIHRoZSBuZXcgZXF1aXZhbGVudHMuICBUbyBkbyBzbywgaW4gVGVybWluYWwgZ28gaW50byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlCisrICogIHNvdXJjZXMgdG8gYmUgY29udmVydGVkIGFuZCBydW4gdGhpcyBjb21tYW5kLgorKyAqCisrICAgIGZpbmQgLiAtbmFtZSAnKi5bY3xjY3xjcHxjcHB8bXxtbXxoXScgLXByaW50MCB8ICB4YXJncyAtMCB0b3BzIC12ZXJib3NlIFwKKysgICAgICByZXBsYWNlICJjaGVjayg8YiBhcmdzPikiIHdpdGggIl9fQ2hlY2soPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgImNoZWNrX25vZXJyKDxiIGFyZ3M+KSIgd2l0aCAiX19DaGVja19ub0Vycig8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAiY2hlY2tfbm9lcnJfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19DaGVja19ub0Vycl9TdHJpbmcoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgImNoZWNrX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fQ2hlY2tfU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlKDxiIGFyZ3M+KSIgd2l0aCAiX19SZXF1aXJlKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX2FjdGlvbig8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9BY3Rpb24oPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfYWN0aW9uX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9BY3Rpb25fU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX25vZXJyKDxiIGFyZ3M+KSIgd2l0aCAiX19SZXF1aXJlX25vRXJyKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX25vZXJyX2FjdGlvbig8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9BY3Rpb24oPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX25vZXJyX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9TdHJpbmcoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19SZXF1aXJlX1N0cmluZyg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAidmVyaWZ5KDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnkoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInZlcmlmeV9hY3Rpb24oPGIgYXJncz4pIiB3aXRoICJfX1ZlcmlmeV9BY3Rpb24oPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInZlcmlmeV9ub2Vycig8YiBhcmdzPikiIHdpdGggIl9fVmVyaWZ5X25vRXJyKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJ2ZXJpZnlfbm9lcnJfYWN0aW9uKDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnlfbm9FcnJfQWN0aW9uKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJ2ZXJpZnlfbm9lcnJfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnlfbm9FcnJfU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJ2ZXJpZnlfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19WZXJpZnlfU3RyaW5nKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJuY2hlY2soPGIgYXJncz4pIiB3aXRoICJfX25DaGVjayg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAibmNoZWNrX3N0cmluZyg8YiBhcmdzPikiIHdpdGggIl9fbkNoZWNrX1N0cmluZyg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAibnJlcXVpcmUoPGIgYXJncz4pIiB3aXRoICJfX25SZXF1aXJlKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJucmVxdWlyZV9hY3Rpb24oPGIgYXJncz4pIiB3aXRoICJfX25SZXF1aXJlX0FjdGlvbig8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAibnJlcXVpcmVfYWN0aW9uX3F1aWV0KDxiIGFyZ3M+KSIgd2l0aCAiX19uUmVxdWlyZV9BY3Rpb25fUXVpZXQoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgIm5yZXF1aXJlX2FjdGlvbl9zdHJpbmcoPGIgYXJncz4pIiB3aXRoICJfX25SZXF1aXJlX0FjdGlvbl9TdHJpbmcoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgIm5yZXF1aXJlX3F1aWV0KDxiIGFyZ3M+KSIgd2l0aCAiX19uUmVxdWlyZV9RdWlldCg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAibnJlcXVpcmVfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19uUmVxdWlyZV9TdHJpbmcoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgIm52ZXJpZnkoPGIgYXJncz4pIiB3aXRoICJfX25WZXJpZnkoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgIm52ZXJpZnlfc3RyaW5nKDxiIGFyZ3M+KSIgd2l0aCAiX19uVmVyaWZ5X1N0cmluZyg8YXJncz4pIiBcCisrICAgICAgcmVwbGFjZSAicmVxdWlyZV9hY3Rpb25fcXVpZXQoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfQWN0aW9uX1F1aWV0KDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJyZXF1aXJlX25vZXJyX2FjdGlvbl9xdWlldCg8YiBhcmdzPikiIHdpdGggIl9fUmVxdWlyZV9ub0Vycl9BY3Rpb25fUXVpZXQoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfbm9lcnJfcXVpZXQoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfbm9FcnJfUXVpZXQoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgInJlcXVpcmVfcXVpZXQoPGIgYXJncz4pIiB3aXRoICJfX1JlcXVpcmVfUXVpZXQoPGFyZ3M+KSIgXAorKyAgICAgIHJlcGxhY2UgImNoZWNrX2NvbXBpbGVfdGltZSg8YiBhcmdzPikiIHdpdGggIl9fQ2hlY2tfQ29tcGlsZV9UaW1lKDxhcmdzPikiIFwKKysgICAgICByZXBsYWNlICJkZWJ1Z19zdHJpbmcoPGIgYXJncz4pIiB3aXRoICJfX0RlYnVnX1N0cmluZyg8YXJncz4pIgorKyAqCisrICovCisrCisrI2lmbmRlZiBfX0FTU0VSVF9NQUNST1NfREVGSU5FX1ZFUlNJT05TX1dJVEhPVVRfVU5ERVJTQ09SRVMKKysJLyogSWYgd2UgaGF2ZW4ndCBzZXQgdGhpcyB5ZXQsIGl0IGRlZmF1bHRzIHRvIG9uLiAgSW4gdGhlIG5leHQgcmVsZWFzZSwgdGhpcyB3aWxsIGRlZmF1bHQgdG8gb2ZmLiAqLworKwkjZGVmaW5lCV9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUwkxCisrI2VuZGlmCisrCisrI2lmCV9fQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUworKworKwkjaWZuZGVmIGNoZWNrCisrCSNkZWZpbmUgY2hlY2soYXNzZXJ0aW9uKSAgX19DaGVjayhhc3NlcnRpb24pCisrCSNlbmRpZgorKworKwkjaWZuZGVmIGNoZWNrX25vZXJyCisrCSNkZWZpbmUgY2hlY2tfbm9lcnIoZXJyb3JDb2RlKSAgX19DaGVja19ub0VycihlcnJvckNvZGUpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIGNoZWNrX25vZXJyX3N0cmluZworKwkJI2RlZmluZSBjaGVja19ub2Vycl9zdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKSAgX19DaGVja19ub0Vycl9TdHJpbmcoZXJyb3JDb2RlLCBtZXNzYWdlKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiBjaGVja19zdHJpbmcKKysJCSNkZWZpbmUgY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgIF9fQ2hlY2tfU3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZQorKwkJI2RlZmluZSByZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX1JlcXVpcmUoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZV9hY3Rpb24KKysJCSNkZWZpbmUgcmVxdWlyZV9hY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgX19SZXF1aXJlX0FjdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHJlcXVpcmVfYWN0aW9uX3N0cmluZworKwkJI2RlZmluZSByZXF1aXJlX2FjdGlvbl9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKSAgX19SZXF1aXJlX0FjdGlvbl9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uLCBtZXNzYWdlKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiByZXF1aXJlX25vZXJyCisrCQkjZGVmaW5lIHJlcXVpcmVfbm9lcnIoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkgIF9fUmVxdWlyZV9ub0VycihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiByZXF1aXJlX25vZXJyX2FjdGlvbgorKwkJI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZV9ub2Vycl9hY3Rpb25fc3RyaW5nCisrCQkjZGVmaW5lIHJlcXVpcmVfbm9lcnJfYWN0aW9uX3N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1N0cmluZyhlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHJlcXVpcmVfbm9lcnJfc3RyaW5nCisrCQkjZGVmaW5lIHJlcXVpcmVfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICBfX1JlcXVpcmVfbm9FcnJfU3RyaW5nKGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHJlcXVpcmVfc3RyaW5nCisrCQkjZGVmaW5lIHJlcXVpcmVfc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpICBfX1JlcXVpcmVfU3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHZlcmlmeQorKwkJI2RlZmluZSB2ZXJpZnkoYXNzZXJ0aW9uKSBfX1ZlcmlmeShhc3NlcnRpb24pCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHZlcmlmeV9hY3Rpb24KKysJCSNkZWZpbmUgdmVyaWZ5X2FjdGlvbihhc3NlcnRpb24sIGFjdGlvbikgIF9fVmVyaWZ5X0FjdGlvbihhc3NlcnRpb24sIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgdmVyaWZ5X25vZXJyCisrCQkjZGVmaW5lIHZlcmlmeV9ub2VycihlcnJvckNvZGUpICBfX1ZlcmlmeV9ub0VycihlcnJvckNvZGUpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHZlcmlmeV9ub2Vycl9hY3Rpb24KKysJCSNkZWZpbmUgdmVyaWZ5X25vZXJyX2FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikgIF9fVmVyaWZ5X25vRXJyX0FjdGlvbihlcnJvckNvZGUsIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgdmVyaWZ5X25vZXJyX3N0cmluZworKwkJI2RlZmluZSB2ZXJpZnlfbm9lcnJfc3RyaW5nKGVycm9yQ29kZSwgbWVzc2FnZSkgIF9fVmVyaWZ5X25vRXJyX1N0cmluZyhlcnJvckNvZGUsIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHZlcmlmeV9zdHJpbmcKKysJCSNkZWZpbmUgdmVyaWZ5X3N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpICBfX1ZlcmlmeV9TdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiBuY2hlY2sKKysJCSNkZWZpbmUgbmNoZWNrKGFzc2VydGlvbikgIF9fbkNoZWNrKGFzc2VydGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgbmNoZWNrX3N0cmluZworKwkJI2RlZmluZSBuY2hlY2tfc3RyaW5nKGFzc2VydGlvbiwgbWVzc2FnZSkgIF9fbkNoZWNrX1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIG5yZXF1aXJlCisrCQkjZGVmaW5lIG5yZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX25SZXF1aXJlKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIG5yZXF1aXJlX2FjdGlvbgorKwkJI2RlZmluZSBucmVxdWlyZV9hY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKSAgX19uUmVxdWlyZV9BY3Rpb24oYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiBucmVxdWlyZV9hY3Rpb25fcXVpZXQKKysJCSNkZWZpbmUgbnJlcXVpcmVfYWN0aW9uX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgIF9fblJlcXVpcmVfQWN0aW9uX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgbnJlcXVpcmVfYWN0aW9uX3N0cmluZworKwkJI2RlZmluZSBucmVxdWlyZV9hY3Rpb25fc3RyaW5nKGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbiwgbWVzc2FnZSkgIF9fblJlcXVpcmVfQWN0aW9uX1N0cmluZyhhc3NlcnRpb24sIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24sIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIG5yZXF1aXJlX3F1aWV0CisrCQkjZGVmaW5lIG5yZXF1aXJlX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX25SZXF1aXJlX1F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIG5yZXF1aXJlX3N0cmluZworKwkJI2RlZmluZSBucmVxdWlyZV9zdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgc3RyaW5nKSAgX19uUmVxdWlyZV9TdHJpbmcoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgc3RyaW5nKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiBudmVyaWZ5CisrCQkjZGVmaW5lIG52ZXJpZnkoYXNzZXJ0aW9uKSAgX19uVmVyaWZ5KGFzc2VydGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgbnZlcmlmeV9zdHJpbmcKKysJCSNkZWZpbmUgbnZlcmlmeV9zdHJpbmcoYXNzZXJ0aW9uLCBtZXNzYWdlKSAgX19uVmVyaWZ5X1N0cmluZyhhc3NlcnRpb24sIG1lc3NhZ2UpCisrCSNlbmRpZgorKworKwkjaWZuZGVmIHJlcXVpcmVfYWN0aW9uX3F1aWV0CisrCQkjZGVmaW5lIHJlcXVpcmVfYWN0aW9uX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikgIF9fUmVxdWlyZV9BY3Rpb25fUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCwgYWN0aW9uKQorKwkjZW5kaWYKKysKKysJI2lmbmRlZiByZXF1aXJlX25vZXJyX2FjdGlvbl9xdWlldAorKwkJI2RlZmluZSByZXF1aXJlX25vZXJyX2FjdGlvbl9xdWlldChlcnJvckNvZGUsIGV4Y2VwdGlvbkxhYmVsLCBhY3Rpb24pICBfX1JlcXVpcmVfbm9FcnJfQWN0aW9uX1F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwsIGFjdGlvbikKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZV9ub2Vycl9xdWlldAorKwkJI2RlZmluZSByZXF1aXJlX25vZXJyX3F1aWV0KGVycm9yQ29kZSwgZXhjZXB0aW9uTGFiZWwpICBfX1JlcXVpcmVfbm9FcnJfUXVpZXQoZXJyb3JDb2RlLCBleGNlcHRpb25MYWJlbCkKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgcmVxdWlyZV9xdWlldAorKwkJI2RlZmluZSByZXF1aXJlX3F1aWV0KGFzc2VydGlvbiwgZXhjZXB0aW9uTGFiZWwpICBfX1JlcXVpcmVfUXVpZXQoYXNzZXJ0aW9uLCBleGNlcHRpb25MYWJlbCkKKysJI2VuZGlmCisrCisrCSNpZm5kZWYgY2hlY2tfY29tcGlsZV90aW1lCisrCQkjZGVmaW5lIGNoZWNrX2NvbXBpbGVfdGltZSggZXhwciApICBfX0NoZWNrX0NvbXBpbGVfVGltZSggZXhwciApCisrCSNlbmRpZgorKworKwkjaWZuZGVmIGRlYnVnX3N0cmluZworKwkJI2RlZmluZSBkZWJ1Z19zdHJpbmcobWVzc2FnZSkgIF9fRGVidWdfU3RyaW5nKG1lc3NhZ2UpCisrCSNlbmRpZgorKwkKKysjZW5kaWYJLyogQVNTRVJUX01BQ1JPU19ERUZJTkVfVkVSU0lPTlNfV0lUSE9VVF9VTkRFUlNDT1JFUyAqLworIAorIAorICNlbmRpZiAvKiBfX0FTU0VSVE1BQ1JPU19fICovCistCmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01My5kZXNjcmlwdGlvbiBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTUzLmRlc2NyaXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YmZjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01My5kZXNjcmlwdGlvbgpAQCAtMCwwICsxLDIgQEAKK1RoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBwZXJmb3JtaW5nIGRlYnVnIGNvbnNpc3RlbmN5IGNoZWNrcyBvbgorbWVtb3J5IGRlYWxsb2NhdGVkIGJ5IHRoZSBzeXN0ZW0gYWxsb2NhdG9yLgpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTMucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01My5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjZjMzdmCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTMucGF0Y2gKQEAgLTAsMCArMSwyNiBAQAorZGlmZiAtYXJ1TiBhL0NGQmFzZS5jIGIvQ0ZCYXNlLmMKKy0tLSBhL0NGQmFzZS5jCTIwMTEtMDgtMTAgMTY6Mjk6MDQuODQxMDgzNjAyIC0wNzAwCisrKysgYi9DRkJhc2UuYwkyMDExLTA4LTEwIDE1OjQ2OjQ0LjAwMDAwMDAwMCAtMDcwMAorQEAgLTQ0LDYgKzQ0LDcgQEAKKyAjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisgI2luY2x1ZGUgPGRsZmNuLmg+CisgI2VsaWYgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKysjaW5jbHVkZSA8bWNoZWNrLmg+CisgI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyAjZWxpZiBERVBMT1lNRU5UX1RBUkdFVF9XSU5ET1dTCisgI2luY2x1ZGUgPHdpbmRvd3MuaD4KK0BAIC0yODEsNiArMjgyLDE0IEBACisgfQorIAorIHN0YXRpYyB2b2lkIF9fQ0ZBbGxvY2F0b3JTeXN0ZW1EZWFsbG9jYXRlKHZvaWQgKnB0ciwgdm9pZCAqaW5mbykgeworKyNpZiBkZWZpbmVkKERFQlVHKQorKyAgICBjb25zdCBlbnVtIG1jaGVja19zdGF0dXMgc3RhdHVzID0gbXByb2JlKHB0cik7CisrCisrICAgIENGQXNzZXJ0MyhzdGF0dXMgPT0gTUNIRUNLX09LIHx8IHN0YXR1cyA9PSBNQ0hFQ0tfRElTQUJMRUQsCisrICAgICAgICAgICAgICBfX2tDRkxvZ0Fzc2VydGlvbiwgIiVzOiBwdHIgJXAgc3RhdHVzICVkIiwKKysgICAgICAgICAgICAgIF9fUFJFVFRZX0ZVTkNUSU9OX18sIHB0ciwgc3RhdHVzKTsKKysjZW5kaWYKKysKKyAgICAgZnJlZShwdHIpOworIH0KKyAjZW5kaWYKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU0LmRlc2NyaXB0aW9uIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTQuZGVzY3JpcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxODA2OQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU0LmRlc2NyaXB0aW9uCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBwYXRjaCBhZGRzIHByZXByb2Nlc3NvciBjb21tZW50IGxhYmVscyBhdCB0aGUgZW5kIG9mIHNldmVyYWwgbG9uZworY29uZGl0aW9uYWwgYmxvY2tzLgpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTQucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01NC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjVhYjA1Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTQucGF0Y2gKQEAgLTAsMCArMSwzMCBAQAorZGlmZiAtYXJ1TiBhL0NGQmFzZS5jIGIvQ0ZCYXNlLmMKKy0tLSBhL0NGQmFzZS5jCTIwMTEtMDgtMTAgMTY6Mjk6MzUuNDU4MTc4NDkzIC0wNzAwCisrKysgYi9DRkJhc2UuYwkyMDExLTA4LTEwIDE2OjMxOjI3LjAwMDAwMDAwMCAtMDcwMAorQEAgLTI3MCw3ICsyNzAsNyBAQAorICAgICBtYWxsb2Nfem9uZV9mcmVlKChtYWxsb2Nfem9uZV90KilpbmZvLCBwdHIpOworIH0KKyAKKy0jZW5kaWYKKysjZW5kaWYgLyogREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYICovCisgCisgI2lmIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MgfHwgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVggfHwgREVQTE9ZTUVOVF9UQVJHRVRfRlJFRUJTRAorIHN0YXRpYyB2b2lkICpfX0NGQWxsb2NhdG9yU3lzdGVtQWxsb2NhdGUoQ0ZJbmRleCBzaXplLCBDRk9wdGlvbkZsYWdzIGhpbnQsIHZvaWQgKmluZm8pIHsKK0BAIC02ODUsNyArNjg1LDcgQEAKKyAJICAgIG1hbGxvY196b25lX2ZyZWUoKG1hbGxvY196b25lX3QgKilhbGxvY2F0b3IsIHB0cik7CisgCSAgICByZXR1cm4gTlVMTDsKKyAJfQorLSNlbmRpZgorKyNlbmRpZiAvKiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1ggKi8KKyAJZGVhbGxvY2F0ZUZ1bmMgPSBfX0NGQWxsb2NhdG9yR2V0RGVhbGxvY2F0ZUZ1bmN0aW9uKCZhbGxvY2F0b3ItPl9jb250ZXh0KTsKKyAJaWYgKE5VTEwgIT0gZGVhbGxvY2F0ZUZ1bmMpIHsKKyAJICAgIElOVk9LRV9DQUxMQkFDSzIoZGVhbGxvY2F0ZUZ1bmMsIHB0ciwgYWxsb2NhdG9yLT5fY29udGV4dC5pbmZvKTsKK0BAIC03MjIsNyArNzIyLDcgQEAKKyAjZW5kaWYKKyAJcmV0dXJuIG1hbGxvY196b25lX2ZyZWUoKG1hbGxvY196b25lX3QgKilhbGxvY2F0b3IsIHB0cik7CisgICAgIH0KKy0jZW5kaWYKKysjZW5kaWYgLyogREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYICovCisgICAgIGRlYWxsb2NhdGVGdW5jID0gX19DRkFsbG9jYXRvckdldERlYWxsb2NhdGVGdW5jdGlvbigmYWxsb2NhdG9yLT5fY29udGV4dCk7CisgICAgIGlmIChOVUxMICE9IHB0ciAmJiBOVUxMICE9IGRlYWxsb2NhdGVGdW5jKSB7CisgCUlOVk9LRV9DQUxMQkFDSzIoZGVhbGxvY2F0ZUZ1bmMsIHB0ciwgYWxsb2NhdG9yLT5fY29udGV4dC5pbmZvKTsKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU1LmRlc2NyaXB0aW9uIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTUuZGVzY3JpcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmU3YzM0MAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU1LmRlc2NyaXB0aW9uCkBAIC0wLDAgKzEsMTEgQEAKK1RoaXMgcGF0Y2ggcmVtb3ZlcyBzdXBwb3J0LCBvbiBMaW51eCwgZm9yIHVzaW5nIHRoZSBtYWxsb2NfdXNhYmxlX3NpemUKK2ludHJvc3BlY3Rpb24gbWV0aG9kIHdoZW4gaW5zdGFudGlhdGluZyBDb3JlRm91bmRhdGlvbiBydW50aW1lCitpbnN0YW5jZXMuCisKK09uIExpbnV4LCBhY3Jvc3MgdmFyaW91cyBhcmNoaXRlY3R1cmVzIGFuZCB2ZXJzaW9ucyBvZiB0aGUgR05VIEMKK0xpYnJhcnksIG1hbGxvY191c2FibGVfc2l6ZSBoYXMgYmVlbiBvYnNlcnZlZCB0byBhdCB0aW1lcyByZXR1cm4KK2luY29ycmVjdCB2YWx1ZXMuIFNpbmNlIHRoZSBpbnRyb3NwZWN0aW9uIHZhbHVlLWFkZCBpdCBwcm92aWRlcyB0bworQ29yZUZvdW5kYXRpb24gc2VlbXMgdG8gYmUgb2YgbGltaXRlZCB1dGlsaXR5IGluIHRoaXMgY29udGV4dCwgd2UKK2VsaW1pbmF0ZSBpdCBhbmQgc2ltcHkgdXNlIHRoZSBjYWxsZXItcmVxdWVzdGVkIHNpemUuIEluIGFkZGl0aW9uLAorbWVtc2V0dGluZyB0aGlzIHNtYWxsIHRhaWwgYmxvY2sgaGFzIGFsc28gYmVlbiBmb3VuZCB0byBjYXVzZSBoZWFwCitjb25zaXN0ZW5jeSBwcm9ibGVtcy4KZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU1LnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZjZDM0MAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU1LnBhdGNoCkBAIC0wLDAgKzEsNTQgQEAKK2RpZmYgLWFydU4gYS9DRlJ1bnRpbWUuYyBiL0NGUnVudGltZS5jCistLS0gYS9DRlJ1bnRpbWUuYwkyMDA5LTAyLTE5IDA4OjMyOjU0LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZSdW50aW1lLmMJMjAxMS0wOC0xMCAxNjozMjo0NC4wMDAwMDAwMDAgLTA3MDAKK0BAIC03MywxMSArNzMsNiBAQAorIENGX0lOTElORSBzaXplX3QgbWFsbG9jX3NpemUodm9pZCogbWVtYmxvY2spIHsKKyAgICAgcmV0dXJuIF9tc2l6ZShtZW1ibG9jayk7CisgfQorLSNlbGlmIERFUExPWU1FTlRfVEFSR0VUX0xJTlVYCistI2luY2x1ZGUgPG1hbGxvYy5oPgorLUNGX0lOTElORSBzaXplX3QgbWFsbG9jX3NpemUoY29uc3Qgdm9pZCAqbWVtYmxvY2spIHsKKy0gICAgcmV0dXJuIG1hbGxvY191c2FibGVfc2l6ZSgodm9pZCAqKW1lbWJsb2NrKTsKKy19CisgI2VuZGlmCisgCisgZXh0ZXJuIHZvaWQgX19IQUxUKHZvaWQpOworQEAgLTI2NCwxMiArMjU5LDIxIEBACisgICAgIGlmIChOVUxMID09IG1lbW9yeSkgeworIAlyZXR1cm4gTlVMTDsKKyAgICAgfQorLSNpZiBERVBMT1lNRU5UX1RBUkdFVF9XSU5ET1dTIHx8IERFUExPWU1FTlRfVEFSR0VUX0xJTlVYCisrI2lmIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MKKyAgICAgLy8gbWFsbG9jX3NpemUgd29uJ3Qgd29yayBpZiB0aGUgbWVtb3J5IGFkZHJlc3MgaGFzIGJlZW4gbW92ZWQKKyAgICAgLy8gKHN1Y2ggYXMgYSBjdXN0b20gYWxsb2NhdG9yIHRoYXQgYWRkcyBpdHMgb3duIG1ldGFkYXRhCisgICAgIC8vIChlLmcuIHVuZGVyL292ZXJmbG93IGd1YXJkIGRhdGEpLCBzbyBkb24ndCBhdHRlbXB0IHRvIGNhbGwgaXQKKyAgICAgLy8gb24gdGhlIGFsbG9jYXRpb24gcmV0dXJuLgorICAgICBzaXplX3QgbXNpemUgPSAodXNlc1N5c3RlbURlZmF1bHRBbGxvY2F0b3IpID8gbWFsbG9jX3NpemUobWVtb3J5KSA6IHNpemU7CisrI2VsaWYgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKysgICAgLy8gT24gTGludXgsIGFjcm9zcyB2YXJpb3VzIGFyY2hpdGVjdHVyZXMgYW5kIHZlcnNpb25zIG9mIHRoZSBHTlUKKysgICAgLy8gQyBMaWJyYXJ5LCBtYWxsb2NfdXNhYmxlX3NpemUgaGFzIGJlZW4gb2JzZXJ2ZWQgdG8gYXQgdGltZXMgcmV0dXJuCisrICAgIC8vIGluY29ycmVjdCB2YWx1ZXMuIFNpbmNlIHRoZSBpbnRyb3NwZWN0aW9uIHZhbHVlLWFkZCBpdCBwcm92aWRlcyB0bworKyAgICAvLyBDb3JlRm91bmRhdGlvbiBzZWVtcyB0byBiZSBvZiBsaW1pdGVkIHV0aWxpdHksIHdlIGVsaW1pbmF0ZSBpdCBhbmQKKysgICAgLy8gc2ltcHkgdXNlIHRoZSBjYWxsZXItcmVxdWVzdGVkIHNpemUuIEluIGFkZGl0aW9uLCBtZW1zZXR0aW5nIHRoaXMKKysgICAgLy8gc21hbGwgdGFpbCBibG9jayBoYXMgYWxzbyBiZWVuIGZvdW5kIHRvIGNhdXNlIGhlYXAgY29uc2lzdGVuY3kKKysgICAgLy8gcHJvYmxlbXMuCisrICAgIHNpemVfdCBtc2l6ZSA9IHNpemU7CisgI2Vsc2UKKyAgICAgc2l6ZV90IG1zaXplID0gbWFsbG9jX3NpemUobWVtb3J5KTsKKyAjZW5kaWYKK0BAIC0xMDk4LDYgKzExMDAsNyBAQAorIAl1c2VzU3lzdGVtRGVmYXVsdEFsbG9jYXRvciA9IChhbGxvY2F0b3IgPT0ga0NGQWxsb2NhdG9yU3lzdGVtRGVmYXVsdCk7CisgCisgCWlmIChfX0NGWm9tYmllTGV2ZWwgJiAoMSA8PCAwKSkgeworKyNpZiAhREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKyAJICAgIHVpbnQ4X3QgKnB0ciA9ICh1aW50OF90ICopY2YgLSAodXNlc1N5c3RlbURlZmF1bHRBbGxvY2F0b3IgPyAwIDogc2l6ZW9mKENGQWxsb2NhdG9yUmVmKSk7CisgCSAgICBzaXplX3Qgc2l6ZSA9IG1hbGxvY19zaXplKHB0cik7CisgCSAgICB1aW50OF90IGJ5dGUgPSAweEZDOworQEAgLTExMDksNiArMTExMiw3IEBACisgCQlieXRlID0gKF9fQ0Zab21iaWVMZXZlbCA+PiA4KSAmIDB4RkY7CisgCSAgICB9CisgCSAgICBtZW1zZXQocHRyLCBieXRlLCBzaXplKTsKKysjZW5kaWYgLyogIURFUExPWU1FTlRfVEFSR0VUX0xJTlVYICovCisgCX0KKyAJaWYgKCEoX19DRlpvbWJpZUxldmVsICYgKDEgPDwgNCkpKSB7CisgCSAgICBDRkFsbG9jYXRvckRlYWxsb2NhdGUoYWxsb2NhdG9yLCAodWludDhfdCAqKWNmIC0gKHVzZXNTeXN0ZW1EZWZhdWx0QWxsb2NhdG9yID8gMCA6IHNpemVvZihDRkFsbG9jYXRvclJlZikpKTsKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU2LmRlc2NyaXB0aW9uIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTYuZGVzY3JpcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3OTkzZgotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU2LmRlc2NyaXB0aW9uCkBAIC0wLDAgKzEsMiBAQAorVGhpcyBwYXRjaCBhZGRyZXNzZXMgYSBidWcgaW4gQ0ZTZXRBcHBseUZ1bmN0aW9uIHRoYXQgY2FuIHJlc3VsdCBpbiBpdCBhY2Nlc3NpbmcgYW5kIG1vZGlmeWluZyBkZWFsbG9jYXRlZCBrZXkgbWVtb3J5IHdoZW4gaXRlcmF0aW5nIG92ZXIgYSBtdXRhYmxlIAorc2V0IHdoaWxlIHNpbXVsdGFuZW91c2x5IG11dGF0aW5nIGl0IHdoZXJlIHRob3NlIG11dGF0aW9ucyBtaWdodCBsZWFkIHRvIHRoZSBncm93dGggb3Igc2hyaW5rYWdlIG9mIHRoZSBzZXQuCmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01Ni5wYXRjaCBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU2LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MDNhNjMKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01Ni5wYXRjaApAQCAtMCwwICsxLDIyIEBACitkaWZmIC1hcnVOIGEvQ0ZTZXQuYyBiL0NGU2V0LmMKKy0tLSBhL0NGU2V0LmMJMjAwOS0wMi0xOSAwODozMjo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBiL0NGU2V0LmMJMjAxMS0wOS0wNiAxNzowNToyNS4wMDAwMDAwMDAgLTA3MDAKK0BAIC0xMDg5LDE1ICsxMDg5LDE0IEBACisgICAgIGlmIChDRkRpY3Rpb25hcnkpIENGX09CSkNfRlVOQ0RJU1BBVENIMihfX2tDRkhhc2hUeXBlSUQsIHZvaWQsIGhjLCAiX2FwcGx5OmNvbnRleHQ6IiwgYXBwbGllciwgY29udGV4dCk7CisgICAgIGlmIChDRlNldCkgQ0ZfT0JKQ19GVU5DRElTUEFUQ0gyKF9fa0NGSGFzaFR5cGVJRCwgdm9pZCwgaGMsICJfYXBwbHlWYWx1ZXM6Y29udGV4dDoiLCBhcHBsaWVyLCBjb250ZXh0KTsKKyAgICAgX19DRkdlbmVyaWNWYWxpZGF0ZVR5cGUoaGMsIF9fa0NGSGFzaFR5cGVJRCk7CistICAgIGFueV90ICprZXlzID0gaGMtPl9rZXlzOworICAgICBmb3IgKENGSW5kZXggaWR4ID0gMCwgbmJ1Y2tldHMgPSBoYy0+X2J1Y2tldHNOdW07IGlkeCA8IG5idWNrZXRzOyBpZHgrKykgeworLSAgICAgICAgaWYgKF9fQ0ZIYXNoS2V5SXNWYWx1ZShoYywga2V5c1tpZHhdKSkgeworKyAgICAgICAgaWYgKF9fQ0ZIYXNoS2V5SXNWYWx1ZShoYywgaGMtPl9rZXlzW2lkeF0pKSB7CisgICAgICAgICAgICAgZm9yIChDRkluZGV4IGNudCA9IF9fQ0ZIYXNoR2V0T2NjdXJyZW5jZUNvdW50KGhjLCBpZHgpOyBjbnQtLTspIHsKKyAjaWYgQ0ZEaWN0aW9uYXJ5CistICAgICAgICAgICAgICAgIElOVk9LRV9DQUxMQkFDSzMoYXBwbGllciwgKGNvbnN0X2FueV9wb2ludGVyX3Qpa2V5c1tpZHhdLCAoY29uc3RfYW55X3BvaW50ZXJfdCloYy0+X3ZhbHVlc1tpZHhdLCBjb250ZXh0KTsKKysgICAgICAgICAgICAgICAgSU5WT0tFX0NBTExCQUNLMyhhcHBsaWVyLCAoY29uc3RfYW55X3BvaW50ZXJfdCloYy0+X2tleXNbaWR4XSwgKGNvbnN0X2FueV9wb2ludGVyX3QpaGMtPl92YWx1ZXNbaWR4XSwgY29udGV4dCk7CisgI2VuZGlmCisgI2lmIENGU2V0IHx8IENGQmFnCistICAgICAgICAgICAgICAgIElOVk9LRV9DQUxMQkFDSzIoYXBwbGllciwgKGNvbnN0X2FueV9wb2ludGVyX3Qpa2V5c1tpZHhdLCBjb250ZXh0KTsKKysgICAgICAgICAgICAgICAgSU5WT0tFX0NBTExCQUNLMihhcHBsaWVyLCAoY29uc3RfYW55X3BvaW50ZXJfdCloYy0+X2tleXNbaWR4XSwgY29udGV4dCk7CisgI2VuZGlmCisgICAgICAgICAgICAgfQorICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTcuZGVzY3JpcHRpb24gYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01Ny5kZXNjcmlwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2JhOWZkCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTcuZGVzY3JpcHRpb24KQEAgLTAsMCArMSBAQAorVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQsIGZvciBMaW51eCBzeXN0ZW1zLCB0aGF0IENGTG9jYWxlQ29weUN1cnJlbnQgcmV0dXJucyB0aGUgbG9jYWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGlkZW50aWZpZXIgc2V0IGJ5IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgTENfQUxMIChpZiBwcmVzZW50KSBvciBMQU5HIChpZiBwcmVzZW50KS4KZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU3LnBhdGNoIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTcucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg0ZjU3YwotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU3LnBhdGNoCkBAIC0wLDAgKzEsMzIgQEAKK2RpZmYgLWFydU4gYS9DRkxvY2FsZS5jIGIvQ0ZMb2NhbGUuYworLS0tIGEvQ0ZMb2NhbGUuYwkyMDA5LTAyLTIyIDIxOjU2OjAwLjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZMb2NhbGUuYwkyMDEyLTA0LTIwIDEyOjE0OjA3LjA2MTYwNTEwMyAtMDcwMAorQEAgLTIyMyw2ICsyMjMsMTkgQEAKKyAgICAgV2luZG93c0xvY2FsZXMgPSBDRkFycmF5Q3JlYXRlKGtDRkFsbG9jYXRvclN5c3RlbURlZmF1bHQsIChjb25zdCB2b2lkKiopc19XaW5kb3dzSW5zdGFsbGVkTG9jYWxlcywgc19udW1faW5zdGFsbGVkX2xvY2FsZXNJLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKKyAgICAgcmV0dXJuIChXaW5kb3dzTG9jYWxlcyk7CisgfQorKyNlbGlmIERFUExPWU1FTlRfVEFSR0VUX0xJTlVYCisrc3RhdGljIENGU3RyaW5nUmVmIF9fQ0ZMb2NhbGVDb3B5UE9TSVhMb2NhbGVOYW1lKHZvaWQpCisreworKyAgICBjb25zdCBjaGFyICpwID0gTlVMTDsKKysgICAgQ0ZTdHJpbmdSZWYgaWRlbnRpZmllciA9IE5VTEw7CisrCisrICAgIHAgPSBnZXRlbnYoIkxDX0FMTCIpOworKworKyAgICBpZiAoTlVMTCA9PSBwKSBwID0gZ2V0ZW52KCJMQU5HIik7CisrICAgIGlmIChOVUxMICE9IHApIGlkZW50aWZpZXIgPSBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHAsIGtDRlN0cmluZ0VuY29kaW5nQVNDSUkpOworKworKyAgICByZXR1cm4gKGlkZW50aWZpZXIpOworK30KKyAjZW5kaWYgLy8gREVQTE9ZTUVOVF9UQVJHRVRfV0lORE9XUworIAorIHN0YXRpYyBCb29sZWFuIF9fQ0ZMb2NhbGVFcXVhbChDRlR5cGVSZWYgY2YxLCBDRlR5cGVSZWYgY2YyKSB7CitAQCAtMzM1LDYgKzM0OCw4IEBACisgCisgI2lmZGVmIERFUExPWU1FTlRfVEFSR0VUX1dJTkRPV1MKKyAgICAgaWRlbnRpZmllciA9IF9fQ0ZMb2NhbGVXaW5kb3dzTENJRFRvSVNPTG9jYWxlTmFtZShMT0NBTEVfVVNFUl9ERUZBVUxUKTsKKysjZWxpZiBERVBMT1lNRU5UX1RBUkdFVF9MSU5VWAorKyAgICBpZGVudGlmaWVyID0gX19DRkxvY2FsZUNvcHlQT1NJWExvY2FsZU5hbWUoKTsKKyAjZW5kaWYgCisgCisgICAgIHN0cnVjdCBfX0NGTG9jYWxlICpsb2NhbGU7CmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01OC5kZXNjcmlwdGlvbiBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU4LmRlc2NyaXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZWMyNGQKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01OC5kZXNjcmlwdGlvbgpAQCAtMCwwICsxIEBACitUaGlzIHBhdGNoIGVuYWJsZWQgX19DRldyaXRlQnl0ZXNUb0ZpbGVXaXRoQXRvbWljaXR5IG9uIExpbnV4IGFuZCBzcGVjaWZpZXMgYSBta3N0ZW1wIHRlbXBsYXRlIGZvcm1hdCBjb21wYXRpYmxlIHdpdGggYm90aCBCU0QgYW5kIExpbnV4LgpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTgucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01OC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjFmOWNlCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTgucGF0Y2gKQEAgLTAsMCArMSwzOCBAQAorZGlmZiAtYXJ1TiBhL0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYyBiL0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYworLS0tIGEvQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCTIwMDktMDItMTkgMDg6MzI6NTQuMDAwMDAwMDAwIC0wODAwCisrKysgYi9DRlhNTFByZWZlcmVuY2VzRG9tYWluLmMJMjAxMi0wNC0yNSAxMDozNTo1My4wMDAwMDAwMDAgLTA3MDAKK0BAIC0yMzgsOSArMjM4LDEwIEBACisgfQorIAorIAorLSNpZiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1gKKysjaWYgREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYIHx8IERFUExPWU1FTlRfVEFSR0VUX0xJTlVYCisrI2luY2x1ZGUgPHN0ZGlvLmg+CisgI2luY2x1ZGUgPHN5cy9mY250bC5oPgorIAorIC8qIF9fQ0ZXcml0ZUJ5dGVzVG9GaWxlV2l0aEF0b21pY2l0eSBpcyBhICJzYWZlIHNhdmUiIGZhY2lsaXR5LiBXcml0ZSB0aGUgYnl0ZXMgdXNpbmcgdGhlIHNwZWNpZmllZCBtb2RlIG9uIHRoZSBmaWxlIHRvIHRoZSBwcm92aWRlZCBVUkwuIElmIHRoZSBhdG9taWMgZmxhZyBpcyB0cnVlLCB0cnkgdG8gZG8gaXQgaW4gYSBmYXNoaW9uIHRoYXQgd2lsbCBlbmFibGUgYSBzYWZlIHNhdmUuCisgICovCisgc3RhdGljIEJvb2xlYW4gX19DRldyaXRlQnl0ZXNUb0ZpbGVXaXRoQXRvbWljaXR5KENGVVJMUmVmIHVybCwgY29uc3Qgdm9pZCAqYnl0ZXMsIGludCBsZW5ndGgsIFNJbnQzMiBtb2RlLCBCb29sZWFuIGF0b21pYykgeworQEAgLTI2NCw2ICsyNjksNiBAQAorICAgICBpZiAoYXRvbWljKSB7CisgICAgICAgICBDRlVSTFJlZiBkaXIgPSBDRlVSTENyZWF0ZUNvcHlEZWxldGluZ0xhc3RQYXRoQ29tcG9uZW50KGtDRkFsbG9jYXRvclN5c3RlbURlZmF1bHQsIHVybCk7CistICAgICAgICBDRlVSTFJlZiB0ZW1wRmlsZSA9IENGVVJMQ3JlYXRlQ29weUFwcGVuZGluZ1BhdGhDb21wb25lbnQoa0NGQWxsb2NhdG9yU3lzdGVtRGVmYXVsdCwgZGlyLCBDRlNUUigiY2YjWFhYWFgiKSwgZmFsc2UpOworKyAgICAgICAgQ0ZVUkxSZWYgdGVtcEZpbGUgPSBDRlVSTENyZWF0ZUNvcHlBcHBlbmRpbmdQYXRoQ29tcG9uZW50KGtDRkFsbG9jYXRvclN5c3RlbURlZmF1bHQsIGRpciwgQ0ZTVFIoImNmI1hYWFhYWCIpLCBmYWxzZSk7CisgICAgICAgICBDRlJlbGVhc2UoZGlyKTsKKyAgICAgICAgIGlmICghQ0ZVUkxHZXRGaWxlU3lzdGVtUmVwcmVzZW50YXRpb24odGVtcEZpbGUsIHRydWUsICh1aW50OF90ICopYXV4UGF0aCwgQ0ZNYXhQYXRoU2l6ZSkpIHsKKyAgICAgICAgICAgICBDRlJlbGVhc2UodGVtcEZpbGUpOworQEAgLTMzOSwxMiArMzQ2LDEyIEBACisgICAgICAgICBDRlJlbGVhc2UoYmluU3RyZWFtKTsKKyAgICAgICAgIGlmIChkYXRhKSB7CisgICAgICAgICAgICAgU0ludDMyIG1vZGU7CistI2lmIERFUExPWU1FTlRfVEFSR0VUX01BQ09TWAorKyNpZiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1ggfHwgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKyAgICAgICAgICAgICBtb2RlID0gaXNXb3JsZFJlYWRhYmxlID8gU19JUlVTUnxTX0lXVVNSfFNfSVJHUlB8U19JUk9USCA6IFNfSVJVU1J8U19JV1VTUjsKKyAjZWxzZQorIAkgICAgbW9kZSA9IDA2NjY7CisgI2VuZGlmCistI2lmIERFUExPWU1FTlRfVEFSR0VUX01BQ09TWAorKyNpZiBERVBMT1lNRU5UX1RBUkdFVF9NQUNPU1ggfHwgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVgKKyAgICAgICAgICAgICB7CS8vIFRyeSBxdWljayBhdG9taWMgd2F5IGZpcnN0LCB0aGVuIGZhbGxiYWNrIHRvIHNsb3dlciB3YXlzIGFuZCBlcnJvciBjYXNlcworICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiBzY2hlbWUgPSBDRlVSTENvcHlTY2hlbWUodXJsKTsKKyAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWUpIHsKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU5LmRlc2NyaXB0aW9uIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNTkuZGVzY3JpcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU5MjM3ZAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU5LmRlc2NyaXB0aW9uCkBAIC0wLDAgKzEgQEAKK1RoaXMgcGF0Y2ggZmlyc3QgYXR0ZW1wdHMgdG8gbG9vayB1cCB0aGUgZ3JvdXAgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBncm91cCBuYW1lICJhZG1pbiIgdG8gZW5zdXJlIGl0IHdvcmtzIG9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgSUQgbWF5IG5vdCBiZSAnODAnIGlzIGl0IGlzIG9uIE1hYyBPUyBYLiBPbmx5IGlmIHRoZSBncm91cCBuYW1lICJhZG1pbiIgaXMgbm90IGZvbmQgZG9lcyBpdCBub3cgZmFsbGJhY2sgdG8gdXNpbmcgODAuCmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01OS5wYXRjaCBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTU5LnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNzM4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS01OS5wYXRjaApAQCAtMCwwICsxLDI5IEBACitkaWZmIC1hcnVOIGEvQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jIGIvQ0ZYTUxQcmVmZXJlbmNlc0RvbWFpbi5jCistLS0gYS9DRlhNTFByZWZlcmVuY2VzRG9tYWluLmMJMjAwOS0wMi0xOSAwODozMjo1NC4wMDAwMDAwMDAgLTA4MDAKKysrKyBiL0NGWE1MUHJlZmVyZW5jZXNEb21haW4uYwkyMDEyLTA0LTI1IDEwOjM1OjUzLjAwMDAwMDAwMCAtMDcwMAorQEAgLTIzOSw5ICsyMzksMTMgQEAKKyAKKyAKKyAjaWYgREVQTE9ZTUVOVF9UQVJHRVRfTUFDT1NYIHx8IERFUExPWU1FTlRfVEFSR0VUX0xJTlVYCisrI2luY2x1ZGUgPGdycC5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzeXMvZmNudGwuaD4KKyAKKysjZGVmaW5lIF9fa0NGQWRtaW5Hcm91cE5hbWUgICAgICAgImFkbWluIgorKyNkZWZpbmUgX19rQ0ZBZG1pbkZhbGxiYWNrR3JvdXBJRCA4MAorKworIC8qIF9fQ0ZXcml0ZUJ5dGVzVG9GaWxlV2l0aEF0b21pY2l0eSBpcyBhICJzYWZlIHNhdmUiIGZhY2lsaXR5LiBXcml0ZSB0aGUgYnl0ZXMgdXNpbmcgdGhlIHNwZWNpZmllZCBtb2RlIG9uIHRoZSBmaWxlIHRvIHRoZSBwcm92aWRlZCBVUkwuIElmIHRoZSBhdG9taWMgZmxhZyBpcyB0cnVlLCB0cnkgdG8gZG8gaXQgaW4gYSBmYXNoaW9uIHRoYXQgd2lsbCBlbmFibGUgYSBzYWZlIHNhdmUuCisgICovCisgc3RhdGljIEJvb2xlYW4gX19DRldyaXRlQnl0ZXNUb0ZpbGVXaXRoQXRvbWljaXR5KENGVVJMUmVmIHVybCwgY29uc3Qgdm9pZCAqYnl0ZXMsIGludCBsZW5ndGgsIFNJbnQzMiBtb2RlLCBCb29sZWFuIGF0b21pYykgeworQEAgLTI2NSw4ICsyNzAsMTAgQEAKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgbW9kZSA9IDA2NjQ7CisgICAgICAgICAgICAgaWYgKHdyaXRpbmdGaWxlQXNSb290ICYmICgwID09IHN0cm5jbXAoY3BhdGgsICIvTGlicmFyeS9QcmVmZXJlbmNlcyIsIDIwKSkpIHsKKysgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGdyb3VwICpncmVudDsKKyAgICAgICAgICAgICAgICAgb3duZXIgPSBnZXRldWlkKCk7CistICAgICAgICAgICAgICAgIGdyb3VwID0gODA7CisrICAgICAgICAgICAgICAgIGdyZW50ID0gZ2V0Z3JuYW0oX19rQ0ZBZG1pbkdyb3VwTmFtZSk7CisrICAgICAgICAgICAgICAgIGdyb3VwID0gZ3JlbnQgPyBncmVudC0+Z3JfZ2lkIDogX19rQ0ZBZG1pbkZhbGxiYWNrR3JvdXBJRDsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgIH0KZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTYwLmRlc2NyaXB0aW9uIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjAuZGVzY3JpcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ1NWVhZQotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTYwLmRlc2NyaXB0aW9uCkBAIC0wLDAgKzEgQEAKK1RoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IGJvdGggdGhlIENvcmVGb3VuZGF0aW9uIGNvZGUgYW5kIHRoZSBwYWNrYWdlIGluc3RhbGxhdGlvbiBhcmUgY29uc2lzdGVudCBpbiB0aGVpciBsb2NhdGlvbiBhbmQgcGxhY2VtZW50IG9mIFVuaWNvZGUgY2hhcmFjdGVyIHNldCBkYXRhIGZpbGVzLgpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjAucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02MC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjljYWY4Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjAucGF0Y2gKQEAgLTAsMCArMSw1MyBAQAorZGlmZiAtYXJ1TiBhL0NGVW5pQ2hhci5jIGIvQ0ZVbmlDaGFyLmMKKy0tLSBhL01ha2VmaWxlLmFtCTIwMDktMDMtMTAgMTY6MzE6MjEuMDAwMDAwMDAwIC0wNzAwCisrKysgYi9NYWtlZmlsZS5hbQkyMDEyLTA0LTI1IDIyOjM1OjE3LjUyMTM3ODk1MiAtMDcwMAorQEAgLTI1LDcgKzI1LDcgQEAKKyAjIFVuaWNvZGUgY2hhcmFjdGVyIG1hcHBpbmdzLgorICMKKyAKKy1saWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhZGlyCT0gJHtkYXRhZGlyfS9Db3JlU2VydmljZXMKKytsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhZGlyCT0gJHtkYXRhZGlyfS9Db3JlRm91bmRhdGlvbi9DaGFyYWN0ZXJTZXRzCisgCisgbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YV9EQVRBCT0gQ0ZDaGFyYWN0ZXJTZXRCaXRtYXBzLmJpdG1hcAkJXAorIAkJCQkgIENGVW5pQ2hhclByb3BlcnR5RGF0YWJhc2UuZGF0YQlcCitAQCAtMzUsNyArMzUsNyBAQAorIENGX0NPTU1PTl9DUFBGTEFHUwkJPSAkKEFNX0NQUEZMQUdTKQkJCVwKKyAJCQkJICAtRFVfU0hPV19EUkFGVF9BUEk9MQkJCVwKKyAJCQkJICAtRENGX0JVSUxESU5HX0NGPTEJCQlcCistCQkJCSAgLURfX2tDRkNoYXJhY3RlclNldERpcj1cIiR7bGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpcn1cIiBcCisrCQkJCSAgLURfX2tDRkRhdGFEaXI9XCIke2RhdGFkaXJ9XCIgXAorIAkJCQkgIC1ETUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRD1NQUNfT1NfWF9WRVJTSU9OXzEwXzUJXAorIAkJCQkgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCQlcCisgCQkJCSAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUvbWFjaF9zdXBwb3J0CitkaWZmIC1hcnVOIGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgorLS0tIGEvTWFrZWZpbGUuaW4JMjAwOS0wMy0xMCAyMzo0NDozNi4wMDAwMDAwMDAgLTA3MDAKKysrKyBiL01ha2VmaWxlLmluCTIwMTItMDQtMjUgMjI6Mzg6MjMuMjY5MzgxMTY1IC0wNzAwCitAQCAtNTM1LDcgKzUzNSw3IEBACisgIyBEZWZpbmUgd2hlcmUgd2Ugd2lsbCBpbnN0YWxsIGFuZCB3aGVyZSBDb3JlRm91bmRhdGlvbiBjYW4gZmluZCBpdHMKKyAjIFVuaWNvZGUgY2hhcmFjdGVyIG1hcHBpbmdzLgorICMKKy1saWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhZGlyID0gJHtkYXRhZGlyfS9Db3JlU2VydmljZXMKKytsaWJDb3JlRm91bmRhdGlvbl9sYV9kYXRhZGlyID0gJHtkYXRhZGlyfS9Db3JlRm91bmRhdGlvbi9DaGFyYWN0ZXJTZXRzCisgbGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YV9EQVRBID0gQ0ZDaGFyYWN0ZXJTZXRCaXRtYXBzLmJpdG1hcAkJXAorIAkJCQkgIENGVW5pQ2hhclByb3BlcnR5RGF0YWJhc2UuZGF0YQlcCisgCQkJCSAgQ0ZVbmljb2RlRGF0YS1CLm1hcHBpbmcJCVwKK0BAIC01NDQsNyArNTQ0LDcgQEAKKyBDRl9DT01NT05fQ1BQRkxBR1MgPSAkKEFNX0NQUEZMQUdTKQkJCVwKKyAJCQkJICAtRFVfU0hPV19EUkFGVF9BUEk9MQkJCVwKKyAJCQkJICAtRENGX0JVSUxESU5HX0NGPTEJCQlcCistCQkJCSAgLURfX2tDRkNoYXJhY3RlclNldERpcj1cIiR7bGliQ29yZUZvdW5kYXRpb25fbGFfZGF0YWRpcn1cIiBcCisrCQkJCSAgLURfX2tDRkRhdGFEaXI9XCIke2RhdGFkaXJ9XCIgXAorIAkJCQkgIC1ETUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRD1NQUNfT1NfWF9WRVJTSU9OXzEwXzUJXAorIAkJCQkgIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCQlcCisgCQkJCSAgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUvbWFjaF9zdXBwb3J0CistLS0gYS9DRlVuaUNoYXIuYwkyMDA5LTAyLTE5IDE2OjI1OjA2LjAwMDAwMDAwMCAtMDgwMAorKysrIGIvQ0ZVbmlDaGFyLmMJMjAxMi0wNC0yNSAyMjo1ODozOC45NjgwMDU2MzcgLTA3MDAKK0BAIC02Nyw3ICs2Nyw3IEBACisgI2lmIERFUExPWU1FTlRfVEFSR0VUX01BQ09TWAorICNkZWZpbmUgX19rQ0ZDaGFyYWN0ZXJTZXREaXIgIi9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMiCisgI2VsaWYgREVQTE9ZTUVOVF9UQVJHRVRfTElOVVggfHwgREVQTE9ZTUVOVF9UQVJHRVRfRlJFRUJTRAorLSNkZWZpbmUgX19rQ0ZDaGFyYWN0ZXJTZXREaXIgIi91c3IvbG9jYWwvc2hhcmUvQ29yZUZvdW5kYXRpb24iCisrI2RlZmluZSBfX2tDRkNoYXJhY3RlclNldERpciBfX2tDRkRhdGFEaXIgIi9Db3JlRm91bmRhdGlvbiIKKyAjZWxpZiBERVBMT1lNRU5UX1RBUkdFVF9XSU5ET1dTCisgI2RlZmluZSBfX2tDRkNoYXJhY3RlclNldERpciAiXFxXaW5kb3dzXFxDb3JlRm91bmRhdGlvbiIKKyAjZGVmaW5lIE1BWFBBVEhMRU4gTUFYX1BBVEgKZGlmZiAtLWdpdCBhL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTYxLmRlc2NyaXB0aW9uIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjEuZGVzY3JpcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0OTljZAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUucGF0Y2hlcy9vcGVuY2ZsaXRlLTYxLmRlc2NyaXB0aW9uCkBAIC0wLDAgKzEgQEAKK1RoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0IHJlZ2FyZGxlc3Mgb2YgdGFyZ2V0IGJ5dGUtb3JkZXIgdGhhdCBDb3JlRm91bmRhdGlvbiBzb3VyY2VzIGEgc2luZ2xlIGRhdGEgZmlsZSBuYW1lLCBsZWF2aW5nIGl0IHVwIHRvIHRoZSBkaXN0cmlidXRpb24gdG8gcmVuYW1lIG9yIHN5bWJvbGljIGxpbmsgdGhlIGRhdGEgZmlsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBieXRlIG9yZGVyaW5nLgpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjEucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02MS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzI0YzM0Ci0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjEucGF0Y2gKQEAgLTAsMCArMSwyNCBAQAorZGlmZiAtYXJ1TiBhL0NGVW5pQ2hhci5jIGIvQ0ZVbmlDaGFyLmMKKy0tLSBhL0NGVW5pQ2hhci5jCTIwMDktMDItMTkgMTY6MjU6MDYuMDAwMDAwMDAwIC0wODAwCisrKysgYi9DRlVuaUNoYXIuYwkyMDEyLTA0LTI1IDIyOjU4OjM4Ljk2ODAwNTYzNyAtMDcwMAorQEAgLTU3NCwxOCArNTc2LDEwIEBACisgCisgc3RhdGljIENGU3BpbkxvY2tfdCBfX0NGVW5pQ2hhck1hcHBpbmdUYWJsZUxvY2sgPSBDRlNwaW5Mb2NrSW5pdDsKKyAKKy0jaWYgX19DRl9CSUdfRU5ESUFOX18KKyAjaWYgVVNFX01BQ0hPX1NFR01FTlQKKyAjZGVmaW5lIE1BUFBJTkdfVEFCTEVfRklMRSAiX19kYXRhIgorICNlbHNlCistI2RlZmluZSBNQVBQSU5HX1RBQkxFX0ZJTEUgIkNGVW5pY29kZURhdGEtQi5tYXBwaW5nIgorLSNlbmRpZgorLSNlbHNlCistI2lmIFVTRV9NQUNIT19TRUdNRU5UCistI2RlZmluZSBNQVBQSU5HX1RBQkxFX0ZJTEUgIl9fZGF0YSIKKy0jZWxzZQorLSNkZWZpbmUgTUFQUElOR19UQUJMRV9GSUxFICJDRlVuaWNvZGVEYXRhLUwubWFwcGluZyIKKy0jZW5kaWYKKysjZGVmaW5lIE1BUFBJTkdfVEFCTEVfRklMRSAiQ0ZVbmljb2RlRGF0YS5tYXBwaW5nIgorICNlbmRpZgorIAorIF9fcHJpdmF0ZV9leHRlcm5fXyBjb25zdCB2b2lkICpDRlVuaUNoYXJHZXRNYXBwaW5nRGF0YSh1aW50MzJfdCB0eXBlKSB7CitkaWZmIC1hcnVOIGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjIuZGVzY3JpcHRpb24gYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02Mi5kZXNjcmlwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWQ1YmYxCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjIuZGVzY3JpcHRpb24KQEAgLTAsMCArMSBAQAorVGhpcyBwYXRjaCBhZGRzIHR3byBhc3NlcnRpb25zIHRvIGVuc3VyZSB0aGF0IFVuaWNvZGUgZGF0YSBmaWxlcyBhcmUgc3VjY2Vzc2Z1bGx5IG9wZW5lZCBhbmQgbWFwcGVkLgpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjIucGF0Y2ggYi9vcGVuY2ZsaXRlLnBhdGNoZXMvb3BlbmNmbGl0ZS02Mi5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNThmNzdhCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS5wYXRjaGVzL29wZW5jZmxpdGUtNjIucGF0Y2gKQEAgLTAsMCArMSwxNiBAQAorZGlmZiAtYXJ1TiBhL0NGVW5pQ2hhci5jIGIvQ0ZVbmlDaGFyLmMKKy0tLSBhL0NGVW5pQ2hhci5jCTIwMDktMDItMTkgMTY6MjU6MDYuMDAwMDAwMDAwIC0wODAwCisrKysgYi9DRlVuaUNoYXIuYwkyMDEyLTA0LTI1IDIyOjU4OjM4Ljk2ODAwNTYzNyAtMDcwMAorQEAgLTIyMSwxMCArMjIxLDEyIEBACisgCisgICAgIGludCBub19oYW5nX2ZkID0gb3BlbigiL2Rldi9hdXRvZnNfbm93YWl0IiwgMCk7CisgICAgIGlmICgoZmQgPSBvcGVuKGZpbGVOYW1lLCBPX1JET05MWSwgMCkpIDwgMCkgeworKyAgICBDRkxvZyhfX2tDRkxvZ0Fzc2VydGlvbiwgQ0ZTVFIoIiVzKCk6IGNvdWxkIG5vdCBvcGVuICVzIGZvciByZWFkLW9ubHkgYWNjZXNzLiIpLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBmaWxlTmFtZSk7CisgCWNsb3NlKG5vX2hhbmdfZmQpOworIAlyZXR1cm4gZmFsc2U7CisgICAgIH0KKyAgICAgaWYgKGZzdGF0KGZkLCAmc3RhdEJ1ZikgPCAwIHx8ICgqYnl0ZXMgPSBtbWFwKDAsIHN0YXRCdWYuc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQsIDApKSA9PSAodm9pZCAqKS0xKSB7CisrICAgICAgICBDRkxvZyhfX2tDRkxvZ0Fzc2VydGlvbiwgQ0ZTVFIoIiVzKCk6IGNvdWxkIG5vdCBtYXAgJXMgZm9yIHJlYWQtb25seSBhY2Nlc3MuIiksIF9fUFJFVFRZX0ZVTkNUSU9OX18sIGZpbGVOYW1lKTsKKyAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgfQpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS50YXIuZ3ogYi9vcGVuY2ZsaXRlLnRhci5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmY0ZmQwCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS50YXIuZ3oKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvb3BlbmNmbGl0ZS51cmwgYi9vcGVuY2ZsaXRlLnVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGE0OWRjCi0tLSAvZGV2L251bGwKKysrIGIvb3BlbmNmbGl0ZS51cmwKQEAgLTAsMCArMSBAQAoraHR0cDovL2Rvd25sb2FkLnNvdXJjZWZvcmdlLm5ldC9vcGVuY2ZsaXRlL29wZW5jZmxpdGUtNDc2LjE3LjIudGFyLmd6CmRpZmYgLS1naXQgYS9vcGVuY2ZsaXRlLnZlcnNpb24gYi9vcGVuY2ZsaXRlLnZlcnNpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I2MDE3OAotLS0gL2Rldi9udWxsCisrKyBiL29wZW5jZmxpdGUudmVyc2lvbgpAQCAtMCwwICsxIEBACis0NzYuMTcuMgo=