ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IDFkZWIzMzEuLjA3ZTMyYTg3IDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTUwNCw3ICs1MDQsNyBAQAogRTogbGludXhAYnJvZG8uZGUKIFc6IGh0dHA6Ly93d3cuYnJvZG8uZGUvCiBQOiAxMDI0RC83MjVCMzdDNiAgMTkwRiAzRTc3IDlDODkgM0I2RCBCRUNEICA0NkVFIDY3QzMgMDMwOCA3MjVCIDM3QzYKLUQ6IHBhcnRzIG9mIENQVUZyZXEgY29kZSwgQUNQSSBidWdmaXhlcworRDogcGFydHMgb2YgQ1BVRnJlcSBjb2RlLCBBQ1BJIGJ1Z2ZpeGVzLCBQQ01DSUEgcmV3cml0ZSwgY3B1ZnJlcXV0aWxzCiBTOiBUdWViaW5nZW4sIEdlcm1hbnkKIAogTjogQW5kcmllcyBCcm91d2VyCkBAIC04NTcsNiArODU3LDEwIEBACiBTOiBSb3VuZCBSb2NrLCBUWCAgNzg2ODIKIFM6IFVTQQogCitOOiBNYXR0aWEgRG9uZ2lsaQorRTogbWFsYXR0aWFAZ21haWwuY29tCitEOiBjcHVmcmVxdXRpbHMgKHByZWN1cnNvciB0byBjcHVwb3dlcnV0aWxzKQorCiBOOiBCZW4gRG9va3MKIEU6IGJlbi1saW51eEBmbHVmZi5vcmcKIEU6IGJlbkBzaW10ZWMuY28udWsKQEAgLTE4ODMsNiArMTg4NywxMSBAQAogUzogMTA5OCBWQSBBbXN0ZXJkYW0gCiBTOiBUaGUgTmV0aGVybGFuZHMKIAorTjogR29yYW4gS29ydWdhCitFOiBrb3J1Z2FnQHNpb2wubmV0CitEOiBjcHVmcmVxdXRpbHMgKHByZWN1cnNvciB0byBjcHVwb3dlcnV0aWxzKQorUzogU2xvdmVuaWEKKwogTjogSmlyaSBLb3NpbmEKIEU6IGppa29zQGppa29zLmN6CiBFOiBqa29zaW5hQHN1c2UuY3oKQEAgLTI5MTYsNiArMjkyNSwxMiBAQAogUzogNzkwOTggRnJlaWJ1cmcKIFM6IEdlcm1hbnkKIAorTjogVGhvbWFzIFJlbm5pbmdlcgorRTogdHJlbm5Ac3VzZS5kZQorRDogY3B1cG93ZXJ1dGlscworUzogU1VTRSBMaW51eCBHbWJICitTOiBHZXJtYW55CisKIE46IEpvZXJnIFJldXRlcgogRToganJldXRlckB5YWluYS5kZQogVzogaHR0cDovL3lhaW5hLmRlL2pyZXV0ZXIvCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGNmNWU4YTcuLmM5YzYzMjQgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC0xOTI1LDYgKzE5MjUsMTIgQEAKIEY6CWFyY2gveDg2L2tlcm5lbC9jcHVpZC5jCiBGOglhcmNoL3g4Ni9rZXJuZWwvbXNyLmMKIAorQ1BVIFBPV0VSIE1PTklUT1JJTkcgU1VCU1lTVEVNCitNOglEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5uZXQ+CitNOglUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPgorUzoJTWFpbnRhaW5lZAorRjoJdG9vbHMvcG93ZXIvY3B1cG93ZXIKKwogQ1BVU0VUUwogTToJUGF1bCBNZW5hZ2UgPG1lbmFnZUBnb29nbGUuY29tPgogVzoJaHR0cDovL3d3dy5idWxsb3BlbnNvdXJjZS5vcmcvY3B1c2V0LwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvLmdpdGlnbm9yZSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE4M2RkMgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyMiBAQAorLmxpYnMKK2xpYmNwdXBvd2VyLnNvCitsaWJjcHVwb3dlci5zby4wCitsaWJjcHVwb3dlci5zby4wLjAuMAorYnVpbGQvY2NkdgorY3B1ZnJlcS1pbmZvCitjcHVmcmVxLXNldAorY3B1ZnJlcS1hcGVyZgorbGliLy5saWJzCitsaWIvY3B1ZnJlcS5sbworbGliL2NwdWZyZXEubworbGliL3Byb2MubG8KK2xpYi9wcm9jLm8KK2xpYi9zeXNmcy5sbworbGliL3N5c2ZzLm8KK3BvL2NwdXBvd2VydXRpbHMucG90Citwby8qLmdtbwordXRpbHMvY3B1ZnJlcS1pbmZvLm8KK3V0aWxzL2NwdWZyZXEtc2V0Lm8KK3V0aWxzL2NwdWZyZXEtYXBlcmYubworY3B1cG93ZXIKK2JlbmNoL2NwdWZyZXEtYmVuY2gKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL01ha2VmaWxlIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRjMmNmMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL01ha2VmaWxlCkBAIC0wLDAgKzEsMjc5IEBACisjIE1ha2VmaWxlIGZvciBjcHVwb3dlcgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDUsMjAwNiBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5uZXQ+CisjCisjIEJhc2VkIGxhcmdlbHkgb24gdGhlIE1ha2VmaWxlIGZvciB1ZGV2IGJ5OgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDMsMjAwNCBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdAa3JvYWguY29tPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyMKKworIyAtLS0gQ09ORklHVVJBVElPTiBCRUdJTiAtLS0KKworIyBTZXQgdGhlIGZvbGxvd2luZyB0byBgdHJ1ZScgdG8gbWFrZSBhIHVuc3RyaXBwZWQsIHVub3B0aW1pemVkCisjIGJpbmFyeS4gTGVhdmUgdGhpcyBzZXQgdG8gYGZhbHNlJyBmb3IgcHJvZHVjdGlvbiB1c2UuCitERUJVRyA/PQlmYWxzZQorCisjIG1ha2UgdGhlIGJ1aWxkIHNpbGVudC4gU2V0IHRoaXMgdG8gc29tZXRoaW5nIGVsc2UgdG8gbWFrZSBpdCBub2lzeSBhZ2Fpbi4KK1YgPz0JCWZhbHNlCisKKyMgSW50ZXJuYXRpb25hbGl6YXRpb24gc3VwcG9ydCAob3V0cHV0IGluIGRpZmZlcmVudCBsYW5ndWFnZXMpLgorIyBSZXF1aXJlcyBnZXR0ZXh0LgorTkxTID89CQl0cnVlCisKKyMgU2V0IHRoZSBmb2xsb3dpbmcgdG8gJ3RydWUnIHRvIGJ1aWxkL2luc3RhbGwgdGhlCisjIGNwdWZyZXEtYmVuY2ggYmVuY2htYXJraW5nIHRvb2wKK0NQVUZSUV9CRU5DSCA/PSB0cnVlCisKKyMgUHJlZml4IHRvIHRoZSBkaXJlY3RvcmllcyB3ZSdyZSBpbnN0YWxsaW5nIHRvCitERVNURElSID89CisKKyMgLS0tIENPTkZJR1VSQVRJT04gRU5EIC0tLQorCisKKworIyBQYWNrYWdlLXJlbGF0ZWQgZGVmaW5pdGlvbnMuIERpc3RyaWJ1dGlvbnMgY2FuIG1vZGlmeSB0aGUgdmVyc2lvbgorIyBhbmQgX3Nob3VsZF8gbW9kaWZ5IHRoZSBQQUNLQUdFX0JVR1JFUE9SVCBkZWZpbml0aW9uCisKK1ZFUlNJT049CQkJJChzaGVsbCAuL3V0aWxzL3ZlcnNpb24tZ2VuLnNoKQorTElCX01BSj0JCQkwLjAuMAorTElCX01JTj0JCQkwCisKK1BBQ0tBR0UgPQkJCWNwdXBvd2VyCitQQUNLQUdFX0JVR1JFUE9SVCA9CQljcHVmcmVxQHZnZXIua2VybmVsLm9yZworTEFOR1VBR0VTID0gCQkJZGUgZnIgaXQgY3MgcHQKKworCisjIERpcmVjdG9yeSBkZWZpbml0aW9ucy4gVGhlc2UgYXJlIGRlZmF1bHQgYW5kIG1vc3QgcHJvYmFibHkKKyMgZG8gbm90IG5lZWQgdG8gYmUgY2hhbmdlZC4gUGxlYXNlIG5vdGUgdGhhdCBERVNURElSIGlzCisjIGFkZGVkIGluIGZyb250IG9mIGFueSBvZiB0aGVtCisKK2JpbmRpciA/PQkvdXNyL2Jpbgorc2JpbmRpciA/PQkvdXNyL3NiaW4KK21hbmRpciA/PQkvdXNyL21hbgoraW5jbHVkZWRpciA/PQkvdXNyL2luY2x1ZGUKK2xpYmRpciA/PQkvdXNyL2xpYgorbG9jYWxlZGlyID89CS91c3Ivc2hhcmUvbG9jYWxlCitkb2NkaXIgPz0gICAgICAgL3Vzci9zaGFyZS9kb2MvcGFja2FnZXMvY3B1cG93ZXIKK2NvbmZkaXIgPz0gICAgICAvZXRjLworCisjIFRvb2xjaGFpbjogd2hhdCB0b29scyBkbyB3ZSB1c2UsIGFuZCB3aGF0IG9wdGlvbnMgZG8gdGhleSBuZWVkOgorCitDUCA9IGNwIC1mcFIKK0lOU1RBTEwgPSAvdXNyL2Jpbi9pbnN0YWxsIC1jCitJTlNUQUxMX1BST0dSQU0gPSAke0lOU1RBTEx9CitJTlNUQUxMX0RBVEEgID0gJHtJTlNUQUxMfSAtbSA2NDQKK0lOU1RBTExfU0NSSVBUID0gJHtJTlNUQUxMX1BST0dSQU19CisKKyMgSWYgeW91IGFyZSBydW5uaW5nIGEgY3Jvc3MgY29tcGlsZXIsIHlvdSBtYXkgd2FudCB0byBzZXQgdGhpcworIyB0byBzb21ldGhpbmcgbW9yZSBpbnRlcmVzdGluZywgbGlrZSAiYXJtLWxpbnV4LSIuICBJZiB5b3Ugd2FudAorIyB0byBjb21waWxlIHZzIHVDbGliYywgdGhhdCBjYW4gYmUgZG9uZSBoZXJlIGFzIHdlbGwuCitDUk9TUyA9ICMvdXNyL2kzODYtbGludXgtdWNsaWJjL3Vzci9iaW4vaTM4Ni11Y2xpYmMtCitDQyA9ICQoQ1JPU1MpZ2NjCitMRCA9ICQoQ1JPU1MpZ2NjCitBUiA9ICQoQ1JPU1MpYXIKK1NUUklQID0gJChDUk9TUylzdHJpcAorUkFOTElCID0gJChDUk9TUylyYW5saWIKK0hPU1RDQyA9IGdjYworCisKKyMgTm93IHdlIHNldCB1cCB0aGUgYnVpbGQgc3lzdGVtCisjCisKKyMgc2V0IHVwIFBXRCBzbyB0aGF0IG9sZGVyIHZlcnNpb25zIG9mIG1ha2Ugd2lsbCB3b3JrIHdpdGggb3VyIGJ1aWxkLgorUFdEID0gJChzaGVsbCBwd2QpCisKK0dNT19GSUxFUyA9ICR7c2hlbGwgZm9yIEhMQU5HIGluICR7TEFOR1VBR0VTfTsgZG8gZWNobyBwby8kJEhMQU5HLmdtbzsgZG9uZTt9CisKK2V4cG9ydCBDUk9TUyBDQyBBUiBTVFJJUCBSQU5MSUIgQ0ZMQUdTIExERkxBR1MgTElCX09CSlMKKworIyBjaGVjayBpZiBjb21waWxlciBvcHRpb24gaXMgc3VwcG9ydGVkCitjYy1zdXBwb3J0cyA9ICR7c2hlbGwgaWYgJChDQykgJHsxfSAtUyAtbyAvZGV2L251bGwgLXhjIC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuIGVjaG8gIiQoMSkiOyBmaTt9CisKKyMgdXNlICctT3MnIG9wdGltaXphdGlvbiBpZiBhdmFpbGFibGUsIGVsc2UgdXNlIC1PMgorT1BUSU1JWkFUSU9OIDo9ICQoY2FsbCBjYy1zdXBwb3J0cywtT3MsLU8yKQorCitXQVJOSU5HUyA6PSAtV2FsbCAtV2NoYXItc3Vic2NyaXB0cyAtV3BvaW50ZXItYXJpdGggLVdzaWduLWNvbXBhcmUKK1dBUk5JTkdTICs9ICQoY2FsbCBjYy1zdXBwb3J0cywtV25vLXBvaW50ZXItc2lnbikKK1dBUk5JTkdTICs9ICQoY2FsbCBjYy1zdXBwb3J0cywtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCkKK1dBUk5JTkdTICs9IC1Xc2hhZG93CisKK0NGTEFHUyArPSAtRFZFUlNJT049XCIkKFZFUlNJT04pXCIgLURQQUNLQUdFPVwiJChQQUNLQUdFKVwiIFwKKwkJLURQQUNLQUdFX0JVR1JFUE9SVD1cIiQoUEFDS0FHRV9CVUdSRVBPUlQpXCIgLURfR05VX1NPVVJDRQorCitVVElMX09CSlMgPSAgdXRpbHMvaGVscGVycy9hbWQubyB1dGlscy9oZWxwZXJzL3RvcG9sb2d5Lm8gdXRpbHMvaGVscGVycy9tc3IubyBcCisJdXRpbHMvaGVscGVycy9zeXNmcy5vIHV0aWxzL2hlbHBlcnMvbWlzYy5vIHV0aWxzL2hlbHBlcnMvY3B1aWQubyBcCisJdXRpbHMvaGVscGVycy9wY2kubyB1dGlscy9oZWxwZXJzL2JpdG1hc2subyBcCisJdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLm8gdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLm8gXAorCXV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUubyB1dGlscy9pZGxlX21vbml0b3IvY3B1aWRsZV9zeXNmcy5vIFwKKwl1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5vIHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLm8gXAorCXV0aWxzL2NwdXBvd2VyLm8gdXRpbHMvY3B1ZnJlcS1pbmZvLm8gdXRpbHMvY3B1ZnJlcS1zZXQubyBcCisJdXRpbHMvY3B1cG93ZXItc2V0Lm8gdXRpbHMvY3B1cG93ZXItaW5mby5vIHV0aWxzL2NwdWlkbGUtaW5mby5vCisKK1VUSUxfSEVBREVSUyA9IHV0aWxzL2hlbHBlcnMvaGVscGVycy5oIHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmggXAorCXV0aWxzL2hlbHBlcnMvYml0bWFzay5oIFwKKwl1dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5oIHV0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmRlZgorCitVVElMX1NSQyA6PSAkKFVUSUxfT0JKUzoubz0uYykKKworTElCX0hFQURFUlMgPSAJbGliL2NwdWZyZXEuaCBsaWIvc3lzZnMuaAorTElCX1NSQyA9IAlsaWIvY3B1ZnJlcS5jIGxpYi9zeXNmcy5jCitMSUJfT0JKUyA9IAlsaWIvY3B1ZnJlcS5vIGxpYi9zeXNmcy5vCisKK0NGTEFHUyArPQktcGlwZQorCitpZmVxICgkKHN0cmlwICQoTkxTKSksdHJ1ZSkKKwlJTlNUQUxMX05MUyArPSBpbnN0YWxsLWdtbworCUNPTVBJTEVfTkxTICs9IGNyZWF0ZS1nbW8KK2VuZGlmCisKK2lmZXEgKCQoc3RyaXAgJChDUFVGUlFfQkVOQ0gpKSx0cnVlKQorCUlOU1RBTExfQkVOQ0ggKz0gaW5zdGFsbC1iZW5jaAorCUNPTVBJTEVfQkVOQ0ggKz0gY29tcGlsZS1iZW5jaAorZW5kaWYKKworQ0ZMQUdTICs9ICQoV0FSTklOR1MpCisKK2lmZXEgKCQoc3RyaXAgJChWKSksZmFsc2UpCisJUVVJRVQ9QAorCUVDSE89QGVjaG8KK2Vsc2UKKwlRVUlFVD0KKwlFQ0hPPUBcIworZW5kaWYKK2V4cG9ydCBRVUlFVCBFQ0hPCisKKyMgaWYgREVCVUcgaXMgZW5hYmxlZCwgdGhlbiB3ZSBkbyBub3Qgc3RyaXAgb3Igb3B0aW1pemUKK2lmZXEgKCQoc3RyaXAgJChERUJVRykpLHRydWUpCisJQ0ZMQUdTICs9IC1PMSAtZyAtRERFQlVHCisJU1RSSVBDTUQgPSAvYmluL3RydWUgLVNpbmNlX3dlX2FyZV9kZWJ1Z2dpbmcKK2Vsc2UKKwlDRkxBR1MgKz0gJChPUFRJTUlaQVRJT04pIC1mb21pdC1mcmFtZS1wb2ludGVyCisJU1RSSVBDTUQgPSAkKFNUUklQKSAtcyAtLXJlbW92ZS1zZWN0aW9uPS5ub3RlIC0tcmVtb3ZlLXNlY3Rpb249LmNvbW1lbnQKK2VuZGlmCisKKworIyB0aGUgYWN0dWFsIG1ha2UgcnVsZXMKKworYWxsOiBsaWJjcHVwb3dlciBjcHVwb3dlciAkKENPTVBJTEVfTkxTKSAkKENPTVBJTEVfQkVOQ0gpCisKK2xpYi8lLm86ICQoTElCX1NSQykgJChMSUJfSEVBREVSUykKKwkkKEVDSE8pICIgIENDICAgICAgIiAkQAorCSQoUVVJRVQpICQoQ0MpICQoQ0ZMQUdTKSAtZlBJQyAtbyAkQCAtYyBsaWIvJCouYworCitsaWJjcHVwb3dlci5zby4kKExJQl9NQUopOiAkKExJQl9PQkpTKQorCSQoRUNITykgIiAgTEQgICAgICAiICRACisJJChRVUlFVCkgJChDQykgLXNoYXJlZCAkKENGTEFHUykgJChMREZMQUdTKSAtbyAkQCBcCisJCS1XbCwtc29uYW1lLGxpYmNwdXBvd2VyLnNvLiQoTElCX01JTikgJChMSUJfT0JKUykKKwlAbG4gLXNmICRAIGxpYmNwdXBvd2VyLnNvCisJQGxuIC1zZiAkQCBsaWJjcHVwb3dlci5zby4kKExJQl9NSU4pCisKK2xpYmNwdXBvd2VyOiBsaWJjcHVwb3dlci5zby4kKExJQl9NQUopCisKKyMgTGV0IGFsbCAubyBmaWxlcyBkZXBlbmQgb24gaXRzIC5jIGZpbGUgYW5kIGFsbCBoZWFkZXJzCisjIE1pZ2h0IGJlIHdvcnRoIHRvIHB1dCB0aGlzIGludG8gdXRpbHMvTWFrZWZpbGUgYXQgc29tZSBwb2ludCBvZiB0aW1lCiskKFVUSUxfT0JKUyk6ICQoVVRJTF9IRUFERVJTKQorCisuYy5vOgorCSQoRUNITykgIiAgQ0MgICAgICAiICRACisJJChRVUlFVCkgJChDQykgJChDRkxBR1MpIC1JLi9saWIgLUkgLi91dGlscyAtbyAkQCAtYyAkKi5jCisKK2NwdXBvd2VyOiAkKFVUSUxfT0JKUykgbGliY3B1cG93ZXIuc28uJChMSUJfTUFKKQorCSQoRUNITykgIiAgQ0MgICAgICAiICRACisJJChRVUlFVCkgJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgLWxjcHVwb3dlciAtbHJ0IC1scGNpIC1MLiAtbyAkQCAkKFVUSUxfT0JKUykKKwkkKFFVSUVUKSAkKFNUUklQQ01EKSAkQAorCitwby8kKFBBQ0tBR0UpLnBvdDogJChVVElMX1NSQykKKwkkKEVDSE8pICIgIEdFVFRFWFQgIiAkQAorCSQoUVVJRVQpIHhnZXR0ZXh0IC0tZGVmYXVsdC1kb21haW49JChQQUNLQUdFKSAtLWFkZC1jb21tZW50cyBcCisJCS0ta2V5d29yZD1fIC0ta2V5d29yZD1OXyAkKFVUSUxfU1JDKSAmJiBcCisJdGVzdCAtZiAkKFBBQ0tBR0UpLnBvICYmIFwKKwltdiAtZiAkKFBBQ0tBR0UpLnBvIHBvLyQoUEFDS0FHRSkucG90CisKK3BvLyUuZ21vOiBwby8lLnBvCisJJChFQ0hPKSAiICBNU0dGTVQgICIgJEAKKwkkKFFVSUVUKSBtc2dmbXQgLW8gJEAgcG8vJCoucG8KKworY3JlYXRlLWdtbzogJHtHTU9fRklMRVN9CisKK3VwZGF0ZS1wbzogcG8vJChQQUNLQUdFKS5wb3QKKwkkKEVDSE8pICIgIE1TR01SRyAgIiAkQAorCSQoUVVJRVQpIEBmb3IgSExBTkcgaW4gJChMQU5HVUFHRVMpOyBkbyBcCisJCWVjaG8gLW4gIlVwZGF0aW5nICQkSExBTkcgIjsgXAorCQlpZiBtc2dtZXJnZSBwby8kJEhMQU5HLnBvIHBvLyQoUEFDS0FHRSkucG90IC1vIFwKKwkJICAgcG8vJCRITEFORy5uZXcucG87IHRoZW4gXAorCQkJbXYgLWYgcG8vJCRITEFORy5uZXcucG8gcG8vJCRITEFORy5wbzsgXAorCQllbHNlIFwKKwkJCWVjaG8gIm1zZ21lcmdlIGZvciAkJEhMQU5HIGZhaWxlZCEiOyBcCisJCQlybSAtZiBwby8kJEhMQU5HLm5ldy5wbzsgXAorCQlmaTsgXAorCWRvbmU7CisKK2NvbXBpbGUtYmVuY2g6IGxpYmNwdXBvd2VyLnNvLiQoTElCX01BSikKKwlAVj0kKFYpIGNvbmZkaXI9JChjb25mZGlyKSAkKE1BS0UpIC1DIGJlbmNoCisKK2NsZWFuOgorCS1maW5kIC4gXCggLW5vdCAtdHlwZSBkIFwpIC1hbmQgXCggLW5hbWUgJyp+JyAtbyAtbmFtZSAnKi5bb2FzXScgXCkgLXR5cGUgZiAtcHJpbnQgXAorCSB8IHhhcmdzIHJtIC1mCisJLXJtIC1mICQoVVRJTF9CSU5TKQorCS1ybSAtZiAkKElETEVfT0JKUykKKwktcm0gLWYgY3B1cG93ZXIKKwktcm0gLWYgbGliY3B1cG93ZXIuc28qCisJLXJtIC1yZiBwby8qLmdtbyBwby8qLnBvdAorCSQoTUFLRSkgLUMgYmVuY2ggY2xlYW4KKworCitpbnN0YWxsLWxpYjoKKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikke2xpYmRpcn0KKwkkKENQKSBsaWJjcHVwb3dlci5zbyogJChERVNURElSKSR7bGliZGlyfS8KKwkkKElOU1RBTEwpIC1kICQoREVTVERJUikke2luY2x1ZGVkaXJ9CisJJChJTlNUQUxMX0RBVEEpIGxpYi9jcHVmcmVxLmggJChERVNURElSKSR7aW5jbHVkZWRpcn0vY3B1ZnJlcS5oCisKK2luc3RhbGwtdG9vbHM6CisJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJHtiaW5kaXJ9CisJJChJTlNUQUxMX1BST0dSQU0pIGNwdXBvd2VyICQoREVTVERJUikke2JpbmRpcn0KKworaW5zdGFsbC1tYW46CisJJChJTlNUQUxMX0RBVEEpIC1EIG1hbi9jcHVwb3dlci4xICQoREVTVERJUikke21hbmRpcn0vbWFuMS9jcHVwb3dlci4xCisJJChJTlNUQUxMX0RBVEEpIC1EIG1hbi9jcHVwb3dlci1mcmVxdWVuY3ktc2V0LjEgJChERVNURElSKSR7bWFuZGlyfS9tYW4xL2NwdXBvd2VyLWZyZXF1ZW5jeS1zZXQuMQorCSQoSU5TVEFMTF9EQVRBKSAtRCBtYW4vY3B1cG93ZXItZnJlcXVlbmN5LWluZm8uMSAkKERFU1RESVIpJHttYW5kaXJ9L21hbjEvY3B1cG93ZXItZnJlcXVlbmN5LWluZm8uMQorCSQoSU5TVEFMTF9EQVRBKSAtRCBtYW4vY3B1cG93ZXItc2V0LjEgJChERVNURElSKSR7bWFuZGlyfS9tYW4xL2NwdXBvd2VyLXNldC4xCisJJChJTlNUQUxMX0RBVEEpIC1EIG1hbi9jcHVwb3dlci1pbmZvLjEgJChERVNURElSKSR7bWFuZGlyfS9tYW4xL2NwdXBvd2VyLWluZm8uMQorCSQoSU5TVEFMTF9EQVRBKSAtRCBtYW4vY3B1cG93ZXItbW9uaXRvci4xICQoREVTVERJUikke21hbmRpcn0vbWFuMS9jcHVwb3dlci1tb25pdG9yLjEKKworaW5zdGFsbC1nbW86CisJJChJTlNUQUxMKSAtZCAkKERFU1RESVIpJHtsb2NhbGVkaXJ9CisJZm9yIEhMQU5HIGluICQoTEFOR1VBR0VTKTsgZG8gXAorCQllY2hvICckKElOU1RBTExfREFUQSkgLUQgcG8vJCRITEFORy5nbW8gJChERVNURElSKSR7bG9jYWxlZGlyfS8kJEhMQU5HL0xDX01FU1NBR0VTL2NwdXBvd2VyLm1vJzsgXAorCQkkKElOU1RBTExfREFUQSkgLUQgcG8vJCRITEFORy5nbW8gJChERVNURElSKSR7bG9jYWxlZGlyfS8kJEhMQU5HL0xDX01FU1NBR0VTL2NwdXBvd2VyLm1vOyBcCisJZG9uZTsKKworaW5zdGFsbC1iZW5jaDoKKwlAI0RFU1RESVIgbXVzdCBiZSBzZXQgZnJvbSBvdXRzaWRlIHRvIHN1cnZpdmUKKwlAc2JpbmRpcj0kKHNiaW5kaXIpIGJpbmRpcj0kKGJpbmRpcikgZG9jZGlyPSQoZG9jZGlyKSBjb25mZGlyPSQoY29uZmRpcikgJChNQUtFKSAtQyBiZW5jaCBpbnN0YWxsCisKK2luc3RhbGw6IGFsbCBpbnN0YWxsLWxpYiBpbnN0YWxsLXRvb2xzIGluc3RhbGwtbWFuICQoSU5TVEFMTF9OTFMpICQoSU5TVEFMTF9CRU5DSCkKKwordW5pbnN0YWxsOgorCS0gcm0gLWYgJChERVNURElSKSR7bGliZGlyfS9saWJjcHVwb3dlci4qCisJLSBybSAtZiAkKERFU1RESVIpJHtpbmNsdWRlZGlyfS9jcHVmcmVxLmgKKwktIHJtIC1mICQoREVTVERJUikke2JpbmRpcn0vdXRpbHMvY3B1cG93ZXIKKwktIHJtIC1mICQoREVTVERJUikke21hbmRpcn0vbWFuMS9jcHVmcmVxLXNldC4xCisJLSBybSAtZiAkKERFU1RESVIpJHttYW5kaXJ9L21hbjEvY3B1ZnJlcS1pbmZvLjEKKwktIGZvciBITEFORyBpbiAkKExBTkdVQUdFUyk7IGRvIFwKKwkJcm0gLWYgJChERVNURElSKSR7bG9jYWxlZGlyfS8kJEhMQU5HL0xDX01FU1NBR0VTL2NwdXBvd2VyLm1vOyBcCisJICBkb25lOworCisuUEhPTlk6IGFsbCB1dGlscyBsaWJjcHVwb3dlciB1cGRhdGUtcG8gY3JlYXRlLWdtbyBpbnN0YWxsLWxpYiBpbnN0YWxsLXRvb2xzIGluc3RhbGwtbWFuIGluc3RhbGwtZ21vIGluc3RhbGwgdW5pbnN0YWxsIGNsZWFuCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9SRUFETUUgYi90b29scy9wb3dlci9jcHVwb3dlci9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5ZDRjMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL1JFQURNRQpAQCAtMCwwICsxLDQ5IEBACitUaGUgY3B1ZnJlcXV0aWxzIHBhY2thZ2UgKGhvbWVwYWdlOiAKK2h0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL2NwdWZyZXEvY3B1ZnJlcXV0aWxzLmh0bWwgKSAKK2NvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CisKK3JlcXVpcmVtZW50cworLS0tLS0tLS0tLS0tCisKK09uIHg4NiBwY2l1dGlscyBpcyBuZWVkZWQgYXQgcnVudGltZSAoLWxwY2kpLgorRm9yIGNvbXBpbGF0aW9uIHBjaXV0aWxzLWRldmVsIChwY2kvcGNpLmgpIGFuZCBhIGdjYyB2ZXJzaW9uCitwcm92aWRpbmcgY3B1aWQuaCBpcyBuZWVkZWQuCitGb3IgYm90aCBpdCdzIG5vdCBleHBsaWNpdGx5IGNoZWNrZWQgZm9yICh5ZXQpLgorCisKK2xpYmNwdWZyZXEKKy0tLS0tLS0tLS0KKworImxpYmNwdWZyZXEiIGlzIGEgbGlicmFyeSB3aGljaCBvZmZlcnMgYSB1bmlmaWVkIGFjY2VzcyBtZXRob2QgZm9yIHVzZXJzcGFjZQordG9vbHMgYW5kIHByb2dyYW1zIHRvIHRoZSBjcHVmcmVxIGNvcmUgYW5kIGRyaXZlcnMgaW4gdGhlIExpbnV4IGtlcm5lbC4gVGhpcworYWxsb3dzIGZvciBjb2RlIHJlZHVjdGlvbiBpbiB1c2Vyc3BhY2UgdG9vbHMsIGEgY2xlYW4gaW1wbGVtZW50YXRpb24gb2YKK3RoZSBpbnRlcmFjdGlvbiB0byB0aGUgY3B1ZnJlcSBjb3JlLCBhbmQgc3VwcG9ydCBmb3IgYm90aCB0aGUgc3lzZnMgYW5kIHByb2MKK2ludGVyZmFjZXMgW2RlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uLCBzZWUgYmVsb3ddLgorCisKK2NvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworbWFrZQorc3UKK21ha2UgaW5zdGFsbAorCitzaG91bGQgc3VmZmljZSBvbiBtb3N0IHN5c3RlbXMuIEl0IGJ1aWxkcyBkZWZhdWx0IGxpYmNwdWZyZXEsCitjcHVmcmVxLXNldCBhbmQgY3B1ZnJlcS1pbmZvIGZpbGVzIGFuZCBpbnN0YWxscyB0aGVtIGluIC91c3IvbGliIGFuZAorL3Vzci9iaW4sIHJlc3BlY3RpdmVseS4gSWYgeW91IHdhbnQgdG8gc2V0IHVwIHRoZSBwYXRocyBkaWZmZXJlbnRseSBhbmQvb3IKK3dhbnQgdG8gY29uZmlndXJlIHRoZSBwYWNrYWdlIHRvIHlvdXIgc3BlY2lmaWMgbmVlZHMsIHlvdSBuZWVkIHRvIG9wZW4KKyJNYWtlZmlsZSIgd2l0aCBhbiBlZGl0b3Igb2YgeW91ciBjaG9pY2UgYW5kIGVkaXQgdGhlIGJsb2NrIG1hcmtlZAorQ09ORklHVVJBVElPTi4KKworCitUSEFOS1MKKy0tLS0tLQorTWFueSB0aGFua3MgdG8gTWF0dGlhIERvbmdpbGkgd2hvIHdyb3RlIHRoZSBhdXRvdG9vbGl6YXRpb24gYW5kCitsaWJ0b29saXphdGlvbiwgdGhlIG1hbnBhZ2VzIGFuZCB0aGUgaXRhbGlhbiBsYW5ndWFnZSBmaWxlIGZvciBjcHVmcmVxdXRpbHM7Cit0byBEYXZlIEpvbmVzIGZvciBoaXMgZmVlZGJhY2sgYW5kIGhpcyBkdW1wX3BzYiB0b29sOyB0byBCcnVubyBEdWNyb3QgZm9yIGhpcworcG93ZXJub3ctazgtZGVjb2RlIGFuZCBpbnRlbF9nc2ljIHRvb2xzIGFzIHdlbGwgYXMgdGhlIGZyZW5jaCBsYW5ndWFnZSBmaWxlOworYW5kIHRvIHZhcmlvdXMgb3RoZXJzIGNvbW1lbnRpbmcgb24gdGhlIHByZXZpb3VzIChwcmUtKXJlbGVhc2VzIG9mIAorY3B1ZnJlcXV0aWxzLgorCisKKyAgICAgICAgRG9taW5payBCcm9kb3dza2kKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL1RvRG8gYi90b29scy9wb3dlci9jcHVwb3dlci9Ub0RvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NGI3OGIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9Ub0RvCkBAIC0wLDAgKzEsMTEgQEAKK1RvRG9zIHNvcnRlZCBieSBwcmlvcml0eToKKworLSBVc2UgYml0bWFzayBmdW5jdGlvbnMgdG8gcGFyc2UgQ1BVIHRvcG9sb2d5IG1vcmUgcm9idXN0CisgIChjdXJyZW50IGltcGxlbWVudGF0aW9uIGhhcyBpc3N1ZXMgb24gQU1EKQorLSBUcnkgdG8gcmVhZCBvdXQgYm9vc3Qgc3RhdGVzIGFuZCBmcmVxdWVuY2llcyBvbiBJbnRlbAorLSBBZGp1c3QgUkVBRE1FCistIFNvbWV3aGVyZSBzYXcgdGhlIGFiaWxpdHkgdG8gcmVhZCBwb3dlciBjb25zdW1wdGlvbiBvZgorICBSQU0gZnJvbSBIVyBvbiBJbnRlbCBTYW5keUJyaWRnZSAtPiBhbm90aGVyIG1vbml0b3I/CistIEFkZCBhbm90aGVyIGMxZSBkZWJ1ZyBpZGxlIG1vbml0b3IKKyAgLT4gSXMgYnkgZGVzaWduIHJhY3kgd2l0aCBCSU9TLCBidXQgY291bGQgYmUgYWRkZWQKKyAgICAgd2l0aCBhIC0tZm9yY2Ugb3B0aW9uIGFuZCBzb21lICJiZSBjYXJlZnVsIiBtZXNzYWdlcwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvTWFrZWZpbGUgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjY3NjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvTWFrZWZpbGUKQEAgLTAsMCArMSwyOSBAQAorTElCUyA9IC1MLi4vIC1sbSAtbGNwdXBvd2VyCisKK09CSlMgPSBtYWluLm8gcGFyc2UubyBzeXN0ZW0ubyBiZW5jaG1hcmsubworQ0ZMQUdTICs9IC1EX0dOVV9TT1VSQ0UgLUkuLi9saWIgLURERUZBVUxUX0NPTkZJR19GSUxFPVwiJChjb25mZGlyKS9jcHVmcmVxLWJlbmNoLmNvbmZcIgorCislLm8gOiAlLmMKKwkkKEVDSE8pICIgIENDICAgICAgIiAkQAorCSQoUVVJRVQpICQoQ0MpIC1jICQoQ0ZMQUdTKSAkPCAtbyAkQAorCitjcHVmcmVxLWJlbmNoOiAkKE9CSlMpCisJJChFQ0hPKSAiICBDQyAgICAgICIgJEAKKwkkKFFVSUVUKSAkKENDKSAtbyAkQCAkKENGTEFHUykgJChPQkpTKSAkKExJQlMpCisKK2FsbDogY3B1ZnJlcS1iZW5jaAorCitpbnN0YWxsOgorCW1rZGlyIC1wICQoREVTVERJUikvJChzYmluZGlyKQorCW1rZGlyIC1wICQoREVTVERJUikvJChiaW5kaXIpCisJbWtkaXIgLXAgJChERVNURElSKS8kKGRvY2RpcikKKwlta2RpciAtcCAkKERFU1RESVIpLyQoY29uZmRpcikKKwlpbnN0YWxsIC1tIDc1NSBjcHVmcmVxLWJlbmNoICQoREVTVERJUikvJChzYmluZGlyKS9jcHVmcmVxLWJlbmNoCisJaW5zdGFsbCAtbSA3NTUgY3B1ZnJlcS1iZW5jaF9wbG90LnNoICQoREVTVERJUikvJChiaW5kaXIpL2NwdWZyZXEtYmVuY2hfcGxvdC5zaAorCWluc3RhbGwgLW0gNjQ0IFJFQURNRS1CRU5DSCAkKERFU1RESVIpLyQoZG9jZGlyKS9SRUFETUUtQkVOQ0gKKwlpbnN0YWxsIC1tIDc1NSBjcHVmcmVxLWJlbmNoX3NjcmlwdC5zaCAkKERFU1RESVIpLyQoZG9jZGlyKS9jcHVmcmVxLWJlbmNoX3NjcmlwdC5zaAorCWluc3RhbGwgLW0gNjQ0IGV4YW1wbGUuY2ZnICQoREVTVERJUikvJChjb25mZGlyKS9jcHVmcmVxLWJlbmNoLmNvbmYKKworY2xlYW46CisJcm0gLWYgKi5vCisJcm0gLWYgY3B1ZnJlcS1iZW5jaApkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvUkVBRE1FLUJFTkNIIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvUkVBRE1FLUJFTkNICm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOTNlYzcKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9SRUFETUUtQkVOQ0gKQEAgLTAsMCArMSwxMjQgQEAKK1RoaXMgaXMgY3B1ZnJlcS1iZW5jaCwgYSBtaWNyb2JlbmNobWFyayBmb3IgdGhlIGNwdWZyZXEgZnJhbWV3b3JrLgorCitQdXJwb3NlCis9PT09PT09CisKK1doYXQgaXMgdGhpcyBiZW5jaG1hcmsgZm9yOgorICAtIElkZW50aWZ5IHdvcnN0IGNhc2UgcGVyZm9ybWFuY2UgbG9zcyB3aGVuIGRvaW5nIGR5bmFtaWMgZnJlcXVlbmN5CisgICAgc2NhbGluZyB1c2luZyBMaW51eCBrZXJuZWwgZ292ZXJub3JzCisgIC0gSWRlbnRpZnkgYXZlcmFnZSByZWFjdGlvbiB0aW1lIG9mIGEgZ292ZXJub3IgdG8gQ1BVIGxvYWQgY2hhbmdlcworICAtIChTdHJlc3MpIFRlc3Rpbmcgd2hldGhlciBhIGNwdWZyZXEgbG93IGxldmVsIGRyaXZlciBvciBnb3Zlcm5vciB3b3JrcworICAgIGFzIGV4cGVjdGVkCisgIC0gSWRlbnRpZnkgY3B1ZnJlcSByZWxhdGVkIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIGJldHdlZW4ga2VybmVscworICAtIFBvc3NpYmx5IFJlYWwgdGltZSBwcmlvcml0eSB0ZXN0aW5nPyAtPiB3aGF0IGhhcHBlbnMgaWYgdGhlcmUgYXJlCisgICAgcHJvY2Vzc2VzIHdpdGggYSBoaWdoZXIgcHJpbyB0aGFuIHRoZSBnb3Zlcm5vcidzIGtlcm5lbCB0aHJlYWQKKyAgLSAuLi4KKworV2hhdCB0aGlzIGJlbmNobWFyayBkb2VzICpub3QqIGNvdmVyOgorICAtIFBvd2VyIHNhdmluZyByZWxhdGVkIHJlZ3Jlc3Npb25zIChJbiBmYWN0IGFzIGJldHRlciB0aGUgcGVyZm9ybWFuY2UKKyAgICB0aHJvdWdocHV0IGlzLCB0aGUgd29yc2UgdGhlIHBvd2VyIHNhdmluZ3Mgd2lsbCBiZSwgYnV0IHRoZSBmaXJzdCBzaG91bGQKKyAgICBtb3N0bHkgY291bnQgbW9yZS4uLikKKyAgLSBSZWFsIHdvcmxkICh3b3JrbG9hZHMpCisKKworRGVzY3JpcHRpb24KKz09PT09PT09PT09CisKK2NwdWZyZXEtYmVuY2ggaGVscHMgdG8gdGVzdCB0aGUgY29uZGl0aW9uIG9mIGEgZ2l2ZW4gY3B1ZnJlcSBnb3Zlcm5vci4KK0ZvciB0aGF0IHB1cnBvc2UsIGl0IGNvbXBhcmVzIHRoZSBwZXJmb3JtYW5jZSBnb3Zlcm5vciB0byBhIGNvbmZpZ3VyZWQKK3Bvd2Vyc2F2ZSBtb2R1bGUuCisKKworSG93IGl0IHdvcmtzCis9PT09PT09PT09PT0KK1lvdSBjYW4gc3BlY2lmeSBsb2FkICgxMDAlIENQVSBsb2FkKSBhbmQgc2xlZXAgKDAlIENQVSBsb2FkKSB0aW1lcyBpbiB1cyB3aGljaAord2lsbCBiZSBydW4gWCB0aW1lIGluIGEgcm93IChjeWNsZXMpOgorCisgICAgICAgICBzbGVlcD0yNTAwMAorICAgICAgICAgbG9hZD0yNTAwMAorICAgICAgICAgY3ljbGVzPTIwCisKK1RoaXMgcGFydCBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHdpbGwgY3JlYXRlIDI1bXMgbG9hZC9zbGVlcCB0dXJucywKK3JlcGVhdGVkIDIwIHRpbWVzLgorCitBZGRpbmcgdGhpczoKKyAgICAgICAgIHNsZWVwX3N0ZXA9MjUwMDAKKyAgICAgICAgIGxvYWRfc3RlcD0yNTAwMAorICAgICAgICAgcm91bmRzPTUKK1dpbGwgaW5jcmVhc2UgbG9hZCBhbmQgc2xlZXAgdGltZSBieSAyNW1zIDUgdGltZXMuCitUb2dldGhlciB5b3UgZ2V0IGZvbGxvd2luZyB0ZXN0OgorMjVtcyAgbG9hZC9zbGVlcCB0aW1lIHJlcGVhdGVkIDIwIHRpbWVzIChjeWNsZXMpLgorNTBtcyAgbG9hZC9zbGVlcCB0aW1lIHJlcGVhdGVkIDIwIHRpbWVzIChjeWNsZXMpLgorLi4KKzEwMG1zIGxvYWQvc2xlZXAgdGltZSByZXBlYXRlZCAyMCB0aW1lcyAoY3ljbGVzKS4KKworRmlyc3QgaXQgaXMgY2FsaWJyYXRlZCBob3cgbG9uZyBhIHNwZWNpZmljIENQVSBpbnRlbnNpdmUgY2FsY3VsYXRpb24KK3Rha2VzIG9uIHRoaXMgbWFjaGluZSBhbmQgbmVlZHMgdG8gYmUgcnVuIGluIGEgbG9vcCB1c2luZyB0aGUgcGVyZm9ybWFuY2UKK2dvdmVybm9yLgorVGhlbiB0aGUgYWJvdmUgdGVzdCBydW5zIGFyZSBwcm9jZXNzZWQgdXNpbmcgdGhlIHBlcmZvcm1hbmNlIGdvdmVybm9yCithbmQgdGhlIGdvdmVybm9yIHRvIHRlc3QuIFRoZSB0aW1lIHRoZSBjYWxjdWxhdGlvbiByZWFsbHkgbmVlZGVkCit3aXRoIHRoZSBkeW5hbWljIGZyZXEgc2NhbGluZyBnb3Zlcm5vciBpcyBjb21wYXJlZCB3aXRoIHRoZSB0aW1lIG5lZWRlZAorb24gZnVsbCBwZXJmb3JtYW5jZSBhbmQgeW91IGdldCB0aGUgb3ZlcmFsbCBwZXJmb3JtYW5jZSBsb3NzLgorCisKK0V4YW1wbGUgb2YgZXhwZWN0ZWQgcmVzdWx0cyB3aXRoIG9uZGVtYW5kIGdvdmVybm9yOgorCitUaGlzIHNob3dzIGV4cGVjdGVkIHJlc3VsdHMgb2YgdGhlIGZpcnN0IHR3byB0ZXN0IHJ1biByb3VuZHMgZnJvbQorYWJvdmUgY29uZmlnLCB5b3UgdGhlcmUgaGF2ZToKKworMTAwJSBDUFUgbG9hZCAobG9hZCkgfCAwICUgQ1BVIGxvYWQgKHNsZWVwKSAgfCByb3VuZAorICAgMjUgbXMgICAgICAgICAgICAgfCAgICAyNSBtcyAgICAgICAgICAgICAgfCAgIDEKKyAgIDUwIG1zICAgICAgICAgICAgIHwgICAgNTAgbXMgICAgICAgICAgICAgIHwgICAyCisKK0ZvciBleGFtcGxlIGlmIG9uZGVtYW5kIGdvdmVybm9yIGlzIGNvbmZpZ3VyZWQgdG8gaGF2ZSBhIDUwbXMKK3NhbXBsaW5nIHJhdGUgeW91IGdldDoKKworSW4gcm91bmQgMSwgb25kZW1hbmQgc2hvdWxkIGhhdmUgcmF0aGVyIHN0YXRpYyA1MCUgbG9hZCBhbmQgcHJvYmFibHkKK3dvbid0IGV2ZXIgc3dpdGNoIHVwIChhcyBsb25nIGFzIHVwX3RocmVzaG9sZCBpcyBhYm92ZSkuCisKK0luIHJvdW5kIDIsIGlmIHRoZSBvbmRlbWFuZCBzYW1wbGluZyB0aW1lcyBleGFjdGx5IG1hdGNoIHRoZSBsb2FkL3NsZWVwCit0cmlnZ2VyIG9mIHRoZSBjcHVmcmVxLWJlbmNoLCB5b3Ugd2lsbCBzZWUgbm8gcGVyZm9ybWFuY2UgbG9zcyAoY29tcGFyZSB3aXRoCitiZWxvdyBwb3NzaWJsZSBvbmRlbWFuZCBzYW1wbGUga2ljayBpbnMgKDEpKToKKworQnV0IGlmIG9uZGVtYW5kIGFsd2F5cyBraWNrcyBpbiBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsb2FkIHNsZWVwIGN5Y2xlcywgaXQKK3dpbGwgYWx3YXlzIHNlZSA1MCUgbG9hZHMgYW5kIHlvdSBnZXQgd29yc3QgcGVyZm9ybWFuY2UgaW1wYWN0IG5ldmVyCitzd2l0Y2hpbmcgdXAgKGNvbXBhcmUgd2l0aCBiZWxvdyBwb3NzaWJsZSBvbmRlbWFuZCBzYW1wbGUga2ljayBpbnMgKDIpKTo6CisKKyAgICAgIDUwICAgICA1MCAgIDUwICAgNTBtcyAtPnRpbWUKK2xvYWQgLS0tLS18ICAgICB8LS0tLS18ICAgICB8LS0tLS18ICAgICB8LS0tLS18CisgICAgICAgICAgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfCAgICAgfAorc2xlZXAgICAgIHwtLS0tLXwgICAgIHwtLS0tLXwgICAgIHwtLS0tLXwgICAgIHwtLS0tCisgICAgfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0tfC0tLS0gIG9uZGVtYW5kIHNhbXBsaW5nICgxKQorICAgICAgICAgMTAwICAgIDAgICAgMTAwICAgIDAgICAgMTAwICAgIDAgICAgMTAwICAgICBsb2FkIHNlZW4gYnkgb25kZW1hbmQoJSkKKyAgICAgICB8LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0tLS18LS0gICBvbmRlbWFuZCBzYW1wbGluZyAoMikKKyAgICAgIDUwICAgICA1MCAgICA1MCAgICA1MCAgICA1MCAgICA1MCAgICA1MCAgICAgICAgbG9hZCBzZWVuIGJ5IG9uZGVtYW5kKCUpCisKK1lvdSBjYW4gZWFzaWx5IHRlc3QgYWxsIGtpbmQgb2YgbG9hZC9zbGVlcCB0aW1lcyBhbmQgY2hlY2sgd2hldGhlciB5b3VyCitnb3Zlcm5vciBpbiBhdmVyYWdlIGJlaGF2ZXMgYXMgZXhwZWN0ZWQuCisKKworVG9EbworPT09PQorCitQcm92aWRlIGEgZ251cGxvdCB1dGlsaXR5IHNjcmlwdCBmb3IgZWFzeSBnZW5lcmF0aW9uIG9mIHBsb3RzIHRvIHByZXNlbnQKK3RoZSBvdXRjb21lIG5pY2VseS4KKworCitjcHVmcmVxLWJlbmNoIENvbW1hbmQgVXNhZ2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorLWwsIC0tbG9hZD08bG9uZyBpbnQ+ICAgICAgICAgICBpbml0aWFsIGxvYWQgdGltZSBpbiB1cworLXMsIC0tc2xlZXA9PGxvbmcgaW50PiAgICAgICAgICBpbml0aWFsIHNsZWVwIHRpbWUgaW4gdXMKKy14LCAtLWxvYWQtc3RlcD08bG9uZyBpbnQ+ICAgICAgdGltZSB0byBiZSBhZGRlZCB0byBsb2FkIHRpbWUsIGluIHVzCisteSwgLS1zbGVlcC1zdGVwPTxsb25nIGludD4gICAgIHRpbWUgdG8gYmUgYWRkZWQgdG8gc2xlZXAgdGltZSwgaW4gdXMKKy1jLCAtLWNwdT08dW5zaWduZWQgaW50PiAgICAgICAgQ1BVIE51bWJlciB0byB1c2UsIHN0YXJ0aW5nIGF0IDAKKy1wLCAtLXByaW89PHByaW9yaXR5PiAgICAgICAgICAgc2NoZWR1bGVyIHByaW9yaXR5LCBISUdILCBMT1cgb3IgREVGQVVMVAorLWcsIC0tZ292ZXJub3I9PGdvdmVybm9yPiAgICAgICBjcHVmcmVxIGdvdmVybm9yIHRvIHRlc3QKKy1uLCAtLWN5Y2xlcz08aW50PiAgICAgICAgICAgICAgbG9hZC9zbGVlcCBjeWNsZXMgdG8gZ2V0IGFuIGF2YXJhZ2UgdmFsdWUgdG8gY29tcGFyZQorLXIsIC0tcm91bmRzPGludD4gICAgICAgICAgICAgICBsb2FkL3NsZWVwIHJvdW5kcworLWYsIC0tZmlsZT08Y29uZmlnZmlsZT4gICAgICAgICBjb25maWcgZmlsZSB0byB1c2UKKy1vLCAtLW91dHB1dD08ZGlyPiAgICAgICAgICAgICAgb3V0cHV0IGRpciwgbXVzdCBleGlzdAorLXYsIC0tdmVyYm9zZSAgICAgICAgICAgICAgICAgICB2ZXJib3NlIG91dHB1dCBvbi9vZmYKKworRHVlIHRvIHRoZSBoaWdoIHByaW9yaXR5LCB0aGUgYXBwbGljYXRpb24gbWF5IG5vdCBiZSByZXNwb25zaWJsZSBmb3Igc29tZSB0aW1lLgorQWZ0ZXIgdGhlIGJlbmNobWFyaywgdGhlIGxvZ2ZpbGUgaXMgc2F2ZWQgaW4gT1VUUFVURElSL2JlbmNobWFya19USU1FU1RBTVAubG9nCisKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2JlbmNobWFyay5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvYmVuY2htYXJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiMWM0OAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2JlbmNobWFyay5jCkBAIC0wLDAgKzEsMTk0IEBACisvKiAgY3B1ZnJlcS1iZW5jaCBDUFVGcmVxIG1pY3JvYmVuY2htYXJrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gS29ybmFja2VyIDxja29ybmFja2VyQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPG1hdGguaD4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInN5c3RlbS5oIgorI2luY2x1ZGUgImJlbmNobWFyay5oIgorCisvKiBQcmludCBvdXQgcHJvZ3Jlc3MgaWYgd2UgbG9nIGludG8gYSBmaWxlICovCisjZGVmaW5lIHNob3dfcHJvZ3Jlc3ModG90YWxfdGltZSwgcHJvZ3Jlc3NfdGltZSkJXAoraWYgKGNvbmZpZy0+b3V0cHV0ICE9IHN0ZG91dCkgewkJCQlcCisJZnByaW50ZihzdGRvdXQsICJQcm9ncmVzczogJTAybHUgJSVcciIsCQlcCisJCShwcm9ncmVzc190aW1lICogMTAwKSAvIHRvdGFsX3RpbWUpOwlcCisJZmZsdXNoKHN0ZG91dCk7CQkJCQlcCit9CisKKy8qKgorICogY29tcHV0ZSBob3cgbWFueSByb3VuZHMgb2YgY2FsY3VsYXRpb24gd2Ugc2hvdWxkIGRvCisgKiB0byBnZXQgdGhlIGdpdmVuIGxvYWQgdGltZQorICoKKyAqIEBwYXJhbSBsb2FkIGFpbWVkIGxvYWQgdGltZSBpbiDCtXMKKyAqCisgKiBAcmV0dmFsIHJvdW5kcyBvZiBjYWxjdWxhdGlvbgorICoqLworCit1bnNpZ25lZCBpbnQgY2FsY3VsYXRlX3RpbWVzcGFjZShsb25nIGxvYWQsIHN0cnVjdCBjb25maWcgKmNvbmZpZykKK3sKKwlpbnQgaTsKKwlsb25nIGxvbmcgbm93LCB0aGVuOworCXVuc2lnbmVkIGludCBlc3RpbWF0ZWQgPSBHQVVHRUNPVU5UOworCXVuc2lnbmVkIGludCByb3VuZHMgPSAwOworCXVuc2lnbmVkIGludCB0aW1lZCA9IDA7CisKKwlpZiAoY29uZmlnLT52ZXJib3NlKQorCQlwcmludGYoImNhbGlicmF0aW5nIGxvYWQgb2YgJWxpdXMsIHBsZWFzZSB3YWl0Li4uXG4iLCBsb2FkKTsKKworCS8qIGdldCB0aGUgaW5pdGlhbCBjYWxjdWxhdGlvbiB0aW1lIGZvciBhIHNwZWNpZmljIG51bWJlciBvZiByb3VuZHMgKi8KKwlub3cgPSBnZXRfdGltZSgpOworCVJPVU5EUyhlc3RpbWF0ZWQpOworCXRoZW4gPSBnZXRfdGltZSgpOworCisJdGltZWQgPSAodW5zaWduZWQgaW50KSh0aGVuIC0gbm93KTsKKworCS8qIGFwcHJveGltYXRpb24gb2YgdGhlIHdhbnRlZCBsb2FkIHRpbWUgYnkgY29tcGFyaW5nIHdpdGggdGhlCisJICogaW5pdGlhbCBjYWxjdWxhdGlvbiB0aW1lICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlyb3VuZHMgPSAodW5zaWduZWQgaW50KShsb2FkICogZXN0aW1hdGVkIC8gdGltZWQpOworCQlkcHJpbnRmKCJjYWxpYnJhdGluZyB3aXRoICV1IHJvdW5kc1xuIiwgcm91bmRzKTsKKwkJbm93ID0gZ2V0X3RpbWUoKTsKKwkJUk9VTkRTKHJvdW5kcyk7CisJCXRoZW4gPSBnZXRfdGltZSgpOworCisJCXRpbWVkID0gKHVuc2lnbmVkIGludCkodGhlbiAtIG5vdyk7CisJCWVzdGltYXRlZCA9IHJvdW5kczsKKwl9CisJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJcHJpbnRmKCJjYWxpYnJhdGlvbiBkb25lXG4iKTsKKworCXJldHVybiBlc3RpbWF0ZWQ7Cit9CisKKy8qKgorICogYmVuY2htYXJrCisgKiBnZW5lcmF0ZXMgYSBzcGVjaWZpYyBzbGVlcCBhbiBsb2FkIHRpbWUgd2l0aCB0aGUgcGVyZm9ybWFuY2UKKyAqIGdvdmVybm9yIGFuZCBjb21wYXJlcyB0aGUgdXNlZCB0aW1lIGZvciBzYW1lIGNhbGN1bGF0aW9ucyBkb25lCisgKiB3aXRoIHRoZSBjb25maWd1cmVkIHBvd2Vyc2F2ZSBnb3Zlcm5vcgorICoKKyAqIEBwYXJhbSBjb25maWcgY29uZmlnIHZhbHVlcyBmb3IgdGhlIGJlbmNobWFyaworICoKKyAqKi8KKwordm9pZCBzdGFydF9iZW5jaG1hcmsoc3RydWN0IGNvbmZpZyAqY29uZmlnKQoreworCXVuc2lnbmVkIGludCBfcm91bmQsIGN5Y2xlOworCWxvbmcgbG9uZyBub3csIHRoZW47CisJbG9uZyBzbGVlcF90aW1lID0gMCwgbG9hZF90aW1lID0gMDsKKwlsb25nIHBlcmZvcm1hbmNlX3RpbWUgPSAwLCBwb3dlcnNhdmVfdGltZSA9IDA7CisJdW5zaWduZWQgaW50IGNhbGN1bGF0aW9uczsKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3RpbWUgPSAwLCBwcm9ncmVzc190aW1lID0gMDsKKworCXNsZWVwX3RpbWUgPSBjb25maWctPnNsZWVwOworCWxvYWRfdGltZSA9IGNvbmZpZy0+bG9hZDsKKworCS8qIEZvciB0aGUgcHJvZ3Jlc3MgYmFyICovCisJZm9yIChfcm91bmQgPSAxOyBfcm91bmQgPD0gY29uZmlnLT5yb3VuZHM7IF9yb3VuZCsrKQorCQl0b3RhbF90aW1lICs9IF9yb3VuZCAqIChjb25maWctPnNsZWVwICsgY29uZmlnLT5sb2FkKTsKKwl0b3RhbF90aW1lICo9IDI7IC8qIHBvd2Vyc2F2ZSBhbmQgcGVyZm9ybWFuY2UgY3ljbGVzICovCisKKwlmb3IgKF9yb3VuZCA9IDA7IF9yb3VuZCA8IGNvbmZpZy0+cm91bmRzOyBfcm91bmQrKykgeworCQlwZXJmb3JtYW5jZV90aW1lID0gMExMOworCQlwb3dlcnNhdmVfdGltZSA9IDBMTDsKKworCQlzaG93X3Byb2dyZXNzKHRvdGFsX3RpbWUsIHByb2dyZXNzX3RpbWUpOworCisJCS8qIHNldCB0aGUgY3B1ZnJlcSBnb3Zlcm5vciB0byAicGVyZm9ybWFuY2UiIHdoaWNoIGRpc2FibGVzCisJCSAqIFAtU3RhdGUgc3dpdGNoaW5nLiAqLworCQlpZiAoc2V0X2NwdWZyZXFfZ292ZXJub3IoInBlcmZvcm1hbmNlIiwgY29uZmlnLT5jcHUpICE9IDApCisJCQlyZXR1cm47CisKKwkJLyogY2FsaWJyYXRlIHRoZSBjYWxjdWxhdGlvbiB0aW1lLiB0aGUgcmVzdWx0aW5nIGNhbGN1bGF0aW9uCisJCSAqIF9yb3VuZHMgc2hvdWxkIHByb2R1Y2UgYSBsb2FkIHdoaWNoIG1hdGNoZXMgdGhlIGNvbmZpZ3VyZWQKKwkJICogbG9hZCB0aW1lICovCisJCWNhbGN1bGF0aW9ucyA9IGNhbGN1bGF0ZV90aW1lc3BhY2UobG9hZF90aW1lLCBjb25maWcpOworCisJCWlmIChjb25maWctPnZlcmJvc2UpCisJCQlwcmludGYoIl9yb3VuZCAlaTogZG9pbmcgJXUgY3ljbGVzIHdpdGggJXUgY2FsY3VsYXRpb25zIgorCQkJICAgICAgICIgZm9yICVsaXVzXG4iLCBfcm91bmQgKyAxLCBjb25maWctPmN5Y2xlcywKKwkJCSAgICAgICBjYWxjdWxhdGlvbnMsIGxvYWRfdGltZSk7CisKKwkJZnByaW50Zihjb25maWctPm91dHB1dCwgIiV1ICVsaSAlbGkgIiwKKwkJCV9yb3VuZCwgbG9hZF90aW1lLCBzbGVlcF90aW1lKTsKKworCQlpZiAoY29uZmlnLT52ZXJib3NlKQorCQkJcHJpbnRmKCJhdmFyYWdlOiAlbGl1cywgcnBzOiVsaVxuIiwKKwkJCQlsb2FkX3RpbWUgLyBjYWxjdWxhdGlvbnMsCisJCQkJMTAwMDAwMCAqIGNhbGN1bGF0aW9ucyAvIGxvYWRfdGltZSk7CisKKwkJLyogZG8gc29tZSBzbGVlcC9sb2FkIGN5Y2xlcyB3aXRoIHRoZSBwZXJmb3JtYW5jZSBnb3Zlcm5vciAqLworCQlmb3IgKGN5Y2xlID0gMDsgY3ljbGUgPCBjb25maWctPmN5Y2xlczsgY3ljbGUrKykgeworCQkJbm93ID0gZ2V0X3RpbWUoKTsKKwkJCXVzbGVlcChzbGVlcF90aW1lKTsKKwkJCVJPVU5EUyhjYWxjdWxhdGlvbnMpOworCQkJdGhlbiA9IGdldF90aW1lKCk7CisJCQlwZXJmb3JtYW5jZV90aW1lICs9IHRoZW4gLSBub3cgLSBzbGVlcF90aW1lOworCQkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCQlwcmludGYoInBlcmZvcm1hbmNlIGN5Y2xlIHRvb2sgJWxpdXMsICIKKwkJCQkJInNsZWVwOiAlbGl1cywgIgorCQkJCQkibG9hZDogJWxpdXMsIHJvdW5kczogJXVcbiIsCisJCQkJCShsb25nKSh0aGVuIC0gbm93KSwgc2xlZXBfdGltZSwKKwkJCQkJbG9hZF90aW1lLCBjYWxjdWxhdGlvbnMpOworCQl9CisJCWZwcmludGYoY29uZmlnLT5vdXRwdXQsICIlbGkgIiwKKwkJCXBlcmZvcm1hbmNlX3RpbWUgLyBjb25maWctPmN5Y2xlcyk7CisKKwkJcHJvZ3Jlc3NfdGltZSArPSBzbGVlcF90aW1lICsgbG9hZF90aW1lOworCQlzaG93X3Byb2dyZXNzKHRvdGFsX3RpbWUsIHByb2dyZXNzX3RpbWUpOworCisJCS8qIHNldCB0aGUgcG93ZXJzYXZlIGdvdmVybm9yIHdoaWNoIGFjdGl2YXRlcyBQLVN0YXRlIHN3aXRjaGluZworCQkgKiBhZ2FpbiAqLworCQlpZiAoc2V0X2NwdWZyZXFfZ292ZXJub3IoY29uZmlnLT5nb3Zlcm5vciwgY29uZmlnLT5jcHUpICE9IDApCisJCQlyZXR1cm47CisKKwkJLyogYWdhaW4sIGRvIHNvbWUgc2xlZXAvbG9hZCBjeWNsZXMgd2l0aCB0aGUKKwkJICogcG93ZXJzYXZlIGdvdmVybm9yICovCisJCWZvciAoY3ljbGUgPSAwOyBjeWNsZSA8IGNvbmZpZy0+Y3ljbGVzOyBjeWNsZSsrKSB7CisJCQlub3cgPSBnZXRfdGltZSgpOworCQkJdXNsZWVwKHNsZWVwX3RpbWUpOworCQkJUk9VTkRTKGNhbGN1bGF0aW9ucyk7CisJCQl0aGVuID0gZ2V0X3RpbWUoKTsKKwkJCXBvd2Vyc2F2ZV90aW1lICs9IHRoZW4gLSBub3cgLSBzbGVlcF90aW1lOworCQkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCQlwcmludGYoInBvd2Vyc2F2ZSBjeWNsZSB0b29rICVsaXVzLCAiCisJCQkJCSJzbGVlcDogJWxpdXMsICIKKwkJCQkJImxvYWQ6ICVsaXVzLCByb3VuZHM6ICV1XG4iLAorCQkJCQkobG9uZykodGhlbiAtIG5vdyksIHNsZWVwX3RpbWUsCisJCQkJCWxvYWRfdGltZSwgY2FsY3VsYXRpb25zKTsKKwkJfQorCisJCXByb2dyZXNzX3RpbWUgKz0gc2xlZXBfdGltZSArIGxvYWRfdGltZTsKKworCQkvKiBjb21wYXJlIHRoZSBhdmFyYWdlIHNsZWVwL2xvYWQgY3ljbGVzICAqLworCQlmcHJpbnRmKGNvbmZpZy0+b3V0cHV0LCAiJWxpICIsCisJCQlwb3dlcnNhdmVfdGltZSAvIGNvbmZpZy0+Y3ljbGVzKTsKKwkJZnByaW50Zihjb25maWctPm91dHB1dCwgIiUuM2ZcbiIsCisJCQlwZXJmb3JtYW5jZV90aW1lICogMTAwLjAgLyBwb3dlcnNhdmVfdGltZSk7CisJCWZmbHVzaChjb25maWctPm91dHB1dCk7CisKKwkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCXByaW50ZigicGVyZm9ybWFuY2UgaXMgYXQgJS4yZiUlXG4iLAorCQkJCXBlcmZvcm1hbmNlX3RpbWUgKiAxMDAuMCAvIHBvd2Vyc2F2ZV90aW1lKTsKKworCQlzbGVlcF90aW1lICs9IGNvbmZpZy0+c2xlZXBfc3RlcDsKKwkJbG9hZF90aW1lICs9IGNvbmZpZy0+bG9hZF9zdGVwOworCX0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2JlbmNobWFyay5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvYmVuY2htYXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFkN2Y1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2JlbmNobWFyay5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogbG9hZCBsb29wLCB0aGlzIHNjaG91bGQgdGFrZSBhYm91dCAxIHRvIDJtcyB0byBjb21wbGV0ZSAqLworI2RlZmluZSBST1VORFMoeCkge3Vuc2lnbmVkIGludCByY250OwkJCSAgICAgICBcCisJCWZvciAocmNudCA9IDA7IHJjbnQgPCB4KjEwMDA7IHJjbnQrKykgeyBcCisJCQkodm9pZCkoKChpbnQpKHBvdyhyY250LCByY250KSAqIFwKKwkJCQkgICAgICBzcXJ0KHJjbnQqNzIzMDk3MCkpIF4gNzIzMDcxNikgXiBcCisJCQkJICAgICAgKGludClhdGFuMihyY250LCByY250KSk7CSAgICAgICBcCisJCX0gfQkJCQkJCQlcCisKKwordm9pZCBzdGFydF9iZW5jaG1hcmsoc3RydWN0IGNvbmZpZyAqY29uZmlnKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NvbmZpZy5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU2ZjI1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NvbmZpZy5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogaW5pdGlhbCBsb29wIGNvdW50IGZvciB0aGUgbG9hZCBjYWxpYnJhdGlvbiAqLworI2RlZmluZSBHQVVHRUNPVU5UCTE1MDAKKworLyogZGVmYXVsdCBzY2hlZHVsaW5nIHBvbGljeSBTQ0hFRF9PVEhFUiAqLworI2RlZmluZSBTQ0hFRFVMRVIJU0NIRURfT1RIRVIKKworI2RlZmluZSBQUklPUklUWV9ERUZBVUxUIDAKKyNkZWZpbmUgUFJJT1JJVFlfSElHSAkgc2NoZWRfZ2V0X3ByaW9yaXR5X21heChTQ0hFRFVMRVIpCisjZGVmaW5lIFBSSU9SSVRZX0xPVwkgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihTQ0hFRFVMRVIpCisKKy8qIGVuYWJsZSBmdXJ0aGVyIGRlYnVnIG1lc3NhZ2VzICovCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgZHByaW50ZiBwcmludGYKKyNlbHNlCisjZGVmaW5lIGRwcmludGYoLi4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvY3B1ZnJlcS1iZW5jaF9wbG90LnNoIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvY3B1ZnJlcS1iZW5jaF9wbG90LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMDAyMWEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9jcHVmcmVxLWJlbmNoX3Bsb3Quc2gKQEAgLTAsMCArMSwxMDQgQEAKKyMhL2Jpbi9iYXNoCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorCisjIEF1dGhvci9Db3B5cmlnaHQoYyk6IDIwMDksIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorCisjIEhlbHBlciBzY3JpcHQgdG8gZWFzaWx5IGNyZWF0ZSBuaWNlIHBsb3RzIG9mIHlvdXIgY3B1ZnJlcS1iZW5jaCByZXN1bHRzCisKK2Rpcj1gbWt0ZW1wIC1kYAorb3V0cHV0X2ZpbGU9ImNwdWZyZXEtYmVuY2gucG5nIgorZ2xvYmFsX3RpdGxlPSJjcHVmcmVxLWJlbmNoIHBsb3QiCitwaWN0dXJlX3R5cGU9ImpwZWciCitmaWxlWzBdPSIiCisKK2Z1bmN0aW9uIHVzYWdlKCkKK3sKKyAgICBlY2hvICJjcHVmcmVxLWJlbmNoX3Bsb3Quc2ggW09QVElPTlNdIGxvZ2ZpbGUgW21lYXN1cmVfdGl0bGVdIFtsb2dmaWxlIFttZWFzdXJlX3RpdGxlXV0gLi4uXSIKKyAgICBlY2hvCisgICAgZWNobyAiT3B0aW9ucyIKKyAgICBlY2hvICIgICAtbyBvdXRwdXRfZmlsZSIKKyAgICBlY2hvICIgICAtdCBnbG9iYWxfdGl0bGUiCisgICAgZWNobyAiICAgLXAgcGljdHVyZV90eXBlIFtqcGVnfGdpZnxwbmd8cG9zdHNjcmlwdHwuLi5dIgorICAgIGV4aXQgMQorfQorCitpZiBbICQjIC1lcSAwIF07dGhlbgorCWVjaG8gIk5vIGJlbmNobWFyayByZXN1bHRzIGZpbGUgcHJvdmlkZWQiCisJZWNobworCXVzYWdlCitmaQorCit3aGlsZSBnZXRvcHRzIG86dDpwOiBuYW1lIDsgZG8KKyAgICBjYXNlICRuYW1lIGluCisJbykKKwkgICAgb3V0cHV0X2ZpbGU9IiRPUFRBUkciLiRwaWN0dXJlX3R5cGUKKwkgICAgOzsKKwl0KQorCSAgICBnbG9iYWxfdGl0bGU9IiRPUFRBUkciCisJICAgIDs7CisJcCkKKwkgICAgcGljdHVyZV90eXBlPSIkT1BUQVJHIgorCSAgICA7OworICAgICAgICA/KQorCSAgICB1c2FnZQorCSAgICA7OworICAgIGVzYWMKK2RvbmUKK3NoaWZ0ICQoKCRPUFRJTkQgLTEpKQorCitwbG90cz0wCit3aGlsZSBbICIkMSIgXTtkbworICAgIGlmIFsgISAtZiAiJDEiIF07dGhlbgorCWVjaG8gIkZpbGUgJDEgZG9lcyBub3QgZXhpc3QiCisJdXNhZ2UKKyAgICBmaQorICAgIGZpbGVbJHBsb3RzXT0iJDEiCisgICAgdGl0bGVbJHBsb3RzXT0iJDIiCisgICAgIyBlY2hvICJGaWxlOiAke2ZpbGVbJHBsb3RzXX0gLSAke3RpdGxlW3Bsb3RzXX0iCisgICAgc2hpZnQ7c2hpZnQKKyAgICBwbG90cz0kKChwbG90cyArIDEpKQorZG9uZQorCitlY2hvICJzZXQgdGVybWluYWwgJHBpY3R1cmVfdHlwZSIJPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKK2VjaG8gInNldCBvdXRwdXQgXCIkb3V0cHV0X2ZpbGVcIiIJPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKK2VjaG8gInNldCB0aXRsZSBcIiRnbG9iYWxfdGl0bGVcIiIJPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKK2VjaG8gInNldCB4bGFiZWwgXCJzbGVlcC9sb2FkIHRpbWVcIiIJPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKK2VjaG8gInNldCB5bGFiZWwgXCJQZXJmb3JtYW5jZSAoJSlcIiIJPj4gJGRpci9wbG90X3NjcmlwdC5ncGwKKworZm9yKChwbG90PTA7cGxvdDwkcGxvdHM7cGxvdCsrKSk7ZG8KKworICAgICMgU2FuaXR5IGNoZWNrCisgICAgIyMjIyMjIEkgYW0gdG8gZHVtcCB0byBnZXQgdGhpcyByZWRpcmVjdGVkIHRvIHN0ZGVyci9zdGRvdXQgaW4gb25lIGF3ayBjYWxsLi4uICMjIyMjCisgICAgY2F0ICR7ZmlsZVskcGxvdF19IHxncmVwIC12ICJeIyIgfGF3ayAne2lmICgkMiAhPSAkMykgcHJpbnRmKCJFcnJvciBpbiBtZWFzdXJlICVkOkxvYWQgdGltZSAlcyBkb2VzIG5vdCBlcXVhbCBzbGVlcCB0aW1lICVzLCBwbG90IHdpbGwgbm90IGJlIGNvcnJlY3RcbiIsICQxLCAkMiwgJDMpOyBFUlI9MX0nCisgICAgIyMjIyMjIEkgYW0gdG8gZHVtcCB0byBnZXQgdGhpcyByZWRpcmVjdGVkIGluIG9uZSBhd2sgY2FsbC4uLiAjIyMjIworCisgICAgIyBQYXJzZSBvdXQgbG9hZCB0aW1lICh3aGljaCBtdXN0IGJlIGVxdWFsIHRvIHNsZWVwIHRpbWUgZm9yIGEgcGxvdCksIGRpdmlkZSBpdCBieSAxMDAwCisgICAgIyB0byBnZXQgbXMgYW5kIHBhcnNlIG91dCB0aGUgcGVyZm9ybWFuY2UgaW4gcGVyY2VudGFnZSBhbmQgd3JpdGUgaXQgdG8gYSB0ZW1wIGZpbGUgZm9yIHBsb3R0aW5nCisgICAgY2F0ICR7ZmlsZVskcGxvdF19IHxncmVwIC12ICJeIyIgfGF3ayAne3ByaW50ZiAiJWx1ICUuMWZcbiIsJDIvMTAwMCwgJDZ9JyA+JGRpci9kYXRhXyRwbG90CisKKyAgICBpZiBbICRwbG90IC1lcSAwIF07dGhlbgorCWVjaG8gLW4gInBsb3QgIiA+PiAkZGlyL3Bsb3Rfc2NyaXB0LmdwbAorICAgIGZpCisgICAgZWNobyAtbiAiXCIkZGlyL2RhdGFfJHBsb3RcIiB0aXRsZSBcIiR7dGl0bGVbJHBsb3RdfVwiIHdpdGggbGluZXMiID4+ICRkaXIvcGxvdF9zY3JpcHQuZ3BsCisgICAgaWYgWyAkKCgkcGxvdCArIDEpKSAtbmUgJHBsb3RzIF07dGhlbgorCWVjaG8gLW4gIiwgIiA+PiAkZGlyL3Bsb3Rfc2NyaXB0LmdwbAorICAgIGZpCitkb25lCitlY2hvID4+ICRkaXIvcGxvdF9zY3JpcHQuZ3BsCisKK2dudXBsb3QgJGRpci9wbG90X3NjcmlwdC5ncGwKK3JtIC1yICRkaXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9jcHVmcmVxLWJlbmNoX3NjcmlwdC5zaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2NwdWZyZXEtYmVuY2hfc2NyaXB0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMjBkMmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9jcHVmcmVxLWJlbmNoX3NjcmlwdC5zaApAQCAtMCwwICsxLDEwMSBAQAorIyEvYmluL2Jhc2gKKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorIyAwMjExMC0xMzAxLCBVU0EuCisKKyMgQXV0aG9yL0NvcHlyaWdodChjKTogMjAwOSwgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisKKyMgT25kZW1hbmQgdXBfdGhyZXNob2xkIGFuZCBzYW1wbGluZyByYXRlIHRlc3Qgc2NyaXB0IGZvciBjcHVmcmVxLWJlbmNoCisjIG1pcmNvYmVuY2htYXJrLgorIyBNb2RpZnkgdGhlIGdlbmVyYWwgdmFyaWFibGVzIGF0IHRoZSB0b3Agb3IgZXh0ZW5kIG9yIGNvcHkgb3V0IHBhcnRzCisjIGlmIHlvdSB3YW50IHRvIHRlc3Qgb3RoZXIgdGhpbmdzCisjCisKKyMgRGVmYXVsdCB3aXRoIGxhdGVzdCBrZXJuZWxzIGlzIDk1LCBiZWZvcmUgbWljcm8gYWNjb3VudCBwYXRjaGVzCisjIGl0IHdhcyA4MCwgY21wLiB3aXRoIGdpdCBjb21taXQgODA4MDA5MTMxMDQ2YjYyYWM0MzRkYmM3OTYKK1VQX1RIUkVTSE9MRD0iNjAgODAgOTUiCisjIERlcGVuZGluZyBvbiB0aGUga2VybmVsIGFuZCB0aGUgSFcgc2FtcGxpbmcgcmF0ZSBjb3VsZCBiZSByZXN0cmljdGVkCisjIGFuZCBjYW5ub3QgYmUgc2V0IHRoYXQgbG93Li4uCisjIEUuZy4gYmVmb3JlIGdpdCBjb21taXQgY2VmOTYxNWE4NTNlYmM0OTcyMDg0Zjcgb25lIGNvdWxkIG9ubHkgc2V0CisjIG1pbiBzYW1wbGluZyByYXRlIG9mIDgwMDAwIGlmIENPTkZJR19IWj0yNTAKK1NBTVBMSU5HX1JBVEU9IjIwMDAwIDgwMDAwIgorCitmdW5jdGlvbiBtZWFzdXJlKCkKK3sKKyAgICBsb2NhbCAtaSB1cF90aHJlc2hvbGRfc2V0CisgICAgbG9jYWwgLWkgc2FtcGxpbmdfcmF0ZV9zZXQKKworICAgIGZvciB1cF90aHJlc2hvbGQgaW4gJFVQX1RIUkVTSE9MRDtkbworCWZvciBzYW1wbGluZ19yYXRlIGluICRTQU1QTElOR19SQVRFO2RvCisJICAgICMgU2V0IHZhbHVlcyBpbiBzeXNmcworCSAgICBlY2hvICR1cF90aHJlc2hvbGQgPi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcS9vbmRlbWFuZC91cF90aHJlc2hvbGQKKwkgICAgZWNobyAkc2FtcGxpbmdfcmF0ZSA+L3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxL29uZGVtYW5kL3NhbXBsaW5nX3JhdGUKKwkgICAgdXBfdGhyZXNob2xkX3NldD0kKGNhdCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvb25kZW1hbmQvdXBfdGhyZXNob2xkKQorCSAgICBzYW1wbGluZ19yYXRlX3NldD0kKGNhdCAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvb25kZW1hbmQvc2FtcGxpbmdfcmF0ZSkKKworCSAgICAjIFZlcmlmeSBzZXQgdmFsdWVzIGluIHN5c2ZzCisJICAgIGlmIFsgJHt1cF90aHJlc2hvbGRfc2V0fSAtZXEgJHt1cF90aHJlc2hvbGR9IF07dGhlbgorCQllY2hvICJ1cF90aHJlc2hvbGQ6ICR1cF90aHJlc2hvbGQsIHNldCBpbiBzeXNmczogJHt1cF90aHJlc2hvbGRfc2V0fSIKKwkgICAgZWxzZQorCQllY2hvICJXQVJOSU5HOiBUcmllZCB0byBzZXQgdXBfdGhyZXNob2xkOiAkdXBfdGhyZXNob2xkLCBzZXQgaW4gc3lzZnM6ICR7dXBfdGhyZXNob2xkX3NldH0iCisJICAgIGZpCisJICAgIGlmIFsgJHtzYW1wbGluZ19yYXRlX3NldH0gLWVxICR7c2FtcGxpbmdfcmF0ZX0gXTt0aGVuCisJCWVjaG8gInNhbXBsaW5nX3JhdGU6ICRzYW1wbGluZ19yYXRlLCBzZXQgaW4gc3lzZnM6ICR7c2FtcGxpbmdfcmF0ZV9zZXR9IgorCSAgICBlbHNlCisJCWVjaG8gIldBUk5JTkc6IFRyaWVkIHRvIHNldCBzYW1wbGluZ19yYXRlOiAkc2FtcGxpbmdfcmF0ZSwgc2V0IGluIHN5c2ZzOiAke3NhbXBsaW5nX3JhdGVfc2V0fSIKKwkgICAgZmkKKworCSAgICAjIEJlbmNobWFyaworCSAgICBjcHVmcmVxLWJlbmNoIC1vIC92YXIvbG9nL2NwdWZyZXEtYmVuY2gvdXBfdGhyZXNob2xkXyR7dXBfdGhyZXNob2xkfV9zYW1wbGluZ19yYXRlXyR7c2FtcGxpbmdfcmF0ZX0KKwlkb25lCisgICAgZG9uZQorfQorCitmdW5jdGlvbiBjcmVhdGVfcGxvdHMoKQoreworICAgIGxvY2FsIGNvbW1hbmQKKworICAgIGZvciB1cF90aHJlc2hvbGQgaW4gJFVQX1RIUkVTSE9MRDtkbworCWNvbW1hbmQ9ImNwdWZyZXEtYmVuY2hfcGxvdC5zaCAtbyBcInNhbXBsaW5nX3JhdGVfJHtTQU1QTElOR19SQVRFfV91cF90aHJlc2hvbGRfJHt1cF90aHJlc2hvbGR9XCIgLXQgXCJPbmRlbWFuZCBzYW1wbGluZ19yYXRlOiAke1NBTVBMSU5HX1JBVEV9IGNvbXBhcmlzb24gLSBVcF90aHJlc2hvbGQ6ICR1cF90aHJlc2hvbGQgJVwiIgorCWZvciBzYW1wbGluZ19yYXRlIGluICRTQU1QTElOR19SQVRFO2RvCisJICAgIGNvbW1hbmQ9IiR7Y29tbWFuZH0gL3Zhci9sb2cvY3B1ZnJlcS1iZW5jaC91cF90aHJlc2hvbGRfJHt1cF90aHJlc2hvbGR9X3NhbXBsaW5nX3JhdGVfJHtzYW1wbGluZ19yYXRlfS8qIFwic2FtcGxpbmdfcmF0ZSA9ICRzYW1wbGluZ19yYXRlXCIiCisJZG9uZQorCWVjaG8gJGNvbW1hbmQKKwlldmFsICIkY29tbWFuZCIKKwllY2hvCisgICAgZG9uZQorCisgICAgZm9yIHNhbXBsaW5nX3JhdGUgaW4gJFNBTVBMSU5HX1JBVEU7ZG8KKwljb21tYW5kPSJjcHVmcmVxLWJlbmNoX3Bsb3Quc2ggLW8gXCJ1cF90aHJlc2hvbGRfJHtVUF9USFJFU0hPTER9X3NhbXBsaW5nX3JhdGVfJHtzYW1wbGluZ19yYXRlfVwiIC10IFwiT25kZW1hbmQgdXBfdGhyZXNob2xkOiAke1VQX1RIUkVTSE9MRH0gJSBjb21wYXJpc29uIC0gc2FtcGxpbmdfcmF0ZTogJHNhbXBsaW5nX3JhdGVcIiIKKwlmb3IgdXBfdGhyZXNob2xkIGluICRVUF9USFJFU0hPTEQ7ZG8KKwkgICAgY29tbWFuZD0iJHtjb21tYW5kfSAvdmFyL2xvZy9jcHVmcmVxLWJlbmNoL3VwX3RocmVzaG9sZF8ke3VwX3RocmVzaG9sZH1fc2FtcGxpbmdfcmF0ZV8ke3NhbXBsaW5nX3JhdGV9LyogXCJ1cF90aHJlc2hvbGQgPSAkdXBfdGhyZXNob2xkXCIiCisJZG9uZQorCWVjaG8gJGNvbW1hbmQKKwlldmFsICIkY29tbWFuZCIKKwllY2hvCisgICAgZG9uZQorCisgICAgY29tbWFuZD0iY3B1ZnJlcS1iZW5jaF9wbG90LnNoIC1vIFwidXBfdGhyZXNob2xkXyR7VVBfVEhSRVNIT0xEfV9zYW1wbGluZ19yYXRlXyR7U0FNUExJTkdfUkFURX1cIiAtdCBcIk9uZGVtYW5kIHVwX3RocmVzaG9sZDogJHtVUF9USFJFU0hPTER9IGFuZCBzYW1wbGluZ19yYXRlICR7U0FNUExJTkdfUkFURX0gY29tcGFyaXNvblwiIgorICAgIGZvciBzYW1wbGluZ19yYXRlIGluICRTQU1QTElOR19SQVRFO2RvCisJZm9yIHVwX3RocmVzaG9sZCBpbiAkVVBfVEhSRVNIT0xEO2RvCisJICAgIGNvbW1hbmQ9IiR7Y29tbWFuZH0gL3Zhci9sb2cvY3B1ZnJlcS1iZW5jaC91cF90aHJlc2hvbGRfJHt1cF90aHJlc2hvbGR9X3NhbXBsaW5nX3JhdGVfJHtzYW1wbGluZ19yYXRlfS8qIFwidXBfdGhyZXNob2xkID0gJHVwX3RocmVzaG9sZCAtIHNhbXBsaW5nX3JhdGUgPSAkc2FtcGxpbmdfcmF0ZVwiIgorCWRvbmUKKyAgICBkb25lCisgICAgZWNobyAiJGNvbW1hbmQiCisgICAgZXZhbCAiJGNvbW1hbmQiCit9CisKK21lYXN1cmUKK2NyZWF0ZV9wbG90cwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2V4YW1wbGUuY2ZnIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvZXhhbXBsZS5jZmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxZjY0MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL2V4YW1wbGUuY2ZnCkBAIC0wLDAgKzEsMTEgQEAKK3NsZWVwID0gNTAwMDAKK2xvYWQgPSA1MDAwMAorY3B1ID0gMAorcHJpb3JpdHkgPSBMT1cKK291dHB1dCA9IC92YXIvbG9nL2NwdWZyZXEtYmVuY2gKK3NsZWVwX3N0ZXAgPSA1MDAwMAorbG9hZF9zdGVwID0gNTAwMDAKK2N5Y2xlcyA9IDIwCityb3VuZHMgPSA0MAordmVyYm9zZSA9IDAKK2dvdmVybm9yID0gb25kZW1hbmQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL21haW4uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDkxMDMxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvbWFpbi5jCkBAIC0wLDAgKzEsMjAyIEBACisvKiAgY3B1ZnJlcS1iZW5jaCBDUFVGcmVxIG1pY3JvYmVuY2htYXJrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gS29ybmFja2VyIDxja29ybmFja2VyQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyNpbmNsdWRlICJiZW5jaG1hcmsuaCIKKworc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRpb25zW10gPSB7CisJeyJvdXRwdXQiLAkxLAkwLAknbyd9LAorCXsic2xlZXAiLAkxLAkwLAkncyd9LAorCXsibG9hZCIsCTEsCTAsCSdsJ30sCisJeyJ2ZXJib3NlIiwJMCwJMCwJJ3YnfSwKKwl7ImNwdSIsCQkxLAkwLAknYyd9LAorCXsiZ292ZXJub3IiLAkxLAkwLAknZyd9LAorCXsicHJpbyIsCTEsCTAsCSdwJ30sCisJeyJmaWxlIiwJMSwJMCwJJ2YnfSwKKwl7ImN5Y2xlcyIsCTEsCTAsCSduJ30sCisJeyJyb3VuZHMiLAkxLAkwLAkncid9LAorCXsibG9hZC1zdGVwIiwJMSwJMCwJJ3gnfSwKKwl7InNsZWVwLXN0ZXAiLAkxLAkwLAkneSd9LAorCXsiaGVscCIsCTAsCTAsCSdoJ30sCisJezAsIDAsIDAsIDB9Cit9OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIHVzYWdlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIHVzYWdlKCkKK3sKKwlwcmludGYoInVzYWdlOiAuL2JlbmNoXG4iKTsKKwlwcmludGYoIk9wdGlvbnM6XG4iKTsKKwlwcmludGYoIiAtbCwgLS1sb2FkPTxsb25nIGludD5cdFx0aW5pdGlhbCBsb2FkIHRpbWUgaW4gdXNcbiIpOworCXByaW50ZigiIC1zLCAtLXNsZWVwPTxsb25nIGludD5cdFx0aW5pdGlhbCBzbGVlcCB0aW1lIGluIHVzXG4iKTsKKwlwcmludGYoIiAteCwgLS1sb2FkLXN0ZXA9PGxvbmcgaW50Plx0dGltZSB0byBiZSBhZGRlZCB0byBsb2FkIHRpbWUsIGluIHVzXG4iKTsKKwlwcmludGYoIiAteSwgLS1zbGVlcC1zdGVwPTxsb25nIGludD5cdHRpbWUgdG8gYmUgYWRkZWQgdG8gc2xlZXAgdGltZSwgaW4gdXNcbiIpOworCXByaW50ZigiIC1jLCAtLWNwdT08Y3B1ICM+XHRcdFx0Q1BVIE5yLiB0byB1c2UsIHN0YXJ0aW5nIGF0IDBcbiIpOworCXByaW50ZigiIC1wLCAtLXByaW89PHByaW9yaXR5Plx0XHRcdHNjaGVkdWxlciBwcmlvcml0eSwgSElHSCwgTE9XIG9yIERFRkFVTFRcbiIpOworCXByaW50ZigiIC1nLCAtLWdvdmVybm9yPTxnb3Zlcm5vcj5cdFx0Y3B1ZnJlcSBnb3Zlcm5vciB0byB0ZXN0XG4iKTsKKwlwcmludGYoIiAtbiwgLS1jeWNsZXM9PGludD5cdFx0XHRsb2FkL3NsZWVwIGN5Y2xlc1xuIik7CisJcHJpbnRmKCIgLXIsIC0tcm91bmRzPGludD5cdFx0XHRsb2FkL3NsZWVwIHJvdW5kc1xuIik7CisJcHJpbnRmKCIgLWYsIC0tZmlsZT08Y29uZmlnZmlsZT5cdFx0Y29uZmlnIGZpbGUgdG8gdXNlXG4iKTsKKwlwcmludGYoIiAtbywgLS1vdXRwdXQ9PGRpcj5cdFx0XHRvdXRwdXQgcGF0aC4gRmlsZW5hbWUgd2lsbCBiZSBPVVRQVVRQQVRIL2JlbmNobWFya19USU1FU1RBTVAubG9nXG4iKTsKKwlwcmludGYoIiAtdiwgLS12ZXJib3NlXHRcdFx0XHR2ZXJib3NlIG91dHB1dCBvbi9vZmZcbiIpOworCXByaW50ZigiIC1oLCAtLWhlbHBcdFx0XHRcdFByaW50IHRoaXMgaGVscCBzY3JlZW5cbiIpOworCWV4aXQoMSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgbWFpbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBjOworCWludCBvcHRpb25faW5kZXggPSAwOworCXN0cnVjdCBjb25maWcgKmNvbmZpZyA9IE5VTEw7CisKKwljb25maWcgPSBwcmVwYXJlX2RlZmF1bHRfY29uZmlnKCk7CisKKwlpZiAoY29uZmlnID09IE5VTEwpCisJCXJldHVybiBFWElUX0ZBSUxVUkU7CisKKwl3aGlsZSAoMSkgeworCQljID0gZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsICJoZzpvOnM6bDp2YzpwOmY6bjpyOng6eToiLAorCQkJCWxvbmdfb3B0aW9ucywgJm9wdGlvbl9pbmRleCk7CisJCWlmIChjID09IC0xKQorCQkJYnJlYWs7CisKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJ28nOgorCQkJaWYgKGNvbmZpZy0+b3V0cHV0ICE9IE5VTEwpCisJCQkJZmNsb3NlKGNvbmZpZy0+b3V0cHV0KTsKKworCQkJY29uZmlnLT5vdXRwdXQgPSBwcmVwYXJlX291dHB1dChvcHRhcmcpOworCisJCQlpZiAoY29uZmlnLT5vdXRwdXQgPT0gTlVMTCkKKwkJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCisJCQlkcHJpbnRmKCJ1c2VyIG91dHB1dCBwYXRoIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJc3NjYW5mKG9wdGFyZywgIiVsaSIsICZjb25maWctPnNsZWVwKTsKKwkJCWRwcmludGYoInVzZXIgc2xlZXAgdGltZSAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdsJzoKKwkJCXNzY2FuZihvcHRhcmcsICIlbGkiLCAmY29uZmlnLT5sb2FkKTsKKwkJCWRwcmludGYoInVzZXIgbG9hZCB0aW1lIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ2MnOgorCQkJc3NjYW5mKG9wdGFyZywgIiV1IiwgJmNvbmZpZy0+Y3B1KTsKKwkJCWRwcmludGYoInVzZXIgY3B1IC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ2cnOgorCQkJc3RybmNweShjb25maWctPmdvdmVybm9yLCBvcHRhcmcsIDE0KTsKKwkJCWRwcmludGYoInVzZXIgZ292ZXJub3IgLT4gJXNcbiIsIG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlpZiAoc3RyaW5nX3RvX3ByaW8ob3B0YXJnKSAhPSBTQ0hFRF9FUlIpIHsKKwkJCQljb25maWctPnByaW8gPSBzdHJpbmdfdG9fcHJpbyhvcHRhcmcpOworCQkJCWRwcmludGYoInVzZXIgcHJpbyAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNvbmZpZyAhPSBOVUxMKSB7CisJCQkJCWlmIChjb25maWctPm91dHB1dCAhPSBOVUxMKQorCQkJCQkJZmNsb3NlKGNvbmZpZy0+b3V0cHV0KTsKKwkJCQkJZnJlZShjb25maWcpOworCQkJCX0KKwkJCQl1c2FnZSgpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJc3NjYW5mKG9wdGFyZywgIiV1IiwgJmNvbmZpZy0+Y3ljbGVzKTsKKwkJCWRwcmludGYoInVzZXIgY3ljbGVzIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ3InOgorCQkJc3NjYW5mKG9wdGFyZywgIiV1IiwgJmNvbmZpZy0+cm91bmRzKTsKKwkJCWRwcmludGYoInVzZXIgcm91bmRzIC0+ICVzXG4iLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ3gnOgorCQkJc3NjYW5mKG9wdGFyZywgIiVsaSIsICZjb25maWctPmxvYWRfc3RlcCk7CisJCQlkcHJpbnRmKCJ1c2VyIGxvYWRfc3RlcCAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICd5JzoKKwkJCXNzY2FuZihvcHRhcmcsICIlbGkiLCAmY29uZmlnLT5zbGVlcF9zdGVwKTsKKwkJCWRwcmludGYoInVzZXIgc2xlZXBfc3RlcCAtPiAlc1xuIiwgb3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCWlmIChwcmVwYXJlX2NvbmZpZyhvcHRhcmcsIGNvbmZpZykpCisJCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJCWJyZWFrOworCQljYXNlICd2JzoKKwkJCWNvbmZpZy0+dmVyYm9zZSA9IDE7CisJCQlkcHJpbnRmKCJ2ZXJib3NlIG91dHB1dCBlbmFibGVkXG4iKTsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJY2FzZSAnPyc6CisJCWRlZmF1bHQ6CisJCQlpZiAoY29uZmlnICE9IE5VTEwpIHsKKwkJCQlpZiAoY29uZmlnLT5vdXRwdXQgIT0gTlVMTCkKKwkJCQkJZmNsb3NlKGNvbmZpZy0+b3V0cHV0KTsKKwkJCQlmcmVlKGNvbmZpZyk7CisJCQl9CisJCQl1c2FnZSgpOworCQl9CisJfQorCisJaWYgKGNvbmZpZy0+dmVyYm9zZSkgeworCQlwcmludGYoInN0YXJ0aW5nIGJlbmNobWFyayB3aXRoIHBhcmFtZXRlcnM6XG4iKTsKKwkJcHJpbnRmKCJjb25maWc6XG5cdCIKKwkJICAgICAgICJzbGVlcD0lbGlcblx0IgorCQkgICAgICAgImxvYWQ9JWxpXG5cdCIKKwkJICAgICAgICJzbGVlcF9zdGVwPSVsaVxuXHQiCisJCSAgICAgICAibG9hZF9zdGVwPSVsaVxuXHQiCisJCSAgICAgICAiY3B1PSV1XG5cdCIKKwkJICAgICAgICJjeWNsZXM9JXVcblx0IgorCQkgICAgICAgInJvdW5kcz0ldVxuXHQiCisJCSAgICAgICAiZ292ZXJub3I9JXNcblxuIiwKKwkJICAgICAgIGNvbmZpZy0+c2xlZXAsCisJCSAgICAgICBjb25maWctPmxvYWQsCisJCSAgICAgICBjb25maWctPnNsZWVwX3N0ZXAsCisJCSAgICAgICBjb25maWctPmxvYWRfc3RlcCwKKwkJICAgICAgIGNvbmZpZy0+Y3B1LAorCQkgICAgICAgY29uZmlnLT5jeWNsZXMsCisJCSAgICAgICBjb25maWctPnJvdW5kcywKKwkJICAgICAgIGNvbmZpZy0+Z292ZXJub3IpOworCX0KKworCXByZXBhcmVfdXNlcihjb25maWcpOworCXByZXBhcmVfc3lzdGVtKGNvbmZpZyk7CisJc3RhcnRfYmVuY2htYXJrKGNvbmZpZyk7CisKKwlpZiAoY29uZmlnLT5vdXRwdXQgIT0gc3Rkb3V0KQorCQlmY2xvc2UoY29uZmlnLT5vdXRwdXQpOworCisJZnJlZShjb25maWcpOworCisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvYmVuY2gvcGFyc2UuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3BhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQzYmJhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3BhcnNlLmMKQEAgLTAsMCArMSwyMjUgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSAicGFyc2UuaCIKKyNpbmNsdWRlICJjb25maWcuaCIKKworLyoqCisgKiBjb252ZXJ0cyBwcmlvcml0eSBzdHJpbmcgdG8gcHJpb3JpdHkKKyAqCisgKiBAcGFyYW0gc3RyIHN0cmluZyB0aGF0IHJlcHJlc2VudHMgYSBzY2hlZHVsZXIgcHJpb3JpdHkKKyAqCisgKiBAcmV0dmFsIHByaW9yaXR5CisgKiBAcmV0dmFsIFNDSEVEX0VSUiB3aGVuIHRoZSBwcmlvcml0eSBkb2Vzbid0IGV4aXQKKyAqKi8KKworZW51bSBzY2hlZF9wcmlvIHN0cmluZ190b19wcmlvKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpZiAoc3RybmNhc2VjbXAoImhpZ2giLCBzdHIsIHN0cmxlbihzdHIpKSA9PSAwKQorCQlyZXR1cm4gIFNDSEVEX0hJR0g7CisJZWxzZSBpZiAoc3RybmNhc2VjbXAoImRlZmF1bHQiLCBzdHIsIHN0cmxlbihzdHIpKSA9PSAwKQorCQlyZXR1cm4gU0NIRURfREVGQVVMVDsKKwllbHNlIGlmIChzdHJuY2FzZWNtcCgibG93Iiwgc3RyLCBzdHJsZW4oc3RyKSkgPT0gMCkKKwkJcmV0dXJuIFNDSEVEX0xPVzsKKwllbHNlCisJCXJldHVybiBTQ0hFRF9FUlI7Cit9CisKKy8qKgorICogY3JlYXRlIGFuZCBvcGVuIGxvZ2ZpbGUKKyAqCisgKiBAcGFyYW0gZGlyIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgbG9nZmlsZSBzaG91bGQgYmUgY3JlYXRlZAorICoKKyAqIEByZXR2YWwgbG9nZmlsZSBvbiBzdWNjZXNzCisgKiBAcmV0dmFsIE5VTEwgd2hlbiB0aGUgZmlsZSBjYW4ndCBiZSBjcmVhdGVkCisgKiovCisKK0ZJTEUgKnByZXBhcmVfb3V0cHV0KGNvbnN0IGNoYXIgKmRpcm5hbWUpCit7CisJRklMRSAqb3V0cHV0ID0gTlVMTDsKKwlpbnQgbGVuOworCWNoYXIgKmZpbGVuYW1lOworCXN0cnVjdCB1dHNuYW1lIHN5c2RhdGE7CisJRElSICpkaXI7CisKKwlkaXIgPSBvcGVuZGlyKGRpcm5hbWUpOworCWlmIChkaXIgPT0gTlVMTCkgeworCQlpZiAobWtkaXIoZGlybmFtZSwgMDc1NSkpIHsKKwkJCXBlcnJvcigibWtkaXIiKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IENhbm5vdCBjcmVhdGUgZGlyICVzXG4iLAorCQkJCWRpcm5hbWUpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisKKwlsZW4gPSBzdHJsZW4oZGlybmFtZSkgKyAzMDsKKwlmaWxlbmFtZSA9IG1hbGxvYyhzaXplb2YoY2hhcikgKiBsZW4pOworCisJaWYgKHVuYW1lKCZzeXNkYXRhKSA9PSAwKSB7CisJCWxlbiArPSBzdHJsZW4oc3lzZGF0YS5ub2RlbmFtZSkgKyBzdHJsZW4oc3lzZGF0YS5yZWxlYXNlKTsKKwkJZmlsZW5hbWUgPSByZWFsbG9jKGZpbGVuYW1lLCBzaXplb2YoY2hhcikgKiBsZW4pOworCisJCWlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisJCQlwZXJyb3IoInJlYWxsb2MiKTsKKwkJCXJldHVybiBOVUxMOworCQl9CisKKwkJc25wcmludGYoZmlsZW5hbWUsIGxlbiAtIDEsICIlcy9iZW5jaG1hcmtfJXNfJXNfJWxpLmxvZyIsCisJCQlkaXJuYW1lLCBzeXNkYXRhLm5vZGVuYW1lLCBzeXNkYXRhLnJlbGVhc2UsIHRpbWUoTlVMTCkpOworCX0gZWxzZSB7CisJCXNucHJpbnRmKGZpbGVuYW1lLCBsZW4gLSAxLCAiJXMvYmVuY2htYXJrXyVsaS5sb2ciLAorCQkJZGlybmFtZSwgdGltZShOVUxMKSk7CisJfQorCisJZHByaW50ZigibG9naWxlbmFtZTogJXNcbiIsIGZpbGVuYW1lKTsKKworCW91dHB1dCA9IGZvcGVuKGZpbGVuYW1lLCAidysiKTsKKwlpZiAob3V0cHV0ID09IE5VTEwpIHsKKwkJcGVycm9yKCJmb3BlbiIpOworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB1bmFibGUgdG8gb3BlbiBsb2dmaWxlXG4iKTsKKwl9CisKKwlmcHJpbnRmKHN0ZG91dCwgIkxvZ2ZpbGU6ICVzXG4iLCBmaWxlbmFtZSk7CisKKwlmcmVlKGZpbGVuYW1lKTsKKwlmcHJpbnRmKG91dHB1dCwgIiNyb3VuZCBsb2FkIHNsZWVwIHBlcmZvcm1hbmNlIHBvd2Vyc2F2ZSBwZXJjZW50YWdlXG4iKTsKKwlyZXR1cm4gb3V0cHV0OworfQorCisvKioKKyAqIHJldHVybnMgdGhlIGRlZmF1bHQgY29uZmlnCisgKgorICogQHJldHZhbCBkZWZhdWx0IGNvbmZpZyBvbiBzdWNjZXNzCisgKiBAcmV0dmFsIE5VTEwgd2hlbiB0aGUgb3V0cHV0IGZpbGUgY2FuJ3QgYmUgY3JlYXRlZAorICoqLworCitzdHJ1Y3QgY29uZmlnICpwcmVwYXJlX2RlZmF1bHRfY29uZmlnKCkKK3sKKwlzdHJ1Y3QgY29uZmlnICpjb25maWcgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25maWcpKTsKKworCWRwcmludGYoImxvYWRpbmcgZGVmYXVsdHNcbiIpOworCisJY29uZmlnLT5zbGVlcCA9IDUwMDAwMDsKKwljb25maWctPmxvYWQgPSA1MDAwMDA7CisJY29uZmlnLT5zbGVlcF9zdGVwID0gNTAwMDAwOworCWNvbmZpZy0+bG9hZF9zdGVwID0gNTAwMDAwOworCWNvbmZpZy0+Y3ljbGVzID0gNTsKKwljb25maWctPnJvdW5kcyA9IDUwOworCWNvbmZpZy0+Y3B1ID0gMDsKKwljb25maWctPnByaW8gPSBTQ0hFRF9ISUdIOworCWNvbmZpZy0+dmVyYm9zZSA9IDA7CisJc3RybmNweShjb25maWctPmdvdmVybm9yLCAib25kZW1hbmQiLCA4KTsKKworCWNvbmZpZy0+b3V0cHV0ID0gc3Rkb3V0OworCisjaWZkZWYgREVGQVVMVF9DT05GSUdfRklMRQorCWlmIChwcmVwYXJlX2NvbmZpZyhERUZBVUxUX0NPTkZJR19GSUxFLCBjb25maWcpKQorCQlyZXR1cm4gTlVMTDsKKyNlbmRpZgorCXJldHVybiBjb25maWc7Cit9CisKKy8qKgorICogcGFyc2VzIGNvbmZpZyBmaWxlIGFuZCByZXR1cm5zIHRoZSBjb25maWcgdG8gdGhlIGNhbGxlcgorICoKKyAqIEBwYXJhbSBwYXRoIGNvbmZpZyBmaWxlIG5hbWUKKyAqCisgKiBAcmV0dmFsIDEgb24gZXJyb3IKKyAqIEByZXR2YWwgMCBvbiBzdWNjZXNzCisgKiovCisKK2ludCBwcmVwYXJlX2NvbmZpZyhjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY29uZmlnICpjb25maWcpCit7CisJc2l6ZV90IGxlbiA9IDA7CisJY2hhciAqb3B0LCAqdmFsLCAqbGluZSA9IE5VTEw7CisJRklMRSAqY29uZmlnZmlsZSA9IGZvcGVuKHBhdGgsICJyIik7CisKKwlpZiAoY29uZmlnID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogY29uZmlnIGlzIE5VTExcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlpZiAoY29uZmlnZmlsZSA9PSBOVUxMKSB7CisJCXBlcnJvcigiZm9wZW4iKTsKKwkJZnByaW50ZihzdGRlcnIsICJlcnJvcjogdW5hYmxlIHRvIHJlYWQgY29uZmlnZmlsZVxuIik7CisJCWZyZWUoY29uZmlnKTsKKwkJcmV0dXJuIDE7CisJfQorCisJd2hpbGUgKGdldGxpbmUoJmxpbmUsICZsZW4sIGNvbmZpZ2ZpbGUpICE9IC0xKSB7CisJCWlmIChsaW5lWzBdID09ICcjJyB8fCBsaW5lWzBdID09ICcgJykKKwkJCWNvbnRpbnVlOworCisJCXNzY2FuZihsaW5lLCAiJWFzID0gJWFzIiwgJm9wdCwgJnZhbCk7CisKKwkJZHByaW50ZigicGFyc2luZzogJXMgLT4gJXNcbiIsIG9wdCwgdmFsKTsKKworCQlpZiAoc3RybmNtcCgic2xlZXAiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKQorCQkJc3NjYW5mKHZhbCwgIiVsaSIsICZjb25maWctPnNsZWVwKTsKKworCQllbHNlIGlmIChzdHJuY21wKCJsb2FkIiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkKKwkJCXNzY2FuZih2YWwsICIlbGkiLCAmY29uZmlnLT5sb2FkKTsKKworCQllbHNlIGlmIChzdHJuY21wKCJsb2FkX3N0ZXAiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKQorCQkJc3NjYW5mKHZhbCwgIiVsaSIsICZjb25maWctPmxvYWRfc3RlcCk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgic2xlZXBfc3RlcCIsIG9wdCwgc3RybGVuKG9wdCkpID09IDApCisJCQlzc2NhbmYodmFsLCAiJWxpIiwgJmNvbmZpZy0+c2xlZXBfc3RlcCk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgiY3ljbGVzIiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkKKwkJCXNzY2FuZih2YWwsICIldSIsICZjb25maWctPmN5Y2xlcyk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgicm91bmRzIiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkKKwkJCXNzY2FuZih2YWwsICIldSIsICZjb25maWctPnJvdW5kcyk7CisKKwkJZWxzZSBpZiAoc3RybmNtcCgidmVyYm9zZSIsIG9wdCwgc3RybGVuKG9wdCkpID09IDApCisJCQlzc2NhbmYodmFsLCAiJXUiLCAmY29uZmlnLT52ZXJib3NlKTsKKworCQllbHNlIGlmIChzdHJuY21wKCJvdXRwdXQiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKQorCQkJY29uZmlnLT5vdXRwdXQgPSBwcmVwYXJlX291dHB1dCh2YWwpOyAKKworCQllbHNlIGlmIChzdHJuY21wKCJjcHUiLCBvcHQsIHN0cmxlbihvcHQpKSA9PSAwKQorCQkJc3NjYW5mKHZhbCwgIiV1IiwgJmNvbmZpZy0+Y3B1KTsKKworCQllbHNlIGlmIChzdHJuY21wKCJnb3Zlcm5vciIsIG9wdCwgMTQpID09IDApCisJCQlzdHJuY3B5KGNvbmZpZy0+Z292ZXJub3IsIHZhbCwgMTQpOworCisJCWVsc2UgaWYgKHN0cm5jbXAoInByaW9yaXR5Iiwgb3B0LCBzdHJsZW4ob3B0KSkgPT0gMCkgeworCQkJaWYgKHN0cmluZ190b19wcmlvKHZhbCkgIT0gU0NIRURfRVJSKQorCQkJCWNvbmZpZy0+cHJpbyA9IHN0cmluZ190b19wcmlvKHZhbCk7CisJCX0KKwl9CisKKwlmcmVlKGxpbmUpOworCWZyZWUob3B0KTsKKwlmcmVlKHZhbCk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3BhcnNlLmggYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9wYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZGM2MzIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9wYXJzZS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qICBjcHVmcmVxLWJlbmNoIENQVUZyZXEgbWljcm9iZW5jaG1hcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBLb3JuYWNrZXIgPGNrb3JuYWNrZXJAc3VzZS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworLyogc3RydWN0IHRoYXQgaG9sZHMgdGhlIHJlcXVpcmVkIGNvbmZpZyBwYXJhbWV0ZXJzICovCitzdHJ1Y3QgY29uZmlnCit7CisJbG9uZyBzbGVlcDsJCS8qIHNsZWVwIHRpbWUgaW4gwrVzICovCisJbG9uZyBsb2FkOwkJLyogbG9hZCB0aW1lIGluIMK1cyAqLworCWxvbmcgc2xlZXBfc3RlcDsJLyogdGltZSB2YWx1ZSB3aGljaCBjaGFuZ2VzIHRoZQorCQkJCSAqIHNsZWVwIHRpbWUgYWZ0ZXIgZXZlcnkgcm91bmQgaW4gwrVzICovCisJbG9uZyBsb2FkX3N0ZXA7CQkvKiB0aW1lIHZhbHVlIHdoaWNoIGNoYW5nZXMgdGhlCisJCQkJICogbG9hZCB0aW1lIGFmdGVyIGV2ZXJ5IHJvdW5kIGluIMK1cyAqLworCXVuc2lnbmVkIGludCBjeWNsZXM7CS8qIGNhbGN1bGF0aW9uIGN5Y2xlcyB3aXRoIHRoZSBzYW1lIHNsZWVwL2xvYWQgdGltZSAqLworCXVuc2lnbmVkIGludCByb3VuZHM7CS8qIGNhbGN1bGF0aW9uIHJvdW5kcyB3aXRoIGl0ZXJhdGVkIHNsZWVwL2xvYWQgdGltZSAqLworCXVuc2lnbmVkIGludCBjcHU7CS8qIGNwdSBmb3Igd2hpY2ggdGhlIGFmZmluaXR5IGlzIHNldCAqLworCWNoYXIgZ292ZXJub3JbMTVdOwkvKiBjcHVmcmVxIGdvdmVybm9yICovCisJZW51bSBzY2hlZF9wcmlvCQkvKiBwb3NzaWJsZSBzY2hlZHVsZXIgcHJpb3JpdGllcyAqLworCXsKKwkJU0NIRURfRVJSID0gLTEsCisJCVNDSEVEX0hJR0gsCisJCVNDSEVEX0RFRkFVTFQsCisJCVNDSEVEX0xPVworCX0gcHJpbzsKKworCXVuc2lnbmVkIGludCB2ZXJib3NlOwkvKiB2ZXJib3NlIG91dHB1dCAqLworCUZJTEUgKm91dHB1dDsJCS8qIGxvZ2ZpbGUgKi8KKwljaGFyICpvdXRwdXRfZmlsZW5hbWU7CS8qIGxvZ2ZpbGUgbmFtZSwgbXVzdCBiZSBmcmVlZCBhdCB0aGUgZW5kCisJCQkJICAgaWYgb3V0cHV0ICE9IE5VTEwgYW5kIG91dHB1dCAhPSBzdGRvdXQqLworfTsKKworZW51bSBzY2hlZF9wcmlvIHN0cmluZ190b19wcmlvKGNvbnN0IGNoYXIgKnN0cik7CisKK0ZJTEUgKnByZXBhcmVfb3V0cHV0KGNvbnN0IGNoYXIgKmRpcik7CisKK2ludCBwcmVwYXJlX2NvbmZpZyhjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY29uZmlnICpjb25maWcpOworc3RydWN0IGNvbmZpZyAqcHJlcGFyZV9kZWZhdWx0X2NvbmZpZygpOworCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3N5c3RlbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMWUzZjQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uYwpAQCAtMCwwICsxLDE5MSBAQAorLyogIGNwdWZyZXEtYmVuY2ggQ1BVRnJlcSBtaWNyb2JlbmNobWFyaworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIEtvcm5hY2tlciA8Y2tvcm5hY2tlckBzdXNlLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPHNjaGVkLmg+CisKKyNpbmNsdWRlIDxjcHVmcmVxLmg+CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKworLyoqCisgKiByZXR1cm5zIHRpbWUgc2luY2UgZXBvY2ggaW4gwrVzCisgKgorICogQHJldHZhbCB0aW1lCisgKiovCisKK2xvbmcgbG9uZyBpbnQgZ2V0X3RpbWUoKQoreworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKworCWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKworCXJldHVybiAobG9uZyBsb25nIGludCkobm93LnR2X3NlYyAqIDEwMDAwMDBMTCArIG5vdy50dl91c2VjKTsKK30KKworLyoqCisgKiBzZXRzIHRoZSBjcHVmcmVxIGdvdmVybm9yCisgKgorICogQHBhcmFtIGdvdmVybm9yIGNwdWZyZXEgZ292ZXJub3IgbmFtZQorICogQHBhcmFtIGNwdSBjcHUgZm9yIHdoaWNoIHRoZSBnb3Zlcm5vciBzaG91bGQgYmUgc2V0CisgKgorICogQHJldHZhbCAwIG9uIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgd2hlbiBmYWlsZWQKKyAqKi8KKworaW50IHNldF9jcHVmcmVxX2dvdmVybm9yKGNoYXIgKmdvdmVybm9yLCB1bnNpZ25lZCBpbnQgY3B1KQoreworCisJZHByaW50Zigic2V0ICVzIGFzIGNwdWZyZXEgZ292ZXJub3JcbiIsIGdvdmVybm9yKTsKKworCWlmIChjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSAhPSAwKSB7CisJCXBlcnJvcigiY3B1ZnJlcV9jcHVfZXhpc3RzIik7CisJCWZwcmludGYoc3RkZXJyLCAiZXJyb3I6IGNwdSAldSBkb2VzIG5vdCBleGlzdFxuIiwgY3B1KTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IoY3B1LCBnb3Zlcm5vcikgIT0gMCkgeworCQlwZXJyb3IoImNwdWZyZXFfbW9kaWZ5X3BvbGljeV9nb3Zlcm5vciIpOworCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yOiB1bmFibGUgdG8gc2V0ICVzIGdvdmVybm9yXG4iLCBnb3Zlcm5vcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBzZXRzIGNwdSBhZmZpbml0eSBmb3IgdGhlIHByb2Nlc3MKKyAqCisgKiBAcGFyYW0gY3B1IGNwdSMgdG8gd2hpY2ggdGhlIGFmZmluaXR5IHNob3VsZCBiZSBzZXQKKyAqCisgKiBAcmV0dmFsIDAgb24gc3VjY2VzcworICogQHJldHZhbCAtMSB3aGVuIHNldHRpbmcgdGhlIGFmZmluaXR5IGZhaWxlZAorICoqLworCitpbnQgc2V0X2NwdV9hZmZpbml0eSh1bnNpZ25lZCBpbnQgY3B1KQoreworCWNwdV9zZXRfdCBjcHVzZXQ7CisKKwlDUFVfWkVSTygmY3B1c2V0KTsKKwlDUFVfU0VUKGNwdSwgJmNwdXNldCk7CisKKwlkcHJpbnRmKCJzZXQgYWZmaW5pdHkgdG8gY3B1ICMldVxuIiwgY3B1KTsKKworCWlmIChzY2hlZF9zZXRhZmZpbml0eShnZXRwaWQoKSwgc2l6ZW9mKGNwdV9zZXRfdCksICZjcHVzZXQpIDwgMCkgeworCQlwZXJyb3IoInNjaGVkX3NldGFmZmluaXR5Iik7CisJCWZwcmludGYoc3RkZXJyLCAid2FybmluZzogdW5hYmxlIHRvIHNldCBjcHUgYWZmaW5pdHlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogc2V0cyB0aGUgcHJvY2VzcyBwcmlvcml0eSBwYXJhbWV0ZXIKKyAqCisgKiBAcGFyYW0gcHJpb3JpdHkgcHJpb3JpdHkgdmFsdWUKKyAqCisgKiBAcmV0dmFsIDAgb24gc3VjY2VzcworICogQHJldHZhbCAtMSB3aGVuIHNldHRpbmcgdGhlIHByaW9yaXR5IGZhaWxlZAorICoqLworCitpbnQgc2V0X3Byb2Nlc3NfcHJpb3JpdHkoaW50IHByaW9yaXR5KQoreworCXN0cnVjdCBzY2hlZF9wYXJhbSBwYXJhbTsKKworCWRwcmludGYoInNldCBzY2hlZHVsZXIgcHJpb3JpdHkgdG8gJWlcbiIsIHByaW9yaXR5KTsKKworCXBhcmFtLnNjaGVkX3ByaW9yaXR5ID0gcHJpb3JpdHk7CisKKwlpZiAoc2NoZWRfc2V0c2NoZWR1bGVyKDAsIFNDSEVEVUxFUiwgJnBhcmFtKSA8IDApIHsKKwkJcGVycm9yKCJzY2hlZF9zZXRzY2hlZHVsZXIiKTsKKwkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiB1bmFibGUgdG8gc2V0IHNjaGVkdWxlciBwcmlvcml0eVxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBub3RpZmllcyB0aGUgdXNlciB0aGF0IHRoZSBiZW5jaG1hcmsgbWF5IHJ1biBzb21lIHRpbWUKKyAqCisgKiBAcGFyYW0gY29uZmlnIGJlbmNobWFyayBjb25maWcgdmFsdWVzCisgKgorICoqLworCit2b2lkIHByZXBhcmVfdXNlcihjb25zdCBzdHJ1Y3QgY29uZmlnICpjb25maWcpCit7CisJdW5zaWduZWQgbG9uZyBzbGVlcF90aW1lID0gMDsKKwl1bnNpZ25lZCBsb25nIGxvYWRfdGltZSA9IDA7CisJdW5zaWduZWQgaW50IHJvdW5kOworCisJZm9yIChyb3VuZCA9IDA7IHJvdW5kIDwgY29uZmlnLT5yb3VuZHM7IHJvdW5kKyspIHsKKwkJc2xlZXBfdGltZSArPSAgMiAqIGNvbmZpZy0+Y3ljbGVzICoKKwkJCShjb25maWctPnNsZWVwICsgY29uZmlnLT5zbGVlcF9zdGVwICogcm91bmQpOworCQlsb2FkX3RpbWUgKz0gMiAqIGNvbmZpZy0+Y3ljbGVzICoKKwkJCShjb25maWctPmxvYWQgKyBjb25maWctPmxvYWRfc3RlcCAqIHJvdW5kKSArCisJCQkoY29uZmlnLT5sb2FkICsgY29uZmlnLT5sb2FkX3N0ZXAgKiByb3VuZCAqIDQpOworCX0KKworCWlmIChjb25maWctPnZlcmJvc2UgfHwgY29uZmlnLT5vdXRwdXQgIT0gc3Rkb3V0KQorCQlwcmludGYoImFwcHJveC4gdGVzdCBkdXJhdGlvbjogJWltXG4iLAorCQkgICAgICAgKGludCkoKHNsZWVwX3RpbWUgKyBsb2FkX3RpbWUpIC8gNjAwMDAwMDApKTsKK30KKworLyoqCisgKiBzZXRzIHVwIHRoZSBjcHUgYWZmaW5pdHkgYW5kIHNjaGVkdWxlciBwcmlvcml0eQorICoKKyAqIEBwYXJhbSBjb25maWcgYmVuY2htYXJrIGNvbmZpZyB2YWx1ZXMKKyAqCisgKiovCisKK3ZvaWQgcHJlcGFyZV9zeXN0ZW0oY29uc3Qgc3RydWN0IGNvbmZpZyAqY29uZmlnKQoreworCWlmIChjb25maWctPnZlcmJvc2UpCisJCXByaW50Zigic2V0IGNwdSBhZmZpbml0eSB0byBjcHUgIyV1XG4iLCBjb25maWctPmNwdSk7CisKKwlzZXRfY3B1X2FmZmluaXR5KGNvbmZpZy0+Y3B1KTsKKworCXN3aXRjaCAoY29uZmlnLT5wcmlvKSB7CisJY2FzZSBTQ0hFRF9ISUdIOgorCQlpZiAoY29uZmlnLT52ZXJib3NlKQorCQkJcHJpbnRmKCJoaWdoIHByaW9yaXR5IGNvbmRpdGlvbiByZXF1ZXN0ZWRcbiIpOworCisJCXNldF9wcm9jZXNzX3ByaW9yaXR5KFBSSU9SSVRZX0hJR0gpOworCQlicmVhazsKKwljYXNlIFNDSEVEX0xPVzoKKwkJaWYgKGNvbmZpZy0+dmVyYm9zZSkKKwkJCXByaW50ZigibG93IHByaW9yaXR5IGNvbmRpdGlvbiByZXF1ZXN0ZWRcbiIpOworCisJCXNldF9wcm9jZXNzX3ByaW9yaXR5KFBSSU9SSVRZX0xPVyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmIChjb25maWctPnZlcmJvc2UpCisJCQlwcmludGYoImRlZmF1bHQgcHJpb3JpdHkgY29uZGl0aW9uIHJlcXVlc3RlZFxuIik7CisKKwkJc2V0X3Byb2Nlc3NfcHJpb3JpdHkoUFJJT1JJVFlfREVGQVVMVCk7CisJfQorfQorCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2JlbmNoL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhOGM4NTgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9iZW5jaC9zeXN0ZW0uaApAQCAtMCwwICsxLDI5IEBACisvKiAgY3B1ZnJlcS1iZW5jaCBDUFVGcmVxIG1pY3JvYmVuY2htYXJrCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3RpYW4gS29ybmFja2VyIDxja29ybmFja2VyQHN1c2UuZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlICJwYXJzZS5oIgorCitsb25nIGxvbmcgZ2V0X3RpbWUoKTsKKworaW50IHNldF9jcHVmcmVxX2dvdmVybm9yKGNoYXIgKmdvdmVybm9yLCB1bnNpZ25lZCBpbnQgY3B1KTsKK2ludCBzZXRfY3B1X2FmZmluaXR5KHVuc2lnbmVkIGludCBjcHUpOworaW50IHNldF9wcm9jZXNzX3ByaW9yaXR5KGludCBwcmlvcml0eSk7CisKK3ZvaWQgcHJlcGFyZV91c2VyKGNvbnN0IHN0cnVjdCBjb25maWcgKmNvbmZpZyk7Cit2b2lkIHByZXBhcmVfc3lzdGVtKGNvbnN0IHN0cnVjdCBjb25maWcgKmNvbmZpZyk7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L01ha2VmaWxlIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDhjYzFlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9NYWtlZmlsZQpAQCAtMCwwICsxLDIwIEBACitkZWZhdWx0OiBhbGwKKworY2VudHJpbm8tZGVjb2RlOiBjZW50cmluby1kZWNvZGUuYworCSQoQ0MpICQoQ0ZMQUdTKSAtbyBjZW50cmluby1kZWNvZGUgY2VudHJpbm8tZGVjb2RlLmMKKworZHVtcF9wc2I6IGR1bXBfcHNiLmMKKwkkKENDKSAkKENGTEFHUykgLW8gZHVtcF9wc2IgZHVtcF9wc2IuYworCitpbnRlbF9nc2ljOiBpbnRlbF9nc2ljLmMKKwkkKENDKSAkKENGTEFHUykgLW8gaW50ZWxfZ3NpYyAtbGxybWkgaW50ZWxfZ3NpYy5jCisKK3Bvd2Vybm93LWs4LWRlY29kZTogcG93ZXJub3ctazgtZGVjb2RlLmMKKwkkKENDKSAkKENGTEFHUykgLW8gcG93ZXJub3ctazgtZGVjb2RlIHBvd2Vybm93LWs4LWRlY29kZS5jCisKK2FsbDogY2VudHJpbm8tZGVjb2RlIGR1bXBfcHNiIGludGVsX2dzaWMgcG93ZXJub3ctazgtZGVjb2RlCisKK2NsZWFuOgorCXJtIC1yZiBjZW50cmluby1kZWNvZGUgZHVtcF9wc2IgaW50ZWxfZ3NpYyBwb3dlcm5vdy1rOC1kZWNvZGUKKworLlBIT05ZOiBhbGwgZGVmYXVsdCBjbGVhbgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9jZW50cmluby1kZWNvZGUuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvY2VudHJpbm8tZGVjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VmMjRjYwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvY2VudHJpbm8tZGVjb2RlLmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiAgKEMpIDIwMDMgLSAyMDA0ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIEJhc2VkIG9uIGNvZGUgZm91bmQgaW4KKyAqIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKKyAqIGFuZCBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSBKZXJlbXkgRml0emhhcmRpbmdlLgorICoKKyAqIFVTQUdFOiBzaW1wbHkgcnVuIGl0IHRvIGRlY29kZSB0aGUgY3VycmVudCBzZXR0aW5ncyBvbiBDUFUgMCwKKyAqCSAgb3IgcGFzcyB0aGUgQ1BVIG51bWJlciBhcyBhcmd1bWVudCwgb3IgcGFzcyB0aGUgTVNSIGNvbnRlbnQKKyAqCSAgYXMgYXJndW1lbnQuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2RlZmluZSBNQ1BVCTMyCisKKyNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJMHgxOTgKKworc3RhdGljIGludCByZG1zcih1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbXNyLAorCQkgdW5zaWduZWQgaW50ICpsbywgdW5zaWduZWQgaW50ICpoaSkKK3sKKwlpbnQgZmQ7CisJY2hhciBmaWxlWzIwXTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCWludCByZXR2YWwgPSAtMTsKKworCSpsbyA9ICpoaSA9IDA7CisKKwlpZiAoY3B1ID4gTUNQVSkKKwkJZ290byBlcnIxOworCisJc3ByaW50ZihmaWxlLCAiL2Rldi9jcHUvJWQvbXNyIiwgY3B1KTsKKwlmZCA9IG9wZW4oZmlsZSwgT19SRE9OTFkpOworCisJaWYgKGZkIDwgMCkKKwkJZ290byBlcnIxOworCisJaWYgKGxzZWVrKGZkLCBtc3IsIFNFRUtfQ1VSKSA9PSAtMSkKKwkJZ290byBlcnIyOworCisJaWYgKHJlYWQoZmQsICZ2YWwsIDgpICE9IDgpCisJCWdvdG8gZXJyMjsKKworCSpsbyA9ICh1aW50MzJfdCApKHZhbCAmIDB4ZmZmZmZmZmZ1bGwpOworCSpoaSA9ICh1aW50MzJfdCApKHZhbD4+MzIgJiAweGZmZmZmZmZmdWxsKTsKKworCXJldHZhbCA9IDA7CitlcnIyOgorCWNsb3NlKGZkKTsKK2VycjE6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgZGVjb2RlICh1bnNpZ25lZCBpbnQgbXNyKQoreworCXVuc2lnbmVkIGludCBtdWx0aXBsaWVyOworCXVuc2lnbmVkIGludCBtdjsKKworCW11bHRpcGxpZXIgPSAoKG1zciA+PiA4KSAmIDB4RkYpOworCisJbXYgPSAoKChtc3IgJiAweEZGKSAqIDE2KSArIDcwMCk7CisKKwlwcmludGYoIjB4JXggbWVhbnMgbXVsdGlwbGllciAlZCBAICVkIG1WXG4iLCBtc3IsIG11bHRpcGxpZXIsIG12KTsKK30KKworc3RhdGljIGludCBkZWNvZGVfbGl2ZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGludCBsbywgaGk7CisJaW50IGVycjsKKworCWVyciA9IHJkbXNyKGNwdSwgTVNSX0lBMzJfUEVSRl9TVEFUVVMsICZsbywgJmhpKTsKKworCWlmIChlcnIpIHsKKwkJcHJpbnRmKCJjYW4ndCBnZXQgTVNSX0lBMzJfUEVSRl9TVEFUVVMgZm9yIGNwdSAlZFxuIiwgY3B1KTsKKwkJcHJpbnRmKCJQb3NzaWJsZSB0cm91YmxlOiB5b3UgZG9uJ3QgcnVuIGFuIEVuaGFuY2VkIFNwZWVkU3RlcCBjYXBhYmxlIGNwdVxuIik7CisJCXByaW50Zigib3IgeW91IGFyZSBub3Qgcm9vdCwgb3IgdGhlIG1zciBkcml2ZXIgaXMgbm90IHByZXNlbnRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlkZWNvZGUobG8pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJdW5zaWduZWQgaW50IGNwdSwgbW9kZSA9IDA7CisKKwlpZiAoYXJnYyA8IDIpCisJCWNwdSA9IDA7CisJZWxzZSB7CisJCWNwdSA9IHN0cnRvdWwoYXJndlsxXSwgTlVMTCwgMCk7CisJCWlmIChjcHUgPj0gTUNQVSkKKwkJCW1vZGUgPSAxOworCX0KKworCWlmIChtb2RlKQorCQlkZWNvZGUoY3B1KTsKKwllbHNlCisJCWRlY29kZV9saXZlKGNwdSk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvZHVtcF9wc2IuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvZHVtcF9wc2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDZhNDc1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9kdW1wX3BzYi5jCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogZHVtcF9wc2IuIChjKSAyMDA0LCBEYXZlIEpvbmVzLCBSZWQgSGF0IEluYy4KKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwgdjIuCisgKi8KKworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2RlZmluZSBMRU4gKDB4MTAwMDAwIC0gMHhjMDAwMCkKKyNkZWZpbmUgT0ZGU0VUICgweGMwMDAwKQorCisjaWZuZGVmIF9fcGFja2VkCisjZGVmaW5lIF9fcGFja2VkIF9fYXR0cmlidXRlKChwYWNrZWQpKQorI2VuZGlmCisKK3N0YXRpYyBsb25nIHJlbGV2YW50OworCitzdGF0aWMgY29uc3QgaW50IGZpZF90b19tdWx0WzMyXSA9IHsKKwkxMTAsIDExNSwgMTIwLCAxMjUsIDUwLCA1NSwgNjAsIDY1LAorCTcwLCA3NSwgODAsIDg1LCA5MCwgOTUsIDEwMCwgMTA1LAorCTMwLCAxOTAsIDQwLCAyMDAsIDEzMCwgMTM1LCAxNDAsIDIxMCwKKwkxNTAsIDIyNSwgMTYwLCAxNjUsIDE3MCwgMTgwLCAtMSwgLTEsCit9OworCitzdGF0aWMgY29uc3QgaW50IHZpZF90b192b2x0YWdlWzMyXSA9IHsKKwkyMDAwLCAxOTUwLCAxOTAwLCAxODUwLCAxODAwLCAxNzUwLCAxNzAwLCAxNjUwLAorCTE2MDAsIDE1NTAsIDE1MDAsIDE0NTAsIDE0MDAsIDEzNTAsIDEzMDAsIDAsCisJMTI3NSwgMTI1MCwgMTIyNSwgMTIwMCwgMTE3NSwgMTE1MCwgMTEyNSwgMTEwMCwKKwkxMDc1LCAxMDUwLCAxMDI0LCAxMDAwLCA5NzUsIDk1MCwgOTI1LCAwLAorfTsKKworc3RydWN0IHBzYl9oZWFkZXIgeworCWNoYXIgc2lnbmF0dXJlWzEwXTsKKwl1X2NoYXIgdmVyc2lvbjsKKwl1X2NoYXIgZmxhZ3M7CisJdV9zaG9ydCBzZXR0bGluZ3RpbWU7CisJdV9jaGFyIHJlczE7CisJdV9jaGFyIG51bXBzdDsKK30gX19wYWNrZWQ7CisKK3N0cnVjdCBwc3RfaGVhZGVyIHsKKwl1X2ludDMyX3QgY3B1aWQ7CisJdV9jaGFyIGZzYjsKKwl1X2NoYXIgbWF4ZmlkOworCXVfY2hhciBzdGFydHZpZDsKKwl1X2NoYXIgbnVtcHN0YXRlczsKK30gX19wYWNrZWQ7CisKK3N0YXRpYyB1X2ludCBmc2I7CitzdGF0aWMgdV9pbnQgc2d0YzsKKworc3RhdGljIGludAorZGVjb2RlX3BzdChjaGFyICpwLCBpbnQgbnBzdGF0ZXMpCit7CisJaW50IGk7CisJaW50IGZyZXEsIGZpZCwgdmlkOworCisJZm9yIChpID0gMDsgaSA8IG5wc3RhdGVzOyArK2kpIHsKKwkJZmlkID0gKnArKzsKKwkJdmlkID0gKnArKzsKKwkJZnJlcSA9IDEwMCAqIGZpZF90b19tdWx0W2ZpZF0gKiBmc2I7CisKKwkJcHJpbnRmKCIgICAlMmQgJThka0h6ICBGSUQgJTAyeCAoJTJkLiUwMWQpICBWSUQgJTAyeCAoJTRkbVYpXG4iLAorCQkgICAgICAgaSwKKwkJICAgICAgIGZyZXEsCisJCSAgICAgICBmaWQsIGZpZF90b19tdWx0W2ZpZF0vMTAsIGZpZF90b19tdWx0W2ZpZF0lMTAsCisJCSAgICAgICB2aWQsIHZpZF90b192b2x0YWdlW3ZpZF0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMKK3ZvaWQgZGVjb2RlX3BzYihjaGFyICpwLCBpbnQgbnVtcHN0KQoreworCWludCBpOworCXN0cnVjdCBwc2JfaGVhZGVyICpwc2I7CisJc3RydWN0IHBzdF9oZWFkZXIgKnBzdDsKKworCXBzYiA9IChzdHJ1Y3QgcHNiX2hlYWRlciopIHA7CisKKwlpZiAocHNiLT52ZXJzaW9uICE9IDB4MTIpCisJCXJldHVybjsKKworCXByaW50ZigiUFNCIHZlcnNpb246ICVoaHggZmxhZ3M6ICVoaHggc2V0dGxpbmcgdGltZSAlaGh1dXMgcmVzMSAlaGh4IG51bSBwc3QgJWhodVxuIiwKKwkJCXBzYi0+dmVyc2lvbiwKKwkJCXBzYi0+ZmxhZ3MsCisJCQlwc2ItPnNldHRsaW5ndGltZSwKKwkJCXBzYi0+cmVzMSwKKwkJCXBzYi0+bnVtcHN0KTsKKwlzZ3RjID0gcHNiLT5zZXR0bGluZ3RpbWUgKiAxMDA7CisKKwlpZiAoc2d0YyA8IDEwMDAwKQorCQlzZ3RjID0gMTAwMDA7CisKKwlwID0gKChjaGFyICopIHBzYikgKyBzaXplb2Yoc3RydWN0IHBzYl9oZWFkZXIpOworCisJaWYgKG51bXBzdCA8IDApCisJCW51bXBzdCA9IHBzYi0+bnVtcHN0OworCWVsc2UKKwkJcHJpbnRmKCJPdmVycmlkaW5nIG51bWJlciBvZiBwc3QgOiVkXG4iLCBudW1wc3QpOworCisJZm9yIChpID0gMDsgaSA8IG51bXBzdDsgaSsrKSB7CisJCXBzdCA9IChzdHJ1Y3QgcHN0X2hlYWRlciopIHA7CisKKwkJaWYgKHJlbGV2YW50ICE9IDApIHsKKwkJCWlmIChyZWxldmFudCE9IHBzdC0+Y3B1aWQpCisJCQkJZ290byBuZXh0X29uZTsKKwkJfQorCisJCXByaW50ZigiICBQU1QgJWQgIGNwdWlkICUuM3ggZnNiICVoaHUgbWZpZCAlaGh4IHN2aWQgJWhoeCBudW1iZXJzdGF0ZXMgJWhodVxuIiwKKwkJCQlpKzEsCisJCQkJcHN0LT5jcHVpZCwKKwkJCQlwc3QtPmZzYiwKKwkJCQlwc3QtPm1heGZpZCwKKwkJCQlwc3QtPnN0YXJ0dmlkLAorCQkJCXBzdC0+bnVtcHN0YXRlcyk7CisKKwkJZnNiID0gcHN0LT5mc2I7CisJCWRlY29kZV9wc3QocCArIHNpemVvZihzdHJ1Y3QgcHN0X2hlYWRlciksIHBzdC0+bnVtcHN0YXRlcyk7CisKK25leHRfb25lOgorCQlwICs9IHNpemVvZihzdHJ1Y3QgcHN0X2hlYWRlcikgKyAyKnBzdC0+bnVtcHN0YXRlczsKKwl9CisKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gaW5mb19vcHRzW10gPSB7CisJey5uYW1lID0gIm51bXBzdCIsCS5oYXNfYXJnPW5vX2FyZ3VtZW50LAkuZmxhZz1OVUxMLCAudmFsPSduJ30sCit9OworCit2b2lkIHByaW50X2hlbHAodm9pZCkKK3sKKwlwcmludGYgKCJVc2FnZTogZHVtcF9wc2IgW29wdGlvbnNdXG4iKTsKKwlwcmludGYgKCJPcHRpb25zOlxuIik7CisJcHJpbnRmICgiICAtbiwgLS1udW1wc3QgICAgIFNldCBudW1iZXIgb2YgUFNUIHRhYmxlcyB0byBzY2FuXG4iKTsKKwlwcmludGYgKCIgIC1yLCAtLXJlbGV2YW50ICAgT25seSBkaXNwbGF5IFBTVHMgcmVsZXZhbnQgdG8gY3B1aWQgTlxuIik7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBmZDsKKwlpbnQgbnVtcHN0PS0xOworCWludCByZXQ9MCwgY29udD0xOworCWNoYXIgKm1lbSA9IE5VTEw7CisJY2hhciAqcDsKKworCWRvIHsKKwkJcmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImhyOm46IiwgaW5mb19vcHRzLCBOVUxMKTsKKwkJc3dpdGNoIChyZXQpeworCQljYXNlICc/JzoKKwkJY2FzZSAnaCc6CisJCQlwcmludF9oZWxwKCk7CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCXJlbGV2YW50ID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMTYpOworCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJbnVtcHN0ID0gc3RydG9sKG9wdGFyZywgTlVMTCwgMTApOworCQkJYnJlYWs7CisJCWNhc2UgLTE6CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwl9IHdoaWxlKGNvbnQpOworCisJZmQgPSBvcGVuKCIvZGV2L21lbSIsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCXByaW50ZiAoIkNvdWxkbid0IG9wZW4gL2Rldi9tZW0uIEFyZSB5b3Ugcm9vdD9cbiIpOworCQlleGl0KDEpOworCX0KKworCW1lbSA9IG1tYXAobWVtLCAweDEwMDAwMCAtIDB4YzAwMDAsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZmQsIDB4YzAwMDApOworCWNsb3NlKGZkKTsKKworCWZvciAocCA9IG1lbTsgcCAtIG1lbSA8IExFTjsgcCs9MTYpIHsKKwkJaWYgKG1lbWNtcChwLCAiQU1ESzdQTk9XISIsIDEwKSA9PSAwKSB7CisJCQlkZWNvZGVfcHNiKHAsIG51bXBzdCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCW11bm1hcChtZW0sIExFTik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2ludGVsX2dzaWMuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2kzODYvaW50ZWxfZ3NpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZjUyOTMKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L2ludGVsX2dzaWMuYwpAQCAtMCwwICsxLDc4IEBACisvKgorICogIChDKSAyMDAzICBCcnVubyBEdWNyb3QKKyAqICAoQykgMjAwNCAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiBCYXNlZCBvbiBjb2RlIGZvdW5kIGluCisgKiBsaW51eC9pbmNsdWRlL2FzbS1pMzg2L2lzdC5oIGFuZCBsaW51eC9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKKyAqIGFuZCBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSBBbmR5IEdyb3ZlciA8YW5kcmV3Lmdyb3ZlckBpbnRlbC5jb20+CisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bHJtaS5oPgorCitpbnQgbWFpbiAodm9pZCkKK3sKKwlzdHJ1Y3QgTFJNSV9yZWdzCXI7CisJaW50CQkJcmV0dmFsOworCisJaWYgKCFMUk1JX2luaXQoKSkKKwkJcmV0dXJuIDA7CisKKwltZW1zZXQoJnIsIDAsIHNpemVvZihyKSk7CisKKwlyLmVheCA9IDB4MDAwMEU5ODA7CisJci5lZHggPSAweDQ3NTM0OTQzOworCisJcmV0dmFsID0gTFJNSV9pbnQoMHgxNSwgJnIpOworCisJaWYgKCFyZXR2YWwpIHsKKwkJcHJpbnRmKCJGYWlsZWQhXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChyLmVheCA9PSAweDQ3NTM0OTQzKSB7CisJCXByaW50ZigiQklPUyBzdXBwb3J0cyBHU0lDIGNhbGw6XG4iKTsKKwkJcHJpbnRmKCJcdHNpZ25hdHVyZTogJWMlYyVjJWNcbiIsCisJCSAgICAgICAoci5lYXggPj4gMjQpICYgMHhmZiwKKwkJICAgICAgIChyLmVheCA+PiAxNikgJiAweGZmLAorCQkgICAgICAgKHIuZWF4ID4+IDgpICYgMHhmZiwKKwkJICAgICAgIChyLmVheCkgJiAweGZmKTsKKwkJcHJpbnRmKCJcdGNvbW1hbmQgcG9ydCA9IDB4JS40eFxuIiwKKwkJICAgICAgIHIuZWJ4ICYgMHhmZmZmKTsKKwkJcHJpbnRmKCJcdGNvbW1hbmQgPSAgICAgIDB4JS40eFxuIiwKKwkJICAgICAgIChyLmVieCA+PiAxNikgJiAweGZmZmYpOworCQlwcmludGYoIlx0ZXZlbnQgcG9ydCA9ICAgMHglLjh4XG4iLCByLmVjeCk7CisJCXByaW50ZigiXHRmbGFncyA9ICAgICAgICAweCUuOHhcbiIsIHIuZWR4KTsKKwkJaWYgKCgoci5lYnggPj4gMTYpICYgMHhmZmZmKSAhPSAweDgyKSB7CisJCQlwcmludGYoIm5vbi1kZWZhdWx0IGNvbW1hbmQgdmFsdWUuIElmIHNwZWVkc3RlcC1zbWkgIgorCQkJICAgICAgICJkb2Vzbid0IHdvcmsgb3V0IG9mIHRoZSBib3gsXG55b3UgbWF5IHdhbnQgdG8gIgorCQkJICAgICAgICJ0cnkgb3V0IHRoZSBkZWZhdWx0IHZhbHVlIGJ5IHBhc3NpbmcgIgorCQkJICAgICAgICJzbWlfY21kPTB4ODIgdG8gdGhlIG1vZHVsZVxuIE9OIFlPVVIgT1dOICIKKwkJCSAgICAgICAiUklTSy5cbiIpOworCQl9CisJCWlmICgoci5lYnggJiAweGZmZmYpICE9IDB4YjIpIHsKKwkJCXByaW50Zigibm9uLWRlZmF1bHQgY29tbWFuZCBwb3J0LiBJZiBzcGVlZHN0ZXAtc21pICIKKwkJCSAgICAgICAiZG9lc24ndCB3b3JrIG91dCBvZiB0aGUgYm94LFxueW91IG1heSB3YW50IHRvICIKKwkJCSAgICAgICAidHJ5IG91dCB0aGUgZGVmYXVsdCB2YWx1ZSBieSBwYXNzaW5nICIKKwkJCSAgICAgICAic21pX3BvcnQ9MHg4MiB0byB0aGUgbW9kdWxlXG4gT04gWU9VUiBPV04gIgorCQkJICAgICAgICJSSVNLLlxuIik7CisJCX0KKwl9IGVsc2UgeworCQlwcmludGYoIkJJT1MgRE9FUyBOT1Qgc3VwcG9ydCBHU0lDIGNhbGwuICBEdW1waW5nIHJlZ2lzdGVycyBhbnl3YXk6XG4iKTsKKwkJcHJpbnRmKCJlYXggPSAweCUuOHhcbiIsIHIuZWF4KTsKKwkJcHJpbnRmKCJlYnggPSAweCUuOHhcbiIsIHIuZWJ4KTsKKwkJcHJpbnRmKCJlY3ggPSAweCUuOHhcbiIsIHIuZWN4KTsKKwkJcHJpbnRmKCJlZHggPSAweCUuOHhcbiIsIHIuZWR4KTsKKwkJcHJpbnRmKCJOb3RlIGFsc28gdGhhdCBzb21lIEJJT1MgZG8gbm90IHN1cHBvcnQgdGhlIGluaXRpYWwgIgorCQkgICAgICAgIkdTSUMgY2FsbCwgYnV0IHRoZSBuZXdlclxuc3BlZWVkc3RlcC1zbWkgZHJpdmVyIG1heSAiCisJCSAgICAgICAid29yay5cbkZvciB0aGlzLCB5b3UgbmVlZCB0byBwYXNzIHNvbWUgYXJndW1lbnRzIHRvICIKKwkJICAgICAgICJ0aGUgc3BlZWRzdGVwLXNtaSBkcml2ZXI6XG4iKTsKKwkJcHJpbnRmKCJcdHNtaV9jbWQ9MHg/PyBzbWlfcG9ydD0weD8/IHNtaV9zaWc9MVxuIik7CisJCXByaW50ZigiXG5VbmZvcnR1bmF0ZWx5LCB5b3UgaGF2ZSB0byBrbm93IHdoYXQgZXhhY3RseSBhcmUgIgorCQkgICAgICAgInNtaV9jbWQgYW5kIHNtaV9wb3J0LCBhbmQgdGhpc1xuaXMgc3lzdGVtICIKKwkJICAgICAgICJkZXBlbmRhbnQuXG4iKTsKKwl9CisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9pMzg2L3Bvd2Vybm93LWs4LWRlY29kZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9wb3dlcm5vdy1rOC1kZWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzhhNmIzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcvaTM4Ni9wb3dlcm5vdy1rOC1kZWNvZGUuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogIChDKSAyMDA0IEJydW5vIER1Y3JvdCA8ZHVjcm90QHBvdXBpbm91Lm9yZz4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIEJhc2VkIG9uIGNvZGUgZm91bmQgaW4KKyAqIGxpbnV4L2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYworICogYW5kIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IFBhdWwgRGV2cmllbmR0CisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2RlZmluZSBNQ1BVIDMyCisKKyNkZWZpbmUgTVNSX0ZJRFZJRF9TVEFUVVMJMHhjMDAxMDA0MgorCisjZGVmaW5lIE1TUl9TX0hJX0NVUlJFTlRfVklECTB4MDAwMDAwMWYKKyNkZWZpbmUgTVNSX1NfTE9fQ1VSUkVOVF9GSUQJMHgwMDAwMDAzZgorCitzdGF0aWMgaW50IGdldF9maWR2aWQodWludDMyX3QgY3B1LCB1aW50MzJfdCAqZmlkLCB1aW50MzJfdCAqdmlkKQoreworCWludCBlcnIgPSAxOworCXVpbnQ2NF90IG1zciA9IDA7CisJaW50IGZkOworCWNoYXIgZmlsZVsyMF07CisKKwlpZiAoY3B1ID4gTUNQVSkKKwkJZ290byBvdXQ7CisKKwlzcHJpbnRmKGZpbGUsICIvZGV2L2NwdS8lZC9tc3IiLCBjcHUpOworCisJZmQgPSBvcGVuKGZpbGUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlnb3RvIG91dDsKKwlsc2VlayhmZCwgTVNSX0ZJRFZJRF9TVEFUVVMsIFNFRUtfQ1VSKTsKKwlpZiAocmVhZChmZCwgJm1zciwgOCkgIT0gOCkKKwkJZ290byBlcnIxOworCisJKmZpZCA9ICgodWludDMyX3QgKShtc3IgJiAweGZmZmZmZmZmdWxsKSkgJiBNU1JfU19MT19DVVJSRU5UX0ZJRDsKKwkqdmlkID0gKCh1aW50MzJfdCApKG1zcj4+MzIgJiAweGZmZmZmZmZmdWxsKSkgJiBNU1JfU19ISV9DVVJSRU5UX1ZJRDsKKwllcnIgPSAwOworZXJyMToKKwljbG9zZShmZCk7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworCisvKiBSZXR1cm4gYSBmcmVxdWVuY3kgaW4gTUh6LCBnaXZlbiBhbiBpbnB1dCBmaWQgKi8KK3N0YXRpYyB1aW50MzJfdCBmaW5kX2ZyZXFfZnJvbV9maWQodWludDMyX3QgZmlkKQoreworCXJldHVybiA4MDAgKyAoZmlkICogMTAwKTsKK30KKworLyogUmV0dXJuIGEgdm9sdGFnZSBpbiBtaWxpVm9sdHMsIGdpdmVuIGFuIGlucHV0IHZpZCAqLworc3RhdGljIHVpbnQzMl90IGZpbmRfbWlsbGl2b2x0c19mcm9tX3ZpZCh1aW50MzJfdCB2aWQpCit7CisJcmV0dXJuIDE1NTAtdmlkKjI1OworfQorCitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgZXJyOworCWludCBjcHU7CisJdWludDMyX3QgZmlkLCB2aWQ7CisKKwlpZiAoYXJnYyA8IDIpCisJCWNwdSA9IDA7CisJZWxzZQorCQljcHUgPSBzdHJ0b3VsKGFyZ3ZbMV0sIE5VTEwsIDApOworCisJZXJyID0gZ2V0X2ZpZHZpZChjcHUsICZmaWQsICZ2aWQpOworCisJaWYgKGVycikgeworCQlwcmludGYoImNhbid0IGdldCBmaWQsIHZpZCBmcm9tIE1TUlxuIik7CisJCXByaW50ZigiUG9zc2libGUgdHJvdWJsZTogeW91IGRvbid0IHJ1biBhIHBvd2Vybm93LWs4IGNhcGFibGUgY3B1XG4iKTsKKwkJcHJpbnRmKCJvciB5b3UgYXJlIG5vdCByb290LCBvciB0aGUgbXNyIGRyaXZlciBpcyBub3QgcHJlc2VudFxuIik7CisJCWV4aXQoMSk7CisJfQorCisJCisJcHJpbnRmKCJjcHUgJWQgY3VycmVudGx5IGF0ICVkIE1IeiBhbmQgJWQgbVZcbiIsCisJCQljcHUsCisJCQlmaW5kX2ZyZXFfZnJvbV9maWQoZmlkKSwKKwkJCWZpbmRfbWlsbGl2b2x0c19mcm9tX3ZpZCh2aWQpKTsKKwkKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2tlcm5lbC9NYWtlZmlsZSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2tlcm5lbC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmIxNDZmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcva2VybmVsL01ha2VmaWxlCkBAIC0wLDAgKzEsMjMgQEAKK29iai1tCTo9CisKK0tESVIJOj0gL2xpYi9tb2R1bGVzLyQoc2hlbGwgdW5hbWUgLXIpL2J1aWxkCitQV0QJCTo9ICQoc2hlbGwgcHdkKQorS01JU0MgICA6PSAvbGliL21vZHVsZXMvJChzaGVsbCB1bmFtZSAtcikvY3B1ZnJlcXV0aWxzLworCitpZmVxICgiJChDT05GSUdfWDg2X1RTQykiLCAieSIpCisgIG9iai1tCSArPSBjcHVmcmVxLXRlc3RfdHNjLm8KK2VuZGlmCisKK2RlZmF1bHQ6CisJJChNQUtFKSAtQyAkKEtESVIpIE09JChQV0QpCisKK2NsZWFuOgorCS0gcm0gLXJmICoubyAqLmtvIC50bXAtdmVyc2lvbnMgLiouY21kIC4qLm1vZC4qICoubW9kLmMKKwktIHJtIC1yZiAudG1wX3ZlcnNpb25zKiBNb2R1bGUuc3ltdmVycyBtb2R1bGVzLm9yZGVyCisKK2luc3RhbGw6IGRlZmF1bHQKKwlpbnN0YWxsIC1kICQoS01JU0MpCisJaW5zdGFsbCAtbSA2NDQgLWMgKi5rbyAkKEtNSVNDKQorCS9zYmluL2RlcG1vZCAtYQorCithbGw6CWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL2tlcm5lbC9jcHVmcmVxLXRlc3RfdHNjLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9rZXJuZWwvY3B1ZnJlcS10ZXN0X3RzYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2Y2FjZTYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy9rZXJuZWwvY3B1ZnJlcS10ZXN0X3RzYy5jCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogdGVzdCBtb2R1bGUgdG8gY2hlY2sgd2hldGhlciB0aGUgVFNDLWJhc2VkIGRlbGF5IHJvdXRpbmUgY29udGludWVzCisgKiB0byB3b3JrIHByb3Blcmx5IGFmdGVyIGNwdWZyZXEgdHJhbnNpdGlvbnMuIE5lZWRzIEFDUEkgdG8gd29yaworICogcHJvcGVybHkuCisgKgorICogQmFzZWQgcGFydGx5IG9uIHRoZSBQb3dlciBNYW5hZ2VtZW50IFRpbWVyIChQTVRNUikgY29kZSB0byBiZSBmb3VuZAorICogaW4gYXJjaC9pMzg2L2tlcm5lbC90aW1lcnMvdGltZXJfcG0uYyBvbiByZWNlbnQgMi42LiBrZXJuZWxzLCBlc3BlY2lhbGx5CisgKiBjb2RlIHdyaXR0ZW4gYnkgSm9obiBTdHVsdHouIFRoZSByZWFkX3BtdG1yIGZ1bmN0aW9uIHdhcyBjb3BpZWQgdmVyYmF0aW0KKyAqIGZyb20gdGhhdCBmaWxlLgorICoKKyAqIChDKSAyMDA0IERvbWluaWsgQnJvZG93c2tpCisgKgorICogVG8gdXNlOgorICogMS4pIHBhc3MgY2xvY2s9dHNjIHRvIHRoZSBrZXJuZWwgb24geW91ciBib290bG9hZGVyCisgKiAyLikgbW9kcHJvYmUgdGhpcyBtb2R1bGUgKGl0J2xsIGZhaWwpCisgKiAzLikgY2hhbmdlIENQVSBmcmVxdWVuY3kKKyAqIDQuKSBtb2Rwcm9iZSB0aGlzIG1vZHVsZSBhZ2FpbgorICogNS4pIGlmIHRoZSB0aGlyZCB2YWx1ZSwgImRpZmZfcG10bXIiLCBjaGFuZ2VzIGJldHdlZW4gMi4gYW5kIDQuLCB0aGUKKyAqICAgICBUU0MtYmFzZWQgZGVsYXkgcm91dGluZSBvbiB0aGUgTGludXgga2VybmVsIGRvZXMgbm90IGNvcnJlY3RseQorICogICAgIGhhbmRsZSB0aGUgY3B1ZnJlcSB0cmFuc2l0aW9uLiBQbGVhc2UgcmVwb3J0IHRoaXMgdG8KKyAqICAgICBjcHVmcmVxQHZnZXIua2VybmVsLm9yZworICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CisKK3N0YXRpYyBpbnQgcG1fdG1yX2lvcG9ydCA9IDA7CisKKy8qaGVscGVyIGZ1bmN0aW9uIHRvIHNhZmVseSByZWFkIGFjcGkgcG0gdGltZXNvdXJjZSovCitzdGF0aWMgdTMyIHJlYWRfcG10bXIodm9pZCkKK3sKKwl1MzIgdjE9MCx2Mj0wLHYzPTA7CisJLyogSXQgaGFzIGJlZW4gcmVwb3J0ZWQgdGhhdCBiZWNhdXNlIG9mIHZhcmlvdXMgYnJva2VuCisJICogY2hpcHNldHMgKElDSDQsIFBJSVg0IGFuZCBQSUlYNEUpIHdoZXJlIHRoZSBBQ1BJIFBNIHRpbWUKKwkgKiBzb3VyY2UgaXMgbm90IGxhdGNoZWQsIHNvIHlvdSBtdXN0IHJlYWQgaXQgbXVsdGlwbGUKKwkgKiB0aW1lcyB0byBpbnN1cmUgYSBzYWZlIHZhbHVlIGlzIHJlYWQuCisJICovCisJZG8geworCQl2MSA9IGlubChwbV90bXJfaW9wb3J0KTsKKwkJdjIgPSBpbmwocG1fdG1yX2lvcG9ydCk7CisJCXYzID0gaW5sKHBtX3Rtcl9pb3BvcnQpOworCX0gd2hpbGUgKCh2MSA+IHYyICYmIHYxIDwgdjMpIHx8ICh2MiA+IHYzICYmIHYyIDwgdjEpCisJCSB8fCAodjMgPiB2MSAmJiB2MyA8IHYyKSk7CisKKwkvKiBtYXNrIHRoZSBvdXRwdXQgdG8gMjQgYml0cyAqLworCXJldHVybiAodjIgJiAweEZGRkZGRik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNwdWZyZXFfdGVzdF90c2Modm9pZCkKK3sKKwl1MzIgbm93LCB0aGVuLCBkaWZmOworCXU2NCBub3dfdHNjLCB0aGVuX3RzYywgZGlmZl90c2M7CisJaW50IGk7CisKKwkvKiB0aGUgZm9sbG93aW5nIGNvZGUgc25pcHBlZCBpcyBjb3BpZWQgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKwkgICBvZiBMaW51eCB2Mi42LjI1LiAqLworCisJLyogZGV0ZWN0IHRoZSBsb2NhdGlvbiBvZiB0aGUgQUNQSSBQTSBUaW1lciAqLworCWlmIChhY3BpX2dibF9GQURULmhlYWRlci5yZXZpc2lvbiA+PSBGQURUMl9SRVZJU0lPTl9JRCkgeworCQkvKiBGQURUIHJldi4gMiAqLworCQlpZiAoYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2suc3BhY2VfaWQgIT0KKwkJICAgIEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTykKKwkJCXJldHVybiAwOworCisJCXBtX3Rtcl9pb3BvcnQgPSBhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzOworCQkvKgorCQkgKiAiWCIgZmllbGRzIGFyZSBvcHRpb25hbCBleHRlbnNpb25zIHRvIHRoZSBvcmlnaW5hbCBWMS4wCisJCSAqIGZpZWxkcywgc28gd2UgbXVzdCBzZWxlY3RpdmVseSBleHBhbmQgVjEuMCBmaWVsZHMgaWYgdGhlCisJCSAqIGNvcnJlc3BvbmRpbmcgWCBmaWVsZCBpcyB6ZXJvLgorCSAJICovCisJCWlmICghcG1fdG1yX2lvcG9ydCkKKwkJCXBtX3Rtcl9pb3BvcnQgPSBhY3BpX2dibF9GQURULnBtX3RpbWVyX2Jsb2NrOworCX0gZWxzZSB7CisJCS8qIEZBRFQgcmV2LiAxICovCisJCXBtX3Rtcl9pb3BvcnQgPSBhY3BpX2dibF9GQURULnBtX3RpbWVyX2Jsb2NrOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICJzdGFydC0tPiBcbiIpOworCXRoZW4gPSByZWFkX3BtdG1yKCk7CisgICAgICAgIHJkdHNjbGwodGhlbl90c2MpOworCWZvciAoaT0wO2k8MjA7aSsrKSB7CisJCW1kZWxheSgxMDApOworCQlub3cgPSByZWFkX3BtdG1yKCk7CisJCXJkdHNjbGwobm93X3RzYyk7CisJCWRpZmYgPSAobm93IC0gdGhlbikgJiAweEZGRkZGRjsKKwkJZGlmZl90c2MgPSBub3dfdHNjIC0gdGhlbl90c2M7CisJCXByaW50ayhLRVJOX0RFQlVHICJ0MTogJTA4dSB0MjogJTA4dSBkaWZmX3BtdG1yOiAlMDh1IGRpZmZfdHNjOiAlMDE2bGx1XG4iLCB0aGVuLCBub3csIGRpZmYsIGRpZmZfdHNjKTsKKwkJdGhlbiA9IG5vdzsKKwkJdGhlbl90c2MgPSBub3dfdHNjOworCX0KKwlwcmludGsoS0VSTl9ERUJVRyAiPC0tIGVuZCBcbiIpOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3B1ZnJlcV9ub25lKHZvaWQpCit7CisJcmV0dXJuOworfQorCittb2R1bGVfaW5pdChjcHVmcmVxX3Rlc3RfdHNjKQorbW9kdWxlX2V4aXQoY3B1ZnJlcV9ub25lKQorCisKK01PRFVMRV9BVVRIT1IoIkRvbWluaWsgQnJvZG93c2tpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlZlcmlmeSB0aGUgVFNDIGNwdWZyZXEgbm90aWZpZXIgd29ya2luZyBjb3JyZWN0bHkgLS0gbmVlZHMgQUNQSS1lbmFibGVkIHN5c3RlbSIpOworTU9EVUxFX0xJQ0VOU0UgKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9NYWtlZmlsZSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmYxMzk5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L01ha2VmaWxlCkBAIC0wLDAgKzEsMTQgQEAKK2RlZmF1bHQ6IGFsbAorCitjZW50cmluby1kZWNvZGU6IGNlbnRyaW5vLWRlY29kZS5jCisJJChDQykgJChDRkxBR1MpIC1vIGNlbnRyaW5vLWRlY29kZSBjZW50cmluby1kZWNvZGUuYworCitwb3dlcm5vdy1rOC1kZWNvZGU6IHBvd2Vybm93LWs4LWRlY29kZS5jCisJJChDQykgJChDRkxBR1MpIC1vIHBvd2Vybm93LWs4LWRlY29kZSBwb3dlcm5vdy1rOC1kZWNvZGUuYworCithbGw6IGNlbnRyaW5vLWRlY29kZSBwb3dlcm5vdy1rOC1kZWNvZGUKKworY2xlYW46CisJcm0gLXJmIGNlbnRyaW5vLWRlY29kZSBwb3dlcm5vdy1rOC1kZWNvZGUKKworLlBIT05ZOiBhbGwgZGVmYXVsdCBjbGVhbgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L2NlbnRyaW5vLWRlY29kZS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L2NlbnRyaW5vLWRlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjI2ZmIzZjEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9kZWJ1Zy94ODZfNjQvY2VudHJpbm8tZGVjb2RlLmMKQEAgLTAsMCArMSBAQAorLi4vaTM4Ni9jZW50cmluby1kZWNvZGUuYwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9wb3dlcm5vdy1rOC1kZWNvZGUuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2RlYnVnL3g4Nl82NC9wb3dlcm5vdy1rOC1kZWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi5lYjMwYzc5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvZGVidWcveDg2XzY0L3Bvd2Vybm93LWs4LWRlY29kZS5jCkBAIC0wLDAgKzEgQEAKKy4uL2kzODYvcG93ZXJub3ctazgtZGVjb2RlLmMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9saWIvY3B1ZnJlcS5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL2NwdWZyZXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTYxMTAxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL2NwdWZyZXEuYwpAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqICAoQykgMjAwNC0yMDA5ICBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImNwdWZyZXEuaCIKKyNpbmNsdWRlICJzeXNmcy5oIgorCitpbnQgY3B1ZnJlcV9jcHVfZXhpc3RzKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2NwdV9leGlzdHMoY3B1KTsKK30KKwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF9mcmVxX2tlcm5lbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19nZXRfZnJlcV9rZXJuZWwoY3B1KTsKK30KKwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF9mcmVxX2hhcmR3YXJlKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlKGNwdSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbl9sYXRlbmN5KHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25fbGF0ZW5jeShjcHUpOworfQorCitpbnQgY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKHVuc2lnbmVkIGludCBjcHUsCisJCQkJdW5zaWduZWQgbG9uZyAqbWluLAorCQkJCXVuc2lnbmVkIGxvbmcgKm1heCkKK3sKKwlpZiAoKCFtaW4pIHx8ICghbWF4KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlX2xpbWl0cyhjcHUsIG1pbiwgbWF4KTsKK30KKworY2hhciAqY3B1ZnJlcV9nZXRfZHJpdmVyKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2RyaXZlcihjcHUpOworfQorCit2b2lkIGNwdWZyZXFfcHV0X2RyaXZlcihjaGFyICpwdHIpCit7CisJaWYgKCFwdHIpCisJCXJldHVybjsKKwlmcmVlKHB0cik7Cit9CisKK3N0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1ZnJlcV9nZXRfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX3BvbGljeShjcHUpOworfQorCit2b2lkIGNwdWZyZXFfcHV0X3BvbGljeShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwlpZiAoKCFwb2xpY3kpIHx8ICghcG9saWN5LT5nb3Zlcm5vcikpCisJCXJldHVybjsKKworCWZyZWUocG9saWN5LT5nb3Zlcm5vcik7CisJcG9saWN5LT5nb3Zlcm5vciA9IE5VTEw7CisJZnJlZShwb2xpY3kpOworfQorCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICpjcHVmcmVxX2dldF9hdmFpbGFibGVfZ292ZXJub3JzKHVuc2lnbmVkCisJCQkJCQkJCWludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZ292ZXJub3JzKHN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmFueSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICp0bXAsICpuZXh0OworCisJaWYgKCFhbnkpCisJCXJldHVybjsKKworCXRtcCA9IGFueS0+Zmlyc3Q7CisJd2hpbGUgKHRtcCkgeworCQluZXh0ID0gdG1wLT5uZXh0OworCQlpZiAodG1wLT5nb3Zlcm5vcikKKwkJCWZyZWUodG1wLT5nb3Zlcm5vcik7CisJCWZyZWUodG1wKTsKKwkJdG1wID0gbmV4dDsKKwl9Cit9CisKKworc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzCisqY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9hdmFpbGFibGVfZnJlcXVlbmNpZXMoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZnJlcXVlbmNpZXMoc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzCisJCQkJKmFueSkgeworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqdG1wLCAqbmV4dDsKKworCWlmICghYW55KQorCQlyZXR1cm47CisKKwl0bXAgPSBhbnktPmZpcnN0OworCXdoaWxlICh0bXApIHsKKwkJbmV4dCA9IHRtcC0+bmV4dDsKKwkJZnJlZSh0bXApOworCQl0bXAgPSBuZXh0OworCX0KK30KKworCitzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjcHVmcmVxX2dldF9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX2FmZmVjdGVkX2NwdXMoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9hZmZlY3RlZF9jcHVzKHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmFueSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICp0bXAsICpuZXh0OworCisJaWYgKCFhbnkpCisJCXJldHVybjsKKworCXRtcCA9IGFueS0+Zmlyc3Q7CisJd2hpbGUgKHRtcCkgeworCQluZXh0ID0gdG1wLT5uZXh0OworCQlmcmVlKHRtcCk7CisJCXRtcCA9IG5leHQ7CisJfQorfQorCisKK3N0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmNwdWZyZXFfZ2V0X3JlbGF0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19nZXRfZnJlcV9yZWxhdGVkX2NwdXMoY3B1KTsKK30KKwordm9pZCBjcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMoc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqYW55KQoreworCWNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoYW55KTsKK30KKworCitpbnQgY3B1ZnJlcV9zZXRfcG9saWN5KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQoreworCWlmICghcG9saWN5IHx8ICEocG9saWN5LT5nb3Zlcm5vcikpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHN5c2ZzX3NldF9mcmVxX3BvbGljeShjcHUsIHBvbGljeSk7Cit9CisKKworaW50IGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9taW4odW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyBtaW5fZnJlcSkKK3sKKwlyZXR1cm4gc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X21pbihjcHUsIG1pbl9mcmVxKTsKK30KKworCitpbnQgY3B1ZnJlcV9tb2RpZnlfcG9saWN5X21heCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIG1heF9mcmVxKQoreworCXJldHVybiBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfbWF4KGNwdSwgbWF4X2ZyZXEpOworfQorCisKK2ludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IodW5zaWduZWQgaW50IGNwdSwgY2hhciAqZ292ZXJub3IpCit7CisJaWYgKCghZ292ZXJub3IpIHx8IChzdHJsZW4oZ292ZXJub3IpID4gMTkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfZ292ZXJub3IoY3B1LCBnb3Zlcm5vcik7Cit9CisKK2ludCBjcHVmcmVxX3NldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgbG9uZyB0YXJnZXRfZnJlcXVlbmN5KQoreworCXJldHVybiBzeXNmc19zZXRfZnJlcXVlbmN5KGNwdSwgdGFyZ2V0X2ZyZXF1ZW5jeSk7Cit9CisKK3N0cnVjdCBjcHVmcmVxX3N0YXRzICpjcHVmcmVxX2dldF9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQl1bnNpZ25lZCBsb25nIGxvbmcgKnRvdGFsX3RpbWUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9mcmVxX3N0YXRzKGNwdSwgdG90YWxfdGltZSk7Cit9CisKK3ZvaWQgY3B1ZnJlcV9wdXRfc3RhdHMoc3RydWN0IGNwdWZyZXFfc3RhdHMgKmFueSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqdG1wLCAqbmV4dDsKKworCWlmICghYW55KQorCQlyZXR1cm47CisKKwl0bXAgPSBhbnktPmZpcnN0OworCXdoaWxlICh0bXApIHsKKwkJbmV4dCA9IHRtcC0+bmV4dDsKKwkJZnJlZSh0bXApOworCQl0bXAgPSBuZXh0OworCX0KK30KKwordW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF90cmFuc2l0aW9ucyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19nZXRfZnJlcV90cmFuc2l0aW9ucyhjcHUpOworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL2NwdWZyZXEuaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9jcHVmcmVxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhZThlNwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9jcHVmcmVxLmgKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiAgY3B1ZnJlcS5oIC0gZGVmaW5pdGlvbnMgZm9yIGxpYmNwdWZyZXEKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDkgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpZm5kZWYgX0NQVUZSRVFfSAorI2RlZmluZSBfQ1BVRlJFUV9IIDEKKworc3RydWN0IGNwdWZyZXFfcG9saWN5IHsKKwl1bnNpZ25lZCBsb25nIG1pbjsKKwl1bnNpZ25lZCBsb25nIG1heDsKKwljaGFyICpnb3Zlcm5vcjsKK307CisKK3N0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgeworCWNoYXIgKmdvdmVybm9yOworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqZmlyc3Q7Cit9OworCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgeworCXVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5OworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqbmV4dDsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKmZpcnN0OworfTsKKworCitzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzIHsKKwl1bnNpZ25lZCBpbnQgY3B1OworCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqZmlyc3Q7Cit9OworCitzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyBmcmVxdWVuY3k7CisJdW5zaWduZWQgbG9uZyBsb25nIHRpbWVfaW5fc3RhdGU7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKm5leHQ7CisJc3RydWN0IGNwdWZyZXFfc3RhdHMgKmZpcnN0OworfTsKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoKKyAqIHJldHVybnMgMCBpZiB0aGUgc3BlY2lmaWVkIENQVSBpcyBwcmVzZW50IChpdCBkb2Vzbid0IHNheQorICogd2hldGhlciBpdCBpcyBvbmxpbmUhKSwgYW5kIGFuIGVycm9yIHZhbHVlIGlmIG5vdC4KKyAqLworCitleHRlcm4gaW50IGNwdWZyZXFfY3B1X2V4aXN0cyh1bnNpZ25lZCBpbnQgY3B1KTsKKworLyogZGV0ZXJtaW5lIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeQorICogLSBfa2VybmVsIHZhcmlhbnQgbWVhbnMga2VybmVsJ3Mgb3BpbmlvbiBvZiBDUFUgZnJlcXVlbmN5CisgKiAtIF9oYXJkd2FyZSB2YXJpYW50IG1lYW5zIGFjdHVhbCBoYXJkd2FyZSBDUFUgZnJlcXVlbmN5LAorICogICAgd2hpY2ggaXMgb25seSBhdmFpbGFibGUgdG8gcm9vdC4KKyAqCisgKiByZXR1cm5zIDAgb24gZmFpbHVyZSwgZWxzZSBmcmVxdWVuY3kgaW4ga0h6LgorICovCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X2ZyZXFfa2VybmVsKHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF9mcmVxX2hhcmR3YXJlKHVuc2lnbmVkIGludCBjcHUpOworCisjZGVmaW5lIGNwdWZyZXFfZ2V0KGNwdSkgY3B1ZnJlcV9nZXRfZnJlcV9rZXJuZWwoY3B1KTsKKworCisvKiBkZXRlcm1pbmUgQ1BVIHRyYW5zaXRpb24gbGF0ZW5jeQorICoKKyAqIHJldHVybnMgMCBvbiBmYWlsdXJlLCBlbHNlIHRyYW5zaXRpb24gbGF0ZW5jeSBpbiAxMF4oLTkpIHMgPSBuYW5vc2Vjb25kcworICovCitleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVmcmVxX2dldF90cmFuc2l0aW9uX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSk7CisKKworLyogZGV0ZXJtaW5lIGhhcmR3YXJlIENQVSBmcmVxdWVuY3kgbGltaXRzCisgKgorICogVGhlc2UgbWF5IGJlIGxpbWl0ZWQgZnVydGhlciBieSB0aGVybWFsLCBlbmVyZ3kgb3Igb3RoZXIKKyAqIGNvbnNpZGVyYXRpb25zIGJ5IGNwdWZyZXEgcG9saWN5IG5vdGlmaWVycyBpbiB0aGUga2VybmVsLgorICovCisKK2V4dGVybiBpbnQgY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKHVuc2lnbmVkIGludCBjcHUsCisJCQkJdW5zaWduZWQgbG9uZyAqbWluLAorCQkJCXVuc2lnbmVkIGxvbmcgKm1heCk7CisKKworLyogZGV0ZXJtaW5lIENQVWZyZXEgZHJpdmVyIHVzZWQKKyAqCisgKiBSZW1lbWJlciB0byBjYWxsIGNwdWZyZXFfcHV0X2RyaXZlciB3aGVuIG5vIGxvbmdlciBuZWVkZWQKKyAqIHRvIGF2b2lkIG1lbW9yeSBsZWFrYWdlLCBwbGVhc2UuCisgKi8KKworZXh0ZXJuIGNoYXIgKmNwdWZyZXFfZ2V0X2RyaXZlcih1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIHZvaWQgY3B1ZnJlcV9wdXRfZHJpdmVyKGNoYXIgKnB0cik7CisKKworLyogZGV0ZXJtaW5lIENQVWZyZXEgcG9saWN5IGN1cnJlbnRseSB1c2VkCisgKgorICogUmVtZW1iZXIgdG8gY2FsbCBjcHVmcmVxX3B1dF9wb2xpY3kgd2hlbiBubyBsb25nZXIgbmVlZGVkCisgKiB0byBhdm9pZCBtZW1vcnkgbGVha2FnZSwgcGxlYXNlLgorICovCisKKworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1ZnJlcV9nZXRfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gdm9pZCBjcHVmcmVxX3B1dF9wb2xpY3koc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpOworCisKKy8qIGRldGVybWluZSBDUFVmcmVxIGdvdmVybm9ycyBjdXJyZW50bHkgYXZhaWxhYmxlCisgKgorICogbWF5IGJlIG1vZGlmaWVkIGJ5IG1vZHByb2JlJ2luZyBvciBybW1vZCdpbmcgb3RoZXIgZ292ZXJub3JzLiBQbGVhc2UKKyAqIGZyZWUgYWxsb2NhdGVkIG1lbW9yeSBieSBjYWxsaW5nIGNwdWZyZXFfcHV0X2F2YWlsYWJsZV9nb3Zlcm5vcnMKKyAqIGFmdGVyIHVzZS4KKyAqLworCisKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzCisqY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2dvdmVybm9ycyh1bnNpZ25lZCBpbnQgY3B1KTsKKworZXh0ZXJuIHZvaWQgY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2dvdmVybm9ycygKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICpmaXJzdCk7CisKKworLyogZGV0ZXJtaW5lIENQVSBmcmVxdWVuY3kgc3RhdGVzIGF2YWlsYWJsZQorICoKKyAqIE9ubHkgcHJlc2VudCBvbiBfc29tZV8gLT50YXJnZXQoKSBjcHVmcmVxIGRyaXZlcnMuIEZvciBpbmZvcm1hdGlvbiBwdXJwb3NlcworICogb25seS4gUGxlYXNlIGZyZWUgYWxsb2NhdGVkIG1lbW9yeSBieSBjYWxsaW5nCisgKiBjcHVmcmVxX3B1dF9hdmFpbGFibGVfZnJlcXVlbmNpZXMgYWZ0ZXIgdXNlLgorICovCisKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMKKypjcHVmcmVxX2dldF9hdmFpbGFibGVfZnJlcXVlbmNpZXModW5zaWduZWQgaW50IGNwdSk7CisKK2V4dGVybiB2b2lkIGNwdWZyZXFfcHV0X2F2YWlsYWJsZV9mcmVxdWVuY2llcygKKwkJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICpmaXJzdCk7CisKKworLyogZGV0ZXJtaW5lIGFmZmVjdGVkIENQVXMKKyAqCisgKiBSZW1lbWJlciB0byBjYWxsIGNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMgd2hlbiBubyBsb25nZXIgbmVlZGVkCisgKiB0byBhdm9pZCBtZW1vcnkgbGVha2FnZSwgcGxlYXNlLgorICovCisKK2V4dGVybiBzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjcHVmcmVxX2dldF9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkCisJCQkJCQkJaW50IGNwdSk7CisKK2V4dGVybiB2b2lkIGNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqZmlyc3QpOworCisKKy8qIGRldGVybWluZSByZWxhdGVkIENQVXMKKyAqCisgKiBSZW1lbWJlciB0byBjYWxsIGNwdWZyZXFfcHV0X3JlbGF0ZWRfY3B1cyB3aGVuIG5vIGxvbmdlciBuZWVkZWQKKyAqIHRvIGF2b2lkIG1lbW9yeSBsZWFrYWdlLCBwbGVhc2UuCisgKi8KKworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmNwdWZyZXFfZ2V0X3JlbGF0ZWRfY3B1cyh1bnNpZ25lZAorCQkJCQkJCWludCBjcHUpOworCitleHRlcm4gdm9pZCBjcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMoc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqZmlyc3QpOworCisKKy8qIGRldGVybWluZSBzdGF0cyBmb3IgY3B1ZnJlcSBzdWJzeXN0ZW0KKyAqCisgKiBUaGlzIGlzIG5vdCBhdmFpbGFibGUgaW4gYWxsIGtlcm5lbCB2ZXJzaW9ucyBvciBjb25maWd1cmF0aW9ucy4KKyAqLworCitleHRlcm4gc3RydWN0IGNwdWZyZXFfc3RhdHMgKmNwdWZyZXFfZ2V0X3N0YXRzKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCXVuc2lnbmVkIGxvbmcgbG9uZyAqdG90YWxfdGltZSk7CisKK2V4dGVybiB2b2lkIGNwdWZyZXFfcHV0X3N0YXRzKHN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0cyk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25zKHVuc2lnbmVkIGludCBjcHUpOworCisKKy8qIHNldCBuZXcgY3B1ZnJlcSBwb2xpY3kKKyAqCisgKiBUcmllcyB0byBzZXQgdGhlIHBhc3NlZCBwb2xpY3kgYXMgbmV3IHBvbGljeSBhcyBjbG9zZSBhcyBwb3NzaWJsZSwKKyAqIGJ1dCByZXN1bHRzIG1heSBkaWZmZXIgZGVwZW5kaW5nIGUuZy4gb24gZ292ZXJub3JzIGJlaW5nIGF2YWlsYWJsZS4KKyAqLworCitleHRlcm4gaW50IGNwdWZyZXFfc2V0X3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CisKKworLyogbW9kaWZ5IGEgcG9saWN5IGJ5IG9ubHkgY2hhbmdpbmcgbWluL21heCBmcmVxIG9yIGdvdmVybm9yCisgKgorICogRG9lcyBub3QgY2hlY2sgd2hldGhlciByZXN1bHQgaXMgd2hhdCB3YXMgaW50ZW5kZWQuCisgKi8KKworZXh0ZXJuIGludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWluKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWluX2ZyZXEpOworZXh0ZXJuIGludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWF4KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWF4X2ZyZXEpOworZXh0ZXJuIGludCBjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IodW5zaWduZWQgaW50IGNwdSwgY2hhciAqZ292ZXJub3IpOworCisKKy8qIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeQorICoKKyAqIERvZXMgb25seSB3b3JrIGlmIHVzZXJzcGFjZSBnb3Zlcm5vciBjYW4gYmUgdXNlZCBhbmQgbm8gZXh0ZXJuYWwKKyAqIGludGVyZmVyZW5jZSAob3RoZXIgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBvciB0byBzZXQvbW9kaWZ5X3BvbGljeSkKKyAqIG9jY3Vycy4gQWxzbyBkb2VzIG5vdCB3b3JrIG9uIC0+cmFuZ2UoKSBjcHVmcmVxIGRyaXZlcnMuCisgKi8KKworZXh0ZXJuIGludCBjcHVmcmVxX3NldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IGNwdSwKKwkJCQl1bnNpZ25lZCBsb25nIHRhcmdldF9mcmVxdWVuY3kpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX0NQVUZSRVFfSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmMgYi90b29scy9wb3dlci9jcHVwb3dlci9saWIvc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzA3MTNhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmMKQEAgLTAsMCArMSw2NzIgQEAKKy8qCisgKiAgKEMpIDIwMDQtMjAwOSAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImNwdWZyZXEuaCIKKworI2RlZmluZSBQQVRIX1RPX0NQVSAiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvIgorI2RlZmluZSBNQVhfTElORV9MRU4gNDA5NgorI2RlZmluZSBTWVNGU19QQVRIX01BWCAyNTUKKworCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX3JlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJaW50IGZkOworCXNzaXplX3QgbnVtcmVhZDsKKworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkID09IC0xKQorCQlyZXR1cm4gMDsKKworCW51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOworCWlmIChudW1yZWFkIDwgMSkgeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKworCWJ1ZltudW1yZWFkXSA9ICdcMCc7CisJY2xvc2UoZmQpOworCisJcmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7Cit9CisKKworLyogQ1BVRlJFUSBzeXNmcyBhY2Nlc3MgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGhlbHBlciBmdW5jdGlvbiB0byByZWFkIGZpbGUgZnJvbSAvc3lzIGludG8gZ2l2ZW4gYnVmZmVyICovCisvKiBmbmFtZSBpcyBhIHJlbGF0aXZlIHBhdGggdW5kZXIgImNwdVgvY3B1ZnJlcSIgZGlyICovCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKHVuc2lnbmVkIGludCBjcHUsIGNvbnN0IGNoYXIgKmZuYW1lLAorCQkJCQkgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuKQoreworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJjcHUldS9jcHVmcmVxLyVzIiwKKwkJCSBjcHUsIGZuYW1lKTsKKwlyZXR1cm4gc3lzZnNfcmVhZF9maWxlKHBhdGgsIGJ1ZiwgYnVmbGVuKTsKK30KKworLyogaGVscGVyIGZ1bmN0aW9uIHRvIHdyaXRlIGEgbmV3IHZhbHVlIHRvIGEgL3N5cyBmaWxlICovCisvKiBmbmFtZSBpcyBhIHJlbGF0aXZlIHBhdGggdW5kZXIgImNwdVgvY3B1ZnJlcSIgZGlyICovCitzdGF0aWMgdW5zaWduZWQgaW50IHN5c2ZzX2NwdWZyZXFfd3JpdGVfZmlsZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKmZuYW1lLAorCQkJCQkgICAgIGNvbnN0IGNoYXIgKnZhbHVlLCBzaXplX3QgbGVuKQoreworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisJaW50IGZkOworCXNzaXplX3QgbnVtd3JpdGU7CisKKwlzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksIFBBVEhfVE9fQ1BVICJjcHUldS9jcHVmcmVxLyVzIiwKKwkJCSBjcHUsIGZuYW1lKTsKKworCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSk7CisJaWYgKGZkID09IC0xKQorCQlyZXR1cm4gMDsKKworCW51bXdyaXRlID0gd3JpdGUoZmQsIHZhbHVlLCBsZW4pOworCWlmIChudW13cml0ZSA8IDEpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gKHVuc2lnbmVkIGludCkgbnVtd3JpdGU7Cit9CisKKy8qIHJlYWQgYWNjZXNzIHRvIGZpbGVzIHdoaWNoIGNvbnRhaW4gb25lIG51bWVyaWMgdmFsdWUgKi8KKworZW51bSBjcHVmcmVxX3ZhbHVlIHsKKwlDUFVJTkZPX0NVUl9GUkVRLAorCUNQVUlORk9fTUlOX0ZSRVEsCisJQ1BVSU5GT19NQVhfRlJFUSwKKwlDUFVJTkZPX0xBVEVOQ1ksCisJU0NBTElOR19DVVJfRlJFUSwKKwlTQ0FMSU5HX01JTl9GUkVRLAorCVNDQUxJTkdfTUFYX0ZSRVEsCisJU1RBVFNfTlVNX1RSQU5TSVRJT05TLAorCU1BWF9DUFVGUkVRX1ZBTFVFX1JFQURfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVmcmVxX3ZhbHVlX2ZpbGVzW01BWF9DUFVGUkVRX1ZBTFVFX1JFQURfRklMRVNdID0geworCVtDUFVJTkZPX0NVUl9GUkVRXSA9ICJjcHVpbmZvX2N1cl9mcmVxIiwKKwlbQ1BVSU5GT19NSU5fRlJFUV0gPSAiY3B1aW5mb19taW5fZnJlcSIsCisJW0NQVUlORk9fTUFYX0ZSRVFdID0gImNwdWluZm9fbWF4X2ZyZXEiLAorCVtDUFVJTkZPX0xBVEVOQ1ldICA9ICJjcHVpbmZvX3RyYW5zaXRpb25fbGF0ZW5jeSIsCisJW1NDQUxJTkdfQ1VSX0ZSRVFdID0gInNjYWxpbmdfY3VyX2ZyZXEiLAorCVtTQ0FMSU5HX01JTl9GUkVRXSA9ICJzY2FsaW5nX21pbl9mcmVxIiwKKwlbU0NBTElOR19NQVhfRlJFUV0gPSAic2NhbGluZ19tYXhfZnJlcSIsCisJW1NUQVRTX05VTV9UUkFOU0lUSU9OU10gPSAic3RhdHMvdG90YWxfdHJhbnMiCit9OworCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJIGVudW0gY3B1ZnJlcV92YWx1ZSB3aGljaCkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCXVuc2lnbmVkIGludCBsZW47CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciAqZW5kcDsKKworCWlmICh3aGljaCA+PSBNQVhfQ1BVRlJFUV9WQUxVRV9SRUFEX0ZJTEVTKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKGNwdSwgY3B1ZnJlcV92YWx1ZV9maWxlc1t3aGljaF0sCisJCQkJbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKTsKKworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl2YWx1ZSA9IHN0cnRvdWwobGluZWJ1ZiwgJmVuZHAsIDApOworCisJaWYgKGVuZHAgPT0gbGluZWJ1ZiB8fCBlcnJubyA9PSBFUkFOR0UpCisJCXJldHVybiAwOworCisJcmV0dXJuIHZhbHVlOworfQorCisvKiByZWFkIGFjY2VzcyB0byBmaWxlcyB3aGljaCBjb250YWluIG9uZSBzdHJpbmcgKi8KKworZW51bSBjcHVmcmVxX3N0cmluZyB7CisJU0NBTElOR19EUklWRVIsCisJU0NBTElOR19HT1ZFUk5PUiwKKwlNQVhfQ1BVRlJFUV9TVFJJTkdfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVmcmVxX3N0cmluZ19maWxlc1tNQVhfQ1BVRlJFUV9TVFJJTkdfRklMRVNdID0geworCVtTQ0FMSU5HX0RSSVZFUl0gPSAic2NhbGluZ19kcml2ZXIiLAorCVtTQ0FMSU5HX0dPVkVSTk9SXSA9ICJzY2FsaW5nX2dvdmVybm9yIiwKK307CisKKworc3RhdGljIGNoYXIgKnN5c2ZzX2NwdWZyZXFfZ2V0X29uZV9zdHJpbmcodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJICAgZW51bSBjcHVmcmVxX3N0cmluZyB3aGljaCkKK3sKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICpyZXN1bHQ7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmICh3aGljaCA+PSBNQVhfQ1BVRlJFUV9TVFJJTkdfRklMRVMpCisJCXJldHVybiBOVUxMOworCisJbGVuID0gc3lzZnNfY3B1ZnJlcV9yZWFkX2ZpbGUoY3B1LCBjcHVmcmVxX3N0cmluZ19maWxlc1t3aGljaF0sCisJCQkJbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBOVUxMOworCisJcmVzdWx0ID0gc3RyZHVwKGxpbmVidWYpOworCWlmIChyZXN1bHQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPT0gJ1xuJykKKwkJcmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPSAnXDAnOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyogd3JpdGUgYWNjZXNzICovCisKK2VudW0gY3B1ZnJlcV93cml0ZSB7CisJV1JJVEVfU0NBTElOR19NSU5fRlJFUSwKKwlXUklURV9TQ0FMSU5HX01BWF9GUkVRLAorCVdSSVRFX1NDQUxJTkdfR09WRVJOT1IsCisJV1JJVEVfU0NBTElOR19TRVRfU1BFRUQsCisJTUFYX0NQVUZSRVFfV1JJVEVfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVmcmVxX3dyaXRlX2ZpbGVzW01BWF9DUFVGUkVRX1dSSVRFX0ZJTEVTXSA9IHsKKwlbV1JJVEVfU0NBTElOR19NSU5fRlJFUV0gPSAic2NhbGluZ19taW5fZnJlcSIsCisJW1dSSVRFX1NDQUxJTkdfTUFYX0ZSRVFdID0gInNjYWxpbmdfbWF4X2ZyZXEiLAorCVtXUklURV9TQ0FMSU5HX0dPVkVSTk9SXSA9ICJzY2FsaW5nX2dvdmVybm9yIiwKKwlbV1JJVEVfU0NBTElOR19TRVRfU1BFRURdID0gInNjYWxpbmdfc2V0c3BlZWQiLAorfTsKKworc3RhdGljIGludCBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkgZW51bSBjcHVmcmVxX3dyaXRlIHdoaWNoLAorCQkJCQkgY29uc3QgY2hhciAqbmV3X3ZhbHVlLCBzaXplX3QgbGVuKQoreworCWlmICh3aGljaCA+PSBNQVhfQ1BVRlJFUV9XUklURV9GSUxFUykKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3lzZnNfY3B1ZnJlcV93cml0ZV9maWxlKGNwdSwgY3B1ZnJlcV93cml0ZV9maWxlc1t3aGljaF0sCisJCQkJCW5ld192YWx1ZSwgbGVuKSAhPSBsZW4pCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7Cit9OworCit1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX2tlcm5lbCh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBTQ0FMSU5HX0NVUl9GUkVRKTsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV9oYXJkd2FyZSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBDUFVJTkZPX0NVUl9GUkVRKTsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV90cmFuc2l0aW9uX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgQ1BVSU5GT19MQVRFTkNZKTsKK30KKworaW50IHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlX2xpbWl0cyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqbWluLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqbWF4KQoreworCWlmICgoIW1pbikgfHwgKCFtYXgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSptaW4gPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBDUFVJTkZPX01JTl9GUkVRKTsKKwlpZiAoISptaW4pCisJCXJldHVybiAtRU5PREVWOworCisJKm1heCA9IHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIENQVUlORk9fTUFYX0ZSRVEpOworCWlmICghKm1heCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gMDsKK30KKworY2hhciAqc3lzZnNfZ2V0X2ZyZXFfZHJpdmVyKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV9zdHJpbmcoY3B1LCBTQ0FMSU5HX0RSSVZFUik7Cit9CisKK3N0cnVjdCBjcHVmcmVxX3BvbGljeSAqc3lzZnNfZ2V0X2ZyZXFfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisKKwlwb2xpY3kgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX3BvbGljeSkpOworCWlmICghcG9saWN5KQorCQlyZXR1cm4gTlVMTDsKKworCXBvbGljeS0+Z292ZXJub3IgPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfc3RyaW5nKGNwdSwgU0NBTElOR19HT1ZFUk5PUik7CisJaWYgKCFwb2xpY3ktPmdvdmVybm9yKSB7CisJCWZyZWUocG9saWN5KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXBvbGljeS0+bWluID0gc3lzZnNfY3B1ZnJlcV9nZXRfb25lX3ZhbHVlKGNwdSwgU0NBTElOR19NSU5fRlJFUSk7CisJcG9saWN5LT5tYXggPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBTQ0FMSU5HX01BWF9GUkVRKTsKKwlpZiAoKCFwb2xpY3ktPm1pbikgfHwgKCFwb2xpY3ktPm1heCkpIHsKKwkJZnJlZShwb2xpY3ktPmdvdmVybm9yKTsKKwkJZnJlZShwb2xpY3kpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gcG9saWN5OworfQorCitzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICoKK3N5c2ZzX2dldF9mcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnModW5zaWduZWQgaW50IGNwdSkgeworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKmZpcnN0ID0gTlVMTDsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZ292ZXJub3JzICpjdXJyZW50ID0gTlVMTDsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwl1bnNpZ25lZCBpbnQgcG9zLCBpOworCXVuc2lnbmVkIGludCBsZW47CisKKwlsZW4gPSBzeXNmc19jcHVmcmVxX3JlYWRfZmlsZShjcHUsICJzY2FsaW5nX2F2YWlsYWJsZV9nb3Zlcm5vcnMiLAorCQkJCWxpbmVidWYsIHNpemVvZihsaW5lYnVmKSk7CisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXBvcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChsaW5lYnVmW2ldID09ICcgJyB8fCBsaW5lYnVmW2ldID09ICdcbicpIHsKKwkJCWlmIChpIC0gcG9zIDwgMikKKwkJCQljb250aW51ZTsKKwkJCWlmIChjdXJyZW50KSB7CisJCQkJY3VycmVudC0+bmV4dCA9IG1hbGxvYyhzaXplb2YoKmN1cnJlbnQpKTsKKwkJCQlpZiAoIWN1cnJlbnQtPm5leHQpCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlmaXJzdCA9IG1hbGxvYyhzaXplb2YoKmZpcnN0KSk7CisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGZpcnN0OworCQkJfQorCQkJY3VycmVudC0+Zmlyc3QgPSBmaXJzdDsKKwkJCWN1cnJlbnQtPm5leHQgPSBOVUxMOworCisJCQljdXJyZW50LT5nb3Zlcm5vciA9IG1hbGxvYyhpIC0gcG9zICsgMSk7CisJCQlpZiAoIWN1cnJlbnQtPmdvdmVybm9yKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCisJCQltZW1jcHkoY3VycmVudC0+Z292ZXJub3IsIGxpbmVidWYgKyBwb3MsIGkgLSBwb3MpOworCQkJY3VycmVudC0+Z292ZXJub3JbaSAtIHBvc10gPSAnXDAnOworCQkJcG9zID0gaSArIDE7CisJCX0KKwl9CisKKwlyZXR1cm4gZmlyc3Q7CisKKyBlcnJvcl9vdXQ6CisJd2hpbGUgKGZpcnN0KSB7CisJCWN1cnJlbnQgPSBmaXJzdC0+bmV4dDsKKwkJaWYgKGZpcnN0LT5nb3Zlcm5vcikKKwkJCWZyZWUoZmlyc3QtPmdvdmVybm9yKTsKKwkJZnJlZShmaXJzdCk7CisJCWZpcnN0ID0gY3VycmVudDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKworc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICoKK3N5c2ZzX2dldF9hdmFpbGFibGVfZnJlcXVlbmNpZXModW5zaWduZWQgaW50IGNwdSkgeworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqZmlyc3QgPSBOVUxMOworCXN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9mcmVxdWVuY2llcyAqY3VycmVudCA9IE5VTEw7CisJY2hhciBvbmVfdmFsdWVbU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCXVuc2lnbmVkIGludCBwb3MsIGk7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWxlbiA9IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKGNwdSwgInNjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzIiwKKwkJCQlsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwb3MgPSAwOworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlpZiAobGluZWJ1ZltpXSA9PSAnICcgfHwgbGluZWJ1ZltpXSA9PSAnXG4nKSB7CisJCQlpZiAoaSAtIHBvcyA8IDIpCisJCQkJY29udGludWU7CisJCQlpZiAoaSAtIHBvcyA+PSBTWVNGU19QQVRIX01BWCkKKwkJCQlnb3RvIGVycm9yX291dDsKKwkJCWlmIChjdXJyZW50KSB7CisJCQkJY3VycmVudC0+bmV4dCA9IG1hbGxvYyhzaXplb2YoKmN1cnJlbnQpKTsKKwkJCQlpZiAoIWN1cnJlbnQtPm5leHQpCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlmaXJzdCA9IG1hbGxvYyhzaXplb2YoKmZpcnN0KSk7CisJCQkJaWYgKCFmaXJzdCkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGZpcnN0OworCQkJfQorCQkJY3VycmVudC0+Zmlyc3QgPSBmaXJzdDsKKwkJCWN1cnJlbnQtPm5leHQgPSBOVUxMOworCisJCQltZW1jcHkob25lX3ZhbHVlLCBsaW5lYnVmICsgcG9zLCBpIC0gcG9zKTsKKwkJCW9uZV92YWx1ZVtpIC0gcG9zXSA9ICdcMCc7CisJCQlpZiAoc3NjYW5mKG9uZV92YWx1ZSwgIiVsdSIsICZjdXJyZW50LT5mcmVxdWVuY3kpICE9IDEpCisJCQkJZ290byBlcnJvcl9vdXQ7CisKKwkJCXBvcyA9IGkgKyAxOworCQl9CisJfQorCisJcmV0dXJuIGZpcnN0OworCisgZXJyb3Jfb3V0OgorCXdoaWxlIChmaXJzdCkgeworCQljdXJyZW50ID0gZmlyc3QtPm5leHQ7CisJCWZyZWUoZmlyc3QpOworCQlmaXJzdCA9IGN1cnJlbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqc3lzZnNfZ2V0X2NwdV9saXN0KHVuc2lnbmVkIGludCBjcHUsCisJCQkJCQkJY29uc3QgY2hhciAqZmlsZSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpmaXJzdCA9IE5VTEw7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqY3VycmVudCA9IE5VTEw7CisJY2hhciBvbmVfdmFsdWVbU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCXVuc2lnbmVkIGludCBwb3MsIGk7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWxlbiA9IHN5c2ZzX2NwdWZyZXFfcmVhZF9maWxlKGNwdSwgZmlsZSwgbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBOVUxMOworCisJcG9zID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGkgPT0gbGVuIHx8IGxpbmVidWZbaV0gPT0gJyAnIHx8IGxpbmVidWZbaV0gPT0gJ1xuJykgeworCQkJaWYgKGkgLSBwb3MgIDwgMSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChpIC0gcG9zID49IFNZU0ZTX1BBVEhfTUFYKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJaWYgKGN1cnJlbnQpIHsKKwkJCQljdXJyZW50LT5uZXh0ID0gbWFsbG9jKHNpemVvZigqY3VycmVudCkpOworCQkJCWlmICghY3VycmVudC0+bmV4dCkKKwkJCQkJZ290byBlcnJvcl9vdXQ7CisJCQkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJCQl9IGVsc2UgeworCQkJCWZpcnN0ID0gbWFsbG9jKHNpemVvZigqZmlyc3QpKTsKKwkJCQlpZiAoIWZpcnN0KQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQljdXJyZW50ID0gZmlyc3Q7CisJCQl9CisJCQljdXJyZW50LT5maXJzdCA9IGZpcnN0OworCQkJY3VycmVudC0+bmV4dCA9IE5VTEw7CisKKwkJCW1lbWNweShvbmVfdmFsdWUsIGxpbmVidWYgKyBwb3MsIGkgLSBwb3MpOworCQkJb25lX3ZhbHVlW2kgLSBwb3NdID0gJ1wwJzsKKworCQkJaWYgKHNzY2FuZihvbmVfdmFsdWUsICIldSIsICZjdXJyZW50LT5jcHUpICE9IDEpCisJCQkJZ290byBlcnJvcl9vdXQ7CisKKwkJCXBvcyA9IGkgKyAxOworCQl9CisJfQorCisJcmV0dXJuIGZpcnN0OworCisgZXJyb3Jfb3V0OgorCXdoaWxlIChmaXJzdCkgeworCQljdXJyZW50ID0gZmlyc3QtPm5leHQ7CisJCWZyZWUoZmlyc3QpOworCQlmaXJzdCA9IGN1cnJlbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpzeXNmc19nZXRfZnJlcV9hZmZlY3RlZF9jcHVzKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2dldF9jcHVfbGlzdChjcHUsICJhZmZlY3RlZF9jcHVzIik7Cit9CisKK3N0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKnN5c2ZzX2dldF9mcmVxX3JlbGF0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXJldHVybiBzeXNmc19nZXRfY3B1X2xpc3QoY3B1LCAicmVsYXRlZF9jcHVzIik7Cit9CisKK3N0cnVjdCBjcHVmcmVxX3N0YXRzICpzeXNmc19nZXRfZnJlcV9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQl1bnNpZ25lZCBsb25nIGxvbmcgKnRvdGFsX3RpbWUpIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqZmlyc3QgPSBOVUxMOworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpjdXJyZW50ID0gTlVMTDsKKwljaGFyIG9uZV92YWx1ZVtTWVNGU19QQVRIX01BWF07CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJdW5zaWduZWQgaW50IHBvcywgaTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJbGVuID0gc3lzZnNfY3B1ZnJlcV9yZWFkX2ZpbGUoY3B1LCAic3RhdHMvdGltZV9pbl9zdGF0ZSIsCisJCQkJbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBOVUxMOworCisJKnRvdGFsX3RpbWUgPSAwOworCXBvcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmIChpID09IHN0cmxlbihsaW5lYnVmKSB8fCBsaW5lYnVmW2ldID09ICdcbicpCXsKKwkJCWlmIChpIC0gcG9zIDwgMikKKwkJCQljb250aW51ZTsKKwkJCWlmICgoaSAtIHBvcykgPj0gU1lTRlNfUEFUSF9NQVgpCisJCQkJZ290byBlcnJvcl9vdXQ7CisJCQlpZiAoY3VycmVudCkgeworCQkJCWN1cnJlbnQtPm5leHQgPSBtYWxsb2Moc2l6ZW9mKCpjdXJyZW50KSk7CisJCQkJaWYgKCFjdXJyZW50LT5uZXh0KQorCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQljdXJyZW50ID0gY3VycmVudC0+bmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJZmlyc3QgPSBtYWxsb2Moc2l6ZW9mKCpmaXJzdCkpOworCQkJCWlmICghZmlyc3QpCisJCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJCWN1cnJlbnQgPSBmaXJzdDsKKwkJCX0KKwkJCWN1cnJlbnQtPmZpcnN0ID0gZmlyc3Q7CisJCQljdXJyZW50LT5uZXh0ID0gTlVMTDsKKworCQkJbWVtY3B5KG9uZV92YWx1ZSwgbGluZWJ1ZiArIHBvcywgaSAtIHBvcyk7CisJCQlvbmVfdmFsdWVbaSAtIHBvc10gPSAnXDAnOworCQkJaWYgKHNzY2FuZihvbmVfdmFsdWUsICIlbHUgJWxsdSIsCisJCQkJCSZjdXJyZW50LT5mcmVxdWVuY3ksCisJCQkJCSZjdXJyZW50LT50aW1lX2luX3N0YXRlKSAhPSAyKQorCQkJCWdvdG8gZXJyb3Jfb3V0OworCisJCQkqdG90YWxfdGltZSA9ICp0b3RhbF90aW1lICsgY3VycmVudC0+dGltZV9pbl9zdGF0ZTsKKwkJCXBvcyA9IGkgKyAxOworCQl9CisJfQorCisJcmV0dXJuIGZpcnN0OworCisgZXJyb3Jfb3V0OgorCXdoaWxlIChmaXJzdCkgeworCQljdXJyZW50ID0gZmlyc3QtPm5leHQ7CisJCWZyZWUoZmlyc3QpOworCQlmaXJzdCA9IGN1cnJlbnQ7CisJfQorCXJldHVybiBOVUxMOworfQorCit1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25zKHVuc2lnbmVkIGludCBjcHUpCit7CisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfZ2V0X29uZV92YWx1ZShjcHUsIFNUQVRTX05VTV9UUkFOU0lUSU9OUyk7Cit9CisKK3N0YXRpYyBpbnQgdmVyaWZ5X2dvdihjaGFyICpuZXdfZ292LCBjaGFyICpwYXNzZWRfZ292KQoreworCXVuc2lnbmVkIGludCBpLCBqID0gMDsKKworCWlmICghcGFzc2VkX2dvdiB8fCAoc3RybGVuKHBhc3NlZF9nb3YpID4gMTkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cm5jcHkobmV3X2dvdiwgcGFzc2VkX2dvdiwgMjApOworCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisJCWlmIChqKSB7CisJCQluZXdfZ292W2ldID0gJ1wwJzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgobmV3X2dvdltpXSA+PSAnYScpICYmIChuZXdfZ292W2ldIDw9ICd6JykpCisJCQljb250aW51ZTsKKworCQlpZiAoKG5ld19nb3ZbaV0gPj0gJ0EnKSAmJiAobmV3X2dvdltpXSA8PSAnWicpKQorCQkJY29udGludWU7CisKKwkJaWYgKG5ld19nb3ZbaV0gPT0gJy0nKQorCQkJY29udGludWU7CisKKwkJaWYgKG5ld19nb3ZbaV0gPT0gJ18nKQorCQkJY29udGludWU7CisKKwkJaWYgKG5ld19nb3ZbaV0gPT0gJ1wwJykgeworCQkJaiA9IDE7CisJCQljb250aW51ZTsKKwkJfQorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJbmV3X2dvdlsxOV0gPSAnXDAnOworCXJldHVybiAwOworfQorCitpbnQgc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X2dvdmVybm9yKHVuc2lnbmVkIGludCBjcHUsIGNoYXIgKmdvdmVybm9yKQoreworCWNoYXIgbmV3X2dvdltTWVNGU19QQVRIX01BWF07CisKKwlpZiAoIWdvdmVybm9yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh2ZXJpZnlfZ292KG5ld19nb3YsIGdvdmVybm9yKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX0dPVkVSTk9SLAorCQkJCQkgICAgIG5ld19nb3YsIHN0cmxlbihuZXdfZ292KSk7Cit9OworCitpbnQgc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X21heCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIG1heF9mcmVxKQoreworCWNoYXIgdmFsdWVbU1lTRlNfUEFUSF9NQVhdOworCisJc25wcmludGYodmFsdWUsIFNZU0ZTX1BBVEhfTUFYLCAiJWx1IiwgbWF4X2ZyZXEpOworCisJcmV0dXJuIHN5c2ZzX2NwdWZyZXFfd3JpdGVfb25lX3ZhbHVlKGNwdSwgV1JJVEVfU0NBTElOR19NQVhfRlJFUSwKKwkJCQkJICAgICB2YWx1ZSwgc3RybGVuKHZhbHVlKSk7Cit9OworCisKK2ludCBzeXNmc19tb2RpZnlfZnJlcV9wb2xpY3lfbWluKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGxvbmcgbWluX2ZyZXEpCit7CisJY2hhciB2YWx1ZVtTWVNGU19QQVRIX01BWF07CisKKwlzbnByaW50Zih2YWx1ZSwgU1lTRlNfUEFUSF9NQVgsICIlbHUiLCBtaW5fZnJlcSk7CisKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX01JTl9GUkVRLAorCQkJCQkgICAgIHZhbHVlLCBzdHJsZW4odmFsdWUpKTsKK307CisKKworaW50IHN5c2ZzX3NldF9mcmVxX3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKK3sKKwljaGFyIG1pbltTWVNGU19QQVRIX01BWF07CisJY2hhciBtYXhbU1lTRlNfUEFUSF9NQVhdOworCWNoYXIgZ292W1NZU0ZTX1BBVEhfTUFYXTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgb2xkX21pbjsKKwlpbnQgd3JpdGVfbWF4X2ZpcnN0OworCisJaWYgKCFwb2xpY3kgfHwgIShwb2xpY3ktPmdvdmVybm9yKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocG9saWN5LT5tYXggPCBwb2xpY3ktPm1pbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmVyaWZ5X2dvdihnb3YsIHBvbGljeS0+Z292ZXJub3IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNucHJpbnRmKG1pbiwgU1lTRlNfUEFUSF9NQVgsICIlbHUiLCBwb2xpY3ktPm1pbik7CisJc25wcmludGYobWF4LCBTWVNGU19QQVRIX01BWCwgIiVsdSIsIHBvbGljeS0+bWF4KTsKKworCW9sZF9taW4gPSBzeXNmc19jcHVmcmVxX2dldF9vbmVfdmFsdWUoY3B1LCBTQ0FMSU5HX01JTl9GUkVRKTsKKwl3cml0ZV9tYXhfZmlyc3QgPSAob2xkX21pbiAmJiAocG9saWN5LT5tYXggPCBvbGRfbWluKSA/IDAgOiAxKTsKKworCWlmICh3cml0ZV9tYXhfZmlyc3QpIHsKKwkJcmV0ID0gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX01BWF9GUkVRLAorCQkJCQkJICAgIG1heCwgc3RybGVuKG1heCkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZShjcHUsIFdSSVRFX1NDQUxJTkdfTUlOX0ZSRVEsIG1pbiwKKwkJCQkJICAgIHN0cmxlbihtaW4pKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCF3cml0ZV9tYXhfZmlyc3QpIHsKKwkJcmV0ID0gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX01BWF9GUkVRLAorCQkJCQkJICAgIG1heCwgc3RybGVuKG1heCkpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gc3lzZnNfY3B1ZnJlcV93cml0ZV9vbmVfdmFsdWUoY3B1LCBXUklURV9TQ0FMSU5HX0dPVkVSTk9SLAorCQkJCQkgICAgIGdvdiwgc3RybGVuKGdvdikpOworfQorCitpbnQgc3lzZnNfc2V0X2ZyZXF1ZW5jeSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBsb25nIHRhcmdldF9mcmVxdWVuY3kpCit7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2wgPSBzeXNmc19nZXRfZnJlcV9wb2xpY3koY3B1KTsKKwljaGFyIHVzZXJzcGFjZV9nb3ZbXSA9ICJ1c2Vyc3BhY2UiOworCWNoYXIgZnJlcVtTWVNGU19QQVRIX01BWF07CisJaW50IHJldDsKKworCWlmICghcG9sKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChzdHJuY21wKHBvbC0+Z292ZXJub3IsIHVzZXJzcGFjZV9nb3YsIDkpICE9IDApIHsKKwkJcmV0ID0gc3lzZnNfbW9kaWZ5X2ZyZXFfcG9saWN5X2dvdmVybm9yKGNwdSwgdXNlcnNwYWNlX2dvdik7CisJCWlmIChyZXQpIHsKKwkJCWNwdWZyZXFfcHV0X3BvbGljeShwb2wpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWNwdWZyZXFfcHV0X3BvbGljeShwb2wpOworCisJc25wcmludGYoZnJlcSwgU1lTRlNfUEFUSF9NQVgsICIlbHUiLCB0YXJnZXRfZnJlcXVlbmN5KTsKKworCXJldHVybiBzeXNmc19jcHVmcmVxX3dyaXRlX29uZV92YWx1ZShjcHUsIFdSSVRFX1NDQUxJTkdfU0VUX1NQRUVELAorCQkJCQkgICAgIGZyZXEsIHN0cmxlbihmcmVxKSk7Cit9CisKKy8qIENQVUZSRVEgc3lzZnMgYWNjZXNzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBHZW5lcmFsIHN5c2ZzIGFjY2VzcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBzeXNmc19jcHVfZXhpc3RzKHVuc2lnbmVkIGludCBjcHUpCit7CisJY2hhciBmaWxlW1NZU0ZTX1BBVEhfTUFYXTsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworCisJc25wcmludGYoZmlsZSwgU1lTRlNfUEFUSF9NQVgsIFBBVEhfVE9fQ1BVICJjcHUldS8iLCBjcHUpOworCisJaWYgKHN0YXQoZmlsZSwgJnN0YXRidWYpICE9IDApCisJCXJldHVybiAtRU5PU1lTOworCisJcmV0dXJuIFNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSA/IDAgOiAtRU5PU1lTOworfQorCisvKiBHZW5lcmFsIHN5c2ZzIGFjY2VzcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9zeXNmcy5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbGliL3N5c2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2YTVlMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL2xpYi9zeXNmcy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qIEdlbmVyYWwgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzZnNfY3B1X2V4aXN0cyh1bnNpZ25lZCBpbnQgY3B1KTsKKworLyogQ1BVZnJlcSAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2ZyZXFfa2VybmVsKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc3lzZnNfZ2V0X2ZyZXFfaGFyZHdhcmUodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNmc19nZXRfZnJlcV90cmFuc2l0aW9uX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gaW50IHN5c2ZzX2dldF9mcmVxX2hhcmR3YXJlX2xpbWl0cyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQl1bnNpZ25lZCBsb25nICptaW4sIHVuc2lnbmVkIGxvbmcgKm1heCk7CitleHRlcm4gY2hhciAqc3lzZnNfZ2V0X2ZyZXFfZHJpdmVyKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqc3lzZnNfZ2V0X2ZyZXFfcG9saWN5KHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMgKnN5c2ZzX2dldF9mcmVxX2F2YWlsYWJsZV9nb3Zlcm5vcnMoCisJdW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzICpzeXNmc19nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKAorCXVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKnN5c2ZzX2dldF9mcmVxX2FmZmVjdGVkX2NwdXMoCisJdW5zaWduZWQgaW50IGNwdSk7CitleHRlcm4gc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqc3lzZnNfZ2V0X2ZyZXFfcmVsYXRlZF9jcHVzKAorCXVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHN0cnVjdCBjcHVmcmVxX3N0YXRzICpzeXNmc19nZXRfZnJlcV9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJdW5zaWduZWQgbG9uZyBsb25nICp0b3RhbF90aW1lKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9mcmVxX3RyYW5zaXRpb25zKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIGludCBzeXNmc19zZXRfZnJlcV9wb2xpY3kodW5zaWduZWQgaW50IGNwdSwKKwkJCQlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSk7CitleHRlcm4gaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9taW4odW5zaWduZWQgaW50IGNwdSwKKwkJCQkJdW5zaWduZWQgbG9uZyBtaW5fZnJlcSk7CitleHRlcm4gaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9tYXgodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJdW5zaWduZWQgbG9uZyBtYXhfZnJlcSk7CitleHRlcm4gaW50IHN5c2ZzX21vZGlmeV9mcmVxX3BvbGljeV9nb3Zlcm5vcih1bnNpZ25lZCBpbnQgY3B1LCBjaGFyICpnb3Zlcm5vcik7CitleHRlcm4gaW50IHN5c2ZzX3NldF9mcmVxdWVuY3kodW5zaWduZWQgaW50IGNwdSwKKwkJCXVuc2lnbmVkIGxvbmcgdGFyZ2V0X2ZyZXF1ZW5jeSk7CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItZnJlcXVlbmN5LWluZm8uMSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1mcmVxdWVuY3ktaW5mby4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOTQ4MTEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItZnJlcXVlbmN5LWluZm8uMQpAQCAtMCwwICsxLDc2IEBACisuVEggImNwdWZyZXEtaW5mbyIgIjEiICIwLjEiICJNYXR0aWEgRG9uZ2lsaSIgIiIKKy5TSCAiTkFNRSIKKy5MUCAKK2NwdWZyZXFcLWluZm8gXC0gVXRpbGl0eSB0byByZXRyaWV2ZSBjcHVmcmVxIGtlcm5lbCBpbmZvcm1hdGlvbgorLlNIICJTWU5UQVgiCisuTFAgCitjcHVmcmVxXC1pbmZvIFtcZklvcHRpb25zXGZQXQorLlNIICJERVNDUklQVElPTiIKKy5MUCAKK0Egc21hbGwgdG9vbCB3aGljaCBwcmludHMgb3V0IGNwdWZyZXEgaW5mb3JtYXRpb24gaGVscGZ1bCB0byBkZXZlbG9wZXJzIGFuZCBpbnRlcmVzdGVkIHVzZXJzLgorLlNIICJPUFRJT05TIgorLkxQIAorLlRQICAKK1xmQlwtZVxmUiBcZkJcLVwtZGVidWdcZlIKK1ByaW50cyBvdXQgZGVidWcgaW5mb3JtYXRpb24uCisuVFAgIAorXGZCXC1mXGZSIFxmQlwtXC1mcmVxXGZSCitHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZyB0byB0aGUgY3B1ZnJlcSBjb3JlLgorLlRQICAKK1xmQlwtd1xmUiBcZkJcLVwtaHdmcmVxXGZSCitHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmcgaXQgZnJvbSBoYXJkd2FyZSAob25seSBhdmFpbGFibGUgdG8gcm9vdCkuCisuVFAgIAorXGZCXC1sXGZSIFxmQlwtXC1od2xpbWl0c1xmUgorRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIENQVSBmcmVxdWVuY3kgYWxsb3dlZC4KKy5UUCAgCitcZkJcLWRcZlIgXGZCXC1cLWRyaXZlclxmUgorRGV0ZXJtaW5lcyB0aGUgdXNlZCBjcHVmcmVxIGtlcm5lbCBkcml2ZXIuCisuVFAgIAorXGZCXC1wXGZSIFxmQlwtXC1wb2xpY3lcZlIKK0dldHMgdGhlIGN1cnJlbnRseSB1c2VkIGNwdWZyZXEgcG9saWN5LgorLlRQICAKK1xmQlwtZ1xmUiBcZkJcLVwtZ292ZXJub3JzXGZSCitEZXRlcm1pbmVzIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9ycy4KKy5UUCAgCitcZkJcLWFcZlIgXGZCXC1cLXJlbGF0ZWRcLWNwdXNcZlIKK0RldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5LgorLlRQICAKK1xmQlwtYVxmUiBcZkJcLVwtYWZmZWN0ZWRcLWNwdXNcZlIKK0RldGVybWluZXMgd2hpY2ggQ1BVcyBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5IGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlLgorLlRQICAKK1xmQlwtc1xmUiBcZkJcLVwtc3RhdHNcZlIKK1Nob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGUuCisuVFAgIAorXGZCXC15XGZSIFxmQlwtXC1sYXRlbmN5XGZSCitEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSBjaGFuZ2VzLgorLlRQICAKK1xmQlwtb1xmUiBcZkJcLVwtcHJvY1xmUgorUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy9jcHVmcmVxIGludGVyZmFjZSBpbiAyLjQuIGFuZCBlYXJseSAyLjYuIGtlcm5lbHMuCisuVFAgIAorXGZCXC1tXGZSIFxmQlwtXC1odW1hblxmUgoraHVtYW5cLXJlYWRhYmxlIG91dHB1dCBmb3IgdGhlIFwtZiwgXC13LCBcLXMgYW5kIFwteSBwYXJhbWV0ZXJzLgorLlRQICAKK1xmQlwtaFxmUiBcZkJcLVwtaGVscFxmUgorUHJpbnRzIG91dCB0aGUgaGVscCBzY3JlZW4uCisuU0ggIlJFTUFSS1MiCisuTFAgCitCeSBkZWZhdWx0IG9ubHkgdmFsdWVzIG9mIGNvcmUgemVybyBhcmUgZGlzcGxheWVkLiBIb3cgdG8gZGlzcGxheSBzZXR0aW5ncyBvZgorb3RoZXIgY29yZXMgaXMgZGVzY3JpYmVkIGluIHRoZSBjcHVwb3dlcigxKSBtYW5wYWdlIGluIHRoZSBcLVwtY3B1IG9wdGlvbiBzZWN0aW9uLgorLkxQIAorWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBvZiB0aGUgb3V0cHV0IHNwZWNpZmljIG9wdGlvbnMgXC1vIFwtZSBcLWEgXC1nIFwtcCBcLWQgXC1sIFwtdyBcLWYgXC15LgorLkxQIAorWW91IGFsc28gY2FuJ3Qgc3BlY2lmeSB0aGUgXC1vIG9wdGlvbiBjb21iaW5lZCB3aXRoIHRoZSBcLWMgb3B0aW9uLgorLlNIICJGSUxFUyIKKy5uZiAKK1xmSS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY3B1ZnJlcS9cZlAgIAorXGZJL3Byb2MvY3B1ZnJlcVxmUCAoZGVwcmVjYXRlZCkgCitcZkkvcHJvYy9zeXMvY3B1L1xmUCAoZGVwcmVjYXRlZCkKKy5maSAKKy5TSCAiQVVUSE9SUyIKKy5uZgorRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPiBcLSBhdXRob3IgCitNYXR0aWEgRG9uZ2lsaTxtYWxhdHRpYUBnbWFpbC5jb20+IFwtIGZpcnN0IGF1dG9saWJ0b29saXphdGlvbgorLmZpCisuU0ggIlNFRSBBTFNPIgorLkxQIAorY3B1cG93ZXJcLWZyZXF1ZW5jeVwtc2V0KDEpLCBjcHVwb3dlcigxKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLWZyZXF1ZW5jeS1zZXQuMSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1mcmVxdWVuY3ktc2V0LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZlM2UxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1mcmVxdWVuY3ktc2V0LjEKQEAgLTAsMCArMSw1NCBAQAorLlRIICJjcHVmcmVxLXNldCIgIjEiICIwLjEiICJNYXR0aWEgRG9uZ2lsaSIgIiIKKy5TSCAiTkFNRSIKKy5MUCAKK2NwdWZyZXFcLXNldCBcLSBBIHNtYWxsIHRvb2wgd2hpY2ggYWxsb3dzIHRvIG1vZGlmeSBjcHVmcmVxIHNldHRpbmdzLgorLlNIICJTWU5UQVgiCisuTFAgCitjcHVmcmVxXC1zZXQgW1xmSW9wdGlvbnNcZlBdCisuU0ggIkRFU0NSSVBUSU9OIgorLkxQIAorY3B1ZnJlcVwtc2V0IGFsbG93cyB5b3UgdG8gbW9kaWZ5IGNwdWZyZXEgc2V0dGluZ3Mgd2l0aG91dCBoYXZpbmcgdG8gdHlwZSBlLmcuICIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUwL2NwdWZyZXEvc2NhbGluZ19zZXRfc3BlZWQiIGFsbCB0aGUgdGltZS4KKy5TSCAiT1BUSU9OUyIKKy5MUCAKKy5UUCAKK1xmQlwtZFxmUiBcZkJcLVwtbWluXGZSIDxGUkVRPgorbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5IHNlbGVjdC4KKy5UUCAKK1xmQlwtdVxmUiBcZkJcLVwtbWF4XGZSIDxGUkVRPgorbmV3IG1heGltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5IHNlbGVjdC4KKy5UUCAKK1xmQlwtZ1xmUiBcZkJcLVwtZ292ZXJub3JcZlIgPEdPVj4KK25ldyBjcHVmcmVxIGdvdmVybm9yLgorLlRQIAorXGZCXC1mXGZSIFxmQlwtXC1mcmVxXGZSIDxGUkVRPgorc3BlY2lmaWMgZnJlcXVlbmN5IHRvIGJlIHNldC4gUmVxdWlyZXMgdXNlcnNwYWNlIGdvdmVybm9yIHRvIGJlIGF2YWlsYWJsZSBhbmQgbG9hZGVkLgorLlRQIAorXGZCXC1yXGZSIFxmQlwtXC1yZWxhdGVkXGZSCittb2RpZnkgYWxsIGhhcmR3YXJlLXJlbGF0ZWQgQ1BVcyBhdCB0aGUgc2FtZSB0aW1lCisuVFAgCitcZkJcLWhcZlIgXGZCXC1cLWhlbHBcZlIKK1ByaW50cyBvdXQgdGhlIGhlbHAgc2NyZWVuLgorLlNIICJSRU1BUktTIgorLkxQIAorQnkgZGVmYXVsdCB2YWx1ZXMgYXJlIGFwcGxpZWQgb24gYWxsIGNvcmVzLiBIb3cgdG8gbW9kaWZ5IHNpbmdsZSBjb3JlCitjb25maWd1cmF0aW9ucyBpcyBkZXNjcmliZWQgaW4gdGhlIGNwdXBvd2VyKDEpIG1hbnBhZ2UgaW4gdGhlIFwtXC1jcHUgb3B0aW9uIHNlY3Rpb24uCisuTFAgCitUaGUgXC1mIEZSRVEsIFwtXC1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciBwYXJhbWV0ZXIuCisuTFAgCitGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6IGJ5IHBvc3RmaXhpbmcgdGhlIHZhbHVlIHdpdGggdGhlIHdhbnRlZCB1bml0IG5hbWUsIHdpdGhvdXQgYW55IHNwYWNlIChmcmVxdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS4KKy5MUCAKK09uIExpbnV4IGtlcm5lbHMgdXAgdG8gMi42LjI5LCB0aGUgXC1yIG9yIFwtXC1yZWxhdGVkIHBhcmFtZXRlciBpcyBpZ25vcmVkLgorLlNIICJGSUxFUyIgCisubmYKK1xmSS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY3B1ZnJlcS9cZlAgIAorXGZJL3Byb2MvY3B1ZnJlcVxmUCAoZGVwcmVjYXRlZCkgCitcZkkvcHJvYy9zeXMvY3B1L1xmUCAoZGVwcmVjYXRlZCkKKy5maSAKKy5TSCAiQVVUSE9SUyIKKy5uZiAKK0RvbWluaWsgQnJvZG93c2tpIDxsaW51eEBicm9kby5kZT4gXC0gYXV0aG9yIAorTWF0dGlhIERvbmdpbGk8bWFsYXR0aWFAZ21haWwuY29tPiBcLSBmaXJzdCBhdXRvbGlidG9vbGl6YXRpb24KKy5maQorLlNIICJTRUUgQUxTTyIKKy5MUCAKK2NwdXBvd2VyXC1mcmVxdWVuY3lcLWluZm8oMSksIGNwdXBvd2VyKDEpCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9tYW4vY3B1cG93ZXItaW5mby4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLWluZm8uMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGUyMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLWluZm8uMQpAQCAtMCwwICsxLDE5IEBACisuVEggQ1BVUE9XRVJcLUlORk8gIjEiICIyMi8wMi8yMDExIiAiIiAiY3B1cG93ZXIgTWFudWFsIgorLlNIIE5BTUUKK2NwdXBvd2VyXC1pbmZvIFwtIFNob3dzIHByb2Nlc3NvciBwb3dlciByZWxhdGVkIGtlcm5lbCBvciBoYXJkd2FyZSBjb25maWd1cmF0aW9ucworLlNIIFNZTk9QU0lTCisuZnQgQgorLkIgY3B1cG93ZXIgaW5mbyBbIFwtYiBdIFsgXC1zIF0gWyBcLW0gXQorCisuU0ggREVTQ1JJUFRJT04KK1xmQmNwdXBvd2VyIGluZm8gXGZQIHNob3dzIGtlcm5lbCBjb25maWd1cmF0aW9ucyBvciBwcm9jZXNzb3IgaGFyZHdhcmUKK3JlZ2lzdGVycyBhZmZlY3RpbmcgcHJvY2Vzc29yIHBvd2VyIHNhdmluZyBwb2xpY2llcy4KKworU29tZSBvcHRpb25zIGFyZSBwbGF0Zm9ybSB3aWRlLCBzb21lIGFmZmVjdCBzaW5nbGUgY29yZXMuIEJ5IGRlZmF1bHQgdmFsdWVzCitvZiBjb3JlIHplcm8gYXJlIGRpc3BsYXllZCBvbmx5LiBjcHVwb3dlciAtLWNwdSBhbGwgY3B1aW5mbyB3aWxsIHNob3cgdGhlCitzZXR0aW5ncyBvZiBhbGwgY29yZXMsIHNlZSBjcHVwb3dlcigxKSBob3cgdG8gY2hvb3NlIHNwZWNpZmljIGNvcmVzLgorCisuU0ggIlNFRSBBTFNPIgorT3B0aW9ucyBhcmUgZGVzY3JpYmVkIGluIGRldGFpbCBpbjoKKworY3B1cG93ZXIoMSksIGNwdXBvd2VyLXNldCgxKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLW1vbml0b3IuMSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1tb25pdG9yLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVjZmEyNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1tb25pdG9yLjEKQEAgLTAsMCArMSwxNzkgQEAKKy5USCBDUFVQT1dFUlwtTU9OSVRPUiAiMSIgIjIyLzAyLzIwMTEiICIiICJjcHVwb3dlciBNYW51YWwiCisuU0ggTkFNRQorY3B1cG93ZXJcLW1vbml0b3IgXC0gUmVwb3J0IHByb2Nlc3NvciBmcmVxdWVuY3kgYW5kIGlkbGUgc3RhdGlzdGljcworLlNIIFNZTk9QU0lTCisuZnQgQgorLkIgY3B1cG93ZXIgbW9uaXRvcgorLlJCICJcLWwiCisKKy5CIGNwdXBvd2VyIG1vbml0b3IKKy5SQiBbICJcLW0gPG1vbjE+LCIgWyAiPG1vbjI+LC4uLiIgXSBdCisuUkIgWyAiXC1pIHNlY29uZHMiIF0KKy5icgorLkIgY3B1cG93ZXIgbW9uaXRvcgorLlJCIFsgIlwtbSA8bW9uMT4sIiBbICI8bW9uMj4sLi4uIiBdIF0KKy5SQiBjb21tYW5kCisuYnIKKy5TSCBERVNDUklQVElPTgorXGZCY3B1cG93ZXItbW9uaXRvciBcZlAgcmVwb3J0cyBwcm9jZXNzb3IgdG9wb2xvZ3ksIGZyZXF1ZW5jeSBhbmQgaWRsZSBwb3dlcgorc3RhdGUgc3RhdGlzdGljcy4gRWl0aGVyIFxmQmNvbW1hbmRcZlAgaXMgZm9ya2VkIGFuZAorc3RhdGlzdGljcyBhcmUgcHJpbnRlZCB1cG9uIGl0cyBjb21wbGV0aW9uLCBvciBzdGF0aXN0aWNzIGFyZSBwcmludGVkIHBlcmlvZGljYWxseS4KKworXGZCY3B1cG93ZXItbW9uaXRvciBcZlAgaW1wbGVtZW50cyBpbmRlcGVuZGVudCBwcm9jZXNzb3Igc2xlZXAgc3RhdGUgYW5kCitmcmVxdWVuY3kgY291bnRlcnMuIFNvbWUgYXJlIHJldHJpZXZlZCBmcm9tIGtlcm5lbCBzdGF0aXN0aWNzLCBzb21lIGFyZQorZGlyZWN0bHkgcmVhZGluZyBvdXQgaGFyZHdhcmUgcmVnaXN0ZXJzLiBVc2UgXC1sIHRvIGdldCBhbiBvdmVydmlldyB3aGljaCBhcmUKK3N1cHBvcnRlZCBvbiB5b3VyIHN5c3RlbS4KKworLlNIIE9wdGlvbnMKKy5QUAorXC1sCisuUlMgNAorTGlzdCBhdmFpbGFibGUgbW9uaXRvcnMgb24geW91ciBzeXN0ZW0uIEFkZGl0aW9uYWwgZGV0YWlscyBhYm91dCBlYWNoIG1vbml0b3IKK2FyZSBzaG93bjoKKy5SUyAyCisuSVAgXChidQorVGhlIG5hbWUgaW4gcXVvdGF0aW9uIG1hcmtzIHdoaWNoIGNhbiBiZSBwYXNzZWQgdG8gdGhlIFwtbSBwYXJhbWV0ZXIuCisuSVAgXChidQorVGhlIG51bWJlciBvZiBkaWZmZXJlbnQgY291bnRlcnMgdGhlIG1vbml0b3Igc3VwcG9ydHMgaW4gYnJhY2tldHMuCisuSVAgXChidQorVGhlIGFtb3VudCBvZiB0aW1lIGluIHNlY29uZHMgdGhlIGNvdW50ZXJzIG1pZ2h0IG92ZXJmbG93LCBkdWUgdG8KK2ltcGxlbWVudGF0aW9uIGNvbnN0cmFpbnRzLgorLklQIFwoYnUKK1RoZSBuYW1lIGFuZCBhIGRlc2NyaXB0aW9uIG9mIGVhY2ggY291bnRlciBhbmQgaXRzIHByb2Nlc3NvciBoaWVyYXJjaHkgbGV2ZWwKK2NvdmVyYWdlIGluIHNxdWFyZSBicmFja2V0czoKKy5SUyA0CisuSVAgXChidQorW1RdIFwtPiBUaHJlYWQKKy5JUCBcKGJ1CitbQ10gXC0+IENvcmUKKy5JUCBcKGJ1CitbUF0gXC0+IFByb2Nlc3NvciBQYWNrYWdlIChTb2NrZXQpCisuSVAgXChidQorW01dIFwtPiBNYWNoaW5lL1BsYXRmb3JtIHdpZGUgY291bnRlcgorLlJFCisuUkUKKy5SRQorLlBQCitcLW0gPG1vbjE+LDxtb24yPiwuLi4KKy5SUyA0CitPbmx5IGRpc3BsYXkgc3BlY2lmaWMgbW9uaXRvcnMuIFVzZSB0aGUgbW9uaXRvciBzdHJpbmcocykgcHJvdmlkZWQgYnkgXC1sIG9wdGlvbi4KKy5SRQorLlBQCitcLWkgc2Vjb25kcworLlJTIDQKK01lYXN1cmUgaW50ZXJ2YWxsLgorLlJFCisuUFAKK2NvbW1hbmQKKy5SUyA0CitNZWFzdXJlIGlkbGUgYW5kIGZyZXF1ZW5jeSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYW4gYXJiaXRyYXJ5IGNvbW1hbmQvd29ya2xvYWQuCitUaGUgZXhlY3V0YWJsZSBcZkJjb21tYW5kXGZQIGlzIGZvcmtlZCBhbmQgdXBvbiBpdHMgZXhpdCwgc3RhdGlzdGljcyBnYXRoZXJlZCBzaW5jZSBpdCB3YXMKK2ZvcmtlZCBhcmUgZGlzcGxheWVkLgorLlJFCisuUFAKK1wtdgorLlJTIDQKK0luY3JlYXNlIHZlcmJvc2l0eSBpZiB0aGUgYmluYXJ5IHdhcyBjb21waWxlZCB3aXRoIHRoZSBERUJVRyBvcHRpb24gc2V0LgorLlJFCisKKy5TSCBNT05JVE9SIERFU0NSSVBUSU9OUworLlNTICJJZGxlX1N0YXRzIgorU2hvd3Mgc3RhdGlzdGljcyBvZiB0aGUgY3B1aWRsZSBrZXJuZWwgc3Vic3lzdGVtLiBWYWx1ZXMgYXJlIHJldHJpZXZlZCBmcm9tCisvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL2NwdWlkbGUvc3RhdGUqLy4KK1RoZSBrZXJuZWwgdXBkYXRlcyB0aGVzZSB2YWx1ZXMgZXZlcnkgdGltZSBhbiBpZGxlIHN0YXRlIGlzIGVudGVyZWQgb3IKK2xlZnQuIFRoZXJlZm9yZSB0aGVyZSBjYW4gYmUgc29tZSBpbmFjY3VyYWN5IHdoZW4gY29yZXMgYXJlIGluIGFuIGlkbGUKK3N0YXRlIGZvciBzb21lIHRpbWUgd2hlbiB0aGUgbWVhc3VyZSBzdGFydHMgb3IgZW5kcy4gSW4gd29yc3QgY2FzZSBpdCBjYW4gaGFwcGVuCit0aGF0IG9uZSBjb3JlIHN0YXllZCBpbiBhbiBpZGxlIHN0YXRlIGZvciB0aGUgd2hvbGUgbWVhc3VyZSB0aW1lIGFuZCB0aGUgaWRsZQorc3RhdGUgdXNhZ2UgdGltZSBhcyBleHBvcnRlZCBieSB0aGUga2VybmVsIGRpZCBub3QgZ2V0IHVwZGF0ZWQuIEluIHRoaXMgY2FzZQorYSBzdGF0ZSByZXNpZGVuY3kgb2YgMCBwZXJjZW50IGlzIHNob3duIHdoaWxlIGl0IHdhcyAxMDAuCisKKy5TUyAiTXBlcmYiCitUaGUgbmFtZSBjb21lcyBmcm9tIHRoZSBhcGVyZi9tcGVyZiAoYXZlcmFnZSBhbmQgbWF4aW11bSkgTVNSIHJlZ2lzdGVycyB1c2VkCit3aGljaCBhcmUgYXZhaWxhYmxlIG9uIHJlY2VudCBYODYgcHJvY2Vzc29ycy4gSXQgc2hvd3MgdGhlIGF2ZXJhZ2UgZnJlcXVlbmN5CisoaW5jbHVkaW5nIGJvb3N0IGZyZXF1ZW5jaWVzKS4KK1RoZSBmYWN0IHRoYXQgb24gYWxsIHJlY2VudCBoYXJkd2FyZSB0aGUgbXBlcmYgdGltZXIgc3RvcHMgdGlja2luZyBpbiBhbnkgaWRsZQorc3RhdGUgaXQgaXMgYWxzbyB1c2VkIHRvIHNob3cgQzAgKHByb2Nlc3NvciBpcyBhY3RpdmUpIGFuZCBDeCAocHJvY2Vzc29yIGlzIGluCithbnkgc2xlZXAgc3RhdGUpIHRpbWVzLiBUaGVzZSBjb3VudGVycyBkbyBub3QgaGF2ZSB0aGUgaW5hY2N1cmFjeSByZXN0cmljdGlvbnMKK3RoZSAiSWRsZV9TdGF0cyIgY291bnRlcnMgbWF5IHNob3cuCitNYXkgd29yayBwb29ybHkgb24gTGludXgtMi42LjIwIHRocm91Z2ggMi42LjI5LCBhcyB0aGUgXGZCYWNwaS1jcHVmcmVxIFxmUAora2VybmVsIGZyZXF1ZW5jeSBkcml2ZXIgcGVyaW9kaWNhbGx5IGNsZWFyZWQgYXBlcmYvbXBlcmYgcmVnaXN0ZXJzIGluIHRob3NlCitrZXJuZWxzLgorCisuU1MgIk5laGFsZW0iICJTYW5keUJyaWRnZSIKK0ludGVsIENvcmUgYW5kIFBhY2thZ2Ugc2xlZXAgc3RhdGUgY291bnRlcnMuCitUaHJlYWRzIChoeXBlcnRocmVhZGVkIGNvcmVzKSBtYXkgbm90IGJlIGFibGUgdG8gZW50ZXIgZGVlcGVyIGNvcmUgc3RhdGVzIGlmCitpdHMgc2libGluZyBpcyB1dGlsaXplZC4KK0RlZXBlc3QgcGFja2FnZSBzbGVlcCBzdGF0ZXMgbWF5IGluIHJlYWxpdHkgc2hvdyB1cCBhcyBtYWNoaW5lL3BsYXRmb3JtIHdpZGUKK3NsZWVwIHN0YXRlcyBhbmQgY2FuIG9ubHkgYmUgZW50ZXJlZCBpZiBhbGwgY29yZXMgYXJlIGlkbGUuIExvb2sgdXAgSW50ZWwKK21hbnVhbHMgKHNvbWUgYXJlIHByb3ZpZGVkIGluIHRoZSBSZWZlcmVuY2VzIHNlY3Rpb24pIGZvciBmdXJ0aGVyIGRldGFpbHMuCisKKy5TUyAiT250YXJpbyIgIkxpYW5vIgorQU1EIGxhcHRvcCBhbmQgZGVza3RvcCBwcm9jZXNzb3IgKGZhbWlseSAxMmggYW5kIDE0aCkgc2xlZXAgc3RhdGUgY291bnRlcnMuCitUaGUgcmVnaXN0ZXJzIGFyZSBhY2Nlc3NlZCB2aWEgUENJIGFuZCB0aGVyZWZvcmUgY2FuIHN0aWxsIGJlIHJlYWQgb3V0IHdoaWxlCitjb3JlcyBoYXZlIGJlZW4gb2ZmbGluZWQuCisKK1RoZXJlIGlzIG9uZSBzcGVjaWFsIGNvdW50ZXI6IE5CUDEgKE5vcnRoIEJyaWRnZSBQMSkuCitUaGlzIG9uZSBhbHdheXMgcmV0dXJucyAwIG9yIDEsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBOb3J0aCBCcmlkZ2UgUDEKK3Bvd2VyIHN0YXRlIGdvdCBlbnRlcmVkIGF0IGxlYXN0IG9uY2UgZHVyaW5nIG1lYXN1cmUgdGltZS4KK0JlaW5nIGFibGUgdG8gZW50ZXIgTkJQMSBzdGF0ZSBhbHNvIGRlcGVuZHMgb24gZ3JhcGhpY3MgcG93ZXIgbWFuYWdlbWVudC4KK1RoZXJlZm9yZSB0aGlzIGNvdW50ZXIgY2FuIGJlIHVzZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGdyYXBoaWNzJyBkcml2ZXIKK3Bvd2VyIG1hbmFnZW1lbnQgaXMgd29ya2luZyBhcyBleHBlY3RlZC4KKworLlNIIEVYQU1QTEVTCisKK2NwdXBvd2VyIG1vbml0b3IgLWwiIG1heSBzaG93OgorLlJTIDQKK01vbml0b3IgIk1wZXJmIiAoMyBzdGF0ZXMpIFwtIE1pZ2h0IG92ZXJmbG93IGFmdGVyIDkyMjAwMDAwMCBzCisKKyAgIC4uLgorCitNb25pdG9yICJJZGxlX1N0YXRzIiAoMyBzdGF0ZXMpIFwtIE1pZ2h0IG92ZXJmbG93IGFmdGVyIDQyOTQ5NjcyOTUgcworCisgICAuLi4KKworLlJFCitjcHVwb3dlciBtb25pdG9yIFwtbSAiSWRsZV9TdGF0cyxNcGVyZiIgc2NwIC90bXAvdGVzdCAvbmZzL3RtcAorCitNb25pdG9yIHRoZSBzY3AgY29tbWFuZCwgc2hvdyBib3RoIE1wZXJmIGFuZCBJZGxlX1N0YXRzIHN0YXRlcyBjb3VudGVyCitzdGF0aXN0aWNzLCBidXQgaW4gZXhjaGFuZ2VkIG9yZGVyLgorCisKKworLlJFCitCZSBjYXJlZnVsIHRoYXQgdGhlIHR5cGljYWwgY29tbWFuZCB0byBmdWxseSB1dGlsaXplIG9uZSBDUFUgYnkgZG9pbmc6CisKK2NwdXBvd2VyIG1vbml0b3IgY2F0IC9kZXYvemVybyA+L2Rldi9udWxsCisKK0RvZXMgbm90IHdvcmsgYXMgZXhwZWN0ZWQsIGJlY2F1c2UgdGhlIG1lYXN1cmVkIG91dHB1dCBpcyByZWRpcmVjdGVkIHRvCisvZGV2L251bGwuIFRoaXMgY291bGQgZ2V0IHdvcmthcm91bmRlZCBieSBwdXR0aW5nIHRoZSBsaW5lIGludG8gYW4gb3duLCB0aW55CitzaGVsbCBzY3JpcHQuIEhpdCBDVFJMXC1jIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZCBhbmQgZ2V0IHRoZSBtZWFzdXJlIG91dHB1dAorZGlzcGxheWVkLgorCisuU0ggUkVGRVJFTkNFUworIkJJT1MgYW5kIEtlcm5lbCBEZXZlbG9wZXLigJlzIEd1aWRlIChCS0RHKSBmb3IgQU1EIEZhbWlseSAxNGggUHJvY2Vzc29ycyIKK2h0dHA6Ly9zdXBwb3J0LmFtZC5jb20vdXMvUHJvY2Vzc29yX1RlY2hEb2NzLzQzMTcwLnBkZgorCisiSW50ZWzCriBUdXJibyBCb29zdCBUZWNobm9sb2d5CitpbiBJbnRlbMKuIENvcmXihKIgTWljcm9hcmNoaXRlY3R1cmUgKE5laGFsZW0pIEJhc2VkIFByb2Nlc3NvcnMiCitodHRwOi8vZG93bmxvYWQuaW50ZWwuY29tL2Rlc2lnbi9wcm9jZXNzb3IvYXBwbG5vdHMvMzIwMzU0LnBkZgorCisiSW50ZWzCriA2NCBhbmQgSUEtMzIgQXJjaGl0ZWN0dXJlcyBTb2Z0d2FyZSBEZXZlbG9wZXIncyBNYW51YWwKK1ZvbHVtZSAzQjogU3lzdGVtIFByb2dyYW1taW5nIEd1aWRlIgoraHR0cDovL3d3dy5pbnRlbC5jb20vcHJvZHVjdHMvcHJvY2Vzc29yL21hbnVhbHMKKworLlNIIEZJTEVTCisudGEKKy5uZgorL2Rldi9jcHUvKi9tc3IKKy9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY3B1aWRsZS9zdGF0ZSovLgorLmZpCisKKy5TSCAiU0VFIEFMU08iCitwb3dlcnRvcCg4KSwgbXNyKDQpLCB2bXN0YXQoOCkKKy5QUAorLlNIIEFVVEhPUlMKKy5uZgorV3JpdHRlbiBieSBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPgorCitOZWhhbGVtLCBTYW5keUJyaWRnZSBtb25pdG9ycyBhbmQgY29tbWFuZCBwYXNzaW5nCitiYXNlZCBvbiB0dXJib3N0YXQuOCBmcm9tIExlbiBCcm93biA8bGVuLmJyb3duQGludGVsLmNvbT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1zZXQuMSBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci1zZXQuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDk1NGE5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLXNldC4xCkBAIC0wLDAgKzEsMTAzIEBACisuVEggQ1BVUE9XRVJcLVNFVCAiMSIgIjIyLzAyLzIwMTEiICIiICJjcHVwb3dlciBNYW51YWwiCisuU0ggTkFNRQorY3B1cG93ZXJcLXNldCBcLSBTZXQgcHJvY2Vzc29yIHBvd2VyIHJlbGF0ZWQga2VybmVsIG9yIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb25zCisuU0ggU1lOT1BTSVMKKy5mdCBCCisuQiBjcHVwb3dlciBzZXQgWyBcLWIgVkFMIF0gWyBcLXMgVkFMIF0gWyBcLW0gVkFMIF0KKworCisuU0ggREVTQ1JJUFRJT04KK1xmQmNwdXBvd2VyIHNldCBcZlAgc2V0cyBrZXJuZWwgY29uZmlndXJhdGlvbnMgb3IgZGlyZWN0bHkgYWNjZXNzZXMgaGFyZHdhcmUKK3JlZ2lzdGVycyBhZmZlY3RpbmcgcHJvY2Vzc29yIHBvd2VyIHNhdmluZyBwb2xpY2llcy4KKworU29tZSBvcHRpb25zIGFyZSBwbGF0Zm9ybSB3aWRlLCBzb21lIGFmZmVjdCBzaW5nbGUgY29yZXMuIEJ5IGRlZmF1bHQgdmFsdWVzCithcmUgYXBwbGllZCBvbiBhbGwgY29yZXMuIEhvdyB0byBtb2RpZnkgc2luZ2xlIGNvcmUgY29uZmlndXJhdGlvbnMgaXMKK2Rlc2NyaWJlZCBpbiB0aGUgY3B1cG93ZXIoMSkgbWFucGFnZSBpbiB0aGUgXC1cLWNwdSBvcHRpb24gc2VjdGlvbi4gV2hldGhlciBhbgorb3B0aW9uIGFmZmVjdHMgdGhlIHdob2xlIHN5c3RlbSBvciBjYW4gYmUgYXBwbGllZCB0byBpbmRpdmlkdWFsIGNvcmVzIGlzCitkZXNjcmliZWQgaW4gdGhlIE9wdGlvbnMgc2VjdGlvbnMuCisKK1VzZSBcZkJjcHVwb3dlciBpbmZvIFxmUCB0byByZWFkIG91dCBjdXJyZW50IHNldHRpbmdzIGFuZCB3aGV0aGVyIHRoZXkgYXJlCitzdXBwb3J0ZWQgb24gdGhlIHN5c3RlbSBhdCBhbGwuCisKKy5TSCBPcHRpb25zCisuUFAKK1wtXC1wZXJmLWJpYXMsIFwtYgorLlJTIDQKK1NldHMgYSByZWdpc3RlciBvbiBzdXBwb3J0ZWQgSW50ZWwgcHJvY2Vzc29yZSB3aGljaCBhbGxvd3Mgc29mdHdhcmUgdG8gY29udmV5CitpdHMgcG9saWN5IGZvciB0aGUgcmVsYXRpdmUgaW1wb3J0YW5jZSBvZiBwZXJmb3JtYW5jZSB2ZXJzdXMgZW5lcmd5IHNhdmluZ3MgdG8KK3RoZSAgcHJvY2Vzc29yLgorCitUaGUgcmFuZ2Ugb2YgdmFsaWQgbnVtYmVycyBpcyAwLTE1LCB3aGVyZSAwIGlzIG1heGltdW0KK3BlcmZvcm1hbmNlIGFuZCAxNSBpcyBtYXhpbXVtIGVuZXJneSBlZmZpY2llbmN5LgorCitUaGUgcHJvY2Vzc29yIHVzZXMgdGhpcyBpbmZvcm1hdGlvbiBpbiBtb2RlbC1zcGVjaWZpYyB3YXlzCit3aGVuIGl0IG11c3Qgc2VsZWN0IHRyYWRlLW9mZnMgYmV0d2VlbiBwZXJmb3JtYW5jZSBhbmQKK2VuZXJneSBlZmZpY2llbmN5LgorCitUaGlzIHBvbGljeSBoaW50IGRvZXMgbm90IHN1cGVyc2VkZSBQcm9jZXNzb3IgUGVyZm9ybWFuY2Ugc3RhdGVzCisoUC1zdGF0ZXMpIG9yIENQVSBJZGxlIHBvd2VyIHN0YXRlcyAoQy1zdGF0ZXMpLCBidXQgYWxsb3dzCitzb2Z0d2FyZSB0byBoYXZlIGluZmx1ZW5jZSB3aGVyZSBpdCB3b3VsZCBvdGhlcndpc2UgYmUgdW5hYmxlCit0byBleHByZXNzIGEgcHJlZmVyZW5jZS4KKworRm9yIGV4YW1wbGUsIHRoaXMgc2V0dGluZyBtYXkgdGVsbCB0aGUgaGFyZHdhcmUgaG93CithZ2dyZXNzaXZlbHkgb3IgY29uc2VydmF0aXZlbHkgdG8gY29udHJvbCBmcmVxdWVuY3kKK2luIHRoZSAidHVyYm8gcmFuZ2UiIGFib3ZlIHRoZSBleHBsaWNpdGx5IE9TLWNvbnRyb2xsZWQKK1Atc3RhdGUgZnJlcXVlbmN5IHJhbmdlLiAgSXQgbWF5IGFsc28gdGVsbCB0aGUgaGFyZHdhcmUKK2hvdyBhZ2dyZXNzaXZlbHkgaXQgc2hvdWxkIGVudGVyIHRoZSBPUyByZXF1ZXN0ZWQgQy1zdGF0ZXMuCisKK1RoaXMgb3B0aW9uIGNhbiBiZSBhcHBsaWVkIHRvIGluZGl2aWR1YWwgY29yZXMgb25seSB2aWEgdGhlIFwtXC1jcHUgb3B0aW9uLAorY3B1cG93ZXIoMSkuCisKK1NldHRpbmcgdGhlIHBlcmZvcm1hbmNlIGJpYXMgdmFsdWUgb24gb25lIENQVSBjYW4gbW9kaWZ5IHRoZSBzZXR0aW5nIG9uCityZWxhdGVkIENQVXMgYXMgd2VsbCAoZm9yIGV4YW1wbGUgYWxsIENQVXMgb24gb25lIHNvY2tldCksIGJlY2F1c2Ugb2YKK2hhcmR3YXJlIHJlc3RyaWN0aW9ucy4KK1VzZSBcZkJjcHVwb3dlciAtYyBhbGwgaW5mbyAtYlxmUCB0byB2ZXJpZnkuCisKK1RoaXMgb3B0aW9ucyBuZWVkcyB0aGUgbXNyIGtlcm5lbCBkcml2ZXIgKENPTkZJR19YODZfTVNSKSBsb2FkZWQuCisuUkUKKy5QUAorXC1cLXNjaGVkXC1tYywgIFwtbSBbIFZBTCBdCisuUkUKK1wtXC1zY2hlZFwtc210LCBcLXMgWyBWQUwgXQorLlJTIDQKK1wtXC1zY2hlZFwtbWMgdXRpbGl6ZXMgY29yZXMgaW4gb25lIHByb2Nlc3NvciBwYWNrYWdlL3NvY2tldCBmaXJzdCBiZWZvcmUKK3Byb2Nlc3NlcyBhcmUgc2NoZWR1bGVkIHRvIG90aGVyIHByb2Nlc3NvciBwYWNrYWdlcy9zb2NrZXRzLgorCitcLVwtc2NoZWRcLXNtdCB1dGlsaXplcyB0aHJlYWQgc2libGluZ3Mgb2Ygb25lIHByb2Nlc3NvciBjb3JlIGZpcnN0IGJlZm9yZQorcHJvY2Vzc2VzIGFyZSBzY2hlZHVsZWQgdG8gb3RoZXIgY29yZXMuCisKK1RoZSBpbXBhY3Qgb24gcG93ZXIgY29uc3VtcHRpb24gYW5kIHBlcmZvcm1hbmNlIChwb3NpdGl2IG9yIG5lZ2F0aXYpIGhlYXZpbHkKK2RlcGVuZHMgb24gcHJvY2Vzc29yIHN1cHBvcnQgZm9yIGRlZXAgc2xlZXAgc3RhdGVzLCBmcmVxdWVuY3kgc2NhbGluZyBhbmQKK2ZyZXF1ZW5jeSBib29zdCBtb2RlcyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIGJldHdlZW4gb3RoZXIgdGhyZWFkIHNpYmxpbmdzCithbmQgcHJvY2Vzc29yIGNvcmVzLgorCitUYWtlbiBvdmVyIGZyb20ga2VybmVsIGRvY3VtZW50YXRpb246CisKK0FkanVzdCB0aGUga2VybmVsJ3MgbXVsdGktY29yZSBzY2hlZHVsZXIgc3VwcG9ydC4KKworUG9zc2libGUgdmFsdWVzIGFyZToKKy5SUyAyCiswIC0gTm8gcG93ZXIgc2F2aW5nIGxvYWQgYmFsYW5jZSAoZGVmYXVsdCB2YWx1ZSkKKworMSAtIEZpbGwgb25lIHRocmVhZC9jb3JlL3BhY2thZ2UgZmlyc3QgZm9yIGxvbmcgcnVubmluZyB0aHJlYWRzCisKKzIgLSBBbHNvIGJpYXMgdGFzayB3YWtldXBzIHRvIHNlbWktaWRsZSBjcHUgcGFja2FnZSBmb3IgcG93ZXIKK3NhdmluZ3MKKy5SRQorCitzY2hlZF9tY19wb3dlcl9zYXZpbmdzIGlzIGRlcGVuZGVudCB1cG9uIFNDSEVEX01DLCB3aGljaCBpcworaXRzZWxmIGFyY2hpdGVjdHVyZSBkZXBlbmRlbnQuCisKK3NjaGVkX3NtdF9wb3dlcl9zYXZpbmdzIGlzIGRlcGVuZGVudCB1cG9uIFNDSEVEX1NNVCwgd2hpY2gKK2lzIGl0c2VsZiBhcmNoaXRlY3R1cmUgZGVwZW5kZW50LgorCitUaGUgdHdvIGZpbGVzIGFyZSBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyLiBJdCBpcyBwb3NzaWJsZQordGhhdCBvbmUgZmlsZSBtYXkgYmUgcHJlc2VudCB3aXRob3V0IHRoZSBvdGhlci4KKworLlNIICJTRUUgQUxTTyIKK2NwdXBvd2VyLWluZm8oMSksIGNwdXBvd2VyLW1vbml0b3IoMSksIHBvd2VydG9wKDEpCisuUFAKKy5TSCBBVVRIT1JTCisubmYKK1wtXC1wZXJmXC1iaWFzIHBhcnRzIHdyaXR0ZW4gYnkgTGVuIEJyb3duIDxsZW4uYnJvd25AaW50ZWwuY29tPgorVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci4xIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvbWFuL2NwdXBvd2VyLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhjMjBmZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL21hbi9jcHVwb3dlci4xCkBAIC0wLDAgKzEsNzIgQEAKKy5USCBDUFVQT1dFUiAiMSIgIjA3LzAzLzIwMTEiICIiICJjcHVwb3dlciBNYW51YWwiCisuU0ggTkFNRQorY3B1cG93ZXIgXC0gU2hvd3MgYW5kIHNldHMgcHJvY2Vzc29yIHBvd2VyIHJlbGF0ZWQgdmFsdWVzCisuU0ggU1lOT1BTSVMKKy5mdCBCCisuQiBjcHVwb3dlciBbIFwtYyBjcHVsaXN0IF0gc3ViY29tbWFuZCBbQVJHU10KKworLkIgY3B1cG93ZXIgXC12fFwtXC12ZXJzaW9uCisKKy5CIGNwdXBvd2VyIFwtaHxcLVwtaGVscAorCisuU0ggREVTQ1JJUFRJT04KK1xmQmNwdXBvd2VyIFxmUCBpcyBhIGNvbGxlY3Rpb24gb2YgdG9vbHMgdG8gZXhhbWluZSBhbmQgdHVuZSBwb3dlciBzYXZpbmcKK3JlbGF0ZWQgZmVhdHVyZXMgb2YgeW91ciBwcm9jZXNzb3IuCisKK1RoZSBtYW5wYWdlcyBvZiB0aGUgc3ViY29tbWFuZHMgKGNwdXBvd2VyXC08c3ViY29tbWFuZD4oMSkpIHByb3ZpZGUgZGV0YWlsZWQKK2Rlc2NyaXB0aW9ucyBvZiBzdXBwb3J0ZWQgZmVhdHVyZXMuIFJ1biBcZkJjcHVwb3dlciBoZWxwXGZQIHRvIGdldCBhbiBvdmVydmlldworb2Ygc3VwcG9ydGVkIHN1YmNvbW1hbmRzLgorCisuU0ggT3B0aW9ucworLlBQCitcLVwtaGVscCwgXC1oCisuUlMgNAorU2hvd3Mgc3VwcG9ydGVkIHN1YmNvbW1hbmRzIGFuZCBnZW5lcmFsIHVzYWdlLgorLlJFCisuUFAKK1wtXC1jcHUgY3B1bGlzdCwgIFwtYyBjcHVsaXN0CisuUlMgNAorT25seSBzaG93IG9yIHNldCB2YWx1ZXMgZm9yIHNwZWNpZmljIGNvcmVzLgorVGhpcyBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbGwgc3ViY29tbWFuZHMsIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZQorbWFucGFnZXMgb2YgdGhlIHN1YmNvbW1hbmRzLgorCitTb21lIHN1YmNvbW1hbmRzIGFjY2VzcyBhbGwgY29yZXMgKHR5cGljYWxseSB0aGUgKlwtc2V0IGNvbW1hbmRzKSwgc29tZSBvbmx5Cit0aGUgZmlyc3QgY29yZSAodHlwaWNhbGx5IHRoZSAqXC1pbmZvIGNvbW1hbmRzKSBieSBkZWZhdWx0LgorCitUaGUgc3ludGF4IGZvciA8Y3B1bGlzdD4gaXMgYmFzZWQgb24gaG93IHRoZSBrZXJuZWwgZXhwb3J0cyBDUFUgYml0bWFza3MgdmlhCitzeXNmcyBmaWxlcy4gU29tZSBleGFtcGxlczoKKy5SUyA0CisuVFAgMTYKK0lucHV0CitFcXVpdmFsZW50IHRvCisuVFAKK2FsbAorYWxsIGNvcmVzCisuVFAKKzBcLTMKKzAsMSwyLDMKKy5UUAorMFwtNzoyCiswLDIsNCw2CisuVFAKKzEsMyw1LTcKKzEsMyw1LDYsNworLlRQCiswXC0zOjIsOFwtMTU6NAorMCwyLDgsMTIJCisuUkUKKy5SRQorLlBQCitcLVwtdmVyc2lvbiwgIFwtdgorLlJTIDQKK1ByaW50IHRoZSBwYWNrYWdlIG5hbWUgYW5kIHZlcnNpb24gbnVtYmVyLgorCisuU0ggIlNFRSBBTFNPIgorY3B1cG93ZXItc2V0KDEpLCBjcHVwb3dlci1pbmZvKDEpLCBjcHVwb3dlci1pZGxlKDEpLAorY3B1cG93ZXItZnJlcXVlbmN5LXNldCgxKSwgY3B1cG93ZXItZnJlcXVlbmN5LWluZm8oMSksIGNwdXBvd2VyLW1vbml0b3IoMSksCitwb3dlcnRvcCgxKQorLlBQCisuU0ggQVVUSE9SUworLm5mCitcLVwtcGVyZlwtYmlhcyBwYXJ0cyB3cml0dGVuIGJ5IExlbiBCcm93biA8bGVuLmJyb3duQGludGVsLmNvbT4KK1Rob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci9wby9jcy5wbyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL2NzLnBvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMjJjNDUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci9wby9jcy5wbwpAQCAtMCwwICsxLDk0NCBAQAorIyB0cmFuc2xhdGlvbiBvZiBjcy5wbyB0byBDemVjaAorIyBDemVjaCB0cmFuc2xhdGlvbiBmb3IgY3B1ZnJlcXV0aWxzIHBhY2thZ2UKKyMgQ3plY2ggbWVzc2FnZXMgZm9yIGNwdWZyZXF1dGlscy4KKyMgQ29weXJpZ2h0IChDKSAyMDA3IGthdm9sCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBjcHVmcmVxdXRpbHMgcGFja2FnZS4KKyMKKyMgS2FyZWwgVm9sbsO9IDxrYXZvbEBzZXpuYW0uY3o+LCAyMDA3LCAyMDA4LgorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogY3NcbiIKKyJSZXBvcnQtTXNnaWQtQnVncy1UbzogXG4iCisiUE9ULUNyZWF0aW9uLURhdGU6IDIwMTEtMDMtMDggMTc6MDMrMDEwMFxuIgorIlBPLVJldmlzaW9uLURhdGU6IDIwMDgtMDYtMTEgMTY6MjYrMDIwMFxuIgorIkxhc3QtVHJhbnNsYXRvcjogS2FyZWwgVm9sbsO9IDxrYXZvbEBzZXpuYW0uY3o+XG4iCisiTGFuZ3VhZ2UtVGVhbTogQ3plY2ggPGRpc2t1emVAbGlzdHMubDEwbi5jej5cbiIKKyJMYW5ndWFnZTogY3NcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6ICBucGx1cmFscz0zOyBwbHVyYWw9KG49PTEpID8gMCA6IChuPj0yICYmIG48PTQpID8gMSA6IDI7XG4iCisiWC1HZW5lcmF0b3I6IEtCYWJlbCAxLjExLjRcbiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6MzYKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo0MworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjUxCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTggdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjcwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6MzMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMyIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQ3Cittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjU2Cittc2dpZCAiUGFja2FnZSBpbiBzbGVlcCBzdGF0ZSAoUEMxIG9yIGRlZXBlcikiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjYzCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzEiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjc3Cittc2dpZCAiTm9ydGggQnJpZGdlIFAxIGJvb2xlYW4gY291bnRlciAocmV0dXJucyAwIG9yIDEpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6MzUKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBub3QgaWRsZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjQyCittc2dpZCAiUHJvY2Vzc29yIENvcmUgaW4gYW4gaWRsZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjUwCittc2dpZCAiQXZlcmFnZSBGcmVxdWVuY3kgKGluY2x1ZGluZyBib29zdCkgaW4gTUh6IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy12XSBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXY6IGJlIG1vcmUgdmVyYm9zZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWg6IHByaW50IHRoaXMgaGVscFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWk6IHRpbWUgaW50ZXJ2YWxsIHRvIG1lYXN1cmUgZm9yIGluIHNlY29uZHMgKGRlZmF1bHQgMSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC10OiBzaG93IENQVSB0b3BvbG9neS9oaWVyYXJjaHlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1sOiBsaXN0IGF2YWlsYWJsZSBDUFUgc2xlZXAgbW9uaXRvcnMgKGZvciB1c2Ugd2l0aCAtbSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1tOiBzaG93IHNwZWNpZmljIENQVSBzbGVlcCBtb25pdG9ycyBvbmx5IChpbiBzYW1lIG9yZGVyKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9ubHkgb25lIG9mOiAtdCwgLWwsIC1tIGFyZSBhbGxvd2VkXG4iCisiSWYgbm9uZSBvZiB0aGVtIGlzIHBhc3NlZCwiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgYWxsIHN1cHBvcnRlZCBtb25pdG9ycyBhcmUgc2hvd25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yICVzLCBDb3VudGVyICVzIGhhcyBubyBjb3VudCBmdW5jdGlvbi4gSW1wbGVtZW50YXRpb24gZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKmlzIG9mZmxpbmVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGggKCVkKSBleGNlZWRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoaW5nIG1vbml0b3IgZm91bmQgaW4gJXMsIHRyeSAtbCBvcHRpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yIFwiJXNcIiAoJWQgc3RhdGVzKSAtIE1pZ2h0IG92ZXJmbG93IGFmdGVyICV1IHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0b29rICUuNWYgc2Vjb25kcyBhbmQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbnVtYmVyIG9mIGF2YWlsYWJsZSBwcm9jZXNzb3JzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIG1vbml0b3IgJXMgbmVlZHMgcm9vdCBhY2Nlc3NcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBIVyBDc3RhdGUgbW9uaXRvcnMgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIFsgLWMgY3B1bGlzdCBdIHN1YmNvbW1hbmQgW0FSR1NdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciAtLXZlcnNpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnRlZCBzdWJjb21tYW5kcyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9vayBhdCB0aGUgZ2VuZXJhbCBjcHVwb3dlciBtYW5wYWdlIGhvdyB0byB1c2UgaXRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImFuZCByZWFkIHVwIHRoZSBzdWJjb21tYW5kJ3MgbWFucGFnZSB3aGV0aGVyIGl0IGlzIHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJVc2UgY3B1cG93ZXIgaGVscCBzdWJjb21tYW5kIGZvciBnZXR0aW5nIGhlbHAgZm9yIGFib3ZlIHN1YmNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGVycm9ycyBhbmQgYnVncyB0byAlcywgcGxlYXNlLlxuIgorbXNnc3RyICIiCisiQ2h5YnkgdiBwcm9ncmFtdSBwcm9zw61tIGhsYXN0ZSBuYSAlcyAoYW5nbGlja3kpLlxuIgorIkNoeWJ5IHYgcMWZZWtsYWR1IHByb3PDrW0gaGxhc3RlIG5hIGthdm9sQHNlem5hbS5jeiAoxI1lc2t5IDstKVxuIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBwYXJzaW5nIGNwdSBsaXN0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ViY29tbWFuZCAlcyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjb3VudCB0aGUgbnVtYmVyIG9mIENQVXMgKCVzOiAlcyksIGFzc3VtaW5nIDFcbiIKK21zZ3N0ciAiTmVsemUgemppc3RpdCBwb8SNZXQgQ1BVICglczogJXMpLCBwxZllZHBva2zDoWTDoSBzZSAxLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICAgIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICAtICBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisiICAgICAgICAgbWluaW3DoWxuw60gZnJla3ZlbmNlIENQVSAtIG1heGltw6FsbsOtIGZyZWt2ZW5jZSBDUFUgLSAgcmVndWzDoXRvclxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBCb29zdCBDYXBhYmlsaXRpZXMgb24gQ1BVICVkIC0tIGFyZSB5b3Ugcm9vdD9cbiIKK21zZ3N0ciAiIgorCisjLiBQIHN0YXRlIGNoYW5nZXMgdmlhIE1TUiBhcmUgaWRlbnRpZmllZCB2aWEgY3B1aWQgODAwMDAwMDcKKyMuIG9uIEludGVsIGFuZCBBTUQsIGJ1dCB3ZSBhc3N1bWUgYm9vc3QgY2FwYWJsZSBtYWNoaW5lcyBjYW4gZG8gdGhhdAorIy4gaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3CisjLiAmJiAoY3B1aWRfZWR4KDB4ODAwMDAwMDcpICYgKDEgPDwgNykpKQorIy4KKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGJvb3N0IHN0YXRlIHN1cHBvcnQ6IFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgU3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJ5ZXMiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgIm5vIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAgIEFjdGl2ZTogJXNcbiIKK21zZ3N0ciAiICBvdmxhZGHEjTogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBCb29zdCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTc4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBUb3RhbCBTdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTgxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUGIlZDogJWx1TUh6IChib29zdCBzdGF0ZSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QJWQ6ICAlbHVNSHpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBubyBvciB1bmtub3duIGNwdWZyZXEgZHJpdmVyIGlzIGFjdGl2ZSBvbiB0aGlzIENQVVxuIgorbXNnc3RyICIgIHBybyB0ZW50byBDUFUgbmVuw60gYWt0aXZuw60gxb7DoWRuw70gem7DoW3DvSBvdmxhZGHEjSBjcHVmcmVxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBvdmxhZGHEjTogJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjE5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeTogIgorbXNnc3RyICIgIENQVSwga3RlcsOpIG11c8OtIG3Em25pdCBmcmVrdmVuY2kgesOhcm92ZcWIOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIzMAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmU6ICIKK21zZ3N0ciAiICBDUFUsIGt0ZXLDqSBtdXPDrSBtxJtuaXQgZnJla3ZlbmNpIHrDoXJvdmXFiDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBtYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeTogIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICIgIGhhcmR3YXJlIGxpbWl0czogIgorbXNnc3RyICIgIGhhcmR3YXJvdsOpIG1lemU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGZyZXF1ZW5jeSBzdGVwczogIgorbXNnc3RyICIgIGRvc3R1cG7DqSBmcmVrdmVuY2U6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzOiAiCittc2dzdHIgIiAgZG9zdHVwbsOpIHJlZ3Vsw6F0b3J5OiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgcG9saWN5OiBmcmVxdWVuY3kgc2hvdWxkIGJlIHdpdGhpbiAiCittc2dzdHIgIiAgc291xI1hc27DoSB0YWt0aWthOiBmcmVrdmVuY2UgYnkgbcSbbGEgYsO9dCBtZXppICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiBhbmQgIgorbXNnc3RyICIgYSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGdvdmVybm9yIFwiJXNcIiBtYXkgZGVjaWRlIHdoaWNoIHNwZWVkIHRvIHVzZVxuIgorIiAgICAgICAgICAgICAgICAgIHdpdGhpbiB0aGlzIHJhbmdlLlxuIgorbXNnc3RyICIiCisiICBSZWd1bMOhdG9yIFwiJXNcIiBtxa/FvmUgcm96aG9kbm91dCBqYWtvdSBmcmVrdmVuY2kgcG91xb7DrXRcbiIKKyIgICAgICAgICAgICAgICAgICAgIHYgdMSbY2h0byBtZXrDrWNoLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IENQVSBmcmVxdWVuY3kgaXMgIgorbXNnc3RyICIgIHNvdcSNYXNuw6EgZnJla3ZlbmNlIENQVSBqZSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGFzc2VydGVkIGJ5IGNhbGwgdG8gaGFyZHdhcmUpIgorbXNnc3RyICIgICh6amnFoXTEm25vIGhhcmR3YXJvdsO9bSB2b2zDoW7DrW0pIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMDQKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjcHVmcmVxIHN0YXRzOiAiCittc2dzdHIgIiAgc3RhdGlzdGlrYSBjcHVmcmVxOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MgorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXFpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVxb5pdMOtOiBjcHVmcmVxLWluZm8gW3DFmWVww61uYcSNZV1cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDczIHV0aWxzL2NwdWZyZXEtc2V0LmM6MjYgdXRpbHMvY3B1cG93ZXItc2V0LmM6MjMKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiT3B0aW9uczpcbiIKK21zZ3N0ciAiUMWZZXDDrW5hxI1lOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLWUsIC0tZGVidWcgICAgICAgICAgUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBbZGVmYXVsdF1cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBWeXDDrcWhZSBsYWRpY8OtIGluZm9ybWFjZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBhY2NvcmRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjcHVmcmVxIGNvcmUgKlxuIgorbXNnc3RyICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBaamlzdMOtIGFrdHXDoWxuw60gZnJla3ZlbmNpLCBuYSBrdGVyw6kgQ1BVIGLEm8W+w61cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHBvZGxlIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBieSByZWFkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpdCBmcm9tIGhhcmR3YXJlIChvbmx5IGF2YWlsYWJsZSB0byByb290KSAqXG4iCittc2dzdHIgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIFpqaXN0w60gYWt0dcOhbG7DrSBmcmVrdmVuY2ksIG5hIGt0ZXLDqSBDUFUgYsSbxb7DrVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgeiBoYXJkd2FyZSAoZG9zdHVwbsOpIGplbiB1xb5pdmF0ZWxpIHJvb3QpICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICIKKyJhbGxvd2VkICpcbiIKK21zZ3N0ciAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgWmppc3TDrSBtaW5pbcOhbG7DrSBhIG1heGltw6FsbsOtIGRvc3R1cG5vdSBmcmVrdmVuY2kgQ1BVICIKKyIqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyICpcbiIKK21zZ3N0ciAiICAtZCwgLS1kcml2ZXIgICAgICAgICBaamlzdMOtIGFrdGl2bsOtIG92bGFkYcSNIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcCwgLS1wb2xpY3kgICAgICAgICBHZXRzIHRoZSBjdXJyZW50bHkgdXNlZCBjcHVmcmVxIHBvbGljeSAqXG4iCittc2dzdHIgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgWmppc3TDrSBha3R1w6FsbsOtIHRha3Rpa3UgY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nLCAtLWdvdmVybm9ycyAgICAgIERldGVybWluZXMgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzICpcbiIKK21zZ3N0ciAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBaamlzdMOtIGRvc3R1cG7DqSByZWd1bMOhdG9yeSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlICIKKyJmcmVxdWVuY3kgKlxuIgorbXNnc3RyICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBaamlzdMOtLCBrdGVyw6kgQ1BVIG11c8OtIG3Em25pdCBmcmVrdmVuY2kgesOhcm92ZcWIICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUgKlxuIgorbXNnc3RyICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBaamlzdMOtLCBrdGVyw6kgQ1BVIG11c8OtIG3Em25pdCBmcmVrdmVuY2kgesOhcm92ZcWIICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgU2hvd3MgY3B1ZnJlcSBzdGF0aXN0aWNzIGlmIGF2YWlsYWJsZVxuIgorbXNnc3RyICIgIC1zLCAtLXN0YXRzICAgICAgICAgIFpvYnJhesOtIHN0YXRpc3Rpa3UgY3B1ZnJlcSwgamUtbGkgZG9zdHVwbsOhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBsYXRlbmN5IG9uIENQVSBmcmVxdWVuY3kgIgorImNoYW5nZXMgKlxuIgorbXNnc3RyICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBaamlzdMOtIG1pbmltw6FsbsOtIGEgbWF4aW3DoWxuw60gZG9zdHVwbm91IGZyZWt2ZW5jaSBDUFUgIgorIipcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg4CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWIsIC0tYm9vc3QgICAgICAgICAgQ2hlY2tzIGZvciB0dXJibyBvciBib29zdCBtb2RlcyAgKlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJjcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gMi40LiBhbmQgZWFybHkgMi42LiBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFZ5cMOtxaFlIGluZm9ybWFjZSB2ZSBmb3Jtw6F0dSwgamFrw70gcG91xb7DrXZhbG8gcm96aHJhbsOtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAvcHJvYy9jcHVmcmVxIHYga2VybmVsZWNoIMWZYWR5IDIuNCBhIMSNYXNuw6kgMi42XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgaHVtYW4tcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgLWYsIC13LCAtcyBhbmQgLXkgIgorInBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgVsO9c3R1cCBwYXJhbWV0csWvIC1mLCAtdyBhIC1zIHYg4oCebGlkbWkgxI1pdGVsbsOpbeKAnCAiCisiZm9ybcOhdHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE1MgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICBWeXDDrcWhZSB0dXRvIG7DoXBvdsSbZHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiBubyBhcmd1bWVudCBvciBvbmx5IHRoZSAtYywgLS1jcHUgcGFyYW1ldGVyIGlzIGdpdmVuLCBkZWJ1ZyBvdXRwdXQgYWJvdXRcbiIKKyJjcHVmcmVxIGlzIHByaW50ZWQgd2hpY2ggaXMgdXNlZnVsIGUuZy4gZm9yIHJlcG9ydGluZyBidWdzLlxuIgorbXNnc3RyICIiCisiTmVuw60tbGkgemFkw6FuIMW+w6FkbsO9IHBhcmFtZXRyIG5lYm8gamUtbGkgemFkw6FuIHBvdXplIHDFmWVww61uYcSNIC1jLCAtLWNwdSwgIgorImpzb3VcbiIKKyJ2eXBzw6FueSBsYWRpY8OtIGluZm9ybWFjZSwgY2/FviBtxa/FvmUgYsO9dCB1xb5pdGXEjW7DqSBuYXDFmcOta2xhZCBwxZlpIGhsw6HFoWVuw60gY2h5Yi5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3IgdGhlIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCAqLCBvbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXNcbiIKKyJlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gemVyb1xuIgorbXNnc3RyICIiCisiTmVuw60tbGkgcMWZaSBwb3XFvml0w60gcMWZZXDDrW5hxI3FryBvem5hxI1lbsO9Y2ggKiB6YWTDoW4gcGFyYW1ldHIgLWMgbmVibyAtLWNwdSxcbiIKKyJwxZllZHBva2zDoWTDoSBzZSBqZWhvIGhvZG5vdGEgMC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgdG9vbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHBhc3NpbmcgYSAtLWNwdSAiCisiYXJndW1lbnRcbiIKK21zZ3N0ciAiWmFkYW7DvSBwYXJhbWV0ciBuZW3Fr8W+ZSBiw710IHBvdcW+aXQgesOhcm92ZcWIIHMgcMWZZXDDrW5hxI1lbSAtYyBuZWJvIC0tY3B1XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLWNwdSBwYXJhbWV0ZXIgYW5kL29yXG4iCisibW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk5lbHplIHphZGF0IHbDrWNlIG5lxb4gamVkZW4gcGFyYW1ldHIgLWMgbmVibyAtLWNwdVxuIgorImFuZWJvIHbDrWNlIG5lxb4gamVkZW4gcGFyYW1ldHIgdXLEjXVqw61jw60gdsO9c3R1cFxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MDAgdXRpbHMvY3B1ZnJlcS1zZXQuYzo4MiB1dGlscy9jcHVwb3dlci1zZXQuYzo0MgorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjQyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIKK21zZ3N0ciAibmVwbGF0bsO9IG5lYm8gbmV6bsOhbcO9IHBhcmFtZXRyXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBhbmFseXplIENQVSAlZCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudFxuIgorbXNnc3RyICJuZWx6ZSBhbmFseXpvdmF0IENQVSAlZCwgdnlwYWTDoSB0bywgxb5lIG5lbsOtIHDFmcOtdG9tZW5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjIwIHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbHl6dWppIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGZyZXF1ZW5jeS1zZXQgW29wdGlvbnNdXG4iCittc2dzdHIgIlXFvml0w606IGNwdWZyZXEtc2V0IFtwxZllcMOtbmHEjWVdXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIG5ldyBtaW5pbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBOb3bDoSBuZWpuacW+xaHDrSBmcmVrdmVuY2UsIGt0ZXJvdSBtxa/FvmUgcmVndWzDoXRvciAiCisidnlicmF0XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIG5ldyBtYXhpbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBOb3bDoSBuZWp2ecWhxaHDrSBmcmVrdmVuY2UsIGt0ZXJvdSBtxa/FvmUgcmVndWzDoXRvciAiCisienZvbGl0XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgbmV3IGNwdWZyZXEgZ292ZXJub3JcbiIKK21zZ3N0ciAiICAtZyBHT1YsIC0tZ292ZXJub3JzIEdPViAgTm92w70gcmVndWzDoXRvciBjcHVmcmVxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljIGZyZXF1ZW5jeSB0byBiZSBzZXQuIFJlcXVpcmVzIHVzZXJzcGFjZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdmVybm9yIHRvIGJlIGF2YWlsYWJsZSBhbmQgbG9hZGVkXG4iCittc2dzdHIgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBGcmVrdmVuY2UsIGt0ZXLDoSBtw6EgYsO9dCBuYXN0YXZlbmEuIFZ5xb5hZHVqZSwgYWJ5ICIKKyJieWxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICB2IGrDoWTFmWUgbmFocsOhbiByZWd1bMOhdG9yIOKAmnVzZXJzcGFjZeKAmC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBTd2l0Y2hlcyBhbGwgaGFyZHdhcmUtcmVsYXRlZCBDUFVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMyB1dGlscy9jcHVwb3dlci1zZXQuYzoyOCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIKK21zZ3N0ciAiICAtaCwgLS1oZWxwICAgICAgICAgICBWeXDDrcWhZSB0dXRvIG7DoXBvdsSbZHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGVzOlxuIgorIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIgorbXNnc3RyICIiCisiTmVuw60tbGkgcMWZaSBwb3XFvml0w60gcMWZZXDDrW5hxI3FryBvem5hxI1lbsO9Y2ggKiB6YWTDoW4gcGFyYW1ldHIgLWMgbmVibyAtLWNwdSxcbiIKKyJwxZllZHBva2zDoWTDoSBzZSBqZWhvIGhvZG5vdGEgMC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIjIuIFRoZSAtZiBGUkVRLCAtLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyICIKKyJwYXJhbWV0ZXJcbiIKKyIgICBleGNlcHQgdGhlIC1jIENQVSwgLS1jcHUgQ1BVIHBhcmFtZXRlclxuIgorIjMuIEZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHpcbiIKKyIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorIiAgIChGUkVRdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKK21zZ3N0ciAiIgorIlBvem7DoW1reTpcbiIKKyIxLiBWeW5lY2jDoW7DrSBwYXJhbWV0cnUgLWMgbmVibyAtLWNwdSBqZSBla3ZpdmFsZW50bsOtIGplaG8gbmFzdGF2ZW7DrSBuYSAwXG4iCisiMi4gUMWZZXDDrW5hxI0gLWYgbmVibyAtLWZyZXEgbmVtxa/FvmUgYsO9dCBwb3XFvml0IHrDoXJvdmXFiCBzIMW+w6FkbsO9bSBqaW7DvW0gdnlqbWEgLSIKKyJjXG4iCisiICAgbmVibyAtLWNwdVxuIgorIjMuIEZyZWt2ZW5jZSAoRlJFUSkgbW9ob3UgYsO9dCB6YWTDoW55IHYgSHosIGtIeiAodsO9Y2hvesOtKSwgTUh6LCBHSHogbmVibyBUSHpcbiIKKyIgICBwxZlpcG9qZW7DrW0gbsOhenZ1IGplZG5vdGt5IGJleiBtZXplcnkgbWV6aSDEjcOtc2xlbSBhIGplZG5vdGtvdVxuIgorIiAgIChGUkVRIHYga0h6ID1eIEh6ICogMCwwMDEgPSBeIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMClcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3Igc2V0dGluZyBuZXcgdmFsdWVzLiBDb21tb24gZXJyb3JzOlxuIgorIi0gRG8geW91IGhhdmUgcHJvcGVyIGFkbWluaXN0cmF0aW9uIHJpZ2h0cz8gKHN1cGVyLXVzZXI/KVxuIgorIi0gSXMgdGhlIGdvdmVybm9yIHlvdSByZXF1ZXN0ZWQgYXZhaWxhYmxlIGFuZCBtb2Rwcm9iZWQ/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGFuIGludmFsaWQgcG9saWN5P1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeSwgYnV0IHVzZXJzcGFjZSBnb3Zlcm5vciBpcyBub3QgIgorImF2YWlsYWJsZSxcbiIKKyIgICBmb3IgZXhhbXBsZSBiZWNhdXNlIG9mIGhhcmR3YXJlIHdoaWNoIGNhbm5vdCBiZSBzZXQgdG8gYSBzcGVjaWZpYyAiCisiZnJlcXVlbmN5XG4iCisiICAgb3IgYmVjYXVzZSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yIGlzbid0IGxvYWRlZD9cbiIKK21zZ3N0ciAiIgorIkNoeWJhIHDFmWkgbmFzdGF2b3bDoW7DrSBub3bDvWNoIGhvZG5vdC4gT2J2eWtsw6kgcHJvYmzDqW15OlxuIgorIi0gTcOhdGUgcGF0xZlpxI1uw6EgYWRtaW5pc3Ryw6F0b3Jza8OhIHByw6F2YT8gKHJvb3Q/KVxuIgorIi0gSmUgcG/FvmFkb3ZhbsO9IHJlZ3Vsw6F0b3IgZG9zdHVwbsO9IHYgasOhZMWZZT8gKG1vZHByb2JlPylcbiIKKyItIFNuYcW+w610ZSBzZSBuYXN0YXZpdCBuZXBsYXRub3UgdGFrdGlrdT9cbiIKKyItIFNuYcW+w610ZSBzZSBuYXN0YXZpdCB1csSNaXRvdSBmcmVrdmVuY2ksIGFsZSBuZW7DrSBkb3N0dXBuw71cbiIKKyIgIHJlZ3Vsw6F0b3Ig4oCadXNlcnNwYWNl4oCYLCBuYXDFmcOta2xhZCBwcm90b8W+ZSBuZW7DrSBuYWhyw6FuIHYgasOhZMWZZSxcbiIKKyIgIG5lYm8gbmVsemUgbmEgdG9tdG8gaGFyZHdhcmUgbmFzdGF2aXQgdXLEjWl0b3UgZnJla3ZlbmNpP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZywgdW5rbm93biBvciB1bmhhbmRsZWQgQ1BVP1xuIgorbXNnc3RyICJuZXpuw6Ftw70gbmVibyBuZXBvZHBvcm92YW7DvSBDUFU/XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAyCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJ0aGUgLWYvLS1mcmVxIHBhcmFtZXRlciBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCAtZC8tLW1pbiwgLXUvLS1tYXggb3JcbiIKKyItZy8tLWdvdmVybm9yIHBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorInDFmWVww61uYcSNIC1mLy0tZnJlcSBuZW3Fr8W+ZSBiw710IHBvdcW+aXQgesOhcm92ZcWIXG4iCisicyBwxZllcMOtbmHEjWVtIC1kLy0tbWluLCAtdS8tLW1heCBuZWJvIC1nLy0tZ292ZXJub3JcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKyItZy8tLWdvdmVybm9yIG11c3QgYmUgcGFzc2VkXG4iCittc2dzdHIgIiIKKyJNdXPDrSBiw710IHphZMOhbiBhbGVzcG/FiCBqZWRlbiBwxZllcMOtbmHEjVxuIgorIi1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4IG5lYm8gLWcvLS1nb3Zlcm5vclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGNwdTogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgc2V0IFsgLWIgdmFsIF0gWyAtbSB2YWwgXSBbIC1zIHZhbCBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzIFtWQUxdICAgIFNldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLXNjaGVkLW1jICBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210IFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciAiCisicG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tcGVyZi1iaWFzIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLW1jIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1zbXQgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLW1jICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtc210ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgcGVyZi1iaWFzIHZhbHVlIG9uIENQVSAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaW5mbyBbIC1iIF0gWyAtbSBdIFsgLXMgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgICAgR2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1tLCAtLXNjaGVkLW1jICAgICBHZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgWmppc3TDrSBha3R1w6FsbsOtIHRha3Rpa3UgY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgICAgR2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlBhc3Npbmcgbm8gb3B0aW9uIHdpbGwgc2hvdyBhbGwgaW5mbywgYnkgZGVmYXVsdCBvbmx5IG9uIGNvcmUgMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyMuIGlmIHN5c2ZzIGZpbGUgaXMgbWlzc2luZyBpdCdzOiBlcnJubyA9PSBFTk9FTlQKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMDUgdXRpbHMvY3B1cG93ZXItaW5mby5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJub3Qgc3VwcG9ydGVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjExMQorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgc2V0dGluZzogIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmcgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZ1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IHJlYWQgcGVyZi1iaWFzIHZhbHVlXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE1MAorIywgYy1mb3JtYXQKK21zZ2lkICJwZXJmLWJpYXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWx5enVqaSBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogTm8gaWRsZSBzdGF0ZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgaWRsZSBzdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBtYXggaWRsZSBzdGF0ZSAldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk51bWJlciBvZiBpZGxlIHN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGlkbGUgc3RhdGVzOiIKK21zZ3N0ciAiICBkb3N0dXBuw6kgZnJla3ZlbmNlOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzL0Rlc2NyaXB0aW9uOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhdGVuY3k6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJEdXJhdGlvbjogJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBkcml2ZXJcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgb3ZsYWRhxI06ICVzXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGdvdmVybm9yOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgQy1zdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIy4gcHJpbnRmKCJDc3RhdGVzOiAlZFxuIiwgY3N0YXRlcyk7CisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWN0aXZlIHN0YXRlOiAgICAgICAgICAgIEMwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1heF9jc3RhdGU6ICAgICAgICAgICAgICBDJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF4aW11bSBhbGxvd2VkIGxhdGVuY3k6ICVsdSB1c2VjXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXRlczpcdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQyVkOiAgICAgICAgICAgICAgICAgIHR5cGVbQyVkXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21vdGlvblstLV0gZGVtb3Rpb25bLS1dICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGF0ZW5jeVslMDNsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZVslMDhsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXJhdGlvblslMDIwTHVdIFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGlkbGVpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVxb5pdMOtOiBjcHVmcmVxLWluZm8gW3DFmWVww61uYcSNZV1cbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXNpbGVudCAgICAgICAgIE9ubHkgc2hvdyBnZW5lcmFsIEMtc3RhdGUgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBWeXDDrcWhZSBsYWRpY8OtIGluZm9ybWFjZVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImFjcGkvcHJvY2Vzc29yLyovcG93ZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiBvbGRlciBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFZ5cMOtxaFlIGluZm9ybWFjZSB2ZSBmb3Jtw6F0dSwgamFrw70gcG91xb7DrXZhbG8gcm96aHJhbsOtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAvcHJvYy9jcHVmcmVxIHYga2VybmVsZWNoIMWZYWR5IDIuNCBhIMSNYXNuw6kgMi42XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjIwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk5lbHplIHphZGF0IHbDrWNlIG5lxb4gamVkZW4gcGFyYW1ldHIgLWMgbmVibyAtLWNwdVxuIgorImFuZWJvIHbDrWNlIG5lxb4gamVkZW4gcGFyYW1ldHIgdXLEjXVqw61jw60gdsO9c3R1cFxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgQ1BVIG51bWJlciB3aGljaCBpbmZvcm1hdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkICIKKyN+ICJhYm91dFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICDEjMOtc2xvIENQVSwgbyBrdGVyw6ltIHNlIG1hasOtIHpqaXN0aXQgaW5mb3JtYWNlXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgbnVtYmVyIG9mIENQVSB3aGVyZSBjcHVmcmVxIHNldHRpbmdzIHNoYWxsIGJlICIKKyN+ICJtb2RpZmllZFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgxIzDrXNsbyBDUFUgcHJvIGt0ZXLDvSBzZSBtw6EgcHJvdsOpc3QgbmFzdGF2ZW7DrSAiCisjfiAiY3B1ZnJlcVxuIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vZGUucG8gYi90b29scy9wb3dlci9jcHVwb3dlci9wby9kZS5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGMwOWU1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vZGUucG8KQEAgLTAsMCArMSw5NjEgQEAKKyMgR2VybWFuIHRyYW5zbGF0aW9ucyBmb3IgY3B1ZnJlcXV0aWxzIHBhY2thZ2UKKyMgR2VybWFuIG1lc3NhZ2VzIGZvciBjcHVmcmVxdXRpbHMuCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLm5ldD4KKyMgVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgYXMgdGhlIGNwdWZyZXF1dGlscyBwYWNrYWdlLgorIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogY3B1ZnJlcXV0aWxzIDAwNlxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wMy0wOCAxNzowMyswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOS0wOC0wOCAxNzoxOCswMTAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiAgPGxpbnV4QGRvbWluaWticm9kb3dza2kubmV0PlxuIgorIkxhbmd1YWdlLVRlYW06IE5PTkVcbiIKKyJMYW5ndWFnZTogXG4iCisiTUlNRS1WZXJzaW9uOiAxLjBcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9SVNPLTg4NTktMVxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKyJQbHVyYWwtRm9ybXM6IG5wbHVyYWxzPTI7IHBsdXJhbD0obiAhPSAxKTtcbiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6MzYKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo0MworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjUxCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTggdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjcwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6MzMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMyIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQ3Cittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjU2Cittc2dpZCAiUGFja2FnZSBpbiBzbGVlcCBzdGF0ZSAoUEMxIG9yIGRlZXBlcikiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjYzCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzEiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjc3Cittc2dpZCAiTm9ydGggQnJpZGdlIFAxIGJvb2xlYW4gY291bnRlciAocmV0dXJucyAwIG9yIDEpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6MzUKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBub3QgaWRsZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjQyCittc2dpZCAiUHJvY2Vzc29yIENvcmUgaW4gYW4gaWRsZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjUwCittc2dpZCAiQXZlcmFnZSBGcmVxdWVuY3kgKGluY2x1ZGluZyBib29zdCkgaW4gTUh6IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy12XSBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXY6IGJlIG1vcmUgdmVyYm9zZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWg6IHByaW50IHRoaXMgaGVscFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWk6IHRpbWUgaW50ZXJ2YWxsIHRvIG1lYXN1cmUgZm9yIGluIHNlY29uZHMgKGRlZmF1bHQgMSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC10OiBzaG93IENQVSB0b3BvbG9neS9oaWVyYXJjaHlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1sOiBsaXN0IGF2YWlsYWJsZSBDUFUgc2xlZXAgbW9uaXRvcnMgKGZvciB1c2Ugd2l0aCAtbSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1tOiBzaG93IHNwZWNpZmljIENQVSBzbGVlcCBtb25pdG9ycyBvbmx5IChpbiBzYW1lIG9yZGVyKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9ubHkgb25lIG9mOiAtdCwgLWwsIC1tIGFyZSBhbGxvd2VkXG4iCisiSWYgbm9uZSBvZiB0aGVtIGlzIHBhc3NlZCwiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgYWxsIHN1cHBvcnRlZCBtb25pdG9ycyBhcmUgc2hvd25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yICVzLCBDb3VudGVyICVzIGhhcyBubyBjb3VudCBmdW5jdGlvbi4gSW1wbGVtZW50YXRpb24gZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKmlzIG9mZmxpbmVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGggKCVkKSBleGNlZWRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoaW5nIG1vbml0b3IgZm91bmQgaW4gJXMsIHRyeSAtbCBvcHRpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yIFwiJXNcIiAoJWQgc3RhdGVzKSAtIE1pZ2h0IG92ZXJmbG93IGFmdGVyICV1IHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0b29rICUuNWYgc2Vjb25kcyBhbmQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbnVtYmVyIG9mIGF2YWlsYWJsZSBwcm9jZXNzb3JzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIG1vbml0b3IgJXMgbmVlZHMgcm9vdCBhY2Nlc3NcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBIVyBDc3RhdGUgbW9uaXRvcnMgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIFsgLWMgY3B1bGlzdCBdIHN1YmNvbW1hbmQgW0FSR1NdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciAtLXZlcnNpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnRlZCBzdWJjb21tYW5kcyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9vayBhdCB0aGUgZ2VuZXJhbCBjcHVwb3dlciBtYW5wYWdlIGhvdyB0byB1c2UgaXRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImFuZCByZWFkIHVwIHRoZSBzdWJjb21tYW5kJ3MgbWFucGFnZSB3aGV0aGVyIGl0IGlzIHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJVc2UgY3B1cG93ZXIgaGVscCBzdWJjb21tYW5kIGZvciBnZXR0aW5nIGhlbHAgZm9yIGFib3ZlIHN1YmNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGVycm9ycyBhbmQgYnVncyB0byAlcywgcGxlYXNlLlxuIgorbXNnc3RyICJCaXR0ZSBtZWxkZW4gU2llIEZlaGxlciBhbiAlcy5cbiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcGFyc2luZyBjcHUgbGlzdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1YmNvbW1hbmQgJXMgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY291bnQgdGhlIG51bWJlciBvZiBDUFVzICglczogJXMpLCBhc3N1bWluZyAxXG4iCittc2dzdHIgIiIKKyJLb25udGUgbmljaHQgZGllIEFuemFobCBkZXIgQ1BVcyBoZXJhdXNmaW5kZW4gKCVzIDogJXMpLCBuZWhtZSBkYWhlciAxIGFuLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICAgIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICAtICBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisiICAgICAgICAgIG1pbmltYWxlIENQVS1UYWt0ZnJlcS4gLSAgbWF4aW1hbGUgQ1BVLVRha3RmcmVxLiAtICBSZWdsZXIgIFxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBCb29zdCBDYXBhYmlsaXRpZXMgb24gQ1BVICVkIC0tIGFyZSB5b3Ugcm9vdD9cbiIKK21zZ3N0ciAiIgorCisjLiBQIHN0YXRlIGNoYW5nZXMgdmlhIE1TUiBhcmUgaWRlbnRpZmllZCB2aWEgY3B1aWQgODAwMDAwMDcKKyMuIG9uIEludGVsIGFuZCBBTUQsIGJ1dCB3ZSBhc3N1bWUgYm9vc3QgY2FwYWJsZSBtYWNoaW5lcyBjYW4gZG8gdGhhdAorIy4gaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3CisjLiAmJiAoY3B1aWRfZWR4KDB4ODAwMDAwMDcpICYgKDEgPDwgNykpKQorIy4KKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGJvb3N0IHN0YXRlIHN1cHBvcnQ6IFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgU3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJ5ZXMiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgIm5vIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAgIEFjdGl2ZTogJXNcbiIKK21zZ3N0ciAiICBUcmVpYmVyOiAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEJvb3N0IFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFRvdGFsIFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QYiVkOiAlbHVNSHogKGJvb3N0IHN0YXRlKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVAlZDogICVsdU1IelxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG5vIG9yIHVua25vd24gY3B1ZnJlcSBkcml2ZXIgaXMgYWN0aXZlIG9uIHRoaXMgQ1BVXG4iCittc2dzdHIgIiAga2VpbiBvZGVyIG5pY2h0IGJlc3RpbW1iYXJlciBjcHVmcmVxLVRyZWliZXIgYWt0aXZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIFRyZWliZXI6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeTogIgorbXNnc3RyICIgIEZvbGdlbmRlIENQVXMgbGF1ZmVuIG1pdCBkZXIgZ2xlaWNoZW4gSGFyZHdhcmUtVGFrdGZyZXF1ZW56OiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeSBjb29yZGluYXRlZCBieSBzb2Z0d2FyZTogIgorbXNnc3RyICIgIERpZSBUYWt0ZnJlcXVlbnogZm9sZ2VuZGVyIENQVXMgd2VyZGVuIHBlciBTb2Z0d2FyZSBrb29yZGluaWVydDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBtYXhpbXVtIHRyYW5zaXRpb24gbGF0ZW5jeTogIgorbXNnc3RyICIgIE1heGltYWxlIERhdWVyIGVpbmVzIFRha3RmcmVxdWVuendlY2hzZWxzOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI0NworIywgYy1mb3JtYXQKK21zZ2lkICIgIGhhcmR3YXJlIGxpbWl0czogIgorbXNnc3RyICIgIEhhcmR3YXJlYmVkaW5ndGUgR3JlbnplbiBkZXIgVGFrdGZyZXF1ZW56OiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBmcmVxdWVuY3kgc3RlcHM6ICIKK21zZ3N0ciAiICBt9mdsaWNoZSBUYWt0ZnJlcXVlbnplbjogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnM6ICIKK21zZ3N0ciAiICBt9mdsaWNoZSBSZWdsZXI6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBwb2xpY3k6IGZyZXF1ZW5jeSBzaG91bGQgYmUgd2l0aGluICIKK21zZ3N0ciAiICBtb21lbnRhbmUgVGFrdGlrOiBkaWUgRnJlcXVlbnogc29sbCBpbm5lcmhhbGIgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFuZCAiCittc2dzdHIgIiB1bmQgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBnb3Zlcm5vciBcIiVzXCIgbWF5IGRlY2lkZSB3aGljaCBzcGVlZCB0byB1c2VcbiIKKyIgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhpcyByYW5nZS5cbiIKK21zZ3N0ciAiIgorIiAgbGllZ2VuLiBEZXIgUmVnbGVyIFwiJXNcIiBrYW5uIGZyZWkgZW50c2NoZWlkZW4sXG4iCisiICAgICAgICAgICAgICAgICAgICB3ZWxjaGUgVGFrdGZyZXF1ZW56IGlubmVyaGFsYiBkaWVzZXIgR3JlbnplIHZlcndlbmRldCAiCisid2lyZC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjkzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBDUFUgZnJlcXVlbmN5IGlzICIKK21zZ3N0ciAiICBtb21lbnRhbmUgVGFrdGZyZXF1ZW56IGlzdCAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGFzc2VydGVkIGJ5IGNhbGwgdG8gaGFyZHdhcmUpIgorbXNnc3RyICIgICh2ZXJpZml6aWVydCBkdXJjaCBOYWNoZnJhZ2UgYmVpIGRlciBIYXJkd2FyZSkiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGNwdWZyZXEgc3RhdHM6ICIKK21zZ3N0ciAiICBTdGF0aXN0aWs6IgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiQXVmcnVmOiBjcHVmcmVxLWluZm8gW09wdGlvbmVuXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzMgdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb25zOlxuIgorbXNnc3RyICJPcHRpb25lbjpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1lLCAtLWRlYnVnICAgICAgICAgIFByaW50cyBvdXQgZGVidWcgaW5mb3JtYXRpb24gW2RlZmF1bHRdXG4iCittc2dzdHIgIiIKKyIgIC1lLCAtLWRlYnVnICAgICAgICAgIEVyemV1Z3QgZGV0YWlsbGllcnRlIEluZm9ybWF0aW9uZW4sIGhpbGZyZWljaFxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgenVtIEF1ZnNw/HJlbiB2b24gRmVobGVyblxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBhY2NvcmRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjcHVmcmVxIGNvcmUgKlxuIgorbXNnc3RyICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBGaW5kZXQgZGllIG1vbWVudGFuZSBDUFUtVGFrdGZycXVlbnogaGVyYXVzIChuYWNoXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBNZWludW5nIGRlcyBCZXRyaWVic3N5c3RlbXMpICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYnkgcmVhZGluZ1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaXQgZnJvbSBoYXJkd2FyZSAob25seSBhdmFpbGFibGUgdG8gcm9vdCkgKlxuIgorbXNnc3RyICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBGaW5kZXQgZGllIG1vbWVudGFuZSBDUFUtVGFrdGZyZXF1ZW56IGhlcmF1c1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgKHZlcmlmaXppZXJ0IGR1cmNoIE5hY2hmcmFnZSBiZWkgZGVyIEhhcmR3YXJlKVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgW251ciBkZXIgQWRtaW5pc3RyYXRvciBrYW5uIGRpZXMgdHVuXSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAiCisiYWxsb3dlZCAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIEZpbmRldCBkaWUgbWluaW1hbGUgdW5kIG1heGltYWxlIFRha3RmcmVxdWVueiBoZXJhdXMgIgorIipcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWQsIC0tZHJpdmVyICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgdXNlZCBjcHVmcmVxIGtlcm5lbCBkcml2ZXIgKlxuIgorbXNnc3RyICIgIC1kLCAtLWRyaXZlciAgICAgICAgIEZpbmRldCBkZW4gbW9tZW50YW5lbiBUcmVpYmVyIGhlcmF1cyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEdldHMgdGhlIGN1cnJlbnRseSB1c2VkIGNwdWZyZXEgcG9saWN5ICpcbiIKK21zZ3N0ciAiICAtcCwgLS1wb2xpY3kgICAgICAgICBGaW5kZXQgZGllIG1vbWVudGFuZSBUYWt0aWsgaGVyYXVzICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMgKlxuIgorbXNnc3RyICIgIC1nLCAtLWdvdmVybm9ycyAgICAgIEVyemV1Z3QgZWluZSBMaXN0ZSBtaXQgdmVyZvxnYmFyZW4gUmVnbGVybiAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlICIKKyJmcmVxdWVuY3kgKlxuIgorbXNnc3RyICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBGaW5kZXQgaGVyYXVzLCB3ZWxjaGUgQ1BVcyBtaXQgZGVyc2VsYmVuICIKKyJwaHlzaWthbGlzY2hlblxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgVGFrdGZyZXF1ZW56IGxhdWZlbiAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUgKlxuIgorbXNnc3RyICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBGaW5kZXQgaGVyYXVzLCB2b24gd2VsY2hlbiBDUFVzIGRpZSBUYWt0ZnJlcXVlbnogIgorImR1cmNoXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZSBrb29yZGluaWVydCB3ZXJkZW4gbXVzcyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXN0YXRzICAgICAgICAgIFNob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorIiAgLXMsIC0tc3RhdHMgICAgICAgICAgWmVpZ3QsIHNvZmVybiBt9mdsaWNoLCBTdGF0aXN0aWtlbiD8YmVyIGNwdWZyZXEgYW4uXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSAiCisiY2hhbmdlcyAqXG4iCittc2dzdHIgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIEZpbmRldCBkaWUgbWF4aW1hbGUgRGF1ZXIgZWluZXMgVGFrdGZyZXF1ZW56d2VjaHNlbHMgIgorImhlcmF1cyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1iLCAtLWJvb3N0ICAgICAgICAgIENoZWNrcyBmb3IgdHVyYm8gb3IgYm9vc3QgbW9kZXMgICpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiY3B1ZnJlcVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIDIuNC4gYW5kIGVhcmx5IDIuNi4ga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBFcnpldWd0IEluZm9ybWF0aW9uZW4gaW4gZWluZW0g5GhubGljaGVtIEZvcm1hdCB6dSAiCisiZGVtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBkZXIgL3Byb2MvY3B1ZnJlcS1EYXRlaSBpbiAyLjQuIHVuZCBmcvxoZW4gMi42LlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgS2VybmVsLVZlcnNpb25lblxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgaHVtYW4tcmVhZGFibGUgb3V0cHV0IGZvciB0aGUgLWYsIC13LCAtcyBhbmQgLXkgIgorInBhcmFtZXRlcnNcbiIKK21zZ3N0ciAiIgorIiAgLW0sIC0taHVtYW4gICAgICAgICAgRm9ybWF0aWVydCBUYWt0ZnJlcXVlbnotIHVuZCBaZWl0ZGF1ZXJhbmdhYmVuIGluICIKKyJiZXNzZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGxlc2JhcmVyIEZvcm0gKE1IeiwgR0h6OyB1cywgbXMpXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgR2lidCBkaWVzZSBLdXJ6/GJlcnNpY2h0IGF1c1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIG5vIGFyZ3VtZW50IG9yIG9ubHkgdGhlIC1jLCAtLWNwdSBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGRlYnVnIG91dHB1dCBhYm91dFxuIgorImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG4iCittc2dzdHIgIiIKKyJTb2Zlcm4ga2VpbiBhbmRlcmVyIFBhcmFtZXRlciBhbHMgJy1jLCAtLWNwdScgYW5nZWdlYmVuIHdpcmQsIGxpZWZlcnQgIgorImRpZXNlc1xuIgorIlByb2dyYW1tIEluZm9ybWF0aW9uZW4sIGRpZSB6LkIuIHp1bSBCZXJpY2h0ZW4gdm9uIEZlaGxlcm4gbvx0emxpY2ggc2luZC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJGb3IgdGhlIGFyZ3VtZW50cyBtYXJrZWQgd2l0aCAqLCBvbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXNcbiIKKyJlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gemVyb1xuIgorbXNnc3RyICIiCisiQmVpIGRlbiBtaXQgKiBtYXJraWVydGVuIFBhcmFtZXRlcm4gd2lyZCAnLS1jcHUgMCcgYW5nZW5vbW1lbiwgc293ZWl0IG5pY2h0XG4iCisibWl0dGVscyAtYyBvZGVyIC0tY3B1IGV0d2FzIGFuZGVyZXMgYW5nZWdlYmVuIHdpcmRcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgdG9vbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHBhc3NpbmcgYSAtLWNwdSAiCisiYXJndW1lbnRcbiIKK21zZ3N0ciAiRGllc2UgT3B0aW9uIGthbm4gbmljaHQgbWl0IGRlciAtLWNwdS1PcHRpb24ga29tYmluaWVydCB3ZXJkZW5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tY3B1IHBhcmFtZXRlciBhbmQvb3JcbiIKKyJtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTWFuIGthbm4gbmljaHQgbWVociBhbHMgZWluZW4gLS1jcHUtUGFyYW1ldGVyIHVuZC9vZGVyIG1laHIgYWxzIGVpbmVuXG4iCisiaW5mb3JtYXRpb25zc3BlemlmaXNjaGVuIFBhcmFtZXRlciBnbGVpY2h6ZWl0aWcgYW5nZWJlblxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MDAgdXRpbHMvY3B1ZnJlcS1zZXQuYzo4MiB1dGlscy9jcHVwb3dlci1zZXQuYzo0MgorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjQyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIKK21zZ3N0ciAidW5iZWthbm50ZXIgb2RlciBmYWxzY2hlciBQYXJhbWV0ZXJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjE3CisjLCBjLWZvcm1hdAorbXNnaWQgImNvdWxkbid0IGFuYWx5emUgQ1BVICVkIGFzIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBwcmVzZW50XG4iCittc2dzdHIgIiIKKyJLb25udGUgbmljaHQgZGllIENQVSAlZCBhbmFseXNpZXJlbiwgZGEgc2llIChzY2hlaW5iYXI/KSBuaWNodCBleGlzdGllcnQuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYyMCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWx5c2llcmUgQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcXVlbmN5LXNldCBbb3B0aW9uc11cbiIKK21zZ3N0ciAiQXVmcnVmOiBjcHVmcmVxLXNldCBbT3B0aW9uZW5dXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIG5ldyBtaW5pbXVtIENQVSBmcmVxdWVuY3kgdGhlIGdvdmVybm9yIG1heSAiCisic2VsZWN0XG4iCittc2dzdHIgIiIKKyIgIC1kIEZSRVEsIC0tbWluIEZSRVEgICAgICBuZXVlIG1pbmltYWxlIFRha3RmcmVxdWVueiwgZGllIGRlciBSZWdsZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXN35GhsZW4gZGFyZlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgIgorInNlbGVjdFxuIgorbXNnc3RyICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbmV1ZSBtYXhpbWFsZSBUYWt0ZnJlcXVlbnosIGRpZSBkZXIgUmVnbGVyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVzd+RobGVuIGRhcmZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBuZXcgY3B1ZnJlcSBnb3Zlcm5vclxuIgorbXNnc3RyICIgIC1nIEdPViwgLS1nb3Zlcm5vcnMgR09WICB3ZWNoc2xlIHp1IFJlZ2xlciBHT1ZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgc3BlY2lmaWMgZnJlcXVlbmN5IHRvIGJlIHNldC4gUmVxdWlyZXMgdXNlcnNwYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWRcbiIKK21zZ3N0ciAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNldHplIGV4YWt0ZSBUYWt0ZnJlcXVlbnouIEJlbvZ0aWd0IGRlbiBSZWdsZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAndXNlcnNwYWNlJy5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBTd2l0Y2hlcyBhbGwgaGFyZHdhcmUtcmVsYXRlZCBDUFVzXG4iCittc2dzdHIgIiIKKyIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBTZXR6ZSBXZXJ0ZSBm/HIgYWxsZSBDUFVzLCBkZXJlbiBUYWt0ZnJlcXVlbnpcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJkd2FyZWJlZGluZ3QgaWRlbnRpc2NoIGlzdC5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMyB1dGlscy9jcHVwb3dlci1zZXQuYzoyOCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBHaWJ0IGRpZXNlIEt1cnr8YmVyc2ljaHQgYXVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlczpcbiIKKyIxLiBPbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIFwiYWxsXCJcbiIKK21zZ3N0ciAiIgorIkJlaSBkZW4gbWl0ICogbWFya2llcnRlbiBQYXJhbWV0ZXJuIHdpcmQgJy0tY3B1IDAnIGFuZ2Vub21tZW4sIHNvd2VpdCBuaWNodFxuIgorIm1pdHRlbHMgLWMgb2RlciAtLWNwdSBldHdhcyBhbmRlcmVzIGFuZ2VnZWJlbiB3aXJkXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIyLiBUaGUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciAiCisicGFyYW1ldGVyXG4iCisiICAgZXhjZXB0IHRoZSAtYyBDUFUsIC0tY3B1IENQVSBwYXJhbWV0ZXJcbiIKKyIzLiBGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6XG4iCisiICAgYnkgcG9zdGZpeGluZyB0aGUgdmFsdWUgd2l0aCB0aGUgd2FudGVkIHVuaXQgbmFtZSwgd2l0aG91dCBhbnkgc3BhY2VcbiIKKyIgICAoRlJFUXVlbmN5IGluIGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCittc2dzdHIgIiIKKyJIaW53ZWlzZTpcbiIKKyIxLiBTb2Zlcm4ga2VpbiAtYyBvZGVyIC0tY3B1LVBhcmFtZXRlciBhbmdlZ2ViZW4gaXN0LCB3aXJkICctLWNwdSAwJ1xuIgorIiAgIGFuZ2Vub21tZW5cbiIKKyIyLiBEZXIgUGFyYW1ldGVyIC1mIGJ6dy4gLS1mcmVxIGthbm4gbWl0IGtlaW5lbSBhbmRlcmVuIGFscyBkZW0gUGFyYW1ldGVyXG4iCisiICAgLWMgYnp3LiAtLWNwdSBrb21iaW5pZXJ0IHdlcmRlblxuIgorIjMuIEZSRVF1ZW56ZW4ga/ZubmVuIGluIEh6LCBrSHogKFN0YW5kYXJkKSwgTUh6LCBHSHogb2RlciBUSHogZWluZ2VnZWJlblxuIgorIiAgIHdlcmRlbiwgaW5kZW0gZGVyIFdlcnQgdW5kIHVubWl0dGVsYmFyIGFuc2NobGll32VuZCAob2huZSBMZWVyemVpY2hlbiEpXG4iCisiICAgZGllIEVpbmhlaXQgYW5nZWdlYmVuIHdlcmRlbi4gKEJzcDogMUdIeiApXG4iCisiICAgKEZSRVF1ZW56IGluIGtIeiA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBzZXR0aW5nIG5ldyB2YWx1ZXMuIENvbW1vbiBlcnJvcnM6XG4iCisiLSBEbyB5b3UgaGF2ZSBwcm9wZXIgYWRtaW5pc3RyYXRpb24gcmlnaHRzPyAoc3VwZXItdXNlcj8pXG4iCisiLSBJcyB0aGUgZ292ZXJub3IgeW91IHJlcXVlc3RlZCBhdmFpbGFibGUgYW5kIG1vZHByb2JlZD9cbiIKKyItIFRyeWluZyB0byBzZXQgYW4gaW52YWxpZCBwb2xpY3k/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5LCBidXQgdXNlcnNwYWNlIGdvdmVybm9yIGlzIG5vdCAiCisiYXZhaWxhYmxlLFxuIgorIiAgIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgaGFyZHdhcmUgd2hpY2ggY2Fubm90IGJlIHNldCB0byBhIHNwZWNpZmljICIKKyJmcmVxdWVuY3lcbiIKKyIgICBvciBiZWNhdXNlIHRoZSB1c2Vyc3BhY2UgZ292ZXJub3IgaXNuJ3QgbG9hZGVkP1xuIgorbXNnc3RyICIiCisiQmVpbSBFaW5zdGVsbGVuIGlzdCBlaW4gRmVobGVyIGF1ZmdldHJldGVuLiBUeXBpc2NoZSBGZWhsZXJxdWVsbGVuIHNpbmQ6XG4iCisiLSBuaWNodCBhdXNyZWljaGVuZGUgUmVjaHRlIChBZG1pbmlzdHJhdG9yKVxuIgorIi0gZGVyIFJlZ2xlciBpc3QgbmljaHQgdmVyZvxnYmFyIGJ6dy4gbmljaHQgZ2VsYWRlblxuIgorIi0gZGllIGFuZ2VnZWJlbmUgVGFrdGlrIGlzdCBpbmtvcnJla3RcbiIKKyItIGVpbmUgc3BlemlmaXNjaGUgRnJlcXVlbnogd3VyZGUgYW5nZWdlYmVuLCBhYmVyIGRlciBSZWdsZXIgJ3VzZXJzcGFjZSdcbiIKKyIgIGthbm4gZW50d2VkZXIgaGFyZHdhcmViZWRpbmd0IG5pY2h0IGdlbnV0enQgd2VyZGVuIG9kZXIgaXN0IG5pY2h0IGdlbGFkZW5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoxNzAKKyMsIGMtZm9ybWF0Cittc2dpZCAid3JvbmcsIHVua25vd24gb3IgdW5oYW5kbGVkIENQVT9cbiIKK21zZ3N0ciAidW5iZWthbm50ZSBvZGVyIG5pY2h0IHJlZ2VsYmFyZSBDUFVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSAtZi8tLWZyZXEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1kLy0tbWluLCAtdS8tLW1heCBvclxuIgorIi1nLy0tZ292ZXJub3IgcGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisiRGVyIC1mIGJ6dy4gLS1mcmVxLVBhcmFtZXRlciBrYW5uIG5pY2h0IG1pdCBkZW4gUGFyYW1ldGVybiAtZC8tLW1pbiwgLXUvLS0iCisibWF4XG4iCisib2RlciAtZy8tLWdvdmVybm9yIGtvbWJpbmllcnQgd2VyZGVuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzA4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJBdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG91dCBvZiAtZi8tLWZyZXEsIC1kLy0tbWluLCAtdS8tLW1heCwgYW5kXG4iCisiLWcvLS1nb3Zlcm5vciBtdXN0IGJlIHBhc3NlZFxuIgorbXNnc3RyICIiCisiRXMgbXVzcyBtaW5kZXN0ZW5zIGVpbiBQYXJhbWV0ZXIgYXVzIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4IG9kZXJcbiIKKyItZy8tLWdvdmVybm9yIGFuZ2VnZWJlbiB3ZXJkZW4uXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3B1OiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBzZXQgWyAtYiB2YWwgXSBbIC1tIHZhbCBdIFsgLXMgdmFsIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgW1ZBTF0gICAgU2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0tc2NoZWQtbWMgIFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyICIKKyJwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1wZXJmLWJpYXMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtbWMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLXNtdCBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtbWMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBwZXJmLWJpYXMgdmFsdWUgb24gQ1BVICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpbmZvIFsgLWIgXSBbIC1tIF0gWyAtcyBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyAgICBHZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLW0sIC0tc2NoZWQtbWMgICAgIEdldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiICAtcCwgLS1wb2xpY3kgICAgICAgICBGaW5kZXQgZGllIG1vbWVudGFuZSBUYWt0aWsgaGVyYXVzICpcbiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCAgICBHZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGFzc2luZyBubyBvcHRpb24gd2lsbCBzaG93IGFsbCBpbmZvLCBieSBkZWZhdWx0IG9ubHkgb24gY29yZSAwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIy4gaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVAorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwNSB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBwZXJmLWJpYXMgdmFsdWVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBlcmYtYmlhczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbHlzaWVyZSBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogTm8gaWRsZSBzdGF0ZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozNgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgaWRsZSBzdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGQgbm90IGRldGVybWluZSBtYXggaWRsZSBzdGF0ZSAldVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIk51bWJlciBvZiBpZGxlIHN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0OAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIGlkbGUgc3RhdGVzOiIKK21zZ3N0ciAiICBt9mdsaWNoZSBUYWt0ZnJlcXVlbnplbjogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncy9EZXNjcmlwdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXRlbmN5OiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHVyYXRpb246ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZHJpdmVyXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIFRyZWliZXI6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGdvdmVybm9yOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgQy1zdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIy4gcHJpbnRmKCJDc3RhdGVzOiAlZFxuIiwgY3N0YXRlcyk7CisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWN0aXZlIHN0YXRlOiAgICAgICAgICAgIEMwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1heF9jc3RhdGU6ICAgICAgICAgICAgICBDJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIm1heGltdW0gYWxsb3dlZCBsYXRlbmN5OiAlbHUgdXNlY1xuIgorbXNnc3RyICIgIE1heGltYWxlIERhdWVyIGVpbmVzIFRha3RmcmVxdWVuendlY2hzZWxzOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMAorIywgYy1mb3JtYXQKK21zZ2lkICJzdGF0ZXM6XHRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEMlZDogICAgICAgICAgICAgICAgICB0eXBlW0MlZF0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNAorIywgYy1mb3JtYXQKK21zZ2lkICJwcm9tb3Rpb25bLS1dIGRlbW90aW9uWy0tXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM1CisjLCBjLWZvcm1hdAorbXNnaWQgImxhdGVuY3lbJTAzbHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzcKKyMsIGMtZm9ybWF0Cittc2dpZCAidXNhZ2VbJTA4bHVdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiZHVyYXRpb25bJTAyMEx1XSBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpZGxlaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiQXVmcnVmOiBjcHVmcmVxLWluZm8gW09wdGlvbmVuXVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc2lsZW50ICAgICAgICAgT25seSBzaG93IGdlbmVyYWwgQy1zdGF0ZSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICIiCisiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBFcnpldWd0IGRldGFpbGxpZXJ0ZSBJbmZvcm1hdGlvbmVuLCBoaWxmcmVpY2hcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHp1bSBBdWZzcPxyZW4gdm9uIEZlaGxlcm5cbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJhY3BpL3Byb2Nlc3Nvci8qL3Bvd2VyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gb2xkZXIga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBFcnpldWd0IEluZm9ybWF0aW9uZW4gaW4gZWluZW0g5GhubGljaGVtIEZvcm1hdCB6dSAiCisiZGVtXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBkZXIgL3Byb2MvY3B1ZnJlcS1EYXRlaSBpbiAyLjQuIHVuZCBmcvxoZW4gMi42LlxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgS2VybmVsLVZlcnNpb25lblxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJNYW4ga2FubiBuaWNodCBtZWhyIGFscyBlaW5lbiAtLWNwdS1QYXJhbWV0ZXIgdW5kL29kZXIgbWVociBhbHMgZWluZW5cbiIKKyJpbmZvcm1hdGlvbnNzcGV6aWZpc2NoZW4gUGFyYW1ldGVyIGdsZWljaHplaXRpZyBhbmdlYmVuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBDUFUgbnVtYmVyIHdoaWNoIGluZm9ybWF0aW9uIHNoYWxsIGJlIGRldGVybWluZWQgIgorI34gImFib3V0XG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgIE51bW1lciBkZXIgQ1BVLCD8YmVyIGRpZSBJbmZvcm1hdGlvbmVuICIKKyN+ICJoZXJhdXNnZWZ1bmRlbiB3ZXJkZW4gc29sbGVuXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgbnVtYmVyIG9mIENQVSB3aGVyZSBjcHVmcmVxIHNldHRpbmdzIHNoYWxsIGJlICIKKyN+ICJtb2RpZmllZFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgTnVtbWVyIGRlciBDUFUsIGRlcmVuIFRha3RmcmVxdWVuei0iCisjfiAiRWluc3RlbGx1bmdcbiIKKyN+ICIgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZXJkZW4gc29sbFxuIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vZnIucG8gYi90b29scy9wb3dlci9jcHVwb3dlci9wby9mci5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDVhZDIwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vZnIucG8KQEAgLTAsMCArMSw5NDcgQEAKKyMgRnJlbmNoIHRyYW5zbGF0aW9ucyBmb3IgY3B1ZnJlcXV0aWxzIHBhY2thZ2UKKyMgQ29weXJpZ2h0IChDKSAyMDA0IFRIRSBQQUNLQUdFJ1MgQ09QWVJJR0hUIEhPTERFUgorIyBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgbGljZW5zZSBhcyB0aGUgY3B1ZnJlcXV0aWxzIHBhY2thZ2UuCisjIER1Y3JvdCBCcnVubyA8ZHVjcm90QHBvdXBpbm91Lm9yZz4sIDIwMDQuCisjCisjLCBmdXp6eQorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogY3B1ZnJlcXV0aWxzIDAuMS1wcmUyXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTAzLTA4IDE3OjAzKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA0LTExLTE3IDE1OjUzKzEwMDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IEJydW5vIER1Y3JvdCA8ZHVjcm90QHBvdXBpbm91Lm9yZz5cbiIKKyJMYW5ndWFnZS1UZWFtOiBOT05FXG4iCisiTGFuZ3VhZ2U6IFxuIgorIk1JTUUtVmVyc2lvbjogMS4wXG4iCisiQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTFcbiIKKyJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0XG4iCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjM2Cittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NDMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo1MQorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMzIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjU4IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo3MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjMzCittc2dpZCAiUHJvY2Vzc29yIENvcmUgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6NDAKK21zZ2lkICJQcm9jZXNzb3IgUGFja2FnZSBDMiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0NworbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEM3IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo1NgorbXNnaWQgIlBhY2thZ2UgaW4gc2xlZXAgc3RhdGUgKFBDMSBvciBkZWVwZXIpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo2MworbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMxIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYzo3NworbXNnaWQgIk5vcnRoIEJyaWRnZSBQMSBib29sZWFuIGNvdW50ZXIgKHJldHVybnMgMCBvciAxKSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjM1Cittc2dpZCAiUHJvY2Vzc29yIENvcmUgbm90IGlkbGUiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzo0MgorbXNnaWQgIlByb2Nlc3NvciBDb3JlIGluIGFuIGlkbGUgc3RhdGUiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYzo1MAorbXNnaWQgIkF2ZXJhZ2UgRnJlcXVlbmN5IChpbmNsdWRpbmcgYm9vc3QpIGluIE1IeiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjY2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJjcHVwb3dlciBtb25pdG9yOiBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstdl0gWy1oXSBbIFstdF0gfCBbLWxdIHwgWy1tIDxtb24xPixbPG1vbjI+XSBdIF0gWy1pICIKKyJpbnRlcnZhbF9zZWMgfCAtYyBjb21tYW5kIC4uLl1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC12OiBiZSBtb3JlIHZlcmJvc2VcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjczCisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1oOiBwcmludCB0aGlzIGhlbHBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1pOiB0aW1lIGludGVydmFsbCB0byBtZWFzdXJlIGZvciBpbiBzZWNvbmRzIChkZWZhdWx0IDEpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NQorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtdDogc2hvdyBDUFUgdG9wb2xvZ3kvaGllcmFyY2h5XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtbDogbGlzdCBhdmFpbGFibGUgQ1BVIHNsZWVwIG1vbml0b3JzIChmb3IgdXNlIHdpdGggLW0pXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo3NworIywgYy1mb3JtYXQKK21zZ2lkICJcdCAtbTogc2hvdyBzcGVjaWZpYyBDUFUgc2xlZXAgbW9uaXRvcnMgb25seSAoaW4gc2FtZSBvcmRlcilcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc5CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJvbmx5IG9uZSBvZjogLXQsIC1sLCAtbSBhcmUgYWxsb3dlZFxuIgorIklmIG5vbmUgb2YgdGhlbSBpcyBwYXNzZWQsIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIGFsbCBzdXBwb3J0ZWQgbW9uaXRvcnMgYXJlIHNob3duXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoxOTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9uaXRvciAlcywgQ291bnRlciAlcyBoYXMgbm8gY291bnQgZnVuY3Rpb24uIEltcGxlbWVudGF0aW9uIGVycm9yXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyMDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICppcyBvZmZsaW5lXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyMzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXM6IG1heCBtb25pdG9yIG5hbWUgbGVuZ3RoICglZCkgZXhjZWVkZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI1MAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBtYXRjaGluZyBtb25pdG9yIGZvdW5kIGluICVzLCB0cnkgLWwgb3B0aW9uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzoyNjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTW9uaXRvciBcIiVzXCIgKCVkIHN0YXRlcykgLSBNaWdodCBvdmVyZmxvdyBhZnRlciAldSBzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzozMTkKKyMsIGMtZm9ybWF0Cittc2dpZCAiJXMgdG9vayAlLjVmIHNlY29uZHMgYW5kIGV4aXRlZCB3aXRoIHN0YXR1cyAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDA2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNhbm5vdCByZWFkIG51bWJlciBvZiBhdmFpbGFibGUgcHJvY2Vzc29yc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NDE3CisjLCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBtb25pdG9yICVzIG5lZWRzIHJvb3QgYWNjZXNzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiTm8gSFcgQ3N0YXRlIG1vbml0b3JzIGZvdW5kXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciBbIC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiY3B1cG93ZXIgLS12ZXJzaW9uXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICJTdXBwb3J0ZWQgc3ViY29tbWFuZHMgYXJlOlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlxuIgorIlNvbWUgc3ViY29tbWFuZHMgY2FuIG1ha2UgdXNlIG9mIHRoZSAtYyBjcHVsaXN0IG9wdGlvbi5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxvb2sgYXQgdGhlIGdlbmVyYWwgY3B1cG93ZXIgbWFucGFnZSBob3cgdG8gdXNlIGl0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NQorIywgYy1mb3JtYXQKK21zZ2lkICJhbmQgcmVhZCB1cCB0aGUgc3ViY29tbWFuZCdzIG1hbnBhZ2Ugd2hldGhlciBpdCBpcyBzdXBwb3J0ZWQuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiVXNlIGNwdXBvd2VyIGhlbHAgc3ViY29tbWFuZCBmb3IgZ2V0dGluZyBoZWxwIGZvciBhYm92ZSBzdWJjb21tYW5kcy5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIlJlcG9ydCBlcnJvcnMgYW5kIGJ1Z3MgdG8gJXMsIHBsZWFzZS5cbiIKK21zZ3N0ciAiVmV1aWxsZXogcmFwcG9ydGV6IGxlcyBlcnJldXJzIGV0IGxlcyBib2d1ZXMg4CAlcywgcydpbCB2b3VzIHBsYWl0LlxuIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjExNAorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBwYXJzaW5nIGNwdSBsaXN0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxNzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3ViY29tbWFuZCAlcyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzozMQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZG4ndCBjb3VudCB0aGUgbnVtYmVyIG9mIENQVXMgKCVzOiAlcyksIGFzc3VtaW5nIDFcbiIKK21zZ3N0ciAiROl0ZXJtaW5hdGlvbiBkdSBub21icmUgZGUgQ1BVcyAoJXMgOiAlcykgaW1wb3NzaWJsZS4gIEFzc3VtZSAxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgICAgICAgICAgbWluaW11bSBDUFUgZnJlcXVlbmN5ICAtICBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIC0gIGdvdmVybm9yXG4iCittc2dzdHIgIiIKKyIgICAgICAgICBGculxdWVuY2UgQ1BVIG1pbmltYWxlIC0gRnLpcXVlbmNlIENQVSBtYXhpbWFsZSAgLSBy6Wd1bGF0ZXVyXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBldmFsdWF0aW5nIEJvb3N0IENhcGFiaWxpdGllcyBvbiBDUFUgJWQgLS0gYXJlIHlvdSByb290P1xuIgorbXNnc3RyICIiCisKKyMuIFAgc3RhdGUgY2hhbmdlcyB2aWEgTVNSIGFyZSBpZGVudGlmaWVkIHZpYSBjcHVpZCA4MDAwMDAwNworIy4gb24gSW50ZWwgYW5kIEFNRCwgYnV0IHdlIGFzc3VtZSBib29zdCBjYXBhYmxlIG1hY2hpbmVzIGNhbiBkbyB0aGF0CisjLiBpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcKKyMuICYmIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA3KSkpCisjLgorIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYm9vc3Qgc3RhdGUgc3VwcG9ydDogXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBTdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgInllcyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAibm8iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgQWN0aXZlOiAlc1xuIgorbXNnc3RyICIgIHBpbG90ZSA6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQm9vc3QgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgVG90YWwgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVBiJWQ6ICVsdU1IeiAoYm9vc3Qgc3RhdGUpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUCVkOiAgJWx1TUh6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbm8gb3IgdW5rbm93biBjcHVmcmVxIGRyaXZlciBpcyBhY3RpdmUgb24gdGhpcyBDUFVcbiIKK21zZ3N0ciAiICBwYXMgZGUgcGlsb3RlcyBjcHVmcmVxIHJlY29ubnUgcG91ciBjZSBDUFVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjEzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIHBpbG90ZSA6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSBmcmVxdWVuY3k6ICIKK21zZ3N0ciAiICBDUFVzIHF1aSBkb2l2ZW50IGNoYW5nZXIgZGUgZnLpcXVlbmNlcyBlbiBt6m1lIHRlbXBzIDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMzAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5IGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlOiAiCittc2dzdHIgIiAgQ1BVcyBxdWkgZG9pdmVudCBjaGFuZ2VyIGRlIGZy6XF1ZW5jZXMgZW4gbeptZSB0ZW1wcyA6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbWF4aW11bSB0cmFuc2l0aW9uIGxhdGVuY3k6ICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBoYXJkd2FyZSBsaW1pdHM6ICIKK21zZ3N0ciAiICBsaW1pdGF0aW9uIG1hdOlyaWVsbGUgOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI1NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBmcmVxdWVuY3kgc3RlcHM6ICIKK21zZ3N0ciAiICBwbGFnZSBkZSBmculxdWVuY2UgOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI2OQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9yczogIgorbXNnc3RyICIgIHLpZ3VsYXRldXJzIGRpc3BvbmlibGVzIDogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IHBvbGljeTogZnJlcXVlbmN5IHNob3VsZCBiZSB3aXRoaW4gIgorbXNnc3RyICIgIHRhY3RpcXVlIGFjdHVlbGxlIDogbGEgZnLpcXVlbmNlIGRvaXQg6nRyZSBjb21wcmlzZSBlbnRyZSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgYW5kICIKK21zZ3N0ciAiIGV0ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgZ292ZXJub3IgXCIlc1wiIG1heSBkZWNpZGUgd2hpY2ggc3BlZWQgdG8gdXNlXG4iCisiICAgICAgICAgICAgICAgICAgd2l0aGluIHRoaXMgcmFuZ2UuXG4iCittc2dzdHIgIiIKKyJMZSBy6Wd1bGF0ZXVyIFwiJXNcIiBlc3QgbGlicmUgZGUgY2hvaXNpciBsYSB2aXRlc3NlXG4iCisiICAgICAgICAgICAgICAgICAgZGFucyBjZXR0ZSBwbGFnZSBkZSBmculxdWVuY2VzLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IENQVSBmcmVxdWVuY3kgaXMgIgorbXNnc3RyICIgIGxhIGZy6XF1ZW5jZSBhY3R1ZWxsZSBkZSBjZSBDUFUgZXN0ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6Mjk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAoYXNzZXJ0ZWQgYnkgY2FsbCB0byBoYXJkd2FyZSkiCittc2dzdHIgIiAodulyaWZp6SBwYXIgdW4gYXBwZWwgZGlyZWN0IGR1IG1hdOlyaWVsKSIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzA0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3B1ZnJlcSBzdGF0czogIgorbXNnc3RyICIgIGRlcyBzdGF0aXN0aXF1ZSBjb25jZXJuYW50IGNwdWZyZXE6IgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNhZ2UgOiBjcHVmcmVxLWluZm8gW29wdGlvbnNdXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MyB1dGlscy9jcHVmcmVxLXNldC5jOjI2IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIzCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbnM6XG4iCittc2dzdHIgIk9wdGlvbnMgOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLWUsIC0tZGVidWcgICAgICAgICAgUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBbZGVmYXVsdF1cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBBZmZpY2hlciBsZXMgaW5mb3JtYXRpb25zIGRlIGTpYm9ndWFnZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBhY2NvcmRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjcHVmcmVxIGNvcmUgKlxuIgorbXNnc3RyICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBPYnRlbmlyIGxhIGZy6XF1ZW5jZSBhY3R1ZWxsZSBkdSBDUFUgc2Vsb24gbGUgcG9pbnRcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGRlIHZ1ZSBkdSBjb2V1ciBkdSBzeXN06G1lIGRlIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBieSByZWFkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpdCBmcm9tIGhhcmR3YXJlIChvbmx5IGF2YWlsYWJsZSB0byByb290KSAqXG4iCittc2dzdHIgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIE9idGVuaXIgbGEgZnLpcXVlbmNlIGFjdHVlbGxlIGR1IENQVSBkaXJlY3RlbWVudCBwYXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGxlIG1hdOlyaWVsIChkb2l0IOp0cmUgcm9vdCkgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIgorImFsbG93ZWQgKlxuIgorbXNnc3RyICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBBZmZpY2hlIGxlcyBmculxdWVuY2VzIG1pbmltYWxlcyBldCBtYXhpbWFsZXMgZHUgQ1BVICIKKyIqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyICpcbiIKK21zZ3N0ciAiICAtZCwgLS1kcml2ZXIgICAgICAgICBBZmZpY2hlIGxlIHBpbG90ZSBjcHVmcmVxIHV0aWxpc+kgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtcCwgLS1wb2xpY3kgICAgICAgICBHZXRzIHRoZSBjdXJyZW50bHkgdXNlZCBjcHVmcmVxIHBvbGljeSAqXG4iCittc2dzdHIgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgQWZmaWNoZSBsYSB0YWN0aXF1ZSBhY3R1ZWxsZSBkZSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMgKlxuIgorbXNnc3RyICIiCisiICAtZywgLS1nb3Zlcm5vcnMgICAgICBBZmZpY2hlIGxlcyBy6Wd1bGF0ZXVycyBkaXNwb25pYmxlcyBkZSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgzCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtciwgLS1yZWxhdGVkLWNwdXMgICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlICIKKyJmcmVxdWVuY3kgKlxuIgorbXNnc3RyICIiCisiICAtYSwgLS1hZmZlY3RlZC1jcHVzICAgQWZmaWNoZSBxdWVscyBzb250IGxlcyBDUFVzIHF1aSBkb2l2ZW50IGNoYW5nZXIgZGVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICBmculxdWVuY2VzIGVuIG3qbWUgdGVtcHMgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIERldGVybWluZXMgd2hpY2ggQ1BVcyBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5XG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlZCBieSBzb2Z0d2FyZSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgICBBZmZpY2hlIHF1ZWxzIHNvbnQgbGVzIENQVXMgcXVpIGRvaXZlbnQgY2hhbmdlciBkZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgIGZy6XF1ZW5jZXMgZW4gbeptZSB0ZW1wcyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXN0YXRzICAgICAgICAgIFNob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGVcbiIKK21zZ3N0ciAiIgorIiAgLXMsIC0tc3RhdHMgICAgICAgICAgSW5kaXF1ZSBkZXMgc3RhdGlzdGlxdWVzIGNvbmNlcm5hbnQgY3B1ZnJlcSwgc2lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGRpc3BvbmlibGVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBsYXRlbmN5IG9uIENQVSBmcmVxdWVuY3kgIgorImNoYW5nZXMgKlxuIgorbXNnc3RyICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBBZmZpY2hlIGxlcyBmculxdWVuY2VzIG1pbmltYWxlcyBldCBtYXhpbWFsZXMgZHUgQ1BVICIKKyIqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1iLCAtLWJvb3N0ICAgICAgICAgIENoZWNrcyBmb3IgdHVyYm8gb3IgYm9vc3QgbW9kZXMgICpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiY3B1ZnJlcVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIDIuNC4gYW5kIGVhcmx5IDIuNi4ga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBBZmZpY2hlIGxlcyBpbmZvcm1hdGlvbnMgZW4gdXRpbGlzYW50IGwnaW50ZXJmYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBmb3VybmllIHBhciAvcHJvYy9jcHVmcmVxLCBwculzZW50ZSBkYW5zIGxlcyAiCisidmVyc2lvbnNcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIDIuNCBldCBsZXMgYW5jaWVubmVzIHZlcnNpb25zIDIuNiBkdSBub3lhdVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTEKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIGh1bWFuLXJlYWRhYmxlIG91dHB1dCBmb3IgdGhlIC1mLCAtdywgLXMgYW5kIC15ICIKKyJwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgICBhZmZpY2hlIGRhbnMgdW4gZm9ybWF0IGxpc2libGUgcG91ciB1biBodW1haW5cbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICBwb3VyIGxlcyBvcHRpb25zIC1mLCAtdyBldCAtcyAoTUh6LCBHSHopXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgYWZmaWNoZSBsJ2FpZGUtbeltb2lyZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIG5vIGFyZ3VtZW50IG9yIG9ubHkgdGhlIC1jLCAtLWNwdSBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGRlYnVnIG91dHB1dCBhYm91dFxuIgorImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG4iCittc2dzdHIgIiIKKyJQYXIgZOlmYXV0LCBsZXMgaW5mb3JtYXRpb25zIGRlIGTpYm9ndWFnZSBzZXJvbnQgYWZmaWNo6WVzIHNpIGF1Y3VuXG4iCisiYXJndW1lbnQsIG91IGJpZW4gc2kgc2V1bGVtZW50IGwnYXJndW1lbnQgLWMgKC0tY3B1KSBlc3QgZG9ubuksIGFmaW4gZGVcbiIKKyJmYWNpbGl0ZXIgbGVzIHJhcHBvcnRzIGRlIGJvZ3VlcyBwYXIgZXhlbXBsZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkZvciB0aGUgYXJndW1lbnRzIG1hcmtlZCB3aXRoICosIG9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpc1xuIgorImVxdWl2YWxlbnQgdG8gc2V0dGluZyBpdCB0byB6ZXJvXG4iCittc2dzdHIgIkxlcyBhcmd1bWVudHMgYXZlYyB1biAqIHV0aWxpc2Vyb250IGxlIENQVSAwIHNpIC1jICgtLWNwdSkgZXN0IG9taXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgdG9vbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHBhc3NpbmcgYSAtLWNwdSAiCisiYXJndW1lbnRcbiIKK21zZ3N0ciAiQ2V0dGUgb3B0aW9uIGVzdCBpbmNvbXBhdGlibGUgYXZlYyAtLWNwdVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo1OTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgLS1jcHUgcGFyYW1ldGVyIGFuZC9vclxuIgorIm1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJPbiBuZSBwZXV0IGluZGlxdWVyIHBsdXMgZCd1biBwYXJhbeh0cmUgLS1jcHUsIHRvdXQgY29tbWUgbCdvbiBuZSBwZXV0XG4iCisic3DpY2lmaWVyIHBsdXMgZCd1biBhcmd1bWVudCBkZSBmb3JtYXRhZ2VcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjAwIHV0aWxzL2NwdWZyZXEtc2V0LmM6ODIgdXRpbHMvY3B1cG93ZXItc2V0LmM6NDIKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzo0MiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iCittc2dzdHIgIm9wdGlvbiBpbnZhbGlkZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiY291bGRuJ3QgYW5hbHl6ZSBDUFUgJWQgYXMgaXQgZG9lc24ndCBzZWVtIHRvIGJlIHByZXNlbnRcbiIKK21zZ3N0ciAiYW5hbHlzZSBkdSBDUFUgJWQgaW1wb3NzaWJsZSBwdWlzcXUnaWwgbmUgc2VtYmxlIHBhcyDqdHJlIHBy6XNlbnRcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjIwIHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiYW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbHlzZSBkdSBDUFUgJWQgOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcXVlbmN5LXNldCBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNhZ2UgOiBjcHVmcmVxLXNldCBbb3B0aW9uc11cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgICBub3V2ZWxsZSBmculxdWVuY2UgbWluaW1hbGUgZHUgQ1BVIOAgdXRpbGlzZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyIGxlIHLpZ3VsYXRldXJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbmV3IG1heGltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgICBub3V2ZWxsZSBmculxdWVuY2UgbWF4aW1hbGUgZHUgQ1BVIOAgdXRpbGlzZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyIGxlIHLpZ3VsYXRldXJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBuZXcgY3B1ZnJlcSBnb3Zlcm5vclxuIgorbXNnc3RyICIgIC1nIEdPViwgLS1nb3Zlcm5vciBHT1YgICBhY3RpdmUgbGUgculndWxhdGV1ciBHT1ZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgc3BlY2lmaWMgZnJlcXVlbmN5IHRvIGJlIHNldC4gUmVxdWlyZXMgdXNlcnNwYWNlXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWRcbiIKK21zZ3N0ciAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIGZpeGUgbGEgZnLpcXVlbmNlIGR1IHByb2Nlc3NldXIg4CBGUkVRLiBJbCBmYXV0XG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlIGxlIHLpZ3VsYXRldXIgqyB1c2Vyc3BhY2UguyBzb2l0IGRpc3BvbmlibGUgXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgZXQgYWN0aXbpLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXIsIC0tcmVsYXRlZCAgICAgICAgICAgIFN3aXRjaGVzIGFsbCBoYXJkd2FyZS1yZWxhdGVkIENQVXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMzIHV0aWxzL2NwdXBvd2VyLXNldC5jOjI4IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIgorbXNnc3RyICIgIC1oLCAtLWhlbHAgICAgICAgICAgIGFmZmljaGUgbCdhaWRlLW3pbW9pcmVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIk5vdGVzOlxuIgorIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIgorbXNnc3RyICJMZXMgYXJndW1lbnRzIGF2ZWMgdW4gKiB1dGlsaXNlcm9udCBsZSBDUFUgMCBzaSAtYyAoLS1jcHUpIGVzdCBvbWlzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIyLiBUaGUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciAiCisicGFyYW1ldGVyXG4iCisiICAgZXhjZXB0IHRoZSAtYyBDUFUsIC0tY3B1IENQVSBwYXJhbWV0ZXJcbiIKKyIzLiBGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6XG4iCisiICAgYnkgcG9zdGZpeGluZyB0aGUgdmFsdWUgd2l0aCB0aGUgd2FudGVkIHVuaXQgbmFtZSwgd2l0aG91dCBhbnkgc3BhY2VcbiIKKyIgICAoRlJFUXVlbmN5IGluIGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCittc2dzdHIgIiIKKyJSZW1hcnF1ZSA6XG4iCisiMS4gTGUgQ1BVIG51belybyAwIHNlcmEgdXRpbGlz6SBwYXIgZOlmYXV0IHNpIC1jIChvdSAtLWNwdSkgZXN0IG9taXMgO1xuIgorIjIuIGwnYXJndW1lbnQgLWYgRlJFUSAob3UgLS1mcmVxIEZSRVEpIG5lIHBldXQg6nRyZSB1dGlsaXPpIHF1J2F2ZWMgLS1jcHUgO1xuIgorIjMuIG9uIHBvdXJyYSBwculjaXNlciBsJ3VuaXTpIGRlcyBmculxdWVuY2VzIGVuIHBvc3RmaXhhbnQgc2FucyBhdWN1bmUgIgorImVzcGFjZVxuIgorIiAgIGxlcyB2YWxldXJzIHBhciBoeiwga0h6IChwYXIgZOlmYXV0KSwgTUh6LCBHSHogb3UgVEh6XG4iCisiICAgKGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6NTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkVycm9yIHNldHRpbmcgbmV3IHZhbHVlcy4gQ29tbW9uIGVycm9yczpcbiIKKyItIERvIHlvdSBoYXZlIHByb3BlciBhZG1pbmlzdHJhdGlvbiByaWdodHM/IChzdXBlci11c2VyPylcbiIKKyItIElzIHRoZSBnb3Zlcm5vciB5b3UgcmVxdWVzdGVkIGF2YWlsYWJsZSBhbmQgbW9kcHJvYmVkP1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhbiBpbnZhbGlkIHBvbGljeT9cbiIKKyItIFRyeWluZyB0byBzZXQgYSBzcGVjaWZpYyBmcmVxdWVuY3ksIGJ1dCB1c2Vyc3BhY2UgZ292ZXJub3IgaXMgbm90ICIKKyJhdmFpbGFibGUsXG4iCisiICAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBoYXJkd2FyZSB3aGljaCBjYW5ub3QgYmUgc2V0IHRvIGEgc3BlY2lmaWMgIgorImZyZXF1ZW5jeVxuIgorIiAgIG9yIGJlY2F1c2UgdGhlIHVzZXJzcGFjZSBnb3Zlcm5vciBpc24ndCBsb2FkZWQ/XG4iCittc2dzdHIgIiIKKyJFbiBhanVzdGFudCBsZXMgbm91dmVhdXggcGFyYW3odHJlcywgdW5lIGVycmV1ciBlc3QgYXBwYXJ1ZS4gTGVzIHNvdXJjZXNcbiIKKyJkJ2VycmV1ciB0eXBpcXVlIHNvbnQgOlxuIgorIi0gZHJvaXQgZCdhZG1pbmlzdHJhdGlvbiBpbnN1ZmZpc2FudCAo6nRlcy12b3VzIHJvb3QgPykgO1xuIgorIi0gbGUgculndWxhdGV1ciBjaG9pc2kgbidlc3QgcGFzIGRpc3BvbmlibGUsIG91IGJpZW4gbidlc3QgcGFzIGRpc3BvbmlibGUgIgorImVuXG4iCisiICB0YW50IHF1ZSBtb2R1bGUgbm95YXUgO1xuIgorIi0gbGEgdGFjdGlxdWUgbidlc3QgcGFzIGRpc3BvbmlibGUgO1xuIgorIi0gdm91cyB2b3VsZXogdXRpbGlzZXIgbCdvcHRpb24gLWYvLS1mcmVxLCBtYWlzIGxlIHLpZ3VsYXRldXIgqyB1c2Vyc3BhY2Ugu1xuIgorIiAgbidlc3QgcGFzIGRpc3BvbmlibGUsIHBhciBleGVtcGxlIHBhcmNlIHF1ZSBsZSBtYXTpcmllbCBuZSBsZSBzdXBwb3J0ZVxuIgorIiAgcGFzLCBvdSBiaWVuIG4nZXN0IHRvdXQgc2ltcGxlbWVudCBwYXMgY2hhcmfpLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZywgdW5rbm93biBvciB1bmhhbmRsZWQgQ1BVP1xuIgorbXNnc3RyICJDUFUgaW5jb25udSBvdSBub24gc3VwcG9ydOkgP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIC1mLy0tZnJlcSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWQvLS1taW4sIC11Ly0tbWF4IG9yXG4iCisiLWcvLS1nb3Zlcm5vciBwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyJsJ29wdGlvbiAtZi8tLWZyZXEgZXN0IGluY29tcGF0aWJsZSBhdmVjIGxlcyBvcHRpb25zIC1kLy0tbWluLCAtdS8tLW1heCBldFxuIgorIi1nLy0tZ292ZXJub3JcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKyItZy8tLWdvdmVybm9yIG11c3QgYmUgcGFzc2VkXG4iCittc2dzdHIgIiIKKyJMJ3VuIGRlIGNlcyBwYXJhbeh0cmVzIGVzdCBvYmxpZ2F0b2lyZSA6IC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4IGV0XG4iCisiLWcvLS1nb3Zlcm5vclxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjM0NworIywgYy1mb3JtYXQKK21zZ2lkICJTZXR0aW5nIGNwdTogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgc2V0IFsgLWIgdmFsIF0gWyAtbSB2YWwgXSBbIC1zIHZhbCBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWIsIC0tcGVyZi1iaWFzIFtWQUxdICAgIFNldHMgQ1BVJ3MgcG93ZXIgdnMgcGVyZm9ybWFuY2UgcG9saWN5IG9uIHNvbWVcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlbCBtb2RlbHMgWzAtMTVdLCBzZWUgbWFucGFnZSBmb3IgZGV0YWlsc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLXNjaGVkLW1jICBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210IFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciAiCisicG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tcGVyZi1iaWFzIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzo5MQorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLW1jIHBhcmFtIG91dCBvZiByYW5nZSBbMC0lZF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1zY2hlZC1zbXQgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEyMQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciBzZXR0aW5nIHNjaGVkLW1jICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtc210ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTQ2CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgcGVyZi1iaWFzIHZhbHVlIG9uIENQVSAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMQorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaW5mbyBbIC1iIF0gWyAtbSBdIFsgLXMgXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyMworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgICAgR2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1tLCAtLXNjaGVkLW1jICAgICBHZXRzIHRoZSBrZXJuZWwncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiAgLXAsIC0tcG9saWN5ICAgICAgICAgQWZmaWNoZSBsYSB0YWN0aXF1ZSBhY3R1ZWxsZSBkZSBjcHVmcmVxICpcbiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCAgICBHZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGFzc2luZyBubyBvcHRpb24gd2lsbCBzaG93IGFsbCBpbmZvLCBieSBkZWZhdWx0IG9ubHkgb24gY29yZSAwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIy4gaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVAorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwNSB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBwZXJmLWJpYXMgdmFsdWVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBlcmYtYmlhczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbHlzZSBkdSBDUFUgJWQgOlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IE5vIGlkbGUgc3RhdGVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIGlkbGUgc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgbWF4IGlkbGUgc3RhdGUgJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0NgorIywgYy1mb3JtYXQKK21zZ2lkICJOdW1iZXIgb2YgaWRsZSBzdGF0ZXM6ICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDgKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkF2YWlsYWJsZSBpZGxlIHN0YXRlczoiCittc2dzdHIgIiAgcGxhZ2UgZGUgZnLpcXVlbmNlIDogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncy9EZXNjcmlwdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXRlbmN5OiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHVyYXRpb246ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZHJpdmVyXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIHBpbG90ZSA6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjk5CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEwMworIywgYy1mb3JtYXQKK21zZ2lkICJDUFVpZGxlIGdvdmVybm9yOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyMgorIywgYy1mb3JtYXQKK21zZ2lkICJDUFUgJXU6IENhbid0IHJlYWQgQy1zdGF0ZSBpbmZvXG4iCittc2dzdHIgIiIKKworIy4gcHJpbnRmKCJDc3RhdGVzOiAlZFxuIiwgY3N0YXRlcyk7CisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiYWN0aXZlIHN0YXRlOiAgICAgICAgICAgIEMwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIm1heF9jc3RhdGU6ICAgICAgICAgICAgICBDJXVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjkKKyMsIGMtZm9ybWF0Cittc2dpZCAibWF4aW11bSBhbGxvd2VkIGxhdGVuY3k6ICVsdSB1c2VjXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXRlczpcdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQyVkOiAgICAgICAgICAgICAgICAgIHR5cGVbQyVkXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21vdGlvblstLV0gZGVtb3Rpb25bLS1dICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGF0ZW5jeVslMDNsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZVslMDhsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXJhdGlvblslMDIwTHVdIFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGlkbGVpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVc2FnZSA6IGNwdWZyZXEtaW5mbyBbb3B0aW9uc11cbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXNpbGVudCAgICAgICAgIE9ubHkgc2hvdyBnZW5lcmFsIEMtc3RhdGUgaW5mb3JtYXRpb25cbiIKK21zZ3N0ciAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBBZmZpY2hlciBsZXMgaW5mb3JtYXRpb25zIGRlIGTpYm9ndWFnZVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImFjcGkvcHJvY2Vzc29yLyovcG93ZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiBvbGRlciBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIEFmZmljaGUgbGVzIGluZm9ybWF0aW9ucyBlbiB1dGlsaXNhbnQgbCdpbnRlcmZhY2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGZvdXJuaWUgcGFyIC9wcm9jL2NwdWZyZXEsIHBy6XNlbnRlIGRhbnMgbGVzICIKKyJ2ZXJzaW9uc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgMi40IGV0IGxlcyBhbmNpZW5uZXMgdmVyc2lvbnMgMi42IGR1IG5veWF1XG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjIwOQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk9uIG5lIHBldXQgaW5kaXF1ZXIgcGx1cyBkJ3VuIHBhcmFt6HRyZSAtLWNwdSwgdG91dCBjb21tZSBsJ29uIG5lIHBldXRcbiIKKyJzcOljaWZpZXIgcGx1cyBkJ3VuIGFyZ3VtZW50IGRlIGZvcm1hdGFnZVxuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgQ1BVIG51bWJlciB3aGljaCBpbmZvcm1hdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkICIKKyN+ICJhYm91dFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBOdW3pcm8gZHUgQ1BVIHBvdXIgbGVxdWVsIGwnaW5mb3JtYXRpb24gc2VyYSAiCisjfiAiYWZmaWNo6WVcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW1iZXIgb2YgQ1BVIHdoZXJlIGNwdWZyZXEgc2V0dGluZ3Mgc2hhbGwgYmUgIgorI34gIm1vZGlmaWVkXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW3pcm8gZHUgQ1BVIOAgcHJlbmRyZSBlbiBjb21wdGUgcG91ciBsZXNcbiIKKyN+ICIgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VtZW50c1xuIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vaXQucG8gYi90b29scy9wb3dlci9jcHVwb3dlci9wby9pdC5wbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODBjNGRkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vaXQucG8KQEAgLTAsMCArMSw5NjEgQEAKKyMgSXRhbGlhbiB0cmFuc2xhdGlvbnMgZm9yIGNwdWZyZXF1dGlscyBwYWNrYWdlCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA5CisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBjcHVmcmVxdXRpbHMgcGFja2FnZS4KKyMgTWF0dGlhIERvbmdpbGkgPG1hbGF0dGlhQGdtYWlsLmNvbT4uCisjCisjCittc2dpZCAiIgorbXNnc3RyICIiCisiUHJvamVjdC1JZC1WZXJzaW9uOiBjcHVmcmVxdXRpbHMgMC4zXG4iCisiUmVwb3J0LU1zZ2lkLUJ1Z3MtVG86IFxuIgorIlBPVC1DcmVhdGlvbi1EYXRlOiAyMDExLTAzLTA4IDE3OjAzKzAxMDBcbiIKKyJQTy1SZXZpc2lvbi1EYXRlOiAyMDA5LTA4LTE1IDEyOjAwKzA5MDBcbiIKKyJMYXN0LVRyYW5zbGF0b3I6IE1hdHRpYSBEb25naWxpIDxtYWxhdHRpYUBnbWFpbC5jb20+XG4iCisiTGFuZ3VhZ2UtVGVhbTogTk9ORVxuIgorIkxhbmd1YWdlOiBcbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6MzYKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo0MworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjUxCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTggdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjcwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6MzMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMyIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQ3Cittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjU2Cittc2dpZCAiUGFja2FnZSBpbiBzbGVlcCBzdGF0ZSAoUEMxIG9yIGRlZXBlcikiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjYzCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzEiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjc3Cittc2dpZCAiTm9ydGggQnJpZGdlIFAxIGJvb2xlYW4gY291bnRlciAocmV0dXJucyAwIG9yIDEpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6MzUKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBub3QgaWRsZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjQyCittc2dpZCAiUHJvY2Vzc29yIENvcmUgaW4gYW4gaWRsZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjUwCittc2dpZCAiQXZlcmFnZSBGcmVxdWVuY3kgKGluY2x1ZGluZyBib29zdCkgaW4gTUh6IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy12XSBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXY6IGJlIG1vcmUgdmVyYm9zZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWg6IHByaW50IHRoaXMgaGVscFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWk6IHRpbWUgaW50ZXJ2YWxsIHRvIG1lYXN1cmUgZm9yIGluIHNlY29uZHMgKGRlZmF1bHQgMSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC10OiBzaG93IENQVSB0b3BvbG9neS9oaWVyYXJjaHlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1sOiBsaXN0IGF2YWlsYWJsZSBDUFUgc2xlZXAgbW9uaXRvcnMgKGZvciB1c2Ugd2l0aCAtbSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1tOiBzaG93IHNwZWNpZmljIENQVSBzbGVlcCBtb25pdG9ycyBvbmx5IChpbiBzYW1lIG9yZGVyKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9ubHkgb25lIG9mOiAtdCwgLWwsIC1tIGFyZSBhbGxvd2VkXG4iCisiSWYgbm9uZSBvZiB0aGVtIGlzIHBhc3NlZCwiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgYWxsIHN1cHBvcnRlZCBtb25pdG9ycyBhcmUgc2hvd25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yICVzLCBDb3VudGVyICVzIGhhcyBubyBjb3VudCBmdW5jdGlvbi4gSW1wbGVtZW50YXRpb24gZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKmlzIG9mZmxpbmVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGggKCVkKSBleGNlZWRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoaW5nIG1vbml0b3IgZm91bmQgaW4gJXMsIHRyeSAtbCBvcHRpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yIFwiJXNcIiAoJWQgc3RhdGVzKSAtIE1pZ2h0IG92ZXJmbG93IGFmdGVyICV1IHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0b29rICUuNWYgc2Vjb25kcyBhbmQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbnVtYmVyIG9mIGF2YWlsYWJsZSBwcm9jZXNzb3JzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIG1vbml0b3IgJXMgbmVlZHMgcm9vdCBhY2Nlc3NcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBIVyBDc3RhdGUgbW9uaXRvcnMgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIFsgLWMgY3B1bGlzdCBdIHN1YmNvbW1hbmQgW0FSR1NdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciAtLXZlcnNpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnRlZCBzdWJjb21tYW5kcyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9vayBhdCB0aGUgZ2VuZXJhbCBjcHVwb3dlciBtYW5wYWdlIGhvdyB0byB1c2UgaXRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImFuZCByZWFkIHVwIHRoZSBzdWJjb21tYW5kJ3MgbWFucGFnZSB3aGV0aGVyIGl0IGlzIHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJVc2UgY3B1cG93ZXIgaGVscCBzdWJjb21tYW5kIGZvciBnZXR0aW5nIGhlbHAgZm9yIGFib3ZlIHN1YmNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGVycm9ycyBhbmQgYnVncyB0byAlcywgcGxlYXNlLlxuIgorbXNnc3RyICJQZXIgZmF2b3JlLCBjb211bmljYXJlIGVycm9yaSBlIG1hbGZ1bnppb25hbWVudGkgYSAlcy5cbiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3IgcGFyc2luZyBjcHUgbGlzdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTcyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1YmNvbW1hbmQgJXMgbmVlZHMgcm9vdCBwcml2aWxlZ2VzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ291bGRuJ3QgY291bnQgdGhlIG51bWJlciBvZiBDUFVzICglczogJXMpLCBhc3N1bWluZyAxXG4iCittc2dzdHIgIkltcG9zc2liaWxlIGRldGVybWluYXJlIGlsIG51bWVybyBkaSBDUFUgKCVzOiAlcyksIGFzc3VtbyBzaWEgMVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICAgIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICAtICBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisiICAgICAgICAgIGZyZXF1ZW56YSBtaW5pbWEgQ1BVICAgLSAgZnJlcXVlbnphIG1hc3NpbWEgQ1BVICAtICBnZXN0b3JlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE1MQorIywgYy1mb3JtYXQKK21zZ2lkICJFcnJvciB3aGlsZSBldmFsdWF0aW5nIEJvb3N0IENhcGFiaWxpdGllcyBvbiBDUFUgJWQgLS0gYXJlIHlvdSByb290P1xuIgorbXNnc3RyICIiCisKKyMuIFAgc3RhdGUgY2hhbmdlcyB2aWEgTVNSIGFyZSBpZGVudGlmaWVkIHZpYSBjcHVpZCA4MDAwMDAwNworIy4gb24gSW50ZWwgYW5kIEFNRCwgYnV0IHdlIGFzc3VtZSBib29zdCBjYXBhYmxlIG1hY2hpbmVzIGNhbiBkbyB0aGF0CisjLiBpZiAoY3B1aWRfZWF4KDB4ODAwMDAwMDApID49IDB4ODAwMDAwMDcKKyMuICYmIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA3KSkpCisjLgorIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYm9vc3Qgc3RhdGUgc3VwcG9ydDogXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBTdXBwb3J0ZWQ6ICVzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgInllcyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjMgdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0Cittc2dpZCAibm8iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTY0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgICAgQWN0aXZlOiAlc1xuIgorbXNnc3RyICIgIG1vZHVsbyAlc1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIEJvb3N0IFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFRvdGFsIFN0YXRlczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxODEKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAgIFBzdGF0ZS1QYiVkOiAlbHVNSHogKGJvb3N0IHN0YXRlKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4NAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVAlZDogICVsdU1IelxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMQorIywgYy1mb3JtYXQKK21zZ2lkICIgIG5vIG9yIHVua25vd24gY3B1ZnJlcSBkcml2ZXIgaXMgYWN0aXZlIG9uIHRoaXMgQ1BVXG4iCittc2dzdHIgIiAgbmVzc3VuIG1vZHVsbyBvIG1vZHVsbyBjcHVmcmVxIHNjb25vc2NpdXRvIHBlciBxdWVzdGEgQ1BVXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBtb2R1bG8gJXNcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjE5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgQ1BVcyB3aGljaCBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5OiAiCittc2dzdHIgIiAgQ1BVIGNoZSBvcGVyYW5vIGFsbGEgc3Rlc3NhIGZyZXF1ZW56YSBoYXJkd2FyZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBDUFVzIHdoaWNoIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmU6ICIKK21zZ3N0ciAiICBDUFUgY2hlIMOoIG5lY2Vzc2FyaW8gc2lhbm8gY29vcmRpbmF0ZSBkYWwgc29mdHdhcmU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbWF4aW11bSB0cmFuc2l0aW9uIGxhdGVuY3k6ICIKK21zZ3N0ciAiICBsYXRlbnphIG1hc3NpbWEgZHVyYW50ZSBsYSB0cmFuc2l6aW9uZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNDcKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBoYXJkd2FyZSBsaW1pdHM6ICIKK21zZ3N0ciAiICBsaW1pdGkgaGFyZHdhcmU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjU2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGZyZXF1ZW5jeSBzdGVwczogIgorbXNnc3RyICIgIGZyZXF1ZW56ZSBkaXNwb25pYmlsaTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnM6ICIKK21zZ3N0ciAiICBnZXN0b3JpIGRpc3BvbmliaWxpOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGN1cnJlbnQgcG9saWN5OiBmcmVxdWVuY3kgc2hvdWxkIGJlIHdpdGhpbiAiCittc2dzdHIgIiAgZ2VzdG9yZSBhdHR1YWxlOiBsYSBmcmVxdWVuemEgZGV2ZSBtYW50ZW5lcnNpIHRyYSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgYW5kICIKK21zZ3N0ciAiIGUgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBnb3Zlcm5vciBcIiVzXCIgbWF5IGRlY2lkZSB3aGljaCBzcGVlZCB0byB1c2VcbiIKKyIgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhpcyByYW5nZS5cbiIKK21zZ3N0ciAiIgorIiBJbCBnZXN0b3JlIFwiJXNcIiBwdcOyIGRlY2lkZXJlIHF1YWxlIHZlbG9jaXTDoCB1c2FyZVxuIgorIiAgICAgICAgICAgICAgICAgIGluIHF1ZXN0byBpbnRlcnZhbGxvLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IENQVSBmcmVxdWVuY3kgaXMgIgorbXNnc3RyICIgIGxhIGZyZXF1ZW56YSBhdHR1YWxlIGRlbGxhIENQVSDDqCAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGFzc2VydGVkIGJ5IGNhbGwgdG8gaGFyZHdhcmUpIgorbXNnc3RyICIgKG90dGVudXRhIGRhIHVuYSBjaGlhbWF0YSBkaXJldHRhIGFsbCdoYXJkd2FyZSkiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGNwdWZyZXEgc3RhdHM6ICIKK21zZ3N0ciAiIHN0YXRpc3RpY2hlIGNwdWZyZXE6IgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNvOiBjcHVmcmVxLWluZm8gW29wemlvbmldXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3MyB1dGlscy9jcHVmcmVxLXNldC5jOjI2IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIzCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjIgdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ4CisjLCBjLWZvcm1hdAorbXNnaWQgIk9wdGlvbnM6XG4iCittc2dzdHIgIk9wemlvbmk6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtZSwgLS1kZWJ1ZyAgICAgICAgICBQcmludHMgb3V0IGRlYnVnIGluZm9ybWF0aW9uIFtkZWZhdWx0XVxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIE1vc3RyYSBpbmZvcm1hemlvbmkgZGkgZGVidWdcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mLCAtLWZyZXEgICAgICAgICAgIEdldCBmcmVxdWVuY3kgdGhlIENQVSBjdXJyZW50bHkgcnVucyBhdCwgYWNjb3JkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3B1ZnJlcSBjb3JlICpcbiIKK21zZ3N0ciAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgTW9zdHJhIGxhIGZyZXF1ZW56YSBhdHR1YWxlIGRlbGxhIENQVSBzZWNvbmRvXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbCBtb2R1bG8gY3B1ZnJlcSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdywgLS1od2ZyZXEgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGl0IGZyb20gaGFyZHdhcmUgKG9ubHkgYXZhaWxhYmxlIHRvIHJvb3QpICpcbiIKK21zZ3N0ciAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgTW9zdHJhIGxhIGZyZXF1ZW56YSBhdHR1YWxlIGRlbGxhIENQVSBsZWdnZW5kb2xhXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBkYWxsJ2hhcmR3YXJlIChkaXNwb25pYmlsZSBzb2xvIHBlciBsJ3V0ZW50ZSByb290KSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ3OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gQ1BVIGZyZXF1ZW5jeSAiCisiYWxsb3dlZCAqXG4iCittc2dzdHIgIiIKKyIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluYSBsZSBmcmVxdWVuemUgbWluaW1hIGUgbWFzc2ltYSBwb3NzaWJpbGkgcGVyICIKKyJsYSBDUFUgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZCwgLS1kcml2ZXIgICAgICAgICBEZXRlcm1pbmVzIHRoZSB1c2VkIGNwdWZyZXEga2VybmVsIGRyaXZlciAqXG4iCittc2dzdHIgIiIKKyIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluYSBpbCBtb2R1bG8gY3B1ZnJlcSBkZWwga2VybmVsIGluIHVzbyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEdldHMgdGhlIGN1cnJlbnRseSB1c2VkIGNwdWZyZXEgcG9saWN5ICpcbiIKK21zZ3N0ciAiIgorIiAgLXAsIC0tcG9saWN5ICAgICAgICAgTW9zdHJhIGlsIGdlc3RvcmUgY3B1ZnJlcSBhdHR1YWxtZW50ZSBpbiB1c28gKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmVzIGF2YWlsYWJsZSBjcHVmcmVxIGdvdmVybm9ycyAqXG4iCittc2dzdHIgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5hIGkgZ2VzdG9yaSBjcHVmcmVxIGRpc3BvbmliaWxpICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgIgorImZyZXF1ZW5jeSAqXG4iCittc2dzdHIgIiIKKyIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluYSBxdWFsaSBDUFUgb3BlcmFubyBhbGxhIHN0ZXNzYSBmcmVxdWVuemEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3lcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGVkIGJ5IHNvZnR3YXJlICpcbiIKK21zZ3N0ciAiIgorIiAgLWEsIC0tYWZmZWN0ZWQtY3B1cyAgRGV0ZXJtaW5hIHF1YWxpIENQVSBkZXZvbm8gYXZlcmUgbGEgZnJlcXVlbnphXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRhIGRhbCBzb2Z0d2FyZSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1zLCAtLXN0YXRzICAgICAgICAgIFNob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGVcbiIKK21zZ3N0ciAiICAtcywgLS1zdGF0cyAgICAgICAgICBNb3N0cmEgbGUgc3RhdGlzdGljaGUgc2UgZGlzcG9uaWJpbGlcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIERldGVybWluZXMgdGhlIG1heGltdW0gbGF0ZW5jeSBvbiBDUFUgZnJlcXVlbmN5ICIKKyJjaGFuZ2VzICpcbiIKK21zZ3N0ciAiIgorIiAgLXksIC0tbGF0ZW5jeSAgICAgICAgRGV0ZXJtaW5hIGxhIGxhdGVuemEgbWFzc2ltYSBkdXJhbnRlIGkgY2FtYmkgZGkgIgorImZyZXF1ZW56YSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1iLCAtLWJvb3N0ICAgICAgICAgIENoZWNrcyBmb3IgdHVyYm8gb3IgYm9vc3QgbW9kZXMgICpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiY3B1ZnJlcVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIDIuNC4gYW5kIGVhcmx5IDIuNi4ga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBTdGFtcGEgbGUgaW5mb3JtYXppb25pIGNvbWUgc2UgcHJvdmVuaXNzZXJvIGRhbGxhXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2NpYSBjcHVmcmVxIC9wcm9jLyBwcmVzZW50ZSBuZWkga2VybmVsXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAyLjQgZWQgaSBwcmltaSAyLjZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIGh1bWFuLXJlYWRhYmxlIG91dHB1dCBmb3IgdGhlIC1mLCAtdywgLXMgYW5kIC15ICIKKyJwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIGZvcm1hdHRhIGwnb3V0cHV0IGRlbGxlIG9wemlvbmkgLWYsIC13LCAtcyBlIC15IGluICIKKyJtYW5pZXJhXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBsZWdnaWJpbGUgZGEgdW4gZXNzZXJlIHVtYW5vXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgU3RhbXBhIHF1ZXN0YSBzY2hlcm1hdGFcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDk1CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJJZiBubyBhcmd1bWVudCBvciBvbmx5IHRoZSAtYywgLS1jcHUgcGFyYW1ldGVyIGlzIGdpdmVuLCBkZWJ1ZyBvdXRwdXQgYWJvdXRcbiIKKyJjcHVmcmVxIGlzIHByaW50ZWQgd2hpY2ggaXMgdXNlZnVsIGUuZy4gZm9yIHJlcG9ydGluZyBidWdzLlxuIgorbXNnc3RyICIiCisiU2Ugbm9uIHZpZW5lIHNwZWNpZmljYXRhIG5lc3N1bmEgb3B6aW9uZSBvIHZpZW5lIHNwZWNpZmljYXRhIHNvbG8gbCdvcHppb25lIC0iCisiYywgLS1jcHUsXG4iCisibGUgaW5mb3JtYXppb25pIGRpIGRlYnVnIHBlciBjcHVmcmVxIHNhcmFubm8gdXRpbGkgYWQgZXNlbXBpbyBhIHJpcG9ydGFyZSBpICIKKyJidWcuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9yIHRoZSBhcmd1bWVudHMgbWFya2VkIHdpdGggKiwgb21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzXG4iCisiZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIHplcm9cbiIKK21zZ3N0ciAiIgorIlBlciBsZSBvcHppb25pIHNlZ25hbGF0ZSBjb24gKiwgb21ldHRlcmUgbCdvcHppb25lIC1jIG8gLS1jcHUgw6ggY29tZSAiCisic3BlY2lmaWNhcmxhXG4iCisiY29uIGlsIHZhbG9yZSAwXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU4MAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiVGhlIGFyZ3VtZW50IHBhc3NlZCB0byB0aGlzIHRvb2wgY2FuJ3QgYmUgY29tYmluZWQgd2l0aCBwYXNzaW5nIGEgLS1jcHUgIgorImFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJMJ29wemlvbmUgc3BlY2lmaWNhdGEgYSBxdWVzdG8gcHJvZ3JhbW1hIG5vbiBwdcOyIGVzc2VyZSBjb21iaW5hdGEgY29uIC0tY3B1XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjU5NgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLWNwdSBwYXJhbWV0ZXIgYW5kL29yXG4iCisibW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk5vbiDDqCBwb3NzaWJpbGUgc3BlY2lmaWNhcmUgcGnDuSBkaSB1bmEgdm9sdGEgbCdvcHppb25lIC0tY3B1IGUvb1xuIgorInNwZWNpZmljYXJlIHBpw7kgZGkgdW4gcGFyYW1ldHJvIGRpIG91dHB1dCBzcGVjaWZpY29cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjAwIHV0aWxzL2NwdWZyZXEtc2V0LmM6ODIgdXRpbHMvY3B1cG93ZXItc2V0LmM6NDIKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzo0MiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iCittc2dzdHIgIm9wemlvbmUgc2Nvbm9zY2l1dGEgbyBub24gdmFsaWRhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBhbmFseXplIENQVSAlZCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudFxuIgorbXNnc3RyICJpbXBvc3NpYmlsZSBhbmFsaXp6YXJlIGxhIENQVSAlZCBwb2ljaMOpIG5vbiBzZW1icmEgZXNzZXJlIHByZXNlbnRlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYyMCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWxpc2kgZGVsbGEgQ1BVICVkOlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjI1CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgZnJlcXVlbmN5LXNldCBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNvOiBjcHVmcmVxLXNldCBbb3B6aW9uaV1cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIGxhIG51b3ZhIGZyZXF1ZW56YSBtaW5pbWEgY2hlIGlsIGdlc3RvcmUgY3B1ZnJlcSAiCisicHXDsiBzY2VnbGllcmVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbmV3IG1heGltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIGxhIG51b3ZhIGZyZXF1ZW56YSBtYXNzaW1hIGNoZSBpbCBnZXN0b3JlIGNwdWZyZXEgIgorInB1w7Igc2NlZ2xpZXJlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgbmV3IGNwdWZyZXEgZ292ZXJub3JcbiIKK21zZ3N0ciAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgbnVvdm8gZ2VzdG9yZSBjcHVmcmVxXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzAKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljIGZyZXF1ZW5jeSB0byBiZSBzZXQuIFJlcXVpcmVzIHVzZXJzcGFjZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdmVybm9yIHRvIGJlIGF2YWlsYWJsZSBhbmQgbG9hZGVkXG4iCittc2dzdHIgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBzcGVjaWZpY2EgbGEgZnJlcXVlbnphIGEgY3VpIGltcG9zdGFyZSBsYSBDUFUuXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgw4ggbmVjZXNzYXJpbyBjaGUgaWwgZ2VzdG9yZSB1c2Vyc3BhY2Ugc2lhICIKKyJkaXNwb25pYmlsZSBlIGNhcmljYXRvXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgU3dpdGNoZXMgYWxsIGhhcmR3YXJlLXJlbGF0ZWQgQ1BVc1xuIgorbXNnc3RyICIiCisiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgTW9kaWZpY2EgdHV0dGUgbGUgQ1BVIGNvb3JkaW5hdGUgZGFsbCdoYXJkd2FyZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMzIHV0aWxzL2NwdXBvd2VyLXNldC5jOjI4IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAgLWgsIC0taGVscCAgICAgICAgICAgICAgIFN0YW1wYSBxdWVzdGEgc2NoZXJtYXRhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlczpcbiIKKyIxLiBPbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIFwiYWxsXCJcbiIKK21zZ3N0ciAiIgorIlBlciBsZSBvcHppb25pIHNlZ25hbGF0ZSBjb24gKiwgb21ldHRlcmUgbCdvcHppb25lIC1jIG8gLS1jcHUgw6ggY29tZSAiCisic3BlY2lmaWNhcmxhXG4iCisiY29uIGlsIHZhbG9yZSAwXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzcKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIyLiBUaGUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciAiCisicGFyYW1ldGVyXG4iCisiICAgZXhjZXB0IHRoZSAtYyBDUFUsIC0tY3B1IENQVSBwYXJhbWV0ZXJcbiIKKyIzLiBGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6XG4iCisiICAgYnkgcG9zdGZpeGluZyB0aGUgdmFsdWUgd2l0aCB0aGUgd2FudGVkIHVuaXQgbmFtZSwgd2l0aG91dCBhbnkgc3BhY2VcbiIKKyIgICAoRlJFUXVlbmN5IGluIGtIeiA9XiBIeiAqIDAuMDAxID1eIE1IeiAqIDEwMDAgPV4gR0h6ICogMTAwMDAwMCkuXG4iCittc2dzdHIgIiIKKyJOb3RlOlxuIgorIjEuIE9tZXR0ZXJlIGwnb3B6aW9uZSAtYyBvIC0tY3B1IMOoIGVxdWl2YWxlbnRlIGEgaW1wb3N0YXJsbyBhIDBcbiIKKyIyLiBsJ29wemlvbmUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgbm9uIHB1w7IgZXNzZXJlIHNwZWNpZmljYXRhIGNvbiBhbHRyZSAiCisib3B6aW9uaVxuIgorIiAgIGFkIGVjY2V6aW9uZSBkZWxsJ29wemlvbmUgLWMgQ1BVIG8gLS1jcHUgQ1BVXG4iCisiMy4gbGUgRlJFUXVlbnplIHBvc3Nvbm8gZXNzZXJlIHNwZWN1ZmljYXRlIGluICBIeiwga0h6IChkZWZhdWx0KSwgTUh6LCBHSHosICIKKyJvciBUSHpcbiIKKyIgICBwb3N0cG9uZW5kbyBsJ3VuaXTDoCBkaSBtaXN1cmEgYWwgdmFsb3JlIHNlbnphIG5lc3N1bm8gc3BhemlvIGZyYSBsb3JvXG4iCisiICAgKEZSRVF1ZW56YSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjU3CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJFcnJvciBzZXR0aW5nIG5ldyB2YWx1ZXMuIENvbW1vbiBlcnJvcnM6XG4iCisiLSBEbyB5b3UgaGF2ZSBwcm9wZXIgYWRtaW5pc3RyYXRpb24gcmlnaHRzPyAoc3VwZXItdXNlcj8pXG4iCisiLSBJcyB0aGUgZ292ZXJub3IgeW91IHJlcXVlc3RlZCBhdmFpbGFibGUgYW5kIG1vZHByb2JlZD9cbiIKKyItIFRyeWluZyB0byBzZXQgYW4gaW52YWxpZCBwb2xpY3k/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5LCBidXQgdXNlcnNwYWNlIGdvdmVybm9yIGlzIG5vdCAiCisiYXZhaWxhYmxlLFxuIgorIiAgIGZvciBleGFtcGxlIGJlY2F1c2Ugb2YgaGFyZHdhcmUgd2hpY2ggY2Fubm90IGJlIHNldCB0byBhIHNwZWNpZmljICIKKyJmcmVxdWVuY3lcbiIKKyIgICBvciBiZWNhdXNlIHRoZSB1c2Vyc3BhY2UgZ292ZXJub3IgaXNuJ3QgbG9hZGVkP1xuIgorbXNnc3RyICIiCisiU2kgc29ubyB2ZXJpZmljYXRpIGRlZ2xpIGVycm9yaSBpbXBvc3RhbmRvIGkgbnVvdmkgdmFsb3JpLlxuIgorIkFsY3VuaSBlcnJvcmkgY29tdW5pIHBvc3Nvbm8gZXNzZXJlOlxuIgorIi0gSGFpIGkgbmVjZXNzYXJpIGRpcml0dGkgZGkgYW1taW5pc3RyYXppb25lPyAoc3VwZXItdXNlcj8pXG4iCisiLSBJbCBnZXN0b3JlIGNoZSBoYWkgcmljaGllc3RvIMOoIGRpc3BvbmliaWxlIGUgY2FyaWNhdG8/XG4iCisiLSBTdGFpIHByb3ZhbmRvIGFkIGltcG9zdGFyZSB1bmEgcG9saXRpY2EgZGkgZ2VzdGlvbmUgbm9uIHZhbGlkYT9cbiIKKyItIFN0YWkgcHJvdmFuZG8gYSBpbXBvc3RhcmUgdW5hIHNwZWNpZmljYSBmcmVxdWVuemEgbWEgaWwgZ2VzdG9yZVxuIgorIiAgdXNlcnNwYWNlIG5vbiDDqCBkaXNwb25pYmlsZSwgcGVyIGVzZW1waW8gYSBjYXVzYSBkZWxsJ2hhcmR3YXJlXG4iCisiICBjaGUgbm9uIHN1cHBvcnRhIGZyZXF1ZW56ZSBmaXNzZSBvIGEgY2F1c2EgZGVsIGZhdHRvIGNoZVxuIgorIiAgaWwgZ2VzdG9yZSB1c2Vyc3BhY2Ugbm9uIMOoIGNhcmljYXRvP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZywgdW5rbm93biBvciB1bmhhbmRsZWQgQ1BVP1xuIgorbXNnc3RyICJDUFUgZXJyYXRhLCBzY29ub3NjaXV0YSBvIG5vbiBnZXN0aXRhP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwMgorIywgYy1mb3JtYXQKK21zZ2lkICIiCisidGhlIC1mLy0tZnJlcSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggLWQvLS1taW4sIC11Ly0tbWF4IG9yXG4iCisiLWcvLS1nb3Zlcm5vciBwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyJsJ29wemlvbmUgLWYvLS1mcmVxIG5vbiBwdcOyIHZlbmlyZSBjb21iaW5hdGEgY29uIGkgcGFyYW1ldHJpXG4iCisiIC1kLy0tbWluLCAtdS8tLW1heCBvIC1nLy0tZ292ZXJub3JcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKyItZy8tLWdvdmVybm9yIG11c3QgYmUgcGFzc2VkXG4iCittc2dzdHIgIiIKKyJBbG1lbm8gdW5hIGRlbGxlIG9wemlvbmkgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGUgLWcvLS1nb3Zlcm5vclxuIgorImRldmUgZXNzZXJlIHNwZWNpZmljYXRhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3B1OiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBzZXQgWyAtYiB2YWwgXSBbIC1tIHZhbCBdIFsgLXMgdmFsIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgW1ZBTF0gICAgU2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0tc2NoZWQtbWMgIFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyICIKKyJwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1wZXJmLWJpYXMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtbWMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLXNtdCBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtbWMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBwZXJmLWJpYXMgdmFsdWUgb24gQ1BVICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpbmZvIFsgLWIgXSBbIC1tIF0gWyAtcyBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyAgICBHZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLW0sIC0tc2NoZWQtbWMgICAgIEdldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorIiAgLXAsIC0tcG9saWN5ICAgICAgICAgTW9zdHJhIGlsIGdlc3RvcmUgY3B1ZnJlcSBhdHR1YWxtZW50ZSBpbiB1c28gKlxuIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXMsIC0tc2NoZWQtc210ICAgIEdldHMgdGhlIGtlcm5lbCdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI4CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJQYXNzaW5nIG5vIG9wdGlvbiB3aWxsIHNob3cgYWxsIGluZm8sIGJ5IGRlZmF1bHQgb25seSBvbiBjb3JlIDBcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTAyCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjLiBpZiBzeXNmcyBmaWxlIGlzIG1pc3NpbmcgaXQnczogZXJybm8gPT0gRU5PRU5UCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTA1IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTQKKyMsIGMtZm9ybWF0Cittc2dpZCAibm90IHN1cHBvcnRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyIHNldHRpbmc6ICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI2CisjLCBjLWZvcm1hdAorbXNnaWQgIkludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxMjgKKyMsIGMtZm9ybWF0Cittc2dpZCAiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBwZXJmb3JtYW5jZSBiaWFzIHNldHRpbmdcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCByZWFkIHBlcmYtYmlhcyB2YWx1ZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoxNTAKKyMsIGMtZm9ybWF0Cittc2dpZCAicGVyZi1iaWFzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjI4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBbmFseXppbmcgQ1BVICVkOlxuIgorbXNnc3RyICJhbmFsaXNpIGRlbGxhIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBObyBpZGxlIHN0YXRlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBpZGxlIHN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIG1heCBpZGxlIHN0YXRlICV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTnVtYmVyIG9mIGlkbGUgc3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgaWRsZSBzdGF0ZXM6IgorbXNnc3RyICIgIGZyZXF1ZW56ZSBkaXNwb25pYmlsaTogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3MQorIywgYy1mb3JtYXQKK21zZ2lkICJGbGFncy9EZXNjcmlwdGlvbjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NAorIywgYy1mb3JtYXQKK21zZ2lkICJMYXRlbmN5OiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3NgorIywgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogJWx1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NzgKKyMsIGMtZm9ybWF0Cittc2dpZCAiRHVyYXRpb246ICVsbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5MAorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZHJpdmVyXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6OTQKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIkNQVWlkbGUgZHJpdmVyOiAlc1xuIgorbXNnc3RyICIgIG1vZHVsbyAlc1xuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBnb3Zlcm5vcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIEMtc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyMuIHByaW50ZigiQ3N0YXRlczogJWRcbiIsIGNzdGF0ZXMpOworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImFjdGl2ZSBzdGF0ZTogICAgICAgICAgICBDMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJtYXhfY3N0YXRlOiAgICAgICAgICAgICAgQyV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtYXhpbXVtIGFsbG93ZWQgbGF0ZW5jeTogJWx1IHVzZWNcbiIKK21zZ3N0ciAiICBsYXRlbnphIG1hc3NpbWEgZHVyYW50ZSBsYSB0cmFuc2l6aW9uZTogIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzAKKyMsIGMtZm9ybWF0Cittc2dpZCAic3RhdGVzOlx0XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBDJWQ6ICAgICAgICAgICAgICAgICAgdHlwZVtDJWRdICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzQKKyMsIGMtZm9ybWF0Cittc2dpZCAicHJvbW90aW9uWy0tXSBkZW1vdGlvblstLV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNQorIywgYy1mb3JtYXQKK21zZ2lkICJsYXRlbmN5WyUwM2x1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM3CisjLCBjLWZvcm1hdAorbXNnaWQgInVzYWdlWyUwOGx1XSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM5CisjLCBjLWZvcm1hdAorbXNnaWQgImR1cmF0aW9uWyUwMjBMdV0gXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTQ3CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJVc2FnZTogY3B1cG93ZXIgaWRsZWluZm8gW29wdGlvbnNdXG4iCittc2dzdHIgIlVzbzogY3B1ZnJlcS1pbmZvIFtvcHppb25pXVxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc2lsZW50ICAgICAgICAgT25seSBzaG93IGdlbmVyYWwgQy1zdGF0ZSBpbmZvcm1hdGlvblxuIgorbXNnc3RyICIgIC1lLCAtLWRlYnVnICAgICAgICAgIE1vc3RyYSBpbmZvcm1hemlvbmkgZGkgZGVidWdcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTUwCisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBQcmludHMgb3V0IGluZm9ybWF0aW9uIGxpa2UgcHJvdmlkZWQgYnkgdGhlIC9wcm9jLyIKKyJhY3BpL3Byb2Nlc3Nvci8qL3Bvd2VyXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaW4gb2xkZXIga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBTdGFtcGEgbGUgaW5mb3JtYXppb25pIGNvbWUgc2UgcHJvdmVuaXNzZXJvIGRhbGxhXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2NpYSBjcHVmcmVxIC9wcm9jLyBwcmVzZW50ZSBuZWkga2VybmVsXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAyLjQgZWQgaSBwcmltaSAyLjZcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MjA5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiTm9uIMOoIHBvc3NpYmlsZSBzcGVjaWZpY2FyZSBwacO5IGRpIHVuYSB2b2x0YSBsJ29wemlvbmUgLS1jcHUgZS9vXG4iCisic3BlY2lmaWNhcmUgcGnDuSBkaSB1biBwYXJhbWV0cm8gZGkgb3V0cHV0IHNwZWNpZmljb1xuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgQ1BVIG51bWJlciB3aGljaCBpbmZvcm1hdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkICIKKyN+ICJhYm91dFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBOdW1lcm8gZGkgQ1BVIHBlciBsYSBxdWFsZSBvdHRlbmVyZSBsZSAiCisjfiAiaW5mb3JtYXppb25pXG4iCisKKyN+IG1zZ2lkICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgbnVtYmVyIG9mIENQVSB3aGVyZSBjcHVmcmVxIHNldHRpbmdzIHNoYWxsIGJlICIKKyN+ICJtb2RpZmllZFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICAgICAgbnVtZXJvIGRpIENQVSBwZXIgbGEgcXVhbGUgbW9kaWZpY2FyZSBsZSAiCisjfiAiaW1wb3N0YXppb25pXG4iCisKKyMsIGZ1enp5CisjfiBtc2dpZCAiICBDUFVzIHdoaWNoIGNvb3JkaW5hdGUgc29mdHdhcmUgZnJlcXVlbmN5IHJlcXVpcmVtZW50czogIgorI34gbXNnc3RyICIiCisjfiAiICBDUFUgcGVyIGxlIHF1YWxpIGVgIG5lY2Vzc2FyaW8gY2FtYmlhcmUgbGEgZnJlcXVlbnphICIKKyN+ICJjb250ZW1wb3JhbmVhbWVudGU6ICIKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL3B0LnBvIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvcG8vcHQucG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkwZjUyNgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3BvL3B0LnBvCkBAIC0wLDAgKzEsOTU3IEBACisjIEJyYXppbGlhbiBQb3J0dWd1ZXNlIHRyYW5zbGF0aW9ucyBmb3IgY3B1ZnJlcXV0aWxzIHBhY2thZ2UKKyMgQ29weXJpZ2h0IChDKSAyMDA4IFRIRSBjcHVmcmVxdXRpbHMnUyBDT1BZUklHSFQgSE9MREVSCisjIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBjcHVmcmVxdXRpbHMgcGFja2FnZS4KKyMgQ2xhdWRpbyBFZHVhcmRvIDxjbGF1ZGlvZWRkeUBnbWFpbC5jb20+LCAyMDA5LgorIworIworbXNnaWQgIiIKK21zZ3N0ciAiIgorIlByb2plY3QtSWQtVmVyc2lvbjogY3B1ZnJlcXV0aWxzIDAwNFxuIgorIlJlcG9ydC1Nc2dpZC1CdWdzLVRvOiBcbiIKKyJQT1QtQ3JlYXRpb24tRGF0ZTogMjAxMS0wMy0wOCAxNzowMyswMTAwXG4iCisiUE8tUmV2aXNpb24tRGF0ZTogMjAwOC0wNi0xNCAyMjoxNi0wNDAwXG4iCisiTGFzdC1UcmFuc2xhdG9yOiBDbGF1ZGlvIEVkdWFyZG8gPGNsYXVkaW9lZGR5QGdtYWlsLmNvbT5cbiIKKyJNSU1FLVZlcnNpb246IDEuMFxuIgorIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOFxuIgorIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXRcbiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6MzYKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDMyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYzo0MworbXNnaWQgIlByb2Nlc3NvciBDb3JlIEM2IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jOjUxCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzMiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL25obV9pZGxlLmM6NTggdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjcwCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzYiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmM6MzMKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBDNyIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYzo0MAorbXNnaWQgIlByb2Nlc3NvciBQYWNrYWdlIEMyIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9zbmJfaWRsZS5jOjQ3Cittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzciCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjU2Cittc2dpZCAiUGFja2FnZSBpbiBzbGVlcCBzdGF0ZSAoUEMxIG9yIGRlZXBlcikiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjYzCittc2dpZCAiUHJvY2Vzc29yIFBhY2thZ2UgQzEiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2FtZF9mYW0xNGhfaWRsZS5jOjc3Cittc2dpZCAiTm9ydGggQnJpZGdlIFAxIGJvb2xlYW4gY291bnRlciAocmV0dXJucyAwIG9yIDEpIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9tcGVyZl9tb25pdG9yLmM6MzUKK21zZ2lkICJQcm9jZXNzb3IgQ29yZSBub3QgaWRsZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjQyCittc2dpZCAiUHJvY2Vzc29yIENvcmUgaW4gYW4gaWRsZSBzdGF0ZSIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jOjUwCittc2dpZCAiQXZlcmFnZSBGcmVxdWVuY3kgKGluY2x1ZGluZyBib29zdCkgaW4gTUh6IgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorImNwdXBvd2VyIG1vbml0b3I6IFstaF0gWyBbLXRdIHwgWy1sXSB8IFstbSA8bW9uMT4sWzxtb24yPl0gXSBdIFstaSAiCisiaW50ZXJ2YWxfc2VjIHwgLWMgY29tbWFuZCAuLi5dXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo2OQorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiY3B1cG93ZXIgbW9uaXRvcjogWy12XSBbLWhdIFsgWy10XSB8IFstbF0gfCBbLW0gPG1vbjE+LFs8bW9uMj5dIF0gXSBbLWkgIgorImludGVydmFsX3NlYyB8IC1jIGNvbW1hbmQgLi4uXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzEKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLXY6IGJlIG1vcmUgdmVyYm9zZVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzMKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWg6IHByaW50IHRoaXMgaGVscFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzQKKyMsIGMtZm9ybWF0Cittc2dpZCAiXHQgLWk6IHRpbWUgaW50ZXJ2YWxsIHRvIG1lYXN1cmUgZm9yIGluIHNlY29uZHMgKGRlZmF1bHQgMSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc1CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC10OiBzaG93IENQVSB0b3BvbG9neS9oaWVyYXJjaHlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1sOiBsaXN0IGF2YWlsYWJsZSBDUFUgc2xlZXAgbW9uaXRvcnMgKGZvciB1c2Ugd2l0aCAtbSlcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjc3CisjLCBjLWZvcm1hdAorbXNnaWQgIlx0IC1tOiBzaG93IHNwZWNpZmljIENQVSBzbGVlcCBtb25pdG9ycyBvbmx5IChpbiBzYW1lIG9yZGVyKVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIm9ubHkgb25lIG9mOiAtdCwgLWwsIC1tIGFyZSBhbGxvd2VkXG4iCisiSWYgbm9uZSBvZiB0aGVtIGlzIHBhc3NlZCwiCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgYWxsIHN1cHBvcnRlZCBtb25pdG9ycyBhcmUgc2hvd25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjE5NworIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yICVzLCBDb3VudGVyICVzIGhhcyBubyBjb3VudCBmdW5jdGlvbi4gSW1wbGVtZW50YXRpb24gZXJyb3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIwNworIywgYy1mb3JtYXQKK21zZ2lkICIgKmlzIG9mZmxpbmVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjIzNgorIywgYy1mb3JtYXQKK21zZ2lkICIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGggKCVkKSBleGNlZWRlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmM6MjUwCisjLCBjLWZvcm1hdAorbXNnaWQgIk5vIG1hdGNoaW5nIG1vbml0b3IgZm91bmQgaW4gJXMsIHRyeSAtbCBvcHRpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjI2NgorIywgYy1mb3JtYXQKK21zZ2lkICJNb25pdG9yIFwiJXNcIiAoJWQgc3RhdGVzKSAtIE1pZ2h0IG92ZXJmbG93IGFmdGVyICV1IHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjMxOQorIywgYy1mb3JtYXQKK21zZ2lkICIlcyB0b29rICUuNWYgc2Vjb25kcyBhbmQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ2Fubm90IHJlYWQgbnVtYmVyIG9mIGF2YWlsYWJsZSBwcm9jZXNzb3JzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuYzo0MTcKKyMsIGMtZm9ybWF0Cittc2dpZCAiQXZhaWxhYmxlIG1vbml0b3IgJXMgbmVlZHMgcm9vdCBhY2Nlc3NcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jOjQyOAorIywgYy1mb3JtYXQKK21zZ2lkICJObyBIVyBDc3RhdGUgbW9uaXRvcnMgZm91bmRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjc4CisjLCBjLWZvcm1hdAorbXNnaWQgImNwdXBvd2VyIFsgLWMgY3B1bGlzdCBdIHN1YmNvbW1hbmQgW0FSR1NdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo3OQorIywgYy1mb3JtYXQKK21zZ2lkICJjcHVwb3dlciAtLXZlcnNpb25cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIlN1cHBvcnRlZCBzdWJjb21tYW5kcyBhcmU6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXIuYzo4MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6ODQKKyMsIGMtZm9ybWF0Cittc2dpZCAiTG9vayBhdCB0aGUgZ2VuZXJhbCBjcHVwb3dlciBtYW5wYWdlIGhvdyB0byB1c2UgaXRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg1CisjLCBjLWZvcm1hdAorbXNnaWQgImFuZCByZWFkIHVwIHRoZSBzdWJjb21tYW5kJ3MgbWFucGFnZSB3aGV0aGVyIGl0IGlzIHN1cHBvcnRlZC5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJcbiIKKyJVc2UgY3B1cG93ZXIgaGVscCBzdWJjb21tYW5kIGZvciBnZXR0aW5nIGhlbHAgZm9yIGFib3ZlIHN1YmNvbW1hbmRzLlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6OTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiUmVwb3J0IGVycm9ycyBhbmQgYnVncyB0byAlcywgcGxlYXNlLlxuIgorbXNnc3RyICJSZXBvcnRlIGVycm9zIGUgYnVncyBwYXJhICVzLCBwb3IgZmF2b3IuXG4iCisKKyM6IHV0aWxzL2NwdXBvd2VyLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHBhcnNpbmcgY3B1IGxpc3RcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci5jOjE3MgorIywgYy1mb3JtYXQKK21zZ2lkICJTdWJjb21tYW5kICVzIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMxCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkbid0IGNvdW50IHRoZSBudW1iZXIgb2YgQ1BVcyAoJXM6ICVzKSwgYXNzdW1pbmcgMVxuIgorbXNnc3RyICJOw6NvIGZvaSBwb3Nzw612ZWwgY29udGFyIG8gbsO6bWVybyBkZSBDUFVzICglczogJXMpLCBhc3N1bWluZG8gMVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo2MworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAgICAgICAgIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSAgLSAgbWF4aW11bSBDUFUgZnJlcXVlbmN5ICAtICBnb3Zlcm5vclxuIgorbXNnc3RyICIiCisiICAgICAgICAgIGZyZXF1w6puY2lhIG3DrW5pbmEgZG8gQ1BVICAtICBmcmVxdcOqbmNpYSBtw6F4aW1hIGRvIENQVSAgLSAgIgorInJlZ3VsYWRvclxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoxNTEKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBCb29zdCBDYXBhYmlsaXRpZXMgb24gQ1BVICVkIC0tIGFyZSB5b3Ugcm9vdD9cbiIKK21zZ3N0ciAiIgorCisjLiBQIHN0YXRlIGNoYW5nZXMgdmlhIE1TUiBhcmUgaWRlbnRpZmllZCB2aWEgY3B1aWQgODAwMDAwMDcKKyMuIG9uIEludGVsIGFuZCBBTUQsIGJ1dCB3ZSBhc3N1bWUgYm9vc3QgY2FwYWJsZSBtYWNoaW5lcyBjYW4gZG8gdGhhdAorIy4gaWYgKGNwdWlkX2VheCgweDgwMDAwMDAwKSA+PSAweDgwMDAwMDA3CisjLiAmJiAoY3B1aWRfZWR4KDB4ODAwMDAwMDcpICYgKDEgPDwgNykpKQorIy4KKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIGJvb3N0IHN0YXRlIHN1cHBvcnQ6IFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgU3VwcG9ydGVkOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2MyB1dGlscy9jcHVmcmVxLWluZm8uYzoxNjQKK21zZ2lkICJ5ZXMiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTYzIHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorbXNnaWQgIm5vIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE2NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAgIEFjdGl2ZTogJXNcbiIKK21zZ3N0ciAiICBkcml2ZXI6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3NworIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQm9vc3QgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE3OAorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgVG90YWwgU3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjE4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgUHN0YXRlLVBiJWQ6ICVsdU1IeiAoYm9vc3Qgc3RhdGUpXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MTg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgICBQc3RhdGUtUCVkOiAgJWx1TUh6XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjExCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbm8gb3IgdW5rbm93biBjcHVmcmVxIGRyaXZlciBpcyBhY3RpdmUgb24gdGhpcyBDUFVcbiIKK21zZ3N0ciAiICBuZW5odW0gb3UgZHJpdmVyIGRvIGNwdWZyZXEgZGVjb25oZWNpZG8gZXN0w6EgYXRpdm8gbmVzc2UgQ1BVXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxMworIywgYy1mb3JtYXQKK21zZ2lkICIgIGRyaXZlcjogJXNcbiIKK21zZ3N0ciAiICBkcml2ZXI6ICVzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIxOQorIywgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggcnVuIGF0IHRoZSBzYW1lIGhhcmR3YXJlIGZyZXF1ZW5jeTogIgorbXNnc3RyICIgIENQVXMgcXVlIHJvZGFtIG5hIG1lc21hIGZyZXF1w6puY2lhIGRlIGhhcmR3YXJlOiAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjIzMAorIywgYy1mb3JtYXQKK21zZ2lkICIgIENQVXMgd2hpY2ggbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeSBjb29yZGluYXRlZCBieSBzb2Z0d2FyZTogIgorbXNnc3RyICIgIENQVXMgcXVlIHByZWNpc2FtIHRlciBzdWFzIGZyZXF1w6puY2lhcyBjb29yZGVuYWRhcyBwb3Igc29mdHdhcmU6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQxCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgbWF4aW11bSB0cmFuc2l0aW9uIGxhdGVuY3k6ICIKK21zZ3N0ciAiICBtYWlvciBsYXTDqm5jaWEgZGUgdHJhbnNpw6fDo286ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgaGFyZHdhcmUgbGltaXRzOiAiCittc2dzdHIgIiAgbGltaXRlcyBkbyBoYXJkd2FyZTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyNTYKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBhdmFpbGFibGUgZnJlcXVlbmN5IHN0ZXBzOiAiCittc2dzdHIgIiAgbsOtdmVpcyBkZSBmcmVxdcOqbmNpYSBkaXNwb27DrXZlaXM6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjY5CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgYXZhaWxhYmxlIGNwdWZyZXEgZ292ZXJub3JzOiAiCittc2dzdHIgIiAgcmVndWxhZG9yZXMgZG8gY3B1ZnJlcSBkaXNwb27DrXZlaXM6ICIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6MjgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgY3VycmVudCBwb2xpY3k6IGZyZXF1ZW5jeSBzaG91bGQgYmUgd2l0aGluICIKK21zZ3N0ciAiICBwb2zDrXRpY2EgZGUgZnJlcXXDqm5jaWEgYXR1YWwgZGV2ZSBlc3RhciBlbnRyZSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI4MgorIywgYy1mb3JtYXQKK21zZ2lkICIgYW5kICIKK21zZ3N0ciAiIGUgIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyODYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIlRoZSBnb3Zlcm5vciBcIiVzXCIgbWF5IGRlY2lkZSB3aGljaCBzcGVlZCB0byB1c2VcbiIKKyIgICAgICAgICAgICAgICAgICB3aXRoaW4gdGhpcyByYW5nZS5cbiIKK21zZ3N0ciAiIgorIk8gcmVndWxhZG9yIFwiJXNcIiBkZXZlIGRlY2lkaXIgcXVhbCB2ZWxvY2lkYWRlIHVzYXJcbiIKKyIgICAgICAgICAgICAgICAgICBkZW50cm8gZGVzc2UgbGltaXRlLlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzoyOTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiICBjdXJyZW50IENQVSBmcmVxdWVuY3kgaXMgIgorbXNnc3RyICIgIGZyZXF1w6puY2lhIGF0dWFsIGRvIENQVSDDqSAiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjI5NgorIywgYy1mb3JtYXQKK21zZ2lkICIgKGFzc2VydGVkIGJ5IGNhbGwgdG8gaGFyZHdhcmUpIgorbXNnc3RyICIgKGRlY2xhcmFkbyBwb3IgY2hhbWFkYSBhbyBoYXJkd2FyZSkiCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjMwNAorIywgYy1mb3JtYXQKK21zZ2lkICIgIGNwdWZyZXEgc3RhdHM6ICIKK21zZ3N0ciAiICBzdGF0dXMgZG8gY3B1ZnJlcTogIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzIKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxaW5mbyBbb3B0aW9uc11cbiIKK21zZ3N0ciAiVXNvOiBjcHVmcmVxLWluZm8gW29ww6fDtWVzXVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzMgdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNiB1dGlscy9jcHVwb3dlci1zZXQuYzoyMworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIyIHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OAorIywgYy1mb3JtYXQKK21zZ2lkICJPcHRpb25zOlxuIgorbXNnc3RyICJPcMOnw7VlczpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDc0CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICIgIC1lLCAtLWRlYnVnICAgICAgICAgIFByaW50cyBvdXQgZGVidWcgaW5mb3JtYXRpb24gW2RlZmF1bHRdXG4iCittc2dzdHIgIiAgLWUsIC0tZGVidWcgICAgICAgICAgTW9zdHJhIGluZm9ybWHDp8OjbyBkZSBkZWJ1Z1xuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWYsIC0tZnJlcSAgICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBhY2NvcmRpbmdcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBjcHVmcmVxIGNvcmUgKlxuIgorbXNnc3RyICIiCisiICAtZiwgLS1mcmVxICAgICAgICAgICBPYnRlbSBhIGZyZXF1w6puY2lhIG5hIHF1YWwgbyBDUFUgcm9kYSBubyBtb21lbnRvLCBkZSAiCisiYWNvcmRvXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb20gbyBuw7pjbGVvIGRvIGNwdWZyZXEgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzcKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXcsIC0taHdmcmVxICAgICAgICAgR2V0IGZyZXF1ZW5jeSB0aGUgQ1BVIGN1cnJlbnRseSBydW5zIGF0LCBieSByZWFkaW5nXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBpdCBmcm9tIGhhcmR3YXJlIChvbmx5IGF2YWlsYWJsZSB0byByb290KSAqXG4iCittc2dzdHIgIiIKKyIgIC13LCAtLWh3ZnJlcSAgICAgICAgIE9idGVtIGEgZnJlcXXDqm5jaWEgbmEgcXVhbCBvIENQVSBlc3TDoSBvcGVyYW5kbyBubyAiCisibW9tZW50byxcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGF0cmF2w6lzIGRlIGxlaXR1cmEgbm8gaGFyZHdhcmUgKGRpc3BvbsOtdmVsIHNvbWVudGUgIgorInBhcmEgcm9vdCkgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0NzkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLWwsIC0taHdsaW1pdHMgICAgICAgRGV0ZXJtaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIgorImFsbG93ZWQgKlxuIgorbXNnc3RyICIiCisiICAtbCwgLS1od2xpbWl0cyAgICAgICBEZXRlcm1pbmEgYSBmcmVxdcOqbmNpYSBtw61uaW1hIGUgbcOheGltYSBkbyBDUFUgIgorInBlcm1pdGlkYSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyICpcbiIKK21zZ3N0ciAiIgorIiAgLWQsICAtLWRyaXZlciAgICAgICAgIERldGVybWluYSBvIGRyaXZlciBkbyBrZXJuZWwgZG8gY3B1ZnJlcSB1c2FkbyAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4MQorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1wLCAtLXBvbGljeSAgICAgICAgIEdldHMgdGhlIGN1cnJlbnRseSB1c2VkIGNwdWZyZXEgcG9saWN5ICpcbiIKK21zZ3N0ciAiIgorIi0tcCwgLS1wb2xpY3kgICAgICAgICBPYnRlbSBhIHBvbMOtdGljYSBkbyBjcHVmcmVxIGVtIHVzbyBubyBtb21lbnRvICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDgyCisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMgKlxuIgorbXNnc3RyICIiCisiICAtZywgLS1nb3Zlcm5vcnMgICAgICBEZXRlcm1pbmEgcmVndWxhZG9yZXMgZG8gY3B1ZnJlcSBkaXNwb27DrXZlaXMgKlxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODMKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLXIsIC0tcmVsYXRlZC1jcHVzICAgRGV0ZXJtaW5lcyB3aGljaCBDUFVzIHJ1biBhdCB0aGUgc2FtZSBoYXJkd2FyZSAiCisiZnJlcXVlbmN5ICpcbiIKK21zZ3N0ciAiIgorIiAgLXIsIC0tcmVsYXRlZC1jcHVzICAgRGV0ZXJtaW5hIHF1YWlzIENQVXMgcm9kYW0gbmEgbWVzbWEgZnJlcXXDqm5jaWEgZGUgIgorImhhcmR3YXJlICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg0CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIERldGVybWluZXMgd2hpY2ggQ1BVcyBuZWVkIHRvIGhhdmUgdGhlaXIgZnJlcXVlbmN5XG4iCisiICAgICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlZCBieSBzb2Z0d2FyZSAqXG4iCittc2dzdHIgIiIKKyIgIC1hLCAtLWFmZmVjdGVkLWNwdXMgIERldGVybWluYSBxdWFpcyBDUFVzIHByZWNpc2FtIHRlciBzdWFzIGZyZXF1w6puY2lhc1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRlbmFkYXMgcG9yIHNvZnR3YXJlICpcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDg2CisjLCBjLWZvcm1hdAorbXNnaWQgIiAgLXMsIC0tc3RhdHMgICAgICAgICAgU2hvd3MgY3B1ZnJlcSBzdGF0aXN0aWNzIGlmIGF2YWlsYWJsZVxuIgorbXNnc3RyICIgIC1zLCAtLXN0YXRzICAgICAgICAgIE1vc3RyYSBlc3RhdMOtc3RpY2FzIGRvIGNwdWZyZXEgc2UgZGlzcG9uw612ZWlzXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSAiCisiY2hhbmdlcyAqXG4iCittc2dzdHIgIiIKKyIgIC15LCAtLWxhdGVuY3kgICAgICAgIERldGVybWluYSBhIGxhdMOqbmNpYSBtw6F4aW1hIG5hcyB0cm9jYXMgZGUgZnJlcXXDqm5jaWEgIgorImRvIENQVSAqXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ4OAorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1iLCAtLWJvb3N0ICAgICAgICAgIENoZWNrcyBmb3IgdHVyYm8gb3IgYm9vc3QgbW9kZXMgICpcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0ODkKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy8iCisiY3B1ZnJlcVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGluIDIuNC4gYW5kIGVhcmx5IDIuNi4ga2VybmVsc1xuIgorbXNnc3RyICIiCisiICAtbywgLS1wcm9jICAgICAgICAgICBNb3N0cmEgaW5mb3JtYcOnw6NvIGRvIHRpcG8gcHJvdmlkYSBwZWxhIGludGVyZmFjZSAvIgorInByb2MvY3B1ZnJlcVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgZW0ga2VybmVscyAyLjQuIGUgbWFpcyByZWNlbnRlcyAyLjZcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NDkxCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIGh1bWFuLXJlYWRhYmxlIG91dHB1dCBmb3IgdGhlIC1mLCAtdywgLXMgYW5kIC15ICIKKyJwYXJhbWV0ZXJzXG4iCittc2dzdHIgIiIKKyIgIC1tLCAtLWh1bWFuICAgICAgICAgIHNhw61kYSBsZWfDrXZlbCBwYXJhIGh1bWFub3MgcGFyYSBvcyBwYXLDom1ldHJvcyAtZiwgLXcsICIKKyItcyBlIC15XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5MiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTIKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtaCwgLS1oZWxwICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAtaCwgLS1oZWxwICAgICAgICAgICBJbXByaW1lIGVzc2EgdGVsYVxuIgorCisjOiB1dGlscy9jcHVmcmVxLWluZm8uYzo0OTUKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIklmIG5vIGFyZ3VtZW50IG9yIG9ubHkgdGhlIC1jLCAtLWNwdSBwYXJhbWV0ZXIgaXMgZ2l2ZW4sIGRlYnVnIG91dHB1dCBhYm91dFxuIgorImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG4iCittc2dzdHIgIiIKKyJTZSBuZW5odW0gYXJndW1lbnRvIG91IHNvbWVudGUgbyBwYXLDom1ldHJvIC1jLCAtLWNwdSDDqSBkYWRvLCBpbmZvcm1hw6fDo28gZGUgIgorImRlYnVnIHNvYnJlXG4iCisibyBjcHVmcmVxIMOpIG1vc3RyYWRhLCBvIHF1ZSDDqSDDunRpbCBwb3IgZXhlbXBsbyBwYXJhIHJlcG9ydGFyIGJ1Z3MuXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjQ5NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRm9yIHRoZSBhcmd1bWVudHMgbWFya2VkIHdpdGggKiwgb21pdHRpbmcgdGhlIC1jIG9yIC0tY3B1IGFyZ3VtZW50IGlzXG4iCisiZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIHplcm9cbiIKK21zZ3N0ciAiIgorIlBhcmEgb3MgYXJndW1lbnRvcyBtYXJjYWRvcyBjb20gKiwgb21pdGlyIG8gYXJndW1lbnRvIC1jIG91IC0tY3B1IMOpXG4iCisiZXF1aXZhbGVudGUgYSBzZXTDoS1sbyBjb21vIHplcm9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTgwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJUaGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgdG9vbCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHBhc3NpbmcgYSAtLWNwdSAiCisiYXJndW1lbnRcbiIKK21zZ3N0ciAiIgorIk8gYXJndW1lbnRvIHVzYWRvIHByYSBlc3NhIGZlcnJhbWVudGEgbsOjbyBwb2RlIHNlciBjb21iaW5hZG8gY29tIHVtICIKKyJhcmd1bWVudG8gLS1jcHVcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NTk2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyJZb3UgY2FuJ3Qgc3BlY2lmeSBtb3JlIHRoYW4gb25lIC0tY3B1IHBhcmFtZXRlciBhbmQvb3JcbiIKKyJtb3JlIHRoYW4gb25lIG91dHB1dC1zcGVjaWZpYyBhcmd1bWVudFxuIgorbXNnc3RyICIiCisiVm9jw6ogbsOjbyBwb2RlIGVzcGVjaWZpY2FyIG1haXMgZG8gcXVlIHVtIHBhcsOibWV0cm8gLS1jcHUgZS9vdVxuIgorIm1haXMgZG8gcXVlIHVtIGFyZ3VtZW50byBkZSBzYcOtZGEgZXNwZWPDrWZpY29cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1pbmZvLmM6NjAwIHV0aWxzL2NwdWZyZXEtc2V0LmM6ODIgdXRpbHMvY3B1cG93ZXItc2V0LmM6NDIKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzo0MiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMTMKKyMsIGMtZm9ybWF0Cittc2dpZCAiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iCittc2dzdHIgImFyZ3VtZW50byBpbnbDoWxpZG8gb3UgZGVzY29uaGVjaWRvXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYxNworIywgYy1mb3JtYXQKK21zZ2lkICJjb3VsZG4ndCBhbmFseXplIENQVSAlZCBhcyBpdCBkb2Vzbid0IHNlZW0gdG8gYmUgcHJlc2VudFxuIgorbXNnc3RyICIiCisibsOjbyBmb2kgcG9zc8OtdmVsIGFuYWxpc2FyIG8gQ1BVICUgasOhIHF1ZSBvIG1lc21vIHBhcmVjZSBuw6NvIGVzdGFyIHByZXNlbnRlXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtaW5mby5jOjYyMCB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTQyCisjLCBjLWZvcm1hdAorbXNnaWQgImFuYWx5emluZyBDUFUgJWQ6XG4iCittc2dzdHIgImFuYWxpc2FuZG8gbyBDUFUgJWQ6XG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBmcmVxdWVuY3ktc2V0IFtvcHRpb25zXVxuIgorbXNnc3RyICJVc286IGNwdWZyZXEtc2V0IFtvcMOnw7Vlc11cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLWQgRlJFUSwgLS1taW4gRlJFUSAgICAgIG5vdmEgZnJlcXXDqm5jaWEgbcOtbmltYSBkbyBDUFUgcXVlIG8gcmVndWxhZG9yICIKKyJkZXZlIHNlbGVjaW9uYXJcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtdSBGUkVRLCAtLW1heCBGUkVRICAgICAgbmV3IG1heGltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5ICIKKyJzZWxlY3RcbiIKK21zZ3N0ciAiIgorIiAgLXUgRlJFUSwgLS1tYXggRlJFUSAgICAgIG5vdmEgZnJlcXXDqm5jaWEgbcOheGltYSBkbyBDUFUgcXVlIG8gcmVndWxhZG9yICIKKyJkZXZlIGVzY29saGVyXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MjkKKyMsIGMtZm9ybWF0Cittc2dpZCAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgbmV3IGNwdWZyZXEgZ292ZXJub3JcbiIKK21zZ3N0ciAiICAtZyBHT1YsIC0tZ292ZXJub3IgR09WICAgbm92byByZWd1bGFkb3IgZG8gY3B1ZnJlcVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMwCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1mIEZSRVEsIC0tZnJlcSBGUkVRICAgICBzcGVjaWZpYyBmcmVxdWVuY3kgdG8gYmUgc2V0LiBSZXF1aXJlcyB1c2Vyc3BhY2VcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Zlcm5vciB0byBiZSBhdmFpbGFibGUgYW5kIGxvYWRlZFxuIgorbXNnc3RyICIiCisiICAtZiBGUkVRLCAtLWZyZXEgRlJFUSAgICAgZnJlcXXDqm5jaWEgZXNwZWPDrWZpY2EgcGFyYSBzZXIgc2V0YWRhLiBOZWNlc3NpdGEgIgorInF1ZSBvIHJlZ3VsYWRvciBlbVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIG7DrXZlbCBkZSB1c3XDoXJpbyBlc3RlamEgZGlzcG9uw612ZWwgZSBjYXJyZWdhZG9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMgorIywgYy1mb3JtYXQKK21zZ2lkICIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBTd2l0Y2hlcyBhbGwgaGFyZHdhcmUtcmVsYXRlZCBDUFVzXG4iCittc2dzdHIgIiIKKyIgIC1yLCAtLXJlbGF0ZWQgICAgICAgICAgICBNb2RpZmljYSB0b2RvcyBvcyBDUFVzIHJlbGFjaW9uYWRvcyBhbyBoYXJkd2FyZVxuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjMzIHV0aWxzL2NwdXBvd2VyLXNldC5jOjI4IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iCittc2dzdHIgIiAtaCwgLS1oZWxwICAgICAgICAgICBNb3N0cmEgZXNzYSB0ZWxhXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyJOb3RlczpcbiIKKyIxLiBPbWl0dGluZyB0aGUgLWMgb3IgLS1jcHUgYXJndW1lbnQgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGl0IHRvIFwiYWxsXCJcbiIKK21zZ3N0ciAiIgorIlBhcmEgb3MgYXJndW1lbnRvcyBtYXJjYWRvcyBjb20gKiwgb21pdGlyIG8gYXJndW1lbnRvIC1jIG91IC0tY3B1IMOpXG4iCisiZXF1aXZhbGVudGUgYSBzZXTDoS1sbyBjb21vIHplcm9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozNworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiIgorIjIuIFRoZSAtZiBGUkVRLCAtLWZyZXEgRlJFUSBwYXJhbWV0ZXIgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyICIKKyJwYXJhbWV0ZXJcbiIKKyIgICBleGNlcHQgdGhlIC1jIENQVSwgLS1jcHUgQ1BVIHBhcmFtZXRlclxuIgorIjMuIEZSRVF1ZW5jaWVzIGNhbiBiZSBwYXNzZWQgaW4gSHosIGtIeiAoZGVmYXVsdCksIE1IeiwgR0h6LCBvciBUSHpcbiIKKyIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorIiAgIChGUkVRdWVuY3kgaW4ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKK21zZ3N0ciAiIgorIk5vdGFzOlxuIgorIjEuIE9taXRpciBvIGFyZ3VtZW50byAtYyBvciAtLWNwdSDDqSBlcXVpdmFsZW50ZSBhIHNldMOhLWxvIGNvbW8gemVyb1xuIgorIjIuIE8gcGFyw6JtZXRybyAtZiBGUkVRLCAtLWZyZXEgRlJFUSBuw6NvIHBvZGUgc2VyIGNvbWJpbmFkbyBjb20gcXVhbHF1ZXIgIgorIm91dHJvIHBhcsOibWV0cm9cbiIKKyIgICBleGNldG8gY29tIG8gcGFyw6JtZXRybyAtYyBDUFUsIC0tY3B1IENQVVxuIgorIjMuIEZSRVF1w6puY2lhcyBwb2RlbSBzZXIgdXNhZGFzIGVtIEh6LCBrSHogKHBhZHLDo28pLCBNSHosIEdIeiwgbyBUSHpcbiIKKyIgICBjb2xvY2FuZG8gbyBub21lIGRlc2VqYWRvIGRhIHVuaWRhZGUgYXDDs3MgbyB2YWxvciwgc2VtIHF1YWxxdWVyIGVzcGHDp29cbiIKKyIgICAoRlJFUXXDqm5jaWEgZW0ga0h6ID1eIEh6ICogMC4wMDEgPV4gTUh6ICogMTAwMCA9XiBHSHogKiAxMDAwMDAwKS5cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzo1NworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiRXJyb3Igc2V0dGluZyBuZXcgdmFsdWVzLiBDb21tb24gZXJyb3JzOlxuIgorIi0gRG8geW91IGhhdmUgcHJvcGVyIGFkbWluaXN0cmF0aW9uIHJpZ2h0cz8gKHN1cGVyLXVzZXI/KVxuIgorIi0gSXMgdGhlIGdvdmVybm9yIHlvdSByZXF1ZXN0ZWQgYXZhaWxhYmxlIGFuZCBtb2Rwcm9iZWQ/XG4iCisiLSBUcnlpbmcgdG8gc2V0IGFuIGludmFsaWQgcG9saWN5P1xuIgorIi0gVHJ5aW5nIHRvIHNldCBhIHNwZWNpZmljIGZyZXF1ZW5jeSwgYnV0IHVzZXJzcGFjZSBnb3Zlcm5vciBpcyBub3QgIgorImF2YWlsYWJsZSxcbiIKKyIgICBmb3IgZXhhbXBsZSBiZWNhdXNlIG9mIGhhcmR3YXJlIHdoaWNoIGNhbm5vdCBiZSBzZXQgdG8gYSBzcGVjaWZpYyAiCisiZnJlcXVlbmN5XG4iCisiICAgb3IgYmVjYXVzZSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yIGlzbid0IGxvYWRlZD9cbiIKK21zZ3N0ciAiIgorIkVycm8gYW8gc2V0YXIgbm92b3MgdmFsb3Jlcy4gRXJyb3MgY29tdW5zOlxuIgorIi0gVm9jw6ogdGVtIGRpcmVpdG9zIGFkbWluaXN0cmF0aXZvcyBuZWNlc3PDoXJpb3M/IChzdXBlci11c3XDoXJpbz8pXG4iCisiLSBPIHJlZ3VsYWRvciBxdWUgdm9jw6ogcmVxdWVzaXRvdSBlc3TDoSBkaXNwb27DrXZlbCBlIGZvaSBcIm1vZHByb2JlZFwiP1xuIgorIi0gVGVudGFuZG8gc2V0YXIgdW1hIHBvbMOtdGljYSBpbnbDoWxpZGE/XG4iCisiLSBUZW50YW5kbyBzZXRhciB1bWEgZnJlcXXDqm5jaWEgZXNwZWPDrWZpY2EsIG1hcyBvIHJlZ3VsYWRvciBlbSBuw612ZWwgZGUgIgorInVzdcOhcmlvIG7Do28gZXN0w6EgZGlzcG9uw612ZWwsXG4iCisiICAgcG9yIGV4ZW1wbG8gZGV2aWRvIGFvIGhhcmR3YXJlIHF1ZSBuw6NvIHBvZGUgc2VyIHNldGFkbyBwcmEgdW1hIGZyZXF1w6puY2lhICIKKyJlc3BlY8OtZmljYVxuIgorIiAgIG91IHBvcnF1ZSBvIHJlZ3VsYWRvciBlbSBuw612ZWwgZGUgdXN1w6FyaW8gbsOjbyBmb2kgY2FycmVnYWRvP1xuIgorCisjOiB1dGlscy9jcHVmcmVxLXNldC5jOjE3MAorIywgYy1mb3JtYXQKK21zZ2lkICJ3cm9uZywgdW5rbm93biBvciB1bmhhbmRsZWQgQ1BVP1xuIgorbXNnc3RyICJDUFUgZXJyYWRvLCBkZXNjb25oZWNpZG8gb3UgaW5lc3BlcmFkbz9cbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDIKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorInRoZSAtZi8tLWZyZXEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1kLy0tbWluLCAtdS8tLW1heCBvclxuIgorIi1nLy0tZ292ZXJub3IgcGFyYW1ldGVyc1xuIgorbXNnc3RyICIiCisibyBwYXLDom1ldHJvIC1mLy0tZnJlcSBuw6NvIHBvZGUgc2VyIGNvbWJpbmFkbyBjb20gb3MgcGFyw6JtZXRyb3MgLWQvLS1taW4sIC0iCisidS8tLW1heCBvdVxuIgorIi1nLy0tZ292ZXJub3JcbiIKKworIzogdXRpbHMvY3B1ZnJlcS1zZXQuYzozMDgKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKyItZy8tLWdvdmVybm9yIG11c3QgYmUgcGFzc2VkXG4iCittc2dzdHIgIiIKKyJQZWxvIG1lbm9zIHVtIHBhcsOibWV0cm8gZW50cmUgLWYvLS1mcmVxLCAtZC8tLW1pbiwgLXUvLS1tYXgsIGVcbiIKKyItZy8tLWdvdmVybm9yIGRldmUgc2VyIHVzYWRvXG4iCisKKyM6IHV0aWxzL2NwdWZyZXEtc2V0LmM6MzQ3CisjLCBjLWZvcm1hdAorbXNnaWQgIlNldHRpbmcgY3B1OiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjIyCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBzZXQgWyAtYiB2YWwgXSBbIC1tIHZhbCBdIFsgLXMgdmFsIF1cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtYiwgLS1wZXJmLWJpYXMgW1ZBTF0gICAgU2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVsIG1vZGVscyBbMC0xNV0sIHNlZSBtYW5wYWdlIGZvciBkZXRhaWxzXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MjYKKyMsIGMtZm9ybWF0Cittc2dpZCAiIgorIiAgLW0sIC0tc2NoZWQtbWMgIFtWQUxdICAgIFNldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoyNworIywgYy1mb3JtYXQKK21zZ2lkICIiCisiICAtcywgLS1zY2hlZC1zbXQgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgdGhyZWFkIHNpYmxpbmcgc2NoZWR1bGVyICIKKyJwb2xpY3kuXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6ODAKKyMsIGMtZm9ybWF0Cittc2dpZCAiLS1wZXJmLWJpYXMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjkxCisjLCBjLWZvcm1hdAorbXNnaWQgIi0tc2NoZWQtbWMgcGFyYW0gb3V0IG9mIHJhbmdlIFswLSVkXVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLXNldC5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICItLXNjaGVkLXNtdCBwYXJhbSBvdXQgb2YgcmFuZ2UgWzAtJWRdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItc2V0LmM6MTIxCisjLCBjLWZvcm1hdAorbXNnaWQgIkVycm9yIHNldHRpbmcgc2NoZWQtbWMgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxMjcKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1zZXQuYzoxNDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiRXJyb3Igc2V0dGluZyBwZXJmLWJpYXMgdmFsdWUgb24gQ1BVICVkXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIxCisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiBjcHVwb3dlciBpbmZvIFsgLWIgXSBbIC1tIF0gWyAtcyBdXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjIzCisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1iLCAtLXBlcmYtYmlhcyAgICBHZXRzIENQVSdzIHBvd2VyIHZzIHBlcmZvcm1hbmNlIHBvbGljeSBvbiBzb21lXG4iCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MjUKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiAgLW0sIC0tc2NoZWQtbWMgICAgIEdldHMgdGhlIGtlcm5lbCdzIG11bHRpIGNvcmUgc2NoZWR1bGVyIHBvbGljeS5cbiIKK21zZ3N0ciAiIgorIi0tcCwgLS1wb2xpY3kgICAgICAgICBPYnRlbSBhIHBvbMOtdGljYSBkbyBjcHVmcmVxIGVtIHVzbyBubyBtb21lbnRvICpcbiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjI2CisjLCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1zLCAtLXNjaGVkLXNtdCAgICBHZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdXBvd2VyLWluZm8uYzoyOAorIywgYy1mb3JtYXQKK21zZ2lkICIiCisiXG4iCisiUGFzc2luZyBubyBvcHRpb24gd2lsbCBzaG93IGFsbCBpbmZvLCBieSBkZWZhdWx0IG9ubHkgb24gY29yZSAwXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwMgorIywgYy1mb3JtYXQKK21zZ2lkICJTeXN0ZW0ncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIy4gaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVAorIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEwNSB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTE0CisjLCBjLWZvcm1hdAorbXNnaWQgIm5vdCBzdXBwb3J0ZWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTExCisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBzZXR0aW5nOiAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjEyNgorIywgYy1mb3JtYXQKK21zZ2lkICJJbnRlbCdzIHBlcmZvcm1hbmNlIGJpYXMgc2V0dGluZyBuZWVkcyByb290IHByaXZpbGVnZXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTI4CisjLCBjLWZvcm1hdAorbXNnaWQgIlN5c3RlbSBkb2VzIG5vdCBzdXBwb3J0IEludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nXG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1cG93ZXItaW5mby5jOjE0NworIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgcmVhZCBwZXJmLWJpYXMgdmFsdWVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVwb3dlci1pbmZvLmM6MTUwCisjLCBjLWZvcm1hdAorbXNnaWQgInBlcmYtYmlhczogJWRcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyOAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQW5hbHl6aW5nIENQVSAlZDpcbiIKK21zZ3N0ciAiYW5hbGlzYW5kbyBvIENQVSAlZDpcbiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MzIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBObyBpZGxlIHN0YXRlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjM2CisjLCBjLWZvcm1hdAorbXNnaWQgIkNQVSAldTogQ2FuJ3QgcmVhZCBpZGxlIHN0YXRlIGluZm9cbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo0MQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIG1heCBpZGxlIHN0YXRlICV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6NDYKKyMsIGMtZm9ybWF0Cittc2dpZCAiTnVtYmVyIG9mIGlkbGUgc3RhdGVzOiAlZFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjQ4CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJBdmFpbGFibGUgaWRsZSBzdGF0ZXM6IgorbXNnc3RyICIgIG7DrXZlaXMgZGUgZnJlcXXDqm5jaWEgZGlzcG9uw612ZWlzOiAiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjcxCisjLCBjLWZvcm1hdAorbXNnaWQgIkZsYWdzL0Rlc2NyaXB0aW9uOiAlc1xuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc0CisjLCBjLWZvcm1hdAorbXNnaWQgIkxhdGVuY3k6ICVsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjc2CisjLCBjLWZvcm1hdAorbXNnaWQgIlVzYWdlOiAlbHVcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo3OAorIywgYy1mb3JtYXQKK21zZ2lkICJEdXJhdGlvbjogJWxsdVxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjkwCisjLCBjLWZvcm1hdAorbXNnaWQgIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBkcml2ZXJcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5NAorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBkcml2ZXI6ICVzXG4iCittc2dzdHIgIiAgZHJpdmVyOiAlc1xuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzo5OQorIywgYy1mb3JtYXQKK21zZ2lkICJDb3VsZCBub3QgZGV0ZXJtaW5lIGNwdWlkbGUgZ292ZXJub3JcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMDMKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVaWRsZSBnb3Zlcm5vcjogJXNcbiIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMjIKKyMsIGMtZm9ybWF0Cittc2dpZCAiQ1BVICV1OiBDYW4ndCByZWFkIEMtc3RhdGUgaW5mb1xuIgorbXNnc3RyICIiCisKKyMuIHByaW50ZigiQ3N0YXRlczogJWRcbiIsIGNzdGF0ZXMpOworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI3CisjLCBjLWZvcm1hdAorbXNnaWQgImFjdGl2ZSBzdGF0ZTogICAgICAgICAgICBDMFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEyOAorIywgYy1mb3JtYXQKK21zZ2lkICJtYXhfY3N0YXRlOiAgICAgICAgICAgICAgQyV1XG4iCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTI5CisjLCBmdXp6eSwgYy1mb3JtYXQKK21zZ2lkICJtYXhpbXVtIGFsbG93ZWQgbGF0ZW5jeTogJWx1IHVzZWNcbiIKK21zZ3N0ciAiICBtYWlvciBsYXTDqm5jaWEgZGUgdHJhbnNpw6fDo286ICIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTMwCisjLCBjLWZvcm1hdAorbXNnaWQgInN0YXRlczpcdFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzMgorIywgYy1mb3JtYXQKK21zZ2lkICIgICAgQyVkOiAgICAgICAgICAgICAgICAgIHR5cGVbQyVkXSAiCittc2dzdHIgIiIKKworIzogdXRpbHMvY3B1aWRsZS1pbmZvLmM6MTM0CisjLCBjLWZvcm1hdAorbXNnaWQgInByb21vdGlvblstLV0gZGVtb3Rpb25bLS1dICIKK21zZ3N0ciAiIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxMzUKKyMsIGMtZm9ybWF0Cittc2dpZCAibGF0ZW5jeVslMDNsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzNworIywgYy1mb3JtYXQKK21zZ2lkICJ1c2FnZVslMDhsdV0gIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjEzOQorIywgYy1mb3JtYXQKK21zZ2lkICJkdXJhdGlvblslMDIwTHVdIFxuIgorbXNnc3RyICIiCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0NworIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiVXNhZ2U6IGNwdXBvd2VyIGlkbGVpbmZvIFtvcHRpb25zXVxuIgorbXNnc3RyICJVc286IGNwdWZyZXEtaW5mbyBbb3DDp8O1ZXNdXG4iCisKKyM6IHV0aWxzL2NwdWlkbGUtaW5mby5jOjE0OQorIywgZnV6enksIGMtZm9ybWF0Cittc2dpZCAiICAtcywgLS1zaWxlbnQgICAgICAgICBPbmx5IHNob3cgZ2VuZXJhbCBDLXN0YXRlIGluZm9ybWF0aW9uXG4iCittc2dzdHIgIiAgLWUsIC0tZGVidWcgICAgICAgICAgTW9zdHJhIGluZm9ybWHDp8OjbyBkZSBkZWJ1Z1xuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoxNTAKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIFByaW50cyBvdXQgaW5mb3JtYXRpb24gbGlrZSBwcm92aWRlZCBieSB0aGUgL3Byb2MvIgorImFjcGkvcHJvY2Vzc29yLyovcG93ZXJcbiIKKyIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiBvbGRlciBrZXJuZWxzXG4iCittc2dzdHIgIiIKKyIgIC1vLCAtLXByb2MgICAgICAgICAgIE1vc3RyYSBpbmZvcm1hw6fDo28gZG8gdGlwbyBwcm92aWRhIHBlbGEgaW50ZXJmYWNlIC8iCisicHJvYy9jcHVmcmVxXG4iCisiICAgICAgICAgICAgICAgICAgICAgICBlbSBrZXJuZWxzIDIuNC4gZSBtYWlzIHJlY2VudGVzIDIuNlxuIgorCisjOiB1dGlscy9jcHVpZGxlLWluZm8uYzoyMDkKKyMsIGZ1enp5LCBjLWZvcm1hdAorbXNnaWQgIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgb3V0cHV0LXNwZWNpZmljIGFyZ3VtZW50XG4iCittc2dzdHIgIiIKKyJWb2PDqiBuw6NvIHBvZGUgZXNwZWNpZmljYXIgbWFpcyBkbyBxdWUgdW0gcGFyw6JtZXRybyAtLWNwdSBlL291XG4iCisibWFpcyBkbyBxdWUgdW0gYXJndW1lbnRvIGRlIHNhw61kYSBlc3BlY8OtZmljb1xuIgorCisjfiBtc2dpZCAiIgorI34gIiAgLWMgQ1BVLCAtLWNwdSBDUFUgICAgQ1BVIG51bWJlciB3aGljaCBpbmZvcm1hdGlvbiBzaGFsbCBiZSBkZXRlcm1pbmVkICIKKyN+ICJhYm91dFxuIgorI34gbXNnc3RyICIiCisjfiAiICAtYyBDUFUsIC0tY3B1IENQVSAgICBuw7ptZXJvIGRvIENQVSBzb2JyZSBvIHF1YWwgYXMgaW5mb3LDp8O1ZXMgZGV2ZW0gc2VyICIKKyN+ICJkZXRlcm1pbmFkYXNcbiIKKworI34gbXNnaWQgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBudW1iZXIgb2YgQ1BVIHdoZXJlIGNwdWZyZXEgc2V0dGluZ3Mgc2hhbGwgYmUgIgorI34gIm1vZGlmaWVkXG4iCisjfiBtc2dzdHIgIiIKKyN+ICIgIC1jIENQVSwgLS1jcHUgQ1BVICAgICAgICBuw7ptZXJvIGRvIENQVSBvbmRlIGFzIGNvbmZpZ3VyYcOnw7VlcyBkbyBjcHVmcmVxICIKKyN+ICJ2w6NvIHNlciBtb2RpZmljYWRhc1xuIgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvYnVpbHRpbi5oIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvYnVpbHRpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NzBmZmIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9idWlsdGluLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBCVUlMVElOX0gKKyNkZWZpbmUgQlVJTFRJTl9ICisKK2V4dGVybiBpbnQgY21kX3NldChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworZXh0ZXJuIGludCBjbWRfaW5mbyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworZXh0ZXJuIGludCBjbWRfZnJlcV9zZXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KTsKK2V4dGVybiBpbnQgY21kX2ZyZXFfaW5mbyhpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworZXh0ZXJuIGludCBjbWRfaWRsZV9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CitleHRlcm4gaW50IGNtZF9tb25pdG9yKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndik7CisKK2V4dGVybiB2b2lkIHNldF9oZWxwKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5mb19oZWxwKHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlcV9zZXRfaGVscCh2b2lkKTsKK2V4dGVybiB2b2lkIGZyZXFfaW5mb19oZWxwKHZvaWQpOworZXh0ZXJuIHZvaWQgaWRsZV9pbmZvX2hlbHAodm9pZCk7CitleHRlcm4gdm9pZCBtb25pdG9yX2hlbHAodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1ZnJlcS1pbmZvLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTFkMjVmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1ZnJlcS1pbmZvLmMKQEAgLTAsMCArMSw3MDggQEAKKy8qCisgKiAgKEMpIDIwMDQtMjAwOSAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgImNwdWZyZXEuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2JpdG1hc2suaCIKKworI2RlZmluZSBMSU5FX0xFTiAxMAorCitzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50X2NwdXModm9pZCkKK3sKKwlGSUxFICpmcDsKKwljaGFyIHZhbHVlW0xJTkVfTEVOXTsKKwl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgY3B1bnIgPSAwOworCisJZnAgPSBmb3BlbigiL3Byb2Mvc3RhdCIsICJyIik7CisJaWYgKCFmcCkgeworCQlwcmludGYoXygiQ291bGRuJ3QgY291bnQgdGhlIG51bWJlciBvZiBDUFVzICglczogJXMpLCBhc3N1bWluZyAxXG4iKSwgIi9wcm9jL3N0YXQiLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gMTsKKwl9CisKKwl3aGlsZSAoIWZlb2YoZnApKSB7CisJCWlmICghZmdldHModmFsdWUsIExJTkVfTEVOLCBmcCkpCisJCQljb250aW51ZTsKKwkJdmFsdWVbTElORV9MRU4gLSAxXSA9ICdcMCc7CisJCWlmIChzdHJsZW4odmFsdWUpIDwgKExJTkVfTEVOIC0gMikpCisJCQljb250aW51ZTsKKwkJaWYgKHN0cnN0cih2YWx1ZSwgImNwdSAiKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3NjYW5mKHZhbHVlLCAiY3B1JWQgIiwgJmNwdW5yKSAhPSAxKQorCQkJY29udGludWU7CisJCWlmIChjcHVuciA+IHJldCkKKwkJCXJldCA9IGNwdW5yOworCX0KKwlmY2xvc2UoZnApOworCisJLyogY3B1IGNvdW50IHN0YXJ0cyBmcm9tIDAsIG9uIGVycm9yIHJldHVybiAxIChVUCkgKi8KKwlyZXR1cm4gcmV0ICsgMTsKK30KKworCitzdGF0aWMgdm9pZCBwcm9jX2NwdWZyZXFfb3V0cHV0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGNwdSwgbnJfY3B1czsKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeTsKKwl1bnNpZ25lZCBpbnQgbWluX3BjdGcgPSAwOworCXVuc2lnbmVkIGludCBtYXhfcGN0ZyA9IDA7CisJdW5zaWduZWQgbG9uZyBtaW4sIG1heDsKKworCXByaW50ZihfKCIgICAgICAgICAgbWluaW11bSBDUFUgZnJlcXVlbmN5ICAtICBtYXhpbXVtIENQVSBmcmVxdWVuY3kgIC0gIGdvdmVybm9yXG4iKSk7CisKKwlucl9jcHVzID0gY291bnRfY3B1cygpOworCWZvciAoY3B1ID0gMDsgY3B1IDwgbnJfY3B1czsgY3B1KyspIHsKKwkJcG9saWN5ID0gY3B1ZnJlcV9nZXRfcG9saWN5KGNwdSk7CisJCWlmICghcG9saWN5KQorCQkJY29udGludWU7CisKKwkJaWYgKGNwdWZyZXFfZ2V0X2hhcmR3YXJlX2xpbWl0cyhjcHUsICZtaW4sICZtYXgpKSB7CisJCQltYXggPSAwOworCQl9IGVsc2UgeworCQkJbWluX3BjdGcgPSAocG9saWN5LT5taW4gKiAxMDApIC8gbWF4OworCQkJbWF4X3BjdGcgPSAocG9saWN5LT5tYXggKiAxMDApIC8gbWF4OworCQl9CisJCXByaW50ZigiQ1BVJTNkICAgICU5bHUga0h6ICglM2QgJSUpICAtICAlOWx1IGtIeiAoJTNkICUlKSAgLSAgJXNcbiIsCisJCQljcHUgLCBwb2xpY3ktPm1pbiwgbWF4ID8gbWluX3BjdGcgOiAwLCBwb2xpY3ktPm1heCwKKwkJCW1heCA/IG1heF9wY3RnIDogMCwgcG9saWN5LT5nb3Zlcm5vcik7CisKKwkJY3B1ZnJlcV9wdXRfcG9saWN5KHBvbGljeSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmludF9zcGVlZCh1bnNpZ25lZCBsb25nIHNwZWVkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJaWYgKHNwZWVkID4gMTAwMDAwMCkgeworCQl0bXAgPSBzcGVlZCAlIDEwMDAwOworCQlpZiAodG1wID49IDUwMDApCisJCQlzcGVlZCArPSAxMDAwMDsKKwkJcHJpbnRmKCIldS4lMDJ1IEdIeiIsICgodW5zaWduZWQgaW50KSBzcGVlZC8xMDAwMDAwKSwKKwkJCSgodW5zaWduZWQgaW50KSAoc3BlZWQlMTAwMDAwMCkvMTAwMDApKTsKKwl9IGVsc2UgaWYgKHNwZWVkID4gMTAwMDAwKSB7CisJCXRtcCA9IHNwZWVkICUgMTAwMDsKKwkJaWYgKHRtcCA+PSA1MDApCisJCQlzcGVlZCArPSAxMDAwOworCQlwcmludGYoIiV1IE1IeiIsICgodW5zaWduZWQgaW50KSBzcGVlZCAvIDEwMDApKTsKKwl9IGVsc2UgaWYgKHNwZWVkID4gMTAwMCkgeworCQl0bXAgPSBzcGVlZCAlIDEwMDsKKwkJaWYgKHRtcCA+PSA1MCkKKwkJCXNwZWVkICs9IDEwMDsKKwkJcHJpbnRmKCIldS4lMDF1IE1IeiIsICgodW5zaWduZWQgaW50KSBzcGVlZC8xMDAwKSwKKwkJCSgodW5zaWduZWQgaW50KSAoc3BlZWQlMTAwMCkvMTAwKSk7CisJfSBlbHNlCisJCXByaW50ZigiJWx1IGtIeiIsIHNwZWVkKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZHVyYXRpb24odW5zaWduZWQgbG9uZyBkdXJhdGlvbikKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCWlmIChkdXJhdGlvbiA+IDEwMDAwMDApIHsKKwkJdG1wID0gZHVyYXRpb24gJSAxMDAwMDsKKwkJaWYgKHRtcCA+PSA1MDAwKQorCQkJZHVyYXRpb24gKz0gMTAwMDA7CisJCXByaW50ZigiJXUuJTAydSBtcyIsICgodW5zaWduZWQgaW50KSBkdXJhdGlvbi8xMDAwMDAwKSwKKwkJCSgodW5zaWduZWQgaW50KSAoZHVyYXRpb24lMTAwMDAwMCkvMTAwMDApKTsKKwl9IGVsc2UgaWYgKGR1cmF0aW9uID4gMTAwMDAwKSB7CisJCXRtcCA9IGR1cmF0aW9uICUgMTAwMDsKKwkJaWYgKHRtcCA+PSA1MDApCisJCQlkdXJhdGlvbiArPSAxMDAwOworCQlwcmludGYoIiV1IHVzIiwgKCh1bnNpZ25lZCBpbnQpIGR1cmF0aW9uIC8gMTAwMCkpOworCX0gZWxzZSBpZiAoZHVyYXRpb24gPiAxMDAwKSB7CisJCXRtcCA9IGR1cmF0aW9uICUgMTAwOworCQlpZiAodG1wID49IDUwKQorCQkJZHVyYXRpb24gKz0gMTAwOworCQlwcmludGYoIiV1LiUwMXUgdXMiLCAoKHVuc2lnbmVkIGludCkgZHVyYXRpb24vMTAwMCksCisJCQkoKHVuc2lnbmVkIGludCkgKGR1cmF0aW9uJTEwMDApLzEwMCkpOworCX0gZWxzZQorCQlwcmludGYoIiVsdSBucyIsIGR1cmF0aW9uKTsKKworCXJldHVybjsKK30KKworLyogLS1ib29zdCAvIC1iICovCisKK3N0YXRpYyBpbnQgZ2V0X2Jvb3N0X21vZGUodW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgc3VwcG9ydCwgYWN0aXZlLCBiX3N0YXRlcyA9IDAsIHJldCwgcHN0YXRlX25vLCBpOworCS8qIFRvRG86IE1ha2UgdGhpcyBtb3JlIGdsb2JhbCAqLworCXVuc2lnbmVkIGxvbmcgcHN0YXRlc1tNQVhfSFdfUFNUQVRFU10gPSB7MCx9OworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciAhPSBYODZfVkVORE9SX0FNRCAmJgorCSAgICBjcHVwb3dlcl9jcHVfaW5mby52ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBjcHVmcmVxX2hhc19ib29zdF9zdXBwb3J0KGNwdSwgJnN1cHBvcnQsICZhY3RpdmUsICZiX3N0YXRlcyk7CisJaWYgKHJldCkgeworCQlwcmludGYoXygiRXJyb3Igd2hpbGUgZXZhbHVhdGluZyBCb29zdCBDYXBhYmlsaXRpZXMiCisJCQkJIiBvbiBDUFUgJWQgLS0gYXJlIHlvdSByb290P1xuIiksIGNwdSk7CisJCXJldHVybiByZXQ7CisJfQorCS8qIFAgc3RhdGUgY2hhbmdlcyB2aWEgTVNSIGFyZSBpZGVudGlmaWVkIHZpYSBjcHVpZCA4MDAwMDAwNworCSAgIG9uIEludGVsIGFuZCBBTUQsIGJ1dCB3ZSBhc3N1bWUgYm9vc3QgY2FwYWJsZSBtYWNoaW5lcyBjYW4gZG8gdGhhdAorCSAgIGlmIChjcHVpZF9lYXgoMHg4MDAwMDAwMCkgPj0gMHg4MDAwMDAwNworCSAgICYmIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA3KSkpCisJKi8KKworCXByaW50ZihfKCIgIGJvb3N0IHN0YXRlIHN1cHBvcnQ6XG4iKSk7CisKKwlwcmludGYoXygiICAgIFN1cHBvcnRlZDogJXNcbiIpLCBzdXBwb3J0ID8gXygieWVzIikgOiBfKCJubyIpKTsKKwlwcmludGYoXygiICAgIEFjdGl2ZTogJXNcbiIpLCBhY3RpdmUgPyBfKCJ5ZXMiKSA6IF8oIm5vIikpOworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciA9PSBYODZfVkVORE9SX0FNRCAmJgorCSAgICBjcHVwb3dlcl9jcHVfaW5mby5mYW1pbHkgPj0gMHgxMCkgeworCQlyZXQgPSBkZWNvZGVfcHN0YXRlcyhjcHUsIGNwdXBvd2VyX2NwdV9pbmZvLmZhbWlseSwgYl9zdGF0ZXMsCisJCQkJICAgICBwc3RhdGVzLCAmcHN0YXRlX25vKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJcHJpbnRmKF8oIiAgICBCb29zdCBTdGF0ZXM6ICVkXG4iKSwgYl9zdGF0ZXMpOworCQlwcmludGYoXygiICAgIFRvdGFsIFN0YXRlczogJWRcbiIpLCBwc3RhdGVfbm8pOworCQlmb3IgKGkgPSAwOyBpIDwgcHN0YXRlX25vOyBpKyspIHsKKwkJCWlmIChpIDwgYl9zdGF0ZXMpCisJCQkJcHJpbnRmKF8oIiAgICBQc3RhdGUtUGIlZDogJWx1TUh6IChib29zdCBzdGF0ZSkiCisJCQkJCSAiXG4iKSwgaSwgcHN0YXRlc1tpXSk7CisJCQllbHNlCisJCQkJcHJpbnRmKF8oIiAgICBQc3RhdGUtUCVkOiAgJWx1TUh6XG4iKSwKKwkJCQkgICAgICAgaSAtIGJfc3RhdGVzLCBwc3RhdGVzW2ldKTsKKwkJfQorCX0gZWxzZSBpZiAoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9IQVNfVFVSQk9fUkFUSU8pIHsKKwkJZG91YmxlIGJjbGs7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBpbnRlbF90dXJib19yYXRpbyA9IDA7CisJCXVuc2lnbmVkIGludCByYXRpbzsKKworCQkvKiBBbnkgd2F5IHRvIGF1dG9kZXRlY3QgdGhpcyA/ICovCisJCWlmIChjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX0lTX1NOQikKKwkJCWJjbGsgPSAxMDAuMDA7CisJCWVsc2UKKwkJCWJjbGsgPSAxMzMuMzM7CisJCWludGVsX3R1cmJvX3JhdGlvID0gbXNyX2ludGVsX2dldF90dXJib19yYXRpbyhjcHUpOworCQlkcHJpbnQgKCIgICAgUmF0aW86IDB4JWxseCAtIGJjbGs6ICVmXG4iLAorCQkJaW50ZWxfdHVyYm9fcmF0aW8sIGJjbGspOworCisJCXJhdGlvID0gKGludGVsX3R1cmJvX3JhdGlvID4+IDI0KSAmIDB4RkY7CisJCWlmIChyYXRpbykKKwkJCXByaW50ZihfKCIgICAgJS4wZiBNSHogbWF4IHR1cmJvIDQgYWN0aXZlIGNvcmVzXG4iKSwKKwkJCSAgICAgICByYXRpbyAqIGJjbGspOworCisJCXJhdGlvID0gKGludGVsX3R1cmJvX3JhdGlvID4+IDE2KSAmIDB4RkY7CisJCWlmIChyYXRpbykKKwkJCXByaW50ZihfKCIgICAgJS4wZiBNSHogbWF4IHR1cmJvIDMgYWN0aXZlIGNvcmVzXG4iKSwKKwkJCSAgICAgICByYXRpbyAqIGJjbGspOworCisJCXJhdGlvID0gKGludGVsX3R1cmJvX3JhdGlvID4+IDgpICYgMHhGRjsKKwkJaWYgKHJhdGlvKQorCQkJcHJpbnRmKF8oIiAgICAlLjBmIE1IeiBtYXggdHVyYm8gMiBhY3RpdmUgY29yZXNcbiIpLAorCQkJICAgICAgIHJhdGlvICogYmNsayk7CisKKwkJcmF0aW8gPSAoaW50ZWxfdHVyYm9fcmF0aW8gPj4gMCkgJiAweEZGOworCQlpZiAocmF0aW8pCisJCQlwcmludGYoXygiICAgICUuMGYgTUh6IG1heCB0dXJibyAxIGFjdGl2ZSBjb3Jlc1xuIiksCisJCQkgICAgICAgcmF0aW8gKiBiY2xrKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX291dHB1dF9vbmUodW5zaWduZWQgaW50IGNwdSkKK3sKKwljaGFyICpkcml2ZXI7CisJc3RydWN0IGNwdWZyZXFfYWZmZWN0ZWRfY3B1cyAqY3B1czsKKwlzdHJ1Y3QgY3B1ZnJlcV9hdmFpbGFibGVfZnJlcXVlbmNpZXMgKmZyZXFzOworCXVuc2lnbmVkIGxvbmcgbWluLCBtYXgsIGZyZXFfa2VybmVsLCBmcmVxX2hhcmR3YXJlOworCXVuc2lnbmVkIGxvbmcgdG90YWxfdHJhbnMsIGxhdGVuY3k7CisJdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsX3RpbWU7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3k7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqZ292ZXJub3JzOworCXN0cnVjdCBjcHVmcmVxX3N0YXRzICpzdGF0czsKKworCWlmIChjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSkKKwkJcmV0dXJuOworCisJZnJlcV9rZXJuZWwgPSBjcHVmcmVxX2dldF9mcmVxX2tlcm5lbChjcHUpOworCWZyZXFfaGFyZHdhcmUgPSBjcHVmcmVxX2dldF9mcmVxX2hhcmR3YXJlKGNwdSk7CisKKwlkcml2ZXIgPSBjcHVmcmVxX2dldF9kcml2ZXIoY3B1KTsKKwlpZiAoIWRyaXZlcikgeworCQlwcmludGYoXygiICBubyBvciB1bmtub3duIGNwdWZyZXEgZHJpdmVyIGlzIGFjdGl2ZSBvbiB0aGlzIENQVVxuIikpOworCX0gZWxzZSB7CisJCXByaW50ZihfKCIgIGRyaXZlcjogJXNcbiIpLCBkcml2ZXIpOworCQljcHVmcmVxX3B1dF9kcml2ZXIoZHJpdmVyKTsKKwl9CisKKwljcHVzID0gY3B1ZnJlcV9nZXRfcmVsYXRlZF9jcHVzKGNwdSk7CisJaWYgKGNwdXMpIHsKKwkJcHJpbnRmKF8oIiAgQ1BVcyB3aGljaCBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5OiAiKSk7CisJCXdoaWxlIChjcHVzLT5uZXh0KSB7CisJCQlwcmludGYoIiVkICIsIGNwdXMtPmNwdSk7CisJCQljcHVzID0gY3B1cy0+bmV4dDsKKwkJfQorCQlwcmludGYoIiVkXG4iLCBjcHVzLT5jcHUpOworCQljcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMoY3B1cyk7CisJfQorCisJY3B1cyA9IGNwdWZyZXFfZ2V0X2FmZmVjdGVkX2NwdXMoY3B1KTsKKwlpZiAoY3B1cykgeworCQlwcmludGYoXygiICBDUFVzIHdoaWNoIG5lZWQgdG8gaGF2ZSB0aGVpciBmcmVxdWVuY3kgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmU6ICIpKTsKKwkJd2hpbGUgKGNwdXMtPm5leHQpIHsKKwkJCXByaW50ZigiJWQgIiwgY3B1cy0+Y3B1KTsKKwkJCWNwdXMgPSBjcHVzLT5uZXh0OworCQl9CisJCXByaW50ZigiJWRcbiIsIGNwdXMtPmNwdSk7CisJCWNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoY3B1cyk7CisJfQorCisJbGF0ZW5jeSA9IGNwdWZyZXFfZ2V0X3RyYW5zaXRpb25fbGF0ZW5jeShjcHUpOworCWlmIChsYXRlbmN5KSB7CisJCXByaW50ZihfKCIgIG1heGltdW0gdHJhbnNpdGlvbiBsYXRlbmN5OiAiKSk7CisJCXByaW50X2R1cmF0aW9uKGxhdGVuY3kpOworCQlwcmludGYoIi5cbiIpOworCX0KKworCWlmICghKGNwdWZyZXFfZ2V0X2hhcmR3YXJlX2xpbWl0cyhjcHUsICZtaW4sICZtYXgpKSkgeworCQlwcmludGYoXygiICBoYXJkd2FyZSBsaW1pdHM6ICIpKTsKKwkJcHJpbnRfc3BlZWQobWluKTsKKwkJcHJpbnRmKCIgLSAiKTsKKwkJcHJpbnRfc3BlZWQobWF4KTsKKwkJcHJpbnRmKCJcbiIpOworCX0KKworCWZyZXFzID0gY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKGNwdSk7CisJaWYgKGZyZXFzKSB7CisJCXByaW50ZihfKCIgIGF2YWlsYWJsZSBmcmVxdWVuY3kgc3RlcHM6ICIpKTsKKwkJd2hpbGUgKGZyZXFzLT5uZXh0KSB7CisJCQlwcmludF9zcGVlZChmcmVxcy0+ZnJlcXVlbmN5KTsKKwkJCXByaW50ZigiLCAiKTsKKwkJCWZyZXFzID0gZnJlcXMtPm5leHQ7CisJCX0KKwkJcHJpbnRfc3BlZWQoZnJlcXMtPmZyZXF1ZW5jeSk7CisJCXByaW50ZigiXG4iKTsKKwkJY3B1ZnJlcV9wdXRfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzKGZyZXFzKTsKKwl9CisKKwlnb3Zlcm5vcnMgPSBjcHVmcmVxX2dldF9hdmFpbGFibGVfZ292ZXJub3JzKGNwdSk7CisJaWYgKGdvdmVybm9ycykgeworCQlwcmludGYoXygiICBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnM6ICIpKTsKKwkJd2hpbGUgKGdvdmVybm9ycy0+bmV4dCkgeworCQkJcHJpbnRmKCIlcywgIiwgZ292ZXJub3JzLT5nb3Zlcm5vcik7CisJCQlnb3Zlcm5vcnMgPSBnb3Zlcm5vcnMtPm5leHQ7CisJCX0KKwkJcHJpbnRmKCIlc1xuIiwgZ292ZXJub3JzLT5nb3Zlcm5vcik7CisJCWNwdWZyZXFfcHV0X2F2YWlsYWJsZV9nb3Zlcm5vcnMoZ292ZXJub3JzKTsKKwl9CisKKwlwb2xpY3kgPSBjcHVmcmVxX2dldF9wb2xpY3koY3B1KTsKKwlpZiAocG9saWN5KSB7CisJCXByaW50ZihfKCIgIGN1cnJlbnQgcG9saWN5OiBmcmVxdWVuY3kgc2hvdWxkIGJlIHdpdGhpbiAiKSk7CisJCXByaW50X3NwZWVkKHBvbGljeS0+bWluKTsKKwkJcHJpbnRmKF8oIiBhbmQgIikpOworCQlwcmludF9zcGVlZChwb2xpY3ktPm1heCk7CisKKwkJcHJpbnRmKCIuXG4gICAgICAgICAgICAgICAgICAiKTsKKwkJcHJpbnRmKF8oIlRoZSBnb3Zlcm5vciBcIiVzXCIgbWF5IgorCQkgICAgICAgIiBkZWNpZGUgd2hpY2ggc3BlZWQgdG8gdXNlXG4gICAgICAgICAgICAgICAgICB3aXRoaW4gdGhpcyByYW5nZS5cbiIpLAorCQkgICAgICAgcG9saWN5LT5nb3Zlcm5vcik7CisJCWNwdWZyZXFfcHV0X3BvbGljeShwb2xpY3kpOworCX0KKworCWlmIChmcmVxX2tlcm5lbCB8fCBmcmVxX2hhcmR3YXJlKSB7CisJCXByaW50ZihfKCIgIGN1cnJlbnQgQ1BVIGZyZXF1ZW5jeSBpcyAiKSk7CisJCWlmIChmcmVxX2hhcmR3YXJlKSB7CisJCQlwcmludF9zcGVlZChmcmVxX2hhcmR3YXJlKTsKKwkJCXByaW50ZihfKCIgKGFzc2VydGVkIGJ5IGNhbGwgdG8gaGFyZHdhcmUpIikpOworCQl9IGVsc2UKKwkJCXByaW50X3NwZWVkKGZyZXFfa2VybmVsKTsKKwkJcHJpbnRmKCIuXG4iKTsKKwl9CisJc3RhdHMgPSBjcHVmcmVxX2dldF9zdGF0cyhjcHUsICZ0b3RhbF90aW1lKTsKKwlpZiAoc3RhdHMpIHsKKwkJcHJpbnRmKF8oIiAgY3B1ZnJlcSBzdGF0czogIikpOworCQl3aGlsZSAoc3RhdHMpIHsKKwkJCXByaW50X3NwZWVkKHN0YXRzLT5mcmVxdWVuY3kpOworCQkJcHJpbnRmKCI6JS4yZiUlIiwgKDEwMC4wICogc3RhdHMtPnRpbWVfaW5fc3RhdGUpIC8gdG90YWxfdGltZSk7CisJCQlzdGF0cyA9IHN0YXRzLT5uZXh0OworCQkJaWYgKHN0YXRzKQorCQkJCXByaW50ZigiLCAiKTsKKwkJfQorCQljcHVmcmVxX3B1dF9zdGF0cyhzdGF0cyk7CisJCXRvdGFsX3RyYW5zID0gY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbnMoY3B1KTsKKwkJaWYgKHRvdGFsX3RyYW5zKQorCQkJcHJpbnRmKCIgICglbHUpXG4iLCB0b3RhbF90cmFucyk7CisJCWVsc2UKKwkJCXByaW50ZigiXG4iKTsKKwl9CisJZ2V0X2Jvb3N0X21vZGUoY3B1KTsKKworfQorCisvKiAtLWZyZXEgLyAtZiAqLworCitzdGF0aWMgaW50IGdldF9mcmVxX2tlcm5lbCh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaHVtYW4pCit7CisJdW5zaWduZWQgbG9uZyBmcmVxID0gY3B1ZnJlcV9nZXRfZnJlcV9rZXJuZWwoY3B1KTsKKwlpZiAoIWZyZXEpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChodW1hbikgeworCQlwcmludF9zcGVlZChmcmVxKTsKKwkJcHJpbnRmKCJcbiIpOworCX0gZWxzZQorCQlwcmludGYoIiVsdVxuIiwgZnJlcSk7CisJcmV0dXJuIDA7Cit9CisKKworLyogLS1od2ZyZXEgLyAtdyAqLworCitzdGF0aWMgaW50IGdldF9mcmVxX2hhcmR3YXJlKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBodW1hbikKK3sKKwl1bnNpZ25lZCBsb25nIGZyZXEgPSBjcHVmcmVxX2dldF9mcmVxX2hhcmR3YXJlKGNwdSk7CisJaWYgKCFmcmVxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaHVtYW4pIHsKKwkJcHJpbnRfc3BlZWQoZnJlcSk7CisJCXByaW50ZigiXG4iKTsKKwl9IGVsc2UKKwkJcHJpbnRmKCIlbHVcbiIsIGZyZXEpOworCXJldHVybiAwOworfQorCisvKiAtLWh3bGltaXRzIC8gLWwgKi8KKworc3RhdGljIGludCBnZXRfaGFyZHdhcmVfbGltaXRzKHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBtaW4sIG1heDsKKwlpZiAoY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKGNwdSwgJm1pbiwgJm1heCkpCisJCXJldHVybiAtRUlOVkFMOworCXByaW50ZigiJWx1ICVsdVxuIiwgbWluLCBtYXgpOworCXJldHVybiAwOworfQorCisvKiAtLWRyaXZlciAvIC1kICovCisKK3N0YXRpYyBpbnQgZ2V0X2RyaXZlcih1bnNpZ25lZCBpbnQgY3B1KQoreworCWNoYXIgKmRyaXZlciA9IGNwdWZyZXFfZ2V0X2RyaXZlcihjcHUpOworCWlmICghZHJpdmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwcmludGYoIiVzXG4iLCBkcml2ZXIpOworCWNwdWZyZXFfcHV0X2RyaXZlcihkcml2ZXIpOworCXJldHVybiAwOworfQorCisvKiAtLXBvbGljeSAvIC1wICovCisKK3N0YXRpYyBpbnQgZ2V0X3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0gY3B1ZnJlcV9nZXRfcG9saWN5KGNwdSk7CisJaWYgKCFwb2xpY3kpCisJCXJldHVybiAtRUlOVkFMOworCXByaW50ZigiJWx1ICVsdSAlc1xuIiwgcG9saWN5LT5taW4sIHBvbGljeS0+bWF4LCBwb2xpY3ktPmdvdmVybm9yKTsKKwljcHVmcmVxX3B1dF9wb2xpY3kocG9saWN5KTsKKwlyZXR1cm4gMDsKK30KKworLyogLS1nb3Zlcm5vcnMgLyAtZyAqLworCitzdGF0aWMgaW50IGdldF9hdmFpbGFibGVfZ292ZXJub3JzKHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IGNwdWZyZXFfYXZhaWxhYmxlX2dvdmVybm9ycyAqZ292ZXJub3JzID0KKwkJY3B1ZnJlcV9nZXRfYXZhaWxhYmxlX2dvdmVybm9ycyhjcHUpOworCWlmICghZ292ZXJub3JzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXdoaWxlIChnb3Zlcm5vcnMtPm5leHQpIHsKKwkJcHJpbnRmKCIlcyAiLCBnb3Zlcm5vcnMtPmdvdmVybm9yKTsKKwkJZ292ZXJub3JzID0gZ292ZXJub3JzLT5uZXh0OworCX0KKwlwcmludGYoIiVzXG4iLCBnb3Zlcm5vcnMtPmdvdmVybm9yKTsKKwljcHVmcmVxX3B1dF9hdmFpbGFibGVfZ292ZXJub3JzKGdvdmVybm9ycyk7CisJcmV0dXJuIDA7Cit9CisKKworLyogLS1hZmZlY3RlZC1jcHVzICAvIC1hICovCisKK3N0YXRpYyBpbnQgZ2V0X2FmZmVjdGVkX2NwdXModW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9hZmZlY3RlZF9jcHVzICpjcHVzID0gY3B1ZnJlcV9nZXRfYWZmZWN0ZWRfY3B1cyhjcHUpOworCWlmICghY3B1cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoY3B1cy0+bmV4dCkgeworCQlwcmludGYoIiVkICIsIGNwdXMtPmNwdSk7CisJCWNwdXMgPSBjcHVzLT5uZXh0OworCX0KKwlwcmludGYoIiVkXG4iLCBjcHVzLT5jcHUpOworCWNwdWZyZXFfcHV0X2FmZmVjdGVkX2NwdXMoY3B1cyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tcmVsYXRlZC1jcHVzICAvIC1yICovCisKK3N0YXRpYyBpbnQgZ2V0X3JlbGF0ZWRfY3B1cyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmNwdXMgPSBjcHVmcmVxX2dldF9yZWxhdGVkX2NwdXMoY3B1KTsKKwlpZiAoIWNwdXMpCisJCXJldHVybiAtRUlOVkFMOworCisJd2hpbGUgKGNwdXMtPm5leHQpIHsKKwkJcHJpbnRmKCIlZCAiLCBjcHVzLT5jcHUpOworCQljcHVzID0gY3B1cy0+bmV4dDsKKwl9CisJcHJpbnRmKCIlZFxuIiwgY3B1cy0+Y3B1KTsKKwljcHVmcmVxX3B1dF9yZWxhdGVkX2NwdXMoY3B1cyk7CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tc3RhdHMgLyAtcyAqLworCitzdGF0aWMgaW50IGdldF9mcmVxX3N0YXRzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBodW1hbikKK3sKKwl1bnNpZ25lZCBsb25nIHRvdGFsX3RyYW5zID0gY3B1ZnJlcV9nZXRfdHJhbnNpdGlvbnMoY3B1KTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfdGltZTsKKwlzdHJ1Y3QgY3B1ZnJlcV9zdGF0cyAqc3RhdHMgPSBjcHVmcmVxX2dldF9zdGF0cyhjcHUsICZ0b3RhbF90aW1lKTsKKwl3aGlsZSAoc3RhdHMpIHsKKwkJaWYgKGh1bWFuKSB7CisJCQlwcmludF9zcGVlZChzdGF0cy0+ZnJlcXVlbmN5KTsKKwkJCXByaW50ZigiOiUuMmYlJSIsCisJCQkJKDEwMC4wICogc3RhdHMtPnRpbWVfaW5fc3RhdGUpIC8gdG90YWxfdGltZSk7CisJCX0gZWxzZQorCQkJcHJpbnRmKCIlbHU6JWxsdSIsCisJCQkJc3RhdHMtPmZyZXF1ZW5jeSwgc3RhdHMtPnRpbWVfaW5fc3RhdGUpOworCQlzdGF0cyA9IHN0YXRzLT5uZXh0OworCQlpZiAoc3RhdHMpCisJCQlwcmludGYoIiwgIik7CisJfQorCWNwdWZyZXFfcHV0X3N0YXRzKHN0YXRzKTsKKwlpZiAodG90YWxfdHJhbnMpCisJCXByaW50ZigiICAoJWx1KVxuIiwgdG90YWxfdHJhbnMpOworCXJldHVybiAwOworfQorCisvKiAtLWxhdGVuY3kgLyAteSAqLworCitzdGF0aWMgaW50IGdldF9sYXRlbmN5KHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBodW1hbikKK3sKKwl1bnNpZ25lZCBsb25nIGxhdGVuY3kgPSBjcHVmcmVxX2dldF90cmFuc2l0aW9uX2xhdGVuY3koY3B1KTsKKwlpZiAoIWxhdGVuY3kpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGh1bWFuKSB7CisJCXByaW50X2R1cmF0aW9uKGxhdGVuY3kpOworCQlwcmludGYoIlxuIik7CisJfSBlbHNlCisJCXByaW50ZigiJWx1XG4iLCBsYXRlbmN5KTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmcmVxX2luZm9faGVscCh2b2lkKQoreworCXByaW50ZihfKCJVc2FnZTogY3B1cG93ZXIgZnJlcWluZm8gW29wdGlvbnNdXG4iKSk7CisJcHJpbnRmKF8oIk9wdGlvbnM6XG4iKSk7CisJcHJpbnRmKF8oIiAgLWUsIC0tZGVidWcgICAgICAgICAgUHJpbnRzIG91dCBkZWJ1ZyBpbmZvcm1hdGlvbiBbZGVmYXVsdF1cbiIpKTsKKwlwcmludGYoXygiICAtZiwgLS1mcmVxICAgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGFjY29yZGluZ1xuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3B1ZnJlcSBjb3JlICpcbiIpKTsKKwlwcmludGYoXygiICAtdywgLS1od2ZyZXEgICAgICAgICBHZXQgZnJlcXVlbmN5IHRoZSBDUFUgY3VycmVudGx5IHJ1bnMgYXQsIGJ5IHJlYWRpbmdcbiIKKwkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgaXQgZnJvbSBoYXJkd2FyZSAob25seSBhdmFpbGFibGUgdG8gcm9vdCkgKlxuIikpOworCXByaW50ZihfKCIgIC1sLCAtLWh3bGltaXRzICAgICAgIERldGVybWluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBDUFUgZnJlcXVlbmN5IGFsbG93ZWQgKlxuIikpOworCXByaW50ZihfKCIgIC1kLCAtLWRyaXZlciAgICAgICAgIERldGVybWluZXMgdGhlIHVzZWQgY3B1ZnJlcSBrZXJuZWwgZHJpdmVyICpcbiIpKTsKKwlwcmludGYoXygiICAtcCwgLS1wb2xpY3kgICAgICAgICBHZXRzIHRoZSBjdXJyZW50bHkgdXNlZCBjcHVmcmVxIHBvbGljeSAqXG4iKSk7CisJcHJpbnRmKF8oIiAgLWcsIC0tZ292ZXJub3JzICAgICAgRGV0ZXJtaW5lcyBhdmFpbGFibGUgY3B1ZnJlcSBnb3Zlcm5vcnMgKlxuIikpOworCXByaW50ZihfKCIgIC1yLCAtLXJlbGF0ZWQtY3B1cyAgIERldGVybWluZXMgd2hpY2ggQ1BVcyBydW4gYXQgdGhlIHNhbWUgaGFyZHdhcmUgZnJlcXVlbmN5ICpcbiIpKTsKKwlwcmludGYoXygiICAtYSwgLS1hZmZlY3RlZC1jcHVzICBEZXRlcm1pbmVzIHdoaWNoIENQVXMgbmVlZCB0byBoYXZlIHRoZWlyIGZyZXF1ZW5jeVxuIgorCQkJIiAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZWQgYnkgc29mdHdhcmUgKlxuIikpOworCXByaW50ZihfKCIgIC1zLCAtLXN0YXRzICAgICAgICAgIFNob3dzIGNwdWZyZXEgc3RhdGlzdGljcyBpZiBhdmFpbGFibGVcbiIpKTsKKwlwcmludGYoXygiICAteSwgLS1sYXRlbmN5ICAgICAgICBEZXRlcm1pbmVzIHRoZSBtYXhpbXVtIGxhdGVuY3kgb24gQ1BVIGZyZXF1ZW5jeSBjaGFuZ2VzICpcbiIpKTsKKwlwcmludGYoXygiICAtYiwgLS1ib29zdCAgICAgICAgICBDaGVja3MgZm9yIHR1cmJvIG9yIGJvb3N0IG1vZGVzICAqXG4iKSk7CisJcHJpbnRmKF8oIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy9jcHVmcmVxXG4iCisJICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiAyLjQuIGFuZCBlYXJseSAyLjYuIGtlcm5lbHNcbiIpKTsKKwlwcmludGYoXygiICAtbSwgLS1odW1hbiAgICAgICAgICBodW1hbi1yZWFkYWJsZSBvdXRwdXQgZm9yIHRoZSAtZiwgLXcsIC1zIGFuZCAteSBwYXJhbWV0ZXJzXG4iKSk7CisJcHJpbnRmKF8oIiAgLWgsIC0taGVscCAgICAgICAgICAgUHJpbnRzIG91dCB0aGlzIHNjcmVlblxuIikpOworCisJcHJpbnRmKCJcbiIpOworCXByaW50ZihfKCJJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgZnVsbCBvdXRwdXQgYWJvdXRcbiIKKwkgICAgICAgImNwdWZyZXEgaXMgcHJpbnRlZCB3aGljaCBpcyB1c2VmdWwgZS5nLiBmb3IgcmVwb3J0aW5nIGJ1Z3MuXG5cbiIpKTsKKwlwcmludGYoXygiQnkgZGVmYXVsdCBpbmZvIG9mIENQVSAwIGlzIHNob3duIHdoaWNoIGNhbiBiZSBvdmVycmlkZGVuXG4iCisJCSAid2l0aCB0aGUgY3B1cG93ZXIgLS1jcHUgbWFpbiBjb21tYW5kIG9wdGlvbi5cbiIpKTsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gaW5mb19vcHRzW10gPSB7CisJeyAubmFtZSA9ICJkZWJ1ZyIsCS5oYXNfYXJnID0gbm9fYXJndW1lbnQsCQkuZmxhZyA9IE5VTEwsCS52YWwgPSAnZSd9LAorCXsgLm5hbWUgPSAiYm9vc3QiLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2InfSwKKwl7IC5uYW1lID0gImZyZXEiLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2YnfSwKKwl7IC5uYW1lID0gImh3ZnJlcSIsCS5oYXNfYXJnID0gbm9fYXJndW1lbnQsCQkuZmxhZyA9IE5VTEwsCS52YWwgPSAndyd9LAorCXsgLm5hbWUgPSAiaHdsaW1pdHMiLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2wnfSwKKwl7IC5uYW1lID0gImRyaXZlciIsCS5oYXNfYXJnID0gbm9fYXJndW1lbnQsCQkuZmxhZyA9IE5VTEwsCS52YWwgPSAnZCd9LAorCXsgLm5hbWUgPSAicG9saWN5IiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdwJ30sCisJeyAubmFtZSA9ICJnb3Zlcm5vcnMiLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2cnfSwKKwl7IC5uYW1lID0gInJlbGF0ZWQtY3B1cyIsIC5oYXNfYXJnID0gbm9fYXJndW1lbnQsCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdyJ30sCisJeyAubmFtZSA9ICJhZmZlY3RlZC1jcHVzIiwuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkuZmxhZyA9IE5VTEwsCS52YWwgPSAnYSd9LAorCXsgLm5hbWUgPSAic3RhdHMiLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkJLmZsYWcgPSBOVUxMLAkudmFsID0gJ3MnfSwKKwl7IC5uYW1lID0gImxhdGVuY3kiLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkJLmZsYWcgPSBOVUxMLAkudmFsID0gJ3knfSwKKwl7IC5uYW1lID0gInByb2MiLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkJLmZsYWcgPSBOVUxMLAkudmFsID0gJ28nfSwKKwl7IC5uYW1lID0gImh1bWFuIiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdtJ30sCisJeyAubmFtZSA9ICJoZWxwIiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdoJ30sCisJeyB9LAorfTsKKworaW50IGNtZF9mcmVxX2luZm8oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dGVybiBjaGFyICpvcHRhcmc7CisJZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OworCWludCByZXQgPSAwLCBjb250ID0gMTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gMDsKKwl1bnNpZ25lZCBpbnQgaHVtYW4gPSAwOworCWludCBvdXRwdXRfcGFyYW0gPSAwOworCisJZG8geworCQlyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiaG9lZndsZHBncmFzbXliIiwgaW5mb19vcHRzLCBOVUxMKTsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnPyc6CisJCQlvdXRwdXRfcGFyYW0gPSAnPyc7CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCW91dHB1dF9wYXJhbSA9ICdoJzsKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgLTE6CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdiJzoKKwkJY2FzZSAnbyc6CisJCWNhc2UgJ2EnOgorCQljYXNlICdyJzoKKwkJY2FzZSAnZyc6CisJCWNhc2UgJ3AnOgorCQljYXNlICdkJzoKKwkJY2FzZSAnbCc6CisJCWNhc2UgJ3cnOgorCQljYXNlICdmJzoKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ3MnOgorCQljYXNlICd5JzoKKwkJCWlmIChvdXRwdXRfcGFyYW0pIHsKKwkJCQlvdXRwdXRfcGFyYW0gPSAtMTsKKwkJCQljb250ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW91dHB1dF9wYXJhbSA9IHJldDsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChodW1hbikgeworCQkJCW91dHB1dF9wYXJhbSA9IC0xOworCQkJCWNvbnQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJaHVtYW4gPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKHN0ZGVyciwgImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIik7CisJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQl9CisJfSB3aGlsZSAoY29udCk7CisKKwlzd2l0Y2ggKG91dHB1dF9wYXJhbSkgeworCWNhc2UgJ28nOgorCQlpZiAoIWJpdG1hc2tfaXNhbGxjbGVhcihjcHVzX2Nob3NlbikpIHsKKwkJCXByaW50ZihfKCJUaGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgdG9vbCBjYW4ndCBiZSAiCisJCQkJICJjb21iaW5lZCB3aXRoIHBhc3NpbmcgYSAtLWNwdSBhcmd1bWVudFxuIikpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAwOgorCQlvdXRwdXRfcGFyYW0gPSAnZSc7CisJfQorCisJcmV0ID0gMDsKKworCS8qIERlZmF1bHQgaXM6IHNob3cgb3V0cHV0IG9mIENQVSAwIG9ubHkgKi8KKwlpZiAoYml0bWFza19pc2FsbGNsZWFyKGNwdXNfY2hvc2VuKSkKKwkJYml0bWFza19zZXRiaXQoY3B1c19jaG9zZW4sIDApOworCisJc3dpdGNoIChvdXRwdXRfcGFyYW0pIHsKKwljYXNlIC0xOgorCQlwcmludGYoXygiWW91IGNhbid0IHNwZWNpZnkgbW9yZSB0aGFuIG9uZSAtLWNwdSBwYXJhbWV0ZXIgYW5kL29yXG4iCisJCSAgICAgICAibW9yZSB0aGFuIG9uZSBvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSAnPyc6CisJCXByaW50ZihfKCJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIpKTsKKwkJZnJlcV9pbmZvX2hlbHAoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSAnaCc6CisJCWZyZXFfaW5mb19oZWxwKCk7CisJCXJldHVybiBFWElUX1NVQ0NFU1M7CisJY2FzZSAnbyc6CisJCXByb2NfY3B1ZnJlcV9vdXRwdXQoKTsKKwkJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKwl9CisKKwlmb3IgKGNwdSA9IGJpdG1hc2tfZmlyc3QoY3B1c19jaG9zZW4pOworCSAgICAgY3B1IDw9IGJpdG1hc2tfbGFzdChjcHVzX2Nob3Nlbik7IGNwdSsrKSB7CisKKwkJaWYgKCFiaXRtYXNrX2lzYml0c2V0KGNwdXNfY2hvc2VuLCBjcHUpKQorCQkJY29udGludWU7CisJCWlmIChjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSkgeworCQkJcHJpbnRmKF8oImNvdWxkbid0IGFuYWx5emUgQ1BVICVkIGFzIGl0IGRvZXNuJ3Qgc2VlbSB0byBiZSBwcmVzZW50XG4iKSwgY3B1KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXByaW50ZihfKCJhbmFseXppbmcgQ1BVICVkOlxuIiksIGNwdSk7CisKKwkJc3dpdGNoIChvdXRwdXRfcGFyYW0pIHsKKwkJY2FzZSAnYic6CisJCQlnZXRfYm9vc3RfbW9kZShjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ2UnOgorCQkJZGVidWdfb3V0cHV0X29uZShjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgJ2EnOgorCQkJcmV0ID0gZ2V0X2FmZmVjdGVkX2NwdXMoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlICdyJzoKKwkJCXJldCA9IGdldF9yZWxhdGVkX2NwdXMoY3B1KTsKKwkJCWJyZWFrOworCQljYXNlICdnJzoKKwkJCXJldCA9IGdldF9hdmFpbGFibGVfZ292ZXJub3JzKGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAncCc6CisJCQlyZXQgPSBnZXRfcG9saWN5KGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlyZXQgPSBnZXRfZHJpdmVyKGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAnbCc6CisJCQlyZXQgPSBnZXRfaGFyZHdhcmVfbGltaXRzKGNwdSk7CisJCQlicmVhazsKKwkJY2FzZSAndyc6CisJCQlyZXQgPSBnZXRfZnJlcV9oYXJkd2FyZShjcHUsIGh1bWFuKTsKKwkJCWJyZWFrOworCQljYXNlICdmJzoKKwkJCXJldCA9IGdldF9mcmVxX2tlcm5lbChjcHUsIGh1bWFuKTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCXJldCA9IGdldF9mcmVxX3N0YXRzKGNwdSwgaHVtYW4pOworCQkJYnJlYWs7CisJCWNhc2UgJ3knOgorCQkJcmV0ID0gZ2V0X2xhdGVuY3koY3B1LCBodW1hbik7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdWZyZXEtc2V0LmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNzgzNjIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVmcmVxLXNldC5jCkBAIC0wLDAgKzEsMzU4IEBACisvKgorICogIChDKSAyMDA0LTIwMDkgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDxnZXRvcHQuaD4KKworI2luY2x1ZGUgImNwdWZyZXEuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworI2RlZmluZSBOT1JNX0ZSRVFfTEVOIDMyCisKK3ZvaWQgZnJlcV9zZXRfaGVscCh2b2lkKQoreworCXByaW50ZihfKCJVc2FnZTogY3B1cG93ZXIgZnJlcXVlbmN5LXNldCBbb3B0aW9uc11cbiIpKTsKKwlwcmludGYoXygiT3B0aW9uczpcbiIpKTsKKwlwcmludGYoXygiICAtZCBGUkVRLCAtLW1pbiBGUkVRICAgICAgbmV3IG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB0aGUgZ292ZXJub3IgbWF5IHNlbGVjdFxuIikpOworCXByaW50ZihfKCIgIC11IEZSRVEsIC0tbWF4IEZSRVEgICAgICBuZXcgbWF4aW11bSBDUFUgZnJlcXVlbmN5IHRoZSBnb3Zlcm5vciBtYXkgc2VsZWN0XG4iKSk7CisJcHJpbnRmKF8oIiAgLWcgR09WLCAtLWdvdmVybm9yIEdPViAgIG5ldyBjcHVmcmVxIGdvdmVybm9yXG4iKSk7CisJcHJpbnRmKF8oIiAgLWYgRlJFUSwgLS1mcmVxIEZSRVEgICAgIHNwZWNpZmljIGZyZXF1ZW5jeSB0byBiZSBzZXQuIFJlcXVpcmVzIHVzZXJzcGFjZVxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgZ292ZXJub3IgdG8gYmUgYXZhaWxhYmxlIGFuZCBsb2FkZWRcbiIpKTsKKwlwcmludGYoXygiICAtciwgLS1yZWxhdGVkICAgICAgICAgICAgU3dpdGNoZXMgYWxsIGhhcmR3YXJlLXJlbGF0ZWQgQ1BVc1xuIikpOworCXByaW50ZihfKCIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iKSk7CisJcHJpbnRmKCJcbiIpOworCXByaW50ZihfKCJOb3RlczpcbiIKKwkgICAgICAgIjEuIE9taXR0aW5nIHRoZSAtYyBvciAtLWNwdSBhcmd1bWVudCBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgaXQgdG8gXCJhbGxcIlxuIikpOworCXByaW50ZihfKCIyLiBUaGUgLWYgRlJFUSwgLS1mcmVxIEZSRVEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGFueSBvdGhlciBwYXJhbWV0ZXJcbiIKKwkgICAgICAgIiAgIGV4Y2VwdCB0aGUgLWMgQ1BVLCAtLWNwdSBDUFUgcGFyYW1ldGVyXG4iCisJICAgICAgICIzLiBGUkVRdWVuY2llcyBjYW4gYmUgcGFzc2VkIGluIEh6LCBrSHogKGRlZmF1bHQpLCBNSHosIEdIeiwgb3IgVEh6XG4iCisJICAgICAgICIgICBieSBwb3N0Zml4aW5nIHRoZSB2YWx1ZSB3aXRoIHRoZSB3YW50ZWQgdW5pdCBuYW1lLCB3aXRob3V0IGFueSBzcGFjZVxuIgorCSAgICAgICAiICAgKEZSRVF1ZW5jeSBpbiBrSHogPV4gSHogKiAwLjAwMSA9XiBNSHogKiAxMDAwID1eIEdIeiAqIDEwMDAwMDApLlxuIikpOworCit9CisKK3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIHNldF9vcHRzW10gPSB7CisJeyAubmFtZSA9ICJtaW4iLAkuaGFzX2FyZyA9IHJlcXVpcmVkX2FyZ3VtZW50LAkuZmxhZyA9IE5VTEwsCS52YWwgPSAnZCd9LAorCXsgLm5hbWUgPSAibWF4IiwJLmhhc19hcmcgPSByZXF1aXJlZF9hcmd1bWVudCwJLmZsYWcgPSBOVUxMLAkudmFsID0gJ3UnfSwKKwl7IC5uYW1lID0gImdvdmVybm9yIiwJLmhhc19hcmcgPSByZXF1aXJlZF9hcmd1bWVudCwJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2cnfSwKKwl7IC5uYW1lID0gImZyZXEiLAkuaGFzX2FyZyA9IHJlcXVpcmVkX2FyZ3VtZW50LAkuZmxhZyA9IE5VTEwsCS52YWwgPSAnZid9LAorCXsgLm5hbWUgPSAiaGVscCIsCS5oYXNfYXJnID0gbm9fYXJndW1lbnQsCQkuZmxhZyA9IE5VTEwsCS52YWwgPSAnaCd9LAorCXsgLm5hbWUgPSAicmVsYXRlZCIsCS5oYXNfYXJnID0gbm9fYXJndW1lbnQsCQkuZmxhZyA9IE5VTEwsCS52YWw9J3InfSwKKwl7IH0sCit9OworCitzdGF0aWMgdm9pZCBwcmludF9lcnJvcih2b2lkKQoreworCXByaW50ZihfKCJFcnJvciBzZXR0aW5nIG5ldyB2YWx1ZXMuIENvbW1vbiBlcnJvcnM6XG4iCisJCQkiLSBEbyB5b3UgaGF2ZSBwcm9wZXIgYWRtaW5pc3RyYXRpb24gcmlnaHRzPyAoc3VwZXItdXNlcj8pXG4iCisJCQkiLSBJcyB0aGUgZ292ZXJub3IgeW91IHJlcXVlc3RlZCBhdmFpbGFibGUgYW5kIG1vZHByb2JlZD9cbiIKKwkJCSItIFRyeWluZyB0byBzZXQgYW4gaW52YWxpZCBwb2xpY3k/XG4iCisJCQkiLSBUcnlpbmcgdG8gc2V0IGEgc3BlY2lmaWMgZnJlcXVlbmN5LCBidXQgdXNlcnNwYWNlIGdvdmVybm9yIGlzIG5vdCBhdmFpbGFibGUsXG4iCisJCQkiICAgZm9yIGV4YW1wbGUgYmVjYXVzZSBvZiBoYXJkd2FyZSB3aGljaCBjYW5ub3QgYmUgc2V0IHRvIGEgc3BlY2lmaWMgZnJlcXVlbmN5XG4iCisJCQkiICAgb3IgYmVjYXVzZSB0aGUgdXNlcnNwYWNlIGdvdmVybm9yIGlzbid0IGxvYWRlZD9cbiIpKTsKK307CisKK3N0cnVjdCBmcmVxX3VuaXRzIHsKKwljaGFyCQkqc3RyX3VuaXQ7CisJaW50CQlwb3dlcl9vZl90ZW47Cit9OworCitjb25zdCBzdHJ1Y3QgZnJlcV91bml0cyBkZWZfdW5pdHNbXSA9IHsKKwl7Imh6IiwgLTN9LAorCXsia2h6IiwgMH0sIC8qIGRlZmF1bHQgKi8KKwl7Im1oeiIsIDN9LAorCXsiZ2h6IiwgNn0sCisJeyJ0aHoiLCA5fSwKKwl7TlVMTCwgMH0KK307CisKK3N0YXRpYyB2b2lkIHByaW50X3Vua25vd25fYXJnKHZvaWQpCit7CisJcHJpbnRmKF8oImludmFsaWQgb3IgdW5rbm93biBhcmd1bWVudFxuIikpOworCWZyZXFfc2V0X2hlbHAoKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgc3RyaW5nX3RvX2ZyZXF1ZW5jeShjb25zdCBjaGFyICpzdHIpCit7CisJY2hhciBub3JtYWxpemVkW05PUk1fRlJFUV9MRU5dOworCWNvbnN0IHN0cnVjdCBmcmVxX3VuaXRzICp1bml0OworCWNvbnN0IGNoYXIgKnNjYW47CisJY2hhciAqZW5kOworCXVuc2lnbmVkIGxvbmcgZnJlcTsKKwlpbnQgcG93ZXIgPSAwLCBtYXRjaF9jb3VudCA9IDAsIGksIGNwLCBwYWQ7CisKKwl3aGlsZSAoKnN0ciA9PSAnMCcpCisJCXN0cisrOworCisJZm9yIChzY2FuID0gc3RyOyBpc2RpZ2l0KCpzY2FuKSB8fCAqc2NhbiA9PSAnLic7IHNjYW4rKykgeworCQlpZiAoKnNjYW4gPT0gJy4nICYmIG1hdGNoX2NvdW50ID09IDApCisJCQltYXRjaF9jb3VudCA9IDE7CisJCWVsc2UgaWYgKCpzY2FuID09ICcuJyAmJiBtYXRjaF9jb3VudCA9PSAxKQorCQkJcmV0dXJuIDA7CisJfQorCisJaWYgKCpzY2FuKSB7CisJCW1hdGNoX2NvdW50ID0gMDsKKwkJZm9yICh1bml0ID0gZGVmX3VuaXRzOyB1bml0LT5zdHJfdW5pdDsgdW5pdCsrKSB7CisJCQlmb3IgKGkgPSAwOworCQkJICAgICBzY2FuW2ldICYmIHRvbG93ZXIoc2NhbltpXSkgPT0gdW5pdC0+c3RyX3VuaXRbaV07CisJCQkgICAgICsraSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzY2FuW2ldKQorCQkJCWNvbnRpbnVlOworCQkJbWF0Y2hfY291bnQrKzsKKwkJCXBvd2VyID0gdW5pdC0+cG93ZXJfb2ZfdGVuOworCQl9CisJCWlmIChtYXRjaF9jb3VudCAhPSAxKQorCQkJcmV0dXJuIDA7CisJfQorCisJLyogY291bnQgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gYmUgY29waWVkICovCisJZm9yIChjcCA9IDA7IGlzZGlnaXQoc3RyW2NwXSk7IGNwKyspCisJCWNvbnRpbnVlOworCisJaWYgKHN0cltjcF0gPT0gJy4nKSB7CisJCXdoaWxlIChwb3dlciA+IC0xICYmIGlzZGlnaXQoc3RyW2NwKzFdKSkKKwkJCWNwKyssIHBvd2VyLS07CisJfQorCWlmIChwb3dlciA+PSAtMSkJLyogbm90IGVub3VnaCA9PiBwYWQgKi8KKwkJcGFkID0gcG93ZXIgKyAxOworCWVsc2UJCQkvKiB0byBtdWNoID0+IHN0cmlwICovCisJCXBhZCA9IDAsIGNwICs9IHBvd2VyICsgMTsKKwkvKiBjaGVjayBib3VuZHMgKi8KKwlpZiAoY3AgPD0gMCB8fCBjcCArIHBhZCA+IE5PUk1fRlJFUV9MRU4gLSAxKQorCQlyZXR1cm4gMDsKKworCS8qIGNvcHkgZGlnaXRzICovCisJZm9yIChpID0gMDsgaSA8IGNwOyBpKyssIHN0cisrKSB7CisJCWlmICgqc3RyID09ICcuJykKKwkJCXN0cisrOworCQlub3JtYWxpemVkW2ldID0gKnN0cjsKKwl9CisJLyogYW5kIHBhZCAqLworCWZvciAoOyBpIDwgY3AgKyBwYWQ7IGkrKykKKwkJbm9ybWFsaXplZFtpXSA9ICcwJzsKKworCS8qIHJvdW5kIHVwLCBkb3duID8gKi8KKwltYXRjaF9jb3VudCA9IChub3JtYWxpemVkW2ktMV0gPj0gJzUnKTsKKwkvKiBhbmQgZHJvcCB0aGUgZGVjaW1hbCBwYXJ0ICovCisJbm9ybWFsaXplZFtpLTFdID0gMDsgLyogY3AgPiAwICYmIHBhZCA+PSAwID09PiBpID4gMCAqLworCisJLyogZmluYWwgY29udmVyc2lvbiAoYW5kIGFwcGx5aW5nIHJvdW5kaW5nKSAqLworCWVycm5vID0gMDsKKwlmcmVxID0gc3RydG91bChub3JtYWxpemVkLCAmZW5kLCAxMCk7CisJaWYgKGVycm5vKQorCQlyZXR1cm4gMDsKKwllbHNlIHsKKwkJaWYgKG1hdGNoX2NvdW50ICYmIGZyZXEgIT0gVUxPTkdfTUFYKQorCQkJZnJlcSsrOworCQlyZXR1cm4gZnJlcTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZG9fbmV3X3BvbGljeSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKm5ld19wb2wpCit7CisJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjdXJfcG9sID0gY3B1ZnJlcV9nZXRfcG9saWN5KGNwdSk7CisJaW50IHJldDsKKworCWlmICghY3VyX3BvbCkgeworCQlwcmludGYoXygid3JvbmcsIHVua25vd24gb3IgdW5oYW5kbGVkIENQVT9cbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFuZXdfcG9sLT5taW4pCisJCW5ld19wb2wtPm1pbiA9IGN1cl9wb2wtPm1pbjsKKworCWlmICghbmV3X3BvbC0+bWF4KQorCQluZXdfcG9sLT5tYXggPSBjdXJfcG9sLT5tYXg7CisKKwlpZiAoIW5ld19wb2wtPmdvdmVybm9yKQorCQluZXdfcG9sLT5nb3Zlcm5vciA9IGN1cl9wb2wtPmdvdmVybm9yOworCisJcmV0ID0gY3B1ZnJlcV9zZXRfcG9saWN5KGNwdSwgbmV3X3BvbCk7CisKKwljcHVmcmVxX3B1dF9wb2xpY3koY3VyX3BvbCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgZG9fb25lX2NwdSh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKm5ld19wb2wsCisJCXVuc2lnbmVkIGxvbmcgZnJlcSwgdW5zaWduZWQgaW50IHBjKQoreworCXN3aXRjaCAocGMpIHsKKwljYXNlIDA6CisJCXJldHVybiBjcHVmcmVxX3NldF9mcmVxdWVuY3koY3B1LCBmcmVxKTsKKworCWNhc2UgMToKKwkJLyogaWYgb25seSBvbmUgdmFsdWUgb2YgYSBwb2xpY3kgaXMgdG8gYmUgY2hhbmdlZCwgd2UgY2FuCisJCSAqIHVzZSBhICJmYXN0IHBhdGgiLgorCQkgKi8KKwkJaWYgKG5ld19wb2wtPm1pbikKKwkJCXJldHVybiBjcHVmcmVxX21vZGlmeV9wb2xpY3lfbWluKGNwdSwgbmV3X3BvbC0+bWluKTsKKwkJZWxzZSBpZiAobmV3X3BvbC0+bWF4KQorCQkJcmV0dXJuIGNwdWZyZXFfbW9kaWZ5X3BvbGljeV9tYXgoY3B1LCBuZXdfcG9sLT5tYXgpOworCQllbHNlIGlmIChuZXdfcG9sLT5nb3Zlcm5vcikKKwkJCXJldHVybiBjcHVmcmVxX21vZGlmeV9wb2xpY3lfZ292ZXJub3IoY3B1LAorCQkJCQkJCW5ld19wb2wtPmdvdmVybm9yKTsKKworCWRlZmF1bHQ6CisJCS8qIHNsb3cgcGF0aCAqLworCQlyZXR1cm4gZG9fbmV3X3BvbGljeShjcHUsIG5ld19wb2wpOworCX0KK30KKworaW50IGNtZF9mcmVxX3NldChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKwlleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CisJaW50IHJldCA9IDAsIGNvbnQgPSAxOworCWludCBkb3VibGVfcGFybSA9IDAsIHJlbGF0ZWQgPSAwLCBwb2xpY3ljaGFuZ2UgPSAwOworCXVuc2lnbmVkIGxvbmcgZnJlcSA9IDA7CisJY2hhciBnb3ZbMjBdOworCXVuc2lnbmVkIGludCBjcHU7CisKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgbmV3X3BvbCA9IHsKKwkJLm1pbiA9IDAsCisJCS5tYXggPSAwLAorCQkuZ292ZXJub3IgPSBOVUxMLAorCX07CisKKwkvKiBwYXJhbWV0ZXIgcGFyc2luZyAqLworCWRvIHsKKwkJcmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImQ6dTpnOmY6aHIiLCBzZXRfb3B0cywgTlVMTCk7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgJz8nOgorCQkJcHJpbnRfdW5rbm93bl9hcmcoKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQljYXNlICdoJzoKKwkJCWZyZXFfc2V0X2hlbHAoKTsKKwkJCXJldHVybiAwOworCQljYXNlIC0xOgorCQkJY29udCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAncic6CisJCQlpZiAocmVsYXRlZCkKKwkJCQlkb3VibGVfcGFybSsrOworCQkJcmVsYXRlZCsrOworCQkJYnJlYWs7CisJCWNhc2UgJ2QnOgorCQkJaWYgKG5ld19wb2wubWluKQorCQkJCWRvdWJsZV9wYXJtKys7CisJCQlwb2xpY3ljaGFuZ2UrKzsKKwkJCW5ld19wb2wubWluID0gc3RyaW5nX3RvX2ZyZXF1ZW5jeShvcHRhcmcpOworCQkJaWYgKG5ld19wb2wubWluID09IDApIHsKKwkJCQlwcmludF91bmtub3duX2FyZygpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ3UnOgorCQkJaWYgKG5ld19wb2wubWF4KQorCQkJCWRvdWJsZV9wYXJtKys7CisJCQlwb2xpY3ljaGFuZ2UrKzsKKwkJCW5ld19wb2wubWF4ID0gc3RyaW5nX3RvX2ZyZXF1ZW5jeShvcHRhcmcpOworCQkJaWYgKG5ld19wb2wubWF4ID09IDApIHsKKwkJCQlwcmludF91bmtub3duX2FyZygpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ2YnOgorCQkJaWYgKGZyZXEpCisJCQkJZG91YmxlX3Bhcm0rKzsKKwkJCWZyZXEgPSBzdHJpbmdfdG9fZnJlcXVlbmN5KG9wdGFyZyk7CisJCQlpZiAoZnJlcSA9PSAwKSB7CisJCQkJcHJpbnRfdW5rbm93bl9hcmcoKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICdnJzoKKwkJCWlmIChuZXdfcG9sLmdvdmVybm9yKQorCQkJCWRvdWJsZV9wYXJtKys7CisJCQlwb2xpY3ljaGFuZ2UrKzsKKwkJCWlmICgoc3RybGVuKG9wdGFyZykgPCAzKSB8fCAoc3RybGVuKG9wdGFyZykgPiAxOCkpIHsKKwkJCQlwcmludF91bmtub3duX2FyZygpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWYgKChzc2NhbmYob3B0YXJnLCAiJXMiLCBnb3YpKSAhPSAxKSB7CisJCQkJcHJpbnRfdW5rbm93bl9hcmcoKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCW5ld19wb2wuZ292ZXJub3IgPSBnb3Y7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKGNvbnQpOworCisJLyogcGFyYW1ldGVyIGNoZWNraW5nICovCisJaWYgKGRvdWJsZV9wYXJtKSB7CisJCXByaW50ZigidGhlIHNhbWUgcGFyYW1ldGVyIHdhcyBwYXNzZWQgbW9yZSB0aGFuIG9uY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoZnJlcSAmJiBwb2xpY3ljaGFuZ2UpIHsKKwkJcHJpbnRmKF8oInRoZSAtZi8tLWZyZXEgcGFyYW1ldGVyIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIC1kLy0tbWluLCAtdS8tLW1heCBvclxuIgorCQkJCSItZy8tLWdvdmVybm9yIHBhcmFtZXRlcnNcbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFmcmVxICYmICFwb2xpY3ljaGFuZ2UpIHsKKwkJcHJpbnRmKF8oIkF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3V0IG9mIC1mLy0tZnJlcSwgLWQvLS1taW4sIC11Ly0tbWF4LCBhbmRcbiIKKwkJCQkiLWcvLS1nb3Zlcm5vciBtdXN0IGJlIHBhc3NlZFxuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEZWZhdWx0IGlzOiBzZXQgYWxsIENQVXMgKi8KKwlpZiAoYml0bWFza19pc2FsbGNsZWFyKGNwdXNfY2hvc2VuKSkKKwkJYml0bWFza19zZXRhbGwoY3B1c19jaG9zZW4pOworCisJLyogQWxzbyBzZXQgZnJlcXVlbmN5IHNldHRpbmdzIGZvciByZWxhdGVkIENQVXMgaWYgLXIgaXMgcGFzc2VkICovCisJaWYgKHJlbGF0ZWQpIHsKKwkJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkJICAgICBjcHUgPD0gYml0bWFza19sYXN0KGNwdXNfY2hvc2VuKTsgY3B1KyspIHsKKwkJCXN0cnVjdCBjcHVmcmVxX2FmZmVjdGVkX2NwdXMgKmNwdXM7CisKKwkJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSB8fAorCQkJICAgIGNwdWZyZXFfY3B1X2V4aXN0cyhjcHUpKQorCQkJCWNvbnRpbnVlOworCisJCQljcHVzID0gY3B1ZnJlcV9nZXRfcmVsYXRlZF9jcHVzKGNwdSk7CisJCQlpZiAoIWNwdXMpCisJCQkJYnJlYWs7CisJCQl3aGlsZSAoY3B1cy0+bmV4dCkgeworCQkJCWJpdG1hc2tfc2V0Yml0KGNwdXNfY2hvc2VuLCBjcHVzLT5jcHUpOworCQkJCWNwdXMgPSBjcHVzLT5uZXh0OworCQkJfQorCQkJY3B1ZnJlcV9wdXRfcmVsYXRlZF9jcHVzKGNwdXMpOworCQl9CisJfQorCisKKwkvKiBsb29wIG92ZXIgQ1BVcyAqLworCWZvciAoY3B1ID0gYml0bWFza19maXJzdChjcHVzX2Nob3Nlbik7CisJICAgICBjcHUgPD0gYml0bWFza19sYXN0KGNwdXNfY2hvc2VuKTsgY3B1KyspIHsKKworCQlpZiAoIWJpdG1hc2tfaXNiaXRzZXQoY3B1c19jaG9zZW4sIGNwdSkgfHwKKwkJICAgIGNwdWZyZXFfY3B1X2V4aXN0cyhjcHUpKQorCQkJY29udGludWU7CisKKwkJcHJpbnRmKF8oIlNldHRpbmcgY3B1OiAlZFxuIiksIGNwdSk7CisJCXJldCA9IGRvX29uZV9jcHUoY3B1LCAmbmV3X3BvbCwgZnJlcSwgcG9saWN5Y2hhbmdlKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCWlmIChyZXQpCisJCXByaW50X2Vycm9yKCk7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1aWRsZS1pbmZvLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVpZGxlLWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGRhMzU3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1aWRsZS1pbmZvLmMKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiAgKEMpIDIwMDQtMjAwOSAgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kuZGU+CisgKiAgKEMpIDIwMTAgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICovCisKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNsdWRlIDxjcHVmcmVxLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL3N5c2ZzLmgiCisjaW5jbHVkZSAiaGVscGVycy9iaXRtYXNrLmgiCisKKyNkZWZpbmUgTElORV9MRU4gMTAKKworc3RhdGljIHZvaWQgY3B1aWRsZV9jcHVfb3V0cHV0KHVuc2lnbmVkIGludCBjcHUsIGludCB2ZXJib3NlKQoreworCWludCBpZGxlc3RhdGVzLCBpZGxlc3RhdGU7CisJY2hhciAqdG1wOworCisJcHJpbnRmKF8gKCJBbmFseXppbmcgQ1BVICVkOlxuIiksIGNwdSk7CisKKwlpZGxlc3RhdGVzID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9jb3VudChjcHUpOworCWlmIChpZGxlc3RhdGVzID09IDApIHsKKwkJcHJpbnRmKF8oIkNQVSAldTogTm8gaWRsZSBzdGF0ZXNcbiIpLCBjcHUpOworCQlyZXR1cm47CisJfSBlbHNlIGlmIChpZGxlc3RhdGVzIDw9IDApIHsKKwkJcHJpbnRmKF8oIkNQVSAldTogQ2FuJ3QgcmVhZCBpZGxlIHN0YXRlIGluZm9cbiIpLCBjcHUpOworCQlyZXR1cm47CisJfQorCXRtcCA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfbmFtZShjcHUsIGlkbGVzdGF0ZXMgLSAxKTsKKwlpZiAoIXRtcCkgeworCQlwcmludGYoXygiQ291bGQgbm90IGRldGVybWluZSBtYXggaWRsZSBzdGF0ZSAldVxuIiksCisJCSAgICAgICBpZGxlc3RhdGVzIC0gMSk7CisJCXJldHVybjsKKwl9CisKKwlwcmludGYoXygiTnVtYmVyIG9mIGlkbGUgc3RhdGVzOiAlZFxuIiksIGlkbGVzdGF0ZXMpOworCisJcHJpbnRmKF8oIkF2YWlsYWJsZSBpZGxlIHN0YXRlczoiKSk7CisJZm9yIChpZGxlc3RhdGUgPSAxOyBpZGxlc3RhdGUgPCBpZGxlc3RhdGVzOyBpZGxlc3RhdGUrKykgeworCQl0bXAgPSBzeXNmc19nZXRfaWRsZXN0YXRlX25hbWUoY3B1LCBpZGxlc3RhdGUpOworCQlpZiAoIXRtcCkKKwkJCWNvbnRpbnVlOworCQlwcmludGYoIiAlcyIsIHRtcCk7CisJCWZyZWUodG1wKTsKKwl9CisJcHJpbnRmKCJcbiIpOworCisJaWYgKCF2ZXJib3NlKQorCQlyZXR1cm47CisKKwlmb3IgKGlkbGVzdGF0ZSA9IDE7IGlkbGVzdGF0ZSA8IGlkbGVzdGF0ZXM7IGlkbGVzdGF0ZSsrKSB7CisJCXRtcCA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfbmFtZShjcHUsIGlkbGVzdGF0ZSk7CisJCWlmICghdG1wKQorCQkJY29udGludWU7CisJCXByaW50ZigiJXM6XG4iLCB0bXApOworCQlmcmVlKHRtcCk7CisKKwkJdG1wID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9kZXNjKGNwdSwgaWRsZXN0YXRlKTsKKwkJaWYgKCF0bXApCisJCQljb250aW51ZTsKKwkJcHJpbnRmKF8oIkZsYWdzL0Rlc2NyaXB0aW9uOiAlc1xuIiksIHRtcCk7CisJCWZyZWUodG1wKTsKKworCQlwcmludGYoXygiTGF0ZW5jeTogJWx1XG4iKSwKKwkJICAgICAgIHN5c2ZzX2dldF9pZGxlc3RhdGVfbGF0ZW5jeShjcHUsIGlkbGVzdGF0ZSkpOworCQlwcmludGYoXygiVXNhZ2U6ICVsdVxuIiksCisJCSAgICAgICBzeXNmc19nZXRfaWRsZXN0YXRlX3VzYWdlKGNwdSwgaWRsZXN0YXRlKSk7CisJCXByaW50ZihfKCJEdXJhdGlvbjogJWxsdVxuIiksCisJCSAgICAgICBzeXNmc19nZXRfaWRsZXN0YXRlX3RpbWUoY3B1LCBpZGxlc3RhdGUpKTsKKwl9CisJcHJpbnRmKCJcbiIpOworfQorCitzdGF0aWMgdm9pZCBjcHVpZGxlX2dlbmVyYWxfb3V0cHV0KHZvaWQpCit7CisJY2hhciAqdG1wOworCisJdG1wID0gc3lzZnNfZ2V0X2NwdWlkbGVfZHJpdmVyKCk7CisJaWYgKCF0bXApIHsKKwkJcHJpbnRmKF8oIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBkcml2ZXJcbiIpKTsKKwkJcmV0dXJuOworCX0KKworCXByaW50ZihfKCJDUFVpZGxlIGRyaXZlcjogJXNcbiIpLCB0bXApOworCWZyZWUodG1wKTsKKworCXRtcCA9IHN5c2ZzX2dldF9jcHVpZGxlX2dvdmVybm9yKCk7CisJaWYgKCF0bXApIHsKKwkJcHJpbnRmKF8oIkNvdWxkIG5vdCBkZXRlcm1pbmUgY3B1aWRsZSBnb3Zlcm5vclxuIikpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRmKF8oIkNQVWlkbGUgZ292ZXJub3I6ICVzXG4iKSwgdG1wKTsKKwlmcmVlKHRtcCk7Cit9CisKK3N0YXRpYyB2b2lkIHByb2NfY3B1aWRsZV9jcHVfb3V0cHV0KHVuc2lnbmVkIGludCBjcHUpCit7CisJbG9uZyBtYXhfYWxsb3dlZF9jc3RhdGUgPSAyMDAwMDAwMDAwOworCWludCBjc3RhdGVzLCBjc3RhdGU7CisKKwljc3RhdGVzID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9jb3VudChjcHUpOworCWlmIChjc3RhdGVzID09IDApIHsKKwkJLyoKKwkJICogR28gb24gYW5kIHByaW50IHNhbWUgdXNlbGVzcyBpbmZvIGFzIHlvdSdkIHNlZSB3aXRoCisJCSAqIGNhdCAvcHJvYy9hY3BpL3Byb2Nlc3Nvci8uLi9wb3dlcgorCQkgKglwcmludGYoXygiQ1BVICV1OiBObyBDLXN0YXRlcyBhdmFpbGFibGVcbiIpLCBjcHUpOworCQkgKglyZXR1cm47CisJCSAqLworCX0gZWxzZSBpZiAoY3N0YXRlcyA8PSAwKSB7CisJCXByaW50ZihfKCJDUFUgJXU6IENhbid0IHJlYWQgQy1zdGF0ZSBpbmZvXG4iKSwgY3B1KTsKKwkJcmV0dXJuOworCX0KKwkvKiBwcmludGYoIkNzdGF0ZXM6ICVkXG4iLCBjc3RhdGVzKTsgKi8KKworCXByaW50ZihfKCJhY3RpdmUgc3RhdGU6ICAgICAgICAgICAgQzBcbiIpKTsKKwlwcmludGYoXygibWF4X2NzdGF0ZTogICAgICAgICAgICAgIEMldVxuIiksIGNzdGF0ZXMtMSk7CisJcHJpbnRmKF8oIm1heGltdW0gYWxsb3dlZCBsYXRlbmN5OiAlbHUgdXNlY1xuIiksIG1heF9hbGxvd2VkX2NzdGF0ZSk7CisJcHJpbnRmKF8oInN0YXRlczpcdFxuIikpOworCWZvciAoY3N0YXRlID0gMTsgY3N0YXRlIDwgY3N0YXRlczsgY3N0YXRlKyspIHsKKwkJcHJpbnRmKF8oIiAgICBDJWQ6ICAgICAgICAgICAgICAgICAgIgorCQkJICJ0eXBlW0MlZF0gIiksIGNzdGF0ZSwgY3N0YXRlKTsKKwkJcHJpbnRmKF8oInByb21vdGlvblstLV0gZGVtb3Rpb25bLS1dICIpKTsKKwkJcHJpbnRmKF8oImxhdGVuY3lbJTAzbHVdICIpLAorCQkgICAgICAgc3lzZnNfZ2V0X2lkbGVzdGF0ZV9sYXRlbmN5KGNwdSwgY3N0YXRlKSk7CisJCXByaW50ZihfKCJ1c2FnZVslMDhsdV0gIiksCisJCSAgICAgICBzeXNmc19nZXRfaWRsZXN0YXRlX3VzYWdlKGNwdSwgY3N0YXRlKSk7CisJCXByaW50ZihfKCJkdXJhdGlvblslMDIwTHVdIFxuIiksCisJCSAgICAgICBzeXNmc19nZXRfaWRsZXN0YXRlX3RpbWUoY3B1LCBjc3RhdGUpKTsKKwl9Cit9CisKKy8qIC0tZnJlcSAvIC1mICovCisKK3ZvaWQgaWRsZV9pbmZvX2hlbHAodm9pZCkKK3sKKwlwcmludGYoXyAoIlVzYWdlOiBjcHVwb3dlciBpZGxlaW5mbyBbb3B0aW9uc11cbiIpKTsKKwlwcmludGYoXyAoIk9wdGlvbnM6XG4iKSk7CisJcHJpbnRmKF8gKCIgIC1zLCAtLXNpbGVudCAgICAgICAgIE9ubHkgc2hvdyBnZW5lcmFsIEMtc3RhdGUgaW5mb3JtYXRpb25cbiIpKTsKKwlwcmludGYoXyAoIiAgLW8sIC0tcHJvYyAgICAgICAgICAgUHJpbnRzIG91dCBpbmZvcm1hdGlvbiBsaWtlIHByb3ZpZGVkIGJ5IHRoZSAvcHJvYy9hY3BpL3Byb2Nlc3Nvci8qL3Bvd2VyXG4iCisJICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpbiBvbGRlciBrZXJuZWxzXG4iKSk7CisJcHJpbnRmKF8gKCIgIC1oLCAtLWhlbHAgICAgICAgICAgIFByaW50cyBvdXQgdGhpcyBzY3JlZW5cbiIpKTsKKworCXByaW50ZigiXG4iKTsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gaW5mb19vcHRzW10gPSB7CisJeyAubmFtZSA9ICJzaWxlbnQiLAkuaGFzX2FyZyA9IG5vX2FyZ3VtZW50LAkuZmxhZyA9IE5VTEwsCS52YWwgPSAncyd9LAorCXsgLm5hbWUgPSAicHJvYyIsCS5oYXNfYXJnID0gbm9fYXJndW1lbnQsCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdvJ30sCisJeyAubmFtZSA9ICJoZWxwIiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2gnfSwKKwl7IH0sCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1aWRsZV9leGl0KGludCBmYWlsKQoreworCWlkbGVfaW5mb19oZWxwKCk7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitpbnQgY21kX2lkbGVfaW5mbyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJZXh0ZXJuIGNoYXIgKm9wdGFyZzsKKwlleHRlcm4gaW50IG9wdGluZCwgb3B0ZXJyLCBvcHRvcHQ7CisJaW50IHJldCA9IDAsIGNvbnQgPSAxLCBvdXRwdXRfcGFyYW0gPSAwLCB2ZXJib3NlID0gMTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gMDsKKworCWRvIHsKKwkJcmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImhvcyIsIGluZm9fb3B0cywgTlVMTCk7CisJCWlmIChyZXQgPT0gLTEpCisJCQlicmVhazsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnPyc6CisJCQlvdXRwdXRfcGFyYW0gPSAnPyc7CisJCQljb250ID0gMDsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJCW91dHB1dF9wYXJhbSA9ICdoJzsKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJdmVyYm9zZSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAtMToKKwkJCWNvbnQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgJ28nOgorCQkJaWYgKG91dHB1dF9wYXJhbSkgeworCQkJCW91dHB1dF9wYXJhbSA9IC0xOworCQkJCWNvbnQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJb3V0cHV0X3BhcmFtID0gcmV0OworCQkJYnJlYWs7CisJCX0KKwl9IHdoaWxlIChjb250KTsKKworCXN3aXRjaCAob3V0cHV0X3BhcmFtKSB7CisJY2FzZSAtMToKKwkJcHJpbnRmKF8oIllvdSBjYW4ndCBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgIgorCQkJICJvdXRwdXQtc3BlY2lmaWMgYXJndW1lbnRcbiIpKTsKKwkJY3B1aWRsZV9leGl0KEVYSVRfRkFJTFVSRSk7CisJY2FzZSAnPyc6CisJCXByaW50ZihfKCJpbnZhbGlkIG9yIHVua25vd24gYXJndW1lbnRcbiIpKTsKKwkJY3B1aWRsZV9leGl0KEVYSVRfRkFJTFVSRSk7CisJY2FzZSAnaCc6CisJCWNwdWlkbGVfZXhpdChFWElUX1NVQ0NFU1MpOworCX0KKworCS8qIERlZmF1bHQgaXM6IHNob3cgb3V0cHV0IG9mIENQVSAwIG9ubHkgKi8KKwlpZiAoYml0bWFza19pc2FsbGNsZWFyKGNwdXNfY2hvc2VuKSkKKwkJYml0bWFza19zZXRiaXQoY3B1c19jaG9zZW4sIDApOworCisJaWYgKG91dHB1dF9wYXJhbSA9PSAwKQorCQljcHVpZGxlX2dlbmVyYWxfb3V0cHV0KCk7CisKKwlmb3IgKGNwdSA9IGJpdG1hc2tfZmlyc3QoY3B1c19jaG9zZW4pOworCSAgICAgY3B1IDw9IGJpdG1hc2tfbGFzdChjcHVzX2Nob3Nlbik7IGNwdSsrKSB7CisKKwkJaWYgKCFiaXRtYXNrX2lzYml0c2V0KGNwdXNfY2hvc2VuLCBjcHUpIHx8CisJCSAgICBjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSkKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAob3V0cHV0X3BhcmFtKSB7CisKKwkJY2FzZSAnbyc6CisJCQlwcm9jX2NwdWlkbGVfY3B1X291dHB1dChjcHUpOworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJCXByaW50ZigiXG4iKTsKKwkJCWNwdWlkbGVfY3B1X291dHB1dChjcHUsIHZlcmJvc2UpOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLWluZm8uYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2NwdXBvd2VyLWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTI1M2NiCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXItaW5mby5jCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogIChDKSAyMDExIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorCisjaW5jbHVkZSA8Y3B1ZnJlcS5oPgorI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImhlbHBlcnMvc3lzZnMuaCIKKwordm9pZCBpbmZvX2hlbHAodm9pZCkKK3sKKwlwcmludGYoXygiVXNhZ2U6IGNwdXBvd2VyIGluZm8gWyAtYiBdIFsgLW0gXSBbIC1zIF1cbiIpKTsKKwlwcmludGYoXygiT3B0aW9uczpcbiIpKTsKKwlwcmludGYoXygiICAtYiwgLS1wZXJmLWJpYXMgICAgR2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIpKTsKKwlwcmludGYoXygiICAtbSwgLS1zY2hlZC1tYyAgICAgR2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIikpOworCXByaW50ZihfKCIgIC1zLCAtLXNjaGVkLXNtdCAgICBHZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIikpOworCXByaW50ZihfKCIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iKSk7CisJcHJpbnRmKF8oIlxuUGFzc2luZyBubyBvcHRpb24gd2lsbCBzaG93IGFsbCBpbmZvLCBieSBkZWZhdWx0IG9ubHkgb24gY29yZSAwXG4iKSk7CisJcHJpbnRmKCJcbiIpOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBzZXRfb3B0c1tdID0geworCXsgLm5hbWUgPSAicGVyZi1iaWFzIiwJLmhhc19hcmcgPSBvcHRpb25hbF9hcmd1bWVudCwJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2InfSwKKwl7IC5uYW1lID0gInNjaGVkLW1jIiwJLmhhc19hcmcgPSBvcHRpb25hbF9hcmd1bWVudCwJLmZsYWcgPSBOVUxMLAkudmFsID0gJ20nfSwKKwl7IC5uYW1lID0gInNjaGVkLXNtdCIsCS5oYXNfYXJnID0gb3B0aW9uYWxfYXJndW1lbnQsCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdzJ30sCisJeyAubmFtZSA9ICJoZWxwIiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdoJ30sCisJeyB9LAorfTsKKworc3RhdGljIHZvaWQgcHJpbnRfd3JvbmdfYXJnX2V4aXQodm9pZCkKK3sKKwlwcmludGYoXygiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iKSk7CisJaW5mb19oZWxwKCk7CisJZXhpdChFWElUX0ZBSUxVUkUpOworfQorCitpbnQgY21kX2luZm8oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWV4dGVybiBjaGFyICpvcHRhcmc7CisJZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OworCXVuc2lnbmVkIGludCBjcHU7CisKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlpbnQgc2NoZWRfbWM6MTsKKwkJCWludCBzY2hlZF9zbXQ6MTsKKwkJCWludCBwZXJmX2JpYXM6MTsKKwkJfTsKKwkJaW50IHBhcmFtczsKKwl9IHBhcmFtcyA9IHt9OworCWludCByZXQgPSAwOworCisJc2V0bG9jYWxlKExDX0FMTCwgIiIpOworCXRleHRkb21haW4oUEFDS0FHRSk7CisKKwkvKiBwYXJhbWV0ZXIgcGFyc2luZyAqLworCXdoaWxlICgocmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgIm1zYmgiLCBzZXRfb3B0cywgTlVMTCkpICE9IC0xKSB7CisJCXN3aXRjaCAocmV0KSB7CisJCWNhc2UgJ2gnOgorCQkJaW5mb19oZWxwKCk7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAnYic6CisJCQlpZiAocGFyYW1zLnBlcmZfYmlhcykKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJcGFyYW1zLnBlcmZfYmlhcyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAocGFyYW1zLnNjaGVkX21jKQorCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQlwYXJhbXMuc2NoZWRfbWMgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJaWYgKHBhcmFtcy5zY2hlZF9zbXQpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXBhcmFtcy5zY2hlZF9zbXQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQl9CisJfTsKKworCWlmICghcGFyYW1zLnBhcmFtcykKKwkJcGFyYW1zLnBhcmFtcyA9IDB4NzsKKworCS8qIERlZmF1bHQgaXM6IHNob3cgb3V0cHV0IG9mIENQVSAwIG9ubHkgKi8KKwlpZiAoYml0bWFza19pc2FsbGNsZWFyKGNwdXNfY2hvc2VuKSkKKwkJYml0bWFza19zZXRiaXQoY3B1c19jaG9zZW4sIDApOworCisJaWYgKHBhcmFtcy5zY2hlZF9tYykgeworCQlyZXQgPSBzeXNmc19nZXRfc2NoZWQoIm1jIik7CisJCXByaW50ZihfKCJTeXN0ZW0ncyBtdWx0aSBjb3JlIHNjaGVkdWxlciBzZXR0aW5nOiAiKSk7CisJCWlmIChyZXQgPCAwKQorCQkJLyogaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVCAqLworCQkJcHJpbnRmKF8oIm5vdCBzdXBwb3J0ZWRcbiIpKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlZFxuIiwgcmV0KTsKKwl9CisJaWYgKHBhcmFtcy5zY2hlZF9zbXQpIHsKKwkJcmV0ID0gc3lzZnNfZ2V0X3NjaGVkKCJzbXQiKTsKKwkJcHJpbnRmKF8oIlN5c3RlbSdzIHRocmVhZCBzaWJsaW5nIHNjaGVkdWxlciBzZXR0aW5nOiAiKSk7CisJCWlmIChyZXQgPCAwKQorCQkJLyogaWYgc3lzZnMgZmlsZSBpcyBtaXNzaW5nIGl0J3M6IGVycm5vID09IEVOT0VOVCAqLworCQkJcHJpbnRmKF8oIm5vdCBzdXBwb3J0ZWRcbiIpKTsKKwkJZWxzZQorCQkJcHJpbnRmKCIlZFxuIiwgcmV0KTsKKwl9CisKKwkvKiBBZGQgbW9yZSBwZXIgY3B1IG9wdGlvbnMgaGVyZSAqLworCWlmICghcGFyYW1zLnBlcmZfYmlhcykKKwkJcmV0dXJuIHJldDsKKworCWlmIChwYXJhbXMucGVyZl9iaWFzKSB7CisJCWlmICghcnVuX2FzX3Jvb3QpIHsKKwkJCXBhcmFtcy5wZXJmX2JpYXMgPSAwOworCQkJcHJpbnRmKF8oIkludGVsJ3MgcGVyZm9ybWFuY2UgYmlhcyBzZXR0aW5nIG5lZWRzIHJvb3QgcHJpdmlsZWdlc1xuIikpOworCQl9IGVsc2UgaWYgKCEoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9QRVJGX0JJQVMpKSB7CisJCQlwcmludGYoXygiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgSW50ZWwncyBwZXJmb3JtYW5jZSIKKwkJCQkgIiBiaWFzIHNldHRpbmdcbiIpKTsKKwkJCXBhcmFtcy5wZXJmX2JpYXMgPSAwOworCQl9CisJfQorCisJLyogbG9vcCBvdmVyIENQVXMgKi8KKwlmb3IgKGNwdSA9IGJpdG1hc2tfZmlyc3QoY3B1c19jaG9zZW4pOworCSAgICAgY3B1IDw9IGJpdG1hc2tfbGFzdChjcHVzX2Nob3Nlbik7IGNwdSsrKSB7CisKKwkJaWYgKCFiaXRtYXNrX2lzYml0c2V0KGNwdXNfY2hvc2VuLCBjcHUpIHx8CisJCSAgICBjcHVmcmVxX2NwdV9leGlzdHMoY3B1KSkKKwkJCWNvbnRpbnVlOworCisJCXByaW50ZihfKCJhbmFseXppbmcgQ1BVICVkOlxuIiksIGNwdSk7CisKKwkJaWYgKHBhcmFtcy5wZXJmX2JpYXMpIHsKKwkJCXJldCA9IG1zcl9pbnRlbF9nZXRfcGVyZl9iaWFzKGNwdSk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXByaW50ZihfKCJDb3VsZCBub3QgcmVhZCBwZXJmLWJpYXMgdmFsdWVcbiIpKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZQorCQkJCXByaW50ZihfKCJwZXJmLWJpYXM6ICVkXG4iKSwgcmV0KTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXItc2V0LmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci1zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzFiMzkxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXItc2V0LmMKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiAgKEMpIDIwMTEgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisKKyNpbmNsdWRlIDxjcHVmcmVxLmg+CisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisjaW5jbHVkZSAiaGVscGVycy9zeXNmcy5oIgorI2luY2x1ZGUgImhlbHBlcnMvYml0bWFzay5oIgorCit2b2lkIHNldF9oZWxwKHZvaWQpCit7CisJcHJpbnRmKF8oIlVzYWdlOiBjcHVwb3dlciBzZXQgWyAtYiB2YWwgXSBbIC1tIHZhbCBdIFsgLXMgdmFsIF1cbiIpKTsKKwlwcmludGYoXygiT3B0aW9uczpcbiIpKTsKKwlwcmludGYoXygiICAtYiwgLS1wZXJmLWJpYXMgW1ZBTF0gICAgU2V0cyBDUFUncyBwb3dlciB2cyBwZXJmb3JtYW5jZSBwb2xpY3kgb24gc29tZVxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZWwgbW9kZWxzIFswLTE1XSwgc2VlIG1hbnBhZ2UgZm9yIGRldGFpbHNcbiIpKTsKKwlwcmludGYoXygiICAtbSwgLS1zY2hlZC1tYyAgW1ZBTF0gICAgU2V0cyB0aGUga2VybmVsJ3MgbXVsdGkgY29yZSBzY2hlZHVsZXIgcG9saWN5LlxuIikpOworCXByaW50ZihfKCIgIC1zLCAtLXNjaGVkLXNtdCBbVkFMXSAgICBTZXRzIHRoZSBrZXJuZWwncyB0aHJlYWQgc2libGluZyBzY2hlZHVsZXIgcG9saWN5LlxuIikpOworCXByaW50ZihfKCIgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICBQcmludHMgb3V0IHRoaXMgc2NyZWVuXG4iKSk7CisJcHJpbnRmKCJcbiIpOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBzZXRfb3B0c1tdID0geworCXsgLm5hbWUgPSAicGVyZi1iaWFzIiwJLmhhc19hcmcgPSBvcHRpb25hbF9hcmd1bWVudCwJLmZsYWcgPSBOVUxMLAkudmFsID0gJ2InfSwKKwl7IC5uYW1lID0gInNjaGVkLW1jIiwJLmhhc19hcmcgPSBvcHRpb25hbF9hcmd1bWVudCwJLmZsYWcgPSBOVUxMLAkudmFsID0gJ20nfSwKKwl7IC5uYW1lID0gInNjaGVkLXNtdCIsCS5oYXNfYXJnID0gb3B0aW9uYWxfYXJndW1lbnQsCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdzJ30sCisJeyAubmFtZSA9ICJoZWxwIiwJLmhhc19hcmcgPSBub19hcmd1bWVudCwJCS5mbGFnID0gTlVMTCwJLnZhbCA9ICdoJ30sCisJeyB9LAorfTsKKworc3RhdGljIHZvaWQgcHJpbnRfd3JvbmdfYXJnX2V4aXQodm9pZCkKK3sKKwlwcmludGYoXygiaW52YWxpZCBvciB1bmtub3duIGFyZ3VtZW50XG4iKSk7CisJc2V0X2hlbHAoKTsKKwlleGl0KEVYSVRfRkFJTFVSRSk7Cit9CisKK2ludCBjbWRfc2V0KGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlleHRlcm4gY2hhciAqb3B0YXJnOworCWV4dGVybiBpbnQgb3B0aW5kLCBvcHRlcnIsIG9wdG9wdDsKKwl1bnNpZ25lZCBpbnQgY3B1OworCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJaW50IHNjaGVkX21jOjE7CisJCQlpbnQgc2NoZWRfc210OjE7CisJCQlpbnQgcGVyZl9iaWFzOjE7CisJCX07CisJCWludCBwYXJhbXM7CisJfSBwYXJhbXM7CisJaW50IHNjaGVkX21jID0gMCwgc2NoZWRfc210ID0gMCwgcGVyZl9iaWFzID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKKwl0ZXh0ZG9tYWluKFBBQ0tBR0UpOworCisJcGFyYW1zLnBhcmFtcyA9IDA7CisJLyogcGFyYW1ldGVyIHBhcnNpbmcgKi8KKwl3aGlsZSAoKHJldCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3YsICJtOnM6YjpoIiwKKwkJCQkJCXNldF9vcHRzLCBOVUxMKSkgIT0gLTEpIHsKKwkJc3dpdGNoIChyZXQpIHsKKwkJY2FzZSAnaCc6CisJCQlzZXRfaGVscCgpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgJ2InOgorCQkJaWYgKHBhcmFtcy5wZXJmX2JpYXMpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXBlcmZfYmlhcyA9IGF0b2kob3B0YXJnKTsKKwkJCWlmIChwZXJmX2JpYXMgPCAwIHx8IHBlcmZfYmlhcyA+IDE1KSB7CisJCQkJcHJpbnRmKF8oIi0tcGVyZi1iaWFzIHBhcmFtIG91dCAiCisJCQkJCSAib2YgcmFuZ2UgWzAtJWRdXG4iKSwgMTUpOworCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQl9CisJCQlwYXJhbXMucGVyZl9iaWFzID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChwYXJhbXMuc2NoZWRfbWMpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXNjaGVkX21jID0gYXRvaShvcHRhcmcpOworCQkJaWYgKHNjaGVkX21jIDwgMCB8fCBzY2hlZF9tYyA+IDIpIHsKKwkJCQlwcmludGYoXygiLS1zY2hlZC1tYyBwYXJhbSBvdXQgIgorCQkJCQkgIm9mIHJhbmdlIFswLSVkXVxuIiksIDIpOworCQkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCQl9CisJCQlwYXJhbXMuc2NoZWRfbWMgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJaWYgKHBhcmFtcy5zY2hlZF9zbXQpCisJCQkJcHJpbnRfd3JvbmdfYXJnX2V4aXQoKTsKKwkJCXNjaGVkX3NtdCA9IGF0b2kob3B0YXJnKTsKKwkJCWlmIChzY2hlZF9zbXQgPCAwIHx8IHNjaGVkX3NtdCA+IDIpIHsKKwkJCQlwcmludGYoXygiLS1zY2hlZC1zbXQgcGFyYW0gb3V0ICIKKwkJCQkJICJvZiByYW5nZSBbMC0lZF1cbiIpLCAyKTsKKwkJCQlwcmludF93cm9uZ19hcmdfZXhpdCgpOworCQkJfQorCQkJcGFyYW1zLnNjaGVkX3NtdCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50X3dyb25nX2FyZ19leGl0KCk7CisJCX0KKwl9OworCisJaWYgKCFwYXJhbXMucGFyYW1zKSB7CisJCXNldF9oZWxwKCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwYXJhbXMuc2NoZWRfbWMpIHsKKwkJcmV0ID0gc3lzZnNfc2V0X3NjaGVkKCJtYyIsIHNjaGVkX21jKTsKKwkJaWYgKHJldCkKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJFcnJvciBzZXR0aW5nIHNjaGVkLW1jICVzXG4iKSwKKwkJCQkocmV0ID09IC1FTk9ERVYpID8gIm5vdCBzdXBwb3J0ZWQiIDogIiIpOworCX0KKwlpZiAocGFyYW1zLnNjaGVkX3NtdCkgeworCQlyZXQgPSBzeXNmc19zZXRfc2NoZWQoInNtdCIsIHNjaGVkX3NtdCk7CisJCWlmIChyZXQpCisJCQlmcHJpbnRmKHN0ZGVyciwgXygiRXJyb3Igc2V0dGluZyBzY2hlZC1zbXQgJXNcbiIpLAorCQkJCShyZXQgPT0gLUVOT0RFVikgPyAibm90IHN1cHBvcnRlZCIgOiAiIik7CisJfQorCisJLyogRGVmYXVsdCBpczogc2V0IGFsbCBDUFVzICovCisJaWYgKGJpdG1hc2tfaXNhbGxjbGVhcihjcHVzX2Nob3NlbikpCisJCWJpdG1hc2tfc2V0YWxsKGNwdXNfY2hvc2VuKTsKKworCS8qIGxvb3Agb3ZlciBDUFVzICovCisJZm9yIChjcHUgPSBiaXRtYXNrX2ZpcnN0KGNwdXNfY2hvc2VuKTsKKwkgICAgIGNwdSA8PSBiaXRtYXNrX2xhc3QoY3B1c19jaG9zZW4pOyBjcHUrKykgeworCisJCWlmICghYml0bWFza19pc2JpdHNldChjcHVzX2Nob3NlbiwgY3B1KSB8fAorCQkgICAgY3B1ZnJlcV9jcHVfZXhpc3RzKGNwdSkpCisJCQljb250aW51ZTsKKworCQlpZiAocGFyYW1zLnBlcmZfYmlhcykgeworCQkJcmV0ID0gbXNyX2ludGVsX3NldF9wZXJmX2JpYXMoY3B1LCBwZXJmX2JpYXMpOworCQkJaWYgKHJldCkgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJFcnJvciBzZXR0aW5nIHBlcmYtYmlhcyAiCisJCQkJCQkgICJ2YWx1ZSBvbiBDUFUgJWRcbiIpLCBjcHUpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9jcHVwb3dlci5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODQ0YWUwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvY3B1cG93ZXIuYwpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIElkZWFzIHRha2VuIG92ZXIgZnJvbSB0aGUgcGVyZiB1c2Vyc3BhY2UgdG9vbCAoaW5jbHVkZWQgaW4gdGhlIExpbnVzCisgKiAga2VybmVsIGdpdCByZXBvKTogc3ViY29tbWFuZCBidWlsdGlucyBhbmQgcGFyYW0gcGFyc2luZy4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImJ1aWx0aW4uaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2JpdG1hc2suaCIKKworc3RydWN0IGNtZF9zdHJ1Y3QgeworCWNvbnN0IGNoYXIgKmNtZDsKKwlpbnQgKCptYWluKShpbnQsIGNvbnN0IGNoYXIgKiopOworCXZvaWQgKCp1c2FnZSkodm9pZCk7CisJaW50IG5lZWRzX3Jvb3Q7Cit9OworCisjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KS9zaXplb2YoeFswXSkpCisKK2ludCBjbWRfaGVscChpbnQgYXJnYywgY29uc3QgY2hhciAqKmFyZ3YpOworCisvKiBHbG9iYWwgY3B1X2luZm8gb2JqZWN0IGF2YWlsYWJsZSBmb3IgYWxsIGJpbmFyaWVzCisgKiBJbmZvIG9ubHkgcmV0cmlldmVkIGZyb20gQ1BVIDAKKyAqCisgKiBWYWx1ZXMgd2lsbCBiZSB6ZXJvL3Vua25vd24gb24gbm9uIFg4NiBhcmNocworICovCitzdHJ1Y3QgY3B1cG93ZXJfY3B1X2luZm8gY3B1cG93ZXJfY3B1X2luZm87CitpbnQgcnVuX2FzX3Jvb3Q7CisvKiBBZmZlY3RlZCBjcHVzIGNob3NlbiBieSAtYy8tLWNwdSBwYXJhbSAqLworc3RydWN0IGJpdG1hc2sgKmNwdXNfY2hvc2VuOworCisjaWZkZWYgREVCVUcKK2ludCBiZV92ZXJib3NlOworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHByaW50X2hlbHAodm9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgY21kX3N0cnVjdCBjb21tYW5kc1tdID0geworCXsgImZyZXF1ZW5jeS1pbmZvIiwJY21kX2ZyZXFfaW5mbywJZnJlcV9pbmZvX2hlbHAsCTAJfSwKKwl7ICJmcmVxdWVuY3ktc2V0IiwJY21kX2ZyZXFfc2V0LAlmcmVxX3NldF9oZWxwLAkxCX0sCisJeyAiaWRsZS1pbmZvIiwJCWNtZF9pZGxlX2luZm8sCWlkbGVfaW5mb19oZWxwLAkwCX0sCisJeyAic2V0IiwJCWNtZF9zZXQsCXNldF9oZWxwLAkxCX0sCisJeyAiaW5mbyIsCQljbWRfaW5mbywJaW5mb19oZWxwLAkwCX0sCisJeyAibW9uaXRvciIsCQljbWRfbW9uaXRvciwJbW9uaXRvcl9oZWxwLAkwCX0sCisJeyAiaGVscCIsCQljbWRfaGVscCwJcHJpbnRfaGVscCwJMAl9LAorCS8qCXsgImJlbmNoIiwJY21kX2JlbmNoLAlOVUxMLAkJMQl9LCAqLworfTsKKworaW50IGNtZF9oZWxwKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChhcmdjID4gMSkgeworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb21tYW5kcyk7IGkrKykgeworCQkJc3RydWN0IGNtZF9zdHJ1Y3QgKnAgPSBjb21tYW5kcyArIGk7CisJCQlpZiAoc3RyY21wKHAtPmNtZCwgYXJndlsxXSkpCisJCQkJY29udGludWU7CisJCQlpZiAocC0+dXNhZ2UpIHsKKwkJCQlwLT51c2FnZSgpOworCQkJCXJldHVybiBFWElUX1NVQ0NFU1M7CisJCQl9CisJCX0KKwl9CisJcHJpbnRfaGVscCgpOworCWlmIChhcmdjID09IDEpCisJCXJldHVybiBFWElUX1NVQ0NFU1M7IC8qIGNwdXBvd2VyIGhlbHAgKi8KKwlyZXR1cm4gRVhJVF9GQUlMVVJFOworfQorCitzdGF0aWMgdm9pZCBwcmludF9oZWxwKHZvaWQpCit7CisJdW5zaWduZWQgaW50IGk7CisKKyNpZmRlZiBERUJVRworCXByaW50ZihfKCJjcHVwb3dlciBbIC1kIF1bIC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXVxuIikpOworCXByaW50ZihfKCIgIC1kLCAtLWRlYnVnICAgICAgTWF5IGluY3JlYXNlIG91dHB1dCAoc3RkZXJyKSBvbiBzb21lIHN1YmNvbW1hbmRzXG4iKSk7CisjZWxzZQorCXByaW50ZihfKCJjcHVwb3dlciBbIC1jIGNwdWxpc3QgXSBzdWJjb21tYW5kIFtBUkdTXVxuIikpOworI2VuZGlmCisJcHJpbnRmKF8oImNwdXBvd2VyIC0tdmVyc2lvblxuIikpOworCXByaW50ZihfKCJTdXBwb3J0ZWQgc3ViY29tbWFuZHMgYXJlOlxuIikpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1hbmRzKTsgaSsrKQorCQlwcmludGYoIlx0JXNcbiIsIGNvbW1hbmRzW2ldLmNtZCk7CisJcHJpbnRmKF8oIlxuU29tZSBzdWJjb21tYW5kcyBjYW4gbWFrZSB1c2Ugb2YgdGhlIC1jIGNwdWxpc3Qgb3B0aW9uLlxuIikpOworCXByaW50ZihfKCJMb29rIGF0IHRoZSBnZW5lcmFsIGNwdXBvd2VyIG1hbnBhZ2UgaG93IHRvIHVzZSBpdFxuIikpOworCXByaW50ZihfKCJhbmQgcmVhZCB1cCB0aGUgc3ViY29tbWFuZCdzIG1hbnBhZ2Ugd2hldGhlciBpdCBpcyBzdXBwb3J0ZWQuXG4iKSk7CisJcHJpbnRmKF8oIlxuVXNlIGNwdXBvd2VyIGhlbHAgc3ViY29tbWFuZCBmb3IgZ2V0dGluZyBoZWxwIGZvciBhYm92ZSBzdWJjb21tYW5kcy5cbiIpKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdmVyc2lvbih2b2lkKQoreworCXByaW50ZihQQUNLQUdFICIgIiBWRVJTSU9OICJcbiIpOworCXByaW50ZihfKCJSZXBvcnQgZXJyb3JzIGFuZCBidWdzIHRvICVzLCBwbGVhc2UuXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfb3B0aW9ucyhpbnQgKmFyZ2MsIGNvbnN0IGNoYXIgKioqYXJndikKK3sKKwlpbnQgcmV0LCB4LCBuZXdfYXJnYyA9IDA7CisKKwlpZiAoKmFyZ2MgPCAxKQorCQlyZXR1cm47CisKKwlmb3IgKHggPSAwOyAgeCA8ICphcmdjICYmICgoKmFyZ3YpW3hdKVswXSA9PSAnLSc7IHgrKykgeworCQljb25zdCBjaGFyICpwYXJhbSA9ICgqYXJndilbeF07CisJCWlmICghc3RyY21wKHBhcmFtLCAiLWgiKSB8fCAhc3RyY21wKHBhcmFtLCAiLS1oZWxwIikpIHsKKwkJCXByaW50X2hlbHAoKTsKKwkJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHBhcmFtLCAiLWMiKSB8fCAhc3RyY21wKHBhcmFtLCAiLS1jcHUiKSkgeworCQkJaWYgKCphcmdjIDwgMikgeworCQkJCXByaW50X2hlbHAoKTsKKwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQl9CisJCQlpZiAoIXN0cmNtcCgoKmFyZ3YpW3grMV0sICJhbGwiKSkKKwkJCQliaXRtYXNrX3NldGFsbChjcHVzX2Nob3Nlbik7CisJCQllbHNlIHsKKwkJCQlyZXQgPSBiaXRtYXNrX3BhcnNlbGlzdCgKKwkJCQkJCSgqYXJndilbeCsxXSwgY3B1c19jaG9zZW4pOworCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJCWZwcmludGYoc3RkZXJyLCBfKCJFcnJvciBwYXJzaW5nIGNwdSAiCisJCQkJCQkJICAibGlzdFxuIikpOworCQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQkJfQorCQkJfQorCQkJeCArPSAxOworCQkJLyogQ3V0IG91dCBwYXJhbTogY3B1cG93ZXIgLWMgMSBpbmZvIC0+IGNwdXBvd2VyIGluZm8gKi8KKwkJCW5ld19hcmdjICs9IDI7CisJCQljb250aW51ZTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHBhcmFtLCAiLXYiKSB8fAorCQkJIXN0cmNtcChwYXJhbSwgIi0tdmVyc2lvbiIpKSB7CisJCQlwcmludF92ZXJzaW9uKCk7CisJCQlleGl0KEVYSVRfU1VDQ0VTUyk7CisjaWZkZWYgREVCVUcKKwkJfSBlbHNlIGlmICghc3RyY21wKHBhcmFtLCAiLWQiKSB8fCAhc3RyY21wKHBhcmFtLCAiLS1kZWJ1ZyIpKSB7CisJCQliZV92ZXJib3NlID0gMTsKKwkJCW5ld19hcmdjKys7CisJCQljb250aW51ZTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJVbmtub3duIG9wdGlvbjogJXNcbiIsIHBhcmFtKTsKKwkJCXByaW50X2hlbHAoKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KKwkqYXJnYyAtPSBuZXdfYXJnYzsKKwkqYXJndiArPSBuZXdfYXJnYzsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBjaGFyICpjbWQ7CisJdW5zaWduZWQgaW50IGksIHJldDsKKworCWNwdXNfY2hvc2VuID0gYml0bWFza19hbGxvYyhzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19DT05GKSk7CisKKwlhcmdjLS07CisJYXJndiArPSAxOworCisJaGFuZGxlX29wdGlvbnMoJmFyZ2MsICZhcmd2KTsKKworCWNtZCA9IGFyZ3ZbMF07CisKKwlpZiAoYXJnYyA8IDEpIHsKKwkJcHJpbnRfaGVscCgpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXNldGxvY2FsZShMQ19BTEwsICIiKTsKKwl0ZXh0ZG9tYWluKFBBQ0tBR0UpOworCisJLyogVHVybiAicGVyZiBjbWQgLS1oZWxwIiBpbnRvICJwZXJmIGhlbHAgY21kIiAqLworCWlmIChhcmdjID4gMSAmJiAhc3RyY21wKGFyZ3ZbMV0sICItLWhlbHAiKSkgeworCQlhcmd2WzFdID0gYXJndlswXTsKKwkJYXJndlswXSA9IGNtZCA9ICJoZWxwIjsKKwl9CisKKwlnZXRfY3B1X2luZm8oMCwgJmNwdXBvd2VyX2NwdV9pbmZvKTsKKwlydW5fYXNfcm9vdCA9ICFnZXR1aWQoKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNvbW1hbmRzKTsgaSsrKSB7CisJCXN0cnVjdCBjbWRfc3RydWN0ICpwID0gY29tbWFuZHMgKyBpOworCQlpZiAoc3RyY21wKHAtPmNtZCwgY21kKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXJ1bl9hc19yb290ICYmIHAtPm5lZWRzX3Jvb3QpIHsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCJTdWJjb21tYW5kICVzIG5lZWRzIHJvb3QgIgorCQkJCQkgICJwcml2aWxlZ2VzXG4iKSwgY21kKTsKKwkJCXJldHVybiBFWElUX0ZBSUxVUkU7CisJCX0KKwkJcmV0ID0gcC0+bWFpbihhcmdjLCBhcmd2KTsKKwkJaWYgKGNwdXNfY2hvc2VuKQorCQkJYml0bWFza19mcmVlKGNwdXNfY2hvc2VuKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcHJpbnRfaGVscCgpOworCXJldHVybiBFWElUX0ZBSUxVUkU7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2FtZC5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9hbWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2Q1NjA1Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9hbWQuYwpAQCAtMCwwICsxLDEzNyBAQAorI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlIDxwY2kvcGNpLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworI2RlZmluZSBNU1JfQU1EX1BTVEFURV9TVEFUVVMJMHhjMDAxMDA2MworI2RlZmluZSBNU1JfQU1EX1BTVEFURQkJMHhjMDAxMDA2NAorI2RlZmluZSBNU1JfQU1EX1BTVEFURV9MSU1JVAkweGMwMDEwMDYxCisKK3VuaW9uIG1zcl9wc3RhdGUgeworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGZpZDo2OworCQl1bnNpZ25lZCBkaWQ6MzsKKwkJdW5zaWduZWQgdmlkOjc7CisJCXVuc2lnbmVkIHJlczE6NjsKKwkJdW5zaWduZWQgbmJkaWQ6MTsKKwkJdW5zaWduZWQgcmVzMjoyOworCQl1bnNpZ25lZCBuYnZpZDo3OworCQl1bnNpZ25lZCBpZGR2YWw6ODsKKwkJdW5zaWduZWQgaWRkZGl2OjI7CisJCXVuc2lnbmVkIHJlczM6MjE7CisJCXVuc2lnbmVkIGVuOjE7CisJfSBiaXRzOworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7Cit9OworCitzdGF0aWMgaW50IGdldF9kaWQoaW50IGZhbWlseSwgdW5pb24gbXNyX3BzdGF0ZSBwc3RhdGUpCit7CisJaW50IHQ7CisKKwlpZiAoZmFtaWx5ID09IDB4MTIpCisJCXQgPSBwc3RhdGUudmFsICYgMHhmOworCWVsc2UKKwkJdCA9IHBzdGF0ZS5iaXRzLmRpZDsKKworCXJldHVybiB0OworfQorCitzdGF0aWMgaW50IGdldF9jb2YoaW50IGZhbWlseSwgdW5pb24gbXNyX3BzdGF0ZSBwc3RhdGUpCit7CisJaW50IHQ7CisJaW50IGZpZCwgZGlkOworCisJZGlkID0gZ2V0X2RpZChmYW1pbHksIHBzdGF0ZSk7CisKKwl0ID0gMHgxMDsKKwlmaWQgPSBwc3RhdGUuYml0cy5maWQ7CisJaWYgKGZhbWlseSA9PSAweDExKQorCQl0ID0gMHg4OworCisJcmV0dXJuICgxMDAgKiAoZmlkICsgdCkpID4+IGRpZDsKK30KKworLyogTmVlZHM6CisgKiBjcHUgICAgICAgICAgLT4gdGhlIGNwdSB0aGF0IGdldHMgZXZhbHVhdGVkCisgKiBjcHVfZmFtaWx5ICAgLT4gVGhlIGNwdSdzIGZhbWlseSAoMHgxMCwgMHgxMiwuLi4pCisgKiBib290c19zdGF0ZXMgLT4gaG93IG11Y2ggYm9vc3Qgc3RhdGVzIHRoZSBtYWNoaW5lcyBzdXBwb3J0CisgKgorICogRmlsbHMgdXA6CisgKiBwc3RhdGVzIC0+IGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBzaXplIE1BWF9IV19QU1RBVEVTCisgKiAgICAgICAgICAgIG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCB6ZXJvcy4KKyAqICAgICAgICAgICAgQWxsIGF2YWlsYWJsZSAgSFcgcHN0YXRlcyAoaW5jbHVkaW5nIGJvb3N0IHN0YXRlcykKKyAqIG5vICAgICAgLT4gYW1vdW50IG9mIHBzdGF0ZXMgYWJvdmUgYXJyYXkgZ290IGZpbGxlZCB1cCB3aXRoCisgKgorICogcmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUKKyAqLworaW50IGRlY29kZV9wc3RhdGVzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBjcHVfZmFtaWx5LAorCQkgICBpbnQgYm9vc3Rfc3RhdGVzLCB1bnNpZ25lZCBsb25nICpwc3RhdGVzLCBpbnQgKm5vKQoreworCWludCBpLCBwc21heCwgcHNjdXI7CisJdW5pb24gbXNyX3BzdGF0ZSBwc3RhdGU7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKworCS8qIE9ubHkgcmVhZCBvdXQgZnJlcXVlbmNpZXMgZnJvbSBIVyB3aGVuIENQVSBtaWdodCBiZSBib29zdGFibGUKKwkgICB0byBrZWVwIHRoZSBjb2RlIGFzIHNob3J0IGFuZCBjbGVhbiBhcyBwb3NzaWJsZS4KKwkgICBPdGhlcndpc2UgZnJlcXVlbmNpZXMgYXJlIGV4cG9ydGVkIHZpYSBBQ1BJIHRhYmxlcy4KKwkqLworCWlmIChjcHVfZmFtaWx5IDwgMHgxMCB8fCBjcHVfZmFtaWx5ID09IDB4MTQpCisJCXJldHVybiAtMTsKKworCWlmIChyZWFkX21zcihjcHUsIE1TUl9BTURfUFNUQVRFX0xJTUlULCAmdmFsKSkKKwkJcmV0dXJuIC0xOworCisJcHNtYXggPSAodmFsID4+IDQpICYgMHg3OworCisJaWYgKHJlYWRfbXNyKGNwdSwgTVNSX0FNRF9QU1RBVEVfU1RBVFVTLCAmdmFsKSkKKwkJcmV0dXJuIC0xOworCisJcHNjdXIgPSB2YWwgJiAweDc7CisKKwlwc2N1ciArPSBib29zdF9zdGF0ZXM7CisJcHNtYXggKz0gYm9vc3Rfc3RhdGVzOworCWZvciAoaSA9IDA7IGkgPD0gcHNtYXg7IGkrKykgeworCQlpZiAoaSA+PSBNQVhfSFdfUFNUQVRFUykgeworCQkJZnByaW50ZihzdGRlcnIsICJIVyBwc3RhdGVzIFslZF0gZXhjZWVkaW5nIG1heCBbJWRdXG4iLAorCQkJCXBzbWF4LCBNQVhfSFdfUFNUQVRFUyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKHJlYWRfbXNyKGNwdSwgTVNSX0FNRF9QU1RBVEUgKyBpLCAmcHN0YXRlLnZhbCkpCisJCQlyZXR1cm4gLTE7CisJCXBzdGF0ZXNbaV0gPSBnZXRfY29mKGNwdV9mYW1pbHksIHBzdGF0ZSk7CisJfQorCSpubyA9IGk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhbWRfcGNpX2dldF9udW1fYm9vc3Rfc3RhdGVzKGludCAqYWN0aXZlLCBpbnQgKnN0YXRlcykKK3sKKwlzdHJ1Y3QgcGNpX2FjY2VzcyAqcGNpX2FjYzsKKwlpbnQgdmVuZG9yX2lkID0gMHgxMDIyOworCWludCBib29zdF9kZXZfaWRzWzRdID0gezB4MTIwNCwgMHgxNjA0LCAweDE3MDQsIDB9OworCXN0cnVjdCBwY2lfZGV2ICpkZXZpY2U7CisJdWludDhfdCB2YWwgPSAwOworCisJKmFjdGl2ZSA9ICpzdGF0ZXMgPSAwOworCisJZGV2aWNlID0gcGNpX2FjY19pbml0KCZwY2lfYWNjLCB2ZW5kb3JfaWQsIGJvb3N0X2Rldl9pZHMpOworCisJaWYgKGRldmljZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZhbCA9IHBjaV9yZWFkX2J5dGUoZGV2aWNlLCAweDE1Yyk7CisJaWYgKHZhbCAmIDMpCisJCSphY3RpdmUgPSAxOworCWVsc2UKKwkJKmFjdGl2ZSA9IDA7CisJKnN0YXRlcyA9ICh2YWwgPj4gMikgJiA3OworCisJcGNpX2NsZWFudXAocGNpX2FjYyk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9iaXRtYXNrLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2JpdG1hc2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzA3NGM2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9iaXRtYXNrLmMKQEAgLTAsMCArMSwyOTIgQEAKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8aGVscGVycy9iaXRtYXNrLmg+CisKKy8qIEhvdyBtYW55IGJpdHMgaW4gYW4gdW5zaWduZWQgbG9uZyAqLworI2RlZmluZSBiaXRzcGVybG9uZyAoOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKKworLyogaG93bWFueShhLGIpIDogaG93IG1hbnkgZWxlbWVudHMgb2Ygc2l6ZSBiIG5lZWRlZCB0byBob2xkIGFsbCBvZiBhICovCisjZGVmaW5lIGhvd21hbnkoeCwgeSkgKCgoeCkrKCh5KS0xKSkvKHkpKQorCisvKiBIb3cgbWFueSBsb25ncyBpbiBtYXNrIG9mIG4gYml0cyAqLworI2RlZmluZSBsb25nc3BlcmJpdHMobikgaG93bWFueShuLCBiaXRzcGVybG9uZykKKworI2RlZmluZSBtYXgoYSwgYikgKChhKSA+IChiKSA/IChhKSA6IChiKSkKKworLyoKKyAqIEFsbG9jYXRlIGFuZCBmcmVlIGBzdHJ1Y3QgYml0bWFzayAqYAorICovCisKKy8qIEFsbG9jYXRlIGEgbmV3IGBzdHJ1Y3QgYml0bWFza2Agd2l0aCBhIHNpemUgb2YgbiBiaXRzICovCitzdHJ1Y3QgYml0bWFzayAqYml0bWFza19hbGxvYyh1bnNpZ25lZCBpbnQgbikKK3sKKwlzdHJ1Y3QgYml0bWFzayAqYm1wOworCisJYm1wID0gbWFsbG9jKHNpemVvZigqYm1wKSk7CisJaWYgKGJtcCA9PSAwKQorCQlyZXR1cm4gMDsKKwlibXAtPnNpemUgPSBuOworCWJtcC0+bWFza3AgPSBjYWxsb2MobG9uZ3NwZXJiaXRzKG4pLCBzaXplb2YodW5zaWduZWQgbG9uZykpOworCWlmIChibXAtPm1hc2twID09IDApIHsKKwkJZnJlZShibXApOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGJtcDsKK30KKworLyogRnJlZSBgc3RydWN0IGJpdG1hc2tgICovCit2b2lkIGJpdG1hc2tfZnJlZShzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCWlmIChibXAgPT0gMCkKKwkJcmV0dXJuOworCWZyZWUoYm1wLT5tYXNrcCk7CisJYm1wLT5tYXNrcCA9ICh1bnNpZ25lZCBsb25nICopMHhkZWFkY2RlZjsgIC8qIGRvdWJsZSBmcmVlIHRyaXB3aXJlICovCisJZnJlZShibXApOworfQorCisvKgorICogVGhlIHJvdXRpbmVzIF9nZXRiaXQoKSBhbmQgX3NldGJpdCgpIGFyZSB0aGUgb25seQorICogcm91dGluZXMgdGhhdCBhY3R1YWxseSB1bmRlcnN0YW5kIHRoZSBsYXlvdXQgb2YgYm1wLT5tYXNrcFtdLgorICoKKyAqIE9uIGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlcywgdGhpcyBjb3VsZCBzaW1wbHkgYmUgYW4gYXJyYXkgb2YKKyAqIGJ5dGVzLiAgQnV0IHRoZSBrZXJuZWwgbGF5b3V0IG9mIGJpdG1hc2tzIF9pc18gdmlzaWJsZSB0byB1c2Vyc3BhY2UKKyAqIHZpYSB0aGUgc2NoZWRfKHNldC9nZXQpYWZmaW5pdHkgY2FsbHMgaW4gTGludXggMi42LCBhbmQgb24gYmlnCisgKiBlbmRpYW4gYXJjaGl0ZWN0dXJlcywgaXQgaXMgcGFpbmZ1bGx5IG9idmlvdXMgdGhhdCB0aGlzIGlzIGFuCisgKiBhcnJheSBvZiB1bnNpZ25lZCBsb25ncy4KKyAqLworCisvKiBSZXR1cm4gdGhlIHZhbHVlICgwIG9yIDEpIG9mIGJpdCBuIGluIGJpdG1hc2sgYm1wICovCitzdGF0aWMgdW5zaWduZWQgaW50IF9nZXRiaXQoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IG4pCit7CisJaWYgKG4gPCBibXAtPnNpemUpCisJCXJldHVybiAoYm1wLT5tYXNrcFtuL2JpdHNwZXJsb25nXSA+PiAobiAlIGJpdHNwZXJsb25nKSkgJiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qIFNldCBiaXQgbiBpbiBiaXRtYXNrIGJtcCB0byB2YWx1ZSB2ICgwIG9yIDEpICovCitzdGF0aWMgdm9pZCBfc2V0Yml0KHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBuLCB1bnNpZ25lZCBpbnQgdikKK3sKKwlpZiAobiA8IGJtcC0+c2l6ZSkgeworCQlpZiAodikKKwkJCWJtcC0+bWFza3Bbbi9iaXRzcGVybG9uZ10gfD0gMVVMIDw8IChuICUgYml0c3BlcmxvbmcpOworCQllbHNlCisJCQlibXAtPm1hc2twW24vYml0c3BlcmxvbmddICY9CisJCQkJfigxVUwgPDwgKG4gJSBiaXRzcGVybG9uZykpOworCX0KK30KKworLyoKKyAqIFdoZW4gcGFyc2luZyBiaXRtYXNrIGxpc3RzLCBvbmx5IGFsbG93IG51bWJlcnMsIHNlcGFyYXRlZCBieSBvbmUKKyAqIG9mIHRoZSBhbGxvd2VkIG5leHQgY2hhcmFjdGVycy4KKyAqCisgKiBUaGUgcGFyYW1ldGVyICdzcmV0JyBpcyB0aGUgcmV0dXJuIGZyb20gYSBzc2NhbmYgIiV1JWMiLiAgSXQgaXMKKyAqIC0xIGlmIHRoZSBzc2NhbmYgaW5wdXQgc3RyaW5nIHdhcyBlbXB0eS4gIEl0IGlzIDAgaWYgdGhlIGZpcnN0CisgKiBjaGFyYWN0ZXIgaW4gdGhlIHNzY2FuZiBpbnB1dCBzdHJpbmcgd2FzIG5vdCBhIGRlY2ltYWwgbnVtYmVyLgorICogSXQgaXMgMSBpZiB0aGUgdW5zaWduZWQgbnVtYmVyIG1hdGNoaW5nIHRoZSAiJXUiIHdhcyB0aGUgZW5kIG9mIHRoZQorICogaW5wdXQgc3RyaW5nLiAgSXQgaXMgMiBpZiBvbmUgb3IgbW9yZSBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgZm9sbG93ZWQKKyAqIHRoZSBtYXRjaGVkIHVuc2lnbmVkIG51bWJlci4gIElmIGl0IGlzIDIsIHRoZW4gJ25leHRjJyBpcyB0aGUgZmlyc3QKKyAqIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIG51bWJlci4gIFRoZSBwYXJhbWV0ZXIgJ29rX25leHRfY2hhcnMnCisgKiBpcyB0aGUgbnVsLXRlcm1pbmF0ZWQgbGlzdCBvZiBhbGxvd2VkIG5leHQgY2hhcmFjdGVycy4KKyAqCisgKiBUaGUgbWFzayB0ZXJtIGp1c3Qgc2Nhbm5lZCB3YXMgb2sgaWYgYW5kIG9ubHkgaWYgZWl0aGVyIHRoZSBudW1iZXJzCisgKiBtYXRjaGluZyB0aGUgJXUgd2VyZSBhbGwgb2YgdGhlIGlucHV0IG9yIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpbgorICogdGhlIGlucHV0IHBhc3QgdGhlIG51bWJlcnMgd2FzIG9uZSBvZiB0aGUgYWxsb3dlZCBuZXh0IGNoYXJhY3RlcnMuCisgKi8KK3N0YXRpYyBpbnQgc2Nhbl93YXNfb2soaW50IHNyZXQsIGNoYXIgbmV4dGMsIGNvbnN0IGNoYXIgKm9rX25leHRfY2hhcnMpCit7CisJcmV0dXJuIHNyZXQgPT0gMSB8fAorCQkoc3JldCA9PSAyICYmIHN0cmNocihva19uZXh0X2NoYXJzLCBuZXh0YykgIT0gTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpuZXh0dG9rZW4oY29uc3QgY2hhciAqcSwgIGludCBzZXApCit7CisJaWYgKHEpCisJCXEgPSBzdHJjaHIocSwgc2VwKTsKKwlpZiAocSkKKwkJcSsrOworCXJldHVybiBxOworfQorCisvKiBTZXQgYSBzaW5nbGUgYml0IGkgaW4gYml0bWFzayAqLworc3RydWN0IGJpdG1hc2sgKmJpdG1hc2tfc2V0Yml0KHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBpKQoreworCV9zZXRiaXQoYm1wLCBpLCAxKTsKKwlyZXR1cm4gYm1wOworfQorCisvKiBTZXQgYWxsIGJpdHMgaW4gYml0bWFzazogYm1wID0gfjAgKi8KK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX3NldGFsbChzdHJ1Y3QgYml0bWFzayAqYm1wKQoreworCXVuc2lnbmVkIGludCBpOworCWZvciAoaSA9IDA7IGkgPCBibXAtPnNpemU7IGkrKykKKwkJX3NldGJpdChibXAsIGksIDEpOworCXJldHVybiBibXA7Cit9CisKKy8qIENsZWFyIGFsbCBiaXRzIGluIGJpdG1hc2s6IGJtcCA9IDAgKi8KK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX2NsZWFyYWxsKHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGJtcC0+c2l6ZTsgaSsrKQorCQlfc2V0Yml0KGJtcCwgaSwgMCk7CisJcmV0dXJuIGJtcDsKK30KKworLyogVHJ1ZSBpZiBhbGwgYml0cyBhcmUgY2xlYXIgKi8KK2ludCBiaXRtYXNrX2lzYWxsY2xlYXIoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYm1wLT5zaXplOyBpKyspCisJCWlmIChfZ2V0Yml0KGJtcCwgaSkpCisJCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyogVHJ1ZSBpZiBzcGVjaWZpZWQgYml0IGkgaXMgc2V0ICovCitpbnQgYml0bWFza19pc2JpdHNldChjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wLCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlyZXR1cm4gX2dldGJpdChibXAsIGkpOworfQorCisvKiBOdW1iZXIgb2YgbG93ZXN0IHNldCBiaXQgKG1pbikgKi8KK3Vuc2lnbmVkIGludCBiaXRtYXNrX2ZpcnN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJcmV0dXJuIGJpdG1hc2tfbmV4dChibXAsIDApOworfQorCisvKiBOdW1iZXIgb2YgaGlnaGVzdCBzZXQgYml0IChtYXgpICovCit1bnNpZ25lZCBpbnQgYml0bWFza19sYXN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IG0gPSBibXAtPnNpemU7CisJZm9yIChpID0gMDsgaSA8IGJtcC0+c2l6ZTsgaSsrKQorCQlpZiAoX2dldGJpdChibXAsIGkpKQorCQkJbSA9IGk7CisJcmV0dXJuIG07Cit9CisKKy8qIE51bWJlciBvZiBuZXh0IHNldCBiaXQgYXQgb3IgYWJvdmUgZ2l2ZW4gYml0IGkgKi8KK3Vuc2lnbmVkIGludCBiaXRtYXNrX25leHQoY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IGkpCit7CisJdW5zaWduZWQgaW50IG47CisJZm9yIChuID0gaTsgbiA8IGJtcC0+c2l6ZTsgbisrKQorCQlpZiAoX2dldGJpdChibXAsIG4pKQorCQkJYnJlYWs7CisJcmV0dXJuIG47Cit9CisKKy8qCisgKiBQYXJzZXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBudW1iZXJzIGFuZCByYW5nZXMgb2YgbnVtYmVycywKKyAqIHdpdGggb3B0aW9uYWwgJzoldScgc3RyaWRlcyBtb2RpZnlpbmcgcmFuZ2VzLCBpbnRvIHByb3ZpZGVkIGJpdG1hc2suCisgKiBTb21lIGV4YW1wbGVzIG9mIGlucHV0IGxpc3RzIGFuZCB0aGVpciBlcXVpdmFsZW50IHNpbXBsZSBsaXN0OgorICoJSW5wdXQJCUVxdWl2YWxlbnQgdG8KKyAqCTAtMwkJMCwxLDIsMworICoJMC03OjIJCTAsMiw0LDYKKyAqCTEsMyw1LTcJCTEsMyw1LDYsNworICoJMC0zOjIsOC0xNTo0CTAsMiw4LDEyCisgKi8KK2ludCBiaXRtYXNrX3BhcnNlbGlzdChjb25zdCBjaGFyICpidWYsIHN0cnVjdCBiaXRtYXNrICpibXApCit7CisJY29uc3QgY2hhciAqcCwgKnE7CisKKwliaXRtYXNrX2NsZWFyYWxsKGJtcCk7CisKKwlxID0gYnVmOworCXdoaWxlIChwID0gcSwgcSA9IG5leHR0b2tlbihxLCAnLCcpLCBwKSB7CisJCXVuc2lnbmVkIGludCBhOwkJLyogYmVnaW4gb2YgcmFuZ2UgKi8KKwkJdW5zaWduZWQgaW50IGI7CQkvKiBlbmQgb2YgcmFuZ2UgKi8KKwkJdW5zaWduZWQgaW50IHM7CQkvKiBzdHJpZGUgKi8KKwkJY29uc3QgY2hhciAqYzEsICpjMjsJLyogbmV4dCB0b2tlbnMgYWZ0ZXIgJy0nIG9yICcsJyAqLworCQljaGFyIG5leHRjOwkJLyogY2hhciBhZnRlciBzc2NhbmYgJXUgbWF0Y2ggKi8KKwkJaW50IHNyZXQ7CQkvKiBzc2NhbmYgcmV0dXJuIChudW1iZXIgb2YgbWF0Y2hlcykgKi8KKworCQlzcmV0ID0gc3NjYW5mKHAsICIldSVjIiwgJmEsICZuZXh0Yyk7CisJCWlmICghc2Nhbl93YXNfb2soc3JldCwgbmV4dGMsICIsLSIpKQorCQkJZ290byBlcnI7CisJCWIgPSBhOworCQlzID0gMTsKKwkJYzEgPSBuZXh0dG9rZW4ocCwgJy0nKTsKKwkJYzIgPSBuZXh0dG9rZW4ocCwgJywnKTsKKwkJaWYgKGMxICE9IE5VTEwgJiYgKGMyID09IE5VTEwgfHwgYzEgPCBjMikpIHsKKwkJCXNyZXQgPSBzc2NhbmYoYzEsICIldSVjIiwgJmIsICZuZXh0Yyk7CisJCQlpZiAoIXNjYW5fd2FzX29rKHNyZXQsIG5leHRjLCAiLDoiKSkKKwkJCQlnb3RvIGVycjsKKwkJCWMxID0gbmV4dHRva2VuKGMxLCAnOicpOworCQkJaWYgKGMxICE9IE5VTEwgJiYgKGMyID09IE5VTEwgfHwgYzEgPCBjMikpIHsKKwkJCQlzcmV0ID0gc3NjYW5mKGMxLCAiJXUlYyIsICZzLCAmbmV4dGMpOworCQkJCWlmICghc2Nhbl93YXNfb2soc3JldCwgbmV4dGMsICIsIikpCisJCQkJCWdvdG8gZXJyOworCQkJfQorCQl9CisJCWlmICghKGEgPD0gYikpCisJCQlnb3RvIGVycjsKKwkJaWYgKGIgPj0gYm1wLT5zaXplKQorCQkJZ290byBlcnI7CisJCXdoaWxlIChhIDw9IGIpIHsKKwkJCV9zZXRiaXQoYm1wLCBhLCAxKTsKKwkJCWEgKz0gczsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK2VycjoKKwliaXRtYXNrX2NsZWFyYWxsKGJtcCk7CisJcmV0dXJuIC0xOworfQorCisvKgorICogZW1pdChidWYsIGJ1ZmxlbiwgcmJvdCwgcnRvcCwgbGVuKQorICoKKyAqIEhlbHBlciByb3V0aW5lIGZvciBiaXRtYXNrX2Rpc3BsYXlsaXN0KCkuICBXcml0ZSBkZWNpbWFsIG51bWJlcgorICogb3IgcmFuZ2UgdG8gYnVmK2xlbiwgc3VwcHJlc3Npbmcgb3V0cHV0IHBhc3QgYnVmK2J1Zmxlbiwgd2l0aCBvcHRpb25hbAorICogY29tbWEtcHJlZml4LiAgUmV0dXJuIGxlbiBvZiB3aGF0IHdvdWxkIGJlIHdyaXR0ZW4gdG8gYnVmLCBpZiBpdAorICogYWxsIGZpdC4KKyAqLworCitzdGF0aWMgaW5saW5lIGludCBlbWl0KGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgaW50IHJib3QsIGludCBydG9wLCBpbnQgbGVuKQoreworCWlmIChsZW4gPiAwKQorCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBtYXgoYnVmbGVuIC0gbGVuLCAwKSwgIiwiKTsKKwlpZiAocmJvdCA9PSBydG9wKQorCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBtYXgoYnVmbGVuIC0gbGVuLCAwKSwgIiVkIiwgcmJvdCk7CisJZWxzZQorCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBtYXgoYnVmbGVuIC0gbGVuLCAwKSwgIiVkLSVkIiwKKwkJCQlyYm90LCBydG9wKTsKKwlyZXR1cm4gbGVuOworfQorCisvKgorICogV3JpdGUgZGVjaW1hbCBsaXN0IHJlcHJlc2VudGF0aW9uIG9mIGJtcCB0byBidWYuCisgKgorICogT3V0cHV0IGZvcm1hdCBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGRlY2ltYWwgbnVtYmVycyBhbmQKKyAqIHJhbmdlcy4gIENvbnNlY3V0aXZlbHkgc2V0IGJpdHMgYXJlIHNob3duIGFzIHR3byBoeXBoZW4tc2VwYXJhdGVkCisgKiBkZWNpbWFsIG51bWJlcnMsIHRoZSBzbWFsbGVzdCBhbmQgbGFyZ2VzdCBiaXQgbnVtYmVycyBzZXQgaW4KKyAqIHRoZSByYW5nZS4gIE91dHB1dCBmb3JtYXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBmb3JtYXQKKyAqIGFjY2VwdGVkIGFzIGlucHV0IGJ5IGJpdG1hcF9wYXJzZWxpc3QoKS4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3aGljaCB3b3VsZCBiZQorICogZ2VuZXJhdGVkIGZvciB0aGUgZ2l2ZW4gaW5wdXQsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgJ1wwJywgYXMKKyAqIHBlciBJU08gQzk5LgorICovCisKK2ludCBiaXRtYXNrX2Rpc3BsYXlsaXN0KGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgY29uc3Qgc3RydWN0IGJpdG1hc2sgKmJtcCkKK3sKKwlpbnQgbGVuID0gMDsKKwkvKiBjdXJyZW50IGJpdCBpcyAnY3VyJywgbW9zdCByZWNlbnRseSBzZWVuIHJhbmdlIGlzIFtyYm90LCBydG9wXSAqLworCXVuc2lnbmVkIGludCBjdXIsIHJib3QsIHJ0b3A7CisKKwlpZiAoYnVmbGVuID4gMCkKKwkJKmJ1ZiA9IDA7CisJcmJvdCA9IGN1ciA9IGJpdG1hc2tfZmlyc3QoYm1wKTsKKwl3aGlsZSAoY3VyIDwgYm1wLT5zaXplKSB7CisJCXJ0b3AgPSBjdXI7CisJCWN1ciA9IGJpdG1hc2tfbmV4dChibXAsIGN1cisxKTsKKwkJaWYgKGN1ciA+PSBibXAtPnNpemUgfHwgY3VyID4gcnRvcCArIDEpIHsKKwkJCWxlbiA9IGVtaXQoYnVmLCBidWZsZW4sIHJib3QsIHJ0b3AsIGxlbik7CisJCQlyYm90ID0gY3VyOworCQl9CisJfQorCXJldHVybiBsZW47Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2JpdG1hc2suaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvYml0bWFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMjg5ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2JpdG1hc2suaApAQCAtMCwwICsxLDMzIEBACisjaWZuZGVmIF9fQ1BVUE9XRVJfQklUTUFTS19fCisjZGVmaW5lIF9fQ1BVUE9XRVJfQklUTUFTS19fCisKKy8qIFRha2VuIG92ZXIgZnJvbSBsaWJiaXRtYXNrLCBhIHByb2plY3QgaW5pdGlhdGVkIGZyb20gc2dpOgorICogVXJsOiAgICAgICAgICAgIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9jcHVzZXRzLworICogVW5mb3J0dW5hdGVseSBpdCdzIG5vdCB2ZXJ5IHdpZGVzcHJlYWQsIHRoZXJlZm9yZSByZWxldmFudCBwYXJ0cyBhcmUKKyAqIHBhc3RlZCBoZXJlLgorICovCisKK3N0cnVjdCBiaXRtYXNrIHsKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl1bnNpZ25lZCBsb25nICptYXNrcDsKK307CisKK3N0cnVjdCBiaXRtYXNrICpiaXRtYXNrX2FsbG9jKHVuc2lnbmVkIGludCBuKTsKK3ZvaWQgYml0bWFza19mcmVlKHN0cnVjdCBiaXRtYXNrICpibXApOworCitzdHJ1Y3QgYml0bWFzayAqYml0bWFza19zZXRiaXQoc3RydWN0IGJpdG1hc2sgKmJtcCwgdW5zaWduZWQgaW50IGkpOworc3RydWN0IGJpdG1hc2sgKmJpdG1hc2tfc2V0YWxsKHN0cnVjdCBiaXRtYXNrICpibXApOworc3RydWN0IGJpdG1hc2sgKmJpdG1hc2tfY2xlYXJhbGwoc3RydWN0IGJpdG1hc2sgKmJtcCk7CisKK3Vuc2lnbmVkIGludCBiaXRtYXNrX2ZpcnN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApOwordW5zaWduZWQgaW50IGJpdG1hc2tfbmV4dChjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wLCB1bnNpZ25lZCBpbnQgaSk7Cit1bnNpZ25lZCBpbnQgYml0bWFza19sYXN0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApOworaW50IGJpdG1hc2tfaXNhbGxjbGVhcihjb25zdCBzdHJ1Y3QgYml0bWFzayAqYm1wKTsKK2ludCBiaXRtYXNrX2lzYml0c2V0KGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXAsIHVuc2lnbmVkIGludCBpKTsKKworaW50IGJpdG1hc2tfcGFyc2VsaXN0KGNvbnN0IGNoYXIgKmJ1Ziwgc3RydWN0IGJpdG1hc2sgKmJtcCk7CitpbnQgYml0bWFza19kaXNwbGF5bGlzdChjaGFyICpidWYsIGludCBsZW4sIGNvbnN0IHN0cnVjdCBiaXRtYXNrICpibXApOworCisKKworI2VuZGlmIC8qX19DUFVQT1dFUl9CSVRNQVNLX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvY3B1aWQuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvY3B1aWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDY4OTVkCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9jcHVpZC5jCkBAIC0wLDAgKzEsMTc2IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVfdmVuZG9yX3RhYmxlW1g4Nl9WRU5ET1JfTUFYXSA9IHsKKwkiVW5rbm93biIsICJHZW51aW5lSW50ZWwiLCAiQXV0aGVudGljQU1EIiwKK307CisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKy8qIGZyb20gZ2NjICovCisjaW5jbHVkZSA8Y3B1aWQuaD4KKworLyoKKyAqIENQVUlEIGZ1bmN0aW9ucyByZXR1cm5pbmcgYSBzaW5nbGUgZGF0dW0KKyAqCisgKiBEZWZpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VbYWJjZF14KHVuc2lnbmVkIGludCBvcCkKKyAqLworI2RlZmluZSBjcHVpZF9mdW5jKHJlZykJCQkJCVwKKwl1bnNpZ25lZCBpbnQgY3B1aWRfIyNyZWcodW5zaWduZWQgaW50IG9wKQlcCisJewkJCQkJCVwKKwl1bnNpZ25lZCBpbnQgZWF4LCBlYngsIGVjeCwgZWR4OwkJXAorCV9fY3B1aWQob3AsIGVheCwgZWJ4LCBlY3gsIGVkeCk7CQlcCisJcmV0dXJuIHJlZzsJCQkJCVwKKwl9CitjcHVpZF9mdW5jKGVheCk7CitjcHVpZF9mdW5jKGVieCk7CitjcHVpZF9mdW5jKGVjeCk7CitjcHVpZF9mdW5jKGVkeCk7CisKKyNlbmRpZiAvKiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCisKKy8qIGdldF9jcHVfaW5mbworICoKKyAqIEV4dHJhY3QgQ1BVIHZlbmRvciwgZmFtaWx5LCBtb2RlbCwgc3RlcHBpbmcgaW5mbyBmcm9tIC9wcm9jL2NwdWluZm8KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXYgZXJyb3IgY29kZQorICoKKyAqIFRCRDogU2hvdWxkIHRoZXJlIGJlIGEgY3B1aWQgYWx0ZXJuYXRpdmUgZm9yIHRoaXMgaWYgL3Byb2MgaXMgbm90IG1vdW50ZWQ/CisgKi8KK2ludCBnZXRfY3B1X2luZm8odW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGNwdXBvd2VyX2NwdV9pbmZvICpjcHVfaW5mbykKK3sKKwlGSUxFICpmcDsKKwljaGFyIHZhbHVlWzY0XTsKKwl1bnNpZ25lZCBpbnQgcHJvYywgeDsKKwl1bnNpZ25lZCBpbnQgdW5rbm93biA9IDB4ZmZmZmZmOworCXVuc2lnbmVkIGludCBjcHVpZF9sZXZlbCwgZXh0X2NwdWlkX2xldmVsOworCisJaW50IHJldCA9IC1FSU5WQUw7CisKKwljcHVfaW5mby0+dmVuZG9yCQk9IFg4Nl9WRU5ET1JfVU5LTk9XTjsKKwljcHVfaW5mby0+ZmFtaWx5CQk9IHVua25vd247CisJY3B1X2luZm8tPm1vZGVsCQkJPSB1bmtub3duOworCWNwdV9pbmZvLT5zdGVwcGluZwkJPSB1bmtub3duOworCWNwdV9pbmZvLT5jYXBzCQkJPSAwOworCisJZnAgPSBmb3BlbigiL3Byb2MvY3B1aW5mbyIsICJyIik7CisJaWYgKCFmcCkKKwkJcmV0dXJuIC1FSU87CisKKwl3aGlsZSAoIWZlb2YoZnApKSB7CisJCWlmICghZmdldHModmFsdWUsIDY0LCBmcCkpCisJCQljb250aW51ZTsKKwkJdmFsdWVbNjMgLSAxXSA9ICdcMCc7CisKKwkJaWYgKCFzdHJuY21wKHZhbHVlLCAicHJvY2Vzc29yXHQ6ICIsIDEyKSkKKwkJCXNzY2FuZih2YWx1ZSwgInByb2Nlc3Nvclx0OiAldSIsICZwcm9jKTsKKworCQlpZiAocHJvYyAhPSBjcHUpCisJCQljb250aW51ZTsKKworCQkvKiBHZXQgQ1BVIHZlbmRvciAqLworCQlpZiAoIXN0cm5jbXAodmFsdWUsICJ2ZW5kb3JfaWQiLCA5KSkgeworCQkJZm9yICh4ID0gMTsgeCA8IFg4Nl9WRU5ET1JfTUFYOyB4KyspIHsKKwkJCQlpZiAoc3Ryc3RyKHZhbHVlLCBjcHVfdmVuZG9yX3RhYmxlW3hdKSkKKwkJCQkJY3B1X2luZm8tPnZlbmRvciA9IHg7CisJCQl9CisJCS8qIEdldCBDUFUgZmFtaWx5LCBldGMuICovCisJCX0gZWxzZSBpZiAoIXN0cm5jbXAodmFsdWUsICJjcHUgZmFtaWx5XHQ6ICIsIDEzKSkgeworCQkJc3NjYW5mKHZhbHVlLCAiY3B1IGZhbWlseVx0OiAldSIsCisJCQkgICAgICAgJmNwdV9pbmZvLT5mYW1pbHkpOworCQl9IGVsc2UgaWYgKCFzdHJuY21wKHZhbHVlLCAibW9kZWxcdFx0OiAiLCA5KSkgeworCQkJc3NjYW5mKHZhbHVlLCAibW9kZWxcdFx0OiAldSIsCisJCQkgICAgICAgJmNwdV9pbmZvLT5tb2RlbCk7CisJCX0gZWxzZSBpZiAoIXN0cm5jbXAodmFsdWUsICJzdGVwcGluZ1x0OiAiLCAxMCkpIHsKKwkJCXNzY2FuZih2YWx1ZSwgInN0ZXBwaW5nXHQ6ICV1IiwKKwkJCSAgICAgICAmY3B1X2luZm8tPnN0ZXBwaW5nKTsKKworCQkJLyogRXhpdCAtPiBhbGwgdmFsdWVzIG11c3QgaGF2ZSBiZWVuIHNldCAqLworCQkJaWYgKGNwdV9pbmZvLT52ZW5kb3IgPT0gWDg2X1ZFTkRPUl9VTktOT1dOIHx8CisJCQkgICAgY3B1X2luZm8tPmZhbWlseSA9PSB1bmtub3duIHx8CisJCQkgICAgY3B1X2luZm8tPm1vZGVsID09IHVua25vd24gfHwKKwkJCSAgICBjcHVfaW5mby0+c3RlcHBpbmcgPT0gdW5rbm93bikgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisKKwkJCXJldCA9IDA7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlyZXQgPSAtRU5PREVWOworb3V0OgorCWZjbG9zZShmcCk7CisJLyogR2V0IHNvbWUgdXNlZnVsIENQVSBjYXBhYmlsaXRpZXMgZnJvbSBjcHVpZCAqLworCWlmIChjcHVfaW5mby0+dmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EICYmCisJICAgIGNwdV9pbmZvLT52ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkKKwkJcmV0dXJuIHJldDsKKworCWNwdWlkX2xldmVsCT0gY3B1aWRfZWF4KDApOworCWV4dF9jcHVpZF9sZXZlbAk9IGNwdWlkX2VheCgweDgwMDAwMDAwKTsKKworCS8qIEludmFyaWFudCBUU0MgKi8KKwlpZiAoZXh0X2NwdWlkX2xldmVsID49IDB4ODAwMDAwMDcgJiYKKwkgICAgKGNwdWlkX2VkeCgweDgwMDAwMDA3KSAmICgxIDw8IDgpKSkKKwkJY3B1X2luZm8tPmNhcHMgfD0gQ1BVUE9XRVJfQ0FQX0lOVl9UU0M7CisKKwkvKiBBcGVyZi9NcGVyZiByZWdpc3RlcnMgc3VwcG9ydCAqLworCWlmIChjcHVpZF9sZXZlbCA+PSA2ICYmIChjcHVpZF9lY3goNikgJiAweDEpKQorCQljcHVfaW5mby0+Y2FwcyB8PSBDUFVQT1dFUl9DQVBfQVBFUkY7CisKKwkvKiBBTUQgQm9vc3Qgc3RhdGUgZW5hYmxlL2Rpc2FibGUgcmVnaXN0ZXIgKi8KKwlpZiAoY3B1X2luZm8tPnZlbmRvciA9PSBYODZfVkVORE9SX0FNRCkgeworCQlpZiAoZXh0X2NwdWlkX2xldmVsID49IDB4ODAwMDAwMDcgJiYKKwkJICAgIChjcHVpZF9lZHgoMHg4MDAwMDAwNykgJiAoMSA8PCA5KSkpCisJCQljcHVfaW5mby0+Y2FwcyB8PSBDUFVQT1dFUl9DQVBfQU1EX0NCUDsKKwl9CisKKwlpZiAoY3B1X2luZm8tPnZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSB7CisJCWlmIChjcHVpZF9sZXZlbCA+PSA2ICYmCisJCSAgICAoY3B1aWRfZWF4KDYpICYgKDEgPDwgMSkpKQorCQkJY3B1X2luZm8tPmNhcHMgfD0gQ1BVUE9XRVJfQ0FQX0lOVEVMX0lEQTsKKwl9CisKKwlpZiAoY3B1X2luZm8tPnZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSB7CisJCS8qIEludGVsJ3MgcGVyZi1iaWFzIE1TUiBzdXBwb3J0ICovCisJCWlmIChjcHVpZF9sZXZlbCA+PSA2ICYmIChjcHVpZF9lY3goNikgJiAoMSA8PCAzKSkpCisJCQljcHVfaW5mby0+Y2FwcyB8PSBDUFVQT1dFUl9DQVBfUEVSRl9CSUFTOworCisJCS8qIEludGVsJ3MgVHVyYm8gUmF0aW8gTGltaXQgc3VwcG9ydCAqLworCQlpZiAoY3B1X2luZm8tPmZhbWlseSA9PSA2KSB7CisJCQlzd2l0Y2ggKGNwdV9pbmZvLT5tb2RlbCkgeworCQkJY2FzZSAweDFBOgkvKiBDb3JlIGk3LCBYZW9uIDU1MDAgc2VyaWVzCisJCQkJCSAqIEJsb29tZmllbGQsIEdhaW5zdG93biBOSE0tRVAKKwkJCQkJICovCisJCQljYXNlIDB4MUU6CS8qIENvcmUgaTcgYW5kIGk1IFByb2Nlc3NvcgorCQkJCQkgKiBDbGFya3NmaWVsZCwgTHlubmZpZWxkLCBKYXNwZXIgRm9yZXN0CisJCQkJCSAqLworCQkJY2FzZSAweDFGOgkvKiBDb3JlIGk3IGFuZCBpNSBQcm9jZXNzb3IgLSBOZWhhbGVtICovCisJCQljYXNlIDB4MjU6CS8qIFdlc3RtZXJlIENsaWVudAorCQkJCQkgKiBDbGFya2RhbGUsIEFycmFuZGFsZQorCQkJCQkgKi8KKwkJCWNhc2UgMHgyQzoJLyogV2VzdG1lcmUgRVAgLSBHdWxmdG93biAqLworCQkJCWNwdV9pbmZvLT5jYXBzIHw9IENQVVBPV0VSX0NBUF9IQVNfVFVSQk9fUkFUSU87CisJCQljYXNlIDB4MkE6CS8qIFNOQiAqLworCQkJY2FzZSAweDJEOgkvKiBTTkIgWGVvbiAqLworCQkJCWNwdV9pbmZvLT5jYXBzIHw9IENQVVBPV0VSX0NBUF9IQVNfVFVSQk9fUkFUSU87CisJCQkJY3B1X2luZm8tPmNhcHMgfD0gQ1BVUE9XRVJfQ0FQX0lTX1NOQjsKKwkJCQlicmVhazsKKwkJCWNhc2UgMHgyRToJLyogTmVoYWxlbS1FWCBYZW9uIC0gQmVja3RvbiAqLworCQkJY2FzZSAweDJGOgkvKiBXZXN0bWVyZS1FWCBYZW9uIC0gRWFnbGV0b24gKi8KKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKglwcmludGYoIklEOiAldSAtIEV4dGlkOiAweCV4IC0gQ2FwczogMHglbGx4XG4iLAorCQljcHVpZF9sZXZlbCwgZXh0X2NwdWlkX2xldmVsLCBjcHVfaW5mby0+Y2Fwcyk7CisJKi8KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9oZWxwZXJzLmggYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL2hlbHBlcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTJlZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9oZWxwZXJzLmgKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqIE1pc2NlbGxhbmVvdXMgaGVscGVycyB3aGljaCBkbyBub3QgZml0IG9yIGFyZSB3b3J0aAorICogdG8gcHV0IGludG8gc2VwYXJhdGUgaGVhZGVycworICovCisKKyNpZm5kZWYgX19DUFVQT1dFUlVUSUxTX0hFTFBFUlNfXworI2RlZmluZSBfX0NQVVBPV0VSVVRJTFNfSEVMUEVSU19fCisKKyNpbmNsdWRlIDxsaWJpbnRsLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2JpdG1hc2suaCIKKworLyogSW50ZXJuYXRpb25hbGl6YXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgXyhTdHJpbmcpIGdldHRleHQoU3RyaW5nKQorI2lmbmRlZiBnZXR0ZXh0X25vb3AKKyNkZWZpbmUgZ2V0dGV4dF9ub29wKFN0cmluZykgU3RyaW5nCisjZW5kaWYKKyNkZWZpbmUgTl8oU3RyaW5nKSBnZXR0ZXh0X25vb3AoU3RyaW5nKQorLyogSW50ZXJuYXRpb25hbGl6YXRpb24gKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIGludCBydW5fYXNfcm9vdDsKK2V4dGVybiBzdHJ1Y3QgYml0bWFzayAqY3B1c19jaG9zZW47CisKKy8qIEdsb2JhbCB2ZXJib3NlICgtZCkgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIGRlZmluZSBERUJVRyB2aWEgZ2xvYmFsIE1ha2VmaWxlIHZhcmlhYmxlCisgKiBEZWJ1ZyBvdXRwdXQgaXMgc2VudCB0byBzdGRlcnIsIGRvOgorICogY3B1cG93ZXIgbW9uaXRvciAyPi90bXAvZGVidWcKKyAqIHRvIHNwbGl0IGRlYnVnIG91dHB1dCBhd2F5IGZyb20gbm9ybWFsIG91dHB1dAorKi8KKyNpZmRlZiBERUJVRworZXh0ZXJuIGludCBiZV92ZXJib3NlOworCisjZGVmaW5lIGRwcmludChmbXQsIC4uLikgewkJCQkJXAorCQlpZiAoYmVfdmVyYm9zZSkgewkJCQlcCisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAiIGZtdCwJCVwKKwkJCQlfX2Z1bmNfXywgIyNfX1ZBX0FSR1NfXyk7CVwKKwkJfQkJCQkJCVwKKwl9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGRwcmludChjb25zdCBjaGFyICpmbXQsIC4uLikgeyB9CisjZW5kaWYKK2V4dGVybiBpbnQgYmVfdmVyYm9zZTsKKy8qIEdsb2JhbCB2ZXJib3NlICgtdikgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBjcHVpZCBhbmQgY3B1aW5mbyBoZWxwZXJzICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2VudW0gY3B1cG93ZXJfY3B1X3ZlbmRvciB7WDg2X1ZFTkRPUl9VTktOT1dOID0gMCwgWDg2X1ZFTkRPUl9JTlRFTCwKKwkJCSAgWDg2X1ZFTkRPUl9BTUQsIFg4Nl9WRU5ET1JfTUFYfTsKKworI2RlZmluZSBDUFVQT1dFUl9DQVBfSU5WX1RTQwkJMHgwMDAwMDAwMQorI2RlZmluZSBDUFVQT1dFUl9DQVBfQVBFUkYJCTB4MDAwMDAwMDIKKyNkZWZpbmUgQ1BVUE9XRVJfQ0FQX0FNRF9DQlAJCTB4MDAwMDAwMDQKKyNkZWZpbmUgQ1BVUE9XRVJfQ0FQX1BFUkZfQklBUwkJMHgwMDAwMDAwOAorI2RlZmluZSBDUFVQT1dFUl9DQVBfSEFTX1RVUkJPX1JBVElPCTB4MDAwMDAwMTAKKyNkZWZpbmUgQ1BVUE9XRVJfQ0FQX0lTX1NOQgkJMHgwMDAwMDAxMQorI2RlZmluZSBDUFVQT1dFUl9DQVBfSU5URUxfSURBCQkweDAwMDAwMDEyCisKKyNkZWZpbmUgTUFYX0hXX1BTVEFURVMgMTAKKworc3RydWN0IGNwdXBvd2VyX2NwdV9pbmZvIHsKKwllbnVtIGNwdXBvd2VyX2NwdV92ZW5kb3IgdmVuZG9yOworCXVuc2lnbmVkIGludCBmYW1pbHk7CisJdW5zaWduZWQgaW50IG1vZGVsOworCXVuc2lnbmVkIGludCBzdGVwcGluZzsKKwkvKiBDUFUgY2FwYWJpbGl0aWVzIHJlYWQgb3V0IGZyb20gY3B1aWQgKi8KKwl1bnNpZ25lZCBsb25nIGxvbmcgY2FwczsKK307CisKKy8qIGdldF9jcHVfaW5mbworICoKKyAqIEV4dHJhY3QgQ1BVIHZlbmRvciwgZmFtaWx5LCBtb2RlbCwgc3RlcHBpbmcgaW5mbyBmcm9tIC9wcm9jL2NwdWluZm8KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXYgZXJyb3IgY29kZQorICogT25seSB1c2VkIG9uIHg4NiwgYmVsb3cgZ2xvYmFsJ3Mgc3RydWN0IHZhbHVlcyBhcmUgemVyby91bmtub3duIG9uCisgKiBvdGhlciBhcmNocworICovCitleHRlcm4gaW50IGdldF9jcHVfaW5mbyh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgY3B1cG93ZXJfY3B1X2luZm8gKmNwdV9pbmZvKTsKK2V4dGVybiBzdHJ1Y3QgY3B1cG93ZXJfY3B1X2luZm8gY3B1cG93ZXJfY3B1X2luZm87CisvKiBjcHVpZCBhbmQgY3B1aW5mbyBoZWxwZXJzICAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisvKiBDUFUgdG9wb2xvZ3kvaGllcmFyY2h5IHBhcnNpbmcgKioqKioqKioqKioqKioqKioqLworc3RydWN0IGNwdXBvd2VyX3RvcG9sb2d5IHsKKwkvKiBBbW91bnQgb2YgQ1BVIGNvcmVzLCBwYWNrYWdlcyBhbmQgdGhyZWFkcyBwZXIgY29yZSBpbiB0aGUgc3lzdGVtICovCisJdW5zaWduZWQgaW50IGNvcmVzOworCXVuc2lnbmVkIGludCBwa2dzOworCXVuc2lnbmVkIGludCB0aHJlYWRzOyAvKiBwZXIgY29yZSAqLworCisJLyogQXJyYXkgZ2V0cyBtYWxsb2NhdGVkIHdpdGggY29yZXMgZW50cmllcywgaG9sZGluZyBwZXIgY29yZSBpbmZvICovCisJc3RydWN0IHsKKwkJaW50IHBrZzsKKwkJaW50IGNvcmU7CisJCWludCBjcHU7CisJfSAqY29yZV9pbmZvOworfTsKKworZXh0ZXJuIGludCBnZXRfY3B1X3RvcG9sb2d5KHN0cnVjdCBjcHVwb3dlcl90b3BvbG9neSAqY3B1X3RvcCk7CitleHRlcm4gdm9pZCBjcHVfdG9wb2xvZ3lfcmVsZWFzZShzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xvZ3kgY3B1X3RvcCk7CisvKiBDUFUgdG9wb2xvZ3kvaGllcmFyY2h5IHBhcnNpbmcgKioqKioqKioqKioqKioqKioqLworCisvKiBYODYgT05MWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPHBjaS9wY2kuaD4KKworLyogUmVhZC9Xcml0ZSBtc3IgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBpbnQgcmVhZF9tc3IoaW50IGNwdSwgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgbG9uZyBsb25nICp2YWwpOworZXh0ZXJuIGludCB3cml0ZV9tc3IoaW50IGNwdSwgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgbG9uZyBsb25nIHZhbCk7CisKK2V4dGVybiBpbnQgbXNyX2ludGVsX3NldF9wZXJmX2JpYXModW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IHZhbCk7CitleHRlcm4gaW50IG1zcl9pbnRlbF9nZXRfcGVyZl9iaWFzKHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBtc3JfaW50ZWxfZ2V0X3R1cmJvX3JhdGlvKHVuc2lnbmVkIGludCBjcHUpOworCisvKiBSZWFkL1dyaXRlIG1zciAqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQQ0kgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBpbnQgYW1kX3BjaV9nZXRfbnVtX2Jvb3N0X3N0YXRlcyhpbnQgKmFjdGl2ZSwgaW50ICpzdGF0ZXMpOworZXh0ZXJuIHN0cnVjdCBwY2lfZGV2ICpwY2lfYWNjX2luaXQoc3RydWN0IHBjaV9hY2Nlc3MgKipwYWNjLCBpbnQgdmVuZG9yX2lkLAorCQkJCSAgICBpbnQgKmRldl9pZHMpOworCisvKiBQQ0kgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQU1EIEhXIHBzdGF0ZSBkZWNvZGluZyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZXh0ZXJuIGludCBkZWNvZGVfcHN0YXRlcyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgY3B1X2ZhbWlseSwKKwkJCSAgaW50IGJvb3N0X3N0YXRlcywgdW5zaWduZWQgbG9uZyAqcHN0YXRlcywgaW50ICpubyk7CisKKy8qIEFNRCBIVyBwc3RhdGUgZGVjb2RpbmcgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2V4dGVybiBpbnQgY3B1ZnJlcV9oYXNfYm9vc3Rfc3VwcG9ydCh1bnNpZ25lZCBpbnQgY3B1LCBpbnQgKnN1cHBvcnQsCisJCQkJICAgICBpbnQgKmFjdGl2ZSwgaW50ICogc3RhdGVzKTsKKy8qCisgKiBDUFVJRCBmdW5jdGlvbnMgcmV0dXJuaW5nIGEgc2luZ2xlIGRhdHVtCisgKi8KK3Vuc2lnbmVkIGludCBjcHVpZF9lYXgodW5zaWduZWQgaW50IG9wKTsKK3Vuc2lnbmVkIGludCBjcHVpZF9lYngodW5zaWduZWQgaW50IG9wKTsKK3Vuc2lnbmVkIGludCBjcHVpZF9lY3godW5zaWduZWQgaW50IG9wKTsKK3Vuc2lnbmVkIGludCBjcHVpZF9lZHgodW5zaWduZWQgaW50IG9wKTsKKworLyogY3B1aWQgYW5kIGNwdWluZm8gaGVscGVycyAgKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBYODYgT05MWSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBkZWNvZGVfcHN0YXRlcyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgY3B1X2ZhbWlseSwKKwkJCQkgaW50IGJvb3N0X3N0YXRlcywgdW5zaWduZWQgbG9uZyAqcHN0YXRlcywKKwkJCQkgaW50ICpubykKK3sgcmV0dXJuIC0xOyB9OworCitzdGF0aWMgaW5saW5lIGludCByZWFkX21zcihpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWR4LCB1bnNpZ25lZCBsb25nIGxvbmcgKnZhbCkKK3sgcmV0dXJuIC0xOyB9Oworc3RhdGljIGlubGluZSBpbnQgd3JpdGVfbXNyKGludCBjcHUsIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCit7IHJldHVybiAtMTsgfTsKK3N0YXRpYyBpbmxpbmUgaW50IG1zcl9pbnRlbF9zZXRfcGVyZl9iaWFzKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCB2YWwpCit7IHJldHVybiAtMTsgfTsKK3N0YXRpYyBpbmxpbmUgaW50IG1zcl9pbnRlbF9nZXRfcGVyZl9iaWFzKHVuc2lnbmVkIGludCBjcHUpCit7IHJldHVybiAtMTsgfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIG1zcl9pbnRlbF9nZXRfdHVyYm9fcmF0aW8odW5zaWduZWQgaW50IGNwdSkKK3sgcmV0dXJuIDA7IH07CisKKy8qIFJlYWQvV3JpdGUgbXNyICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbmxpbmUgaW50IGNwdWZyZXFfaGFzX2Jvb3N0X3N1cHBvcnQodW5zaWduZWQgaW50IGNwdSwgaW50ICpzdXBwb3J0LAorCQkJCQkgICAgaW50ICphY3RpdmUsIGludCAqIHN0YXRlcykKK3sgcmV0dXJuIC0xOyB9CisKKy8qIGNwdWlkIGFuZCBjcHVpbmZvIGhlbHBlcnMgICoqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lYXgodW5zaWduZWQgaW50IG9wKSB7IHJldHVybiAwOyB9Oworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3B1aWRfZWJ4KHVuc2lnbmVkIGludCBvcCkgeyByZXR1cm4gMDsgfTsKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNwdWlkX2VjeCh1bnNpZ25lZCBpbnQgb3ApIHsgcmV0dXJuIDA7IH07CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lZHgodW5zaWduZWQgaW50IG9wKSB7IHJldHVybiAwOyB9OworI2VuZGlmIC8qIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KKworI2VuZGlmIC8qIF9fQ1BVUE9XRVJVVElMU19IRUxQRVJTX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvbWlzYy5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYwOTI0MwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvbWlzYy5jCkBAIC0wLDAgKzEsMjcgQEAKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworaW50IGNwdWZyZXFfaGFzX2Jvb3N0X3N1cHBvcnQodW5zaWduZWQgaW50IGNwdSwgaW50ICpzdXBwb3J0LCBpbnQgKmFjdGl2ZSwKKwkJCWludCAqc3RhdGVzKQoreworCXN0cnVjdCBjcHVwb3dlcl9jcHVfaW5mbyBjcHVfaW5mbzsKKwlpbnQgcmV0OworCisJKnN1cHBvcnQgPSAqYWN0aXZlID0gKnN0YXRlcyA9IDA7CisKKwlyZXQgPSBnZXRfY3B1X2luZm8oMCwgJmNwdV9pbmZvKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfQU1EX0NCUCkgeworCQkqc3VwcG9ydCA9IDE7CisJCWFtZF9wY2lfZ2V0X251bV9ib29zdF9zdGF0ZXMoYWN0aXZlLCBzdGF0ZXMpOworCQlpZiAocmV0IDw9IDApCisJCQlyZXR1cm4gcmV0OworCQkqc3VwcG9ydCA9IDE7CisJfSBlbHNlIGlmIChjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX0lOVEVMX0lEQSkKKwkJKnN1cHBvcnQgPSAqYWN0aXZlID0gMTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9tc3IuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvbXNyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFhNGIyNAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvbXNyLmMKQEAgLTAsMCArMSwxMTUgQEAKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworLyogSW50ZWwgc3BlY2lmaWMgTVNScyAqLworI2RlZmluZSBNU1JfSUEzMl9QRVJGX1NUQVRVUwkJMHgxOTgKKyNkZWZpbmUgTVNSX0lBMzJfTUlTQ19FTkFCTEVTCQkweDFhMAorI2RlZmluZSBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTCTB4MWIwCisjZGVmaW5lIE1TUl9ORUhBTEVNX1RVUkJPX1JBVElPX0xJTUlUCTB4MWFkCisKKy8qCisgKiByZWFkX21zcgorICoKKyAqIFdpbGwgcmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLTEgb24gZmFpbHVyZS4KKyAqIFBvc3NpYmxlIGVycm5vIHZhbHVlcyBjb3VsZCBiZToKKyAqIEVGQVVMVCAtSWYgdGhlIHJlYWQvd3JpdGUgZGlkIG5vdCBmdWxseSBjb21wbGV0ZQorICogRUlPICAgIC1JZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgTVNScworICogRU5YSU8gIC1JZiB0aGUgQ1BVIGRvZXMgbm90IGV4aXN0CisgKi8KKworaW50IHJlYWRfbXNyKGludCBjcHUsIHVuc2lnbmVkIGludCBpZHgsIHVuc2lnbmVkIGxvbmcgbG9uZyAqdmFsKQoreworCWludCBmZDsKKwljaGFyIG1zcl9maWxlX25hbWVbNjRdOworCisJc3ByaW50Zihtc3JfZmlsZV9uYW1lLCAiL2Rldi9jcHUvJWQvbXNyIiwgY3B1KTsKKwlmZCA9IG9wZW4obXNyX2ZpbGVfbmFtZSwgT19SRE9OTFkpOworCWlmIChmZCA8IDApCisJCXJldHVybiAtMTsKKwlpZiAobHNlZWsoZmQsIGlkeCwgU0VFS19DVVIpID09IC0xKQorCQlnb3RvIGVycjsKKwlpZiAocmVhZChmZCwgdmFsLCBzaXplb2YgKnZhbCkgIT0gc2l6ZW9mICp2YWwpCisJCWdvdG8gZXJyOworCWNsb3NlKGZkKTsKKwlyZXR1cm4gMDsKKyBlcnI6CisJY2xvc2UoZmQpOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIHdyaXRlX21zcgorICoKKyAqIFdpbGwgcmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLTEgb24gZmFpbHVyZS4KKyAqIFBvc3NpYmxlIGVycm5vIHZhbHVlcyBjb3VsZCBiZToKKyAqIEVGQVVMVCAtSWYgdGhlIHJlYWQvd3JpdGUgZGlkIG5vdCBmdWxseSBjb21wbGV0ZQorICogRUlPICAgIC1JZiB0aGUgQ1BVIGRvZXMgbm90IHN1cHBvcnQgTVNScworICogRU5YSU8gIC1JZiB0aGUgQ1BVIGRvZXMgbm90IGV4aXN0CisgKi8KK2ludCB3cml0ZV9tc3IoaW50IGNwdSwgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgbG9uZyBsb25nIHZhbCkKK3sKKwlpbnQgZmQ7CisJY2hhciBtc3JfZmlsZV9uYW1lWzY0XTsKKworCXNwcmludGYobXNyX2ZpbGVfbmFtZSwgIi9kZXYvY3B1LyVkL21zciIsIGNwdSk7CisJZmQgPSBvcGVuKG1zcl9maWxlX25hbWUsIE9fV1JPTkxZKTsKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gLTE7CisJaWYgKGxzZWVrKGZkLCBpZHgsIFNFRUtfQ1VSKSA9PSAtMSkKKwkJZ290byBlcnI7CisJaWYgKHdyaXRlKGZkLCAmdmFsLCBzaXplb2YgdmFsKSAhPSBzaXplb2YgdmFsKQorCQlnb3RvIGVycjsKKwljbG9zZShmZCk7CisJcmV0dXJuIDA7CisgZXJyOgorCWNsb3NlKGZkKTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBtc3JfaW50ZWxfZ2V0X3BlcmZfYmlhcyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJaW50IHJldDsKKworCWlmICghKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfUEVSRl9CSUFTKSkKKwkJcmV0dXJuIC0xOworCisJcmV0ID0gcmVhZF9tc3IoY3B1LCBNU1JfSUEzMl9FTkVSR1lfUEVSRl9CSUFTLCAmdmFsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCXJldHVybiB2YWw7Cit9CisKK2ludCBtc3JfaW50ZWxfc2V0X3BlcmZfYmlhcyh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgdmFsKQoreworCWludCByZXQ7CisKKwlpZiAoIShjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX1BFUkZfQklBUykpCisJCXJldHVybiAtMTsKKworCXJldCA9IHdyaXRlX21zcihjcHUsIE1TUl9JQTMyX0VORVJHWV9QRVJGX0JJQVMsIHZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKwordW5zaWduZWQgbG9uZyBsb25nIG1zcl9pbnRlbF9nZXRfdHVyYm9fcmF0aW8odW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlpZiAoIShjcHVwb3dlcl9jcHVfaW5mby5jYXBzICYgQ1BVUE9XRVJfQ0FQX0hBU19UVVJCT19SQVRJTykpCisJCXJldHVybiAtMTsKKworCXJldCA9IHJlYWRfbXNyKGNwdSwgTVNSX05FSEFMRU1fVFVSQk9fUkFUSU9fTElNSVQsICZ2YWwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJcmV0dXJuIHZhbDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9wY2kuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2QyZWI2ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvcGNpLmMKQEAgLTAsMCArMSw0NCBAQAorI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPGhlbHBlcnMvaGVscGVycy5oPgorCisvKgorICogcGNpX2FjY19pbml0CisgKgorICogUENJIGFjY2VzcyBoZWxwZXIgZnVuY3Rpb24gZGVwZW5kaW5nIG9uIGxpYnBjaQorICoKKyAqICoqcGFjYyA6IGlmIGEgdmFsaWQgcGNpX2RldiBpcyByZXR1cm5lZAorICogICAgICAgICAqcGFjYyBtdXN0IGJlIHBhc3NlZCB0byBwY2lfYWNjX2NsZWFudXAgdG8gZnJlZSBpdAorICoKKyAqIHZlbmRvcl9pZCA6IHRoZSBwY2kgdmVuZG9yIGlkIG1hdGNoaW5nIHRoZSBwY2kgZGV2aWNlIHRvIGFjY2VzcworICogZGV2X2lkcyA6ICAgZGV2aWNlIGlkcyBtYXRjaGluZyB0aGUgcGNpIGRldmljZSB0byBhY2Nlc3MKKyAqCisgKiBSZXR1cm5zIDoKKyAqIHN0cnVjdCBwY2lfZGV2IHdoaWNoIGNhbiBiZSB1c2VkIHdpdGggcGNpX3tyZWFkLHdyaXRlfV8qIGZ1bmN0aW9ucworICogICAgICAgICAgICAgICAgdG8gYWNjZXNzIHRoZSBQQ0kgY29uZmlnIHNwYWNlIG9mIG1hdGNoaW5nIHBjaSBkZXZpY2VzCisgKi8KK3N0cnVjdCBwY2lfZGV2ICpwY2lfYWNjX2luaXQoc3RydWN0IHBjaV9hY2Nlc3MgKipwYWNjLCBpbnQgdmVuZG9yX2lkLAorCQkJCSAgICBpbnQgKmRldl9pZHMpCit7CisJc3RydWN0IHBjaV9maWx0ZXIgZmlsdGVyX25iX2xpbmsgPSB7IC0xLCAtMSwgLTEsIC0xLCB2ZW5kb3JfaWQsIDB9OworCXN0cnVjdCBwY2lfZGV2ICpkZXZpY2U7CisJdW5zaWduZWQgaW50IGk7CisKKwkqcGFjYyA9IHBjaV9hbGxvYygpOworCWlmICgqcGFjYyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXBjaV9pbml0KCpwYWNjKTsKKwlwY2lfc2Nhbl9idXMoKnBhY2MpOworCisJZm9yIChpID0gMDsgZGV2X2lkc1tpXSAhPSAwOyBpKyspIHsKKwkJZmlsdGVyX25iX2xpbmsuZGV2aWNlID0gZGV2X2lkc1tpXTsKKwkJZm9yIChkZXZpY2UgPSAoKnBhY2MpLT5kZXZpY2VzOyBkZXZpY2U7IGRldmljZSA9IGRldmljZS0+bmV4dCkgeworCQkJaWYgKHBjaV9maWx0ZXJfbWF0Y2goJmZpbHRlcl9uYl9saW5rLCBkZXZpY2UpKQorCQkJCXJldHVybiBkZXZpY2U7CisJCX0KKwl9CisJcGNpX2NsZWFudXAoKnBhY2MpOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NWUyNDY2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy9zeXNmcy5jCkBAIC0wLDAgKzEsMzU4IEBACisvKgorICogIChDKSAyMDA0LTIwMDkgIERvbWluaWsgQnJvZG93c2tpIDxsaW51eEBkb21pbmlrYnJvZG93c2tpLmRlPgorICogIChDKSAyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQG5vdmVsbC5jb20+IE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvc3lzZnMuaCIKKwordW5zaWduZWQgaW50IHN5c2ZzX3JlYWRfZmlsZShjb25zdCBjaGFyICpwYXRoLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJaW50IGZkOworCXNzaXplX3QgbnVtcmVhZDsKKworCWZkID0gb3BlbihwYXRoLCBPX1JET05MWSk7CisJaWYgKGZkID09IC0xKQorCQlyZXR1cm4gMDsKKworCW51bXJlYWQgPSByZWFkKGZkLCBidWYsIGJ1ZmxlbiAtIDEpOworCWlmIChudW1yZWFkIDwgMSkgeworCQljbG9zZShmZCk7CisJCXJldHVybiAwOworCX0KKworCWJ1ZltudW1yZWFkXSA9ICdcMCc7CisJY2xvc2UoZmQpOworCisJcmV0dXJuICh1bnNpZ25lZCBpbnQpIG51bXJlYWQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3lzZnNfd3JpdGVfZmlsZShjb25zdCBjaGFyICpwYXRoLAorCQkJCSAgICAgY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCBsZW4pCit7CisJaW50IGZkOworCXNzaXplX3QgbnVtd3JpdGU7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19XUk9OTFkpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwludW13cml0ZSA9IHdyaXRlKGZkLCB2YWx1ZSwgbGVuKTsKKwlpZiAobnVtd3JpdGUgPCAxKSB7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDA7CisJfQorCWNsb3NlKGZkKTsKKwlyZXR1cm4gKHVuc2lnbmVkIGludCkgbnVtd3JpdGU7Cit9CisKKy8qIENQVWlkbGUgaWRsZXN0YXRlIHNwZWNpZmljIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdVgvY3B1aWRsZS8gYWNjZXNzICovCisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gdG8gcmVhZCBmaWxlIGZyb20gL3N5cyBpbnRvIGdpdmVuIGJ1ZmZlcgorICogZm5hbWUgaXMgYSByZWxhdGl2ZSBwYXRoIHVuZGVyICJjcHVYL2NwdWlkbGUvc3RhdGVYLyIgZGlyCisgKiBjc3RhdGVzIHN0YXJ0aW5nIHdpdGggMCwgQzAgaXMgbm90IGNvdW50ZWQgYXMgY3N0YXRlLgorICogVGhpcyBtZWFucyBpZiB5b3Ugd2FudCBDMSBpbmZvLCBwYXNzIDAgYXMgaWRsZXN0YXRlIHBhcmFtCisgKi8KK3Vuc2lnbmVkIGludCBzeXNmc19pZGxlc3RhdGVfcmVhZF9maWxlKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUsCisJCQkgICAgIGNvbnN0IGNoYXIgKmZuYW1lLCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJY2hhciBwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKwlpbnQgZmQ7CisJc3NpemVfdCBudW1yZWFkOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBQQVRIX1RPX0NQVSAiY3B1JXUvY3B1aWRsZS9zdGF0ZSV1LyVzIiwKKwkJIGNwdSwgaWRsZXN0YXRlLCBmbmFtZSk7CisKKwlmZCA9IG9wZW4ocGF0aCwgT19SRE9OTFkpOworCWlmIChmZCA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwludW1yZWFkID0gcmVhZChmZCwgYnVmLCBidWZsZW4gLSAxKTsKKwlpZiAobnVtcmVhZCA8IDEpIHsKKwkJY2xvc2UoZmQpOworCQlyZXR1cm4gMDsKKwl9CisKKwlidWZbbnVtcmVhZF0gPSAnXDAnOworCWNsb3NlKGZkKTsKKworCXJldHVybiAodW5zaWduZWQgaW50KSBudW1yZWFkOworfQorCisvKiByZWFkIGFjY2VzcyB0byBmaWxlcyB3aGljaCBjb250YWluIG9uZSBudW1lcmljIHZhbHVlICovCisKK2VudW0gaWRsZXN0YXRlX3ZhbHVlIHsKKwlJRExFU1RBVEVfVVNBR0UsCisJSURMRVNUQVRFX1BPV0VSLAorCUlETEVTVEFURV9MQVRFTkNZLAorCUlETEVTVEFURV9USU1FLAorCU1BWF9JRExFU1RBVEVfVkFMVUVfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICppZGxlc3RhdGVfdmFsdWVfZmlsZXNbTUFYX0lETEVTVEFURV9WQUxVRV9GSUxFU10gPSB7CisJW0lETEVTVEFURV9VU0FHRV0gPSAidXNhZ2UiLAorCVtJRExFU1RBVEVfUE9XRVJdID0gInBvd2VyIiwKKwlbSURMRVNUQVRFX0xBVEVOQ1ldID0gImxhdGVuY3kiLAorCVtJRExFU1RBVEVfVElNRV0gID0gInRpbWUiLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzeXNmc19pZGxlc3RhdGVfZ2V0X29uZV92YWx1ZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJICAgICB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlLAorCQkJCQkJICAgICBlbnVtIGlkbGVzdGF0ZV92YWx1ZSB3aGljaCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CisJdW5zaWduZWQgaW50IGxlbjsKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICplbmRwOworCisJaWYgKHdoaWNoID49IE1BWF9JRExFU1RBVEVfVkFMVUVfRklMRVMpCisJCXJldHVybiAwOworCisJbGVuID0gc3lzZnNfaWRsZXN0YXRlX3JlYWRfZmlsZShjcHUsIGlkbGVzdGF0ZSwKKwkJCQkJaWRsZXN0YXRlX3ZhbHVlX2ZpbGVzW3doaWNoXSwKKwkJCQkJbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCisJdmFsdWUgPSBzdHJ0b3VsbChsaW5lYnVmLCAmZW5kcCwgMCk7CisKKwlpZiAoZW5kcCA9PSBsaW5lYnVmIHx8IGVycm5vID09IEVSQU5HRSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gdmFsdWU7Cit9CisKKy8qIHJlYWQgYWNjZXNzIHRvIGZpbGVzIHdoaWNoIGNvbnRhaW4gb25lIHN0cmluZyAqLworCitlbnVtIGlkbGVzdGF0ZV9zdHJpbmcgeworCUlETEVTVEFURV9ERVNDLAorCUlETEVTVEFURV9OQU1FLAorCU1BWF9JRExFU1RBVEVfU1RSSU5HX0ZJTEVTCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqaWRsZXN0YXRlX3N0cmluZ19maWxlc1tNQVhfSURMRVNUQVRFX1NUUklOR19GSUxFU10gPSB7CisJW0lETEVTVEFURV9ERVNDXSA9ICJkZXNjIiwKKwlbSURMRVNUQVRFX05BTUVdID0gIm5hbWUiLAorfTsKKworCitzdGF0aWMgY2hhciAqc3lzZnNfaWRsZXN0YXRlX2dldF9vbmVfc3RyaW5nKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCXVuc2lnbmVkIGludCBpZGxlc3RhdGUsCisJCQkJCWVudW0gaWRsZXN0YXRlX3N0cmluZyB3aGljaCkKK3sKKwljaGFyIGxpbmVidWZbTUFYX0xJTkVfTEVOXTsKKwljaGFyICpyZXN1bHQ7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmICh3aGljaCA+PSBNQVhfSURMRVNUQVRFX1NUUklOR19GSUxFUykKKwkJcmV0dXJuIE5VTEw7CisKKwlsZW4gPSBzeXNmc19pZGxlc3RhdGVfcmVhZF9maWxlKGNwdSwgaWRsZXN0YXRlLAorCQkJCQlpZGxlc3RhdGVfc3RyaW5nX2ZpbGVzW3doaWNoXSwKKwkJCQkJbGluZWJ1Ziwgc2l6ZW9mKGxpbmVidWYpKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybiBOVUxMOworCisJcmVzdWx0ID0gc3RyZHVwKGxpbmVidWYpOworCWlmIChyZXN1bHQgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAocmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPT0gJ1xuJykKKwkJcmVzdWx0W3N0cmxlbihyZXN1bHQpIC0gMV0gPSAnXDAnOworCisJcmV0dXJuIHJlc3VsdDsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfaWRsZXN0YXRlX2xhdGVuY3kodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJdW5zaWduZWQgaW50IGlkbGVzdGF0ZSkKK3sKKwlyZXR1cm4gc3lzZnNfaWRsZXN0YXRlX2dldF9vbmVfdmFsdWUoY3B1LCBpZGxlc3RhdGUsIElETEVTVEFURV9MQVRFTkNZKTsKK30KKwordW5zaWduZWQgbG9uZyBzeXNmc19nZXRfaWRsZXN0YXRlX3VzYWdlKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCXVuc2lnbmVkIGludCBpZGxlc3RhdGUpCit7CisJcmV0dXJuIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3ZhbHVlKGNwdSwgaWRsZXN0YXRlLCBJRExFU1RBVEVfVVNBR0UpOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcgc3lzZnNfZ2V0X2lkbGVzdGF0ZV90aW1lKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCXVuc2lnbmVkIGludCBpZGxlc3RhdGUpCit7CisJcmV0dXJuIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3ZhbHVlKGNwdSwgaWRsZXN0YXRlLCBJRExFU1RBVEVfVElNRSk7Cit9CisKK2NoYXIgKnN5c2ZzX2dldF9pZGxlc3RhdGVfbmFtZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgaWRsZXN0YXRlKQoreworCXJldHVybiBzeXNmc19pZGxlc3RhdGVfZ2V0X29uZV9zdHJpbmcoY3B1LCBpZGxlc3RhdGUsIElETEVTVEFURV9OQU1FKTsKK30KKworY2hhciAqc3lzZnNfZ2V0X2lkbGVzdGF0ZV9kZXNjKHVuc2lnbmVkIGludCBjcHUsIHVuc2lnbmVkIGludCBpZGxlc3RhdGUpCit7CisJcmV0dXJuIHN5c2ZzX2lkbGVzdGF0ZV9nZXRfb25lX3N0cmluZyhjcHUsIGlkbGVzdGF0ZSwgSURMRVNUQVRFX0RFU0MpOworfQorCisvKgorICogUmV0dXJucyBudW1iZXIgb2Ygc3VwcG9ydGVkIEMtc3RhdGVzIG9mIENQVSBjb3JlIGNwdQorICogTmVnYXRpdiBpbiBlcnJvciBjYXNlCisgKiBaZXJvIGlmIGNwdWlkbGUgZG9lcyBub3QgZXhwb3J0IGFueSBDLXN0YXRlcworICovCitpbnQgc3lzZnNfZ2V0X2lkbGVzdGF0ZV9jb3VudCh1bnNpZ25lZCBpbnQgY3B1KQoreworCWNoYXIgZmlsZVtTWVNGU19QQVRIX01BWF07CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKwlpbnQgaWRsZXN0YXRlcyA9IDE7CisKKworCXNucHJpbnRmKGZpbGUsIFNZU0ZTX1BBVEhfTUFYLCBQQVRIX1RPX0NQVSAiY3B1aWRsZSIpOworCWlmIChzdGF0KGZpbGUsICZzdGF0YnVmKSAhPSAwIHx8ICFTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpCisJCXJldHVybiAtRU5PREVWOworCisJc25wcmludGYoZmlsZSwgU1lTRlNfUEFUSF9NQVgsIFBBVEhfVE9fQ1BVICJjcHUldS9jcHVpZGxlL3N0YXRlMCIsIGNwdSk7CisJaWYgKHN0YXQoZmlsZSwgJnN0YXRidWYpICE9IDAgfHwgIVNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoc3RhdChmaWxlLCAmc3RhdGJ1ZikgPT0gMCAmJiBTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpIHsKKwkJc25wcmludGYoZmlsZSwgU1lTRlNfUEFUSF9NQVgsIFBBVEhfVE9fQ1BVCisJCQkgImNwdSV1L2NwdWlkbGUvc3RhdGUlZCIsIGNwdSwgaWRsZXN0YXRlcyk7CisJCWlkbGVzdGF0ZXMrKzsKKwl9CisJaWRsZXN0YXRlcy0tOworCXJldHVybiBpZGxlc3RhdGVzOworfQorCisvKiBDUFVpZGxlIGdlbmVyYWwgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1aWRsZS8gc3lzZnMgYWNjZXNzICoqKioqKioqLworCisvKgorICogaGVscGVyIGZ1bmN0aW9uIHRvIHJlYWQgZmlsZSBmcm9tIC9zeXMgaW50byBnaXZlbiBidWZmZXIKKyAqIGZuYW1lIGlzIGEgcmVsYXRpdmUgcGF0aCB1bmRlciAiY3B1L2NwdWlkbGUvIiBkaXIKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBzeXNmc19jcHVpZGxlX3JlYWRfZmlsZShjb25zdCBjaGFyICpmbmFtZSwgY2hhciAqYnVmLAorCQkJCQkgICAgc2l6ZV90IGJ1ZmxlbikKK3sKKwljaGFyIHBhdGhbU1lTRlNfUEFUSF9NQVhdOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBQQVRIX1RPX0NQVSAiY3B1aWRsZS8lcyIsIGZuYW1lKTsKKworCXJldHVybiBzeXNmc19yZWFkX2ZpbGUocGF0aCwgYnVmLCBidWZsZW4pOworfQorCisKKworLyogcmVhZCBhY2Nlc3MgdG8gZmlsZXMgd2hpY2ggY29udGFpbiBvbmUgc3RyaW5nICovCisKK2VudW0gY3B1aWRsZV9zdHJpbmcgeworCUNQVUlETEVfR09WRVJOT1IsCisJQ1BVSURMRV9HT1ZFUk5PUl9STywKKwlDUFVJRExFX0RSSVZFUiwKKwlNQVhfQ1BVSURMRV9TVFJJTkdfRklMRVMKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpjcHVpZGxlX3N0cmluZ19maWxlc1tNQVhfQ1BVSURMRV9TVFJJTkdfRklMRVNdID0geworCVtDUFVJRExFX0dPVkVSTk9SXQk9ICJjdXJyZW50X2dvdmVybm9yIiwKKwlbQ1BVSURMRV9HT1ZFUk5PUl9ST10JPSAiY3VycmVudF9nb3Zlcm5vcl9ybyIsCisJW0NQVUlETEVfRFJJVkVSXQk9ICJjdXJyZW50X2RyaXZlciIsCit9OworCisKK3N0YXRpYyBjaGFyICpzeXNmc19jcHVpZGxlX2dldF9vbmVfc3RyaW5nKGVudW0gY3B1aWRsZV9zdHJpbmcgd2hpY2gpCit7CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciAqcmVzdWx0OworCXVuc2lnbmVkIGludCBsZW47CisKKwlpZiAod2hpY2ggPj0gTUFYX0NQVUlETEVfU1RSSU5HX0ZJTEVTKQorCQlyZXR1cm4gTlVMTDsKKworCWxlbiA9IHN5c2ZzX2NwdWlkbGVfcmVhZF9maWxlKGNwdWlkbGVfc3RyaW5nX2ZpbGVzW3doaWNoXSwKKwkJCQlsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpOworCWlmIChsZW4gPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXN1bHQgPSBzdHJkdXAobGluZWJ1Zik7CisJaWYgKHJlc3VsdCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChyZXN1bHRbc3RybGVuKHJlc3VsdCkgLSAxXSA9PSAnXG4nKQorCQlyZXN1bHRbc3RybGVuKHJlc3VsdCkgLSAxXSA9ICdcMCc7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitjaGFyICpzeXNmc19nZXRfY3B1aWRsZV9nb3Zlcm5vcih2b2lkKQoreworCWNoYXIgKnRtcCA9IHN5c2ZzX2NwdWlkbGVfZ2V0X29uZV9zdHJpbmcoQ1BVSURMRV9HT1ZFUk5PUl9STyk7CisJaWYgKCF0bXApCisJCXJldHVybiBzeXNmc19jcHVpZGxlX2dldF9vbmVfc3RyaW5nKENQVUlETEVfR09WRVJOT1IpOworCWVsc2UKKwkJcmV0dXJuIHRtcDsKK30KKworY2hhciAqc3lzZnNfZ2V0X2NwdWlkbGVfZHJpdmVyKHZvaWQpCit7CisJcmV0dXJuIHN5c2ZzX2NwdWlkbGVfZ2V0X29uZV9zdHJpbmcoQ1BVSURMRV9EUklWRVIpOworfQorLyogQ1BVaWRsZSBpZGxlc3RhdGUgc3BlY2lmaWMgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1WC9jcHVpZGxlLyBhY2Nlc3MgKi8KKworLyoKKyAqIEdldCBzY2hlZF9tYyBvciBzY2hlZF9zbXQgc2V0dGluZ3MKKyAqIFBhc3MgIm1jIiBvciAic210IiBhcyBhcmd1bWVudAorICoKKyAqIFJldHVybnMgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQorICovCitpbnQgc3lzZnNfZ2V0X3NjaGVkKGNvbnN0IGNoYXIgKnNtdF9tYykKK3sKKwl1bnNpZ25lZCBsb25nIHZhbHVlOworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgKmVuZHA7CisJY2hhciBwYXRoW1NZU0ZTX1BBVEhfTUFYXTsKKworCWlmIChzdHJjbXAoIm1jIiwgc210X21jKSAmJiBzdHJjbXAoInNtdCIsIHNtdF9tYykpCisJCXJldHVybiAtRUlOVkFMOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLAorCQlQQVRIX1RPX0NQVSAic2NoZWRfJXNfcG93ZXJfc2F2aW5ncyIsIHNtdF9tYyk7CisJaWYgKHN5c2ZzX3JlYWRfZmlsZShwYXRoLCBsaW5lYnVmLCBNQVhfTElORV9MRU4pID09IDApCisJCXJldHVybiAtMTsKKwl2YWx1ZSA9IHN0cnRvdWwobGluZWJ1ZiwgJmVuZHAsIDApOworCWlmIChlbmRwID09IGxpbmVidWYgfHwgZXJybm8gPT0gRVJBTkdFKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHZhbHVlOworfQorCisvKgorICogR2V0IHNjaGVkX21jIG9yIHNjaGVkX3NtdCBzZXR0aW5ncworICogUGFzcyAibWMiIG9yICJzbXQiIGFzIGFyZ3VtZW50CisgKgorICogUmV0dXJucyBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlCisgKi8KK2ludCBzeXNmc19zZXRfc2NoZWQoY29uc3QgY2hhciAqc210X21jLCBpbnQgdmFsKQoreworCWNoYXIgbGluZWJ1ZltNQVhfTElORV9MRU5dOworCWNoYXIgcGF0aFtTWVNGU19QQVRIX01BWF07CisJc3RydWN0IHN0YXQgc3RhdGJ1ZjsKKworCWlmIChzdHJjbXAoIm1jIiwgc210X21jKSAmJiBzdHJjbXAoInNtdCIsIHNtdF9tYykpCisJCXJldHVybiAtRUlOVkFMOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLAorCQlQQVRIX1RPX0NQVSAic2NoZWRfJXNfcG93ZXJfc2F2aW5ncyIsIHNtdF9tYyk7CisJc3ByaW50ZihsaW5lYnVmLCAiJWQiLCB2YWwpOworCisJaWYgKHN0YXQocGF0aCwgJnN0YXRidWYpICE9IDApCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHN5c2ZzX3dyaXRlX2ZpbGUocGF0aCwgbGluZWJ1ZiwgTUFYX0xJTkVfTEVOKSA9PSAwKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmggYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9oZWxwZXJzL3N5c2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzNzNlMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvc3lzZnMuaApAQCAtMCwwICsxLDI4IEBACisjaWZuZGVmIF9fQ1BVUE9XRVJfSEVMUEVSU19TWVNGU19IX18KKyNkZWZpbmUgX19DUFVQT1dFUl9IRUxQRVJTX1NZU0ZTX0hfXworCisjZGVmaW5lIFBBVEhfVE9fQ1BVICIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS8iCisjZGVmaW5lIE1BWF9MSU5FX0xFTiAyNTUKKyNkZWZpbmUgU1lTRlNfUEFUSF9NQVggMjU1CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzZnNfcmVhZF9maWxlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zmxlbik7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHN5c2ZzX2dldF9pZGxlc3RhdGVfbGF0ZW5jeSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCQkJdW5zaWduZWQgaW50IGlkbGVzdGF0ZSk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzeXNmc19nZXRfaWRsZXN0YXRlX3VzYWdlKHVuc2lnbmVkIGludCBjcHUsCisJCQkJCXVuc2lnbmVkIGludCBpZGxlc3RhdGUpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBzeXNmc19nZXRfaWRsZXN0YXRlX3RpbWUodW5zaWduZWQgaW50IGNwdSwKKwkJCQkJCXVuc2lnbmVkIGludCBpZGxlc3RhdGUpOworZXh0ZXJuIGNoYXIgKnN5c2ZzX2dldF9pZGxlc3RhdGVfbmFtZSh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCXVuc2lnbmVkIGludCBpZGxlc3RhdGUpOworZXh0ZXJuIGNoYXIgKnN5c2ZzX2dldF9pZGxlc3RhdGVfZGVzYyh1bnNpZ25lZCBpbnQgY3B1LAorCQkJCXVuc2lnbmVkIGludCBpZGxlc3RhdGUpOworZXh0ZXJuIGludCBzeXNmc19nZXRfaWRsZXN0YXRlX2NvdW50KHVuc2lnbmVkIGludCBjcHUpOworCitleHRlcm4gY2hhciAqc3lzZnNfZ2V0X2NwdWlkbGVfZ292ZXJub3Iodm9pZCk7CitleHRlcm4gY2hhciAqc3lzZnNfZ2V0X2NwdWlkbGVfZHJpdmVyKHZvaWQpOworCitleHRlcm4gaW50IHN5c2ZzX2dldF9zY2hlZChjb25zdCBjaGFyICpzbXRfbWMpOworZXh0ZXJuIGludCBzeXNmc19zZXRfc2NoZWQoY29uc3QgY2hhciAqc210X21jLCBpbnQgdmFsKTsKKworI2VuZGlmIC8qIF9fQ1BVUE9XRVJfSEVMUEVSU19TWVNGU19IX18gKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvdG9wb2xvZ3kuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2hlbHBlcnMvdG9wb2xvZ3kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODVlZTVjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaGVscGVycy90b3BvbG9neS5jCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiBUb0RvOiBOZWVkcyB0byBiZSBkb25lIG1vcmUgcHJvcGVybHkgZm9yIEFNRC9JbnRlbCBzcGVjaWZpY3MKKyAqLworCisvKiBIZWxwZXIgc3RydWN0IGZvciBxc29ydCwgbXVzdCBiZSBpbiBzeW5jIHdpdGggY3B1cG93ZXJfdG9wb2xvZ3kuY3B1X2luZm8gKi8KKy8qIEJlIGNhcmVmdWw6IE5lZWQgdG8gcGFzcyB1bnNpZ25lZCB0byB0aGUgc29ydCwgc28gdGhhdCBvZmZsaW5lZCBjb3JlcyBhcmUKKyAgIGluIHRoZSBlbmQsIGJ1dCBkb3VibGUgY2hlY2sgZm9yIC0xIGZvciBvZmZsaW5lZCBjcHVzIGF0IG90aGVyIHBsYWNlcyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDxoZWxwZXJzL2hlbHBlcnMuaD4KKyNpbmNsdWRlIDxoZWxwZXJzL3N5c2ZzLmg+CisKKy8qIHJldHVybnMgLTEgb24gZmFpbHVyZSwgMCBvbiBzdWNjZXNzICovCitpbnQgc3lzZnNfdG9wb2xvZ3lfcmVhZF9maWxlKHVuc2lnbmVkIGludCBjcHUsIGNvbnN0IGNoYXIgKmZuYW1lKQoreworCXVuc2lnbmVkIGxvbmcgdmFsdWU7CisJY2hhciBsaW5lYnVmW01BWF9MSU5FX0xFTl07CisJY2hhciAqZW5kcDsKKwljaGFyIHBhdGhbU1lTRlNfUEFUSF9NQVhdOworCisJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBQQVRIX1RPX0NQVSAiY3B1JXUvdG9wb2xvZ3kvJXMiLAorCQkJIGNwdSwgZm5hbWUpOworCWlmIChzeXNmc19yZWFkX2ZpbGUocGF0aCwgbGluZWJ1ZiwgTUFYX0xJTkVfTEVOKSA9PSAwKQorCQlyZXR1cm4gLTE7CisJdmFsdWUgPSBzdHJ0b3VsKGxpbmVidWYsICZlbmRwLCAwKTsKKwlpZiAoZW5kcCA9PSBsaW5lYnVmIHx8IGVycm5vID09IEVSQU5HRSkKKwkJcmV0dXJuIC0xOworCXJldHVybiB2YWx1ZTsKK30KKworc3RydWN0IGNwdWlkX2NvcmVfaW5mbyB7CisJdW5zaWduZWQgaW50IHBrZzsKKwl1bnNpZ25lZCBpbnQgdGhyZWFkOworCXVuc2lnbmVkIGludCBjcHU7Cit9OworCitzdGF0aWMgaW50IF9fY29tcGFyZShjb25zdCB2b2lkICp0MSwgY29uc3Qgdm9pZCAqdDIpCit7CisJc3RydWN0IGNwdWlkX2NvcmVfaW5mbyAqdG9wMSA9IChzdHJ1Y3QgY3B1aWRfY29yZV9pbmZvICopdDE7CisJc3RydWN0IGNwdWlkX2NvcmVfaW5mbyAqdG9wMiA9IChzdHJ1Y3QgY3B1aWRfY29yZV9pbmZvICopdDI7CisJaWYgKHRvcDEtPnBrZyA8IHRvcDItPnBrZykKKwkJcmV0dXJuIC0xOworCWVsc2UgaWYgKHRvcDEtPnBrZyA+IHRvcDItPnBrZykKKwkJcmV0dXJuIDE7CisJZWxzZSBpZiAodG9wMS0+dGhyZWFkIDwgdG9wMi0+dGhyZWFkKQorCQlyZXR1cm4gLTE7CisJZWxzZSBpZiAodG9wMS0+dGhyZWFkID4gdG9wMi0+dGhyZWFkKQorCQlyZXR1cm4gMTsKKwllbHNlIGlmICh0b3AxLT5jcHUgPCB0b3AyLT5jcHUpCisJCXJldHVybiAtMTsKKwllbHNlIGlmICh0b3AxLT5jcHUgPiB0b3AyLT5jcHUpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZXR1cm5zIGFtb3VudCBvZiBjcHVzLCBuZWdhdGl2ZSBvbiBlcnJvciwgY3B1X3RvcCBtdXN0IGJlCisgKiBwYXNzZWQgdG8gY3B1X3RvcG9sb2d5X3JlbGVhc2UgdG8gZnJlZSByZXNvdXJjZXMKKyAqCisgKiBBcnJheSBpcyBzb3J0ZWQgYWZ0ZXIgLT5wa2csIC0+Y29yZSwgdGhlbiAtPmNwdQorICovCitpbnQgZ2V0X2NwdV90b3BvbG9neShzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xvZ3kgKmNwdV90b3ApCit7CisJaW50IGNwdSwgY3B1cyA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX0NPTkYpOworCisJY3B1X3RvcC0+Y29yZV9pbmZvID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1cG93ZXJfdG9wb2xvZ3kpICogY3B1cyk7CisJaWYgKGNwdV90b3AtPmNvcmVfaW5mbyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwljcHVfdG9wLT5wa2dzID0gY3B1X3RvcC0+Y29yZXMgPSAwOworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1czsgY3B1KyspIHsKKwkJY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0ucGtnID0KKwkJCXN5c2ZzX3RvcG9sb2d5X3JlYWRfZmlsZShjcHUsICJwaHlzaWNhbF9wYWNrYWdlX2lkIik7CisJCWlmICgoaW50KWNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLnBrZyAhPSAtMSAmJgorCQkgICAgY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0ucGtnID4gY3B1X3RvcC0+cGtncykKKwkJCWNwdV90b3AtPnBrZ3MgPSBjcHVfdG9wLT5jb3JlX2luZm9bY3B1XS5wa2c7CisJCWNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLmNvcmUgPQorCQkJc3lzZnNfdG9wb2xvZ3lfcmVhZF9maWxlKGNwdSwgImNvcmVfaWQiKTsKKwkJY3B1X3RvcC0+Y29yZV9pbmZvW2NwdV0uY3B1ID0gY3B1OworCX0KKwljcHVfdG9wLT5wa2dzKys7CisKKwlxc29ydChjcHVfdG9wLT5jb3JlX2luZm8sIGNwdXMsIHNpemVvZihzdHJ1Y3QgY3B1aWRfY29yZV9pbmZvKSwKKwkgICAgICBfX2NvbXBhcmUpOworCisJLyogSW50ZWwncyBjb3JlcyBjb3VudCBpcyBub3QgY29uc2VjdXRpdmVseSBudW1iZXJlZCwgdGhlcmUgbWF5CisJICogYmUgYSBjb3JlX2lkIG9mIDMsIGJ1dCBub25lIG9mIDIuIEFzc3VtZSB0aGVyZSBhbHdheXMgaXMgMAorCSAqIEdldCBhbW91bnQgb2YgY29yZXMgYnkgY291bnRpbmcgZHVwbGljYXRlcyBpbiBhIHBhY2thZ2UKKwlmb3IgKGNwdSA9IDA7IGNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLnBrZyA9IDAgJiYgY3B1IDwgY3B1czsgY3B1KyspIHsKKwkJaWYgKGNwdV90b3AtPmNvcmVfaW5mb1tjcHVdLmNvcmUgPT0gMCkKKwljcHVfdG9wLT5jb3JlcysrOworCSovCisJcmV0dXJuIGNwdXM7Cit9CisKK3ZvaWQgY3B1X3RvcG9sb2d5X3JlbGVhc2Uoc3RydWN0IGNwdXBvd2VyX3RvcG9sb2d5IGNwdV90b3ApCit7CisJZnJlZShjcHVfdG9wLmNvcmVfaW5mbyk7Cit9CmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvYW1kX2ZhbTE0aF9pZGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAyZTU1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9hbWRfZmFtMTRoX2lkbGUuYwpAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiAgUENJIGluaXRpYWxpemF0aW9uIGJhc2VkIG9uIGV4YW1wbGUgY29kZSBmcm9tOgorICogIEFuZHJlYXMgSGVycm1hbm4gPGFuZHJlYXMuaGVycm1hbm4zQGFtZC5jb20+CisgKi8KKworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8cGNpL3BjaS5oPgorCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworLyoqKioqKioqIFBDSSBwYXJ0cyBjb3VsZCBnbyBpbnRvIG93biBmaWxlIGFuZCBnZXQgc2hhcmVkICoqKioqKioqKioqKioqKi8KKworI2RlZmluZSBQQ0lfTk9OX1BDMF9PRkZTRVQJMHhiMAorI2RlZmluZSBQQ0lfUEMxX09GRlNFVAkJMHhiNAorI2RlZmluZSBQQ0lfUEM2X09GRlNFVAkJMHhiOAorCisjZGVmaW5lIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcgIDB4ZTAKKworI2RlZmluZSBQQ0lfTk9OX1BDMF9FTkFCTEVfQklUCTAKKyNkZWZpbmUgUENJX1BDMV9FTkFCTEVfQklUCTEKKyNkZWZpbmUgUENJX1BDNl9FTkFCTEVfQklUCTIKKworI2RlZmluZSBQQ0lfTkJQMV9TVEFUX09GRlNFVAkweDk4CisjZGVmaW5lIFBDSV9OQlAxX0FDVElWRV9CSVQJMgorI2RlZmluZSBQQ0lfTkJQMV9FTlRFUkVEX0JJVAkxCisKKyNkZWZpbmUgUENJX05CUDFfQ0FQX09GRlNFVAkweDkwCisjZGVmaW5lIFBDSV9OQlAxX0NBUEFCTEVfQklUICAgIDMxCisKKyNkZWZpbmUgT1ZFUkZMT1dfTVMJCTM0MzU5NyAvKiAzMiBiaXQgcmVnaXN0ZXIgZmlsbGVkIGF0IDEyNTAwIEhaCisJCQkJCSAgKDEgdGljayBwZXIgODBucykgKi8KKworZW51bSBhbWRfZmFtMTRoX3N0YXRlcyB7Tk9OX1BDMCA9IDAsIFBDMSwgUEM2LCBOQlAxLAorCQkJQU1EX0ZBTTE0SF9TVEFURV9OVU19OworCitzdGF0aWMgaW50IGZhbTE0aF9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgc2VsZl9pZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSAgICB1bnNpZ25lZCBpbnQgY3B1KTsKK3N0YXRpYyBpbnQgZmFtMTRoX25icDFfY291bnQodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBsb25nIGxvbmcgKmNvdW50LAorCQkJICAgICB1bnNpZ25lZCBpbnQgY3B1KTsKKworc3RhdGljIGNzdGF0ZV90IGFtZF9mYW0xNGhfY3N0YXRlc1tBTURfRkFNMTRIX1NUQVRFX05VTV0gPSB7CisJeworCQkubmFtZQkJCT0gIiFQQzAiLAorCQkuZGVzYwkJCT0gTl8oIlBhY2thZ2UgaW4gc2xlZXAgc3RhdGUgKFBDMSBvciBkZWVwZXIpIiksCisJCS5pZAkJCT0gTk9OX1BDMCwKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBmYW0xNGhfZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiUEMxIiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgUGFja2FnZSBDMSIpLAorCQkuaWQJCQk9IFBDMSwKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBmYW0xNGhfZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiUEM2IiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgUGFja2FnZSBDNiIpLAorCQkuaWQJCQk9IFBDNiwKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBmYW0xNGhfZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiTkJQMSIsCisJCS5kZXNjCQkJPSBOXygiTm9ydGggQnJpZGdlIFAxIGJvb2xlYW4gY291bnRlciAocmV0dXJucyAwIG9yIDEpIiksCisJCS5pZAkJCT0gTkJQMSwKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50CQk9IGZhbTE0aF9uYnAxX2NvdW50LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9hY2Nlc3MgKnBjaV9hY2M7CitzdGF0aWMgaW50IHBjaV92ZW5kb3JfaWQgPSAweDEwMjI7CitzdGF0aWMgaW50IHBjaV9kZXZfaWRzWzJdID0gezB4MTcxNiwgMH07CitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmFtZF9mYW0xNGhfcGNpX2RldjsKKworc3RhdGljIGludCBuYnAxX2VudGVyZWQ7CisKK3N0cnVjdCB0aW1lc3BlYyBzdGFydF90aW1lOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lZGlmZjsKKworI2lmZGVmIERFQlVHCitzdHJ1Y3QgdGltZXNwZWMgZGJnX3RpbWU7Citsb25nIGRiZ190aW1lZGlmZjsKKyNlbmRpZgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICpwcmV2aW91c19jb3VudFtBTURfRkFNMTRIX1NUQVRFX05VTV07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICpjdXJyZW50X2NvdW50W0FNRF9GQU0xNEhfU1RBVEVfTlVNXTsKKworc3RhdGljIGludCBhbWRfZmFtMTRoX2dldF9wY2lfaW5mbyhzdHJ1Y3QgY3N0YXRlICpzdGF0ZSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKnBjaV9vZmZzZXQsCisJCQkJICAgdW5zaWduZWQgaW50ICplbmFibGVfYml0LAorCQkJCSAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJc3dpdGNoIChzdGF0ZS0+aWQpIHsKKwljYXNlIE5PTl9QQzA6CisJCSplbmFibGVfYml0ID0gUENJX05PTl9QQzBfRU5BQkxFX0JJVDsKKwkJKnBjaV9vZmZzZXQgPSBQQ0lfTk9OX1BDMF9PRkZTRVQ7CisJCWJyZWFrOworCWNhc2UgUEMxOgorCQkqZW5hYmxlX2JpdCA9IFBDSV9QQzFfRU5BQkxFX0JJVDsKKwkJKnBjaV9vZmZzZXQgPSBQQ0lfUEMxX09GRlNFVDsKKwkJYnJlYWs7CisJY2FzZSBQQzY6CisJCSplbmFibGVfYml0ID0gUENJX1BDNl9FTkFCTEVfQklUOworCQkqcGNpX29mZnNldCA9IFBDSV9QQzZfT0ZGU0VUOworCQlicmVhazsKKwljYXNlIE5CUDE6CisJCSplbmFibGVfYml0ID0gUENJX05CUDFfRU5URVJFRF9CSVQ7CisJCSpwY2lfb2Zmc2V0ID0gUENJX05CUDFfU1RBVF9PRkZTRVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtZF9mYW0xNGhfaW5pdChjc3RhdGVfdCAqc3RhdGUsIHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IGVuYWJsZV9iaXQsIHBjaV9vZmZzZXQsIHJldDsKKwl1aW50MzJfdCB2YWw7CisKKwlyZXQgPSBhbWRfZmFtMTRoX2dldF9wY2lfaW5mbyhzdGF0ZSwgJnBjaV9vZmZzZXQsICZlbmFibGVfYml0LCBjcHUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBOQlAxIG5lZWRzIGV4dHJhIHRyZWF0aW5nIC0+IHdyaXRlIDEgdG8gRDE4RjZ4OTggYml0IDEgZm9yIGluaXQgKi8KKwlpZiAoc3RhdGUtPmlkID09IE5CUDEpIHsKKwkJdmFsID0gcGNpX3JlYWRfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIHBjaV9vZmZzZXQpOworCQl2YWwgfD0gMSA8PCBlbmFibGVfYml0OworCQl2YWwgPSBwY2lfd3JpdGVfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIHBjaV9vZmZzZXQsIHZhbCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogRW5hYmxlIG1vbml0b3IgKi8KKwl2YWwgPSBwY2lfcmVhZF9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgUENJX01PTklUT1JfRU5BQkxFX1JFRyk7CisJZHByaW50KCJJbml0ICVzOiByZWFkIGF0IG9mZnNldDogMHgleCB2YWw6ICV1XG4iLCBzdGF0ZS0+bmFtZSwKKwkgICAgICAgUENJX01PTklUT1JfRU5BQkxFX1JFRywgKHVuc2lnbmVkIGludCkgdmFsKTsKKwl2YWwgfD0gMSA8PCBlbmFibGVfYml0OworCXBjaV93cml0ZV9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgUENJX01PTklUT1JfRU5BQkxFX1JFRywgdmFsKTsKKworCWRwcmludCgiSW5pdCAlczogb2Zmc2V0OiAweCV4IGVuYWJsZV9iaXQ6ICVkIC0gdmFsOiAldSAoJXUpXG4iLAorCSAgICAgICBzdGF0ZS0+bmFtZSwgUENJX01PTklUT1JfRU5BQkxFX1JFRywgZW5hYmxlX2JpdCwKKwkgICAgICAgKHVuc2lnbmVkIGludCkgdmFsLCBjcHUpOworCisJLyogU2V0IGNvdW50ZXIgdG8gemVybyAqLworCXBjaV93cml0ZV9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgcGNpX29mZnNldCwgMCk7CisJcHJldmlvdXNfY291bnRbc3RhdGUtPmlkXVtjcHVdID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtZF9mYW0xNGhfZGlzYWJsZShjc3RhdGVfdCAqc3RhdGUsIHVuc2lnbmVkIGludCBjcHUpCit7CisJaW50IGVuYWJsZV9iaXQsIHBjaV9vZmZzZXQsIHJldDsKKwl1aW50MzJfdCB2YWw7CisKKwlyZXQgPSBhbWRfZmFtMTRoX2dldF9wY2lfaW5mbyhzdGF0ZSwgJnBjaV9vZmZzZXQsICZlbmFibGVfYml0LCBjcHUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwl2YWwgPSBwY2lfcmVhZF9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgcGNpX29mZnNldCk7CisJZHByaW50KCIlczogb2Zmc2V0OiAweCV4ICV1XG4iLCBzdGF0ZS0+bmFtZSwgcGNpX29mZnNldCwgdmFsKTsKKwlpZiAoc3RhdGUtPmlkID09IE5CUDEpIHsKKwkJLyogd2FzIHRoZSBiaXQgd2hldGhlciBOQlAxIGdvdCBlbnRlcmVkIHNldD8gKi8KKwkJbmJwMV9lbnRlcmVkID0gKHZhbCAmICgxIDw8IFBDSV9OQlAxX0FDVElWRV9CSVQpKSB8CisJCQkodmFsICYgKDEgPDwgUENJX05CUDFfRU5URVJFRF9CSVQpKTsKKworCQlkcHJpbnQoIk5CUDEgd2FzICVzZW50ZXJlZCAtIDB4JXggLSBlbmFibGVfYml0OiAiCisJCSAgICAgICAiJWQgLSBwY2lfb2Zmc2V0OiAweCV4XG4iLAorCQkgICAgICAgbmJwMV9lbnRlcmVkID8gIiIgOiAibm90ICIsCisJCSAgICAgICB2YWwsIGVuYWJsZV9iaXQsIHBjaV9vZmZzZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwljdXJyZW50X2NvdW50W3N0YXRlLT5pZF1bY3B1XSA9IHZhbDsKKworCWRwcmludCgiJXM6IEN1cnJlbnQgLSAgJWxsdSAoJXUpXG4iLCBzdGF0ZS0+bmFtZSwKKwkgICAgICAgY3VycmVudF9jb3VudFtzdGF0ZS0+aWRdW2NwdV0sIGNwdSk7CisJZHByaW50KCIlczogUHJldmlvdXMgLSAlbGx1ICgldSlcbiIsIHN0YXRlLT5uYW1lLAorCSAgICAgICBwcmV2aW91c19jb3VudFtzdGF0ZS0+aWRdW2NwdV0sIGNwdSk7CisKKwl2YWwgPSBwY2lfcmVhZF9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgUENJX01PTklUT1JfRU5BQkxFX1JFRyk7CisJdmFsICY9IH4oMSA8PCBlbmFibGVfYml0KTsKKwlwY2lfd3JpdGVfbG9uZyhhbWRfZmFtMTRoX3BjaV9kZXYsIFBDSV9NT05JVE9SX0VOQUJMRV9SRUcsIHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmYW0xNGhfbmJwMV9jb3VudCh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqY291bnQsCisJCQkgICAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJaWYgKGlkID09IE5CUDEpIHsKKwkJaWYgKG5icDFfZW50ZXJlZCkKKwkJCSpjb3VudCA9IDE7CisJCWVsc2UKKwkJCSpjb3VudCA9IDA7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW50IGZhbTE0aF9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgICAgdW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGRpZmY7CisKKwlpZiAoaWQgPj0gQU1EX0ZBTTE0SF9TVEFURV9OVU0pCisJCXJldHVybiAtMTsKKwkvKiByZXNpZGVuY3kgY291bnQgaW4gODBucyAtPiBkaXZpZGUgdGhyb3VnaCAxMi41IHRvIGdldCB1cyByZXNpZGVuY3kgKi8KKwlkaWZmID0gY3VycmVudF9jb3VudFtpZF1bY3B1XSAtIHByZXZpb3VzX2NvdW50W2lkXVtjcHVdOworCisJaWYgKHRpbWVkaWZmID09IDApCisJCSpwZXJjZW50ID0gMC4wOworCWVsc2UKKwkJKnBlcmNlbnQgPSAxMDAuMCAqIGRpZmYgLyB0aW1lZGlmZiAvIDEyLjU7CisKKwlkcHJpbnQoIlRpbWVkaWZmOiAlbGx1IC0gcmVzfjogJWx1IHVzIC0gcGVyY2VudDogJS4yZiAlJVxuIiwKKwkgICAgICAgdGltZWRpZmYsIGRpZmYgKiAxMCAvIDEyNSwgKnBlcmNlbnQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW1kX2ZhbTE0aF9zdGFydCh2b2lkKQoreworCWludCBudW0sIGNwdTsKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmc3RhcnRfdGltZSk7CisJZm9yIChudW0gPSAwOyBudW0gPCBBTURfRkFNMTRIX1NUQVRFX05VTTsgbnVtKyspIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKQorCQkJYW1kX2ZhbTE0aF9pbml0KCZhbWRfZmFtMTRoX2NzdGF0ZXNbbnVtXSwgY3B1KTsKKwl9CisjaWZkZWYgREVCVUcKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmZGJnX3RpbWUpOworCWRiZ190aW1lZGlmZiA9IHRpbWVzcGVjX2RpZmZfdXMoc3RhcnRfdGltZSwgZGJnX3RpbWUpOworCWRwcmludCgiRW5hYmxpbmcgY291bnRlcnMgdG9vazogJWx1IHVzXG4iLAorCSAgICAgICBkYmdfdGltZWRpZmYpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYW1kX2ZhbTE0aF9zdG9wKHZvaWQpCit7CisJaW50IG51bSwgY3B1OworCXN0cnVjdCB0aW1lc3BlYyBlbmRfdGltZTsKKworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZlbmRfdGltZSk7CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IEFNRF9GQU0xNEhfU1RBVEVfTlVNOyBudW0rKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspCisJCQlhbWRfZmFtMTRoX2Rpc2FibGUoJmFtZF9mYW0xNGhfY3N0YXRlc1tudW1dLCBjcHUpOworCX0KKyNpZmRlZiBERUJVRworCWNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZkYmdfdGltZSk7CisJZGJnX3RpbWVkaWZmID0gdGltZXNwZWNfZGlmZl91cyhlbmRfdGltZSwgZGJnX3RpbWUpOworCWRwcmludCgiRGlzYWJsaW5nIGNvdW50ZXJzIHRvb2s6ICVsdSBuc1xuIiwgZGJnX3RpbWVkaWZmKTsKKyNlbmRpZgorCXRpbWVkaWZmID0gdGltZXNwZWNfZGlmZl91cyhzdGFydF90aW1lLCBlbmRfdGltZSk7CisJaWYgKHRpbWVkaWZmIC8gMTAwMCA+IE9WRVJGTE9XX01TKQorCQlwcmludF9vdmVyZmxvd19lcnIoKHVuc2lnbmVkIGludCl0aW1lZGlmZiAvIDEwMDAwMDAsCisJCQkJICAgT1ZFUkZMT1dfTVMgLyAxMDAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlzX25icDFfY2FwYWJsZSh2b2lkKQoreworCXVpbnQzMl90IHZhbDsKKwl2YWwgPSBwY2lfcmVhZF9sb25nKGFtZF9mYW0xNGhfcGNpX2RldiwgUENJX05CUDFfQ0FQX09GRlNFVCk7CisJcmV0dXJuIHZhbCAmICgxIDw8IDMxKTsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciAqYW1kX2ZhbTE0aF9yZWdpc3Rlcih2b2lkKQoreworCWludCBudW07CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8udmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChjcHVwb3dlcl9jcHVfaW5mby5mYW1pbHkgPT0gMHgxNCkgeworCQlpZiAoY3B1X2NvdW50IDw9IDAgfHwgY3B1X2NvdW50ID4gMikgeworCQkJZnByaW50ZihzdGRlcnIsICJBTUQgZmFtMTRoOiBJbnZhbGlkIGNwdSBjb3VudDogJWRcbiIsCisJCQkJY3B1X2NvdW50KTsKKwkJCXJldHVybiBOVUxMOworCQl9CisJfSBlbHNlCisJCXJldHVybiBOVUxMOworCisJLyogV2UgZG8gbm90IGFsbG9jIGZvciBuYnAxIG1hY2hpbmUgd2lkZSBjb3VudGVyICovCisJZm9yIChudW0gPSAwOyBudW0gPCBBTURfRkFNMTRIX1NUQVRFX05VTSAtIDE7IG51bSsrKSB7CisJCXByZXZpb3VzX2NvdW50W251bV0gPSBjYWxsb2MoY3B1X2NvdW50LAorCQkJCQkgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJCWN1cnJlbnRfY291bnRbbnVtXSAgPSBjYWxsb2MoY3B1X2NvdW50LAorCQkJCQkgICAgICBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJfQorCisJYW1kX2ZhbTE0aF9wY2lfZGV2ID0gcGNpX2FjY19pbml0KCZwY2lfYWNjLCBwY2lfdmVuZG9yX2lkLCBwY2lfZGV2X2lkcyk7CisJaWYgKGFtZF9mYW0xNGhfcGNpX2RldiA9PSBOVUxMIHx8IHBjaV9hY2MgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoIWlzX25icDFfY2FwYWJsZSgpKQorCQlhbWRfZmFtMTRoX21vbml0b3IuaHdfc3RhdGVzX251bSA9IEFNRF9GQU0xNEhfU1RBVEVfTlVNIC0gMTsKKworCWFtZF9mYW0xNGhfbW9uaXRvci5uYW1lX2xlbiA9IHN0cmxlbihhbWRfZmFtMTRoX21vbml0b3IubmFtZSk7CisJcmV0dXJuICZhbWRfZmFtMTRoX21vbml0b3I7Cit9CisKK3N0YXRpYyB2b2lkIGFtZF9mYW0xNGhfdW5yZWdpc3Rlcih2b2lkKQoreworCWludCBudW07CisJZm9yIChudW0gPSAwOyBudW0gPCBBTURfRkFNMTRIX1NUQVRFX05VTSAtIDE7IG51bSsrKSB7CisJCWZyZWUocHJldmlvdXNfY291bnRbbnVtXSk7CisJCWZyZWUoY3VycmVudF9jb3VudFtudW1dKTsKKwl9CisJcGNpX2NsZWFudXAocGNpX2FjYyk7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgYW1kX2ZhbTE0aF9tb25pdG9yID0geworCS5uYW1lCQkJPSAiT250YXJpbyIsCisJLmh3X3N0YXRlcwkJPSBhbWRfZmFtMTRoX2NzdGF0ZXMsCisJLmh3X3N0YXRlc19udW0JCT0gQU1EX0ZBTTE0SF9TVEFURV9OVU0sCisJLnN0YXJ0CQkJPSBhbWRfZmFtMTRoX3N0YXJ0LAorCS5zdG9wCQkJPSBhbWRfZmFtMTRoX3N0b3AsCisJLmRvX3JlZ2lzdGVyCQk9IGFtZF9mYW0xNGhfcmVnaXN0ZXIsCisJLnVucmVnaXN0ZXIJCT0gYW1kX2ZhbTE0aF91bnJlZ2lzdGVyLAorCS5uZWVkc19yb290CQk9IDEsCisJLm92ZXJmbG93X3MJCT0gT1ZFUkZMT1dfTVMgLyAxMDAwLAorfTsKKyNlbmRpZiAvKiAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL2NwdWlkbGVfc3lzZnMuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVpZGxlX3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA0OGI5NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVpZGxlX3N5c2ZzLmMKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYworICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisjaW5jbHVkZSAiaGVscGVycy9zeXNmcy5oIgorI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImlkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgiCisKKyNkZWZpbmUgQ1BVSURMRV9TVEFURVNfTUFYIDEwCitzdGF0aWMgY3N0YXRlX3QgY3B1aWRsZV9jc3RhdGVzW0NQVUlETEVfU1RBVEVTX01BWF07CitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGNwdWlkbGVfc3lzZnNfbW9uaXRvcjsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqKnByZXZpb3VzX2NvdW50Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqKmN1cnJlbnRfY291bnQ7CitzdHJ1Y3QgdGltZXNwZWMgc3RhcnRfdGltZTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdGltZWRpZmY7CisKK3N0YXRpYyBpbnQgY3B1aWRsZV9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIHN0YXRlZGlmZiA9IGN1cnJlbnRfY291bnRbY3B1XVtpZF0KKwkJLSBwcmV2aW91c19jb3VudFtjcHVdW2lkXTsKKwlkcHJpbnQoIiVzOiAtIGRpZmY6ICVsbHUgLSBwZXJjZW50OiAlZiAoJXUpXG4iLAorCSAgICAgICBjcHVpZGxlX2NzdGF0ZXNbaWRdLm5hbWUsIHRpbWVkaWZmLCAqcGVyY2VudCwgY3B1KTsKKworCWlmICh0aW1lZGlmZiA9PSAwKQorCQkqcGVyY2VudCA9IDAuMDsKKwllbHNlCisJCSpwZXJjZW50ID0gKCgxMDAuMCAqIHN0YXRlZGlmZikgLyB0aW1lZGlmZik7CisKKwlkcHJpbnQoIiVzOiAtIHRpbWVkaWZmOiAlbGx1IC0gc3RhdGVkaWZmOiAlbGx1IC0gcGVyY2VudDogJWYgKCV1KVxuIiwKKwkgICAgICAgY3B1aWRsZV9jc3RhdGVzW2lkXS5uYW1lLCB0aW1lZGlmZiwgc3RhdGVkaWZmLCAqcGVyY2VudCwgY3B1KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNwdWlkbGVfc3RhcnQodm9pZCkKK3sKKwlpbnQgY3B1LCBzdGF0ZTsKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmc3RhcnRfdGltZSk7CisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCWZvciAoc3RhdGUgPSAwOyBzdGF0ZSA8IGNwdWlkbGVfc3lzZnNfbW9uaXRvci5od19zdGF0ZXNfbnVtOworCQkgICAgIHN0YXRlKyspIHsKKwkJCXByZXZpb3VzX2NvdW50W2NwdV1bc3RhdGVdID0KKwkJCQlzeXNmc19nZXRfaWRsZXN0YXRlX3RpbWUoY3B1LCBzdGF0ZSk7CisJCQlkcHJpbnQoIkNQVSAlZCAtIFN0YXRlOiAlZCAtIFZhbDogJWxsdVxuIiwKKwkJCSAgICAgICBjcHUsIHN0YXRlLCBwcmV2aW91c19jb3VudFtjcHVdW3N0YXRlXSk7CisJCX0KKwl9OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNwdWlkbGVfc3RvcCh2b2lkKQoreworCWludCBjcHUsIHN0YXRlOworCXN0cnVjdCB0aW1lc3BlYyBlbmRfdGltZTsKKwljbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmZW5kX3RpbWUpOworCXRpbWVkaWZmID0gdGltZXNwZWNfZGlmZl91cyhzdGFydF90aW1lLCBlbmRfdGltZSk7CisKKwlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJZm9yIChzdGF0ZSA9IDA7IHN0YXRlIDwgY3B1aWRsZV9zeXNmc19tb25pdG9yLmh3X3N0YXRlc19udW07CisJCSAgICAgc3RhdGUrKykgeworCQkJY3VycmVudF9jb3VudFtjcHVdW3N0YXRlXSA9CisJCQkJc3lzZnNfZ2V0X2lkbGVzdGF0ZV90aW1lKGNwdSwgc3RhdGUpOworCQkJZHByaW50KCJDUFUgJWQgLSBTdGF0ZTogJWQgLSBWYWw6ICVsbHVcbiIsCisJCQkgICAgICAgY3B1LCBzdGF0ZSwgcHJldmlvdXNfY291bnRbY3B1XVtzdGF0ZV0pOworCQl9CisJfTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBmaXhfdXBfaW50ZWxfaWRsZV9kcml2ZXJfbmFtZShjaGFyICp0bXAsIGludCBudW0pCit7CisJLyogZml4IHVwIGNwdWlkbGUgbmFtZSBmb3IgaW50ZWwgaWRsZSBkcml2ZXIgKi8KKwlpZiAoIXN0cm5jbXAodG1wLCAiTkhNLSIsIDQpKSB7CisJCXN3aXRjaCAobnVtKSB7CisJCWNhc2UgMToKKwkJCXN0cmNweSh0bXAsICJDMSIpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXN0cmNweSh0bXAsICJDMyIpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXN0cmNweSh0bXAsICJDNiIpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgaWYgKCFzdHJuY21wKHRtcCwgIlNOQi0iLCA0KSkgeworCQlzd2l0Y2ggKG51bSkgeworCQljYXNlIDE6CisJCQlzdHJjcHkodG1wLCAiQzEiKTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlzdHJjcHkodG1wLCAiQzMiKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlzdHJjcHkodG1wLCAiQzYiKTsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlzdHJjcHkodG1wLCAiQzciKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmICghc3RybmNtcCh0bXAsICJBVE0tIiwgNCkpIHsKKwkJc3dpdGNoIChudW0pIHsKKwkJY2FzZSAxOgorCQkJc3RyY3B5KHRtcCwgIkMxIik7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJc3RyY3B5KHRtcCwgIkMyIik7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJc3RyY3B5KHRtcCwgIkM0Iik7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJc3RyY3B5KHRtcCwgIkM2Iik7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCBjcHVpZGxlX21vbml0b3IgKmNwdWlkbGVfcmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgbnVtOworCWNoYXIgKnRtcDsKKworCS8qIEFzc3VtZSBpZGxlIHN0YXRlIGNvdW50IGlzIHRoZSBzYW1lIGZvciBhbGwgQ1BVcyAqLworCWNwdWlkbGVfc3lzZnNfbW9uaXRvci5od19zdGF0ZXNfbnVtID0gc3lzZnNfZ2V0X2lkbGVzdGF0ZV9jb3VudCgwKTsKKworCWlmIChjcHVpZGxlX3N5c2ZzX21vbml0b3IuaHdfc3RhdGVzX251bSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAobnVtID0gMDsgbnVtIDwgY3B1aWRsZV9zeXNmc19tb25pdG9yLmh3X3N0YXRlc19udW07IG51bSsrKSB7CisJCXRtcCA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfbmFtZSgwLCBudW0pOworCQlpZiAodG1wID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlmaXhfdXBfaW50ZWxfaWRsZV9kcml2ZXJfbmFtZSh0bXAsIG51bSk7CisJCXN0cm5jcHkoY3B1aWRsZV9jc3RhdGVzW251bV0ubmFtZSwgdG1wLCBDU1RBVEVfTkFNRV9MRU4gLSAxKTsKKwkJZnJlZSh0bXApOworCisJCXRtcCA9IHN5c2ZzX2dldF9pZGxlc3RhdGVfZGVzYygwLCBudW0pOworCQlpZiAodG1wID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJc3RybmNweShjcHVpZGxlX2NzdGF0ZXNbbnVtXS5kZXNjLCB0bXAsCUNTVEFURV9ERVNDX0xFTiAtIDEpOworCQlmcmVlKHRtcCk7CisKKwkJY3B1aWRsZV9jc3RhdGVzW251bV0ucmFuZ2UgPSBSQU5HRV9USFJFQUQ7CisJCWNwdWlkbGVfY3N0YXRlc1tudW1dLmlkID0gbnVtOworCQljcHVpZGxlX2NzdGF0ZXNbbnVtXS5nZXRfY291bnRfcGVyY2VudCA9CisJCQljcHVpZGxlX2dldF9jb3VudF9wZXJjZW50OworCX07CisKKwkvKiBGcmVlIHRoaXMgYXQgcHJvZ3JhbSB0ZXJtaW5hdGlvbiAqLworCXByZXZpb3VzX2NvdW50ID0gbWFsbG9jKHNpemVvZihsb25nIGxvbmcgKikgKiBjcHVfY291bnQpOworCWN1cnJlbnRfY291bnQgPSBtYWxsb2Moc2l6ZW9mKGxvbmcgbG9uZyAqKSAqIGNwdV9jb3VudCk7CisJZm9yIChudW0gPSAwOyBudW0gPCBjcHVfY291bnQ7IG51bSsrKSB7CisJCXByZXZpb3VzX2NvdW50W251bV0gPSBtYWxsb2Moc2l6ZW9mKGxvbmcgbG9uZykgKgorCQkJCQljcHVpZGxlX3N5c2ZzX21vbml0b3IuaHdfc3RhdGVzX251bSk7CisJCWN1cnJlbnRfY291bnRbbnVtXSA9IG1hbGxvYyhzaXplb2YobG9uZyBsb25nKSAqCisJCQkJCWNwdWlkbGVfc3lzZnNfbW9uaXRvci5od19zdGF0ZXNfbnVtKTsKKwl9CisKKwljcHVpZGxlX3N5c2ZzX21vbml0b3IubmFtZV9sZW4gPSBzdHJsZW4oY3B1aWRsZV9zeXNmc19tb25pdG9yLm5hbWUpOworCXJldHVybiAmY3B1aWRsZV9zeXNmc19tb25pdG9yOworfQorCit2b2lkIGNwdWlkbGVfdW5yZWdpc3Rlcih2b2lkKQoreworCWludCBudW07CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IGNwdV9jb3VudDsgbnVtKyspIHsKKwkJZnJlZShwcmV2aW91c19jb3VudFtudW1dKTsKKwkJZnJlZShjdXJyZW50X2NvdW50W251bV0pOworCX0KKwlmcmVlKHByZXZpb3VzX2NvdW50KTsKKwlmcmVlKGN1cnJlbnRfY291bnQpOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGNwdWlkbGVfc3lzZnNfbW9uaXRvciA9IHsKKwkubmFtZQkJCT0gIklkbGVfU3RhdHMiLAorCS5od19zdGF0ZXMJCT0gY3B1aWRsZV9jc3RhdGVzLAorCS5zdGFydAkJCT0gY3B1aWRsZV9zdGFydCwKKwkuc3RvcAkJCT0gY3B1aWRsZV9zdG9wLAorCS5kb19yZWdpc3RlcgkJPSBjcHVpZGxlX3JlZ2lzdGVyLAorCS51bnJlZ2lzdGVyCQk9IGNwdWlkbGVfdW5yZWdpc3RlciwKKwkubmVlZHNfcm9vdAkJPSAwLAorCS5vdmVyZmxvd19zCQk9IFVJTlRfTUFYLAorfTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNGJmMDYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5jCkBAIC0wLDAgKzEsNDQ4IEBACisvKgorICogIChDKSAyMDEwLDIwMTEgICAgICAgVGhvbWFzIFJlbm5pbmdlciA8dHJlbm5Ac3VzZS5kZT4sIE5vdmVsbCBJbmMuCisgKgorICogIExpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCBMaWNlbnNlIHZlcnNpb24gMi4KKyAqCisgKiAgT3V0cHV0IGZvcm1hdCBpbnNwaXJlZCBieSBMZW4gQnJvd24ncyA8bGVuYkBrZXJuZWwub3JnPiB0dXJib3N0YXQgdG9vbC4KKyAqCisgKi8KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxsaWJnZW4uaD4KKworI2luY2x1ZGUgImlkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgiCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuaCIKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKworLyogRGVmaW5lIHBvaW50ZXJzIHRvIGFsbCBtb25pdG9ycy4gICovCisjZGVmaW5lIERFRih4KSAmIHggIyMgX21vbml0b3IgLAorc3RydWN0IGNwdWlkbGVfbW9uaXRvciAqYWxsX21vbml0b3JzW10gPSB7CisjaW5jbHVkZSAiaWRsZV9tb25pdG9ycy5kZWYiCiswCit9OworCitzdGF0aWMgc3RydWN0IGNwdWlkbGVfbW9uaXRvciAqbW9uaXRvcnNbTU9OSVRPUlNfTUFYXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXZhaWxfbW9uaXRvcnM7CisKK3N0YXRpYyBjaGFyICpwcm9nbmFtZTsKKworZW51bSBvcGVyYXRpb25fbW9kZV9lIHsgbGlzdCA9IDEsIHNob3csIHNob3dfYWxsIH07CitzdGF0aWMgaW50IG1vZGU7CitzdGF0aWMgaW50IGludGVydmFsID0gMTsKK3N0YXRpYyBjaGFyICpzaG93X21vbml0b3JzX3BhcmFtOworc3RhdGljIHN0cnVjdCBjcHVwb3dlcl90b3BvbG9neSBjcHVfdG9wOworCisvKiBUb0RvOiBEb2N1bWVudCB0aGlzIGluIHRoZSBtYW5wYWdlICovCitzdGF0aWMgY2hhciByYW5nZV9hYmJyW1JBTkdFX01BWF0gPSB7ICdUJywgJ0MnLCAnUCcsICdNJywgfTsKKworbG9uZyBsb25nIHRpbWVzcGVjX2RpZmZfdXMoc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBzdHJ1Y3QgdGltZXNwZWMgZW5kKQoreworCXN0cnVjdCB0aW1lc3BlYyB0ZW1wOworCWlmICgoZW5kLnR2X25zZWMgLSBzdGFydC50dl9uc2VjKSA8IDApIHsKKwkJdGVtcC50dl9zZWMgPSBlbmQudHZfc2VjIC0gc3RhcnQudHZfc2VjIC0gMTsKKwkJdGVtcC50dl9uc2VjID0gMTAwMDAwMDAwMCArIGVuZC50dl9uc2VjIC0gc3RhcnQudHZfbnNlYzsKKwl9IGVsc2UgeworCQl0ZW1wLnR2X3NlYyA9IGVuZC50dl9zZWMgLSBzdGFydC50dl9zZWM7CisJCXRlbXAudHZfbnNlYyA9IGVuZC50dl9uc2VjIC0gc3RhcnQudHZfbnNlYzsKKwl9CisJcmV0dXJuICh0ZW1wLnR2X3NlYyAqIDEwMDAwMDApICsgKHRlbXAudHZfbnNlYyAvIDEwMDApOworfQorCit2b2lkIG1vbml0b3JfaGVscCh2b2lkKQoreworCXByaW50ZihfKCJjcHVwb3dlciBtb25pdG9yOiBbLW0gPG1vbjE+LFs8bW9uMj5dLC4uIF0gY29tbWFuZFxuIikpOworCXByaW50ZihfKCJjcHVwb3dlciBtb25pdG9yOiBbLW0gPG1vbjE+LFs8bW9uMj5dLC4uIF0gWyAtaSBpbnRlcnZhbF9zZWMgXVxuIikpOworCXByaW50ZihfKCJjcHVwb3dlciBtb25pdG9yOiAtbFxuIikpOworCXByaW50ZihfKCJcdCBjb21tYW5kOiBwYXNzIGFuIGFyYml0cmFyeSBjb21tYW5kIHRvIG1lYXN1cmUgc3BlY2lmaWMgd29ya2xvYWRcbiIpKTsKKwlwcmludGYoXygiXHQgLWk6IHRpbWUgaW50ZXJ2YWxsIHRvIG1lYXN1cmUgZm9yIGluIHNlY29uZHMgKGRlZmF1bHQgMSlcbiIpKTsKKwlwcmludGYoXygiXHQgLWw6IGxpc3QgYXZhaWxhYmxlIENQVSBzbGVlcCBtb25pdG9ycyAoZm9yIHVzZSB3aXRoIC1tKVxuIikpOworCXByaW50ZihfKCJcdCAtbTogc2hvdyBzcGVjaWZpYyBDUFUgc2xlZXAgbW9uaXRvcnMgb25seSAoaW4gc2FtZSBvcmRlcilcbiIpKTsKKwlwcmludGYoXygiXHQgLWg6IHByaW50IHRoaXMgaGVscFxuIikpOworCXByaW50ZigiXG4iKTsKKwlwcmludGYoXygib25seSBvbmUgb2Y6IC1sLCAtbSBhcmUgYWxsb3dlZFxuSWYgbm9uZSBvZiB0aGVtIGlzIHBhc3NlZCwiKSk7CisJcHJpbnRmKF8oIiBhbGwgc3VwcG9ydGVkIG1vbml0b3JzIGFyZSBzaG93blxuIikpOworfQorCit2b2lkIHByaW50X25fc3BhY2VzKGludCBuKQoreworCWludCB4OworCWZvciAoeCA9IDA7IHggPCBuOyB4KyspCisJCXByaW50ZigiICIpOworfQorCisvKiBzaXplIG9mIHMgbXVzdCBiZSBhdCBsZWFzdCBuICsgMSAqLworaW50IGZpbGxfc3RyaW5nX3dpdGhfc3BhY2VzKGNoYXIgKnMsIGludCBuKQoreworCWludCBsZW4gPSBzdHJsZW4ocyk7CisJaWYgKGxlbiA+IG4pCisJCXJldHVybiAtMTsKKwlmb3IgKDsgbGVuIDwgbjsgbGVuKyspCisJCXNbbGVuXSA9ICcgJzsKKwlzW2xlbl0gPSAnXDAnOworCXJldHVybiAwOworfQorCit2b2lkIHByaW50X2hlYWRlcihpbnQgdG9wb2xvZ3lfZGVwdGgpCit7CisJaW50IHVuc2lnbmVkIG1vbjsKKwlpbnQgc3RhdGUsIG5lZWRfbGVuLCBwcl9tb25fbGVuOworCWNzdGF0ZV90IHM7CisJY2hhciBidWZbMTI4XSA9ICIiOworCWludCBwZXJjZW50X3dpZHRoID0gNDsKKworCWZpbGxfc3RyaW5nX3dpdGhfc3BhY2VzKGJ1ZiwgdG9wb2xvZ3lfZGVwdGggKiA1IC0gMSk7CisJcHJpbnRmKCIlc3wiLCBidWYpOworCisJZm9yIChtb24gPSAwOyBtb24gPCBhdmFpbF9tb25pdG9yczsgbW9uKyspIHsKKwkJcHJfbW9uX2xlbiA9IDA7CisJCW5lZWRfbGVuID0gbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzX251bSAqIChwZXJjZW50X3dpZHRoICsgMykKKwkJCS0gMTsKKwkJaWYgKG1vbiAhPSAwKSB7CisJCQlwcmludGYoInx8ICIpOworCQkJbmVlZF9sZW4tLTsKKwkJfQorCQlzcHJpbnRmKGJ1ZiwgIiVzIiwgbW9uaXRvcnNbbW9uXS0+bmFtZSk7CisJCWZpbGxfc3RyaW5nX3dpdGhfc3BhY2VzKGJ1ZiwgbmVlZF9sZW4pOworCQlwcmludGYoIiVzIiwgYnVmKTsKKwl9CisJcHJpbnRmKCJcbiIpOworCisJaWYgKHRvcG9sb2d5X2RlcHRoID4gMikKKwkJcHJpbnRmKCJQS0cgfCIpOworCWlmICh0b3BvbG9neV9kZXB0aCA+IDEpCisJCXByaW50ZigiQ09SRXwiKTsKKwlpZiAodG9wb2xvZ3lfZGVwdGggPiAwKQorCQlwcmludGYoIkNQVSB8Iik7CisKKwlmb3IgKG1vbiA9IDA7IG1vbiA8IGF2YWlsX21vbml0b3JzOyBtb24rKykgeworCQlpZiAobW9uICE9IDApCisJCQlwcmludGYoInx8ICIpOworCQllbHNlCisJCQlwcmludGYoIiAiKTsKKwkJZm9yIChzdGF0ZSA9IDA7IHN0YXRlIDwgbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzX251bTsgc3RhdGUrKykgeworCQkJaWYgKHN0YXRlICE9IDApCisJCQkJcHJpbnRmKCIgfCAiKTsKKwkJCXMgPSBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNbc3RhdGVdOworCQkJc3ByaW50ZihidWYsICIlcyIsIHMubmFtZSk7CisJCQlmaWxsX3N0cmluZ193aXRoX3NwYWNlcyhidWYsIHBlcmNlbnRfd2lkdGgpOworCQkJcHJpbnRmKCIlcyIsIGJ1Zik7CisJCX0KKwkJcHJpbnRmKCIgIik7CisJfQorCXByaW50ZigiXG4iKTsKK30KKworCit2b2lkIHByaW50X3Jlc3VsdHMoaW50IHRvcG9sb2d5X2RlcHRoLCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGludCBtb247CisJaW50IHN0YXRlLCByZXQ7CisJZG91YmxlIHBlcmNlbnQ7CisJdW5zaWduZWQgbG9uZyBsb25nIHJlc3VsdDsKKwljc3RhdGVfdCBzOworCisJaWYgKHRvcG9sb2d5X2RlcHRoID4gMikKKwkJcHJpbnRmKCIlNGR8IiwgY3B1X3RvcC5jb3JlX2luZm9bY3B1XS5wa2cpOworCWlmICh0b3BvbG9neV9kZXB0aCA+IDEpCisJCXByaW50ZigiJTRkfCIsIGNwdV90b3AuY29yZV9pbmZvW2NwdV0uY29yZSk7CisJaWYgKHRvcG9sb2d5X2RlcHRoID4gMCkKKwkJcHJpbnRmKCIlNGR8IiwgY3B1X3RvcC5jb3JlX2luZm9bY3B1XS5jcHUpOworCisJZm9yIChtb24gPSAwOyBtb24gPCBhdmFpbF9tb25pdG9yczsgbW9uKyspIHsKKwkJaWYgKG1vbiAhPSAwKQorCQkJcHJpbnRmKCJ8fCIpOworCisJCWZvciAoc3RhdGUgPSAwOyBzdGF0ZSA8IG1vbml0b3JzW21vbl0tPmh3X3N0YXRlc19udW07IHN0YXRlKyspIHsKKwkJCWlmIChzdGF0ZSAhPSAwKQorCQkJCXByaW50ZigifCIpOworCisJCQlzID0gbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzW3N0YXRlXTsKKworCQkJaWYgKHMuZ2V0X2NvdW50X3BlcmNlbnQpIHsKKwkJCQlyZXQgPSBzLmdldF9jb3VudF9wZXJjZW50KHMuaWQsICZwZXJjZW50LAorCQkJCQkJICBjcHVfdG9wLmNvcmVfaW5mb1tjcHVdLmNwdSk7CisJCQkJaWYgKHJldCkKKwkJCQkJcHJpbnRmKCIqKioqKioiKTsKKwkJCQllbHNlIGlmIChwZXJjZW50ID49IDEwMC4wKQorCQkJCQlwcmludGYoIiU2LjFmIiwgcGVyY2VudCk7CisJCQkJZWxzZQorCQkJCQlwcmludGYoIiU2LjJmIiwgcGVyY2VudCk7CisJCQl9IGVsc2UgaWYgKHMuZ2V0X2NvdW50KSB7CisJCQkJcmV0ID0gcy5nZXRfY291bnQocy5pZCwgJnJlc3VsdCwKKwkJCQkJCSAgY3B1X3RvcC5jb3JlX2luZm9bY3B1XS5jcHUpOworCQkJCWlmIChyZXQpCisJCQkJCXByaW50ZigiKioqKioqIik7CisJCQkJZWxzZQorCQkJCQlwcmludGYoIiU2bGx1IiwgcmVzdWx0KTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmKF8oIk1vbml0b3IgJXMsIENvdW50ZXIgJXMgaGFzIG5vIGNvdW50ICIKKwkJCQkJICJmdW5jdGlvbi4gSW1wbGVtZW50YXRpb24gZXJyb3JcbiIpLAorCQkJCSAgICAgICBtb25pdG9yc1ttb25dLT5uYW1lLCBzLm5hbWUpOworCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBjcHUgb2ZmbGluZSAqLworCWlmIChjcHVfdG9wLmNvcmVfaW5mb1tjcHVdLnBrZyA9PSAtMSB8fAorCSAgICBjcHVfdG9wLmNvcmVfaW5mb1tjcHVdLmNvcmUgPT0gLTEpIHsKKwkJcHJpbnRmKF8oIiAqaXMgb2ZmbGluZVxuIikpOworCQlyZXR1cm47CisJfSBlbHNlCisJCXByaW50ZigiXG4iKTsKK30KKworCisvKiBwYXJhbTogc3RyaW5nIHBhc3NlZCBieSAtbSBwYXJhbSAoVGhlIGxpc3Qgb2YgbW9uaXRvcnMgdG8gc2hvdykKKyAqCisgKiBNb25pdG9ycyBtdXN0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGFscmVhZHksIG1hdGNoaW5nIG1vbml0b3JzCisgKiBhcmUgcGlja2VkIG91dCBhbmQgYXZhaWxhYmxlIG1vbml0b3JzIGFycmF5IGlzIG92ZXJyaWRkZW4KKyAqIHdpdGggbWF0Y2hpbmcgb25lcworICoKKyAqIE1vbml0b3JzIGdldCBzb3J0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgdGhlIHVzZXIgcGFzc2VzIHRoZW0KKyovCisKK3N0YXRpYyB2b2lkIHBhcnNlX21vbml0b3JfcGFyYW0oY2hhciAqcGFyYW0pCit7CisJdW5zaWduZWQgaW50IG51bTsKKwlpbnQgbW9uLCBoaXRzID0gMDsKKwljaGFyICp0bXAgPSBwYXJhbSwgKnRva2VuOworCXN0cnVjdCBjcHVpZGxlX21vbml0b3IgKnRtcF9tb25zW01PTklUT1JTX01BWF07CisKKworCWZvciAobW9uID0gMDsgbW9uIDwgTU9OSVRPUlNfTUFYOyBtb24rKywgdG1wID0gTlVMTCkgeworCQl0b2tlbiA9IHN0cnRvayh0bXAsICIsIik7CisJCWlmICh0b2tlbiA9PSBOVUxMKQorCQkJYnJlYWs7CisJCWlmIChzdHJsZW4odG9rZW4pID49IE1PTklUT1JfTkFNRV9MRU4pIHsKKwkJCXByaW50ZihfKCIlczogbWF4IG1vbml0b3IgbmFtZSBsZW5ndGgiCisJCQkJICIgKCVkKSBleGNlZWRlZFxuIiksIHRva2VuLCBNT05JVE9SX05BTUVfTEVOKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZm9yIChudW0gPSAwOyBudW0gPCBhdmFpbF9tb25pdG9yczsgbnVtKyspIHsKKwkJCWlmICghc3RyY21wKG1vbml0b3JzW251bV0tPm5hbWUsIHRva2VuKSkgeworCQkJCWRwcmludCgiRm91bmQgcmVxdWVzdGVkIG1vbml0b3I6ICVzXG4iLCB0b2tlbik7CisJCQkJdG1wX21vbnNbaGl0c10gPSBtb25pdG9yc1tudW1dOworCQkJCWhpdHMrKzsKKwkJCX0KKwkJfQorCX0KKwlpZiAoaGl0cyA9PSAwKSB7CisJCXByaW50ZihfKCJObyBtYXRjaGluZyBtb25pdG9yIGZvdW5kIGluICVzLCAiCisJCQkgInRyeSAtbCBvcHRpb25cbiIpLCBwYXJhbSk7CisJCW1vbml0b3JfaGVscCgpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCS8qIE92ZXJyaWRlIGRldGVjdGVkL3JlZ2lzdGVyZCBtb25pdG9ycyBhcnJheSB3aXRoIHJlcXVlc3RlZCBvbmUgKi8KKwltZW1jcHkobW9uaXRvcnMsIHRtcF9tb25zLAorCQlzaXplb2Yoc3RydWN0IGNwdWlkbGVfbW9uaXRvciAqKSAqIE1PTklUT1JTX01BWCk7CisJYXZhaWxfbW9uaXRvcnMgPSBoaXRzOworfQorCit2b2lkIGxpc3RfbW9uaXRvcnModm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgbW9uOworCWludCBzdGF0ZTsKKwljc3RhdGVfdCBzOworCisJZm9yIChtb24gPSAwOyBtb24gPCBhdmFpbF9tb25pdG9yczsgbW9uKyspIHsKKwkJcHJpbnRmKF8oIk1vbml0b3IgXCIlc1wiICglZCBzdGF0ZXMpIC0gTWlnaHQgb3ZlcmZsb3cgYWZ0ZXIgJXUgIgorCQkJICJzXG4iKSwKKwkJCW1vbml0b3JzW21vbl0tPm5hbWUsIG1vbml0b3JzW21vbl0tPmh3X3N0YXRlc19udW0sCisJCQltb25pdG9yc1ttb25dLT5vdmVyZmxvd19zKTsKKworCQlmb3IgKHN0YXRlID0gMDsgc3RhdGUgPCBtb25pdG9yc1ttb25dLT5od19zdGF0ZXNfbnVtOyBzdGF0ZSsrKSB7CisJCQlzID0gbW9uaXRvcnNbbW9uXS0+aHdfc3RhdGVzW3N0YXRlXTsKKwkJCS8qCisJCQkgKiBUb0RvIHNob3cgbW9yZSBzdGF0ZSBjYXBhYmlsaXRpZXM6CisJCQkgKiBwZXJjZW50LCB0aW1lIChncmFubGFyaXR5KQorCQkJICovCisJCQlwcmludGYoIiVzXHRbJWNdIC0+ICVzXG4iLCBzLm5hbWUsIHJhbmdlX2FiYnJbcy5yYW5nZV0sCisJCQkgICAgICAgZ2V0dGV4dChzLmRlc2MpKTsKKwkJfQorCX0KK30KKworaW50IGZvcmtfaXQoY2hhciAqKmFyZ3YpCit7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBpbnQgbnVtOworCXVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lZGlmZjsKKwlwaWRfdCBjaGlsZF9waWQ7CisJc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBlbmQ7CisKKwljaGlsZF9waWQgPSBmb3JrKCk7CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnN0YXJ0KTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgYXZhaWxfbW9uaXRvcnM7IG51bSsrKQorCQltb25pdG9yc1tudW1dLT5zdGFydCgpOworCisJaWYgKCFjaGlsZF9waWQpIHsKKwkJLyogY2hpbGQgKi8KKwkJZXhlY3ZwKGFyZ3ZbMF0sIGFyZ3YpOworCX0gZWxzZSB7CisJCS8qIHBhcmVudCAqLworCQlpZiAoY2hpbGRfcGlkID09IC0xKSB7CisJCQlwZXJyb3IoImZvcmsiKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQlzaWduYWwoU0lHSU5ULCBTSUdfSUdOKTsKKwkJc2lnbmFsKFNJR1FVSVQsIFNJR19JR04pOworCQlpZiAod2FpdHBpZChjaGlsZF9waWQsICZzdGF0dXMsIDApID09IC0xKSB7CisJCQlwZXJyb3IoIndhaXQiKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJmVuZCk7CisJZm9yIChudW0gPSAwOyBudW0gPCBhdmFpbF9tb25pdG9yczsgbnVtKyspCisJCW1vbml0b3JzW251bV0tPnN0b3AoKTsKKworCXRpbWVkaWZmID0gdGltZXNwZWNfZGlmZl91cyhzdGFydCwgZW5kKTsKKwlpZiAoV0lGRVhJVEVEKHN0YXR1cykpCisJCXByaW50ZihfKCIlcyB0b29rICUuNWYgc2Vjb25kcyBhbmQgZXhpdGVkIHdpdGggc3RhdHVzICVkXG4iKSwKKwkJCWFyZ3ZbMF0sIHRpbWVkaWZmIC8gKDEwMDAuMCAqIDEwMDApLAorCQkJV0VYSVRTVEFUVVMoc3RhdHVzKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBkb19pbnRlcnZhbF9tZWFzdXJlKGludCBpKQoreworCXVuc2lnbmVkIGludCBudW07CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IGF2YWlsX21vbml0b3JzOyBudW0rKykgeworCQlkcHJpbnQoIkhXIEMtc3RhdGUgcmVzaWRlbmN5IG1vbml0b3I6ICVzIC0gU3RhdGVzOiAlZFxuIiwKKwkJICAgICAgIG1vbml0b3JzW251bV0tPm5hbWUsIG1vbml0b3JzW251bV0tPmh3X3N0YXRlc19udW0pOworCQltb25pdG9yc1tudW1dLT5zdGFydCgpOworCX0KKwlzbGVlcChpKTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IGF2YWlsX21vbml0b3JzOyBudW0rKykKKwkJbW9uaXRvcnNbbnVtXS0+c3RvcCgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNtZGxpbmUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpbnQgb3B0OworCXByb2duYW1lID0gYmFzZW5hbWUoYXJndlswXSk7CisKKwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiK2hsaTptOiIpKSAhPSAtMSkgeworCQlzd2l0Y2ggKG9wdCkgeworCQljYXNlICdoJzoKKwkJCW1vbml0b3JfaGVscCgpOworCQkJZXhpdChFWElUX1NVQ0NFU1MpOworCQljYXNlICdsJzoKKwkJCWlmIChtb2RlKSB7CisJCQkJbW9uaXRvcl9oZWxwKCk7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCQkJbW9kZSA9IGxpc3Q7CisJCQlicmVhazsKKwkJY2FzZSAnaSc6CisJCQkvKiBvbmx5IGFsbG93IC1pIHdpdGggLW0gb3Igbm8gb3B0aW9uICovCisJCQlpZiAobW9kZSAmJiBtb2RlICE9IHNob3cpIHsKKwkJCQltb25pdG9yX2hlbHAoKTsKKwkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQl9CisJCQlpbnRlcnZhbCA9IGF0b2kob3B0YXJnKTsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChtb2RlKSB7CisJCQkJbW9uaXRvcl9oZWxwKCk7CisJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJfQorCQkJbW9kZSA9IHNob3c7CisJCQlzaG93X21vbml0b3JzX3BhcmFtID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQltb25pdG9yX2hlbHAoKTsKKwkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJfQorCX0KKwlpZiAoIW1vZGUpCisJCW1vZGUgPSBzaG93X2FsbDsKK30KKworaW50IGNtZF9tb25pdG9yKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBpbnQgbnVtOworCXN0cnVjdCBjcHVpZGxlX21vbml0b3IgKnRlc3RfbW9uOworCWludCBjcHU7CisKKwljbWRsaW5lKGFyZ2MsIGFyZ3YpOworCWNwdV9jb3VudCA9IGdldF9jcHVfdG9wb2xvZ3koJmNwdV90b3ApOworCWlmIChjcHVfY291bnQgPCAwKSB7CisJCXByaW50ZihfKCJDYW5ub3QgcmVhZCBudW1iZXIgb2YgYXZhaWxhYmxlIHByb2Nlc3NvcnNcbiIpKTsKKwkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwl9CisKKwlkcHJpbnQoIlN5c3RlbSBoYXMgdXAgdG8gJWQgQ1BVIGNvcmVzXG4iLCBjcHVfY291bnQpOworCisJZm9yIChudW0gPSAwOyBhbGxfbW9uaXRvcnNbbnVtXTsgbnVtKyspIHsKKwkJZHByaW50KCJUcnkgdG8gcmVnaXN0ZXI6ICVzXG4iLCBhbGxfbW9uaXRvcnNbbnVtXS0+bmFtZSk7CisJCXRlc3RfbW9uID0gYWxsX21vbml0b3JzW251bV0tPmRvX3JlZ2lzdGVyKCk7CisJCWlmICh0ZXN0X21vbikgeworCQkJaWYgKHRlc3RfbW9uLT5uZWVkc19yb290ICYmICFydW5fYXNfcm9vdCkgeworCQkJCWZwcmludGYoc3RkZXJyLCBfKCJBdmFpbGFibGUgbW9uaXRvciAlcyBuZWVkcyAiCisJCQkJCSAgInJvb3QgYWNjZXNzXG4iKSwgdGVzdF9tb24tPm5hbWUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJbW9uaXRvcnNbYXZhaWxfbW9uaXRvcnNdID0gdGVzdF9tb247CisJCQlkcHJpbnQoIiVzIHJlZ2lzdGVyZWRcbiIsIGFsbF9tb25pdG9yc1tudW1dLT5uYW1lKTsKKwkJCWF2YWlsX21vbml0b3JzKys7CisJCX0KKwl9CisKKwlpZiAoYXZhaWxfbW9uaXRvcnMgPT0gMCkgeworCQlwcmludGYoXygiTm8gSFcgQ3N0YXRlIG1vbml0b3JzIGZvdW5kXG4iKSk7CisJCXJldHVybiAxOworCX0KKworCWlmIChtb2RlID09IGxpc3QpIHsKKwkJbGlzdF9tb25pdG9ycygpOworCQlleGl0KEVYSVRfU1VDQ0VTUyk7CisJfQorCisJaWYgKG1vZGUgPT0gc2hvdykKKwkJcGFyc2VfbW9uaXRvcl9wYXJhbShzaG93X21vbml0b3JzX3BhcmFtKTsKKworCWRwcmludCgiUGFja2FnZXM6ICVkIC0gQ29yZXM6ICVkIC0gQ1BVczogJWRcbiIsCisJICAgICAgIGNwdV90b3AucGtncywgY3B1X3RvcC5jb3JlcywgY3B1X2NvdW50KTsKKworCS8qCisJICogaWYgYW55IHBhcmFtcyBsZWZ0LCBpdCBtdXN0IGJlIGEgY29tbWFuZCB0byBmb3JrCisJICovCisJaWYgKGFyZ2MgLSBvcHRpbmQpCisJCWZvcmtfaXQoYXJndiArIG9wdGluZCk7CisJZWxzZQorCQlkb19pbnRlcnZhbF9tZWFzdXJlKGludGVydmFsKTsKKworCS8qIFRvRG86IFRvcG9sb2d5IHBhcnNpbmcgbmVlZHMgZml4aW5nIGZpcnN0IHRvIGRvCisJICAgdGhpcyBtb3JlIGdlbmVyaWNhbGx5ICovCisJaWYgKGNwdV90b3AucGtncyA+IDEpCisJCXByaW50X2hlYWRlcigzKTsKKwllbHNlCisJCXByaW50X2hlYWRlcigxKTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykgeworCQlpZiAoY3B1X3RvcC5wa2dzID4gMSkKKwkJCXByaW50X3Jlc3VsdHMoMywgY3B1KTsKKwkJZWxzZQorCQkJcHJpbnRfcmVzdWx0cygxLCBjcHUpOworCX0KKworCWZvciAobnVtID0gMDsgbnVtIDwgYXZhaWxfbW9uaXRvcnM7IG51bSsrKQorCQltb25pdG9yc1tudW1dLT51bnJlZ2lzdGVyKCk7CisKKwljcHVfdG9wb2xvZ3lfcmVsZWFzZShjcHVfdG9wKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmggYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMTJlZTEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqLworCisjaWZuZGVmIF9fQ1BVSURMRV9JTkZPX0hXX18KKyNkZWZpbmUgX19DUFVJRExFX0lORk9fSFdfXworCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2lkbGVfbW9uaXRvcnMuaCIKKworI2RlZmluZSBNT05JVE9SU19NQVggMjAKKyNkZWZpbmUgTU9OSVRPUl9OQU1FX0xFTiAyMAorI2RlZmluZSBDU1RBVEVfTkFNRV9MRU4gNQorI2RlZmluZSBDU1RBVEVfREVTQ19MRU4gNjAKKworaW50IGNwdV9jb3VudDsKKworLyogSGFyZCB0byBkZWZpbmUgdGhlIHJpZ2h0IG5hbWVzIC4uLjogKi8KK2VudW0gcG93ZXJfcmFuZ2VfZSB7CisJUkFOR0VfVEhSRUFELAkvKiBMb3dlc3QgaW4gdG9wb2xvZ3kgaGllcmFyY3ksIEFNRDogY29yZSwgSW50ZWw6IHRocmVhZAorCQkJICAga2VybmVsIHN5c2ZzOiBjcHUgKi8KKwlSQU5HRV9DT1JFLAkvKiBBTUQ6IHVuaXQsIEludGVsOiBjb3JlLCBrZXJuZWxfc3lzZnM6IGNvcmVfaWQgKi8KKwlSQU5HRV9QQUNLQUdFLAkvKiBQYWNrYWdlLCBwcm9jZXNzb3Igc29ja2V0ICovCisJUkFOR0VfTUFDSElORSwJLyogTWFjaGluZSwgcGxhdGZvcm0gd2lkZSAqLworCVJBTkdFX01BWCB9OworCit0eXBlZGVmIHN0cnVjdCBjc3RhdGUgeworCWludCAgaWQ7CisJZW51bSBwb3dlcl9yYW5nZV9lIHJhbmdlOworCWNoYXIgbmFtZVtDU1RBVEVfTkFNRV9MRU5dOworCWNoYXIgZGVzY1tDU1RBVEVfREVTQ19MRU5dOworCisJLyogZWl0aGVyIHByb3ZpZGUgYSBwZXJjZW50YWdlIG9yIGEgZ2VuZXJhbCBjb3VudCAqLworCWludCAoKmdldF9jb3VudF9wZXJjZW50KSh1bnNpZ25lZCBpbnQgc2VsZl9pZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSB1bnNpZ25lZCBpbnQgY3B1KTsKKwlpbnQgKCpnZXRfY291bnQpKHVuc2lnbmVkIGludCBzZWxmX2lkLCB1bnNpZ25lZCBsb25nIGxvbmcgKmNvdW50LAorCQkJIHVuc2lnbmVkIGludCBjcHUpOworfSBjc3RhdGVfdDsKKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciB7CisJLyogTmFtZSBtdXN0IG5vdCBjb250YWluIHdoaXRlc3BhY2VzICovCisJY2hhciBuYW1lW01PTklUT1JfTkFNRV9MRU5dOworCWludCBuYW1lX2xlbjsKKwlpbnQgaHdfc3RhdGVzX251bTsKKwljc3RhdGVfdCAqaHdfc3RhdGVzOworCWludCAoKnN0YXJ0KSAodm9pZCk7CisJaW50ICgqc3RvcCkgKHZvaWQpOworCXN0cnVjdCBjcHVpZGxlX21vbml0b3IqICgqZG9fcmVnaXN0ZXIpICh2b2lkKTsKKwl2b2lkICgqdW5yZWdpc3Rlcikodm9pZCk7CisJdW5zaWduZWQgaW50IG92ZXJmbG93X3M7CisJaW50IG5lZWRzX3Jvb3Q7Cit9OworCitleHRlcm4gbG9uZyBsb25nIHRpbWVzcGVjX2RpZmZfdXMoc3RydWN0IHRpbWVzcGVjIHN0YXJ0LCBzdHJ1Y3QgdGltZXNwZWMgZW5kKTsKKworI2RlZmluZSBwcmludF9vdmVyZmxvd19lcnIobWVzLCBvdikJCQkJCQlcCit7CQkJCQkJCQkJCVwKKwlmcHJpbnRmKHN0ZGVyciwgZ2V0dGV4dCgiTWVhc3VyZSB0b29rICV1IHNlY29uZHMsIGJ1dCByZWdpc3RlcnMgY291bGQgIglcCisJCQkJIm92ZXJmbG93IGF0ICV1IHNlY29uZHMsIHJlc3VsdHMgIgkJXAorCQkJCSJjb3VsZCBiZSBpbmFjY3VyYXRlXG4iKSwgbWVzLCBvdik7CQlcCit9CisKKyNlbmRpZiAvKiBfX0NQVUlETEVfSU5GT19IV19fICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5kZWYgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNmOGQ5YgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmRlZgpAQCAtMCwwICsxLDcgQEAKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCitERUYoYW1kX2ZhbTE0aCkKK0RFRihpbnRlbF9uaG0pCitERUYoaW50ZWxfc25iKQorREVGKG1wZXJmKQorI2VuZGlmCitERUYoY3B1aWRsZV9zeXNmcykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9pZGxlX21vbml0b3JzLmggYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmY2RlYjEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvaWRsZV9tb25pdG9ycy5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqICBCYXNlZCBvbiB0aGUgaWRlYSBmcm9tIE1pY2hhZWwgTWF0eiA8bWF0ekBzdXNlLmRlPgorICoKKyAqLworCisjaWZuZGVmIF9DUFVJRExFX0lETEVfTU9OSVRPUlNfSF8KKyNkZWZpbmUgX0NQVUlETEVfSURMRV9NT05JVE9SU19IXworCisjZGVmaW5lIERFRih4KSBleHRlcm4gc3RydWN0IGNwdWlkbGVfbW9uaXRvciB4ICMjX21vbml0b3I7CisjaW5jbHVkZSAiaWRsZV9tb25pdG9ycy5kZWYiCisjdW5kZWYgREVGCitleHRlcm4gc3RydWN0IGNwdWlkbGVfbW9uaXRvciAqYWxsX21vbml0b3JzW107CisKKyNlbmRpZiAvKiBfQ1BVSURMRV9JRExFX01PTklUT1JTX0hfICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvbXBlcmZfbW9uaXRvci5jIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2NhODdhCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL21wZXJmX21vbml0b3IuYwpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKi8KKworI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlIDxjcHVmcmVxLmg+CisKKyNpbmNsdWRlICJoZWxwZXJzL2hlbHBlcnMuaCIKKyNpbmNsdWRlICJpZGxlX21vbml0b3IvY3B1cG93ZXItbW9uaXRvci5oIgorCisjZGVmaW5lIE1TUl9BUEVSRgkweEU4CisjZGVmaW5lIE1TUl9NUEVSRgkweEU3CisKKyNkZWZpbmUgTVNSX1RTQwkweDEwCisKK2VudW0gbXBlcmZfaWQgeyBDMCA9IDAsIEN4LCBBVkdfRlJFUSwgTVBFUkZfQ1NUQVRFX0NPVU5UIH07CisKK3N0YXRpYyBpbnQgbXBlcmZfZ2V0X2NvdW50X3BlcmNlbnQodW5zaWduZWQgaW50IHNlbGZfaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY3B1KTsKK3N0YXRpYyBpbnQgbXBlcmZfZ2V0X2NvdW50X2ZyZXEodW5zaWduZWQgaW50IGlkLCB1bnNpZ25lZCBsb25nIGxvbmcgKmNvdW50LAorCQkJCXVuc2lnbmVkIGludCBjcHUpOworCitzdGF0aWMgY3N0YXRlX3QgbXBlcmZfY3N0YXRlc1tNUEVSRl9DU1RBVEVfQ09VTlRdID0geworCXsKKwkJLm5hbWUJCQk9ICJDMCIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIENvcmUgbm90IGlkbGUiKSwKKwkJLmlkCQkJPSBDMCwKKwkJLnJhbmdlCQkJPSBSQU5HRV9USFJFQUQsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IG1wZXJmX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisJeworCQkubmFtZQkJCT0gIkN4IiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgQ29yZSBpbiBhbiBpZGxlIHN0YXRlIiksCisJCS5pZAkJCT0gQ3gsCisJCS5yYW5nZQkJCT0gUkFOR0VfVEhSRUFELAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBtcGVyZl9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCisJeworCQkubmFtZQkJCT0gIkZyZXEiLAorCQkuZGVzYwkJCT0gTl8oIkF2ZXJhZ2UgRnJlcXVlbmN5IChpbmNsdWRpbmcgYm9vc3QpIGluIE1IeiIpLAorCQkuaWQJCQk9IEFWR19GUkVRLAorCQkucmFuZ2UJCQk9IFJBTkdFX1RIUkVBRCwKKwkJLmdldF9jb3VudAkJPSBtcGVyZl9nZXRfY291bnRfZnJlcSwKKwl9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0c2NfYXRfbWVhc3VyZV9zdGFydDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdHNjX2F0X21lYXN1cmVfZW5kOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4X2ZyZXF1ZW5jeTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKm1wZXJmX3ByZXZpb3VzX2NvdW50Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqYXBlcmZfcHJldmlvdXNfY291bnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICptcGVyZl9jdXJyZW50X2NvdW50Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqYXBlcmZfY3VycmVudF9jb3VudDsKKy8qIHZhbGlkIGZsYWcgZm9yIGFsbCBDUFVzLiBJZiBhIE1TUiByZWFkIGZhaWxlZCBpdCB3aWxsIGJlIHplcm8gKi8KK3N0YXRpYyBpbnQgKmlzX3ZhbGlkOworCitzdGF0aWMgaW50IG1wZXJmX2dldF90c2ModW5zaWduZWQgbG9uZyBsb25nICp0c2MpCit7CisJcmV0dXJuIHJlYWRfbXNyKDAsIE1TUl9UU0MsIHRzYyk7Cit9CisKK3N0YXRpYyBpbnQgbXBlcmZfaW5pdF9zdGF0cyh1bnNpZ25lZCBpbnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJaW50IHJldDsKKworCXJldCA9IHJlYWRfbXNyKGNwdSwgTVNSX0FQRVJGLCAmdmFsKTsKKwlhcGVyZl9wcmV2aW91c19jb3VudFtjcHVdID0gdmFsOworCXJldCB8PSByZWFkX21zcihjcHUsIE1TUl9NUEVSRiwgJnZhbCk7CisJbXBlcmZfcHJldmlvdXNfY291bnRbY3B1XSA9IHZhbDsKKwlpc192YWxpZFtjcHVdID0gIXJldDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wZXJmX21lYXN1cmVfc3RhdHModW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCWludCByZXQ7CisKKwlyZXQgPSByZWFkX21zcihjcHUsIE1TUl9BUEVSRiwgJnZhbCk7CisJYXBlcmZfY3VycmVudF9jb3VudFtjcHVdID0gdmFsOworCXJldCB8PSByZWFkX21zcihjcHUsIE1TUl9NUEVSRiwgJnZhbCk7CisJbXBlcmZfY3VycmVudF9jb3VudFtjcHVdID0gdmFsOworCWlzX3ZhbGlkW2NwdV0gPSAhcmV0OworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBnZXRfYXZlcmFnZV9wZXJmKCkKKyAqCisgKiBSZXR1cm5zIHRoZSBhdmVyYWdlIHBlcmZvcm1hbmNlIChhbHNvIGNvbnNpZGVycyBib29zdGVkIGZyZXF1ZW5jaWVzKQorICoKKyAqIElucHV0OgorICogICBhcGVyZl9kaWZmOiBEaWZmZXJlbmNlIG9mIHRoZSBhcGVyZiByZWdpc3RlciBvdmVyIGEgdGltZSBwZXJpb2QKKyAqICAgbXBlcmZfZGlmZjogRGlmZmVyZW5jZSBvZiB0aGUgbXBlcmYgcmVnaXN0ZXIgb3ZlciB0aGUgc2FtZSB0aW1lIHBlcmlvZAorICogICBtYXhfZnJlcTogICBNYXhpbXVtIGZyZXF1ZW5jeSAoUDApCisgKgorICogUmV0dXJuczoKKyAqICAgQXZlcmFnZSBwZXJmb3JtYW5jZSBvdmVyIHRoZSB0aW1lIHBlcmlvZAorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfYXZlcmFnZV9wZXJmKHVuc2lnbmVkIGxvbmcgbG9uZyBhcGVyZl9kaWZmLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBtcGVyZl9kaWZmKQoreworCXVuc2lnbmVkIGludCBwZXJmX3BlcmNlbnQgPSAwOworCWlmICgoKHVuc2lnbmVkIGxvbmcpKC0xKSAvIDEwMCkgPCBhcGVyZl9kaWZmKSB7CisJCWludCBzaGlmdF9jb3VudCA9IDc7CisJCWFwZXJmX2RpZmYgPj49IHNoaWZ0X2NvdW50OworCQltcGVyZl9kaWZmID4+PSBzaGlmdF9jb3VudDsKKwl9CisJcGVyZl9wZXJjZW50ID0gKGFwZXJmX2RpZmYgKiAxMDApIC8gbXBlcmZfZGlmZjsKKwlyZXR1cm4gKG1heF9mcmVxdWVuY3kgKiBwZXJmX3BlcmNlbnQpIC8gMTAwOworfQorCitzdGF0aWMgaW50IG1wZXJmX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBpZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSAgIHVuc2lnbmVkIGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGFwZXJmX2RpZmYsIG1wZXJmX2RpZmYsIHRzY19kaWZmOworCisJaWYgKCFpc192YWxpZFtjcHVdKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaWQgIT0gQzAgJiYgaWQgIT0gQ3gpCisJCXJldHVybiAtMTsKKworCW1wZXJmX2RpZmYgPSBtcGVyZl9jdXJyZW50X2NvdW50W2NwdV0gLSBtcGVyZl9wcmV2aW91c19jb3VudFtjcHVdOworCWFwZXJmX2RpZmYgPSBhcGVyZl9jdXJyZW50X2NvdW50W2NwdV0gLSBhcGVyZl9wcmV2aW91c19jb3VudFtjcHVdOworCXRzY19kaWZmID0gdHNjX2F0X21lYXN1cmVfZW5kIC0gdHNjX2F0X21lYXN1cmVfc3RhcnQ7CisKKwkqcGVyY2VudCA9IDEwMC4wICogbXBlcmZfZGlmZiAvIHRzY19kaWZmOworCWRwcmludCgiJXM6IG1wZXJmX2RpZmY6ICVsbHUsIHRzY19kaWZmOiAlbGx1XG4iLAorCSAgICAgICBtcGVyZl9jc3RhdGVzW2lkXS5uYW1lLCBtcGVyZl9kaWZmLCB0c2NfZGlmZik7CisKKwlpZiAoaWQgPT0gQ3gpCisJCSpwZXJjZW50ID0gMTAwLjAgLSAqcGVyY2VudDsKKworCWRwcmludCgiJXM6IHByZXZpb3VzOiAlbGx1IC0gY3VycmVudDogJWxsdSAtICgldSlcbiIsCisJCW1wZXJmX2NzdGF0ZXNbaWRdLm5hbWUsIG1wZXJmX2RpZmYsIGFwZXJmX2RpZmYsIGNwdSk7CisJZHByaW50KCIlczogJWZcbiIsIG1wZXJmX2NzdGF0ZXNbaWRdLm5hbWUsICpwZXJjZW50KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGVyZl9nZXRfY291bnRfZnJlcSh1bnNpZ25lZCBpbnQgaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqY291bnQsCisJCQkJdW5zaWduZWQgaW50IGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYXBlcmZfZGlmZiwgbXBlcmZfZGlmZjsKKworCWlmIChpZCAhPSBBVkdfRlJFUSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoIWlzX3ZhbGlkW2NwdV0pCisJCXJldHVybiAtMTsKKworCW1wZXJmX2RpZmYgPSBtcGVyZl9jdXJyZW50X2NvdW50W2NwdV0gLSBtcGVyZl9wcmV2aW91c19jb3VudFtjcHVdOworCWFwZXJmX2RpZmYgPSBhcGVyZl9jdXJyZW50X2NvdW50W2NwdV0gLSBhcGVyZl9wcmV2aW91c19jb3VudFtjcHVdOworCisJLyogUmV0dXJuIE1IeiBmb3Igbm93LCBtaWdodCB3YW50IHRvIHJldHVybiBLSHogaWYgY29sdW1uIHdpZHRoIGlzIG1vcmUKKwkgICBnZW5lcmljICovCisJKmNvdW50ID0gZ2V0X2F2ZXJhZ2VfcGVyZihhcGVyZl9kaWZmLCBtcGVyZl9kaWZmKSAvIDEwMDA7CisJZHByaW50KCIlczogJWxsdVxuIiwgbXBlcmZfY3N0YXRlc1tpZF0ubmFtZSwgKmNvdW50KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1wZXJmX3N0YXJ0KHZvaWQpCit7CisJaW50IGNwdTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGJnOworCisJbXBlcmZfZ2V0X3RzYygmdHNjX2F0X21lYXN1cmVfc3RhcnQpOworCisJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKQorCQltcGVyZl9pbml0X3N0YXRzKGNwdSk7CisKKwltcGVyZl9nZXRfdHNjKCZkYmcpOworCWRwcmludCgiVFNDIGRpZmY6ICVsbHVcbiIsIGRiZyAtIHRzY19hdF9tZWFzdXJlX3N0YXJ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGVyZl9zdG9wKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGRiZzsKKwlpbnQgY3B1OworCisJbXBlcmZfZ2V0X3RzYygmdHNjX2F0X21lYXN1cmVfZW5kKTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1X2NvdW50OyBjcHUrKykKKwkJbXBlcmZfbWVhc3VyZV9zdGF0cyhjcHUpOworCisJbXBlcmZfZ2V0X3RzYygmZGJnKTsKKwlkcHJpbnQoIlRTQyBkaWZmOiAlbGx1XG4iLCBkYmcgLSB0c2NfYXRfbWVhc3VyZV9lbmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgbXBlcmZfbW9uaXRvcjsKKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciAqbXBlcmZfcmVnaXN0ZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG1pbjsKKworCWlmICghKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfQVBFUkYpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEFzc3VtZSBtaW4vbWF4IGFsbCB0aGUgc2FtZSBvbiBhbGwgY29yZXMgKi8KKwlpZiAoY3B1ZnJlcV9nZXRfaGFyZHdhcmVfbGltaXRzKDAsICZtaW4sICZtYXhfZnJlcXVlbmN5KSkgeworCQlkcHJpbnQoIkNhbm5vdCByZXRyaWV2ZSBtYXggZnJlcSBmcm9tIGNwdWZyZXEga2VybmVsICIKKwkJICAgICAgICJzdWJzeXN0ZW1cbiIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBGcmVlIHRoaXMgYXQgcHJvZ3JhbSB0ZXJtaW5hdGlvbiAqLworCWlzX3ZhbGlkID0gY2FsbG9jKGNwdV9jb3VudCwgc2l6ZW9mKGludCkpOworCW1wZXJmX3ByZXZpb3VzX2NvdW50ID0gY2FsbG9jKGNwdV9jb3VudCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCWFwZXJmX3ByZXZpb3VzX2NvdW50ID0gY2FsbG9jKGNwdV9jb3VudCwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOworCW1wZXJmX2N1cnJlbnRfY291bnQgPSBjYWxsb2MoY3B1X2NvdW50LCBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJYXBlcmZfY3VycmVudF9jb3VudCA9IGNhbGxvYyhjcHVfY291bnQsIHNpemVvZih1bnNpZ25lZCBsb25nIGxvbmcpKTsKKworCW1wZXJmX21vbml0b3IubmFtZV9sZW4gPSBzdHJsZW4obXBlcmZfbW9uaXRvci5uYW1lKTsKKwlyZXR1cm4gJm1wZXJmX21vbml0b3I7Cit9CisKK3ZvaWQgbXBlcmZfdW5yZWdpc3Rlcih2b2lkKQoreworCWZyZWUobXBlcmZfcHJldmlvdXNfY291bnQpOworCWZyZWUoYXBlcmZfcHJldmlvdXNfY291bnQpOworCWZyZWUobXBlcmZfY3VycmVudF9jb3VudCk7CisJZnJlZShhcGVyZl9jdXJyZW50X2NvdW50KTsKKwlmcmVlKGlzX3ZhbGlkKTsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBtcGVyZl9tb25pdG9yID0geworCS5uYW1lCQkJPSAiTXBlcmYiLAorCS5od19zdGF0ZXNfbnVtCQk9IE1QRVJGX0NTVEFURV9DT1VOVCwKKwkuaHdfc3RhdGVzCQk9IG1wZXJmX2NzdGF0ZXMsCisJLnN0YXJ0CQkJPSBtcGVyZl9zdGFydCwKKwkuc3RvcAkJCT0gbXBlcmZfc3RvcCwKKwkuZG9fcmVnaXN0ZXIJCT0gbXBlcmZfcmVnaXN0ZXIsCisJLnVucmVnaXN0ZXIJCT0gbXBlcmZfdW5yZWdpc3RlciwKKwkubmVlZHNfcm9vdAkJPSAxLAorCS5vdmVyZmxvd19zCQk9IDkyMjAwMDAwMCAvKiA5MjIzMzcyMDMgc2Vjb25kcyBUU0Mgb3ZlcmZsb3cKKwkJCQkJICAgICAgIGF0IDIwR0h6ICovCit9OworI2VuZGlmIC8qICNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYyBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL2lkbGVfbW9uaXRvci9uaG1faWRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyYTkxZGQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3IvbmhtX2lkbGUuYwpAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqICAoQykgMjAxMCwyMDExICAgICAgIFRob21hcyBSZW5uaW5nZXIgPHRyZW5uQHN1c2UuZGU+LCBOb3ZlbGwgSW5jLgorICoKKyAqICBMaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgTGljZW5zZSB2ZXJzaW9uIDIuCisgKgorICogIEJhc2VkIG9uIExlbiBCcm93bidzIDxsZW5iQGtlcm5lbC5vcmc+IHR1cmJvc3RhdCB0b29sLgorICovCisKKyNpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAiaGVscGVycy9oZWxwZXJzLmgiCisjaW5jbHVkZSAiaWRsZV9tb25pdG9yL2NwdXBvd2VyLW1vbml0b3IuaCIKKworI2RlZmluZSBNU1JfUEtHX0MzX1JFU0lERU5DWQkweDNGOAorI2RlZmluZSBNU1JfUEtHX0M2X1JFU0lERU5DWQkweDNGOQorI2RlZmluZSBNU1JfQ09SRV9DM19SRVNJREVOQ1kJMHgzRkMKKyNkZWZpbmUgTVNSX0NPUkVfQzZfUkVTSURFTkNZCTB4M0ZECisKKyNkZWZpbmUgTVNSX1RTQwkweDEwCisKKyNkZWZpbmUgTkhNX0NTVEFURV9DT1VOVCA0CisKK2VudW0gaW50ZWxfbmhtX2lkIHsgQzMgPSAwLCBDNiwgUEMzLCBQQzYsIFRTQyA9IDB4RkZGRiB9OworCitzdGF0aWMgaW50IG5obV9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgc2VsZl9pZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSB1bnNpZ25lZCBpbnQgY3B1KTsKKworc3RhdGljIGNzdGF0ZV90IG5obV9jc3RhdGVzW05ITV9DU1RBVEVfQ09VTlRdID0geworCXsKKwkJLm5hbWUJCQk9ICJDMyIsCisJCS5kZXNjCQkJPSBOXygiUHJvY2Vzc29yIENvcmUgQzMiKSwKKwkJLmlkCQkJPSBDMywKKwkJLnJhbmdlCQkJPSBSQU5HRV9DT1JFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBuaG1fZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiQzYiLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBDb3JlIEM2IiksCisJCS5pZAkJCT0gQzYsCisJCS5yYW5nZQkJCT0gUkFOR0VfQ09SRSwKKwkJLmdldF9jb3VudF9wZXJjZW50CT0gbmhtX2dldF9jb3VudF9wZXJjZW50LAorCX0sCisKKwl7CisJCS5uYW1lCQkJPSAiUEMzIiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgUGFja2FnZSBDMyIpLAorCQkuaWQJCQk9IFBDMywKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBuaG1fZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAiUEM2IiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgUGFja2FnZSBDNiIpLAorCQkuaWQJCQk9IFBDNiwKKwkJLnJhbmdlCQkJPSBSQU5HRV9QQUNLQUdFLAorCQkuZ2V0X2NvdW50X3BlcmNlbnQJPSBuaG1fZ2V0X2NvdW50X3BlcmNlbnQsCisJfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdHNjX2F0X21lYXN1cmVfc3RhcnQ7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHRzY19hdF9tZWFzdXJlX2VuZDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgKnByZXZpb3VzX2NvdW50W05ITV9DU1RBVEVfQ09VTlRdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqY3VycmVudF9jb3VudFtOSE1fQ1NUQVRFX0NPVU5UXTsKKy8qIHZhbGlkIGZsYWcgZm9yIGFsbCBDUFVzLiBJZiBhIE1TUiByZWFkIGZhaWxlZCBpdCB3aWxsIGJlIHplcm8gKi8KK3N0YXRpYyBpbnQgKmlzX3ZhbGlkOworCitzdGF0aWMgaW50IG5obV9nZXRfY291bnQoZW51bSBpbnRlbF9uaG1faWQgaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqdmFsLAorCQkJdW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgbXNyOworCisJc3dpdGNoIChpZCkgeworCWNhc2UgQzM6CisJCW1zciA9IE1TUl9DT1JFX0MzX1JFU0lERU5DWTsKKwkJYnJlYWs7CisJY2FzZSBDNjoKKwkJbXNyID0gTVNSX0NPUkVfQzZfUkVTSURFTkNZOworCQlicmVhazsKKwljYXNlIFBDMzoKKwkJbXNyID0gTVNSX1BLR19DM19SRVNJREVOQ1k7CisJCWJyZWFrOworCWNhc2UgUEM2OgorCQltc3IgPSBNU1JfUEtHX0M2X1JFU0lERU5DWTsKKwkJYnJlYWs7CisJY2FzZSBUU0M6CisJCW1zciA9IE1TUl9UU0M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9OworCWlmIChyZWFkX21zcihjcHUsIG1zciwgdmFsKSkKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmhtX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBpZCwgZG91YmxlICpwZXJjZW50LAorCQkJCSB1bnNpZ25lZCBpbnQgY3B1KQoreworCSpwZXJjZW50ID0gMC4wOworCisJaWYgKCFpc192YWxpZFtjcHVdKQorCQlyZXR1cm4gLTE7CisKKwkqcGVyY2VudCA9ICgxMDAuMCAqCisJCShjdXJyZW50X2NvdW50W2lkXVtjcHVdIC0gcHJldmlvdXNfY291bnRbaWRdW2NwdV0pKSAvCisJCSh0c2NfYXRfbWVhc3VyZV9lbmQgLSB0c2NfYXRfbWVhc3VyZV9zdGFydCk7CisKKwlkcHJpbnQoIiVzOiBwcmV2aW91czogJWxsdSAtIGN1cnJlbnQ6ICVsbHUgLSAoJXUpXG4iLAorCQluaG1fY3N0YXRlc1tpZF0ubmFtZSwgcHJldmlvdXNfY291bnRbaWRdW2NwdV0sCisJCWN1cnJlbnRfY291bnRbaWRdW2NwdV0sIGNwdSk7CisKKwlkcHJpbnQoIiVzOiB0c2NfZGlmZjogJWxsdSAtIGNvdW50X2RpZmY6ICVsbHUgLSBwZXJjZW50OiAlMi5mICgldSlcbiIsCisJICAgICAgIG5obV9jc3RhdGVzW2lkXS5uYW1lLAorCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB0c2NfYXRfbWVhc3VyZV9lbmQgLSB0c2NfYXRfbWVhc3VyZV9zdGFydCwKKwkgICAgICAgY3VycmVudF9jb3VudFtpZF1bY3B1XSAtIHByZXZpb3VzX2NvdW50W2lkXVtjcHVdLAorCSAgICAgICAqcGVyY2VudCwgY3B1KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5obV9zdGFydCh2b2lkKQoreworCWludCBudW0sIGNwdTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgZGJnLCB2YWw7CisKKwluaG1fZ2V0X2NvdW50KFRTQywgJnRzY19hdF9tZWFzdXJlX3N0YXJ0LCAwKTsKKworCWZvciAobnVtID0gMDsgbnVtIDwgTkhNX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCQlpc192YWxpZFtjcHVdID0gIW5obV9nZXRfY291bnQobnVtLCAmdmFsLCBjcHUpOworCQkJcHJldmlvdXNfY291bnRbbnVtXVtjcHVdID0gdmFsOworCQl9CisJfQorCW5obV9nZXRfY291bnQoVFNDLCAmZGJnLCAwKTsKKwlkcHJpbnQoIlRTQyBkaWZmOiAlbGx1XG4iLCBkYmcgLSB0c2NfYXRfbWVhc3VyZV9zdGFydCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmhtX3N0b3Aodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgbG9uZyBkYmc7CisJaW50IG51bSwgY3B1OworCisJbmhtX2dldF9jb3VudChUU0MsICZ0c2NfYXRfbWVhc3VyZV9lbmQsIDApOworCisJZm9yIChudW0gPSAwOyBudW0gPCBOSE1fQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJCWlzX3ZhbGlkW2NwdV0gPSAhbmhtX2dldF9jb3VudChudW0sICZ2YWwsIGNwdSk7CisJCQljdXJyZW50X2NvdW50W251bV1bY3B1XSA9IHZhbDsKKwkJfQorCX0KKwluaG1fZ2V0X2NvdW50KFRTQywgJmRiZywgMCk7CisJZHByaW50KCJUU0MgZGlmZjogJWxsdVxuIiwgZGJnIC0gdHNjX2F0X21lYXN1cmVfZW5kKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yIGludGVsX25obV9tb25pdG9yOworCitzdHJ1Y3QgY3B1aWRsZV9tb25pdG9yICppbnRlbF9uaG1fcmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgbnVtOworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLnZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKQorCQlyZXR1cm4gTlVMTDsKKworCWlmICghKGNwdXBvd2VyX2NwdV9pbmZvLmNhcHMgJiBDUFVQT1dFUl9DQVBfSU5WX1RTQykpCisJCXJldHVybiBOVUxMOworCisJaWYgKCEoY3B1cG93ZXJfY3B1X2luZm8uY2FwcyAmIENQVVBPV0VSX0NBUF9BUEVSRikpCisJCXJldHVybiBOVUxMOworCisJLyogRnJlZSB0aGlzIGF0IHByb2dyYW0gdGVybWluYXRpb24gKi8KKwlpc192YWxpZCA9IGNhbGxvYyhjcHVfY291bnQsIHNpemVvZihpbnQpKTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IE5ITV9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCXByZXZpb3VzX2NvdW50W251bV0gPSBjYWxsb2MoY3B1X2NvdW50LAorCQkJCQlzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJCWN1cnJlbnRfY291bnRbbnVtXSAgPSBjYWxsb2MoY3B1X2NvdW50LAorCQkJCQlzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJfQorCisJaW50ZWxfbmhtX21vbml0b3IubmFtZV9sZW4gPSBzdHJsZW4oaW50ZWxfbmhtX21vbml0b3IubmFtZSk7CisJcmV0dXJuICZpbnRlbF9uaG1fbW9uaXRvcjsKK30KKwordm9pZCBpbnRlbF9uaG1fdW5yZWdpc3Rlcih2b2lkKQoreworCWludCBudW07CisKKwlmb3IgKG51bSA9IDA7IG51bSA8IE5ITV9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCWZyZWUocHJldmlvdXNfY291bnRbbnVtXSk7CisJCWZyZWUoY3VycmVudF9jb3VudFtudW1dKTsKKwl9CisJZnJlZShpc192YWxpZCk7Cit9CisKK3N0cnVjdCBjcHVpZGxlX21vbml0b3IgaW50ZWxfbmhtX21vbml0b3IgPSB7CisJLm5hbWUJCQk9ICJOZWhhbGVtIiwKKwkuaHdfc3RhdGVzX251bQkJPSBOSE1fQ1NUQVRFX0NPVU5ULAorCS5od19zdGF0ZXMJCT0gbmhtX2NzdGF0ZXMsCisJLnN0YXJ0CQkJPSBuaG1fc3RhcnQsCisJLnN0b3AJCQk9IG5obV9zdG9wLAorCS5kb19yZWdpc3RlcgkJPSBpbnRlbF9uaG1fcmVnaXN0ZXIsCisJLnVucmVnaXN0ZXIJCT0gaW50ZWxfbmhtX3VucmVnaXN0ZXIsCisJLm5lZWRzX3Jvb3QJCT0gMSwKKwkub3ZlcmZsb3dfcwkJPSA5MjIwMDAwMDAgLyogOTIyMzM3MjAzIHNlY29uZHMgVFNDIG92ZXJmbG93CisJCQkJCSAgICAgICBhdCAyMEdIeiAqLworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmMgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy9pZGxlX21vbml0b3Ivc25iX2lkbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWJjMDdjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcG93ZXIvY3B1cG93ZXIvdXRpbHMvaWRsZV9tb25pdG9yL3NuYl9pZGxlLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiAgKEMpIDIwMTAsMjAxMSAgICAgICBUaG9tYXMgUmVubmluZ2VyIDx0cmVubkBzdXNlLmRlPiwgTm92ZWxsIEluYy4KKyAqCisgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgorICoKKyAqICBCYXNlZCBvbiBMZW4gQnJvd24ncyA8bGVuYkBrZXJuZWwub3JnPiB0dXJib3N0YXQgdG9vbC4KKyAqLworCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImhlbHBlcnMvaGVscGVycy5oIgorI2luY2x1ZGUgImlkbGVfbW9uaXRvci9jcHVwb3dlci1tb25pdG9yLmgiCisKKyNkZWZpbmUgTVNSX1BLR19DMl9SRVNJREVOQ1kJMHg2MEQKKyNkZWZpbmUgTVNSX1BLR19DN19SRVNJREVOQ1kJMHgzRkEKKyNkZWZpbmUgTVNSX0NPUkVfQzdfUkVTSURFTkNZCTB4M0ZFCisKKyNkZWZpbmUgTVNSX1RTQwkweDEwCisKK2VudW0gaW50ZWxfc25iX2lkIHsgQzcgPSAwLCBQQzIsIFBDNywgU05CX0NTVEFURV9DT1VOVCwgVFNDID0gMHhGRkZGIH07CisKK3N0YXRpYyBpbnQgc25iX2dldF9jb3VudF9wZXJjZW50KHVuc2lnbmVkIGludCBzZWxmX2lkLCBkb3VibGUgKnBlcmNlbnQsCisJCQkJIHVuc2lnbmVkIGludCBjcHUpOworCitzdGF0aWMgY3N0YXRlX3Qgc25iX2NzdGF0ZXNbU05CX0NTVEFURV9DT1VOVF0gPSB7CisJeworCQkubmFtZQkJCT0gIkM3IiwKKwkJLmRlc2MJCQk9IE5fKCJQcm9jZXNzb3IgQ29yZSBDNyIpLAorCQkuaWQJCQk9IEM3LAorCQkucmFuZ2UJCQk9IFJBTkdFX0NPUkUsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IHNuYl9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJQQzIiLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBQYWNrYWdlIEMyIiksCisJCS5pZAkJCT0gUEMyLAorCQkucmFuZ2UJCQk9IFJBTkdFX1BBQ0tBR0UsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IHNuYl9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorCXsKKwkJLm5hbWUJCQk9ICJQQzciLAorCQkuZGVzYwkJCT0gTl8oIlByb2Nlc3NvciBQYWNrYWdlIEM3IiksCisJCS5pZAkJCT0gUEM3LAorCQkucmFuZ2UJCQk9IFJBTkdFX1BBQ0tBR0UsCisJCS5nZXRfY291bnRfcGVyY2VudAk9IHNuYl9nZXRfY291bnRfcGVyY2VudCwKKwl9LAorfTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyB0c2NfYXRfbWVhc3VyZV9zdGFydDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgdHNjX2F0X21lYXN1cmVfZW5kOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyAqcHJldmlvdXNfY291bnRbU05CX0NTVEFURV9DT1VOVF07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nICpjdXJyZW50X2NvdW50W1NOQl9DU1RBVEVfQ09VTlRdOworLyogdmFsaWQgZmxhZyBmb3IgYWxsIENQVXMuIElmIGEgTVNSIHJlYWQgZmFpbGVkIGl0IHdpbGwgYmUgemVybyAqLworc3RhdGljIGludCAqaXNfdmFsaWQ7CisKK3N0YXRpYyBpbnQgc25iX2dldF9jb3VudChlbnVtIGludGVsX3NuYl9pZCBpZCwgdW5zaWduZWQgbG9uZyBsb25nICp2YWwsCisJCQl1bnNpZ25lZCBpbnQgY3B1KQoreworCWludCBtc3I7CisKKwlzd2l0Y2ggKGlkKSB7CisJY2FzZSBDNzoKKwkJbXNyID0gTVNSX0NPUkVfQzdfUkVTSURFTkNZOworCQlicmVhazsKKwljYXNlIFBDMjoKKwkJbXNyID0gTVNSX1BLR19DMl9SRVNJREVOQ1k7CisJCWJyZWFrOworCWNhc2UgUEM3OgorCQltc3IgPSBNU1JfUEtHX0M3X1JFU0lERU5DWTsKKwkJYnJlYWs7CisJY2FzZSBUU0M6CisJCW1zciA9IE1TUl9UU0M7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9OworCWlmIChyZWFkX21zcihjcHUsIG1zciwgdmFsKSkKKwkJcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNuYl9nZXRfY291bnRfcGVyY2VudCh1bnNpZ25lZCBpbnQgaWQsIGRvdWJsZSAqcGVyY2VudCwKKwkJCQkgdW5zaWduZWQgaW50IGNwdSkKK3sKKwkqcGVyY2VudCA9IDAuMDsKKworCWlmICghaXNfdmFsaWRbY3B1XSkKKwkJcmV0dXJuIC0xOworCisJKnBlcmNlbnQgPSAoMTAwLjAgKgorCQkoY3VycmVudF9jb3VudFtpZF1bY3B1XSAtIHByZXZpb3VzX2NvdW50W2lkXVtjcHVdKSkgLworCQkodHNjX2F0X21lYXN1cmVfZW5kIC0gdHNjX2F0X21lYXN1cmVfc3RhcnQpOworCisJZHByaW50KCIlczogcHJldmlvdXM6ICVsbHUgLSBjdXJyZW50OiAlbGx1IC0gKCV1KVxuIiwKKwkJc25iX2NzdGF0ZXNbaWRdLm5hbWUsIHByZXZpb3VzX2NvdW50W2lkXVtjcHVdLAorCQljdXJyZW50X2NvdW50W2lkXVtjcHVdLCBjcHUpOworCisJZHByaW50KCIlczogdHNjX2RpZmY6ICVsbHUgLSBjb3VudF9kaWZmOiAlbGx1IC0gcGVyY2VudDogJTIuZiAoJXUpXG4iLAorCSAgICAgICBzbmJfY3N0YXRlc1tpZF0ubmFtZSwKKwkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdHNjX2F0X21lYXN1cmVfZW5kIC0gdHNjX2F0X21lYXN1cmVfc3RhcnQsCisJICAgICAgIGN1cnJlbnRfY291bnRbaWRdW2NwdV0gLSBwcmV2aW91c19jb3VudFtpZF1bY3B1XSwKKwkgICAgICAgKnBlcmNlbnQsIGNwdSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmJfc3RhcnQodm9pZCkKK3sKKwlpbnQgbnVtLCBjcHU7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbDsKKworCWZvciAobnVtID0gMDsgbnVtIDwgU05CX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVfY291bnQ7IGNwdSsrKSB7CisJCQlzbmJfZ2V0X2NvdW50KG51bSwgJnZhbCwgY3B1KTsKKwkJCXByZXZpb3VzX2NvdW50W251bV1bY3B1XSA9IHZhbDsKKwkJfQorCX0KKwlzbmJfZ2V0X2NvdW50KFRTQywgJnRzY19hdF9tZWFzdXJlX3N0YXJ0LCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzbmJfc3RvcCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisJaW50IG51bSwgY3B1OworCisJc25iX2dldF9jb3VudChUU0MsICZ0c2NfYXRfbWVhc3VyZV9lbmQsIDApOworCisJZm9yIChudW0gPSAwOyBudW0gPCBTTkJfQ1NUQVRFX0NPVU5UOyBudW0rKykgeworCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdV9jb3VudDsgY3B1KyspIHsKKwkJCWlzX3ZhbGlkW2NwdV0gPSAhc25iX2dldF9jb3VudChudW0sICZ2YWwsIGNwdSk7CisJCQljdXJyZW50X2NvdW50W251bV1bY3B1XSA9IHZhbDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBpbnRlbF9zbmJfbW9uaXRvcjsKKworc3RhdGljIHN0cnVjdCBjcHVpZGxlX21vbml0b3IgKnNuYl9yZWdpc3Rlcih2b2lkKQoreworCWludCBudW07CisKKwlpZiAoY3B1cG93ZXJfY3B1X2luZm8udmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwKKwkgICAgfHwgY3B1cG93ZXJfY3B1X2luZm8uZmFtaWx5ICE9IDYpCisJCXJldHVybiBOVUxMOworCisJaWYgKGNwdXBvd2VyX2NwdV9pbmZvLm1vZGVsICE9IDB4MkEKKwkgICAgJiYgY3B1cG93ZXJfY3B1X2luZm8ubW9kZWwgIT0gMHgyRCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpc192YWxpZCA9IGNhbGxvYyhjcHVfY291bnQsIHNpemVvZihpbnQpKTsKKwlmb3IgKG51bSA9IDA7IG51bSA8IFNOQl9DU1RBVEVfQ09VTlQ7IG51bSsrKSB7CisJCXByZXZpb3VzX2NvdW50W251bV0gPSBjYWxsb2MoY3B1X2NvdW50LAorCQkJCQlzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJCWN1cnJlbnRfY291bnRbbnVtXSAgPSBjYWxsb2MoY3B1X2NvdW50LAorCQkJCQlzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKSk7CisJfQorCWludGVsX3NuYl9tb25pdG9yLm5hbWVfbGVuID0gc3RybGVuKGludGVsX3NuYl9tb25pdG9yLm5hbWUpOworCXJldHVybiAmaW50ZWxfc25iX21vbml0b3I7Cit9CisKK3ZvaWQgc25iX3VucmVnaXN0ZXIodm9pZCkKK3sKKwlpbnQgbnVtOworCWZyZWUoaXNfdmFsaWQpOworCWZvciAobnVtID0gMDsgbnVtIDwgU05CX0NTVEFURV9DT1VOVDsgbnVtKyspIHsKKwkJZnJlZShwcmV2aW91c19jb3VudFtudW1dKTsKKwkJZnJlZShjdXJyZW50X2NvdW50W251bV0pOworCX0KK30KKworc3RydWN0IGNwdWlkbGVfbW9uaXRvciBpbnRlbF9zbmJfbW9uaXRvciA9IHsKKwkubmFtZQkJCT0gIlNhbmR5QnJpZGdlIiwKKwkuaHdfc3RhdGVzCQk9IHNuYl9jc3RhdGVzLAorCS5od19zdGF0ZXNfbnVtCQk9IFNOQl9DU1RBVEVfQ09VTlQsCisJLnN0YXJ0CQkJPSBzbmJfc3RhcnQsCisJLnN0b3AJCQk9IHNuYl9zdG9wLAorCS5kb19yZWdpc3RlcgkJPSBzbmJfcmVnaXN0ZXIsCisJLnVucmVnaXN0ZXIJCT0gc25iX3VucmVnaXN0ZXIsCisJLm5lZWRzX3Jvb3QJCT0gMSwKKwkub3ZlcmZsb3dfcwkJPSA5MjIwMDAwMDAgLyogOTIyMzM3MjAzIHNlY29uZHMgVFNDIG92ZXJmbG93CisJCQkJCSAgICAgICBhdCAyMEdIeiAqLworfTsKKyNlbmRpZiAvKiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pICovCmRpZmYgLS1naXQgYS90b29scy9wb3dlci9jcHVwb3dlci91dGlscy92ZXJzaW9uLWdlbi5zaCBiL3Rvb2xzL3Bvd2VyL2NwdXBvd2VyL3V0aWxzL3ZlcnNpb24tZ2VuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVlYzQxYzUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wb3dlci9jcHVwb3dlci91dGlscy92ZXJzaW9uLWdlbi5zaApAQCAtMCwwICsxLDM1IEBACisjIS9iaW4vc2gKKyMKKyMgU2NyaXB0IHdoaWNoIHByaW50cyBvdXQgdGhlIHZlcnNpb24gdG8gdXNlIGZvciBidWlsZGluZyBjcHVwb3dlcnV0aWxzLgorIyBNdXN0IGJlIGNhbGxlZCBmcm9tIHRvb2xzL3Bvd2VyL2NwdXBvd2VyLworIyAKKyMgSGVhdmlseSBiYXNlZCBvbiB0b29scy9wZXJmL3V0aWwvUEVSRi1WRVJTSU9OLUdFTiAuCisKK0xGPScKKycKKworIyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhIC5naXQgdG8gZ2V0IHRoZSB2ZXJzaW9uIGZyb20gZ2l0IGRlc2NyaWJlCisjIG90aGVyd2lzZSB0cnkgdG8gZ2V0IHRoZSB2ZXJzaW9uIGZyb20gdGhlIGtlcm5lbCBtYWtlZmlsZQoraWYgdGVzdCAtZCAuLi8uLi8uLi8uZ2l0IC1vIC1mIC4uLy4uLy4uLy5naXQgJiYKKwlWTj0kKGdpdCBkZXNjcmliZSAtLWFiYnJldj00IEhFQUQgMj4vZGV2L251bGwpICYmCisJY2FzZSAiJFZOIiBpbgorCSokTEYqKSAoZXhpdCAxKSA7OworCXZbMC05XSopCisJCWdpdCB1cGRhdGUtaW5kZXggLXEgLS1yZWZyZXNoCisJCXRlc3QgLXogIiQoZ2l0IGRpZmYtaW5kZXggLS1uYW1lLW9ubHkgSEVBRCAtLSkiIHx8CisJCVZOPSIkVk4tZGlydHkiIDs7CisJZXNhYwordGhlbgorCVZOPSQoZWNobyAiJFZOIiB8IHNlZCAtZSAncy8tLy4vZycpOworZWxzZQorCWV2YWwgJChncmVwICdeVkVSU0lPTltbOnNwYWNlOl1dKj0nIC4uLy4uLy4uL01ha2VmaWxlfHRyIC1kICcgJykKKwlldmFsICQoZ3JlcCAnXlBBVENITEVWRUxbWzpzcGFjZTpdXSo9JyAuLi8uLi8uLi9NYWtlZmlsZXx0ciAtZCAnICcpCisJZXZhbCAkKGdyZXAgJ15TVUJMRVZFTFtbOnNwYWNlOl1dKj0nIC4uLy4uLy4uL01ha2VmaWxlfHRyIC1kICcgJykKKwlldmFsICQoZ3JlcCAnXkVYVFJBVkVSU0lPTltbOnNwYWNlOl1dKj0nIC4uLy4uLy4uL01ha2VmaWxlfHRyIC1kICcgJykKKworCVZOPSIke1ZFUlNJT059LiR7UEFUQ0hMRVZFTH0uJHtTVUJMRVZFTH0ke0VYVFJBVkVSU0lPTn0iCitmaQorCitWTj0kKGV4cHIgIiRWTiIgOiB2KidcKC4qXCknKQorCitlY2hvICRWTgo=