ZGlmZiAtLWdpdCBhL0FuZHJvaWQubWsgYi9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NWQ1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsNTYgQEAKK2lmbmVxICgkKFRBUkdFVF9TSU1VTEFUT1IpLHRydWUpCisKK0xPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX1NSQ19GSUxFUzo9XAorCWRidXRpbC5jIGJ1ZmZlci5jIFwKKwlkc3MuYyBiaWdudW0uYyBcCisJc2lnbmtleS5jIHJzYS5jIHJhbmRvbS5jIFwKKwlxdWV1ZS5jIFwKKwlhdG9taWNpby5jIGNvbXBhdC5jICBmYWtlLXJmYzI1NTMuYworTE9DQUxfU1JDX0ZJTEVTKz1cCisJY29tbW9uLXNlc3Npb24uYyBwYWNrZXQuYyBjb21tb24tYWxnby5jIGNvbW1vbi1rZXguYyBcCisJY29tbW9uLWNoYW5uZWwuYyBjb21tb24tY2hhbnNlc3Npb24uYyB0ZXJtY29kZXMuYyBcCisJdGNwLWFjY2VwdC5jIGxpc3RlbmVyLmMgcHJvY2Vzcy1wYWNrZXQuYyBcCisJY29tbW9uLXJ1bm9wdHMuYyBjaXJjYnVmZmVyLmMKKyMgbG9naW5yZWMuYyAKK0xPQ0FMX1NSQ19GSUxFUys9XAorCWNsaS1hbGdvLmMgY2xpLW1haW4uYyBjbGktYXV0aC5jIGNsaS1hdXRocGFzc3dkLmMgY2xpLWtleC5jIFwKKwljbGktc2Vzc2lvbi5jIGNsaS1zZXJ2aWNlLmMgY2xpLXJ1bm9wdHMuYyBjbGktY2hhbnNlc3Npb24uYyBcCisJY2xpLWF1dGhwdWJrZXkuYyBjbGktdGNwZndkLmMgY2xpLWNoYW5uZWwuYyBjbGktYXV0aGludGVyYWN0LmMKK0xPQ0FMX1NSQ19GSUxFUys9bmV0YnNkX2dldHBhc3MuYworCitMT0NBTF9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYnRvbW1hdGggbGlidG9tY3J5cHQKKworTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUX09QVElPTkFMX0VYRUNVVEFCTEVTKQorTE9DQUxfTU9EVUxFX1RBR1MgOj0gZW5nCitMT0NBTF9NT0RVTEUgOj0gc3NoCitMT0NBTF9DX0lOQ0xVREVTICs9ICQoTE9DQUxfUEFUSCkvbGlidG9tbWF0aCAKK0xPQ0FMX0NfSU5DTFVERVMgKz0gJChMT0NBTF9QQVRIKS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycworTE9DQUxfQ0ZMQUdTICs9IC1ERFJPUEJFQVJfQ0xJRU5UCisKK2luY2x1ZGUgJChCVUlMRF9FWEVDVVRBQkxFKQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfU1JDX0ZJTEVTOj1cCisJc2NwLmMgcHJvZ3Jlc3NtZXRlci5jIGF0b21pY2lvLmMgc2NwbWlzYy5jCisKK0xPQ0FMX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGlidG9tbWF0aCBsaWJ0b21jcnlwdAorCitMT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfT1BUSU9OQUxfRVhFQ1VUQUJMRVMpCisKK0xPQ0FMX01PRFVMRV9UQUdTIDo9IGRlYnVnCisKK0xPQ0FMX01PRFVMRSA6PSBzY3AKK0xPQ0FMX0NfSU5DTFVERVMgKz0gJChMT0NBTF9QQVRIKS9saWJ0b21tYXRoIAorTE9DQUxfQ19JTkNMVURFUyArPSAkKExPQ0FMX1BBVEgpL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzCitMT0NBTF9DRkxBR1MgKz0gLUREUk9QQkVBUl9DTElFTlQgLURQUk9HUkVTU19NRVRFUgorCitpbmNsdWRlICQoQlVJTERfRVhFQ1VUQUJMRSkKKworZW5kaWYgICMgVEFSR0VUX1NJTVVMQVRPUiAhPSB0cnVlCisKKworaW5jbHVkZSAkKGNhbGwgYWxsLW1ha2VmaWxlcy11bmRlciwkKExPQ0FMX1BBVEgpKQpkaWZmIC0tZ2l0IGEvQ0hBTkdFUyBiL0NIQU5HRVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVlNTBhMAotLS0gL2Rldi9udWxsCisrKyBiL0NIQU5HRVMKQEAgLTAsMCArMSw2MDEgQEAKKzAuNDkgLSBGcmkgMjMgRmVicnVhcnkgMjAwNworCistIFNlY3VyaXR5OiBkYmNsaWVudCBwcmV2aW91c2x5IHdvdWxkIHByb21wdCB0byBjb25maXJtIGEgCisgIG1pc21hdGNoaW5nIGhvc3RrZXkgYnV0IHdvdWxkbid0IHdhcm4gbG91ZGx5LiBJdCB3aWxsIG5vdworICBleGl0IHVwb24gYSBtaXNtYXRjaC4KKworLSBDb21waWxlIGZpeGVzLCBtYWtlIHN1cmUgdGhhdCBhbGwgdmFyaWFibGUgZGVmaW5pdGlvbnMgYXJlIGF0IHRoZSBzdGFydAorICBvZiBhIHNjb3BlLgorCistIEFkZGVkIC1QIHBpZGZpbGUgYXJndW1lbnQgdG8gdGhlIHNlcnZlciAoZnJvbSBTd2VuIFNjaGlsbGlnKQorCistIEFkZCAtTiBkYmNsaWVudCBvcHRpb24gZm9yICJubyBjb21tYW5kIgorCistIEFkZCAtZiBkYmNsaWVudCBvcHRpb24gZm9yICJiYWNrZ3JvdW5kIGFmdGVyIGF1dGgiCisKKy0gQWRkIGFiaWxpdHkgdG8gbGltaXQgYmluZGluZyB0byBwYXJ0aWN1bGFyIGFkZHJlc3NlcywgdXNlIAorICAtcCBbYWRkcmVzczpdcG9ydCwgcGF0Y2ggZnJvbSBNYXgtR2VyZCBSZXR6bGFmZi4KKworLSBUcnkgdG8gZmluYWxseSBmaXggc3NfZmFtaWx5IGNvbXBpbGF0aW9uIHByb2JsZW1zIChmb3Igb2xkCisgIGdsaWJjIHN5c3RlbXMpCisKKy0gRml4IGZpbmRpbmcgcmVsYXRpdmUtcGF0aCBzZXJ2ZXIgaG9zdGtleXMgd2hlbiBydW5uaW5nIGRhZW1vbml6ZWQKKworLSBVc2UgJEhPTUUgaW4gcHJlZmVyZW5jZSB0byB0aGF0IGZyb20gL2V0Yy9wYXNzd2QsIHNvIHRoYXQKKyAgZGJjbGllbnQgY2FuIHN0aWxsIHdvcmsgb24gYnJva2VuIHN5c3RlbXMuCisKKy0gRml4IHZhcmlvdXMgaXNzdWVzIGZvdW5kIGJ5IEtsb2N3b3JrIGRlZmVjdCBhbmFseXNpcywgbW9zdGx5IG1lbW9yeSBsZWFrcworICBhbmQgZXJyb3ItaGFuZGxpbmcuIFRoYW5rcyB0byBLbG9jd29yayBmb3IgdGhlaXIgc2VydmljZS4KKworLSBJbXByb3ZlIGJ1aWxkaW5nIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5CisKKy0gQWRkIGNvbXBpbGUtdGltZSBMT0dfQ09NTUFORFMgb3B0aW9uIHRvIGxvZyB1c2VyIGNvbW1hbmRzCisKKy0gQWRkICcteScgZmxhZyB0byBkYmNsaWVudCB0byB1bmNvbmRpdGlvbmFsbHkgYWNjZXB0IGhvc3Qga2V5cywKKyAgcGF0Y2ggZnJvbSBMdWNpYW5vIE1pZ3VlbCBGZXJyZWlyYSBSb2NoYQorCistIFJldHVybiBpbW1lZGlhdGVseSBmb3IgInNsZWVwIDEwICYgZWNobyBmb28iLCByYXRoZXIgdGhhbiB3YWl0aW5nCisgIGZvciB0aGUgc2xlZXAgdG8gcmV0dXJuIChwb2ludGVkIG91dCBieSBSb2IgTGFuZGxleSkuCisgIAorLSBBdm9pZCBoYW5naW5nIGFmdGVyIGV4aXQgaW4gY2VydGFpbiBjYXNlcyAoc3VjaCBhcyBzY3ApCisKKy0gVmFyaW91cyBtaW5vciBmaXhlcywgaW4gcGFydGljdWxhciB2YXJpb3VzIGxlYWtzIHJlcG9ydGVkIGJ5CisgIEVyaWsgSG92bGFuZAorICAKKy0gRGlzYWJsZSBjb3JlIGR1bXBzIG9uIHN0YXJ0dXAKKworLSBEb24ndCBlcmFzZSBvdmVyIGV2ZXJ5IHNpbmdsZSBidWZmZXIsIHNpbmNlIGl0IHdhcyBhIGJvdHRsZW5lY2suCisgIE9uIHN5c3RlbXMgd2hlcmUgaXQgcmVhbGx5IG1hdHRlcnMsIGVuY3J5cHRlZCBzd2FwIHNob3VsZCBiZSB1dGlsaXNlZC4KKworLSBSZWFkIC9kZXYvW3VdcmFuZG9tIG9ubHkgb25jZSBhdCBzdGFydHVwIHRvIGNvbnNlcnZlIGtlcm5lbCBlbnRyb3B5CisKKy0gVXBncmFkZSB0byBMaWJUb21DcnlwdCAxLjE2IGFuZCBMaWJUb21NYXRoIDAuNDAKKworLSBVcGdyYWRlIGNvbmZpZy5zdGF0dXMgYW5kIGNvbmZpZy5ndWVzcyAKKworMC40OC4xIC0gU2F0IDExIE1hcmNoIDIwMDYKKworLSBDb21waWxlIGZpeCBmb3Igc2NwCisKKzAuNDggLSBUaHVycyA5IE1hcmNoIDIwMDYKKworLSBDaGVjayB0aGF0IHRoZSBjaXJjdWxhciBidWZmZXIgaXMgcHJvcGVybHkgZW1wdHkgYmVmb3JlCisgIGNsb3NpbmcgYSBjaGFubmVsLCB3aGljaCBjb3VsZCBjYXVzZSB0cnVuY2F0ZWQgdHJhbnNmZXJzCisgICh0aGFua3MgdG8gVG9tYXMgVmFuZWsgZm9yIGhlbHBpbmcgdHJhY2sgaXQgZG93bikKKworLSBJbXBsZW1lbnQgcGVyLUlQIHByZS1hdXRoZW50aWNhdGlvbiBjb25uZWN0aW9uIGxpbWl0cyAKKyAgKGFmdGVyIHNvbWUgcG9raW5nIGZyb20gUGFibG8gRmVybmFuZGV6KQorCistIEV4aXQgZ3JhY2VmdWxseSBpZiB0cnlpbmcgdG8gY29ubmVjdCB0byBhcyBTU0ggdjEgc2VydmVyIAorICAocmVwb3J0ZWQgYnkgUnVzaGkgTGFsYSkKKworLSBPbmx5IHJlYWQgL2Rldi9yYW5kb20gb25jZSBhdCBzdGFydHVwIHdoZW4gaW4gbm9uLWluZXRkIG1vZGUKKworLSBBbGxvdyBjdHJsLWMgdG8gY2xvc2UgYSBkYmNsaWVudCBwYXNzd29yZCBwcm9tcHQgKG1heQorICBzdGlsbCBoYXZlIHRvIHByZXNzIGVudGVyIG9uIHNvbWUgcGxhdGZvcm1zKQorCistIE1lcmdlZCBpbiB1Q2xpbnV4IHBhdGNoIGZvciBpbmV0ZCBtb2RlCisKKy0gVXBkYXRlZCB0byBzY3AgZnJvbSBPcGVuU1NIIDQuM3AyIC0gZml4ZXMgYSBzZWN1cml0eSBpc3N1ZQorICB3aGVyZSB1c2Ugb2Ygc3lzdGVtKCkgY291bGQgY2F1c2UgdXNlcnMgdG8gZXhlY3V0ZSBhcmJpdHJhcnkKKyAgY29kZSB0aHJvdWdoIG1hbGZvcm1lZCBmaWxlbmFtZXMsIHJlZiBDVkUtMjAwNi0wMjI1CisKKzAuNDcgLSBUaHVycyBEZWMgOCAyMDA1CisKKy0gU0VDVVJJVFk6IGZpeCBmb3IgYnVmZmVyIGFsbG9jYXRpb24gZXJyb3IgaW4gc2VydmVyIGNvZGUsIGNvdWxkIHBvdGVudGlhbGx5CisgIGFsbG93IGF1dGhlbnRpY2F0ZWQgdXNlcnMgdG8gZ2FpbiBlbGV2YXRlZCBwcml2aWxlZ2VzLiBBbGwgbXVsdGktdXNlciBzeXN0ZW1zCisgIHJ1bm5pbmcgdGhlIHNlcnZlciBzaG91bGQgdXBncmFkZSAob3IgYXBwbHkgdGhlIHBhdGNoIGF2YWlsYWJsZSBvbiB0aGUKKyAgRHJvcGJlYXIgd2VicGFnZSkuCisKKy0gRml4IGNoYW5uZWwgaGFuZGxpbmcgY29kZSBzbyB0aGF0IHJlZGlyZWN0aW5nIHRvIC9kZXYvbnVsbCBkb2Vzbid0IHVzZQorICAxMDAlIENQVS4KKworLSBUdXJuIG9uIHpsaWIgY29tcHJlc3Npb24gZm9yIGRiY2xpZW50LgorCistIFNldCAibG93IGRlbGF5IiBUT1MgYml0LCBjYW4gc2lnbmlmaWNhbnRseSBpbXByb3ZlIGludGVyYWN0aXZpdHkKKyAgb3ZlciBzb21lIGxpbmtzLgorCistIEFkZGVkIGNsaWVudCBrZXlib2FyZC1pbnRlcmFjdGl2ZSBtb2RlIHN1cHBvcnQsIGFsbG93cyBvcGVyYXRpb24gd2l0aAorICBuZXdlciBPcGVuU1NIIHNlcnZlcnMgaW4gZGVmYXVsdCBjb25maWcuCisKKy0gTG9nIHdoZW4gcHVia2V5IGF1dGggZmFpbHMgYmVjYXVzZSBvZiBiYWQgfi8uc3NoL2F1dGhvcml6ZWRfa2V5cyBwZXJtaXNzaW9ucworCistIEltcHJvdmUgbG9nZ2luZyBvZiBhc3NlcnRpb25zCisKKy0gQWRkZWQgYWVzLTI1NiBjaXBoZXIgYW5kIHNoYTEtOTYgaG1hYy4KKworLSBGaXggdHdvZmlzaCBzbyB0aGF0IGl0IGFjdHVhbGx5IHdvcmtzLgorCistIEltcHJvdmUgUEFNIHByb21wdCBjb21wYXJpc29uLgorCistIEFkZGVkIC1nIChkYmNsaWVudCkgYW5kIC1hIChkcm9wYmVhciBzZXJ2ZXIpIG9wdGlvbnMgdG8gYWxsb3cKKyAgY29ubmVjdGlvbnMgdG8gbGlzdGVuaW5nIGZvcndhcmRlZCBwb3J0cyBmcm9tIHJlbW90ZSBtYWNoaW5lcy4KKworLSBWYXJpb3VzIG90aGVyIG1pbm9yIGZpeGVzCisKKy0gQ29tcGlsZSBmaXhlcyBmb3IgZ2xpYmMgMi4xIChzc19mYW1pbHkgdnMgX19zc19mYW1pbHkpIGFuZCBOZXRCU0QKKyAgKG5ldGluZXQvaW5fc3lzdG0uaCBuZWVkcyB0byBiZSBpbmNsdWRlZCkuCisKKzAuNDYgLSBTYXQgSnVseSA5IDIwMDUKKworLSBGaXggbG9uZy1zdGFuZGluZyBidWcgd2hpY2ggY2F1c2VkIGNvbm5lY3Rpb25zIHRvIGJlIGNsb3NlZCBpZiBhbiBzc2gtYWdlbnQKKyAgc29ja2V0IHdhcyBubyBsb25nZXIgYXZhaWxhYmxlCisKKy0gUHJpbnQgYSB3YXJuaW5nIGlmIHdlIHNlZW0gdG8gYmUgYmxvY2tpbmcgb24gL2Rldi9yYW5kb20gCisgIChzdWdnZXN0ZWQgYnkgUGF1bCBGb3gpCisKKy0gRml4ZWQgYSBtZW1vcnkgbGVhayBpbiBEU1MgY29kZSAodGhhbmtzIHRvIEJvcmlzIEJlcmV6b3Zza3kgZm9yIHRoZSBwYXRjaCkKKworLSBkYmNsaWVudCAtTCBubyBsb25nZXIgc2VnZmF1bHRzLCBhbGxvY2F0ZSBjb3JyZWN0IGJ1ZmZlciBzaXplICh0aGFua3MKKyAgdG8gRGF2aWQgQ29vayBmb3IgcmVwb3J0aW5nIGl0LCBhbmQgQ2hyaXN0b3BoZXIgRmF5bG9yIGZvciBpbmRlcGVuZGVudGx5CisgIHNlbmRpbmcgaW4gYSBwYXRjaCkKKworLSBBZGRlZCBSU0EgYmxpbmRpbmcgdG8gc2lnbmluZyBjb2RlIChzdWdnZXN0ZWQgYnkgRGFuIEthbWluc2t5KQorCistIFJlYXJyYW5nZWQgYmlnbnVtIHJlYWRpbmcvcmFuZG9tIGdlbmVyYXRpb24gY29kZQorCistIFJlc2V0IHRoZSBub24tYmxvY2tpbmcgc3RhdHVzIG9uIHN0ZGVyciBhbmQgc3Rkb3V0IGFzIHdlbGwgYXMgc3RkaW4sCisgIGZpeGVzIGEgcHJvYmxlbSB3aGVyZSB0aGUgc2hlbGwgcnVubmluZyBkYmNsaWVudCB3aWxsIGV4aXQgKHRoYW5rcyB0byAKKyAgQnJlbnQgUm9tYW4gZm9yIHJlcG9ydGluZyBpdCkKKworLSBGaXggc28gdGhhdCBhbGwgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIHNvIHRoZSBjaGlsZCBzaGVsbCBkb2Vzbid0CisgIGluaGVyaXQgZGVzY3JpcHRvcnMgKHRoYW5rcyB0byBMaW5kZW4gTWF5IGZvciB0aGUgcGF0Y2gpCisKKy0gQ2hhbmdlIHNpZ25rZXkuYyB0byBhdm9pZCBnY2MgNCBnZW5lcmF0aW5nIGluY29ycmVjdCBjb2RlCisKKy0gQWZ0ZXIgYm90aCBzaWRlcyBvZiBhIGZpbGUgZGVzY3JpcHRvciBoYXZlIGJlZW4gc2h1dGRvd24oKSwgY2xvc2UoKQorICBpdCB0byBhdm9pZCBsZWFraW5nIGRlc2NyaXB0b3JzICh0aGFua3MgdG8gQXJpIEh5dHRpbmVuIGZvciBhIHBhdGNoKQorCistIFVwZGF0ZSB0byBMaWJUb21DcnlwdCAxLjA1IGFuZCBMaWJUb21NYXRoIDAuMzUKKworMC40NSAtIE1vbiBNYXJjaCA3IDIwMDUKKworLSBNYWtlZmlsZSBubyBsb25nZXIgYXBwZW5kcyAnc3RhdGljJyB0byBzdGF0aWNhbGx5IGxpbmtlZCBiaW5hcmllcworCistIEFkZCBvcHRpb25hbCBTU0hfQVNLUEFTUyBzdXBwb3J0IHRvIHRoZSBjbGllbnQKKworLSBSZXNwZWN0IEhPU1RfTE9PS1VQIG9wdGlvbgorCistIEZpeCBhY2NpZGVudGFsbHkgcmVtb3ZlZCAicmV0dXJuOyIgc3RhdGVtZW50IHdoaWNoIHdhcyByZW1vdmVkIGluIDAuNDQKKyAgKGNhdXNpbmcgY2xpZW50cyB3aGljaCBzZW50IGFuIGVtcHR5IHRlcm1pbmFsLW1vZGVzIHN0cmluZyB0byBmYWlsIHRvCisgIGNvbm5lY3QgLSBpbmNsdWRpbmcgcHNzaCwgc3NoLmNvbSwgZGFuZ2VyIGhpcHRvcCkuIChwYXRjaGVzCisgIGluZGVwZW5kZW50bHkgZnJvbSBQYXVsIEZveCwgRGF2aWQgSG9yd2l0dCBhbmQgU3Zlbi1PbGEgVHVlY2tlKQorCistIFJlYWQgInkvbiIgcmVzcG9uc2UgZm9yIGZpbmdlcnByaW50cyBmcm9tIC9kZXYvdHR5IGRpcmVjdGx5IHNvIHRoYXQgZGJjbGllbnQKKyAgd2lsbCB3b3JrIHdpdGggc2NwLgorCiswLjQ0IC0gTW9uIEphbiAzIDIwMDUKKworLSBTRUNVUklUWTogRml4IGZvciBQQU0gYXV0aCBzbyB0aGF0IHVzZXJuYW1lcyBhcmUgbG9nZ2VkIGFuZCBjb252ZXJzYXRpb24KKyAgZnVuY3Rpb24gcmVzcG9uc2VzIGFyZSBhbGxvY2F0ZWQgY29ycmVjdGx5IC0gYWxsIDAuNDR0ZXN0NCB1c2VycyB3aXRoIFBBTQorICBjb21waWxlZCBpbiAobm90IGRlZmF1bHQpIGFyZSBhZHZpc2VkIHRvIHVwZ3JhZGUuCisKKy0gRml4IGNhbGxzIHRvIGdldG5hbWVpbmZvKCkgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBTb2xhcmlzCisKKy0gUHJpc3RpbmUgY29tcGlsYXRpb24gd29ya3MgKHJ1biAnY29uZmlndXJlJyBmcm9tIGEgZnJlc2ggZGlyIGFuZCBtYWtlIGl0CisgIHRoZXJlKQorCistIEZpeGVzIGZvciBjb21waWxpbmcgd2l0aCBtb3N0IG9wdGlvbnMgZGlzYWJsZWQuCisKKy0gVXBncmFkZWQgdG8gTGliVG9tQ3J5cHQgMC45OSBhbmQgTGliVG9tTWF0aCAwLjMyCisKKy0gTWFrZSBzdXJlIHRoYXQgemVyb2luZyBvdXQgb2YgdmFsdWVzIGluIExUTSBhbmQgTFRDIHdvbid0IGdldCBvcHRpbWlzZWQgYXdheQorCistIFJlbW92ZWQgdW51c2VkIGZ1bmN0aW9ucyBmcm9tIGxvZ2lucmVjLmMKKworLSAvZGV2L3JhbmRvbSBpcyBub3cgdGhlIGRlZmF1bHQgZW50cm9weSBzb3VyY2UgcmF0aGVyIHRoYW4gL2Rldi91cmFuZG9tCisKKy0gTG9nZ2luZyBvZiBJUHMgaW4gYXV0aCBzdWNjZXNzL2ZhaWx1cmUgbWVzc2FnZXMgZm9yIGltcHJvdmVkIGdyZXBwYWJpbGl0eQorCistIEZpeCBkYmNsaWVudCBzbyB0aGF0ICJzY3AgLWkga2V5ZmlsZSIgd29ya3MuIChJdCBjYW4gaGFuZGxlICItaWtleWZpbGUKKyAgcHJvcGVybHkpCisKKy0gQXZvaWQgYSByYWNlIGluIHNlcnZlciBzaGVsbC1oYW5kbGluZyBjb2RlIHdoaWNoIHByZXZlbnRzIHRoZSBleGl0LWNvZGUKKyAgZnJvbSBiZWluZyByZXR1cm5lZCB0byB0aGUgY2xpZW50IGluIHNvbWUgY2lyY3Vtc3RhbmNlcy4KKworLSBNYWtlZmlsZSBtb2RpZmllZCBzbyB0aGF0IGluc3RhbGwgdGFyZ2V0IHdvcmtzIGNvcnJlY3RseSAoZG9lc24ndCB0cnkKKyAgdG8gaW5zdGFsbCAiYWxsIiBiaW5hcnkpIC0gcGF0Y2ggZnJvbSBKdWVyZ2VuIERhdWJlcnQKKworLSBWYXJpb3VzIG1pbm9yIGZpeGVzIGFuZCBjb21waWxlIHdhcm5pbmdzLgorCiswLjQ0dGVzdDQgLSBUdWUgU2VwdCAxNCAyMDA0IDIxOjE1OjU0ICswODAwCisKKy0gRml4IGluZXRkIG1vZGUgc28gaXQgYWN0dWFsbHkgbG9hZHMgdGhlIGhvc3RrZXlzIChvb3BzKQorCistIENoYW5nZWQgRFJPUEJFQVJfREVGUE9SVCBwcm9wZXJseSBldmVyeXdoZXJlCisKKy0gRml4IGEgc21hbGwgbWVtb3J5IGxlYWsgaW4gdGhlIGF1dGggY29kZQorCistIFdDT1JFRFVNUCBpcyBvbmx5IHVzZWQgb24gc3lzdGVtcyB3aGljaCBzdXBwb3J0IGl0IChpZSBub3QgY3lnd2luIG9yIEFJWCkKKworLSBDaGVjayAoYW5kIGZhaWwgZm9yKSBjYXNlcyB3aGVuIHdlIGNhbid0IG5lZ290aWF0ZSBhbGdvcml0aG1zIHdpdGggdGhlCisgIHJlbW90ZSBzaWRlIHN1Y2Nlc3NmdWxseSAocmF0aGVyIHRoYW4gYm9tYmluZyBvdXQgdW5ncmFjZWZ1bGx5KQorCistIEhhbmRsZSBhdXRob3JpemVkX2tleXMgZmlsZXMgd2l0aG91dCBhIHRlcm1pbmF0aW5nIG5ld2xpbmUKKworLSBGaWRkbGUgdGhlIGNoYW5uZWwgcmVjZWl2ZSB3aW5kb3cgc2l6ZSBmb3IgcG9zc2libHkgYmV0dGVyIHBlcmZvcm1hbmNlCisKKy0gQWRkZWQgaW4gdGhlIFBBTSBhdXRoZW50aWNhdGlvbiBjb2RlIChmaW5hbGx5ISB0aGFua3MgdG8gTWFydGluIENhcmxzc29uKQorCiswLjQ0dGVzdDMgLSBGcmkgQXVnIDI3IDIyOjIwOjU0ICswODAwCisKKy0gRml4ZWQgYSBidW5jaCBvZiB3YXJuaW5ncy4KKworLSBzY3Agd29ya3MgY29ycmVjdGx5IHdoZW4gcGFzc2VkIGEgdXNlcm5hbWUgKGZpeCBmb3IgdGhlIGRiY2xpZW50IHByb2dyYW0KKyAgaXRzZWxmIGFzIHdlbGwsICItbG1hdHQiIHdvcmtzIGFzIHdlbGwgYXMgIi1sIG1hdHQiKS4KKworLSBSZW1vdmUgdW5yZXF1aXJlZCBkZWJpYW4gZmlsZXMKKworLSBFeGl0IHdpdGggdGhlIHJlbW90ZSBwcm9jZXNzJ3MgcmV0dXJuIGNvZGUgZm9yIGRiY2xpZW50CisKKy0gRGlzcGxheSBzdGRlcnIgbWVzc2FnZXMgZnJvbSB0aGUgc2VydmVyIGluIHRoZSBjbGllbnQKKworLSBBZGQgY2lyY3VsYXIgYnVmZmVyaW5nIHRvIHRoZSBjaGFubmVsIGNvZGUuIFRoaXMgc2hvdWxkIGRyYW1hdGljYWxseSByZWR1Y2UKKyAgdGhlIGFtb3VudCBvZiBiYWNrdHJhZmZpYyBzZW50IGluIHJlc3BvbnNlIHRvIHRyYWZmaWMgaW5jb21pbmcgdG8gdGhlCisgIERyb3BiZWFyIGVuZCAtIGltcHJvdmVzIGhpZ2gtbGF0ZW5jeSBwZXJmb3JtYW5jZSAoaWUgZGlhbHVwKS4KKworLSBWYXJpb3VzIG90aGVyIHJlbGF0ZWQgY2hhbm5lbC1oYW5kbGluZyBmaXh1cHMuCisKKy0gQWxsb3cgbGVhZGluZyBsaW5lcyBpbiB0aGUgYmFubmVyIHdoZW4gY29ubmVjdGluZyB0byBzZXJ2ZXJzCisKKy0gRml4ZWQgcHJpbnRpbmcgb3V0IGVycm9ycyBvbnRvIHRoZSBuZXR3b3JrIHNvY2tldCB3aXRoIHN0ZGVyciAoZm9yIGluZXRkCisgIG1vZGUgd2hlbiB1c2luZyB4aW5ldGQpCisKKy0gUmVtb3ZlIG9ic2VsZXRlIGRvY3VtZW50YXRpb24KKworLSBGaXggYSBudWxsLXBvaW50ZXIgZXhjZXB0aW9uIHdoZW4gdHJ5aW5nIHRvIGZyZWUgbm9uLWV4aXN0YW50IGxpc3RlbmVycworICBhdCBjbGVhbnVwLgorCistIERFQlVHX1RSQUNFIG5vdyBvbmx5IHdvcmtzIGlmIHlvdSBhZGQgIi12IiB0byB0aGUgcHJvZ3JhbSBjb21tYW5kbGluZQorCistIERvbid0IGxlYXZlIHN0ZGluIG5vbi1ibG9ja2luZyBvbiBleGl0IC0gdGhpcyBjYXVzZWQgdGhlIHBhcmVudCBzaGVsbAorICBvZiBkYmNsaWVudCB0byBjbG9zZSB3aGVuIGRiY2xpZW50IGV4aXRlZCwgZm9yIHNvbWUgc2hlbGxzIGluIEJ1c3lCb3gKKworLSBTZXJ2ZXIgY29ubmVjdGlvbnMgbm8gbG9uZ2VyIHRpbWVvdXQgYWZ0ZXIgNSBtaW51dGVzCisKKy0gRml4ZWQgc3R1cGlkIERTUyBob3N0a2V5IHR5cG8gKHNlcnZlciBjb3VsZG4ndCBsb2FkIGhvc3Qga2V5cykKKworMC40NHRlc3QyIC0gVHVlcyBBdWcgMTcgMjAwNCAxNzo0Mzo1NCArMDgwMAorCistIEZpeCB1cCBkcm9wYmVhcm11bHRpIHRhcmdldHMgaW4gdGhlIE1ha2VmaWxlIC0gc3ltbGlua3MgYXJlIG5vdyBjcmVhdGVkCisKKy0gQ29tcGlsZSBmYWtlLXJmYzI1NTMgZXZlbiB3aXRoIGRyb3BiZWFyY29udmVydC9kcm9wYmVhcmtleSAtIHRoaXMgCisgIGFsbG93cyB0aGVtIHRvIHdvcmsgb24gcGxhdGZvcm1zIHdpdGhvdXQgYSBuYXRpdmUgZ2V0YWRkcmluZm8oKQorCistIENyZWF0ZSB+Ly5zc2gva25vd25faG9zdHMgcHJvcGVybHkgaWYgaXQgZG9lc24ndCBleGlzdAorCistIEZpeCBiYXNlbmFtZSgpIGZ1bmN0aW9uIHByb3RvdHlwZQorCistIEJhY2twb3J0IHNvbWUgbG9jYWwgY2hhbmdlcyAobW9yZSAjaWZkZWZzIGZvciB0ZXJtY29kZXMuYywgYSBmaXggZm9yIG1pc3NpbmcKKyAgZGVmaW5lcyBvbiBBSVgpLgorCistIExldCBkYmNsaWVudCBiZSBydW4gYXMgInNzaCIKKworLSBJbml0aWFsaXNlIG1wX2ludHMgYnkgZGVmYXVsdAorCiswLjQ0dGVzdDEgLSBTdW4gQXVnIDE2IDIwMDUgMTc6NDM6NTQgKzA4MDAKKworLSBURVNUSU5HIFJFTEVBU0UgLSB0aGlzIGlzIHRoZSBmaXJzdCBwdWJsaWMgcmVsZWFzZSBvZiB0aGUgY2xpZW50IGNvZGViYXNlLAorICBzbyB0aGVyZSBhcmUgc3VyZSB0byBiZSBidWdzIHRvIGJlIGZvdW5kLiBJbiBhZGRpdGlvbiwgaWYgeW91J3JlIGp1c3QgdXNpbmcKKyAgdGhlIHNlcnZlciBwb3J0aW9uLCB0aGUgZmluYWwgYmluYXJ5IHNpemUgcHJvYmFibHkgd2lsbCBpbmNyZWFzZSAtIEknbGwKKyAgYmUgdHJ5aW5nIHRvIGdldCBpdCBiYWNrIGRvd24gaW4gZnV0dXJlIHJlbGVhc2VzLgorCistIERyb3BiZWFyIGNsaWVudCBhZGRlZCAtIGxvdHMgb2YgY2hhbmdlcyB0byB0aGUgc2VydmVyIGNvZGUgYXMgd2VsbCB0byAKKyAgZ2VuZXJhbGlzZSB0aGluZ3MKKworLSBJUHY2IHN1cHBvcnQgYWRkZWQgZm9yIGNsaWVudCwgc2VydmVyLCBhbmQgZm9yd2FyZGluZworCistIE5ldyBtYWtlZmlsZSB3aXRoIG1vcmUgZ2VuZXJpYyBzdXBwb3J0IGZvciBtdWx0aXBsZS1wcm9ncmFtIGJpbmFyaWVzCisKKzAuNDMgLSBGcmkgSnVsIDE2IDIwMDQgMTc6NDQ6NTQgKzA4MDAKKworLSBTRUNVUklUWTogRG9uJ3QgdHJ5IHRvIGZyZWUoKSB1bmluaXRpYWxpc2VkIHZhcmlhYmxlcyBpbiBEU1MgdmVyaWZpY2F0aW9uCisgIGNvZGUuIFRoYW5rcyB0byBBcm5lIEJlcm5pbiBmb3IgcG9pbnRpbmcgb3V0IHRoaXMgYnVnLiBUaGlzIGlzIHBvc3NpYmx5CisgIGV4cGxvaXRhYmxlLCBhbGwgdXNlcnMgd2l0aCBEU1MgYW5kIHB1YmtleS1hdXRoIGNvbXBpbGVkIGluIGFyZSBhZHZpc2VkIHRvCisgIHVwZ3JhZGUuCisKKy0gQ2xlYW4gdXAgYWdlbnQgZm9yd2FyZGluZyBzb2NrZXQgZmlsZXMgY29ycmVjdGx5LCBwYXRjaCBmcm9tIEdlcnJpdCBQYXBlLgorCistIERvbid0IGdvIGludG8gYW4gaW5maW5pdGUgbG9vcCB3aGVuIHBvcnRmb3J3YXJkaW5nIHRvIHNlcnZlcnMgd2hpY2ggZG9uJ3QKKyAgc2VuZCBhbnkgaW5pdGlhbCBkYXRhL2Jhbm5lci4gUGF0Y2ggZnJvbSBOaWtvbGEgVmxhZG92CisKKy0gRml4IGZvciBuZXR3b3JrIHZzLiBob3N0IGJ5dGUgb3JkZXIgaW4gbG9nZ2luZyByZW1vdGUgVENQIHBvcnRzLCBhbHNvCisgIGZyb20gR2Vycml0IFBhcGUuCisKKy0gSW5pdGlhbGlzZSBtYW55IHBvaW50ZXJzIHRvIE5VTEwsIGZvciBnZW5lcmFsIHNhZmV0eS4gQWxzbyBjaGVja2VkIGNsZWFudXAKKyAgY29kZSBmb3IgbXBfaW50cyAocmVsYXRlZCB0byBzZWN1cml0eSBpc3N1ZXMgYWJvdmUpLgorCiswLjQyIC0gV2VkIEp1biAxNiAyMDA0IDEyOjQ0OjU0ICswODAwCisKKy0gVXBkYXRlZCB0byBHZXJyaXQgUGFwZSdzIG9mZmljaWFsIERlYmlhbiBzdWJkaXJlY3RvcnkKKworLSBGaXhlZCBiYWQgY2hlY2sgd2hlbiBvcGVuaW5nIC9kZXYvdXJhbmRvbSAtIHRoYW5rcyB0byBEYW5ueSBTdW5nLgorCistIEFkZGVkIC1pIGluZXRkIG1vZGUgZmxhZywgYW5kIGFzc29jaWF0ZWQgb3B0aW9ucyBpbiBvcHRpb25zLmggLiBEcm9wYmVhcgorICBjYW4gYmUgY29tcGlsZWQgd2l0aCBlaXRoZXIgbm9ybWFsIG1vZGUsIGluZXRkLCBvciBib3RoIG1vZGVzLiBUaGFua3MKKyAgdG8gR2Vycml0IFBhcGUgZm9yIGJhc2ljIHBhdGNoIGFuZCBtb3RpdmF0aW9uLgorCistIFVzZSA8ZGlyZW50Lmg+IHJhdGhlciB0aGFuIDxzeXMvZGlyLmg+IGZvciBQT1NJWCBjb21wbGlhbmNlLiBUaGFua3MgdG8gQmlsbAorICBTb21tZXJmaWVsZC4KKworLSBGaXhlZCBhIFRDUCBmb3J3YXJkaW5nIChjbGllbnQtbG9jYWwsIC1MIHN0eWxlKSBidWcgd2hpY2ggY2F1c2VkIHRoZSB3aG9sZQorICBzZXNzaW9uIHRvIGNsb3NlIGlmIHRoZSBUQ1AgY29ubmVjdGlvbiBmYWlsZWQuIFRoYW5rcyB0byBBbmRyZXcgQnJhdW5kIGZvcgorICByZXBvcnRpbmcgaXQgYW5kIGhlbHBpbmcgdHJhY2sgaXQgZG93bi4KKworLSBSZS1lbmFibGUgc2lncGlwZSBmb3IgY2hpbGQgcHJvY2Vzc2VzLiBUaGFua3MgdG8gR2Vycml0IFBhcGUgZm9yIHNvbWUKKyAgc3VnZ2VzdGlvbnMsIGFuZCBCU0QgbWFucGFnZXMgZm9yIGEgY2xlYXJlciBleHBsYW5hdGlvbiBvZiB0aGUgYmVoYXZpb3VyLgorCistIEFkZGVkIG1hbnBhZ2VzLCB0aGFua3MgdG8gR2Vycml0IFBhcGUuCisKKy0gQ2hhbmdlZCBsaWNlbnNlIHRleHQgZm9yIExpYlRvbUNyeXB0IGFuZCBMaWJUb21NYXRoLgorCistIEFkZGVkIHN0cmlwLXN0YXRpYyB0YXJnZXQKKworLSBGaXhlZCBhIGJ1ZyBpbiBhZ2VudC1mb3J3YXJkaW5nIGNsZWFudXAgaGFuZGxlciAtIHdvdWxkIHNlZ2ZhdWx0CisgIChkZXJlZmVyZW5jaW5nIGEgbnVsbCBwb2ludGVyKSBpZiBhZ2VudCBmb3J3YXJkaW5nIGhhZCBmYWlsZWQuCisKKy0gRml4IGJlaGF2aW91ciBvZiBhdXRob3JpemVkX2tleXMgcGFyc2luZywgc28gbGFyZ2VyICg+MTAyNCBiaXQpIERTQSBrZXlzIHdpbGwKKyAgd29yay4gVGhhbmtzIHRvIERyLiBNYXJrdXMgV2FsZGVjayBmb3IgdGhlIHJlcG9ydC4gCisKKy0gRml4ZWQgbG9jYWwgcG9ydCBmb3J3YXJkaW5nIGNvZGUgc28gdGhhdCB0aGUgIi1qIiBvcHRpb24gd2lsbCBtYWtlIGZvcndhcmRpbmcKKyAgYXR0ZW1wdHMgZmFpbCBtb3JlIGdyYWNlZnVsbHkuCisKKy0gQWxsb3cgcmVwZWF0ZWQgcmVxdWVzdHMgaW4gYSBzaW5nbGUgc2Vzc2lvbiBpZiBwcmV2aW91cyBvbmVzIGZhaWwgLSB0aGlzIGZpeGVzICBQdVRUWSBhbmQgc29tZSBvdGhlciBTQ1AgY2xpZW50cywgd2hpY2ggdHJ5IFNGVFAsIHRoZW4gZmFsbC1iYWNrIHRvIFNDUCBpZiBpdAorICBpc24ndCBhdmFpbGFibGUuIFRoYW5rcyB0byBTdGlybGluZyBXZXN0cnVwIGZvciB0aGUgcmVwb3J0LgorCistIFVwZGF0ZWQgdG8gTGliVG9tQ3J5cHQgMC45NiBhbmQgTGliVG9tTWF0aCAwLjMwLiBUaGUgQUVTIGNvZGUgbm93IHVzZXMKKyAgc21hbGxlciBub24tcHJlY29tcHV0ZWQgdGFibGVzIGlmIERST1BCRUFSX1NNQUxMX0NPREUgaXMgZGVmaW5lZCBpbgorICBvcHRpb25zLmgsIGxlYWRpbmcgdG8gYSBzaWduaWZpY2FudCByZWR1Y3Rpb24gaW4gdGhlIGJpbmFyeSBzaXplLgorCiswLjQxIC0gTW9uIEphbiAxOSAyMDA0IDIyOjQwOjE5ICswODAwCisKKy0gRml4IGluIGNvbmZpZ3VyZSBzbyB0aGF0IGNyb3NzLWNvbXBpbGluZyB3b3JrcywgdGhhbmtzIHRvIG51bWVyb3VzIHBlb3BsZSBmb3IKKyAgcmVwb3J0aW5nIGFuZCB0ZXN0aW5nCisKKy0gVGVybWluYWwgbW9kZSBwYXJzaW5nIG5vdyBoYW5kbGVzIGVtcHR5IHRlcm1pbmFsIG1vZGUgc3RyaW5ncyAoc2VudCBieQorICBXaW5kb3dzIHNzaC5jb20gY2xpZW50cyksIHRoYW5rcyB0byBSaWNhcmRvIERlcmJlcyBmb3IgdGhlIHJlcG9ydAorCistIEhhbmRsaW5nIGlzIGltcHJvdmVkIGZvciB1c2VycyB3aXRoIG5vIHNoZWxsIHNwZWNpZmllZCBpbiAvZXRjL3Bhc3N3ZCwKKyAgdGhhbmtzIGFnYWluIHRvIFJpY2FyZG8gRGVyYmVzCisKKy0gRml4IGZvciBjb21waWxpbmcgd2l0aCAtLWRpc2FibGUtc3lzbG9nLCB0aGFua3MgdG8gZ29yZG9uZmgKKworLSBWYXJpb3VzIG1pbm9yIGZpeGVzIGFsbG93IHNjcCB0byB3b3JrIHdpdGggaXJpeCwgdGhhbmtzIHRvIFBhdWwgTWFyaW5jZXUgZm9yCisgIGZpeGluZyBpdCB1cAorCistIFVzZSA8c3Ryb3B0cy5oPiBub3QgPHN5cy9zdHJvcHRzLmg+LCBzaW5jZSB0aGUgZm9ybWVyIHNlZW1zIG1vcmUgY29tbW9uCisKKzAuNDAgLSBUdWUgSmFuIDEzIDIwMDQgMjE6MDU6MTkgKzA4MDAKKworLSBSZW1vdGUgVENQIGZvcndhcmRpbmcgKC1SKSBzdHlsZSBpbXBsZW1lbnRlZAorCistIExvY2FsIGFuZCByZW1vdGUgVENQIGZvcndhcmRpbmcgY2FuIGVhY2ggYmUgZGlzYWJsZWQgYXQgcnVudGltZSAoLWsgYW5kIC1qCisgIHN3aXRjaGVzKQorCistIEZpeCBmb3IgcHJvYmxlbXMgZGV0ZWN0aW5nIG9wZW5wdHkoKSB3aXRoIHVDbGliYyAtIG1hbnkgdGhhbmtzIHRvIHZhcmlvdXMKKyAgcGVvcGxlIGZvciByZXBvcnRpbmcgYW5kIHRlc3RpbmcgZml4ZXMsIGluY2x1ZGluZyAoaW4gcmFuZG9tIG9yZGVyKSBDcmlzdGlhbgorICBJb25lc2N1LUlkYm9ocm4sIEphbWVzIEV3aW5nLCBTdGV2ZSBEb3ZlciwgVGhvbWFzIEx1bmRxdWlzdCBhbmQgRnJlZGVyaWMKKyAgTGF2ZXJuaGUKKworLSBJbXByb3ZlZCBwb3J0YWJpbGl0eSBmb3IgSVJJWCwgdGhhbmtzIHRvIFBhdWwgTWFyaW5jZXUKKworLSBBSVggYW5kIEhQVVggcG9ydGFiaWxpdHkgZml4ZXMsIHRoYW5rcyB0byBEYXJyZW4gVHVja2VyIGZvciBwYXRjaGVzCisKKy0gcHJuZ2Qgc2hvdWxkIG5vdyB3b3JrIGNvcnJlY3RseSwgdGhhbmtzIHRvIERhcnJlbiBUdWNrZXIgZm9yIHRoZSBwYXRjaAorCistIHNjcCBjb21waWxhdGlvbiBvbiBzeXN0ZW1zIHdpdGhvdXQgc3RybGNweSgpIGlzIGZpeGVkLCB0aGFua3MgdG8gUGV0ZXIKKyAgSmFubmVzZW4gYW5kIERhdmlkIE11c2UgZm9yIHJlcG9ydGluZyBpdCAoaW5kZXBlbmRlbnRseSBhbmQgc2ltdWx0YW5lb3VzbHkgOikKKworLSBNZXJnZWQgaW4gbmV3IExpYlRvbUNyeXB0IDAuOTIgYW5kIExpYlRvbU1hdGggMC4yOAorCiswLjM5IC0gVHVlIERlYyAxNiAyMDAzIDE1OjE5OjE5ICswODAwCisKKy0gQmV0dGVyIGNoZWNraW5nIG9mIGtleSBsZW5ndGhzIGFuZCBwYXJhbWV0ZXJzIGZvciBEU1MgYW5kIFJTQSBhdXRoCisKKy0gUHJpbnQgZmluZ2VycHJpbnQgb2Yga2V5cyB1c2VkIGZvciBwdWJrZXkgYXV0aAorCistIE1vcmUgY29uc2lzdGVudCBsb2dnaW5nIG9mIHVzZXJuYW1lcyBhbmQgSVBzCisKKy0gQWRkZWQgb3B0aW9uIHRvIGRpc2FibGUgcGFzc3dvcmQgYXV0aCAob3IganVzdCBmb3Igcm9vdCkgYXQgcnVudGltZQorCistIEF2b2lkIGluY2x1ZGluZyBiaWdudW0gZnVuY3Rpb25zIHdoaWNoIGRvbid0IGdpdmUgbXVjaCBzcGVlZCBiZW5lZml0IGJ1dAorICB0YWtlIHVwIGJpbmFyeSBzaXplCisKKy0gQWRkZWQgYSBzdHJpcHBlZCBkb3duIHZlcnNpb24gb2YgT3BlblNTSCdzIHNjcCBiaW5hcnkKKworLSBBZGRlZCBhZGRpdGlvbmFsIHN1cHBvcnRpbmcgZnVuY3Rpb25zIGZvciBJcml4LCB0aGFua3MgdG8gUGF1bCBNYXJpbmNldQorCistIERvbid0IGNoZWNrIGZvciB1bnVzZWQgbGlicmFyaWVzIGluIGNvbmZpZ3VyZSBzY3JpcHQKKworLSBSZW1vdmVkIHRyYWlsaW5nIGNvbW1hIGluIGFsZ29yaXRobSBsaXN0cyAodGhhbmtzIHRvIE1paG5lYSBTdG9lbmVzY3UpCisKKy0gRml4ZWQgdXAgY2hhbm5lbCBjbG9zZSBoYW5kbGluZywgYWx3YXlzIHNlbmQgY2xvc2UgcGFja2V0IGluIHJlc3BvbnNlCisgIChhbHNvIHRoYW5rcyB0byBNaWhuZWEgU3RvZW5lc2N1KQorCistIFZhcmlvdXMgbWFrZWZpbGUgaW1wcm92ZW1lbnRzIGZvciBjcm9zcy1jb21waWxpbmcsIHRoYW5rcyB0byBGcmllZHJpY2gKKyAgTG9iZW5zdG9jayBhbmQgTWlobmVhIFN0b2VuZXNjdQorCistIFVzZSBkYWVtb24oKSBmdW5jdGlvbiBpZiBhdmFpbGFibGUgKG9yIG91ciBvd24gY29weSkgcmF0aGVyIHRoYW4gc2VwYXJhdGUKKyAgY29kZSAodGhhbmtzIHRvIEZy6WTpcmljIExhdmVybmhlIGZvciB0aGUgcmVwb3J0IGFuZCBkZWJ1Z2dpbmcsIGFuZCBCZXJuYXJkCisgIEJsYWNraGFtIGZvciBoaXMgc3VnZ2VzdGlvbiBvbiB3aGF0IHRvIGxvb2sgYXQpCisKKy0gRml4ZWQgdXAgc3VwcG9ydCBmb3IgZmlyc3Rfa2V4X3BhY2tldF9mb2xsb3dzLCByZXF1aXJlZCB0byB0YWxrIHRvIHNzaC5jb20KKyAgY2xpZW50cy4gVGhhbmtzIHRvIE1hcmlhbiBTdGFnYXJlc2N1IGZvciB0aGUgYnVnIHJlcG9ydC4KKworLSBBdm9pZCB1c2luZyBNQVhQQVRITEVOLCBwb2ludGVyIGZyb20gSWFuIE1vcnJpcworCistIEltcHJvdmVkIGlucHV0IHNhbml0eSBjaGVja2luZworCiswLjM4IC0gU2F0IE9jdCAxMSAyMDAzIDE2OjI4OjEzICswODAwCisKKy0gRGVmYXVsdCBob3N0a2V5IHBhdGggY2hhbmdlZCB0byAvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX3tyc2EsZHNzfV9ob3N0X2tleQorICByYXRoZXIgdGhhbiAvZXRjL2Ryb3BiZWFyX3tyc2EsZHNzfV9ob3N0X2tleQorCistIEFkZGVkIFNNQUxMIGFuZCBNVUxUSSB0ZXh0IGZpbGVzIHdoaWNoIGhhdmUgaW5mbyBvbiBjb21waWxpbmcgZm9yIG11bHRpcGxlCisgIGJpbmFyaWVzIG9yIHNtYWxsIGJpbmFyaWVzCisKKy0gQWxsb3cgZm9yIGNvbW1hbmRsaW5lIGRlZmluaXRpb24gb2Ygc29tZSBvcHRpb25zLmggc2V0dGluZ3MKKyAgKHdpdGhvdXQgd2FybmluZ3MpCisKKy0gQmUgbW9yZSBjYXJlZnVsIGhhbmRsaW5nIEVJTlRSCisKKy0gTW9yZSBmaXhlcyBmb3IgY2hhbm5lbCBjbG9zaW5nCisKKy0gQWRkZWQgbXVsdGktYmluYXJ5IHN1cHBvcnQKKworLSBJbXByb3ZlZCBsb2dnaW5nIG9mIElQcywgbm93IGdldCBsb2dnZWQgaW4gYWxsIGNhc2VzCisKKy0gRG9uJ3QgY2hldyBjcHUgd2hlbiB3YWl0aW5nIGZvciB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIHN0cmluZywgYWxzbworICBtYWtlIHN1cmUgdGhhdCB3ZSBraWNrIG9mZiBwZW9wbGUgaWYgdGhleSBkb24ndCBhdXRoIHdpdGhpbiA1IG1pbnV0ZXMuCisKKy0gVmFyaW91cyBzbWFsbCBmaXhlcywgd2FybmluZ3MgZXRjCisKKy0gRGlzcGxheSBNT1REIGlmIHJlcXVlc3RlZCAtIHN1Z2dlc3RlZCBieQorICBUcmVudCBMbG95ZCA8bGF0aGlhdCBhdCBzaXhsYWJzLm9yZz4gYW5kCisgIFphY2ggV2hpdGUgPHp3aGl0ZSBhdCBkYXJrc3Rhci5mcm9wLm9yZz4KKworLSBzZnRwIHN1cHBvcnQgd29ya3MgKHJlbGllcyBvbiBPcGVuU1NIIHNmdHAgYmluYXJ5IG9yIHNpbWlsYXIpCisKKy0gQWRkZWQgLS1kaXNhYmxlLXNoYWRvdyBvcHRpb24gKHJlcXVlc3RlZCBieSB0aGUgZmxvcHB5ZncgZ3V5cykKKworMC4zNyAtIFdlZCBTZXB0IDI0IDIwMDMgMTk6NDI6MTIgKzA4MDAKKworLSBWYXJpb3VzIHBvcnRhYmlsaXR5IGZpeGVzLCBmaXhlcyBmb3IgU29sYXJpcyA5LCBUcnU2NCA1LjEsIE1hYyBPUyBYIDEwLjIsCisgIEFJWCwgQlNEcworCistIFVwZGF0ZWQgTGliVG9tTWF0aCB0byAwLjI3IGFuZCBMaWJUb21DcnlwdCB0byAwLjkwCisKKy0gUmVuYW1lZCB1dGlsLntjLGh9IHRvIGRidXRpbC57YyxofSB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBzeXN0ZW0gdXRpbC5oCisKKy0gQWRkZWQgc29tZSBzbWFsbCBjaGFuZ2VzIHNvIGl0J2xsIHdvcmsgd2l0aCBBSVggKHBsdXMgTGludXggQWZmaW5pdHkpLgorICBUaGFua3MgdG8gU2hpZyBmb3IgdGhlbS4KKworLSBJbXByb3ZlZCB0aGUgY2xvc2luZyBtZXNzYWdlcywgc28gYSBjbGVhbiBleGl0IGlzICJFeGl0ZWQgbm9ybWFsbHkiCisKKy0gQWRkZWQgc29tZSBtb3JlIHJvYnVzdCBpbnRlZ2VyL3NpemUgY2hlY2tpbmcgaW4gYnVmZmVyLmMgYXMgYSBiYWNrc3RvcCBmb3IKKyAgaW50ZWdlciBvdmVyZmxvd3MKKworLSBYMTEgZm9yd2FyZGluZyBmaXhlZCBmb3IgT1NYLCBwYXRoIGZvciB4YXV0aCBjaGFuZ2VkIHRvIC91c3IvWDExUjYvYmluL3hhdXRoCisKKy0gQ2hhbm5lbCBjb2RlIGhhbmRsZXMgY2xvc2luZyBtb3JlIG5pY2VseSwgZG9lc24ndCBzaXQgd2FpdGluZyBmb3IgYW4gZXh0cmEKKyAga2V5c3Ryb2tlIG9uIEJTRC9PU1ggcGxhdGZvcm1zLCBhbmQgZGF0YSBpcyBmbHVzaGVkIGZ1bGx5IGJlZm9yZSBjbG9zaW5nCisgIGNoaWxkIHByb2Nlc3NlcyAodGhhbmtzIHRvIAorICBDcmlzdGlhbiBJb25lc2N1LUlkYm9ocm4gPGNyaXN0aWFuLmlvbmVzY3UtaWRib2hybiBhdCBheGlzLmNvbT4gZm9yCisgIHBvaW50aW5nIHRoYXQgb3V0KS4KKworLSBDaGFuZ2VkICJESVNBQkxFX1RDUEZXRCIgdG8gIkVOQUJMRV9UQ1BGV0QiIChhbmQgZm9yIHgxMS9hdXRoKSBzbworICAiZGlzYWJsZSBESVNBQkxFX1RDUFdEIiBpc24ndCBzbyBjb25mdXNpbmcuCisKKy0gRml4IGF1dGhvcml6ZWRfa2V5cyBoYW5kbGluZyAoZG9uJ3QgY3Jhc2ggb24gdG9vLWxvbmcga2V5cywgYW5kCisgIHVzZSBmZ2V0YyBub3QgZ2V0YyB0byBhdm9pZCBzdHJhbmdlIG1hY3JvLXJlbGF0ZWQgaXNzdWVzKSwgdGhhbmtzIHRvCisgIENyaXN0aWFuIElvbmVzY3UtSWRib2hybiA8Y3Jpc3RpYW4uaW9uZXNjdS1pZGJvaHJuIGF0IGF4aXMuY29tPiAKKyAgYW5kIFN0ZXZlIFJvZGdlcnMgPGh3c3RhciBhdCBjb3gubmV0PiBmb3IgcmVwb3J0aW5nIGFuZCB0ZXN0aW5nLgorCistIEZpeGVzIHRvIHRoZSBSRUFETUUgd2l0aCByZWdhcmQgdG8gdUNsaWJjIHN5c3RlbXMsIHRoYW5rcyB0byAKKyAgQ3Jpc3RpYW4gSW9uZXNjdS1JZGJvaHJuIDxjcmlzdGlhbi5pb25lc2N1LWlkYm9ocm4gYXQgYXhpcy5jb20+LAorICBhcyB3ZWxsIGFzIGdlbmVyYWwgaW1wcm92ZW1lbnRzIHRvIGRvY3VtZW50YXRpb24gKHNwbGl0IFJFQURNRS9JTlNUQUxMKQorCistIEZpeGVkIHVwIHNvbWUgY29tcGlsYXRpb24gcHJvYmxlbXMgd2l0aCBkcm9wYmVhcmNvbnZlcnQvZHJvcGJlYXJrZXkgaWYKKyAgRFNTIG9yIFJTQSB3ZXJlIGRpc2FibGVkLCByZXBvcnRlZCBieSBQYXRyaWsgS2FybHNzb24gPHBhdHJpayBhdCBjcXVyZS5uZXQ+CisKKy0gRml4IGRvdWJsZS1mcmVlIGJ1ZyBmb3IgaG9zdGtleXMsIHJlcG9ydGVkIGJ5CisgIFZpbmNlbnQgU2FuZGVycyA8dmluY2UgYXQga3lsbGlra2kub3JnPgorCistIEZpeCB1cCBtaXNzaW5nIFxucyBmcm9tIGRyb3BiZWFyY29udmVydCBoZWxwIG1lc3NhZ2UsCisgIHRoYW5rcyB0byBNb3JkeSBPdml0cyA8bW92aXRzIGF0IGJsb29tYmVyZy5jb20+IGZvciB0aGUgcGF0Y2gKKworMC4zNiAtIFR1ZSBBdWd1c3QgMTkgMjAwMyAxMjoxNjoyMyArMDgwMAorCistIEZpeCB1bmluaXRpYWxpc2VkIHRlbXBvcmFyeSB2YXJpYWJsZSBpbiBEU1Mgc2lnbmluZyBjb2RlCisgICh0aGFua3MgdG8gTWF0dGhldyBGcmFueiA8bWRmcmFueiBhdCBpby5jb20+IGZvciByZXBvcnRpbmcsIGFuZCB0aGUgYXV0aG9ycworICBvZiBWYWxncmluZCBmb3IgbWFraW5nIGl0IGVhc3kgdG8gdHJhY2sgZG93bikKKy0gRml4IHJlbW90ZSB2ZXJzaW9uLXN0cmluZyBwYXJzaW5nIGVycm9yCisgICh0aGFua3MgdG8gQmVybmFyZCBCbGFja2hhbSA8YmVybmFyZCBhdCBibGFja2hhbS5jb20uYXU+IGZvciBub3RpY2luZykKKy0gSW1wcm92ZWQgaG9zdC1hbGdvcml0aG0tbWF0Y2hpbmcgYWxnb3JpdGhtIGluIGFsZ28uYworLSBEZWNyZWFzZWQgTUFYX1NUUklOR19MRU4gdG8gYSBtb3JlIHJlYWxpc3RpYyB2YWx1ZQorLSBGaXggaW5jb3JyZWN0IHZlcnNpb24gKDAuMzQpIGluIHRoaXMgQ0hBTkdFUyBmaWxlIGZvciB0aGUgcHJldmlvdXMgcmVsZWFzZS4KKworMC4zNSAtIFN1biBBdWd1c3QgMTcgMjAwMyAwNTozNzo0NyArMDgwMAorCistIEZpeCBmb3IgcmVtb3RlbHkgZXhwbG9pdGFibGUgZm9ybWF0IHN0cmluZyBidWZmZXIgb3ZlcmZsb3cuCisgICh0aGFua3MgdG8gSm9lbCBFcmlrc3NvbiA8amUgYXQgYml0bnV4LmNvbT4pCisKKzAuMzQgLSBGcmkgQXVndXN0IDE1IDIwMDMgMTU6MTA6MDAgKzA4MDAKKworLSBNYWRlIHN5c2xvZyBvcHRpb25hbCwgYm90aCBhdCBjb21waWxlIHRpbWUgYW5kIGFzIGEgY29tcGlsZSBvcHRpb24KKyAgKHN1Z2dlc3RlZCBieSBMYXVyZW50IEJlcmNvdCA8c2thIGF0IHNrYXJuZXQub3JnPikKKy0gRml4dXAgZm9yIGJhZCBiYXNlNjQgcGFyc2luZyBpbiBhdXRob3JpemVkX2tleXMKKyAgKG5vdGljZWQgYnkgRGF2eWQgTWFkZWxleSA8ZGF2eWQgYXQgemRsY29tcHV0aW5nLmNvbT4pCistIEFkZGVkIGluaXRpYWwgdGNwIGZvcndhcmRpbmcgY29kZSwgb25seSAtTCAobG9jYWwpIGF0IHRoaXMgc3RhZ2UKKy0gSW1wcm92ZWQgIm1ha2UgaW5zdGFsbCIgd2l0aCBERVNURElSIGFuZCBjaGFuZ2luZyBvd25lcnNoaXAgc2VwZXJhdGVseSwKKyAgZG9uJ3QgY2hlY2sgZm9yIHNldHBncnAgb24gTGludXggZm9yIGNyb3NzY29tcGlsaW5nLgorICAoZnJvbSBFcmlrIEFuZGVyc2VuIDxhbmRlcnNlbiBhdCBjb2RlcG9ldC5vcmc+KQorLSBNb3JlIGNvbW1lbnRpbmcsIGZpeCBtaW5vciBjb21waWxlIHdhcm5pbmdzLCBtYWtlIHJldHVybiB2YWx1ZXMgbW9yZQorICBjb25zaXN0ZW50IGV0YworLSBWYXJpb3VzIHNpZ25lZG5lc3MgZml4ZXMKKy0gQ2FuIGxpc3RlbiBvbiBtdWx0aXBsZSBwb3J0cworLSBhZGRlZCBvcHRpb24gdG8gZGlzYWJsZSBvcGVucHR5IHdpdGggY29uZmlndXJlIHNjcmlwdCwKKyAgKGZyb20gSy4tUC4gS2lyY2hk9nJmZXIgPGthcGVrYSBhdCBlcG9zdC5kZT4pCistIFZhcmlvdXMgY2xlYW51cHMgdG8gYmlnbnVtIGNvZGUKKyAgKHRoYW5rcyB0byBUb20gU3QgRGVuaXMgPHRvbXN0ZGVuaXMgYXQgaWFodS5jYT4pCistIEZpeCBjb21waWxlIGVycm9yIHdoZW4gZGlzYWJsaW5nIFJTQQorICAoZnJvbSBNYXJjIEtsZWluZS1CdWRkZSA8a2xlaW5lLWJ1ZGRlIGF0IGdteC5kZT4pCistIE90aGVyIGNsZWFudXBzLCBzcGxpdHRpbmcgbGFyZ2UgZnVuY3Rpb25zIGZvciBwYWNrZXQgYW5kIGtleCBoYW5kbGluZyBldGMKKworMC4zMyAtIFN1biBKdW5lIDIyIDIwMDMgMjI6MjQ6MTIgKzA4MDAKKworLSBGaXhlZCBzb21lIGludmFsaWQgYXNzZXJ0aW9ucyBpbiB0aGUgY2hhbm5lbCBjb2RlLCBmaXhpbmcgdGhlIHNlcnZlciBkeWluZworICB3aGVuIGZvcndhcmRpbmcgWDExIGNvbm5lY3Rpb25zLgorLSBBZGQgZHJvcGJlYXJjb252ZXJ0IHRvIGNvbnZlcnQgdG8vZnJvbSBPcGVuU1NIIGhvc3Qga2V5cyBhbmQgRHJvcGJlYXIga2V5cworLSBSU0Ega2V5cyBub3cga2VlcCBwIGFuZCBxIHBhcmFtZXRlcnMgZm9yIGNvbXBhdGliaWxpdHkgLS0gb2xkIERyb3BiZWFyIGtleXMKKyAgc3RpbGwgd29yaywgYnV0IGNhbid0IGJlIGNvbnZlcnRlZCB0byBPcGVuU1NIIGV0Yy4KKy0gRGViaWFuIHBhY2thZ2luZyBkaXJlY3RvcnkgYWRkZWQsIHRoYW5rcyB0byAKKyAgR3JhaGFtZSAoZ3JhaGFtZSBhdCBhbmdyeWdvYXRzLm5ldCkKKy0gJ2luc3RhbGwnIHRhcmdldCBhZGRlZCB0byB0aGUgbWFrZWZpbGUKKy0gZ2VuZXJhbCB0aWR5aW5nLCBpbXByb3ZlIGNvbnNpc3RlbmN5IG9mIGZ1bmN0aW9ucyBldGMKKy0gSWYgUlNBIG9yIERTUyBob3N0a2V5cyBkb24ndCBleGlzdCwgdGhhdCBhbGdvcml0aG0gd29uJ3QgYmUgdXNlZC4KKy0gSW1wcm92ZWQgUlNBIGFuZCBEU1Mga2V5IGdlbmVyYXRpb24sIG1vcmUgZWZmaWNpZW50IGFuZCBmaXhlZCBzb21lIG1pbm9yIGJ1Z3MKKyAgKHRoYW5rcyB0byBUb20gU3QgRGVuaXMgZm9yIHRoZSBhZHZpY2UpCistIE1lcmdlZCBuZXcgdmVyc2lvbnMgb2YgTGliVG9tQ3J5cHQgKDAuODYpIGFuZCBMaWJUb21NYXRoICgwLjIxKQorCiswLjMyIC0gU2F0IE1heSAyNCAyMDAzIDEyOjQ0OjExICswODAwCisKKy0gRG9uJ3QgY29tcGlsZSB1bnVzZWQgY29kZSBmcm9tIGxpYnRvbWNyeXB0ICh0ZXN0IHZlY3RvcnMgZXRjKQorLSBVcGRhdGVkIHRvIGxpYnRvbW1hdGggMC4xNyBhbmQgbGlidG9tY3J5cHQgMC44My4gTmV3IGxpYnRvbW1hdGggcmVzdWx0cworICBpbiBzbWFsbGVyIGJpbmFyeSBzaXplLCBkdWUgdG8gbm90IGxpbmtpbmcgdW5yZXF1aXJlZCBjb2RlCistIFgxMSBmb3J3YXJkaW5nIGFkZGVkCistIEFnZW50IGZvcndhcmRpbmcgYWRkZWQgKGZvciBPcGVuU1NILmNvbSBzc2ggY2xpZW50L2FnZW50KQorLSBGaXggaW5jb3JyZWN0IGJ1ZmZlciBmcmVlaW5nIHdoZW4gYmFubmVycyBhcmUgdXNlZAorLSBIb3N0bmFtZSByZXNvbHV0aW9uIHdvcmtzCistIFZhcmlvdXMgbWlub3IgYnVnZml4ZXMvY29kZSBzaXplIGltcHJvdmVtZW50cyBldGMKKworMC4zMSAtIEZyaSBNYXkgOSAyMDAzIDE3OjU3OjE2ICswODAwCisKKy0gSW1wcm92ZWQgc3lzbG9nIG1lc3NhZ2VzIC0gSVAgbG9nZ2luZyBldGMKKy0gU3RyaXAgY29udHJvbCBjaGFyYWN0ZXJzIGZyb20gbG9nIG1lc3NhZ2VzIChzcGVjaWZpZWQgdXNlcm5hbWUgY3VycmVudGx5KQorLSBMb2dpbiByZWNvcmRpbmcgKHV0bXAvd3RtcCkgc3VwcG9ydCwgc28gbGFzdC93L3dobyB3b3JrIC0gdGFrZW4gZnJvbSBPcGVuU1NICistIFNoZWxsIGlzIHN0YXJ0ZWQgYXMgYSBwcm9wZXIgbG9naW4gc2hlbGwsIHNvIC9ldGMvcHJvZmlsZSBldGMgaXMgc291cmNlZAorLSBQdHlzIHdvcmsgb24gU29sYXJpcyAoMi44IHg4NiB0ZXN0ZWQpIG5vdworLSBGaXhlZCBidWcgaW4gc3BlY2lmeWluZyB0aGUgcnNhIGhvc3RrZXkKKy0gRml4ZWQgYnVnIGluIGNvbXByZXNzaW9uIGNvZGUsIGNvdWxkIHRyaWdnZXIgaWYgY29tcHJlc3Npb24gcmVzdWx0ZWQgaW4KKyAgbGFyZ2VyIG91dHB1dCB0aGFuIGlucHV0ICh1bmNvbW1vbiBidXQgcG9zc2libGUpLgorCiswLjMwIC0gVGh1IEFwciAxNyAyMDAzIDE4OjQ2OjE1ICswODAwCisKKy0gU0VDVVJJVFk6IGJ1ZmZlci5jIGhhZCBiYWQgY2hlY2tpbmcgZm9yIGJ1ZmZlciBpbmNyZW1lbnQgbGVuZ3RoIC0gZml4ZWQKKy0gY2hhbm5lbCBjb2RlIG5vdyBjbG9zZXMgcHJvcGVybHkgb24gRU9GIC0gc2NwIHByb2Nlc3NlcyBkb24ndCBoYW5nIGFyb3VuZAorLSBzeXNsb2cgc3VwcG9ydCBhZGRlZCAtIGltcHJvdmVkIGF1dGgvbG9naW4vZmFpbHVyZSBtZXNzYWdlcworLSBnZW5lcmFsIGNvZGUgdGlkeWluZywgbWFkZSByZXR1cm4gY29kZXMgbW9yZSBjb25zaXN0ZW50CistIE1ha2VmaWxlIGZpeGVkIGZvciBkZXBlbmRlbmNpZXMgYW5kIG1ha2VzIGxpYnRvbWNyeXB0IGFzIHdlbGwKKy0gSW1wbGVtZW50ZWQgc2VuZGluZyBTU0hfTVNHX1VOSU1QTEVNRU5URUQgOikKKworMC4yOSAtIFdlZCBBcHIgOSAyMDAzCisKKy0gRml4ZWQgYSBzdHVwaWQgYnVnIGluIDAuMjggcmVsZWFzZSwgJ25ld3N0ciA9IHN0cmR1cChvbGRzdHIpJywKKyAgbm90ICduZXdzdHI9b2xkc3RyJworCiswLjI4IC0gU3VuIEFwciA2IDIwMDMKKworLSBJbml0aWFsIHB1YmxpYyByZWxlYXNlCisKK0RldmVsb3BtZW50IHdhcyBzdGFydGVkIGluIE9jdG9iZXIgMjAwMgpkaWZmIC0tZ2l0IGEvSU5TVEFMTCBiL0lOU1RBTEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmNDQ0ZQotLS0gL2Rldi9udWxsCisrKyBiL0lOU1RBTEwKQEAgLTAsMCArMSw3OSBAQAorQmFzaWMgRHJvcGJlYXIgYnVpbGQgaW5zdHJ1Y3Rpb25zOgorCistIEVkaXQgb3B0aW9ucy5oIHRvIHNldCB3aGljaCBmZWF0dXJlcyB5b3Ugd2FudC4KKy0gRWRpdCBkZWJ1Zy5oIGlmIHlvdSB3YW50IGFueSBkZWJ1ZyBvcHRpb25zIChub3QgdXN1YWxseSByZXF1aXJlZCkuCisKKyhJZiB1c2luZyBhIG5vbi10YXJiYWxsIGNvcHksICJhdXRvY29uZjsgYXV0b2hlYWRlciIpCisKKy4vY29uZmlndXJlICAgICAgKG9wdGlvbmFsbHkgd2l0aCAtLWRpc2FibGUtemxpYiBvciAtLWRpc2FibGUtc3lzbG9nLAorICAgICAgICAgICAgICAgICAgb3IgLS1oZWxwIGZvciBvdGhlciBvcHRpb25zKQorCitOb3cgY29tcGlsZToKKworbWFrZSBQUk9HUkFNUz0iZHJvcGJlYXIgZGJjbGllbnQgZHJvcGJlYXJrZXkgZHJvcGJlYXJjb252ZXJ0IHNjcCIKKworQW5kIGluc3RhbGwgKC91c3IvbG9jYWwvYmluIGlzIHVzdWFsIGRlZmF1bHQpOgorCittYWtlIFBST0dSQU1TPSJkcm9wYmVhciBkYmNsaWVudCBkcm9wYmVhcmtleSBkcm9wYmVhcmNvbnZlcnQgc2NwIiBpbnN0YWxsCisKKyh5b3UgY2FuIGxlYXZlIGl0ZW1zIG91dCBvZiB0aGUgUFJPR1JBTVMgbGlzdCB0byBhdm9pZCBjb21waWxpbmcgdGhlbS4gSWYgeW91CityZWNvbXBpbGUgYWZ0ZXIgY2hhbmdpbmcgdGhlIFBST0dSQU1TIGxpc3QsIHlvdSAqTVVTVCogIm1ha2UgY2xlYW4iIGJlZm9yZQorcmVjb21waWxpbmcgLSBiYWQgdGhpbmdzIHdpbGwgaGFwcGVuIG90aGVyd2lzZSkKKworU2VlIE1VTFRJIGZvciBpbnN0cnVjdGlvbnMgb24gbWFraW5nIGFsbC1pbi1vbmUgYmluYXJpZXMuCisKK0lmIHlvdSB3YW50IHRvIGNvbXBpbGUgc3RhdGljYWxseSwgYWRkICJTVEFUSUM9MSIgdG8gdGhlIG1ha2UgY29tbWFuZC1saW5lLgorCitCaW5hcmllcyBjYW4gYmUgc3RyaXBwZCB3aXRoICJtYWtlIHN0cmlwIgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0lmIHlvdSdyZSBjb21waWxpbmcgZm9yIGEgMzg2LWNsYXNzIENQVSwgeW91IHdpbGwgcHJvYmFibHkgbmVlZCB0byBhZGQKK0NGTEFHUz0tRExUQ19OT19CU1dBUCBzbyB0aGF0IGxpYnRvbWNyeXB0IGRvZXNuJ3QgdXNlIDQ4NisgaW5zdHJ1Y3Rpb25zLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvbXBpbGluZyB3aXRoIHVDbGliYzoKKworRmlyc3RseSwgbWFrZSBzdXJlIHlvdSBoYXZlIGF0IGxlYXN0IHVjbGliYyAwLjkuMTcsIGFzIGdldHVzZXJzaGVsbCgpIGluIHByaW9yCit2ZXJzaW9ucyBpcyBicm9rZW4uIEFsc28gbm90ZSB0aGF0IHlvdSBtYXkgZ2V0IHN0cmFuZ2UgaXNzdWVzIGlmIHlvdXIgdUNsaWJjCitoZWFkZXJzIGRvbid0IG1hdGNoIHRoZSBsaWJyYXJ5IHlvdSBhcmUgcnVubmluZyB3aXRoLCBpZSB0aGUgaGVhZGVycyBtaWdodAorc2F5IHRoYXQgc2hhZG93IHBhc3N3b3JkIHN1cHBvcnQgZXhpc3RzLCBidXQgdGhlIGxpYnJhcmllcyBkb24ndCBoYXZlIGl0LgorCitDb21waWxpbmcgZm9yIHVDbGliYyBzaG91bGQgYmUgdGhlIHNhbWUgYXMgbm9ybWFsLCBqdXN0IHNldCBDQyB0byB0aGUgbWFnaWMKK3VDbGliYyB0b29sY2hhaW4gY29tcGlsZXIgKGllIGV4cG9ydCBDQz1pMzg2LXVjbGliYy1nY2Mgb3Igd2hhdGV2ZXIpLgorWW91IGNhbiB1c2UgIm1ha2UgU1RBVElDPTEiIHRvIG1ha2Ugc3RhdGljYWxseSBsaW5rZWQgYmluYXJpZXMsIGFuZCBpdCBpcworYWR2aXNhYmxlIHRvIHN0cmlwIHRoZSBiaW5hcmllcyB0b28uIElmIHlvdSdyZSBsb29raW5nIHRvIG1ha2UgYSBzbWFsbCBiaW5hcnksCit5b3Ugc2hvdWxkIHJlbW92ZSB1bm5lZWRlZCBjaXBoZXJzIGFuZCBNRDUsIGJ5IGVkaXRpbmcgb3B0aW9ucy5oCisKK0l0IGlzIHBvc3NpYmxlIHRvIGNvbXBpbGUgemxpYiBpbiwgYnkgY29weWluZyB6bGliLmggYW5kIHpjb25mLmggaW50byBhCitzdWJkaXJlY3RvcnkgKGllIHpsaWJpbmNsdWRlcyksIGFuZCAKKworZXhwb3J0IENGTEFHUz0iLUl6bGliaW5jbHVkZXMgLUkuLi96bGliaW5jbHVkZXMiCitleHBvcnQgTERGTEFHUz0vdXNyL2xpYi9saWJ6LmEKKworYmVmb3JlIC4vY29uZmlndXJlIGFuZCBtYWtlLgorCitJZiB5b3UgZGlzYWJsZSB6bGliLCB5b3UgbXVzdCBleHBsaWNpdGx5IGRpc2FibGUgY29tcHJlc3Npb24gZm9yIHRoZSBjbGllbnQgLQorT3BlblNTSCBpcyBwb3NzaWJseSBidWdneSBpbiB0aGlzIHJlZ2FyZCwgaXQgc2VlbXMgeW91IG5lZWQgdG8gZGlzYWJsZSBpdAorZ2xvYmFsbHkgaW4gfi8uc3NoL2NvbmZpZywgbm90IGp1c3QgaW4gdGhlIGhvc3QgZW50cnkgaW4gdGhhdCBmaWxlLgorCitZb3UgbWF5IHdhbnQgdG8gbWFudWFsbHkgZGlzYWJsZSBsYXN0bG9nIHJlY29yZGluZyB3aGVuIHVzaW5nIHVDbGliYywgY29uZmlndXJlCit3aXRoIC0tZGlzYWJsZS1sYXN0bG9nLgorCitPbmUgY29tbW9uIHByb2JsZW0gaXMgcHR5IGFsbG9jYXRpb24uIFRoZXJlIGFyZSBhIG51bWJlciBvZiB0eXBlcyBvZiBwdHkKK2FsbG9jYXRpb24gd2hpY2ggY2FuIGJlIHVzZWQgLS0gaWYgdGhleSB3b3JrIHByb3Blcmx5LCB0aGUgZW5kIHJlc3VsdCBpcyB0aGUKK3NhbWUgZm9yIGVhY2ggdHlwZS4gUnVubmluZyBjb25maWd1cmUgc2hvdWxkIGRldGVjdCB0aGUgYmVzdCB0eXBlIHRvIHVzZQorYXV0b21hdGljYWxseSwgaG93ZXZlciBmb3Igc29tZSBzeXN0ZW1zLCB0aGlzIG1heSBiZSBpbmNvcnJlY3QuIFNvbWUKK3RoaW5ncyB0byBub3RlOgorCisgICAgSWYgeW91ciBzeXN0ZW0gZXhwZWN0cyAvZGV2L3B0cyB0byBiZSBtb3VudGVkICh0aGlzIGlzIGEgdUNsaWJjIG9wdGlvbiksCisJbWFrZSBzdXJlIHRoYXQgaXQgaXMuCisKKwlNYWtlIHN1cmUgdGhhdCB5b3VyIGxpYmMgaGVhZGVycyBtYXRjaCB0aGUgbGlicmFyeSB2ZXJzaW9uIHlvdSBhcmUgdXNpbmcuCisKKwlJZiBvcGVucHR5KCkgaXMgYmVpbmcgdXNlZCAoSEFWRV9PUEVOUFRZIGRlZmluZWQgaW4gY29uZmlnLmgpIGFuZCBpdCBmYWlscywKKwl5b3UgY2FuIHRyeSBjb21waWxpbmcgd2l0aCAtLWRpc2FibGUtb3BlbnB0eS4gWW91IHdpbGwgcHJvYmFibHkgdGhlbiBuZWVkCisJdG8gY3JlYXRlIGFsbCB0aGUgL2Rldi9wdHk/PyBhbmQgL2Rldi90dHk/PyBkZXZpY2VzLCB3aGljaCBjYW4gYmUKKwlwcm9ibGVtYXRpYyBmb3IgZGV2ZnMuIEluIGdlbmVyYWwsIG9wZW5wdHkoKSBpcyB0aGUgYmVzdCB3YXkgdG8gYWxsb2NhdGUKKwlQVFlzLCBzbyBpdCdzIGJlc3QgdG8gdHJ5IGFuZCBnZXQgaXQgd29ya2luZy4KZGlmZiAtLWdpdCBhL0xJQ0VOU0UgYi9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOTNmYTEKLS0tIC9kZXYvbnVsbAorKysgYi9MSUNFTlNFCkBAIC0wLDAgKzEsODkgQEAKK0Ryb3BiZWFyIGNvbnRhaW5zIGEgbnVtYmVyIG9mIGNvbXBvbmVudHMgZnJvbSBkaWZmZXJlbnQgc291cmNlcywgaGVuY2UgdGhlcmUKK2FyZSBhIGZldyBsaWNlbnNlcyBhbmQgYXV0aG9ycyBpbnZvbHZlZC4gQWxsIGxpY2Vuc2VzIGFyZSBmYWlybHkgCitub24tcmVzdHJpY3RpdmUuCisKKworVGhlIG1ham9yaXR5IG9mIGNvZGUgaXMgd3JpdHRlbiBieSBNYXR0IEpvaG5zdG9uLCB1bmRlciB0aGUgbGljZW5zZSBiZWxvdy4KKworUG9ydGlvbnMgb2YgdGhlIGNsaWVudC1tb2RlIHdvcmsgYXJlIChjKSAyMDA0IE1paG5lYSBTdG9lbmVzY3UsIHVuZGVyIHRoZQorc2FtZSBsaWNlbnNlOgorCitDb3B5cmlnaHQgKGMpIDIwMDItMjAwNiBNYXR0IEpvaG5zdG9uCitQb3J0aW9ucyBjb3B5cmlnaHQgKGMpIDIwMDQgTWlobmVhIFN0b2VuZXNjdQorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCitjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0FVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorU09GVFdBUkUuCisKKz09PT09CisKK0xpYlRvbUNyeXB0IGFuZCBMaWJUb21NYXRoIGFyZSB3cml0dGVuIGJ5IFRvbSBTdCBEZW5pcywgYW5kIGFyZSBQdWJsaWMgRG9tYWluLgorCis9PT09PQorCitzc2hwdHkuYyBpcyB0YWtlbiBmcm9tIE9wZW5TU0ggMy41cDEsIAorICBDb3B5cmlnaHQgKGMpIDE5OTUgVGF0dSBZbG9uZW4gPHlsb0Bjcy5odXQuZmk+LCBFc3BvbywgRmlubGFuZAorICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZAorICJBcyBmYXIgYXMgSSBhbSBjb25jZXJuZWQsIHRoZSBjb2RlIEkgaGF2ZSB3cml0dGVuIGZvciB0aGlzIHNvZnR3YXJlCisgIGNhbiBiZSB1c2VkIGZyZWVseSBmb3IgYW55IHB1cnBvc2UuICBBbnkgZGVyaXZlZCB2ZXJzaW9ucyBvZiB0aGlzCisgIHNvZnR3YXJlIG11c3QgYmUgY2xlYXJseSBtYXJrZWQgYXMgc3VjaCwgYW5kIGlmIHRoZSBkZXJpdmVkIHdvcmsgaXMKKyAgaW5jb21wYXRpYmxlIHdpdGggdGhlIHByb3RvY29sIGRlc2NyaXB0aW9uIGluIHRoZSBSRkMgZmlsZSwgaXQgbXVzdCBiZQorICBjYWxsZWQgYnkgYSBuYW1lIG90aGVyIHRoYW4gInNzaCIgb3IgIlNlY3VyZSBTaGVsbCIuICIKKworPT09PT0KKworbG9naW5yZWMuYworbG9naW5yZWMuaAorYXRvbWljaW8uaAorYXRvbWljaW8uYworYW5kIHN0cmxjYXQoKSAoaW5jbHVkZWQgaW4gdXRpbC5jKSBhcmUgZnJvbSBPcGVuU1NIIDMuNi4xcDIsIGFuZCBhcmUgbGljZW5zZWQKK3VuZGVyIHRoZSAyIHBvaW50IEJTRCBsaWNlbnNlLgorCitsb2dpbnJlYyBpcyB3cml0dGVuIHByaW1hcmlseSBieSBBbmRyZSBMdWNhcywgYXRvbWljaW8uYyBieSBUaGVvIGRlIFJhYWR0LgorCitzdHJsY2F0KCkgaXMgKGMpIFRvZGQgQy4gTWlsbGVyCisKKz09PT09CisKK0ltcG9ydCBjb2RlIGluIGtleWltcG9ydC5jIGlzIG1vZGlmaWVkIGZyb20gUHVUVFkncyBpbXBvcnQuYywgbGljZW5zZWQgYXMKK2ZvbGxvd3M6CisKK1B1VFRZIGlzIGNvcHlyaWdodCAxOTk3LTIwMDMgU2ltb24gVGF0aGFtLgorCitQb3J0aW9ucyBjb3B5cmlnaHQgUm9iZXJ0IGRlIEJhdGgsIEpvcmlzIHZhbiBSYW50d2lqaywgRGVsaWFuCitEZWxjaGV2LCBBbmRyZWFzIFNjaHVsdHosIEplcm9lbiBNYXNzYXIsIFdleiBGdXJsb25nLCBOaWNvbGFzIEJhcnJ5LAorSnVzdGluIEJyYWRmb3JkLCBhbmQgQ09SRSBTREkgUy5BLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbgorb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKKyh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sCitpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLAorcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwKK2FuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sCitzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKK05PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUKK0ZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRgorQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCitXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL01PRFVMRV9MSUNFTlNFX0JTRF9MSUtFIGIvTU9EVUxFX0xJQ0VOU0VfQlNEX0xJS0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL01PRFVMRV9MSUNFTlNFX0JTRF9MSUtFCmRpZmYgLS1naXQgYS9NVUxUSSBiL01VTFRJCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MGUzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9NVUxUSQpAQCAtMCwwICsxLDI2IEBACitNdWx0aS1iaW5hcnkgY29tcGlsYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PQorCitUbyBjb21waWxlIGZvciBzeXN0ZW1zIHdpdGhvdXQgbXVjaCBzcGFjZSAoZmxvcHB5IGRpc3RyaWJ1dGlvbnMgZXRjKSwgeW91CitjYW4gY3JlYXRlIGEgc2luZ2xlIGJpbmFyeS4gVGhpcyB3aWxsIHNhdmUgZGlzayBzcGFjZSBieSBhdm9pZGluZyByZXBlYXRlZAorY29kZSBiZXR3ZWVuIHRoZSB2YXJpb3VzIHBhcnRzLgorSWYgeW91IGFyZSBmYW1pbGlhciB3aXRoICJidXN5Ym94IiwgaXQncyB0aGUgc2FtZSBwcmluY2lwbGUuCisKK1RvIGNvbXBpbGUgdGhlIG11bHRpLWJpbmFyeSwgZmlyc3QgIm1ha2UgY2xlYW4iIChpZiB5b3UndmUgY29tcGlsZWQKK3ByZXZpb3VzbHkpLCB0aGVuCisKK21ha2UgUFJPR1JBTVM9InByb2dyYW1zIHlvdSB3YW50IGhlcmUiIE1VTFRJPTEKKworVG8gdXNlIHRoZSBiaW5hcnksIHN5bWxpbmsgaXQgZnJvbSB0aGUgZGVzaXJlZCBleGVjdXRhYmxlOgorCitsbiAtcyBkcm9wYmVhcm11bHRpIGRyb3BiZWFyCitsbiAtcyBkcm9wYmVhcm11bHRpIGRiY2xpZW50CitldGMKKwordGhlbiBleGVjdXRlIGFzIG5vcm1hbDoKKworLi9kcm9wYmVhciA8b3B0aW9ucyBoZXJlPgorCisibWFrZSBpbnN0YWxsIiBkb2Vzbid0IGN1cnJlbnRseSB3b3JrIGZvciBtdWx0aS1iaW5hcnkgY29uZmlndXJhdGlvbiwgdGhvdWdoCitpbiBtb3N0IHNpdHVhdGlvbnMgd2hlcmUgaXQgaXMgYmVpbmcgdXNlZCwgdGhlIHRhcmdldCBhbmQgYnVpbGQgc3lzdGVtcyB3aWxsCitkaWZmZXIuCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YjExMWYKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDIxMSBAQAorIyBUaGlzIE1ha2VmaWxlIGlzIGZvciBEcm9wYmVhciBTU0ggU2VydmVyIGFuZCBDbGllbnQKKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBpbnZvY2F0aW9uOgorIyBtYWtlIFBST0dSQU1TPSJkcm9wYmVhciBkYmNsaWVudCBzY3AiIE1VTFRJPTEgU1RBVElDPTEgU0NQUFJPR1JFU1M9MQorIworIyB0byBtYWtlIGEgbXVsdGlwbGUtcHJvZ3JhbSBzdGF0aWNhbGx5IGxpbmtlZCBiaW5hcnkgInN0YXRpY2Ryb3BiZWFybXVsdGkiLgorIyBUaGlzIGV4YW1wbGUgd2lsbCBpbmNsdWRlIGRyb3BiZWFyLCBzY3AsIGRyb3BiZWFya2V5LCBkcm9wYmVhcmNvbnZlcnQsIGFuZAorIyBkYmNsaWVudCBmdW5jdGlvbmFsaXR5LCBhbmQgaW5jbHVkZXMgdGhlIHByb2dyZXNzLWJhciBmdW5jdGlvbmFsaXR5IGluIHNjcC4KKyMgSG9wZWZ1bGx5IHRoYXQgc2VlbXMgaW50dWl0aXZlLgorCitpZm5kZWYgUFJPR1JBTVMKKwlQUk9HUkFNUz1kcm9wYmVhciBkYmNsaWVudCBkcm9wYmVhcmtleSBkcm9wYmVhcmNvbnZlcnQKK2VuZGlmCisKK0xUQz1saWJ0b21jcnlwdC9saWJ0b21jcnlwdC5hCitMVE09bGlidG9tbWF0aC9saWJ0b21tYXRoLmEKKworQ09NTU9OT0JKUz1kYnV0aWwubyBidWZmZXIubyBcCisJCWRzcy5vIGJpZ251bS5vIFwKKwkJc2lnbmtleS5vIHJzYS5vIHJhbmRvbS5vIFwKKwkJcXVldWUubyBcCisJCWF0b21pY2lvLm8gY29tcGF0Lm8gIGZha2UtcmZjMjU1My5vCisKK1NWUk9CSlM9c3ZyLWtleC5vIHN2ci1hbGdvLm8gc3ZyLWF1dGgubyBzc2hwdHkubyBcCisJCXN2ci1hdXRocGFzc3dkLm8gc3ZyLWF1dGhwdWJrZXkubyBzdnItc2Vzc2lvbi5vIHN2ci1zZXJ2aWNlLm8gXAorCQlzdnItY2hhbnNlc3Npb24ubyBzdnItcnVub3B0cy5vIHN2ci1hZ2VudGZ3ZC5vIHN2ci1tYWluLm8gc3ZyLXgxMWZ3ZC5vXAorCQlzdnItdGNwZndkLm8gc3ZyLWF1dGhwYW0ubworCitDTElPQkpTPWNsaS1hbGdvLm8gY2xpLW1haW4ubyBjbGktYXV0aC5vIGNsaS1hdXRocGFzc3dkLm8gY2xpLWtleC5vIFwKKwkJY2xpLXNlc3Npb24ubyBjbGktc2VydmljZS5vIGNsaS1ydW5vcHRzLm8gY2xpLWNoYW5zZXNzaW9uLm8gXAorCQljbGktYXV0aHB1YmtleS5vIGNsaS10Y3Bmd2QubyBjbGktY2hhbm5lbC5vIGNsaS1hdXRoaW50ZXJhY3QubworCitDTElTVlJPQkpTPWNvbW1vbi1zZXNzaW9uLm8gcGFja2V0Lm8gY29tbW9uLWFsZ28ubyBjb21tb24ta2V4Lm8gXAorCQkJY29tbW9uLWNoYW5uZWwubyBjb21tb24tY2hhbnNlc3Npb24ubyB0ZXJtY29kZXMubyBsb2dpbnJlYy5vIFwKKwkJCXRjcC1hY2NlcHQubyBsaXN0ZW5lci5vIHByb2Nlc3MtcGFja2V0Lm8gXAorCQkJY29tbW9uLXJ1bm9wdHMubyBjaXJjYnVmZmVyLm8KKworS0VZT0JKUz1kcm9wYmVhcmtleS5vIGdlbmRzcy5vIGdlbnJzYS5vCisKK0NPTlZFUlRPQkpTPWRyb3BiZWFyY29udmVydC5vIGtleWltcG9ydC5vCisKK1NDUE9CSlM9c2NwLm8gcHJvZ3Jlc3NtZXRlci5vIGF0b21pY2lvLm8gc2NwbWlzYy5vCisKK0hFQURFUlM9b3B0aW9ucy5oIGRidXRpbC5oIHNlc3Npb24uaCBwYWNrZXQuaCBhbGdvLmggc3NoLmggYnVmZmVyLmgga2V4LmggXAorCQlkc3MuaCBiaWdudW0uaCBzaWdua2V5LmggcnNhLmggcmFuZG9tLmggc2VydmljZS5oIGF1dGguaCBcCisJCWRlYnVnLmggY2hhbm5lbC5oIGNoYW5zZXNzaW9uLmggY29uZmlnLmggcXVldWUuaCBzc2hwdHkuaCBcCisJCXRlcm1jb2Rlcy5oIGdlbmRzcy5oIGdlbnJzYS5oIHJ1bm9wdHMuaCBpbmNsdWRlcy5oIFwKKwkJbG9naW5yZWMuaCBhdG9taWNpby5oIHgxMWZ3ZC5oIGFnZW50ZndkLmggdGNwZndkLmggY29tcGF0LmggXAorCQlsaXN0ZW5lci5oIGZha2UtcmZjMjU1My5oCisKK2Ryb3BiZWFyb2Jqcz0kKENPTU1PTk9CSlMpICQoQ0xJU1ZST0JKUykgJChTVlJPQkpTKSAKK2RiY2xpZW50b2Jqcz0kKENPTU1PTk9CSlMpICQoQ0xJU1ZST0JKUykgJChDTElPQkpTKQorZHJvcGJlYXJrZXlvYmpzPSQoQ09NTU9OT0JKUykgJChLRVlPQkpTKQorZHJvcGJlYXJjb252ZXJ0b2Jqcz0kKENPTU1PTk9CSlMpICQoQ09OVkVSVE9CSlMpCitzY3BvYmpzPSQoU0NQT0JKUykKKworVlBBVEg9QHNyY2RpckAKK3NyY2Rpcj1Ac3JjZGlyQAorCitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PSR7cHJlZml4fQorYmluZGlyPSR7ZXhlY19wcmVmaXh9L2Jpbgorc2JpbmRpcj0ke2V4ZWNfcHJlZml4fS9zYmluCisKK0NDPUBDQ0AKK0FSPUBBUkAKK1JBTkxJQj1AUkFOTElCQAorU1RSSVA9QFNUUklQQAorSU5TVEFMTD1ASU5TVEFMTEAKK0NQUEZMQUdTPUBDUFBGTEFHU0AKK0NGTEFHUz0tSS4gLUkkKHNyY2RpcikgLUkkKHNyY2RpcikvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvICQoQ1BQRkxBR1MpIEBDRkxBR1NACitMSUJTPSQoTFRDKSAkKExUTSkgQExJQlNACitMREZMQUdTPUBMREZMQUdTQAorCitFWEVFWFQ9QEVYRUVYVEAKKworIyB3aGV0aGVyIHdlJ3JlIGJ1aWxkaW5nIGNsaWVudCwgc2VydmVyLCBvciBib3RoIGZvciB0aGUgY29tbW9uIG9iamVjdHMuCisjIGV2aWxuZXNzIHNvIHdlIGRldGVjdCAnZHJvcGJlYXInIGJ5IGl0c2VsZiBhcyBhIHdvcmQKK3NwYWNlOj0gJChlbXB0eSkgJChlbXB0eSkKK2lmbmVxICgsJChzdHJpcCAkKGZvcmVhY2ggcHJvZywgJChQUk9HUkFNUyksICQoZmluZHN0cmluZyBaZHJvcGJlYXJaLCBaJChwcm9nKVopKSkpCisJQ0ZMQUdTKz0gLUREUk9QQkVBUl9TRVJWRVIKK2VuZGlmCitpZm5lcSAoLCQoc3RyaXAgJChmb3JlYWNoIHByb2csICQoUFJPR1JBTVMpLCAkKGZpbmRzdHJpbmcgWmRiY2xpZW50WiwgWiQocHJvZylaKSkpKQorCUNGTEFHUys9IC1ERFJPUEJFQVJfQ0xJRU5UCitlbmRpZgorCisKKyMgdGhlc2UgYXJlIGV4cG9ydGVkIHNvIHRoYXQgbGlidG9tY3J5cHQncyBtYWtlZmlsZSB3aWxsIHVzZSB0aGVtCitleHBvcnQgQ0MKK2V4cG9ydCBDRkxBR1MKK2V4cG9ydCBSQU5MSUIgQVIgU1RSSVAKKworaWZlcSAoJChTVEFUSUMpLCAxKQorCUxERkxBR1MrPS1zdGF0aWMKK2VuZGlmCisKK2lmZXEgKCQoTVVMVEkpLCAxKQorCVRBUkdFVFM9ZHJvcGJlYXJtdWx0aQorZWxzZQorCVRBUkdFVFM9JChQUk9HUkFNUykKK2VuZGlmCisKKyMgZm9yIHRoZSBzY3AgcHJvZ3Jlc3MgbWV0ZXIuIFRoZSAtRCBkb2Vzbid0IGFmZmVjdCBhbnl0aGluZyBlbHNlLgoraWZlcSAoJChTQ1BQUk9HUkVTUyksIDEpCisJQ0ZMQUdTKz0tRFBST0dSRVNTX01FVEVSCitlbmRpZgorCisjJTogJChIRUFERVJTKQorIyU6ICQoSEVBREVSUykgTWFrZWZpbGUKKyMgVE9ETworCithbGw6ICQoVEFSR0VUUykKKworc3RyaXA6ICQoVEFSR0VUUykKKwkkKFNUUklQKSAkKGFkZHN1ZmZpeCAkKEVYRUVYVCksICQoVEFSR0VUUykpCisKK2luc3RhbGw6ICQoYWRkcHJlZml4IGluc3RfLCAkKFRBUkdFVFMpKQorCitpbnN0YWxsZHJvcGJlYXJtdWx0aTogaW5zZGJtdWx0aSAkKGFkZHByZWZpeCBpbnNtdWx0aSwgJChQUk9HUkFNUykpIAorCitpbnNkYm11bHRpOiBkcm9wYmVhcm11bHRpCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQoYmluZGlyKQorCSQoSU5TVEFMTCkgLW0gNzU1IGRyb3BiZWFybXVsdGkkKEVYRUVYVCkgJChERVNURElSKSQoYmluZGlyKQorCS1jaG93biByb290ICQoREVTVERJUikkKGJpbmRpcikvZHJvcGJlYXJtdWx0aSQoRVhFRVhUKQorCS1jaGdycCAwICQoREVTVERJUikkKGJpbmRpcikvZHJvcGJlYXJtdWx0aSQoRVhFRVhUKQorCitpbnNtdWx0aWRyb3BiZWFyOiBkcm9wYmVhcm11bHRpCisJLXJtIC1mICQoREVTVERJUikkKHNiaW5kaXIpL2Ryb3BiZWFyJChFWEVFWFQpCisJLWxuIC1zICQoREVTVERJUikkKGJpbmRpcikvZHJvcGJlYXJtdWx0aSQoRVhFRVhUKSAkKERFU1RESVIpJChzYmluZGlyKS9kcm9wYmVhciQoRVhFRVhUKSAKKworaW5zbXVsdGklOiBkcm9wYmVhcm11bHRpCisJLXJtIC1mICQoREVTVERJUikkKGJpbmRpcikvJCokKEVYRUVYVCkgCisJLWxuIC1zICQoREVTVERJUikkKGJpbmRpcikvZHJvcGJlYXJtdWx0aSQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpLyQqJChFWEVFWFQpIAorCisjIGRyb3BiZWFyIHNob3VsZCBnbyBpbiBzYmluLCBzbyBpdCBuZWVkcyBhIHNlcGVyYXRlIHJ1bGUKK2luc3RfZHJvcGJlYXI6IGRyb3BiZWFyCisJJChJTlNUQUxMKSAtZCAtbSA3NTUgJChERVNURElSKSQoc2JpbmRpcikKKwkkKElOU1RBTEwpIC1tIDc1NSBkcm9wYmVhciQoRVhFRVhUKSAkKERFU1RESVIpJChzYmluZGlyKQorCS1jaG93biByb290ICQoREVTVERJUikkKHNiaW5kaXIpL2Ryb3BiZWFyJChFWEVFWFQpCisJLWNoZ3JwIDAgJChERVNURElSKSQoc2JpbmRpcikvZHJvcGJlYXIkKEVYRUVYVCkKKworaW5zdF8lOiAkKgorCSQoSU5TVEFMTCkgLWQgLW0gNzU1ICQoREVTVERJUikkKGJpbmRpcikKKwkkKElOU1RBTEwpIC1tIDc1NSAkKiQoRVhFRVhUKSAkKERFU1RESVIpJChiaW5kaXIpCisJLWNob3duIHJvb3QgJChERVNURElSKSQoYmluZGlyKS8kKiQoRVhFRVhUKQorCS1jaGdycCAwICQoREVTVERJUikkKGJpbmRpcikvJCokKEVYRUVYVCkKKworCisjIGZvciBzb21lIHJlYXNvbiB0aGUgcnVsZSBmdXJ0aGVyIGRvd24gZG9lc24ndCBsaWtlICQoJEBvYmpzKSBhcyBhIHByZXJlcS4KK2Ryb3BiZWFyOiAkKGRyb3BiZWFyb2JqcykKK2RiY2xpZW50OiAkKGRiY2xpZW50b2JqcykKK2Ryb3BiZWFya2V5OiAkKGRyb3BiZWFya2V5b2JqcykKK2Ryb3BiZWFyY29udmVydDogJChkcm9wYmVhcmNvbnZlcnRvYmpzKQorCitkcm9wYmVhciBkYmNsaWVudCBkcm9wYmVhcmtleSBkcm9wYmVhcmNvbnZlcnQ6ICQoSEVBREVSUykgICQoTFRDKSAkKExUTSkgXAorCQkJCQkJCQkJCQkJCU1ha2VmaWxlCisJJChDQykgJChMREZMQUdTKSAtbyAkQCQoRVhFRVhUKSAkKCRAb2JqcykgJChMSUJTKQorCisjIHNjcCBkb2Vzbid0IHVzZSB0aGUgbGlicyBzbyBpcyBzcGVjaWFsLgorc2NwOiAkKFNDUE9CSlMpICAkKEhFQURFUlMpIE1ha2VmaWxlCisJJChDQykgJChMREZMQUdTKSAtbyAkQCQoRVhFRVhUKSAkKFNDUE9CSlMpCisKKworIyBtdWx0aS1iaW5hcnkgY29tcGlsYXRpb24uCitNVUxUSU9CSlM9CitpZmVxICgkKE1VTFRJKSwxKQorCU1VTFRJT0JKUz1kYm11bHRpLm8gJChzb3J0ICQoZm9yZWFjaCBwcm9nLCAkKFBST0dSQU1TKSwgJCgkKHByb2cpb2JqcykpKQorCUNGTEFHUys9JChhZGRwcmVmaXggLUREQk1VTFRJXywgJChQUk9HUkFNUykpIC1ERFJPUEJFQVJfTVVMVEkKK2VuZGlmCisKK2Ryb3BiZWFybXVsdGk6IG11bHRpbGluayAKKworbXVsdGliaW5hcnk6ICQoSEVBREVSUykgJChNVUxUSU9CSlMpICQoTFRDKSAkKExUTSkgTWFrZWZpbGUKKwkkKENDKSAkKExERkxBR1MpIC1vIGRyb3BiZWFybXVsdGkkKEVYRUVYVCkgJChNVUxUSU9CSlMpICQoTElCUykKKworbXVsdGlsaW5rOiBtdWx0aWJpbmFyeSAkKGFkZHByZWZpeCBsaW5rLCAkKFBST0dSQU1TKSkKKworbGluayU6CisJLXJtIC1mICQqJChFWEVFWFQpCisJLWxuIC1zIGRyb3BiZWFybXVsdGkkKEVYRUVYVCkgJCokKEVYRUVYVCkKKworJChMVEMpOiBvcHRpb25zLmgKKwljZCBsaWJ0b21jcnlwdCAmJiAkKE1BS0UpIGNsZWFuICYmICQoTUFLRSkKKworJChMVE0pOiBvcHRpb25zLmgKKwljZCBsaWJ0b21tYXRoICYmICQoTUFLRSkKKworLlBIT05ZIDogY2xlYW4gc2l6ZXMgdGhpc2NsZWFuIGRpc3RjbGVhbiB0aWR5IGx0Yy1jbGVhbiBsdG0tY2xlYW4KKworbHRjLWNsZWFuOgorCWNkIGxpYnRvbWNyeXB0ICYmICQoTUFLRSkgY2xlYW4KKworbHRtLWNsZWFuOgorCWNkIGxpYnRvbW1hdGggJiYgJChNQUtFKSBjbGVhbgorCitzaXplczogZHJvcGJlYXIKKwlvYmpkdW1wIC10IGRyb3BiZWFyfGdyZXAgIi50ZXh0InxjdXQgLWQgIi4iIC1mIDJ8c29ydCAtcm4KKworY2xlYW46IGx0Yy1jbGVhbiBsdG0tY2xlYW4gdGhpc2NsZWFuCisKK3RoaXNjbGVhbjoKKwktcm0gLWYgZHJvcGJlYXIgZGJjbGllbnQgZHJvcGJlYXJrZXkgZHJvcGJlYXJjb252ZXJ0IHNjcCBzY3AtcHJvZ3Jlc3MgXAorCQkJZHJvcGJlYXJtdWx0aSAqLm8gKi5kYSAqLmJiICouYmJnICoucHJvZiAKKworZGlzdGNsZWFuOiBjbGVhbiB0aWR5CisJLXJtIC1mIGNvbmZpZy5oCisJLXJtIC1mIE1ha2VmaWxlCisKK3RpZHk6CisJLXJtIC1mICp+ICouZ2NvdiAqLyp+CmRpZmYgLS1naXQgYS9OT1RJQ0UgYi9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM5M2ZhMQotLS0gL2Rldi9udWxsCisrKyBiL05PVElDRQpAQCAtMCwwICsxLDg5IEBACitEcm9wYmVhciBjb250YWlucyBhIG51bWJlciBvZiBjb21wb25lbnRzIGZyb20gZGlmZmVyZW50IHNvdXJjZXMsIGhlbmNlIHRoZXJlCithcmUgYSBmZXcgbGljZW5zZXMgYW5kIGF1dGhvcnMgaW52b2x2ZWQuIEFsbCBsaWNlbnNlcyBhcmUgZmFpcmx5IAorbm9uLXJlc3RyaWN0aXZlLgorCisKK1RoZSBtYWpvcml0eSBvZiBjb2RlIGlzIHdyaXR0ZW4gYnkgTWF0dCBKb2huc3RvbiwgdW5kZXIgdGhlIGxpY2Vuc2UgYmVsb3cuCisKK1BvcnRpb25zIG9mIHRoZSBjbGllbnQtbW9kZSB3b3JrIGFyZSAoYykgMjAwNCBNaWhuZWEgU3RvZW5lc2N1LCB1bmRlciB0aGUKK3NhbWUgbGljZW5zZToKKworQ29weXJpZ2h0IChjKSAyMDAyLTIwMDYgTWF0dCBKb2huc3RvbgorUG9ydGlvbnMgY29weXJpZ2h0IChjKSAyMDA0IE1paG5lYSBTdG9lbmVzY3UKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAorY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKK1NPRlRXQVJFLgorCis9PT09PQorCitMaWJUb21DcnlwdCBhbmQgTGliVG9tTWF0aCBhcmUgd3JpdHRlbiBieSBUb20gU3QgRGVuaXMsIGFuZCBhcmUgUHVibGljIERvbWFpbi4KKworPT09PT0KKworc3NocHR5LmMgaXMgdGFrZW4gZnJvbSBPcGVuU1NIIDMuNXAxLCAKKyAgQ29weXJpZ2h0IChjKSAxOTk1IFRhdHUgWWxvbmVuIDx5bG9AY3MuaHV0LmZpPiwgRXNwb28sIEZpbmxhbmQKKyAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAiQXMgZmFyIGFzIEkgYW0gY29uY2VybmVkLCB0aGUgY29kZSBJIGhhdmUgd3JpdHRlbiBmb3IgdGhpcyBzb2Z0d2FyZQorICBjYW4gYmUgdXNlZCBmcmVlbHkgZm9yIGFueSBwdXJwb3NlLiAgQW55IGRlcml2ZWQgdmVyc2lvbnMgb2YgdGhpcworICBzb2Z0d2FyZSBtdXN0IGJlIGNsZWFybHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBpZiB0aGUgZGVyaXZlZCB3b3JrIGlzCisgIGluY29tcGF0aWJsZSB3aXRoIHRoZSBwcm90b2NvbCBkZXNjcmlwdGlvbiBpbiB0aGUgUkZDIGZpbGUsIGl0IG11c3QgYmUKKyAgY2FsbGVkIGJ5IGEgbmFtZSBvdGhlciB0aGFuICJzc2giIG9yICJTZWN1cmUgU2hlbGwiLiAiCisKKz09PT09CisKK2xvZ2lucmVjLmMKK2xvZ2lucmVjLmgKK2F0b21pY2lvLmgKK2F0b21pY2lvLmMKK2FuZCBzdHJsY2F0KCkgKGluY2x1ZGVkIGluIHV0aWwuYykgYXJlIGZyb20gT3BlblNTSCAzLjYuMXAyLCBhbmQgYXJlIGxpY2Vuc2VkCit1bmRlciB0aGUgMiBwb2ludCBCU0QgbGljZW5zZS4KKworbG9naW5yZWMgaXMgd3JpdHRlbiBwcmltYXJpbHkgYnkgQW5kcmUgTHVjYXMsIGF0b21pY2lvLmMgYnkgVGhlbyBkZSBSYWFkdC4KKworc3RybGNhdCgpIGlzIChjKSBUb2RkIEMuIE1pbGxlcgorCis9PT09PQorCitJbXBvcnQgY29kZSBpbiBrZXlpbXBvcnQuYyBpcyBtb2RpZmllZCBmcm9tIFB1VFRZJ3MgaW1wb3J0LmMsIGxpY2Vuc2VkIGFzCitmb2xsb3dzOgorCitQdVRUWSBpcyBjb3B5cmlnaHQgMTk5Ny0yMDAzIFNpbW9uIFRhdGhhbS4KKworUG9ydGlvbnMgY29weXJpZ2h0IFJvYmVydCBkZSBCYXRoLCBKb3JpcyB2YW4gUmFudHdpamssIERlbGlhbgorRGVsY2hldiwgQW5kcmVhcyBTY2h1bHR6LCBKZXJvZW4gTWFzc2FyLCBXZXogRnVybG9uZywgTmljb2xhcyBCYXJyeSwKK0p1c3RpbiBCcmFkZm9yZCwgYW5kIENPUkUgU0RJIFMuQS4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzCisodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAoraW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwKK3B1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCithbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLAorc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCitpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECitOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFCitGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YKK0NPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhYjJhNgotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRQpAQCAtMCwwICsxLDc0IEBACitUaGlzIGlzIERyb3BiZWFyLCBhIHNtYWxsaXNoIFNTSCAyIHNlcnZlciBhbmQgY2xpZW50LgorCitJTlNUQUxMIGhhcyBjb21waWxhdGlvbiBpbnN0cnVjdGlvbnMuCisKK01VTFRJIGhhcyBpbnN0cnVjdGlvbnMgb24gbWFraW5nIGEgbXVsdGktcHVycG9zZSBiaW5hcnkgKGllIGEgc2luZ2xlIGJpbmFyeQord2hpY2ggcGVyZm9ybXMgbXVsdGlwbGUgdGFza3MsIHRvIHNhdmUgZGlzayBzcGFjZSkKKworU01BTEwgaGFzIHNvbWUgdGlwcyBvbiBjcmVhdGluZyBzbWFsbCBiaW5hcmllcy4KKworU2VlIFRPRE8gZm9yIGEgZmV3IG9mIHRoZSB0aGluZ3MgSSBrbm93IG5lZWQgbG9va2luZyBhdCwgYW5kIHBsZWFzZSBjb250YWN0CittZSBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zL2J1Z3MgZm91bmQvZmVhdHVyZXMvaWRlYXMvY29tbWVudHMgZXRjIDopCisKK01hdHQgSm9obnN0b24KK21hdHRAdWNjLmFzbi5hdQorCisKK0luIHRoZSBhYnNlbmNlIG9mIGRldGFpbGVkIGRvY3VtZW50YXRpb24sIHNvbWUgbm90ZXMgZm9sbG93OgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTZXJ2ZXIgcHVibGljIGtleSBhdXRoOgorCitZb3UgY2FuIHVzZSB+Ly5zc2gvYXV0aG9yaXplZF9rZXlzIGluIHRoZSBzYW1lIHdheSBhcyB3aXRoIE9wZW5TU0gsIGp1c3QgcHV0Cit0aGUga2V5IGVudHJpZXMgaW4gdGhhdCBmaWxlLiBUaGV5IHNob3VsZCBiZSBvZiB0aGUgZm9ybToKKworc3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBQkl3QUFBSUVBd1ZhNk02Y0dWbVVjTGwyY0Z6a3hFb0pkMDZVYjRiVkRzWXJXdlhodlVWK1pBTTl1R3Vld1pCRG9BcU5LSnhvSW4wSHlkME5rL3lVOTlVVnY2TldWLzVZU0h0bmYzNUxLZHM1Nmo3Y3V6b1FwRklkak53ZHhBTjBQQ0VUL01HOHF5c2tHLzJJRTJEUE5JYUozV3krV3M0SVpFZ2RKZ1BsVFlVQldXdENXT0djPSBzb21lb25lQGhvc3RuYW1lCisKK1lvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IH4vLnNzaCwgYW5kIHRoZSBrZXkgZmlsZSwgYXJlIG9ubHkgd3JpdGFibGUgYnkgdGhlCit1c2VyLiBCZXdhcmUgb2YgZWRpdG9ycyB0aGF0IHNwbGl0IHRoZSBrZXkgaW50byBtdWx0aXBsZSBsaW5lcy4KKworTk9URTogRHJvcGJlYXIgaWdub3JlcyBhdXRob3JpemVkX2tleXMgb3B0aW9ucyBzdWNoIGFzIHRob3NlIGRlc2NyaWJlZCBpbiB0aGUKK09wZW5TU0ggc3NoZCBtYW5wYWdlLCBhbmQgd2lsbCBub3QgYWxsb3cgYSBsb2dpbiBmb3IgdGhlc2Uga2V5cy4gCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQ2xpZW50IHB1YmxpYyBrZXkgYXV0aDoKKworRHJvcGJlYXIgY2FuIGRvIHB1YmxpYyBrZXkgYXV0aCBhcyBhIGNsaWVudCwgYnV0IHlvdSB3aWxsIGhhdmUgdG8gY29udmVydAorT3BlblNTSCBzdHlsZSBrZXlzIHRvIERyb3BiZWFyIGZvcm1hdCwgb3IgdXNlIGRyb3BiZWFya2V5IHRvIGNyZWF0ZSB0aGVtLgorCitJZiB5b3UgaGF2ZSBhbiBPcGVuU1NILXN0eWxlIHByaXZhdGUga2V5IH4vLnNzaC9pZF9yc2EsIHlvdSBuZWVkIHRvIGRvOgorCitkcm9wYmVhcmNvbnZlcnQgb3BlbnNzaCBkcm9wYmVhciB+Ly5zc2gvaWRfcnNhICB+Ly5zc2gvaWRfcnNhLmRiCitkYmNsaWVudCAtaSB+Ly5zc2gvaWRfcnNhLmRiIDxob3N0bmFtZT4KKworQ3VycmVudGx5IGVuY3J5cHRlZCBrZXlzIGFyZW4ndCBzdXBwb3J0ZWQsIG5laXRoZXIgaXMgYWdlbnQgZm9yd2FyZGluZy4gQXQgc29tZQorc3RhZ2UgYm90aCBob3BlZnVsbHkgd2lsbCBiZS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiB5b3Ugd2FudCB0byBnZXQgdGhlIHB1YmxpYy1rZXkgcG9ydGlvbiBvZiBhIERyb3BiZWFyIHByaXZhdGUga2V5LCBsb29rIGF0Citkcm9wYmVhcmtleSdzICcteScgb3B0aW9uLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RvIHJ1biB0aGUgc2VydmVyLCB5b3UgbmVlZCB0byBnZW5lcmF0ZSBzZXJ2ZXIga2V5cywgdGhpcyBpcyBvbmUtb2ZmOgorLi9kcm9wYmVhcmtleSAtdCByc2EgLWYgZHJvcGJlYXJfcnNhX2hvc3Rfa2V5CisuL2Ryb3BiZWFya2V5IC10IGRzcyAtZiBkcm9wYmVhcl9kc3NfaG9zdF9rZXkKKworb3IgYWx0ZXJuYXRpdmVseSBjb252ZXJ0IE9wZW5TU0gga2V5cyB0byBEcm9wYmVhcjoKKy4vZHJvcGJlYXJjb252ZXJ0IG9wZW5zc2ggZHJvcGJlYXIgL2V0Yy9zc2gvc3NoX2hvc3RfZHNhX2tleSBkcm9wYmVhcl9kc3NfaG9zdF9rZXkKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiB0aGUgc2VydmVyIGlzIHJ1biBhcyBub24tcm9vdCwgeW91IG1vc3QgbGlrZWx5IHdvbid0IGJlIGFibGUgdG8gYWxsb2NhdGUgYQorcHR5LCBhbmQgeW91IGNhbm5vdCBsb2dpbiBhcyBhbnkgdXNlciBvdGhlciB0aGFuIHRoYXQgcnVubmluZyB0aGUgZGFlbW9uCisob2J2aW91c2x5KS4gU2hhZG93IHBhc3N3b3JkcyB3aWxsIGFsc28gYmUgdW51c2FibGUgYXMgbm9uLXJvb3QuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIERyb3BiZWFyIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBhIHN0YW5kYWxvbmUgdmVyc2lvbiBvZiBPcGVuU1NIJ3Mgc2NwCitwcm9ncmFtLiBZb3UgY2FuIGNvbXBpbGUgaXQgd2l0aCAibWFrZSBzY3AiLCB5b3UgbWF5IHdhbnQgdG8gY2hhbmdlIHRoZSBwYXRoCitvZiB0aGUgc3NoIGJpbmFyeSwgc3BlY2lmaWVkIGJ5IF9QQVRIX1NTSF9QUk9HUkFNIGluIG9wdGlvbnMuaCAuIEJ5IGRlZmF1bHQKK3RoZSBwcm9ncmVzcyBtZXRlciBpc24ndCBjb21waWxlZCBpbiB0byBzYXZlIHNwYWNlLCB5b3UgY2FuIGVuYWJsZSBpdCBieSAKK2FkZGluZyAnU0NQUFJPR1JFU1M9MScgdG8gdGhlIG1ha2UgY29tbWFuZGxpbmUuCmRpZmYgLS1naXQgYS9TTUFMTCBiL1NNQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYmQ2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9TTUFMTApAQCAtMCwwICsxLDUzIEBACitUaXBzIGZvciBhIHNtYWxsIHN5c3RlbToKKworSWYgeW91IG9ubHkgd2FudCBzZXJ2ZXIgZnVuY3Rpb25hbGl0eSAoZm9yIGV4YW1wbGUpLCBjb21waWxlIHdpdGgKKwltYWtlIFBST0dSQU1TPWRyb3BiZWFyCityYXRoZXIgdGhhbiBqdXN0CisJbWFrZSBkcm9wYmVhcgorc28gdGhhdCBjbGllbnQgZnVuY3Rpb25hbGl0eSBpbiBzaGFyZWQgcG9ydGlvbnMgb2YgRHJvcGJlYXIgd29uJ3QgYmUgaW5jbHVkZWQuCitUaGUgc2FtZSBhcHBsaWVzIGlmIHlvdSBhcmUgY29tcGlsaW5nIGp1c3QgYSBjbGllbnQuCisKKy0tLQorCitUaGUgZm9sbG93aW5nIGFyZSBzZXQgaW4gb3B0aW9ucy5oOgorCisJLSBZb3UgY2FuIHNhZmVseSBkaXNhYmxlIGJsb3dmaXNoIGFuZCB0d29maXNoIGNpcGhlcnMsIGFuZCBNRDUgaG1hYywgd2l0aG91dAorCSAgYWZmZWN0aW5nIGludGVyb3BlcmFiaWxpdHkKKworCS0gSWYgeW91J3JlIGNvbXBpbGluZyBzdGF0aWNhbGx5LCB5b3UgY2FuIHR1cm4gb2ZmIGhvc3QgbG9va3VwcworCisJLSBZb3UgY2FuIGRpc2FibGUgZWl0aGVyIHBhc3N3b3JkIG9yIHB1YmxpYy1rZXkgYXV0aGVudGljYXRpb24sIHRob3VnaCBub3RlCisJICB0aGF0IHRoZSBJRVRGIGRyYWZ0IHN0YXRlcyB0aGF0IHB1YmtleSBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZC4KKworCS0gU2ltaWxhcmx5IHdpdGggRFNTIGFuZCBSU0EsIHlvdSBjYW4gZGlzYWJsZSBvbmUgb2YgdGhlc2UgaWYgeW91IGtub3cgdGhhdAorCSAgYWxsIGNsaWVudHMgd2lsbCBiZSBhYmxlIHRvIHN1cHBvcnQgYSBwYXJ0aWN1bGFyIG9uZS4gVGhlIElFVEYgZHJhZnQKKwkgIHN0YXRlcyB0aGF0IERTUyBpcyByZXF1aXJlZCwgaG93ZXZlciB5b3UgbWF5IHByZWZlciB0byB1c2UgUlNBLiAKKwkgIERPTidUIGRpc2FibGUgZWl0aGVyIG9mIHRoZXNlIG9uIHN5c3RlbXMgd2hlcmUgeW91IGFyZW4ndCAxMDAlIHN1cmUgYWJvdXQKKwkgIHdobyB3aWxsIGJlIGNvbm5lY3RpbmcgYW5kIHdoYXQgY2xpZW50cyB0aGV5IHdpbGwgYmUgdXNpbmcuCisKKwktIERpc2FibGluZyB0aGUgTU9URCBjb2RlIGFuZCBTRlRQLVNFUlZFUiBtYXkgc2F2ZSBhIHNtYWxsIGFtb3VudCBvZiBjb2Rlc2l6ZQorCisJLSBZb3UgY2FuIGRpc2FibGUgeDExLCB0Y3AgYW5kIGFnZW50IGZvcndhcmRpbmcgYXMgZGVzaXJlZC4gTm9uZSBvZiB0aGVzZSBhcmUKKwkgIGVzc2VudGlhbCwgYWx0aG91Z2ggYWdlbnQtZm9yd2FyZGluZyBpcyBvZnRlbiB1c2VmdWwgZXZlbiBvbiBmaXJld2FsbCBib3hlcy4KKworLS0tCisKK0lmIHlvdSBhcmUgY29tcGlsaW5nIHN0YXRpY2FsbHksIHlvdSBtYXkgd2FudCB0byBkaXNhYmxlIHpsaWIsIGFzIGl0IHdpbGwgdXNlCithIGZldyB0ZW5zIG9mIGtCIG9mIGJpbmFyeS1zaXplICguL2NvbmZpZ3VyZSAtLWRpc2FibGUtemxpYikuCisKK1lvdSBjYW4gY3JlYXRlIGEgY29tYmluZWQgYmluYXJ5LCBzZWUgdGhlIGZpbGUgTVVMVEksIHdoaWNoIHdpbGwgcHV0IGFsbAordGhlIGZ1bmN0aW9ucyBpbnRvIG9uZSBiaW5hcnksIGF2b2lkaW5nIHJlcGVhdGVkIGNvZGUuCisKK0lmIHlvdSdyZSBjb21waWxpbmcgd2l0aCBnY2MsIHlvdSBtaWdodCB3YW50IHRvIGxvb2sgYXQgZ2NjJ3Mgb3B0aW9ucyBmb3IKK3N0cmlwcGluZyB1bnVzZWQgY29kZS4gVGhlIHJlbGV2YW50IHZhcnMgdG8gc2V0IGJlZm9yZSBjb25maWd1cmUgYXJlOgorCitMREZMQUdTPS1XbCwtLWdjLXNlY3Rpb25zCitDRkxBR1M9Ii1mZnVuY3Rpb24tc2VjdGlvbnMgLWZkYXRhLXNlY3Rpb25zIgorCitZb3UgY2FuIGFsc28gZXhwZXJpbWVudCB3aXRoIG9wdGltaXNhdGlvbiBmbGFncyBzdWNoIGFzIC1Pcywgbm90ZSB0aGF0IGluIHNvbWUKK2Nhc2VzIHRoZXNlIGZsYWdzIGFjdHVhbGx5IHNlZW0gdG8gaW5jcmVhc2Ugc2l6ZSwgc28gZXhwZXJpbWVudCBiZWZvcmUKK2RlY2lkaW5nLgorCitPZiBjb3Vyc2UgdXNpbmcgc21hbGwgQyBsaWJyYXJpZXMgc3VjaCBhcyB1Q2xpYmMgYW5kIGRpZXRsaWJjIGNhbiBhbHNvIGhlbHAuCisKK0lmIHlvdSBoYXZlIGFueSBxdWVyaWVzLCBtYWlsIG1lIGFuZCBJJ2xsIHNlZSBpZiBJIGNhbiBoZWxwLgpkaWZmIC0tZ2l0IGEvVE9ETyBiL1RPRE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2ODhiMwotLS0gL2Rldi9udWxsCisrKyBiL1RPRE8KQEAgLTAsMCArMSwyNyBAQAorQ3VycmVudDoKKworVGhpbmdzIHdoaWNoIG1pZ2h0IG5lZWQgZG9pbmc6CisKKy0gZGVmYXVsdCBwcml2YXRlIGRiY2xpZW50IGtleXMKKworLSBNYWtlIG9wdGlvbnMuaCBnZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUgcGVyaGFwcz8KKworLSBoYW5kbGUgL2V0Yy9lbnZpcm9ubWVudCBpbiBBSVgKKworLSBjaGVjayB0aGF0IHRoZXJlIGFyZW4ndCB0aW1pbmcgaXNzdWVzIHdpdGggdmFsaWQvaW52YWxpZCB1c2VyIGF1dGhlbnRpY2F0aW9uCisgIGZlZWRiYWNrLgorCistIEJpbmRpbmcgdG8gZGlmZmVyZW50IGludGVyZmFjZXMKKworLSBDVFIgbW9kZQorLSBTU0hfTVNHX0lHTk9SRSBzZW5kaW5nIHRvIGltcHJvdmUgQ0JDIHNlY3VyaXR5CistIERIIEdyb3VwIEV4Y2hhbmdlIHBvc3NpYmx5LCBvciBqdXN0IGFkZCBncm91cDE0ICh3aGF0ZXZlciBpdCdzIGNhbGxlZCB0b2RheSkKKworLSBmaXggc2NwLmMgZm9yIElSSVgKKworLSBCZSBhYmxlIHRvIHVzZSBPcGVuU1NIIGtleXMgZm9yIHRoZSBjbGllbnQ/IG9yIGF0IGxlYXN0IGhhdmUgc29tZSBmb3JtIG9mIAorICBlbmNyeXB0ZWQga2V5cy4KKworLSBDbGllbnQgYWdlbnQgZm9yd2FyZGluZworCistIEhhbmRsZSByZXN0cmljdGlvbnMgaW4gfi8uc3NoL2F1dGhvcml6ZWRfa2V5cyA/CmRpZmYgLS1naXQgYS9hZ2VudGZ3ZC5oIGIvYWdlbnRmd2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGY2NzVkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnRmd2QuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogRHJvcGJlYXIgLSBhIFNTSDIgc2VydmVyCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworI2lmbmRlZiBfQUdFTlRGV0RfSF8KKyNkZWZpbmUgX0FHRU5URldEX0hfCisjaWZuZGVmIERJU0FCTEVfQUdFTlRGV0QKKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAiY2hhbnNlc3Npb24uaCIKKyNpbmNsdWRlICJjaGFubmVsLmgiCisKK2ludCBhZ2VudHJlcShzdHJ1Y3QgQ2hhblNlc3MgKiBjaGFuc2Vzcyk7Cit2b2lkIGFnZW50c2V0YXV0aChzdHJ1Y3QgQ2hhblNlc3MgKmNoYW5zZXNzKTsKK3ZvaWQgYWdlbnRjbGVhbnVwKHN0cnVjdCBDaGFuU2VzcyAqIGNoYW5zZXNzKTsKK3ZvaWQgYWdlbnRzZXQoc3RydWN0IENoYW5TZXNzICpjaGFuc2Vzcyk7CisKKyNpZmRlZiBfX2hwdXgKKyNkZWZpbmUgc2V0ZXVpZChhKSAgICAgICBzZXRyZXN1aWQoLTEsIChhKSwgLTEpCisjZGVmaW5lIHNldGVnaWQoYSkgICAgICAgc2V0cmVzZ2lkKC0xLCAoYSksIC0xKQorI2VuZGlmCisKKyNlbmRpZiAvKiBEUk9QQkVBUl9BR0VOVEZXRCAqLworI2VuZGlmIC8qIF9BR0VOVEZXRF9IXyAqLwpkaWZmIC0tZ2l0IGEvYWxnby5oIGIvYWxnby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZDAxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hbGdvLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfQUxHT19IXworCisjZGVmaW5lIF9BTEdPX0hfCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorCitzdHJ1Y3QgQWxnb19UeXBlIHsKKworCXVuc2lnbmVkIGNoYXIgKm5hbWU7IC8qIGlkZW50aWZ5aW5nIG5hbWUgKi8KKwljaGFyIHZhbDsgLyogYSB2YWx1ZSBmb3IgdGhpcyBjaXBoZXIsIG9yIC0xIGZvciBpbnZhbGlkICovCisJdm9pZCAqZGF0YTsgLyogYWxnb3JpdGhtIHNwZWNpZmljIGRhdGEgKi8KKwl1bnNpZ25lZCB1c2FibGUgOiAxOyAvKiB3aGV0aGVyIHdlIGNhbiB1c2UgdGhpcyBhbGdvcml0aG0gKi8KKworfTsKKwordHlwZWRlZiBzdHJ1Y3QgQWxnb19UeXBlIGFsZ29fdHlwZTsKKworLyogbGlzdHMgbWFwcGluZyBzc2ggdHlwZXMgb2YgYWxnb3JpdGhtcyB0byBpbnRlcm5hbCB2YWx1ZXMgKi8KK2V4dGVybiBhbGdvX3R5cGUgc3Noa2V4W107CitleHRlcm4gYWxnb190eXBlIHNzaGhvc3RrZXlbXTsKK2V4dGVybiBhbGdvX3R5cGUgc3NoY2lwaGVyc1tdOworZXh0ZXJuIGFsZ29fdHlwZSBzc2hoYXNoZXNbXTsKK2V4dGVybiBhbGdvX3R5cGUgc3NoY29tcHJlc3NbXTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBkcm9wYmVhcl9jaXBoZXIgZHJvcGJlYXJfbm9jaXBoZXI7CitleHRlcm4gY29uc3Qgc3RydWN0IGRyb3BiZWFyX2hhc2ggZHJvcGJlYXJfbm9oYXNoOworCitzdHJ1Y3QgZHJvcGJlYXJfY2lwaGVyIHsKKwljb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yICpjaXBoZXJkZXNjOworCXVuc2lnbmVkIGxvbmcga2V5c2l6ZTsKKwl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZTsKK307CisKK3N0cnVjdCBkcm9wYmVhcl9oYXNoIHsKKwljb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciAqaGFzaGRlc2M7CisJdW5zaWduZWQgbG9uZyBrZXlzaXplOworCXVuc2lnbmVkIGNoYXIgaGFzaHNpemU7Cit9OworCit2b2lkIGNyeXB0b19pbml0KCk7CitpbnQgaGF2ZV9hbGdvKGNoYXIqIGFsZ28sIHNpemVfdCBhbGdvbGVuLCBhbGdvX3R5cGUgYWxnb3NbXSk7Cit2b2lkIGJ1Zl9wdXRfYWxnb2xpc3QoYnVmZmVyICogYnVmLCBhbGdvX3R5cGUgbG9jYWxhbGdvc1tdKTsKKworYWxnb190eXBlICogc3ZyX2J1Zl9tYXRjaF9hbGdvKGJ1ZmZlciogYnVmLCBhbGdvX3R5cGUgbG9jYWxhbGdvc1tdLAorCQlpbnQgKmdvb2RndWVzcyk7CithbGdvX3R5cGUgKiBjbGlfYnVmX21hdGNoX2FsZ28oYnVmZmVyKiBidWYsIGFsZ29fdHlwZSBsb2NhbGFsZ29zW10sCisJCWludCAqZ29vZGd1ZXNzKTsKKworI2VuZGlmIC8qIF9BTEdPX0hfICovCmRpZmYgLS1naXQgYS9hdG9taWNpby5jIGIvYXRvbWljaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTE1YTdiCi0tLSAvZGV2L251bGwKKysrIGIvYXRvbWljaW8uYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29waWVkIGZyb20gT3BlblNTSCAzLjYuMXAyLgorICogCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUsMTk5OSBUaGVvIGRlIFJhYWR0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIFJDU0lEKCJPcGVuQlNEOiBhdG9taWNpby5jLHYgMS4xMCAyMDAxLzA1LzA4IDIyOjQ4OjA3IG1hcmt1cyBFeHAgIik7ICovCisKKyNpbmNsdWRlICJhdG9taWNpby5oIgorCisvKgorICogZW5zdXJlIGFsbCBvZiBkYXRhIG9uIHNvY2tldCBjb21lcyB0aHJvdWdoLiBmPT1yZWFkIHx8IGY9PXdyaXRlCisgKi8KK3NzaXplX3QKK2F0b21pY2lvKGYsIGZkLCBfcywgbikKKwlzc2l6ZV90ICgqZikgKCk7CisJaW50IGZkOworCXZvaWQgKl9zOworCXNpemVfdCBuOworeworCWNoYXIgKnMgPSBfczsKKwlzc2l6ZV90IHJlczsKKwlzaXplX3QgcG9zID0gMDsKKworCXdoaWxlIChuID4gcG9zKSB7CisJCXJlcyA9IChmKSAoZmQsIHMgKyBwb3MsIG4gLSBwb3MpOworCQlzd2l0Y2ggKHJlcykgeworCQljYXNlIC0xOgorI2lmZGVmIEVXT1VMREJMT0NLCisJCQlpZiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOIHx8IGVycm5vID09IEVXT1VMREJMT0NLKQorI2Vsc2UKKwkJCWlmIChlcnJubyA9PSBFSU5UUiB8fCBlcnJubyA9PSBFQUdBSU4pCisjZW5kaWYKKwkJCQljb250aW51ZTsKKwkJY2FzZSAwOgorCQkJcmV0dXJuIChyZXMpOworCQlkZWZhdWx0OgorCQkJcG9zICs9IHJlczsKKwkJfQorCX0KKwlyZXR1cm4gKHBvcyk7Cit9CmRpZmYgLS1naXQgYS9hdG9taWNpby5oIGIvYXRvbWljaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzFmM2FjCi0tLSAvZGV2L251bGwKKysrIGIvYXRvbWljaW8uaApAQCAtMCwwICsxLDM2IEBACisKKy8qCisgKiBDb3BpZWQgZnJvbSBPcGVuU1NIIDMuNi4xcDIsIHJlcXVpcmVkIGZvciBsb2dpbnJlYy5jCisgKgorICogJE9wZW5CU0Q6IGF0b21pY2lvLmgsdiAxLjQgMjAwMS8wNi8yNiAwNjozMjo0NiBpdG9qdW4gRXhwICQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUsMTk5OSBUaGVvIGRlIFJhYWR0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorCisvKgorICogRW5zdXJlIGFsbCBvZiBkYXRhIG9uIHNvY2tldCBjb21lcyB0aHJvdWdoLiBmPT1yZWFkIHx8IGY9PXdyaXRlCisgKi8KK3NzaXplX3QJYXRvbWljaW8oc3NpemVfdCAoKikoKSwgaW50LCB2b2lkICosIHNpemVfdCk7CmRpZmYgLS1naXQgYS9hdXRoLmggYi9hdXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjYxMjY1YQotLS0gL2Rldi9udWxsCisrKyBiL2F1dGguaApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfQVVUSF9IXworI2RlZmluZSBfQVVUSF9IXworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKwordm9pZCBzdnJfYXV0aGluaXRpYWxpc2UoKTsKK3ZvaWQgY2xpX2F1dGhpbml0aWFsaXNlKCk7CisKKy8qIFNlcnZlciBmdW5jdGlvbnMgKi8KK3ZvaWQgcmVjdl9tc2dfdXNlcmF1dGhfcmVxdWVzdCgpOwordm9pZCBzZW5kX21zZ191c2VyYXV0aF9mYWlsdXJlKGludCBwYXJ0aWFsLCBpbnQgaW5jcmZhaWwpOwordm9pZCBzZW5kX21zZ191c2VyYXV0aF9zdWNjZXNzKCk7Cit2b2lkIHN2cl9hdXRoX3Bhc3N3b3JkKCk7Cit2b2lkIHN2cl9hdXRoX3B1YmtleSgpOwordm9pZCBzdnJfYXV0aF9wYW0oKTsKKworLyogQ2xpZW50IGZ1bmN0aW9ucyAqLwordm9pZCByZWN2X21zZ191c2VyYXV0aF9mYWlsdXJlKCk7Cit2b2lkIHJlY3ZfbXNnX3VzZXJhdXRoX3N1Y2Nlc3MoKTsKK3ZvaWQgcmVjdl9tc2dfdXNlcmF1dGhfc3BlY2lmaWNfNjAoKTsKK3ZvaWQgcmVjdl9tc2dfdXNlcmF1dGhfcGtfb2soKTsKK3ZvaWQgcmVjdl9tc2dfdXNlcmF1dGhfaW5mb19yZXF1ZXN0KCk7Cit2b2lkIGNsaV9nZXRfdXNlcigpOwordm9pZCBjbGlfYXV0aF9nZXRtZXRob2RzKCk7Cit2b2lkIGNsaV9hdXRoX3RyeSgpOwordm9pZCByZWN2X21zZ191c2VyYXV0aF9iYW5uZXIoKTsKK3ZvaWQgY2xpX3B1YmtleWZhaWwoKTsKK3ZvaWQgY2xpX2F1dGhfcGFzc3dvcmQoKTsKK2ludCBjbGlfYXV0aF9wdWJrZXkoKTsKK3ZvaWQgY2xpX2F1dGhfaW50ZXJhY3RpdmUoKTsKK2NoYXIqIGdldHBhc3Nfb3JfY2FuY2VsKGNoYXIqIHByb21wdCk7CisKKworI2RlZmluZSBNQVhfVVNFUk5BTUVfTEVOIDI1IC8qIGFyYml0cmFyeSBmb3IgdGhlIG1vbWVudCAqLworCisjZGVmaW5lIEFVVEhfVFlQRV9OT05FICAgICAgMQorI2RlZmluZSBBVVRIX1RZUEVfUFVCS0VZICAgIDEgPDwgMQorI2RlZmluZSBBVVRIX1RZUEVfUEFTU1dPUkQgIDEgPDwgMgorI2RlZmluZSBBVVRIX1RZUEVfSU5URVJBQ1QgIDEgPDwgMworCisjZGVmaW5lIEFVVEhfTUVUSE9EX05PTkUgIm5vbmUiCisjZGVmaW5lIEFVVEhfTUVUSE9EX05PTkVfTEVOIDQKKyNkZWZpbmUgQVVUSF9NRVRIT0RfUFVCS0VZICJwdWJsaWNrZXkiCisjZGVmaW5lIEFVVEhfTUVUSE9EX1BVQktFWV9MRU4gOQorI2RlZmluZSBBVVRIX01FVEhPRF9QQVNTV09SRCAicGFzc3dvcmQiCisjZGVmaW5lIEFVVEhfTUVUSE9EX1BBU1NXT1JEX0xFTiA4CisjZGVmaW5lIEFVVEhfTUVUSE9EX0lOVEVSQUNUICJrZXlib2FyZC1pbnRlcmFjdGl2ZSIKKyNkZWZpbmUgQVVUSF9NRVRIT0RfSU5URVJBQ1RfTEVOIDIwCisKKworCisvKiBUaGlzIHN0cnVjdHVyZSBpcyBzaGFyZWQgYmV0d2VlbiBzZXJ2ZXIgYW5kIGNsaWVudCAtIGl0IGNvbnRhaW5zCisgKiByZWxhdGl2ZWx5IGxpdHRsZSBleHRyYW5lb3VzIGJpdHMgd2hlbiB1c2VkIGZvciB0aGUgY2xpZW50IHJhdGhlciB0aGFuIHRoZQorICogc2VydmVyICovCitzdHJ1Y3QgQXV0aFN0YXRlIHsKKworCWNoYXIgKnVzZXJuYW1lOyAvKiBUaGlzIGlzIHRoZSB1c2VybmFtZSB0aGUgY2xpZW50IHByZXNlbnRzIHRvIGNoZWNrLiBJdAorCQkJCQkgICBpcyB1cGRhdGVkIGVhY2ggcnVuIHRocm91Z2gsIHVzZWQgZm9yIGF1dGggY2hlY2tpbmcgKi8KKwl1bnNpZ25lZCBjaGFyIGF1dGh0eXBlczsgLyogRmxhZ3MgaW5kaWNhdGluZyB3aGljaCBhdXRoIHR5cGVzIGFyZSBzdGlsbCAKKwkJCQkJCQkJdmFsaWQgKi8KKwl1bnNpZ25lZCBpbnQgZmFpbGNvdW50OyAvKiBOdW1iZXIgb2YgKGZhaWxlZCkgYXV0aGVudGljYXRpb24gYXR0ZW1wdHMuKi8KKwl1bnNpZ25lZCBhdXRoZG9uZSA6IDE7IC8qIDAgaWYgd2UgaGF2ZW4ndCBhdXRoZWQsIDEgaWYgd2UgaGF2ZS4gQXBwbGllcyBmb3IKKwkJCQkJCQkgIGNsaWVudCBhbmQgc2VydmVyICh0aG91Z2ggaGFzIGRpZmZlcmluZyBbb2J2aW91c10KKwkJCQkJCQkgIG1lYW5pbmdzKS4gKi8KKwl1bnNpZ25lZCBwZXJtX3dhcm4gOiAxOyAvKiBTZXJ2ZXIgb25seSwgc2V0IGlmIGJhZCBwZXJtaXNzaW9ucyBvbiAKKwkJCQkJCQkgICB+Ly5zc2gvYXV0aG9yaXplZF9rZXlzIGhhdmUgYWxyZWFkeSBiZWVuCisJCQkJCQkJICAgbG9nZ2VkLiAqLworCisJLyogVGhlc2UgYXJlIG9ubHkgdXNlZCBmb3IgdGhlIHNlcnZlciAqLworCWNoYXIgKnByaW50YWJsZXVzZXI7IC8qIHN0cmlwcGVkIG9mIGNvbnRyb2wgY2hhcnMsIHVzZWQgZm9yIGxvZ3MgZXRjICovCisJc3RydWN0IHBhc3N3ZCAqIHB3OworCit9OworCitzdHJ1Y3QgU2lnbktleUxpc3Q7CisvKiBBIHNpbmdseSBsaW5rZWQgbGlzdCBvZiBzaWduaW5nIGtleXMgKi8KK3N0cnVjdCBTaWduS2V5TGlzdCB7CisKKwlzaWduX2tleSAqa2V5OworCWludCB0eXBlOyAvKiBUaGUgdHlwZSBvZiBrZXkgKi8KKwlzdHJ1Y3QgU2lnbktleUxpc3QgKm5leHQ7CisJLyogZmlsZW5hbWU/IG9yIHRoZSBidWZmZXI/IGZvciBlbmNyeXB0ZWQga2V5cywgc28gd2UgY2FuIGxhdGVyIGdldAorCSAqIHRoZSBwcml2YXRlIGtleSBwb3J0aW9uICovCisKK307CisKKyNlbmRpZiAvKiBfQVVUSF9IXyAqLwpkaWZmIC0tZ2l0IGEvYmlnbnVtLmMgYi9iaWdudW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGI1MjIwCi0tLSAvZGV2L251bGwKKysrIGIvYmlnbnVtLmMKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworLyogQ29udGFpbnMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgbXBfaW50IGhhbmRsaW5nICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorCisvKiB3cmFwcGVyIGZvciBtcF9pbml0LCBmYWlsaW5nIGZhdGFsbHkgb24gZXJyb3JzIChtZW1vcnkgYWxsb2NhdGlvbikgKi8KK3ZvaWQgbV9tcF9pbml0KG1wX2ludCAqbXApIHsKKworCWlmIChtcF9pbml0KG1wKSAhPSBNUF9PS0FZKSB7CisJCWRyb3BiZWFyX2V4aXQoIm1lbSBhbGxvYyBlcnJvciIpOworCX0KK30KKworLyogc2ltcGxpZmllZCBkdXBsaWNhdGlvbiBvZiBibl9tcF9tdWx0aSdzIG1wX2luaXRfbXVsdGksIGJ1dCBkaWUgZmF0YWxseQorICogb24gZXJyb3IgKi8KK3ZvaWQgbV9tcF9pbml0X211bHRpKG1wX2ludCAqbXAsIC4uLikgCit7CisgICAgbXBfaW50KiBjdXJfYXJnID0gbXA7CisgICAgdmFfbGlzdCBhcmdzOworCisgICAgdmFfc3RhcnQoYXJncywgbXApOyAgICAgICAgLyogaW5pdCBhcmdzIHRvIG5leHQgYXJndW1lbnQgZnJvbSBjYWxsZXIgKi8KKyAgICB3aGlsZSAoY3VyX2FyZyAhPSBOVUxMKSB7CisgICAgICAgIGlmIChtcF9pbml0KGN1cl9hcmcpICE9IE1QX09LQVkpIHsKKwkJCWRyb3BiZWFyX2V4aXQoIm1lbSBhbGxvYyBlcnJvciIpOworICAgICAgICB9CisgICAgICAgIGN1cl9hcmcgPSB2YV9hcmcoYXJncywgbXBfaW50Kik7CisgICAgfQorICAgIHZhX2VuZChhcmdzKTsKK30KKwordm9pZCBieXRlc190b19tcChtcF9pbnQgKm1wLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBieXRlcywgdW5zaWduZWQgaW50IGxlbikgeworCisJaWYgKG1wX3JlYWRfdW5zaWduZWRfYmluKG1wLCAodW5zaWduZWQgY2hhciopYnl0ZXMsIGxlbikgIT0gTVBfT0tBWSkgeworCQlkcm9wYmVhcl9leGl0KCJtZW0gYWxsb2MgZXJyb3IiKTsKKwl9Cit9CisKKy8qIGhhc2ggdGhlIHNzaCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbXBfaW50IG1wICovCit2b2lkIHNoYTFfcHJvY2Vzc19tcChoYXNoX3N0YXRlICpocywgbXBfaW50ICptcCkgeworCisJaW50IGk7CisJYnVmZmVyICogYnVmOworCisJYnVmID0gYnVmX25ldyg1MTIgKyAyMCk7IC8qIG1heCBidWZmZXIgaXMgYSA0MDk2IGJpdCBrZXksIAorCQkJCQkJCQlwbHVzIGhlYWRlciArIHNvbWUgbGVld2F5Ki8KKwlidWZfcHV0bXBpbnQoYnVmLCBtcCk7CisJaSA9IGJ1Zi0+cG9zOworCWJ1Zl9zZXRwb3MoYnVmLCAwKTsKKwlzaGExX3Byb2Nlc3MoaHMsIGJ1Zl9nZXRwdHIoYnVmLCBpKSwgaSk7CisJYnVmX2ZyZWUoYnVmKTsKK30KZGlmZiAtLWdpdCBhL2JpZ251bS5oIGIvYmlnbnVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQyZjgxMQotLS0gL2Rldi9udWxsCisrKyBiL2JpZ251bS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpZm5kZWYgX0JJR05VTV9IXworI2RlZmluZSBfQklHTlVNX0hfCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorCit2b2lkIG1fbXBfaW5pdChtcF9pbnQgKm1wKTsKK3ZvaWQgbV9tcF9pbml0X211bHRpKG1wX2ludCAqbXAsIC4uLik7Cit2b2lkIGJ5dGVzX3RvX21wKG1wX2ludCAqbXAsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ5dGVzLCB1bnNpZ25lZCBpbnQgbGVuKTsKK3ZvaWQgc2hhMV9wcm9jZXNzX21wKGhhc2hfc3RhdGUgKmhzLCBtcF9pbnQgKm1wKTsKKworI2VuZGlmIC8qIF9CSUdOVU1fSF8gKi8KZGlmZiAtLWdpdCBhL2J1ZmZlci5jIGIvYnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5ZmE2ZgotLS0gL2Rldi9udWxsCisrKyBiL2J1ZmZlci5jCkBAIC0wLDAgKzEsMzM4IEBACisvKgorICogRHJvcGJlYXIgU1NICisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisvKiBCdWZmZXIgaGFuZGxpbmcgcm91dGluZXMsIGRlc2lnbmVkIHRvIGF2b2lkIG92ZXJmbG93cy91c2luZyBpbnZhbGlkIGRhdGEgKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisKKy8qIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3Mgd2hlbiBpbmNyZW1lbnRpbmcgYnVmZmVyIHBvc2l0aW9uL2xlbmd0aC4KKyAqIENhbGxpbmcgZnVuY3Rpb25zIHNob3VsZCBjaGVjayBhcmd1bWVudHMgZmlyc3QsIGJ1dCB0aGlzIHByb3ZpZGVzIGEKKyAqIGJhY2tzdG9wICovCisjZGVmaW5lIEJVRl9NQVhfSU5DUiAxMDAwMDAwMDAwCisjZGVmaW5lIEJVRl9NQVhfU0laRSAxMDAwMDAwMDAwCisKKy8qIGF2b2lkIGV4Y2Vzc2l2ZWx5IGxhcmdlIG51bWJlcnMsID4gfjgxOTIgYml0cyAqLworI2RlZmluZSBCVUZfTUFYX01QSU5UICg4MjQwIC8gOCkKKworLyogQ3JlYXRlIChtYWxsb2MpIGEgbmV3IGJ1ZmZlciBvZiBzaXplICovCitidWZmZXIqIGJ1Zl9uZXcodW5zaWduZWQgaW50IHNpemUpIHsKKworCWJ1ZmZlciogYnVmOworCQorCWlmIChzaXplID4gQlVGX01BWF9TSVpFKSB7CisJCWRyb3BiZWFyX2V4aXQoImJ1Zi0+c2l6ZSB0b28gYmlnIik7CisJfQorCisJYnVmID0gKGJ1ZmZlciopbV9tYWxsb2Moc2l6ZW9mKGJ1ZmZlcikpOworCisJaWYgKHNpemUgPiAwKSB7CisJCWJ1Zi0+ZGF0YSA9ICh1bnNpZ25lZCBjaGFyKiltX21hbGxvYyhzaXplKTsKKwl9IGVsc2UgeworCQlidWYtPmRhdGEgPSBOVUxMOworCX0KKworCWJ1Zi0+c2l6ZSA9IHNpemU7CisJYnVmLT5wb3MgPSAwOworCWJ1Zi0+bGVuID0gMDsKKworCXJldHVybiBidWY7CisKK30KKworLyogZnJlZSB0aGUgYnVmZmVyJ3MgZGF0YSBhbmQgdGhlIGJ1ZmZlciBpdHNlbGYgKi8KK3ZvaWQgYnVmX2ZyZWUoYnVmZmVyKiBidWYpIHsKKworCW1fZnJlZShidWYtPmRhdGEpCisJbV9mcmVlKGJ1Zik7Cit9CisKKy8qIG92ZXJ3cml0ZSB0aGUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciB0byBjbGVhciBpdCAqLwordm9pZCBidWZfYnVybihidWZmZXIqIGJ1ZikgeworCQorCW1fYnVybihidWYtPmRhdGEsIGJ1Zi0+c2l6ZSk7CisKK30KKworLyogcmVzaXplIGEgYnVmZmVyLCBwb3MgYW5kIGxlbiB3aWxsIGJlIHJlcG9zaXRpb25lZCBpZiByZXF1aXJlZCB3aGVuCisgKiBkb3duc2l6aW5nICovCit2b2lkIGJ1Zl9yZXNpemUoYnVmZmVyICpidWYsIHVuc2lnbmVkIGludCBuZXdzaXplKSB7CisKKwlpZiAobmV3c2l6ZSA+IEJVRl9NQVhfU0laRSkgeworCQlkcm9wYmVhcl9leGl0KCJidWYtPnNpemUgdG9vIGJpZyIpOworCX0KKworCWJ1Zi0+ZGF0YSA9IG1fcmVhbGxvYyhidWYtPmRhdGEsIG5ld3NpemUpOworCWJ1Zi0+c2l6ZSA9IG5ld3NpemU7CisJYnVmLT5sZW4gPSBNSU4obmV3c2l6ZSwgYnVmLT5sZW4pOworCWJ1Zi0+cG9zID0gTUlOKG5ld3NpemUsIGJ1Zi0+cG9zKTsKKworfQorCisvKiBDcmVhdGUgYSBjb3B5IG9mIGJ1ZiwgYWxsb2NhdGluZyByZXF1aXJlZCBtZW1vcnkgZXRjLiAqLworLyogVGhlIG5ldyBidWZmZXIgaXMgc2l6ZWQgdGhlIHNhbWUgYXMgdGhlIGxlbmd0aCBvZiB0aGUgc291cmNlIGJ1ZmZlci4gKi8KK2J1ZmZlciogYnVmX25ld2NvcHkoYnVmZmVyKiBidWYpIHsKKwkKKwlidWZmZXIqIHJldDsKKworCXJldCA9IGJ1Zl9uZXcoYnVmLT5sZW4pOworCXJldC0+bGVuID0gYnVmLT5sZW47CisJbWVtY3B5KHJldC0+ZGF0YSwgYnVmLT5kYXRhLCBidWYtPmxlbik7CisJcmV0dXJuIHJldDsKK30KKworLyogU2V0IHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciAqLwordm9pZCBidWZfc2V0bGVuKGJ1ZmZlciogYnVmLCB1bnNpZ25lZCBpbnQgbGVuKSB7CisJaWYgKGxlbiA+IGJ1Zi0+c2l6ZSkgeworCQlkcm9wYmVhcl9leGl0KCJiYWQgYnVmX3NldGxlbiIpOworCX0KKwlidWYtPmxlbiA9IGxlbjsKK30KKworLyogSW5jcmVtZW50IHRoZSBsZW5ndGggb2YgdGhlIGJ1ZmZlciAqLwordm9pZCBidWZfaW5jcmxlbihidWZmZXIqIGJ1ZiwgdW5zaWduZWQgaW50IGluY3IpIHsKKwlpZiAoaW5jciA+IEJVRl9NQVhfSU5DUiB8fCBidWYtPmxlbiArIGluY3IgPiBidWYtPnNpemUpIHsKKwkJZHJvcGJlYXJfZXhpdCgiYmFkIGJ1Zl9pbmNybGVuIik7CisJfQorCWJ1Zi0+bGVuICs9IGluY3I7Cit9CisvKiBTZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBidWZmZXIgKi8KK3ZvaWQgYnVmX3NldHBvcyhidWZmZXIqIGJ1ZiwgdW5zaWduZWQgaW50IHBvcykgeworCisJaWYgKHBvcyA+IGJ1Zi0+bGVuKSB7CisJCWRyb3BiZWFyX2V4aXQoImJhZCBidWZfc2V0cG9zIik7CisJfQorCWJ1Zi0+cG9zID0gcG9zOworfQorCisvKiBpbmNyZW1lbnQgdGhlIHBvc3Rpb24gYnkgaW5jciwgaW5jcmVhc2luZyB0aGUgYnVmZmVyIGxlbmd0aCBpZiByZXF1aXJlZCAqLwordm9pZCBidWZfaW5jcndyaXRlcG9zKGJ1ZmZlciogYnVmLCB1bnNpZ25lZCBpbnQgaW5jcikgeworCWlmIChpbmNyID4gQlVGX01BWF9JTkNSIHx8IGJ1Zi0+cG9zICsgaW5jciA+IGJ1Zi0+c2l6ZSkgeworCQlkcm9wYmVhcl9leGl0KCJiYWQgYnVmX2luY3J3cml0ZXBvcyIpOworCX0KKwlidWYtPnBvcyArPSBpbmNyOworCWlmIChidWYtPnBvcyA+IGJ1Zi0+bGVuKSB7CisJCWJ1Zi0+bGVuID0gYnVmLT5wb3M7CisJfQorfQorCisvKiBpbmNyZW1lbnQgdGhlIHBvc2l0aW9uIGJ5IGluY3IsIG5lZ2F0aXZlIHZhbHVlcyBhcmUgYWxsb3dlZCwgdG8KKyAqIGRlY3JlbWVudCB0aGUgcG9zKi8KK3ZvaWQgYnVmX2luY3Jwb3MoYnVmZmVyKiBidWYsICBpbnQgaW5jcikgeworCWlmIChpbmNyID4gQlVGX01BWF9JTkNSIHx8CisJCQkodW5zaWduZWQgaW50KSgoaW50KWJ1Zi0+cG9zICsgaW5jcikgPiBidWYtPmxlbiAKKwkJCXx8ICgoaW50KWJ1Zi0+cG9zICsgaW5jcikgPCAwKSB7CisJCWRyb3BiZWFyX2V4aXQoImJhZCBidWZfaW5jcnBvcyIpOworCX0KKwlidWYtPnBvcyArPSBpbmNyOworfQorCisvKiBHZXQgYSBieXRlIGZyb20gdGhlIGJ1ZmZlciBhbmQgaW5jcmVtZW50IHRoZSBwb3MgKi8KK3Vuc2lnbmVkIGNoYXIgYnVmX2dldGJ5dGUoYnVmZmVyKiBidWYpIHsKKworCS8qIFRoaXMgY2hlY2sgaXMgcmVhbGx5IGp1c3QgPT0sIGJ1dCB0aGUgPj0gYWxsb3dzIHVzIHRvIGNoZWNrIGZvciB0aGUKKwkgKiBiYWQgY2FzZSBvZiBwb3MgPiBsZW4sIHdoaWNoIHNob3VsZCBfbmV2ZXJfIGhhcHBlbi4gKi8KKwlpZiAoYnVmLT5wb3MgPj0gYnVmLT5sZW4pIHsKKwkJZHJvcGJlYXJfZXhpdCgiYmFkIGJ1Zl9nZXRieXRlIik7CisJfQorCXJldHVybiBidWYtPmRhdGFbYnVmLT5wb3MrK107Cit9CisKKy8qIEdldCBhIGJvb2wgZnJvbSB0aGUgYnVmZmVyIGFuZCBpbmNyZW1lbnQgdGhlIHBvcyAqLwordW5zaWduZWQgY2hhciBidWZfZ2V0Ym9vbChidWZmZXIqIGJ1ZikgeworCisJdW5zaWduZWQgY2hhciBiOworCWIgPSBidWZfZ2V0Ynl0ZShidWYpOworCWlmIChiICE9IDApCisJCWIgPSAxOworCXJldHVybiBiOworfQorCisvKiBwdXQgYSBieXRlLCBpbmNyZW1lbnRpbmcgdGhlIGxlbmd0aCBpZiByZXF1aXJlZCAqLwordm9pZCBidWZfcHV0Ynl0ZShidWZmZXIqIGJ1ZiwgdW5zaWduZWQgY2hhciB2YWwpIHsKKworCWlmIChidWYtPnBvcyA+PSBidWYtPmxlbikgeworCQlidWZfaW5jcmxlbihidWYsIDEpOworCX0KKwlidWYtPmRhdGFbYnVmLT5wb3NdID0gdmFsOworCWJ1Zi0+cG9zKys7Cit9CisKKy8qIHJldHVybnMgYW4gaW4tcGxhY2UgcG9pbnRlciB0byB0aGUgYnVmZmVyLCBjaGVja2luZyB0aGF0CisgKiB0aGUgbmV4dCBsZW4gYnl0ZXMgZnJvbSB0aGF0IHBvc2l0aW9uIGNhbiBiZSB1c2VkICovCit1bnNpZ25lZCBjaGFyKiBidWZfZ2V0cHRyKGJ1ZmZlciogYnVmLCB1bnNpZ25lZCBpbnQgbGVuKSB7CisKKwlpZiAoYnVmLT5wb3MgKyBsZW4gPiBidWYtPmxlbikgeworCQlkcm9wYmVhcl9leGl0KCJiYWQgYnVmX2dldHB0ciIpOworCX0KKwlyZXR1cm4gJmJ1Zi0+ZGF0YVtidWYtPnBvc107Cit9CisKKy8qIGxpa2UgYnVmX2dldHB0ciwgYnV0IGNoZWNrcyBhZ2FpbnN0IHRvdGFsIHNpemUsIG5vdCB1c2VkIGxlbmd0aC4KKyAqIFRoaXMgYWxsb3dzIHdyaXRpbmcgcGFzdCB0aGUgdXNlZCBsZW5ndGgsIGJ1dCBub3QgcGFzdCB0aGUgc2l6ZSAqLwordW5zaWduZWQgY2hhciogYnVmX2dldHdyaXRlcHRyKGJ1ZmZlciogYnVmLCB1bnNpZ25lZCBpbnQgbGVuKSB7CisKKwlpZiAoYnVmLT5wb3MgKyBsZW4gPiBidWYtPnNpemUpIHsKKwkJZHJvcGJlYXJfZXhpdCgiYmFkIGJ1Zl9nZXR3cml0ZXB0ciIpOworCX0KKwlyZXR1cm4gJmJ1Zi0+ZGF0YVtidWYtPnBvc107Cit9CisKKy8qIFJldHVybiBhIG51bGwtdGVybWluYXRlZCBzdHJpbmcsIGl0IGlzIG1hbGxvY2VkLCBzbyBtdXN0IGJlIGZyZWUoKWVkCisgKiBOb3RlIHRoYXQgdGhlIHN0cmluZyBpc24ndCBjaGVja2VkIGZvciBudWxsIGJ5dGVzLCBoZW5jZSB0aGUgcmV0bGVuCisgKiBtYXkgYmUgbG9uZ2VyIHRoYW4gd2hhdCBpcyByZXR1cm5lZCBieSBzdHJsZW4gKi8KK3Vuc2lnbmVkIGNoYXIqIGJ1Zl9nZXRzdHJpbmcoYnVmZmVyKiBidWYsIHVuc2lnbmVkIGludCAqcmV0bGVuKSB7CisKKwl1bnNpZ25lZCBpbnQgbGVuOworCXVuc2lnbmVkIGNoYXIqIHJldDsKKwlsZW4gPSBidWZfZ2V0aW50KGJ1Zik7CisJaWYgKGxlbiA+IE1BWF9TVFJJTkdfTEVOKSB7CisJCWRyb3BiZWFyX2V4aXQoInN0cmluZyB0b28gbG9uZyIpOworCX0KKworCWlmIChyZXRsZW4gIT0gTlVMTCkgeworCQkqcmV0bGVuID0gbGVuOworCX0KKwlyZXQgPSBtX21hbGxvYyhsZW4rMSk7CisJbWVtY3B5KHJldCwgYnVmX2dldHB0cihidWYsIGxlbiksIGxlbik7CisJYnVmX2luY3Jwb3MoYnVmLCBsZW4pOworCXJldFtsZW5dID0gJ1wwJzsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIEp1c3QgaW5jcmVtZW50IHRoZSBidWZmZXIgcG9zaXRpb24gdGhlIHNhbWUgYXMgaWYgd2UnZCB1c2VkIGJ1Zl9nZXRzdHJpbmcsCisgKiBidXQgZG9uJ3QgYm90aGVyIGNvcHlpbmcvbWFsbG9jKClpbmcgZm9yIGl0ICovCit2b2lkIGJ1Zl9lYXRzdHJpbmcoYnVmZmVyICpidWYpIHsKKworCWJ1Zl9pbmNycG9zKCBidWYsIGJ1Zl9nZXRpbnQoYnVmKSApOworfQorCisvKiBHZXQgYW4gdWludDMyIGZyb20gdGhlIGJ1ZmZlciBhbmQgaW5jcmVtZW50IHRoZSBwb3MgKi8KK3Vuc2lnbmVkIGludCBidWZfZ2V0aW50KGJ1ZmZlciogYnVmKSB7CisJdW5zaWduZWQgaW50IHJldDsKKworCUxPQUQzMkgocmV0LCBidWZfZ2V0cHRyKGJ1ZiwgNCkpOworCWJ1Zl9pbmNycG9zKGJ1ZiwgNCk7CisJcmV0dXJuIHJldDsKK30KKworLyogcHV0IGEgMzJiaXQgdWludCBpbnRvIHRoZSBidWZmZXIsIGluY3IgYnVmZmVybGVuICYgcG9zIGlmIHJlcXVpcmVkICovCit2b2lkIGJ1Zl9wdXRpbnQoYnVmZmVyKiBidWYsIGludCB1bnNpZ25lZCB2YWwpIHsKKworCVNUT1JFMzJIKHZhbCwgYnVmX2dldHdyaXRlcHRyKGJ1ZiwgNCkpOworCWJ1Zl9pbmNyd3JpdGVwb3MoYnVmLCA0KTsKKworfQorCisvKiBwdXQgYSBTU0ggc3R5bGUgc3RyaW5nIGludG8gdGhlIGJ1ZmZlciwgaW5jcmVhc2luZyBidWZmZXIgbGVuIGlmIHJlcXVpcmVkICovCit2b2lkIGJ1Zl9wdXRzdHJpbmcoYnVmZmVyKiBidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHN0ciwgdW5zaWduZWQgaW50IGxlbikgeworCQorCWJ1Zl9wdXRpbnQoYnVmLCBsZW4pOworCWJ1Zl9wdXRieXRlcyhidWYsIHN0ciwgbGVuKTsKKworfQorCisvKiBwdXQgdGhlIHNldCBvZiBsZW4gYnl0ZXMgaW50byB0aGUgYnVmZmVyLCBpbmNyZW1lbnRpbmcgdGhlIHBvcywgaW5jcmVhc2luZworICogbGVuIGlmIHJlcXVpcmVkICovCit2b2lkIGJ1Zl9wdXRieXRlcyhidWZmZXIgKmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHVuc2lnbmVkIGludCBsZW4pIHsKKwltZW1jcHkoYnVmX2dldHdyaXRlcHRyKGJ1ZiwgbGVuKSwgYnl0ZXMsIGxlbik7CisJYnVmX2luY3J3cml0ZXBvcyhidWYsIGxlbik7Cit9CisJCisKKy8qIGZvciBvdXIgcHVycG9zZXMgd2Ugb25seSBuZWVkIHBvc2l0aXZlIChvciAwKSBudW1iZXJzLCBzbyB3aWxsCisgKiBmYWlsIGlmIHdlIGdldCBuZWdhdGl2ZSBudW1iZXJzICovCit2b2lkIGJ1Zl9wdXRtcGludChidWZmZXIqIGJ1ZiwgbXBfaW50ICogbXApIHsKKworCXVuc2lnbmVkIGludCBsZW4sIHBhZCA9IDA7CisJVFJBQ0UoKCJlbnRlciBidWZfcHV0bXBpbnQiKSkKKworCWRyb3BiZWFyX2Fzc2VydChtcCAhPSBOVUxMKTsKKworCWlmIChTSUdOKG1wKSA9PSBNUF9ORUcpIHsKKwkJZHJvcGJlYXJfZXhpdCgibmVnYXRpdmUgYmlnbnVtIik7CisJfQorCisJLyogemVybyBjaGVjayAqLworCWlmIChVU0VEKG1wKSA9PSAxICYmIERJR0lUKG1wLCAwKSA9PSAwKSB7CisJCWxlbiA9IDA7CisJfSBlbHNlIHsKKwkJLyogU1NIIHNwZWMgcmVxdWlyZXMgcGFkZGluZyBmb3IgbXBpbnRzIHdpdGggdGhlIE1TQiBzZXQsIHRoaXMgY29kZQorCQkgKiBpbXBsZW1lbnRzIGl0ICovCisJCWxlbiA9IG1wX2NvdW50X2JpdHMobXApOworCQkvKiBpZiB0aGUgdG9wIGJpdCBvZiBNU0IgaXMgc2V0LCB3ZSBuZWVkIHRvIHBhZCAqLworCQlwYWQgPSAobGVuJTggPT0gMCkgPyAxIDogMDsKKwkJbGVuID0gbGVuIC8gOCArIDE7IC8qIGRvbid0IHdvcnJ5IGFib3V0IHJvdW5kaW5nLCB3ZSBuZWVkIGl0IGZvcgorCQkJCQkJCSAgcGFkZGluZyBhbnl3YXkgd2hlbiBsZW4lOCA9PSAwICovCisKKwl9CisKKwkvKiBzdG9yZSB0aGUgbGVuZ3RoICovCisJYnVmX3B1dGludChidWYsIGxlbik7CisJCisJLyogc3RvcmUgdGhlIGFjdHVhbCB2YWx1ZSAqLworCWlmIChsZW4gPiAwKSB7CisJCWlmIChwYWQpIHsKKwkJCWJ1Zl9wdXRieXRlKGJ1ZiwgMHgwMCk7CisJCX0KKwkJaWYgKG1wX3RvX3Vuc2lnbmVkX2JpbihtcCwgYnVmX2dldHdyaXRlcHRyKGJ1ZiwgbGVuLXBhZCkpICE9IE1QX09LQVkpIHsKKwkJCWRyb3BiZWFyX2V4aXQoIm1waW50IGVycm9yIik7CisJCX0KKwkJYnVmX2luY3J3cml0ZXBvcyhidWYsIGxlbi1wYWQpOworCX0KKworCVRSQUNFKCgibGVhdmUgYnVmX3B1dG1waW50IikpCit9CisKKy8qIFJldHJpZXZlIGFuIG1wX2ludCBmcm9tIHRoZSBidWZmZXIuCisgKiBXaWxsIGZhaWwgZm9yIC12ZSBzaW5jZSB0aGV5IHNob3VsZG4ndCBiZSByZXF1aXJlZCBoZXJlLgorICogUmV0dXJucyBEUk9QQkVBUl9TVUNDRVNTIG9yIERST1BCRUFSX0ZBSUxVUkUgKi8KK2ludCBidWZfZ2V0bXBpbnQoYnVmZmVyKiBidWYsIG1wX2ludCogbXApIHsKKworCXVuc2lnbmVkIGludCBsZW47CisJbGVuID0gYnVmX2dldGludChidWYpOworCQorCWlmIChsZW4gPT0gMCkgeworCQltcF96ZXJvKG1wKTsKKwkJcmV0dXJuIERST1BCRUFSX1NVQ0NFU1M7CisJfQorCisJaWYgKGxlbiA+IEJVRl9NQVhfTVBJTlQpIHsKKwkJcmV0dXJuIERST1BCRUFSX0ZBSUxVUkU7CisJfQorCisJLyogY2hlY2sgZm9yIG5lZ2F0aXZlICovCisJaWYgKCpidWZfZ2V0cHRyKGJ1ZiwgMSkgJiAoMSA8PCAoQ0hBUl9CSVQtMSkpKSB7CisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0KKworCWlmIChtcF9yZWFkX3Vuc2lnbmVkX2JpbihtcCwgYnVmX2dldHB0cihidWYsIGxlbiksIGxlbikgIT0gTVBfT0tBWSkgeworCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9CisKKwlidWZfaW5jcnBvcyhidWYsIGxlbik7CisJcmV0dXJuIERST1BCRUFSX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9idWZmZXIuaCBiL2J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YWE2ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9idWZmZXIuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogRHJvcGJlYXIgLSBhIFNTSDIgc2VydmVyCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaWZuZGVmIF9CVUZGRVJfSF8KKworI2RlZmluZSBfQlVGRkVSX0hfCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorCitzdHJ1Y3QgYnVmIHsKKworCXVuc2lnbmVkIGNoYXIgKiBkYXRhOworCXVuc2lnbmVkIGludCBsZW47IC8qIHRoZSB1c2VkIHNpemUgKi8KKwl1bnNpZ25lZCBpbnQgcG9zOworCXVuc2lnbmVkIGludCBzaXplOyAvKiB0aGUgbWVtb3J5IHNpemUgKi8KKworfTsKKwordHlwZWRlZiBzdHJ1Y3QgYnVmIGJ1ZmZlcjsKKworYnVmZmVyICogYnVmX25ldyh1bnNpZ25lZCBpbnQgc2l6ZSk7Cit2b2lkIGJ1Zl9yZXNpemUoYnVmZmVyICpidWYsIHVuc2lnbmVkIGludCBuZXdzaXplKTsKK3ZvaWQgYnVmX2ZyZWUoYnVmZmVyKiBidWYpOwordm9pZCBidWZfYnVybihidWZmZXIqIGJ1Zik7CitidWZmZXIqIGJ1Zl9uZXdjb3B5KGJ1ZmZlciogYnVmKTsKK3ZvaWQgYnVmX3NldGxlbihidWZmZXIqIGJ1ZiwgdW5zaWduZWQgaW50IGxlbik7Cit2b2lkIGJ1Zl9pbmNybGVuKGJ1ZmZlciogYnVmLCB1bnNpZ25lZCBpbnQgaW5jcik7Cit2b2lkIGJ1Zl9zZXRwb3MoYnVmZmVyKiBidWYsIHVuc2lnbmVkIGludCBwb3MpOwordm9pZCBidWZfaW5jcnBvcyhidWZmZXIqIGJ1ZiwgaW50IGluY3IpOyAvKiAtdmUgaXMgb2ssIHRvIGdvIGJhY2t3YXJkcyAqLwordm9pZCBidWZfaW5jcndyaXRlcG9zKGJ1ZmZlciogYnVmLCB1bnNpZ25lZCBpbnQgaW5jcik7Cit1bnNpZ25lZCBjaGFyIGJ1Zl9nZXRieXRlKGJ1ZmZlciogYnVmKTsKK3Vuc2lnbmVkIGNoYXIgYnVmX2dldGJvb2woYnVmZmVyKiBidWYpOwordm9pZCBidWZfcHV0Ynl0ZShidWZmZXIqIGJ1ZiwgdW5zaWduZWQgY2hhciB2YWwpOwordW5zaWduZWQgY2hhciogYnVmX2dldHB0cihidWZmZXIqIGJ1ZiwgdW5zaWduZWQgaW50IGxlbik7Cit1bnNpZ25lZCBjaGFyKiBidWZfZ2V0d3JpdGVwdHIoYnVmZmVyKiBidWYsIHVuc2lnbmVkIGludCBsZW4pOwordW5zaWduZWQgY2hhciogYnVmX2dldHN0cmluZyhidWZmZXIqIGJ1ZiwgdW5zaWduZWQgaW50ICpyZXRsZW4pOwordm9pZCBidWZfZWF0c3RyaW5nKGJ1ZmZlciAqYnVmKTsKK3ZvaWQgYnVmX3B1dGludChidWZmZXIqIGJ1ZiwgdW5zaWduZWQgaW50IHZhbCk7Cit2b2lkIGJ1Zl9wdXRzdHJpbmcoYnVmZmVyKiBidWYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHN0ciwgdW5zaWduZWQgaW50IGxlbik7Cit2b2lkIGJ1Zl9wdXRieXRlcyhidWZmZXIgKmJ1ZiwgY29uc3QgdW5zaWduZWQgY2hhciAqYnl0ZXMsIHVuc2lnbmVkIGludCBsZW4pOwordm9pZCBidWZfcHV0bXBpbnQoYnVmZmVyKiBidWYsIG1wX2ludCAqIG1wKTsKK2ludCBidWZfZ2V0bXBpbnQoYnVmZmVyKiBidWYsIG1wX2ludCogbXApOwordW5zaWduZWQgaW50IGJ1Zl9nZXRpbnQoYnVmZmVyKiBidWYpOworCisjZW5kaWYgLyogX0JVRkZFUl9IXyAqLwpkaWZmIC0tZ2l0IGEvY2hhbm5lbC5oIGIvY2hhbm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZmUzOTIKLS0tIC9kZXYvbnVsbAorKysgYi9jaGFubmVsLmgKQEAgLTAsMCArMSwxMzYgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpZm5kZWYgX0NIQU5ORUxfSF8KKyNkZWZpbmUgX0NIQU5ORUxfSF8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAiY2lyY2J1ZmZlci5oIgorCisvKiBjaGFubmVsLT50eXBlIHZhbHVlcyAqLworI2RlZmluZSBDSEFOTkVMX0lEX05PTkUgMAorI2RlZmluZSBDSEFOTkVMX0lEX1NFU1NJT04gMQorI2RlZmluZSBDSEFOTkVMX0lEX1gxMSAyCisjZGVmaW5lIENIQU5ORUxfSURfQUdFTlQgMworI2RlZmluZSBDSEFOTkVMX0lEX1RDUERJUkVDVCA0CisjZGVmaW5lIENIQU5ORUxfSURfVENQRk9SV0FSREVEIDUKKworI2RlZmluZSBTU0hfT1BFTl9BRE1JTklTVFJBVElWRUxZX1BST0hJQklURUQgICAgMQorI2RlZmluZSBTU0hfT1BFTl9DT05ORUNUX0ZBSUxFRCAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBTU0hfT1BFTl9VTktOT1dOX0NIQU5ORUxfVFlQRSAgICAgICAgICAgMworI2RlZmluZSBTU0hfT1BFTl9SRVNPVVJDRV9TSE9SVEFHRSAgICAgICAgICAgICAgNAorCisvKiBOb3QgYSByZWFsIHR5cGUgKi8KKyNkZWZpbmUgU1NIX09QRU5fSU5fUFJPR1JFU1MJCQkJCTk5CisKKyNkZWZpbmUgTUFYX0NIQU5ORUxTIDEwMCAvKiBzaW1wbGUgbWVtIHJlc3RyaWN0aW9uLCBpbmNsdWRlcyBlYWNoIHRjcC94MTEKKwkJCQkJCQljb25uZWN0aW9uLCBzbyBjYW4ndCBiZSBfdG9vXyBzbWFsbCAqLworCisjZGVmaW5lIENIQU5fRVhURU5EX1NJWkUgMyAvKiBob3cgbWFueSBleHRyYSBzbG90cyB0byBhZGQgd2hlbiB3ZSBuZWVkIG1vcmUgKi8KKworI2RlZmluZSBSRUNWX01BWFdJTkRPVyA4MDAwIC8qIHR3ZWFrICovCisjZGVmaW5lIFJFQ1ZfV0lORE9XRVhURU5EIDEwMDAgLyogV2Ugc2VuZCBhICJ3aW5kb3cgZXh0ZW5kIiBldmVyeQorCQkJCQkJCQlSRUNWX1dJTkRPV0VYVEVORCBieXRlcyAqLworI2RlZmluZSBSRUNWX01BWFBBQ0tFVCBSRUNWX01BWFdJTkRPVyAvKiB0d2VhayAqLworCitzdHJ1Y3QgQ2hhblR5cGU7CisKK3N0cnVjdCBDaGFubmVsIHsKKworCXVuc2lnbmVkIGludCBpbmRleDsgLyogdGhlIGxvY2FsIGNoYW5uZWwgaW5kZXggKi8KKwl1bnNpZ25lZCBpbnQgcmVtb3RlY2hhbjsKKwl1bnNpZ25lZCBpbnQgcmVjdndpbmRvdywgdHJhbnN3aW5kb3c7CisJdW5zaWduZWQgaW50IHJlY3Zkb25lbGVuOworCXVuc2lnbmVkIGludCByZWN2bWF4cGFja2V0LCB0cmFuc21heHBhY2tldDsKKwl2b2lkKiB0eXBlZGF0YTsgLyogYSBwb2ludGVyIHRvIHR5cGUgc3BlY2lmaWMgZGF0YSAqLworCWludCB3cml0ZWZkOyAvKiByZWFkIGZyb20gd2lyZSwgd3JpdHRlbiB0byBpbnNlY3VyZSBzaWRlICovCisJaW50IHJlYWRmZDsgLyogcmVhZCBmcm9tIGluc2VjdXJlIHNpemUsIHdyaXR0ZW4gdG8gd2lyZSAqLworCWludCBlcnJmZDsgLyogdXNlZCBsaWtlIHdyaXRlZmQgb3IgcmVhZGZkLCBkZXBlbmRpbmcgaWYgaXQncyBjbGllbnQgb3Igc2VydmVyLgorCQkJCSAgRG9lc24ndCBleGFjdGx5IGJlbG9uZyBoZXJlLCBidXQgaXMgY2xlYW5lciBoZXJlICovCisJY2lyY2J1ZmZlciAqd3JpdGVidWY7IC8qIGRhdGEgZnJvbSB0aGUgd2lyZSwgZm9yIGxvY2FsIGNvbnN1bXB0aW9uICovCisJY2lyY2J1ZmZlciAqZXh0cmFidWY7IC8qIGV4dGVuZGVkLWRhdGEgZm9yIHRoZSBwcm9ncmFtIC0gdXNlZCBsaWtlIHdyaXRlYnVmCisJCQkJCSAgICAgYnV0IGZvciBzdGRlcnIgKi8KKworCS8qIHdoZXRoZXIgY2xvc2UvZW9mIG1lc3NhZ2VzIGhhdmUgYmVlbiBleGNoYW5nZWQgKi8KKwlpbnQgc2VudF9jbG9zZSwgcmVjdl9jbG9zZTsKKwlpbnQgcmVjdl9lb2YsIHNlbnRfZW9mOworCisJaW50IGluaXRjb25uOyAvKiB1c2VkIGZvciBUQ1AgZm9yd2FyZGluZywgd2hldGhlciB0aGUgY2hhbm5lbCBoYXMgYmVlbgorCQkJCQkgZnVsbHkgaW5pdGlhbGlzZWQgKi8KKworCWludCBhd2FpdF9vcGVuOyAvKiBmbGFnIGluZGljYXRpbmcgd2hldGhlciB3ZSd2ZSBzZW50IGFuIG9wZW4gcmVxdWVzdAorCQkJCQkgICBmb3IgdGhpcyBjaGFubmVsIChhbmQgYXJlIGF3YWl0aW5nIGEgY29uZmlybWF0aW9uCisJCQkJCSAgIG9yIGZhaWx1cmUpLiAqLworCisJaW50IGZsdXNoaW5nOworCisJY29uc3Qgc3RydWN0IENoYW5UeXBlKiB0eXBlOworCit9OworCitzdHJ1Y3QgQ2hhblR5cGUgeworCisJaW50IHNlcGZkczsgLyogV2hldGhlciB0aGlzIGNoYW5uZWwgaGFzIHNlcGVyYXRlIHBpcGVzIGZvciBpbi9vdXQgb3Igbm90ICovCisJY2hhciAqbmFtZTsKKwlpbnQgKCppbml0aGFuZGxlcikoc3RydWN0IENoYW5uZWwqKTsKKwlpbnQgKCpjaGVja19jbG9zZSkoc3RydWN0IENoYW5uZWwqKTsKKwl2b2lkICgqcmVxaGFuZGxlcikoc3RydWN0IENoYW5uZWwqKTsKKwl2b2lkICgqY2xvc2VoYW5kbGVyKShzdHJ1Y3QgQ2hhbm5lbCopOworCit9OworCit2b2lkIGNoYW5pbml0aWFsaXNlKGNvbnN0IHN0cnVjdCBDaGFuVHlwZSAqY2hhbnR5cGVzW10pOwordm9pZCBjaGFuY2xlYW51cCgpOwordm9pZCBzZXRjaGFubmVsZmRzKGZkX3NldCAqcmVhZGZkLCBmZF9zZXQgKndyaXRlZmQpOwordm9pZCBjaGFubmVsaW8oZmRfc2V0ICpyZWFkZmQsIGZkX3NldCAqd3JpdGVmZCk7CitzdHJ1Y3QgQ2hhbm5lbCogZ2V0Y2hhbm5lbCgpOworc3RydWN0IENoYW5uZWwqIG5ld2NoYW5uZWwodW5zaWduZWQgaW50IHJlbW90ZWNoYW4sIAorCQljb25zdCBzdHJ1Y3QgQ2hhblR5cGUgKnR5cGUsIAorCQl1bnNpZ25lZCBpbnQgdHJhbnN3aW5kb3csIHVuc2lnbmVkIGludCB0cmFuc21heHBhY2tldCk7CisKK3ZvaWQgcmVjdl9tc2dfY2hhbm5lbF9vcGVuKCk7Cit2b2lkIHJlY3ZfbXNnX2NoYW5uZWxfcmVxdWVzdCgpOwordm9pZCBzZW5kX21zZ19jaGFubmVsX2ZhaWx1cmUoc3RydWN0IENoYW5uZWwgKmNoYW5uZWwpOwordm9pZCBzZW5kX21zZ19jaGFubmVsX3N1Y2Nlc3Moc3RydWN0IENoYW5uZWwgKmNoYW5uZWwpOwordm9pZCByZWN2X21zZ19jaGFubmVsX2RhdGEoKTsKK3ZvaWQgcmVjdl9tc2dfY2hhbm5lbF9leHRlbmRlZF9kYXRhKCk7Cit2b2lkIHJlY3ZfbXNnX2NoYW5uZWxfd2luZG93X2FkanVzdCgpOwordm9pZCByZWN2X21zZ19jaGFubmVsX2Nsb3NlKCk7Cit2b2lkIHJlY3ZfbXNnX2NoYW5uZWxfZW9mKCk7CisKK3ZvaWQgY29tbW9uX3JlY3ZfbXNnX2NoYW5uZWxfZGF0YShzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCwgaW50IGZkLCAKKwkJY2lyY2J1ZmZlciAqIGJ1Zik7CisKKyNpZmRlZiBEUk9QQkVBUl9DTElFTlQKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ2hhblR5cGUgY2xpY2hhbnNlc3M7CisjZW5kaWYKKworI2lmIGRlZmluZWQoVVNJTkdfTElTVEVORVJTKSB8fCBkZWZpbmVkKERST1BCRUFSX0NMSUVOVCkKK2ludCBzZW5kX21zZ19jaGFubmVsX29wZW5faW5pdChpbnQgZmQsIGNvbnN0IHN0cnVjdCBDaGFuVHlwZSAqdHlwZSk7Cit2b2lkIHJlY3ZfbXNnX2NoYW5uZWxfb3Blbl9jb25maXJtYXRpb24oKTsKK3ZvaWQgcmVjdl9tc2dfY2hhbm5lbF9vcGVuX2ZhaWx1cmUoKTsKKyNlbmRpZgorCisjZW5kaWYgLyogX0NIQU5ORUxfSF8gKi8KZGlmZiAtLWdpdCBhL2NoYW5zZXNzaW9uLmggYi9jaGFuc2Vzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxM2MyODUKLS0tIC9kZXYvbnVsbAorKysgYi9jaGFuc2Vzc2lvbi5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpZm5kZWYgX0NIQU5TRVNTSU9OX0hfCisjZGVmaW5lIF9DSEFOU0VTU0lPTl9IXworCisjaW5jbHVkZSAibG9naW5yZWMuaCIKKyNpbmNsdWRlICJjaGFubmVsLmgiCisjaW5jbHVkZSAibGlzdGVuZXIuaCIKKworc3RydWN0IGV4aXRpbmZvIHsKKworCWludCBleGl0cGlkOyAvKiAtMSBpZiBub3QgZXhpdGVkICovCisJaW50IGV4aXRzdGF0dXM7CisJaW50IGV4aXRzaWduYWw7CisJaW50IGV4aXRjb3JlOworfTsKKworc3RydWN0IENoYW5TZXNzIHsKKworCXVuc2lnbmVkIGNoYXIgKiBjbWQ7IC8qIGNvbW1hbmQgdG8gZXhlYyAqLworCXBpZF90IHBpZDsgLyogY2hpbGQgcHJvY2VzcyBwaWQgKi8KKworCS8qIHB0eSBkZXRhaWxzICovCisJaW50IG1hc3RlcjsgLyogdGhlIG1hc3RlciB0ZXJtaW5hbCBmZCovCisJaW50IHNsYXZlOworCXVuc2lnbmVkIGNoYXIgKiB0dHk7CisJdW5zaWduZWQgY2hhciAqIHRlcm07CisKKwkvKiBleGl0IGRldGFpbHMgKi8KKwlzdHJ1Y3QgZXhpdGluZm8gZXhpdDsKKwkKKyNpZm5kZWYgRElTQUJMRV9YMTFGV0QKKwlzdHJ1Y3QgTGlzdGVuZXIgKiB4MTFsaXN0ZW5lcjsKKwlpbnQgeDExcG9ydDsKKwljaGFyICogeDExYXV0aHByb3Q7CisJY2hhciAqIHgxMWF1dGhjb29raWU7CisJdW5zaWduZWQgaW50IHgxMXNjcmVlbm51bTsKKwl1bnNpZ25lZCBjaGFyIHgxMXNpbmdsZWNvbm47CisjZW5kaWYKKworI2lmbmRlZiBESVNBQkxFX0FHRU5URldECisJc3RydWN0IExpc3RlbmVyICogYWdlbnRsaXN0ZW5lcjsKKwljaGFyICogYWdlbnRmaWxlOworCWNoYXIgKiBhZ2VudGRpcjsKKyNlbmRpZgorfTsKKworc3RydWN0IENoaWxkUGlkIHsKKwlwaWRfdCBwaWQ7CisJc3RydWN0IENoYW5TZXNzICogY2hhbnNlc3M7Cit9OworCisKK3ZvaWQgYWRkbmV3dmFyKGNvbnN0IGNoYXIqIHBhcmFtLCBjb25zdCBjaGFyKiB2YXIpOworCit2b2lkIGNsaV9zZW5kX2NoYW5zZXNzX3JlcXVlc3QoKTsKK3ZvaWQgY2xpX3R0eV9jbGVhbnVwKCk7Cit2b2lkIGNsaV9jaGFuc2Vzc193aW5jaGFuZ2UoKTsKKwordm9pZCBzdnJfY2hhbnNlc3Npbml0aWFsaXNlKCk7CitleHRlcm4gY29uc3Qgc3RydWN0IENoYW5UeXBlIHN2cmNoYW5zZXNzOworCitzdHJ1Y3QgU2lnTWFwIHsKKwlpbnQgc2lnbmFsOworCWNoYXIqIG5hbWU7Cit9OworCitleHRlcm4gY29uc3Qgc3RydWN0IFNpZ01hcCBzaWduYW1lc1tdOworCisjZW5kaWYgLyogX0NIQU5TRVNTSU9OX0hfICovCmRpZmYgLS1naXQgYS9jaXJjYnVmZmVyLmMgYi9jaXJjYnVmZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwMDg3YQotLS0gL2Rldi9udWxsCisrKyBiL2NpcmNidWZmZXIuYwpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIERyb3BiZWFyIFNTSAorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAiY2lyY2J1ZmZlci5oIgorCisjZGVmaW5lIE1BWF9DQlVGX1NJWkUgMTAwMDAwMDAwCisKK2NpcmNidWZmZXIgKiBjYnVmX25ldyh1bnNpZ25lZCBpbnQgc2l6ZSkgeworCisJY2lyY2J1ZmZlciAqY2J1ZiA9IE5VTEw7CisKKwlpZiAoc2l6ZSA+IE1BWF9DQlVGX1NJWkUpIHsKKwkJZHJvcGJlYXJfZXhpdCgiYmFkIGNidWYgc2l6ZSIpOworCX0KKworCWNidWYgPSAoY2lyY2J1ZmZlciopbV9tYWxsb2Moc2l6ZW9mKGNpcmNidWZmZXIpKTsKKwljYnVmLT5kYXRhID0gKHVuc2lnbmVkIGNoYXIqKW1fbWFsbG9jKHNpemUpOworCWNidWYtPnVzZWQgPSAwOworCWNidWYtPnJlYWRwb3MgPSAwOworCWNidWYtPndyaXRlcG9zID0gMDsKKwljYnVmLT5zaXplID0gc2l6ZTsKKworCXJldHVybiBjYnVmOworfQorCit2b2lkIGNidWZfZnJlZShjaXJjYnVmZmVyICogY2J1ZikgeworCisJbV9mcmVlKGNidWYtPmRhdGEpOworCW1fZnJlZShjYnVmKTsKK30KKwordW5zaWduZWQgaW50IGNidWZfZ2V0dXNlZChjaXJjYnVmZmVyICogY2J1ZikgeworCisJcmV0dXJuIGNidWYtPnVzZWQ7CisKK30KKwordW5zaWduZWQgaW50IGNidWZfZ2V0YXZhaWwoY2lyY2J1ZmZlciAqIGNidWYpIHsKKworCXJldHVybiBjYnVmLT5zaXplIC0gY2J1Zi0+dXNlZDsKKworfQorCit1bnNpZ25lZCBpbnQgY2J1Zl9yZWFkbGVuKGNpcmNidWZmZXIgKmNidWYpIHsKKworCWRyb3BiZWFyX2Fzc2VydCgoKDIqY2J1Zi0+c2l6ZSkrY2J1Zi0+d3JpdGVwb3MtY2J1Zi0+cmVhZHBvcyklY2J1Zi0+c2l6ZSA9PSBjYnVmLT51c2VkJWNidWYtPnNpemUpOworCWRyb3BiZWFyX2Fzc2VydCgoKDIqY2J1Zi0+c2l6ZSkrY2J1Zi0+cmVhZHBvcy1jYnVmLT53cml0ZXBvcyklY2J1Zi0+c2l6ZSA9PSAoY2J1Zi0+c2l6ZS1jYnVmLT51c2VkKSVjYnVmLT5zaXplKTsKKworCWlmIChjYnVmLT51c2VkID09IDApIHsKKwkJVFJBQ0UoKCJjYnVmX3JlYWRsZW46IHVudXNlZCBidWZmZXIiKSkKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNidWYtPnJlYWRwb3MgPCBjYnVmLT53cml0ZXBvcykgeworCQlyZXR1cm4gY2J1Zi0+d3JpdGVwb3MgLSBjYnVmLT5yZWFkcG9zOworCX0KKworCXJldHVybiBjYnVmLT5zaXplIC0gY2J1Zi0+cmVhZHBvczsKK30KKwordW5zaWduZWQgaW50IGNidWZfd3JpdGVsZW4oY2lyY2J1ZmZlciAqY2J1ZikgeworCisJZHJvcGJlYXJfYXNzZXJ0KGNidWYtPnVzZWQgPD0gY2J1Zi0+c2l6ZSk7CisJZHJvcGJlYXJfYXNzZXJ0KCgoMipjYnVmLT5zaXplKStjYnVmLT53cml0ZXBvcy1jYnVmLT5yZWFkcG9zKSVjYnVmLT5zaXplID09IGNidWYtPnVzZWQlY2J1Zi0+c2l6ZSk7CisJZHJvcGJlYXJfYXNzZXJ0KCgoMipjYnVmLT5zaXplKStjYnVmLT5yZWFkcG9zLWNidWYtPndyaXRlcG9zKSVjYnVmLT5zaXplID09IChjYnVmLT5zaXplLWNidWYtPnVzZWQpJWNidWYtPnNpemUpOworCisJaWYgKGNidWYtPnVzZWQgPT0gY2J1Zi0+c2l6ZSkgeworCQlUUkFDRSgoImNidWZfd3JpdGVsZW46IGZ1bGwgYnVmZmVyIikpCisJCXJldHVybiAwOyAvKiBmdWxsICovCisJfQorCQorCWlmIChjYnVmLT53cml0ZXBvcyA8IGNidWYtPnJlYWRwb3MpIHsKKwkJcmV0dXJuIGNidWYtPnJlYWRwb3MgLSBjYnVmLT53cml0ZXBvczsKKwl9CisKKwlyZXR1cm4gY2J1Zi0+c2l6ZSAtIGNidWYtPndyaXRlcG9zOworfQorCit1bnNpZ25lZCBjaGFyKiBjYnVmX3JlYWRwdHIoY2lyY2J1ZmZlciAqY2J1ZiwgdW5zaWduZWQgaW50IGxlbikgeworCWlmIChsZW4gPiBjYnVmX3JlYWRsZW4oY2J1ZikpIHsKKwkJZHJvcGJlYXJfZXhpdCgiYmFkIGNidWYgcmVhZCIpOworCX0KKworCXJldHVybiAmY2J1Zi0+ZGF0YVtjYnVmLT5yZWFkcG9zXTsKK30KKwordW5zaWduZWQgY2hhciogY2J1Zl93cml0ZXB0cihjaXJjYnVmZmVyICpjYnVmLCB1bnNpZ25lZCBpbnQgbGVuKSB7CisKKwlpZiAobGVuID4gY2J1Zl93cml0ZWxlbihjYnVmKSkgeworCQlkcm9wYmVhcl9leGl0KCJiYWQgY2J1ZiB3cml0ZSIpOworCX0KKworCXJldHVybiAmY2J1Zi0+ZGF0YVtjYnVmLT53cml0ZXBvc107Cit9CisKK3ZvaWQgY2J1Zl9pbmNyd3JpdGUoY2lyY2J1ZmZlciAqY2J1ZiwgdW5zaWduZWQgaW50IGxlbikgeworCWlmIChsZW4gPiBjYnVmX3dyaXRlbGVuKGNidWYpKSB7CisJCWRyb3BiZWFyX2V4aXQoImJhZCBjYnVmIHdyaXRlIik7CisJfQorCisJY2J1Zi0+dXNlZCArPSBsZW47CisJZHJvcGJlYXJfYXNzZXJ0KGNidWYtPnVzZWQgPD0gY2J1Zi0+c2l6ZSk7CisJY2J1Zi0+d3JpdGVwb3MgPSAoY2J1Zi0+d3JpdGVwb3MgKyBsZW4pICUgY2J1Zi0+c2l6ZTsKK30KKworCit2b2lkIGNidWZfaW5jcnJlYWQoY2lyY2J1ZmZlciAqY2J1ZiwgdW5zaWduZWQgaW50IGxlbikgeworCWlmIChsZW4gPiBjYnVmX3JlYWRsZW4oY2J1ZikpIHsKKwkJZHJvcGJlYXJfZXhpdCgiYmFkIGNidWYgcmVhZCIpOworCX0KKworCWRyb3BiZWFyX2Fzc2VydChjYnVmLT51c2VkID49IGxlbik7CisJY2J1Zi0+dXNlZCAtPSBsZW47CisJY2J1Zi0+cmVhZHBvcyA9IChjYnVmLT5yZWFkcG9zICsgbGVuKSAlIGNidWYtPnNpemU7Cit9CmRpZmYgLS1naXQgYS9jaXJjYnVmZmVyLmggYi9jaXJjYnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFjNTEzNAotLS0gL2Rldi9udWxsCisrKyBiL2NpcmNidWZmZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogRHJvcGJlYXIgU1NICisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaWZuZGVmIF9DSVJDQlVGRkVSX0hfCisjZGVmaW5lIF9DSVJDQlVGRkVSX0hfCitzdHJ1Y3QgY2lyY2J1ZiB7CisKKwl1bnNpZ25lZCBpbnQgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgcmVhZHBvczsKKwl1bnNpZ25lZCBpbnQgd3JpdGVwb3M7CisJdW5zaWduZWQgaW50IHVzZWQ7CisJdW5zaWduZWQgY2hhciogZGF0YTsKK307CisKK3R5cGVkZWYgc3RydWN0IGNpcmNidWYgY2lyY2J1ZmZlcjsKKworY2lyY2J1ZmZlciAqIGNidWZfbmV3KHVuc2lnbmVkIGludCBzaXplKTsKK3ZvaWQgY2J1Zl9mcmVlKGNpcmNidWZmZXIgKiBjYnVmKTsKKwordW5zaWduZWQgaW50IGNidWZfZ2V0dXNlZChjaXJjYnVmZmVyICogY2J1Zik7IC8qIGhvdyBtdWNoIGRhdGEgc3RvcmVkICovCit1bnNpZ25lZCBpbnQgY2J1Zl9nZXRhdmFpbChjaXJjYnVmZmVyICogY2J1Zik7IC8qIGhvdyBtdWNoIHdlIGNhbiB3cml0ZSAqLwordW5zaWduZWQgaW50IGNidWZfcmVhZGxlbihjaXJjYnVmZmVyICpjYnVmKTsgLyogbWF4IGxpbmVhciByZWFkIGxlbiAqLwordW5zaWduZWQgaW50IGNidWZfd3JpdGVsZW4oY2lyY2J1ZmZlciAqY2J1Zik7IC8qIG1heCBsaW5lYXIgd3JpdGUgbGVuICovCisKK3Vuc2lnbmVkIGNoYXIqIGNidWZfcmVhZHB0cihjaXJjYnVmZmVyICpjYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKK3Vuc2lnbmVkIGNoYXIqIGNidWZfd3JpdGVwdHIoY2lyY2J1ZmZlciAqY2J1ZiwgdW5zaWduZWQgaW50IGxlbik7Cit2b2lkIGNidWZfaW5jcndyaXRlKGNpcmNidWZmZXIgKmNidWYsIHVuc2lnbmVkIGludCBsZW4pOwordm9pZCBjYnVmX2luY3JyZWFkKGNpcmNidWZmZXIgKmNidWYsIHVuc2lnbmVkIGludCBsZW4pOworI2VuZGlmCmRpZmYgLS1naXQgYS9jbGktYWxnby5jIGIvY2xpLWFsZ28uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzNhMWZmCi0tLSAvZGV2L251bGwKKysrIGIvY2xpLWFsZ28uYwpAQCAtMCwwICsxLDk5IEBACisvKgorICogRHJvcGJlYXIgLSBhIFNTSDIgc2VydmVyCisgKiBTU0ggY2xpZW50IGltcGxlbWVudGF0aW9uCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBNaWhuZWEgU3RvZW5lc2N1CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImFsZ28uaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKworCisvKgorICogVGhlIGNob3NlbiBbZW5jcnlwdGlvbiB8IE1BQyB8IGNvbXByZXNzaW9uXSBhbGdvcml0aG0gdG8gZWFjaCAKKyAqIGRpcmVjdGlvbiBNVVNUIGJlIHRoZSBmaXJzdCBhbGdvcml0aG0gIG9uIHRoZSBjbGllbnQncyBsaXN0CisgKiB0aGF0IGlzIGFsc28gb24gdGhlIHNlcnZlcidzIGxpc3QuCisgKi8KK2FsZ29fdHlwZSAqIGNsaV9idWZfbWF0Y2hfYWxnbyhidWZmZXIqIGJ1ZiwgYWxnb190eXBlIGxvY2FsYWxnb3NbXSwKKwkJaW50ICpnb29kZ3Vlc3MpIHsKKworCXVuc2lnbmVkIGNoYXIgKiBhbGdvbGlzdCA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqIHJlbW90ZWFsZ29zW01BWF9QUk9QT1NFRF9BTEdPXTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCXVuc2lnbmVkIGludCBjb3VudCwgaSwgajsKKwlhbGdvX3R5cGUgKiByZXQgPSBOVUxMOworCisJKmdvb2RndWVzcyA9IDA7CisKKwkvKiBnZXQgdGhlIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGZyb20gdGhlIGJ1ZmZlciBpZSAiYWxnbzEsYWxnbzIsYWxnbzMiICovCisJYWxnb2xpc3QgPSBidWZfZ2V0c3RyaW5nKGJ1ZiwgJmxlbik7CisJVFJBQ0UoKCJjbGlfYnVmX21hdGNoX2FsZ286ICVzIiwgYWxnb2xpc3QpKQorCWlmIChsZW4gPiBNQVhfUFJPUE9TRURfQUxHTyooTUFYX05BTUVfTEVOKzEpKSB7CisJCWdvdG8gb3V0OyAvKiBqdXN0IGEgc2FuaXR5IGNoZWNrLCBubyBvdGhlciB1c2UgKi8KKwl9CisKKwkvKiByZW1vdGVhbGdvcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBzdHJpbmdzIHBhcnNlZCBvdXQgKi8KKwkvKiBXZSB3aWxsIGhhdmUgYXQgbGVhc3Qgb25lIHN0cmluZyAoZXZlbiBpZiBpdCdzIGp1c3QgIiIpICovCisJcmVtb3RlYWxnb3NbMF0gPSBhbGdvbGlzdDsKKwljb3VudCA9IDE7CisJLyogSXRlcmF0ZSB0aHJvdWdoLCByZXBsYWNpbmcgJywncyB3aXRoIE5VTHMsIHRvIHNwbGl0IGl0IGludG8KKwkgKiB3b3Jkcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGFsZ29saXN0W2ldID09ICdcMCcpIHsKKwkJCS8qIHNvbWVvbmUgaXMgdHJ5aW5nIHNvbWV0aGluZyBzdHJhbmdlICovCisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoYWxnb2xpc3RbaV0gPT0gJywnKSB7CisJCQlhbGdvbGlzdFtpXSA9ICdcMCc7CisJCQlyZW1vdGVhbGdvc1tjb3VudF0gPSAmYWxnb2xpc3RbaSsxXTsKKwkJCWNvdW50Kys7CisJCX0KKwkJaWYgKGNvdW50ID09IE1BWF9QUk9QT1NFRF9BTEdPKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIGl0ZXJhdGUgYW5kIGZpbmQgdGhlIGZpcnN0IG1hdGNoICovCisKKwlmb3IgKGogPSAwOyBsb2NhbGFsZ29zW2pdLm5hbWUgIT0gTlVMTDsgaisrKSB7CisJCWlmIChsb2NhbGFsZ29zW2pdLnVzYWJsZSkgeworCQlsZW4gPSBzdHJsZW4obG9jYWxhbGdvc1tqXS5uYW1lKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCQkJaWYgKGxlbiA9PSBzdHJsZW4ocmVtb3RlYWxnb3NbaV0pIAorCQkJCQkJJiYgc3RybmNtcChsb2NhbGFsZ29zW2pdLm5hbWUsIAorCQkJCQkJCXJlbW90ZWFsZ29zW2ldLCBsZW4pID09IDApIHsKKwkJCQkJaWYgKGkgPT0gMCAmJiBqID09IDApIHsKKwkJCQkJCS8qIHdhcyBhIGdvb2QgZ3Vlc3MgKi8KKwkJCQkJCSpnb29kZ3Vlc3MgPSAxOworCQkJCQl9CisJCQkJCXJldCA9ICZsb2NhbGFsZ29zW2pdOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKK291dDoKKwltX2ZyZWUoYWxnb2xpc3QpOworCXJldHVybiByZXQ7Cit9CisKZGlmZiAtLWdpdCBhL2NsaS1hdXRoLmMgYi9jbGktYXV0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMTdhMjEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGktYXV0aC5jCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogRHJvcGJlYXIgU1NICisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBNaWhuZWEgU3RvZW5lc2N1CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgImF1dGguaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJwYWNrZXQuaCIKKyNpbmNsdWRlICJydW5vcHRzLmgiCisKK3ZvaWQgY2xpX2F1dGhpbml0aWFsaXNlKCkgeworCisJbWVtc2V0KCZzZXMuYXV0aHN0YXRlLCAwLCBzaXplb2Yoc2VzLmF1dGhzdGF0ZSkpOworfQorCisKKy8qIFNlbmQgYSAibm9uZSIgYXV0aCByZXF1ZXN0IHRvIGdldCBhdmFpbGFibGUgbWV0aG9kcyAqLwordm9pZCBjbGlfYXV0aF9nZXRtZXRob2RzKCkgeworCisJVFJBQ0UoKCJlbnRlciBjbGlfYXV0aF9nZXRtZXRob2RzIikpCisKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgU1NIX01TR19VU0VSQVVUSF9SRVFVRVNUKTsKKwlidWZfcHV0c3RyaW5nKHNlcy53cml0ZXBheWxvYWQsIGNsaV9vcHRzLnVzZXJuYW1lLCAKKwkJCXN0cmxlbihjbGlfb3B0cy51c2VybmFtZSkpOworCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgU1NIX1NFUlZJQ0VfQ09OTkVDVElPTiwgCisJCQlTU0hfU0VSVklDRV9DT05ORUNUSU9OX0xFTik7CisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCAibm9uZSIsIDQpOyAvKiAnbm9uZScgbWV0aG9kICovCisKKwllbmNyeXB0X3BhY2tldCgpOworCVRSQUNFKCgibGVhdmUgY2xpX2F1dGhfZ2V0bWV0aG9kcyIpKQorCit9CisKK3ZvaWQgcmVjdl9tc2dfdXNlcmF1dGhfYmFubmVyKCkgeworCisJdW5zaWduZWQgY2hhciogYmFubmVyID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgYmFubmVybGVuOworCXVuc2lnbmVkIGludCBpLCBsaW5lY291bnQ7CisKKwlUUkFDRSgoImVudGVyIHJlY3ZfbXNnX3VzZXJhdXRoX2Jhbm5lciIpKQorCWlmIChzZXMuYXV0aHN0YXRlLmF1dGhkb25lKSB7CisJCVRSQUNFKCgibGVhdmUgcmVjdl9tc2dfdXNlcmF1dGhfYmFubmVyOiBiYW5uZXIgYWZ0ZXIgYXV0aCBkb25lIikpCisJCXJldHVybjsKKwl9CisKKwliYW5uZXIgPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCAmYmFubmVybGVuKTsKKwlidWZfZWF0c3RyaW5nKHNlcy5wYXlsb2FkKTsgLyogVGhlIGxhbmd1YWdlIHN0cmluZyAqLworCisJaWYgKGJhbm5lcmxlbiA+IE1BWF9CQU5ORVJfU0laRSkgeworCQlUUkFDRSgoInJlY3ZfbXNnX3VzZXJhdXRoX2Jhbm5lcjogYmFubmVybGVuIHRvbyBsb25nOiAlZCIsIGJhbm5lcmxlbikpCisJCWdvdG8gb3V0OworCX0KKworCWNsZWFudGV4dChiYW5uZXIpOworCisJLyogTGltaXQgdG8gMjUgbGluZXMgKi8KKwlsaW5lY291bnQgPSAxOworCWZvciAoaSA9IDA7IGkgPCBiYW5uZXJsZW47IGkrKykgeworCQlpZiAoYmFubmVyW2ldID09ICdcbicpIHsKKwkJCWlmIChsaW5lY291bnQgPj0gTUFYX0JBTk5FUl9MSU5FUykgeworCQkJCWJhbm5lcltpXSA9ICdcMCc7CisJCQkJYnJlYWs7CisJCQl9CisJCQlsaW5lY291bnQrKzsKKwkJfQorCX0KKworCXByaW50ZigiJXNcbiIsIGJhbm5lcik7CisKK291dDoKKwltX2ZyZWUoYmFubmVyKTsKKwlUUkFDRSgoImxlYXZlIHJlY3ZfbXNnX3VzZXJhdXRoX2Jhbm5lciIpKQorfQorCisvKiBUaGlzIGhhbmRsZXMgdGhlIG1lc3NhZ2Utc3BlY2lmaWMgdHlwZXMgd2hpY2gKKyAqIGFsbCBoYXZlIGEgdmFsdWUgb2YgNjAuIFRoZXNlIGFyZQorICogU1NIX01TR19VU0VSQVVUSF9QQVNTV0RfQ0hBTkdFUkVRLAorICogU1NIX01TR19VU0VSQVVUSF9QS19PSywgJgorICogU1NIX01TR19VU0VSQVVUSF9JTkZPX1JFUVVFU1QuICovCit2b2lkIHJlY3ZfbXNnX3VzZXJhdXRoX3NwZWNpZmljXzYwKCkgeworCisjaWZkZWYgRU5BQkxFX0NMSV9QVUJLRVlfQVVUSAorCWlmIChjbGlfc2VzLmxhc3RhdXRodHlwZSA9PSBBVVRIX1RZUEVfUFVCS0VZKSB7CisJCXJlY3ZfbXNnX3VzZXJhdXRoX3BrX29rKCk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9DTElfSU5URVJBQ1RfQVVUSAorCWlmIChjbGlfc2VzLmxhc3RhdXRodHlwZSA9PSBBVVRIX1RZUEVfSU5URVJBQ1QpIHsKKwkJcmVjdl9tc2dfdXNlcmF1dGhfaW5mb19yZXF1ZXN0KCk7CisJCXJldHVybjsKKwl9CisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9DTElfUEFTU1dPUkRfQVVUSAorCWlmIChjbGlfc2VzLmxhc3RhdXRodHlwZSA9PSBBVVRIX1RZUEVfUEFTU1dPUkQpIHsKKwkJLyogRXZlbnR1YWxseSB0aGVyZSBjb3VsZCBiZSBwcm9wZXIgcGFzc3dvcmQtY2hhbmdpbmcKKwkJICogc3VwcG9ydC4gSG93ZXZlciBjdXJyZW50bHkgZmV3IHNlcnZlcnMgc2VlbSB0bworCQkgKiBpbXBsZW1lbnQgaXQsIGFuZCBwYXNzd29yZCBhdXRoIGlzIGxhc3QtcmVzb3J0CisJCSAqIHJlZ2FyZGxlc3MgLSBrZXlib2FyZC1pbnRlcmFjdGl2ZSBpcyBtb3JlIGxpa2VseQorCQkgKiB0byBiZSB1c2VkIGFueXdheS4gKi8KKwkJZHJvcGJlYXJfY2xvc2UoIllvdXIgcGFzc3dvcmQgaGFzIGV4cGlyZWQuIik7CisJfQorI2VuZGlmCisKKwlkcm9wYmVhcl9leGl0KCJVbmV4cGVjdGVkIHVzZXJhdXRoIHBhY2tldCIpOworfQorCit2b2lkIHJlY3ZfbXNnX3VzZXJhdXRoX2ZhaWx1cmUoKSB7CisKKwl1bnNpZ25lZCBjaGFyICogbWV0aG9kcyA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqIHRvayA9IE5VTEw7CisJdW5zaWduZWQgaW50IG1ldGhsZW4gPSAwOworCXVuc2lnbmVkIGludCBwYXJ0aWFsID0gMDsKKwl1bnNpZ25lZCBpbnQgaSA9IDA7CisKKwlUUkFDRSgoIjwtIE1TR19VU0VSQVVUSF9GQUlMVVJFIikpCisJVFJBQ0UoKCJlbnRlciByZWN2X21zZ191c2VyYXV0aF9mYWlsdXJlIikpCisKKwlpZiAoY2xpX3Nlcy5zdGF0ZSAhPSBVU0VSQVVUSF9SRVFfU0VOVCkgeworCQkvKiBQZXJoYXBzIHdlIHNob3VsZCBiZSBtb3JlIGZhdGFsPyAqLworCQlkcm9wYmVhcl9leGl0KCJVbmV4cGVjdGVkIHVzZXJhdXRoIGZhaWx1cmUiKTsKKwl9CisKKyNpZmRlZiBFTkFCTEVfQ0xJX1BVQktFWV9BVVRICisJLyogSWYgaXQgd2FzIGEgcHVia2V5IGF1dGggcmVxdWVzdCwgd2Ugc2hvdWxkIGNyb3NzIHRoYXQga2V5IAorCSAqIG9mZiB0aGUgbGlzdC4gKi8KKwlpZiAoY2xpX3Nlcy5sYXN0YXV0aHR5cGUgPT0gQVVUSF9UWVBFX1BVQktFWSkgeworCQljbGlfcHVia2V5ZmFpbCgpOworCX0KKyNlbmRpZgorCisjaWZkZWYgRU5BQkxFX0NMSV9JTlRFUkFDVF9BVVRICisJLyogSWYgd2UgZ2V0IGEgZmFpbHVyZSBtZXNzYWdlIGZvciBrZXlib2FyZCBpbnRlcmFjdGl2ZSB3aXRob3V0CisJICogcmVjZWl2aW5nIGFueSByZXF1ZXN0IGluZm8gcGFja2V0LCB0aGVuIHdlIGRvbid0IGJvdGhlciB0cnlpbmcKKwkgKiBrZXlib2FyZCBpbnRlcmFjdGl2ZSBhZ2FpbiAqLworCWlmIChjbGlfc2VzLmxhc3RhdXRodHlwZSA9PSBBVVRIX1RZUEVfSU5URVJBQ1QKKwkJCSYmICFjbGlfc2VzLmludGVyYWN0X3JlcXVlc3RfcmVjZWl2ZWQpIHsKKwkJVFJBQ0UoKCJzZXR0aW5nIGF1dGhfaW50ZXJhY3RfZmFpbGVkID0gMSIpKQorCQljbGlfc2VzLmF1dGhfaW50ZXJhY3RfZmFpbGVkID0gMTsKKwl9CisjZW5kaWYKKworCWNsaV9zZXMubGFzdGF1dGh0eXBlID0gQVVUSF9UWVBFX05PTkU7CisKKwltZXRob2RzID0gYnVmX2dldHN0cmluZyhzZXMucGF5bG9hZCwgJm1ldGhsZW4pOworCisJcGFydGlhbCA9IGJ1Zl9nZXRib29sKHNlcy5wYXlsb2FkKTsKKworCWlmIChwYXJ0aWFsKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfSU5GTywgIkF1dGhlbnRpY2F0aW9uIHBhcnRpYWxseSBzdWNjZWVkZWQsIG1vcmUgYXR0ZW1wdHMgcmVxdWlyZWQiKTsKKwl9IGVsc2UgeworCQlzZXMuYXV0aHN0YXRlLmZhaWxjb3VudCsrOworCX0KKworCVRSQUNFKCgiTWV0aG9kcyAobGVuICVkKTogJyVzJyIsIG1ldGhsZW4sIG1ldGhvZHMpKQorCisJc2VzLmF1dGhzdGF0ZS5hdXRoZG9uZT0wOworCXNlcy5hdXRoc3RhdGUuYXV0aHR5cGVzPTA7CisKKwkvKiBTcGxpdCB3aXRoIG51bGxzIHJhdGhlciB0aGFuIGNvbW1hcyAqLworCWZvciAoaSA9IDA7IGkgPCBtZXRobGVuOyBpKyspIHsKKwkJaWYgKG1ldGhvZHNbaV0gPT0gJywnKSB7CisJCQltZXRob2RzW2ldID0gJ1wwJzsKKwkJfQorCX0KKworCXRvayA9IG1ldGhvZHM7IC8qIHRvayBzdG9yZXMgdGhlIG5leHQgbWV0aG9kIHdlJ2xsIGNvbXBhcmUgKi8KKwlmb3IgKGkgPSAwOyBpIDw9IG1ldGhsZW47IGkrKykgeworCQlpZiAobWV0aG9kc1tpXSA9PSAnXDAnKSB7CisJCQlUUkFDRSgoImF1dGggbWV0aG9kICclcyciLCB0b2spKQorI2lmZGVmIEVOQUJMRV9DTElfUFVCS0VZX0FVVEgKKwkJCWlmIChzdHJuY21wKEFVVEhfTUVUSE9EX1BVQktFWSwgdG9rLAorCQkJCUFVVEhfTUVUSE9EX1BVQktFWV9MRU4pID09IDApIHsKKwkJCQlzZXMuYXV0aHN0YXRlLmF1dGh0eXBlcyB8PSBBVVRIX1RZUEVfUFVCS0VZOworCQkJfQorI2VuZGlmCisjaWZkZWYgRU5BQkxFX0NMSV9JTlRFUkFDVF9BVVRICisJCQlpZiAoc3RybmNtcChBVVRIX01FVEhPRF9JTlRFUkFDVCwgdG9rLAorCQkJCUFVVEhfTUVUSE9EX0lOVEVSQUNUX0xFTikgPT0gMCkgeworCQkJCXNlcy5hdXRoc3RhdGUuYXV0aHR5cGVzIHw9IEFVVEhfVFlQRV9JTlRFUkFDVDsKKwkJCX0KKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9DTElfUEFTU1dPUkRfQVVUSAorCQkJaWYgKHN0cm5jbXAoQVVUSF9NRVRIT0RfUEFTU1dPUkQsIHRvaywKKwkJCQlBVVRIX01FVEhPRF9QQVNTV09SRF9MRU4pID09IDApIHsKKwkJCQlzZXMuYXV0aHN0YXRlLmF1dGh0eXBlcyB8PSBBVVRIX1RZUEVfUEFTU1dPUkQ7CisJCQl9CisjZW5kaWYKKwkJCXRvayA9ICZtZXRob2RzW2krMV07IC8qIE11c3QgbWFrZSBzdXJlIHdlIGRvbid0IHVzZSBpdCBhZnRlciB0aGUKKwkJCQkJCQkJCWxhc3QgbG9vcCwgc2luY2UgaXQnbGwgcG9pbnQgdG8gc29tZXRoaW5nCisJCQkJCQkJCQl1bmRlZmluZWQgKi8KKwkJfQorCX0KKworCW1fZnJlZShtZXRob2RzKTsKKworCWNsaV9zZXMuc3RhdGUgPSBVU0VSQVVUSF9GQUlMX1JDVkQ7CisJCQorCVRSQUNFKCgibGVhdmUgcmVjdl9tc2dfdXNlcmF1dGhfZmFpbHVyZSIpKQorfQorCit2b2lkIHJlY3ZfbXNnX3VzZXJhdXRoX3N1Y2Nlc3MoKSB7CisJVFJBQ0UoKCJyZWNlaXZlZCBtc2dfdXNlcmF1dGhfc3VjY2VzcyIpKQorCXNlcy5hdXRoc3RhdGUuYXV0aGRvbmUgPSAxOworCWNsaV9zZXMuc3RhdGUgPSBVU0VSQVVUSF9TVUNDRVNTX1JDVkQ7CisJY2xpX3Nlcy5sYXN0YXV0aHR5cGUgPSBBVVRIX1RZUEVfTk9ORTsKK30KKwordm9pZCBjbGlfYXV0aF90cnkoKSB7CisKKwlpbnQgZmluaXNoZWQgPSAwOworCVRSQUNFKCgiZW50ZXIgY2xpX2F1dGhfdHJ5IikpCisKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCQorCS8qIE9yZGVyIHRvIHRyeSBpcyBwdWJrZXksIGludGVyYWN0aXZlLCBwYXNzd29yZC4KKwkgKiBBcyBzb29uIGFzICJmaW5pc2hlZCIgaXMgc2V0IGZvciBvbmUsIHdlIGRvbid0IGRvIGFueSBtb3JlLiAqLworI2lmZGVmIEVOQUJMRV9DTElfUFVCS0VZX0FVVEgKKwlpZiAoc2VzLmF1dGhzdGF0ZS5hdXRodHlwZXMgJiBBVVRIX1RZUEVfUFVCS0VZKSB7CisJCWZpbmlzaGVkID0gY2xpX2F1dGhfcHVia2V5KCk7CisJCWNsaV9zZXMubGFzdGF1dGh0eXBlID0gQVVUSF9UWVBFX1BVQktFWTsKKwl9CisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9DTElfSU5URVJBQ1RfQVVUSAorCWlmICghZmluaXNoZWQgJiYgc2VzLmF1dGhzdGF0ZS5hdXRodHlwZXMgJiBBVVRIX1RZUEVfSU5URVJBQ1QpIHsKKwkJaWYgKGNsaV9zZXMuYXV0aF9pbnRlcmFjdF9mYWlsZWQpIHsKKwkJCWZpbmlzaGVkID0gMDsKKwkJfSBlbHNlIHsKKwkJCWNsaV9hdXRoX2ludGVyYWN0aXZlKCk7CisJCQljbGlfc2VzLmxhc3RhdXRodHlwZSA9IEFVVEhfVFlQRV9JTlRFUkFDVDsKKwkJCWZpbmlzaGVkID0gMTsKKwkJfQorCX0KKyNlbmRpZgorCisjaWZkZWYgRU5BQkxFX0NMSV9QQVNTV09SRF9BVVRICisJaWYgKCFmaW5pc2hlZCAmJiBzZXMuYXV0aHN0YXRlLmF1dGh0eXBlcyAmIEFVVEhfVFlQRV9QQVNTV09SRCkgeworCQljbGlfYXV0aF9wYXNzd29yZCgpOworCQlmaW5pc2hlZCA9IDE7CisJCWNsaV9zZXMubGFzdGF1dGh0eXBlID0gQVVUSF9UWVBFX1BBU1NXT1JEOworCX0KKyNlbmRpZgorCisJVFJBQ0UoKCJjbGlfYXV0aF90cnkgbGFzdGF1dGh0eXBlICVkIiwgY2xpX3Nlcy5sYXN0YXV0aHR5cGUpKQorCisJaWYgKCFmaW5pc2hlZCkgeworCQlkcm9wYmVhcl9leGl0KCJObyBhdXRoIG1ldGhvZHMgY291bGQgYmUgdXNlZC4iKTsKKwl9CisKKwlUUkFDRSgoImxlYXZlIGNsaV9hdXRoX3RyeSIpKQorfQorCisvKiBBIGhlbHBlciBmb3IgZ2V0cGFzcygpIHRoYXQgZXhpdHMgaWYgdGhlIHVzZXIgY2FuY2Vscy4gVGhlIHJldHVybmVkCisgKiBwYXNzd29yZCBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBieSBnZXRwYXNzKCkgKi8KK2NoYXIqIGdldHBhc3Nfb3JfY2FuY2VsKGNoYXIqIHByb21wdCkKK3sKKwljaGFyKiBwYXNzd29yZCA9IE5VTEw7CisKKwlwYXNzd29yZCA9IGdldHBhc3MocHJvbXB0KTsKKworCS8qIDB4MDMgaXMgYSBjdHJsLWMgY2hhcmFjdGVyIGluIHRoZSBidWZmZXIuICovCisJaWYgKHBhc3N3b3JkID09IE5VTEwgfHwgc3RyY2hyKHBhc3N3b3JkLCAnXDMnKSAhPSBOVUxMKSB7CisJCWRyb3BiZWFyX2Nsb3NlKCJJbnRlcnJ1cHRlZC4iKTsKKwl9CisJcmV0dXJuIHBhc3N3b3JkOworfQpkaWZmIC0tZ2l0IGEvY2xpLWF1dGhpbnRlcmFjdC5jIGIvY2xpLWF1dGhpbnRlcmFjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZTViZjEKLS0tIC9kZXYvbnVsbAorKysgYi9jbGktYXV0aGludGVyYWN0LmMKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBEcm9wYmVhciBTU0gKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDA1IE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKyNpbmNsdWRlICJzZXNzaW9uLmgiCisjaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAicnVub3B0cy5oIgorCisjaWZkZWYgRU5BQkxFX0NMSV9JTlRFUkFDVF9BVVRICisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyKiBnZXRfcmVzcG9uc2UodW5zaWduZWQgY2hhciogcHJvbXB0KQoreworCUZJTEUqIHR0eSA9IE5VTEw7CisJdW5zaWduZWQgY2hhciogcmVzcG9uc2UgPSBOVUxMOworCS8qIG5vdCBhIHBhc3N3b3JkLCBidXQgYSByZWFzb25hYmxlIGxpbWl0ICovCisJY2hhciBidWZbRFJPUEJFQVJfTUFYX0NMSV9QQVNTXTsKKwljaGFyKiByZXQgPSBOVUxMOworCisJZnByaW50ZihzdGRlcnIsICIlcyIsIHByb21wdCk7CisKKwl0dHkgPSBmb3BlbihfUEFUSF9UVFksICJyIik7CisJaWYgKHR0eSkgeworCQlyZXQgPSBmZ2V0cyhidWYsIHNpemVvZihidWYpLCB0dHkpOworCQlmY2xvc2UodHR5KTsKKwl9IGVsc2UgeworCQlyZXQgPSBmZ2V0cyhidWYsIHNpemVvZihidWYpLCBzdGRpbik7CisJfQorCisJaWYgKHJldCA9PSBOVUxMKSB7CisJCXJlc3BvbnNlID0gKHVuc2lnbmVkIGNoYXIqKW1fc3RyZHVwKCIiKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBpbnQgYnVmbGVuID0gc3RybGVuKGJ1Zik7CisJCS8qIGZnZXRzIGluY2x1ZGVzIG5ld2xpbmVzICovCisJCWlmIChidWZsZW4gPiAwICYmIGJ1ZltidWZsZW4tMV0gPT0gJ1xuJykKKwkJCWJ1ZltidWZsZW4tMV0gPSAnXDAnOworCQlyZXNwb25zZSA9ICh1bnNpZ25lZCBjaGFyKiltX3N0cmR1cChidWYpOworCX0KKworCW1fYnVybihidWYsIHNpemVvZihidWYpKTsKKworCXJldHVybiByZXNwb25zZTsKK30KKwordm9pZCByZWN2X21zZ191c2VyYXV0aF9pbmZvX3JlcXVlc3QoKSB7CisKKwl1bnNpZ25lZCBjaGFyICpuYW1lID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICppbnN0cnVjdGlvbiA9IE5VTEw7CisJdW5zaWduZWQgaW50IG51bV9wcm9tcHRzID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXVuc2lnbmVkIGNoYXIgKnByb21wdCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGVjaG8gPSAwOworCXVuc2lnbmVkIGNoYXIgKnJlc3BvbnNlID0gTlVMTDsKKworCVRSQUNFKCgiZW50ZXIgcmVjdl9tc2dfcmVjdl91c2VyYXV0aF9pbmZvX3JlcXVlc3QiKSkKKworCWNsaV9zZXMuaW50ZXJhY3RfcmVxdWVzdF9yZWNlaXZlZCA9IDE7CisKKwluYW1lID0gYnVmX2dldHN0cmluZyhzZXMucGF5bG9hZCwgTlVMTCk7CisJaW5zdHJ1Y3Rpb24gPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCBOVUxMKTsKKworCS8qIGxhbmd1YWdlIHRhZyAqLworCWJ1Zl9lYXRzdHJpbmcoc2VzLnBheWxvYWQpOworCisJbnVtX3Byb21wdHMgPSBidWZfZ2V0aW50KHNlcy5wYXlsb2FkKTsKKwkKKwlpZiAobnVtX3Byb21wdHMgPj0gRFJPUEJFQVJfTUFYX0NMSV9JTlRFUkFDVF9QUk9NUFRTKSB7CisJCWRyb3BiZWFyX2V4aXQoIlRvbyBtYW55IHByb21wdHMgcmVjZWl2ZWQgZm9yIGtleWJvYXJkLWludGVyYWN0aXZlIik7CisJfQorCisJLyogd2UnbGwgYnVpbGQgdGhlIHJlc3BvbnNlIGFzIHdlIGdvICovCisJQ0hFQ0tDTEVBUlRPV1JJVEUoKTsKKwlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCBTU0hfTVNHX1VTRVJBVVRIX0lORk9fUkVTUE9OU0UpOworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgbnVtX3Byb21wdHMpOworCisJaWYgKHN0cmxlbihuYW1lKSA+IDApIHsKKwkJY2xlYW50ZXh0KG5hbWUpOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgbmFtZSk7CisJfQorCW1fZnJlZShuYW1lKTsKKworCWlmIChzdHJsZW4oaW5zdHJ1Y3Rpb24pID4gMCkgeworCQljbGVhbnRleHQoaW5zdHJ1Y3Rpb24pOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgaW5zdHJ1Y3Rpb24pOworCX0KKwltX2ZyZWUoaW5zdHJ1Y3Rpb24pOworCisJZm9yIChpID0gMDsgaSA8IG51bV9wcm9tcHRzOyBpKyspIHsKKwkJdW5zaWduZWQgaW50IHJlc3BvbnNlX2xlbiA9IDA7CisJCXByb21wdCA9IGJ1Zl9nZXRzdHJpbmcoc2VzLnBheWxvYWQsIE5VTEwpOworCQljbGVhbnRleHQocHJvbXB0KTsKKworCQllY2hvID0gYnVmX2dldGJvb2woc2VzLnBheWxvYWQpOworCisJCWlmICghZWNobykgeworCQkJdW5zaWduZWQgY2hhciogcCA9IGdldHBhc3Nfb3JfY2FuY2VsKHByb21wdCk7CisJCQlyZXNwb25zZSA9IG1fc3RyZHVwKHApOworCQkJbV9idXJuKHAsIHN0cmxlbihwKSk7CisJCX0gZWxzZSB7CisJCQlyZXNwb25zZSA9IGdldF9yZXNwb25zZShwcm9tcHQpOworCQl9CisKKwkJcmVzcG9uc2VfbGVuID0gc3RybGVuKHJlc3BvbnNlKTsKKwkJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCByZXNwb25zZSwgcmVzcG9uc2VfbGVuKTsKKwkJbV9idXJuKHJlc3BvbnNlLCByZXNwb25zZV9sZW4pOworCQltX2ZyZWUocmVzcG9uc2UpOworCX0KKworCWVuY3J5cHRfcGFja2V0KCk7CisKKworCVRSQUNFKCgibGVhdmUgcmVjdl9tc2dfcmVjdl91c2VyYXV0aF9pbmZvX3JlcXVlc3QiKSkKK30KKwordm9pZCBjbGlfYXV0aF9pbnRlcmFjdGl2ZSgpIHsKKworCVRSQUNFKCgiZW50ZXIgY2xpX2F1dGhfaW50ZXJhY3RpdmUiKSkKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgU1NIX01TR19VU0VSQVVUSF9SRVFVRVNUKTsKKworCS8qIHVzZXJuYW1lICovCisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCBjbGlfb3B0cy51c2VybmFtZSwKKwkJCXN0cmxlbihjbGlfb3B0cy51c2VybmFtZSkpOworCisJLyogc2VydmljZSBuYW1lICovCisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCBTU0hfU0VSVklDRV9DT05ORUNUSU9OLCAKKwkJCVNTSF9TRVJWSUNFX0NPTk5FQ1RJT05fTEVOKTsKKworCS8qIG1ldGhvZCAqLworCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgQVVUSF9NRVRIT0RfSU5URVJBQ1QsCisJCQlBVVRIX01FVEhPRF9JTlRFUkFDVF9MRU4pOworCisJLyogZW1wdHkgbGFuZ3VhZ2UgdGFnICovCisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCAiIiwgMCk7CisKKwkvKiBlbXB0eSBzdWJtZXRob2RzICovCisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCAiIiwgMCk7CisKKwllbmNyeXB0X3BhY2tldCgpOworCWNsaV9zZXMuaW50ZXJhY3RfcmVxdWVzdF9yZWNlaXZlZCA9IDA7CisKKwlUUkFDRSgoImxlYXZlIGNsaV9hdXRoX2ludGVyYWN0aXZlIikpCisKK30KKyNlbmRpZgkvKiBFTkFCTEVfQ0xJX0lOVEVSQUNUX0FVVEggKi8KZGlmZiAtLWdpdCBhL2NsaS1hdXRocGFzc3dkLmMgYi9jbGktYXV0aHBhc3N3ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MDBhMjUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGktYXV0aHBhc3N3ZC5jCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogRHJvcGJlYXIgU1NICisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKyNpbmNsdWRlICJzZXNzaW9uLmgiCisjaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAicnVub3B0cy5oIgorCisjaWZkZWYgRU5BQkxFX0NMSV9QQVNTV09SRF9BVVRICisKKyNpZmRlZiBFTkFCTEVfQ0xJX0FTS1BBU1NfSEVMUEVSCisvKiBSZXR1cm5zIDEgaWYgd2Ugd2FudCB0byB1c2UgdGhlIGFza3Bhc3MgcHJvZ3JhbSwgMCBvdGhlcndpc2UgKi8KK3N0YXRpYyBpbnQgd2FudF9hc2twYXNzKCkKK3sKKwljaGFyKiBhc2twYXNzX3Byb2cgPSBOVUxMOworCisJYXNrcGFzc19wcm9nID0gZ2V0ZW52KCJTU0hfQVNLUEFTUyIpOworCXJldHVybiBhc2twYXNzX3Byb2cgJiYgIWlzYXR0eShTVERJTl9GSUxFTk8pICYmIGdldGVudigiRElTUExBWSIpOworfQorCisvKiByZXR1cm5zIGEgc3RhdGljYWxseSBhbGxvY2F0ZWQgcGFzc3dvcmQgZnJvbSBhIGhlbHBlciBhcHAsIG9yIE5VTEwKKyAqIG9uIGZhaWx1cmUgKi8KK3N0YXRpYyBjaGFyICpndWlfZ2V0cGFzcyhjb25zdCBjaGFyICpwcm9tcHQpIHsKKworCXBpZF90IHBpZDsKKwlpbnQgcFsyXSwgbWF4bGVuLCBsZW4sIHN0YXR1czsKKwlzdGF0aWMgY2hhciBidWZbRFJPUEJFQVJfTUFYX0NMSV9QQVNTICsgMV07CisJY2hhciogaGVscGVyID0gTlVMTDsKKworCVRSQUNFKCgiZW50ZXIgZ3VpX2dldHBhc3MiKSkKKworCWhlbHBlciA9IGdldGVudigiU1NIX0FTS1BBU1MiKTsKKwlpZiAoIWhlbHBlcikKKwl7CisJCVRSQUNFKCgibGVhdmUgZ3VpX2dldHBhc3M6IG5vIGFza3Bhc3MgcHJvZ3JhbSIpKQorCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAocGlwZShwKSA8IDApIHsKKwkJVFJBQ0UoKCJlcnJvciBjcmVhdGluZyBjaGlsZCBwaXBlIikpCisJCXJldHVybiBOVUxMOworCX0KKworCXBpZCA9IGZvcmsoKTsKKworCWlmIChwaWQgPCAwKSB7CisJCVRSQUNFKCgiZm9yayBlcnJvciIpKQorCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIXBpZCkgeworCQkvKiBjaGlsZCAqLworCQljbG9zZShwWzBdKTsKKwkJaWYgKGR1cDIocFsxXSwgU1RET1VUX0ZJTEVOTykgPCAwKSB7CisJCQlUUkFDRSgoImVycm9yIHJlZGlyZWN0aW5nIHN0ZG91dCIpKQorCQkJZXhpdCgxKTsKKwkJfQorCQljbG9zZShwWzFdKTsKKwkJZXhlY2xwKGhlbHBlciwgaGVscGVyLCBwcm9tcHQsIChjaGFyICopMCk7CisJCVRSQUNFKCgiZXhlY2xwIGVycm9yIikpCisJCWV4aXQoMSk7CisJfQorCisJY2xvc2UocFsxXSk7CisJbWF4bGVuID0gc2l6ZW9mKGJ1Zik7CisJd2hpbGUgKG1heGxlbiA+IDApIHsKKwkJbGVuID0gcmVhZChwWzBdLCBidWYgKyBzaXplb2YoYnVmKSAtIG1heGxlbiwgbWF4bGVuKTsKKwkJaWYgKGxlbiA+IDApIHsKKwkJCW1heGxlbiAtPSBsZW47CisJCX0gZWxzZSB7CisJCQlpZiAoZXJybm8gIT0gRUlOVFIpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwljbG9zZShwWzBdKTsKKworCXdoaWxlICh3YWl0cGlkKHBpZCwgJnN0YXR1cywgMCkgPCAwICYmIGVycm5vID09IEVJTlRSKQorCQk7CisJaWYgKCFXSUZFWElURUQoc3RhdHVzKSB8fCBXRVhJVFNUQVRVUyhzdGF0dXMpICE9IDApCisJCXJldHVybihOVUxMKTsKKworCWxlbiA9IHNpemVvZihidWYpIC0gbWF4bGVuOworCWJ1ZltsZW5dID0gJ1wwJzsKKwlpZiAobGVuID4gMCAmJiBidWZbbGVuIC0gMV0gPT0gJ1xuJykKKwkJYnVmW2xlbiAtIDFdID0gJ1wwJzsKKworCVRSQUNFKCgibGVhdmUgZ3VpX2dldHBhc3MiKSkKKwlyZXR1cm4oYnVmKTsKK30KKyNlbmRpZiAvKiBFTkFCTEVfQ0xJX0FTS1BBU1NfSEVMUEVSICovCisKK3ZvaWQgY2xpX2F1dGhfcGFzc3dvcmQoKSB7CisKKwljaGFyKiBwYXNzd29yZCA9IE5VTEw7CisJY2hhciBwcm9tcHRbODBdOworCisJVFJBQ0UoKCJlbnRlciBjbGlfYXV0aF9wYXNzd29yZCIpKQorCUNIRUNLQ0xFQVJUT1dSSVRFKCk7CisKKwlzbnByaW50Zihwcm9tcHQsIHNpemVvZihwcm9tcHQpLCAiJXNAJXMncyBwYXNzd29yZDogIiwgCisJCQkJY2xpX29wdHMudXNlcm5hbWUsIGNsaV9vcHRzLnJlbW90ZWhvc3QpOworI2lmZGVmIEVOQUJMRV9DTElfQVNLUEFTU19IRUxQRVIKKwlpZiAod2FudF9hc2twYXNzKCkpCisJCXBhc3N3b3JkID0gZ3VpX2dldHBhc3MocHJvbXB0KTsKKwllbHNlCisjZW5kaWYKKwkJcGFzc3dvcmQgPSBnZXRwYXNzX29yX2NhbmNlbChwcm9tcHQpOworCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgU1NIX01TR19VU0VSQVVUSF9SRVFVRVNUKTsKKworCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgY2xpX29wdHMudXNlcm5hbWUsCisJCQlzdHJsZW4oY2xpX29wdHMudXNlcm5hbWUpKTsKKworCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgU1NIX1NFUlZJQ0VfQ09OTkVDVElPTiwgCisJCQlTU0hfU0VSVklDRV9DT05ORUNUSU9OX0xFTik7CisKKwlidWZfcHV0c3RyaW5nKHNlcy53cml0ZXBheWxvYWQsIEFVVEhfTUVUSE9EX1BBU1NXT1JELCAKKwkJCUFVVEhfTUVUSE9EX1BBU1NXT1JEX0xFTik7CisKKwlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCAwKTsgLyogRkFMU0UgLSBzbyBzYXlzIHRoZSBzcGVjICovCisKKwlidWZfcHV0c3RyaW5nKHNlcy53cml0ZXBheWxvYWQsIHBhc3N3b3JkLCBzdHJsZW4ocGFzc3dvcmQpKTsKKworCWVuY3J5cHRfcGFja2V0KCk7CisJbV9idXJuKHBhc3N3b3JkLCBzdHJsZW4ocGFzc3dvcmQpKTsKKworCVRSQUNFKCgibGVhdmUgY2xpX2F1dGhfcGFzc3dvcmQiKSkKK30KKyNlbmRpZgkvKiBFTkFCTEVfQ0xJX1BBU1NXT1JEX0FVVEggKi8KZGlmZiAtLWdpdCBhL2NsaS1hdXRocHVia2V5LmMgYi9jbGktYXV0aHB1YmtleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNmVmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9jbGktYXV0aHB1YmtleS5jCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogRHJvcGJlYXIgU1NICisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBNaWhuZWEgU3RvZW5lc2N1CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgInJ1bm9wdHMuaCIKKyNpbmNsdWRlICJhdXRoLmgiCisKKyNpZmRlZiBFTkFCTEVfQ0xJX1BVQktFWV9BVVRICitzdGF0aWMgdm9pZCBzZW5kX21zZ191c2VyYXV0aF9wdWJrZXkoc2lnbl9rZXkgKmtleSwgaW50IHR5cGUsIGludCByZWFsc2lnbik7CisKKy8qIENhbGxlZCB3aGVuIHdlIHJlY2VpdmUgYSBTU0hfTVNHX1VTRVJBVVRIX0ZBSUxVUkUgZm9yIGEgcHVia2V5IHJlcXVlc3QuCisgKiBXZSB1c2UgaXQgdG8gcmVtb3ZlIHRoZSBrZXkgd2UgdHJpZWQgZnJvbSB0aGUgbGlzdCAqLwordm9pZCBjbGlfcHVia2V5ZmFpbCgpIHsKKworCXN0cnVjdCBTaWduS2V5TGlzdCAqa2V5aXRlbTsKKwlzdHJ1Y3QgU2lnbktleUxpc3QgKipwcmV2aXRlbTsKKworCVRSQUNFKCgiZW50ZXIgY2xpX3B1YmtleWZhaWwiKSkKKwlwcmV2aXRlbSA9ICZjbGlfb3B0cy5wcml2a2V5czsKKworCS8qIEZpbmQgdGhlIGtleSB3ZSBmYWlsZWQgd2l0aCwgYW5kIHJlbW92ZSBpdCAqLworCWZvciAoa2V5aXRlbSA9IGNsaV9vcHRzLnByaXZrZXlzOyBrZXlpdGVtICE9IE5VTEw7IGtleWl0ZW0gPSBrZXlpdGVtLT5uZXh0KSB7CisJCWlmIChrZXlpdGVtID09IGNsaV9zZXMubGFzdHByaXZrZXkpIHsKKwkJCSpwcmV2aXRlbSA9IGtleWl0ZW0tPm5leHQ7CisJCX0KKwkJcHJldml0ZW0gPSAma2V5aXRlbTsKKwl9CisKKwlzaWduX2tleV9mcmVlKGNsaV9zZXMubGFzdHByaXZrZXktPmtleSk7IC8qIEl0IHdvbid0IGJlIHVzZWQgYWdhaW4gKi8KKwltX2ZyZWUoY2xpX3Nlcy5sYXN0cHJpdmtleSk7CisKKwlUUkFDRSgoImxlYXZlIGNsaV9wdWJrZXlmYWlsIikpCit9CisKK3ZvaWQgcmVjdl9tc2dfdXNlcmF1dGhfcGtfb2soKSB7CisKKwlzdHJ1Y3QgU2lnbktleUxpc3QgKmtleWl0ZW0gPSBOVUxMOworCWJ1ZmZlcioga2V5YnVmID0gTlVMTDsKKwljaGFyKiBhbGdvdHlwZSA9IE5VTEw7CisJdW5zaWduZWQgaW50IGFsZ29sZW47CisJaW50IGtleXR5cGU7CisJdW5zaWduZWQgaW50IHJlbW90ZWxlbjsKKworCVRSQUNFKCgiZW50ZXIgcmVjdl9tc2dfdXNlcmF1dGhfcGtfb2siKSkKKworCWFsZ290eXBlID0gYnVmX2dldHN0cmluZyhzZXMucGF5bG9hZCwgJmFsZ29sZW4pOworCWtleXR5cGUgPSBzaWdua2V5X3R5cGVfZnJvbV9uYW1lKGFsZ290eXBlLCBhbGdvbGVuKTsKKwlUUkFDRSgoInJlY3ZfbXNnX3VzZXJhdXRoX3BrX29rOiB0eXBlICVkIiwga2V5dHlwZSkpCisJbV9mcmVlKGFsZ290eXBlKTsKKworCWtleWJ1ZiA9IGJ1Zl9uZXcoTUFYX1BVQktFWV9TSVpFKTsKKworCXJlbW90ZWxlbiA9IGJ1Zl9nZXRpbnQoc2VzLnBheWxvYWQpOworCisJLyogSXRlcmF0ZSB0aHJvdWdoIG91ciBrZXlzLCBmaW5kIHdoaWNoIG9uZSBpdCB3YXMgdGhhdCBtYXRjaGVkLCBhbmQKKwkgKiBzZW5kIGEgcmVhbCByZXF1ZXN0IHdpdGggdGhhdCBrZXkgKi8KKwlmb3IgKGtleWl0ZW0gPSBjbGlfb3B0cy5wcml2a2V5czsga2V5aXRlbSAhPSBOVUxMOyBrZXlpdGVtID0ga2V5aXRlbS0+bmV4dCkgeworCisJCWlmIChrZXlpdGVtLT50eXBlICE9IGtleXR5cGUpIHsKKwkJCS8qIFR5cGVzIGRpZmZlcmVkICovCisJCQlUUkFDRSgoInR5cGVzIGRpZmZlcmVkIikpCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE5vdyB3ZSBjb21wYXJlIHRoZSBjb250ZW50cyBvZiB0aGUga2V5ICovCisJCWtleWJ1Zi0+cG9zID0ga2V5YnVmLT5sZW4gPSAwOworCQlidWZfcHV0X3B1Yl9rZXkoa2V5YnVmLCBrZXlpdGVtLT5rZXksIGtleXR5cGUpOworCQlidWZfc2V0cG9zKGtleWJ1ZiwgMCk7CisJCWJ1Zl9pbmNycG9zKGtleWJ1ZiwgNCk7IC8qIGZpcnN0IGludCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSByZW1haW5kZXIgKGllCisJCQkJCQkJCSAgIHJlbW90ZWxlbikgd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0YWtlbiBmcm9tCisJCQkJCQkJCSAgIHRoZSByZW1vdGUgYnVmZmVyICovCisKKworCQlpZiAoa2V5YnVmLT5sZW4tNCAhPSByZW1vdGVsZW4pIHsKKwkJCVRSQUNFKCgibGVuZ3RocyBkaWZmZXJlZDogbG9jYWxoICVkIHJlbW90ZSAlZCIsIGtleWJ1Zi0+bGVuLCByZW1vdGVsZW4pKQorCQkJLyogTGVuZ3RocyBkaWZmZXJlZCAqLworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG1lbWNtcChidWZfZ2V0cHRyKGtleWJ1ZiwgcmVtb3RlbGVuKSwKKwkJCQkJYnVmX2dldHB0cihzZXMucGF5bG9hZCwgcmVtb3RlbGVuKSwgcmVtb3RlbGVuKSAhPSAwKSB7CisJCQkvKiBEYXRhIGRpZG4ndCBtYXRjaCB0aGlzIGtleSAqLworCQkJVFJBQ0UoKCJkYXRhIGRpZmZlcmVkIikpCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFN1Y2Nlc3MgKi8KKwkJYnJlYWs7CisJfQorCWJ1Zl9mcmVlKGtleWJ1Zik7CisKKwlpZiAoa2V5aXRlbSAhPSBOVUxMKSB7CisJCVRSQUNFKCgibWF0Y2hpbmcga2V5IikpCisJCS8qIFhYWCBUT0RPOiBpZiBpdCdzIGFuIGVuY3J5cHRlZCBrZXksIGhlcmUgd2UgYXNrIGZvciB0aGVpcgorCQkgKiBwYXNzd29yZCAqLworCQlzZW5kX21zZ191c2VyYXV0aF9wdWJrZXkoa2V5aXRlbS0+a2V5LCBrZXl0eXBlLCAxKTsKKwl9IGVsc2UgeworCQlUUkFDRSgoIlRoYXQgd2FzIHdoYWNreS4gV2UgZ290IHRvbGQgdGhhdCBhIGtleSB3YXMgdmFsaWQsIGJ1dCBpdCBkaWRuJ3QgbWF0Y2ggb3VyIGxpc3QuIFNvdW5kcyBsaWtlIGRvZGd5IGNvZGUgb24gRHJvcGJlYXIncyBwYXJ0IikpCisJfQorCQorCVRSQUNFKCgibGVhdmUgcmVjdl9tc2dfdXNlcmF1dGhfcGtfb2siKSkKK30KKworLyogVE9ETzogbWFrZSBpdCB0YWtlIGFuIGFnZW50IHJlZmVyZW5jZSB0byB1c2UgYXMgd2VsbCAqLworc3RhdGljIHZvaWQgc2VuZF9tc2dfdXNlcmF1dGhfcHVia2V5KHNpZ25fa2V5ICprZXksIGludCB0eXBlLCBpbnQgcmVhbHNpZ24pIHsKKworCWNvbnN0IGNoYXIgKmFsZ29uYW1lID0gTlVMTDsKKwlpbnQgYWxnb2xlbjsKKwlidWZmZXIqIHNpZ2J1ZiA9IE5VTEw7CisKKwlUUkFDRSgoImVudGVyIHNlbmRfbXNnX3VzZXJhdXRoX3B1YmtleSIpKQorCUNIRUNLQ0xFQVJUT1dSSVRFKCk7CisKKwlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCBTU0hfTVNHX1VTRVJBVVRIX1JFUVVFU1QpOworCisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCBjbGlfb3B0cy51c2VybmFtZSwKKwkJCXN0cmxlbihjbGlfb3B0cy51c2VybmFtZSkpOworCisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCBTU0hfU0VSVklDRV9DT05ORUNUSU9OLCAKKwkJCVNTSF9TRVJWSUNFX0NPTk5FQ1RJT05fTEVOKTsKKworCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgQVVUSF9NRVRIT0RfUFVCS0VZLCAKKwkJCUFVVEhfTUVUSE9EX1BVQktFWV9MRU4pOworCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgcmVhbHNpZ24pOworCisJYWxnb25hbWUgPSBzaWdua2V5X25hbWVfZnJvbV90eXBlKHR5cGUsICZhbGdvbGVuKTsKKworCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgYWxnb25hbWUsIGFsZ29sZW4pOworCWJ1Zl9wdXRfcHViX2tleShzZXMud3JpdGVwYXlsb2FkLCBrZXksIHR5cGUpOworCisJaWYgKHJlYWxzaWduKSB7CisJCVRSQUNFKCgicmVhbHNpZ24iKSkKKwkJLyogV2UgcHV0IHRoZSBzaWduYXR1cmUgYXMgd2VsbCAtIHRoaXMgY29udGFpbnMgc3RyaW5nKHNlc3Npb24gaWQpLCB0aGVuCisJCSAqIHRoZSBjb250ZW50cyBvZiB0aGUgd3JpdGUgcGF5bG9hZCB0byB0aGlzIHBvaW50ICovCisJCXNpZ2J1ZiA9IGJ1Zl9uZXcoNCArIFNIQTFfSEFTSF9TSVpFICsgc2VzLndyaXRlcGF5bG9hZC0+bGVuKTsKKwkJYnVmX3B1dHN0cmluZyhzaWdidWYsIHNlcy5zZXNzaW9uX2lkLCBTSEExX0hBU0hfU0laRSk7CisJCWJ1Zl9wdXRieXRlcyhzaWdidWYsIHNlcy53cml0ZXBheWxvYWQtPmRhdGEsIHNlcy53cml0ZXBheWxvYWQtPmxlbik7CisJCWJ1Zl9wdXRfc2lnbihzZXMud3JpdGVwYXlsb2FkLCBrZXksIHR5cGUsIHNpZ2J1Zi0+ZGF0YSwgc2lnYnVmLT5sZW4pOworCQlidWZfZnJlZShzaWdidWYpOyAvKiBOb3RoaW5nIGNvbmZpZGVudGlhbCBpbiB0aGUgYnVmZmVyICovCisJfQorCisJZW5jcnlwdF9wYWNrZXQoKTsKKwlUUkFDRSgoImxlYXZlIHNlbmRfbXNnX3VzZXJhdXRoX3B1YmtleSIpKQorfQorCitpbnQgY2xpX2F1dGhfcHVia2V5KCkgeworCisJVFJBQ0UoKCJlbnRlciBjbGlfYXV0aF9wdWJrZXkiKSkKKworCWlmIChjbGlfb3B0cy5wcml2a2V5cyAhPSBOVUxMKSB7CisJCS8qIFNlbmQgYSB0cmlhbCByZXF1ZXN0ICovCisJCXNlbmRfbXNnX3VzZXJhdXRoX3B1YmtleShjbGlfb3B0cy5wcml2a2V5cy0+a2V5LAorCQkJCWNsaV9vcHRzLnByaXZrZXlzLT50eXBlLCAwKTsKKwkJY2xpX3Nlcy5sYXN0cHJpdmtleSA9IGNsaV9vcHRzLnByaXZrZXlzOworCQlUUkFDRSgoImxlYXZlIGNsaV9hdXRoX3B1YmtleS1zdWNjZXNzIikpCisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCVRSQUNFKCgibGVhdmUgY2xpX2F1dGhfcHVia2V5LWZhaWx1cmUiKSkKKwkJcmV0dXJuIDA7CisJfQorfQorI2VuZGlmIC8qIFB1YmtleSBhdXRoICovCmRpZmYgLS1naXQgYS9jbGktY2hhbm5lbC5jIGIvY2xpLWNoYW5uZWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODhlOTEzCi0tLSAvZGV2L251bGwKKysrIGIvY2xpLWNoYW5uZWwuYwpAQCAtMCwwICsxLDU5IEBACisvKgorICogRHJvcGJlYXIgU1NICisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJjaGFubmVsLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAiY2lyY2J1ZmZlci5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJzc2guaCIKKworLyogV2UgcmVjZWl2ZSBjaGFubmVsIGRhdGEgLSBvbmx5IHVzZWQgYnkgdGhlIGNsaWVudCBjaGFuc2Vzc2lvbiBjb2RlKi8KK3ZvaWQgcmVjdl9tc2dfY2hhbm5lbF9leHRlbmRlZF9kYXRhKCkgeworCisJc3RydWN0IENoYW5uZWwgKmNoYW5uZWw7CisJdW5zaWduZWQgaW50IGRhdGF0eXBlOworCisJVFJBQ0UoKCJlbnRlciByZWN2X21zZ19jaGFubmVsX2V4dGVuZGVkX2RhdGEiKSkKKworCWNoYW5uZWwgPSBnZXRjaGFubmVsKCk7CisKKwlpZiAoY2hhbm5lbC0+dHlwZSAhPSAmY2xpY2hhbnNlc3MpIHsKKwkJVFJBQ0UoKCJsZWF2ZSByZWN2X21zZ19jaGFubmVsX2V4dGVuZGVkX2RhdGE6IGNoYW50eXBlIGlzIHdyb25nIikpCisJCXJldHVybjsgLyogd2UganVzdCBpZ25vcmUgaXQgKi8KKwl9CisKKwlkYXRhdHlwZSA9IGJ1Zl9nZXRpbnQoc2VzLnBheWxvYWQpOworCQorCWlmIChkYXRhdHlwZSAhPSBTU0hfRVhURU5ERURfREFUQV9TVERFUlIpIHsKKwkJVFJBQ0UoKCJsZWF2ZSByZWN2X21zZ19jaGFubmVsX2V4dGVuZGVkX2RhdGE6IHdyb25nIGRhdGF0eXBlOiAlZCIsCisJCQkJCWRhdGF0eXBlKSkKKwkJcmV0dXJuOwkKKwl9CisKKwljb21tb25fcmVjdl9tc2dfY2hhbm5lbF9kYXRhKGNoYW5uZWwsIGNoYW5uZWwtPmVycmZkLCBjaGFubmVsLT5leHRyYWJ1Zik7CisKKwlUUkFDRSgoImxlYXZlIHJlY3ZfbXNnX2NoYW5uZWxfZXh0ZW5kZWRfZGF0YSIpKQorfQpkaWZmIC0tZ2l0IGEvY2xpLWNoYW5zZXNzaW9uLmMgYi9jbGktY2hhbnNlc3Npb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjBkMDdhCi0tLSAvZGV2L251bGwKKysrIGIvY2xpLWNoYW5zZXNzaW9uLmMKQEAgLTAsMCArMSwzODEgQEAKKy8qCisgKiBEcm9wYmVhciBTU0gKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IE1paG5lYSBTdG9lbmVzY3UKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJwYWNrZXQuaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJzZXNzaW9uLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAiY2hhbm5lbC5oIgorI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgInJ1bm9wdHMuaCIKKyNpbmNsdWRlICJ0ZXJtY29kZXMuaCIKKyNpbmNsdWRlICJjaGFuc2Vzc2lvbi5oIgorCitzdGF0aWMgdm9pZCBjbGlfY2xvc2VjaGFuc2VzcyhzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCk7CitzdGF0aWMgaW50IGNsaV9pbml0Y2hhbnNlc3Moc3RydWN0IENoYW5uZWwgKmNoYW5uZWwpOworc3RhdGljIHZvaWQgY2xpX2NoYW5zZXNzcmVxKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKTsKKworc3RhdGljIHZvaWQgc3RhcnRfY2hhbm5lbF9yZXF1ZXN0KHN0cnVjdCBDaGFubmVsICpjaGFubmVsLCB1bnNpZ25lZCBjaGFyICp0eXBlKTsKKworc3RhdGljIHZvaWQgc2VuZF9jaGFuc2Vzc19wdHlfcmVxKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKTsKK3N0YXRpYyB2b2lkIHNlbmRfY2hhbnNlc3Nfc2hlbGxfcmVxKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKTsKKworc3RhdGljIHZvaWQgY2xpX3R0eV9zZXR1cCgpOworCitjb25zdCBzdHJ1Y3QgQ2hhblR5cGUgY2xpY2hhbnNlc3MgPSB7CisJMCwgLyogc2VwZmRzICovCisJInNlc3Npb24iLCAvKiBuYW1lICovCisJY2xpX2luaXRjaGFuc2VzcywgLyogaW5pdGhhbmRsZXIgKi8KKwlOVUxMLCAvKiBjaGVja2Nsb3NlaGFuZGxlciAqLworCWNsaV9jaGFuc2Vzc3JlcSwgLyogcmVxaGFuZGxlciAqLworCWNsaV9jbG9zZWNoYW5zZXNzLCAvKiBjbG9zZWhhbmRsZXIgKi8KK307CisKK3N0YXRpYyB2b2lkIGNsaV9jaGFuc2Vzc3JlcShzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCkgeworCisJdW5zaWduZWQgY2hhciogdHlwZSA9IE5VTEw7CisJaW50IHdhbnRyZXBseTsKKworCVRSQUNFKCgiZW50ZXIgY2xpX2NoYW5zZXNzcmVxIikpCisKKwl0eXBlID0gYnVmX2dldHN0cmluZyhzZXMucGF5bG9hZCwgTlVMTCk7CisJd2FudHJlcGx5ID0gYnVmX2dldGJvb2woc2VzLnBheWxvYWQpOworCisJaWYgKHN0cmNtcCh0eXBlLCAiZXhpdC1zdGF0dXMiKSA9PSAwKSB7CisJCWNsaV9zZXMucmV0dmFsID0gYnVmX2dldGludChzZXMucGF5bG9hZCk7CisJCVRSQUNFKCgiZ290IGV4aXQtc3RhdHVzIG9mICclZCciLCBjbGlfc2VzLnJldHZhbCkpCisJfSBlbHNlIGlmIChzdHJjbXAodHlwZSwgImV4aXQtc2lnbmFsIikgPT0gMCkgeworCQlUUkFDRSgoImdvdCBleGl0LXNpZ25hbCwgaWdub3JpbmcgaXQiKSkKKwl9IGVsc2UgeworCQlUUkFDRSgoInVua25vd24gcmVxdWVzdCAnJXMnIiwgdHlwZSkpCisJCXNlbmRfbXNnX2NoYW5uZWxfZmFpbHVyZShjaGFubmVsKTsKKwkJZ290byBvdXQ7CisJfQorCQkKK291dDoKKwltX2ZyZWUodHlwZSk7Cit9CisJCisKKy8qIElmIHRoZSBtYWluIHNlc3Npb24gZ29lcywgd2UgY2xvc2UgaXQgdXAgKi8KK3N0YXRpYyB2b2lkIGNsaV9jbG9zZWNoYW5zZXNzKHN0cnVjdCBDaGFubmVsICpVTlVTRUQoY2hhbm5lbCkpIHsKKworCS8qIFRoaXMgY2hhbm5lbCBoYXNuJ3QgZ29uZSB5ZXQsIHNvIHdlIGhhdmUgPiAxICovCisJaWYgKHNlcy5jaGFuY291bnQgPiAxKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfSU5GTywgIldhaXRpbmcgZm9yIG90aGVyIGNoYW5uZWxzIHRvIGNsb3NlLi4uIik7CisJfQorCisJY2xpX3R0eV9jbGVhbnVwKCk7IC8qIFJlc3RvcmUgdHR5IG1vZGVzIGV0YyAqLworCit9CisKK3N0YXRpYyB2b2lkIHN0YXJ0X2NoYW5uZWxfcmVxdWVzdChzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCwgCisJCXVuc2lnbmVkIGNoYXIgKnR5cGUpIHsKKworCUNIRUNLQ0xFQVJUT1dSSVRFKCk7CisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgU1NIX01TR19DSEFOTkVMX1JFUVVFU1QpOworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgY2hhbm5lbC0+cmVtb3RlY2hhbik7CisKKwlidWZfcHV0c3RyaW5nKHNlcy53cml0ZXBheWxvYWQsIHR5cGUsIHN0cmxlbih0eXBlKSk7CisKK30KKworLyogVGFrZW4gZnJvbSBPcGVuU1NIJ3Mgc3NodHR5LmM6CisgKiBSQ1NJRCgiT3BlbkJTRDogc3NodHR5LmMsdiAxLjUgMjAwMy8wOS8xOSAxNzo0MzozNSBtYXJrdXMgRXhwICIpOyAqLworc3RhdGljIHZvaWQgY2xpX3R0eV9zZXR1cCgpIHsKKworCXN0cnVjdCB0ZXJtaW9zIHRpbzsKKworCVRSQUNFKCgiZW50ZXIgY2xpX3B0eV9zZXR1cCIpKQorCisJaWYgKGNsaV9zZXMudHR5X3Jhd19tb2RlID09IDEpIHsKKwkJVFJBQ0UoKCJsZWF2ZSBjbGlfdHR5X3NldHVwOiBhbHJlYWR5IGluIHJhdyBtb2RlISIpKQorCQlyZXR1cm47CisJfQorCisJaWYgKHRjZ2V0YXR0cihTVERJTl9GSUxFTk8sICZ0aW8pID09IC0xKSB7CisJCWRyb3BiZWFyX2V4aXQoIkZhaWxlZCB0byBzZXQgcmF3IFRUWSBtb2RlIik7CisJfQorCisJLyogbWFrZSBhIGNvcHkgKi8KKwljbGlfc2VzLnNhdmVkX3RpbyA9IHRpbzsKKworCXRpby5jX2lmbGFnIHw9IElHTlBBUjsKKwl0aW8uY19pZmxhZyAmPSB+KElTVFJJUCB8IElOTENSIHwgSUdOQ1IgfCBJQ1JOTCB8IElYT04gfCBJWEFOWSB8IElYT0ZGKTsKKyNpZmRlZiBJVUNMQworCXRpby5jX2lmbGFnICY9IH5JVUNMQzsKKyNlbmRpZgorCXRpby5jX2xmbGFnICY9IH4oSVNJRyB8IElDQU5PTiB8IEVDSE8gfCBFQ0hPRSB8IEVDSE9LIHwgRUNIT05MKTsKKyNpZmRlZiBJRVhURU4KKwl0aW8uY19sZmxhZyAmPSB+SUVYVEVOOworI2VuZGlmCisJdGlvLmNfb2ZsYWcgJj0gfk9QT1NUOworCXRpby5jX2NjW1ZNSU5dID0gMTsKKwl0aW8uY19jY1tWVElNRV0gPSAwOworCWlmICh0Y3NldGF0dHIoU1RESU5fRklMRU5PLCBUQ1NBRFJBSU4sICZ0aW8pID09IC0xKSB7CisJCWRyb3BiZWFyX2V4aXQoIkZhaWxlZCB0byBzZXQgcmF3IFRUWSBtb2RlIik7CisJfQorCisJY2xpX3Nlcy50dHlfcmF3X21vZGUgPSAxOworCVRSQUNFKCgibGVhdmUgY2xpX3R0eV9zZXR1cCIpKQorfQorCit2b2lkIGNsaV90dHlfY2xlYW51cCgpIHsKKworCVRSQUNFKCgiZW50ZXIgY2xpX3R0eV9jbGVhbnVwIikpCisKKwlpZiAoY2xpX3Nlcy50dHlfcmF3X21vZGUgPT0gMCkgeworCQlUUkFDRSgoImxlYXZlIGNsaV90dHlfY2xlYW51cDogbm90IGluIHJhdyBtb2RlIikpCisJCXJldHVybjsKKwl9CisKKwlpZiAodGNzZXRhdHRyKFNURElOX0ZJTEVOTywgVENTQURSQUlOLCAmY2xpX3Nlcy5zYXZlZF90aW8pID09IC0xKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgIkZhaWxlZCByZXN0b3JpbmcgVFRZIik7CisJfSBlbHNlIHsKKwkJY2xpX3Nlcy50dHlfcmF3X21vZGUgPSAwOyAKKwl9CisKKwlUUkFDRSgoImxlYXZlIGNsaV90dHlfY2xlYW51cCIpKQorfQorCitzdGF0aWMgdm9pZCBwdXRfdGVybWNvZGVzKCkgeworCisJc3RydWN0IHRlcm1pb3MgdGlvOworCXVuc2lnbmVkIGludCBzc2hjb2RlOworCWNvbnN0IHN0cnVjdCBUZXJtQ29kZSAqdGVybWNvZGU7CisJdW5zaWduZWQgaW50IHZhbHVlOworCXVuc2lnbmVkIGludCBtYXBjb2RlOworCisJdW5zaWduZWQgaW50IGJ1ZnBvczEsIGJ1ZnBvczI7CisKKwlUUkFDRSgoImVudGVyIHB1dF90ZXJtY29kZXMiKSkKKworCWlmICh0Y2dldGF0dHIoU1RESU5fRklMRU5PLCAmdGlvKSA9PSAtMSkgeworCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJGYWlsZWQgcmVhZGluZyB0ZXJtbW9kZXMiKTsKKwkJYnVmX3B1dGludChzZXMud3JpdGVwYXlsb2FkLCAxKTsgLyogSnVzdCB0aGUgdGVybWluYXRvciAqLworCQlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCAwKTsgLyogVFRZX09QX0VORCAqLworCQlyZXR1cm47CisJfQorCisJYnVmcG9zMSA9IHNlcy53cml0ZXBheWxvYWQtPnBvczsKKwlidWZfcHV0aW50KHNlcy53cml0ZXBheWxvYWQsIDApOyAvKiBBIHBsYWNlaG9sZGVyIGZvciB0aGUgZmluYWwgbGVuZ3RoICovCisKKwkvKiBBcyB3aXRoIERyb3BiZWFyIHNlcnZlciwgd2UgaWdub3JlIGJhdWQgcmF0ZXMgZm9yIG5vdyAqLworCWZvciAoc3NoY29kZSA9IDE7IHNzaGNvZGUgPCBNQVhfVEVSTUNPREU7IHNzaGNvZGUrKykgeworCisJCXRlcm1jb2RlID0gJnRlcm1jb2Rlc1tzc2hjb2RlXTsKKwkJbWFwY29kZSA9IHRlcm1jb2RlLT5tYXBjb2RlOworCisJCXN3aXRjaCAodGVybWNvZGUtPnR5cGUpIHsKKworCQkJY2FzZSBURVJNQ09ERV9OT05FOgorCQkJCWNvbnRpbnVlOworCisJCQljYXNlIFRFUk1DT0RFX0NPTlRST0xDSEFSOgorCQkJCXZhbHVlID0gdGlvLmNfY2NbbWFwY29kZV07CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgVEVSTUNPREVfSU5QVVQ6CisJCQkJdmFsdWUgPSB0aW8uY19pZmxhZyAmIG1hcGNvZGU7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgVEVSTUNPREVfT1VUUFVUOgorCQkJCXZhbHVlID0gdGlvLmNfb2ZsYWcgJiBtYXBjb2RlOworCQkJCWJyZWFrOworCisJCQljYXNlIFRFUk1DT0RFX0xPQ0FMOgorCQkJCXZhbHVlID0gdGlvLmNfbGZsYWcgJiBtYXBjb2RlOworCQkJCWJyZWFrOworCisJCQljYXNlIFRFUk1DT0RFX0NPTlRST0w6CisJCQkJdmFsdWUgPSB0aW8uY19jZmxhZyAmIG1hcGNvZGU7CisJCQkJYnJlYWs7CisKKwkJCWRlZmF1bHQ6CisJCQkJY29udGludWU7CisKKwkJfQorCisJCS8qIElmIHdlIHJlYWNoIGhlcmUsIHdlIGhhdmUgc29tZXRoaW5nIHRvIHNheSAqLworCQlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCBzc2hjb2RlKTsKKwkJYnVmX3B1dGludChzZXMud3JpdGVwYXlsb2FkLCB2YWx1ZSk7CisJfQorCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgMCk7IC8qIFRIRSBFTkQsIGFrYSBUVFlfT1BfRU5EICovCisKKwkvKiBQdXQgdGhlIHN0cmluZyBsZW5ndGggYXQgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKi8KKwlidWZwb3MyID0gc2VzLndyaXRlcGF5bG9hZC0+cG9zOworCisJYnVmX3NldHBvcyhzZXMud3JpdGVwYXlsb2FkLCBidWZwb3MxKTsgLyogSnVtcCBiYWNrICovCisJYnVmX3B1dGludChzZXMud3JpdGVwYXlsb2FkLCBidWZwb3MyIC0gYnVmcG9zMSAtIDQpOyAvKiBsZW4odGVybWNvZGVzKSAqLworCWJ1Zl9zZXRwb3Moc2VzLndyaXRlcGF5bG9hZCwgYnVmcG9zMik7IC8qIEJhY2sgd2hlcmUgd2Ugd2VyZSAqLworCisJVFJBQ0UoKCJsZWF2ZSBwdXRfdGVybWNvZGVzIikpCit9CisKK3N0YXRpYyB2b2lkIHB1dF93aW5zaXplKCkgeworCisJc3RydWN0IHdpbnNpemUgd3M7CisKKwlpZiAoaW9jdGwoU1RESU5fRklMRU5PLCBUSU9DR1dJTlNaLCAmd3MpIDwgMCkgeworCQkvKiBTb21lIHNhbmUgZGVmYXVsdHMgKi8KKwkJd3Mud3Nfcm93ID0gMjU7CisJCXdzLndzX2NvbCA9IDgwOworCQl3cy53c194cGl4ZWwgPSAwOworCQl3cy53c195cGl4ZWwgPSAwOworCX0KKworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgd3Mud3NfY29sKTsgLyogQ29scyAqLworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgd3Mud3Nfcm93KTsgLyogUm93cyAqLworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgd3Mud3NfeHBpeGVsKTsgLyogV2lkdGggKi8KKwlidWZfcHV0aW50KHNlcy53cml0ZXBheWxvYWQsIHdzLndzX3lwaXhlbCk7IC8qIEhlaWdodCAqLworCit9CisKK3N0YXRpYyB2b2lkIHNpZ3dpbmNoX2hhbmRsZXIoaW50IFVOVVNFRCh1bnVzZWQpKSB7CisKKwljbGlfc2VzLndpbmNoYW5nZSA9IDE7CisKK30KKwordm9pZCBjbGlfY2hhbnNlc3Nfd2luY2hhbmdlKCkgeworCisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IENoYW5uZWwgKmNoYW5uZWwgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IHNlcy5jaGFuc2l6ZTsgaSsrKSB7CisJCWNoYW5uZWwgPSBzZXMuY2hhbm5lbHNbaV07CisJCWlmIChjaGFubmVsICE9IE5VTEwgJiYgY2hhbm5lbC0+dHlwZSA9PSAmY2xpY2hhbnNlc3MpIHsKKwkJCUNIRUNLQ0xFQVJUT1dSSVRFKCk7CisJCQlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCBTU0hfTVNHX0NIQU5ORUxfUkVRVUVTVCk7CisJCQlidWZfcHV0aW50KHNlcy53cml0ZXBheWxvYWQsIGNoYW5uZWwtPnJlbW90ZWNoYW4pOworCQkJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCAid2luZG93LWNoYW5nZSIsIDEzKTsKKwkJCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIDApOyAvKiBGQUxTRSBzYXlzIHRoZSBzcGVjICovCisJCQlwdXRfd2luc2l6ZSgpOworCQkJZW5jcnlwdF9wYWNrZXQoKTsKKwkJfQorCX0KKwljbGlfc2VzLndpbmNoYW5nZSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHNlbmRfY2hhbnNlc3NfcHR5X3JlcShzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCkgeworCisJdW5zaWduZWQgY2hhciogdGVybSA9IE5VTEw7CisKKwlUUkFDRSgoImVudGVyIHNlbmRfY2hhbnNlc3NfcHR5X3JlcSIpKQorCisJc3RhcnRfY2hhbm5lbF9yZXF1ZXN0KGNoYW5uZWwsICJwdHktcmVxIik7CisKKwkvKiBEb24ndCB3YW50IHJlcGxpZXMgKi8KKwlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCAwKTsKKworCS8qIEdldCB0aGUgdGVybWluYWwgKi8KKwl0ZXJtID0gZ2V0ZW52KCJURVJNIik7CisJaWYgKHRlcm0gPT0gTlVMTCkgeworCQl0ZXJtID0gInZ0MTAwIjsgLyogU2VlbXMgYSBzYWZlIGRlZmF1bHQgKi8KKwl9CisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCB0ZXJtLCBzdHJsZW4odGVybSkpOworCisJLyogV2luZG93IHNpemUgKi8KKwlwdXRfd2luc2l6ZSgpOworCisJLyogVGVybWluYWwgbW9kZSBlbmNvZGluZyAqLworCXB1dF90ZXJtY29kZXMoKTsKKworCWVuY3J5cHRfcGFja2V0KCk7CisKKwkvKiBTZXQgdXAgYSB3aW5kb3ctY2hhbmdlIGhhbmRsZXIgKi8KKwlpZiAoc2lnbmFsKFNJR1dJTkNILCBzaWd3aW5jaF9oYW5kbGVyKSA9PSBTSUdfRVJSKSB7CisJCWRyb3BiZWFyX2V4aXQoInNpZ25hbCBlcnJvciIpOworCX0KKwlUUkFDRSgoImxlYXZlIHNlbmRfY2hhbnNlc3NfcHR5X3JlcSIpKQorfQorCitzdGF0aWMgdm9pZCBzZW5kX2NoYW5zZXNzX3NoZWxsX3JlcShzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCkgeworCisJdW5zaWduZWQgY2hhciogcmVxdHlwZSA9IE5VTEw7CisKKwlUUkFDRSgoImVudGVyIHNlbmRfY2hhbnNlc3Nfc2hlbGxfcmVxIikpCisKKwlpZiAoY2xpX29wdHMuY21kKSB7CisJCXJlcXR5cGUgPSAiZXhlYyI7CisJfSBlbHNlIHsKKwkJcmVxdHlwZSA9ICJzaGVsbCI7CisJfQorCisJc3RhcnRfY2hhbm5lbF9yZXF1ZXN0KGNoYW5uZWwsIHJlcXR5cGUpOworCisJLyogWFhYIFRPRE8gKi8KKwlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCAwKTsgLyogRG9uJ3Qgd2FudCByZXBsaWVzICovCisJaWYgKGNsaV9vcHRzLmNtZCkgeworCQlidWZfcHV0c3RyaW5nKHNlcy53cml0ZXBheWxvYWQsIGNsaV9vcHRzLmNtZCwgc3RybGVuKGNsaV9vcHRzLmNtZCkpOworCX0KKworCWVuY3J5cHRfcGFja2V0KCk7CisJVFJBQ0UoKCJsZWF2ZSBzZW5kX2NoYW5zZXNzX3NoZWxsX3JlcSIpKQorfQorCitzdGF0aWMgaW50IGNsaV9pbml0Y2hhbnNlc3Moc3RydWN0IENoYW5uZWwgKmNoYW5uZWwpIHsKKworCisJY2hhbm5lbC0+d3JpdGVmZCA9IFNURE9VVF9GSUxFTk87CisJc2V0bm9uYmxvY2tpbmcoU1RET1VUX0ZJTEVOTyk7CisKKwljaGFubmVsLT5yZWFkZmQgPSBTVERJTl9GSUxFTk87CisJc2V0bm9uYmxvY2tpbmcoU1RESU5fRklMRU5PKTsKKworCWNoYW5uZWwtPmVycmZkID0gU1RERVJSX0ZJTEVOTzsKKwlzZXRub25ibG9ja2luZyhTVERFUlJfRklMRU5PKTsKKworCWNoYW5uZWwtPmV4dHJhYnVmID0gY2J1Zl9uZXcoUkVDVl9NQVhXSU5ET1cpOworCisJaWYgKGNsaV9vcHRzLndhbnRwdHkpIHsKKwkJc2VuZF9jaGFuc2Vzc19wdHlfcmVxKGNoYW5uZWwpOworCX0KKworCXNlbmRfY2hhbnNlc3Nfc2hlbGxfcmVxKGNoYW5uZWwpOworCisJaWYgKGNsaV9vcHRzLndhbnRwdHkpIHsKKwkJY2xpX3R0eV9zZXR1cCgpOworCX0KKworCXJldHVybiAwOyAvKiBTdWNjZXNzICovCisKK30KKwordm9pZCBjbGlfc2VuZF9jaGFuc2Vzc19yZXF1ZXN0KCkgeworCisJVFJBQ0UoKCJlbnRlciBjbGlfc2VuZF9jaGFuc2Vzc19yZXF1ZXN0IikpCisJaWYgKHNlbmRfbXNnX2NoYW5uZWxfb3Blbl9pbml0KFNURElOX0ZJTEVOTywgJmNsaWNoYW5zZXNzKSAKKwkJCT09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJZHJvcGJlYXJfZXhpdCgiQ291bGRuJ3Qgb3BlbiBpbml0aWFsIGNoYW5uZWwiKTsKKwl9CisKKwkvKiBObyBzcGVjaWFsIGNoYW5uZWwgcmVxdWVzdCBkYXRhICovCisJZW5jcnlwdF9wYWNrZXQoKTsKKwlUUkFDRSgoImxlYXZlIGNsaV9zZW5kX2NoYW5zZXNzX3JlcXVlc3QiKSkKKworfQpkaWZmIC0tZ2l0IGEvY2xpLWtleC5jIGIvY2xpLWtleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NWVkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9jbGkta2V4LmMKQEAgLTAsMCArMSwzMzAgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgTWF0dCBKb2huc3RvbgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IE1paG5lYSBTdG9lbmVzY3UKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJzZXNzaW9uLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAiYWxnby5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJrZXguaCIKKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJwYWNrZXQuaCIKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJyYW5kb20uaCIKKyNpbmNsdWRlICJydW5vcHRzLmgiCisjaW5jbHVkZSAic2lnbmtleS5oIgorCisKK3N0YXRpYyB2b2lkIGNoZWNraG9zdGtleSh1bnNpZ25lZCBjaGFyKiBrZXlibG9iLCB1bnNpZ25lZCBpbnQga2V5YmxvYmxlbik7CisjZGVmaW5lIE1BWF9LTk9XTkhPU1RTX0xJTkUgNDUwMAorCit2b2lkIHNlbmRfbXNnX2tleGRoX2luaXQoKSB7CisKKwljbGlfc2VzLmRoX2UgPSAobXBfaW50KiltX21hbGxvYyhzaXplb2YobXBfaW50KSk7CisJY2xpX3Nlcy5kaF94ID0gKG1wX2ludCopbV9tYWxsb2Moc2l6ZW9mKG1wX2ludCkpOworCW1fbXBfaW5pdF9tdWx0aShjbGlfc2VzLmRoX2UsIGNsaV9zZXMuZGhfeCwgTlVMTCk7CisKKwlnZW5fa2V4ZGhfdmFscyhjbGlfc2VzLmRoX2UsIGNsaV9zZXMuZGhfeCk7CisKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIFNTSF9NU0dfS0VYREhfSU5JVCk7CisJYnVmX3B1dG1waW50KHNlcy53cml0ZXBheWxvYWQsIGNsaV9zZXMuZGhfZSk7CisJZW5jcnlwdF9wYWNrZXQoKTsKKwlzZXMucmVxdWlyZW5leHQgPSBTU0hfTVNHX0tFWERIX1JFUExZOworfQorCisvKiBIYW5kbGUgYSBkaWZmaWUtaGVsbG1hbiBrZXkgZXhjaGFuZ2UgcmVwbHkuICovCit2b2lkIHJlY3ZfbXNnX2tleGRoX3JlcGx5KCkgeworCisJREVGX01QX0lOVChkaF9mKTsKKwlzaWduX2tleSAqaG9zdGtleSA9IE5VTEw7CisJdW5zaWduZWQgaW50IHR5cGUsIGtleWJsb2JsZW47CisJdW5zaWduZWQgY2hhcioga2V5YmxvYiA9IE5VTEw7CisKKworCVRSQUNFKCgiZW50ZXIgcmVjdl9tc2dfa2V4ZGhfcmVwbHkiKSkKKworCWlmIChjbGlfc2VzLmtleF9zdGF0ZSAhPSBLRVhESF9JTklUX1NFTlQpIHsKKwkJZHJvcGJlYXJfZXhpdCgiUmVjZWl2ZWQgb3V0LW9mLW9yZGVyIGtleGRocmVwbHkiKTsKKwl9CisJbV9tcF9pbml0KCZkaF9mKTsKKwl0eXBlID0gc2VzLm5ld2tleXMtPmFsZ29faG9zdGtleTsKKwlUUkFDRSgoInR5cGUgaXMgJWQiLCB0eXBlKSkKKworCWhvc3RrZXkgPSBuZXdfc2lnbl9rZXkoKTsKKwlrZXlibG9ibGVuID0gYnVmX2dldGludChzZXMucGF5bG9hZCk7CisKKwlrZXlibG9iID0gYnVmX2dldHB0cihzZXMucGF5bG9hZCwga2V5YmxvYmxlbik7CisJaWYgKCFzZXMua2V4c3RhdGUuZG9uZWZpcnN0a2V4KSB7CisJCS8qIE9ubHkgbWFrZXMgc2Vuc2UgdGhlIGZpcnN0IHRpbWUgKi8KKwkJY2hlY2tob3N0a2V5KGtleWJsb2IsIGtleWJsb2JsZW4pOworCX0KKworCWlmIChidWZfZ2V0X3B1Yl9rZXkoc2VzLnBheWxvYWQsIGhvc3RrZXksICZ0eXBlKSAhPSBEUk9QQkVBUl9TVUNDRVNTKSB7CisJCVRSQUNFKCgiZmFpbGVkIGdldHRpbmcgcHVia2V5IikpCisJCWRyb3BiZWFyX2V4aXQoIkJhZCBLRVggcGFja2V0Iik7CisJfQorCisJaWYgKGJ1Zl9nZXRtcGludChzZXMucGF5bG9hZCwgJmRoX2YpICE9IERST1BCRUFSX1NVQ0NFU1MpIHsKKwkJVFJBQ0UoKCJmYWlsZWQgZ2V0dGluZyBtcGludCIpKQorCQlkcm9wYmVhcl9leGl0KCJCYWQgS0VYIHBhY2tldCIpOworCX0KKworCWtleGRoX2NvbWJfa2V5KGNsaV9zZXMuZGhfZSwgY2xpX3Nlcy5kaF94LCAmZGhfZiwgaG9zdGtleSk7CisJbXBfY2xlYXIoJmRoX2YpOworCW1wX2NsZWFyX211bHRpKGNsaV9zZXMuZGhfZSwgY2xpX3Nlcy5kaF94LCBOVUxMKTsKKwltX2ZyZWUoY2xpX3Nlcy5kaF9lKTsKKwltX2ZyZWUoY2xpX3Nlcy5kaF94KTsKKworCWlmIChidWZfdmVyaWZ5KHNlcy5wYXlsb2FkLCBob3N0a2V5LCBzZXMuaGFzaCwgU0hBMV9IQVNIX1NJWkUpIAorCQkJIT0gRFJPUEJFQVJfU1VDQ0VTUykgeworCQlkcm9wYmVhcl9leGl0KCJCYWQgaG9zdGtleSBzaWduYXR1cmUiKTsKKwl9CisKKwlzaWduX2tleV9mcmVlKGhvc3RrZXkpOworCWhvc3RrZXkgPSBOVUxMOworCisJc2VuZF9tc2dfbmV3a2V5cygpOworCXNlcy5yZXF1aXJlbmV4dCA9IFNTSF9NU0dfTkVXS0VZUzsKKwlUUkFDRSgoImxlYXZlIHJlY3ZfbXNnX2tleGRoX2luaXQiKSkKK30KKworc3RhdGljIHZvaWQgYXNrX3RvX2NvbmZpcm0odW5zaWduZWQgY2hhcioga2V5YmxvYiwgdW5zaWduZWQgaW50IGtleWJsb2JsZW4pIHsKKworCWNoYXIqIGZwID0gTlVMTDsKKwlGSUxFICp0dHkgPSBOVUxMOworCWNoYXIgcmVzcG9uc2UgPSAneic7CisKKwlmcCA9IHNpZ25fa2V5X2ZpbmdlcnByaW50KGtleWJsb2IsIGtleWJsb2JsZW4pOworCWlmIChjbGlfb3B0cy5hbHdheXNfYWNjZXB0X2tleSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIlxuSG9zdCAnJXMnIGtleSBhY2NlcHRlZCB1bmNvbmRpdGlvbmFsbHkuXG4oZmluZ2VycHJpbnQgJXMpXG4iLAorCQkJCWNsaV9vcHRzLnJlbW90ZWhvc3QsCisJCQkJZnApOworCQltX2ZyZWUoZnApOworCQlyZXR1cm47CisJfQorCWZwcmludGYoc3RkZXJyLCAiXG5Ib3N0ICclcycgaXMgbm90IGluIHRoZSB0cnVzdGVkIGhvc3RzIGZpbGUuXG4oZmluZ2VycHJpbnQgJXMpXG5EbyB5b3Ugd2FudCB0byBjb250aW51ZSBjb25uZWN0aW5nPyAoeS9uKVxuIiwgCisJCQljbGlfb3B0cy5yZW1vdGVob3N0LCAKKwkJCWZwKTsKKwltX2ZyZWUoZnApOworCisJdHR5ID0gZm9wZW4oX1BBVEhfVFRZLCAiciIpOworCWlmICh0dHkpIHsKKwkJcmVzcG9uc2UgPSBnZXRjKHR0eSk7CisJCWZjbG9zZSh0dHkpOworCX0gZWxzZSB7CisJCXJlc3BvbnNlID0gZ2V0YyhzdGRpbik7CisJfQorCisJaWYgKHJlc3BvbnNlID09ICd5JykgeworCQlyZXR1cm47CisJfQorCisJZHJvcGJlYXJfZXhpdCgiRGlkbid0IHZhbGlkYXRlIGhvc3Qga2V5Iik7Cit9CisKK3N0YXRpYyBGSUxFKiBvcGVuX2tub3duX2hvc3RzX2ZpbGUoaW50ICogcmVhZG9ubHkpCit7CisJRklMRSAqIGhvc3RzZmlsZSA9IE5VTEw7CisJY2hhciAqIGZpbGVuYW1lID0gTlVMTDsKKwljaGFyICogaG9tZWRpciA9IE5VTEw7CisJCisJaG9tZWRpciA9IGdldGVudigiSE9NRSIpOworCisJaWYgKCFob21lZGlyKSB7CisJCXN0cnVjdCBwYXNzd2QgKiBwdyA9IE5VTEw7CisJCXB3ID0gZ2V0cHd1aWQoZ2V0dWlkKCkpOworCQlpZiAocHcpIHsKKwkJCWhvbWVkaXIgPSBwdy0+cHdfZGlyOworCQl9CisJfQorCisJaWYgKGhvbWVkaXIpIHsKKwkJdW5zaWduZWQgaW50IGxlbjsKKwkJbGVuID0gc3RybGVuKGhvbWVkaXIpOworCQlmaWxlbmFtZSA9IG1fbWFsbG9jKGxlbiArIDE4KTsgLyogIi8uc3NoL2tub3duX2hvc3RzIiBhbmQgbnVsbC10ZXJtaW5hdG9yKi8KKworCQlzbnByaW50ZihmaWxlbmFtZSwgbGVuKzE4LCAiJXMvLnNzaCIsIGhvbWVkaXIpOworCQkvKiBDaGVjayB0aGF0IH4vLnNzaCBleGlzdHMgLSBlYXNpZXN0IHdheSBpcyBqdXN0IHRvIG1rZGlyICovCisJCWlmIChta2RpcihmaWxlbmFtZSwgU19JUldYVSkgIT0gMCkgeworCQkJaWYgKGVycm5vICE9IEVFWElTVCkgeworCQkJCWRyb3BiZWFyX2xvZyhMT0dfSU5GTywgIldhcm5pbmc6IGZhaWxlZCBjcmVhdGluZyAlcy8uc3NoOiAlcyIsCisJCQkJCQlob21lZGlyLCBzdHJlcnJvcihlcnJubykpOworCQkJCVRSQUNFKCgibWtkaXIgZGlkbid0IHdvcms6ICVzIiwgc3RyZXJyb3IoZXJybm8pKSkKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCisJCXNucHJpbnRmKGZpbGVuYW1lLCBsZW4rMTgsICIlcy8uc3NoL2tub3duX2hvc3RzIiwgaG9tZWRpcik7CisJCWhvc3RzZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiYSsiKTsKKwkJCisJCWlmIChob3N0c2ZpbGUgIT0gTlVMTCkgeworCQkJKnJlYWRvbmx5ID0gMDsKKwkJCWZzZWVrKGhvc3RzZmlsZSwgMCwgU0VFS19TRVQpOworCQl9IGVsc2UgeworCQkJLyogV2UgbWlnaHRuJ3QgaGF2ZSBiZWVuIGFibGUgdG8gb3BlbiBpdCBpZiBpdCB3YXMgcmVhZC1vbmx5ICovCisJCQlpZiAoZXJybm8gPT0gRUFDQ0VTIHx8IGVycm5vID09IEVST0ZTKSB7CisJCQkJCVRSQUNFKCgidHJ5aW5nIHJlYWRvbmx5OiAlcyIsIHN0cmVycm9yKGVycm5vKSkpCisJCQkJCSpyZWFkb25seSA9IDE7CisJCQkJCWhvc3RzZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCQkJfQorCQl9CisJfQorCisJaWYgKGhvc3RzZmlsZSA9PSBOVUxMKSB7CisJCVRSQUNFKCgiaG9zdHNmaWxlIGRpZG4ndCBvcGVuOiAlcyIsIHN0cmVycm9yKGVycm5vKSkpCisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgIkZhaWxlZCB0byBvcGVuICVzLy5zc2gva25vd25faG9zdHMiLAorCQkJCWhvbWVkaXIpOworCQlnb3RvIG91dDsKKwl9CQorCitvdXQ6CisJbV9mcmVlKGZpbGVuYW1lKTsKKwlyZXR1cm4gaG9zdHNmaWxlOworfQorCitzdGF0aWMgdm9pZCBjaGVja2hvc3RrZXkodW5zaWduZWQgY2hhcioga2V5YmxvYiwgdW5zaWduZWQgaW50IGtleWJsb2JsZW4pIHsKKworCUZJTEUgKmhvc3RzZmlsZSA9IE5VTEw7CisJaW50IHJlYWRvbmx5ID0gMDsKKwl1bnNpZ25lZCBpbnQgaG9zdGxlbiwgYWxnb2xlbjsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwljb25zdCBjaGFyICphbGdvbmFtZSA9IE5VTEw7CisJY2hhciAqIGZpbmdlcnByaW50ID0gTlVMTDsKKwlidWZmZXIgKiBsaW5lID0gTlVMTDsKKwlpbnQgcmV0OworCisJaG9zdHNmaWxlID0gb3Blbl9rbm93bl9ob3N0c19maWxlKCZyZWFkb25seSk7CisJaWYgKCFob3N0c2ZpbGUpCXsKKwkJYXNrX3RvX2NvbmZpcm0oa2V5YmxvYiwga2V5YmxvYmxlbik7CisJCS8qIGFza190b19jb25maXJtIHdpbGwgZXhpdCB1cG9uIGZhaWx1cmUgKi8KKwkJcmV0dXJuOworCX0KKwkKKwlsaW5lID0gYnVmX25ldyhNQVhfS05PV05IT1NUU19MSU5FKTsKKwlob3N0bGVuID0gc3RybGVuKGNsaV9vcHRzLnJlbW90ZWhvc3QpOworCWFsZ29uYW1lID0gc2lnbmtleV9uYW1lX2Zyb21fdHlwZShzZXMubmV3a2V5cy0+YWxnb19ob3N0a2V5LCAmYWxnb2xlbik7CisKKwlkbyB7CisJCWlmIChidWZfZ2V0bGluZShsaW5lLCBob3N0c2ZpbGUpID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJCVRSQUNFKCgiZmFpbGVkIHJlYWRpbmcgbGluZTogcHJvYiBFT0YiKSkKKwkJCWJyZWFrOworCQl9CisKKwkJLyogVGhlIGxpbmUgaXMgdG9vIHNob3J0IHRvIGJlIHNlbnNpYmxlICovCisJCS8qICIzMCIgaXMgJ2Vub3VnaCB0byBob2xkIHNzaC1kc3MgcGx1cyB0aGUgc3BhY2VzLCBpZSBzbyB3ZSBkb24ndAorCQkgKiBidWZfZ2V0Zm9vKCkgcGFzdCB0aGUgZW5kIGFuZCBkaWUgaG9ycmlibHkgLSB0aGUgYmFzZTY0IHBhcnNpbmcKKwkJICogY29kZSBpcyB3aGF0IHRpcHRvZXMgdXAgdG8gdGhlIGVuZCBuaWNlbHkgKi8KKwkJaWYgKGxpbmUtPmxlbiA8IChob3N0bGVuKzMwKSApIHsKKwkJCVRSQUNFKCgibGluZSBpcyB0b28gc2hvcnQgdG8gYmUgc2Vuc2libGUiKSkKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogQ29tcGFyZSBob3N0bmFtZXMgKi8KKwkJaWYgKHN0cm5jbXAoY2xpX29wdHMucmVtb3RlaG9zdCwgYnVmX2dldHB0cihsaW5lLCBob3N0bGVuKSwKKwkJCQkJaG9zdGxlbikgIT0gMCkgeworCQkJVFJBQ0UoKCJob3N0cyBkb24ndCBtYXRjaCIpKQorCQkJY29udGludWU7CisJCX0KKworCQlidWZfaW5jcnBvcyhsaW5lLCBob3N0bGVuKTsKKwkJaWYgKGJ1Zl9nZXRieXRlKGxpbmUpICE9ICcgJykgeworCQkJLyogdGhlcmUgd2Fzbid0IGEgc3BhY2UgYWZ0ZXIgdGhlIGhvc3RuYW1lLCBzb21ldGhpbmcgZG9kZ3kgKi8KKwkJCVRSQUNFKCgibWlzc2luZyBzcGFjZSBhZnRlIG1hdGNoaW5nIGhvc3RuYW1lIikpCisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChzdHJuY21wKGJ1Zl9nZXRwdHIobGluZSwgYWxnb2xlbiksIGFsZ29uYW1lLCBhbGdvbGVuKSAhPSAwKSB7CisJCQlUUkFDRSgoImFsZ28gZG9lc24ndCBtYXRjaCIpKQorCQkJY29udGludWU7CisJCX0KKworCQlidWZfaW5jcnBvcyhsaW5lLCBhbGdvbGVuKTsKKwkJaWYgKGJ1Zl9nZXRieXRlKGxpbmUpICE9ICcgJykgeworCQkJVFJBQ0UoKCJtaXNzaW5nIHNwYWNlIGFmdGVyIGFsZ28iKSkKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogTm93IHdlJ3JlIGF0IHRoZSBpbnRlcmVzdGluZyBob3N0a2V5ICovCisJCXJldCA9IGNtcF9iYXNlNjRfa2V5KGtleWJsb2IsIGtleWJsb2JsZW4sIGFsZ29uYW1lLCBhbGdvbGVuLAorCQkJCQkJbGluZSwgJmZpbmdlcnByaW50KTsKKworCQlpZiAocmV0ID09IERST1BCRUFSX1NVQ0NFU1MpIHsKKwkJCS8qIEdvb2QgbWF0Y2hpbmcga2V5ICovCisJCQlUUkFDRSgoImdvb2QgbWF0Y2hpbmcga2V5IikpCisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIFRoZSBrZXlzIGRpZG4ndCBtYXRjaC4gZWVwLiBOb3RlIHRoYXQgd2UncmUgImxlYWtpbmciCisJCSAgIHRoZSBmaW5nZXJwcmludCBzdHJpbmdzIGhlcmUsIGJ1dCB3ZSdyZSBleGl0aW5nIGFueXdheSAqLworCQlkcm9wYmVhcl9leGl0KCJcblxuSG9zdCBrZXkgbWlzbWF0Y2ggZm9yICVzICFcbiIKKwkJCQkJIkZpbmdlcnByaW50IGlzICVzXG4iCisJCQkJCSJFeHBlY3RlZCAlc1xuIgorCQkJCQkiSWYgeW91IGtub3cgdGhhdCB0aGUgaG9zdCBrZXkgaXMgY29ycmVjdCB5b3UgY2FuXG5yZW1vdmUgdGhlIGJhZCBlbnRyeSBmcm9tIH4vLnNzaC9rbm93bl9ob3N0cyIsIAorCQkJCQljbGlfb3B0cy5yZW1vdGVob3N0LAorCQkJCQlzaWduX2tleV9maW5nZXJwcmludChrZXlibG9iLCBrZXlibG9ibGVuKSwKKwkJCQkJZmluZ2VycHJpbnQgPyBmaW5nZXJwcmludCA6ICJVTktOT1dOIik7CisJfSB3aGlsZSAoMSk7IC8qIGtlZXAgZ29pbmcgJ3RpbCBzb21ldGhpbmcgaGFwcGVucyAqLworCisJLyogS2V5IGRvZXNuJ3QgZXhpc3QgeWV0ICovCisJYXNrX3RvX2NvbmZpcm0oa2V5YmxvYiwga2V5YmxvYmxlbik7CisKKwkvKiBJZiB3ZSBnZXQgaGVyZSwgdGhleSBzYWlkIHllcyAqLworCisJaWYgKHJlYWRvbmx5KSB7CisJCVRSQUNFKCgicmVhZG9ubHkiKSkKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFjbGlfb3B0cy5hbHdheXNfYWNjZXB0X2tleSkgeworCQkvKiBwdXQgdGhlIG5ldyBlbnRyeSBpbiB0aGUgZmlsZSAqLworCQlmc2Vlayhob3N0c2ZpbGUsIDAsIFNFRUtfRU5EKTsgLyogSW4gY2FzZSBpdCB3YXNuJ3Qgb3BlbmVkIGFwcGVuZCAqLworCQlidWZfc2V0cG9zKGxpbmUsIDApOworCQlidWZfc2V0bGVuKGxpbmUsIDApOworCQlidWZfcHV0Ynl0ZXMobGluZSwgc2VzLnJlbW90ZWhvc3QsIGhvc3RsZW4pOworCQlidWZfcHV0Ynl0ZShsaW5lLCAnICcpOworCQlidWZfcHV0Ynl0ZXMobGluZSwgYWxnb25hbWUsIGFsZ29sZW4pOworCQlidWZfcHV0Ynl0ZShsaW5lLCAnICcpOworCQlsZW4gPSBsaW5lLT5zaXplIC0gbGluZS0+cG9zOworCQlUUkFDRSgoImtleWJsb2JsZW4gJWQsIGxlbiAlZCIsIGtleWJsb2JsZW4sIGxlbikpCisJCS8qIFRoZSBvbmx5IGZhaWx1cmUgd2l0aCBiYXNlNjQgaXMgYnVmZmVyX292ZXJmbG93LCBidXQgYnVmX2dldHdyaXRlcHRyCisJCSAqIHdpbGwgZGllIGhvcnJpYmx5IGluIHRoZSBjYXNlIGFueXdheSAqLworCQliYXNlNjRfZW5jb2RlKGtleWJsb2IsIGtleWJsb2JsZW4sIGJ1Zl9nZXR3cml0ZXB0cihsaW5lLCBsZW4pLCAmbGVuKTsKKwkJYnVmX2luY3J3cml0ZXBvcyhsaW5lLCBsZW4pOworCQlidWZfcHV0Ynl0ZShsaW5lLCAnXG4nKTsKKwkJYnVmX3NldHBvcyhsaW5lLCAwKTsKKwkJZndyaXRlKGJ1Zl9nZXRwdHIobGluZSwgbGluZS0+bGVuKSwgbGluZS0+bGVuLCAxLCBob3N0c2ZpbGUpOworCQkvKiBXZSBpZ25vcmUgZXJyb3JzLCBzaW5jZSB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBkbyBhYm91dCB0aGVtICovCisJfQorCitvdXQ6CisJaWYgKGhvc3RzZmlsZSAhPSBOVUxMKSB7CisJCWZjbG9zZShob3N0c2ZpbGUpOworCX0KKwlpZiAobGluZSAhPSBOVUxMKSB7CisJCWJ1Zl9mcmVlKGxpbmUpOworCX0KK30KZGlmZiAtLWdpdCBhL2NsaS1tYWluLmMgYi9jbGktbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4Y2YwMjMKLS0tIC9kZXYvbnVsbAorKysgYi9jbGktbWFpbi5jCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogRHJvcGJlYXIgLSBhIFNTSDIgc2VydmVyCisgKiBTU0ggY2xpZW50IGltcGxlbWVudGF0aW9uCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBNaWhuZWEgU3RvZW5lc2N1CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAicnVub3B0cy5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKworc3RhdGljIHZvaWQgY2xpX2Ryb3BiZWFyX2V4aXQoaW50IGV4aXRjb2RlLCBjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgcGFyYW0pOworc3RhdGljIHZvaWQgY2xpX2Ryb3BiZWFyX2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBwYXJhbSk7CisKKyNpZiBkZWZpbmVkKERCTVVMVElfZGJjbGllbnQpIHx8ICFkZWZpbmVkKERST1BCRUFSX01VTFRJKQorI2lmIGRlZmluZWQoREJNVUxUSV9kYmNsaWVudCkgJiYgZGVmaW5lZChEUk9QQkVBUl9NVUxUSSkKK2ludCBjbGlfbWFpbihpbnQgYXJnYywgY2hhciAqKiBhcmd2KSB7CisjZWxzZQoraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiogYXJndikgeworI2VuZGlmCisKKwlpbnQgc29jazsKKwljaGFyKiBlcnJvciA9IE5VTEw7CisJY2hhciogaG9zdGFuZHBvcnQ7CisJaW50IGxlbjsKKworCV9kcm9wYmVhcl9leGl0ID0gY2xpX2Ryb3BiZWFyX2V4aXQ7CisJX2Ryb3BiZWFyX2xvZyA9IGNsaV9kcm9wYmVhcl9sb2c7CisKKwlkaXNhbGxvd19jb3JlKCk7CisKKwljbGlfZ2V0b3B0cyhhcmdjLCBhcmd2KTsKKworCVRSQUNFKCgidXNlcj0nJXMnIGhvc3Q9JyVzJyBwb3J0PSclcyciLCBjbGlfb3B0cy51c2VybmFtZSwKKwkJCQljbGlfb3B0cy5yZW1vdGVob3N0LCBjbGlfb3B0cy5yZW1vdGVwb3J0KSkKKworCWlmIChzaWduYWwoU0lHUElQRSwgU0lHX0lHTikgPT0gU0lHX0VSUikgeworCQlkcm9wYmVhcl9leGl0KCJzaWduYWwoKSBlcnJvciIpOworCX0KKworCXNvY2sgPSBjb25uZWN0X3JlbW90ZShjbGlfb3B0cy5yZW1vdGVob3N0LCBjbGlfb3B0cy5yZW1vdGVwb3J0LCAKKwkJCTAsICZlcnJvcik7CisKKwlpZiAoc29jayA8IDApIHsKKwkJZHJvcGJlYXJfZXhpdCgiJXMiLCBlcnJvcik7CisJfQorCisJLyogU2V0IHVwIHRoZSBob3N0OnBvcnQgbG9nICovCisJbGVuID0gc3RybGVuKGNsaV9vcHRzLnJlbW90ZWhvc3QpOworCWxlbiArPSAxMDsgLyogMTYgYml0IHBvcnQgYW5kIGxlZXdheSovCisJaG9zdGFuZHBvcnQgPSAoY2hhciopbV9tYWxsb2MobGVuKTsKKwlzbnByaW50Zihob3N0YW5kcG9ydCwgbGVuLCAiJXM6JXMiLCAKKwkJCWNsaV9vcHRzLnJlbW90ZWhvc3QsIGNsaV9vcHRzLnJlbW90ZXBvcnQpOworCisJY2xpX3Nlc3Npb24oc29jaywgaG9zdGFuZHBvcnQpOworCisJLyogbm90IHJlYWNoZWQgKi8KKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYgLyogREJNVUxUSSBzdHVmZiAqLworCitzdGF0aWMgdm9pZCBjbGlfZHJvcGJlYXJfZXhpdChpbnQgZXhpdGNvZGUsIGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBwYXJhbSkgeworCisJY2hhciBmbXRidWZbMzAwXTsKKworCWlmICghc2Vzc2luaXRkb25lKSB7CisJCXNucHJpbnRmKGZtdGJ1Ziwgc2l6ZW9mKGZtdGJ1ZiksICJleGl0ZWQ6ICVzIiwKKwkJCQlmb3JtYXQpOworCX0gZWxzZSB7CisJCXNucHJpbnRmKGZtdGJ1Ziwgc2l6ZW9mKGZtdGJ1ZiksIAorCQkJCSJjb25uZWN0aW9uIHRvICVzQCVzOiVzIGV4aXRlZDogJXMiLCAKKwkJCQljbGlfb3B0cy51c2VybmFtZSwgY2xpX29wdHMucmVtb3RlaG9zdCwgCisJCQkJY2xpX29wdHMucmVtb3RlcG9ydCwgZm9ybWF0KTsKKwl9CisKKwkvKiBEbyB0aGUgY2xlYW51cCBmaXJzdCwgc2luY2UgdGhlbiB0aGUgdGVybWluYWwgd2lsbCBiZSByZXNldCAqLworCWNsaV9zZXNzaW9uX2NsZWFudXAoKTsKKwljb21tb25fc2Vzc2lvbl9jbGVhbnVwKCk7CisKKwlfZHJvcGJlYXJfbG9nKExPR19JTkZPLCBmbXRidWYsIHBhcmFtKTsKKworCWV4aXQoZXhpdGNvZGUpOworfQorCitzdGF0aWMgdm9pZCBjbGlfZHJvcGJlYXJfbG9nKGludCBVTlVTRUQocHJpb3JpdHkpLCAKKwkJY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IHBhcmFtKSB7CisKKwljaGFyIHByaW50YnVmWzEwMjRdOworCisJdnNucHJpbnRmKHByaW50YnVmLCBzaXplb2YocHJpbnRidWYpLCBmb3JtYXQsIHBhcmFtKTsKKworCWZwcmludGYoc3RkZXJyLCAiJXM6ICVzXG4iLCBjbGlfb3B0cy5wcm9nbmFtZSwgcHJpbnRidWYpOworCit9CmRpZmYgLS1naXQgYS9jbGktcnVub3B0cy5jIGIvY2xpLXJ1bm9wdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzY3ODUwCi0tLSAvZGV2L251bGwKKysrIGIvY2xpLXJ1bm9wdHMuYwpAQCAtMCwwICsxLDQzMyBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAicnVub3B0cy5oIgorI2luY2x1ZGUgInNpZ25rZXkuaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKyNpbmNsdWRlICJhbGdvLmgiCisjaW5jbHVkZSAidGNwZndkLmgiCisKK2NsaV9ydW5vcHRzIGNsaV9vcHRzOyAvKiBHTE9CQUwgKi8KKworc3RhdGljIHZvaWQgcHJpbnRoZWxwKCk7CitzdGF0aWMgdm9pZCBwYXJzZWhvc3RuYW1lKGNoYXIqIHVzZXJob3N0YXJnKTsKKyNpZmRlZiBFTkFCTEVfQ0xJX1BVQktFWV9BVVRICitzdGF0aWMgdm9pZCBsb2FkaWRlbnRpdHlmaWxlKGNvbnN0IGNoYXIqIGZpbGVuYW1lKTsKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9DTElfQU5ZVENQRldECitzdGF0aWMgdm9pZCBhZGRmb3J3YXJkKGNoYXIqIHN0ciwgc3RydWN0IFRDUEZ3ZExpc3QqKiBmd2RsaXN0KTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBwcmludGhlbHAoKSB7CisKKwlmcHJpbnRmKHN0ZGVyciwgIkRyb3BiZWFyIGNsaWVudCB2JXNcbiIKKwkJCQkJIlVzYWdlOiAlcyBbb3B0aW9uc10gW3VzZXJAXWhvc3QgW2NvbW1hbmRdXG4iCisJCQkJCSJPcHRpb25zIGFyZTpcbiIKKwkJCQkJIi1wIDxyZW1vdGVwb3J0PlxuIgorCQkJCQkiLWwgPHVzZXJuYW1lPlxuIgorCQkJCQkiLXQgICAgQWxsb2NhdGUgYSBwdHlcbiIKKwkJCQkJIi1UICAgIERvbid0IGFsbG9jYXRlIGEgcHR5XG4iCisJCQkJCSItTiAgICBEb24ndCBydW4gYSByZW1vdGUgY29tbWFuZFxuIgorCQkJCQkiLWYgICAgUnVuIGluIGJhY2tncm91bmQgYWZ0ZXIgYXV0aFxuIgorCQkJCQkiLXkgICAgQWx3YXlzIGFjY2VwdCByZW1vdGUgaG9zdCBrZXkgaWYgdW5rbm93blxuIgorI2lmZGVmIEVOQUJMRV9DTElfUFVCS0VZX0FVVEgKKwkJCQkJIi1pIDxpZGVudGl0eWZpbGU+ICAgKG11bHRpcGxlIGFsbG93ZWQpXG4iCisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfQ0xJX0xPQ0FMVENQRldECisJCQkJCSItTCA8bGlzdGVucG9ydDpyZW1vdGVob3N0OnJlbW90ZXBvcnQ+IExvY2FsIHBvcnQgZm9yd2FyZGluZ1xuIgorCQkJCQkiLWcgICAgQWxsb3cgcmVtb3RlIGhvc3RzIHRvIGNvbm5lY3QgdG8gZm9yd2FyZGVkIHBvcnRzXG4iCisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfQ0xJX1JFTU9URVRDUEZXRAorCQkJCQkiLVIgPGxpc3RlbnBvcnQ6cmVtb3RlaG9zdDpyZW1vdGVwb3J0PiBSZW1vdGUgcG9ydCBmb3J3YXJkaW5nXG4iCisjZW5kaWYKKyNpZmRlZiBERUJVR19UUkFDRQorCQkJCQkiLXYgICAgdmVyYm9zZVxuIgorI2VuZGlmCisJCQkJCSxEUk9QQkVBUl9WRVJTSU9OLCBjbGlfb3B0cy5wcm9nbmFtZSk7Cit9CisKK3ZvaWQgY2xpX2dldG9wdHMoaW50IGFyZ2MsIGNoYXIgKiogYXJndikgeworCisJdW5zaWduZWQgaW50IGksIGo7CisJY2hhciAqKiBuZXh0ID0gMDsKKwl1bnNpZ25lZCBpbnQgY21kbGVuOworI2lmZGVmIEVOQUJMRV9DTElfUFVCS0VZX0FVVEgKKwlpbnQgbmV4dGlza2V5ID0gMDsgLyogQSBmbGFnIGlmIHRoZSBuZXh0IGFyZ3VtZW50IGlzIGEga2V5ZmlsZSAqLworI2VuZGlmCisjaWZkZWYgRU5BQkxFX0NMSV9MT0NBTFRDUEZXRAorCWludCBuZXh0aXNsb2NhbCA9IDA7CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfQ0xJX1JFTU9URVRDUEZXRAorCWludCBuZXh0aXNyZW1vdGUgPSAwOworI2VuZGlmCisJY2hhciogZHVtbXkgPSBOVUxMOyAvKiBOb3QgdXNlZCBmb3IgYW55dGhpbmcgcmVhbCAqLworCisJLyogc2VlIHByaW50aGVscCgpIGZvciBvcHRpb25zICovCisJY2xpX29wdHMucHJvZ25hbWUgPSBhcmd2WzBdOworCWNsaV9vcHRzLnJlbW90ZWhvc3QgPSBOVUxMOworCWNsaV9vcHRzLnJlbW90ZXBvcnQgPSBOVUxMOworCWNsaV9vcHRzLnVzZXJuYW1lID0gTlVMTDsKKwljbGlfb3B0cy5jbWQgPSBOVUxMOworCWNsaV9vcHRzLm5vX2NtZCA9IDA7CisJY2xpX29wdHMuYmFja2dyb3VuZGVkID0gMDsKKwljbGlfb3B0cy53YW50cHR5ID0gOTsgLyogOSBtZWFucyAiaXQgaGFzbid0IGJlZW4gdG91Y2hlZCIsIGdldHMgc2V0IGxhdGVyICovCisJY2xpX29wdHMuYWx3YXlzX2FjY2VwdF9rZXkgPSAwOworI2lmZGVmIEVOQUJMRV9DTElfUFVCS0VZX0FVVEgKKwljbGlfb3B0cy5wcml2a2V5cyA9IE5VTEw7CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfQ0xJX0xPQ0FMVENQRldECisJY2xpX29wdHMubG9jYWxmd2RzID0gTlVMTDsKKwlvcHRzLmxpc3Rlbl9md2RfYWxsID0gMDsKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9DTElfUkVNT1RFVENQRldECisJY2xpX29wdHMucmVtb3RlZndkcyA9IE5VTEw7CisjZW5kaWYKKwkvKiBub3QgeWV0CisJb3B0cy5pcHY0ID0gMTsKKwlvcHRzLmlwdjYgPSAxOworCSovCisKKwkvKiBJdGVyYXRlIGFsbCB0aGUgYXJndW1lbnRzICovCisJZm9yIChpID0gMTsgaSA8ICh1bnNpZ25lZCBpbnQpYXJnYzsgaSsrKSB7CisjaWZkZWYgRU5BQkxFX0NMSV9QVUJLRVlfQVVUSAorCQlpZiAobmV4dGlza2V5KSB7CisJCQkvKiBMb2FkIGEgaG9zdGtleSBzaW5jZSB0aGUgcHJldmlvdXMgYXJndW1lbnQgd2FzICItaSIgKi8KKwkJCWxvYWRpZGVudGl0eWZpbGUoYXJndltpXSk7CisJCQluZXh0aXNrZXkgPSAwOworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9DTElfUkVNT1RFVENQRldECisJCWlmIChuZXh0aXNyZW1vdGUpIHsKKwkJCVRSQUNFKCgibmV4dGlzcmVtb3RlIHRydWUiKSkKKwkJCWFkZGZvcndhcmQoYXJndltpXSwgJmNsaV9vcHRzLnJlbW90ZWZ3ZHMpOworCQkJbmV4dGlzcmVtb3RlID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfQ0xJX0xPQ0FMVENQRldECisJCWlmIChuZXh0aXNsb2NhbCkgeworCQkJVFJBQ0UoKCJuZXh0aXNsb2NhbCB0cnVlIikpCisJCQlhZGRmb3J3YXJkKGFyZ3ZbaV0sICZjbGlfb3B0cy5sb2NhbGZ3ZHMpOworCQkJbmV4dGlzbG9jYWwgPSAwOworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorCQlpZiAobmV4dCkgeworCQkJLyogVGhlIHByZXZpb3VzIGZsYWcgc2V0IGEgdmFsdWUgdG8gYXNzaWduICovCisJCQkqbmV4dCA9IGFyZ3ZbaV07CisJCQlpZiAoKm5leHQgPT0gTlVMTCkgeworCQkJCWRyb3BiZWFyX2V4aXQoIkludmFsaWQgbnVsbCBhcmd1bWVudCIpOworCQkJfQorCQkJbmV4dCA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChhcmd2W2ldWzBdID09ICctJykgeworCQkJLyogQSBmbGFnICp3YXZlcyogKi8KKworCQkJc3dpdGNoIChhcmd2W2ldWzFdKSB7CisJCQkJY2FzZSAneSc6IC8qIGFsd2F5cyBhY2NlcHQgdGhlIHJlbW90ZSBob3N0a2V5ICovCisJCQkJCWNsaV9vcHRzLmFsd2F5c19hY2NlcHRfa2V5ID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAncCc6IC8qIHJlbW90ZXBvcnQgKi8KKwkJCQkJbmV4dCA9ICZjbGlfb3B0cy5yZW1vdGVwb3J0OworCQkJCQlicmVhazsKKyNpZmRlZiBFTkFCTEVfQ0xJX1BVQktFWV9BVVRICisJCQkJY2FzZSAnaSc6IC8qIGFuIGlkZW50aXR5ZmlsZSAqLworCQkJCQkvKiBLZWVwIHNjcCBoYXBweSB3aGVuIGl0IGNoYW5nZXMgIi1pIGZpbGUiIHRvICItaWZpbGUiICovCisJCQkJCWlmIChzdHJsZW4oYXJndltpXSkgPiAyKSB7CisJCQkJCQlsb2FkaWRlbnRpdHlmaWxlKCZhcmd2W2ldWzJdKTsKKwkJCQkJfSBlbHNlICB7CisJCQkJCQluZXh0aXNrZXkgPSAxOworCQkJCQl9CisJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJY2FzZSAndCc6IC8qIHdlIHdhbnQgYSBwdHkgKi8KKwkJCQkJY2xpX29wdHMud2FudHB0eSA9IDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ1QnOiAvKiBkb24ndCB3YW50IGEgcHR5ICovCisJCQkJCWNsaV9vcHRzLndhbnRwdHkgPSAwOworCQkJCQlicmVhazsKKwkJCQljYXNlICdOJzoKKwkJCQkJY2xpX29wdHMubm9fY21kID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnZic6CisJCQkJCWNsaV9vcHRzLmJhY2tncm91bmRlZCA9IDE7CisJCQkJCWJyZWFrOworI2lmZGVmIEVOQUJMRV9DTElfTE9DQUxUQ1BGV0QKKwkJCQljYXNlICdMJzoKKwkJCQkJbmV4dGlzbG9jYWwgPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlICdnJzoKKwkJCQkJb3B0cy5saXN0ZW5fZndkX2FsbCA9IDE7CisJCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRU5BQkxFX0NMSV9SRU1PVEVUQ1BGV0QKKwkJCQljYXNlICdSJzoKKwkJCQkJbmV4dGlzcmVtb3RlID0gMTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQljYXNlICdsJzoKKwkJCQkJbmV4dCA9ICZjbGlfb3B0cy51c2VybmFtZTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnaCc6CisJCQkJCXByaW50aGVscCgpOworCQkJCQlleGl0KEVYSVRfU1VDQ0VTUyk7CisJCQkJCWJyZWFrOworI2lmZGVmIERFQlVHX1RSQUNFCisJCQkJY2FzZSAndic6CisJCQkJCWRlYnVnX3RyYWNlID0gMTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQljYXNlICdGJzoKKwkJCQljYXNlICdlJzoKKwkJCQljYXNlICdjJzoKKwkJCQljYXNlICdtJzoKKwkJCQljYXNlICdEJzoKKyNpZm5kZWYgRU5BQkxFX0NMSV9SRU1PVEVUQ1BGV0QKKwkJCQljYXNlICdSJzoKKyNlbmRpZgorI2lmbmRlZiBFTkFCTEVfQ0xJX0xPQ0FMVENQRldECisJCQkJY2FzZSAnTCc6CisjZW5kaWYKKwkJCQljYXNlICdvJzoKKwkJCQljYXNlICdiJzoKKwkJCQkJbmV4dCA9ICZkdW1teTsKKwkJCQlkZWZhdWx0OgorCQkJCQlmcHJpbnRmKHN0ZGVyciwgCisJCQkJCQkiV0FSTklORzogSWdub3JpbmcgdW5rbm93biBhcmd1bWVudCAnJXMnXG4iLCBhcmd2W2ldKTsKKwkJCQkJYnJlYWs7CisJCQl9IC8qIFN3aXRjaCAqLworCQkJCisJCQkvKiBOb3cgd2UgaGFuZGxlIGFyZ3Mgd2hlcmUgdGhleSBtaWdodCBiZSAiLWx1c2VyIiAobm8gc3BhY2VzKSovCisJCQlpZiAobmV4dCAmJiBzdHJsZW4oYXJndltpXSkgPiAyKSB7CisJCQkJKm5leHQgPSAmYXJndltpXVsyXTsKKwkJCQluZXh0ID0gTlVMTDsKKwkJCX0KKworCQkJY29udGludWU7IC8qIG5leHQgYXJndW1lbnQgKi8KKworCQl9IGVsc2UgeworCQkJVFJBQ0UoKCJub24tZmxhZyBhcmc6ICclcyciLCBhcmd2W2ldKSkKKworCQkJLyogRWl0aGVyIHRoZSBob3N0bmFtZSBvciBjb21tYW5kcyAqLworCisJCQlpZiAoY2xpX29wdHMucmVtb3RlaG9zdCA9PSBOVUxMKSB7CisKKwkJCQlwYXJzZWhvc3RuYW1lKGFyZ3ZbaV0pOworCisJCQl9IGVsc2UgeworCisJCQkJLyogdGhpcyBpcyBwYXJ0IG9mIHRoZSBjb21tYW5kcyB0byBzZW5kIC0gYWZ0ZXIgdGhpcyB3ZQorCQkJCSAqIGRvbid0IHBhcnNlIGFueSBtb3JlIG9wdGlvbnMsIGFuZCBmbGFncyBhcmUgc2VudCBhcyB0aGUKKwkJCQkgKiBjb21tYW5kICovCisJCQkJY21kbGVuID0gMDsKKwkJCQlmb3IgKGogPSBpOyBqIDwgKHVuc2lnbmVkIGludClhcmdjOyBqKyspIHsKKwkJCQkJY21kbGVuICs9IHN0cmxlbihhcmd2W2pdKSArIDE7IC8qICsxIGZvciBzcGFjZXMgKi8KKwkJCQl9CisJCQkJLyogQWxsb2NhdGUgdGhlIHNwYWNlICovCisJCQkJY2xpX29wdHMuY21kID0gKGNoYXIqKW1fbWFsbG9jKGNtZGxlbik7CisJCQkJY2xpX29wdHMuY21kWzBdID0gJ1wwJzsKKworCQkJCS8qIEFwcGVuZCBhbGwgdGhlIGJpdHMgKi8KKwkJCQlmb3IgKGogPSBpOyBqIDwgKHVuc2lnbmVkIGludClhcmdjOyBqKyspIHsKKwkJCQkJc3RybGNhdChjbGlfb3B0cy5jbWQsIGFyZ3Zbal0sIGNtZGxlbik7CisJCQkJCXN0cmxjYXQoY2xpX29wdHMuY21kLCAiICIsIGNtZGxlbik7CisJCQkJfQorCQkJCS8qIEl0J2xsIGJlIG51bGwtdGVybWluYXRlZCBoZXJlICovCisKKwkJCQkvKiBXZSd2ZSBlYXRlbiBhbGwgdGhlIG9wdGlvbnMgYW5kIGZsYWdzICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoY2xpX29wdHMucmVtb3RlaG9zdCA9PSBOVUxMKSB7CisJCXByaW50aGVscCgpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJaWYgKGNsaV9vcHRzLnJlbW90ZXBvcnQgPT0gTlVMTCkgeworCQljbGlfb3B0cy5yZW1vdGVwb3J0ID0gIjIyIjsKKwl9CisKKwkvKiBJZiBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQgd2l0aCAtdCBvciAtVCwgd2UgZG9uJ3Qgd2FudCBhIHB0eSBpZgorCSAqIHRoZXJlJ3MgYSBjb21tYW5kLCBidXQgd2UgZG8gb3RoZXJ3aXNlICovCisJaWYgKGNsaV9vcHRzLndhbnRwdHkgPT0gOSkgeworCQlpZiAoY2xpX29wdHMuY21kID09IE5VTEwpIHsKKwkJCWNsaV9vcHRzLndhbnRwdHkgPSAxOworCQl9IGVsc2UgeworCQkJY2xpX29wdHMud2FudHB0eSA9IDA7CisJCX0KKwl9CisKKwlpZiAoY2xpX29wdHMuYmFja2dyb3VuZGVkICYmIGNsaV9vcHRzLmNtZCA9PSBOVUxMCisJCQkmJiBjbGlfb3B0cy5ub19jbWQgPT0gMCkgeworCQlkcm9wYmVhcl9leGl0KCJjb21tYW5kIHJlcXVpcmVkIGZvciAtZiIpOworCX0KK30KKworI2lmZGVmIEVOQUJMRV9DTElfUFVCS0VZX0FVVEgKK3N0YXRpYyB2b2lkIGxvYWRpZGVudGl0eWZpbGUoY29uc3QgY2hhciogZmlsZW5hbWUpIHsKKworCXN0cnVjdCBTaWduS2V5TGlzdCAqIG5leHRrZXk7CisJc2lnbl9rZXkgKmtleTsKKwlpbnQga2V5dHlwZTsKKworCWtleSA9IG5ld19zaWduX2tleSgpOworCWtleXR5cGUgPSBEUk9QQkVBUl9TSUdOS0VZX0FOWTsKKwlpZiAoIHJlYWRob3N0a2V5KGZpbGVuYW1lLCBrZXksICZrZXl0eXBlKSAhPSBEUk9QQkVBUl9TVUNDRVNTICkgeworCisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIGxvYWRpbmcga2V5ZmlsZSAnJXMnXG4iLCBmaWxlbmFtZSk7CisJCXNpZ25fa2V5X2ZyZWUoa2V5KTsKKworCX0gZWxzZSB7CisKKwkJbmV4dGtleSA9IChzdHJ1Y3QgU2lnbktleUxpc3QqKW1fbWFsbG9jKHNpemVvZihzdHJ1Y3QgU2lnbktleUxpc3QpKTsKKwkJbmV4dGtleS0+a2V5ID0ga2V5OworCQluZXh0a2V5LT5uZXh0ID0gY2xpX29wdHMucHJpdmtleXM7CisJCW5leHRrZXktPnR5cGUgPSBrZXl0eXBlOworCQljbGlfb3B0cy5wcml2a2V5cyA9IG5leHRrZXk7CisJfQorfQorI2VuZGlmCisKKworLyogUGFyc2VzIGEgW3VzZXJAXWhvc3RuYW1lIGFyZ3VtZW50LiB1c2VyaG9zdGFyZyBpcyB0aGUgYXJndltpXSBjb3JyZXNwb25kaW5nCisgKiAtIG5vdGUgdGhhdCBpdCB3aWxsIGJlIG1vZGlmaWVkICovCitzdGF0aWMgdm9pZCBwYXJzZWhvc3RuYW1lKGNoYXIqIG9yaWdob3N0YXJnKSB7CisKKwl1aWRfdCB1aWQ7CisJc3RydWN0IHBhc3N3ZCAqcHcgPSBOVUxMOyAKKwljaGFyICp1c2VyaG9zdGFyZyA9IE5VTEw7CisKKwkvKiBXZSBwcm9iYWJseSBkb24ndCB3YW50IHRvIGJlIGVkaXRpbmcgYXJndnMgKi8KKwl1c2VyaG9zdGFyZyA9IG1fc3RyZHVwKG9yaWdob3N0YXJnKTsKKworCWNsaV9vcHRzLnJlbW90ZWhvc3QgPSBzdHJjaHIodXNlcmhvc3RhcmcsICdAJyk7CisJaWYgKGNsaV9vcHRzLnJlbW90ZWhvc3QgPT0gTlVMTCkgeworCQkvKiBubyB1c2VybmFtZSBwb3J0aW9uLCB0aGUgY2xpLWF1dGguYyBjb2RlIGNhbiBmaWd1cmUgdGhlCisJCSAqIGxvY2FsIHVzZXIncyBuYW1lICovCisJCWNsaV9vcHRzLnJlbW90ZWhvc3QgPSB1c2VyaG9zdGFyZzsKKwl9IGVsc2UgeworCQljbGlfb3B0cy5yZW1vdGVob3N0WzBdID0gJ1wwJzsgLyogU3BsaXQgdGhlIHVzZXIvaG9zdCAqLworCQljbGlfb3B0cy5yZW1vdGVob3N0Kys7CisJCWNsaV9vcHRzLnVzZXJuYW1lID0gdXNlcmhvc3Rhcmc7CisJfQorCisJaWYgKGNsaV9vcHRzLnVzZXJuYW1lID09IE5VTEwpIHsKKwkJdWlkID0gZ2V0dWlkKCk7CisJCQorCQlwdyA9IGdldHB3dWlkKHVpZCk7CisJCWlmIChwdyA9PSBOVUxMIHx8IHB3LT5wd19uYW1lID09IE5VTEwpIHsKKwkJCWRyb3BiZWFyX2V4aXQoIlVua25vd24gb3duIHVzZXIiKTsKKwkJfQorCisJCWNsaV9vcHRzLnVzZXJuYW1lID0gbV9zdHJkdXAocHctPnB3X25hbWUpOworCX0KKworCWlmIChjbGlfb3B0cy5yZW1vdGVob3N0WzBdID09ICdcMCcpIHsKKwkJZHJvcGJlYXJfZXhpdCgiQmFkIGhvc3RuYW1lIik7CisJfQorfQorCisjaWZkZWYgRU5BQkxFX0NMSV9BTllUQ1BGV0QKKy8qIFR1cm4gYSAibGlzdGVucG9ydDpyZW1vdGVhZGRyOnJlbW90ZXBvcnQiIHN0cmluZyBpbnRvIGludG8gYSBmb3J3YXJkaW5nCisgKiBzZXQsIGFuZCBhZGQgaXQgdG8gdGhlIGZvcndhcmRpbmcgbGlzdCAqLworc3RhdGljIHZvaWQgYWRkZm9yd2FyZChjaGFyKiBvcmlnc3RyLCBzdHJ1Y3QgVENQRndkTGlzdCoqIGZ3ZGxpc3QpIHsKKworCWNoYXIgKiBsaXN0ZW5wb3J0ID0gTlVMTDsKKwljaGFyICogY29ubmVjdHBvcnQgPSBOVUxMOworCWNoYXIgKiBjb25uZWN0YWRkciA9IE5VTEw7CisJc3RydWN0IFRDUEZ3ZExpc3QqIG5ld2Z3ZCA9IE5VTEw7CisJY2hhciAqIHN0ciA9IE5VTEw7CisKKwlUUkFDRSgoImVudGVyIGFkZGZvcndhcmQiKSkKKworCS8qIFdlIG5lZWQgdG8gc3BsaXQgdGhlIG9yaWdpbmFsIGFyZ3VtZW50IHVwLiBUaGlzIHZhcgorCSAgIGlzIG5ldmVyIGZyZWUoKWQuICovIAorCXN0ciA9IG1fc3RyZHVwKG9yaWdzdHIpOworCisJbGlzdGVucG9ydCA9IHN0cjsKKworCWNvbm5lY3RhZGRyID0gc3RyY2hyKHN0ciwgJzonKTsKKwlpZiAoY29ubmVjdGFkZHIgPT0gTlVMTCkgeworCQlUUkFDRSgoImNvbm5lY3RhZGRyID09IE5VTEwiKSkKKwkJZ290byBmYWlsOworCX0KKwkqY29ubmVjdGFkZHIgPSAnXDAnOworCWNvbm5lY3RhZGRyKys7CisKKwljb25uZWN0cG9ydCA9IHN0cmNocihjb25uZWN0YWRkciwgJzonKTsKKwlpZiAoY29ubmVjdHBvcnQgPT0gTlVMTCkgeworCQlUUkFDRSgoImNvbm5lY3Rwb3J0ID09IE5VTEwiKSkKKwkJZ290byBmYWlsOworCX0KKwkqY29ubmVjdHBvcnQgPSAnXDAnOworCWNvbm5lY3Rwb3J0Kys7CisKKwluZXdmd2QgPSAoc3RydWN0IFRDUEZ3ZExpc3QqKW1fbWFsbG9jKHNpemVvZihzdHJ1Y3QgVENQRndkTGlzdCkpOworCisJLyogTm93IHdlIGNoZWNrIHRoZSBwb3J0cyAtIG5vdGUgdGhhdCB0aGUgcG9ydCBpbnRzIGFyZSB1bnNpZ25lZCwKKwkgKiB0aGUgY2hlY2sgbGF0ZXIgb25seSBjaGVja3MgZm9yID49IE1BWF9QT1JUICovCisJbmV3ZndkLT5saXN0ZW5wb3J0ID0gc3RydG9sKGxpc3RlbnBvcnQsIE5VTEwsIDEwKTsKKwlpZiAoZXJybm8gIT0gMCkgeworCQlUUkFDRSgoImJhZCBsaXN0ZW5wb3J0IHN0cnRvbCIpKQorCQlnb3RvIGZhaWw7CisJfQorCisJbmV3ZndkLT5jb25uZWN0cG9ydCA9IHN0cnRvbChjb25uZWN0cG9ydCwgTlVMTCwgMTApOworCWlmIChlcnJubyAhPSAwKSB7CisJCVRSQUNFKCgiYmFkIGNvbm5lY3Rwb3J0IHN0cnRvbCIpKQorCQlnb3RvIGZhaWw7CisJfQorCisJbmV3ZndkLT5jb25uZWN0YWRkciA9IGNvbm5lY3RhZGRyOworCisJaWYgKG5ld2Z3ZC0+bGlzdGVucG9ydCA+IDY1NTM1KSB7CisJCVRSQUNFKCgibGlzdGVucG9ydCA+IDY1NTM1IikpCisJCWdvdG8gYmFkcG9ydDsKKwl9CisJCQorCWlmIChuZXdmd2QtPmNvbm5lY3Rwb3J0ID4gNjU1MzUpIHsKKwkJVFJBQ0UoKCJjb25uZWN0cG9ydCA+IDY1NTM1IikpCisJCWdvdG8gYmFkcG9ydDsKKwl9CisKKwluZXdmd2QtPm5leHQgPSAqZndkbGlzdDsKKwkqZndkbGlzdCA9IG5ld2Z3ZDsKKworCVRSQUNFKCgibGVhdmUgYWRkZm9yd2FyZDogZG9uZSIpKQorCXJldHVybjsKKworZmFpbDoKKwlkcm9wYmVhcl9leGl0KCJCYWQgVENQIGZvcndhcmQgJyVzJyIsIG9yaWdzdHIpOworCitiYWRwb3J0OgorCWRyb3BiZWFyX2V4aXQoIkJhZCBUQ1AgcG9ydCBpbiAnJXMnIiwgb3JpZ3N0cik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2NsaS1zZXJ2aWNlLmMgYi9jbGktc2VydmljZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ODA3YmUKLS0tIC9kZXYvbnVsbAorKysgYi9jbGktc2VydmljZS5jCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBEcm9wYmVhciBTU0gKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IE1paG5lYSBTdG9lbmVzY3UKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJzZXJ2aWNlLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAicGFja2V0LmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgInNzaC5oIgorCit2b2lkIHNlbmRfbXNnX3NlcnZpY2VfcmVxdWVzdChjaGFyKiBzZXJ2aWNlbmFtZSkgeworCisJVFJBQ0UoKCJlbnRlciBzZW5kX21zZ19zZXJ2aWNlX3JlcXVlc3Q6IHNlcnZpY2VuYW1lPSclcyciLCBzZXJ2aWNlbmFtZSkpCisKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgU1NIX01TR19TRVJWSUNFX1JFUVVFU1QpOworCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgc2VydmljZW5hbWUsIHN0cmxlbihzZXJ2aWNlbmFtZSkpOworCisJZW5jcnlwdF9wYWNrZXQoKTsKKwlUUkFDRSgoImxlYXZlIHNlbmRfbXNnX3NlcnZpY2VfcmVxdWVzdCIpKQorfQorCisvKiBUaGlzIGp1c3Qgc2V0cyB1cCB0aGUgc3RhdGUgdmFyaWFibGVzIHJpZ2h0IGZvciB0aGUgbWFpbiBjbGllbnQgc2Vzc2lvbiBsb29wCisgKiB0byBkZWFsIHdpdGggKi8KK3ZvaWQgcmVjdl9tc2dfc2VydmljZV9hY2NlcHQoKSB7CisKKwl1bnNpZ25lZCBjaGFyKiBzZXJ2aWNlbmFtZTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJVFJBQ0UoKCJlbnRlciByZWN2X21zZ19zZXJ2aWNlX2FjY2VwdCIpKQorCisJc2VydmljZW5hbWUgPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCAmbGVuKTsKKworCS8qIHNzaC11c2VyYXV0aCAqLworCWlmIChjbGlfc2VzLnN0YXRlID09IFNFUlZJQ0VfQVVUSF9SRVFfU0VOVAorCQkJJiYgbGVuID09IFNTSF9TRVJWSUNFX1VTRVJBVVRIX0xFTgorCQkJJiYgc3RybmNtcChTU0hfU0VSVklDRV9VU0VSQVVUSCwgc2VydmljZW5hbWUsIGxlbikgPT0gMCkgeworCisJCWNsaV9zZXMuc3RhdGUgPSBTRVJWSUNFX0FVVEhfQUNDRVBUX1JDVkQ7CisJCW1fZnJlZShzZXJ2aWNlbmFtZSk7CisJCVRSQUNFKCgibGVhdmUgcmVjdl9tc2dfc2VydmljZV9hY2NlcHQ6IGRvbmUgc3NoLXVzZXJhdXRoIikpCisJCXJldHVybjsKKwl9CisKKwkvKiBzc2gtY29ubmVjdGlvbiAqLworCWlmIChjbGlfc2VzLnN0YXRlID09IFNFUlZJQ0VfQ09OTl9SRVFfU0VOVAorCQkJJiYgbGVuID09IFNTSF9TRVJWSUNFX0NPTk5FQ1RJT05fTEVOIAorCQkJJiYgc3RybmNtcChTU0hfU0VSVklDRV9DT05ORUNUSU9OLCBzZXJ2aWNlbmFtZSwgbGVuKSA9PSAwKSB7CisKKwkJaWYgKHNlcy5hdXRoc3RhdGUuYXV0aGRvbmUgIT0gMSkgeworCQkJZHJvcGJlYXJfZXhpdCgicmVxdWVzdCBmb3IgY29ubmVjdGlvbiBiZWZvcmUgYXV0aCIpOworCQl9CisKKwkJY2xpX3Nlcy5zdGF0ZSA9IFNFUlZJQ0VfQ09OTl9BQ0NFUFRfUkNWRDsKKwkJbV9mcmVlKHNlcnZpY2VuYW1lKTsKKwkJVFJBQ0UoKCJsZWF2ZSByZWN2X21zZ19zZXJ2aWNlX2FjY2VwdDogZG9uZSBzc2gtY29ubmVjdGlvbiIpKQorCQlyZXR1cm47CisJfQorCisJZHJvcGJlYXJfZXhpdCgidW5yZWNvZ25pc2VkIHNlcnZpY2UgYWNjZXB0Iik7Cit9CmRpZmYgLS1naXQgYS9jbGktc2Vzc2lvbi5jIGIvY2xpLXNlc3Npb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjAxODdmCi0tLSAvZGV2L251bGwKKysrIGIvY2xpLXNlc3Npb24uYwpAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIERyb3BiZWFyIFNTSAorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgTWlobmVhIFN0b2VuZXNjdQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKyNpbmNsdWRlICJrZXguaCIKKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJwYWNrZXQuaCIKKyNpbmNsdWRlICJ0Y3Bmd2QuaCIKKyNpbmNsdWRlICJjaGFubmVsLmgiCisjaW5jbHVkZSAicmFuZG9tLmgiCisjaW5jbHVkZSAic2VydmljZS5oIgorI2luY2x1ZGUgInJ1bm9wdHMuaCIKKyNpbmNsdWRlICJjaGFuc2Vzc2lvbi5oIgorCitzdGF0aWMgdm9pZCBjbGlfcmVtb3RlY2xvc2VkKCk7CitzdGF0aWMgdm9pZCBjbGlfc2Vzc2lvbmxvb3AoKTsKK3N0YXRpYyB2b2lkIGNsaV9zZXNzaW9uX2luaXQoKTsKK3N0YXRpYyB2b2lkIGNsaV9maW5pc2hlZCgpOworCitzdHJ1Y3QgY2xpZW50c2Vzc2lvbiBjbGlfc2VzOyAvKiBHTE9CQUwgKi8KKworLyogU29ydGVkIGluIGRlY3JlYXNpbmcgZnJlcXVlbmN5IHdpbGwgYmUgbW9yZSBlZmZpY2llbnQgLSBkYXRhIGFuZCB3aW5kb3cKKyAqIHNob3VsZCBiZSBmaXJzdCAqLworc3RhdGljIGNvbnN0IHBhY2tldHR5cGUgY2xpX3BhY2tldHR5cGVzW10gPSB7CisJLyogVFlQRSwgRlVOQ1RJT04gKi8KKwl7U1NIX01TR19DSEFOTkVMX0RBVEEsIHJlY3ZfbXNnX2NoYW5uZWxfZGF0YX0sCisJe1NTSF9NU0dfQ0hBTk5FTF9FWFRFTkRFRF9EQVRBLCByZWN2X21zZ19jaGFubmVsX2V4dGVuZGVkX2RhdGF9LAorCXtTU0hfTVNHX0NIQU5ORUxfV0lORE9XX0FESlVTVCwgcmVjdl9tc2dfY2hhbm5lbF93aW5kb3dfYWRqdXN0fSwKKwl7U1NIX01TR19VU0VSQVVUSF9GQUlMVVJFLCByZWN2X21zZ191c2VyYXV0aF9mYWlsdXJlfSwgLyogY2xpZW50ICovCisJe1NTSF9NU0dfVVNFUkFVVEhfU1VDQ0VTUywgcmVjdl9tc2dfdXNlcmF1dGhfc3VjY2Vzc30sIC8qIGNsaWVudCAqLworCXtTU0hfTVNHX0tFWElOSVQsIHJlY3ZfbXNnX2tleGluaXR9LAorCXtTU0hfTVNHX0tFWERIX1JFUExZLCByZWN2X21zZ19rZXhkaF9yZXBseX0sIC8qIGNsaWVudCAqLworCXtTU0hfTVNHX05FV0tFWVMsIHJlY3ZfbXNnX25ld2tleXN9LAorCXtTU0hfTVNHX1NFUlZJQ0VfQUNDRVBULCByZWN2X21zZ19zZXJ2aWNlX2FjY2VwdH0sIC8qIGNsaWVudCAqLworCXtTU0hfTVNHX0NIQU5ORUxfUkVRVUVTVCwgcmVjdl9tc2dfY2hhbm5lbF9yZXF1ZXN0fSwKKwl7U1NIX01TR19DSEFOTkVMX09QRU4sIHJlY3ZfbXNnX2NoYW5uZWxfb3Blbn0sCisJe1NTSF9NU0dfQ0hBTk5FTF9FT0YsIHJlY3ZfbXNnX2NoYW5uZWxfZW9mfSwKKwl7U1NIX01TR19DSEFOTkVMX0NMT1NFLCByZWN2X21zZ19jaGFubmVsX2Nsb3NlfSwKKwl7U1NIX01TR19DSEFOTkVMX09QRU5fQ09ORklSTUFUSU9OLCByZWN2X21zZ19jaGFubmVsX29wZW5fY29uZmlybWF0aW9ufSwKKwl7U1NIX01TR19DSEFOTkVMX09QRU5fRkFJTFVSRSwgcmVjdl9tc2dfY2hhbm5lbF9vcGVuX2ZhaWx1cmV9LAorCXtTU0hfTVNHX1VTRVJBVVRIX0JBTk5FUiwgcmVjdl9tc2dfdXNlcmF1dGhfYmFubmVyfSwgLyogY2xpZW50ICovCisJe1NTSF9NU0dfVVNFUkFVVEhfU1BFQ0lGSUNfNjAsIHJlY3ZfbXNnX3VzZXJhdXRoX3NwZWNpZmljXzYwfSwgLyogY2xpZW50ICovCisJezAsIDB9IC8qIEVuZCAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBDaGFuVHlwZSAqY2xpX2NoYW50eXBlc1tdID0geworI2lmZGVmIEVOQUJMRV9DTElfUkVNT1RFVENQRldECisJJmNsaV9jaGFuX3RjcHJlbW90ZSwKKyNlbmRpZgorCU5VTEwgLyogTnVsbCB0ZXJtaW5hdGlvbiAqLworfTsKKwordm9pZCBjbGlfc2Vzc2lvbihpbnQgc29jaywgY2hhciogcmVtb3RlaG9zdCkgeworCisJc2VlZHJhbmRvbSgpOworCisJY3J5cHRvX2luaXQoKTsKKworCWNvbW1vbl9zZXNzaW9uX2luaXQoc29jaywgcmVtb3RlaG9zdCk7CisKKwljaGFuaW5pdGlhbGlzZShjbGlfY2hhbnR5cGVzKTsKKworCS8qIFNldCB1cCBjbGlfc2VzIHZhcnMgKi8KKwljbGlfc2Vzc2lvbl9pbml0KCk7CisKKwkvKiBSZWFkeSB0byBnbyAqLworCXNlc3Npbml0ZG9uZSA9IDE7CisKKwkvKiBFeGNoYW5nZSBpZGVudGlmaWNhdGlvbiAqLworCXNlc3Npb25faWRlbnRpZmljYXRpb24oKTsKKworCXNlbmRfbXNnX2tleGluaXQoKTsKKworCXNlc3Npb25fbG9vcChjbGlfc2Vzc2lvbmxvb3ApOworCisJLyogTm90IHJlYWNoZWQgKi8KKworfQorCitzdGF0aWMgdm9pZCBjbGlfc2Vzc2lvbl9pbml0KCkgeworCisJY2xpX3Nlcy5zdGF0ZSA9IFNUQVRFX05PVEhJTkc7CisJY2xpX3Nlcy5rZXhfc3RhdGUgPSBLRVhfTk9USElORzsKKworCWNsaV9zZXMudHR5X3Jhd19tb2RlID0gMDsKKwljbGlfc2VzLndpbmNoYW5nZSA9IDA7CisKKwkvKiBXZSBzdG9yZSBzdGR7aW4sb3V0LGVycn0ncyBmbGFncywgc28gd2UgY2FuIHNldCB0aGVtIGJhY2sgb24gZXhpdAorCSAqIChvdGhlcndpc2UgYnVzeWJveCdzIGFzaCBpc24ndCBoYXBweSAqLworCWNsaV9zZXMuc3RkaW5jb3B5ID0gZHVwKFNURElOX0ZJTEVOTyk7CisJY2xpX3Nlcy5zdGRpbmZsYWdzID0gZmNudGwoU1RESU5fRklMRU5PLCBGX0dFVEZMLCAwKTsKKwljbGlfc2VzLnN0ZG91dGNvcHkgPSBkdXAoU1RET1VUX0ZJTEVOTyk7CisJY2xpX3Nlcy5zdGRvdXRmbGFncyA9IGZjbnRsKFNURE9VVF9GSUxFTk8sIEZfR0VURkwsIDApOworCWNsaV9zZXMuc3RkZXJyY29weSA9IGR1cChTVERFUlJfRklMRU5PKTsKKwljbGlfc2VzLnN0ZGVycmZsYWdzID0gZmNudGwoU1RERVJSX0ZJTEVOTywgRl9HRVRGTCwgMCk7CisKKwljbGlfc2VzLnJldHZhbCA9IEVYSVRfU1VDQ0VTUzsgLyogQXNzdW1lIGl0J3MgY2xlYW4gaWYgd2UgZG9uJ3QgZ2V0IGEKKwkJCQkJCQkJCSAgc3BlY2lmaWMgZXhpdCBzdGF0dXMgKi8KKworCS8qIEF1dGggKi8KKwljbGlfc2VzLmxhc3Rwcml2a2V5ID0gTlVMTDsKKwljbGlfc2VzLmxhc3RhdXRodHlwZSA9IDA7CisKKwkvKiBGb3IgcHJpbnRpbmcgInJlbW90ZSBob3N0IGNsb3NlZCIgZm9yIHRoZSB1c2VyICovCisJc2VzLnJlbW90ZWNsb3NlZCA9IGNsaV9yZW1vdGVjbG9zZWQ7CisJc2VzLmJ1Zl9tYXRjaF9hbGdvID0gY2xpX2J1Zl9tYXRjaF9hbGdvOworCisJLyogcGFja2V0IGhhbmRsZXJzICovCisJc2VzLnBhY2tldHR5cGVzID0gY2xpX3BhY2tldHR5cGVzOworCisJc2VzLmlzc2VydmVyID0gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBkcml2ZXMgdGhlIHByb2dyZXNzIG9mIHRoZSBzZXNzaW9uIC0gaXQgaW5pdGlhdGVzIEtFWCwKKyAqIHNlcnZpY2UsIHVzZXJhdXRoIGFuZCBjaGFubmVsIHJlcXVlc3RzICovCitzdGF0aWMgdm9pZCBjbGlfc2Vzc2lvbmxvb3AoKSB7CisKKwlUUkFDRSgoImVudGVyIGNsaV9zZXNzaW9ubG9vcCIpKQorCisJaWYgKHNlcy5sYXN0cGFja2V0ID09IFNTSF9NU0dfS0VYSU5JVCAmJiBjbGlfc2VzLmtleF9zdGF0ZSA9PSBLRVhfTk9USElORykgeworCQljbGlfc2VzLmtleF9zdGF0ZSA9IEtFWElOSVRfUkNWRDsKKwl9CisKKwlpZiAoY2xpX3Nlcy5rZXhfc3RhdGUgPT0gS0VYSU5JVF9SQ1ZEKSB7CisKKwkJLyogV2UgaW5pdGlhdGUgdGhlIEtFWERILiBJZiBESCB3YXNuJ3QgdGhlIGNvcnJlY3QgdHlwZSwgdGhlIEtFWElOSVQKKwkJICogbmVnb3RpYXRpb24gd291bGQgaGF2ZSBmYWlsZWQuICovCisJCXNlbmRfbXNnX2tleGRoX2luaXQoKTsKKwkJY2xpX3Nlcy5rZXhfc3RhdGUgPSBLRVhESF9JTklUX1NFTlQ7CisJCVRSQUNFKCgibGVhdmUgY2xpX3Nlc3Npb25sb29wOiBkb25lIHdpdGggS0VYSU5JVF9SQ1ZEIikpCisJCXJldHVybjsKKwl9CisKKwkvKiBBIEtFWCBoYXMgZmluaXNoZWQsIHNvIHdlIHNob3VsZCBnbyBiYWNrIHRvIG91ciBLRVhfTk9USElORyBzdGF0ZSAqLworCWlmIChjbGlfc2VzLmtleF9zdGF0ZSAhPSBLRVhfTk9USElORyAmJiBzZXMua2V4c3RhdGUucmVjdmtleGluaXQgPT0gMAorCQkJJiYgc2VzLmtleHN0YXRlLnNlbnRrZXhpbml0ID09IDApIHsKKwkJY2xpX3Nlcy5rZXhfc3RhdGUgPSBLRVhfTk9USElORzsKKwl9CisKKwkvKiBXZSBzaG91bGRuJ3QgZG8gYW55dGhpbmcgZWxzZSBpZiBhIEtFWCBpcyBpbiBwcm9ncmVzcyAqLworCWlmIChjbGlfc2VzLmtleF9zdGF0ZSAhPSBLRVhfTk9USElORykgeworCQlUUkFDRSgoImxlYXZlIGNsaV9zZXNzaW9ubG9vcDoga2V4X3N0YXRlICE9IEtFWF9OT1RISU5HIikpCisJCXJldHVybjsKKwl9CisKKwkvKiBXZSBzaG91bGQgZXhpdCBpZiB3ZSBoYXZlbid0IGRvbmVmaXJzdGtleDogd2Ugc2hvdWxkbid0IHJlYWNoIGhlcmUKKwkgKiBpbiBub3JtYWwgb3BlcmF0aW9uICovCisJaWYgKHNlcy5rZXhzdGF0ZS5kb25lZmlyc3RrZXggPT0gMCkgeworCQlUUkFDRSgoIlhYWCBYWFggbWlnaHQgYmUgYmFkISBsZWF2ZSBjbGlfc2Vzc2lvbmxvb3A6IGhhdmVuJ3QgZG9uZWZpcnN0a2V4IikpCisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGNsaV9zZXMuc3RhdGUpIHsKKworCQljYXNlIFNUQVRFX05PVEhJTkc6CisJCQkvKiBXZSd2ZSBnb3QgdGhlIHRyYW5zcG9ydCBsYXllciBzb3J0ZWQsIHdlIG5vdyBuZWVkIHRvIHJlcXVlc3QKKwkJCSAqIHVzZXJhdXRoICovCisJCQlzZW5kX21zZ19zZXJ2aWNlX3JlcXVlc3QoU1NIX1NFUlZJQ0VfVVNFUkFVVEgpOworCQkJY2xpX3Nlcy5zdGF0ZSA9IFNFUlZJQ0VfQVVUSF9SRVFfU0VOVDsKKwkJCVRSQUNFKCgibGVhdmUgY2xpX3Nlc3Npb25sb29wOiBzZW50IHVzZXJhdXRoIHNlcnZpY2UgcmVxIikpCisJCQlyZXR1cm47CisKKwkJLyogdXNlcmF1dGggY29kZSAqLworCQljYXNlIFNFUlZJQ0VfQVVUSF9BQ0NFUFRfUkNWRDoKKwkJCWNsaV9hdXRoX2dldG1ldGhvZHMoKTsKKwkJCWNsaV9zZXMuc3RhdGUgPSBVU0VSQVVUSF9SRVFfU0VOVDsKKwkJCVRSQUNFKCgibGVhdmUgY2xpX3Nlc3Npb25sb29wOiBzZW50IHVzZXJhdXRoIG1ldGhvZHMgcmVxIikpCisJCQlyZXR1cm47CisJCQkKKwkJY2FzZSBVU0VSQVVUSF9GQUlMX1JDVkQ6CisJCQljbGlfYXV0aF90cnkoKTsKKwkJCWNsaV9zZXMuc3RhdGUgPSBVU0VSQVVUSF9SRVFfU0VOVDsKKwkJCVRSQUNFKCgibGVhdmUgY2xpX3Nlc3Npb25sb29wOiBjbGlfYXV0aF90cnkiKSkKKwkJCXJldHVybjsKKworCQkJLyoKKwkJY2FzZSBVU0VSQVVUSF9TVUNDRVNTX1JDVkQ6CisJCQlzZW5kX21zZ19zZXJ2aWNlX3JlcXVlc3QoU1NIX1NFUlZJQ0VfQ09OTkVDVElPTik7CisJCQljbGlfc2VzLnN0YXRlID0gU0VSVklDRV9DT05OX1JFUV9TRU5UOworCQkJVFJBQ0UoKCJsZWF2ZSBjbGlfc2Vzc2lvbmxvb3A6IHNlbnQgc3NoLWNvbm5lY3Rpb24gc2VydmljZSByZXEiKSkKKwkJCXJldHVybjsKKworCQljYXNlIFNFUlZJQ0VfQ09OTl9BQ0NFUFRfUkNWRDoKKwkJCWNsaV9zZW5kX2NoYW5zZXNzX3JlcXVlc3QoKTsKKwkJCVRSQUNFKCgibGVhdmUgY2xpX3Nlc3Npb25sb29wOiBjbGlfc2VuZF9jaGFuc2Vzc19yZXF1ZXN0IikpCisJCQljbGlfc2VzLnN0YXRlID0gU0VTU0lPTl9SVU5OSU5HOworCQkJcmV0dXJuOworCQkJKi8KKworCQljYXNlIFVTRVJBVVRIX1NVQ0NFU1NfUkNWRDoKKworCQkJaWYgKGNsaV9vcHRzLmJhY2tncm91bmRlZCkgeworCQkJCWludCBkZXZudWxsOworCQkJCS8qIGtlZXBpbmcgc3RkaW4gb3BlbiBzdGVhbHMgaW5wdXQgZnJvbSB0aGUgdGVybWluYWwgYW5kCisJCQkJICAgaXMgY29uZnVzaW5nLCB0aG91Z2ggc3Rkb3V0L3N0ZGVyciBjb3VsZCBiZSB1c2VmdWwuICovCisJCQkJZGV2bnVsbCA9IG9wZW4oX1BBVEhfREVWTlVMTCwgT19SRE9OTFkpOworCQkJCWlmIChkZXZudWxsIDwgMCkgeworCQkJCQlkcm9wYmVhcl9leGl0KCJvcGVuaW5nIC9kZXYvbnVsbDogJWQgJXMiLAorCQkJCQkJCWVycm5vLCBzdHJlcnJvcihlcnJubykpOworCQkJCX0KKwkJCQlkdXAyKGRldm51bGwsIFNURElOX0ZJTEVOTyk7CisJCQkJaWYgKGRhZW1vbigwLCAxKSA8IDApIHsKKwkJCQkJZHJvcGJlYXJfZXhpdCgiQmFja2dyb3VuZGluZyBmYWlsZWQ6ICVkICVzIiwgCisJCQkJCQkJZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisJCQkJfQorCQkJfQorCQkJCisjaWZkZWYgRU5BQkxFX0NMSV9MT0NBTFRDUEZXRAorCQkJc2V0dXBfbG9jYWx0Y3AoKTsKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9DTElfUkVNT1RFVENQRldECisJCQlzZXR1cF9yZW1vdGV0Y3AoKTsKKyNlbmRpZgorCQkJaWYgKCFjbGlfb3B0cy5ub19jbWQpIHsKKwkJCQljbGlfc2VuZF9jaGFuc2Vzc19yZXF1ZXN0KCk7CisJCQl9CisJCQlUUkFDRSgoImxlYXZlIGNsaV9zZXNzaW9ubG9vcDogcnVubmluZyIpKQorCQkJY2xpX3Nlcy5zdGF0ZSA9IFNFU1NJT05fUlVOTklORzsKKwkJCXJldHVybjsKKworCQljYXNlIFNFU1NJT05fUlVOTklORzoKKwkJCWlmIChzZXMuY2hhbmNvdW50IDwgMSAmJiAhY2xpX29wdHMubm9fY21kKSB7CisJCQkJY2xpX2ZpbmlzaGVkKCk7CisJCQl9CisKKwkJCWlmIChjbGlfc2VzLndpbmNoYW5nZSkgeworCQkJCWNsaV9jaGFuc2Vzc193aW5jaGFuZ2UoKTsKKwkJCX0KKwkJCXJldHVybjsKKworCQkvKiBYWFggbW9yZSBoZXJlIG5lZWRlZCAqLworCisKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlUUkFDRSgoImxlYXZlIGNsaV9zZXNzaW9ubG9vcDogZmVsbCBvdXQiKSkKKworfQorCit2b2lkIGNsaV9zZXNzaW9uX2NsZWFudXAoKSB7CisKKwlpZiAoIXNlc3Npbml0ZG9uZSkgeworCQlyZXR1cm47CisJfQorCisJLyogU2V0IHN0ZHtpbixvdXQsZXJyfSBiYWNrIHRvIG5vbi1ibG9ja2luZyAtIGJ1c3lib3ggYXNoIGRpZXMgbmFzdGlseSBpZgorCSAqIHdlIGRvbid0IHJldmVydCB0aGUgZmxhZ3MgKi8KKwlmY250bChjbGlfc2VzLnN0ZGluY29weSwgRl9TRVRGTCwgY2xpX3Nlcy5zdGRpbmZsYWdzKTsKKwlmY250bChjbGlfc2VzLnN0ZG91dGNvcHksIEZfU0VURkwsIGNsaV9zZXMuc3Rkb3V0ZmxhZ3MpOworCWZjbnRsKGNsaV9zZXMuc3RkZXJyY29weSwgRl9TRVRGTCwgY2xpX3Nlcy5zdGRlcnJmbGFncyk7CisKKwljbGlfdHR5X2NsZWFudXAoKTsKKworfQorCitzdGF0aWMgdm9pZCBjbGlfZmluaXNoZWQoKSB7CisKKwljbGlfc2Vzc2lvbl9jbGVhbnVwKCk7CisJY29tbW9uX3Nlc3Npb25fY2xlYW51cCgpOworCWZwcmludGYoc3RkZXJyLCAiQ29ubmVjdGlvbiB0byAlc0AlczolcyBjbG9zZWQuXG4iLCBjbGlfb3B0cy51c2VybmFtZSwKKwkJCWNsaV9vcHRzLnJlbW90ZWhvc3QsIGNsaV9vcHRzLnJlbW90ZXBvcnQpOworCWV4aXQoY2xpX3Nlcy5yZXR2YWwpOworfQorCisKKy8qIGNhbGxlZCB3aGVuIHRoZSByZW1vdGUgc2lkZSBjbG9zZXMgdGhlIGNvbm5lY3Rpb24gKi8KK3N0YXRpYyB2b2lkIGNsaV9yZW1vdGVjbG9zZWQoKSB7CisKKwkvKiBYWFggVE9ETyBwZXJoYXBzIHByaW50IGEgZnJpZW5kbGllciBtZXNzYWdlIGlmIHdlIGdldCB0aGlzIGJ1dCBoYXZlCisJICogYWxyZWFkeSBzZW50L3JlY2VpdmVkIGRpc2Nvbm5lY3QgbWVzc2FnZShzKSA/Pz8gKi8KKwljbG9zZShzZXMuc29jayk7CisJc2VzLnNvY2sgPSAtMTsKKwlkcm9wYmVhcl9leGl0KCJyZW1vdGUgY2xvc2VkIHRoZSBjb25uZWN0aW9uIik7Cit9CisKKy8qIE9wZXJhdGVzIGluLXBsYWNlIHR1cm5pbmcgZGlydHkgKHVudHJ1c3RlZCBwb3RlbnRpYWxseSBjb250YWluaW5nIGNvbnRyb2wKKyAqIGNoYXJhY3RlcnMpIHRleHQgaW50byBjbGVhbiB0ZXh0LiAKKyAqIE5vdGU6IHRoaXMgaXMgc2FmZSBvbmx5IHdpdGggYXNjaWkgLSBvdGhlciBjaGFyc2V0cyBjb3VsZCBoYXZlIHByb2JsZW1zLiAqLwordm9pZCBjbGVhbnRleHQodW5zaWduZWQgY2hhciogZGlydHl0ZXh0KSB7CisKKwl1bnNpZ25lZCBpbnQgaSwgajsKKwl1bnNpZ25lZCBjaGFyIGM7CisKKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBkaXJ0eXRleHRbaV0gIT0gJ1wwJzsgaSsrKSB7CisKKwkJYyA9IGRpcnR5dGV4dFtpXTsKKwkJLyogV2UgY2FuIGlnbm9yZSAnXHIncyAqLworCQlpZiAoIChjID49ICcgJyAmJiBjIDw9ICd+JykgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1x0JykgeworCQkJZGlydHl0ZXh0W2pdID0gYzsKKwkJCWorKzsKKwkJfQorCX0KKwkvKiBOdWxsIHRlcm1pbmF0ZSAqLworCWRpcnR5dGV4dFtqXSA9ICdcMCc7Cit9CmRpZmYgLS1naXQgYS9jbGktdGNwZndkLmMgYi9jbGktdGNwZndkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiZmQ0ZAotLS0gL2Rldi9udWxsCisrKyBiL2NsaS10Y3Bmd2QuYwpAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqIERyb3BiZWFyIFNTSAorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgInRjcGZ3ZC5oIgorI2luY2x1ZGUgImNoYW5uZWwuaCIKKyNpbmNsdWRlICJydW5vcHRzLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgInNzaC5oIgorCisjaWZkZWYgRU5BQkxFX0NMSV9SRU1PVEVUQ1BGV0QKK3N0YXRpYyBpbnQgbmV3dGNwZm9yd2FyZGVkKHN0cnVjdCBDaGFubmVsICogY2hhbm5lbCk7CisKK2NvbnN0IHN0cnVjdCBDaGFuVHlwZSBjbGlfY2hhbl90Y3ByZW1vdGUgPSB7CisJMSwgLyogc2VwZmRzICovCisJImZvcndhcmRlZC10Y3BpcCIsCisJbmV3dGNwZm9yd2FyZGVkLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMCit9OworI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfQ0xJX0xPQ0FMVENQRldECitzdGF0aWMgaW50IGNsaV9sb2NhbHRjcCh1bnNpZ25lZCBpbnQgbGlzdGVucG9ydCwgY29uc3QgY2hhciogcmVtb3RlYWRkciwKKwkJdW5zaWduZWQgaW50IHJlbW90ZXBvcnQpOworc3RhdGljIGNvbnN0IHN0cnVjdCBDaGFuVHlwZSBjbGlfY2hhbl90Y3Bsb2NhbCA9IHsKKwkxLCAvKiBzZXBmZHMgKi8KKwkiZGlyZWN0LXRjcGlwIiwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMCit9OworI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfQ0xJX0xPQ0FMVENQRldECit2b2lkIHNldHVwX2xvY2FsdGNwKCkgeworCisJaW50IHJldDsKKworCVRSQUNFKCgiZW50ZXIgc2V0dXBfbG9jYWx0Y3AiKSkKKworCWlmIChjbGlfb3B0cy5sb2NhbGZ3ZHMgPT0gTlVMTCkgeworCQlUUkFDRSgoImNsaV9vcHRzLmxvY2FsZndkcyA9PSBOVUxMIikpCisJfQorCisJd2hpbGUgKGNsaV9vcHRzLmxvY2FsZndkcyAhPSBOVUxMKSB7CisJCXJldCA9IGNsaV9sb2NhbHRjcChjbGlfb3B0cy5sb2NhbGZ3ZHMtPmxpc3RlbnBvcnQsCisJCQkJY2xpX29wdHMubG9jYWxmd2RzLT5jb25uZWN0YWRkciwKKwkJCQljbGlfb3B0cy5sb2NhbGZ3ZHMtPmNvbm5lY3Rwb3J0KTsKKwkJaWYgKHJldCA9PSBEUk9QQkVBUl9GQUlMVVJFKSB7CisJCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJGYWlsZWQgbG9jYWwgcG9ydCBmb3J3YXJkICVkOiVzOiVkIiwKKwkJCQkJY2xpX29wdHMubG9jYWxmd2RzLT5saXN0ZW5wb3J0LAorCQkJCQljbGlfb3B0cy5sb2NhbGZ3ZHMtPmNvbm5lY3RhZGRyLAorCQkJCQljbGlfb3B0cy5sb2NhbGZ3ZHMtPmNvbm5lY3Rwb3J0KTsKKwkJfQorCisJCWNsaV9vcHRzLmxvY2FsZndkcyA9IGNsaV9vcHRzLmxvY2FsZndkcy0+bmV4dDsKKwl9CisJVFJBQ0UoKCJsZWF2ZSBzZXR1cF9sb2NhbHRjcCIpKQorCit9CisKK3N0YXRpYyBpbnQgY2xpX2xvY2FsdGNwKHVuc2lnbmVkIGludCBsaXN0ZW5wb3J0LCBjb25zdCBjaGFyKiByZW1vdGVhZGRyLAorCQl1bnNpZ25lZCBpbnQgcmVtb3RlcG9ydCkgeworCisJc3RydWN0IFRDUExpc3RlbmVyKiB0Y3BpbmZvID0gTlVMTDsKKwlpbnQgcmV0OworCisJVFJBQ0UoKCJlbnRlciBjbGlfbG9jYWx0Y3A6ICVkICVzICVkIiwgbGlzdGVucG9ydCwgcmVtb3RlYWRkciwKKwkJCQlyZW1vdGVwb3J0KSk7CisKKwl0Y3BpbmZvID0gKHN0cnVjdCBUQ1BMaXN0ZW5lciopbV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBUQ1BMaXN0ZW5lcikpOworCisJdGNwaW5mby0+c2VuZGFkZHIgPSBtX3N0cmR1cChyZW1vdGVhZGRyKTsKKwl0Y3BpbmZvLT5zZW5kcG9ydCA9IHJlbW90ZXBvcnQ7CisKKwlpZiAob3B0cy5saXN0ZW5fZndkX2FsbCkgeworCQl0Y3BpbmZvLT5saXN0ZW5hZGRyID0gbV9zdHJkdXAoIiIpOworCX0gZWxzZSB7CisJCXRjcGluZm8tPmxpc3RlbmFkZHIgPSBtX3N0cmR1cCgibG9jYWxob3N0Iik7CisJfQorCXRjcGluZm8tPmxpc3RlbnBvcnQgPSBsaXN0ZW5wb3J0OworCisJdGNwaW5mby0+Y2hhbnR5cGUgPSAmY2xpX2NoYW5fdGNwbG9jYWw7CisJdGNwaW5mby0+dGNwX3R5cGUgPSBkaXJlY3Q7CisKKwlyZXQgPSBsaXN0ZW5fdGNwZndkKHRjcGluZm8pOworCisJaWYgKHJldCA9PSBEUk9QQkVBUl9GQUlMVVJFKSB7CisJCW1fZnJlZSh0Y3BpbmZvKTsKKwl9CisJVFJBQ0UoKCJsZWF2ZSBjbGlfbG9jYWx0Y3A6ICVkIiwgcmV0KSkKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIEVOQUJMRV9DTElfTE9DQUxUQ1BGV0QgKi8KKworI2lmZGVmICBFTkFCTEVfQ0xJX1JFTU9URVRDUEZXRAorc3RhdGljIHZvaWQgc2VuZF9tc2dfZ2xvYmFsX3JlcXVlc3RfcmVtb3RldGNwKGludCBwb3J0KSB7CisKKwljaGFyKiBsaXN0ZW5zcGVjID0gTlVMTDsKKwlUUkFDRSgoImVudGVyIHNlbmRfbXNnX2dsb2JhbF9yZXF1ZXN0X3JlbW90ZXRjcCIpKQorCisJQ0hFQ0tDTEVBUlRPV1JJVEUoKTsKKwlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCBTU0hfTVNHX0dMT0JBTF9SRVFVRVNUKTsKKwlidWZfcHV0c3RyaW5nKHNlcy53cml0ZXBheWxvYWQsICJ0Y3BpcC1mb3J3YXJkIiwgMTMpOworCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIDApOworCWlmIChvcHRzLmxpc3Rlbl9md2RfYWxsKSB7CisJCWxpc3RlbnNwZWMgPSAiIjsKKwl9IGVsc2UgeworCQlsaXN0ZW5zcGVjID0gImxvY2FsaG9zdCI7CisJfQorCS8qIFRPRE86IElQdjY/ICovOworCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgbGlzdGVuc3BlYywgc3RybGVuKGxpc3RlbnNwZWMpKTsKKwlidWZfcHV0aW50KHNlcy53cml0ZXBheWxvYWQsIHBvcnQpOworCisJZW5jcnlwdF9wYWNrZXQoKTsKKworCVRSQUNFKCgibGVhdmUgc2VuZF9tc2dfZ2xvYmFsX3JlcXVlc3RfcmVtb3RldGNwIikpCit9CisKK3ZvaWQgc2V0dXBfcmVtb3RldGNwKCkgeworCisJc3RydWN0IFRDUEZ3ZExpc3QgKiBpdGVyID0gTlVMTDsKKworCVRSQUNFKCgiZW50ZXIgc2V0dXBfcmVtb3RldGNwIikpCisKKwlpZiAoY2xpX29wdHMucmVtb3RlZndkcyA9PSBOVUxMKSB7CisJCVRSQUNFKCgiY2xpX29wdHMucmVtb3RlZndkcyA9PSBOVUxMIikpCisJfQorCisJaXRlciA9IGNsaV9vcHRzLnJlbW90ZWZ3ZHM7CisKKwl3aGlsZSAoaXRlciAhPSBOVUxMKSB7CisJCXNlbmRfbXNnX2dsb2JhbF9yZXF1ZXN0X3JlbW90ZXRjcChpdGVyLT5saXN0ZW5wb3J0KTsKKwkJaXRlciA9IGl0ZXItPm5leHQ7CisJfQorCVRSQUNFKCgibGVhdmUgc2V0dXBfcmVtb3RldGNwIikpCit9CisKK3N0YXRpYyBpbnQgbmV3dGNwZm9yd2FyZGVkKHN0cnVjdCBDaGFubmVsICogY2hhbm5lbCkgeworCisJdW5zaWduZWQgaW50IG9yaWdwb3J0OworCXN0cnVjdCBUQ1BGd2RMaXN0ICogaXRlciA9IE5VTEw7CisJY2hhciBwb3J0c3RyaW5nW05JX01BWFNFUlZdOworCWludCBzb2NrOworCWludCBlcnIgPSBTU0hfT1BFTl9BRE1JTklTVFJBVElWRUxZX1BST0hJQklURUQ7CisKKwkvKiBXZSBkb24ndCBjYXJlIHdoYXQgYWRkcmVzcyB0aGV5IGNvbm5lY3RlZCB0byAqLworCWJ1Zl9lYXRzdHJpbmcoc2VzLnBheWxvYWQpOworCisJb3JpZ3BvcnQgPSBidWZfZ2V0aW50KHNlcy5wYXlsb2FkKTsKKworCS8qIEZpbmQgd2hpY2ggcG9ydCBjb3JyZXNwb25kcyAqLworCWl0ZXIgPSBjbGlfb3B0cy5yZW1vdGVmd2RzOworCisJd2hpbGUgKGl0ZXIgIT0gTlVMTCkgeworCQlpZiAob3JpZ3BvcnQgPT0gaXRlci0+bGlzdGVucG9ydCkgeworCQkJYnJlYWs7CisJCX0KKwkJaXRlciA9IGl0ZXItPm5leHQ7CisJfQorCisJaWYgKGl0ZXIgPT0gTlVMTCkgeworCQkvKiBXZSBkaWRuJ3QgcmVxdWVzdCBmb3J3YXJkaW5nIG9uIHRoYXQgcG9ydCAqLworCQlkcm9wYmVhcl9sb2coTE9HX0lORk8sICJTZXJ2ZXIgc2VuZCB1bnJlcXVlc3RlZCBwb3J0LCBmcm9tIHBvcnQgJWQiLCAKKwkJCQkJCQkJCQlvcmlncG9ydCk7CisJCWdvdG8gb3V0OworCX0KKwkKKwlzbnByaW50Zihwb3J0c3RyaW5nLCBzaXplb2YocG9ydHN0cmluZyksICIlZCIsIGl0ZXItPmNvbm5lY3Rwb3J0KTsKKwlzb2NrID0gY29ubmVjdF9yZW1vdGUoaXRlci0+Y29ubmVjdGFkZHIsIHBvcnRzdHJpbmcsIDEsIE5VTEwpOworCWlmIChzb2NrIDwgMCkgeworCQlUUkFDRSgoImxlYXZlIG5ld3RjcGRpcmVjdDogc29jayBmYWlsZWQiKSkKKwkJZXJyID0gU1NIX09QRU5fQ09OTkVDVF9GQUlMRUQ7CisJCWdvdG8gb3V0OworCX0KKworCXNlcy5tYXhmZCA9IE1BWChzZXMubWF4ZmQsIHNvY2spOworCisJLyogV2UgZG9uJ3Qgc2V0IHJlYWRmZCwgdGhhdCB3aWxsIGdldCBzZXQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24ncworCSAqIHByb2dyZXNzIHN1Y2NlZWRzICovCisJY2hhbm5lbC0+d3JpdGVmZCA9IHNvY2s7CisJY2hhbm5lbC0+aW5pdGNvbm4gPSAxOworCQorCWVyciA9IFNTSF9PUEVOX0lOX1BST0dSRVNTOworCitvdXQ6CisJVFJBQ0UoKCJsZWF2ZSBuZXd0Y3BkaXJlY3Q6IGVyciAlZCIsIGVycikpCisJcmV0dXJuIGVycjsKK30KKyNlbmRpZiAvKiBFTkFCTEVfQ0xJX1JFTU9URVRDUEZXRCAqLwpkaWZmIC0tZ2l0IGEvY29tbW9uLWFsZ28uYyBiL2NvbW1vbi1hbGdvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFhYzk2YQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi1hbGdvLmMKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBEcm9wYmVhciBTU0gKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IE1paG5lYSBTdG9lbmVzY3UKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaW5jbHVkZSAiYWxnby5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorCisvKiBUaGlzIGZpbGUgKGFsZ28uYykgb3JnYW5pc2VzIHRoZSBjaXBoZXJzIHdoaWNoIGNhbiBiZSB1c2VkLCBhbmQgaXMgdXNlZCB0bworICogZGVjaWRlIHdoaWNoIGNpcGhlcnMvaGFzaGVzL2NvbXByZXNzaW9uL3NpZ25pbmcgdG8gdXNlIGR1cmluZyBrZXkgZXhjaGFuZ2UqLworCisvKiBNYXBwaW5ncyBmb3IgY2lwaGVycywgcGFyYW1ldGVycyBhcmUKKyAgIHsmY2lwaGVyX2Rlc2MsIGtleXNpemUsIGJsb2Nrc2l6ZX0gKi8KKy8qIE5PVEU6IGlmIGtleXNpemUgPiAyKlNIQTFfSEFTSF9TSVpFLCBjb2RlIHN1Y2ggYXMgaGFzaGtleXMoKQorICAgbmVlZHMgcmV2aXNpdGluZyAqLworCisjaWZkZWYgRFJPUEJFQVJfQUVTMjU2X0NCQworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm9wYmVhcl9jaXBoZXIgZHJvcGJlYXJfYWVzMjU2ID0gCisJeyZhZXNfZGVzYywgMzIsIDE2fTsKKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX0FFUzEyOF9DQkMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJvcGJlYXJfY2lwaGVyIGRyb3BiZWFyX2FlczEyOCA9IAorCXsmYWVzX2Rlc2MsIDE2LCAxNn07CisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl9CTE9XRklTSF9DQkMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJvcGJlYXJfY2lwaGVyIGRyb3BiZWFyX2Jsb3dmaXNoID0gCisJeyZibG93ZmlzaF9kZXNjLCAxNiwgOH07CisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl9UV09GSVNIMjU2X0NCQworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm9wYmVhcl9jaXBoZXIgZHJvcGJlYXJfdHdvZmlzaDI1NiA9IAorCXsmdHdvZmlzaF9kZXNjLCAzMiwgMTZ9OworI2VuZGlmCisjaWZkZWYgRFJPUEJFQVJfVFdPRklTSDEyOF9DQkMKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJvcGJlYXJfY2lwaGVyIGRyb3BiZWFyX3R3b2Zpc2gxMjggPSAKKwl7JnR3b2Zpc2hfZGVzYywgMTYsIDE2fTsKKyNlbmRpZgorI2lmZGVmIERST1BCRUFSXzNERVNfQ0JDCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyb3BiZWFyX2NpcGhlciBkcm9wYmVhcl8zZGVzID0gCisJeyZkZXMzX2Rlc2MsIDI0LCA4fTsKKyNlbmRpZgorCisvKiB1c2VkIHRvIGluZGljYXRlIG5vIGVuY3J5cHRpb24sIGFzIGRlZmluZWQgaW4gcmZjMjQxMCAqLworY29uc3Qgc3RydWN0IGRyb3BiZWFyX2NpcGhlciBkcm9wYmVhcl9ub2NpcGhlciA9CisJe05VTEwsIDE2LCA4fTsgCisKKy8qIE1hcHBpbmcgb2Ygc3NoIGhhc2hlcyB0byBsaWJ0b21jcnlwdCBoYXNoZXMsIGluY2x1ZGluZyBrZXlzaXplIGV0Yy4KKyAgIHsmaGFzaF9kZXNjLCBrZXlzaXplLCBoYXNoc2l6ZX0gKi8KKworI2lmZGVmIERST1BCRUFSX1NIQTFfSE1BQworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm9wYmVhcl9oYXNoIGRyb3BiZWFyX3NoYTEgPSAKKwl7JnNoYTFfZGVzYywgMjAsIDIwfTsKKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX1NIQTFfOTZfSE1BQworc3RhdGljIGNvbnN0IHN0cnVjdCBkcm9wYmVhcl9oYXNoIGRyb3BiZWFyX3NoYTFfOTYgPSAKKwl7JnNoYTFfZGVzYywgMjAsIDEyfTsKKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX01ENV9ITUFDCitzdGF0aWMgY29uc3Qgc3RydWN0IGRyb3BiZWFyX2hhc2ggZHJvcGJlYXJfbWQ1ID0gCisJeyZtZDVfZGVzYywgMTYsIDE2fTsKKyNlbmRpZgorCitjb25zdCBzdHJ1Y3QgZHJvcGJlYXJfaGFzaCBkcm9wYmVhcl9ub2hhc2ggPQorCXtOVUxMLCAxNiwgMH07IC8qIHVzZWQgaW5pdGlhbGx5ICovCisJCisKKy8qIFRoZSBmb2xsb3dpbmcgbWFwIHNzaCBuYW1lcyB0byBpbnRlcm5hbCB2YWx1ZXMgKi8KKworYWxnb190eXBlIHNzaGNpcGhlcnNbXSA9IHsKKyNpZmRlZiBEUk9QQkVBUl9BRVMxMjhfQ0JDCisJeyJhZXMxMjgtY2JjIiwgMCwgKHZvaWQqKSZkcm9wYmVhcl9hZXMxMjgsIDF9LAorI2VuZGlmCisjaWZkZWYgRFJPUEJFQVJfM0RFU19DQkMKKwl7IjNkZXMtY2JjIiwgMCwgKHZvaWQqKSZkcm9wYmVhcl8zZGVzLCAxfSwKKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX0FFUzI1Nl9DQkMKKwl7ImFlczI1Ni1jYmMiLCAwLCAodm9pZCopJmRyb3BiZWFyX2FlczI1NiwgMX0sCisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl9UV09GSVNIMjU2X0NCQworCXsidHdvZmlzaDI1Ni1jYmMiLCAwLCAodm9pZCopJmRyb3BiZWFyX3R3b2Zpc2gyNTYsIDF9LAorCXsidHdvZmlzaC1jYmMiLCAwLCAodm9pZCopJmRyb3BiZWFyX3R3b2Zpc2gyNTYsIDF9LAorI2VuZGlmCisjaWZkZWYgRFJPUEJFQVJfVFdPRklTSDEyOF9DQkMKKwl7InR3b2Zpc2gxMjgtY2JjIiwgMCwgKHZvaWQqKSZkcm9wYmVhcl90d29maXNoMTI4LCAxfSwKKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX0JMT1dGSVNIX0NCQworCXsiYmxvd2Zpc2gtY2JjIiwgMCwgKHZvaWQqKSZkcm9wYmVhcl9ibG93ZmlzaCwgMX0sCisjZW5kaWYKKwl7TlVMTCwgMCwgTlVMTCwgMH0KK307CisKK2FsZ29fdHlwZSBzc2hoYXNoZXNbXSA9IHsKKyNpZmRlZiBEUk9QQkVBUl9TSEExXzk2X0hNQUMKKwl7ImhtYWMtc2hhMS05NiIsIDAsICh2b2lkKikmZHJvcGJlYXJfc2hhMV85NiwgMX0sCisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl9TSEExX0hNQUMKKwl7ImhtYWMtc2hhMSIsIDAsICh2b2lkKikmZHJvcGJlYXJfc2hhMSwgMX0sCisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl9NRDVfSE1BQworCXsiaG1hYy1tZDUiLCAwLCAodm9pZCopJmRyb3BiZWFyX21kNSwgMX0sCisjZW5kaWYKKwl7TlVMTCwgMCwgTlVMTCwgMH0KK307CisKK2FsZ29fdHlwZSBzc2hjb21wcmVzc1tdID0geworI2lmbmRlZiBESVNBQkxFX1pMSUIKKwl7InpsaWIiLCBEUk9QQkVBUl9DT01QX1pMSUIsIE5VTEwsIDF9LAorI2VuZGlmCisJeyJub25lIiwgRFJPUEJFQVJfQ09NUF9OT05FLCBOVUxMLCAxfSwKKwl7TlVMTCwgMCwgTlVMTCwgMH0KK307CisKK2FsZ29fdHlwZSBzc2hob3N0a2V5W10gPSB7CisjaWZkZWYgRFJPUEJFQVJfUlNBCisJeyJzc2gtcnNhIiwgRFJPUEJFQVJfU0lHTktFWV9SU0EsIE5VTEwsIDF9LAorI2VuZGlmCisjaWZkZWYgRFJPUEJFQVJfRFNTCisJeyJzc2gtZHNzIiwgRFJPUEJFQVJfU0lHTktFWV9EU1MsIE5VTEwsIDF9LAorI2VuZGlmCisJe05VTEwsIDAsIE5VTEwsIDB9Cit9OworCithbGdvX3R5cGUgc3Noa2V4W10gPSB7CisJeyJkaWZmaWUtaGVsbG1hbi1ncm91cDEtc2hhMSIsIERST1BCRUFSX0tFWF9ESF9HUk9VUDEsIE5VTEwsIDF9LAorCXtOVUxMLCAwLCBOVUxMLCAwfQorfTsKKworCisvKiBSZWdpc3RlciB0aGUgY29tcGlsZWQgaW4gY2lwaGVycy4KKyAqIFRoaXMgc2hvdWxkIGJlIHJ1biBiZWZvcmUgdXNpbmcgYW55IG9mIHRoZSBjaXBoZXJzL2hhc2hlcyAqLwordm9pZCBjcnlwdG9faW5pdCgpIHsKKworCWNvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgKnJlZ2NpcGhlcnNbXSA9IHsKKyNpZmRlZiBEUk9QQkVBUl9BRVNfQ0JDCisJCSZhZXNfZGVzYywKKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX0JMT1dGSVNIX0NCQworCQkmYmxvd2Zpc2hfZGVzYywKKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX1RXT0ZJU0hfQ0JDCisJCSZ0d29maXNoX2Rlc2MsCisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl8zREVTX0NCQworCQkmZGVzM19kZXNjLAorI2VuZGlmCisJCU5VTEwKKwl9OworCisJY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3IgKnJlZ2hhc2hlc1tdID0geworCQkvKiB3ZSBuZWVkIHNoYTEgZm9yIGhvc3RrZXkgc3R1ZmYgcmVnYXJkbGVzcyAqLworCQkmc2hhMV9kZXNjLAorI2lmZGVmIERST1BCRUFSX01ENV9ITUFDCisJCSZtZDVfZGVzYywKKyNlbmRpZgorCQlOVUxMCisJfTsJCisJaW50IGk7CisJCisJZm9yIChpID0gMDsgcmVnY2lwaGVyc1tpXSAhPSBOVUxMOyBpKyspIHsKKwkJaWYgKHJlZ2lzdGVyX2NpcGhlcihyZWdjaXBoZXJzW2ldKSA9PSAtMSkgeworCQkJZHJvcGJlYXJfZXhpdCgiZXJyb3IgcmVnaXN0ZXJpbmcgY3J5cHRvIik7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyByZWdoYXNoZXNbaV0gIT0gTlVMTDsgaSsrKSB7CisJCWlmIChyZWdpc3Rlcl9oYXNoKHJlZ2hhc2hlc1tpXSkgPT0gLTEpIHsKKwkJCWRyb3BiZWFyX2V4aXQoImVycm9yIHJlZ2lzdGVyaW5nIGNyeXB0byIpOworCQl9CisJfQorfQorCisvKiBhbGdvbGVuIHNwZWNpZmllcyB0aGUgbGVuZ3RoIG9mIGFsZ28sIGFsZ29zIGlzIG91ciBsb2NhbCBsaXN0IHRvIG1hdGNoCisgKiBhZ2FpbnN0LgorICogUmV0dXJucyBEUk9QQkVBUl9TVUNDRVNTIGlmIHdlIGhhdmUgYSBtYXRjaCBmb3IgYWxnbywgRFJPUEJFQVJfRkFJTFVSRQorICogb3RoZXJ3aXNlICovCitpbnQgaGF2ZV9hbGdvKGNoYXIqIGFsZ28sIHNpemVfdCBhbGdvbGVuLCBhbGdvX3R5cGUgYWxnb3NbXSkgeworCisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBhbGdvc1tpXS5uYW1lICE9IE5VTEw7IGkrKykgeworCQlpZiAoc3RybGVuKGFsZ29zW2ldLm5hbWUpID09IGFsZ29sZW4KKwkJCQkmJiAoc3RybmNtcChhbGdvc1tpXS5uYW1lLCBhbGdvLCBhbGdvbGVuKSA9PSAwKSkgeworCQkJcmV0dXJuIERST1BCRUFSX1NVQ0NFU1M7CisJCX0KKwl9CisKKwlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKK30KKworCisKKy8qIE91dHB1dCBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGFsZ29yaXRobXMgdG8gYSBidWZmZXIgKi8KK3ZvaWQgYnVmX3B1dF9hbGdvbGlzdChidWZmZXIgKiBidWYsIGFsZ29fdHlwZSBsb2NhbGFsZ29zW10pIHsKKworCXVuc2lnbmVkIGludCBpLCBsZW47CisJdW5zaWduZWQgaW50IGRvbmVmaXJzdCA9IDA7CisJYnVmZmVyICphbGdvbGlzdCA9IE5VTEw7CisKKwlhbGdvbGlzdCA9IGJ1Zl9uZXcoMTAwKTsKKwlmb3IgKGkgPSAwOyBsb2NhbGFsZ29zW2ldLm5hbWUgIT0gTlVMTDsgaSsrKSB7CisJCWlmIChsb2NhbGFsZ29zW2ldLnVzYWJsZSkgeworCQkJaWYgKGRvbmVmaXJzdCkKKwkJCQlidWZfcHV0Ynl0ZShhbGdvbGlzdCwgJywnKTsKKwkJCWRvbmVmaXJzdCA9IDE7CisJCQlsZW4gPSBzdHJsZW4obG9jYWxhbGdvc1tpXS5uYW1lKTsKKwkJCWJ1Zl9wdXRieXRlcyhhbGdvbGlzdCwgbG9jYWxhbGdvc1tpXS5uYW1lLCBsZW4pOworCQl9CisJfQorCWJ1Zl9wdXRzdHJpbmcoYnVmLCBhbGdvbGlzdC0+ZGF0YSwgYWxnb2xpc3QtPmxlbik7CisJYnVmX2ZyZWUoYWxnb2xpc3QpOworfQpkaWZmIC0tZ2l0IGEvY29tbW9uLWNoYW5uZWwuYyBiL2NvbW1vbi1jaGFubmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc3YTU3NQotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi1jaGFubmVsLmMKQEAgLTAsMCArMSwxMDMwIEBACisvKgorICogRHJvcGJlYXIgU1NICisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisvKiBIYW5kbGUgdGhlIG11bHRpcGxleGVkIGNoYW5uZWxzLCBzdWNoIGFzIHNlc3Npb25zLCB4MTEsIGFnZW50IGNvbm5lY3Rpb25zICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJwYWNrZXQuaCIKKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJjaXJjYnVmZmVyLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAiY2hhbm5lbC5oIgorI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgImxpc3RlbmVyLmgiCisKK3N0YXRpYyB2b2lkIHNlbmRfbXNnX2NoYW5uZWxfb3Blbl9mYWlsdXJlKHVuc2lnbmVkIGludCByZW1vdGVjaGFuLCBpbnQgcmVhc29uLAorCQljb25zdCB1bnNpZ25lZCBjaGFyICp0ZXh0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpsYW5nKTsKK3N0YXRpYyB2b2lkIHNlbmRfbXNnX2NoYW5uZWxfb3Blbl9jb25maXJtYXRpb24oc3RydWN0IENoYW5uZWwqIGNoYW5uZWwsCisJCXVuc2lnbmVkIGludCByZWN2d2luZG93LCAKKwkJdW5zaWduZWQgaW50IHJlY3ZtYXhwYWNrZXQpOworc3RhdGljIHZvaWQgd3JpdGVjaGFubmVsKHN0cnVjdCBDaGFubmVsKiBjaGFubmVsLCBpbnQgZmQsIGNpcmNidWZmZXIgKmNidWYpOworc3RhdGljIHZvaWQgc2VuZF9tc2dfY2hhbm5lbF93aW5kb3dfYWRqdXN0KHN0cnVjdCBDaGFubmVsICpjaGFubmVsLCAKKwkJdW5zaWduZWQgaW50IGluY3IpOworc3RhdGljIHZvaWQgc2VuZF9tc2dfY2hhbm5lbF9kYXRhKHN0cnVjdCBDaGFubmVsICpjaGFubmVsLCBpbnQgaXNleHRlbmRlZCk7CitzdGF0aWMgdm9pZCBzZW5kX21zZ19jaGFubmVsX2VvZihzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCk7CitzdGF0aWMgdm9pZCBzZW5kX21zZ19jaGFubmVsX2Nsb3NlKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKTsKK3N0YXRpYyB2b2lkIHJlbW92ZV9jaGFubmVsKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKTsKK3N0YXRpYyB2b2lkIGRlbGV0ZV9jaGFubmVsKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKTsKK3N0YXRpYyB2b2lkIGNoZWNrX2luX3Byb2dyZXNzKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd3JpdGVfcGVuZGluZyhzdHJ1Y3QgQ2hhbm5lbCAqIGNoYW5uZWwpOworc3RhdGljIHZvaWQgY2hlY2tfY2xvc2Uoc3RydWN0IENoYW5uZWwgKmNoYW5uZWwpOworc3RhdGljIHZvaWQgY2xvc2VfY2hhbl9mZChzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCwgaW50IGZkLCBpbnQgaG93KTsKKworI2RlZmluZSBGRF9VTklOSVQgKC0yKQorI2RlZmluZSBGRF9DTE9TRUQgKC0xKQorCisjZGVmaW5lIEVSUkZEX0lTX1JFQUQoY2hhbm5lbCkgKChjaGFubmVsKS0+ZXh0cmFidWYgPT0gTlVMTCkKKyNkZWZpbmUgRVJSRkRfSVNfV1JJVEUoY2hhbm5lbCkgKCFFUlJGRF9JU19SRUFEKGNoYW5uZWwpKQorCisvKiBJbml0aWFsaXNlIGFsbCB0aGUgY2hhbm5lbHMgKi8KK3ZvaWQgY2hhbmluaXRpYWxpc2UoY29uc3Qgc3RydWN0IENoYW5UeXBlICpjaGFudHlwZXNbXSkgeworCisJLyogbWF5IGFzIHdlbGwgY3JlYXRlIHNwYWNlIGZvciBhIHNpbmdsZSBjaGFubmVsICovCisJc2VzLmNoYW5uZWxzID0gKHN0cnVjdCBDaGFubmVsKiopbV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBDaGFubmVsKikpOworCXNlcy5jaGFuc2l6ZSA9IDE7CisJc2VzLmNoYW5uZWxzWzBdID0gTlVMTDsKKwlzZXMuY2hhbmNvdW50ID0gMDsKKworCXNlcy5jaGFudHlwZXMgPSBjaGFudHlwZXM7CisKKyNpZmRlZiBVU0lOR19MSVNURU5FUlMKKwlsaXN0ZW5lcnNfaW5pdGlhbGlzZSgpOworI2VuZGlmCisKK30KKworLyogQ2xlYW4gdXAgY2hhbm5lbHMsIGZyZWVpbmcgYWxsb2NhdGVkIG1lbW9yeSAqLwordm9pZCBjaGFuY2xlYW51cCgpIHsKKworCXVuc2lnbmVkIGludCBpOworCisJVFJBQ0UoKCJlbnRlciBjaGFuY2xlYW51cCIpKQorCWZvciAoaSA9IDA7IGkgPCBzZXMuY2hhbnNpemU7IGkrKykgeworCQlpZiAoc2VzLmNoYW5uZWxzW2ldICE9IE5VTEwpIHsKKwkJCVRSQUNFKCgiY2hhbm5lbCAlZCBjbG9zaW5nIiwgaSkpCisJCQlyZW1vdmVfY2hhbm5lbChzZXMuY2hhbm5lbHNbaV0pOworCQl9CisJfQorCW1fZnJlZShzZXMuY2hhbm5lbHMpOworCVRSQUNFKCgibGVhdmUgY2hhbmNsZWFudXAiKSkKK30KKworLyogQ3JlYXRlIGEgbmV3IGNoYW5uZWwgZW50cnksIHNlbmQgYSByZXBseSBjb25maXJtIG9yIGZhaWx1cmUgKi8KKy8qIElmIHJlbW90ZWNoYW4sIHRyYW5zd2luZG93IGFuZCB0cmFuc21heHBhY2tldCBhcmUgbm90IGtub3cgKGZvciBhIG5ldworICogb3V0Z29pbmcgY29ubmVjdGlvbiwgd2l0aCB0aGVtIHRvIGJlIGZpbGxlZCBvbiBjb25maXJtYXRpb24pLCB0aGV5IHNob3VsZAorICogYWxsIGJlIHNldCB0byAwICovCitzdHJ1Y3QgQ2hhbm5lbCogbmV3Y2hhbm5lbCh1bnNpZ25lZCBpbnQgcmVtb3RlY2hhbiwgCisJCWNvbnN0IHN0cnVjdCBDaGFuVHlwZSAqdHlwZSwgCisJCXVuc2lnbmVkIGludCB0cmFuc3dpbmRvdywgdW5zaWduZWQgaW50IHRyYW5zbWF4cGFja2V0KSB7CisKKwlzdHJ1Y3QgQ2hhbm5lbCAqIG5ld2NoYW47CisJdW5zaWduZWQgaW50IGksIGo7CisKKwlUUkFDRSgoImVudGVyIG5ld2NoYW5uZWwiKSkKKwkKKwkvKiBmaXJzdCBzZWUgaWYgd2UgY2FuIHVzZSBleGlzdGluZyBjaGFubmVscyAqLworCWZvciAoaSA9IDA7IGkgPCBzZXMuY2hhbnNpemU7IGkrKykgeworCQlpZiAoc2VzLmNoYW5uZWxzW2ldID09IE5VTEwpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogb3RoZXJ3aXNlIGV4dGVuZCB0aGUgbGlzdCAqLworCWlmIChpID09IHNlcy5jaGFuc2l6ZSkgeworCQlpZiAoc2VzLmNoYW5zaXplID49IE1BWF9DSEFOTkVMUykgeworCQkJVFJBQ0UoKCJsZWF2ZSBuZXdjaGFubmVsOiBtYXggY2hhbnMgcmVhY2hlZCIpKQorCQkJcmV0dXJuIE5VTEw7CisJCX0KKworCQkvKiBleHRlbmQgdGhlIGNoYW5uZWxzICovCisJCXNlcy5jaGFubmVscyA9IChzdHJ1Y3QgQ2hhbm5lbCoqKW1fcmVhbGxvYyhzZXMuY2hhbm5lbHMsCisJCQkJKHNlcy5jaGFuc2l6ZStDSEFOX0VYVEVORF9TSVpFKSpzaXplb2Yoc3RydWN0IENoYW5uZWwqKSk7CisKKwkJc2VzLmNoYW5zaXplICs9IENIQU5fRVhURU5EX1NJWkU7CisKKwkJLyogc2V0IHRoZSBuZXcgY2hhbm5lbHMgdG8gbnVsbCAqLworCQlmb3IgKGogPSBpOyBqIDwgc2VzLmNoYW5zaXplOyBqKyspIHsKKwkJCXNlcy5jaGFubmVsc1tqXSA9IE5VTEw7CisJCX0KKworCX0KKwkKKwluZXdjaGFuID0gKHN0cnVjdCBDaGFubmVsKiltX21hbGxvYyhzaXplb2Yoc3RydWN0IENoYW5uZWwpKTsKKwluZXdjaGFuLT50eXBlID0gdHlwZTsKKwluZXdjaGFuLT5pbmRleCA9IGk7CisJbmV3Y2hhbi0+c2VudF9jbG9zZSA9IG5ld2NoYW4tPnJlY3ZfY2xvc2UgPSAwOworCW5ld2NoYW4tPnNlbnRfZW9mID0gbmV3Y2hhbi0+cmVjdl9lb2YgPSAwOworCisJbmV3Y2hhbi0+cmVtb3RlY2hhbiA9IHJlbW90ZWNoYW47CisJbmV3Y2hhbi0+dHJhbnN3aW5kb3cgPSB0cmFuc3dpbmRvdzsKKwluZXdjaGFuLT50cmFuc21heHBhY2tldCA9IHRyYW5zbWF4cGFja2V0OworCQorCW5ld2NoYW4tPnR5cGVkYXRhID0gTlVMTDsKKwluZXdjaGFuLT53cml0ZWZkID0gRkRfVU5JTklUOworCW5ld2NoYW4tPnJlYWRmZCA9IEZEX1VOSU5JVDsKKwluZXdjaGFuLT5lcnJmZCA9IEZEX0NMT1NFRDsgLyogdGhpcyBpc24ndCBhbHdheXMgc2V0IHRvIHN0YXJ0IHdpdGggKi8KKwluZXdjaGFuLT5pbml0Y29ubiA9IDA7CisJbmV3Y2hhbi0+YXdhaXRfb3BlbiA9IDA7CisJbmV3Y2hhbi0+Zmx1c2hpbmcgPSAwOworCisJbmV3Y2hhbi0+d3JpdGVidWYgPSBjYnVmX25ldyhSRUNWX01BWFdJTkRPVyk7CisJbmV3Y2hhbi0+ZXh0cmFidWYgPSBOVUxMOyAvKiBUaGUgdXNlciBjb2RlIGNhbiBzZXQgaXQgdXAgKi8KKwluZXdjaGFuLT5yZWN2d2luZG93ID0gUkVDVl9NQVhXSU5ET1c7CisJbmV3Y2hhbi0+cmVjdmRvbmVsZW4gPSAwOworCW5ld2NoYW4tPnJlY3ZtYXhwYWNrZXQgPSBSRUNWX01BWFBBQ0tFVDsKKworCXNlcy5jaGFubmVsc1tpXSA9IG5ld2NoYW47CisJc2VzLmNoYW5jb3VudCsrOworCisJVFJBQ0UoKCJsZWF2ZSBuZXdjaGFubmVsIikpCisKKwlyZXR1cm4gbmV3Y2hhbjsKK30KKworLyogUmV0dXJucyB0aGUgY2hhbm5lbCBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byB0aGUgY2hhbm5lbCBpbiB0aGUgY3VycmVudAorICogZGF0YSBwYWNrZXQgKHNlcy5wYXlsb2FkIG11c3QgYmUgcG9zaXRpb25lZCBhcHByb3ByaWF0ZWx5KS4KKyAqIEEgdmFsaWQgY2hhbm5lbCBpcyBhbHdheXMgcmV0dXJucywgaXQgd2lsbCBmYWlsIGZhdGFsbHkgd2l0aCBhbiB1bmtub3duCisgKiBjaGFubmVsICovCitzdGF0aWMgc3RydWN0IENoYW5uZWwqIGdldGNoYW5uZWxfbXNnKGNvbnN0IGNoYXIqIGtpbmQpIHsKKworCXVuc2lnbmVkIGludCBjaGFuOworCisJY2hhbiA9IGJ1Zl9nZXRpbnQoc2VzLnBheWxvYWQpOworCWlmIChjaGFuID49IHNlcy5jaGFuc2l6ZSB8fCBzZXMuY2hhbm5lbHNbY2hhbl0gPT0gTlVMTCkgeworCQlpZiAoa2luZCkgeworCQkJZHJvcGJlYXJfZXhpdCgiJXMgZm9yIHVua25vd24gY2hhbm5lbCAlZCIsIGtpbmQsIGNoYW4pOworCQl9IGVsc2UgeworCQkJZHJvcGJlYXJfZXhpdCgiVW5rbm93biBjaGFubmVsICVkIiwgY2hhbik7CisJCX0KKwl9CisJcmV0dXJuIHNlcy5jaGFubmVsc1tjaGFuXTsKK30KKworc3RydWN0IENoYW5uZWwqIGdldGNoYW5uZWwoKSB7CisJcmV0dXJuIGdldGNoYW5uZWxfbXNnKE5VTEwpOworfQorCisvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGNoYW5uZWxzLCBwZXJmb3JtaW5nIElPIGlmIGF2YWlsYWJsZSAqLwordm9pZCBjaGFubmVsaW8oZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzKSB7CisKKwlzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIGZvcmVhY2ggY2hhbm5lbCAqLworCWZvciAoaSA9IDA7IGkgPCBzZXMuY2hhbnNpemU7IGkrKykgeworCisJCWNoYW5uZWwgPSBzZXMuY2hhbm5lbHNbaV07CisJCWlmIChjaGFubmVsID09IE5VTEwpIHsKKwkJCS8qIG9ubHkgcHJvY2VzcyBpbi11c2UgY2hhbm5lbHMgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogcmVhZCBkYXRhIGFuZCBzZW5kIGl0IG92ZXIgdGhlIHdpcmUgKi8KKwkJaWYgKGNoYW5uZWwtPnJlYWRmZCA+PSAwICYmIEZEX0lTU0VUKGNoYW5uZWwtPnJlYWRmZCwgcmVhZGZkcykpIHsKKwkJCVRSQUNFKCgic2VuZCBub3JtYWwgcmVhZGZkIikpCisJCQlzZW5kX21zZ19jaGFubmVsX2RhdGEoY2hhbm5lbCwgMCk7CisJCX0KKworCQkvKiByZWFkIHN0ZGVyciBkYXRhIGFuZCBzZW5kIGl0IG92ZXIgdGhlIHdpcmUgKi8KKwkJaWYgKEVSUkZEX0lTX1JFQUQoY2hhbm5lbCkgJiYgY2hhbm5lbC0+ZXJyZmQgPj0gMCAKKwkJCSYmIEZEX0lTU0VUKGNoYW5uZWwtPmVycmZkLCByZWFkZmRzKSkgeworCQkJCVRSQUNFKCgic2VuZCBub3JtYWwgZXJyZmQiKSkKKwkJCQlzZW5kX21zZ19jaGFubmVsX2RhdGEoY2hhbm5lbCwgMSk7CisJCX0KKworCQkvKiB3cml0ZSB0byBwcm9ncmFtL3BpcGUgc3RkaW4gKi8KKwkJaWYgKGNoYW5uZWwtPndyaXRlZmQgPj0gMCAmJiBGRF9JU1NFVChjaGFubmVsLT53cml0ZWZkLCB3cml0ZWZkcykpIHsKKwkJCWlmIChjaGFubmVsLT5pbml0Y29ubikgeworCQkJCS8qIFhYWCBzaG91bGQgdGhpcyBnbyBzb21ld2hlcmUgY2xlYW5lcj8gKi8KKwkJCQljaGVja19pbl9wcm9ncmVzcyhjaGFubmVsKTsKKwkJCQljb250aW51ZTsgLyogSW1wb3J0YW50IG5vdCB0byB1c2UgdGhlIGNoYW5uZWwgYWZ0ZXIKKwkJCQkJCQkgY2hlY2tfaW5fcHJvZ3Jlc3MoKSwgYXMgaXQgbWF5IGJlIE5VTEwgKi8KKwkJCX0KKwkJCXdyaXRlY2hhbm5lbChjaGFubmVsLCBjaGFubmVsLT53cml0ZWZkLCBjaGFubmVsLT53cml0ZWJ1Zik7CisJCX0KKwkJCisJCS8qIHN0ZGVyciBmb3IgY2xpZW50IG1vZGUgKi8KKwkJaWYgKEVSUkZEX0lTX1dSSVRFKGNoYW5uZWwpCisJCQkJJiYgY2hhbm5lbC0+ZXJyZmQgPj0gMCAmJiBGRF9JU1NFVChjaGFubmVsLT5lcnJmZCwgd3JpdGVmZHMpKSB7CisJCQl3cml0ZWNoYW5uZWwoY2hhbm5lbCwgY2hhbm5lbC0+ZXJyZmQsIGNoYW5uZWwtPmV4dHJhYnVmKTsKKwkJfQorCQorCQkvKiBoYW5kbGUgYW55IGNoYW5uZWwgY2xvc2luZyBldGMgKi8KKwkJY2hlY2tfY2xvc2UoY2hhbm5lbCk7CisKKwl9CisKKwkvKiBMaXN0ZW5lcnMgc3VjaCBhcyBUQ1AsIFgxMSwgYWdlbnQtYXV0aCAqLworI2lmZGVmIFVTSU5HX0xJU1RFTkVSUworCWhhbmRsZV9saXN0ZW5lcnMocmVhZGZkcyk7CisjZW5kaWYKK30KKworCisvKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgZGF0YSByZW1haW5pbmcgdG8gYmUgd3JpdHRlbiB0byBzdGRpbiBvcgorICogc3RkZXJyIG9mIGEgY2hhbm5lbCdzIGVuZHBvaW50LiAqLworc3RhdGljIHVuc2lnbmVkIGludCB3cml0ZV9wZW5kaW5nKHN0cnVjdCBDaGFubmVsICogY2hhbm5lbCkgeworCisJaWYgKGNoYW5uZWwtPndyaXRlZmQgPj0gMCAmJiBjYnVmX2dldHVzZWQoY2hhbm5lbC0+d3JpdGVidWYpID4gMCkgeworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKGNoYW5uZWwtPmVycmZkID49IDAgJiYgY2hhbm5lbC0+ZXh0cmFidWYgJiYgCisJCQljYnVmX2dldHVzZWQoY2hhbm5lbC0+ZXh0cmFidWYpID4gMCkgeworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworLyogRU9GL2Nsb3NlIGhhbmRsaW5nICovCitzdGF0aWMgdm9pZCBjaGVja19jbG9zZShzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCkgeworCisJVFJBQ0UoKCJjaGVja19jbG9zZTogd3JpdGVmZCAlZCwgcmVhZGZkICVkLCBlcnJmZCAlZCwgc2VudF9jbG9zZSAlZCwgcmVjdl9jbG9zZSAlZCIsCisJCQkJY2hhbm5lbC0+d3JpdGVmZCwgY2hhbm5lbC0+cmVhZGZkLAorCQkJCWNoYW5uZWwtPmVycmZkLCBjaGFubmVsLT5zZW50X2Nsb3NlLCBjaGFubmVsLT5yZWN2X2Nsb3NlKSkKKwlUUkFDRSgoIndyaXRlYnVmIHNpemUgJWQgZXh0cmFidWYgc2l6ZSAlZCIsCisJCQkJY2J1Zl9nZXR1c2VkKGNoYW5uZWwtPndyaXRlYnVmKSwKKwkJCQljaGFubmVsLT5leHRyYWJ1ZiA/IGNidWZfZ2V0dXNlZChjaGFubmVsLT5leHRyYWJ1ZikgOiAwKSkKKworCWlmICghY2hhbm5lbC0+Zmx1c2hpbmcgJiYgY2hhbm5lbC0+dHlwZS0+Y2hlY2tfY2xvc2UKKwkJJiYgY2hhbm5lbC0+dHlwZS0+Y2hlY2tfY2xvc2UoY2hhbm5lbCkpCisJeworCQljaGFubmVsLT5mbHVzaGluZyA9IDE7CisJfQorCisJaWYgKGNoYW5uZWwtPnJlY3ZfY2xvc2UgJiYgIXdyaXRlX3BlbmRpbmcoY2hhbm5lbCkpIHsKKwkJaWYgKCFjaGFubmVsLT5zZW50X2Nsb3NlKSB7CisJCQlUUkFDRSgoIlNlbmRpbmcgTVNHX0NIQU5ORUxfQ0xPU0UgaW4gcmVzcG9uc2UgdG8gc2FtZS4iKSkKKwkJCXNlbmRfbXNnX2NoYW5uZWxfY2xvc2UoY2hhbm5lbCk7CisJCX0KKwkJcmVtb3ZlX2NoYW5uZWwoY2hhbm5lbCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoY2hhbm5lbC0+cmVjdl9lb2YgJiYgIXdyaXRlX3BlbmRpbmcoY2hhbm5lbCkpIHsKKwkJY2xvc2VfY2hhbl9mZChjaGFubmVsLCBjaGFubmVsLT53cml0ZWZkLCBTSFVUX1dSKTsKKwl9CisKKwkvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciBmbHVzaGluZyByZWFkIGRhdGEgYWZ0ZXIgYW4gZXhpdC4gV2UKKwkgICByZWFkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgc2VsZWN0IEZEIHdhcyBzZXQsCisJICAgYW5kIGlmIHRoZXJlIGlzbid0IGRhdGEgYXZhaWxhYmxlLCB0aGUgY2hhbm5lbCB3aWxsIGdldCBjbG9zZWQuICovCisJaWYgKGNoYW5uZWwtPmZsdXNoaW5nKSB7CisJCVRSQUNFKCgibWlnaHQgc2VuZCBkYXRhLCBmbHVzaGluZyIpKQorCQlpZiAoY2hhbm5lbC0+cmVhZGZkID49IDAgJiYgY2hhbm5lbC0+dHJhbnN3aW5kb3cgPiAwKSB7CisJCQlUUkFDRSgoInNlbmQgZGF0YSByZWFkZmQiKSkKKwkJCXNlbmRfbXNnX2NoYW5uZWxfZGF0YShjaGFubmVsLCAwKTsKKwkJfQorCQlpZiAoRVJSRkRfSVNfUkVBRChjaGFubmVsKSAmJiBjaGFubmVsLT5lcnJmZCA+PSAwIAorCQkJJiYgY2hhbm5lbC0+dHJhbnN3aW5kb3cgPiAwKSB7CisJCQlUUkFDRSgoInNlbmQgZGF0YSBlcnJmZCIpKQorCQkJc2VuZF9tc2dfY2hhbm5lbF9kYXRhKGNoYW5uZWwsIDEpOworCQl9CisJfQorCisJLyogSWYgd2UncmUgbm90IGdvaW5nIHRvIHNlbmQgYW55IG1vcmUgZGF0YSwgc2VuZCBFT0YgKi8KKwlpZiAoIWNoYW5uZWwtPnNlbnRfZW9mCisJCQkmJiBjaGFubmVsLT5yZWFkZmQgPT0gRkRfQ0xPU0VEIAorCQkJJiYgKEVSUkZEX0lTX1dSSVRFKGNoYW5uZWwpIHx8IGNoYW5uZWwtPmVycmZkID09IEZEX0NMT1NFRCkpIHsKKwkJc2VuZF9tc2dfY2hhbm5lbF9lb2YoY2hhbm5lbCk7CisJfQorCisJLyogQW5kIGlmIHdlIGNhbid0IHJlY2VpdmUgYW55IG1vcmUgZGF0YSBmcm9tIHRoZW0gZWl0aGVyLCBjbG9zZSB1cCAqLworCWlmICghY2hhbm5lbC0+c2VudF9jbG9zZQorCQkJJiYgY2hhbm5lbC0+cmVhZGZkID09IEZEX0NMT1NFRAorCQkJJiYgKEVSUkZEX0lTX1dSSVRFKGNoYW5uZWwpIHx8IGNoYW5uZWwtPmVycmZkID09IEZEX0NMT1NFRCkKKwkJCSYmICF3cml0ZV9wZW5kaW5nKGNoYW5uZWwpKSB7CisJCVRSQUNFKCgic2VuZGluZyBjbG9zZSwgcmVhZGZkIGlzIGNsb3NlZCIpKQorCQlzZW5kX21zZ19jaGFubmVsX2Nsb3NlKGNoYW5uZWwpOworCX0KK30KKworLyogQ2hlY2sgd2hldGhlciBhIGRlZmVycmVkIChFSU5QUk9HUkVTUykgY29ubmVjdCgpIHdhcyBzdWNjZXNzZnVsLCBhbmQKKyAqIGlmIHNvLCBzZXQgdXAgdGhlIGNoYW5uZWwgcHJvcGVybHkuIE90aGVyd2lzZSwgdGhlIGNoYW5uZWwgaXMgY2xlYW5lZCB1cCwgc28KKyAqIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSBjaGFubmVsIHJlZmVyZW5jZSBpc24ndCB1c2VkIGFmdGVyIGEgY2FsbCB0byB0aGlzCisgKiBmdW5jdGlvbiAqLworc3RhdGljIHZvaWQgY2hlY2tfaW5fcHJvZ3Jlc3Moc3RydWN0IENoYW5uZWwgKmNoYW5uZWwpIHsKKworCWludCB2YWw7CisJc29ja2xlbl90IHZhbGxlbiA9IHNpemVvZih2YWwpOworCisJVFJBQ0UoKCJlbnRlciBjaGVja19pbl9wcm9ncmVzcyIpKQorCisJaWYgKGdldHNvY2tvcHQoY2hhbm5lbC0+d3JpdGVmZCwgU09MX1NPQ0tFVCwgU09fRVJST1IsICZ2YWwsICZ2YWxsZW4pCisJCQl8fCB2YWwgIT0gMCkgeworCQlzZW5kX21zZ19jaGFubmVsX29wZW5fZmFpbHVyZShjaGFubmVsLT5yZW1vdGVjaGFuLAorCQkJCVNTSF9PUEVOX0NPTk5FQ1RfRkFJTEVELCAiIiwgIiIpOworCQljbG9zZShjaGFubmVsLT53cml0ZWZkKTsKKwkJZGVsZXRlX2NoYW5uZWwoY2hhbm5lbCk7CisJCVRSQUNFKCgibGVhdmUgY2hlY2tfaW5fcHJvZ3Jlc3M6IGZhaWwiKSkKKwl9IGVsc2UgeworCQlzZW5kX21zZ19jaGFubmVsX29wZW5fY29uZmlybWF0aW9uKGNoYW5uZWwsIGNoYW5uZWwtPnJlY3Z3aW5kb3csCisJCQkJY2hhbm5lbC0+cmVjdm1heHBhY2tldCk7CisJCWNoYW5uZWwtPnJlYWRmZCA9IGNoYW5uZWwtPndyaXRlZmQ7CisJCWNoYW5uZWwtPmluaXRjb25uID0gMDsKKwkJVFJBQ0UoKCJsZWF2ZSBjaGVja19pbl9wcm9ncmVzczogc3VjY2VzcyIpKQorCX0KK30KKworCisvKiBTZW5kIHRoZSBjbG9zZSBtZXNzYWdlIGFuZCBzZXQgdGhlIGNoYW5uZWwgYXMgY2xvc2VkICovCitzdGF0aWMgdm9pZCBzZW5kX21zZ19jaGFubmVsX2Nsb3NlKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKSB7CisKKwlUUkFDRSgoImVudGVyIHNlbmRfbXNnX2NoYW5uZWxfY2xvc2UiKSkKKwlpZiAoY2hhbm5lbC0+dHlwZS0+Y2xvc2VoYW5kbGVyKSB7CisJCWNoYW5uZWwtPnR5cGUtPmNsb3NlaGFuZGxlcihjaGFubmVsKTsKKwl9CisJCisJQ0hFQ0tDTEVBUlRPV1JJVEUoKTsKKworCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIFNTSF9NU0dfQ0hBTk5FTF9DTE9TRSk7CisJYnVmX3B1dGludChzZXMud3JpdGVwYXlsb2FkLCBjaGFubmVsLT5yZW1vdGVjaGFuKTsKKworCWVuY3J5cHRfcGFja2V0KCk7CisKKwljaGFubmVsLT5zZW50X2VvZiA9IDE7CisJY2hhbm5lbC0+c2VudF9jbG9zZSA9IDE7CisJY2xvc2VfY2hhbl9mZChjaGFubmVsLCBjaGFubmVsLT5yZWFkZmQsIFNIVVRfUkQpOworCWNsb3NlX2NoYW5fZmQoY2hhbm5lbCwgY2hhbm5lbC0+ZXJyZmQsIFNIVVRfUkRXUik7CisJY2xvc2VfY2hhbl9mZChjaGFubmVsLCBjaGFubmVsLT53cml0ZWZkLCBTSFVUX1dSKTsKKwlUUkFDRSgoImxlYXZlIHNlbmRfbXNnX2NoYW5uZWxfY2xvc2UiKSkKK30KKworLyogY2FsbCB0aGlzIHdoZW4gdHJhbnMvZW9mIGNoYW5uZWxzIGFyZSBjbG9zZWQgKi8KK3N0YXRpYyB2b2lkIHNlbmRfbXNnX2NoYW5uZWxfZW9mKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKSB7CisKKwlUUkFDRSgoImVudGVyIHNlbmRfbXNnX2NoYW5uZWxfZW9mIikpCisJQ0hFQ0tDTEVBUlRPV1JJVEUoKTsKKworCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIFNTSF9NU0dfQ0hBTk5FTF9FT0YpOworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgY2hhbm5lbC0+cmVtb3RlY2hhbik7CisKKwllbmNyeXB0X3BhY2tldCgpOworCisJY2hhbm5lbC0+c2VudF9lb2YgPSAxOworCisJVFJBQ0UoKCJsZWF2ZSBzZW5kX21zZ19jaGFubmVsX2VvZiIpKQorfQorCisvKiBDYWxsZWQgdG8gd3JpdGUgZGF0YSBvdXQgdG8gdGhlIGxvY2FsIHNpZGUgb2YgdGhlIGNoYW5uZWwuIAorICogT25seSBjYWxsZWQgd2hlbiB3ZSBrbm93IHdlIGNhbiB3cml0ZSB0byBhIGNoYW5uZWwsIHdyaXRlcyBhcyBtdWNoIGFzCisgKiBwb3NzaWJsZSAqLworc3RhdGljIHZvaWQgd3JpdGVjaGFubmVsKHN0cnVjdCBDaGFubmVsKiBjaGFubmVsLCBpbnQgZmQsIGNpcmNidWZmZXIgKmNidWYpIHsKKworCWludCBsZW4sIG1heGxlbjsKKworCVRSQUNFKCgiZW50ZXIgd3JpdGVjaGFubmVsIGZkICVkIiwgZmQpKQorCisJbWF4bGVuID0gY2J1Zl9yZWFkbGVuKGNidWYpOworCisJLyogV3JpdGUgdGhlIGRhdGEgb3V0ICovCisJbGVuID0gd3JpdGUoZmQsIGNidWZfcmVhZHB0cihjYnVmLCBtYXhsZW4pLCBtYXhsZW4pOworCWlmIChsZW4gPD0gMCkgeworCQlUUkFDRSgoImVycm5vICVkIGxlbiAlZCIsIGVycm5vLCBsZW4pKQorCQlpZiAobGVuIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworCQkJY2xvc2VfY2hhbl9mZChjaGFubmVsLCBmZCwgU0hVVF9XUik7CisJCX0KKwkJVFJBQ0UoKCJsZWF2ZSB3cml0ZWNoYW5uZWw6IGxlbiA8PSAwIikpCisJCXJldHVybjsKKwl9CisJVFJBQ0UoKCJ3cml0ZWNoYW5uZWwgd3JvdGUgJWQiLCBsZW4pKQorCisJY2J1Zl9pbmNycmVhZChjYnVmLCBsZW4pOworCWNoYW5uZWwtPnJlY3Zkb25lbGVuICs9IGxlbjsKKworCS8qIFdpbmRvdyBhZGp1c3QgaGFuZGxpbmcgKi8KKwlpZiAoY2hhbm5lbC0+cmVjdmRvbmVsZW4gPj0gUkVDVl9XSU5ET1dFWFRFTkQpIHsKKwkJLyogU2V0IGl0IGJhY2sgdG8gbWF4IHdpbmRvdyAqLworCQlzZW5kX21zZ19jaGFubmVsX3dpbmRvd19hZGp1c3QoY2hhbm5lbCwgY2hhbm5lbC0+cmVjdmRvbmVsZW4pOworCQljaGFubmVsLT5yZWN2d2luZG93ICs9IGNoYW5uZWwtPnJlY3Zkb25lbGVuOworCQljaGFubmVsLT5yZWN2ZG9uZWxlbiA9IDA7CisJfQorCisJZHJvcGJlYXJfYXNzZXJ0KGNoYW5uZWwtPnJlY3Z3aW5kb3cgPD0gUkVDVl9NQVhXSU5ET1cpOworCWRyb3BiZWFyX2Fzc2VydChjaGFubmVsLT5yZWN2d2luZG93IDw9IGNidWZfZ2V0YXZhaWwoY2hhbm5lbC0+d3JpdGVidWYpKTsKKwlkcm9wYmVhcl9hc3NlcnQoY2hhbm5lbC0+ZXh0cmFidWYgPT0gTlVMTCB8fAorCQkJY2hhbm5lbC0+cmVjdndpbmRvdyA8PSBjYnVmX2dldGF2YWlsKGNoYW5uZWwtPmV4dHJhYnVmKSk7CisJCisJVFJBQ0UoKCJsZWF2ZSB3cml0ZWNoYW5uZWwiKSkKK30KKworLyogU2V0IHRoZSBmaWxlIGRlc2NyaXB0b3JzIGZvciB0aGUgbWFpbiBzZWxlY3QgaW4gc2Vzc2lvbi5jCisgKiBUaGlzIGF2b2lkIGNoYW5uZWxzIHdoaWNoIGRvbid0IGhhdmUgYW55IHdpbmRvdyBhdmFpbGFibGUsIGFyZSBjbG9zZWQsIGV0YyovCit2b2lkIHNldGNoYW5uZWxmZHMoZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzKSB7CisJCisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IENoYW5uZWwgKiBjaGFubmVsOworCQorCWZvciAoaSA9IDA7IGkgPCBzZXMuY2hhbnNpemU7IGkrKykgeworCisJCWNoYW5uZWwgPSBzZXMuY2hhbm5lbHNbaV07CisJCWlmIChjaGFubmVsID09IE5VTEwpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogU3R1ZmYgdG8gcHV0IG92ZXIgdGhlIHdpcmUgKi8KKwkJaWYgKGNoYW5uZWwtPnRyYW5zd2luZG93ID4gMCkgeworCisJCQlpZiAoY2hhbm5lbC0+cmVhZGZkID49IDApIHsKKwkJCQlGRF9TRVQoY2hhbm5lbC0+cmVhZGZkLCByZWFkZmRzKTsKKwkJCX0KKwkJCQorCQkJaWYgKEVSUkZEX0lTX1JFQUQoY2hhbm5lbCkgJiYgY2hhbm5lbC0+ZXJyZmQgPj0gMCkgeworCQkJCQlGRF9TRVQoY2hhbm5lbC0+ZXJyZmQsIHJlYWRmZHMpOworCQkJfQorCQl9CisKKwkJLyogU3R1ZmYgZnJvbSB0aGUgd2lyZSAqLworCQlpZiAoKGNoYW5uZWwtPndyaXRlZmQgPj0gMCAmJiBjYnVmX2dldHVzZWQoY2hhbm5lbC0+d3JpdGVidWYpID4gMCApCisJCQkJfHwgY2hhbm5lbC0+aW5pdGNvbm4pIHsKKwkJCQlGRF9TRVQoY2hhbm5lbC0+d3JpdGVmZCwgd3JpdGVmZHMpOworCQl9CisKKwkJaWYgKEVSUkZEX0lTX1dSSVRFKGNoYW5uZWwpICYmIGNoYW5uZWwtPmVycmZkID49IDAgCisJCQkJJiYgY2J1Zl9nZXR1c2VkKGNoYW5uZWwtPmV4dHJhYnVmKSA+IDAgKSB7CisJCQkJRkRfU0VUKGNoYW5uZWwtPmVycmZkLCB3cml0ZWZkcyk7CisJCX0KKworCX0gLyogZm9yZWFjaCBjaGFubmVsICovCisKKyNpZmRlZiBVU0lOR19MSVNURU5FUlMKKwlzZXRfbGlzdGVuZXJfZmRzKHJlYWRmZHMpOworI2VuZGlmCisKK30KKworLyogaGFuZGxlIHRoZSBjaGFubmVsIEVPRiBldmVudCwgYnkgY2xvc2luZyB0aGUgY2hhbm5lbCBmaWxlZGVzY3JpcHRvci4gVGhlCisgKiBjaGFubmVsIGlzbid0IGNsb3NlZCB5ZXQsIGl0IGlzIGxlZnQgdW50aWwgdGhlIGluY29taW5nIChmcm9tIHRoZSBwcm9ncmFtCisgKiBldGMpIEZEIGlzIGFsc28gRU9GICovCit2b2lkIHJlY3ZfbXNnX2NoYW5uZWxfZW9mKCkgeworCisJc3RydWN0IENoYW5uZWwgKiBjaGFubmVsOworCisJVFJBQ0UoKCJlbnRlciByZWN2X21zZ19jaGFubmVsX2VvZiIpKQorCisJY2hhbm5lbCA9IGdldGNoYW5uZWxfbXNnKCJFT0YiKTsKKworCWNoYW5uZWwtPnJlY3ZfZW9mID0gMTsKKworCWNoZWNrX2Nsb3NlKGNoYW5uZWwpOworCVRSQUNFKCgibGVhdmUgcmVjdl9tc2dfY2hhbm5lbF9lb2YiKSkKK30KKworCisvKiBIYW5kbGUgY2hhbm5lbCBjbG9zdXJlKCksIHJlc3BvbmQgaW4ga2luZCBhbmQgY2xvc2UgdGhlIGNoYW5uZWxzICovCit2b2lkIHJlY3ZfbXNnX2NoYW5uZWxfY2xvc2UoKSB7CisKKwlzdHJ1Y3QgQ2hhbm5lbCAqIGNoYW5uZWw7CisKKwlUUkFDRSgoImVudGVyIHJlY3ZfbXNnX2NoYW5uZWxfY2xvc2UiKSkKKworCWNoYW5uZWwgPSBnZXRjaGFubmVsX21zZygiQ2xvc2UiKTsKKworCWNoYW5uZWwtPnJlY3ZfZW9mID0gMTsKKwljaGFubmVsLT5yZWN2X2Nsb3NlID0gMTsKKworCWNoZWNrX2Nsb3NlKGNoYW5uZWwpOworCVRSQUNFKCgibGVhdmUgcmVjdl9tc2dfY2hhbm5lbF9jbG9zZSIpKQorfQorCisvKiBSZW1vdmUgYSBjaGFubmVsIGVudHJ5LCB0aGlzIGlzIG9ubHkgZXhlY3V0ZWQgYWZ0ZXIgYm90aCBzaWRlcyBoYXZlIHNlbnQKKyAqIGNoYW5uZWwgY2xvc2UgKi8KK3N0YXRpYyB2b2lkIHJlbW92ZV9jaGFubmVsKHN0cnVjdCBDaGFubmVsICogY2hhbm5lbCkgeworCisJVFJBQ0UoKCJlbnRlciByZW1vdmVfY2hhbm5lbCIpKQorCVRSQUNFKCgiY2hhbm5lbCBpbmRleCBpcyAlZCIsIGNoYW5uZWwtPmluZGV4KSkKKworCWNidWZfZnJlZShjaGFubmVsLT53cml0ZWJ1Zik7CisJY2hhbm5lbC0+d3JpdGVidWYgPSBOVUxMOworCisJaWYgKGNoYW5uZWwtPmV4dHJhYnVmKSB7CisJCWNidWZfZnJlZShjaGFubmVsLT5leHRyYWJ1Zik7CisJCWNoYW5uZWwtPmV4dHJhYnVmID0gTlVMTDsKKwl9CisKKworCS8qIGNsb3NlIHRoZSBGRHMgaW4gY2FzZSB0aGV5IGhhdmVuJ3QgYmVlbiBkb25lCisJICogeWV0ICh0aGV5IG1pZ2h0IGhhdmUgYmVlbiBzaHV0ZG93biBldGMpICovCisJVFJBQ0UoKCJDTE9TRSB3cml0ZWZkICVkIiwgY2hhbm5lbC0+d3JpdGVmZCkpCisJY2xvc2UoY2hhbm5lbC0+d3JpdGVmZCk7CisJVFJBQ0UoKCJDTE9TRSByZWFkZmQgJWQiLCBjaGFubmVsLT5yZWFkZmQpKQorCWNsb3NlKGNoYW5uZWwtPnJlYWRmZCk7CisJVFJBQ0UoKCJDTE9TRSBlcnJmZCAlZCIsIGNoYW5uZWwtPmVycmZkKSkKKwljbG9zZShjaGFubmVsLT5lcnJmZCk7CisKKwljaGFubmVsLT50eXBlZGF0YSA9IE5VTEw7CisKKwlkZWxldGVfY2hhbm5lbChjaGFubmVsKTsKKworCVRSQUNFKCgibGVhdmUgcmVtb3ZlX2NoYW5uZWwiKSkKK30KKworLyogUmVtb3ZlIGEgY2hhbm5lbCBlbnRyeSAqLworc3RhdGljIHZvaWQgZGVsZXRlX2NoYW5uZWwoc3RydWN0IENoYW5uZWwgKmNoYW5uZWwpIHsKKworCXNlcy5jaGFubmVsc1tjaGFubmVsLT5pbmRleF0gPSBOVUxMOworCW1fZnJlZShjaGFubmVsKTsKKwlzZXMuY2hhbmNvdW50LS07CisJCit9CisKKworLyogSGFuZGxlIGNoYW5uZWwgc3BlY2lmaWMgcmVxdWVzdHMsIHBhc3Npbmcgb2ZmIHRvIGNvcnJlc3BvbmRpbmcgaGFuZGxlcnMKKyAqIHN1Y2ggYXMgY2hhbnNlc3Npb24gb3IgeDExZndkICovCit2b2lkIHJlY3ZfbXNnX2NoYW5uZWxfcmVxdWVzdCgpIHsKKworCXN0cnVjdCBDaGFubmVsICpjaGFubmVsOworCisJVFJBQ0UoKCJlbnRlciByZWN2X21zZ19jaGFubmVsX3JlcXVlc3QiKSkKKwkKKwljaGFubmVsID0gZ2V0Y2hhbm5lbCgpOworCisJaWYgKGNoYW5uZWwtPnR5cGUtPnJlcWhhbmRsZXIpIHsKKwkJY2hhbm5lbC0+dHlwZS0+cmVxaGFuZGxlcihjaGFubmVsKTsKKwl9IGVsc2UgeworCQlzZW5kX21zZ19jaGFubmVsX2ZhaWx1cmUoY2hhbm5lbCk7CisJfQorCisJVFJBQ0UoKCJsZWF2ZSByZWN2X21zZ19jaGFubmVsX3JlcXVlc3QiKSkKKworfQorCisvKiBSZWFkcyBkYXRhIGZyb20gdGhlIHNlcnZlcidzIHByb2dyYW0vc2hlbGwvZXRjLCBhbmQgcHV0cyBpdCBpbiBhCisgKiBjaGFubmVsX2RhdGEgcGFja2V0IHRvIHNlbmQuCisgKiBjaGFuIGlzIHRoZSByZW1vdGUgY2hhbm5lbCwgaXNleHRlbmRlZCBpcyAwIGlmIGl0IGlzIG5vcm1hbCBkYXRhLCAxCisgKiBpZiBpdCBpcyBleHRlbmRlZCBkYXRhLiBpZiBpdCBpcyBleHRlbmRlZCwgdGhlbiB0aGUgdHlwZSBpcyBpbgorICogZXh0dHlwZSAqLworc3RhdGljIHZvaWQgc2VuZF9tc2dfY2hhbm5lbF9kYXRhKHN0cnVjdCBDaGFubmVsICpjaGFubmVsLCBpbnQgaXNleHRlbmRlZCkgeworCisJaW50IGxlbjsKKwlzaXplX3QgbWF4bGVuLCBzaXplX3BvczsKKwlpbnQgZmQ7CisKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCisJVFJBQ0UoKCJlbnRlciBzZW5kX21zZ19jaGFubmVsX2RhdGEiKSkKKwlkcm9wYmVhcl9hc3NlcnQoIWNoYW5uZWwtPnNlbnRfY2xvc2UpOworCisJaWYgKGlzZXh0ZW5kZWQpIHsKKwkJZmQgPSBjaGFubmVsLT5lcnJmZDsKKwl9IGVsc2UgeworCQlmZCA9IGNoYW5uZWwtPnJlYWRmZDsKKwl9CisJVFJBQ0UoKCJlbnRlciBzZW5kX21zZ19jaGFubmVsX2RhdGEgaXNleHRlbmRlZCAlZCBmZCAlZCIsIGlzZXh0ZW5kZWQsIGZkKSkKKwlkcm9wYmVhcl9hc3NlcnQoZmQgPj0gMCk7CisKKwltYXhsZW4gPSBNSU4oY2hhbm5lbC0+dHJhbnN3aW5kb3csIGNoYW5uZWwtPnRyYW5zbWF4cGFja2V0KTsKKwkvKiAtKDErNCs0KSBpcyBTU0hfTVNHX0NIQU5ORUxfREFUQSwgY2hhbm5lbCBudW1iZXIsIHN0cmluZyBsZW5ndGgsIGFuZCAKKwkgKiBleHR0eXBlIGlmIGlzIGV4dGVuZGVkICovCisJbWF4bGVuID0gTUlOKG1heGxlbiwgCisJCQlzZXMud3JpdGVwYXlsb2FkLT5zaXplIC0gMSAtIDQgLSA0IC0gKGlzZXh0ZW5kZWQgPyA0IDogMCkpOworCVRSQUNFKCgibWF4bGVuICVkIiwgbWF4bGVuKSkKKwlpZiAobWF4bGVuID09IDApIHsKKwkJVFJBQ0UoKCJsZWF2ZSBzZW5kX21zZ19jaGFubmVsX2RhdGE6IG5vIHdpbmRvdyIpKQorCQlyZXR1cm47CisJfQorCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgCisJCQlpc2V4dGVuZGVkID8gU1NIX01TR19DSEFOTkVMX0VYVEVOREVEX0RBVEEgOiBTU0hfTVNHX0NIQU5ORUxfREFUQSk7CisJYnVmX3B1dGludChzZXMud3JpdGVwYXlsb2FkLCBjaGFubmVsLT5yZW1vdGVjaGFuKTsKKwlpZiAoaXNleHRlbmRlZCkgeworCQlidWZfcHV0aW50KHNlcy53cml0ZXBheWxvYWQsIFNTSF9FWFRFTkRFRF9EQVRBX1NUREVSUik7CisJfQorCS8qIGEgZHVtbXkgc2l6ZSBmaXJzdCAuLi4qLworCXNpemVfcG9zID0gc2VzLndyaXRlcGF5bG9hZC0+cG9zOworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgMCk7CisKKwkvKiByZWFkIHRoZSBkYXRhICovCisJbGVuID0gcmVhZChmZCwgYnVmX2dldHdyaXRlcHRyKHNlcy53cml0ZXBheWxvYWQsIG1heGxlbiksIG1heGxlbik7CisJaWYgKGxlbiA8PSAwKSB7CisJCWlmIChsZW4gPT0gMCB8fCBlcnJubyAhPSBFSU5UUikgeworCQkJLyogVGhpcyB3aWxsIGFsc28gZ2V0IGhpdCBpbiB0aGUgY2FzZSBvZiBFQUdBSU4uIFRoZSBvbmx5CisJCQl0aW1lIHdlIGV4cGVjdCB0byByZWNlaXZlIEVBR0FJTiBpcyB3aGVuIHdlJ3JlIGZsdXNoaW5nIGEgRkQsCisJCQlpbiB3aGljaCBjYXNlIGl0IGNhbiBiZSB0cmVhdGVkIHRoZSBzYW1lIGFzIEVPRiAqLworCQkJY2xvc2VfY2hhbl9mZChjaGFubmVsLCBmZCwgU0hVVF9SRCk7CisJCX0KKwkJc2VzLndyaXRlcGF5bG9hZC0+bGVuID0gc2VzLndyaXRlcGF5bG9hZC0+cG9zID0gMDsKKwkJVFJBQ0UoKCJsZWF2ZSBzZW5kX21zZ19jaGFubmVsX2RhdGE6IGxlbiAlZCByZWFkIGVyciAlZCBvciBFT0YgZm9yIGZkICVkIiwgCisJCQkJCWxlbiwgZXJybm8sIGZkKSkKKwkJcmV0dXJuOworCX0KKwlidWZfaW5jcndyaXRlcG9zKHNlcy53cml0ZXBheWxvYWQsIGxlbik7CisJLyogLi4uIHJlYWwgc2l6ZSBoZXJlICovCisJYnVmX3NldHBvcyhzZXMud3JpdGVwYXlsb2FkLCBzaXplX3Bvcyk7CisJYnVmX3B1dGludChzZXMud3JpdGVwYXlsb2FkLCBsZW4pOworCisJY2hhbm5lbC0+dHJhbnN3aW5kb3cgLT0gbGVuOworCisJZW5jcnlwdF9wYWNrZXQoKTsKKwkKKwkvKiBJZiB3ZSByZWNlaXZlIGxlc3MgZGF0YSB0aGFuIHdlIHJlcXVlc3RlZCB3aGVuIGZsdXNoaW5nLCB3ZSd2ZQorCSAgIHJlYWNoZWQgdGhlIGVxdWl2YWxlbnQgb2YgRU9GICovCisJaWYgKGNoYW5uZWwtPmZsdXNoaW5nICYmIGxlbiA8IChzc2l6ZV90KW1heGxlbikKKwl7CisJCVRSQUNFKCgiY2xvc2luZyBmcm9tIGNoYW5uZWwsIGZsdXNoaW5nIG91dC4iKSkKKwkJY2xvc2VfY2hhbl9mZChjaGFubmVsLCBmZCwgU0hVVF9SRCk7CisJfQorCVRSQUNFKCgibGVhdmUgc2VuZF9tc2dfY2hhbm5lbF9kYXRhIikpCit9CisKKy8qIFdlIHJlY2VpdmUgY2hhbm5lbCBkYXRhICovCit2b2lkIHJlY3ZfbXNnX2NoYW5uZWxfZGF0YSgpIHsKKworCXN0cnVjdCBDaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9IGdldGNoYW5uZWwoKTsKKworCWNvbW1vbl9yZWN2X21zZ19jaGFubmVsX2RhdGEoY2hhbm5lbCwgY2hhbm5lbC0+d3JpdGVmZCwgY2hhbm5lbC0+d3JpdGVidWYpOworfQorCisvKiBTaGFyZWQgZm9yIGRhdGEgYW5kIHN0ZGVyciBkYXRhIC0gd2hlbiB3ZSByZWNlaXZlIGRhdGEsIHB1dCBpdCBpbiBhIGJ1ZmZlcgorICogZm9yIHdyaXRpbmcgdG8gdGhlIGxvY2FsIGZpbGUgZGVzY3JpcHRvciAqLwordm9pZCBjb21tb25fcmVjdl9tc2dfY2hhbm5lbF9kYXRhKHN0cnVjdCBDaGFubmVsICpjaGFubmVsLCBpbnQgZmQsIAorCQljaXJjYnVmZmVyICogY2J1ZikgeworCisJdW5zaWduZWQgaW50IGRhdGFsZW47CisJdW5zaWduZWQgaW50IG1heGRhdGE7CisJdW5zaWduZWQgaW50IGJ1ZmxlbjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJVFJBQ0UoKCJlbnRlciByZWN2X21zZ19jaGFubmVsX2RhdGEiKSkKKworCWlmIChjaGFubmVsLT5yZWN2X2VvZikgeworCQlkcm9wYmVhcl9leGl0KCJyZWNlaXZlZCBkYXRhIGFmdGVyIGVvZiIpOworCX0KKworIAlpZiAoZmQgPCAwKSB7CisJCS8qIElmIHdlIGhhdmUgZW5jb3VudGVyZWQgZmFpbGVkIHdyaXRlLCB0aGUgZmFyIHNpZGUgbWlnaHQgc3RpbGwKKwkJICogYmUgc2VuZGluZyBkYXRhIHdpdGhvdXQgaGF2aW5nIHlldCByZWNlaXZlZCBvdXIgY2xvc2Ugbm90aWZpY2F0aW9uLgorCQkgKiBXZSBqdXN0IGRyb3AgdGhlIGRhdGEuICovCisJCXJldHVybjsKKwl9CisKKwlkYXRhbGVuID0gYnVmX2dldGludChzZXMucGF5bG9hZCk7CisJVFJBQ0UoKCJsZW5ndGggJWQiLCBkYXRhbGVuKSkKKworCW1heGRhdGEgPSBjYnVmX2dldGF2YWlsKGNidWYpOworCisJLyogV2hpbHN0IHRoZSBzcGVjIHNheXMgd2UgIk1BWSBpZ25vcmUgZGF0YSBwYXN0IHRoZSBlbmQiIHRoaXMgY291bGQKKwkgKiBsZWFkIHRvIGNvcnJ1cHRlZCBmaWxlIHRyYW5zZmVycyBldGMgKGNodW5rcyBtaXNzZWQgZXRjKS4gSXQncyBiZXR0ZXIgdG8KKwkgKiBqdXN0IGRpZSBob3JyaWJseSAqLworCWlmIChkYXRhbGVuID4gbWF4ZGF0YSkgeworCQlkcm9wYmVhcl9leGl0KCJPdmVyc2l6ZWQgcGFja2V0Iik7CisJfQorCisJLyogV2UgbWF5IGhhdmUgdG8gcnVuIHRocm91Z2h0IHR3aWNlLCBpZiB0aGUgYnVmZmVyIHdyYXBzIGFyb3VuZC4gQ2FuJ3QKKwkgKiBqdXN0ICJsZWF2ZSBpdCBmb3IgbmV4dCB0aW1lIiBsaWtlIHdpdGggd3JpdGVjaGFubmVsLCBzaW5jZSB0aGlzCisJICogaXMgcGF5bG9hZCBkYXRhICovCisJbGVuID0gZGF0YWxlbjsKKwl3aGlsZSAobGVuID4gMCkgeworCQlidWZsZW4gPSBjYnVmX3dyaXRlbGVuKGNidWYpOworCQlidWZsZW4gPSBNSU4oYnVmbGVuLCBsZW4pOworCisJCW1lbWNweShjYnVmX3dyaXRlcHRyKGNidWYsIGJ1ZmxlbiksIAorCQkJCWJ1Zl9nZXRwdHIoc2VzLnBheWxvYWQsIGJ1ZmxlbiksIGJ1Zmxlbik7CisJCWNidWZfaW5jcndyaXRlKGNidWYsIGJ1Zmxlbik7CisJCWJ1Zl9pbmNycG9zKHNlcy5wYXlsb2FkLCBidWZsZW4pOworCQlsZW4gLT0gYnVmbGVuOworCX0KKworCWRyb3BiZWFyX2Fzc2VydChjaGFubmVsLT5yZWN2d2luZG93ID49IGRhdGFsZW4pOworCWNoYW5uZWwtPnJlY3Z3aW5kb3cgLT0gZGF0YWxlbjsKKwlkcm9wYmVhcl9hc3NlcnQoY2hhbm5lbC0+cmVjdndpbmRvdyA8PSBSRUNWX01BWFdJTkRPVyk7CisKKwlUUkFDRSgoImxlYXZlIHJlY3ZfbXNnX2NoYW5uZWxfZGF0YSIpKQorfQorCisvKiBJbmNyZW1lbnQgdGhlIG91dGdvaW5nIGRhdGEgd2luZG93IGZvciBhIGNoYW5uZWwgLSB0aGUgcmVtb3RlIGVuZCBsaW1pdHMKKyAqIHRoZSBhbW91bnQgb2YgZGF0YSB3aGljaCBtYXkgYmUgdHJhbnNtaXR0ZWQsIHRoaXMgd2luZG93IGlzIGRlY3JlbWVudGVkCisgKiBhcyBkYXRhIGlzIHNlbnQsIGFuZCBpbmNyZW1lbnRlZCB1cG9uIHJlY2VpdmluZyB3aW5kb3ctYWRqdXN0IG1lc3NhZ2VzICovCit2b2lkIHJlY3ZfbXNnX2NoYW5uZWxfd2luZG93X2FkanVzdCgpIHsKKworCXN0cnVjdCBDaGFubmVsICogY2hhbm5lbDsKKwl1bnNpZ25lZCBpbnQgaW5jcjsKKwkKKwljaGFubmVsID0gZ2V0Y2hhbm5lbCgpOworCQorCWluY3IgPSBidWZfZ2V0aW50KHNlcy5wYXlsb2FkKTsKKwlUUkFDRSgoInJlY2VpdmVkIHdpbmRvdyBpbmNyZW1lbnQgJWQiLCBpbmNyKSkKKwlpbmNyID0gTUlOKGluY3IsIE1BWF9UUkFOU19XSU5fSU5DUik7CisJCisJY2hhbm5lbC0+dHJhbnN3aW5kb3cgKz0gaW5jcjsKKwljaGFubmVsLT50cmFuc3dpbmRvdyA9IE1JTihjaGFubmVsLT50cmFuc3dpbmRvdywgTUFYX1RSQU5TX1dJTkRPVyk7CisKK30KKworLyogSW5jcmVtZW50IHRoZSBpbmNvbWluZyBkYXRhIHdpbmRvdyBmb3IgYSBjaGFubmVsLCBhbmQgbGV0IHRoZSByZW1vdGUKKyAqIGVuZCBrbm93ICovCitzdGF0aWMgdm9pZCBzZW5kX21zZ19jaGFubmVsX3dpbmRvd19hZGp1c3Qoc3RydWN0IENoYW5uZWwqIGNoYW5uZWwsIAorCQl1bnNpZ25lZCBpbnQgaW5jcikgeworCisJVFJBQ0UoKCJzZW5kaW5nIHdpbmRvdyBhZGp1c3QgJWQiLCBpbmNyKSkKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgU1NIX01TR19DSEFOTkVMX1dJTkRPV19BREpVU1QpOworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgY2hhbm5lbC0+cmVtb3RlY2hhbik7CisJYnVmX3B1dGludChzZXMud3JpdGVwYXlsb2FkLCBpbmNyKTsKKworCWVuY3J5cHRfcGFja2V0KCk7Cit9CisJCisvKiBIYW5kbGUgYSBuZXcgY2hhbm5lbCByZXF1ZXN0LCBwZXJmb3JtaW5nIGFueSBjaGFubmVsLXR5cGUtc3BlY2lmaWMgc2V0dXAgKi8KK3ZvaWQgcmVjdl9tc2dfY2hhbm5lbF9vcGVuKCkgeworCisJdW5zaWduZWQgY2hhciAqdHlwZTsKKwl1bnNpZ25lZCBpbnQgdHlwZWxlbjsKKwl1bnNpZ25lZCBpbnQgcmVtb3RlY2hhbiwgdHJhbnN3aW5kb3csIHRyYW5zbWF4cGFja2V0OworCXN0cnVjdCBDaGFubmVsICpjaGFubmVsOworCWNvbnN0IHN0cnVjdCBDaGFuVHlwZSAqKmNwOworCWNvbnN0IHN0cnVjdCBDaGFuVHlwZSAqY2hhbnR5cGU7CisJdW5zaWduZWQgaW50IGVycnR5cGUgPSBTU0hfT1BFTl9VTktOT1dOX0NIQU5ORUxfVFlQRTsKKwlpbnQgcmV0OworCisKKwlUUkFDRSgoImVudGVyIHJlY3ZfbXNnX2NoYW5uZWxfb3BlbiIpKQorCisJLyogZ2V0IHRoZSBwYWNrZXQgY29udGVudHMgKi8KKwl0eXBlID0gYnVmX2dldHN0cmluZyhzZXMucGF5bG9hZCwgJnR5cGVsZW4pOworCisJcmVtb3RlY2hhbiA9IGJ1Zl9nZXRpbnQoc2VzLnBheWxvYWQpOworCXRyYW5zd2luZG93ID0gYnVmX2dldGludChzZXMucGF5bG9hZCk7CisJdHJhbnN3aW5kb3cgPSBNSU4odHJhbnN3aW5kb3csIE1BWF9UUkFOU19XSU5ET1cpOworCXRyYW5zbWF4cGFja2V0ID0gYnVmX2dldGludChzZXMucGF5bG9hZCk7CisJdHJhbnNtYXhwYWNrZXQgPSBNSU4odHJhbnNtYXhwYWNrZXQsIE1BWF9UUkFOU19QQVlMT0FEX0xFTik7CisKKwkvKiBmaWd1cmUgd2hhdCB0eXBlIG9mIHBhY2tldCBpdCBpcyAqLworCWlmICh0eXBlbGVuID4gTUFYX05BTUVfTEVOKSB7CisJCWdvdG8gZmFpbHVyZTsKKwl9CisKKwkvKiBHZXQgdGhlIGNoYW5uZWwgdHlwZS4gQ2xpZW50IGFuZCBzZXJ2ZXIgc3R5bGUgaW52b2thdGlvbiB3aWxsIHNldCB1cCBhCisJICogZGlmZmVyZW50IGxpc3QgZm9yIHNlcy5jaGFudHlwZXMgYXQgc3RhcnR1cC4gV2UganVzdCBpdGVyYXRlIHRocm91Z2gKKwkgKiB0aGlzIGxpc3QgYW5kIGZpbmQgdGhlIG1hdGNoaW5nIG5hbWUgKi8KKwlmb3IgKGNwID0gJnNlcy5jaGFudHlwZXNbMF0sIGNoYW50eXBlID0gKCpjcCk7IAorCQkJY2hhbnR5cGUgIT0gTlVMTDsKKwkJCWNwKyssIGNoYW50eXBlID0gKCpjcCkpIHsKKwkJaWYgKHN0cmNtcCh0eXBlLCBjaGFudHlwZS0+bmFtZSkgPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoY2hhbnR5cGUgPT0gTlVMTCkgeworCQlUUkFDRSgoIk5vIG1hdGNoaW5nIHR5cGUgZm9yICclcyciLCB0eXBlKSkKKwkJZ290byBmYWlsdXJlOworCX0KKworCVRSQUNFKCgibWF0Y2hlZCB0eXBlICclcyciLCB0eXBlKSkKKworCS8qIGNyZWF0ZSB0aGUgY2hhbm5lbCAqLworCWNoYW5uZWwgPSBuZXdjaGFubmVsKHJlbW90ZWNoYW4sIGNoYW50eXBlLCB0cmFuc3dpbmRvdywgdHJhbnNtYXhwYWNrZXQpOworCisJaWYgKGNoYW5uZWwgPT0gTlVMTCkgeworCQlUUkFDRSgoIm5ld2NoYW5uZWwgcmV0dXJuZWQgTlVMTCIpKQorCQlnb3RvIGZhaWx1cmU7CisJfQorCisJaWYgKGNoYW5uZWwtPnR5cGUtPmluaXRoYW5kbGVyKSB7CisJCXJldCA9IGNoYW5uZWwtPnR5cGUtPmluaXRoYW5kbGVyKGNoYW5uZWwpOworCQlpZiAocmV0ID09IFNTSF9PUEVOX0lOX1BST0dSRVNTKSB7CisJCQkvKiBXZSdsbCBzZW5kIHRoZSBjb25maXJtYXRpb24gbGF0ZXIgKi8KKwkJCWdvdG8gY2xlYW51cDsKKwkJfQorCQlpZiAocmV0ID4gMCkgeworCQkJZXJydHlwZSA9IHJldDsKKwkJCWRlbGV0ZV9jaGFubmVsKGNoYW5uZWwpOworCQkJVFJBQ0UoKCJpbml0aGFuZGxlciByZXR1cm5lZCBmYWlsdXJlICVkIiwgcmV0KSkKKwkJCWdvdG8gZmFpbHVyZTsKKwkJfQorCX0KKworCS8qIHN1Y2Nlc3MgKi8KKwlzZW5kX21zZ19jaGFubmVsX29wZW5fY29uZmlybWF0aW9uKGNoYW5uZWwsIGNoYW5uZWwtPnJlY3Z3aW5kb3csCisJCQljaGFubmVsLT5yZWN2bWF4cGFja2V0KTsKKwlnb3RvIGNsZWFudXA7CisKK2ZhaWx1cmU6CisJVFJBQ0UoKCJyZWN2X21zZ19jaGFubmVsX29wZW4gZmFpbHVyZSIpKQorCXNlbmRfbXNnX2NoYW5uZWxfb3Blbl9mYWlsdXJlKHJlbW90ZWNoYW4sIGVycnR5cGUsICIiLCAiIik7CisKK2NsZWFudXA6CisJbV9mcmVlKHR5cGUpOworCisJVFJBQ0UoKCJsZWF2ZSByZWN2X21zZ19jaGFubmVsX29wZW4iKSkKK30KKworLyogU2VuZCBhIGZhaWx1cmUgbWVzc2FnZSAqLwordm9pZCBzZW5kX21zZ19jaGFubmVsX2ZhaWx1cmUoc3RydWN0IENoYW5uZWwgKmNoYW5uZWwpIHsKKworCVRSQUNFKCgiZW50ZXIgc2VuZF9tc2dfY2hhbm5lbF9mYWlsdXJlIikpCisJQ0hFQ0tDTEVBUlRPV1JJVEUoKTsKKworCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIFNTSF9NU0dfQ0hBTk5FTF9GQUlMVVJFKTsKKwlidWZfcHV0aW50KHNlcy53cml0ZXBheWxvYWQsIGNoYW5uZWwtPnJlbW90ZWNoYW4pOworCisJZW5jcnlwdF9wYWNrZXQoKTsKKwlUUkFDRSgoImxlYXZlIHNlbmRfbXNnX2NoYW5uZWxfZmFpbHVyZSIpKQorfQorCisvKiBTZW5kIGEgc3VjY2VzcyBtZXNzYWdlICovCit2b2lkIHNlbmRfbXNnX2NoYW5uZWxfc3VjY2VzcyhzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCkgeworCisJVFJBQ0UoKCJlbnRlciBzZW5kX21zZ19jaGFubmVsX3N1Y2Nlc3MiKSkKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgU1NIX01TR19DSEFOTkVMX1NVQ0NFU1MpOworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgY2hhbm5lbC0+cmVtb3RlY2hhbik7CisKKwllbmNyeXB0X3BhY2tldCgpOworCVRSQUNFKCgibGVhdmUgc2VuZF9tc2dfY2hhbm5lbF9zdWNjZXNzIikpCit9CisKKy8qIFNlbmQgYSBjaGFubmVsIG9wZW4gZmFpbHVyZSBtZXNzYWdlLCB3aXRoIGEgY29ycmVzcG9uZGluZyByZWFzb24KKyAqIGNvZGUgKHVzdWFsbHkgcmVzb3VyY2Ugc2hvcnRhZ2Ugb3IgdW5rbm93biBjaGFuIHR5cGUpICovCitzdGF0aWMgdm9pZCBzZW5kX21zZ19jaGFubmVsX29wZW5fZmFpbHVyZSh1bnNpZ25lZCBpbnQgcmVtb3RlY2hhbiwgCisJCWludCByZWFzb24sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRleHQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxhbmcpIHsKKworCVRSQUNFKCgiZW50ZXIgc2VuZF9tc2dfY2hhbm5lbF9vcGVuX2ZhaWx1cmUiKSkKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCQorCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIFNTSF9NU0dfQ0hBTk5FTF9PUEVOX0ZBSUxVUkUpOworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgcmVtb3RlY2hhbik7CisJYnVmX3B1dGludChzZXMud3JpdGVwYXlsb2FkLCByZWFzb24pOworCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgdGV4dCwgc3RybGVuKChjaGFyKil0ZXh0KSk7CisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCBsYW5nLCBzdHJsZW4oKGNoYXIqKWxhbmcpKTsKKworCWVuY3J5cHRfcGFja2V0KCk7CisJVFJBQ0UoKCJsZWF2ZSBzZW5kX21zZ19jaGFubmVsX29wZW5fZmFpbHVyZSIpKQorfQorCisvKiBDb25maXJtIGEgY2hhbm5lbCBvcGVuLCBhbmQgbGV0IHRoZSByZW1vdGUgZW5kIGtub3cgd2hhdCBudW1iZXIgd2UndmUKKyAqIGFsbG9jYXRlZCBhbmQgdGhlIHJlY2VpdmUgcGFyYW1ldGVycyAqLworc3RhdGljIHZvaWQgc2VuZF9tc2dfY2hhbm5lbF9vcGVuX2NvbmZpcm1hdGlvbihzdHJ1Y3QgQ2hhbm5lbCogY2hhbm5lbCwKKwkJdW5zaWduZWQgaW50IHJlY3Z3aW5kb3csIAorCQl1bnNpZ25lZCBpbnQgcmVjdm1heHBhY2tldCkgeworCisJVFJBQ0UoKCJlbnRlciBzZW5kX21zZ19jaGFubmVsX29wZW5fY29uZmlybWF0aW9uIikpCisJQ0hFQ0tDTEVBUlRPV1JJVEUoKTsKKworCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIFNTSF9NU0dfQ0hBTk5FTF9PUEVOX0NPTkZJUk1BVElPTik7CisJYnVmX3B1dGludChzZXMud3JpdGVwYXlsb2FkLCBjaGFubmVsLT5yZW1vdGVjaGFuKTsKKwlidWZfcHV0aW50KHNlcy53cml0ZXBheWxvYWQsIGNoYW5uZWwtPmluZGV4KTsKKwlidWZfcHV0aW50KHNlcy53cml0ZXBheWxvYWQsIHJlY3Z3aW5kb3cpOworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgcmVjdm1heHBhY2tldCk7CisKKwllbmNyeXB0X3BhY2tldCgpOworCVRSQUNFKCgibGVhdmUgc2VuZF9tc2dfY2hhbm5lbF9vcGVuX2NvbmZpcm1hdGlvbiIpKQorfQorCisvKiBjbG9zZSBhIGZkLCBob3cgaXMgU0hVVF9SRCBvciBTSFVUX1dSICovCitzdGF0aWMgdm9pZCBjbG9zZV9jaGFuX2ZkKHN0cnVjdCBDaGFubmVsICpjaGFubmVsLCBpbnQgZmQsIGludCBob3cpIHsKKworCWludCBjbG9zZWluID0gMCwgY2xvc2VvdXQgPSAwOworCisJaWYgKGNoYW5uZWwtPnR5cGUtPnNlcGZkcykgeworCQlUUkFDRSgoIlNIVVRET1dOKCVkLCAlZCkiLCBmZCwgaG93KSkKKwkJc2h1dGRvd24oZmQsIGhvdyk7CisJCWlmIChob3cgPT0gMCkgeworCQkJY2xvc2VvdXQgPSAxOworCQl9IGVsc2UgeworCQkJY2xvc2VpbiA9IDE7CisJCX0KKwl9IGVsc2UgeworCQlUUkFDRSgoIkNMT1NFIHNvbWUgZmQgJWQiLCBmZCkpCisJCWNsb3NlKGZkKTsKKwkJY2xvc2VpbiA9IGNsb3Nlb3V0ID0gMTsKKwl9CisKKwlpZiAoY2xvc2VvdXQgJiYgKGZkID09IGNoYW5uZWwtPnJlYWRmZCkpIHsKKwkJY2hhbm5lbC0+cmVhZGZkID0gRkRfQ0xPU0VEOworCX0KKwlpZiAoY2xvc2VvdXQgJiYgRVJSRkRfSVNfUkVBRChjaGFubmVsKSAmJiAoZmQgPT0gY2hhbm5lbC0+ZXJyZmQpKSB7CisJCWNoYW5uZWwtPmVycmZkID0gRkRfQ0xPU0VEOworCX0KKworCWlmIChjbG9zZWluICYmIGZkID09IGNoYW5uZWwtPndyaXRlZmQpIHsKKwkJY2hhbm5lbC0+d3JpdGVmZCA9IEZEX0NMT1NFRDsKKwl9CisJaWYgKGNsb3NlaW4gJiYgRVJSRkRfSVNfV1JJVEUoY2hhbm5lbCkgJiYgKGZkID09IGNoYW5uZWwtPmVycmZkKSkgeworCQljaGFubmVsLT5lcnJmZCA9IEZEX0NMT1NFRDsKKwl9CisKKwkvKiBpZiB3ZSBjYWxsZWQgc2h1dGRvd24gb24gaXQgYW5kIGFsbCByZWZlcmVuY2VzIGFyZSBnb25lLCB0aGVuIHdlIAorCSAqIG5lZWQgdG8gY2xvc2UoKSBpdCB0byBzdG9wIGl0IGxpbmdlcmluZyAqLworCWlmIChjaGFubmVsLT50eXBlLT5zZXBmZHMgJiYgY2hhbm5lbC0+cmVhZGZkID09IEZEX0NMT1NFRCAKKwkJJiYgY2hhbm5lbC0+d3JpdGVmZCA9PSBGRF9DTE9TRUQgJiYgY2hhbm5lbC0+ZXJyZmQgPT0gRkRfQ0xPU0VEKSB7CisJCVRSQUNFKCgiQ0xPU0UgKGZpbmFsbHkpIG9mICVkIiwgZmQpKQorCQljbG9zZShmZCk7CisJfQorfQorCisKKyNpZiBkZWZpbmVkKFVTSU5HX0xJU1RFTkVSUykgfHwgZGVmaW5lZChEUk9QQkVBUl9DTElFTlQpCisvKiBDcmVhdGUgYSBuZXcgY2hhbm5lbCwgYW5kIHN0YXJ0IHRoZSBvcGVuIHJlcXVlc3QuIFRoaXMgaXMgaW50ZW5kZWQKKyAqIGZvciBYMTEsIGFnZW50LCB0Y3AgZm9yd2FyZGluZywgYW5kIHNob3VsZCBiZSBmaWxsZWQgd2l0aCBjaGFubmVsLXNwZWNpZmljCisgKiBvcHRpb25zLCB3aXRoIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGNhbGxpbmcgZW5jcnlwdF9wYWNrZXQoKSBhZnRlcgorICogY29tcGxldGlvbi4gSXQgaXMgbWFuZGF0b3J5IGZvciB0aGUgY2FsbGVyIHRvIGVuY3J5cHRfcGFja2V0KCkgaWYKKyAqIERST1BCRUFSX1NVQ0NFU1MgaXMgcmV0dXJuZWQgKi8KK2ludCBzZW5kX21zZ19jaGFubmVsX29wZW5faW5pdChpbnQgZmQsIGNvbnN0IHN0cnVjdCBDaGFuVHlwZSAqdHlwZSkgeworCisJc3RydWN0IENoYW5uZWwqIGNoYW47CisKKwlUUkFDRSgoImVudGVyIHNlbmRfbXNnX2NoYW5uZWxfb3Blbl9pbml0KCkiKSkKKwljaGFuID0gbmV3Y2hhbm5lbCgwLCB0eXBlLCAwLCAwKTsKKwlpZiAoIWNoYW4pIHsKKwkJVFJBQ0UoKCJsZWF2ZSBzZW5kX21zZ19jaGFubmVsX29wZW5faW5pdCgpIC0gRkFJTEVEIGluIG5ld2NoYW5uZWwoKSIpKQorCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9CisKKwkvKiBzZXQgZmQgbm9uLWJsb2NraW5nICovCisJc2V0bm9uYmxvY2tpbmcoZmQpOworCisJY2hhbi0+d3JpdGVmZCA9IGNoYW4tPnJlYWRmZCA9IGZkOworCXNlcy5tYXhmZCA9IE1BWChzZXMubWF4ZmQsIGZkKTsKKworCWNoYW4tPmF3YWl0X29wZW4gPSAxOworCisJLyogbm93IG9wZW4gdGhlIGNoYW5uZWwgY29ubmVjdGlvbiAqLworCUNIRUNLQ0xFQVJUT1dSSVRFKCk7CisKKwlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCBTU0hfTVNHX0NIQU5ORUxfT1BFTik7CisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCB0eXBlLT5uYW1lLCBzdHJsZW4odHlwZS0+bmFtZSkpOworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgY2hhbi0+aW5kZXgpOworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgUkVDVl9NQVhXSU5ET1cpOworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgUkVDVl9NQVhQQUNLRVQpOworCisJVFJBQ0UoKCJsZWF2ZSBzZW5kX21zZ19jaGFubmVsX29wZW5faW5pdCgpIikpCisJcmV0dXJuIERST1BCRUFSX1NVQ0NFU1M7Cit9CisKKy8qIENvbmZpcm1hdGlvbiB0aGF0IG91ciBjaGFubmVsIG9wZW4gcmVxdWVzdCAoZm9yIGZvcndhcmRpbmdzKSB3YXMgCisgKiBzdWNjZXNzZnVsKi8KK3ZvaWQgcmVjdl9tc2dfY2hhbm5lbF9vcGVuX2NvbmZpcm1hdGlvbigpIHsKKworCXN0cnVjdCBDaGFubmVsICogY2hhbm5lbDsKKwlpbnQgcmV0OworCisJVFJBQ0UoKCJlbnRlciByZWN2X21zZ19jaGFubmVsX29wZW5fY29uZmlybWF0aW9uIikpCisKKwljaGFubmVsID0gZ2V0Y2hhbm5lbCgpOworCisJaWYgKCFjaGFubmVsLT5hd2FpdF9vcGVuKSB7CisJCWRyb3BiZWFyX2V4aXQoInVuZXhwZWN0ZWQgY2hhbm5lbCByZXBseSIpOworCX0KKwljaGFubmVsLT5hd2FpdF9vcGVuID0gMDsKKworCWNoYW5uZWwtPnJlbW90ZWNoYW4gPSAgYnVmX2dldGludChzZXMucGF5bG9hZCk7CisJY2hhbm5lbC0+dHJhbnN3aW5kb3cgPSBidWZfZ2V0aW50KHNlcy5wYXlsb2FkKTsKKwljaGFubmVsLT50cmFuc21heHBhY2tldCA9IGJ1Zl9nZXRpbnQoc2VzLnBheWxvYWQpOworCQorCVRSQUNFKCgibmV3IGNoYW4gcmVtb3RlICVkIGxvY2FsICVkIiwgCisJCQkJY2hhbm5lbC0+cmVtb3RlY2hhbiwgY2hhbm5lbC0+aW5kZXgpKQorCisJLyogUnVuIHRoZSBpbml0aGFuZGxlciBjYWxsYmFjayAqLworCWlmIChjaGFubmVsLT50eXBlLT5pbml0aGFuZGxlcikgeworCQlyZXQgPSBjaGFubmVsLT50eXBlLT5pbml0aGFuZGxlcihjaGFubmVsKTsKKwkJaWYgKHJldCA+IDApIHsKKwkJCXJlbW92ZV9jaGFubmVsKGNoYW5uZWwpOworCQkJVFJBQ0UoKCJpbml0aGFuZGxlciByZXR1cm5lZCBmYWlsdXJlICVkIiwgcmV0KSkKKwkJfQorCX0KKworCQorCVRSQUNFKCgibGVhdmUgcmVjdl9tc2dfY2hhbm5lbF9vcGVuX2NvbmZpcm1hdGlvbiIpKQorfQorCisvKiBOb3RpZmljYXRpb24gdGhhdCBvdXIgY2hhbm5lbCBvcGVuIHJlcXVlc3QgZmFpbGVkICovCit2b2lkIHJlY3ZfbXNnX2NoYW5uZWxfb3Blbl9mYWlsdXJlKCkgeworCisJc3RydWN0IENoYW5uZWwgKiBjaGFubmVsOworCisJY2hhbm5lbCA9IGdldGNoYW5uZWwoKTsKKworCWlmICghY2hhbm5lbC0+YXdhaXRfb3BlbikgeworCQlkcm9wYmVhcl9leGl0KCJ1bmV4cGVjdGVkIGNoYW5uZWwgcmVwbHkiKTsKKwl9CisJY2hhbm5lbC0+YXdhaXRfb3BlbiA9IDA7CisKKwlyZW1vdmVfY2hhbm5lbChjaGFubmVsKTsKK30KKyNlbmRpZiAvKiBVU0lOR19MSVNURU5FUlMgKi8KZGlmZiAtLWdpdCBhL2NvbW1vbi1jaGFuc2Vzc2lvbi5jIGIvY29tbW9uLWNoYW5zZXNzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM1MGM2YwotLS0gL2Rldi9udWxsCisrKyBiL2NvbW1vbi1jaGFuc2Vzc2lvbi5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJjaGFuc2Vzc2lvbi5oIgorCisvKiBNYXBwaW5nIG9mIHNpZ25hbCB2YWx1ZXMgdG8gc3NoIHNpZ25hbCBzdHJpbmdzICovCitjb25zdCBzdHJ1Y3QgU2lnTWFwIHNpZ25hbWVzW10gPSB7CisJe1NJR0FCUlQsICJBQlJUIn0sCisJe1NJR0FMUk0sICJBTFJNIn0sCisJe1NJR0ZQRSwgIkZQRSJ9LAorCXtTSUdIVVAsICJIVVAifSwKKwl7U0lHSUxMLCAiSUxMIn0sCisJe1NJR0lOVCwgIklOVCJ9LAorCXtTSUdLSUxMLCAiS0lMTCJ9LAorCXtTSUdQSVBFLCAiUElQRSJ9LAorCXtTSUdRVUlULCAiUVVJVCJ9LAorCXtTSUdTRUdWLCAiU0VHViJ9LAorCXtTSUdURVJNLCAiVEVSTSJ9LAorCXtTSUdVU1IxLCAiVVNSMSJ9LAorCXtTSUdVU1IyLCAiVVNSMiJ9LAorCXswLCBOVUxMfQorfTsKZGlmZiAtLWdpdCBhL2NvbW1vbi1rZXguYyBiL2NvbW1vbi1rZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDM2Y2QxCi0tLSAvZGV2L251bGwKKysrIGIvY29tbW9uLWtleC5jCkBAIC0wLDAgKzEsNzIwIEBACisvKgorICogRHJvcGJlYXIgU1NICisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA0IE1hdHQgSm9obnN0b24KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAwNCBieSBNaWhuZWEgU3RvZW5lc2N1CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAiYWxnby5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJrZXguaCIKKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJwYWNrZXQuaCIKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJyYW5kb20uaCIKKworLyogZGlmZmllLWhlbGxtYW4tZ3JvdXAxLXNoYTEgdmFsdWUgZm9yIHAgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGRoX3BfdmFsW10gPSB7CisJMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhDOSwgMHgwRiwgMHhEQSwgMHhBMiwKKyAgICAweDIxLCAweDY4LCAweEMyLCAweDM0LCAweEM0LCAweEM2LCAweDYyLCAweDhCLCAweDgwLCAweERDLCAweDFDLCAweEQxLAorCTB4MjksIDB4MDIsIDB4NEUsIDB4MDgsIDB4OEEsIDB4NjcsIDB4Q0MsIDB4NzQsIDB4MDIsIDB4MEIsIDB4QkUsIDB4QTYsCisJMHgzQiwgMHgxMywgMHg5QiwgMHgyMiwgMHg1MSwgMHg0QSwgMHgwOCwgMHg3OSwgMHg4RSwgMHgzNCwgMHgwNCwgMHhERCwKKwkweEVGLCAweDk1LCAweDE5LCAweEIzLCAweENELCAweDNBLCAweDQzLCAweDFCLCAweDMwLCAweDJCLCAweDBBLCAweDZELAorCTB4RjIsIDB4NUYsIDB4MTQsIDB4MzcsIDB4NEYsIDB4RTEsIDB4MzUsIDB4NkQsIDB4NkQsIDB4NTEsIDB4QzIsIDB4NDUsCisJMHhFNCwgMHg4NSwgMHhCNSwgMHg3NiwgMHg2MiwgMHg1RSwgMHg3RSwgMHhDNiwgMHhGNCwgMHg0QywgMHg0MiwgMHhFOSwKKwkweEE2LCAweDM3LCAweEVELCAweDZCLCAweDBCLCAweEZGLCAweDVDLCAweEI2LCAweEY0LCAweDA2LCAweEI3LCAweEVELAorCTB4RUUsIDB4MzgsIDB4NkIsIDB4RkIsIDB4NUEsIDB4ODksIDB4OUYsIDB4QTUsIDB4QUUsIDB4OUYsIDB4MjQsIDB4MTEsCisJMHg3QywgMHg0QiwgMHgxRiwgMHhFNiwgMHg0OSwgMHgyOCwgMHg2NiwgMHg1MSwgMHhFQywgMHhFNiwgMHg1MywgMHg4MSwKKwkweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGfTsKKyNkZWZpbmUgREhfUF9MRU4gc2l6ZW9mKGRoX3BfdmFsKQorCitzdGF0aWMgY29uc3QgaW50IERIX0dfVkFMID0gMjsKKworc3RhdGljIHZvaWQga2V4aW5pdGlhbGlzZSgpOwordm9pZCBnZW5fbmV3X2tleXMoKTsKKyNpZm5kZWYgRElTQUJMRV9aTElCCitzdGF0aWMgdm9pZCBnZW5fbmV3X3pzdHJlYW1zKCk7CisjZW5kaWYKK3N0YXRpYyB2b2lkIHJlYWRfa2V4X2FsZ29zKCk7CisvKiBoZWxwZXIgZnVuY3Rpb24gZm9yIGdlbl9uZXdfa2V5cyAqLworc3RhdGljIHZvaWQgaGFzaGtleXModW5zaWduZWQgY2hhciAqb3V0LCBpbnQgb3V0bGVuLCAKKwkJY29uc3QgaGFzaF9zdGF0ZSAqIGhzLCB1bnNpZ25lZCBjb25zdCBjaGFyIFgpOworCisKKy8qIFNlbmQgb3VyIGxpc3Qgb2YgYWxnb3JpdGhtcyB3ZSBjYW4gdXNlICovCit2b2lkIHNlbmRfbXNnX2tleGluaXQoKSB7CisKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIFNTSF9NU0dfS0VYSU5JVCk7CisKKwkvKiBjb29raWUgKi8KKwlnZW5yYW5kb20oYnVmX2dldHdyaXRlcHRyKHNlcy53cml0ZXBheWxvYWQsIDE2KSwgMTYpOworCWJ1Zl9pbmNyd3JpdGVwb3Moc2VzLndyaXRlcGF5bG9hZCwgMTYpOworCisJLyoga2V4IGFsZ29zICovCisJYnVmX3B1dF9hbGdvbGlzdChzZXMud3JpdGVwYXlsb2FkLCBzc2hrZXgpOworCisJLyogc2VydmVyX2hvc3Rfa2V5X2FsZ29yaXRobXMgKi8KKwlidWZfcHV0X2FsZ29saXN0KHNlcy53cml0ZXBheWxvYWQsIHNzaGhvc3RrZXkpOworCisJLyogZW5jcnlwdGlvbl9hbGdvcml0aG1zX2NsaWVudF90b19zZXJ2ZXIgKi8KKwlidWZfcHV0X2FsZ29saXN0KHNlcy53cml0ZXBheWxvYWQsIHNzaGNpcGhlcnMpOworCisJLyogZW5jcnlwdGlvbl9hbGdvcml0aG1zX3NlcnZlcl90b19jbGllbnQgKi8KKwlidWZfcHV0X2FsZ29saXN0KHNlcy53cml0ZXBheWxvYWQsIHNzaGNpcGhlcnMpOworCisJLyogbWFjX2FsZ29yaXRobXNfY2xpZW50X3RvX3NlcnZlciAqLworCWJ1Zl9wdXRfYWxnb2xpc3Qoc2VzLndyaXRlcGF5bG9hZCwgc3NoaGFzaGVzKTsKKworCS8qIG1hY19hbGdvcml0aG1zX3NlcnZlcl90b19jbGllbnQgKi8KKwlidWZfcHV0X2FsZ29saXN0KHNlcy53cml0ZXBheWxvYWQsIHNzaGhhc2hlcyk7CisKKwkvKiBjb21wcmVzc2lvbl9hbGdvcml0aG1zX2NsaWVudF90b19zZXJ2ZXIgKi8KKwlidWZfcHV0X2FsZ29saXN0KHNlcy53cml0ZXBheWxvYWQsIHNzaGNvbXByZXNzKTsKKworCS8qIGNvbXByZXNzaW9uX2FsZ29yaXRobXNfc2VydmVyX3RvX2NsaWVudCAqLworCWJ1Zl9wdXRfYWxnb2xpc3Qoc2VzLndyaXRlcGF5bG9hZCwgc3NoY29tcHJlc3MpOworCisJLyogbGFuZ3VhZ2VzX2NsaWVudF90b19zZXJ2ZXIgKi8KKwlidWZfcHV0c3RyaW5nKHNlcy53cml0ZXBheWxvYWQsICIiLCAwKTsKKworCS8qIGxhbmd1YWdlc19zZXJ2ZXJfdG9fY2xpZW50ICovCisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCAiIiwgMCk7CisKKwkvKiBmaXJzdF9rZXhfcGFja2V0X2ZvbGxvd3MgLSB1bmltcGxlbWVudGVkIGZvciBub3cgKi8KKwlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCAweDAwKTsKKworCS8qIHJlc2VydmVkIHVuaXQzMiAqLworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgMCk7CisKKwkvKiBzZXQgdXAgdHJhbnNtaXR0ZWQga2V4IHBhY2tldCBidWZmZXIgZm9yIGhhc2hpbmcuIAorCSAqIFRoaXMgaXMgZnJlZWQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUga2V4ICovCisJc2VzLnRyYW5za2V4aW5pdCA9IGJ1Zl9uZXdjb3B5KHNlcy53cml0ZXBheWxvYWQpOworCisJZW5jcnlwdF9wYWNrZXQoKTsKKwlzZXMuZGF0YWFsbG93ZWQgPSAwOyAvKiBkb24ndCBzZW5kIG90aGVyIHBhY2tldHMgZHVyaW5nIGtleCAqLworCisJVFJBQ0UoKCJEQVRBQUxMT1dFRD0wIikpCisJVFJBQ0UoKCItPiBLRVhJTklUIikpCisJc2VzLmtleHN0YXRlLnNlbnRrZXhpbml0ID0gMTsKK30KKworLyogKioqIE5PVEUgcmVnYXJkaW5nIChzZW5kfHJlY3YpX21zZ19uZXdrZXlzICoqKiAKKyAqIENoYW5nZWQgYnkgbWlobmVhIGZyb20gdGhlIG9yaWdpbmFsIGtleC5jIHRvIHNldCBkYXRhYWxsb3dlZCBhZnRlciBhIAorICogY29tcGxldGVkIGtleSBleGNoYW5nZSwgbm8gbWF0dGVyIHRoZSBvcmRlciBpbiB3aGljaCBpdCB3YXMgcGVyZm9ybWVkLgorICogVGhpcyBlbmFibGVzIGNsaWVudCBtb2RlIHdpdGhvdXQgYWZmZWN0aW5nIHNlcnZlciBmdW5jdGlvbmFsaXR5LgorICovCisKKy8qIEJyaW5nIG5ldyBrZXlzIGludG8gdXNlIGFmdGVyIGEga2V5IGV4Y2hhbmdlLCBhbmQgbGV0IHRoZSBjbGllbnQga25vdyovCit2b2lkIHNlbmRfbXNnX25ld2tleXMoKSB7CisKKwlUUkFDRSgoImVudGVyIHNlbmRfbXNnX25ld2tleXMiKSkKKworCS8qIGdlbmVyYXRlIHRoZSBrZXhpbml0IHJlcXVlc3QgKi8KKwlDSEVDS0NMRUFSVE9XUklURSgpOworCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIFNTSF9NU0dfTkVXS0VZUyk7CisJZW5jcnlwdF9wYWNrZXQoKTsKKwkKKworCS8qIHNldCB1cCBvdXIgc3RhdGUgKi8KKwlpZiAoc2VzLmtleHN0YXRlLnJlY3ZuZXdrZXlzKSB7CisJCVRSQUNFKCgid2hpbGUgUkVDVk5FV0tFWVM9MSIpKQorCQlnZW5fbmV3X2tleXMoKTsKKwkJa2V4aW5pdGlhbGlzZSgpOyAvKiB3ZSd2ZSBmaW5pc2hlZCB3aXRoIHRoaXMga2V4ICovCisJCVRSQUNFKCgiIC0+IERBVEFBTExPV0VEPTEiKSkKKwkJc2VzLmRhdGFhbGxvd2VkID0gMTsgLyogd2UgY2FuIHNlbmQgb3RoZXIgcGFja2V0cyBhZ2FpbiBub3cgKi8KKwkJc2VzLmtleHN0YXRlLmRvbmVmaXJzdGtleCA9IDE7CisJfSBlbHNlIHsKKwkJc2VzLmtleHN0YXRlLnNlbnRuZXdrZXlzID0gMTsKKwkJVFJBQ0UoKCJTRU5UTkVXS0VZUz0xIikpCisJfQorCisJVFJBQ0UoKCItPiBNU0dfTkVXS0VZUyIpKQorCVRSQUNFKCgibGVhdmUgc2VuZF9tc2dfbmV3a2V5cyIpKQorfQorCisvKiBCcmluZyB0aGUgbmV3IGtleXMgaW50byB1c2UgYWZ0ZXIgYSBrZXkgZXhjaGFuZ2UgKi8KK3ZvaWQgcmVjdl9tc2dfbmV3a2V5cygpIHsKKworCVRSQUNFKCgiPC0gTVNHX05FV0tFWVMiKSkKKwlUUkFDRSgoImVudGVyIHJlY3ZfbXNnX25ld2tleXMiKSkKKworCS8qIHNpbXBseSBjaGVjayBpZiB3ZSd2ZSBzZW50IFNTSF9NU0dfTkVXS0VZUywgYW5kIGlmIHNvLAorCSAqIHN3aXRjaCB0byB0aGUgbmV3IGtleXMgKi8KKwlpZiAoc2VzLmtleHN0YXRlLnNlbnRuZXdrZXlzKSB7CisJCVRSQUNFKCgid2hpbGUgU0VOVE5FV0tFWVM9MSIpKQorCQlnZW5fbmV3X2tleXMoKTsKKwkJa2V4aW5pdGlhbGlzZSgpOyAvKiB3ZSd2ZSBmaW5pc2hlZCB3aXRoIHRoaXMga2V4ICovCisJICAgIFRSQUNFKCgiIC0+IERBVEFBTExPV0VEPTEiKSkKKwkgICAgc2VzLmRhdGFhbGxvd2VkID0gMTsgLyogd2UgY2FuIHNlbmQgb3RoZXIgcGFja2V0cyBhZ2FpbiBub3cgKi8KKwkJc2VzLmtleHN0YXRlLmRvbmVmaXJzdGtleCA9IDE7CisJfSBlbHNlIHsKKwkJVFJBQ0UoKCJSRUNWTkVXS0VZUz0xIikpCisJCXNlcy5rZXhzdGF0ZS5yZWN2bmV3a2V5cyA9IDE7CisJfQorCQorCVRSQUNFKCgibGVhdmUgcmVjdl9tc2dfbmV3a2V5cyIpKQorfQorCisKKy8qIFNldCB1cCB0aGUga2V4IGZvciB0aGUgZmlyc3QgdGltZSAqLwordm9pZCBrZXhmaXJzdGluaXRpYWxpc2UoKSB7CisKKwlzZXMua2V4c3RhdGUuZG9uZWZpcnN0a2V4ID0gMDsKKwlrZXhpbml0aWFsaXNlKCk7Cit9CisKKy8qIFJlc2V0IHRoZSBrZXggc3RhdGUsIHJlYWR5IGZvciBhIG5ldyBuZWdvdGlhdGlvbiAqLworc3RhdGljIHZvaWQga2V4aW5pdGlhbGlzZSgpIHsKKworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJVFJBQ0UoKCJrZXhpbml0aWFsaXNlKCkiKSkKKworCS8qIHNlbnQvcmVjdidkIE1TR19LRVhJTklUICovCisJc2VzLmtleHN0YXRlLnNlbnRrZXhpbml0ID0gMDsKKwlzZXMua2V4c3RhdGUucmVjdmtleGluaXQgPSAwOworCisJLyogc2VudC9yZWN2J2QgTVNHX05FV0tFWVMgKi8KKwlzZXMua2V4c3RhdGUucmVjdm5ld2tleXMgPSAwOworCXNlcy5rZXhzdGF0ZS5zZW50bmV3a2V5cyA9IDA7CisKKwkvKiBmaXJzdF9wYWNrZXRfZm9sbG93cyAqLworCXNlcy5rZXhzdGF0ZS5maXJzdGZvbGxvd3MgPSAwOworCisJc2VzLmtleHN0YXRlLmRhdGF0cmFucyA9IDA7CisJc2VzLmtleHN0YXRlLmRhdGFyZWN2ID0gMDsKKworCWlmIChnZXR0aW1lb2ZkYXkoJnR2LCAwKSA8IDApIHsKKwkJZHJvcGJlYXJfZXhpdCgiRXJyb3IgZ2V0dGluZyB0aW1lIik7CisJfQorCXNlcy5rZXhzdGF0ZS5sYXN0a2V4dGltZSA9IHR2LnR2X3NlYzsKKworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGdlbl9uZXdfa2V5cywgY3JlYXRlcyBhIGhhc2guIEl0IG1ha2VzIGEgY29weSBvZiB0aGUKKyAqIGFscmVhZHkgaW5pdGlhbGlzZWQgaGFzaF9zdGF0ZSBocywgd2hpY2ggc2hvdWxkIGFscmVhZHkgaGF2ZSBwcm9jZXNzZWQKKyAqIHRoZSBkaF9LIGFuZCBoYXNoLCBzaW5jZSB0aGVzZSBhcmUgY29tbW9uLiBYIGlzIHRoZSBsZXR0ZXIgJ0EnLCAnQicgZXRjLgorICogb3V0IG11c3QgaGF2ZSBhdCBsZWFzdCBtaW4oU0hBMV9IQVNIX1NJWkUsIG91dGxlbikgYnl0ZXMgYWxsb2NhdGVkLgorICogVGhlIG91dHB1dCB3aWxsIG9ubHkgYmUgZXhwYW5kZWQgb25jZSwgYXMgd2UgYXJlIGFzc3VyZWQgdGhhdAorICogb3V0bGVuIDw9IDIqU0hBMV9IQVNIX1NJWkUgZm9yIGFsbCBrbm93biBoYXNoZXMuCisgKgorICogU2VlIFNlY3Rpb24gNy4yIG9mIHJmYzQyNTMgKHNzaCB0cmFuc3BvcnQpIGZvciBkZXRhaWxzICovCitzdGF0aWMgdm9pZCBoYXNoa2V5cyh1bnNpZ25lZCBjaGFyICpvdXQsIGludCBvdXRsZW4sIAorCQljb25zdCBoYXNoX3N0YXRlICogaHMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgWCkgeworCisJaGFzaF9zdGF0ZSBoczI7CisJdW5zaWduZWQgY2hhciBrMltTSEExX0hBU0hfU0laRV07IC8qIHVzZWQgdG8gZXh0ZW5kaW5nICovCisKKwltZW1jcHkoJmhzMiwgaHMsIHNpemVvZihoYXNoX3N0YXRlKSk7CisJc2hhMV9wcm9jZXNzKCZoczIsICZYLCAxKTsKKwlzaGExX3Byb2Nlc3MoJmhzMiwgc2VzLnNlc3Npb25faWQsIFNIQTFfSEFTSF9TSVpFKTsKKwlzaGExX2RvbmUoJmhzMiwgb3V0KTsKKwlpZiAoU0hBMV9IQVNIX1NJWkUgPCBvdXRsZW4pIHsKKwkJLyogbmVlZCB0byBleHRlbmQgKi8KKwkJbWVtY3B5KCZoczIsIGhzLCBzaXplb2YoaGFzaF9zdGF0ZSkpOworCQlzaGExX3Byb2Nlc3MoJmhzMiwgb3V0LCBTSEExX0hBU0hfU0laRSk7CisJCXNoYTFfZG9uZSgmaHMyLCBrMik7CisJCW1lbWNweSgmb3V0W1NIQTFfSEFTSF9TSVpFXSwgazIsIG91dGxlbiAtIFNIQTFfSEFTSF9TSVpFKTsKKwl9Cit9CisKKy8qIEdlbmVyYXRlIHRoZSBhY3R1YWwgZW5jcnlwdGlvbi9pbnRlZ3JpdHkga2V5cywgdXNpbmcgdGhlIHJlc3VsdHMgb2YgdGhlCisgKiBrZXkgZXhjaGFuZ2UsIGFzIHNwZWNpZmllZCBpbiBzZWN0aW9uIDUuMiBvZiB0aGUgSUVURiBzZWNzaC10cmFuc3BvcnQKKyAqIGRyYWZ0LiBUaGlzIG9jY3VycyBhZnRlciB0aGUgREgga2V5LWV4Y2hhbmdlLgorICoKKyAqIHNlcy5uZXdrZXlzIGlzIHRoZSBuZXcgc2V0IG9mIGtleXMgd2hpY2ggYXJlIGdlbmVyYXRlZCwgdGhlc2UgYXJlIG9ubHkKKyAqIHRha2VuIGludG8gdXNlIGFmdGVyIGJvdGggc2lkZXMgaGF2ZSBzZW50IGEgbmV3a2V5cyBtZXNzYWdlICovCisKKy8qIE9yaWdpbmFsbHkgZnJvbSBrZXguYywgZ2VuZXJhbGl6ZWQgZm9yIGNsaS9zdnIgbW9kZSAtLW1paG5lYSAqLwordm9pZCBnZW5fbmV3X2tleXMoKSB7CisKKwl1bnNpZ25lZCBjaGFyIEMyU19JVltNQVhfSVZfTEVOXTsKKwl1bnNpZ25lZCBjaGFyIEMyU19rZXlbTUFYX0tFWV9MRU5dOworCXVuc2lnbmVkIGNoYXIgUzJDX0lWW01BWF9JVl9MRU5dOworCXVuc2lnbmVkIGNoYXIgUzJDX2tleVtNQVhfS0VZX0xFTl07CisJLyogdW5zaWduZWQgY2hhciBrZXlbTUFYX0tFWV9MRU5dOyAqLworCXVuc2lnbmVkIGNoYXIgKnRyYW5zX0lWLCAqdHJhbnNfa2V5LCAqcmVjdl9JViwgKnJlY3Zfa2V5OworCisJaGFzaF9zdGF0ZSBoczsKKwl1bnNpZ25lZCBpbnQgQzJTX2tleXNpemUsIFMyQ19rZXlzaXplOworCWNoYXIgbWFjdHJhbnNsZXR0ZXIsIG1hY3JlY3ZsZXR0ZXI7IC8qIENsaWVudCBvciBzZXJ2ZXIgc3BlY2lmaWMgKi8KKwlpbnQgcmVjdl9jaXBoZXIgPSAwLCB0cmFuc19jaXBoZXIgPSAwOworCisJVFJBQ0UoKCJlbnRlciBnZW5fbmV3X2tleXMiKSkKKwkvKiB0aGUgZGhfSyBhbmQgaGFzaCBhcmUgdGhlIHN0YXJ0IG9mIGFsbCBoYXNoZXMsIHdlIG1ha2UgdXNlIG9mIHRoYXQgKi8KKworCXNoYTFfaW5pdCgmaHMpOworCXNoYTFfcHJvY2Vzc19tcCgmaHMsIHNlcy5kaF9LKTsKKwltcF9jbGVhcihzZXMuZGhfSyk7CisJbV9mcmVlKHNlcy5kaF9LKTsKKwlzaGExX3Byb2Nlc3MoJmhzLCBzZXMuaGFzaCwgU0hBMV9IQVNIX1NJWkUpOworCW1fYnVybihzZXMuaGFzaCwgU0hBMV9IQVNIX1NJWkUpOworCisJaWYgKElTX0RST1BCRUFSX0NMSUVOVCkgeworCSAgICB0cmFuc19JVgk9IEMyU19JVjsKKwkgICAgcmVjdl9JVgkJPSBTMkNfSVY7CisJICAgIHRyYW5zX2tleQk9IEMyU19rZXk7CisJICAgIHJlY3Zfa2V5CT0gUzJDX2tleTsKKwkgICAgQzJTX2tleXNpemUgPSBzZXMubmV3a2V5cy0+dHJhbnNfYWxnb19jcnlwdC0+a2V5c2l6ZTsKKwkgICAgUzJDX2tleXNpemUgPSBzZXMubmV3a2V5cy0+cmVjdl9hbGdvX2NyeXB0LT5rZXlzaXplOworCQltYWN0cmFuc2xldHRlciA9ICdFJzsKKwkJbWFjcmVjdmxldHRlciA9ICdGJzsKKwl9IGVsc2UgeworCSAgICB0cmFuc19JVgk9IFMyQ19JVjsKKwkgICAgcmVjdl9JVgkJPSBDMlNfSVY7CisJICAgIHRyYW5zX2tleQk9IFMyQ19rZXk7CisJICAgIHJlY3Zfa2V5CT0gQzJTX2tleTsKKwkgICAgQzJTX2tleXNpemUgPSBzZXMubmV3a2V5cy0+cmVjdl9hbGdvX2NyeXB0LT5rZXlzaXplOworCSAgICBTMkNfa2V5c2l6ZSA9IHNlcy5uZXdrZXlzLT50cmFuc19hbGdvX2NyeXB0LT5rZXlzaXplOworCQltYWN0cmFuc2xldHRlciA9ICdGJzsKKwkJbWFjcmVjdmxldHRlciA9ICdFJzsKKwl9CisKKwloYXNoa2V5cyhDMlNfSVYsIFNIQTFfSEFTSF9TSVpFLCAmaHMsICdBJyk7CisJaGFzaGtleXMoUzJDX0lWLCBTSEExX0hBU0hfU0laRSwgJmhzLCAnQicpOworCWhhc2hrZXlzKEMyU19rZXksIEMyU19rZXlzaXplLCAmaHMsICdDJyk7CisJaGFzaGtleXMoUzJDX2tleSwgUzJDX2tleXNpemUsICZocywgJ0QnKTsKKworCXJlY3ZfY2lwaGVyID0gZmluZF9jaXBoZXIoc2VzLm5ld2tleXMtPnJlY3ZfYWxnb19jcnlwdC0+Y2lwaGVyZGVzYy0+bmFtZSk7CisJaWYgKHJlY3ZfY2lwaGVyIDwgMCkKKwkgICAgZHJvcGJlYXJfZXhpdCgiY3J5cHRvIGVycm9yIik7CisJCQorCWlmIChjYmNfc3RhcnQocmVjdl9jaXBoZXIsIHJlY3ZfSVYsIHJlY3Zfa2V5LCAKKwkJCXNlcy5uZXdrZXlzLT5yZWN2X2FsZ29fY3J5cHQtPmtleXNpemUsIDAsIAorCQkJJnNlcy5uZXdrZXlzLT5yZWN2X3N5bW1ldHJpY19zdHJ1Y3QpICE9IENSWVBUX09LKSB7CisJCWRyb3BiZWFyX2V4aXQoImNyeXB0byBlcnJvciIpOworCX0KKwl0cmFuc19jaXBoZXIgPSBmaW5kX2NpcGhlcihzZXMubmV3a2V5cy0+dHJhbnNfYWxnb19jcnlwdC0+Y2lwaGVyZGVzYy0+bmFtZSk7CisJaWYgKHRyYW5zX2NpcGhlciA8IDApCisJICAgIGRyb3BiZWFyX2V4aXQoImNyeXB0byBlcnJvciIpOworCQkKKwlpZiAoY2JjX3N0YXJ0KHRyYW5zX2NpcGhlciwgdHJhbnNfSVYsIHRyYW5zX2tleSwgCisJCQlzZXMubmV3a2V5cy0+dHJhbnNfYWxnb19jcnlwdC0+a2V5c2l6ZSwgMCwgCisJCQkmc2VzLm5ld2tleXMtPnRyYW5zX3N5bW1ldHJpY19zdHJ1Y3QpICE9IENSWVBUX09LKSB7CisJCWRyb3BiZWFyX2V4aXQoImNyeXB0byBlcnJvciIpOworCX0KKwkKKwkvKiBNQUMga2V5cyAqLworCWhhc2hrZXlzKHNlcy5uZXdrZXlzLT50cmFuc21hY2tleSwgCisJCQlzZXMubmV3a2V5cy0+dHJhbnNfYWxnb19tYWMtPmtleXNpemUsICZocywgbWFjdHJhbnNsZXR0ZXIpOworCWhhc2hrZXlzKHNlcy5uZXdrZXlzLT5yZWN2bWFja2V5LCAKKwkJCXNlcy5uZXdrZXlzLT5yZWN2X2FsZ29fbWFjLT5rZXlzaXplLCAmaHMsIG1hY3JlY3ZsZXR0ZXIpOworCisjaWZuZGVmIERJU0FCTEVfWkxJQgorCWdlbl9uZXdfenN0cmVhbXMoKTsKKyNlbmRpZgorCQorCS8qIFN3aXRjaCBvdmVyIHRvIHRoZSBuZXcga2V5cyAqLworCW1fYnVybihzZXMua2V5cywgc2l6ZW9mKHN0cnVjdCBrZXlfY29udGV4dCkpOworCW1fZnJlZShzZXMua2V5cyk7CisJc2VzLmtleXMgPSBzZXMubmV3a2V5czsKKwlzZXMubmV3a2V5cyA9IE5VTEw7CisKKwlUUkFDRSgoImxlYXZlIGdlbl9uZXdfa2V5cyIpKQorfQorCisjaWZuZGVmIERJU0FCTEVfWkxJQgorLyogU2V0IHVwIG5ldyB6bGliIGNvbXByZXNzaW9uIHN0cmVhbXMsIGNsb3NlIHRoZSBvbGQgb25lcy4gT25seQorICogY2FsbGVkIGZyb20gZ2VuX25ld19rZXlzKCkgKi8KK3N0YXRpYyB2b2lkIGdlbl9uZXdfenN0cmVhbXMoKSB7CisKKwkvKiBjcmVhdGUgbmV3IHpzdHJlYW1zICovCisJaWYgKHNlcy5uZXdrZXlzLT5yZWN2X2FsZ29fY29tcCA9PSBEUk9QQkVBUl9DT01QX1pMSUIpIHsKKwkJc2VzLm5ld2tleXMtPnJlY3ZfenN0cmVhbSA9ICh6X3N0cmVhbXApbV9tYWxsb2Moc2l6ZW9mKHpfc3RyZWFtKSk7CisJCXNlcy5uZXdrZXlzLT5yZWN2X3pzdHJlYW0tPnphbGxvYyA9IFpfTlVMTDsKKwkJc2VzLm5ld2tleXMtPnJlY3ZfenN0cmVhbS0+emZyZWUgPSBaX05VTEw7CisJCQorCQlpZiAoaW5mbGF0ZUluaXQoc2VzLm5ld2tleXMtPnJlY3ZfenN0cmVhbSkgIT0gWl9PSykgeworCQkJZHJvcGJlYXJfZXhpdCgiemxpYiBlcnJvciIpOworCQl9CisJfSBlbHNlIHsKKwkJc2VzLm5ld2tleXMtPnJlY3ZfenN0cmVhbSA9IE5VTEw7CisJfQorCisJaWYgKHNlcy5uZXdrZXlzLT50cmFuc19hbGdvX2NvbXAgPT0gRFJPUEJFQVJfQ09NUF9aTElCKSB7CisJCXNlcy5uZXdrZXlzLT50cmFuc196c3RyZWFtID0gKHpfc3RyZWFtcCltX21hbGxvYyhzaXplb2Yoel9zdHJlYW0pKTsKKwkJc2VzLm5ld2tleXMtPnRyYW5zX3pzdHJlYW0tPnphbGxvYyA9IFpfTlVMTDsKKwkJc2VzLm5ld2tleXMtPnRyYW5zX3pzdHJlYW0tPnpmcmVlID0gWl9OVUxMOworCQorCQlpZiAoZGVmbGF0ZUluaXQoc2VzLm5ld2tleXMtPnRyYW5zX3pzdHJlYW0sIFpfREVGQVVMVF9DT01QUkVTU0lPTikgCisJCQkJIT0gWl9PSykgeworCQkJZHJvcGJlYXJfZXhpdCgiemxpYiBlcnJvciIpOworCQl9CisJfSBlbHNlIHsKKwkJc2VzLm5ld2tleXMtPnRyYW5zX3pzdHJlYW0gPSBOVUxMOworCX0KKwkKKwkvKiBjbGVhbiB1cCBvbGQga2V5cyAqLworCWlmIChzZXMua2V5cy0+cmVjdl96c3RyZWFtICE9IE5VTEwpIHsKKwkJaWYgKGluZmxhdGVFbmQoc2VzLmtleXMtPnJlY3ZfenN0cmVhbSkgPT0gWl9TVFJFQU1fRVJST1IpIHsKKwkJCS8qIFpfREFUQV9FUlJPUiBpcyBvaywganVzdCBtZWFucyB0aGF0IHN0cmVhbSBpc24ndCBlbmRlZCAqLworCQkJZHJvcGJlYXJfZXhpdCgiY3J5cHRvIGVycm9yIik7CisJCX0KKwkJbV9mcmVlKHNlcy5rZXlzLT5yZWN2X3pzdHJlYW0pOworCX0KKwlpZiAoc2VzLmtleXMtPnRyYW5zX3pzdHJlYW0gIT0gTlVMTCkgeworCQlpZiAoZGVmbGF0ZUVuZChzZXMua2V5cy0+dHJhbnNfenN0cmVhbSkgPT0gWl9TVFJFQU1fRVJST1IpIHsKKwkJCS8qIFpfREFUQV9FUlJPUiBpcyBvaywganVzdCBtZWFucyB0aGF0IHN0cmVhbSBpc24ndCBlbmRlZCAqLworCQkJZHJvcGJlYXJfZXhpdCgiY3J5cHRvIGVycm9yIik7CisJCX0KKwkJbV9mcmVlKHNlcy5rZXlzLT50cmFuc196c3RyZWFtKTsKKwl9Cit9CisjZW5kaWYKKworCisvKiBFeGVjdXRlZCB1cG9uIHJlY2VpdmluZyBhIGtleGluaXQgbWVzc2FnZSBmcm9tIHRoZSBjbGllbnQgdG8gaW5pdGlhdGUKKyAqIGtleSBleGNoYW5nZS4gSWYgd2UgaGF2ZW4ndCBhbHJlYWR5IGRvbmUgc28sIHdlIHNlbmQgdGhlIGxpc3Qgb2Ygb3VyCisgKiBwcmVmZXJyZWQgYWxnb3JpdGhtcy4gVGhlIGNsaWVudCdzIHJlcXVlc3RlZCBhbGdvcml0aG1zIGFyZSBwcm9jZXNzZWQsCisgKiBhbmQgd2UgY2FsY3VsYXRlIHRoZSBmaXJzdCBwb3J0aW9uIG9mIHRoZSBrZXktZXhjaGFuZ2UtaGFzaCBmb3IgdXNlZAorICogbGF0ZXIgaW4gdGhlIGtleSBleGNoYW5nZS4gTm8gcmVzcG9uc2UgaXMgc2VudCwgYXMgdGhlIGNsaWVudCBzaG91bGQKKyAqIGluaXRpYXRlIHRoZSBkaWZmaWUtaGVsbG1hbiBrZXkgZXhjaGFuZ2UgKi8KKworLyogT3JpZ2luYWxseSBmcm9tIGtleC5jLCBnZW5lcmFsaXplZCBmb3IgY2xpL3N2ciBtb2RlIC0tbWlobmVhICAqLworLyogQmVsb25ncyBpbiBjb21tb25fa2V4LmMgd2hlcmUgaXQgc2hvdWxkIGJlIG1vdmVkIGFmdGVyIHJldmlldyAqLwordm9pZCByZWN2X21zZ19rZXhpbml0KCkgeworCQorCXVuc2lnbmVkIGludCBrZXhoYXNoYnVmX2xlbiA9IDA7CisJdW5zaWduZWQgaW50IHJlbW90ZV9pZGVudF9sZW4gPSAwOworCXVuc2lnbmVkIGludCBsb2NhbF9pZGVudF9sZW4gPSAwOworCisJVFJBQ0UoKCI8LSBLRVhJTklUIikpCisJVFJBQ0UoKCJlbnRlciByZWN2X21zZ19rZXhpbml0IikpCisJCisJaWYgKCFzZXMua2V4c3RhdGUuc2VudGtleGluaXQpIHsKKwkJLyogd2UgbmVlZCB0byBzZW5kIGEga2V4IHBhY2tldCAqLworCQlzZW5kX21zZ19rZXhpbml0KCk7CisJCVRSQUNFKCgiY29udGludWUgcmVjdl9tc2dfa2V4aW5pdDogc2VudCBrZXhpbml0IikpCisJfQorCisJLyogc3RhcnQgdGhlIGtleCBoYXNoICovCisJbG9jYWxfaWRlbnRfbGVuID0gc3RybGVuKExPQ0FMX0lERU5UKTsKKwlyZW1vdGVfaWRlbnRfbGVuID0gc3RybGVuKChjaGFyKilzZXMucmVtb3RlaWRlbnQpOworCisJa2V4aGFzaGJ1Zl9sZW4gPSBsb2NhbF9pZGVudF9sZW4gKyByZW1vdGVfaWRlbnRfbGVuCisJCSsgc2VzLnRyYW5za2V4aW5pdC0+bGVuICsgc2VzLnBheWxvYWQtPmxlbgorCQkrIEtFWEhBU0hCVUZfTUFYX0lOVFM7CisKKwlzZXMua2V4aGFzaGJ1ZiA9IGJ1Zl9uZXcoa2V4aGFzaGJ1Zl9sZW4pOworCisJaWYgKElTX0RST1BCRUFSX0NMSUVOVCkgeworCisJCS8qIHJlYWQgdGhlIHBlZXIncyBjaG9pY2Ugb2YgYWxnb3MgKi8KKwkJcmVhZF9rZXhfYWxnb3MoKTsKKworCQkvKiBWX0MsIHRoZSBjbGllbnQncyB2ZXJzaW9uIHN0cmluZyAoQ1IgYW5kIE5MIGV4Y2x1ZGVkKSAqLworCSAgICBidWZfcHV0c3RyaW5nKHNlcy5rZXhoYXNoYnVmLAorCQkJKHVuc2lnbmVkIGNoYXIqKUxPQ0FMX0lERU5ULCBsb2NhbF9pZGVudF9sZW4pOworCQkvKiBWX1MsIHRoZSBzZXJ2ZXIncyB2ZXJzaW9uIHN0cmluZyAoQ1IgYW5kIE5MIGV4Y2x1ZGVkKSAqLworCSAgICBidWZfcHV0c3RyaW5nKHNlcy5rZXhoYXNoYnVmLCBzZXMucmVtb3RlaWRlbnQsIHJlbW90ZV9pZGVudF9sZW4pOworCisJCS8qIElfQywgdGhlIHBheWxvYWQgb2YgdGhlIGNsaWVudCdzIFNTSF9NU0dfS0VYSU5JVCAqLworCSAgICBidWZfcHV0c3RyaW5nKHNlcy5rZXhoYXNoYnVmLAorCQkJc2VzLnRyYW5za2V4aW5pdC0+ZGF0YSwgc2VzLnRyYW5za2V4aW5pdC0+bGVuKTsKKwkJLyogSV9TLCB0aGUgcGF5bG9hZCBvZiB0aGUgc2VydmVyJ3MgU1NIX01TR19LRVhJTklUICovCisJICAgIGJ1Zl9zZXRwb3Moc2VzLnBheWxvYWQsIDApOworCSAgICBidWZfcHV0c3RyaW5nKHNlcy5rZXhoYXNoYnVmLCBzZXMucGF5bG9hZC0+ZGF0YSwgc2VzLnBheWxvYWQtPmxlbik7CisKKwl9IGVsc2UgeworCQkvKiBTRVJWRVIgKi8KKworCQkvKiByZWFkIHRoZSBwZWVyJ3MgY2hvaWNlIG9mIGFsZ29zICovCisJCXJlYWRfa2V4X2FsZ29zKCk7CisJCS8qIFZfQywgdGhlIGNsaWVudCdzIHZlcnNpb24gc3RyaW5nIChDUiBhbmQgTkwgZXhjbHVkZWQpICovCisJICAgIGJ1Zl9wdXRzdHJpbmcoc2VzLmtleGhhc2hidWYsIHNlcy5yZW1vdGVpZGVudCwgcmVtb3RlX2lkZW50X2xlbik7CisJCS8qIFZfUywgdGhlIHNlcnZlcidzIHZlcnNpb24gc3RyaW5nIChDUiBhbmQgTkwgZXhjbHVkZWQpICovCisJICAgIGJ1Zl9wdXRzdHJpbmcoc2VzLmtleGhhc2hidWYsIAorCQkJCSh1bnNpZ25lZCBjaGFyKilMT0NBTF9JREVOVCwgbG9jYWxfaWRlbnRfbGVuKTsKKworCQkvKiBJX0MsIHRoZSBwYXlsb2FkIG9mIHRoZSBjbGllbnQncyBTU0hfTVNHX0tFWElOSVQgKi8KKwkgICAgYnVmX3NldHBvcyhzZXMucGF5bG9hZCwgMCk7CisJICAgIGJ1Zl9wdXRzdHJpbmcoc2VzLmtleGhhc2hidWYsIHNlcy5wYXlsb2FkLT5kYXRhLCBzZXMucGF5bG9hZC0+bGVuKTsKKworCQkvKiBJX1MsIHRoZSBwYXlsb2FkIG9mIHRoZSBzZXJ2ZXIncyBTU0hfTVNHX0tFWElOSVQgKi8KKwkgICAgYnVmX3B1dHN0cmluZyhzZXMua2V4aGFzaGJ1ZiwKKwkJCXNlcy50cmFuc2tleGluaXQtPmRhdGEsIHNlcy50cmFuc2tleGluaXQtPmxlbik7CisKKwkJc2VzLnJlcXVpcmVuZXh0ID0gU1NIX01TR19LRVhESF9JTklUOworCX0KKworCWJ1Zl9mcmVlKHNlcy50cmFuc2tleGluaXQpOworCXNlcy50cmFuc2tleGluaXQgPSBOVUxMOworCS8qIHRoZSByZXN0IG9mIHNlcy5rZXhoYXNoYnVmIHdpbGwgYmUgZG9uZSBhZnRlciBESCBleGNoYW5nZSAqLworCisJc2VzLmtleHN0YXRlLnJlY3ZrZXhpbml0ID0gMTsKKworCVRSQUNFKCgibGVhdmUgcmVjdl9tc2dfa2V4aW5pdCIpKQorfQorCisvKiBJbml0aWFsaXNlcyBhbmQgZ2VuZXJhdGUgb25lIHNpZGUgb2YgdGhlIGRpZmZpZS1oZWxsbWFuIGtleSBleGNoYW5nZSB2YWx1ZXMuCisgKiBTZWUgdGhlIGlldGYtc2Vjc2gtdHJhbnNwb3J0IGRyYWZ0LCBzZWN0aW9uIDYsIGZvciBkZXRhaWxzICovCisvKiBkaF9wdWIgYW5kIGRoX3ByaXYgTVVTVCBiZSBhbHJlYWR5IGluaXRpYWxpc2VkICovCit2b2lkIGdlbl9rZXhkaF92YWxzKG1wX2ludCAqZGhfcHViLCBtcF9pbnQgKmRoX3ByaXYpIHsKKworCURFRl9NUF9JTlQoZGhfcCk7CisJREVGX01QX0lOVChkaF9xKTsKKwlERUZfTVBfSU5UKGRoX2cpOworCisJVFJBQ0UoKCJlbnRlciBzZW5kX21zZ19rZXhkaF9yZXBseSIpKQorCQorCW1fbXBfaW5pdF9tdWx0aSgmZGhfZywgJmRoX3AsICZkaF9xLCBOVUxMKTsKKworCS8qIHJlYWQgdGhlIHByaW1lIGFuZCBnZW5lcmF0b3IqLworCWJ5dGVzX3RvX21wKCZkaF9wLCAodW5zaWduZWQgY2hhciopZGhfcF92YWwsIERIX1BfTEVOKTsKKwkKKwlpZiAobXBfc2V0X2ludCgmZGhfZywgREhfR19WQUwpICE9IE1QX09LQVkpIHsKKwkJZHJvcGJlYXJfZXhpdCgiRGlmZmllLUhlbGxtYW4gZXJyb3IiKTsKKwl9CisKKwkvKiBjYWxjdWxhdGUgcSA9IChwLTEpLzIgKi8KKwkvKiBkaF9wcml2IGlzIGp1c3QgYSB0ZW1wIHZhciBoZXJlICovCisJaWYgKG1wX3N1Yl9kKCZkaF9wLCAxLCBkaF9wcml2KSAhPSBNUF9PS0FZKSB7IAorCQlkcm9wYmVhcl9leGl0KCJEaWZmaWUtSGVsbG1hbiBlcnJvciIpOworCX0KKwlpZiAobXBfZGl2XzIoZGhfcHJpdiwgJmRoX3EpICE9IE1QX09LQVkpIHsKKwkJZHJvcGJlYXJfZXhpdCgiRGlmZmllLUhlbGxtYW4gZXJyb3IiKTsKKwl9CisKKwkvKiBHZW5lcmF0ZSBhIHByaXZhdGUgcG9ydGlvbiAwIDwgZGhfcHJpdiA8IGRoX3EgKi8KKwlnZW5fcmFuZG9tX21waW50KCZkaF9xLCBkaF9wcml2KTsKKworCS8qIGYgPSBnXnkgbW9kIHAgKi8KKwlpZiAobXBfZXhwdG1vZCgmZGhfZywgZGhfcHJpdiwgJmRoX3AsIGRoX3B1YikgIT0gTVBfT0tBWSkgeworCQlkcm9wYmVhcl9leGl0KCJEaWZmaWUtSGVsbG1hbiBlcnJvciIpOworCX0KKwltcF9jbGVhcl9tdWx0aSgmZGhfZywgJmRoX3AsICZkaF9xLCBOVUxMKTsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBmYWlybHkgY29tbW9uIGJldHdlZW4gY2xpZW50L3NlcnZlciwgd2l0aCBzb21lIHN1YnN0aXR1dGlvbgorICogb2YgZGhfZS9kaF9mIGV0Yy4gSGVuY2UgdGhlc2UgYXJndW1lbnRzOgorICogZGhfcHViX3VzIGlzICdlJyBmb3IgdGhlIGNsaWVudCwgJ2YnIGZvciB0aGUgc2VydmVyLiBkaF9wdWJfdGhlbSBpcyAKKyAqIHZpY2UtdmVyc2EuIGRoX3ByaXYgaXMgdGhlIHgveSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGRoX3B1Yl91cyAqLwordm9pZCBrZXhkaF9jb21iX2tleShtcF9pbnQgKmRoX3B1Yl91cywgbXBfaW50ICpkaF9wcml2LCBtcF9pbnQgKmRoX3B1Yl90aGVtLAorCQlzaWduX2tleSAqaG9zdGtleSkgeworCisJbXBfaW50IGRoX3A7CisJbXBfaW50ICpkaF9lID0gTlVMTCwgKmRoX2YgPSBOVUxMOworCWhhc2hfc3RhdGUgaHM7CisKKwkvKiByZWFkIHRoZSBwcmltZSBhbmQgZ2VuZXJhdG9yKi8KKwltX21wX2luaXQoJmRoX3ApOworCWJ5dGVzX3RvX21wKCZkaF9wLCBkaF9wX3ZhbCwgREhfUF9MRU4pOworCisJLyogQ2hlY2sgdGhhdCBkaF9wdWJfdGhlbSAoZGhfZSBvciBkaF9mKSBpcyBpbiB0aGUgcmFuZ2UgWzEsIHAtMV0gKi8KKwlpZiAobXBfY21wKGRoX3B1Yl90aGVtLCAmZGhfcCkgIT0gTVBfTFQgCisJCQl8fCBtcF9jbXBfZChkaF9wdWJfdGhlbSwgMCkgIT0gTVBfR1QpIHsKKwkJZHJvcGJlYXJfZXhpdCgiRGlmZmllLUhlbGxtYW4gZXJyb3IiKTsKKwl9CisJCisJLyogSyA9IGVeeSBtb2QgcCA9IGZeeCBtb2QgcCAqLworCXNlcy5kaF9LID0gKG1wX2ludCopbV9tYWxsb2Moc2l6ZW9mKG1wX2ludCkpOworCW1fbXBfaW5pdChzZXMuZGhfSyk7CisJaWYgKG1wX2V4cHRtb2QoZGhfcHViX3RoZW0sIGRoX3ByaXYsICZkaF9wLCBzZXMuZGhfSykgIT0gTVBfT0tBWSkgeworCQlkcm9wYmVhcl9leGl0KCJEaWZmaWUtSGVsbG1hbiBlcnJvciIpOworCX0KKworCS8qIGNsZWFyIG5vIGxvbmdlciBuZWVkZWQgdmFycyAqLworCW1wX2NsZWFyX211bHRpKCZkaF9wLCBOVUxMKTsKKworCS8qIEZyb20gaGVyZSBvbiwgdGhlIGNvZGUgbmVlZHMgdG8gd29yayB3aXRoIHRoZSBfc2FtZV8gdmFycyBvbiBlYWNoIHNpZGUsCisJICogbm90IHZpY2UtdmVyc2FpbmcgZm9yIGNsaWVudC9zZXJ2ZXIgKi8KKwlpZiAoSVNfRFJPUEJFQVJfQ0xJRU5UKSB7CisJCWRoX2UgPSBkaF9wdWJfdXM7CisJCWRoX2YgPSBkaF9wdWJfdGhlbTsKKwl9IGVsc2UgeworCQlkaF9lID0gZGhfcHViX3RoZW07CisJCWRoX2YgPSBkaF9wdWJfdXM7CisJfSAKKworCS8qIENyZWF0ZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBoYXNoIGJ1ZmZlciwgdG8gZ2VuZXJhdGUgdGhlIGV4Y2hhbmdlIGhhc2ggKi8KKwkvKiBLX1MsIHRoZSBob3N0IGtleSAqLworCWJ1Zl9wdXRfcHViX2tleShzZXMua2V4aGFzaGJ1ZiwgaG9zdGtleSwgc2VzLm5ld2tleXMtPmFsZ29faG9zdGtleSk7CisJLyogZSwgZXhjaGFuZ2UgdmFsdWUgc2VudCBieSB0aGUgY2xpZW50ICovCisJYnVmX3B1dG1waW50KHNlcy5rZXhoYXNoYnVmLCBkaF9lKTsKKwkvKiBmLCBleGNoYW5nZSB2YWx1ZSBzZW50IGJ5IHRoZSBzZXJ2ZXIgKi8KKwlidWZfcHV0bXBpbnQoc2VzLmtleGhhc2hidWYsIGRoX2YpOworCS8qIEssIHRoZSBzaGFyZWQgc2VjcmV0ICovCisJYnVmX3B1dG1waW50KHNlcy5rZXhoYXNoYnVmLCBzZXMuZGhfSyk7CisKKwkvKiBjYWxjdWxhdGUgdGhlIGhhc2ggSCB0byBzaWduICovCisJc2hhMV9pbml0KCZocyk7CisJYnVmX3NldHBvcyhzZXMua2V4aGFzaGJ1ZiwgMCk7CisJc2hhMV9wcm9jZXNzKCZocywgYnVmX2dldHB0cihzZXMua2V4aGFzaGJ1Ziwgc2VzLmtleGhhc2hidWYtPmxlbiksCisJCQlzZXMua2V4aGFzaGJ1Zi0+bGVuKTsKKwlzaGExX2RvbmUoJmhzLCBzZXMuaGFzaCk7CisKKwlidWZfYnVybihzZXMua2V4aGFzaGJ1Zik7CisJYnVmX2ZyZWUoc2VzLmtleGhhc2hidWYpOworCXNlcy5rZXhoYXNoYnVmID0gTlVMTDsKKwkKKwkvKiBmaXJzdCB0aW1lIGFyb3VuZCwgd2Ugc2V0IHRoZSBzZXNzaW9uX2lkIHRvIEggKi8KKwlpZiAoc2VzLnNlc3Npb25faWQgPT0gTlVMTCkgeworCQkvKiBjcmVhdGUgdGhlIHNlc3Npb25faWQsIHRoaXMgbmV2ZXIgbmVlZHMgZnJlZWluZyAqLworCQlzZXMuc2Vzc2lvbl9pZCA9ICh1bnNpZ25lZCBjaGFyKiltX21hbGxvYyhTSEExX0hBU0hfU0laRSk7CisJCW1lbWNweShzZXMuc2Vzc2lvbl9pZCwgc2VzLmhhc2gsIFNIQTFfSEFTSF9TSVpFKTsKKwl9Cit9CisKKy8qIHJlYWQgdGhlIG90aGVyIHNpZGUncyBhbGdvIGxpc3QuIGJ1Zl9tYXRjaF9hbGdvIGlzIGEgY2FsbGJhY2sgdG8gbWF0Y2gKKyAqIGFsZ29zIGZvciB0aGUgY2xpZW50IG9yIHNlcnZlci4gKi8KK3N0YXRpYyB2b2lkIHJlYWRfa2V4X2FsZ29zKCkgeworCisJLyogZm9yIGFzeW1tZXRyeSAqLworCWFsZ29fdHlwZSAqIGMyc19oYXNoX2FsZ28gPSBOVUxMOworCWFsZ29fdHlwZSAqIHMyY19oYXNoX2FsZ28gPSBOVUxMOworCWFsZ29fdHlwZSAqIGMyc19jaXBoZXJfYWxnbyA9IE5VTEw7CisJYWxnb190eXBlICogczJjX2NpcGhlcl9hbGdvID0gTlVMTDsKKwlhbGdvX3R5cGUgKiBjMnNfY29tcF9hbGdvID0gTlVMTDsKKwlhbGdvX3R5cGUgKiBzMmNfY29tcF9hbGdvID0gTlVMTDsKKwkvKiB0aGUgZ2VuZXJpYyBvbmUgKi8KKwlhbGdvX3R5cGUgKiBhbGdvID0gTlVMTDsKKworCS8qIHdoaWNoIGFsZ28gY291bGRuJ3QgbWF0Y2ggKi8KKwljaGFyICogZXJyYWxnbyA9IE5VTEw7CisKKwlpbnQgZ29vZGd1ZXNzID0gMDsKKwlpbnQgYWxsZ29vZCA9IDE7IC8qIHdlIEFORCB0aGlzIHdpdGggZWFjaCBnb29kZ3Vlc3MgYW5kIHNlZSBpZiBpdHMgc3RpbGwKKwkJCQkJCXRydWUgYWZ0ZXIgKi8KKworCWJ1Zl9pbmNycG9zKHNlcy5wYXlsb2FkLCAxNik7IC8qIHN0YXJ0IGFmdGVyIHRoZSBjb29raWUgKi8KKworCXNlcy5uZXdrZXlzID0gKHN0cnVjdCBrZXlfY29udGV4dCopbV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXlfY29udGV4dCkpOworCisJLyoga2V4X2FsZ29yaXRobXMgKi8KKwlhbGdvID0gc2VzLmJ1Zl9tYXRjaF9hbGdvKHNlcy5wYXlsb2FkLCBzc2hrZXgsICZnb29kZ3Vlc3MpOworCWFsbGdvb2QgJj0gZ29vZGd1ZXNzOworCWlmIChhbGdvID09IE5VTEwpIHsKKwkJZXJyYWxnbyA9ICJrZXgiOworCQlnb3RvIGVycm9yOworCX0KKwlUUkFDRSgoImtleCBhbGdvICVzIiwgYWxnby0+bmFtZSkpCisJc2VzLm5ld2tleXMtPmFsZ29fa2V4ID0gYWxnby0+dmFsOworCisJLyogc2VydmVyX2hvc3Rfa2V5X2FsZ29yaXRobXMgKi8KKwlhbGdvID0gc2VzLmJ1Zl9tYXRjaF9hbGdvKHNlcy5wYXlsb2FkLCBzc2hob3N0a2V5LCAmZ29vZGd1ZXNzKTsKKwlhbGxnb29kICY9IGdvb2RndWVzczsKKwlpZiAoYWxnbyA9PSBOVUxMKSB7CisJCWVycmFsZ28gPSAiaG9zdGtleSI7CisJCWdvdG8gZXJyb3I7CisJfQorCVRSQUNFKCgiaG9zdGtleSBhbGdvICVzIiwgYWxnby0+bmFtZSkpCisJc2VzLm5ld2tleXMtPmFsZ29faG9zdGtleSA9IGFsZ28tPnZhbDsKKworCS8qIGVuY3J5cHRpb25fYWxnb3JpdGhtc19jbGllbnRfdG9fc2VydmVyICovCisJYzJzX2NpcGhlcl9hbGdvID0gc2VzLmJ1Zl9tYXRjaF9hbGdvKHNlcy5wYXlsb2FkLCBzc2hjaXBoZXJzLCAmZ29vZGd1ZXNzKTsKKwlpZiAoYzJzX2NpcGhlcl9hbGdvID09IE5VTEwpIHsKKwkJZXJyYWxnbyA9ICJlbmMgYy0+cyI7CisJCWdvdG8gZXJyb3I7CisJfQorCVRSQUNFKCgiZW5jIGMycyBpcyAgJXMiLCBjMnNfY2lwaGVyX2FsZ28tPm5hbWUpKQorCisJLyogZW5jcnlwdGlvbl9hbGdvcml0aG1zX3NlcnZlcl90b19jbGllbnQgKi8KKwlzMmNfY2lwaGVyX2FsZ28gPSBzZXMuYnVmX21hdGNoX2FsZ28oc2VzLnBheWxvYWQsIHNzaGNpcGhlcnMsICZnb29kZ3Vlc3MpOworCWlmIChzMmNfY2lwaGVyX2FsZ28gPT0gTlVMTCkgeworCQllcnJhbGdvID0gImVuYyBzLT5jIjsKKwkJZ290byBlcnJvcjsKKwl9CisJVFJBQ0UoKCJlbmMgczJjIGlzICAlcyIsIHMyY19jaXBoZXJfYWxnby0+bmFtZSkpCisKKwkvKiBtYWNfYWxnb3JpdGhtc19jbGllbnRfdG9fc2VydmVyICovCisJYzJzX2hhc2hfYWxnbyA9IHNlcy5idWZfbWF0Y2hfYWxnbyhzZXMucGF5bG9hZCwgc3NoaGFzaGVzLCAmZ29vZGd1ZXNzKTsKKwlpZiAoYzJzX2hhc2hfYWxnbyA9PSBOVUxMKSB7CisJCWVycmFsZ28gPSAibWFjIGMtPnMiOworCQlnb3RvIGVycm9yOworCX0KKwlUUkFDRSgoImhhc2ggYzJzIGlzICAlcyIsIGMyc19oYXNoX2FsZ28tPm5hbWUpKQorCisJLyogbWFjX2FsZ29yaXRobXNfc2VydmVyX3RvX2NsaWVudCAqLworCXMyY19oYXNoX2FsZ28gPSBzZXMuYnVmX21hdGNoX2FsZ28oc2VzLnBheWxvYWQsIHNzaGhhc2hlcywgJmdvb2RndWVzcyk7CisJaWYgKHMyY19oYXNoX2FsZ28gPT0gTlVMTCkgeworCQllcnJhbGdvID0gIm1hYyBzLT5jIjsKKwkJZ290byBlcnJvcjsKKwl9CisJVFJBQ0UoKCJoYXNoIHMyYyBpcyAgJXMiLCBzMmNfaGFzaF9hbGdvLT5uYW1lKSkKKworCS8qIGNvbXByZXNzaW9uX2FsZ29yaXRobXNfY2xpZW50X3RvX3NlcnZlciAqLworCWMyc19jb21wX2FsZ28gPSBzZXMuYnVmX21hdGNoX2FsZ28oc2VzLnBheWxvYWQsIHNzaGNvbXByZXNzLCAmZ29vZGd1ZXNzKTsKKwlpZiAoYzJzX2NvbXBfYWxnbyA9PSBOVUxMKSB7CisJCWVycmFsZ28gPSAiY29tcCBjLT5zIjsKKwkJZ290byBlcnJvcjsKKwl9CisJVFJBQ0UoKCJoYXNoIGMycyBpcyAgJXMiLCBjMnNfY29tcF9hbGdvLT5uYW1lKSkKKworCS8qIGNvbXByZXNzaW9uX2FsZ29yaXRobXNfc2VydmVyX3RvX2NsaWVudCAqLworCXMyY19jb21wX2FsZ28gPSBzZXMuYnVmX21hdGNoX2FsZ28oc2VzLnBheWxvYWQsIHNzaGNvbXByZXNzLCAmZ29vZGd1ZXNzKTsKKwlpZiAoczJjX2NvbXBfYWxnbyA9PSBOVUxMKSB7CisJCWVycmFsZ28gPSAiY29tcCBzLT5jIjsKKwkJZ290byBlcnJvcjsKKwl9CisJVFJBQ0UoKCJoYXNoIHMyYyBpcyAgJXMiLCBzMmNfY29tcF9hbGdvLT5uYW1lKSkKKworCS8qIGxhbmd1YWdlc19jbGllbnRfdG9fc2VydmVyICovCisJYnVmX2VhdHN0cmluZyhzZXMucGF5bG9hZCk7CisKKwkvKiBsYW5ndWFnZXNfc2VydmVyX3RvX2NsaWVudCAqLworCWJ1Zl9lYXRzdHJpbmcoc2VzLnBheWxvYWQpOworCisJLyogZmlyc3Rfa2V4X3BhY2tldF9mb2xsb3dzICovCisJaWYgKGJ1Zl9nZXRib29sKHNlcy5wYXlsb2FkKSkgeworCQlzZXMua2V4c3RhdGUuZmlyc3Rmb2xsb3dzID0gMTsKKwkJLyogaWYgdGhlIGd1ZXNzIHdhc24ndCBnb29kLCB3ZSBpZ25vcmUgdGhlIHBhY2tldCBzZW50ICovCisJCWlmICghYWxsZ29vZCkgeworCQkJc2VzLmlnbm9yZW5leHQgPSAxOworCQl9CisJfQorCisJLyogSGFuZGxlIHRoZSBhc3ltbWV0cnkgKi8KKwlpZiAoSVNfRFJPUEJFQVJfQ0xJRU5UKSB7CisJCXNlcy5uZXdrZXlzLT5yZWN2X2FsZ29fY3J5cHQgPSAKKwkJCShzdHJ1Y3QgZHJvcGJlYXJfY2lwaGVyKilzMmNfY2lwaGVyX2FsZ28tPmRhdGE7CisJCXNlcy5uZXdrZXlzLT50cmFuc19hbGdvX2NyeXB0ID0gCisJCQkoc3RydWN0IGRyb3BiZWFyX2NpcGhlciopYzJzX2NpcGhlcl9hbGdvLT5kYXRhOworCQlzZXMubmV3a2V5cy0+cmVjdl9hbGdvX21hYyA9IAorCQkJKHN0cnVjdCBkcm9wYmVhcl9oYXNoKilzMmNfaGFzaF9hbGdvLT5kYXRhOworCQlzZXMubmV3a2V5cy0+dHJhbnNfYWxnb19tYWMgPSAKKwkJCShzdHJ1Y3QgZHJvcGJlYXJfaGFzaCopYzJzX2hhc2hfYWxnby0+ZGF0YTsKKwkJc2VzLm5ld2tleXMtPnJlY3ZfYWxnb19jb21wID0gczJjX2NvbXBfYWxnby0+dmFsOworCQlzZXMubmV3a2V5cy0+dHJhbnNfYWxnb19jb21wID0gYzJzX2NvbXBfYWxnby0+dmFsOworCX0gZWxzZSB7CisJCS8qIFNFUlZFUiAqLworCQlzZXMubmV3a2V5cy0+cmVjdl9hbGdvX2NyeXB0ID0gCisJCQkoc3RydWN0IGRyb3BiZWFyX2NpcGhlciopYzJzX2NpcGhlcl9hbGdvLT5kYXRhOworCQlzZXMubmV3a2V5cy0+dHJhbnNfYWxnb19jcnlwdCA9IAorCQkJKHN0cnVjdCBkcm9wYmVhcl9jaXBoZXIqKXMyY19jaXBoZXJfYWxnby0+ZGF0YTsKKwkJc2VzLm5ld2tleXMtPnJlY3ZfYWxnb19tYWMgPSAKKwkJCShzdHJ1Y3QgZHJvcGJlYXJfaGFzaCopYzJzX2hhc2hfYWxnby0+ZGF0YTsKKwkJc2VzLm5ld2tleXMtPnRyYW5zX2FsZ29fbWFjID0gCisJCQkoc3RydWN0IGRyb3BiZWFyX2hhc2gqKXMyY19oYXNoX2FsZ28tPmRhdGE7CisJCXNlcy5uZXdrZXlzLT5yZWN2X2FsZ29fY29tcCA9IGMyc19jb21wX2FsZ28tPnZhbDsKKwkJc2VzLm5ld2tleXMtPnRyYW5zX2FsZ29fY29tcCA9IHMyY19jb21wX2FsZ28tPnZhbDsKKwl9CisKKwkvKiByZXNlcnZlZCBmb3IgZnV0dXJlIGV4dGVuc2lvbnMgKi8KKwlidWZfZ2V0aW50KHNlcy5wYXlsb2FkKTsKKwlyZXR1cm47CisKK2Vycm9yOgorCWRyb3BiZWFyX2V4aXQoIm5vIG1hdGNoaW5nIGFsZ28gJXMiLCBlcnJhbGdvKTsKK30KZGlmZiAtLWdpdCBhL2NvbW1vbi1ydW5vcHRzLmMgYi9jb21tb24tcnVub3B0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZTAzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24tcnVub3B0cy5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgInJ1bm9wdHMuaCIKKyNpbmNsdWRlICJzaWdua2V5LmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAiYXV0aC5oIgorCitydW5vcHRzIG9wdHM7IC8qIEdMT0JBTCAqLworCisvKiByZXR1cm5zIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgYW5kIHRoZSBrZXl0eXBlIGluICp0eXBlLiBJZiB3ZSB3YW50CisgKiB0byByZXN0cmljdCB0aGUgdHlwZSwgdHlwZSBjYW4gY29udGFpbiBhIHR5cGUgdG8gcmV0dXJuICovCitpbnQgcmVhZGhvc3RrZXkoY29uc3QgY2hhciAqIGZpbGVuYW1lLCBzaWduX2tleSAqIGhvc3RrZXksIGludCAqdHlwZSkgeworCisJaW50IHJldCA9IERST1BCRUFSX0ZBSUxVUkU7CisJYnVmZmVyICpidWY7CisKKwlidWYgPSBidWZfbmV3KE1BWF9QUklWS0VZX1NJWkUpOworCisJaWYgKGJ1Zl9yZWFkZmlsZShidWYsIGZpbGVuYW1lKSA9PSBEUk9QQkVBUl9GQUlMVVJFKSB7CisJCWdvdG8gb3V0OworCX0KKwlidWZfc2V0cG9zKGJ1ZiwgMCk7CisJaWYgKGJ1Zl9nZXRfcHJpdl9rZXkoYnVmLCBob3N0a2V5LCB0eXBlKSA9PSBEUk9QQkVBUl9GQUlMVVJFKSB7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IERST1BCRUFSX1NVQ0NFU1M7CitvdXQ6CisKKwlidWZfYnVybihidWYpOworCWJ1Zl9mcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2NvbW1vbi1zZXNzaW9uLmMgYi9jb21tb24tc2Vzc2lvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlMWFiZjMKLS0tIC9kZXYvbnVsbAorKysgYi9jb21tb24tc2Vzc2lvbi5jCkBAIC0wLDAgKzEsMzg0IEBACisvKgorICogRHJvcGJlYXIgLSBhIFNTSDIgc2VydmVyCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJzZXNzaW9uLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAicGFja2V0LmgiCisjaW5jbHVkZSAiYWxnby5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgImRzcy5oIgorI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgInJhbmRvbS5oIgorI2luY2x1ZGUgImtleC5oIgorI2luY2x1ZGUgImNoYW5uZWwuaCIKKyNpbmNsdWRlICJhdG9taWNpby5oIgorCitzdGF0aWMgdm9pZCBjaGVja3RpbWVvdXRzKCk7CitzdGF0aWMgaW50IGlkZW50X3JlYWRsbihpbnQgZmQsIGNoYXIqIGJ1ZiwgaW50IGNvdW50KTsKKworc3RydWN0IHNzaHNlc3Npb24gc2VzOyAvKiBHTE9CQUwgKi8KKworLyogbmVlZCB0byBrbm93IGlmIHRoZSBzZXNzaW9uIHN0cnVjdCBoYXMgYmVlbiBpbml0aWFsaXNlZCwgdGhpcyB3YXkgaXNuJ3QgdGhlCisgKiBjbGVhbmVzdCwgYnV0IHdvcmtzIE9LICovCitpbnQgc2Vzc2luaXRkb25lID0gMDsgLyogR0xPQkFMICovCisKKy8qIHRoaXMgaXMgc2V0IHdoZW4gd2UgZ2V0IFNJR0lOVCBvciBTSUdURVJNLCB0aGUgaGFuZGxlciBpcyBpbiBtYWluLmMgKi8KK2ludCBleGl0ZmxhZyA9IDA7IC8qIEdMT0JBTCAqLworCisKKworLyogY2FsbGVkIG9ubHkgYXQgdGhlIHN0YXJ0IG9mIGEgc2Vzc2lvbiwgc2V0IHVwIGluaXRpYWwgc3RhdGUgKi8KK3ZvaWQgY29tbW9uX3Nlc3Npb25faW5pdChpbnQgc29jaywgY2hhciogcmVtb3RlaG9zdCkgeworCisJVFJBQ0UoKCJlbnRlciBzZXNzaW9uX2luaXQiKSkKKworCXNlcy5yZW1vdGVob3N0ID0gcmVtb3RlaG9zdDsKKworCXNlcy5zb2NrID0gc29jazsKKwlzZXMubWF4ZmQgPSBzb2NrOworCisJc2VzLmNvbm5lY3R0aW1lb3V0ID0gMDsKKwkKKwlpZiAocGlwZShzZXMuc2lnbmFsX3BpcGUpIDwgMCkgeworCQlkcm9wYmVhcl9leGl0KCJzaWduYWwgcGlwZSBmYWlsZWQiKTsKKwl9CisJc2V0bm9uYmxvY2tpbmcoc2VzLnNpZ25hbF9waXBlWzBdKTsKKwlzZXRub25ibG9ja2luZyhzZXMuc2lnbmFsX3BpcGVbMV0pOworCQorCWtleGZpcnN0aW5pdGlhbGlzZSgpOyAvKiBpbml0aWFsaXNlIHRoZSBrZXggc3RhdGUgKi8KKworCXNlcy53cml0ZXBheWxvYWQgPSBidWZfbmV3KE1BWF9UUkFOU19QQVlMT0FEX0xFTik7CisJc2VzLnRyYW5zc2VxID0gMDsKKworCXNlcy5yZWFkYnVmID0gTlVMTDsKKwlzZXMuZGVjcnlwdHJlYWRidWYgPSBOVUxMOworCXNlcy5wYXlsb2FkID0gTlVMTDsKKwlzZXMucmVjdnNlcSA9IDA7CisKKwlpbml0cXVldWUoJnNlcy53cml0ZXF1ZXVlKTsKKworCXNlcy5yZXF1aXJlbmV4dCA9IFNTSF9NU0dfS0VYSU5JVDsKKwlzZXMuZGF0YWFsbG93ZWQgPSAwOyAvKiBkb24ndCBzZW5kIGRhdGEgeWV0LCB3ZSdsbCB3YWl0IHVudGlsIGFmdGVyIGtleCAqLworCXNlcy5pZ25vcmVuZXh0ID0gMDsKKwlzZXMubGFzdHBhY2tldCA9IDA7CisKKwkvKiBzZXQgYWxsIHRoZSBhbGdvcyB0byBub25lICovCisJc2VzLmtleXMgPSAoc3RydWN0IGtleV9jb250ZXh0KiltX21hbGxvYyhzaXplb2Yoc3RydWN0IGtleV9jb250ZXh0KSk7CisJc2VzLm5ld2tleXMgPSBOVUxMOworCXNlcy5rZXlzLT5yZWN2X2FsZ29fY3J5cHQgPSAmZHJvcGJlYXJfbm9jaXBoZXI7CisJc2VzLmtleXMtPnRyYW5zX2FsZ29fY3J5cHQgPSAmZHJvcGJlYXJfbm9jaXBoZXI7CisJCisJc2VzLmtleXMtPnJlY3ZfYWxnb19tYWMgPSAmZHJvcGJlYXJfbm9oYXNoOworCXNlcy5rZXlzLT50cmFuc19hbGdvX21hYyA9ICZkcm9wYmVhcl9ub2hhc2g7CisKKwlzZXMua2V5cy0+YWxnb19rZXggPSAtMTsKKwlzZXMua2V5cy0+YWxnb19ob3N0a2V5ID0gLTE7CisJc2VzLmtleXMtPnJlY3ZfYWxnb19jb21wID0gRFJPUEJFQVJfQ09NUF9OT05FOworCXNlcy5rZXlzLT50cmFuc19hbGdvX2NvbXAgPSBEUk9QQkVBUl9DT01QX05PTkU7CisKKyNpZm5kZWYgRElTQUJMRV9aTElCCisJc2VzLmtleXMtPnJlY3ZfenN0cmVhbSA9IE5VTEw7CisJc2VzLmtleXMtPnRyYW5zX3pzdHJlYW0gPSBOVUxMOworI2VuZGlmCisKKwkvKiBrZXkgZXhjaGFuZ2UgYnVmZmVycyAqLworCXNlcy5zZXNzaW9uX2lkID0gTlVMTDsKKwlzZXMua2V4aGFzaGJ1ZiA9IE5VTEw7CisJc2VzLnRyYW5za2V4aW5pdCA9IE5VTEw7CisJc2VzLmRoX0sgPSBOVUxMOworCXNlcy5yZW1vdGVpZGVudCA9IE5VTEw7CisKKwlzZXMuY2hhbnR5cGVzID0gTlVMTDsKKworCXNlcy5hbGxvd3ByaXZwb3J0ID0gMDsKKworCVRSQUNFKCgibGVhdmUgc2Vzc2lvbl9pbml0IikpCit9CisKK3ZvaWQgc2Vzc2lvbl9sb29wKHZvaWQoKmxvb3BoYW5kbGVyKSgpKSB7CisKKwlmZF9zZXQgcmVhZGZkLCB3cml0ZWZkOworCXN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisJaW50IHZhbDsKKworCS8qIG1haW4gbG9vcCwgc2VsZWN0KClzIGZvciBhbGwgc29ja2V0cyBpbiB1c2UgKi8KKwlmb3IoOzspIHsKKworCQl0aW1lb3V0LnR2X3NlYyA9IFNFTEVDVF9USU1FT1VUOworCQl0aW1lb3V0LnR2X3VzZWMgPSAwOworCQlGRF9aRVJPKCZ3cml0ZWZkKTsKKwkJRkRfWkVSTygmcmVhZGZkKTsKKwkJZHJvcGJlYXJfYXNzZXJ0KHNlcy5wYXlsb2FkID09IE5VTEwpOworCQlpZiAoc2VzLnNvY2sgIT0gLTEpIHsKKwkJCUZEX1NFVChzZXMuc29jaywgJnJlYWRmZCk7CisJCQlpZiAoIWlzZW1wdHkoJnNlcy53cml0ZXF1ZXVlKSkgeworCQkJCUZEX1NFVChzZXMuc29jaywgJndyaXRlZmQpOworCQkJfQorCQl9CisJCQorCQkvKiBXZSBnZXQgd29rZW4gdXAgd2hlbiBzaWduYWwgaGFuZGxlcnMgd3JpdGUgdG8gdGhpcyBwaXBlLgorCQkgICBTSUdDSExEIGluIHN2ci1jaGFuc2Vzc2lvbiBpcyB0aGUgb25seSBvbmUgY3VycmVudGx5LiAqLworCQlGRF9TRVQoc2VzLnNpZ25hbF9waXBlWzBdLCAmcmVhZGZkKTsKKworCQkvKiBzZXQgdXAgZm9yIGNoYW5uZWxzIHdoaWNoIHJlcXVpcmUgcmVhZGluZy93cml0aW5nICovCisJCWlmIChzZXMuZGF0YWFsbG93ZWQpIHsKKwkJCXNldGNoYW5uZWxmZHMoJnJlYWRmZCwgJndyaXRlZmQpOworCQl9CisJCXZhbCA9IHNlbGVjdChzZXMubWF4ZmQrMSwgJnJlYWRmZCwgJndyaXRlZmQsIE5VTEwsICZ0aW1lb3V0KTsKKworCQlpZiAoZXhpdGZsYWcpIHsKKwkJCWRyb3BiZWFyX2V4aXQoIlRlcm1pbmF0ZWQgYnkgc2lnbmFsIik7CisJCX0KKwkJCisJCWlmICh2YWwgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJCQlkcm9wYmVhcl9leGl0KCJFcnJvciBpbiBzZWxlY3QiKTsKKwkJfQorCisJCWlmICh2YWwgPD0gMCkgeworCQkJLyogSWYgd2Ugd2VyZSBpbnRlcnJ1cHRlZCBvciB0aGUgc2VsZWN0IHRpbWVkIG91dCwgd2Ugc3RpbGwKKwkJCSAqIHdhbnQgdG8gaXRlcmF0ZSBvdmVyIGNoYW5uZWxzIGV0YyBmb3IgcmVhZGluZywgdG8gaGFuZGxlCisJCQkgKiBzZXJ2ZXIgcHJvY2Vzc2VzIGV4aXRpbmcgZXRjLiAKKwkJCSAqIFdlIGRvbid0IHdhbnQgdG8gcmVhZC93cml0ZSBGRHMuICovCisJCQlGRF9aRVJPKCZ3cml0ZWZkKTsKKwkJCUZEX1pFUk8oJnJlYWRmZCk7CisJCX0KKwkJCisJCS8qIFdlJ2xsIGp1c3QgZW1wdHkgb3V0IHRoZSBwaXBlIGlmIHJlcXVpcmVkLiBXZSBkb24ndCBkbworCQlhbnkgdGhpbmcgd2l0aCB0aGUgZGF0YSwgc2luY2UgdGhlIHBpcGUncyBwdXJwb3NlIGlzIHB1cmVseSB0bworCQl3YWtlIHVwIHRoZSBzZWxlY3QoKSBhYm92ZS4gKi8KKwkJaWYgKEZEX0lTU0VUKHNlcy5zaWduYWxfcGlwZVswXSwgJnJlYWRmZCkpIHsKKwkJCWNoYXIgeDsKKwkJCXdoaWxlIChyZWFkKHNlcy5zaWduYWxfcGlwZVswXSwgJngsIDEpID4gMCkge30KKwkJfQorCisJCS8qIGNoZWNrIGZvciBhdXRoIHRpbWVvdXQsIHJla2V5aW5nIHJlcXVpcmVkIGV0YyAqLworCQljaGVja3RpbWVvdXRzKCk7CisKKwkJLyogcHJvY2VzcyBzZXNzaW9uIHNvY2tldCdzIGluY29taW5nL291dGdvaW5nIGRhdGEgKi8KKwkJaWYgKHNlcy5zb2NrICE9IC0xKSB7CisJCQlpZiAoRkRfSVNTRVQoc2VzLnNvY2ssICZ3cml0ZWZkKSAmJiAhaXNlbXB0eSgmc2VzLndyaXRlcXVldWUpKSB7CisJCQkJd3JpdGVfcGFja2V0KCk7CisJCQl9CisKKwkJCWlmIChGRF9JU1NFVChzZXMuc29jaywgJnJlYWRmZCkpIHsKKwkJCQlyZWFkX3BhY2tldCgpOworCQkJfQorCQkJCisJCQkvKiBQcm9jZXNzIHRoZSBkZWNyeXB0ZWQgcGFja2V0LiBBZnRlciB0aGlzLCB0aGUgcmVhZCBidWZmZXIKKwkJCSAqIHdpbGwgYmUgcmVhZHkgZm9yIGEgbmV3IHBhY2tldCAqLworCQkJaWYgKHNlcy5wYXlsb2FkICE9IE5VTEwpIHsKKwkJCQlwcm9jZXNzX3BhY2tldCgpOworCQkJfQorCQl9CisKKwkJLyogcHJvY2VzcyBwaXBlcyBldGMgZm9yIHRoZSBjaGFubmVscywgc2VzLmRhdGFhbGxvd2VkID09IDAKKwkJICogZHVyaW5nIHJla2V5aW5nICkgKi8KKwkJaWYgKHNlcy5kYXRhYWxsb3dlZCkgeworCQkJY2hhbm5lbGlvKCZyZWFkZmQsICZ3cml0ZWZkKTsKKwkJfQorCisJCWlmIChsb29waGFuZGxlcikgeworCQkJbG9vcGhhbmRsZXIoKTsKKwkJfQorCisJfSAvKiBmb3IoOzspICovCisJCisJLyogTm90IHJlYWNoZWQgKi8KK30KKworLyogY2xlYW4gdXAgYSBzZXNzaW9uIG9uIGV4aXQgKi8KK3ZvaWQgY29tbW9uX3Nlc3Npb25fY2xlYW51cCgpIHsKKwkKKwlUUkFDRSgoImVudGVyIHNlc3Npb25fY2xlYW51cCIpKQorCQorCS8qIHdlIGNhbid0IGNsZWFudXAgaWYgd2UgZG9uJ3Qga25vdyB0aGUgc2Vzc2lvbiBzdGF0ZSAqLworCWlmICghc2Vzc2luaXRkb25lKSB7CisJCVRSQUNFKCgibGVhdmUgc2Vzc2lvbl9jbGVhbnVwOiAhc2Vzc2luaXRkb25lIikpCisJCXJldHVybjsKKwl9CisJCisJbV9mcmVlKHNlcy5zZXNzaW9uX2lkKTsKKwltX2J1cm4oc2VzLmtleXMsIHNpemVvZihzdHJ1Y3Qga2V5X2NvbnRleHQpKTsKKwltX2ZyZWUoc2VzLmtleXMpOworCisJY2hhbmNsZWFudXAoKTsKKworCVRSQUNFKCgibGVhdmUgc2Vzc2lvbl9jbGVhbnVwIikpCit9CisKKwordm9pZCBzZXNzaW9uX2lkZW50aWZpY2F0aW9uKCkgeworCisJLyogbWF4IGxlbmd0aCBvZiAyNTUgY2hhcnMgKi8KKwljaGFyIGxpbmVidWZbMjU2XTsKKwlpbnQgbGVuID0gMDsKKwljaGFyIGRvbmUgPSAwOworCWludCBpOworCisJLyogd3JpdGUgb3VyIHZlcnNpb24gc3RyaW5nLCB0aGlzIGJsb2NrcyAqLworCWlmIChhdG9taWNpbyh3cml0ZSwgc2VzLnNvY2ssIExPQ0FMX0lERU5UICJcclxuIiwKKwkJCQlzdHJsZW4oTE9DQUxfSURFTlQgIlxyXG4iKSkgPT0gRFJPUEJFQVJfRkFJTFVSRSkgeworCQlzZXMucmVtb3RlY2xvc2VkKCk7CisJfQorCisgICAgLyogSWYgdGhleSBzZW5kIG1vcmUgdGhhbiA1MCBsaW5lcywgc29tZXRoaW5nIGlzIHdyb25nICovCisJZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsKKwkJbGVuID0gaWRlbnRfcmVhZGxuKHNlcy5zb2NrLCBsaW5lYnVmLCBzaXplb2YobGluZWJ1ZikpOworCisJCWlmIChsZW4gPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJCQkvKiBJdCBmYWlsZWQgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGxlbiA+PSA0ICYmIG1lbWNtcChsaW5lYnVmLCAiU1NILSIsIDQpID09IDApIHsKKwkJCS8qIHN0YXJ0IG9mIGxpbmUgbWF0Y2hlcyAqLworCQkJZG9uZSA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZG9uZSkgeworCQlUUkFDRSgoImVycjogJXMgZm9yICclcydcbiIsIHN0cmVycm9yKGVycm5vKSwgbGluZWJ1ZikpCisJCXNlcy5yZW1vdGVjbG9zZWQoKTsKKwl9IGVsc2UgeworCQkvKiBsaW5lYnVmIGlzIGFscmVhZHkgbnVsbCB0ZXJtaW5hdGVkICovCisJCXNlcy5yZW1vdGVpZGVudCA9IG1fbWFsbG9jKGxlbik7CisJCW1lbWNweShzZXMucmVtb3RlaWRlbnQsIGxpbmVidWYsIGxlbik7CisJfQorCisgICAgLyogU2hhbGwgYXNzdW1lIHRoYXQgMi54IHdpbGwgYmUgYmFja3dhcmRzIGNvbXBhdGlibGUuICovCisgICAgaWYgKHN0cm5jbXAoc2VzLnJlbW90ZWlkZW50LCAiU1NILTIuIiwgNikgIT0gMAorICAgICAgICAgICAgJiYgc3RybmNtcChzZXMucmVtb3RlaWRlbnQsICJTU0gtMS45OS0iLCA5KSAhPSAwKSB7CisgICAgICAgIGRyb3BiZWFyX2V4aXQoIkluY29tcGF0aWJsZSByZW1vdGUgdmVyc2lvbiAnJXMnIiwgc2VzLnJlbW90ZWlkZW50KTsKKyAgICB9CisKKwlUUkFDRSgoInJlbW90ZWlkZW50OiAlcyIsIHNlcy5yZW1vdGVpZGVudCkpCisKK30KKworLyogcmV0dXJucyB0aGUgbGVuZ3RoIGluY2x1ZGluZyBudWxsLXRlcm1pbmF0aW5nIHplcm8gb24gc3VjY2VzcywKKyAqIG9yIC0xIG9uIGZhaWx1cmUgKi8KK3N0YXRpYyBpbnQgaWRlbnRfcmVhZGxuKGludCBmZCwgY2hhciogYnVmLCBpbnQgY291bnQpIHsKKwkKKwljaGFyIGluOworCWludCBwb3MgPSAwOworCWludCBudW0gPSAwOworCWZkX3NldCBmZHM7CisJc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKworCVRSQUNFKCgiZW50ZXIgaWRlbnRfcmVhZGxuIikpCisKKwlpZiAoY291bnQgPCAxKSB7CisJCXJldHVybiAtMTsKKwl9CisKKwlGRF9aRVJPKCZmZHMpOworCisJLyogc2VsZWN0IHNpbmNlIGl0J3MgYSBub24tYmxvY2tpbmcgZmQgKi8KKwkKKwkvKiBsZWF2ZSBzcGFjZSB0byBudWxsLXRlcm1pbmF0ZSAqLworCXdoaWxlIChwb3MgPCBjb3VudC0xKSB7CisKKwkJRkRfU0VUKGZkLCAmZmRzKTsKKworCQl0aW1lb3V0LnR2X3NlYyA9IDE7CisJCXRpbWVvdXQudHZfdXNlYyA9IDA7CisJCWlmIChzZWxlY3QoZmQrMSwgJmZkcywgTlVMTCwgTlVMTCwgJnRpbWVvdXQpIDwgMCkgeworCQkJaWYgKGVycm5vID09IEVJTlRSKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlUUkFDRSgoImxlYXZlIGlkZW50X3JlYWRsbjogc2VsZWN0IGVycm9yIikpCisJCQlyZXR1cm4gLTE7CisJCX0KKworCQljaGVja3RpbWVvdXRzKCk7CisJCQorCQkvKiBIYXZlIHRvIGdvIG9uZSBieXRlIGF0IGEgdGltZSwgc2luY2Ugd2UgZG9uJ3Qgd2FudCB0byByZWFkIHBhc3QKKwkJICogdGhlIGVuZCwgYW5kIGhhdmUgdG8gc29tZWhvdyBzaG92ZSBieXRlcyBiYWNrIGludG8gdGhlIG5vcm1hbAorCQkgKiBwYWNrZXQgcmVhZGVyICovCisJCWlmIChGRF9JU1NFVChmZCwgJmZkcykpIHsKKwkJCW51bSA9IHJlYWQoZmQsICZpbiwgMSk7CisJCQkvKiBhICJcbiIgaXMgYSBuZXdsaW5lLCAiXHIiIHdlIHdhbnQgdG8gcmVhZCBpbiBhbmQga2VlcCBnb2luZworCQkJICogc28gdGhhdCBpdCB3b24ndCBiZSByZWFkIGFzIHBhcnQgb2YgdGhlIG5leHQgbGluZSAqLworCQkJaWYgKG51bSA8IDApIHsKKwkJCQkvKiBlcnJvciAqLworCQkJCWlmIChlcnJubyA9PSBFSU5UUikgeworCQkJCQljb250aW51ZTsgLyogbm90IGEgcmVhbCBlcnJvciAqLworCQkJCX0KKwkJCQlUUkFDRSgoImxlYXZlIGlkZW50X3JlYWRsbjogcmVhZCBlcnJvciIpKQorCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWlmIChudW0gPT0gMCkgeworCQkJCS8qIEVPRiAqLworCQkJCVRSQUNFKCgibGVhdmUgaWRlbnRfcmVhZGxuOiBFT0YiKSkKKwkJCQlyZXR1cm4gLTE7CisJCQl9CisJCQlpZiAoaW4gPT0gJ1xuJykgeworCQkJCS8qIGVuZCBvZiBpZGVudCBzdHJpbmcgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIHdlIGRvbid0IHdhbnQgdG8gaW5jbHVkZSAnXHIncyAqLworCQkJaWYgKGluICE9ICdccicpIHsKKwkJCQlidWZbcG9zXSA9IGluOworCQkJCXBvcysrOworCQkJfQorCQl9CisJfQorCisJYnVmW3Bvc10gPSAnXDAnOworCVRSQUNFKCgibGVhdmUgaWRlbnRfcmVhZGxuOiByZXR1cm4gJWQiLCBwb3MrMSkpCisJcmV0dXJuIHBvcysxOworfQorCisvKiBDaGVjayBhbGwgdGltZW91dHMgd2hpY2ggYXJlIHJlcXVpcmVkLiBDdXJyZW50bHkgdGhlc2UgYXJlIHRoZSB0aW1lIGZvcgorICogdXNlciBhdXRoZW50aWNhdGlvbiwgYW5kIHRoZSBhdXRvbWF0aWMgcmVrZXlpbmcuICovCitzdGF0aWMgdm9pZCBjaGVja3RpbWVvdXRzKCkgeworCisJc3RydWN0IHRpbWV2YWwgdHY7CisJbG9uZyBzZWNzOworCisJaWYgKGdldHRpbWVvZmRheSgmdHYsIDApIDwgMCkgeworCQlkcm9wYmVhcl9leGl0KCJFcnJvciBnZXR0aW5nIHRpbWUiKTsKKwl9CisKKwlzZWNzID0gdHYudHZfc2VjOworCQorCWlmIChzZXMuY29ubmVjdHRpbWVvdXQgIT0gMCAmJiBzZWNzID4gc2VzLmNvbm5lY3R0aW1lb3V0KSB7CisJCQlkcm9wYmVhcl9jbG9zZSgiVGltZW91dCBiZWZvcmUgYXV0aCIpOworCX0KKworCS8qIHdlIGNhbid0IHJla2V5IGlmIHdlIGhhdmVuJ3QgZG9uZSByZW1vdGUgaWRlbnQgZXhjaGFuZ2UgeWV0ICovCisJaWYgKHNlcy5yZW1vdGVpZGVudCA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXNlcy5rZXhzdGF0ZS5zZW50a2V4aW5pdAorCQkJJiYgKHNlY3MgLSBzZXMua2V4c3RhdGUubGFzdGtleHRpbWUgPj0gS0VYX1JFS0VZX1RJTUVPVVQKKwkJCXx8IHNlcy5rZXhzdGF0ZS5kYXRhcmVjditzZXMua2V4c3RhdGUuZGF0YXRyYW5zID49IEtFWF9SRUtFWV9EQVRBKSl7CisJCVRSQUNFKCgicmVrZXlpbmcgYWZ0ZXIgdGltZW91dCBvciBtYXggZGF0YSByZWFjaGVkIikpCisJCXNlbmRfbXNnX2tleGluaXQoKTsKKwl9Cit9CisKZGlmZiAtLWdpdCBhL2NvbXBhdC5jIGIvY29tcGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UwYzFhYwotLS0gL2Rldi9udWxsCisrKyBiL2NvbXBhdC5jCkBAIC0wLDAgKzEsMjgxIEBACisvKgorICogRHJvcGJlYXIgLSBhIFNTSDIgc2VydmVyCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqIHN0cmxjYXQoKSBpcyBjb3B5cmlnaHQgYXMgZm9sbG93czoKKyAqIENvcHlyaWdodCAoYykgMTk5OCBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsKKyAqIE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyAqIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKKyAqIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIGRhZW1vbigpIGFuZCBnZXR1c2Vyc2hlbGwoKSBpcyBjb3B5cmlnaHQgYXMgZm9sbG93czoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqICAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworCQkqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyogU1VDSCBEQU1BR0UuCisqCisqIE1vZGlmaWNhdGlvbnMgZm9yIERyb3BiZWFyIHRvIGdldHVzZXJzaGVsbCgpIGFyZSBieSBQYXVsIE1hcmluY2V1CisqLworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKworI2lmbmRlZiBIQVZFX0dFVFVTRVJTSEVMTAorc3RhdGljIGNoYXIgKipjdXJzaGVsbCwgKipzaGVsbHMsICpzdHJpbmdzOworc3RhdGljIGNoYXIgKippbml0c2hlbGxzKCk7CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX1NUUkxDUFkKKy8qIEltcGxlbWVudGVkIGJ5IG1hdHQgYXMgc3BlY2lmaWVkIGluIGZyZWVic2QgNC43IG1hbnBhZ2UuCisgKiBXZSBkb24ndCByZXF1aXJlIGdyZWF0IHNwZWVkLCBpcyBzaW1wbHkgZm9yIHVzZSB3aXRoIHNzaHB0eSBjb2RlICovCitzaXplX3Qgc3RybGNweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpemUpIHsKKworCXNpemVfdCBpOworCisJLyogdGhpcyBpcyB1bmRlZmluZWQsIHRob3VnaCBzaXplPT0wIC0+IHJldHVybiAwICovCisJaWYgKHNpemUgPCAxKSB7CisJCXJldHVybiAwOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzaXplLTE7IGkrKykgeworCQlpZiAoc3JjW2ldID09ICdcMCcpIHsKKwkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJZHN0W2ldID0gc3JjW2ldOworCQl9CisJfQorCisJZHN0W2ldID0gJ1wwJzsKKwlyZXR1cm4gc3RybGVuKHNyYyk7CisKK30KKyNlbmRpZiAvKiBIQVZFX1NUUkxDUFkgKi8KKworI2lmbmRlZiBIQVZFX1NUUkxDQVQKKy8qIHRha2VuIGZyb20gb3BlbmJzZC1jb21wYXQgZm9yIE9wZW5TU0ggMy42LjFwMSAqLworLyogIiRPcGVuQlNEOiBzdHJsY2F0LmMsdiAxLjggMjAwMS8wNS8xMyAxNTo0MDoxNSBkZXJhYWR0IEV4cCAkIgorICoKKyAqIEFwcGVuZHMgc3JjIHRvIHN0cmluZyBkc3Qgb2Ygc2l6ZSBzaXogKHVubGlrZSBzdHJuY2F0LCBzaXogaXMgdGhlCisgKiBmdWxsIHNpemUgb2YgZHN0LCBub3Qgc3BhY2UgbGVmdCkuICBBdCBtb3N0IHNpei0xIGNoYXJhY3RlcnMKKyAqIHdpbGwgYmUgY29waWVkLiAgQWx3YXlzIE5VTCB0ZXJtaW5hdGVzICh1bmxlc3Mgc2l6IDw9IHN0cmxlbihkc3QpKS4KKyAqIFJldHVybnMgc3RybGVuKHNyYykgKyBNSU4oc2l6LCBzdHJsZW4oaW5pdGlhbCBkc3QpKS4KKyAqIElmIHJldHZhbCA+PSBzaXosIHRydW5jYXRpb24gb2NjdXJyZWQuCisgKi8KKwlzaXplX3QKK3N0cmxjYXQoZHN0LCBzcmMsIHNpeikKKwljaGFyICpkc3Q7CisJY29uc3QgY2hhciAqc3JjOworCXNpemVfdCBzaXo7Cit7CisJcmVnaXN0ZXIgY2hhciAqZCA9IGRzdDsKKwlyZWdpc3RlciBjb25zdCBjaGFyICpzID0gc3JjOworCXJlZ2lzdGVyIHNpemVfdCBuID0gc2l6OworCXNpemVfdCBkbGVuOworCisJLyogRmluZCB0aGUgZW5kIG9mIGRzdCBhbmQgYWRqdXN0IGJ5dGVzIGxlZnQgYnV0IGRvbid0IGdvIHBhc3QgZW5kICovCisJd2hpbGUgKG4tLSAhPSAwICYmICpkICE9ICdcMCcpCisJCWQrKzsKKwlkbGVuID0gZCAtIGRzdDsKKwluID0gc2l6IC0gZGxlbjsKKworCWlmIChuID09IDApCisJCXJldHVybihkbGVuICsgc3RybGVuKHMpKTsKKwl3aGlsZSAoKnMgIT0gJ1wwJykgeworCQlpZiAobiAhPSAxKSB7CisJCQkqZCsrID0gKnM7CisJCQluLS07CisJCX0KKwkJcysrOworCX0KKwkqZCA9ICdcMCc7CisKKwlyZXR1cm4oZGxlbiArIChzIC0gc3JjKSk7CS8qIGNvdW50IGRvZXMgbm90IGluY2x1ZGUgTlVMICovCit9CisjZW5kaWYgLyogSEFWRV9TVFJMQ0FUICovCisKKyNpZm5kZWYgSEFWRV9EQUVNT04KKy8qIEZyb20gTmV0QlNEIC0gZGFlbW9uaXNlIGEgcHJvY2VzcyAqLworCitpbnQgZGFlbW9uKGludCBub2NoZGlyLCBpbnQgbm9jbG9zZSkgeworCisJaW50IGZkOworCisJc3dpdGNoIChmb3JrKCkpIHsKKwkJY2FzZSAtMToKKwkJCXJldHVybiAoLTEpOworCQljYXNlIDA6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCV9leGl0KDApOworCX0KKworCWlmIChzZXRzaWQoKSA9PSAtMSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFub2NoZGlyKQorCQkodm9pZCljaGRpcigiLyIpOworCisJaWYgKCFub2Nsb3NlICYmIChmZCA9IG9wZW4oX1BBVEhfREVWTlVMTCwgT19SRFdSLCAwKSkgIT0gLTEpIHsKKwkJKHZvaWQpZHVwMihmZCwgU1RESU5fRklMRU5PKTsKKwkJKHZvaWQpZHVwMihmZCwgU1RET1VUX0ZJTEVOTyk7CisJCSh2b2lkKWR1cDIoZmQsIFNUREVSUl9GSUxFTk8pOworCQlpZiAoZmQgPiBTVERFUlJfRklMRU5PKQorCQkJKHZvaWQpY2xvc2UoZmQpOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBIQVZFX0RBRU1PTiAqLworCisjaWZuZGVmIEhBVkVfQkFTRU5BTUUKKworY2hhciAqYmFzZW5hbWUoY29uc3QgY2hhciAqcGF0aCkgeworCisJY2hhciAqZm9vID0gc3RycmNocihwYXRoLCAnLycpOworCXJldHVybiArK2ZvbzsKK30KKworI2VuZGlmIC8qIEhBVkVfQkFTRU5BTUUgKi8KKworI2lmbmRlZiBIQVZFX0dFVFVTRVJTSEVMTAorCisvKgorICogR2V0IGEgbGlzdCBvZiBzaGVsbHMgZnJvbSAvZXRjL3NoZWxscywgaWYgaXQgZXhpc3RzLgorICovCitjaGFyICogZ2V0dXNlcnNoZWxsKCkgeworCWNoYXIgKnJldDsKKworCWlmIChjdXJzaGVsbCA9PSBOVUxMKQorCQljdXJzaGVsbCA9IGluaXRzaGVsbHMoKTsKKwlyZXQgPSAqY3Vyc2hlbGw7CisJaWYgKHJldCAhPSBOVUxMKQorCQljdXJzaGVsbCsrOworCXJldHVybiAocmV0KTsKK30KKwordm9pZCBlbmR1c2Vyc2hlbGwoKSB7CisKKwlpZiAoc2hlbGxzICE9IE5VTEwpCisJCWZyZWUoc2hlbGxzKTsKKwlzaGVsbHMgPSBOVUxMOworCWlmIChzdHJpbmdzICE9IE5VTEwpCisJCWZyZWUoc3RyaW5ncyk7CisJc3RyaW5ncyA9IE5VTEw7CisJY3Vyc2hlbGwgPSBOVUxMOworfQorCit2b2lkIHNldHVzZXJzaGVsbCgpIHsKKwljdXJzaGVsbCA9IGluaXRzaGVsbHMoKTsKK30KKworc3RhdGljIGNoYXIgKippbml0c2hlbGxzKCkgeworCS8qIGRvbid0IHRvdWNoIHRoaXMgbGlzdC4gKi8KKwljb25zdCBjaGFyICpva3NoZWxsc1tdID0geyAiL2Jpbi9zaCIsICIvYmluL2NzaCIsIE5VTEwgfTsKKwlyZWdpc3RlciBjaGFyICoqc3AsICpjcDsKKwlyZWdpc3RlciBGSUxFICpmcDsKKwlzdHJ1Y3Qgc3RhdCBzdGF0YjsKKwlpbnQgZmxlbjsKKworCWlmIChzaGVsbHMgIT0gTlVMTCkKKwkJZnJlZShzaGVsbHMpOworCXNoZWxscyA9IE5VTEw7CisJaWYgKHN0cmluZ3MgIT0gTlVMTCkKKwkJZnJlZShzdHJpbmdzKTsKKwlzdHJpbmdzID0gTlVMTDsKKwlpZiAoKGZwID0gZm9wZW4oIi9ldGMvc2hlbGxzIiwgInJjIikpID09IE5VTEwpCisJCXJldHVybiAoY2hhciAqKikgb2tzaGVsbHM7CisJaWYgKGZzdGF0KGZpbGVubyhmcCksICZzdGF0YikgPT0gLTEpIHsKKwkJKHZvaWQpZmNsb3NlKGZwKTsKKwkJcmV0dXJuIChjaGFyICoqKSBva3NoZWxsczsKKwl9CisJaWYgKChzdHJpbmdzID0gbWFsbG9jKCh1X2ludClzdGF0Yi5zdF9zaXplICsgMSkpID09IE5VTEwpIHsKKwkJKHZvaWQpZmNsb3NlKGZwKTsKKwkJcmV0dXJuIChjaGFyICoqKSBva3NoZWxsczsKKwl9CisJc2hlbGxzID0gY2FsbG9jKCh1bnNpZ25lZClzdGF0Yi5zdF9zaXplIC8gMywgc2l6ZW9mIChjaGFyICopKTsKKwlpZiAoc2hlbGxzID09IE5VTEwpIHsKKwkJKHZvaWQpZmNsb3NlKGZwKTsKKwkJZnJlZShzdHJpbmdzKTsKKwkJc3RyaW5ncyA9IE5VTEw7CisJCXJldHVybiAoY2hhciAqKikgb2tzaGVsbHM7CisJfQorCXNwID0gc2hlbGxzOworCWNwID0gc3RyaW5nczsKKwlmbGVuID0gc3RhdGIuc3Rfc2l6ZTsKKwl3aGlsZSAoZmdldHMoY3AsIGZsZW4gLSAoY3AgLSBzdHJpbmdzKSwgZnApICE9IE5VTEwpIHsKKwkJd2hpbGUgKCpjcCAhPSAnIycgJiYgKmNwICE9ICcvJyAmJiAqY3AgIT0gJ1wwJykKKwkJCWNwKys7CisJCWlmICgqY3AgPT0gJyMnIHx8ICpjcCA9PSAnXDAnKQorCQkJY29udGludWU7CisJCSpzcCsrID0gY3A7CisJCXdoaWxlICghaXNzcGFjZSgqY3ApICYmICpjcCAhPSAnIycgJiYgKmNwICE9ICdcMCcpCisJCQljcCsrOworCQkqY3ArKyA9ICdcMCc7CisJfQorCSpzcCA9IE5VTEw7CisJKHZvaWQpZmNsb3NlKGZwKTsKKwlyZXR1cm4gKHNoZWxscyk7Cit9CisKKyNlbmRpZiAvKiBIQVZFX0dFVFVTRVJTSEVMTCAqLwpkaWZmIC0tZ2l0IGEvY29tcGF0LmggYi9jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWIzNDRmCi0tLSAvZGV2L251bGwKKysrIGIvY29tcGF0LmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIERyb3BiZWFyIFNTSAorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfQ09NUEFUX0hfCisjZGVmaW5lIF9DT01QQVRfSF8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisKKyNpZm5kZWYgSEFWRV9TVFJMQ1BZCitzaXplX3Qgc3RybGNweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpemUpOworI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TVFJMQ0FUCitzaXplX3Qgc3RybGNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpeik7CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0RBRU1PTgoraW50IGRhZW1vbihpbnQgbm9jaGRpciwgaW50IG5vY2xvc2UpOworI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9CQVNFTkFNRQorY2hhciAqYmFzZW5hbWUoY29uc3QgY2hhciogcGF0aCk7CisjZW5kaWYKKworI2lmbmRlZiBIQVZFX0dFVFVTRVJTSEVMTAorY2hhciAqZ2V0dXNlcnNoZWxsKCk7Cit2b2lkIHNldHVzZXJzaGVsbCgpOwordm9pZCBlbmR1c2Vyc2hlbGwoKTsKKyNlbmRpZgorCisjaWZuZGVmIF9QQVRIX0RFVk5VTEwKKyNkZWZpbmUgX1BBVEhfREVWTlVMTCAiL2Rldi9udWxsIgorI2VuZGlmCisKKyNlbmRpZiAvKiBfQ09NUEFUX0hfICovCmRpZmYgLS1naXQgYS9jb25maWcuZ3Vlc3MgYi9jb25maWcuZ3Vlc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjMjZjZAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5ndWVzcwpAQCAtMCwwICsxLDE1MTMgQEAKKyMhIC9iaW4vc2gKKyMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjICAgSW5jLgorCit0aW1lc3RhbXA9JzIwMDctMDEtMTUnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIgPHBlckBib3RobmVyLmNvbT4uCisjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAorIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBDaGFuZ2VMb2cgZW50cnkuCisjCisjIFRoaXMgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lIHNpbWlsYXIgdG8KKyMgY29uZmlnLnN1Yi4gIElmIGl0IHN1Y2NlZWRzLCBpdCBwcmludHMgdGhlIHN5c3RlbSBuYW1lIG9uIHN0ZG91dCwgYW5kCisjIGV4aXRzIHdpdGggMC4gIE90aGVyd2lzZSwgaXQgZXhpdHMgd2l0aCAxLgorIworIyBUaGUgcGxhbiBpcyB0aGF0IHRoaXMgY2FuIGJlIGNhbGxlZCBieSBjb25maWd1cmUgc2NyaXB0cyBpZiB5b3UKKyMgZG9uJ3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBidWlsZCBzeXN0ZW0gdHlwZS4KKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0KKworT3V0cHV0IHRoZSBjb25maWd1cmF0aW9uIG5hbWUgb2YgdGhlIHN5c3RlbSBcYCRtZScgaXMgcnVuIG9uLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0CisgIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisKK3ZlcnNpb249IlwKK0dOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCisKK09yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCisgICAgICAgZXhpdCAxIDs7CisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgIGV4aXQgMQorZmkKKwordHJhcCAnZXhpdCAxJyAxIDIgMTUKKworIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQorIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcworIyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCBhbmQsIGFzIHlvdSBjYW4gc2VlIGJlbG93LCBpdCBpcyBhCisjIGhlYWRhY2hlIHRvIGRlYWwgd2l0aCBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCisKKyMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKKyMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KKworIyBQb3J0YWJsZSB0bXAgZGlyZWN0b3J5IGNyZWF0aW9uIGluc3BpcmVkIGJ5IHRoZSBBdXRvY29uZiB0ZWFtLgorCitzZXRfY2NfZm9yX2J1aWxkPScKK3RyYXAgImV4aXRjb2RlPVwkPzsgKHJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsKSAmJiBleGl0IFwkZXhpdGNvZGUiIDAgOwordHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgMSAyIDEzIDE1IDsKKzogJHtUTVBESVI9L3RtcH0gOworIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKKyB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fAorIHsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAorIHsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9IDsKK2R1bW15PSR0bXAvZHVtbXkgOwordG1wZmlsZXM9IiRkdW1teS5jICRkdW1teS5vICRkdW1teS5yZWwgJGR1bW15IiA7CitjYXNlICRDQ19GT1JfQlVJTEQsJEhPU1RfQ0MsJENDIGluCisgLCwpICAgIGVjaG8gImludCB4OyIgPiAkZHVtbXkuYyA7CisJZm9yIGMgaW4gY2MgZ2NjIGM4OSBjOTkgOyBkbworCSAgaWYgKCRjIC1jIC1vICRkdW1teS5vICRkdW1teS5jKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICAgICBDQ19GT1JfQlVJTEQ9IiRjIjsgYnJlYWsgOworCSAgZmkgOworCWRvbmUgOworCWlmIHRlc3QgeCIkQ0NfRk9SX0JVSUxEIiA9IHggOyB0aGVuCisJICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQgOworCWZpCisJOzsKKyAsLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OworICwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKK2VzYWMgOyBzZXRfY2NfZm9yX2J1aWxkPSA7JworCisjIFRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVuIHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNlLgorIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQtMDgtMjQpCitpZiAodGVzdCAtZiAvLmF0dGJpbi91bmFtZSkgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAorZmkKKworVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfTUFDSElORT11bmtub3duCitVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KK1VOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCitVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KKworIyBOb3RlOiBvcmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJyYW5jaGVzIGFyZSBub3QgZXhjbHVzaXZlLgorCitjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCisgICAgKjpOZXRCU0Q6KjoqKQorCSMgTmV0QlNEIChuYnNkKSB0YXJnZXRzIHNob3VsZCAod2hlcmUgYXBwbGljYWJsZSkgbWF0Y2ggb25lIG9yCisJIyBtb3JlIG9mIHRoZSB0dXBwbGVzOiAqLSotbmV0YnNkZWxmKiwgKi0qLW5ldGJzZGFvdXQqLAorCSMgKi0qLW5ldGJzZGVjb2ZmKiBhbmQgKi0qLW5ldGJzZCouICBGb3IgdGFyZ2V0cyB0aGF0IHJlY2VudGx5CisJIyBzd2l0Y2hlZCB0byBFTEYsICotKi1uZXRic2QqIHdvdWxkIHNlbGVjdCB0aGUgb2xkCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuICBUaGlzIHByb3ZpZGVzIGJvdGggZm9yd2FyZAorCSMgY29tcGF0aWJpbGl0eSBhbmQgYSBjb25zaXN0ZW50IG1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIHRoZQorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LgorCSMKKwkjIE5vdGU6IE5ldEJTRCBkb2Vzbid0IHBhcnRpY3VsYXJseSBjYXJlIGFib3V0IHRoZSB2ZW5kb3IKKwkjIHBvcnRpb24gb2YgdGhlIG5hbWUuICBXZSBhbHdheXMgc2V0IGl0IHRvICJ1bmtub3duIi4KKwlzeXNjdGw9InN5c2N0bCAtbiBody5tYWNoaW5lX2FyY2giCisJVU5BTUVfTUFDSElORV9BUkNIPWAoL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBcCisJICAgIC91c3Ivc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bilgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm1lYikgbWFjaGluZT1hcm1lYi11bmtub3duIDs7CisJICAgIGFybSopIG1hY2hpbmU9YXJtLXVua25vd24gOzsKKwkgICAgc2gzZWwpIG1hY2hpbmU9c2hsLXVua25vd24gOzsKKwkgICAgc2gzZWIpIG1hY2hpbmU9c2gtdW5rbm93biA7OworCSAgICBzaDVlbCkgbWFjaGluZT1zaDVsZS11bmtub3duIDs7CisJICAgICopIG1hY2hpbmU9JHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24gOzsKKwllc2FjCisJIyBUaGUgT3BlcmF0aW5nIFN5c3RlbSBpbmNsdWRpbmcgb2JqZWN0IGZvcm1hdCwgaWYgaXQgaGFzIHN3aXRjaGVkCisJIyB0byBFTEYgcmVjZW50bHksIG9yIHdpbGwgaW4gdGhlIGZ1dHVyZS4KKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGFybSp8aTM4NnxtNjhrfG5zMzJrfHNoMyp8c3BhcmN8dmF4KQorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCWlmIGVjaG8gX19FTEZfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJCQl8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsCisJCXRoZW4KKwkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KKwkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPworCQkgICAgb3M9bmV0YnNkCisJCWVsc2UKKwkJICAgIG9zPW5ldGJzZGVsZgorCQlmaQorCQk7OworCSAgICAqKQorCSAgICAgICAgb3M9bmV0YnNkCisJCTs7CisJZXNhYworCSMgVGhlIE9TIHJlbGVhc2UKKwkjIERlYmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQgdXNlcmxhbmQsIGFuZAorCSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQuIEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5lZWQKKwkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9uLCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhCisJIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBzdHlsZSBvZiBsaW51eC1nbnUuCisJY2FzZSAiJHtVTkFNRV9WRVJTSU9OfSIgaW4KKwkgICAgRGViaWFuKikKKwkJcmVsZWFzZT0nLWdudScKKwkJOzsKKwkgICAgKikKKwkJcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKKwkJOzsKKwllc2FjCisJIyBTaW5jZSBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU06CisJIyBjb250YWlucyByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHRoZSBzaG9ydGVyIGZvcm06CisJIyBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2VkLgorCWVjaG8gIiR7bWFjaGluZX0tJHtvc30ke3JlbGVhc2V9IgorCWV4aXQgOzsKKyAgICAqOk9wZW5CU0Q6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9PcGVuQlNELi8vJ2AKKwllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6ZWtrb0JTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZWtrb2JzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpTb2xpZEJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc29saWRic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1hY3BwYzpNaXJCU0Q6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpNaXJCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYWxwaGE6T1NGMToqOiopCisJY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgorCSo0LjApCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCisJCTs7CisJKjUuKikKKwkgICAgICAgIFVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQ0fSdgCisJCTs7CisJZXNhYworCSMgQWNjb3JkaW5nIHRvIENvbXBhcSwgL3Vzci9zYmluL3BzcmluZm8gaGFzIGJlZW4gYXZhaWxhYmxlIG9uCisJIyBPU0YvMSBhbmQgVHJ1NjQgc3lzdGVtcyBwcm9kdWNlZCBzaW5jZSAxOTk1LiAgSSBob3BlIHRoYXQKKwkjIGNvdmVycyBtb3N0IHN5c3RlbXMgcnVubmluZyB0b2RheS4gIFRoaXMgY29kZSBwaXBlcyB0aGUgQ1BVCisJIyB0eXBlcyB0aHJvdWdoIGhlYWQgLW4gMSwgc28gd2Ugb25seSBkZXRlY3QgdGhlIHR5cGUgb2YgQ1BVIDAuCisJQUxQSEFfQ1BVX1RZUEU9YC91c3Ivc2Jpbi9wc3JpbmZvIC12IHwgc2VkIC1uIC1lICdzL14gIFRoZSBhbHBoYSBcKC4qXCkgcHJvY2Vzc29yLiokL1wxL3AnIHwgaGVhZCAtbiAxYAorCWNhc2UgIiRBTFBIQV9DUFVfVFlQRSIgaW4KKwkgICAgIkVWNCAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjQuNSAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJMQ0E0ICgyMTA2Ni8yMTA2OCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNSAoMjExNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjUiIDs7CisJICAgICJFVjUuNiAoMjExNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1NiIgOzsKKwkgICAgIkVWNS42ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTYiIDs7CisJICAgICJFVjUuNyAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU3IiA7OworCSAgICAiRVY2ICgyMTI2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NiIgOzsKKwkgICAgIkVWNi43ICgyMTI2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY3IiA7OworCSAgICAiRVY2LjhDQiAoMjEyNjRDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44QUwgKDIxMjY0QikiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOENYICgyMTI2NEQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjlBICgyMTI2NC9FVjY5QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjkiIDs7CisJICAgICJFVjcgKDIxMzY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3IiA7OworCSAgICAiRVY3LjkgKDIxMzY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NzkiIDs7CisJZXNhYworCSMgQSBQbi5uIHZlcnNpb24gaXMgYSBwYXRjaGVkIHZlcnNpb24uCisJIyBBIFZuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIHZlcnNpb24uCisJIyBBIFRuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIGZpZWxkIHRlc3QgdmVyc2lvbi4KKwkjIEEgWG4ubiB2ZXJzaW9uIGlzIGFuIHVucmVsZWFzZWQgZXhwZXJpbWVudGFsIGJhc2VsZXZlbC4KKwkjIDEuMiB1c2VzICIxLjIiIGZvciB1bmFtZSAtci4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLW9zZmBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKwlleGl0IDs7CisgICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCisJIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/CisJZWNobyBhbHBoYS1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKKwllY2hvIGFscGhhLWRlYy13aW5udDMuNQorCWV4aXQgOzsKKyAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKKwllY2hvIG02OGstdW5rbm93bi1zeXN2NAorCWV4aXQgOzsKKyAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKKwlleGl0IDs7CisgICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1tb3JwaG9zCisJZXhpdCA7OworICAgICo6T1MvMzkwOio6KikKKwllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCisJZXhpdCA7OworICAgICo6ei9WTToqOiopCisJZWNobyBzMzkwLWlibS16dm1vZQorCWV4aXQgOzsKKyAgICAqOk9TNDAwOio6KikKKyAgICAgICAgZWNobyBwb3dlcnBjLWlibS1vczQwMAorCWV4aXQgOzsKKyAgICBhcm06UklTQyo6MS5bMDEyXSo6Knxhcm06cmlzY2l4OjEuWzAxMl0qOiopCisJZWNobyBhcm0tYWNvcm4tcmlzY2l4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhcm06cmlzY29zOio6Knxhcm06UklTQ09TOio6KikKKwllY2hvIGFybS11bmtub3duLXJpc2NvcworCWV4aXQgOzsKKyAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQorCWVjaG8gaHBwYTEuMS1oaXRhY2hpLWhpdXhtcHAKKwlleGl0IDs7CisgICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCisJIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KKwlpZiB0ZXN0ICJgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYCIgPSBhdHQgOyB0aGVuCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN5c3YzCisJZWxzZQorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBOSUxFKjoqOio6ZGNvc3gpCisJZWNobyBweXJhbWlkLXB5cmFtaWQtc3ZyNAorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDp1bml4OjQuMDo2KikKKwllY2hvIHNwYXJjLWljbC1ueDYKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6VU5JWF9TVjo0LjIqOjcqIHwgRFJTPzYwMDA6aXNpczo0LjIqOjcqKQorCWNhc2UgYC91c3IvYmluL3VuYW1lIC1wYCBpbgorCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7CisJZXNhYyA7OworICAgIHN1bjRIOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiopCisJZWNobyBpMzg2LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjYqOiopCisJIyBBY2NvcmRpbmcgdG8gY29uZmlnLnN1YiwgdGhpcyBpcyB0aGUgcHJvcGVyIHdheSB0byBjYW5vbmljYWxpemUKKwkjIFN1bk9TNi4gIEhhcmQgdG8gZ3Vlc3MgZXhhY3RseSB3aGF0IFN1bk9TNiB3aWxsIGJlIGxpa2UsIGJ1dAorCSMgaXQncyBsaWtlbHkgdG8gYmUgbW9yZSBsaWtlIFNvbGFyaXMgdGhhbiBTdW5PUzQuCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczNgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6KjoqKQorCWNhc2UgImAvdXNyL2Jpbi9hcmNoIC1rYCIgaW4KKwkgICAgU2VyaWVzKnxTNCopCisJCVVOQU1FX1JFTEVBU0U9YHVuYW1lIC12YAorCQk7OworCWVzYWMKKwkjIEphcGFuZXNlIExhbmd1YWdlIHZlcnNpb25zIGhhdmUgYSB2ZXJzaW9uIG51bWJlciBsaWtlIGA0LjEuMy1KTCcuCisJZWNobyBzcGFyYy1zdW4tc3Vub3NgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vJ2AKKwlleGl0IDs7CisgICAgc3VuMyo6U3VuT1M6KjoqKQorCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHN1bio6Kjo0LjJCU0Q6KikKKwlVTkFNRV9SRUxFQVNFPWAoc2VkIDFxIC9ldGMvbW90ZCB8IGF3ayAne3ByaW50IHN1YnN0cigkNSwxLDMpfScpIDI+L2Rldi9udWxsYAorCXRlc3QgIngke1VOQU1FX1JFTEVBU0V9IiA9ICJ4IiAmJiBVTkFNRV9SRUxFQVNFPTMKKwljYXNlICJgL2Jpbi9hcmNoYCIgaW4KKwkgICAgc3VuMykKKwkJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwkgICAgc3VuNCkKKwkJZWNobyBzcGFyYy1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJCTs7CisJZXNhYworCWV4aXQgOzsKKyAgICBhdXNocDpTdW5PUzoqOiopCisJZWNobyBzcGFyYy1hdXNwZXgtc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICMgVGhlIHNpdHVhdGlvbiBmb3IgTWlOVCBpcyBhIGxpdHRsZSBjb25mdXNpbmcuICBUaGUgbWFjaGluZSBuYW1lCisgICAgIyBjYW4gYmUgdmlydHVhbGx5IGV2ZXJ5dGhpbmcgKGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90CisgICAgIyAiYXRhcmlzdCIgb3IgImF0YXJpc3RlIiBhdCBsZWFzdCBzaG91bGQgaGF2ZSBhIHByb2Nlc3NvcgorICAgICMgPiBtNjgwMDApLiAgVGhlIHN5c3RlbSBuYW1lIHJhbmdlcyBmcm9tICJNaU5UIiBvdmVyICJGcmVlTWlOVCIKKyAgICAjIHRvIHRoZSBsb3dlcmNhc2UgdmVyc2lvbiAibWludCIgKG9yICJmcmVlbWludCIpLiAgRmluYWxseQorICAgICMgdGhlIHN5c3RlbSBuYW1lICJUT1MiIGRlbm90ZXMgYSBzeXN0ZW0gd2hpY2ggaXMgYWN0dWFsbHkgbm90CisgICAgIyBNaU5ULiAgQnV0IE1pTlQgaXMgZG93bndhcmQgY29tcGF0aWJsZSB0byBUT1MsIHNvIHRoaXMgc2hvdWxkCisgICAgIyBiZSBubyBwcm9ibGVtLgorICAgIGF0YXJpc3RbZV06Kk1pTlQ6KjoqIHwgYXRhcmlzdFtlXToqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXRhcmkqOipNaU5UOio6KiB8IGF0YXJpKjoqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaWxhbio6Kk1pTlQ6KjoqIHwgbWlsYW4qOiptaW50Oio6KiB8ICptaWxhbio6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstaGFkZXMtbWludCR7VU5BTUVfUkVMRUFTRX0KKyAgICAgICAgZXhpdCA7OworICAgICo6Kk1pTlQ6KjoqIHwgKjoqbWludDoqOiogfCAqOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgbTY4azptYWNodGVuOio6KikKKwllY2hvIG02OGstYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcG93ZXJwYzptYWNodGVuOio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUklTQyo6TWFjaDoqOiopCisJZWNobyBtaXBzLWRlYy1tYWNoX2JzZDQuMworCWV4aXQgOzsKKyAgICBSSVNDKjpVTFRSSVg6KjoqKQorCWVjaG8gbWlwcy1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBWQVgqOlVMVFJJWCo6KjoqKQorCWVjaG8gdmF4LWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIDIwMjA6Q0xJWDoqOiogfCAyNDMwOkNMSVg6KjoqKQorCWVjaG8gY2xpcHBlci1pbnRlcmdyYXBoLWNsaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pcHM6KjoqOlVNSVBTIHwgbWlwczoqOio6UklTQ29zKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworI2lmZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIGZvciBwcmludGYoKSBwcm90b3R5cGUgKi8KKwlpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworI2Vsc2UKKwlpbnQgbWFpbiAoYXJnYywgYXJndikgaW50IGFyZ2M7IGNoYXIgKmFyZ3ZbXTsgeworI2VuZGlmCisJI2lmIGRlZmluZWQgKGhvc3RfbWlwcykgJiYgZGVmaW5lZCAoTUlQU0VCKQorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NZU1YpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzeXN2XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1ZSNCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N2cjRcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9CU0Q0MykgfHwgZGVmaW5lZChTWVNUWVBFX0JTRCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc2JzZFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNlbmRpZgorCSAgZXhpdCAoLTEpOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmCisJICBkdW1teWFyZz1gZWNobyAiJHtVTkFNRV9SRUxFQVNFfSIgfCBzZWQgLW4gJ3MvXChbMC05XSpcKS4qL1wxL3AnYCAmJgorCSAgU1lTVEVNX05BTUU9YCRkdW1teSAkZHVtbXlhcmdgICYmCisJICAgIHsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gbWlwcy1taXBzLXJpc2NvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTW90b3JvbGE6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1tb3Rvcm9sYS1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYToqOjQuMzpQTDgtKikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6KjoqOlBvd2VyTUFYX09TIHwgU3luZXJneTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBOaWdodF9IYXdrOlBvd2VyX1VOSVg6KjoqKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJ1bml4CisJZXhpdCA7OworICAgIG04OGs6Q1gvVVg6Nyo6KikKKwllY2hvIG04OGstaGFycmlzLWN4dXg3CisJZXhpdCA7OworICAgIG04OGs6Kjo0KjpSNCopCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3Y0CisJZXhpdCA7OworICAgIG04OGs6KjozKjpSMyopCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCisJZXhpdCA7OworICAgIEFWaWlPTjpkZ3V4Oio6KikKKyAgICAgICAgIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKKyAgICAgICAgVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisJdGhlbgorCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKKwkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KKwkgICAgdGhlbgorCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCWZpCisgCWV4aXQgOzsKKyAgICBNODgqOkRvbHBoaW5PUzoqOiopCSMgRG9scGhpbk9TIChTVlIzKQorCWVjaG8gbTg4ay1kb2xwaGluLXN5c3YzCisJZXhpdCA7OworICAgIE04OCo6KjpSMyo6KikKKwkjIERlbHRhIDg4ayBzeXN0ZW0gcnVubmluZyBTVlIzCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCisJZXhpdCA7OworICAgIFhEODgqOio6KjoqKSAjIFRla3Ryb25peCBYRDg4IHN5c3RlbSBydW5uaW5nIFVUZWtWIChTVlIzKQorCWVjaG8gbTg4ay10ZWt0cm9uaXgtc3lzdjMKKwlleGl0IDs7CisgICAgVGVrNDNbMC05XVswLTldOlVUZWs6KjoqKSAjIFRla3Ryb25peCA0MzAwIHN5c3RlbSBydW5uaW5nIFVUZWsgKEJTRCkKKwllY2hvIG02OGstdGVrdHJvbml4LWJzZAorCWV4aXQgOzsKKyAgICAqOklSSVgqOio6KikKKwllY2hvIG1pcHMtc2dpLWlyaXhgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vZydgCisJZXhpdCA7OworICAgID8/Pz8/Pz8/OkFJWD86WzEyXS4xOjIpICAgIyBBSVggMi4yLjEgb3IgQUlYIDIuMS4xIGlzIFJUL1BDIEFJWC4KKwllY2hvIHJvbXAtaWJtLWFpeCAgICAgIyB1bmFtZSAtbSBnaXZlcyBhbiA4IGhleC1jb2RlIENQVSBpZAorCWV4aXQgOzsgICAgICAgICAgICAgICAjIE5vdGUgdGhhdDogZWNobyAiJ2B1bmFtZSAtc2AnIiBnaXZlcyAnQUlYICcKKyAgICBpKjg2OkFJWDoqOiopCisJZWNobyBpMzg2LWlibS1haXgKKwlleGl0IDs7CisgICAgaWE2NDpBSVg6KjoqKQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoyOjMpCisJaWYgZ3JlcCBib3MzMjUgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJc2VkICdzL14JCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJCSNpbmNsdWRlIDxzeXMvc3lzdGVtY2ZnLmg+CisKKwkJbWFpbigpCisJCQl7CisJCQlpZiAoIV9fcG93ZXJfcGMoKSkKKwkJCQlleGl0KDEpOworCQkJcHV0cygicG93ZXJwYy1pYm0tYWl4My4yLjUiKTsKKwkJCWV4aXQoMCk7CisJCQl9CitFT0YKKwkJaWYgJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAKKwkJdGhlbgorCQkJZWNobyAiJFNZU1RFTV9OQU1FIgorCQllbHNlCisJCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjUKKwkJZmkKKwllbGlmIGdyZXAgYm9zMzI0IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjQKKwllbHNlCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIKKwlmaQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOls0NV0pCisJSUJNX0NQVV9JRD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCisJaWYgL3Vzci9zYmluL2xzYXR0ciAtRWwgJHtJQk1fQ1BVX0lEfSB8IGdyZXAgJyBQT1dFUicgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCUlCTV9BUkNIPXJzNjAwMAorCWVsc2UKKwkJSUJNX0FSQ0g9cG93ZXJwYworCWZpCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke0lCTV9BUkNIfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOiopCisJZWNobyByczYwMDAtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYm1ydDo0LjRCU0Q6Knxyb21wLWlibTpCU0Q6KikKKwllY2hvIHJvbXAtaWJtLWJzZDQuNAorCWV4aXQgOzsKKyAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAorCWVjaG8gcm9tcC1pYm0tYnNkJHtVTkFNRV9SRUxFQVNFfSAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KKwlleGl0IDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworICAgICo6Qk9TWDoqOiopCisJZWNobyByczYwMDAtYnVsbC1ib3N4CisJZXhpdCA7OworICAgIERQWC8yPzAwOkIuTy5TLjoqOiopCisJZWNobyBtNjhrLWJ1bGwtc3lzdjMKKwlleGl0IDs7CisgICAgOTAwMC9bMzRdPz86NC4zYnNkOjEuKjoqKQorCWVjaG8gbTY4ay1ocC1ic2QKKwlleGl0IDs7CisgICAgaHAzMDA6NC40QlNEOio6KiB8IDkwMDAvWzM0XT8/OjQuM2JzZDoyLio6KikKKwllY2hvIG02OGstaHAtYnNkNC40CisJZXhpdCA7OworICAgIDkwMDAvWzM0Njc4XT8/OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICA5MDAwLzMxPyApICAgICAgICAgICAgSFBfQVJDSD1tNjgwMDAgOzsKKwkgICAgOTAwMC9bMzRdPz8gKSAgICAgICAgIEhQX0FSQ0g9bTY4ayA7OworCSAgICA5MDAwL1s2NzhdWzAtOV1bMC05XSkKKwkJaWYgWyAteCAvdXNyL2Jpbi9nZXRjb25mIF07IHRoZW4KKwkJICAgIHNjX2NwdV92ZXJzaW9uPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0NQVV9WRVJTSU9OIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgICBzY19rZXJuZWxfYml0cz1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19LRVJORUxfQklUUyAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtzY19jcHVfdmVyc2lvbn0iIGluCisgICAgICAgICAgICAgICAgICAgICAgNTIzKSBIUF9BUkNIPSJocHBhMS4wIiA7OyAjIENQVV9QQV9SSVNDMV8wCisgICAgICAgICAgICAgICAgICAgICAgNTI4KSBIUF9BUkNIPSJocHBhMS4xIiA7OyAjIENQVV9QQV9SSVNDMV8xCisgICAgICAgICAgICAgICAgICAgICAgNTMyKSAgICAgICAgICAgICAgICAgICAgICAjIENQVV9QQV9SSVNDMl8wCisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIke3NjX2tlcm5lbF9iaXRzfSIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgMzIpIEhQX0FSQ0g9ImhwcGEyLjBuIiA7OworICAgICAgICAgICAgICAgICAgICAgICAgICA2NCkgSFBfQVJDSD0iaHBwYTIuMHciIDs7CisJCQkgICcnKSBIUF9BUkNIPSJocHBhMi4wIiA7OyAgICMgSFAtVVggMTAuMjAKKyAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMgOzsKKyAgICAgICAgICAgICAgICAgICAgZXNhYworCQlmaQorCQlpZiBbICIke0hQX0FSQ0h9IiA9ICIiIF07IHRoZW4KKwkJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJICAgIHNlZCAncy9eICAgICAgICAgICAgICAvLycgPDwgRU9GID4kZHVtbXkuYworCisgICAgICAgICAgICAgICNkZWZpbmUgX0hQVVhfU09VUkNFCisgICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4KKyAgICAgICAgICAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisgICAgICAgICAgICAgIGludCBtYWluICgpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorICAgICAgICAgICAgICAgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOworICAgICAgICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgICAgICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisKKyAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY3B1KQorICAgICAgICAgICAgICAJeworICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIpOyBicmVhazsKKyAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MyXzA6CisgICAgICAgICAgICAgICNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKyAgICAgICAgICAgICAgCSAgICBzd2l0Y2ggKGJpdHMpCisgICAgICAgICAgICAgIAkJeworICAgICAgICAgICAgICAJCWNhc2UgNjQ6IHB1dHMgKCJocHBhMi4wdyIpOyBicmVhazsKKyAgICAgICAgICAgICAgCQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJlYWs7CisgICAgICAgICAgICAgIAkJZGVmYXVsdDogcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAkJfSBicmVhazsKKyAgICAgICAgICAgICAgI2Vsc2UgIC8qICFkZWZpbmVkKF9TQ19LRVJORUxfQklUUykgKi8KKyAgICAgICAgICAgICAgCSAgICBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKyAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgIAlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKyAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICAgIGV4aXQgKDApOworICAgICAgICAgICAgICB9CitFT0YKKwkJICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsKSAmJiBIUF9BUkNIPWAkZHVtbXlgCisJCSAgICB0ZXN0IC16ICIkSFBfQVJDSCIgJiYgSFBfQVJDSD1ocHBhCisJCWZpIDs7CisJZXNhYworCWlmIFsgJHtIUF9BUkNIfSA9ICJocHBhMi4wdyIgXQorCXRoZW4KKwkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCisJICAgICMgaHBwYTIuMHctaHAtaHB1eCogaGFzIGEgNjQtYml0IGtlcm5lbCBhbmQgYSBjb21waWxlciBnZW5lcmF0aW5nCisJICAgICMgMzItYml0IGNvZGUuICBocHBhNjQtaHAtaHB1eCogaGFzIHRoZSBzYW1lIGtlcm5lbCBhbmQgYSBjb21waWxlcgorCSAgICAjIGdlbmVyYXRpbmcgNjQtYml0IGNvZGUuICBHTlUgYW5kIEhQIHVzZSBkaWZmZXJlbnQgbm9tZW5jbGF0dXJlOgorCSAgICAjCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9Y2MgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhMi4wdy1ocC1ocHV4MTEuMjMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD0iY2MgK0RBMi4wdyIgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhNjQtaHAtaHB1eDExLjIzCisKKwkgICAgaWYgZWNobyBfX0xQNjRfXyB8IChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfAorCQlncmVwIF9fTFA2NF9fID4vZGV2L251bGwKKwkgICAgdGhlbgorCQlIUF9BUkNIPSJocHBhMi4wdyIKKwkgICAgZWxzZQorCQlIUF9BUkNIPSJocHBhNjQiCisJICAgIGZpCisJZmkKKwllY2hvICR7SFBfQVJDSH0taHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIGlhNjQ6SFAtVVg6KjoqKQorCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAorCWVjaG8gaWE2NC1ocC1ocHV4JHtIUFVYX1JFVn0KKwlleGl0IDs7CisgICAgMzA1MCo6SEktVVg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSNpbmNsdWRlIDx1bmlzdGQuaD4KKwlpbnQKKwltYWluICgpCisJeworCSAgbG9uZyBjcHUgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCSAgLyogVGhlIG9yZGVyIG1hdHRlcnMsIGJlY2F1c2UgQ1BVX0lTX0hQX01DNjhLIGVycm9uZW91c2x5IHJldHVybnMKKwkgICAgIHRydWUgZm9yIENQVV9QQV9SSVNDMV8wLiAgQ1BVX0lTX1BBX1JJU0MgcmV0dXJucyBjb3JyZWN0CisJICAgICByZXN1bHRzLCBob3dldmVyLiAgKi8KKwkgIGlmIChDUFVfSVNfUEFfUklTQyAoY3B1KSkKKwkgICAgeworCSAgICAgIHN3aXRjaCAoY3B1KQorCQl7CisJCSAgY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMl8wOiBwdXRzICgiaHBwYTIuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgZGVmYXVsdDogcHV0cyAoImhwcGEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQl9CisJICAgIH0KKwkgIGVsc2UgaWYgKENQVV9JU19IUF9NQzY4SyAoY3B1KSkKKwkgICAgcHV0cyAoIm02OGstaGl0YWNoaS1oaXV4d2UyIik7CisJICBlbHNlIHB1dHMgKCJ1bmtub3duLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZXhpdCAoMCk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwkJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyB1bmtub3duLWhpdGFjaGktaGl1eHdlMgorCWV4aXQgOzsKKyAgICA5MDAwLzc/Pzo0LjNic2Q6KjoqIHwgOTAwMC84P1s3OV06NC4zYnNkOio6KiApCisJZWNobyBocHBhMS4xLWhwLWJzZAorCWV4aXQgOzsKKyAgICA5MDAwLzg/Pzo0LjNic2Q6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1ic2QKKwlleGl0IDs7CisgICAgKjk/Pyo6TVBFL2lYOio6KiB8ICozMDAwKjpNUEUvaVg6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1tcGVpeAorCWV4aXQgOzsKKyAgICBocDc/PzpPU0YxOio6KiB8IGhwOD9bNzldOk9TRjE6KjoqICkKKwllY2hvIGhwcGExLjEtaHAtb3NmCisJZXhpdCA7OworICAgIGhwOD8/Ok9TRjE6KjoqKQorCWVjaG8gaHBwYTEuMC1ocC1vc2YKKwlleGl0IDs7CisgICAgaSo4NjpPU0YxOio6KikKKwlpZiBbIC14IC91c3Ivc2Jpbi9zeXN2ZXJzaW9uIF0gOyB0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjFtaworCWVsc2UKKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMQorCWZpCisJZXhpdCA7OworICAgIHBhcmlzYyo6TGl0ZXMqOio6KikKKwllY2hvIGhwcGExLjEtaHAtbGl0ZXMKKwlleGl0IDs7CisgICAgQzEqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMSo6KikKKwllY2hvIGMxLWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIEMyKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzIqOiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorICAgICAgICBleGl0IDs7CisgICAgQzM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM0KjoqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIEMzOCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzOCo6KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQorCWVjaG8gYzQtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQ1JBWSpZLU1QOio6KjoqKQorCWVjaG8geW1wLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqW0EtWl05MDoqOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IFwKKwl8IHNlZCAtZSAncy9DUkFZLipcKFtBLVpdOTBcKS9cMS8nIFwKKwkgICAgICAtZSB5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LyBcCisJICAgICAgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlRTOio6KjoqKQorCWVjaG8gdDkwLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVDNFOio6KjoqKQorCWVjaG8gYWxwaGFldjUtY3JheS11bmljb3NtayR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlNWMToqOio6KikKKwllY2hvIHN2MS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICAqOlVOSUNPUy9tcDoqOiopCisJZWNobyBjcmF5bnYtY3JheS11bmljb3NtcCR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBGMzBbMDFdOlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5c3RlbV9WOio6KikKKwlGVUpJVFNVX1BST0M9YHVuYW1lIC1tIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorICAgICAgICBGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisgICAgICAgIEZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvIC9fLydgCisgICAgICAgIGVjaG8gIiR7RlVKSVRTVV9QUk9DfS1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCisgICAgICAgIGV4aXQgOzsKKyAgICA1MDAwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisgICAgICAgIEZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKyAgICAgICAgRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy8gL18vJ2AKKyAgICAgICAgZWNobyAic3BhcmMtZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorCWV4aXQgOzsKKyAgICBpKjg2OkJTRC8zODY6KjoqIHwgaSo4NjpCU0QvT1M6KjoqIHwgKjpBc2NlbmRcIEVtYmVkZGVkL09TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3BhcmMqOkJTRC9PUzoqOiopCisJZWNobyBzcGFyYy11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6QlNEL09TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkZyZWVCU0Q6KjoqKQorCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICBwYzk4KQorCQllY2hvIGkzODYtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCSAgICBhbWQ2NCkKKwkJZWNobyB4ODZfNjQtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCSAgICAqKQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OworCWVzYWMKKwlleGl0IDs7CisgICAgaSo6Q1lHV0lOKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1jeWd3aW4KKwlleGl0IDs7CisgICAgKjpNSU5HVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjp3aW5kb3dzMzIqOiopCisgICAgCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1taW5ndzMyCisJZXhpdCA7OworICAgIGkqOlBXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1wdzMyCisJZXhpdCA7OworICAgIHg4NjpJbnRlcml4KjpbMzQ1Nl0qKQorCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBFTTY0VDpJbnRlcml4KjpbMzQ1Nl0qIHwgYXV0aGVudGljYW1kOkludGVyaXgqOlszNDU2XSopCisJZWNobyB4ODZfNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCisJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKKwlleGl0IDs7CisgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCisJIyBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZCBvZiBpMzg2PworCWVjaG8gaTU4Ni1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIGkqOlVXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXV3aW4KKwlleGl0IDs7CisgICAgYW1kNjQ6Q1lHV0lOKjoqOiogfCB4ODZfNjQ6Q1lHV0lOKjoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcCo6Q1lHV0lOKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHByZXAqOlN1bk9TOjUuKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgKjpHTlU6KjoqKQorCSMgdGhlIEdOVSBzeXN0ZW0KKwllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tZ251YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKKwlleGl0IDs7CisgICAgKjpHTlUvKjoqOiopCisJIyBvdGhlciBzeXN0ZW1zIHdpdGggR05VIGxpYmMgYW5kIHVzZXJsYW5kCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpNaW5peDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4CisJZXhpdCA7OworICAgIGFybSo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBhdnIzMio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBjcmlzOkxpbnV4Oio6KikKKwllY2hvIGNyaXMtYXhpcy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgY3Jpc3YzMjpMaW51eDoqOiopCisJZWNobyBjcmlzdjMyLWF4aXMtbGludXgtZ251CisJZXhpdCA7OworICAgIGZydjpMaW51eDoqOiopCisgICAgCWVjaG8gZnJ2LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGlhNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtMzJyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG02OCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBtaXBzOkxpbnV4Oio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjdW5kZWYgQ1BVCisJI3VuZGVmIG1pcHMKKwkjdW5kZWYgbWlwc2VsCisJI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKKwlDUFU9bWlwc2VsCisJI2Vsc2UKKwkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQorCUNQVT1taXBzCisJI2Vsc2UKKwlDUFU9CisJI2VuZGlmCisJI2VuZGlmCitFT0YKKwlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCisJICAgIC9eQ1BVL3sKKwkJczogOjpnCisJCXAKKwkgICAgfSdgIgorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9CisJOzsKKyAgICBtaXBzNjQ6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgbWlwczY0CisJI3VuZGVmIG1pcHM2NGVsCisJI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKKwlDUFU9bWlwczY0ZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPW1pcHM2NAorCSNlbHNlCisJQ1BVPQorCSNlbmRpZgorCSNlbmRpZgorRU9GCisJZXZhbCAiYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBzZWQgLW4gJworCSAgICAvXkNQVS97CisJCXM6IDo6ZworCQlwCisJICAgIH0nYCIKKwl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtZ251IjsgZXhpdDsgfQorCTs7CisgICAgb3IzMjpMaW51eDoqOiopCisJZWNobyBvcjMyLXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBwYzpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHBwYzY0OkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBhbHBoYTpMaW51eDoqOiopCisJY2FzZSBgc2VkIC1uICcvXmNwdSBtb2RlbC9zL14uKjogXCguKlwpL1wxL3AnIDwgL3Byb2MvY3B1aW5mb2AgaW4KKwkgIEVWNSkgICBVTkFNRV9NQUNISU5FPWFscGhhZXY1IDs7CisJICBFVjU2KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NTYgOzsKKwkgIFBDQTU2KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIFBDQTU3KSBVTkFNRV9NQUNISU5FPWFscGhhcGNhNTYgOzsKKwkgIEVWNikgICBVTkFNRV9NQUNISU5FPWFscGhhZXY2IDs7CisJICBFVjY3KSAgVU5BTUVfTUFDSElORT1hbHBoYWV2NjcgOzsKKwkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OworICAgICAgICBlc2FjCisJb2JqZHVtcCAtLXByaXZhdGUtaGVhZGVycyAvYmluL3NoIHwgZ3JlcCBsZC5zby4xID4vZGV2L251bGwKKwlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJsaWJjMSIgOyBlbHNlIExJQkM9IiIgOyBmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KKwlleGl0IDs7CisgICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQorCSMgTG9vayBmb3IgQ1BVIGxldmVsCisJY2FzZSBgZ3JlcCAnXmNwdVteYS16XSo6JyAvcHJvYy9jcHVpbmZvIDI+L2Rldi9udWxsIHwgY3V0IC1kJyAnIC1mMmAgaW4KKwkgIFBBNyopIGVjaG8gaHBwYTEuMS11bmtub3duLWxpbnV4LWdudSA7OworCSAgUEE4KikgZWNobyBocHBhMi4wLXVua25vd24tbGludXgtZ251IDs7CisJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKKwllc2FjCisJZXhpdCA7OworICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eAorCWV4aXQgOzsKKyAgICBzaDY0KjpMaW51eDoqOiopCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzaCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgdmF4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB4ODZfNjQ6TGludXg6KjoqKQorCWVjaG8geDg2XzY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHh0ZW5zYTpMaW51eDoqOiopCisgICAgCWVjaG8geHRlbnNhLXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGkqODY6TGludXg6KjoqKQorCSMgVGhlIEJGRCBsaW5rZXIga25vd3Mgd2hhdCB0aGUgZGVmYXVsdCBvYmplY3QgZmlsZSBmb3JtYXQgaXMsIHNvCisJIyBmaXJzdCBzZWUgaWYgaXQgd2lsbCB0ZWxsIHVzLiBjZCB0byB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gcHJldmVudAorCSMgcHJvYmxlbXMgd2l0aCBvdGhlciBwcm9ncmFtcyBvciBkaXJlY3RvcmllcyBjYWxsZWQgYGxkJyBpbiB0aGUgcGF0aC4KKwkjIFNldCBMQ19BTEw9QyB0byBlbnN1cmUgbGQgb3V0cHV0cyBtZXNzYWdlcyBpbiBFbmdsaXNoLgorCWxkX3N1cHBvcnRlZF90YXJnZXRzPWBjZCAvOyBMQ19BTEw9QyBsZCAtLWhlbHAgMj4mMSBcCisJCQkgfCBzZWQgLW5lICcvc3VwcG9ydGVkIHRhcmdldHM6LyFkCisJCQkJICAgIHMvWyAJXVsgCV0qLyAvZworCQkJCSAgICBzLy4qc3VwcG9ydGVkIHRhcmdldHM6ICovLworCQkJCSAgICBzLyAuKi8vCisJCQkJICAgIHAnYAorICAgICAgICBjYXNlICIkbGRfc3VwcG9ydGVkX3RhcmdldHMiIGluCisJICBlbGYzMi1pMzg2KQorCQlURU5UQVRJVkU9IiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251IgorCQk7OworCSAgYS5vdXQtaTM4Ni1saW51eCkKKwkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVhb3V0IgorCQlleGl0IDs7CisJICBjb2ZmLWkzODYpCisJCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251Y29mZiIKKwkJZXhpdCA7OworCSAgIiIpCisJCSMgRWl0aGVyIGEgcHJlLUJGRCBhLm91dCBsaW5rZXIgKGxpbnV4LWdudW9sZGxkKSBvcgorCQkjIG9uZSB0aGF0IGRvZXMgbm90IGdpdmUgdXMgdXNlZnVsIC0taGVscC4KKwkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVvbGRsZCIKKwkJZXhpdCA7OworCWVzYWMKKwkjIERldGVybWluZSB3aGV0aGVyIHRoZSBkZWZhdWx0IGNvbXBpbGVyIGlzIGEub3V0IG9yIGVsZgorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCSNpZmRlZiBfX0VMRl9fCisJIyBpZmRlZiBfX0dMSUJDX18KKwkjICBpZiBfX0dMSUJDX18gPj0gMgorCUxJQkM9Z251CisJIyAgZWxzZQorCUxJQkM9Z251bGliYzEKKwkjICBlbmRpZgorCSMgZWxzZQorCUxJQkM9Z251bGliYzEKKwkjIGVuZGlmCisJI2Vsc2UKKwkjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSB8fCBkZWZpbmVkKF9fUEdJKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0MpIHx8IGRlZmluZWQoX19TVU5QUk9fQ0MpCisJTElCQz1nbnUKKwkjZWxzZQorCUxJQkM9Z251YW91dAorCSNlbmRpZgorCSNlbmRpZgorCSNpZmRlZiBfX2RpZXRsaWJjX18KKwlMSUJDPWRpZXRsaWJjCisJI2VuZGlmCitFT0YKKwlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCisJICAgIC9eTElCQy97CisJCXM6IDo6ZworCQlwCisJICAgIH0nYCIKKwl0ZXN0IHgiJHtMSUJDfSIgIT0geCAmJiB7CisJCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKKwkJZXhpdAorCX0KKwl0ZXN0IHgiJHtURU5UQVRJVkV9IiAhPSB4ICYmIHsgZWNobyAiJHtURU5UQVRJVkV9IjsgZXhpdDsgfQorCTs7CisgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKKwkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgorCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKKwkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgorCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCisgICAgICAgICMgVW5peHdhcmUgaXMgYW4gb2Zmc2hvb3Qgb2YgU1ZSNCwgYnV0IGl0IGhhcyBpdHMgb3duIHZlcnNpb24KKyAgICAgICAgIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgorICAgICAgICAjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCisJIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgorICAgICAgICAjIFVzZSBzeXN2NC4ydXcuLi4gc28gdGhhdCBzeXN2NCogbWF0Y2hlcyBpdC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjQuMnV3JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Ok9TLzI6KjoqKQorCSMgSWYgd2Ugd2VyZSBhYmxlIHRvIGZpbmQgYHVuYW1lJywgdGhlbiBFTVggVW5peCBjb21wYXRpYmlsaXR5CisJIyBpcyBwcm9iYWJseSBpbnN0YWxsZWQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW9zMi1lbXgKKwlleGl0IDs7CisgICAgaSo4NjpYVFMtMzAwOio6U1RPUCkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zdG9wCisJZXhpdCA7OworICAgIGkqODY6YXRoZW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hdGhlb3MKKwlleGl0IDs7CisgICAgaSo4NjpzeWxsYWJsZToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5bGxhYmxlCisJZXhpdCA7OworICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC4wKjoqKQorCWVjaG8gaTM4Ni11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaSo4NjoqRE9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKKyAgICBpKjg2Oio6NC4qOiogfCBpKjg2OlNZU1RFTV9WOjQuKjoqKQorCVVOQU1FX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkICdzL1wvTVAkLy8nYAorCWlmIGdyZXAgTm92ZWxsIC91c3IvaW5jbHVkZS9saW5rLmggPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5pdmVsLXN5c3Yke1VOQU1FX1JFTH0KKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2JHtVTkFNRV9SRUx9CisJZmkKKwlleGl0IDs7CisgICAgaSo4NjoqOjU6WzY3OF0qKQorICAgIAkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KKwljYXNlIGAvYmluL3VuYW1lIC1YIHwgZ3JlcCAiXk1hY2hpbmUiYCBpbgorCSAgICAqNDg2KikJICAgICBVTkFNRV9NQUNISU5FPWk0ODYgOzsKKwkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7CisJICAgICpQZW50KnwqQ2VsZXJvbikgVU5BTUVfTUFDSElORT1pNjg2IDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9JHtVTkFNRV9TWVNURU19JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Oio6My4yOiopCisJaWYgdGVzdCAtZiAvdXNyL29wdGlvbnMvY2IubmFtZTsgdGhlbgorCQlVTkFNRV9SRUw9YHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWVgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1pc2MkVU5BTUVfUkVMCisJZWxpZiAvYmluL3VuYW1lIC1YIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX1JFTD1gKC9iaW4vdW5hbWUgLVh8Z3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCBpODA0ODYgPi9kZXYvbnVsbCkgJiYgVU5BTUVfTUFDSElORT1pNDg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk1ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnQgKklJJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKKwlmaQorCWV4aXQgOzsKKyAgICBwYzoqOio6KikKKwkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKKyAgICAgICAgIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKKyAgICAgICAgIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTM4Ni4KKwllY2hvIGkzODYtcGMtbXNkb3NkamdwcAorICAgICAgICBleGl0IDs7CisgICAgSW50ZWw6TWFjaDozKjoqKQorCWVjaG8gaTM4Ni1wYy1tYWNoMworCWV4aXQgOzsKKyAgICBwYXJhZ29uOio6KjoqKQorCWVjaG8gaTg2MC1pbnRlbC1vc2YxCisJZXhpdCA7OworICAgIGk4NjA6Kjo0Lio6KikgIyBpODYwLVNWUjQKKwlpZiBncmVwIFN0YXJkZW50IC91c3IvaW5jbHVkZS9zeXMvdWFkbWluLmggPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgZWNobyBpODYwLXN0YXJkZW50LXN5c3Yke1VOQU1FX1JFTEVBU0V9ICMgU3RhcmRlbnQgVmlzdHJhIGk4NjAtU1ZSNAorCWVsc2UgIyBBZGQgb3RoZXIgaTg2MC1TVlI0IHZlbmRvcnMgYmVsb3cgYXMgdGhleSBhcmUgZGlzY292ZXJlZC4KKwkgIGVjaG8gaTg2MC11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9ICAjIFVua25vd24gaTg2MC1TVlI0CisJZmkKKwlleGl0IDs7CisgICAgbWluaSo6Q1RJWDpTWVMqNToqKQorCSMgIm1pbmlmcmFtZSIKKwllY2hvIG02ODAxMC1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgbWM2OGs6VU5JWDpTWVNURU01OjMuNTFtKQorCWVjaG8gbTY4ay1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgTTY4MD8wOkQtTklYOjUuMzoqKQorCWVjaG8gbTY4ay1kaWFiLWRuaXgKKwlleGl0IDs7CisgICAgTTY4KjoqOlIzVls1Njc4XSo6KikKKwl0ZXN0IC1yIC9zeXNWNjggJiYgeyBlY2hvICdtNjhrLW1vdG9yb2xhLXN5c3YnOyBleGl0OyB9IDs7CisgICAgM1szNDVdPz86Kjo0LjA6My4wIHwgM1szNF0/P0E6Kjo0LjA6My4wIHwgM1szNF0/PywqOio6NC4wOjMuMCB8IDNbMzRdPz8vKjoqOjQuMDozLjAgfCA0NDAwOio6NC4wOjMuMCB8IDQ4NTA6Kjo0LjA6My4wIHwgU0tBNDA6Kjo0LjA6My4wIHwgU0RTMjoqOjQuMDozLjAgfCBTSEcyOio6NC4wOjMuMCB8IFM3NTAxKjoqOjQuMDozLjApCisJT1NfUkVMPScnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIDNbMzRdPz86Kjo0LjA6KiB8IDNbMzRdPz8sKjoqOjQuMDoqKQorICAgICAgICAvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKyAgICAgICAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKKwllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1jNjgwMzA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKwllY2hvIG02OGstYXRhcmktc3lzdjQKKwlleGl0IDs7CisgICAgVFNVTkFNSTpMeW54T1M6Mi4qOiopCisJZWNobyBzcGFyYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcnM2MDAwOkx5bnhPUzoyLio6KikKKwllY2hvIHJzNjAwMC11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LjAqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTTVtCRV1TOlVOSVhfU1Y6KjoqKQorCWVjaG8gbWlwcy1kZGUtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUk0qOlJlbGlhbnRVTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgUk0qOlNJTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgKjpTSU5JWC0qOio6KikKKwlpZiB1bmFtZSAtcCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tc25pLXN5c3Y0CisJZWxzZQorCQllY2hvIG5zMzJrLXNuaS1zeXN2CisJZmkKKwlleGl0IDs7CisgICAgUEVOVElVTToqOjQuMCo6KikgIyBVbmlzeXMgYENsZWFyUGF0aCBITVAgSVggNDAwMCcgU1ZSNC9NUCBlZmZvcnQKKyAgICAgICAgICAgICAgICAgICAgICAjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+CisgICAgICAgIGVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKKyAgICAgICAgZXhpdCA7OworICAgICo6VU5JWF9TeXN0ZW1fVjo0KjpGVFgqKQorCSMgRnJvbSBHZXJhbGQgSGV3ZXMgPGhld2VzQG9wZW5tYXJrZXQuY29tPi4KKwkjIEhvdyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBzdHJhdHVzIGFyY2hpdGVjdHVyZXM/IC1kam0KKwllY2hvIGhwcGExLjEtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICAqOio6KjpGVFgqKQorCSMgRnJvbSBzZWFuZkBzd2RjLnN0cmF0dXMuY29tLgorCWVjaG8gaTg2MC1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgKjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICBtYzY4KjpBL1VYOio6KikKKwllY2hvIG02OGstYXBwbGUtYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBuZXdzKjpORVdTLU9TOjYqOiopCisJZWNobyBtaXBzLXNvbnktbmV3c29zNgorCWV4aXQgOzsKKyAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKKwlpZiBbIC1kIC91c3IvbmVjIF07IHRoZW4KKwkgICAgICAgIGVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwllbHNlCisJICAgICAgICBlY2hvIG1pcHMtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWZpCisgICAgICAgIGV4aXQgOzsKKyAgICBCZUJveDpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gaGFyZHdhcmUgbWFkZSBieSBCZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWJlLWJlb3MKKwlleGl0IDs7CisgICAgQmVNYWM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIE1hYyBvciBNYWMgY2xvbmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1hcHBsZS1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWJlb3MKKwlleGl0IDs7CisgICAgU1gtNDpTVVBFUi1VWDoqOiopCisJZWNobyBzeDQtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTU6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g1LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC02OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ni1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNzpTVVBFUi1VWDoqOiopCisJZWNobyBzeDctbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTg6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04UjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDhyLW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBQb3dlcio6UmhhcHNvZHk6KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpSaGFwc29keToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkRhcndpbjoqOiopCisJVU5BTUVfUFJPQ0VTU09SPWB1bmFtZSAtcGAgfHwgVU5BTUVfUFJPQ0VTU09SPXVua25vd24KKwljYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KKwkgICAgdW5rbm93bikgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMgOzsKKwllc2FjCisJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tYXBwbGUtZGFyd2luJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOnByb2NudG8qOio6KiB8ICo6UU5YOlswMTIzNDU2Nzg5XSo6KikKKwlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYAorCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gIng4NiI7IHRoZW4KKwkJVU5BTUVfUFJPQ0VTU09SPWkzODYKKwkJVU5BTUVfTUFDSElORT1wYworCWZpCisJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tJHtVTkFNRV9NQUNISU5FfS1udG8tcW54JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlFOWDoqOjQqKQorCWVjaG8gaTM4Ni1wYy1xbngKKwlleGl0IDs7CisgICAgTlNFLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNlLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE5TUi0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zci10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk5vblN0b3AtVVg6KjoqKQorCWVjaG8gbWlwcy1jb21wYXEtbm9uc3RvcHV4CisJZXhpdCA7OworICAgIEJTMjAwMDpQT1NJWCo6KjoqKQorCWVjaG8gYnMyMDAwLXNpZW1lbnMtc3lzdgorCWV4aXQgOzsKKyAgICBEUy8qOlVOSVhfU3lzdGVtX1Y6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS0ke1VOQU1FX1NZU1RFTX0tJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlBsYW45Oio6KikKKwkjICJ1bmFtZSAtbSIgaXMgbm90IGNvbnNpc3RlbnQsIHNvIHVzZSAkY3B1dHlwZSBpbnN0ZWFkLiAzODYKKwkjIGlzIGNvbnZlcnRlZCB0byBpMzg2IGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHg4NgorCSMgb3BlcmF0aW5nIHN5c3RlbXMuCisJaWYgdGVzdCAiJGNwdXR5cGUiID0gIjM4NiI7IHRoZW4KKwkgICAgVU5BTUVfTUFDSElORT1pMzg2CisJZWxzZQorCSAgICBVTkFNRV9NQUNISU5FPSIkY3B1dHlwZSIKKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXBsYW45CisJZXhpdCA7OworICAgICo6VE9QUy0xMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAorCWV4aXQgOzsKKyAgICAqOlRFTkVYOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKKwlleGl0IDs7CisgICAgS1MxMDpUT1BTLTIwOio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLWRlYy10b3BzMjAKKwlleGl0IDs7CisgICAgWEtMLTE6VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXhrbC10b3BzMjAKKwlleGl0IDs7CisgICAgKjpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczIwCisJZXhpdCA7OworICAgICo6SVRTOio6KikKKwllY2hvIHBkcDEwLXVua25vd24taXRzCisJZXhpdCA7OworICAgIFNFSToqOio6U0VJVVgpCisgICAgICAgIGVjaG8gbWlwcy1zZWktc2VpdXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RHJhZ29uRmx5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1kcmFnb25mbHlgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgCisJZXhpdCA7OworICAgICo6KlZNUzoqOiopCisgICAgCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgQSopIGVjaG8gYWxwaGEtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgSSopIGVjaG8gaWE2NC1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBWKikgZWNobyB2YXgtZGVjLXZtcyA7IGV4aXQgOzsKKwllc2FjIDs7CisgICAgKjpYRU5JWDoqOlN5c1YpCisJZWNobyBpMzg2LXBjLXhlbml4CisJZXhpdCA7OworICAgIGkqODY6c2t5b3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1za3lvc2BlY2hvICR7VU5BTUVfUkVMRUFTRX1gIHwgc2VkIC1lICdzLyAuKiQvLycKKwlleGl0IDs7CisgICAgaSo4NjpyZG9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcworCWV4aXQgOzsKK2VzYWMKKworI2VjaG8gJyhObyB1bmFtZSBjb21tYW5kIG9yIHVuYW1lIG91dHB1dCBub3QgcmVjb2duaXplZC4pJyAxPiYyCisjZWNobyAiJHtVTkFNRV9NQUNISU5FfToke1VOQU1FX1NZU1RFTX06JHtVTkFNRV9SRUxFQVNFfToke1VOQU1FX1ZFUlNJT059IiAxPiYyCisKK2V2YWwgJHNldF9jY19mb3JfYnVpbGQKK2NhdCA+JGR1bW15LmMgPDxFT0YKKyNpZmRlZiBfU0VRVUVOVF8KKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjIGluY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjZW5kaWYKK21haW4gKCkKK3sKKyNpZiBkZWZpbmVkIChzb255KQorI2lmIGRlZmluZWQgKE1JUFNFQikKKyAgLyogQkZEIHdhbnRzICJic2QiIGluc3RlYWQgb2YgIm5ld3NvcyIuICBQZXJoYXBzIEJGRCBzaG91bGQgYmUgY2hhbmdlZCwKKyAgICAgSSBkb24ndCBrbm93Li4uLiAgKi8KKyAgcHJpbnRmICgibWlwcy1zb255LWJzZFxuIik7IGV4aXQgKDApOworI2Vsc2UKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyAgcHJpbnRmICgibTY4ay1zb255LW5ld3NvcyVzXG4iLAorI2lmZGVmIE5FV1NPUzQKKyAgICAgICAgICAiNCIKKyNlbHNlCisJICAiIgorI2VuZGlmCisgICAgICAgICApOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfX2FybSkgJiYgZGVmaW5lZCAoX19hY29ybikgJiYgZGVmaW5lZCAoX191bml4KQorICBwcmludGYgKCJhcm0tYWNvcm4tcmlzY2l4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKGhwMzAwKSAmJiAhZGVmaW5lZCAoaHB1eCkKKyAgcHJpbnRmICgibTY4ay1ocC1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoTmVYVCkKKyNpZiAhZGVmaW5lZCAoX19BUkNISVRFQ1RVUkVfXykKKyNkZWZpbmUgX19BUkNISVRFQ1RVUkVfXyAibTY4ayIKKyNlbmRpZgorICBpbnQgdmVyc2lvbjsKKyAgdmVyc2lvbj1gKGhvc3RpbmZvIHwgc2VkIC1uICdzLy4qTmVYVCBNYWNoIFwoWzAtOV0qXCkuKi9cMS9wJykgMj4vZGV2L251bGxgOworICBpZiAodmVyc2lvbiA8IDQpCisgICAgcHJpbnRmICgiJXMtbmV4dC1uZXh0c3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZWxzZQorICAgIHByaW50ZiAoIiVzLW5leHQtb3BlbnN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7CisgIGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChNVUxUSU1BWCkgfHwgZGVmaW5lZCAobjE2KQorI2lmIGRlZmluZWQgKFVNQVhWKQorICBwcmludGYgKCJuczMyay1lbmNvcmUtc3lzdlxuIik7IGV4aXQgKDApOworI2Vsc2UKKyNpZiBkZWZpbmVkIChDTVUpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1tYWNoXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorICBwcmludGYgKCJuczMyay1lbmNvcmUtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkIChfXzM4NkJTRF9fKQorICBwcmludGYgKCJpMzg2LXBjLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChzZXF1ZW50KQorI2lmIGRlZmluZWQgKGkzODYpCisgIHByaW50ZiAoImkzODYtc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjaWYgZGVmaW5lZCAobnMzMjAwMCkKKyAgcHJpbnRmICgibnMzMmstc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9TRVFVRU5UXykKKyAgICBzdHJ1Y3QgdXRzbmFtZSB1bjsKKworICAgIHVuYW1lKCZ1bik7CisKKyAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjIiLCAyKSA9PSAwKSB7CisJcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDJcbiIpOyBleGl0ICgwKTsKKyAgICB9CisgICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYxIiwgMikgPT0gMCkgeyAvKiBYWFggaXMgVjEgY29ycmVjdD8gKi8KKwlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MVxuIik7IGV4aXQgKDApOworICAgIH0KKyAgICBwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4XG4iKTsgZXhpdCAoMCk7CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAodmF4KQorIyBpZiAhZGVmaW5lZCAodWx0cml4KQorIyAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICBpZiBkZWZpbmVkIChCU0QpCisjICAgaWYgQlNEID09IDQzCisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM1xuIik7IGV4aXQgKDApOworIyAgIGVsc2UKKyMgICAgaWYgQlNEID09IDE5OTAwNgorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNyZW5vXG4iKTsgZXhpdCAoMCk7CisjICAgIGVsc2UKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVsc2UKKyAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOworIyAgZW5kaWYKKyMgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtdWx0cml4XG4iKTsgZXhpdCAoMCk7CisjIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKGFsbGlhbnQpICYmIGRlZmluZWQgKGk4NjApCisgIHByaW50ZiAoImk4NjAtYWxsaWFudC1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisgIGV4aXQgKDEpOworfQorRU9GCisKKyRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisKKyMgQXBvbGxvcyBwdXQgdGhlIHN5c3RlbSB0eXBlIGluIHRoZSBlbnZpcm9ubWVudC4KKwordGVzdCAtZCAvdXNyL2Fwb2xsbyAmJiB7IGVjaG8gJHtJU1B9LWFwb2xsby0ke1NZU1RZUEV9OyBleGl0OyB9CisKKyMgQ29udmV4IHZlcnNpb25zIHRoYXQgcHJlZGF0ZSB1bmFtZSBjYW4gdXNlIGdldHN5c2luZm8oMSkKKworaWYgWyAteCAvdXNyL2NvbnZleC9nZXRzeXNpbmZvIF0KK3RoZW4KKyAgICBjYXNlIGBnZXRzeXNpbmZvIC1mIGNwdV90eXBlYCBpbgorICAgIGMxKikKKwllY2hvIGMxLWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzIqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKwlleGl0IDs7CisgICAgYzM0KikKKwllY2hvIGMzNC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGMzOCopCisJZWNobyBjMzgtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjNCopCisJZWNobyBjNC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGVzYWMKK2ZpCisKK2NhdCA+JjIgPDxFT0YKKyQwOiB1bmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUKKworVGhpcyBzY3JpcHQsIGxhc3QgbW9kaWZpZWQgJHRpbWVzdGFtcCwgaGFzIGZhaWxlZCB0byByZWNvZ25pemUKK3RoZSBvcGVyYXRpbmcgc3lzdGVtIHlvdSBhcmUgdXNpbmcuIEl0IGlzIGFkdmlzZWQgdGhhdCB5b3UKK2Rvd25sb2FkIHRoZSBtb3N0IHVwIHRvIGRhdGUgdmVyc2lvbiBvZiB0aGUgY29uZmlnIHNjcmlwdHMgZnJvbQorCisgIGh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL2NnaS1iaW4vdmlld2N2cy8qY2hlY2tvdXQqL2NvbmZpZy9jb25maWcvY29uZmlnLmd1ZXNzCithbmQKKyAgaHR0cDovL3NhdmFubmFoLmdudS5vcmcvY2dpLWJpbi92aWV3Y3ZzLypjaGVja291dCovY29uZmlnL2NvbmZpZy9jb25maWcuc3ViCisKK0lmIHRoZSB2ZXJzaW9uIHlvdSBydW4gKCQwKSBpcyBhbHJlYWR5IHVwIHRvIGRhdGUsIHBsZWFzZQorc2VuZCB0aGUgZm9sbG93aW5nIGRhdGEgYW5kIGFueSBpbmZvcm1hdGlvbiB5b3UgdGhpbmsgbWlnaHQgYmUKK3BlcnRpbmVudCB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4gaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGUgbmVlZGVkCitpbmZvcm1hdGlvbiB0byBoYW5kbGUgeW91ciBzeXN0ZW0uCisKK2NvbmZpZy5ndWVzcyB0aW1lc3RhbXAgPSAkdGltZXN0YW1wCisKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsYAorCitob3N0aW5mbyAgICAgICAgICAgICAgID0gYChob3N0aW5mbykgMj4vZGV2L251bGxgCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsYAorL2Jpbi9hcmNoICAgICAgICAgICAgICA9IGAoL2Jpbi9hcmNoKSAyPi9kZXYvbnVsbGAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsYAorL3Vzci9jb252ZXgvZ2V0c3lzaW5mbyA9IGAoL3Vzci9jb252ZXgvZ2V0c3lzaW5mbykgMj4vZGV2L251bGxgCisKK1VOQU1FX01BQ0hJTkUgPSAke1VOQU1FX01BQ0hJTkV9CitVTkFNRV9SRUxFQVNFID0gJHtVTkFNRV9SRUxFQVNFfQorVU5BTUVfU1lTVEVNICA9ICR7VU5BTUVfU1lTVEVNfQorVU5BTUVfVkVSU0lPTiA9ICR7VU5BTUVfVkVSU0lPTn0KK0VPRgorCitleGl0IDEKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvY29uZmlnLmggYi9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzY3OTg4Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnLmgKQEAgLTAsMCArMSw0MTMgQEAKKy8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gICovCisvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5pbiBieSBhdXRvaGVhZGVyLiAgKi8KKworLyogVXNpbmcgQUlYICovCisvKiAjdW5kZWYgQUlYICovCisKKy8qIEJyb2tlbiBnZXRhZGRyaW5mbyAqLworLyogI3VuZGVmIEJST0tFTl9HRVRBRERSSU5GTyAqLworCisvKiBsYXN0bG9nIGZpbGUgbG9jYXRpb24gKi8KKy8qICN1bmRlZiBDT05GX0xBU1RMT0dfRklMRSAqLworCisvKiB1dG1weCBmaWxlIGxvY2F0aW9uICovCisvKiAjdW5kZWYgQ09ORl9VVE1QWF9GSUxFICovCisKKy8qIHV0bXAgZmlsZSBsb2NhdGlvbiAqLworLyogI3VuZGVmIENPTkZfVVRNUF9GSUxFICovCisKKy8qIHd0bXB4IGZpbGUgbG9jYXRpb24gKi8KKy8qICN1bmRlZiBDT05GX1dUTVBYX0ZJTEUgKi8KKworLyogd3RtcCBmaWxlIGxvY2F0aW9uICovCisvKiAjdW5kZWYgQ09ORl9XVE1QX0ZJTEUgKi8KKworLyogRGlzYWJsZSB1c2Ugb2YgbGFzdGxvZygpICovCisvKiAjdW5kZWYgRElTQUJMRV9MQVNUTE9HICovCisKKy8qIFVzZSBQQU0gKi8KKyNkZWZpbmUgRElTQUJMRV9QQU0gCisKKy8qIERpc2FibGUgdXNlIG9mIHB1dHV0bGluZSgpICovCisvKiAjdW5kZWYgRElTQUJMRV9QVVRVVExJTkUgKi8KKworLyogRGlzYWJsZSB1c2Ugb2YgcHV0dXR4bGluZSgpICovCisvKiAjdW5kZWYgRElTQUJMRV9QVVRVVFhMSU5FICovCisKKy8qIFVzaW5nIHN5c2xvZyAqLworLyogI3VuZGVmIERJU0FCTEVfU1lTTE9HICovCisKKy8qIERpc2FibGUgdXNlIG9mIHV0bXAgKi8KKy8qICN1bmRlZiBESVNBQkxFX1VUTVAgKi8KKworLyogRGlzYWJsZSB1c2Ugb2YgdXRtcHggKi8KKyNkZWZpbmUgRElTQUJMRV9VVE1QWCAxCisKKy8qIERpc2FibGUgdXNlIG9mIHd0bXAgKi8KKy8qICN1bmRlZiBESVNBQkxFX1dUTVAgKi8KKworLyogRGlzYWJsZSB1c2Ugb2Ygd3RtcHggKi8KKyNkZWZpbmUgRElTQUJMRV9XVE1QWCAxCisKKy8qIFVzZSB6bGliICovCisjZGVmaW5lIERJU0FCTEVfWkxJQiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmFzZW5hbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0JBU0VOQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbGVhcmVudicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ0xFQVJFTlYgMQorCisvKiBEZWZpbmUgaWYgZ2FpX3N0cmVycm9yKCkgcmV0dXJucyBjb25zdCBjaGFyICogKi8KKyNkZWZpbmUgSEFWRV9DT05TVF9HQUlfU1RSRVJST1JfUFJPVE8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGNyeXB0Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX0NSWVBUX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkYWVtb24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0RBRU1PTiAxCisKKy8qIFVzZSAvZGV2L3B0YyAmIC9kZXYvcHRzICovCisvKiAjdW5kZWYgSEFWRV9ERVZfUFRTX0FORF9QVEMgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkdXAyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9EVVAyIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBlbmR1dGVudCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRU5EVVRFTlQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGVuZHV0eGVudCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRU5EVVRYRU5UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9GQ05UTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmcmVlYWRkcmluZm8nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZSRUVBRERSSU5GTyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2FpX3N0cmVycm9yJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HQUlfU1RSRVJST1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGFkZHJpbmZvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRBRERSSU5GTyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0bmFtZWluZm8nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVE5BTUVJTkZPIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRzcG5hbScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUU1BOQU0gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHVzZXJzaGVsbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUVVNFUlNIRUxMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR1dGVudCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUVVRFTlQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHV0aWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFVUSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHV0bGluZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUVVRMSU5FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR1dHhlbnQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFVUWEVOVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dXR4aWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFVUWElEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR1dHhsaW5lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRVVFhMSU5FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpb2N0bC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0lPQ1RMX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsYXN0bG9nLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xBU1RMT0dfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGliZ2VuLmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX0xJQkdFTl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGFtJyBsaWJyYXJ5ICgtbHBhbSkuICovCisvKiAjdW5kZWYgSEFWRV9MSUJQQU0gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJ1dGlsLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfTElCVVRJTF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgeicgbGlicmFyeSAoLWx6KS4gKi8KKy8qICNkZWZpbmUgSEFWRV9MSUJaIFhYWD8qLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCisKKy8qIEhhdmUgbG9naW4oKSBmdW5jdGlvbiAqLworI2RlZmluZSBIQVZFX0xPR0lOIAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvZ291dCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTE9HT1VUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsb2d3dG1wJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9MT0dXVE1QIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbXNldCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTUVNU0VUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRkYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVREQl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pbl9zeXN0bS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICNkZWZpbmUgSEFWRV9ORVRJTkVUX0lOX1NZU1RNX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L3RjcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ORVRJTkVUX1RDUF9IIDEKKworLyogSGF2ZSBvcGVucHR5KCkgZnVuY3Rpb24gKi8KKyNkZWZpbmUgSEFWRV9PUEVOUFRZIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwYW0vcGFtX2FwcGwuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9QQU1fUEFNX0FQUExfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBhdGhzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1BBVEhTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB0eS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9QVFlfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHV0ZW52JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QVVRFTlYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHB1dHV0bGluZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUFVUVVRMSU5FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdXR1dHhsaW5lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QVVRVVFhMSU5FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZWN1cml0eS9wYW1fYXBwbC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NFQ1VSSVRZX1BBTV9BUFBMX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZWxlY3QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFTEVDVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0dXRlbnQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVFVURU5UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXR1dHhlbnQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVFVUWEVOVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2hhZG93Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI2RlZmluZSBIQVZFX1NIQURPV19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TT0NLRVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUkRVUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNhdCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJMQ0FUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RybGNweScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJMQ1BZICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Ryb3B0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJPUFRTX0ggMQorCisvKiBIYXZlIHN0cnVjdCBhZGRyaW5mbyAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9BRERSSU5GTyAKKworLyogSGF2ZSBzdHJ1Y3QgaW42X2FkZHIgKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSU42X0FERFIgCisKKy8qIEhhdmUgc3RydWN0IHNvY2thZGRyX2luNiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjYgCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZScuICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgc3NfZmFtaWx5JyBpcyBtZW1iZXIgb2YgYHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlJy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgdXRfYWRkcicgaXMgbWVtYmVyIG9mIGBzdHJ1Y3QgdXRtcHgnLiAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1VUTVBYX1VUX0FERFIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X2FkZHJfdjYnIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXB4Jy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfQUREUl9WNiAxCisKKy8qIERlZmluZSB0byAxIGlmIGB1dF9ob3N0JyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1weCcuICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBYX1VUX0hPU1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgdXRfaWQnIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXB4Jy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgdXRfc3lzbGVuJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1weCcuICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfU1lTTEVOICovCisKKy8qIERlZmluZSB0byAxIGlmIGB1dF90aW1lJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1weCcuICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfVElNRSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBgdXRfdHYnIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXB4Jy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfVFYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgdXRfdHlwZScgaXMgbWVtYmVyIG9mIGBzdHJ1Y3QgdXRtcHgnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QWF9VVF9UWVBFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X2FkZHInIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXAnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QX1VUX0FERFIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgdXRfYWRkcl92NicgaXMgbWVtYmVyIG9mIGBzdHJ1Y3QgdXRtcCcuICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBfVVRfQUREUl9WNiAxCisKKy8qIERlZmluZSB0byAxIGlmIGB1dF9leGl0JyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1wJy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUF9VVF9FWElUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X2hvc3QnIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXAnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QX1VUX0hPU1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgdXRfaWQnIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXAnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QX1VUX0lEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X3BpZCcgaXMgbWVtYmVyIG9mIGBzdHJ1Y3QgdXRtcCcuICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBfVVRfUElEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X3RpbWUnIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXAnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QX1VUX1RJTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgdXRfdHYnIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXAnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QX1VUX1RWIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X3R5cGUnIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXAnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QX1VUX1RZUEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgPHN5cy93YWl0Lmg+IHRoYXQgaXMgUE9TSVguMSBjb21wYXRpYmxlLiAqLworI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVEVSTUlPU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnQxNl90Jy4gKi8KKyNkZWZpbmUgSEFWRV9VSU5UMTZfVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1cGR3dG1wJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9VUERXVE1QIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dGlsLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfVVRJTF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXRtcG5hbWUnIGZ1bmN0aW9uLiAqLworLyogI2RlZmluZSBIQVZFX1VUTVBOQU1FICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXRtcHhuYW1lJyBmdW5jdGlvbi4gKi8KKy8qICNkZWZpbmUgSEFWRV9VVE1QWE5BTUUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dG1weC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICNkZWZpbmUgSEFWRV9VVE1QWF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXRtcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VVE1QX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdV9pbnQxNl90Jy4gKi8KKyNkZWZpbmUgSEFWRV9VX0lOVDE2X1QgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9nZXRwdHknIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfX0dFVFBUWSAqLworCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX05BTUUgIiIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1NUUklORyAiIgorCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiIgorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiIKKworLyogRGVmaW5lIGFzIHRoZSByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMgKGBpbnQnIG9yIGB2b2lkJykuICovCisjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJnIDEgZm9yIGBzZWxlY3QnLiAqLworI2RlZmluZSBTRUxFQ1RfVFlQRV9BUkcxIGludAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyAyLCAzIGFuZCA0IGZvciBgc2VsZWN0Jy4gKi8KKyNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHMjM0IChmZF9zZXQgKikKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA1IGZvciBgc2VsZWN0Jy4gKi8KKyNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHNSAoc3RydWN0IHRpbWV2YWwgKikKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIFNURENfSEVBREVSUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLworI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQorCisvKiBVc2UgL2Rldi9wdG14ICovCisvKiAjdW5kZWYgVVNFX0RFVl9QVE1YICovCisKKy8qIE51bWJlciBvZiBiaXRzIGluIGEgZmlsZSBvZmZzZXQsIG9uIGhvc3RzIHdoZXJlIHRoaXMgaXMgc2V0dGFibGUuICovCisjZGVmaW5lIF9GSUxFX09GRlNFVF9CSVRTIDY0CisKKy8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKy8qICN1bmRlZiBfTEFSR0VfRklMRVMgKi8KKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCisvKiAjdW5kZWYgY29uc3QgKi8KKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICovCisvKiAjdW5kZWYgZ2lkX3QgKi8KKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworLyogI3VuZGVmIG1vZGVfdCAqLworCisvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgcGlkX3QgKi8KKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgc2l6ZV90ICovCisKKy8qIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdCBpZiBub3QgZGVmaW5lZCAqLworLyogI3VuZGVmIHNvY2tsZW5fdCAqLworCisvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2Vzbid0IGRlZmluZS4gKi8KKy8qICN1bmRlZiB1aWRfdCAqLwpkaWZmIC0tZ2l0IGEvY29uZmlnLmguaW4gYi9jb25maWcuaC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmVhM2E3Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnLmguaW4KQEAgLTAsMCArMSw0MTIgQEAKKy8qIGNvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmluIGJ5IGF1dG9oZWFkZXIuICAqLworCisvKiBVc2luZyBBSVggKi8KKyN1bmRlZiBBSVgKKworLyogQnJva2VuIGdldGFkZHJpbmZvICovCisjdW5kZWYgQlJPS0VOX0dFVEFERFJJTkZPCisKKy8qIGxhc3Rsb2cgZmlsZSBsb2NhdGlvbiAqLworI3VuZGVmIENPTkZfTEFTVExPR19GSUxFCisKKy8qIHV0bXB4IGZpbGUgbG9jYXRpb24gKi8KKyN1bmRlZiBDT05GX1VUTVBYX0ZJTEUKKworLyogdXRtcCBmaWxlIGxvY2F0aW9uICovCisjdW5kZWYgQ09ORl9VVE1QX0ZJTEUKKworLyogd3RtcHggZmlsZSBsb2NhdGlvbiAqLworI3VuZGVmIENPTkZfV1RNUFhfRklMRQorCisvKiB3dG1wIGZpbGUgbG9jYXRpb24gKi8KKyN1bmRlZiBDT05GX1dUTVBfRklMRQorCisvKiBEaXNhYmxlIHVzZSBvZiBsYXN0bG9nKCkgKi8KKyN1bmRlZiBESVNBQkxFX0xBU1RMT0cKKworLyogVXNlIFBBTSAqLworI3VuZGVmIERJU0FCTEVfUEFNCisKKy8qIERpc2FibGUgdXNlIG9mIHB1dHV0bGluZSgpICovCisjdW5kZWYgRElTQUJMRV9QVVRVVExJTkUKKworLyogRGlzYWJsZSB1c2Ugb2YgcHV0dXR4bGluZSgpICovCisjdW5kZWYgRElTQUJMRV9QVVRVVFhMSU5FCisKKy8qIFVzaW5nIHN5c2xvZyAqLworI3VuZGVmIERJU0FCTEVfU1lTTE9HCisKKy8qIERpc2FibGUgdXNlIG9mIHV0bXAgKi8KKyN1bmRlZiBESVNBQkxFX1VUTVAKKworLyogRGlzYWJsZSB1c2Ugb2YgdXRtcHggKi8KKyN1bmRlZiBESVNBQkxFX1VUTVBYCisKKy8qIERpc2FibGUgdXNlIG9mIHd0bXAgKi8KKyN1bmRlZiBESVNBQkxFX1dUTVAKKworLyogRGlzYWJsZSB1c2Ugb2Ygd3RtcHggKi8KKyN1bmRlZiBESVNBQkxFX1dUTVBYCisKKy8qIFVzZSB6bGliICovCisjdW5kZWYgRElTQUJMRV9aTElCCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmFzZW5hbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQkFTRU5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbGVhcmVudicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DTEVBUkVOVgorCisvKiBEZWZpbmUgaWYgZ2FpX3N0cmVycm9yKCkgcmV0dXJucyBjb25zdCBjaGFyICogKi8KKyN1bmRlZiBIQVZFX0NPTlNUX0dBSV9TVFJFUlJPUl9QUk9UTworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGNyeXB0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfQ1JZUFRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRhZW1vbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9EQUVNT04KKworLyogVXNlIC9kZXYvcHRjICYgL2Rldi9wdHMgKi8KKyN1bmRlZiBIQVZFX0RFVl9QVFNfQU5EX1BUQworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGR1cDInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRFVQMgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGVuZHV0ZW50JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0VORFVURU5UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZW5kdXR4ZW50JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0VORFVUWEVOVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRkNOVExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZyZWVhZGRyaW5mbycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9GUkVFQUREUklORk8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnYWlfc3RyZXJyb3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0FJX1NUUkVSUk9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0YWRkcmluZm8nIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUQUREUklORk8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRuYW1laW5mbycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVROQU1FSU5GTworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHNwbmFtJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFNQTkFNCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dXNlcnNoZWxsJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFVTRVJTSEVMTAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHV0ZW50JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFVURU5UCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dXRpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRVVElECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dXRsaW5lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFVUTElORQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHV0eGVudCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRVVFhFTlQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR1dHhpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRVVFhJRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHV0eGxpbmUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUVVRYTElORQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSU5UVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGlvY3RsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSU9DVExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxhc3Rsb2cuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MQVNUTE9HX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJnZW4uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9MSUJHRU5fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBhbScgbGlicmFyeSAoLWxwYW0pLiAqLworI3VuZGVmIEhBVkVfTElCUEFNCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGlidXRpbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJQlVUSUxfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHonIGxpYnJhcnkgKC1seikuICovCisjdW5kZWYgSEFWRV9MSUJaCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGltaXRzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTElNSVRTX0gKKworLyogSGF2ZSBsb2dpbigpIGZ1bmN0aW9uICovCisjdW5kZWYgSEFWRV9MT0dJTgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvZ291dCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9MT0dPVVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsb2d3dG1wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xPR1dUTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9NRU1PUllfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbXNldCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9NRU1TRVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRkYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVERCX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pbl9zeXN0bS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX05FVElORVRfSU5fU1lTVE1fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvdGNwLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUSU5FVF9UQ1BfSAorCisvKiBIYXZlIG9wZW5wdHkoKSBmdW5jdGlvbiAqLworI3VuZGVmIEhBVkVfT1BFTlBUWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBhbS9wYW1fYXBwbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1BBTV9QQU1fQVBQTF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cGF0aHMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9QQVRIU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHR5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUFRZX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdXRlbnYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUFVURU5WCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHV0dXRsaW5lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BVVFVUTElORQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHB1dHV0eGxpbmUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUFVUVVRYTElORQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNlY3VyaXR5L3BhbV9hcHBsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU0VDVVJJVFlfUEFNX0FQUExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbGVjdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRUxFQ1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXR1dGVudCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRVVEVOVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHV0eGVudCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRVVFhFTlQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaGFkb3cuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TSEFET1dfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNvY2tldCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TT0NLRVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkRVUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJJTkdTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJJTkdfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjYXQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTENBVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmxjcHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSTENQWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cm9wdHMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVFJPUFRTX0gKKworLyogSGF2ZSBzdHJ1Y3QgYWRkcmluZm8gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9BRERSSU5GTworCisvKiBIYXZlIHN0cnVjdCBpbjZfYWRkciAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lONl9BRERSCisKKy8qIEhhdmUgc3RydWN0IHNvY2thZGRyX2luNiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONgorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UKKworLyogRGVmaW5lIHRvIDEgaWYgYHNzX2ZhbWlseScgaXMgbWVtYmVyIG9mIGBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZScuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFkKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X2FkZHInIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXB4Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VVE1QWF9VVF9BRERSCisKKy8qIERlZmluZSB0byAxIGlmIGB1dF9hZGRyX3Y2JyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1weCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfQUREUl9WNgorCisvKiBEZWZpbmUgdG8gMSBpZiBgdXRfaG9zdCcgaXMgbWVtYmVyIG9mIGBzdHJ1Y3QgdXRtcHgnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1VUTVBYX1VUX0hPU1QKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X2lkJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1weCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfSUQKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X3N5c2xlbicgaXMgbWVtYmVyIG9mIGBzdHJ1Y3QgdXRtcHgnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1VUTVBYX1VUX1NZU0xFTgorCisvKiBEZWZpbmUgdG8gMSBpZiBgdXRfdGltZScgaXMgbWVtYmVyIG9mIGBzdHJ1Y3QgdXRtcHgnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1VUTVBYX1VUX1RJTUUKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X3R2JyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1weCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfVFYKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X3R5cGUnIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXB4Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VVE1QWF9VVF9UWVBFCisKKy8qIERlZmluZSB0byAxIGlmIGB1dF9hZGRyJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1wJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VVE1QX1VUX0FERFIKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X2FkZHJfdjYnIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXAnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1VUTVBfVVRfQUREUl9WNgorCisvKiBEZWZpbmUgdG8gMSBpZiBgdXRfZXhpdCcgaXMgbWVtYmVyIG9mIGBzdHJ1Y3QgdXRtcCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVVRNUF9VVF9FWElUCisKKy8qIERlZmluZSB0byAxIGlmIGB1dF9ob3N0JyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1wJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VVE1QX1VUX0hPU1QKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X2lkJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1wJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VVE1QX1VUX0lECisKKy8qIERlZmluZSB0byAxIGlmIGB1dF9waWQnIGlzIG1lbWJlciBvZiBgc3RydWN0IHV0bXAnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1VUTVBfVVRfUElECisKKy8qIERlZmluZSB0byAxIGlmIGB1dF90aW1lJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1wJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VVE1QX1VUX1RJTUUKKworLyogRGVmaW5lIHRvIDEgaWYgYHV0X3R2JyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1wJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VVE1QX1VUX1RWCisKKy8qIERlZmluZSB0byAxIGlmIGB1dF90eXBlJyBpcyBtZW1iZXIgb2YgYHN0cnVjdCB1dG1wJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VVE1QX1VUX1RZUEUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NFTEVDVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TT0NLRVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1NUQVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RJTUVfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19UWVBFU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIDxzeXMvd2FpdC5oPiB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19XQUlUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0ZXJtaW9zLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVEVSTUlPU19ICisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50MTZfdCcuICovCisjdW5kZWYgSEFWRV9VSU5UMTZfVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1VOSVNURF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXBkd3RtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9VUERXVE1QCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXRpbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1VUSUxfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHV0bXBuYW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1VUTVBOQU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXRtcHhuYW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1VUTVBYTkFNRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHV0bXB4Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVVRNUFhfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHV0bXAuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VVE1QX0gKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVfaW50MTZfdCcuICovCisjdW5kZWYgSEFWRV9VX0lOVDE2X1QKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBfZ2V0cHR5JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX19HRVRQVFkKKworLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCisjdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfTkFNRQorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9TVFJJTkcKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVEFSTkFNRQorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgorCisvKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoYGludCcgb3IgYHZvaWQnKS4gKi8KKyN1bmRlZiBSRVRTSUdUWVBFCisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhcmcgMSBmb3IgYHNlbGVjdCcuICovCisjdW5kZWYgU0VMRUNUX1RZUEVfQVJHMQorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYXJncyAyLCAzIGFuZCA0IGZvciBgc2VsZWN0Jy4gKi8KKyN1bmRlZiBTRUxFQ1RfVFlQRV9BUkcyMzQKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFyZyA1IGZvciBgc2VsZWN0Jy4gKi8KKyN1bmRlZiBTRUxFQ1RfVFlQRV9BUkc1CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLworI3VuZGVmIFNURENfSEVBREVSUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KKyN1bmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUKKworLyogVXNlIC9kZXYvcHRteCAqLworI3VuZGVmIFVTRV9ERVZfUFRNWAorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLworI3VuZGVmIF9GSUxFX09GRlNFVF9CSVRTCisKKy8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyN1bmRlZiBfTEFSR0VfRklMRVMKKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCisjdW5kZWYgY29uc3QKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lc24ndCBkZWZpbmUuICovCisjdW5kZWYgZ2lkX3QKKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIG1vZGVfdAorCisvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjdW5kZWYgcGlkX3QKKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjdW5kZWYgc2l6ZV90CisKKy8qIHR5cGUgdG8gdXNlIGluIHBsYWNlIG9mIHNvY2tsZW5fdCBpZiBub3QgZGVmaW5lZCAqLworI3VuZGVmIHNvY2tsZW5fdAorCisvKiBEZWZpbmUgdG8gYGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2Vzbid0IGRlZmluZS4gKi8KKyN1bmRlZiB1aWRfdApkaWZmIC0tZ2l0IGEvY29uZmlnLnN1YiBiL2NvbmZpZy5zdWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlZmZmNgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZy5zdWIKQEAgLTAsMCArMSwxNjIyIEBACisjISAvYmluL3NoCisjIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdC4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjICAgSW5jLgorCit0aW1lc3RhbXA9JzIwMDctMDEtMTgnCisKKyMgVGhpcyBmaWxlIGlzIChpbiBwcmluY2lwbGUpIGNvbW1vbiB0byBBTEwgR05VIHNvZnR3YXJlLgorIyBUaGUgcHJlc2VuY2Ugb2YgYSBtYWNoaW5lIGluIHRoaXMgZmlsZSBzdWdnZXN0cyB0aGF0IFNPTUUgR05VIHNvZnR3YXJlCisjIGNhbiBoYW5kbGUgdGhhdCBtYWNoaW5lLiAgSXQgZG9lcyBub3QgaW1wbHkgQUxMIEdOVSBzb2Z0d2FyZSBjYW4uCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisjIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0CisjIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIENoYW5nZUxvZyBlbnRyeS4KKyMKKyMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCisjIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KKyMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCisjIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCisKKyMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCisjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcworIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgorIyBFYWNoIHBhY2thZ2UgaXMgcmVzcG9uc2libGUgZm9yIHJlcG9ydGluZyB3aGljaCB2YWxpZCBjb25maWd1cmF0aW9ucworIyBpdCBkb2VzIG5vdCBzdXBwb3J0LiAgVGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2gKKyMgYSBmYWlsdXJlIHRvIHN1cHBvcnQgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZyb20gYSBtZWFuaW5nbGVzcworIyBjb25maWd1cmF0aW9uLgorCisjIFRoZSBnb2FsIG9mIHRoaXMgZmlsZSBpcyB0byBtYXAgYWxsIHRoZSB2YXJpb3VzIHZhcmlhdGlvbnMgb2YgYSBnaXZlbgorIyBtYWNoaW5lIHNwZWNpZmljYXRpb24gaW50byBhIHNpbmdsZSBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvciBpbiBzb21lIGNhc2VzLCB0aGUgbmV3ZXIgZm91ci1wYXJ0IGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBJdCBpcyB3cm9uZyB0byBlY2hvIGFueSBvdGhlciB0eXBlIG9mIHNwZWNpZmljYXRpb24uCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dIENQVS1NRlItT1BTWVMKKyAgICAgICAkMCBbT1BUSU9OXSBBTElBUworCitDYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIG5hbWUuCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCisKK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgorIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KK21heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorY2FzZSAkbWF5YmVfb3MgaW4KKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgbGludXgtdWNsaWJjKiB8IFwKKyAgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBzdG9ybS1jaGFvcyogfCBvczItZW14KiB8IHJ0bWstbm92YSopCisgICAgb3M9LSRtYXliZV9vcworICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wxLydgCisgICAgOzsKKyAgKikKKyAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzLy1bXi1dKiQvLydgCisgICAgaWYgWyAkYmFzaWNfbWFjaGluZSAhPSAkMSBdCisgICAgdGhlbiBvcz1gZWNobyAkMSB8IHNlZCAncy8uKi0vLS8nYAorICAgIGVsc2Ugb3M9OyBmaQorICAgIDs7Citlc2FjCisKKyMjIyBMZXQncyByZWNvZ25pemUgY29tbW9uIG1hY2hpbmVzIGFzIG5vdCBiZWluZyBvcGVyYXRpbmcgc3lzdGVtcyBzbworIyMjIHRoYXQgdGhpbmdzIGxpa2UgY29uZmlnLnN1YiBkZWNzdGF0aW9uLTMxMDAgd29yay4gIFdlIGFsc28KKyMjIyByZWNvZ25pemUgc29tZSBtYW51ZmFjdHVyZXJzIGFzIG5vdCBiZWluZyBvcGVyYXRpbmcgc3lzdGVtcywgc28gd2UKKyMjIyBjYW4gcHJvdmlkZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIGJlbG93LgorY2FzZSAkb3MgaW4KKwktc3VuKm9zKikKKwkJIyBQcmV2ZW50IGZvbGxvd2luZyBjbGF1c2UgZnJvbSBoYW5kbGluZyB0aGlzIGludmFsaWQgaW5wdXQuCisJCTs7CisJLWRlYyogfCAtbWlwcyogfCAtc2VxdWVudCogfCAtZW5jb3JlKiB8IC1wYzUzMiogfCAtc2dpKiB8IC1zb255KiB8IFwKKwktYXR0KiB8IC03MzAwKiB8IC0zMzAwKiB8IC1kZWx0YSogfCAtbW90b3JvbGEqIHwgLXN1blsyMzRdKiB8IFwKKwktdW5pY29tKiB8IC1pYm0qIHwgLW5leHQgfCAtaHAgfCAtaXNpKiB8IC1hcG9sbG8gfCAtYWx0b3MqIHwgXAorCS1jb252ZXJnZW50KiB8IC1uY3IqIHwgLW5ld3MgfCAtMzIqIHwgLTM2MDAqIHwgLTMxMDAqIHwgLWhpdGFjaGkqIHxcCisJLWNbMTIzXSogfCAtY29udmV4KiB8IC1zdW4gfCAtY3JkcyB8IC1vbXJvbiogfCAtZGcgfCAtdWx0cmEgfCAtdHRpKiB8IFwKKwktaGFycmlzIHwgLWRvbHBoaW4gfCAtaGlnaGxldmVsIHwgLWdvdWxkIHwgLWNibSB8IC1ucyB8IC1tYXNzY29tcCB8IFwKKwktYXBwbGUgfCAtYXhpcyB8IC1rbnV0aCB8IC1jcmF5KQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1zaW0gfCAtY2lzY28gfCAtb2tpIHwgLXdlYyB8IC13aW5ib25kKQorCQlvcz0KKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1zY291dCkKKwkJOzsKKwktd3JzKQorCQlvcz0tdnh3b3JrcworCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLWNob3J1c29zKikKKwkJb3M9LWNob3J1c29zCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKyAJLWNob3J1c3JkYikKKyAJCW9zPS1jaG9ydXNyZGIKKwkJYmFzaWNfbWFjaGluZT0kMQorIAkJOzsKKwktaGl1eCopCisJCW9zPS1oaXV4d2UyCisJCTs7CisJLXNjbzYpCisJCW9zPS1zY281djYKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY281KQorCQlvcz0tc2NvMy4ydjUKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY280KQorCQlvcz0tc2NvMy4ydjQKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjIuWzQtOV0qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvc2NvMy4yLi9zY28zLjJ2LydgCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvMy4ydls0LTldKikKKwkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY281djYqKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbyopCisJCW9zPS1zY28zLjJ2MgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXVkayopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktaXNjKQorCQlvcz0taXNjMi4yCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktY2xpeCopCisJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1pbnRlcmdyYXBoCisJCTs7CisJLWlzYyopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktbHlueCopCisJCW9zPS1seW54b3MKKwkJOzsKKwktcHR4KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1zZXF1ZW50LydgCisJCTs7CisJLXdpbmRvd3NudCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy93aW5kb3dzbnQvd2lubnQvJ2AKKwkJOzsKKwktcHNvcyopCisJCW9zPS1wc29zCisJCTs7CisJLW1pbnQgfCAtbWludFswLTldKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCisJCW9zPS1taW50CisJCTs7Citlc2FjCisKKyMgRGVjb2RlIGFsaWFzZXMgZm9yIGNlcnRhaW4gQ1BVLUNPTVBBTlkgY29tYmluYXRpb25zLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUuCisJIyBTb21lIGFyZSBvbWl0dGVkIGhlcmUgYmVjYXVzZSB0aGV5IGhhdmUgc3BlY2lhbCBtZWFuaW5ncyBiZWxvdy4KKwkxNzUwYSB8IDU4MCBcCisJfCBhMjlrIFwKKwl8IGFscGhhIHwgYWxwaGFldls0LThdIHwgYWxwaGFldjU2IHwgYWxwaGFldjZbNzhdIHwgYWxwaGFwY2E1WzY3XSBcCisJfCBhbHBoYTY0IHwgYWxwaGE2NGV2WzQtOF0gfCBhbHBoYTY0ZXY1NiB8IGFscGhhNjRldjZbNzhdIHwgYWxwaGE2NHBjYTVbNjddIFwKKwl8IGFtMzNfMi4wIFwKKwl8IGFyYyB8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzIzNDVdIHwgYXJtdlszNDVdW2xiXSB8IGF2ciB8IGF2cjMyIFwKKwl8IGJmaW4gXAorCXwgYzR4IHwgY2xpcHBlciBcCisJfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggXAorCXwgZmlkbyB8IGZyMzAgfCBmcnYgXAorCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKKwl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAorCXwgaXAyayB8IGlxMjAwMCBcCisJfCBtMzJjIHwgbTMyciB8IG0zMnJsZSB8IG02ODAwMCB8IG02OGsgfCBtODhrIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSB8IG1lcCBcCisJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xlIFwKKwl8IG1pcHMxNiBcCisJfCBtaXBzNjQgfCBtaXBzNjRlbCBcCisJfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAorCXwgbWlwczY0b3Jpb24gfCBtaXBzNjRvcmlvbmVsIFwKKwl8IG1pcHM2NHZyNDEwMCB8IG1pcHM2NHZyNDEwMGVsIFwKKwl8IG1pcHM2NHZyNDMwMCB8IG1pcHM2NHZyNDMwMGVsIFwKKwl8IG1pcHM2NHZyNTAwMCB8IG1pcHM2NHZyNTAwMGVsIFwKKwl8IG1pcHM2NHZyNTkwMCB8IG1pcHM2NHZyNTkwMGVsIFwKKwl8IG1pcHNpc2EzMiB8IG1pcHNpc2EzMmVsIFwKKwl8IG1pcHNpc2EzMnIyIHwgbWlwc2lzYTMycjJlbCBcCisJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCisJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAorCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCisJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtdCBcCisJfCBtc3A0MzAgXAorCXwgbmlvcyB8IG5pb3MyIFwKKwl8IG5zMTZrIHwgbnMzMmsgXAorCXwgb3IzMiBcCisJfCBwZHAxMCB8IHBkcDExIHwgcGogfCBwamwgXAorCXwgcG93ZXJwYyB8IHBvd2VycGM2NCB8IHBvd2VycGM2NGxlIHwgcG93ZXJwY2xlIHwgcHBjYmUgXAorCXwgcHlyYW1pZCBcCisJfCBzY29yZSBcCisJfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorCXwgc2g2NCB8IHNoNjRsZSBcCisJfCBzcGFyYyB8IHNwYXJjNjQgfCBzcGFyYzY0YiB8IHNwYXJjNjR2IHwgc3BhcmM4NnggfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSBcCisJfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYgXAorCXwgc3B1IHwgc3Ryb25nYXJtIFwKKwl8IHRhaG9lIHwgdGh1bWIgfCB0aWM0eCB8IHRpYzgwIHwgdHJvbiBcCisJfCB2ODUwIHwgdjg1MGUgXAorCXwgd2UzMmsgXAorCXwgeDg2IHwgeGMxNnggfCB4c2NhbGUgfCB4c2NhbGVlW2JsXSB8IHhzdG9ybXkxNiB8IHh0ZW5zYSBcCisJfCB6OGspCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQk7OworCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMikKKwkJIyBNb3Rvcm9sYSA2OEhDMTEvMTIuCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbm9uZQorCQk7OworCW04ODExMCB8IG02ODBbMTIzNDZdMCB8IG02ODM/MiB8IG02ODM2MCB8IG01MjAwIHwgdjcwIHwgdzY1IHwgejhrKQorCQk7OworCW1zMSkKKwkJYmFzaWNfbWFjaGluZT1tdC11bmtub3duCisJCTs7CisKKwkjIFdlIHVzZSBgcGMnIHJhdGhlciB0aGFuIGB1bmtub3duJworCSMgYmVjYXVzZSAoMSkgdGhhdCdzIHdoYXQgdGhleSBub3JtYWxseSBhcmUsIGFuZAorCSMgKDIpIHRoZSB3b3JkICJ1bmtub3duIiB0ZW5kcyB0byBjb25mdXNlIGJlZ2lubmluZyB1c2Vycy4KKwlpKjg2IHwgeDg2XzY0KQorCSAgYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS1wYworCSAgOzsKKwkjIE9iamVjdCBpZiBtb3JlIHRoYW4gb25lIGNvbXBhbnkgbmFtZSB3b3JkLgorCSotKi0qKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRoIGNvbXBhbnkgbmFtZS4KKwk1ODAtKiBcCisJfCBhMjlrLSogXAorCXwgYWxwaGEtKiB8IGFscGhhZXZbNC04XS0qIHwgYWxwaGFldjU2LSogfCBhbHBoYWV2Nls3OF0tKiBcCisJfCBhbHBoYTY0LSogfCBhbHBoYTY0ZXZbNC04XS0qIHwgYWxwaGE2NGV2NTYtKiB8IGFscGhhNjRldjZbNzhdLSogXAorCXwgYWxwaGFwY2E1WzY3XS0qIHwgYWxwaGE2NHBjYTVbNjddLSogfCBhcmMtKiBcCisJfCBhcm0tKiAgfCBhcm1iZS0qIHwgYXJtbGUtKiB8IGFybWViLSogfCBhcm12Ki0qIFwKKwl8IGF2ci0qIHwgYXZyMzItKiBcCisJfCBiZmluLSogfCBiczIwMDAtKiBcCisJfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiB8IGM1NHgtKiB8IGM1NXgtKiB8IGM2eC0qIFwKKwl8IGNsaXBwZXItKiB8IGNyYXludi0qIHwgY3lkcmEtKiBcCisJfCBkMTB2LSogfCBkMzB2LSogfCBkbHgtKiBcCisJfCBlbHhzaS0qIFwKKwl8IGYzMFswMV0tKiB8IGY3MDAtKiB8IGZpZG8tKiB8IGZyMzAtKiB8IGZydi0qIHwgZng4MC0qIFwKKwl8IGg4MzAwLSogfCBoODUwMC0qIFwKKwl8IGhwcGEtKiB8IGhwcGExLlswMV0tKiB8IGhwcGEyLjAtKiB8IGhwcGEyLjBbbnddLSogfCBocHBhNjQtKiBcCisJfCBpKjg2LSogfCBpODYwLSogfCBpOTYwLSogfCBpYTY0LSogXAorCXwgaXAyay0qIHwgaXEyMDAwLSogXAorCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAorCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKKwl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiBcCisJfCBtaXBzLSogfCBtaXBzYmUtKiB8IG1pcHNlYi0qIHwgbWlwc2VsLSogfCBtaXBzbGUtKiBcCisJfCBtaXBzMTYtKiBcCisJfCBtaXBzNjQtKiB8IG1pcHM2NGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCisJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHZyNDEwMC0qIHwgbWlwczY0dnI0MTAwZWwtKiBcCisJfCBtaXBzNjR2cjQzMDAtKiB8IG1pcHM2NHZyNDMwMGVsLSogXAorCXwgbWlwczY0dnI1MDAwLSogfCBtaXBzNjR2cjUwMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTkwMC0qIHwgbWlwczY0dnI1OTAwZWwtKiBcCisJfCBtaXBzaXNhMzItKiB8IG1pcHNpc2EzMmVsLSogXAorCXwgbWlwc2lzYTMycjItKiB8IG1pcHNpc2EzMnIyZWwtKiBcCisJfCBtaXBzaXNhNjQtKiB8IG1pcHNpc2E2NGVsLSogXAorCXwgbWlwc2lzYTY0cjItKiB8IG1pcHNpc2E2NHIyZWwtKiBcCisJfCBtaXBzaXNhNjRzYjEtKiB8IG1pcHNpc2E2NHNiMWVsLSogXAorCXwgbWlwc2lzYTY0c3I3MWstKiB8IG1pcHNpc2E2NHNyNzFrZWwtKiBcCisJfCBtaXBzdHgzOS0qIHwgbWlwc3R4MzllbC0qIFwKKwl8IG1taXgtKiBcCisJfCBtdC0qIFwKKwl8IG1zcDQzMC0qIFwKKwl8IG5pb3MtKiB8IG5pb3MyLSogXAorCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCisJfCBvcmlvbi0qIFwKKwl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAorCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogfCBwcGNiZS0qIFwKKwl8IHB5cmFtaWQtKiBcCisJfCByb21wLSogfCByczYwMDAtKiBcCisJfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAorCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCisJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCisJfCBzcGFyY2xpdGUtKiBcCisJfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN0cm9uZ2FybS0qIHwgc3YxLSogfCBzeD8tKiBcCisJfCB0YWhvZS0qIHwgdGh1bWItKiBcCisJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisJfCB0cm9uLSogXAorCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHZheC0qIFwKKwl8IHdlMzJrLSogXAorCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhjMTZ4LSogfCB4cHMxMDAtKiB8IHhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKiBcCisJfCB4c3Rvcm15MTYtKiB8IHh0ZW5zYS0qIFwKKwl8IHltcC0qIFwKKwl8IHo4ay0qKQorCQk7OworCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKKwkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgorCTM4NmJzZCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LWJzZAorCQk7OworCTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5peHBjKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1hdHQKKwkJOzsKKwkzYiopCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJYTI5a2hpZikKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisgICAgCWFiYWN1cykKKwkJYmFzaWNfbWFjaGluZT1hYmFjdXMtdW5rbm93bgorCQk7OworCWFkb2JlNjhrKQorCQliYXNpY19tYWNoaW5lPW02ODAxMC1hZG9iZQorCQlvcz0tc2NvdXQKKwkJOzsKKwlhbGxpYW50IHwgZng4MCkKKwkJYmFzaWNfbWFjaGluZT1meDgwLWFsbGlhbnQKKwkJOzsKKwlhbHRvcyB8IGFsdG9zMzA2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFsdG9zCisJCTs7CisJYW0yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ub25lCisJCW9zPS1ic2QKKwkJOzsKKwlhbWQ2NCkKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKKwkJOzsKKwlhbWQ2NC0qKQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWFtZGFobCkKKwkJYmFzaWNfbWFjaGluZT01ODAtYW1kYWhsCisJCW9zPS1zeXN2CisJCTs7CisJYW1pZ2EgfCBhbWlnYS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQk7OworCWFtaWdhb3MgfCBhbWlnYWRvcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwlhbWlnYXVuaXggfCBhbWl4KQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tc3lzdjQKKwkJOzsKKwlhcG9sbG82OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tc3lzdgorCQk7OworCWFwb2xsbzY4YnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCW9zPS1ic2QKKwkJOzsKKwlhdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQlvcz0tYXV4CisJCTs7CisJYmFsYW5jZSkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCWM5MCkKKwkJYmFzaWNfbWFjaGluZT1jOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY29udmV4LWMxKQorCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMyKQorCQliYXNpY19tYWNoaW5lPWMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzMikKKwkJYmFzaWNfbWFjaGluZT1jMzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM0KQorCQliYXNpY19tYWNoaW5lPWMzNC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzgpCisJCWJhc2ljX21hY2hpbmU9YzM4LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY3JheSB8IGo5MCkKKwkJYmFzaWNfbWFjaGluZT1qOTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJY3JheW52KQorCQliYXNpY19tYWNoaW5lPWNyYXludi1jcmF5CisJCW9zPS11bmljb3NtcAorCQk7OworCWNyMTZjKQorCQliYXNpY19tYWNoaW5lPWNyMTZjLXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWNyZHMgfCB1bm9zKQorCQliYXNpY19tYWNoaW5lPW02OGstY3JkcworCQk7OworCWNyaXN2MzIgfCBjcmlzdjMyLSogfCBldHJheGZzKikKKwkJYmFzaWNfbWFjaGluZT1jcmlzdjMyLWF4aXMKKwkJOzsKKwljcmlzIHwgY3Jpcy0qIHwgZXRyYXgqKQorCQliYXNpY19tYWNoaW5lPWNyaXMtYXhpcworCQk7OworCWNyeCkKKwkJYmFzaWNfbWFjaGluZT1jcngtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJZGEzMCB8IGRhMzAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKKwkJOzsKKwlkZWNzdGF0aW9uIHwgZGVjc3RhdGlvbi0zMTAwIHwgcG1heCB8IHBtYXgtKiB8IHBtaW4gfCBkZWMzMTAwIHwgZGVjc3RhdG4pCisJCWJhc2ljX21hY2hpbmU9bWlwcy1kZWMKKwkJOzsKKwlkZWNzeXN0ZW0xMCogfCBkZWMxMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMTAKKwkJOzsKKwlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMjAKKwkJOzsKKwlkZWx0YSB8IDMzMDAgfCBtb3Rvcm9sYS0zMzAwIHwgbW90b3JvbGEtZGVsdGEgXAorCSAgICAgIHwgMzMwMC1tb3Rvcm9sYSB8IGRlbHRhLW1vdG9yb2xhKQorCQliYXNpY19tYWNoaW5lPW02OGstbW90b3JvbGEKKwkJOzsKKwlkZWx0YTg4KQorCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKKwkJb3M9LXN5c3YzCisJCTs7CisJZGpncHApCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQlvcz0tbXNkb3NkamdwcAorCQk7OworCWRweDIwIHwgZHB4MjAtKikKKwkJYmFzaWNfbWFjaGluZT1yczYwMDAtYnVsbAorCQlvcz0tYm9zeAorCQk7OworCWRweDIqIHwgZHB4MiotYnVsbCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YzCisJCTs7CisJZWJtb24yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LWVibW9uCisJCTs7CisJZWx4c2kpCisJCWJhc2ljX21hY2hpbmU9ZWx4c2ktZWx4c2kKKwkJb3M9LWJzZAorCQk7OworCWVuY29yZSB8IHVtYXggfCBtbWF4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLWVuY29yZQorCQk7OworCWVzMTgwMCB8IE9TRTY4ayB8IG9zZTY4ayB8IG9zZSB8IE9TRSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWVyaWNzc29uCisJCW9zPS1vc2UKKwkJOzsKKwlmeDI4MDApCisJCWJhc2ljX21hY2hpbmU9aTg2MC1hbGxpYW50CisJCTs7CisJZ2VuaXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstbnMKKwkJOzsKKwlnbWljcm8pCisJCWJhc2ljX21hY2hpbmU9dHJvbi1nbWljcm8KKwkJb3M9LXN5c3YKKwkJOzsKKwlnbzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWdvMzIKKwkJOzsKKwloMzA1MHIqIHwgaGl1eCopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJaDgzMDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaDgzMDB4cmF5KQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LXhyYXkKKwkJOzsKKwloODUwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODUwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloYXJyaXMpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1oYXJyaXMKKwkJb3M9LXN5c3YzCisJCTs7CisJaHAzMDAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHAzMDBic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0tYnNkCisJCTs7CisJaHAzMDBocHV4KQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWhwdXgKKwkJOzsKKwlocDNrOVswLTldWzAtOV0gfCBocDlbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrMlswLTldWzAtOV0gfCBocDlrMzFbMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtaHAKKwkJOzsKKwlocDlrM1syLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwOWs2WzAtOV1bMC05XSB8IGhwNlswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWs3WzAtNzldWzAtOV0gfCBocDdbMC03OV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azc4WzAtOV0gfCBocDc4WzAtOV0pCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzY3XTEgfCBocDhbNjddMSB8IGhwOWs4MFsyNF0gfCBocDgwWzI0XSB8IGhwOWs4Wzc4XTkgfCBocDhbNzhdOSB8IGhwOWs4OTMgfCBocDg5MykKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVsxMzY3OV0gfCBocDhbMC05XVsxMzY3OV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMC05XSB8IGhwOFswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwcGEtbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCWhwcGFvc2YpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tb3NmCisJCTs7CisJaHBwcm8pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQlvcz0tcHJvZWxmCisJCTs7CisJaTM3MC1pYm0qIHwgaWJtKikKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQk7OworIyBJJ20gbm90IHN1cmUgd2hhdCAiU3lzdjMyIiBtZWFucy4gIFNob3VsZCB0aGlzIGJlIHN5c3YzLjI/CisJaSo4NnYzMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2MzIKKwkJOzsKKwlpKjg2djQqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3Y0CisJCTs7CisJaSo4NnYpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdgorCQk7OworCWkqODZzb2wyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJaTM4Nm1hY2gpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCisJCW9zPS1tYWNoCisJCTs7CisJaTM4Ni12c3RhIHwgdnN0YSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LXZzdGEKKwkJOzsKKwlpcmlzIHwgaXJpczRkKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2dpCisJCWNhc2UgJG9zIGluCisJCSAgICAtaXJpeCopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1pcml4NAorCQkJOzsKKwkJZXNhYworCQk7OworCWlzaTY4IHwgaXNpKQorCQliYXNpY19tYWNoaW5lPW02OGstaXNpCisJCW9zPS1zeXN2CisJCTs7CisJbTg4ay1vbXJvbiopCisJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgorCQk7OworCW1hZ251bSB8IG0zMjMwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQlvcz0tc3lzdgorCQk7OworCW1lcmxpbikKKwkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCisJCW9zPS1zeXN2CisJCTs7CisJbWluZ3czMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJbWluaWZyYW1lKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworCW1pcHMzKi0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAorCQk7OworCW1pcHMzKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgorCQk7OworCW1vbml0b3IpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1zZG9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1zZG9zCisJCTs7CisJbXMxLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbXMxLS9tdC0vJ2AKKwkJOzsKKwltdnMpCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJb3M9LW12cworCQk7OworCW5jcjMwMDApCisJCWJhc2ljX21hY2hpbmU9aTQ4Ni1uY3IKKwkJb3M9LXN5c3Y0CisJCTs7CisJbmV0YnNkMzg2KQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tbmV0YnNkCisJCTs7CisJbmV0d2luZGVyKQorCQliYXNpY19tYWNoaW5lPWFybXY0bC1yZWJlbAorCQlvcz0tbGludXgKKwkJOzsKKwluZXdzIHwgbmV3czcwMCB8IG5ld3M4MDAgfCBuZXdzOTAwKQorCQliYXNpY19tYWNoaW5lPW02OGstc29ueQorCQlvcz0tbmV3c29zCisJCTs7CisJbmV3czEwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4MDMwLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MtMzYwMCB8IHJpc2MtbmV3cykKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5lY3Y3MCkKKwkJYmFzaWNfbWFjaGluZT12NzAtbmVjCisJCW9zPS1zeXN2CisJCTs7CisJbmV4dCB8IG0qLW5leHQgKQorCQliYXNpY19tYWNoaW5lPW02OGstbmV4dAorCQljYXNlICRvcyBpbgorCQkgICAgLW5leHRzdGVwKiApCisJCQk7OworCQkgICAgLW5zMiopCisJCSAgICAgIG9zPS1uZXh0c3RlcDIKKwkJCTs7CisJCSAgICAqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAzCisJCQk7OworCQllc2FjCisJCTs7CisJbmgzMDAwKQorCQliYXNpY19tYWNoaW5lPW02OGstaGFycmlzCisJCW9zPS1jeHV4CisJCTs7CisJbmhbNDVdMDAwKQorCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCW9zPS1jeHV4CisJCTs7CisJbmluZHk5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAorCQlvcz0tbmluZHkKKwkJOzsKKwltb245NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC1pbnRlbAorCQlvcz0tbW9uOTYwCisJCTs7CisJbm9uc3RvcHV4KQorCQliYXNpY19tYWNoaW5lPW1pcHMtY29tcGFxCisJCW9zPS1ub25zdG9wdXgKKwkJOzsKKwlucDEpCisJCWJhc2ljX21hY2hpbmU9bnAxLWdvdWxkCisJCTs7CisJbnNyLXRhbmRlbSkKKwkJYmFzaWNfbWFjaGluZT1uc3ItdGFuZGVtCisJCTs7CisJb3A1MG4tKiB8IG9wNjBjLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJb3M9LXByb2VsZgorCQk7OworCW9wZW5yaXNjIHwgb3BlbnJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1vcjMyLXVua25vd24KKwkJOzsKKwlvczQwMCkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWlibQorCQlvcz0tb3M0MDAKKwkJOzsKKwlPU0U2ODAwMCB8IG9zZTY4MDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CisJb3M2OGspCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ub25lCisJCW9zPS1vczY4aworCQk7OworCXBhLWhpdGFjaGkpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1oaXRhY2hpCisJCW9zPS1oaXV4d2UyCisJCTs7CisJcGFyYWdvbikKKwkJYmFzaWNfbWFjaGluZT1pODYwLWludGVsCisJCW9zPS1vc2YKKwkJOzsKKwlwYmQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtdHRpCisJCTs7CisJcGJiKQorCQliYXNpY19tYWNoaW5lPW02OGstdHRpCisJCTs7CisJcGM1MzIgfCBwYzUzMi0qKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXBjNTMyCisJCTs7CisJcGM5OCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCTs7CisJcGM5OC0qKQorCQliYXNpY19tYWNoaW5lPWkzODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtIHwgcDUgfCBrNSB8IGs2IHwgbmV4Z2VuIHwgdmlhYzMpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1wYworCQk7OworCXBlbnRpdW1wcm8gfCBwNiB8IDZ4ODYgfCBhdGhsb24gfCBhdGhsb25fKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bWlpIHwgcGVudGl1bTIgfCBwZW50aXVtaWlpIHwgcGVudGl1bTMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQk7OworCXBlbnRpdW00KQorCQliYXNpY19tYWNoaW5lPWk3ODYtcGMKKwkJOzsKKwlwZW50aXVtLSogfCBwNS0qIHwgazUtKiB8IGs2LSogfCBuZXhnZW4tKiB8IHZpYWMzLSopCisJCWJhc2ljX21hY2hpbmU9aTU4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW1wcm8tKiB8IHA2LSogfCA2eDg2LSogfCBhdGhsb24tKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bWlpLSogfCBwZW50aXVtMi0qIHwgcGVudGl1bWlpaS0qIHwgcGVudGl1bTMtKikKKwkJYmFzaWNfbWFjaGluZT1pNjg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bTQtKikKKwkJYmFzaWNfbWFjaGluZT1pNzg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcG4pCisJCWJhc2ljX21hY2hpbmU9cG4tZ291bGQKKwkJOzsKKwlwb3dlcikJYmFzaWNfbWFjaGluZT1wb3dlci1pYm0KKwkJOzsKKwlwcGMpCWJhc2ljX21hY2hpbmU9cG93ZXJwYy11bmtub3duCisJCTs7CisJcHBjLSopCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwY2xlIHwgcG93ZXJwY2xpdHRsZSB8IHBwYy1sZSB8IHBvd2VycGMtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS11bmtub3duCisJCTs7CisJcHBjbGUtKiB8IHBvd2VycGNsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjbGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NCkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtdW5rbm93bgorCQk7OworCXBwYzY0LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjNjRsZSB8IHBvd2VycGM2NGxpdHRsZSB8IHBwYzY0LWxlIHwgcG93ZXJwYzY0LWxpdHRsZSkKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS11bmtub3duCisJCTs7CisJcHBjNjRsZS0qIHwgcG93ZXJwYzY0bGl0dGxlLSopCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0bGUtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwczIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1pYm0KKwkJOzsKKwlwdzMyKQorCQliYXNpY19tYWNoaW5lPWk1ODYtdW5rbm93bgorCQlvcz0tcHczMgorCQk7OworCXJkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tcmRvcworCQk7OworCXJvbTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCXJtWzQ2XTAwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwlzMzkwIHwgczM5MC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHggfCBzMzkweC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQk7OworCXNhMjkyMDApCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXNiMSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgorCQk7OworCXNiMWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KKwkJOzsKKwlzZGUpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQorCQlvcz0tZWxmCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OworCXNlcXVlbnQpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCTs7CisJc2gpCisJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdW4yKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJOzsKKwlzdW4yb3MzKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjJvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuM29zMykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuM29zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNG9zMykKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjRvczQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40c29sMikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJc3VuMyB8IHN1bjMtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXN1bgorCQk7OworCXN1bjQpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJc3VuMzg2IHwgc3VuMzg2aSB8IHJvYWRydW5uZXIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zdW4KKwkJOzsKKwlzdjEpCisJCWJhc2ljX21hY2hpbmU9c3YxLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXN5bW1ldHJ5KQorCQliYXNpY19tYWNoaW5lPWkzODYtc2VxdWVudAorCQlvcz0tZHluaXgKKwkJOzsKKwl0M2UpCisJCWJhc2ljX21hY2hpbmU9YWxwaGFldjUtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdDkwKQorCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0aWM1NHggfCBjNTR4KikKKwkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eCB8IGM1NXgqKQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNnggfCBjNngqKQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KKwkJb3M9LWNvZmYKKwkJOzsKKwl0eDM5KQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5LXVua25vd24KKwkJOzsKKwl0eDM5ZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc3R4MzllbC11bmtub3duCisJCTs7CisJdG9hZDEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTAteGtsCisJCW9zPS10b3BzMjAKKwkJOzsKKwl0b3dlciB8IHRvd2VyLTMyKQorCQliYXNpY19tYWNoaW5lPW02OGstbmNyCisJCTs7CisJdHBmKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQlvcz0tdHBmCisJCTs7CisJdWRpMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKwl1bHRyYTMpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ueXUKKwkJb3M9LXN5bTEKKwkJOzsKKwl2ODEwIHwgbmVjdjgxMCkKKwkJYmFzaWNfbWFjaGluZT12ODEwLW5lYworCQlvcz0tbm9uZQorCQk7OworCXZheHYpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tc3lzdgorCQk7OworCXZtcykKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCW9zPS12bXMKKwkJOzsKKwl2cHAqfHZ4fHZ4LSopCisJCWJhc2ljX21hY2hpbmU9ZjMwMS1mdWppdHN1CisJCTs7CisJdnh3b3Jrczk2MCkKKwkJYmFzaWNfbWFjaGluZT1pOTYwLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3M2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXdycworCQlvcz0tdnh3b3JrcworCQk7OworCXZ4d29ya3MyOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl3NjUqKQorCQliYXNpY19tYWNoaW5lPXc2NS13ZGMKKwkJb3M9LW5vbmUKKwkJOzsKKwl3ODlrLSopCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCW9zPS1wcm9lbGYKKwkJOzsKKwl4Ym94KQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJb3M9LW1pbmd3MzIKKwkJOzsKKwl4cHMgfCB4cHMxMDApCisJCWJhc2ljX21hY2hpbmU9eHBzMTAwLWhvbmV5d2VsbAorCQk7OworCXltcCkKKwkJYmFzaWNfbWFjaGluZT15bXAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJejhrLSotY29mZikKKwkJYmFzaWNfbWFjaGluZT16OGstdW5rbm93bgorCQlvcz0tc2ltCisJCTs7CisJbm9uZSkKKwkJYmFzaWNfbWFjaGluZT1ub25lLW5vbmUKKwkJb3M9LW5vbmUKKwkJOzsKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBtYW51ZmFjdHVyZXIgb2YgY2VydGFpbiBDUFUgdHlwZXMuICBJdCBpcyBpbgorIyBzb21lIGNhc2VzIHRoZSBvbmx5IG1hbnVmYWN0dXJlciwgaW4gb3RoZXJzLCBpdCBpcyB0aGUgbW9zdCBwb3B1bGFyLgorCXc4OWspCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS13aW5ib25kCisJCTs7CisJb3A1MG4pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlvcDYwYykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLW9raQorCQk7OworCXJvbXApCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwltbWl4KQorCQliYXNpY19tYWNoaW5lPW1taXgta251dGgKKwkJOzsKKwlyczYwMDApCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWlibQorCQk7OworCXZheCkKKwkJYmFzaWNfbWFjaGluZT12YXgtZGVjCisJCTs7CisJcGRwMTApCisJCSMgdGhlcmUgYXJlIG1hbnkgY2xvbmVzLCBzbyBERUMgaXMgbm90IGEgc2FmZSBiZXQKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC11bmtub3duCisJCTs7CisJcGRwMTEpCisJCWJhc2ljX21hY2hpbmU9cGRwMTEtZGVjCisJCTs7CisJd2UzMmspCisJCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0CisJCTs7CisJc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMzRdZWIgfCBzaFsxMjM0XWxlIHwgc2hbMjNdZWxlKQorCQliYXNpY19tYWNoaW5lPXNoLXVua25vd24KKwkJOzsKKwlzcGFyYyB8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5dikKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJOzsKKwljeWRyYSkKKwkJYmFzaWNfbWFjaGluZT1jeWRyYS1jeWRyb21lCisJCTs7CisJb3Jpb24pCisJCWJhc2ljX21hY2hpbmU9b3Jpb24taGlnaGxldmVsCisJCTs7CisJb3Jpb24xMDUpCisJCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1oaWdobGV2ZWwKKwkJOzsKKwltYWMgfCBtcHcgfCBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBwbGUKKwkJOzsKKwlwbWFjIHwgcG1hYy1tcHcpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1hcHBsZQorCQk7OworCSotdW5rbm93bikKKwkJIyBNYWtlIHN1cmUgdG8gbWF0Y2ggYW4gYWxyZWFkeS1jYW5vbmljYWxpemVkIG1hY2hpbmUgbmFtZS4KKwkJOzsKKwkqKQorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IG1hY2hpbmUgXGAkYmFzaWNfbWFjaGluZVwnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCisKKyMgSGVyZSB3ZSBjYW5vbmljYWxpemUgY2VydGFpbiBhbGlhc2VzIGZvciBtYW51ZmFjdHVyZXJzLgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSotZGlnaXRhbCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvZGlnaXRhbC4qL2RlYy8nYAorCQk7OworCSotY29tbW9kb3JlKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9jb21tb2RvcmUuKi9jYm0vJ2AKKwkJOzsKKwkqKQorCQk7OworZXNhYworCisjIERlY29kZSBtYW51ZmFjdHVyZXItc3BlY2lmaWMgYWxpYXNlcyBmb3IgY2VydGFpbiBvcGVyYXRpbmcgc3lzdGVtcy4KKworaWYgWyB4IiRvcyIgIT0geCIiIF0KK3RoZW4KK2Nhc2UgJG9zIGluCisgICAgICAgICMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCisgICAgICAgICMgdGhhdCBtaWdodCBnZXQgY29uZnVzZWQgd2l0aCB2YWxpZCBzeXN0ZW0gdHlwZXMuCisJIyAtc29sYXJpcyogaXMgYSBiYXNpYyBzeXN0ZW0gdHlwZSwgd2l0aCB0aGlzIG9uZSBleGNlcHRpb24uCisJLXNvbGFyaXMxIHwgLXNvbGFyaXMxLiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzb2xhcmlzMXxzdW5vczR8J2AKKwkJOzsKKwktc29sYXJpcykKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJLXN2cjQqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdW5peHdhcmUqKQorCQlvcz0tc3lzdjQuMnV3CisJCTs7CisJLWdudS9saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xnbnUvbGludXh8bGludXgtZ251fCdgCisJCTs7CisJIyBGaXJzdCBhY2NlcHQgdGhlIGJhc2ljIHN5c3RlbSB0eXBlcy4KKwkjIFRoZSBwb3J0YWJsZSBzeXN0ZW1zIGNvbWVzIGZpcnN0LgorCSMgRWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiBBICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJIyAtc3lzdiogaXMgbm90IGhlcmUgYmVjYXVzZSBpdCBjb21lcyBsYXRlciwgYWZ0ZXIgc3lzdnI0LgorCS1nbnUqIHwgLWJzZCogfCAtbWFjaCogfCAtbWluaXgqIHwgLWdlbml4KiB8IC11bHRyaXgqIHwgLWlyaXgqIFwKKwkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAorCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtc29sYXJpcyogfCAtc3ltKiBcCisJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCisJICAgICAgfCAtYW9zKiBcCisJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKKwkgICAgICB8IC1jbGl4KiB8IC1yaXNjb3MqIHwgLXVuaXBsdXMqIHwgLWlyaXMqIHwgLXJ0dSogfCAteGVuaXgqIFwKKwkgICAgICB8IC1oaXV4KiB8IC0zODZic2QqIHwgLWtuZXRic2QqIHwgLW1pcmJzZCogfCAtbmV0YnNkKiBcCisJICAgICAgfCAtb3BlbmJzZCogfCAtc29saWRic2QqIFwKKwkgICAgICB8IC1la2tvYnNkKiB8IC1rZnJlZWJzZCogfCAtZnJlZWJzZCogfCAtcmlzY2l4KiB8IC1seW54b3MqIFwKKwkgICAgICB8IC1ib3N4KiB8IC1uZXh0c3RlcCogfCAtY3h1eCogfCAtYW91dCogfCAtZWxmKiB8IC1vYWJpKiBcCisJICAgICAgfCAtcHR4KiB8IC1jb2ZmKiB8IC1lY29mZiogfCAtd2lubnQqIHwgLWRvbWFpbiogfCAtdnN0YSogXAorCSAgICAgIHwgLXVkaSogfCAtZWFiaSogfCAtbGl0ZXMqIHwgLWllZWUqIHwgLWdvMzIqIHwgLWF1eCogXAorCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIFwKKwkgICAgICB8IC1jeWd3aW4qIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCisJICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LXVjbGliYyogXAorCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKKwkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAorCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAorCSAgICAgIHwgLXN0b3JtLWNoYW9zKiB8IC10b3BzMTAqIHwgLXRlbmV4KiB8IC10b3BzMjAqIHwgLWl0cyogXAorCSAgICAgIHwgLW9zMiogfCAtdm9zKiB8IC1wYWxtb3MqIHwgLXVjbGludXgqIHwgLW51Y2xldXMqIFwKKwkgICAgICB8IC1tb3JwaG9zKiB8IC1zdXBlcnV4KiB8IC1ydG1rKiB8IC1ydG1rLW5vdmEqIHwgLXdpbmRpc3MqIFwKKwkgICAgICB8IC1wb3dlcm1heCogfCAtZG5peCogfCAtbng2IHwgLW54NyB8IC1zZWkqIHwgLWRyYWdvbmZseSogXAorCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqKQorCSMgUmVtZW1iZXIsIGVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KKwkJOzsKKwktcW54KikKKwkJY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCQkgICAgeDg2LSogfCBpKjg2LSopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1udG8kb3MKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwktbnRvLXFueCopCisJCTs7CisJLW50byopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xudG98bnRvLXFueHwnYAorCQk7OworCS1zaW0gfCAtZXMxODAwKiB8IC1obXMqIHwgLXhyYXkgfCAtb3M2OGsqIHwgLW5vbmUqIHwgLXY4OHIqIFwKKwkgICAgICB8IC13aW5kb3dzKiB8IC1vc3ggfCAtYWJ1ZyB8IC1uZXR3YXJlKiB8IC1vczkqIHwgLWJlb3MqIHwgLWhhaWt1KiBcCisJICAgICAgfCAtbWFjb3MqIHwgLW1wdyogfCAtbWFnaWMqIHwgLW1taXh3YXJlKiB8IC1tb245NjAqIHwgLWxuZXdzKikKKwkJOzsKKwktbWFjKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfG1hY3xtYWNvc3wnYAorCQk7OworCS1saW51eC1kaWV0bGliYykKKwkJb3M9LWxpbnV4LWRpZXRsaWJjCisJCTs7CisJLWxpbnV4KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGxpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCS1zdW5vczUqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M1fHNvbGFyaXMyfCdgCisJCTs7CisJLXN1bm9zNiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzdW5vczZ8c29sYXJpczN8J2AKKwkJOzsKKwktb3BlbmVkKikKKwkJb3M9LW9wZW5lZGl0aW9uCisJCTs7CisgICAgICAgIC1vczQwMCopCisJCW9zPS1vczQwMAorCQk7OworCS13aW5jZSopCisJCW9zPS13aW5jZQorCQk7OworCS1vc2Zyb3NlKikKKwkJb3M9LW9zZnJvc2UKKwkJOzsKKwktb3NmKikKKwkJb3M9LW9zZgorCQk7OworCS11dGVrKikKKwkJb3M9LWJzZAorCQk7OworCS1keW5peCopCisJCW9zPS1ic2QKKwkJOzsKKwktYWNpcyopCisJCW9zPS1hb3MKKwkJOzsKKwktYXRoZW9zKikKKwkJb3M9LWF0aGVvcworCQk7OworCS1zeWxsYWJsZSopCisJCW9zPS1zeWxsYWJsZQorCQk7OworCS0zODZic2QpCisJCW9zPS1ic2QKKwkJOzsKKwktY3RpeCogfCAtdXRzKikKKwkJb3M9LXN5c3YKKwkJOzsKKwktbm92YSopCisJCW9zPS1ydG1rLW5vdmEKKwkJOzsKKwktbnMyICkKKwkJb3M9LW5leHRzdGVwMgorCQk7OworCS1uc2sqKQorCQlvcz0tbnNrCisJCTs7CisJIyBQcmVzZXJ2ZSB0aGUgdmVyc2lvbiBudW1iZXIgb2Ygc2luaXg1LgorCS1zaW5peDUuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKKwkJOzsKKwktc2luaXgqKQorCQlvcz0tc3lzdjQKKwkJOzsKKyAgICAgICAgLXRwZiopCisJCW9zPS10cGYKKwkJOzsKKwktdHJpdG9uKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLW9zcyopCisJCW9zPS1zeXN2MworCQk7OworCS1zdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwktc3ZyMykKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN5c3ZyNCkKKwkJb3M9LXN5c3Y0CisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBhZnRlciAtc3lzdnI0LgorCS1zeXN2KikKKwkJOzsKKwktb3NlKikKKwkJb3M9LW9zZQorCQk7OworCS1lczE4MDAqKQorCQlvcz0tb3NlCisJCTs7CisJLXhlbml4KQorCQlvcz0teGVuaXgKKwkJOzsKKwktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQlvcz0tbWludAorCQk7OworCS1hcm9zKikKKwkJb3M9LWFyb3MKKwkJOzsKKwkta2FvcyopCisJCW9zPS1rYW9zCisJCTs7CisJLXp2bW9lKQorCQlvcz0tenZtb2UKKwkJOzsKKwktbm9uZSkKKwkJOzsKKwkqKQorCQkjIEdldCByaWQgb2YgdGhlIGAtJyBhdCB0aGUgYmVnaW5uaW5nIG9mICRvcy4KKwkJb3M9YGVjaG8gJG9zIHwgc2VkICdzL1teLV0qLS8vJ2AKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBzeXN0ZW0gXGAkb3NcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworZWxzZQorCisjIEhlcmUgd2UgaGFuZGxlIHRoZSBkZWZhdWx0IG9wZXJhdGluZyBzeXN0ZW1zIHRoYXQgY29tZSB3aXRoIHZhcmlvdXMgbWFjaGluZXMuCisjIFRoZSB2YWx1ZSBzaG91bGQgYmUgd2hhdCB0aGUgdmVuZG9yIGN1cnJlbnRseSBzaGlwcyBvdXQgdGhlIGRvb3Igd2l0aCB0aGVpcgorIyBtYWNoaW5lIG9yIHB1dCBhbm90aGVyIHdheSwgdGhlIG1vc3QgcG9wdWxhciBvcyBwcm92aWRlZCB3aXRoIHRoZSBtYWNoaW5lLgorCisjIE5vdGUgdGhhdCBpZiB5b3UncmUgZ29pbmcgdG8gdHJ5IHRvIG1hdGNoICItTUFOVUZBQ1RVUkVSIiBoZXJlIChzYXksCisjICItc3VuIiksIHRoZW4geW91IGhhdmUgdG8gdGVsbCB0aGUgY2FzZSBzdGF0ZW1lbnQgdXAgdG93YXJkcyB0aGUgdG9wCisjIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZyBzeXN0ZW0uICBPdGhlcndpc2UsIGNvZGUgYWJvdmUKKyMgd2lsbCBzaWduYWwgYW4gZXJyb3Igc2F5aW5nIHRoYXQgTUFOVUZBQ1RVUkVSIGlzbid0IGFuIG9wZXJhdGluZworIyBzeXN0ZW0sIGFuZCB3ZSdsbCBuZXZlciBnZXQgdG8gdGhpcyBwb2ludC4KKworY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorICAgICAgICBzY29yZS0qKQorCQlvcz0tZWxmCisJCTs7CisgICAgICAgIHNwdS0qKQorCQlvcz0tZWxmCisJCTs7CisJKi1hY29ybikKKwkJb3M9LXJpc2NpeDEuMgorCQk7OworCWFybSotcmViZWwpCisJCW9zPS1saW51eAorCQk7OworCWFybSotc2VtaSkKKwkJb3M9LWFvdXQKKwkJOzsKKyAgICAgICAgYzR4LSogfCB0aWM0eC0qKQorICAgICAgICAJb3M9LWNvZmYKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGJlZm9yZSB0aGUgKi1kZWMgZW50cnkuCisJcGRwMTAtKikKKwkJb3M9LXRvcHMyMAorCQk7OworCXBkcDExLSopCisJCW9zPS1ub25lCisJCTs7CisJKi1kZWMgfCB2YXgtKikKKwkJb3M9LXVsdHJpeDQuMgorCQk7OworCW02OCotYXBvbGxvKQorCQlvcz0tZG9tYWluCisJCTs7CisJaTM4Ni1zdW4pCisJCW9zPS1zdW5vczQuMC4yCisJCTs7CisJbTY4MDAwLXN1bikKKwkJb3M9LXN1bm9zMworCQkjIFRoaXMgYWxzbyBleGlzdHMgaW4gdGhlIGNvbmZpZ3VyZSBwcm9ncmFtLCBidXQgd2FzIG5vdCB0aGUKKwkJIyBkZWZhdWx0LgorCQkjIG9zPS1zdW5vczQKKwkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz0tYW91dAorCQk7OworICAgICAgICBtZXAtKikKKwkJb3M9LWVsZgorCQk7OworCW1pcHMqLWNpc2NvKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotKikKKwkJb3M9LWVsZgorCQk7OworCW9yMzItKikKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLXR0aSkJIyBtdXN0IGJlIGJlZm9yZSBzcGFyYyBlbnRyeSBvciB3ZSBnZXQgdGhlIHdyb25nIG9zLgorCQlvcz0tc3lzdjMKKwkJOzsKKwlzcGFyYy0qIHwgKi1zdW4pCisJCW9zPS1zdW5vczQuMS4xCisJCTs7CisJKi1iZSkKKwkJb3M9LWJlb3MKKwkJOzsKKwkqLWhhaWt1KQorCQlvcz0taGFpa3UKKwkJOzsKKwkqLWlibSkKKwkJb3M9LWFpeAorCQk7OworICAgIAkqLWtudXRoKQorCQlvcz0tbW1peHdhcmUKKwkJOzsKKwkqLXdlYykKKwkJb3M9LXByb2VsZgorCQk7OworCSotd2luYm9uZCkKKwkJb3M9LXByb2VsZgorCQk7OworCSotb2tpKQorCQlvcz0tcHJvZWxmCisJCTs7CisJKi1ocCkKKwkJb3M9LWhwdXgKKwkJOzsKKwkqLWhpdGFjaGkpCisJCW9zPS1oaXV4CisJCTs7CisJaTg2MC0qIHwgKi1hdHQgfCAqLW5jciB8ICotYWx0b3MgfCAqLW1vdG9yb2xhIHwgKi1jb252ZXJnZW50KQorCQlvcz0tc3lzdgorCQk7OworCSotY2JtKQorCQlvcz0tYW1pZ2FvcworCQk7OworCSotZGcpCisJCW9zPS1kZ3V4CisJCTs7CisJKi1kb2xwaGluKQorCQlvcz0tc3lzdjMKKwkJOzsKKwltNjhrLWNjdXIpCisJCW9zPS1ydHUKKwkJOzsKKwltODhrLW9tcm9uKikKKwkJb3M9LWx1bmEKKwkJOzsKKwkqLW5leHQgKQorCQlvcz0tbmV4dHN0ZXAKKwkJOzsKKwkqLXNlcXVlbnQpCisJCW9zPS1wdHgKKwkJOzsKKwkqLWNyZHMpCisJCW9zPS11bm9zCisJCTs7CisJKi1ucykKKwkJb3M9LWdlbml4CisJCTs7CisJaTM3MC0qKQorCQlvcz0tbXZzCisJCTs7CisJKi1uZXh0KQorCQlvcz0tbmV4dHN0ZXAzCisJCTs7CisJKi1nb3VsZCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWhpZ2hsZXZlbCkKKwkJb3M9LWJzZAorCQk7OworCSotZW5jb3JlKQorCQlvcz0tYnNkCisJCTs7CisJKi1zZ2kpCisJCW9zPS1pcml4CisJCTs7CisJKi1zaWVtZW5zKQorCQlvcz0tc3lzdjQKKwkJOzsKKwkqLW1hc3Njb21wKQorCQlvcz0tcnR1CisJCTs7CisJZjMwWzAxXS1mdWppdHN1IHwgZjcwMC1mdWppdHN1KQorCQlvcz0tdXhwdgorCQk7OworCSotcm9tNjhrKQorCQlvcz0tY29mZgorCQk7OworCSotKmJ1ZykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLWFwcGxlKQorCQlvcz0tbWFjb3MKKwkJOzsKKwkqLWF0YXJpKikKKwkJb3M9LW1pbnQKKwkJOzsKKwkqKQorCQlvcz0tbm9uZQorCQk7OworZXNhYworZmkKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBrbm93IHRoZSBvcywgYW5kIHRoZSBDUFUgdHlwZSwgYnV0IG5vdCB0aGUKKyMgbWFudWZhY3R1cmVyLiAgV2UgcGljayB0aGUgbG9naWNhbCBtYW51ZmFjdHVyZXIuCit2ZW5kb3I9dW5rbm93bgorY2FzZSAkYmFzaWNfbWFjaGluZSBpbgorCSotdW5rbm93bikKKwkJY2FzZSAkb3MgaW4KKwkJCS1yaXNjaXgqKQorCQkJCXZlbmRvcj1hY29ybgorCQkJCTs7CisJCQktc3Vub3MqKQorCQkJCXZlbmRvcj1zdW4KKwkJCQk7OworCQkJLWFpeCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktYmVvcyopCisJCQkJdmVuZG9yPWJlCisJCQkJOzsKKwkJCS1ocHV4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJLW1wZWl4KikKKwkJCQl2ZW5kb3I9aHAKKwkJCQk7OworCQkJLWhpdXgqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS11bm9zKikKKwkJCQl2ZW5kb3I9Y3JkcworCQkJCTs7CisJCQktZGd1eCopCisJCQkJdmVuZG9yPWRnCisJCQkJOzsKKwkJCS1sdW5hKikKKwkJCQl2ZW5kb3I9b21yb24KKwkJCQk7OworCQkJLWdlbml4KikKKwkJCQl2ZW5kb3I9bnMKKwkJCQk7OworCQkJLW12cyogfCAtb3BlbmVkKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS1vczQwMCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktcHR4KikKKwkJCQl2ZW5kb3I9c2VxdWVudAorCQkJCTs7CisJCQktdHBmKikKKwkJCQl2ZW5kb3I9aWJtCisJCQkJOzsKKwkJCS12eHNpbSogfCAtdnh3b3JrcyogfCAtd2luZGlzcyopCisJCQkJdmVuZG9yPXdycworCQkJCTs7CisJCQktYXV4KikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLWhtcyopCisJCQkJdmVuZG9yPWhpdGFjaGkKKwkJCQk7OworCQkJLW1wdyogfCAtbWFjb3MqKQorCQkJCXZlbmRvcj1hcHBsZQorCQkJCTs7CisJCQktKm1pbnQgfCAtbWludFswLTldKiB8IC0qTWlOVCB8IC1NaU5UWzAtOV0qKQorCQkJCXZlbmRvcj1hdGFyaQorCQkJCTs7CisJCQktdm9zKikKKwkJCQl2ZW5kb3I9c3RyYXR1cworCQkJCTs7CisJCWVzYWMKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAicy91bmtub3duLyR2ZW5kb3IvImAKKwkJOzsKK2VzYWMKKworZWNobyAkYmFzaWNfbWFjaGluZSRvcworZXhpdAorCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAidGltZXN0YW1wPSciCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZCIKKyMgdGltZS1zdGFtcC1lbmQ6ICInIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODdmNWRiYgotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZQpAQCAtMCwwICsxLDE1MTMyIEBACisjISAvYmluL3NoCisjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCisjIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2V0IC1vIHBvc2l4CitmaQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc191bnNldD11bnNldAorZWxzZQorICBhc191bnNldD1mYWxzZQorZmkKKworCisjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KKyRhc191bnNldCBFTlYgTUFJTCBNQUlMUEFUSAorUFMxPSckICcKK1BTMj0nPiAnCitQUzQ9JysgJworCisjIE5MUyBudWlzYW5jZXMuCitmb3IgYXNfdmFyIGluIFwKKyAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKKyAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKKyAgTENfVEVMRVBIT05FIExDX1RJTUUKK2RvCisgIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgJGFzX3ZhcgorICBmaQorZG9uZQorCisjIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitpZiAoYmFzZW5hbWUgLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorCisKKyMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KK2FzX21lPWAkYXNfYmFzZW5hbWUgIiQwIiB8fAorJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJCcgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwvXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwvXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisKKworIyBQQVRIIG5lZWRzIENSLCBhbmQgTElORU5PIG5lZWRzIENSIGFuZCBQQVRILgorIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCisKKworICBhc19saW5lbm9fMT0kTElORU5PCisgIGFzX2xpbmVub18yPSRMSU5FTk8KKyAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAorICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKyAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7CisgICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIHBhdGggYXQgYWxsCisgICMgcmVsYXRpdmUgb3Igbm90LgorICBjYXNlICQwIGluCisgICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKK2RvbmUKKworICAgICAgIDs7CisgIGVzYWMKKyAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworICAjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KKyAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICAgIGFzX215c2VsZj0kMAorICBmaQorICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgZmkKKyAgY2FzZSAkQ09ORklHX1NIRUxMIGluCisgICcnKQorICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSBjYXNlICRhc19kaXIgaW4KKwkgLyopCisJICAgaWYgKCIkYXNfZGlyLyRhc19iYXNlIiAtYyAnCisgIGFzX2xpbmVub18xPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTworICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCisgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgJykgMj4vZGV2L251bGw7IHRoZW4KKwkgICAgICRhc191bnNldCBCQVNIX0VOViB8fCB0ZXN0ICIke0JBU0hfRU5WK3NldH0iICE9IHNldCB8fCB7IEJBU0hfRU5WPTsgZXhwb3J0IEJBU0hfRU5WOyB9CisJICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KKwkgICAgIENPTkZJR19TSEVMTD0kYXNfZGlyLyRhc19iYXNlCisJICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisJICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQorCSAgIGZpOzsKKwkgZXNhYworICAgICAgIGRvbmUKK2RvbmUKKzs7CisgIGVzYWMKKworICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCisgICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKKyAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAorICAjIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2ggbGluZS1udW1iZXIgbGluZQorICAjIHdpdGggdGhlIG51bWJlcmVkIGxpbmUsIGFuZCBhcHBlbmRzIHRyYWlsaW5nICctJyBkdXJpbmcKKyAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KKyAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCisgICMgc2Vjb25kICdzZWQnIHNjcmlwdC4gIEJsYW1lIExlZSBFLiBNY01haG9uIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkICc9JyA8JGFzX215c2VsZiB8CisgICAgc2VkICcKKyAgICAgIE4KKyAgICAgIHMsJCwtLAorICAgICAgOiBsb29wCisgICAgICBzLF5cKFsnJGFzX2NyX2RpZ2l0cyddKlwpXCguKlwpWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX11cKSxcMVwyXDFcMywKKyAgICAgIHQgbG9vcAorICAgICAgcywtJCwsCisgICAgICBzLF5bJyRhc19jcl9kaWdpdHMnXSpcbiwsCisgICAgJyA+JGFzX21lLmxpbmVubyAmJgorICBjaG1vZCAreCAkYXNfbWUubGluZW5vIHx8CisgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpYmxlIHRvIHRoaXMpLgorICAuIC4vJGFzX21lLmxpbmVubworICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KKyAgZXhpdAorfQorCisKK2Nhc2UgYGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDNgLGBlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDNgIGluCisgICpjKiwtbiopIEVDSE9fTj0gRUNIT19DPScKKycgRUNIT19UPScJJyA7OworICAqYyosKiAgKSBFQ0hPX049LW4gRUNIT19DPSBFQ0hPX1Q9IDs7CisgICopICAgICAgIEVDSE9fTj0gRUNIT19DPSdcYycgRUNIT19UPSA7OworZXNhYworCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2VjaG8gPmNvbmYkJC5maWxlCitpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgIyBXZSBjb3VsZCBqdXN0IGNoZWNrIGZvciBESkdQUDsgYnV0IHRoaXMgdGVzdCBhKSB3b3JrcyBiKSBpcyBtb3JlIGdlbmVyaWMKKyAgIyBhbmQgYykgd2lsbCByZW1haW4gdmFsaWQgb25jZSBESkdQUCBzdXBwb3J0cyBzeW1saW5rcyAoREpHUFAgMi4wNCkuCisgIGlmIHRlc3QgLWYgY29uZiQkLmV4ZTsgdGhlbgorICAgICMgRG9uJ3QgdXNlIGxuIGF0IGFsbDsgd2UgZG9uJ3QgaGF2ZSBhbnkgbGlua3MKKyAgICBhc19sbl9zPSdjcCAtcCcKKyAgZWxzZQorICAgIGFzX2xuX3M9J2xuIC1zJworICBmaQorZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbG5fcz1sbgorZWxzZQorICBhc19sbl9zPSdjcCAtcCcKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9OgorZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICBhc19ta2Rpcl9wPWZhbHNlCitmaQorCithc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4KK2FzX25sPScKKycKK0lGUz0iIAkkYXNfbmwiCisKKyMgQ0RQQVRILgorJGFzX3Vuc2V0IENEUEFUSAorCisKKyMgTmFtZSBvZiB0aGUgaG9zdC4KKyMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIExpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KK2FjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorCitleGVjIDY+JjEKKworIworIyBJbml0aWFsaXphdGlvbnMuCisjCithY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCithY19jb25maWdfbGlib2JqX2Rpcj0uCitjcm9zc19jb21waWxpbmc9bm8KK3N1YmRpcnM9CitNRkxBR1M9CitNQUtFRkxBR1M9CitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCisjIE1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHB1dCBpbiBhIHNoZWxsIGhlcmUgZG9jdW1lbnQuCisjIFRoaXMgdmFyaWFibGUgc2VlbXMgb2Jzb2xldGUuICBJdCBzaG91bGQgcHJvYmFibHkgYmUgcmVtb3ZlZCwgYW5kCisjIG9ubHkgYWNfbWF4X3NlZF9saW5lcyBzaG91bGQgYmUgdXNlZC4KKzogJHthY19tYXhfaGVyZV9saW5lcz0zOH0KKworIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCitQQUNLQUdFX05BTUU9CitQQUNLQUdFX1RBUk5BTUU9CitQQUNLQUdFX1ZFUlNJT049CitQQUNLQUdFX1NUUklORz0KK1BBQ0tBR0VfQlVHUkVQT1JUPQorCithY191bmlxdWVfZmlsZT0iYnVmZmVyLmMiCisjIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCithY19pbmNsdWRlc19kZWZhdWx0PSJcCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1NZU19UWVBFU19ICisjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVF9ICisjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBTVERDX0hFQURFUlMKKyMgaW5jbHVkZSA8c3RkbGliLmg+CisjIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TVERMSUJfSAorIyAgaW5jbHVkZSA8c3RkbGliLmg+CisjIGVuZGlmCisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjIGlmICFTVERDX0hFQURFUlMgJiYgSEFWRV9NRU1PUllfSAorIyAgaW5jbHVkZSA8bWVtb3J5Lmg+CisjIGVuZGlmCisjIGluY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdTX0gKKyMgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9JTlRUWVBFU19ICisjIGluY2x1ZGUgPGludHR5cGVzLmg+CisjZWxzZQorIyBpZiBIQVZFX1NURElOVF9ICisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYiCisKK2FjX3N1YnN0X3ZhcnM9J1NIRUxMIFBBVEhfU0VQQVJBVE9SIFBBQ0tBR0VfTkFNRSBQQUNLQUdFX1RBUk5BTUUgUEFDS0FHRV9WRVJTSU9OIFBBQ0tBR0VfU1RSSU5HIFBBQ0tBR0VfQlVHUkVQT1JUIGV4ZWNfcHJlZml4IHByZWZpeCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpciBidWlsZF9hbGlhcyBob3N0X2FsaWFzIHRhcmdldF9hbGlhcyBERUZTIEVDSE9fQyBFQ0hPX04gRUNIT19UIExJQlMgQ0MgQ0ZMQUdTIExERkxBR1MgQ1BQRkxBR1MgYWNfY3RfQ0MgRVhFRVhUIE9CSkVYVCBTRVRfTUFLRSBMRCBidWlsZCBidWlsZF9jcHUgYnVpbGRfdmVuZG9yIGJ1aWxkX29zIGhvc3QgaG9zdF9jcHUgaG9zdF92ZW5kb3IgaG9zdF9vcyBBUiBhY19jdF9BUiBSQU5MSUIgYWNfY3RfUkFOTElCIFNUUklQIGFjX2N0X1NUUklQIElOU1RBTEwgYWNfY3RfSU5TVEFMTCBDUFAgRUdSRVAgTElCT0JKUyBMVExJQk9CSlMnCithY19zdWJzdF9maWxlcz0nJworCisjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCithY19pbml0X2hlbHA9CithY19pbml0X3ZlcnNpb249ZmFsc2UKKyMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCisjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCitjYWNoZV9maWxlPS9kZXYvbnVsbAorZXhlY19wcmVmaXg9Tk9ORQorbm9fY3JlYXRlPQorbm9fcmVjdXJzaW9uPQorcHJlZml4PU5PTkUKK3Byb2dyYW1fcHJlZml4PU5PTkUKK3Byb2dyYW1fc3VmZml4PU5PTkUKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9cyx4LHgsCitzaWxlbnQ9CitzaXRlPQorc3JjZGlyPQordmVyYm9zZT0KK3hfaW5jbHVkZXM9Tk9ORQoreF9saWJyYXJpZXM9Tk9ORQorCisjIEluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb3B0aW9ucy4KKyMgVGhlc2UgYXJlIGxlZnQgdW5leHBhbmRlZCBzbyB1c2VycyBjYW4gIm1ha2UgaW5zdGFsbCBleGVjX3ByZWZpeD0vZm9vIgorIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKKyMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KKyMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCitiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKK3NiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCitsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJworZGF0YWRpcj0nJHtwcmVmaXh9L3NoYXJlJworc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKK3NoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJworbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCitvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCitpbmZvZGlyPScke3ByZWZpeH0vaW5mbycKK21hbmRpcj0nJHtwcmVmaXh9L21hbicKKworYWNfcHJldj0KK2ZvciBhY19vcHRpb24KK2RvCisgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgICBldmFsICIkYWNfcHJldj1cJGFjX29wdGlvbiIKKyAgICBhY19wcmV2PQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgYWNfb3B0YXJnPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFtePV0qPVwoLipcKSdgCisKKyAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKworICBjYXNlICRhY19vcHRpb24gaW4KKworICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgIGFjX3ByZXY9YmluZGlyIDs7CisgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisgICAgYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQorICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKKyAgLWJ1aWxkPSogfCAtLWJ1aWxkPSogfCAtLWJ1aWw9KiB8IC0tYnVpPSogfCAtLWJ1PSopCisgICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKKyAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgYWNfcHJldj1jYWNoZV9maWxlIDs7CisgIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAorICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorICAgIGNhY2hlX2ZpbGU9JGFjX29wdGFyZyA7OworCisgIC0tY29uZmlnLWNhY2hlIHwgLUMpCisgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKworICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCB8IC0tZGF0YSB8IC0tZGF0IHwgLS1kYSkKKyAgICBhY19wcmV2PWRhdGFkaXIgOzsKKyAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KiB8IC0tZGF0YT0qIHwgLS1kYXQ9KiBcCisgIHwgLS1kYT0qKQorICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OworCisgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKKyAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvLS9fL2cnYAorICAgIGV2YWwgImVuYWJsZV8kYWNfZmVhdHVyZT1ubyIgOzsKKworICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQorICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzLy0vXy9nJ2AKKyAgICBjYXNlICRhY19vcHRpb24gaW4KKyAgICAgICo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisgICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CisgICAgZXNhYworICAgIGV2YWwgImVuYWJsZV8kYWNfZmVhdHVyZT0nJGFjX29wdGFyZyciIDs7CisKKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCisgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKyAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCisgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorICAgIGV4ZWNfcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtZ2FzIHwgLS1nYXMgfCAtLWdhIHwgLS1nKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgtZ2FzLgorICAgIHdpdGhfZ2FzPXllcyA7OworCisgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCisgICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKKyAgLWhlbHA9ciogfCAtLWhlbHA9ciogfCAtLWhlbD1yKiB8IC0taGU9ciogfCAtaHIqKQorICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKKyAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQorICAgIGFjX2luaXRfaGVscD1zaG9ydCA7OworCisgIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQorICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OworICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQorICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKKyAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQorICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCisgICAgYWNfcHJldj1pbmZvZGlyIDs7CisgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisgICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICBhY19wcmV2PWxpYmRpciA7OworICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCisgICAgbGliZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCisgIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQorICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAorICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCisgIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IFwKKyAgfCAtLWxvY2FscyB8IC0tbG9jYWwgfCAtLWxvY2EgfCAtLWxvYyB8IC0tbG8pCisgICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7CisgIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAorICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIFwKKyAgfCAtLWxvY2Fscz0qIHwgLS1sb2NhbD0qIHwgLS1sb2NhPSogfCAtLWxvYz0qIHwgLS1sbz0qKQorICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgYWNfcHJldj1tYW5kaXIgOzsKKyAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQorICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW5mcCB8IC0tbmZwIHwgLS1uZikKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgorICAgIHdpdGhfZnA9bm8gOzsKKworICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKKyAgICBub19jcmVhdGU9eWVzIDs7CisKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQorICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKKworICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCisgIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAorICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9sZCB8IC0tb2wgfCAtLW8pCisgICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7CisgIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAorICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5jbHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcCisgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCisgICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICBhY19wcmV2PXByZWZpeCA7OworICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCisgICAgcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAorICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKKyAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAorICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCisgICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisgIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsKKyAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisgIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKKyAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAorICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCisgICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7CisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zPSogfCAtLXByb2dyYW0tdHJhbj0qIFwKKyAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQorICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworCisgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgIHNpbGVudD15ZXMgOzsKKworICAtc2JpbmRpciB8IC0tc2JpbmRpciB8IC0tc2JpbmRpIHwgLS1zYmluZCB8IC0tc2JpbiB8IC0tc2JpIHwgLS1zYikKKyAgICBhY19wcmV2PXNiaW5kaXIgOzsKKyAgLXNiaW5kaXI9KiB8IC0tc2JpbmRpcj0qIHwgLS1zYmluZGk9KiB8IC0tc2JpbmQ9KiB8IC0tc2Jpbj0qIFwKKyAgfCAtLXNiaT0qIHwgLS1zYj0qKQorICAgIHNiaW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGkgXAorICB8IC0tc2hhcmVkc3RhdGVkIHwgLS1zaGFyZWRzdGF0ZSB8IC0tc2hhcmVkc3RhdCB8IC0tc2hhcmVkc3RhIFwKKyAgfCAtLXNoYXJlZHN0IHwgLS1zaGFyZWRzIHwgLS1zaGFyZWQgfCAtLXNoYXJlIHwgLS1zaGFyIFwKKyAgfCAtLXNoYSB8IC0tc2gpCisgICAgYWNfcHJldj1zaGFyZWRzdGF0ZWRpciA7OworICAtc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaT0qIFwKKyAgfCAtLXNoYXJlZHN0YXRlZD0qIHwgLS1zaGFyZWRzdGF0ZT0qIHwgLS1zaGFyZWRzdGF0PSogfCAtLXNoYXJlZHN0YT0qIFwKKyAgfCAtLXNoYXJlZHN0PSogfCAtLXNoYXJlZHM9KiB8IC0tc2hhcmVkPSogfCAtLXNoYXJlPSogfCAtLXNoYXI9KiBcCisgIHwgLS1zaGE9KiB8IC0tc2g9KikKKyAgICBzaGFyZWRzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNpdGUgfCAtLXNpdGUgfCAtLXNpdCkKKyAgICBhY19wcmV2PXNpdGUgOzsKKyAgLXNpdGU9KiB8IC0tc2l0ZT0qIHwgLS1zaXQ9KikKKyAgICBzaXRlPSRhY19vcHRhcmcgOzsKKworICAtc3JjZGlyIHwgLS1zcmNkaXIgfCAtLXNyY2RpIHwgLS1zcmNkIHwgLS1zcmMgfCAtLXNyKQorICAgIGFjX3ByZXY9c3JjZGlyIDs7CisgIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCisgICAgc3JjZGlyPSRhY19vcHRhcmcgOzsKKworICAtc3lzY29uZmRpciB8IC0tc3lzY29uZmRpciB8IC0tc3lzY29uZmRpIHwgLS1zeXNjb25mZCB8IC0tc3lzY29uZiBcCisgIHwgLS1zeXNjb24gfCAtLXN5c2NvIHwgLS1zeXNjIHwgLS1zeXMgfCAtLXN5KQorICAgIGFjX3ByZXY9c3lzY29uZmRpciA7OworICAtc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaT0qIHwgLS1zeXNjb25mZD0qIHwgLS1zeXNjb25mPSogXAorICB8IC0tc3lzY29uPSogfCAtLXN5c2NvPSogfCAtLXN5c2M9KiB8IC0tc3lzPSogfCAtLXN5PSopCisgICAgc3lzY29uZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXRhcmdldCB8IC0tdGFyZ2V0IHwgLS10YXJnZSB8IC0tdGFyZyB8IC0tdGFyIHwgLS10YSB8IC0tdCkKKyAgICBhY19wcmV2PXRhcmdldF9hbGlhcyA7OworICAtdGFyZ2V0PSogfCAtLXRhcmdldD0qIHwgLS10YXJnZT0qIHwgLS10YXJnPSogfCAtLXRhcj0qIHwgLS10YT0qIHwgLS10PSopCisgICAgdGFyZ2V0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtdiB8IC12ZXJib3NlIHwgLS12ZXJib3NlIHwgLS12ZXJib3MgfCAtLXZlcmJvIHwgLS12ZXJiKQorICAgIHZlcmJvc2U9eWVzIDs7CisKKyAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtVikKKyAgICBhY19pbml0X3ZlcnNpb249OiA7OworCisgIC13aXRoLSogfCAtLXdpdGgtKikKKyAgICBhY19wYWNrYWdlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy8tL18vZydgCisgICAgY2FzZSAkYWNfb3B0aW9uIGluCisgICAgICAqPSopIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OworICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworICAgIGVzYWMKKyAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPSckYWNfb3B0YXJnJyIgOzsKKworICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCisgICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzLy0vXy9nJ2AKKyAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPW5vIiA7OworCisgIC0teCkKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCisgICAgd2l0aF94PXllcyA7OworCisgIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKKyAgfCAtLXgtaW5jbCB8IC0teC1pbmMgfCAtLXgtaW4gfCAtLXgtaSkKKyAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKyAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKKyAgfCAtLXgtaW5jbD0qIHwgLS14LWluYz0qIHwgLS14LWluPSogfCAtLXgtaT0qKQorICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OworCisgIC14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWUgfCAtLXgtbGlicmFyaSBcCisgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKKyAgLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWU9KiB8IC0teC1saWJyYXJpPSogXAorICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKyAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CisKKyAgLSopIHsgZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJGFjX29wdGlvbgorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgOzsKKworICAqPSopCisgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX2VudnZhciIgOiAiLipbXl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFyaWFibGUgbmFtZTogJGFjX2VudnZhciIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgCisgICAgZXZhbCAiJGFjX2VudnZhcj0nJGFjX29wdGFyZyciCisgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKKworICAqKQorICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KKyAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgorICAgIGV4cHIgIngkYWNfb3B0aW9uIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCisgICAgOiAke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufQorICAgIDs7CisKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAorICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKKyMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgorZm9yIGFjX3ZhciBpbiBleGVjX3ByZWZpeCBwcmVmaXgKK2RvCisgIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorICBjYXNlICRhY192YWwgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogfCBOT05FIHwgJycgKSA7OworICAgICopICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgZXNhYworZG9uZQorCisjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBwYXRocy4KK2ZvciBhY192YXIgaW4gYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgXAorCSAgICAgIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpcgorZG8KKyAgZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgIFtcXC8kXSogfCA/OltcXC9dKiApIDs7CisgICAgKikgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICBlc2FjCitkb25lCisKKyMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKKyMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudCBvZiAtLWhvc3QgZXRjLgorIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgorYnVpbGQ9JGJ1aWxkX2FsaWFzCitob3N0PSRob3N0X2FsaWFzCit0YXJnZXQ9JHRhcmdldF9hbGlhcworCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4KKyAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlCisgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkLiIgPiYyCisgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisgIGZpCitmaQorCithY190b29sX3ByZWZpeD0KK3Rlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKwordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAorCisKKyMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KK2lmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCisgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50LgorICBhY19jb25mZGlyPWAoZGlybmFtZSAiJDAiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiQwIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgorICAgIHNyY2Rpcj0uLgorICBmaQorZWxzZQorICBhY19zcmNkaXJfZGVmYXVsdGVkPW5vCitmaQoraWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCisgIGlmIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllczsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkYWNfY29uZmRpciBvciAuLiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgZWxzZQorICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBmaQorZmkKKyhjZCAkc3JjZGlyICYmIHRlc3QgLXIgLi8kYWNfdW5pcXVlX2ZpbGUpIDI+L2Rldi9udWxsIHx8CisgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogc291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK3NyY2Rpcj1gZWNobyAiJHNyY2RpciIgfCBzZWQgJ3MlXChbXlxcL11cKVtcXC9dKiQlXDElJ2AKK2FjX2Vudl9idWlsZF9hbGlhc19zZXQ9JHtidWlsZF9hbGlhcytzZXR9CithY19lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCithY19jdl9lbnZfYnVpbGRfYWxpYXNfc2V0PSR7YnVpbGRfYWxpYXMrc2V0fQorYWNfY3ZfZW52X2J1aWxkX2FsaWFzX3ZhbHVlPSRidWlsZF9hbGlhcworYWNfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9CithY19lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcworYWNfY3ZfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9CithY19jdl9lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcworYWNfZW52X3RhcmdldF9hbGlhc19zZXQ9JHt0YXJnZXRfYWxpYXMrc2V0fQorYWNfZW52X3RhcmdldF9hbGlhc192YWx1ZT0kdGFyZ2V0X2FsaWFzCithY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3NldD0ke3RhcmdldF9hbGlhcytzZXR9CithY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3ZhbHVlPSR0YXJnZXRfYWxpYXMKK2FjX2Vudl9DQ19zZXQ9JHtDQytzZXR9CithY19lbnZfQ0NfdmFsdWU9JENDCithY19jdl9lbnZfQ0Nfc2V0PSR7Q0Mrc2V0fQorYWNfY3ZfZW52X0NDX3ZhbHVlPSRDQworYWNfZW52X0NGTEFHU19zZXQ9JHtDRkxBR1Mrc2V0fQorYWNfZW52X0NGTEFHU192YWx1ZT0kQ0ZMQUdTCithY19jdl9lbnZfQ0ZMQUdTX3NldD0ke0NGTEFHUytzZXR9CithY19jdl9lbnZfQ0ZMQUdTX3ZhbHVlPSRDRkxBR1MKK2FjX2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQorYWNfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKK2FjX2N2X2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQorYWNfY3ZfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKK2FjX2Vudl9DUFBGTEFHU19zZXQ9JHtDUFBGTEFHUytzZXR9CithY19lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCithY19jdl9lbnZfQ1BQRkxBR1Nfc2V0PSR7Q1BQRkxBR1Mrc2V0fQorYWNfY3ZfZW52X0NQUEZMQUdTX3ZhbHVlPSRDUFBGTEFHUworYWNfZW52X0NQUF9zZXQ9JHtDUFArc2V0fQorYWNfZW52X0NQUF92YWx1ZT0kQ1BQCithY19jdl9lbnZfQ1BQX3NldD0ke0NQUCtzZXR9CithY19jdl9lbnZfQ1BQX3ZhbHVlPSRDUFAKKworIworIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgorIworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKyAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKyAgY2F0IDw8X0FDRU9GCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyB0aGlzIHBhY2thZ2UgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKworVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKworRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisKK0NvbmZpZ3VyYXRpb246CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKyAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZy4uLicgbWVzc2FnZXMKKyAgICAgIC0tY2FjaGUtZmlsZT1GSUxFICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUgW2Rpc2FibGVkXQorICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJworICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcworICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KKworX0FDRU9GCisKKyAgY2F0IDw8X0FDRU9GCitJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAorCQkJICBbJGFjX2RlZmF1bHRfcHJlZml4XQorICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAorCQkJICBbUFJFRklYXQorCitCeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KK1xgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CithbiBpbnN0YWxsYXRpb24gcHJlZml4IG90aGVyIHRoYW4gXGAkYWNfZGVmYXVsdF9wcmVmaXgnIHVzaW5nIFxgLS1wcmVmaXgnLAorZm9yIGluc3RhbmNlIFxgLS1wcmVmaXg9XCRIT01FJy4KKworRm9yIGJldHRlciBjb250cm9sLCB1c2UgdGhlIG9wdGlvbnMgYmVsb3cuCisKK0ZpbmUgdHVuaW5nIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CisgIC0tYmluZGlyPURJUiAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgc3lzdGVtIGFkbWluIGV4ZWN1dGFibGVzIFtFUFJFRklYL3NiaW5dCisgIC0tbGliZXhlY2Rpcj1ESVIgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorICAtLWRhdGFkaXI9RElSICAgICAgICAgIHJlYWQtb25seSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL3NoYXJlXQorICAtLXN5c2NvbmZkaXI9RElSICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgIG1vZGlmaWFibGUgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9jb21dCisgIC0tbG9jYWxzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorICAtLWxpYmRpcj1ESVIgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisgIC0taW5jbHVkZWRpcj1ESVIgICAgICAgQyBoZWFkZXIgZmlsZXMgW1BSRUZJWC9pbmNsdWRlXQorICAtLW9sZGluY2x1ZGVkaXI9RElSICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCisgIC0taW5mb2Rpcj1ESVIgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtQUkVGSVgvaW5mb10KKyAgLS1tYW5kaXI9RElSICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbUFJFRklYL21hbl0KK19BQ0VPRgorCisgIGNhdCA8PFxfQUNFT0YKKworU3lzdGVtIHR5cGVzOgorICAtLWJ1aWxkPUJVSUxEICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtndWVzc2VkXQorICAtLWhvc3Q9SE9TVCAgICAgICBjcm9zcy1jb21waWxlIHRvIGJ1aWxkIHByb2dyYW1zIHRvIHJ1biBvbiBIT1NUIFtCVUlMRF0KK19BQ0VPRgorZmkKKworaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKworICBjYXQgPDxcX0FDRU9GCisKK09wdGlvbmFsIEZlYXR1cmVzOgorICAtLWRpc2FibGUtRkVBVFVSRSAgICAgICBkbyBub3QgaW5jbHVkZSBGRUFUVVJFIChzYW1lIGFzIC0tZW5hYmxlLUZFQVRVUkU9bm8pCisgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKyAgLS1kaXNhYmxlLWxhcmdlZmlsZSAgICAgb21pdCBzdXBwb3J0IGZvciBsYXJnZSBmaWxlcworICAtLWRpc2FibGUtemxpYiAgICAgICAgICBEb24ndCBpbmNsdWRlIHpsaWIgc3VwcG9ydAorICAtLWVuYWJsZS1wYW0gICAgICAgICAgVHJ5IHRvIGluY2x1ZGUgUEFNIHN1cHBvcnQKKyAgLS1kaXNhYmxlLW9wZW5wdHkgICAgICAgRG9uJ3QgdXNlIG9wZW5wdHksIHVzZSBhbHRlcm5hdGl2ZSBtZXRob2QKKyAgLS1kaXNhYmxlLXN5c2xvZyAgICAgICAgRG9uJ3QgaW5jbHVkZSBzeXNsb2cgc3VwcG9ydAorICAtLWRpc2FibGUtc2hhZG93ICAgICAgICBEb24ndCB1c2Ugc2hhZG93IHBhc3N3b3JkcyAoaWYgYXZhaWxhYmxlKQorICAtLWRpc2FibGUtbGFzdGxvZyAgICAgICBEaXNhYmxlIHVzZSBvZiBsYXN0bG9nIGV2ZW4gaWYgZGV0ZWN0ZWQgbm8KKyAgLS1kaXNhYmxlLXV0bXAgICAgICAgICAgRGlzYWJsZSB1c2Ugb2YgdXRtcCBldmVuIGlmIGRldGVjdGVkIG5vCisgIC0tZGlzYWJsZS11dG1weCAgICAgICAgIERpc2FibGUgdXNlIG9mIHV0bXB4IGV2ZW4gaWYgZGV0ZWN0ZWQgbm8KKyAgLS1kaXNhYmxlLXd0bXAgICAgICAgICAgRGlzYWJsZSB1c2Ugb2Ygd3RtcCBldmVuIGlmIGRldGVjdGVkIG5vCisgIC0tZGlzYWJsZS13dG1weCAgICAgICAgIERpc2FibGUgdXNlIG9mIHd0bXB4IGV2ZW4gaWYgZGV0ZWN0ZWQgbm8KKyAgLS1kaXNhYmxlLWxvZ2luZnVuYyAgICAgRGlzYWJsZSB1c2Ugb2YgbG9naW4oKSBldGMuIG5vCisgIC0tZGlzYWJsZS1wdXR1dGxpbmUgICAgIERpc2FibGUgdXNlIG9mIHB1dHV0bGluZSgpIGV0Yy4gKHV3dG1wKSBubworICAtLWRpc2FibGUtcHV0dXR4bGluZSAgICBEaXNhYmxlIHVzZSBvZiBwdXR1dHhsaW5lKCkgZXRjLiAodXd0bXB4KSBubworCitPcHRpb25hbCBQYWNrYWdlczoKKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKKyAgLS13aXRoLXpsaWI9UEFUSCAgICAgICAgVXNlIHpsaWIgaW4gUEFUSAorICAtLXdpdGgtcGFtPVBBVEggICAgICAgIFVzZSBwYW0gaW4gUEFUSAorICAtLXdpdGgtbGFzdGxvZz1GSUxFfERJUiBzcGVjaWZ5IGxhc3Rsb2cgbG9jYXRpb24gY29tbW9uIGxvY2F0aW9ucworCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgQ1BQRkxBR1MgICAgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZiB5b3UgaGF2ZQorICAgICAgICAgICAgICBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KKyAgQ1BQICAgICAgICAgQyBwcmVwcm9jZXNzb3IKKworVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKK2l0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KKworX0FDRU9GCitmaQorCitpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCisgICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCisgIGFjX3BvcGRpcj1gcHdkYAorICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQorICAgIHRlc3QgLWQgJGFjX2RpciB8fCBjb250aW51ZQorICAgIGFjX2J1aWxkZGlyPS4KKworaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgorICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCisgICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKK2Vsc2UKKyAgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyPQorZmkKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCisgICAgICAgYWNfdG9wX3NyY2Rpcj0uCisgICAgZWxzZQorICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKKyAgICBmaSA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIHBhdGguCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBwYXRoLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworZXNhYworCisjIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKKyMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCitjYXNlIGBwd2RgIGluCisuKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKyopCisgIGNhc2UgIiRhY19kaXIiIGluCisgIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisgICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OworICBlc2FjOzsKK2VzYWMKK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKyopCisgIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgorICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisgICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKKyAgZXNhYzs7Citlc2FjCitjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisqKQorICBjYXNlICRhY19zcmNkaXIgaW4KKyAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7CisgIGVzYWM7OworZXNhYworY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisqKQorICBjYXNlICRhY190b3Bfc3JjZGlyIGluCisgIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKyAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7CisgIGVzYWM7OworZXNhYworCisgICAgY2QgJGFjX2RpcgorICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlOyBvdGhlcndpc2UgZ2V0IEN5Z251cyBzdHlsZSBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnU7IHRoZW4KKyAgICAgIGVjaG8KKyAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUgIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmU7IHRoZW4KKyAgICAgIGVjaG8KKyAgICAgICRTSEVMTCAkYWNfc3JjZGlyL2NvbmZpZ3VyZSAgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsaWYgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5hYyB8fAorCSAgIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuaW47IHRoZW4KKyAgICAgIGVjaG8KKyAgICAgICRhY19jb25maWd1cmUgLS1oZWxwCisgICAgZWxzZQorICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMgorICAgIGZpCisgICAgY2QgJGFjX3BvcGRpcgorICBkb25lCitmaQorCit0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0IDAKK2lmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKyAgY2F0IDw8XF9BQ0VPRgorCitDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorX0FDRU9GCisgIGV4aXQgMAorZmkKK2V4ZWMgNT5jb25maWcubG9nCitjYXQgPiY1IDw8X0FDRU9GCitUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKworSXQgd2FzIGNyZWF0ZWQgYnkgJGFzX21lLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgICQgJDAgJEAKKworX0FDRU9GCit7CitjYXQgPDxfQVNVTkFNRQorIyMgLS0tLS0tLS0tICMjCisjIyBQbGF0Zm9ybS4gIyMKKyMjIC0tLS0tLS0tLSAjIworCitob3N0bmFtZSA9IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisKKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsICAgICB8fCBlY2hvIHVua25vd25gCisKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGwgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK2hvc3RpbmZvICAgICAgICAgICAgICAgPSBgKGhvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKworX0FTVU5BTUUKKworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBlY2hvICJQQVRIOiAkYXNfZGlyIgorZG9uZQorCit9ID4mNQorCitjYXQgPiY1IDw8X0FDRU9GCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIENvcmUgdGVzdHMuICMjCisjIyAtLS0tLS0tLS0tLSAjIworCitfQUNFT0YKKworCisjIEtlZXAgYSB0cmFjZSBvZiB0aGUgY29tbWFuZCBsaW5lLgorIyBTdHJpcCBvdXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCisjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKyMgQWxzbyBxdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGEtY2hhcmFjdGVycy4KKyMgTWFrZSB0d28gcGFzc2VzIHRvIGFsbG93IGZvciBwcm9wZXIgZHVwbGljYXRlLWFyZ3VtZW50IHN1cHByZXNzaW9uLgorYWNfY29uZmlndXJlX2FyZ3M9CithY19jb25maWd1cmVfYXJnczA9CithY19jb25maWd1cmVfYXJnczE9CithY19zZXA9CithY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorZm9yIGFjX3Bhc3MgaW4gMSAyCitkbworICBmb3IgYWNfYXJnCisgIGRvCisgICAgY2FzZSAkYWNfYXJnIGluCisgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgICBjb250aW51ZSA7OworICAgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XCJcJ10qKQorICAgICAgYWNfYXJnPWBlY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgIGVzYWMKKyAgICBjYXNlICRhY19wYXNzIGluCisgICAgMSkgYWNfY29uZmlndXJlX2FyZ3MwPSIkYWNfY29uZmlndXJlX2FyZ3MwICckYWNfYXJnJyIgOzsKKyAgICAyKQorICAgICAgYWNfY29uZmlndXJlX2FyZ3MxPSIkYWNfY29uZmlndXJlX2FyZ3MxICckYWNfYXJnJyIKKyAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgorCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKyAgICAgIGVsc2UKKwljYXNlICRhY19hcmcgaW4KKwkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorCSAgfCAtZW5hYmxlLSogfCAtLWVuYWJsZS0qIHwgLWdhcyB8IC0tZyogfCAtbmZwIHwgLS1uZiogXAorCSAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCisJICAgIGNhc2UgIiRhY19jb25maWd1cmVfYXJnczAgIiBpbgorCSAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzJGFjX3NlcCckYWNfYXJnJyIKKyAgICAgICMgR2V0IHJpZCBvZiB0aGUgbGVhZGluZyBzcGFjZS4KKyAgICAgIGFjX3NlcD0iICIKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCitkb25lCiskYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MwK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMD07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczA7IH0KKyRhc191bnNldCBhY19jb25maWd1cmVfYXJnczEgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczErc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MxPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMTsgfQorCisjIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCisjIGNvbmZpZy5sb2cuICBXZSByZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQorIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCisjIFdBUk5JTkc6IEJlIHN1cmUgbm90IHRvIHVzZSBzaW5nbGUgcXVvdGVzIGluIHRoZXJlLCBhcyBzb21lIHNoZWxscywKKyMgc3VjaCBhcyBvdXIgRFUgNS4wIGZyaWVuZCwgd2lsbCB0aGVuIGBjbG9zZScgdGhlIHRyYXAuCit0cmFwICdleGl0X3N0YXR1cz0kPworICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KKyAgeworICAgIGVjaG8KKworICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENhY2hlIHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgIGVjaG8KKyAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAoreworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlIGAoYWNfc3BhY2U9JyInIicgJyInIic7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCisgICAgKmFjX3NwYWNlPVwgKikKKyAgICAgIHNlZCAtbiBcCisJInMvJyInIicvJyInIidcXFxcJyInIicnIiciJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nIiciJ1xcMiciJyInL3AiCisgICAgICA7OworICAgICopCisgICAgICBzZWQgLW4gXAorCSJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorICAgICAgOzsKKyAgICBlc2FjOworfQorICAgIGVjaG8KKworICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgIGVjaG8KKyAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCisgICAgZG8KKyAgICAgIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorICAgICAgZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKyAgICBkb25lIHwgc29ydAorICAgIGVjaG8KKworICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKyAgICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0gIyMKKyMjIE91dHB1dCBmaWxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICAgZWNobworICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKKyAgICAgIGRvCisJZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCisJZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKyAgICAgIGRvbmUgfCBzb3J0CisgICAgICBlY2hvCisgICAgZmkKKworICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgorICAgICAgY2F0IDw8XF9BU0JPWAorIyMgLS0tLS0tLS0tLS0gIyMKKyMjIGNvbmZkZWZzLmguICMjCisjIyAtLS0tLS0tLS0tLSAjIworX0FTQk9YCisgICAgICBlY2hvCisgICAgICBzZWQgIi9eJC9kIiBjb25mZGVmcy5oIHwgc29ydAorICAgICAgZWNobworICAgIGZpCisgICAgdGVzdCAiJGFjX3NpZ25hbCIgIT0gMCAmJgorICAgICAgZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiCisgICAgZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKyAgfSA+JjUKKyAgcm0gLWYgY29yZSAqLmNvcmUgJiYKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKKyAgICBleGl0ICRleGl0X3N0YXR1cworICAgICAnIDAKK2ZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyB7IChleGl0IDEpOyBleGl0IDE7IH0nICRhY19zaWduYWwKK2RvbmUKK2FjX3NpZ25hbD0wCisKKyMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCitybSAtcmYgY29uZnRlc3QqIGNvbmZkZWZzLmgKKyMgQUlYIGNwcCBsb3NlcyBvbiBhbiBlbXB0eSBmaWxlLCBzbyBtYWtlIHN1cmUgaXQgY29udGFpbnMgYXQgbGVhc3QgYSBuZXdsaW5lLgorZWNobyA+Y29uZmRlZnMuaAorCisjIFByZWRlZmluZWQgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX05BTUUgIiRQQUNLQUdFX05BTUUiCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJFBBQ0tBR0VfVEFSTkFNRSIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1NUUklORyAiJFBBQ0tBR0VfU1RSSU5HIgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiJFBBQ0tBR0VfQlVHUkVQT1JUIgorX0FDRU9GCisKKworIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCisjIFByZWZlciBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgoraWYgdGVzdCAteiAiJENPTkZJR19TSVRFIjsgdGhlbgorICBpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgICBDT05GSUdfU0lURT0iJHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSAkcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKyAgZWxzZQorICAgIENPTkZJR19TSVRFPSIkYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKyAgZmkKK2ZpCitmb3IgYWNfc2l0ZV9maWxlIGluICRDT05GSUdfU0lURTsgZG8KKyAgaWYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CisgICAgc2VkICdzL14vfCAvJyAiJGFjX3NpdGVfZmlsZSIgPiY1CisgICAgLiAiJGFjX3NpdGVfZmlsZSIKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsCisgICMgZmlsZXMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LgorICBpZiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICBjYXNlICRjYWNoZV9maWxlIGluCisgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gJGNhY2hlX2ZpbGU7OworICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAuLyRjYWNoZV9maWxlOzsKKyAgICBlc2FjCisgIGZpCitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgID4kY2FjaGVfZmlsZQorZmkKKworIyBDaGVjayB0aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0aGUgc2FtZQorIyB2YWx1ZS4KK2FjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQorZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8CisJICAgICAgIHNlZCAtbiAncy9eYWNfZW52X1woW2EtekEtWl8wLTldKlwpX3NldD0uKi9cMS9wJ2A7IGRvCisgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfb2xkX3ZhbD0iXCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlIgorICBldmFsIGFjX25ld192YWw9IlwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZSIKKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorICAgIHNldCwpCisgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICxzZXQpCisgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLCk7OworICAgICopCisgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjUKK2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiYyO30KKwl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjUKK2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiYyO30KKwlhY19jYWNoZV9jb3JydXB0ZWQ9OgorICAgICAgZmk7OworICBlc2FjCisgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KKyAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCisgICAgY2FzZSAkYWNfbmV3X3ZhbCBpbgorICAgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XCJcJ10qKQorICAgICAgYWNfYXJnPSRhY192YXI9YGVjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CisgICAgZXNhYworICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgorICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCisgICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKyAgICBlc2FjCisgIGZpCitkb25lCitpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitPTERDRkxBR1M9JENGTEFHUworIyBDaGVja3MgZm9yIHByb2dyYW1zLgorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRDQyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICBDQz0kYWNfY3RfQ0MKK2Vsc2UKKyAgQ0M9IiRhY19jdl9wcm9nX0NDIgorZmkKKworaWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJjYyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIENDPSRhY19jdF9DQworZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCisgICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKKyAgICAgICBjb250aW51ZQorICAgICBmaQorICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKK2lmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KKyAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgorICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfQ0MKKyAgc2hpZnQKKyAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCisgICAgIyBIb3dldmVyLCBpdCBoYXMgdGhlIHNhbWUgYmFzZW5hbWUsIHNvIHRoZSBib2dvbiB3aWxsIGJlIGNob3NlbgorICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgorICAgIHNoaWZ0CisgICAgYWNfY3ZfcHJvZ19DQz0iJGFzX2Rpci8kYWNfd29yZCR7MSsnICd9JEAiCisgIGZpCitmaQorZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBjbAorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRDQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgIGZvciBhY19wcm9nIGluIGNsCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhaworZG9uZQorCisgIENDPSRhY19jdF9DQworZmkKKworZmkKKworCit0ZXN0IC16ICIkQ0MiICYmIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKKyMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KK2VjaG8gIiRhc19tZTokTElORU5POiIgXAorICAgICAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1CithY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCit7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9Cit7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoreyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEuZXhlIGIub3V0IgorIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgorIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorIyBvZiBleGVleHQuCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICRFQ0hPX0MiID4mNgorYWNfbGlua19kZWZhdWx0PWBlY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua19kZWZhdWx0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmtfZGVmYXVsdCkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAjIEZpbmQgdGhlIG91dHB1dCwgc3RhcnRpbmcgZnJvbSB0aGUgbW9zdCBsaWtlbHkuICBUaGlzIHNjaGVtZSBpcworIyBub3Qgcm9idXN0IHRvIGp1bmsgaW4gYC4nLCBoZW5jZSBnbyB0byB3aWxkY2FyZHMgKGEuKikgb25seSBhcyBhIGxhc3QKKyMgcmVzb3J0LgorCisjIEJlIGNhcmVmdWwgdG8gaW5pdGlhbGl6ZSB0aGlzIHZhcmlhYmxlLCBzaW5jZSBpdCB1c2VkIHRvIGJlIGNhY2hlZC4KKyMgT3RoZXJ3aXNlIGFuIG9sZCBjYWNoZSB2YWx1ZSBvZiBgbm8nIGxlZCB0byBgRVhFRVhUID0gbm8nIGluIGEgTWFrZWZpbGUuCithY19jdl9leGVleHQ9CisjIGIub3V0IGlzIGNyZWF0ZWQgYnkgaTk2MCBjb21waWxlcnMuCitmb3IgYWNfZmlsZSBpbiBhX291dC5leGUgYS5leGUgY29uZnRlc3QuZXhlIGEub3V0IGNvbmZ0ZXN0IGEuKiBjb25mdGVzdC4qIGIub3V0CitkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5vIHwgKi5vYmogKQorCTs7CisgICAgY29uZnRlc3QuJGFjX2V4dCApCisJIyBUaGlzIGlzIHRoZSBzb3VyY2UgZmlsZS4KKwk7OworICAgIFthYl0ub3V0ICkKKwkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAorCSMgY2VydGFpbmx5IHJpZ2h0LgorCWJyZWFrOzsKKyAgICAqLiogKQorCWFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorCSMgRklYTUU6IEkgYmVsaWV2ZSB3ZSBleHBvcnQgYWNfY3ZfZXhlZXh0IGZvciBMaWJ0b29sLAorCSMgYnV0IGl0IHdvdWxkIGJlIGNvb2wgdG8gZmluZCBvdXQgaWYgaXQncyB0cnVlLiAgRG9lcyBhbnlib2R5CisJIyBtYWludGFpbiBMaWJ0b29sPyAtLWFraW0uCisJZXhwb3J0IGFjX2N2X2V4ZWV4dAorCWJyZWFrOzsKKyAgICAqICkKKwlicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCA3Nyk7IGV4aXQgNzc7IH07IH0KK2ZpCisKK2FjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0CitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfZmlsZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfZmlsZSIgPiY2CisKKyMgQ2hlY2sgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgorIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICRFQ0hPX0MiID4mNgorIyBGSVhNRTogVGhlc2UgY3Jvc3MgY29tcGlsZXIgaGFja3Mgc2hvdWxkIGJlIHJlbW92ZWQgZm9yIEF1dG9jb25mIDMuMAorIyBJZiBub3QgY3Jvc3MgY29tcGlsaW5nLCBjaGVjayB0aGF0IHdlIGNhbiBydW4gYSBzaW1wbGUgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsgdGhlbgorICBpZiB7IGFjX3RyeT0nLi8kYWNfZmlsZScKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1ubworICBlbHNlCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorCWNyb3NzX2NvbXBpbGluZz15ZXMKKyAgICBlbHNlCisJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCitJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgZmkKKyAgZmkKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKworcm0gLWYgYS5vdXQgYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQorIyBDaGVjayB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nLi4uICRFQ0hPX0MiID4mNgorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1CitlY2hvICIke0VDSE9fVH0kY3Jvc3NfY29tcGlsaW5nIiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzLi4uICRFQ0hPX0MiID4mNgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICMgSWYgYm90aCBgY29uZnRlc3QuZXhlJyBhbmQgYGNvbmZ0ZXN0JyBhcmUgYHByZXNlbnQnICh3ZWxsLCBvYnNlcnZhYmxlKQorIyBjYXRjaCBgY29uZnRlc3QuZXhlJy4gIEZvciBpbnN0YW5jZSB3aXRoIEN5Z3dpbiwgYGxzIGNvbmZ0ZXN0JyB3aWxsCisjIHdvcmsgcHJvcGVybHkgKGkuZS4sIHJlZmVyIHRvIGBjb25mdGVzdC5leGUnKSwgd2hpbGUgaXQgd29uJ3Qgd2l0aAorIyBgcm0nLgorZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJICBleHBvcnQgYWNfY3ZfZXhlZXh0CisJICBicmVhazs7CisgICAgKiApIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworcm0gLWYgY29uZnRlc3QkYWNfY3ZfZXhlZXh0CitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9leGVleHQiID4mNgorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitFWEVFWFQ9JGFjX2N2X2V4ZWV4dAorYWNfZXhlZXh0PSRFWEVFWFQKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9vYmpleHQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgZm9yIGFjX2ZpbGUgaW4gYChscyBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iajsgbHMgY29uZnRlc3QuKikgMj4vZGV2L251bGxgOyBkbworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgKSA7OworICAgICopIGFjX2N2X29iamV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJy4qXC5cKC4qXCknYAorICAgICAgIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCit7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCitybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9vYmpleHQiID4mNgorT0JKRVhUPSRhY19jdl9vYmpleHQKK2FjX29iamV4dD0kT0JKRVhUCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisjaWZuZGVmIF9fR05VQ19fCisgICAgICAgY2hva2UgbWUKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjYKK0dDQz1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAorYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQorYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItZyIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3Byb2dfY2NfZz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfcHJvZ19jY19nPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2NfZyIgPiY2CitpZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCisgIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgQ0ZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPQorICBmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgQU5TSSBDIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19zdGRjK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X3Byb2dfY2Nfc3RkYz1ubworYWNfc2F2ZV9DQz0kQ0MKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKy8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KK3N0cnVjdCBidWYgeyBpbnQgeDsgfTsKK0ZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7CitzdGF0aWMgY2hhciAqZSAocCwgaSkKKyAgICAgY2hhciAqKnA7CisgICAgIGludCBpOworeworICByZXR1cm4gcFtpXTsKK30KK3N0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKK3sKKyAgY2hhciAqczsKKyAgdmFfbGlzdCB2OworICB2YV9zdGFydCAodixwKTsKKyAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKKyAgdmFfZW5kICh2KTsKKyAgcmV0dXJuIHM7Cit9CisKKy8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCisgICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCisgICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKKyAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZDEgaXMgYWRkZWQgdG8gZ2V0CisgICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCisgICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKKyAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkMS4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworCitpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKK3N0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Oworc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CitpbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKK2ludCBhcmdjOworY2hhciAqKmFyZ3Y7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorIyBEb24ndCB0cnkgZ2NjIC1hbnNpOyB0aGF0IHR1cm5zIG9mZiB1c2VmdWwgZXh0ZW5zaW9ucyBhbmQKKyMgYnJlYWtzIHNvbWUgc3lzdGVtcycgaGVhZGVyIGZpbGVzLgorIyBBSVgJCQktcWxhbmdsdmw9YW5zaQorIyBVbHRyaXggYW5kIE9TRi8xCS1zdGQxCisjIEhQLVVYIDEwLjIwIGFuZCBsYXRlcgktQWUKKyMgSFAtVVggb2xkZXIgdmVyc2lvbnMJLUFhIC1EX0hQVVhfU09VUkNFCisjIFNWUjQJCQktWGMgLURfX0VYVEVOU0lPTlNfXworZm9yIGFjX2FyZyBpbiAiIiAtcWxhbmdsdmw9YW5zaSAtc3RkMSAtQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZG8KKyAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19hcmcKK2JyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorZG9uZQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorCitjYXNlICJ4JGFjX2N2X3Byb2dfY2Nfc3RkYyIgaW4KKyAgeHx4bm8pCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNiA7OworICAqKQorICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY2CisgICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19zdGRjIiA7OworZXNhYworCisjIFNvbWUgcGVvcGxlIHVzZSBhIEMrKyBjb21waWxlciB0byBjb21waWxlIEMuICBTaW5jZSB3ZSB1c2UgYGV4aXQnLAorIyBpbiBDKysgd2UgbmVlZCB0byBkZWNsYXJlIGl0LiAgSW4gY2FzZSBzb21lb25lIHVzZXMgdGhlIHNhbWUgY29tcGlsZXIKKyMgZm9yIGJvdGggY29tcGlsaW5nIEMgYW5kIEMrKyB3ZSBuZWVkIHRvIGhhdmUgdGhlIEMrKyBjb21waWxlciBkZWNpZGUKKyMgdGhlIGRlY2xhcmF0aW9uIG9mIGV4aXQsIHNpbmNlIGl0J3MgdGhlIG1vc3QgZGVtYW5kaW5nIGVudmlyb25tZW50LgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjaWZuZGVmIF9fY3BsdXNwbHVzCisgIGNob2tlIG1lCisjZW5kaWYKK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBmb3IgYWNfZGVjbGFyYXRpb24gaW4gXAorICAgJycgXAorICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCkgdGhyb3cgKCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKKyAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCisgICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCkgdGhyb3cgKCk7JyBcCisgICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7JyBcCisgICAndm9pZCBleGl0IChpbnQpOycKK2RvCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2RlY2xhcmF0aW9uCisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKK2V4aXQgKDQyKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19kZWNsYXJhdGlvbgoraW50CittYWluICgpCit7CitleGl0ICg0Mik7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0KgoraWYgdGVzdCAtbiAiJGFjX2RlY2xhcmF0aW9uIjsgdGhlbgorICBlY2hvICcjaWZkZWYgX19jcGx1c3BsdXMnID4+Y29uZmRlZnMuaAorICBlY2hvICRhY19kZWNsYXJhdGlvbiAgICAgID4+Y29uZmRlZnMuaAorICBlY2hvICcjZW5kaWYnICAgICAgICAgICAgID4+Y29uZmRlZnMuaAorZmkKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gJEVDSE9fQyIgPiY2CitzZXQgZHVtbXkgJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3ksOi4vKy0sX19fcF8sJ2AKK2lmIGV2YWwgInRlc3QgXCJcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0Lm1ha2UgPDxcX0FDRU9GCithbGw6CisJQGVjaG8gJ2FjX21ha2V0ZW1wPSIkKE1BS0UpIicKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitldmFsIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbCB8IGdyZXAgdGVtcD1gCitpZiB0ZXN0IC1uICIkYWNfbWFrZXRlbXAiOyB0aGVuCisgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllcworZWxzZQorICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9wcm9nX21ha2VfJyR7YWNfbWFrZX1fc2V0YFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKyAgU0VUX01BS0U9CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgorZmkKKworCitpZiB0ZXN0IC16ICIkTEQiIDsgdGhlbgorCUxEPSRDQworZmkKKworCitpZiB0ZXN0IC16ICIkT0xEQ0ZMQUdTIiAmJiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiOyB0aGVuCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogTm8gXCRDRkxBR1Mgc2V0Li4uIHVzaW5nIFwiLU9zIC1XIC1XYWxsXCIgZm9yIEdDQyIgPiY1CitlY2hvICIkYXNfbWU6IE5vIFwkQ0ZMQUdTIHNldC4uLiB1c2luZyBcIi1PcyAtVyAtV2FsbFwiIGZvciBHQ0MiID4mNjt9CisJQ0ZMQUdTPSItT3MgLVcgLVdhbGwiCitmaQorCisjIGxhcmdlIGZpbGUgc3VwcG9ydCBpcyB1c2VmdWwgZm9yIHNjcAorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGFyZ2VmaWxlIG9yIC0tZGlzYWJsZS1sYXJnZWZpbGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGFyZ2VmaWxlK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9sYXJnZWZpbGUiCisKK2ZpOworaWYgdGVzdCAiJGVuYWJsZV9sYXJnZWZpbGUiICE9IG5vOyB0aGVuCisKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9ucyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNwZWNpYWwgQyBjb21waWxlciBvcHRpb25zIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3N5c19sYXJnZWZpbGVfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQz1ubworICAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgICBhY19zYXZlX0NDPSRDQworICAgICAgIHdoaWxlIDo7IGRvCisgICAgIAkgIyBJUklYIDYuMiBhbmQgbGF0ZXIgZG8gbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMgYnkgZGVmYXVsdCwKKyAgICAgCSAjIHNvIHVzZSB0aGUgQyBjb21waWxlcidzIC1uMzIgb3B0aW9uIGlmIHRoYXQgaGVscHMuCisJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKKyAgICAgCSBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICAgICAJIENDPSIkQ0MgLW4zMiIKKyAgICAgCSBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0M9JyAtbjMyJzsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisJIGJyZWFrCisgICAgICAgZG9uZQorICAgICAgIENDPSRhY19zYXZlX0NDCisgICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiID4mNgorICBpZiB0ZXN0ICIkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgIT0gbm87IHRoZW4KKyAgICBDQz0kQ0MkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQworICBmaQorCisgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICB3aGlsZSA6OyBkbworICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz1ubworICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyA2NAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9NjQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGJyZWFrCitkb25lCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgPiY2CitpZiB0ZXN0ICIkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMiICE9IG5vOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzCitfQUNFT0YKKworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIF9MQVJHRV9GSUxFUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIF9MQVJHRV9GSUxFUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zeXNfbGFyZ2VfZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgd2hpbGUgOjsgZG8KKyAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPW5vCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2VudCAyKio2MyAtIDEgY29ycmVjdGx5LgorICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKKyAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCisgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLworI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQorCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09IDEpCisJCSAgICAgID8gMSA6IC0xXTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjZGVmaW5lIF9MQVJHRV9GSUxFUyAxCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zeXNfbGFyZ2VfZmlsZXM9MTsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgYnJlYWsKK2RvbmUKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiID4mNgoraWYgdGVzdCAiJGFjX2N2X3N5c19sYXJnZV9maWxlcyIgIT0gbm87IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBfTEFSR0VfRklMRVMgJGFjX2N2X3N5c19sYXJnZV9maWxlcworX0FDRU9GCisKK2ZpCitybSAtZiBjb25mdGVzdCoKK2ZpCisKKworIyBIb3N0IHNwZWNpZmljIG9wdGlvbnMKKyMgdGhpcyBpc24ndCBhIGRlZmluaXRpdmUgbGlzdCBvZiBob3N0cywgdGhleSBhcmUganVzdCBhZGRlZCBhcyByZXF1aXJlZAorYWNfYXV4X2Rpcj0KK2ZvciBhY19kaXIgaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi47IGRvCisgIGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLXNoOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLnNoOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9zaHRvb2w7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKyAgICBicmVhaworICBmaQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiAkc3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCithY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiCithY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIKK2FjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgIyBUaGlzIHNob3VsZCBiZSBDeWdudXMgY29uZmlndXJlLgorCisjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCiskYWNfY29uZmlnX3N1YiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRhY19jb25maWdfc3ViIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gJGFjX2NvbmZpZ19zdWIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2J1aWxkK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwordGVzdCAteiAiJGFjX2N2X2J1aWxkX2FsaWFzIiAmJgorICBhY19jdl9idWlsZF9hbGlhcz1gJGFjX2NvbmZpZ19ndWVzc2AKK3Rlc3QgLXogIiRhY19jdl9idWlsZF9hbGlhcyIgJiYKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorYWNfY3ZfYnVpbGQ9YCRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhc2AgfHwKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2J1aWxkX2FsaWFzIGZhaWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXMgZmFpbGVkIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2J1aWxkIiA+JjYKK2J1aWxkPSRhY19jdl9idWlsZAorYnVpbGRfY3B1PWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitidWlsZF92ZW5kb3I9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2J1aWxkX29zPWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9ob3N0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKK3Rlc3QgLXogIiRhY19jdl9ob3N0X2FsaWFzIiAmJgorICBhY19jdl9ob3N0X2FsaWFzPSRhY19jdl9idWlsZF9hbGlhcworYWNfY3ZfaG9zdD1gJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2hvc3RfYWxpYXNgIHx8CisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9ob3N0X2FsaWFzIGZhaWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfaG9zdF9hbGlhcyBmYWlsZWQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9ob3N0IiA+JjYKK2hvc3Q9JGFjX2N2X2hvc3QKK2hvc3RfY3B1PWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKK2hvc3RfdmVuZG9yPWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2hvc3Rfb3M9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorCisKKworY2FzZSAiJGhvc3QiIGluCisKKyotKi1saW51eCopCisJbm9fcHRteF9jaGVjaz0xCisJOzsKKworKi0qLXNvbGFyaXMqKQorCUNGTEFHUz0iJENGTEFHUyAtSS91c3IvbG9jYWwvaW5jbHVkZSIKKwlMREZMQUdTPSIkTERGTEFHUyAtTC91c3IvbG9jYWwvbGliIC1SL3Vzci9sb2NhbC9saWIiCisJY29uZl9sYXN0bG9nX2xvY2F0aW9uPSIvdmFyL2FkbS9sYXN0bG9nIgorCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igb2Jzb2xldGUgdXRtcCBhbmQgd3RtcCBpbiBzb2xhcmlzMi54IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9ic29sZXRlIHV0bXAgYW5kIHd0bXAgaW4gc29sYXJpczIueC4uLiAkRUNIT19DIiA+JjYKKwlzb2wydmVyPWBlY2hvICIkaG9zdCJ8IHNlZCAtZSAncy8uKlswLTldXC4vLydgCisJaWYgdGVzdCAiJHNvbDJ2ZXIiIC1nZSA4OyB0aGVuCisJCWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBESVNBQkxFX1VUTVAKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIERJU0FCTEVfV1RNUAorX0FDRU9GCisKKwllbHNlCisJCWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwlmaQorCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc29ja2V0IGluIC1sc29ja2V0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNvY2tldCBpbiAtbHNvY2tldC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbGliX3NvY2tldF9zb2NrZXQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzb2NrZXQgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgc29ja2V0ICgpOworaW50CittYWluICgpCit7Citzb2NrZXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X2xpYl9zb2NrZXRfc29ja2V0PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3NvY2tldF9zb2NrZXQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0IiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9zb2NrZXRfc29ja2V0ID0geWVzOyB0aGVuCisgIExJQlM9IiRMSUJTIC1sc29ja2V0IgorZmkKKworCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgeXBfbWF0Y2ggaW4gLWxuc2wiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgeXBfbWF0Y2ggaW4gLWxuc2wuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9uc2xfeXBfbWF0Y2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxuc2wgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgeXBfbWF0Y2ggKCk7CitpbnQKK21haW4gKCkKK3sKK3lwX21hdGNoICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9uc2xfeXBfbWF0Y2g9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X2xpYl9uc2xfeXBfbWF0Y2g9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfbnNsX3lwX21hdGNoIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfbnNsX3lwX21hdGNoIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9uc2xfeXBfbWF0Y2ggPSB5ZXM7IHRoZW4KKyAgTElCUz0iJExJQlMgLWxuc2wiCitmaQorCisJOzsKKworKi0qLWFpeCopCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEFJWAorX0FDRU9GCisKKwkjIE9wZW5TU0ggdGhpbmtzIGl0J3MgYnJva2VuLiBJZiBpdCBpc24ndCwgbGV0IG1lIGtub3cuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEJST0tFTl9HRVRBRERSSU5GTworX0FDRU9GCisKKwk7OworCisqLSotaHB1eCopCisJTElCUz0iJExJQlMgLWxzZWMiCisJIyBJdCdzIHByb2JhYmx5IGJyb2tlbi4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgQlJPS0VOX0dFVEFERFJJTkZPCitfQUNFT0YKKworCTs7CisqLWRlYy1vc2YqKQorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBCUk9LRU5fR0VUQUREUklORk8KK19BQ0VPRgorCisJOzsKK2VzYWMKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFSIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRBUiIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KKyAgYWNfY3RfQVI9JEFSCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX2N0X0FSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9BUiIgJiYgYWNfY3ZfcHJvZ19hY19jdF9BUj0iOiIKK2ZpCitmaQorYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKK2lmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9BUiIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgQVI9JGFjX2N0X0FSCitlbHNlCisgIEFSPSIkYWNfY3ZfcHJvZ19BUiIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19SQU5MSUI9IiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKK2ZpCitmaQorUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgoraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFJBTkxJQiIgPiY1CitlY2hvICIke0VDSE9fVH0kUkFOTElCIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKyAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCIiAmJiBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iOiIKK2ZpCitmaQorYWNfY3RfUkFOTElCPSRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQgoraWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfUkFOTElCIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICBSQU5MSUI9JGFjX2N0X1JBTkxJQgorZWxzZQorICBSQU5MSUI9IiRhY19jdl9wcm9nX1JBTkxJQiIKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX1NUUklQK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTVFJJUCIgPiY1CitlY2hvICIke0VDSE9fVH0kU1RSSVAiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAiICYmIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IjoiCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfU1RSSVAiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIFNUUklQPSRhY19jdF9TVFJJUAorZWxzZQorICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCitmaQorCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1pbnN0YWxsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWluc3RhbGw7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfSU5TVEFMTCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkSU5TVEFMTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19JTlNUQUxMPSIkSU5TVEFMTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfSU5TVEFMTD0iJHthY190b29sX3ByZWZpeH1pbnN0YWxsIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKK2ZpCitmaQorSU5TVEFMTD0kYWNfY3ZfcHJvZ19JTlNUQUxMCitpZiB0ZXN0IC1uICIkSU5TVEFMTCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJElOU1RBTEwiID4mNQorZWNobyAiJHtFQ0hPX1R9JElOU1RBTEwiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfSU5TVEFMTCI7IHRoZW4KKyAgYWNfY3RfSU5TVEFMTD0kSU5TVEFMTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImluc3RhbGwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGluc3RhbGw7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfSU5TVEFMTCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfSU5TVEFMTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9JTlNUQUxMPSIkYWNfY3RfSU5TVEFMTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfSU5TVEFMTD0iaW5zdGFsbCIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X0lOU1RBTEwiICYmIGFjX2N2X3Byb2dfYWNfY3RfSU5TVEFMTD0iOiIKK2ZpCitmaQorYWNfY3RfSU5TVEFMTD0kYWNfY3ZfcHJvZ19hY19jdF9JTlNUQUxMCitpZiB0ZXN0IC1uICIkYWNfY3RfSU5TVEFMTCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0lOU1RBTEwiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0lOU1RBTEwiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIElOU1RBTEw9JGFjX2N0X0lOU1RBTEwKK2Vsc2UKKyAgSU5TVEFMTD0iJGFjX2N2X3Byb2dfSU5TVEFMTCIKK2ZpCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2CisjIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgoraWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KKyAgQ1BQPQorZmkKK2lmIHRlc3QgLXogIiRDUFAiOyB0aGVuCisgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DUFArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuCisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKKworZmkKKyAgQ1BQPSRhY19jdl9wcm9nX0NQUAorZWxzZQorICBhY19jdl9wcm9nX0NQUD0kQ1BQCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENQUCIgPiY1CitlY2hvICIke0VDSE9fVH0kQ1BQIiA+JjYKK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCQkgICAgIFN5bnRheCBlcnJvcgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuCisgIDoKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19lZ3JlcCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiBlY2hvIGEgfCAoZ3JlcCAtRSAnKGF8YiknKSA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuIGFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCisgICAgZWxzZSBhY19jdl9wcm9nX2VncmVwPSdlZ3JlcCcKKyAgICBmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2VncmVwIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2VncmVwIiA+JjYKKyBFR1JFUD0kYWNfY3ZfcHJvZ19lZ3JlcAorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgOgorZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgOgorZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwKKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICBleGl0KDIpOworICBleGl0ICgwKTsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK2FjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNgoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKK19BQ0VPRgorCitmaQorCisjIE9uIElSSVggNS4zLCBzeXMvdHlwZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgorCisKKworCisKKworCisKKworZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCisJCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAorZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2CitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2V2YWwgIiRhc19hY19IZWFkZXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgX19VQ0xJQkNfXyBpcyBkZWNsYXJlZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgX19VQ0xJQkNfXyBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX19fVUNMSUJDX18rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisjaWZuZGVmIF9fVUNMSUJDX18KKyAgY2hhciAqcCA9IChjaGFyICopIF9fVUNMSUJDX187CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2hhdmVfZGVjbF9fX1VDTElCQ19fPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9oYXZlX2RlY2xfX19VQ0xJQkNfXz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX19fVUNMSUJDX18iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfZGVjbF9fX1VDTElCQ19fIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9fX1VDTElCQ19fID0geWVzOyB0aGVuCisKKwlub19sb2dpbmZ1bmNfY2hlY2s9MQorCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFVzaW5nIHVDbGliYyAtIGxvZ2luKCkgYW5kIGxvZ291dCgpIHByb2JhYmx5IGRvbid0IHdvcmssIHNvIHdlIHdvbid0IHVzZSB0aGVtLiIgPiY1CitlY2hvICIkYXNfbWU6IFVzaW5nIHVDbGliYyAtIGxvZ2luKCkgYW5kIGxvZ291dCgpIHByb2JhYmx5IGRvbid0IHdvcmssIHNvIHdlIHdvbid0IHVzZSB0aGVtLiIgPiY2O30KKworZmkKKworCisjIENoZWNrcyBmb3IgbGlicmFyaWVzLgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBjcnlwdCBpbiAtbGNyeXB0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGNyeXB0IGluIC1sY3J5cHQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9jcnlwdF9jcnlwdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGNyeXB0ICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGNyeXB0ICgpOworaW50CittYWluICgpCit7CitjcnlwdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfY3J5cHRfY3J5cHQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X2xpYl9jcnlwdF9jcnlwdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9jcnlwdF9jcnlwdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2NyeXB0X2NyeXB0IiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9jcnlwdF9jcnlwdCA9IHllczsgdGhlbgorICBMSUJTPSIkTElCUyAtbGNyeXB0IgorZmkKKworCisjIENoZWNrIGlmIHpsaWIgaXMgbmVlZGVkCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtemxpYiBvciAtLXdpdGhvdXQtemxpYiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfemxpYitzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF96bGliIgorCisJCSMgb3B0aW9uIGlzIGdpdmVuCisJCWlmIHRlc3QgLWQgIiR3aXRodmFsL2xpYiI7IHRoZW4KKwkJCUxERkxBR1M9Ii1MJHt3aXRodmFsfS9saWIgJHtMREZMQUdTfSIKKwkJZWxzZQorCQkJTERGTEFHUz0iLUwke3dpdGh2YWx9ICR7TERGTEFHU30iCisJCWZpCisJCWlmIHRlc3QgLWQgIiR3aXRodmFsL2luY2x1ZGUiOyB0aGVuCisJCQlDUFBGTEFHUz0iLUkke3dpdGh2YWx9L2luY2x1ZGUgJHtDUFBGTEFHU30iCisJCWVsc2UKKwkJCUNQUEZMQUdTPSItSSR7d2l0aHZhbH0gJHtDUFBGTEFHU30iCisJCWZpCisKKworZmk7CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS16bGliIG9yIC0tZGlzYWJsZS16bGliIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3psaWIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3psaWIiCisKKwkJaWYgdGVzdCAieCRlbmFibGV2YWwiID0gInhubyI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgRElTQUJMRV9aTElCCitfQUNFT0YKKworCQkJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogRGlzYWJsaW5nIHpsaWIiID4mNQorZWNobyAiJGFzX21lOiBEaXNhYmxpbmcgemxpYiIgPiY2O30KKwkJZWxzZQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRlZmxhdGUgaW4gLWx6IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRlZmxhdGUgaW4gLWx6Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfel9kZWZsYXRlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1seiAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBkZWZsYXRlICgpOworaW50CittYWluICgpCit7CitkZWZsYXRlICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl96X2RlZmxhdGU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X2xpYl96X2RlZmxhdGU9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfel9kZWZsYXRlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfel9kZWZsYXRlIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl96X2RlZmxhdGUgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQlogMQorX0FDRU9GCisKKyAgTElCUz0iLWx6ICRMSUJTIgorCitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICoqKiB6bGliIG1pc3NpbmcgLSBpbnN0YWxsIGZpcnN0IG9yIGNoZWNrIGNvbmZpZy5sb2cgKioqIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6ICoqKiB6bGliIG1pc3NpbmcgLSBpbnN0YWxsIGZpcnN0IG9yIGNoZWNrIGNvbmZpZy5sb2cgKioqIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCisJCQl7IGVjaG8gIiRhc19tZTokTElORU5POiBFbmFibGluZyB6bGliIiA+JjUKK2VjaG8gIiRhc19tZTogRW5hYmxpbmcgemxpYiIgPiY2O30KKwkJZmkKKworZWxzZQorCisJCSMgaWYgbm90IGRpc2FibGVkLCBjaGVjayBmb3IgemxpYgorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRlZmxhdGUgaW4gLWx6IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRlZmxhdGUgaW4gLWx6Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfel9kZWZsYXRlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1seiAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBkZWZsYXRlICgpOworaW50CittYWluICgpCit7CitkZWZsYXRlICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl96X2RlZmxhdGU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X2xpYl96X2RlZmxhdGU9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfel9kZWZsYXRlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfel9kZWZsYXRlIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl96X2RlZmxhdGUgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0xJQlogMQorX0FDRU9GCisKKyAgTElCUz0iLWx6ICRMSUJTIgorCitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICoqKiB6bGliIG1pc3NpbmcgLSBpbnN0YWxsIGZpcnN0IG9yIGNoZWNrIGNvbmZpZy5sb2cgKioqIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6ICoqKiB6bGliIG1pc3NpbmcgLSBpbnN0YWxsIGZpcnN0IG9yIGNoZWNrIGNvbmZpZy5sb2cgKioqIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCisJCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IEVuYWJsaW5nIHpsaWIiID4mNQorZWNobyAiJGFzX21lOiBFbmFibGluZyB6bGliIiA+JjY7fQorCisKK2ZpOworCisjIENoZWNrIGlmIHBhbSBpcyBuZWVkZWQKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wYW0gb3IgLS13aXRob3V0LXBhbSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcGFtK3NldH0iID0gc2V0OyB0aGVuCisgIHdpdGh2YWw9IiR3aXRoX3BhbSIKKworCQkjIG9wdGlvbiBpcyBnaXZlbgorCQlpZiB0ZXN0IC1kICIkd2l0aHZhbC9saWIiOyB0aGVuCisJCQlMREZMQUdTPSItTCR7d2l0aHZhbH0vbGliICR7TERGTEFHU30iCisJCWVsc2UKKwkJCUxERkxBR1M9Ii1MJHt3aXRodmFsfSAke0xERkxBR1N9IgorCQlmaQorCQlpZiB0ZXN0IC1kICIkd2l0aHZhbC9pbmNsdWRlIjsgdGhlbgorCQkJQ1BQRkxBR1M9Ii1JJHt3aXRodmFsfS9pbmNsdWRlICR7Q1BQRkxBR1N9IgorCQllbHNlCisJCQlDUFBGTEFHUz0iLUkke3dpdGh2YWx9ICR7Q1BQRkxBR1N9IgorCQlmaQorCisKK2ZpOworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wYW0gb3IgLS1kaXNhYmxlLXBhbSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wYW0rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3BhbSIKKworCQlpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgPSAieHllcyI7IHRoZW4KKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwYW1fYXV0aGVudGljYXRlIGluIC1scGFtIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHBhbV9hdXRoZW50aWNhdGUgaW4gLWxwYW0uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9wYW1fcGFtX2F1dGhlbnRpY2F0ZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHBhbSAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBwYW1fYXV0aGVudGljYXRlICgpOworaW50CittYWluICgpCit7CitwYW1fYXV0aGVudGljYXRlICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9wYW1fcGFtX2F1dGhlbnRpY2F0ZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfbGliX3BhbV9wYW1fYXV0aGVudGljYXRlPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3BhbV9wYW1fYXV0aGVudGljYXRlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfcGFtX3BhbV9hdXRoZW50aWNhdGUiID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX3BhbV9wYW1fYXV0aGVudGljYXRlID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJQQU0gMQorX0FDRU9GCisKKyAgTElCUz0iLWxwYW0gJExJQlMiCisKK2Vsc2UKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogKioqIFBBTSBtaXNzaW5nIC0gaW5zdGFsbCBmaXJzdCBvciBjaGVjayBjb25maWcubG9nICoqKiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAqKiogUEFNIG1pc3NpbmcgLSBpbnN0YWxsIGZpcnN0IG9yIGNoZWNrIGNvbmZpZy5sb2cgKioqIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCisJCQl7IGVjaG8gIiRhc19tZTokTElORU5POiBFbmFibGluZyBQQU0iID4mNQorZWNobyAiJGFzX21lOiBFbmFibGluZyBQQU0iID4mNjt9CisJCWVsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgRElTQUJMRV9QQU0KK19BQ0VPRgorCisJCQl7IGVjaG8gIiRhc19tZTokTElORU5POiBEaXNhYmxpbmcgUEFNIiA+JjUKK2VjaG8gIiRhc19tZTogRGlzYWJsaW5nIFBBTSIgPiY2O30KKwkJZmkKKworZWxzZQorCisJCSMgZGlzYWJsZSBpdCBieSBkZWZhdWx0CisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIERJU0FCTEVfUEFNCitfQUNFT0YKKworCQl7IGVjaG8gIiRhc19tZTokTElORU5POiBEaXNhYmxpbmcgUEFNIiA+JjUKK2VjaG8gIiRhc19tZTogRGlzYWJsaW5nIFBBTSIgPiY2O30KKworCitmaTsKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9wZW5wdHkgb3IgLS1kaXNhYmxlLW9wZW5wdHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfb3BlbnB0eStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfb3BlbnB0eSIKKworCQlpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgPSAieG5vIjsgdGhlbgorCQkJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogTm90IHVzaW5nIG9wZW5wdHkiID4mNQorZWNobyAiJGFzX21lOiBOb3QgdXNpbmcgb3BlbnB0eSIgPiY2O30KKwkJZWxzZQorCQkJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogVXNpbmcgb3BlbnB0eSBpZiBhdmFpbGFibGUiID4mNQorZWNobyAiJGFzX21lOiBVc2luZyBvcGVucHR5IGlmIGF2YWlsYWJsZSIgPiY2O30KKwkJCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5wdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5wdHkuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9vcGVucHR5K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworYWNfY3Zfc2VhcmNoX29wZW5wdHk9bm8KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIG9wZW5wdHkgKCk7CitpbnQKK21haW4gKCkKK3sKK29wZW5wdHkgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc2VhcmNoX29wZW5wdHk9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoraWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVucHR5IiA9IG5vOyB0aGVuCisgIGZvciBhY19saWIgaW4gdXRpbDsgZG8KKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgb3BlbnB0eSAoKTsKK2ludAorbWFpbiAoKQoreworb3BlbnB0eSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zZWFyY2hfb3BlbnB0eT0iLWwkYWNfbGliIgorYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2ZpCitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX29wZW5wdHkiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NlYXJjaF9vcGVucHR5IiA+JjYKK2lmIHRlc3QgIiRhY19jdl9zZWFyY2hfb3BlbnB0eSIgIT0gbm87IHRoZW4KKyAgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVucHR5IiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfY3Zfc2VhcmNoX29wZW5wdHkgJExJQlMiCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfT1BFTlBUWQorX0FDRU9GCisKK2ZpCisKKwkJZmkKKworZWxzZQorCisJCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFVzaW5nIG9wZW5wdHkgaWYgYXZhaWxhYmxlIiA+JjUKK2VjaG8gIiRhc19tZTogVXNpbmcgb3BlbnB0eSBpZiBhdmFpbGFibGUiID4mNjt9CisJCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5wdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5wdHkuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9vcGVucHR5K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworYWNfY3Zfc2VhcmNoX29wZW5wdHk9bm8KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIG9wZW5wdHkgKCk7CitpbnQKK21haW4gKCkKK3sKK29wZW5wdHkgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc2VhcmNoX29wZW5wdHk9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoraWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVucHR5IiA9IG5vOyB0aGVuCisgIGZvciBhY19saWIgaW4gdXRpbDsgZG8KKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgb3BlbnB0eSAoKTsKK2ludAorbWFpbiAoKQoreworb3BlbnB0eSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zZWFyY2hfb3BlbnB0eT0iLWwkYWNfbGliIgorYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2ZpCitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX29wZW5wdHkiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NlYXJjaF9vcGVucHR5IiA+JjYKK2lmIHRlc3QgIiRhY19jdl9zZWFyY2hfb3BlbnB0eSIgIT0gbm87IHRoZW4KKyAgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVucHR5IiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfY3Zfc2VhcmNoX29wZW5wdHkgJExJQlMiCisgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfT1BFTlBUWSAxCitfQUNFT0YKKworZmkKKworCisKK2ZpOworCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zeXNsb2cgb3IgLS1kaXNhYmxlLXN5c2xvZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zeXNsb2crc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3N5c2xvZyIKKworCQlpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgPSAieG5vIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBESVNBQkxFX1NZU0xPRworX0FDRU9GCisKKwkJCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IERpc2FibGluZyBzeXNsb2ciID4mNQorZWNobyAiJGFzX21lOiBEaXNhYmxpbmcgc3lzbG9nIiA+JjY7fQorCQllbHNlCisJCQl7IGVjaG8gIiRhc19tZTokTElORU5POiBFbmFibGluZyBzeXNsb2ciID4mNQorZWNobyAiJGFzX21lOiBFbmFibGluZyBzeXNsb2ciID4mNjt9CisJCWZpCisKK2Vsc2UKKworCQl7IGVjaG8gIiRhc19tZTokTElORU5POiBFbmFibGluZyBzeXNsb2ciID4mNQorZWNobyAiJGFzX21lOiBFbmFibGluZyBzeXNsb2ciID4mNjt9CisKKworZmk7CisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFkb3cgb3IgLS1kaXNhYmxlLXNoYWRvdyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaGFkb3crc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3NoYWRvdyIKKworCQlpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgPSAieG5vIjsgdGhlbgorCQkJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogTm90IHVzaW5nIHNoYWRvdyBwYXNzd29yZHMiID4mNQorZWNobyAiJGFzX21lOiBOb3QgdXNpbmcgc2hhZG93IHBhc3N3b3JkcyIgPiY2O30KKwkJZWxzZQorCitmb3IgYWNfaGVhZGVyIGluIHNoYWRvdy5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisgIHllczpubzogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgIDs7CisgIG5vOnllczoqICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICgKKyAgICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVwb3J0IHRoaXMgdG8gdGhlIEFDX1BBQ0tBR0VfTkFNRSBsaXN0cy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICkgfAorICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorCitmaQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCQkJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogVXNpbmcgc2hhZG93IHBhc3N3b3JkcyBpZiBhdmFpbGFibGUiID4mNQorZWNobyAiJGFzX21lOiBVc2luZyBzaGFkb3cgcGFzc3dvcmRzIGlmIGF2YWlsYWJsZSIgPiY2O30KKwkJZmkKKworZWxzZQorCisKK2ZvciBhY19oZWFkZXIgaW4gc2hhZG93LmgKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2CitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgKAorICAgICAgY2F0IDw8XF9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byB0aGUgQUNfUEFDS0FHRV9OQU1FIGxpc3RzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTQk9YCisgICAgKSB8CisgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKyAgICA7OworZXNhYworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2CitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CisKK2ZpCitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisJCXsgZWNobyAiJGFzX21lOiRMSU5FTk86IFVzaW5nIHNoYWRvdyBwYXNzd29yZHMgaWYgYXZhaWxhYmxlIiA+JjUKK2VjaG8gIiRhc19tZTogVXNpbmcgc2hhZG93IHBhc3N3b3JkcyBpZiBhdmFpbGFibGUiID4mNjt9CisKKworZmk7CisKKworIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgOgorZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgOgorZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwKKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICBleGl0KDIpOworICBleGl0ICgwKTsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK2FjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNgoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKK19BQ0VPRgorCitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN5cy93YWl0LmggdGhhdCBpcyBQT1NJWC4xIGNvbXBhdGlibGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3lzL3dhaXQuaCB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N5c193YWl0X2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpZm5kZWYgV0VYSVRTVEFUVVMKKyMgZGVmaW5lIFdFWElUU1RBVFVTKHN0YXRfdmFsKSAoKHVuc2lnbmVkKShzdGF0X3ZhbCkgPj4gOCkKKyNlbmRpZgorI2lmbmRlZiBXSUZFWElURUQKKyMgZGVmaW5lIFdJRkVYSVRFRChzdGF0X3ZhbCkgKCgoc3RhdF92YWwpICYgMjU1KSA9PSAwKQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworICBpbnQgczsKKyAgd2FpdCAoJnMpOworICBzID0gV0lGRVhJVEVEIChzKSA/IFdFWElUU1RBVFVTIChzKSA6IDE7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfaGVhZGVyX3N5c193YWl0X2g9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X2hlYWRlcl9zeXNfd2FpdF9oPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3lzX3dhaXRfaCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N5c193YWl0X2giID4mNgoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c193YWl0X2ggPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IIDEKK19BQ0VPRgorCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworZm9yIGFjX2hlYWRlciBpbiBmY250bC5oIGxpbWl0cy5oIG5ldGluZXQvaW4uaCBuZXRpbmV0L3RjcC5oIHN0ZGxpYi5oIHN0cmluZy5oIHN5cy9zb2NrZXQuaCBzeXMvdGltZS5oIHRlcm1pb3MuaCB1bmlzdGQuaCBjcnlwdC5oIHB0eS5oIGlvY3RsLmggbGlidXRpbC5oIGxpYmdlbi5oIGludHR5cGVzLmggc3Ryb3B0cy5oIHV0bXAuaCB1dG1weC5oIGxhc3Rsb2cuaCBwYXRocy5oIHV0aWwuaCBuZXRkYi5oIHNlY3VyaXR5L3BhbV9hcHBsLmggcGFtL3BhbV9hcHBsLmggbmV0aW5ldC9pbl9zeXN0bS5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfaGVhZGVyX2NvbXBpbGVyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/CitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCisgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKKworIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/CitjYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCisgIHllczpubzogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworICAgIDs7CisgIG5vOnllczoqICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQorICAgICgKKyAgICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVwb3J0IHRoaXMgdG8gdGhlIEFDX1BBQ0tBR0VfTkFNRSBsaXN0cy4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICkgfAorICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorCitmaQoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9jX2NvbnN0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKy8qIEZJWE1FOiBJbmNsdWRlIHRoZSBjb21tZW50cyBzdWdnZXN0ZWQgYnkgUGF1bC4gKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyAgLyogVWx0cml4IG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgdHlwZWRlZiBpbnQgY2hhcnNldFsyXTsKKyAgY29uc3QgY2hhcnNldCB4OworICAvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLworICBjaGFyIGNvbnN0ICpjb25zdCAqY2NwOworICBjaGFyICoqcDsKKyAgLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgc3RydWN0IHBvaW50IHtpbnQgeCwgeTt9OworICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKyAgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgorICAgICBJdCBkb2VzIG5vdCBsZXQgeW91IHN1YnRyYWN0IG9uZSBjb25zdCBYKiBwb2ludGVyIGZyb20gYW5vdGhlciBpbgorICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CisgICAgIGV4cHJlc3Npb24gKi8KKyAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOworICBjY3AgPSAmZyArIChnID8gZy1nIDogMCk7CisgIC8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCisgICsrY2NwOworICBwID0gKGNoYXIqKikgY2NwOworICBjY3AgPSAoY2hhciBjb25zdCAqY29uc3QgKikgcDsKKyAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgICBjaGFyICp0OworICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CisKKyAgICAqdCsrID0gMDsKKyAgfQorICB7IC8qIFNvbWVvbmUgdGhpbmtzIHRoZSBTdW4gc3VwcG9zZWRseS1BTlNJIGNvbXBpbGVyIHdpbGwgcmVqZWN0IHRoaXMuICAqLworICAgIGludCB4W10gPSB7MjUsIDE3fTsKKyAgICBjb25zdCBpbnQgKmZvbyA9ICZ4WzBdOworICAgICsrZm9vOworICB9CisgIHsgLyogU3VuIFNDMS4wIEFOU0kgY29tcGlsZXIgcmVqZWN0cyB0aGlzIC0tIGJ1dCBub3QgdGhlIGFib3ZlLiAqLworICAgIHR5cGVkZWYgY29uc3QgaW50ICppcHRyOworICAgIGlwdHIgcCA9IDA7CisgICAgKytwOworICB9CisgIHsgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzIHNheWluZworICAgICAgICJrLmMiLCBsaW5lIDIuMjc6IDE1MDYtMDI1IChTKSBPcGVyYW5kIG11c3QgYmUgYSBtb2RpZmlhYmxlIGx2YWx1ZS4gKi8KKyAgICBzdHJ1Y3QgcyB7IGludCBqOyBjb25zdCBpbnQgKmFwWzNdOyB9OworICAgIHN0cnVjdCBzICpiOyBiLT5qID0gNTsKKyAgfQorICB7IC8qIFVMVFJJWC0zMiBWMy4xIChSZXYgOSkgdmNjIHJlamVjdHMgdGhpcyAqLworICAgIGNvbnN0IGludCBmb28gPSAxMDsKKyAgfQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9jX2NvbnN0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9jX2NvbnN0PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2NvbnN0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbnN0IiA+JjYKK2lmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBjb25zdAorX0FDRU9GCisKK2ZpCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWlkX3QgaW4gc3lzL3R5cGVzLmgiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWlkX3QgaW4gc3lzL3R5cGVzLmguLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWlkX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInVpZF90IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYWNfY3ZfdHlwZV91aWRfdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfdHlwZV91aWRfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdWlkX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdWlkX3QiID4mNgoraWYgdGVzdCAkYWNfY3ZfdHlwZV91aWRfdCA9IG5vOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIHVpZF90IGludAorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgZ2lkX3QgaW50CitfQUNFT0YKKworZmkKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtb2RlX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbW9kZV90Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX21vZGVfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgobW9kZV90ICopIDApCisgIHJldHVybiAwOworaWYgKHNpemVvZiAobW9kZV90KSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfdHlwZV9tb2RlX3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X3R5cGVfbW9kZV90PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX21vZGVfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9tb2RlX3QiID4mNgoraWYgdGVzdCAkYWNfY3ZfdHlwZV9tb2RlX3QgPSB5ZXM7IHRoZW4KKyAgOgorZWxzZQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIG1vZGVfdCBpbnQKK19BQ0VPRgorCitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHBpZF90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHBpZF90Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX3BpZF90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworaWYgKChwaWRfdCAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKHBpZF90KSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfdHlwZV9waWRfdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9waWRfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9waWRfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9waWRfdCIgPiY2CitpZiB0ZXN0ICRhY19jdl90eXBlX3BpZF90ID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBwaWRfdCBpbnQKK19BQ0VPRgorCitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNpemVfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaXplX3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfc2l6ZV90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworaWYgKChzaXplX3QgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChzaXplX3QpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX3NpemVfdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9zaXplX3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc2l6ZV90IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3NpemVfdCIgPiY2CitpZiB0ZXN0ICRhY19jdl90eXBlX3NpemVfdCA9IHllczsgdGhlbgorICA6CitlbHNlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgc2l6ZV90IHVuc2lnbmVkCitfQUNFT0YKKworZmkKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl90aW1lK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCitpbnQKK21haW4gKCkKK3sKK2lmICgoc3RydWN0IHRtICopIDApCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9oZWFkZXJfdGltZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfaGVhZGVyX3RpbWU9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90aW1lIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfdGltZSIgPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfdGltZSA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQorX0FDRU9GCisKK2ZpCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50MTZfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1aW50MTZfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50MTZfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgodWludDE2X3QgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mICh1aW50MTZfdCkpCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfdWludDE2X3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X3R5cGVfdWludDE2X3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdWludDE2X3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdWludDE2X3QiID4mNgoraWYgdGVzdCAkYWNfY3ZfdHlwZV91aW50MTZfdCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVUlOVDE2X1QgMQorX0FDRU9GCisKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdV9pbnQxNl90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVfaW50MTZfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV91X2ludDE2X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKHVfaW50MTZfdCAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKHVfaW50MTZfdCkpCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfdV9pbnQxNl90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX3VfaW50MTZfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91X2ludDE2X3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdV9pbnQxNl90IiA+JjYKK2lmIHRlc3QgJGFjX2N2X3R5cGVfdV9pbnQxNl90ID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9VX0lOVDE2X1QgMQorX0FDRU9GCisKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2Urc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopIDApCisgIHJldHVybiAwOworaWYgKHNpemVvZiAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlIiA+JjYKK2lmIHRlc3QgJGFjX2N2X3R5cGVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFIDEKK19BQ0VPRgorCisKK2ZpCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc29ja2xlbl90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNvY2tsZW5fdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9zb2NrbGVuX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworaW50CittYWluICgpCit7CitpZiAoKHNvY2tsZW5fdCAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKHNvY2tsZW5fdCkpCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfc29ja2xlbl90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX3NvY2tsZW5fdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zb2NrbGVuX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc29ja2xlbl90IiA+JjYKK2lmIHRlc3QgJGFjX2N2X3R5cGVfc29ja2xlbl90ID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKworCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc29ja2xlbl90IGVxdWl2YWxlbnQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc29ja2xlbl90IGVxdWl2YWxlbnQuLi4gJEVDSE9fQyIgPiY2CisJaWYgdGVzdCAiJHtjdXJsX2N2X3NvY2tsZW5fdF9lcXVpditzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJIyBTeXN0ZW1zIGhhdmUgZWl0aGVyICJzdHJ1Y3Qgc29ja2FkZHIgKiIgb3IKKwkjICJ2b2lkICoiIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gZ2V0cGVlcm5hbWUKKwljdXJsX2N2X3NvY2tsZW5fdF9lcXVpdj0KKwlmb3IgYXJnMiBpbiAic3RydWN0IHNvY2thZGRyIiB2b2lkOyBkbworCQlmb3IgdCBpbiBpbnQgc2l6ZV90IHVuc2lnbmVkIGxvbmcgInVuc2lnbmVkIGxvbmciOyBkbworCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworCQkJI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCQkJI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworCQkJaW50IGdldHBlZXJuYW1lIChpbnQsICRhcmcyICosICR0ICopOworCitpbnQKK21haW4gKCkKK3sKKworCQkJJHQgbGVuOworCQkJZ2V0cGVlcm5hbWUoMCwwLCZsZW4pOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworCQkJY3VybF9jdl9zb2NrbGVuX3RfZXF1aXY9IiR0IgorCQkJYnJlYWsKKworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCQlkb25lCisJZG9uZQorCisJaWYgdGVzdCAieCRjdXJsX2N2X3NvY2tsZW5fdF9lcXVpdiIgPSB4OyB0aGVuCisJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IENhbm5vdCBmaW5kIGEgdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Ygc29ja2xlbl90IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IENhbm5vdCBmaW5kIGEgdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Ygc29ja2xlbl90IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJZmkKKworZmkKKworCWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjdXJsX2N2X3NvY2tsZW5fdF9lcXVpdiIgPiY1CitlY2hvICIke0VDSE9fVH0kY3VybF9jdl9zb2NrbGVuX3RfZXF1aXYiID4mNgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIHNvY2tsZW5fdCAkY3VybF9jdl9zb2NrbGVuX3RfZXF1aXYKK19BQ0VPRgorCitmaQorCisKKyMgZm9yIHRoZSBmYWtlLXJmYzI1NTMgc3R1ZmYgLSBzdHJhaWdodCBmcm9tIE9wZW5TU0gKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKK2ludAorbWFpbiAoKQoreworIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHM7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgIGFjX2N2X2hhdmVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2U9InllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworIGFjX2N2X2hhdmVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2U9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UiID4mNgoraWYgdGVzdCAieCRhY19jdl9oYXZlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlIiA9ICJ4eWVzIiA7IHRoZW4KKwljYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFIDEKK19BQ0VPRgorCitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCBzb2NrYWRkcl9pbjYiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IHNvY2thZGRyX2luNi4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9zdHJ1Y3Rfc29ja2FkZHJfaW42K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworaW50CittYWluICgpCit7Cisgc3RydWN0IHNvY2thZGRyX2luNiBzOyBzLnNpbjZfZmFtaWx5ID0gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAgYWNfY3ZfaGF2ZV9zdHJ1Y3Rfc29ja2FkZHJfaW42PSJ5ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyBhY19jdl9oYXZlX3N0cnVjdF9zb2NrYWRkcl9pbjY9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfc3RydWN0X3NvY2thZGRyX2luNiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfaGF2ZV9zdHJ1Y3Rfc29ja2FkZHJfaW42IiA+JjYKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9zdHJ1Y3Rfc29ja2FkZHJfaW42IiA9ICJ4eWVzIiA7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42CitfQUNFT0YKKworZmkKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3QgaW42X2FkZHIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IGluNl9hZGRyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9oYXZlX3N0cnVjdF9pbjZfYWRkcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorCisJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisKK2ludAorbWFpbiAoKQoreworIHN0cnVjdCBpbjZfYWRkciBzOyBzLnM2X2FkZHJbMF0gPSAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgICBhY19jdl9oYXZlX3N0cnVjdF9pbjZfYWRkcj0ieWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgYWNfY3ZfaGF2ZV9zdHJ1Y3RfaW42X2FkZHI9Im5vIgorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfc3RydWN0X2luNl9hZGRyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX3N0cnVjdF9pbjZfYWRkciIgPiY2CitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfc3RydWN0X2luNl9hZGRyIiA9ICJ4eWVzIiA7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSU42X0FERFIKK19BQ0VPRgorCitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCBhZGRyaW5mbyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3QgYWRkcmluZm8uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2hhdmVfc3RydWN0X2FkZHJpbmZvK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCitpbnQKK21haW4gKCkKK3sKKyBzdHJ1Y3QgYWRkcmluZm8gczsgcy5haV9mbGFncyA9IEFJX1BBU1NJVkU7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgIGFjX2N2X2hhdmVfc3RydWN0X2FkZHJpbmZvPSJ5ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyBhY19jdl9oYXZlX3N0cnVjdF9hZGRyaW5mbz0ibm8iCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9zdHJ1Y3RfYWRkcmluZm8iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hhdmVfc3RydWN0X2FkZHJpbmZvIiA+JjYKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9zdHJ1Y3RfYWRkcmluZm8iID0gInh5ZXMiIDsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9BRERSSU5GTworX0FDRU9GCisKK2ZpCisKKworIyBJUklYIGhhcyBhIGNvbnN0IGNoYXIgcmV0dXJuIHZhbHVlIGZvciBnYWlfc3RyZXJyb3IoKQorCitmb3IgYWNfZnVuYyBpbiBnYWlfc3RyZXJyb3IKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCitjaG9rZSBtZQorI2Vsc2UKK2NoYXIgKCpmKSAoKSA9ICRhY19mdW5jOworI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmICE9ICRhY19mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCisJY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HQUlfU1RSRVJST1IgMQorX0FDRU9GCisKKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCitjb25zdCBjaGFyICpnYWlfc3RyZXJyb3IoaW50KTsKK2ludAorbWFpbiAoKQoreworCitjaGFyICpzdHI7CisKK3N0ciA9IGdhaV9zdHJlcnJvcigwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIEhBVkVfQ09OU1RfR0FJX1NUUkVSUk9SX1BST1RPIDEKK19BQ0VPRgorCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZG9uZQorCisKKyMgZm9yIGxvZ2lucmVjLmMKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3QgdXRtcC51dF9ob3N0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCB1dG1wLnV0X2hvc3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9ob3N0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9VVE1QX0gKKyNpbmNsdWRlIDx1dG1wLmg+CisjZW5kaWYKKworCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdXRtcCBhY19hZ2dyOworaWYgKGFjX2FnZ3IudXRfaG9zdCkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9ob3N0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfVVRNUF9ICisjaW5jbHVkZSA8dXRtcC5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHV0bXAgYWNfYWdncjsKK2lmIChzaXplb2YgYWNfYWdnci51dF9ob3N0KQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2hvc3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9ob3N0PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2hvc3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9ob3N0IiA+JjYKK2lmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9ob3N0ID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUF9VVF9IT1NUIDEKK19BQ0VPRgorCisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCB1dG1wLnV0X3BpZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3QgdXRtcC51dF9waWQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9waWQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX1VUTVBfSAorI2luY2x1ZGUgPHV0bXAuaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCB1dG1wIGFjX2FnZ3I7CitpZiAoYWNfYWdnci51dF9waWQpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfcGlkPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfVVRNUF9ICisjaW5jbHVkZSA8dXRtcC5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHV0bXAgYWNfYWdncjsKK2lmIChzaXplb2YgYWNfYWdnci51dF9waWQpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfcGlkPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfcGlkPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X3BpZCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X3BpZCIgPiY2CitpZiB0ZXN0ICRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfcGlkID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUF9VVF9QSUQgMQorX0FDRU9GCisKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RydWN0IHV0bXAudXRfdHlwZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3QgdXRtcC51dF90eXBlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdHlwZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfVVRNUF9ICisjaW5jbHVkZSA8dXRtcC5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHV0bXAgYWNfYWdncjsKK2lmIChhY19hZ2dyLnV0X3R5cGUpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdHlwZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX1VUTVBfSAorI2luY2x1ZGUgPHV0bXAuaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCB1dG1wIGFjX2FnZ3I7CitpZiAoc2l6ZW9mIGFjX2FnZ3IudXRfdHlwZSkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF90eXBlPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdHlwZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF90eXBlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdHlwZSIgPiY2CitpZiB0ZXN0ICRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdHlwZSA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBfVVRfVFlQRSAxCitfQUNFT0YKKworCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3QgdXRtcC51dF90diIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3QgdXRtcC51dF90di4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X3R2K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9VVE1QX0gKKyNpbmNsdWRlIDx1dG1wLmg+CisjZW5kaWYKKworCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdXRtcCBhY19hZ2dyOworaWYgKGFjX2FnZ3IudXRfdHYpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdHY9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9VVE1QX0gKKyNpbmNsdWRlIDx1dG1wLmg+CisjZW5kaWYKKworCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdXRtcCBhY19hZ2dyOworaWYgKHNpemVvZiBhY19hZ2dyLnV0X3R2KQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X3R2PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdHY9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdHYiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF90diIgPiY2CitpZiB0ZXN0ICRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdHYgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QX1VUX1RWIDEKK19BQ0VPRgorCisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCB1dG1wLnV0X2lkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCB1dG1wLnV0X2lkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfaWQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX1VUTVBfSAorI2luY2x1ZGUgPHV0bXAuaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCB1dG1wIGFjX2FnZ3I7CitpZiAoYWNfYWdnci51dF9pZCkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9pZD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX1VUTVBfSAorI2luY2x1ZGUgPHV0bXAuaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCB1dG1wIGFjX2FnZ3I7CitpZiAoc2l6ZW9mIGFjX2FnZ3IudXRfaWQpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfaWQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9pZD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9pZCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2lkIiA+JjYKK2lmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9pZCA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBfVVRfSUQgMQorX0FDRU9GCisKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RydWN0IHV0bXAudXRfYWRkciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3QgdXRtcC51dF9hZGRyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfYWRkcitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfVVRNUF9ICisjaW5jbHVkZSA8dXRtcC5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHV0bXAgYWNfYWdncjsKK2lmIChhY19hZ2dyLnV0X2FkZHIpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfYWRkcj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX1VUTVBfSAorI2luY2x1ZGUgPHV0bXAuaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCB1dG1wIGFjX2FnZ3I7CitpZiAoc2l6ZW9mIGFjX2FnZ3IudXRfYWRkcikKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9hZGRyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfYWRkcj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9hZGRyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfYWRkciIgPiY2CitpZiB0ZXN0ICRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfYWRkciA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBfVVRfQUREUiAxCitfQUNFT0YKKworCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3QgdXRtcC51dF9hZGRyX3Y2IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCB1dG1wLnV0X2FkZHJfdjYuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9hZGRyX3Y2K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9VVE1QX0gKKyNpbmNsdWRlIDx1dG1wLmg+CisjZW5kaWYKKworCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdXRtcCBhY19hZ2dyOworaWYgKGFjX2FnZ3IudXRfYWRkcl92NikKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9hZGRyX3Y2PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfVVRNUF9ICisjaW5jbHVkZSA8dXRtcC5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHV0bXAgYWNfYWdncjsKK2lmIChzaXplb2YgYWNfYWdnci51dF9hZGRyX3Y2KQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2FkZHJfdjY9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9hZGRyX3Y2PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2FkZHJfdjYiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9hZGRyX3Y2IiA+JjYKK2lmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9hZGRyX3Y2ID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUF9VVF9BRERSX1Y2IDEKK19BQ0VPRgorCisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCB1dG1wLnV0X2V4aXQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IHV0bXAudXRfZXhpdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2V4aXQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX1VUTVBfSAorI2luY2x1ZGUgPHV0bXAuaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCB1dG1wIGFjX2FnZ3I7CitpZiAoYWNfYWdnci51dF9leGl0KQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2V4aXQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9VVE1QX0gKKyNpbmNsdWRlIDx1dG1wLmg+CisjZW5kaWYKKworCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdXRtcCBhY19hZ2dyOworaWYgKHNpemVvZiBhY19hZ2dyLnV0X2V4aXQpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfZXhpdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2V4aXQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfZXhpdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2V4aXQiID4mNgoraWYgdGVzdCAkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2V4aXQgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QX1VUX0VYSVQgMQorX0FDRU9GCisKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RydWN0IHV0bXAudXRfdGltZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3QgdXRtcC51dF90aW1lLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdGltZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfVVRNUF9ICisjaW5jbHVkZSA8dXRtcC5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHV0bXAgYWNfYWdncjsKK2lmIChhY19hZ2dyLnV0X3RpbWUpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdGltZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX1VUTVBfSAorI2luY2x1ZGUgPHV0bXAuaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCB1dG1wIGFjX2FnZ3I7CitpZiAoc2l6ZW9mIGFjX2FnZ3IudXRfdGltZSkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF90aW1lPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdGltZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF90aW1lIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdGltZSIgPiY2CitpZiB0ZXN0ICRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdGltZSA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBfVVRfVElNRSAxCitfQUNFT0YKKworCitmaQorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RydWN0IHV0bXB4LnV0X2hvc3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IHV0bXB4LnV0X2hvc3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfaG9zdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpZiBIQVZFX1VUTVBYX0gKKyNpbmNsdWRlIDx1dG1weC5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHV0bXB4IGFjX2FnZ3I7CitpZiAoYWNfYWdnci51dF9ob3N0KQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9ob3N0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpZiBIQVZFX1VUTVBYX0gKKyNpbmNsdWRlIDx1dG1weC5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHV0bXB4IGFjX2FnZ3I7CitpZiAoc2l6ZW9mIGFjX2FnZ3IudXRfaG9zdCkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfaG9zdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9ob3N0PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9ob3N0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X2hvc3QiID4mNgoraWYgdGVzdCAkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9ob3N0ID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfSE9TVCAxCitfQUNFT0YKKworCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3QgdXRtcHgudXRfc3lzbGVuIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCB1dG1weC51dF9zeXNsZW4uLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfc3lzbGVuK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2lmIEhBVkVfVVRNUFhfSAorI2luY2x1ZGUgPHV0bXB4Lmg+CisjZW5kaWYKKworCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdXRtcHggYWNfYWdncjsKK2lmIChhY19hZ2dyLnV0X3N5c2xlbikKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfc3lzbGVuPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpZiBIQVZFX1VUTVBYX0gKKyNpbmNsdWRlIDx1dG1weC5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHV0bXB4IGFjX2FnZ3I7CitpZiAoc2l6ZW9mIGFjX2FnZ3IudXRfc3lzbGVuKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9zeXNsZW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfc3lzbGVuPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9zeXNsZW4iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfc3lzbGVuIiA+JjYKK2lmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfc3lzbGVuID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfU1lTTEVOIDEKK19BQ0VPRgorCisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCB1dG1weC51dF90eXBlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCB1dG1weC51dF90eXBlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X3R5cGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaWYgSEFWRV9VVE1QWF9ICisjaW5jbHVkZSA8dXRtcHguaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCB1dG1weCBhY19hZ2dyOworaWYgKGFjX2FnZ3IudXRfdHlwZSkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfdHlwZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaWYgSEFWRV9VVE1QWF9ICisjaW5jbHVkZSA8dXRtcHguaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCB1dG1weCBhY19hZ2dyOworaWYgKHNpemVvZiBhY19hZ2dyLnV0X3R5cGUpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X3R5cGU9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfdHlwZT1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfdHlwZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF90eXBlIiA+JjYKK2lmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfdHlwZSA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBYX1VUX1RZUEUgMQorX0FDRU9GCisKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RydWN0IHV0bXB4LnV0X2lkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCB1dG1weC51dF9pZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9pZCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpZiBIQVZFX1VUTVBYX0gKKyNpbmNsdWRlIDx1dG1weC5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHV0bXB4IGFjX2FnZ3I7CitpZiAoYWNfYWdnci51dF9pZCkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfaWQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2lmIEhBVkVfVVRNUFhfSAorI2luY2x1ZGUgPHV0bXB4Lmg+CisjZW5kaWYKKworCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdXRtcHggYWNfYWdncjsKK2lmIChzaXplb2YgYWNfYWdnci51dF9pZCkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfaWQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfaWQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X2lkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X2lkIiA+JjYKK2lmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfaWQgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QWF9VVF9JRCAxCitfQUNFT0YKKworCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3QgdXRtcHgudXRfYWRkciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3QgdXRtcHgudXRfYWRkci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9hZGRyK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2lmIEhBVkVfVVRNUFhfSAorI2luY2x1ZGUgPHV0bXB4Lmg+CisjZW5kaWYKKworCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdXRtcHggYWNfYWdncjsKK2lmIChhY19hZ2dyLnV0X2FkZHIpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X2FkZHI9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2lmIEhBVkVfVVRNUFhfSAorI2luY2x1ZGUgPHV0bXB4Lmg+CisjZW5kaWYKKworCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdXRtcHggYWNfYWdncjsKK2lmIChzaXplb2YgYWNfYWdnci51dF9hZGRyKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9hZGRyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X2FkZHI9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X2FkZHIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfYWRkciIgPiY2CitpZiB0ZXN0ICRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X2FkZHIgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QWF9VVF9BRERSIDEKK19BQ0VPRgorCisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCB1dG1weC51dF9hZGRyX3Y2IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCB1dG1weC51dF9hZGRyX3Y2Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X2FkZHJfdjYrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaWYgSEFWRV9VVE1QWF9ICisjaW5jbHVkZSA8dXRtcHguaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCB1dG1weCBhY19hZ2dyOworaWYgKGFjX2FnZ3IudXRfYWRkcl92NikKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfYWRkcl92Nj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaWYgSEFWRV9VVE1QWF9ICisjaW5jbHVkZSA8dXRtcHguaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCB1dG1weCBhY19hZ2dyOworaWYgKHNpemVvZiBhY19hZ2dyLnV0X2FkZHJfdjYpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X2FkZHJfdjY9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfYWRkcl92Nj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfYWRkcl92NiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9hZGRyX3Y2IiA+JjYKK2lmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfYWRkcl92NiA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBYX1VUX0FERFJfVjYgMQorX0FDRU9GCisKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RydWN0IHV0bXB4LnV0X3RpbWUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IHV0bXB4LnV0X3RpbWUuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfdGltZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpZiBIQVZFX1VUTVBYX0gKKyNpbmNsdWRlIDx1dG1weC5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHV0bXB4IGFjX2FnZ3I7CitpZiAoYWNfYWdnci51dF90aW1lKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF90aW1lPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpZiBIQVZFX1VUTVBYX0gKKyNpbmNsdWRlIDx1dG1weC5oPgorI2VuZGlmCisKKworaW50CittYWluICgpCit7CitzdGF0aWMgc3RydWN0IHV0bXB4IGFjX2FnZ3I7CitpZiAoc2l6ZW9mIGFjX2FnZ3IudXRfdGltZSkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfdGltZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF90aW1lPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF90aW1lIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X3RpbWUiID4mNgoraWYgdGVzdCAkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF90aW1lID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfVElNRSAxCitfQUNFT0YKKworCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3QgdXRtcHgudXRfdHYiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IHV0bXB4LnV0X3R2Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X3R2K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2lmIEhBVkVfVVRNUFhfSAorI2luY2x1ZGUgPHV0bXB4Lmg+CisjZW5kaWYKKworCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3QgdXRtcHggYWNfYWdncjsKK2lmIChhY19hZ2dyLnV0X3R2KQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF90dj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaWYgSEFWRV9VVE1QWF9ICisjaW5jbHVkZSA8dXRtcHguaD4KKyNlbmRpZgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCB1dG1weCBhY19hZ2dyOworaWYgKHNpemVvZiBhY19hZ2dyLnV0X3R2KQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF90dj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF90dj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfdHYiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfdHYiID4mNgoraWYgdGVzdCAkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF90diA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBYX1VUX1RWIDEKK19BQ0VPRgorCisKK2ZpCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZS5zc19mYW1pbHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Uuc3NfZmFtaWx5Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2Vfc3NfZmFtaWx5K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCisKK2ludAorbWFpbiAoKQoreworc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGFjX2FnZ3I7CitpZiAoYWNfYWdnci5zc19mYW1pbHkpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2Vfc3NfZmFtaWx5PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworCitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBhY19hZ2dyOworaWYgKHNpemVvZiBhY19hZ2dyLnNzX2ZhbWlseSkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZV9zc19mYW1pbHk9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZV9zc19mYW1pbHk9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2Vfc3NfZmFtaWx5IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2Vfc3NfZmFtaWx5IiA+JjYKK2lmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZV9zc19mYW1pbHkgPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWSAxCitfQUNFT0YKKworCitmaQorCisKKworCisKKworCisKK2ZvciBhY19mdW5jIGluIGVuZHV0ZW50IGdldHV0ZW50IGdldHV0aWQgZ2V0dXRsaW5lIHB1dHV0bGluZSBzZXR1dGVudAorZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkYWNfZnVuYworCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyICRhY19mdW5jICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKK2Nob2tlIG1lCisjZWxzZQorY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7CisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGYgIT0gJGFjX2Z1bmM7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2V2YWwgIiRhc19hY192YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworZm9yIGFjX2Z1bmMgaW4gdXRtcG5hbWUKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCitjaG9rZSBtZQorI2Vsc2UKK2NoYXIgKCpmKSAoKSA9ICRhY19mdW5jOworI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmICE9ICRhY19mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKworCisKKworZm9yIGFjX2Z1bmMgaW4gZW5kdXR4ZW50IGdldHV0eGVudCBnZXR1dHhpZCBnZXR1dHhsaW5lIHB1dHV0eGxpbmUKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCitjaG9rZSBtZQorI2Vsc2UKK2NoYXIgKCpmKSAoKSA9ICRhY19mdW5jOworI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmICE9ICRhY19mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKworZm9yIGFjX2Z1bmMgaW4gc2V0dXR4ZW50IHV0bXB4bmFtZQorZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkYWNfZnVuYworCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyICRhY19mdW5jICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKK2Nob2tlIG1lCisjZWxzZQorY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7CisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGYgIT0gJGFjX2Z1bmM7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2V2YWwgIiRhc19hY192YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworCisKK2ZvciBhY19mdW5jIGluIGxvZ291dCB1cGR3dG1wIGxvZ3d0bXAKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCitjaG9rZSBtZQorI2Vsc2UKK2NoYXIgKCpmKSAoKSA9ICRhY19mdW5jOworI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmICE9ICRhY19mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxhc3Rsb2cgb3IgLS1kaXNhYmxlLWxhc3Rsb2cgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGFzdGxvZytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfbGFzdGxvZyIKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgRElTQUJMRV9MQVNUTE9HCitfQUNFT0YKKworCitmaTsKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS11dG1wIG9yIC0tZGlzYWJsZS11dG1wIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3V0bXArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3V0bXAiCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIERJU0FCTEVfVVRNUAorX0FDRU9GCisKKworZmk7CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdXRtcHggb3IgLS1kaXNhYmxlLXV0bXB4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3V0bXB4K3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV91dG1weCIKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgRElTQUJMRV9VVE1QWAorX0FDRU9GCisKKworZmk7CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtd3RtcCBvciAtLWRpc2FibGUtd3RtcCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV93dG1wK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV93dG1wIgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBESVNBQkxFX1dUTVAKK19BQ0VPRgorCisKK2ZpOworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXd0bXB4IG9yIC0tZGlzYWJsZS13dG1weCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV93dG1weCtzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfd3RtcHgiCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIERJU0FCTEVfV1RNUFgKK19BQ0VPRgorCisKK2ZpOworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxvZ2luZnVuYyBvciAtLWRpc2FibGUtbG9naW5mdW5jIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xvZ2luZnVuYytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfbG9naW5mdW5jIgorICAgbm9fbG9naW5mdW5jX2NoZWNrPTEKKwl7IGVjaG8gIiRhc19tZTokTElORU5POiBOb3QgdXNpbmcgbG9naW4oKSBldGMiID4mNQorZWNobyAiJGFzX21lOiBOb3QgdXNpbmcgbG9naW4oKSBldGMiID4mNjt9CisKK2ZpOworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXB1dHV0bGluZSBvciAtLWRpc2FibGUtcHV0dXRsaW5lIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3B1dHV0bGluZStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfcHV0dXRsaW5lIgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBESVNBQkxFX1BVVFVUTElORQorX0FDRU9GCisKKworZmk7CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcHV0dXR4bGluZSBvciAtLWRpc2FibGUtcHV0dXR4bGluZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wdXR1dHhsaW5lK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9wdXR1dHhsaW5lIgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBESVNBQkxFX1BVVFVUWExJTkUKK19BQ0VPRgorCisKK2ZpOworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxhc3Rsb2cgb3IgLS13aXRob3V0LWxhc3Rsb2cgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xhc3Rsb2crc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfbGFzdGxvZyIKKworCQlpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyIgOyB0aGVuCisJCQljYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBESVNBQkxFX0xBU1RMT0cgMQorX0FDRU9GCisKKwkJZWxzZQorCQkJY29uZl9sYXN0bG9nX2xvY2F0aW9uPSR3aXRodmFsCisJCWZpCisKKworZmk7CisKK2lmIHRlc3QgLXogIiRub19sb2dpbmZ1bmNfY2hlY2siOyB0aGVuCisJCWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGxvZ2luIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBsb2dpbi4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX2xvZ2luK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworYWNfY3Zfc2VhcmNoX2xvZ2luPW5vCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBsb2dpbiAoKTsKK2ludAorbWFpbiAoKQoreworbG9naW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc2VhcmNoX2xvZ2luPSJub25lIHJlcXVpcmVkIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHRlc3QgIiRhY19jdl9zZWFyY2hfbG9naW4iID0gbm87IHRoZW4KKyAgZm9yIGFjX2xpYiBpbiB1dGlsIGJzZDsgZG8KKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgbG9naW4gKCk7CitpbnQKK21haW4gKCkKK3sKK2xvZ2luICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3NlYXJjaF9sb2dpbj0iLWwkYWNfbGliIgorYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2ZpCitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2xvZ2luIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zZWFyY2hfbG9naW4iID4mNgoraWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9sb2dpbiIgIT0gbm87IHRoZW4KKyAgdGVzdCAiJGFjX2N2X3NlYXJjaF9sb2dpbiIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX2N2X3NlYXJjaF9sb2dpbiAkTElCUyIKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MT0dJTgorX0FDRU9GCisKK2ZpCisKKworCisKK2ZvciBhY19mdW5jIGluIGxvZ291dCB1cGR3dG1wIGxvZ3d0bXAKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCitjaG9rZSBtZQorI2Vsc2UKK2NoYXIgKCpmKSAoKSA9ICRhY19mdW5jOworI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmICE9ICRhY19mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGV2YWwgIiRhc19hY192YXI9eWVzIgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitldmFsICIkYXNfYWNfdmFyPW5vIgorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCitmaQorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB5b3VyIHN5c3RlbSBkZWZpbmVzIExBU1RMT0dfRklMRSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdXIgc3lzdGVtIGRlZmluZXMgTEFTVExPR19GSUxFLi4uICRFQ0hPX0MiID4mNgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1dG1wLmg+CisjaWZkZWYgSEFWRV9MQVNUTE9HX0gKKyMgIGluY2x1ZGUgPGxhc3Rsb2cuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfUEFUSFNfSAorIyAgaW5jbHVkZSA8cGF0aHMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTE9HSU5fSAorIyBpbmNsdWRlIDxsb2dpbi5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworIGNoYXIgKmxhc3Rsb2cgPSBMQVNUTE9HX0ZJTEU7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisKKwkJZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCQllY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgeW91ciBzeXN0ZW0gZGVmaW5lcyBfUEFUSF9MQVNUTE9HIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgeW91ciBzeXN0ZW0gZGVmaW5lcyBfUEFUSF9MQVNUTE9HLi4uICRFQ0hPX0MiID4mNgorCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHV0bXAuaD4KKyNpZmRlZiBIQVZFX0xBU1RMT0dfSAorIyAgaW5jbHVkZSA8bGFzdGxvZy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9QQVRIU19ICisjICBpbmNsdWRlIDxwYXRocy5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworIGNoYXIgKmxhc3Rsb2cgPSBfUEFUSF9MQVNUTE9HOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworCisJCQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CisJCQlzeXN0ZW1fbGFzdGxvZ19wYXRoPW5vCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAteiAiJGNvbmZfbGFzdGxvZ19sb2NhdGlvbiI7IHRoZW4KKwlpZiB0ZXN0IHgiJHN5c3RlbV9sYXN0bG9nX3BhdGgiID0geCJubyIgOyB0aGVuCisJCWZvciBmIGluIC92YXIvbG9nL2xhc3Rsb2cgL3Vzci9hZG0vbGFzdGxvZyAvdmFyL2FkbS9sYXN0bG9nIC9ldGMvc2VjdXJpdHkvbGFzdGxvZyA7IGRvCisJCQkJaWYgKHRlc3QgLWQgIiRmIiB8fCB0ZXN0IC1mICIkZiIpIDsgdGhlbgorCQkJCQljb25mX2xhc3Rsb2dfbG9jYXRpb249JGYKKwkJCQlmaQorCQlkb25lCisJCWlmIHRlc3QgLXogIiRjb25mX2xhc3Rsb2dfbG9jYXRpb24iOyB0aGVuCisJCQl7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAqKiBDYW5ub3QgZmluZCBsYXN0bG9nICoqIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogKiogQ2Fubm90IGZpbmQgbGFzdGxvZyAqKiIgPiYyO30KKwkJCQkJZmkKKwlmaQorZmkKKworaWYgdGVzdCAtbiAiJGNvbmZfbGFzdGxvZ19sb2NhdGlvbiI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBDT05GX0xBU1RMT0dfRklMRSAiJGNvbmZfbGFzdGxvZ19sb2NhdGlvbiIKK19BQ0VPRgorCitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgeW91ciBzeXN0ZW0gZGVmaW5lcyBVVE1QX0ZJTEUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3VyIHN5c3RlbSBkZWZpbmVzIFVUTVBfRklMRS4uLiAkRUNIT19DIiA+JjYKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dXRtcC5oPgorI2lmZGVmIEhBVkVfUEFUSFNfSAorIyAgaW5jbHVkZSA8cGF0aHMuaD4KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKyBjaGFyICp1dG1wID0gVVRNUF9GSUxFOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwkgIHN5c3RlbV91dG1wX3BhdGg9bm8KKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHRlc3QgLXogIiRjb25mX3V0bXBfbG9jYXRpb24iOyB0aGVuCisJaWYgdGVzdCB4IiRzeXN0ZW1fdXRtcF9wYXRoIiA9IHgibm8iIDsgdGhlbgorCQlmb3IgZiBpbiAvZXRjL3V0bXAgL3Vzci9hZG0vdXRtcCAvdmFyL3J1bi91dG1wOyBkbworCQkJaWYgdGVzdCAtZiAkZiA7IHRoZW4KKwkJCQljb25mX3V0bXBfbG9jYXRpb249JGYKKwkJCWZpCisJCWRvbmUKKwkJaWYgdGVzdCAteiAiJGNvbmZfdXRtcF9sb2NhdGlvbiI7IHRoZW4KKwkJCWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIERJU0FCTEVfVVRNUCAxCitfQUNFT0YKKworCQlmaQorCWZpCitmaQoraWYgdGVzdCAtbiAiJGNvbmZfdXRtcF9sb2NhdGlvbiI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBDT05GX1VUTVBfRklMRSAiJGNvbmZfdXRtcF9sb2NhdGlvbiIKK19BQ0VPRgorCitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgeW91ciBzeXN0ZW0gZGVmaW5lcyBXVE1QX0ZJTEUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3VyIHN5c3RlbSBkZWZpbmVzIFdUTVBfRklMRS4uLiAkRUNIT19DIiA+JjYKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dXRtcC5oPgorI2lmZGVmIEhBVkVfUEFUSFNfSAorIyAgaW5jbHVkZSA8cGF0aHMuaD4KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKyBjaGFyICp3dG1wID0gV1RNUF9GSUxFOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwkgIHN5c3RlbV93dG1wX3BhdGg9bm8KKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHRlc3QgLXogIiRjb25mX3d0bXBfbG9jYXRpb24iOyB0aGVuCisJaWYgdGVzdCB4IiRzeXN0ZW1fd3RtcF9wYXRoIiA9IHgibm8iIDsgdGhlbgorCQlmb3IgZiBpbiAvdXNyL2FkbS93dG1wIC92YXIvbG9nL3d0bXA7IGRvCisJCQlpZiB0ZXN0IC1mICRmIDsgdGhlbgorCQkJCWNvbmZfd3RtcF9sb2NhdGlvbj0kZgorCQkJZmkKKwkJZG9uZQorCQlpZiB0ZXN0IC16ICIkY29uZl93dG1wX2xvY2F0aW9uIjsgdGhlbgorCQkJY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgRElTQUJMRV9XVE1QIDEKK19BQ0VPRgorCisJCWZpCisJZmkKK2ZpCitpZiB0ZXN0IC1uICIkY29uZl93dG1wX2xvY2F0aW9uIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIENPTkZfV1RNUF9GSUxFICIkY29uZl93dG1wX2xvY2F0aW9uIgorX0FDRU9GCisKK2ZpCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHlvdXIgc3lzdGVtIGRlZmluZXMgVVRNUFhfRklMRSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHlvdXIgc3lzdGVtIGRlZmluZXMgVVRNUFhfRklMRS4uLiAkRUNIT19DIiA+JjYKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dXRtcC5oPgorI2lmZGVmIEhBVkVfVVRNUFhfSAorI2luY2x1ZGUgPHV0bXB4Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1BBVEhTX0gKKyMgIGluY2x1ZGUgPHBhdGhzLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CisgY2hhciAqdXRtcHggPSBVVE1QWF9GSUxFOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwkgIHN5c3RlbV91dG1weF9wYXRoPW5vCisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitpZiB0ZXN0IC16ICIkY29uZl91dG1weF9sb2NhdGlvbiI7IHRoZW4KKwlpZiB0ZXN0IHgiJHN5c3RlbV91dG1weF9wYXRoIiA9IHgibm8iIDsgdGhlbgorCQljYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBESVNBQkxFX1VUTVBYIDEKK19BQ0VPRgorCisJZmkKK2Vsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBDT05GX1VUTVBYX0ZJTEUgIiRjb25mX3V0bXB4X2xvY2F0aW9uIgorX0FDRU9GCisKK2ZpCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB5b3VyIHN5c3RlbSBkZWZpbmVzIFdUTVBYX0ZJTEUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB5b3VyIHN5c3RlbSBkZWZpbmVzIFdUTVBYX0ZJTEUuLi4gJEVDSE9fQyIgPiY2CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHV0bXAuaD4KKyNpZmRlZiBIQVZFX1VUTVBYX0gKKyNpbmNsdWRlIDx1dG1weC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9QQVRIU19ICisjICBpbmNsdWRlIDxwYXRocy5oPgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworIGNoYXIgKnd0bXB4ID0gV1RNUFhfRklMRTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKK2VjaG8gIiR7RUNIT19UfXllcyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CisJICBzeXN0ZW1fd3RtcHhfcGF0aD1ubworCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoraWYgdGVzdCAteiAiJGNvbmZfd3RtcHhfbG9jYXRpb24iOyB0aGVuCisJaWYgdGVzdCB4IiRzeXN0ZW1fd3RtcHhfcGF0aCIgPSB4Im5vIiA7IHRoZW4KKwkJY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgRElTQUJMRV9XVE1QWCAxCitfQUNFT0YKKworCWZpCitlbHNlCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgQ09ORl9XVE1QWF9GSUxFICIkY29uZl93dG1weF9sb2NhdGlvbiIKK19BQ0VPRgorCitmaQorCisjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCitpZiB0ZXN0ICRhY19jdl9jX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBuZWVkcyAtdHJhZGl0aW9uYWwiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICRDQyBuZWVkcyAtdHJhZGl0aW9uYWwuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgICAgYWNfcGF0dGVybj0iQXV0b2NvbmYuKid4JyIKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c2d0dHkuaD4KK0F1dG9jb25mIFRJT0NHRVRQCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICIkYWNfcGF0dGVybiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPXllcworZWxzZQorICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisKKyAgaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwgPSBubzsgdGhlbgorICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHRlcm1pby5oPgorQXV0b2NvbmYgVENHRVRBCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICIkYWNfcGF0dGVybiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPXllcworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCisgIGZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCIgPiY2CisgIGlmIHRlc3QgJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsID0geWVzOyB0aGVuCisgICAgQ0M9IiRDQyAtdHJhZGl0aW9uYWwiCisgIGZpCitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWVtY21wIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWVtY21wLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9bm8KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CisKKyAgLyogU29tZSB2ZXJzaW9ucyBvZiBtZW1jbXAgYXJlIG5vdCA4LWJpdCBjbGVhbi4gICovCisgIGNoYXIgYzAgPSAweDQwLCBjMSA9IDB4ODAsIGMyID0gMHg4MTsKKyAgaWYgKG1lbWNtcCgmYzAsICZjMiwgMSkgPj0gMCB8fCBtZW1jbXAoJmMxLCAmYzIsIDEpID49IDApCisgICAgZXhpdCAoMSk7CisKKyAgLyogVGhlIE5leHQgeDg2IE9wZW5TdGVwIGJ1ZyBzaG93cyB1cCBvbmx5IHdoZW4gY29tcGFyaW5nIDE2IGJ5dGVzCisgICAgIG9yIG1vcmUgYW5kIHdpdGggYXQgbGVhc3Qgb25lIGJ1ZmZlciBub3Qgc3RhcnRpbmcgb24gYSA0LWJ5dGUgYm91bmRhcnkuCisgICAgIFdpbGxpYW0gTGV3aXMgcHJvdmlkZWQgdGhpcyB0ZXN0IHByb2dyYW0uICAgKi8KKyAgeworICAgIGNoYXIgZm9vWzIxXTsKKyAgICBjaGFyIGJhclsyMV07CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKyAgICAgIHsKKwljaGFyICphID0gZm9vICsgaTsKKwljaGFyICpiID0gYmFyICsgaTsKKwlzdHJjcHkgKGEsICItLS0tLS0tLTAxMTExMTExIik7CisJc3RyY3B5IChiLCAiLS0tLS0tLS0xMDAwMDAwMCIpOworCWlmIChtZW1jbXAgKGEsIGIsIDE2KSA+PSAwKQorCSAgZXhpdCAoMSk7CisgICAgICB9CisgICAgZXhpdCAoMCk7CisgIH0KKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyIgPiY2Cit0ZXN0ICRhY19jdl9mdW5jX21lbWNtcF93b3JraW5nID0gbm8gJiYgY2FzZSAkTElCT0JKUyBpbgorICAgICJtZW1jbXAuJGFjX29iamV4dCIgICB8IFwKKyAgKiIgbWVtY21wLiRhY19vYmpleHQiICAgfCBcCisgICAgIm1lbWNtcC4kYWNfb2JqZXh0ICIqIHwgXAorICAqIiBtZW1jbXAuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIG1lbWNtcC4kYWNfb2JqZXh0IiA7OworZXNhYworCisKKworCitmb3IgYWNfaGVhZGVyIGluIHN5cy9zZWxlY3QuaCBzeXMvc29ja2V0LmgKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2CitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgKAorICAgICAgY2F0IDw8XF9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byB0aGUgQUNfUEFDS0FHRV9OQU1FIGxpc3RzLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTQk9YCisgICAgKSB8CisgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKyAgICA7OworZXNhYworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2CitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CisKK2ZpCitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdHlwZXMgb2YgYXJndW1lbnRzIGZvciBzZWxlY3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB0eXBlcyBvZiBhcmd1bWVudHMgZm9yIHNlbGVjdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19zZWxlY3RfYXJncytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBmb3IgYWNfYXJnMjM0IGluICdmZF9zZXQgKicgJ2ludCAqJyAndm9pZCAqJzsgZG8KKyBmb3IgYWNfYXJnMSBpbiAnaW50JyAnc2l6ZV90JyAndW5zaWduZWQgbG9uZycgJ3Vuc2lnbmVkJzsgZG8KKyAgZm9yIGFjX2FyZzUgaW4gJ3N0cnVjdCB0aW1ldmFsIConICdjb25zdCBzdHJ1Y3QgdGltZXZhbCAqJzsgZG8KKyAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpZiBIQVZFX1NZU19TRUxFQ1RfSAorIyBpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorIyBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CitleHRlcm4gaW50IHNlbGVjdCAoJGFjX2FyZzEsCisJCQkJCSAgICAkYWNfYXJnMjM0LCAkYWNfYXJnMjM0LCAkYWNfYXJnMjM0LAorCQkJCQkgICAgJGFjX2FyZzUpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfc2VsZWN0X2FyZ3M9IiRhY19hcmcxLCRhY19hcmcyMzQsJGFjX2FyZzUiOyBicmVhayAzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKKyBkb25lCitkb25lCisjIFByb3ZpZGUgYSBzYWZlIGRlZmF1bHQgdmFsdWUuCis6ICR7YWNfY3ZfZnVuY19zZWxlY3RfYXJncz0naW50LGludCAqLHN0cnVjdCB0aW1ldmFsIConfQorCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfc2VsZWN0X2FyZ3MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfc2VsZWN0X2FyZ3MiID4mNgorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPScsJworc2V0IGR1bW15IGBlY2hvICIkYWNfY3ZfZnVuY19zZWxlY3RfYXJncyIgfCBzZWQgJ3MvXCovXCovZydgCitJRlM9JGFjX3NhdmVfSUZTCitzaGlmdAorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNFTEVDVF9UWVBFX0FSRzEgJDEKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHMjM0ICgkMikKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0VMRUNUX1RZUEVfQVJHNSAoJDMpCitfQUNFT0YKKworcm0gLWYgY29uZnRlc3QqCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyByZXR1cm4gdHlwZSBvZiBzaWduYWwgaGFuZGxlcnMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfc2lnbmFsK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2lmZGVmIHNpZ25hbAorIyB1bmRlZiBzaWduYWwKKyNlbmRpZgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHZvaWQgKCpzaWduYWwgKGludCwgdm9pZCAoKikoaW50KSkpKGludCk7CisjZWxzZQordm9pZCAoKnNpZ25hbCAoKSkgKCk7CisjZW5kaWYKKworaW50CittYWluICgpCit7CitpbnQgaTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX3NpZ25hbD12b2lkCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X3R5cGVfc2lnbmFsPWludAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaWduYWwiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc2lnbmFsIiA+JjYKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSRVRTSUdUWVBFICRhY19jdl90eXBlX3NpZ25hbAorX0FDRU9GCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2ZvciBhY19mdW5jIGluIGR1cDIgZ2V0c3BuYW0gZ2V0dXNlcnNoZWxsIG1lbXNldCBwdXRlbnYgc2VsZWN0IHNvY2tldCBzdHJkdXAgY2xlYXJlbnYgc3RybGNweSBzdHJsY2F0IGRhZW1vbiBiYXNlbmFtZSBfZ2V0cHR5IGdldGFkZHJpbmZvIGZyZWVhZGRyaW5mbyBnZXRuYW1laW5mbworZG8KK2FzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYworCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiAkYWNfZnVuYworCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyICRhY19mdW5jICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKK2Nob2tlIG1lCisjZWxzZQorY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7CisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGYgIT0gJGFjX2Z1bmM7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCisJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2V2YWwgIiRhc19hY192YXI9bm8iCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2CitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgYmFzZW5hbWUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGJhc2VuYW1lLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zZWFyY2hfYmFzZW5hbWUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCithY19jdl9zZWFyY2hfYmFzZW5hbWU9bm8KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGJhc2VuYW1lICgpOworaW50CittYWluICgpCit7CitiYXNlbmFtZSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKKwkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zZWFyY2hfYmFzZW5hbWU9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoraWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9iYXNlbmFtZSIgPSBubzsgdGhlbgorICBmb3IgYWNfbGliIGluIGdlbjsgZG8KKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgYmFzZW5hbWUgKCk7CitpbnQKK21haW4gKCkKK3sKK2Jhc2VuYW1lICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgorCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3NlYXJjaF9iYXNlbmFtZT0iLWwkYWNfbGliIgorYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2ZpCitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2Jhc2VuYW1lIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zZWFyY2hfYmFzZW5hbWUiID4mNgoraWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9iYXNlbmFtZSIgIT0gbm87IHRoZW4KKyAgdGVzdCAiJGFjX2N2X3NlYXJjaF9iYXNlbmFtZSIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX2N2X3NlYXJjaF9iYXNlbmFtZSAkTElCUyIKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9CQVNFTkFNRSAxCitfQUNFT0YKKworZmkKKworCisjIFNvbGFyaXMgbmVlZHMgcHRteAoraWYgdGVzdCAteiAiJG5vX3B0bXhfY2hlY2siIDsgdGhlbgorCWlmIHRlc3QgeCIkY3Jvc3NfY29tcGlsaW5nIiA9IHgibm8iIDsgdGhlbgorCQllY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIFwiL2Rldi9wdG14XCIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgXCIvZGV2L3B0bXhcIi4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfZmlsZV9fX2Rldl9wdG14XytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAmJgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY2hlY2sgZm9yIGZpbGUgZXhpc3RlbmNlIHdoZW4gY3Jvc3MgY29tcGlsaW5nIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjaGVjayBmb3IgZmlsZSBleGlzdGVuY2Ugd2hlbiBjcm9zcyBjb21waWxpbmciID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2lmIHRlc3QgLXIgIiIvZGV2L3B0bXgiIjsgdGhlbgorICBhY19jdl9maWxlX19fZGV2X3B0bXhfPXllcworZWxzZQorICBhY19jdl9maWxlX19fZGV2X3B0bXhfPW5vCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9maWxlX19fZGV2X3B0bXhfIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9maWxlX19fZGV2X3B0bXhfIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2ZpbGVfX19kZXZfcHRteF8gPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgVVNFX0RFVl9QVE1YCitfQUNFT0YKKworZmkKKworCWVsc2UKKwkJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogTm90IGNoZWNraW5nIGZvciAvZGV2L3B0bXgsIHdlJ3JlIGNyb3NzLWNvbXBpbGluZyIgPiY1CitlY2hvICIkYXNfbWU6IE5vdCBjaGVja2luZyBmb3IgL2Rldi9wdG14LCB3ZSdyZSBjcm9zcy1jb21waWxpbmciID4mNjt9CisJZmkKK2ZpCisKK2lmIHRlc3QgLXogIiRub19wdGNfY2hlY2siIDsgdGhlbgorCWlmIHRlc3QgeCIkY3Jvc3NfY29tcGlsaW5nIiA9IHgibm8iIDsgdGhlbgorCQllY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIFwiL2Rldi9wdGNcIiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBcIi9kZXYvcHRjXCIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2ZpbGVfX19kZXZfcHRjXytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyAmJgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY2hlY2sgZm9yIGZpbGUgZXhpc3RlbmNlIHdoZW4gY3Jvc3MgY29tcGlsaW5nIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjaGVjayBmb3IgZmlsZSBleGlzdGVuY2Ugd2hlbiBjcm9zcyBjb21waWxpbmciID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2lmIHRlc3QgLXIgIiIvZGV2L3B0YyIiOyB0aGVuCisgIGFjX2N2X2ZpbGVfX19kZXZfcHRjXz15ZXMKK2Vsc2UKKyAgYWNfY3ZfZmlsZV9fX2Rldl9wdGNfPW5vCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9maWxlX19fZGV2X3B0Y18iID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2ZpbGVfX19kZXZfcHRjXyIgPiY2CitpZiB0ZXN0ICRhY19jdl9maWxlX19fZGV2X3B0Y18gPSB5ZXM7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERVZfUFRTX0FORF9QVEMKK19BQ0VPRgorCitmaQorCisJZWxzZQorCQl7IGVjaG8gIiRhc19tZTokTElORU5POiBOb3QgY2hlY2tpbmcgZm9yIC9kZXYvcHRjICYgL2Rldi9wdHMgc2luY2Ugd2UncmUgY3Jvc3MtY29tcGlsaW5nIiA+JjUKK2VjaG8gIiRhc19tZTogTm90IGNoZWNraW5nIGZvciAvZGV2L3B0YyAmIC9kZXYvcHRzIHNpbmNlIHdlJ3JlIGNyb3NzLWNvbXBpbGluZyIgPiY2O30KKwlmaQorZmkKKworCisKKyMgWFhYIHRoZXJlIG11c3QgYmUgYSBuaWNlciB3YXkgdG8gZG8gdGhpcworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2FlcworICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2FlcworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvY2lwaGVycy9hZXMiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvYWVzIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvY2lwaGVycy9zYWZlcgorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3NhZmVyCisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3NhZmVyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3NhZmVyIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvY2lwaGVycy90d29maXNoCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvdHdvZmlzaAorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvY2lwaGVycy90d29maXNoIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3R3b2Zpc2giID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2NjbQorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2NjbQorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9jY20iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvY2NtIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgKKyAgZWxzZQorICAgIGFzX2Rpcj1saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2VheCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCit7IGlmICRhc19ta2Rpcl9wOyB0aGVuCisgICAgbWtkaXIgLXAgbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtCisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYgorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYgorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2IiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvaGFzaGVzCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL2hhc2hlcworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvaGFzaGVzIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9oYXNoZXMiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9oYXNoZXMvY2hjCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL2hhc2hlcy9jaGMKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9jaGMiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9jaGMiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9oYXNoZXMvaGVscGVyCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL2hhc2hlcy9oZWxwZXIKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9oZWxwZXIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9oZWxwZXIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMgorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMgorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvaGFzaGVzL3NoYTIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9zaGEyIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvaGFzaGVzL3doaXJsCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL2hhc2hlcy93aGlybAorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvaGFzaGVzL3doaXJsIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9oYXNoZXMvd2hpcmwiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYworICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvbWFjL2htYWMiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL21hYy9obWFjIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvbWFjL29tYWMKKyAgZWxzZQorICAgIGFzX2Rpcj1saWJ0b21jcnlwdC9zcmMvbWFjL29tYWMKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL21hYy9vbWFjIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9tYWMvb21hYyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCit7IGlmICRhc19ta2Rpcl9wOyB0aGVuCisgICAgbWtkaXIgLXAgbGlidG9tY3J5cHQvc3JjL21hYy9wZWxpY2FuCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL21hYy9wZWxpY2FuCisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9tYWMvcGVsaWNhbiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvbWFjL3BlbGljYW4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYworICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvbWlzYy9iYXNlNjQKKyAgZWxzZQorICAgIGFzX2Rpcj1saWJ0b21jcnlwdC9zcmMvbWlzYy9iYXNlNjQKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL21pc2MvYmFzZTY0IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9taXNjL2Jhc2U2NCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCit7IGlmICRhc19ta2Rpcl9wOyB0aGVuCisgICAgbWtkaXIgLXAgbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQKKyAgZWxzZQorICAgIGFzX2Rpcj1saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdAorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCit7IGlmICRhc19ta2Rpcl9wOyB0aGVuCisgICAgbWtkaXIgLXAgbGlidG9tY3J5cHQvc3JjL21pc2MvbXBpCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL21pc2MvbXBpCisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9taXNjL21waSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvbWlzYy9tcGkiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9taXNjL3BrY3M1CisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL21pc2MvcGtjczUKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL21pc2MvcGtjczUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL21pc2MvcGtjczUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMKKyAgZWxzZQorICAgIGFzX2Rpcj1saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2JjCisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL21vZGVzL2NiYyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCit7IGlmICRhc19ta2Rpcl9wOyB0aGVuCisgICAgbWtkaXIgLXAgbGlidG9tY3J5cHQvc3JjL21vZGVzL2NmYgorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL21vZGVzL2NmYiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL21vZGVzL2N0cgorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9tb2Rlcy9lY2IKKyAgZWxzZQorICAgIGFzX2Rpcj1saWJ0b21jcnlwdC9zcmMvbW9kZXMvZWNiCisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9tb2Rlcy9lY2IiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL21vZGVzL2VjYiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCit7IGlmICRhc19ta2Rpcl9wOyB0aGVuCisgICAgbWtkaXIgLXAgbGlidG9tY3J5cHQvc3JjL21vZGVzL29mYgorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL21vZGVzL29mYiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvYml0CisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2JpdAorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvYml0IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9iaXQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9jaG9pY2UKKyAgZWxzZQorICAgIGFzX2Rpcj1saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvY2hvaWNlCisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9jaG9pY2UiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2Nob2ljZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCit7IGlmICRhc19ta2Rpcl9wOyB0aGVuCisgICAgbWtkaXIgLXAgbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2lhNQorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pYTUKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2lhNSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaWE1IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaW50ZWdlcgorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pbnRlZ2VyCisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pbnRlZ2VyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pbnRlZ2VyIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIKKyAgZWxzZQorICAgIGFzX2Rpcj1saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllciIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCit7IGlmICRhc19ta2Rpcl9wOyB0aGVuCisgICAgbWtkaXIgLXAgbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29jdGV0CisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29jdGV0CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9vY3RldCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2N0ZXQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmciID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmciID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZQorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZQorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlcgorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyCisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvdXRjdGltZQorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGN0aW1lCisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGN0aW1lIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGN0aW1lIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvcGsvZGgKKyAgZWxzZQorICAgIGFzX2Rpcj1saWJ0b21jcnlwdC9zcmMvcGsvZGgKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL3BrL2RoIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9kaCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCit7IGlmICRhc19ta2Rpcl9wOyB0aGVuCisgICAgbWtkaXIgLXAgbGlidG9tY3J5cHQvc3JjL3BrL2RzYQorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9way9kc2EKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL3BrL2RzYSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvcGsvZHNhIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvcGsvZWNjCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL3BrL2VjYworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvcGsvZWNjIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9lY2MiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9way9wa2NzMQorICBlbHNlCisgICAgYXNfZGlyPWxpYnRvbWNyeXB0L3NyYy9way9wa2NzMQorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvcGsvcGtjczEiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKK3sgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCBsaWJ0b21jcnlwdC9zcmMvcGsvcnNhCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL3BrL3JzYQorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBsaWJ0b21jcnlwdC9zcmMvcGsvcnNhIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IGxpYnRvbWNyeXB0L3NyYy9way9yc2EiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wIGxpYnRvbWNyeXB0L3NyYy9wcm5nCisgIGVsc2UKKyAgICBhc19kaXI9bGlidG9tY3J5cHQvc3JjL3BybmcKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL3BybmciID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgbGlidG9tY3J5cHQvc3JjL3BybmciID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworICAgICAgICAgIGFjX2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMgY29uZmlnLmgiCisKKyAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUiCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKworX0FDRU9GCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgZG9uJ3QgcHV0IG5ld2xpbmVzIGluIGNhY2hlIHZhcmlhYmxlcycgdmFsdWVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgoreworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlIGAoYWNfc3BhY2U9JyAnOyBzZXQgfCBncmVwIGFjX3NwYWNlKSAyPiYxYCBpbgorICAgICphY19zcGFjZT1cICopCisgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlcyAoZG91YmxlLXF1b3RlCisgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcKS4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OworICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uIFwKKwkicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKyAgICAgIDs7CisgICAgZXNhYzsKK30gfAorICBzZWQgJworICAgICB0IGNsZWFyCisgICAgIDogY2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICAvXmFjX2N2X2Vudi8hcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCisgICAgIDogZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAkY2FjaGVfZmlsZSBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAkY2FjaGVfZmlsZTsgdGhlbgorICAgIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiICYmIGVjaG8gInVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgorICAgIGNhdCBjb25mY2FjaGUgPiRjYWNoZV9maWxlCisgIGVsc2UKKyAgICBlY2hvICJub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKwordGVzdCAieCRwcmVmaXgiID0geE5PTkUgJiYgcHJlZml4PSRhY19kZWZhdWx0X3ByZWZpeAorIyBMZXQgbWFrZSBleHBhbmQgZXhlY19wcmVmaXguCit0ZXN0ICJ4JGV4ZWNfcHJlZml4IiA9IHhOT05FICYmIGV4ZWNfcHJlZml4PScke3ByZWZpeH0nCisKKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgJChzcmNkaXIpLAorIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGZyb20gVlBBVEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQKKyMgdHJhaWxpbmcgY29sb25zIGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5CisjIChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycykuCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbgorICBhY192cHN1Yj0nL15bCSBdKlZQQVRIWwkgXSo9L3sKK3MvOipcJChzcmNkaXIpOiovOi87CitzLzoqXCR7c3JjZGlyfToqLzovOworcy86KkBzcmNkaXJAOiovOi87CitzL15cKFtePV0qPVsJIF0qXCk6Ki9cMS87CitzLzoqJC8vOworcy9eW149XSo9WwkgXSokLy87Cit9JworZmkKKworREVGUz0tREhBVkVfQ09ORklHX0gKKworYWNfbGlib2Jqcz0KK2FjX2x0bGlib2Jqcz0KK2ZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQorICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCisgIGFjX2k9YGVjaG8gIiRhY19pIiB8CisJIHNlZCAncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJ2AKKyAgIyAyLiBBZGQgdGhlbS4KKyAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgJGFjX2lcJFUuJGFjX29iamV4dCIKKyAgYWNfbHRsaWJvYmpzPSIkYWNfbHRsaWJvYmpzICRhY19pIickVS5sbycKK2RvbmUKK0xJQk9CSlM9JGFjX2xpYm9ianMKKworTFRMSUJPQkpTPSRhY19sdGxpYm9ianMKKworCisKKzogJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30KK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KK2NhdCA+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIENvbXBpbGVyIG91dHB1dCBwcm9kdWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCisjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisKK2RlYnVnPWZhbHNlCithY19jc19yZWNoZWNrPWZhbHNlCithY19jc19zaWxlbnQ9ZmFsc2UKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2V0IC1vIHBvc2l4CitmaQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc191bnNldD11bnNldAorZWxzZQorICBhc191bnNldD1mYWxzZQorZmkKKworCisjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KKyRhc191bnNldCBFTlYgTUFJTCBNQUlMUEFUSAorUFMxPSckICcKK1BTMj0nPiAnCitQUzQ9JysgJworCisjIE5MUyBudWlzYW5jZXMuCitmb3IgYXNfdmFyIGluIFwKKyAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKKyAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKKyAgTENfVEVMRVBIT05FIExDX1RJTUUKK2RvCisgIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgJGFzX3ZhcgorICBmaQorZG9uZQorCisjIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitpZiAoYmFzZW5hbWUgLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorCisKKyMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KK2FzX21lPWAkYXNfYmFzZW5hbWUgIiQwIiB8fAorJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJCcgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwvXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwvXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisKKworIyBQQVRIIG5lZWRzIENSLCBhbmQgTElORU5PIG5lZWRzIENSIGFuZCBQQVRILgorIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCisKKworICBhc19saW5lbm9fMT0kTElORU5PCisgIGFzX2xpbmVub18yPSRMSU5FTk8KKyAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAorICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKyAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7CisgICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIHBhdGggYXQgYWxsCisgICMgcmVsYXRpdmUgb3Igbm90LgorICBjYXNlICQwIGluCisgICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKK2RvbmUKKworICAgICAgIDs7CisgIGVzYWMKKyAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworICAjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KKyAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICAgIGFzX215c2VsZj0kMAorICBmaQorICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgZmkKKyAgY2FzZSAkQ09ORklHX1NIRUxMIGluCisgICcnKQorICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSBjYXNlICRhc19kaXIgaW4KKwkgLyopCisJICAgaWYgKCIkYXNfZGlyLyRhc19iYXNlIiAtYyAnCisgIGFzX2xpbmVub18xPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTworICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCisgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgJykgMj4vZGV2L251bGw7IHRoZW4KKwkgICAgICRhc191bnNldCBCQVNIX0VOViB8fCB0ZXN0ICIke0JBU0hfRU5WK3NldH0iICE9IHNldCB8fCB7IEJBU0hfRU5WPTsgZXhwb3J0IEJBU0hfRU5WOyB9CisJICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KKwkgICAgIENPTkZJR19TSEVMTD0kYXNfZGlyLyRhc19iYXNlCisJICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisJICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQorCSAgIGZpOzsKKwkgZXNhYworICAgICAgIGRvbmUKK2RvbmUKKzs7CisgIGVzYWMKKworICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCisgICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKKyAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAorICAjIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2ggbGluZS1udW1iZXIgbGluZQorICAjIHdpdGggdGhlIG51bWJlcmVkIGxpbmUsIGFuZCBhcHBlbmRzIHRyYWlsaW5nICctJyBkdXJpbmcKKyAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KKyAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCisgICMgc2Vjb25kICdzZWQnIHNjcmlwdC4gIEJsYW1lIExlZSBFLiBNY01haG9uIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkICc9JyA8JGFzX215c2VsZiB8CisgICAgc2VkICcKKyAgICAgIE4KKyAgICAgIHMsJCwtLAorICAgICAgOiBsb29wCisgICAgICBzLF5cKFsnJGFzX2NyX2RpZ2l0cyddKlwpXCguKlwpWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX11cKSxcMVwyXDFcMywKKyAgICAgIHQgbG9vcAorICAgICAgcywtJCwsCisgICAgICBzLF5bJyRhc19jcl9kaWdpdHMnXSpcbiwsCisgICAgJyA+JGFzX21lLmxpbmVubyAmJgorICBjaG1vZCAreCAkYXNfbWUubGluZW5vIHx8CisgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpYmxlIHRvIHRoaXMpLgorICAuIC4vJGFzX21lLmxpbmVubworICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KKyAgZXhpdAorfQorCisKK2Nhc2UgYGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDNgLGBlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDNgIGluCisgICpjKiwtbiopIEVDSE9fTj0gRUNIT19DPScKKycgRUNIT19UPScJJyA7OworICAqYyosKiAgKSBFQ0hPX049LW4gRUNIT19DPSBFQ0hPX1Q9IDs7CisgICopICAgICAgIEVDSE9fTj0gRUNIT19DPSdcYycgRUNIT19UPSA7OworZXNhYworCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2VjaG8gPmNvbmYkJC5maWxlCitpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgIyBXZSBjb3VsZCBqdXN0IGNoZWNrIGZvciBESkdQUDsgYnV0IHRoaXMgdGVzdCBhKSB3b3JrcyBiKSBpcyBtb3JlIGdlbmVyaWMKKyAgIyBhbmQgYykgd2lsbCByZW1haW4gdmFsaWQgb25jZSBESkdQUCBzdXBwb3J0cyBzeW1saW5rcyAoREpHUFAgMi4wNCkuCisgIGlmIHRlc3QgLWYgY29uZiQkLmV4ZTsgdGhlbgorICAgICMgRG9uJ3QgdXNlIGxuIGF0IGFsbDsgd2UgZG9uJ3QgaGF2ZSBhbnkgbGlua3MKKyAgICBhc19sbl9zPSdjcCAtcCcKKyAgZWxzZQorICAgIGFzX2xuX3M9J2xuIC1zJworICBmaQorZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbG5fcz1sbgorZWxzZQorICBhc19sbl9zPSdjcCAtcCcKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9OgorZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICBhc19ta2Rpcl9wPWZhbHNlCitmaQorCithc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4KK2FzX25sPScKKycKK0lGUz0iIAkkYXNfbmwiCisKKyMgQ0RQQVRILgorJGFzX3Vuc2V0IENEUEFUSAorCitleGVjIDY+JjEKKworIyBPcGVuIHRoZSBsb2cgcmVhbCBzb29uLCB0byBrZWVwIFwkWzBdIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KKyMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgorIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4gIExvZ2dpbmcgLS12ZXJzaW9uIGV0Yy4gaXMgT0suCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorIyMgUnVubmluZyAkYXNfbWUuICMjCitfQVNCT1gKK30gPiY1CitjYXQgPiY1IDw8X0NTRU9GCisKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgJGFzX21lLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCisgIENPTkZJR19MSU5LUyAgICA9ICRDT05GSUdfTElOS1MKKyAgQ09ORklHX0NPTU1BTkRTID0gJENPTkZJR19DT01NQU5EUworICAkICQwICRACisKK19DU0VPRgorZWNobyAib24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgIiA+JjUKK2VjaG8gPiY1CitfQUNFT0YKKworIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgoraWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19maWxlcyI7IHRoZW4KKyAgZWNobyAiY29uZmlnX2ZpbGVzPVwiJGFjX2NvbmZpZ19maWxlc1wiIiA+PiRDT05GSUdfU1RBVFVTCitmaQorCitpZiB0ZXN0IC1uICIkYWNfY29uZmlnX2hlYWRlcnMiOyB0aGVuCisgIGVjaG8gImNvbmZpZ19oZWFkZXJzPVwiJGFjX2NvbmZpZ19oZWFkZXJzXCIiID4+JENPTkZJR19TVEFUVVMKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY19jb25maWdfbGlua3MiOyB0aGVuCisgIGVjaG8gImNvbmZpZ19saW5rcz1cIiRhY19jb25maWdfbGlua3NcIiIgPj4kQ09ORklHX1NUQVRVUworZmkKKworaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19jb21tYW5kcyI7IHRoZW4KKyAgZWNobyAiY29uZmlnX2NvbW1hbmRzPVwiJGFjX2NvbmZpZ19jb21tYW5kc1wiIiA+PiRDT05GSUdfU1RBVFVTCitmaQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKworYWNfY3NfdXNhZ2U9IlwKK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZQorY3VycmVudCBjb25maWd1cmF0aW9uLgorCitVc2FnZTogJDAgW09QVElPTlNdIFtGSUxFXS4uLgorCisgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0ICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworICAgICAgLS1yZWNoZWNrICAgIHVwZGF0ZSAkYXNfbWUgYnkgcmVjb25maWd1cmluZyBpbiB0aGUgc2FtZSBjb25kaXRpb25zCisgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKwkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCisgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorCitDb25maWd1cmF0aW9uIGZpbGVzOgorJGNvbmZpZ19maWxlcworCitDb25maWd1cmF0aW9uIGhlYWRlcnM6CiskY29uZmlnX2hlYWRlcnMKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvY29uZkBnbnUub3JnPi4iCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK2FjX2NzX3ZlcnNpb249IlxcCitjb25maWcuc3RhdHVzCitjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTksCisgIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorCitDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCitzcmNkaXI9JHNyY2RpcgorX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorIyBJZiBubyBmaWxlIGFyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIsIHRoZW4gd2UgbmVlZCB0byBwcm92aWRlIGRlZmF1bHQKKyMgdmFsdWUuICBCeSB3ZSBuZWVkIHRvIGtub3cgaWYgZmlsZXMgd2VyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCithY19uZWVkX2RlZmF1bHRzPToKK3doaWxlIHRlc3QgJCMgIT0gMAorZG8KKyAgY2FzZSAkMSBpbgorICAtLSo9KikKKyAgICBhY19vcHRpb249YGV4cHIgIngkMSIgOiAneFwoW149XSpcKT0nYAorICAgIGFjX29wdGFyZz1gZXhwciAieCQxIiA6ICd4W149XSo9XCguKlwpJ2AKKyAgICBhY19zaGlmdD06CisgICAgOzsKKyAgLSopCisgICAgYWNfb3B0aW9uPSQxCisgICAgYWNfb3B0YXJnPSQyCisgICAgYWNfc2hpZnQ9c2hpZnQKKyAgICA7OworICAqKSAjIFRoaXMgaXMgbm90IGFuIG9wdGlvbiwgc28gdGhlIHVzZXIgaGFzIHByb2JhYmx5IGdpdmVuIGV4cGxpY2l0CisgICAgICMgYXJndW1lbnRzLgorICAgICBhY19vcHRpb249JDEKKyAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIGVzYWMKKworICBjYXNlICRhY19vcHRpb24gaW4KKyAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisgIC1yZWNoZWNrIHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJlIHwgLS1yKQorICAgIGFjX2NzX3JlY2hlY2s9OiA7OworICAtLXZlcnNpb24gfCAtLXZlcnMqIHwgLVYgKQorICAgIGVjaG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCAwIDs7CisgIC0taGUgfCAtLWgpCisgICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKKyAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCisgICAgZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCAwIDs7CisgIC0tZGVidWcgfCAtLWQqIHwgLWQgKQorICAgIGRlYnVnPTogOzsKKyAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkKKyAgICAkYWNfc2hpZnQKKyAgICBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgJGFjX29wdGFyZyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQorICAgICRhY19zaGlmdAorICAgIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgJGFjX29wdGFyZyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwgfCAtLXNpIHwgLS1zKQorICAgIGFjX2NzX3NpbGVudD06IDs7CisKKyAgIyBUaGlzIGlzIGFuIGVycm9yLgorICAtKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworCisgICopIGFjX2NvbmZpZ190YXJnZXRzPSIkYWNfY29uZmlnX3RhcmdldHMgJDEiIDs7CisKKyAgZXNhYworICBzaGlmdAorZG9uZQorCithY19jb25maWd1cmVfZXh0cmFfYXJncz0KKworaWYgJGFjX2NzX3NpbGVudDsgdGhlbgorICBleGVjIDY+L2Rldi9udWxsCisgIGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQiCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCitpZiBcJGFjX2NzX3JlY2hlY2s7IHRoZW4KKyAgZWNobyAicnVubmluZyAkU0hFTEwgJDAgIiAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAiIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIiA+JjYKKyAgZXhlYyAkU0hFTEwgJDAgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KK2ZpCisKK19BQ0VPRgorCisKKworCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCitkbworICBjYXNlICIkYWNfY29uZmlnX3RhcmdldCIgaW4KKyAgIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCisgICJNYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisgICJjb25maWcuaCIgKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGNvbmZpZy5oIiA7OworICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIGVzYWMKK2RvbmUKKworIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAorIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCisjIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJlY2F1c2Ugb2YgYW4gZXh0cmVtZWx5CisjIGJpemFycmUgYnVnIG9uIFN1bk9TIDQuMS4zLgoraWYgJGFjX25lZWRfZGVmYXVsdHM7IHRoZW4KKyAgdGVzdCAiJHtDT05GSUdfRklMRVMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0ZJTEVTPSRjb25maWdfZmlsZXMKKyAgdGVzdCAiJHtDT05GSUdfSEVBREVSUytzZXR9IiA9IHNldCB8fCBDT05GSUdfSEVBREVSUz0kY29uZmlnX2hlYWRlcnMKK2ZpCisKKyMgSGF2ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIGNvbnZlbmllbmNlLiAgTWFrZSBpdCBpbiB0aGUgYnVpbGQgdHJlZQorIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gdG8gcHV0IGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgYW5kIGhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCiskZGVidWcgfHwKK3sKKyAgdHJhcCAnZXhpdF9zdGF0dXM9JD87IHJtIC1yZiAkdG1wICYmIGV4aXQgJGV4aXRfc3RhdHVzJyAwCisgIHRyYXAgJ3sgKGV4aXQgMSk7IGV4aXQgMTsgfScgMSAyIDEzIDE1Cit9CisKKyMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorCit7CisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgLXEgIi4vY29uZnN0YXRYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYKKyAgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIKK30gIHx8Cit7CisgIHRtcD0uL2NvbmZzdGF0JCQtJFJBTkRPTQorICAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApCit9IHx8Cit7CisgICBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Cit9CisKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorCisjCisjIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIworCisjIE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHNjcmlwdHMgaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aGVuIC4vY29uZmlnLnN0YXR1cyBjb25maWcuaAoraWYgdGVzdCAtbiAiXCRDT05GSUdfRklMRVMiOyB0aGVuCisgICMgUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIGEgc2VkIHN1YnN0IGluIGNvbmZpZy5zdGF0dXMuCisgIHNlZCAncy8sQC9AQC87IHMvQCwvQEAvOyBzLyw7dCB0XCQvQDt0IHQvOyAvQDt0IHRcJC9zL1tcXFxcJixdL1xcXFwmL2c7CisgICBzL0BALyxALzsgcy9AQC9ALC87IHMvQDt0IHRcJC8sO3QgdC8nID5cJHRtcC9zdWJzLnNlZCA8PFxcQ0VPRgorcyxAU0hFTExALCRTSEVMTCw7dCB0CitzLEBQQVRIX1NFUEFSQVRPUkAsJFBBVEhfU0VQQVJBVE9SLDt0IHQKK3MsQFBBQ0tBR0VfTkFNRUAsJFBBQ0tBR0VfTkFNRSw7dCB0CitzLEBQQUNLQUdFX1RBUk5BTUVALCRQQUNLQUdFX1RBUk5BTUUsO3QgdAorcyxAUEFDS0FHRV9WRVJTSU9OQCwkUEFDS0FHRV9WRVJTSU9OLDt0IHQKK3MsQFBBQ0tBR0VfU1RSSU5HQCwkUEFDS0FHRV9TVFJJTkcsO3QgdAorcyxAUEFDS0FHRV9CVUdSRVBPUlRALCRQQUNLQUdFX0JVR1JFUE9SVCw7dCB0CitzLEBleGVjX3ByZWZpeEAsJGV4ZWNfcHJlZml4LDt0IHQKK3MsQHByZWZpeEAsJHByZWZpeCw7dCB0CitzLEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQCwkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSw7dCB0CitzLEBiaW5kaXJALCRiaW5kaXIsO3QgdAorcyxAc2JpbmRpckAsJHNiaW5kaXIsO3QgdAorcyxAbGliZXhlY2RpckAsJGxpYmV4ZWNkaXIsO3QgdAorcyxAZGF0YWRpckAsJGRhdGFkaXIsO3QgdAorcyxAc3lzY29uZmRpckAsJHN5c2NvbmZkaXIsO3QgdAorcyxAc2hhcmVkc3RhdGVkaXJALCRzaGFyZWRzdGF0ZWRpciw7dCB0CitzLEBsb2NhbHN0YXRlZGlyQCwkbG9jYWxzdGF0ZWRpciw7dCB0CitzLEBsaWJkaXJALCRsaWJkaXIsO3QgdAorcyxAaW5jbHVkZWRpckAsJGluY2x1ZGVkaXIsO3QgdAorcyxAb2xkaW5jbHVkZWRpckAsJG9sZGluY2x1ZGVkaXIsO3QgdAorcyxAaW5mb2RpckAsJGluZm9kaXIsO3QgdAorcyxAbWFuZGlyQCwkbWFuZGlyLDt0IHQKK3MsQGJ1aWxkX2FsaWFzQCwkYnVpbGRfYWxpYXMsO3QgdAorcyxAaG9zdF9hbGlhc0AsJGhvc3RfYWxpYXMsO3QgdAorcyxAdGFyZ2V0X2FsaWFzQCwkdGFyZ2V0X2FsaWFzLDt0IHQKK3MsQERFRlNALCRERUZTLDt0IHQKK3MsQEVDSE9fQ0AsJEVDSE9fQyw7dCB0CitzLEBFQ0hPX05ALCRFQ0hPX04sO3QgdAorcyxARUNIT19UQCwkRUNIT19ULDt0IHQKK3MsQExJQlNALCRMSUJTLDt0IHQKK3MsQENDQCwkQ0MsO3QgdAorcyxAQ0ZMQUdTQCwkQ0ZMQUdTLDt0IHQKK3MsQExERkxBR1NALCRMREZMQUdTLDt0IHQKK3MsQENQUEZMQUdTQCwkQ1BQRkxBR1MsO3QgdAorcyxAYWNfY3RfQ0NALCRhY19jdF9DQyw7dCB0CitzLEBFWEVFWFRALCRFWEVFWFQsO3QgdAorcyxAT0JKRVhUQCwkT0JKRVhULDt0IHQKK3MsQFNFVF9NQUtFQCwkU0VUX01BS0UsO3QgdAorcyxATERALCRMRCw7dCB0CitzLEBidWlsZEAsJGJ1aWxkLDt0IHQKK3MsQGJ1aWxkX2NwdUAsJGJ1aWxkX2NwdSw7dCB0CitzLEBidWlsZF92ZW5kb3JALCRidWlsZF92ZW5kb3IsO3QgdAorcyxAYnVpbGRfb3NALCRidWlsZF9vcyw7dCB0CitzLEBob3N0QCwkaG9zdCw7dCB0CitzLEBob3N0X2NwdUAsJGhvc3RfY3B1LDt0IHQKK3MsQGhvc3RfdmVuZG9yQCwkaG9zdF92ZW5kb3IsO3QgdAorcyxAaG9zdF9vc0AsJGhvc3Rfb3MsO3QgdAorcyxAQVJALCRBUiw7dCB0CitzLEBhY19jdF9BUkAsJGFjX2N0X0FSLDt0IHQKK3MsQFJBTkxJQkAsJFJBTkxJQiw7dCB0CitzLEBhY19jdF9SQU5MSUJALCRhY19jdF9SQU5MSUIsO3QgdAorcyxAU1RSSVBALCRTVFJJUCw7dCB0CitzLEBhY19jdF9TVFJJUEAsJGFjX2N0X1NUUklQLDt0IHQKK3MsQElOU1RBTExALCRJTlNUQUxMLDt0IHQKK3MsQGFjX2N0X0lOU1RBTExALCRhY19jdF9JTlNUQUxMLDt0IHQKK3MsQENQUEAsJENQUCw7dCB0CitzLEBFR1JFUEAsJEVHUkVQLDt0IHQKK3MsQExJQk9CSlNALCRMSUJPQkpTLDt0IHQKK3MsQExUTElCT0JKU0AsJExUTElCT0JKUyw7dCB0CitDRU9GCisKK19BQ0VPRgorCisgIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorICAjIFNwbGl0IHRoZSBzdWJzdGl0dXRpb25zIGludG8gYml0ZS1zaXplZCBwaWVjZXMgZm9yIHNlZHMgd2l0aAorICAjIHNtYWxsIGNvbW1hbmQgbnVtYmVyIGxpbWl0cywgbGlrZSBvbiBEaWdpdGFsIE9TRi8xIGFuZCBIUC1VWC4KKyAgYWNfbWF4X3NlZF9saW5lcz00OAorICBhY19zZWRfZnJhZz0xICMgTnVtYmVyIG9mIGN1cnJlbnQgZmlsZS4KKyAgYWNfYmVnPTEgIyBGaXJzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCisgIGFjX2VuZD0kYWNfbWF4X3NlZF9saW5lcyAjIExpbmUgYWZ0ZXIgbGFzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCisgIGFjX21vcmVfbGluZXM9OgorICBhY19zZWRfY21kcz0KKyAgd2hpbGUgJGFjX21vcmVfbGluZXM7IGRvCisgICAgaWYgdGVzdCAkYWNfYmVnIC1ndCAxOyB0aGVuCisgICAgICBzZWQgIjEsJHthY19iZWd9ZDsgJHthY19lbmR9cSIgJHRtcC9zdWJzLnNlZCA+JHRtcC9zdWJzLmZyYWcKKyAgICBlbHNlCisgICAgICBzZWQgIiR7YWNfZW5kfXEiICR0bXAvc3Vicy5zZWQgPiR0bXAvc3Vicy5mcmFnCisgICAgZmkKKyAgICBpZiB0ZXN0ICEgLXMgJHRtcC9zdWJzLmZyYWc7IHRoZW4KKyAgICAgIGFjX21vcmVfbGluZXM9ZmFsc2UKKyAgICBlbHNlCisgICAgICAjIFRoZSBwdXJwb3NlIG9mIHRoZSBsYWJlbCBhbmQgb2YgdGhlIGJyYW5jaGluZyBjb25kaXRpb24gaXMgdG8KKyAgICAgICMgc3BlZWQgdXAgdGhlIHNlZCBwcm9jZXNzaW5nIChpZiB0aGVyZSBhcmUgbm8gYEAnIGF0IGFsbCwgdGhlcmUKKyAgICAgICMgaXMgbm8gbmVlZCB0byBicm93c2UgYW55IG9mIHRoZSBzdWJzdGl0dXRpb25zKS4KKyAgICAgICMgVGhlc2UgYXJlIHRoZSB0d28gZXh0cmEgc2VkIGNvbW1hbmRzIG1lbnRpb25lZCBhYm92ZS4KKyAgICAgIChlY2hvICc6dAorICAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiJyAmJiBjYXQgJHRtcC9zdWJzLmZyYWcpID4kdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZAorICAgICAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgorCWFjX3NlZF9jbWRzPSJzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCisgICAgICBlbHNlCisJYWNfc2VkX2NtZHM9IiRhY19zZWRfY21kcyB8IHNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKyAgICAgIGZpCisgICAgICBhY19zZWRfZnJhZz1gZXhwciAkYWNfc2VkX2ZyYWcgKyAxYAorICAgICAgYWNfYmVnPSRhY19lbmQKKyAgICAgIGFjX2VuZD1gZXhwciAkYWNfZW5kICsgJGFjX21heF9zZWRfbGluZXNgCisgICAgZmkKKyAgZG9uZQorICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCisgICAgYWNfc2VkX2NtZHM9Y2F0CisgIGZpCitmaSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitmb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfRklMRVM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQorICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCisJY2F0ID4kdG1wL3N0ZGluCisJYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAqOiogKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKKyAgZXNhYworCisgICMgQ29tcHV0ZSBAc3JjZGlyQCwgQHRvcF9zcmNkaXJALCBhbmQgQElOU1RBTExAIGZvciBzdWJkaXJlY3Rvcmllcy4KKyAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wICIkYWNfZGlyIgorICBlbHNlCisgICAgYXNfZGlyPSIkYWNfZGlyIgorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCisgIGFjX2J1aWxkZGlyPS4KKworaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgorICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCisgICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKK2Vsc2UKKyAgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyPQorZmkKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCisgICAgICAgYWNfdG9wX3NyY2Rpcj0uCisgICAgZWxzZQorICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKKyAgICBmaSA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIHBhdGguCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBwYXRoLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworZXNhYworCisjIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKKyMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCitjYXNlIGBwd2RgIGluCisuKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKyopCisgIGNhc2UgIiRhY19kaXIiIGluCisgIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisgICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OworICBlc2FjOzsKK2VzYWMKK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKyopCisgIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgorICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisgICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKKyAgZXNhYzs7Citlc2FjCitjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisqKQorICBjYXNlICRhY19zcmNkaXIgaW4KKyAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7CisgIGVzYWM7OworZXNhYworY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisqKQorICBjYXNlICRhY190b3Bfc3JjZGlyIGluCisgIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKyAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7CisgIGVzYWM7OworZXNhYworCisKKworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKyAgICBybSAtZiAiJGFjX2ZpbGUiCisgIGZpCisgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KKyAgaWYgdGVzdCB4IiRhY19maWxlIiA9IHgtOyB0aGVuCisgICAgY29uZmlndXJlX2lucHV0PQorICBlbHNlCisgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICIKKyAgZmkKKyAgY29uZmlndXJlX2lucHV0PSRjb25maWd1cmVfaW5wdXQiR2VuZXJhdGVkIGZyb20gYGVjaG8gJGFjX2ZpbGVfaW4gfAorCQkJCSAgICAgc2VkICdzLC4qLywsJ2AgYnkgY29uZmlndXJlLiIKKworICAjIEZpcnN0IGxvb2sgZm9yIHRoZSBpbnB1dCBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZSwgb3RoZXJ3aXNlIGluIHRoZQorICAjIHNyYyB0cmVlLgorICBhY19maWxlX2lucHV0cz1gSUZTPToKKyAgICBmb3IgZiBpbiAkYWNfZmlsZV9pbjsgZG8KKyAgICAgIGNhc2UgJGYgaW4KKyAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OworICAgICAgW1xcLyRdKikKKwkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKwkgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJIGVjaG8gIiRmIjs7CisgICAgICAqKSAjIFJlbGF0aXZlCisJIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorCSAgICMgQnVpbGQgdHJlZQorCSAgIGVjaG8gIiRmIgorCSBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCisJICAgIyBTb3VyY2UgdHJlZQorCSAgIGVjaG8gIiRzcmNkaXIvJGYiCisJIGVsc2UKKwkgICAjIC9kZXYvbnVsbCB0cmVlCisJICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkgZmk7OworICAgICAgZXNhYworICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorICBzZWQgIiRhY192cHN1YgorJGV4dHJhc3ViCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorOnQKKy9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKK3MsQGNvbmZpZ3VyZV9pbnB1dEAsJGNvbmZpZ3VyZV9pbnB1dCw7dCB0CitzLEBzcmNkaXJALCRhY19zcmNkaXIsO3QgdAorcyxAYWJzX3NyY2RpckAsJGFjX2Fic19zcmNkaXIsO3QgdAorcyxAdG9wX3NyY2RpckAsJGFjX3RvcF9zcmNkaXIsO3QgdAorcyxAYWJzX3RvcF9zcmNkaXJALCRhY19hYnNfdG9wX3NyY2Rpciw7dCB0CitzLEBidWlsZGRpckAsJGFjX2J1aWxkZGlyLDt0IHQKK3MsQGFic19idWlsZGRpckAsJGFjX2Fic19idWlsZGRpciw7dCB0CitzLEB0b3BfYnVpbGRkaXJALCRhY190b3BfYnVpbGRkaXIsO3QgdAorcyxAYWJzX3RvcF9idWlsZGRpckAsJGFjX2Fic190b3BfYnVpbGRkaXIsO3QgdAorIiAkYWNfZmlsZV9pbnB1dHMgfCAoZXZhbCAiJGFjX3NlZF9jbWRzIikgPiR0bXAvb3V0CisgIHJtIC1mICR0bXAvc3RkaW4KKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgIG12ICR0bXAvb3V0ICRhY19maWxlCisgIGVsc2UKKyAgICBjYXQgJHRtcC9vdXQKKyAgICBybSAtZiAkdG1wL291dAorICBmaQorCitkb25lCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorCisjCisjIENPTkZJR19IRUFERVIgc2VjdGlvbi4KKyMKKworIyBUaGVzZSBzZWQgY29tbWFuZHMgYXJlIHBhc3NlZCB0byBzZWQgYXMgIkEgTkFNRSBCIE5BTUUgQyBWQUxVRSBEIiwgd2hlcmUKKyMgTkFNRSBpcyB0aGUgY3BwIG1hY3JvIGJlaW5nIGRlZmluZWQgYW5kIFZBTFVFIGlzIHRoZSB2YWx1ZSBpdCBpcyBiZWluZyBnaXZlbi4KKyMKKyMgYWNfZCBzZXRzIHRoZSB2YWx1ZSBpbiAiI2RlZmluZSBOQU1FIFZBTFVFIiBsaW5lcy4KK2FjX2RBPSdzLF5cKFsJIF0qXCkjXChbCSBdKmRlZmluZVsJIF1bCSBdKlwpJworYWNfZEI9J1sJIF0uKiQsXDEjXDInCithY19kQz0nICcKK2FjX2REPScsO3QnCisjIGFjX3UgdHVybnMgIiN1bmRlZiBOQU1FIiB3aXRob3V0IHRyYWlsaW5nIGJsYW5rcyBpbnRvICIjZGVmaW5lIE5BTUUgVkFMVUUiLgorYWNfdUE9J3MsXlwoWwkgXSpcKSNcKFsJIF0qXCl1bmRlZlwoWwkgXVsJIF0qXCknCithY191Qj0nJCxcMSNcMmRlZmluZVwzJworYWNfdUM9JyAnCithY191RD0nLDt0JworCitmb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfSEVBREVSUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCisgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KKwljYXQgPiR0bXAvc3RkaW4KKwlhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OworICBlc2FjCisKKyAgdGVzdCB4IiRhY19maWxlIiAhPSB4LSAmJiB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorCisgICMgRmlyc3QgbG9vayBmb3IgdGhlIGlucHV0IGZpbGVzIGluIHRoZSBidWlsZCB0cmVlLCBvdGhlcndpc2UgaW4gdGhlCisgICMgc3JjIHRyZWUuCisgIGFjX2ZpbGVfaW5wdXRzPWBJRlM9OgorICAgIGZvciBmIGluICRhY19maWxlX2luOyBkbworICAgICAgY2FzZSAkZiBpbgorICAgICAgLSkgZWNobyAkdG1wL3N0ZGluIDs7CisgICAgICBbXFwvJF0qKQorCSAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQorCSB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkgIyBEbyBxdW90ZSAkZiwgdG8gcHJldmVudCBET1MgcGF0aHMgZnJvbSBiZWluZyBJRlMnZC4KKwkgZWNobyAiJGYiOzsKKyAgICAgICopICMgUmVsYXRpdmUKKwkgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCisJICAgIyBCdWlsZCB0cmVlCisJICAgZWNobyAiJGYiCisJIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KKwkgICAjIFNvdXJjZSB0cmVlCisJICAgZWNobyAiJHNyY2Rpci8kZiIKKwkgZWxzZQorCSAgICMgL2Rldi9udWxsIHRyZWUKKwkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCSBmaTs7CisgICAgICBlc2FjCisgICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisgICMgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZXMuCisgIHNlZCAncy9bCSBdKiQvLycgJGFjX2ZpbGVfaW5wdXRzID4kdG1wL2luCisKK19BQ0VPRgorCisjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gdHdvIHNlZCBzY3JpcHRzLCBgY29uZnRlc3QuZGVmaW5lcycgYW5kCisjIGBjb25mdGVzdC51bmRlZnMnLCB0aGF0IHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8KKyMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4gIFRoZSBmaXJzdCBoYW5kbGVzIGAjZGVmaW5lJworIyB0ZW1wbGF0ZXMsIGFuZCB0aGUgc2Vjb25kIGAjdW5kZWYnIHRlbXBsYXRlcy4KKyMgQW5kIGZpcnN0OiBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4KKyMgY29uZmlnLnN0YXR1cy4gIFByb3RlY3QgYWdhaW5zdCBiZWluZyBpbiBhbiB1bnF1b3RlZCBoZXJlIGRvY3VtZW50CisjIGluIGNvbmZpZy5zdGF0dXMuCitybSAtZiBjb25mdGVzdC5kZWZpbmVzIGNvbmZ0ZXN0LnVuZGVmcworIyBVc2luZyBhIGhlcmUgZG9jdW1lbnQgaW5zdGVhZCBvZiBhIHN0cmluZyByZWR1Y2VzIHRoZSBxdW90aW5nIG5pZ2h0bWFyZS4KKyMgUHV0dGluZyBjb21tZW50cyBpbiBzZWQgc2NyaXB0cyBpcyBub3QgcG9ydGFibGUuCisjCisjIGBlbmQnIGlzIHVzZWQgdG8gYXZvaWQgdGhhdCB0aGUgc2Vjb25kIG1haW4gc2VkIGNvbW1hbmQgKG1lYW50IGZvcgorIyAwLWFyeSBDUFAgbWFjcm9zKSBhcHBsaWVzIHRvIG4tYXJ5IG1hY3JvIGRlZmluaXRpb25zLgorIyBTZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24gZm9yIGBjbGVhcicuCitjYXQgPmNvbmZkZWYyc2VkLnNlZCA8PFxfQUNFT0YKK3MvW1xcJixdL1xcJi9nCitzLFtcXCRgXSxcXCYsZwordCBjbGVhcgorOiBjbGVhcgorcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSAoXVteCSAoXSpcKVwoKFteKV0qKVwpWwkgXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxXDIke2FjX2RDfVwzJHthY19kRH0sZ3AKK3QgZW5kCitzLF5bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIF1bXgkgXSpcKVsJIF0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMSR7YWNfZEN9XDIke2FjX2REfSxncAorOiBlbmQKK19BQ0VPRgorIyBJZiBzb21lIG1hY3JvcyB3ZXJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwgdGltZXMKKyMgdGhlIHNhbWUgI2RlZmluZXMsIHdoaWNoIGlzIHVzZWxlc3MuICBOZXZlcnRoZWxlc3MsIHdlIG1heSBub3Qgd2FudCB0bworIyBzb3J0IHRoZW0sIHNpbmNlIHdlIHdhbnQgdGhlICpsYXN0KiBBQy1ERUZJTkUgdG8gYmUgaG9ub3JlZC4KK3VuaXEgY29uZmRlZnMuaCB8IHNlZCAtbiAtZiBjb25mZGVmMnNlZC5zZWQgPmNvbmZ0ZXN0LmRlZmluZXMKK3NlZCAncy9hY19kL2FjX3UvZycgY29uZnRlc3QuZGVmaW5lcyA+Y29uZnRlc3QudW5kZWZzCitybSAtZiBjb25mZGVmMnNlZC5zZWQKKworIyBUaGlzIHNlZCBjb21tYW5kIHJlcGxhY2VzICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvcgorIyBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCitjYXQgPj5jb25mdGVzdC51bmRlZnMgPDxcX0FDRU9GCitzLF5bCSBdKiNbCSBdKnVuZGVmWwkgXVsJIF0qW2EtekEtWl9dW2EtekEtWl8wLTldKiwvKiAmICovLAorX0FDRU9GCisKKyMgQnJlYWsgdXAgY29uZnRlc3QuZGVmaW5lcyBiZWNhdXNlIHNvbWUgc2hlbGxzIGhhdmUgYSBsaW1pdCBvbiB0aGUgc2l6ZQorIyBvZiBoZXJlIGRvY3VtZW50cywgYW5kIG9sZCBzZWRzIGhhdmUgc21hbGwgbGltaXRzIHRvbyAoMTAwIGNtZHMpLgorZWNobyAnICAjIEhhbmRsZSBhbGwgdGhlICNkZWZpbmUgdGVtcGxhdGVzIG9ubHkgaWYgbmVjZXNzYXJ5LicgPj4kQ09ORklHX1NUQVRVUworZWNobyAnICBpZiBncmVwICJeWwkgXSojWwkgXSpkZWZpbmUiICR0bXAvaW4gPi9kZXYvbnVsbDsgdGhlbicgPj4kQ09ORklHX1NUQVRVUworZWNobyAnICAjIElmIHRoZXJlIGFyZSBubyBkZWZpbmVzLCB3ZSBtYXkgaGF2ZSBhbiBlbXB0eSBpZi9maScgPj4kQ09ORklHX1NUQVRVUworZWNobyAnICA6JyA+PiRDT05GSUdfU1RBVFVTCitybSAtZiBjb25mdGVzdC50YWlsCit3aGlsZSBncmVwIC4gY29uZnRlc3QuZGVmaW5lcyA+L2Rldi9udWxsCitkbworICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gJHRtcC9kZWZpbmVzLnNlZC4KKyAgZWNobyAnICBjYXQgPiR0bXAvZGVmaW5lcy5zZWQgPDxDRU9GJyA+PiRDT05GSUdfU1RBVFVTCisgICMgU3BlZWQgdXA6IGRvbid0IGNvbnNpZGVyIHRoZSBub24gYCNkZWZpbmUnIGxpbmVzLgorICBlY2hvICcvXlsJIF0qI1sJIF0qZGVmaW5lLyFiJyA+PiRDT05GSUdfU1RBVFVTCisgICMgV29yayBhcm91bmQgdGhlIGZvcmdldC10by1yZXNldC10aGUtZmxhZyBidWcuCisgIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCisgIGVjaG8gJzogY2xyJyA+PiRDT05GSUdfU1RBVFVTCisgIHNlZCAke2FjX21heF9oZXJlX2xpbmVzfXEgY29uZnRlc3QuZGVmaW5lcyA+PiRDT05GSUdfU1RBVFVTCisgIGVjaG8gJ0NFT0YKKyAgc2VkIC1mICR0bXAvZGVmaW5lcy5zZWQgJHRtcC9pbiA+JHRtcC9vdXQKKyAgcm0gLWYgJHRtcC9pbgorICBtdiAkdG1wL291dCAkdG1wL2luCisnID4+JENPTkZJR19TVEFUVVMKKyAgc2VkIDEsJHthY19tYXhfaGVyZV9saW5lc31kIGNvbmZ0ZXN0LmRlZmluZXMgPmNvbmZ0ZXN0LnRhaWwKKyAgcm0gLWYgY29uZnRlc3QuZGVmaW5lcworICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LmRlZmluZXMKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LmRlZmluZXMKK2VjaG8gJyAgZmkgIyBncmVwJyA+PiRDT05GSUdfU1RBVFVTCitlY2hvID4+JENPTkZJR19TVEFUVVMKKworIyBCcmVhayB1cCBjb25mdGVzdC51bmRlZnMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24gdGhlIHNpemUKKyMgb2YgaGVyZSBkb2N1bWVudHMsIGFuZCBvbGQgc2VkcyBoYXZlIHNtYWxsIGxpbWl0cyB0b28gKDEwMCBjbWRzKS4KK2VjaG8gJyAgIyBIYW5kbGUgYWxsIHRoZSAjdW5kZWYgdGVtcGxhdGVzJyA+PiRDT05GSUdfU1RBVFVTCitybSAtZiBjb25mdGVzdC50YWlsCit3aGlsZSBncmVwIC4gY29uZnRlc3QudW5kZWZzID4vZGV2L251bGwKK2RvCisgICMgV3JpdGUgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byAkdG1wL3VuZGVmcy5zZWQuCisgIGVjaG8gJyAgY2F0ID4kdG1wL3VuZGVmcy5zZWQgPDxDRU9GJyA+PiRDT05GSUdfU1RBVFVTCisgICMgU3BlZWQgdXA6IGRvbid0IGNvbnNpZGVyIHRoZSBub24gYCN1bmRlZicKKyAgZWNobyAnL15bCSBdKiNbCSBdKnVuZGVmLyFiJyA+PiRDT05GSUdfU1RBVFVTCisgICMgV29yayBhcm91bmQgdGhlIGZvcmdldC10by1yZXNldC10aGUtZmxhZyBidWcuCisgIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCisgIGVjaG8gJzogY2xyJyA+PiRDT05GSUdfU1RBVFVTCisgIHNlZCAke2FjX21heF9oZXJlX2xpbmVzfXEgY29uZnRlc3QudW5kZWZzID4+JENPTkZJR19TVEFUVVMKKyAgZWNobyAnQ0VPRgorICBzZWQgLWYgJHRtcC91bmRlZnMuc2VkICR0bXAvaW4gPiR0bXAvb3V0CisgIHJtIC1mICR0bXAvaW4KKyAgbXYgJHRtcC9vdXQgJHRtcC9pbgorJyA+PiRDT05GSUdfU1RBVFVTCisgIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC51bmRlZnMgPmNvbmZ0ZXN0LnRhaWwKKyAgcm0gLWYgY29uZnRlc3QudW5kZWZzCisgIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QudW5kZWZzCitkb25lCitybSAtZiBjb25mdGVzdC51bmRlZnMKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KKyAgaWYgdGVzdCB4IiRhY19maWxlIiA9IHgtOyB0aGVuCisgICAgZWNobyAiLyogR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gICovIiA+JHRtcC9jb25maWcuaAorICBlbHNlCisgICAgZWNobyAiLyogJGFjX2ZpbGUuICBHZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgKi8iID4kdG1wL2NvbmZpZy5oCisgIGZpCisgIGNhdCAkdG1wL2luID4+JHRtcC9jb25maWcuaAorICBybSAtZiAkdG1wL2luCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICBpZiBkaWZmICRhY19maWxlICR0bXAvY29uZmlnLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNQorZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9CisgICAgZWxzZQorICAgICAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCAiJGFjX2RpciIKKyAgZWxzZQorICAgIGFzX2Rpcj0iJGFjX2RpciIKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworICAgICAgcm0gLWYgJGFjX2ZpbGUKKyAgICAgIG12ICR0bXAvY29uZmlnLmggJGFjX2ZpbGUKKyAgICBmaQorICBlbHNlCisgICAgY2F0ICR0bXAvY29uZmlnLmgKKyAgICBybSAtZiAkdG1wL2NvbmZpZy5oCisgIGZpCitkb25lCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisKK3sgKGV4aXQgMCk7IGV4aXQgMDsgfQorX0FDRU9GCitjaG1vZCAreCAkQ09ORklHX1NUQVRVUworYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKworCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KKyMgVW5mb3J0dW5hdGVseSwgb24gRE9TIHRoaXMgZmFpbHMsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdCBvcGVuCisjIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKKyMgb3V0cHV0IGlzIHNpbXBseSBkaXNjYXJkZWQuICBTbyB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsCisjIGVmZmVjdGl2ZWx5IGNsb3NpbmcgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kCisjIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKKyMgbmVlZCB0byBtYWtlIHRoZSBGRCBhdmFpbGFibGUgYWdhaW4uCitpZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KKyAgYWNfY3Nfc3VjY2Vzcz06CisgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0KKyAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKKyAgZXhlYyA1Pi9kZXYvbnVsbAorICAkU0hFTEwgJENPTkZJR19TVEFUVVMgJGFjX2NvbmZpZ19zdGF0dXNfYXJncyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCisgIGV4ZWMgNT4+Y29uZmlnLmxvZworICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAorICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CitmaQorCisgICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGxpYnRvbWNyeXB0L01ha2VmaWxlIgorY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KKyMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorIworIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuCisjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMuCisKK19BQ0VPRgorCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIGRvbid0IHB1dCBuZXdsaW5lcyBpbiBjYWNoZSB2YXJpYWJsZXMnIHZhbHVlcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KK3sKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSBgKGFjX3NwYWNlPScgJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KKyAgICAqYWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiBcCisJInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICA7OworICAgIGVzYWM7Cit9IHwKKyAgc2VkICcKKyAgICAgdCBjbGVhcgorICAgICA6IGNsZWFyCisgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKyAgICAgdCBlbmQKKyAgICAgL15hY19jdl9lbnYvIXMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6IGVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgJGNhY2hlX2ZpbGUgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgIGlmIHRlc3QgLXcgJGNhY2hlX2ZpbGU7IHRoZW4KKyAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJiBlY2hvICJ1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQorICBlbHNlCisgICAgZWNobyAibm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiCisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisKK3Rlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgordGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworCisjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlICQoc3JjZGlyKSwKKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCisjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQorIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgoraWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKyAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPS97CitzLzoqXCQoc3JjZGlyKToqLzovOworcy86Klwke3NyY2Rpcn06Ki86LzsKK3MvOipAc3JjZGlyQDoqLzovOworcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvOworcy86KiQvLzsKK3MvXltePV0qPVsJIF0qJC8vOworfScKK2ZpCisKK0RFRlM9LURIQVZFX0NPTkZJR19ICisKK2FjX2xpYm9ianM9CithY19sdGxpYm9ianM9Citmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgorICBhY19pPWBlY2hvICIkYWNfaSIgfAorCSBzZWQgJ3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLydgCisgICMgMi4gQWRkIHRoZW0uCisgIGFjX2xpYm9ianM9IiRhY19saWJvYmpzICRhY19pXCRVLiRhY19vYmpleHQiCisgIGFjX2x0bGlib2Jqcz0iJGFjX2x0bGlib2JqcyAkYWNfaSInJFUubG8nCitkb25lCitMSUJPQkpTPSRhY19saWJvYmpzCisKK0xUTElCT0JKUz0kYWNfbHRsaWJvYmpzCisKKworCis6ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9CithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9CitjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorIyBDb21waWxlciBvdXRwdXQgcHJvZHVjZWQgYnkgY29uZmlndXJlLCB1c2VmdWwgZm9yIGRlYnVnZ2luZworIyBjb25maWd1cmUsIGlzIGluIGNvbmZpZy5sb2cgaWYgaXQgZXhpc3RzLgorCitkZWJ1Zz1mYWxzZQorYWNfY3NfcmVjaGVjaz1mYWxzZQorYWNfY3Nfc2lsZW50PWZhbHNlCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKK2VsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHNldCAtbyBwb3NpeAorZmkKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgYXNfdW5zZXQ9ZmFsc2UKK2ZpCisKKworIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCiskYXNfdW5zZXQgRU5WIE1BSUwgTUFJTFBBVEgKK1BTMT0nJCAnCitQUzI9Jz4gJworUFM0PScrICcKKworIyBOTFMgbnVpc2FuY2VzLgorZm9yIGFzX3ZhciBpbiBcCisgIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCisgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisgIExDX1RFTEVQSE9ORSBMQ19USU1FCitkbworICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgorICBlbHNlCisgICAgJGFzX3Vuc2V0ICRhc192YXIKKyAgZmkKK2RvbmUKKworIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworCisjIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCithc19tZT1gJGFzX2Jhc2VuYW1lICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKSQnIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcL1woXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcL1woXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorCisKKyMgUEFUSCBuZWVkcyBDUiwgYW5kIExJTkVOTyBuZWVkcyBDUiBhbmQgUEFUSC4KKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorCisKKyAgYXNfbGluZW5vXzE9JExJTkVOTworICBhc19saW5lbm9fMj0kTElORU5PCisgIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKKyAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCisgIHRlc3QgIngkYXNfbGluZW5vXzMiICA9ICJ4JGFzX2xpbmVub18yIiAgfHwgeworICAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBwYXRoIGF0IGFsbAorICAjIHJlbGF0aXZlIG9yIG5vdC4KKyAgY2FzZSAkMCBpbgorICAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCitkb25lCisKKyAgICAgICA7OworICBlc2FjCisgICMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyAgIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCisgIGlmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgICBhc19teXNlbGY9JDAKKyAgZmkKKyAgaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGZpCisgIGNhc2UgJENPTkZJR19TSEVMTCBpbgorICAnJykKKyAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KKwkgY2FzZSAkYXNfZGlyIGluCisJIC8qKQorCSAgIGlmICgiJGFzX2Rpci8kYXNfYmFzZSIgLWMgJworICBhc19saW5lbm9fMT0kTElORU5PCisgIGFzX2xpbmVub18yPSRMSU5FTk8KKyAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAorICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKyAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICcpIDI+L2Rldi9udWxsOyB0aGVuCisJICAgICAkYXNfdW5zZXQgQkFTSF9FTlYgfHwgdGVzdCAiJHtCQVNIX0VOVitzZXR9IiAhPSBzZXQgfHwgeyBCQVNIX0VOVj07IGV4cG9ydCBCQVNIX0VOVjsgfQorCSAgICAgJGFzX3Vuc2V0IEVOViB8fCB0ZXN0ICIke0VOVitzZXR9IiAhPSBzZXQgfHwgeyBFTlY9OyBleHBvcnQgRU5WOyB9CisJICAgICBDT05GSUdfU0hFTEw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorCSAgICAgZXhlYyAiJENPTkZJR19TSEVMTCIgIiQwIiAkezErIiRAIn0KKwkgICBmaTs7CisJIGVzYWMKKyAgICAgICBkb25lCitkb25lCis7OworICBlc2FjCisKKyAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTworICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCisgICMgbGluZS1udW1iZXIgbGluZSBiZWZvcmUgZWFjaCBsaW5lOyB0aGUgc2Vjb25kICdzZWQnIGRvZXMgdGhlIHJlYWwKKyAgIyB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoIGxpbmUtbnVtYmVyIGxpbmUKKyAgIyB3aXRoIHRoZSBudW1iZXJlZCBsaW5lLCBhbmQgYXBwZW5kcyB0cmFpbGluZyAnLScgZHVyaW5nCisgICMgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsIGNhc2UgYXQgbGluZSBlbmQuCisgICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQorICAjIHNlY29uZCAnc2VkJyBzY3JpcHQuICBCbGFtZSBMZWUgRS4gTWNNYWhvbiBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisgIHNlZCAnPScgPCRhc19teXNlbGYgfAorICAgIHNlZCAnCisgICAgICBOCisgICAgICBzLCQsLSwKKyAgICAgIDogbG9vcAorICAgICAgcyxeXChbJyRhc19jcl9kaWdpdHMnXSpcKVwoLipcKVskXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dXCksXDFcMlwxXDMsCisgICAgICB0IGxvb3AKKyAgICAgIHMsLSQsLAorICAgICAgcyxeWyckYXNfY3JfZGlnaXRzJ10qXG4sLAorICAgICcgPiRhc19tZS5saW5lbm8gJiYKKyAgY2htb2QgK3ggJGFzX21lLmxpbmVubyB8fAorICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKKyAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKKyAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCisgICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaWJsZSB0byB0aGlzKS4KKyAgLiAuLyRhc19tZS5saW5lbm8KKyAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCisgIGV4aXQKK30KKworCitjYXNlIGBlY2hvICJ0ZXN0aW5nXGMiOyBlY2hvIDEsMiwzYCxgZWNobyAtbiB0ZXN0aW5nOyBlY2hvIDEsMiwzYCBpbgorICAqYyosLW4qKSBFQ0hPX049IEVDSE9fQz0nCisnIEVDSE9fVD0nCScgOzsKKyAgKmMqLCogICkgRUNIT19OPS1uIEVDSE9fQz0gRUNIT19UPSA7OworICAqKSAgICAgICBFQ0hPX049IEVDSE9fQz0nXGMnIEVDSE9fVD0gOzsKK2VzYWMKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitlY2hvID5jb25mJCQuZmlsZQoraWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICMgV2UgY291bGQganVzdCBjaGVjayBmb3IgREpHUFA7IGJ1dCB0aGlzIHRlc3QgYSkgd29ya3MgYikgaXMgbW9yZSBnZW5lcmljCisgICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgorICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KKyAgICAjIERvbid0IHVzZSBsbiBhdCBhbGw7IHdlIGRvbid0IGhhdmUgYW55IGxpbmtzCisgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsc2UKKyAgICBhc19sbl9zPSdsbiAtcycKKyAgZmkKK2VsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2xuX3M9bG4KK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXAnCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKworaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPToKK2Vsc2UKKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgYXNfbWtkaXJfcD1mYWxzZQorZmkKKworYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuCithc19ubD0nCisnCitJRlM9IiAJJGFzX25sIgorCisjIENEUEFUSC4KKyRhc191bnNldCBDRFBBVEgKKworZXhlYyA2PiYxCisKKyMgT3BlbiB0aGUgbG9nIHJlYWwgc29vbiwgdG8ga2VlcCBcJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCisjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKKyMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuICBMb2dnaW5nIC0tdmVyc2lvbiBldGMuIGlzIE9LLgorZXhlYyA1Pj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKKyMjIFJ1bm5pbmcgJGFzX21lLiAjIworX0FTQk9YCit9ID4mNQorY2F0ID4mNSA8PF9DU0VPRgorCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5ICRhc19tZSwgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKworICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCisgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUworICBDT05GSUdfTElOS1MgICAgPSAkQ09ORklHX0xJTktTCisgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKKyAgJCAkMCAkQAorCitfQ1NFT0YKK2VjaG8gIm9uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYCIgPiY1CitlY2hvID4mNQorX0FDRU9GCisKKyMgRmlsZXMgdGhhdCBjb25maWcuc3RhdHVzIHdhcyBtYWRlIGZvci4KK2lmIHRlc3QgLW4gIiRhY19jb25maWdfZmlsZXMiOyB0aGVuCisgIGVjaG8gImNvbmZpZ19maWxlcz1cIiRhY19jb25maWdfZmlsZXNcIiIgPj4kQ09ORklHX1NUQVRVUworZmkKKworaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19oZWFkZXJzIjsgdGhlbgorICBlY2hvICJjb25maWdfaGVhZGVycz1cIiRhY19jb25maWdfaGVhZGVyc1wiIiA+PiRDT05GSUdfU1RBVFVTCitmaQorCitpZiB0ZXN0IC1uICIkYWNfY29uZmlnX2xpbmtzIjsgdGhlbgorICBlY2hvICJjb25maWdfbGlua3M9XCIkYWNfY29uZmlnX2xpbmtzXCIiID4+JENPTkZJR19TVEFUVVMKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY19jb25maWdfY29tbWFuZHMiOyB0aGVuCisgIGVjaG8gImNvbmZpZ19jb21tYW5kcz1cIiRhY19jb25maWdfY29tbWFuZHNcIiIgPj4kQ09ORklHX1NUQVRVUworZmkKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisKK2FjX2NzX3VzYWdlPSJcCitcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGZyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUKK2N1cnJlbnQgY29uZmlndXJhdGlvbi4KKworVXNhZ2U6ICQwIFtPUFRJT05TXSBbRklMRV0uLi4KKworICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCisJCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAtLWhlYWRlcj1GSUxFWzpURU1QTEFURV0KKwkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKworQ29uZmlndXJhdGlvbiBmaWxlczoKKyRjb25maWdfZmlsZXMKKworQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCithY19jc192ZXJzaW9uPSJcXAorY29uZmlnLnN0YXR1cworY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LAorICB3aXRoIG9wdGlvbnMgXFwiYGVjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKKworQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorc3JjZGlyPSRzcmNkaXIKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKyMgSWYgbm8gZmlsZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB0aGVuIHdlIG5lZWQgdG8gcHJvdmlkZSBkZWZhdWx0CisjIHZhbHVlLiAgQnkgd2UgbmVlZCB0byBrbm93IGlmIGZpbGVzIHdlcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorYWNfbmVlZF9kZWZhdWx0cz06Cit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisgIGNhc2UgJDEgaW4KKyAgLS0qPSopCisgICAgYWNfb3B0aW9uPWBleHByICJ4JDEiIDogJ3hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9YGV4cHIgIngkMSIgOiAneFtePV0qPVwoLipcKSdgCisgICAgYWNfc2hpZnQ9OgorICAgIDs7CisgIC0qKQorICAgIGFjX29wdGlvbj0kMQorICAgIGFjX29wdGFyZz0kMgorICAgIGFjX3NoaWZ0PXNoaWZ0CisgICAgOzsKKyAgKikgIyBUaGlzIGlzIG5vdCBhbiBvcHRpb24sIHNvIHRoZSB1c2VyIGhhcyBwcm9iYWJseSBnaXZlbiBleHBsaWNpdAorICAgICAjIGFyZ3VtZW50cy4KKyAgICAgYWNfb3B0aW9uPSQxCisgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICBlc2FjCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICMgSGFuZGxpbmcgb2YgdGhlIG9wdGlvbnMuCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKyAgICBhY19jc19yZWNoZWNrPTogOzsKKyAgLS12ZXJzaW9uIHwgLS12ZXJzKiB8IC1WICkKKyAgICBlY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgMCA7OworICAtLWhlIHwgLS1oKQorICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCisgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIC0taGVscCB8IC0taGVsIHwgLWggKQorICAgIGVjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgMCA7OworICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKKyAgICBkZWJ1Zz06IDs7CisgIC0tZmlsZSB8IC0tZmlsIHwgLS1maSB8IC0tZiApCisgICAgJGFjX3NoaWZ0CisgICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICRhY19vcHRhcmciCisgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKKyAgICAkYWNfc2hpZnQKKyAgICBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTICRhY19vcHRhcmciCisgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKKyAgICBhY19jc19zaWxlbnQ9OiA7OworCisgICMgVGhpcyBpcyBhbiBlcnJvci4KKyAgLSopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKworICAqKSBhY19jb25maWdfdGFyZ2V0cz0iJGFjX2NvbmZpZ190YXJnZXRzICQxIiA7OworCisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9CisKK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKyAgZXhlYyA2Pi9kZXYvbnVsbAorICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgoraWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCisgIGVjaG8gInJ1bm5pbmcgJFNIRUxMICQwICIgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgIiAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiIgPiY2CisgIGV4ZWMgJFNIRUxMICQwICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCitmaQorCitfQUNFT0YKKworCisKKworCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK2ZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cworZG8KKyAgY2FzZSAiJGFjX2NvbmZpZ190YXJnZXQiIGluCisgICMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorICAiTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OworICAibGlidG9tY3J5cHQvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnRvbWNyeXB0L01ha2VmaWxlIiA7OworICAiY29uZmlnLmgiICkgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBjb25maWcuaCIgOzsKKyAgKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICBlc2FjCitkb25lCisKKyMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCitmaQorCisjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIHRvIHB1dCBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCisjIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCBob29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorJGRlYnVnIHx8Cit7CisgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/OyBybSAtcmYgJHRtcCAmJiBleGl0ICRleGl0X3N0YXR1cycgMAorICB0cmFwICd7IChleGl0IDEpOyBleGl0IDE7IH0nIDEgMiAxMyAxNQorfQorCisjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KKworeworICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kIC1xICIuL2NvbmZzdGF0WFhYWFhYIikgMj4vZGV2L251bGxgICYmCisgIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCit9ICB8fAoreworICB0bXA9Li9jb25mc3RhdCQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKQorfSB8fAoreworICAgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorfQorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKworIworIyBDT05GSUdfRklMRVMgc2VjdGlvbi4KKyMKKworIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZSBzY3JpcHRzIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2hlbiAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKK2lmIHRlc3QgLW4gIlwkQ09ORklHX0ZJTEVTIjsgdGhlbgorICAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgorICBzZWQgJ3MvLEAvQEAvOyBzL0AsL0BALzsgcy8sO3QgdFwkL0A7dCB0LzsgL0A7dCB0XCQvcy9bXFxcXCYsXS9cXFxcJi9nOworICAgcy9AQC8sQC87IHMvQEAvQCwvOyBzL0A7dCB0XCQvLDt0IHQvJyA+XCR0bXAvc3Vicy5zZWQgPDxcXENFT0YKK3MsQFNIRUxMQCwkU0hFTEwsO3QgdAorcyxAUEFUSF9TRVBBUkFUT1JALCRQQVRIX1NFUEFSQVRPUiw7dCB0CitzLEBQQUNLQUdFX05BTUVALCRQQUNLQUdFX05BTUUsO3QgdAorcyxAUEFDS0FHRV9UQVJOQU1FQCwkUEFDS0FHRV9UQVJOQU1FLDt0IHQKK3MsQFBBQ0tBR0VfVkVSU0lPTkAsJFBBQ0tBR0VfVkVSU0lPTiw7dCB0CitzLEBQQUNLQUdFX1NUUklOR0AsJFBBQ0tBR0VfU1RSSU5HLDt0IHQKK3MsQFBBQ0tBR0VfQlVHUkVQT1JUQCwkUEFDS0FHRV9CVUdSRVBPUlQsO3QgdAorcyxAZXhlY19wcmVmaXhALCRleGVjX3ByZWZpeCw7dCB0CitzLEBwcmVmaXhALCRwcmVmaXgsO3QgdAorcyxAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAsJHByb2dyYW1fdHJhbnNmb3JtX25hbWUsO3QgdAorcyxAYmluZGlyQCwkYmluZGlyLDt0IHQKK3MsQHNiaW5kaXJALCRzYmluZGlyLDt0IHQKK3MsQGxpYmV4ZWNkaXJALCRsaWJleGVjZGlyLDt0IHQKK3MsQGRhdGFkaXJALCRkYXRhZGlyLDt0IHQKK3MsQHN5c2NvbmZkaXJALCRzeXNjb25mZGlyLDt0IHQKK3MsQHNoYXJlZHN0YXRlZGlyQCwkc2hhcmVkc3RhdGVkaXIsO3QgdAorcyxAbG9jYWxzdGF0ZWRpckAsJGxvY2Fsc3RhdGVkaXIsO3QgdAorcyxAbGliZGlyQCwkbGliZGlyLDt0IHQKK3MsQGluY2x1ZGVkaXJALCRpbmNsdWRlZGlyLDt0IHQKK3MsQG9sZGluY2x1ZGVkaXJALCRvbGRpbmNsdWRlZGlyLDt0IHQKK3MsQGluZm9kaXJALCRpbmZvZGlyLDt0IHQKK3MsQG1hbmRpckAsJG1hbmRpciw7dCB0CitzLEBidWlsZF9hbGlhc0AsJGJ1aWxkX2FsaWFzLDt0IHQKK3MsQGhvc3RfYWxpYXNALCRob3N0X2FsaWFzLDt0IHQKK3MsQHRhcmdldF9hbGlhc0AsJHRhcmdldF9hbGlhcyw7dCB0CitzLEBERUZTQCwkREVGUyw7dCB0CitzLEBFQ0hPX0NALCRFQ0hPX0MsO3QgdAorcyxARUNIT19OQCwkRUNIT19OLDt0IHQKK3MsQEVDSE9fVEAsJEVDSE9fVCw7dCB0CitzLEBMSUJTQCwkTElCUyw7dCB0CitzLEBDQ0AsJENDLDt0IHQKK3MsQENGTEFHU0AsJENGTEFHUyw7dCB0CitzLEBMREZMQUdTQCwkTERGTEFHUyw7dCB0CitzLEBDUFBGTEFHU0AsJENQUEZMQUdTLDt0IHQKK3MsQGFjX2N0X0NDQCwkYWNfY3RfQ0MsO3QgdAorcyxARVhFRVhUQCwkRVhFRVhULDt0IHQKK3MsQE9CSkVYVEAsJE9CSkVYVCw7dCB0CitzLEBTRVRfTUFLRUAsJFNFVF9NQUtFLDt0IHQKK3MsQExEQCwkTEQsO3QgdAorcyxAYnVpbGRALCRidWlsZCw7dCB0CitzLEBidWlsZF9jcHVALCRidWlsZF9jcHUsO3QgdAorcyxAYnVpbGRfdmVuZG9yQCwkYnVpbGRfdmVuZG9yLDt0IHQKK3MsQGJ1aWxkX29zQCwkYnVpbGRfb3MsO3QgdAorcyxAaG9zdEAsJGhvc3QsO3QgdAorcyxAaG9zdF9jcHVALCRob3N0X2NwdSw7dCB0CitzLEBob3N0X3ZlbmRvckAsJGhvc3RfdmVuZG9yLDt0IHQKK3MsQGhvc3Rfb3NALCRob3N0X29zLDt0IHQKK3MsQEFSQCwkQVIsO3QgdAorcyxAYWNfY3RfQVJALCRhY19jdF9BUiw7dCB0CitzLEBSQU5MSUJALCRSQU5MSUIsO3QgdAorcyxAYWNfY3RfUkFOTElCQCwkYWNfY3RfUkFOTElCLDt0IHQKK3MsQFNUUklQQCwkU1RSSVAsO3QgdAorcyxAYWNfY3RfU1RSSVBALCRhY19jdF9TVFJJUCw7dCB0CitzLEBJTlNUQUxMQCwkSU5TVEFMTCw7dCB0CitzLEBhY19jdF9JTlNUQUxMQCwkYWNfY3RfSU5TVEFMTCw7dCB0CitzLEBDUFBALCRDUFAsO3QgdAorcyxARUdSRVBALCRFR1JFUCw7dCB0CitzLEBMSUJPQkpTQCwkTElCT0JKUyw7dCB0CitzLEBMVExJQk9CSlNALCRMVExJQk9CSlMsO3QgdAorQ0VPRgorCitfQUNFT0YKKworICBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKyAgIyBTcGxpdCB0aGUgc3Vic3RpdHV0aW9ucyBpbnRvIGJpdGUtc2l6ZWQgcGllY2VzIGZvciBzZWRzIHdpdGgKKyAgIyBzbWFsbCBjb21tYW5kIG51bWJlciBsaW1pdHMsIGxpa2Ugb24gRGlnaXRhbCBPU0YvMSBhbmQgSFAtVVguCisgIGFjX21heF9zZWRfbGluZXM9NDgKKyAgYWNfc2VkX2ZyYWc9MSAjIE51bWJlciBvZiBjdXJyZW50IGZpbGUuCisgIGFjX2JlZz0xICMgRmlyc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgorICBhY19lbmQ9JGFjX21heF9zZWRfbGluZXMgIyBMaW5lIGFmdGVyIGxhc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgorICBhY19tb3JlX2xpbmVzPToKKyAgYWNfc2VkX2NtZHM9CisgIHdoaWxlICRhY19tb3JlX2xpbmVzOyBkbworICAgIGlmIHRlc3QgJGFjX2JlZyAtZ3QgMTsgdGhlbgorICAgICAgc2VkICIxLCR7YWNfYmVnfWQ7ICR7YWNfZW5kfXEiICR0bXAvc3Vicy5zZWQgPiR0bXAvc3Vicy5mcmFnCisgICAgZWxzZQorICAgICAgc2VkICIke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZworICAgIGZpCisgICAgaWYgdGVzdCAhIC1zICR0bXAvc3Vicy5mcmFnOyB0aGVuCisgICAgICBhY19tb3JlX2xpbmVzPWZhbHNlCisgICAgZWxzZQorICAgICAgIyBUaGUgcHVycG9zZSBvZiB0aGUgbGFiZWwgYW5kIG9mIHRoZSBicmFuY2hpbmcgY29uZGl0aW9uIGlzIHRvCisgICAgICAjIHNwZWVkIHVwIHRoZSBzZWQgcHJvY2Vzc2luZyAoaWYgdGhlcmUgYXJlIG5vIGBAJyBhdCBhbGwsIHRoZXJlCisgICAgICAjIGlzIG5vIG5lZWQgdG8gYnJvd3NlIGFueSBvZiB0aGUgc3Vic3RpdHV0aW9ucykuCisgICAgICAjIFRoZXNlIGFyZSB0aGUgdHdvIGV4dHJhIHNlZCBjb21tYW5kcyBtZW50aW9uZWQgYWJvdmUuCisgICAgICAoZWNobyAnOnQKKyAgL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYicgJiYgY2F0ICR0bXAvc3Vicy5mcmFnKSA+JHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQKKyAgICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKwlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorICAgICAgZWxzZQorCWFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCisgICAgICBmaQorICAgICAgYWNfc2VkX2ZyYWc9YGV4cHIgJGFjX3NlZF9mcmFnICsgMWAKKyAgICAgIGFjX2JlZz0kYWNfZW5kCisgICAgICBhY19lbmQ9YGV4cHIgJGFjX2VuZCArICRhY19tYXhfc2VkX2xpbmVzYAorICAgIGZpCisgIGRvbmUKKyAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgorICAgIGFjX3NlZF9jbWRzPWNhdAorICBmaQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0ZJTEVTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKKyAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorICBjYXNlICRhY19maWxlIGluCisgIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgorCWNhdCA+JHRtcC9zdGRpbgorCWFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisgIGVzYWMKKworICAjIENvbXB1dGUgQHNyY2RpckAsIEB0b3Bfc3JjZGlyQCwgYW5kIEBJTlNUQUxMQCBmb3Igc3ViZGlyZWN0b3JpZXMuCisgIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19maWxlIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYWNfZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KKyAgICBta2RpciAtcCAiJGFjX2RpciIKKyAgZWxzZQorICAgIGFzX2Rpcj0iJGFjX2RpciIKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworICBhY19idWlsZGRpcj0uCisKK2lmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KKyAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAorICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwuLi8sZydgCitlbHNlCisgIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcj0KK2ZpCisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBpZiB0ZXN0IC16ICIkYWNfdG9wX2J1aWxkZGlyIjsgdGhlbgorICAgICAgIGFjX3RvcF9zcmNkaXI9LgorICAgIGVsc2UKKyAgICAgICBhY190b3Bfc3JjZGlyPWBlY2hvICRhY190b3BfYnVpbGRkaXIgfCBzZWQgJ3MsLyQsLCdgCisgICAgZmkgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBwYXRoLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgcGF0aC4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKK2VzYWMKKworIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCisjIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgorY2FzZSBgcHdkYCBpbgorLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisqKQorICBjYXNlICIkYWNfZGlyIiBpbgorICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKKyAgZXNhYzs7Citlc2FjCitjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisqKQorICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KKyAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7CisgIGVzYWM7OworZXNhYworY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisuKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworKikKKyAgY2FzZSAkYWNfc3JjZGlyIGluCisgIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKyAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OworICBlc2FjOzsKK2VzYWMKK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworKikKKyAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgorICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisgICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OworICBlc2FjOzsKK2VzYWMKKworCisKKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgcm0gLWYgIiRhY19maWxlIgorICBmaQorICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CisgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgPSB4LTsgdGhlbgorICAgIGNvbmZpZ3VyZV9pbnB1dD0KKyAgZWxzZQorICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAiCisgIGZpCisgIGNvbmZpZ3VyZV9pbnB1dD0kY29uZmlndXJlX2lucHV0IkdlbmVyYXRlZCBmcm9tIGBlY2hvICRhY19maWxlX2luIHwKKwkJCQkgICAgIHNlZCAncywuKi8sLCdgIGJ5IGNvbmZpZ3VyZS4iCisKKyAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKKyAgIyBzcmMgdHJlZS4KKyAgYWNfZmlsZV9pbnB1dHM9YElGUz06CisgICAgZm9yIGYgaW4gJGFjX2ZpbGVfaW47IGRvCisgICAgICBjYXNlICRmIGluCisgICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKKyAgICAgIFtcXC8kXSopCisJICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCisJIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCSBlY2hvICIkZiI7OworICAgICAgKikgIyBSZWxhdGl2ZQorCSBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKwkgICAjIEJ1aWxkIHRyZWUKKwkgICBlY2hvICIkZiIKKwkgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorCSAgICMgU291cmNlIHRyZWUKKwkgICBlY2hvICIkc3JjZGlyLyRmIgorCSBlbHNlCisJICAgIyAvZGV2L251bGwgdHJlZQorCSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJIGZpOzsKKyAgICAgIGVzYWMKKyAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyAgc2VkICIkYWNfdnBzdWIKKyRleHRyYXN1YgorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKzp0CisvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCitzLEBjb25maWd1cmVfaW5wdXRALCRjb25maWd1cmVfaW5wdXQsO3QgdAorcyxAc3JjZGlyQCwkYWNfc3JjZGlyLDt0IHQKK3MsQGFic19zcmNkaXJALCRhY19hYnNfc3JjZGlyLDt0IHQKK3MsQHRvcF9zcmNkaXJALCRhY190b3Bfc3JjZGlyLDt0IHQKK3MsQGFic190b3Bfc3JjZGlyQCwkYWNfYWJzX3RvcF9zcmNkaXIsO3QgdAorcyxAYnVpbGRkaXJALCRhY19idWlsZGRpciw7dCB0CitzLEBhYnNfYnVpbGRkaXJALCRhY19hYnNfYnVpbGRkaXIsO3QgdAorcyxAdG9wX2J1aWxkZGlyQCwkYWNfdG9wX2J1aWxkZGlyLDt0IHQKK3MsQGFic190b3BfYnVpbGRkaXJALCRhY19hYnNfdG9wX2J1aWxkZGlyLDt0IHQKKyIgJGFjX2ZpbGVfaW5wdXRzIHwgKGV2YWwgIiRhY19zZWRfY21kcyIpID4kdG1wL291dAorICBybSAtZiAkdG1wL3N0ZGluCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICBtdiAkdG1wL291dCAkYWNfZmlsZQorICBlbHNlCisgICAgY2F0ICR0bXAvb3V0CisgICAgcm0gLWYgJHRtcC9vdXQKKyAgZmkKKworZG9uZQorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKworIworIyBDT05GSUdfSEVBREVSIHNlY3Rpb24uCisjCisKKyMgVGhlc2Ugc2VkIGNvbW1hbmRzIGFyZSBwYXNzZWQgdG8gc2VkIGFzICJBIE5BTUUgQiBOQU1FIEMgVkFMVUUgRCIsIHdoZXJlCisjIE5BTUUgaXMgdGhlIGNwcCBtYWNybyBiZWluZyBkZWZpbmVkIGFuZCBWQUxVRSBpcyB0aGUgdmFsdWUgaXQgaXMgYmVpbmcgZ2l2ZW4uCisjCisjIGFjX2Qgc2V0cyB0aGUgdmFsdWUgaW4gIiNkZWZpbmUgTkFNRSBWQUxVRSIgbGluZXMuCithY19kQT0ncyxeXChbCSBdKlwpI1woWwkgXSpkZWZpbmVbCSBdWwkgXSpcKScKK2FjX2RCPSdbCSBdLiokLFwxI1wyJworYWNfZEM9JyAnCithY19kRD0nLDt0JworIyBhY191IHR1cm5zICIjdW5kZWYgTkFNRSIgd2l0aG91dCB0cmFpbGluZyBibGFua3MgaW50byAiI2RlZmluZSBOQU1FIFZBTFVFIi4KK2FjX3VBPSdzLF5cKFsJIF0qXCkjXChbCSBdKlwpdW5kZWZcKFsJIF1bCSBdKlwpJworYWNfdUI9JyQsXDEjXDJkZWZpbmVcMycKK2FjX3VDPScgJworYWNfdUQ9Jyw7dCcKKworZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0hFQURFUlM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQorICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCisJY2F0ID4kdG1wL3N0ZGluCisJYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAqOiogKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKKyAgZXNhYworCisgIHRlc3QgeCIkYWNfZmlsZSIgIT0geC0gJiYgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKworICAjIEZpcnN0IGxvb2sgZm9yIHRoZSBpbnB1dCBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZSwgb3RoZXJ3aXNlIGluIHRoZQorICAjIHNyYyB0cmVlLgorICBhY19maWxlX2lucHV0cz1gSUZTPToKKyAgICBmb3IgZiBpbiAkYWNfZmlsZV9pbjsgZG8KKyAgICAgIGNhc2UgJGYgaW4KKyAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OworICAgICAgW1xcLyRdKikKKwkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKKwkgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJICMgRG8gcXVvdGUgJGYsIHRvIHByZXZlbnQgRE9TIHBhdGhzIGZyb20gYmVpbmcgSUZTJ2QuCisJIGVjaG8gIiRmIjs7CisgICAgICAqKSAjIFJlbGF0aXZlCisJIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgorCSAgICMgQnVpbGQgdHJlZQorCSAgIGVjaG8gIiRmIgorCSBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCisJICAgIyBTb3VyY2UgdHJlZQorCSAgIGVjaG8gIiRzcmNkaXIvJGYiCisJIGVsc2UKKwkgICAjIC9kZXYvbnVsbCB0cmVlCisJICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkgZmk7OworICAgICAgZXNhYworICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorICAjIFJlbW92ZSB0aGUgdHJhaWxpbmcgc3BhY2VzLgorICBzZWQgJ3MvWwkgXSokLy8nICRhY19maWxlX2lucHV0cyA+JHRtcC9pbgorCitfQUNFT0YKKworIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIHR3byBzZWQgc2NyaXB0cywgYGNvbmZ0ZXN0LmRlZmluZXMnIGFuZAorIyBgY29uZnRlc3QudW5kZWZzJywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisjIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguICBUaGUgZmlyc3QgaGFuZGxlcyBgI2RlZmluZScKKyMgdGVtcGxhdGVzLCBhbmQgdGhlIHNlY29uZCBgI3VuZGVmJyB0ZW1wbGF0ZXMuCisjIEFuZCBmaXJzdDogUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIG9uIHRoZSByaWdodCBzaWRlIG9mIGEgc2VkIHN1YnN0IGluCisjIGNvbmZpZy5zdGF0dXMuICBQcm90ZWN0IGFnYWluc3QgYmVpbmcgaW4gYW4gdW5xdW90ZWQgaGVyZSBkb2N1bWVudAorIyBpbiBjb25maWcuc3RhdHVzLgorcm0gLWYgY29uZnRlc3QuZGVmaW5lcyBjb25mdGVzdC51bmRlZnMKKyMgVXNpbmcgYSBoZXJlIGRvY3VtZW50IGluc3RlYWQgb2YgYSBzdHJpbmcgcmVkdWNlcyB0aGUgcXVvdGluZyBuaWdodG1hcmUuCisjIFB1dHRpbmcgY29tbWVudHMgaW4gc2VkIHNjcmlwdHMgaXMgbm90IHBvcnRhYmxlLgorIworIyBgZW5kJyBpcyB1c2VkIHRvIGF2b2lkIHRoYXQgdGhlIHNlY29uZCBtYWluIHNlZCBjb21tYW5kIChtZWFudCBmb3IKKyMgMC1hcnkgQ1BQIG1hY3JvcykgYXBwbGllcyB0byBuLWFyeSBtYWNybyBkZWZpbml0aW9ucy4KKyMgU2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIGZvciBgY2xlYXInLgorY2F0ID5jb25mZGVmMnNlZC5zZWQgPDxcX0FDRU9GCitzL1tcXCYsXS9cXCYvZworcyxbXFwkYF0sXFwmLGcKK3QgY2xlYXIKKzogY2xlYXIKK3MsXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgKF1bXgkgKF0qXClcKChbXildKilcKVsJIF0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMVwyJHthY19kQ31cMyR7YWNfZER9LGdwCit0IGVuZAorcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSBdW14JIF0qXClbCSBdKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDEke2FjX2RDfVwyJHthY19kRH0sZ3AKKzogZW5kCitfQUNFT0YKKyMgSWYgc29tZSBtYWNyb3Mgd2VyZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyB0aGVyZSBtaWdodCBiZSBzZXZlcmFsIHRpbWVzCisjIHRoZSBzYW1lICNkZWZpbmVzLCB3aGljaCBpcyB1c2VsZXNzLiAgTmV2ZXJ0aGVsZXNzLCB3ZSBtYXkgbm90IHdhbnQgdG8KKyMgc29ydCB0aGVtLCBzaW5jZSB3ZSB3YW50IHRoZSAqbGFzdCogQUMtREVGSU5FIHRvIGJlIGhvbm9yZWQuCit1bmlxIGNvbmZkZWZzLmggfCBzZWQgLW4gLWYgY29uZmRlZjJzZWQuc2VkID5jb25mdGVzdC5kZWZpbmVzCitzZWQgJ3MvYWNfZC9hY191L2cnIGNvbmZ0ZXN0LmRlZmluZXMgPmNvbmZ0ZXN0LnVuZGVmcworcm0gLWYgY29uZmRlZjJzZWQuc2VkCisKKyMgVGhpcyBzZWQgY29tbWFuZCByZXBsYWNlcyAjdW5kZWYgd2l0aCBjb21tZW50cy4gIFRoaXMgaXMgbmVjZXNzYXJ5LCBmb3IKKyMgZXhhbXBsZSwgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKyMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorY2F0ID4+Y29uZnRlc3QudW5kZWZzIDw8XF9BQ0VPRgorcyxeWwkgXSojWwkgXSp1bmRlZlsJIF1bCSBdKlthLXpBLVpfXVthLXpBLVpfMC05XSosLyogJiAqLywKK19BQ0VPRgorCisjIEJyZWFrIHVwIGNvbmZ0ZXN0LmRlZmluZXMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24gdGhlIHNpemUKKyMgb2YgaGVyZSBkb2N1bWVudHMsIGFuZCBvbGQgc2VkcyBoYXZlIHNtYWxsIGxpbWl0cyB0b28gKDEwMCBjbWRzKS4KK2VjaG8gJyAgIyBIYW5kbGUgYWxsIHRoZSAjZGVmaW5lIHRlbXBsYXRlcyBvbmx5IGlmIG5lY2Vzc2FyeS4nID4+JENPTkZJR19TVEFUVVMKK2VjaG8gJyAgaWYgZ3JlcCAiXlsJIF0qI1sJIF0qZGVmaW5lIiAkdG1wL2luID4vZGV2L251bGw7IHRoZW4nID4+JENPTkZJR19TVEFUVVMKK2VjaG8gJyAgIyBJZiB0aGVyZSBhcmUgbm8gZGVmaW5lcywgd2UgbWF5IGhhdmUgYW4gZW1wdHkgaWYvZmknID4+JENPTkZJR19TVEFUVVMKK2VjaG8gJyAgOicgPj4kQ09ORklHX1NUQVRVUworcm0gLWYgY29uZnRlc3QudGFpbAord2hpbGUgZ3JlcCAuIGNvbmZ0ZXN0LmRlZmluZXMgPi9kZXYvbnVsbAorZG8KKyAgIyBXcml0ZSBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvICR0bXAvZGVmaW5lcy5zZWQuCisgIGVjaG8gJyAgY2F0ID4kdG1wL2RlZmluZXMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUworICAjIFNwZWVkIHVwOiBkb24ndCBjb25zaWRlciB0aGUgbm9uIGAjZGVmaW5lJyBsaW5lcy4KKyAgZWNobyAnL15bCSBdKiNbCSBdKmRlZmluZS8hYicgPj4kQ09ORklHX1NUQVRVUworICAjIFdvcmsgYXJvdW5kIHRoZSBmb3JnZXQtdG8tcmVzZXQtdGhlLWZsYWcgYnVnLgorICBlY2hvICd0IGNscicgPj4kQ09ORklHX1NUQVRVUworICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUworICBzZWQgJHthY19tYXhfaGVyZV9saW5lc31xIGNvbmZ0ZXN0LmRlZmluZXMgPj4kQ09ORklHX1NUQVRVUworICBlY2hvICdDRU9GCisgIHNlZCAtZiAkdG1wL2RlZmluZXMuc2VkICR0bXAvaW4gPiR0bXAvb3V0CisgIHJtIC1mICR0bXAvaW4KKyAgbXYgJHRtcC9vdXQgJHRtcC9pbgorJyA+PiRDT05GSUdfU1RBVFVTCisgIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC5kZWZpbmVzID5jb25mdGVzdC50YWlsCisgIHJtIC1mIGNvbmZ0ZXN0LmRlZmluZXMKKyAgbXYgY29uZnRlc3QudGFpbCBjb25mdGVzdC5kZWZpbmVzCitkb25lCitybSAtZiBjb25mdGVzdC5kZWZpbmVzCitlY2hvICcgIGZpICMgZ3JlcCcgPj4kQ09ORklHX1NUQVRVUworZWNobyA+PiRDT05GSUdfU1RBVFVTCisKKyMgQnJlYWsgdXAgY29uZnRlc3QudW5kZWZzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uIHRoZSBzaXplCisjIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vICgxMDAgY21kcykuCitlY2hvICcgICMgSGFuZGxlIGFsbCB0aGUgI3VuZGVmIHRlbXBsYXRlcycgPj4kQ09ORklHX1NUQVRVUworcm0gLWYgY29uZnRlc3QudGFpbAord2hpbGUgZ3JlcCAuIGNvbmZ0ZXN0LnVuZGVmcyA+L2Rldi9udWxsCitkbworICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gJHRtcC91bmRlZnMuc2VkLgorICBlY2hvICcgIGNhdCA+JHRtcC91bmRlZnMuc2VkIDw8Q0VPRicgPj4kQ09ORklHX1NUQVRVUworICAjIFNwZWVkIHVwOiBkb24ndCBjb25zaWRlciB0aGUgbm9uIGAjdW5kZWYnCisgIGVjaG8gJy9eWwkgXSojWwkgXSp1bmRlZi8hYicgPj4kQ09ORklHX1NUQVRVUworICAjIFdvcmsgYXJvdW5kIHRoZSBmb3JnZXQtdG8tcmVzZXQtdGhlLWZsYWcgYnVnLgorICBlY2hvICd0IGNscicgPj4kQ09ORklHX1NUQVRVUworICBlY2hvICc6IGNscicgPj4kQ09ORklHX1NUQVRVUworICBzZWQgJHthY19tYXhfaGVyZV9saW5lc31xIGNvbmZ0ZXN0LnVuZGVmcyA+PiRDT05GSUdfU1RBVFVTCisgIGVjaG8gJ0NFT0YKKyAgc2VkIC1mICR0bXAvdW5kZWZzLnNlZCAkdG1wL2luID4kdG1wL291dAorICBybSAtZiAkdG1wL2luCisgIG12ICR0bXAvb3V0ICR0bXAvaW4KKycgPj4kQ09ORklHX1NUQVRVUworICBzZWQgMSwke2FjX21heF9oZXJlX2xpbmVzfWQgY29uZnRlc3QudW5kZWZzID5jb25mdGVzdC50YWlsCisgIHJtIC1mIGNvbmZ0ZXN0LnVuZGVmcworICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LnVuZGVmcworZG9uZQorcm0gLWYgY29uZnRlc3QudW5kZWZzCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CisgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgPSB4LTsgdGhlbgorICAgIGVjaG8gIi8qIEdlbmVyYXRlZCBieSBjb25maWd1cmUuICAqLyIgPiR0bXAvY29uZmlnLmgKKyAgZWxzZQorICAgIGVjaG8gIi8qICRhY19maWxlLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gICovIiA+JHRtcC9jb25maWcuaAorICBmaQorICBjYXQgJHRtcC9pbiA+PiR0bXAvY29uZmlnLmgKKyAgcm0gLWYgJHRtcC9pbgorICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgaWYgZGlmZiAkYWNfZmlsZSAkdG1wL2NvbmZpZy5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKK2VjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQorICAgIGVsc2UKKyAgICAgIGFjX2Rpcj1gKGRpcm5hbWUgIiRhY19maWxlIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYWNfZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgICB7IGlmICRhc19ta2Rpcl9wOyB0aGVuCisgICAgbWtkaXIgLXAgIiRhY19kaXIiCisgIGVsc2UKKyAgICBhc19kaXI9IiRhY19kaXIiCisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKKyAgICAgIHJtIC1mICRhY19maWxlCisgICAgICBtdiAkdG1wL2NvbmZpZy5oICRhY19maWxlCisgICAgZmkKKyAgZWxzZQorICAgIGNhdCAkdG1wL2NvbmZpZy5oCisgICAgcm0gLWYgJHRtcC9jb25maWcuaAorICBmaQorZG9uZQorX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorCit7IChleGl0IDApOyBleGl0IDA7IH0KK19BQ0VPRgorY2htb2QgK3ggJENPTkZJR19TVEFUVVMKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBhbmQgdGhlbiBjYWxscyBjb25maWcuc3RhdHVzLgorIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCisjIFVuZm9ydHVuYXRlbHksIG9uIERPUyB0aGlzIGZhaWxzLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQgb3BlbgorIyBieSBjb25maWd1cmUsIHNvIGNvbmZpZy5zdGF0dXMgd29uJ3QgYmUgYWJsZSB0byB3cml0ZSB0byBpdDsgaXRzCisjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorIyBlZmZlY3RpdmVseSBjbG9zaW5nIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZAorIyBhcHBlbmRlZCB0byBieSBjb25maWcuc3RhdHVzLiAgV2hlbiBjb21pbmcgYmFjayB0byBjb25maWd1cmUsIHdlCisjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgoraWYgdGVzdCAiJG5vX2NyZWF0ZSIgIT0geWVzOyB0aGVuCisgIGFjX2NzX3N1Y2Nlc3M9OgorICBhY19jb25maWdfc3RhdHVzX2FyZ3M9CisgIHRlc3QgIiRzaWxlbnQiID0geWVzICYmCisgICAgYWNfY29uZmlnX3N0YXR1c19hcmdzPSIkYWNfY29uZmlnX3N0YXR1c19hcmdzIC0tcXVpZXQiCisgIGV4ZWMgNT4vZGV2L251bGwKKyAgJFNIRUxMICRDT05GSUdfU1RBVFVTICRhY19jb25maWdfc3RhdHVzX2FyZ3MgfHwgYWNfY3Nfc3VjY2Vzcz1mYWxzZQorICBleGVjIDU+PmNvbmZpZy5sb2cKKyAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKKyAgIyB3b3VsZCBtYWtlIGNvbmZpZ3VyZSBmYWlsIGlmIHRoaXMgaXMgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCisgICRhY19jc19zdWNjZXNzIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorZmkKKworICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBsaWJ0b21tYXRoL01ha2VmaWxlIgorY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GCisjIFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBjb25maWd1cmUKKyMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQorIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNvbmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4KKyMgSXQgaXMgbm90IHVzZWZ1bCBvbiBvdGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QKKyMgd2FudCB0byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorIworIyBjb25maWcuc3RhdHVzIG9ubHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQKKyMgdGhlIC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLgorIworIyBgYWNfY3ZfZW52X2ZvbycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuCisjIGxvYWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWduZWQgdGhlCisjIGZvbGxvd2luZyB2YWx1ZXMuCisKK19BQ0VPRgorCisjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAorIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KKyMgU28sIGRvbid0IHB1dCBuZXdsaW5lcyBpbiBjYWNoZSB2YXJpYWJsZXMnIHZhbHVlcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KK3sKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSBgKGFjX3NwYWNlPScgJzsgc2V0IHwgZ3JlcCBhY19zcGFjZSkgMj4mMWAgaW4KKyAgICAqYWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXMgKGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXCkuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiBcCisJInMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9XFwyL3AiCisgICAgICA7OworICAgIGVzYWM7Cit9IHwKKyAgc2VkICcKKyAgICAgdCBjbGVhcgorICAgICA6IGNsZWFyCisgICAgIHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8KKyAgICAgdCBlbmQKKyAgICAgL15hY19jdl9lbnYvIXMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6IGVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgJGNhY2hlX2ZpbGUgY29uZmNhY2hlID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgIGlmIHRlc3QgLXcgJGNhY2hlX2ZpbGU7IHRoZW4KKyAgICB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIiAmJiBlY2hvICJ1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgICBjYXQgY29uZmNhY2hlID4kY2FjaGVfZmlsZQorICBlbHNlCisgICAgZWNobyAibm90IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiCisgIGZpCitmaQorcm0gLWYgY29uZmNhY2hlCisKK3Rlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNfZGVmYXVsdF9wcmVmaXgKKyMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4LgordGVzdCAieCRleGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9JworCisjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlICQoc3JjZGlyKSwKKyMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCisjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQorIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgoraWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKyAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPS97CitzLzoqXCQoc3JjZGlyKToqLzovOworcy86Klwke3NyY2Rpcn06Ki86LzsKK3MvOipAc3JjZGlyQDoqLzovOworcy9eXChbXj1dKj1bCSBdKlwpOiovXDEvOworcy86KiQvLzsKK3MvXltePV0qPVsJIF0qJC8vOworfScKK2ZpCisKK0RFRlM9LURIQVZFX0NPTkZJR19ICisKK2FjX2xpYm9ianM9CithY19sdGxpYm9ianM9Citmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgorICBhY19pPWBlY2hvICIkYWNfaSIgfAorCSBzZWQgJ3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLydgCisgICMgMi4gQWRkIHRoZW0uCisgIGFjX2xpYm9ianM9IiRhY19saWJvYmpzICRhY19pXCRVLiRhY19vYmpleHQiCisgIGFjX2x0bGlib2Jqcz0iJGFjX2x0bGlib2JqcyAkYWNfaSInJFUubG8nCitkb25lCitMSUJPQkpTPSRhY19saWJvYmpzCisKK0xUTElCT0JKUz0kYWNfbHRsaWJvYmpzCisKKworCis6ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9CithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9CitjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorIyBDb21waWxlciBvdXRwdXQgcHJvZHVjZWQgYnkgY29uZmlndXJlLCB1c2VmdWwgZm9yIGRlYnVnZ2luZworIyBjb25maWd1cmUsIGlzIGluIGNvbmZpZy5sb2cgaWYgaXQgZXhpc3RzLgorCitkZWJ1Zz1mYWxzZQorYWNfY3NfcmVjaGVjaz1mYWxzZQorYWNfY3Nfc2lsZW50PWZhbHNlCitTSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQorX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAgIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIEJvdXJuZSBjb21wYXRpYmxlCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKK2VsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHNldCAtbyBwb3NpeAorZmkKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKKworIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgYXNfdW5zZXQ9ZmFsc2UKK2ZpCisKKworIyBXb3JrIGFyb3VuZCBidWdzIGluIHByZS0zLjAgVVdJTiBrc2guCiskYXNfdW5zZXQgRU5WIE1BSUwgTUFJTFBBVEgKK1BTMT0nJCAnCitQUzI9Jz4gJworUFM0PScrICcKKworIyBOTFMgbnVpc2FuY2VzLgorZm9yIGFzX3ZhciBpbiBcCisgIExBTkcgTEFOR1VBR0UgTENfQUREUkVTUyBMQ19BTEwgTENfQ09MTEFURSBMQ19DVFlQRSBMQ19JREVOVElGSUNBVElPTiBcCisgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisgIExDX1RFTEVQSE9ORSBMQ19USU1FCitkbworICBpZiAoc2V0ICt4OyB0ZXN0IC16ICJgKGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcikgMj4mMWAiKTsgdGhlbgorICAgIGV2YWwgJGFzX3Zhcj1DOyBleHBvcnQgJGFzX3ZhcgorICBlbHNlCisgICAgJGFzX3Vuc2V0ICRhc192YXIKKyAgZmkKK2RvbmUKKworIyBSZXF1aXJlZCB0byB1c2UgYmFzZW5hbWUuCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworCisjIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCithc19tZT1gJGFzX2Jhc2VuYW1lICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKSQnIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgvIiQwIiB8CisgICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcL1woXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcL1woXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorCisKKyMgUEFUSCBuZWVkcyBDUiwgYW5kIExJTkVOTyBuZWVkcyBDUiBhbmQgUEFUSC4KKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKKyAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAorICBjaG1vZCAreCBjb25mJCQuc2gKKyAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgZWxzZQorICAgIFBBVEhfU0VQQVJBVE9SPToKKyAgZmkKKyAgcm0gLWYgY29uZiQkLnNoCitmaQorCisKKyAgYXNfbGluZW5vXzE9JExJTkVOTworICBhc19saW5lbm9fMj0kTElORU5PCisgIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKKyAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCisgIHRlc3QgIngkYXNfbGluZW5vXzMiICA9ICJ4JGFzX2xpbmVub18yIiAgfHwgeworICAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBwYXRoIGF0IGFsbAorICAjIHJlbGF0aXZlIG9yIG5vdC4KKyAgY2FzZSAkMCBpbgorICAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCitkb25lCisKKyAgICAgICA7OworICBlc2FjCisgICMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyAgIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCisgIGlmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgICBhc19teXNlbGY9JDAKKyAgZmkKKyAgaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGZpCisgIGNhc2UgJENPTkZJR19TSEVMTCBpbgorICAnJykKKyAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KKwkgY2FzZSAkYXNfZGlyIGluCisJIC8qKQorCSAgIGlmICgiJGFzX2Rpci8kYXNfYmFzZSIgLWMgJworICBhc19saW5lbm9fMT0kTElORU5PCisgIGFzX2xpbmVub18yPSRMSU5FTk8KKyAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAorICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKyAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICcpIDI+L2Rldi9udWxsOyB0aGVuCisJICAgICAkYXNfdW5zZXQgQkFTSF9FTlYgfHwgdGVzdCAiJHtCQVNIX0VOVitzZXR9IiAhPSBzZXQgfHwgeyBCQVNIX0VOVj07IGV4cG9ydCBCQVNIX0VOVjsgfQorCSAgICAgJGFzX3Vuc2V0IEVOViB8fCB0ZXN0ICIke0VOVitzZXR9IiAhPSBzZXQgfHwgeyBFTlY9OyBleHBvcnQgRU5WOyB9CisJICAgICBDT05GSUdfU0hFTEw9JGFzX2Rpci8kYXNfYmFzZQorCSAgICAgZXhwb3J0IENPTkZJR19TSEVMTAorCSAgICAgZXhlYyAiJENPTkZJR19TSEVMTCIgIiQwIiAkezErIiRAIn0KKwkgICBmaTs7CisJIGVzYWMKKyAgICAgICBkb25lCitkb25lCis7OworICBlc2FjCisKKyAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTworICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCisgICMgbGluZS1udW1iZXIgbGluZSBiZWZvcmUgZWFjaCBsaW5lOyB0aGUgc2Vjb25kICdzZWQnIGRvZXMgdGhlIHJlYWwKKyAgIyB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoIGxpbmUtbnVtYmVyIGxpbmUKKyAgIyB3aXRoIHRoZSBudW1iZXJlZCBsaW5lLCBhbmQgYXBwZW5kcyB0cmFpbGluZyAnLScgZHVyaW5nCisgICMgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsIGNhc2UgYXQgbGluZSBlbmQuCisgICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQorICAjIHNlY29uZCAnc2VkJyBzY3JpcHQuICBCbGFtZSBMZWUgRS4gTWNNYWhvbiBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCisgIHNlZCAnPScgPCRhc19teXNlbGYgfAorICAgIHNlZCAnCisgICAgICBOCisgICAgICBzLCQsLSwKKyAgICAgIDogbG9vcAorICAgICAgcyxeXChbJyRhc19jcl9kaWdpdHMnXSpcKVwoLipcKVskXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dXCksXDFcMlwxXDMsCisgICAgICB0IGxvb3AKKyAgICAgIHMsLSQsLAorICAgICAgcyxeWyckYXNfY3JfZGlnaXRzJ10qXG4sLAorICAgICcgPiRhc19tZS5saW5lbm8gJiYKKyAgY2htb2QgK3ggJGFzX21lLmxpbmVubyB8fAorICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKKyAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKKyAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCisgICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaWJsZSB0byB0aGlzKS4KKyAgLiAuLyRhc19tZS5saW5lbm8KKyAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCisgIGV4aXQKK30KKworCitjYXNlIGBlY2hvICJ0ZXN0aW5nXGMiOyBlY2hvIDEsMiwzYCxgZWNobyAtbiB0ZXN0aW5nOyBlY2hvIDEsMiwzYCBpbgorICAqYyosLW4qKSBFQ0hPX049IEVDSE9fQz0nCisnIEVDSE9fVD0nCScgOzsKKyAgKmMqLCogICkgRUNIT19OPS1uIEVDSE9fQz0gRUNIT19UPSA7OworICAqKSAgICAgICBFQ0hPX049IEVDSE9fQz0nXGMnIEVDSE9fVD0gOzsKK2VzYWMKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitlY2hvID5jb25mJCQuZmlsZQoraWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICMgV2UgY291bGQganVzdCBjaGVjayBmb3IgREpHUFA7IGJ1dCB0aGlzIHRlc3QgYSkgd29ya3MgYikgaXMgbW9yZSBnZW5lcmljCisgICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgorICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KKyAgICAjIERvbid0IHVzZSBsbiBhdCBhbGw7IHdlIGRvbid0IGhhdmUgYW55IGxpbmtzCisgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsc2UKKyAgICBhc19sbl9zPSdsbiAtcycKKyAgZmkKK2VsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2xuX3M9bG4KK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXAnCitmaQorcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKKworaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPToKK2Vsc2UKKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgYXNfbWtkaXJfcD1mYWxzZQorZmkKKworYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCithc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KK2FzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuCithc19ubD0nCisnCitJRlM9IiAJJGFzX25sIgorCisjIENEUEFUSC4KKyRhc191bnNldCBDRFBBVEgKKworZXhlYyA2PiYxCisKKyMgT3BlbiB0aGUgbG9nIHJlYWwgc29vbiwgdG8ga2VlcCBcJFswXSBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCisjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKKyMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuICBMb2dnaW5nIC0tdmVyc2lvbiBldGMuIGlzIE9LLgorZXhlYyA1Pj5jb25maWcubG9nCit7CisgIGVjaG8KKyAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKKyMjIFJ1bm5pbmcgJGFzX21lLiAjIworX0FTQk9YCit9ID4mNQorY2F0ID4mNSA8PF9DU0VPRgorCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5ICRhc19tZSwgd2hpY2ggd2FzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKworICBDT05GSUdfRklMRVMgICAgPSAkQ09ORklHX0ZJTEVTCisgIENPTkZJR19IRUFERVJTICA9ICRDT05GSUdfSEVBREVSUworICBDT05GSUdfTElOS1MgICAgPSAkQ09ORklHX0xJTktTCisgIENPTkZJR19DT01NQU5EUyA9ICRDT05GSUdfQ09NTUFORFMKKyAgJCAkMCAkQAorCitfQ1NFT0YKK2VjaG8gIm9uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYCIgPiY1CitlY2hvID4mNQorX0FDRU9GCisKKyMgRmlsZXMgdGhhdCBjb25maWcuc3RhdHVzIHdhcyBtYWRlIGZvci4KK2lmIHRlc3QgLW4gIiRhY19jb25maWdfZmlsZXMiOyB0aGVuCisgIGVjaG8gImNvbmZpZ19maWxlcz1cIiRhY19jb25maWdfZmlsZXNcIiIgPj4kQ09ORklHX1NUQVRVUworZmkKKworaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19oZWFkZXJzIjsgdGhlbgorICBlY2hvICJjb25maWdfaGVhZGVycz1cIiRhY19jb25maWdfaGVhZGVyc1wiIiA+PiRDT05GSUdfU1RBVFVTCitmaQorCitpZiB0ZXN0IC1uICIkYWNfY29uZmlnX2xpbmtzIjsgdGhlbgorICBlY2hvICJjb25maWdfbGlua3M9XCIkYWNfY29uZmlnX2xpbmtzXCIiID4+JENPTkZJR19TVEFUVVMKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY19jb25maWdfY29tbWFuZHMiOyB0aGVuCisgIGVjaG8gImNvbmZpZ19jb21tYW5kcz1cIiRhY19jb25maWdfY29tbWFuZHNcIiIgPj4kQ09ORklHX1NUQVRVUworZmkKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisKK2FjX2NzX3VzYWdlPSJcCitcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGZyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUKK2N1cnJlbnQgY29uZmlndXJhdGlvbi4KKworVXNhZ2U6ICQwIFtPUFRJT05TXSBbRklMRV0uLi4KKworICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucworICAtLWZpbGU9RklMRVs6VEVNUExBVEVdCisJCSAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAtLWhlYWRlcj1GSUxFWzpURU1QTEFURV0KKwkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKKworQ29uZmlndXJhdGlvbiBmaWxlczoKKyRjb25maWdfZmlsZXMKKworQ29uZmlndXJhdGlvbiBoZWFkZXJzOgorJGNvbmZpZ19oZWFkZXJzCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b2NvbmZAZ251Lm9yZz4uIgorX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCithY19jc192ZXJzaW9uPSJcXAorY29uZmlnLnN0YXR1cworY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5LAorICB3aXRoIG9wdGlvbnMgXFwiYGVjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvW1xcIiJcYFwkXS9cXFxcJi9nJ2BcXCIKKworQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgorc3JjZGlyPSRzcmNkaXIKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKyMgSWYgbm8gZmlsZSBhcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLCB0aGVuIHdlIG5lZWQgdG8gcHJvdmlkZSBkZWZhdWx0CisjIHZhbHVlLiAgQnkgd2UgbmVlZCB0byBrbm93IGlmIGZpbGVzIHdlcmUgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyLgorYWNfbmVlZF9kZWZhdWx0cz06Cit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisgIGNhc2UgJDEgaW4KKyAgLS0qPSopCisgICAgYWNfb3B0aW9uPWBleHByICJ4JDEiIDogJ3hcKFtePV0qXCk9J2AKKyAgICBhY19vcHRhcmc9YGV4cHIgIngkMSIgOiAneFtePV0qPVwoLipcKSdgCisgICAgYWNfc2hpZnQ9OgorICAgIDs7CisgIC0qKQorICAgIGFjX29wdGlvbj0kMQorICAgIGFjX29wdGFyZz0kMgorICAgIGFjX3NoaWZ0PXNoaWZ0CisgICAgOzsKKyAgKikgIyBUaGlzIGlzIG5vdCBhbiBvcHRpb24sIHNvIHRoZSB1c2VyIGhhcyBwcm9iYWJseSBnaXZlbiBleHBsaWNpdAorICAgICAjIGFyZ3VtZW50cy4KKyAgICAgYWNfb3B0aW9uPSQxCisgICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICBlc2FjCisKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICMgSGFuZGxpbmcgb2YgdGhlIG9wdGlvbnMuCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKyAgICBhY19jc19yZWNoZWNrPTogOzsKKyAgLS12ZXJzaW9uIHwgLS12ZXJzKiB8IC1WICkKKyAgICBlY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgMCA7OworICAtLWhlIHwgLS1oKQorICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCisgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogYW1iaWd1b3VzIG9wdGlvbjogJDEKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIC0taGVscCB8IC0taGVsIHwgLWggKQorICAgIGVjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgMCA7OworICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKKyAgICBkZWJ1Zz06IDs7CisgIC0tZmlsZSB8IC0tZmlsIHwgLS1maSB8IC0tZiApCisgICAgJGFjX3NoaWZ0CisgICAgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTICRhY19vcHRhcmciCisgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKKyAgICAkYWNfc2hpZnQKKyAgICBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTICRhY19vcHRhcmciCisgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CisgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKKyAgICBhY19jc19zaWxlbnQ9OiA7OworCisgICMgVGhpcyBpcyBhbiBlcnJvci4KKyAgLSopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb246ICQxCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKKworICAqKSBhY19jb25maWdfdGFyZ2V0cz0iJGFjX2NvbmZpZ190YXJnZXRzICQxIiA7OworCisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9CisKK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKyAgZXhlYyA2Pi9kZXYvbnVsbAorICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgoraWYgXCRhY19jc19yZWNoZWNrOyB0aGVuCisgIGVjaG8gInJ1bm5pbmcgJFNIRUxMICQwICIgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgIiAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbiIgPiY2CisgIGV4ZWMgJFNIRUxMICQwICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uCitmaQorCitfQUNFT0YKKworCisKKworCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK2ZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cworZG8KKyAgY2FzZSAiJGFjX2NvbmZpZ190YXJnZXQiIGluCisgICMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorICAiTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1ha2VmaWxlIiA7OworICAibGlidG9tY3J5cHQvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnRvbWNyeXB0L01ha2VmaWxlIiA7OworICAibGlidG9tbWF0aC9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlidG9tbWF0aC9NYWtlZmlsZSIgOzsKKyAgImNvbmZpZy5oIiApIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgY29uZmlnLmgiIDs7CisgICopIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgYXJndW1lbnQ6ICRhY19jb25maWdfdGFyZ2V0IiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgZXNhYworZG9uZQorCisjIElmIHRoZSB1c2VyIGRpZCBub3QgdXNlIHRoZSBhcmd1bWVudHMgdG8gc3BlY2lmeSB0aGUgaXRlbXMgdG8gaW5zdGFudGlhdGUsCisjIHRoZW4gdGhlIGVudnZhciBpbnRlcmZhY2UgaXMgdXNlZC4gIFNldCBvbmx5IHRob3NlIHRoYXQgYXJlIG5vdC4KKyMgV2UgdXNlIHRoZSBsb25nIGZvcm0gZm9yIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgYmVjYXVzZSBvZiBhbiBleHRyZW1lbHkKKyMgYml6YXJyZSBidWcgb24gU3VuT1MgNC4xLjMuCitpZiAkYWNfbmVlZF9kZWZhdWx0czsgdGhlbgorICB0ZXN0ICIke0NPTkZJR19GSUxFUytzZXR9IiA9IHNldCB8fCBDT05GSUdfRklMRVM9JGNvbmZpZ19maWxlcworICB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3NldH0iID0gc2V0IHx8IENPTkZJR19IRUFERVJTPSRjb25maWdfaGVhZGVycworZmkKKworIyBIYXZlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgY29udmVuaWVuY2UuICBNYWtlIGl0IGluIHRoZSBidWlsZCB0cmVlCisjIHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBwdXQgaXQgaGVyZSwgYW5kIGluIGFkZGl0aW9uLAorIyBjcmVhdGluZyBhbmQgbW92aW5nIGZpbGVzIGZyb20gL3RtcCBjYW4gc29tZXRpbWVzIGNhdXNlIHByb2JsZW1zLgorIyBDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5LCBhbmQgaG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKyRkZWJ1ZyB8fAoreworICB0cmFwICdleGl0X3N0YXR1cz0kPzsgcm0gLXJmICR0bXAgJiYgZXhpdCAkZXhpdF9zdGF0dXMnIDAKKyAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKK30KKworIyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuCisKK3sKKyAgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAtcSAiLi9jb25mc3RhdFhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorICB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIgorfSAgfHwKK3sKKyAgdG1wPS4vY29uZnN0YXQkJC0kUkFORE9NCisgICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkKK30gfHwKK3sKKyAgIGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH0KK30KKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisKKyMKKyMgQ09ORklHX0ZJTEVTIHNlY3Rpb24uCisjCisKKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGUgc2NyaXB0cyBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdoZW4gLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oCitpZiB0ZXN0IC1uICJcJENPTkZJR19GSUxFUyI7IHRoZW4KKyAgIyBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4gY29uZmlnLnN0YXR1cy4KKyAgc2VkICdzLyxAL0BALzsgcy9ALC9AQC87IHMvLDt0IHRcJC9AO3QgdC87IC9AO3QgdFwkL3MvW1xcXFwmLF0vXFxcXCYvZzsKKyAgIHMvQEAvLEAvOyBzL0BAL0AsLzsgcy9AO3QgdFwkLyw7dCB0LycgPlwkdG1wL3N1YnMuc2VkIDw8XFxDRU9GCitzLEBTSEVMTEAsJFNIRUxMLDt0IHQKK3MsQFBBVEhfU0VQQVJBVE9SQCwkUEFUSF9TRVBBUkFUT1IsO3QgdAorcyxAUEFDS0FHRV9OQU1FQCwkUEFDS0FHRV9OQU1FLDt0IHQKK3MsQFBBQ0tBR0VfVEFSTkFNRUAsJFBBQ0tBR0VfVEFSTkFNRSw7dCB0CitzLEBQQUNLQUdFX1ZFUlNJT05ALCRQQUNLQUdFX1ZFUlNJT04sO3QgdAorcyxAUEFDS0FHRV9TVFJJTkdALCRQQUNLQUdFX1NUUklORyw7dCB0CitzLEBQQUNLQUdFX0JVR1JFUE9SVEAsJFBBQ0tBR0VfQlVHUkVQT1JULDt0IHQKK3MsQGV4ZWNfcHJlZml4QCwkZXhlY19wcmVmaXgsO3QgdAorcyxAcHJlZml4QCwkcHJlZml4LDt0IHQKK3MsQHByb2dyYW1fdHJhbnNmb3JtX25hbWVALCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lLDt0IHQKK3MsQGJpbmRpckAsJGJpbmRpciw7dCB0CitzLEBzYmluZGlyQCwkc2JpbmRpciw7dCB0CitzLEBsaWJleGVjZGlyQCwkbGliZXhlY2Rpciw7dCB0CitzLEBkYXRhZGlyQCwkZGF0YWRpciw7dCB0CitzLEBzeXNjb25mZGlyQCwkc3lzY29uZmRpciw7dCB0CitzLEBzaGFyZWRzdGF0ZWRpckAsJHNoYXJlZHN0YXRlZGlyLDt0IHQKK3MsQGxvY2Fsc3RhdGVkaXJALCRsb2NhbHN0YXRlZGlyLDt0IHQKK3MsQGxpYmRpckAsJGxpYmRpciw7dCB0CitzLEBpbmNsdWRlZGlyQCwkaW5jbHVkZWRpciw7dCB0CitzLEBvbGRpbmNsdWRlZGlyQCwkb2xkaW5jbHVkZWRpciw7dCB0CitzLEBpbmZvZGlyQCwkaW5mb2Rpciw7dCB0CitzLEBtYW5kaXJALCRtYW5kaXIsO3QgdAorcyxAYnVpbGRfYWxpYXNALCRidWlsZF9hbGlhcyw7dCB0CitzLEBob3N0X2FsaWFzQCwkaG9zdF9hbGlhcyw7dCB0CitzLEB0YXJnZXRfYWxpYXNALCR0YXJnZXRfYWxpYXMsO3QgdAorcyxAREVGU0AsJERFRlMsO3QgdAorcyxARUNIT19DQCwkRUNIT19DLDt0IHQKK3MsQEVDSE9fTkAsJEVDSE9fTiw7dCB0CitzLEBFQ0hPX1RALCRFQ0hPX1QsO3QgdAorcyxATElCU0AsJExJQlMsO3QgdAorcyxAQ0NALCRDQyw7dCB0CitzLEBDRkxBR1NALCRDRkxBR1MsO3QgdAorcyxATERGTEFHU0AsJExERkxBR1MsO3QgdAorcyxAQ1BQRkxBR1NALCRDUFBGTEFHUyw7dCB0CitzLEBhY19jdF9DQ0AsJGFjX2N0X0NDLDt0IHQKK3MsQEVYRUVYVEAsJEVYRUVYVCw7dCB0CitzLEBPQkpFWFRALCRPQkpFWFQsO3QgdAorcyxAU0VUX01BS0VALCRTRVRfTUFLRSw7dCB0CitzLEBMREAsJExELDt0IHQKK3MsQGJ1aWxkQCwkYnVpbGQsO3QgdAorcyxAYnVpbGRfY3B1QCwkYnVpbGRfY3B1LDt0IHQKK3MsQGJ1aWxkX3ZlbmRvckAsJGJ1aWxkX3ZlbmRvciw7dCB0CitzLEBidWlsZF9vc0AsJGJ1aWxkX29zLDt0IHQKK3MsQGhvc3RALCRob3N0LDt0IHQKK3MsQGhvc3RfY3B1QCwkaG9zdF9jcHUsO3QgdAorcyxAaG9zdF92ZW5kb3JALCRob3N0X3ZlbmRvciw7dCB0CitzLEBob3N0X29zQCwkaG9zdF9vcyw7dCB0CitzLEBBUkAsJEFSLDt0IHQKK3MsQGFjX2N0X0FSQCwkYWNfY3RfQVIsO3QgdAorcyxAUkFOTElCQCwkUkFOTElCLDt0IHQKK3MsQGFjX2N0X1JBTkxJQkAsJGFjX2N0X1JBTkxJQiw7dCB0CitzLEBTVFJJUEAsJFNUUklQLDt0IHQKK3MsQGFjX2N0X1NUUklQQCwkYWNfY3RfU1RSSVAsO3QgdAorcyxASU5TVEFMTEAsJElOU1RBTEwsO3QgdAorcyxAYWNfY3RfSU5TVEFMTEAsJGFjX2N0X0lOU1RBTEwsO3QgdAorcyxAQ1BQQCwkQ1BQLDt0IHQKK3MsQEVHUkVQQCwkRUdSRVAsO3QgdAorcyxATElCT0JKU0AsJExJQk9CSlMsO3QgdAorcyxATFRMSUJPQkpTQCwkTFRMSUJPQkpTLDt0IHQKK0NFT0YKKworX0FDRU9GCisKKyAgY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisgICMgU3BsaXQgdGhlIHN1YnN0aXR1dGlvbnMgaW50byBiaXRlLXNpemVkIHBpZWNlcyBmb3Igc2VkcyB3aXRoCisgICMgc21hbGwgY29tbWFuZCBudW1iZXIgbGltaXRzLCBsaWtlIG9uIERpZ2l0YWwgT1NGLzEgYW5kIEhQLVVYLgorICBhY19tYXhfc2VkX2xpbmVzPTQ4CisgIGFjX3NlZF9mcmFnPTEgIyBOdW1iZXIgb2YgY3VycmVudCBmaWxlLgorICBhY19iZWc9MSAjIEZpcnN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KKyAgYWNfZW5kPSRhY19tYXhfc2VkX2xpbmVzICMgTGluZSBhZnRlciBsYXN0IGxpbmUgZm9yIGN1cnJlbnQgZmlsZS4KKyAgYWNfbW9yZV9saW5lcz06CisgIGFjX3NlZF9jbWRzPQorICB3aGlsZSAkYWNfbW9yZV9saW5lczsgZG8KKyAgICBpZiB0ZXN0ICRhY19iZWcgLWd0IDE7IHRoZW4KKyAgICAgIHNlZCAiMSwke2FjX2JlZ31kOyAke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZworICAgIGVsc2UKKyAgICAgIHNlZCAiJHthY19lbmR9cSIgJHRtcC9zdWJzLnNlZCA+JHRtcC9zdWJzLmZyYWcKKyAgICBmaQorICAgIGlmIHRlc3QgISAtcyAkdG1wL3N1YnMuZnJhZzsgdGhlbgorICAgICAgYWNfbW9yZV9saW5lcz1mYWxzZQorICAgIGVsc2UKKyAgICAgICMgVGhlIHB1cnBvc2Ugb2YgdGhlIGxhYmVsIGFuZCBvZiB0aGUgYnJhbmNoaW5nIGNvbmRpdGlvbiBpcyB0bworICAgICAgIyBzcGVlZCB1cCB0aGUgc2VkIHByb2Nlc3NpbmcgKGlmIHRoZXJlIGFyZSBubyBgQCcgYXQgYWxsLCB0aGVyZQorICAgICAgIyBpcyBubyBuZWVkIHRvIGJyb3dzZSBhbnkgb2YgdGhlIHN1YnN0aXR1dGlvbnMpLgorICAgICAgIyBUaGVzZSBhcmUgdGhlIHR3byBleHRyYSBzZWQgY29tbWFuZHMgbWVudGlvbmVkIGFib3ZlLgorICAgICAgKGVjaG8gJzp0CisgIC9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWInICYmIGNhdCAkdG1wL3N1YnMuZnJhZykgPiR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkCisgICAgICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCisJYWNfc2VkX2NtZHM9InNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKyAgICAgIGVsc2UKKwlhY19zZWRfY21kcz0iJGFjX3NlZF9jbWRzIHwgc2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgorICAgICAgZmkKKyAgICAgIGFjX3NlZF9mcmFnPWBleHByICRhY19zZWRfZnJhZyArIDFgCisgICAgICBhY19iZWc9JGFjX2VuZAorICAgICAgYWNfZW5kPWBleHByICRhY19lbmQgKyAkYWNfbWF4X3NlZF9saW5lc2AKKyAgICBmaQorICBkb25lCisgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KKyAgICBhY19zZWRfY21kcz1jYXQKKyAgZmkKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyIKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK2ZvciBhY19maWxlIGluIDogJENPTkZJR19GSUxFUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCisgICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KKwljYXQgPiR0bXAvc3RkaW4KKwlhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OworICBlc2FjCisKKyAgIyBDb21wdXRlIEBzcmNkaXJALCBAdG9wX3NyY2RpckAsIGFuZCBASU5TVEFMTEAgZm9yIHN1YmRpcmVjdG9yaWVzLgorICBhY19kaXI9YChkaXJuYW1lICIkYWNfZmlsZSIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICB7IGlmICRhc19ta2Rpcl9wOyB0aGVuCisgICAgbWtkaXIgLXAgIiRhY19kaXIiCisgIGVsc2UKKyAgICBhc19kaXI9IiRhY19kaXIiCisgICAgYXNfZGlycz0KKyAgICB3aGlsZSB0ZXN0ICEgLWQgIiRhc19kaXIiOyBkbworICAgICAgYXNfZGlycz0iJGFzX2RpciAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gKGRpcm5hbWUgIiRhc19kaXIiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgZG9uZQorICAgIHRlc3QgISAtbiAiJGFzX2RpcnMiIHx8IG1rZGlyICRhc19kaXJzCisgIGZpIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5IFwiJGFjX2RpclwiIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OyB9CisKKyAgYWNfYnVpbGRkaXI9LgorCitpZiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCisgIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKKyAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLi4vLGcnYAorZWxzZQorICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9CitmaQorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgTm8gLS1zcmNkaXIgb3B0aW9uLiAgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KKyAgICAgICBhY190b3Bfc3JjZGlyPS4KKyAgICBlbHNlCisgICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAorICAgIGZpIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIHBhdGguCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyIDs7Citlc2FjCisKKyMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQorIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KK2Nhc2UgYHB3ZGAgaW4KKy4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworKikKKyAgY2FzZSAiJGFjX2RpciIgaW4KKyAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKyAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7CisgIGVzYWM7OworZXNhYworY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworKikKKyAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCisgIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKyAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OworICBlc2FjOzsKK2VzYWMKK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKyopCisgIGNhc2UgJGFjX3NyY2RpciBpbgorICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisgICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKKyAgZXNhYzs7Citlc2FjCitjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKyopCisgIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KKyAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKKyAgZXNhYzs7Citlc2FjCisKKworCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorICAgIHJtIC1mICIkYWNfZmlsZSIKKyAgZmkKKyAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKyAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiID0geC07IHRoZW4KKyAgICBjb25maWd1cmVfaW5wdXQ9CisgIGVsc2UKKyAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgIgorICBmaQorICBjb25maWd1cmVfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dCJHZW5lcmF0ZWQgZnJvbSBgZWNobyAkYWNfZmlsZV9pbiB8CisJCQkJICAgICBzZWQgJ3MsLiovLCwnYCBieSBjb25maWd1cmUuIgorCisgICMgRmlyc3QgbG9vayBmb3IgdGhlIGlucHV0IGZpbGVzIGluIHRoZSBidWlsZCB0cmVlLCBvdGhlcndpc2UgaW4gdGhlCisgICMgc3JjIHRyZWUuCisgIGFjX2ZpbGVfaW5wdXRzPWBJRlM9OgorICAgIGZvciBmIGluICRhY19maWxlX2luOyBkbworICAgICAgY2FzZSAkZiBpbgorICAgICAgLSkgZWNobyAkdG1wL3N0ZGluIDs7CisgICAgICBbXFwvJF0qKQorCSAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQorCSB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwkgZWNobyAiJGYiOzsKKyAgICAgICopICMgUmVsYXRpdmUKKwkgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCisJICAgIyBCdWlsZCB0cmVlCisJICAgZWNobyAiJGYiCisJIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KKwkgICAjIFNvdXJjZSB0cmVlCisJICAgZWNobyAiJHNyY2Rpci8kZiIKKwkgZWxzZQorCSAgICMgL2Rldi9udWxsIHRyZWUKKwkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCSBmaTs7CisgICAgICBlc2FjCisgICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgIHNlZCAiJGFjX3Zwc3ViCiskZXh0cmFzdWIKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCis6dAorL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorcyxAY29uZmlndXJlX2lucHV0QCwkY29uZmlndXJlX2lucHV0LDt0IHQKK3MsQHNyY2RpckAsJGFjX3NyY2Rpciw7dCB0CitzLEBhYnNfc3JjZGlyQCwkYWNfYWJzX3NyY2Rpciw7dCB0CitzLEB0b3Bfc3JjZGlyQCwkYWNfdG9wX3NyY2Rpciw7dCB0CitzLEBhYnNfdG9wX3NyY2RpckAsJGFjX2Fic190b3Bfc3JjZGlyLDt0IHQKK3MsQGJ1aWxkZGlyQCwkYWNfYnVpbGRkaXIsO3QgdAorcyxAYWJzX2J1aWxkZGlyQCwkYWNfYWJzX2J1aWxkZGlyLDt0IHQKK3MsQHRvcF9idWlsZGRpckAsJGFjX3RvcF9idWlsZGRpciw7dCB0CitzLEBhYnNfdG9wX2J1aWxkZGlyQCwkYWNfYWJzX3RvcF9idWlsZGRpciw7dCB0CisiICRhY19maWxlX2lucHV0cyB8IChldmFsICIkYWNfc2VkX2NtZHMiKSA+JHRtcC9vdXQKKyAgcm0gLWYgJHRtcC9zdGRpbgorICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgbXYgJHRtcC9vdXQgJGFjX2ZpbGUKKyAgZWxzZQorICAgIGNhdCAkdG1wL291dAorICAgIHJtIC1mICR0bXAvb3V0CisgIGZpCisKK2RvbmUKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisKKyMKKyMgQ09ORklHX0hFQURFUiBzZWN0aW9uLgorIworCisjIFRoZXNlIHNlZCBjb21tYW5kcyBhcmUgcGFzc2VkIHRvIHNlZCBhcyAiQSBOQU1FIEIgTkFNRSBDIFZBTFVFIEQiLCB3aGVyZQorIyBOQU1FIGlzIHRoZSBjcHAgbWFjcm8gYmVpbmcgZGVmaW5lZCBhbmQgVkFMVUUgaXMgdGhlIHZhbHVlIGl0IGlzIGJlaW5nIGdpdmVuLgorIworIyBhY19kIHNldHMgdGhlIHZhbHVlIGluICIjZGVmaW5lIE5BTUUgVkFMVUUiIGxpbmVzLgorYWNfZEE9J3MsXlwoWwkgXSpcKSNcKFsJIF0qZGVmaW5lWwkgXVsJIF0qXCknCithY19kQj0nWwkgXS4qJCxcMSNcMicKK2FjX2RDPScgJworYWNfZEQ9Jyw7dCcKKyMgYWNfdSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGhvdXQgdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCithY191QT0ncyxeXChbCSBdKlwpI1woWwkgXSpcKXVuZGVmXChbCSBdWwkgXSpcKScKK2FjX3VCPSckLFwxI1wyZGVmaW5lXDMnCithY191Qz0nICcKK2FjX3VEPScsO3QnCisKK2ZvciBhY19maWxlIGluIDogJENPTkZJR19IRUFERVJTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKKyAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorICBjYXNlICRhY19maWxlIGluCisgIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgorCWNhdCA+JHRtcC9zdGRpbgorCWFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisgIGVzYWMKKworICB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtICYmIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisKKyAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKKyAgIyBzcmMgdHJlZS4KKyAgYWNfZmlsZV9pbnB1dHM9YElGUz06CisgICAgZm9yIGYgaW4gJGFjX2ZpbGVfaW47IGRvCisgICAgICBjYXNlICRmIGluCisgICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKKyAgICAgIFtcXC8kXSopCisJICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCisJIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCSAjIERvIHF1b3RlICRmLCB0byBwcmV2ZW50IERPUyBwYXRocyBmcm9tIGJlaW5nIElGUydkLgorCSBlY2hvICIkZiI7OworICAgICAgKikgIyBSZWxhdGl2ZQorCSBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKwkgICAjIEJ1aWxkIHRyZWUKKwkgICBlY2hvICIkZiIKKwkgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorCSAgICMgU291cmNlIHRyZWUKKwkgICBlY2hvICIkc3JjZGlyLyRmIgorCSBlbHNlCisJICAgIyAvZGV2L251bGwgdHJlZQorCSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJIGZpOzsKKyAgICAgIGVzYWMKKyAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKyAgIyBSZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlcy4KKyAgc2VkICdzL1sJIF0qJC8vJyAkYWNfZmlsZV9pbnB1dHMgPiR0bXAvaW4KKworX0FDRU9GCisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byB0d28gc2VkIHNjcmlwdHMsIGBjb25mdGVzdC5kZWZpbmVzJyBhbmQKKyMgYGNvbmZ0ZXN0LnVuZGVmcycsIHRoYXQgc3Vic3RpdHV0ZXMgdGhlIHByb3BlciB2YWx1ZXMgaW50bworIyBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLiAgVGhlIGZpcnN0IGhhbmRsZXMgYCNkZWZpbmUnCisjIHRlbXBsYXRlcywgYW5kIHRoZSBzZWNvbmQgYCN1bmRlZicgdGVtcGxhdGVzLgorIyBBbmQgZmlyc3Q6IFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbgorIyBjb25maWcuc3RhdHVzLiAgUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIGluIGFuIHVucXVvdGVkIGhlcmUgZG9jdW1lbnQKKyMgaW4gY29uZmlnLnN0YXR1cy4KK3JtIC1mIGNvbmZ0ZXN0LmRlZmluZXMgY29uZnRlc3QudW5kZWZzCisjIFVzaW5nIGEgaGVyZSBkb2N1bWVudCBpbnN0ZWFkIG9mIGEgc3RyaW5nIHJlZHVjZXMgdGhlIHF1b3RpbmcgbmlnaHRtYXJlLgorIyBQdXR0aW5nIGNvbW1lbnRzIGluIHNlZCBzY3JpcHRzIGlzIG5vdCBwb3J0YWJsZS4KKyMKKyMgYGVuZCcgaXMgdXNlZCB0byBhdm9pZCB0aGF0IHRoZSBzZWNvbmQgbWFpbiBzZWQgY29tbWFuZCAobWVhbnQgZm9yCisjIDAtYXJ5IENQUCBtYWNyb3MpIGFwcGxpZXMgdG8gbi1hcnkgbWFjcm8gZGVmaW5pdGlvbnMuCisjIFNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiBmb3IgYGNsZWFyJy4KK2NhdCA+Y29uZmRlZjJzZWQuc2VkIDw8XF9BQ0VPRgorcy9bXFwmLF0vXFwmL2cKK3MsW1xcJGBdLFxcJixnCit0IGNsZWFyCis6IGNsZWFyCitzLF5bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIChdW14JIChdKlwpXCgoW14pXSopXClbCSBdKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDFcMiR7YWNfZEN9XDMke2FjX2REfSxncAordCBlbmQKK3MsXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgXVteCSBdKlwpWwkgXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxJHthY19kQ31cMiR7YWNfZER9LGdwCis6IGVuZAorX0FDRU9GCisjIElmIHNvbWUgbWFjcm9zIHdlcmUgY2FsbGVkIHNldmVyYWwgdGltZXMgdGhlcmUgbWlnaHQgYmUgc2V2ZXJhbCB0aW1lcworIyB0aGUgc2FtZSAjZGVmaW5lcywgd2hpY2ggaXMgdXNlbGVzcy4gIE5ldmVydGhlbGVzcywgd2UgbWF5IG5vdCB3YW50IHRvCisjIHNvcnQgdGhlbSwgc2luY2Ugd2Ugd2FudCB0aGUgKmxhc3QqIEFDLURFRklORSB0byBiZSBob25vcmVkLgordW5pcSBjb25mZGVmcy5oIHwgc2VkIC1uIC1mIGNvbmZkZWYyc2VkLnNlZCA+Y29uZnRlc3QuZGVmaW5lcworc2VkICdzL2FjX2QvYWNfdS9nJyBjb25mdGVzdC5kZWZpbmVzID5jb25mdGVzdC51bmRlZnMKK3JtIC1mIGNvbmZkZWYyc2VkLnNlZAorCisjIFRoaXMgc2VkIGNvbW1hbmQgcmVwbGFjZXMgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yCisjIGV4YW1wbGUsIGluIHRoZSBjYXNlIG9mIF9QT1NJWF9TT1VSQ0UsIHdoaWNoIGlzIHByZWRlZmluZWQgYW5kIHJlcXVpcmVkCisjIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgd2lsbCBub3QgZGVjaWRlIHRvIGRlZmluZSBpdC4KK2NhdCA+PmNvbmZ0ZXN0LnVuZGVmcyA8PFxfQUNFT0YKK3MsXlsJIF0qI1sJIF0qdW5kZWZbCSBdWwkgXSpbYS16QS1aX11bYS16QS1aXzAtOV0qLC8qICYgKi8sCitfQUNFT0YKKworIyBCcmVhayB1cCBjb25mdGVzdC5kZWZpbmVzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uIHRoZSBzaXplCisjIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vICgxMDAgY21kcykuCitlY2hvICcgICMgSGFuZGxlIGFsbCB0aGUgI2RlZmluZSB0ZW1wbGF0ZXMgb25seSBpZiBuZWNlc3NhcnkuJyA+PiRDT05GSUdfU1RBVFVTCitlY2hvICcgIGlmIGdyZXAgIl5bCSBdKiNbCSBdKmRlZmluZSIgJHRtcC9pbiA+L2Rldi9udWxsOyB0aGVuJyA+PiRDT05GSUdfU1RBVFVTCitlY2hvICcgICMgSWYgdGhlcmUgYXJlIG5vIGRlZmluZXMsIHdlIG1heSBoYXZlIGFuIGVtcHR5IGlmL2ZpJyA+PiRDT05GSUdfU1RBVFVTCitlY2hvICcgIDonID4+JENPTkZJR19TVEFUVVMKK3JtIC1mIGNvbmZ0ZXN0LnRhaWwKK3doaWxlIGdyZXAgLiBjb25mdGVzdC5kZWZpbmVzID4vZGV2L251bGwKK2RvCisgICMgV3JpdGUgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byAkdG1wL2RlZmluZXMuc2VkLgorICBlY2hvICcgIGNhdCA+JHRtcC9kZWZpbmVzLnNlZCA8PENFT0YnID4+JENPTkZJR19TVEFUVVMKKyAgIyBTcGVlZCB1cDogZG9uJ3QgY29uc2lkZXIgdGhlIG5vbiBgI2RlZmluZScgbGluZXMuCisgIGVjaG8gJy9eWwkgXSojWwkgXSpkZWZpbmUvIWInID4+JENPTkZJR19TVEFUVVMKKyAgIyBXb3JrIGFyb3VuZCB0aGUgZm9yZ2V0LXRvLXJlc2V0LXRoZS1mbGFnIGJ1Zy4KKyAgZWNobyAndCBjbHInID4+JENPTkZJR19TVEFUVVMKKyAgZWNobyAnOiBjbHInID4+JENPTkZJR19TVEFUVVMKKyAgc2VkICR7YWNfbWF4X2hlcmVfbGluZXN9cSBjb25mdGVzdC5kZWZpbmVzID4+JENPTkZJR19TVEFUVVMKKyAgZWNobyAnQ0VPRgorICBzZWQgLWYgJHRtcC9kZWZpbmVzLnNlZCAkdG1wL2luID4kdG1wL291dAorICBybSAtZiAkdG1wL2luCisgIG12ICR0bXAvb3V0ICR0bXAvaW4KKycgPj4kQ09ORklHX1NUQVRVUworICBzZWQgMSwke2FjX21heF9oZXJlX2xpbmVzfWQgY29uZnRlc3QuZGVmaW5lcyA+Y29uZnRlc3QudGFpbAorICBybSAtZiBjb25mdGVzdC5kZWZpbmVzCisgIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QuZGVmaW5lcworZG9uZQorcm0gLWYgY29uZnRlc3QuZGVmaW5lcworZWNobyAnICBmaSAjIGdyZXAnID4+JENPTkZJR19TVEFUVVMKK2VjaG8gPj4kQ09ORklHX1NUQVRVUworCisjIEJyZWFrIHVwIGNvbmZ0ZXN0LnVuZGVmcyBiZWNhdXNlIHNvbWUgc2hlbGxzIGhhdmUgYSBsaW1pdCBvbiB0aGUgc2l6ZQorIyBvZiBoZXJlIGRvY3VtZW50cywgYW5kIG9sZCBzZWRzIGhhdmUgc21hbGwgbGltaXRzIHRvbyAoMTAwIGNtZHMpLgorZWNobyAnICAjIEhhbmRsZSBhbGwgdGhlICN1bmRlZiB0ZW1wbGF0ZXMnID4+JENPTkZJR19TVEFUVVMKK3JtIC1mIGNvbmZ0ZXN0LnRhaWwKK3doaWxlIGdyZXAgLiBjb25mdGVzdC51bmRlZnMgPi9kZXYvbnVsbAorZG8KKyAgIyBXcml0ZSBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvICR0bXAvdW5kZWZzLnNlZC4KKyAgZWNobyAnICBjYXQgPiR0bXAvdW5kZWZzLnNlZCA8PENFT0YnID4+JENPTkZJR19TVEFUVVMKKyAgIyBTcGVlZCB1cDogZG9uJ3QgY29uc2lkZXIgdGhlIG5vbiBgI3VuZGVmJworICBlY2hvICcvXlsJIF0qI1sJIF0qdW5kZWYvIWInID4+JENPTkZJR19TVEFUVVMKKyAgIyBXb3JrIGFyb3VuZCB0aGUgZm9yZ2V0LXRvLXJlc2V0LXRoZS1mbGFnIGJ1Zy4KKyAgZWNobyAndCBjbHInID4+JENPTkZJR19TVEFUVVMKKyAgZWNobyAnOiBjbHInID4+JENPTkZJR19TVEFUVVMKKyAgc2VkICR7YWNfbWF4X2hlcmVfbGluZXN9cSBjb25mdGVzdC51bmRlZnMgPj4kQ09ORklHX1NUQVRVUworICBlY2hvICdDRU9GCisgIHNlZCAtZiAkdG1wL3VuZGVmcy5zZWQgJHRtcC9pbiA+JHRtcC9vdXQKKyAgcm0gLWYgJHRtcC9pbgorICBtdiAkdG1wL291dCAkdG1wL2luCisnID4+JENPTkZJR19TVEFUVVMKKyAgc2VkIDEsJHthY19tYXhfaGVyZV9saW5lc31kIGNvbmZ0ZXN0LnVuZGVmcyA+Y29uZnRlc3QudGFpbAorICBybSAtZiBjb25mdGVzdC51bmRlZnMKKyAgbXYgY29uZnRlc3QudGFpbCBjb25mdGVzdC51bmRlZnMKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LnVuZGVmcworCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKyAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKyAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiID0geC07IHRoZW4KKyAgICBlY2hvICIvKiBHZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgKi8iID4kdG1wL2NvbmZpZy5oCisgIGVsc2UKKyAgICBlY2hvICIvKiAkYWNfZmlsZS4gIEdlbmVyYXRlZCBieSBjb25maWd1cmUuICAqLyIgPiR0bXAvY29uZmlnLmgKKyAgZmkKKyAgY2F0ICR0bXAvaW4gPj4kdG1wL2NvbmZpZy5oCisgIHJtIC1mICR0bXAvaW4KKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgIGlmIGRpZmYgJGFjX2ZpbGUgJHRtcC9jb25maWcuaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1CitlY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICBlbHNlCisgICAgICBhY19kaXI9YChkaXJuYW1lICIkYWNfZmlsZSIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgICAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wICIkYWNfZGlyIgorICBlbHNlCisgICAgYXNfZGlyPSIkYWNfZGlyIgorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCisgICAgICBybSAtZiAkYWNfZmlsZQorICAgICAgbXYgJHRtcC9jb25maWcuaCAkYWNfZmlsZQorICAgIGZpCisgIGVsc2UKKyAgICBjYXQgJHRtcC9jb25maWcuaAorICAgIHJtIC1mICR0bXAvY29uZmlnLmgKKyAgZmkKK2RvbmUKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKworeyAoZXhpdCAwKTsgZXhpdCAwOyB9CitfQUNFT0YKK2NobW9kICt4ICRDT05GSUdfU1RBVFVTCithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQorCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KKyMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLgorIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KKyMgYnkgY29uZmlndXJlLCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cworIyBvdXRwdXQgaXMgc2ltcGx5IGRpc2NhcmRlZC4gIFNvIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwKKyMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKKyMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4gY29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQorIyBuZWVkIHRvIG1ha2UgdGhlIEZEIGF2YWlsYWJsZSBhZ2Fpbi4KK2lmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgorICBhY19jc19zdWNjZXNzPToKKyAgYWNfY29uZmlnX3N0YXR1c19hcmdzPQorICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgorICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0IgorICBleGVjIDU+L2Rldi9udWxsCisgICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKKyAgZXhlYyA1Pj5jb25maWcubG9nCisgICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCisgICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgorICAkYWNfY3Nfc3VjY2VzcyB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KK2ZpCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86ICIgPiY1CitlY2hvICIkYXNfbWU6ICIgPiY2O30KK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IE5vdyBlZGl0IG9wdGlvbnMuaCB0byBjaG9vc2UgZmVhdHVyZXMuIiA+JjUKK2VjaG8gIiRhc19tZTogTm93IGVkaXQgb3B0aW9ucy5oIHRvIGNob29zZSBmZWF0dXJlcy4iID4mNjt9CmRpZmYgLS1naXQgYS9jb25maWd1cmUuaW4gYi9jb25maWd1cmUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM3MGI5MQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5pbgpAQCAtMCwwICsxLDY2OCBAQAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIGFuZCBhdXRvaGVhZGVyIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgorCisjIFRoaXMgQXV0b2NvbmYgZmlsZSB3YXMgY29iYmxlZCBmcm9tIHZhcmlvdXMgbG9jYXRpb25zLiBJbiBwYXJ0aWN1bGFyLCBhIGJ1bmNoCisjIG9mIHRoZSBwbGF0Zm9ybSBjaGVja3MgaGF2ZSBiZWVuIHRha2VuIHN0cmFpZ2h0IGZyb20gT3BlblNTSCdzIGNvbmZpZ3VyZS5hYworIyBIdWdlIHRoYW5rcyB0byB0aGVtIGZvciBkZWFsaW5nIHdpdGggdGhlIGhvcnJpYmxlIHBsYXRmb3JtLXNwZWNpZmljcyA6KQorCitBQ19QUkVSRVEoMi41MCkKK0FDX0lOSVQoYnVmZmVyLmMpCisKK09MRENGTEFHUz0kQ0ZMQUdTCisjIENoZWNrcyBmb3IgcHJvZ3JhbXMuCitBQ19QUk9HX0NDCitBQ19QUk9HX01BS0VfU0VUCisKK2lmIHRlc3QgLXogIiRMRCIgOyB0aGVuCisJTEQ9JENDCitmaQorQUNfU1VCU1QoTEQpCQorCitpZiB0ZXN0IC16ICIkT0xEQ0ZMQUdTIiAmJiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiOyB0aGVuCisJQUNfTVNHX05PVElDRShObyBcJENGTEFHUyBzZXQuLi4gdXNpbmcgIi1PcyAtVyAtV2FsbCIgZm9yIEdDQykKKwlDRkxBR1M9Ii1PcyAtVyAtV2FsbCIKK2ZpCisKKyMgbGFyZ2UgZmlsZSBzdXBwb3J0IGlzIHVzZWZ1bCBmb3Igc2NwCitBQ19TWVNfTEFSR0VGSUxFCisKKyMgSG9zdCBzcGVjaWZpYyBvcHRpb25zCisjIHRoaXMgaXNuJ3QgYSBkZWZpbml0aXZlIGxpc3Qgb2YgaG9zdHMsIHRoZXkgYXJlIGp1c3QgYWRkZWQgYXMgcmVxdWlyZWQKK0FDX0NBTk9OSUNBTF9IT1NUCisKK2Nhc2UgIiRob3N0IiBpbgorCisqLSotbGludXgqKQorCW5vX3B0bXhfY2hlY2s9MQorCTs7CisKKyotKi1zb2xhcmlzKikKKwlDRkxBR1M9IiRDRkxBR1MgLUkvdXNyL2xvY2FsL2luY2x1ZGUiCisJTERGTEFHUz0iJExERkxBR1MgLUwvdXNyL2xvY2FsL2xpYiAtUi91c3IvbG9jYWwvbGliIgorCWNvbmZfbGFzdGxvZ19sb2NhdGlvbj0iL3Zhci9hZG0vbGFzdGxvZyIKKwlBQ19NU0dfQ0hFQ0tJTkcoZm9yIG9ic29sZXRlIHV0bXAgYW5kIHd0bXAgaW4gc29sYXJpczIueCkKKwlzb2wydmVyPWBlY2hvICIkaG9zdCJ8IHNlZCAtZSAncy8uKltbMC05XV1cLi8vJ2AKKwlpZiB0ZXN0ICIkc29sMnZlciIgLWdlIDg7IHRoZW4KKwkJQUNfTVNHX1JFU1VMVCh5ZXMpCisJCUFDX0RFRklORShESVNBQkxFX1VUTVAsLERpc2FibGUgdXRtcCkKKwkJQUNfREVGSU5FKERJU0FCTEVfV1RNUCwsRGlzYWJsZSB3dG1wKQorCWVsc2UKKwkJQUNfTVNHX1JFU1VMVChubykKKwlmaQorCUFDX0NIRUNLX0xJQihzb2NrZXQsIHNvY2tldCwgTElCUz0iJExJQlMgLWxzb2NrZXQiKQorCUFDX0NIRUNLX0xJQihuc2wsIHlwX21hdGNoLCBMSUJTPSIkTElCUyAtbG5zbCIpCisJOzsKKworKi0qLWFpeCopCisJQUNfREVGSU5FKEFJWCwsVXNpbmcgQUlYKQorCSMgT3BlblNTSCB0aGlua3MgaXQncyBicm9rZW4uIElmIGl0IGlzbid0LCBsZXQgbWUga25vdy4KKwlBQ19ERUZJTkUoQlJPS0VOX0dFVEFERFJJTkZPLCxCcm9rZW4gZ2V0YWRkcmluZm8pCisJOzsKKwkKKyotKi1ocHV4KikKKwlMSUJTPSIkTElCUyAtbHNlYyIKKwkjIEl0J3MgcHJvYmFibHkgYnJva2VuLgorCUFDX0RFRklORShCUk9LRU5fR0VUQUREUklORk8sLEJyb2tlbiBnZXRhZGRyaW5mbykKKwk7OworKi1kZWMtb3NmKikKKwlBQ19ERUZJTkUoQlJPS0VOX0dFVEFERFJJTkZPLCxCcm9rZW4gZ2V0YWRkcmluZm8pCisJOzsKK2VzYWMKKworQUNfQ0hFQ0tfVE9PTChBUiwgYXIsIDopCitBQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQorQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCitBQ19DSEVDS19UT09MKElOU1RBTEwsIGluc3RhbGwsIDopCisKK2RubCBDYW4ndCB1c2UgbG9naW4oKSBvciBsb2dvdXQoKSB3aXRoIHVjbGliYworQUNfQ0hFQ0tfREVDTChfX1VDTElCQ19fLCAKKwlbCisJbm9fbG9naW5mdW5jX2NoZWNrPTEKKwlBQ19NU0dfTk9USUNFKFtVc2luZyB1Q2xpYmMgLSBsb2dpbigpIGFuZCBsb2dvdXQoKSBwcm9iYWJseSBkb24ndCB3b3JrLCBzbyB3ZSB3b24ndCB1c2UgdGhlbS5dKQorCV0sLCwpCisKKyMgQ2hlY2tzIGZvciBsaWJyYXJpZXMuCitBQ19DSEVDS19MSUIoY3J5cHQsIGNyeXB0LCBMSUJTPSIkTElCUyAtbGNyeXB0IikKKworIyBDaGVjayBpZiB6bGliIGlzIG5lZWRlZAorQUNfQVJHX1dJVEgoemxpYiwKKwlbICAtLXdpdGgtemxpYj1QQVRIICAgICAgICBVc2UgemxpYiBpbiBQQVRIXSwKKwlbCisJCSMgb3B0aW9uIGlzIGdpdmVuCisJCWlmIHRlc3QgLWQgIiR3aXRodmFsL2xpYiI7IHRoZW4KKwkJCUxERkxBR1M9Ii1MJHt3aXRodmFsfS9saWIgJHtMREZMQUdTfSIKKwkJZWxzZQorCQkJTERGTEFHUz0iLUwke3dpdGh2YWx9ICR7TERGTEFHU30iCisJCWZpCisJCWlmIHRlc3QgLWQgIiR3aXRodmFsL2luY2x1ZGUiOyB0aGVuCisJCQlDUFBGTEFHUz0iLUkke3dpdGh2YWx9L2luY2x1ZGUgJHtDUFBGTEFHU30iCisJCWVsc2UKKwkJCUNQUEZMQUdTPSItSSR7d2l0aHZhbH0gJHtDUFBGTEFHU30iCisJCWZpCisJXQorKQorCitBQ19BUkdfRU5BQkxFKHpsaWIsCisJWyAgLS1kaXNhYmxlLXpsaWIgICAgICAgICAgRG9uJ3QgaW5jbHVkZSB6bGliIHN1cHBvcnRdLAorCVsKKwkJaWYgdGVzdCAieCRlbmFibGV2YWwiID0gInhubyI7IHRoZW4KKwkJCUFDX0RFRklORShESVNBQkxFX1pMSUIsLCBVc2UgemxpYikKKwkJCUFDX01TR19OT1RJQ0UoRGlzYWJsaW5nIHpsaWIpCisJCWVsc2UKKwkJCUFDX0NIRUNLX0xJQih6LCBkZWZsYXRlLCAsIEFDX01TR19FUlJPUihbKioqIHpsaWIgbWlzc2luZyAtIGluc3RhbGwgZmlyc3Qgb3IgY2hlY2sgY29uZmlnLmxvZyAqKipdKSkKKwkJCUFDX01TR19OT1RJQ0UoRW5hYmxpbmcgemxpYikKKwkJZmkKKwldLAorCVsKKwkJIyBpZiBub3QgZGlzYWJsZWQsIGNoZWNrIGZvciB6bGliCisJCUFDX0NIRUNLX0xJQih6LCBkZWZsYXRlLCAsIEFDX01TR19FUlJPUihbKioqIHpsaWIgbWlzc2luZyAtIGluc3RhbGwgZmlyc3Qgb3IgY2hlY2sgY29uZmlnLmxvZyAqKipdKSkKKwkJQUNfTVNHX05PVElDRShFbmFibGluZyB6bGliKQorCV0KKykKKworIyBDaGVjayBpZiBwYW0gaXMgbmVlZGVkCitBQ19BUkdfV0lUSChwYW0sCisJWyAgLS13aXRoLXBhbT1QQVRIICAgICAgICBVc2UgcGFtIGluIFBBVEhdLAorCVsKKwkJIyBvcHRpb24gaXMgZ2l2ZW4KKwkJaWYgdGVzdCAtZCAiJHdpdGh2YWwvbGliIjsgdGhlbgorCQkJTERGTEFHUz0iLUwke3dpdGh2YWx9L2xpYiAke0xERkxBR1N9IgorCQllbHNlCisJCQlMREZMQUdTPSItTCR7d2l0aHZhbH0gJHtMREZMQUdTfSIKKwkJZmkKKwkJaWYgdGVzdCAtZCAiJHdpdGh2YWwvaW5jbHVkZSI7IHRoZW4KKwkJCUNQUEZMQUdTPSItSSR7d2l0aHZhbH0vaW5jbHVkZSAke0NQUEZMQUdTfSIKKwkJZWxzZQorCQkJQ1BQRkxBR1M9Ii1JJHt3aXRodmFsfSAke0NQUEZMQUdTfSIKKwkJZmkKKwldCispCisKKworQUNfQVJHX0VOQUJMRShwYW0sCisJWyAgLS1lbmFibGUtcGFtICAgICAgICAgIFRyeSB0byBpbmNsdWRlIFBBTSBzdXBwb3J0XSwKKwlbCisJCWlmIHRlc3QgIngkZW5hYmxldmFsIiA9ICJ4eWVzIjsgdGhlbgorCQkJQUNfQ0hFQ0tfTElCKHBhbSwgcGFtX2F1dGhlbnRpY2F0ZSwgLCBBQ19NU0dfRVJST1IoWyoqKiBQQU0gbWlzc2luZyAtIGluc3RhbGwgZmlyc3Qgb3IgY2hlY2sgY29uZmlnLmxvZyAqKipdKSkKKwkJCUFDX01TR19OT1RJQ0UoRW5hYmxpbmcgUEFNKQorCQllbHNlCisJCQlBQ19ERUZJTkUoRElTQUJMRV9QQU0sLCBVc2UgUEFNKQorCQkJQUNfTVNHX05PVElDRShEaXNhYmxpbmcgUEFNKQorCQlmaQorCV0sCisJWworCQkjIGRpc2FibGUgaXQgYnkgZGVmYXVsdAorCQlBQ19ERUZJTkUoRElTQUJMRV9QQU0sLCBVc2UgUEFNKQorCQlBQ19NU0dfTk9USUNFKERpc2FibGluZyBQQU0pCisJXQorKQorCitBQ19BUkdfRU5BQkxFKG9wZW5wdHksCisJWyAgLS1kaXNhYmxlLW9wZW5wdHkgICAgICAgRG9uJ3QgdXNlIG9wZW5wdHksIHVzZSBhbHRlcm5hdGl2ZSBtZXRob2RdLAorCVsKKwkJaWYgdGVzdCAieCRlbmFibGV2YWwiID0gInhubyI7IHRoZW4KKwkJCUFDX01TR19OT1RJQ0UoTm90IHVzaW5nIG9wZW5wdHkpCisJCWVsc2UKKwkJCUFDX01TR19OT1RJQ0UoVXNpbmcgb3BlbnB0eSBpZiBhdmFpbGFibGUpCisJCQlBQ19TRUFSQ0hfTElCUyhvcGVucHR5LCB1dGlsLCBbQUNfREVGSU5FKEhBVkVfT1BFTlBUWSwsSGF2ZSBvcGVucHR5KCkgZnVuY3Rpb24pXSkKKwkJZmkKKwldLAorCVsKKwkJQUNfTVNHX05PVElDRShVc2luZyBvcGVucHR5IGlmIGF2YWlsYWJsZSkKKwkJQUNfU0VBUkNIX0xJQlMob3BlbnB0eSwgdXRpbCwgW0FDX0RFRklORShIQVZFX09QRU5QVFkpXSkKKwldCispCisJCQorCitBQ19BUkdfRU5BQkxFKHN5c2xvZywKKwlbICAtLWRpc2FibGUtc3lzbG9nICAgICAgICBEb24ndCBpbmNsdWRlIHN5c2xvZyBzdXBwb3J0XSwKKwlbCisJCWlmIHRlc3QgIngkZW5hYmxldmFsIiA9ICJ4bm8iOyB0aGVuCisJCQlBQ19ERUZJTkUoRElTQUJMRV9TWVNMT0csLCBVc2luZyBzeXNsb2cpCisJCQlBQ19NU0dfTk9USUNFKERpc2FibGluZyBzeXNsb2cpCisJCWVsc2UKKwkJCUFDX01TR19OT1RJQ0UoRW5hYmxpbmcgc3lzbG9nKQorCQlmaQorCV0sCisJWworCQlBQ19NU0dfTk9USUNFKEVuYWJsaW5nIHN5c2xvZykKKwldCispCisKK0FDX0FSR19FTkFCTEUoc2hhZG93LAorCVsgIC0tZGlzYWJsZS1zaGFkb3cgICAgICAgIERvbid0IHVzZSBzaGFkb3cgcGFzc3dvcmRzIChpZiBhdmFpbGFibGUpXSwKKwlbCisJCWlmIHRlc3QgIngkZW5hYmxldmFsIiA9ICJ4bm8iOyB0aGVuCisJCQlBQ19NU0dfTk9USUNFKE5vdCB1c2luZyBzaGFkb3cgcGFzc3dvcmRzKQorCQllbHNlCisJCQlBQ19DSEVDS19IRUFERVJTKFtzaGFkb3cuaF0pCisJCQlBQ19NU0dfTk9USUNFKFVzaW5nIHNoYWRvdyBwYXNzd29yZHMgaWYgYXZhaWxhYmxlKQorCQlmaQorCV0sCisJWworCQlBQ19DSEVDS19IRUFERVJTKFtzaGFkb3cuaF0pCisJCUFDX01TR19OT1RJQ0UoVXNpbmcgc2hhZG93IHBhc3N3b3JkcyBpZiBhdmFpbGFibGUpCisJXQorKQorCQkJCisKKyMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCitBQ19IRUFERVJfU1REQworQUNfSEVBREVSX1NZU19XQUlUCitBQ19DSEVDS19IRUFERVJTKFtmY250bC5oIGxpbWl0cy5oIG5ldGluZXQvaW4uaCBuZXRpbmV0L3RjcC5oIHN0ZGxpYi5oIHN0cmluZy5oIHN5cy9zb2NrZXQuaCBzeXMvdGltZS5oIHRlcm1pb3MuaCB1bmlzdGQuaCBjcnlwdC5oIHB0eS5oIGlvY3RsLmggbGlidXRpbC5oIGxpYmdlbi5oIGludHR5cGVzLmggc3Ryb3B0cy5oIHV0bXAuaCB1dG1weC5oIGxhc3Rsb2cuaCBwYXRocy5oIHV0aWwuaCBuZXRkYi5oIHNlY3VyaXR5L3BhbV9hcHBsLmggcGFtL3BhbV9hcHBsLmggbmV0aW5ldC9pbl9zeXN0bS5oXSkKKworIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorQUNfQ19DT05TVAorQUNfVFlQRV9VSURfVAorQUNfVFlQRV9NT0RFX1QKK0FDX1RZUEVfUElEX1QKK0FDX1RZUEVfU0laRV9UCitBQ19IRUFERVJfVElNRQorCitBQ19DSEVDS19UWVBFUyhbdWludDE2X3QsIHVfaW50MTZfdCwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2VdKQorQUNfQ0hFQ0tfVFlQRShbc29ja2xlbl90XSwgLFsKKwlBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzb2NrbGVuX3QgZXF1aXZhbGVudF0pCisJQUNfQ0FDSEVfVkFMKFtjdXJsX2N2X3NvY2tsZW5fdF9lcXVpdl0sCisJWworCSMgU3lzdGVtcyBoYXZlIGVpdGhlciAic3RydWN0IHNvY2thZGRyICoiIG9yCisJIyAidm9pZCAqIiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIGdldHBlZXJuYW1lCisJY3VybF9jdl9zb2NrbGVuX3RfZXF1aXY9CisJZm9yIGFyZzIgaW4gInN0cnVjdCBzb2NrYWRkciIgdm9pZDsgZG8KKwkJZm9yIHQgaW4gaW50IHNpemVfdCB1bnNpZ25lZCBsb25nICJ1bnNpZ25lZCBsb25nIjsgZG8KKwkJQUNfVFJZX0NPTVBJTEUoWworCQkJI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCQkJI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworCQkJaW50IGdldHBlZXJuYW1lIChpbnQsICRhcmcyICosICR0ICopOworCQldLFsKKwkJCSR0IGxlbjsKKwkJCWdldHBlZXJuYW1lKDAsMCwmbGVuKTsKKwkJXSxbCisJCQljdXJsX2N2X3NvY2tsZW5fdF9lcXVpdj0iJHQiCisJCQlicmVhaworCQldKQorCQlkb25lCisJZG9uZQorCisJaWYgdGVzdCAieCRjdXJsX2N2X3NvY2tsZW5fdF9lcXVpdiIgPSB4OyB0aGVuCisJCUFDX01TR19FUlJPUihbQ2Fubm90IGZpbmQgYSB0eXBlIHRvIHVzZSBpbiBwbGFjZSBvZiBzb2NrbGVuX3RdKQorCWZpCisJXSkKKwlBQ19NU0dfUkVTVUxUKCRjdXJsX2N2X3NvY2tsZW5fdF9lcXVpdikKKwlBQ19ERUZJTkVfVU5RVU9URUQoc29ja2xlbl90LCAkY3VybF9jdl9zb2NrbGVuX3RfZXF1aXYsCisJCQlbdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Ygc29ja2xlbl90IGlmIG5vdCBkZWZpbmVkXSldLAorCVsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dKQorCisjIGZvciB0aGUgZmFrZS1yZmMyNTUzIHN0dWZmIC0gc3RyYWlnaHQgZnJvbSBPcGVuU1NICisKK0FDX0NBQ0hFX0NIRUNLKFtmb3Igc3RydWN0IHNvY2thZGRyX3N0b3JhZ2VdLCBhY19jdl9oYXZlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlLCBbCisJQUNfVFJZX0NPTVBJTEUoCisJCVsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisJCV0sCisJCVsgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgczsgXSwKKwkJWyBhY19jdl9oYXZlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlPSJ5ZXMiIF0sCisJCVsgYWNfY3ZfaGF2ZV9zdHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZT0ibm8iIF0KKwkpCitdKQoraWYgdGVzdCAieCRhY19jdl9oYXZlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlIiA9ICJ4eWVzIiA7IHRoZW4KKwlBQ19ERUZJTkUoSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRSkKK2ZpCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3Igc3RydWN0IHNvY2thZGRyX2luNl0sIGFjX2N2X2hhdmVfc3RydWN0X3NvY2thZGRyX2luNiwgWworCUFDX1RSWV9DT01QSUxFKAorCQlbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCQldLAorCQlbIHN0cnVjdCBzb2NrYWRkcl9pbjYgczsgcy5zaW42X2ZhbWlseSA9IDA7IF0sCisJCVsgYWNfY3ZfaGF2ZV9zdHJ1Y3Rfc29ja2FkZHJfaW42PSJ5ZXMiIF0sCisJCVsgYWNfY3ZfaGF2ZV9zdHJ1Y3Rfc29ja2FkZHJfaW42PSJubyIgXQorCSkKK10pCitpZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfc3RydWN0X3NvY2thZGRyX2luNiIgPSAieHllcyIgOyB0aGVuCisJQUNfREVGSU5FKEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONiwsSGF2ZSBzdHJ1Y3Qgc29ja2FkZHJfaW42KQorZmkKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzdHJ1Y3QgaW42X2FkZHJdLCBhY19jdl9oYXZlX3N0cnVjdF9pbjZfYWRkciwgWworCUFDX1RSWV9DT01QSUxFKAorCQlbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCQldLAorCQlbIHN0cnVjdCBpbjZfYWRkciBzOyBzLnM2X2FkZHJbMF0gPSAwOyBdLAorCQlbIGFjX2N2X2hhdmVfc3RydWN0X2luNl9hZGRyPSJ5ZXMiIF0sCisJCVsgYWNfY3ZfaGF2ZV9zdHJ1Y3RfaW42X2FkZHI9Im5vIiBdCisJKQorXSkKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9zdHJ1Y3RfaW42X2FkZHIiID0gInh5ZXMiIDsgdGhlbgorCUFDX0RFRklORShIQVZFX1NUUlVDVF9JTjZfQUREUiwsSGF2ZSBzdHJ1Y3QgaW42X2FkZHIpCitmaQorCitBQ19DQUNIRV9DSEVDSyhbZm9yIHN0cnVjdCBhZGRyaW5mb10sIGFjX2N2X2hhdmVfc3RydWN0X2FkZHJpbmZvLCBbCisJQUNfVFJZX0NPTVBJTEUoCisJCVsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKwkJXSwKKwkJWyBzdHJ1Y3QgYWRkcmluZm8gczsgcy5haV9mbGFncyA9IEFJX1BBU1NJVkU7IF0sCisJCVsgYWNfY3ZfaGF2ZV9zdHJ1Y3RfYWRkcmluZm89InllcyIgXSwKKwkJWyBhY19jdl9oYXZlX3N0cnVjdF9hZGRyaW5mbz0ibm8iIF0KKwkpCitdKQoraWYgdGVzdCAieCRhY19jdl9oYXZlX3N0cnVjdF9hZGRyaW5mbyIgPSAieHllcyIgOyB0aGVuCisJQUNfREVGSU5FKEhBVkVfU1RSVUNUX0FERFJJTkZPLCxIYXZlIHN0cnVjdCBhZGRyaW5mbykKK2ZpCisKKworIyBJUklYIGhhcyBhIGNvbnN0IGNoYXIgcmV0dXJuIHZhbHVlIGZvciBnYWlfc3RyZXJyb3IoKQorQUNfQ0hFQ0tfRlVOQ1MoZ2FpX3N0cmVycm9yLFsKKwlBQ19ERUZJTkUoSEFWRV9HQUlfU1RSRVJST1IpCisJQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCitjb25zdCBjaGFyICpnYWlfc3RyZXJyb3IoaW50KTtdLFsKK2NoYXIgKnN0cjsKKworc3RyID0gZ2FpX3N0cmVycm9yKDApO10sWworCQlBQ19ERUZJTkUoSEFWRV9DT05TVF9HQUlfU1RSRVJST1JfUFJPVE8sIDEsCisJCVtEZWZpbmUgaWYgZ2FpX3N0cmVycm9yKCkgcmV0dXJucyBjb25zdCBjaGFyICpdKV0pXSkKKworIyBmb3IgbG9naW5yZWMuYworCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgdXRtcC51dF9ob3N0LCBzdHJ1Y3QgdXRtcC51dF9waWQsIHN0cnVjdCB1dG1wLnV0X3R5cGUsIHN0cnVjdCB1dG1wLnV0X3R2LCBzdHJ1Y3QgdXRtcC51dF9pZCwgc3RydWN0IHV0bXAudXRfYWRkciwgc3RydWN0IHV0bXAudXRfYWRkcl92Niwgc3RydWN0IHV0bXAudXRfZXhpdCwgc3RydWN0IHV0bXAudXRfdGltZV0sLCxbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9VVE1QX0gKKyNpbmNsdWRlIDx1dG1wLmg+CisjZW5kaWYKK10pCisKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCB1dG1weC51dF9ob3N0LCBzdHJ1Y3QgdXRtcHgudXRfc3lzbGVuLCBzdHJ1Y3QgdXRtcHgudXRfdHlwZSwgc3RydWN0IHV0bXB4LnV0X2lkLCBzdHJ1Y3QgdXRtcHgudXRfYWRkciwgc3RydWN0IHV0bXB4LnV0X2FkZHJfdjYsIHN0cnVjdCB1dG1weC51dF90aW1lLCBzdHJ1Y3QgdXRtcHgudXRfdHZdLCwsWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpZiBIQVZFX1VUTVBYX0gKKyNpbmNsdWRlIDx1dG1weC5oPgorI2VuZGlmCitdKQorCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZS5zc19mYW1pbHldLCwsWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KK10pCisKK0FDX0NIRUNLX0ZVTkNTKGVuZHV0ZW50IGdldHV0ZW50IGdldHV0aWQgZ2V0dXRsaW5lIHB1dHV0bGluZSBzZXR1dGVudCkKK0FDX0NIRUNLX0ZVTkNTKHV0bXBuYW1lKQorQUNfQ0hFQ0tfRlVOQ1MoZW5kdXR4ZW50IGdldHV0eGVudCBnZXR1dHhpZCBnZXR1dHhsaW5lIHB1dHV0eGxpbmUgKQorQUNfQ0hFQ0tfRlVOQ1Moc2V0dXR4ZW50IHV0bXB4bmFtZSkKK0FDX0NIRUNLX0ZVTkNTKGxvZ291dCB1cGR3dG1wIGxvZ3d0bXApCisKK2RubCBBZGRlZCBmcm9tIE9wZW5TU0ggMy42LjFwMidzIGNvbmZpZ3VyZS5hYworCitkbmwgYWxsb3cgdXNlciB0byBkaXNhYmxlIHNvbWUgbG9naW4gcmVjb3JkaW5nIGZlYXR1cmVzCitBQ19BUkdfRU5BQkxFKGxhc3Rsb2csCisJWyAgLS1kaXNhYmxlLWxhc3Rsb2cgICAgICAgRGlzYWJsZSB1c2Ugb2YgbGFzdGxvZyBldmVuIGlmIGRldGVjdGVkIFtub11dLAorCVsgQUNfREVGSU5FKERJU0FCTEVfTEFTVExPRywsRGlzYWJsZSB1c2Ugb2YgbGFzdGxvZygpKSBdCispCitBQ19BUkdfRU5BQkxFKHV0bXAsCisJWyAgLS1kaXNhYmxlLXV0bXAgICAgICAgICAgRGlzYWJsZSB1c2Ugb2YgdXRtcCBldmVuIGlmIGRldGVjdGVkIFtub11dLAorCVsgQUNfREVGSU5FKERJU0FCTEVfVVRNUCwsRGlzYWJsZSB1c2Ugb2YgdXRtcCkgXQorKQorQUNfQVJHX0VOQUJMRSh1dG1weCwKKwlbICAtLWRpc2FibGUtdXRtcHggICAgICAgICBEaXNhYmxlIHVzZSBvZiB1dG1weCBldmVuIGlmIGRldGVjdGVkIFtub11dLAorCVsgQUNfREVGSU5FKERJU0FCTEVfVVRNUFgsLERpc2FibGUgdXNlIG9mIHV0bXB4KSBdCispCitBQ19BUkdfRU5BQkxFKHd0bXAsCisJWyAgLS1kaXNhYmxlLXd0bXAgICAgICAgICAgRGlzYWJsZSB1c2Ugb2Ygd3RtcCBldmVuIGlmIGRldGVjdGVkIFtub11dLAorCVsgQUNfREVGSU5FKERJU0FCTEVfV1RNUCwsRGlzYWJsZSB1c2Ugb2Ygd3RtcCkgXQorKQorQUNfQVJHX0VOQUJMRSh3dG1weCwKKwlbICAtLWRpc2FibGUtd3RtcHggICAgICAgICBEaXNhYmxlIHVzZSBvZiB3dG1weCBldmVuIGlmIGRldGVjdGVkIFtub11dLAorCVsgQUNfREVGSU5FKERJU0FCTEVfV1RNUFgsLERpc2FibGUgdXNlIG9mIHd0bXB4KSBdCispCitBQ19BUkdfRU5BQkxFKGxvZ2luZnVuYywKKwlbICAtLWRpc2FibGUtbG9naW5mdW5jICAgICBEaXNhYmxlIHVzZSBvZiBsb2dpbigpIGV0Yy4gW25vXV0sCisJWyBub19sb2dpbmZ1bmNfY2hlY2s9MQorCUFDX01TR19OT1RJQ0UoTm90IHVzaW5nIGxvZ2luKCkgZXRjKSBdCispCitBQ19BUkdfRU5BQkxFKHB1dHV0bGluZSwKKwlbICAtLWRpc2FibGUtcHV0dXRsaW5lICAgICBEaXNhYmxlIHVzZSBvZiBwdXR1dGxpbmUoKSBldGMuIChbdXdddG1wKSBbbm9dXSwKKwlbIEFDX0RFRklORShESVNBQkxFX1BVVFVUTElORSwsRGlzYWJsZSB1c2Ugb2YgcHV0dXRsaW5lKCkpIF0KKykKK0FDX0FSR19FTkFCTEUocHV0dXR4bGluZSwKKwlbICAtLWRpc2FibGUtcHV0dXR4bGluZSAgICBEaXNhYmxlIHVzZSBvZiBwdXR1dHhsaW5lKCkgZXRjLiAoW3V3XXRtcHgpIFtub11dLAorCVsgQUNfREVGSU5FKERJU0FCTEVfUFVUVVRYTElORSwsRGlzYWJsZSB1c2Ugb2YgcHV0dXR4bGluZSgpKSBdCispCitBQ19BUkdfV0lUSChsYXN0bG9nLAorICBbICAtLXdpdGgtbGFzdGxvZz1GSUxFfERJUiBzcGVjaWZ5IGxhc3Rsb2cgbG9jYXRpb24gW2NvbW1vbiBsb2NhdGlvbnNdXSwKKwlbCisJCWlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIiA7IHRoZW4JCisJCQlBQ19ERUZJTkUoRElTQUJMRV9MQVNUTE9HKQorCQllbHNlCisJCQljb25mX2xhc3Rsb2dfbG9jYXRpb249JHdpdGh2YWwKKwkJZmkKKwldCispCisKK2lmIHRlc3QgLXogIiRub19sb2dpbmZ1bmNfY2hlY2siOyB0aGVuCisJZG5sICAgIENoZWNrcyBmb3IgbGlidXRpbCBmdW5jdGlvbnMgKGxvZ2luKCksIGxvZ291dCgpIGV0Yywgbm90IG9wZW5wdHkoKSApCisJQUNfU0VBUkNIX0xJQlMobG9naW4sIHV0aWwgYnNkLCBbQUNfREVGSU5FKEhBVkVfTE9HSU4sLEhhdmUgbG9naW4oKSBmdW5jdGlvbildKQorCUFDX0NIRUNLX0ZVTkNTKGxvZ291dCB1cGR3dG1wIGxvZ3d0bXApCitmaQorCitkbmwgbGFzdGxvZywgW3V3XXRtcHg/IGRldGVjdGlvbgorZG5sICBOT1RFOiBzZXQgdGhlIHBhdGhzIGluIHRoZSBwbGF0Zm9ybSBzZWN0aW9uIHRvIGF2b2lkIHRoZQorZG5sICAgbmVlZCBmb3IgY29tbWFuZC1saW5lIHBhcmFtZXRlcnMKK2RubCBsYXN0bG9nIGFuZCBbdXdddG1wIGFyZSBzdWJqZWN0IHRvIGEgZmlsZSBzZWFyY2ggaWYgYWxsIGVsc2UgZmFpbHMKKworZG5sIGxhc3Rsb2cgZGV0ZWN0aW9uCitkbmwgIE5PVEU6IHRoZSBjb2RlIGl0c2VsZiB3aWxsIGRldGVjdCBpZiBsYXN0bG9nIGlzIGEgZGlyZWN0b3J5CitBQ19NU0dfQ0hFQ0tJTkcoW2lmIHlvdXIgc3lzdGVtIGRlZmluZXMgTEFTVExPR19GSUxFXSkKK0FDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1dG1wLmg+CisjaWZkZWYgSEFWRV9MQVNUTE9HX0gKKyMgIGluY2x1ZGUgPGxhc3Rsb2cuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfUEFUSFNfSAorIyAgaW5jbHVkZSA8cGF0aHMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTE9HSU5fSAorIyBpbmNsdWRlIDxsb2dpbi5oPgorI2VuZGlmCisJXSwKKwlbIGNoYXIgKmxhc3Rsb2cgPSBMQVNUTE9HX0ZJTEU7IF0sCisJWyBBQ19NU0dfUkVTVUxUKHllcykgXSwKKwlbCisJCUFDX01TR19SRVNVTFQobm8pCisJCUFDX01TR19DSEVDS0lORyhbaWYgeW91ciBzeXN0ZW0gZGVmaW5lcyBfUEFUSF9MQVNUTE9HXSkKKwkJQUNfVFJZX0NPTVBJTEUoWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHV0bXAuaD4KKyNpZmRlZiBIQVZFX0xBU1RMT0dfSAorIyAgaW5jbHVkZSA8bGFzdGxvZy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9QQVRIU19ICisjICBpbmNsdWRlIDxwYXRocy5oPgorI2VuZGlmCisJCV0sCisJCVsgY2hhciAqbGFzdGxvZyA9IF9QQVRIX0xBU1RMT0c7IF0sCisJCVsgQUNfTVNHX1JFU1VMVCh5ZXMpIF0sCisJCVsKKwkJCUFDX01TR19SRVNVTFQobm8pCisJCQlzeXN0ZW1fbGFzdGxvZ19wYXRoPW5vCisJCV0pCisJXQorKQorCitpZiB0ZXN0IC16ICIkY29uZl9sYXN0bG9nX2xvY2F0aW9uIjsgdGhlbgorCWlmIHRlc3QgeCIkc3lzdGVtX2xhc3Rsb2dfcGF0aCIgPSB4Im5vIiA7IHRoZW4KKwkJZm9yIGYgaW4gL3Zhci9sb2cvbGFzdGxvZyAvdXNyL2FkbS9sYXN0bG9nIC92YXIvYWRtL2xhc3Rsb2cgL2V0Yy9zZWN1cml0eS9sYXN0bG9nIDsgZG8KKwkJCQlpZiAodGVzdCAtZCAiJGYiIHx8IHRlc3QgLWYgIiRmIikgOyB0aGVuCisJCQkJCWNvbmZfbGFzdGxvZ19sb2NhdGlvbj0kZgorCQkJCWZpCisJCWRvbmUKKwkJaWYgdGVzdCAteiAiJGNvbmZfbGFzdGxvZ19sb2NhdGlvbiI7IHRoZW4KKwkJCUFDX01TR19XQVJOKFsqKiBDYW5ub3QgZmluZCBsYXN0bG9nICoqXSkKKwkJCWRubCBEb24ndCBkZWZpbmUgRElTQUJMRV9MQVNUTE9HIC0gdGhhdCBtZWFucyB3ZSBkb24ndCB0cnkgd3RtcC93dG1weAorCQlmaQorCWZpCitmaQorCitpZiB0ZXN0IC1uICIkY29uZl9sYXN0bG9nX2xvY2F0aW9uIjsgdGhlbgorCUFDX0RFRklORV9VTlFVT1RFRChDT05GX0xBU1RMT0dfRklMRSwgIiRjb25mX2xhc3Rsb2dfbG9jYXRpb24iLCBsYXN0bG9nIGZpbGUgbG9jYXRpb24pCitmaQkKKworZG5sIHV0bXAgZGV0ZWN0aW9uCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIHlvdXIgc3lzdGVtIGRlZmluZXMgVVRNUF9GSUxFXSkKK0FDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1dG1wLmg+CisjaWZkZWYgSEFWRV9QQVRIU19ICisjICBpbmNsdWRlIDxwYXRocy5oPgorI2VuZGlmCisJXSwKKwlbIGNoYXIgKnV0bXAgPSBVVE1QX0ZJTEU7IF0sCisJWyBBQ19NU0dfUkVTVUxUKHllcykgXSwKKwlbIEFDX01TR19SRVNVTFQobm8pCisJICBzeXN0ZW1fdXRtcF9wYXRoPW5vIF0KKykKK2lmIHRlc3QgLXogIiRjb25mX3V0bXBfbG9jYXRpb24iOyB0aGVuCisJaWYgdGVzdCB4IiRzeXN0ZW1fdXRtcF9wYXRoIiA9IHgibm8iIDsgdGhlbgorCQlmb3IgZiBpbiAvZXRjL3V0bXAgL3Vzci9hZG0vdXRtcCAvdmFyL3J1bi91dG1wOyBkbworCQkJaWYgdGVzdCAtZiAkZiA7IHRoZW4KKwkJCQljb25mX3V0bXBfbG9jYXRpb249JGYKKwkJCWZpCisJCWRvbmUKKwkJaWYgdGVzdCAteiAiJGNvbmZfdXRtcF9sb2NhdGlvbiI7IHRoZW4KKwkJCUFDX0RFRklORShESVNBQkxFX1VUTVApCisJCWZpCisJZmkKK2ZpCitpZiB0ZXN0IC1uICIkY29uZl91dG1wX2xvY2F0aW9uIjsgdGhlbgorCUFDX0RFRklORV9VTlFVT1RFRChDT05GX1VUTVBfRklMRSwgIiRjb25mX3V0bXBfbG9jYXRpb24iLCB1dG1wIGZpbGUgbG9jYXRpb24pCitmaQkKKworZG5sIHd0bXAgZGV0ZWN0aW9uCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIHlvdXIgc3lzdGVtIGRlZmluZXMgV1RNUF9GSUxFXSkKK0FDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1dG1wLmg+CisjaWZkZWYgSEFWRV9QQVRIU19ICisjICBpbmNsdWRlIDxwYXRocy5oPgorI2VuZGlmCisJXSwKKwlbIGNoYXIgKnd0bXAgPSBXVE1QX0ZJTEU7IF0sCisJWyBBQ19NU0dfUkVTVUxUKHllcykgXSwKKwlbIEFDX01TR19SRVNVTFQobm8pCisJICBzeXN0ZW1fd3RtcF9wYXRoPW5vIF0KKykKK2lmIHRlc3QgLXogIiRjb25mX3d0bXBfbG9jYXRpb24iOyB0aGVuCisJaWYgdGVzdCB4IiRzeXN0ZW1fd3RtcF9wYXRoIiA9IHgibm8iIDsgdGhlbgorCQlmb3IgZiBpbiAvdXNyL2FkbS93dG1wIC92YXIvbG9nL3d0bXA7IGRvCisJCQlpZiB0ZXN0IC1mICRmIDsgdGhlbgorCQkJCWNvbmZfd3RtcF9sb2NhdGlvbj0kZgorCQkJZmkKKwkJZG9uZQorCQlpZiB0ZXN0IC16ICIkY29uZl93dG1wX2xvY2F0aW9uIjsgdGhlbgorCQkJQUNfREVGSU5FKERJU0FCTEVfV1RNUCkKKwkJZmkKKwlmaQorZmkKK2lmIHRlc3QgLW4gIiRjb25mX3d0bXBfbG9jYXRpb24iOyB0aGVuCisJQUNfREVGSU5FX1VOUVVPVEVEKENPTkZfV1RNUF9GSUxFLCAiJGNvbmZfd3RtcF9sb2NhdGlvbiIsIHd0bXAgZmlsZSBsb2NhdGlvbikKK2ZpCQorCisKK2RubCB1dG1weCBkZXRlY3Rpb24gLSBJIGRvbid0IGtub3cgYW55IHN5c3RlbSBzbyBwZXJ2ZXJzZSBhcyB0byByZXF1aXJlCitkbmwgIHV0bXB4LCBidXQgbm90IGRlZmluZSBVVE1QWF9GSUxFIChkaXR0byB3dG1weC4pIE5vIGRvdWJ0IGl0J3Mgb3V0CitkbmwgIHRoZXJlLCB0aG91Z2guCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIHlvdXIgc3lzdGVtIGRlZmluZXMgVVRNUFhfRklMRV0pCitBQ19UUllfQ09NUElMRShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dXRtcC5oPgorI2lmZGVmIEhBVkVfVVRNUFhfSAorI2luY2x1ZGUgPHV0bXB4Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1BBVEhTX0gKKyMgIGluY2x1ZGUgPHBhdGhzLmg+CisjZW5kaWYKKwldLAorCVsgY2hhciAqdXRtcHggPSBVVE1QWF9GSUxFOyBdLAorCVsgQUNfTVNHX1JFU1VMVCh5ZXMpIF0sCisJWyBBQ19NU0dfUkVTVUxUKG5vKQorCSAgc3lzdGVtX3V0bXB4X3BhdGg9bm8gXQorKQoraWYgdGVzdCAteiAiJGNvbmZfdXRtcHhfbG9jYXRpb24iOyB0aGVuCisJaWYgdGVzdCB4IiRzeXN0ZW1fdXRtcHhfcGF0aCIgPSB4Im5vIiA7IHRoZW4KKwkJQUNfREVGSU5FKERJU0FCTEVfVVRNUFgpCisJZmkKK2Vsc2UKKwlBQ19ERUZJTkVfVU5RVU9URUQoQ09ORl9VVE1QWF9GSUxFLCAiJGNvbmZfdXRtcHhfbG9jYXRpb24iLCB1dG1weCBmaWxlIGxvY2F0aW9uKQorZmkJCisKK2RubCB3dG1weCBkZXRlY3Rpb24KK0FDX01TR19DSEVDS0lORyhbaWYgeW91ciBzeXN0ZW0gZGVmaW5lcyBXVE1QWF9GSUxFXSkKK0FDX1RSWV9DT01QSUxFKFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1dG1wLmg+CisjaWZkZWYgSEFWRV9VVE1QWF9ICisjaW5jbHVkZSA8dXRtcHguaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfUEFUSFNfSAorIyAgaW5jbHVkZSA8cGF0aHMuaD4KKyNlbmRpZgorCV0sCisJWyBjaGFyICp3dG1weCA9IFdUTVBYX0ZJTEU7IF0sCisJWyBBQ19NU0dfUkVTVUxUKHllcykgXSwKKwlbIEFDX01TR19SRVNVTFQobm8pCisJICBzeXN0ZW1fd3RtcHhfcGF0aD1ubyBdCispCitpZiB0ZXN0IC16ICIkY29uZl93dG1weF9sb2NhdGlvbiI7IHRoZW4KKwlpZiB0ZXN0IHgiJHN5c3RlbV93dG1weF9wYXRoIiA9IHgibm8iIDsgdGhlbgorCQlBQ19ERUZJTkUoRElTQUJMRV9XVE1QWCkKKwlmaQorZWxzZQorCUFDX0RFRklORV9VTlFVT1RFRChDT05GX1dUTVBYX0ZJTEUsICIkY29uZl93dG1weF9sb2NhdGlvbiIsIHd0bXB4IGZpbGUgbG9jYXRpb24pCitmaQkKKworIyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zLgorQUNfUFJPR19HQ0NfVFJBRElUSU9OQUwKK0FDX0ZVTkNfTUVNQ01QCitBQ19GVU5DX1NFTEVDVF9BUkdUWVBFUworQUNfVFlQRV9TSUdOQUwKK0FDX0NIRUNLX0ZVTkNTKFtkdXAyIGdldHNwbmFtIGdldHVzZXJzaGVsbCBtZW1zZXQgcHV0ZW52IHNlbGVjdCBzb2NrZXQgc3RyZHVwIGNsZWFyZW52IHN0cmxjcHkgc3RybGNhdCBkYWVtb24gYmFzZW5hbWUgX2dldHB0eSBnZXRhZGRyaW5mbyBmcmVlYWRkcmluZm8gZ2V0bmFtZWluZm9dKQorCitBQ19TRUFSQ0hfTElCUyhiYXNlbmFtZSwgZ2VuLCBBQ19ERUZJTkUoSEFWRV9CQVNFTkFNRSkpCisKKyMgU29sYXJpcyBuZWVkcyBwdG14CitpZiB0ZXN0IC16ICIkbm9fcHRteF9jaGVjayIgOyB0aGVuCisJaWYgdGVzdCB4IiRjcm9zc19jb21waWxpbmciID0geCJubyIgOyB0aGVuCisJCUFDX0NIRUNLX0ZJTEUoIi9kZXYvcHRteCIsIEFDX0RFRklORShVU0VfREVWX1BUTVgsLFVzZSAvZGV2L3B0bXgpKQorCWVsc2UKKwkJQUNfTVNHX05PVElDRShbTm90IGNoZWNraW5nIGZvciAvZGV2L3B0bXgsIHdlJ3JlIGNyb3NzLWNvbXBpbGluZ10pCisJZmkKK2ZpCisKK2lmIHRlc3QgLXogIiRub19wdGNfY2hlY2siIDsgdGhlbgorCWlmIHRlc3QgeCIkY3Jvc3NfY29tcGlsaW5nIiA9IHgibm8iIDsgdGhlbgorCQlBQ19DSEVDS19GSUxFKCIvZGV2L3B0YyIsIEFDX0RFRklORShIQVZFX0RFVl9QVFNfQU5EX1BUQywsVXNlIC9kZXYvcHRjICYgL2Rldi9wdHMpKQorCWVsc2UKKwkJQUNfTVNHX05PVElDRShbTm90IGNoZWNraW5nIGZvciAvZGV2L3B0YyAmIC9kZXYvcHRzIHNpbmNlIHdlJ3JlIGNyb3NzLWNvbXBpbGluZ10pCisJZmkKK2ZpCisKK0FDX0VYRUVYVAorCisjIFhYWCB0aGVyZSBtdXN0IGJlIGEgbmljZXIgd2F5IHRvIGRvIHRoaXMKK0FTX01LRElSX1AobGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvYWVzKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvY2lwaGVycy9zYWZlcikKK0FTX01LRElSX1AobGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvdHdvZmlzaCkKK0FTX01LRElSX1AobGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvY2NtKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgpCitBU19NS0RJUl9QKGxpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbSkKK0FTX01LRElSX1AobGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvaGFzaGVzKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvaGFzaGVzL2NoYykKK0FTX01LRElSX1AobGlidG9tY3J5cHQvc3JjL2hhc2hlcy9oZWxwZXIpCitBU19NS0RJUl9QKGxpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMikKK0FTX01LRElSX1AobGlidG9tY3J5cHQvc3JjL2hhc2hlcy93aGlybCkKK0FTX01LRElSX1AobGlidG9tY3J5cHQvc3JjL21hYy9obWFjKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvbWFjL29tYWMpCitBU19NS0RJUl9QKGxpYnRvbWNyeXB0L3NyYy9tYWMvcGVsaWNhbikKK0FTX01LRElSX1AobGlidG9tY3J5cHQvc3JjL21hYy9wbWFjKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvbWlzYy9iYXNlNjQpCitBU19NS0RJUl9QKGxpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0KQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvbWlzYy9tcGkpCitBU19NS0RJUl9QKGxpYnRvbWNyeXB0L3NyYy9taXNjL3BrY3M1KQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvbW9kZXMvY2JjKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvbW9kZXMvZWNiKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvYml0KQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvY2hvaWNlKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaWE1KQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaW50ZWdlcikKK0FTX01LRElSX1AobGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2N0ZXQpCitBU19NS0RJUl9QKGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UpCitBU19NS0RJUl9QKGxpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvdXRjdGltZSkKK0FTX01LRElSX1AobGlidG9tY3J5cHQvc3JjL3BrL2RoKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvcGsvZHNhKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvcGsvZWNjKQorQVNfTUtESVJfUChsaWJ0b21jcnlwdC9zcmMvcGsvcGtjczEpCitBU19NS0RJUl9QKGxpYnRvbWNyeXB0L3NyYy9way9yc2EpCitBU19NS0RJUl9QKGxpYnRvbWNyeXB0L3NyYy9wcm5nKQorQUNfQ09ORklHX0hFQURFUihjb25maWcuaCkKK0FDX09VVFBVVChNYWtlZmlsZSkKK0FDX09VVFBVVChsaWJ0b21jcnlwdC9NYWtlZmlsZSkKK0FDX09VVFBVVChsaWJ0b21tYXRoL01ha2VmaWxlKQorQUNfTVNHX05PVElDRSgpCitBQ19NU0dfTk9USUNFKE5vdyBlZGl0IG9wdGlvbnMuaCB0byBjaG9vc2UgZmVhdHVyZXMuKQpkaWZmIC0tZ2l0IGEvZGJjbGllbnQuMSBiL2RiY2xpZW50LjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0NTM0MgotLS0gL2Rldi9udWxsCisrKyBiL2RiY2xpZW50LjEKQEAgLTAsMCArMSw4NCBAQAorLlRIIGRiY2xpZW50IDEKKy5TSCBOQU1FCitkYmNsaWVudCBcLSBsaWdodHdlaWdodCBTU0gyIGNsaWVudAorLlNIIFNZTk9QU0lTCisuQiBkYmNsaWVudAorW1wtVHRdIFtcLXAKKy5JIHBvcnRcZlJdIFtcLWkKKy5JIGlkXGZSXSBbXC1MCisuSSBsXGZSOlxmSWhcZlI6XGZJclxmUl0gW1wtUgorLkkgbFxmUjpcZkloXGZSOlxmSXJcZlJdIFtcLWwKKy5JUiB1c2VyIF0KKy5JIGhvc3QKKy5TSCBERVNDUklQVElPTgorLkIgZGJjbGllbnQKK2lzIGEgU1NIIDIgY2xpZW50IGRlc2lnbmVkIHRvIGJlIHNtYWxsIGVub3VnaCB0byBiZSB1c2VkIGluIHNtYWxsIG1lbW9yeQorZW52aXJvbm1lbnRzLCB3aGlsZSBzdGlsbCBiZWluZyBmdW5jdGlvbmFsIGFuZCBzZWN1cmUgZW5vdWdoIGZvciBnZW5lcmFsIHVzZS4KKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtcCBcZklwb3J0CitSZW1vdGUgcG9ydC4KK0Nvbm5lY3QgdG8gcG9ydAorLkkgcG9ydAorb24gdGhlIHJlbW90ZSBob3N0LgorRGVmYXVsdCBpcyAyMi4KKy5UUAorLkIgXC1pIFxmSWlkZmlsZQorSWRlbnRpdHkgZmlsZS4KK1JlYWQgdGhlIGlkZW50aXR5IGZyb20gZmlsZQorLkkgaWRmaWxlCisobXVsdGlwbGUgYWxsb3dlZCkuCisuVFAKKy5CIFwtTCBcZklsaXN0ZW5wb3J0XGZSOlxmSWhvc3RcZlI6XGZJcG9ydFxmUgorTG9jYWwgcG9ydCBmb3J3YXJkaW5nLgorRm9yd2FyZCB0aGUgcG9ydAorLkkgbGlzdGVucG9ydAorb24gdGhlIGxvY2FsIGhvc3QgdGhyb3VnaCB0aGUgU1NIIGNvbm5lY3Rpb24gdG8gcG9ydAorLkkgcG9ydAorb24gdGhlIGhvc3QKKy5JUiBob3N0IC4KKy5UUAorLkIgXC1SIFxmSWxpc3RlbnBvcnRcZlI6XGZJaG9zdFxmUjpcZklwb3J0XGZSCitSZW1vdGUgcG9ydCBmb3J3YXJkaW5nLgorRm9yd2FyZCB0aGUgcG9ydAorLkkgbGlzdGVucG9ydAorb24gdGhlIHJlbW90ZSBob3N0IHRocm91Z2ggdGhlIFNTSCBjb25uZWN0aW9uIHRvIHBvcnQKKy5JIHBvcnQKK29uIHRoZSBob3N0CisuSVIgaG9zdCAuCisuVFAKKy5CIFwtbCBcZkl1c2VyCitVc2VybmFtZS4KK0xvZ2luIGFzCisuSSB1c2VyCitvbiB0aGUgcmVtb3RlIGhvc3QuCisuVFAKKy5CIFwtdAorQWxsb2NhdGUgYSBwdHkuCisuVFAKKy5CIFwtVAorRG9uJ3QgYWxsb2NhdGUgYSBwdHkuCisuVFAKKy5CIFwtTgorRG9uJ3QgcmVxdWVzdCBhIHJlbW90ZSBzaGVsbCBvciBydW4gYW55IGNvbW1hbmRzLiBBbnkgY29tbWFuZCBhcmd1bWVudHMgYXJlIGlnbm9yZWQuCisuVFAKKy5CIFwtZgorRm9yayBpbnRvIHRoZSBiYWNrZ3JvdW5kIGFmdGVyIGF1dGhlbnRpY2F0aW9uLiBBIGNvbW1hbmQgYXJndW1lbnQgKG9yIC1OKSBpcyByZXF1aXJlZC4KK1RoaXMgaXMgdXNlZnVsIHdoZW4gdXNpbmcgcGFzc3dvcmQgYXV0aGVudGljYXRpb24uCisuVFAKKy5CIFwtZworQWxsb3cgbm9uLWxvY2FsIGhvc3RzIHRvIGNvbm5lY3QgdG8gZm9yd2FyZGVkIHBvcnRzLiBBcHBsaWVzIHRvIC1MIGFuZCAtUgorZm9yd2FyZGVkIHBvcnRzLCB0aG91Z2ggcmVtb3RlIGNvbm5lY3Rpb25zIHRvIC1SIGZvcndhcmRlZCBwb3J0cyBtYXkgYmUgbGltaXRlZAorYnkgdGhlIHNzaCBzZXJ2ZXIuCisuVFAKKy5CIFwteQorQWx3YXlzIGFjY2VwdCBob3N0a2V5cyBpZiB0aGV5IGFyZSB1bmtub3duLiBJZiBhIGhvc3RrZXkgbWlzbWF0Y2ggb2NjdXJzIHRoZQorY29ubmVjdGlvbiB3aWxsIGFib3J0IGFzIG5vcm1hbC4KKy5TSCBBVVRIT1IKK01hdHQgSm9obnN0b24gKG1hdHRAdWNjLmFzbi5hdSkuCisuYnIKK0dlcnJpdCBQYXBlIChwYXBlQHNtYXJkZW4ub3JnKSB3cm90ZSB0aGlzIG1hbnVhbCBwYWdlLgorLlNIIFNFRSBBTFNPCitkcm9wYmVhcig4KSwgZHJvcGJlYXJrZXkoOCkKKy5QCitodHRwOi8vbWF0dC51Y2MuYXNuLmF1L2Ryb3BiZWFyL2Ryb3BiZWFyLmh0bWwKZGlmZiAtLWdpdCBhL2RibXVsdGkuYyBiL2RibXVsdGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjhkZjNmCi0tLSAvZGV2L251bGwKKysrIGIvZGJtdWx0aS5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBEcm9wYmVhciBTU0gKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorCisvKiBkZWZpbml0aW9ucyBhcmUgY2xlYW5lc3QgaWYgd2UganVzdCBwdXQgdGhlbSBoZXJlICovCitpbnQgZHJvcGJlYXJfbWFpbihpbnQgYXJnYywgY2hhciAqKiBhcmd2KTsKK2ludCBkcm9wYmVhcmtleV9tYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpOworaW50IGRyb3BiZWFyY29udmVydF9tYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpOworaW50IHNjcF9tYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpOworCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKiBhcmd2KSB7CisKKwljaGFyICogcHJvZ25hbWU7CisKKwlpZiAoYXJnYyA+IDApIHsKKwkJLyogZmlndXJlIHdoaWNoIGZvcm0gd2UncmUgYmVpbmcgY2FsbGVkIGFzICovCisJCXByb2duYW1lID0gYmFzZW5hbWUoYXJndlswXSk7CisKKyNpZmRlZiBEQk1VTFRJX2Ryb3BiZWFyCisJCWlmIChzdHJjbXAocHJvZ25hbWUsICJkcm9wYmVhciIpID09IDApIHsKKwkJCXJldHVybiBkcm9wYmVhcl9tYWluKGFyZ2MsIGFyZ3YpOworCQl9CisjZW5kaWYKKyNpZmRlZiBEQk1VTFRJX2RiY2xpZW50CisJCWlmIChzdHJjbXAocHJvZ25hbWUsICJkYmNsaWVudCIpID09IDAKKwkJCQl8fCBzdHJjbXAocHJvZ25hbWUsICJzc2giKSA9PSAwKSB7CisJCQlyZXR1cm4gY2xpX21haW4oYXJnYywgYXJndik7CisJCX0KKyNlbmRpZgorI2lmZGVmIERCTVVMVElfZHJvcGJlYXJrZXkKKwkJaWYgKHN0cmNtcChwcm9nbmFtZSwgImRyb3BiZWFya2V5IikgPT0gMCkgeworCQkJcmV0dXJuIGRyb3BiZWFya2V5X21haW4oYXJnYywgYXJndik7CisJCX0KKyNlbmRpZgorI2lmZGVmIERCTVVMVElfZHJvcGJlYXJjb252ZXJ0CisJCWlmIChzdHJjbXAocHJvZ25hbWUsICJkcm9wYmVhcmNvbnZlcnQiKSA9PSAwKSB7CisJCQlyZXR1cm4gZHJvcGJlYXJjb252ZXJ0X21haW4oYXJnYywgYXJndik7CisJCX0KKyNlbmRpZgorI2lmZGVmIERCTVVMVElfc2NwCisJCWlmIChzdHJjbXAocHJvZ25hbWUsICJzY3AiKSA9PSAwKSB7CisJCQlyZXR1cm4gc2NwX21haW4oYXJnYywgYXJndik7CisJCX0KKyNlbmRpZgorCX0KKworCWZwcmludGYoc3RkZXJyLCAiRHJvcGJlYXIgbXVsdGktcHVycG9zZSB2ZXJzaW9uICVzXG4iCisJCQkiTWFrZSBhIHN5bWxpbmsgcG9pbnRpbmcgYXQgdGhpcyBiaW5hcnkgd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyBuYW1lczpcbiIKKyNpZmRlZiBEQk1VTFRJX2Ryb3BiZWFyCisJCQkiJ2Ryb3BiZWFyJyAtIHRoZSBEcm9wYmVhciBzZXJ2ZXJcbiIKKyNlbmRpZgorI2lmZGVmIERCTVVMVElfZGJjbGllbnQKKwkJCSInZGJjbGllbnQnIG9yICdzc2gnIC0gdGhlIERyb3BiZWFyIGNsaWVudFxuIgorI2VuZGlmCisjaWZkZWYgREJNVUxUSV9kcm9wYmVhcmtleQorCQkJIidkcm9wYmVhcmtleScgLSB0aGUga2V5IGdlbmVyYXRvclxuIgorI2VuZGlmCisjaWZkZWYgREJNVUxUSV9kcm9wYmVhcmNvbnZlcnQKKwkJCSInZHJvcGJlYXJjb252ZXJ0JyAtIHRoZSBrZXkgY29udmVydGVyXG4iCisjZW5kaWYKKyNpZmRlZiBEQk1VTFRJX3NjcAorCQkJIidzY3AnIC0gc2VjdXJlIGNvcHlcbiIKKyNlbmRpZgorCQkJLAorCQkJRFJPUEJFQVJfVkVSU0lPTik7CisJZXhpdCgxKTsKKworfQpkaWZmIC0tZ2l0IGEvZGJ1dGlsLmMgYi9kYnV0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTY3ZGRjCi0tLSAvZGV2L251bGwKKysrIGIvZGJ1dGlsLmMKQEAgLTAsMCArMSw3MDEgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICogc3RybGNhdCgpIGlzIGNvcHlyaWdodCBhcyBmb2xsb3dzOgorICogQ29weXJpZ2h0IChjKSAxOTk4IFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorICogQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworICogT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJhdG9taWNpby5oIgorCisjZGVmaW5lIE1BWF9GTVQgMTAwCisKK3N0YXRpYyB2b2lkIGdlbmVyaWNfZHJvcGJlYXJfZXhpdChpbnQgZXhpdGNvZGUsIGNvbnN0IGNoYXIqIGZvcm1hdCwgCisJCXZhX2xpc3QgcGFyYW0pOworc3RhdGljIHZvaWQgZ2VuZXJpY19kcm9wYmVhcl9sb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyKiBmb3JtYXQsIAorCQl2YV9saXN0IHBhcmFtKTsKKwordm9pZCAoKl9kcm9wYmVhcl9leGl0KShpbnQgZXhpdGNvZGUsIGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBwYXJhbSkgCisJCQkJCQk9IGdlbmVyaWNfZHJvcGJlYXJfZXhpdDsKK3ZvaWQgKCpfZHJvcGJlYXJfbG9nKShpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBwYXJhbSkKKwkJCQkJCT0gZ2VuZXJpY19kcm9wYmVhcl9sb2c7CisKKyNpZmRlZiBERUJVR19UUkFDRQoraW50IGRlYnVnX3RyYWNlID0gMDsKKyNlbmRpZgorCisjaWZuZGVmIERJU0FCTEVfU1lTTE9HCit2b2lkIHN0YXJ0c3lzbG9nKCkgeworCisJb3BlbmxvZyhQUk9HTkFNRSwgTE9HX1BJRCwgTE9HX0FVVEhQUklWKTsKKworfQorI2VuZGlmIC8qIERJU0FCTEVfU1lTTE9HICovCisKKy8qIHRoZSAiZm9ybWF0IiBzdHJpbmcgbXVzdCBiZSA8PSAxMDAgY2hhcmFjdGVycyAqLwordm9pZCBkcm9wYmVhcl9jbG9zZShjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgeworCisJdmFfbGlzdCBwYXJhbTsKKworCXZhX3N0YXJ0KHBhcmFtLCBmb3JtYXQpOworCV9kcm9wYmVhcl9leGl0KEVYSVRfU1VDQ0VTUywgZm9ybWF0LCBwYXJhbSk7CisJdmFfZW5kKHBhcmFtKTsKKworfQorCit2b2lkIGRyb3BiZWFyX2V4aXQoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIHsKKworCXZhX2xpc3QgcGFyYW07CisKKwl2YV9zdGFydChwYXJhbSwgZm9ybWF0KTsKKwlfZHJvcGJlYXJfZXhpdChFWElUX0ZBSUxVUkUsIGZvcm1hdCwgcGFyYW0pOworCXZhX2VuZChwYXJhbSk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyaWNfZHJvcGJlYXJfZXhpdChpbnQgZXhpdGNvZGUsIGNvbnN0IGNoYXIqIGZvcm1hdCwgCisJCXZhX2xpc3QgcGFyYW0pIHsKKworCWNoYXIgZm10YnVmWzMwMF07CisKKwlzbnByaW50ZihmbXRidWYsIHNpemVvZihmbXRidWYpLCAiRXhpdGVkOiAlcyIsIGZvcm1hdCk7CisKKwlfZHJvcGJlYXJfbG9nKExPR19JTkZPLCBmbXRidWYsIHBhcmFtKTsKKworCWV4aXQoZXhpdGNvZGUpOworfQorCit2b2lkIGZhaWxfYXNzZXJ0KGNvbnN0IGNoYXIqIGV4cHIsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lKSB7CisJZHJvcGJlYXJfZXhpdCgiZmFpbGVkIGFzc2VydGlvbiAoJXM6JWQpOiBgJXMnIiwgZmlsZSwgbGluZSwgZXhwcik7Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyaWNfZHJvcGJlYXJfbG9nKGludCBVTlVTRUQocHJpb3JpdHkpLCBjb25zdCBjaGFyKiBmb3JtYXQsIAorCQl2YV9saXN0IHBhcmFtKSB7CisKKwljaGFyIHByaW50YnVmWzEwMjRdOworCisJdnNucHJpbnRmKHByaW50YnVmLCBzaXplb2YocHJpbnRidWYpLCBmb3JtYXQsIHBhcmFtKTsKKworCWZwcmludGYoc3RkZXJyLCAiJXNcbiIsIHByaW50YnVmKTsKKworfQorCisvKiB0aGlzIGlzIHdoYXQgY2FuIGJlIGNhbGxlZCB0byB3cml0ZSBhcmJpdHJhcnkgbG9nIG1lc3NhZ2VzICovCit2b2lkIGRyb3BiZWFyX2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSB7CisKKwl2YV9saXN0IHBhcmFtOworCisJdmFfc3RhcnQocGFyYW0sIGZvcm1hdCk7CisJX2Ryb3BiZWFyX2xvZyhwcmlvcml0eSwgZm9ybWF0LCBwYXJhbSk7CisJdmFfZW5kKHBhcmFtKTsKK30KKworCisjaWZkZWYgREVCVUdfVFJBQ0UKK3ZvaWQgZHJvcGJlYXJfdHJhY2UoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIHsKKworCXZhX2xpc3QgcGFyYW07CisKKwlpZiAoIWRlYnVnX3RyYWNlKSB7CisJCXJldHVybjsKKwl9CisKKwl2YV9zdGFydChwYXJhbSwgZm9ybWF0KTsKKwlmcHJpbnRmKHN0ZGVyciwgIlRSQUNFOiAiKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgcGFyYW0pOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl2YV9lbmQocGFyYW0pOworfQorI2VuZGlmIC8qIERFQlVHX1RSQUNFICovCisKK3N0YXRpYyB2b2lkIHNldF9zb2NrX3ByaW9yaXR5KGludCBzb2NrKSB7CisKKwlpbnQgdmFsOworCisJLyogZGlzYWJsZSBuYWdsZSAqLworCXZhbCA9IDE7CisJc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1RDUCwgVENQX05PREVMQVksICh2b2lkKikmdmFsLCBzaXplb2YodmFsKSk7CisKKwkvKiBzZXQgdGhlIFRPUyBiaXQuIG5vdGUgdGhhdCB0aGlzIHdpbGwgZmFpbCBmb3IgaXB2NiwgSSBjYW4ndCBmaW5kIGFueQorCSAqIGVxdWl2YWxlbnQuICovCisjaWZkZWYgSVBUT1NfTE9XREVMQVkKKwl2YWwgPSBJUFRPU19MT1dERUxBWTsKKwlzZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fSVAsIElQX1RPUywgKHZvaWQqKSZ2YWwsIHNpemVvZih2YWwpKTsKKyNlbmRpZgorCisjaWZkZWYgU09fUFJJT1JJVFkKKwkvKiBsaW51eCBzcGVjaWZpYywgc2V0cyBRb1MgY2xhc3MuCisJICogNiBsb29rcyB0byBiZSBvcHRpbWFsIGZvciBpbnRlcmFjdGl2ZSB0cmFmZmljIChzZWUgdGMtcHJpbyg4KSApLiAqLworCXZhbCA9IDY7CisJc2V0c29ja29wdChzb2NrLCBTT0xfU09DS0VULCBTT19QUklPUklUWSwgKHZvaWQqKSAmdmFsLCBzaXplb2YodmFsKSk7CisjZW5kaWYKKworfQorCisvKiBMaXN0ZW4gb24gYWRkcmVzczpwb3J0LiAKKyAqIFNwZWNpYWwgY2FzZXMgYXJlIGFkZHJlc3Mgb2YgIiIgbGlzdGVuaW5nIG9uIGV2ZXJ5dGhpbmcsCisgKiBhbmQgYWRkcmVzcyBvZiBOVUxMIGxpc3RlbmluZyBvbiBsb2NhbGhvc3Qgb25seS4KKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBzb2NrZXRzIGJvdW5kIG9uIHN1Y2Nlc3MsIG9yIC0xIG9uIGZhaWx1cmUuIE9uCisgKiBmYWlsdXJlLCBpZiBlcnJzdHJpbmcgd2Fzbid0IE5VTEwsIGl0J2xsIGJlIGEgbmV3bHkgbWFsbG9jZWQgZXJyb3IKKyAqIHN0cmluZy4qLworaW50IGRyb3BiZWFyX2xpc3Rlbihjb25zdCBjaGFyKiBhZGRyZXNzLCBjb25zdCBjaGFyKiBwb3J0LAorCQlpbnQgKnNvY2tzLCB1bnNpZ25lZCBpbnQgc29ja2NvdW50LCBjaGFyICoqZXJyc3RyaW5nLCBpbnQgKm1heGZkKSB7CisKKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXMgPSBOVUxMLCAqcmVzMCA9IE5VTEw7CisJaW50IGVycjsKKwl1bnNpZ25lZCBpbnQgbnNvY2s7CisJc3RydWN0IGxpbmdlciBsaW5nZXI7CisJaW50IHZhbDsKKwlpbnQgc29jazsKKworCVRSQUNFKCgiZW50ZXIgZHJvcGJlYXJfbGlzdGVuIikpCisJCisJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisJaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOyAvKiBUT0RPOiBsZXQgdGhlbSBmbGFnIHY0IG9ubHkgZXRjICovCisJaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKworCS8qIGZvciBjYWxsaW5nIGdldGFkZHJpbmZvOgorCSBhZGRyZXNzID09IE5VTEwgYW5kICFBSV9QQVNTSVZFOiBsb2NhbCBsb29wYmFjaworCSBhZGRyZXNzID09IE5VTEwgYW5kIEFJX1BBU1NJVkU6IGFsbCBpbnRlcmZhY2VzCisJIGFkZHJlc3MgIT0gTlVMTDogd2hhdGV2ZXIgdGhlIGFkZHJlc3Mgc2F5cyAqLworCWlmICghYWRkcmVzcykgeworCQlUUkFDRSgoImRyb3BiZWFyX2xpc3RlbjogbG9jYWwgbG9vcGJhY2siKSkKKwl9IGVsc2UgeworCQlpZiAoYWRkcmVzc1swXSA9PSAnXDAnKSB7CisJCQlUUkFDRSgoImRyb3BiZWFyX2xpc3RlbjogYWxsIGludGVyZmFjZXMiKSkKKwkJCWFkZHJlc3MgPSBOVUxMOworCQl9CisJCWhpbnRzLmFpX2ZsYWdzID0gQUlfUEFTU0lWRTsKKwl9CisJZXJyID0gZ2V0YWRkcmluZm8oYWRkcmVzcywgcG9ydCwgJmhpbnRzLCAmcmVzMCk7CisKKwlpZiAoZXJyKSB7CisJCWlmIChlcnJzdHJpbmcgIT0gTlVMTCAmJiAqZXJyc3RyaW5nID09IE5VTEwpIHsKKwkJCWludCBsZW47CisJCQlsZW4gPSAyMCArIHN0cmxlbihnYWlfc3RyZXJyb3IoZXJyKSk7CisJCQkqZXJyc3RyaW5nID0gKGNoYXIqKW1fbWFsbG9jKGxlbik7CisJCQlzbnByaW50ZigqZXJyc3RyaW5nLCBsZW4sICJFcnJvciByZXNvbHZpbmc6ICVzIiwgZ2FpX3N0cmVycm9yKGVycikpOworCQl9CisJCWlmIChyZXMwKSB7CisJCQlmcmVlYWRkcmluZm8ocmVzMCk7CisJCQlyZXMwID0gTlVMTDsKKwkJfQorCQlUUkFDRSgoImxlYXZlIGRyb3BiZWFyX2xpc3RlbjogZmFpbGVkIHJlc29sdmluZyIpKQorCQlyZXR1cm4gLTE7CisJfQorCisKKwluc29jayA9IDA7CisJZm9yIChyZXMgPSByZXMwOyByZXMgIT0gTlVMTCAmJiBuc29jayA8IHNvY2tjb3VudDsKKwkJCXJlcyA9IHJlcy0+YWlfbmV4dCkgeworCisJCS8qIEdldCBhIHNvY2tldCAqLworCQlzb2Nrc1tuc29ja10gPSBzb2NrZXQocmVzLT5haV9mYW1pbHksIHJlcy0+YWlfc29ja3R5cGUsCisJCQkJcmVzLT5haV9wcm90b2NvbCk7CisKKwkJc29jayA9IHNvY2tzW25zb2NrXTsgLyogRm9yIGNsYXJpdHkgKi8KKworCQlpZiAoc29jayA8IDApIHsKKwkJCWVyciA9IGVycm5vOworCQkJVFJBQ0UoKCJzb2NrZXQoKSBmYWlsZWQiKSkKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogVmFyaW91cyB1c2VmdWwgc29ja2V0IG9wdGlvbnMgKi8KKwkJdmFsID0gMTsKKwkJLyogc2V0IHRvIHJldXNlLCBxdWljayB0aW1lb3V0ICovCisJCXNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAodm9pZCopICZ2YWwsIHNpemVvZih2YWwpKTsKKwkJbGluZ2VyLmxfb25vZmYgPSAxOworCQlsaW5nZXIubF9saW5nZXIgPSA1OworCQlzZXRzb2Nrb3B0KHNvY2ssIFNPTF9TT0NLRVQsIFNPX0xJTkdFUiwgKHZvaWQqKSZsaW5nZXIsIHNpemVvZihsaW5nZXIpKTsKKworCQlzZXRfc29ja19wcmlvcml0eShzb2NrKTsKKworCQlpZiAoYmluZChzb2NrLCByZXMtPmFpX2FkZHIsIHJlcy0+YWlfYWRkcmxlbikgPCAwKSB7CisJCQllcnIgPSBlcnJubzsKKwkJCWNsb3NlKHNvY2spOworCQkJVFJBQ0UoKCJiaW5kKCVzKSBmYWlsZWQiLCBwb3J0KSkKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGxpc3Rlbihzb2NrLCAyMCkgPCAwKSB7CisJCQllcnIgPSBlcnJubzsKKwkJCWNsb3NlKHNvY2spOworCQkJVFJBQ0UoKCJsaXN0ZW4oKSBmYWlsZWQiKSkKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJKm1heGZkID0gTUFYKCptYXhmZCwgc29jayk7CisKKwkJbnNvY2srKzsKKwl9CisKKwlpZiAocmVzMCkgeworCQlmcmVlYWRkcmluZm8ocmVzMCk7CisJCXJlczAgPSBOVUxMOworCX0KKworCWlmIChuc29jayA9PSAwKSB7CisJCWlmIChlcnJzdHJpbmcgIT0gTlVMTCAmJiAqZXJyc3RyaW5nID09IE5VTEwpIHsKKwkJCWludCBsZW47CisJCQlsZW4gPSAyMCArIHN0cmxlbihzdHJlcnJvcihlcnIpKTsKKwkJCSplcnJzdHJpbmcgPSAoY2hhciopbV9tYWxsb2MobGVuKTsKKwkJCXNucHJpbnRmKCplcnJzdHJpbmcsIGxlbiwgIkVycm9yIGxpc3RlbmluZzogJXMiLCBzdHJlcnJvcihlcnIpKTsKKwkJfQorCQlUUkFDRSgoImxlYXZlIGRyb3BiZWFyX2xpc3RlbjogZmFpbHVyZSwgJXMiLCBzdHJlcnJvcihlcnIpKSkKKwkJcmV0dXJuIC0xOworCX0KKworCVRSQUNFKCgibGVhdmUgZHJvcGJlYXJfbGlzdGVuOiBzdWNjZXNzLCAlZCBzb2NrcyBib3VuZCIsIG5zb2NrKSkKKwlyZXR1cm4gbnNvY2s7Cit9CisKKy8qIENvbm5lY3QgdmlhIFRDUCB0byBhIGhvc3QuIENvbm5lY3Rpb24gd2lsbCB0cnkgaXB2NCBvciBpcHY2LCB3aWxsCisgKiByZXR1cm4gaW1tZWRpYXRlbHkgaWYgbm9uYmxvY2tpbmcgaXMgc2V0LiBPbiBmYWlsdXJlLCBpZiBlcnJzdHJpbmcKKyAqIHdhc24ndCBudWxsLCBpdCB3aWxsIGJlIGEgbmV3bHkgbWFsbG9jZWQgZXJyb3IgbWVzc2FnZSAqLworCisvKiBUT0RPOiBtYXhmZCAqLworaW50IGNvbm5lY3RfcmVtb3RlKGNvbnN0IGNoYXIqIHJlbW90ZWhvc3QsIGNvbnN0IGNoYXIqIHJlbW90ZXBvcnQsCisJCWludCBub25ibG9ja2luZywgY2hhciAqKiBlcnJzdHJpbmcpIHsKKworCXN0cnVjdCBhZGRyaW5mbyAqcmVzMCA9IE5VTEwsICpyZXMgPSBOVUxMLCBoaW50czsKKwlpbnQgc29jazsKKwlpbnQgZXJyOworCisJVFJBQ0UoKCJlbnRlciBjb25uZWN0X3JlbW90ZSIpKQorCisJaWYgKGVycnN0cmluZyAhPSBOVUxMKSB7CisJCSplcnJzdHJpbmcgPSBOVUxMOworCX0KKworCW1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisJaGludHMuYWlfZmFtaWx5ID0gUEZfVU5TUEVDOworCisJZXJyID0gZ2V0YWRkcmluZm8ocmVtb3RlaG9zdCwgcmVtb3RlcG9ydCwgJmhpbnRzLCAmcmVzMCk7CisJaWYgKGVycikgeworCQlpZiAoZXJyc3RyaW5nICE9IE5VTEwgJiYgKmVycnN0cmluZyA9PSBOVUxMKSB7CisJCQlpbnQgbGVuOworCQkJbGVuID0gMjAgKyBzdHJsZW4oZ2FpX3N0cmVycm9yKGVycikpOworCQkJKmVycnN0cmluZyA9IChjaGFyKiltX21hbGxvYyhsZW4pOworCQkJc25wcmludGYoKmVycnN0cmluZywgbGVuLCAiRXJyb3IgcmVzb2x2aW5nOiAlcyIsIGdhaV9zdHJlcnJvcihlcnIpKTsKKwkJfQorCQlUUkFDRSgoIkVycm9yIHJlc29sdmluZzogJXMiLCBnYWlfc3RyZXJyb3IoZXJyKSkpCisJCXJldHVybiAtMTsKKwl9CisKKwlzb2NrID0gLTE7CisJZXJyID0gRUFERFJOT1RBVkFJTDsKKwlmb3IgKHJlcyA9IHJlczA7IHJlczsgcmVzID0gcmVzLT5haV9uZXh0KSB7CisKKwkJc29jayA9IHNvY2tldChyZXMtPmFpX2ZhbWlseSwgcmVzLT5haV9zb2NrdHlwZSwgcmVzLT5haV9wcm90b2NvbCk7CisJCWlmIChzb2NrIDwgMCkgeworCQkJZXJyID0gZXJybm87CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChub25ibG9ja2luZykgeworCQkJaWYgKGZjbnRsKHNvY2ssIEZfU0VURkwsIE9fTk9OQkxPQ0spIDwgMCkgeworCQkJCWNsb3NlKHNvY2spOworCQkJCXNvY2sgPSAtMTsKKwkJCQlpZiAoZXJyc3RyaW5nICE9IE5VTEwgJiYgKmVycnN0cmluZyA9PSBOVUxMKSB7CisJCQkJCSplcnJzdHJpbmcgPSBtX3N0cmR1cCgiRmFpbGVkIG5vbi1ibG9ja2luZyIpOworCQkJCX0KKwkJCQlUUkFDRSgoIkZhaWxlZCBub24tYmxvY2tpbmc6ICVzIiwgc3RyZXJyb3IoZXJybm8pKSkKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWlmIChjb25uZWN0KHNvY2ssIHJlcy0+YWlfYWRkciwgcmVzLT5haV9hZGRybGVuKSA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFSU5QUk9HUkVTUyAmJiBub25ibG9ja2luZykgeworCQkJCVRSQUNFKCgiQ29ubmVjdCBpbiBwcm9ncmVzcyIpKQorCQkJCWJyZWFrOworCQkJfSBlbHNlIHsKKwkJCQllcnIgPSBlcnJubzsKKwkJCQljbG9zZShzb2NrKTsKKwkJCQlzb2NrID0gLTE7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQlicmVhazsgLyogU3VjY2VzcyAqLworCX0KKworCWlmIChzb2NrIDwgMCAmJiAhKGVycm5vID09IEVJTlBST0dSRVNTICYmIG5vbmJsb2NraW5nKSkgeworCQkvKiBGYWlsZWQgKi8KKwkJaWYgKGVycnN0cmluZyAhPSBOVUxMICYmICplcnJzdHJpbmcgPT0gTlVMTCkgeworCQkJaW50IGxlbjsKKwkJCWxlbiA9IDIwICsgc3RybGVuKHN0cmVycm9yKGVycikpOworCQkJKmVycnN0cmluZyA9IChjaGFyKiltX21hbGxvYyhsZW4pOworCQkJc25wcmludGYoKmVycnN0cmluZywgbGVuLCAiRXJyb3IgY29ubmVjdGluZzogJXMiLCBzdHJlcnJvcihlcnIpKTsKKwkJfQorCQlUUkFDRSgoIkVycm9yIGNvbm5lY3Rpbmc6ICVzIiwgc3RyZXJyb3IoZXJyKSkpCisJfSBlbHNlIHsKKwkJLyogU3VjY2VzcyAqLworCQlzZXRfc29ja19wcmlvcml0eShzb2NrKTsKKwl9CisKKwlmcmVlYWRkcmluZm8ocmVzMCk7CisJaWYgKHNvY2sgPiAwICYmIGVycnN0cmluZyAhPSBOVUxMICYmICplcnJzdHJpbmcgIT0gTlVMTCkgeworCQltX2ZyZWUoKmVycnN0cmluZyk7CisJfQorCisJVFJBQ0UoKCJsZWF2ZSBjb25uZWN0X3JlbW90ZTogc29jayAlZFxuIiwgc29jaykpCisJcmV0dXJuIHNvY2s7Cit9CisKKy8qIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgc29ja2V0IGFkZHJlc3MgcGFzc2VkLiBUaGUgcmV0dXJuCisgKiB2YWx1ZSBpcyBhbGxvY2F0ZWQgd2l0aCBtYWxsb2MoKSAqLwordW5zaWduZWQgY2hhciAqIGdldGFkZHJzdHJpbmcoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UqIGFkZHIsIGludCB3aXRocG9ydCkgeworCisJY2hhciBoYnVmW05JX01BWEhPU1RdLCBzYnVmW05JX01BWFNFUlZdOworCWNoYXIgKnJldHN0cmluZyA9IE5VTEw7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsKKwkvKiBTb21lIHBsYXRmb3JtcyBzdWNoIGFzIFNvbGFyaXMgOCByZXF1aXJlIHRoYXQgbGVuIGlzIHRoZSBsZW5ndGgKKwkgKiBvZiB0aGUgc3BlY2lmaWMgc3RydWN0dXJlLiBTb21lIG9sZGVyIGxpbnV4IHN5c3RlbXMgKGdsaWJjIDIuMS4zCisJICogc3VjaCBhcyBkZWJpYW4gcG90YXRvKSBoYXZlIHNvY2thZGRyX3N0b3JhZ2UuX19zc19mYW1pbHkgaW5zdGVhZAorCSAqIGJ1dCB3ZSdsbCBpZ25vcmUgdGhlbSAqLworI2lmZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZCisJaWYgKGFkZHItPnNzX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCX0KKyNpZmRlZiBBRl9JTkVUNgorCWlmIChhZGRyLT5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCX0KKyNlbmRpZgorI2VuZGlmCisKKwlyZXQgPSBnZXRuYW1laW5mbygoc3RydWN0IHNvY2thZGRyKilhZGRyLCBsZW4sIGhidWYsIHNpemVvZihoYnVmKSwgCisJCQlzYnVmLCBzaXplb2Yoc2J1ZiksIE5JX05VTUVSSUNTRVJWIHwgTklfTlVNRVJJQ0hPU1QpOworCisJaWYgKHJldCAhPSAwKSB7CisJCS8qIFRoaXMgaXMgYSBmYWlybHkgYmFkIGZhaWx1cmUgLSBpdCdsbCBmYWxsYmFjayB0byBJUCBpZiBpdAorCQkgKiBqdXN0IGNhbid0IHJlc29sdmUgKi8KKwkJZHJvcGJlYXJfZXhpdCgiZmFpbGVkIGxvb2t1cCAoJWQsICVkKSIsIHJldCwgZXJybm8pOworCX0KKworCWlmICh3aXRocG9ydCkgeworCQlsZW4gPSBzdHJsZW4oaGJ1ZikgKyAyICsgc3RybGVuKHNidWYpOworCQlyZXRzdHJpbmcgPSAoY2hhciopbV9tYWxsb2MobGVuKTsKKwkJc25wcmludGYocmV0c3RyaW5nLCBsZW4sICIlczolcyIsIGhidWYsIHNidWYpOworCX0gZWxzZSB7CisJCXJldHN0cmluZyA9IG1fc3RyZHVwKGhidWYpOworCX0KKworCXJldHVybiByZXRzdHJpbmc7CisKK30KKworLyogR2V0IHRoZSBob3N0bmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBhZGRyZXNzIGFkZHIuIE9uIGZhaWx1cmUsIHRoZSBJUAorICogYWRkcmVzcyBpcyByZXR1cm5lZC4gVGhlIHJldHVybiB2YWx1ZSBpcyBhbGxvY2F0ZWQgd2l0aCBzdHJkdXAoKSAqLworY2hhciogZ2V0YWRkcmhvc3RuYW1lKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICogYWRkcikgeworCisJY2hhciBoYnVmW05JX01BWEhPU1RdOworCWNoYXIgc2J1ZltOSV9NQVhTRVJWXTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBsZW47CisjaWZkZWYgRE9fSE9TVF9MT09LVVAKKwljb25zdCBpbnQgZmxhZ3MgPSBOSV9OVU1FUklDU0VSVjsKKyNlbHNlCisJY29uc3QgaW50IGZsYWdzID0gTklfTlVNRVJJQ0hPU1QgfCBOSV9OVU1FUklDU0VSVjsKKyNlbmRpZgorCisJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsKKwkvKiBTb21lIHBsYXRmb3JtcyBzdWNoIGFzIFNvbGFyaXMgOCByZXF1aXJlIHRoYXQgbGVuIGlzIHRoZSBsZW5ndGgKKwkgKiBvZiB0aGUgc3BlY2lmaWMgc3RydWN0dXJlLiAqLworI2lmZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZCisJaWYgKGFkZHItPnNzX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCX0KKyNpZmRlZiBBRl9JTkVUNgorCWlmIChhZGRyLT5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCX0KKyNlbmRpZgorI2VuZGlmCisKKworCXJldCA9IGdldG5hbWVpbmZvKChzdHJ1Y3Qgc29ja2FkZHIqKWFkZHIsIGxlbiwgaGJ1Ziwgc2l6ZW9mKGhidWYpLAorCQkJc2J1Ziwgc2l6ZW9mKHNidWYpLCBmbGFncyk7CisKKwlpZiAocmV0ICE9IDApIHsKKwkJLyogT24gc29tZSBzeXN0ZW1zIChEYXJ3aW4gZG9lcyBpdCkgd2UgZ2V0IEVJTlRSIGZyb20gZ2V0bmFtZWluZm8KKwkJICogc29tZWhvdy4gRWV3LiBTbyB3ZSdsbCBqdXN0IHJldHVybiB0aGUgSVAsIHNpbmNlIHRoYXQgZG9lc24ndCBzZWVtCisJCSAqIHRvIGV4aGliaXQgdGhhdCBiZWhhdmlvdXIuICovCisJCXJldHVybiBnZXRhZGRyc3RyaW5nKGFkZHIsIDApOworCX0KKworCXJldHVybiBtX3N0cmR1cChoYnVmKTsKK30KKworI2lmZGVmIERFQlVHX1RSQUNFCit2b2lkIHByaW50aGV4KGNvbnN0IGNoYXIgKiBsYWJlbCwgY29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZiwgaW50IGxlbikgeworCisJaW50IGk7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBsYWJlbCk7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWZwcmludGYoc3RkZXJyLCAiJTAyeCIsIGJ1ZltpXSk7CisJCWlmIChpICUgMTYgPT0gMTUpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwkJfQorCQllbHNlIGlmIChpICUgMiA9PSAxKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiAiKTsKKwkJfQorCX0KKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisjZW5kaWYKKworLyogU3RyaXAgYWxsIGNvbnRyb2wgY2hhcmFjdGVycyBmcm9tIHRleHQgKGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyksIGV4Y2VwdAorICogZm9yICdcbicsICdccicgYW5kICdcdCcuCisgKiBUaGUgcmVzdWx0IHJldHVybmVkIGlzIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZywgdGhpcyBtdXN0IGJlIGZyZWUoKWQgYWZ0ZXIKKyAqIHVzZSAqLworY2hhciAqIHN0cmlwY29udHJvbChjb25zdCBjaGFyICogdGV4dCkgeworCisJY2hhciAqIHJldDsKKwlpbnQgbGVuLCBwb3M7CisJaW50IGk7CisJCisJbGVuID0gc3RybGVuKHRleHQpOworCXJldCA9IG1fbWFsbG9jKGxlbisxKTsKKworCXBvcyA9IDA7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmICgodGV4dFtpXSA8PSAnficgJiYgdGV4dFtpXSA+PSAnICcpIC8qIG5vcm1hbCBwcmludGFibGUgcmFuZ2UgKi8KKwkJCQl8fCB0ZXh0W2ldID09ICdcbicgfHwgdGV4dFtpXSA9PSAnXHInIHx8IHRleHRbaV0gPT0gJ1x0JykgeworCQkJcmV0W3Bvc10gPSB0ZXh0W2ldOworCQkJcG9zKys7CisJCX0KKwl9CisJcmV0W3Bvc10gPSAweDA7CisJcmV0dXJuIHJldDsKK30KKwkJCQorCisvKiByZWFkcyB0aGUgY29udGVudHMgb2YgZmlsZW5hbWUgaW50byB0aGUgYnVmZmVyIGJ1ZiwgZnJvbSB0aGUgY3VycmVudAorICogcG9zaXRpb24sIGVpdGhlciB0byB0aGUgZW5kIG9mIHRoZSBmaWxlLCBvciB0aGUgYnVmZmVyIGJlaW5nIGZ1bGwuCisgKiBSZXR1cm5zIERST1BCRUFSX1NVQ0NFU1Mgb3IgRFJPUEJFQVJfRkFJTFVSRSAqLworaW50IGJ1Zl9yZWFkZmlsZShidWZmZXIqIGJ1ZiwgY29uc3QgY2hhciogZmlsZW5hbWUpIHsKKworCWludCBmZCA9IC0xOworCWludCBsZW47CisJaW50IG1heGxlbjsKKwlpbnQgcmV0ID0gRFJPUEJFQVJfRkFJTFVSRTsKKworCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOworCisJaWYgKGZkIDwgMCkgeworCQlnb3RvIG91dDsKKwl9CisJCisJZG8geworCQltYXhsZW4gPSBidWYtPnNpemUgLSBidWYtPnBvczsKKwkJbGVuID0gcmVhZChmZCwgYnVmX2dldHdyaXRlcHRyKGJ1ZiwgbWF4bGVuKSwgbWF4bGVuKTsKKwkJaWYgKGxlbiA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFSU5UUiB8fCBlcnJubyA9PSBFQUdBSU4pIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9CisJCWJ1Zl9pbmNyd3JpdGVwb3MoYnVmLCBsZW4pOworCX0gd2hpbGUgKGxlbiA8IG1heGxlbiAmJiBsZW4gPiAwKTsKKworCXJldCA9IERST1BCRUFSX1NVQ0NFU1M7CisKK291dDoKKwlpZiAoZmQgPj0gMCkgeworCQltX2Nsb3NlKGZkKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogZ2V0IGEgbGluZSBmcm9tIHRoZSBmaWxlIGludG8gYnVmZmVyIGluIHRoZSBzdHlsZSBleHBlY3RlZCBmb3IgYW4KKyAqIGF1dGhrZXlzIGZpbGUuCisgKiBXaWxsIHJldHVybiBEUk9QQkVBUl9TVUNDRVNTIGlmIGRhdGEgaXMgcmVhZCwgb3IgRFJPUEJFQVJfRkFJTFVSRSBvbiBFT0YuKi8KKy8qIE9ubHkgdXNlZCBmb3Igfi8uc3NoL2tub3duX2hvc3RzIGFuZCB+Ly5zc2gvYXV0aG9yaXplZF9rZXlzICovCisjaWYgZGVmaW5lZChEUk9QQkVBUl9DTElFTlQpIHx8IGRlZmluZWQoRU5BQkxFX1NWUl9QVUJLRVlfQVVUSCkKK2ludCBidWZfZ2V0bGluZShidWZmZXIgKiBsaW5lLCBGSUxFICogYXV0aGZpbGUpIHsKKworCWludCBjID0gRU9GOworCisJVFJBQ0UoKCJlbnRlciBidWZfZ2V0bGluZSIpKQorCisJYnVmX3NldHBvcyhsaW5lLCAwKTsKKwlidWZfc2V0bGVuKGxpbmUsIDApOworCisJd2hpbGUgKGxpbmUtPnBvcyA8IGxpbmUtPnNpemUpIHsKKworCQljID0gZmdldGMoYXV0aGZpbGUpOyAvKmdldGMoKSBpcyB3ZWlyZCB3aXRoIHNvbWUgdUNsaWJjIHN5c3RlbXMqLworCQlpZiAoYyA9PSBFT0YgfHwgYyA9PSAnXG4nIHx8IGMgPT0gJ1xyJykgeworCQkJZ290byBvdXQ7CisJCX0KKworCQlidWZfcHV0Ynl0ZShsaW5lLCAodW5zaWduZWQgY2hhciljKTsKKwl9CisKKwlUUkFDRSgoImxlYXZlIGdldGF1dGhsaW5lOiBsaW5lIHRvbyBsb25nIikpCisJLyogV2UgcmV0dXJuIHN1Y2Nlc3MsIGJ1dCB0aGUgbGluZSBsZW5ndGggd2lsbCBiZSB6ZXJvZWQgLSBpZSB3ZSBqdXN0CisJICogaWdub3JlIHRoYXQgbGluZSAqLworCWJ1Zl9zZXRsZW4obGluZSwgMCk7CisKK291dDoKKworCisJLyogaWYgd2UgZGlkbid0IHJlYWQgYW55dGhpbmcgYmVmb3JlIEVPRiBvciBlcnJvciwgZXhpdCAqLworCWlmIChjID09IEVPRiAmJiBsaW5lLT5wb3MgPT0gMCkgeworCQlUUkFDRSgoImxlYXZlIGJ1Zl9nZXRsaW5lOiBmYWlsdXJlIikpCisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0gZWxzZSB7CisJCVRSQUNFKCgibGVhdmUgYnVmX2dldGxpbmU6IHN1Y2Nlc3MiKSkKKwkJYnVmX3NldHBvcyhsaW5lLCAwKTsKKwkJcmV0dXJuIERST1BCRUFSX1NVQ0NFU1M7CisJfQorCit9CQorI2VuZGlmCisKKy8qIG1ha2Ugc3VyZSB0aGF0IHRoZSBzb2NrZXQgY2xvc2VzICovCit2b2lkIG1fY2xvc2UoaW50IGZkKSB7CisKKwlpbnQgdmFsOworCWRvIHsKKwkJdmFsID0gY2xvc2UoZmQpOworCX0gd2hpbGUgKHZhbCA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworCisJaWYgKHZhbCA8IDAgJiYgZXJybm8gIT0gRUJBREYpIHsKKwkJLyogTGludXggc2F5cyBFSU8gY2FuIGhhcHBlbiAqLworCQlkcm9wYmVhcl9leGl0KCJFcnJvciBjbG9zaW5nIGZkICVkLCAlcyIsIGZkLCBzdHJlcnJvcihlcnJubykpOworCX0KK30KKwkKK3ZvaWQgKiBtX21hbGxvYyhzaXplX3Qgc2l6ZSkgeworCisJdm9pZCogcmV0OworCisJaWYgKHNpemUgPT0gMCkgeworCQlkcm9wYmVhcl9leGl0KCJtX21hbGxvYyBmYWlsZWQiKTsKKwl9CisJcmV0ID0gY2FsbG9jKDEsIHNpemUpOworCWlmIChyZXQgPT0gTlVMTCkgeworCQlkcm9wYmVhcl9leGl0KCJtX21hbGxvYyBmYWlsZWQiKTsKKwl9CisJcmV0dXJuIHJldDsKKworfQorCit2b2lkICogbV9zdHJkdXAoY29uc3QgY2hhciAqIHN0cikgeworCWNoYXIqIHJldDsKKworCXJldCA9IHN0cmR1cChzdHIpOworCWlmIChyZXQgPT0gTlVMTCkgeworCQlkcm9wYmVhcl9leGl0KCJtX3N0cmR1cCBmYWlsZWQiKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBfX21fZnJlZSh2b2lkKiBwdHIpIHsKKwlpZiAocHRyICE9IE5VTEwpIHsKKwkJZnJlZShwdHIpOworCX0KK30KKwordm9pZCAqIG1fcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKSB7CisKKwl2b2lkICpyZXQ7CisKKwlpZiAoc2l6ZSA9PSAwKSB7CisJCWRyb3BiZWFyX2V4aXQoIm1fcmVhbGxvYyBmYWlsZWQiKTsKKwl9CisJcmV0ID0gcmVhbGxvYyhwdHIsIHNpemUpOworCWlmIChyZXQgPT0gTlVMTCkgeworCQlkcm9wYmVhcl9leGl0KCJtX3JlYWxsb2MgZmFpbGVkIik7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIENsZWFyIHRoZSBkYXRhLCBiYXNlZCBvbiB0aGUgbWV0aG9kIGluIERhdmlkIFdoZWVsZXIncworICogIlNlY3VyZSBQcm9ncmFtbWluZyBmb3IgTGludXggYW5kIFVuaXggSE9XVE8iICovCisvKiBCZXdhcmUgb2YgY2FsbGluZyB0aGlzIGZyb20gd2l0aGluIGRidXRpbC5jIC0gdGhpbmdzIG1pZ2h0IGdldAorICogb3B0aW1pc2VkIGF3YXkgKi8KK3ZvaWQgbV9idXJuKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pIHsKKwl2b2xhdGlsZSBjaGFyICpwID0gZGF0YTsKKworCWlmIChkYXRhID09IE5VTEwpCisJCXJldHVybjsKKwl3aGlsZSAobGVuLS0pIHsKKwkJKnArKyA9IDB4NjY7CisJfQorfQorCisKK3ZvaWQgc2V0bm9uYmxvY2tpbmcoaW50IGZkKSB7CisKKwlUUkFDRSgoInNldG5vbmJsb2NraW5nOiAlZCIsIGZkKSkKKworCWlmIChmY250bChmZCwgRl9TRVRGTCwgT19OT05CTE9DSykgPCAwKSB7CisJCWlmIChlcnJubyA9PSBFTk9ERVYpIHsKKwkJCS8qIFNvbWUgZGV2aWNlcyAobGlrZSAvZGV2L251bGwgcmVkaXJlY3RlZCBpbikKKwkJCSAqIGNhbid0IGJlIHNldCB0byBub24tYmxvY2tpbmcgKi8KKwkJCVRSQUNFKCgiaWdub3JpbmcgRU5PREVWIGZvciBzZXRub25ibG9ja2luZyIpKQorCQl9IGVsc2UgeworCQkJZHJvcGJlYXJfZXhpdCgiQ291bGRuJ3Qgc2V0IG5vbmJsb2NraW5nIik7CisJCX0KKwl9CisJVFJBQ0UoKCJsZWF2ZSBzZXRub25ibG9ja2luZyIpKQorfQorCit2b2lkIGRpc2FsbG93X2NvcmUoKSB7CisJc3RydWN0IHJsaW1pdCBsaW07CisJbGltLnJsaW1fY3VyID0gbGltLnJsaW1fbWF4ID0gMDsKKwlzZXRybGltaXQoUkxJTUlUX0NPUkUsICZsaW0pOworfQpkaWZmIC0tZ2l0IGEvZGJ1dGlsLmggYi9kYnV0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTY5NzhkCi0tLSAvZGV2L251bGwKKysrIGIvZGJ1dGlsLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfREJVVElMX0hfCisKKyNkZWZpbmUgX0RCVVRJTF9IXworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKworI2lmbmRlZiBESVNBQkxFX1NZU0xPRwordm9pZCBzdGFydHN5c2xvZygpOworI2VuZGlmCisKK2V4dGVybiB2b2lkICgqX2Ryb3BiZWFyX2V4aXQpKGludCBleGl0Y29kZSwgY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IHBhcmFtKTsKK2V4dGVybiB2b2lkICgqX2Ryb3BiZWFyX2xvZykoaW50IHByaW9yaXR5LCBjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgcGFyYW0pOworCit2b2lkIGRyb3BiZWFyX2V4aXQoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pOwordm9pZCBkcm9wYmVhcl9jbG9zZShjb25zdCBjaGFyKiBmb3JtYXQsIC4uLik7Cit2b2lkIGRyb3BiZWFyX2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKK3ZvaWQgZmFpbF9hc3NlcnQoY29uc3QgY2hhciogZXhwciwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUpOworI2lmZGVmIERFQlVHX1RSQUNFCit2b2lkIGRyb3BiZWFyX3RyYWNlKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKTsKK3ZvaWQgcHJpbnRoZXgoY29uc3QgY2hhciAqIGxhYmVsLCBjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmLCBpbnQgbGVuKTsKK2V4dGVybiBpbnQgZGVidWdfdHJhY2U7CisjZW5kaWYKK2NoYXIgKiBzdHJpcGNvbnRyb2woY29uc3QgY2hhciAqIHRleHQpOwordW5zaWduZWQgY2hhciAqIGdldGFkZHJzdHJpbmcoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UqIGFkZHIsIGludCB3aXRocG9ydCk7CitpbnQgZHJvcGJlYXJfbGlzdGVuKGNvbnN0IGNoYXIqIGFkZHJlc3MsIGNvbnN0IGNoYXIqIHBvcnQsCisJCWludCAqc29ja3MsIHVuc2lnbmVkIGludCBzb2NrY291bnQsIGNoYXIgKiplcnJzdHJpbmcsIGludCAqbWF4ZmQpOworaW50IGNvbm5lY3RfcmVtb3RlKGNvbnN0IGNoYXIqIHJlbW90ZWhvc3QsIGNvbnN0IGNoYXIqIHJlbW90ZXBvcnQsCisJCWludCBub25ibG9ja2luZywgY2hhciAqKiBlcnJzdHJpbmcpOworY2hhciogZ2V0YWRkcmhvc3RuYW1lKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICogYWRkcik7CitpbnQgYnVmX3JlYWRmaWxlKGJ1ZmZlciogYnVmLCBjb25zdCBjaGFyKiBmaWxlbmFtZSk7CitpbnQgYnVmX2dldGxpbmUoYnVmZmVyICogbGluZSwgRklMRSAqIGF1dGhmaWxlKTsKKwordm9pZCBtX2Nsb3NlKGludCBmZCk7Cit2b2lkICogbV9tYWxsb2Moc2l6ZV90IHNpemUpOwordm9pZCAqIG1fc3RyZHVwKGNvbnN0IGNoYXIgKiBzdHIpOwordm9pZCAqIG1fcmVhbGxvYyh2b2lkKiBwdHIsIHNpemVfdCBzaXplKTsKKyNkZWZpbmUgbV9mcmVlKFgpIF9fbV9mcmVlKFgpOyAoWCkgPSBOVUxMOwordm9pZCBfX21fZnJlZSh2b2lkKiBwdHIpOwordm9pZCBtX2J1cm4odm9pZCogZGF0YSwgdW5zaWduZWQgaW50IGxlbik7Cit2b2lkIHNldG5vbmJsb2NraW5nKGludCBmZCk7Cit2b2lkIGRpc2FsbG93X2NvcmUoKTsKKworLyogVXNlZCB0byBmb3JjZSBtcF9pbnRzIHRvIGJlIGluaXRpYWxpc2VkICovCisjZGVmaW5lIERFRl9NUF9JTlQoWCkgbXBfaW50IFggPSB7MCwgMCwgMCwgTlVMTH0KKworLyogRHJvcGJlYXIgYXNzZXJ0aW9uICovCisjZGVmaW5lIGRyb3BiZWFyX2Fzc2VydChYKSBkbyB7IGlmICghKFgpKSB7IGZhaWxfYXNzZXJ0KCNYLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9IH0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBfREJVVElMX0hfICovCmRpZmYgLS1naXQgYS9kZWJpYW4vUkVBRE1FLkRlYmlhbiBiL2RlYmlhbi9SRUFETUUuRGViaWFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZGFjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vUkVBRE1FLkRlYmlhbgpAQCAtMCwwICsxLDQxIEBACitEcm9wYmVhciBmb3IgRGViaWFuCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcGFja2FnZSB3aWxsIGF0dGVtcHQgdG8gbGlzdGVuIG9uIHBvcnQgMjIuIElmIHRoZSBPcGVuU1NIIAorcGFja2FnZSAoInNzaCIpIGlzIGluc3RhbGxlZCwgdGhlIGZpbGUgL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyIAord2lsbCBiZSBzZXQgdXAgc28gdGhhdCB0aGUgc2VydmVyIGRvZXMgbm90IHN0YXJ0IGJ5IGRlZmF1bHQuCisKK1lvdSBjYW4gcnVuIERyb3BiZWFyIGNvbmN1cnJlbnRseSB3aXRoIE9wZW5TU0ggJ3NzaGQnIGJ5IAorbW9kaWZ5aW5nIC9ldGMvZGVmYXVsdC9kcm9wYmVhciBzbyB0aGF0ICJOT19TVEFSVCIgaXMgc2V0IHRvIAorIjAiIGFuZCBjaGFuZ2luZyB0aGUgcG9ydCBudW1iZXIgdGhhdCBEcm9wYmVhciBydW5zIG9uLiBGb2xsb3cgCit0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBmaWxlLgorCitUaGlzIHBhY2thZ2Ugc3VnZ2VzdHMgeW91IGluc3RhbGwgdGhlICJzc2giIHBhY2thZ2UuIFRoaXMgcGFja2FnZSAKK3Byb3ZpZGVzIHRoZSAic3NoIiBjbGllbnQgcHJvZ3JhbSwgYXMgd2VsbCBhcyB0aGUgIi91c3IvYmluL3NjcCIgCitiaW5hcnkgeW91IHdpbGwgbmVlZCB0byBiZSBhYmxlIHRvIHJldHJpZXZlIGZpbGVzIGZyb20gYSBzZXJ2ZXIgCitydW5uaW5nIERyb3BiZWFyIHZpYSBTQ1AuCisKK1JlcGxhY2luZyBPcGVuU1NIICJzc2hkIiB3aXRoIERyb3BiZWFyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3Ugd2lsbCBzdGlsbCB3YW50IHRvIGhhdmUgdGhlICJzc2giIHBhY2thZ2UgaW5zdGFsbGVkLCBhcyBpdCAKK3Byb3ZpZGVzIHRoZSAic3NoIiBhbmQgInNjcCIgYmluYXJpZXMuIFdoZW4geW91IGluc3RhbGwgdGhpcyAKK3BhY2thZ2UsIGl0IGNoZWNrcyBmb3IgZXhpc3RpbmcgT3BlblNTSCBob3N0IGtleXMgYW5kIGlmIGZvdW5kLCAKK2NvbnZlcnRzIHRoZW0gdG8gdGhlIERyb3BiZWFyIGZvcm1hdC4KKworSWYgdGhpcyBhcHBlYXJzIHRvIGhhdmUgd29ya2VkLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY2hhbmdlIG92ZXIgCitieSBmb2xsb3dpbmcgdGhlc2Ugc3RlcHM6CisKKzEuIFN0b3AgdGhlIE9wZW5TU0ggc2VydmVyCisgICAlIC9ldGMvaW5pdC5kL3NzaCBzdG9wCisyLiBQcmV2ZW50IHRoZSBPcGVuU1NIIHNlcnZlciBmcm9tIHN0YXJ0aW5nIGluIHRoZSBmdXR1cmUKKyAgICUgdG91Y2ggL2V0Yy9zc2gvc3NoZF9ub3RfdG9fYmVfcnVuCiszLiBNb2RpZnkgdGhlIERyb3BiZWFyIGRlZmF1bHRzIGZpbGUsIHNldCBOT19TVEFSVCB0byAwIGFuZCAKKyAgIGVuc3VyZSBEUk9QQkVBUl9QT1JUIGlzIHNldCB0byAyMi4KKyAgICUgZWRpdG9yIC9ldGMvZGVmYXVsdC9kcm9wYmVhcgorNC4gUmVzdGFydCB0aGUgRHJvcGJlYXIgc2VydmVyLgorICAgJSAvZXRjL2luaXQuZC9kcm9wYmVhciByZXN0YXJ0CisKK1NlZSB0aGUgRHJvcGJlYXIgaG9tZXBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb246CisgIGh0dHA6Ly9tYXR0LnVjYy5hc24uYXUvZHJvcGJlYXIvZHJvcGJlYXIuaHRtbAorCmRpZmYgLS1naXQgYS9kZWJpYW4vUkVBRE1FLkRlYmlhbi5kaWV0IGIvZGViaWFuL1JFQURNRS5EZWJpYW4uZGlldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDBjYjVjCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL1JFQURNRS5EZWJpYW4uZGlldApAQCAtMCwwICsxLDE1IEBACitCdWlsZGluZyB3aXRoIHRoZSBkaWV0IGxpYmMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHBhY2thZ2Ugb3B0aW9uYWxseSBjYW4gYmUgYnVpbHQgd2l0aCB0aGUgZGlldCBsaWJjIGluc3RlYWQgb2YgdGhlCitnbGliYyB0byBwcm92aWRlIHNtYWxsIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zLiAgVGhlIHJlc3VsdGluZyBwYWNrYWdlCitoYXMgbm8gZGVwZW5kZW5jeSBvbiBhbnkgb3RoZXIgcGFja2FnZS4KKworVG8gdXNlIHRoZSBkaWV0IGxpYmMsIG1ha2Ugc3VyZSB0aGUgbGF0ZXN0IHZlcnNpb25zIG9mIHRoZSBkaWV0bGliYy1kZXYKK3BhY2thZ2UgaXMgaW5zdGFsbGVkLCBhbmQgc2V0IERFQl9CVUlMRF9PUFRJT05TPWRpZXQgaW4gdGhlIGVudmlyb25tZW50Cit3aGVuIGJ1aWxkaW5nIHRoZSBwYWNrYWdlLCBlLmcuOgorCisgIyBhcHQtZ2V0IGluc3RhbGwgZGlldGxpYmMtZGV2CisgJCBERUJfQlVJTERfT1BUSU9OUz1kaWV0IGZha2Vyb290IGFwdC1nZXQgc291cmNlIC1iIGRyb3BiZWFyCisKKyAtLSBHZXJyaXQgUGFwZSA8cGFwZUBzbWFyZGVuLm9yZz4sIFNhdCwgMTcgSnVsIDIwMDQgMTk6MDk6MzQgKzAwMDAKZGlmZiAtLWdpdCBhL2RlYmlhbi9SRUFETUUucnVuaXQgYi9kZWJpYW4vUkVBRE1FLnJ1bml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzI4MTQKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vUkVBRE1FLnJ1bml0CkBAIC0wLDAgKzEsNDYgQEAKK1VzaW5nIHRoZSBkcm9wYmVhciBTU0ggc2VydmVyIHdpdGggcnVuaXQncyBzZXJ2aWNlcyBzdXBlcnZpc2lvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkcm9wYmVhciBTU0ggc2VydmVyIGlzIHBlcmZlY3RseSBzdWl0ZWQgdG8gYmUgcnVuIHVuZGVyIHJ1bml0J3MKK3NlcnZpY2Ugc3VwZXJ2aXNpb24sIGFuZCB0aGlzIHBhY2thZ2UgYWxyZWFkeSBoYXMgcHJlcGFyZWQgYW4gYWRlcXVhdGUKK3NlcnZpY2UgZGlyZWN0b3J5LiAgRm9sbG93IHRoZXNlIHN0ZXBzIHRvIGVuYWJsZSB0aGUgZHJvcGJlYXIgc2VydmljZQordXNpbmcgdGhlIHJ1bml0IHBhY2thZ2UuCisKK0lmIG5vdCB5ZXQgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLCBpbnN0YWxsIHRoZSBydW5pdCBwYWNrYWdlLCBhbmQgbWFrZQorc3VyZSBpdHMgc2VydmljZSBzdXBlcnZpc2lvbiBpcyBlbmFibGVkIChpdCdzIGJ5IGRlZmF1bHQpCisKKyAjIGFwdC1nZXQgaW5zdGFsbCBydW5pdAorCitNYWtlIHN1cmUgdGhlIGRyb3BiZWFyIHNlcnZpY2Ugbm9ybWFsbHkgaGFuZGxlZCB0aHJvdWdoIHRoZSBzeXN2IGluaXQKK3NjcmlwdCBpcyBzdG9wcGVkCisKKyAjIC9ldGMvaW5pdC5kL2Ryb3BiZWFyIHN0b3AKKworQ3JlYXRlIHRoZSBzeXN0ZW0gdXNlciBgYGRyb3BiZWFybG9nJycgd2hpY2ggd2lsbCBydW4gdGhlIGxvZ2dlciBzZXJ2aWNlLAorYW5kIG93biB0aGUgbG9ncworCisgIyBhZGR1c2VyIC0tc3lzdGVtIC0taG9tZSAvdmFyL2xvZy9kcm9wYmVhciAtLW5vLWNyZWF0ZS1ob21lIGRyb3BiZWFybG9nCisKK0NyZWF0ZSB0aGUgbG9nIGRpcmVjdG9yeSBhbmQgbWFrZSB0aGUgbmV3bHkgY3JlYXRlZCBzeXN0ZW0gdXNlciB0aGUgb3duZXIKK29mIHRoaXMgZGlyZWN0b3J5CisKKyAjIG1rZGlyIC1wIC92YXIvbG9nL2Ryb3BiZWFyICYmIGNob3duIGRyb3BiZWFybG9nIC92YXIvbG9nL2Ryb3BiZWFyCisKK09wdGlvbmFsbHkgYWRqdXN0IHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBkcm9wYmVhciBzZXJ2aWNlIGJ5IGVkaXRpbmcgdGhlCitydW4gc2NyaXB0CisKKyAjIHZpIC9ldGMvZHJvcGJlYXIvcnVuCisKK0ZpbmFsbHkgZW5hYmxlIHRoZSBzZXJ2aWNlIGJ5IGxpbmtpbmcgZHJvcGJlYXIncyBzZXJ2aWNlIGRpcmVjdG9yeSB0bworL3Zhci9zZXJ2aWNlLy4gIFRoZSBzZXJ2aWNlIHdpbGwgYmUgc3RhcnRlZCB3aXRoaW4gZml2ZSBzZWNvbmRzLCBhbmQKK2F1dG9tYXRpY2FsbHkgYXQgYm9vdCB0aW1lLiAgVGhlIHN5c3YgaW5pdCBzY3JpcHQgaXMgZGlzYWJsZWQ7IHNlZSB0aGUKK3J1bnN2Y3RybCg4KSBwcm9ncmFtIGZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udHJvbCBzZXJ2aWNlcyBoYW5kbGVkIGJ5CitydW5pdC4gIFNlZSB0aGUgc3Zsb2dkKDgpIHByb2dyYW0gb24gaG93IHRvIGNvbmZpZ3VyZSB0aGUgbG9nIHNlcnZpY2UuCisKKyAjIGxuIC1zIC9ldGMvZHJvcGJlYXIgL3Zhci9zZXJ2aWNlLworCitPcHRpb25hbGx5IGNoZWNrIHRoZSBzdGF0dXMgb2YgdGhlIHNlcnZpY2UgYSBmZXcgc2Vjb25kcyBsYXRlcgorCisgIyBydW5zdnN0YXQgLWwgL3Zhci9zZXJ2aWNlL2Ryb3BiZWFyCisKKyAtLSBHZXJyaXQgUGFwZSA8cGFwZUBzbWFyZGVuLm9yZz4sIFN1biwgMTYgTWF5IDIwMDQgMTU6NTI6MzQgKzAwMDAKZGlmZiAtLWdpdCBhL2RlYmlhbi9jaGFuZ2Vsb2cgYi9kZWJpYW4vY2hhbmdlbG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhZDY3ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vY2hhbmdlbG9nCkBAIC0wLDAgKzEsMjI1IEBACitkcm9wYmVhciAoMC40OS0wLjEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UuCisKKyAtLSBNYXR0IEpvaG5zdG9uIDxtYXR0QHVjYy5hc24uYXU+ICBGcmksIDIzIEZlYiAyMDA3IDAwOjQ0OjAwICswOTAwCisKK2Ryb3BiZWFyICgwLjQ4LjEtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBuZXcgdXBzdHJlYW0gcG9pbnQgcmVsZWFzZS4KKyAgICAqIENvbXBpbGUgZml4IGZvciBzY3AKKyAgKiBkZWJpYW4vZGlmZi9kYmNsaWVudC4xLmRpZmY6IG5ldzogZG9jdW1lbnQgLVIgb3B0aW9uIHRvIGRiY2xpZW50CisgICAgYWNjdXJhdGVseSAodGh4IE1hcmt1cyBTY2hhYmVyOyBjbG9zZXM6ICMzNTE4ODIpLgorICAqIGRlYmlhbi9kcm9wYmVhci5SRUFETUUuRGViaWFuOiBkb2N1bWVudCBhIHdvcmthcm91bmQgZm9yIHN5c3RlbXMgd2l0aAorICAgIHBvc3NpYmx5IGJsb2NraW5nIC9kZXYvcmFuZG9tIGRldmljZSAoY2xvc2VzOiAjMzU1NDE0KS4uCisKKyAtLSBHZXJyaXQgUGFwZSA8cGFwZUBzbWFyZGVuLm9yZz4gIFN1biwgMTYgQXByIDIwMDYgMTY6MTY6NDAgKzAwMDAKKworZHJvcGJlYXIgKDAuNDgtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZS4KKyAgKiBTRUNVUklUWTogSW1wcm92ZSBoYW5kbGluZyBvZiBkZW5pYWwgb2Ygc2VydmljZSBhdHRlbXB0cyBmcm9tIGEgc2luZ2xlCisgICAgSVAuCisKKyAgKiBkZWJpYW4vaW1wbGljaXQ6IHVwZGF0ZSB0byByZXZpc2lvbiAxLjExLgorICAqIG5ldyB1cHN0cmVhbSByZWxlYXNlIHVwZGF0ZXMgdG8gc2NwIGZyb20gT3BlblNTSCA0LjNwMiAtIGZpeGVzIGEKKyAgICBzZWN1cml0eSBpc3N1ZSB3aGVyZSB1c2Ugb2Ygc3lzdGVtKCkgY291bGQgY2F1c2UgdXNlcnMgdG8gZXhlY3V0ZQorICAgIGFyYml0cmFyeSBjb2RlIHRocm91Z2ggbWFsZm9ybWVkIGZpbGVuYW1lczsgQ1ZFLTIwMDYtMDIyNSAoc2VlIGFsc28KKyAgICAjMzQ5NjQ1KTsgdGhlIHNjcCBiaW5hcnkgaXMgbm90IHByb3ZpZGVkIGJ5IHRoaXMgcGFja2FnZSB0aG91Z2guCisKKyAtLSBHZXJyaXQgUGFwZSA8cGFwZUBzbWFyZGVuLm9yZz4gIEZyaSwgMTAgTWFyIDIwMDYgMjI6MDA6MzIgKzAwMDAKKworZHJvcGJlYXIgKDAuNDctMSkgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UuCisgICogU0VDVVJJVFk6IEZpeCBpbmNvcnJlY3QgYnVmZmVyIHNpemluZzsgQ1ZFLTIwMDUtNDE3OC4KKworIC0tIE1hdHQgSm9obnN0b24gPG1hdHRAdWNjLmFzbi5hdT4gIFRodSwgOCBEZWMgMjAwNSAxOToyMDoyMSArMDgwMAorCitkcm9wYmVhciAoMC40Ni0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIGRlYmlhbi9jb250cm9sOiBTdGFuZGFyZHMtVmVyc2lvbjogMy42LjIuMTsgdXBkYXRlIGRlc2NyaXB0aW9ucyB0bworICAgIG1lbnRpb24gaW5jbHVkZWQgc2VydmVyIGFuZCBjbGllbnQgKHRoeCBUaW5vIEtlaXRlbCkuCisgICogZGViaWFuL2Ryb3BiZWFyLmluaXQ6IGFsbG93ICcvZXRjL2luaXQuZC9kcm9wYmVhciBzdG9wJyBldmVuIHRob3VnaAorICAgICdOT19TVEFSVCBpcyBub3Qgc2V0IHRvIHplcm8uJyAoY2xvc2VzOiAjMzM2NzIzKS4KKworIC0tIEdlcnJpdCBQYXBlIDxwYXBlQHNtYXJkZW4ub3JnPiAgVHVlLCAgNiBEZWMgMjAwNSAxMzozMDo0OSArMDAwMAorCitkcm9wYmVhciAoMC40Ni0xKSB1bnN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlLCB2YXJpb3VzIGZpeGVzLgorICAqIGRlYmlhbi9kaWZmL2RiY2xpZW50LXVzYWdlLXR5cG8uZGlmZiwgZGViaWFuL2RpZmYvbWFucGFnZXMuZGlmZjogcmVtb3ZlOworICAgIG9ic29sZXRlLgorICAqIGRlYmlhbi9kYmNsaWVudC4xOiBtb3ZlIHRvIC4vZGJjbGllbnQuMS4KKworIC0tIE1hdHQgSm9obnN0b24gPG1hdHRAdWNjLmFzbi5hdT4gIEZyaSwgOCBKdWx5IDIwMDUgMjE6MzI6NTUgKzA4MDAKKworZHJvcGJlYXIgKDAuNDUtMykgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBkZWJpYW4vZHJvcGJlYXIuaW5pdDogaW5pdCBzY3JpcHQgcHJpbnRzIGh1bWFuIHJlYWRhYmxlIG1lc3NhZ2UgaW4gY2FzZQorICAgIGl0J3MgZGlzYWJsZWQgKGNsb3NlczogIzMwOTA5OSkuCisgICogZGViaWFuL2Ryb3BiZWFyLnBvc3RpbnN0OiBjb25maWd1cmU6IHJlc3RhcnQgc2VydmljZSB0aHJvdWdoIGluaXQgc2NyaXB0CisgICAgaW5zdGVhZCBvZiBzdGFydC4KKyAgKiBkZWJpYW4vZHJvcGJlYXIucHJlcm06IHNldCAtdSAtPiBzZXQgLWUuCisKKyAtLSBHZXJyaXQgUGFwZSA8cGFwZUBzbWFyZGVuLm9yZz4gIFdlZCwgMjUgTWF5IDIwMDUgMjI6Mzg6MTcgKzAwMDAKKworZHJvcGJlYXIgKDAuNDUtMikgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBNYXR0IEpvaG5zdG9uOgorICAgICogTmV3IHVwc3RyZWFtIHJlbGVhc2UsIHZhcmlvdXMgZml4ZXMuCisKKyAtLSBHZXJyaXQgUGFwZSA8cGFwZUBzbWFyZGVuLm9yZz4gIFNhdCwgMTIgTWFyIDIwMDUgMTU6MTc6NTUgKzAwMDAKKworZHJvcGJlYXIgKDAuNDQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bG93CisKKyAgKiBOZXcgdXBzdHJlYW0gcmVsZWFzZS4KKyAgKiBkZWJpYW4vcnVsZXM6IGluc3RhbGwgL3Vzci9iaW4vZGJjbGllbnQ7IGhhbmRsZSBwb3NzaWJsZSBwYXRjaGVzIG1vcmUKKyAgICBncmFjZWZ1bGx5OyBpbnN0YWxsIGRlYmlhbi9kYmNsaWVudC4xIG1hbiBwYWdlOyBlbmFibGUgdGFyZ2V0IHBhdGNoOworICAgIG1pbm9yLgorICAqIGRlYmlhbi9pbXBsaWNpdDogdXBkYXRlIHRvIHJldmlzaW9uIDEuMTAuCisgICogZGViaWFuL2RiY2xpZW50LjE6IG5ldzsgbWFuIHBhZ2UuCisgICogZGViaWFuL2RpZmYvZGJjbGllbnQtdXNhZ2UtdHlwby5kaWZmOiBuZXc7IGZpeCB0eXBvLgorICAqIGRlYmlhbi9kaWZmL21hbnBhZ2VzLmRpZmY6IG5ldzsgYWRkIHJlZmVyZW5jZXMgdG8gZGJjbGllbnQgbWFuIHBhZ2UuCisKKyAtLSBHZXJyaXQgUGFwZSA8cGFwZUBzbWFyZGVuLm9yZz4gIFNhdCwgIDggSmFuIDIwMDUgMjI6NTA6NDMgKzAwMDAKKworZHJvcGJlYXIgKDAuNDMtMikgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICogTWF0dCBKb2huc3RvbjoKKyAgICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlIDAuNDMKKyAgICAqIFNFQ1VSSVRZOiBEb24ndCBhdHRlbXB0IHRvIGZyZWUgdW5pbml0aWFsaXNlZCBidWZmZXJzIGluIERTUyB2ZXJpZmljYXRpb24KKyAgICAgIGNvZGUKKyAgICAqIEhhbmRsZSBwb3J0Zm9yd2FyZGluZyB0byBzZXJ2ZXJzIHdoaWNoIGRvbid0IHNlbmQgYW55IGluaXRpYWwgZGF0YQorICAgICAgKENsb3NlczogIzI1ODQyNikKKyAgKiBkZWJpYW4vZHJvcGJlYXIucG9zdGluc3Q6IHJlbW92ZSBjb2RlIGNhdXNpbmcgYm90aGVyc29tZSB3YXJuaW5nIG9uCisgICAgcGFja2FnZSBpbnN0YWxsIChjbG9zZXM6ICMyNTY3NTIpLgorICAqIGRlYmlhbi9SRUFETUUuRGViaWFuLmRpZXQ6IG5ldzsgaG93IHRvIGJ1aWxkIHdpdGggdGhlIGRpZXQgbGliYy4KKyAgKiBkZWJpYW4vZHJvcGJlYXIuZG9jczogYWRkIGRlYmlhbi9SRUFETUUuRGViaWFuLmRpZXQuCisgICogZGViaWFuL3J1bGVzOiBzdXBwb3J0ICJkaWV0IiBpbiBERUJfQlVJTERfT1BUSU9OUzsgbWlub3IgY2xlYW51cC4KKworIC0tIEdlcnJpdCBQYXBlIDxwYXBlQHNtYXJkZW4ub3JnPiAgU2F0LCAxNyBKdWwgMjAwNCAxOTozMToxOSArMDAwMAorCitkcm9wYmVhciAoMC40Mi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIE5ldyB1cHN0cmVhbSByZWxlYXNlIDAuNDIuCisgICogZGViaWFuL2RpZmYvY3ZzLTIwMDQwNTIwLmRpZmY6IHJlbW92ZTsgb2Jzb2xldGUuCisgICogZGViaWFuL3J1bGVzOiBkaXNhYmxlIHRhcmdldCBwYXRjaC4KKworIC0tIE1hdHQgSm9obnN0b24gPG1hdHRAdWNjLmFzbi5hdT4gIFdlZCwgMTYgSnVuZSAyMDA0IDEyOjQ0OjU0ICswODAwCisKK2Ryb3BiZWFyICgwLjQxLTMpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogMXN0IHVwbG9hZCB0byB0aGUgRGViaWFuIGFyY2hpdmUgKGNsb3NlczogIzIxNjU1MykuCisgICogZGViaWFuL2RpZmYvY3ZzLTIwMDQwNTIwLmRpZmY6IG5ldzsgc3RhYmxlIGN2cyBzbmFwc2hvdC4KKyAgKiBkZWJpYW4vcnVsZXM6IG5ldyB0YXJnZXQgcGF0Y2g6IGFwcGx5IGRpZmZzIGluIGRlYmlhbi9kaWZmLywgcmV2ZXJzZQorICAgIGFwcGx5IGluIHRhcmdldCBjbGVhbjsgaW5zdGFsbCBtYW4gcGFnZXMuCisgICogZGViaWFuL2NvbnRyb2w6IFByaW9yaXR5OiBvcHRpb25hbC4KKworIC0tIEdlcnJpdCBQYXBlIDxwYXBlQHNtYXJkZW4ub3JnPiAgU3VuLCAyMyBNYXkgMjAwNCAwODozMjozNyArMDAwMAorCitkcm9wYmVhciAoMC40MS0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIG5ldyBtYWludGFpbmVyLgorICAqIGRlYmlhbi9jb250cm9sOiBubyBsb25nZXIgQnVpbGQtRGVwZW5kczogZGViaGVscGVyOyBCdWlsZC1EZXBlbmRzOgorICAgIGxpYnotZGV2OyBTdGFuZGFyZHMtVmVyc2lvbjogMy42LjEuMDsgU3VnZ2VzdHM6IHJ1bml0OyB1cGRhdGUKKyAgICBkZXNjcmlwdGlvbnMuCisgICogZGViaWFuL3J1bGVzOiBzdG9wIHVzaW5nIGRlYmhlbHBlciwgdXNlIGltcGxpY2l0IHJ1bGVzOyBjbGVhbnVwOworICAgIGluc3RhbGwgZHJvcGJlYXJjb252ZXJ0IGludG8gL3Vzci9saWIvZHJvcGJlYXIvLgorICAqIGRlYmlhbi9pbXBpY2l0OiBuZXc7IGltcGxpY2l0IHJ1bGVzLgorICAqIGRlYmlhbi9jb3B5cmlnaHQuaW46IGFkYXB0LgorICAqIGRlYmlhbi9kcm9wYmVhci5pbml0OiBtaW5vciBhZGFwdGlvbnM7IHRlc3QgZm9yIGRyb3BiZWFyIHNlcnZpY2UKKyAgICBkaXJlY3RvcnkuCisgICogZGViaWFuL1JFQURNRS5ydW5pdDogbmV3OyBob3cgdG8gdXNlIGRyb3BiZWFyIHdpdGggcnVuaXQuCisgICogZGViaWFuL1JFQURNRS5EZWJpYW4sIGRlYmlhbi9kb2NzOiByZW5hbWUgdG8gZGViaWFuL2Ryb3BiZWFyLiouCisgICogZGViaWFuL2Ryb3BiZWFyLmRvY3M6IGFkZCBkZWJpYW4vUkVBRE1FLnJ1bml0CisgICogZGViaWFuL2NvbmZmaWxlczogcmVuYW1lIHRvIGRlYmlhbi9kcm9wYmVhci5jb25mZmlsZXM7IGFkZCBpbml0CisgICAgc2NyaXB0LCBhbmQgcnVuIHNjcmlwdHMuCisgICogZGViaWFuL3Bvc3RpbnN0OiByZW5hbWUgdG8gZGViaWFuL2Ryb3BiZWFyLnBvc3RpbnN0OyBhZGFwdDsgdXNlCisgICAgaW52bG9rZS1yYy5kIGRyb3BiZWFyIHN0YXJ0LgorICAqIGRlYmlhbi9kcm9wYmVhci5wcmVybTogbmV3OyBpbnZva2UtcmMuZCBkcm9wYmVhciBzdG9wLgorICAqIGRlYmlhbi9wb3N0cm06IHJlbmFtZSB0byBkZWJpYW4vZHJvcGJlYXIucG9zdHJtOyBhZGFwdDsgY2xlYW4gdXAKKyAgICBzZXJ2aWNlIGRpcmVjdG9yaWVzLgorICAqIGRlYmlhbi9jb21wYXQsIGRlYmlhbi9kaXJzLCBkcm9wYmVhci5kZWZhdWx0OiByZW1vdmU7IG9ic29sZXRlLgorCisgLS0gR2Vycml0IFBhcGUgPHBhcGVAc21hcmRlbi5vcmc+ICBTdW4sIDE2IE1heSAyMDA0IDE2OjUwOjU1ICswMDAwCisKK2Ryb3BiZWFyICgwLjQxLTEpIHVuc3RhYmxlOyB1cmdlbmN5PWxvdworCisgICogVXBkYXRlZCB0byAwLjQxIHJlbGVhc2UuCisgICogVmFyaW91cyBtaW5vciBmaXhlcworCisgLS0gTWF0dCBKb2huc3RvbiA8bWF0dEB1Y2MuYXNuLmF1PiAgTW9uLCAxOSBKYW4gMjAwNCAyMzoyMDo1NCArMDgwMAorCitkcm9wYmVhciAoMC4zOS0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIHVwZGF0ZWQgdG8gMC4zOSByZWxlYXNlLiBTb21lIG5ldyBmZWF0dXJlcywgc29tZSBidWdmaXhlcy4KKworIC0tIE1hdHQgSm9obnN0b24gPG1hdHRAdWNjLmFzbi5hdT4gIFR1ZSwgMTYgRGVjIDIwMDMgMTY6MjA6NTQgKzA4MDAKKworZHJvcGJlYXIgKDAuMzgtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiB1cGRhdGVkIHRvIDAuMzggcmVsZWFzZSAtIHZhcmlvdXMgaW1wb3J0YW50IGJ1Z2ZpeGVzCisKKyAtLSBNYXR0IEpvaG5zdG9uIDxtYXR0QHVjYy5hc24uYXU+ICBTYXQsIDExIE9jdCAyMDAzIDE2OjI4OjU0ICswODAwCisKK2Ryb3BiZWFyICgwLjM3LTEpIHVuc3RhYmxlOyB1cmdlbmN5PW1lZGl1bQorCisgICogdXBkYXRlZCB0byAwLjM3IHJlbGVhc2UgLSB2YXJpb3VzIGltcG9ydGFudCBidWdmaXhlcworCisgLS0gTWF0dCBKb2huc3RvbiA8bWF0dEB1Y2MuYXNuLmF1PiAgV2VkLCAyNCBTZXB0IDIwMDMgMTk6NDM6NTQgKzA4MDAKKworZHJvcGJlYXIgKDAuMzYtMSkgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICogdXBkYXRlZCB0byAwLjM2IHJlbGVhc2UgLSB2YXJpb3VzIGltcG9ydGFudCBidWdmaXhlcworCisgLS0gTWF0dCBKb2huc3RvbiA8bWF0dEB1Y2MuYXNuLmF1PiAgVHVlcywgMTkgQXVnIDIwMDMgMTI6MjA6NTQgKzA4MDAKKworZHJvcGJlYXIgKDAuMzUtMSkgdW5zdGFibGU7IHVyZ2VuY3k9aGlnaAorCisgICogdXBkYXRlZCB0byAwLjM1IHJlbGVhc2UgLSBjb250YWlucyBmaXggZm9yIHJlbW90ZWx5IGV4cGxvaXRhYmxlCisgICAgdnVsbmVyYWJpbGl0eS4KKworIC0tIE1hdHQgSm9obnN0b24gPG1hdHRAdWNjLmFzbi5hdT4gIFN1biwgMTcgQXVnIDIwMDMgMDU6Mzc6NDcgKzA4MDAKKworZHJvcGJlYXIgKDAuMzQtMSkgdW5zdGFibGU7IHVyZ2VuY3k9bWVkaXVtCisKKyAgKiB1cGRhdGVkIHRvIDAuMzQgcmVsZWFzZQorCisgLS0gTWF0dCBKb2huc3RvbiA8bWF0dEB1Y2MuYXNuLmF1PiAgRnJpLCAxNSBBdWcgMjAwMyAxNToxMDowMCArMDgwMAorCitkcm9wYmVhciAoMC4zMy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KKworICAqIHVwZGF0ZWQgdG8gMC4zMyByZWxlYXNlCisKKyAtLSBNYXR0IEpvaG5zdG9uIDxtYXR0QHVjYy5hc24uYXU+ICBTdW4sIDIyIEp1biAyMDAzIDIyOjIyOjAwICswODAwCisKK2Ryb3BiZWFyICgwLjMyY3ZzLTEpIHVuc3RhYmxlOyB1cmdlbmN5PW1lZGl1bQorCisgICogbm93IG1haW50YWluZWQgaW4gVUNDIENWUworICAqIGRlYmlhbi9jb3B5cmlnaHQuaW4gZmlsZSBhZGRlZCwgZ2VuZXJhdGVkIGZyb20gTElDRU5TRQorCisgLS0gR3JhaGFtZSBCb3dsYW5kIDxncmFoYW1lQGFuZ3J5Z29hdHMubmV0PiAgVHVlLCAyMSBKdW4gMjAwMyAxNzo1NzowMiArMDgwMAorCitkcm9wYmVhciAoMC4zMmN2cy0xKSB1bnN0YWJsZTsgdXJnZW5jeT1tZWRpdW0KKworICAqIHN5bmMgd2l0aCBDVlMKKyAgKiBmaXhlcyBYIGNyYXNoIGJ1ZworCisgLS0gR3JhaGFtZSBCb3dsYW5kIDxncmFoYW1lQGFuZ3J5Z29hdHMubmV0PiAgVHVlLCAyMCBKdW4gMjAwMyAxNTowNDo0NyArMDgwMAorCitkcm9wYmVhciAoMC4zMi0yKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIGZpeCBjcmVhdGlvbiBvZiBob3N0IGtleXMgdG8gdXNlIGNvcnJlY3QgbmFtZXMgaW4gL2V0Yy9kcm9wYmVhcgorICAqIGluaXQgc2NyaXB0ICJyZXN0YXJ0IiBmdW5jdGlvbiBmaXhlZAorICAqIHB1cmdpbmcgdGhpcyBwYWNrYWdlIG5vdyBkZWxldGVzIHRoZSBob3N0IGtleXMgYW5kIC9ldGMvZHJvcGJlYXIKKyAgKiBjaGFuZ2UgcHJpb3JpdHkgaW4gZGViaWFuL2NvbnRyb2wgdG8gJ3N0YW5kYXJkJworCisgLS0gR3JhaGFtZSBCb3dsYW5kIDxncmFoYW1lQGFuZ3J5Z29hdHMubmV0PiAgVHVlLCAxNyBKdW4gMjAwMyAxNTowNDo0NyArMDgwMAorCitkcm9wYmVhciAoMC4zMi0xKSB1bnN0YWJsZTsgdXJnZW5jeT1sb3cKKworICAqIEluaXRpYWwgUmVsZWFzZS4KKworIC0tIEdyYWhhbWUgQm93bGFuZCA8Z3JhaGFtZUBhbmdyeWdvYXRzLm5ldD4gIFR1ZSwgMTcgSnVuIDIwMDMgMTU6MDQ6NDcgKzA4MDAKKwpkaWZmIC0tZ2l0IGEvZGViaWFuL2NvbnRyb2wgYi9kZWJpYW4vY29udHJvbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTgzNWIzCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2NvbnRyb2wKQEAgLTAsMCArMSwyMCBAQAorU291cmNlOiBkcm9wYmVhcgorU2VjdGlvbjogbmV0CitQcmlvcml0eTogb3B0aW9uYWwKK01haW50YWluZXI6IEdlcnJpdCBQYXBlIDxwYXBlQHNtYXJkZW4ub3JnPgorQnVpbGQtRGVwZW5kczogbGliei1kZXYKK1N0YW5kYXJkcy1WZXJzaW9uOiAzLjYuMi4xCisKK1BhY2thZ2U6IGRyb3BiZWFyCitBcmNoaXRlY3R1cmU6IGFueQorRGVwZW5kczogJHtzaGxpYnM6RGVwZW5kc30KK1N1Z2dlc3RzOiBzc2gsIHJ1bml0CitEZXNjcmlwdGlvbjogbGlnaHR3ZWlnaHQgU1NIMiBzZXJ2ZXIgYW5kIGNsaWVudAorIGRyb3BiZWFyIGlzIGEgU1NIIDIgc2VydmVyIGFuZCBjbGllbnQgZGVzaWduZWQgdG8gYmUgc21hbGwgZW5vdWdoIHRvCisgYmUgdXNlZCBpbiBzbWFsbCBtZW1vcnkgZW52aXJvbm1lbnRzLCB3aGlsZSBzdGlsbCBiZWluZyBmdW5jdGlvbmFsIGFuZAorIHNlY3VyZSBlbm91Z2ggZm9yIGdlbmVyYWwgdXNlLgorIC4KKyBJdCBpbXBsZW1lbnRzIG1vc3QgcmVxdWlyZWQgZmVhdHVyZXMgb2YgdGhlIFNTSCAyIHByb3RvY29sLCBhbmQgb3RoZXIKKyBmZWF0dXJlcyBzdWNoIGFzIFgxMSBhbmQgYXV0aGVudGljYXRpb24gYWdlbnQgZm9yd2FyZGluZy4KKyAuCisgU2VlIGh0dHA6Ly9tYXR0LnVjYy5hc24uYXUvZHJvcGJlYXIvZHJvcGJlYXIuaHRtbApkaWZmIC0tZ2l0IGEvZGViaWFuL2NvcHlyaWdodC5pbiBiL2RlYmlhbi9jb3B5cmlnaHQuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk1MjZkMwotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9jb3B5cmlnaHQuaW4KQEAgLTAsMCArMSwxMSBAQAorVGhpcyBwYWNrYWdlIHdhcyBkZWJpYW5pemVkIGJ5IEdyYWhhbWUgQm93bGFuZCA8Z3JhaGFtZS5hbmdyeWdvYXRzLm5ldD4gb24KK1R1ZSwgMTcgSnVuIDIwMDMgMTU6MDQ6NDcgKzA4MDAsIG1haW50YWluZWQgdGVtcG9yYXJpbHkgYnkgTWF0dCBKb2huc3RvbgorPG1hdHRAdWNjLmFzbi5hdT4sIGFuZCB3YXMgYWRvcHRlZCBieSBHZXJyaXQgUGFwZSA8cGFwZUBzbWFyZGVuLm9yZz4gb24KK1N1biwgMTYgTWF5IDIwMDQgMTQ6Mzg6MzMgKzAwMDAuCisKK0l0IHdhcyBkb3dubG9hZGVkIGZyb20gaHR0cDovL21hdHQudWNjLmFzbi5hdS9kcm9wYmVhci8KKworVXBzdHJlYW0gQXV0aG9yOiBNYXR0IEpvaG5zdG9uIDxtYXR0QHVjYy5hc24uYXU+CisKK0NvcHlyaWdodDogCisKZGlmZiAtLWdpdCBhL2RlYmlhbi9kcm9wYmVhci5SRUFETUUuRGViaWFuIGIvZGViaWFuL2Ryb3BiZWFyLlJFQURNRS5EZWJpYW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VlYzNlNgotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9kcm9wYmVhci5SRUFETUUuRGViaWFuCkBAIC0wLDAgKzEsNTIgQEAKK0Ryb3BiZWFyIGZvciBEZWJpYW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBwYWNrYWdlIHdpbGwgYXR0ZW1wdCB0byBsaXN0ZW4gb24gcG9ydCAyMi4gSWYgdGhlIE9wZW5TU0ggCitwYWNrYWdlICgic3NoIikgaXMgaW5zdGFsbGVkLCB0aGUgZmlsZSAvZXRjL2RlZmF1bHQvZHJvcGJlYXIgCit3aWxsIGJlIHNldCB1cCBzbyB0aGF0IHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc3RhcnQgYnkgZGVmYXVsdC4KKworWW91IGNhbiBydW4gRHJvcGJlYXIgY29uY3VycmVudGx5IHdpdGggT3BlblNTSCAnc3NoZCcgYnkgCittb2RpZnlpbmcgL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyIHNvIHRoYXQgIk5PX1NUQVJUIiBpcyBzZXQgdG8gCisiMCIgYW5kIGNoYW5naW5nIHRoZSBwb3J0IG51bWJlciB0aGF0IERyb3BiZWFyIHJ1bnMgb24uIEZvbGxvdyAKK3RoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIGZpbGUuCisKK1RoaXMgcGFja2FnZSBzdWdnZXN0cyB5b3UgaW5zdGFsbCB0aGUgInNzaCIgcGFja2FnZS4gVGhpcyBwYWNrYWdlIAorcHJvdmlkZXMgdGhlICJzc2giIGNsaWVudCBwcm9ncmFtLCBhcyB3ZWxsIGFzIHRoZSAiL3Vzci9iaW4vc2NwIiAKK2JpbmFyeSB5b3Ugd2lsbCBuZWVkIHRvIGJlIGFibGUgdG8gcmV0cmlldmUgZmlsZXMgZnJvbSBhIHNlcnZlciAKK3J1bm5pbmcgRHJvcGJlYXIgdmlhIFNDUC4KKworUmVwbGFjaW5nIE9wZW5TU0ggInNzaGQiIHdpdGggRHJvcGJlYXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSB3aWxsIHN0aWxsIHdhbnQgdG8gaGF2ZSB0aGUgInNzaCIgcGFja2FnZSBpbnN0YWxsZWQsIGFzIGl0IAorcHJvdmlkZXMgdGhlICJzc2giIGFuZCAic2NwIiBiaW5hcmllcy4gV2hlbiB5b3UgaW5zdGFsbCB0aGlzIAorcGFja2FnZSwgaXQgY2hlY2tzIGZvciBleGlzdGluZyBPcGVuU1NIIGhvc3Qga2V5cyBhbmQgaWYgZm91bmQsIAorY29udmVydHMgdGhlbSB0byB0aGUgRHJvcGJlYXIgZm9ybWF0LgorCitJZiB0aGlzIGFwcGVhcnMgdG8gaGF2ZSB3b3JrZWQsIHlvdSBzaG91bGQgYmUgYWJsZSB0byBjaGFuZ2Ugb3ZlciAKK2J5IGZvbGxvd2luZyB0aGVzZSBzdGVwczoKKworMS4gU3RvcCB0aGUgT3BlblNTSCBzZXJ2ZXIKKyAgICUgL2V0Yy9pbml0LmQvc3NoIHN0b3AKKzIuIFByZXZlbnQgdGhlIE9wZW5TU0ggc2VydmVyIGZyb20gc3RhcnRpbmcgaW4gdGhlIGZ1dHVyZQorICAgJSB0b3VjaCAvZXRjL3NzaC9zc2hkX25vdF90b19iZV9ydW4KKzMuIE1vZGlmeSB0aGUgRHJvcGJlYXIgZGVmYXVsdHMgZmlsZSwgc2V0IE5PX1NUQVJUIHRvIDAgYW5kIAorICAgZW5zdXJlIERST1BCRUFSX1BPUlQgaXMgc2V0IHRvIDIyLgorICAgJSBlZGl0b3IgL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyCis0LiBSZXN0YXJ0IHRoZSBEcm9wYmVhciBzZXJ2ZXIuCisgICAlIC9ldGMvaW5pdC5kL2Ryb3BiZWFyIHJlc3RhcnQKKworU2VlIHRoZSBEcm9wYmVhciBob21lcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbjoKKyAgaHR0cDovL21hdHQudWNjLmFzbi5hdS9kcm9wYmVhci9kcm9wYmVhci5odG1sCisKKworRW50cm9weSBmcm9tIC9kZXYvcmFuZG9tCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRyb3BiZWFyIGJpbmFyeSBwYWNrYWdlIGlzIGNvbmZpZ3VyZWQgYXQgY29tcGlsZSB0aW1lIHRvIHJlYWQKK2VudHJvcHkgZnJvbSAvZGV2L3JhbmRvbS4gSWYgL2Rldi9yYW5kb20gb24gYSBzeXN0ZW0gYmxvY2tzIHdoZW4KK3JlYWRpbmcgZGF0YSBmcm9tIGl0LCBjbGllbnQgbG9naW5zIG1heSBiZSBkZWxheWVkIHVudGlsIHRoZSBjbGllbnQKK3RpbWVzIG91dC4gVGhlIGRyb3BiZWFyIHNlcnZlciB3cml0ZXMgYSBub3RpY2UgdG8gdGhlIGxvZ3Mgd2hlbiBpdAorc2VlcyAvZGV2L3JhbmRvbSBibG9ja2luZy4gIEEgd29ya2Fyb3VuZCBmb3Igc3VjaCBzeXN0ZW1zIGlzIHRvCityZS1jb21waWxlIHRoZSBwYWNrYWdlIHdpdGggRFJPUEJFQVJfUkFORE9NX0RFViBzZXQgdG8gL2Rldi91cmFuZG9tCitpbiBvcHRpb25zLmguCmRpZmYgLS1naXQgYS9kZWJpYW4vZHJvcGJlYXIuY29uZmZpbGVzIGIvZGViaWFuL2Ryb3BiZWFyLmNvbmZmaWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTE5MDA2Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2Ryb3BiZWFyLmNvbmZmaWxlcwpAQCAtMCwwICsxLDMgQEAKKy9ldGMvaW5pdC5kL2Ryb3BiZWFyCisvZXRjL2Ryb3BiZWFyL3J1bgorL2V0Yy9kcm9wYmVhci9sb2cvcnVuCmRpZmYgLS1naXQgYS9kZWJpYW4vZHJvcGJlYXIuZGVmYXVsdCBiL2RlYmlhbi9kcm9wYmVhci5kZWZhdWx0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJpYW4vZHJvcGJlYXIuZGVmYXVsdApkaWZmIC0tZ2l0IGEvZGViaWFuL2Ryb3BiZWFyLmRvY3MgYi9kZWJpYW4vZHJvcGJlYXIuZG9jcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGZlYzc0Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2Ryb3BiZWFyLmRvY3MKQEAgLTAsMCArMSw0IEBACitSRUFETUUKK1RPRE8KK2RlYmlhbi9SRUFETUUucnVuaXQKK2RlYmlhbi9SRUFETUUuRGViaWFuLmRpZXQKZGlmZiAtLWdpdCBhL2RlYmlhbi9kcm9wYmVhci5pbml0IGIvZGViaWFuL2Ryb3BiZWFyLmluaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3OWM4ZAotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9kcm9wYmVhci5pbml0CkBAIC0wLDAgKzEsNjEgQEAKKyMhL2Jpbi9zaAorIworIyBEbyBub3QgY29uZmlndXJlIHRoaXMgZmlsZS4gRWRpdCAvZXRjL2RlZmF1bHQvZHJvcGJlYXIgaW5zdGVhZCEKKyMKKworUEFUSD0vdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4KK0RBRU1PTj0vdXNyL3NiaW4vZHJvcGJlYXIKK05BTUU9ZHJvcGJlYXIKK0RFU0M9IkRyb3BiZWFyIFNTSCBzZXJ2ZXIiCisKK0RST1BCRUFSX1BPUlQ9MjIKK0RST1BCRUFSX0VYVFJBX0FSR1M9CitOT19TVEFSVD0wCisKK3NldCAtZQorCitjYW5jZWwoKSB7IGVjaG8gIiQxIiA+JjI7IGV4aXQgMDsgfTsKK3Rlc3QgISAtciAvZXRjL2RlZmF1bHQvZHJvcGJlYXIgfHwgLiAvZXRjL2RlZmF1bHQvZHJvcGJlYXIKK3Rlc3QgLXggIiREQUVNT04iIHx8IGNhbmNlbCAiJERBRU1PTiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgZXhlY3V0YWJsZS4iCit0ZXN0ICEgLWggL3Zhci9zZXJ2aWNlL2Ryb3BiZWFyIHx8IFwKKyAgY2FuY2VsICcvdmFyL3NlcnZpY2UvZHJvcGJlYXIgZXhpc3RzLCBzZXJ2aWNlIGlzIGNvbnRyb2xsZWQgdGhyb3VnaCBydW5pdC4nCisKK3Rlc3QgLXogIiREUk9QQkVBUl9CQU5ORVIiIHx8IFwKKyAgRFJPUEJFQVJfRVhUUkFfQVJHUz0iJERST1BCRUFSX0VYVFJBX0FSR1MgLWIgJERST1BCRUFSX0JBTk5FUiIKK3Rlc3QgLW4gIiREUk9QQkVBUl9SU0FLRVkiIHx8IFwKKyAgRFJPUEJFQVJfUlNBS0VZPSIvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX3JzYV9ob3N0X2tleSIKK3Rlc3QgLW4gIiREUk9QQkVBUl9EU1NLRVkiIHx8IFwKKyAgRFJPUEJFQVJfRFNTS0VZPSIvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX2Rzc19ob3N0X2tleSIKKworY2FzZSAiJDEiIGluCisgIHN0YXJ0KQorCXRlc3QgIiROT19TVEFSVCIgPSAiMCIgfHwgY2FuY2VsICdOT19TVEFSVCBpcyBub3Qgc2V0IHRvIHplcm8uJworCWVjaG8gLW4gIlN0YXJ0aW5nICRERVNDOiAiCisJc3RhcnQtc3RvcC1kYWVtb24gLS1zdGFydCAtLXF1aWV0IC0tcGlkZmlsZSAvdmFyL3J1bi8iJE5BTUUiLnBpZCBcCisJICAtLWV4ZWMgIiREQUVNT04iIC0tIC1kICIkRFJPUEJFQVJfRFNTS0VZIiAtciAiJERST1BCRUFSX1JTQUtFWSIgXAorCSAgICAtcCAiJERST1BCRUFSX1BPUlQiICREUk9QQkVBUl9FWFRSQV9BUkdTCisJZWNobyAiJE5BTUUuIgorCTs7CisgIHN0b3ApCisJZWNobyAtbiAiU3RvcHBpbmcgJERFU0M6ICIKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0b3AgLS1xdWlldCAtLW9rbm9kbyAtLXBpZGZpbGUgL3Zhci9ydW4vIiROQU1FIi5waWQKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgcmVzdGFydHxmb3JjZS1yZWxvYWQpCisJdGVzdCAiJE5PX1NUQVJUIiA9ICIwIiB8fCBjYW5jZWwgJ05PX1NUQVJUIGlzIG5vdCBzZXQgdG8gemVyby4nCisJZWNobyAtbiAiUmVzdGFydGluZyAkREVTQzogIgorCXN0YXJ0LXN0b3AtZGFlbW9uIC0tc3RvcCAtLXF1aWV0IC0tb2tub2RvIC0tcGlkZmlsZSAvdmFyL3J1bi8iJE5BTUUiLnBpZAorCXNsZWVwIDEKKwlzdGFydC1zdG9wLWRhZW1vbiAtLXN0YXJ0IC0tcXVpZXQgLS1waWRmaWxlIC92YXIvcnVuLyIkTkFNRSIucGlkIFwKKwkgIC0tZXhlYyAiJERBRU1PTiIgLS0gLWQgIiREUk9QQkVBUl9EU1NLRVkiIC1yICIkRFJPUEJFQVJfUlNBS0VZIiBcCisJICAgIC1wICIkRFJPUEJFQVJfUE9SVCIgJERST1BCRUFSX0VYVFJBX0FSR1MKKwllY2hvICIkTkFNRS4iCisJOzsKKyAgKikKKwlOPS9ldGMvaW5pdC5kLyROQU1FCisJZWNobyAiVXNhZ2U6ICROIHtzdGFydHxzdG9wfHJlc3RhcnR8Zm9yY2UtcmVsb2FkfSIgPiYyCisJZXhpdCAxCisJOzsKK2VzYWMKKworZXhpdCAwCmRpZmYgLS1naXQgYS9kZWJpYW4vZHJvcGJlYXIucG9zdGluc3QgYi9kZWJpYW4vZHJvcGJlYXIucG9zdGluc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzEyZWIwNQotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9kcm9wYmVhci5wb3N0aW5zdApAQCAtMCwwICsxLDY3IEBACisjIS9iaW4vc2gKK3NldCAtZQorCit0ZXN0ICIkMSIgPSAnY29uZmlndXJlJyB8fCBleGl0IDAKKworaWYgdGVzdCAhIC1lIC9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5OyB0aGVuCisgIGlmIHRlc3QgLWYgL2V0Yy9zc2gvc3NoX2hvc3RfcnNhX2tleTsgdGhlbgorICAgIGVjaG8gIkNvbnZlcnRpbmcgZXhpc3RpbmcgT3BlblNTSCBSU0EgaG9zdCBrZXkgdG8gRHJvcGJlYXIgZm9ybWF0LiIKKyAgICAvdXNyL2xpYi9kcm9wYmVhci9kcm9wYmVhcmNvbnZlcnQgb3BlbnNzaCBkcm9wYmVhciBcCisgICAgICAvZXRjL3NzaC9zc2hfaG9zdF9yc2Ffa2V5IC9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5CisgIGVsc2UKKyAgICBlY2hvICJHZW5lcmF0aW5nIERyb3BiZWFyIFJTQSBrZXkuIFBsZWFzZSB3YWl0LiIKKyAgICBkcm9wYmVhcmtleSAtdCByc2EgLWYgL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkKKyAgZmkKK2ZpCitpZiB0ZXN0ICEgLWUgL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9kc3NfaG9zdF9rZXk7IHRoZW4KKyAgaWYgdGVzdCAtZiAvZXRjL3NzaC9zc2hfaG9zdF9kc2Ffa2V5OyB0aGVuCisgICAgZWNobyAiQ29udmVydGluZyBleGlzdGluZyBPcGVuU1NIIFJTQSBob3N0IGtleSB0byBEcm9wYmVhciBmb3JtYXQuIgorICAgIC91c3IvbGliL2Ryb3BiZWFyL2Ryb3BiZWFyY29udmVydCBvcGVuc3NoIGRyb3BiZWFyIFwKKyAgICAgIC9ldGMvc3NoL3NzaF9ob3N0X2RzYV9rZXkgL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9kc3NfaG9zdF9rZXkKKyAgZWxzZQorICAgIGVjaG8gIkdlbmVyYXRpbmcgRHJvcGJlYXIgRFNTIGtleS4gUGxlYXNlIHdhaXQuIgorICAgIGRyb3BiZWFya2V5IC10IGRzcyAtZiAvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX2Rzc19ob3N0X2tleQorICBmaQorZmkKK2lmIHRlc3QgISAtcyAvZXRjL2RlZmF1bHQvZHJvcGJlYXI7IHRoZW4gCisgICMgY2hlY2sgd2hldGhlciBPcGVuU1NIIHNlZW1zIHRvIGJlIGluc3RhbGxlZC4KKyAgaWYgdGVzdCAteCAvdXNyL3NiaW4vc3NoZDsgdGhlbgorICAgIGNhdCA8PEVPVAorT3BlblNTSCBhcHBlYXJzIHRvIGJlIGluc3RhbGxlZC4gIFNldHRpbmcgL2V0Yy9kZWZhdWx0L2Ryb3BiZWFyIHNvIHRoYXQKK0Ryb3BiZWFyIHdpbGwgbm90IHN0YXJ0IGJ5IGRlZmF1bHQuICBFZGl0IHRoaXMgZmlsZSB0byBjaGFuZ2UgdGhpcyBiZWhhdmlvdXIuCisKK0VPVAorICAgIGNhdCA+Pi9ldGMvZGVmYXVsdC9kcm9wYmVhciA8PEVPVAorIyBkaXNhYmxlZCBiZWNhdXNlIE9wZW5TU0ggaXMgaW5zdGFsbGVkCisjIGNoYW5nZSB0byBOT19TVEFSVD0wIHRvIGVuYWJsZSBEcm9wYmVhcgorTk9fU1RBUlQ9MQorCitFT1QKKyAgZmkKKyAgY2F0ID4+L2V0Yy9kZWZhdWx0L2Ryb3BiZWFyIDw8RU9UCisjIHRoZSBUQ1AgcG9ydCB0aGF0IERyb3BiZWFyIGxpc3RlbnMgb24KK0RST1BCRUFSX1BPUlQ9MjIKKworIyBhbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIERyb3BiZWFyCitEUk9QQkVBUl9FWFRSQV9BUkdTPQorCisjIHNwZWNpZnkgYW4gb3B0aW9uYWwgYmFubmVyIGZpbGUgY29udGFpbmluZyBhIG1lc3NhZ2UgdG8gYmUKKyMgc2VudCB0byBjbGllbnRzIGJlZm9yZSB0aGV5IGNvbm5lY3QsIHN1Y2ggYXMgIi9ldGMvaXNzdWUubmV0IgorRFJPUEJFQVJfQkFOTkVSPSIiCisKKyMgUlNBIGhvc3RrZXkgZmlsZSAoZGVmYXVsdDogL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkpCisjRFJPUEJFQVJfUlNBS0VZPSIvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX3JzYV9ob3N0X2tleSIKKworIyBEU1MgaG9zdGtleSBmaWxlIChkZWZhdWx0OiAvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX2Rzc19ob3N0X2tleSkKKyNEUk9QQkVBUl9EU1NLRVk9Ii9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5IgorRU9UCitmaQorCitpZiB0ZXN0IC14IC9ldGMvaW5pdC5kL2Ryb3BiZWFyOyB0aGVuCisgIHVwZGF0ZS1yYy5kIGRyb3BiZWFyIGRlZmF1bHRzID4vZGV2L251bGwKKyAgaWYgdGVzdCAteCAvdXNyL3NiaW4vaW52b2tlLXJjLmQ7IHRoZW4KKyAgICBpbnZva2UtcmMuZCBkcm9wYmVhciByZXN0YXJ0CisgIGVsc2UKKyAgICAvZXRjL2luaXQuZC9kcm9wYmVhciByZXN0YXJ0CisgIGZpCitmaQpkaWZmIC0tZ2l0IGEvZGViaWFuL2Ryb3BiZWFyLnBvc3RybSBiL2RlYmlhbi9kcm9wYmVhci5wb3N0cm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA5ZGFiMAotLS0gL2Rldi9udWxsCisrKyBiL2RlYmlhbi9kcm9wYmVhci5wb3N0cm0KQEAgLTAsMCArMSwxMiBAQAorIyEgL2Jpbi9zaAorc2V0IC1lCisKK3Rlc3QgIiQxIiA9ICdwdXJnZScgfHwgZXhpdCAwCitpZiB0ZXN0IC1lIC9ldGMvZHJvcGJlYXI7IHRoZW4KKyAgcm0gLWYgL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9yc2FfaG9zdF9rZXkKKyAgcm0gLWYgL2V0Yy9kcm9wYmVhci9kcm9wYmVhcl9kc3NfaG9zdF9rZXkKKyAgcm1kaXIgLS1pZ25vcmUtZmFpbC1vbi1ub24tZW1wdHkgL2V0Yy9kcm9wYmVhcgorZmkKK3VwZGF0ZS1yYy5kIGRyb3BiZWFyIHJlbW92ZSA+L2Rldi9udWxsCitybSAtZiAvZXRjL2RlZmF1bHQvZHJvcGJlYXIKK3JtIC1yZiAvZXRjL2Ryb3BiZWFyL3N1cGVydmlzZSAvZXRjL2Ryb3BiZWFyL2xvZy9zdXBlcnZpc2UKZGlmZiAtLWdpdCBhL2RlYmlhbi9kcm9wYmVhci5wcmVybSBiL2RlYmlhbi9kcm9wYmVhci5wcmVybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjNjZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2Ryb3BiZWFyLnByZXJtCkBAIC0wLDAgKzEsMTEgQEAKKyMhL2Jpbi9zaAorc2V0IC1lCisKK3Rlc3QgIiQxIiA9ICdyZW1vdmUnIHx8IHRlc3QgIiQxIiA9ICdkZWNvbmZpZ3VyZScgfHwgZXhpdCAwCitpZiB0ZXN0IC14IC9ldGMvaW5pdC5kL2Ryb3BiZWFyOyB0aGVuCisgIGlmIHRlc3QgLXggL3Vzci9zYmluL2ludm9rZS1yYy5kOyB0aGVuCisgICAgaW52b2tlLXJjLmQgZHJvcGJlYXIgc3RvcAorICBlbHNlCisgICAgL2V0Yy9pbml0LmQvZHJvcGJlYXIgc3RvcAorICBmaQorZmkKZGlmZiAtLWdpdCBhL2RlYmlhbi9pbXBsaWNpdCBiL2RlYmlhbi9pbXBsaWNpdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTdlZTk4Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL2ltcGxpY2l0CkBAIC0wLDAgKzEsOTMgQEAKKyMgJElkOiBpbXBsaWNpdCx2IDEuMTEgMjAwNS8xMS8yOSAyMTo1Nzo1NSBwYXBlIEV4cCAkCisKKy5QSE9OWTogZGViLWNoZWNrZGlyIGRlYi1jaGVja3VpZAorCitkZWItY2hlY2tkaXI6CisJQHRlc3QgLWUgZGViaWFuL2NvbnRyb2wgfHwgc2ggLWN4ICchIDogd3JvbmcgZGlyZWN0b3J5JworZGViLWNoZWNrdWlkOgorCUB0ZXN0ICJgaWQgLXVgIiAtZXEgMCB8fCBzaCAtY3ggJyEgOiBuZWVkIHJvb3QgcHJpdmlsZWdlcycKKworJS5kZWI6ICUuZGViLWRvY3MgJS5kZWItREVCSUFOCisJQHJtIC1mICQqLmRlYiAkKi5kZWItY2hlY2tkaXIgJCouZGViLWRvY3MgJCouZGViLWRvY3MtYmFzZSBcCisJICAkKi5kZWItZG9jcy1kb2NzICQqLmRlYi1kb2NzLWV4YW1wbGVzICQqLmRlYi1ERUJJQU4gXAorCSAgJCouZGViLURFQklBTi1kaXIgJCouZGViLURFQklBTi1zY3JpcHRzICQqLmRlYi1ERUJJQU4tbWQ1c3VtcworCislLnVkZWI6ICUuZGViLURFQklBTgorCUBybSAtZiAkKi5kZWIgJCouZGViLWNoZWNrZGlyICQqLmRlYi1ERUJJQU4gJCouZGViLURFQklBTi1kaXIgXAorCSAgJCouZGViLURFQklBTi1zY3JpcHRzICQqLmRlYi1ERUJJQU4tbWQ1c3VtcworCislLmRlYi1jaGVja2RpcjoKKwlAdGVzdCAtZCBkZWJpYW4vJCogfHwgc2ggLWN4ICchIDogZGlyZWN0b3J5IGRlYmlhbi8kKiBtaXNzaW5nJworCUB0ZXN0ICJgaWQgLXVgIiAtZXEgMCB8fCBzaCAtY3ggJyEgOiBuZWVkIHJvb3QgcHJpdmlsZWdlcycKKworJS5kZWItZG9jcy1iYXNlOgorCTogaW1wbGljaXQKKwlAcm0gLWYgZGViaWFuLyQqL3Vzci9zaGFyZS9kb2MvJCovKiB8fCA6CisJQGluc3RhbGwgLWQgLW0wNzU1IGRlYmlhbi8kKi91c3Ivc2hhcmUvZG9jLyQqCisJOiBkZWJpYW4vJCovdXNyL3NoYXJlL2RvYy8kKi8KKwlAc2ggLWN4ICdpbnN0YWxsIC1tMDY0NCBkZWJpYW4vY29weXJpZ2h0IGRlYmlhbi8kKi91c3Ivc2hhcmUvZG9jLyQqLycKKwlAc2ggLWN4ICdpbnN0YWxsIC1tMDY0NCBkZWJpYW4vY2hhbmdlbG9nIFwKKwkgIGRlYmlhbi8kKi91c3Ivc2hhcmUvZG9jLyQqL2NoYW5nZWxvZy5EZWJpYW4nCisJQHRlc3QgISAtciBjaGFuZ2Vsb2cgfHwgXAorCSAgc2ggLWN4ICdpbnN0YWxsIC1tMDY0NCBjaGFuZ2Vsb2cgZGViaWFuLyQqL3Vzci9zaGFyZS9kb2MvJCovJworCUB0ZXN0IC1yIGRlYmlhbi8kKi91c3Ivc2hhcmUvZG9jLyQqL2NoYW5nZWxvZyB8fCBcCisJICBzaCAtY3ggJ212IGRlYmlhbi8kKi91c3Ivc2hhcmUvZG9jLyQqL2NoYW5nZWxvZy5EZWJpYW4gXAorCSAgICBkZWJpYW4vJCovdXNyL3NoYXJlL2RvYy8kKi9jaGFuZ2Vsb2cnCisJQHRlc3QgLXMgZGViaWFuLyQqL3Vzci9zaGFyZS9kb2MvJCovY2hhbmdlbG9nIHx8IFwKKwkgIHNoIC1jeCAncm0gLWYgZGViaWFuLyQqL3Vzci9zaGFyZS9kb2MvJCovY2hhbmdlbG9nJworCUBnemlwIC05IGRlYmlhbi8kKi91c3Ivc2hhcmUvZG9jLyQqL2NoYW5nZWxvZyoKKyUuZGViLWRvY3MtZG9jczoKKwlAZm9yIGkgaW4gYGNhdCBkZWJpYW4vJCouZG9jcyAyPi9kZXYvbnVsbCB8fCA6YDsgZG8gXAorCSAgaWYgdGVzdCAtZCAkJGk7IHRoZW4gXAorCSAgICBzaCAtY3ggImluc3RhbGwgLWQgLW0wNzU1IGRlYmlhbi8kKi91c3Ivc2hhcmUvZG9jLyQqLyQke2kjIyovfSIgJiYgXAorCSAgICBmb3IgaiBpbiAkJGkvKjsgZG8gXAorCSAgICAgIHNoIC1jeCAiaW5zdGFsbCAtbTA2NDQgJCRqIFwKKwkgICAgICAgIGRlYmlhbi8kKi91c3Ivc2hhcmUvZG9jLyQqLyQke2kjIyovfS8iIHx8IGV4aXQgMTsgXAorCSAgICBkb25lIHx8IGV4aXQgMTsgXAorCSAgICBjb250aW51ZTsgXAorCSAgZmk7IFwKKwkgIHNoIC1jeCAiaW5zdGFsbCAtbTA2NDQgJCRpIGRlYmlhbi8kKi91c3Ivc2hhcmUvZG9jLyQqLyIgfHwgZXhpdCAxOyBcCisJZG9uZQorCUB0ZXN0ICEgLXIgZGViaWFuLyQqLlJFQURNRS5EZWJpYW4gfHwgXAorCSAgc2ggLWN4ICdpbnN0YWxsIC1tMDY0NCBkZWJpYW4vJCouUkVBRE1FLkRlYmlhbiBcCisJICAgIGRlYmlhbi8kKi91c3Ivc2hhcmUvZG9jLyQqL1JFQURNRS5EZWJpYW4nCisJQGlmIHRlc3QgLXIgZGViaWFuLyQqLk5FV1MuRGViaWFuOyB0aGVuIFwKKwkgIHNoIC1jeCAnaW5zdGFsbCAtbTA2NDQgZGViaWFuLyQqLk5FV1MuRGViaWFuIFwKKwkgICAgZGViaWFuLyQqL3Vzci9zaGFyZS9kb2MvJCovTkVXUy5EZWJpYW4gJiYgXAorCSAgICAgIGd6aXAgLTkgZGViaWFuLyQqL3Vzci9zaGFyZS9kb2MvJCovTkVXUy5EZWJpYW4nOyBcCisJZmkKKyUuZGViLWRvY3MtZXhhbXBsZXM6CisJQHJtIC1yZiBkZWJpYW4vJCovdXNyL3NoYXJlL2RvYy8kKi9leGFtcGxlcworCTogZGViaWFuLyQqL3Vzci9zaGFyZS9kb2MvJCovZXhhbXBsZXMvCisJQHRlc3QgISAtciBkZWJpYW4vJCouZXhhbXBsZXMgfHwgXAorCSAgaW5zdGFsbCAtZCAtbTA3NTUgZGViaWFuLyQqL3Vzci9zaGFyZS9kb2MvJCovZXhhbXBsZXMKKwlAZm9yIGkgaW4gYGNhdCBkZWJpYW4vJCouZXhhbXBsZXMgMj4vZGV2L251bGwgfHwgOmA7IGRvIFwKKwkgIHNoIC1jeCAiaW5zdGFsbCAtbTA2NDQgJCRpIGRlYmlhbi8kKi91c3Ivc2hhcmUvZG9jLyQqL2V4YW1wbGVzLyIgXAorCSAgICB8fCBleGl0IDE7IFwKKwlkb25lCislLmRlYi1kb2NzOiAlLmRlYi1jaGVja2RpciAlLmRlYi1kb2NzLWJhc2UgJS5kZWItZG9jcy1kb2NzICUuZGViLWRvY3MtZXhhbXBsZXMKKwk6IGRlYmlhbi8kKi91c3Ivc2hhcmUvZG9jLyQqLyBvaworCislLmRlYi1ERUJJQU4tYmFzZToKKwlAcm0gLXJmIGRlYmlhbi8kKi9ERUJJQU4KKwk6IGRlYmlhbi8kKi9ERUJJQU4vCisJQGluc3RhbGwgLWQgLW0wNzU1IGRlYmlhbi8kKi9ERUJJQU4KKwlAZm9yIGkgaW4gY29uZmZpbGVzIHNobGlicyB0ZW1wbGF0ZXM7IGRvIFwKKwkgIHRlc3QgISAtciBkZWJpYW4vJCouJCRpIHx8IFwKKwkgICAgc2ggLWN4ICJpbnN0YWxsIC1tMDY0NCBkZWJpYW4vJCouJCRpIGRlYmlhbi8kKi9ERUJJQU4vJCRpIiBcCisJICAgICAgfHwgZXhpdCAxOyBcCisJZG9uZQorJS5kZWItREVCSUFOLXNjcmlwdHM6CisJQGZvciBpIGluIHByZWluc3QgcHJlcm0gcG9zdGluc3QgcG9zdHJtIGNvbmZpZzsgZG8gXAorCSAgdGVzdCAhIC1yIGRlYmlhbi8kKi4kJGkgfHwgXAorCSAgICBzaCAtY3ggImluc3RhbGwgLW0wNzU1IGRlYmlhbi8kKi4kJGkgZGViaWFuLyQqL0RFQklBTi8kJGkiIFwKKwkgICAgICB8fCBleGl0IDE7IFwKKwlkb25lCislLmRlYi1ERUJJQU4tbWQ1c3VtczoKKwk6IGRlYmlhbi8kKi9ERUJJQU4vbWQ1c3VtcworCUBybSAtZiBkZWJpYW4vJCovREVCSUFOL21kNXN1bXMKKwlAY2QgZGViaWFuLyQqICYmIGZpbmQgKiAtcGF0aCAnREVCSUFOJyAtcHJ1bmUgLW8gXAorCSAgLXR5cGUgZiAtZXhlYyBtZDVzdW0ge30gPj5ERUJJQU4vbWQ1c3VtcyBcOworJS5kZWItREVCSUFOOiAlLmRlYi1jaGVja2RpciAlLmRlYi1ERUJJQU4tYmFzZSAlLmRlYi1ERUJJQU4tc2NyaXB0cyBcCisJICAlLmRlYi1ERUJJQU4tbWQ1c3VtcworCTogZGViaWFuLyQqL0RFQklBTi8gb2sKZGlmZiAtLWdpdCBhL2RlYmlhbi9ydWxlcyBiL2RlYmlhbi9ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41MmMzZWE4Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL3J1bGVzCkBAIC0wLDAgKzEsMTA3IEBACisjIS91c3IvYmluL21ha2UgLWYKKworI2V4cG9ydCBESF9PUFRJT05TCitERUJfSE9TVF9HTlVfVFlQRSA/PSQoc2hlbGwgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfSE9TVF9HTlVfVFlQRSkKK0RFQl9CVUlMRF9HTlVfVFlQRSA/PSQoc2hlbGwgZHBrZy1hcmNoaXRlY3R1cmUgLXFERUJfQlVJTERfR05VX1RZUEUpCisKK1NUUklQID1zdHJpcAoraWZuZXEgKCwkKGZpbmRzdHJpbmcgbm9zdHJpcCwkKERFQl9CVUlMRF9PUFRJT05TKSkpCisgIFNUUklQID06IG5vc3RyaXAKK2VuZGlmCisKK0NGTEFHUyA9LVdhbGwgLWcKK2lmbmVxICgsJChmaW5kc3RyaW5nIG5vb3B0LCQoREVCX0JVSUxEX09QVElPTlMpKSkKKyAgQ0ZMQUdTICs9LU8wCitlbHNlCisgIENGTEFHUyArPS1PMgorZW5kaWYKKworQ09ORkZMQUdTID0KK0NDID1nY2MKK2lmbmVxICgsJChmaW5kc3RyaW5nIGRpZXQsJChERUJfQlVJTERfT1BUSU9OUykpKQorICBDT05GRkxBR1MgPS0tZGlzYWJsZS16bGliCisgIENDID1kaWV0IC12IC1PcyBnY2MgLW5vc3RkaW5jCitlbmRpZgorCitESVIgPSQoc2hlbGwgcHdkKS9kZWJpYW4vZHJvcGJlYXIKKworcGF0Y2g6IGRlYi1jaGVja2RpciBwYXRjaC1zdGFtcAorcGF0Y2gtc3RhbXA6CisJZm9yIGkgaW4gYGxzIC0xIGRlYmlhbi9kaWZmLyouZGlmZiB8fCA6YDsgZG8gXAorCSAgcGF0Y2ggLXAwIDwkJGkgfHwgZXhpdCAxOyBcCisJZG9uZQorCXRvdWNoIHBhdGNoLXN0YW1wCisKK2NvbmZpZy5zdGF0dXM6IHBhdGNoLXN0YW1wIGNvbmZpZ3VyZQorCUNDPSckKENDKScgXAorCUNGTEFHUz0nJChDRkxBR1MpJycgLURTRlRQU0VSVkVSX1BBVEg9IlwiL3Vzci9saWIvc2Z0cC1zZXJ2ZXJcIiInIFwKKwkgIC4vY29uZmlndXJlIC0taG9zdD0nJChERUJfSE9TVF9HTlVfVFlQRSknIFwKKwkgICAgLS1idWlsZD0nJChERUJfQlVJTERfR05VX1RZUEUpJyAtLXByZWZpeD0vdXNyIFwKKwkgICAgLS1tYW5kaXI9XCQke3ByZWZpeH0vc2hhcmUvbWFuIC0taW5mb2Rpcj1cJCR7cHJlZml4fS9zaGFyZS9pbmZvIFwKKwkgICAgJChDT05GRkxBR1MpCisKK2J1aWxkOiBkZWItY2hlY2tkaXIgYnVpbGQtc3RhbXAKK2J1aWxkLXN0YW1wOiBjb25maWcuc3RhdHVzCisJJChNQUtFKSBDQz0nJChDQyknIExEPSckKENDKScKKwl0b3VjaCBidWlsZC1zdGFtcAorCitjbGVhbjogZGViLWNoZWNrZGlyIGRlYi1jaGVja3VpZAorCS0kKE1BS0UpIGRpc3RjbGVhbgorCXRlc3QgISAtZSBwYXRjaC1zdGFtcCB8fCBcCisJICBmb3IgaSBpbiBgbHMgLTFyIGRlYmlhbi9kaWZmLyouZGlmZiB8fCA6YDsgZG8gXAorCSAgICBwYXRjaCAtcDAgLVIgPCQkaTsgXAorCSAgZG9uZQorCXJtIC1mIHBhdGNoLXN0YW1wIGJ1aWxkLXN0YW1wIGNvbmZpZy5sb2cgY29uZmlnLnN0YXR1cworCXJtIC1yZiAnJChESVIpJworCXJtIC1mIGRlYmlhbi9maWxlcyBkZWJpYW4vc3Vic3R2YXJzIGRlYmlhbi9jb3B5cmlnaHQgY2hhbmdlbG9nCisKK2luc3RhbGw6IGRlYi1jaGVja2RpciBkZWItY2hlY2t1aWQgYnVpbGQtc3RhbXAKKwlybSAtcmYgJyQoRElSKScKKwlpbnN0YWxsIC1kIC1tMDc1NSAnJChESVIpJy9ldGMvZHJvcGJlYXIKKwkjIHByb2dyYW1zCisJaW5zdGFsbCAtZCAtbTA3NTUgJyQoRElSKScvdXNyL3NiaW4KKwlpbnN0YWxsIC1tMDc1NSBkcm9wYmVhciAnJChESVIpJy91c3Ivc2Jpbi9kcm9wYmVhcgorCWluc3RhbGwgLWQgLW0wNzU1ICckKERJUiknL3Vzci9iaW4KKwlpbnN0YWxsIC1tMDc1NSBkYmNsaWVudCAnJChESVIpJy91c3IvYmluL2RiY2xpZW50CisJaW5zdGFsbCAtbTA3NTUgZHJvcGJlYXJrZXkgJyQoRElSKScvdXNyL2Jpbi9kcm9wYmVhcmtleQorCWluc3RhbGwgLWQgLW0wNzU1ICckKERJUiknL3Vzci9saWIvZHJvcGJlYXIKKwlpbnN0YWxsIC1tMDc1NSBkcm9wYmVhcmNvbnZlcnQgXAorCSAgJyQoRElSKScvdXNyL2xpYi9kcm9wYmVhci9kcm9wYmVhcmNvbnZlcnQKKwkkKFNUUklQKSAtUiAuY29tbWVudCAtUiAubm90ZSAnJChESVIpJy91c3Ivc2Jpbi8qIFwKKwkgICckKERJUiknL3Vzci9iaW4vKiAnJChESVIpJy91c3IvbGliL2Ryb3BiZWFyLyoKKwkjIGluaXQgYW5kIHJ1biBzY3JpcHRzCisJaW5zdGFsbCAtZCAtbTA3NTUgJyQoRElSKScvZXRjL2luaXQuZAorCWluc3RhbGwgLW0wNzU1IGRlYmlhbi9kcm9wYmVhci5pbml0ICckKERJUiknL2V0Yy9pbml0LmQvZHJvcGJlYXIKKwlpbnN0YWxsIC1tMDc1NSBkZWJpYW4vc2VydmljZS9ydW4gJyQoRElSKScvZXRjL2Ryb3BiZWFyL3J1bgorCWluc3RhbGwgLWQgLW0wNzU1ICckKERJUiknL2V0Yy9kcm9wYmVhci9sb2cKKwlpbnN0YWxsIC1tMDc1NSBkZWJpYW4vc2VydmljZS9sb2cgJyQoRElSKScvZXRjL2Ryb3BiZWFyL2xvZy9ydW4KKwlsbiAtcyAvdmFyL2xvZy9kcm9wYmVhciAnJChESVIpJy9ldGMvZHJvcGJlYXIvbG9nL21haW4KKwlsbiAtcyAvdmFyL3J1bi9kcm9wYmVhciAnJChESVIpJy9ldGMvZHJvcGJlYXIvc3VwZXJ2aXNlCisJbG4gLXMgL3Zhci9ydW4vZHJvcGJlYXIubG9nICckKERJUiknL2V0Yy9kcm9wYmVhci9sb2cvc3VwZXJ2aXNlCisJIyBtYW4gcGFnZXMKKwlpbnN0YWxsIC1kIC1tMDc1NSAnJChESVIpJy91c3Ivc2hhcmUvbWFuL21hbjgKKwlmb3IgaSBpbiBkcm9wYmVhci44IGRyb3BiZWFya2V5Ljg7IGRvIFwKKwkgIGluc3RhbGwgLW02NDQgJCRpICckKERJUiknL3Vzci9zaGFyZS9tYW4vbWFuOC8gfHwgZXhpdCAxOyBcCisJZG9uZQorCWd6aXAgLTkgJyQoRElSKScvdXNyL3NoYXJlL21hbi9tYW44LyouOAorCWluc3RhbGwgLWQgLW0wNzU1ICckKERJUiknL3Vzci9zaGFyZS9tYW4vbWFuMQorCWluc3RhbGwgLW02NDQgZGJjbGllbnQuMSAnJChESVIpJy91c3Ivc2hhcmUvbWFuL21hbjEvCisJZ3ppcCAtOSAnJChESVIpJy91c3Ivc2hhcmUvbWFuL21hbjEvKi4xCisJIyBjb3B5cmlnaHQsIGNoYW5nZWxvZworCWNhdCBkZWJpYW4vY29weXJpZ2h0LmluIExJQ0VOU0UgPmRlYmlhbi9jb3B5cmlnaHQKKwl0ZXN0IC1yIGNoYW5nZWxvZyB8fCBsbiAtcyBDSEFOR0VTIGNoYW5nZWxvZworCitiaW5hcnktaW5kZXA6CisKK2JpbmFyeS1hcmNoOiBpbnN0YWxsIGRyb3BiZWFyLmRlYgorCXRlc3QgJyQoQ0MpJyAhPSAnZ2NjJyB8fCBcCisJICBkcGtnLXNobGliZGVwcyAnJChESVIpJy91c3Ivc2Jpbi8qICckKERJUiknL3Vzci9iaW4vKiBcCisJICAgICckKERJUiknL3Vzci9saWIvZHJvcGJlYXIvKgorCWRwa2ctZ2VuY29udHJvbCAtaXNwIC1wZHJvcGJlYXIgLVAnJChESVIpJworCWRwa2cgLWIgJyQoRElSKScgLi4KKworYmluYXJ5OiBiaW5hcnktYXJjaCBiaW5hcnktaW5kZXAKKworLlBIT05ZOiBwYXRjaCBidWlsZCBjbGVhbiBpbnN0YWxsIGJpbmFyeS1pbmRlcCBiaW5hcnktYXJjaCBiaW5hcnkKKworaW5jbHVkZSBkZWJpYW4vaW1wbGljaXQKZGlmZiAtLWdpdCBhL2RlYmlhbi9zZXJ2aWNlL2xvZyBiL2RlYmlhbi9zZXJ2aWNlL2xvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmZiMTNkCi0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL3NlcnZpY2UvbG9nCkBAIC0wLDAgKzEsMiBAQAorIyEvYmluL3NoCitleGVjIGNocHN0IC11ZHJvcGJlYXJsb2cgc3Zsb2dkIC10dCAuL21haW4KZGlmZiAtLWdpdCBhL2RlYmlhbi9zZXJ2aWNlL3J1biBiL2RlYmlhbi9zZXJ2aWNlL3J1bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjA4MDg1Ci0tLSAvZGV2L251bGwKKysrIGIvZGViaWFuL3NlcnZpY2UvcnVuCkBAIC0wLDAgKzEsMyBAQAorIyEvYmluL3NoCitleGVjIDI+JjEKK2V4ZWMgZHJvcGJlYXIgLWQgLi9kcm9wYmVhcl9kc3NfaG9zdF9rZXkgLXIgLi9kcm9wYmVhcl9yc2FfaG9zdF9rZXkgLUYgLUUgLXAgMjIKZGlmZiAtLWdpdCBhL2RlYnVnLmggYi9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NWYzZmMKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJ1Zy5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpZm5kZWYgX0RFQlVHX0hfCisjZGVmaW5lIF9ERUJVR19IXworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKworLyogRGVidWdnaW5nICovCisKKy8qIFdvcmsgd2VsbCBmb3IgdmFsZ3JpbmQgLSBkb24ndCBjbGVhciBlbnZpcm9ubWVudCwgYmUgbmljZXIgd2l0aCBzaWduYWxzCisgKiBldGMuIERvbid0IHVzZSB0aGlzIG5vcm1hbGx5LCBpdCBtaWdodCBjYXVzZSBwcm9ibGVtcyAqLworLyogI2RlZmluZSBERUJVR19WQUxHUklORCAqLworCisvKiBEZWZpbmUgdGhpcyB0byBjb21waWxlIGluIHRyYWNlIGRlYnVnZ2luZyBwcmludGYoKXMuIAorICogWW91J2xsIG5lZWQgdG8gcnVuIHByb2dyYW1zIHdpdGggIi12IiB0byB0dXJuIHRoaXMgb24uCisgKgorICogQ2F1dGlvbjogRG9uJ3QgdXNlIHRoaXMgaW4gYW4gdW5mcmllbmRseSBlbnZpcm9ubWVudCAoaWUgdW5maXJld2FsbGVkKSwKKyAqIHNpbmNlIHRoZSBwcmludGluZyBtYXkgbm90IHNhbml0aXNlIHN0cmluZ3MgZXRjLiBUaGlzIHdpbGwgYWRkIGEgcmVhc29uYWJsZQorICogYW1vdW50IHRvIHlvdXIgZXhlY3V0YWJsZSBzaXplLiAqLworLyojZGVmaW5lIERFQlVHX1RSQUNFKi8KKworLyogQWxsIGZ1bmN0aW9ucyB3cml0aW5nIHRvIHRoZSBjbGVhcnRleHQgcGF5bG9hZCBidWZmZXIgY2FsbAorICogQ0hFQ0tDTEVBUlRPV1JJVEUoKSBiZWZvcmUgd3JpdGluZy4gVGhpcyBpcyBvbmx5IHJlYWxseSB1c2VmdWwgaWYgeW91J3JlCisgKiBhdHRlbXB0aW5nIHRvIHRyYWNrIGRvd24gYSBwcm9ibGVtICovCisvKiNkZWZpbmUgQ0hFQ0tDTEVBUlRPV1JJVEUoKSBhc3NlcnQoc2VzLndyaXRlcGF5bG9hZC0+bGVuID09IDAgJiYgXAorCQlzZXMud3JpdGVwYXlsb2FkLT5wb3MgPT0gMCkqLworCisjZGVmaW5lIENIRUNLQ0xFQVJUT1dSSVRFKCkKKworLyogRGVmaW5lIHRoaXMsIGNvbXBpbGUgd2l0aCAtcGcgYW5kIHNldCBHTU9OX09VVF9QUkVGSVg9Z21vbiB0byBnZXQgZ21vbgorICogb3V0cHV0IHdoZW4gRHJvcGJlYXIgZm9ya3MuIFRoaXMgd2lsbCBhbGxvdyBpdCBncHJvZiB0byBiZSB1c2VkLgorICogSXQncyB1c2VmdWwgdG8gcnVuIGRyb3BiZWFyIC1GLCBzbyB5b3UgZG9uJ3QgZm9yayBhcyBtdWNoICovCisvKiAoVGhpcyBpcyBMaW51eCBzcGVjaWZpYykgKi8KKy8qI2RlZmluZSBERUJVR19GT1JLR1BST0YqLworCisvKiBBIGNvdXBsZSBvZiBmbGFncywgbm90IHVzdWFsbHkgdXNlZnVsLCBhbmQgbWlnaHRuJ3QgZG8gYW55dGhpbmcgKi8KKworLyojZGVmaW5lIERFQlVHX0tFWEhBU0gqLworLyojZGVmaW5lIERFQlVHX1JTQSovCisKKy8qIHlvdSBkb24ndCBuZWVkIHRvIHRvdWNoIHRoaXMgYmxvY2sgKi8KKyNpZmRlZiBERUJVR19UUkFDRQorI2RlZmluZSBUUkFDRShYKSBkcm9wYmVhcl90cmFjZSBYOworI2Vsc2UgLypERUJVR19UUkFDRSovCisjZGVmaW5lIFRSQUNFKFgpCisjZW5kaWYgLypERUJVR19UUkFDRSovCisKKy8qIEZvciB0ZXN0aW5nIGFzIG5vbi1yb290IG9uIHNoYWRvd2VkIHN5c3RlbXMsIGluY2x1ZGUgdGhlIGNyeXB0IG9mIGEgcGFzc3dvcmQKKyAqIGhlcmUuIFlvdSBjYW4gdGhlbiBsb2cgaW4gYXMgYW55IHVzZXIgd2l0aCB0aGlzIHBhc3N3b3JkLiBFbnN1cmUgdGhhdCB5b3UKKyAqIG1ha2UgeW91ciBvd24gcGFzc3dvcmQsIGFuZCBhcmUgY2FyZWZ1bCBhYm91dCB1c2luZyB0aGlzLiBUaGlzIHdpbGwgYWxzbworICogZGlzYWJsZSBzb21lIG9mIHRoZSBjaG93biBwdHkgY29kZSBldGMqLworLyogI2RlZmluZSBERUJVR19IQUNLQ1JZUFQgImhMOG5yRkR0MGFKM0UiICovIC8qIHRoaXMgaXMgY3J5cHQoInBhc3N3b3JkIikgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcm9wYmVhci44IGIvZHJvcGJlYXIuOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjBjYWYzCi0tLSAvZGV2L251bGwKKysrIGIvZHJvcGJlYXIuOApAQCAtMCwwICsxLDkyIEBACisuVEggZHJvcGJlYXIgOAorLlNIIE5BTUUKK2Ryb3BiZWFyIFwtIGxpZ2h0d2VpZ2h0IFNTSDIgc2VydmVyCisuU0ggU1lOT1BTSVMKKy5CIGRyb3BiZWFyCitbXC1GRW13c2dqa2ldIFtcLWIKKy5JIGJhbm5lclxmUl0gW1wtZAorLkkgZHNza2V5XGZSXSBbXC1yCisuSSByc2FrZXlcZlJdIFtcLXAKKy5JUiBwb3J0IF0KKy5TSCBERVNDUklQVElPTgorLkIgZHJvcGJlYXIKK2lzIGEgU1NIIDIgc2VydmVyIGRlc2lnbmVkIHRvIGJlIHNtYWxsIGVub3VnaCB0byBiZSB1c2VkIGluIHNtYWxsIG1lbW9yeQorZW52aXJvbm1lbnRzLCB3aGlsZSBzdGlsbCBiZWluZyBmdW5jdGlvbmFsIGFuZCBzZWN1cmUgZW5vdWdoIGZvciBnZW5lcmFsIHVzZS4KKy5TSCBPUFRJT05TCisuVFAKKy5CIFwtYiBcZkliYW5uZXIKK2Jhbm5lcmZpbGUuCitEaXNwbGF5IHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZQorLkkgYmFubmVyCitiZWZvcmUgdXNlciBsb2dpbiAoZGVmYXVsdDogbm9uZSkuCisuVFAKKy5CIFwtZCBcZklkc3NrZXkKK2Rzc2tleWZpbGUuCitVc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlCisuSSBkc3NrZXkKK2ZvciB0aGUgZHNzIGhvc3Qga2V5IChkZWZhdWx0OiAvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX2Rzc19ob3N0X2tleSkuCitUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIHdpdGgKKy5CUiBkcm9wYmVhcmtleSAoOCkuCisuVFAKKy5CIFwtciBcZklyc2FrZXkKK3JzYWtleWZpbGUuCitVc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlCisuSSByc2FrZXkKK2ZvciB0aGUgcnNhIGhvc3Qga2V5IChkZWZhdWx0OiAvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX3JzYV9ob3N0X2tleSkuCitUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIHdpdGgKKy5CUiBkcm9wYmVhcmtleSAoOCkuCisuVFAKKy5CIFwtRgorRG9uJ3QgZm9yayBpbnRvIGJhY2tncm91bmQuCisuVFAKKy5CIFwtRQorTG9nIHRvIHN0YW5kYXJkIGVycm9yIHJhdGhlciB0aGFuIHN5c2xvZy4KKy5UUAorLkIgXC1tCitEb24ndCBkaXNwbGF5IHRoZSBtZXNzYWdlIG9mIHRoZSBkYXkgb24gbG9naW4uCisuVFAKKy5CIFwtdworRGlzYWxsb3cgcm9vdCBsb2dpbnMuCisuVFAKKy5CIFwtcworRGlzYWJsZSBwYXNzd29yZCBsb2dpbnMuCisuVFAKKy5CIFwtZworRGlzYWJsZSBwYXNzd29yZCBsb2dpbnMgZm9yIHJvb3QuCisuVFAKKy5CIFwtagorRGlzYWJsZSBsb2NhbCBwb3J0IGZvcndhcmRpbmcuCisuVFAKKy5CIFwtaworRGlzYWJsZSByZW1vdGUgcG9ydCBmb3J3YXJkaW5nLgorLlRQCisuQiBcLXAgXGZJW2FkZHJlc3M6XXBvcnQKK0xpc3RlbiBvbiBzcGVjaWZpZWQgCisuSSBhZGRyZXNzCithbmQgVENQCisuSSBwb3J0LgorSWYganVzdCBhIHBvcnQgaXMgZ2l2ZW4gbGlzdGVuCitvbiBhbGwgYWRkcmVzc2VzLgordXAgdG8gMTAgY2FuIGJlIHNwZWNpZmllZCAoZGVmYXVsdCAyMiBpZiBub25lIHNwZWNpZmllZCkuCisuVFAKKy5CIFwtaQorU2VydmljZSBwcm9ncmFtIG1vZGUuCitVc2UgdGhpcyBvcHRpb24gdG8gcnVuCisuQiBkcm9wYmVhcgordW5kZXIgVENQL0lQIHNlcnZlcnMgbGlrZSBpbmV0ZCwgdGNwc3ZkLCBvciB0Y3BzZXJ2ZXIuCitJbiBwcm9ncmFtIG1vZGUgdGhlIFwtRiBvcHRpb24gaXMgaW1wbGllZCwgYW5kIFwtcCBvcHRpb25zIGFyZSBpZ25vcmVkLgorLlRQCisuQiBcLVAgXGZJcGlkZmlsZQorU3BlY2lmeSBhIHBpZGZpbGUgdG8gY3JlYXRlIHdoZW4gcnVubmluZyBhcyBhIGRhZW1vbi4gSWYgbm90IHNwZWNpZmllZCwgdGhlIAorZGVmYXVsdCBpcyAvdmFyL3J1bi9kcm9wYmVhci5waWQKKy5UUAorLkIgXC1hCitBbGxvdyByZW1vdGUgaG9zdHMgdG8gY29ubmVjdCB0byBmb3J3YXJkZWQgcG9ydHMuCisuU0ggQVVUSE9SCitNYXR0IEpvaG5zdG9uIChtYXR0QHVjYy5hc24uYXUpLgorLmJyCitHZXJyaXQgUGFwZSAocGFwZUBzbWFyZGVuLm9yZykgd3JvdGUgdGhpcyBtYW51YWwgcGFnZS4KKy5TSCBTRUUgQUxTTworZHJvcGJlYXJrZXkoOCksIGRiY2xpZW50KDEpCisuUAoraHR0cDovL21hdHQudWNjLmFzbi5hdS9kcm9wYmVhci9kcm9wYmVhci5odG1sCmRpZmYgLS1naXQgYS9kcm9wYmVhcmNvbnZlcnQuYyBiL2Ryb3BiZWFyY29udmVydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllMTZmZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcm9wYmVhcmNvbnZlcnQuYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworLyogVGhpcyBwcm9ncmFtIGNvbnZlcnRzIHRvL2Zyb20gRHJvcGJlYXIgYW5kIE9wZW5TU0ggcHJpdmF0ZS1rZXkgZm9ybWF0cyAqLworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAic2lnbmtleS5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgImtleWltcG9ydC5oIgorCisKK3N0YXRpYyBpbnQgZG9fY29udmVydChpbnQgaW50eXBlLCBjb25zdCBjaGFyKiBpbmZpbGUsIGludCBvdXR0eXBlLAorCQljb25zdCBjaGFyKiBvdXRmaWxlKTsKKworc3RhdGljIHZvaWQgcHJpbnRoZWxwKGNoYXIgKiBwcm9nbmFtZSk7CisKK3N0YXRpYyB2b2lkIHByaW50aGVscChjaGFyICogcHJvZ25hbWUpIHsKKworCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6ICVzIDxpbnB1dHR5cGU+IDxvdXRwdXR0eXBlPiA8aW5wdXRmaWxlPiA8b3V0cHV0ZmlsZT5cblxuIgorCQkJCQkiQ0FVVElPTjogVGhpcyBwcm9ncmFtIGlzIGZvciBjb252ZW5pZW5jZSBvbmx5LCBhbmQgaXMgbm90IHNlY3VyZSBpZiB1c2VkIG9uXG4iCisJCQkJCSJ1bnRydXN0ZWQgaW5wdXQgZmlsZXMsIGllIGl0IGNvdWxkIGFsbG93IGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbi5cbiIKKwkJCQkJIkFsbCBwYXJhbWV0ZXJzIG11c3QgYmUgc3BlY2lmaWVkIGluIG9yZGVyLlxuIgorCQkJCQkiXG4iCisJCQkJCSJUaGUgaW5wdXQgYW5kIG91dHB1dCB0eXBlcyBhcmUgb25lIG9mOlxuIgorCQkJCQkib3BlbnNzaFxuIgorCQkJCQkiZHJvcGJlYXJcbiIKKwkJCQkJIlxuIgorCQkJCQkiRXhhbXBsZTpcbiIKKwkJCQkJImRyb3BiZWFyY29udmVydCBvcGVuc3NoIGRyb3BiZWFyIC9ldGMvc3NoL3NzaF9ob3N0X3JzYV9rZXkgL2V0Yy9kcm9wYmVhcl9yc2FfaG9zdF9rZXlcbiIsCisJCQkJCXByb2duYW1lKTsKK30KKworI2lmIGRlZmluZWQoREJNVUxUSV9kcm9wYmVhcmNvbnZlcnQpIHx8ICFkZWZpbmVkKERST1BCRUFSX01VTFRJKQorI2lmIGRlZmluZWQoREJNVUxUSV9kcm9wYmVhcmNvbnZlcnQpICYmIGRlZmluZWQoRFJPUEJFQVJfTVVMVEkpCitpbnQgZHJvcGJlYXJjb252ZXJ0X21haW4oaW50IGFyZ2MsIGNoYXIgKiogYXJndikgeworI2Vsc2UgCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKiBhcmd2KSB7CisjZW5kaWYKKworCWludCBpbnR5cGUsIG91dHR5cGU7CisJY29uc3QgY2hhciogaW5maWxlOworCWNvbnN0IGNoYXIqIG91dGZpbGU7CisKKyNpZmRlZiBERUJVR19UUkFDRQorCS8qIEl0J3MgaGFyZCBmb3IgaXQgdG8gZ2V0IGluIHRoZSB3YXkgX3Rvb18gbXVjaCAqLworCWRlYnVnX3RyYWNlID0gMTsKKyNlbmRpZgorCisJLyogZ2V0IHRoZSBjb21tYW5kbGluZSBvcHRpb25zICovCisJaWYgKGFyZ2MgIT0gNSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkFsbCBhcmd1bWVudHMgbXVzdCBiZSBzcGVjaWZpZWRcbiIpOworCQlnb3RvIHVzYWdlOworCX0KKworCS8qIGlucHV0IHR5cGUgKi8KKwlpZiAoYXJndlsxXVswXSA9PSAnZCcpIHsKKwkJaW50eXBlID0gS0VZRklMRV9EUk9QQkVBUjsKKwl9IGVsc2UgaWYgKGFyZ3ZbMV1bMF0gPT0gJ28nKSB7CisJCWludHlwZSA9IEtFWUZJTEVfT1BFTlNTSDsKKwl9IGVsc2UgeworCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgaW5wdXQga2V5IHR5cGVcbiIpOworCQlnb3RvIHVzYWdlOworCX0KKworCS8qIG91dHB1dCB0eXBlICovCisJaWYgKGFyZ3ZbMl1bMF0gPT0gJ2QnKSB7CisJCW91dHR5cGUgPSBLRVlGSUxFX0RST1BCRUFSOworCX0gZWxzZSBpZiAoYXJndlsyXVswXSA9PSAnbycpIHsKKwkJb3V0dHlwZSA9IEtFWUZJTEVfT1BFTlNTSDsKKwl9IGVsc2UgeworCQlmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgb3V0cHV0IGtleSB0eXBlXG4iKTsKKwkJZ290byB1c2FnZTsKKwl9CisKKwkvKiB3ZSBkb24ndCB3YW50IG91dHB1dCByZWFkYWJsZSBieSBvdGhlcnMgKi8KKwl1bWFzaygwNzcpOworCisJaW5maWxlID0gYXJndlszXTsKKwlvdXRmaWxlID0gYXJndls0XTsKKworCXJldHVybiBkb19jb252ZXJ0KGludHlwZSwgaW5maWxlLCBvdXR0eXBlLCBvdXRmaWxlKTsKKwordXNhZ2U6CisJcHJpbnRoZWxwKGFyZ3ZbMF0pOworCXJldHVybiAxOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgZG9fY29udmVydChpbnQgaW50eXBlLCBjb25zdCBjaGFyKiBpbmZpbGUsIGludCBvdXR0eXBlLAorCQljb25zdCBjaGFyKiBvdXRmaWxlKSB7CisKKwlzaWduX2tleSAqIGtleSA9IE5VTEw7CisJY2hhciAqIGtleXR5cGUgPSBOVUxMOworCWludCByZXQgPSAxOworCisJa2V5ID0gaW1wb3J0X3JlYWQoaW5maWxlLCBOVUxMLCBpbnR5cGUpOworCWlmICgha2V5KSB7CisJCWZwcmludGYoc3RkZXJyLCAiRXJyb3IgcmVhZGluZyBrZXkgZnJvbSAnJXMnXG4iLAorCQkJCWluZmlsZSk7CisJCWdvdG8gb3V0OworCX0KKworI2lmZGVmIERST1BCRUFSX1JTQQorCWlmIChrZXktPnJzYWtleSAhPSBOVUxMKSB7CisJCWtleXR5cGUgPSAiUlNBIjsKKwl9CisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl9EU1MKKwlpZiAoa2V5LT5kc3NrZXkgIT0gTlVMTCkgeworCQlrZXl0eXBlID0gIkRTUyI7CisJfQorI2VuZGlmCisKKwlmcHJpbnRmKHN0ZGVyciwgIktleSBpcyBhICVzIGtleVxuIiwga2V5dHlwZSk7CisKKwlpZiAoaW1wb3J0X3dyaXRlKG91dGZpbGUsIGtleSwgTlVMTCwgb3V0dHlwZSkgIT0gMSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIHdyaXRpbmcga2V5IHRvICclcydcbiIsIG91dGZpbGUpOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAiV3JvdGUga2V5IHRvICclcydcbiIsIG91dGZpbGUpOworCQlyZXQgPSAwOworCX0KKworb3V0OgorCWlmIChrZXkpIHsKKwkJc2lnbl9rZXlfZnJlZShrZXkpOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJvcGJlYXJrZXkuOCBiL2Ryb3BiZWFya2V5LjgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA5M2Q4NQotLS0gL2Rldi9udWxsCisrKyBiL2Ryb3BiZWFya2V5LjgKQEAgLTAsMCArMSw0NyBAQAorLlRIIGRyb3BiZWFya2V5IDgKKy5TSCBOQU1FCitkcm9wYmVhcmtleSBcLSBjcmVhdGUgcHJpdmF0ZSBrZXlzIGZvciB0aGUgdXNlIHdpdGggZHJvcGJlYXIoOCkKKy5TSCBTWU5PUFNJUworLkIgZHJvcGJlYXJrZXkKK1wtdAorLkkgdHlwZQorXC1mCisuSSBmaWxlCitbXC1zCisuSVIgYml0cyBdCisuU0ggREVTQ1JJUFRJT04KKy5CIGRyb3BiZWFya2V5CitnZW5lcmF0ZXMgYSB0eXBlCisuSSByc2EKK29yCisuSSBkc3MKK1NTSCBwcml2YXRlIGtleSwgYW5kIHNhdmVzIGl0IHRvIGEgZmlsZSBmb3IgdGhlIHVzZSB3aXRoIHRoZQorLkJSIGRyb3BiZWFyICg4KQorU1NIIDIgc2VydmVyLgorLlNIIE9QVElPTlMKKy5UUAorLkIgXC10IFxmSXR5cGUKK1R5cGUgb2Yga2V5IHRvIGdlbmVyYXRlLgorTXVzdCBiZSBvbmUgb2YKKy5JIHJzYQorb3IKKy5JUiBkc3MgLgorLlRQCisuQiBcLWYgXGZJZmlsZQorV3JpdGUgdGhlIHNlY3JldCBrZXkgdG8gdGhlIGZpbGUKKy5JUiBmaWxlIC4KKy5UUAorLkIgXC1zIFxmSWJpdHMKK1NldCB0aGUga2V5IHNpemUgdG8KKy5JIGJpdHMKK2JpdHMsIHNob3VsZCBiZSBtdWx0aXBsZSBvZiA4IChvcHRpb25hbCkuCisuU0ggRVhBTVBMRQorICMgZHJvcGJlYXJrZXkgLXQgcnNhIC1mIC9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfcnNhX2hvc3Rfa2V5CisuU0ggQVVUSE9SCitNYXR0IEpvaG5zdG9uIChtYXR0QHVjYy5hc24uYXUpLgorLmJyCitHZXJyaXQgUGFwZSAocGFwZUBzbWFyZGVuLm9yZykgd3JvdGUgdGhpcyBtYW51YWwgcGFnZS4KKy5TSCBTRUUgQUxTTworZHJvcGJlYXIoOCksIGRiY2xpZW50KDEpCisuUAoraHR0cDovL21hdHQudWNjLmFzbi5hdS9kcm9wYmVhci9kcm9wYmVhci5odG1sCmRpZmYgLS1naXQgYS9kcm9wYmVhcmtleS5jIGIvZHJvcGJlYXJrZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDMzMzgxCi0tLSAvZGV2L251bGwKKysrIGIvZHJvcGJlYXJrZXkuYwpAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworLyogVGhlIGZvcm1hdCBvZiB0aGUga2V5ZmlsZXMgaXMgYmFzaWNhbGx5IGEgcmF3IGR1bXAgb2YgdGhlIGJ1ZmZlci4gRGF0YSB0eXBlcworICogYXJlIHNwZWNpZmllZCBpbiB0aGUgdHJhbnNwb3J0IGRyYWZ0IC0gc3RyaW5nIGlzIGEgMzItYml0IGxlbiB0aGVuIHRoZQorICogbm9uLW51bGwtdGVybWluYXRlZCBzdHJpbmcsIG1wX2ludCBpcyBhIDMyLWJpdCBsZW4gdGhlbiB0aGUgYmlnbnVtIGRhdGEuCisgKiBUaGUgYWN0dWFsIGZ1bmN0aW9ucyBhcmUgYnVmX3B1dF9yc2FfcHJpdl9rZXkoKSBhbmQgYnVmX3B1dF9kc3NfcHJpdl9rZXkoKQorCisgKiBSU0E6CisgKiBzdHJpbmcJInNzaC1yc2EiCisgKiBtcF9pbnQJZQorICogbXBfaW50CW4KKyAqIG1wX2ludAlkCisgKiBtcF9pbnQJcCAobmV3ZXIgdmVyc2lvbnMgb25seSkKKyAqIG1wX2ludAlxIChuZXdlciB2ZXJzaW9ucyBvbmx5KSAKKyAqCisgKiBEU1M6CisgKiBzdHJpbmcJInNzaC1kc3MiCisgKiBtcF9pbnQJcAorICogbXBfaW50CXEKKyAqIG1wX2ludAlnCisgKiBtcF9pbnQJeQorICogbXBfaW50CXgKKyAqCisgKi8KKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgInNpZ25rZXkuaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKworI2luY2x1ZGUgImdlbnJzYS5oIgorI2luY2x1ZGUgImdlbmRzcy5oIgorCitzdGF0aWMgdm9pZCBwcmludGhlbHAoY2hhciAqIHByb2duYW1lKTsKKworI2RlZmluZSBSU0FfU0laRSAoMTAyNC84KSAvKiAxMDI0IGJpdCAqLworI2RlZmluZSBEU1NfU0laRSAoMTAyNC84KSAvKiAxMDI0IGJpdCAqLworCitzdGF0aWMgdm9pZCBidWZfd3JpdGVmaWxlKGJ1ZmZlciAqIGJ1ZiwgY29uc3QgY2hhciAqIGZpbGVuYW1lKTsKK3N0YXRpYyB2b2lkIHByaW50cHVia2V5KHNpZ25fa2V5ICoga2V5LCBpbnQga2V5dHlwZSk7CitzdGF0aWMgdm9pZCBqdXN0cHJpbnRwdWIoY29uc3QgY2hhciogZmlsZW5hbWUpOworCisvKiBQcmludCBhIGhlbHAgbWVzc2FnZSAqLworc3RhdGljIHZvaWQgcHJpbnRoZWxwKGNoYXIgKiBwcm9nbmFtZSkgeworCisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogJXMgLXQgPHR5cGU+IC1mIDxmaWxlbmFtZT4gWy1zIGJpdHNdXG4iCisJCQkJCSJPcHRpb25zIGFyZTpcbiIKKwkJCQkJIi10IHR5cGUJVHlwZSBvZiBrZXkgdG8gZ2VuZXJhdGUuIE9uZSBvZjpcbiIKKyNpZmRlZiBEUk9QQkVBUl9SU0EKKwkJCQkJIgkJcnNhXG4iCisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl9EU1MKKwkJCQkJIgkJZHNzXG4iCisjZW5kaWYKKwkJCQkJIi1mIGZpbGVuYW1lCVVzZSBmaWxlbmFtZSBmb3IgdGhlIHNlY3JldCBrZXlcbiIKKwkJCQkJIi1zIGJpdHMJS2V5IHNpemUgaW4gYml0cywgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgOCAob3B0aW9uYWwpXG4iCisJCQkJCSIteQkJSnVzdCBwcmludCB0aGUgcHVibGlja2V5IGFuZCBmaW5nZXJwcmludCBmb3IgdGhlXG4JCXByaXZhdGUga2V5IGluIDxmaWxlbmFtZT4uXG4iCisjaWZkZWYgREVCVUdfVFJBQ0UKKwkJCQkJIi12CQl2ZXJib3NlXG4iCisjZW5kaWYKKwkJCQkJLHByb2duYW1lKTsKK30KKworI2lmIGRlZmluZWQoREJNVUxUSV9kcm9wYmVhcmtleSkgfHwgIWRlZmluZWQoRFJPUEJFQVJfTVVMVEkpCisjaWYgZGVmaW5lZChEQk1VTFRJX2Ryb3BiZWFya2V5KSAmJiBkZWZpbmVkKERST1BCRUFSX01VTFRJKQoraW50IGRyb3BiZWFya2V5X21haW4oaW50IGFyZ2MsIGNoYXIgKiogYXJndikgeworI2Vsc2UKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpIHsKKyNlbmRpZgorCisJaW50IGk7CisJY2hhciAqKiBuZXh0ID0gMDsKKwlzaWduX2tleSAqa2V5ID0gTlVMTDsKKwlidWZmZXIgKmJ1ZiA9IE5VTEw7CisJY2hhciAqIGZpbGVuYW1lID0gTlVMTDsKKwlpbnQga2V5dHlwZSA9IC0xOworCWNoYXIgKiB0eXBldGV4dCA9IE5VTEw7CisJY2hhciAqIHNpemV0ZXh0ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgYml0czsKKwl1bnNpZ25lZCBpbnQga2V5c2l6ZTsKKwlpbnQgcHJpbnRwdWIgPSAwOworCisJLyogZ2V0IHRoZSBjb21tYW5kbGluZSBvcHRpb25zICovCisJZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykgeworCQlpZiAoYXJndltpXSA9PSBOVUxMKSB7CisJCQljb250aW51ZTsgLyogV2hhY2sgKi8KKwkJfSAKKwkJaWYgKG5leHQpIHsKKwkJCSpuZXh0ID0gYXJndltpXTsKKwkJCW5leHQgPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoYXJndltpXVswXSA9PSAnLScpIHsKKwkJCXN3aXRjaCAoYXJndltpXVsxXSkgeworCQkJCWNhc2UgJ2YnOgorCQkJCQluZXh0ID0gJmZpbGVuYW1lOworCQkJCQlicmVhazsKKwkJCQljYXNlICd0JzoKKwkJCQkJbmV4dCA9ICZ0eXBldGV4dDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAncyc6CisJCQkJCW5leHQgPSAmc2l6ZXRleHQ7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ3knOgorCQkJCQlwcmludHB1YiA9IDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ2gnOgorCQkJCQlwcmludGhlbHAoYXJndlswXSk7CisJCQkJCWV4aXQoRVhJVF9TVUNDRVNTKTsKKwkJCQkJYnJlYWs7CisjaWZkZWYgREVCVUdfVFJBQ0UKKwkJCQljYXNlICd2JzoKKwkJCQkJZGVidWdfdHJhY2UgPSAxOworCQkJCQlicmVhazsKKyNlbmRpZgorCQkJCWRlZmF1bHQ6CisJCQkJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBhcmd1bWVudCAlc1xuIiwgYXJndltpXSk7CisJCQkJCXByaW50aGVscChhcmd2WzBdKTsKKwkJCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmICghZmlsZW5hbWUpIHsKKwkJZnByaW50ZihzdGRlcnIsICJNdXN0IHNwZWNpZnkgYSBrZXkgZmlsZW5hbWVcbiIpOworCQlwcmludGhlbHAoYXJndlswXSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlpZiAocHJpbnRwdWIpIHsKKwkJanVzdHByaW50cHViKGZpbGVuYW1lKTsKKwkJLyogTm90IHJlYWNoZWQgKi8KKwl9CisKKwkvKiBjaGVjay9wYXJzZSBhcmdzICovCisJaWYgKCF0eXBldGV4dCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIk11c3Qgc3BlY2lmeSBrZXkgdHlwZVxuIik7CisJCXByaW50aGVscChhcmd2WzBdKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWlmIChzdHJsZW4odHlwZXRleHQpID09IDMpIHsKKyNpZmRlZiBEUk9QQkVBUl9SU0EKKwkJaWYgKHN0cm5jbXAodHlwZXRleHQsICJyc2EiLCAzKSA9PSAwKSB7CisJCQlrZXl0eXBlID0gRFJPUEJFQVJfU0lHTktFWV9SU0E7CisJCQlUUkFDRSgoInR5cGUgaXMgcnNhIikpCisJCX0KKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX0RTUworCQlpZiAoc3RybmNtcCh0eXBldGV4dCwgImRzcyIsIDMpID09IDApIHsKKwkJCWtleXR5cGUgPSBEUk9QQkVBUl9TSUdOS0VZX0RTUzsKKwkJCVRSQUNFKCgidHlwZSBpcyBkc3MiKSkKKwkJfQorI2VuZGlmCisJfQorCWlmIChrZXl0eXBlID09IC0xKSB7CisJCWZwcmludGYoc3RkZXJyLCAiVW5rbm93biBrZXkgdHlwZSAnJXMnXG4iLCB0eXBldGV4dCk7CisJCXByaW50aGVscChhcmd2WzBdKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKworCWlmIChzaXpldGV4dCkgeworCQlpZiAoc3NjYW5mKHNpemV0ZXh0LCAiJXUiLCAmYml0cykgIT0gMSkgeworCQkJZnByaW50ZihzdGRlcnIsICJCaXRzIG11c3QgYmUgYW4gaW50ZWdlclxuIik7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwkKKwkJaWYgKGJpdHMgPCA1MTIgfHwgYml0cyA+IDQwOTYgfHwgKGJpdHMgJSA4ICE9IDApKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkJpdHMgbXVzdCBzYXRpc2Z5IDUxMiA8PSBiaXRzIDw9IDQwOTYsIGFuZCBiZSBhIgorCQkJCQkiIG11bHRpcGxlIG9mIDhcbiIpOworCQkJZXhpdChFWElUX0ZBSUxVUkUpOworCQl9CisKKwkJa2V5c2l6ZSA9IGJpdHMgLyA4OworCX0gZWxzZSB7CisJCWlmIChrZXl0eXBlID09IERST1BCRUFSX1NJR05LRVlfRFNTKSB7CisJCQlrZXlzaXplID0gRFNTX1NJWkU7CisJCX0gZWxzZSBpZiAoa2V5dHlwZSA9PSBEUk9QQkVBUl9TSUdOS0VZX1JTQSkgeworCQkJa2V5c2l6ZSA9IFJTQV9TSVpFOworCQl9IGVsc2UgeworCQkJZXhpdChFWElUX0ZBSUxVUkUpOyAvKiBub3QgcmVhY2hlZCAqLworCQl9CisJfQorCisKKwlmcHJpbnRmKHN0ZGVyciwgIldpbGwgb3V0cHV0ICVkIGJpdCAlcyBzZWNyZXQga2V5IHRvICclcydcbiIsIGtleXNpemUqOCwKKwkJCXR5cGV0ZXh0LCBmaWxlbmFtZSk7CisKKwkvKiBkb24ndCB3YW50IHRoZSBmaWxlIHJlYWRhYmxlIGJ5IG90aGVycyAqLworCXVtYXNrKDA3Nyk7CisKKwkvKiBub3cgd2UgY2FuIGdlbmVyYXRlIHRoZSBrZXkgKi8KKwlrZXkgPSBuZXdfc2lnbl9rZXkoKTsKKwkKKwlmcHJpbnRmKHN0ZGVyciwgIkdlbmVyYXRpbmcga2V5LCB0aGlzIG1heSB0YWtlIGEgd2hpbGUuLi5cbiIpOworCXN3aXRjaChrZXl0eXBlKSB7CisjaWZkZWYgRFJPUEJFQVJfUlNBCisJCWNhc2UgRFJPUEJFQVJfU0lHTktFWV9SU0E6CisJCQlrZXktPnJzYWtleSA9IGdlbl9yc2FfcHJpdl9rZXkoa2V5c2l6ZSk7IC8qIDEyOCBieXRlcyA9IDEwMjQgYml0ICovCisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX0RTUworCQljYXNlIERST1BCRUFSX1NJR05LRVlfRFNTOgorCQkJa2V5LT5kc3NrZXkgPSBnZW5fZHNzX3ByaXZfa2V5KGtleXNpemUpOyAvKiAxMjggYnl0ZXMgPSAxMDI0IGJpdCAqLworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCWZwcmludGYoc3RkZXJyLCAiSW50ZXJuYWwgZXJyb3IsIGJhZCBrZXkgdHlwZVxuIik7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCisJYnVmID0gYnVmX25ldyhNQVhfUFJJVktFWV9TSVpFKTsgCisKKwlidWZfcHV0X3ByaXZfa2V5KGJ1Ziwga2V5LCBrZXl0eXBlKTsKKwlidWZfc2V0cG9zKGJ1ZiwgMCk7CisJYnVmX3dyaXRlZmlsZShidWYsIGZpbGVuYW1lKTsKKworCWJ1Zl9idXJuKGJ1Zik7CisJYnVmX2ZyZWUoYnVmKTsKKworCXByaW50cHVia2V5KGtleSwga2V5dHlwZSk7CisKKwlzaWduX2tleV9mcmVlKGtleSk7CisKKwlyZXR1cm4gRVhJVF9TVUNDRVNTOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGp1c3RwcmludHB1Yihjb25zdCBjaGFyKiBmaWxlbmFtZSkgeworCisJYnVmZmVyICpidWYgPSBOVUxMOworCXNpZ25fa2V5ICprZXkgPSBOVUxMOworCWludCBrZXl0eXBlOworCWludCByZXQ7CisJaW50IGVyciA9IERST1BCRUFSX0ZBSUxVUkU7CisKKwlidWYgPSBidWZfbmV3KE1BWF9QUklWS0VZX1NJWkUpOworCXJldCA9IGJ1Zl9yZWFkZmlsZShidWYsIGZpbGVuYW1lKTsKKworCWlmIChyZXQgIT0gRFJPUEJFQVJfU1VDQ0VTUykgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCByZWFkaW5nICclcydcbiIsIGZpbGVuYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJa2V5ID0gbmV3X3NpZ25fa2V5KCk7CisJa2V5dHlwZSA9IERST1BCRUFSX1NJR05LRVlfQU5ZOworCisJYnVmX3NldHBvcyhidWYsIDApOworCXJldCA9IGJ1Zl9nZXRfcHJpdl9rZXkoYnVmLCBrZXksICZrZXl0eXBlKTsKKwlpZiAocmV0ID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJZnByaW50ZihzdGRlcnIsICJCYWQga2V5IGluICclcydcbiIsIGZpbGVuYW1lKTsKKwkJZ290byBvdXQ7CisJfQorCisJcHJpbnRwdWJrZXkoa2V5LCBrZXl0eXBlKTsKKworCWVyciA9IERST1BCRUFSX1NVQ0NFU1M7CisKK291dDoKKwlidWZfYnVybihidWYpOworCWJ1Zl9mcmVlKGJ1Zik7CisJYnVmID0gTlVMTDsKKwlpZiAoa2V5KSB7CisJCXNpZ25fa2V5X2ZyZWUoa2V5KTsKKwkJa2V5ID0gTlVMTDsKKwl9CisJZXhpdChlcnIpOworfQorCitzdGF0aWMgdm9pZCBwcmludHB1YmtleShzaWduX2tleSAqIGtleSwgaW50IGtleXR5cGUpIHsKKworCWJ1ZmZlciAqIGJ1ZiA9IE5VTEw7CisJdW5zaWduZWQgY2hhciBiYXNlNjRrZXlbTUFYX1BVQktFWV9TSVpFKjJdOworCXVuc2lnbmVkIGxvbmcgYmFzZTY0bGVuOworCWludCBlcnI7CisJY29uc3QgY2hhciAqIHR5cGVzdHJpbmcgPSBOVUxMOworCWNoYXIgKmZwID0gTlVMTDsKKwlpbnQgbGVuOworCXN0cnVjdCBwYXNzd2QgKiBwdyA9IE5VTEw7CisJY2hhciAqIHVzZXJuYW1lID0gTlVMTDsKKwljaGFyIGhvc3RuYW1lWzEwMF07CisKKwlidWYgPSBidWZfbmV3KE1BWF9QVUJLRVlfU0laRSk7CisJYnVmX3B1dF9wdWJfa2V5KGJ1Ziwga2V5LCBrZXl0eXBlKTsKKwlidWZfc2V0cG9zKGJ1ZiwgNCk7CisKKwlsZW4gPSBidWYtPmxlbiAtIGJ1Zi0+cG9zOworCisJYmFzZTY0bGVuID0gc2l6ZW9mKGJhc2U2NGtleSk7CisJZXJyID0gYmFzZTY0X2VuY29kZShidWZfZ2V0cHRyKGJ1ZiwgbGVuKSwgbGVuLCBiYXNlNjRrZXksICZiYXNlNjRsZW4pOworCisJaWYgKGVyciAhPSBDUllQVF9PSykgeworCQlmcHJpbnRmKHN0ZGVyciwgImJhc2U2NCBmYWlsZWQiKTsKKwl9CisKKwl0eXBlc3RyaW5nID0gc2lnbmtleV9uYW1lX2Zyb21fdHlwZShrZXl0eXBlLCAmZXJyKTsKKworCWZwID0gc2lnbl9rZXlfZmluZ2VycHJpbnQoYnVmX2dldHB0cihidWYsIGxlbiksIGxlbik7CisKKwkvKiBhIHVzZXJAaG9zdCBjb21tZW50IGlzIGluZm9ybWF0aXZlICovCisJdXNlcm5hbWUgPSAiIjsKKwlwdyA9IGdldHB3dWlkKGdldHVpZCgpKTsKKwlpZiAocHcpIHsKKwkJdXNlcm5hbWUgPSBwdy0+cHdfbmFtZTsKKwl9CisKKwlnZXRob3N0bmFtZShob3N0bmFtZSwgc2l6ZW9mKGhvc3RuYW1lKSk7CisJaG9zdG5hbWVbc2l6ZW9mKGhvc3RuYW1lKS0xXSA9ICdcMCc7CisKKwlwcmludGYoIlB1YmxpYyBrZXkgcG9ydGlvbiBpczpcbiVzICVzICVzQCVzXG5GaW5nZXJwcmludDogJXNcbiIsCisJCQl0eXBlc3RyaW5nLCBiYXNlNjRrZXksIHVzZXJuYW1lLCBob3N0bmFtZSwgZnApOworCisJbV9mcmVlKGZwKTsKKwlidWZfZnJlZShidWYpOworfQorCisvKiBXcml0ZSBhIGJ1ZmZlciB0byBhIGZpbGUgc3BlY2lmaWVkLCBmYWlsaW5nIGlmIHRoZSBmaWxlIGV4aXN0cyAqLworc3RhdGljIHZvaWQgYnVmX3dyaXRlZmlsZShidWZmZXIgKiBidWYsIGNvbnN0IGNoYXIgKiBmaWxlbmFtZSkgeworCisJaW50IGZkOworCWludCBsZW47CisKKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRXUiB8IE9fQ1JFQVQgfCBPX0VYQ0wsIFNfSVJVU1IgfCBTX0lXVVNSKTsKKwlpZiAoZmQgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3QgY3JlYXRlIG5ldyBmaWxlICVzXG4iLCBmaWxlbmFtZSk7CisJCXBlcnJvcigiUmVhc29uIik7CisJCWJ1Zl9idXJuKGJ1Zik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwkvKiB3cml0ZSB0aGUgZmlsZSBub3cgKi8KKwl3aGlsZSAoYnVmLT5wb3MgIT0gYnVmLT5sZW4pIHsKKwkJbGVuID0gd3JpdGUoZmQsIGJ1Zl9nZXRwdHIoYnVmLCBidWYtPmxlbiAtIGJ1Zi0+cG9zKSwKKwkJCQlidWYtPmxlbiAtIGJ1Zi0+cG9zKTsKKwkJaWYgKGVycm5vID09IEVJTlRSKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobGVuIDw9IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHdyaXRpbmcgZmlsZSAnJXMnXG4iLGZpbGVuYW1lKTsKKwkJCXBlcnJvcigiUmVhc29uIik7CisJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCX0KKwkJYnVmX2luY3Jwb3MoYnVmLCBsZW4pOworCX0KKworCWNsb3NlKGZkKTsKK30KZGlmZiAtLWdpdCBhL2Rzcy5jIGIvZHNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNmYmI2MQotLS0gL2Rldi9udWxsCisrKyBiL2Rzcy5jCkBAIC0wLDAgKzEsNDIxIEBACisvKgorICogRHJvcGJlYXIgLSBhIFNTSDIgc2VydmVyCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJkc3MuaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJyYW5kb20uaCIKKworLyogSGFuZGxlIERTUyAoRGlnaXRhbCBTaWduYXR1cmUgU3RhbmRhcmQpLCBha2EgRFNBIChELlMuIEFsZ29yaXRobSksCisgKiBvcGVyYXRpb25zLCBzdWNoIGFzIGtleSByZWFkaW5nLCBzaWduaW5nLCB2ZXJpZmljYXRpb24uIEtleSBnZW5lcmF0aW9uCisgKiBpcyBpbiBnZW5kc3MuYywgc2luY2UgaXQgaXNuJ3QgcmVxdWlyZWQgaW4gdGhlIHNlcnZlciBpdHNlbGYuCisgKgorICogU2VlIEZJUFMxODYgb3IgdGhlIEhhbmRib29rIG9mIEFwcGxpZWQgQ3J5cHRvZ3JhcGh5IGZvciBkZXRhaWxzIG9mIHRoZQorICogYWxnb3JpdGhtICovCisKKyNpZmRlZiBEUk9QQkVBUl9EU1MgCisKKy8qIExvYWQgYSBkc3Mga2V5IGZyb20gYSBidWZmZXIsIGluaXRpYWxpc2luZyB0aGUgdmFsdWVzLgorICogVGhlIGtleSB3aWxsIGhhdmUgdGhlIHNhbWUgZm9ybWF0IGFzIGJ1Zl9wdXRfZHNzX2tleS4KKyAqIFRoZXNlIHNob3VsZCBiZSBmcmVlZCB3aXRoIGRzc19rZXlfZnJlZS4KKyAqIFJldHVybnMgRFJPUEJFQVJfU1VDQ0VTUyBvciBEUk9QQkVBUl9GQUlMVVJFICovCitpbnQgYnVmX2dldF9kc3NfcHViX2tleShidWZmZXIqIGJ1ZiwgZHNzX2tleSAqa2V5KSB7CisKKwlUUkFDRSgoImVudGVyIGJ1Zl9nZXRfZHNzX3B1Yl9rZXkiKSkKKwlkcm9wYmVhcl9hc3NlcnQoa2V5ICE9IE5VTEwpOworCWtleS0+cCA9IG1fbWFsbG9jKHNpemVvZihtcF9pbnQpKTsKKwlrZXktPnEgPSBtX21hbGxvYyhzaXplb2YobXBfaW50KSk7CisJa2V5LT5nID0gbV9tYWxsb2Moc2l6ZW9mKG1wX2ludCkpOworCWtleS0+eSA9IG1fbWFsbG9jKHNpemVvZihtcF9pbnQpKTsKKwltX21wX2luaXRfbXVsdGkoa2V5LT5wLCBrZXktPnEsIGtleS0+Zywga2V5LT55LCBOVUxMKTsKKwlrZXktPnggPSBOVUxMOworCisJYnVmX2luY3Jwb3MoYnVmLCA0K1NTSF9TSUdOS0VZX0RTU19MRU4pOyAvKiBpbnQgKyAic3NoLWRzcyIgKi8KKwlpZiAoYnVmX2dldG1waW50KGJ1Ziwga2V5LT5wKSA9PSBEUk9QQkVBUl9GQUlMVVJFCisJIHx8IGJ1Zl9nZXRtcGludChidWYsIGtleS0+cSkgPT0gRFJPUEJFQVJfRkFJTFVSRQorCSB8fCBidWZfZ2V0bXBpbnQoYnVmLCBrZXktPmcpID09IERST1BCRUFSX0ZBSUxVUkUKKwkgfHwgYnVmX2dldG1waW50KGJ1Ziwga2V5LT55KSA9PSBEUk9QQkVBUl9GQUlMVVJFKSB7CisJCVRSQUNFKCgibGVhdmUgYnVmX2dldF9kc3NfcHViX2tleTogZmFpbGVkIHJlYWRpbmcgbXBpbnRzIikpCisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0KKworCWlmIChtcF9jb3VudF9iaXRzKGtleS0+cCkgPCBNSU5fRFNTX0tFWUxFTikgeworCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJEU1Mga2V5IHRvbyBzaG9ydCIpOworCQlUUkFDRSgoImxlYXZlIGJ1Zl9nZXRfZHNzX3B1Yl9rZXk6IHNob3J0IGtleSIpKQorCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9CisKKwlUUkFDRSgoImxlYXZlIGJ1Zl9nZXRfZHNzX3B1Yl9rZXk6IHN1Y2Nlc3MiKSkKKwlyZXR1cm4gRFJPUEJFQVJfU1VDQ0VTUzsKK30KKworLyogU2FtZSBhcyBidWZfZ2V0X2Rzc19wdWJfa2V5LCBidXQgcmVhZHMgYSBwcml2YXRlICJ4IiBrZXkgYXQgdGhlIGVuZC4KKyAqIExvYWRzIGEgcHJpdmF0ZSBkc3Mga2V5IGZyb20gYSBidWZmZXIKKyAqIFJldHVybnMgRFJPUEJFQVJfU1VDQ0VTUyBvciBEUk9QQkVBUl9GQUlMVVJFICovCitpbnQgYnVmX2dldF9kc3NfcHJpdl9rZXkoYnVmZmVyKiBidWYsIGRzc19rZXkgKmtleSkgeworCisJaW50IHJldCA9IERST1BCRUFSX0ZBSUxVUkU7CisKKwlkcm9wYmVhcl9hc3NlcnQoa2V5ICE9IE5VTEwpOworCisJcmV0ID0gYnVmX2dldF9kc3NfcHViX2tleShidWYsIGtleSk7CisJaWYgKHJldCA9PSBEUk9QQkVBUl9GQUlMVVJFKSB7CisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0KKworCWtleS0+eCA9IG1fbWFsbG9jKHNpemVvZihtcF9pbnQpKTsKKwltX21wX2luaXQoa2V5LT54KTsKKwlyZXQgPSBidWZfZ2V0bXBpbnQoYnVmLCBrZXktPngpOworCWlmIChyZXQgPT0gRFJPUEJFQVJfRkFJTFVSRSkgeworCQltX2ZyZWUoa2V5LT54KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCQorCisvKiBDbGVhciBhbmQgZnJlZSB0aGUgbWVtb3J5IHVzZWQgYnkgYSBwdWJsaWMgb3IgcHJpdmF0ZSBrZXkgKi8KK3ZvaWQgZHNzX2tleV9mcmVlKGRzc19rZXkgKmtleSkgeworCisJVFJBQ0UoKCJlbnRlciBkc2Ffa2V5X2ZyZWUiKSkKKwlpZiAoa2V5ID09IE5VTEwpIHsKKwkJVFJBQ0UoKCJlbnRlciBkc2Ffa2V5X2ZyZWU6IGtleSA9PSBOVUxMIikpCisJCXJldHVybjsKKwl9CisJaWYgKGtleS0+cCkgeworCQltcF9jbGVhcihrZXktPnApOworCQltX2ZyZWUoa2V5LT5wKTsKKwl9CisJaWYgKGtleS0+cSkgeworCQltcF9jbGVhcihrZXktPnEpOworCQltX2ZyZWUoa2V5LT5xKTsKKwl9CisJaWYgKGtleS0+ZykgeworCQltcF9jbGVhcihrZXktPmcpOworCQltX2ZyZWUoa2V5LT5nKTsKKwl9CisJaWYgKGtleS0+eSkgeworCQltcF9jbGVhcihrZXktPnkpOworCQltX2ZyZWUoa2V5LT55KTsKKwl9CisJaWYgKGtleS0+eCkgeworCQltcF9jbGVhcihrZXktPngpOworCQltX2ZyZWUoa2V5LT54KTsKKwl9CisJbV9mcmVlKGtleSk7CisJVFJBQ0UoKCJsZWF2ZSBkc2Ffa2V5X2ZyZWUiKSkKK30KKworLyogcHV0IHRoZSBkc3MgcHVibGljIGtleSBpbnRvIHRoZSBidWZmZXIgaW4gdGhlIHJlcXVpcmVkIGZvcm1hdDoKKyAqCisgKiBzdHJpbmcJInNzaC1kc3MiCisgKiBtcGludAlwCisgKiBtcGludAlxCisgKiBtcGludAlnCisgKiBtcGludAl5CisgKi8KK3ZvaWQgYnVmX3B1dF9kc3NfcHViX2tleShidWZmZXIqIGJ1ZiwgZHNzX2tleSAqa2V5KSB7CisKKwlkcm9wYmVhcl9hc3NlcnQoa2V5ICE9IE5VTEwpOworCWJ1Zl9wdXRzdHJpbmcoYnVmLCBTU0hfU0lHTktFWV9EU1MsIFNTSF9TSUdOS0VZX0RTU19MRU4pOworCWJ1Zl9wdXRtcGludChidWYsIGtleS0+cCk7CisJYnVmX3B1dG1waW50KGJ1Ziwga2V5LT5xKTsKKwlidWZfcHV0bXBpbnQoYnVmLCBrZXktPmcpOworCWJ1Zl9wdXRtcGludChidWYsIGtleS0+eSk7CisKK30KKworLyogU2FtZSBhcyBidWZfcHV0X2Rzc19wdWJfa2V5LCBidXQgd2l0aCB0aGUgcHJpdmF0ZSAieCIga2V5IGFwcGVuZGVkICovCit2b2lkIGJ1Zl9wdXRfZHNzX3ByaXZfa2V5KGJ1ZmZlciogYnVmLCBkc3Nfa2V5ICprZXkpIHsKKworCWRyb3BiZWFyX2Fzc2VydChrZXkgIT0gTlVMTCk7CisJYnVmX3B1dF9kc3NfcHViX2tleShidWYsIGtleSk7CisJYnVmX3B1dG1waW50KGJ1Ziwga2V5LT54KTsKKworfQorCisjaWZkZWYgRFJPUEJFQVJfU0lHTktFWV9WRVJJRlkKKy8qIFZlcmlmeSBhIERTUyBzaWduYXR1cmUgKGluIGJ1ZikgbWFkZSBvbiBkYXRhIGJ5IHRoZSBrZXkgZ2l2ZW4uIAorICogcmV0dXJucyBEUk9QQkVBUl9TVUNDRVNTIG9yIERST1BCRUFSX0ZBSUxVUkUgKi8KK2ludCBidWZfZHNzX3ZlcmlmeShidWZmZXIqIGJ1ZiwgZHNzX2tleSAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLAorCQl1bnNpZ25lZCBpbnQgbGVuKSB7CisKKwl1bnNpZ25lZCBjaGFyIG1zZ2hhc2hbU0hBMV9IQVNIX1NJWkVdOworCWhhc2hfc3RhdGUgaHM7CisJaW50IHJldCA9IERST1BCRUFSX0ZBSUxVUkU7CisJREVGX01QX0lOVCh2YWwxKTsKKwlERUZfTVBfSU5UKHZhbDIpOworCURFRl9NUF9JTlQodmFsMyk7CisJREVGX01QX0lOVCh2YWw0KTsKKwljaGFyICogc3RyaW5nID0gTlVMTDsKKwlpbnQgc3RyaW5nbGVuOworCisJVFJBQ0UoKCJlbnRlciBidWZfZHNzX3ZlcmlmeSIpKQorCWRyb3BiZWFyX2Fzc2VydChrZXkgIT0gTlVMTCk7CisKKwltX21wX2luaXRfbXVsdGkoJnZhbDEsICZ2YWwyLCAmdmFsMywgJnZhbDQsIE5VTEwpOworCisJLyogZ2V0IGJsb2IsIGNoZWNrIGxlbmd0aCAqLworCXN0cmluZyA9IGJ1Zl9nZXRzdHJpbmcoYnVmLCAmc3RyaW5nbGVuKTsKKwlpZiAoc3RyaW5nbGVuICE9IDIqU0hBMV9IQVNIX1NJWkUpIHsKKwkJZ290byBvdXQ7CisJfQorCisJLyogaGFzaCB0aGUgZGF0YSAqLworCXNoYTFfaW5pdCgmaHMpOworCXNoYTFfcHJvY2VzcygmaHMsIGRhdGEsIGxlbik7CisJc2hhMV9kb25lKCZocywgbXNnaGFzaCk7CisKKwkvKiBjcmVhdGUgdGhlIHNpZ25hdHVyZSAtIHMnIGFuZCByJyBhcmUgdGhlIHJlY2VpdmVkIHNpZ25hdHVyZXMgaW4gYnVmICovCisJLyogdyA9IChzJyktMSBtb2QgcSAqLworCS8qIGxldCB2YWwxID0gcycgKi8KKwlieXRlc190b19tcCgmdmFsMSwgJnN0cmluZ1tTSEExX0hBU0hfU0laRV0sIFNIQTFfSEFTSF9TSVpFKTsKKworCWlmIChtcF9jbXAoJnZhbDEsIGtleS0+cSkgIT0gTVBfTFQpIHsKKwkJVFJBQ0UoKCJ2ZXJpZnkgZmFpbGVkLCBzJyA+PSBxIikpCisJCWdvdG8gb3V0OworCX0KKwkvKiBsZXQgdmFsMiA9IHcgPSAocycpXi0xIG1vZCBxKi8KKwlpZiAobXBfaW52bW9kKCZ2YWwxLCBrZXktPnEsICZ2YWwyKSAhPSBNUF9PS0FZKSB7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHUxID0gKChTSEEoTScpdykgbW9kIHEgKi8KKwkvKiBsZXQgdmFsMSA9IFNIQShNJykgPSBtc2doYXNoICovCisJYnl0ZXNfdG9fbXAoJnZhbDEsIG1zZ2hhc2gsIFNIQTFfSEFTSF9TSVpFKTsKKworCS8qIGxldCB2YWwzID0gdTEgPSAoKFNIQShNJyl3KSBtb2QgcSAqLworCWlmIChtcF9tdWxtb2QoJnZhbDEsICZ2YWwyLCBrZXktPnEsICZ2YWwzKSAhPSBNUF9PS0FZKSB7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHUyID0gKChyJyl3KSBtb2QgcSAqLworCS8qIGxldCB2YWwxID0gcicgKi8KKwlieXRlc190b19tcCgmdmFsMSwgJnN0cmluZ1swXSwgU0hBMV9IQVNIX1NJWkUpOworCWlmIChtcF9jbXAoJnZhbDEsIGtleS0+cSkgIT0gTVBfTFQpIHsKKwkJVFJBQ0UoKCJ2ZXJpZnkgZmFpbGVkLCByJyA+PSBxIikpCisJCWdvdG8gb3V0OworCX0KKwkvKiBsZXQgdmFsNCA9IHUyID0gKChyJyl3KSBtb2QgcSAqLworCWlmIChtcF9tdWxtb2QoJnZhbDEsICZ2YWwyLCBrZXktPnEsICZ2YWw0KSAhPSBNUF9PS0FZKSB7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHYgPSAoKChnKV51MSAoeSledTIpIG1vZCBwKSBtb2QgcSAqLworCS8qIHZhbDIgPSBnXnUxIG1vZCBwICovCisJaWYgKG1wX2V4cHRtb2Qoa2V5LT5nLCAmdmFsMywga2V5LT5wLCAmdmFsMikgIT0gTVBfT0tBWSkgeworCQlnb3RvIG91dDsKKwl9CisJLyogdmFsMyA9IHledTIgbW9kIHAgKi8KKwlpZiAobXBfZXhwdG1vZChrZXktPnksICZ2YWw0LCBrZXktPnAsICZ2YWwzKSAhPSBNUF9PS0FZKSB7CisJCWdvdG8gb3V0OworCX0KKwkvKiB2YWw0ID0gKChnKV51MSAoeSledTIpIG1vZCBwICovCisJaWYgKG1wX211bG1vZCgmdmFsMiwgJnZhbDMsIGtleS0+cCwgJnZhbDQpICE9IE1QX09LQVkpIHsKKwkJZ290byBvdXQ7CisJfQorCS8qIHZhbDIgPSB2ID0gKCgoZyledTEgKHkpXnUyKSBtb2QgcCkgbW9kIHEgKi8KKwlpZiAobXBfbW9kKCZ2YWw0LCBrZXktPnEsICZ2YWwyKSAhPSBNUF9PS0FZKSB7CisJCWdvdG8gb3V0OworCX0KKwkKKwkvKiBjaGVjayB3aGV0aGVyIHNpZ25hdHVyZXMgdmVyaWZ5ICovCisJaWYgKG1wX2NtcCgmdmFsMiwgJnZhbDEpID09IE1QX0VRKSB7CisJCS8qIGdvb2Qgc2lnICovCisJCXJldCA9IERST1BCRUFSX1NVQ0NFU1M7CisJfQorCitvdXQ6CisJbXBfY2xlYXJfbXVsdGkoJnZhbDEsICZ2YWwyLCAmdmFsMywgJnZhbDQsIE5VTEwpOworCW1fZnJlZShzdHJpbmcpOworCisJcmV0dXJuIHJldDsKKworfQorI2VuZGlmIC8qIERST1BCRUFSX1NJR05LRVlfVkVSSUZZICovCisKKyNpZmRlZiBEU1NfUFJPVE9LCQorLyogY29udmVydCBhbiB1bnNpZ25lZCBtcCBpbnRvIGFuIGFycmF5IG9mIGJ5dGVzLCBtYWxsb2NlZC4KKyAqIFRoaXMgYXJyYXkgbXVzdCBiZSBmcmVlZCBhZnRlciB1c2UsIGxlbiBjb250YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSwKKyAqIGlmIGxlbiAhPSBOVUxMICovCitzdGF0aWMgdW5zaWduZWQgY2hhciogbXB0b2J5dGVzKG1wX2ludCAqbXAsIGludCAqbGVuKSB7CisJCisJdW5zaWduZWQgY2hhciogcmV0OworCWludCBzaXplOworCisJc2l6ZSA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKG1wKTsKKwlyZXQgPSBtX21hbGxvYyhzaXplKTsKKwlpZiAobXBfdG9fdW5zaWduZWRfYmluKG1wLCByZXQpICE9IE1QX09LQVkpIHsKKwkJZHJvcGJlYXJfZXhpdCgibWVtIGFsbG9jIGVycm9yIik7CisJfQorCWlmIChsZW4gIT0gTlVMTCkgeworCQkqbGVuID0gc2l6ZTsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgorCisvKiBTaWduIHRoZSBkYXRhIHByZXNlbnRlZCB3aXRoIGtleSwgd3JpdGluZyB0aGUgc2lnbmF0dXJlIGNvbnRlbnRzCisgKiB0byB0aGUgYnVmZmVyCisgKgorICogV2hlbiBEU1NfUFJPVE9LIGlzICNkZWZpbmVkOgorICogVGhlIGFsdGVybmF0ZSBrIGdlbmVyYXRpb24gbWV0aG9kIGlzIGJhc2VkIG9uIHRoZSBtZXRob2QgdXNlZCBpbiBQdVRUWS4gCisgKiBJbiBwYXJ0aWN1bGFyIHRvIGF2b2lkIGJlaW5nIHZ1bG5lcmFibGUgdG8gYXR0YWNrcyB1c2luZyBmbGF3cyBpbiByYW5kb20KKyAqIGdlbmVyYXRpb24gb2Ygaywgd2UgdXNlIHRoZSBmb2xsb3dpbmc6CisgKgorICogcHJvdG9fayA9IFNIQTUxMiAoIFNIQTUxMih4KSB8fCBTSEExNjAobWVzc2FnZSkgKQorICogayA9IHByb3RvX2sgbW9kIHEKKyAqCisgKiBOb3cgd2UgYXJlbid0IHJlbHlpbmcgb24gdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiB0byBwcm90ZWN0IHRoZSBwcml2YXRlCisgKiBrZXkgeCwgd2hpY2ggaXMgYSBsb25nIHRlcm0gc2VjcmV0ICovCit2b2lkIGJ1Zl9wdXRfZHNzX3NpZ24oYnVmZmVyKiBidWYsIGRzc19rZXkgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwKKwkJdW5zaWduZWQgaW50IGxlbikgeworCisJdW5zaWduZWQgY2hhciBtc2doYXNoW1NIQTFfSEFTSF9TSVpFXTsKKwl1bnNpZ25lZCBpbnQgd3JpdGVsZW47CisJdW5zaWduZWQgaW50IGk7CisjaWZkZWYgRFNTX1BST1RPSworCXVuc2lnbmVkIGNoYXIgcHJpdmtleWhhc2hbU0hBNTEyX0hBU0hfU0laRV07CisJdW5zaWduZWQgY2hhciAqcHJpdmtleXRtcDsKKwl1bnNpZ25lZCBjaGFyIHByb3RvX2tbU0hBNTEyX0hBU0hfU0laRV07CisJREVGX01QX0lOVChkc3NfcHJvdG9rKTsKKyNlbmRpZgorCURFRl9NUF9JTlQoZHNzX2spOworCURFRl9NUF9JTlQoZHNzX20pOworCURFRl9NUF9JTlQoZHNzX3RlbXAxKTsKKwlERUZfTVBfSU5UKGRzc190ZW1wMik7CisJREVGX01QX0lOVChkc3Nfcik7CisJREVGX01QX0lOVChkc3Nfcyk7CisJaGFzaF9zdGF0ZSBoczsKKwkKKwlUUkFDRSgoImVudGVyIGJ1Zl9wdXRfZHNzX3NpZ24iKSkKKwlkcm9wYmVhcl9hc3NlcnQoa2V5ICE9IE5VTEwpOworCQorCS8qIGhhc2ggdGhlIGRhdGEgKi8KKwlzaGExX2luaXQoJmhzKTsKKwlzaGExX3Byb2Nlc3MoJmhzLCBkYXRhLCBsZW4pOworCXNoYTFfZG9uZSgmaHMsIG1zZ2hhc2gpOworCisJbV9tcF9pbml0X211bHRpKCZkc3NfaywgJmRzc190ZW1wMSwgJmRzc190ZW1wMiwgJmRzc19yLCAmZHNzX3MsCisJCQkmZHNzX20sIE5VTEwpOworI2lmZGVmIERTU19QUk9UT0sJCisJLyogaGFzaCB0aGUgcHJpdmtleSAqLworCXByaXZrZXl0bXAgPSBtcHRvYnl0ZXMoa2V5LT54LCAmaSk7CisJc2hhNTEyX2luaXQoJmhzKTsKKwlzaGE1MTJfcHJvY2VzcygmaHMsICJ0aGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5IGRvZyIsIDQ0KTsKKwlzaGE1MTJfcHJvY2VzcygmaHMsIHByaXZrZXl0bXAsIGkpOworCXNoYTUxMl9kb25lKCZocywgcHJpdmtleWhhc2gpOworCW1fYnVybihwcml2a2V5dG1wLCBpKTsKKwltX2ZyZWUocHJpdmtleXRtcCk7CisKKwkvKiBjYWxjdWxhdGUgcHJvdG9fayAqLworCXNoYTUxMl9pbml0KCZocyk7CisJc2hhNTEyX3Byb2Nlc3MoJmhzLCBwcml2a2V5aGFzaCwgU0hBNTEyX0hBU0hfU0laRSk7CisJc2hhNTEyX3Byb2Nlc3MoJmhzLCBtc2doYXNoLCBTSEExX0hBU0hfU0laRSk7CisJc2hhNTEyX2RvbmUoJmhzLCBwcm90b19rKTsKKworCS8qIGdlbmVyYXRlIGsgKi8KKwltX21wX2luaXQoJmRzc19wcm90b2spOworCWJ5dGVzX3RvX21wKCZkc3NfcHJvdG9rLCBwcm90b19rLCBTSEE1MTJfSEFTSF9TSVpFKTsKKwlpZiAobXBfbW9kKCZkc3NfcHJvdG9rLCBrZXktPnEsICZkc3NfaykgIT0gTVBfT0tBWSkgeworCQlkcm9wYmVhcl9leGl0KCJkc3MgZXJyb3IiKTsKKwl9CisJbXBfY2xlYXIoJmRzc19wcm90b2spOworCW1fYnVybihwcm90b19rLCBTSEE1MTJfSEFTSF9TSVpFKTsKKyNlbHNlIC8qIERTU19QUk9UT0sgbm90IGRlZmluZWQqLworCWdlbl9yYW5kb21fbXBpbnQoa2V5LT5xLCAmZHNzX2spOworI2VuZGlmCisKKwkvKiBub3cgZ2VuZXJhdGUgdGhlIGFjdHVhbCBzaWduYXR1cmUgKi8KKwlieXRlc190b19tcCgmZHNzX20sIG1zZ2hhc2gsIFNIQTFfSEFTSF9TSVpFKTsKKworCS8qIGdeayBtb2QgcCAqLworCWlmIChtcF9leHB0bW9kKGtleS0+ZywgJmRzc19rLCBrZXktPnAsICZkc3NfdGVtcDEpICE9ICBNUF9PS0FZKSB7CisJCWRyb3BiZWFyX2V4aXQoImRzcyBlcnJvciIpOworCX0KKwkvKiByID0gKGdeayBtb2QgcCkgbW9kIHEgKi8KKwlpZiAobXBfbW9kKCZkc3NfdGVtcDEsIGtleS0+cSwgJmRzc19yKSAhPSBNUF9PS0FZKSB7CisJCWRyb3BiZWFyX2V4aXQoImRzcyBlcnJvciIpOworCX0KKworCS8qIHgqciBtb2QgcSAqLworCWlmIChtcF9tdWxtb2QoJmRzc19yLCBrZXktPngsIGtleS0+cSwgJmRzc190ZW1wMSkgIT0gTVBfT0tBWSkgeworCQlkcm9wYmVhcl9leGl0KCJkc3MgZXJyb3IiKTsKKwl9CisJLyogKFNIQTEoTSkgKyB4cikgbW9kIHEpICovCisJaWYgKG1wX2FkZG1vZCgmZHNzX20sICZkc3NfdGVtcDEsIGtleS0+cSwgJmRzc190ZW1wMikgIT0gTVBfT0tBWSkgeworCQlkcm9wYmVhcl9leGl0KCJkc3MgZXJyb3IiKTsKKwl9CisJCisJLyogKGteLTEpIG1vZCBxICovCisJaWYgKG1wX2ludm1vZCgmZHNzX2ssIGtleS0+cSwgJmRzc190ZW1wMSkgIT0gTVBfT0tBWSkgeworCQlkcm9wYmVhcl9leGl0KCJkc3MgZXJyb3IiKTsKKwl9CisKKwkvKiBzID0gKGteLTEoU0hBMShNKSArIHhyKSkgbW9kIHEgKi8KKwlpZiAobXBfbXVsbW9kKCZkc3NfdGVtcDEsICZkc3NfdGVtcDIsIGtleS0+cSwgJmRzc19zKSAhPSBNUF9PS0FZKSB7CisJCWRyb3BiZWFyX2V4aXQoImRzcyBlcnJvciIpOworCX0KKworCWJ1Zl9wdXRzdHJpbmcoYnVmLCBTU0hfU0lHTktFWV9EU1MsIFNTSF9TSUdOS0VZX0RTU19MRU4pOworCWJ1Zl9wdXRpbnQoYnVmLCAyKlNIQTFfSEFTSF9TSVpFKTsKKworCXdyaXRlbGVuID0gbXBfdW5zaWduZWRfYmluX3NpemUoJmRzc19yKTsKKwlkcm9wYmVhcl9hc3NlcnQod3JpdGVsZW4gPD0gU0hBMV9IQVNIX1NJWkUpOworCS8qIG5lZWQgdG8gcGFkIHRvIDE2MCBiaXRzIHdpdGggbGVhZGluZyB6ZXJvcyAqLworCWZvciAoaSA9IDA7IGkgPCBTSEExX0hBU0hfU0laRSAtIHdyaXRlbGVuOyBpKyspIHsKKwkJYnVmX3B1dGJ5dGUoYnVmLCAwKTsKKwl9CisJaWYgKG1wX3RvX3Vuc2lnbmVkX2JpbigmZHNzX3IsIGJ1Zl9nZXR3cml0ZXB0cihidWYsIHdyaXRlbGVuKSkgCisJCQkhPSBNUF9PS0FZKSB7CisJCWRyb3BiZWFyX2V4aXQoImRzcyBlcnJvciIpOworCX0KKwltcF9jbGVhcigmZHNzX3IpOworCWJ1Zl9pbmNyd3JpdGVwb3MoYnVmLCB3cml0ZWxlbik7CisKKwl3cml0ZWxlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKCZkc3Nfcyk7CisJZHJvcGJlYXJfYXNzZXJ0KHdyaXRlbGVuIDw9IFNIQTFfSEFTSF9TSVpFKTsKKwkvKiBuZWVkIHRvIHBhZCB0byAxNjAgYml0cyB3aXRoIGxlYWRpbmcgemVyb3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgU0hBMV9IQVNIX1NJWkUgLSB3cml0ZWxlbjsgaSsrKSB7CisJCWJ1Zl9wdXRieXRlKGJ1ZiwgMCk7CisJfQorCWlmIChtcF90b191bnNpZ25lZF9iaW4oJmRzc19zLCBidWZfZ2V0d3JpdGVwdHIoYnVmLCB3cml0ZWxlbikpIAorCQkJIT0gTVBfT0tBWSkgeworCQlkcm9wYmVhcl9leGl0KCJkc3MgZXJyb3IiKTsKKwl9CisJbXBfY2xlYXIoJmRzc19zKTsKKwlidWZfaW5jcndyaXRlcG9zKGJ1Ziwgd3JpdGVsZW4pOworCisJbXBfY2xlYXJfbXVsdGkoJmRzc19rLCAmZHNzX3RlbXAxLCAmZHNzX3RlbXAyLCAmZHNzX3IsICZkc3NfcywKKwkJCSZkc3NfbSwgTlVMTCk7CisJCisJLyogY3JlYXRlIHRoZSBzaWduYXR1cmUgdG8gcmV0dXJuICovCisKKwlUUkFDRSgoImxlYXZlIGJ1Zl9wdXRfZHNzX3NpZ24iKSkKK30KKworI2VuZGlmIC8qIERST1BCRUFSX0RTUyAqLwpkaWZmIC0tZ2l0IGEvZHNzLmggYi9kc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjY5MjU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHNzLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfRFNTX0hfCisjZGVmaW5lIF9EU1NfSF8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisKKyNpZmRlZiBEUk9QQkVBUl9EU1MgCisKKyNkZWZpbmUgRFNTX1NJR05BVFVSRV9TSVpFIDQrU1NIX1NJR05LRVlfRFNTX0xFTis0KzIqU0hBMV9IQVNIX1NJWkUKKworc3RydWN0IERTU19rZXkgeworCisJbXBfaW50KiBwOworCW1wX2ludCogcTsKKwltcF9pbnQqIGc7CisJbXBfaW50KiB5OworCW1wX2ludCogeDsKKworfTsKKwordHlwZWRlZiBzdHJ1Y3QgRFNTX2tleSBkc3Nfa2V5OworCit2b2lkIGJ1Zl9wdXRfZHNzX3NpZ24oYnVmZmVyKiBidWYsIGRzc19rZXkgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwKKwkJdW5zaWduZWQgaW50IGxlbik7CisjaWZkZWYgRFJPUEJFQVJfU0lHTktFWV9WRVJJRlkKK2ludCBidWZfZHNzX3ZlcmlmeShidWZmZXIqIGJ1ZiwgZHNzX2tleSAqa2V5LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLAorCQl1bnNpZ25lZCBpbnQgbGVuKTsKKyNlbmRpZgoraW50IGJ1Zl9nZXRfZHNzX3B1Yl9rZXkoYnVmZmVyKiBidWYsIGRzc19rZXkgKmtleSk7CitpbnQgYnVmX2dldF9kc3NfcHJpdl9rZXkoYnVmZmVyKiBidWYsIGRzc19rZXkgKmtleSk7Cit2b2lkIGJ1Zl9wdXRfZHNzX3B1Yl9rZXkoYnVmZmVyKiBidWYsIGRzc19rZXkgKmtleSk7Cit2b2lkIGJ1Zl9wdXRfZHNzX3ByaXZfa2V5KGJ1ZmZlciogYnVmLCBkc3Nfa2V5ICprZXkpOwordm9pZCBkc3Nfa2V5X2ZyZWUoZHNzX2tleSAqa2V5KTsKKworI2VuZGlmIC8qIERST1BCRUFSX0RTUyAqLworCisjZW5kaWYgLyogX0RTU19IXyAqLwpkaWZmIC0tZ2l0IGEvZmFrZS1yZmMyNTUzLmMgYi9mYWtlLXJmYzI1NTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmJlYTg4Ci0tLSAvZGV2L251bGwKKysrIGIvZmFrZS1yZmMyNTUzLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qCisgKgorICogVGFrZW4gZnJvbSBPcGVuU1NIIDMuOC4xcDEKKyAqIAorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRGFtaWVuIE1pbGxlci4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgV0lERSBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUHNldWRvLWltcGxlbWVudGF0aW9uIG9mIFJGQzI1NTMgbmFtZSAvIGFkZHJlc3MgcmVzb2x1dGlvbiBmdW5jdGlvbnMKKyAqCisgKiBCdXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgY29ycmVjdGx5LiBUaGUgbWluaW11bSBzdWJzZXQKKyAqIGlzIGltcGxlbWVudGVkIGZvciBzc2ggdXNlIG9ubHkuIEZvciBleGFtcGxlLCB0aGlzIHJvdXRpbmUgYXNzdW1lcworICogdGhhdCBhaV9mYW1pbHkgaXMgQUZfSU5FVC4gRG9uJ3QgdXNlIGl0IGZvciBhbm90aGVyIHB1cnBvc2UuCisgKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisKKy8qIFJDU0lEKCIkLklkOiBmYWtlLXJmYzI1NTMuYyx2IDEuNSAyMDAzLzA5LzIyIDAyOjA4OjIzIGR0dWNrZXIgRXhwICQiKTsqLworCisjaWZuZGVmIEhBVkVfR0VUTkFNRUlORk8KK2ludCBnZXRuYW1laW5mbyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzaXplX3Qgc2FsZW4sIGNoYXIgKmhvc3QsIAorICAgICAgICAgICAgICAgIHNpemVfdCBob3N0bGVuLCBjaGFyICpzZXJ2LCBzaXplX3Qgc2VydmxlbiwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOworCXN0cnVjdCBob3N0ZW50ICpocDsKKwljaGFyIHRtcHNlcnZbMTZdOworCisJaWYgKHNlcnYgIT0gTlVMTCkgeworCQlzbnByaW50Zih0bXBzZXJ2LCBzaXplb2YodG1wc2VydiksICIlZCIsIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKKwkJaWYgKHN0cmxjcHkoc2VydiwgdG1wc2Vydiwgc2VydmxlbikgPj0gc2VydmxlbikKKwkJCXJldHVybiAoRUFJX01FTU9SWSk7CisJfQorCisJaWYgKGhvc3QgIT0gTlVMTCkgeworCQlpZiAoZmxhZ3MgJiBOSV9OVU1FUklDSE9TVCkgeworCQkJaWYgKHN0cmxjcHkoaG9zdCwgaW5ldF9udG9hKHNpbi0+c2luX2FkZHIpLAorCQkJICAgIGhvc3RsZW4pID49IGhvc3RsZW4pCisJCQkJcmV0dXJuIChFQUlfTUVNT1JZKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gKDApOworCQl9IGVsc2UgeworCQkJaHAgPSBnZXRob3N0YnlhZGRyKChjaGFyICopJnNpbi0+c2luX2FkZHIsIAorCQkJICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIEFGX0lORVQpOworCQkJaWYgKGhwID09IE5VTEwpCisJCQkJcmV0dXJuIChFQUlfTk9EQVRBKTsKKwkJCQorCQkJaWYgKHN0cmxjcHkoaG9zdCwgaHAtPmhfbmFtZSwgaG9zdGxlbikgPj0gaG9zdGxlbikKKwkJCQlyZXR1cm4gKEVBSV9NRU1PUlkpOworCQkJZWxzZQorCQkJCXJldHVybiAoMCk7CisJCX0KKwl9CisJcmV0dXJuICgwKTsKK30KKyNlbmRpZiAvKiAhSEFWRV9HRVROQU1FSU5GTyAqLworCisjaWZuZGVmIEhBVkVfR0FJX1NUUkVSUk9SCisjaWZkZWYgSEFWRV9DT05TVF9HQUlfU1RSRVJST1JfUFJPVE8KK2NvbnN0IGNoYXIgKgorI2Vsc2UKK2NoYXIgKgorI2VuZGlmCitnYWlfc3RyZXJyb3IoaW50IGVycikKK3sKKwlzd2l0Y2ggKGVycikgeworCWNhc2UgRUFJX05PREFUQToKKwkJcmV0dXJuICgibm8gYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggbmFtZSIpOworCWNhc2UgRUFJX01FTU9SWToKKwkJcmV0dXJuICgibWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4iKTsKKwljYXNlIEVBSV9OT05BTUU6CisJCXJldHVybiAoIm5vZGVuYW1lIG5vciBzZXJ2bmFtZSBwcm92aWRlZCwgb3Igbm90IGtub3duIik7CisJZGVmYXVsdDoKKwkJcmV0dXJuICgidW5rbm93bi9pbnZhbGlkIGVycm9yLiIpOworCX0KK30gICAgCisjZW5kaWYgLyogIUhBVkVfR0FJX1NUUkVSUk9SICovCisKKyNpZm5kZWYgSEFWRV9GUkVFQUREUklORk8KK3ZvaWQKK2ZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKmFpKQoreworCXN0cnVjdCBhZGRyaW5mbyAqbmV4dDsKKworCWZvcig7IGFpICE9IE5VTEw7KSB7CisJCW5leHQgPSBhaS0+YWlfbmV4dDsKKwkJZnJlZShhaSk7CisJCWFpID0gbmV4dDsKKwl9Cit9CisjZW5kaWYgLyogIUhBVkVfRlJFRUFERFJJTkZPICovCisKKyNpZm5kZWYgSEFWRV9HRVRBRERSSU5GTworc3RhdGljIHN0cnVjdAorYWRkcmluZm8gKm1hbGxvY19haShpbnQgcG9ydCwgdV9sb25nIGFkZHIsIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMpCit7CisJc3RydWN0IGFkZHJpbmZvICphaTsKKworCWFpID0gbWFsbG9jKHNpemVvZigqYWkpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCWlmIChhaSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCQorCW1lbXNldChhaSwgJ1wwJywgc2l6ZW9mKCphaSkgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCisJYWktPmFpX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKGFpICsgMSk7CisJLyogWFhYIC0tIHNzaCBkb2Vzbid0IHVzZSBzYV9sZW4gKi8KKwlhaS0+YWlfYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCWFpLT5haV9hZGRyLT5zYV9mYW1pbHkgPSBhaS0+YWlfZmFtaWx5ID0gQUZfSU5FVDsKKworCSgoc3RydWN0IHNvY2thZGRyX2luICopKGFpKS0+YWlfYWRkciktPnNpbl9wb3J0ID0gcG9ydDsKKwkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKShhaSktPmFpX2FkZHIpLT5zaW5fYWRkci5zX2FkZHIgPSBhZGRyOworCQorCS8qIFhYWDogdGhlIGZvbGxvd2luZyBpcyBub3QgZ2VuZXJhbGx5IGNvcnJlY3QsIGJ1dCBkb2VzIHdoYXQgd2Ugd2FudCAqLworCWlmIChoaW50cy0+YWlfc29ja3R5cGUpCisJCWFpLT5haV9zb2NrdHlwZSA9IGhpbnRzLT5haV9zb2NrdHlwZTsKKwllbHNlCisJCWFpLT5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOworCisJaWYgKGhpbnRzLT5haV9wcm90b2NvbCkKKwkJYWktPmFpX3Byb3RvY29sID0gaGludHMtPmFpX3Byb3RvY29sOworCisJcmV0dXJuIChhaSk7Cit9CisKK2ludAorZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqaG9zdG5hbWUsIGNvbnN0IGNoYXIgKnNlcnZuYW1lLCAKKyAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLCBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCit7CisJc3RydWN0IGhvc3RlbnQgKmhwOworCXN0cnVjdCBzZXJ2ZW50ICpzcDsKKwlzdHJ1Y3QgaW5fYWRkciBpbjsKKwlpbnQgaTsKKwlsb25nIGludCBwb3J0OworCXVfbG9uZyBhZGRyOworCisJcG9ydCA9IDA7CisJaWYgKHNlcnZuYW1lICE9IE5VTEwpIHsKKwkJY2hhciAqY3A7CisKKwkJcG9ydCA9IHN0cnRvbChzZXJ2bmFtZSwgJmNwLCAxMCk7CisJCWlmIChwb3J0ID4gMCAmJiBwb3J0IDw9IDY1NTM1ICYmICpjcCA9PSAnXDAnKQorCQkJcG9ydCA9IGh0b25zKHBvcnQpOworCQllbHNlIGlmICgoc3AgPSBnZXRzZXJ2YnluYW1lKHNlcnZuYW1lLCBOVUxMKSkgIT0gTlVMTCkKKwkJCXBvcnQgPSBzcC0+c19wb3J0OworCQllbHNlCisJCQlwb3J0ID0gMDsKKwl9CisKKwlpZiAoaGludHMgJiYgaGludHMtPmFpX2ZsYWdzICYgQUlfUEFTU0lWRSkgeworCQlhZGRyID0gaHRvbmwoMHgwMDAwMDAwMCk7CisJCWlmIChob3N0bmFtZSAmJiBpbmV0X2F0b24oaG9zdG5hbWUsICZpbikgIT0gMCkKKwkJCWFkZHIgPSBpbi5zX2FkZHI7CisJCSpyZXMgPSBtYWxsb2NfYWkocG9ydCwgYWRkciwgaGludHMpOworCQlpZiAoKnJlcyA9PSBOVUxMKSAKKwkJCXJldHVybiAoRUFJX01FTU9SWSk7CisJCXJldHVybiAoMCk7CisJfQorCQkKKwlpZiAoIWhvc3RuYW1lKSB7CisJCSpyZXMgPSBtYWxsb2NfYWkocG9ydCwgaHRvbmwoMHg3ZjAwMDAwMSksIGhpbnRzKTsKKwkJaWYgKCpyZXMgPT0gTlVMTCkgCisJCQlyZXR1cm4gKEVBSV9NRU1PUlkpOworCQlyZXR1cm4gKDApOworCX0KKwkKKwlpZiAoaW5ldF9hdG9uKGhvc3RuYW1lLCAmaW4pKSB7CisJCSpyZXMgPSBtYWxsb2NfYWkocG9ydCwgaW4uc19hZGRyLCBoaW50cyk7CisJCWlmICgqcmVzID09IE5VTEwpIAorCQkJcmV0dXJuIChFQUlfTUVNT1JZKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJCisJLyogRG9uJ3QgdHJ5IEROUyBpZiBBSV9OVU1FUklDSE9TVCBpcyBzZXQgKi8KKwlpZiAoaGludHMgJiYgaGludHMtPmFpX2ZsYWdzICYgQUlfTlVNRVJJQ0hPU1QpCisJCXJldHVybiAoRUFJX05PTkFNRSk7CisJCisJaHAgPSBnZXRob3N0YnluYW1lKGhvc3RuYW1lKTsKKwlpZiAoaHAgJiYgaHAtPmhfbmFtZSAmJiBocC0+aF9uYW1lWzBdICYmIGhwLT5oX2FkZHJfbGlzdFswXSkgeworCQlzdHJ1Y3QgYWRkcmluZm8gKmN1ciwgKnByZXY7CisKKwkJY3VyID0gcHJldiA9ICpyZXMgPSBOVUxMOworCQlmb3IgKGkgPSAwOyBocC0+aF9hZGRyX2xpc3RbaV07IGkrKykgeworCQkJc3RydWN0IGluX2FkZHIgKmluID0gKHN0cnVjdCBpbl9hZGRyICopaHAtPmhfYWRkcl9saXN0W2ldOworCisJCQljdXIgPSBtYWxsb2NfYWkocG9ydCwgaW4tPnNfYWRkciwgaGludHMpOworCQkJaWYgKGN1ciA9PSBOVUxMKSB7CisJCQkJaWYgKCpyZXMgIT0gTlVMTCkKKwkJCQkJZnJlZWFkZHJpbmZvKCpyZXMpOworCQkJCXJldHVybiAoRUFJX01FTU9SWSk7CisJCQl9CisJCQlpZiAocHJldikKKwkJCQlwcmV2LT5haV9uZXh0ID0gY3VyOworCQkJZWxzZQorCQkJCSpyZXMgPSBjdXI7CisKKwkJCXByZXYgPSBjdXI7CisJCX0KKwkJcmV0dXJuICgwKTsKKwl9CisJCisJcmV0dXJuIChFQUlfTk9EQVRBKTsKK30KKyNlbmRpZiAvKiAhSEFWRV9HRVRBRERSSU5GTyAqLwpkaWZmIC0tZ2l0IGEvZmFrZS1yZmMyNTUzLmggYi9mYWtlLXJmYzI1NTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTNlNmE2Ci0tLSAvZGV2L251bGwKKysrIGIvZmFrZS1yZmMyNTUzLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qIFRha2VuIGZyb20gT3BlblNTSCAzLjguMXAxICovCisKKy8qICQuSWQ6IGZha2UtcmZjMjU1My5oLHYgMS45IDIwMDQvMDMvMTAgMTA6MDY6MzMgZHR1Y2tlciBFeHAgJCAqLworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAwLTIwMDMgRGFtaWVuIE1pbGxlci4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgV0lERSBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUHNldWRvLWltcGxlbWVudGF0aW9uIG9mIFJGQzI1NTMgbmFtZSAvIGFkZHJlc3MgcmVzb2x1dGlvbiBmdW5jdGlvbnMKKyAqCisgKiBCdXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgaW1wbGVtZW50ZWQgY29ycmVjdGx5LiBUaGUgbWluaW11bSBzdWJzZXQKKyAqIGlzIGltcGxlbWVudGVkIGZvciBzc2ggdXNlIG9ubHkuIEZvciBleGFtcGxlLCB0aGlzIHJvdXRpbmUgYXNzdW1lcworICogdGhhdCBhaV9mYW1pbHkgaXMgQUZfSU5FVC4gRG9uJ3QgdXNlIGl0IGZvciBhbm90aGVyIHB1cnBvc2UuCisgKi8KKworI2lmbmRlZiBfRkFLRV9SRkMyNTUzX0gKKyNkZWZpbmUgX0ZBS0VfUkZDMjU1M19ICisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorCisvKgorICogRmlyc3QsIHNvY2tldCBhbmQgSU5FVDYgcmVsYXRlZCBkZWZpbml0aW9ucyAKKyAqLworI2lmbmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFCisjIGRlZmluZQlfU1NfTUFYU0laRQkxMjgJLyogSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgbWF4IHNpemUgKi8KKyMgZGVmaW5lICAgICAgIF9TU19QQURTSVpFICAgICAoX1NTX01BWFNJWkUgLSBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcikpCitzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSB7CisJc3RydWN0IHNvY2thZGRyCXNzX3NhOworCWNoYXIJCV9fc3NfcGFkMltfU1NfUEFEU0laRV07Cit9OworIyBkZWZpbmUgc3NfZmFtaWx5IHNzX3NhLnNhX2ZhbWlseQorI2VuZGlmIC8qICFIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFICovCisKKyNpZm5kZWYgSU42X0lTX0FERFJfTE9PUEJBQ0sKKyMgZGVmaW5lIElONl9JU19BRERSX0xPT1BCQUNLKGEpIFwKKwkoKCh1X2ludDMyX3QgKikoYSkpWzBdID09IDAgJiYgKCh1X2ludDMyX3QgKikoYSkpWzFdID09IDAgJiYgXAorCSAoKHVfaW50MzJfdCAqKShhKSlbMl0gPT0gMCAmJiAoKHVfaW50MzJfdCAqKShhKSlbM10gPT0gaHRvbmwoMSkpCisjZW5kaWYgLyogIUlONl9JU19BRERSX0xPT1BCQUNLICovCisKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfSU42X0FERFIKK3N0cnVjdCBpbjZfYWRkciB7CisJdV9pbnQ4X3QJczZfYWRkclsxNl07Cit9OworI2VuZGlmIC8qICFIQVZFX1NUUlVDVF9JTjZfQUREUiAqLworCisjaWZuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONgorc3RydWN0IHNvY2thZGRyX2luNiB7CisJdW5zaWduZWQgc2hvcnQJc2luNl9mYW1pbHk7CisJdV9pbnQxNl90CXNpbjZfcG9ydDsKKwl1X2ludDMyX3QJc2luNl9mbG93aW5mbzsKKwlzdHJ1Y3QgaW42X2FkZHIJc2luNl9hZGRyOworfTsKKyNlbmRpZiAvKiAhSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42ICovCisKKyNpZm5kZWYgQUZfSU5FVDYKKy8qIERlZmluZSBpdCB0byBzb21ldGhpbmcgdGhhdCBzaG91bGQgbmV2ZXIgYXBwZWFyICovCisjZGVmaW5lIEFGX0lORVQ2IEFGX01BWAorI2VuZGlmCisKKy8qCisgKiBOZXh0LCBSRkMyNTUzIG5hbWUgLyBhZGRyZXNzIHJlc29sdXRpb24gQVBJCisgKi8KKworI2lmbmRlZiBOSV9OVU1FUklDSE9TVAorIyBkZWZpbmUgTklfTlVNRVJJQ0hPU1QgICAgKDEpCisjZW5kaWYKKyNpZm5kZWYgTklfTkFNRVJFUUQKKyMgZGVmaW5lIE5JX05BTUVSRVFEICAgICAgICgxPDwxKQorI2VuZGlmCisjaWZuZGVmIE5JX05VTUVSSUNTRVJWCisjIGRlZmluZSBOSV9OVU1FUklDU0VSViAgICAoMTw8MikKKyNlbmRpZgorCisjaWZuZGVmIEFJX1BBU1NJVkUKKyMgZGVmaW5lIEFJX1BBU1NJVkUJCSgxKQorI2VuZGlmCisjaWZuZGVmIEFJX0NBTk9OTkFNRQorIyBkZWZpbmUgQUlfQ0FOT05OQU1FCQkoMTw8MSkKKyNlbmRpZgorI2lmbmRlZiBBSV9OVU1FUklDSE9TVAorIyBkZWZpbmUgQUlfTlVNRVJJQ0hPU1QJCSgxPDwyKQorI2VuZGlmCisKKyNpZm5kZWYgTklfTUFYU0VSVgorIyBkZWZpbmUgTklfTUFYU0VSViAzMgorI2VuZGlmIC8qICFOSV9NQVhTRVJWICovCisjaWZuZGVmIE5JX01BWEhPU1QKKyMgZGVmaW5lIE5JX01BWEhPU1QgMTAyNQorI2VuZGlmIC8qICFOSV9NQVhIT1NUICovCisKKyNpZm5kZWYgRUFJX05PREFUQQorIyBkZWZpbmUgRUFJX05PREFUQQkxCisjIGRlZmluZSBFQUlfTUVNT1JZCTIKKyMgZGVmaW5lIEVBSV9OT05BTUUJMworI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfQUREUklORk8KK3N0cnVjdCBhZGRyaW5mbyB7CisJaW50CWFpX2ZsYWdzOwkvKiBBSV9QQVNTSVZFLCBBSV9DQU5PTk5BTUUgKi8KKwlpbnQJYWlfZmFtaWx5OwkvKiBQRl94eHggKi8KKwlpbnQJYWlfc29ja3R5cGU7CS8qIFNPQ0tfeHh4ICovCisJaW50CWFpX3Byb3RvY29sOwkvKiAwIG9yIElQUFJPVE9feHh4IGZvciBJUHY0IGFuZCBJUHY2ICovCisJc2l6ZV90CWFpX2FkZHJsZW47CS8qIGxlbmd0aCBvZiBhaV9hZGRyICovCisJY2hhcgkqYWlfY2Fub25uYW1lOwkvKiBjYW5vbmljYWwgbmFtZSBmb3IgaG9zdG5hbWUgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgKmFpX2FkZHI7CS8qIGJpbmFyeSBhZGRyZXNzICovCisJc3RydWN0IGFkZHJpbmZvICphaV9uZXh0OwkvKiBuZXh0IHN0cnVjdHVyZSBpbiBsaW5rZWQgbGlzdCAqLworfTsKKyNlbmRpZiAvKiAhSEFWRV9TVFJVQ1RfQUREUklORk8gKi8KKworI2lmbmRlZiBIQVZFX0dFVEFERFJJTkZPCisjaWZkZWYgZ2V0YWRkcmluZm8KKyMgdW5kZWYgZ2V0YWRkcmluZm8KKyNlbmRpZgorI2RlZmluZSBnZXRhZGRyaW5mbyhhLGIsYyxkKQkoc3NoX2dldGFkZHJpbmZvKGEsYixjLGQpKQoraW50IGdldGFkZHJpbmZvKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAKKyAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgc3RydWN0IGFkZHJpbmZvICoqKTsKKyNlbmRpZiAvKiAhSEFWRV9HRVRBRERSSU5GTyAqLworCisjaWYgIWRlZmluZWQoSEFWRV9HQUlfU1RSRVJST1IpICYmICFkZWZpbmVkKEhBVkVfQ09OU1RfR0FJX1NUUkVSUk9SX1BST1RPKQorI2RlZmluZSBnYWlfc3RyZXJyb3IoYSkJCShzc2hfZ2FpX3N0cmVycm9yKGEpKQorY2hhciAqZ2FpX3N0cmVycm9yKGludCk7CisjZW5kaWYgLyogIUhBVkVfR0FJX1NUUkVSUk9SICovCisKKyNpZm5kZWYgSEFWRV9GUkVFQUREUklORk8KKyNkZWZpbmUgZnJlZWFkZHJpbmZvKGEpCQkoc3NoX2ZyZWVhZGRyaW5mbyhhKSkKK3ZvaWQgZnJlZWFkZHJpbmZvKHN0cnVjdCBhZGRyaW5mbyAqKTsKKyNlbmRpZiAvKiAhSEFWRV9GUkVFQUREUklORk8gKi8KKworI2lmbmRlZiBIQVZFX0dFVE5BTUVJTkZPCisjZGVmaW5lIGdldG5hbWVpbmZvKGEsYixjLGQsZSxmLGcpIChzc2hfZ2V0bmFtZWluZm8oYSxiLGMsZCxlLGYsZykpCitpbnQgZ2V0bmFtZWluZm8oY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNpemVfdCwgY2hhciAqLCBzaXplX3QsIAorICAgIGNoYXIgKiwgc2l6ZV90LCBpbnQpOworI2VuZGlmIC8qICFIQVZFX0dFVE5BTUVJTkZPICovCisKKyNlbmRpZiAvKiAhX0ZBS0VfUkZDMjU1M19IICovCisKZGlmZiAtLWdpdCBhL2ZpbGVsaXN0LnR4dCBiL2ZpbGVsaXN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjgxYzE0Ci0tLSAvZGV2L251bGwKKysrIGIvZmlsZWxpc3QudHh0CkBAIC0wLDAgKzEsMTE3IEBACitUaGlzIGZpbGUgaXMgb3V0IG9mIGRhdGUgLSBpdCByZW1haW5zIGhlcmUgaW4gY2FzZSBpdCBpcyBzdGlsbCBvZiB1c2UuCitUaGUgYmFzaWMgbmFtaW5nIGNvbnZlbnRpb24gaXMgc3ZyLSBhbmQgY2xpLSAgZm9yIHNlcGVyYXRlIHBhcnRzLAordGhlbiBjb21tb24tIGZvciBjb21tb24gcGFydHMuIFNvbWUgZmlsZXMgaGF2ZSBubyBwcmVmaXguCisKK0EgYnJpZWYgcnVuZG93biBvbiB3aGljaCBmaWxlcyBkbyB3aGF0LCBhbmQgdGhlaXIgY29ycmVzcG9uZGluZyBzZWN0aW9ucworaW4gdGhlIElFVEYgZHJhZnRzLiBUaGUgLmMgZmlsZXMgdXN1YWxseSBoYXZlIGNvcnJlc3BvbmRpbmcgLmggZmlsZXMuCisKK1RyYW5zcG9ydCBsYXllciAgZHJhZnQtaWV0Zi1zZWNzaC10cmFuc3BvcnQtMTYudHh0Cis9PT09PT09PT09PT09PT0KKworc2Vzc2lvbi5jCQlDb250YWlucyB0aGUgbWFpbiBzZWxlY3QoKSBsb29wLCBhbmQgaGFuZGxlcyBzZXR0aW5nCisJCQl1cC9jbG9zaW5nIGRvd24gc3NoIGNvbm5lY3Rpb25zCisKK2FsZ28uYwkJCUZyYW1ld29yayBmb3IgaGFuZGxpbmcgdmFyaW91cyBjaXBoZXJzL2hhc2hlcy9hbGdvcywKKwkJCWFuZCBjaG9vc2luZyBiZXR3ZWVuIHRoZSBsaXN0cyBvZiBjbGllbnQvc2VydmVyCisJCQlwcmVmZXJyZWQgb25lcworCitrZXguYwkJCUtleSBleGNoYW5nZSByb3V0aW5lcywgdXNlZCBhdCBzdGFydHVwIHRvIG5lZ290aWF0ZQorCQkJd2hpY2ggYWxnb3JpdGhtcyB0byB1c2UsIGFuZCBhbHNvIHRvIG9idGFpbiBzZXNzaW9uCisJCQlrZXlzLiBUaGlzIGFsc28gcnVucyB3aGVuIHJla2V5aW5nIGR1cmluZyB0aGUKKwkJCWNvbm5lY3Rpb24uCisKK3BhY2tldC5jCQlIYW5kbGVzIHRoZSBiYXNpYyBwYWNrZXQgZW5jcnlwdGlvbi9kZWNyeXB0aW9uLAorCQkJYW5kIHN3aXRjaGluZyB0byB0aGUgYXBwcm9wcmlhdGUgcGFja2V0IGhhbmRsZXJzLgorCQkJQ2FsbGVkIGZyb20gc2Vzc2lvbi5jJ3MgbWFpbiBzZWxlY3QgbG9vcC4KKworc2VydmljZS5jCQlIYW5kbGVzIHNlcnZpY2UgcmVxdWVzdHMgKHVzZXJhdXRoIG9yIGNvbm5lY3Rpb24pCisKKworQXV0aGVudGljYXRpb24gIGRyYWZ0LWlldGYtc2Vjc2gtdXNlcmF1dGgtMTcudHh0Cis9PT09PT09PT09PT09PQorCithdXRoLmMJCQlHZW5lcmFsIGF1dGggaGFuZGxpbmcsIGluY2x1ZGluZyB1c2VyIGNoZWNraW5nIGV0YywKKwkJCXBhc3NlcyBkaWZmZXJlbnQgYXV0aCB0eXBlcyB0byBhdXRoe3Bhc3N3ZCxwdWJrZXl9CisKK2F1dGhwYXNzd2QuYwkJSGFuZGxlcyAvZXRjL3Bhc3N3ZCBvciAvZXRjL3NoYWRvdyBhdXRoCisKK2F1dGhwdWJrZXkuYwkJSGFuZGxlcyB+Ly5zc2gvYXV0aG9yaXplZF9rZXlzIGF1dGgKKworCitDb25uZWN0aW9uICBkcmFmdC1pZXRmLXNlY3NoLWNvbm5lY3QtMTcudHh0Cis9PT09PT09PT09CisKK2NoYW5uZWwuYwkJQ2hhbm5lbCBoYW5kbGluZyByb3V0aW5lcyAtIGVhY2ggc2hlbGwvdGNwIGNvbm4vYWdlbnQKKwkJCWV0YyBpcyBhIGNoYW5uZWwuCisKK2NoYW5zZXNzaW9uLmMJCUhhbmRsZXMgc2hlbGwvZXhlYyByZXF1ZXN0cworCitzc2hwdHkuYwkJRnJvbSBPcGVuU1NILCBhbGxvY2F0ZXMgUFRZcyBldGMKKwordGVybWNvZGVzLmMJCU1hcHBpbmcgb2YgUE9TSVggdGVybWluYWwgY29kZXMgdG8gU1NIIHRlcm1pbmFsIGNvZGVzCisKK2xvZ2lucmVjLmMJCUZyb20gT3BlblNTSCwgaGFuZGxlcyB1dG1wL3d0bXAgbG9nZ2luZworCit4MTFmd2QuYwkJSGFuZGxlcyBYMTEgZm9yd2FyZGluZworCithZ2VudGZ3ZC5jCQlIYW5kbGVzIGF1dGgtYWdlbnQgZm9yd2FyZGluZyByZXF1ZXN0cworCitsb2NhbHRjcGZ3ZC5jCQlIYW5kbGVzIC1MIHN0eWxlIHRjcCBmb3J3YXJkaW5nIHJlcXVlc3RzLCBzZXR0aW5nCisJCQl1cCB0aGUgbGlzdGVuaW5nIHBvcnQgYW5kIGFsc28gaGFuZGxpbmcgY29ubmVjdGlvbnMKKwkJCXRvIHRoYXQgcG9ydCAoYW5kIHN1YnNlcXVlbnQgY2hhbm5lbHMpCisKKworUHJvZ3JhbS1yZWxhdGVkCis9PT09PT09PT09PT09PT0KKworZGJtdWx0aS5jCQlDb21iaW5hdGlvbiBiaW5hcnkgY2hvb3NlciBtYWluKCkgZnVuY3Rpb24KKworZGJ1dGlsLmMJCVZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMsIGluY2wgbG9nZ2luZywgbWVtb3J5IGV0YworCitkcm9wYmVhcmNvbnZlcnQuYwlDb252ZXJzaW9uIGZyb20gZHJvcGJlYXI8LT5vcGVuc3NoIGtleXMsIHVzZXMKKwkJCWtleWltcG9ydC5jIHRvIGRvIG1vc3Qgb2YgdGhlIHdvcmsKKworZHJvcGJlYXJrZXkuYwkJR2VuZXJhdGVzIGtleXMsIGNhbGxpbmcgZ2Vue2Rzcyxyc2F9CisKK2tleWltcG9ydC5jCQlNb2RpZmllZCBmcm9tIFB1VFRZLCBjb252ZXJ0cyBiZXR3ZWVuIGtleSB0eXBlcworCittYWluLmMJCQlkcm9wYmVhcidzIG1haW4oKSwgaGFuZGxlcyBsaXN0ZW5pbmcsIGZvcmtpbmcgZm9yCisJCQluZXcgY29ubmVjdGlvbnMsIGNoaWxkLXByb2Nlc3MgbGltaXRzCisKK3J1bm9wdHMuYwkJUGFyc2VzIGNvbW1hbmRsaW5lIG9wdGlvbnMKKworb3B0aW9ucy5oCQlDb21waWxlLXRpbWUgZmVhdHVyZSBzZWxlY3Rpb24KKworY29uZmlnLmgJCUZlYXR1cmVzIHNlbGVjdGVkIGZyb20gY29uZmlndXJlCisKK2RlYnVnLmgJCQlDb21waWxlLXRpbWUgc2VsZWN0aW9uIG9mIGRlYnVnIGZlYXR1cmVzCisKK2luY2x1ZGVzLmgJCUluY2x1ZGVkIHN5c3RlbSBoZWFkZXJzIGV0YworCisKK0dlbmVyaWMgUm91dGluZXMKKz09PT09PT09PT09PT09PT0KKworc2lnbmtleS5jCQlBIGdlbmVyaWMgaGFuZGxlciBmb3IgcHVia2V5cywgc3dpdGNoZXMgdG8gZHNzIG9yIHJzYQorCQkJZGVwZW5kaW5nIG9uIHRoZSBrZXkgdHlwZQorCityc2EuYwkJCVJTQSBhc3ltbWV0cmljIGNyeXB0byByb3V0aW5lcworCitkc3MuYwkJCURTUyBhc3ltbWV0cmljIGNyeXB0byByb3V0aW5lcworCitnZW5kc3MuYwkJRFNTIGtleSBnZW5lcmF0aW9uCisKK2dlbnJzYS5jCQlSU0Ega2V5IGdlbmVyYXRpb24KKworYmlnbnVtLmMJCVNvbWUgYmlnbnVtIGhlbHBlciBmdW5jdGlvbnMKKworcXVldWUuYwkJCUEgcXVldWUsIHVzZWQgdG8gZW5xdWV1ZSBlbmNyeXB0ZWQgcGFja2V0cyB0byBzZW5kCisKK3JhbmRvbS5jCQlQUk5HLCBiYXNlZCBvbiAvZGV2L3VyYW5kb20gb3IgcHJuZ2QKKworYXRvbWljaW8uYwkJRnJvbSBPcGVuU1NILCBkb2VzIGBibG9ja2luZycgSU8gb24gbm9uLWJsb2NraW5nIGZkcworCitidWZmZXIuYwkJQnVmZmVyLXVzYWdlIHJvdXRpbmVzLCB3aXRoIHNpemUgY2hlY2tpbmcgZXRjCisKKwordmltOnNldCB0cz04OgpkaWZmIC0tZ2l0IGEvZ2VuZHNzLmMgYi9nZW5kc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjQ2ZDNkCi0tLSAvZGV2L251bGwKKysrIGIvZ2VuZHNzLmMKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgInNpZ25rZXkuaCIKKyNpbmNsdWRlICJiaWdudW0uaCIKKyNpbmNsdWRlICJyYW5kb20uaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJnZW5kc3MuaCIKKyNpbmNsdWRlICJkc3MuaCIKKworI2RlZmluZSBRU0laRSAyMCAvKiAxNjAgYml0ICovCisKKy8qIFRoaXMgaXMganVzdCBhIHRlc3QgKi8KKworI2lmZGVmIERST1BCRUFSX0RTUworCitzdGF0aWMgdm9pZCBnZXRxKGRzc19rZXkgKmtleSk7CitzdGF0aWMgdm9pZCBnZXRwKGRzc19rZXkgKmtleSwgdW5zaWduZWQgaW50IHNpemUpOworc3RhdGljIHZvaWQgZ2V0Zyhkc3Nfa2V5ICprZXkpOworc3RhdGljIHZvaWQgZ2V0eChkc3Nfa2V5ICprZXkpOworc3RhdGljIHZvaWQgZ2V0eShkc3Nfa2V5ICprZXkpOworCitkc3Nfa2V5ICogZ2VuX2Rzc19wcml2X2tleSh1bnNpZ25lZCBpbnQgc2l6ZSkgeworCisJZHNzX2tleSAqa2V5OworCisJa2V5ID0gKGRzc19rZXkqKW1fbWFsbG9jKHNpemVvZihkc3Nfa2V5KSk7CisKKwlrZXktPnAgPSAobXBfaW50KiltX21hbGxvYyhzaXplb2YobXBfaW50KSk7CisJa2V5LT5xID0gKG1wX2ludCopbV9tYWxsb2Moc2l6ZW9mKG1wX2ludCkpOworCWtleS0+ZyA9IChtcF9pbnQqKW1fbWFsbG9jKHNpemVvZihtcF9pbnQpKTsKKwlrZXktPnkgPSAobXBfaW50KiltX21hbGxvYyhzaXplb2YobXBfaW50KSk7CisJa2V5LT54ID0gKG1wX2ludCopbV9tYWxsb2Moc2l6ZW9mKG1wX2ludCkpOworCW1fbXBfaW5pdF9tdWx0aShrZXktPnAsIGtleS0+cSwga2V5LT5nLCBrZXktPnksIGtleS0+eCwgTlVMTCk7CisJCisJc2VlZHJhbmRvbSgpOworCQorCWdldHEoa2V5KTsKKwlnZXRwKGtleSwgc2l6ZSk7CisJZ2V0ZyhrZXkpOworCWdldHgoa2V5KTsKKwlnZXR5KGtleSk7CisKKwlyZXR1cm4ga2V5OworCQorfQorCitzdGF0aWMgdm9pZCBnZXRxKGRzc19rZXkgKmtleSkgeworCisJY2hhciBidWZbUVNJWkVdOworCisJLyogMTYwIGJpdCBwcmltZSAqLworCWdlbnJhbmRvbShidWYsIFFTSVpFKTsKKwlidWZbMF0gfD0gMHg4MDsgLyogdG9wIGJpdCBoaWdoICovCisJYnVmW1FTSVpFLTFdIHw9IDB4MDE7IC8qIGJvdHRvbSBiaXQgaGlnaCAqLworCisJYnl0ZXNfdG9fbXAoa2V5LT5xLCBidWYsIFFTSVpFKTsKKworCS8qIDE4IHJvdW5kcyBhcmUgcmVxdWlyZWQgYWNjb3JkaW5nIHRvIEhBQyAqLworCWlmIChtcF9wcmltZV9uZXh0X3ByaW1lKGtleS0+cSwgMTgsIDApICE9IE1QX09LQVkpIHsKKwkJZnByaW50ZihzdGRlcnIsICJkc3Mga2V5IGdlbmVyYXRpb24gZmFpbGVkXG4iKTsKKwkJZXhpdCgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdldHAoZHNzX2tleSAqa2V5LCB1bnNpZ25lZCBpbnQgc2l6ZSkgeworCisJREVGX01QX0lOVCh0ZW1wWCk7CisJREVGX01QX0lOVCh0ZW1wQyk7CisJREVGX01QX0lOVCh0ZW1wUCk7CisJREVGX01QX0lOVCh0ZW1wMnEpOworCWludCByZXN1bHQ7CisJdW5zaWduZWQgY2hhciAqYnVmOworCisJbV9tcF9pbml0X211bHRpKCZ0ZW1wWCwgJnRlbXBDLCAmdGVtcFAsICZ0ZW1wMnEsIE5VTEwpOworCisKKwkvKiAyKnEgKi8KKwlpZiAobXBfbXVsX2Qoa2V5LT5xLCAyLCAmdGVtcDJxKSAhPSBNUF9PS0FZKSB7CisJCWZwcmludGYoc3RkZXJyLCAiZHNzIGtleSBnZW5lcmF0aW9uIGZhaWxlZFxuIik7CisJCWV4aXQoMSk7CisJfQorCQorCWJ1ZiA9ICh1bnNpZ25lZCBjaGFyKiltX21hbGxvYyhzaXplKTsKKworCXJlc3VsdCA9IDA7CisJZG8geworCQkKKwkJZ2VucmFuZG9tKGJ1Ziwgc2l6ZSk7CisJCWJ1ZlswXSB8PSAweDgwOyAvKiBzZXQgdGhlIHRvcCBiaXQgaGlnaCAqLworCisJCS8qIFggaXMgYSByYW5kb20gbXBfaW50ICovCisJCWJ5dGVzX3RvX21wKCZ0ZW1wWCwgYnVmLCBzaXplKTsKKworCQkvKiBDID0gWCBtb2QgMnEgKi8KKwkJaWYgKG1wX21vZCgmdGVtcFgsICZ0ZW1wMnEsICZ0ZW1wQykgIT0gTVBfT0tBWSkgeworCQkJZnByaW50ZihzdGRlcnIsICJkc3Mga2V5IGdlbmVyYXRpb24gZmFpbGVkXG4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQkvKiBQID0gWCAtIChDIC0gMSkgPSBYIC0gQyArIDEqLworCQlpZiAobXBfc3ViKCZ0ZW1wWCwgJnRlbXBDLCAmdGVtcFApICE9IE1QX09LQVkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiZHNzIGtleSBnZW5lcmF0aW9uIGZhaWxlZFxuIik7CisJCQlleGl0KDEpOworCQl9CisJCQorCQlpZiAobXBfYWRkX2QoJnRlbXBQLCAxLCBrZXktPnApICE9IE1QX09LQVkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiZHNzIGtleSBnZW5lcmF0aW9uIGZhaWxlZFxuIik7CisJCQlleGl0KDEpOworCQl9CisKKwkJLyogbm93IGNoZWNrIGZvciBwcmltZSwgNSByb3VuZHMgaXMgZW5vdWdoIGFjY29yZGluZyB0byBIQUMgKi8KKwkJLyogcmVzdWx0ID09IDEgID0+ICBwIGlzIHByaW1lICovCisJCWlmIChtcF9wcmltZV9pc19wcmltZShrZXktPnAsIDUsICZyZXN1bHQpICE9IE1QX09LQVkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiZHNzIGtleSBnZW5lcmF0aW9uIGZhaWxlZFxuIik7CisJCQlleGl0KDEpOworCQl9CisJfSB3aGlsZSAoIXJlc3VsdCk7CisKKwltcF9jbGVhcl9tdWx0aSgmdGVtcFgsICZ0ZW1wQywgJnRlbXBQLCAmdGVtcDJxLCBOVUxMKTsKKwltX2J1cm4oYnVmLCBzaXplKTsKKwltX2ZyZWUoYnVmKTsKK30KKworc3RhdGljIHZvaWQgZ2V0Zyhkc3Nfa2V5ICoga2V5KSB7CisKKwlERUZfTVBfSU5UKGRpdik7CisJREVGX01QX0lOVChoKTsKKwlERUZfTVBfSU5UKHZhbCk7CisKKwltX21wX2luaXRfbXVsdGkoJmRpdiwgJmgsICZ2YWwsIE5VTEwpOworCisJLyogZ2V0IGRpdj0ocC0xKS9xICovCisJaWYgKG1wX3N1Yl9kKGtleS0+cCwgMSwgJnZhbCkgIT0gTVBfT0tBWSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImRzcyBrZXkgZ2VuZXJhdGlvbiBmYWlsZWRcbiIpOworCQlleGl0KDEpOworCX0KKwlpZiAobXBfZGl2KCZ2YWwsIGtleS0+cSwgJmRpdiwgTlVMTCkgIT0gTVBfT0tBWSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImRzcyBrZXkgZ2VuZXJhdGlvbiBmYWlsZWRcbiIpOworCQlleGl0KDEpOworCX0KKworCS8qIGluaXRpYWxpc2UgaD0xICovCisJbXBfc2V0KCZoLCAxKTsKKwlkbyB7CisJCS8qIG5vdyBrZWVwIGdvaW5nIHdpdGggZz1oXmRpdiBtb2QgcCwgdW50aWwgZyA+IDEgKi8KKwkJaWYgKG1wX2V4cHRtb2QoJmgsICZkaXYsIGtleS0+cCwga2V5LT5nKSAhPSBNUF9PS0FZKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgImRzcyBrZXkgZ2VuZXJhdGlvbiBmYWlsZWRcbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCWlmIChtcF9hZGRfZCgmaCwgMSwgJmgpICE9IE1QX09LQVkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiZHNzIGtleSBnZW5lcmF0aW9uIGZhaWxlZFxuIik7CisJCQlleGl0KDEpOworCQl9CisJCisJfSB3aGlsZSAobXBfY21wX2Qoa2V5LT5nLCAxKSAhPSBNUF9HVCk7CisKKwltcF9jbGVhcl9tdWx0aSgmZGl2LCAmaCwgJnZhbCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIGdldHgoZHNzX2tleSAqa2V5KSB7CisKKwlnZW5fcmFuZG9tX21waW50KGtleS0+cSwga2V5LT54KTsKK30KKworc3RhdGljIHZvaWQgZ2V0eShkc3Nfa2V5ICprZXkpIHsKKworCWlmIChtcF9leHB0bW9kKGtleS0+Zywga2V5LT54LCBrZXktPnAsIGtleS0+eSkgIT0gTVBfT0tBWSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImRzcyBrZXkgZ2VuZXJhdGlvbiBmYWlsZWRcbiIpOworCQlleGl0KDEpOworCX0KK30KKworI2VuZGlmIC8qIERST1BCRUFSX0RTUyAqLwpkaWZmIC0tZ2l0IGEvZ2VuZHNzLmggYi9nZW5kc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDZkYWUzCi0tLSAvZGV2L251bGwKKysrIGIvZ2VuZHNzLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfR0VORFNTX0hfCisjZGVmaW5lIF9HRU5EU1NfSF8KKworI2luY2x1ZGUgImRzcy5oIgorCisjaWZkZWYgRFJPUEJFQVJfRFNTCisKK2Rzc19rZXkgKiBnZW5fZHNzX3ByaXZfa2V5KHVuc2lnbmVkIGludCBzaXplKTsKKworI2VuZGlmIC8qIERST1BCRUFSX0RTUyAqLworCisjZW5kaWYgLyogX0dFTkRTU19IXyAqLwpkaWZmIC0tZ2l0IGEvZ2VucnNhLmMgYi9nZW5yc2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2E3OTg0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2VucnNhLmMKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgInJhbmRvbS5oIgorI2luY2x1ZGUgInJzYS5oIgorI2luY2x1ZGUgImdlbnJzYS5oIgorCisjZGVmaW5lIFJTQV9FIDY1NTM3CisKKyNpZmRlZiBEUk9QQkVBUl9SU0EKKworc3RhdGljIHZvaWQgZ2V0cnNhcHJpbWUobXBfaW50KiBwcmltZSwgbXBfaW50ICpwcmltZW1pbnVzLCAKKwkJbXBfaW50KiByc2FfZSwgdW5zaWduZWQgaW50IHNpemUpOworCisvKiBtb3N0bHkgdGFrZW4gZnJvbSBsaWJ0b21jcnlwdCdzIHJzYSBrZXkgZ2VuZXJhdGlvbiByb3V0aW5lICovCityc2Ffa2V5ICogZ2VuX3JzYV9wcml2X2tleSh1bnNpZ25lZCBpbnQgc2l6ZSkgeworCisJcnNhX2tleSAqIGtleTsKKwlERUZfTVBfSU5UKHBtaW51cyk7CisJREVGX01QX0lOVChxbWludXMpOworCURFRl9NUF9JTlQobGNtKTsKKworCWtleSA9IChyc2Ffa2V5KiltX21hbGxvYyhzaXplb2YocnNhX2tleSkpOworCisJa2V5LT5lID0gKG1wX2ludCopbV9tYWxsb2Moc2l6ZW9mKG1wX2ludCkpOworCWtleS0+biA9IChtcF9pbnQqKW1fbWFsbG9jKHNpemVvZihtcF9pbnQpKTsKKwlrZXktPmQgPSAobXBfaW50KiltX21hbGxvYyhzaXplb2YobXBfaW50KSk7CisJa2V5LT5wID0gKG1wX2ludCopbV9tYWxsb2Moc2l6ZW9mKG1wX2ludCkpOworCWtleS0+cSA9IChtcF9pbnQqKW1fbWFsbG9jKHNpemVvZihtcF9pbnQpKTsKKworCW1fbXBfaW5pdF9tdWx0aShrZXktPmUsIGtleS0+biwga2V5LT5kLCBrZXktPnAsIGtleS0+cSwKKwkJCSZwbWludXMsICZsY20sICZxbWludXMsIE5VTEwpOworCisJc2VlZHJhbmRvbSgpOworCisJaWYgKG1wX3NldF9pbnQoa2V5LT5lLCBSU0FfRSkgIT0gTVBfT0tBWSkgeworCQlmcHJpbnRmKHN0ZGVyciwgInJzYSBnZW5lcmF0aW9uIGZhaWxlZFxuIik7CisJCWV4aXQoMSk7CisJfQorCisJLyogUHVUVFkgZG9lc24ndCBsaWtlIGl0IGlmIHRoZSBtb2R1bHVzIGlzbid0IGEgbXVsdGlwbGUgb2YgOCBiaXRzLAorCSAqIHNvIHdlIGp1c3QgZ2VuZXJhdGUgdGhlbSB1bnRpbCB3ZSBnZXQgb25lIHdoaWNoIGlzIE9LICovCisJZ2V0cnNhcHJpbWUoa2V5LT5wLCAmcG1pbnVzLCBrZXktPmUsIHNpemUvMik7CisJZG8geworCQlnZXRyc2FwcmltZShrZXktPnEsICZxbWludXMsIGtleS0+ZSwgc2l6ZS8yKTsKKworCQlpZiAobXBfbXVsKGtleS0+cCwga2V5LT5xLCBrZXktPm4pICE9IE1QX09LQVkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAicnNhIGdlbmVyYXRpb24gZmFpbGVkXG4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9IHdoaWxlIChtcF9jb3VudF9iaXRzKGtleS0+bikgJSA4ICE9IDApOworCisJLyogbGNtKHAtMSwgcS0xKSAqLworCWlmIChtcF9sY20oJnBtaW51cywgJnFtaW51cywgJmxjbSkgIT0gTVBfT0tBWSkgeworCQlmcHJpbnRmKHN0ZGVyciwgInJzYSBnZW5lcmF0aW9uIGZhaWxlZFxuIik7CisJCWV4aXQoMSk7CisJfQorCisJLyogZGUgPSAxIG1vZCBsY20ocC0xLHEtMSkgKi8KKwkvKiB0aGVyZWZvcmUgZCA9IChlXi0xKSBtb2QgbGNtKHAtMSxxLTEpICovCisJaWYgKG1wX2ludm1vZChrZXktPmUsICZsY20sIGtleS0+ZCkgIT0gTVBfT0tBWSkgeworCQlmcHJpbnRmKHN0ZGVyciwgInJzYSBnZW5lcmF0aW9uIGZhaWxlZFxuIik7CisJCWV4aXQoMSk7CisJfQorCisJbXBfY2xlYXJfbXVsdGkoJnBtaW51cywgJnFtaW51cywgJmxjbSwgTlVMTCk7CisKKwlyZXR1cm4ga2V5OworfQkKKworLyogcmV0dXJuIGEgcHJpbWUgc3VpdGFibGUgZm9yIHAgb3IgcSAqLworc3RhdGljIHZvaWQgZ2V0cnNhcHJpbWUobXBfaW50KiBwcmltZSwgbXBfaW50ICpwcmltZW1pbnVzLCAKKwkJbXBfaW50KiByc2FfZSwgdW5zaWduZWQgaW50IHNpemUpIHsKKworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlERUZfTVBfSU5UKHRlbXBfZ2NkKTsKKworCWJ1ZiA9ICh1bnNpZ25lZCBjaGFyKiltX21hbGxvYyhzaXplKzEpOworCisJbV9tcF9pbml0KCZ0ZW1wX2djZCk7CisJZG8geworCQkvKiBnZW5lcmF0ZSBhIHJhbmRvbSBvZGQgbnVtYmVyIHdpdGggTVNCIHNldCwgdGhlbiBmaW5kIHRoZQorCQkgICB0aGUgbmV4dCBwcmltZSBhYm92ZSBpdCAqLworCQlnZW5yYW5kb20oYnVmLCBzaXplKzEpOworCQlidWZbMF0gfD0gMHg4MDsgLyogTVNCIHNldCAqLworCisJCWJ5dGVzX3RvX21wKHByaW1lLCBidWYsIHNpemUrMSk7CisKKwkJLyogZmluZCB0aGUgbmV4dCBpbnRlZ2VyIHdoaWNoIGlzIHByaW1lLCA4IHJvdW5kIG9mIG1pbGxlci1yYWJpbiAqLworCQlpZiAobXBfcHJpbWVfbmV4dF9wcmltZShwcmltZSwgOCwgMCkgIT0gTVBfT0tBWSkgeworCQkJZnByaW50ZihzdGRlcnIsICJyc2EgZ2VuZXJhdGlvbiBmYWlsZWRcbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCS8qIHN1YnRyYWN0IG9uZSB0byBnZXQgcC0xICovCisJCWlmIChtcF9zdWJfZChwcmltZSwgMSwgcHJpbWVtaW51cykgIT0gTVBfT0tBWSkgeworCQkJZnByaW50ZihzdGRlcnIsICJyc2EgZ2VuZXJhdGlvbiBmYWlsZWRcbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQkvKiBjaGVjayByZWxhdGl2ZSBwcmltYWxpdHkgdG8gZSAqLworCQlpZiAobXBfZ2NkKHByaW1lbWludXMsIHJzYV9lLCAmdGVtcF9nY2QpICE9IE1QX09LQVkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAicnNhIGdlbmVyYXRpb24gZmFpbGVkXG4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9IHdoaWxlIChtcF9jbXBfZCgmdGVtcF9nY2QsIDEpICE9IE1QX0VRKTsgLyogd2hpbGUgZ2NkKHAtMSwgZSkgIT0gMSAqLworCisJLyogbm93IHdlIGhhdmUgYSBnb29kIHZhbHVlIGZvciByZXN1bHQgKi8KKwltcF9jbGVhcigmdGVtcF9nY2QpOworCW1fYnVybihidWYsIHNpemUrMSk7CisJbV9mcmVlKGJ1Zik7Cit9CisKKyNlbmRpZiAvKiBEUk9QQkVBUl9SU0EgKi8KZGlmZiAtLWdpdCBhL2dlbnJzYS5oIGIvZ2VucnNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5ZjU3OQotLS0gL2Rldi9udWxsCisrKyBiL2dlbnJzYS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpZm5kZWYgX0dFTlJTQV9IXworI2RlZmluZSBfR0VOUlNBX0hfCisKKyNpbmNsdWRlICJyc2EuaCIKKworI2lmZGVmIERST1BCRUFSX1JTQQorCityc2Ffa2V5ICogZ2VuX3JzYV9wcml2X2tleSh1bnNpZ25lZCBpbnQgc2l6ZSk7CisKKyNlbmRpZiAvKiBEUk9QQkVBUl9SU0EgKi8KKworI2VuZGlmIC8qIF9HRU5SU0FfSF8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGVzLmggYi9pbmNsdWRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxN2RlNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlcy5oCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogRHJvcGJlYXIgLSBhIFNTSDIgc2VydmVyCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaWZuZGVmIF9JTkNMVURFU19IXworI2RlZmluZSBfSU5DTFVERVNfSF8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAib3B0aW9ucy5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4gLyogcmVxdWlyZWQgZm9yIEJTRDRfNCBkZWZpbmUgKi8KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxncnAuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzbG9nLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorCisjaWZkZWYgSEFWRV9VVE1QX0gKKyNpbmNsdWRlIDx1dG1wLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfVVRNUFhfSAorI2luY2x1ZGUgPHV0bXB4Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfUEFUSFNfSAorI2luY2x1ZGUgPHBhdGhzLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTEFTVExPR19ICisjaW5jbHVkZSA8bGFzdGxvZy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKy8qIG5ldGJzZCAxLjYgbmVlZHMgdGhpcyB0byBiZSBpbmNsdWRlZCBiZWZvcmUgbmV0aW5ldC9pcC5oIGZvciBzb21lCisgKiB1bmRvY3VtZW50ZWQgcmVhc29uICovCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX1NZU1RNX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKworI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTElCVVRJTF9ICisjaW5jbHVkZSA8bGlidXRpbC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0NSWVBUX0gKKyNpbmNsdWRlIDxjcnlwdC5oPgorI2VuZGlmCisKKyNpZm5kZWYgRElTQUJMRV9aTElCCisjaW5jbHVkZSA8emxpYi5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1VUSUxfSAorI2luY2x1ZGUgPHV0aWwuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TSEFET1dfSAorI2luY2x1ZGUgPHNoYWRvdy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0xJQkdFTl9ICisjaW5jbHVkZSA8bGliZ2VuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgImxpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0LmgiCisjaW5jbHVkZSAibGlidG9tbWF0aC90b21tYXRoLmgiCisKKyNpbmNsdWRlICJjb21wYXQuaCIKKyNpbmNsdWRlICJmYWtlLXJmYzI1NTMuaCIKKworI2lmbmRlZiBIQVZFX1VJTlQxNl9UCisjaWZuZGVmIEhBVkVfVV9JTlQxNl9UCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVfaW50MTZfdDsKKyNlbmRpZiAvKiBIQVZFX1VfSU5UMTZfVCAqLwordHlwZWRlZiB1X2ludDE2X3QgdWludDE2X3Q7CisjZW5kaWYgLyogSEFWRV9VSU5UMTZfVCAqLworCisjaWZuZGVmIExPR19BVVRIUFJJVgorI2RlZmluZSBMT0dfQVVUSFBSSVYgTE9HX0FVVEgKKyNlbmRpZgorCisvKiBzbyB3ZSBjYW4gYXZvaWQgd2FybmluZ3MgYWJvdXQgdW51c2VkIHBhcmFtcyAoaWUgaW4gc2lnbmFsIGhhbmRsZXJzIGV0YykgKi8KKyNpZmRlZiBVTlVTRUQgCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAKKyMgZGVmaW5lIFVOVVNFRCh4KSBVTlVTRURfICMjIHggX19hdHRyaWJ1dGVfXygodW51c2VkKSkgCisjZWxpZiBkZWZpbmVkKF9fTENMSU5UX18pIAorIyBkZWZpbmUgVU5VU0VEKHgpIC8qQHVudXNlZEAqLyB4IAorI2Vsc2UgCisjIGRlZmluZSBVTlVTRUQoeCkgeCAKKyNlbmRpZgorCisjZW5kaWYgLyogX0lOQ0xVREVTX0hfICovCmRpZmYgLS1naXQgYS9pbnN0YWxsLXNoIGIvaW5zdGFsbC1zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWRlMjM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5zdGFsbC1zaApAQCAtMCwwICsxLDI1MSBAQAorIyEvYmluL3NoCisjCisjIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQorIyBUaGlzIGNvbWVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCkuCisjCisjIENvcHlyaWdodCAxOTkxIGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAorIyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyMgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworIyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyMgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorIyB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZQorIyBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyMgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisjCisjIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50CisjIGBtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CisjIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KKyMgZnJvbSBzY3JhdGNoLiAgSXQgY2FuIG9ubHkgaW5zdGFsbCBvbmUgZmlsZSBhdCBhIHRpbWUsIGEgcmVzdHJpY3Rpb24KKyMgc2hhcmVkIHdpdGggbWFueSBPUydzIGluc3RhbGwgcHJvZ3JhbXMuCisKKworIyBzZXQgRE9JVFBST0cgdG8gZWNobyB0byB0ZXN0IHRoaXMgc2NyaXB0CisKKyMgRG9uJ3QgdXNlIDotIHNpbmNlIDQuM0JTRCBhbmQgZWFybGllciBzaGVsbHMgZG9uJ3QgbGlrZSBpdC4KK2RvaXQ9IiR7RE9JVFBST0ctfSIKKworCisjIHB1dCBpbiBhYnNvbHV0ZSBwYXRocyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtIGluIHlvdXIgcGF0aDsgb3IgdXNlIGVudi4gdmFycy4KKworbXZwcm9nPSIke01WUFJPRy1tdn0iCitjcHByb2c9IiR7Q1BQUk9HLWNwfSIKK2NobW9kcHJvZz0iJHtDSE1PRFBST0ctY2htb2R9IgorY2hvd25wcm9nPSIke0NIT1dOUFJPRy1jaG93bn0iCitjaGdycHByb2c9IiR7Q0hHUlBQUk9HLWNoZ3JwfSIKK3N0cmlwcHJvZz0iJHtTVFJJUFBST0ctc3RyaXB9Igorcm1wcm9nPSIke1JNUFJPRy1ybX0iCitta2RpcnByb2c9IiR7TUtESVJQUk9HLW1rZGlyfSIKKwordHJhbnNmb3JtYmFzZW5hbWU9IiIKK3RyYW5zZm9ybV9hcmc9IiIKK2luc3RjbWQ9IiRtdnByb2ciCitjaG1vZGNtZD0iJGNobW9kcHJvZyAwNzU1IgorY2hvd25jbWQ9IiIKK2NoZ3JwY21kPSIiCitzdHJpcGNtZD0iIgorcm1jbWQ9IiRybXByb2cgLWYiCittdmNtZD0iJG12cHJvZyIKK3NyYz0iIgorZHN0PSIiCitkaXJfYXJnPSIiCisKK3doaWxlIFsgeCIkMSIgIT0geCBdOyBkbworICAgIGNhc2UgJDEgaW4KKwktYykgaW5zdGNtZD0iJGNwcHJvZyIKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLWQpIGRpcl9hcmc9dHJ1ZQorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktbSkgY2htb2RjbWQ9IiRjaG1vZHByb2cgJDIiCisJICAgIHNoaWZ0CisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKKwkgICAgc2hpZnQKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJLWcpIGNoZ3JwY21kPSIkY2hncnBwcm9nICQyIgorCSAgICBzaGlmdAorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisKKwktcykgc3RyaXBjbWQ9IiRzdHJpcHByb2ciCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS10PSopIHRyYW5zZm9ybWFyZz1gZWNobyAkMSB8IHNlZCAncy8tdD0vLydgCisJICAgIHNoaWZ0CisJICAgIGNvbnRpbnVlOzsKKworCS1iPSopIHRyYW5zZm9ybWJhc2VuYW1lPWBlY2hvICQxIHwgc2VkICdzLy1iPS8vJ2AKKwkgICAgc2hpZnQKKwkgICAgY29udGludWU7OworCisJKikgIGlmIFsgeCIkc3JjIiA9IHggXQorCSAgICB0aGVuCisJCXNyYz0kMQorCSAgICBlbHNlCisJCSMgdGhpcyBjb2xvbiBpcyB0byB3b3JrIGFyb3VuZCBhIDM4NkJTRCAvYmluL3NoIGJ1ZworCQk6CisJCWRzdD0kMQorCSAgICBmaQorCSAgICBzaGlmdAorCSAgICBjb250aW51ZTs7CisgICAgZXNhYworZG9uZQorCitpZiBbIHgiJHNyYyIgPSB4IF0KK3RoZW4KKwllY2hvICJpbnN0YWxsOglubyBpbnB1dCBmaWxlIHNwZWNpZmllZCIKKwlleGl0IDEKK2Vsc2UKKwl0cnVlCitmaQorCitpZiBbIHgiJGRpcl9hcmciICE9IHggXTsgdGhlbgorCWRzdD0kc3JjCisJc3JjPSIiCisJCisJaWYgWyAtZCAkZHN0IF07IHRoZW4KKwkJaW5zdGNtZD06CisJCWNobW9kY21kPSIiCisJZWxzZQorCQlpbnN0Y21kPW1rZGlyCisJZmkKK2Vsc2UKKworIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGluc3RjbWQgJHNyYyAkZHN0dG1wIiBjb21tYW5kCisjIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkIAorIyBpZiAkc3JjIChhbmQgdGh1cyAkZHN0dG1wKSBjb250YWlucyAnKicuCisKKwlpZiBbIC1mICRzcmMgLW8gLWQgJHNyYyBdCisJdGhlbgorCQl0cnVlCisJZWxzZQorCQllY2hvICJpbnN0YWxsOiAgJHNyYyBkb2VzIG5vdCBleGlzdCIKKwkJZXhpdCAxCisJZmkKKwkKKwlpZiBbIHgiJGRzdCIgPSB4IF0KKwl0aGVuCisJCWVjaG8gImluc3RhbGw6CW5vIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIKKwkJZXhpdCAxCisJZWxzZQorCQl0cnVlCisJZmkKKworIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgaWYgeW91ciBzeXN0ZW0KKyMgZG9lcyBub3QgbGlrZSBkb3VibGUgc2xhc2hlcyBpbiBmaWxlbmFtZXMsIHlvdSBtYXkgbmVlZCB0byBhZGQgc29tZSBsb2dpYworCisJaWYgWyAtZCAkZHN0IF0KKwl0aGVuCisJCWRzdD0iJGRzdCIvYGJhc2VuYW1lICRzcmNgCisJZWxzZQorCQl0cnVlCisJZmkKK2ZpCisKKyMjIHRoaXMgc2VkIGNvbW1hbmQgZW11bGF0ZXMgdGhlIGRpcm5hbWUgY29tbWFuZAorZHN0ZGlyPWBlY2hvICRkc3QgfCBzZWQgLWUgJ3MsW14vXSokLCw7cywvJCwsO3MsXiQsLiwnYAorCisjIE1ha2Ugc3VyZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgZXhpc3RzLgorIyAgdGhpcyBwYXJ0IGlzIHRha2VuIGZyb20gTm9haCBGcmllZG1hbidzIG1raW5zdGFsbGRpcnMgc2NyaXB0CisKKyMgU2tpcCBsb3RzIG9mIHN0YXQgY2FsbHMgaW4gdGhlIHVzdWFsIGNhc2UuCitpZiBbICEgLWQgIiRkc3RkaXIiIF07IHRoZW4KK2RlZmF1bHRJRlM9JwkKKycKK0lGUz0iJHtJRlMtJHtkZWZhdWx0SUZTfX0iCisKK29JRlM9IiR7SUZTfSIKKyMgU29tZSBzaCdzIGNhbid0IGhhbmRsZSBJRlM9LyBmb3Igc29tZSByZWFzb24uCitJRlM9JyUnCitzZXQgLSBgZWNobyAke2RzdGRpcn0gfCBzZWQgLWUgJ3NAL0AlQGcnIC1lICdzQF4lQC9AJ2AKK0lGUz0iJHtvSUZTfSIKKworcGF0aGNvbXA9JycKKword2hpbGUgWyAkIyAtbmUgMCBdIDsgZG8KKwlwYXRoY29tcD0iJHtwYXRoY29tcH0kezF9IgorCXNoaWZ0CisKKwlpZiBbICEgLWQgIiR7cGF0aGNvbXB9IiBdIDsKKyAgICAgICAgdGhlbgorCQkkbWtkaXJwcm9nICIke3BhdGhjb21wfSIKKwllbHNlCisJCXRydWUKKwlmaQorCisJcGF0aGNvbXA9IiR7cGF0aGNvbXB9LyIKK2RvbmUKK2ZpCisKK2lmIFsgeCIkZGlyX2FyZyIgIT0geCBdCit0aGVuCisJJGRvaXQgJGluc3RjbWQgJGRzdCAmJgorCisJaWYgWyB4IiRjaG93bmNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG93bmNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaSAmJgorCWlmIFsgeCIkY2hncnBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hncnBjbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkgJiYKKwlpZiBbIHgiJHN0cmlwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJHN0cmlwY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpICYmCisJaWYgWyB4IiRjaG1vZGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaG1vZGNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaQorZWxzZQorCisjIElmIHdlJ3JlIGdvaW5nIHRvIHJlbmFtZSB0aGUgZmluYWwgZXhlY3V0YWJsZSwgZGV0ZXJtaW5lIHRoZSBuYW1lIG5vdy4KKworCWlmIFsgeCIkdHJhbnNmb3JtYXJnIiA9IHggXSAKKwl0aGVuCisJCWRzdGZpbGU9YGJhc2VuYW1lICRkc3RgCisJZWxzZQorCQlkc3RmaWxlPWBiYXNlbmFtZSAkZHN0ICR0cmFuc2Zvcm1iYXNlbmFtZSB8IAorCQkJc2VkICR0cmFuc2Zvcm1hcmdgJHRyYW5zZm9ybWJhc2VuYW1lCisJZmkKKworIyBkb24ndCBhbGxvdyB0aGUgc2VkIGNvbW1hbmQgdG8gY29tcGxldGVseSBlbGltaW5hdGUgdGhlIGZpbGVuYW1lCisKKwlpZiBbIHgiJGRzdGZpbGUiID0geCBdIAorCXRoZW4KKwkJZHN0ZmlsZT1gYmFzZW5hbWUgJGRzdGAKKwllbHNlCisJCXRydWUKKwlmaQorCisjIE1ha2UgYSB0ZW1wIGZpbGUgbmFtZSBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KKworCWRzdHRtcD0kZHN0ZGlyLyNpbnN0LiQkIworCisjIE1vdmUgb3IgY29weSB0aGUgZmlsZSBuYW1lIHRvIHRoZSB0ZW1wIG5hbWUKKworCSRkb2l0ICRpbnN0Y21kICRzcmMgJGRzdHRtcCAmJgorCisJdHJhcCAicm0gLWYgJHtkc3R0bXB9IiAwICYmCisKKyMgYW5kIHNldCBhbnkgb3B0aW9uczsgZG8gY2htb2QgbGFzdCB0byBwcmVzZXJ2ZSBzZXR1aWQgYml0cworCisjIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCisjIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKKyMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkaW5zdGNtZCAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisKKwlpZiBbIHgiJGNob3duY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNob3duY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgorCWlmIFsgeCIkY2hncnBjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hncnBjbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCisJaWYgWyB4IiRzdHJpcGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRzdHJpcGNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYKKwlpZiBbIHgiJGNobW9kY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNobW9kY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgorCisjIE5vdyByZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisKKwkkZG9pdCAkcm1jbWQgLWYgJGRzdGRpci8kZHN0ZmlsZSAmJgorCSRkb2l0ICRtdmNtZCAkZHN0dG1wICRkc3RkaXIvJGRzdGZpbGUgCisKK2ZpICYmCisKKworZXhpdCAwCmRpZmYgLS1naXQgYS9rZXguaCBiL2tleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0OGFkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9rZXguaApAQCAtMCwwICsxLDY0IEBACisvKgorICogRHJvcGJlYXIgLSBhIFNTSDIgc2VydmVyCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaWZuZGVmIF9LRVhfSF8KKyNkZWZpbmUgX0tFWF9IXworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJhbGdvLmgiCisKK3ZvaWQgc2VuZF9tc2dfa2V4aW5pdCgpOwordm9pZCByZWN2X21zZ19rZXhpbml0KCk7Cit2b2lkIHNlbmRfbXNnX25ld2tleXMoKTsKK3ZvaWQgcmVjdl9tc2dfbmV3a2V5cygpOwordm9pZCBrZXhmaXJzdGluaXRpYWxpc2UoKTsKK3ZvaWQgZ2VuX2tleGRoX3ZhbHMobXBfaW50ICpkaF9wdWIsIG1wX2ludCAqZGhfcHJpdik7Cit2b2lkIGtleGRoX2NvbWJfa2V5KG1wX2ludCAqZGhfcHViX3VzLCBtcF9pbnQgKmRoX3ByaXYsIG1wX2ludCAqZGhfcHViX3RoZW0sCisJCXNpZ25fa2V5ICpob3N0a2V5KTsKKwordm9pZCByZWN2X21zZ19rZXhkaF9pbml0KCk7IC8qIHNlcnZlciAqLworCit2b2lkIHNlbmRfbXNnX2tleGRoX2luaXQoKTsgLyogY2xpZW50ICovCit2b2lkIHJlY3ZfbXNnX2tleGRoX3JlcGx5KCk7IC8qIGNsaWVudCAqLworCitzdHJ1Y3QgS0VYU3RhdGUgeworCisJdW5zaWduZWQgc2VudGtleGluaXQgOiAxOyAvKnNldCB3aGVuIHdlJ3ZlIHNlbnQvcmVjdiBrZXhpbml0IHBhY2tldCAqLworCXVuc2lnbmVkIHJlY3ZrZXhpbml0IDogMTsKKwl1bnNpZ25lZCBmaXJzdGZvbGxvd3MgOiAxOyAvKiB0cnVlIHdoZW4gZmlyc3Rfa2V4X3BhY2tldF9mb2xsb3dzIGlzIHNldCAqLworCXVuc2lnbmVkIHNlbnRuZXdrZXlzIDogMTsgLyogc2V0IG9uY2Ugd2UndmUgc2VuZC9yZWN2J2VkIE1TR19ORVdLRVlTKi8KKwl1bnNpZ25lZCByZWN2bmV3a2V5cyA6IDE7CisKKwl1bnNpZ25lZCBkb25lZmlyc3RrZXggOiAxOyAvKiBTZXQgdG8gMSBhZnRlciB0aGUgZmlyc3Qga2V4IGhhcyBjb21wbGV0ZWQsCisJCQkJCQkJCSAgaWUgdGhlIHRyYW5zcG9ydCBsYXllciBoYXMgYmVlbiBzZXQgdXAgKi8KKworCWxvbmcgbGFzdGtleHRpbWU7IC8qIHRpbWUgb2YgdGhlIGxhc3Qga2V4ICovCisJdW5zaWduZWQgaW50IGRhdGF0cmFuczsgLyogZGF0YSB0cmFuc21pdHRlZCBzaW5jZSBsYXN0IGtleCAqLworCXVuc2lnbmVkIGludCBkYXRhcmVjdjsgLyogZGF0YSByZWNlaXZlZCBzaW5jZSBsYXN0IGtleCAqLworCit9OworCisjZGVmaW5lIE1BWF9LRVhIQVNIQlVGIDIwMDAKKworI2VuZGlmIC8qIF9LRVhfSF8gKi8KZGlmZiAtLWdpdCBhL2tleWltcG9ydC5jIGIva2V5aW1wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzZTNmNQotLS0gL2Rldi9udWxsCisrKyBiL2tleWltcG9ydC5jCkBAIC0wLDAgKzEsMTY5MyBAQAorLyoKKyAqIEJhc2VkIG9uIFB1VFRZJ3MgaW1wb3J0LmMgZm9yIGltcG9ydGluZy9leHBvcnRpbmcgT3BlblNTSCBhbmQgU1NILmNvbQorICoga2V5ZmlsZXMuCisgKgorICogVGhlIGhvcnJpYmxlbmVzcyBvZiB0aGUgY29kZSBpcyBwcm9iYWJseSBtaW5lIChtYXR0KS4KKyAqCisgKiBNb2RpZmljYXRpb25zIGNvcHlyaWdodCAyMDAzIE1hdHQgSm9obnN0b24KKyAqCisgKiBQdVRUWSBpcyBjb3B5cmlnaHQgMTk5Ny0yMDAzIFNpbW9uIFRhdGhhbS4KKyAqIAorICogUG9ydGlvbnMgY29weXJpZ2h0IFJvYmVydCBkZSBCYXRoLCBKb3JpcyB2YW4gUmFudHdpamssIERlbGlhbgorICogRGVsY2hldiwgQW5kcmVhcyBTY2h1bHR6LCBKZXJvZW4gTWFzc2FyLCBXZXogRnVybG9uZywgTmljb2xhcyBCYXJyeSwKKyAqIEp1c3RpbiBCcmFkZm9yZCwgYW5kIENPUkUgU0RJIFMuQS4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAqIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzCisgKiAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAorICogaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwKKyAqIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsCisgKiBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLAorICogc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgKiBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YKKyAqIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImtleWltcG9ydC5oIgorI2luY2x1ZGUgImJpZ251bS5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorCisjZGVmaW5lIFBVVF8zMkJJVChjcCwgdmFsdWUpIGRvIHsgXAorICAoY3ApWzNdID0gKHVuc2lnbmVkIGNoYXIpKHZhbHVlKTsgXAorICAoY3ApWzJdID0gKHVuc2lnbmVkIGNoYXIpKCh2YWx1ZSkgPj4gOCk7IFwKKyAgKGNwKVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgodmFsdWUpID4+IDE2KTsgXAorICAoY3ApWzBdID0gKHVuc2lnbmVkIGNoYXIpKCh2YWx1ZSkgPj4gMjQpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIEdFVF8zMkJJVChjcCkgXAorCSgoKHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGNoYXIpKGNwKVswXSA8PCAyNCkgfCBcCisJKCh1bnNpZ25lZCBsb25nKSh1bnNpZ25lZCBjaGFyKShjcClbMV0gPDwgMTYpIHwgXAorCSgodW5zaWduZWQgbG9uZykodW5zaWduZWQgY2hhcikoY3ApWzJdIDw8IDgpIHwgXAorCSgodW5zaWduZWQgbG9uZykodW5zaWduZWQgY2hhcikoY3ApWzNdKSkKKworc3RhdGljIGludCBvcGVuc3NoX2VuY3J5cHRlZChjb25zdCBjaGFyICpmaWxlbmFtZSk7CitzdGF0aWMgc2lnbl9rZXkgKm9wZW5zc2hfcmVhZChjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciAqcGFzc3BocmFzZSk7CitzdGF0aWMgaW50IG9wZW5zc2hfd3JpdGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIHNpZ25fa2V5ICprZXksCisJCQkJICBjaGFyICpwYXNzcGhyYXNlKTsKKworc3RhdGljIGludCBkcm9wYmVhcl93cml0ZShjb25zdCBjaGFyKmZpbGVuYW1lLCBzaWduX2tleSAqIGtleSk7CitzdGF0aWMgc2lnbl9rZXkgKmRyb3BiZWFyX3JlYWQoY29uc3QgY2hhciogZmlsZW5hbWUpOworCisjaWYgMAorc3RhdGljIGludCBzc2hjb21fZW5jcnlwdGVkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICoqY29tbWVudCk7CitzdGF0aWMgc3RydWN0IHNzaDJfdXNlcmtleSAqc3NoY29tX3JlYWQoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNoYXIgKnBhc3NwaHJhc2UpOworc3RhdGljIGludCBzc2hjb21fd3JpdGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBzc2gyX3VzZXJrZXkgKmtleSwKKwkJCQkgY2hhciAqcGFzc3BocmFzZSk7CisjZW5kaWYKKworaW50IGltcG9ydF9lbmNyeXB0ZWQoY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBmaWxldHlwZSkgeworCisJaWYgKGZpbGV0eXBlID09IEtFWUZJTEVfT1BFTlNTSCkgeworCQlyZXR1cm4gb3BlbnNzaF9lbmNyeXB0ZWQoZmlsZW5hbWUpOworI2lmIDAKKwl9IGVsc2UgaWYgKGZpbGV0eXBlID09IEtFWUZJTEVfU1NIQ09NKSB7CisJCXJldHVybiBzc2hjb21fZW5jcnlwdGVkKGZpbGVuYW1lLCBOVUxMKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gMDsKK30KKworc2lnbl9rZXkgKmltcG9ydF9yZWFkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICpwYXNzcGhyYXNlLCBpbnQgZmlsZXR5cGUpIHsKKworCWlmIChmaWxldHlwZSA9PSBLRVlGSUxFX09QRU5TU0gpIHsKKwkJcmV0dXJuIG9wZW5zc2hfcmVhZChmaWxlbmFtZSwgcGFzc3BocmFzZSk7CisJfSBlbHNlIGlmIChmaWxldHlwZSA9PSBLRVlGSUxFX0RST1BCRUFSKSB7CisJCXJldHVybiBkcm9wYmVhcl9yZWFkKGZpbGVuYW1lKTsKKyNpZiAwCisJfSBlbHNlIGlmIChmaWxldHlwZSA9PSBLRVlGSUxFX1NTSENPTSkgeworCQlyZXR1cm4gc3NoY29tX3JlYWQoZmlsZW5hbWUsIHBhc3NwaHJhc2UpOworI2VuZGlmCisJfQorCXJldHVybiBOVUxMOworfQorCitpbnQgaW1wb3J0X3dyaXRlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzaWduX2tleSAqa2V5LCBjaGFyICpwYXNzcGhyYXNlLAorCQlpbnQgZmlsZXR5cGUpIHsKKworCWlmIChmaWxldHlwZSA9PSBLRVlGSUxFX09QRU5TU0gpIHsKKwkJcmV0dXJuIG9wZW5zc2hfd3JpdGUoZmlsZW5hbWUsIGtleSwgcGFzc3BocmFzZSk7CisJfSBlbHNlIGlmIChmaWxldHlwZSA9PSBLRVlGSUxFX0RST1BCRUFSKSB7CisJCXJldHVybiBkcm9wYmVhcl93cml0ZShmaWxlbmFtZSwga2V5KTsKKyNpZiAwCisJfSBlbHNlIGlmIChmaWxldHlwZSA9PSBLRVlGSUxFX1NTSENPTSkgeworCQlyZXR1cm4gc3NoY29tX3dyaXRlKGZpbGVuYW1lLCBrZXksIHBhc3NwaHJhc2UpOworI2VuZGlmCisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc2lnbl9rZXkgKmRyb3BiZWFyX3JlYWQoY29uc3QgY2hhciogZmlsZW5hbWUpIHsKKworCWJ1ZmZlciAqIGJ1ZiA9IE5VTEw7CisJc2lnbl9rZXkgKnJldCA9IE5VTEw7CisJaW50IHR5cGU7CisKKwlidWYgPSBidWZfbmV3KE1BWF9QUklWS0VZX1NJWkUpOworCWlmIChidWZfcmVhZGZpbGUoYnVmLCBmaWxlbmFtZSkgPT0gRFJPUEJFQVJfRkFJTFVSRSkgeworCQlnb3RvIGVycm9yOworCX0KKworCWJ1Zl9zZXRwb3MoYnVmLCAwKTsKKwlyZXQgPSBuZXdfc2lnbl9rZXkoKTsKKworCXR5cGUgPSBEUk9QQkVBUl9TSUdOS0VZX0FOWTsKKwlpZiAoYnVmX2dldF9wcml2X2tleShidWYsIHJldCwgJnR5cGUpID09IERST1BCRUFSX0ZBSUxVUkUpeworCQlnb3RvIGVycm9yOworCX0KKwlidWZfZnJlZShidWYpOworCisJcmV0dXJuIHJldDsKKworZXJyb3I6CisJaWYgKGJ1ZikgeworCQlidWZfZnJlZShidWYpOworCX0KKwlpZiAocmV0KSB7CisJCXNpZ25fa2V5X2ZyZWUocmV0KTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIHJldHVybnMgMCBvbiBmYWlsLCAxIG9uIHN1Y2Nlc3MgKi8KK3N0YXRpYyBpbnQgZHJvcGJlYXJfd3JpdGUoY29uc3QgY2hhcipmaWxlbmFtZSwgc2lnbl9rZXkgKiBrZXkpIHsKKworCWludCBrZXl0eXBlID0gLTE7CisJYnVmZmVyICogYnVmOworCUZJTEUqZnA7CisJaW50IGxlbjsKKwlpbnQgcmV0OworCisjaWZkZWYgRFJPUEJFQVJfUlNBCisJaWYgKGtleS0+cnNha2V5ICE9IE5VTEwpIHsKKwkJa2V5dHlwZSA9IERST1BCRUFSX1NJR05LRVlfUlNBOworCX0KKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX0RTUworCWlmIChrZXktPmRzc2tleSAhPSBOVUxMKSB7CisJCWtleXR5cGUgPSBEUk9QQkVBUl9TSUdOS0VZX0RTUzsKKwl9CisjZW5kaWYKKworCWJ1ZiA9IGJ1Zl9uZXcoTUFYX1BSSVZLRVlfU0laRSk7CisJYnVmX3B1dF9wcml2X2tleShidWYsIGtleSwga2V5dHlwZSk7CisKKwlmcCA9IGZvcGVuKGZpbGVuYW1lLCAidyIpOworCWlmICghZnApIHsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJYnVmX3NldHBvcyhidWYsIDApOworCWRvIHsKKwkJbGVuID0gZndyaXRlKGJ1Zl9nZXRwdHIoYnVmLCBidWYtPmxlbiAtIGJ1Zi0+cG9zKSwKKwkJCQkxLCBidWYtPmxlbiAtIGJ1Zi0+cG9zLCBmcCk7CisJCWJ1Zl9pbmNycG9zKGJ1ZiwgbGVuKTsKKwl9IHdoaWxlIChsZW4gPiAwICYmIGJ1Zi0+bGVuICE9IGJ1Zi0+cG9zKTsKKworCWZjbG9zZShmcCk7CisKKwlpZiAoYnVmLT5wb3MgIT0gYnVmLT5sZW4pIHsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgeworCQlyZXQgPSAxOworCX0KK291dDoKKwlidWZfZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSGVscGVyIHJvdXRpbmVzLiAoVGhlIGJhc2U2NCBvbmVzIGFyZSBkZWZpbmVkIGluIHNzaHB1YmsuYy4pCisgKi8KKworI2RlZmluZSBpc2Jhc2U2NChjKSAoCSgoYykgPj0gJ0EnICYmIChjKSA8PSAnWicpIHx8IFwKKwkJCQkJCSAoKGMpID49ICdhJyAmJiAoYykgPD0gJ3onKSB8fCBcCisJCQkJCQkgKChjKSA+PSAnMCcgJiYgKGMpIDw9ICc5JykgfHwgXAorCQkJCQkJIChjKSA9PSAnKycgfHwgKGMpID09ICcvJyB8fCAoYykgPT0gJz0nIFwKKwkJCQkJCSApCisKKy8qIGNwbCBoYXMgdG8gYmUgbGVzcyB0aGFuIDEwMCAqLworc3RhdGljIHZvaWQgYmFzZTY0X2VuY29kZV9mcChGSUxFICogZnAsIHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCWludCBkYXRhbGVuLCBpbnQgY3BsKQoreworICAgIGNoYXIgb3V0WzEwMF07CisgICAgaW50IG47CisJdW5zaWduZWQgbG9uZyBvdXRsZW47CisJaW50IHJhd2NwbDsKKwlyYXdjcGwgPSBjcGwgKiAzIC8gNDsKKwlkcm9wYmVhcl9hc3NlcnQoKHVuc2lnbmVkIGludCljcGwgPCBzaXplb2Yob3V0KSk7CisKKyAgICB3aGlsZSAoZGF0YWxlbiA+IDApIHsKKwkJbiA9IChkYXRhbGVuIDwgcmF3Y3BsID8gZGF0YWxlbiA6IHJhd2NwbCk7CisJCW91dGxlbiA9IHNpemVvZihvdXQpOworCQliYXNlNjRfZW5jb2RlKGRhdGEsIG4sIG91dCwgJm91dGxlbik7CisJCWRhdGEgKz0gbjsKKwkJZGF0YWxlbiAtPSBuOworCQlmd3JpdGUob3V0LCAxLCBvdXRsZW4sIGZwKTsKKwkJZnB1dGMoJ1xuJywgZnApOworICAgIH0KK30KKy8qCisgKiBSZWFkIGFuIEFTTi4xL0JFUiBpZGVudGlmaWVyIGFuZCBsZW5ndGggcGFpci4KKyAqIAorICogRmxhZ3MgYXJlIGEgY29tYmluYXRpb24gb2YgdGhlICNkZWZpbmVzIGxpc3RlZCBiZWxvdy4KKyAqIAorICogUmV0dXJucyAtMSBpZiB1bnN1Y2Nlc3NmdWw7IG90aGVyd2lzZSByZXR1cm5zIHRoZSBudW1iZXIgb2YKKyAqIGJ5dGVzIHVzZWQgb3V0IG9mIHRoZSBzb3VyY2UgZGF0YS4KKyAqLworCisvKiBBU04uMSB0YWcgY2xhc3Nlcy4gKi8KKyNkZWZpbmUgQVNOMV9DTEFTU19VTklWRVJTQUwJCSgwIDw8IDYpCisjZGVmaW5lIEFTTjFfQ0xBU1NfQVBQTElDQVRJT04JICAoMSA8PCA2KQorI2RlZmluZSBBU04xX0NMQVNTX0NPTlRFWFRfU1BFQ0lGSUMgKDIgPDwgNikKKyNkZWZpbmUgQVNOMV9DTEFTU19QUklWQVRFCQkgICgzIDw8IDYpCisjZGVmaW5lIEFTTjFfQ0xBU1NfTUFTSwkJCSAoMyA8PCA2KQorCisvKiBQcmltaXRpdmUgdmVyc3VzIGNvbnN0cnVjdGVkIGJpdC4gKi8KKyNkZWZpbmUgQVNOMV9DT05TVFJVQ1RFRAkJCSgxIDw8IDUpCisKK3N0YXRpYyBpbnQgYmVyX3JlYWRfaWRfbGVuKHZvaWQgKnNvdXJjZSwgaW50IHNvdXJjZWxlbiwKKwkJCQkJCSAgIGludCAqaWQsIGludCAqbGVuZ3RoLCBpbnQgKmZsYWdzKQoreworCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSBzb3VyY2U7CisKKwlpZiAoc291cmNlbGVuID09IDApCisJCXJldHVybiAtMTsKKworCSpmbGFncyA9ICgqcCAmIDB4RTApOworCWlmICgoKnAgJiAweDFGKSA9PSAweDFGKSB7CisJCSppZCA9IDA7CisJCXdoaWxlICgqcCAmIDB4ODApIHsKKwkJCSppZCA9ICgqaWQgPDwgNykgfCAoKnAgJiAweDdGKTsKKwkJCXArKywgc291cmNlbGVuLS07CisJCQlpZiAoc291cmNlbGVuID09IDApCisJCQkJcmV0dXJuIC0xOworCQl9CisJCSppZCA9ICgqaWQgPDwgNykgfCAoKnAgJiAweDdGKTsKKwkJcCsrLCBzb3VyY2VsZW4tLTsKKwl9IGVsc2UgeworCQkqaWQgPSAqcCAmIDB4MUY7CisJCXArKywgc291cmNlbGVuLS07CisJfQorCisJaWYgKHNvdXJjZWxlbiA9PSAwKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoKnAgJiAweDgwKSB7CisJCWludCBuID0gKnAgJiAweDdGOworCQlwKyssIHNvdXJjZWxlbi0tOworCQlpZiAoc291cmNlbGVuIDwgbikKKwkJCXJldHVybiAtMTsKKwkJKmxlbmd0aCA9IDA7CisJCXdoaWxlIChuLS0pCisJCQkqbGVuZ3RoID0gKCpsZW5ndGggPDwgOCkgfCAoKnArKyk7CisJCXNvdXJjZWxlbiAtPSBuOworCX0gZWxzZSB7CisJCSpsZW5ndGggPSAqcDsKKwkJcCsrLCBzb3VyY2VsZW4tLTsKKwl9CisKKwlyZXR1cm4gcCAtICh1bnNpZ25lZCBjaGFyICopIHNvdXJjZTsKK30KKworLyoKKyAqIFdyaXRlIGFuIEFTTi4xL0JFUiBpZGVudGlmaWVyIGFuZCBsZW5ndGggcGFpci4gUmV0dXJucyB0aGUKKyAqIG51bWJlciBvZiBieXRlcyBjb25zdW1lZC4gQXNzdW1lcyBkZXN0IGNvbnRhaW5zIGVub3VnaCBzcGFjZS4KKyAqIFdpbGwgYXZvaWQgd3JpdGluZyBhbnl0aGluZyBpZiBkZXN0IGlzIE5VTEwsIGJ1dCBzdGlsbCByZXR1cm4KKyAqIGFtb3VudCBvZiBzcGFjZSByZXF1aXJlZC4KKyAqLworc3RhdGljIGludCBiZXJfd3JpdGVfaWRfbGVuKHZvaWQgKmRlc3QsIGludCBpZCwgaW50IGxlbmd0aCwgaW50IGZsYWdzKQoreworCXVuc2lnbmVkIGNoYXIgKmQgPSAodW5zaWduZWQgY2hhciAqKWRlc3Q7CisJaW50IGxlbiA9IDA7CisKKwlpZiAoaWQgPD0gMzApIHsKKwkJLyoKKwkJICogSWRlbnRpZmllciBpcyBvbmUgYnl0ZS4KKwkJICovCisJCWxlbisrOworCQlpZiAoZCkgKmQrKyA9IGlkIHwgZmxhZ3M7CisJfSBlbHNlIHsKKwkJaW50IG47CisJCS8qCisJCSAqIElkZW50aWZpZXIgaXMgbXVsdGlwbGUgYnl0ZXM6IHRoZSBmaXJzdCBieXRlIGlzIDExMTExCisJCSAqIHBsdXMgdGhlIGZsYWdzLCBhbmQgc3Vic2VxdWVudCBieXRlcyBlbmNvZGUgdGhlIHZhbHVlIG9mCisJCSAqIHRoZSBpZGVudGlmaWVyLCA3IGJpdHMgYXQgYSB0aW1lLCB3aXRoIHRoZSB0b3AgYml0IG9mCisJCSAqIGVhY2ggYnl0ZSAxIGV4Y2VwdCB0aGUgbGFzdCBvbmUgd2hpY2ggaXMgMC4KKwkJICovCisJCWxlbisrOworCQlpZiAoZCkgKmQrKyA9IDB4MUYgfCBmbGFnczsKKwkJZm9yIChuID0gMTsgKGlkID4+ICg3Km4pKSA+IDA7IG4rKykKKwkJCWNvbnRpbnVlOwkJCQkJICAgLyogY291bnQgdGhlIGJ5dGVzICovCisJCXdoaWxlIChuLS0pIHsKKwkJCWxlbisrOworCQkJaWYgKGQpICpkKysgPSAobiA/IDB4ODAgOiAwKSB8ICgoaWQgPj4gKDcqbikpICYgMHg3Rik7CisJCX0KKwl9CisKKwlpZiAobGVuZ3RoIDwgMTI4KSB7CisJCS8qCisJCSAqIExlbmd0aCBpcyBvbmUgYnl0ZS4KKwkJICovCisJCWxlbisrOworCQlpZiAoZCkgKmQrKyA9IGxlbmd0aDsKKwl9IGVsc2UgeworCQlpbnQgbjsKKwkJLyoKKwkJICogTGVuZ3RoIGlzIG11bHRpcGxlIGJ5dGVzLiBUaGUgZmlyc3QgaXMgMHg4MCBwbHVzIHRoZQorCQkgKiBudW1iZXIgb2Ygc3Vic2VxdWVudCBieXRlcywgYW5kIHRoZSBzdWJzZXF1ZW50IGJ5dGVzCisJCSAqIGVuY29kZSB0aGUgYWN0dWFsIGxlbmd0aC4KKwkJICovCisJCWZvciAobiA9IDE7IChsZW5ndGggPj4gKDgqbikpID4gMDsgbisrKQorCQkJY29udGludWU7CQkJCQkgICAvKiBjb3VudCB0aGUgYnl0ZXMgKi8KKwkJbGVuKys7CisJCWlmIChkKSAqZCsrID0gMHg4MCB8IG47CisJCXdoaWxlIChuLS0pIHsKKwkJCWxlbisrOworCQkJaWYgKGQpICpkKysgPSAobGVuZ3RoID4+ICg4Km4pKSAmIDB4RkY7CisJCX0KKwl9CisKKwlyZXR1cm4gbGVuOworfQorCisKKy8qIFNpbXBsZSBzdHJ1Y3R1cmUgdG8gcG9pbnQgdG8gYW4gbXAtaW50IHdpdGhpbiBhIGJsb2IuICovCitzdHJ1Y3QgbXBpbnRfcG9zIHsgdm9pZCAqc3RhcnQ7IGludCBieXRlczsgfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ29kZSB0byByZWFkIGFuZCB3cml0ZSBPcGVuU1NIIHByaXZhdGUga2V5cy4KKyAqLworCitlbnVtIHsgT1NTSF9EU0EsIE9TU0hfUlNBIH07CitzdHJ1Y3Qgb3BlbnNzaF9rZXkgeworCWludCB0eXBlOworCWludCBlbmNyeXB0ZWQ7CisJY2hhciBpdlszMl07CisJdW5zaWduZWQgY2hhciAqa2V5YmxvYjsKKwl1bnNpZ25lZCBpbnQga2V5YmxvYl9sZW4sIGtleWJsb2Jfc2l6ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb3BlbnNzaF9rZXkgKmxvYWRfb3BlbnNzaF9rZXkoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IG9wZW5zc2hfa2V5ICpyZXQ7CisJRklMRSAqZnAgPSBOVUxMOworCWNoYXIgYnVmZmVyWzI1Nl07CisJY2hhciAqZXJybXNnID0gTlVMTCwgKnAgPSBOVUxMOworCWludCBoZWFkZXJzX2RvbmU7CisJdW5zaWduZWQgbG9uZyBsZW4sIG91dGxlbjsKKworCXJldCA9IChzdHJ1Y3Qgb3BlbnNzaF9rZXkqKW1fbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3BlbnNzaF9rZXkpKTsKKwlyZXQtPmtleWJsb2IgPSBOVUxMOworCXJldC0+a2V5YmxvYl9sZW4gPSByZXQtPmtleWJsb2Jfc2l6ZSA9IDA7CisJcmV0LT5lbmNyeXB0ZWQgPSAwOworCW1lbXNldChyZXQtPml2LCAwLCBzaXplb2YocmV0LT5pdikpOworCisJaWYgKHN0cmxlbihmaWxlbmFtZSkgPT0gMSAmJiBmaWxlbmFtZVswXSA9PSAnLScpIHsKKwkJZnAgPSBzdGRpbjsKKwl9IGVsc2UgeworCQlmcCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOworCX0KKwlpZiAoIWZwKSB7CisJCWVycm1zZyA9ICJVbmFibGUgdG8gb3BlbiBrZXkgZmlsZSI7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmICghZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZnApIHx8CisJCTAgIT0gc3RybmNtcChidWZmZXIsICItLS0tLUJFR0lOICIsIDExKSB8fAorCQkwICE9IHN0cmNtcChidWZmZXIrc3RybGVuKGJ1ZmZlciktMTcsICJQUklWQVRFIEtFWS0tLS0tXG4iKSkgeworCQllcnJtc2cgPSAiRmlsZSBkb2VzIG5vdCBiZWdpbiB3aXRoIE9wZW5TU0gga2V5IGhlYWRlciI7CisJCWdvdG8gZXJyb3I7CisJfQorCWlmICghc3RyY21wKGJ1ZmZlciwgIi0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS1cbiIpKQorCQlyZXQtPnR5cGUgPSBPU1NIX1JTQTsKKwllbHNlIGlmICghc3RyY21wKGJ1ZmZlciwgIi0tLS0tQkVHSU4gRFNBIFBSSVZBVEUgS0VZLS0tLS1cbiIpKQorCQlyZXQtPnR5cGUgPSBPU1NIX0RTQTsKKwllbHNlIHsKKwkJZXJybXNnID0gIlVucmVjb2duaXNlZCBrZXkgdHlwZSI7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaGVhZGVyc19kb25lID0gMDsKKwl3aGlsZSAoMSkgeworCQlpZiAoIWZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZwKSkgeworCQkJZXJybXNnID0gIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlpZiAoMCA9PSBzdHJuY21wKGJ1ZmZlciwgIi0tLS0tRU5EICIsIDkpICYmCisJCQkwID09IHN0cmNtcChidWZmZXIrc3RybGVuKGJ1ZmZlciktMTcsICJQUklWQVRFIEtFWS0tLS0tXG4iKSkKKwkJCWJyZWFrOwkJCQkJICAgLyogZG9uZSAqLworCQlpZiAoKHAgPSBzdHJjaHIoYnVmZmVyLCAnOicpKSAhPSBOVUxMKSB7CisJCQlpZiAoaGVhZGVyc19kb25lKSB7CisJCQkJZXJybXNnID0gIkhlYWRlciBmb3VuZCBpbiBib2R5IG9mIGtleSBkYXRhIjsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJKnArKyA9ICdcMCc7CisJCQl3aGlsZSAoKnAgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpIHArKzsKKwkJCWlmICghc3RyY21wKGJ1ZmZlciwgIlByb2MtVHlwZSIpKSB7CisJCQkJaWYgKHBbMF0gIT0gJzQnIHx8IHBbMV0gIT0gJywnKSB7CisJCQkJCWVycm1zZyA9ICJQcm9jLVR5cGUgaXMgbm90IDQgKG9ubHkgNCBpcyBzdXBwb3J0ZWQpIjsKKwkJCQkJZ290byBlcnJvcjsKKwkJCQl9CisJCQkJcCArPSAyOworCQkJCWlmICghc3RyY21wKHAsICJFTkNSWVBURURcbiIpKQorCQkJCQlyZXQtPmVuY3J5cHRlZCA9IDE7CisJCQl9IGVsc2UgaWYgKCFzdHJjbXAoYnVmZmVyLCAiREVLLUluZm8iKSkgeworCQkJCWludCBpLCBqOworCisJCQkJaWYgKHN0cm5jbXAocCwgIkRFUy1FREUzLUNCQywiLCAxMykpIHsKKwkJCQkJZXJybXNnID0gIkNpcGhlcnMgb3RoZXIgdGhhbiBERVMtRURFMy1DQkMgbm90IHN1cHBvcnRlZCI7CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCQkJCXAgKz0gMTM7CisJCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJCQlpZiAoMSAhPSBzc2NhbmYocCwgIiUyeCIsICZqKSkKKwkJCQkJCWJyZWFrOworCQkJCQlyZXQtPml2W2ldID0gajsKKwkJCQkJcCArPSAyOworCQkJCX0KKwkJCQlpZiAoaSA8IDgpIHsKKwkJCQkJZXJybXNnID0gIkV4cGVjdGVkIDE2LWRpZ2l0IGl2IGluIERFSy1JbmZvIjsKKwkJCQkJZ290byBlcnJvcjsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQloZWFkZXJzX2RvbmUgPSAxOworCQkJbGVuID0gc3RybGVuKGJ1ZmZlcik7CisJCQlvdXRsZW4gPSBsZW4qNC8zOworCQkJaWYgKHJldC0+a2V5YmxvYl9sZW4gKyBvdXRsZW4gPiByZXQtPmtleWJsb2Jfc2l6ZSkgeworCQkJCXJldC0+a2V5YmxvYl9zaXplID0gcmV0LT5rZXlibG9iX2xlbiArIG91dGxlbiArIDI1NjsKKwkJCQlyZXQtPmtleWJsb2IgPSAodW5zaWduZWQgY2hhciopbV9yZWFsbG9jKHJldC0+a2V5YmxvYiwKKwkJCQkJCXJldC0+a2V5YmxvYl9zaXplKTsKKwkJCX0KKwkJCW91dGxlbiA9IHJldC0+a2V5YmxvYl9zaXplIC0gcmV0LT5rZXlibG9iX2xlbjsKKwkJCWlmIChiYXNlNjRfZGVjb2RlKGJ1ZmZlciwgbGVuLCAKKwkJCQkJCXJldC0+a2V5YmxvYiArIHJldC0+a2V5YmxvYl9sZW4sICZvdXRsZW4pICE9IENSWVBUX09LKXsKKwkJCQllcnJtc2cgPSAiRXJyb3IgZGVjb2RpbmcgYmFzZTY0IjsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJcmV0LT5rZXlibG9iX2xlbiArPSBvdXRsZW47CisJCX0KKwl9CisKKwlpZiAocmV0LT5rZXlibG9iX2xlbiA9PSAwIHx8ICFyZXQtPmtleWJsb2IpIHsKKwkJZXJybXNnID0gIktleSBib2R5IG5vdCBwcmVzZW50IjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlpZiAocmV0LT5lbmNyeXB0ZWQgJiYgcmV0LT5rZXlibG9iX2xlbiAlIDggIT0gMCkgeworCQllcnJtc2cgPSAiRW5jcnlwdGVkIGtleSBibG9iIGlzIG5vdCBhIG11bHRpcGxlIG9mIGNpcGhlciBibG9jayBzaXplIjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisJcmV0dXJuIHJldDsKKworCWVycm9yOgorCW1lbXNldChidWZmZXIsIDAsIHNpemVvZihidWZmZXIpKTsKKwlpZiAocmV0KSB7CisJCWlmIChyZXQtPmtleWJsb2IpIHsKKwkJCW1lbXNldChyZXQtPmtleWJsb2IsIDAsIHJldC0+a2V5YmxvYl9zaXplKTsKKwkJCW1fZnJlZShyZXQtPmtleWJsb2IpOworCQl9CisJCW1lbXNldCgmcmV0LCAwLCBzaXplb2YocmV0KSk7CisJCW1fZnJlZShyZXQpOworCX0KKwlpZiAoZnApIHsKKwkJZmNsb3NlKGZwKTsKKwl9CisJaWYgKGVycm1zZykgeworCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiAlc1xuIiwgZXJybXNnKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgb3BlbnNzaF9lbmNyeXB0ZWQoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IG9wZW5zc2hfa2V5ICprZXkgPSBsb2FkX29wZW5zc2hfa2V5KGZpbGVuYW1lKTsKKwlpbnQgcmV0OworCisJaWYgKCFrZXkpCisJCXJldHVybiAwOworCXJldCA9IGtleS0+ZW5jcnlwdGVkOworCW1lbXNldChrZXktPmtleWJsb2IsIDAsIGtleS0+a2V5YmxvYl9zaXplKTsKKwltX2ZyZWUoa2V5LT5rZXlibG9iKTsKKwltZW1zZXQoJmtleSwgMCwgc2l6ZW9mKGtleSkpOworCW1fZnJlZShrZXkpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzaWduX2tleSAqb3BlbnNzaF9yZWFkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICpwYXNzcGhyYXNlKQoreworCXN0cnVjdCBvcGVuc3NoX2tleSAqa2V5OworCXVuc2lnbmVkIGNoYXIgKnA7CisJaW50IHJldCwgaWQsIGxlbiwgZmxhZ3M7CisJaW50IGksIG51bV9pbnRlZ2VycyA9IDA7CisJc2lnbl9rZXkgKnJldHZhbCA9IE5VTEw7CisJY2hhciAqZXJybXNnOworCWNoYXIgKm1vZHB0ciA9IE5VTEw7CisJaW50IG1vZGxlbiA9IC05OTk5OworCWludCB0eXBlOworCisJc2lnbl9rZXkgKnJldGtleTsKKwlidWZmZXIgKiBibG9iYnVmID0gTlVMTDsKKworCWtleSA9IGxvYWRfb3BlbnNzaF9rZXkoZmlsZW5hbWUpOworCisJaWYgKCFrZXkpCisJCXJldHVybiBOVUxMOworCisJaWYgKGtleS0+ZW5jcnlwdGVkKSB7CisJCWVycm1zZyA9ICJlbmNyeXB0ZWQga2V5cyBub3Qgc3VwcG9ydGVkIGN1cnJlbnRseSI7CisJCWdvdG8gZXJyb3I7CisjaWYgMAorCQkvKiBtYXR0IFRPRE8gKi8KKwkJLyoKKwkJICogRGVyaXZlIGVuY3J5cHRpb24ga2V5IGZyb20gcGFzc3BocmFzZSBhbmQgaXYvc2FsdDoKKwkJICogCisJCSAqICAtIGxldCBibG9jayBBIGVxdWFsIE1ENShwYXNzcGhyYXNlIHx8IGl2KQorCQkgKiAgLSBsZXQgYmxvY2sgQiBlcXVhbCBNRDUoQSB8fCBwYXNzcGhyYXNlIHx8IGl2KQorCQkgKiAgLSBibG9jayBDIHdvdWxkIGJlIE1ENShCIHx8IHBhc3NwaHJhc2UgfHwgaXYpIGFuZCBzbyBvbgorCQkgKiAgLSBlbmNyeXB0aW9uIGtleSBpcyB0aGUgZmlyc3QgTiBieXRlcyBvZiBBIHx8IEIKKwkJICovCisJCXN0cnVjdCBNRDVDb250ZXh0IG1kNWM7CisJCXVuc2lnbmVkIGNoYXIga2V5YnVmWzMyXTsKKworCQlNRDVJbml0KCZtZDVjKTsKKwkJTUQ1VXBkYXRlKCZtZDVjLCAodW5zaWduZWQgY2hhciAqKXBhc3NwaHJhc2UsIHN0cmxlbihwYXNzcGhyYXNlKSk7CisJCU1ENVVwZGF0ZSgmbWQ1YywgKHVuc2lnbmVkIGNoYXIgKilrZXktPml2LCA4KTsKKwkJTUQ1RmluYWwoa2V5YnVmLCAmbWQ1Yyk7CisKKwkJTUQ1SW5pdCgmbWQ1Yyk7CisJCU1ENVVwZGF0ZSgmbWQ1Yywga2V5YnVmLCAxNik7CisJCU1ENVVwZGF0ZSgmbWQ1YywgKHVuc2lnbmVkIGNoYXIgKilwYXNzcGhyYXNlLCBzdHJsZW4ocGFzc3BocmFzZSkpOworCQlNRDVVcGRhdGUoJm1kNWMsICh1bnNpZ25lZCBjaGFyICopa2V5LT5pdiwgOCk7CisJCU1ENUZpbmFsKGtleWJ1ZisxNiwgJm1kNWMpOworCisJCS8qCisJCSAqIE5vdyBkZWNyeXB0IHRoZSBrZXkgYmxvYi4KKwkJICovCisJCWRlczNfZGVjcnlwdF9wdWJrZXlfb3NzaChrZXlidWYsICh1bnNpZ25lZCBjaGFyICopa2V5LT5pdiwKKwkJCQkJCQkJIGtleS0+a2V5YmxvYiwga2V5LT5rZXlibG9iX2xlbik7CisKKwkJbWVtc2V0KCZtZDVjLCAwLCBzaXplb2YobWQ1YykpOworCQltZW1zZXQoa2V5YnVmLCAwLCBzaXplb2Yoa2V5YnVmKSk7CisjZW5kaWYgCisJfQorCisJLyoKKwkgKiBOb3cgd2UgaGF2ZSBhIGRlY3J5cHRlZCBrZXkgYmxvYiwgd2hpY2ggY29udGFpbnMgYW4gQVNOLjEKKwkgKiBlbmNvZGVkIHByaXZhdGUga2V5LiBXZSBtdXN0IG5vdyB1bnRhbmdsZSB0aGUgQVNOLjEuCisJICoKKwkgKiBXZSBleHBlY3QgdGhlIHdob2xlIGtleSBibG9iIHRvIGJlIGZvcm1hdHRlZCBhcyBhIFNFUVVFTkNFCisJICogKDB4MzAgZm9sbG93ZWQgYnkgYSBsZW5ndGggY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIHJlc3Qgb2YKKwkgKiB0aGUgYmxvYiBpcyBwYXJ0IG9mIHRoZSBzZXF1ZW5jZSkuIFdpdGhpbiB0aGF0IFNFUVVFTkNFIHdlCisJICogZXhwZWN0IHRvIHNlZSBhIGJ1bmNoIG9mIElOVEVHRVJzLiBXaGF0IHRob3NlIGludGVnZXJzIG1lYW4KKwkgKiBkZXBlbmRzIG9uIHRoZSBrZXkgdHlwZToKKwkgKgorCSAqICAtIEZvciBSU0EsIHdlIGV4cGVjdCB0aGUgaW50ZWdlcnMgdG8gYmUgMCwgbiwgZSwgZCwgcCwgcSwKKwkgKglkbXAxLCBkbXExLCBpcW1wIGluIHRoYXQgb3JkZXIuIChUaGUgbGFzdCB0aHJlZSBhcmUgZCBtb2QKKwkgKgkocC0xKSwgZCBtb2QgKHEtMSksIGludmVyc2Ugb2YgcSBtb2QgcCByZXNwZWN0aXZlbHkuKQorCSAqCisJICogIC0gRm9yIERTQSwgd2UgZXhwZWN0IHRoZW0gdG8gYmUgMCwgcCwgcSwgZywgeSwgeCBpbiB0aGF0CisJICoJb3JkZXIuCisJICovCisJCisJcCA9IGtleS0+a2V5YmxvYjsKKworCS8qIEV4cGVjdCB0aGUgU0VRVUVOQ0UgaGVhZGVyLiBUYWtlIGl0cyBhYnNlbmNlIGFzIGEgZmFpbHVyZSB0byBkZWNyeXB0LiAqLworCXJldCA9IGJlcl9yZWFkX2lkX2xlbihwLCBrZXktPmtleWJsb2JfbGVuLCAmaWQsICZsZW4sICZmbGFncyk7CisJcCArPSByZXQ7CisJaWYgKHJldCA8IDAgfHwgaWQgIT0gMTYpIHsKKwkJZXJybXNnID0gIkFTTi4xIGRlY29kaW5nIGZhaWx1cmUgLSB3cm9uZyBwYXNzd29yZD8iOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIEV4cGVjdCBhIGxvYWQgb2YgSU5URUdFUnMuICovCisJaWYgKGtleS0+dHlwZSA9PSBPU1NIX1JTQSkKKwkJbnVtX2ludGVnZXJzID0gOTsKKwllbHNlIGlmIChrZXktPnR5cGUgPT0gT1NTSF9EU0EpCisJCW51bV9pbnRlZ2VycyA9IDY7CisKKwkvKgorCSAqIFNwYWNlIHRvIGNyZWF0ZSBrZXkgYmxvYiBpbi4KKwkgKi8KKwlibG9iYnVmID0gYnVmX25ldygzMDAwKTsKKworCWlmIChrZXktPnR5cGUgPT0gT1NTSF9EU0EpIHsKKwkJYnVmX3B1dHN0cmluZyhibG9iYnVmLCAic3NoLWRzcyIsIDcpOworCX0gZWxzZSBpZiAoa2V5LT50eXBlID09IE9TU0hfUlNBKSB7CisJCWJ1Zl9wdXRzdHJpbmcoYmxvYmJ1ZiwgInNzaC1yc2EiLCA3KTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2ludGVnZXJzOyBpKyspIHsKKwkJcmV0ID0gYmVyX3JlYWRfaWRfbGVuKHAsIGtleS0+a2V5YmxvYitrZXktPmtleWJsb2JfbGVuLXAsCisJCQkJCQkJICAmaWQsICZsZW4sICZmbGFncyk7CisJCXAgKz0gcmV0OworCQlpZiAocmV0IDwgMCB8fCBpZCAhPSAyIHx8CisJCQlrZXktPmtleWJsb2Ira2V5LT5rZXlibG9iX2xlbi1wIDwgbGVuKSB7CisJCQllcnJtc2cgPSAiQVNOLjEgZGVjb2RpbmcgZmFpbHVyZSI7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJaWYgKGkgPT0gMCkgeworCQkJLyoKKwkJCSAqIFRoZSBmaXJzdCBpbnRlZ2VyIHNob3VsZCBiZSB6ZXJvIGFsd2F5cyAoSSB0aGluaworCQkJICogdGhpcyBpcyBzb21lIHNvcnQgb2YgdmVyc2lvbiBpbmRpY2F0aW9uKS4KKwkJCSAqLworCQkJaWYgKGxlbiAhPSAxIHx8IHBbMF0gIT0gMCkgeworCQkJCWVycm1zZyA9ICJWZXJzaW9uIG51bWJlciBtaXNtYXRjaCI7CisJCQkJZ290byBlcnJvcjsKKwkJCX0KKwkJfSBlbHNlIGlmIChrZXktPnR5cGUgPT0gT1NTSF9SU0EpIHsKKwkJCS8qCisJCQkgKiBPcGVuU1NIIGtleSBvcmRlciBpcyBuLCBlLCBkLCBwLCBxLCBkbXAxLCBkbXExLCBpcW1wCisJCQkgKiBidXQgd2Ugd2FudCBlLCBuLCBkLCBwLCBxCisJCQkgKi8KKwkJCWlmIChpID09IDEpIHsKKwkJCQkvKiBTYXZlIHRoZSBkZXRhaWxzIGZvciBhZnRlciB3ZSBkZWFsIHdpdGggbnVtYmVyIDIuICovCisJCQkJbW9kcHRyID0gKGNoYXIgKilwOworCQkJCW1vZGxlbiA9IGxlbjsKKwkJCX0gZWxzZSBpZiAoaSA+PSAyICYmIGkgPD0gNSkgeworCQkJCWJ1Zl9wdXRzdHJpbmcoYmxvYmJ1ZiwgcCwgbGVuKTsKKwkJCQlpZiAoaSA9PSAyKSB7CisJCQkJCWJ1Zl9wdXRzdHJpbmcoYmxvYmJ1ZiwgbW9kcHRyLCBtb2RsZW4pOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmIChrZXktPnR5cGUgPT0gT1NTSF9EU0EpIHsKKwkJCS8qCisJCQkgKiBPcGVuU1NIIGtleSBvcmRlciBpcyBwLCBxLCBnLCB5LCB4LAorCQkJICogd2Ugd2FudCB0aGUgc2FtZS4KKwkJCSAqLworCQkJYnVmX3B1dHN0cmluZyhibG9iYnVmLCBwLCBsZW4pOworCQl9CisKKwkJLyogU2tpcCBwYXN0IHRoZSBudW1iZXIuICovCisJCXAgKz0gbGVuOworCX0KKworCS8qCisJICogTm93IHB1dCB0b2dldGhlciB0aGUgYWN0dWFsIGtleS4gU2ltcGxlc3Qgd2F5IHRvIGRvIHRoaXMgaXMKKwkgKiB0byBhc3NlbWJsZSBvdXIgb3duIGtleSBibG9icyBhbmQgZmVlZCB0aGVtIHRvIHRoZSBjcmVhdGVrZXkKKwkgKiBmdW5jdGlvbnM7IHRoaXMgaXMgYSBiaXQgZmFmZnkgYnV0IGl0IGRvZXMgbWVhbiB3ZSBnZXQgYWxsCisJICogdGhlIHNhbml0eSBjaGVja3MgZm9yIGZyZWUuCisJICovCisJcmV0a2V5ID0gbmV3X3NpZ25fa2V5KCk7CisJYnVmX3NldHBvcyhibG9iYnVmLCAwKTsKKwl0eXBlID0gRFJPUEJFQVJfU0lHTktFWV9BTlk7CisJaWYgKGJ1Zl9nZXRfcHJpdl9rZXkoYmxvYmJ1ZiwgcmV0a2V5LCAmdHlwZSkKKwkJCSE9IERST1BCRUFSX1NVQ0NFU1MpIHsKKwkJZXJybXNnID0gInVuYWJsZSB0byBjcmVhdGUga2V5IHN0cnVjdHVyZSI7CisJCXNpZ25fa2V5X2ZyZWUocmV0a2V5KTsKKwkJcmV0a2V5ID0gTlVMTDsKKwkJZ290byBlcnJvcjsKKwl9CisKKwllcnJtc2cgPSBOVUxMOwkJCQkJIC8qIG5vIGVycm9yICovCisJcmV0dmFsID0gcmV0a2V5OworCisJZXJyb3I6CisJaWYgKGJsb2JidWYpIHsKKwkJYnVmX2J1cm4oYmxvYmJ1Zik7CisJCWJ1Zl9mcmVlKGJsb2JidWYpOworCX0KKwltX2J1cm4oa2V5LT5rZXlibG9iLCBrZXktPmtleWJsb2Jfc2l6ZSk7CisJbV9mcmVlKGtleS0+a2V5YmxvYik7CisJbV9idXJuKGtleSwgc2l6ZW9mKGtleSkpOworCW1fZnJlZShrZXkpOworCWlmIChlcnJtc2cpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogJXNcbiIsIGVycm1zZyk7CisJfQorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgb3BlbnNzaF93cml0ZShjb25zdCBjaGFyICpmaWxlbmFtZSwgc2lnbl9rZXkgKmtleSwKKwkJCQkgIGNoYXIgKnBhc3NwaHJhc2UpCit7CisJYnVmZmVyICoga2V5YmxvYiA9IE5VTEw7CisJYnVmZmVyICogZXh0cmFibG9iID0gTlVMTDsgLyogdXNlZCBmb3IgY2FsY3VsYXRlZCB2YWx1ZXMgdG8gd3JpdGUgKi8KKwl1bnNpZ25lZCBjaGFyICpvdXRibG9iID0gTlVMTDsKKwlpbnQgb3V0bGVuID0gLTk5OTk7CisJc3RydWN0IG1waW50X3BvcyBudW1iZXJzWzldOworCWludCBubnVtYmVycyA9IC0xLCBwb3MsIGxlbiwgc2VxbGVuLCBpOworCWNoYXIgKmhlYWRlciA9IE5VTEwsICpmb290ZXIgPSBOVUxMOworCWNoYXIgemVyb1sxXTsKKwl1bnNpZ25lZCBjaGFyIGl2WzhdOworCWludCByZXQgPSAwOworCUZJTEUgKmZwOworCWludCBrZXl0eXBlID0gLTE7CisKKyNpZmRlZiBEUk9QQkVBUl9SU0EKKwltcF9pbnQgZG1wMSwgZG1xMSwgaXFtcCwgdG1wdmFsOyAvKiBmb3IgcnNhICovCisKKwlpZiAoa2V5LT5yc2FrZXkgIT0gTlVMTCkgeworCQlrZXl0eXBlID0gRFJPUEJFQVJfU0lHTktFWV9SU0E7CisJfQorI2VuZGlmCisjaWZkZWYgRFJPUEJFQVJfRFNTCisJaWYgKGtleS0+ZHNza2V5ICE9IE5VTEwpIHsKKwkJa2V5dHlwZSA9IERST1BCRUFSX1NJR05LRVlfRFNTOworCX0KKyNlbmRpZgorCisJZHJvcGJlYXJfYXNzZXJ0KGtleXR5cGUgIT0gLTEpOworCisJLyoKKwkgKiBGZXRjaCB0aGUga2V5IGJsb2JzLgorCSAqLworCWtleWJsb2IgPSBidWZfbmV3KDMwMDApOworCWJ1Zl9wdXRfcHJpdl9rZXkoa2V5YmxvYiwga2V5LCBrZXl0eXBlKTsKKworCWJ1Zl9zZXRwb3Moa2V5YmxvYiwgMCk7CisJLyogc2tpcCB0aGUgInNzaC1yc2EiIG9yICJzc2gtZHNzIiBoZWFkZXIgKi8KKwlidWZfaW5jcnBvcyhrZXlibG9iLCBidWZfZ2V0aW50KGtleWJsb2IpKTsKKworCS8qCisJICogRmluZCB0aGUgc2VxdWVuY2Ugb2YgaW50ZWdlcnMgdG8gYmUgZW5jb2RlZCBpbnRvIHRoZSBPcGVuU1NICisJICoga2V5IGJsb2IsIGFuZCBhbHNvIGRlY2lkZSBvbiB0aGUgaGVhZGVyIGxpbmUuCisJICovCisJbnVtYmVyc1swXS5zdGFydCA9IHplcm87IG51bWJlcnNbMF0uYnl0ZXMgPSAxOyB6ZXJvWzBdID0gJ1wwJzsKKworI2lmZGVmIERST1BCRUFSX1JTQQorCWlmIChrZXl0eXBlID09IERST1BCRUFSX1NJR05LRVlfUlNBKSB7CisKKwkJaWYgKGtleS0+cnNha2V5LT5wID09IE5VTEwgfHwga2V5LT5yc2FrZXktPnEgPT0gTlVMTCkgeworCQkJZnByaW50ZihzdGRlcnIsICJQcmUtMC4zMyBEcm9wYmVhciBrZXlzIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gT3BlblNTSCBrZXlzLlxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJLyogZSAqLworCQludW1iZXJzWzJdLmJ5dGVzID0gYnVmX2dldGludChrZXlibG9iKTsKKwkJbnVtYmVyc1syXS5zdGFydCA9IGJ1Zl9nZXRwdHIoa2V5YmxvYiwgbnVtYmVyc1syXS5ieXRlcyk7CisJCWJ1Zl9pbmNycG9zKGtleWJsb2IsIG51bWJlcnNbMl0uYnl0ZXMpOworCQkKKwkJLyogbiAqLworCQludW1iZXJzWzFdLmJ5dGVzID0gYnVmX2dldGludChrZXlibG9iKTsKKwkJbnVtYmVyc1sxXS5zdGFydCA9IGJ1Zl9nZXRwdHIoa2V5YmxvYiwgbnVtYmVyc1sxXS5ieXRlcyk7CisJCWJ1Zl9pbmNycG9zKGtleWJsb2IsIG51bWJlcnNbMV0uYnl0ZXMpOworCQkKKwkJLyogZCAqLworCQludW1iZXJzWzNdLmJ5dGVzID0gYnVmX2dldGludChrZXlibG9iKTsKKwkJbnVtYmVyc1szXS5zdGFydCA9IGJ1Zl9nZXRwdHIoa2V5YmxvYiwgbnVtYmVyc1szXS5ieXRlcyk7CisJCWJ1Zl9pbmNycG9zKGtleWJsb2IsIG51bWJlcnNbM10uYnl0ZXMpOworCQkKKwkJLyogcCAqLworCQludW1iZXJzWzRdLmJ5dGVzID0gYnVmX2dldGludChrZXlibG9iKTsKKwkJbnVtYmVyc1s0XS5zdGFydCA9IGJ1Zl9nZXRwdHIoa2V5YmxvYiwgbnVtYmVyc1s0XS5ieXRlcyk7CisJCWJ1Zl9pbmNycG9zKGtleWJsb2IsIG51bWJlcnNbNF0uYnl0ZXMpOworCQkKKwkJLyogcSAqLworCQludW1iZXJzWzVdLmJ5dGVzID0gYnVmX2dldGludChrZXlibG9iKTsKKwkJbnVtYmVyc1s1XS5zdGFydCA9IGJ1Zl9nZXRwdHIoa2V5YmxvYiwgbnVtYmVyc1s1XS5ieXRlcyk7CisJCWJ1Zl9pbmNycG9zKGtleWJsb2IsIG51bWJlcnNbNV0uYnl0ZXMpOworCisJCS8qIG5vdyBjYWxjdWxhdGUgc29tZSBleHRyYSBwYXJhbWV0ZXJzOiAqLworCQltX21wX2luaXQoJnRtcHZhbCk7CisJCW1fbXBfaW5pdCgmZG1wMSk7CisJCW1fbXBfaW5pdCgmZG1xMSk7CisJCW1fbXBfaW5pdCgmaXFtcCk7CisKKwkJLyogZG1wMSA9IGQgbW9kIChwLTEpICovCisJCWlmIChtcF9zdWJfZChrZXktPnJzYWtleS0+cCwgMSwgJnRtcHZhbCkgIT0gTVBfT0tBWSkgeworCQkJZnByaW50ZihzdGRlcnIsICJCaWdudW0gZXJyb3IgZm9yIHAtMVxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisJCWlmIChtcF9tb2Qoa2V5LT5yc2FrZXktPmQsICZ0bXB2YWwsICZkbXAxKSAhPSBNUF9PS0FZKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkJpZ251bSBlcnJvciBmb3IgZG1wMVxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJLyogZG1xMSA9IGQgbW9kIChxLTEpICovCisJCWlmIChtcF9zdWJfZChrZXktPnJzYWtleS0+cSwgMSwgJnRtcHZhbCkgIT0gTVBfT0tBWSkgeworCQkJZnByaW50ZihzdGRlcnIsICJCaWdudW0gZXJyb3IgZm9yIHEtMVxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisJCWlmIChtcF9tb2Qoa2V5LT5yc2FrZXktPmQsICZ0bXB2YWwsICZkbXExKSAhPSBNUF9PS0FZKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIkJpZ251bSBlcnJvciBmb3IgZG1xMVxuIik7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJLyogaXFtcCA9IChxXi0xKSBtb2QgcCAqLworCQlpZiAobXBfaW52bW9kKGtleS0+cnNha2V5LT5xLCBrZXktPnJzYWtleS0+cCwgJmlxbXApICE9IE1QX09LQVkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQmlnbnVtIGVycm9yIGZvciBpcW1wXG4iKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlleHRyYWJsb2IgPSBidWZfbmV3KDIwMDApOworCQlidWZfcHV0bXBpbnQoZXh0cmFibG9iLCAmZG1wMSk7CisJCWJ1Zl9wdXRtcGludChleHRyYWJsb2IsICZkbXExKTsKKwkJYnVmX3B1dG1waW50KGV4dHJhYmxvYiwgJmlxbXApOworCQlidWZfc2V0cG9zKGV4dHJhYmxvYiwgMCk7CisJCW1wX2NsZWFyKCZkbXAxKTsKKwkJbXBfY2xlYXIoJmRtcTEpOworCQltcF9jbGVhcigmaXFtcCk7CisJCW1wX2NsZWFyKCZ0bXB2YWwpOworCQkKKwkJLyogZG1wMSAqLworCQludW1iZXJzWzZdLmJ5dGVzID0gYnVmX2dldGludChleHRyYWJsb2IpOworCQludW1iZXJzWzZdLnN0YXJ0ID0gYnVmX2dldHB0cihleHRyYWJsb2IsIG51bWJlcnNbNl0uYnl0ZXMpOworCQlidWZfaW5jcnBvcyhleHRyYWJsb2IsIG51bWJlcnNbNl0uYnl0ZXMpOworCQkKKwkJLyogZG1xMSAqLworCQludW1iZXJzWzddLmJ5dGVzID0gYnVmX2dldGludChleHRyYWJsb2IpOworCQludW1iZXJzWzddLnN0YXJ0ID0gYnVmX2dldHB0cihleHRyYWJsb2IsIG51bWJlcnNbN10uYnl0ZXMpOworCQlidWZfaW5jcnBvcyhleHRyYWJsb2IsIG51bWJlcnNbN10uYnl0ZXMpOworCQkKKwkJLyogaXFtcCAqLworCQludW1iZXJzWzhdLmJ5dGVzID0gYnVmX2dldGludChleHRyYWJsb2IpOworCQludW1iZXJzWzhdLnN0YXJ0ID0gYnVmX2dldHB0cihleHRyYWJsb2IsIG51bWJlcnNbOF0uYnl0ZXMpOworCQlidWZfaW5jcnBvcyhleHRyYWJsb2IsIG51bWJlcnNbOF0uYnl0ZXMpOworCisJCW5udW1iZXJzID0gOTsKKwkJaGVhZGVyID0gIi0tLS0tQkVHSU4gUlNBIFBSSVZBVEUgS0VZLS0tLS1cbiI7CisJCWZvb3RlciA9ICItLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLVxuIjsKKwl9CisjZW5kaWYgLyogRFJPUEJFQVJfUlNBICovCisKKyNpZmRlZiBEUk9QQkVBUl9EU1MKKwlpZiAoa2V5dHlwZSA9PSBEUk9QQkVBUl9TSUdOS0VZX0RTUykgeworCisJCS8qIHAgKi8KKwkJbnVtYmVyc1sxXS5ieXRlcyA9IGJ1Zl9nZXRpbnQoa2V5YmxvYik7CisJCW51bWJlcnNbMV0uc3RhcnQgPSBidWZfZ2V0cHRyKGtleWJsb2IsIG51bWJlcnNbMV0uYnl0ZXMpOworCQlidWZfaW5jcnBvcyhrZXlibG9iLCBudW1iZXJzWzFdLmJ5dGVzKTsKKworCQkvKiBxICovCisJCW51bWJlcnNbMl0uYnl0ZXMgPSBidWZfZ2V0aW50KGtleWJsb2IpOworCQludW1iZXJzWzJdLnN0YXJ0ID0gYnVmX2dldHB0cihrZXlibG9iLCBudW1iZXJzWzJdLmJ5dGVzKTsKKwkJYnVmX2luY3Jwb3Moa2V5YmxvYiwgbnVtYmVyc1syXS5ieXRlcyk7CisKKwkJLyogZyAqLworCQludW1iZXJzWzNdLmJ5dGVzID0gYnVmX2dldGludChrZXlibG9iKTsKKwkJbnVtYmVyc1szXS5zdGFydCA9IGJ1Zl9nZXRwdHIoa2V5YmxvYiwgbnVtYmVyc1szXS5ieXRlcyk7CisJCWJ1Zl9pbmNycG9zKGtleWJsb2IsIG51bWJlcnNbM10uYnl0ZXMpOworCisJCS8qIHkgKi8KKwkJbnVtYmVyc1s0XS5ieXRlcyA9IGJ1Zl9nZXRpbnQoa2V5YmxvYik7CisJCW51bWJlcnNbNF0uc3RhcnQgPSBidWZfZ2V0cHRyKGtleWJsb2IsIG51bWJlcnNbNF0uYnl0ZXMpOworCQlidWZfaW5jcnBvcyhrZXlibG9iLCBudW1iZXJzWzRdLmJ5dGVzKTsKKworCQkvKiB4ICovCisJCW51bWJlcnNbNV0uYnl0ZXMgPSBidWZfZ2V0aW50KGtleWJsb2IpOworCQludW1iZXJzWzVdLnN0YXJ0ID0gYnVmX2dldHB0cihrZXlibG9iLCBudW1iZXJzWzVdLmJ5dGVzKTsKKwkJYnVmX2luY3Jwb3Moa2V5YmxvYiwgbnVtYmVyc1s1XS5ieXRlcyk7CisKKwkJbm51bWJlcnMgPSA2OworCQloZWFkZXIgPSAiLS0tLS1CRUdJTiBEU0EgUFJJVkFURSBLRVktLS0tLVxuIjsKKwkJZm9vdGVyID0gIi0tLS0tRU5EIERTQSBQUklWQVRFIEtFWS0tLS0tXG4iOworCX0KKyNlbmRpZiAvKiBEUk9QQkVBUl9EU1MgKi8KKworCS8qCisJICogTm93IGNvdW50IHVwIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBBU04uMSBlbmNvZGVkIGludGVnZXJzLAorCSAqIHNvIGFzIHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIHRoZSBjb250YWluaW5nIFNFUVVFTkNFLgorCSAqLworCWxlbiA9IDA7CisJZm9yIChpID0gMDsgaSA8IG5udW1iZXJzOyBpKyspIHsKKwkJbGVuICs9IGJlcl93cml0ZV9pZF9sZW4oTlVMTCwgMiwgbnVtYmVyc1tpXS5ieXRlcywgMCk7CisJCWxlbiArPSBudW1iZXJzW2ldLmJ5dGVzOworCX0KKwlzZXFsZW4gPSBsZW47CisJLyogTm93IGFkZCBvbiB0aGUgU0VRVUVOQ0UgaGVhZGVyLiAqLworCWxlbiArPSBiZXJfd3JpdGVfaWRfbGVuKE5VTEwsIDE2LCBzZXFsZW4sIEFTTjFfQ09OU1RSVUNURUQpOworCS8qIFJvdW5kIHVwIHRvIHRoZSBjaXBoZXIgYmxvY2sgc2l6ZSwgZW5zdXJpbmcgd2UgaGF2ZSBhdCBsZWFzdCBvbmUKKwkgKiBieXRlIG9mIHBhZGRpbmcgKHNlZSBiZWxvdykuICovCisJb3V0bGVuID0gbGVuOworCWlmIChwYXNzcGhyYXNlKQorCQlvdXRsZW4gPSAob3V0bGVuKzgpICZ+IDc7CisKKwkvKgorCSAqIE5vdyB3ZSBrbm93IGhvdyBiaWcgb3V0YmxvYiBuZWVkcyB0byBiZS4gQWxsb2NhdGUgaXQuCisJICovCisJb3V0YmxvYiA9ICh1bnNpZ25lZCBjaGFyKiltX21hbGxvYyhvdXRsZW4pOworCisJLyoKKwkgKiBBbmQgd3JpdGUgdGhlIGRhdGEgaW50byBpdC4KKwkgKi8KKwlwb3MgPSAwOworCXBvcyArPSBiZXJfd3JpdGVfaWRfbGVuKG91dGJsb2IrcG9zLCAxNiwgc2VxbGVuLCBBU04xX0NPTlNUUlVDVEVEKTsKKwlmb3IgKGkgPSAwOyBpIDwgbm51bWJlcnM7IGkrKykgeworCQlwb3MgKz0gYmVyX3dyaXRlX2lkX2xlbihvdXRibG9iK3BvcywgMiwgbnVtYmVyc1tpXS5ieXRlcywgMCk7CisJCW1lbWNweShvdXRibG9iK3BvcywgbnVtYmVyc1tpXS5zdGFydCwgbnVtYmVyc1tpXS5ieXRlcyk7CisJCXBvcyArPSBudW1iZXJzW2ldLmJ5dGVzOworCX0KKworCS8qCisJICogUGFkZGluZyBvbiBPcGVuU1NIIGtleXMgaXMgZGV0ZXJtaW5pc3RpYy4gVGhlIG51bWJlciBvZgorCSAqIHBhZGRpbmcgYnl0ZXMgaXMgYWx3YXlzIG1vcmUgdGhhbiB6ZXJvLCBhbmQgYWx3YXlzIGF0IG1vc3QKKwkgKiB0aGUgY2lwaGVyIGJsb2NrIGxlbmd0aC4gVGhlIHZhbHVlIG9mIGVhY2ggcGFkZGluZyBieXRlIGlzCisJICogZXF1YWwgdG8gdGhlIG51bWJlciBvZiBwYWRkaW5nIGJ5dGVzLiBTbyBhIHBsYWludGV4dCB0aGF0J3MKKwkgKiBhbiBleGFjdCBtdWx0aXBsZSBvZiB0aGUgYmxvY2sgc2l6ZSB3aWxsIGJlIHBhZGRlZCB3aXRoIDA4CisJICogMDggMDggMDggMDggMDggMDggMDggKGFzc3VtaW5nIGEgNjQtYml0IGJsb2NrIGNpcGhlcik7IGEKKwkgKiBwbGFpbnRleHQgb25lIGJ5dGUgbGVzcyB0aGFuIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUKKwkgKiB3aWxsIGJlIHBhZGRlZCB3aXRoIGp1c3QgMDEuCisJICogCisJICogVGhpcyBlbmFibGVzIHRoZSBPcGVuU1NMIGtleSBkZWNyeXB0aW9uIGZ1bmN0aW9uIHRvIHN0cmlwCisJICogb2ZmIHRoZSBwYWRkaW5nIGFsZ29yaXRobWljYWxseSBhbmQgcmV0dXJuIHRoZSB1bnBhZGRlZAorCSAqIHBsYWludGV4dCB0byB0aGUgbmV4dCBsYXllcjogaXQgbG9va3MgYXQgdGhlIGZpbmFsIGJ5dGUsIGFuZAorCSAqIHRoZW4gZXhwZWN0cyB0byBmaW5kIHRoYXQgbWFueSBieXRlcyBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhCisJICogd2l0aCB0aGUgc2FtZSB2YWx1ZS4gVGhvc2UgYXJlIGFsbCByZW1vdmVkIGFuZCB0aGUgcmVzdCBpcworCSAqIHJldHVybmVkLgorCSAqLworCWRyb3BiZWFyX2Fzc2VydChwb3MgPT0gbGVuKTsKKwl3aGlsZSAocG9zIDwgb3V0bGVuKSB7CisJCW91dGJsb2JbcG9zKytdID0gb3V0bGVuIC0gbGVuOworCX0KKworCS8qCisJICogRW5jcnlwdCB0aGUga2V5LgorCSAqLworCWlmIChwYXNzcGhyYXNlKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRW5jcnlwdGVkIGtleXMgYXJlbid0IHN1cHBvcnRlZCBjdXJyZW50bHlcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qCisJICogQW5kIHNhdmUgaXQuIFdlJ2xsIHVzZSBVbml4IGxpbmUgZW5kaW5ncyBqdXN0IGluIGNhc2UgaXQncworCSAqIHN1YnNlcXVlbnRseSB0cmFuc2ZlcnJlZCBpbiBiaW5hcnkgbW9kZS4KKwkgKi8KKwlpZiAoc3RybGVuKGZpbGVuYW1lKSA9PSAxICYmIGZpbGVuYW1lWzBdID09ICctJykgeworCQlmcCA9IHN0ZG91dDsKKwl9IGVsc2UgeworCQlmcCA9IGZvcGVuKGZpbGVuYW1lLCAid2IiKTsJICAvKiBlbnN1cmUgVW5peCBsaW5lIGVuZGluZ3MgKi8KKwl9CisJaWYgKCFmcCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCBvcGVuaW5nIG91dHB1dCBmaWxlXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZnB1dHMoaGVhZGVyLCBmcCk7CisJYmFzZTY0X2VuY29kZV9mcChmcCwgb3V0YmxvYiwgb3V0bGVuLCA2NCk7CisJZnB1dHMoZm9vdGVyLCBmcCk7CisJZmNsb3NlKGZwKTsKKwlyZXQgPSAxOworCisJZXJyb3I6CisJaWYgKG91dGJsb2IpIHsKKwkJbWVtc2V0KG91dGJsb2IsIDAsIG91dGxlbik7CisJCW1fZnJlZShvdXRibG9iKTsKKwl9CisJaWYgKGtleWJsb2IpIHsKKwkJYnVmX2J1cm4oa2V5YmxvYik7CisJCWJ1Zl9mcmVlKGtleWJsb2IpOworCX0KKwlpZiAoZXh0cmFibG9iKSB7CisJCWJ1Zl9idXJuKGV4dHJhYmxvYik7CisJCWJ1Zl9mcmVlKGV4dHJhYmxvYik7CisJfQorCXJldHVybiByZXQ7Cit9CisKKyNpZiAwCisvKiBYWFggVE9ETyBzc2guY29tIHN0dWZmIGlzbid0IGdvaW5nIHlldCAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBDb2RlIHRvIHJlYWQgc3NoLmNvbSBwcml2YXRlIGtleXMuCisgKi8KKworLyoKKyAqIFRoZSBmb3JtYXQgb2YgdGhlIGJhc2U2NCBibG9iIGlzIGxhcmdlbHkgc3NoMi1wYWNrZXQtZm9ybWF0dGVkLAorICogZXhjZXB0IHRoYXQgbXBpbnRzIGFyZSBhIGJpdCBkaWZmZXJlbnQ6IHRoZXkncmUgbW9yZSBsaWtlIHRoZQorICogb2xkIHNzaDEgbXBpbnQuIFlvdSBoYXZlIGEgMzItYml0IGJpdCBjb3VudCBOLCBmb2xsb3dlZCBieQorICogKE4rNykvOCBieXRlcyBvZiBkYXRhLgorICogCisgKiBTby4gVGhlIGJsb2IgY29udGFpbnM6CisgKiAKKyAqICAtIHVpbnQzMiAweDNmNmZmOWViCSAgIChtYWdpYyBudW1iZXIpCisgKiAgLSB1aW50MzIgc2l6ZQkJCSAodG90YWwgYmxvYiBzaXplKQorICogIC0gc3RyaW5nIGtleS10eXBlCQkgKHNlZSBiZWxvdykKKyAqICAtIHN0cmluZyBjaXBoZXItdHlwZQkgICh0ZWxscyB5b3UgaWYga2V5IGlzIGVuY3J5cHRlZCkKKyAqICAtIHN0cmluZyBlbmNyeXB0ZWQtYmxvYgorICogCisgKiAoVGhlIGZpcnN0IHNpemUgZmllbGQgaW5jbHVkZXMgdGhlIHNpemUgZmllbGQgaXRzZWxmIGFuZCB0aGUKKyAqIG1hZ2ljIG51bWJlciBiZWZvcmUgaXQuIEFsbCBvdGhlciBzaXplIGZpZWxkcyBhcmUgb3JkaW5hcnkgc3NoMgorICogc3RyaW5ncywgc28gdGhlIHNpemUgZmllbGQgaW5kaWNhdGVzIGhvdyBtdWNoIGRhdGEgaXMgdG8KKyAqIF9mb2xsb3dfLikKKyAqIAorICogVGhlIGVuY3J5cHRlZCBibG9iLCBvbmNlIGRlY3J5cHRlZCwgY29udGFpbnMgYSBzaW5nbGUgc3RyaW5nCisgKiB3aGljaCBpbiB0dXJuIGNvbnRhaW5zIHRoZSBwYXlsb2FkLiAoVGhpcyBhbGxvd3MgcGFkZGluZyB0byBiZQorICogYWRkZWQgYWZ0ZXIgdGhhdCBzdHJpbmcgd2hpbGUgc3RpbGwgbWFraW5nIGl0IGNsZWFyIHdoZXJlIHRoZQorICogcmVhbCBwYXlsb2FkIGVuZHMuIEFsc28gaXQgcHJvYmFibHkgbWFrZXMgZm9yIGEgcmVhc29uYWJsZQorICogZGVjcnlwdGlvbiBjaGVjay4pCisgKiAKKyAqIFRoZSBwYXlsb2FkIGJsb2IsIGZvciBhbiBSU0Ega2V5LCBjb250YWluczoKKyAqICAtIG1waW50IGUKKyAqICAtIG1waW50IGQKKyAqICAtIG1waW50IG4gICh5ZXMsIHRoZSBwdWJsaWMgYW5kIHByaXZhdGUgc3R1ZmYgaXMgaW50ZXJtaXhlZCkKKyAqICAtIG1waW50IHUgIChwcmVzdW1hYmx5IGludmVyc2Ugb2YgcCBtb2QgcSkKKyAqICAtIG1waW50IHAgIChwIGlzIHRoZSBzbWFsbGVyIHByaW1lKQorICogIC0gbXBpbnQgcSAgKHEgaXMgdGhlIGxhcmdlcikKKyAqIAorICogRm9yIGEgRFNBIGtleSwgdGhlIHBheWxvYWQgYmxvYiBjb250YWluczoKKyAqICAtIHVpbnQzMiAwCisgKiAgLSBtcGludCBwCisgKiAgLSBtcGludCBnCisgKiAgLSBtcGludCBxCisgKiAgLSBtcGludCB5CisgKiAgLSBtcGludCB4CisgKiAKKyAqIEFsdGVybmF0aXZlbHksIGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSBgcHJlZGVmaW5lZCcsIHRoYXQKKyAqICgwLHAsZyxxKSBzZXF1ZW5jZSBjYW4gYmUgcmVwbGFjZWQgYnkgYSB1aW50MzIgMSBhbmQgYSBzdHJpbmcKKyAqIGNvbnRhaW5pbmcgc29tZSBwcmVkZWZpbmVkIHBhcmFtZXRlciBzcGVjaWZpY2F0aW9uLiAqc2h1ZGRlciosCisgKiBidXQgSSBkb3VidCB3ZSdsbCBlbmNvdW50ZXIgdGhpcyBpbiByZWFsIGxpZmUuCisgKiAKKyAqIFRoZSBrZXkgdHlwZSBzdHJpbmdzIGFyZSBnaGFzdGx5LiBUaGUgUlNBIGtleSBJIGxvb2tlZCBhdCBoYWQgYQorICogdHlwZSBzdHJpbmcgb2YKKyAqIAorICogICBgaWYtbW9kbntzaWdue3JzYS1wa2NzMS1zaGExfSxlbmNyeXB0e3JzYS1wa2NzMXYyLW9hZXB9fScKKyAqIAorICogYW5kIHRoZSBEU0Ega2V5IHdhc24ndCBtdWNoIGJldHRlcjoKKyAqIAorICogICBgZGwtbW9kcHtzaWdue2RzYS1uaXN0LXNoYTF9LGRoe3BsYWlufX0nCisgKiAKKyAqIEl0IGlzbid0IGNsZWFyIHRoYXQgdGhlc2Ugd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUuIEkgdGhpbmsgaXQKKyAqIG1pZ2h0IGJlIHdpc2UganVzdCB0byBsb29rIGF0IHRoZSBgaWYtbW9kbntzaWdue3JzYScgYW5kCisgKiBgZGwtbW9kcHtzaWdue2RzYScgcHJlZml4ZXMuCisgKiAKKyAqIEZpbmFsbHksIHRoZSBlbmNyeXB0aW9uLiBUaGUgY2lwaGVyLXR5cGUgc3RyaW5nIGFwcGVhcnMgdG8gYmUKKyAqIGVpdGhlciBgbm9uZScgb3IgYDNkZXMtY2JjJy4gTG9va3MgYXMgaWYgdGhpcyBpcyBTU0gyLXN0eWxlCisgKiAzZGVzLWNiYyAoaS5lLiBvdXRlciBjYmMgcmF0aGVyIHRoYW4gaW5uZXIpLiBUaGUga2V5IGlzIGNyZWF0ZWQKKyAqIGZyb20gdGhlIHBhc3NwaHJhc2UgYnkgbWVhbnMgb2YgeWV0IGFub3RoZXIgaGFzaGluZyBmYWZmOgorICogCisgKiAgLSBmaXJzdCAxNiBieXRlcyBhcmUgTUQ1KHBhc3NwaHJhc2UpCisgKiAgLSBuZXh0IDE2IGJ5dGVzIGFyZSBNRDUocGFzc3BocmFzZSB8fCBmaXJzdCAxNiBieXRlcykKKyAqICAtIGlmIHRoZXJlIHdlcmUgbW9yZSwgdGhleSdkIGJlIE1ENShwYXNzcGhyYXNlIHx8IGZpcnN0IDMyKSwKKyAqCWFuZCBzbyBvbi4KKyAqLworCisjZGVmaW5lIFNTSENPTV9NQUdJQ19OVU1CRVIgMHgzZjZmZjllYgorCitzdHJ1Y3Qgc3NoY29tX2tleSB7CisJY2hhciBjb21tZW50WzI1Nl07CQkJCSAvKiBhbGxvd2luZyBhbnkgbGVuZ3RoIGlzIG92ZXJraWxsICovCisJdW5zaWduZWQgY2hhciAqa2V5YmxvYjsKKwlpbnQga2V5YmxvYl9sZW4sIGtleWJsb2Jfc2l6ZTsKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3NoY29tX2tleSAqbG9hZF9zc2hjb21fa2V5KGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzc2hjb21fa2V5ICpyZXQ7CisJRklMRSAqZnA7CisJY2hhciBidWZmZXJbMjU2XTsKKwlpbnQgbGVuOworCWNoYXIgKmVycm1zZywgKnA7CisJaW50IGhlYWRlcnNfZG9uZTsKKwljaGFyIGJhc2U2NF9iaXRbNF07CisJaW50IGJhc2U2NF9jaGFycyA9IDA7CisKKwlyZXQgPSBzbmV3KHN0cnVjdCBzc2hjb21fa2V5KTsKKwlyZXQtPmNvbW1lbnRbMF0gPSAnXDAnOworCXJldC0+a2V5YmxvYiA9IE5VTEw7CisJcmV0LT5rZXlibG9iX2xlbiA9IHJldC0+a2V5YmxvYl9zaXplID0gMDsKKworCWZwID0gZm9wZW4oZmlsZW5hbWUsICJyIik7CisJaWYgKCFmcCkgeworCQllcnJtc2cgPSAiVW5hYmxlIHRvIG9wZW4ga2V5IGZpbGUiOworCQlnb3RvIGVycm9yOworCX0KKwlpZiAoIWZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZwKSB8fAorCQkwICE9IHN0cmNtcChidWZmZXIsICItLS0tIEJFR0lOIFNTSDIgRU5DUllQVEVEIFBSSVZBVEUgS0VZIC0tLS1cbiIpKSB7CisJCWVycm1zZyA9ICJGaWxlIGRvZXMgbm90IGJlZ2luIHdpdGggc3NoLmNvbSBrZXkgaGVhZGVyIjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwloZWFkZXJzX2RvbmUgPSAwOworCXdoaWxlICgxKSB7CisJCWlmICghZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZnApKSB7CisJCQllcnJtc2cgPSAiVW5leHBlY3RlZCBlbmQgb2YgZmlsZSI7CisJCQlnb3RvIGVycm9yOworCQl9CisJCWlmICghc3RyY21wKGJ1ZmZlciwgIi0tLS0gRU5EIFNTSDIgRU5DUllQVEVEIFBSSVZBVEUgS0VZIC0tLS1cbiIpKQorCQkJYnJlYWs7CQkJCQkgLyogZG9uZSAqLworCQlpZiAoKHAgPSBzdHJjaHIoYnVmZmVyLCAnOicpKSAhPSBOVUxMKSB7CisJCQlpZiAoaGVhZGVyc19kb25lKSB7CisJCQkJZXJybXNnID0gIkhlYWRlciBmb3VuZCBpbiBib2R5IG9mIGtleSBkYXRhIjsKKwkJCQlnb3RvIGVycm9yOworCQkJfQorCQkJKnArKyA9ICdcMCc7CisJCQl3aGlsZSAoKnAgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcCkpIHArKzsKKwkJCS8qCisJCQkgKiBIZWFkZXIgbGluZXMgY2FuIGVuZCBpbiBhIHRyYWlsaW5nIGJhY2tzbGFzaCBmb3IKKwkJCSAqIGNvbnRpbnVhdGlvbi4KKwkJCSAqLworCQkJd2hpbGUgKChsZW4gPSBzdHJsZW4ocCkpID4gKGludCkoc2l6ZW9mKGJ1ZmZlcikgLSAocC1idWZmZXIpIC0xKSB8fAorCQkJCSAgIHBbbGVuLTFdICE9ICdcbicgfHwgcFtsZW4tMl0gPT0gJ1xcJykgeworCQkJCWlmIChsZW4gPiAoaW50KSgocC1idWZmZXIpICsgc2l6ZW9mKGJ1ZmZlciktMikpIHsKKwkJCQkJZXJybXNnID0gIkhlYWRlciBsaW5lIHRvbyBsb25nIHRvIGRlYWwgd2l0aCI7CisJCQkJCWdvdG8gZXJyb3I7CisJCQkJfQorCQkJCWlmICghZmdldHMocCtsZW4tMiwgc2l6ZW9mKGJ1ZmZlciktKHAtYnVmZmVyKS0obGVuLTIpLCBmcCkpIHsKKwkJCQkJZXJybXNnID0gIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiOworCQkJCQlnb3RvIGVycm9yOworCQkJCX0KKwkJCX0KKwkJCXBbc3RyY3NwbihwLCAiXG4iKV0gPSAnXDAnOworCQkJaWYgKCFzdHJjbXAoYnVmZmVyLCAiQ29tbWVudCIpKSB7CisJCQkJLyogU3RyaXAgcXVvdGVzIGluIGNvbW1lbnQgaWYgcHJlc2VudC4gKi8KKwkJCQlpZiAocFswXSA9PSAnIicgJiYgcFtzdHJsZW4ocCktMV0gPT0gJyInKSB7CisJCQkJCXArKzsKKwkJCQkJcFtzdHJsZW4ocCktMV0gPSAnXDAnOworCQkJCX0KKwkJCQlzdHJuY3B5KHJldC0+Y29tbWVudCwgcCwgc2l6ZW9mKHJldC0+Y29tbWVudCkpOworCQkJCXJldC0+Y29tbWVudFtzaXplb2YocmV0LT5jb21tZW50KS0xXSA9ICdcMCc7CisJCQl9CisJCX0gZWxzZSB7CisJCQloZWFkZXJzX2RvbmUgPSAxOworCisJCQlwID0gYnVmZmVyOworCQkJd2hpbGUgKGlzYmFzZTY0KCpwKSkgeworCQkJCWJhc2U2NF9iaXRbYmFzZTY0X2NoYXJzKytdID0gKnA7CisJCQkJaWYgKGJhc2U2NF9jaGFycyA9PSA0KSB7CisJCQkJCXVuc2lnbmVkIGNoYXIgb3V0WzNdOworCisJCQkJCWJhc2U2NF9jaGFycyA9IDA7CisKKwkJCQkJbGVuID0gYmFzZTY0X2RlY29kZV9hdG9tKGJhc2U2NF9iaXQsIG91dCk7CisKKwkJCQkJaWYgKGxlbiA8PSAwKSB7CisJCQkJCQllcnJtc2cgPSAiSW52YWxpZCBiYXNlNjQgZW5jb2RpbmciOworCQkJCQkJZ290byBlcnJvcjsKKwkJCQkJfQorCisJCQkJCWlmIChyZXQtPmtleWJsb2JfbGVuICsgbGVuID4gcmV0LT5rZXlibG9iX3NpemUpIHsKKwkJCQkJCXJldC0+a2V5YmxvYl9zaXplID0gcmV0LT5rZXlibG9iX2xlbiArIGxlbiArIDI1NjsKKwkJCQkJCXJldC0+a2V5YmxvYiA9IHNyZXNpemUocmV0LT5rZXlibG9iLCByZXQtPmtleWJsb2Jfc2l6ZSwKKwkJCQkJCQkJCQkJICAgdW5zaWduZWQgY2hhcik7CisJCQkJCX0KKworCQkJCQltZW1jcHkocmV0LT5rZXlibG9iICsgcmV0LT5rZXlibG9iX2xlbiwgb3V0LCBsZW4pOworCQkJCQlyZXQtPmtleWJsb2JfbGVuICs9IGxlbjsKKwkJCQl9CisKKwkJCQlwKys7CisJCQl9CisJCX0KKwl9CisKKwlpZiAocmV0LT5rZXlibG9iX2xlbiA9PSAwIHx8ICFyZXQtPmtleWJsb2IpIHsKKwkJZXJybXNnID0gIktleSBib2R5IG5vdCBwcmVzZW50IjsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR1cm4gcmV0OworCisJZXJyb3I6CisJaWYgKHJldCkgeworCQlpZiAocmV0LT5rZXlibG9iKSB7CisJCQltZW1zZXQocmV0LT5rZXlibG9iLCAwLCByZXQtPmtleWJsb2Jfc2l6ZSk7CisJCQltX2ZyZWUocmV0LT5rZXlibG9iKTsKKwkJfQorCQltZW1zZXQoJnJldCwgMCwgc2l6ZW9mKHJldCkpOworCQltX2ZyZWUocmV0KTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBzc2hjb21fZW5jcnlwdGVkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICoqY29tbWVudCkKK3sKKwlzdHJ1Y3Qgc3NoY29tX2tleSAqa2V5ID0gbG9hZF9zc2hjb21fa2V5KGZpbGVuYW1lKTsKKwlpbnQgcG9zLCBsZW4sIGFuc3dlcjsKKworCSpjb21tZW50ID0gTlVMTDsKKwlpZiAoIWtleSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIENoZWNrIG1hZ2ljIG51bWJlci4KKwkgKi8KKwlpZiAoR0VUXzMyQklUKGtleS0+a2V5YmxvYikgIT0gMHgzZjZmZjllYikKKwkJcmV0dXJuIDA7CQkJCQkgIC8qIGtleSBpcyBpbnZhbGlkICovCisKKwkvKgorCSAqIEZpbmQgdGhlIGNpcGhlci10eXBlIHN0cmluZy4KKwkgKi8KKwlhbnN3ZXIgPSAwOworCXBvcyA9IDg7CisJaWYgKGtleS0+a2V5YmxvYl9sZW4gPCBwb3MrNCkKKwkJZ290byBkb25lOwkJCQkJIC8qIGtleSBpcyBmYXIgdG9vIHNob3J0ICovCisJcG9zICs9IDQgKyBHRVRfMzJCSVQoa2V5LT5rZXlibG9iICsgcG9zKTsgICAvKiBza2lwIGtleSB0eXBlICovCisJaWYgKGtleS0+a2V5YmxvYl9sZW4gPCBwb3MrNCkKKwkJZ290byBkb25lOwkJCQkJIC8qIGtleSBpcyBmYXIgdG9vIHNob3J0ICovCisJbGVuID0gR0VUXzMyQklUKGtleS0+a2V5YmxvYiArIHBvcyk7ICAgLyogZmluZCBjaXBoZXItdHlwZSBsZW5ndGggKi8KKwlpZiAoa2V5LT5rZXlibG9iX2xlbiA8IHBvcys0K2xlbikKKwkJZ290byBkb25lOwkJCQkJIC8qIGNpcGhlciB0eXBlIHN0cmluZyBpcyBpbmNvbXBsZXRlICovCisJaWYgKGxlbiAhPSA0IHx8IDAgIT0gbWVtY21wKGtleS0+a2V5YmxvYiArIHBvcyArIDQsICJub25lIiwgNCkpCisJCWFuc3dlciA9IDE7CisKKwlkb25lOgorCSpjb21tZW50ID0gZHVwc3RyKGtleS0+Y29tbWVudCk7CisJbWVtc2V0KGtleS0+a2V5YmxvYiwgMCwga2V5LT5rZXlibG9iX3NpemUpOworCW1fZnJlZShrZXktPmtleWJsb2IpOworCW1lbXNldCgma2V5LCAwLCBzaXplb2Yoa2V5KSk7CisJbV9mcmVlKGtleSk7CisJcmV0dXJuIGFuc3dlcjsKK30KKworc3RhdGljIGludCBzc2hjb21fcmVhZF9tcGludCh2b2lkICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbXBpbnRfcG9zICpyZXQpCit7CisJaW50IGJpdHM7CisJaW50IGJ5dGVzOworCXVuc2lnbmVkIGNoYXIgKmQgPSAodW5zaWduZWQgY2hhciAqKSBkYXRhOworCisJaWYgKGxlbiA8IDQpCisJCWdvdG8gZXJyb3I7CisJYml0cyA9IEdFVF8zMkJJVChkKTsKKworCWJ5dGVzID0gKGJpdHMgKyA3KSAvIDg7CisJaWYgKGxlbiA8IDQrYnl0ZXMpCisJCWdvdG8gZXJyb3I7CisKKwlyZXQtPnN0YXJ0ID0gZCArIDQ7CisJcmV0LT5ieXRlcyA9IGJ5dGVzOworCXJldHVybiBieXRlcys0OworCisJZXJyb3I6CisJcmV0LT5zdGFydCA9IE5VTEw7CisJcmV0LT5ieXRlcyA9IC0xOworCXJldHVybiBsZW47CQkJCQkJLyogZW5zdXJlIGZ1cnRoZXIgY2FsbHMgZmFpbCBhcyB3ZWxsICovCit9CisKK3N0YXRpYyBpbnQgc3NoY29tX3B1dF9tcGludCh2b2lkICp0YXJnZXQsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisJdW5zaWduZWQgY2hhciAqZCA9ICh1bnNpZ25lZCBjaGFyICopdGFyZ2V0OworCXVuc2lnbmVkIGNoYXIgKmkgPSAodW5zaWduZWQgY2hhciAqKWRhdGE7CisJaW50IGJpdHMgPSBsZW4gKiA4IC0gMTsKKworCXdoaWxlIChiaXRzID4gMCkgeworCQlpZiAoKmkgJiAoMSA8PCAoYml0cyAmIDcpKSkKKwkJCWJyZWFrOworCQlpZiAoIShiaXRzLS0gJiA3KSkKKwkJCWkrKywgbGVuLS07CisJfQorCisJUFVUXzMyQklUKGQsIGJpdHMrMSk7CisJbWVtY3B5KGQrNCwgaSwgbGVuKTsKKwlyZXR1cm4gbGVuKzQ7Cit9CisKK3NpZ25fa2V5ICpzc2hjb21fcmVhZChjb25zdCBjaGFyICpmaWxlbmFtZSwgY2hhciAqcGFzc3BocmFzZSkKK3sKKwlzdHJ1Y3Qgc3NoY29tX2tleSAqa2V5ID0gbG9hZF9zc2hjb21fa2V5KGZpbGVuYW1lKTsKKwljaGFyICplcnJtc2c7CisJaW50IHBvcywgbGVuOworCWNvbnN0IGNoYXIgcHJlZml4X3JzYVtdID0gImlmLW1vZG57c2lnbntyc2EiOworCWNvbnN0IGNoYXIgcHJlZml4X2RzYVtdID0gImRsLW1vZHB7c2lnbntkc2EiOworCWVudW0geyBSU0EsIERTQSB9IHR5cGU7CisJaW50IGVuY3J5cHRlZDsKKwljaGFyICpjaXBoZXJ0ZXh0OworCWludCBjaXBoZXJsZW47CisJc3RydWN0IHNzaDJfdXNlcmtleSAqcmV0ID0gTlVMTCwgKnJldGtleTsKKwljb25zdCBzdHJ1Y3Qgc3NoX3NpZ25rZXkgKmFsZzsKKwl1bnNpZ25lZCBjaGFyICpibG9iID0gTlVMTDsKKwlpbnQgYmxvYnNpemUsIHB1YmxlbiwgcHJpdmxlbjsKKworCWlmICgha2V5KQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJICogQ2hlY2sgbWFnaWMgbnVtYmVyLgorCSAqLworCWlmIChHRVRfMzJCSVQoa2V5LT5rZXlibG9iKSAhPSBTU0hDT01fTUFHSUNfTlVNQkVSKSB7CisJCWVycm1zZyA9ICJLZXkgZG9lcyBub3QgYmVnaW4gd2l0aCBtYWdpYyBudW1iZXIiOworCQlnb3RvIGVycm9yOworCX0KKworCS8qCisJICogRGV0ZXJtaW5lIHRoZSBrZXkgdHlwZS4KKwkgKi8KKwlwb3MgPSA4OworCWlmIChrZXktPmtleWJsb2JfbGVuIDwgcG9zKzQgfHwKKwkJKGxlbiA9IEdFVF8zMkJJVChrZXktPmtleWJsb2IgKyBwb3MpKSA+IGtleS0+a2V5YmxvYl9sZW4gLSBwb3MgLSA0KSB7CisJCWVycm1zZyA9ICJLZXkgYmxvYiBkb2VzIG5vdCBjb250YWluIGEga2V5IHR5cGUgc3RyaW5nIjsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGxlbiA+IHNpemVvZihwcmVmaXhfcnNhKSAtIDEgJiYKKwkJIW1lbWNtcChrZXktPmtleWJsb2IrcG9zKzQsIHByZWZpeF9yc2EsIHNpemVvZihwcmVmaXhfcnNhKSAtIDEpKSB7CisJCXR5cGUgPSBSU0E7CisJfSBlbHNlIGlmIChsZW4gPiBzaXplb2YocHJlZml4X2RzYSkgLSAxICYmCisJCSFtZW1jbXAoa2V5LT5rZXlibG9iK3Bvcys0LCBwcmVmaXhfZHNhLCBzaXplb2YocHJlZml4X2RzYSkgLSAxKSkgeworCQl0eXBlID0gRFNBOworCX0gZWxzZSB7CisJCWVycm1zZyA9ICJLZXkgaXMgb2YgdW5rbm93biB0eXBlIjsKKwkJZ290byBlcnJvcjsKKwl9CisJcG9zICs9IDQrbGVuOworCisJLyoKKwkgKiBEZXRlcm1pbmUgdGhlIGNpcGhlciB0eXBlLgorCSAqLworCWlmIChrZXktPmtleWJsb2JfbGVuIDwgcG9zKzQgfHwKKwkJKGxlbiA9IEdFVF8zMkJJVChrZXktPmtleWJsb2IgKyBwb3MpKSA+IGtleS0+a2V5YmxvYl9sZW4gLSBwb3MgLSA0KSB7CisJCWVycm1zZyA9ICJLZXkgYmxvYiBkb2VzIG5vdCBjb250YWluIGEgY2lwaGVyIHR5cGUgc3RyaW5nIjsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGxlbiA9PSA0ICYmICFtZW1jbXAoa2V5LT5rZXlibG9iK3Bvcys0LCAibm9uZSIsIDQpKQorCQllbmNyeXB0ZWQgPSAwOworCWVsc2UgaWYgKGxlbiA9PSA4ICYmICFtZW1jbXAoa2V5LT5rZXlibG9iK3Bvcys0LCAiM2Rlcy1jYmMiLCA4KSkKKwkJZW5jcnlwdGVkID0gMTsKKwllbHNlIHsKKwkJZXJybXNnID0gIktleSBlbmNyeXB0aW9uIGlzIG9mIHVua25vd24gdHlwZSI7CisJCWdvdG8gZXJyb3I7CisJfQorCXBvcyArPSA0K2xlbjsKKworCS8qCisJICogR2V0IGhvbGQgb2YgdGhlIGVuY3J5cHRlZCBwYXJ0IG9mIHRoZSBrZXkuCisJICovCisJaWYgKGtleS0+a2V5YmxvYl9sZW4gPCBwb3MrNCB8fAorCQkobGVuID0gR0VUXzMyQklUKGtleS0+a2V5YmxvYiArIHBvcykpID4ga2V5LT5rZXlibG9iX2xlbiAtIHBvcyAtIDQpIHsKKwkJZXJybXNnID0gIktleSBibG9iIGRvZXMgbm90IGNvbnRhaW4gYWN0dWFsIGtleSBkYXRhIjsKKwkJZ290byBlcnJvcjsKKwl9CisJY2lwaGVydGV4dCA9IChjaGFyICopa2V5LT5rZXlibG9iICsgcG9zICsgNDsKKwljaXBoZXJsZW4gPSBsZW47CisJaWYgKGNpcGhlcmxlbiA9PSAwKSB7CisJCWVycm1zZyA9ICJMZW5ndGggb2Yga2V5IGRhdGEgaXMgemVybyI7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyoKKwkgKiBEZWNyeXB0IGl0IGlmIG5lY2Vzc2FyeS4KKwkgKi8KKwlpZiAoZW5jcnlwdGVkKSB7CisJCS8qCisJCSAqIERlcml2ZSBlbmNyeXB0aW9uIGtleSBmcm9tIHBhc3NwaHJhc2UgYW5kIGl2L3NhbHQ6CisJCSAqIAorCQkgKiAgLSBsZXQgYmxvY2sgQSBlcXVhbCBNRDUocGFzc3BocmFzZSkKKwkJICogIC0gbGV0IGJsb2NrIEIgZXF1YWwgTUQ1KHBhc3NwaHJhc2UgfHwgQSkKKwkJICogIC0gYmxvY2sgQyB3b3VsZCBiZSBNRDUocGFzc3BocmFzZSB8fCBBIHx8IEIpIGFuZCBzbyBvbgorCQkgKiAgLSBlbmNyeXB0aW9uIGtleSBpcyB0aGUgZmlyc3QgTiBieXRlcyBvZiBBIHx8IEIKKwkJICovCisJCXN0cnVjdCBNRDVDb250ZXh0IG1kNWM7CisJCXVuc2lnbmVkIGNoYXIga2V5YnVmWzMyXSwgaXZbOF07CisKKwkJaWYgKGNpcGhlcmxlbiAlIDggIT0gMCkgeworCQkJZXJybXNnID0gIkVuY3J5cHRlZCBwYXJ0IG9mIGtleSBpcyBub3QgYSBtdWx0aXBsZSBvZiBjaXBoZXIgYmxvY2siCisJCQkJIiBzaXplIjsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlNRDVJbml0KCZtZDVjKTsKKwkJTUQ1VXBkYXRlKCZtZDVjLCAodW5zaWduZWQgY2hhciAqKXBhc3NwaHJhc2UsIHN0cmxlbihwYXNzcGhyYXNlKSk7CisJCU1ENUZpbmFsKGtleWJ1ZiwgJm1kNWMpOworCisJCU1ENUluaXQoJm1kNWMpOworCQlNRDVVcGRhdGUoJm1kNWMsICh1bnNpZ25lZCBjaGFyICopcGFzc3BocmFzZSwgc3RybGVuKHBhc3NwaHJhc2UpKTsKKwkJTUQ1VXBkYXRlKCZtZDVjLCBrZXlidWYsIDE2KTsKKwkJTUQ1RmluYWwoa2V5YnVmKzE2LCAmbWQ1Yyk7CisKKwkJLyoKKwkJICogTm93IGRlY3J5cHQgdGhlIGtleSBibG9iLgorCQkgKi8KKwkJbWVtc2V0KGl2LCAwLCBzaXplb2YoaXYpKTsKKwkJZGVzM19kZWNyeXB0X3B1YmtleV9vc3NoKGtleWJ1ZiwgaXYsICh1bnNpZ25lZCBjaGFyICopY2lwaGVydGV4dCwKKwkJCQkJCQkJIGNpcGhlcmxlbik7CisKKwkJbWVtc2V0KCZtZDVjLCAwLCBzaXplb2YobWQ1YykpOworCQltZW1zZXQoa2V5YnVmLCAwLCBzaXplb2Yoa2V5YnVmKSk7CisKKwkJLyoKKwkJICogSGVyZWFmdGVyIHdlIHJldHVybiBXUk9OR19QQVNTUEhSQVNFIGZvciBhbnkgcGFyc2luZworCQkgKiBlcnJvci4gKEJ1dCBvbmx5IGlmIHdlJ3ZlIGp1c3QgdHJpZWQgdG8gZGVjcnlwdCBpdCEKKwkJICogUmV0dXJuaW5nIFdST05HX1BBU1NQSFJBU0UgZm9yIGFuIHVuZW5jcnlwdGVkIGtleSBpcworCQkgKiBhdXRvbWF0aWMgZG9vbS4pCisJCSAqLworCQlpZiAoZW5jcnlwdGVkKQorCQkJcmV0ID0gU1NIMl9XUk9OR19QQVNTUEhSQVNFOworCX0KKworCS8qCisJICogU3RyaXAgYXdheSB0aGUgY29udGFpbmluZyBzdHJpbmcgdG8gZ2V0IHRvIHRoZSByZWFsIG1lYXQuCisJICovCisJbGVuID0gR0VUXzMyQklUKGNpcGhlcnRleHQpOworCWlmIChsZW4gPiBjaXBoZXJsZW4tNCkgeworCQllcnJtc2cgPSAiY29udGFpbmluZyBzdHJpbmcgd2FzIGlsbC1mb3JtZWQiOworCQlnb3RvIGVycm9yOworCX0KKwljaXBoZXJ0ZXh0ICs9IDQ7CisJY2lwaGVybGVuID0gbGVuOworCisJLyoKKwkgKiBOb3cgd2UgYnJlYWsgZG93biBpbnRvIFJTQSB2ZXJzdXMgRFNBLiBJbiBlaXRoZXIgY2FzZSB3ZSdsbAorCSAqIGNvbnN0cnVjdCBwdWJsaWMgYW5kIHByaXZhdGUgYmxvYnMgaW4gb3VyIG93biBmb3JtYXQsIGFuZAorCSAqIGVuZCB1cCBmZWVkaW5nIHRoZW0gdG8gYWxnLT5jcmVhdGVrZXkoKS4KKwkgKi8KKwlibG9ic2l6ZSA9IGNpcGhlcmxlbiArIDI1NjsKKwlibG9iID0gc25ld24oYmxvYnNpemUsIHVuc2lnbmVkIGNoYXIpOworCXByaXZsZW4gPSAwOworCWlmICh0eXBlID09IFJTQSkgeworCQlzdHJ1Y3QgbXBpbnRfcG9zIG4sIGUsIGQsIHUsIHAsIHE7CisJCWludCBwb3MgPSAwOworCQlwb3MgKz0gc3NoY29tX3JlYWRfbXBpbnQoY2lwaGVydGV4dCtwb3MsIGNpcGhlcmxlbi1wb3MsICZlKTsKKwkJcG9zICs9IHNzaGNvbV9yZWFkX21waW50KGNpcGhlcnRleHQrcG9zLCBjaXBoZXJsZW4tcG9zLCAmZCk7CisJCXBvcyArPSBzc2hjb21fcmVhZF9tcGludChjaXBoZXJ0ZXh0K3BvcywgY2lwaGVybGVuLXBvcywgJm4pOworCQlwb3MgKz0gc3NoY29tX3JlYWRfbXBpbnQoY2lwaGVydGV4dCtwb3MsIGNpcGhlcmxlbi1wb3MsICZ1KTsKKwkJcG9zICs9IHNzaGNvbV9yZWFkX21waW50KGNpcGhlcnRleHQrcG9zLCBjaXBoZXJsZW4tcG9zLCAmcCk7CisJCXBvcyArPSBzc2hjb21fcmVhZF9tcGludChjaXBoZXJ0ZXh0K3BvcywgY2lwaGVybGVuLXBvcywgJnEpOworCQlpZiAoIXEuc3RhcnQpIHsKKwkJCWVycm1zZyA9ICJrZXkgZGF0YSBkaWQgbm90IGNvbnRhaW4gc2l4IGludGVnZXJzIjsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlhbGcgPSAmc3NoX3JzYTsKKwkJcG9zID0gMDsKKwkJcG9zICs9IHB1dF9zdHJpbmcoYmxvYitwb3MsICJzc2gtcnNhIiwgNyk7CisJCXBvcyArPSBwdXRfbXAoYmxvYitwb3MsIGUuc3RhcnQsIGUuYnl0ZXMpOworCQlwb3MgKz0gcHV0X21wKGJsb2IrcG9zLCBuLnN0YXJ0LCBuLmJ5dGVzKTsKKwkJcHVibGVuID0gcG9zOworCQlwb3MgKz0gcHV0X3N0cmluZyhibG9iK3BvcywgZC5zdGFydCwgZC5ieXRlcyk7CisJCXBvcyArPSBwdXRfbXAoYmxvYitwb3MsIHEuc3RhcnQsIHEuYnl0ZXMpOworCQlwb3MgKz0gcHV0X21wKGJsb2IrcG9zLCBwLnN0YXJ0LCBwLmJ5dGVzKTsKKwkJcG9zICs9IHB1dF9tcChibG9iK3BvcywgdS5zdGFydCwgdS5ieXRlcyk7CisJCXByaXZsZW4gPSBwb3MgLSBwdWJsZW47CisJfSBlbHNlIGlmICh0eXBlID09IERTQSkgeworCQlzdHJ1Y3QgbXBpbnRfcG9zIHAsIHEsIGcsIHgsIHk7CisJCWludCBwb3MgPSA0OworCQlpZiAoR0VUXzMyQklUKGNpcGhlcnRleHQpICE9IDApIHsKKwkJCWVycm1zZyA9ICJwcmVkZWZpbmVkIERTQSBwYXJhbWV0ZXJzIG5vdCBzdXBwb3J0ZWQiOworCQkJZ290byBlcnJvcjsKKwkJfQorCQlwb3MgKz0gc3NoY29tX3JlYWRfbXBpbnQoY2lwaGVydGV4dCtwb3MsIGNpcGhlcmxlbi1wb3MsICZwKTsKKwkJcG9zICs9IHNzaGNvbV9yZWFkX21waW50KGNpcGhlcnRleHQrcG9zLCBjaXBoZXJsZW4tcG9zLCAmZyk7CisJCXBvcyArPSBzc2hjb21fcmVhZF9tcGludChjaXBoZXJ0ZXh0K3BvcywgY2lwaGVybGVuLXBvcywgJnEpOworCQlwb3MgKz0gc3NoY29tX3JlYWRfbXBpbnQoY2lwaGVydGV4dCtwb3MsIGNpcGhlcmxlbi1wb3MsICZ5KTsKKwkJcG9zICs9IHNzaGNvbV9yZWFkX21waW50KGNpcGhlcnRleHQrcG9zLCBjaXBoZXJsZW4tcG9zLCAmeCk7CisJCWlmICgheC5zdGFydCkgeworCQkJZXJybXNnID0gImtleSBkYXRhIGRpZCBub3QgY29udGFpbiBmaXZlIGludGVnZXJzIjsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKworCQlhbGcgPSAmc3NoX2RzczsKKwkJcG9zID0gMDsKKwkJcG9zICs9IHB1dF9zdHJpbmcoYmxvYitwb3MsICJzc2gtZHNzIiwgNyk7CisJCXBvcyArPSBwdXRfbXAoYmxvYitwb3MsIHAuc3RhcnQsIHAuYnl0ZXMpOworCQlwb3MgKz0gcHV0X21wKGJsb2IrcG9zLCBxLnN0YXJ0LCBxLmJ5dGVzKTsKKwkJcG9zICs9IHB1dF9tcChibG9iK3BvcywgZy5zdGFydCwgZy5ieXRlcyk7CisJCXBvcyArPSBwdXRfbXAoYmxvYitwb3MsIHkuc3RhcnQsIHkuYnl0ZXMpOworCQlwdWJsZW4gPSBwb3M7CisJCXBvcyArPSBwdXRfbXAoYmxvYitwb3MsIHguc3RhcnQsIHguYnl0ZXMpOworCQlwcml2bGVuID0gcG9zIC0gcHVibGVuOworCX0KKworCWRyb3BiZWFyX2Fzc2VydChwcml2bGVuID4gMCk7CQkJICAgLyogc2hvdWxkIGhhdmUgYm9tYmVkIGJ5IG5vdyBpZiBub3QgKi8KKworCXJldGtleSA9IHNuZXcoc3RydWN0IHNzaDJfdXNlcmtleSk7CisJcmV0a2V5LT5hbGcgPSBhbGc7CisJcmV0a2V5LT5kYXRhID0gYWxnLT5jcmVhdGVrZXkoYmxvYiwgcHVibGVuLCBibG9iK3B1YmxlbiwgcHJpdmxlbik7CisJaWYgKCFyZXRrZXktPmRhdGEpIHsKKwkJbV9mcmVlKHJldGtleSk7CisJCWVycm1zZyA9ICJ1bmFibGUgdG8gY3JlYXRlIGtleSBkYXRhIHN0cnVjdHVyZSI7CisJCWdvdG8gZXJyb3I7CisJfQorCXJldGtleS0+Y29tbWVudCA9IGR1cHN0cihrZXktPmNvbW1lbnQpOworCisJZXJybXNnID0gTlVMTDsgLyogbm8gZXJyb3IgKi8KKwlyZXQgPSByZXRrZXk7CisKKwllcnJvcjoKKwlpZiAoYmxvYikgeworCQltZW1zZXQoYmxvYiwgMCwgYmxvYnNpemUpOworCQltX2ZyZWUoYmxvYik7CisJfQorCW1lbXNldChrZXktPmtleWJsb2IsIDAsIGtleS0+a2V5YmxvYl9zaXplKTsKKwltX2ZyZWUoa2V5LT5rZXlibG9iKTsKKwltZW1zZXQoJmtleSwgMCwgc2l6ZW9mKGtleSkpOworCW1fZnJlZShrZXkpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBzc2hjb21fd3JpdGUoY29uc3QgY2hhciAqZmlsZW5hbWUsIHNpZ25fa2V5ICprZXksCisJCQkJIGNoYXIgKnBhc3NwaHJhc2UpCit7CisJdW5zaWduZWQgY2hhciAqcHViYmxvYiwgKnByaXZibG9iOworCWludCBwdWJsZW4sIHByaXZsZW47CisJdW5zaWduZWQgY2hhciAqb3V0YmxvYjsKKwlpbnQgb3V0bGVuOworCXN0cnVjdCBtcGludF9wb3MgbnVtYmVyc1s2XTsKKwlpbnQgbm51bWJlcnMsIGluaXRpYWxfemVybywgcG9zLCBsZW5wb3MsIGk7CisJY2hhciAqdHlwZTsKKwljaGFyICpjaXBoZXJ0ZXh0OworCWludCBjaXBoZXJsZW47CisJaW50IHJldCA9IDA7CisJRklMRSAqZnA7CisKKwkvKgorCSAqIEZldGNoIHRoZSBrZXkgYmxvYnMuCisJICovCisJcHViYmxvYiA9IGtleS0+YWxnLT5wdWJsaWNfYmxvYihrZXktPmRhdGEsICZwdWJsZW4pOworCXByaXZibG9iID0ga2V5LT5hbGctPnByaXZhdGVfYmxvYihrZXktPmRhdGEsICZwcml2bGVuKTsKKwlvdXRibG9iID0gTlVMTDsKKworCS8qCisJICogRmluZCB0aGUgc2VxdWVuY2Ugb2YgaW50ZWdlcnMgdG8gYmUgZW5jb2RlZCBpbnRvIHRoZSBPcGVuU1NICisJICoga2V5IGJsb2IsIGFuZCBhbHNvIGRlY2lkZSBvbiB0aGUgaGVhZGVyIGxpbmUuCisJICovCisJaWYgKGtleS0+YWxnID09ICZzc2hfcnNhKSB7CisJCWludCBwb3M7CisJCXN0cnVjdCBtcGludF9wb3MgbiwgZSwgZCwgcCwgcSwgaXFtcDsKKworCQlwb3MgPSA0ICsgR0VUXzMyQklUKHB1YmJsb2IpOworCQlwb3MgKz0gc3NoMl9yZWFkX21waW50KHB1YmJsb2IrcG9zLCBwdWJsZW4tcG9zLCAmZSk7CisJCXBvcyArPSBzc2gyX3JlYWRfbXBpbnQocHViYmxvYitwb3MsIHB1Ymxlbi1wb3MsICZuKTsKKwkJcG9zID0gMDsKKwkJcG9zICs9IHNzaDJfcmVhZF9tcGludChwcml2YmxvYitwb3MsIHByaXZsZW4tcG9zLCAmZCk7CisJCXBvcyArPSBzc2gyX3JlYWRfbXBpbnQocHJpdmJsb2IrcG9zLCBwcml2bGVuLXBvcywgJnApOworCQlwb3MgKz0gc3NoMl9yZWFkX21waW50KHByaXZibG9iK3BvcywgcHJpdmxlbi1wb3MsICZxKTsKKwkJcG9zICs9IHNzaDJfcmVhZF9tcGludChwcml2YmxvYitwb3MsIHByaXZsZW4tcG9zLCAmaXFtcCk7CisKKwkJZHJvcGJlYXJfYXNzZXJ0KGUuc3RhcnQgJiYgaXFtcC5zdGFydCk7IC8qIGNhbid0IGdvIHdyb25nICovCisKKwkJbnVtYmVyc1swXSA9IGU7CisJCW51bWJlcnNbMV0gPSBkOworCQludW1iZXJzWzJdID0gbjsKKwkJbnVtYmVyc1szXSA9IGlxbXA7CisJCW51bWJlcnNbNF0gPSBxOworCQludW1iZXJzWzVdID0gcDsKKworCQlubnVtYmVycyA9IDY7CisJCWluaXRpYWxfemVybyA9IDA7CisJCXR5cGUgPSAiaWYtbW9kbntzaWdue3JzYS1wa2NzMS1zaGExfSxlbmNyeXB0e3JzYS1wa2NzMXYyLW9hZXB9fSI7CisJfSBlbHNlIGlmIChrZXktPmFsZyA9PSAmc3NoX2RzcykgeworCQlpbnQgcG9zOworCQlzdHJ1Y3QgbXBpbnRfcG9zIHAsIHEsIGcsIHksIHg7CisKKwkJcG9zID0gNCArIEdFVF8zMkJJVChwdWJibG9iKTsKKwkJcG9zICs9IHNzaDJfcmVhZF9tcGludChwdWJibG9iK3BvcywgcHVibGVuLXBvcywgJnApOworCQlwb3MgKz0gc3NoMl9yZWFkX21waW50KHB1YmJsb2IrcG9zLCBwdWJsZW4tcG9zLCAmcSk7CisJCXBvcyArPSBzc2gyX3JlYWRfbXBpbnQocHViYmxvYitwb3MsIHB1Ymxlbi1wb3MsICZnKTsKKwkJcG9zICs9IHNzaDJfcmVhZF9tcGludChwdWJibG9iK3BvcywgcHVibGVuLXBvcywgJnkpOworCQlwb3MgPSAwOworCQlwb3MgKz0gc3NoMl9yZWFkX21waW50KHByaXZibG9iK3BvcywgcHJpdmxlbi1wb3MsICZ4KTsKKworCQlkcm9wYmVhcl9hc3NlcnQoeS5zdGFydCAmJiB4LnN0YXJ0KTsgLyogY2FuJ3QgZ28gd3JvbmcgKi8KKworCQludW1iZXJzWzBdID0gcDsKKwkJbnVtYmVyc1sxXSA9IGc7CisJCW51bWJlcnNbMl0gPSBxOworCQludW1iZXJzWzNdID0geTsKKwkJbnVtYmVyc1s0XSA9IHg7CisKKwkJbm51bWJlcnMgPSA1OworCQlpbml0aWFsX3plcm8gPSAxOworCQl0eXBlID0gImRsLW1vZHB7c2lnbntkc2EtbmlzdC1zaGExfSxkaHtwbGFpbn19IjsKKwl9IGVsc2UgeworCQlkcm9wYmVhcl9hc3NlcnQoMCk7CQkJCQkgLyogem9pbmtzISAqLworCX0KKworCS8qCisJICogVG90YWwgc2l6ZSBvZiBrZXkgYmxvYiB3aWxsIGJlIHNvbWV3aGVyZSB1bmRlciA1MTIgcGx1cworCSAqIGNvbWJpbmVkIGxlbmd0aCBvZiBpbnRlZ2Vycy4gV2UnbGwgY2FsY3VsYXRlIHRoZSBtb3JlCisJICogcHJlY2lzZSBzaXplIGFzIHdlIGNvbnN0cnVjdCB0aGUgYmxvYi4KKwkgKi8KKwlvdXRsZW4gPSA1MTI7CisJZm9yIChpID0gMDsgaSA8IG5udW1iZXJzOyBpKyspCisJCW91dGxlbiArPSA0ICsgbnVtYmVyc1tpXS5ieXRlczsKKwlvdXRibG9iID0gc25ld24ob3V0bGVuLCB1bnNpZ25lZCBjaGFyKTsKKworCS8qCisJICogQ3JlYXRlIHRoZSB1bmVuY3J5cHRlZCBrZXkgYmxvYi4KKwkgKi8KKwlwb3MgPSAwOworCVBVVF8zMkJJVChvdXRibG9iK3BvcywgU1NIQ09NX01BR0lDX05VTUJFUik7IHBvcyArPSA0OworCXBvcyArPSA0OwkJCQkJCQkgICAvKiBsZW5ndGggZmllbGQsIGZpbGwgaW4gbGF0ZXIgKi8KKwlwb3MgKz0gcHV0X3N0cmluZyhvdXRibG9iK3BvcywgdHlwZSwgc3RybGVuKHR5cGUpKTsKKwl7CisJCWNoYXIgKmNpcGhlcnR5cGUgPSBwYXNzcGhyYXNlID8gIjNkZXMtY2JjIiA6ICJub25lIjsKKwkJcG9zICs9IHB1dF9zdHJpbmcob3V0YmxvYitwb3MsIGNpcGhlcnR5cGUsIHN0cmxlbihjaXBoZXJ0eXBlKSk7CisJfQorCWxlbnBvcyA9IHBvczsJCQkJCSAgIC8qIHJlbWVtYmVyIHRoaXMgcG9zaXRpb24gKi8KKwlwb3MgKz0gNDsJCQkJCQkJICAgLyogZW5jcnlwdGVkLWJsb2Igc2l6ZSAqLworCXBvcyArPSA0OwkJCQkJCQkgICAvKiBlbmNyeXB0ZWQtcGF5bG9hZCBzaXplICovCisJaWYgKGluaXRpYWxfemVybykgeworCQlQVVRfMzJCSVQob3V0YmxvYitwb3MsIDApOworCQlwb3MgKz0gNDsKKwl9CisJZm9yIChpID0gMDsgaSA8IG5udW1iZXJzOyBpKyspCisJCXBvcyArPSBzc2hjb21fcHV0X21waW50KG91dGJsb2IrcG9zLAorCQkJCQkJCQludW1iZXJzW2ldLnN0YXJ0LCBudW1iZXJzW2ldLmJ5dGVzKTsKKwkvKiBOb3cgd3JhcCB1cCB0aGUgZW5jcnlwdGVkIHBheWxvYWQuICovCisJUFVUXzMyQklUKG91dGJsb2IrbGVucG9zKzQsIHBvcyAtIChsZW5wb3MrOCkpOworCS8qIFBhZCBlbmNyeXB0ZWQgYmxvYiB0byBhIG11bHRpcGxlIG9mIGNpcGhlciBibG9jayBzaXplLiAqLworCWlmIChwYXNzcGhyYXNlKSB7CisJCWludCBwYWRkaW5nID0gLShwb3MgLSAobGVucG9zKzQpKSAmIDc7CisJCXdoaWxlIChwYWRkaW5nLS0pCisJCQlvdXRibG9iW3BvcysrXSA9IHJhbmRvbV9ieXRlKCk7CisJfQorCWNpcGhlcnRleHQgPSAoY2hhciAqKW91dGJsb2IrbGVucG9zKzQ7CisJY2lwaGVybGVuID0gcG9zIC0gKGxlbnBvcys0KTsKKwlkcm9wYmVhcl9hc3NlcnQoIXBhc3NwaHJhc2UgfHwgY2lwaGVybGVuICUgOCA9PSAwKTsKKwkvKiBXcmFwIHVwIHRoZSBlbmNyeXB0ZWQgYmxvYiBzdHJpbmcuICovCisJUFVUXzMyQklUKG91dGJsb2IrbGVucG9zLCBjaXBoZXJsZW4pOworCS8qIEFuZCBmaW5hbGx5IGZpbGwgaW4gdGhlIHRvdGFsIGxlbmd0aCBmaWVsZC4gKi8KKwlQVVRfMzJCSVQob3V0YmxvYis0LCBwb3MpOworCisJZHJvcGJlYXJfYXNzZXJ0KHBvcyA8IG91dGxlbik7CisKKwkvKgorCSAqIEVuY3J5cHQgdGhlIGtleS4KKwkgKi8KKwlpZiAocGFzc3BocmFzZSkgeworCQkvKgorCQkgKiBEZXJpdmUgZW5jcnlwdGlvbiBrZXkgZnJvbSBwYXNzcGhyYXNlIGFuZCBpdi9zYWx0OgorCQkgKiAKKwkJICogIC0gbGV0IGJsb2NrIEEgZXF1YWwgTUQ1KHBhc3NwaHJhc2UpCisJCSAqICAtIGxldCBibG9jayBCIGVxdWFsIE1ENShwYXNzcGhyYXNlIHx8IEEpCisJCSAqICAtIGJsb2NrIEMgd291bGQgYmUgTUQ1KHBhc3NwaHJhc2UgfHwgQSB8fCBCKSBhbmQgc28gb24KKwkJICogIC0gZW5jcnlwdGlvbiBrZXkgaXMgdGhlIGZpcnN0IE4gYnl0ZXMgb2YgQSB8fCBCCisJCSAqLworCQlzdHJ1Y3QgTUQ1Q29udGV4dCBtZDVjOworCQl1bnNpZ25lZCBjaGFyIGtleWJ1ZlszMl0sIGl2WzhdOworCisJCU1ENUluaXQoJm1kNWMpOworCQlNRDVVcGRhdGUoJm1kNWMsICh1bnNpZ25lZCBjaGFyICopcGFzc3BocmFzZSwgc3RybGVuKHBhc3NwaHJhc2UpKTsKKwkJTUQ1RmluYWwoa2V5YnVmLCAmbWQ1Yyk7CisKKwkJTUQ1SW5pdCgmbWQ1Yyk7CisJCU1ENVVwZGF0ZSgmbWQ1YywgKHVuc2lnbmVkIGNoYXIgKilwYXNzcGhyYXNlLCBzdHJsZW4ocGFzc3BocmFzZSkpOworCQlNRDVVcGRhdGUoJm1kNWMsIGtleWJ1ZiwgMTYpOworCQlNRDVGaW5hbChrZXlidWYrMTYsICZtZDVjKTsKKworCQkvKgorCQkgKiBOb3cgZGVjcnlwdCB0aGUga2V5IGJsb2IuCisJCSAqLworCQltZW1zZXQoaXYsIDAsIHNpemVvZihpdikpOworCQlkZXMzX2VuY3J5cHRfcHVia2V5X29zc2goa2V5YnVmLCBpdiwgKHVuc2lnbmVkIGNoYXIgKiljaXBoZXJ0ZXh0LAorCQkJCQkJCQkgY2lwaGVybGVuKTsKKworCQltZW1zZXQoJm1kNWMsIDAsIHNpemVvZihtZDVjKSk7CisJCW1lbXNldChrZXlidWYsIDAsIHNpemVvZihrZXlidWYpKTsKKwl9CisKKwkvKgorCSAqIEFuZCBzYXZlIGl0LiBXZSdsbCB1c2UgVW5peCBsaW5lIGVuZGluZ3MganVzdCBpbiBjYXNlIGl0J3MKKwkgKiBzdWJzZXF1ZW50bHkgdHJhbnNmZXJyZWQgaW4gYmluYXJ5IG1vZGUuCisJICovCisJZnAgPSBmb3BlbihmaWxlbmFtZSwgIndiIik7CSAgLyogZW5zdXJlIFVuaXggbGluZSBlbmRpbmdzICovCisJaWYgKCFmcCkKKwkJZ290byBlcnJvcjsKKwlmcHV0cygiLS0tLSBCRUdJTiBTU0gyIEVOQ1JZUFRFRCBQUklWQVRFIEtFWSAtLS0tXG4iLCBmcCk7CisJZnByaW50ZihmcCwgIkNvbW1lbnQ6IFwiIik7CisJLyoKKwkgKiBDb21tZW50IGhlYWRlciBpcyBicm9rZW4gd2l0aCBiYWNrc2xhc2gtbmV3bGluZSBpZiBpdCBnb2VzCisJICogb3ZlciA3MCBjaGFycy4gQWx0aG91Z2ggaXQncyBzdXJyb3VuZGVkIGJ5IHF1b3RlcywgaXQKKwkgKiBfZG9lc24ndF8gZXNjYXBlIGJhY2tzbGFzaGVzIG9yIHF1b3RlcyB3aXRoaW4gdGhlIHN0cmluZy4KKwkgKiBEb24ndCBhc2sgbWUsIEkgZGlkbid0IGRlc2lnbiBpdC4KKwkgKi8KKwl7CisJCWludCBzbGVuID0gNjA7CQkJCQkgICAvKiBzdGFydHMgYXQgNjAgZHVlIHRvICJDb21tZW50OiAiICovCisJCWNoYXIgKmMgPSBrZXktPmNvbW1lbnQ7CisJCXdoaWxlICgoaW50KXN0cmxlbihjKSA+IHNsZW4pIHsKKwkJCWZwcmludGYoZnAsICIlLipzXFxcbiIsIHNsZW4sIGMpOworCQkJYyArPSBzbGVuOworCQkJc2xlbiA9IDcwOwkJCQkJICAgLyogYWxsb3cgNzAgY2hhcnMgb24gc3Vic2VxdWVudCBsaW5lcyAqLworCQl9CisJCWZwcmludGYoZnAsICIlc1wiXG4iLCBjKTsKKwl9CisJYmFzZTY0X2VuY29kZV9mcChmcCwgb3V0YmxvYiwgcG9zLCA3MCk7CisJZnB1dHMoIi0tLS0gRU5EIFNTSDIgRU5DUllQVEVEIFBSSVZBVEUgS0VZIC0tLS1cbiIsIGZwKTsKKwlmY2xvc2UoZnApOworCXJldCA9IDE7CisKKwllcnJvcjoKKwlpZiAob3V0YmxvYikgeworCQltZW1zZXQob3V0YmxvYiwgMCwgb3V0bGVuKTsKKwkJbV9mcmVlKG91dGJsb2IpOworCX0KKwlpZiAocHJpdmJsb2IpIHsKKwkJbWVtc2V0KHByaXZibG9iLCAwLCBwcml2bGVuKTsKKwkJbV9mcmVlKHByaXZibG9iKTsKKwl9CisJaWYgKHB1YmJsb2IpIHsKKwkJbWVtc2V0KHB1YmJsb2IsIDAsIHB1Ymxlbik7CisJCW1fZnJlZShwdWJibG9iKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvKiBzc2guY29tIHN0dWZmIGRpc2FibGVkICovCmRpZmYgLS1naXQgYS9rZXlpbXBvcnQuaCBiL2tleWltcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZjIxMmYKLS0tIC9kZXYvbnVsbAorKysgYi9rZXlpbXBvcnQuaApAQCAtMCwwICsxLDQyIEBACisvKgorICogRHJvcGJlYXIgU1NICisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaWZuZGVmIF9LRVlJTVBPUlRfSF8KKyNkZWZpbmUgX0tFWUlNUE9SVF9IXworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJzaWdua2V5LmgiCisKK2VudW0geworCUtFWUZJTEVfRFJPUEJFQVIsCisJS0VZRklMRV9PUEVOU1NILAorCUtFWUZJTEVfU1NIQ09NCit9OworCitpbnQgaW1wb3J0X3dyaXRlKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBzaWduX2tleSAqa2V5LCBjaGFyICpwYXNzcGhyYXNlLAorCQlpbnQgZmlsZXR5cGUpOworc2lnbl9rZXkgKmltcG9ydF9yZWFkKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjaGFyICpwYXNzcGhyYXNlLCBpbnQgZmlsZXR5cGUpOworaW50IGltcG9ydF9lbmNyeXB0ZWQoY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBmaWxldHlwZSk7CisKKyNlbmRpZiAvKiBfS0VZSU1QT1JUX0hfICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9BbmRyb2lkLm1rIGIvbGlidG9tY3J5cHQvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGYwNjUxCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvQW5kcm9pZC5tawpAQCAtMCwwICsxLDcxIEBACitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9NT0RVTEUgOj0gbGlidG9tY3J5cHQKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChMT0NBTF9QQVRIKS9zcmMvaGVhZGVycyAkKExPQ0FMX1BBVEgpLy4uCisKK0xPQ0FMX0NGTEFHUyArPSAtRERST1BCRUFSX0NMSUVOVAorTE9DQUxfU1JDX0ZJTEVTIDo9IFwKK3NyYy9jaXBoZXJzL2Flcy9hZXMuYyBzcmMvY2lwaGVycy9hbnViaXMuYyBzcmMvY2lwaGVycy9ibG93ZmlzaC5jIFwKK3NyYy9jaXBoZXJzL2Nhc3Q1LmMgc3JjL2NpcGhlcnMvZGVzLmMgc3JjL2NpcGhlcnMva2FzdW1pLmMgc3JjL2NpcGhlcnMva2hhemFkLmMgc3JjL2NpcGhlcnMva3NlZWQuYyBcCitzcmMvY2lwaGVycy9ub2VrZW9uLmMgc3JjL2NpcGhlcnMvcmMyLmMgc3JjL2NpcGhlcnMvcmM1LmMgc3JjL2NpcGhlcnMvcmM2LmMgc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXIuYyBcCitzcmMvY2lwaGVycy9zYWZlci9zYWZlcl90YWIuYyBzcmMvY2lwaGVycy9zYWZlci9zYWZlcnAuYyBzcmMvY2lwaGVycy9za2lwamFjay5jIFwKK3NyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaC5jIHNyYy9jaXBoZXJzL3h0ZWEuYyBzcmMvZW5jYXV0aC9jY20vY2NtX21lbW9yeS5jIFwKK3NyYy9lbmNhdXRoL2NjbS9jY21fdGVzdC5jIHNyYy9lbmNhdXRoL2VheC9lYXhfYWRkaGVhZGVyLmMgc3JjL2VuY2F1dGgvZWF4L2VheF9kZWNyeXB0LmMgXAorc3JjL2VuY2F1dGgvZWF4L2VheF9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkuYyBzcmMvZW5jYXV0aC9lYXgvZWF4X2RvbmUuYyBzcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHQuYyBcCitzcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5jIHNyYy9lbmNhdXRoL2VheC9lYXhfaW5pdC5jIFwKK3NyYy9lbmNhdXRoL2VheC9lYXhfdGVzdC5jIHNyYy9lbmNhdXRoL2djbS9nY21fYWRkX2FhZC5jIHNyYy9lbmNhdXRoL2djbS9nY21fYWRkX2l2LmMgXAorc3JjL2VuY2F1dGgvZ2NtL2djbV9kb25lLmMgc3JjL2VuY2F1dGgvZ2NtL2djbV9nZl9tdWx0LmMgc3JjL2VuY2F1dGgvZ2NtL2djbV9pbml0LmMgXAorc3JjL2VuY2F1dGgvZ2NtL2djbV9tZW1vcnkuYyBzcmMvZW5jYXV0aC9nY20vZ2NtX211bHRfaC5jIHNyYy9lbmNhdXRoL2djbS9nY21fcHJvY2Vzcy5jIFwKK3NyYy9lbmNhdXRoL2djbS9nY21fcmVzZXQuYyBzcmMvZW5jYXV0aC9nY20vZ2NtX3Rlc3QuYyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHQuYyBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5jIHNyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9kZWNyeXB0LmMgXAorc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2VuY3J5cHQuYyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHQuYyBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5jIHNyYy9lbmNhdXRoL29jYi9vY2JfaW5pdC5jIHNyYy9lbmNhdXRoL29jYi9vY2JfbnR6LmMgXAorc3JjL2VuY2F1dGgvb2NiL29jYl9zaGlmdF94b3IuYyBzcmMvZW5jYXV0aC9vY2Ivb2NiX3Rlc3QuYyBzcmMvZW5jYXV0aC9vY2Ivc19vY2JfZG9uZS5jIFwKK3NyYy9oYXNoZXMvY2hjL2NoYy5jIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZS5jIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZWhhbmRsZS5jIFwKK3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5LmMgc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9tZW1vcnlfbXVsdGkuYyBzcmMvaGFzaGVzL21kMi5jIHNyYy9oYXNoZXMvbWQ0LmMgXAorc3JjL2hhc2hlcy9tZDUuYyBzcmMvaGFzaGVzL3JtZDEyOC5jIHNyYy9oYXNoZXMvcm1kMTYwLmMgc3JjL2hhc2hlcy9ybWQyNTYuYyBzcmMvaGFzaGVzL3JtZDMyMC5jIFwKK3NyYy9oYXNoZXMvc2hhMS5jIHNyYy9oYXNoZXMvc2hhMi9zaGEyNTYuYyBzcmMvaGFzaGVzL3NoYTIvc2hhNTEyLmMgc3JjL2hhc2hlcy90aWdlci5jIFwKK3NyYy9oYXNoZXMvd2hpcmwvd2hpcmwuYyBzcmMvbWFjL2Y5L2Y5X2RvbmUuYyBzcmMvbWFjL2Y5L2Y5X2ZpbGUuYyBzcmMvbWFjL2Y5L2Y5X2luaXQuYyBcCitzcmMvbWFjL2Y5L2Y5X21lbW9yeS5jIHNyYy9tYWMvZjkvZjlfbWVtb3J5X211bHRpLmMgc3JjL21hYy9mOS9mOV9wcm9jZXNzLmMgc3JjL21hYy9mOS9mOV90ZXN0LmMgXAorc3JjL21hYy9obWFjL2htYWNfZG9uZS5jIHNyYy9tYWMvaG1hYy9obWFjX2ZpbGUuYyBzcmMvbWFjL2htYWMvaG1hY19pbml0LmMgc3JjL21hYy9obWFjL2htYWNfbWVtb3J5LmMgXAorc3JjL21hYy9obWFjL2htYWNfbWVtb3J5X211bHRpLmMgc3JjL21hYy9obWFjL2htYWNfcHJvY2Vzcy5jIHNyYy9tYWMvaG1hYy9obWFjX3Rlc3QuYyBcCitzcmMvbWFjL29tYWMvb21hY19kb25lLmMgc3JjL21hYy9vbWFjL29tYWNfZmlsZS5jIHNyYy9tYWMvb21hYy9vbWFjX2luaXQuYyBzcmMvbWFjL29tYWMvb21hY19tZW1vcnkuYyBcCitzcmMvbWFjL29tYWMvb21hY19tZW1vcnlfbXVsdGkuYyBzcmMvbWFjL29tYWMvb21hY19wcm9jZXNzLmMgc3JjL21hYy9vbWFjL29tYWNfdGVzdC5jIFwKK3NyYy9tYWMvcGVsaWNhbi9wZWxpY2FuLmMgc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fbWVtb3J5LmMgc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fdGVzdC5jIFwKK3NyYy9tYWMvcG1hYy9wbWFjX2RvbmUuYyBzcmMvbWFjL3BtYWMvcG1hY19maWxlLmMgc3JjL21hYy9wbWFjL3BtYWNfaW5pdC5jIHNyYy9tYWMvcG1hYy9wbWFjX21lbW9yeS5jIFwKK3NyYy9tYWMvcG1hYy9wbWFjX21lbW9yeV9tdWx0aS5jIHNyYy9tYWMvcG1hYy9wbWFjX250ei5jIHNyYy9tYWMvcG1hYy9wbWFjX3Byb2Nlc3MuYyBcCitzcmMvbWFjL3BtYWMvcG1hY19zaGlmdF94b3IuYyBzcmMvbWFjL3BtYWMvcG1hY190ZXN0LmMgc3JjL21hYy94Y2JjL3hjYmNfZG9uZS5jIFwKK3NyYy9tYWMveGNiYy94Y2JjX2ZpbGUuYyBzcmMvbWFjL3hjYmMveGNiY19pbml0LmMgc3JjL21hYy94Y2JjL3hjYmNfbWVtb3J5LmMgXAorc3JjL21hYy94Y2JjL3hjYmNfbWVtb3J5X211bHRpLmMgc3JjL21hYy94Y2JjL3hjYmNfcHJvY2Vzcy5jIHNyYy9tYWMveGNiYy94Y2JjX3Rlc3QuYyBcCitzcmMvbWF0aC9mcC9sdGNfZWNjX2ZwX211bG1vZC5jIHNyYy9tYXRoL2dtcF9kZXNjLmMgc3JjL21hdGgvbHRtX2Rlc2MuYyBzcmMvbWF0aC9tdWx0aS5jIFwKK3NyYy9tYXRoL3JhbmRfcHJpbWUuYyBzcmMvbWF0aC90Zm1fZGVzYy5jIHNyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZGVjb2RlLmMgXAorc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9lbmNvZGUuYyBzcmMvbWlzYy9idXJuX3N0YWNrLmMgc3JjL21pc2MvY3J5cHQvY3J5cHQuYyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9hcmdjaGsuYyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfZGVzY3JpcHRvci5jIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9pc192YWxpZC5jIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyLmMgXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfYW55LmMgc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfaWQuYyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2guYyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfYW55LmMgXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2lkLmMgc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX29pZC5jIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfcHJuZy5jIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZzYS5jIHNyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfZGVzY3JpcHRvci5jIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfaXNfdmFsaWQuYyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9sdGNfbXBfZGVzY3JpcHRvci5jIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfZGVzY3JpcHRvci5jIHNyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfaXNfdmFsaWQuYyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9jaXBoZXIuYyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9oYXNoLmMgXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfcHJuZy5jIHNyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfY2lwaGVyLmMgXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9oYXNoLmMgc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9wcm5nLmMgXAorc3JjL21pc2MvZXJyb3JfdG9fc3RyaW5nLmMgc3JjL21pc2MvcGtjczUvcGtjc181XzEuYyBzcmMvbWlzYy9wa2NzNS9wa2NzXzVfMi5jIHNyYy9taXNjL3plcm9tZW0uYyBcCitzcmMvbW9kZXMvY2JjL2NiY19kZWNyeXB0LmMgc3JjL21vZGVzL2NiYy9jYmNfZG9uZS5jIHNyYy9tb2Rlcy9jYmMvY2JjX2VuY3J5cHQuYyBcCitzcmMvbW9kZXMvY2JjL2NiY19nZXRpdi5jIHNyYy9tb2Rlcy9jYmMvY2JjX3NldGl2LmMgc3JjL21vZGVzL2NiYy9jYmNfc3RhcnQuYyBcCitzcmMvbW9kZXMvY2ZiL2NmYl9kZWNyeXB0LmMgc3JjL21vZGVzL2NmYi9jZmJfZG9uZS5jIHNyYy9tb2Rlcy9jZmIvY2ZiX2VuY3J5cHQuYyBcCitzcmMvbW9kZXMvY2ZiL2NmYl9nZXRpdi5jIHNyYy9tb2Rlcy9jZmIvY2ZiX3NldGl2LmMgc3JjL21vZGVzL2NmYi9jZmJfc3RhcnQuYyBcCitzcmMvbW9kZXMvY3RyL2N0cl9kZWNyeXB0LmMgc3JjL21vZGVzL2N0ci9jdHJfZG9uZS5jIHNyYy9tb2Rlcy9jdHIvY3RyX2VuY3J5cHQuYyBcCitzcmMvbW9kZXMvY3RyL2N0cl9nZXRpdi5jIHNyYy9tb2Rlcy9jdHIvY3RyX3NldGl2LmMgc3JjL21vZGVzL2N0ci9jdHJfc3RhcnQuYyBzcmMvbW9kZXMvY3RyL2N0cl90ZXN0LmMgXAorc3JjL21vZGVzL2VjYi9lY2JfZGVjcnlwdC5jIHNyYy9tb2Rlcy9lY2IvZWNiX2RvbmUuYyBzcmMvbW9kZXMvZWNiL2VjYl9lbmNyeXB0LmMgXAorc3JjL21vZGVzL2VjYi9lY2Jfc3RhcnQuYyBzcmMvbW9kZXMvZjgvZjhfZGVjcnlwdC5jIHNyYy9tb2Rlcy9mOC9mOF9kb25lLmMgc3JjL21vZGVzL2Y4L2Y4X2VuY3J5cHQuYyBcCitzcmMvbW9kZXMvZjgvZjhfZ2V0aXYuYyBzcmMvbW9kZXMvZjgvZjhfc2V0aXYuYyBzcmMvbW9kZXMvZjgvZjhfc3RhcnQuYyBzcmMvbW9kZXMvZjgvZjhfdGVzdF9tb2RlLmMgXAorc3JjL21vZGVzL2xydy9scndfZGVjcnlwdC5jIHNyYy9tb2Rlcy9scncvbHJ3X2RvbmUuYyBzcmMvbW9kZXMvbHJ3L2xyd19lbmNyeXB0LmMgXAorc3JjL21vZGVzL2xydy9scndfZ2V0aXYuYyBzcmMvbW9kZXMvbHJ3L2xyd19wcm9jZXNzLmMgc3JjL21vZGVzL2xydy9scndfc2V0aXYuYyBcCitzcmMvbW9kZXMvbHJ3L2xyd19zdGFydC5jIHNyYy9tb2Rlcy9scncvbHJ3X3Rlc3QuYyBzcmMvbW9kZXMvb2ZiL29mYl9kZWNyeXB0LmMgc3JjL21vZGVzL29mYi9vZmJfZG9uZS5jIFwKK3NyYy9tb2Rlcy9vZmIvb2ZiX2VuY3J5cHQuYyBzcmMvbW9kZXMvb2ZiL29mYl9nZXRpdi5jIHNyYy9tb2Rlcy9vZmIvb2ZiX3NldGl2LmMgXAorc3JjL21vZGVzL29mYi9vZmJfc3RhcnQuYyAKKworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvRG94eWZpbGUgYi9saWJ0b21jcnlwdC9Eb3h5ZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGEwMWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvRG94eWZpbGUKQEAgLTAsMCArMSwxMTU1IEBACisjIERveHlmaWxlIDEuMy45LjEKKworIyBUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBzZXR0aW5ncyB0byBiZSB1c2VkIGJ5IHRoZSBkb2N1bWVudGF0aW9uIHN5c3RlbQorIyBkb3h5Z2VuICh3d3cuZG94eWdlbi5vcmcpIGZvciBhIHByb2plY3QKKyMKKyMgQWxsIHRleHQgYWZ0ZXIgYSBoYXNoICgjKSBpcyBjb25zaWRlcmVkIGEgY29tbWVudCBhbmQgd2lsbCBiZSBpZ25vcmVkCisjIFRoZSBmb3JtYXQgaXM6CisjICAgICAgIFRBRyA9IHZhbHVlIFt2YWx1ZSwgLi4uXQorIyBGb3IgbGlzdHMgaXRlbXMgY2FuIGFsc28gYmUgYXBwZW5kZWQgdXNpbmc6CisjICAgICAgIFRBRyArPSB2YWx1ZSBbdmFsdWUsIC4uLl0KKyMgVmFsdWVzIHRoYXQgY29udGFpbiBzcGFjZXMgc2hvdWxkIGJlIHBsYWNlZCBiZXR3ZWVuIHF1b3RlcyAoIiAiKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2plY3QgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgUFJPSkVDVF9OQU1FIHRhZyBpcyBhIHNpbmdsZSB3b3JkIChvciBhIHNlcXVlbmNlIG9mIHdvcmRzIHN1cnJvdW5kZWQgCisjIGJ5IHF1b3RlcykgdGhhdCBzaG91bGQgaWRlbnRpZnkgdGhlIHByb2plY3QuCisKK1BST0pFQ1RfTkFNRSAgICAgICAgICAgPSBMaWJUb21DcnlwdAorCisjIFRoZSBQUk9KRUNUX05VTUJFUiB0YWcgY2FuIGJlIHVzZWQgdG8gZW50ZXIgYSBwcm9qZWN0IG9yIHJldmlzaW9uIG51bWJlci4gCisjIFRoaXMgY291bGQgYmUgaGFuZHkgZm9yIGFyY2hpdmluZyB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gb3IgCisjIGlmIHNvbWUgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBpcyB1c2VkLgorCitQUk9KRUNUX05VTUJFUiAgICAgICAgID0gMS4xNgorCisjIFRoZSBPVVRQVVRfRElSRUNUT1JZIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIChyZWxhdGl2ZSBvciBhYnNvbHV0ZSkgCisjIGJhc2UgcGF0aCB3aGVyZSB0aGUgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBiZSBwdXQuIAorIyBJZiBhIHJlbGF0aXZlIHBhdGggaXMgZW50ZXJlZCwgaXQgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gCisjIHdoZXJlIGRveHlnZW4gd2FzIHN0YXJ0ZWQuIElmIGxlZnQgYmxhbmsgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpbGwgYmUgdXNlZC4KKworT1VUUFVUX0RJUkVDVE9SWSAgICAgICA9IGRvYy9kb3h5Z2VuCisKKyMgSWYgdGhlIENSRUFURV9TVUJESVJTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGVuIGRveHlnZW4gd2lsbCBjcmVhdGUgCisjIDQwOTYgc3ViLWRpcmVjdG9yaWVzIChpbiAyIGxldmVscykgdW5kZXIgdGhlIG91dHB1dCBkaXJlY3Rvcnkgb2YgZWFjaCBvdXRwdXQgCisjIGZvcm1hdCBhbmQgd2lsbCBkaXN0cmlidXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMgb3ZlciB0aGVzZSBkaXJlY3Rvcmllcy4gCisjIEVuYWJsaW5nIHRoaXMgb3B0aW9uIGNhbiBiZSB1c2VmdWwgd2hlbiBmZWVkaW5nIGRveHlnZW4gYSBodWdlIGFtb3VudCBvZiBzb3VyY2UgCisjIGZpbGVzLCB3aGVyZSBwdXR0aW5nIGFsbCBnZW5lcmF0ZWQgZmlsZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHdvdWxkIG90aGVyd2lzZSAKKyMgY2F1c2UgcGVyZm9ybWFuY2UgcHJvYmxlbXMgZm9yIHRoZSBmaWxlIHN5c3RlbS4KKworQ1JFQVRFX1NVQkRJUlMgICAgICAgICA9IE5PCisKKyMgVGhlIE9VVFBVVF9MQU5HVUFHRSB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBsYW5ndWFnZSBpbiB3aGljaCBhbGwgCisjIGRvY3VtZW50YXRpb24gZ2VuZXJhdGVkIGJ5IGRveHlnZW4gaXMgd3JpdHRlbi4gRG94eWdlbiB3aWxsIHVzZSB0aGlzIAorIyBpbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBhbGwgY29uc3RhbnQgb3V0cHV0IGluIHRoZSBwcm9wZXIgbGFuZ3VhZ2UuIAorIyBUaGUgZGVmYXVsdCBsYW5ndWFnZSBpcyBFbmdsaXNoLCBvdGhlciBzdXBwb3J0ZWQgbGFuZ3VhZ2VzIGFyZTogCisjIEJyYXppbGlhbiwgQ2F0YWxhbiwgQ2hpbmVzZSwgQ2hpbmVzZS1UcmFkaXRpb25hbCwgQ3JvYXRpYW4sIEN6ZWNoLCBEYW5pc2gsIAorIyBEdXRjaCwgRmlubmlzaCwgRnJlbmNoLCBHZXJtYW4sIEdyZWVrLCBIdW5nYXJpYW4sIEl0YWxpYW4sIEphcGFuZXNlLCAKKyMgSmFwYW5lc2UtZW4gKEphcGFuZXNlIHdpdGggRW5nbGlzaCBtZXNzYWdlcyksIEtvcmVhbiwgS29yZWFuLWVuLCBOb3J3ZWdpYW4sIAorIyBQb2xpc2gsIFBvcnR1Z3Vlc2UsIFJvbWFuaWFuLCBSdXNzaWFuLCBTZXJiaWFuLCBTbG92YWssIFNsb3ZlbmUsIFNwYW5pc2gsIAorIyBTd2VkaXNoLCBhbmQgVWtyYWluaWFuLgorCitPVVRQVVRfTEFOR1VBR0UgICAgICAgID0gRW5nbGlzaAorCisjIFRoaXMgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGVuY29kaW5nIHVzZWQgaW4gdGhlIGdlbmVyYXRlZCBvdXRwdXQuIAorIyBUaGUgZW5jb2RpbmcgaXMgbm90IGFsd2F5cyBkZXRlcm1pbmVkIGJ5IHRoZSBsYW5ndWFnZSB0aGF0IGlzIGNob3NlbiwgCisjIGJ1dCBhbHNvIHdoZXRoZXIgb3Igbm90IHRoZSBvdXRwdXQgaXMgbWVhbnQgZm9yIFdpbmRvd3Mgb3Igbm9uLVdpbmRvd3MgdXNlcnMuIAorIyBJbiBjYXNlIHRoZXJlIGlzIGEgZGlmZmVyZW5jZSwgc2V0dGluZyB0aGUgVVNFX1dJTkRPV1NfRU5DT0RJTkcgdGFnIHRvIFlFUyAKKyMgZm9yY2VzIHRoZSBXaW5kb3dzIGVuY29kaW5nICh0aGlzIGlzIHRoZSBkZWZhdWx0IGZvciB0aGUgV2luZG93cyBiaW5hcnkpLCAKKyMgd2hlcmVhcyBzZXR0aW5nIHRoZSB0YWcgdG8gTk8gdXNlcyBhIFVuaXgtc3R5bGUgZW5jb2RpbmcgKHRoZSBkZWZhdWx0IGZvciAKKyMgYWxsIHBsYXRmb3JtcyBvdGhlciB0aGFuIFdpbmRvd3MpLgorCitVU0VfV0lORE9XU19FTkNPRElORyAgID0gTk8KKworIyBJZiB0aGUgQlJJRUZfTUVNQkVSX0RFU0MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgCisjIGluY2x1ZGUgYnJpZWYgbWVtYmVyIGRlc2NyaXB0aW9ucyBhZnRlciB0aGUgbWVtYmVycyB0aGF0IGFyZSBsaXN0ZWQgaW4gCisjIHRoZSBmaWxlIGFuZCBjbGFzcyBkb2N1bWVudGF0aW9uIChzaW1pbGFyIHRvIEphdmFEb2MpLiAKKyMgU2V0IHRvIE5PIHRvIGRpc2FibGUgdGhpcy4KKworQlJJRUZfTUVNQkVSX0RFU0MgICAgICA9IFlFUworCisjIElmIHRoZSBSRVBFQVRfQlJJRUYgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgcHJlcGVuZCAKKyMgdGhlIGJyaWVmIGRlc2NyaXB0aW9uIG9mIGEgbWVtYmVyIG9yIGZ1bmN0aW9uIGJlZm9yZSB0aGUgZGV0YWlsZWQgZGVzY3JpcHRpb24uIAorIyBOb3RlOiBpZiBib3RoIEhJREVfVU5ET0NfTUVNQkVSUyBhbmQgQlJJRUZfTUVNQkVSX0RFU0MgYXJlIHNldCB0byBOTywgdGhlIAorIyBicmllZiBkZXNjcmlwdGlvbnMgd2lsbCBiZSBjb21wbGV0ZWx5IHN1cHByZXNzZWQuCisKK1JFUEVBVF9CUklFRiAgICAgICAgICAgPSBZRVMKKworIyBUaGlzIHRhZyBpbXBsZW1lbnRzIGEgcXVhc2ktaW50ZWxsaWdlbnQgYnJpZWYgZGVzY3JpcHRpb24gYWJicmV2aWF0b3IgCisjIHRoYXQgaXMgdXNlZCB0byBmb3JtIHRoZSB0ZXh0IGluIHZhcmlvdXMgbGlzdGluZ3MuIEVhY2ggc3RyaW5nIAorIyBpbiB0aGlzIGxpc3QsIGlmIGZvdW5kIGFzIHRoZSBsZWFkaW5nIHRleHQgb2YgdGhlIGJyaWVmIGRlc2NyaXB0aW9uLCB3aWxsIGJlIAorIyBzdHJpcHBlZCBmcm9tIHRoZSB0ZXh0IGFuZCB0aGUgcmVzdWx0IGFmdGVyIHByb2Nlc3NpbmcgdGhlIHdob2xlIGxpc3QsIGlzIHVzZWQgCisjIGFzIHRoZSBhbm5vdGF0ZWQgdGV4dC4gT3RoZXJ3aXNlLCB0aGUgYnJpZWYgZGVzY3JpcHRpb24gaXMgdXNlZCBhcy1pcy4gSWYgbGVmdCAKKyMgYmxhbmssIHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSB1c2VkICgiJG5hbWUiIGlzIGF1dG9tYXRpY2FsbHkgcmVwbGFjZWQgd2l0aCB0aGUgCisjIG5hbWUgb2YgdGhlIGVudGl0eSk6ICJUaGUgJG5hbWUgY2xhc3MiICJUaGUgJG5hbWUgd2lkZ2V0IiAiVGhlICRuYW1lIGZpbGUiIAorIyAiaXMiICJwcm92aWRlcyIgInNwZWNpZmllcyIgImNvbnRhaW5zIiAicmVwcmVzZW50cyIgImEiICJhbiIgInRoZSIKKworQUJCUkVWSUFURV9CUklFRiAgICAgICA9IAorCisjIElmIHRoZSBBTFdBWVNfREVUQUlMRURfU0VDIGFuZCBSRVBFQVRfQlJJRUYgdGFncyBhcmUgYm90aCBzZXQgdG8gWUVTIHRoZW4gCisjIERveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGRldGFpbGVkIHNlY3Rpb24gZXZlbiBpZiB0aGVyZSBpcyBvbmx5IGEgYnJpZWYgCisjIGRlc2NyaXB0aW9uLgorCitBTFdBWVNfREVUQUlMRURfU0VDICAgID0gTk8KKworIyBJZiB0aGUgSU5MSU5FX0lOSEVSSVRFRF9NRU1CIHRhZyBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgc2hvdyBhbGwgaW5oZXJpdGVkIAorIyBtZW1iZXJzIG9mIGEgY2xhc3MgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBjbGFzcyBhcyBpZiB0aG9zZSBtZW1iZXJzIHdlcmUgCisjIG9yZGluYXJ5IGNsYXNzIG1lbWJlcnMuIENvbnN0cnVjdG9ycywgZGVzdHJ1Y3RvcnMgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3JzIG9mIAorIyB0aGUgYmFzZSBjbGFzc2VzIHdpbGwgbm90IGJlIHNob3duLgorCitJTkxJTkVfSU5IRVJJVEVEX01FTUIgID0gTk8KKworIyBJZiB0aGUgRlVMTF9QQVRIX05BTUVTIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gRG94eWdlbiB3aWxsIHByZXBlbmQgdGhlIGZ1bGwgCisjIHBhdGggYmVmb3JlIGZpbGVzIG5hbWUgaW4gdGhlIGZpbGUgbGlzdCBhbmQgaW4gdGhlIGhlYWRlciBmaWxlcy4gSWYgc2V0IAorIyB0byBOTyB0aGUgc2hvcnRlc3QgcGF0aCB0aGF0IG1ha2VzIHRoZSBmaWxlIG5hbWUgdW5pcXVlIHdpbGwgYmUgdXNlZC4KKworRlVMTF9QQVRIX05BTUVTICAgICAgICA9IFlFUworCisjIElmIHRoZSBGVUxMX1BBVEhfTkFNRVMgdGFnIGlzIHNldCB0byBZRVMgdGhlbiB0aGUgU1RSSVBfRlJPTV9QQVRIIHRhZyAKKyMgY2FuIGJlIHVzZWQgdG8gc3RyaXAgYSB1c2VyLWRlZmluZWQgcGFydCBvZiB0aGUgcGF0aC4gU3RyaXBwaW5nIGlzIAorIyBvbmx5IGRvbmUgaWYgb25lIG9mIHRoZSBzcGVjaWZpZWQgc3RyaW5ncyBtYXRjaGVzIHRoZSBsZWZ0LWhhbmQgcGFydCBvZiAKKyMgdGhlIHBhdGguIFRoZSB0YWcgY2FuIGJlIHVzZWQgdG8gc2hvdyByZWxhdGl2ZSBwYXRocyBpbiB0aGUgZmlsZSBsaXN0LiAKKyMgSWYgbGVmdCBibGFuayB0aGUgZGlyZWN0b3J5IGZyb20gd2hpY2ggZG94eWdlbiBpcyBydW4gaXMgdXNlZCBhcyB0aGUgCisjIHBhdGggdG8gc3RyaXAuCisKK1NUUklQX0ZST01fUEFUSCAgICAgICAgPSBzcmMKKworIyBUaGUgU1RSSVBfRlJPTV9JTkNfUEFUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc3RyaXAgYSB1c2VyLWRlZmluZWQgcGFydCBvZiAKKyMgdGhlIHBhdGggbWVudGlvbmVkIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIGEgY2xhc3MsIHdoaWNoIHRlbGxzIAorIyB0aGUgcmVhZGVyIHdoaWNoIGhlYWRlciBmaWxlIHRvIGluY2x1ZGUgaW4gb3JkZXIgdG8gdXNlIGEgY2xhc3MuIAorIyBJZiBsZWZ0IGJsYW5rIG9ubHkgdGhlIG5hbWUgb2YgdGhlIGhlYWRlciBmaWxlIGNvbnRhaW5pbmcgdGhlIGNsYXNzIAorIyBkZWZpbml0aW9uIGlzIHVzZWQuIE90aGVyd2lzZSBvbmUgc2hvdWxkIHNwZWNpZnkgdGhlIGluY2x1ZGUgcGF0aHMgdGhhdCAKKyMgYXJlIG5vcm1hbGx5IHBhc3NlZCB0byB0aGUgY29tcGlsZXIgdXNpbmcgdGhlIC1JIGZsYWcuCisKK1NUUklQX0ZST01fSU5DX1BBVEggICAgPSBzcmMvaGVhZGVycworCisjIElmIHRoZSBTSE9SVF9OQU1FUyB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGdlbmVyYXRlIG11Y2ggc2hvcnRlciAKKyMgKGJ1dCBsZXNzIHJlYWRhYmxlKSBmaWxlIG5hbWVzLiBUaGlzIGNhbiBiZSB1c2VmdWwgaXMgeW91ciBmaWxlIHN5c3RlbXMgCisjIGRvZXNuJ3Qgc3VwcG9ydCBsb25nIG5hbWVzIGxpa2Ugb24gRE9TLCBNYWMsIG9yIENELVJPTS4KKworU0hPUlRfTkFNRVMgICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEpBVkFET0NfQVVUT0JSSUVGIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gRG94eWdlbiAKKyMgd2lsbCBpbnRlcnByZXQgdGhlIGZpcnN0IGxpbmUgKHVudGlsIHRoZSBmaXJzdCBkb3QpIG9mIGEgSmF2YURvYy1zdHlsZSAKKyMgY29tbWVudCBhcyB0aGUgYnJpZWYgZGVzY3JpcHRpb24uIElmIHNldCB0byBOTywgdGhlIEphdmFEb2MgCisjIGNvbW1lbnRzIHdpbGwgYmVoYXZlIGp1c3QgbGlrZSB0aGUgUXQtc3R5bGUgY29tbWVudHMgKHRodXMgcmVxdWlyaW5nIGFuIAorIyBleHBsaWNpdCBAYnJpZWYgY29tbWFuZCBmb3IgYSBicmllZiBkZXNjcmlwdGlvbi4KKworSkFWQURPQ19BVVRPQlJJRUYgICAgICA9IFlFUworCisjIFRoZSBNVUxUSUxJTkVfQ1BQX0lTX0JSSUVGIHRhZyBjYW4gYmUgc2V0IHRvIFlFUyB0byBtYWtlIERveHlnZW4gCisjIHRyZWF0IGEgbXVsdGktbGluZSBDKysgc3BlY2lhbCBjb21tZW50IGJsb2NrIChpLmUuIGEgYmxvY2sgb2YgLy8hIG9yIC8vLyAKKyMgY29tbWVudHMpIGFzIGEgYnJpZWYgZGVzY3JpcHRpb24uIFRoaXMgdXNlZCB0byBiZSB0aGUgZGVmYXVsdCBiZWhhdmlvdXIuIAorIyBUaGUgbmV3IGRlZmF1bHQgaXMgdG8gdHJlYXQgYSBtdWx0aS1saW5lIEMrKyBjb21tZW50IGJsb2NrIGFzIGEgZGV0YWlsZWQgCisjIGRlc2NyaXB0aW9uLiBTZXQgdGhpcyB0YWcgdG8gWUVTIGlmIHlvdSBwcmVmZXIgdGhlIG9sZCBiZWhhdmlvdXIgaW5zdGVhZC4KKworTVVMVElMSU5FX0NQUF9JU19CUklFRiA9IE5PCisKKyMgSWYgdGhlIERFVEFJTFNfQVRfVE9QIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gRG94eWdlbiAKKyMgd2lsbCBvdXRwdXQgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG5lYXIgdGhlIHRvcCwgbGlrZSBKYXZhRG9jLgorIyBJZiBzZXQgdG8gTk8sIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBhcHBlYXJzIGFmdGVyIHRoZSBtZW1iZXIgCisjIGRvY3VtZW50YXRpb24uCisKK0RFVEFJTFNfQVRfVE9QICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgSU5IRVJJVF9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBhbiB1bmRvY3VtZW50ZWQgCisjIG1lbWJlciBpbmhlcml0cyB0aGUgZG9jdW1lbnRhdGlvbiBmcm9tIGFueSBkb2N1bWVudGVkIG1lbWJlciB0aGF0IGl0IAorIyByZS1pbXBsZW1lbnRzLgorCitJTkhFUklUX0RPQ1MgICAgICAgICAgID0gWUVTCisKKyMgSWYgbWVtYmVyIGdyb3VwaW5nIGlzIHVzZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kIHRoZSBESVNUUklCVVRFX0dST1VQX0RPQyAKKyMgdGFnIGlzIHNldCB0byBZRVMsIHRoZW4gZG94eWdlbiB3aWxsIHJldXNlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBmaXJzdCAKKyMgbWVtYmVyIGluIHRoZSBncm91cCAoaWYgYW55KSBmb3IgdGhlIG90aGVyIG1lbWJlcnMgb2YgdGhlIGdyb3VwLiBCeSBkZWZhdWx0IAorIyBhbGwgbWVtYmVycyBvZiBhIGdyb3VwIG11c3QgYmUgZG9jdW1lbnRlZCBleHBsaWNpdGx5LgorCitESVNUUklCVVRFX0dST1VQX0RPQyAgID0gTk8KKworIyBUaGUgVEFCX1NJWkUgdGFnIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgbnVtYmVyIG9mIHNwYWNlcyBpbiBhIHRhYi4gCisjIERveHlnZW4gdXNlcyB0aGlzIHZhbHVlIHRvIHJlcGxhY2UgdGFicyBieSBzcGFjZXMgaW4gY29kZSBmcmFnbWVudHMuCisKK1RBQl9TSVpFICAgICAgICAgICAgICAgPSA0CisKKyMgVGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIG51bWJlciBvZiBhbGlhc2VzIHRoYXQgYWN0cyAKKyMgYXMgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uIEFuIGFsaWFzIGhhcyB0aGUgZm9ybSAibmFtZT12YWx1ZSIuIAorIyBGb3IgZXhhbXBsZSBhZGRpbmcgInNpZGVlZmZlY3Q9XHBhciBTaWRlIEVmZmVjdHM6XG4iIHdpbGwgYWxsb3cgeW91IHRvIAorIyBwdXQgdGhlIGNvbW1hbmQgXHNpZGVlZmZlY3QgKG9yIEBzaWRlZWZmZWN0KSBpbiB0aGUgZG9jdW1lbnRhdGlvbiwgd2hpY2ggCisjIHdpbGwgcmVzdWx0IGluIGEgdXNlci1kZWZpbmVkIHBhcmFncmFwaCB3aXRoIGhlYWRpbmcgIlNpZGUgRWZmZWN0czoiLiAKKyMgWW91IGNhbiBwdXQgXG4ncyBpbiB0aGUgdmFsdWUgcGFydCBvZiBhbiBhbGlhcyB0byBpbnNlcnQgbmV3bGluZXMuCisKK0FMSUFTRVMgICAgICAgICAgICAgICAgPSAKKworIyBTZXQgdGhlIE9QVElNSVpFX09VVFBVVF9GT1JfQyB0YWcgdG8gWUVTIGlmIHlvdXIgcHJvamVjdCBjb25zaXN0cyBvZiBDIHNvdXJjZXMgCisjIG9ubHkuIERveHlnZW4gd2lsbCB0aGVuIGdlbmVyYXRlIG91dHB1dCB0aGF0IGlzIG1vcmUgdGFpbG9yZWQgZm9yIEMuIAorIyBGb3IgaW5zdGFuY2UsIHNvbWUgb2YgdGhlIG5hbWVzIHRoYXQgYXJlIHVzZWQgd2lsbCBiZSBkaWZmZXJlbnQuIFRoZSBsaXN0IAorIyBvZiBhbGwgbWVtYmVycyB3aWxsIGJlIG9taXR0ZWQsIGV0Yy4KKworT1BUSU1JWkVfT1VUUFVUX0ZPUl9DICA9IFlFUworCisjIFNldCB0aGUgT1BUSU1JWkVfT1VUUFVUX0pBVkEgdGFnIHRvIFlFUyBpZiB5b3VyIHByb2plY3QgY29uc2lzdHMgb2YgSmF2YSBzb3VyY2VzIAorIyBvbmx5LiBEb3h5Z2VuIHdpbGwgdGhlbiBnZW5lcmF0ZSBvdXRwdXQgdGhhdCBpcyBtb3JlIHRhaWxvcmVkIGZvciBKYXZhLiAKKyMgRm9yIGluc3RhbmNlLCBuYW1lc3BhY2VzIHdpbGwgYmUgcHJlc2VudGVkIGFzIHBhY2thZ2VzLCBxdWFsaWZpZWQgc2NvcGVzIAorIyB3aWxsIGxvb2sgZGlmZmVyZW50LCBldGMuCisKK09QVElNSVpFX09VVFBVVF9KQVZBICAgPSBOTworCisjIFNldCB0aGUgU1VCR1JPVVBJTkcgdGFnIHRvIFlFUyAodGhlIGRlZmF1bHQpIHRvIGFsbG93IGNsYXNzIG1lbWJlciBncm91cHMgb2YgCisjIHRoZSBzYW1lIHR5cGUgKGZvciBpbnN0YW5jZSBhIGdyb3VwIG9mIHB1YmxpYyBmdW5jdGlvbnMpIHRvIGJlIHB1dCBhcyBhIAorIyBzdWJncm91cCBvZiB0aGF0IHR5cGUgKGUuZy4gdW5kZXIgdGhlIFB1YmxpYyBGdW5jdGlvbnMgc2VjdGlvbikuIFNldCBpdCB0byAKKyMgTk8gdG8gcHJldmVudCBzdWJncm91cGluZy4gQWx0ZXJuYXRpdmVseSwgdGhpcyBjYW4gYmUgZG9uZSBwZXIgY2xhc3MgdXNpbmcgCisjIHRoZSBcbm9zdWJncm91cGluZyBjb21tYW5kLgorCitTVUJHUk9VUElORyAgICAgICAgICAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQnVpbGQgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgRVhUUkFDVF9BTEwgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGFzc3VtZSBhbGwgZW50aXRpZXMgaW4gCisjIGRvY3VtZW50YXRpb24gYXJlIGRvY3VtZW50ZWQsIGV2ZW4gaWYgbm8gZG9jdW1lbnRhdGlvbiB3YXMgYXZhaWxhYmxlLiAKKyMgUHJpdmF0ZSBjbGFzcyBtZW1iZXJzIGFuZCBzdGF0aWMgZmlsZSBtZW1iZXJzIHdpbGwgYmUgaGlkZGVuIHVubGVzcyAKKyMgdGhlIEVYVFJBQ1RfUFJJVkFURSBhbmQgRVhUUkFDVF9TVEFUSUMgdGFncyBhcmUgc2V0IHRvIFlFUworCitFWFRSQUNUX0FMTCAgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIEVYVFJBQ1RfUFJJVkFURSB0YWcgaXMgc2V0IHRvIFlFUyBhbGwgcHJpdmF0ZSBtZW1iZXJzIG9mIGEgY2xhc3MgCisjIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0VYVFJBQ1RfUFJJVkFURSAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgRVhUUkFDVF9TVEFUSUMgdGFnIGlzIHNldCB0byBZRVMgYWxsIHN0YXRpYyBtZW1iZXJzIG9mIGEgZmlsZSAKKyMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworRVhUUkFDVF9TVEFUSUMgICAgICAgICA9IFlFUworCisjIElmIHRoZSBFWFRSQUNUX0xPQ0FMX0NMQVNTRVMgdGFnIGlzIHNldCB0byBZRVMgY2xhc3NlcyAoYW5kIHN0cnVjdHMpIAorIyBkZWZpbmVkIGxvY2FsbHkgaW4gc291cmNlIGZpbGVzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24uIAorIyBJZiBzZXQgdG8gTk8gb25seSBjbGFzc2VzIGRlZmluZWQgaW4gaGVhZGVyIGZpbGVzIGFyZSBpbmNsdWRlZC4KKworRVhUUkFDVF9MT0NBTF9DTEFTU0VTICA9IFlFUworCisjIFRoaXMgZmxhZyBpcyBvbmx5IHVzZWZ1bCBmb3IgT2JqZWN0aXZlLUMgY29kZS4gV2hlbiBzZXQgdG8gWUVTIGxvY2FsIAorIyBtZXRob2RzLCB3aGljaCBhcmUgZGVmaW5lZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gc2VjdGlvbiBidXQgbm90IGluIAorIyB0aGUgaW50ZXJmYWNlIGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbi4gCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIG9ubHkgbWV0aG9kcyBpbiB0aGUgaW50ZXJmYWNlIGFyZSBpbmNsdWRlZC4KKworRVhUUkFDVF9MT0NBTF9NRVRIT0RTICA9IFlFUworCisjIElmIHRoZSBISURFX1VORE9DX01FTUJFUlMgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFsbCAKKyMgdW5kb2N1bWVudGVkIG1lbWJlcnMgb2YgZG9jdW1lbnRlZCBjbGFzc2VzLCBmaWxlcyBvciBuYW1lc3BhY2VzLiAKKyMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgbWVtYmVycyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSAKKyMgdmFyaW91cyBvdmVydmlld3MsIGJ1dCBubyBkb2N1bWVudGF0aW9uIHNlY3Rpb24gaXMgZ2VuZXJhdGVkLiAKKyMgVGhpcyBvcHRpb24gaGFzIG5vIGVmZmVjdCBpZiBFWFRSQUNUX0FMTCBpcyBlbmFibGVkLgorCitISURFX1VORE9DX01FTUJFUlMgICAgID0gTk8KKworIyBJZiB0aGUgSElERV9VTkRPQ19DTEFTU0VTIHRhZyBpcyBzZXQgdG8gWUVTLCBEb3h5Z2VuIHdpbGwgaGlkZSBhbGwgCisjIHVuZG9jdW1lbnRlZCBjbGFzc2VzIHRoYXQgYXJlIG5vcm1hbGx5IHZpc2libGUgaW4gdGhlIGNsYXNzIGhpZXJhcmNoeS4gCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIGNsYXNzZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgdmFyaW91cyAKKyMgb3ZlcnZpZXdzLiBUaGlzIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGlmIEVYVFJBQ1RfQUxMIGlzIGVuYWJsZWQuCisKK0hJREVfVU5ET0NfQ0xBU1NFUyAgICAgPSBOTworCisjIElmIHRoZSBISURFX0ZSSUVORF9DT01QT1VORFMgdGFnIGlzIHNldCB0byBZRVMsIERveHlnZW4gd2lsbCBoaWRlIGFsbCAKKyMgZnJpZW5kIChjbGFzc3xzdHJ1Y3R8dW5pb24pIGRlY2xhcmF0aW9ucy4gCisjIElmIHNldCB0byBOTyAodGhlIGRlZmF1bHQpIHRoZXNlIGRlY2xhcmF0aW9ucyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSAKKyMgZG9jdW1lbnRhdGlvbi4KKworSElERV9GUklFTkRfQ09NUE9VTkRTICA9IE5PCisKKyMgSWYgdGhlIEhJREVfSU5fQk9EWV9ET0NTIHRhZyBpcyBzZXQgdG8gWUVTLCBEb3h5Z2VuIHdpbGwgaGlkZSBhbnkgCisjIGRvY3VtZW50YXRpb24gYmxvY2tzIGZvdW5kIGluc2lkZSB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uLiAKKyMgSWYgc2V0IHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlc2UgYmxvY2tzIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIAorIyBmdW5jdGlvbidzIGRldGFpbGVkIGRvY3VtZW50YXRpb24gYmxvY2suCisKK0hJREVfSU5fQk9EWV9ET0NTICAgICAgPSBOTworCisjIFRoZSBJTlRFUk5BTF9ET0NTIHRhZyBkZXRlcm1pbmVzIGlmIGRvY3VtZW50YXRpb24gCisjIHRoYXQgaXMgdHlwZWQgYWZ0ZXIgYSBcaW50ZXJuYWwgY29tbWFuZCBpcyBpbmNsdWRlZC4gSWYgdGhlIHRhZyBpcyBzZXQgCisjIHRvIE5PICh0aGUgZGVmYXVsdCkgdGhlbiB0aGUgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIGV4Y2x1ZGVkLiAKKyMgU2V0IGl0IHRvIFlFUyB0byBpbmNsdWRlIHRoZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uLgorCitJTlRFUk5BTF9ET0NTICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgQ0FTRV9TRU5TRV9OQU1FUyB0YWcgaXMgc2V0IHRvIE5PIHRoZW4gRG94eWdlbiB3aWxsIG9ubHkgZ2VuZXJhdGUgCisjIGZpbGUgbmFtZXMgaW4gbG93ZXItY2FzZSBsZXR0ZXJzLiBJZiBzZXQgdG8gWUVTIHVwcGVyLWNhc2UgbGV0dGVycyBhcmUgYWxzbyAKKyMgYWxsb3dlZC4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgY2xhc3NlcyBvciBmaWxlcyB3aG9zZSBuYW1lcyBvbmx5IGRpZmZlciAKKyMgaW4gY2FzZSBhbmQgaWYgeW91ciBmaWxlIHN5c3RlbSBzdXBwb3J0cyBjYXNlIHNlbnNpdGl2ZSBmaWxlIG5hbWVzLiBXaW5kb3dzIAorIyBhbmQgTWFjIHVzZXJzIGFyZSBhZHZpc2VkIHRvIHNldCB0aGlzIG9wdGlvbiB0byBOTy4KKworQ0FTRV9TRU5TRV9OQU1FUyAgICAgICA9IFlFUworCisjIElmIHRoZSBISURFX1NDT1BFX05BTUVTIHRhZyBpcyBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGVuIERveHlnZW4gCisjIHdpbGwgc2hvdyBtZW1iZXJzIHdpdGggdGhlaXIgZnVsbCBjbGFzcyBhbmQgbmFtZXNwYWNlIHNjb3BlcyBpbiB0aGUgCisjIGRvY3VtZW50YXRpb24uIElmIHNldCB0byBZRVMgdGhlIHNjb3BlIHdpbGwgYmUgaGlkZGVuLgorCitISURFX1NDT1BFX05BTUVTICAgICAgID0gTk8KKworIyBJZiB0aGUgU0hPV19JTkNMVURFX0ZJTEVTIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBEb3h5Z2VuIAorIyB3aWxsIHB1dCBhIGxpc3Qgb2YgdGhlIGZpbGVzIHRoYXQgYXJlIGluY2x1ZGVkIGJ5IGEgZmlsZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiAKKyMgb2YgdGhhdCBmaWxlLgorCitTSE9XX0lOQ0xVREVfRklMRVMgICAgID0gWUVTCisKKyMgSWYgdGhlIElOTElORV9JTkZPIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBhIHRhZyBbaW5saW5lXSAKKyMgaXMgaW5zZXJ0ZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gZm9yIGlubGluZSBtZW1iZXJzLgorCitJTkxJTkVfSU5GTyAgICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFNPUlRfTUVNQkVSX0RPQ1MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIGRveHlnZW4gCisjIHdpbGwgc29ydCB0aGUgKGRldGFpbGVkKSBkb2N1bWVudGF0aW9uIG9mIGZpbGUgYW5kIGNsYXNzIG1lbWJlcnMgCisjIGFscGhhYmV0aWNhbGx5IGJ5IG1lbWJlciBuYW1lLiBJZiBzZXQgdG8gTk8gdGhlIG1lbWJlcnMgd2lsbCBhcHBlYXIgaW4gCisjIGRlY2xhcmF0aW9uIG9yZGVyLgorCitTT1JUX01FTUJFUl9ET0NTICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFNPUlRfQlJJRUZfRE9DUyB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBzb3J0IHRoZSAKKyMgYnJpZWYgZG9jdW1lbnRhdGlvbiBvZiBmaWxlLCBuYW1lc3BhY2UgYW5kIGNsYXNzIG1lbWJlcnMgYWxwaGFiZXRpY2FsbHkgCisjIGJ5IG1lbWJlciBuYW1lLiBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSB0aGUgbWVtYmVycyB3aWxsIGFwcGVhciBpbiAKKyMgZGVjbGFyYXRpb24gb3JkZXIuCisKK1NPUlRfQlJJRUZfRE9DUyAgICAgICAgPSBOTworCisjIElmIHRoZSBTT1JUX0JZX1NDT1BFX05BTUUgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBjbGFzcyBsaXN0IHdpbGwgYmUgCisjIHNvcnRlZCBieSBmdWxseS1xdWFsaWZpZWQgbmFtZXMsIGluY2x1ZGluZyBuYW1lc3BhY2VzLiBJZiBzZXQgdG8gCisjIE5PICh0aGUgZGVmYXVsdCksIHRoZSBjbGFzcyBsaXN0IHdpbGwgYmUgc29ydGVkIG9ubHkgYnkgY2xhc3MgbmFtZSwgCisjIG5vdCBpbmNsdWRpbmcgdGhlIG5hbWVzcGFjZSBwYXJ0LiAKKyMgTm90ZTogVGhpcyBvcHRpb24gaXMgbm90IHZlcnkgdXNlZnVsIGlmIEhJREVfU0NPUEVfTkFNRVMgaXMgc2V0IHRvIFlFUy4KKyMgTm90ZTogVGhpcyBvcHRpb24gYXBwbGllcyBvbmx5IHRvIHRoZSBjbGFzcyBsaXN0LCBub3QgdG8gdGhlIAorIyBhbHBoYWJldGljYWwgbGlzdC4KKworU09SVF9CWV9TQ09QRV9OQU1FICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9UT0RPTElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yIAorIyBkaXNhYmxlIChOTykgdGhlIHRvZG8gbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcdG9kbyAKKyMgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX1RPRE9MSVNUICAgICAgPSBZRVMKKworIyBUaGUgR0VORVJBVEVfVEVTVExJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvciAKKyMgZGlzYWJsZSAoTk8pIHRoZSB0ZXN0IGxpc3QuIFRoaXMgbGlzdCBpcyBjcmVhdGVkIGJ5IHB1dHRpbmcgXHRlc3QgCisjIGNvbW1hbmRzIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCitHRU5FUkFURV9URVNUTElTVCAgICAgID0gWUVTCisKKyMgVGhlIEdFTkVSQVRFX0JVR0xJU1QgdGFnIGNhbiBiZSB1c2VkIHRvIGVuYWJsZSAoWUVTKSBvciAKKyMgZGlzYWJsZSAoTk8pIHRoZSBidWcgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyBcYnVnIAorIyBjb21tYW5kcyBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworR0VORVJBVEVfQlVHTElTVCAgICAgICA9IFlFUworCisjIFRoZSBHRU5FUkFURV9ERVBSRUNBVEVETElTVCB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIChZRVMpIG9yIAorIyBkaXNhYmxlIChOTykgdGhlIGRlcHJlY2F0ZWQgbGlzdC4gVGhpcyBsaXN0IGlzIGNyZWF0ZWQgYnkgcHV0dGluZyAKKyMgXGRlcHJlY2F0ZWQgY29tbWFuZHMgaW4gdGhlIGRvY3VtZW50YXRpb24uCisKK0dFTkVSQVRFX0RFUFJFQ0FURURMSVNUPSBZRVMKKworIyBUaGUgRU5BQkxFRF9TRUNUSU9OUyB0YWcgY2FuIGJlIHVzZWQgdG8gZW5hYmxlIGNvbmRpdGlvbmFsIAorIyBkb2N1bWVudGF0aW9uIHNlY3Rpb25zLCBtYXJrZWQgYnkgXGlmIHNlY3Rpb25uYW1lIC4uLiBcZW5kaWYuCisKK0VOQUJMRURfU0VDVElPTlMgICAgICAgPSAKKworIyBUaGUgTUFYX0lOSVRJQUxJWkVSX0xJTkVTIHRhZyBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaW5lcyAKKyMgdGhlIGluaXRpYWwgdmFsdWUgb2YgYSB2YXJpYWJsZSBvciBkZWZpbmUgY29uc2lzdHMgb2YgZm9yIGl0IHRvIGFwcGVhciBpbiAKKyMgdGhlIGRvY3VtZW50YXRpb24uIElmIHRoZSBpbml0aWFsaXplciBjb25zaXN0cyBvZiBtb3JlIGxpbmVzIHRoYW4gc3BlY2lmaWVkIAorIyBoZXJlIGl0IHdpbGwgYmUgaGlkZGVuLiBVc2UgYSB2YWx1ZSBvZiAwIHRvIGhpZGUgaW5pdGlhbGl6ZXJzIGNvbXBsZXRlbHkuIAorIyBUaGUgYXBwZWFyYW5jZSBvZiB0aGUgaW5pdGlhbGl6ZXIgb2YgaW5kaXZpZHVhbCB2YXJpYWJsZXMgYW5kIGRlZmluZXMgaW4gdGhlIAorIyBkb2N1bWVudGF0aW9uIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIFxzaG93aW5pdGlhbGl6ZXIgb3IgXGhpZGVpbml0aWFsaXplciAKKyMgY29tbWFuZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy4KKworTUFYX0lOSVRJQUxJWkVSX0xJTkVTICA9IDMwCisKKyMgU2V0IHRoZSBTSE9XX1VTRURfRklMRVMgdGFnIHRvIE5PIHRvIGRpc2FibGUgdGhlIGxpc3Qgb2YgZmlsZXMgZ2VuZXJhdGVkIAorIyBhdCB0aGUgYm90dG9tIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9mIGNsYXNzZXMgYW5kIHN0cnVjdHMuIElmIHNldCB0byBZRVMgdGhlIAorIyBsaXN0IHdpbGwgbWVudGlvbiB0aGUgZmlsZXMgdGhhdCB3ZXJlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGRvY3VtZW50YXRpb24uCisKK1NIT1dfVVNFRF9GSUxFUyAgICAgICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB3YXJuaW5nIGFuZCBwcm9ncmVzcyBtZXNzYWdlcworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZSBRVUlFVCB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIG1lc3NhZ2VzIHRoYXQgYXJlIGdlbmVyYXRlZCAKKyMgYnkgZG94eWdlbi4gUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLiBJZiBsZWZ0IGJsYW5rIE5PIGlzIHVzZWQuCisKK1FVSUVUICAgICAgICAgICAgICAgICAgPSBOTworCisjIFRoZSBXQVJOSU5HUyB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBvbi9vZmYgdGhlIHdhcm5pbmcgbWVzc2FnZXMgdGhhdCBhcmUgCisjIGdlbmVyYXRlZCBieSBkb3h5Z2VuLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIFlFUyBhbmQgTk8uIElmIGxlZnQgYmxhbmsgCisjIE5PIGlzIHVzZWQuCisKK1dBUk5JTkdTICAgICAgICAgICAgICAgPSBZRVMKKworIyBJZiBXQVJOX0lGX1VORE9DVU1FTlRFRCBpcyBzZXQgdG8gWUVTLCB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSB3YXJuaW5ncyAKKyMgZm9yIHVuZG9jdW1lbnRlZCBtZW1iZXJzLiBJZiBFWFRSQUNUX0FMTCBpcyBzZXQgdG8gWUVTIHRoZW4gdGhpcyBmbGFnIHdpbGwgCisjIGF1dG9tYXRpY2FsbHkgYmUgZGlzYWJsZWQuCisKK1dBUk5fSUZfVU5ET0NVTUVOVEVEICAgPSBZRVMKKworIyBJZiBXQVJOX0lGX0RPQ19FUlJPUiBpcyBzZXQgdG8gWUVTLCBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgd2FybmluZ3MgZm9yIAorIyBwb3RlbnRpYWwgZXJyb3JzIGluIHRoZSBkb2N1bWVudGF0aW9uLCBzdWNoIGFzIG5vdCBkb2N1bWVudGluZyBzb21lIAorIyBwYXJhbWV0ZXJzIGluIGEgZG9jdW1lbnRlZCBmdW5jdGlvbiwgb3IgZG9jdW1lbnRpbmcgcGFyYW1ldGVycyB0aGF0IAorIyBkb24ndCBleGlzdCBvciB1c2luZyBtYXJrdXAgY29tbWFuZHMgd3JvbmdseS4KKworV0FSTl9JRl9ET0NfRVJST1IgICAgICA9IFlFUworCisjIFRoZSBXQVJOX0ZPUk1BVCB0YWcgZGV0ZXJtaW5lcyB0aGUgZm9ybWF0IG9mIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIHRoYXQgCisjIGRveHlnZW4gY2FuIHByb2R1Y2UuIFRoZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gdGhlICRmaWxlLCAkbGluZSwgYW5kICR0ZXh0IAorIyB0YWdzLCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciBmcm9tIHdoaWNoIHRoZSAKKyMgd2FybmluZyBvcmlnaW5hdGVkIGFuZCB0aGUgd2FybmluZyB0ZXh0LgorCitXQVJOX0ZPUk1BVCAgICAgICAgICAgID0gIiRmaWxlOiRsaW5lOiAkdGV4dCIKKworIyBUaGUgV0FSTl9MT0dGSUxFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgZmlsZSB0byB3aGljaCB3YXJuaW5nIAorIyBhbmQgZXJyb3IgbWVzc2FnZXMgc2hvdWxkIGJlIHdyaXR0ZW4uIElmIGxlZnQgYmxhbmsgdGhlIG91dHB1dCBpcyB3cml0dGVuIAorIyB0byBzdGRlcnIuCisKK1dBUk5fTE9HRklMRSAgICAgICAgICAgPSAKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgaW5wdXQgZmlsZXMKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgSU5QVVQgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gCisjIGRvY3VtZW50ZWQgc291cmNlIGZpbGVzLiBZb3UgbWF5IGVudGVyIGZpbGUgbmFtZXMgbGlrZSAibXlmaWxlLmNwcCIgb3IgCisjIGRpcmVjdG9yaWVzIGxpa2UgIi91c3Ivc3JjL215cHJvamVjdCIuIFNlcGFyYXRlIHRoZSBmaWxlcyBvciBkaXJlY3RvcmllcyAKKyMgd2l0aCBzcGFjZXMuCisKK0lOUFVUICAgICAgICAgICAgICAgICAgPSBzcmMKKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIElOUFVUIHRhZyBjb250YWlucyBkaXJlY3RvcmllcywgeW91IGNhbiB1c2UgdGhlIAorIyBGSUxFX1BBVFRFUk5TIHRhZyB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHdpbGRjYXJkIHBhdHRlcm4gKGxpa2UgKi5jcHAgCisjIGFuZCAqLmgpIHRvIGZpbHRlciBvdXQgdGhlIHNvdXJjZS1maWxlcyBpbiB0aGUgZGlyZWN0b3JpZXMuIElmIGxlZnQgCisjIGJsYW5rIHRoZSBmb2xsb3dpbmcgcGF0dGVybnMgYXJlIHRlc3RlZDogCisjICouYyAqLmNjICouY3h4ICouY3BwICouYysrICouamF2YSAqLmlpICouaXh4ICouaXBwICouaSsrICouaW5sICouaCAqLmhoICouaHh4ICouaHBwIAorIyAqLmgrKyAqLmlkbCAqLm9kbCAqLmNzICoucGhwICoucGhwMyAqLmluYyAqLm0gKi5tbQorCitGSUxFX1BBVFRFUk5TICAgICAgICAgID0gCisKKyMgVGhlIFJFQ1VSU0lWRSB0YWcgY2FuIGJlIHVzZWQgdG8gdHVybiBzcGVjaWZ5IHdoZXRoZXIgb3Igbm90IHN1YmRpcmVjdG9yaWVzIAorIyBzaG91bGQgYmUgc2VhcmNoZWQgZm9yIGlucHV0IGZpbGVzIGFzIHdlbGwuIFBvc3NpYmxlIHZhbHVlcyBhcmUgWUVTIGFuZCBOTy4gCisjIElmIGxlZnQgYmxhbmsgTk8gaXMgdXNlZC4KKworUkVDVVJTSVZFICAgICAgICAgICAgICA9IFlFUworCisjIFRoZSBFWENMVURFIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IHNob3VsZCAKKyMgZXhjbHVkZWQgZnJvbSB0aGUgSU5QVVQgc291cmNlIGZpbGVzLiBUaGlzIHdheSB5b3UgY2FuIGVhc2lseSBleGNsdWRlIGEgCisjIHN1YmRpcmVjdG9yeSBmcm9tIGEgZGlyZWN0b3J5IHRyZWUgd2hvc2Ugcm9vdCBpcyBzcGVjaWZpZWQgd2l0aCB0aGUgSU5QVVQgdGFnLgorCitFWENMVURFICAgICAgICAgICAgICAgID0gCisKKyMgVGhlIEVYQ0xVREVfU1lNTElOS1MgdGFnIGNhbiBiZSB1c2VkIHNlbGVjdCB3aGV0aGVyIG9yIG5vdCBmaWxlcyBvciBkaXJlY3RvcmllcyAKKyMgdGhhdCBhcmUgc3ltYm9saWMgbGlua3MgKGEgVW5peCBmaWxlc3lzdGVtIGZlYXR1cmUpIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBpbnB1dC4KKworRVhDTFVERV9TWU1MSU5LUyAgICAgICA9IE5PCisKKyMgSWYgdGhlIHZhbHVlIG9mIHRoZSBJTlBVVCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZSAKKyMgRVhDTFVERV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJucyB0byBleGNsdWRlIAorIyBjZXJ0YWluIGZpbGVzIGZyb20gdGhvc2UgZGlyZWN0b3JpZXMuCisKK0VYQ0xVREVfUEFUVEVSTlMgICAgICAgPSAKKworIyBUaGUgRVhBTVBMRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIAorIyBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gZXhhbXBsZSBjb2RlIGZyYWdtZW50cyB0aGF0IGFyZSBpbmNsdWRlZCAoc2VlIAorIyB0aGUgXGluY2x1ZGUgY29tbWFuZCkuCisKK0VYQU1QTEVfUEFUSCAgICAgICAgICAgPSAKKworIyBJZiB0aGUgdmFsdWUgb2YgdGhlIEVYQU1QTEVfUEFUSCB0YWcgY29udGFpbnMgZGlyZWN0b3JpZXMsIHlvdSBjYW4gdXNlIHRoZSAKKyMgRVhBTVBMRV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCBwYXR0ZXJuIChsaWtlICouY3BwIAorIyBhbmQgKi5oKSB0byBmaWx0ZXIgb3V0IHRoZSBzb3VyY2UtZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzLiBJZiBsZWZ0IAorIyBibGFuayBhbGwgZmlsZXMgYXJlIGluY2x1ZGVkLgorCitFWEFNUExFX1BBVFRFUk5TICAgICAgID0gCisKKyMgSWYgdGhlIEVYQU1QTEVfUkVDVVJTSVZFIHRhZyBpcyBzZXQgdG8gWUVTIHRoZW4gc3ViZGlyZWN0b3JpZXMgd2lsbCBiZSAKKyMgc2VhcmNoZWQgZm9yIGlucHV0IGZpbGVzIHRvIGJlIHVzZWQgd2l0aCB0aGUgXGluY2x1ZGUgb3IgXGRvbnRpbmNsdWRlIAorIyBjb21tYW5kcyBpcnJlc3BlY3RpdmUgb2YgdGhlIHZhbHVlIG9mIHRoZSBSRUNVUlNJVkUgdGFnLiAKKyMgUG9zc2libGUgdmFsdWVzIGFyZSBZRVMgYW5kIE5PLiBJZiBsZWZ0IGJsYW5rIE5PIGlzIHVzZWQuCisKK0VYQU1QTEVfUkVDVVJTSVZFICAgICAgPSBOTworCisjIFRoZSBJTUFHRV9QQVRIIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIGZpbGVzIG9yIAorIyBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gaW1hZ2UgdGhhdCBhcmUgaW5jbHVkZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gKHNlZSAKKyMgdGhlIFxpbWFnZSBjb21tYW5kKS4KKworSU1BR0VfUEFUSCAgICAgICAgICAgICA9IAorCisjIFRoZSBJTlBVVF9GSUxURVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwcm9ncmFtIHRoYXQgZG94eWdlbiBzaG91bGQgCisjIGludm9rZSB0byBmaWx0ZXIgZm9yIGVhY2ggaW5wdXQgZmlsZS4gRG94eWdlbiB3aWxsIGludm9rZSB0aGUgZmlsdGVyIHByb2dyYW0gCisjIGJ5IGV4ZWN1dGluZyAodmlhIHBvcGVuKCkpIHRoZSBjb21tYW5kIDxmaWx0ZXI+IDxpbnB1dC1maWxlPiwgd2hlcmUgPGZpbHRlcj4gCisjIGlzIHRoZSB2YWx1ZSBvZiB0aGUgSU5QVVRfRklMVEVSIHRhZywgYW5kIDxpbnB1dC1maWxlPiBpcyB0aGUgbmFtZSBvZiBhbiAKKyMgaW5wdXQgZmlsZS4gRG94eWdlbiB3aWxsIHRoZW4gdXNlIHRoZSBvdXRwdXQgdGhhdCB0aGUgZmlsdGVyIHByb2dyYW0gd3JpdGVzIAorIyB0byBzdGFuZGFyZCBvdXRwdXQuICBJZiBGSUxURVJfUEFUVEVSTlMgaXMgc3BlY2lmaWVkLCB0aGlzIHRhZyB3aWxsIGJlIAorIyBpZ25vcmVkLgorCitJTlBVVF9GSUxURVIgICAgICAgICAgID0gCisKKyMgVGhlIEZJTFRFUl9QQVRURVJOUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBmaWx0ZXJzIG9uIGEgcGVyIGZpbGUgcGF0dGVybiAKKyMgYmFzaXMuICBEb3h5Z2VuIHdpbGwgY29tcGFyZSB0aGUgZmlsZSBuYW1lIHdpdGggZWFjaCBwYXR0ZXJuIGFuZCBhcHBseSB0aGUgCisjIGZpbHRlciBpZiB0aGVyZSBpcyBhIG1hdGNoLiAgVGhlIGZpbHRlcnMgYXJlIGEgbGlzdCBvZiB0aGUgZm9ybTogCisjIHBhdHRlcm49ZmlsdGVyIChsaWtlICouY3BwPW15X2NwcF9maWx0ZXIpLiBTZWUgSU5QVVRfRklMVEVSIGZvciBmdXJ0aGVyIAorIyBpbmZvIG9uIGhvdyBmaWx0ZXJzIGFyZSB1c2VkLiBJZiBGSUxURVJfUEFUVEVSTlMgaXMgZW1wdHksIElOUFVUX0ZJTFRFUiAKKyMgaXMgYXBwbGllZCB0byBhbGwgZmlsZXMuCisKK0ZJTFRFUl9QQVRURVJOUyAgICAgICAgPSAKKworIyBJZiB0aGUgRklMVEVSX1NPVVJDRV9GSUxFUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIGlucHV0IGZpbHRlciAoaWYgc2V0IHVzaW5nIAorIyBJTlBVVF9GSUxURVIpIHdpbGwgYmUgdXNlZCB0byBmaWx0ZXIgdGhlIGlucHV0IGZpbGVzIHdoZW4gcHJvZHVjaW5nIHNvdXJjZSAKKyMgZmlsZXMgdG8gYnJvd3NlIChpLmUuIHdoZW4gU09VUkNFX0JST1dTRVIgaXMgc2V0IHRvIFlFUykuCisKK0ZJTFRFUl9TT1VSQ0VfRklMRVMgICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHNvdXJjZSBicm93c2luZworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBTT1VSQ0VfQlJPV1NFUiB0YWcgaXMgc2V0IHRvIFlFUyB0aGVuIGEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgd2lsbCAKKyMgYmUgZ2VuZXJhdGVkLiBEb2N1bWVudGVkIGVudGl0aWVzIHdpbGwgYmUgY3Jvc3MtcmVmZXJlbmNlZCB3aXRoIHRoZXNlIHNvdXJjZXMuIAorIyBOb3RlOiBUbyBnZXQgcmlkIG9mIGFsbCBzb3VyY2UgY29kZSBpbiB0aGUgZ2VuZXJhdGVkIG91dHB1dCwgbWFrZSBzdXJlIGFsc28gCisjIFZFUkJBVElNX0hFQURFUlMgaXMgc2V0IHRvIE5PLgorCitTT1VSQ0VfQlJPV1NFUiAgICAgICAgID0gWUVTCisKKyMgU2V0dGluZyB0aGUgSU5MSU5FX1NPVVJDRVMgdGFnIHRvIFlFUyB3aWxsIGluY2x1ZGUgdGhlIGJvZHkgCisjIG9mIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyBkaXJlY3RseSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworSU5MSU5FX1NPVVJDRVMgICAgICAgICA9IFlFUworCisjIFNldHRpbmcgdGhlIFNUUklQX0NPREVfQ09NTUVOVFMgdGFnIHRvIFlFUyAodGhlIGRlZmF1bHQpIHdpbGwgaW5zdHJ1Y3QgCisjIGRveHlnZW4gdG8gaGlkZSBhbnkgc3BlY2lhbCBjb21tZW50IGJsb2NrcyBmcm9tIGdlbmVyYXRlZCBzb3VyY2UgY29kZSAKKyMgZnJhZ21lbnRzLiBOb3JtYWwgQyBhbmQgQysrIGNvbW1lbnRzIHdpbGwgYWx3YXlzIHJlbWFpbiB2aXNpYmxlLgorCitTVFJJUF9DT0RFX0NPTU1FTlRTICAgID0gTk8KKworIyBJZiB0aGUgUkVGRVJFTkNFRF9CWV9SRUxBVElPTiB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIAorIyB0aGVuIGZvciBlYWNoIGRvY3VtZW50ZWQgZnVuY3Rpb24gYWxsIGRvY3VtZW50ZWQgCisjIGZ1bmN0aW9ucyByZWZlcmVuY2luZyBpdCB3aWxsIGJlIGxpc3RlZC4KKworUkVGRVJFTkNFRF9CWV9SRUxBVElPTiA9IFlFUworCisjIElmIHRoZSBSRUZFUkVOQ0VTX1JFTEFUSU9OIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgCisjIHRoZW4gZm9yIGVhY2ggZG9jdW1lbnRlZCBmdW5jdGlvbiBhbGwgZG9jdW1lbnRlZCBlbnRpdGllcyAKKyMgY2FsbGVkL3VzZWQgYnkgdGhhdCBmdW5jdGlvbiB3aWxsIGJlIGxpc3RlZC4KKworUkVGRVJFTkNFU19SRUxBVElPTiAgICA9IFlFUworCisjIElmIHRoZSBWRVJCQVRJTV9IRUFERVJTIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgdGhlbiBEb3h5Z2VuIAorIyB3aWxsIGdlbmVyYXRlIGEgdmVyYmF0aW0gY29weSBvZiB0aGUgaGVhZGVyIGZpbGUgZm9yIGVhY2ggY2xhc3MgZm9yIAorIyB3aGljaCBhbiBpbmNsdWRlIGlzIHNwZWNpZmllZC4gU2V0IHRvIE5PIHRvIGRpc2FibGUgdGhpcy4KKworVkVSQkFUSU1fSEVBREVSUyAgICAgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBhbHBoYWJldGljYWwgY2xhc3MgaW5kZXgKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgQUxQSEFCRVRJQ0FMX0lOREVYIHRhZyBpcyBzZXQgdG8gWUVTLCBhbiBhbHBoYWJldGljYWwgaW5kZXggCisjIG9mIGFsbCBjb21wb3VuZHMgd2lsbCBiZSBnZW5lcmF0ZWQuIEVuYWJsZSB0aGlzIGlmIHRoZSBwcm9qZWN0IAorIyBjb250YWlucyBhIGxvdCBvZiBjbGFzc2VzLCBzdHJ1Y3RzLCB1bmlvbnMgb3IgaW50ZXJmYWNlcy4KKworQUxQSEFCRVRJQ0FMX0lOREVYICAgICA9IFlFUworCisjIElmIHRoZSBhbHBoYWJldGljYWwgaW5kZXggaXMgZW5hYmxlZCAoc2VlIEFMUEhBQkVUSUNBTF9JTkRFWCkgdGhlbiAKKyMgdGhlIENPTFNfSU5fQUxQSEFfSU5ERVggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIG51bWJlciBvZiBjb2x1bW5zIAorIyBpbiB3aGljaCB0aGlzIGxpc3Qgd2lsbCBiZSBzcGxpdCAoY2FuIGJlIGEgbnVtYmVyIGluIHRoZSByYW5nZSBbMS4uMjBdKQorCitDT0xTX0lOX0FMUEhBX0lOREVYICAgID0gNQorCisjIEluIGNhc2UgYWxsIGNsYXNzZXMgaW4gYSBwcm9qZWN0IHN0YXJ0IHdpdGggYSBjb21tb24gcHJlZml4LCBhbGwgCisjIGNsYXNzZXMgd2lsbCBiZSBwdXQgdW5kZXIgdGhlIHNhbWUgaGVhZGVyIGluIHRoZSBhbHBoYWJldGljYWwgaW5kZXguIAorIyBUaGUgSUdOT1JFX1BSRUZJWCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBwcmVmaXhlcyB0aGF0IAorIyBzaG91bGQgYmUgaWdub3JlZCB3aGlsZSBnZW5lcmF0aW5nIHRoZSBpbmRleCBoZWFkZXJzLgorCitJR05PUkVfUFJFRklYICAgICAgICAgID0gCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIEhUTUwgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUwgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSBEb3h5Z2VuIHdpbGwgCisjIGdlbmVyYXRlIEhUTUwgb3V0cHV0LgorCitHRU5FUkFURV9IVE1MICAgICAgICAgID0gWUVTCisKKyMgVGhlIEhUTUxfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIEhUTUwgZG9jcyB3aWxsIGJlIHB1dC4gCisjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgCisjIHB1dCBpbiBmcm9udCBvZiBpdC4gSWYgbGVmdCBibGFuayBgaHRtbCcgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK0hUTUxfT1VUUFVUICAgICAgICAgICAgPSBodG1sCisKKyMgVGhlIEhUTUxfRklMRV9FWFRFTlNJT04gdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGUgZXh0ZW5zaW9uIGZvciAKKyMgZWFjaCBnZW5lcmF0ZWQgSFRNTCBwYWdlIChmb3IgZXhhbXBsZTogLmh0bSwucGhwLC5hc3ApLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIAorIyBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgZmlsZXMgd2l0aCAuaHRtbCBleHRlbnNpb24uCisKK0hUTUxfRklMRV9FWFRFTlNJT04gICAgPSAuaHRtbAorCisjIFRoZSBIVE1MX0hFQURFUiB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHBlcnNvbmFsIEhUTUwgaGVhZGVyIGZvciAKKyMgZWFjaCBnZW5lcmF0ZWQgSFRNTCBwYWdlLiBJZiBpdCBpcyBsZWZ0IGJsYW5rIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIAorIyBzdGFuZGFyZCBoZWFkZXIuCisKK0hUTUxfSEVBREVSICAgICAgICAgICAgPSBkb2MvaGVhZGVyLmh0bWwKKworIyBUaGUgSFRNTF9GT09URVIgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSBwZXJzb25hbCBIVE1MIGZvb3RlciBmb3IgCisjIGVhY2ggZ2VuZXJhdGVkIEhUTUwgcGFnZS4gSWYgaXQgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSAKKyMgc3RhbmRhcmQgZm9vdGVyLgorCitIVE1MX0ZPT1RFUiAgICAgICAgICAgID0gZG9jL2Zvb3Rlci5odG1sCisKKyMgVGhlIEhUTUxfU1RZTEVTSEVFVCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIHVzZXItZGVmaW5lZCBjYXNjYWRpbmcgCisjIHN0eWxlIHNoZWV0IHRoYXQgaXMgdXNlZCBieSBlYWNoIEhUTUwgcGFnZS4gSXQgY2FuIGJlIHVzZWQgdG8gCisjIGZpbmUtdHVuZSB0aGUgbG9vayBvZiB0aGUgSFRNTCBvdXRwdXQuIElmIHRoZSB0YWcgaXMgbGVmdCBibGFuayBkb3h5Z2VuIAorIyB3aWxsIGdlbmVyYXRlIGEgZGVmYXVsdCBzdHlsZSBzaGVldC4gTm90ZSB0aGF0IGRveHlnZW4gd2lsbCB0cnkgdG8gY29weSAKKyMgdGhlIHN0eWxlIHNoZWV0IGZpbGUgdG8gdGhlIEhUTUwgb3V0cHV0IGRpcmVjdG9yeSwgc28gZG9uJ3QgcHV0IHlvdXIgb3duIAorIyBzdHlsZXNoZWV0IGluIHRoZSBIVE1MIG91dHB1dCBkaXJlY3RvcnkgYXMgd2VsbCwgb3IgaXQgd2lsbCBiZSBlcmFzZWQhCisKK0hUTUxfU1RZTEVTSEVFVCAgICAgICAgPSAKKworIyBJZiB0aGUgSFRNTF9BTElHTl9NRU1CRVJTIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgbWVtYmVycyBvZiBjbGFzc2VzLCAKKyMgZmlsZXMgb3IgbmFtZXNwYWNlcyB3aWxsIGJlIGFsaWduZWQgaW4gSFRNTCB1c2luZyB0YWJsZXMuIElmIHNldCB0byAKKyMgTk8gYSBidWxsZXQgbGlzdCB3aWxsIGJlIHVzZWQuCisKK0hUTUxfQUxJR05fTUVNQkVSUyAgICAgPSBZRVMKKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTEhFTFAgdGFnIGlzIHNldCB0byBZRVMsIGFkZGl0aW9uYWwgaW5kZXggZmlsZXMgCisjIHdpbGwgYmUgZ2VuZXJhdGVkIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgZm9yIHRvb2xzIGxpa2UgdGhlIAorIyBNaWNyb3NvZnQgSFRNTCBoZWxwIHdvcmtzaG9wIHRvIGdlbmVyYXRlIGEgY29tcHJlc3NlZCBIVE1MIGhlbHAgZmlsZSAoLmNobSkgCisjIG9mIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgorCitHRU5FUkFURV9IVE1MSEVMUCAgICAgID0gTk8KKworIyBJZiB0aGUgR0VORVJBVEVfSFRNTEhFTFAgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBDSE1fRklMRSB0YWcgY2FuIAorIyBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGZpbGUgbmFtZSBvZiB0aGUgcmVzdWx0aW5nIC5jaG0gZmlsZS4gWW91IAorIyBjYW4gYWRkIGEgcGF0aCBpbiBmcm9udCBvZiB0aGUgZmlsZSBpZiB0aGUgcmVzdWx0IHNob3VsZCBub3QgYmUgCisjIHdyaXR0ZW4gdG8gdGhlIGh0bWwgb3V0cHV0IGRpcmVjdG9yeS4KKworQ0hNX0ZJTEUgICAgICAgICAgICAgICA9IAorCisjIElmIHRoZSBHRU5FUkFURV9IVE1MSEVMUCB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIEhIQ19MT0NBVElPTiB0YWcgY2FuIAorIyBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxvY2F0aW9uIChhYnNvbHV0ZSBwYXRoIGluY2x1ZGluZyBmaWxlIG5hbWUpIG9mIAorIyB0aGUgSFRNTCBoZWxwIGNvbXBpbGVyIChoaGMuZXhlKS4gSWYgbm9uLWVtcHR5IGRveHlnZW4gd2lsbCB0cnkgdG8gcnVuIAorIyB0aGUgSFRNTCBoZWxwIGNvbXBpbGVyIG9uIHRoZSBnZW5lcmF0ZWQgaW5kZXguaGhwLgorCitISENfTE9DQVRJT04gICAgICAgICAgID0gCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgR0VORVJBVEVfQ0hJIGZsYWcgCisjIGNvbnRyb2xzIGlmIGEgc2VwYXJhdGUgLmNoaSBpbmRleCBmaWxlIGlzIGdlbmVyYXRlZCAoWUVTKSBvciB0aGF0IAorIyBpdCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIG1hc3RlciAuY2htIGZpbGUgKE5PKS4KKworR0VORVJBVEVfQ0hJICAgICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEdFTkVSQVRFX0hUTUxIRUxQIHRhZyBpcyBzZXQgdG8gWUVTLCB0aGUgQklOQVJZX1RPQyBmbGFnIAorIyBjb250cm9scyB3aGV0aGVyIGEgYmluYXJ5IHRhYmxlIG9mIGNvbnRlbnRzIGlzIGdlbmVyYXRlZCAoWUVTKSBvciBhIAorIyBub3JtYWwgdGFibGUgb2YgY29udGVudHMgKE5PKSBpbiB0aGUgLmNobSBmaWxlLgorCitCSU5BUllfVE9DICAgICAgICAgICAgID0gTk8KKworIyBUaGUgVE9DX0VYUEFORCBmbGFnIGNhbiBiZSBzZXQgdG8gWUVTIHRvIGFkZCBleHRyYSBpdGVtcyBmb3IgZ3JvdXAgbWVtYmVycyAKKyMgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBIVE1MIGhlbHAgZG9jdW1lbnRhdGlvbiBhbmQgdG8gdGhlIHRyZWUgdmlldy4KKworVE9DX0VYUEFORCAgICAgICAgICAgICA9IE5PCisKKyMgVGhlIERJU0FCTEVfSU5ERVggdGFnIGNhbiBiZSB1c2VkIHRvIHR1cm4gb24vb2ZmIHRoZSBjb25kZW5zZWQgaW5kZXggYXQgCisjIHRvcCBvZiBlYWNoIEhUTUwgcGFnZS4gVGhlIHZhbHVlIE5PICh0aGUgZGVmYXVsdCkgZW5hYmxlcyB0aGUgaW5kZXggYW5kIAorIyB0aGUgdmFsdWUgWUVTIGRpc2FibGVzIGl0LgorCitESVNBQkxFX0lOREVYICAgICAgICAgID0gTk8KKworIyBUaGlzIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG51bWJlciBvZiBlbnVtIHZhbHVlcyAocmFuZ2UgWzEuLjIwXSkgCisjIHRoYXQgZG94eWdlbiB3aWxsIGdyb3VwIG9uIG9uZSBsaW5lIGluIHRoZSBnZW5lcmF0ZWQgSFRNTCBkb2N1bWVudGF0aW9uLgorCitFTlVNX1ZBTFVFU19QRVJfTElORSAgID0gMQorCisjIElmIHRoZSBHRU5FUkFURV9UUkVFVklFVyB0YWcgaXMgc2V0IHRvIFlFUywgYSBzaWRlIHBhbmVsIHdpbGwgYmUKKyMgZ2VuZXJhdGVkIGNvbnRhaW5pbmcgYSB0cmVlLWxpa2UgaW5kZXggc3RydWN0dXJlIChqdXN0IGxpa2UgdGhlIG9uZSB0aGF0IAorIyBpcyBnZW5lcmF0ZWQgZm9yIEhUTUwgSGVscCkuIEZvciB0aGlzIHRvIHdvcmsgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgCisjIEphdmFTY3JpcHQsIERIVE1MLCBDU1MgYW5kIGZyYW1lcyBpcyByZXF1aXJlZCAoZm9yIGluc3RhbmNlIE1vemlsbGEgMS4wKywgCisjIE5ldHNjYXBlIDYuMCssIEludGVybmV0IGV4cGxvcmVyIDUuMCssIG9yIEtvbnF1ZXJvcikuIFdpbmRvd3MgdXNlcnMgYXJlIAorIyBwcm9iYWJseSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBIVE1MIGhlbHAgZmVhdHVyZS4KKworR0VORVJBVEVfVFJFRVZJRVcgICAgICA9IFlFUworCisjIElmIHRoZSB0cmVldmlldyBpcyBlbmFibGVkIChzZWUgR0VORVJBVEVfVFJFRVZJRVcpIHRoZW4gdGhpcyB0YWcgY2FuIGJlIAorIyB1c2VkIHRvIHNldCB0aGUgaW5pdGlhbCB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgZnJhbWUgaW4gd2hpY2ggdGhlIHRyZWUgCisjIGlzIHNob3duLgorCitUUkVFVklFV19XSURUSCAgICAgICAgID0gMjUwCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIExhVGVYIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCAKKyMgZ2VuZXJhdGUgTGF0ZXggb3V0cHV0LgorCitHRU5FUkFURV9MQVRFWCAgICAgICAgID0gWUVTCisKKyMgVGhlIExBVEVYX09VVFBVVCB0YWcgaXMgdXNlZCB0byBzcGVjaWZ5IHdoZXJlIHRoZSBMYVRlWCBkb2NzIHdpbGwgYmUgcHV0LiAKKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSAKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGBsYXRleCcgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHBhdGguCisKK0xBVEVYX09VVFBVVCAgICAgICAgICAgPSBsYXRleAorCisjIFRoZSBMQVRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgTGFUZVggY29tbWFuZCBuYW1lIHRvIGJlIAorIyBpbnZva2VkLiBJZiBsZWZ0IGJsYW5rIGBsYXRleCcgd2lsbCBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IGNvbW1hbmQgbmFtZS4KKworTEFURVhfQ01EX05BTUUgICAgICAgICA9IGxhdGV4CisKKyMgVGhlIE1BS0VJTkRFWF9DTURfTkFNRSB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29tbWFuZCBuYW1lIHRvIAorIyBnZW5lcmF0ZSBpbmRleCBmb3IgTGFUZVguIElmIGxlZnQgYmxhbmsgYG1ha2VpbmRleCcgd2lsbCBiZSB1c2VkIGFzIHRoZSAKKyMgZGVmYXVsdCBjb21tYW5kIG5hbWUuCisKK01BS0VJTkRFWF9DTURfTkFNRSAgICAgPSBtYWtlaW5kZXgKKworIyBJZiB0aGUgQ09NUEFDVF9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIGdlbmVyYXRlcyBtb3JlIGNvbXBhY3QgCisjIExhVGVYIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8gCisjIHNhdmUgc29tZSB0cmVlcyBpbiBnZW5lcmFsLgorCitDT01QQUNUX0xBVEVYICAgICAgICAgID0gTk8KKworIyBUaGUgUEFQRVJfVFlQRSB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBwYXBlciB0eXBlIHRoYXQgaXMgdXNlZCAKKyMgYnkgdGhlIHByaW50ZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmU6IGE0LCBhNHdpZGUsIGxldHRlciwgbGVnYWwgYW5kIAorIyBleGVjdXRpdmUuIElmIGxlZnQgYmxhbmsgYTR3aWRlIHdpbGwgYmUgdXNlZC4KKworUEFQRVJfVFlQRSAgICAgICAgICAgICA9IGE0d2lkZQorCisjIFRoZSBFWFRSQV9QQUNLQUdFUyB0YWcgY2FuIGJlIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgbmFtZXMgb2YgTGFUZVggCisjIHBhY2thZ2VzIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSBMYVRlWCBvdXRwdXQuCisKK0VYVFJBX1BBQ0tBR0VTICAgICAgICAgPSAKKworIyBUaGUgTEFURVhfSEVBREVSIHRhZyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcGVyc29uYWwgTGFUZVggaGVhZGVyIGZvciAKKyMgdGhlIGdlbmVyYXRlZCBsYXRleCBkb2N1bWVudC4gVGhlIGhlYWRlciBzaG91bGQgY29udGFpbiBldmVyeXRoaW5nIHVudGlsIAorIyB0aGUgZmlyc3QgY2hhcHRlci4gSWYgaXQgaXMgbGVmdCBibGFuayBkb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgYSAKKyMgc3RhbmRhcmQgaGVhZGVyLiBOb3RpY2U6IG9ubHkgdXNlIHRoaXMgdGFnIGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyEKKworTEFURVhfSEVBREVSICAgICAgICAgICA9IAorCisjIElmIHRoZSBQREZfSFlQRVJMSU5LUyB0YWcgaXMgc2V0IHRvIFlFUywgdGhlIExhVGVYIHRoYXQgaXMgZ2VuZXJhdGVkIAorIyBpcyBwcmVwYXJlZCBmb3IgY29udmVyc2lvbiB0byBwZGYgKHVzaW5nIHBzMnBkZikuIFRoZSBwZGYgZmlsZSB3aWxsIAorIyBjb250YWluIGxpbmtzIChqdXN0IGxpa2UgdGhlIEhUTUwgb3V0cHV0KSBpbnN0ZWFkIG9mIHBhZ2UgcmVmZXJlbmNlcyAKKyMgVGhpcyBtYWtlcyB0aGUgb3V0cHV0IHN1aXRhYmxlIGZvciBvbmxpbmUgYnJvd3NpbmcgdXNpbmcgYSBwZGYgdmlld2VyLgorCitQREZfSFlQRVJMSU5LUyAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIFVTRV9QREZMQVRFWCB0YWcgaXMgc2V0IHRvIFlFUywgcGRmbGF0ZXggd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgCisjIHBsYWluIGxhdGV4IGluIHRoZSBnZW5lcmF0ZWQgTWFrZWZpbGUuIFNldCB0aGlzIG9wdGlvbiB0byBZRVMgdG8gZ2V0IGEgCisjIGhpZ2hlciBxdWFsaXR5IFBERiBkb2N1bWVudGF0aW9uLgorCitVU0VfUERGTEFURVggICAgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIExBVEVYX0JBVENITU9ERSB0YWcgaXMgc2V0IHRvIFlFUywgZG94eWdlbiB3aWxsIGFkZCB0aGUgXFxiYXRjaG1vZGUuIAorIyBjb21tYW5kIHRvIHRoZSBnZW5lcmF0ZWQgTGFUZVggZmlsZXMuIFRoaXMgd2lsbCBpbnN0cnVjdCBMYVRlWCB0byBrZWVwIAorIyBydW5uaW5nIGlmIGVycm9ycyBvY2N1ciwgaW5zdGVhZCBvZiBhc2tpbmcgdGhlIHVzZXIgZm9yIGhlbHAuIAorIyBUaGlzIG9wdGlvbiBpcyBhbHNvIHVzZWQgd2hlbiBnZW5lcmF0aW5nIGZvcm11bGFzIGluIEhUTUwuCisKK0xBVEVYX0JBVENITU9ERSAgICAgICAgPSBOTworCisjIElmIExBVEVYX0hJREVfSU5ESUNFUyBpcyBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIG5vdCAKKyMgaW5jbHVkZSB0aGUgaW5kZXggY2hhcHRlcnMgKHN1Y2ggYXMgRmlsZSBJbmRleCwgQ29tcG91bmQgSW5kZXgsIGV0Yy4pIAorIyBpbiB0aGUgb3V0cHV0LgorCitMQVRFWF9ISURFX0lORElDRVMgICAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgUlRGIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9SVEYgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIGdlbmVyYXRlIFJURiBvdXRwdXQgCisjIFRoZSBSVEYgb3V0cHV0IGlzIG9wdGltaXplZCBmb3IgV29yZCA5NyBhbmQgbWF5IG5vdCBsb29rIHZlcnkgcHJldHR5IHdpdGggCisjIG90aGVyIFJURiByZWFkZXJzIG9yIGVkaXRvcnMuCisKK0dFTkVSQVRFX1JURiAgICAgICAgICAgPSBOTworCisjIFRoZSBSVEZfT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIFJURiBkb2NzIHdpbGwgYmUgcHV0LiAKKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSAKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGBydGYnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitSVEZfT1VUUFVUICAgICAgICAgICAgID0gcnRmCisKKyMgSWYgdGhlIENPTVBBQ1RfUlRGIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gZ2VuZXJhdGVzIG1vcmUgY29tcGFjdCAKKyMgUlRGIGRvY3VtZW50cy4gVGhpcyBtYXkgYmUgdXNlZnVsIGZvciBzbWFsbCBwcm9qZWN0cyBhbmQgbWF5IGhlbHAgdG8gCisjIHNhdmUgc29tZSB0cmVlcyBpbiBnZW5lcmFsLgorCitDT01QQUNUX1JURiAgICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUlRGX0hZUEVSTElOS1MgdGFnIGlzIHNldCB0byBZRVMsIHRoZSBSVEYgdGhhdCBpcyBnZW5lcmF0ZWQgCisjIHdpbGwgY29udGFpbiBoeXBlcmxpbmsgZmllbGRzLiBUaGUgUlRGIGZpbGUgd2lsbCAKKyMgY29udGFpbiBsaW5rcyAoanVzdCBsaWtlIHRoZSBIVE1MIG91dHB1dCkgaW5zdGVhZCBvZiBwYWdlIHJlZmVyZW5jZXMuIAorIyBUaGlzIG1ha2VzIHRoZSBvdXRwdXQgc3VpdGFibGUgZm9yIG9ubGluZSBicm93c2luZyB1c2luZyBXT1JEIG9yIG90aGVyIAorIyBwcm9ncmFtcyB3aGljaCBzdXBwb3J0IHRob3NlIGZpZWxkcy4gCisjIE5vdGU6IHdvcmRwYWQgKHdyaXRlKSBhbmQgb3RoZXJzIGRvIG5vdCBzdXBwb3J0IGxpbmtzLgorCitSVEZfSFlQRVJMSU5LUyAgICAgICAgID0gWUVTCisKKyMgTG9hZCBzdHlsZXNoZWV0IGRlZmluaXRpb25zIGZyb20gZmlsZS4gU3ludGF4IGlzIHNpbWlsYXIgdG8gZG94eWdlbidzIAorIyBjb25maWcgZmlsZSwgaS5lLiBhIHNlcmllcyBvZiBhc3NpZ25tZW50cy4gWW91IG9ubHkgaGF2ZSB0byBwcm92aWRlIAorIyByZXBsYWNlbWVudHMsIG1pc3NpbmcgZGVmaW5pdGlvbnMgYXJlIHNldCB0byB0aGVpciBkZWZhdWx0IHZhbHVlLgorCitSVEZfU1RZTEVTSEVFVF9GSUxFICAgID0gCisKKyMgU2V0IG9wdGlvbmFsIHZhcmlhYmxlcyB1c2VkIGluIHRoZSBnZW5lcmF0aW9uIG9mIGFuIHJ0ZiBkb2N1bWVudC4gCisjIFN5bnRheCBpcyBzaW1pbGFyIHRvIGRveHlnZW4ncyBjb25maWcgZmlsZS4KKworUlRGX0VYVEVOU0lPTlNfRklMRSAgICA9IAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBtYW4gcGFnZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfTUFOIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAorIyBnZW5lcmF0ZSBtYW4gcGFnZXMKKworR0VORVJBVEVfTUFOICAgICAgICAgICA9IE5PCisKKyMgVGhlIE1BTl9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgbWFuIHBhZ2VzIHdpbGwgYmUgcHV0LiAKKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSAKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGBtYW4nIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitNQU5fT1VUUFVUICAgICAgICAgICAgID0gbWFuCisKKyMgVGhlIE1BTl9FWFRFTlNJT04gdGFnIGRldGVybWluZXMgdGhlIGV4dGVuc2lvbiB0aGF0IGlzIGFkZGVkIHRvIAorIyB0aGUgZ2VuZXJhdGVkIG1hbiBwYWdlcyAoZGVmYXVsdCBpcyB0aGUgc3Vicm91dGluZSdzIHNlY3Rpb24gLjMpCisKK01BTl9FWFRFTlNJT04gICAgICAgICAgPSAuMworCisjIElmIHRoZSBNQU5fTElOS1MgdGFnIGlzIHNldCB0byBZRVMgYW5kIERveHlnZW4gZ2VuZXJhdGVzIG1hbiBvdXRwdXQsIAorIyB0aGVuIGl0IHdpbGwgZ2VuZXJhdGUgb25lIGFkZGl0aW9uYWwgbWFuIGZpbGUgZm9yIGVhY2ggZW50aXR5IAorIyBkb2N1bWVudGVkIGluIHRoZSByZWFsIG1hbiBwYWdlKHMpLiBUaGVzZSBhZGRpdGlvbmFsIGZpbGVzIAorIyBvbmx5IHNvdXJjZSB0aGUgcmVhbCBtYW4gcGFnZSwgYnV0IHdpdGhvdXQgdGhlbSB0aGUgbWFuIGNvbW1hbmQgCisjIHdvdWxkIGJlIHVuYWJsZSB0byBmaW5kIHRoZSBjb3JyZWN0IHBhZ2UuIFRoZSBkZWZhdWx0IGlzIE5PLgorCitNQU5fTElOS1MgICAgICAgICAgICAgID0gTk8KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aGUgWE1MIG91dHB1dAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBHRU5FUkFURV9YTUwgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIAorIyBnZW5lcmF0ZSBhbiBYTUwgZmlsZSB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YgCisjIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4KKworR0VORVJBVEVfWE1MICAgICAgICAgICA9IE5PCisKKyMgVGhlIFhNTF9PVVRQVVQgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGVyZSB0aGUgWE1MIHBhZ2VzIHdpbGwgYmUgcHV0LiAKKyMgSWYgYSByZWxhdGl2ZSBwYXRoIGlzIGVudGVyZWQgdGhlIHZhbHVlIG9mIE9VVFBVVF9ESVJFQ1RPUlkgd2lsbCBiZSAKKyMgcHV0IGluIGZyb250IG9mIGl0LiBJZiBsZWZ0IGJsYW5rIGB4bWwnIHdpbGwgYmUgdXNlZCBhcyB0aGUgZGVmYXVsdCBwYXRoLgorCitYTUxfT1VUUFVUICAgICAgICAgICAgID0geG1sCisKKyMgVGhlIFhNTF9TQ0hFTUEgdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYW4gWE1MIHNjaGVtYSwgCisjIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IGEgdmFsaWRhdGluZyBYTUwgcGFyc2VyIHRvIGNoZWNrIHRoZSAKKyMgc3ludGF4IG9mIHRoZSBYTUwgZmlsZXMuCisKK1hNTF9TQ0hFTUEgICAgICAgICAgICAgPSAKKworIyBUaGUgWE1MX0RURCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhbiBYTUwgRFRELCAKKyMgd2hpY2ggY2FuIGJlIHVzZWQgYnkgYSB2YWxpZGF0aW5nIFhNTCBwYXJzZXIgdG8gY2hlY2sgdGhlIAorIyBzeW50YXggb2YgdGhlIFhNTCBmaWxlcy4KKworWE1MX0RURCAgICAgICAgICAgICAgICA9IAorCisjIElmIHRoZSBYTUxfUFJPR1JBTUxJU1RJTkcgdGFnIGlzIHNldCB0byBZRVMgRG94eWdlbiB3aWxsIAorIyBkdW1wIHRoZSBwcm9ncmFtIGxpc3RpbmdzIChpbmNsdWRpbmcgc3ludGF4IGhpZ2hsaWdodGluZyAKKyMgYW5kIGNyb3NzLXJlZmVyZW5jaW5nIGluZm9ybWF0aW9uKSB0byB0aGUgWE1MIG91dHB1dC4gTm90ZSB0aGF0IAorIyBlbmFibGluZyB0aGlzIHdpbGwgc2lnbmlmaWNhbnRseSBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgWE1MIG91dHB1dC4KKworWE1MX1BST0dSQU1MSVNUSU5HICAgICA9IFlFUworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIEF1dG9HZW4gRGVmaW5pdGlvbnMgb3V0cHV0CisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgSWYgdGhlIEdFTkVSQVRFX0FVVE9HRU5fREVGIHRhZyBpcyBzZXQgdG8gWUVTIERveHlnZW4gd2lsbCAKKyMgZ2VuZXJhdGUgYW4gQXV0b0dlbiBEZWZpbml0aW9ucyAoc2VlIGF1dG9nZW4uc2YubmV0KSBmaWxlIAorIyB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvZGUgaW5jbHVkaW5nIGFsbCAKKyMgZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMgZmVhdHVyZSBpcyBzdGlsbCBleHBlcmltZW50YWwgCisjIGFuZCBpbmNvbXBsZXRlIGF0IHRoZSBtb21lbnQuCisKK0dFTkVSQVRFX0FVVE9HRU5fREVGICAgPSBOTworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBQZXJsIG1vZHVsZSBvdXRwdXQKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBJZiB0aGUgR0VORVJBVEVfUEVSTE1PRCB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgCisjIGdlbmVyYXRlIGEgUGVybCBtb2R1bGUgZmlsZSB0aGF0IGNhcHR1cmVzIHRoZSBzdHJ1Y3R1cmUgb2YgCisjIHRoZSBjb2RlIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRhdGlvbi4gTm90ZSB0aGF0IHRoaXMgCisjIGZlYXR1cmUgaXMgc3RpbGwgZXhwZXJpbWVudGFsIGFuZCBpbmNvbXBsZXRlIGF0IHRoZSAKKyMgbW9tZW50LgorCitHRU5FUkFURV9QRVJMTU9EICAgICAgID0gTk8KKworIyBJZiB0aGUgUEVSTE1PRF9MQVRFWCB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgZ2VuZXJhdGUgCisjIHRoZSBuZWNlc3NhcnkgTWFrZWZpbGUgcnVsZXMsIFBlcmwgc2NyaXB0cyBhbmQgTGFUZVggY29kZSB0byBiZSBhYmxlIAorIyB0byBnZW5lcmF0ZSBQREYgYW5kIERWSSBvdXRwdXQgZnJvbSB0aGUgUGVybCBtb2R1bGUgb3V0cHV0LgorCitQRVJMTU9EX0xBVEVYICAgICAgICAgID0gTk8KKworIyBJZiB0aGUgUEVSTE1PRF9QUkVUVFkgdGFnIGlzIHNldCB0byBZRVMgdGhlIFBlcmwgbW9kdWxlIG91dHB1dCB3aWxsIGJlIAorIyBuaWNlbHkgZm9ybWF0dGVkIHNvIGl0IGNhbiBiZSBwYXJzZWQgYnkgYSBodW1hbiByZWFkZXIuICBUaGlzIGlzIHVzZWZ1bCAKKyMgaWYgeW91IHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGdvaW5nIG9uLiAgT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoaXMgCisjIHRhZyBpcyBzZXQgdG8gTk8gdGhlIHNpemUgb2YgdGhlIFBlcmwgbW9kdWxlIG91dHB1dCB3aWxsIGJlIG11Y2ggc21hbGxlciAKKyMgYW5kIFBlcmwgd2lsbCBwYXJzZSBpdCBqdXN0IHRoZSBzYW1lLgorCitQRVJMTU9EX1BSRVRUWSAgICAgICAgID0gWUVTCisKKyMgVGhlIG5hbWVzIG9mIHRoZSBtYWtlIHZhcmlhYmxlcyBpbiB0aGUgZ2VuZXJhdGVkIGRveHlydWxlcy5tYWtlIGZpbGUgCisjIGFyZSBwcmVmaXhlZCB3aXRoIHRoZSBzdHJpbmcgY29udGFpbmVkIGluIFBFUkxNT0RfTUFLRVZBUl9QUkVGSVguIAorIyBUaGlzIGlzIHVzZWZ1bCBzbyBkaWZmZXJlbnQgZG94eXJ1bGVzLm1ha2UgZmlsZXMgaW5jbHVkZWQgYnkgdGhlIHNhbWUgCisjIE1ha2VmaWxlIGRvbid0IG92ZXJ3cml0ZSBlYWNoIG90aGVyJ3MgdmFyaWFibGVzLgorCitQRVJMTU9EX01BS0VWQVJfUFJFRklYID0gCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIHByZXByb2Nlc3NvciAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBFTkFCTEVfUFJFUFJPQ0VTU0lORyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCAKKyMgZXZhbHVhdGUgYWxsIEMtcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMgZm91bmQgaW4gdGhlIHNvdXJjZXMgYW5kIGluY2x1ZGUgCisjIGZpbGVzLgorCitFTkFCTEVfUFJFUFJPQ0VTU0lORyAgID0gWUVTCisKKyMgSWYgdGhlIE1BQ1JPX0VYUEFOU0lPTiB0YWcgaXMgc2V0IHRvIFlFUyBEb3h5Z2VuIHdpbGwgZXhwYW5kIGFsbCBtYWNybyAKKyMgbmFtZXMgaW4gdGhlIHNvdXJjZSBjb2RlLiBJZiBzZXQgdG8gTk8gKHRoZSBkZWZhdWx0KSBvbmx5IGNvbmRpdGlvbmFsIAorIyBjb21waWxhdGlvbiB3aWxsIGJlIHBlcmZvcm1lZC4gTWFjcm8gZXhwYW5zaW9uIGNhbiBiZSBkb25lIGluIGEgY29udHJvbGxlZCAKKyMgd2F5IGJ5IHNldHRpbmcgRVhQQU5EX09OTFlfUFJFREVGIHRvIFlFUy4KKworTUFDUk9fRVhQQU5TSU9OICAgICAgICA9IE5PCisKKyMgSWYgdGhlIEVYUEFORF9PTkxZX1BSRURFRiBhbmQgTUFDUk9fRVhQQU5TSU9OIHRhZ3MgYXJlIGJvdGggc2V0IHRvIFlFUyAKKyMgdGhlbiB0aGUgbWFjcm8gZXhwYW5zaW9uIGlzIGxpbWl0ZWQgdG8gdGhlIG1hY3JvcyBzcGVjaWZpZWQgd2l0aCB0aGUgCisjIFBSRURFRklORUQgYW5kIEVYUEFORF9BU19QUkVERUZJTkVEIHRhZ3MuCisKK0VYUEFORF9PTkxZX1BSRURFRiAgICAgPSBOTworCisjIElmIHRoZSBTRUFSQ0hfSU5DTFVERVMgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGUgaW5jbHVkZXMgZmlsZXMgCisjIGluIHRoZSBJTkNMVURFX1BBVEggKHNlZSBiZWxvdykgd2lsbCBiZSBzZWFyY2ggaWYgYSAjaW5jbHVkZSBpcyBmb3VuZC4KKworU0VBUkNIX0lOQ0xVREVTICAgICAgICA9IFlFUworCisjIFRoZSBJTkNMVURFX1BBVEggdGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgb25lIG9yIG1vcmUgZGlyZWN0b3JpZXMgdGhhdCAKKyMgY29udGFpbiBpbmNsdWRlIGZpbGVzIHRoYXQgYXJlIG5vdCBpbnB1dCBmaWxlcyBidXQgc2hvdWxkIGJlIHByb2Nlc3NlZCBieSAKKyMgdGhlIHByZXByb2Nlc3Nvci4KKworSU5DTFVERV9QQVRIICAgICAgICAgICA9IHNyYy9oZWFkZXJzCisKKyMgWW91IGNhbiB1c2UgdGhlIElOQ0xVREVfRklMRV9QQVRURVJOUyB0YWcgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSB3aWxkY2FyZCAKKyMgcGF0dGVybnMgKGxpa2UgKi5oIGFuZCAqLmhwcCkgdG8gZmlsdGVyIG91dCB0aGUgaGVhZGVyLWZpbGVzIGluIHRoZSAKKyMgZGlyZWN0b3JpZXMuIElmIGxlZnQgYmxhbmssIHRoZSBwYXR0ZXJucyBzcGVjaWZpZWQgd2l0aCBGSUxFX1BBVFRFUk5TIHdpbGwgCisjIGJlIHVzZWQuCisKK0lOQ0xVREVfRklMRV9QQVRURVJOUyAgPSAKKworIyBUaGUgUFJFREVGSU5FRCB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBtYWNybyBuYW1lcyB0aGF0IAorIyBhcmUgZGVmaW5lZCBiZWZvcmUgdGhlIHByZXByb2Nlc3NvciBpcyBzdGFydGVkIChzaW1pbGFyIHRvIHRoZSAtRCBvcHRpb24gb2YgCisjIGdjYykuIFRoZSBhcmd1bWVudCBvZiB0aGUgdGFnIGlzIGEgbGlzdCBvZiBtYWNyb3Mgb2YgdGhlIGZvcm06IG5hbWUgCisjIG9yIG5hbWU9ZGVmaW5pdGlvbiAobm8gc3BhY2VzKS4gSWYgdGhlIGRlZmluaXRpb24gYW5kIHRoZSA9IGFyZSAKKyMgb21pdHRlZCA9MSBpcyBhc3N1bWVkLiBUbyBwcmV2ZW50IGEgbWFjcm8gZGVmaW5pdGlvbiBmcm9tIGJlaW5nIAorIyB1bmRlZmluZWQgdmlhICN1bmRlZiBvciByZWN1cnNpdmVseSBleHBhbmRlZCB1c2UgdGhlIDo9IG9wZXJhdG9yIAorIyBpbnN0ZWFkIG9mIHRoZSA9IG9wZXJhdG9yLgorCitQUkVERUZJTkVEICAgICAgICAgICAgID0gCisKKyMgSWYgdGhlIE1BQ1JPX0VYUEFOU0lPTiBhbmQgRVhQQU5EX09OTFlfUFJFREVGIHRhZ3MgYXJlIHNldCB0byBZRVMgdGhlbiAKKyMgdGhpcyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGxpc3Qgb2YgbWFjcm8gbmFtZXMgdGhhdCBzaG91bGQgYmUgZXhwYW5kZWQuIAorIyBUaGUgbWFjcm8gZGVmaW5pdGlvbiB0aGF0IGlzIGZvdW5kIGluIHRoZSBzb3VyY2VzIHdpbGwgYmUgdXNlZC4gCisjIFVzZSB0aGUgUFJFREVGSU5FRCB0YWcgaWYgeW91IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IG1hY3JvIGRlZmluaXRpb24uCisKK0VYUEFORF9BU19ERUZJTkVEICAgICAgPSAKKworIyBJZiB0aGUgU0tJUF9GVU5DVElPTl9NQUNST1MgdGFnIGlzIHNldCB0byBZRVMgKHRoZSBkZWZhdWx0KSB0aGVuIAorIyBkb3h5Z2VuJ3MgcHJlcHJvY2Vzc29yIHdpbGwgcmVtb3ZlIGFsbCBmdW5jdGlvbi1saWtlIG1hY3JvcyB0aGF0IGFyZSBhbG9uZSAKKyMgb24gYSBsaW5lLCBoYXZlIGFuIGFsbCB1cHBlcmNhc2UgbmFtZSwgYW5kIGRvIG5vdCBlbmQgd2l0aCBhIHNlbWljb2xvbi4gU3VjaCAKKyMgZnVuY3Rpb24gbWFjcm9zIGFyZSB0eXBpY2FsbHkgdXNlZCBmb3IgYm9pbGVyLXBsYXRlIGNvZGUsIGFuZCB3aWxsIGNvbmZ1c2UgdGhlIAorIyBwYXJzZXIgaWYgbm90IHJlbW92ZWQuCisKK1NLSVBfRlVOQ1RJT05fTUFDUk9TICAgPSBZRVMKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb25maWd1cmF0aW9uOjphZGRpdGlvbnMgcmVsYXRlZCB0byBleHRlcm5hbCByZWZlcmVuY2VzICAgCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgVGhlIFRBR0ZJTEVTIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG9uZSBvciBtb3JlIHRhZ2ZpbGVzLiAKKyMgT3B0aW9uYWxseSBhbiBpbml0aWFsIGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBkb2N1bWVudGF0aW9uIAorIyBjYW4gYmUgYWRkZWQgZm9yIGVhY2ggdGFnZmlsZS4gVGhlIGZvcm1hdCBvZiBhIHRhZyBmaWxlIHdpdGhvdXQgCisjIHRoaXMgbG9jYXRpb24gaXMgYXMgZm9sbG93czogCisjICAgVEFHRklMRVMgPSBmaWxlMSBmaWxlMiAuLi4gCisjIEFkZGluZyBsb2NhdGlvbiBmb3IgdGhlIHRhZyBmaWxlcyBpcyBkb25lIGFzIGZvbGxvd3M6IAorIyAgIFRBR0ZJTEVTID0gZmlsZTE9bG9jMSAiZmlsZTIgPSBsb2MyIiAuLi4gCisjIHdoZXJlICJsb2MxIiBhbmQgImxvYzIiIGNhbiBiZSByZWxhdGl2ZSBvciBhYnNvbHV0ZSBwYXRocyBvciAKKyMgVVJMcy4gSWYgYSBsb2NhdGlvbiBpcyBwcmVzZW50IGZvciBlYWNoIHRhZywgdGhlIGluc3RhbGxkb3ggdG9vbCAKKyMgZG9lcyBub3QgaGF2ZSB0byBiZSBydW4gdG8gY29ycmVjdCB0aGUgbGlua3MuCisjIE5vdGUgdGhhdCBlYWNoIHRhZyBmaWxlIG11c3QgaGF2ZSBhIHVuaXF1ZSBuYW1lCisjICh3aGVyZSB0aGUgbmFtZSBkb2VzIE5PVCBpbmNsdWRlIHRoZSBwYXRoKQorIyBJZiBhIHRhZyBmaWxlIGlzIG5vdCBsb2NhdGVkIGluIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggZG94eWdlbiAKKyMgaXMgcnVuLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIHBhdGggdG8gdGhlIHRhZ2ZpbGUgaGVyZS4KKworVEFHRklMRVMgICAgICAgICAgICAgICA9IAorCisjIFdoZW4gYSBmaWxlIG5hbWUgaXMgc3BlY2lmaWVkIGFmdGVyIEdFTkVSQVRFX1RBR0ZJTEUsIGRveHlnZW4gd2lsbCBjcmVhdGUgCisjIGEgdGFnIGZpbGUgdGhhdCBpcyBiYXNlZCBvbiB0aGUgaW5wdXQgZmlsZXMgaXQgcmVhZHMuCisKK0dFTkVSQVRFX1RBR0ZJTEUgICAgICAgPSAKKworIyBJZiB0aGUgQUxMRVhURVJOQUxTIHRhZyBpcyBzZXQgdG8gWUVTIGFsbCBleHRlcm5hbCBjbGFzc2VzIHdpbGwgYmUgbGlzdGVkIAorIyBpbiB0aGUgY2xhc3MgaW5kZXguIElmIHNldCB0byBOTyBvbmx5IHRoZSBpbmhlcml0ZWQgZXh0ZXJuYWwgY2xhc3NlcyAKKyMgd2lsbCBiZSBsaXN0ZWQuCisKK0FMTEVYVEVSTkFMUyAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBFWFRFUk5BTF9HUk9VUFMgdGFnIGlzIHNldCB0byBZRVMgYWxsIGV4dGVybmFsIGdyb3VwcyB3aWxsIGJlIGxpc3RlZCAKKyMgaW4gdGhlIG1vZHVsZXMgaW5kZXguIElmIHNldCB0byBOTywgb25seSB0aGUgY3VycmVudCBwcm9qZWN0J3MgZ3JvdXBzIHdpbGwgCisjIGJlIGxpc3RlZC4KKworRVhURVJOQUxfR1JPVVBTICAgICAgICA9IFlFUworCisjIFRoZSBQRVJMX1BBVEggc2hvdWxkIGJlIHRoZSBhYnNvbHV0ZSBwYXRoIGFuZCBuYW1lIG9mIHRoZSBwZXJsIHNjcmlwdCAKKyMgaW50ZXJwcmV0ZXIgKGkuZS4gdGhlIHJlc3VsdCBvZiBgd2hpY2ggcGVybCcpLgorCitQRVJMX1BBVEggICAgICAgICAgICAgID0gL3Vzci9iaW4vcGVybAorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBkb3QgdG9vbCAgIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElmIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCAKKyMgZ2VuZXJhdGUgYSBpbmhlcml0YW5jZSBkaWFncmFtIChpbiBIVE1MLCBSVEYgYW5kIExhVGVYKSBmb3IgY2xhc3NlcyB3aXRoIGJhc2Ugb3IgCisjIHN1cGVyIGNsYXNzZXMuIFNldHRpbmcgdGhlIHRhZyB0byBOTyB0dXJucyB0aGUgZGlhZ3JhbXMgb2ZmLiBOb3RlIHRoYXQgdGhpcyAKKyMgb3B0aW9uIGlzIHN1cGVyc2VkZWQgYnkgdGhlIEhBVkVfRE9UIG9wdGlvbiBiZWxvdy4gVGhpcyBpcyBvbmx5IGEgZmFsbGJhY2suIEl0IGlzIAorIyByZWNvbW1lbmRlZCB0byBpbnN0YWxsIGFuZCB1c2UgZG90LCBzaW5jZSBpdCB5aWVsZHMgbW9yZSBwb3dlcmZ1bCBncmFwaHMuCisKK0NMQVNTX0RJQUdSQU1TICAgICAgICAgPSBZRVMKKworIyBJZiBzZXQgdG8gWUVTLCB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgaGlkZSAKKyMgaW5oZXJpdGFuY2UgYW5kIHVzYWdlIHJlbGF0aW9ucyBpZiB0aGUgdGFyZ2V0IGlzIHVuZG9jdW1lbnRlZCAKKyMgb3IgaXMgbm90IGEgY2xhc3MuCisKK0hJREVfVU5ET0NfUkVMQVRJT05TICAgPSBOTworCisjIElmIHlvdSBzZXQgdGhlIEhBVkVfRE9UIHRhZyB0byBZRVMgdGhlbiBkb3h5Z2VuIHdpbGwgYXNzdW1lIHRoZSBkb3QgdG9vbCBpcyAKKyMgYXZhaWxhYmxlIGZyb20gdGhlIHBhdGguIFRoaXMgdG9vbCBpcyBwYXJ0IG9mIEdyYXBodml6LCBhIGdyYXBoIHZpc3VhbGl6YXRpb24gCisjIHRvb2xraXQgZnJvbSBBVCZUIGFuZCBMdWNlbnQgQmVsbCBMYWJzLiBUaGUgb3RoZXIgb3B0aW9ucyBpbiB0aGlzIHNlY3Rpb24gCisjIGhhdmUgbm8gZWZmZWN0IGlmIHRoaXMgb3B0aW9uIGlzIHNldCB0byBOTyAodGhlIGRlZmF1bHQpCisKK0hBVkVfRE9UICAgICAgICAgICAgICAgPSBOTworCisjIElmIHRoZSBDTEFTU19HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gCisjIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaCBkb2N1bWVudGVkIGNsYXNzIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgCisjIGluZGlyZWN0IGluaGVyaXRhbmNlIHJlbGF0aW9ucy4gU2V0dGluZyB0aGlzIHRhZyB0byBZRVMgd2lsbCBmb3JjZSB0aGUgCisjIHRoZSBDTEFTU19ESUFHUkFNUyB0YWcgdG8gTk8uCisKK0NMQVNTX0dSQVBIICAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgQ09MTEFCT1JBVElPTl9HUkFQSCBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gCisjIHdpbGwgZ2VuZXJhdGUgYSBncmFwaCBmb3IgZWFjaCBkb2N1bWVudGVkIGNsYXNzIHNob3dpbmcgdGhlIGRpcmVjdCBhbmQgCisjIGluZGlyZWN0IGltcGxlbWVudGF0aW9uIGRlcGVuZGVuY2llcyAoaW5oZXJpdGFuY2UsIGNvbnRhaW5tZW50LCBhbmQgCisjIGNsYXNzIHJlZmVyZW5jZXMgdmFyaWFibGVzKSBvZiB0aGUgY2xhc3Mgd2l0aCBvdGhlciBkb2N1bWVudGVkIGNsYXNzZXMuCisKK0NPTExBQk9SQVRJT05fR1JBUEggICAgPSBZRVMKKworIyBJZiB0aGUgVU1MX0xPT0sgdGFnIGlzIHNldCB0byBZRVMgZG94eWdlbiB3aWxsIGdlbmVyYXRlIGluaGVyaXRhbmNlIGFuZCAKKyMgY29sbGFib3JhdGlvbiBkaWFncmFtcyBpbiBhIHN0eWxlIHNpbWlsYXIgdG8gdGhlIE9NRydzIFVuaWZpZWQgTW9kZWxpbmcgCisjIExhbmd1YWdlLgorCitVTUxfTE9PSyAgICAgICAgICAgICAgID0gTk8KKworIyBJZiBzZXQgdG8gWUVTLCB0aGUgaW5oZXJpdGFuY2UgYW5kIGNvbGxhYm9yYXRpb24gZ3JhcGhzIHdpbGwgc2hvdyB0aGUgCisjIHJlbGF0aW9ucyBiZXR3ZWVuIHRlbXBsYXRlcyBhbmQgdGhlaXIgaW5zdGFuY2VzLgorCitURU1QTEFURV9SRUxBVElPTlMgICAgID0gTk8KKworIyBJZiB0aGUgRU5BQkxFX1BSRVBST0NFU1NJTkcsIFNFQVJDSF9JTkNMVURFUywgSU5DTFVERV9HUkFQSCwgYW5kIEhBVkVfRE9UIAorIyB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIGdlbmVyYXRlIGEgZ3JhcGggZm9yIGVhY2ggZG9jdW1lbnRlZCAKKyMgZmlsZSBzaG93aW5nIHRoZSBkaXJlY3QgYW5kIGluZGlyZWN0IGluY2x1ZGUgZGVwZW5kZW5jaWVzIG9mIHRoZSBmaWxlIHdpdGggCisjIG90aGVyIGRvY3VtZW50ZWQgZmlsZXMuCisKK0lOQ0xVREVfR1JBUEggICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgRU5BQkxFX1BSRVBST0NFU1NJTkcsIFNFQVJDSF9JTkNMVURFUywgSU5DTFVERURfQllfR1JBUEgsIGFuZCAKKyMgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gd2lsbCBnZW5lcmF0ZSBhIGdyYXBoIGZvciBlYWNoIAorIyBkb2N1bWVudGVkIGhlYWRlciBmaWxlIHNob3dpbmcgdGhlIGRvY3VtZW50ZWQgZmlsZXMgdGhhdCBkaXJlY3RseSBvciAKKyMgaW5kaXJlY3RseSBpbmNsdWRlIHRoaXMgZmlsZS4KKworSU5DTFVERURfQllfR1JBUEggICAgICA9IFlFUworCisjIElmIHRoZSBDQUxMX0dSQVBIIGFuZCBIQVZFX0RPVCB0YWdzIGFyZSBzZXQgdG8gWUVTIHRoZW4gZG94eWdlbiB3aWxsIAorIyBnZW5lcmF0ZSBhIGNhbGwgZGVwZW5kZW5jeSBncmFwaCBmb3IgZXZlcnkgZ2xvYmFsIGZ1bmN0aW9uIG9yIGNsYXNzIG1ldGhvZC4gCisjIE5vdGUgdGhhdCBlbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIHNpZ25pZmljYW50bHkgaW5jcmVhc2UgdGhlIHRpbWUgb2YgYSBydW4uIAorIyBTbyBpbiBtb3N0IGNhc2VzIGl0IHdpbGwgYmUgYmV0dGVyIHRvIGVuYWJsZSBjYWxsIGdyYXBocyBmb3Igc2VsZWN0ZWQgCisjIGZ1bmN0aW9ucyBvbmx5IHVzaW5nIHRoZSBcY2FsbGdyYXBoIGNvbW1hbmQuCisKK0NBTExfR1JBUEggICAgICAgICAgICAgPSBZRVMKKworIyBJZiB0aGUgR1JBUEhJQ0FMX0hJRVJBUkNIWSBhbmQgSEFWRV9ET1QgdGFncyBhcmUgc2V0IHRvIFlFUyB0aGVuIGRveHlnZW4gCisjIHdpbGwgZ3JhcGhpY2FsIGhpZXJhcmNoeSBvZiBhbGwgY2xhc3NlcyBpbnN0ZWFkIG9mIGEgdGV4dHVhbCBvbmUuCisKK0dSQVBISUNBTF9ISUVSQVJDSFkgICAgPSBZRVMKKworIyBUaGUgRE9UX0lNQUdFX0ZPUk1BVCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBpbWFnZSBmb3JtYXQgb2YgdGhlIGltYWdlcyAKKyMgZ2VuZXJhdGVkIGJ5IGRvdC4gUG9zc2libGUgdmFsdWVzIGFyZSBwbmcsIGpwZywgb3IgZ2lmCisjIElmIGxlZnQgYmxhbmsgcG5nIHdpbGwgYmUgdXNlZC4KKworRE9UX0lNQUdFX0ZPUk1BVCAgICAgICA9IHBuZworCisjIFRoZSB0YWcgRE9UX1BBVEggY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgcGF0aCB3aGVyZSB0aGUgZG90IHRvb2wgY2FuIGJlIAorIyBmb3VuZC4gSWYgbGVmdCBibGFuaywgaXQgaXMgYXNzdW1lZCB0aGUgZG90IHRvb2wgY2FuIGJlIGZvdW5kIG9uIHRoZSBwYXRoLgorCitET1RfUEFUSCAgICAgICAgICAgICAgID0gCisKKyMgVGhlIERPVEZJTEVfRElSUyB0YWcgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBvbmUgb3IgbW9yZSBkaXJlY3RvcmllcyB0aGF0IAorIyBjb250YWluIGRvdCBmaWxlcyB0aGF0IGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoc2VlIHRoZSAKKyMgXGRvdGZpbGUgY29tbWFuZCkuCisKK0RPVEZJTEVfRElSUyAgICAgICAgICAgPSAKKworIyBUaGUgTUFYX0RPVF9HUkFQSF9XSURUSCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGFsbG93ZWQgd2lkdGggCisjIChpbiBwaXhlbHMpIG9mIHRoZSBncmFwaHMgZ2VuZXJhdGVkIGJ5IGRvdC4gSWYgYSBncmFwaCBiZWNvbWVzIGxhcmdlciB0aGFuIAorIyB0aGlzIHZhbHVlLCBkb3h5Z2VuIHdpbGwgdHJ5IHRvIHRydW5jYXRlIHRoZSBncmFwaCwgc28gdGhhdCBpdCBmaXRzIHdpdGhpbiAKKyMgdGhlIHNwZWNpZmllZCBjb25zdHJhaW50LiBCZXdhcmUgdGhhdCBtb3N0IGJyb3dzZXJzIGNhbm5vdCBjb3BlIHdpdGggdmVyeSAKKyMgbGFyZ2UgaW1hZ2VzLgorCitNQVhfRE9UX0dSQVBIX1dJRFRIICAgID0gMTAyNAorCisjIFRoZSBNQVhfRE9UX0dSQVBIX0hFSUdIVCB0YWcgY2FuIGJlIHVzZWQgdG8gc2V0IHRoZSBtYXhpbXVtIGFsbG93cyBoZWlnaHQgCisjIChpbiBwaXhlbHMpIG9mIHRoZSBncmFwaHMgZ2VuZXJhdGVkIGJ5IGRvdC4gSWYgYSBncmFwaCBiZWNvbWVzIGxhcmdlciB0aGFuIAorIyB0aGlzIHZhbHVlLCBkb3h5Z2VuIHdpbGwgdHJ5IHRvIHRydW5jYXRlIHRoZSBncmFwaCwgc28gdGhhdCBpdCBmaXRzIHdpdGhpbiAKKyMgdGhlIHNwZWNpZmllZCBjb25zdHJhaW50LiBCZXdhcmUgdGhhdCBtb3N0IGJyb3dzZXJzIGNhbm5vdCBjb3BlIHdpdGggdmVyeSAKKyMgbGFyZ2UgaW1hZ2VzLgorCitNQVhfRE9UX0dSQVBIX0hFSUdIVCAgID0gMTAyNAorCisjIFRoZSBNQVhfRE9UX0dSQVBIX0RFUFRIIHRhZyBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIG1heGltdW0gZGVwdGggb2YgdGhlIAorIyBncmFwaHMgZ2VuZXJhdGVkIGJ5IGRvdC4gQSBkZXB0aCB2YWx1ZSBvZiAzIG1lYW5zIHRoYXQgb25seSBub2RlcyByZWFjaGFibGUgCisjIGZyb20gdGhlIHJvb3QgYnkgZm9sbG93aW5nIGEgcGF0aCB2aWEgYXQgbW9zdCAzIGVkZ2VzIHdpbGwgYmUgc2hvd24uIE5vZGVzIHRoYXQgCisjIGxheSBmdXJ0aGVyIGZyb20gdGhlIHJvb3Qgbm9kZSB3aWxsIGJlIG9taXR0ZWQuIE5vdGUgdGhhdCBzZXR0aW5nIHRoaXMgb3B0aW9uIHRvIAorIyAxIG9yIDIgbWF5IGdyZWF0bHkgcmVkdWNlIHRoZSBjb21wdXRhdGlvbiB0aW1lIG5lZWRlZCBmb3IgbGFyZ2UgY29kZSBiYXNlcy4gQWxzbyAKKyMgbm90ZSB0aGF0IGEgZ3JhcGggbWF5IGJlIGZ1cnRoZXIgdHJ1bmNhdGVkIGlmIHRoZSBncmFwaCdzIGltYWdlIGRpbWVuc2lvbnMgYXJlIAorIyBub3Qgc3VmZmljaWVudCB0byBmaXQgdGhlIGdyYXBoIChzZWUgTUFYX0RPVF9HUkFQSF9XSURUSCBhbmQgTUFYX0RPVF9HUkFQSF9IRUlHSFQpLiAKKyMgSWYgMCBpcyB1c2VkIGZvciB0aGUgZGVwdGggdmFsdWUgKHRoZSBkZWZhdWx0KSwgdGhlIGdyYXBoIGlzIG5vdCBkZXB0aC1jb25zdHJhaW5lZC4KKworTUFYX0RPVF9HUkFQSF9ERVBUSCAgICA9IDAKKworIyBJZiB0aGUgR0VORVJBVEVfTEVHRU5EIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAorIyBnZW5lcmF0ZSBhIGxlZ2VuZCBwYWdlIGV4cGxhaW5pbmcgdGhlIG1lYW5pbmcgb2YgdGhlIHZhcmlvdXMgYm94ZXMgYW5kIAorIyBhcnJvd3MgaW4gdGhlIGRvdCBnZW5lcmF0ZWQgZ3JhcGhzLgorCitHRU5FUkFURV9MRUdFTkQgICAgICAgID0gWUVTCisKKyMgSWYgdGhlIERPVF9DTEVBTlVQIHRhZyBpcyBzZXQgdG8gWUVTICh0aGUgZGVmYXVsdCkgRG94eWdlbiB3aWxsIAorIyByZW1vdmUgdGhlIGludGVybWVkaWF0ZSBkb3QgZmlsZXMgdGhhdCBhcmUgdXNlZCB0byBnZW5lcmF0ZSAKKyMgdGhlIHZhcmlvdXMgZ3JhcGhzLgorCitET1RfQ0xFQU5VUCAgICAgICAgICAgID0gWUVTCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29uZmlndXJhdGlvbjo6YWRkaXRpb25zIHJlbGF0ZWQgdG8gdGhlIHNlYXJjaCBlbmdpbmUgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGUgU0VBUkNIRU5HSU5FIHRhZyBzcGVjaWZpZXMgd2hldGhlciBvciBub3QgYSBzZWFyY2ggZW5naW5lIHNob3VsZCBiZSAKKyMgdXNlZC4gSWYgc2V0IHRvIE5PIHRoZSB2YWx1ZXMgb2YgYWxsIHRhZ3MgYmVsb3cgdGhpcyBvbmUgd2lsbCBiZSBpZ25vcmVkLgorCitTRUFSQ0hFTkdJTkUgICAgICAgICAgID0gTk8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L0xJQ0VOU0UgYi9saWJ0b21jcnlwdC9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNjc4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9MSUNFTlNFCkBAIC0wLDAgKzEsNSBAQAorTGliVG9tQ3J5cHQgaXMgcHVibGljIGRvbWFpbi4gIEFzIHNob3VsZCBhbGwgcXVhbGl0eSBzb2Z0d2FyZSBiZS4KKworVG9tIFN0IERlbmlzCisKKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvTWFrZWZpbGUuaW4gYi9saWJ0b21jcnlwdC9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2MxY2U2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwzMTcgQEAKKyMgTUFLRUZJTEUgZm9yIGxpbnV4IEdDQworIworIyBUb20gU3QgRGVuaXMKKyMgTW9kaWZpZWQgYnkgQ2xheSBDdWx2ZXIKKworIyBUaGUgdmVyc2lvbgorVkVSU0lPTj0xLjE2CisKK1ZQQVRIPUBzcmNkaXJACitzcmNkaXI9QHNyY2RpckAKKworIyBDb21waWxlciBhbmQgTGlua2VyIE5hbWVzCisjQ0M9Z2NjCisjTEQ9bGQKKworIyBBcmNoaXZlciBbbWFrZXMgLmEgZmlsZXNdCisjQVI9YXIKKyNBUkZMQUdTPXIKKworIyBDb21waWxhdGlvbiBmbGFncy4gTm90ZSB0aGUgKz0gZG9lcyBub3Qgd3JpdGUgb3ZlciB0aGUgdXNlcidzIENGTEFHUyEKKyMgVGhlIHJlc3Qgb2YgdGhlIGZsYWdzIGNvbWUgZnJvbSB0aGUgcGFyZW50IERyb3BiZWFyIG1ha2VmaWxlCitDRkxBR1MgKz0gLWMgLUkkKHNyY2Rpcikvc3JjL2hlYWRlcnMvIC1JJChzcmNkaXIpLy4uLworCisjIGFkZGl0aW9uYWwgd2FybmluZ3MgKG5ld2VyIEdDQyAzLjQgYW5kIGhpZ2hlcikKK2lmZGVmIEdDQ18zNAorQ0ZMQUdTICs9IC1Xc3lzdGVtLWhlYWRlcnMgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgLVdiYWQtZnVuY3Rpb24tY2FzdCAtV2Nhc3QtYWxpZ24gLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyBcCisJCSAgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyAtV3BvaW50ZXItYXJpdGggCitlbmRpZgorCitpZm5kZWYgSUdOT1JFX1NQRUVECisKKyMgb3B0aW1pemUgZm9yIFNQRUVECisjQ0ZMQUdTICs9IC1PMyAtZnVucm9sbC1sb29wcworCisjIGFkZCAtZm9taXQtZnJhbWUtcG9pbnRlci4gIGhpbmRlcnMgZGVidWdnaW5nIQorI0NGTEFHUyArPSAtZm9taXQtZnJhbWUtcG9pbnRlcgorCisjIG9wdGltaXplIGZvciBTSVpFCisjQ0ZMQUdTICs9IC1PcyAtRExUQ19TTUFMTF9DT0RFCisKK2VuZGlmCisKKyMgb2xkZXIgR0NDcyBjYW4ndCBoYW5kbGUgdGhlICJyb3RhdGUgd2l0aCBpbW1lZGlhdGUiIFJPTGMvUk9SYy9ldGMgbWFjcm9zCisjIGRlZmluZSB0aGlzIHRvIGhlbHAKKyNDRkxBR1MgKz0gLURMVENfTk9fUk9MQworCisjIGNvbXBpbGUgZm9yIERFQlVHSU5HIChyZXF1aXJlZCBmb3IgY2NtYWxsb2MgY2hlY2tpbmchISEpCisjQ0ZMQUdTICs9IC1nMyAtRExUQ19OT19BU00KKworI091dHB1dCBmaWxlbmFtZXMgZm9yIHZhcmlvdXMgdGFyZ2V0cy4KK2lmbmRlZiBMSUJOQU1FCisgICBMSUJOQU1FPWxpYnRvbWNyeXB0LmEKK2VuZGlmCitpZm5kZWYgTElCVEVTVAorICAgTElCVEVTVD1saWJ0b21jcnlwdF9wcm9mLmEKK2VuZGlmCitMSUJURVNUX1M9JChMSUJURVNUKQorCitIQVNIPWhhc2hzdW0KK0NSWVBUPWVuY3J5cHQKK1NNQUxMPXNtYWxsCitQUk9GPXg4Nl9wcm9mCitUVj10dl9nZW4KK01VTFRJPW11bHRpCitUSU1JTkc9dGltaW5nCitURVNUPXRlc3QKKworI0xJQlBBVEgtVGhlIGRpcmVjdG9yeSBmb3IgbGlidG9tY3J5cHQgdG8gYmUgaW5zdGFsbGVkIHRvLgorI0lOQ1BBVEgtVGhlIGRpcmVjdG9yeSB0byBpbnN0YWxsIHRoZSBoZWFkZXIgZmlsZXMgZm9yIGxpYnRvbWNyeXB0LgorI0RBVEFQQVRILVRoZSBkaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgcGRmIGRvY3MuCitpZm5kZWYgREVTVERJUgorICAgREVTVERJUj0KK2VuZGlmCisKK2lmbmRlZiBMSUJQQVRICisgICBMSUJQQVRIPS91c3IvbGliCitlbmRpZgoraWZuZGVmIElOQ1BBVEgKKyAgIElOQ1BBVEg9L3Vzci9pbmNsdWRlCitlbmRpZgoraWZuZGVmIERBVEFQQVRICisgICBEQVRBUEFUSD0vdXNyL3NoYXJlL2RvYy9saWJ0b21jcnlwdC9wZGYKK2VuZGlmCisKKyNXaG8gZG8gd2UgaW5zdGFsbCBhcz8KK2lmZGVmIElOU1RBTExfVVNFUgorVVNFUj0kKElOU1RBTExfVVNFUikKK2Vsc2UKK1VTRVI9cm9vdAorZW5kaWYKKworaWZkZWYgSU5TVEFMTF9HUk9VUAorR1JPVVA9JChJTlNUQUxMX0dST1VQKQorZWxzZQorR1JPVVA9d2hlZWwKK2VuZGlmCisKKyNMaXN0IG9mIG9iamVjdHMgdG8gY29tcGlsZS4KKyNTVEFSVF9JTlMKK09CSkVDVFM9c3JjL2NpcGhlcnMvYWVzL2Flc19lbmMubyBzcmMvY2lwaGVycy9hZXMvYWVzLm8gc3JjL2NpcGhlcnMvYW51YmlzLm8gc3JjL2NpcGhlcnMvYmxvd2Zpc2gubyBcCitzcmMvY2lwaGVycy9jYXN0NS5vIHNyYy9jaXBoZXJzL2Rlcy5vIHNyYy9jaXBoZXJzL2thc3VtaS5vIHNyYy9jaXBoZXJzL2toYXphZC5vIHNyYy9jaXBoZXJzL2tzZWVkLm8gXAorc3JjL2NpcGhlcnMvbm9la2Vvbi5vIHNyYy9jaXBoZXJzL3JjMi5vIHNyYy9jaXBoZXJzL3JjNS5vIHNyYy9jaXBoZXJzL3JjNi5vIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVyLm8gXAorc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXJfdGFiLm8gc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXJwLm8gc3JjL2NpcGhlcnMvc2tpcGphY2subyBcCitzcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2gubyBzcmMvY2lwaGVycy94dGVhLm8gc3JjL2VuY2F1dGgvY2NtL2NjbV9tZW1vcnkubyBcCitzcmMvZW5jYXV0aC9jY20vY2NtX3Rlc3QubyBzcmMvZW5jYXV0aC9lYXgvZWF4X2FkZGhlYWRlci5vIHNyYy9lbmNhdXRoL2VheC9lYXhfZGVjcnlwdC5vIFwKK3NyYy9lbmNhdXRoL2VheC9lYXhfZGVjcnlwdF92ZXJpZnlfbWVtb3J5Lm8gc3JjL2VuY2F1dGgvZWF4L2VheF9kb25lLm8gc3JjL2VuY2F1dGgvZWF4L2VheF9lbmNyeXB0Lm8gXAorc3JjL2VuY2F1dGgvZWF4L2VheF9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkubyBzcmMvZW5jYXV0aC9lYXgvZWF4X2luaXQubyBcCitzcmMvZW5jYXV0aC9lYXgvZWF4X3Rlc3QubyBzcmMvZW5jYXV0aC9nY20vZ2NtX2FkZF9hYWQubyBzcmMvZW5jYXV0aC9nY20vZ2NtX2FkZF9pdi5vIFwKK3NyYy9lbmNhdXRoL2djbS9nY21fZG9uZS5vIHNyYy9lbmNhdXRoL2djbS9nY21fZ2ZfbXVsdC5vIHNyYy9lbmNhdXRoL2djbS9nY21faW5pdC5vIFwKK3NyYy9lbmNhdXRoL2djbS9nY21fbWVtb3J5Lm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9tdWx0X2gubyBzcmMvZW5jYXV0aC9nY20vZ2NtX3Byb2Nlc3MubyBcCitzcmMvZW5jYXV0aC9nY20vZ2NtX3Jlc2V0Lm8gc3JjL2VuY2F1dGgvZ2NtL2djbV90ZXN0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0Lm8gXAorc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZGVjcnlwdC5vIFwKK3NyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9lbmNyeXB0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0Lm8gXAorc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2luaXQubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX250ei5vIFwKK3NyYy9lbmNhdXRoL29jYi9vY2Jfc2hpZnRfeG9yLm8gc3JjL2VuY2F1dGgvb2NiL29jYl90ZXN0Lm8gc3JjL2VuY2F1dGgvb2NiL3Nfb2NiX2RvbmUubyBcCitzcmMvaGFzaGVzL2NoYy9jaGMubyBzcmMvaGFzaGVzL2hlbHBlci9oYXNoX2ZpbGUubyBzcmMvaGFzaGVzL2hlbHBlci9oYXNoX2ZpbGVoYW5kbGUubyBcCitzcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeS5vIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5X211bHRpLm8gc3JjL2hhc2hlcy9tZDIubyBzcmMvaGFzaGVzL21kNC5vIFwKK3NyYy9oYXNoZXMvbWQ1Lm8gc3JjL2hhc2hlcy9ybWQxMjgubyBzcmMvaGFzaGVzL3JtZDE2MC5vIHNyYy9oYXNoZXMvcm1kMjU2Lm8gc3JjL2hhc2hlcy9ybWQzMjAubyBcCitzcmMvaGFzaGVzL3NoYTEubyBzcmMvaGFzaGVzL3NoYTIvc2hhMjU2Lm8gc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5vIHNyYy9oYXNoZXMvdGlnZXIubyBcCitzcmMvaGFzaGVzL3doaXJsL3doaXJsLm8gc3JjL21hYy9mOS9mOV9kb25lLm8gc3JjL21hYy9mOS9mOV9maWxlLm8gc3JjL21hYy9mOS9mOV9pbml0Lm8gXAorc3JjL21hYy9mOS9mOV9tZW1vcnkubyBzcmMvbWFjL2Y5L2Y5X21lbW9yeV9tdWx0aS5vIHNyYy9tYWMvZjkvZjlfcHJvY2Vzcy5vIHNyYy9tYWMvZjkvZjlfdGVzdC5vIFwKK3NyYy9tYWMvaG1hYy9obWFjX2RvbmUubyBzcmMvbWFjL2htYWMvaG1hY19maWxlLm8gc3JjL21hYy9obWFjL2htYWNfaW5pdC5vIHNyYy9tYWMvaG1hYy9obWFjX21lbW9yeS5vIFwKK3NyYy9tYWMvaG1hYy9obWFjX21lbW9yeV9tdWx0aS5vIHNyYy9tYWMvaG1hYy9obWFjX3Byb2Nlc3MubyBzcmMvbWFjL2htYWMvaG1hY190ZXN0Lm8gXAorc3JjL21hYy9vbWFjL29tYWNfZG9uZS5vIHNyYy9tYWMvb21hYy9vbWFjX2ZpbGUubyBzcmMvbWFjL29tYWMvb21hY19pbml0Lm8gc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5Lm8gXAorc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5X211bHRpLm8gc3JjL21hYy9vbWFjL29tYWNfcHJvY2Vzcy5vIHNyYy9tYWMvb21hYy9vbWFjX3Rlc3QubyBcCitzcmMvbWFjL3BlbGljYW4vcGVsaWNhbi5vIHNyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX21lbW9yeS5vIHNyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX3Rlc3QubyBcCitzcmMvbWFjL3BtYWMvcG1hY19kb25lLm8gc3JjL21hYy9wbWFjL3BtYWNfZmlsZS5vIHNyYy9tYWMvcG1hYy9wbWFjX2luaXQubyBzcmMvbWFjL3BtYWMvcG1hY19tZW1vcnkubyBcCitzcmMvbWFjL3BtYWMvcG1hY19tZW1vcnlfbXVsdGkubyBzcmMvbWFjL3BtYWMvcG1hY19udHoubyBzcmMvbWFjL3BtYWMvcG1hY19wcm9jZXNzLm8gXAorc3JjL21hYy9wbWFjL3BtYWNfc2hpZnRfeG9yLm8gc3JjL21hYy9wbWFjL3BtYWNfdGVzdC5vIHNyYy9tYWMveGNiYy94Y2JjX2RvbmUubyBcCitzcmMvbWFjL3hjYmMveGNiY19maWxlLm8gc3JjL21hYy94Y2JjL3hjYmNfaW5pdC5vIHNyYy9tYWMveGNiYy94Y2JjX21lbW9yeS5vIFwKK3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeV9tdWx0aS5vIHNyYy9tYWMveGNiYy94Y2JjX3Byb2Nlc3MubyBzcmMvbWFjL3hjYmMveGNiY190ZXN0Lm8gXAorc3JjL21hdGgvZnAvbHRjX2VjY19mcF9tdWxtb2QubyBzcmMvbWF0aC9nbXBfZGVzYy5vIHNyYy9tYXRoL2x0bV9kZXNjLm8gc3JjL21hdGgvbXVsdGkubyBcCitzcmMvbWF0aC9yYW5kX3ByaW1lLm8gc3JjL21hdGgvdGZtX2Rlc2MubyBzcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2RlY29kZS5vIFwKK3NyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZW5jb2RlLm8gc3JjL21pc2MvYnVybl9zdGFjay5vIHNyYy9taXNjL2NyeXB0L2NyeXB0Lm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfYXJnY2hrLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfY2lwaGVyX2Rlc2NyaXB0b3IubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfaXNfdmFsaWQubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlci5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2FueS5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2lkLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2FueS5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9pZC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9vaWQubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX3BybmcubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9mc2EubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2Rlc2NyaXB0b3IubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2lzX3ZhbGlkLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfbHRjX21wX2Rlc2NyaXB0b3IubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9wcm5nX2Rlc2NyaXB0b3IubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9wcm5nX2lzX3ZhbGlkLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfY2lwaGVyLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfaGFzaC5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX3BybmcubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2NpcGhlci5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfaGFzaC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfcHJuZy5vIFwKK3NyYy9taXNjL2Vycm9yX3RvX3N0cmluZy5vIHNyYy9taXNjL3BrY3M1L3BrY3NfNV8xLm8gc3JjL21pc2MvcGtjczUvcGtjc181XzIubyBzcmMvbWlzYy96ZXJvbWVtLm8gXAorc3JjL21vZGVzL2NiYy9jYmNfZGVjcnlwdC5vIHNyYy9tb2Rlcy9jYmMvY2JjX2RvbmUubyBzcmMvbW9kZXMvY2JjL2NiY19lbmNyeXB0Lm8gXAorc3JjL21vZGVzL2NiYy9jYmNfZ2V0aXYubyBzcmMvbW9kZXMvY2JjL2NiY19zZXRpdi5vIHNyYy9tb2Rlcy9jYmMvY2JjX3N0YXJ0Lm8gXAorc3JjL21vZGVzL2NmYi9jZmJfZGVjcnlwdC5vIHNyYy9tb2Rlcy9jZmIvY2ZiX2RvbmUubyBzcmMvbW9kZXMvY2ZiL2NmYl9lbmNyeXB0Lm8gXAorc3JjL21vZGVzL2NmYi9jZmJfZ2V0aXYubyBzcmMvbW9kZXMvY2ZiL2NmYl9zZXRpdi5vIHNyYy9tb2Rlcy9jZmIvY2ZiX3N0YXJ0Lm8gXAorc3JjL21vZGVzL2N0ci9jdHJfZGVjcnlwdC5vIHNyYy9tb2Rlcy9jdHIvY3RyX2RvbmUubyBzcmMvbW9kZXMvY3RyL2N0cl9lbmNyeXB0Lm8gXAorc3JjL21vZGVzL2N0ci9jdHJfZ2V0aXYubyBzcmMvbW9kZXMvY3RyL2N0cl9zZXRpdi5vIHNyYy9tb2Rlcy9jdHIvY3RyX3N0YXJ0Lm8gc3JjL21vZGVzL2N0ci9jdHJfdGVzdC5vIFwKK3NyYy9tb2Rlcy9lY2IvZWNiX2RlY3J5cHQubyBzcmMvbW9kZXMvZWNiL2VjYl9kb25lLm8gc3JjL21vZGVzL2VjYi9lY2JfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9lY2IvZWNiX3N0YXJ0Lm8gc3JjL21vZGVzL2Y4L2Y4X2RlY3J5cHQubyBzcmMvbW9kZXMvZjgvZjhfZG9uZS5vIHNyYy9tb2Rlcy9mOC9mOF9lbmNyeXB0Lm8gXAorc3JjL21vZGVzL2Y4L2Y4X2dldGl2Lm8gc3JjL21vZGVzL2Y4L2Y4X3NldGl2Lm8gc3JjL21vZGVzL2Y4L2Y4X3N0YXJ0Lm8gc3JjL21vZGVzL2Y4L2Y4X3Rlc3RfbW9kZS5vIFwKK3NyYy9tb2Rlcy9scncvbHJ3X2RlY3J5cHQubyBzcmMvbW9kZXMvbHJ3L2xyd19kb25lLm8gc3JjL21vZGVzL2xydy9scndfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9scncvbHJ3X2dldGl2Lm8gc3JjL21vZGVzL2xydy9scndfcHJvY2Vzcy5vIHNyYy9tb2Rlcy9scncvbHJ3X3NldGl2Lm8gXAorc3JjL21vZGVzL2xydy9scndfc3RhcnQubyBzcmMvbW9kZXMvbHJ3L2xyd190ZXN0Lm8gc3JjL21vZGVzL29mYi9vZmJfZGVjcnlwdC5vIHNyYy9tb2Rlcy9vZmIvb2ZiX2RvbmUubyBcCitzcmMvbW9kZXMvb2ZiL29mYl9lbmNyeXB0Lm8gc3JjL21vZGVzL29mYi9vZmJfZ2V0aXYubyBzcmMvbW9kZXMvb2ZiL29mYl9zZXRpdi5vIFwKK3NyYy9tb2Rlcy9vZmIvb2ZiX3N0YXJ0Lm8gCisKK0hFQURFUlM9c3JjL2hlYWRlcnMvdG9tY3J5cHRfY2ZnLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfY3VzdG9tLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfYXJnY2hrLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfY2lwaGVyLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGsuaCBzcmMvaGVhZGVycy90b21jcnlwdF9oYXNoLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWF0aC5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X21pc2MuaCBzcmMvaGVhZGVycy90b21jcnlwdC5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X3BrY3MuaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9wcm5nLmggdGVzdHByb2YvdG9tY3J5cHRfdGVzdC5oCisKKyNFTkRfSU5TCisKK1RFU1RPQkpFQ1RTPWRlbW9zL3Rlc3QubworSEFTSE9CSkVDVFM9ZGVtb3MvaGFzaHN1bS5vCitDUllQVE9CSkVDVFM9ZGVtb3MvZW5jcnlwdC5vCitTTUFMTE9CSkVDVFM9ZGVtb3Mvc21hbGwubworVFZTPWRlbW9zL3R2X2dlbi5vCitNVUxUSVM9ZGVtb3MvbXVsdGkubworVElNSU5HUz1kZW1vcy90aW1pbmcubworVEVTVFM9ZGVtb3MvdGVzdC5vCisKKyNGaWxlcyBsZWZ0IG92ZXIgZnJvbSBtYWtpbmcgdGhlIGNyeXB0LnBkZi4KK0xFRlRPVkVSUz0qLmR2aSAqLmxvZyAqLmF1eCAqLnRvYyAqLmlkeCAqLmlsZyAqLmluZCAqLm91dAorCisjQ29tcHJlc3NlZCBmaWxlbmFtZXMKK0NPTVBSRVNTRUQ9Y3J5cHQtJChWRVJTSU9OKS50YXIuYnoyIGNyeXB0LSQoVkVSU0lPTikuemlwCisKKyNUaGUgZGVmYXVsdCBydWxlIGZvciBtYWtlIGJ1aWxkcyB0aGUgbGlidG9tY3J5cHQgbGlicmFyeS4KK2RlZmF1bHQ6bGlicmFyeQorCisjY2lwaGVycyBjb21lIGluIHR3byBmbGF2b3Vycy4uLiBlbmMrZGVjIGFuZCBlbmMgCitzcmMvY2lwaGVycy9hZXMvYWVzX2VuYy5vOiBzcmMvY2lwaGVycy9hZXMvYWVzLmMgc3JjL2NpcGhlcnMvYWVzL2Flc190YWIuYworCSQoQ0MpICQoQ0ZMQUdTKSAtREVOQ1JZUFRfT05MWSAtYyAkPCAtbyBzcmMvY2lwaGVycy9hZXMvYWVzX2VuYy5vCisKKyNUaGVzZSBhcmUgdGhlIHJ1bGVzIHRvIG1ha2UgY2VydGFpbiBvYmplY3QgZmlsZXMuCitzcmMvY2lwaGVycy9hZXMvYWVzLm86IHNyYy9jaXBoZXJzL2Flcy9hZXMuYyBzcmMvY2lwaGVycy9hZXMvYWVzX3RhYi5jCitzcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2gubzogc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoLmMgc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoX3RhYi5jCitzcmMvaGFzaGVzL3doaXJsL3doaXJsLm86IHNyYy9oYXNoZXMvd2hpcmwvd2hpcmwuYyBzcmMvaGFzaGVzL3doaXJsL3doaXJsdGFiLmMKK3NyYy9oYXNoZXMvc2hhMi9zaGE1MTIubzogc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5jIHNyYy9oYXNoZXMvc2hhMi9zaGEzODQuYworc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5vOiBzcmMvaGFzaGVzL3NoYTIvc2hhMjU2LmMgc3JjL2hhc2hlcy9zaGEyL3NoYTIyNC5jCisKKyNUaGlzIHJ1bGUgbWFrZXMgdGhlIGxpYnRvbWNyeXB0IGxpYnJhcnkuCitsaWJyYXJ5OiAkKExJQk5BTUUpCisKK3Rlc3Rwcm9mLyQoTElCVEVTVCk6IAorCWNkIHRlc3Rwcm9mIDsgQ0ZMQUdTPSIkKENGTEFHUykiIExJQlRFU1RfUz0kKExJQlRFU1RfUykgJChNQUtFKSAKKworJChMSUJOQU1FKTogJChPQkpFQ1RTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpFQ1RTKSAKKwkkKFJBTkxJQikgJEAKKworI1RoaXMgcnVsZSBtYWtlcyB0aGUgaGFzaCBwcm9ncmFtIGluY2x1ZGVkIHdpdGggbGlidG9tY3J5cHQKK2hhc2hzdW06IGxpYnJhcnkgJChIQVNIT0JKRUNUUykKKwkkKENDKSAkKEhBU0hPQkpFQ1RTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKEhBU0gpICQoV0FSTikKKworI21ha2VzIHRoZSBjcnlwdCBwcm9ncmFtCitjcnlwdDogbGlicmFyeSAkKENSWVBUT0JKRUNUUykKKwkkKENDKSAkKENSWVBUT0JKRUNUUykgJChMSUJOQU1FKSAkKEVYVFJBTElCUykgLW8gJChDUllQVCkgJChXQVJOKQorCisjbWFrZXMgdGhlIHNtYWxsIHByb2dyYW0KK3NtYWxsOiBsaWJyYXJ5ICQoU01BTExPQkpFQ1RTKQorCSQoQ0MpICQoU01BTExPQkpFQ1RTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKFNNQUxMKSAkKFdBUk4pCisJCit0dl9nZW46IGxpYnJhcnkgJChUVlMpCisJJChDQykgJChMREZMQUdTKSAkKFRWUykgJChMSUJOQU1FKSAkKEVYVFJBTElCUykgLW8gJChUVikKKworbXVsdGk6IGxpYnJhcnkgJChNVUxUSVMpCisJJChDQykgJChNVUxUSVMpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoTVVMVEkpCisKK3RpbWluZzogbGlicmFyeSB0ZXN0cHJvZi8kKExJQlRFU1QpICQoVElNSU5HUykKKwkkKENDKSAkKExERkxBR1MpICQoVElNSU5HUykgdGVzdHByb2YvJChMSUJURVNUKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKFRJTUlORykKKwordGVzdDogbGlicmFyeSB0ZXN0cHJvZi8kKExJQlRFU1QpICQoVEVTVFMpCisJJChDQykgJChMREZMQUdTKSAkKFRFU1RTKSB0ZXN0cHJvZi8kKExJQlRFU1QpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoVEVTVCkKKworI1RoaXMgcnVsZSBpbnN0YWxscyB0aGUgbGlicmFyeSBhbmQgdGhlIGhlYWRlciBmaWxlcy4gVGhpcyBtdXN0IGJlIHJ1bgorI2FzIHJvb3QgaW4gb3JkZXIgdG8gaGF2ZSBhIGhpZ2ggZW5vdWdoIHBlcm1pc3Npb24gdG8gd3JpdGUgdG8gdGhlIGNvcnJlY3QKKyNkaXJlY3RvcmllcyBhbmQgdG8gc2V0IHRoZSBvd25lciBhbmQgZ3JvdXAgdG8gcm9vdC4KK2lmbmRlZiBOT0RPQ1MKK2luc3RhbGw6IGxpYnJhcnkgZG9jcworZWxzZQoraW5zdGFsbDogbGlicmFyeQorZW5kaWYKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoTElCUEFUSCkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoSU5DUEFUSCkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoREFUQVBBVEgpCisJaW5zdGFsbCAtZyAkKEdST1VQKSAtbyAkKFVTRVIpICQoTElCTkFNRSkgJChERVNURElSKSQoTElCUEFUSCkKKwlpbnN0YWxsIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChIRUFERVJTKSAkKERFU1RESVIpJChJTkNQQVRIKQoraWZuZGVmIE5PRE9DUworCWluc3RhbGwgLWcgJChHUk9VUCkgLW8gJChVU0VSKSBkb2MvY3J5cHQucGRmICQoREVTVERJUikkKERBVEFQQVRIKQorZW5kaWYKKworaW5zdGFsbF90ZXN0OiB0ZXN0cHJvZi8kKExJQlRFU1QpCisJaW5zdGFsbCAtZCAtZyAkKEdST1VQKSAtbyAkKFVTRVIpICQoREVTVERJUikkKExJQlBBVEgpCisJaW5zdGFsbCAtZCAtZyAkKEdST1VQKSAtbyAkKFVTRVIpICQoREVTVERJUikkKElOQ1BBVEgpCisJaW5zdGFsbCAtZyAkKEdST1VQKSAtbyAkKFVTRVIpIHRlc3Rwcm9mLyQoTElCVEVTVCkgJChERVNURElSKSQoTElCUEFUSCkKKworcHJvZmlsZToKKwlDRkxBR1M9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtZ2VuZXJhdGUiICQoTUFLRSkgdGltaW5nIEVYVFJBTElCUz0iJChFWFRSQUxJQlMpIC1sZ2NvdiIKKwkuL3RpbWluZworCXJtIC1mIHRpbWluZyBgZmluZCAuIC10eXBlIGYgfCBncmVwIFsuXVthb10gfCB4YXJnc2AKKwlDRkxBR1M9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtdXNlIiAkKE1BS0UpIHRpbWluZyBFWFRSQUxJQlM9IiQoRVhUUkFMSUJTKSAtbGdjb3YiCisKKworI1RoaXMgcnVsZSBjbGVhbnMgdGhlIHNvdXJjZSB0cmVlIG9mIGFsbCBjb21waWxlZCBjb2RlLCBub3QgaW5jbHVkaW5nIHRoZSBwZGYKKyNkb2N1bWVudGF0aW9uLgorY2xlYW46CisJLXJtIC1mICQoT0JKRUNUUykKKwktcm0gLWYgbGlidG9tY3J5cHQuYQorCisjYnVpbGQgdGhlIGRveHkgZmlsZXMgKHJlcXVpcmVzIERveHlnZW4sIHRldGV4IGFuZCBwYXRpZW5jZSkKK2RveHk6CisJZG94eWdlbgorCWNkIGRvYy9kb3h5Z2VuL2xhdGV4IDsgJHtNQUtFfSA7IG12IC1mIHJlZm1hbi5wZGYgLi4vLi4vLgorCWVjaG8gVGhlIGh1Z2UgZG94eWdlbiBQREYgc2hvdWxkIGJlIGF2YWlsYWJsZSBhcyBkb2MvcmVmbWFuLnBkZgorCQorI1RoaXMgYnVpbGRzIHRoZSBjcnlwdC5wZGYgZmlsZS4gTm90ZSB0aGF0IHRoZSBybSAtZiAqLnBkZiBoYXMgYmVlbiByZW1vdmVkCisjZnJvbSB0aGUgY2xlYW4gY29tbWFuZCEgVGhpcyBpcyBiZWNhdXNlIG1vc3QgcGVvcGxlIHdvdWxkIGxpa2UgdG8ga2VlcCB0aGUKKyNuaWNlIHByZS1jb21waWxlZCBjcnlwdC5wZGYgdGhhdCBjb21lcyB3aXRoIGxpYnRvbWNyeXB0ISBXZSBvbmx5IG5lZWQgdG8KKyNkZWxldGUgaXQgaWYgd2UgYXJlIHJlYnVpbGRpbmcgaXQuCitkb2NzOiBjcnlwdC50ZXgKKwlybSAtZiBkb2MvY3J5cHQucGRmICQoTEVGVE9WRVJTKQorCWVjaG8gImhlbGxvIiA+IGNyeXB0LmluZAorCWxhdGV4IGNyeXB0ID4gL2Rldi9udWxsCisJbGF0ZXggY3J5cHQgPiAvZGV2L251bGwKKwltYWtlaW5kZXggY3J5cHQuaWR4ID4gL2Rldi9udWxsCisJcGVybCBmaXh1cGluZC5wbAorCWxhdGV4IGNyeXB0ID4gL2Rldi9udWxsCisJZHZpcGRmIGNyeXB0CisJbXYgLWl2ZiBjcnlwdC5wZGYgZG9jL2NyeXB0LnBkZgorCXJtIC1mICQoTEVGVE9WRVJTKQorCitkb2Nkdmk6IGNyeXB0LnRleAorCWVjaG8gaGVsbG8gPiBjcnlwdC5pbmQKKwlsYXRleCBjcnlwdCA+IC9kZXYvbnVsbAorCWxhdGV4IGNyeXB0ID4gL2Rldi9udWxsCisJbWFrZWluZGV4IGNyeXB0LmlkeAorCXBlcmwgZml4dXBpbmQucGwKKwlsYXRleCBjcnlwdCA+IC9kZXYvbnVsbAorCWxhdGV4IGNyeXB0ID4gL2Rldi9udWxsCisKKyN6aXB1cCB0aGUgcHJvamVjdCAodGFrZSB0aGF0ISkKK25vX29vcHM6IGNsZWFuCisJY2QgLi4gOyBjdnMgY29tbWl0IAorCWVjaG8gU2Nhbm5pbmcgZm9yIHNjcmF0Y2gvZGlydHkgZmlsZXMKKwlmaW5kIC4gLXR5cGUgZiB8IGdyZXAgLXYgQ1ZTIHwgeGFyZ3MgLW4gMSBiYXNoIG1lc3Muc2gKKworemlwdXA6IG5vX29vcHMgZG9jcworCWNkIC4uIDsgcm0gLXJmIGNyeXB0KiBsaWJ0b21jcnlwdC0kKFZFUlNJT04pIDsgbWtkaXIgbGlidG9tY3J5cHQtJChWRVJTSU9OKSA7IFwKKwljcCAtUiAuL2xpYnRvbWNyeXB0LyogLi9saWJ0b21jcnlwdC0kKFZFUlNJT04pLyA7IFwKKwljZCBsaWJ0b21jcnlwdC0kKFZFUlNJT04pIDsgcm0gLXJmIGBmaW5kIC4gLXR5cGUgZCB8IGdyZXAgQ1ZTIHwgeGFyZ3NgIDsgY2QgLi4gOyBcCisJdGFyIC1janZmIGNyeXB0LSQoVkVSU0lPTikudGFyLmJ6MiBsaWJ0b21jcnlwdC0kKFZFUlNJT04pIDsgXAorCXppcCAtOXIgY3J5cHQtJChWRVJTSU9OKS56aXAgbGlidG9tY3J5cHQtJChWRVJTSU9OKSA7IFwKKwlncGcgLWIgLWEgY3J5cHQtJChWRVJTSU9OKS50YXIuYnoyIDsgZ3BnIC1iIC1hIGNyeXB0LSQoVkVSU0lPTikuemlwIDsgXAorCW12IC1mdiBjcnlwdCogfiA7IHJtIC1yZiBsaWJ0b21jcnlwdC0kKFZFUlNJT04pCisKKworIyAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9tYWtlZmlsZSx2ICQgCisjICRSZXZpc2lvbjogMS4xNDUgJCAKKyMgJERhdGU6IDIwMDYvMTIvMDIgMTk6MjM6MjEgJCAKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L1JFQURNRSBiL2xpYnRvbWNyeXB0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTFiZDg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvUkVBRE1FCkBAIC0wLDAgKzEsMyBAQAorU2VlIGRvYy9jcnlwdC5wZGYKKworCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9UT0RPIGIvbGlidG9tY3J5cHQvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjZlYzhhCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvVE9ETwpAQCAtMCwwICsxLDExIEBACitzdG9wcGVkIGF0IGNoMTIKKy0tIG5lZWRzIGV4YW1wbGVzIGZvciBlY2MvZHNhISEhIChhbmQgZm9yIGFzbi4xKQorCittdXN0IGhhdmUgZm9yIHYxLjE2CistIGRvY3VtZW50IFBLIGJ1aWxkIGZsYWdzCistIGRvY3VtZW50IG1ha2VmaWxlIGZsYWdzIFtJTlNUQUxMXyogZm9yIGluc3RhbmNlXQorLSBwcmVwYXJlIG1hbnVhbCBmb3IgcHJpbnRpbmcgKGJvdGggc29mdCBhbmQgaGFyZCBjb3ZlcikKKworTmljZSB0byBoYXZlIFtpbiBvcmRlciBvZiBwcmVjZWRlbmNlXQorLSBhZGQgWDkuNjMgSUVTCistIGFkZCBDUFAgbWFjcm9zIGxpa2UgT3BlblNTTCBoYXMgZm9yIEFTTjEgKGUuZy4gZW5jb2RlL2RlY29kZSBmdW5jdGlvbnMsIGV0Yykgc2hhbWVsZXNzIHJpcG9mZiA6LSkKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L2J1aWxkLnNoIGIvbGlidG9tY3J5cHQvYnVpbGQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA0ODY3MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L2J1aWxkLnNoCkBAIC0wLDAgKzEsMjAgQEAKKyMhL2Jpbi9iYXNoCitlY2hvICIkMSAoJDIsICQzKS4uLiIKK21ha2UgY2xlYW4gMT4vZGV2L251bGwgMj4vZGV2L251bGwKK2VjaG8gLW4gImJ1aWxkaW5nLi4uIgorQ0ZMQUdTPSIkMiAkQ0ZMQUdTICQ0IiBFWFRSQUxJQlM9IiQ1IiBtYWtlIC1qNCAtZiAkMyB0ZXN0IHR2X2dlbiAxPmdjY18xLnR4dCAyPmdjY18yLnR4dCB8fCAoZWNobyAiYnVpbGQgJDEgZmFpbGVkIHNlZSBnY2NfMi50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24iICYmIGNhdCBnY2NfMi50eHQgJiYgZXhpdCAxKQorZWNobyAtbiAidGVzdGluZy4uLiIKK2lmIFsgLWEgdGVzdCBdICYmIFsgLWYgdGVzdCBdICYmIFsgLXggdGVzdCBdOyB0aGVuCisgICAoKC4vdGVzdCA+dGVzdF9zdGQudHh0IDI+dGVzdF9lcnIudHh0ICYmIC4vdHZfZ2VuID4gdHYudHh0KSAmJiBlY2hvICIkMSB0ZXN0IHBhc3NlZC4iICYmIGVjaG8gInkiID4gdGVzdG9rLnR4dCkgfHwgKGVjaG8gIiQxIHRlc3QgZmFpbGVkIiAmJiBjYXQgdGVzdF9lcnIudHh0ICYmIGV4aXQgMSkKKyAgIGlmIGZpbmQgKl90di50eHQgLXR5cGUgZiAxPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAgIGZvciBmIGluICpfdHYudHh0OyBkbyBpZiAoZGlmZiAtLWlnbm9yZS1jYXNlICRmIG5vdGVzLyRmKSB0aGVuIHRydWU7IGVsc2UgKGVjaG8gInR2X2dlbiAkZiBmYWlsZWQiICYmIHJtIC1mIHRlc3Rvay50eHQgJiYgZXhpdCAxKTsgZmk7IGRvbmUKKyAgIGZpCitmaQoraWYgWyAtYSB0ZXN0b2sudHh0IF0gJiYgWyAtZiB0ZXN0b2sudHh0IF07IHRoZW4KKyAgIGV4aXQgMAorZmkKK2V4aXQgMQorCisjICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L2J1aWxkLnNoLHYgJCAgIAorIyAkUmV2aXNpb246IDEuOSAkICAgCisjICREYXRlOiAyMDA2LzAzLzE4IDE0OjEwOjU1ICQgCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9jaGFuZ2VzIGIvbGlidG9tY3J5cHQvY2hhbmdlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmM3MDE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvY2hhbmdlcwpAQCAtMCwwICsxLDE1NTYgQEAKK0RlY2VtYmVyIDE2dGgsIDIwMDYKK3YxLjE2IC0tIEJyaWFuIEdsYWRtYW4gcG9pbnRlZCBvdXQgdGhhdCBhIHJlY2VudCBjaGFuZ2UgdG8gR0NNIGJyb2tlIGhvdyB0aGUgSVYgd2FzIGhhbmRsZWQuICBDdXJyZW50bHkgdGhlIGNvZGUgY29tcGxpZXMgYWdhaW5zdCBoaXMgdGVzdCB2ZWN0b3JzCisgICAgICAgICBzbyB0aGUgY29kZSBzaG91bGQgYmUgY29uc2lkZXJlZCBmcm96ZW4gbm93LgorICAgICAgLS0gVHJldm9yIGZyb20gQ3J5cHRvZ3JhcGh5IFJlc2VhcmNoIEluYy4gc3VibWl0dGVkIHBhdGNoZXMgdG8gY29udmVydCB0aGUgRUNDIGNvZGUgdG8gYmUgZ2VuZXJpYyBhbGxvd2luZyBjdXJ2ZSBwYXJhbWV0ZXJzIHRvIGJlIHN1Ym1pdHRlZAorICAgICAgICAgYXQgcnVudGltZS4gIAorICAgICAgLS0gRml4ZWQgdmFyaW91cyBkb3h5Z2VuIGNvbW1lbnRzCisgICAgICAtLSBBZGRlZCBVVEY4IHN1cHBvcnQgdG8gdGhlIEFTTjEgY29kZQorICAgICAgLS0gRml4ZWQgU1RPUkVYWEggbWFjcm9zIGZvciB4ODYgcGxhdGZvcm1zIChGaXggZm91bmQgYXQgRWxsaXB0aWMgSW5jLikKKyAgICAgIC0tIEFkZGVkIG1ha2VmaWxlLnVuaXggd2hpY2ggaXMgQlNEIGNvbXBhdGlibGUsIHlvdSBoYXZlIHRvIG1hbnVhbGx5IHR3ZWFrIGl0IHNpbmNlIHdlbGwgSSBkb24ndCB1c2UgaXQgbm9ybWFsbHkKKyAgICAgIC0tIHJlbW92ZWQgYSBmZXcgbGluZ2VyaW5nIG1lbWNweSdzCisgICAgICAtLSBGaXhlZCBtZW1vcnkgZnJlZSBlcnJvcnMgaW4gZWNjX3NpZ25faGFzaCgpIHRoYXQgY2FuIGFyaXNlIGlmIHRoZSBtcF9pbml0X211bHRpKCkgZmFpbHMKKyAgICAgIC0tIEZpeGVkIGluY29ycmVjdCByZXR1cm4gdmFsdWUgaW4gcGtjc18xX3Bzc19kZWNvZGUoKSB3aGljaCB3b3VsZCBjb3JyZWN0bHkgc2V0IHJlcyB0byAwIChpbmRpY2F0aW5nIGFuIGluY29ycmVjdCBzaWduYXR1cmUpIGJ1dCAKKyAgICAgICAgIHdvdWxkIHJldHVybiBDUllQVF9PSyB0byB0aGUgY2FsbGVyCisgICAgICAtLSBsdGNfZWNjX211bG1vZCgpIGNvdWxkIGxlYWsgbWVtb3J5IGlmIG1wX2luaXQoJm11KSBmYWlsZWQsIGZpeGVkLiAgV291bGQgeW91IGJlbGlldmUgdGhhdCBsdGNfZWNjX211bG1vZF90aW1pbmcoKSBoYWQgdGhlIHNhbWUKKyAgICAgICAgIGJ1Zz8gIEFsc28gZml4ZWQuICA6LSkKKyAgICAgIC0tIEFkZGVkIFNoYW1pcidzIHRyaWNrIHRvIHRoZSBFQ0Mgc2lkZSAoZGVmaW5lZCBhcyBMVENfRUNDX1NIQU1JUiwgZW5hYmxlZCBieSBkZWZhdWx0KSwgZ2V0cyB+MS4zNHggdG8gfjEuNDB4IGZhc3RlciBFQ0MgdmVyaWZpY2F0aW9ucworICAgICAgLS0gQWRkZWQgQnJpYW4ncyB2ZWN0b3IgIzQ2IHRvIHRoZSBHQ00gY29kZS4gIEl0IGNhdGNoZXMgdGhlIGN0ciBjb3VudGVyIGVycm9yIGZyb20gdjEuMTUuICBPcmlnaW5hbGx5IEkgd2FzIGdvaW5nIHRvIGFkZCBhbGwgb2YgaGlzIHZlY3RvcnMsCisgICAgICAgICBidXQgdGhleSdyZSBub3QgYXMgZWFzeSB0byBwYXJzZSBhbmQgSSBnb3QgYSBsb3Qgb2Ygb3RoZXIgdGhpbmdzIHRvIGRvLiAgUmVncmVzc2lvbiEKKyAgICAgIC0tIFZhcmlvdXMgb3RoZXIgc21hbGwgZml4ZXMgdG8gdGhlIEVDQyBjb2RlIHRvIGNsZWFuIHVwIGVycm9yIGhhbmRsaW5nIChJIHRoaW5rIG1vc3Qgb2YgdGhhdCB3YXMgZnJvbSB0aGUgbW92ZSBpbiAxLjA2IHRvIHRoZSBwbHVnaW5zKQorICAgICAgICAgQWxsIG9mIHRoZSBlcnJvcnMgd2VyZSBpbiBjbGVhbmluZyB1cCBmcm9tIGhlYXAgZmFpbHVyZXMuICBTbyB0aGV5IHdlcmUgbm90IGxpa2VseSB0byBiZSB0cmlnZ2VyZWQgaW4gbm9ybWFsIHVzYWdlCisgICAgICAgICBNYWRlIHNpbWlsYXIgZml4ZXMgdG8gdGhlIFJTQSBhbmQgRFNBIGNvZGUgKG15IGJhZCkKKyAgICAgIC0tIENyeXB0b2dyYXBoeSBSZXNlYXJjaCBJbmMuIGNvbnRyaWJ1dGVkIGEgYnVuY2ggb2YgZml4ZXMgdG8gc2lsZW5jZSB3YXJuaW5ncyAod2l0aCBNU1ZDKSB3LnIudC4gYXNzaWduZWQgZGF0YSB0byB1bnNpZ25lZCBjaGFyIHR5cGVzLgorICAgICAgLS0gTWFydGluIE1hcmtvIHN1Z2dlc3RlZCBzb21lIGZpeGVzIHRvIG1ha2UgdGhlIFJORyBidWlsZCB3aXRoIFdpbkNFLgorICAgICAgLS0gVXBkYXRlcyB0byB0aGUgbWFudWFsIGZvciBwcmludCAoc29tZSBmaXhlcyB0aGFua3MgdG8gTWFydGluIE1hcmtvKQorICAgICAgCisKK05vdmVtYmVyIDE3dGgsIDIwMDYKK3YxLjE1IC0tIEFuZHJlYXMgTGFuZ2UgZm91bmQgdGhhdCBpZiBzaGEyNTZfaW5pdCBESUQgZmFpbCBpbiBmb3J0dW5hIGl0IHdvdWxkbid0IGNsZWFuIHVwIHRoZSBzdGF0ZSBjb3JyZWN0bHkuICBUaGFua3MuCisgICAgICAgICBGb3J0dW5hdGVseSBzaGEyNTZfaW5pdCBjYW5ub3QgZmFpbCAoYXMgb2YgdjEuMTQpIDotKQorICAgICAgLS0gQW5kcmVhcyBMYW5nZSBjb250cmlidXRlZCBSTUQtMjU2IGFuZCBSTUQtMzIwIGNvZGUuCisgICAgICAtLSBSZW1vdmVkIG11dGV4IGxvY2tzIGZyb20gZm9ydHVuYV9pbXBvcnQgYXMgdGhleSBjcmVhdGUgYSBkZWFkbG9jayBhbmQgYXJlbid0IHJlcXVpcmVkIGFueXdheXMgW0F2aSBaZWxtYW5vdmljaF0KKyAgICAgIC0tIEFkZGVkIExUQ19OT19QUk9UT1RZUEVTIHRvIGF2b2lkIHByb3RvdHlwaW5nIGZ1bmN0aW9ucyBsaWtlIG1lbXNldC9tZW1jcHkuICBSZXF1aXJlZCBmb3IgZmFucyBvZiBHQ0MgMy4zLngKKyAgICAgIC0tIERhdmlkIEVkZXIgY2F1Z2h0IGEgb2ZmIGJ5IG9uZSBvdmVycnVuIGJ1ZyBpbiBwbWFjX2RvbmUoKSB3aGljaCBjYW4gYmUgZXhwbG9pdGVkIGlmIHlvdXIgb3V0cHV0IHRhZyBidWZmZXIgaXMgCisgICAgICAgICBzbWFsbGVyIHRoYW4gdGhlIGJsb2NrIHNpemUgb2YgdGhlIGNpcGhlciwgZS5nLiBpZiB5b3UgaGF2ZSBhIDQtYnl0ZSBidWZmZXIgYW5kIHlvdSB0ZWxsIHBtYWNfZG9uZSB0aGF0IHlvdSB3YW50CisgICAgICAgICBhIDQtYnl0ZSBUQUcgaXQgd2lsbCBzdG9yZSA0IGJ5dGVzIGJ1dCByZXR1cm4gYW4gb3V0bGVuIG9mIDUuCisgICAgICAtLSBBZGRlZCBzaWduYXR1cmVzIHRvIHRoZSBFQ0MgYW5kIFJTQSBiZW5jaG1hcmtzCisgICAgICAtLSBBZGRlZCBMVENfUFJPRklMRSB0byBydW4gdGhlIFBLIHRlc3RzIG9ubHkgb25jZSBpbiB0aGUgdGltaW5nIGRlbW8gKHNvIHlvdSBjYW4gY2FwdHVyZSBldmVudHMgcHJvcGVybHkpCisgICAgICAtLSBBbmRyZWFzIGNvbnRyaWJ1dGVkIFBLQ1MgIzEgdjEuNSBjb2RlIHRoYXQgbWVyZ2VkIGNsZWFubHkgd2l0aCB0aGUgZXhpc3RpbmcgUEtDUyBjb2RlLiAgdzAwdC4KKyAgICAgICAgICh1cGRhdGU6IEkgaGFkIHRvIGZpeCBpdCB0byBpbmNsdWRlIHRoZSBkaWdlc3RJbmZvIGFuZCB3aGF0IG5vdC4gIEJhZCBBbmRyZWFzLCBiYWQhIGhlaGVoZSkKKyAgICAgIC0tIEZpeGVkIGEgc2lnbmVkIHZhcmlhYmxlIGVycm9yIGluIGdjbV9wcm9jZXNzKCkgKGhhcmQgdG8gdHJpZ2dlciBidWcgZm9ydHVuYXRlbHkpCisgICAgICAtLSBSZW1vdmVkIGFsbCBtZW1jbXAvbWVtc2V0L21lbWNweSBmcm9tIHRoZSBzb3VyY2UgKHJlcGxhY2VkIHdpdGggWCBtYWNyb3MpCisgICAgICAtLSBSZW5hbWVkIG1hY3JvcyBITUFDL09NQUMvUE1BQyB0byBoYXZlIGEgTFRDXyBwcmVmaXguICBJZiB5b3UgcGFzcyB0aGVzZSBvbiB0aGUgY29tbWFuZCBsaW5lIHBsZWFzZSB1cGRhdGUgeW91ciBtYWtlZmlsZXMKKyAgICAgIC0tIEFkZGVkIFhDQkMtTUFDIHN1cHBvcnQgW1JGQyAzNTY2XQorICAgICAgLS0gZml4ZWQgTE9BRDMySCBhbmQgTE9BRDY0SCB0byBzdG9wIHB1dHRpbmcgb3V0IHRoYXQgZGFybiB3YXJuaW5nIDotKQorICAgICAgLS0gQWRkZWQgdGhlIEtvcmVhbiBTRUVEIGJsb2NrIGNpcGhlciBbUkZDIDQyNjldCisgICAgICAtLSBBZGRlZCBMVENfVkFMR1JJTkQgZGVmaW5lIHdoaWNoIG1ha2VzIFNPQkVSLTEyOCBhbmQgUkM0IGEgcHVyZSBQUk5HIChhbmQgbm90IGEgc3RyZWFtIGNpcGhlcikuICBVc2VmdWwgaWYgeW91IHVzZSAKKyAgICAgICAgIFZhbGdyaW5kIHRvIGRlYnVnIHlvdXIgY29kZSAocmVwb3J0ZWQgYnkgQW5kcmVhcyBMYW5nZSkKKyAgICAgIC0tIE1hZGUgU09CRVItMTI4IG1vcmUgcG9ydGFibGUgYnkgcmVtb3ZpbmcgdGhlIEFTQ0lJIGtleSBpbiB0aGUgdGVzdCBmdW5jdGlvbiAobXkgYmFkLCBzb3JyeSkuCisgICAgICAtLSBNYXJ0aW4gTW9ja28gcG9pbnRlZCBvdXQgdGhhdCBpZiB5b3UgaGF2ZSBubyBQUk5HcyBkZWZpbmVkIHRoZSBsaWIgd29uJ3QgYnVpbGQuICBGaXhlZCwgYWxzbyBmaXhlZCBmb3IgaWYgeW91IGhhdmUgbm8KKyAgICAgICAgIGhhc2hlcyBkZWZpbmVkLgorICAgICAgLS0gU3BlZCB1cCBGOCBtb2RlIHdpdGggTFRDX0ZBU1QKKyAgICAgIC0tIE1hZGUgQ1RSIG1vZGUgUkZDIDM2ODYgY29tcGxpYW50IChpbmNyZW1lbnQgY291bnRlciBmaXJzdCksIHRvIGVuYWJsZSwgT1IgdGhlIHZhbHVlIExUQ19DVFJfUkZDMzY4NiB0byB0aGUgIm1vZGUiCisgICAgICAgICBwYXJhbWV0ZXIgeW91IHBhc3MgdG8gY3RyX3N0YXJ0KCksIG90aGVyd2lzZSBpdCB3aWxsIGJlIExUQyBjb21wbGlhbnQgKGUuZy4gZW5jcnlwdCB0aGVuIGluY3JlbWVudCkKKyAgICAgIC0tIEFkZGVkIGN0cl90ZXN0KCkgdG8gdGVzdCBDVFIgbW9kZSBhZ2FpbnN0IFJGQyAzNjg2CisgICAgICAtLSBBZGRlZCBjcnlwdF9mc2EoKSAuLi4gT19vCisgICAgICAtLSBGaXhlZCBMVENfRUNDX1RJTUlOR19SRVNJU1RBTlQgc28gaXQgb25jZSBhZ2FpbiBidWlsZHMgcHJvcGVybHkgKHB0IGFkZC9kYmwgYXJlIHRocm91Z2ggdGhlIHBsdWdpbiBub3cpCisgICAgICAtLSBBZGRlZCBBTlNJIFg5LjYzIChzZWMgNC4zLjYpIGltcG9ydC9leHBvcnQgb2YgcHVibGljIGtleXMgKGNhbm5vdCBleHBvcnQgdG8gY29tcHJlc3NlZCBmb3JtYXRzIGJ1dCB3aWxsIGltcG9ydCAKKyAgICAgICAgIGh5YnJpZCBjb21wcmVzc2VkKQorICAgICAgLS0gQWRkZWQgU0VDUCBjdXJ2ZXMgZm9yIDExMiwgMTI4LCBhbmQgMTYwIGJpdHMgKG9ubHkgdGhlICdyMScgY3VydmVzKQorICAgICAgLS0gQWRkZWQgM0dQUC1GOSBNQUMgKHRoYW5rcyB0byBHcmVnIFJvc2UgZm9yIHRoZSB0ZXN0IHZlY3RvcnMpCisgICAgICAtLSBBZGRlZCB0aGUgS0FTVU1JIGJsb2NrIGNpcGhlcgorICAgICAgLS0gQWRkZWQgRjkvWENCQy9PTUFDIGNhbGxiYWNrcyB0byB0aGUgY2lwaGVyIHBsdWdpbgorICAgICAgLS0gQWRkZWQgUlNBIFBLQ1MgIzEgdjEuNSBzaWduYXR1cmUvZW5jcnlwdCB0ZXN0cyB0byByc2FfdGVzdC5jCisgICAgICAtLSBGaXggdG8geWFycm93X3Rlc3QoKSB0byBub3QgY2FsbCB5YXJyb3dfZG9uZSgpIHdoaWNoIGlzIGludmFsaWQgaW4gdGhhdCBjb250ZXh0ICh0aGFua3MgVmFsZ3JpbmQpCisgICAgICAtLSBDaHJpc3RvcGhlIERldmluZSBwb2ludGVkIG91dCB0aGF0IEFudWJpcyB3b3VsZCBmYWlsIG9uIHZhcmlvdXMgNjQtYml0IFVOSVggYm94ZXMgd2hlbiAieD4+MjQiIHdhcyB1c2VkIGFzIGFuIGluZGV4LCB3ZSBuZWVkZWQgCisgICAgICAgICB0byBtYXNrIGl0IHdpdGggMHhGRi4gIFRoYW5rcy4gIEZpeGVkLgorCitBdWd1c3QgMHgxRSwgMHgwN0Q2Cit2MS4xNCAtLSBSZW5hbWVkIHRoZSBjaGFpbmluZyBtb2RlIG1hY3JvcyBmcm9tIFhYWCB0byBMVENfWFhYX01PREUuICBTaG91bGQgaGVscCBhdm9pZCBwb2xsdXRpbmcgdGhlIG1hY3JvIG5hbWUgc3BhY2UuCisgICAgICAtLSBjbGVhbiB1cCBvZiBTSEEtMjU2CisgICAgICAtLSBDaHJpcyBDb2xtYW4gcG9pbnRlZCBvdXQgdGhhdCBkZXJfZGVjb2RlX3NlcXVlbmNlXyogYWxsb3dzIExUQ19BU04xX1NFVE9GIHRvIGFjY2VwdCBTRVFVRU5DRXMgYW5kIHZpY2UgdmVyc2EuCisgICAgICAgICBEZWNvZGVyIFtub24tZmxleGkgZGVjb2RlciB0aGF0IGlzXSBpcyBtb3JlIHN0cmljdCBub3cgYW5kIHJlcXVpcmVzIGEgbWF0Y2guCisgICAgICAtLSBTdGVmZmVuIEphZWNrZWwgcG9pbnRlZCBvdXQgYSB0eXBvIGluIHRoZSB1c2VyIG1hbnVhbCAocmU6IHJzYV9leHB0bW9kKS4gIEZpeGVkLiAgVGhpcyBkaXNwcm92ZXMgdGhlIG5vdGlvbiB0aGF0CisgICAgICAgICBub2JvZHkgcmVhZHMgaXQuICA6LSkKKyAgICAgIC0tIE1hZGUgR0NNIGEgYml0IG1vcmUgcG9ydGFibGUgdy5yLnQuIGhhbmRsaW5nIHRoZSBDVFIgSVYgKGUuZy4gJiB3aXRoIDI1NSkKKyAgICAgIC0tIEFkZCBMVENfVkVSQk9TRSBpZiB5b3UgcmVhbGx5IHdhbnQgdG8gc2VlIHdoYXQgdGVzdCBpcyBkb2luZyA6LSkKKyAgICAgIC0tIEFkZGVkIFNTRTIgc3VwcG9ydCB0byBHQ00gW3VzZSBHQ01fVEFCTEVTX1NTRTIgdG8gZW5hYmxlXSwgc2hhdmVzIDIgY3ljbGVzIHBlciBieXRlIG9uIE9wdGVyb24gcHJvY2Vzc29ycworICAgICAgICAgU2hhdmVkIDQgY3ljbGVzIG9uIGEgUHJlc2NvdHQgKEludGVsIFA0KQorICAgICAgICAgUmVxdWlyZXMgeW91IGFsaWduIHlvdXIgZ2NtX3N0YXRlIG9uIGEgMTYgYnl0ZSBib3VuZGFyeSwgc2VlIGdjbV9tZW1vcnkoKSBmb3IgbW9yZSBpbmZvCisgICAgICAtLSBBZGRlZCBtaXNzaW5nIHByb3RvdHlwZSBmb3IgZjhfdGVzdF9tb2RlKCkKKyAgICAgIC0tIHR3byBmaXhlcyB0byBDQ00gZm9yIGNvcm5lciBjYXNlcyBbTCtub25jZWxlbiA+IDE1XSBhbmQgZml4aW5nIHRoZSBDVFIgcGFkIHRvIGVuY3J5cHQgdGhlIENCQy1NQUMgdGFnCisgICAgICAtLSBGcmFueiBHbGFzbmVyIHBvaW50ZWQgb3V0IHRoZSBBUkdUWVBFPTQgaXMgbm90IGFjdHVhbGx5IHZhbGlkLiAgRml4ZWQuCisgICAgICAtLSBGaXhlZCBidWcgaW4gZjhfc3RhcnQoKSBpZiB5b3VyIGtleSA8IHNhbHRrZXkgdW5zcGVjaWZpZWQgYmVoYXZpb3VyIG9jY3Vycy4gIDotKAorICAgICAgLS0gRG9jdW1lbnRlZCBGOCBtb2RlLiAgWWVhaCwgYmVjYXVzZSB5b3UgcmVhZCB0aGUgbWFudWFsLiAgCisgICAgICAtLSBNaW5vciB1cGRhdGVzIHRvIHRoZSB0ZWNobm90ZXMuCisKKworSnVuZSAxN3RoLCAyMDA2Cit2MS4xMyAtLSBGaXhlZCB0byBmb3J0dW5hX3N0YXJ0KCkgdG8gY2xlYW4gdXAgc3RhdGUgaWYgYW4gZXJyb3Igb2NjdXJzLiAgTm90IHJlYWxseSB1c2VmdWwgYXQgdGhpcyBzdGFnZSAoc2hhMjU2IGNhbid0IGZhaWwpIGJ1dCB1c2VmdWwKKyAgICAgICAgIGlmIEkgZXZlciBtYWtlIGZvcnR1bmEgcGx1Z2dhYmxlCisgICAgICAtLSBNaWtlIE1hcmluIHN1Ym1pdHRlZCBhIHdob2xlIGJ1bmNoIG9mIHBhdGNoZXMgZm9yIGZpeGluZyB1cCB0aGUgbGlicyBvbiB0cmFkaXRpb25hbCBVTklYIHBsYXRmb3Jtcy4gIEdvIEFJWCEgIFRoYW5rcyEKKyAgICAgIC0tIE9uZSBvZiBidWdzIGZvdW5kIGluIHRoZSBtdWx0aSBkZW1vIGhpZ2hsaWdodHMgdGhhdCBhdCBsZWFzdCB3aXRoIGdjYyB5b3UgbmVlZCB0byBwYXNzIGludGVnZXJzIHdpdGggYSBVTCBwcmVmaXggdG8gZW5zdXJlCisgICAgICAgICB0aGV5J3JlIHVuc2lnbmVkIGxvbmcKKyAgICAgIC0tIFVwZGF0ZWQgdGhlIEZQIEVDQyBjb2RlIHRvIHVzZSBhZmZpbmUgcG9pbnRzLiAgSXQncyB0ZWggZmFzdC4KKyAgICAgIC0tIE1hZGUgaXQgc28gbWFueSBmdW5jdGlvbnMgd2hpY2ggcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVyBub3cgYWxzbyBpbmRpY2F0ZSB0aGUgcmVxdWlyZWQgYnVmZmVyIHNpemUsIG5vdGUgdGhhdCBub3QgYWxsIGZ1bmN0aW9ucworICAgICAgICAgZG8gdGhpcyAobW9zdCBkbyB0aG91Z2gpLgorICAgICAgLS0gQWRkZWQgRjggY2hhaW5pbmcgbW9kZS4gIEl0J3Mgc3VwZXIgbmVhdG8uCisKK01heSAyOXRoLCAyMDA2Cit2MS4xMiAtLSBGaXhlZCBPSUQgZW5jb2Rlci9kZWNvZGVyL2xlbmd0aCB0byBwcm9wZXJseSBoYW5kbGUgdGhlIGZpcnN0IHR3byBwYXJ0cyBvZiBhbiBPSUQsIG1hdGNoZXMgMjAwMiBYLjY5MCBub3cuCisgICAgICAtLSBbV2VzbGV5IFNoaWVsZHNdIEFsbG93cyBib3RoIEdNUC9MVE0gYW5kIFRGTSB0byBiZSBkZWZpbmVkIG5vdy4gIAorICAgICAgLS0gW1dlc2xleSBTaGllbGRzXSBHTVAgcGx1Z2dpbiBpcyBjbGVhbmVyIG5vdyBhbmQgZG9lc24ndCB1c2UgZGVwcmVjYXRlZCBzeW1ib2xzLiBZaXBlZQorICAgICAgLS0gQWRkZWQgY291bnRfbHNiX2JpdHMgdG8gZ2V0IHRoZSBudW1iZXIgb2YgbGVhZGluZyBMU0IgemVybyBiaXRzIHRoZXJlIGFyZS4KKyAgICAgIC0tIEZpeGVkIGEgYnVnIGluIHRoZSBJTlRFR0VSIGVuY29kZXJzIGZvciB2YWx1ZXMgb2YgLSgyNTYqKmspLzIKKyAgICAgIC0tIEFkZGVkIEJPT0xFQU4gdHlwZSB0byBBU04uMSB0aGluZ3ktbWEtZG8taGlja3kKKyAgICAgIC0tIFRlc3Rwcm9mIGRvZXNuJ3Qgc3RyaWN0bHkgcmVxdWlyZSBHTVAgLi4uIG9vcHMgW05pbHMgRHVybmVyXQorICAgICAgLS0gQWRkZWQgTFRDX0NBTEwgYW5kIExUQ19FWFBPUlQgbWFjcm9zIGluIHRvbWNyeXB0X2NmZy5oIHRvIHN1cHBvcnQgdmFyaW91cyBjYWxsaW5nIGFuZCBsaW5rZXIgY29udmVudGlvbnMKKyAgICAgICAgIChUaGFua3MgdG8gSm9obiBLaXJrIGZyb20gRGVtb253YXJlKQorICAgICAgLS0gSW4gd2hhdCBoYXMgdG8gYmUgdGhlIGJlc3QgdGhpbmcgc2luY2Ugc2xpY2VkIGJyZWFkIEkgYnJpbmcgeW91IE1FQ0NfRlAgd2hpY2ggaXMgdGhlIGZpeGVkIHBvaW50CisgICAgICAgICBFQ0MgcG9pbnQgbXVsdGlwbGllci4gIEl0J3MgZmFzdCwgaXQncyBzZXh5IGFuZCB3aGF0J3MgbW9yZSBpdCdzIGhlbGxhIGZhc3QgW2RpZCBJIG1lbnRpb24gaXQncyBmYXN0P10KKyAgICAgICAgIFlvdSBjYW4gdHVuZSBpdCBzb21ld2hhdCB3aXRoIEZQX0xVVCAoZGVmYXVsdCB0byA4KSBmb3IgbG9vay11cCB3aWR0aC4KKyAgICAgICAgIFJlYWQgc2VjdGlvbiA4LjIgb2YgdGhlIG1hbnVhbCBmb3IgbW9yZSBpbmZvLgorICAgICAgICAgSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCwgeW91J2xsIGhhdmUgdG8gYnVpbGQgTFRDIHdpdGggaXQgZGVmaW5lZCB0byBnZXQgaXQuICAKKyAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBlY2NfdGVzdC5jIChmcm9tIHRlc3Rwcm9mKSB0byBpbmNsdWRlIHRoZSA1MjEgW25vdCA1MTJdIGJpdCBjdXJ2ZS4gIDotKQorCitBcHJpbCA0dGgsIDIwMDYKK3YxLjExIC0tIFJlbW92ZWQgcHJpbnRmJ3MgZnJvbSBscndfdGVzdCAuLi4gd2hvb3BzCisgICAgICAtLSBscndfcHJvY2VzcyBub3cgY2hlY2tzIHRoZSByZXR1cm4gb2YgdGhlIGNpcGhlciBlY2IgZW5jcnlwdC9kZWNyeXB0IGNhbGxzCisgICAgICAtLSBscndfc3RhcnQgd2FzIG5vdCB1c2luZyBudW1fcm91bmRzIC4uLgorICAgICAgLS0gQWRhbSBNaWxsZXIgcmVwb3J0ZWQgYSBidWcgaW4gdGhlIGZsZXhpIGRlY29kZXIgd2l0aCBlbGVtZW50cyBwYXN0IHRoZSBlbmQgb2YgYSBzZXF1ZW5jZS4gIEZpeGVkLgorICAgICAgLS0gQnJ1Y2UgR3VlbnRlciBzdWdnZXN0ZWQgSSB1c2UgLS10YWc9Q0MgZm9yIGxpYnRvb2wgYnVpbGRzIHdoZXJlIHRoZSBjb21waWxlciBtYXkgdGhpbmsgaXQncyBDKysuICAoSSBhcHBsaWVkIHRoaXMgdG8gTFRNIGFuZCBURk0pCisgICAgICAtLSBPcHRpbWl6ZWQgdGhlIEVDQyBmb3IgVEZNIGEgYml0IGJ5IHJlbW92aW5nIHRoZSB1c2VsZXNzICJpZiIgc3RhdGVtZW50cyAobW9zdCBURk0gZnVuY3Rpb25zIGRvbid0IHJldHVybiBlcnJvciBjb2RlcykKKyAgICAgICAgIEFjdHVhbGx5IHNoYXZlZCBhIGdvb2QgY2h1bmsgb2YgdGltZSBvZmYgYW5kIG1hZGUgdGhlIGNvZGUgc21hbGxlci4gIEJ5IGRlZmF1bHQgd2l0aCBURk0gdGhlIHN0b2NrIExUQyBwb2ludCBhZGQvZGJsIGZ1bmN0aW9ucyAKKyAgICAgICAgIHdpbGwgYmUgdG90YWxseSBvbWl0dGVkIChFQ0MtMjU2IG1ha2Uga2V5IHRpbWVzIG9uIGEgUHJlc2NvdHQgZm9yIG9sZCB2cy4gbmV3IGFyZSAxMS4wM00gdnMuIDkuNTlNIGN5Y2xlcykKKyAgICAgIC0tIGFkZGVkIG1pc3NpbmcgQ1ZTIHRhZ3MgdG8gbHRjX2VjY19tdWxtb2QuYworICAgICAgLS0gY29ycmVjdGVkIHR5cG8gaW4gdG9tY3J5cHRfY2ZnLmggYWJvdXQgd2hhdCB0aGUgZmlsZSBoYXMgYmVlbiBjYWxsZWQgCisgICAgICAtLSBjb3JyZWN0ZWQgbXkgYWRkcmVzcyBpbiB0aGUgdXNlciBtYW51YWwuICBBICJiaXQiIG91dCBvZiBkYXRlLgorICAgICAgLS0gYWRkZWQgbHJ3X2dlbiB0byB0dl9nZW4KKyAgICAgIC0tIGFkZGVkIEdNUCBwbHVnaW4sIG9ubHkgdGVzdGVkIG9uIGEgQU1ENjQgYW5kIHg4Nl8zMiBHZW50b28gTGludXggYm94IHNvIGJlIGF3YXJlCisgICAgICAtLSBtYWRlIHRlc3RtZS5zaCBydW5zIGRpZmYgY2FzZSBpbnNlbnNpdGl2aXR5bHkgW3doYXRldmVyLi4uXSBjdXogR01QIG91dHB1dHMgbG93ZXJjYXNlIHNhdGFuIHRleHQKKyAgICAgIC0tIGFkZGVkIExERkxBR1MgdG8gdGhlIG1ha2VmaWxlIHRvIGFsbG93IGNyb3NzIHBvcnRpbmcgbGlua2luZyBvcHRpb25zCisgICAgICAtLSBhZGRlZCBscndfdGVzdCgpIHRvIHRoZSBoZWFkZXIgZmlsZSAuLi4gd2hvb3BzCisgICAgICAtLSBjaGFuZ2VkIGxpYnRvbWNyeXB0Lm9yZyB0byBsaWJ0b21jcnlwdC5jb20gLi4uLiBtdW1ibGUgbXVtYmxlCisgICAgICAtLSBVcGRhdGVzIHRvIGRldGVjdCBfX1NUUklDVF9BTlNJX18gd2hpY2ggaXMgZGVmaW5lZCBpbiAtLXN0ZD1jOTkgbW9kZXMgKG5vdGUgLWFuc2kgaXMgbm90IHN1cHBvcnRlZCBhcyBpdCBsYWNrcyBsb25nIGxvbmcpIHNvIHlvdSBjYW4KKyAgICAgICAgIGJ1aWxkIExUQyBvdXQgb2YgdGhlIGJveCB3aXRoIGM5OSAobm90ZTogaXQnbGwgYmUgc2xvd2VyIGFzIHRoZXJlIGlzIG5vIGFzbSBpbiB0aGlzIGNhc2UpCisgICAgICAtLSBVcGRhdGVkIHBlbGljYW4uYyBhbmQgYWVzX3RhYi5jIHRvIHVuZGVmIHRhYmxlcyBub3QtcmVxdWlyZWQuICBUaGUgdGFibGVzIGFyZSBzdGF0aWMgc28gYm90aCBBRVMgYW5kIFBlbGljYW4gTUFDIHdvdWxkIGhhdmUgY29waWVzLiAgU2F2ZSBhIGZldyBLQiBpbiB0aGUgZmluYWwgYmluYXJ5LgorICAgICAgLS0gQWRkZWQgTFRDX05PX0ZBU1QgdG8gdGhlIG1ha2VmaWxlLmljYyB0byBjb21wZW5zYXRlIGZvciB0aGUgZmFjdCBJQ0MgdjkgY2FuJ3QgaGFuZGxlIGl0IChQZWxpY2FuIE1BQyBmYWlscyBmb3IgaW5zdGFuY2UpCisKK0ZlYnJ1YXJ5IDExdGgsIDIwMDYKK3YxLjEwIC0tIEZyZWUgZWNiL2NiYy9jdHIvbHJ3IHN0cnVjdHVyZXMgaW4gdGltaW5nIGNvZGUgYnkgY2FsbGluZyB0aGUgImRvbmUiIGZ1bmN0aW9uCisgICAgICAtLSBmaXhlZCBidWcgaW4gbHJ3X3Byb2Nlc3MoKSB3aGljaCB3b3VsZCBhbHdheXMgdXNlIHRoZSBzbG93IHVwZGF0ZSAuLi4KKyAgICAgIC0tIHZhc3RseSBzcGVkIHVwIGdjbV9nZl9tdWx0KCkgd2hlbiBMVENfRkFTVCBpcyBkZWZpbmVkLiAgVGhpcyBzcGVlZHMgdXAgTFJXIGFuZCBHQ00gc3RhdGUgY3JlYXRpb24sIHVzZWZ1bCBmb3Igc2VydmVycyB3aXRoIEdDTQorICAgICAgLS0gUmVtb3ZlZCBOTFMgc2luY2UgdGhlcmUgYXJlIHNvbWUgYXR0YWNrcyBhZ2FpbnN0IGl0LiAgCisgICAgICAtLSBmaXhlZCBtZW1vcnkgbGVhayBpbiByc2FfaW1wb3J0IHJlcG9ydGVkIGJ5IEpvaG4gS3VobnMKKyAgICAgICsrIHJlLXJlbGVhc2VkIGFzIHRoZSByc2EgZml4IHdhcyBpbmNvcnJlY3QgKGJhZCBKb2huIGJhZCAuLi4gaGVoZWhlKSBhbmQgSSBtaXNzZWQgc29tZSBOVUxMcyBpbiB0aGUgc3RhdGljIGRlc2NyaXB0b3IgZW50cnkgZm9yIGNpcGhlcnMgCisKK0phbnVhcnkgMjZ0aCwgMjAwNgordjEuMDkgLS0gQWRkZWQgbWlzc2luZyBkb3h5Z2VuIGNvbW1lbnRzIHRvIHNvbWUgb2YgdGhlIEFTTi4xIHJvdXRpbmVzCisgICAgICAtLSBBZGRlZCAiZWFzeSBidXR0b24iIGRlZmluZSBMVENfRUFTWSBhbmQgTFRDIHdpbGwgYnVpbGQgd2l0aCBhIHN1YnNldCBvZiBhbGwgdGhlIGFsZ29zLiAgUmVkdWNlcyBidWlsZCB0aW1lcyBmb3IgdHlwaWNhbAorICAgICAgICAgY29uZmlndXJhdGlvbnMuICBUdW5hYmxlIFtzZWUgdG9tY3J5cHRfY3VzdG9tLmhdCisgICAgICAtLSBBZGRlZCBzb21lIGVycm9yIGRldGVjdGlvbiB0byByZWdfYWxncygpIG9mIHRoZSB0ZXN0cHJvZi5hIGxpYnJhcnkgdG8gZGV0ZWN0IHdoZW4gdGhlIFBSTkcgaXMgbm90IHNldHVwIGNvcnJlY3RseSAodG9vayBtZSAxMCBtaW5zIHRvIGZpZ3VyZSBvdXQsIFBJVEEhKQorICAgICAgLS0gU2ltaWxhciBmaXhlcyB0byB0aW1pbmcgZGVtbyAoTUQ1IG5vdCBkZWZpbmVkIHdoZW4gRUFTWSBpcyBkZWZpbmVkKQorICAgICAgLS0gQWRkZWQgdGhlIE5MUyBlbmMrbWFjIHN0cmVhbSBjaXBoZXIgZnJvbSBRVUFMQ09NTSwgZGlzYWJsZWQgZm9yIHRoaXMgcmVsZWFzZSwgd2FpdGluZyBvbiB0ZXN0IHZlY3RvcnMKKyAgICAgIC0tIEZpbmFsbHkgYWRkZWQgYW4gYXV0by11cGRhdGUgc2NyaXB0IGZvciB0aGUgbWFrZWZpbGVzLiAgU28gd2hlbiBJIGFkZCBuZXcgZmlsZXMvZGlycyBpdCBjYW4gYXV0b21hdGljYWxseSBmaXggdXAgdGhlIG1ha2VmaWxlcyBbYWxsIGZvdXIgb2YgdGhlbS4uLl0KKyAgICAgIC0tIEFkZGVkIExSVyB0byB0aGUgbGlzdCBvZiBjaXBoZXIgbW9kZXMgc3VwcG9ydGVkCisgICAgICAtLSBjbGVhbmVkIHVwIGNpcGhlcnMgZGVmaW5pdGlvbnMgdG8gcmVtb3ZlIGNiYy9jZmIvb2ZiL2N0ci9ldGMgZnJvbSB0aGUgbmFtZXNwYWNlIHdoZW4gbm90IHVzZWQuCisKK05vdmVtYmVyIDI0dGgsIDIwMDUKK3YxLjA4IC0tIEFkZGVkIFNFVCBhbmQgU0VUIE9GIHN1cHBvcnQgdG8gdGhlIEFTTi4xIHNpZGUKKyAgICAgIC0tIEZpeGVkIHVwIFggbWFjcm9zLCBhZGRlZCBRU09SVCB0byB0aGUgbWl4IFt0aGFua3MgU0VUL1NFVE9GXQorICAgICAgLS0gQWRkZWQgWE1FTUNNUCB0byB0aGUgbGlzdCBvZiBYIG1hY3JvcworICAgICAgLS0gSW4gZGVyX2RlY29kZV9zZXF1ZW5jZSgpIHRoZSBTSE9SVF9JTlRFR0VSIHR5cGUgd2FzIG5vdCBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBbb2RkbHkgZW5vdWdoIGl0IHdvcmtlZCBqdXN0IGVub3VnaCB0byBtYWtlIFJTQSB3b3JrIC4uLiBnbyBmaWd1cmUhXQorICAgICAgLS0gRml4ZWQgYnVnIGluIG1hdGggZGVzY3JpcHRvcnMgd2hlcmUgaWYgeW91IGhhZG4ndCBkZWZpbmVkIE1FQ0MgKEVDQyBzdXBwb3J0KSB5b3Ugd291bGQgZ2V0IGxpbmtlciBlcnJvcnMKKyAgICAgIC0tIEFkZGVkIFJTQSBhY2NlbGVyYXRvcnMgdG8gdGhlIG1hdGggZGVzY3JpcHRvcnMgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byBub3QgaW5jbHVkZSB0aGUgc3RvY2sgcm91dGluZXMgaWYgeW91IHN1cHBseSB5b3VyIG93bi4KKyAgICAgIC0tIGRzYV9kZWNyeXB0X2tleSgpIHdhcyBlcnJvbmVvdXNseSBkZXBlbmRlbnQgb24gTUVDQyBub3QgTURTQSAuLi4gd2hvb3BzCisgICAgICAtLSBNb3ZlZCBEU0Egc2l6ZSBsaW1pdHMgdG8gdG9tY3J5cHRfcGsuaCBzbyB0aGV5J3JlIGRlZmluZWQgd2l0aCBMVENfTk9fUEsrTURTQQorICAgICAgLS0gY2xlYW5lZCB1cCB0b21jcnlwdF9jdXN0b20uaCB0byBtYWtlIGN1c3RvbWl6YWJsZSBQSyBlYXNpZXIgKGFuZCBhbHNvIGNsZWFuZWQgdXAgdGhlIGVycm9yIHRyYXBzIHNvIHRoZXkncmUgY29ycmVjdGx5IHJlcG9ydGVkKQorCitOb3ZlbWJlciAxOHRoLCAyMDA1Cit2MS4wNyAtLSBDcmFpZyBTY2hsZW50ZXIgcG9pbnRlZCBvdXQgdGhlICJlbmNyeXB0IiBkZW1vIGRvZXNuJ3QgY2FsbCBjdHJfc3RhcnQoKSBjb3JyZWN0bHkuICBUaGF0J3MgYmVjYXVzZSBhcyBvZiBhIGZldyByZWxlYXNlcyBhZ28KKyAgICAgICAgIEkgYWRkZWQgc3VwcG9ydCB0byBzZXQgdGhlIG1vZGUgb2YgdGhlIGNvdW50ZXIgYXQgaW5pdCB0aW1lCisgICAgICAtLSBGaXhlZCBzb21lICJ0ZXN0cHJvZiIgbWFrZSBpc3N1ZXMKKyAgICAgIC0tIEFkZGVkIFJTQSBrZXlnZW4gdG8gdGhlIG1hdGggZGVzY3JpcHRvcnMKKyAgICAgIC0tIEZpeGVkIGluc3RhbGxfdGVzdCB0YXJnZXQgLi4uIG9vcHMKKyAgICAgIC0tIG1hZGUgdGhlICJyYW5saWIiIHByb2dyYW0gcmVuYW1hYmxlIHVzZWZ1bCBmb3IgY3Jvc3MtY29tcGlsaW5nCisgICAgICAtLSBNYWRlIHRoZSBjaXBoZXIgYWNjZWxlcmF0b3JzIHJldHVybiBlcnJvciBjb2Rlcy4gIDotKQorICAgICAgLS0gTWFkZSBDQ00gYWNjZXB0IGEgcHJlLXNjaGVkdWxlZCBrZXkgdG8gc3BlZWQgaXQgdXAgaWYgeW91IHVzZSB0aGUgc2FtZSBrZXkgZm9yIG11bHRpcGxlIHBhY2tldHMKKyAgICAgIC0tIEFkZGVkICJLYXRqYSIgcHVibGljIGtleSBjcnlwdG8uICBJdCdzIGJhc2VkIG9uIHRoZSByZWNlbnQgTiA9IHBeMnEgd29yayBieSBLYXRqYS4gIEkgYWRkZWQgT0FFUCBwYWRkaW5nCisgICAgICAgICB0byBpdC4gIE5vdGUgdGhpcyBjb2RlIGhhcyBiZWVuIGRpc2FibGVkIG5vdCBiZWNhdXNlIGl0IGRvZXNuJ3Qgd29yayBidXQgYmVjYXVzZSBpdCBoYXNuJ3QgYmVlbiB0aG9yb3VnaGx5CisgICAgICAgICBhbmFseXplZC4gICBJdCBkb2VzIGNhcnJ5IHNvbWUgYWR2YW50YWdlcyBvdmVyIFJTQSAoc2xpZ2h0bHkgc21hbGxlciBwdWJsaWMga2V5LCBmYXN0ZXIgZGVjcnlwdCkgYnV0IGFsc28KKyAgICAgICAgIHNvbWUgYW5ub3lpbmcgInNldHVwIiBpc3N1ZXMgbGlrZSB0aGUgcHJpbWVzIGFyZSBzbWFsbGVyIHdoaWNoIG1ha2VzIEVDTSBmYWN0b3JpbmcgbW9yZSBwbGF1c2libGUuCisgICAgICAtLSBNYWRlIG1ha2VmaWxlIGFjY2VwdCBhIE5PRE9DUyBmbGFnIHRvIGRpc2FibGUgdGhlIHJlcXVpcmVtZW50IG9mIHRldGV4IHRvIGluc3RhbGwgTFRDIGZvciB5b3Ugbm8gdGV0ZXggcGVvcGxlLi4uIGFsbCAzIG9mIHlhICA6LSkKKyAgICAgIC0tIENsZWFuZWQgdXAgcnNhX2V4cG9ydCgpIHNpbmNlICJ6ZXJvIiB3YXMgaGFuZGxlZCB3aXRoIGEgU0hPUlRfSU5URUdFUgorICAgICAgLS0gQ2xlYW5lZCB1cCB0aGUgTElCVEVTVF9TIGRlZmluaXRpb25zIGluIGJvdGggR05VIG1ha2VmaWxlcy4gIEEgZmV3IG1pbm9yIHRvdWNodXBzIGFzIHdlbGwuCisgICAgICAtLSBNYWRlIHRoZSBjaXBoZXIgZWNiIGVuY3J5cHQvZGVjcnlwdCByZXR1cm4gYW4gaW50IGFzIHdlbGwsIGNoYW5nZWQgQUxMIGRlcGVuZGVudCBjb2RlIHRvIGNoZWNrIGZvciB0aGlzLiAgCisgICAgICAtLSBkZXJfZGVjb2RlX2Nob2ljZSgpIHdvdWxkIGZhaWwgdG8gbWFyayBhIE5VTEwgYXMgInVzZWQiIHdoZW4gZGVjb2RpbmcuICBGaXhlZAorICAgICAgLS0gZWNjX2RlY3J5cHRfa2V5KCkgbm93IHVzZXMgZmluZF9oYXNoX29pZCgpIHRvIGNsZWFuIHVwIHRoZSBjb2RlIDstKQorICAgICAgLS0gQWRkZWQgbXBfbmVnKCkgdG8gdGhlIG1hdGggZGVzY3JpcHRvcnMuCisgICAgICAtLSBTd2FwcGVkIGFyZ3VtZW50cyBmb3IgdGhlIHBrY3NfMV9tZ2YxKCkgZnVuY3Rpb24gc28gdGhlIGhhc2hfaWR4IGlzIHRoZSBmaXJzdCBwYXJhbSAodG8gYmUgbW9yZSBjb25zaXN0ZW50KQorICAgICAgLS0gTWFkZSB0aGUgbWF0aCBkZXNjcmlwdG9ycyBidWlsZGFibGUgd2hlbiBSU0EgaGFzIGJlZW4gdW5kZWZpbmVkCisgICAgICAtLSBFQ0MgdGltaW5nIGRlbW8gbm93IGNhcGFibGUgb2YgZGV0ZWN0aW5nIHdoaWNoIGN1cnZlcyBoYXZlIGJlZW4gZGVmaW5lZAorICAgICAgLS0gUmVmYWN0b3JlZCB0aGUgRUNDIGNvZGUgc28gaXQncyBlYXNpZXIgdG8gbWFpbnRhaW4uICAobm90ZTogdGhlIGZvcm0gb2YgdGhpcyBjb2RlIGhhc24ndCByZWFsbHkgY2hhbmdlZCBzaW5jZSBJIGZpcnN0IGFkZGVkIEVDQyAuLi4gOi0vKQorICAgICAgLS0gVXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiB3LnIudC4gRUNDIGFuZCB0aGUgYWNjZWxlcmF0b3JzIHRvIGtlZXAgaXQgY3VycmVudAorICAgICAgLS0gRml4ZWQgYnVnIGluIGx0Y19pbml0X211bHRpKCkgd2hpY2ggd291bGQgZmFpbCB0byBmcmVlIGFsbCBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9yLgorICAgICAgLS0gRml4ZWQgYnVnIGluIGVjY19kZWNyeXB0X2tleSgpIHdoaWNoIGNvdWxkIHBvc3NpYmx5IGxlYWQgdG8gb3ZlcmZsb3dzIChpZiBNQVhCTE9DS1NJWkUgPiBFQ0NfQlVGX1NJWkUgYW5kIHlvdSBoYXZlIGEgaGFzaCB0aGF0IGVtaXRzIE1BWEJMT0NLU0laRSBieXRlcykKKyAgICAgIC0tIEFkZGVkIGVuY3J5cHQvZGVjcnlwdCB0byB0aGUgRFNBIHNpZGUgKGJhc2ljYWxseSBESCB3aXRoIERTQSBwYXJhbWV0ZXJzKQorICAgICAgLS0gVXBkYXRlZCBtYWtlZmlsZXMgdG8gcmVtb3ZlIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBESCBvYmplY3QgZmlsZXMgYW5kIHRoZSBlY2Nfc3lzLm8gY3JhcCAuLi4gY2xlYW4gY29kZSBhaGVhZCEKKyAgICAgIC0tIGVjY19pbXBvcnQoKSBub3cgY2hlY2tzIGlmIHRoZSBwb2ludCBpdCByZWFkcyBpbiBsaWVzIG9uIHRoZSBjdXJ2ZSAodG8gcHJldmVudCBkZWdlbmVyYXRpdmUgcG9pbnRzIGZyb20gYmVpbmcgdXNlZCkKKyAgICAgIC0tIEVDQyBjb2RlIG5vdyBBTFdBWVMgdXNlcyB0aGUgYWNjZWxlcmF0b3IgaW50ZXJmYWNlLiAgVGhpcyBhbGxvd3MgcGVvcGxlIHdobyB1c2UgdGhlIGFjY2VsZXJhdG9ycyB0byBub3QgaGF2ZSB0aGUgc3RvY2sKKyAgICAgICAgIEVDQyBwb2ludCBhZGQvZGJsL211bCBjb2RlIGxpbmtlZCBpbi4gIFllYWggc3BhY2Ugc2F2aW5ncyEgUmFoIFJhaCBSYWguCisgICAgICAtLSBBZGRlZCBMVENfTVVURVhfKiBzdXBwb3J0IHRvIFlhcnJvdyBhbmQgRm9ydHVuYSBhbGxvd2luZyB5b3UgdG8gdXNlIHJlc3BlY3RpdmUgcHJuZ19zdGF0ZSBhcyBhIGdsb2JhbCBQUk5HIHN0YXRlIFtlLmcuIHRocmVhZC1zYWZlXSBpZiB5b3UgZGVmaW5lIG9uZSBvZiB0aGUgTFRDXyogZGVmaW5lcyBhdAorICAgICAgICAgYnVpbGQgdGltZSAoZS5nLiBMVENfUFRIUkVBRCA9PSBwdGhyZWFkcykKKyAgICAgIC0tIEFkZGVkIFBQQzMyIHN1cHBvcnQgdG8gdGhlIHJvdGF0ZSBtYWNyb3MgKHRlc3RlZCBvbiBhbiBJQk0gUFBDIDQwNSkgYW5kIExUQ19GQVNUIG1hY3JvcyAoaXQgYWludCBmYXN0IGJ1dCBpdCdzIGZhc3RlciB0aGFuIHN0b2NrKQorICAgICAgLS0gQWRkZWQgbHRjX21wIGNoZWNrcyBpbiBhbGwgKl9tYWtlX2tleSgpIGFuZCAqX2ltcG9ydCgpIHdoaWNoIHdpbGwgaGVscCBjYXRjaCBuZXdicyB3aG8gZG9uJ3QgcmVnaXN0ZXIgdGhlaXIgYmlnbnVtIGZpcnN0IDotKQorICAgICAgLS0gdGhlIFVUQ1RJTUUgdHlwZSB3YXMgbWlzc2luZyBmcm9tIGRlcl9sZW5ndGhfc2VxdWVuY2UoKSBbb29wcywgb2ggbGlrZSB5b3UndmUgbmV2ZXIgZG9uZSB0aGF0XQorICAgICAgLS0gdGhlIG1haW4gbWFrZWZpbGUgYWxsb3dzIHlvdSB0byByZW5hbWUgdGhlIG1ha2UgY29tbWFuZCBbZS5nLiBNQUtFPWdtYWtlIGdtYWtlIGluc3RhbGxdIHNvIHlvdSBjYW4gYnVpbGQgTFRDIG9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgZGVmYXVsdCBtYWtlIGNvbW1hbmQgc3Vja3MgW2UuZy4gQlNEXQorICAgICAgLS0gQWRkZWQgREVSIGZsZXhpIGRlY29kZXIgd2hpY2ggYWxsb3dzIHRoZSBkZWNvZGluZyBvZiBhcmJpdHJhcnkgREVSIGVuY29kZWQgcGFja2V0cyB3aXRob3V0IGtub3dpbmcKKyAgICAgICAgIHRoZWlyIHN0cnVjdHVyZSBpbiBhZHZhbmNlICh0aGFua3MgdG8gTVNWQyBmb3IgZmluZGluZyAzIGJ1Z3MgaW4gaXQganVzdCBwcmlvciB0byByZWxlYXNlISAuLi4gZG9uJ3QgYXNrKQorCitBdWd1c3QgMXN0LCAyMDA1Cit2MS4wNiAtLSBGaXhlZCByYW5kX3ByaW1lKCkgdG8gYWNjZXB0IG5lZ2F0aXZlIGlucHV0cyBhcyBhIHNpZ25hbCBmb3IgQkJTIHByaW1lcy4gW0ZyZWRyaWsgT2xzc29uXQorICAgICAgLS0gQWRkZWQgZm91cnRoIEFSR0NISyB0eXBlIHdoaWNoIG91dHB1dHMgdG8gc3RkZXJyIGFuZCBjb250aW51ZXMuICBVc2VmdWwgaWYgeW91IHRyYXAgc2lnc2Vndi4gICBbVmFsaWVudCBHb3VnaF0KKyAgICAgIC0tIFJlbW92ZWQgdGhlIERIIGNvZGUgZnJvbSB0aGUgdHJlZQorICAgICAgLS0gTWFkZSB0aGUgRUNDIGNvZGUgZnVsbHkgcHVibGljICh5b3UgY2FuIGFjY2VzcyBlY2NfbXVsbW9kIGRpcmVjdGx5IG5vdykgdXNlZnVsIGZvciBkZWJ1Z2luZworICAgICAgLS0gQWRkZWQgZWNjIHRlc3QgdG8gdHZfZ2VuCisgICAgICAtLSBBZGRlZCBobWFjIGNhbGxiYWNrIHRvIGhhc2ggZGVzY3JpcHRvcnMuCisgICAgICAtLSBGaXhlZCB0d28gZG94eSBjb21tZW50IGVycm9ycyBpbiB0aGUgVVRDVElNRSBmdW5jdGlvbnMKKyAgICAgIC0tIHJzYV9pbXBvcnQoKSBjYW4gbm93IHJlYWQgT3BlblNTTCBmb3JtYXQgREVSIHB1YmxpYyBrZXlzIGFzIHdlbGwgYXMgdGhlIFBLQ1MgIzEgUlNBUHVibGljS2V5IGZvcm1hdC4KKyAgICAgICAgIE5vdGUgdGhhdCByc2FfZXhwb3J0KCkgICoqT05MWSoqIHdyaXRlcyBQS0NTICMxIGZvcm1hdHMKKyAgICAgIC0tIENoYW5nZWQgTUlOL01BWCB0byBvbmx5IGRlZmluZSBpZiBub3QgYWxyZWFkeSBwcmVzZW50LiAgLS0gS2lyayBKIGZyb20gRGVtb253YXJlIC4uLiAKKyAgICAgIC0tIFBvcnRlZCB0dl9nZW4gdG8gbmV3IGZyYW1ld29yayAoYW5kIHllcywgSSBtYWRlIGVjYyB2ZWN0b3JzIEJFRk9SRSBjaGFuZ2luZyB0aGUgQVBJIGFuZCBZRVMgdGhleSBtYXRjaCBub3cgOi0pKQorICAgICAgLS0gcG9ydGVkIHRlc3Rpbmcgc2NyaXB0cyB0byBzdXBwb3J0IHBsdWdnYWJsZSBtYXRoLiAgeWlwZWUhCisgICAgICAtLSBXcm90ZSBhIFRGTSBkZXNjcmlwdG9yIC4uLiB5aXBlZQorICAgICAgLS0gQ2xlYW5lZCB1cCBMVENfRkFTVCBpbiBDQkMgbW9kZSBhIGJpdCAKKyAgICAgIC0tIE1lcmdlZCBpbiBwYXRjaGVzIGZyb20gTWljaGFlbCBCcm93biBmb3IgdGhlIHNwYXJjL3NwYXJjNjQgdGFyZ2V0cworICAgICAgLS0gQWRkZWQgZmluZF9oYXNoX29pZCgpIHRvIHNlYXJjaCBmb3IgYSBoYXNoIGJ5IGl0cyBPSUQKKyAgICAgIC0tIENsZWFuZWQgdXAgYSBmZXcgc3RyYXkgQ0xFQU5fU1RBQ0tzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBMVENfQ0xFQU5fU1RBQ0sKKyAgICAgIC0tIEFkZGVkIHRpbWluZyByZXNpc3RhbnQgRUNDLCBlbmFibGUgYnkgZGVmaW5pbmcgTFRDX0VDQ19USU1JTkdfUkVTSVNUQU5UIHRoZW4gdXNlIEVDQyBBUEkgYXMgbm9ybWFsIAorICAgICAgLS0gVXBkYXRlZCB0aGUgRUNDIGRvY3VtZW50YXRpb24gYXMgaXQgd2FzIGEgYml0IG91dCBvZiBkYXRlCisKK0p1bmUgMjd0aCwgMjAwNQordjEuMDUKKyAgICAgIC0tIEFkZGVkIFRlY2hub3RlICM2IHdoaWNoIGNvdmVycyB0aGUgY3VycmVudCBQSyBjb21wbGlhbmNlLiAgCisgICAgICAtLSBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgaW4gT0FFUCBkZWNvZGVyCisgICAgICAtLSBBZGRlZCBDSE9JQ0UgdG8gdGhlIGxpc3Qgb2YgQVNOLjEgdHlwZXMKKyAgICAgIC0tIEFkZGVkIFVUQ1RJTUUgdG8gdGhlIGxpc3Qgb2YgQVNOLjEgdHlwZXMKKyAgICAgIC0tIEFkZGVkIE1VVEVYIGxvY2tzIGFyb3VuZCBkZXNjcmlwdG9yIHRhYmxlIGZ1bmN0aW9ucyBbYnV0IG5vdCBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIGRlcGVuZGVudCBvbiB0aGVtXQorICAgICAgICAgQWxsIGZ1bmN0aW9ucyBjYWxsICpfaXNfdmFsaWQoKSBiZWZvcmUgdXNpbmcgYSBkZXNjcmlwdG9yIGluZGV4IHdoaWNoIG1lYW5zIHRoZSByZXNwZWN0aXZlIHRhYmxlIG11c3QgYmUgdW5sb2NrZWQgYmVmb3JlIAorICAgICAgICAgaXQgY2FuIGJlIGFjY2Vzc2VkLiAgSG93ZXZlciwgZHVyaW5nIHRoZSBvcGVyYXRpb24gW2UuZy4gQ0NNXSBpZiB0aGUgZGVzY3JpcHRvciBoYXMgYmVlbiBhbHRlcmVkIHRoZSByZXN1bHRzIHdpbGwgYmUgCisgICAgICAgICB1bmRlZmluZWQuICAKKyAgICAgIC0tIE1pbm9yIHVwZGF0ZXMgdG8gdGhlIG1hbnVhbCB0byByZWZsZWN0IHJlY2VudCBjaGFuZ2VzCisgICAgICAtLSBBZGRlZCBhIGNhdGNoIHRvIGZvciBhbiBlcnJvciB0aGF0IHNob3VsZCBuZXZlciBjb21lIHVwIGluIHJzYV9leHB0bW9kKCkuICBKdXN0IGJlaW5nIHRob3JvdWdoLgorCitKdW5lIDE1dGgsIDIwMDUKK3YxLjA0CisgICAgICAtLSBGaXhlZCBvZmYgYnkgb25lIFtiaXRdIGVycm9yIGluIGRzYV9tYWtlX2tleSgpIGl0IHdhcyB0b28gaGlnaCBieSBvbmUgYml0IFtub3QgYSBzZWN1cml0eSBwcm9ibGVtIGp1c3QgaW5jb25zaXN0ZW50XQorICAgICAgLS0gRUNDLTIyNCBjdXJ2ZSB3YXMgd3JvbmcgW2l0IHdhcyBhbiBvayBjdXJ2ZSBqdXN0IG5vdCBOSVNULCBzbyBubyBzZWN1cml0eSBmbGF3IGp1c3QgaW50ZXJvcGVyYWJpbGl0eV0uCisgICAgICAtLSBSZW1vdmVkIHBvaW50IGNvbXByZXNzaW9uIHNpbmNlIGl0IHNsb3dzIGRvd24gRUNDIG9wcyB0byBzYXZlIGEgbWVhc2x5IGNvdXBsZSBieXRlcy4KKyAgICAgICAgIFRoaXMgbWFrZXMgdGhlIGVjYyBleHBvcnQgZm9ybWF0IGluY29tcGF0aWJsZSB3aXRoIDEuMDMgW2l0IHNob3VsZG4ndCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZV0KKyAgICAgIC0tIFJlbW92ZWQgRUNDLTE2MCBmcm9tIHRpbWluZyBhbmQgYWRkZWQgdGhlIG90aGVyIGN1cnZlcworCitKdW5lIDl0aCwgMjAwNQordjEuMDMKKyAgICAgIC0tIFVzZXJzIG1heSB3YW50IHRvIG5vdGUgdGhhdCBvbiBhIFA0L0dDQzMuNCBwbGF0Zm9ybSAiLWZuby1yZWdtb3ZlIiBncmVhdGx5IGFjY2VsZXJhdGVzIHRoZSBjaXBoZXJzL2hhc2hlcy4KKyAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAtLSBNYWRlIGl0IGluc3RhbGwgdGhlIHRlc3RpbmcgbGlicmFyeSBpbiB0aGUgaWNjL3N0YXRpYyBtYWtlZmlsZXMKKyAgICAgIC0tIEZvdW5kIGJ1ZyBpbiBjY21fbWVtb3J5LmMgd2hpY2ggd291bGQgZmFpbCB0byBjb21waWxlIHdoZW4gTFRDX0NMRUFOX1NUQUNLIHdhcyBlbmFibGVkCisgICAgICAtLSBTaW1vbiBKb2huc29uIHByb3Bvc2VkIEkgZG8gYSBmdWxseSBhdXRvbWF0ZWQgdGVzdCBzdWl0ZS4gIEhlbmNlICJ0ZXN0bWUuc2giIHdhcyBib3JuCisgICAgICAtLSBBZGRlZCBMVENfTk9fVEVTVCB3aGljaCBmb3JjZXMgdGVzdCB2ZWN0b3JzIG9mZiAocmVnYXJkbGVzcyBvZiB3aGF0IHRvbWNyeXB0X2N1c3RvbS5oIGhhcykKKyAgICAgIC0tIEFkZGVkIExUQ19OT19UQUJMRVMgd2hpY2ggZGlzYWJsZXMgbGFyZ2UgdGFibGVzICh3aGVyZSBwb3NzaWJsZSwgcmVnYXJkbGVzcyBvZiB3aGF0IHRvbWNyeXB0X2N1c3RvbS5oIGhhcykKKyAgICAgIC0tIE5ldyB0ZXN0IHNjcmlwdCBmb3VuZCBhIGJ1ZyBpbiB0d29maXNoLmMgd2hlbiBUQUJMRVMgd2FzIGRpc2FibGVkLiAgWWVhaCB0ZXN0aW5nIQorICAgICAgLS0gQWRkZWQgYSBMVENfRkFTVCBzcGVjaWZpYyB0ZXN0IHRvIHRoZSB0ZXN0aW5nIHNvZnR3YXJlLgorICAgICAgLS0gVXBkYXRlZCB0ZXN0IGRyaXZlciB0byBhY3R1YWxseSBoYWx0IG9uIGVycm9ycyBhbmQganVzdCBwcmludCB0aGVtIG91dCAodXNlZnVsIGZvciBzYXkuLi4gYXV0b21hdGVkIHRlc3RpbmcuLi4pCisgICAgICAtLSBBZGRlZCBib3VuZHMgY2hlY2tpbmcgdG8gUGVsaWNhbiBNQUMKKyAgICAgIC0tIEFkZGVkIEJJVCBhbmQgT0NURVQgU1RSSU5HIHRvIHRoZSBBU04uMSBzaWRlIG9mIHRoaW5ncy4gIAorICAgICAgLS0gUGVra2EgUmlpa29uZW4gcG9pbnRlZCBvdXQgdGhhdCBteSBjdHJfc3RhcnQoKSBmdW5jdGlvbiBzaG91bGQgYWNjZXB0IHRoZSBjb3VudGVyIG1vZGUuIAorICAgICAgLS0gQ2xlYW5lZCB1cCB3YXJuaW5ncyBpbiB0ZXN0cHJvZgorICAgICAgLS0gUmVtb3ZlZCByZWR1bmRhbnQgbXUgYW5kIHBvaW50IG1hcHBpbmcgaW4gZWNjX3ZlcmlmeV9oYXNoKCkgc28gaXQgc2hvdWxkIGJlIGEgYml0IGZhc3RlciBub3cKKyAgICAgIC0tIFBla2thIHBvaW50ZWQgb3V0IHRoYXQgdGhlIEFFUyBrZXkgc3RydWN0dXJlIHdhcyB1c2luZyAzMiBieXRlcyBtb3JlIHRoYW4gaXQgb3VnaHQgdG8uCisgICAgICAtLSBBZGRlZCBxdWljayBkZWZpbmVzIHRvIHJlbW92ZSBlbnRpcmUgY2xhc3NlcyBvZiBhbGdvcml0aG1zLiAgVGhpcyBtYWtlcyBpdCBlYXNpZXIgaWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCBqdXN0IAorICAgICAgICAgb25lIGFsZ29yaXRobSAoc2F5IEFFUyBvciBTSEEtMjU2KS4gIERlZmluZXMgYXJlIExUQ19OT19DSVBIRVJTLCBMVENfTk9fTU9ERVMsIExUQ19OT19IQVNIRVMsIExUQ19OT19NQUNTLAorICAgICAgICAgTFRDX05PX1BSTkdTLCBMVENfTk9fUEssIExUQ19OT19QS0NTCisgICAgICAtLSBBcyBwYXJ0IG9mIHRoZSBtb3ZlIGZvciBFQ0MgdG8gWDkuNjIgSSd2ZSBjaGFuZ2VkIHRoZSBzaWduYXR1cmUgYWxnb3JpdGhtIHRvIEVDIERTQS4gIE5vIEFQSSBjaGFuZ2VzLgorICAgICAgLS0gUGVra2EgaGVscGVkIG1lIGNsZWFuIHVwIHRoZSBQS0NTICMxIHYyLjEgW09BRVAvUFNTXSBjb2RlCisgICAgICAtLSBXcm90ZSBuZXcgREVSIFNFUVVFTkNFIGNvZGVyL2RlY29kZXIKKyAgICAgIC0tIFJTQSwgRFNBIGFuZCBFQ0RTQSBub3cgdXNlIHRoZSBERVIgU0VRVUVOQ0UgY29kZSAoc2F2ZXMgYSBsb3Qgb2YgY29kZSEpCisgICAgICAtLSBEU0Egb3V0cHV0IGlzIG5vdyBhIERFUiBTRVFVRU5DRSAoc28gbm90IGNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyByZWxlYXNlcykuICAKKyAgICAgIC0tIEFkZGVkIFRlY2hub3RlICM1IHdoaWNoIHNob3dzIGhvdyB0byBidWlsZCBMVEMgb24gYW4gQU1ENjQgdG8gaGF2ZSBhIHZhcmlldHkgb2YgYWxnb3JpdGhtcyBpbiBvbmx5IH44MEtCIG9mIGNvZGUuCisgICAgICAtLSBDaGFuZ2VkIHRlbXAgdmFyaWFibGUgaW4gTE9BRC9TVE9SRSBtYWNyb3MgdG8gInVsb25nMzIiIGZvciAzMi1iaXQgb3BzLiAgTWFrZXMgaXQgc2FmZXIgb24gQmlnIGVuZGlhbiBwbGF0Zm9ybXMKKyAgICAgIC0tIEFkZGVkIElOU1RBTExfR1JPVVAgYW5kIElOU1RBTExfVVNFUiB3aGljaCB5b3UgY2FuIHNwZWNpZnkgb24gdGhlIGJ1aWxkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IFVTRVIvR1JPVVAgdGhlIGxpYnJhcnkgCisgICAgICAgICBpcyB0byBiZSBpbnN0YWxsZWQgYXMKKyAgICAgIC0tIFJlbW92ZWQgInRlc3Rwcm9mIiBmcm9tIHRoZSBkZWZhdWx0IGJ1aWxkLiAgCisgICAgICAtLSBBZGRlZCBJQTUsIE5VTEwgYW5kIE9iamVjdCBJZGVudGlmaWVyIHRvIHRoZSBsaXN0IG9mIEFTTi4xIERFUiBzdXBwb3J0ZWQgdHlwZXMKKyAgICAgIC0tIFRoZSAibm9fb29wcyIgdGFyZ2V0IChwYXJ0IG9mIHppcHVwKSBub3cgc2NhbnMgZm9yIG5vbi1jdnMgZmlsZXMuICBUaGlzIGhlbHBzIHByZXZlbnQgdGVtcC9zY3JhdGNoIGZpbGVzIGZyb20gYXBwZWFyaW5nIGluIHJlbGVhc2VzIDstKQorICAgICAgLS0gQWRkZWQgREVScyBmb3IgbWlzc2luZyBoYXNoZXMsIGJ1dCBqdXN0IHRoZSBPSUQgbm90IHRoZSBQS0NTICMxIHYxLjUgYWRkaXRpb25zLiAKKyAgICAgIC0tIFJlbW92ZWQgUEtDUyAjMSB2MS41IGZyb20gdGhlIHRyZWUgc2luY2UgaXQncyB0YWtpbmcgdXAgc3BhY2UgYW5kIHlvdSBvdWdodCB0byB1c2UgdjIuMSBhbnl3YXlzCisgICAgICAtLSBLZXZpbiBLZW5ueSBwb2ludGVkIG91dCBhIGZldyBzdHJheSAvLyBjb21tZW50cworICAgICAgLS0gSU5URUdFUiBjb2RlIHByb3Blcmx5IHN1cHBvcnRzIG5lZ2F0aXZlcyBhbmQgemVybyBwYWRkaW5nIFtQZWtrYSFdCisgICAgICAtLSBTb3J0ZWQgYXNuMS9kZXIvIGRpcmVjdG9yeSAuLi4gbGVzcyBvZiBhIG1lc3Mgbm93IDstKQorICAgICAgLS0gQWRkZWQgUFJJTlRBQkxFIFNUUklORyB0eXBlCisgICAgICAtLSBSZW1vdmVkIEVDQy0xNjAgYXMgaXQgd2Fzbid0IGEgc3RhbmRhcmQgY3VydmUKKyAgICAgIC0tIE1hZGUgZWNjX3NoYXJlZF9zZWNyZXQoKSBBTlNJIFg5LjYzIGNvbXBsaWFudAorICAgICAgLS0gQ2hhbmdlZCAicHJpbnRmIiB0byAiZnByaW50ZihzdGRlcnIsICIgaW4gdGhlIHRlc3RiZW5jaC4uLiA7LSkKKyAgICAgIC0tIE9wdGltaXplZCB0aGUgR0NNIHRhYmxlIGNyZWF0aW9uLiAgT24gMUtCIHBhY2tldHMgW3dpdGgga2V5IHN3aXRjaGluZ10gdGhlIG5ldyBHQ00gaXMgMTIuN3ggZmFzdGVyIHRoYW4gYmVmb3JlLgorICAgICAgLS0gQ2hhbmdlZCBPSUQgcmVwcmVzZW50YXRpb24gZm9yIGhhc2hlcyB0byBiZSBqdXN0IGEgbGlzdCBvZiB1bnNpZ25lZCBsb25ncyAoc28geW91IGNhbiBjb21wYXJlIGFnYWluc3QgdGhlbSBuaWNlbHkgYWZ0ZXIgZGVjb2RpbmcgYSBzZXF1ZW5jZSkKKyAgICAgIC0tIEVDQyBjb2RlIG5vdyB1c2VzIE1vbnRnb21lcnkgcmVkdWN0aW9uIC4uLiBpdCdzIGV2ZW4gZmFzdGVyIFtFQ0MtMjU2IG1ha2Uga2V5IGRvd24gZnJvbSAzNy40TSB0byA0LjZNIGN5Y2xlcyBvbiBhbiBBdGhsb242NF0KKyAgICAgIC0tIEFkZGVkIFNIT1JUX0lOVEVHRVIgc28gdXNlcnMgY2FuIGVhc2lseSBzdG9yZSBERVIgZW5jb2RlZCBJTlRFR0VSIHR5cGVzIHdpdGhvdXQgdXNpbmcgdGhlIGJpZ251bSBtYXRoIGxpYnJhcnkKKyAgICAgIC0tIEZpeGVkIE9NQUMgY29kZSBzbyB0aGF0IHdpdGggTFRDX0ZBU1QgaXQgZG9lc24ndCByZXF1aXJlIHRoYXQgTFRDX0ZBU1RfVFlQRSBkaXZpZGVzIDE2IFtpdCBoYXMgdG8gZGl2aWRlIHRoZSBibG9jayBzaXplIGluc3RlYWRdCisgICAgICAtLSBFQ0Mga2V5IGV4cG9ydCBpcyBub3cgYSBzaW1wbGUgW2FuZCBkb2N1bWVudGVkXSBTRVFVRU5DRSwgdGhlICJlbmNyeXB0X2tleSIgYWxzbyB1c2VzIGEgbmV3IFNFUVVFTkNFIGZvcm1hdC4KKyAgICAgIC0tIFRoYW5rcyBnb2VzIHRvIHRoZSBmb2xsb3dpbmcgdGVzdGVycworICAgICAgICAgICAgTWljaGFlbCBCcm93biAgICAgICAgICAgICAtIFNvbGFyaXMgMTAvdVNQQVJDSUkKKyAgICAgICAgICAgIFJpY2hhcmQgT3V0ZXJicmlkZ2UgICAgICAgLSBNYWNPUworICAgICAgICAgICAgTWFydGluIENhcnBlbnRlciAgICAgICAgICAtIFNvbGFyaXMgOC91U1BBUkNJSSBbVGhhbmtzIGZvciBjbGVhbmluZyB1cCB0aGUgc2NyaXB0c10KKyAgICAgICAgICAgIEdyZWcgUm9zZSAgICAgICAgICAgICAgICAgLSAgLi4uIFN1bk9TIDUuOC9TUEFSQyBbLi4uIHdoYXQncyB3aXRoIHRoZSBTUEFSQ1M/XQorICAgICAgICAgICAgTWF0dCBKb2huc3RvbiAgICAgICAgICAgICAtIE1hY09TIFggIFtUaGFua3MgZm9yIHBvaW50aW5nIG91dCBHQ0MgNCBwcm9ibGVtcyB3aXRoIC1Pc10KKworQXByaWwgMTl0aCwgMjAwNQordjEuMDIKKyAgICAgIC0tIEFkZGVkIExUQ19URVNUIHN1cHBvcnQgdG8gZ2NtX3Rlc3QoKQorICAgICAgLS0gInB0L2N0IiBjYW4gbm93IGJlIE5VTEwgaW4gZ2NtX3Byb2Nlc3MoKSBpZiB5b3UgYXJlIHByb2Nlc3NpbmcgemVybyBieXRlcworICAgICAgLS0gT3B0aW1pemVkIEdDTSBieSByZW1vdmluZyB0aGUgImRvdWJsZSBjb3B5IiBoYW5kbGluZyBvZiB0aGUgcGxhaW50ZXh0L2FhZAorICAgICAgLS0gUmljaGFyZCBPdXRlcmJyaWRnZSBwb2ludGVkIG91dCB0aGF0IHg4Nl9wcm9mIHdvbid0IGJ1aWxkIG9uIE1BQ09TIGFuZCB0aGF0IHRoZSBtYW51YWwgCisgICAgICAgICBlcnJvbmVvdXNseSByZWZlcnMgdG8gIm15Y3J5cHQiIGFsbCBvdmVyIHRoZSBwbGFjZS4gIEZpeGVkLgorCitBcHJpbCAxN3RoLCAyMDA1Cit2MS4wMQorICAgICAgICoqIFNlY3VyZSBTY2llbmNlIENvcnBvcmF0aW9uIGhhcyBzdXBwb3J0ZWQgdGhpcyByZWxlYXNlIGN5Y2xlIGJ5IHNwb25zb3JpbmcgdGhlIGRldmVsb3BtZW50IHRpbWUgdGFrZW4uICBUaGVpciAKKyAgICAgICAgICBjb250aW51aW5nIHN1cHBvcnQgb2YgdGhpcyBwcm9qZWN0IGhhcyBoZWxwZWQgbWUgbWFpbnRhaW4gYSBzdGVhZHkgcGFjZSBpbiBvcmRlciB0byBrZWVwIExpYlRvbUNyeXB0IHVwIHRvIGRhdGUsCisgICAgICAgICAgc3RhYmxlIGFuZCBtb3JlIGVmZmljaWVudC4KKyAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIC0tIFVwZGF0ZWQgYmFzZTY0X2RlY29kZS5jIHNvIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMyAnPScgc2lnbnMgaXQgd291bGQgc3RvcCBwYXJzaW5nCisgICAgICAgLS0gTWVyZ2VkIGluIGxhdGVzdCBtcGkgdGhhdCBmaXhlZCBhIGZldyBidWdzIGhlcmUgYW5kIHRoZXJlCisgICAgICAgLS0gVXBkYXRlZCBPQUVQIGVuY29kZXIvZGVjb2RlciB0byBjYXRjaCB3aGVuIHRoZSBoYXNoIG91dHB1dCBpcyB0b28gbGFyZ2UKKyAgICAgICAgICBDbGVhbmVkIHVwIFBTUyBjb2RlIHRvbworICAgICAgIC0tIEFuZHkgQm9udG9mdCBmaXhlZCBhIGJ1ZyBpbiBteSBkZW1vcy90ZXN0cy9tYWtlZmlsZS5tc3ZjIC4uLiBzZWVtcyAiZHNhX3Rlc3QuYyIgaXNuJ3QgYW4gb2JqZWN0CisgICAgICAgICAgYWZ0ZXJhbGwuICBUaGFua3MuCisgICAgICAgLS0gTWFkZSBpbnZhbGlkIEVDQyBrZXkgc2l6ZXMgKGNvbmZpZ3VyYXRpb24pIG5vdCBoYXJkIGZhdWx0IHRoZSBwcm9ncmFtIChpdCByZXR1cm5zIGFuIGVycm9yIGNvZGUgbm93KQorICAgICAgIC0tIFNBRkVSIGhhcyBiZWVuIHJlLWVuYWJsZWQgYWZ0ZXIgSSB3YXMgcG9pbnRlZCB0byBodHRwOi8vd3d3LmNpcGhlcnNieXJpdHRlci5jb20vTkVXUzIvOTUwMzIzMDEuSFRNCisgICAgICAgICAgW01hcmsgS290aWFob10KKyAgICAgICAtLSBBZGRlZCBDQ00gbW9kZSB0byB0aGUgZW5jYXV0aCBsaXN0IChub3cgaGFzIEVBWCwgT0NCIGFuZCBDQ00sIGMnZXN0IHVuIHRyZW8gbWFnbmlmaXF1ZSEpCisgICAgICAgLS0gQWRkZWQgbWlzc2luZyBBU04uMSBoZWFkZXIgdG8gdGhlIFJTQSBrZXlzIC4uLiBvb3BzLi4uIG5vdyB0aGUgcnNhX2V4cG9ydC9pbXBvcnQgYXJlIEZVTExZIGNvbXBhdGlibGUKKyAgICAgICAgICB3aXRoIG90aGVyIGxpYnMgbGlrZSBPcGVuU1NMIChjb21tZW50OiAgVGVzdCB2ZWN0b3JzIHdvdWxkIGdvIGEgbG9uZyB3YXkgUlNBLi4uKQorICAgICAgIC0tIE1hbnVhbGx5IG1lcmdlZCBpbiBmaXggdG8gdGhlIHByaW1lX3JhbmRvbV9leCgpIExUTSBmdW5jdGlvbiB0aGF0IGVuc3VyZXMgdGhlIDJuZCBNU0IgaXMgc2V0IHByb3Blcmx5LiAgTm93CisgICAgICAgICAgV2hlbiB5b3Ugc2F5ICJJIHdhbnQgYSAxMDI0LzggYnl0ZSBSU0Ega2V5IiB0aGUgTVNCIGJpdCBvZiB0aGUgbW9kdWx1cyBpcyBzZXQgYXMgZXhwZWN0ZWQuICBOb3RlIEkgZ2VuZXJhbGx5IAorICAgICAgICAgIGRvbid0IHZpZXcgdGhpcyBhcyBhICJodWdlIGlzc3VlIiBidXQgaXQncyBqdXN0IG9uZSBsZXNzIG5pdCB0byB3b3JyeSBhYm91dC4gW0JyeWFuIEtsaXNjaF0KKyAgICAgICAtLSBBIG5ldyBDVlMgaGFzIGJlZW4gc2V0dXAgb24gbXkgQXRobG9uNjQgYm94Li4uIGlmIHlvdSB3YW50IGRldmVsb3BlciBhY2Nlc3Mgc2VuZCBtZSBhbiBlbWFpbCAoYW5kIGF0IHRoaXMgcG9pbnQgdGhlIGVtYWlsIHdvdWxkIGhhdmUgdG8gYmUgYXdlc29tZSkuCisgICAgICAgLS0gVXBkYXRlZCBBUEkgZm9yIEVDQiBhbmQgQ0JDIHNoZWxsIGNvZGUuICBOb3cgY2FuIHByb2Nlc3MgTiB3aG9sZSBibG9ja3MgaW4gb25lIGNhbGwgKGxpa2UgJERFSVRZIGludGVuZGVkKQorICAgICAgIC0tIEludHJvZHVjZWQgYSBuZXcgImhhcmR3YXJlIGFjY2VsIiBmcmFtZXdvcmsgdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVlZCB1cCBjaXBoZXIgRUNCLCBDQkMgYW5kIENUUiBtb2RlCisgICAgICAgICAgY2FsbHMuICBMYXRlciBvbiBkZXBlbmRlbnQgY29kZSAoZS5nLiBPTUFDLCBDQ00pIHdpbGwgYmUgcmUtd3JpdHRlbiB0byB1c2UgdGhlIGdlbmVyaWMgY2JjL2N0ciBmdW5jdGlvbnMuICBCdXQgbm93CisgICAgICAgICAgaWYgeW91IFtzYXldIGNhbGwgY3RyX2VuY3J5cHQoKSB3aXRoIGEgY2lwaGVyIGRlc2NyaXB0b3IgdGhhdCBoYXMgaGFyZHdhcmUgQ1RSIGl0IHdpbGwgYXV0b21hdGljYWxseQorICAgICAgICAgIGJlIHVzZWQgKGUuZy4gbm8gY29kZSByZXdyaXRlcykKKyAgICAgICAtLSBOb3cgc2hpcHMgd2l0aCAyMCUgbW9yZSBsb3ZlLgorICAgICAgIC0tIHg4Nl9wcm9mIG5vdyB1c2VzIEVDQiBzaGVsbCBjb2RlIChoaW50OiBhY2NlbGVyYXRvcnMpIGFuZCBvdXRwdXRzIGN5Y2xlcyBwZXIgQkxPQ0sgbm90IGJ5dGUuICBUaGlzIHdpbGwgbWFrZSBpdCBhIGJpdCAKKyAgICAgICAgICBlYXNpZXIgdG8gY29tcGFyZSBoYXJkd2FyZSB2cy4gc29mdHdhcmUgY2lwaGVyIGltcGxlbWVudGF0aW9ucy4gIEl0IGFsc28gZW1pdHMgdGltaW5ncyBmb3IgQ0JDIGFuZCBDVFIgbW9kZXMKKyAgICAgICAtLSBbUGV0ZXIgTGFEb3ddIGZpeGVkIGEgdHlwbyB3LnIudC4gWFJFQUxMT0MgbWFjcm8gKHNwZWxsaW5nIGNvdW50cyBraWRzISkKKyAgICAgICAtLSBGaXhlZCBidWcgd2l0aCBfX3g4Nl82NF9fIHdoZXJlIFJPTDY0L1JPUjY0IHdpdGggTFRDX05PX1JPTEMgd291bGQgYmUgdGhlIDMyLWJpdCB2ZXJzaW9ucyBpbnN0ZWFkLi4uCisgICAgICAgLS0gU2hpcHBpbmcgd2l0aCBwcmVsaW1pbmFyeSBHQ00gY29kZSAoZGlzYWJsZWQpLiAgSXQncyBidWdneSAoc3RhY2sgb3ZlcmZsb3cgaGlkZGVuIHNvbWV3aGVyZSkuICBJZiBhbnlvbmUgY2FuIHNwb3QgaXQgbGV0IG1lIGtub3cuCisgICAgICAgLS0gQWRkZWQgUGVsaWNhbiBNQUMgW2l0J3MgYW4gQUVTIGJhc2VkIGZhc3QgTUFDXSB0byB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgTUFDcworICAgICAgIC0tIEFkZGVkIExUQ19GQVNUIFthbmQgeW91IGNhbiBkaXNhYmxlIGJ5IGRlZmluaW5nIExUQ19OT19GQVNUXSBzbyB0aGF0IENCQyBhbmQgQ1RSIG1vZGUgWE9SIHdob2xlIHdvcmRzIFtlLmcuIDMyIG9yIDY0IGJpdHNdIGF0IGEgdGltZQorICAgICAgICAgIGluc3RlYWQgb2Ygb25lIGJ5dGUuICBPbiBteSBBTUQ2NCB0aGlzIHJlZHVjZWQgdGhlIG92ZXJoZWFkIGZvciBBRVMtMTI4LUNCQyBmcm9tIDQuNTYgY3ljbGVzL2J5dGUgdG8gYXJvdW5kIDEgY3ljbGUvYnl0ZS4gIFRoaXMgcmVxdWlyZXMKKyAgICAgICAgICB0aGF0IHlvdSBlaXRoZXIgYWxsb3cgdW5hbGlnbmVkIHJlYWQvd3JpdGVzIFtlLmcuIHg4Nl8zMi94ODZfNjRdIG9yIGFsaWduIGFsbCB5b3VyIGRhdGEuICBJdCB3b24ndCBnbyBvdXQgb2YgaXQncyB3YXkgdG8gZW5zdXJlIAorICAgICAgICAgIGFsaWduZWQgYWNjZXNzLiAgT25seSBlbmFibGVkIGZvciB4ODZfKiBwbGF0Zm9ybXMgYnkgZGVmYXVsdCBzaW5jZSB0aGV5IGFsbG93IHVuYWxpZ25lZCByZWFkL3dyaXRlcy4KKyAgICAgICAtLSBBZGRlZCBMVENfRkFTVCBzdXBwb3J0IHRvIFBNQUMgKGRyb3BzIHRoZSBjeWNsZS9ieXRlIGJ5IGFib3V0IDkgY3ljbGVzIG9uIG15IEFNRDY0KSBbbm90ZTogSSBsYXRlciByZXdyb3RlIHRoaXMgcHJpb3IgdG8gcmVsZWFzZV0KKyAgICAgICAtLSBVcGRhdGVkICJwcm9maWxlZCIgdGFyZ2V0IHRvIHdvcmsgd2l0aCB0aGUgbmV3IGRpcmVjdG9yeSBsYXlvdXQKKyAgICAgICAtLSBBZGRlZCBbZGVtbyBvbmx5XSBvcHRpbWl6ZWQgUkM1LUNUUiBjb2RlIHRvIHg4Nl9wcm9mIGRlbW8gdG8gc2hvdyBvZmYgaG93IHRvIG1ha2UgYW4gYWNjZWxlcmF0b3IKKyAgICAgICAgICBbVGhpcyBoYXMgYmVlbiByZW1vdmVkIHByaW9yIHRvIHJlbGVhc2UuLi4gSXQgbWF5IHJlLWFwcGVhciBsYXRlcl0KKyAgICAgICAtLSBBZGRlZCBDQ00gYWNlbGVyYXRvciBjYWxsYmFja3MgdG8gdGhlIGxpc3QgW25vdyBzdXBwb3J0cyBFQ0IsIENUUiwgQ0JDIGFuZCBub3cgQ0NNXS4KKyAgICAgICAtLSBBZGRlZCBjaGFwdGVyIHRvIG1hbnVhbCBhYm91dCBhY2NlbGVyYXRvcnMgKHlvdSBrbm93IHlvdSB3YW50IGl0KQorICAgICAgIC0tIEFkZGVkICJic3dhcCIgb3B0aW1pemF0aW9ucyB0byB4ODYgTE9BRC9TVE9SRSB3aXRoIGJpZyBlbmRpYW4uICBDYW4gYmUgZGlzYWJsZWQgYnkgZGVmaW5pbmcgTFRDX05PX0JTV0FQCisgICAgICAgLS0gTFRDX05PX0FTTSBpcyBub3cgdGhlIG9mZmljaWFsICJkaXNhYmxlIGFsbCBub24tcG9ydGFibGUgc3R1ZmYiIG1hY3JvLiAgV2hlbiBkZWZpbmVkIGl0IHdpbGwgbWFrZSB0aGUgY29kZSBlbmRpYW4tbmV1dHJhbCwKKyAgICAgICAgICBkaXNhYmxlIGFueSBmb3JtIG9mIEFTTSBhbmQgZGlzYWJsZSBMVENfRkFTVCBsb2FkL3N0b3Jlcy4gIEVzc2VudGlhbGx5IGJ1aWxkIHRoZSBsaWJyYXJ5IHdpdGggdGhpcyBkZWZpbmVkIGlmIHlvdSdyZSBoYXZpbmcKKyAgICAgICAgICB0cm91YmxlIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5IChvbGQgR0NDcyBmb3IgaW5zdGFuY2UgZGlzbGlrZSB0aGUgUk9MYyBtYWNybykKKyAgICAgICAtLSBBZGRlZCB0b21jcnlwdF9tYWMuaCBhbmQgbW92ZWQgTUFDL2VuY01BQyBmdW5jdGlvbnMgZnJvbSB0b21jcnlwdF9oYXNoLmggaW50byBpdAorICAgICAgIC0tIEFkZGVkICJkb25lIiBmdW5jdGlvbiB0byBjaXBoZXJzIGFuZCB0aGUgZml2ZSBjaGFpbmluZyBtb2RlcyBbYW5kIHRoaW5ncyBsaWtlIG9tYWMvcG1hYy9ldGNdCisgICAgICAgLS0gQ2hhbmdlZCBpbnN0YWxsIGdyb3VwIHRvICJ3aGVlbCIgZnJvbSAicm9vdCIuCisgICAgICAgLS0gUmVwbGFjZWQgLy8gY29tbWVudHMgd2l0aCAvKiovIHNvIGl0IHdpbGwgYnVpbGQgb24gb2xkZXIgVU5JWC1saWtlIHBsYXRmb3JtcworICAgICAgIC0tIHg4Nl9wcm9mIGJ1aWxkcyBhbmQgcnVucyB3aXRoIEludGVsQ0MgZmluZSBub3cgCisgICAgICAgLS0gQWRkZWQgInN0ZXN0IiBidWlsZCB0byBpbnRlbCBDQyB0byB0ZXN0IHN0YXRpYyBsaW5rZWQgZnJvbSB3aXRoaW4gdGhlIGRpciAoc28geW91IGRvbid0IGhhdmUgdG8gaW5zdGFsbCB0byB0ZXN0KQorICAgICAgIC0tIE1vdmVkIHRlc3RpbmcvYmVuY2htYXJrIGludG8gdGVzdHByb2YgZGlyZWN0b3J5IGFuZCBidWlsZCBpdCBhcyBwYXJ0IG9mIHRoZSBidWlsZC4gIE5vdyB5b3UgY2FuIGxpbmsgYWdhaW5zdCBsaWJ0b21jcnlwdF9wcm9mLmEgdG8gZ2V0IAorICAgICAgICAgIHRlc3RpbmcgaW5mbyAoaGludDogaGFyZHdhcmUgZGV2ZWxvcGVycyA7LSkgKQorICAgICAgIC0tIEFkZGVkIENDTSB0byB0dl9nZW4gCisgICAgICAgLS0gQWRkZWQgZGVtb3MgdG8gTVNWQyBtYWtlZmlsZQorICAgICAgIC0tIFJlbW92ZWQgLWZ1bnJvbGwtYWxsLWxvb3BzIGZyb20gR0NDIG1ha2VmaWxlIGFuZCByZXBsYWNlZCB3aXRoIC1mdW5yb2xsLWxvb3BzIHdoaWNoIGlzIGEgYml0IG1vcmUgc2FuZSAoUDQgYWluJ3QgZ290IG11Y2ggY2FjaGUgZm9yIHRoZSBJREFUQSkKKyAgICAgICAtLSBGaXhlZCBHQ00gcHJpb3IgdG8gcmVsZWFzZSBhbmQgcmUtZW5hYmxlZCBpdC4gIEl0IGhhcyBub3QgYmVlbiBvcHRpbWl6ZWQgYnV0IGl0IGRvZXMgY29uZm9ybSB3aGVuIGNvbXBpbGVkIHdpdGggb3B0aW1pemF0aW9ucy4KKyAgICAgICAtLSBJJ3ZlIHNpbmNlIG9wdGltaXplZCBHQ00gYW5kIENDTS4gIFRoZXkncmUgY2xvc2UgaW4gc3BlZWQgYnV0IEdDTSBpcyBtb3JlIGZsZXhpYmxlIGltaG8gKHRob3VnaCBFQVggaXMgbW9yZSBmbGV4aWJsZSB0aGFuIGJvdGgpCisgICAgICAgLS0gRm9yIGtpY2tzIEkgb3B0aW1pemVkIHRoZSBFQ0MgY29kZSB0byB1c2UgcHJvamVjdGl2ZSBwb2ludHMuICBHZXRzIGJldHdlZW4gMy4yMXggKFByZXNjb3R0IFA0KSB0byA0LjUzeCAoQU1ENjQpIHRpbWVzIGZhc3RlciB0aGFuIGJlZm9yZSBhdCAxNjAtYml0IGtleXMgYW5kIHRoZQorICAgICAgICAgIHNwZWVkdXAgZ3Jvd3MgYXMgdGhlIGtleXNpemUgZ3Jvd3MuICBCYXNpY2FsbHkgcmVtb3ZpbmcgbW9zdCBwcmFjdGljYWwgcmVhc29ucyB0byAibm90IHVzZSB0aGUgRUNDIGNvZGUiLiAgRW5qb3kuCisgICAgICAgLS0gQWRkZWQgTFRDX0ZBU1Qgc3VwcG9ydCB0byBPTUFDL1BNQUMgYW5kIGRvdWJsZWQgaXQncyBzcGVlZCBvbiBteSBhbWQ2NCBbZmFzdGVyIG9uIHRoZSBQNCB0b28gSSBndWVzc10KKyAgICAgICAtLSBBZGRlZCBHQ00gdG8gdHZfZ2VuCisgICAgICAgLS0gUmVtb3ZlZCAibWFrZWZpbGUuY3lnd2luX2RsbCIgYXMgaXQncyBub3QgcmVhbGx5IHVzZWQgYnkgYW55b25lIGFuZCBub3Qgd29ydGggdGhlIGVmZm9ydCAoaGVsbCBJIGhhcmRseSBtYWludGFpbiB0aGUgTVNWQyBtYWtlZmlsZXMgLi4uKQorICAgICAgIC0tIFVwZGF0ZWQgYSBmZXcgZmlsZXMgaW4gdGhlICJtaXNjIiBkaXJlY3RvcnkgdG8gaGF2ZSBjb3JyZWN0IEBmaWxlIGNvbW1lbnRzIGZvciBkb3h5Z2VuCisgICAgICAgLS0gUmVtb3ZlZCAicHJvZmlsZSIgdGFyZ2V0IHNpbmNlIGl0IHdhcyBzbG93ZXIgYW55d2F5cyAoZ28gZmlndXJlLi4uKQorCitEZWNlbWJlciAzMXN0LCAyMDA0Cit2MS4wMCAgCisgICAgICAgLS0gQWRkZWQgInIscyA9PSAwIiBjaGVjayB0byBkc2FfdmVyaWZ5X2hhc2goKQorICAgICAgIC0tIEFkZGVkICJtdWx0aSBibG9jayIgaGVscGVycyBmb3IgaGFzaCwgaG1hYywgcG1hYyBhbmQgb21hYyByb3V0aW5lcyBzbyB5b3UgY2FuIHByb2Nlc3MgbXVsdGlwbGUgbm9uLWFkamFjZW50CisgICAgICAgICAgYmxvY2tzIG9mIGRhdGEgd2l0aCBvbmUgY2FsbCAoYWRkZWQgZGVtb3MvbXVsdGkuYyB0byBtYWtlIHN1cmUgdGhleSB3b3JrKQorICAgICAgICAgIC0tIE5vdGUgdGhlc2UgYXJlIG5vdCBkb2N1bWVudGVkIGJ1dCB0aGV5IGRvIGhhdmUgZG94eWdlbiBjb21tZW50cyBpbnNpZGUgdGhlbQorICAgICAgICAgIC0tIEFsc28gSSBkb24ndCB1c2UgdGhlbSBpbiBvdGhlciBmdW5jdGlvbnMgKGxpa2UgcGtjc181XzIoKSkgYmVjYXVzZSBJIGRpZG4ndCBoYXZlIHRoZSB0aW1lLiAgSm9iIGZvciB0aGUgbmV3IExUQyBtYWludGFpbmVyIDstKQorICAgICAgIC0tIEFkZGVkIHR3ZWFrZWQgQW51YmlzIHRlc3QgdmVjdG9ycyBhbmQgbWFkZSBpdCBkZWZhdWx0ICh1bmRlZmluZWQgQU5VQklTX1RXRUFLIHRvIGdldCBvcmlnaW5hbCBBbnViaXMpCisgICAgICAgLS0gTWVyZ2VkIGluIGZpeCBmb3IgbXBfcHJpbWVfcmFuZG9tX2V4KCkgdG8gZGVhbCB3aXRoIE1TQiBhbmQgTFNCICJidWdzIgorICAgICAgIC0tIFJlbW92ZWQgdGltX2V4cHRtb2QoKSBjb21wbGV0ZWx5LCB1cGRhdGVkIHNldmVyYWwgUlNBIGZ1bmN0aW9ucyAobm90YWJseSB2MTUgYW5kIHRoZSBkZWNyeXB0L3ZlcmlmeSkgc28gdGhleSAKKyAgICAgICAgICBkb24ndCByZXF1aXJlIGEgcHJuZyBub3cKKyAgICAgICAtLSBUaGlzIHJlbGVhc2UgYnJvdWdodCB0byB5b3UgYnkgdGhlIGZpbmUgdHVuZXMgb2YgTWFjeSBHcmF5LiAgV2UgbWlzcyB5b3UuCisKK0RlY2VtYmVyIDIzcmQsIDIwMDQKK3YxLjAwcmMxCisgICAgICAgLS0gUmVuYW1lZCAibXljcnlwdF8qIiB0byAidG9tY3J5cHRfKiIgdG8gYmUgbW9yZSBzcGVjaWZpYyBhbmQgcHJvZmVzc2lvbmFsCisgICAgICAgICAgTm93IGp1c3QgaW5jbHVkZSAidG9tY3J5cHQuaCIgaW5zdGVhZCBvZiAibXljcnlwdC5oIiB0byBnZXQgTFRDIDstKQorICAgICAgIC0tIENsZWFuZWQgdXAgbWFrZWZpbGVzIHRvIGVuc3VyZSBhbGwgaGVhZGVycyBhcmUgY29ycmVjdGx5IGluc3RhbGxlZAorICAgICAgIC0tIEFkZGVkICJyb3RhdGUgYnkgY29uc3RhbnQiIG1hY3JvcyBmb3IgcG9ydGFibGUsIHg4Ni0zMiBhbmQgeDg2LTY0CisgICAgICAgICAgWW91IGNhbiBkaXNhYmxlIHRoaXMgbmV3IGNvZGUgd2l0aCBMVENfTk9fUk9MQyB3aGljaCBpcyB1c2VmdWwgZm9yIG9sZGVyIEdDQ3MKKyAgICAgICAtLSBDbGVhbmVkIHVwIGRldGVjdGlvbiBvZiB4ODYtNjQgc28gaXQgd29ya3MgZm9yIFJPTC9ST1IgbWFjcm9zCisgICAgICAgLS0gRml4ZWQgcnNhX2ltcG9ydCgpIHNvIHRoYXQgaXQgd291bGQgZGV0ZWN0IG11bHRpLXByaW1lIFJTQSBrZXlzIGFuZCBlcnJvciBhcHByb3ByaWF0ZWx5CisgICAgICAgLS0gU29ydGVkIHRoZSBzb3VyY2UgZmlsZXMgYnkgY2F0ZWdvcnkgYW5kIHVwZGF0ZWQgdGhlIG1ha2VmaWxlcyBhcHByb3ByaWF0ZWx5CisgICAgICAgLS0gQWRkZWQgTFRDX0RFUiBkZWZpbmUgc28geW91IGNhbiB0cmltIG91dCBERVIgY29kZSBpZiBub3QgcmVxdWlyZWQKKyAgICAgICAtLSBGaXhlZCB1cCBSU0EncyBkZWNyeXB0IGZ1bmN0aW9ucyBjaGFuZ2luZyAicmVzIiB0byAic3RhdCIgdG8gYmUgbW9yZSBpbiBzeW5jCisgICAgICAgICAgd2l0aCB0aGUgc2lnbmF0dXJlIHZhcmlhYmxlcyBub21lbmNsYXR1cmUuIChubyBjb2RlIGNoYW5nZSBqdXN0IHJlbmFtZWQgdGhlIGFyZ3VtZW50cykKKyAgICAgICAtLSBSZW1vdmVkIGFsbCBsYWJlbHMgc3RhcnRpbmcgd2l0aCBfXyBhbmQgcmVwbGFjZWQgd2l0aCBMQkxfIHRvIGF2b2lkIG5hbWVzcGFjZSBjb25mbGljdHMgKFJhbmR5IEhvd2FyZCkKKyAgICAgICAtLSBNZXJnZWQgaW4gTFRNIGZpeCB0byBtcF9wcmltZV9yYW5kb21fZXgoKSB3aGljaCB6YXAnZWQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBpZiB0aGUgYml0IHNpemUKKyAgICAgICAgICByZXF1ZXN0ZWQgd2FzIGEgbXVsdGlwbGUgb2YgZWlnaHQuCisgICAgICAgLS0gTWFkZSBSU0FfVElNSU5HIG9mZiBieSBkZWZhdWx0IGFzIGl0J3Mgbm90IHRlcnJpYmx5IHVzZWZ1bCBbYW5kIGxpa2VseSB0byBiZSBkZXByZWNhdGVkXQorICAgICAgIC0tIFJlbmFtZWQgU01BTExfQ09ERSwgQ0xFQU5fU1RBQ0sgYW5kIE5PX0ZJTEUgdG8gaGF2ZSBhIExUQ18gcHJlZml4IHRvIGF2b2lkIG5hbWVzcGFjZSBjb2xsaXNpb25zCisgICAgICAgICAgd2l0aCBvdGhlciBwcm9ncmFtcy4gIGUuZy4gU01BTExfQ09ERSA9PiBMVENfU01BTExfQ09ERQorICAgICAgIC0tIFplZCBTaGF3IHBvaW50ZWQgb3V0IHRoYXQgb24gY2VydGFpbiBzeXN0ZW1zIGluc3RhbGxpbmcgbGlicyBhcyAicm9vdCIgaXNuJ3QgcG9zc2libGUgYXMgdGhlIHN1cGVyLXVzZXIKKyAgICAgICAgICBpcyBub3Qgcm9vdC4gIE5vdyB0aGUgbWFrZWZpbGVzIGFsbG93IHRoaXMgdG8gYmUgY2hhbmdlZCBlYXNpbHkuCisgICAgICAgLS0gUmVuYW1lZCAic3RydWN0IF8qX2Rlc2NyaXB0b3IiIHRvICJzdHJ1Y3QgbHRjXypfZGVzY3JpcHRvciIgdG8gYXZvaWQgdXNpbmcgYSBsZWFkaW5nIF8KKyAgICAgICAgICBBbHNvIHJlbmFtZWQgX0FSR0NISyB0byBMVENfQVJHQ0hLCisgICAgICAgLS0gWmVkIFNoYXcgcG9pbnRlZCBvdXQgdGhhdCBJIHN0aWxsIGRlZmluZWQgdGhlIHBybmcgc3RydWN0cyBpbiB0b21jcnlwdF9wcm5nLmggZXZlbiBpZiB0aGV5IAorICAgICAgICAgIHdlcmVuJ3QgZGVmaW5lZC4gIFRoaXMgbWFkZSB1bmRlZidpbmcgRk9SVFVOQSBicmVhayB0aGUgYnVpbGQuCisgICAgICAgLS0gQWRkZWQgTFRDX05PX0FTTSB0byBkaXNhYmxlIGlubGluZSBhc20gbWFjcm9zIFtST0wvUk9SL2V0Y10KKyAgICAgICAtLSBDaGFuZ2VkIFJTQSBkZWNyeXB0IGZ1bmN0aW9ucyB0byBjaGFuZ2UgdGhlIG91dHB1dCBsZW5ndGggdmFyaWFibGUgbmFtZSBmcm9tICJrZXlsZW4iIHRvICJvdXRsZW4iIHRvIG1ha2UgCisgICAgICAgICAgaXQgbW9yZSBjb25zaXN0ZW50LgorICAgICAgIC0tIEFkZGVkIHRoZSA2NC1iaXQgS2hhemFkIGJsb2NrIGNpcGhlciBbTkVTU0lFXQorICAgICAgIC0tIEFkZGVkIHRoZSAxMjgtYml0IEFudWJpcyBibG9jayBjaXBoZXIgW3dpdGgga2V5IHN1cHBvcnQgZm9yIDEyOC4uLjMyMCBiaXQga2V5c10gW05FU1NJRV0KKyAgICAgICAtLSBDaGFuZ2VzIHRvIHNldmVyYWwgTUFDIGZ1bmN0aW9ucyB0byByZW5hbWUgaW5wdXQgYXJndW1lbnRzIHRvIG1vcmUgc2Vuc2libGUgbmFtZXMKKyAgICAgICAtLSBSZW1vdmVkIEZBU1RfUEsgc3VwcG9ydCBmcm9tIGRoX3N5cy5jCisgICAgICAgLS0gRGVjbGFyZWQgZGVza2V5KCkgZnJvbSBkZXMuYyBhcyBzdGF0aWMgaW5zdGVhZCBvZiBhIGdsb2JhbAorICAgICAgIC0tIEFkZGVkIHByZXR0eSBtdWNoIGFsbCBwcmFjdGljYWwgR0NDIHdhcm5pbmcgdGVzdHMgdG8gdGhlIEdDQyBbcmVsYXRlZF0gbWFrZWZpbGVzLiAgVGhlc2UgYWRkaXRpb25hbAorICAgICAgICAgIHdhcm5pbmdzIGNhbiBlYXNpbHkgYmUgZGlzYWJsZWQgZm9yIHRob3NlIHdpdGggb2xkZXIgY29waWVzIG9mIEdDQyBbb3IgZXZlbiBub24gR05VIGNjJ3NdCisgICAgICAgLS0gQWRkZWQgZG94eWdlbiBAIHRhZ3MgdG8gdGhlIGNvZGUuLi4gIHBoZXcgdGhhdCB3YXMgYSBoZWxsIG9mIGEgbG90IG9mIFtyZXBldGl0aXZlXSB3b3JrCisgICAgICAgLS0gQWxzbyBhZGRlZCBwcmUtY29uZmlndXJlZCBEb3h5Z2VuIHNjcmlwdC4KKyAgICAgICAtLSBDbGVhbmVkIHVwIHF1aXRlIGEgZmV3IGZ1bmN0aW9ucyBbY2lwaGVycywgcGssIGV0Y10gdG8gbWFrZSB0aGUgcGFyYW1ldGVycyBuYW1pbmcgc3R5bGUgY29uc2lzdGVudAorICAgICAgICAgIEUuZy4gY2lwaGVycyBrZXlzIGFyZSBjYWxsZWQgInNrZXkiIGNvbnNpc3RlbnRseSBub3cuICBUaGUgaW5wdXQgdG8gUEsgZW5jcnlwdGlvbiBpcyBjYWxsZWQgImluIiwgZXRjLgorICAgICAgICAgIFRoZXNlIGNoYW5nZXMgcmVxdWlyZSBubyBjb2RlIGNoYW5nZXMgb24gdGhlIGJlaGFsZiBvZiBkZXZlbG9wZXJzIGZvcnR1bmF0ZWx5CisgICAgICAgLS0gU3RhcnRlZCBhIFNBRkVSKyBvcHRpbWl6ZXIgW2RvZXMgZW5jcnlwdCBvbmx5XSB3aGljaCBzaGF2ZXMgYSBnb29kIDMwIG9yIHNvIGN5Y2xlcy9ieXRlIG9uIG15IEFNRDY0CisgICAgICAgICAgYXQgYW4gZXhwZW5zZSBvZiBodWdlIGNvZGUuICBJdCdzIGluIG5vdGVzL2V0Yy9zYWZlcnBfb3B0aW1pemVyLmMKKyAgICAgICAtLSBEU0Egc2lnbi92ZXJpZnkgbm93IHVzZXMgREVSIGVuY29kZWQgb3V0cHV0L2lucHV0cyBhbmQgbm8gTFRDIHN0eWxlIGhlYWRlcnMuICAKKyAgICAgICAtLSBNYXR0IEpvaG5zdG9uIGZvdW5kIGEgbWlzc2luZyBzZW1pLWNvbG9uIGluIG1wX2V4cHRtb2QoKS4gIEZpeCBoYXMgYmVlbiBtZXJnZWQgaW4uICAKKworT2N0b2JlciAyOXRoLCAyMDA0Cit2MC45OSAgLS0gTWVyZ2VkIGluIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBMVE0gd2hpY2ggaW5jbHVkZXMgYWxsIG9mIHRoZSByZWNlbnQgYnVnIGZpeGVzCisgICAgICAgLS0gRGVwcmVjYXRlZCBMVE1TU0UgYW5kIHJlbW92ZWQgaXQgKHRvIGJlIHJlcGxhY2VkIHdpdGggVEZNIGxhdGVyIG9uKQorICAgICAgIC0tIFN0ZWZhbiBBcmVudHogcG9pbnRlZCBvdXQgdGhhdCBtcF9zX3JtYXAgc2hvdWxkIGJlIGV4dGVybgorICAgICAgIC0tIEtyaXN0aWFuIEdqP3N0ZWVuIHBvaW50ZWQgb3V0IHRoYXQgdGhlcmUgYXJlIHR5cG9zIGluIHRoZSAKKyAgICAgICAgICAidGVzdCIgbWFrZWZpbGUgYW5kIG1pbm9yIGlzc3VlcyBpbiBZYXJyb3cgYW5kIFNvYmVyIFtqdXN0IGNvc21ldGljcyByZWFsbHldCisgICAgICAgLS0gTWF0dGhldyBQLiBDYXNoZG9sbGFyIHBvaW50ZWQgb3V0IHRoYXQgImV4cG9ydCIgaXMgYSBDKysga2V5d29yZCAKKyAgICAgICAgICBzbyBjaGFuZ2VkIHRoZSBQUk5HIGFwaSB0byB1c2UgInBleHBvcnQiIGFuZCAicGltcG9ydCIKKyAgICAgICAtLSBVcGRhdGVkICJoYXNoc3VtIiBkZW1vIHNvIGl0IGJ1aWxkcyA7LSkKKyAgICAgICAtLSBBZGRlZCBhdXRvbWF0aWMgc3VwcG9ydCBmb3IgeDg2LTY0ICh3aWxsIGNvbmZpZ3VyZSBmb3IgNjQtYml0IGxpdHRsZSBlbmRpYW4gYXV0b21hZ2ljYWxseSkKKyAgICAgICAtLSBaaGkgQ2hlbiBwb2ludGVkIG91dCBhIGJ1ZyBpbiByc2FfZXhwdG1vZCB3aGljaCB3b3VsZCBsZWFrIG1lbW9yeSBvbiBlcnJvci4gCisgICAgICAgLS0gTWFkZSBoYXNoIGZ1bmN0aW9ucyAiaW5pdCIgcmV0dXJuIGFuIGludC4gIHNsaWdodCBjaGFuZ2UgdG8gQVBJIDstKAorICAgICAgIC0tIEFkZGVkICJDSEMiIG1vZGUgd2hpY2ggdHVybnMgYW55IGNpcGhlciBpbnRvIGEgaGFzaCB0aGUgb3RoZXIgTFRDIGZ1bmN0aW9ucyBjYW4gdXNlCisgICAgICAgLS0gQWRkZWQgQ0hDIG1vZGUgc3R1ZmYgdG8gZGVtb3Mgc3VjaCBhcyB0dl9nZW4gYW5kIGhhc2hzdW0KKyAgICAgICAtLSBBZGRlZCAibWFrZWZpbGUuc2hhcmVkIiB3aGljaCBidWlsZHMgYW5kIGluc3RhbGxzIHNoYXJlZC9zdGF0aWMgb2JqZWN0IGNvcGllcworICAgICAgICAgIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgIC0tIEFkZGVkIERFUiBmb3IgYmlnbnVtIHN1cHBvcnQgCisgICAgICAgLS0gUlNBIGlzIG5vdyBmdWxseSBqb3kuICByc2FfZXhwb3J0L3JzYV9pbXBvcnQgdXNlIFBLQ1MgIzEgZW5jb2RpbmdzIGFuZCBzaG91bGQgYmUgCisgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIG90aGVyIGNyeXB0byBsaWJzIHRoYXQgdXNlIHRoZSBmb3JtYXQuCisgICAgICAgLS0gQWRkZWQgc3VwcG9ydCBmb3IgeDg2LTY0IGZvciB0aGUgUk9ML1JPUiBtYWNyb3MgCisgICAgICAgLS0gQ2hhbmdlZCB0aGUgRExMIGFuZCBTTyBtYWtlZmlsZXMgdG8gb3B0aW1pemUgZm9yIHNwZWVkLCBjb21tZW50ZWQgU01BTExfQ09ERSBpbgorICAgICAgICAgIG15Y3J5cHRfY3VzdG9tLmggYW5kIGFkZGVkIC1EU01BTExfQ09ERSB0byB0aGUgZGVmYXVsdCBtYWtlZmlsZQorICAgICAgIC0tIFVwZGF0ZWQgcHJpbWFsaXR5IHRlc3RpbmcgY29kZSBzbyBpdCBkb2VzIGEgbWluaW11bSBvZiA1IHRlc3RzIFtvZiBNaWxsZXItUmFiaW5dCisgICAgICAgICAgKEFGQUlLIG5vdCBhIHNlY3VyaXR5IGZpeCwganVzdCB3YXJtIGZ1enppZXMpCisgICAgICAgLS0gTWlub3IgdXBkYXRlcyB0byB0aGUgT01BQyBjb2RlIChhZGRpdGlvbmFsIF9fQVJHQ0hLIGFuZCByZW1vdmVkIHByaW50ZiBmcm9tIG9tYWNfdGVzdC4uLiBvb3BzISkKKyAgICAgICAtLSBVcGRhdGUgYnVpbGQgYW5kIGNvbmZpZ3VyYXRpb24gaW5mbyB3aGljaCB3YXMgcmVhbGx5IHJlYWxseSByZWFsbHkgb3V0IG9mIGRhdGUuICAoQ2hhcHRlciAxNCkKKyAgICAgICArKyBNaW5vciB1cGRhdGUsIHN3aXRjaCBSU0EgdG8gdXNlIHRoZSBQS0NTIHN0eWxlIENSVAorCitBdWd1c3QgNnRoLCAyMDA0Cit2MC45OCAgLS0gVXBkYXRlIHRvIGhtYWNfaW5pdCB0byBmcmVlIGFsbCBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9yCisgICAgICAgLS0gVXBkYXRlIHRvIFBSTkcgQVBJIHRvIGZpeCBpbXBvcnQvZXhwb3J0IGZ1bmN0aW9ucyBvZiBGb3J0dW5hIGFuZCBZYXJyb3cKKyAgICAgICAtLSBBZGRlZCB0ZXN0IGZ1bmN0aW9ucyB0byBQUk5HIGFwaSwgUkM0IG5vdyBjb25mb3JtcyA7LSkgW3dhcyBhIG1pbm9yIGlzc3VlXQorICAgICAgIC0tIEFkZGVkIHRoZSBTT0JFUi0xMjggUFJORyBiYXNlZCBvZmYgb2YgY29kZSBkb25hdGVkIGJ5IEdyZWcgUm9zZS4KKyAgICAgICAtLSBBZGRlZCBUZWNoIE5vdGUgIzQgW25vdGVzL3RlY2gwMDA0LnR4dF0gCisgICAgICAgLS0gQ2hhbmdlZCBSQzQgYmFjayBbZHVlIHRvIHJlcXVlc3RdLiAgSXQgd2lsbCBub3cgWE9SIHRoZSBvdXRwdXQgc28geW91IGNhbiB1c2UgaXQgbGlrZSAKKyAgICAgICAgICBhIHN0cmVhbSBjaXBoZXIgZWFzaWx5LgorICAgICAgIC0tIFVwZGF0ZSBGb3J0dW5hJ3MgZXhwb3J0KCkgdG8gZW1pdCBhIGhhc2ggb2YgZWFjaCBwb29sLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBhY2N1bXVsYXRlZCAKKyAgICAgICAgICBlbnRyb3B5IHRoYXQgd2FzIHNwcmVhZCBvdmVyIGFsbCB0aGUgcG9vbHMgaXNuJ3QgZW50aXJlbHkgbG9zdCB3aGVuIHlvdSBleHBvcnQvaW1wb3J0LgorICAgICAgIC0tIFpoaSBDaGVuIHN1Z2dlc3RlZCBhIGNvbW1lbnQgZm9yIHJzYV9lbmNyeXB0X2tleSgpIHRvIGxldCB1c2VycyBrbm93IFtlYXNpbHldIHRoYXQgaXQgd2FzCisgICAgICAgICAgUEtDUyAjMSB2Mi4wIHBhZGRpbmcuICAodXBkYXRlZCBvdGhlciByc2FfKiBmdW5jdGlvbnMpCisgICAgICAgLS0gQ2xlYW5lZCB1cCBOb2VrZW9uIHRvIHJlbW92ZSB1bnJvbGxpbmcgW3dhc24ndCByZXF1aXJlZCwgd2FzIG1lc3N5IGFuZCBhY3R1YWxseSBzbG93ZXIgd2l0aCBHQ0MvSUNDXQorICAgICAgIC0tIFVwZGF0ZWQgUkM0IHNvIHRoYXQgd2hlbiB5b3UgZmVlZCBpdCA+MjU2IGJ5dGVzIG9mIGVudHJvcHkgaXQgcXVpZXRseSBpZ25vcmVzIGFkZGl0aW9uYWwKKyAgICAgICAgICBieXRlcy4gIEFsc28gcmVtb3ZlZCB0aGUgJSBmcm9tIHRoZSBrZXkgc2V0dXAgdG8gc3BlZWQgaXQgdXAgYSBiaXQuCisgICAgICAgLS0gQWRkZWQgY2lwaGVyL2hhc2gvcHJuZyB0ZXN0cyB0byB4ODZfcHJvZiB0byBoZWxwIGNhdGNoIGJ1Z3Mgd2hpbGUgdGVzdGluZworICAgICAgIC0tIE1hZGUgdGhlIFBSTkcgImRvbmUiIHJldHVybiBpbnQsIGZpeGVkIHNwcm5nX2RvbmUgdG8gbm90IHJlcXVpcmUgcHJuZyogdG8gYmUgbm9uLW51bGwKKyAgICAgICAtLSBTcHJ1Y2VkIHVwIG15Y3J5cHRfY3VzdG9tLmggdG8gdHJhcCBtb3JlIGVycm9ycyBhbmQgYWxzbyBoZWxwIHByZXZlbnQgTFRNU1NFIGZyb20gYmVpbmcgZGVmaW5lZAorICAgICAgICAgIG9uIG5vbi1pMzg2IHBsYXRmb3JtcyBieSBhY2NpZGVudC4KKyAgICAgICAtLSBBZGRlZCBSU0EvRUNDL0RIIHNwZWVkIHRlc3RzIHRvIHg4Nl9wcm9mIGFuZCBjbGVhbmVkIGl0IHVwIHRvIGJ1aWxkIHdpdGggemVybyB3YXJuaW5ncworICAgICAgIC0tIENoYW5nZWQgRm9ydHVuYSB0byBjb3VudCBvbmx5IGVudHJvcHkgW25vdCB0aGUgMiBieXRlIGhlYWRlcl0gYWRkZWQgdG8gcG9vbFswXSBpbnRvIHRoZSAKKyAgICAgICAgICByZXNlZWQgbWVjaGFuaXNtLiAgCisgICAgICAgLS0gQWRkZWQgImV4cG9ydF9zaXplIiBtZW1iZXIgdG8gcHJuZ19kZXNjcmlwdG9yIHRhYmxlcyBzbyB5b3UgY2FuIGtub3cgaW4gYWR2YW5jZSB0aGUgc2l6ZSBvZiAKKyAgICAgICAgICB0aGUgZXhwb3J0ZWQgc3RhdGUgZm9yIGFueSBnaXZlbiBQUk5HLiAgCisgICAgICAgLS0gUG9ydGVkIG92ZXIgcGF0Y2ggb24gTFRNIDAuMzAgW25vdCByZWFkeSB0byByZWxlYXNlIExUTSAwLjMxXSB0aGF0IGZpeGVzIGJ1ZyBpbiBtcF9tdWwoKS9tcF9kaXYoKQorICAgICAgICAgIHRoYXQgdXNlZCB0byByZXN1bHQgaW4gbmVnYXRpdmUgemVyb2VzIHdoZW4geW91IG11bHRpcGxpZWQgemVybyBieSBhIG5lZ2F0aXZlIGludGVnZXIuICAKKyAgICAgICAgICAocGF0Y2ggZHVlIHRvICJXb2xmZ2FuZyBFaHJoYXJkdCIgPFdvbGZnYW5nLkVocmhhcmR0QG11bmljaC5uZXRzdXJmLmRlPikKKyAgICAgICAtLSBGaXhlZCByc2FfKmRlY3J5cHRfa2V5KCkgYW5kIHJzYV8qdmVyaWZ5X2hhc2goKSB0byBkZWZhdWx0IHRvIGludmFsaWQgInN0YXQiIG9yICJyZXMiLiAgVGhpcyB3YXkKKyAgICAgICAgICBpZiBhbnkgb2YgdGhlIGhpZ2hlciBsZXZlbCBmdW5jdGlvbnMgZmFpbCBbYmVmb3JlIHlvdSBnZXQgdG8gdGhlIHBhZGRpbmddIHRoZSByZXN1bHQgd2lsbCBiZSBpbgorICAgICAgICAgIGEga25vd24gc3RhdGVdLiAgQXBwbGllZCB0byBib3RoIHYyIGFuZCB2MS41IHBhZGRpbmcgaGVscGVycy4KKyAgICAgICAtLSBBZGRlZCBNQUNzIHRvIHg4Nl9wcm9mCisgICAgICAgLS0gRml4ZWQgdXAgIndhcm5pbmdzIiBpbiB4ODZfcHJvZiBhbmQgdHZfZ2VuCisgICAgICAgLS0gQWRkZWQgYSAicHJvZmlsZWQiIHRhcmdldCBiYWNrIFtmb3IgR0NDIDMuNCBhbmQgSUNDIHY4XS4gIERvZXNuJ3Qgc2VlbSB0byBoZWxwIGJ1dCBtaWdodCBiZSB3b3J0aAorICAgICAgICAgIHRpbmtlcmluZyB3aXRoLgorICAgICAgIC0tIEJlZWZlZCB1cCBsb2FkL3N0b3JlIHRlc3QgaW4gZGVtb3MvdGVzdAorCisgICAgICAgKysgTmV3IG5vdGUsIGluIG9yZGVyIHRvIHVzZSB0aGUgb3B0aW1pemVkIExPQUQvU1RPUkUgbWFjcm9zIHlvdXIgcGxhdGZvcm0KKyAgICAgICAgICBtdXN0IHN1cHBvcnQgdW5hbGlnbmVkIDMyLzY0IGJpdCBsb2FkL3N0b3Jlcy4gIFRoZSB4ODZzIHN1cHBvcnQgdGhpcworICAgICAgICAgIGJ1dCBzb21lIFtBUk0gZm9yIGluc3RhbmNlXSBkbyBub3QuICBJZiB5b3VyIHBsYXRmb3JtIGNhbm5vdCBwZXJmb3JtCisgICAgICAgICAgdW5hbGlnbmVkIG9wZXJhdGlvbnMgeW91IG11c3QgdXNlIHRoZSBlbmRpYW4gbmV1dHJhbCBjb2RlIHdoaWNoIGlzIHNhZmUgZm9yIAorICAgICAgICAgIGFueSBzb3J0IG9mIHBsYXRmb3JtLgorCitKdWx5IDIzcmQsIDIwMDQKK3YwLjk3YiAtLSBBZGRlZCBQS0NTICMxIHYxLjUgUlNBIGVuY3J5cHQvc2lnbiBoZWxwZXJzIChsaWtlIHJzYV9zaWduX2hhc2gsIGV0Yy4uLikKKyAgICAgICAtLSBBZGRlZCBtaXNzaW5nIHBybmcgY2hlY2sgdG8gcnNhX2RlY3J5cHRfa2V5KCkgW25vdCBjcml0aWNhbCBhcyBJIGRvbid0IHVzZSAKKyAgICAgICAgICBkZXNjcmlwdG9ycyBkaXJlY3RseSBpbiB0aGF0IGZ1bmN0aW9uXQorICAgICAgIC0tIE1lcmdlZCBpbiBMVE0tU1NFLCBkZWZpbmUgTFRNU1NFIGJlZm9yZSB5b3UgYnVpbGQgYW5kIHlvdSB3aWxsIGdldCBTU0UyIG9wdGltaXplZCBtYXRoIDstKQorICAgICAgICAgIChyb3VnaGx5IDN4IGZhc3RlciBvbiBhIFA0IE5vcnRod29vZCkuICBCeSBkZWZhdWx0IGl0IHdpbGwgY29tcGlsZSBhcyBJU08gQyBwb3J0YWJsZQorICAgICAgICAgIGNvZGUgKHdoZW4gTFRNU1NFIGlzIHVuZGVmaW5lZCkuCisgICAgICAgLS0gRml4ZWQgYnVnIGluIGx0Y190b21tYXRoLmggd2hlcmUgSSBoYWQgdGhlIGthcmEvdG9vbSBjdXRvZmZzIG5vdCBtYXJrZWQgYXMgYGBleHRlcm4nJworICAgICAgICAgIFRoYW5rcyB0byAiU3RlZmFuIEFyZW50eiIgPHN0ZWZhbiBhdCBvcmdhbmljbmV0d29yay5uZXQ+CisgICAgICAgLS0gU3RldmVuIERha2UgPHNjZEBicm9rZWQub3JnPiBhbmQgUmljaGFyZCBBbWFja2VyIDxyYW1hY2tlckB5YWhvby5jb20+IHN1Ym1pdHRlZCBwYXRjaGVzIHRvIAorICAgICAgICAgIGZpeCBwa2NzXzVfMigpLiAgSXQgbm93IG1hdGNoZXMgdGhlIG91dHB1dCBvZiBhbm90aGVyIGNyeXB0byBsaWJyYXJ5LiAgV2hvb3BzLi4uIGhlaGVoZQorICAgICAgIC0tIFVwZGF0ZWQgUFJORyBhcGkuICBBZGRlZCBGb3J0dW5hIFBSTkcgdG8gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIFBSTkdzCisgICAgICAgLS0gRml4ZWQgdXAgdGhlIGRlc2NyaXB0b3IgdGFibGVzIHNpbmNlIGdsb2JhbHMgYXJlIGF1dG9tYXRpY2FsbHkgemVybydlZCBvbiBzdGFydHVwLgorICAgICAgIC0tIENoYW5nZWQgUkM0IHRvIHN0b3JlIGl0J3Mgb3V0cHV0LiAgSWYgeW91IHdhbnQgdG8gZW5jcnlwdCB3aXRoIFJDNAorICAgICAgICAgIHlvdSdsbCBoYXZlIHRvIGRvIHRoZSBYT1IgeW91cnNlbGYuCisgICAgICAgLS0gRml4ZWQgYnVmZmVyIG92ZXJmbG93cy9vdmVycnVucyBpbiB0aGUgSE1BQyBjb2RlLiAgCisKKyAgICAgICArKyBBUEkgY2hhbmdlIGZvciB0aGUgUFJOR3MgdGhlcmUgbm93IGlzIGEgZG9uZSgpIGZ1bmN0aW9uIHBlciBQUk5HLiAgWW91CisgICAgICAgICAgc2hvdWxkIGNhbGwgaXQgd2hlbiB5b3UgYXJlIGRvbmUgd2l0aCBhIHBybmcgc3RhdGUuICBTbyBmYXIgaXQncworICAgICAgICAgIG5vdCBhYnNvbHV0ZWx5IHJlcXVpcmVkICh3b24ndCBjYXVzZSBwcm9ibGVtcykgYnV0IGlzIGEgZ29vZCBpZGVhIHRvCisgICAgICAgICAgc3RhcnQuICAKKworCitKdW5lIDIzcmQsIDIwMDQKK3YwLjk3YSArKyBGaXhlZCBzZXZlcmFsIHBvdGVudGlhbGx5IGNyaXBwbGluZyBidWdzLi4uIFtyZWFkIG9uXQorICAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBPQUVQIGRlY29kZXIgdGhhdCB3b3VsZCBpbmNvcnJlY3RseSByZXBvcnQgCisgICAgICAgICAgYnVmZmVyIG92ZXJmbG93cy4gW1poaSBDaGVuXQorICAgICAgIC0tIEZpeGVkIGhlYWRlcnMgd2hpY2ggaGFkIHZhcmlvdXMgQysrIG1pc3NpbmcgW2V4dGVybiAiQyJdJ3MKKyAgICAgICAtLSBBZGRlZCAiZXh0ZXJuIiB0byBzaGEzODRfZGVzYyBkZXNjcmlwdG9yIHdoaWNoIEkgcmVtb3ZlZCBieSBtaXN0YWtlCisgICAgICAgLS0gRml4ZWQgYnVncyBpbiBFTkRJQU5fQklHIG1hY3JvcyB1c2luZyB0aGUgd3JvbmcgYnl0ZSBvcmRlciBbTWF0dCBKb2huc3Rvbl0KKyAgICAgICAtLSBVcGRhdGVkIHRpZ2VyLmMgYW5kIGRlcy5jIHRvIG5vdCBzaGFkb3cgInJvdW5kIiB3aGljaCBpcyBpbnRyaW5zaWMgb24KKyAgICAgICAgICBzb21lIEMgY29tcGlsZXJzLgorICAgICAgIC0tIFVwZGF0ZWQgZGVtb3MvdGVzdC9yc2FfdGVzdC5jIHRvIHRlc3QgdGhlIFJTQSBmdW5jdGlvbmFsaXR5IGJldHRlcgorICAgICAgICsrIFRoaXMgdXBkYXRlIGhhcyBiZWVuIHRlc3RlZCB3aXRoIEdDQyBbdjMuMy4zXSwgSUNDIFt2OF0gYW5kIE1TVkMgW3Y2K1NQNl0gCisgICAgICAgICAgYWxsIG9uIGEgeDg2IFA0ICBbR0NDL0lDQyB0ZXN0ZWQgaW4gR2VudG9vIExpbnV4LCBNU1ZDIGluIFdpblhQXQorICAgICAgICsrIE91dGNvbWU6IFRoZSBidWcgWmhpIENoZW4gcG9pbnRlZCBvdXQgaGFzIGJlZW4gZml4ZWQuICBTbyBoYXZlIHRoZSBidWdzCisgICAgICAgICAgdGhhdCBNYXR0IEpvaG5zdG9uIGZvdW5kLiAgCisKK0p1bmUgMTl0aCwgMjAwNAordjAuOTcgIC0tIFJlbW92ZWQgc3B1cmlvdXMgdW51c2VkIGZpbGVzIFthcnJnIV0KKyAgICAgICAtLSBQYXRjaGVkIGJ1ZmZlciBvdmVyZmxvdyBpbiB0aW1fZXhwdG1vZCgpCisgICAgICAgLS0gRml4ZWQgYnVmZmVyIG92ZXJydW4gYnVnIGluIHBrY3NfMV92MTVfZXNfZGVjb2RlKCkKKyAgICAgICAtLSBSZWR1Y2VkIHN0YWNrIHVzYWdlIGluIFBLQ1MgIzEgdjIuMCBwYWRkaW5nIGZ1bmN0aW9ucyAoYnkgc2V2ZXJhbCBLQnMpCisgICAgICAgLS0gUmVtb3ZlZCB1c2VsZXNzIGV4dGVybidzIHRoYXQgd2VyZSBhbiBhcnRpZmFjdCBmcm9tIHRoZSBwcm9qZWN0IHN0YXJ0Li4uIDstKQorICAgICAgIC0tIFJlcGxhY2VkIG1lbWNweS9tZW1zZXQgd2l0aCBYTUVNQ1BZIGFuZCBYTUVNU0VUIGZvciBncmVhdGVyIGZsZXhpYmlsaXR5CisgICAgICAgLS0gZml4ZWQgYnVncyBpbiBobWFjX2RvbmUoKS9obWFjX2luaXQoKS9bdmFyaW91cyBvdGhlcnMoKV0gd2hlcmUgSSBkaWRuJ3QgdHJhcCBlcnJvcnMgCisgICAgICAgLS0gUmVkdWNlZCBzdGFjayB1c2FnZSBpbiBPTUFDL1BNQUMvSE1BQy9FQVgvT0NCL1BLQ1MjNSBieSBtYWxsb2NpbmcgYW55IHNpZ25pZmljYW50IHNpemVkCisgICAgICAgICAgYXJyYXlzIChlLmcuID4gMTAwIGJ5dGVzIG9yIHNvKS4gIE9ubHkgaW4gbm9uLWNyaXRpY2FsIGZ1bmN0aW9ucyAoZS5nLiBlYXhfaW5pdCgpKQorICAgICAgIC0tICJaaGkgQ2hlbiIgPHpoaUBtYXNzaXZlaW5jb3Jwb3JhdGVkLmNvbT4gcG9pbnRlZCBvdXQgdGhhdCByc2FfZGVjcnlwdF9rZXkoKSByZXF1aXJlcworICAgICAgICAgIGFuIGluY29ycmVjdCBvdXRwdXQgc2l6ZSAodG9vIGxhcmdlKS4gIEZpeGVkLgorICAgICAgIC0tIEFkZGVkIGEgInByZXR0eSIgdGFyZ2V0IHRvIHRoZSBHQ0MgbWFrZWZpbGUuICBSZXF1aXJlcyBQRVJMLiAgSXQgaXMgTkVBVCEKKyAgICAgICAtLSBNaW5vciB1cGRhdGVzIHRvIGNoMSBvZiB0aGUgbWFudWFsLgorICAgICAgIC0tIENsZWFuZWQgdXAgdGhlIGluZGVudGF0aW9uIGFuZCBhZGRlZCBjb21tZW50cyB0byByc2FfbWFrZV9rZXkoKSwgcnNhX2V4cHRtb2QoKSBhbmQgCisgICAgICAgICAgcnNhX3ZlcmlmeV9oYXNoKCkKKyAgICAgICAtLSBVcGRhdGVkIG1ha2VmaWxlLmljYyBzbyB0aGUgImluc3RhbGwiIHRhcmdldCB3b3VsZCB3b3JrIDstKQorICAgICAgIC0tIFJlbW92ZWQgZGVtb3MvdGVzdC5jIFtkZXByZWNhdGVkIGZyb20gZGVtb3MvdGVzdC90ZXN0LmNdCisgICAgICAgLS0gQ2hhbmdlZCBNQVhCTE9DS1NJWkUgZnJvbSAxMjggdG8gNjQgdG8gcmVmbGVjdCB0aGUgdHJ1ZSBzaXplLi4uCisKK01heSAzMHRoLCAyMDA0Cit2MC45NiAgLS0gUmVtb3ZlZCBHRiBhbmQgS2V5cmluZyBjb2RlCisgICAgICAgLS0gRXh0ZW5kZWQgT0FFUCBkZWNvZGVyIHRvIGRpc3Rpbmd1aXNoIGJldHRlciBbYW5kIHVzZSBhIG1vcmUgdW5pZm9ybSBBUEldCisgICAgICAgLS0gQ2hhbmdlZCBQU1MvT0FFUCBBUEkgc2xpZ2h0bHkgdG8gYmUgbW9yZSBjb25zaXN0ZW50IHdpdGggb3RoZXIgUEsgZnVuY3Rpb25zIChvcmRlciBvZiBhcmd1bWVudHMpCisgICAgICAgLS0gcnNhX2V4cHRtb2QoKSBub3cgcGFkcyB3aXRoIGxlYWRpbmcgemVyb2VzIGFzIHBlciBJMk9TUC4KKyAgICAgICAtLSBhZGRlZCBlcnJvciBjaGVja2luZyB0byB5YXJyb3cgY29kZQorICAgICAgIC0tICBwb2ludGVkIG91dCB0aGF0IHRvbW1hdGguaCBmcm9tIHRoaXMgZGlzdHJvIHdpbGwgb3ZlcndyaXRlIHRvbW1hdGguaAorICAgICAgICAgIGZyb20gbGlidG9tbWF0aC4gIEkgY2hhbmdlZCB0aGlzIHRvIGx0Y190b21tYXRoLmggdG8gYXZvaWQgYW55IHN1Y2ggcHJvYmxlbXMuCisgICAgICAgLS0gRml4ZWQgYnVnIGluIFBTUyBlbmNvZGVyL2RlY29kZXIgdGhhdCBkaWRuJ3QgaGFuZGxlIHRoZSBNU0IgcHJvcGVybHkKKyAgICAgICAtLSByZWZhY3RvcmVkIEFFUywgbm93IHNwb3J0cyBhbiAiZW5jcnlwdCBvbmx5IiBkZXNjcmlwdG9yIHdoaWNoIHVzZXMgaGFsZiBhcyBtdWNoIGNvZGUgc3BhY2UuCisgICAgICAgLS0gbW9kZGVkIFlhcnJvdyB0byB0cnkgYW5kIHVzZSByZWZhY3RvcmVkIEFFUyBjb2RlIGFuZCBhZGRlZCBXSElSTFBPT0wgc3VwcG9ydCAoZCdvaCkgOy0pCisgICAgICAgLS0gdXBkYXRlZCBFQ0IsIE9DQiBhbmQgQ0JDIGRlY3J5cHQgZnVuY3Rpb25zIHRvIGRldGVjdCB3aGVuICJlbmNyeXB0IG9ubHkiIGRlc2NyaXB0b3IgaXMgdXNlZC4KKyAgICAgICAtLSByZXBsYWNlZCBvbGQgUlNBIGNvZGUgd2l0aCBuZXcgY29kZSB0aGF0IHVzZXMgUEtDUyAjMSB2Mi4wIHBhZGRpbmcKKyAgICAgICAtLSByZXBsYWNlZCBvbGQgdGVzdCBoYXJuZXNzIHdpdGggbmV3IG92ZXItZW5naW5lZXInZWQgb25lIGluIC9kZW1vcy90ZXN0LworICAgICAgIC0tIHVwZGF0ZWQgY2JjL2NmYi9vZmIvY3RyIGNvZGUgd2l0aCBzZXRpdi9nZXRpdiBmdW5jdGlvbnMgdG8gY2hhbmdlL3JlYWQgdGhlIElWIHdpdGhvdXQgcmUta2V5aW5nLgorICAgICAgIC0tIEFkZGVkIFBLQ1MgIzEgdjEuNSBSU0EgZW5jcnlwdGlvbiBhbmQgc2lnbmF0dXJlIHBhZGRpbmcgcm91dGluZXMKKyAgICAgICAtLSBBZGRlZCBERVIgT0lEJ3MgdG8gbW9zdCBoYXNoIGRlc2NyaXB0b3JzIChhcyBtYW55IGFzIEkgY291bGQgZmluZCkgCisgICAgICAgLS0gbW9kZGVkIHJzYV9leHB0bW9kKCkgdG8gdXNlIHRpbWluZy1yZXNpbGllbnQgdGltX2V4cHRtb2QoKSB3aGVuIGRvaW5nIHByaXZhdGUga2V5IG9wZXJhdGlvbnMgCisgICAgICAgICAgYWRkZWQgI2RlZmluZSBSU0FfVElNSU5HIHdoaWNoIGNhbiB0dXJuIG9uL29mZiB0aGlzIGZlYXR1cmUuCisgICAgICAgLS0gTm8gbW9yZSBjb25maWcucGwgc28gcGxlYXNlIGp1c3QgcmVhZCBteWNyeXB0X2N1c3RvbS5oIGZvciBidWlsZC10aW1lIHR3ZWFrcworICAgICAgIC0tIFNtYWxsIHVwZGF0ZSB0byByYW5kX3ByaW1lKCkKKyAgICAgICAtLSBVcGRhdGVkIHNoYTEsIG1kNSBhbmQgc2hhMjU2IHNvIHRoZXkgYXJlIHNtYWxsZXIgd2hlbiBTTUFMTF9DT0RFIGlzIGRlZmluZWQuICBJZiB5b3Ugd2FudCBzcGVlZCB0aG91Z2gsCisgICAgICAgICAgeW91J3JlIGdvaW5nIHRvIGhhdmUgdG8gdW5kZWZpbmUgU01BTExfQ09ERSA7LSkKKyAgICAgICAtLSBXb3JrZWQgb3ZlciBBRVMgc28gdGhhdCBpdCdzIGV2ZW4gc21hbGxlciBub3cgW2luIGJvdGggbW9kZXNdLgorICAgICAgIAorTWF5IDEydGgsIDIwMDQKK3YwLjk1ICAtLSBPcHRpbWl6ZWQgQUVTIGFuZCBXSElSTFBPT0wgZm9yIFNNQUxMX0NPREUgYnkgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUgZmFjdAorICAgICAgICAgIHRoZSB0cmFuc2Zvcm1zIGFyZSBjaXJjdWxhbnQuICBBRVMgZHJvcHBlZCA1S0IgYW5kIFdISVJMUE9PTCBkcm9wcGVkIDEzS0IKKyAgICAgICAgICB1c2luZyB0aGUgZGVmYXVsdCBidWlsZCBvcHRpb25zIG9uIHRoZSB4ODYuCisgICAgICAgLS0gVXBkYXRlZCBlYXggc28gdGhlIGVheF9kb25lKCkgd291bGQgY2xlYXIgdGhlIHN0YXRlIFtsaWtlIGhtYWMscG1hYyxvY2JdIHdoZW4KKyAgICAgICAgICBDTEVBTl9TVEFDSyBoYXMgYmVlbiBkZWZpbmVkLgorICAgICAgIC0tIGFkZGVkIExUQ19URVNUIHN1cHBvcnQgdG8gcm1kMTYwCisgICAgICAgLS0gdXBkYXRlcyB0byBteWNyeXB0X3BrLmgKKyAgICAgICAtLSB1cGRhdGVkIHJhbmRfcHJpbWUoKSB0byBmYWNpbGlhdGUgbWFraW5nIFJTQSBjb21wb3NpdGVzIAorICAgICAgIC0tIERTQS9SU0Egbm93IG1ha2VzIGNvbXBvc2l0ZXMgb2YgdGhlIGV4YWN0IHNpemUgZGVzaXJlZC4KKyAgICAgICAtLSBSZWZhY3RvcmVkIHF1aXRlIGEgYml0IG9mIHRoZSBjb2RlLCBmZXdlciBmdW5jdGlvbnMgcGVyIEMgZmlsZQorICAgICAgIC0tIGNsZWFuZWQgdXAgdGhlIG1ha2VmaWxlcyB0byBvcmdhbml6ZSB0aGUgb2JqZWN0cyBsb2dpY2FsbHkKKyAgICAgICAtLSBhZGRlZCBJQ0MgbWFrZWZpbGUgYWxvbmcgd2l0aCAicHJvZmlsZWQiIHRhcmdldHMgZm9yIGJvdGggR05VIGFuZCBJQ0MgY29tcGlsZXJzCisgICAgICAgLS0gTWFya2VkIGZ1bmN0aW9ucyBmb3IgcmVtb3ZhbCBiZWZvcmUgdjEuMDAgc2VlIFBMQU4gZm9yIG1vcmUgaW5mb3JtYXRpb24KKyAgICAgICAtLSBHQ0MgMy40LjAgdGVzdGVkIGFuZCBzZWVtcyB0byB3b3JrCisgICAgICAgLS0gQWRkZWQgUEtDUyAjNSBzdXBwb3J0CisgICAgICAgLS0gRml4ZWQgdHlwbyBpbiBjb21tZW50IGhlYWRlciBvZiAuQyBmaWxlcyAgOy0pCisgICAgICAgLS0gQWRkZWQgUEtDUyAjMSBPQUVQIGFuZCBQU1Mgc3VwcG9ydC4gIAorICAgICAgIAorRmViIDIwdGgsIDIwMDQKK3YwLjk0ICAtLSByZW1vdmVkIHVudXNlZCB2YXJpYWJsZXMgZnJvbSBvY2IuYyBhbmQgZml4ZWQgaXQgdG8gbWF0Y2gga25vd24gdGVzdCB2ZWN0b3JzLgorICAgICAgIC0tIEFkZGVkIFBNQUMgc3VwcG9ydCwgbWlub3IgY2hhbmdlcyB0byBPTUFDL0VBWCBjb2RlIFtJIHRoaW5rLi4uLl0KKyAgICAgICAtLSBUZWFtZWQgdXAgd2l0aCBCcmlhbiBHbGFkbWFuLiAgSGlzIGNvZGUgdmVyaWZpZXMgYWdhaW5zdCBteSB2ZWN0b3JzIGFuZCBteSBjb2RlCisgICAgICAgICAgdmVyaWZpZXMgYWdhaW5zdCBoaXMgdGVzdCB2ZWN0b3JzLiAgSGF6YWEgZm9yIGNvLW9wZXJhdGlvbiEKKyAgICAgICAtLSBWYXJpb3VzIHNtYWxsIGNoYW5nZXMgKGFkZGVkIG1pc3NpbmcgQVJHQ0hLcyBhbmQgY2xlYW5lZCB1cCBpbmRlbnRhdGlvbikKKyAgICAgICAtLSBPcHRpbWl6YXRpb24gdG8gYmFzZTY0LCByZW1vdmVkIHVudXNlZCB2YXJpYWJsZSAiYyIKKyAgICAgICAtLSBBZGRlZCBiYXNlNjQgZ2VuIHRvIGRlbW9zL3R2X2dlbi5jCisgICAgICAgLS0gRml4IHRvIGRlbW9zL3g4Nl9wcm9mLmMgdG8gY29ycmVjdGx5IGlkZW50aWZ5IHRoZSBpMzg2IGFyY2hpdGVjdHVyZS4uLiB3ZWlyZC4uLgorICAgICAgIC0tIEZpeGVkIHVwIGFsbCBvZiB0aGUgUEsgY29kZSBieSBhZGRpbmcgbWlzc2luZyBlcnJvciBjaGVja2luZywgcmVtb3ZlZCAicmVzIiB2YXJpYWJsZXMsCisgICAgICAgICAgc2hydW5rIHNvbWUgc3RhY2sgdmFyaWFibGVzLCByZW1vdmVkIG5vbi1yZXF1aXJlZCBzdGFjayB2YXJpYWJsZXMgYW5kIGFkZGVkIHByb3BlcgorICAgICAgICAgIGVycm9yIGNvbnZlcnNpb24gZnJvbSBNUEkgdG8gTFRDIGNvZGVzLiAgSSBhbHNvIHNwb3R0ZWQgYSBmZXcgIm9mZiBieSBvbmUiIGVycm9yCisgICAgICAgICAgY2hlY2tpbmcgd2hpY2ggY291bGQgaGF2ZSBiZWVuIHVzZWQgdG8gZm9yY2UgdGhlIGNvZGUgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YKKyAgICAgICAgICB0aGUgYnVmZmVyIChpbiB0aGVvcnksIGhhdmVuJ3QgY2hlY2tlZCBpZiBpdCB3b3VsZCB3b3JrKSBieSBhIGZldyBieXRlcy4KKyAgICAgICAtLSBBZGRlZCBjaGVja3MgdG8gT1VUUFVUX0JJR05VTSBzbyB0aGUgKl9leHBvcnQoKSBmdW5jdGlvbnMgY2Fubm90IG92ZXJmbG93IHRoZSBvdXRwdXQgYW5kIEkgCisgICAgICAgICAgYWxzbyBtb2RkZWQgaXQgc28gaXQgc3RvcmVzIGluIHRoZSBvdXRwdXQgcHJvdmlkZWQgdG8gdGhlIGZ1bmN0aW9uICh0aGF0IGlzIG5vdCBvbgorICAgICAgICAgIHRoZSBsb2NhbCBzdGFjaykgd2hpY2ggc2F2ZXMgbWVtb3J5IGFuZCB0aW1lLgorICAgICAgIC0tIE1hZGUgU0FGRVIgZGVmYXVsdCB0byBkaXNhYmxlZCBmb3Igbm93IChwbGFucyBhcmUgdG8gY2xlYW5ob3VzZSB3cml0ZSBhbiBpbXBsZW1lbnRhdGlvbiBsYXRlcikKKyAgICAgICAtLSBBZGRlZCB0aGUgNTEyLWJpdCBvbmUtd2F5IGhhc2ggV0hJUkxQT09MIHdoaWNoIGNsb2NrcyBpbiBhdCAxMzggY3ljbGVzIHBlciBieXRlIG9uIG15CisgICAgICAgICAgQXRobG9uIFhQIFtmb3IgY29tcGFyaXNvbiwgU0hBLTUxMiBjbG9ja3MgaW4gYXQgNzcgY3ljbGVzIHBlciBieXRlXS4gIFRoaXMgY29kZSB1c2VzIHRoZSAKKyAgICAgICAgICB0ZWFtcyBuZXcgc2JveCBkZXNpZ24gKG5vdCB0aGUgb3JpZ2luYWwgTkVTU0lFIG9uZSkuCisgICAgICAKKworSmFuIDI1dGgsIDIwMDQKK3YwLjkzICAtLSBbbm90ZTogZGVsZXRlZCB2MC45MyBjaGFuZ2VzIGJ5IGFjY2lkZW50Li4uIHJlY3JlYXRpbmcgZnJvbSBtZW1vcnkuLi5dCisgICAgICAgLS0gRml4IHRvIFJDMiB0byBub3QgZGVmZXJlbmNlIHBvaW50ZXIgYmVmb3JlIEFSR0NISworICAgICAgIC0tIEZpeCB0byBOT0VLRU9OIHRvIG1hdGNoIHB1Ymxpc2hlZCB0ZXN0IHZlY3RvcnMgYXMgd2VsbCBhcyBjbGVhbmVkIHVwIHRoZSBjb2RlIGEgYml0CisgICAgICAgLS0gT3B0aW1pemVkIFR3b2Zpc2ggW2Rvd24gdG8gMjggY3ljbGVzL2J5dGUgb24gbXkgYm94XSBhbmQgQmxvd2Zpc2gKKyAgICAgICAtLSBGaXggdG8gT01BQyB0byB0ZXN0IGNpcGhlciBibG9jayBzaXplIGZpcnN0IFtwcmV2ZW50cyB3YXN0aW5nIGFueSB0aW1lXQorICAgICAgIC0tIEFkZGVkIG1vcmUgT01BQyB0ZXN0IHZlY3RvcnMKKyAgICAgICAtLSBBZGRlZCBFQVggRW5jcnlwdCtBdXRoZW50aWNhdGUgc3VwcG9ydAorICAgICAgIC0tIEZpeCB0byBEU0EgdG8gY2hlY2sgcmV0dXJuIG9mIGEgZmV3IExUTSBmdW5jdGlvbnMgSSBmb3Jnb3QgW21wX3RvX3Vuc2lnbmVkX2Jpbl0KKyAgICAgICAtLSBBZGRlZCBjb21tb24gaGVhZGVycyB0byBhbGwgQyBmaWxlcworICAgICAgIC0tIENUUiBtb2RlIHN1cHBvcnRzIGJpZyBhbmQgbGl0dGxlIFtkZWZhdWx0XSBlbmRpYW4gY291bnRlcnMgbm93LiAgCisgICAgICAgLS0gZml4IHRvIGZpbmRfY2lwaGVyX2FueSgpIHNvIHRoYXQgaXQgY2FuIGhhbmRsZSBhIGZyYWdtZW50ZWQgY2lwaGVyX2Rlc2NyaXB0b3IgdGFibGUuCisgICAgICAgLS0gYWRkZWQgZmluZF9oYXNoX2FueSgpIGFraW4gdG8gZmluZF9jaXBoZXJfYW55KCkuCisgICAgICAgLS0gQWRkZWQgRUFYIGNvZGUgdG8gZGVtb3MvdHZfZ2VuLmMgIEhhemFhISAKKyAgICAgICAtLSBSZW1vdmVkIFNPTlkgZGVmaW5lcyBhbmQgZmlsZXMgZnJvbSBjb2RlYmFzZS4KKyAgICAgICAtLSBBZGRlZCBPQ0Igc3VwcG9ydCBbcGF0ZW50cyBiZSBkYW1uZWRdIGFuZCB0byBkZW1vcy90dl9nZW4uYworICAgICAgIC0tIE1lcmdlIGFsbCBvZiB0aGUgSU5QVVQvT1VUUFVUIEJJR05VTSBtYWNyb3MgKGxlc3MgdG9jKSBpbnRvIG15Y3J5cHRfcGsuaAorICAgICAgIC0tIE1hZGUgYXBwcm9wcmlhdGUgY2hhbmdlcyB0byB0aGUgZGVidWcgc3RyaW5nIGluIGNyeXB0LmMKKworRGVjIDI0dGgsIDIwMDMKK3YwLjkyICAtLSBVcGRhdGVkIHRoZSBjb25maWcucGwgc2NyaXB0IHNvIHRoZSBvcHRpb25zIGhhdmUgbW9yZSBkZXRhaWxzLgorICAgICAgIC0tIFVwZGF0ZWQgZGVtb3MvdHZfZ2VuIHRvIGluY2x1ZGUgUklQRU1EIGhhc2hlcworICAgICAgIC0tIFVwZGF0ZWQgVHdvZmlzaCBzbyB3aGVuIFRXT0ZJU0hfQUxMX1RBQkxFUyBpcyBkZWZpbmVkIGEgcHJlLWNvbXB1dGVkIFJTIHRhYmxlCisgICAgICAgICAgaXMgaW5jbHVkZWQgW3NwZWVkdXA6IHNsaWdodCwgYWJvdXQgNGsgY3ljbGVzIG9uIG15IEF0aGxvbl0uCisgICAgICAgLS0gUmUtd3JvdGUgdGhlIHR3b2Zpc2ggbGFyZ2Uga2V5IGdlbmVyYXRpb24gW3RoZSBmb3VyIDh4MzIga2V5IGRlcGVuZGVudCB0YWJsZXNdLiAgTm93IGFib3V0IHR3aWNlIGFzIGZhc3QuCisgICAgICAgICAgV2l0aCBib3RoIG9wdGltaXphdGlvbnMgW2UuZy4gVFdPRklTSF9BTExfVEFCTEVTIGRlZmluZWRdIGEgMTI4LWJpdCBUd29maXNoIGtleSBjYW4gbm93IGJlIHNjaGVkdWxlZAorICAgICAgICAgIGluIDI2LDAwMCBjeWNsZXMgb24gbXkgQXRobG9uIFhQIFthcyBvcHBvc2VkIHRvIDQ5LDAwMCBiZWZvcmVdIHdoZW4gb3B0aW1pemVkIGZvciBzaXplLgorICAgICAgIC0tIGNvbmZpZy5wbCBoYXMgYmVlbiB1cGRhdGVkIHNvIHJtZDEyOC5vIGFuZCBybWQxNjAubyBhcmUgb2JqZWN0cyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgW29vcHNdCisgICAgICAgLS0gQW5kcmV3IE1hbm4gZm91bmQgYSBidWcgaW4gcnNhX2V4cHRtb2QoKSB3aGljaCB3b3VsZG4ndCBpbmRpY2F0ZSBpZiB0aGUgd3JvbmcgdHlwZSBvZiBrZXkgd2FzIHNwZWNpZmllZAorICAgICAgICAgIChlLmcuIG5vdCBQS19QUklWQVRFIG9yIFBLX1BVQkxJQykKKyAgICAgICAtLSBGaXhlZCB1cCBkZW1vcy94ODZfcHJvZiBzbyBpdCBzb3J0cyB0aGUgb3V0cHV0IG5vdyA6LSkgIAorICAgICAgIC0tIFRoZSBwcm9qZWN0IGlzIG5vdyBwb3dlcmVkIGJ5IHJhZGlvYWN0aXZlIHJ1YmJlciBwYW50cy4KKyAgICAgICAtLSBGaXhlZCBkaF9lbmNyeXB0X2tleSgpIHNvIGlmIHlvdSBwYXNzIGl0IGEgaGFzaCB3aXRoIGEgc21hbGxlciBvdXRwdXQgdGhhbiB0aGUgaW5wdXQga2V5IGl0IAorICAgICAgICAgIHdpbGwgcmV0dXJuIENSWVBUX0lOVkFMSURfSEFTSCBbdG8gbWF0Y2ggd2hhdCBlY2NfZW5jcnlwdF9rZXkoKSB3aWxsIGRvXQorICAgICAgIC0tIE1lcmdlIHRoZSBzdG9yZS9lbmNyeXB0IGtleSBwYXJ0IG9mIGVjY19lbmNyeXB0X2tleSgpIGFzIHBlciBkaF9lbmNyeXB0X2tleSgpIFtjYW4geW91IGd1ZXNzIHdoYXQgSSdtIHVwdG8/XQorICAgICAgIC0tIE1hc3NpdmUgdXBkYXRlcyB0byB0aGUgcHJpbWUgZ2VuZXJhdGlvbiBjb2RlLiAgSSB1c2UgdGhlIExUTSByYW5kb20gcHJpbWUgZnVuY3Rpb25zIFthbmQgcHJvdmlkZSBhIG5pY2UgCisgICAgICAgICAgaW50ZXJmYWNlIGJldHdlZW4gdGhlIExUQyBQUk5HJ3MgYW5kIHRoZSBMVE0gZ2VuZXJpYyBwcm5nIHByb3RvdHlwZV0uICBJIGFsc28gdXNlIGEgdmFyaWFibGUgbnVtYmVyIG9mIHRlc3RzCisgICAgICAgICAgZGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBzaXplLiAgVGhpcyBuaWNlbHkgc3BlZWRzIHVwIG1vc3QgcHJpbWUgZ2VuZXJhdGlvbi90ZXN0aW5nIHdpdGhpbiB0aGUgbGlicmFyeS4KKyAgICAgICAtLSBBZGRlZCBTSEEtMjI0IHRvIHRoZSBsaXN0IG9mIGhhc2hlcy4KKyAgICAgICAtLSBNYWRlIEhNQUMgdGVzdCB2ZWN0b3JzIGNvbnN0YW50IGFuZCBzdGF0aWMgW3Rha2VzIFJPTSBzcGFjZSBpbnN0ZWFkIG9mIFJBTV0KKyAgICAgICAtLSBUaGlzIHJlbGVhc2Ugd2FzIGJyb3VnaHQgdG8geW91IGJ5IHRoZSBsZXR0ZXIgUCB3aGljaCBzdGFuZHMgZm9yIFBhdGVudCBJbmZyaW5nZW1lbnQuCisgICAgICAgLS0gQWRkZWQgZ2VuZXJpYyBIQVNIX1BST0NFU1MgbWFjcm8gdG8gbXljcnlwdF9oYXNoLmggd2hpY2ggc2ltcGxpZmllcyB0aGUgaGFzaCAicHJvY2VzcyIgZnVuY3Rpb25zCisgICAgICAgICAgSSBhbHNvIG9wdGltaXplZCB0aGUgY29tcHJlc3Npb24gZnVuY3Rpb25zIG9mIGFsbCBidXQgTUQyIHRvIG5vdCBwZXJmb3JtIGlucHV0IGNvcGllcyB3aGVuIGF2b2lkYWJsZS4KKyAgICAgICAtLSBSZW1vdmVkIHRoZSBkaXZpc2lvbiBmcm9tIHRoZSBCbG93ZmlzaCBzZXR1cCBmdW5jdGlvbiBbZHJvcHBlZCAzayBjeWNsZXMgb24gbXkgQXRobG9uXQorICAgICAgIC0tIEFkZGVkIHN0YWNrIGNsZWFuaW5nIHRvIHJpam5kYWVsLCBjYXN0NSBzbyBub3cgYWxsIGNpcGhlcnMgaGF2ZSBDTEVBTl9TVEFDSyBjb2RlLiAgCisgICAgICAgLS0gQWRkZWQgU2tpcGphY2sgdG8gdGhlIGxpc3Qgb2YgY2lwaGVycyBbbWFkZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIHRvIGRlbW9zL3Rlc3QuYywgZGVtb3MvdHZfZ2VuLmMgYW5kIAorICAgICAgICAgIGRlbW9zL3g4Nl9wcm9mLmNdCisgICAgICAgLS0gQWRkZWQgbWVjaGFuaWNhbCB0ZXN0aW5nIHRvIGNpcGhlciB0ZXN0IHZlY3RvciByb3V0aW5lcy4gIE5vdyBpdCBlbmNyeXB0cyAxMDAwIHRpbWVzLCB0aGVuIGRlY3J5cHRzIGFuZAorICAgICAgICAgIGNvbXBhcmVzLiAgQW55IGZhdWx0IChlLmcuIGJ1ZyBpbiBjb2RlLCBjb21waWxlcikgaW4gdGhlIHJvdXRpbmVzIGlzIGxpa2VseSB0byBzaG93IHRocm91Z2guICBEb2Vzbid0CisgICAgICAgICAgc3RyZXNzIHRlc3QgdGhlIGtleSBnZW4gdGhvdWdoLi4uCisgICAgICAgLS0gTWF0dCBKb2huc29uIGZvdW5kIGEgYnVnIGluIHRoZSBibG93ZmlzaC5jICBhcHBhcmVudGx5IEkgd2FzIG91dCBvZiBteSBtaW5kIGFuZCBwdXQgdHdvZmlzaCBkZWZpbmVzIGluIHRoZXJlIAorICAgICAgICAgIFRoZSBjb2RlIG5vdyBidWlsZHMgd2l0aCBhbnkgY29uZmlnLiAgVGhhbmtzLgorICAgICAgIC0tIEFkZGVkIE9NQUMxIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZSBzdXBwb3J0IHRvIHRoZSBsaWJyYXJ5LgorICAgICAgIC0tIFJlLXByb3RvdHlwZWQgdGhlIGhhc2ggInByb2Nlc3MiIGFuZCAiZG9uZSIgdG8gcHJldmVudCBidWZmZXIgb3ZlcmZsb3dzIFt3aGljaCBkb24ndCBzZWVtIGVhc3kgdG8gZXhwbG9pdF0uICAKKyAgICAgICAgICBVcGRhdGVkIEhNQUMgY29kZSB0byB1c2UgdGhlbSB0b28uICBIYXphYSEKKyAgICAgICAtLSBGaXhlZCBidWcgaW4gRUNDIGNvZGUgd2hpY2ggd291bGRuJ3QgZG8gYW4gX0FSR0NISyBvbiBzdGF0IGluIGVjY192ZXJpZnlfaGFzaCgpLgorICAgICAgIC0tIEZpeGVkIFt0ZW1wIGZpeF0gYnVnIGluIGFsbCBQSyB3aGVyZSB0aGUgT1VUUFVUX0JJR05VTSBtYWNyb3Mgd291bGQgbm90IHRyYXAgZXJyb3JzIG9uIHRoZSB0b191bnNpZ25lZF9iaW4gCisgICAgICAgICAgY29udmVyc2lvbiBbbm93IHJldHVybnMgQ1JZUFRfTUVNLCB3aWxsIGZpeCBpdCB1cCBiZXR0ZXIgbGF0ZXJdCisgICAgICAgLS0gQWRkZWQgRFNBIHRvIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBQSyBhbGdvcml0aG1zLiAgCisgICAgICAgLS0gRml4ZWQgdXAgdmFyaW91cyBjaXBoZXJzIHRvICYyNTUgdGhlIGlucHV0IGtleSBieXRlcyB3aGVyZSByZXF1aXJlZCBbZS5nLiB3aGVyZSB1c2VkIHRvIGluZGV4IGEgdGFibGVdIHRvIHByZXZlbnQKKyAgICAgICAgICBwcm9ibGVtcyBvbiBwbGF0Zm9ybXMgd2hlcmUgQ0hBUl9CSVQgIT0gOCAKKyAgICAgICAtLSBNZXJnZWQgaW4gTGliVG9tTWF0aCB2MC4yOAorICAgICAgIC0tIFVwZGF0ZWQgZGVtb3MveDg2X3Byb2YuYyB0byB1c2UgWWFycm93IGR1cmluZyB0aGUga2V5IHNjaGVkIHRlc3RpbmcgW3dhcyBob3JyaWJseSBzbG93IG9uIHBsYXRmb3JtcyB3aXRoIGJsb2NrYWJsZQorICAgICAgICAgIC9kZXYvcmFuZG9tXS4gCisgICAgICAgLS0gQWRkZWQgT01BQy9ITUFDIHRlc3RzIHRvIGRlbW9zL3R2X2dlbiBhbmQgSSBub3cgc3RvcmUgdGhlIG91dHB1dCBvZiB0aGlzIGluIG5vdGVzLyAKKyAgICAgICAtLSBGaXhlZCBhIGJ1ZyBpbiBjb25maWcucGwgdGhhdCB3b3VsZG4ndCBoYXZlIFRXT0ZJU0hfVEFCTEVTIGRlZmluZWQgYnkgZGVmYXVsdCAodG9vIG1hbnkgY29tbWFzIG9uIHRoZSBsaW5lKQorICAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBobWFjX2RvbmUoKS4gIEFwcGFyZW50bHkgRklQUy0xOTggW0hNQUNdIHNwZWNpZmllcyB0aGF0IHRoZSBvdXRwdXQgY2FuIGJlIHRydW5jYXRlZC4gIE15IGNvZGUKKyAgICAgICAgICB3b3VsZCBub3Qgc3VwcG9ydCB0aGF0IChkb2VzIG5vdyBqdXN0IGxpa2UgdGhlIG5ldyBPTUFDIGNvZGUpLgorICAgICAgIC0tIFJlbW92ZWQgImhhc2hzaXplIiBmcm9tIGhtYWNfc3RhdGUgYXMgaXQgd2Fzbid0IGJlaW5nIHVzZWQuCisgICAgICAgLS0gTWFkZSBkZW1vcy90ZXN0LmMgc3RvcCBpZiBPTUFDIG9yIEhNQUMgdGVzdHMgZmFpbCAoaW5zdGVhZCBvZiBqdXN0IHByaW50aW5nIGEgZmFpbGVkIG1lc3NhZ2UgYW5kIGtlZXAgZ29pbmcpLgorICAgICAgIC0tIFVwZGF0ZWQgbm90ZXMvdGVjaDAwMDMudHh0IHRvIHRha2UgaW50byBhY2NvdW50IHRoZSBleGlzdGVuY2Ugb2YgU2tpcGphY2sgW2Fsc28gSSBmaXhlZCBhIGZldyB0eXBvc10uCisgICAgICAgLS0gU2xpZ2h0IGNoYW5nZXMgdG8gTm9la2Vvbiwgd2l0aCBTTUFMTF9DT0RFIHVuZGVmaW5lZCBpdCB1c2VzIGEgZnVsbHkgdW5yb2xsZWQgdmVyc2lvbi4gIERyb3BwZWQgKzEwIGN5Y2xlcy9ieXRlCisgICAgICAgICAgb24gbXkgQXRobG9uICgzNSBjeWNsZXMgcGVyIGJ5dGUgb3IgNDEwLjRNYml0L3NlYyBhdCAxNzk1TWh6KQorICAgICAgIC0tIEFkZGVkIF9BUkdDSEsoKSBjYWxscyB0byBpc19wcmltZSgpIGZvciB0aGUgdHdvIGlucHV0IHBvaW50ZXJzLgorCitTZXB0IDI1dGgsIDIwMDMKK3YwLjkxICAtLSBITUFDIGZpeCBvZiAwLjkwIHdhcyBpbmNvcnJlY3QgZm9yIGtleXMgbGFyZ2VyIHRoYW4gdGhlIGJsb2NrIHNpemUgb2YgdGhlIGhhc2guCisgICAgICAgLS0gQWRkZWQgZXJyb3IgQ1JZUFRfRklMRV9OT1RGT1VORCBmb3IgdGhlIGZpbGUgW2htYWMvaGFzaF0gcm91dGluZXMuCisgICAgICAgLS0gQWRkZWQgUklQRU1EIGhhc2hlcyB0byB0aGUgaGFzaHN1bSBkZW1vLgorICAgICAgIC0tIEFkZGVkIGhhc2hzdW0gZGVtbyB0byBNU1ZDIG1ha2VmaWxlLgorICAgICAgIC0tIEFkZGVkIFJNRDE2MCB0byB0aGUgeDg2X3Byb2YgZGVtbyBbb29wc10KKyAgICAgICAtLSBNZXJnZWQgaW4gTGliVG9tTWF0aC0wLjI3IHdpdGggYSBwYXRjaCB0byBtcF9zaHJpbmsoKSB0aGF0IHdpbGwgYmUgaW4gTGliVG9tTWF0aC0wLjI4CisgICAgICAgICAgRml4ZXMgYW5vdGhlciBwb3RlbnRpYWwgbWVtb3J5IGxlYWsuCisKK1NlcHQgN3RoLCAyMDAzCit2MC45MCAgLS0gbmV3IFJPTC9ST1IgZm9yIHg4NiBHQ0MKKyAgICAgICAtLSBKb2NoZW4gS2F0eiBzdWJtaXR0ZWQgYSBwYXRjaCB0byB0aGUgbWFrZWZpbGUgdG8gcHJldmVudCAibWFrZSIgZnJvbSBtYWtpbmcgdGhlIC5hIGxpYnJhcnkKKyAgICAgICAgICB3aGVuIG5vdCByZXF1aXJlZC4KKyAgICAgICA9PSBCeSBkZWZhdWx0IHRoZSBLUiBjb2RlIGlzIG5vdCBlbmFibGVkIFtpdCdzIG9ubHkgYSBkZW1vIGFueXdheXMhXQorICAgICAgIC0tIGNoYW5nZWQgdGhlICJidWYiIGluIGVjY19tYWtlX2tleSBmcm9tIDRLQiB0byAxMjggYnl0ZXMgW3NpbmNlIHRoZSBsYXJnZXN0IGtleSBpcyA2NSBieXRlc10KKyAgICAgICAtLSBobWFjX2RvbmUoKSBub3cgcmVxdWlyZXMgeW91IHBhc3MgaXQgdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciB0byBwcmV2ZW50CisgICAgICAgICAgYnVmZmVyIG92ZXJmbG93cy4gIChBUEkgQ0hBTkdFKQorICAgICAgIC0tIGhtYWMvaGFzaCBmaWxlYmFzZWQgcm91dGluZXMgbm93IHJldHVybiBDUllQVF9OT1AgaWYgTk9fRklMRSBpcyBkZWZpbmVkLgorICAgICAgIC0tIEkndmUgcmVtb3ZlZCB0aGUgcHJpbWVzIGZyb20gZGguYyBhbmQgcmVwbGFjZWQgdGhlbSB3aXRoIERSIHNhZmUgcHJpbWVzIHN1aXRhYmxlIGZvciB0aGUgZGVmYXVsdAorICAgICAgICAgIGNvbmZpZ3VyYXRpb24gb2YgTGliVG9tTWF0aC4gIENoZWNrIG91dCB0aGVzZSBjb21wYXJpc29ucyBvbiBhIDEuM0doeiBBdGhsb24gWFAsIG9wdGltaXplZCBmb3Igc2l6ZSwKKworNzY4LWJpdCwgICAgIDQgdnMuICAxMAorMTAyNC1iaXQsICAgIDggdnMuICAxOAorMTI4MC1iaXQsICAgMTIgdnMuICAzNAorMTUzNi1iaXQsICAgMjAgdnMuICA1NgorMTc5Mi1iaXQgICAgMjggdnMuICA4OAorMjA0OC1iaXQsICAgNDAgdnMuIDEyNAorMjU2MC1iaXQsICAgNzEgdnMuIDIzNAorMzA3Mi1iaXQsICAxMTMgdnMuIDM4NgorNDA5Ni1iaXQsICAyODMgdnMuIDkxNgorCisgICAgICAgICAgVGltZXMgYXJlIGFsbCBpbiBtaWxsaXNlY29uZHMgZm9yIGtleSBnZW5lcmF0aW9uLiAgTmV3IHByaW1lcyB0aW1lcyBvbiB0aGUgbGVmdC4gIFRoaXMgbWFrZXMgdGhlIGNvZGUgYmluYXJ5CisgICAgICAgICAgaW5jb21wYXRpYmxlIHdpdGggcHJldmlvdXMgcmVsZWFzZXMuICBIb3dldmVyLCB0aGlzIGFkZGl0aW9uIGlzIGxvbmcgb3ZlcmR1ZSBhcyBMaWJUb21NYXRoIGhhcyBzdXBwb3J0ZWQgRFIKKyAgICAgICAgICByZWR1Y3Rpb25zIGZvciBxdWl0ZSBzb21lIHRpbWUuCisgICAgICAgLS0gQWRkZWQgUklQRS1NRCAxMjggYW5kIDE2MCB0byB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgaGFzaGVzIFsxMCBpbiB0b3RhbF0uCisgICAgICAgLS0gVGhlIHByb2plY3QgaGFzIGJlZW4gcmVsZWFzZWQgYXMgcHVibGljIGRvbWFpbi4gIFREQ0FMIG5vIGxvbmdlciBhcHBsaWVzLgorCitKdWx5IDE1dGgsIDIwMDMKK3YwLjg5ICAtLSBGaXggYSBidWcgaW4gYml0cy5jIHdoaWNoIHdvdWxkIHByZXZlbnQgaXQgZnJvbSBidWlsZGluZyB3aXRoIG1zdmMKKyAgICAgICAtLSBNZXJnZWQgaW4gTGliVG9tTWF0aCB2MC4yNCBbYW5kIEkgdXNlZCB0aGUgYWxsb2MvZnJlZSBtYWNyb3MgdGhpcyB0aW1lIV0KKyAgICAgICAtLSBSZW1vdmVkIHRoZSBMVEMgdmVyc2lvbiBvZiBuZXh0X3ByaW1lKCkgYW5kIHJlcGxhY2VkIGl0IHdpdGggYSBjYWxsIHRvIHRoZQorICAgICAgICAgIG1wX3ByaW1lX25leHRfcHJpbWUoKSBmcm9tIExpYlRvbU1hdGgKKyAgICAgICAtLSByZXZlcnRlZCBiaXRzLmMgdG8gdGhlIDAuODYgY29weSBzaW5jZSB0aGUgbmV3IG9uZSBkb2Vzbid0IGJ1aWxkIGluIE1TVkMKKyAgICAgICAgICBvciBjeWd3aW4uCisKK0p1bCAxMHRoLCAyMDAzCit2MC44OCAgLS0gU3BlZCB1cCBDQVNUNSBrZXkgc2NoZWR1bGUgZm9yIE1TVkMKKyAgICAgICAtLSBhZGRlZCAidWxvbmczMiIgd2hpY2ggYWxsb3dzIHBlb3BsZSBvbiA2NC1iaXQgcGxhdGZvcm1zIHRvIGZvcmNlIHRoZSAzMi1iaXQgdGFibGVzIGluCisgICAgICAgICAgY2lwaGVycyBsaWtlIGJsb3dmaXNoIGFuZCBBRVMgdG8gYmUgMzItYml0cy4gIEUuZy4gd2hlbiB1bnNpZ25lZCBsb25nIGlzIDY0LWJpdHMuCisgICAgICAgLS0gT3B0aW1pemVkIHRoZSBTQUZFUi1TSzY0LCBTQUZFUi1TSzEyOCwgU0FGRVIrLCBSQzUgYW5kIFJDNiBrZXkgc2NoZWR1bGUgW2JpZyB0aW1lIV0KKyAgICAgICAtLSBPcHRpbWl6ZWQgU0hBLTEgYW5kIFNIQS0yNTYgcXVpdGUgYSBiaXQgdG9vLgorICAgICAgIC0tIEZpeGVkIHVwIHRoZSBtYWtlZmlsZSB0byB1c2UgLWZvbWl0LWZyYW1lLXBvaW50ZXIgbW9yZSBsaWJlcmFsbHkKKyAgICAgICAtLSBBZGRlZCB0dl9nZW4gcHJvZ3JhbSB3aGljaCBtYWtlcyB0ZXN0IHZlY3RvcnMgZm9yIGNpcGhlcnMvaGFzaGVzCisgICAgICAgLS0gTWVyZ2VkIGluIExpYlRvbU1hdGggdjAuMjIKKyAgICAgICAKK0p1biAxOXRoLCAyMDAzCit2MC44NyAgLS0gTWFueSBNU1ZDIG9wdGltaXphdGlvbnMgdG8gdGhlIGNvZGUgYmFzZQorICAgICAgIC0tIEltcHJvdmVkIHRoZSBBRVMgYW5kIFR3b2Zpc2gga2V5IHNjaGVkdWxlIFtmYXN0ZXIsIG1vcmUgY29uc3RhbnQgdGltZV0KKyAgICAgICAtLSBUb25zIG9mIG9wdGltaXphdGlvbnMgaGVyZSBhbmQgdGhlcmUuICAKKyAgICAgICAKK0p1biAxNXRoLCAyMDAzCit2MC44NiAgLS0gRml4ZWQgdXAgQUVTIHRvIHdvcmthcm91bmQgTVNWQyBvcHRpbWl6ZXIgYnVnCisgICAgICAgLS0gTWVyZ2VkIGluIGZyZXNoIExUTSBiYXNlIFtiYXNlZCBvbiB2MC4yMF0gc28gdGhlcmUgYXJlIG5vIHdhcm5pbmdzIHdpdGggTVNWQworICAgICAgIC0tIFdyb3RlIHg4Nl9wcm9mIHdoaWNoIHdpbGwgdGltZSB0aGUgaGFzaGVzIGFuZCBjaXBoZXJzIGRvd250byBjeWNsZXMgcGVyIGJ5dGUuCisgICAgICAgLS0gRml4ZWQgdXAgZGVtb3MvZW5jcnlwdCB0byByZW1vdmUgc2VycGVudF9kZXNjIGZyb20gdGhlIGxpc3QKKyAgICAgICAtLSBSZS1lbmFibGVkIE1TVkMgb3B0aW1pemF0aW9ucyB3MDB0IHcwMHQKKyAgICAgICAtLSBSZXBsYWNlZCAiZXJybm8iIHdpdGggImVyciIgaW4gYWxsIGZ1bmN0aW9ucyB0aGF0IGhhZCBpdCBzbyBpdCB3b3VsZG4ndCBjbGFzaAorICAgICAgICAgIHdpdGggdGhlIGdsb2JhbCAiZXJybm8iCisgICAgICAgLS0gUmVtb3ZlZCBhIHNldCBvZiB1bnVzZWQgdmFyaWFibGVzIGZyb20gY2VydGFpbiBmdW5jdGlvbnMKKyAgICAgICAtLSBSZW1vdmVkIHsjbGluZSAwICIuLi4ifSBzdHVmZiBmcm9tIG1waS5jIHRvIGNvbXBseSB3aXRoIElTTyBDICA6LSkKKyAgICAgICAKK0p1biAxMXRoLCAyMDAzCit2MC44NSAgLS0gU3dhcHBlZCBpbiBhIG5ldyBBRVMgcm91dGluZQorICAgICAgIC0tIFJlbW92ZWQgU2VycGVudAorICAgICAgIC0tIEFkZGVkIFREQ0FMIHBvbGljeSBkb2N1bWVudAorICAgICAgIAorSnVuIDFzdCwgMjAwMwordjAuODQgIC0tIFJlbW92ZWQgYSA0S0IgYnVmZmVyIGZyb20gcnNhX2RlY3J5cHRfa2V5IHRoYXQgd2Fzbid0IGJlaW5nIHVzZWQgbm8gbW9yZQorICAgICAgIC0tIEZpeGVkIGFub3RoZXIgcG90ZW50aWFsIGJ1ZmZlciBwcm9ibGVtLiAgTm90IGFuIG92ZXJmbG93IGJ1dCBjb3VsZCBjYXVzZSB0aGUgCisgICAgICAgICAgUEsgaW1wb3J0IHJvdXRpbmVzIHRvIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisgICAgICAgLS0gT3B0aW1pemVkIHRoZSBFQ0MgbXVsbW9kIG1vcmUgYnkgcmVtb3ZpbmcgYSBpZiBjb25kaXRpb24gdGhhdCB3aWxsIGFsd2F5cyBiZSBmYWxzZQorICAgICAgIC0tIE9wdGltaXplZCBwcmltZS5jIHRvIG5vdCBpbmNsdWRlIGEgMm5kIHByaW1lIHRhYmxlLCByZW1vdmVkIGNvZGUgZnJvbSBpc19wcmltZSBjYWxscyBwcmltZQorICAgICAgICAgIHRlc3QgZnJvbSBMaWJUb21NYXRoIG5vdworICAgICAgIC0tIEFkZGVkIExUQ19URVNUIGRlZmluZSB3aGljaCB3aGVuIGRlZmluZWQgd2lsbCBlbmFibGUgdGhlIHRlc3QgdmVjdG9yIHJvdXRpbmVzIFtzZWUgbXljcnlwdF9jdXN0b20uaF0KKyAgICAgICAtLSBSZW1vdmVkIGFtcGkubyBmcm9tIHRoZSBkZXBlbmRzIGN1eiBpdCBhaW4ndCBubyBub3Qgd29ya2luZyBpbiAqbml4IHdpdGggaXQgW3JvdXRpbmVzIGFyZSBpbiBtcGkuYyBub3ddLgorICAgICAgICAKKworTWFyIDI5dGgsIDIwMDMKK3YwLjgzICAtLSBPcHRpbWl6ZWQgdGhlIGVjY19tdWxtb2QsIGl0J3MgZmFzdGVyIGFuZCB0YWtlcyBsZXNzIGhlYXAvc3RhY2sgc3BhY2UKKyAgICAgICAtLSBGaXhlZCBhIGZyZWUgbWVtb3J5IGVycm9yIGluIGVjY19tdWxtb2QgYW5kIGRlbF9wb2ludCB3aGljaCB3b3VsZCB0cnkgdG8gZnJlZSBOVUxMCisgICAgICAgLS0gRml4ZWQgdHdvIHNlcmlvdXMgYnVncyBpbiByc2FfZGVjcnlwdF9rZXkgYW5kIHJzYV92ZXJpZnlfaGFzaCB0aGF0IHdvdWxkIGFsbG93IGEgdHJpdmlhbHkKKyAgICAgICAgICBidWZmZXIgb3ZlcmZsb3cuCisgICAgICAgLS0gRml4ZWQgYSBidWcgaW4gdGhlIGhtYWMgdGVzdGluZyBjb2RlIGlmIHlvdSBkb24ndCByZWdpc3RlciBhbGwgdGhlIGhhc2hlcyBpdCB3b24ndCByZXR1cm4KKyAgICAgICAgICBlcnJvcnMgbm93LgorICAgICAgIAorTWFyIDE1dGgsIDIwMDMKK3YwLjgyICAtLSBNYW51YWwgdXBkYXRlZAorICAgICAgIC0tIEFkZGVkIE1TVkMgbWFrZWZpbGUgW2JhY2ssIGFjdHVhbGx5IGl0cyB3cml0dGVuIGZyb20gc2NyYXRjaCB0byB3b3JrIHdpdGggTk1BS0VdCisgICAgICAgLS0gQ2hhbmdlIHRvIEhNQUMgaGVscGVyIGZ1bmN0aW9ucyBBUEkgdG8gYXZvaWQgYnVmZmVyIG92ZXJmbG93IFtzb3VyY2UgY2hhbmdlc10KKyAgICAgICAtLSB0aGUgcnNhX2VuY3J5cHRfa2V5IHdhcyBzdXBwb3NlZCB0byByZWplY3Qga2V5IHNpemVzIG91dCBvZiBib3VuZHMgLi4uIAorICAgICAgICAgIHNhbWUgZml4IHRvIHRoZSByc2Ffc2lnbl9oYXNoIAorICAgICAgIC0tIEFkZGVkIGNvZGUgdG8gZW5zdXJlIHRoYXQgdGhhdCBjaGFpbmluZyBtb2RlIGNvZGUgKGNmYi9vZmIvY3RyL2NiYykgaGF2ZSB2YWxpZAorICAgICAgICAgIHN0cnVjdHVyZXMgd2hlbiBiZWluZyBjYWxsZWQuICBFLmcuIHRoZSBpbmRleGVzIHRvIHRoZSBwYWQvaXZzIGFyZSBub3Qgb3V0IG9mIGJvdW5kcworICAgICAgIC0tIENsZWFuZWQgdXAgdGhlIERFUyBjb2RlIGFuZCBzaW1wbGlmaWVkIHRoZSBjb3JlIGRlc2Z1bmMgcm91dGluZS4KKyAgICAgICAtLSBTaW1wbGlmaWVkIG9uZSBvZiB0aGUgYm9vbGVhbiBmdW5jdGlvbnMgaW4gTUQ0CisgICAgICAgCitKYW4gMTZ0aCwgMjAwMwordjAuODEgIC0tIE1lcmdlZCBpbiBuZXcgbWFrZWZpbGUgZnJvbSBDbGF5IEN1bHZlciBhbmQgTWlrZSBGcnlzaW5nZXIKKyAgICAgICAtLSBTcGVkIHVwIHRoZSBFQ0MgbXVsbW9kKCkgcm91dGluZSBieSBtYWtpbmcgdGhlIHdvcmQgc2l6ZSBhZGFwdCB0byB0aGUgaW5wdXQuICBTYXZlcyBhIHdob3BwaW5nIDkgcG9pbnQKKyAgICAgICAgICBvcGVyYXRpb25zIG9uIDUyMS1iaXQga2V5cyBub3cgKHRyYW5zbGF0ZXMgdG8gYWJvdXQgOG1zIG9uIG15IEF0aGxvbiBYUCkuICBJIGFsc28gbm93IHVzZSBiYXJyZXR0IHJlZHVjdGlvbgorICAgICAgICAgIGFzIG11Y2ggYXMgcG9zc2libGUuICBUaGlzIHNwZWQgdGhlIHJvdXRpbmUgdXAgcXVpdGUgYSBiaXQuCisgICAgICAgLS0gRml4ZWQgYSBodWdlIGZsYXcgaW4gZWNjX3ZlcmlmeV9oYXNoKCkgd2hlcmUgaXQgd291bGQgcmV0dXJuIENSWVBUX09LIG9uIGVycm9yLi4uIE5vdyBmaXhlZC4KKyAgICAgICAtLSBGaXhlZCB1cCBjb25maWcucGwgYnkgZml4aW5nIGFuIGludmFsaWQgcXVlcnkgYW5kIHRoZSBmaWxlIGlzIHNhdmVkIGluIG5vbi13aW5kb3dzIFtlLmcuIG5vdCBDUi9MRl0gZm9ybWF0CisgICAgICAgICAgKGZpeCBkdWUgdG8gTWlrYSBCb3N0cj9tKQorICAgICAgIC0tIE1lcmdlZCBpbiBMaWJUb21NYXRoIGZvciBraWNrcworICAgICAgIC0tIENoYW5nZWQgdGhlIGJ1aWxkIHByb2Nlc3Mgc28gdGhhdCBieSBkZWZhdWx0ICJteWNyeXB0X2N1c3RvbS5oIiBpcyBpbmNsdWRlZCBhbmQgcHJvdmlkZWQKKyAgICAgICAgICBUaGUgbWFrZWZpbGUgZG9lc24ndCBpbmNsdWRlIGFueSBidWlsZCBvcHRpb25zIGFueW1vcmUKKyAgICAgICAtLSBSZW1vdmVkIHRoZSBQUzIgYW5kIFZDIG1ha2VmaWxlcy4KKyAgICAgICAKK0RlYyAxNnRoLCAyMDAyCit2MC44MCAgLS0gRm91bmQgYSBjaGFuZ2UgSSBtYWRlIHRvIHRoZSBNUEkgdGhhdCBpcyBxdWVzdGlvbmFibGUuICBOb3QgcXVpdGUgYSBidWcgYnV0IGRlZmluYXRlbHkgbm90IGRlc2lyZWQuICBIYWQgdG9kbworICAgICAgICAgIHdpdGggdGhlIGRpZ2l0IHNoaWZ0aW5nLiAgSW4gdjAuNzkgSSBzaW1wbHkgdHJ1bmNhdGVkIHdpdGhvdXQgemVyb2luZy4gIEl0IGRpZG4ndCBjYXVzZSBwcm9ibGVtcyBkdXJpbmcgbXkKKyAgICAgICAgICB0ZXN0aW5nIGJ1dCBJIGZpeGVkIGl0IHVwIG5vbmUgdGhlIGxlc3MuCisgICAgICAgLS0gT3B0aW1pemVkIHNfbXBfbXVsX2RpZygpIGZyb20gTVBJIHRvIGRvIGEgbWluaW1hbCBudW1iZXIgb2YgcGFzc2VzLgorICAgICAgIC0tIEZpeGVkIGluIHJzYV9leHB0bW9kKCkgd2hlcmUgSSB3YXMgZ2V0dGluZyB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0LiAgQmFzaWNhbGx5IGl0IGFjY29tcGxpc2hlcyB0aGUgc2FtZSB0aGluZworICAgICAgICAgIGJ1dCB0aGUgZml4ZWQgY29kZSBpcyBtb3JlIHJlYWRhYmxlLgorICAgICAgIC0tIEZpeGVkIHNsaWdodCBidWcgaW4gZGhfc2lnbl9oYXNoKCkgd2hlcmUgdGhlIHJhbmRvbSAiayIgdmFsdWUgd2FzIDEgYnl0ZSBzaG9ydGVyIHRoYW4gaXQgc2hvdWxkIGhhdmUgYmVlbi4gIEkndmUKKyAgICAgICAgICBhbHNvIG1hZGUgdGhlICNkZWZpbmUgRkFTVF9QSyBzcGVlZCB1cCBzaWduYXR1cmVzIGFzIHdlbGwuICBFc3NlbnRpYWxseSBGQVNUX1BLIHRlbGxzIHRoZSBESCBzdWItc3lzdGVtIHRvIAorICAgICAgICAgIGxpbWl0IGFueSBwcml2YXRlIGV4cG9uZW50IHRvIDI1Ni1iaXRzLiAgIE5vdGUgdGhhdCB3aGVuIEZBU1RfUEsgaXMgZGVmaW5lZCBkb2VzIG5vdCBtYWtlIHRoZSBsaWJyYXJ5CisgICAgICAgICAgYmluYXJ5IG9yIHNvdXJjZSBpbmNvbXBhdGlibGUgd2l0aCBhIGNvcHkgb2YgdGhlIGxpYnJhcnkgd2l0aCBpdCB1bmRlZmluZWQuCisgICAgICAgLS0gUmVtb3ZlZCB0aGUgRFNBIGNvZGUuICBJZiB5b3Ugd2FudCBmYXN0IGRpZmZpZS1oZWxsbWFuIGp1c3QgZGVmaW5lIEZBU1RfUEsgOi0pCisgICAgICAgLS0gVXBkYXRlZCBkaF9zaWduX2hhc2goKS9kaF92ZXJpZnlfaGFzaCgpIHRvIGV4cG9ydCAidW5zaWduZWQiIGJpZ251bXMuICBTYXZlcyB0d28gYnl0ZXMgYnV0IGlzIG5vdCBiaW5hcnkKKyAgICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIHByZXZpb3VzIHJlbGVhc2UuLi4gc29ycnkhICBJJ3ZlIHBlcmZvcm1lZCB0aGUgc2FtZSBmaXggdG8gdGhlIGVjYyBjb2RlIGFzIHdlbGwuCisgICAgICAgLS0gRml4ZWQgdXAgdGhlIFBLIGNvZGUgdG8gcmVtb3ZlIGFsbCB1c2Ugb2YgbXBfdG9yYXcoKSBhbmQgbXBfcmVhZF9yYXcoKSBbZ2V0IGFsbCB0aGUgY2hhbmdlcyBvdXQgb2YgdGhlIHdheSBub3ddCisgICAgICAgLS0gRml4ZWQgYSBidWcgaW4gdGhlIERIIGNvZGUgd2hlcmUgaXQgbWlzc2VkIHRyYXBwaW5nIGEgZmV3IGVycm9ycyBpZiB0aGV5IG9jY3VycmVkLgorICAgICAgIC0tIEZpeGVkIGEgc2xpZ2h0ICJpdHMtbm90LWEtYnVnLWJ1dC1jb3VsZC1iZS1kb25lLWJldHRlciIgYnVnIGluIHRoZSBuZXh0X3ByaW1lKCkgZnVuY3Rpb24uICBFc3NlbnRpYWxseSBpdCB3YXMKKyAgICAgICAgICB0ZXN0aW5nIHRvIGVuc3VyZSB0aGF0IGluIHRoZSBsb29wIHRoYXQgc2VhcmNoZXMgZm9yIHRoZSBuZXh0IGNhbmRpZGF0ZSB0aGF0IHRoZSBzdGVwIG5ldmVyIGdyb3dzIGJleW9uZAorICAgICAgICAgIDY1MDAwLiAgU2hvdWxkIGhhdmUgYmVlbiB0ZXN0aW5nIGZvciBNUF9ESUdJVF9NQVgKKyAgICAgICAtLSBTcHJ1Y2VkIHVwIHRoZSBjb25maWcucGwgc2NyaXB0LiAgSXQgbm93IG1ha2VzIGEgaGVhZGVyIGZpbGUgIm15Y3J5cHRfY3VzdG9tLmgiIHdoaWNoIGNhbiBiZSBpbmNsdWRlZCAqYmVmb3JlKgorICAgICAgICAgIHlvdSBpbmNsdWRlIG15Y3J5cHQuaC4gIFRoaXMgYWxsb3dzIHlvdSB0byBhZGQgbGlidG9tY3J5cHQgdG8gYSBwcm9qZWN0IHdpdGhvdXQgY29tcGxldGVseSBjaGFuZ2luZyB5b3VyIG1ha2UKKyAgICAgICAgICBzeXN0ZW0gYXJvdW5kLiAgTm90ZSB0aGF0IHlvdSBzaG91bGQgdXNlIHRoZSBtYWtlZmlsZSBpdCB3cml0ZXMgdG8gYXQgbGVhc3QgYnVpbGQgdGhlIGxpYnJhcnkgaW5pdGlhbGx5LgorICAgICAgIC0tIFVzZWQgc3BsaW50IHRvIGNoZWNrIGFsb3Qgb2YgdGhlIGNvZGUgb3V0LiAgVG9ucyBvZiBtaW5vciBmaXhlcyBhbmQgZXhwbGljaXQgY2FzdHMgYWRkZWQuCisgICAgICAgLS0gQWxzbyBtYWRlIGFsbCB0aGUgaW50ZXJuYWwgZnVuY3Rpb25zIG9mIE1QSSBhcmUgbm93IHN0YXRpYyB0byBhdm9pZCBwb2x1dGluZyB0aGUgbmFtZXNwYWNlCisgICAgICAgLS0gKipOb3RpY2UqKjogIFRoZXJlIGFyZSBubyBwbGFubmVkIGZ1dHVyZSByZWxlYXNlcyBmb3IgYXQgbGVhc3QgYSBtb250aCBmcm9tIHRoZSB0aGlzIHJlbGVhc2UgZGF0ZS4KKyAgICAgICAKK0RlYyAxNHRoLCAyMDAyCit2MC43OSAgLS0gQ2hhbmdlIHRvIFBLIGNvZGUgW2JpbmFyeSBhbmQgc291cmNlXS4gIEkgbWFkZSBpdCBzbyB5b3UgaGF2ZSB0byBwYXNzIHRoZSBidWZmZXIgc2l6ZSB0byB0aGUgKl9kZWNyeXB0X2tleSBhbmQKKyAgICAgICAgICAqX3ZlcmlmeV9oYXNoIGZ1bmN0aW9ucy4gIFRoaXMgcHJldmVudHMgbWFsZm9ybWVkIHBhY2tldHMgZnJvbSBwZXJmb3JtaW5nIGJ1ZmZlciBvdmVyZmxvd3MuICBJJ3ZlIGFsc28gdHJpbW1lZAorICAgICAgICAgIHRoZSBwYWNrZXQgaGVhZGVyIHNpemUgW2J5IDQgYnl0ZXNdLgorICAgICAgIC0tIE1hZGUgdGhlIHRlc3QgcHJvZ3JhbSBoYWx0IG9uIHRoZSBmaXJzdCBlcnJvciBpdCBvY2N1cnMuICBBbHNvIG1hZGUgaXQgdHJhcCBtb3JlIGVycm9ycyB0aGFuIGJlZm9yZS4KKyAgICAgICAtLSBXcm90ZSB0aGUgZmlyc3QgY2hhcHRlciBvZiBteSBuZXcgYm9vayBbRFJBRlQhXSwgbm90IGluIHRoaXMgcGFja2FnZSBidXQgY2hlY2sgbXkgd2Vic2l0ZSEKKyAgICAgICAtLSBJbmNsdWRlZCBhIHBlcmwgc2NyaXB0ICJjb25maWcucGwiIHRoYXQgd2lsbCBtYWtlICJtYWtlZmlsZS5vdXQiIGFjY29yZGluZyB0byB0aGUgdXNlcnMgbmVlZHMuICAKKyAgICAgICAtLSBBZGRlZCBzaGVsbCBzY3JpcHQgdG8gbG9vayBmb3IgbGF0ZXN0IHJlbGVhc2UKKyAgICAgICAtLSBNZXJnZSBESCBhbmQgRUNDIGtleSBkZWZpbmVzIGZyb20gbXljcnlwdF9jZmcuaCBpbnRvIHRoZSBtYWtlZmlsZXMKKyAgICAgICAtLSB1cGRhdGVkIHRoZSBtYWtlZmlsZSB0byB1c2UgQlNEIGZyaWVuZGx5IGFyY2hpdmluZyBpbnZva2F0aW9ucworICAgICAgIC0tIENoYW5nZWQgdGhlIERIIGFuZCBFQ0MgY29kZSB0byB1c2UgYmFzZTY0IHN0YXRpYyBrZXkgc2V0dGluZ3MgW2UuZy4gdGhlIHByaW1lc10uICBEcm9wcGVkIHRoZSBjb2RlIHNpemUgYnkgM0tCCisgICAgICAgICAgYW5kIGlzIGV2ZXItc28tc2xpZ2h0bHkgZmFzdGVyIHRoYW4gYmVmb3JlLgorICAgICAgIC0tIGFkZGVkICJtcF9zaHJpbmsiIGZ1bmN0aW9uIHRvIHNocmluayB0aGUgc2l6ZSBvZiBiaWdudW1zLiAgU3BlY2lhbGx5IHVzZWZ1bCBmb3IgUEsgY29kZSA6LSkKKyAgICAgICAtLSBBZGRlZCBuZXcgZXhwdG1vZCBmdW5jdGlvbiB0aGF0IGNhbGN1bGF0ZXMgYV5iIG1vZCBjIHdpdGggZmV3ZXIgbXVsdGlwbGllcyB0aGVuIGJlZm9yZSBbfjIwJSBmb3IgY3J5cHRvCisgICAgICAgICAgc2l6ZWQgbnVtYmVyc10uICBBbHNvIGFkZGVkIGEgImxvdyBtZW0iIHZhcmlhbnQgdGhhdCBkb2Vzbid0IHVzZSBtb3JlIHRoYW4gMjBLQiBbdXB0byA0MDk2IGJpdCBudW1zXSBvZgorICAgICAgICAgIGhlYXAgdG9kbyB0aGUgY2FsY3VsYXRpb24uICBCb3RoIGFyZSAjZGVmaW5lJ2FibGUgY29udHJvbGxlZAorICAgICAgIC0tIEFkZGVkIFhSRUFMTE9DIG1hY3JvIHRvIHByb3ZpZGUgcmVhbGxvYygpIGZ1bmN0aW9uYWxpdHkuCisgICAgICAgLS0gQWRkZWQgZml4IHdoZXJlIGluIHJzYV9pbXBvcnQoKSBpZiB5b3UgaW1wb3J0ZWQgYSBwdWJsaWMga2V5IG9yIGEgbm9uLW9wdGltaXplZCBrZXkgaXQgd291bGQgZnJlZSB0aGUgbXBfaW50J3MKKyAgICAgICAgICBub3QgYmVpbmcgdXNlZC4KKyAgICAgICAtLSBGaXhlZCBwb3RlbnRpYWwgYnVnIGluIHRoZSBFQ0MgY29kZS4gIE9ubHkgd291bGQgb2NjdXIgb24gcGxhdGZvcm1zIHdoZXJlIGNoYXIgaXMgbm90IGVpZ2h0IGJpdHMgW3doaWNoIGlzbid0CisgICAgICAgICAgb2Z0ZW4hXQorICAgICAgIC0tIEZpeGVkIHVwIHRoZSBFQ0MgcG9pbnQgbXVsdGlwbGljYXRpb24sIGl0cyBhYm91dCAxNSUgZmFzdGVyIG5vdworICAgICAgIC0tIFdoaWxlIEkgd2FzIGF0IGl0IFtzaW5jZSB0aGUgbGliIGlzbid0IGJpbmFyeSBiYWNrd2FyZHMgY29tcGF0aWJsZSBhbnl3YXlzXSBJJ3ZlIGZpeGVkIHRoZSBQSyBleHBvcnQgcm91dGluZXMKKyAgICAgICAgICBzbyB0aGV5IGV4cG9ydCBhcyAidW5zaWduZWQiIHR5cGVzIHNhdmluZyAxIGJ5dGUgcGVyIGJpZ251bSBvdXRwdXR0ZWQuICBOb3QgYSBsb3QgYnV0IGhlY2sgd2h5IG5vdC4KKyAgICAgICAgICAKK05vdiAyOHRoLCAyMDAyCit2MC43OCAgLS0gTWFkZSB0aGUgZGVmYXVsdCBBUkdDSEsgbWFjcm8gYSBmdW5jdGlvbiBjYWxsIGluc3RlYWQgd2hpY2ggcmVkdWNlZCB0aGUgY29kZSBzaXplIGZyb20gMjY0S0IgdG8gMjM5S0IuCisgICAgICAgLS0gRml4ZWQgYSBidWcgaW4gdGhlIFhURUEga2V5c2l6ZSBmdW5jdGlvbiB3aGljaCBjYWxsZWQgQVJHQ0hLIGluY29ycmVjdGx5LgorICAgICAgIC0tIEFkZGVkIE5vZWtlb24gYmxvY2sgY2lwaGVyIGF0IDIsODAwIGJ5dGVzIG9mIG9iamVjdCBjb2RlIGFuZCAzNDVNYml0L3NlYyBpdCBpcyBhIHdlbGNvbWUgYWRkaXRpb24uCisgICAgICAgLS0gTWFkZSB0aGUgS1IgY29kZSBjaGVjayBpZiB0aGUgb3RoZXIgUEsgc3lzdGVtcyBhcmUgaW5jbHVkZWQgW3Byb3ZpZGVzIGVycm9yIHdoZW4gYnVpbGRpbmcgb3RoZXJ3aXNlXS4KKyAgICAgICAtLSBNYWRlICJhZXMiIGFuIGFsaWFzIGZvciBSaWpuZGFlbCB2aWEgYSBwcmUtcHJvY2Vzc29yIG1hY3JvLiAgTm93IHlvdSBjYW4gdXNlICJhZXNfZWNiX2VuY3J5cHQiLCBldGMuLi4gOi0pCisgICAgICAgICAgVGhhbmtzIHRvIEplYW4tTHVjIENvb2tlIGZvciB0aGUgImJ1enp3b3JkIGNvbmZvcm1hbmNlIiBzdWdnZXN0aW9uLgorICAgICAgIC0tIFJlbW92ZWQgdGhlIG9sZCBQSyBjb2RlIGVudGlyZWx5IChlLmcuIHJzYV9zaWduLCBkaF9lbmNyeXB0KS4gIFRoZSAqX3NpZ25faGFzaCBhbmQgKl9lbmNyeXB0X2tleSBmdW5jdGlvbnMKKyAgICAgICAgICBhcmUgYWxsIHRoYXQgaXMgdG8gcmVtYWluLgorICAgICAgIC0tICoqTk9URSoqIENoYW5nZWQgdGhlIFBLICpfaW1wb3J0IChpbmNsdWRpbmcgdGhlIGtleXJpbmcpIHJvdXRpbmUgdG8gYWNjZXB0IGEgImlubGVuIiBwYXJhbWV0ZXIuICBUaGlzIGZpeGVzIGEKKyAgICAgICAgICBidWcgd2hlcmUgaW1wcm9wZXJseSBtYWRlIGtleSBwYWNrZXRzIGNvdWxkIHJlc3VsdCBpbiByZWFkaW5nIHBhc3NlZCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuICBUaGlzIG1lYW5zCisgICAgICAgICAgdGhlIGNvZGUgaXMgbm8gbG9uZ2VyIHNvdXJjZSBjb21wYXRpYmxlIGJ1dCBzdGlsbCBiaW5hcnkgY29tcGF0aWJsZS4KKyAgICAgICAtLSBGaXhlZCBhIGZldyBvdGhlciBtaW5vciBidWdzIGluIHRoZSBQSyBpbXBvcnQgY29kZSB3aGlsZSBJIHdhcyBhdCBpdC4KKyAgICAgICAKK05vdiAyNnRoLCAyMDAyCit2MC43NyAgLS0gVXBkYXRlZCB0aGUgWFRFQSBjb2RlIHRvIHVzZSBwcmUtY29tcHV0ZWQga2V5cy4gIFdpdGggb3B0aW1pemF0aW9ucyBmb3Igc3BlZWQgaXQgYWNoaWV2ZXMgMjIyTWJpdC9zZWMKKyAgICAgICAgICBjb21wYXJlZCB0byB0aGUgMTIxTWJpdC9zZWMgYmVmb3JlLiAgSXQgaXMgMjg4IGJ5dGVzIGJpZ2dlciB0aGFuIGJlZm9yZS4KKyAgICAgICAtLSBDbGVhbmVkIHVwIHNvbWUgb2YgdGhlIGNpcGhlcnMgYW5kIGhhc2hlcyAoY29kaW5nIHN0eWxlLCBjb3NtZXRpYyBjaGFuZ2VzKQorICAgICAgIC0tIE9wdGltaXplZCBBRVMgc2xpZ2h0bHkgZm9yIDI1Ni1iaXQga2V5cyBbb25seSBvbmUgaWYgc3RhdGVtZW50IG5vdywgc3RpbGwgdHdvIGZvciAxOTItYml0IGtleXNdCisgICAgICAgLS0gUmVtb3ZlZCBtb3N0IHRlc3QgY2FzZXMgZnJvbSBCbG93ZmlzaCwgbGVmdCB0aHJlZSBvZiB0aGVtIHRoZXJlLiAgTWFrZXMgaXQgc21hbGxlciBhbmQgZmFzdGVyIHRvIHRlc3QuCisgICAgICAgLS0gQ2hhbmdlZCB0aGUgcHJpbWFsaXR5IHJvdXRpbmVzIGFyb3VuZC4gIEkgbm93IHVzZSA4IHJvdW5kcyBvZiBSYWJpbi1NaWxsZXIsIEkgdXNlIDI1NiBwcmltZXMgaW4gdGhlIHNpZXZlCisgICAgICAgICAgc3RlcCBhbmQgdGhlICJyYW5kX3ByaW1lIiBmdW5jdGlvbiB1c2VzIGEgbW9kaWZpZWQgc2lldmUgdGhhdCBhdm9pZHMgYWxvdCBvZiB1bi1uZWVkZWQgYmlnbnVtIHdvcmsuCisgICAgICAgLS0gRml4ZWQgYSBidWcgaW4gdGhlIEVDQy9ESCBzaWduYXR1cmVzIHdoZXJlIHRoZSBrZXlzICJzZXR0aW5nIiB2YWx1ZSB3YXMgbm90IGNoZWNrZWQgZm9yIHZhbGlkaXR5LiAgVGhpcyBtZWFucworICAgICAgICAgIHRoYXQgYSBpbnZhbGlkIHZhbHVlIGNvdWxkIGhhdmUgY2F1c2VkIHNlZ2ZhdWx0cywgZXRjLi4uCisgICAgICAgLS0gKipOT1RFKiogQ2hhbmdlZCB0aGUgd2F5IHRoZSBFQ0MvREggZXhwb3J0L2ltcG9ydCBmdW5jdGlvbnMgd29yay4gIFRoZXkgYXJlIHNvdXJjZSBidXQgbm90IGJpbmFyeSBjb21wYXRpYmxlCisgICAgICAgICAgd2l0aCB2MC43Ni4gIEVzc2VudGlhbGx5IGluc3RlYWRpbmcgb2YgZXhwb3J0aW5nIHRoZSBzZXR0aW5nIGluZGV4IGxpa2UgYmVmb3JlIEkgZXhwb3J0IHRoZSBrZXkgc2l6ZS4gIE5vdworICAgICAgICAgIGlmIHlvdSBldmVyIHJlLWNvbmZpZ3VyZSB3aGljaCBrZXkgc2V0dGluZ3MgYXJlIHN1cHBvcnRlZCB0aGUgbGliIHdpbGwgc3RpbGwgYmUgYWJsZSB0byBtYWtlIHVzZSBvZiB5b3VyIAorICAgICAgICAgIGtleXMuCisgICAgICAgLS0gT3B0aW1pemVkIEJsb3dmaXNoIGJ5IGlubGluaW5nIHRoZSByb3VuZCBmdW5jdGlvbiwgdW5yb2xsaW5nIGl0IGZvciBmb3VyIHJvdW5kcyB0aGVuIHVzaW5nIGEgZm9yIGxvb3AgZm9yIHRoZSAKKyAgICAgICAgICByZXN0LiAgSXQgYWNoaWV2ZXMgYSByYXRlIG9mIDQyNU1iaXQvc2VjIHdpdGggdGhlIG5ldyBjb2RlIGNvbXBhcmVkIHRvIDMxNE1iaXQvc2VjIGJlZm9yZS4gIFRoZSBuZXcgYmxvd2Zpc2ggCisgICAgICAgICAgb2JqZWN0IGZpbGUgaXMgNyw4MTMgYnl0ZXMgY29tcGFyZWQgdG8gOCw2NjMgYmVmb3JlIGFuZCBpcyA4NTAgYnl0ZXMgc21hbGxlci4gIFNvIHRoZSBjb2RlIGlzIGJvdGggc21hbGxlciBhbmQgCisgICAgICAgICAgZmFzdGVyIQorICAgICAgIC0tIE9wdGltaXplZCBUd29maXNoIGFzIHdlbGwgYnkgaW5saW5pbmcgdGhlIHJvdW5kIGZ1bmN0aW9uLiAgR2V0cyB+NDAwTWJpdC9zZWMgY29tcGFyZWQgdG8gMjgwTWJpdC9zZWMgYmVmb3JlCisgICAgICAgICAgYW5kIHRoZSBjb2RlIGlzIG9ubHkgNzggYnl0ZXMgbGFyZ2VyIHRoYW4gdGhlIHByZXZpb3VzIGNvcHkuCisgICAgICAgLS0gUmVtb3ZlZCBTTUFMTF9QUklNRV9UQUIgYnVpbGQgb3B0aW9uLiAgSSB1c2UgdGhlIHNtYWxsZXIgdGFibGUgYWx3YXlzLgorICAgICAgIC0tIEZpeGVkIHNvbWUgbWlzdGFrZXMgY29uY2VybmluZyBwcmltZSBnZW5lcmF0aW9uIGluIHRoZSBtYW51YWwuCisgICAgICAgLS0gW05vdGU6IHNpemVzL3NwZWVkcyBhcmUgZm9yIEdDQyAzLjIgb24gYW4geDg2IEF0aGxvbiBYUCBAIDEuNTNHaHpdCisKK05vdiAyNXRoLCAyMDAyCit2MC43NiAgLS0gVXBkYXRlZCBtYWtlZmlsZXMgYSBiaXQgbW9yZSwgdXNlICItT3MiIGluc3RlYWQgb2YgIi1PMiIgdG8gb3B0aW1pemUgZm9yIHNpemUuICBHb3QgdGhlIGxpYgorICAgICAgICAgIGRvd250byAyNjVLQiB1c2luZyBHQ0MgMy4yIG9uIG15IHg4NiBib3guCisgICAgICAgLS0gVXBkYXRlZCB0aGUgU0FGRVIrLCBUd29maXNoIGFuZCBSaWpuZGFlbCB0ZXN0IHZlY3RvciByb3V0aW5lIHRvIHVzZSB0aGUgdGFibGUgZHJpdmVuIGRlc2lnbi4KKyAgICAgICAtLSBVcGRhdGVkIGFsbCBvdGhlciB0ZXN0IHZlY3RvciByb3V0aW5lcyB0byByZXR1cm4gYXMgc29vbiBhcyBhbiBlcnJvciBpcyBmb3VuZAorICAgICAgIC0tIGZpeGVkIGEgYnVnIGluIHRoZSB0ZXN0IHByb2dyYW0gd2hlcmUgZXJyb3JzIGluIHRoZSBoYXNoIHRlc3Qgcm91dGluZXMgd291bGQgbm90IGJlIHJlcG9ydGVkCisgICAgICAgICAgY29ycmVjdGx5LiAgSSBmb3VuZCB0aGlzIGJ5IHRlbXBvcmFyaWx5IGNoYW5naW5nIG9uZSBvZiB0aGUgYnl0ZXMgb2YgdGhlIHRlc3QgdmVjdG9ycy4gIEFsbCB0aGUKKyAgICAgICAgICBoYXNoZXMgY2hlY2sgb3V0IFt0aGUgZGVtb3MvdGVzdC5jIHdvdWxkIHN0aWxsIGhhdmUgcmVwb3J0ZWQgYW4gZXJyb3IsIGp1c3QgdGhlIHdyb25nIG9uZV0uCisgICAgICAgICAgCisKK05vdiAyNHRoLCAyMDAyCit2MC43NSAgLS0gRml4ZWQgYSBmbGF3IGluIGhhc2hfZmlsZWhhbmRsZSwgaXQgc2hvdWxkIEFSR0NISyB0aGF0IHRoZSBmaWxlaGFuZGxlIGlzIG5vdCBOVUxMCisgICAgICAgLS0gRml4ZWQgYSBidWcgd2hlcmUgaW4gaGFzaF9maWxlIGlmIHRoZSBjYWxsIHRvIGhhc2hfZmlsZWhhbmRsZSBmYWlsZWQgdGhlIG9wZW4gZmlsZSB3b3VsZCAKKyAgICAgICAgICBub3QgYmUgY2xvc2VkLgorICAgICAgIC0tIEFkZGVkIG1vcmUgc3RyaWN0IHJ1bGVzIHRvIGJ1aWxkIHByb2Nlc3MsIHN0YXJ0aW5nIHRvIHdlZWQgb3V0ICJvaCB0aGlzIHdvcmtzIGluIEdDQyIgc3R5bGUgY29kZQorICAgICAgICAgIEluIHRoZSBuZXh0IHJlbGVhc2UgIi1XY29udmVyc2lvbiIgd2lsbCBiZSBlbmFibGVkIHdoaWNoIHdpbGwgZGVhbCB3aXRoIGFsbCBpbXBsaWNpdCBjYXN0cy4KKworTm92IDIybmQsIDIwMDIgW2xhdGVyIGluIHRoZSBkYXldCit2MC43NCAgLS0gV3JvdGUgYSBzbWFsbCB2YXJpYW50IG9mIFNBRkVSKyB3aGljaCBzaGF2ZWQgNTBLQiBvZmYgdGhlIHNpemUgb2YgdGhlIGxpYnJhcnkgb24geDg2IHBsYXRmb3JtcworICAgICAgIC0tIFdyb3RlIGEgYnVpbGQgb3B0aW9uIHRvIHJlbW92ZSB0aGUgUEsgcGFja2V0IGZ1bmN0aW9ucyBba2VlcHMgdGhlIGVuY3J5cHRfa2V5L3NpZ25faGFzaCBmdW5jdGlvbnNdCisgICAgICAgLS0gV3JvdGUgYSBzbWFsbCB2YXJpYW50IG9mIFJpam5kYWVsICh0cmltbWVkIDEzS0IpCisgICAgICAgLS0gVHJpbW1lZCB0aGUgVElHRVIvMTkyIGhhc2ggZnVuY3Rpb24gYSBiaXQKKyAgICAgICAtLSBPdmVyYWxsIHRoZSBlbnRpcmUgbGliIGNvbXBpbGVkIGlzIDI5NUtCIFtkb3duIGZyb20gNDAwS0IgYmVmb3JlXQorICAgICAgIC0tIEZpeGVkIGEgZmV3IG1pbm9yIG92ZXJzaWdodHMgaW4gdGhlIE1TVkMgbWFrZWZpbGUKKworTm92IDIybmQsIDIwMDIKK3YwLjczICAtLSBGaXhlZCBidWcgaW4gUkM0IGNvZGUgd2hlcmUgaXQgY291bGQgb25seSB1c2UgMjU1IGJ5dGUga2V5cy4KKyAgICAgICAtLSBGaXhlZCBidWcgaW4geWFycm93IGNvZGUgd2hlcmUgaXQgd291bGQgYWxsb3cgY2FzdDUgb3IgbWQyIHRvIGJlIHVzZWQgd2l0aCBpdC4uLgorICAgICAgIC0tIFJlbW92ZWQgdGhlIGVjYyBjb21wcmVzcy9leHBhbmQgcG9pbnRzIGZyb20gdGhlIGdsb2JhbCBzY29wZS4gIFJlZHVjZXMgbmFtZXNwYWNlIHBvbHV0aW9uCisgICAgICAgLS0gRml4ZWQgYnVnIHdoZXJlIGlmIHlvdSB1c2VkIHRoZSBTUFJORyB5b3UgY291bGRuJ3QgcGFzcyBOVUxMIGFzIHlvdXIgcHJuZ19zdGF0ZSB3aGljaCB5b3Ugc2hvdWxkIGJlCisgICAgICAgICAgYWJsZSB0b2RvIHNpbmNlIHRoZSBTUFJORyBoYXMgbm8gc3RhdGUuLi4KKyAgICAgICAtLSBDb3JyZWN0ZWQgc29tZSBvdmVyc2lnaHRzIGluIHRoZSBtYW51YWwgYW5kIHRoZSBleGFtcGxlcy4uLgorICAgICAgIC0tIEJ5IGRlZmF1bHQgdGhlIEdGKDJeVykgbWF0aCBsaWJyYXJ5IGlzIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLiAgVGhlIHNvdXJjZSBpcyBtYWludGFpbmVkIGJlY2F1c2UgSSB3cm90ZSBpdAorICAgICAgICAgIGFuZCBsaWtlIGl0IDotKS4gIFRoaXMgd2F5IHRoZSBidWlsdCBsaWJyYXJ5IGlzIGEgdGFkIHNtYWxsZXIKKyAgICAgICAtLSB0aGUgTVNWQyBtYWtlZmlsZSB3aWxsIG5vdyBidWlsZCBmb3IgYSBTUEFDRSBvcHRpbWl6ZWQgbGlicmFyeSByYXRoZXIgdGhhbiBUSU1FIG9wdGltaXplZC4KKworTm92IDIxdGgsIDIwMDIKK3YwLjcyICAtLSBGaXhlZCBidWcgaW4gdGhlIHByaW1lIHRlc3RpbmcuICBJbiB0aGUgTWlsbGVyLVJhYmluIHRlc3QgSSB3YXMgcmFpc2luZyB0aGUgYmFzZSB0byAiTi0xIiBub3QgInIiLgorICAgICAgICAgIFRoZSBtYXRoIHN0aWxsIHdvcmtlZCBvdXQgZmluZSBiZWNhdXNlIGluIGVmZmVjdCBpdCB3YXMgcGVyZm9ybWluZyBhIEZlcm1hdCB0ZXN0LiAgVGVzdGVkIHRoZSBuZXcgY29kZSBhbmQgaXQgCisgICAgICAgICAgd29ya3MgcHJvcGVybHkKKyAgICAgICAtLSBGaXhlZCBzb21lIG9mIHRoZSBjb2RlIHdoZXJlIGl0IHdhcyBzdGlsbCB1c2luZyB0aGUgb2xkIGVycm9yIHN5bnRheAorICAgICAgIC0tIFNwZWQgdXAgdGhlIFJTQSBkZWNyeXB0L3NpZ24gcm91dGluZXMKKyAgICAgICAtLSBPcHRpbWl6ZWQgdGhlIGVjY19zaGFyZWRfc2VjcmV0IHJvdXRpbmUgdG8gbm90IHVzZSBzbyBtdWNoIHN0YWNrCisgICAgICAgLS0gRml4ZWQgdXAgdGhlIG1ha2VmaWxlIHRvIG1ha2UgcmVsZWFzZXMgd2hlcmUgdGhlIHZlcnNpb24gIyBpcyBpbiB0aGUgZmlsZSBuYW1lIGFuZCBkaXJlY3RvcnkgaXQgd2lsbCB1bnppcAorICAgICAgICAgIHRvCisKK05vdiAxOXRoLCAyMDAyCit2MC43MSAgLS0gSEVMUCBUT00uICBJIG5lZWQgdHVpdGlvbiBmb3IgdGhlIEphbnVhcnkgc2VtZXN0ZXIuICBOb3cgSSBkb24ndCB3YW50IHRvIGZvcmNlIGRvbmF0aW9ucyBbbm9yIHdpbGwgSSBldmVyXQorICAgICAgICAgIGJ1dCBJIHJlYWxseSBuZWVkIHRoZSBoZWxwISAgU2VlIG15IHdlYnNpdGUgaHR0cDovL3RvbS5pYWh1LmNhL2hlbHBfdG9tLmh0bWwgZm9yIG1vcmUgZGV0YWlscy4gIFBsZWFzZSBoZWxwCisgICAgICAgICAgaWYgeW91IGNhbiEgCisgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAtLSBPZmZpY2lhbGx5IHRoZSBsaWJyYXJ5IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQgaW4gR0NDIDMuMiBpbiB3aW5kb3dzIFtjeWd3aW5dLgorICAgICAgICAgIEluIHdpbmRvd3MgeW91IGNhbiBlaXRoZXIgdXNlIEdDQyAyLjk1LjMgb3IgdHJ5IHlvdXIgbHVjayB3aXRoIDMuMiAgSXQgc2VlbXMgdGhhdAorICAgICAgICAgICItZm9taXQtZnJhbWUtcG9pbnRlciIgaXMgYnJva2VuIGluIHRoZSB3aW5kb3dzIGJ1aWxkIFtidXQgbm90IHRoZSBsaW51eCB4ODYgYnVpbGQ/Pz9dCisgICAgICAgICAgSWYgeW91IHNpbXBseSBtdXN0IHVzZSAzLjIgdGhlbiBJIHN1Z2dlc3QgeW91IGxpbWl0IHRoZSBvcHRpbWl6YXRpb25zIHRvIHNpbXBseSAiLU8yIgorICAgICAgIC0tIFN0YXJ0ZWQgbmV3IGVycm9yIGhhbmRsaW5nIEFQSS4gIFNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIGV4Y2VwdCB0aGVyZSBhcmUgbW9yZSBlcnJvciBjb2RlcyB0aGFuIGp1c3QKKyAgICAgICAgICBDUllQVF9FUlJPUgorICAgICAgIC0tIEFkZGVkIG15IGltcGxlbWVudGF0aW9uIG9mIHRoZSBNRDIgaGFzaCBmdW5jdGlvbiBbZGVzcGl0ZSB0aGUgZXJyb3JzIGluIHRoZSBSRkMgSSBtYW5hZ2VkIHRvIGdldCBpdCByaWdodCFdCisgICAgICAgLS0gTWVyZ2VkIGluIG1vcmUgY2hhbmdlcyBmcm9tIFNreSBTY2h1bHouICBJIGhhdmUgdG8gbWFrZSBtZW50aW9uIGhlcmUgdGhhdCBoZSBoYXMgYmVlbiBhIHRyZW1lbmRvdXMgaGVscCBpbiAKKyAgICAgICAgICBnZXR0aW5nIG1lIG1vdGl2YXRlZCB0byBtYWtlIHNvbWUgbXVjaCBuZWVkZWQgdXBkYXRlcyB0byB0aGUgbGlicmFyeSEKKyAgICAgICAtLSBGaXhlZCBvbmUgb2YgdGhlIG1hbnkgbWlzdGFrZXMgaW4gdGhlIG1hbnVhbCBhcyBwb2ludGVkIG91dCBieSBEYW5pZWwgUmljaGFyZHMKKyAgICAgICAtLSBGaXhlZCBhIGJ1ZyBpbiB0aGUgUkM0IGNvZGUgW3dhc24ndCBzZXR0aW5nIHVwIHRoZSBrZXkgY29ycmVjdGx5XQorICAgICAgIC0tIEFkZGVkIG15IGltcGxlbWVudGF0aW9uIG9mIHRoZSBDQVNUNSBbYWthIENBU1QtMTI4XSBibG9jayBjaXBoZXIgKGNvbmZvcm1zLi4uKQorICAgICAgIC0tIEZpeGVkIG51bWVyb3VzIGJ1Z3MgaW4gdGhlIFBLIGNvZGUuICBFc3NlbnRpYWxseSBJIHdhcyAiZnJlZWluZyIga2V5cyB3aGVuIHRoZSBpbXBvcnQgZmFpbGVkLiAgVGhpcyBpcyBuZWl0aGVyCisgICAgICAgICAgcmVxdWlyZWQgbm9yIGEgZ29vZCBhIGlkZWEgW2RvdWJsZSBmcmVlXS4gIAorICAgICAgIC0tIFRvbSBuZWVkcyBhIGpvYi4KKyAgICAgICAtLSBGaXhlZCB1cCB0aGUgdGVzdCBoYXJuZXNzIGFzIHJlcXVlc3RlZCBieSBTa3kgU2NodWx6LiAgQWxzbyBtb2RpZmVkIHRoZSB0aW1pbmcgcm91dGluZXMgdG8gcnVuIGZvciBYIHNlY29uZHMKKyAgICAgICAgICBhbmQgY291bnQgIyBvZiBvcHMgcGVyZm9ybWVkLiAgVGhpcyBpcyBtb3JlIHN1aXRhYmxlIHRoYW4gc2F5IGVuY3J5cHRpbmcgMTAgbWlsbGlvbiBibG9ja3Mgb24gYSBzbG93IHByb2Nlc3NvcgorICAgICAgICAgIHdoZXJlIGl0IGNvdWxkIHRha2UgbWludXRlcyEKKyAgICAgICAtLSBNb2RpZmllZCB0ZXN0IHByb2dyYW1zIGhhc2hzdW0vZW5jcnlwdCB0byB1c2UgdGhlIG5ldyBhbGdvcml0aG1zIGFuZCBlcnJvciBoYW5kbGluZyBzeW50YXgKKyAgICAgICAtLSBSZW1vdmVkIHRoZSBQS0NTIGNvZGUgc2luY2UgaXQgd2FzIGluY29tcGxldGUuICBJbiB0aGUgZnV0dXJlIEkgcGxhbiBvbiB3cml0aW5nIGEgImFkZC1vbiIgbGlicmFyeSB0aGF0CisgICAgICAgICAgcHJvdmlkZXMgUEtDUyBzdXBwb3J0Li4uIAorICAgICAgIC0tIHVwZGF0ZWQgdGhlIGNvbmZpZyBzeXN0ZW0gc28gdGhlICNkZWZpbmVzIGFyZSBpbiB0aGUgbWFrZWZpbGVzIGluc3RlYWQgb2YgbXljcnlwdF9jZmcuaCAgCisgICAgICAgLS0gV2lsbGluZyB0byB3b3JrIG9uIGFuIGhvdXJseSBiYXNpcyBmb3IgMTUkIENETiBwZXIgaG91ci4KKyAgICAgICAtLSB1cGRhdGVkIHRoZSB0ZXN0IHByb2dyYW0gdG8gbm90IHRlc3QgY2lwaGVycyBub3QgaW5jbHVkZWQKKyAgICAgICAtLSB1cGRhdGVkIHRoZSBtYWtlZmlsZSB0byBtYWtlICJyc2Ffc3lzLmMiIGEgZGVwZW5kZW5jeSBvZiByc2EubyBbaGVscHMgZGV2ZWxvcCB0aGUgY29kZS4uLl0KKyAgICAgICAtLSBmaXhlZCBudW1lcm91cyBmYWlsdXJlcyB0byBkZXRlY3QgYnVmZmVyIG92ZXJmbG93cyBbbWlub3JdIGluIHRoZSBQSyBjb2RlLgorICAgICAgIC0tIGZpeGVkIHRoZSBzYWZlciBbNjQtYml0IGJsb2NrIHZlcnNpb25dIHRlc3Qgcm91dGluZXMgd2hpY2ggZGlkbid0IGNoZWNrIHRoZSByZXR1cm5zIG9mIHRoZSBzZXR1cAorICAgICAgICAgIGZ1bmN0aW9uCisgICAgICAgLS0gY2hlY2sgb3V0IG15IENWIGF0IGh0dHA6Ly90b20uaWFodS5jYS9jdi5odG1sCisgICAgICAgLS0gcmVtb3ZlZCB0aGUgR0JBIG1ha2VmaWxlIGFuZCBjb2RlIGZyb20gZGVtb3MvdGVzdC5jIFtub3QgYSBwYXJ0aWN1bGFybHkgdXNlZnVsIGRlbW8uLi5dCisgICAgICAgLS0gbWVyZ2VkIGluIHJ1ZGltZW50YXJ5IFtmb3IgdGVzdGluZ10gUFMyIFJORyBmcm9tIFNreSBTY2h1bHoKKyAgICAgICAtLSBtZXJnZWQgaW4gUFMyIHRpbWVyIGNvZGUgW29ubHkgc2hlbGwgaW5jbHVkZWQgZHVlIHRvIE5EQSByZWFzb25zLi4uXQorICAgICAgIC0tIHVwZGF0ZWQgSE1BQyBjb2RlIHRvIHJldHVybiBlcnJvcnMgd2hlcmUgcG9zc2libGUKKyAgICAgICAtLSBUaGFua3MgZ28gdG8gU2t5IFNjaHVseiB3aG8gYm91Z2h0IG1lIGEgUmVnQ29kZSBmb3IgVGV4dFBhZCBbdGhlIG9mZmljaWFsIGVkaXRvciBvZiBsaWJ0b21jcnlwdF0KKworTm92IDEydGgsIDIwMDIKK3YwLjcwICAtLSBVcGRhdGVkIHNvIHlvdSBjYW4gc3dhcCBvdXQgdGhlIGRlZmF1bHQgbWFsbG9jL2NhbGxvYy9mcmVlIHJvdXRpbmVzIGF0IGJ1aWxkIHRpbWUgd2l0aCBvdGhlcnMuIChTa3kgU2NodWx6KQorICAgICAgIC0tIFNreSBTY2h1bHogY29udHJpYnV0ZWQgc29tZSBjb2RlIHRvd2FyZHMgYXV0b2RldGVjdGluZyB0aGUgUFMyIGluIG15Y3J5cHRfY2ZnLmgKKyAgICAgICAtLSBBZGRlZCBQUzIgbWFrZWZpbGUgY29udHJpYnV0ZWQgYnkgU2t5IFNjaHVseiBbc2VlIGEgcGF0dGVybiBmb3JtaW5nP10KKyAgICAgICAtLSBBZGRlZCBhYmlsaXR5IHRvIGhhdmUgbm8gRklMRSBJL08gZnVuY3Rpb25zIGF0IGFsbCAoc2VlIG1ha2VmaWxlKSwgU2t5IFNjaHVsei4uLi4KKyAgICAgICAtLSBBZGRlZCBzdXBwb3J0IGZvciBzdWJzdGl0dXRpbmcgb3V0IHRoZSBjbG9jaygpIGZ1bmN0aW9uIChTa3kgU2NodWx6KQorICAgICAgIC0tIEZpeGVkIHVwIG1ha2VmaWxlIHRvIGluY2x1ZGUgbmV3IGhlYWRlcnMgaW4gdGhlIEhFQURFUlMgdmFyaWFibGUKKyAgICAgICAtLSBSZW1vdmVkICJjb2luLmMiIGFzIGl0cyBub3QgcmVhbGx5IHVzZWZ1bCBhbnl3YXlzCisgICAgICAgLS0gUmVtb3ZlZCBtYW55ICJkZWJ1ZyIgcHJpbnRmcyB0aGF0IHdvdWxkIHNob3cgdXAgb24gZmFpbHVyZXMuICBCYXNpY2FsbHkgSSB3YW50ZWQgdG8gZW5zdXJlIHRoZSBvbmx5IG91dHB1dAorICAgICAgICAgIHdvdWxkIGJlIGZyb20gdGhlIGRldmVsb3BlciB0aGVtc2VsdmVzLgorICAgICAgIC0tIEFkZGVkICJyYzQuYyIgYSBSQzQgaW1wbGVtZW50YXRpb24gd2l0aCBhIFBSTkcgaW50ZXJmYWNlLiAgU2luY2UgUkM0IGlzbid0IGEgYmxvY2sgY2lwaGVyIGl0IHdvdWxkbid0IHdvcmsKKyAgICAgICAgICB0b28gd2VsbCBhcyBhIGJsb2NrIGNpcGhlci4KKyAgICAgICAtLSBGaXhlZCBBUkdDSEsgbWFjcm8gdXNhZ2Ugd2hlbiBBUkdUWVBFPTEgdGhyb3VnaG91dCB0aGUgY29kZQorICAgICAgIC0tIHVwZGF0ZWQgbWFrZWZpbGUgdG8gbWFrZSBzdWJkaXJlY3RvcnkgcHJvcGVybHkgKFNrdSBTY2h1bHopCisgICAgICAgLS0gU3RhcnRlZCB0b3dhcmRzIG5ldyBBUEkgc2V0dXAuICBJbnN0ZWFkIG9mIGNoZWNraW5nIGZvciAiPT0gQ1JZUFRfRVJST1IiIHlvdSBzaG91bGQgY2hlY2sgIiE9IENSWVBUX09LIgorICAgICAgICAgIEluIGZ1dHVyZSByZWxlYXNlcyBmdW5jdGlvbnMgd2lsbCByZXR1cm4gdGhpbmdzIG90aGVyIHRoYW4gQ1JZUFRfRVJST1Igb24gZXJyb3IgdG8gZ2l2ZSBtb3JlIHVzZWZ1bAorICAgICAgICAgIHRocmVhZCBzYWZlIGVycm9yIHJlcG9ydGluZy4gIFRoZSBtYW51YWwgd2lsbCBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhpcy4gIEZvciB0aGlzIHJlbGVhc2UgYWxsCisgICAgICAgICAgZXJyb3JzIGFyZSByZXR1cm5lZCBhcyBDUllQVF9FUlJPUiAoZXhjZXB0IGFzIG5vdGVkKSBidXQgaW4gZnV0dXJlIHJlbGVhc2VzIHRoaXMgd2lsbCBjaGFuZ2UuICAgICAgICAgCisgICAgICAgLS0gUmVtb3ZlZCB0aGUgemxpYiBicmFuY2ggc2luY2UgaXRzIG5vdCByZWFsbHkgcmVxdWlyZWQgYW55d2F5cy4gIE1ha2VzIHRoZSBwYWNrYWdlIHNtYWxsZXIKKworTm92IDExdGgsIDIwMDIKK3YwLjY5ICAtLSBBZGRlZCBBUkdDSEsgKHNlZSBteWNyeXB0X2FyZ2Noay5oKSAiYXJndWVtZW50IGNoZWNraW5nIiB0byBhbGwgZnVuY3Rpb25zIHRoYXQgYWNjZXB0IHBvaW50ZXJzCisgICAgICAgLS0gTm90ZSBJIGZvcmdvdCB0byBjaGFuZ2UgdGhlIENSWVBUIHZlcnNpb24gdGFnIGluIHYwLjY4Li4uIGZpeGVkIG5vdy4KKworTm92IDh0aCwgMjAwMgordjAuNjggIC0tIEZpeGVkIGZsYXcgaW4ga3JfaW1wb3J0L2tyX2V4cG9ydCB0aGF0IHdhc3RlZCA0IGJ5dGVzLiAgU291cmNlIGJ1dCBub3QgYmluYXJ5IGNvbXBhdGlibGUgd2l0aCB2MC42NworICAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBrcl9maW5kX25hbWUgdGhhdCB1c2VkIG1lbWNtcCB0byBtYXRjaCBzdHJpbmdzLiAgVXNlcyBzdHJuY21wIG5vdy4KKyAgICAgICAtLSBrcl9jbGVhciBub3cgc2V0cyB0aGUgcG9pbnRlciB0byBOVUxMIHRvIGZhY2lsYXRlIGRlYnVnZ2luZyBbZS5nLiB1c2luZyB0aGUga2V5cmluZyBhZnRlciBjbGVhcmluZ10KKyAgICAgICAtLSBzdGF0aWMgZnVuY3Rpb25zIGluIF93cml0ZS9fcmVhZCBpbiBrZXlyaW5nLmMgbm93IGNoZWNrIHRoZSByZXR1cm4gb2YgY3RyX2VuY3J5cHQvY3RyX2RlY3J5cHQuCisgICAgICAgLS0gVXBkYXRlZCBibG93ZmlzaC9yYzIvcmM1L3JjNiBrZXlzaXplKCkgZnVuY3Rpb24gdG8gbm90IHJlamVjdCBrZXlzIGxhcmdlciB0aGFuIHRoZSBiaWdnZXN0IGtleSB0aGUKKyAgICAgICAgICByZXNwZWN0aXZlIGNpcGhlcnMgY2FuIHVzZS4gIAorICAgICAgIC0tIEZpeGVkIGEgYnVnIGluIGhhc2hzdW0gZGVtbyB0aGF0IHdvdWxkIHJlcG9ydCB0aGUgaGFzaCBmb3IgZmlsZXMgdGhhdCBkb24ndCBleGlzdCEKKworT2N0IDE2dGgsIDIwMDIKK3YwLjY3ICAtLSBNb3ZlZCB0aGUgZnVuY3Rpb24gcHJvdG90eXBlcyBpbnRvIGZpbGVzIG15Y3J5cHRfKi5oLiAgVG8gImluc3RhbGwiIHRoZSBsaWIganVzdCBjb3B5IGFsbCB0aGUgCisgICAgICAgICAgaGVhZGVyIGZpbGVzICIqLmgiIGZyb20gdGhlIGJhc2Ugb2YgdGhpcyBwcm9qZWN0IGludG8geW91ciBnbG9iYWwgaW5jbHVkZSBwYXRoLgorICAgICAgIC0tIE1hZGUgdGhlIE9GQi9DRkIvQ1RSIGZ1bmN0aW9ucyB1c2UgInVuc2lnbmVkIGxvbmciIGZvciB0aGUgbGVuZ3RoIGluc3RlYWQgb2YgImludCIKKyAgICAgICAtLSBBZGRlZCBrZXlyaW5nIHN1cHBvcnQgZm9yIHRoZSBQSyBmdW5jdGlvbnMKKyAgICAgICAtLSAqKipBUEkgQ0hBTkdFKioqIGNoYW5nZWQgdGhlIGVjY19tYWtlX2tleSBhbmQgZGhfbWFrZV9rZXkgdG8gYWN0IG1vcmUgbGlrZSByc2FfbWFrZV9rZXkuICBCYXNpY2FsbHkKKyAgICAgICAgICBtb3ZlIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgbmV4dCB0byBsYXN0LgorICAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBkaF90ZXN0KCkgdGhhdCB3b3VsZG4ndCB0ZXN0IHRoZSBwcmltYWxpdHkgb2YgdGhlIG9yZGVyIG9mIHRoZSBzdWItZ3JvdXAKKyAgICAgICAtLSByZXBsYWNlZCB0aGUgcHJpbWVzIGluIHRoZSBESCBjb2RlIHdpdGggbmV3IG9uZXMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlIHNpemUgdGhleSBhcmUgCisgICAgICAgICAgYXNzb2NpYXRlZCB3aXRoLiAgVGhhdCBpcyBhIDEwMjQtYml0IERIIGtleSB3aWxsIGhhdmUgYSAxMDI1LWJpdCBwcmltZSBhcyB0aGUgbW9kdWx1cworICAgICAgIC0tIGNsZWFuZWQgdXAgYWxsIHRoZSBQSyBjb2RlLCBjaGFuZ2VkIGEgYml0IG9mIHRoZSBBUEkgYXJvdW5kIFtub3Qgc291cmNlIGNvbXBhdGlibGUgd2l0aCB2MC42Nl0KKyAgICAgICAtLSBtYWpvciBlZGl0aW5nIG9mIHRoZSBtYW51YWwsIHN0YXJ0ZWQgRG9jZXIgcHJvZ3JhbQorICAgICAgIC0tIGFkZGVkIDE2MCBhbmQgMjI0IGJpdCBrZXkgc2V0dGluZ3MgZm9yIEVDQy4gIFRoaXMgbWFrZXMgdGhlIERIIGFuZCBFQ0MgYmluYXJ5IHdpc2UgaW5jb21wYXRpYmxlIHdpdGggdjAuNjYKKyAgICAgICAtLSBBZGRlZCBhbiBhZGRpdGlvbmFsIGNoZWNrIGZvciBtZW1vcnkgZXJyb3JzIGluIGlzX3ByaW1lKCkgYW5kIGNsZWFuZWQgdXAgcHJpbWUuYyBhIGJpdAorICAgICAgIC0tIFJlbW92ZWQgSURfVEFHIGZyb20gYWxsIGZpbGVzIFttZWgsIG5vdCBhIGJpZyBmYW4uLi5dCisgICAgICAgLS0gUmVtb3ZlZCB1bnVzZWQgdmFyaWFibGUgZnJvbSB5YXJyb3cgc3RhdGUgYW5kIG1hZGUgQUVTL1NIQTI1NiB0aGUgZGVmYXVsdCBjaXBoZXIvaGFzaCBjb21ibworICAgICAgIC0tIEZpeGVkIGEgYnVnIGluIHRoZSBZYXJyb3cgY29kZSB0aGF0IGNhbGxlZCBwcm5nX2lzX3ZhbGlkIGluc3RlYWQgb2YgY2lwaGVyX2lzX3ZhbGlkIGZyb20geWFycm93X3N0YXJ0KCkKKyAgICAgICAtLSBUaGUgRUNCL0NCQy9PRkIvQ0ZCL0NUUiB3cmFwcGVycyBub3cgY2hlY2sgdGhhdCB0aGUgY2lwaGVyIGlzIHZhbGlkIGluIHRoZSBlbmNyeXB0L2RlY3J5cHQgY2FsbHMKKyAgICAgICAgICBSZXR1cm5zIGludCBub3cgaW5zdGVhZCBvZiB2b2lkLgorCitTZXB0IDI0dGgsIDIwMDIKK3YwLjY2ICAtLSBVcGRhdGVkIHRoZSAvZGVtb3MvdGVzdC5jIHByb2dyYW0gdG8gdGltZSB0aGUgaGFzaGVzIGNvcnJlY3RseS4gIEFsc28gaXQgdXNlcyB0aGUgeWFycm93IFBSTkcgZm9yIGFsbCBvZiB0aGUgCisgICAgICAgICAgdGVzdHMgbWVhbmluZyBpdHMgcG9zc2libGUgdG8gcnVuIG9uIFJORyBsZXNzIHBsYXRmb3JtcyAKKyAgICAgICAtLSBVcGRhdGVkIHRoZSAvZGVtb3MvaGFzaHN1bS5jIHByb2dyYW0gdG8gaGFzaCBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dAorICAgICAgIC0tIFVwZGF0ZWQgdGhlIFJTQSBjb2RlIHRvIG1ha2Uga2V5cyBhIGJpdCBxdWlja2VyIFt1cGRhdGUgYnkgV2F5bmUgU2NvdHRdIGJ5IG5vdCBtYWtpbmcgYm90aCBwcmltZXMgYXQgdGhlIHNhbWUKKyAgICAgICAgICB0aW1lLgorICAgICAgIC0tIERhbiBLYW1pbnNreSBzdWdnZXN0ZWQgc29tZSBjbGVhbnVwcyBmb3IgdGhlIGNvZGUgYW5kIHRoZSBNUEkgY29uZmlnCisgICAgICAgICAgQ29kZSBzaGlwcyBpbiB1bml4IExGIGZvcm1hdCBieSBkZWZhdWx0IG5vdyB0b28uLi4gd2lsbCBzdGlsbCBidWlsZCBpbiBNU1ZDIGFuZCBhbGwuLi4gYnV0IGlmIHlvdSB3YW50CisgICAgICAgICAgdG8gcmVhZCB0aGUgc3R1ZmYgeW91J2xsIGhhdmUgdG8gY29udmVydCBpdCAKKyAgICAgICAtLSBDaGFuZ2VzIHRvIHRoZSBtYW51YWwgdG8gcmVmbGVjdCBuZXcgQVBJIFtlLmcuIGhhc2hfbWVtb3J5L2ZpbGUgaGF2ZSB2MC42NSBwcm90b3R5cGVzXWFuZCBzb21lIHR5cG9zIGZpeGVkCisKK1NlcHQgMjB0aCwgMjAwMgordjAuNjUgIC0tIFdheW5lIFNjb3R0ICh3c2NvdHRAYml0bW92ZXIuY29tKSBtYWRlIGEgZmV3IG9mIHN1Z2dlc3Rpb25zIHRvIGltcHJvdmUgdGhlIGxpYnJhcnkuICBNb3N0IAorICAgICAgICAgIGltcG9ydGFudGx5IGhlIHBvaW50ZWQgb3V0IHRoZSBtYXRoIGxpYiBpcyBub3QgcmVhbGx5IHJlcXVpcmVkLiAgSGUncyBhbHNvIHRlc3RlZCB0aGUgbGliIG9uIDE4IAorICAgICAgICAgIGRpZmZlcmVudCBwbGF0Zm9ybXMuICBBY2NvcmRpbmcgdG8gaGltIHdpdGggb25seSBhIGZldyB0cm91YmxlcyBbbGFjayBvZiAvZGV2L3JhbmRvbSwgZXRjXSB0aGUgCisgICAgICAgICAgbGlicmFyeSB3b3JrZWQgYXMgaXQgd2FzIHN1cHBvc2VkIHRvLiAgWW91IGNhbiBmaW5kIHRoZSBsaXN0IGF0IAorICAgICAgICAgIGh0dHA6Ly93d3cuYml0a2VlcGVyLmNvbS9Qcm9kdWN0cy5CaXRLZWVwZXIuUGxhdGZvcm1zLmh0bWwKKyAgICAgICAtLSBVcGRhdGVkIHRoZSBoYXNoX2ZpbGUgYW5kIGhhc2hfbWVtb3J5IGZ1bmN0aW9ucyB0byBrZWVwIHRyYWNrIG9mIHRoZSBzaXplIG9mIHRoZSBvdXRwdXQKKyAgICAgICAtLSBXYXluZSBTY290dCB1cGRhdGVkIHRoZSBkZW1vcy90ZXN0LmMgZmlsZSB0byB1c2UgdGhlIFNQUk5HIGxlc3MgYW5kIFlhcnJvdyBtb3JlCisgICAgICAgLS0gTW9kaWZpZWQgdGhlIG15Y3J5cHRfY2ZnLmggdG8gYXV0b2RldGVjdCB4ODYtMzIgbWFjaGluZXMKKworU2VwdCAxOXRoLCAyMDAyCit2MC42NCAgLS0gd3JvdGUgbWFrZWZpbGUgZm9yIHRoZSBHQkEgZGV2aWNlIFthbmQgaGFja2VkIHRoZSBkZW1vcy90ZXN0LmMgZmlsZSB0byBzdXBwb3J0IGl0IGNvbmRpdGlvbmFsbHldCisgICAgICAgLS0gRml4ZWQgZXJyb3IgaW4gUEsgKGUuZy4gRUNDLCBSU0EsIERIKSBpbXBvcnQgZnVuY3Rpb25zIHdoZXJlIEkgd2FzIGNsb2JiZXJpbmcgdGhlIHBhY2tldCBlcnJvciBtZXNzYWdlcworICAgICAgIC0tIGZpeGVkIG1vcmUgdHlwb3MgaW4gdGhlIG1hbnVhbAorICAgICAgIC0tIHJlbW92ZWQgYWxsIHVudXNlZCB2YXJpYWJsZXMgZnJvbSB0aGUgY29yZSBsaWJyYXJ5IChpZ25vcmUgdGhlIElEX1RBRyBzdHVmZikKKyAgICAgICAtLSBhZGRlZCAiY29uc3QgY2hhciAqY3J5cHRfYnVpbGRfc2V0dGluZ3MiIHN0cmluZyB3aGljaCBpcyBhIGJ1aWxkIHRpbWUgY29uc3RhbnQgdGhhdCBnaXZlcyBhIGxpc3RpbmcKKyAgICAgICAgICBvZiBhbGwgdGhlIGJ1aWxkIHRpbWUgb3B0aW9ucy4gIFVzZWZ1bCBmb3IgZGVidWdnaW5nIHNpbmNlIHlvdSBjYW4gc2VuZCB0aGF0IHRvIG1lIGFuZCBJIHdpbGwga25vdyB3aGF0IAorICAgICAgICAgIGV4YWN0bHkgeW91IGhhZCBzZXQgZm9yIHRoZSBteWNyeXB0X2NmZy5oIGZpbGUuCisgICAgICAgLS0gQWRkZWQgY29udHJvbCBvdmVyIGVuZGlhbmVzcy4gIE91dCBvZiB0aGUgYm94IGl0IGRlZmF1bHRzIHRvIGVuZGlhbmVzcyBuZXV0cmFsIGJ1dCB5b3UgY2FuIHRyaXZpYWxseSAKKyAgICAgICAgICBjb25maWd1cmUgdGhlIGxpYnJhcnkgZm9yIHlvdXIgcGxhdGZvcm0uICBVc2luZyB0aGlzIEkgYm9vc3RlZCBSQzUgZnJvbSA2NjBNYml0L3NlYyB0byA3ODVNYml0L3NlYyBvbiBteSAKKyAgICAgICAgICBBdGhsb24gYm94LiAgU2VlICJteWNyeXB0X2NmZy5oIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworU2VwdCAxMXRoLCAyMDAyCit2MC42MyAgLS0gTWFkZSBoYXNoc3VtIGRlbW8gb3V0cHV0IGxpa2UgdGhlIG9yaWdpbmFsIG1kNXN1bSBwcm9ncmFtIAorICAgICAgIC0tIE1hZGUgYWRkaXRpb25zIHRvIHRoZSBleGFtcGxlcyBpbiB0aGUgbWFudWFsIChmaXhlZCB0aGVtIHVwIGEgYnVuY2gpCisgICAgICAgLS0gTWVyZ2VkIGluIHRoZSBiYXNlNjQgY29kZSBmcm9tIFdheW5lIFNjb3R0ICh3c2NvdHRAYml0bW92ZXIuY29tKQorCitBdWcgMjl0aCwgMjAwMgordjAuNjIgIC0tIEFkZGVkIHRoZSBDTEVBTl9TVEFDSyBmdW5jdGlvbmFsaXR5IHRvIHNldmVyYWwgb2YgdGhlIGhhc2hlcyBJIGZvcmdvdCB0byB1cGRhdGUuCisKK0F1ZyA5dGgsIDIwMDIKK3YwLjYxICAtLSBGaXhlZCBhIGJ1ZyBpbiB0aGUgREVTIGNvZGUgW29vcHMgSSByZWFkIHNvbWV0aGluZyB3cm9uZ10uCisKK0F1ZyA4dGgsIDIwMDIKK3YwLjYwICAtLSBNZXJnZWQgaW4gREVTIGNvZGUgW2FuZCB3cm90ZSAzREVTLUVERSBjb2RlIGJhc2VkIG9uIGl0XSBmcm9tIERvYmVzIFYuCisKK0F1ZyA3dGgsIDIwMDIKK3YwLjU5ICAtLSBGaXhlZCBhICJ1bnNpZ25lZCBsb25nIGxvbmciIGJ1ZyB0aGF0IGNhdXNlZCB2MC41OCBub3QgdG8gYnVpbGQgaW4gTVNWQy4KKyAgICAgICAtLSBDbGVhbmVkIHVwIGEgbGl0dGxlIGluIHRoZSBtYWtlZmlsZQorICAgICAgIC0tIGFkZGVkIGNvZGUgdGhhdCB0aW1lcyB0aGUgaGFzaCBmdW5jdGlvbnMgdG9vIGluIHRoZSB0ZXN0IHByb2dyYW0KKworQXVnIDNyZCwgMjAwMgordjAuNTggIC0tIEFkZGVkIG1vcmUgc3RhY2sgY2xlYW5pbmcgY29uZGl0aW9uYWxzIHRocm91Z2hvdXQgdGhlIGNvZGUuICAKKyAgICAgICAtLSBjb3JyZWN0ZWQgc29tZSBDTEVBUl9TVEFDSyBjb25kaXRpb25hbHMuLi4gc2hvdWxkIGhhdmUgYmVlbiBDTEVBTl9TVEFDSworICAgICAgIC0tIFNpbXBsaWZpZWQgdGhlIFJTQSwgREggYW5kIEVDQyBlbmNyeXB0KCkgcm91dGluZXMgd2hlcmUgdGhleSB1c2UgQ1RSIHRvIGVuY29kZSB0aGUgbWVzc2FnZQorICAgICAgICAgIG5vdyB0aGV5IG9ubHkgbWFrZSBvbmUgY2FsbCB0byBjdHJfZW5jcnlwdCgpL2N0cl9kZWNyeXB0KCkuCisKK0F1ZyAybmQsIDIwMDIKK3YwLjU3ICAtLSBGaXhlZCBhIGZldyBlcnJvcnMgbWVzc2FnZXMgaW4gdGhlIFNBRkVSIGNvZGUgdG8gYWN0dWFsbHkgcmVwb3J0IHRoZSBjb3JyZWN0IGNpcGhlciBuYW1lLgorICAgICAgIC0tIHJzYV9lbmNyeXB0KCkgdXNlcyB0aGUgImtleXNpemUoKSIgbWV0aG9kIG9mIHRoZSBjaXBoZXIgYmVpbmcgdXNlZCB0byBtb3JlIGFjY3VyYXRlbHkgcGljayBhCisgICAgICAgICAga2V5IHNpemUuICBCeSBkZWZhdWx0IHJzYV9lbmNyeXB0KCkgd2lsbCBjaG9vc2UgdG8gdXNlIGEgMjU2LWJpdCBrZXkgYnV0IHRoZSBjaXBoZXIgY2FuIHR1cm4gdGhhdCAKKyAgICAgICAgICBkb3duIGlmIHJlcXVpcmVkLgorICAgICAgIC0tIFRoZSByc2FfZXhwdG1vZCgpIGZ1bmN0aW9uIHdpbGwgbm93IG1vcmUgcmVsaWFibHkgZGV0ZWN0IGludmFsaWQgaW5wdXRzIChlLmcuIGdyZWF0ZXIgdGhhbiB0aGUgbW9kdWx1cykuCisgICAgICAgLS0gVGhlIHBhZGRpbmcgbWV0aG9kIGZvciBSU0EgaXMgbW9yZSBjbGVhcmx5IGRvY3VtZW50ZWQuICBOYW1lbHkgaWYgeW91IHdhbnQgdG8gZW5jcnlwdC9zaWduIHNvbWV0aGluZyBvZiBsZW5ndGgKKyAgICAgICAgICBOIHRoZW4geW91ciBtb2R1bHVzIG11c3QgYmUgb2YgbGVuZ3RoIDErM04uICBTbyB0byBzaWduIGEgbWVzc2FnZSB3aXRoIHNheSBTSEEtMzg0IFs0OCBieXRlc10geW91IG5lZWQgYSAKKyAgICAgICAgICAxNDUgYnl0ZSAoMTE2MCBiaXRzKSBtb2R1bHVzLiAgVGhpcyBpcyBhbGwgaW4gdGhlIG1hbnVhbCBub3cuCisgICAgICAgLS0gQWRkZWQgYnVpbGQgb3B0aW9uIENMRUFOX1NUQUNLIHdoaWNoIHdpbGwgYWxsb3cgeW91IHRvIGNob29zZSB3aGV0aGVyIHlvdSB3YW50IHRvIGNsZWFuIHRoZSBzdGFjayBvciBub3QgYWZ0ZXIgZXZlcnkKKyAgICAgICAgICBjaXBoZXIvaGFzaCBjYWxsCisgICAgICAgLS0gU3BlZCB1cCB0aGUgaGFzaCAicHJvY2VzcygpIiBmdW5jdGlvbnMgYnkgbm90IGNvcHlpbmcgb25lIGJ5dGUgYXQgYSB0aW1lLgorICAgICAgICsrIChhZGRlZCBqdXN0IGFmdGVyIEkgdXBsb2FkZWQuLi4pCisgICAgICAgICAgTUQ0IHByb2Nlc3MoKSBub3cgaGFuZGxlcyBpbnB1dCBidWZmZXJzID4gNjQgYnl0ZXMKKworQXVnIDFzdCwgMjAwMgordjAuNTYgIC0tIENsZWFuZWQgdXAgdGhlIGNvbW1lbnRzIGluIHRoZSBCbG93ZmlzaCBjb2RlLgorICAgICAgIC0tIE9oIHllYWgsIGluIHYwLjU1IEkgbWFkZSBhbGwgb2YgdGhlIGRlc2NyaXB0b3IgZWxlbWVudHMgY29uc3RhbnQuICBJIGp1c3QgZm9yZ290IHRvIG1lbnRpb24gaXQuCisgICAgICAgLS0gZml4ZWQgYSBjb3VwbGUgb2YgcGxhY2VzIHdoZXJlIGRlc2NyaXB0b3IgaW5kZXhlcyB3ZXJlIHRlc3RlZCB3cm9uZy4gIE5vdCBhIGh1Z2UgYnVnIGJ1dCBub3cgaXRzIGhhcmRlcgorICAgICAgICAgIHRvIG1lc3MgdXAuCisgICAgICAgLS0gQWRkZWQgdGhlIFNBRkVSIFs2NC1iaXQgYmxvY2tdIGNpcGhlcnMgSzY0LCBTSzY0LCBLMTI4IGFuZCBTSzEyOCB0byB0aGUgbGlicmFyeS4KKyAgICAgICAtLSBBZGRlZCB0aGUgUkMyIGJsb2NrIGNpcGhlciB0byB0aGUgbGlicmFyeS4KKyAgICAgICAtLSBDaGFuZ2VkIHRoZSBTQUZFUiBkZWZpbmUgZm9yIHRoZSBTQUZFUisgY2lwaGVyIHRvIFNBRkVSUCBzbyB0aGF0IHRoZSBuZXcgU0FGRVIgWzY0LWJpdF0gY2lwaGVycworICAgICAgICAgIGNhbiB1c2UgdGhlbSB3aXRoIGxlc3MgY29uZnVzaW9uLgorCitKdWx5IDI5dGgsIDIwMDIKK3YwLjU1ICAtLSBNeSBnb2Qgc3R1cGlkIEJsb3dmaXNoIGhhcyB5ZXQgYWdhaW4gYmVlbiBmaXhlZC4gIEkgc3dlYXIgSSBoYXRlIHRoYXQgY2lwaGVyLiAgTmV4dCBidWcgaW4gaXQgYW5kIGJvb20gaXRzIG91dCBvZiB0aGUKKyAgICAgICAgICBsaWJyYXJ5LiAgVXNlIEFFUyBvciBzb21ldGhpbmcgZWxzZSBjdXogSSByZWFsbHkgaGF0ZSBCbG93ZmlzaCBhdCB0aGlzIHN0YWdlLi4uLgorICAgICAgIC0tIFBhcnRpYWwgUEtDUyBzdXBwb3J0IFtoaW50IERPTlQgVVNFIElUIFlFVCBDVVogSVRTIFVOVEVTVEVEIV0KKworSnVseSAxOXRoLCAyMDAyCit2MC41NCAgLS0gQmxvd2Zpc2ggbm93IGNvbmZvcm1zIHRvIGtub3duIHRlc3QgdmVjdG9ycy4gIFNpbGx5IGJhZCBjb2RpbmcgdG9tIQorICAgICAgIC0tIFJDNS9SQzYvU2VycGVudCBhbGwgaGF2ZSBtb3JlIHRlc3QgdmVjdG9ycyBub3cgW2FuZCB0aGV5IHNlZW1lZCB0byBoYXZlIGJlZW4gd29ya2luZyBiZWZvcmVdCisKK0p1bHkgMTh0aCwgMjAwMgordjAuNTMgIC0tIEFkZGVkIG1vcmUgdGVzdCB2ZWN0b3JzIHRvIHRoZSBibG93ZmlzaCBjb2RlIGp1c3QgZm9yIGtpY2tzIFthbmQgdGhleSBhcmUgY29uc3Qgbm93IHRvbyA6LSldCisgICAgICAgLS0gYWRkZWQgcHJuZy9oYXNoL2NpcGhlciBpc192YWxpZCBmdW5jdGlvbnMgYW5kIHVzZWQgdGhlbSBpbiBhbGwgb2YgdGhlIFBLIGNvZGUgc28geW91IGNhbid0IGVudGVyIHRoZSBjb2RlCisgICAgICAgICAgd2l0aCBhbiBpbnZhbGlkIGluZGV4IGV2ZXIgbm93LgorICAgICAgIC0tIFNpbXBsaWZpZWQgdGhlIFlhcnJvdyBjb2RlIG9uY2UgYWdhaW4gOi0pCisKK0p1bHkgMTJ0aCwgMjAwMgordjAuNTIgIC0tIEZpeGVkIGEgYnVnIGluIE1ENCB3aGVyZSB0aGUgaGFzaCBkZXNjcmlwdG9yIElEIHdhcyB0aGUgc2FtZSBhcyBTSEEtNTEyLiAgTm93IE1ENCB3aWxsIHdvcmsgd2l0aAorICAgICAgICAgIGFsbCB0aGUgcm91dGluZXMuLi4KKyAgICAgICAtLSBGaXhlZCB0aGUgY29tbWVudHMgaW4gU0hBLTUxMiB0byBiZSBhIGJpdCBtb3JlIG1lYW5pbmdmdWwKKyAgICAgICAtLSBJbiBtZDQgSSBtYWRlIHRoZSBQQURESU5HIGFycmF5IGNvbnN0IFthZ2FpbiB0byBzdG9yZSBpdCBpbiBST01dCisgICAgICAgLS0gaW4gaGFzaF9maWxlIEkgc3dpdGNoZWQgdGhlIGNvbnN0YW50ICI1MTIiIHRvICJzaXplb2YoYnVmKSIgdG8gYmUgYSBiaXQgc2FmZXIKKyAgICAgICAtLSBpbiBTSEEtMSdzIHRlc3Qgcm91dGluZSBJIGZpeGVkIHRoZSBzdHJpbmcgbGl0ZXJhbCB0byBzYXkgU0hBLTEgbm90IHNoYTEKKyAgICAgICAtLSBGaXhlZCBhIGxvZ2ljYWwgZXJyb3IgaW4gdGhlIENUUiBjb2RlIHdoaWNoIHdvdWxkIG1ha2UgaXQgc2tpcCB0aGUgZmlyc3QgSVYgdmFsdWUuICBUaGlzIG1lYW5zCisgICAgICAgICAgdGhlIENUUiBjb2RlIGZyb20gdjAuNTIgd2lsbCBiZSBpbmNvbXBhdGlibGUgW2JpbmFyeSB3aXNlXSB3aXRoIHByZXZpb3VzIHJlbGVhc2VzIGJ1dCBpdCBtYWtlcyBtb3JlCisgICAgICAgICAgc2Vuc2UgdGhpcyB3YXkuCisgICAgICAgLS0gQWRkZWQge30gYnJhY2VzIGZvciBhcyBtYW55IGlmL2Zvci9ibG9ja3Mgb2YgY29kZSBJIGNvdWxkIGZpbmQuICBNeSBydWxlIGlzIHRoYXQgZXZlcnkgZm9yL2lmL3doaWxlL2RvIGJsb2NrCisgICAgICAgICAgbXVzdCBoYXZlIHt9IGJyYWNlcyBhcm91bmQgaXQuCisgICAgICAgLS0gbWFkZSB0aGUgcm91bmRzIHRhYmxlIGluIHNhZmVycF9zZXR1cCBjb25zdCBbYWdhaW4gZm9yIHRoZSBST00gdGhpbmsgYWJvdXQgdGhlIFJPTSFdCisgICAgICAgLS0gZml4ZWQgUkM1IHNpbmNlIGl0IG5vIGxvbmdlciByZXF1aXJlcyByYzUgdG8gYmUgcmVnaXN0ZXJlZCBpbiB0aGUgbGliLiAgSXQgdXNlZCB0byBzaW5jZSB0aGUgZGVzY3JpcHRvcnMgdXNlZCB0byAKKyAgICAgICAgICBiZSBwYXJ0IG9mIHRoZSB0YWJsZS4uLgorICAgICAgIC0tIHRoZSBwYWNrZXQuYyBjb2RlIG5vdyBtYWtlcyBjcnlwdF9lcnJvciBsaXRlcmFsIHN0cmluZyBlcnJvcnMgd2hlbiBhbiBlcnJvciBvY2N1cnMKKyAgICAgICAtLSBjbGVhbmVkIHVwIHRoZSBTQUZFUisga2V5IHNjaGVkdWxlIHRvIGJlIGEgYml0IGVhc2llciB0byByZWFkLgorICAgICAgIC0tIGZpeGVkIGEgaHVnZSBidWcgaW4gVHdvZmlzaCB3aXRoIHRoZSBUV09GSVNIX1NNQUxMIGRlZmluZS4gIEJlY2F1c2UgSSBjbGVhbiB0aGUgc3RhY2sgbm93IEkgaGFkCisgICAgICAgICAgY2hhbmdlZCB0aGUgImdfZnVuYygpIiB0byBiZSBjYWxsZWQgaW5kaXJlY3RseS4gIEkgZm9yZ290IHRvIGFjdHVhbGx5IHJldHVybiB0aGUgcmV0dXJuIG9mIHRoZSBUd29maXNoCisgICAgICAgICAgZ19mdW5jKCkgZnVuY3Rpb24gd2hpY2ggY2F1c2VkIGl0IG5vdCB0byB3b3JrLi4uIFtkb2VzIG5vdyA6LSldCisKK0p1bHkgMTF0aCwgMjAwMgordjAuNTEgIC0tIEZpeGVkIGEgYnVnIGluIFNIQTUxMi8zODQgY29kZSBmb3IgbXVsdGktYmxvY2sgbWVzc2FnZXMuCisgICAgICAgLS0gQWRkZWQgbW9yZSB0ZXN0IHZlY3RvcnMgdG8gdGhlIFNIQTM4NC81MTIgYW5kIFRJR0VSIGhhc2ggZnVuY3Rpb25zCisgICAgICAgLS0gY2xlYW5lZCB1cCB0aGUgaGFzaCBkb25lIHJvdXRpbmVzIHRvIG1ha2UgbW9yZSBzZW5zZQorIAorSnVseSAxMHRoLCAyMDAyCit2MC41MCAgLS0gRml4ZWQgeWFycm93LmMgc28gdGhhdCB0aGUgY2lwaGVyL2hhc2ggdXNlZCB3b3VsZCBiZSByZWdpc3RlcmVkLiAgQWxzbyBmaXhlZAorICAgICAgICAgIGEgYnVnIHdoZXJlIHRoZSBTQUZFUisgbmFtZSB3YXMgInNhZmVyIiBidXQgc2hvdWxkIGhhdmUgYmVlbiAic2FmZXIrIi4KKyAgICAgICAtLSBBZGRlZCBhbiBlbGVtZW50IHRvIHRoZSBoYXNoIGRlc2NyaXB0b3JzIHRoYXQgZ2l2ZXMgdGhlIHNpemUgb2YgYSBibG9jayBbc2VudCBpbnRvIHRoZSBjb21wcmVzc29yXQorICAgICAgIC0tIENsZWFuZWQgdXAgdGhlIHN1cHBvcnQgZm9yIEhNQUMncworICAgICAgIC0tIENsZWFuZWQgdXAgdGhlIHRlc3QgdmVjdG9yIHJvdXRpbmVzIHRvIG1ha2UgdGhlIHRlc3QgdmVjdG9yIGRhdGEgY29uc3QuICBUaGlzIG1lYW5zIG9uIHNvbWUgcGxhdGZvcm1zIGl0IHdpbGwgYmUKKyAgICAgICAgICBwbGFjZWQgaW4gUk9NIG5vdCBSQU0gbm93LgorICAgICAgIC0tIEFkZGVkIE1ENCBjb2RlIHN1Ym1pdGVkIGJ5IERvYmVzIFZhbmRlcm1lZXIgKGRvYmVzQHNtYXJ0dC5jb20pCisgICAgICAgLS0gQWRkZWQgImJ1cm5fc3RhY2siIGZ1bmN0aW9uIFtpZGVhIHRha2VuIGZyb20gYW5vdGhlciBzb3VyY2Ugb2YgY3J5cHRvIGNvZGVdLiAgVGhlIGlkZWEgaXMgaWYgYSBmdW5jdGlvbiBoYXMKKyAgICAgICAgICBhbG90IG9mIHZhcmlhYmxlcyBpdCB3aWxsIGNsZWFuIHVwIGJldHRlci4gIEZ1bmN0aW9ucyBsaWtlIHRoZSBlY2Igc2VycGVudCBhbmQgdHdvZmlzaCBjb2RlIHdpbGwgbm93IGhhdmUgdGhlaXIKKyAgICAgICAgICBzdGFja3MgY2xlYW5lZCBhbmQgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgaXMgZ2V0dGluZyBtdWNoIG1vcmUgc3RyYWlnaHRmb3J3YXJkLgorICAgICAgIC0tIEFkZGVkIGEgaGFzaGluZyBkZW1vIGJ5IERhbmllbCBSaWNoYXJkcyAoa3lod2FuYUB3b3JsZC1uZXQuY28ubnopCisgICAgICAgLS0gSSAoVG9tKSBtb2RpZmllZCBzb21lIG9mIHRoZSB0ZXN0IHZlY3RvciByb3V0aW5lcyB0byB1c2UgbW9yZSB2ZWN0b3JzIGFsYSBEb2JlcyBzdHlsZS4KKyAgICAgICAgICBGb3IgZXhhbXBsZSwgdGhlIE1ENS9TSEExIGNvZGUgbm93IHVzZXMgYWxsIG9mIHRoZSB0ZXN0IHZlY3RvcnMgZnJvbSB0aGUgUkZDL0ZJUFMgc3BlYy4KKyAgICAgICAtLSBGaXhlZCB0aGUgcmVnaXN0ZXIvdW5yZWdpc3RlciBmdW5jdGlvbnMgdG8gcHJvcGVybHkgcmVwb3J0IGVycm9ycyBpbiBjcnlwdF9lcnJvcgorICAgICAgIC0tIENvcnJlY3RseSB1cGRhdGVkIHlhcnJvdyBjb2RlIHRvIHJlbW92ZSBhIGZldyB1bnVzZWQgdmFyaWFibGVzLgorICAgICAgIC0tIFVwZGF0ZWQgbWFudWFsIHRvIGZpeCBhIGZldyBlcnJvbmVvdXMgZXhhbXBsZXMuCisgICAgICAgLS0gQWRkZWQgc2VjdGlvbiBvbiBIYXNoIGJhc2VkIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gQ29kZXMgKEhNQUMpIHRvIHRoZSBtYW51YWwKKworSnVuZSAxOXRoLCAyMDAyCit2MC40NiAgLS0gQWRkZWQgaW4gSE1BQyBjb2RlIGZyb20gRG9iZXMgVmFuZGVybWVlciAoZG9iZXNAc21hcnR0LmNvbSkKKworSnVuZSA4dGgsIDIwMDIKK3YwLjQ1ICAtLSBGaXhlZCBidWcgaW4gcmM1LmMgd2hlcmUgaWYgeW91IGNhbGxlZCByYzVfc2V0dXAoKSBiZWZvcmUgcmVnaXN0ZXJpbmcgUkM1IGl0IHdvdWxkIGNhdXNlCisgICAgICAgICAgdW5kZWZpbmVkIGJlaGF2aW91ci4KKyAgICAgICAtLSBGaXhlZCBteWNyeXB0X2NmZy5oIHRvIGVsaW1pbmF0ZSB0aGUgMjI0IGJpdCBFQ0Mga2V5LgorICAgICAgIC0tIG1hZGUgdGhlICJkZWZhdWx0IiBtYWtlZmlsZSB0YXJnZXQgaGF2ZSBkZXBlbmRzIG9uIG15Y3J5cHQuaCBhbmQgbXljcnlwdF9jZmcuaAorCitBcHIgNHRoLCAyMDAyCit2MC40NCAgLS0gRml4ZWQgYnVnIGluIGVjYy5jOjpuZXdfcG9pbnQoKSB3aGVyZSBpZiB0aGUgaW5pdGlhbCBtYWxsb2MgZmFpbHMgaXQgd291bGQgbm90IGNhdGNoIGl0LgorCitNYXIgMjJuZCwgMjAwMgordjAuNDMgIC0tIENoYW5nZWQgdGhlIFpMSUIgY29kZSBvdmVyIHRvIHRoZSAxLjEuNCBjb2RlIGJhc2UgdG8gYXZvaWQgdGhlICJkb3VibGUgZnJlZSIgYnVnLiAgCisgICAgICAgLS0gVXBkYXRlZCB0aGUgR0NDIG1ha2VmaWxlIG5vdCB0byB1c2UgLU8zIG9yIC1mdW5yb2xsLWxvb3BzCisgICAgICAgLS0gVmVyc2lvbiB0YWcgaW4gbXljcnlwdC5oIGhhcyBiZWVuIHVwZGF0ZWQgOi0pCisKK01hciAxMHRoLCAyMDAyCit2MC40MiAgLS0gVGhlIFJORyBjb2RlIGNhbiBub3cgdXNlIC9kZXYvdXJhbmRvbSBiZWZvcmUgdHJ5aW5nIC9kZXYvcmFuZG9tIChKLiBLbGFwc3RlKQorCitNYXIgM3JkLCAyMDAyCit2MC40MSAgLS0gQWRkZWQgc3VwcG9ydCB0byBsaW5rIGFuZCB1c2UgY2lwaGVycyBhdCBjb21waWxlIHRpbWUuICBUaGlzIGNhbiBncmVhdGx5IHJlZHVjZSB0aGUgY29kZSBzaXplIQorICAgICAgIC0tIEFkZGVkIGEgZGVtbyB0byBzaG93IG9mZiBob3cgc21hbGwgYW4gYXBwbGljYXRpb24gY2FuIGdldC4uLiA0NmtiIQorICAgICAgIC0tIERpc2FzdHJ5IHBvaW50ZWQgb3V0IHRoYXQgQmxvd2Zpc2ggaXMgc3VwcG9zZWQgdG8gYmUgaGlnaCBlbmRpYW4uCisgICAgICAgLS0gTWFkZSByZWdpc3RyeSBjb2RlIGZvciB0aGUgUFJOR3MgYXMgd2VsbCBbbm93IHRoZSBzbWFsbGVzdCB1c2VhYmxlIGxpbmsgaXMgNDNrYl0KKworRmViIDExdGgsIDIwMDIKK3YwLjQwICAtLSBSU0Egc2lnbmF0dXJlcyB1c2UgW2FuZCBjaGVjayBmb3JdIGZpeGVkIHBhZGRpbmcgc2NoZW1lLgorICAgICAgIC0tIEknbSBkZXZlbG9waW5nIGluIExpbnV4IG5vdyA6LSkKKyAgICAgICAtLSBObyBtb3JlIHdhcm5pbmdzIGZyb20gR0NDIDIuOTYKKworRmViIDV0aCwgMjAwMgordjAuMzkgIC0tIFVwZGF0ZWQgdGhlIFhURUEgY29kZSB0byB3b3JrIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgWFRFQSBkZXNpZ24KKworSmFudWFyeSAyNHRoLCAyMDAyCit2MC4zOCAgLS0gQ0ZCIGFuZCBPRkIgbW9kZXMgY2FuIG5vdyBoYW5kbGUgYmxvY2tzIG9mIHZhcmlhYmxlIHNpemUgbGlrZSB0aGUgQ1RSIGNvZGUKKyAgICAgICAtLSBXcm90ZSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBtZW1vcnkgY29tcHJlc3MgZnVuY3Rpb25zIGluIFpsaWIgdGhhdCBhY3QgbGlrZSB0aGUgZnVuY3Rpb25zCisgICAgICAgICAgaW4gdGhlIHJlc3Qgb2YgbXkgY3J5cHRvIGxpYgorCitKYW51YXJ5IDIzcmQsIDIwMDIKK3YwLjM3ICAtLSBBZGRlZCBzdXBwb3J0IGNvZGUgc28gdGhhdCBpZiBhIGhhc2ggc2l6ZSBhbmQga2V5IHNpemUgZm9yIGEgY2lwaGVyIGRvbid0IG1hdGNoIHVwIHRoZXkgd2lsbAorICAgICAgICAgIHVzZSB0aGUgbmV4dCBsb3dlciBrZXkgc3VwcG9ydGVkLiAgKG1haW5seSBmb3IgdGhlIFBLIGNvZGUpLiAgU28geW91IGNhbiBub3cgdXNlIFNIQS0xIHdpdGgKKyAgICAgICAgICBUd29maXNoLCBldGMuLi4KKyAgICAgICAtLSBBZGRlZCBtb3JlIG9wdGlvbnMgZm9yIFR3b2Zpc2guICBZb3UgY2FuIG5vdyB0ZWxsIGl0IHRvIHVzZSBwcmVjb21wdXRlZCBzYm94ZXMgYW5kIE1EUyBtdWx0aXBsaWNhdGlvbnMKKyAgICAgICAgICBUaGlzIHdpbGwgc3BlZWQgdXAgdGhlIFRXT0ZJU0hfU01BTEwgaW1wbGVtZW50YXRpb24gYnkgaW5jcmVhc2luZyB0aGUgY29kZSBzaXplIGJ5IDEwMjQgYnl0ZXMuCisgICAgICAgLS0gRml4ZWQgYSBidWcgaW4gcHJpbWUuYyB0aGF0IHdvdWxkIG5vdCB1c2UgdGhlIGNvcnJlY3QgdGFibGUgaWYgeW91IHVuZGVmaW5lZCBTTUFMTF9QUklNRV9UQUIKKyAgICAgICAtLSBGaXhlZCBhbGwgb2YgdGhlIFBLIHBhY2tldCBjb2RlIHRvIHVzZSB0aGUgc2FtZSBoZWFkZXIgZm9ybWF0IFtzZWUgcGFja2V0LmNdLiAgVGhpcyBtYWtlcyB0aGUgUEsgY29kZQorICAgICAgICAgIGJpbmFyeSB3aXNlIGluY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIHJlbGVhc2VzIHdoaWxlIHRoZSBBUEkgaGFzIG5vdCBjaGFuZ2VkIGF0IGFsbC4KKworSmFudWFyeSAyMm5kLCAyMDAyCit2MC4zNiAgLS0gQ29ycmVjdGlvbnMgdG8gdGhlIG1hbnVhbAorICAgICAgIC0tIE1hZGUgYSBtb2RpZmljYXRpb24gdG8gVHdvZmlzaCB3aGljaCBsZXRzIHlvdSBidWlsZCBhICJzbWFsbCByYW0iIHZhcmlhbnQuICBJdCByZXF1aXJlcworICAgICAgICAgIGFib3V0IDE5MCBieXRlcyBvZiByYW0gZm9yIHRoZSBrZXkgc3RvcmFnZSBjb21wYXJlZCB0byB0aGUgNCwyMDAgYnl0ZXMgdGhlIG5vcm1hbCAKKyAgICAgICAgICB2YXJpYW50IHJlcXVpcmVzLgorICAgICAgIC0tIFJlZHVjZWQgdGhlIHN0YWNrIHNwYWNlIHVzZWQgaW4gYWxsIG9mIHRoZSBQSyByb3V0aW5lcy4KKworSmFudWFyeSAxOXRoLCAyMDAyCit2MC4zNSAgLS0gSWYgeW91IHJlbW92ZWQgdGhlIGZpcnN0IGhhc2ggb3IgY2lwaGVyIGZyb20gdGhlIGxpYnJhcnkgaXQgd291bGRuJ3QgcmV0dXJuIGFuIGVycm9yIGlmIAorICAgICAgICAgIHlvdSB1c2VkIGFuIElEPTAgW2kuZSBibG93ZmlzaCBvciBzaGEyNTZdIGluIGFueSByb3V0aW5lLiAgTm93IGl0IGNoZWNrcyBmb3IgdGhhdCBhbmQgd2lsbAorICAgICAgICAgIHJldHVybiBhbiBlcnJvciBsaWtlIGl0IHNob3VsZAorICAgICAgIC0tIE1lcmdlZCBpbiBuZXcgcm91dGluZXMgZnJvbSBDbGF5IEN1bHZlci4gIFRoZXNlIHJvdXRpbmVzIGFyZSBmb3IgdGhlIFBLIGNvZGUgc28geW91IGNhbiBlYXNpbHkgCisgICAgICAgICAgZW5jb2RlIGEgc3ltbWV0cmljIGtleSBmb3IgbXVsdGlwbGUgcmVjaXBpZW50cy4KKyAgICAgICAtLSBNYWRlIHRoZSBlY2MgYW5kIERIIG1ha2Vfa2V5KCkgcm91dGluZXMgbWFrZSBzZWNyZXQga2V5cyBvZiB0aGUgc2FtZSBzaXplIGFzIHRoZSBrZXlzaXplIGxpc3RlZC4KKyAgICAgICAgICBPcmlnaW5hbGx5IEkgd2FudGVkIHRvIGVuc3VyZSB0aGF0IHRoZSBrZXlzIHdlcmUgc21hbGxlciB0aGFuIHRoZSBvcmRlciBvZiB0aGUgZmllbGQgdXNlZAorICAgICAgICAgIEhvd2V2ZXIsIHRoZSBiaWFzIGlzIHNvIGluc2lnbmlmY2FudCB1c2luZyBmdWxsIHNpemVzLiAgRm9yIGV4YW1wbGUsIHdpdGggYSBFQ0MtMTkyIGtleSB0aGUgb3JkZXIKKyAgICAgICAgICBpcyBhYm91dCAyXjE5MS45OSwgc28gaW5zdGVhZCBJIHJvdW5kZWQgZG93biBhbmQgdXNlZCBhIDE4NC1iaXQgc2VjcmV0IGtleS4gIE5vdyBJIHNpbXBseSB1c2UgYSBmdWxsIDE5Mi1iaXQKKyAgICAgICAgICBrZXkgdGhlIGNvZGUgd2lsbCB3b3JrIGp1c3QgdGhlIHNhbWUgZXhjZXB0IHRoYXQgc29tZSAxOTItYml0IGtleXMgd2lsbCBiZSBkdXBsaWNhdGVzIHdoaWNoIGlzIG5vdCBhIGJpZworICAgICAgICAgIGRlYWwgc2luY2UgMS8yXjE5MiBpcyBhIHZlcnkgc21hbGwgYmlhcyEKKyAgICAgICAtLSBNYWRlIHRoZSBjb25maWd1cmF0aW9uIGEgYml0IHNpbXBsZXIgYW5kIG1vcmUgZXhhY3RpbmcuICBZb3UgY2FuIGZvciBleGFtcGxlIG5vdyBzZWxlY3Qgd2hpY2ggREggb3IgRUNDCisgICAgICAgICAga2V5IHNldHRpbmdzIHlvdSB3aXNoIHRvIHN1cHBvcnQgd2l0aG91dCBpbmNsdWRpbmcgdGhlIGRhdGEgZm9yIGFsbCBvdGhlciBrZXkgc2V0dGluZ3MuICBJIHB1dCB0aGUgI2RlZmluZXMKKyAgICAgICAgICBpbiBhIG5ldyBmaWxlIGNhbGxlZCAibXljcnlwdF9jZmcuaCIKKyAgICAgICAtLSBDb25maWd1cmVkICJtcGktY29uZmlnLmgiIHNvIGl0cyBhIGJpdCBtb3JlIGNvbnNlcnZhdGl2ZSB3aXRoIHRoZSBtZW1vcnkgcmVxdWlyZWQgYW5kIGNvZGUgc3BhY2UgdXNlZAorICAgICAgIC0tIEphc29uIEtsYXBzdGUgc3VibWl0dGVkIGJ1ZyBmaXhlcyB0byB0aGUgeWFycm93LCBoYXNoIGFuZCB2YXJpb3VzIG90aGVyIGlzc3Vlcy4gIFRoZSB5YXJyb3cgY29kZSB3aWxsIG5vdworICAgICAgICAgIHVzZSB3aGF0IGV2ZXIgcmVtYWluaW5nIGhhc2gvY2lwaGVyIGNvbWJvIGlzIGxlZnQgW2FmdGVyIHlvdSAjdW5kZWYgdGhlbV0gYXQgYnVpbGQgdGltZS4gICBIZSBhbHNvIHN1Z2dlc3RlZAorICAgICAgICAgIGEgZml4IHRvIHJlbW92ZSB1bnVzZWQgc3RydWN0dXJlcyBmcm9tIHRoZSBzeW1tZXRyaWNfa2V5IGFuZCBoYXNoX3N0YXRlIHVuaW9ucy4KKyAgICAgICAtLSBNYWRlIHRoZSBDVFIgY29kZSBoYW5kbGUgdmFyaWFibGUgbGVuZ3RoIGJsb2NrcyBiZXR0ZXIuIEl0IHdpbGwgYnVmZmVyIHRoZSBlbmNyeXB0aW9uIHBhZCBzbyB5b3UgY2FuCisgICAgICAgICAgZW5jcnlwdCBtZXNzYWdlcyBhbnkgc2l6ZSBibG9jayBhdCBhIHRpbWUuCisgICAgICAgLS0gU2ltcGxpZmllZCB0aGUgeWFycm93IGNvZGUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5ldyBDVFIgY29kZS4KKyAgICAgICAtLSBBZGRlZCBhIDQwOTYtYml0IERIIGtleSBzZXR0aW5nLiAgVGhhdCB0b29rIG1lIGFib3V0IDM2IGhvdXJzIHRvIGZpbmQhCisgICAgICAgLS0gQ2hhbmdlZCB0aGUgYmFzZTY0IHJvdXRpbmVzIHRvIHVzZSBhIHJlYWwgYmFzZTY0IGVuY29kaW5nIHNjaGVtZS4KKyAgICAgICAtLSBBZGRlZCBpbiBESCBhbmQgRUNDICJlbmNyeXB0X2tleSgpIiBmdW5jdGlvbnMuICBUaGV5IGFyZSBzdGlsbCByYXRoZXIgImJldGEiaXNoLgorICAgICAgIC0tIEFkZGVkICoqVHdvZmlzaCoqIHRvIHRoZSBsaXN0IG9mIGNpcGhlcnMhCisKK0phbnVhcnkgMTh0aCwgMjAwMgordjAuMzQgIC0tIEFkZGVkICJzaGE1MTIiIHRvIHRoZSBsaXN0IG9mIGhhc2hlcy4gIFByb2R1Y2VzIGEgNTEyLWJpdCBtZXNzYWdlIGRpZ2VzdC4gIE5vdGUgdGhhdCB3aXRoIHRoZSBjdXJyZW50CisgICAgICAgICAgcGFkZGluZyB3aXRoIHRoZSByc2Ffc2lnbigpIGZ1bmN0aW9uIHlvdSBjYW5ub3QgdXNlIHNoYTUxMiB3aXRoIGEga2V5IGxlc3MgdGhhbiAxNTM2IGJpdHMgZm9yIHNpZ25hdHVyZXMuCisgICAgICAgLS0gQ2xlYW5lZCB1cCB0aGUgb3RoZXIgaGFzaCBmdW5jdGlvbnMgdG8gdXNlIHRoZSBMT0FEIGFuZCBTVE9SRSBtYWNyb3MuLi4KKworSmFudWFyeSAxN3RoLCAyMDAyCit2MC4zMyAgLS0gTWFkZSB0aGUgbG93ZXIgbGltaXQgb24ga2V5c2l6ZXMgZm9yIFJTQSAxMDI0IGJpdHMgYWdhaW4gYmVjYXVzZSBJIHJlYWxpemVkIHRoYXQgNzY4IGJpdCBrZXlzIHdvdWxkbid0CisgICAgICAgICAgd29yayB3aXRoIHRoZSBwYWRkaW5nIHNjaGVtZSBhbmQgbGFyZ2Ugc3ltbWV0cmljIGtleXMuCisgICAgICAgLS0gQWRkZWQgaW5mb3JtYXRpb24gY29uY2VybmluZyB0aGUgWmxpYiBsaWNlbnNlIHRvIHRoZSBtYW51YWwKKyAgICAgICAtLSBBZGRlZCBhIDMwNzItYml0IGtleSBzZXR0aW5nIGZvciB0aGUgREggY29kZS4KKyAgICAgICAtLSBNYWRlIHRoZSAiZmluZF94eXooKSIgcm91dGluZXMgdGFrZSAiY29uc3QgY2hhciAqIiBhcyBwZXIgQ2xheSBDdWx2ZXIncyBzdWdnZXN0aW9uLgorICAgICAgIC0tIEZpeGVkIGFuIGVtYmFyYXNzaW5nIHR5cG8gaW4gdGhlIG1hbnVhbCBjb25jZXJuaW5nIHRoZSBoYXNoZXMuICBUaGFuaydzIENsYXkgZm9yIGZpbmRpbmcgaXQhCisgICAgICAgLS0gRml4ZWQgcmFuZF9wcmltZSgpIHNvIHRoYXQgaXQgbWFrZXMgcHJpbWVzIGJpZ2dlciB0aGFuIHRoZSBzZXR0aW5nIHlvdSBnaXZlLiAgRm9yIGV4YW1wbGUsCisgICAgICAgICAgaWYgeW91IHdhbnQgYSAxMDI0LWJpdCBwcmltZSBpdCB3b3VsZCBtYWtlIGEgMTAyMy1iaXQgb25lLiAgTm93IGl0IGVuc3VyZXMgdGhhdCB0aGUgcHJpbWUKKyAgICAgICAgICBpdCBtYWtlcyBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIDJeKDhuKSAobiA9PSBieXRlcyBpbiBwcmltZSkuICBUaGlzIGRvZXNuJ3QgaGF2ZSBhIGh1Z2UKKyAgICAgICAgICBpbXBhY3Qgb24gc2VjdXJpdHkgYnV0IEkgY29ycmVjdGVkIGl0IGp1c3QgdGhlIHNhbWUuCisgICAgICAgLS0gRml4ZWQgdGhlIENUUiByb3V0aW5lIHRvIHdvcmsgb24gcGxhdGZvcm1zIHdoZXJlIGNoYXIgIT0gOC1iaXRzIAorICAgICAgIC0tIEZpeGVkIHNoYTEvc2hhMjU2L21kNS9ibG93ZmlzaCB0byBub3QgYXNzdW1lICJ1bnNpZ25lZCBsb25nID09IDMyLWJpdHMiLCBCYXNpY2FsbHkgYW55IG9wZXJhdGlvbiB3aXRoIGNhcnJpZXMKKyAgICAgICAgICBJICJBTkQiIHdpdGggMHhGRkZGRkZGRi4gIFRoYXQgZm9yY2VzIG9ubHkgdGhlIGxvd2VyIDMyLWJpdHMgdG8gaGF2ZSBpbmZvcm1hdGlvbiBpbiBpdC4gIE9uIHg4NiBwbGF0Zm9ybXMKKyAgICAgICAgICBtb3N0IGNvbXBpbGVycyBvcHRpbWl6ZSBvdXQgdGhlIEFORCBvcGVyYXRpb24gc2luY2UgaXRzIGEgbm9wLgorCitKYW51YXJ5IDE2dGgsIDIwMDIKK3YwLjMyICAtLSBNYWRlIFJpam5kYWVsJ3Mgc2V0dXAgZnVuY3Rpb24gZnVsbHkgc3RhdGljIHNvIGl0IGlzIHRocmVhZCBzYWZlCisgICAgICAgLS0gU3ZhbnRlIFNlbGVib3JnIHN1Z2dlc3RlZCBhIGNvc21ldGljIHN0eWxlIGZpeHVwIGZvciBhZXMuYywgCisgICAgICAgICAgYmFzaWNhbGx5IHRvIHJlbW92ZSBzb21lIG9mIHRoZSAjZGVmaW5lcyB0byBjbGVhbiBpdCB1cAorICAgICAgIC0tIE1hZGUgdGhlIFBLIHJvdXRpbmVzIG5vdCBleHBvcnQgdGhlIEFTQ0lJIHZlcnNpb24gb2YgdGhlIG5hbWVzIG9mIGNpcGhlcnMvaGFzaGVzIHdoaWNoIG1ha2VzCisgICAgICAgICAgdGhlIFBLIG1lc3NhZ2UgZm9ybWF0cyAqaW5jb21wYXRpYmxlKiB3aXRoIHByZXZpb3VzIHJlbGVhc2VzLgorICAgICAgIC0tIE1lcmdlIGluIFpsaWIgOi0pCisgCisgIAorSmFudWFyeSAxNXRoLCAyMDAyCit2MC4zMSAgLS0gVGhlIFJTQSByb3V0aW5lcyBjYW4gbm93IHVzZSBDUlQgdG8gc3BlZWQgdXAgZGVjcnlwdGlvbi9zaWduYXR1cmVzLiAgVGhlIHJvdXRpbmVzIGFyZSBiYWNrd2FyZHMgCisgICAgICAgICAgY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIHJlbGVhc2VzLgorICAgICAgIC0tIEZpeGVkIGFub3RoZXIgYnVnIHRoYXQgU3ZhbnRlIFNlbGVib3JnIGZvdW5kLiAgQmFzaWNhbGx5IHlvdSBjb3VsZCBidWZmZXItb3ZlcnJ1biB0aGUgCisgICAgICAgICAgcnNhX2V4cHRtb2QoKSBmdW5jdGlvbiBpdHNlbGYgaWYgeW91J3JlIG5vdCBjYXJlZnVsLiAgVGhhdCdzIGZpeGVkIG5vdy4gIEZpeGVkIGFub3RoZXIgYnVnIGluCisgICAgICAgICAgcnNhX2V4cHRtb2QoKSB3aGVyZSBpZiBpdCBrbm93cyB0aGUgYnVmZmVyIHlvdSBwYXNzZWQgaXMgdG9vIHNtYWxsIGl0IHdvdWxkbid0IGZyZWUgYWxsIHVzZWQgCisgICAgICAgICAgbWVtb3J5LiAgICAgICAKKyAgICAgICAtLSBpbXByb3ZlZCB0aGUgcmVhZGFiaWxpdHkgb2YgdGhlIFBLIGltcG9ydC9leHBvcnQgZnVuY3Rpb25zCisgICAgICAgLS0gQWRkZWQgYSBmaXggdG8gUlNBLkMgYnkgQ2xheSBDdWx2ZXIKKyAgICAgICAtLSBDaGFuZ2VkIHRoZSBDT05TVDY0IG1hY3JvIGZvciBNU1ZDIHRvIHVzZSB0aGUgInVuc2lnbmVkIF9faW50NjQiIHR5cGUsIGUuZy4gInVpNjQiIGluc3RlYWQgb2YgImk2NCIuCisKK0phbnVhcnkgMTR0aCwgMjAwMgordjAuMzAgIC0tIE1ham9yIGNoYW5nZSB0byB0aGUgWWFycm93IFBSTkcgY29kZSwgZml4ZWQgYSBidWcgdGhhdCBFdWdlbmUgU3Rhcm9rb2x0c2V2IGZvdW5kLgorICAgICAgICAgIEJhc2ljYWxseSBpZiB5b3UgYWRkZWQgZW50cm9weSB0byB0aGUgcG9vbCBpbiBzbWFsbCBpbmNyZW1lbnRzIGl0IGNvdWxkIGluIGZhY3QKKyAgICAgICAgICBjYW5jZWwgb3V0LiAgTm93IEkgaGFzaCB0aGUgcG9vbCB3aXRoIHRoZSBuZXcgZGF0YSB3aGljaCBpcyB3YXkgc21hcnRlci4KKworSmFudWFyeSAxMnRoLCAyMDAyCit2MC4yOSAgLS0gQWRkZWQgTVBJIGNvZGUgd3JpdHRlbiBieSBTdmFudGUgU2VsZWJvcmcgdG8gdGhlIGxpYnJhcnkuICBUaGlzIHdpbGwgbWFrZSB0aGUgUEsgY29kZSBtdWNoCisgICAgICAgICAgZWFzaWVyIHRvIGZvbGxvdyBhbmQgZGVidWcuICBBY3R1YWxseSBJJ3ZlIGFscmVhZHkgZml4ZWQgYSBtZW1vcnkgbGVhayBpbiBkaF9zaGFyZWRfc2VjcmV0KCkuCisgICAgICAgLS0gTWVtb3J5IGxlYWtzIGZvdW5kIGFuZCBjb3JyZWN0IGluIGFsbCB0aHJlZSBQSyByb3V0aW5lcy4gIFRoZSBsZWFrcyB3b3VsZCBvY2N1ciB3aGVuIGEgYmlnbnVtCisgICAgICAgICAgb3BlcmF0aW9uIGZhaWxzIHNvIGl0IHdvdWxkbid0IG5vcm1hbGx5IHR1cm4gdXAgaW4gdGhlIGNvdXJzZSBvZiBhIHByb2dyYW0KKyAgICAgICAtLSBGaXhlZCBidWdzIGluIGRoX2tleV9zaXplIGFuZCBlY2Nfa2V5X3NpemUgd2hpY2ggd291bGQgcmV0dXJuIGdhcmJhZ2UgZm9yIGludmFsaWQga2V5IGlkeCdlcworCitKYW51YXJ5IDExdGgsIDIwMDIKK3YwLjI4ICAtLSBDbGVhbmVkIHVwIHNvbWUgY29kZSBzbyB0aGF0IGl0IGRvZXNuJ3QgYXNzdW1lICJjaGFyID09IDhiaXRzIi4gIE1haW5seSBTQUZFUisgaGFzIGJlZW4gCisgICAgICAgICAgY2hhbmdlZC4KKyAgICAgICAtLSAqKipIVUdFKioqIGNoYW5nZXMgaW4gdGhlIFBLIGNvZGUuICBJIGNoZWNrIGFsbCByZXR1cm4gdmFsdWVzIGluIHRoZSBiaWdudW0gY29kZSBzbyBpZiB0aGVyZQorICAgICAgICAgIGFyZSBlcnJvcnMgW2luc3VmZmljaWVudCBtZW1vcnksIGV0Yy4uXSBpdCB3aWxsIGJlIHJlcG9ydGVkLiAgVGhpcyBtYWtlcyB0aGUgY29kZSBmYWlybHkgbW9yZQorICAgICAgICAgIHJvYnVzdCBhbmQgbGlrZWx5IHRvIGNhdGNoIGFueSBlcnJvcnMuCisgICAgICAgLS0gVXBkYXRlZCB0aGUgaXNfcHJpbWUoKSBmdW5jdGlvbiB0byB1c2UgYSBuZXcgcHJvdG90eXBlIFtpdCBjYW4gcmV0dXJuIGVycm9ycyBub3ddIGFuZCBpdCBhbHNvCisgICAgICAgICAgZG9lcyB0cmlhbCBkaXZpc2lvbnMgYWdhaW5zdCBtb3JlIHByaW1lcyBiZWZvcmUgdGhlIFJhYmluIE1pbGxlciBzdGVwcworICAgICAgIC0tIEFkZGVkIE9GQiwgQ0ZCIGFuZCBFQ0IgZ2VuZXJpYyB3cmFwcGVycyBmb3IgdGhlIHN5bW1ldHJpYyBjaXBoZXJzIHRvIHJvdW5kIG91dCB0aGUgaW1wbGVtZW50YXRpb25zLgorICAgICAgIC0tIEFkZGVkIFh0ZWEgdG8gdGhlIGxpc3Qgb2YgY2lwaGVycywgdG8gdGhlIGJlc3Qgb2YgbXkgYWJpbGl0eSBJIGhhdmUgdmVyaWZpZWQgdGhpcyBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAgICBJIHNob3VsZCBub3RlIHRoYXQgdGhlcmUgaXMgbm90IGFsb3Qgb2YgY29uY3JldGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNpcGhlci4gICJBbnNpIEMiIHZlcnNpb25zCisgICAgICAgICAgSSBmb3VuZCBkaWQgbm90IGFkZHJlc3MgZW5kaWFuZXNzIGFuZCB3ZXJlIG5vdCBldmVuIHBvcnRhYmxlIS4gIFRoaXMgY29kZSBpcyBwb3J0YWJsZSBhbmQgdG8gdGhlCisgICAgICAgICAgYmVzdCBvZiBteSBrbm93bGVkZ2UgaW1wbGVtZW50cyB0aGUgWHRlYSBhbGdvcml0aG0gYXMgcGVyIHRoZSBbc2hvcnRdIFgtVGVhIHBhcGVyLgorICAgICAgIC0tIFJlZm9ybWF0ZWQgdGhlIG1hbnVhbCB0byBpbmNsdWRlIHRoZSAqKkZVTEwqKiBzb3VyY2UgY29kZSBvcHRpbWl6ZWQgdG8gYmUgcHJpdGFibGUuCisKK0phbnVhcnkgOXRoLCAyMDAyCit2MC4yNyAgLS0gQ2hhbmdlZCB0aGUgY2hhciBjb25zdGFudHMgdG8gbnVtZXJpY2FsIHZhbHVlcy4gIEl0IGlzIGJhY2t3YXJkcyBjb21wYXRpYmxlIGFuZCBzaG91bGQgd29yayBvbgorICAgICAgICAgIHBsYXRmb3JtcyB3aGVyZSAnZCcgIT0gMTAwIFtmb3IgZXhhbXBsZV0uCisgICAgICAgLS0gTWFkZSBhIGNoYW5nZSB0byByYW5kX3ByaW1lKCkgd2hpY2ggdGFrZXMgdGhlIGlucHV0IGxlbmd0aCBhcyBhIHNpZ25lZCB0eXBlIHNvIHlvdSBjYW4gcGFzcworICAgICAgICAgIGEgbmVnYXRpdmUgbGVuIHRvIGdldCBhICIzIG1vZCA0IiBzdHlsZSBwcmltZS4uLiBvb3BzCisgICAgICAgLS0gY2hhbmdlZCB0aGUgTVNWQyBtYWtlZmlsZSB0byBidWlsZCB3aXRoIGEgd2FybmluZyBsZXZlbCBvZiB0aHJlZSwgbm8gd2FybmluZ3MhCisKK0phbnVhcnkgOHRoLCAyMDAyCit2MC4yNiAgLS0gdXBkYXRlZCBTSEEtMjU2IHRvIHVzZSBST1IoKSBmb3IgYSByb3RhdGUgc28gNjQtYml0IG1hY2hpbmVzIHdvbid0IGNvcnJ1cHQKKyAgICAgICAgICB0aGUgb3V0cHV0CisgICAgICAgLS0gQ2hhbmdlZCAjaW5jbHVkZSA8PiB0byAjaW5jbHVkZSAiIiBmb3IgbG9jYWwgLmggZmlsZXMgYXMgcGVyIFJpY2hhcmQgSGVhdGhmaWVsZHMnIHN1Z2dlc3Rpb25zLgorICAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBNUEkgW3dlbGwgYnVnIGluIE1TVkNdIHRoYXQgY29tcGlsZWQgY29kZSBpbmNvcnJlY3RseSBpbiBtcF9zZXRfaW50KCkKKyAgICAgICAgICBJIGFkZGVkIGEgd29yayBhcm91bmQgdGhhdCBjYXRjaGVzIHRoZSBlcnJvciBhbmQgY29udGludWVzIG5vcm1hbGx5LgorCitKYW51YXJ5IDh0aCwgMjAwMgordjAuMjUgIC0tIEFkZGVkIGEgc3R1cGlkIGRlZmluZSBzbyBNU1ZDIDYuMDAgY2FuIGJ1aWxkIHRoZSBsaWJyYXJ5LgorICAgICAgIC0tIEJpZyB0aGFua3MgdG8gc2NpLmNyeXB0IGFuZCAiQWpheSBLLiBBZ3Jhd2FsIiBmb3IgaGVscGluZyBtZSBwb3J0IHRoaXMgdG8gTVNWQworCitKYW51YXJ5IDd0aCwgMjAwMgordjAuMjQgIC0tIFNwZWQgdXAgQmxvd2Zpc2ggYnkgdW5yb2xsaW5nIGFuZCByZW1vdmluZyB0aGUgc3dhcHMuCisgICAgICAgLS0gTWFkZSB0aGUgY29kZSBjb21wbHkgd2l0aCBtb3JlIHRyYWRpdGlvbmFsIEFOU0kgQyBzdGFuZGFyZHMKKyAgICAgICAgICBTaG91bGQgY29tcGlsZSB3aXRoIE1TVkMgd2l0aCBsZXNzIGVycm9ycworICAgICAgIC0tIG1vdmVkIHRoZSBkZW1vcyBhbmQgZG9jdW1lbnRhdGlvbiBpbnRvIHRoZWlyIG93biBkaXJlY3RvcmllcworICAgICAgICAgIHNvIHlvdSBjYW4gZWFzaWx5IGJ1aWxkIHRoZSBsaWJyYXJ5IHdpdGggb3RoZXIgdG9vbCBjaGFpbnMKKyAgICAgICAgICBieSBjb21waWxpbmcgdGhlIGZpbGVzIGluIHRoZSByb290CisgICAgICAgLS0gY29udmVydGVkIGZ1bmN0aW9ucyB3aXRoIGxlbmd0aCBvZiBvdXRwdXRzIHRvIHVzZSAKKyAgICAgICAgICAidW5zaWduZWQgbG9uZyIgc28gMTYtYml0IHBsYXRmb3JtcyB3aWxsIGxpa2UgdGhpcyBsaWJyYXJ5IG1vcmUuCisKK0phbnVhcnkgNXRoLCAyMDAyCit2MC4yMyAgLS0gRml4ZWQgYSBzbWFsbCBlcnJvciBpbiB0aGUgTVBJIGNvbmZpZyBpdCBzaG91bGQgYnVpbGQgZmluZSBhbnl3aGVyZS4KKworSmFudWFyeSA0dGgsIDIwMDIKK3YwLjIyICAtLSBmYXN0ZXIgZ2ZfbXVsKCkgY29kZQorICAgICAgIC0tIGdmX3NobCgpIGFuZCBnZl9zaHIoKSBhcmUgc2FmZSBvbiA2NC1iaXQgcGxhdGZvcm1zIG5vdworICAgICAgIC0tIEZpeGVkIGFuIGVycm9yIGluIHRoZSBoYXNoZXMgdGhhdCBCcmlhbiBHbGFkbWFuIGZvdW5kLiAgCisgICAgICAgICAgQmFzaWNhbGx5IGlmIHRoZSBtZXNzYWdlIGhhcyBleGFjdGx5IDU2IGJ5dGVzIGxlZnQgdG8gYmUgCisgICAgICAgICAgY29tcHJlc3NlZCBJIGhhbmRsZWQgdGhlbSBpbmNvcnJlY3RseS4KKworSmFudWFyeSA0dGgsIDIwMDIKK3YwLjIxICAtLSBzcGVkIHVwIHRoZSBFQ0MgY29kZSBieSByZW1vdmluZyByZWR1bmRhbnQgZGl2aXNpb25zIGluIHRoZSAKKyAgICAgICAgICBwb2ludCBhZGQgYW5kIGRvdWJsZSByb3V0aW5lcy4gIEkgYWxzbyBleHRyYWN0IHRoZSBiaXRzIG1vcmUKKyAgICAgICAgICBlZmZpY2llbnRseSBpbiAiZWNjX211bG1vZCgpIiBub3cuCisgICAgICAgLS0gc3BlZCB1cCBbYW5kIGRvY3VtZW50ZWRdIHRoZSByYW5kX3ByaW1lKCkgZnVuY3Rpb24uICBOb3cgaXQganVzdAorICAgICAgICAgIG1ha2VzIGEgcmFuZG9tIGludGVnZXIgYW5kIGluY3JlbWVudHMgYnkgdHdvIHVudGlsIGEgcHJpbWUgaXMgZm91bmQKKyAgICAgICAgICBUaGlzIGlzIGZhc3RlciBzaW5jZSBpdCBkb2Vzbid0IHJlcXVpcmUgYWxvdCBvZiBjYWxscyB0byB0aGUgUFJORyBhbmQKKyAgICAgICAgICBpdCBkb2Vzbid0IHJlcXVpcmUgbG9hZGluZyBodWdlIGludGVnZXJzIG92ZXIgYW5kIG92ZXIuICByYW5kX3ByaW1lKCkKKyAgICAgICAgICBjYW4gYWxzbyBtYWtlIHByaW1lcyBjb25ncnVlbnQgdG8gMyBtb2QgNCBbaS5lIGZvciBhIGJsdW0gaW50ZWdlcl0KKyAgICAgICAtLSBhZGRlZCBhIGdmX3NxcnQoKSBmdW5jdGlvbiB0aGF0IGZpbmRzIHNxdWFyZSByb290cyBpbiBhIEdGKDJedykgZmllbGQKKyAgICAgICAtLSBmaXhlZCBhIGJ1ZyBpbiBnZl9kaXYoKSB0aGF0IHdvdWxkIHJldHVybiB0aGUgd3JvbmcgcmVzdWx0cyBpZiB0aGUgZGl2aXNvciBoYWQgYSBncmVhdG9yCisgICAgICAgICAgZGl2aXNvciB0aGFuIHRoZSBkaXZpZGVuZC4KKworSmFudWFyeSA0dGgsIDIwMDIKK3YwLjIwICAtLSBBZGRlZCB0aGUgZml4ZWQgTVBJIGJhY2sgaW4gc28gUlNBIGFuZCBESCBhcmUgbXVjaCBmYXN0ZXIgYWdhaW4KKwordjAuMTkgIC0tIFVwZGF0ZWQgdGhlIG1hbnVhbCB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgQnJpYW4gR2xhZG1hbiB3cm90ZSB0aGUgQUVTIGFuZCBTZXJwZW50IGNvZGUuCisgICAgICAgLS0gREgsIEVDQyBhbmQgUlNBIHNpZ25hdHVyZS9kZWNyeXB0aW9uIGZ1bmN0aW9ucyBjaGVjayBpZiB0aGUga2V5IGlzIHByaXZhdGUKKyAgICAgICAtLSBuZXcgREggc2lnbmF0dXJlL3ZlcmlmaWNhdGlvbiBjb2RlIHdvcmtzIGp1c3QgbGlrZSB0aGUgUlNBL0VDQyB2ZXJzaW9ucworCitKYW51YXJ5IDNyZCwgMjAwMgordjAuMTggIC0tIEFkZGVkIHdheSBtb3JlIGNvbW1lbnRzIHRvIGVhY2ggLkMgZmlsZSAKKyAgICAgICAtLSBmaXhlZCBhIGJ1ZyBpbiBjYmNfZGVjcnlwdChwdCwgY3QsIGtleSkgd2hlcmUgcHQgPT0gY3QgW2kuZSBzYW1lIGJ1ZmZlcl0KKyAgICAgICAtLSBmaXhlZCBSQzUgc28gaXQgcmVhZHMgdGhlIGRlZmF1bHQgcm91bmRzIG91dCBvZiB0aGUgY2lwaGVyX2Rlc2NyaXB0b3IgdGFibGUKKyAgICAgICAtLSBjbGVhbmVkIHVwIGVjY19leHBvcnQoKQorICAgICAgIC0tIENsZWFuZWQgdXAgZGhfaW1wb3J0KCkgYW5kIGVjY19pbXBvcnQoKSB3aGljaCBhbHNvIHBlcmZvcm0gbW9yZSAKKyAgICAgICAgICBlcnJvciBjaGVja2luZyBub3cKKyAgICAgICAtLSBGaXhlZCBhIHNlcmlvdXMgZmxhdyBpbiByc2FfaW1wb3J0KCkgd2l0aCBwcml2YXRlIGtleXMuCisKK0phbnVhcnkgMm5kLCAyMDAyCit2MC4xNyAgLS0gRml4ZWQgYSBidWcgaW4gdGhlIHJhbmRvbSBwcmltZSBnZW5lcmF0b3IgdGhhdCBmaXhlcyB0aGUgd3JvbmcgYml0cyB0byBvbmUKKyAgICAgICAtLSBFQ0MgYW5kIERIIGNvZGUgdmVyaWZ5IHRoYXQgdGhlIG1vZHVsaSBhbmQgb3JkZXJzIGFyZSBpbiBmYWN0IHByaW1lLiAgVGhhdCAKKyAgICAgICAgICBzbG93cyBkb3duIHRoZSB0ZXN0IHJvdXRpbmVzIGFsb3QgYnV0IHdoYXQgYXJlIHlvdSBnb25uYSBkbz8gCisgICAgICAgLS0gRml4ZWQgYSBodWdlIGJ1ZyBpbiB0aGUgbXBfZXhwdG1vZCgpIGZ1bmN0aW9uIHdoaWNoIGluY29ycmVjdGx5IGNhbGN1bGF0ZXMgZ154IG1vZCBwIGZvciBzb21lCisgICAgICAgICAgdmFsdWVzIG9mIHAuICBJIHJlcGxhY2VkIGl0IHdpdGggYSBzbG93IGZ1bmN0aW9uLiAgT25jZSB0aGUgYXV0aG9yIG9mIE1QSSBmaXhlcyBoaXMgZmFzdGVyIHJvdXRpbmUKKyAgICAgICAgICBJIHdpbGwgc3dpdGNoIGJhY2suCisgIAorSmFudWFyeSAxc3QsIDIwMDIgW3dob2EgbmV3IHllYXIhXQordjAuMTYgIC0tIEltcHJvdmVkIEdGIGRpdmlzaW9uIGNvZGUgdGhhdCBpcyBmYXN0ZXIuCisgICAgICAgLS0gZG9jdW1lbnRlZCB0aGUgR0YgY29kZQorCitEZWNlbWJlciAzMXN0LCAyMDAxCit2MC4xNSAgLS0gQSAxNzkyLWJpdCBhbmQgMjA0OC1iaXQgREggc2V0dGluZyB3YXMgYWRkZWQuICBUb29rIG1lIGFsbCBuaWdodCB0byAKKyAgICAgICAgICBmaW5kIGEgMTc5MiBhbmQgMjA0OC1iaXQgc3Ryb25nIHByaW1lIGJ1dCB3aGF0IHRoZSBoZWNrCisgICAgICAgLS0gTGlicmFyeSBub3cgaGFzIHBvbHlub21pYWwtYmFzaXMgR0YoMl53KSByb3V0aW5lcyBJIHdyb3RlIG15c2VsZi4gIENhbiBiZSB1c2VkIHRvIHBlcmZvcm0KKyAgICAgICAgICBFQ0Mgb3ZlciBHRigyXncpIGxhdGVyIG9uLi4uLgorICAgICAgIC0tIEZpeGVkIGEgYnVnIHdpdGggdGhlIGRlZmluZXMgdGhhdCBhbGxvd3MgaXQgdG8gYnVpbGQgaW4gd2luZG93cworICAgICAgIAorRGVjZW1iZXIgMzB0aCwgMjAwMQordjAuMTQgIC0tIEZpeGVkIHRoZSB4eHhfZW5jcnlwdCgpIHBhY2tldCByb3V0aW5lcyB0byBtYWtlIGFuIElWIG9mIGFwcHJvcHJpYXRlIHNpemUgCisgICAgICAgICAgZm9yIHRoZSBjaXBoZXIgdXNlZC4gIEl0IHdhcyBkZWZhdWx0aW5nIHRvIG1ha2luZyBhIDI1Ni1iaXQgSVYuLi4KKyAgICAgICAtLSBiYXNlNjRfZW5jb2RlKCkgbm93IGFwcGVuZHMgYSBOVUxMIGJ5dGUsIHVtICJkdWgiIHN0dXBpZCBtaXN0YWtlIG5vdyBmaXhlZC4uLgorICAgICAgIC0tIHNwZWxsIGNoZWNrZWQgdGhlIG1hbnVhbCBhZ2Fpbi4uLiA6LSkKKworRGVjZW1iZXIgMzB0aCwgMjAwMQordjAuMTMgIC0tIFN3aXRjaGluZyBiYWNrIHRvIG9sZGVyIGNvcHkgb2YgTVBJIHNpbmNlIGl0IHdvcmtzISBhcnJnLi4KKyAgICAgICAtLSBBZGRlZCBzaWduL3ZlcmlmeSBmdW5jdGlvbnMgZm9yIEVDQworICAgICAgIC0tIGFsbCBzaWduYXR1cmUgdmVyaWZpY2F0aW9uIHJvdXRpbmVzIGRlZmF1bHQgdG8gaW52YWxpZCBzaWduYXR1cmVzLgorICAgICAgIC0tIENoYW5nZWQgYWxsIGNhbGxzIHRvIG1lbXNldCB0byB6ZXJvbWVtLiAgRml4ZWQgdXAgc29tZSBidWZmZXIgcHJvYmxlbXMgCisgICAgICAgICAgaW4gb3RoZXIgcm91dGluZXMuICBBbGwgY2FsbHMgdG8gemVyb21lbSBsZXQgdGhlIGNvbXBpbGVyIGRldGVybWluZSB0aGUgc2l6ZQorICAgICAgICAgIG9mIHRoZSBkYXRhIHRvIHdpcGUuCisKK0RlY2VtYmVyIDI5dGgsIDIwMDEKK3YwLjEyICAtLSBJbXBvcnRlZCBhIG5ldyB2ZXJzaW9uIG9mIE1QSSBbdGhlIGJpZ251bSBsaWJyYXJ5XSB0aGF0IHNob3VsZAorICAgICAgICAgIGJlIGEgYml0IG1vcmUgc3RhYmxlIFtpZiB5b3Ugd2FudCB0byB3cml0ZSB5b3VyIG93biBiaWdudW0KKyAgICAgICAgICByb3V0aW5lcyB3aXRoIHRoZSBsaWJyYXJ5IHRoYXQgaXMuLi5dCisgICAgICAgLS0gTWFudWFsIGhhcyB3YXkgbW9yZSBpbmZvCisgICAgICAgLS0gaGFzaF9maWxlKCkgY2xlYXJzIHN0YWNrIG5vdyBbbGlrZSBpdCBzaG91bGRdCisgICAgICAgLS0gVGhlIGFydGlmaWNpYWwgY2FwIG9uIHRoZSBoYXNoIGlucHV0IHNpemUgb2YgMl4zMiBiaXRzIGhhcyBiZWVuCisgICAgICAgICAgcmVtb3ZlZC4gIEJhc2ljYWxseSBJIHdhcyB0b28gbGF6eSB0b2RvIDY0LWJpdCBtYXRoIGJlZm9yZQorICAgICAgICAgIFtkb24ndCBhc2sgd2h5Li4uIEkgY2FuJ3QgcmVtZW1iZXJdLiAgQW55d2F5cyB0aGUgaGFzaGVzCisgICAgICAgICAgc3VwcG9ydCB0aGUgc2l6ZSBvZiAyXjY0IGJpdHMgW2lmIHlvdSBldmVyIHVzZSB0aGF0IG1hbnkgYml0cyBpbiBhIG1lc3NhZ2UKKyAgICAgICAgICB0aGF0J3MganVzdCB3aWVyZC4uLl0KKyAgICAgICAtLSBUaGUgaGFzaGVzIG5vdyB3aXBlIHRoZSAiaGFzaF9zdGF0ZSIgYWZ0ZXIgdGhlIGRpZ2VzdCBpcyBjb21wdXRlZC4gIFRoaXMgaGVscHMKKyAgICAgICAgICBwcmV2ZW50IHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgaGFzaCBiZWluZyBsZWFrZWQgYWNjaWRlbnRseSBbaS5lIHN0YWNrIHByb2JsZW1zXQorCitEZWNlbWJlciAyOXRoLCAyMDAxCit2MC4xMSAgLS0gTWFkZSAjZGVmaW5lJ3Mgc28geW91IGNhbiB0cmltIHRoZSBsaWJyYXJ5IGRvd24gYnkgcmVtb3ZpbmcKKyAgICAgICAgICBjaXBoZXJzLCBoYXNocywgbW9kZXMgb2Ygb3BlcmF0aW9uLCBwcm5ncywgYW5kIGV2ZW4gUEsgYWxnb3JpdGhtcworICAgICAgICAgIEZvciBleGFtcGxlLCB0aGUgbGlicmFyeSB3aXRoIHJpam5kYWVsK2N0citzaGExK0VDQyBpcyA5MUtCIGNvbXBhcmVkCisgICAgICAgICAgdG8gdGhlIDI0NmtiIHRoZSBmdWxsIGxpYnJhcnkgdGFrZXMuCisgICAgICAgLS0gQWRkZWQgRUNDIHBhY2tldCByb3V0aW5lcyBmb3IgZW5jcnlwdC9kZWNyeXB0L3NpZ24vdmVyaWZ5IG11Y2ggYWtpbiB0bworICAgICAgICAgIHRoZSBSU0EgcGFja2V0IHJvdXRpbmVzLgorICAgICAgIC0tIEVDQyBub3cgY29tcHJlc3NlcyB0aGUgcHVibGljIGtleSwgYSBFQ0MtMTkyIHB1YmxpYyBrZXkgdGFrZXMgMzMgYnl0ZXMgCisgICAgICAgICAgZm9yIGV4YW1wbGUuLi4uCisKK0RlY2VtYmVyIDI4dGgsIDIwMDEKK3YwLjEwICAtLSBnb2luZyB0byByZXN0YXJ0IHRoZSBtYW51YWwgZnJvbSBzY3JhdGNoIHRvIG1ha2UgaXQgbW9yZSAKKyAgICAgICAgICBjbGVhciBhbmQgcHJvZmVzc2lvbmFsCisgICAgICAgLS0gQWRkZWQgRUNDIG92ZXIgWi9wWi4gIEJhc2ljYWxseSBwcm92aWRlcyBhcyBtdWNoIGFzIERICisgICAgICAgICAgZXhjZXB0IGl0cyBmYXN0ZXIgc2luY2UgdGhlIG51bWJlcnMgYXJlIHNtYWxsZXIuICBGb3IgZXhhbXBsZSwKKyAgICAgICAgICBBIGNvbXBhcmFibGUgMjU2LWJpdCBFQ0Mga2V5IHByb3ZpZGVzIGFzIG11Y2ggc2VjdXJpdHkgYXMgZXhwZWN0ZWQKKyAgICAgICAgICBmcm9tIGEgREgga2V5IG92ZXIgMTAyNC1iaXRzLgorICAgICAgIC0tIENsZWFuZWQgdXAgdGhlIERIIGNvZGUgdG8gbm90IGV4cG9ydCB0aGUgc3ltYm9sICJzZXRzW10iCisgICAgICAgLS0gRml4ZWQgYSBidWcgaW4gdGhlIERIIGNvZGUgdGhhdCB3b3VsZCBub3QgbWFrZSB0aGUgY29ycmVjdCBzaXplIAorICAgICAgICAgIHJhbmRvbSBzdHJpbmcgaWYgeW91IG1hZGUgdGhlIGtleSBzaG9ydC4gIEZvciBpbnN0YW5jZSBpZiB5b3Ugd2FudGVkIAorICAgICAgICAgIGEgNTEyLWJpdCBESCBrZXkgaXQgd291bGQgbWFrZSBhIDc2OC1iaXQgb25lIGJ1dCBvbmx5IG1ha2UgdXAgNTEyLWJpdHMgCisgICAgICAgICAgZm9yIHRoZSBleHBvbmVudC4uLiBub3cgaXQgbWFrZXMgdGhlIGZ1bGwgNzY4IGJpdHMgW29yIHdoYXRldmVyIHRoZSBjYXNlIAorICAgICAgICAgIGlzXQorICAgICAgIC0tIEZpeGVkIGFub3RoZXIgKioqU0VSSU9VUyoqKiBidWcgaW4gdGhlIERIIGNvZGUgdGhhdCB3b3VsZCBkZWZhdWx0IHRvIDc2OC1iaXQKKyAgICAgICAgICBrZXlzIGJ5IG1pc3Rha2UuCisKK0RlY2VtYmVyIDI1dGgsIDIwMDEKK3YwLjA5ICAtLSBJbmNsdWRlcyBhIGRlbW8gcHJvZ3JhbSBjYWxsZWQgZmlsZV9jcnlwdCB3aGljaCBzaG93cyBvZmYKKyAgICAgICAgICBob3cgdG8gdXNlIHRoZSBsaWJyYXJ5IHRvIG1ha2UgYSBjb21tYW5kIGxpbmUgdG9vbCB3aGljaAorICAgICAgICAgIGFsbG93cyB0aGUgdXNlciB0byBlbmNvZGUvZGVjb2RlIGEgZmlsZSB3aXRoIGFueQorICAgICAgICAgIGhhc2ggKG9uIHRoZSBwYXNzcGhyYXNlKSBhbmQgY2lwaGVyIGluIENUUiBtb2RlLgorICAgICAgIC0tIFN3aXRjaGVkIGV2ZXJ5dGhpbmcgdG8gdXNlIHR5cGVkZWYncyBub3cgdG8gY2xlYXIgdXAgdGhlIGNvZGUuCisgICAgICAgLS0gQWRkZWQgQUVTICgxMjgvMTkyIGFuZCAyNTYgYml0IGtleSBtb2RlcykKKworRGVjZW1iZXIgMjR0aCwgMjAwMQordjAuMDggIC0tIGZpeGVkIGEgdHlwbyBpbiB0aGUgbWFudWFsLiBNUEkgc3RvcmVzIGl0cyBiaWdudW1zIGluCisgICAgICAgICAgQklHIGVuZGlhbiBub3QgbGl0dGxlLgorICAgICAgIC0tIFN0YXJ0ZWQgYWRkaW5nIGEgUk5HIHRvIHRoZSBsaWJyYXJ5LiAgUmlnaHQgbm93IGl0IHRyaWVzCisgICAgICAgICAgdG8gb3BlbiAvZGV2L3JhbmRvbSBhbmQgaWYgdGhhdCBmYWlscyBpdCB1c2VzIGVpdGhlciB0aGUgCisgICAgICAgICAgTVMgQ1NQIG9yIHRoZSBjbG9jayBkcmlmdCBSTkcuICBJdCBhbHNvIGFsbG93cyBjYWxsYmFja3MgCisgICAgICAgICAgc2luY2UgdGhlIGRyaWZ0IFJORyBpcyBzbG93IChhYm91dCAzLjUgYnl0ZXMvc2VjKQorICAgICAgIC0tIHRoZSBSTkcgY2FuIGFsc28gYXV0b21hdGljYWxseSBzZXR1cCBhIFBSTkcgYXMgd2VsbCBub3cKKwordjAuMDcgIC0tIEFkZGVkIGJhc2ljIERIIHJvdXRpbmVzIHN1ZmZpY2llbnQgdG8gCisgICAgICAgICAgbmVnb3RpYXRlIHNoYXJlZCBzZWNyZXRzIAorICAgICAgICAgIFtzZWUgdGhlIG1hbnVhbCBmb3IgYSBjb21wbGV0ZSBleGFtcGxlIV0KKyAgICAgICAtLSBGaXhlZCByc2FfaW1wb3J0IHRvIGRldGVjdCB3aGVuIHRoZSBpbnB1dAorICAgICAgICAgIGNvdWxkIGJlIGNvcnJ1cHQuICAKKyAgICAgICAtLSBhZGRlZCBtb3JlIHRvIHRoZSBtYW51YWwuCisKK0RlY2VtYmVyIDIybmQsIDIwMDEKK3YwLjA2ICAtLSBGaXhlZCBzb21lIGZvcm1hdHRpbmcgZXJyb3JzIGluIAorICAgICAgICAgIHRoZSBoYXNoIGZ1bmN0aW9ucyBbanVzdCBzb3VyY2UgY29kZSBjbGVhbmluZ10KKyAgICAgICAtLSBGaXhlZCBhIHR5cG8gaW4gdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHNoYTI1NiA6LSkKKyAgICAgICAtLSBGaXhlZCBhbiBlcnJvciBpbiBiYXNlNjRfZW5jb2RlKCkgdGhhdCAKKyAgICAgICAgICB3b3VsZCBmYWlsIHRvIGNhdGNoIGFsbCBidWZmZXIgb3ZlcnJ1bnMKKyAgICAgICAtLSBUZXN0IHByb2dyYW0gdGltZXMgdGhlIFJTQSBhbmQgc3ltbWV0cmljIGNpcGhlciAKKyAgICAgICAgICByb3V0aW5lcyBmb3Iga2lja3MuLi4KKyAgICAgICAtLSBBZGRlZCB0aGUgImNvbnN0IiBtb2RpZmllciB0byBhbG90IG9mIHJvdXRpbmVzIHRvIAorICAgICAgICAgIGNsZWFyIHVwIHRoZSBwdXJwb3NlIG9mIGVhY2ggZnVuY3Rpb24uCisgICAgICAgLS0gQ2hhbmdlZCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB0byAiVG9tQ3J5cHQiIAorICAgICAgICAgIGZvbGxvd2luZyBhIHN1Z2dlc3Rpb24gZnJvbSBhIHNjaS5jcnlwdCByZWFkZXIuLi4uCisKK3YwLjA1ICAtLSBGaXhlZCB0aGUgUk9ML1JPUiBtYWNybyB0byBiZSBzYWZlIG9uIHBsYXRmb3JtcyAKKyAgICAgICAgICB3aGVyZSB1bnNpZ25lZCBsb25nIGlzIG5vdCAzMi1iaXRzCisgICAgICAgLS0gSSBoYXZlIGFkZGVkIGEgYml0IG1vcmUgdG8gdGhlIGRvY3VtZW50YXRpb24gCisgICAgICAgICAgbWFudWFsICJjcnlwdC5wZGYiIHByb3ZpZGVkLgorICAgICAgIC0tIEkgaGF2ZSBhZGRlZCBhIG1ha2VmaWxlIGZvciBMQ0MtV2luMzIuICBJdCBzaG91bGQgYmUgCisgICAgICAgICAgZWFzeSB0byBwb3J0IHRvIG90aGVyIExDQyBwbGF0Zm9ybXMgYnkgY2hhbmdpbmcgYSBmZXcgbGluZXMuCisgICAgICAgLS0gUmFuIGEgc3BlbGwgY2hlY2tlciBvdmVyIHRoZSBtYW51YWwuCisgICAgICAgLS0gQ2hhbmdlZCB0aGUgaGVhZGVyIGFuZCBsaWJyYXJ5IGZyb20gImNyeXB0IiB0byAibXljcnlwdCIgdG8gbm90CisgICAgICAgICAgY2xhc2ggd2l0aCB0aGUgKm5peCBwYWNrYWdlICJjcnlwdCIuCisKK3YwLjA0ICAtLSBGaXhlZCBhIGJ1ZyBpbiB0aGUgUkM1LFJDNixCbG93ZmlzaCBrZXkgc2NoZWR1bGVzCisgICAgICAgICAgd2hlcmUgaWYgdGhlIGtleSB3YXMgbm90IGEgbXVsdGlwbGUgb2YgNCBieXRlcyBpdCB3b3VsZAorICAgICAgICAgIG5vdCBnZXQgbG9hZGVkIGNvcnJlY3RseS4KKworRGVjZW1iZXIgMjFzdCwgMjAwMQorCit2MC4wMyAgLS0gQWRkZWQgU2VycGVudCB0byB0aGUgbGlzdCBvZiBjaXBoZXJzLgorCit2MC4wMiAgLS0gQ2hhbmdlZCBSQzUgdG8gb25seSBhbGxvdyAxMiB0byAyNCByb3VuZHMKKyAgICAgICAtLSBBZGRlZCBtb3JlIHRvIHRoZSBtYW51YWwuCisKK3YwLjAxICAtLSBXZSB3aWxsIGNhbGwgdGhpcyB0aGUgZmlyc3QgdmVyc2lvbi4KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvY2hhbmdlcyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yNzQgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMTYgMTk6MDg6MTcgJCAqLworCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9jcnlwdC5sb2YgYi9saWJ0b21jcnlwdC9jcnlwdC5sb2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxYTJmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L2NyeXB0LmxvZgpAQCAtMCwwICsxLDI0IEBACitcYWRkdnNwYWNlIHsxMFxwQCB9CitcYWRkdnNwYWNlIHsxMFxwQCB9CitcY29udGVudHNsaW5lIHtmaWd1cmV9e1xudW1iZXJsaW5lIHsyLjF9e1xpZ25vcmVzcGFjZXMgTG9hZCBBbmQgU3RvcmUgTWFjcm9zfX17OX17ZmlndXJlLjIuMX0KK1xjb250ZW50c2xpbmUge2ZpZ3VyZX17XG51bWJlcmxpbmUgezIuMn17XGlnbm9yZXNwYWNlcyBSb3RhdGUgTWFjcm9zfX17OX17ZmlndXJlLjIuMn0KK1xhZGR2c3BhY2UgezEwXHBAIH0KK1xjb250ZW50c2xpbmUge2ZpZ3VyZX17XG51bWJlcmxpbmUgezMuMX17XGlnbm9yZXNwYWNlcyBCdWlsdC0tSW4gU29mdHdhcmUgQ2lwaGVyc319ezE5fXtmaWd1cmUuMy4xfQorXGNvbnRlbnRzbGluZSB7ZmlndXJlfXtcbnVtYmVybGluZSB7My4yfXtcaWdub3Jlc3BhY2VzIFR3b2Zpc2ggQnVpbGQgT3B0aW9uc319ezIxfXtmaWd1cmUuMy4yfQorXGFkZHZzcGFjZSB7MTBccEAgfQorXGNvbnRlbnRzbGluZSB7ZmlndXJlfXtcbnVtYmVybGluZSB7NC4xfXtcaWdub3Jlc3BhY2VzIEJ1aWx0LS1JbiBTb2Z0d2FyZSBIYXNoZXN9fXs1N317ZmlndXJlLjQuMX0KK1xhZGR2c3BhY2UgezEwXHBAIH0KK1xhZGR2c3BhY2UgezEwXHBAIH0KK1xjb250ZW50c2xpbmUge2ZpZ3VyZX17XG51bWJlcmxpbmUgezYuMX17XGlnbm9yZXNwYWNlcyBMaXN0IG9mIFByb3ZpZGVkIFBSTkdzfX17ODJ9e2ZpZ3VyZS42LjF9CitcYWRkdnNwYWNlIHsxMFxwQCB9CitcYWRkdnNwYWNlIHsxMFxwQCB9CitcYWRkdnNwYWNlIHsxMFxwQCB9CitcY29udGVudHNsaW5lIHtmaWd1cmV9e1xudW1iZXJsaW5lIHs5LjF9e1xpZ25vcmVzcGFjZXMgRFNBIEtleSBTaXplc319ezExOX17ZmlndXJlLjkuMX0KK1xhZGR2c3BhY2UgezEwXHBAIH0KK1xjb250ZW50c2xpbmUge2ZpZ3VyZX17XG51bWJlcmxpbmUgezEwLjF9e1xpZ25vcmVzcGFjZXMgTGlzdCBvZiBBU04uMSBTdXBwb3J0ZWQgVHlwZXN9fXsxMjd9e2ZpZ3VyZS4xMC4xfQorXGFkZHZzcGFjZSB7MTBccEAgfQorXGFkZHZzcGFjZSB7MTBccEAgfQorXGNvbnRlbnRzbGluZSB7ZmlndXJlfXtcbnVtYmVybGluZSB7MTIuMX17XGlnbm9yZXNwYWNlcyBSU0EvREggS2V5IFN0cmVuZ3RofX17MTQ5fXtmaWd1cmUuMTIuMX0KK1xjb250ZW50c2xpbmUge2ZpZ3VyZX17XG51bWJlcmxpbmUgezEyLjJ9e1xpZ25vcmVzcGFjZXMgRUNDIEtleSBTdHJlbmd0aH19ezE0OX17ZmlndXJlLjEyLjJ9CitcYWRkdnNwYWNlIHsxMFxwQCB9CitcYWRkdnNwYWNlIHsxMFxwQCB9CmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9jcnlwdC50ZXggYi9saWJ0b21jcnlwdC9jcnlwdC50ZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzNzRmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L2NyeXB0LnRleApAQCAtMCwwICsxLDY0ODkgQEAKK1xkb2N1bWVudGNsYXNzW3N5bnBhcGVyXXtib29rfQorXHVzZXBhY2thZ2VbZHZpcHNde2dlb21ldHJ5fQorXHVzZXBhY2thZ2V7aHlwZXJyZWZ9CitcdXNlcGFja2FnZXttYWtlaWR4fQorXHVzZXBhY2thZ2V7YW1zc3ltYn0KK1x1c2VwYWNrYWdle2NvbG9yfQorXHVzZXBhY2thZ2V7YWxsdHR9CitcdXNlcGFja2FnZXtncmFwaGljeH0KK1x1c2VwYWNrYWdle2xheW91dH0KK1x1c2VwYWNrYWdle2ZhbmN5aGRyfQorXGRlZlx1bmlvbntcY3VwfQorXGRlZlxpbnRlcnNlY3R7XGNhcH0KK1xkZWZcZ2V0c3JhbmRvbXtcc3RhY2tyZWx7XHJtIFJ9e1xnZXRzfX0KK1xkZWZcY3Jvc3N7XHRpbWVzfQorXGRlZlxjYXR7XGhzcGFjZXswLjVlbX0gXHwgXGhzcGFjZXswLjVlbX19CitcZGVmXGNhdG57JFx8JH0KK1xkZWZcZGl2aWRlc3tcaHNwYWNlezAuM2VtfSB8IFxoc3BhY2V7MC4zZW19fQorXGRlZlxuZXF1aXZ7XG5vdFxlcXVpdn0KK1xkZWZcYXBwcm94e1xyYWlzZWJveHswLjJleH17XG1ib3h7XHNtYWxsICRcc2ltJH19fQorXGRlZlxsY217e1xybSBsY219fQorXGRlZlxnY2R7e1xybSBnY2R9fQorXGRlZlxsb2d7e1xybSBsb2d9fQorXGRlZlxvcmR7e1xybSBvcmR9fQorXGRlZlxhYnN7e1xtYXRoaXQgYWJzfX0KK1xkZWZccmVwe3tcbWF0aGl0IHJlcH19CitcZGVmXG1vZHt7XG1hdGhpdFwgbW9kXCB9fQorXHJlbmV3Y29tbWFuZHtccG1vZH1bMV17XCAoe1xybSBtb2RcIH17IzF9KX0KK1xuZXdjb21tYW5ke1xmbG9vcn1bMV17XGxlZnRcbGZsb29yeyMxfVxyaWdodFxyZmxvb3J9CitcbmV3Y29tbWFuZHtcY2VpbH1bMV17XGxlZnRcbGNlaWx7IzF9XHJpZ2h0XHJjZWlsfQorXGRlZlxPcnt7XHJtXCBvclwgfX0KK1xkZWZcQW5ke3tccm1cIGFuZFwgfX0KK1xkZWZcaWZme1xoc3BhY2V7MWVtfVxMb25nbGVmdHJpZ2h0YXJyb3dcaHNwYWNlezFlbX19CitcZGVmXGltcGxpZXN7XFJpZ2h0YXJyb3d9CitcZGVmXHVuZGVmaW5lZHt7XHJtIFx0ZXh0aXR7dW5kZWZpbmVkfX19CitcZGVmXFByb29me1x2c3BhY2V7MWV4fVxub2luZGVudCB7XGJmIFByb29mOn1caHNwYWNlezFlbX19CitcbGV0XG9sZHBoaVxwaGkKK1xkZWZccGhpe1x2YXJwaGl9CitcZGVmXFBye3tccm0gUHJ9fQorXG5ld2NvbW1hbmR7XHN0cn1bMV17e1xtYXRoYmZ7IzF9fX0KK1xkZWZcRnt7XG1hdGhiYiBGfX0KK1xkZWZcTnt7XG1hdGhiYiBOfX0KK1xkZWZcWnt7XG1hdGhiYiBafX0KK1xkZWZcUnt7XG1hdGhiYiBSfX0KK1xkZWZcQ3t7XG1hdGhiYiBDfX0KK1xkZWZcUXt7XG1hdGhiYiBRfX0KK1xkZWZpbmVjb2xvcntER3JheX17Z3JheX17MC41fQorXG5ld2NvbW1hbmR7XGVtYWlsYWRkcn1bMV17XG1ib3h7JDwkeyMxfSQ+JH19CitcZGVmXHR3aWRkbGV7XHJhaXNlYm94ezAuM2V4fXtcbWJveHtcdGlueSAkXHNpbSR9fX0KK1xkZWZcZ2Fwe1x2c3BhY2V7MC41ZXh9fQorXG1ha2VpbmRleAorXG5ld2NvbW1hbmR7XG15c2VjdGlvbn1bMV0gICAgJSBSZS1kZWZpbmUgdGhlIGNoYXB0ZXJpbmcgY29tbWFuZCB0byB1c2UKKwl7ICAgICAgICAgICAgICAgICAgICUgVEhFU0UgaGVhZGVycy4KKwlcc2VjdGlvbnsjMX0KKyAgIFxtYXJrYm90aHtcdGV4dHNme3d3dy5saWJ0b20ub3JnfX17XHRoZXNlY3Rpb24gfiB7IzF9fQorCX0KKworXG5ld2NvbW1hbmR7XG15c3RhcnNlY3Rpb259WzFdICAgICUgUmUtZGVmaW5lIHRoZSBjaGFwdGVyaW5nIGNvbW1hbmQgdG8gdXNlCisJeyAgICAgICAgICAgICAgICAgICAlIFRIRVNFIGhlYWRlcnMuCisJXHNlY3Rpb24qeyMxfQorICAgXG1hcmtib3Roe1x0ZXh0c2Z7d3d3LmxpYnRvbS5vcmd9fXt7IzF9fQorCX0KK1xwYWdlc3R5bGV7ZW1wdHl9CitcYmVnaW57ZG9jdW1lbnR9CitcZnJvbnRtYXR0ZXIKK1xwYWdlc3R5bGV7ZW1wdHl9CisKK34KKworXHZzcGFjZXsyaW59CisKK34KKworXGJlZ2lue2NlbnRlcn0KK1xiZWdpbntIdWdlfUxpYlRvbUNyeXB0XGVuZHtIdWdlfQorCit+CisKK1xiZWdpbntsYXJnZX1EZXZlbG9wZXIgTWFudWFsXGVuZHtsYXJnZX0KKworfgorCitcdnNwYWNlezE1bW19CisKKworXGJlZ2lue3RhYnVsYXJ9e2N9CitUb20gU3QgRGVuaXMgXFwKK0xpYlRvbSBQcm9qZWN0cworXGVuZHt0YWJ1bGFyfQorXGVuZHtjZW50ZXJ9CitcdmZpbAorXG5ld3BhZ2UKK1RoaXMgZG9jdW1lbnQgaXMgcGFydCBvZiB0aGUgTGliVG9tQ3J5cHQgcGFja2FnZSBhbmQgaXMgaGVyZWJ5IHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyBkb21haW4uCisKK34KKworT3BlbiBTb3VyY2UuICBPcGVuIEFjYWRlbWlhLiAgT3BlbiBNaW5kcy4KKworfgorCitcYmVnaW57Zmx1c2hyaWdodH0KK1RvbSBTdCBEZW5pcworfgorCitPdHRhd2EsIE9udGFyaW8KK34KKworQ2FuYWRhCit+CitcdmZpbAorXGVuZHtmbHVzaHJpZ2h0fQorXG5ld3BhZ2UKKworXHRhYmxlb2Zjb250ZW50cworXGxpc3RvZmZpZ3VyZXMKK1xwYWdlc3R5bGV7bXloZWFkaW5nc30KK1xtYWlubWF0dGVyCitcY2hhcHRlcntJbnRyb2R1Y3Rpb259CitcbXlzZWN0aW9ue1doYXQgaXMgdGhlIExpYlRvbUNyeXB0P30KK0xpYlRvbUNyeXB0IGlzIGEgcG9ydGFibGUgSVNPIEMgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IG1lYW50IHRvIGJlIGEgdG9vbCBzZXQgZm9yIGNyeXB0b2dyYXBoZXJzIHdobyBhcmUgCitkZXNpZ25pbmcgY3J5cHRvc3lzdGVtcy4gIEl0IHN1cHBvcnRzIHN5bW1ldHJpYyBjaXBoZXJzLCBvbmUtd2F5IGhhc2hlcywgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9ycywgCitwdWJsaWMga2V5IGNyeXB0b2dyYXBoeSAodmlhIFBLQ1MgXCMxIFJTQSwgREggb3IgRUNDREgpLCBhbmQgYSBwbGV0aG9yYSBvZiBzdXBwb3J0IHJvdXRpbmVzLiAgCisKK1RoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBzdWNoIHRoYXQgbmV3IGNpcGhlcnMvaGFzaGVzL1BSTkdzIGNhbiBiZSBhZGRlZCBhdCBydW4tdGltZSBhbmQgdGhlIGV4aXN0aW5nIEFQSSAKKyhhbmQgaGVscGVyIEFQSSBmdW5jdGlvbnMpIGFyZSBhYmxlIHRvIHVzZSB0aGUgbmV3IGRlc2lnbnMgYXV0b21hdGljYWxseS4gIFRoZXJlIGV4aXN0cyBzZWxmLWNoZWNrIGZ1bmN0aW9ucyBmb3IgZWFjaCAKK2Jsb2NrIGNpcGhlciBhbmQgaGFzaCBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCB0aGV5IGNvbXBpbGUgYW5kIGV4ZWN1dGUgdG8gdGhlIHB1Ymxpc2hlZCBkZXNpZ24gc3BlY2lmaWNhdGlvbnMuICBUaGUgbGlicmFyeSAKK2Fsc28gcGVyZm9ybXMgZXh0ZW5zaXZlIHBhcmFtZXRlciBlcnJvciBjaGVja2luZyB0byBwcmV2ZW50IGFueSBudW1iZXIgb2YgcnVuLXRpbWUgZXhwbG9pdHMgb3IgZXJyb3JzLgorCitcc3Vic2VjdGlvbntXaGF0IHRoZSBsaWJyYXJ5IElTIGZvcj99CisKK1RoZSBsaWJyYXJ5IHNlcnZlcyBhcyBhIHRvb2xraXQgZm9yIGRldmVsb3BlcnMgd2hvIGhhdmUgdG8gc29sdmUgY3J5cHRvZ3JhcGhpYyBwcm9ibGVtcy4gIE91dCBvZiB0aGUgYm94IExpYlRvbUNyeXB0Citkb2VzIG5vdCBwcm9jZXNzIFNTTCBvciBPcGVuUEdQIG1lc3NhZ2VzLCBpdCBkb2Vzbid0IHJlYWQgWC41MDkgY2VydGlmaWNhdGVzLCBvciB3cml0ZSBQRU0gZW5jb2RlZCBkYXRhLiAgSXQgZG9lcywgaG93ZXZlciwKK3Byb3ZpZGUgYWxsIG9mIHRoZSB0b29scyByZXF1aXJlZCB0byBidWlsZCBzdWNoIGZ1bmN0aW9uYWxpdHkuICBMaWJUb21DcnlwdCB3YXMgZGVzaWduZWQgdG8gYmUgYSBmbGV4aWJsZSBsaWJyYXJ5IHRoYXQgCit3YXMgbm90IHRpZWQgdG8gYW55IHBhcnRpY3VsYXIgY3J5cHRvZ3JhcGhpYyBwcm9ibGVtLiAgCisKK1xteXNlY3Rpb257V2h5IGRpZCBJIHdyaXRlIGl0P30KK1lvdSBtYXkgYmUgd29uZGVyaW5nLCBcdGV4dGl0e1RvbSwgd2h5IGRpZCB5b3Ugd3JpdGUgYSBjcnlwdG8gbGlicmFyeS4gIEkgYWxyZWFkeSBoYXZlIG9uZS59ICBXZWxsIHRoZSByZWFzb24gZmFsbHMgaW50bwordHdvIGNhdGVnb3JpZXM6CitcYmVnaW57ZW51bWVyYXRlfQorICAgIFxpdGVtIEkgYW0gdG9vIGxhenkgdG8gZmlndXJlIG91dCBzb21lb25lIGVsc2UncyBBUEkuICBJJ2QgcmF0aGVyIGludmVudCBteSBvd24gc2ltcGxlciBBUEkgYW5kIHVzZSB0aGF0LgorICAgIFxpdGVtIEl0IHdhcyAoc3RpbGwgaXMpIGdvb2QgY29kaW5nIHByYWN0aWNlLgorXGVuZHtlbnVtZXJhdGV9CisKK1RoZSBpZGVhIGlzIHRoYXQgSSBhbSBub3Qgc3RyaXZpbmcgdG8gcmVwbGFjZSBPcGVuU1NMIG9yIENyeXB0bysrIG9yIENyeXB0bGliIG9yIGV0Yy4gIEknbSB0cnlpbmcgdG8gd3JpdGUgbXkgCit7XGJmIG93bn0gY3J5cHRvIGxpYnJhcnkgYW5kIGhvcGVmdWxseSBhbG9uZyB0aGUgd2F5IG90aGVycyB3aWxsIGFwcHJlY2lhdGUgdGhlIHdvcmsuCisKK1dpdGggdGhpcyBsaWJyYXJ5IGFsbCBjb3JlIGZ1bmN0aW9ucyAoY2lwaGVycywgaGFzaGVzLCBwcm5ncywgYW5kIGJpZ251bSkgaGF2ZSB0aGUgc2FtZSBwcm90b3R5cGUgZGVmaW5pdGlvbi4gIFRoZXkgYWxsIGxvYWQKK2FuZCBzdG9yZSBkYXRhIGluIGEgZm9ybWF0IGluZGVwZW5kZW50IG9mIHRoZSBwbGF0Zm9ybS4gIFRoaXMgbWVhbnMgaWYgeW91IGVuY3J5cHQgd2l0aCBCbG93ZmlzaCBvbiBhIFBQQyBpdCBzaG91bGQgZGVjcnlwdAorb24gYW4geDg2IHdpdGggemVybyBwcm9ibGVtcy4gIFRoZSBjb25zaXN0ZW50IEFQSSBhbHNvIG1lYW5zIHRoYXQgaWYgeW91IGxlYXJuIGhvdyB0byB1c2UgQmxvd2Zpc2ggd2l0aCB0aGUgbGlicmFyeSB5b3UgCitrbm93IGhvdyB0byB1c2UgU2FmZXIrLCBSQzYsIG9yIFNlcnBlbnQgYXMgd2VsbC4gIFdpdGggYWxsIG9mIHRoZSBjb3JlIGZ1bmN0aW9ucyB0aGVyZSBhcmUgY2VudHJhbCBkZXNjcmlwdG9yIHRhYmxlcyAKK3RoYXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBhIHByb2dyYW0gYXV0b21hdGljYWxseSBwaWNrIGJldHdlZW4gY2lwaGVycywgaGFzaGVzIGFuZCBQUk5HcyBhdCBydW4tdGltZS4gIFRoYXQgbWVhbnMgeW91ciAKK2FwcGxpY2F0aW9uIGNhbiBzdXBwb3J0IGFsbCBjaXBoZXJzL2hhc2hlcy9wcm5ncy9iaWdudW0gd2l0aG91dCBjaGFuZ2luZyB0aGUgc291cmNlIGNvZGUuCisKK05vdCBvbmx5IGRpZCBJIHN0cml2ZSB0byBtYWtlIGEgY29uc2lzdGVudCBhbmQgc2ltcGxlIEFQSSB0byB3b3JrIHdpdGggYnV0IEkgYWxzbyBhdHRlbXB0ZWQgdG8gbWFrZSB0aGUgbGlicmFyeQorY29uZmlndXJhYmxlIGluIHRlcm1zIG9mIGl0cyBidWlsZCBvcHRpb25zLiAgT3V0IG9mIHRoZSBib3ggdGhlIGxpYnJhcnkgd2lsbCBidWlsZCB3aXRoIGFueSBtb2Rlcm4gdmVyc2lvbiBvZiBHQ0MKK3dpdGhvdXQgaGF2aW5nIHRvIHVzZSBjb25maWd1cmUgc2NyaXB0cy4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgbGlicmFyeSB3aWxsIHdvcmsgd2l0aCBwbGF0Zm9ybXMgd2hlcmUgZGV2ZWxvcG1lbnQKK3Rvb2xzIG1heSBiZSBsaW1pdGVkIChlLmcuIG5vIGF1dG9jb25mKS4KKworT24gdG9wIG9mIG1ha2luZyB0aGUgYnVpbGQgc2ltcGxlIGFuZCB0aGUgQVBJIGFwcHJvYWNoYWJsZSBJJ3ZlIGFsc28gYXR0ZW1wdGVkIGZvciBhIHJlYXNvbmFibHkgaGlnaCBsZXZlbCBvZgorcm9idXN0bmVzcyBhbmQgZWZmaWNpZW5jeS4gIExpYlRvbUNyeXB0IHRyYXBzIGFuZCByZXR1cm5zIGEgc2VyaWVzIG9mIGVycm9ycyByYW5naW5nIGZyb20gaW52YWxpZAorYXJndW1lbnRzIHRvIGJ1ZmZlciBvdmVyZmxvd3Mvb3ZlcnJ1bnMuICBJdCBpcyBtb3N0bHkgdGhyZWFkIHNhZmUgYW5kIGhhcyBiZWVuIGNsb2NrZWQgb24gdmFyaW91cyBwbGF0Zm9ybXMKK3dpdGggXHRleHRpdHtjeWNsZXMgcGVyIGJ5dGV9IHRpbWluZ3MgdGhhdCBhcmUgY29tcGFyYWJsZSAoYW5kIG9mdGVuIGZhdm91cmFibGUpIHRvIG90aGVyIGxpYnJhcmllcyBzdWNoIGFzIE9wZW5TU0wgYW5kCitDcnlwdG8rKy4KKworXHN1YnNlY3Rpb257TW9kdWxhcn0KK1RoZSBMaWJUb21DcnlwdCBwYWNrYWdlIGhhcyBhbHNvIGJlZW4gd3JpdHRlbiB0byBiZSB2ZXJ5IG1vZHVsYXIuICBUaGUgYmxvY2sgY2lwaGVycywgb25lLS13YXkgaGFzaGVzLAorcHNldWRvLS1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgKFBSTkcpLCBhbmQgYmlnbnVtIG1hdGggcm91dGluZXMgYXJlIGFsbCB1c2VkIHdpdGhpbiB0aGUgQVBJIHRocm91Z2ggXHRleHRpdHtkZXNjcmlwdG9yfSB0YWJsZXMgd2hpY2ggCithcmUgZXNzZW50aWFsbHkgc3RydWN0dXJlcyB3aXRoIHBvaW50ZXJzIHRvIGZ1bmN0aW9ucy4gIFdoaWxlIHlvdSBjYW4gc3RpbGwgY2FsbCBwYXJ0aWN1bGFyIGZ1bmN0aW9ucworZGlyZWN0bHkgKFx0ZXh0aXR7ZS5nLiBzaGEyNTZcX3Byb2Nlc3MoKX0pIHRoaXMgZGVzY3JpcHRvciBpbnRlcmZhY2UgYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gY3VzdG9taXplIHRoZWlyCit1c2FnZSBvZiB0aGUgbGlicmFyeS4KKworRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgaGFyZHdhcmUgcGxhdGZvcm0gd2l0aCBhIHNwZWNpYWxpemVkIFJORyBkZXZpY2UuICBPYnZpb3VzbHkgb25lIHdvdWxkIGxpa2UgdG8gdGFwCit0aGF0IGZvciB0aGUgUFJORyBuZWVkcyB3aXRoaW4gdGhlIGxpYnJhcnkgKFx0ZXh0aXR7ZS5nLiBtYWtpbmcgYSBSU0Ega2V5fSkuICBBbGwgdGhlIGRldmVsb3BlciBoYXMgdG8gZG8KK2lzIHdyaXRlIGEgZGVzY3JpcHRvciBhbmQgdGhlIGZldyBzdXBwb3J0IHJvdXRpbmVzIHJlcXVpcmVkIGZvciB0aGUgZGV2aWNlLiAgQWZ0ZXIgdGhhdCB0aGUgcmVzdCBvZiB0aGUgCitBUEkgY2FuIG1ha2UgdXNlIG9mIGl0IHdpdGhvdXQgY2hhbmdlLiAgU2ltaWxhcmx5IGltYWdpbmUgYSBmZXcgeWVhcnMgZG93biB0aGUgcm9hZCB3aGVuIEFFUzIgCisoXHRleHRpdHtvciB3aGF0ZXZlciB0aGV5IGNhbGwgaXR9KSBoYXMgYmVlbiBpbnZlbnRlZC4gIEl0IGNhbiBiZSBhZGRlZCB0byB0aGUgbGlicmFyeSBhbmQgdXNlZCB3aXRoaW4gYXBwbGljYXRpb25zIAord2l0aCB6ZXJvIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGVuZCBhcHBsaWNhdGlvbnMgcHJvdmlkZWQgdGhleSBhcmUgd3JpdHRlbiBwcm9wZXJseS4KKworVGhpcyBmbGV4aWJpbGl0eSB3aXRoaW4gdGhlIGxpYnJhcnkgbWVhbnMgaXQgY2FuIGJlIHVzZWQgd2l0aCBhbnkgY29tYmluYXRpb24gb2YgcHJpbWl0aXZlIGFsZ29yaXRobXMgYW5kIAordW5saWtlIGxpYnJhcmllcyBsaWtlIE9wZW5TU0wgaXMgbm90IHRpZWQgdG8gZGlyZWN0IHJvdXRpbmVzLiAgRm9yIGluc3RhbmNlLCBpbiBPcGVuU1NMIHRoZXJlIGFyZSBDQkMgYmxvY2sKK21vZGUgcm91dGluZXMgZm9yIGV2ZXJ5IHNpbmdsZSBjaXBoZXIuICBUaGF0IG1lYW5zIGV2ZXJ5IHRpbWUgeW91IGFkZCBvciByZW1vdmUgYSBjaXBoZXIgZnJvbSB0aGUgbGlicmFyeQoreW91IGhhdmUgdG8gdXBkYXRlIHRoZSBhc3NvY2lhdGVkIHN1cHBvcnQgY29kZSBhcyB3ZWxsLiAgSW4gTGliVG9tQ3J5cHQgdGhlIGFzc29jaWF0ZWQgY29kZSAoXHRleHRpdHtjaGFpbmluZyBtb2RlcyBpbiB0aGlzIGNhc2V9KQorYXJlIG5vdCBkaXJlY3RseSB0aWVkIHRvIHRoZSBjaXBoZXJzLiAgVGhhdCBpcyBhIG5ldyBjaXBoZXIgY2FuIGJlIGFkZGVkIHRvIHRoZSBsaWJyYXJ5IGJ5IHNpbXBseSBwcm92aWRpbmcgCit0aGUga2V5IHNldHVwLCBFQ0IgZGVjcnlwdCBhbmQgZW5jcnlwdCBhbmQgdGVzdCB2ZWN0b3Igcm91dGluZXMuICBBZnRlciB0aGF0IGFsbCBmaXZlIGNoYWluaW5nIG1vZGUgcm91dGluZXMKK2NhbiBtYWtlIHVzZSBvZiB0aGUgY2lwaGVyIHJpZ2h0IGF3YXkuCisKK1xteXNlY3Rpb257TGljZW5zZX0KKworVGhlIHByb2plY3QgaXMgaGVyZWJ5IHJlbGVhc2VkIGFzIHB1YmxpYyBkb21haW4uCisKK1xteXNlY3Rpb257UGF0ZW50IERpc2Nsb3N1cmV9CisKK1RoZSBhdXRob3IgKFRvbSBTdCBEZW5pcykgaXMgbm90IGEgcGF0ZW50IGxhd3llciBzbyB0aGlzIHNlY3Rpb24gaXMgbm90IHRvIGJlIHRyZWF0ZWQgYXMgbGVnYWwgYWR2aWNlLiAgVG8gdGhlIGJlc3QKK29mIHRoZSBhdXRob3JzIGtub3dsZWRnZSB0aGUgb25seSBwYXRlbnQgcmVsYXRlZCBpc3N1ZXMgd2l0aGluIHRoZSBsaWJyYXJ5IGFyZSB0aGUgUkM1IGFuZCBSQzYgc3ltbWV0cmljIGJsb2NrIGNpcGhlcnMuICAKK1RoZXkgY2FuIGJlIHJlbW92ZWQgZnJvbSBhIGJ1aWxkIGJ5IHNpbXBseSBjb21tZW50aW5nIG91dCB0aGUgdHdvIGFwcHJvcHJpYXRlIGxpbmVzIGluIFx0ZXh0aXR7dG9tY3J5cHRcX2N1c3RvbS5ofS4gIFRoZSByZXN0CitvZiB0aGUgY2lwaGVycyBhbmQgaGFzaGVzIGFyZSBwYXRlbnQgZnJlZSBvciB1bmRlciBwYXRlbnRzIHRoYXQgaGF2ZSBzaW5jZSBleHBpcmVkLgorCitUaGUgUkMyIGFuZCBSQzQgc3ltbWV0cmljIGNpcGhlcnMgYXJlIG5vdCB1bmRlciBwYXRlbnRzIGJ1dCBhcmUgdW5kZXIgdHJhZGVtYXJrIHJlZ3VsYXRpb25zLiAgVGhpcyBtZWFucyB5b3UgY2FuIHVzZSAKK3RoZSBjaXBoZXJzIHlvdSBqdXN0IGNhbid0IGFkdmVydGlzZSB0aGF0IHlvdSBhcmUgZG9pbmcgc28uICAKKworXG15c2VjdGlvbntUaGFua3N9CitJIHdvdWxkIGxpa2UgdG8gZ2l2ZSB0aGFua3MgdG8gdGhlIGZvbGxvd2luZyBwZW9wbGUgKGluIG5vIHBhcnRpY3VsYXIgb3JkZXIpIGZvciBoZWxwaW5nIG1lIGRldmVsb3AgdGhpcyBwcm9qZWN0IGZyb20KK2Vhcmx5IG9uOgorXGJlZ2lue2VudW1lcmF0ZX0KKyAgIFxpdGVtIFJpY2hhcmQgdmFuIGRlIExhYXJzY2hvdAorICAgXGl0ZW0gUmljaGFyZCBIZWF0aGZpZWxkCisgICBcaXRlbSBBamF5IEsuIEFncmF3YWwKKyAgIFxpdGVtIEJyaWFuIEdsYWRtYW4KKyAgIFxpdGVtIFN2YW50ZSBTZWxlYm9yZworICAgXGl0ZW0gQ2xheSBDdWx2ZXIKKyAgIFxpdGVtIEphc29uIEtsYXBzdGUKKyAgIFxpdGVtIERvYmVzIFZhbmRlcm1lZXIKKyAgIFxpdGVtIERhbmllbCBSaWNoYXJkcworICAgXGl0ZW0gV2F5bmUgU2NvdHQKKyAgIFxpdGVtIEFuZHJldyBUeWxlcgorICAgXGl0ZW0gU2t5IFNjaHVsegorICAgXGl0ZW0gQ2hyaXN0b3BoZXIgSW1lcworXGVuZHtlbnVtZXJhdGV9CisKK1RoZXJlIGhhdmUgYmVlbiBxdWl0ZSBhIGZldyBvdGhlciBwZW9wbGUgYXMgd2VsbC4gIFBsZWFzZSBjaGVjayB0aGUgY2hhbmdlIGxvZyB0byBzZWUgd2hvIGVsc2UgaGFzIGNvbnRyaWJ1dGVkIGZyb20KK3RpbWUgdG8gdGltZS4KKworXGNoYXB0ZXJ7VGhlIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZSAoQVBJKX0KK1xteXNlY3Rpb257SW50cm9kdWN0aW9ufQorXGluZGV4e0NSWVBUXF9FUlJPUn0gXGluZGV4e0NSWVBUXF9PS30KKworSW4gZ2VuZXJhbCB0aGUgQVBJIGlzIHZlcnkgc2ltcGxlIHRvIG1lbW9yaXplIGFuZCB1c2UuICBNb3N0IG9mIHRoZSBmdW5jdGlvbnMgcmV0dXJuIGVpdGhlciB7XGJmIHZvaWR9IG9yIHtcYmYgaW50fS4gIEZ1bmN0aW9ucwordGhhdCByZXR1cm4ge1xiZiBpbnR9IHdpbGwgcmV0dXJuIHtcYmYgQ1JZUFRcX09LfSBpZiB0aGUgZnVuY3Rpb24gd2FzIHN1Y2Nlc3NmdWwsIG9yIG9uZSBvZiB0aGUgbWFueSBlcnJvciBjb2RlcyAKK2lmIGl0IGZhaWxlZC4gIENlcnRhaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGludCB3aWxsIHJldHVybiAkLTEkIHRvIGluZGljYXRlIGFuIGVycm9yLiAgVGhlc2UgZnVuY3Rpb25zIHdpbGwgYmUgZXhwbGljaXRseQorY29tbWVudGVkIHVwb24uICBXaGVuIGEgZnVuY3Rpb24gZG9lcyByZXR1cm4gYSBDUllQVCBlcnJvciBjb2RlIGl0IGNhbiBiZSB0cmFuc2xhdGVkIGludG8gYSBzdHJpbmcgd2l0aAorCitcaW5kZXh7ZXJyb3JcX3RvXF9zdHJpbmcoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2NvbnN0IGNoYXIgKmVycm9yX3RvX3N0cmluZyhpbnQgZXJyKTsKK1xlbmR7dmVyYmF0aW19CisKK0FuIGV4YW1wbGUgb2YgaGFuZGxpbmcgYW4gZXJyb3IgaXM6CitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19Cit2b2lkIHNvbWVmdW5jKHZvaWQpCit7CisgICBpbnQgZXJyOworICAgCisgICAvKiBjYWxsIGEgY3J5cHRvZ3JhcGhpYyBmdW5jdGlvbiAqLworICAgaWYgKChlcnIgPSBzb21lX2NyeXB0b19mdW5jdGlvbiguLi4pKSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJBIGNyeXB0byBlcnJvciBvY2N1cnJlZCwgJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIC8qIHBlcmZvcm0gZXJyb3IgaGFuZGxpbmcgKi8KKyAgIH0KKyAgIC8qIGNvbnRpbnVlIG9uIGlmIG5vIGVycm9yIG9jY3VycmVkICovCit9CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworVGhlcmUgaXMgbm8gaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgdGhlIGxpYnJhcnkgYW5kIGZvciB0aGUgbW9zdCBwYXJ0IHRoZSBjb2RlIGlzIHRocmVhZCBzYWZlLiAgVGhlIG9ubHkgdGhyZWFkCityZWxhdGVkIGlzc3VlIGlzIGlmIHlvdSB1c2UgdGhlIHNhbWUgc3ltbWV0cmljIGNpcGhlciwgaGFzaCBvciBwdWJsaWMga2V5IHN0YXRlIGRhdGEgaW4gbXVsdGlwbGUgdGhyZWFkcy4gIE5vcm1hbGx5Cit0aGF0IGlzIG5vdCBhbiBpc3N1ZS4KKworVG8gaW5jbHVkZSB0aGUgcHJvdG90eXBlcyBmb3IgXHRleHRpdHtMaWJUb21DcnlwdC5hfSBpbnRvIHlvdXIgb3duIHByb2dyYW0gc2ltcGx5IGluY2x1ZGUgXHRleHRpdHt0b21jcnlwdC5ofSBsaWtlIHNvOgorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CitpbnQgbWFpbih2b2lkKSB7CisgICAgcmV0dXJuIDA7Cit9CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworVGhlIGhlYWRlciBmaWxlIFx0ZXh0aXR7dG9tY3J5cHQuaH0gYWxzbyBpbmNsdWRlcyBcdGV4dGl0e3N0ZGlvLmh9LCBcdGV4dGl0e3N0cmluZy5ofSwgXHRleHRpdHtzdGRsaWIuaH0sIFx0ZXh0aXR7dGltZS5ofSBhbmQgXHRleHRpdHtjdHlwZS5ofS4KKworXG15c2VjdGlvbntNYWNyb3N9CisKK1RoZXJlIGFyZSBhIGZldyBoZWxwZXIgbWFjcm9zIHRvIG1ha2UgdGhlIGNvZGluZyBwcm9jZXNzIGEgYml0IGVhc2llci4gIFRoZSBmaXJzdCBzZXQgYXJlIHJlbGF0ZWQgdG8gbG9hZGluZyBhbmQgc3RvcmluZworMzIvNjQtYml0IHdvcmRzIGluIGxpdHRsZS9iaWcgZW5kaWFuIGZvcm1hdC4gIFRoZSBtYWNyb3MgYXJlOgorCitcaW5kZXh7U1RPUkUzMkx9IFxpbmRleHtTVE9SRTY0TH0gXGluZGV4e0xPQUQzMkx9IFxpbmRleHtMT0FENjRMfSBcaW5kZXh7U1RPUkUzMkh9IFxpbmRleHtTVE9SRTY0SH0gXGluZGV4e0xPQUQzMkh9IFxpbmRleHtMT0FENjRIfSBcaW5kZXh7QlNXQVB9CitcbmV3cGFnZQorXGJlZ2lue2ZpZ3VyZX1baHBidF0KK1xiZWdpbntzbWFsbH0KK1xiZWdpbntjZW50ZXJ9CitcYmVnaW57dGFidWxhcn17fGN8Y3xjfH0KKyAgICAgXGhsaW5lIFNUT1JFMzJMKHgsIHkpICYge1xiZiB1bnNpZ25lZCBsb25nfSB4LCB7XGJmIHVuc2lnbmVkIGNoYXJ9ICp5ICYgJHggXHRvIHlbMCBcbGRvdHMgM10kIFxcCisgICAgIFxobGluZSBTVE9SRTY0TCh4LCB5KSAmIHtcYmYgdW5zaWduZWQgbG9uZyBsb25nfSB4LCB7XGJmIHVuc2lnbmVkIGNoYXJ9ICp5ICYgJHggXHRvIHlbMCBcbGRvdHMgN10kIFxcCisgICAgIFxobGluZSBMT0FEMzJMKHgsIHkpICYge1xiZiB1bnNpZ25lZCBsb25nfSB4LCB7XGJmIHVuc2lnbmVkIGNoYXJ9ICp5ICYgJHlbMCBcbGRvdHMgM10gXHRvIHgkIFxcCisgICAgIFxobGluZSBMT0FENjRMKHgsIHkpICYge1xiZiB1bnNpZ25lZCBsb25nIGxvbmd9IHgsIHtcYmYgdW5zaWduZWQgY2hhcn0gKnkgJiAkeVswIFxsZG90cyA3XSBcdG8geCQgXFwKKyAgICAgXGhsaW5lIFNUT1JFMzJIKHgsIHkpICYge1xiZiB1bnNpZ25lZCBsb25nfSB4LCB7XGJmIHVuc2lnbmVkIGNoYXJ9ICp5ICYgJHggXHRvIHlbMyBcbGRvdHMgMF0kIFxcCisgICAgIFxobGluZSBTVE9SRTY0SCh4LCB5KSAmIHtcYmYgdW5zaWduZWQgbG9uZyBsb25nfSB4LCB7XGJmIHVuc2lnbmVkIGNoYXJ9ICp5ICYgJHggXHRvIHlbNyBcbGRvdHMgMF0kIFxcCisgICAgIFxobGluZSBMT0FEMzJIKHgsIHkpICYge1xiZiB1bnNpZ25lZCBsb25nfSB4LCB7XGJmIHVuc2lnbmVkIGNoYXJ9ICp5ICYgJHlbMyBcbGRvdHMgMF0gXHRvIHgkIFxcCisgICAgIFxobGluZSBMT0FENjRIKHgsIHkpICYge1xiZiB1bnNpZ25lZCBsb25nIGxvbmd9IHgsIHtcYmYgdW5zaWduZWQgY2hhcn0gKnkgJiAkeVs3IFxsZG90cyAwXSBcdG8geCQgXFwKKyAgICAgXGhsaW5lIEJTV0FQKHgpICYge1xiZiB1bnNpZ25lZCBsb25nfSB4ICYgU3dhcCBieXRlcyBcXAorICAgICBcaGxpbmUKK1xlbmR7dGFidWxhcn0KK1xjYXB0aW9ue0xvYWQgQW5kIFN0b3JlIE1hY3Jvc30KK1xlbmR7Y2VudGVyfQorXGVuZHtzbWFsbH0KK1xlbmR7ZmlndXJlfQorCitUaGVyZSBhcmUgMzIgYW5kIDY0LWJpdCBjeWNsaWMgcm90YXRpb25zIGFzIHdlbGw6CitcaW5kZXh7Uk9MfSBcaW5kZXh7Uk9SfSBcaW5kZXh7Uk9MNjR9IFxpbmRleHtST1I2NH0gXGluZGV4e1JPTGN9IFxpbmRleHtST1JjfSBcaW5kZXh7Uk9MNjRjfSBcaW5kZXh7Uk9SNjRjfSAKK1xiZWdpbntmaWd1cmV9W2hwYnRdCitcYmVnaW57c21hbGx9CitcYmVnaW57Y2VudGVyfQorXGJlZ2lue3RhYnVsYXJ9e3xjfGN8Y3x9CisgICAgIFxobGluZSBST0woeCwgeSkgJiB7XGJmIHVuc2lnbmVkIGxvbmd9IHgsIHtcYmYgdW5zaWduZWQgbG9uZ30geSAmICR4IDw8IHksIDAgXGxlIHkgXGxlIDMxJCBcXAorICAgICBcaGxpbmUgUk9MYyh4LCB5KSAmIHtcYmYgdW5zaWduZWQgbG9uZ30geCwge1xiZiBjb25zdCB1bnNpZ25lZCBsb25nfSB5ICYgJHggPDwgeSwgMCBcbGUgeSBcbGUgMzEkIFxcCisgICAgIFxobGluZSBST1IoeCwgeSkgJiB7XGJmIHVuc2lnbmVkIGxvbmd9IHgsIHtcYmYgdW5zaWduZWQgbG9uZ30geSAmICR4ID4+IHksIDAgXGxlIHkgXGxlIDMxJCBcXAorICAgICBcaGxpbmUgUk9SYyh4LCB5KSAmIHtcYmYgdW5zaWduZWQgbG9uZ30geCwge1xiZiBjb25zdCB1bnNpZ25lZCBsb25nfSB5ICYgJHggPj4geSwgMCBcbGUgeSBcbGUgMzEkIFxcCisgICAgIFxobGluZSAmJiBcXAorICAgICBcaGxpbmUgUk9MNjQoeCwgeSkgJiB7XGJmIHVuc2lnbmVkIGxvbmd9IHgsIHtcYmYgdW5zaWduZWQgbG9uZ30geSAmICR4IDw8IHksIDAgXGxlIHkgXGxlIDYzJCBcXAorICAgICBcaGxpbmUgUk9MNjRjKHgsIHkpICYge1xiZiB1bnNpZ25lZCBsb25nfSB4LCB7XGJmIGNvbnN0IHVuc2lnbmVkIGxvbmd9IHkgJiAkeCA8PCB5LCAwIFxsZSB5IFxsZSA2MyQgXFwKKyAgICAgXGhsaW5lIFJPUjY0KHgsIHkpICYge1xiZiB1bnNpZ25lZCBsb25nfSB4LCB7XGJmIHVuc2lnbmVkIGxvbmd9IHkgJiAkeCA+PiB5LCAwIFxsZSB5IFxsZSA2MyQgXFwKKyAgICAgXGhsaW5lIFJPUjY0Yyh4LCB5KSAmIHtcYmYgdW5zaWduZWQgbG9uZ30geCwge1xiZiBjb25zdCB1bnNpZ25lZCBsb25nfSB5ICYgJHggPj4geSwgMCBcbGUgeSBcbGUgNjMkIFxcCisgICAgIFxobGluZQorXGVuZHt0YWJ1bGFyfQorXGNhcHRpb257Um90YXRlIE1hY3Jvc30KK1xlbmR7Y2VudGVyfQorXGVuZHtzbWFsbH0KK1xlbmR7ZmlndXJlfQorCitcbXlzZWN0aW9ue0Z1bmN0aW9ucyB3aXRoIFZhcmlhYmxlIExlbmd0aCBPdXRwdXR9CitDZXJ0YWluIGZ1bmN0aW9ucyBzdWNoIGFzIChmb3IgZXhhbXBsZSkgXHRleHRpdHtyc2FcX2V4cG9ydCgpfSBnaXZlIGFuIG91dHB1dCB0aGF0IGlzIHZhcmlhYmxlIGxlbmd0aC4gIFRvIHByZXZlbnQgYnVmZmVyIG92ZXJmbG93cyB5b3UKK211c3QgcGFzcyBpdCB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgd2hlcmUgdGhlIG91dHB1dCB3aWxsIGJlIHN0b3JlZC4gIEZvciBleGFtcGxlOgorXGluZGV4e3JzYVxfZXhwb3J0KCl9IFxpbmRleHtlcnJvclxfdG9cX3N0cmluZygpfSBcaW5kZXh7dmFyaWFibGUgbGVuZ3RoIG91dHB1dH0KK1xiZWdpbntzbWFsbH0KK1xiZWdpbnt2ZXJiYXRpbX0KKyNpbmNsdWRlIDx0b21jcnlwdC5oPgoraW50IG1haW4odm9pZCkgeworICAgIHJzYV9rZXkga2V5OworICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzEwMjRdOworICAgIHVuc2lnbmVkIGxvbmcgeDsKKyAgICBpbnQgZXJyOworCisgICAgLyogLi4uIE1ha2UgdXAgdGhlIFJTQSBrZXkgc29tZWhvdyAuLi4gKi8KKworICAgIC8qIGxldHMgZXhwb3J0IHRoZSBrZXksIHNldCB4IHRvIHRoZSBzaXplIG9mIHRoZSAKKyAgICAgKiBvdXRwdXQgYnVmZmVyICovCisgICAgeCA9IHNpemVvZihidWZmZXIpOworICAgIGlmICgoZXJyID0gcnNhX2V4cG9ydChidWZmZXIsICZ4LCBQS19QVUJMSUMsICZrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgIHByaW50ZigiRXhwb3J0IGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgLyogaWYgcnNhX2V4cG9ydCgpIHdhcyBzdWNjZXNzZnVsIHRoZW4geCB3aWxsIGhhdmUgCisgICAgICogdGhlIHNpemUgb2YgdGhlIG91dHB1dCAqLworICAgIHByaW50ZigiUlNBIGV4cG9ydGVkIGtleSB0YWtlcyAlZCBieXRlc1xuIiwgeCk7CisKKyAgICAvKiAuLi4gZG8gc29tZXRoaW5nIHdpdGggdGhlIGJ1ZmZlciAqLworCisgICAgcmV0dXJuIDA7Cit9CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KK0luIHRoZSBhYm92ZSBleGFtcGxlIGlmIHRoZSBzaXplIG9mIHRoZSBSU0EgcHVibGljIGtleSB3YXMgbW9yZSB0aGFuIDEwMjQgYnl0ZXMgdGhpcyBmdW5jdGlvbiB3b3VsZCByZXR1cm4gYW4gZXJyb3IgY29kZQoraW5kaWNhdGluZyBhIGJ1ZmZlciBvdmVyZmxvdyB3b3VsZCBoYXZlIG9jY3VycmVkLiAgSWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCBpdCBzdG9yZXMgdGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGJhY2sgaW50byAKK1x0ZXh0aXR7eH0gc28gdGhhdCB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiB3aWxsIGtub3cgaG93IG1hbnkgYnl0ZXMgd2VyZSB1c2VkLgorCitBcyBvZiB2MS4xMywgbW9zdCBmdW5jdGlvbnMgd2lsbCB1cGRhdGUgeW91ciBsZW5ndGggb24gZmFpbHVyZSB0byBpbmRpY2F0ZSB0aGUgc2l6ZSByZXF1aXJlZCBieSB0aGUgZnVuY3Rpb24uICBOb3QgYWxsIGZ1bmN0aW9ucworc3VwcG9ydCB0aGlzIHNvIHBsZWFzZSBjaGVjayB0aGUgc291cmNlIGJlZm9yZSB5b3UgcmVseSBvbiBpdCBkb2luZyB0aGF0LgorCitcbXlzZWN0aW9ue0Z1bmN0aW9ucyB0aGF0IG5lZWQgYSBQUk5HfQorXGluZGV4e1BzZXVkbyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvcn0gXGluZGV4e1BSTkd9CitDZXJ0YWluIGZ1bmN0aW9ucyBzdWNoIGFzIFx0ZXh0aXR7cnNhXF9tYWtlXF9rZXkoKX0gcmVxdWlyZSBhIFBzZXVkbyBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciAoUFJORykuICBUaGVzZSBmdW5jdGlvbnMgZG8gbm90IHNldHVwIAordGhlIFBSTkcgdGhlbXNlbHZlcyBzbyBpdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gdG8gaW5pdGlhbGl6ZSB0aGUgUFJORyBiZWZvcmUgY2FsbGluZyB0aGVtLgorCitDZXJ0YWluIFBSTkcgYWxnb3JpdGhtcyBkbyBub3QgcmVxdWlyZSBhIFx0ZXh0aXR7cHJuZ1xfc3RhdGV9IGFyZ3VtZW50IChzcHJuZyBmb3IgZXhhbXBsZSkuICBUaGUgXHRleHRpdHtwcm5nXF9zdGF0ZX0gYXJndW1lbnQKK21heSBiZSBwYXNzZWQgYXMgXHRleHRiZntOVUxMfSBpbiBzdWNoIHNpdHVhdGlvbnMuCisKK1xpbmRleHtyZWdpc3RlclxfcHJuZygpfSBcaW5kZXh7cnNhXF9tYWtlXF9rZXkoKX0KK1xiZWdpbntzbWFsbH0KK1xiZWdpbnt2ZXJiYXRpbX0KKyNpbmNsdWRlIDx0b21jcnlwdC5oPgoraW50IG1haW4odm9pZCkgeworICAgIHJzYV9rZXkga2V5OworICAgIGludCAgICAgZXJyOworCisgICAgLyogcmVnaXN0ZXIgdGhlIHN5c3RlbSBSTkcgKi8KKyAgICByZWdpc3Rlcl9wcm5nKCZzcHJuZ19kZXNjKSAKKworICAgIC8qIG1ha2UgYSAxMDI0LWJpdCBSU0Ega2V5IHdpdGggdGhlIHN5c3RlbSBSTkcgKi8KKyAgICBpZiAoKGVyciA9IHJzYV9tYWtlX2tleShOVUxMLCBmaW5kX3BybmcoInNwcm5nIiksIDEwMjQvOCwgNjU1MzcsICZrZXkpKSAKKyAgICAgICAgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBwcmludGYoIm1ha2Vfa2V5IGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiB1c2UgdGhlIGtleSAuLi4gKi8KKworICAgIHJldHVybiAwOworfQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CisKK1xteXNlY3Rpb257RnVuY3Rpb25zIHRoYXQgdXNlIEFycmF5cyBvZiBPY3RldHN9CitNb3N0IGZ1bmN0aW9ucyByZXF1aXJlIGlucHV0cyB0aGF0IGFyZSBhcnJheXMgb2YgdGhlIGRhdGEgdHlwZSBcdGV4dGl0e3Vuc2lnbmVkIGNoYXJ9LiAgV2hldGhlciBpdCBpcyBhIHN5bW1ldHJpYyBrZXksIElWCitmb3IgYSBjaGFpbmluZyBtb2RlIG9yIHB1YmxpYyBrZXkgcGFja2V0IGl0IGlzIGFzc3VtZWQgdGhhdCByZWdhcmRsZXNzIG9mIHRoZSBhY3R1YWwgc2l6ZSBvZiBcdGV4dGl0e3Vuc2lnbmVkIGNoYXJ9IG9ubHkgdGhlCitsb3dlciBlaWdodCBiaXRzIGNvbnRhaW4gZGF0YS4gIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBwYXNzIGEgMjU2IGJpdCBrZXkgdG8gYSBzeW1tZXRyaWMgY2lwaGVycyBzZXR1cCByb3V0aW5lLCB5b3UgCittdXN0IHBhc3MgaW4gKGEgcG9pbnRlciB0bykgYW4gYXJyYXkgb2YgMzIgXHRleHRpdHt1bnNpZ25lZCBjaGFyfSB2YXJpYWJsZXMuICBDZXJ0YWluIHJvdXRpbmVzIChzdWNoIGFzIFNBRkVSKykgdGFrZSAKK3NwZWNpYWwgY2FyZSB0byB3b3JrIHByb3Blcmx5IG9uIHBsYXRmb3JtcyB3aGVyZSBhbiBcdGV4dGl0e3Vuc2lnbmVkIGNoYXJ9IGlzIG5vdCBlaWdodCBiaXRzLgorCitGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgbGlicmFyeSwgdGhlIHRlcm0gXHRleHRpdHtieXRlfSB3aWxsIHJlZmVyIHRvIGFuIG9jdGV0IG9yIGVpZ2h0IGJpdCB3b3JkLiAgVHlwaWNhbGx5IGFuIGFycmF5IG9mCit0eXBlIFx0ZXh0aXR7Ynl0ZX0gd2lsbCBiZSBzeW5vbnltb3VzIHdpdGggYW4gYXJyYXkgb2YgdHlwZSBcdGV4dGl0e3Vuc2lnbmVkIGNoYXIufQorCitcY2hhcHRlcntTeW1tZXRyaWMgQmxvY2sgQ2lwaGVyc30KK1xteXNlY3Rpb257Q29yZSBGdW5jdGlvbnN9CitMaWJUb21DcnlwdCBwcm92aWRlcyBzZXZlcmFsIGJsb2NrIGNpcGhlcnMgd2l0aCBhbiBFQ0IgYmxvY2sgbW9kZSBpbnRlcmZhY2UuICBJdCBpcyBpbXBvcnRhbnQgdG8gZmlyc3Qgbm90ZSB0aGF0IHlvdSAKK3Nob3VsZCBuZXZlciB1c2UgdGhlIEVDQiBtb2RlcyBkaXJlY3RseSB0byBlbmNyeXB0IGRhdGEuICBJbnN0ZWFkIHlvdSBzaG91bGQgdXNlIHRoZSBFQ0IgZnVuY3Rpb25zIHRvIG1ha2UgYSBjaGFpbmluZyBtb2RlLAorb3IgdXNlIG9uZSBvZiB0aGUgcHJvdmlkZWQgY2hhaW5pbmcgbW9kZXMuICBBbGwgb2YgdGhlIGNpcGhlcnMgYXJlIHdyaXR0ZW4gYXMgRUNCIGludGVyZmFjZXMgc2luY2UgaXQgYWxsb3dzIHRoZSByZXN0IG9mCit0aGUgQVBJIHRvIGdyb3cgaW4gYSBtb2R1bGFyIGZhc2hpb24uCisKK1xzdWJzZWN0aW9ue0tleSBTY2hlZHVsaW5nfQorQWxsIGNpcGhlcnMgc3RvcmUgdGhlaXIgc2NoZWR1bGVkIGtleXMgaW4gYSBzaW5nbGUgZGF0YSB0eXBlIGNhbGxlZCBcdGV4dGl0e3N5bW1ldHJpY1xfa2V5fS4gIFRoaXMgYWxsb3dzIGFsbCBjaXBoZXJzIHRvIAoraGF2ZSB0aGUgc2FtZSBwcm90b3R5cGUgYW5kIHN0b3JlIHRoZWlyIGtleXMgYXMgbmF0dXJhbGx5IGFzIHBvc3NpYmxlLiAgVGhpcyBhbHNvIHJlbW92ZXMgdGhlIG5lZWQgZm9yIGR5bmFtaWMgbWVtb3J5CithbGxvY2F0aW9uLCBhbmQgYWxsb3dzIHlvdSB0byBhbGxvY2F0ZSBhIGZpeGVkIHNpemVkIGJ1ZmZlciBmb3Igc3RvcmluZyBzY2hlZHVsZWQga2V5cy4gIEFsbCBjaXBoZXJzIG11c3QgcHJvdmlkZSBzaXggdmlzaWJsZSAKK2Z1bmN0aW9ucyB3aGljaCBhcmUgKGdpdmVuIHRoYXQgWFhYIGlzIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIpIHRoZSBmb2xsb3dpbmc6CitcaW5kZXh7Q2lwaGVyIFNldHVwfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IFhYWF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBrZXlsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICByb3VuZHMsCisgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpOworXGVuZHt2ZXJiYXRpbX0KKworVGhlIFhYWFxfc2V0dXAoKSByb3V0aW5lIHdpbGwgc2V0dXAgdGhlIGNpcGhlciB0byBiZSB1c2VkIHdpdGggYSBnaXZlbiBudW1iZXIgb2Ygcm91bmRzIGFuZCBhIGdpdmVuIGtleSBsZW5ndGggKGluIGJ5dGVzKS4KK1RoZSBudW1iZXIgb2Ygcm91bmRzIGNhbiBiZSBzZXQgdG8gemVybyB0byB1c2UgdGhlIGRlZmF1bHQsIHdoaWNoIGlzIGdlbmVyYWxseSBhIGdvb2QgaWRlYS4KKworSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgc3VjY2Vzc2Z1bGx5IHRoZSB2YXJpYWJsZSBcdGV4dGl0e3NrZXl9IHdpbGwgaGF2ZSBhIHNjaGVkdWxlZCBrZXkgc3RvcmVkIGluIGl0LiAgSXQncyBpbXBvcnRhbnQgdG8gbm90ZQordGhhdCB5b3Ugc2hvdWxkIG9ubHkgdXNlZCB0aGlzIHNjaGVkdWxlZCBrZXkgd2l0aCB0aGUgaW50ZW5kZWQgY2lwaGVyLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBjYWxsIFx0ZXh0aXR7Ymxvd2Zpc2hcX3NldHVwKCl9IGRvIG5vdCAKK3Bhc3MgdGhlIHNjaGVkdWxlZCBrZXkgb250byBcdGV4dGl0e3JjNVxfZWNiXF9lbmNyeXB0KCl9LiAgQWxsIGJ1aWx0LS1pbiBzZXR1cCBmdW5jdGlvbnMgZG8gbm90IGFsbG9jYXRlIG1lbW9yeSBvZmYgdGhlIGhlYXAgc28gCit3aGVuIHlvdSBhcmUgZG9uZSB3aXRoIGEga2V5IHlvdSBjYW4gc2ltcGx5IGRpc2NhcmQgaXQgKGUuZy4gdGhleSBjYW4gYmUgb24gdGhlIHN0YWNrKS4gIEhvd2V2ZXIsIHRvIG1haW50YWluIHByb3BlciBjb2RpbmcKK3ByYWN0aWNlcyB5b3Ugc2hvdWxkIGFsd2F5cyBjYWxsIHRoZSByZXNwZWN0aXZlIFhYWFxfZG9uZSgpIGZ1bmN0aW9uLiAgVGhpcyBhbGxvd3MgZm9yIHF1aWNrZXIgcG9ydGluZyB0byBhcHBsaWNhdGlvbnMgd2l0aAorZXh0ZXJuYWxseSBzdXBwbGllZCBwbHVnaW5zLgorCitcc3Vic2VjdGlvbntFQ0IgRW5jcnlwdGlvbiBhbmQgRGVjcnlwdGlvbn0KK1RvIGVuY3J5cHQgb3IgZGVjcnlwdCBhIGJsb2NrIGluIEVDQiBtb2RlIHRoZXJlIGFyZSB0aGVzZSB0d28gZnVuY3Rpb25zIHBlciBjaXBoZXI6CitcaW5kZXh7Q2lwaGVyIEVuY3J5cHR9IFxpbmRleHtDaXBoZXIgRGVjcnlwdH0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBYWFhfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CisKK2ludCBYWFhfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CitcZW5ke3ZlcmJhdGltfQorVGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIGVuY3J5cHQgb3IgZGVjcnlwdCAocmVzcGVjdGl2ZWx5KSBhIHNpbmdsZSBibG9jayBvZiB0ZXh0XGZvb3Rub3Rle1RoZSBzaXplIG9mIHdoaWNoIGRlcGVuZHMgb24KK3doaWNoIGNpcGhlciB5b3UgYXJlIHVzaW5nLn0sIHN0b3JpbmcgdGhlIHJlc3VsdCBpbiB0aGUgXHRleHRpdHtjdH0gYnVmZmVyIChcdGV4dGl0e3B0fSByZXNwLikuICBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlciBhcmUgCit0aGUgc2FtZSBidWZmZXIuICBGb3IgdGhlIGVuY3J5cHQgZnVuY3Rpb24gXHRleHRpdHtwdH1cZm9vdG5vdGV7cHQgc3RhbmRzIGZvciBwbGFpbnRleHQufSBpcyB0aGUgaW5wdXQgYW5kIAorXHRleHRpdHtjdH1cZm9vdG5vdGV7Y3Qgc3RhbmRzIGZvciBjaXBoZXJ0ZXh0Ln0gaXMgdGhlIG91dHB1dC4gIEZvciB0aGUgZGVjcnlwdGlvbiBmdW5jdGlvbiBpdCdzIHRoZSBvcHBvc2l0ZS4gIFRoZXkgYm90aAorcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX09LfSBvbiBzdWNjZXNzLiAgVG8gdGVzdCBhIHBhcnRpY3VsYXIgY2lwaGVyIGFnYWluc3QgdGVzdCB2ZWN0b3JzXGZvb3Rub3Rle0FzIHB1Ymxpc2hlZCBpbiB0aGVpciBkZXNpZ24gcGFwZXJzLn0gCitjYWxsIHRoZSBmb2xsb3dpbmcgc2VsZi10ZXN0IGZ1bmN0aW9uLgorIAorXHN1YnNlY3Rpb257U2VsZi0tVGVzdGluZ30KK1xpbmRleHtDaXBoZXIgVGVzdGluZ30KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBYWFhfdGVzdCh2b2lkKTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHtcYmYgQ1JZUFRcX09LfSBpZiB0aGUgY2lwaGVyIG1hdGNoZXMgdGhlIHRlc3QgdmVjdG9ycyBmcm9tIHRoZSBkZXNpZ24gcHVibGljYXRpb24gaXQgaXMgCitiYXNlZCB1cG9uLiAgCisKK1xzdWJzZWN0aW9ue0tleSBTaXppbmd9CitGb3IgZWFjaCBjaXBoZXIgdGhlcmUgaXMgYSBmdW5jdGlvbiB3aGljaCB3aWxsIGhlbHAgZmluZCBhIGRlc2lyZWQga2V5IHNpemUuICBJdCBpcyBzcGVjaWZpZWQgYXMgZm9sbG93czoKK1xpbmRleHtLZXkgU2l6aW5nfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IFhYWF9rZXlzaXplKGludCAqa2V5c2l6ZSk7CitcZW5ke3ZlcmJhdGltfQorRXNzZW50aWFsbHksIGl0IHdpbGwgcm91bmQgdGhlIGlucHV0IGtleXNpemUgaW4gXHRleHRpdHtrZXlzaXplfSBkb3duIHRvIHRoZSBuZXh0IGFwcHJvcHJpYXRlIGtleSBzaXplLiAgVGhpcyBmdW5jdGlvbgord2lsbCByZXR1cm4ge1xiZiBDUllQVFxfT0t9IGlmIHRoZSBrZXkgc2l6ZSBzcGVjaWZpZWQgaXMgYWNjZXB0YWJsZS4gIEZvciBleGFtcGxlOgorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CitpbnQgbWFpbih2b2lkKQoreworICAgaW50IGtleXNpemUsIGVycjsKKworICAgLyogbm93IGdpdmVuIGEgMjAgYnl0ZSBrZXkgd2hhdCBrZXlzaXplIGRvZXMgVHdvZmlzaCB3YW50IHRvIHVzZT8gKi8KKyAgIGtleXNpemUgPSAyMDsKKyAgIGlmICgoZXJyID0gdHdvZmlzaF9rZXlzaXplKCZrZXlzaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHByaW50ZigiRXJyb3IgZ2V0dGluZyBrZXkgc2l6ZTogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKyAgIHByaW50ZigiVHdvZmlzaCBzdWdnZXN0ZWQgYSBrZXkgc2l6ZSBvZiAlZFxuIiwga2V5c2l6ZSk7CisgICByZXR1cm4gMDsKK30KK1xlbmR7dmVyYmF0aW19CitcZW5ke3NtYWxsfQorVGhpcyBzaG91bGQgaW5kaWNhdGUgYSBrZXlzaXplIG9mIHNpeHRlZW4gYnl0ZXMgaXMgc3VnZ2VzdGVkIGJ5IHN0b3JpbmcgMTYgaW4gXHRleHRpdHtrZXlzaXplLn0KKworXHN1YnNlY3Rpb257Q2lwaGVyIFRlcm1pbmF0aW9ufQorV2hlbiB5b3UgYXJlIGZpbmlzaGVkIHdpdGggYSBjaXBoZXIgeW91IGNhbiBkZS0taW5pdGlhbGl6ZSBpdCB3aXRoIHRoZSBkb25lIGZ1bmN0aW9uLgorXGJlZ2lue3ZlcmJhdGltfQordm9pZCBYWFhfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKK1xlbmR7dmVyYmF0aW19CitGb3IgdGhlIHNvZnR3YXJlIGJhc2VkIGNpcGhlcnMgd2l0aGluIExpYlRvbUNyeXB0LCB0aGVzZSBmdW5jdGlvbnMgd2lsbCBub3QgZG8gYW55dGhpbmcuICBIb3dldmVyLCB1c2VyIHN1cHBsaWVkCitjaXBoZXIgZGVzY3JpcHRvcnMgbWF5IHJlcXVpcmUgdG8gYmUgY2FsbGVkIGZvciByZXNvdXJjZSBtYW5hZ2VtZW50IHB1cnBvc2VzLiAgVG8gYmUgY29tcGxpYW50LCBhbGwgZnVuY3Rpb25zIHdoaWNoIGNhbGwgYSBjaXBoZXIKK3NldHVwIGZ1bmN0aW9uIG11c3QgYWxzbyBjYWxsIHRoZSByZXNwZWN0aXZlIGNpcGhlciBkb25lIGZ1bmN0aW9uIHdoZW4gZmluaXNoZWQuCisKK1xzdWJzZWN0aW9ue1NpbXBsZSBFbmNyeXB0aW9uIERlbW9uc3RyYXRpb259CitBbiBleGFtcGxlIHNuaXBwZXQgdGhhdCBlbmNvZGVzIGEgYmxvY2sgd2l0aCBCbG93ZmlzaCBpbiBFQ0IgbW9kZS4KKworXGluZGV4e2Jsb3dmaXNoXF9zZXR1cCgpfSBcaW5kZXh7Ymxvd2Zpc2hcX2VjYlxfZW5jcnlwdCgpfSBcaW5kZXh7Ymxvd2Zpc2hcX2VjYlxfZGVjcnlwdCgpfSBcaW5kZXh7Ymxvd2Zpc2hcX2RvbmUoKX0KK1xiZWdpbntzbWFsbH0KK1xiZWdpbnt2ZXJiYXRpbX0KKyNpbmNsdWRlIDx0b21jcnlwdC5oPgoraW50IG1haW4odm9pZCkKK3sgCisgICB1bnNpZ25lZCBjaGFyIHB0WzhdLCBjdFs4XSwga2V5WzhdOworICAgc3ltbWV0cmljX2tleSBza2V5OworICAgaW50IGVycjsKKworICAgLyogLi4uIGtleSBpcyBsb2FkZWQgYXBwcm9wcmlhdGVseSBpbiBrZXkgLi4uICovCisgICAvKiAuLi4gbG9hZCBhIGJsb2NrIG9mIHBsYWludGV4dCBpbiBwdCAuLi4gKi8KKworICAgLyogc2NoZWR1bGUgdGhlIGtleSAqLworICAgaWYgKChlcnIgPSBibG93ZmlzaF9zZXR1cChrZXksIC8qIHRoZSBrZXkgd2Ugd2lsbCB1c2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LCAvKiBrZXkgaXMgOCBieXRlcyAoNjQtYml0cykgbG9uZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIDAgPT0gdXNlIGRlZmF1bHQgIyBvZiByb3VuZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZza2V5KSAvKiB3aGVyZSB0byBwdXQgdGhlIHNjaGVkdWxlZCBrZXkgKi8KKyAgICAgICApICE9IENSWVBUX09LKSB7CisgICAgICBwcmludGYoIlNldHVwIGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgcmV0dXJuIC0xOworICAgfQorCisgICAvKiBlbmNyeXB0IHRoZSBibG9jayAqLworICAgYmxvd2Zpc2hfZWNiX2VuY3J5cHQocHQsICAgICAgIC8qIGVuY3J5cHQgdGhpcyA4LWJ5dGUgYXJyYXkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGN0LCAgICAgICAvKiBzdG9yZSBlbmNyeXB0ZWQgZGF0YSBoZXJlICovIAorICAgICAgICAgICAgICAgICAgICAgICAgJnNrZXkpOyAgIC8qIG91ciBwcmV2aW91c2x5IHNjaGVkdWxlZCBrZXkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgLyogbm93IGN0IGhvbGRzIHRoZSBlbmNyeXB0ZWQgdmVyc2lvbiBvZiBwdCAqLyAgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAvKiBkZWNyeXB0IHRoZSBibG9jayAqLworICAgYmxvd2Zpc2hfZWNiX2RlY3J5cHQoY3QsICAgICAgIC8qIGRlY3J5cHQgdGhpcyA4LWJ5dGUgYXJyYXkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHB0LCAgICAgICAvKiBzdG9yZSBkZWNyeXB0ZWQgZGF0YSBoZXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAmc2tleSk7ICAgLyogb3VyIHByZXZpb3VzbHkgc2NoZWR1bGVkIGtleSAqLworCisgICAvKiBub3cgd2UgaGF2ZSBkZWNyeXB0ZWQgY3QgdG8gdGhlIG9yaWdpbmFsIHBsYWludGV4dCBpbiBwdCAqLyAgICAgICAgICAgICAgICAgICAgICAgIAorCisgICAvKiBUZXJtaW5hdGUgdGhlIGNpcGhlciBjb250ZXh0ICovCisgICBibG93ZmlzaF9kb25lKCZza2V5KTsKKworICAgcmV0dXJuIDA7Cit9CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworXG15c2VjdGlvbntLZXkgU2l6ZXMgYW5kIE51bWJlciBvZiBSb3VuZHN9CitcaW5kZXh7U3ltbWV0cmljIEtleXN9CitBcyBhIGdlbmVyYWwgcnVsZSBvZiB0aHVtYiwgZG8gbm90IHVzZSBzeW1tZXRyaWMga2V5cyB1bmRlciA4MCBiaXRzIGlmIHlvdSBjYW4gaGVscCBpdC4gIE9ubHkgYSBmZXcgb2YgdGhlIGNpcGhlcnMgc3VwcG9ydCBzbWFsbGVyCitrZXlzIChtYWlubHkgZm9yIHRlc3QgdmVjdG9ycyBhbnl3YXlzKS4gIElkZWFsbHksIHlvdXIgYXBwbGljYXRpb24gc2hvdWxkIGJlIG1ha2luZyBhdCBsZWFzdCAyNTYgYml0IGtleXMuICBUaGlzIGlzIG5vdAorYmVjYXVzZSB5b3UgYXJlIHRvIGJlIHBhcmFub2lkLiAgSXQgaXMgYmVjYXVzZSBpZiB5b3VyIFBSTkcgaGFzIGEgYmlhcyBvZiBhbnkgc29ydCB0aGUgbW9yZSBiaXRzIHRoZSBiZXR0ZXIuICBGb3IKK2V4YW1wbGUsIGlmIHlvdSBoYXZlICRcbWJveHtQcn1cbGVmdFtYID0gMVxyaWdodF0gPSB7MSBcb3ZlciAyfSBccG0gXGdhbW1hJCB3aGVyZSAkXHZlcnQgXGdhbW1hIFx2ZXJ0ID4gMCQgdGhlbiB0aGUKK3RvdGFsIGFtb3VudCBvZiBlbnRyb3B5IGluIE4gYml0cyBpcyAkTiBcY2RvdCAtbG9nXzJcbGVmdCAoezEgXG92ZXIgMn0gKyBcdmVydCBcZ2FtbWEgXHZlcnQgXHJpZ2h0KSQuICBTbyBpZiAkXGdhbW1hJAord2VyZSAkMC4yNSQgKGEgc2V2ZXJlIGJpYXMpIGEgMjU2LWJpdCBzdHJpbmcgd291bGQgaGF2ZSBhYm91dCAxMDYgYml0cyBvZiBlbnRyb3B5IHdoZXJlYXMgYSAxMjgtYml0IHN0cmluZyB3b3VsZCBoYXZlCitvbmx5IDUzIGJpdHMgb2YgZW50cm9weS4KKworVGhlIG51bWJlciBvZiByb3VuZHMgb2YgbW9zdCBjaXBoZXJzIGlzIG5vdCBhbiBvcHRpb24geW91IGNhbiBjaGFuZ2UuICBPbmx5IFJDNSBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgbnVtYmVyIG9mCityb3VuZHMuICBCeSBwYXNzaW5nIHplcm8gYXMgdGhlIG51bWJlciBvZiByb3VuZHMgYWxsIGNpcGhlcnMgd2lsbCB1c2UgdGhlaXIgZGVmYXVsdCBudW1iZXIgb2Ygcm91bmRzLiAgR2VuZXJhbGx5IHRoZQorY2lwaGVycyBhcmUgY29uZmlndXJlZCBzdWNoIHRoYXQgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHJvdW5kcyBwcm92aWRlIGFkZXF1YXRlIHNlY3VyaXR5IGZvciB0aGUgZ2l2ZW4gYmxvY2sgYW5kIGtleSAKK3NpemUuCisKK1xteXNlY3Rpb257VGhlIENpcGhlciBEZXNjcmlwdG9yc30KK1xpbmRleHtDaXBoZXIgRGVzY3JpcHRvcn0KK1RvIGZhY2lsaXRhdGUgYXV0b21hdGljIHJvdXRpbmVzIGFuIGFycmF5IG9mIGNpcGhlciBkZXNjcmlwdG9ycyBpcyBwcm92aWRlZCBpbiB0aGUgYXJyYXkgXHRleHRpdHtjaXBoZXJcX2Rlc2NyaXB0b3J9LiAgQW4gZWxlbWVudAorb2YgdGhpcyBhcnJheSBoYXMgdGhlIGZvbGxvd2luZyAocGFydGlhbCkgZm9ybWF0IChTZWUgU2VjdGlvbiBccmVme3NlYzpjaXBoZXJkZXNjfSk6CisKK1xiZWdpbntzbWFsbH0KK1xiZWdpbnt2ZXJiYXRpbX0KK3N0cnVjdCBfY2lwaGVyX2Rlc2NyaXB0b3IgeworICAgLyoqIG5hbWUgb2YgY2lwaGVyICovCisgICBjaGFyICpuYW1lOworCisgICAvKiogaW50ZXJuYWwgSUQgKi8KKyAgIHVuc2lnbmVkIGNoYXIgSUQ7CisKKyAgIC8qKiBtaW4ga2V5c2l6ZSAob2N0ZXRzKSAqLworICAgaW50ICBtaW5fa2V5X2xlbmd0aCwgCisKKyAgIC8qKiBtYXgga2V5c2l6ZSAob2N0ZXRzKSAqLworICAgICAgICBtYXhfa2V5X2xlbmd0aCwgCisKKyAgIC8qKiBibG9jayBzaXplIChvY3RldHMpICovCisgICAgICAgIGJsb2NrX2xlbmd0aCwgCisKKyAgIC8qKiBkZWZhdWx0IG51bWJlciBvZiByb3VuZHMgKi8KKyAgICAgICAgZGVmYXVsdF9yb3VuZHM7CisuLi48c25pcD4uLi4KK307CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworV2hlcmUgXHRleHRpdHtuYW1lfSBpcyB0aGUgbG93ZXIgY2FzZSBBU0NJSSB2ZXJzaW9uIG9mIHRoZSBuYW1lLiAgVGhlIGZpZWxkcyBcdGV4dGl0e21pblxfa2V5XF9sZW5ndGh9IGFuZCBcdGV4dGl0e21heFxfa2V5XF9sZW5ndGh9IAorYXJlIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGtleSBzaXplcyBpbiBieXRlcy4gIFRoZSBcdGV4dGl0e2Jsb2NrXF9sZW5ndGh9IG1lbWJlciBpcyB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgY2lwaGVyCitpbiBieXRlcy4gIEFzIGEgZ29vZCBydWxlIG9mIHRodW1iIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgY2lwaGVyIHN1cHBvcnRzCit0aGUgbWluIGFuZCBtYXgga2V5IGxlbmd0aHMgYnV0IG5vdCBhbHdheXMgZXZlcnl0aGluZyBpbiBiZXR3ZWVuLiAgVGhlIFx0ZXh0aXR7ZGVmYXVsdFxfcm91bmRzfSBmaWVsZCBpcyB0aGUgZGVmYXVsdCBudW1iZXIKK29mIHJvdW5kcyB0aGF0IHdpbGwgYmUgdXNlZC4KKworRm9yIGEgcGx1Z2luIHRvIGJlIGNvbXBsaWFudCBpdCBtdXN0IHByb3ZpZGUgYXQgbGVhc3QgZWFjaCBmdW5jdGlvbiBsaXN0ZWQgYmVmb3JlIHRoZSBhY2NlbGVyYXRvcnMgYmVnaW4uICBBY2NlbGVyYXRvcnMgYXJlIG9wdGlvbmFsLAorYW5kIGlmIG1pc3Npbmcgd2lsbCBiZSBlbXVsYXRlZCBpbiBzb2Z0d2FyZS4KKworVGhlIHJlbWFpbmluZyBmaWVsZHMgYXJlIGFsbCBwb2ludGVycyB0byB0aGUgY29yZSBmdW5jdGlvbnMgZm9yIGVhY2ggY2lwaGVyLiAgVGhlIGVuZCBvZiB0aGUgY2lwaGVyXF9kZXNjcmlwdG9yIGFycmF5IGlzCittYXJrZWQgd2hlbiBcdGV4dGl0e25hbWV9IGVxdWFscyB7XGJmIE5VTEx9LgorCitBcyBvZiB0aGlzIHJlbGVhc2UgdGhlIGN1cnJlbnQgY2lwaGVyXF9kZXNjcmlwdG9ycyBlbGVtZW50cyBhcmUgdGhlIGZvbGxvd2luZzoKK1x2ZmlsCitcaW5kZXh7Q2lwaGVyIGRlc2NyaXB0b3IgdGFibGV9CitcaW5kZXh7Ymxvd2Zpc2hcX2Rlc2N9IFxpbmRleHt4dGVhXF9kZXNjfSBcaW5kZXh7cmMyXF9kZXNjfSBcaW5kZXh7cmM1XF9kZXNjfSBcaW5kZXh7cmM2XF9kZXNjfSBcaW5kZXh7c2FmZXJwXF9kZXNjfSBcaW5kZXh7YWVzXF9kZXNjfSBcaW5kZXh7dHdvZmlzaFxfZGVzY30KK1xpbmRleHtkZXNcX2Rlc2N9IFxpbmRleHtkZXMzXF9kZXNjfSBcaW5kZXh7bm9la2VvblxfZGVzY30gXGluZGV4e3NraXBqYWNrXF9kZXNjfSBcaW5kZXh7YW51YmlzXF9kZXNjfSBcaW5kZXh7a2hhemFkXF9kZXNjfSBcaW5kZXh7a3NlZWRcX2Rlc2N9IFxpbmRleHtrYXN1bWlcX2Rlc2N9CitcYmVnaW57ZmlndXJlfVtocGJ0XQorXGJlZ2lue3NtYWxsfQorXGJlZ2lue2NlbnRlcn0KK1xiZWdpbnt0YWJ1bGFyfXt8Y3xjfGN8Y3xjfGN8fQorICAgICBcaGxpbmUgXHRleHRiZntOYW1lfSAmIFx0ZXh0YmZ7RGVzY3JpcHRvciBOYW1lfSAmIFx0ZXh0YmZ7QmxvY2sgU2l6ZX0gJiBcdGV4dGJme0tleSBSYW5nZX0gJiBcdGV4dGJme1JvdW5kc30gXFwKKyAgICAgXGhsaW5lIEJsb3dmaXNoICYgYmxvd2Zpc2hcX2Rlc2MgJiA4ICYgOCAkXGxkb3RzJCA1NiAmIDE2IFxcCisgICAgIFxobGluZSBYLVRlYSAmIHh0ZWFcX2Rlc2MgJiA4ICYgMTYgJiAzMiBcXAorICAgICBcaGxpbmUgUkMyICYgcmMyXF9kZXNjICYgOCAmIDggJFxsZG90cyQgMTI4ICYgMTYgXFwKKyAgICAgXGhsaW5lIFJDNS0zMi8xMi9iICYgcmM1XF9kZXNjICYgOCAmIDggJFxsZG90cyQgMTI4ICYgMTIgJFxsZG90cyQgMjQgXFwKKyAgICAgXGhsaW5lIFJDNi0zMi8yMC9iICYgcmM2XF9kZXNjICYgMTYgJiA4ICRcbGRvdHMkIDEyOCAmIDIwIFxcCisgICAgIFxobGluZSBTQUZFUisgJiBzYWZlcnBcX2Rlc2MgJjE2ICYgMTYsIDI0LCAzMiAmIDgsIDEyLCAxNiBcXAorICAgICBcaGxpbmUgQUVTICYgYWVzXF9kZXNjICYgMTYgJiAxNiwgMjQsIDMyICYgMTAsIDEyLCAxNCBcXAorICAgICAgICAgICAgICAgICYgYWVzXF9lbmNcX2Rlc2MgJiAxNiAmIDE2LCAyNCwgMzIgJiAxMCwgMTIsIDE0IFxcCisgICAgIFxobGluZSBUd29maXNoICYgdHdvZmlzaFxfZGVzYyAmIDE2ICYgMTYsIDI0LCAzMiAmIDE2IFxcCisgICAgIFxobGluZSBERVMgJiBkZXNcX2Rlc2MgJiA4ICYgNyAmIDE2IFxcCisgICAgIFxobGluZSAzREVTIChFREUgbW9kZSkgJiBkZXMzXF9kZXNjICYgOCAmIDIxICYgMTYgXFwKKyAgICAgXGhsaW5lIENBU1Q1IChDQVNULTEyOCkgJiBjYXN0NVxfZGVzYyAmIDggJiA1ICRcbGRvdHMkIDE2ICYgMTIsIDE2IFxcCisgICAgIFxobGluZSBOb2VrZW9uICYgbm9la2VvblxfZGVzYyAmIDE2ICYgMTYgJiAxNiBcXAorICAgICBcaGxpbmUgU2tpcGphY2sgJiBza2lwamFja1xfZGVzYyAmIDggJiAxMCAmIDMyIFxcCisgICAgIFxobGluZSBBbnViaXMgJiBhbnViaXNcX2Rlc2MgJiAxNiAmIDE2ICRcbGRvdHMkIDQwICYgMTIgJFxsZG90cyQgMTggXFwKKyAgICAgXGhsaW5lIEtoYXphZCAmIGtoYXphZFxfZGVzYyAmIDggJiAxNiAmIDggXFwKKyAgICAgXGhsaW5lIFNFRUQgICAmIGtzZWVkXF9kZXNjICYgMTYgJiAxNiAmIDE2IFxcCisgICAgIFxobGluZSBLQVNVTUkgJiBrYXN1bWlcX2Rlc2MgJiA4ICYgMTYgJiA4IFxcCisgICAgIFxobGluZQorXGVuZHt0YWJ1bGFyfQorXGVuZHtjZW50ZXJ9CitcZW5ke3NtYWxsfQorXGNhcHRpb257QnVpbHQtLUluIFNvZnR3YXJlIENpcGhlcnN9CitcZW5ke2ZpZ3VyZX0KKworXHN1YnNlY3Rpb257Tm90ZXN9CitcYmVnaW57c21hbGx9CitcYmVnaW57ZW51bWVyYXRlfQorXGl0ZW0KK0ZvciBBRVMsIChhbHNvIGtub3duIGFzIFJpam5kYWVsKSB0aGVyZSBhcmUgZm91ciBkZXNjcmlwdG9ycyB3aGljaCBjb21wbGljYXRlIGlzc3VlcyBhIGxpdHRsZS4gIFRoZSBkZXNjcmlwdG9ycyAKK3Jpam5kYWVsXF9kZXNjIGFuZCByaWpuZGFlbFxfZW5jXF9kZXNjIHByb3ZpZGUgdGhlIGNpcGhlciBuYW1lZCBcdGV4dGl0e3Jpam5kYWVsfS4gIFRoZSBkZXNjcmlwdG9ycyBhZXNcX2Rlc2MgYW5kIAorYWVzXF9lbmNcX2Rlc2MgcHJvdmlkZSB0aGUgY2lwaGVyIG5hbWUgXHRleHRpdHthZXN9LiAgRnVuY3Rpb25hbGx5IGJvdGggXHRleHRpdHtyaWpuZGFlbH0gYW5kIFx0ZXh0aXR7YWVzfSBhcmUgdGhlIHNhbWUgY2lwaGVyLiAgVGhlCitvbmx5IGRpZmZlcmVuY2UgaXMgd2hlbiB5b3UgY2FsbCBmaW5kXF9jaXBoZXIoKSB5b3UgaGF2ZSB0byBwYXNzIHRoZSBjb3JyZWN0IG5hbWUuICBUaGUgY2lwaGVyIGRlc2NyaXB0b3JzIHdpdGggXHRleHRpdHtlbmN9IAoraW4gdGhlIG1pZGRsZSAoZS5nLiByaWpuZGFlbFxfZW5jXF9kZXNjKSBhcmUgcmVsYXRlZCB0byBhbiBpbXBsZW1lbnRhdGlvbiBvZiBSaWpuZGFlbCB3aXRoIG9ubHkgdGhlIGVuY3J5cHRpb24gcm91dGluZQorYW5kIHRhYmxlcy4gIFRoZSBkZWNyeXB0aW9uIGFuZCBzZWxmLS10ZXN0IGZ1bmN0aW9uIHBvaW50ZXJzIG9mIGJvdGggXHRleHRpdHtlbmNyeXB0IG9ubHl9IGRlc2NyaXB0b3JzIGFyZSBzZXQgdG8gXHRleHRiZntOVUxMfSBhbmQgCitzaG91bGQgbm90IGJlIGNhbGxlZC4KKworVGhlIFx0ZXh0aXR7ZW5jcnlwdCBvbmx5fSBkZXNjcmlwdG9ycyBhcmUgdXNlZnVsIGZvciBhcHBsaWNhdGlvbnMgdGhhdCBvbmx5IHVzZSB0aGUgZW5jcnlwdGlvbiBmdW5jdGlvbiBvZiB0aGUgY2lwaGVyLiAgQWxnb3JpdGhtcyBzdWNoCithcyBFQVgsIFBNQUMgYW5kIE9NQUMgb25seSByZXF1aXJlIHRoZSBlbmNyeXB0aW9uIGZ1bmN0aW9uLiAgU28gZmFyIHRoaXMgXHRleHRpdHtlbmNyeXB0IG9ubHl9IGZ1bmN0aW9uYWxpdHkgaGFzIG9ubHkgYmVlbiBpbXBsZW1lbnRlZCBmb3IKK1Jpam5kYWVsIGFzIGl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlIGZvciB0aGlzIGNpcGhlci4KKworXGl0ZW0KK05vdGUgdGhhdCBmb3IgXHRleHRpdHtERVN9IGFuZCBcdGV4dGl0ezNERVN9IHRoZXkgdXNlIDggYW5kIDI0IGJ5dGUga2V5cyBidXQgb25seSA3IGFuZCAyMSBbcmVzcGVjdGl2ZWx5XSBieXRlcyBvZiB0aGUga2V5cyBhcmUgaW4KK2ZhY3QgdXNlZCBmb3IgdGhlIHB1cnBvc2VzIG9mIGVuY3J5cHRpb24uICBNeSBzdWdnZXN0aW9uIGlzIGp1c3QgdG8gdXNlIHJhbmRvbSA4LzI0IGJ5dGUga2V5cyBpbnN0ZWFkIG9mIHRyeWluZyB0byBtYWtlIGEgOC8yNAorYnl0ZSBzdHJpbmcgZnJvbSB0aGUgcmVhbCA3LzIxIGJ5dGUga2V5LgorCitcaXRlbQorTm90ZSB0aGF0IFx0ZXh0aXR7VHdvZmlzaH0gaGFzIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zIChGaWd1cmUgXHJlZntmaWc6dHdvZmlzaG9wdHN9KSB0aGF0IHRha2UgcGxhY2UgYXQgYnVpbGQgdGltZS4gIFRoZXNlIG9wdGlvbnMgYXJlIGZvdW5kIGluCit0aGUgZmlsZSBcdGV4dGl0e3RvbWNyeXB0XF9jZmcuaH0uICBUaGUgZmlyc3Qgb3B0aW9uIGlzIFx0ZXh0aXR7VFdPRklTSFxfU01BTEx9IHdoaWNoIHdoZW4gZGVmaW5lZCB3aWxsIGZvcmNlIHRoZSBUd29maXNoIGNvZGUKK3RvIG5vdCBwcmUtY29tcHV0ZSB0aGUgVHdvZmlzaCBcdGV4dGl0eyRnKFgpJH0gZnVuY3Rpb24gYXMgYSBzZXQgb2YgZm91ciAkOCBcdGltZXMgMzIkIHMtYm94ZXMuICBUaGlzIG1lYW5zIHRoYXQgYSBzY2hlZHVsZWQKK2tleSB3aWxsIHJlcXVpcmUgbGVzcyByYW0gYnV0IHRoZSByZXN1bHRpbmcgY2lwaGVyIHdpbGwgYmUgc2xvd2VyLiAgVGhlIHNlY29uZCBvcHRpb24gaXMgXHRleHRpdHtUV09GSVNIXF9UQUJMRVN9IHdoaWNoIHdoZW4KK2RlZmluZWQgd2lsbCBmb3JjZSB0aGUgVHdvZmlzaCBjb2RlIHRvIHVzZSBwcmUtY29tcHV0ZWQgdGFibGVzIGZvciB0aGUgdHdvIHMtYm94ZXMgJHFfMCwgcV8xJCBhcyB3ZWxsIGFzIHRoZSBtdWx0aXBsaWNhdGlvbgorYnkgdGhlIHBvbHlub21pYWxzIDVCIGFuZCBFRiB1c2VkIGluIHRoZSBNRFMgbXVsdGlwbGljYXRpb24uICBBcyBhIHJlc3VsdCB0aGUgY29kZSBpcyBmYXN0ZXIgYW5kIHNsaWdodGx5IGxhcmdlci4gIFRoZQorc3BlZWQgaW5jcmVhc2UgaXMgdXNlZnVsIHdoZW4gXHRleHRpdHtUV09GSVNIXF9TTUFMTH0gaXMgZGVmaW5lZCBzaW5jZSB0aGUgcy1ib3hlcyBhbmQgTURTIG11bHRpcGx5IGZvcm0gdGhlIGhlYXJ0IG9mIHRoZQorVHdvZmlzaCByb3VuZCBmdW5jdGlvbi4KKworXGJlZ2lue2ZpZ3VyZX1baHBidF0KK1xpbmRleHtUd29maXNoIGJ1aWxkIG9wdGlvbnN9IFxpbmRleHtUV09GSVNIXF9TTUFMTH0gXGluZGV4e1RXT0ZJU0hcX1RBQkxFU30KK1xiZWdpbntzbWFsbH0KK1xiZWdpbntjZW50ZXJ9CitcYmVnaW57dGFidWxhcn17fGx8bHxsfH0KK1xobGluZSBcdGV4dGJme1RXT0ZJU0hcX1NNQUxMfSAmIFx0ZXh0YmZ7VFdPRklTSFxfVEFCTEVTfSAmIFx0ZXh0YmZ7U3BlZWQgYW5kIE1lbW9yeSAocGVyIGtleSl9IFxcCitcaGxpbmUgdW5kZWZpbmVkICYgdW5kZWZpbmVkICYgVmVyeSBmYXN0LCA0LjJLQiBvZiByYW0uIFxcCitcaGxpbmUgdW5kZWZpbmVkICYgZGVmaW5lZCAmIEZhc3RlciBrZXkgc2V0dXAsIGxhcmdlciBjb2RlLiBcXAorXGhsaW5lIGRlZmluZWQgJiB1bmRlZmluZWQgJiBWZXJ5IHNsb3csIDAuMktCIG9mIHJhbS4gXFwKK1xobGluZSBkZWZpbmVkICYgZGVmaW5lZCAmIEZhc3RlciwgMC4yS0Igb2YgcmFtLCBsYXJnZXIgY29kZS4gXFwKK1xobGluZQorXGVuZHt0YWJ1bGFyfQorXGVuZHtjZW50ZXJ9CitcZW5ke3NtYWxsfQorXGNhcHRpb257VHdvZmlzaCBCdWlsZCBPcHRpb25zfQorXGxhYmVse2ZpZzp0d29maXNob3B0c30KK1xlbmR7ZmlndXJlfQorXGVuZHtlbnVtZXJhdGV9CitcZW5ke3NtYWxsfQorCitUbyB3b3JrIHdpdGggdGhlIGNpcGhlclxfZGVzY3JpcHRvciBhcnJheSB0aGVyZSBpcyBhIGZ1bmN0aW9uOgorXGluZGV4e2ZpbmRcX2NpcGhlcigpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGZpbmRfY2lwaGVyKGNoYXIgKm5hbWUpCitcZW5ke3ZlcmJhdGltfQorV2hpY2ggd2lsbCBzZWFyY2ggZm9yIGEgZ2l2ZW4gbmFtZSBpbiB0aGUgYXJyYXkuICBJdCByZXR1cm5zICQtMSQgaWYgdGhlIGNpcGhlciBpcyBub3QgZm91bmQsIG90aGVyd2lzZSBpdCByZXR1cm5zCit0aGUgbG9jYXRpb24gaW4gdGhlIGFycmF5IHdoZXJlIHRoZSBjaXBoZXIgd2FzIGZvdW5kLiAgRm9yIGV4YW1wbGUsIHRvIGluZGlyZWN0bHkgc2V0dXAgQmxvd2Zpc2ggeW91IGNhbiBhbHNvIHVzZToKK1xiZWdpbntzbWFsbH0KK1xpbmRleHtyZWdpc3RlclxfY2lwaGVyKCl9IFxpbmRleHtmaW5kXF9jaXBoZXIoKX0gXGluZGV4e2Vycm9yXF90b1xfc3RyaW5nKCl9CitcYmVnaW57dmVyYmF0aW19CisjaW5jbHVkZSA8dG9tY3J5cHQuaD4KK2ludCBtYWluKHZvaWQpCit7CisgICB1bnNpZ25lZCBjaGFyIGtleVs4XTsKKyAgIHN5bW1ldHJpY19rZXkgc2tleTsKKyAgIGludCBlcnI7CisKKyAgIC8qIHlvdSBtdXN0IHJlZ2lzdGVyIGEgY2lwaGVyIGJlZm9yZSB5b3UgdXNlIGl0ICovCisgICBpZiAocmVnaXN0ZXJfY2lwaGVyKCZibG93ZmlzaF9kZXNjKSkgPT0gLTEpIHsKKyAgICAgIHByaW50ZigiVW5hYmxlIHRvIHJlZ2lzdGVyIEJsb3dmaXNoIGNpcGhlci4iKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKworICAgLyogZ2VuZXJpYyBjYWxsIHRvIGZ1bmN0aW9uIChhc3N1bWluZyB0aGUga2V5IAorICAgICogaW4ga2V5W10gd2FzIGFscmVhZHkgc2V0dXApICovCisgICBpZiAoKGVyciA9IAorICAgICAgICBjaXBoZXJfZGVzY3JpcHRvcltmaW5kX2NpcGhlcigiYmxvd2Zpc2giKV0uCisgICAgICAgICAgc2V0dXAoa2V5LCA4LCAwLCAmc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICBwcmludGYoIkVycm9yIHNldHRpbmcgdXAgQmxvd2Zpc2g6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIC8qIC4uLiB1c2UgY2lwaGVyIC4uLiAqLworfQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CisKK0EgZ29vZCBzYWZldHkgd291bGQgYmUgdG8gY2hlY2sgdGhlIHJldHVybiB2YWx1ZSBvZiBcdGV4dGl0e2ZpbmRcX2NpcGhlcigpfSBiZWZvcmUgYWNjZXNzaW5nIHRoZSBkZXNpcmVkIGZ1bmN0aW9uLiAgSW4gb3JkZXIKK3RvIHVzZSBhIGNpcGhlciB3aXRoIHRoZSBkZXNjcmlwdG9yIHRhYmxlIHlvdSBtdXN0IHJlZ2lzdGVyIGl0IGZpcnN0IHVzaW5nOgorXGluZGV4e3JlZ2lzdGVyXF9jaXBoZXIoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCByZWdpc3Rlcl9jaXBoZXIoY29uc3Qgc3RydWN0IF9jaXBoZXJfZGVzY3JpcHRvciAqY2lwaGVyKTsKK1xlbmR7dmVyYmF0aW19CitXaGljaCBhY2NlcHRzIGEgcG9pbnRlciB0byBhIGRlc2NyaXB0b3IgYW5kIHJldHVybnMgdGhlIGluZGV4IGludG8gdGhlIGdsb2JhbCBkZXNjcmlwdG9yIHRhYmxlLiAgSWYgYW4gZXJyb3Igb2NjdXJzIHN1Y2gKK2FzIHRoZXJlIGlzIG5vIG1vcmUgcm9vbSAoaXQgY2FuIGhhdmUgMzIgY2lwaGVycyBhdCBtb3N0KSBpdCB3aWxsIHJldHVybiB7XGJmey0xfX0uICBJZiB5b3UgdHJ5IHRvIGFkZCB0aGUgc2FtZSBjaXBoZXIgbW9yZQordGhhbiBvbmNlIGl0IHdpbGwganVzdCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBjb3B5LiAgVG8gcmVtb3ZlIGEgY2lwaGVyIGNhbGw6CitcaW5kZXh7dW5yZWdpc3RlclxfY2lwaGVyKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgdW5yZWdpc3Rlcl9jaXBoZXIoY29uc3Qgc3RydWN0IF9jaXBoZXJfZGVzY3JpcHRvciAqY2lwaGVyKTsKK1xlbmR7dmVyYmF0aW19CitXaGljaCByZXR1cm5zIHtcYmYgQ1JZUFRcX09LfSBpZiBpdCByZW1vdmVzIHRoZSBjaXBoZXIsIG90aGVyd2lzZSBpdCByZXR1cm5zIHtcYmYgQ1JZUFRcX0VSUk9SfS4gIAorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CitpbnQgbWFpbih2b2lkKQoreworICAgaW50IGVycjsKKyAgIAorICAgLyogcmVnaXN0ZXIgdGhlIGNpcGhlciAqLworICAgaWYgKHJlZ2lzdGVyX2NpcGhlcigmcmlqbmRhZWxfZGVzYykgPT0gLTEpIHsKKyAgICAgIHByaW50ZigiRXJyb3IgcmVnaXN0ZXJpbmcgUmlqbmRhZWxcbiIpOworICAgICAgcmV0dXJuIC0xOworICAgfQorCisgICAvKiB1c2UgUmlqbmRhZWwgKi8KKworICAgLyogcmVtb3ZlIGl0ICovCisgICBpZiAoKGVyciA9IHVucmVnaXN0ZXJfY2lwaGVyKCZyaWpuZGFlbF9kZXNjKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHByaW50ZigiRXJyb3IgcmVtb3ZpbmcgUmlqbmRhZWw6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIHJldHVybiAwOworfQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CitUaGlzIHNuaXBwZXQgaXMgYSBzbWFsbCBwcm9ncmFtIHRoYXQgcmVnaXN0ZXJzIFJpam5kYWVsLiAgCisKK1xteXNlY3Rpb257U3ltbWV0cmljIE1vZGVzIG9mIE9wZXJhdGlvbnN9Citcc3Vic2VjdGlvbntCYWNrZ3JvdW5kfQorQSB0eXBpY2FsIHN5bW1ldHJpYyBibG9jayBjaXBoZXIgY2FuIGJlIHVzZWQgaW4gY2hhaW5pbmcgbW9kZXMgdG8gZWZmZWN0aXZlbHkgZW5jcnlwdCBtZXNzYWdlcyBsYXJnZXIgdGhhbiB0aGUgYmxvY2sKK3NpemUgb2YgdGhlIGNpcGhlci4gIEdpdmVuIGEga2V5ICRrJCwgYSBwbGFpbnRleHQgJFAkIGFuZCBhIGNpcGhlciAkRSQgd2Ugc2hhbGwgZGVub3RlIHRoZSBlbmNyeXB0aW9uIG9mIHRoZSBibG9jaworJFAkIHVuZGVyIHRoZSBrZXkgJGskIGFzICRFX2soUCkkLiAgSW4gc29tZSBtb2RlcyB0aGVyZSBleGlzdHMgYW4gaW5pdGlhbCB2ZWN0b3IgZGVub3RlZCBhcyAkQ197LTF9JC4KKworXHN1YnN1YnNlY3Rpb257RUNCIE1vZGV9CitcaW5kZXh7RUNCIG1vZGV9CitFQ0Igb3IgRWxlY3Ryb25pYyBDb2RlYm9vayBNb2RlIGlzIHRoZSBzaW1wbGVzdCBtZXRob2QgdG8gdXNlLiAgSXQgaXMgZ2l2ZW4gYXM6CitcYmVnaW57ZXF1YXRpb259CitDX2kgPSBFX2soUF9pKQorXGVuZHtlcXVhdGlvbn0KK1RoaXMgbW9kZSBpcyB2ZXJ5IHdlYWsgc2luY2UgaXQgYWxsb3dzIHBlb3BsZSB0byBzd2FwIGJsb2NrcyBhbmQgcGVyZm9ybSByZXBsYXkgYXR0YWNrcyBpZiB0aGUgc2FtZSBrZXkgaXMgdXNlZCBtb3JlCit0aGFuIG9uY2UuCisKK1xzdWJzdWJzZWN0aW9ue0NCQyBNb2RlfQorXGluZGV4e0NCQyBtb2RlfQorQ0JDIG9yIENpcGhlciBCbG9jayBDaGFpbmluZyBtb2RlIGlzIGEgc2ltcGxlIG1vZGUgZGVzaWduZWQgdG8gcHJldmVudCB0cml2aWFsIGZvcm1zIG9mIHJlcGxheSBhbmQgc3dhcCBhdHRhY2tzIG9uIGNpcGhlcnMuCitJdCBpcyBnaXZlbiBhczoKK1xiZWdpbntlcXVhdGlvbn0KK0NfaSA9IEVfayhQX2kgXG9wbHVzIENfe2kgLSAxfSkKK1xlbmR7ZXF1YXRpb259CitJdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGUgaW5pdGlhbCB2ZWN0b3IgYmUgdW5pcXVlIGFuZCBwcmVmZXJhYmx5IHJhbmRvbSBmb3IgZWFjaCBtZXNzYWdlIGVuY3J5cHRlZCB1bmRlciB0aGUgc2FtZSBrZXkuCisKK1xzdWJzdWJzZWN0aW9ue0NUUiBNb2RlfQorXGluZGV4e0NUUiBtb2RlfQorQ1RSIG9yIENvdW50ZXIgTW9kZSBpcyBhIG1vZGUgd2hpY2ggb25seSB1c2VzIHRoZSBlbmNyeXB0aW9uIGZ1bmN0aW9uIG9mIHRoZSBjaXBoZXIuICBHaXZlbiBhIGluaXRpYWwgdmVjdG9yIHdoaWNoIGlzCit0cmVhdGVkIGFzIGEgbGFyZ2UgYmluYXJ5IGNvdW50ZXIgdGhlIENUUiBtb2RlIGlzIGdpdmVuIGFzOgorXGJlZ2lue2VxbmFycmF5fQorQ197LTF9ID0gQ197LTF9ICsgMVxtYm94eyB9KFxtYm94e21vZCB9Ml5XKSBcbm9udW1iZXIgXFwKK0NfaSA9IFBfaSBcb3BsdXMgRV9rKENfey0xfSkKK1xlbmR7ZXFuYXJyYXl9CitXaGVyZSAkVyQgaXMgdGhlIHNpemUgb2YgYSBibG9jayBpbiBiaXRzIChlLmcuIDY0IGZvciBCbG93ZmlzaCkuICBBcyBsb25nIGFzIHRoZSBpbml0aWFsIHZlY3RvciBpcyByYW5kb20gZm9yIGVhY2ggbWVzc2FnZQorZW5jcnlwdGVkIHVuZGVyIHRoZSBzYW1lIGtleSByZXBsYXkgYW5kIHN3YXAgYXR0YWNrcyBhcmUgaW5mZWFzaWJsZS4gIENUUiBtb2RlIG1heSBsb29rIHNpbXBsZSBidXQgaXQgaXMgYXMgc2VjdXJlCithcyB0aGUgYmxvY2sgY2lwaGVyIGlzIHVuZGVyIGEgY2hvc2VuIHBsYWludGV4dCBhdHRhY2sgKHByb3ZpZGVkIHRoZSBpbml0aWFsIHZlY3RvciBpcyB1bmlxdWUpLgorCitcc3Vic3Vic2VjdGlvbntDRkIgTW9kZX0KK1xpbmRleHtDRkIgbW9kZX0KK0NGQiBvciBDaXBoZXJ0ZXh0IEZlZWRiYWNrIE1vZGUgaXMgYSBtb2RlIGFraW4gdG8gQ0JDLiAgSXQgaXMgZ2l2ZW4gYXM6CitcYmVnaW57ZXFuYXJyYXl9CitDX2kgPSBQX2kgXG9wbHVzIENfey0xfSBcbm9udW1iZXIgXFwKK0Nfey0xfSA9IEVfayhDX2kpCitcZW5ke2VxbmFycmF5fQorTm90ZSB0aGF0IGluIHRoaXMgbGlicmFyeSB0aGUgb3V0cHV0IGZlZWRiYWNrIHdpZHRoIGlzIGVxdWFsIHRvIHRoZSBzaXplIG9mIHRoZSBibG9jayBjaXBoZXIuICBUaGF0IGlzIHRoaXMgbW9kZSBpcyB1c2VkCit0byBlbmNyeXB0IHdob2xlIGJsb2NrcyBhdCBhIHRpbWUuICBIb3dldmVyLCB0aGUgbGlicmFyeSB3aWxsIGJ1ZmZlciBkYXRhIGFsbG93aW5nIHRoZSB1c2VyIHRvIGVuY3J5cHQgb3IgZGVjcnlwdCBwYXJ0aWFsCitibG9ja3Mgd2l0aG91dCBhIGRlbGF5LiAgV2hlbiB0aGlzIG1vZGUgaXMgZmlyc3Qgc2V0dXAgaXQgd2lsbCBpbml0aWFsbHkgZW5jcnlwdCB0aGUgaW5pdGlhbCB2ZWN0b3IgYXMgcmVxdWlyZWQuCisKK1xzdWJzdWJzZWN0aW9ue09GQiBNb2RlfQorXGluZGV4e09GQiBtb2RlfQorT0ZCIG9yIE91dHB1dCBGZWVkYmFjayBNb2RlIGlzIGEgbW9kZSBha2luIHRvIENCQyBhcyB3ZWxsLiAgSXQgaXMgZ2l2ZW4gYXM6CitcYmVnaW57ZXFuYXJyYXl9CitDX3stMX0gPSBFX2soQ197LTF9KSBcbm9udW1iZXIgXFwKK0NfaSA9IFBfaSBcb3BsdXMgQ197LTF9CitcZW5ke2VxbmFycmF5fQorTGlrZSB0aGUgQ0ZCIG1vZGUgdGhlIG91dHB1dCB3aWR0aCBpbiBDRkIgbW9kZSBpcyB0aGUgc2FtZSBhcyB0aGUgd2lkdGggb2YgdGhlIGJsb2NrIGNpcGhlci4gIE9GQiBtb2RlIHdpbGwgYWxzbworYnVmZmVyIHRoZSBvdXRwdXQgd2hpY2ggd2lsbCBhbGxvdyB5b3UgdG8gZW5jcnlwdCBvciBkZWNyeXB0IHBhcnRpYWwgYmxvY2tzIHdpdGhvdXQgZGVsYXkuCisKK1xzdWJzZWN0aW9ue0Nob2ljZSBvZiBNb2RlfQorTXkgcGVyc29uYWwgcHJlZmVyZW5jZSBpcyBmb3IgdGhlIENUUiBtb2RlIHNpbmNlIGl0IGhhcyBzZXZlcmFsIGtleSBiZW5lZml0czoKK1xiZWdpbntlbnVtZXJhdGV9CisgICBcaXRlbSBObyBzaG9ydCBjeWNsZXMgd2hpY2ggaXMgcG9zc2libGUgaW4gdGhlIE9GQiBhbmQgQ0ZCIG1vZGVzLgorICAgXGl0ZW0gUHJvdmFibHkgYXMgc2VjdXJlIGFzIHRoZSBibG9jayBjaXBoZXIgYmVpbmcgdXNlZCB1bmRlciBhIGNob3NlbiBwbGFpbnRleHQgYXR0YWNrLgorICAgXGl0ZW0gVGVjaG5pY2FsbHkgZG9lcyBub3QgcmVxdWlyZSB0aGUgZGVjcnlwdGlvbiByb3V0aW5lIG9mIHRoZSBjaXBoZXIuCisgICBcaXRlbSBBbGxvd3MgcmFuZG9tIGFjY2VzcyB0byB0aGUgcGxhaW50ZXh0LgorICAgXGl0ZW0gQWxsb3dzIHRoZSBlbmNyeXB0aW9uIG9mIGJsb2NrIHNpemVzIHRoYXQgYXJlIG5vdCBlcXVhbCB0byB0aGUgc2l6ZSBvZiB0aGUgYmxvY2sgY2lwaGVyLgorXGVuZHtlbnVtZXJhdGV9CitUaGUgQ1RSLCBDRkIgYW5kIE9GQiByb3V0aW5lcyBwcm92aWRlZCBhbGxvdyB5b3UgdG8gZW5jcnlwdCBibG9jayBzaXplcyB0aGF0IGRpZmZlciBmcm9tIHRoZSBjaXBoZXJzIGJsb2NrIHNpemUuICBUaGV5IAorYWNjb21wbGlzaCB0aGlzIGJ5IGJ1ZmZlcmluZyB0aGUgZGF0YSByZXF1aXJlZCB0byBjb21wbGV0ZSBhIGJsb2NrLiAgVGhpcyBhbGxvd3MgeW91IHRvIGVuY3J5cHQgb3IgZGVjcnlwdCBhbnkgc2l6ZSAKK2Jsb2NrIG9mIG1lbW9yeSB3aXRoIGVpdGhlciBvZiB0aGUgdGhyZWUgbW9kZXMuCisKK1RoZSBFQ0IgYW5kIENCQyBtb2RlcyBwcm9jZXNzIGJsb2NrcyBvZiB0aGUgc2FtZSBzaXplIGFzIHRoZSBjaXBoZXIgYXQgYSB0aW1lLiAgVGhlcmVmb3JlLCB0aGV5IGFyZSBsZXNzIGZsZXhpYmxlIHRoYW4gdGhlCitvdGhlciBtb2Rlcy4KKworXHN1YnNlY3Rpb257Q2lwaGVydGV4dCBTdGVhbGluZ30KK1xpbmRleHtDaXBoZXJ0ZXh0IHN0ZWFsaW5nfQorQ2lwaGVydGV4dCBzdGVhbGluZyBpcyBhIG1ldGhvZCBvZiBkZWFsaW5nIHdpdGggbWVzc2FnZXMgaW4gQ0JDIG1vZGUgd2hpY2ggYXJlIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBibG9jayBsZW5ndGguICBUaGlzIGlzIGFjY29tcGxpc2hlZAorYnkgZW5jcnlwdGluZyB0aGUgbGFzdCBjaXBoZXJ0ZXh0IGJsb2NrIGluIEVDQiBtb2RlLCBhbmQgWE9SJ2luZyB0aGUgb3V0cHV0IGFnYWluc3QgdGhlIGxhc3QgcGFydGlhbCBibG9jayBvZiBwbGFpbnRleHQuICBMaWJUb21DcnlwdCBkb2VzIG5vdAorc3VwcG9ydCB0aGlzIG1vZGUgZGlyZWN0bHkgYnV0IGl0IGlzIGZhaXJseSBlYXN5IHRvIGVtdWxhdGUgd2l0aCBhIGNhbGwgdG8gdGhlIGNpcGhlcidzIGVjYlxfZW5jcnlwdCgpIGNhbGxiYWNrIGZ1bmN0aW9uLiAgCisKK1RoZSBtb3JlIHNhbmUgd2F5IHRvIGRlYWwgd2l0aCBwYXJ0aWFsIGJsb2NrcyBpcyB0byBwYWQgdGhlbSB3aXRoIHplcm9lcywgYW5kIHRoZW4gdXNlIENCQyBub3JtYWxseS4gIAorCitcc3Vic2VjdGlvbntJbml0aWFsaXphdGlvbn0KK1xpbmRleHtDQkMgTW9kZX0gXGluZGV4e0NUUiBNb2RlfQorXGluZGV4e09GQiBNb2RlfSBcaW5kZXh7Q0ZCIE1vZGV9CitUaGUgbGlicmFyeSBwcm92aWRlcyBzaW1wbGUgc3VwcG9ydCByb3V0aW5lcyBmb3IgaGFuZGxpbmcgQ0JDLCBDVFIsIENGQiwgT0ZCIGFuZCBFQ0IgZW5jb2RlZCBtZXNzYWdlcy4gIEFzc3VtaW5nIHRoZSBtb2RlIAoreW91IHdhbnQgaXMgWFhYIHRoZXJlIGlzIGEgc3RydWN0dXJlIGNhbGxlZCBcdGV4dGl0e3N5bW1ldHJpY1xfWFhYfSB0aGF0IHdpbGwgY29udGFpbiB0aGUgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8KK3VzZSB0aGF0IG1vZGUuICBUaGV5IGhhdmUgaWRlbnRpY2FsIHNldHVwIHJvdXRpbmVzIChleGNlcHQgQ1RSIGFuZCBFQ0IgbW9kZSk6CitcaW5kZXh7ZWNiXF9zdGFydCgpfSBcaW5kZXh7Y2ZiXF9zdGFydCgpfSBcaW5kZXh7Y2JjXF9zdGFydCgpfSBcaW5kZXh7b2ZiXF9zdGFydCgpfSBcaW5kZXh7Y3RyXF9zdGFydCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IFhYWF9zdGFydCggICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsIAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGtleWxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG51bV9yb3VuZHMsIAorICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfWFhYICpYWFgpOworCitpbnQgY3RyX3N0YXJ0KCAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbnVtX3JvdW5kcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGN0cl9tb2RlLAorICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfQ1RSICpjdHIpOworCitpbnQgZWNiX3N0YXJ0KCAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGtleWxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG51bV9yb3VuZHMsIAorICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfRUNCICplY2IpOworXGVuZHt2ZXJiYXRpbX0KKworSW4gZWFjaCBjYXNlLCBcdGV4dGl0e2NpcGhlcn0gaXMgdGhlIGluZGV4IGludG8gdGhlIGNpcGhlclxfZGVzY3JpcHRvciBhcnJheSBvZiB0aGUgY2lwaGVyIHlvdSB3YW50IHRvIHVzZS4gIFRoZSBcdGV4dGl0e0lWfSB2YWx1ZSBpcyAKK3RoZSBpbml0aWFsaXphdGlvbiB2ZWN0b3IgdG8gYmUgdXNlZCB3aXRoIHRoZSBjaXBoZXIuICBZb3UgbXVzdCBmaWxsIHRoZSBJViB5b3Vyc2VsZiBhbmQgaXQgaXMgYXNzdW1lZCB0aGV5IGFyZSB0aGUgc2FtZSAKK2xlbmd0aCBhcyB0aGUgYmxvY2sgc2l6ZVxmb290bm90ZXtJbiBvdGhlciB3b3JkcyB0aGUgc2l6ZSBvZiBhIGJsb2NrIG9mIHBsYWludGV4dCBmb3IgdGhlIGNpcGhlciwgZS5nLiA4IGZvciBERVMsIDE2IGZvciBBRVMsIGV0Yy59IAorb2YgdGhlIGNpcGhlciB5b3UgY2hvb3NlLiAgSXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIElWICBiZSByYW5kb20gZm9yIGVhY2ggdW5pcXVlIG1lc3NhZ2UgeW91IHdhbnQgdG8gZW5jcnlwdC4gIFRoZSAKK3BhcmFtZXRlcnMgXHRleHRpdHtrZXl9LCBcdGV4dGl0e2tleWxlbn0gYW5kIFx0ZXh0aXR7bnVtXF9yb3VuZHN9IGFyZSB0aGUgc2FtZSBhcyBpbiB0aGUgWFhYXF9zZXR1cCgpIGZ1bmN0aW9uIGNhbGwuICBUaGUgZmluYWwgcGFyYW1ldGVyIAoraXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3R1cmUgeW91IHdhbnQgdG8gaG9sZCB0aGUgaW5mb3JtYXRpb24gZm9yIHRoZSBtb2RlIG9mIG9wZXJhdGlvbi4KKworCitJbiB0aGUgY2FzZSBvZiBDVFIgbW9kZSB0aGVyZSBpcyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciBcdGV4dGl0e2N0clxfbW9kZX0gd2hpY2ggc3BlY2lmaWVzIHRoZSBtb2RlIHRoYXQgdGhlIGNvdW50ZXIgaXMgdG8gYmUgdXNlZCBpbi4KK0lmIFx0ZXh0YmZ7Q1RSXF9DT1VOVEVSXF8gTElUVExFXF9FTkRJQU59IHdhcyBzcGVjaWZpZWQgdGhlbiB0aGUgY291bnRlciB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBsaXR0bGUgZW5kaWFuIHZhbHVlLiAgT3RoZXJ3aXNlLCBpZiAKK1x0ZXh0YmZ7Q1RSXF9DT1VOVEVSXF9CSUdcX0VORElBTn0gd2FzIHNwZWNpZmllZCB0aGUgY291bnRlciB3aWxsIGJlIHRyZWF0ZWQgYXMgYSBiaWcgZW5kaWFuIHZhbHVlLiAgQXMgb2YgdjEuMTUgdGhlIFJGQyAzNjg2IHN0eWxlIG9mCitpbmNyZW1lbnQgdGhlbiBlbmNyeXB0IGlzIGFsc28gc3VwcG9ydGVkLiAgQnkgT1InaW5nIFx0ZXh0YmZ7TFRDXF9DVFJcX1JGQzM2ODZ9IHdpdGggdGhlIENUUiBcdGV4dGl0e21vZGV9IHZhbHVlLCBjdHJcX3N0YXJ0KCkgd2lsbCBpbmNyZW1lbnQKK3RoZSBjb3VudGVyIGJlZm9yZSBlbmNyeXB0aW5nIGl0IGZvciB0aGUgZmlyc3QgdGltZS4KKworVGhlIHJvdXRpbmVzIHJldHVybiB7XGJmIENSWVBUXF9PS30gaWYgdGhlIGNpcGhlciBpbml0aWFsaXplZCBjb3JyZWN0bHksIG90aGVyd2lzZSwgdGhleSByZXR1cm4gYW4gZXJyb3IgY29kZS4gIAorCitcc3Vic2VjdGlvbntFbmNyeXB0aW9uIGFuZCBEZWNyeXB0aW9ufQorVG8gYWN0dWFsbHkgZW5jcnlwdCBvciBkZWNyeXB0IHRoZSBmb2xsb3dpbmcgcm91dGluZXMgYXJlIHByb3ZpZGVkOgorXGluZGV4e2VjYlxfZW5jcnlwdCgpfSBcaW5kZXh7ZWNiXF9kZWNyeXB0KCl9IFxpbmRleHtjZmJcX2VuY3J5cHQoKX0gXGluZGV4e2NmYlxfZGVjcnlwdCgpfSAKK1xpbmRleHtjYmNcX2VuY3J5cHQoKX0gXGluZGV4e2NiY1xfZGVjcnlwdCgpfSBcaW5kZXh7b2ZiXF9lbmNyeXB0KCl9IFxpbmRleHtvZmJcX2RlY3J5cHQoKX0gXGluZGV4e2N0clxfZW5jcnlwdCgpfSBcaW5kZXh7Y3RyXF9kZWNyeXB0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgWFhYX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsZW4sIAorICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19ZWVkgKllZWSk7CisKK2ludCBYWFhfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX1lZWSAqWVlZKTsKK1xlbmR7dmVyYmF0aW19CitXaGVyZSBcdGV4dGl0e1hYWH0gaXMgb25lIG9mICRcbGJyYWNlIGVjYiwgY2JjLCBjdHIsIGNmYiwgb2ZiIFxyYnJhY2UkLiAgCisKK0luIGFsbCBjYXNlcywgXHRleHRpdHtsZW59IGlzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgKGFzIG51bWJlciBvZiBvY3RldHMpIHRvIGVuY3J5cHQgb3IgZGVjcnlwdC4gIFRoZSBDVFIsIE9GQiBhbmQgQ0ZCIG1vZGVzIGFyZSBvcmRlciBzZW5zaXRpdmUgYnV0IG5vdAorY2h1bmsgc2Vuc2l0aXZlLiAgVGhhdCBpcyB5b3UgY2FuIGVuY3J5cHQgXHRleHRpdHtBQkNERUZ9IGluIHRocmVlIGNhbGxzIGxpa2UgXHRleHRpdHtBQn0sIFx0ZXh0aXR7Q0R9LCBcdGV4dGl0e0VGfSBvciB0d28gbGlrZSBcdGV4dGl0e0FCQ0RFfSBhbmQgXHRleHRpdHtGfQorYW5kIGVuZCB1cCB3aXRoIHRoZSBzYW1lIGNpcGhlcnRleHQuICBIb3dldmVyLCBlbmNyeXB0aW5nIFx0ZXh0aXR7QUJDfSBhbmQgXHRleHRpdHtEQUJDfSB3aWxsIHJlc3VsdCBpbiBkaWZmZXJlbnQgY2lwaGVydGV4dHMuICBBbGwKK2ZpdmUgb2YgdGhlIG1vZGVzIHdpbGwgcmV0dXJuIHtcYmYgQ1JZUFRcX09LfSBvbiBzdWNjZXNzIGZyb20gdGhlIGVuY3J5cHQgb3IgZGVjcnlwdCBmdW5jdGlvbnMuCisKK0luIHRoZSBFQ0IgYW5kIENCQyBjYXNlcywgXHRleHRpdHtsZW59IG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgY2lwaGVycyBibG9jayBzaXplLiAgSW4gdGhlIENCQyBjYXNlLCB5b3UgbXVzdCBtYW51YWxseSBwYWQgdGhlIGVuZCBvZiB5b3VyIG1lc3NhZ2UgKGVpdGhlciB3aXRoCit6ZXJvZXMgb3Igd2l0aCB3aGF0ZXZlciB5b3VyIHByb3RvY29sIHJlcXVpcmVzKS4KKworVG8gZGVjcnlwdCBpbiBlaXRoZXIgbW9kZSwgcGVyZm9ybSB0aGUgc2V0dXAgbGlrZSBiZWZvcmUgKHJlY2FsbCB5b3UgaGF2ZSB0byBmZXRjaCB0aGUgSVYgdmFsdWUgeW91IHVzZWQpLCBhbmQgdXNlIHRoZSBkZWNyeXB0IHJvdXRpbmUgb24gYWxsIG9mIHRoZSBibG9ja3MuCisKK1xzdWJzZWN0aW9ue0lWIE1hbmlwdWxhdGlvbn0KK1RvIGNoYW5nZSBvciByZWFkIHRoZSBJViBvZiBhIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgY2hhaW5pbmcgbW9kZSB1c2UgdGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zLgorXGluZGV4e2NiY1xfc2V0aXYoKX0gXGluZGV4e2NiY1xfZ2V0aXYoKX0gXGluZGV4e29mYlxfc2V0aXYoKX0gXGluZGV4e29mYlxfZ2V0aXYoKX0gXGluZGV4e2NmYlxfc2V0aXYoKX0gXGluZGV4e2NmYlxfZ2V0aXYoKX0KK1xpbmRleHtjdHJcX3NldGl2KCl9IFxpbmRleHtjdHJcX2dldGl2KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgWFhYX2dldGl2KHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqbGVuLCAKKyAgICAgICAgICAgICAgc3ltbWV0cmljX1hYWCAqWFhYKTsKKworaW50IFhYWF9zZXRpdihjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxlbiwgCisgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19YWFggKlhYWCk7CitcZW5ke3ZlcmJhdGltfQorCitUaGUgWFhYXF9nZXRpdigpIGZ1bmN0aW9ucyB3aWxsIHJlYWQgdGhlIElWIG91dCBvZiB0aGUgY2hhaW5pbmcgbW9kZSBhbmQgc3RvcmUgaXQgaW50byBcdGV4dGl0e0lWfSBhbG9uZyB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIElWIAorc3RvcmVkIGluIFx0ZXh0aXR7bGVufS4gIFRoZSBYWFhcX3NldGl2IHdpbGwgaW5pdGlhbGl6ZSB0aGUgY2hhaW5pbmcgbW9kZSBzdGF0ZSBhcyBpZiB0aGUgb3JpZ2luYWwgSVYgd2VyZSB0aGUgbmV3IElWIHNwZWNpZmllZC4gIFRoZSBsZW5ndGgKK29mIHRoZSBJViBwYXNzZWQgaW4gbXVzdCBiZSB0aGUgc2l6ZSBvZiB0aGUgY2lwaGVycyBibG9jayBzaXplLgorCitUaGUgWFhYXF9zZXRpdigpIGZ1bmN0aW9ucyBhcmUgaGFuZHkgaWYgeW91IHdpc2ggdG8gY2hhbmdlIHRoZSBJViB3aXRob3V0IHJlLS1rZXlpbmcgdGhlIGNpcGhlci4gIAorCitXaGF0IHRoZSBcdGV4dGl0e3NldGl2fSBmdW5jdGlvbiB3aWxsIGRvIGRlcGVuZHMgb24gdGhlIG1vZGUgYmVpbmcgY2hhbmdlZC4gIEluIENCQyBtb2RlLCB0aGUgbmV3IElWIHJlcGxhY2VzIHRoZSBleGlzdGluZyBJViBhcyBpZiBpdCAKK3dlcmUgdGhlIGxhc3QgY2lwaGVydGV4dCBibG9jay4gIEluIENGQiBtb2RlLCB0aGUgSVYgaXMgZW5jcnlwdGVkIGFzIGlmIGl0IHdlcmUgdGhlIHByaW9yIGVuY3J5cHRlZCBwYWQuICBJbiBDVFIgbW9kZSwgdGhlIElWIGlzIGVuY3J5cHRlZCB3aXRob3V0CitmaXJzdCBpbmNyZW1lbnRpbmcgaXQgKHJlZ2FyZGxlc3Mgb2YgdGhlIExUQ1xfUkZDXF8zNjg2IGZsYWcgcHJlc2VuY2UpLiAgSW4gRjggbW9kZSwgdGhlIElWIGlzIGVuY3J5cHRlZCBhbmQgYmVjb21lcyB0aGUgbmV3IHBhZC4gIEl0IGRvZXMgbm90IGNoYW5nZQordGhlIHNhbHRlZCBJViwgYW5kIGlzIG9ubHkgbWVhbnQgdG8gYWxsb3cgc2Vla2luZyB3aXRoaW4gYSBzZXNzaW9uLiAgSW4gTFJXLCBpdCBjaGFuZ2VzIHRoZSB0d2VhaywgZm9yY2luZyBhIGNvbXB1dGF0aW9uIG9mIHRoZSB0d2VhayBwYWQsIGFsbG93aW5nIGZvcgorc2Vla2luZyB3aXRoaW4gdGhlIHNlc3Npb24uICBJbiBPRkIgbW9kZSwgdGhlIElWIGlzIGVuY3J5cHRlZCBhbmQgYmVjb21lcyB0aGUgbmV3IHBhZC4KKworXHN1YnNlY3Rpb257U3RyZWFtIFRlcm1pbmF0aW9ufQorVG8gdGVybWluYXRlIGFuIG9wZW4gc3RyZWFtIGNhbGwgdGhlIGRvbmUgZnVuY3Rpb24uCisKK1xpbmRleHtlY2JcX2RvbmUoKX0gXGluZGV4e2NiY1xfZG9uZSgpfVxpbmRleHtjZmJcX2RvbmUoKX1caW5kZXh7b2ZiXF9kb25lKCl9IFxpbmRleHtjdHJcX2RvbmUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBYWFhfZG9uZShzeW1tZXRyaWNfWFhYICpYWFgpOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIHRlcm1pbmF0ZSB0aGUgc3RyZWFtIChieSB0ZXJtaW5hdGluZyB0aGUgY2lwaGVyKSBhbmQgcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX09LfSBpZiBzdWNjZXNzZnVsLgorCitcbmV3cGFnZQorXHN1YnNlY3Rpb257RXhhbXBsZXN9CitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CisjaW5jbHVkZSA8dG9tY3J5cHQuaD4KK2ludCBtYWluKHZvaWQpCit7CisgICB1bnNpZ25lZCBjaGFyIGtleVsxNl0sIElWWzE2XSwgYnVmZmVyWzUxMl07CisgICBzeW1tZXRyaWNfQ1RSIGN0cjsKKyAgIGludCB4LCBlcnI7CisKKyAgIC8qIHJlZ2lzdGVyIHR3b2Zpc2ggZmlyc3QgKi8KKyAgIGlmIChyZWdpc3Rlcl9jaXBoZXIoJnR3b2Zpc2hfZGVzYykgPT0gLTEpIHsKKyAgICAgIHByaW50ZigiRXJyb3IgcmVnaXN0ZXJpbmcgY2lwaGVyLlxuIik7CisgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIC8qIHNvbWVob3cgZmlsbCBvdXQga2V5IGFuZCBJViAqLworCisgICAvKiBzdGFydCB1cCBDVFIgbW9kZSAqLworICAgaWYgKChlcnIgPSBjdHJfc3RhcnQoCisgICAgICAgIGZpbmRfY2lwaGVyKCJ0d29maXNoIiksIC8qIGluZGV4IG9mIGRlc2lyZWQgY2lwaGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVYsIC8qIHRoZSBpbml0aWFsIHZlY3RvciAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LCAvKiB0aGUgc2VjcmV0IGtleSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCAvKiBsZW5ndGggb2Ygc2VjcmV0IGtleSAoMTYgYnl0ZXMpICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIDAgPT0gZGVmYXVsdCAjIG9mIHJvdW5kcyAqLworICAgICBDVFJfQ09VTlRFUl9MSVRUTEVfRU5ESUFOLCAvKiBMaXR0bGUgZW5kaWFuIGNvdW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAmY3RyKSAgLyogd2hlcmUgdG8gc3RvcmUgdGhlIENUUiBzdGF0ZSAqLworICAgICAgKSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJjdHJfc3RhcnQgZXJyb3I6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIC8qIHNvbWVob3cgZmlsbCBidWZmZXIgdGhhbiBlbmNyeXB0IGl0ICovCisgICBpZiAoKGVyciA9IGN0cl9lbmNyeXB0KCAgICAgICAgYnVmZmVyLCAvKiBwbGFpbnRleHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsIC8qIGNpcGhlcnRleHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJ1ZmZlciksIC8qIGxlbmd0aCBvZiBwbGFpbnRleHQgcHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0cikgIC8qIENUUiBzdGF0ZSAqLworICAgICAgKSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJjdHJfZW5jcnlwdCBlcnJvcjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKworICAgLyogbWFrZSB1c2Ugb2YgY2lwaGVydGV4dC4uLiAqLworCisgICAvKiBub3cgd2Ugd2FudCB0byBkZWNyeXB0IHNvIGxldCdzIHVzZSBjdHJfc2V0aXYgKi8KKyAgIGlmICgoZXJyID0gY3RyX3NldGl2KCAgSVYsIC8qIHRoZSBpbml0aWFsIElWIHdlIGdhdmUgdG8gY3RyX3N0YXJ0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCAvKiB0aGUgSVYgaXMgMTYgYnl0ZXMgbG9uZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgJmN0cikgLyogdGhlIGN0ciBzdGF0ZSB3ZSB3aXNoIHRvIG1vZGlmeSAqLworICAgICAgICkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHByaW50ZigiY3RyX3NldGl2IGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgcmV0dXJuIC0xOworICAgfQorCisgICBpZiAoKGVyciA9IGN0cl9kZWNyeXB0KCAgICAgICAgYnVmZmVyLCAvKiBjaXBoZXJ0ZXh0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCAvKiBwbGFpbnRleHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGJ1ZmZlciksIC8qIGxlbmd0aCBvZiBwbGFpbnRleHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN0cikgIC8qIENUUiBzdGF0ZSAqLworICAgICAgKSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJjdHJfZGVjcnlwdCBlcnJvcjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKworICAgLyogdGVybWluYXRlIHRoZSBzdHJlYW0gKi8KKyAgIGlmICgoZXJyID0gY3RyX2RvbmUoJmN0cikpICE9IENSWVBUX09LKSB7CisgICAgICBwcmludGYoImN0cl9kb25lIGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgcmV0dXJuIC0xOworICAgfQorCisgICAvKiBjbGVhciB1cCBhbmQgcmV0dXJuICovCisgICB6ZXJvbWVtKGtleSwgc2l6ZW9mKGtleSkpOworICAgemVyb21lbSgmY3RyLCBzaXplb2YoY3RyKSk7CisKKyAgIHJldHVybiAwOworfQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CisKK1xzdWJzZWN0aW9ue0xSVyBNb2RlfQorTFJXIG1vZGUgaXMgYSBjaXBoZXIgbW9kZSB3aGljaCBpcyBtZWFudCBmb3IgaW5kZXhlZCBlbmNyeXB0aW9uIGxpa2UgdXNlZCB0byBoYW5kbGUgc3RvcmFnZSBtZWRpYS4gIEl0IGlzIG1lYW50IHRvIGhhdmUgZWZmaWNpZW50IHNlZWtpbmcgYW5kIG92ZXJjb21lIHRoZSAKK3NlY3VyaXR5IHByb2JsZW1zIG9mIEVDQiBtb2RlIHdoaWxlIG5vdCBpbmNyZWFzaW5nIHRoZSBzdG9yYWdlIHJlcXVpcmVtZW50cy4gIEl0IGlzIHVzZWQgbXVjaCBsaWtlIGFueSBvdGhlciBjaGFpbmluZyBtb2RlIGV4Y2VwdCB3aXRoIHR3byBrZXkgZGlmZmVyZW5jZXMuCisKK1RoZSBrZXkgaXMgc3BlY2lmaWVkIGFzIHR3byBzdHJpbmdzIHRoZSBmaXJzdCBrZXkgJEtfMSQgaXMgdGhlIChub3JtYWxseSBBRVMpIGtleSBhbmQgY2FuIGJlIGFueSBsZW5ndGggKHR5cGljYWxseSAxNiwgMjQgb3IgMzIgb2N0ZXRzIGxvbmcpLiAgVGhlIHNlY29uZCBrZXkgCiskS18yJCBpcyB0aGUgXHRleHRpdHt0d2Vha30ga2V5IGFuZCBpcyBhbHdheXMgMTYgb2N0ZXRzIGxvbmcuICBUaGUgdHdlYWsgdmFsdWUgaXMgXHRleHRiZntOT1R9IGEgbm9uY2Ugb3IgSVYgdmFsdWUgaXQgbXVzdCBiZSByYW5kb20gYW5kIHNlY3JldC4gIAorCitUbyBpbml0aWFsaXplIExSVyBtb2RlIHVzZToKKworXGluZGV4e2xyd1xfc3RhcnQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBscndfc3RhcnQoICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpJViwKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAga2V5bGVuLAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0d2VhaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbnVtX3JvdW5kcywgCisgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19MUlcgKmxydyk7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgTFJXIGNvbnRleHQgd2l0aCB0aGUgZ2l2ZW4gKDE2IG9jdGV0KSBcdGV4dGl0e0lWfSwgY2lwaGVyICRLXzEkIFx0ZXh0aXR7a2V5fSBvZiBsZW5ndGggXHRleHRpdHtrZXlsZW59IG9jdGV0cyBhbmQgdGhlICgxNiBvY3RldCkgJEtfMiQgXHRleHRpdHt0d2Vha30uICAKK1doaWxlIExSVyB3YXMgc3BlY2lmaWVkIHRvIGJlIHVzZWQgb25seSB3aXRoIEFFUywgTGliVG9tQ3J5cHQgd2lsbCBhbGxvdyBhbnkgMTI4LS1iaXQgYmxvY2sgY2lwaGVyIHRvIGJlIHNwZWNpZmllZCBhcyBpbmRleGVkIGJ5IFx0ZXh0aXR7Y2lwaGVyfS4gIFRoZQorbnVtYmVyIG9mIHJvdW5kcyBmb3IgdGhlIGJsb2NrIGNpcGhlciBcdGV4dGl0e251bVxfcm91bmRzfSBjYW4gYmUgMCB0byB1c2UgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHJvdW5kcyBmb3IgdGhlIGdpdmVuIGNpcGhlci4KKworVG8gcHJvY2VzcyBkYXRhIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworXGluZGV4e2xyd1xfZW5jcnlwdCgpfSBcaW5kZXh7bHJ3XF9kZWNyeXB0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgbHJ3X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsZW4sIAorICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19MUlcgKmxydyk7CisKK2ludCBscndfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX0xSVyAqbHJ3KTsKK1xlbmR7dmVyYmF0aW19CisKK1RoZXNlIHdpbGwgZW5jcnlwdCAob3IgZGVjcnlwdCkgdGhlIHBsYWludGV4dCB0byB0aGUgY2lwaGVydGV4dCBidWZmZXIgKG9yIHZpY2UgdmVyc2EpLiAgVGhlIGxlbmd0aCBpcyBzcGVjaWZpZWQgYnkgXHRleHRpdHtsZW59IGluIG9jdGV0cyBidXQgbXVzdCBiZSBhIG11bHRpcGxlCitvZiAxNi4gIFRoZSBMUlcgY29kZSB1c2VzIGEgZmFzdCB0d2VhayB1cGRhdGUgc3VjaCB0aGF0IGNvbnNlY3V0aXZlIGJsb2NrcyBhcmUgZW5jcnlwdGVkIGZhc3RlciB0aGFuIGlmIHJhbmRvbSBzZWVraW5nIHdoZXJlIHVzZWQuICAKKworVG8gbWFuaXB1bGF0ZSB0aGUgSVYgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorCitcaW5kZXh7bHJ3XF9nZXRpdigpfSBcaW5kZXh7bHJ3XF9zZXRpdigpfSAKK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBscndfZ2V0aXYodW5zaWduZWQgY2hhciAqSVYsIAorICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpsZW4sIAorICAgICAgICAgICAgICBzeW1tZXRyaWNfTFJXICpscncpOworCitpbnQgbHJ3X3NldGl2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX0xSVyAqbHJ3KTsKK1xlbmR7dmVyYmF0aW19CitUaGVzZSB3aWxsIGdldCBvciBzZXQgdGhlIDE2LS1vY3RldCBJVi4gIE5vdGUgdGhhdCBzZXR0aW5nIHRoZSBJViBpcyB0aGUgc2FtZSBhcyBcdGV4dGl0e3NlZWtpbmd9IGFuZCB1bmxpa2Ugb3RoZXIgbW9kZXMgaXMgbm90IGEgZnJlZSBvcGVyYXRpb24uICBJdCByZXF1aXJlcwordXBkYXRpbmcgdGhlIGVudGlyZSB0d2VhayB3aGljaCBpcyBzbG93ZXIgdGhhbiBzZXF1ZW50aWFsIHVzZS4gIEF2b2lkIHNlZWtpbmcgZXhjZXNzaXZlbHkgaW4gcGVyZm9ybWFuY2UgY29uc3RyYWluZWQgY29kZS4KKworVG8gdGVybWluYXRlIHRoZSBMUlcgc3RhdGUgdXNlIHRoZSBmb2xsb3dpbmc6CisKK1xpbmRleHtscndcX2RvbmUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBscndfZG9uZShzeW1tZXRyaWNfTFJXICpscncpOworXGVuZHt2ZXJiYXRpbX0KKworXHN1YnNlY3Rpb257RjggTW9kZX0KK1xpbmRleHtGOCBNb2RlfQorVGhlIEY4IENoYWluaW5nIG1vZGUgKHNlZSBSRkMgMzcxMSBmb3IgaW5zdGFuY2UpIGlzIHlldCBhbm90aGVyIGNoYWluaW5nIG1vZGUgZm9yIGJsb2NrIGNpcGhlcnMuICBJdCBiZWhhdmVzIG11Y2ggbGlrZSBDVFIgbW9kZSBpbiB0aGF0IGl0IFhPUnMgYSBrZXlzdHJlYW0KK2FnYWluc3QgdGhlIHBsYWludGV4dCB0byBlbmNyeXB0LiAgRjggbW9kZSBjb21lcyB3aXRoIHRoZSBhZGRpdGlvbmFsIHR3aXN0IHRoYXQgdGhlIGNvdW50ZXIgdmFsdWUgaXMgc2VjcmV0LCBlbmNyeXB0ZWQgYnkgYSBcdGV4dGl0e3NhbHQga2V5fS4gIFdlCitpbml0aWFsaXplIEY4IG1vZGUgd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNhbGw6CisKK1xpbmRleHtmOFxfc3RhcnQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBmOF9zdGFydCggICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsIAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBrZXlsZW4sIAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHRfa2V5LCAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHNrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbnVtX3JvdW5kcywgICAKKyAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX0Y4ICpmOCk7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB3aWxsIHN0YXJ0IHRoZSBGOCBtb2RlIHN0YXRlIHVzaW5nIFx0ZXh0aXR7a2V5fSBhcyB0aGUgc2VjcmV0IGtleSwgXHRleHRpdHtJVn0gYXMgdGhlIGNvdW50ZXIuICBJdCB1c2VzIHRoZSBcdGV4dGl0e3NhbHRcX2tleX0gYXMgSVYgZW5jcnlwdGlvbiBrZXkgCisoXHRleHRpdHttfSBpbiB0aGUgUkZDIDM3MTEpLiAgVGhlIHNhbHRcX2tleSBjYW4gYmUgc2hvcnRlciB0aGFuIHRoZSBzZWNyZXQga2V5IGJ1dCBpdCBzaG91bGQgbm90IGJlIGxvbmdlci4gIAorCitUbyBlbmNyeXB0IG9yIGRlY3J5cHQgZGF0YSB3ZSB1c2UgdGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zOgorCitcaW5kZXh7ZjhcX2VuY3J5cHQoKX0gXGluZGV4e2Y4XF9kZWNyeXB0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsZW4sIAorICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19GOCAqZjgpOworCitpbnQgZjhfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsZW4sIAorICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19GOCAqZjgpOworXGVuZHt2ZXJiYXRpbX0KK1RoZXNlIHdpbGwgZW5jcnlwdCBvciBkZWNyeXB0IGEgdmFyaWFibGUgbGVuZ3RoIGFycmF5IG9mIGJ5dGVzIHVzaW5nIHRoZSBGOCBtb2RlIHN0YXRlIHNwZWNpZmllZC4gIFRoZSBsZW5ndGggaXMgc3BlY2lmaWVkIGluIGJ5dGVzIGFuZCBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgbXVsdGlwbGUgCitvZiB0aGUgY2lwaGVycyBibG9jayBzaXplLgorCitUbyBjaGFuZ2Ugb3IgcmV0cmlldmUgdGhlIGN1cnJlbnQgY291bnRlciBJViB2YWx1ZSB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CitcaW5kZXh7ZjhcX2dldGl2KCl9IFxpbmRleHtmOFxfc2V0aXYoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBmOF9nZXRpdih1bnNpZ25lZCBjaGFyICpJViwgCisgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqbGVuLCAKKyAgICAgICAgICAgICAgc3ltbWV0cmljX0Y4ICpmOCk7CisKK2ludCBmOF9zZXRpdihjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX0Y4ICpmOCk7CitcZW5ke3ZlcmJhdGltfQorVGhlc2Ugd29yayB3aXRoIHRoZSBjdXJyZW50IElWIHZhbHVlIG9ubHkgYW5kIG5vdCB0aGUgZW5jcnlwdGVkIElWIHZhbHVlIHNwZWNpZmllZCBkdXJpbmcgdGhlIGNhbGwgdG8gZjhcX3N0YXJ0KCkuICBUaGUgcHVycG9zZSBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIGlzIHRvIGJlCithYmxlIHRvIHNlZWsgd2l0aGluIGEgY3VycmVudCBzZXNzaW9uIG9ubHkuICBJZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIHNlc3Npb24gSVYgeW91IHdpbGwgaGF2ZSB0byBjYWxsIGY4XF9kb25lKCkgYW5kIHRoZW4gc3RhcnQgYSBuZXcgc3RhdGUgd2l0aAorZjhcX3N0YXJ0KCkuCisKK1RvIHRlcm1pbmF0ZSBhbiBGOCBzdGF0ZSBjYWxsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CisKK1xpbmRleHtmOFxfZG9uZSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGY4X2RvbmUoc3ltbWV0cmljX0Y4ICpmOCk7CitcZW5ke3ZlcmJhdGltfQorCitcdmZpbAorXG15c2VjdGlvbntFbmNyeXB0IGFuZCBBdXRoZW50aWNhdGUgTW9kZXN9CisKK1xzdWJzZWN0aW9ue0VBWCBNb2RlfQorTGliVG9tQ3J5cHQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgYSBtb2RlIGNhbGxlZCBFQVhcZm9vdG5vdGV7U2VlIAorTS4gQmVsbGFyZSwgUC4gUm9nYXdheSwgRC4gV2FnbmVyLCBBIENvbnZlbnRpb25hbCBBdXRoZW50aWNhdGVkLUVuY3J5cHRpb24gTW9kZS59IGluIGEgbWFubmVyIHNpbWlsYXIgdG8gdGhlIHdheSBpdCB3YXMgaW50ZW5kZWQgdG8gYmUgdXNlZCAKK2J5IHRoZSBkZXNpZ25lcnMuICBGaXJzdCwgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB3aGF0IEVBWCBtb2RlIGlzIGJlZm9yZSB3ZSBleHBsYWluIGhvdyB0byB1c2UgaXQuICBFQVggaXMgYSBtb2RlIHRoYXQgcmVxdWlyZXMgYSBjaXBoZXIsIAorQ1RSIGFuZCBPTUFDIHN1cHBvcnQgYW5kIHByb3ZpZGVzIGVuY3J5cHRpb24gYW5kIAorYXV0aGVudGljYXRpb25cZm9vdG5vdGV7Tm90ZSB0aGF0IHNpbmNlIEVBWCBvbmx5IHJlcXVpcmVzIE9NQUMgYW5kIENUUiB5b3UgbWF5IHVzZSBcdGV4dGl0e2VuY3J5cHQgb25seX0gY2lwaGVyIGRlc2NyaXB0b3JzIHdpdGggdGhpcyBtb2RlLn0uICAKK0l0IGlzIGluaXRpYWxpemVkIHdpdGggYSByYW5kb20gXHRleHRpdHtub25jZX0gdGhhdCBjYW4gYmUgc2hhcmVkIHB1YmxpY2x5LCBhIFx0ZXh0aXR7aGVhZGVyfSB3aGljaCBjYW4gYmUgZml4ZWQgYW5kIHB1YmxpYywgYW5kIGEgcmFuZG9tIHNlY3JldCBzeW1tZXRyaWMga2V5LgorCitUaGUgXHRleHRpdHtoZWFkZXJ9IGRhdGEgaXMgbWVhbnQgdG8gYmUgbWV0YS0tZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBzdHJlYW0gdGhhdCBpc24ndCBwcml2YXRlIChlLmcuLCBwcm90b2NvbCBtZXNzYWdlcykuICBJdCBjYW4KK2JlIGFkZGVkIGF0IGFueXRpbWUgZHVyaW5nIGFuIEVBWCBzdHJlYW0sIGFuZCBpcyBwYXJ0IG9mIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcuICBUaGF0IGlzLCBjaGFuZ2VzIGluIHRoZSBtZXRhLWRhdGEgY2FuIGJlIGRldGVjdGVkIGJ5IGNoYW5nZXMgaW4gdGhlIG91dHB1dCB0YWcuCisKK1RoZSBtb2RlIGNhbiB0aGVuIHByb2Nlc3MgcGxhaW50ZXh0IHByb2R1Y2luZyBjaXBoZXJ0ZXh0IGFzIHdlbGwgYXMgY29tcHV0ZSBhIHBhcnRpYWwgY2hlY2tzdW0uICBUaGUgYWN0dWFsIGNoZWNrc3VtCitjYWxsZWQgYSBcdGV4dGl0e3RhZ30gaXMgb25seSBlbWl0dGVkIHdoZW4gdGhlIG1lc3NhZ2UgaXMgZmluaXNoZWQuICBJbiB0aGUgaW50ZXJpbSwgdGhlIHVzZXIgY2FuIHByb2Nlc3MgYW55IGFyYml0cmFyeQorc2l6ZWQgbWVzc2FnZSBibG9jayB0byBzZW5kIHRvIHRoZSByZWNpcGllbnQgYXMgY2lwaGVydGV4dC4gIFRoaXMgbWFrZXMgdGhlIEVBWCBtb2RlIGVzcGVjaWFsbHkgc3VpdGVkIGZvciBzdHJlYW1pbmcgbW9kZXMKK29mIG9wZXJhdGlvbi4KKworVGhlIG1vZGUgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgorXGluZGV4e2VheFxfaW5pdCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGVheF9pbml0KCAgICAgICAgICBlYXhfc3RhdGUgKmVheCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLCAKKyAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGtleWxlbiwKKyAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbm9uY2VsZW4sCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGVhZGVyLCAKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBoZWFkZXJsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworV2hlcmUgXHRleHRpdHtlYXh9IGlzIHRoZSBFQVggc3RhdGUuICBUaGUgXHRleHRpdHtjaXBoZXJ9IHBhcmFtZXRlciBpcyB0aGUgaW5kZXggb2YgdGhlIGRlc2lyZWQgY2lwaGVyIGluIHRoZSBkZXNjcmlwdG9yIHRhYmxlLiAgCitUaGUgXHRleHRpdHtrZXl9IHBhcmFtZXRlciBpcyB0aGUgc2hhcmVkIHNlY3JldCBzeW1tZXRyaWMga2V5IG9mIGxlbmd0aCBcdGV4dGl0e2tleWxlbn0gb2N0ZXRzLiAgVGhlIFx0ZXh0aXR7bm9uY2V9IHBhcmFtZXRlciBpcyB0aGUgCityYW5kb20gcHVibGljIHN0cmluZyBvZiBsZW5ndGggXHRleHRpdHtub25jZWxlbn0gb2N0ZXRzLiAgVGhlIFx0ZXh0aXR7aGVhZGVyfSBwYXJhbWV0ZXIgaXMgdGhlIHJhbmRvbSAob3IgZml4ZWQgb3IgXHRleHRiZntOVUxMfSkgaGVhZGVyIGZvciB0aGUgCittZXNzYWdlIG9mIGxlbmd0aCBcdGV4dGl0e2hlYWRlcmxlbn0gb2N0ZXRzLgorCitXaGVuIHRoaXMgZnVuY3Rpb24gY29tcGxldGVzLCB0aGUgXHRleHRpdHtlYXh9IHN0YXRlIHdpbGwgYmUgaW5pdGlhbGl6ZWQgc3VjaCB0aGF0IHlvdSBjYW4gbm93IGVpdGhlciBoYXZlIGRhdGEgZGVjcnlwdGVkIG9yIAorZW5jcnlwdGVkIGluIEVBWCBtb2RlLiAgTm90ZTogaWYgXHRleHRpdHtoZWFkZXJsZW59IGlzIHplcm8geW91IG1heSBwYXNzIFx0ZXh0aXR7aGVhZGVyfSBhcyBcdGV4dGJme05VTEx9IHRvIGluZGljYXRlIHRoZXJlIGlzIG5vIGluaXRpYWwgaGVhZGVyIGRhdGEuCisKK1RvIGVuY3J5cHQgb3IgZGVjcnlwdCBkYXRhIGluIGEgc3RyZWFtaW5nIG1vZGUgdXNlIHRoZSBmb2xsb3dpbmcuCitcaW5kZXh7ZWF4XF9lbmNyeXB0KCl9IFxpbmRleHtlYXhcX2RlY3J5cHQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBlYXhfZW5jcnlwdCggICAgICAgICAgZWF4X3N0YXRlICplYXgsIAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGVuZ3RoKTsKKworaW50IGVheF9kZWNyeXB0KCAgICAgICAgICBlYXhfc3RhdGUgKmVheCwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBsZW5ndGgpOworXGVuZHt2ZXJiYXRpbX0KK1RoZSBmdW5jdGlvbiBcdGV4dGl0e2VheFxfZW5jcnlwdH0gd2lsbCBlbmNyeXB0IHRoZSBieXRlcyBpbiBcdGV4dGl0e3B0fSBvZiBcdGV4dGl0e2xlbmd0aH0gb2N0ZXRzLCBhbmQgc3RvcmUgdGhlIGNpcGhlcnRleHQgaW4KK1x0ZXh0aXR7Y3R9LiAgTm90ZTogXHRleHRpdHtjdH0gYW5kIFx0ZXh0aXR7cHR9IG1heSBiZSB0aGUgc2FtZSByZWdpb24gaW4gbWVtb3J5LiAgIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIHNlbmQgdGhlIGNpcGhlcnRleHQKK3Rocm91Z2ggdGhlIE9NQUMgZnVuY3Rpb24uICBUaGUgZnVuY3Rpb24gXHRleHRpdHtlYXhcX2RlY3J5cHR9IGRlY3J5cHRzIFx0ZXh0aXR7Y3R9LCBhbmQgc3RvcmVzIGl0IGluIFx0ZXh0aXR7cHR9LiAgVGhpcyBhbHNvIGFsbG93cyAKK1x0ZXh0aXR7cHR9IGFuZCBcdGV4dGl0e2N0fSB0byBiZSB0aGUgc2FtZSByZWdpb24gaW4gbWVtb3J5LiAgCisKK1lvdSBjYW5ub3QgYm90aCBlbmNyeXB0IG9yIGRlY3J5cHQgd2l0aCB0aGUgc2FtZSBcdGV4dGl0e2VheH0gY29udGV4dC4gIEZvciBiaS0tZGlyZWN0aW9uYWwgY29tbXVuaWNhdGlvbiB5b3Ugd2lsbCBuZWVkIHRvIGluaXRpYWxpemUgCit0d28gRUFYIGNvbnRleHRzIChwcmVmZXJhYmx5IHdpdGggZGlmZmVyZW50IGhlYWRlcnMgYW5kIG5vbmNlcykuICAKKworTm90ZTogYm90aCBvZiB0aGVzZSBmdW5jdGlvbnMgYWxsb3cgeW91IHRvIHNlbmQgdGhlIGRhdGEgaW4gYW55IGdyYW51bGFyaXR5IGJ1dCB0aGUgb3JkZXIgaXMgaW1wb3J0YW50LiAgV2hpbGUKK3RoZSBlYXhcX2luaXQoKSBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIGFkZCBpbml0aWFsIGhlYWRlciBkYXRhIHRvIHRoZSBzdHJlYW0geW91IGNhbiBhbHNvIGFkZCBoZWFkZXIgZGF0YSBkdXJpbmcgdGhlCitFQVggc3RyZWFtIHdpdGggdGhlIGZvbGxvd2luZy4KKworXGluZGV4e2VheFxfYWRkaGVhZGVyKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZWF4X2FkZGhlYWRlciggICAgICAgICAgZWF4X3N0YXRlICplYXgsIAorICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGVhZGVyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxlbmd0aCk7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB3aWxsIGFkZCB0aGUgXHRleHRpdHtsZW5ndGh9IG9jdGV0IGZyb20gXHRleHRpdHtoZWFkZXJ9IHRvIHRoZSBnaXZlbiBcdGV4dGl0e2VheH0gaGVhZGVyLiAgT25jZSB0aGUgbWVzc2FnZSBpcyBmaW5pc2hlZCwgdGhlIAorXHRleHRpdHt0YWd9IChjaGVja3N1bSkgbWF5IGJlIGNvbXB1dGVkIHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworXGluZGV4e2VheFxfZG9uZSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGVheF9kb25lKCAgICBlYXhfc3RhdGUgKmVheCwgCisgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCAKKyAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICp0YWdsZW4pOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgd2lsbCB0ZXJtaW5hdGUgdGhlIEVBWCBzdGF0ZSBcdGV4dGl0e2VheH0sIGFuZCBzdG9yZSB1cCB0byBcdGV4dGl0e3RhZ2xlbn0gYnl0ZXMgb2YgdGhlIG1lc3NhZ2UgdGFnIGluIFx0ZXh0aXR7dGFnfS4gIFRoZSBmdW5jdGlvbgordGhlbiBzdG9yZXMgaG93IG1hbnkgYnl0ZXMgb2YgdGhlIHRhZyB3ZXJlIHdyaXR0ZW4gb3V0IGJhY2sgaW4gdG8gXHRleHRpdHt0YWdsZW59LgorCitUaGUgRUFYIG1vZGUgY29kZSBjYW4gYmUgdGVzdGVkIHRvIGVuc3VyZSBpdCBtYXRjaGVzIHRoZSB0ZXN0IHZlY3RvcnMgYnkgY2FsbGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgorXGluZGV4e2VheFxfdGVzdCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGVheF90ZXN0KHZvaWQpOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgcmVxdWlyZXMgdGhhdCB0aGUgQUVTIChvciBSaWpuZGFlbCkgYmxvY2sgY2lwaGVyIGJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY2lwaGVyXF9kZXNjcmlwdG9yIHRhYmxlIGZpcnN0LgorCitcYmVnaW57dmVyYmF0aW19CisjaW5jbHVkZSA8dG9tY3J5cHQuaD4KK2ludCBtYWluKHZvaWQpCit7CisgICBpbnQgICAgICAgICAgIGVycjsKKyAgIGVheF9zdGF0ZSAgICAgZWF4OworICAgdW5zaWduZWQgY2hhciBwdFs2NF0sIGN0WzY0XSwgbm9uY2VbMTZdLCBrZXlbMTZdLCB0YWdbMTZdOworICAgdW5zaWduZWQgbG9uZyB0YWdsZW47CisKKyAgIGlmIChyZWdpc3Rlcl9jaXBoZXIoJnJpam5kYWVsX2Rlc2MpID09IC0xKSB7CisgICAgICBwcmludGYoIkVycm9yIHJlZ2lzdGVyaW5nIFJpam5kYWVsIik7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgfQorCisgICAvKiAuLi4gbWFrZSB1cCByYW5kb20gbm9uY2UgYW5kIGtleSAuLi4gKi8KKworICAgLyogaW5pdGlhbGl6ZSBjb250ZXh0ICovCisgICBpZiAoKGVyciA9IGVheF9pbml0KCAgICAgICAgICAgICZlYXgsICAvKiBjb250ZXh0ICovCisgICAgICAgICAgICAgICAgZmluZF9jaXBoZXIoInJpam5kYWVsIiksICAvKiBjaXBoZXIgaWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25jZSwgIC8qIHRoZSBub25jZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE2LCAgLyogbm9uY2UgaXMgMTYgYnl0ZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0QXBwIiwgIC8qIGV4YW1wbGUgaGVhZGVyICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcpICAvKiBoZWFkZXIgbGVuZ3RoICovCisgICAgICAgKSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJFcnJvciBlYXhfaW5pdDogJXMiLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgfQorCisgICAvKiBub3cgZW5jcnlwdCBkYXRhLCBzYXkgaW4gYSBsb29wIG9yIHdoYXRldmVyICovCisgICBpZiAoKGVyciA9IGVheF9lbmNyeXB0KCAgICAgJmVheCwgLyogZWF4IGNvbnRleHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCAvKiBwbGFpbnRleHQgIChzb3VyY2UpICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdCwgLyogY2lwaGVydGV4dCAoZGVzdGluYXRpb24pICovCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihwdCkgLyogc2l6ZSBvZiBwbGFpbnRleHQgKi8KKyAgICAgICkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHByaW50ZigiRXJyb3IgZWF4X2VuY3J5cHQ6ICVzIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIH0KKworICAgLyogZmluaXNoIG1lc3NhZ2UgYW5kIGdldCBhdXRoZW50aWNhdGlvbiB0YWcgKi8KKyAgIHRhZ2xlbiA9IHNpemVvZih0YWcpOworICAgaWYgKChlcnIgPSBlYXhfZG9uZSggICAmZWF4LCAgICAgIC8qIGVheCBjb250ZXh0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcsICAgICAgLyogd2hlcmUgdG8gcHV0IHRhZyAqLworICAgICAgICAgICAgICAgICAgICAgICAmdGFnbGVuICAgICAgIC8qIGxlbmd0aCBvZiB0YWcgc3BhY2UgKi8KKyAgICAgICkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHByaW50ZigiRXJyb3IgZWF4X2RvbmU6ICVzIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIH0KKworICAgLyogbm93IHdlIGhhdmUgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBpbiAidGFnIiBhbmQgCisgICAgKiBpdCdzIHRhZ2xlbiBieXRlcyBsb25nICovCit9CitcZW5ke3ZlcmJhdGltfQorICAgICAgICAgICAgICAgICAgICAgICAKK1lvdSBjYW4gYWxzbyBwZXJmb3JtIGFuIGVudGlyZSBFQVggc3RhdGUgb24gYSBibG9jayBvZiBtZW1vcnkgaW4gYSBzaW5nbGUgZnVuY3Rpb24gY2FsbCB3aXRoIHRoZSAKK2ZvbGxvd2luZyBmdW5jdGlvbnMuCisKKworXGluZGV4e2VheFxfZW5jcnlwdFxfYXV0aGVudGljYXRlXF9tZW1vcnl9IFxpbmRleHtlYXhcX2RlY3J5cHRcX3ZlcmlmeVxfbWVtb3J5fQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGVheF9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkoCisgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHQsICAgICB1bnNpZ25lZCBsb25nIHB0bGVuLAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgICAgdW5zaWduZWQgbG9uZyAqdGFnbGVuKTsKKworaW50IGVheF9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkoCisgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3QsICAgICB1bnNpZ25lZCBsb25nIGN0bGVuLAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgICAgdW5zaWduZWQgbG9uZyB0YWdsZW4sCisgICAgICAgICAgaW50ICAgICAgICAgICAqcmVzKTsKK1xlbmR7dmVyYmF0aW19CisKK0JvdGggZXNzZW50aWFsbHkganVzdCBjYWxsIGVheFxfaW5pdCgpIGZvbGxvd2VkIGJ5IGVheFxfZW5jcnlwdCgpIChvciBlYXhcX2RlY3J5cHQoKSByZXNwZWN0aXZlbHkpIGFuZCBlYXhcX2RvbmUoKS4gIFRoZSBwYXJhbWV0ZXJzCitoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgd2l0aCB0aG9zZSByZXNwZWN0aXZlIGZ1bmN0aW9ucy4gIAorCitUaGUgb25seSBkaWZmZXJlbmNlIGlzIGVheFxfZGVjcnlwdFxfdmVyaWZ5XF9tZW1vcnkoKSBkb2VzIG5vdCBlbWl0IGEgdGFnLiAgSW5zdGVhZCB5b3UgcGFzcyBpdCBhIHRhZyBhcyBpbnB1dCBhbmQgaXQgY29tcGFyZXMgaXQgYWdhaW5zdAordGhlIHRhZyBpdCBjb21wdXRlZCB3aGlsZSBkZWNyeXB0aW5nIHRoZSBtZXNzYWdlLiAgSWYgdGhlIHRhZ3MgbWF0Y2ggdGhlbiBpdCBzdG9yZXMgYSAkMSQgaW4gXHRleHRpdHtyZXN9LCBvdGhlcndpc2UgaXQgc3RvcmVzIGEgJDAkLgorCitcc3Vic2VjdGlvbntPQ0IgTW9kZX0KK0xpYlRvbUNyeXB0IHByb3ZpZGVzIHN1cHBvcnQgZm9yIGEgbW9kZSBjYWxsZWQgT0NCXGZvb3Rub3Rle1NlZSAKK1AuIFJvZ2F3YXksIE0uIEJlbGxhcmUsIEouIEJsYWNrLCBULiBLcm92ZXR6LCBcdGV4dGl0e09DQjogQSBCbG9jayBDaXBoZXIgTW9kZSBvZiBPcGVyYXRpb24gZm9yIEVmZmljaWVudCBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb259Ln0KKy4gIE9DQiBpcyBhbiBlbmNyeXB0aW9uIHByb3RvY29sIHRoYXQgc2ltdWx0YW5lb3VzbHkgcHJvdmlkZXMgYXV0aGVudGljYXRpb24uICBJdCBpcyBzbGlnaHRseSBmYXN0ZXIgdG8gdXNlIHRoYW4gRUFYIG1vZGUKK2J1dCBpcyBsZXNzIGZsZXhpYmxlLiAgTGV0J3MgcmV2aWV3IGhvdyB0byBpbml0aWFsaXplIGFuIE9DQiBjb250ZXh0LgorCitcaW5kZXh7b2NiXF9pbml0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgb2NiX2luaXQoICAgICAgICAgIG9jYl9zdGF0ZSAqb2NiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsIAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAga2V5bGVuLCAKKyAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSk7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgXHRleHRpdHtvY2J9IGNvbnRleHQgdXNpbmcgY2lwaGVyIGRlc2NyaXB0b3IgXHRleHRpdHtjaXBoZXJ9LiAgSXQgd2lsbCB1c2UgYSBcdGV4dGl0e2tleX0gb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufQorYW5kIHRoZSByYW5kb20gXHRleHRpdHtub25jZX0uICBOb3RlIHRoYXQgXHRleHRpdHtub25jZX0gbXVzdCBiZSBhIHJhbmRvbSAocHVibGljKSBzdHJpbmcgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBibG9jayBjaXBoZXJzCitibG9jayBzaXplIChlLmcuIDE2IGJ5dGVzIGZvciBBRVMpLgorCitUaGlzIG1vZGUgaGFzIG5vIFx0ZXh0aXR7QXNzb2NpYXRlZCBEYXRhfSBsaWtlIEVBWCBtb2RlIGRvZXMgd2hpY2ggbWVhbnMgeW91IGNhbm5vdCBhdXRoZW50aWNhdGUgbWV0YWRhdGEgYWxvbmcgd2l0aCB0aGUgc3RyZWFtLgorVG8gZW5jcnlwdCBvciBkZWNyeXB0IGRhdGEgdXNlIHRoZSBmb2xsb3dpbmcuCisKK1xpbmRleHtvY2JcX2VuY3J5cHQoKX0gXGluZGV4e29jYlxfZGVjcnlwdCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IG9jYl9lbmNyeXB0KCAgICAgICAgICBvY2Jfc3RhdGUgKm9jYiwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0KTsKKworaW50IG9jYl9kZWNyeXB0KCAgICAgICAgICBvY2Jfc3RhdGUgKm9jYiwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0KTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBlbmNyeXB0IChvciBkZWNyeXB0IGZvciB0aGUgbGF0dGVyKSBhIGZpeGVkIGxlbmd0aCBvZiBkYXRhIGZyb20gXHRleHRpdHtwdH0gdG8gXHRleHRpdHtjdH0gKHZpY2UgdmVyc2EgZm9yIHRoZSBsYXR0ZXIpLiAgCitUaGV5IGFzc3VtZSB0aGF0IFx0ZXh0aXR7cHR9IGFuZCBcdGV4dGl0e2N0fSBhcmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgYmxvY2sgY2lwaGVyJ3MgYmxvY2sgc2l6ZS4gIE5vdGUgdGhhdCB5b3UgY2Fubm90IGNhbGwgCitib3RoIGZ1bmN0aW9ucyBnaXZlbiBhIHNpbmdsZSBcdGV4dGl0e29jYn0gc3RhdGUuICBGb3IgYmktZGlyZWN0aW9uYWwgY29tbXVuaWNhdGlvbiB5b3Ugd2lsbCBoYXZlIHRvIGluaXRpYWxpemUgdHdvIFx0ZXh0aXR7b2NifQorc3RhdGVzICh3aXRoIGRpZmZlcmVudCBub25jZXMpLiAgQWxzbyBcdGV4dGl0e3B0fSBhbmQgXHRleHRpdHtjdH0gbWF5IHBvaW50IHRvIHRoZSBzYW1lIGxvY2F0aW9uIGluIG1lbW9yeS4KKworXHN1YnN1YnNlY3Rpb257U3RhdGUgVGVybWluYXRpb259CisKK1doZW4geW91IGFyZSBmaW5pc2hlZCBlbmNyeXB0aW5nIHRoZSBtZXNzYWdlIHlvdSBjYWxsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgdGFnLgorCitcaW5kZXh7b2NiXF9kb25lXF9lbmNyeXB0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgb2NiX2RvbmVfZW5jcnlwdCggICAgICAgICAgb2NiX3N0YXRlICpvY2IsIAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgcHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqdGFnbGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCB0ZXJtaW5hdGUgYW4gZW5jcnlwdCBzdHJlYW0gXHRleHRpdHtvY2J9LiAgSWYgeW91IGhhdmUgdHJhaWxpbmcgYnl0ZXMgb2YgcGxhaW50ZXh0IHRoYXQgd2lsbCBub3QgY29tcGxldGUgYSBibG9jayAKK3lvdSBjYW4gcGFzcyB0aGVtIGhlcmUuICBUaGlzIHdpbGwgYWxzbyBlbmNyeXB0IHRoZSBcdGV4dGl0e3B0bGVufSBieXRlcyBpbiBcdGV4dGl0e3B0fSBhbmQgc3RvcmUgdGhlbSBpbiBcdGV4dGl0e2N0fS4gIEl0IHdpbGwgYWxzbworc3RvcmUgdXAgdG8gXHRleHRpdHt0YWdsZW59IGJ5dGVzIG9mIHRoZSB0YWcgaW50byBcdGV4dGl0e3RhZ30uCisKK05vdGUgdGhhdCBcdGV4dGl0e3B0bGVufSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgYmxvY2sgc2l6ZSBvZiBibG9jayBjaXBoZXIgY2hvc2VuLiAgQWxzbyBub3RlIHRoYXQgaWYgeW91IGhhdmUgCithbiBpbnB1dCBtZXNzYWdlIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgdGhlIGJsb2NrIHNpemUgdGhlbiB5b3UgcGFzcyB0aGUgZGF0YSBoZXJlIChub3QgdG8gb2NiXF9lbmNyeXB0KCkpIG9ubHkuICAKKworVG8gdGVybWluYXRlIGEgZGVjcnlwdCBzdHJlYW0gYW5kIGNvbXBhcmVkIHRoZSB0YWcgeW91IGNhbGwgdGhlIGZvbGxvd2luZy4KKworXGluZGV4e29jYlxfZG9uZVxfZGVjcnlwdCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IG9jYl9kb25lX2RlY3J5cHQoICAgICAgICAgIG9jYl9zdGF0ZSAqb2NiLCAKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBjdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICB0YWdsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcmVzKTsKK1xlbmR7dmVyYmF0aW19CitTaW1pbGFybHkgdG8gdGhlIHByZXZpb3VzIGZ1bmN0aW9uIHlvdSBjYW4gcGFzcyB0cmFpbGluZyBtZXNzYWdlIGJ5dGVzIGludG8gdGhpcyBmdW5jdGlvbi4gIFRoaXMgd2lsbCBjb21wdXRlIHRoZSAKK3RhZyBvZiB0aGUgbWVzc2FnZSAoaW50ZXJuYWxseSkgYW5kIHRoZW4gY29tcGFyZSBpdCBhZ2FpbnN0IHRoZSBcdGV4dGl0e3RhZ2xlbn0gYnl0ZXMgb2YgXHRleHRpdHt0YWd9IHByb3ZpZGVkLiAgQnkgZGVmYXVsdAorXHRleHRpdHtyZXN9IGlzIHNldCB0byB6ZXJvLiAgSWYgYWxsIFx0ZXh0aXR7dGFnbGVufSBieXRlcyBvZiBcdGV4dGl0e3RhZ30gY2FuIGJlIHZlcmlmaWVkIHRoZW4gXHRleHRpdHtyZXN9IGlzIHNldCB0byBvbmUgKGF1dGhlbnRpY2F0ZWQKK21lc3NhZ2UpLgorCitcc3Vic3Vic2VjdGlvbntQYWNrZXQgRnVuY3Rpb25zfQorVG8gbWFrZSBsaWZlIHNpbXBsZXIgdGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBmb3IgbWVtb3J5IGJvdW5kIE9DQi4KKworJVxpbmRleHtvY2JcX2VuY3J5cHRcX2F1dGhlbnRpY2F0ZVxfbWVtb3J5KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeSgKKyAgICAgICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgIAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAgICAgdW5zaWduZWQgbG9uZyBwdGxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsICAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgT0NCIGVuY3J5cHQgdGhlIG1lc3NhZ2UgXHRleHRpdHtwdH0gb2YgbGVuZ3RoIFx0ZXh0aXR7cHRsZW59LCBhbmQgc3RvcmUgdGhlIGNpcGhlcnRleHQgaW4gXHRleHRpdHtjdH0uICBUaGUgbGVuZ3RoIFx0ZXh0aXR7cHRsZW59CitjYW4gYmUgYW55IGFyYml0cmFyeSBsZW5ndGguICAKKworXGluZGV4e29jYlxfZGVjcnlwdFxfdmVyaWZ5XF9tZW1vcnkoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBvY2JfZGVjcnlwdF92ZXJpZnlfbWVtb3J5KAorICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCAgCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3QsICAgICB1bnNpZ25lZCBsb25nIGN0bGVuLAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhZywgICAgdW5zaWduZWQgbG9uZyB0YWdsZW4sCisgICAgICAgICAgaW50ICAgICAgICAgICAqcmVzKTsKK1xlbmR7dmVyYmF0aW19CisKK1NpbWlsYXJseSwgdGhpcyB3aWxsIE9DQiBkZWNyeXB0LCBhbmQgY29tcGFyZSB0aGUgaW50ZXJuYWxseSBjb21wdXRlZCB0YWcgYWdhaW5zdCB0aGUgdGFnIHByb3ZpZGVkLiBcdGV4dGl0e3Jlc30gaXMgc2V0IAorYXBwcm9wcmlhdGVseS4KKworXHN1YnNlY3Rpb257Q0NNIE1vZGV9CitDQ00gaXMgYSBOSVNUIHByb3Bvc2FsIGZvciBlbmNyeXB0ICsgYXV0aGVudGljYXRlIHRoYXQgaXMgY2VudGVyZWQgYXJvdW5kIHVzaW5nIEFFUyAob3IgYW55IDE2LS1ieXRlIGNpcGhlcikgYXMgYSBwcmltaXRpdmUuICBVbmxpa2UgRUFYIGFuZCBPQ0IgbW9kZSwKK2l0IGlzIG9ubHkgbWVhbnQgZm9yIFx0ZXh0aXR7cGFja2V0fSBtb2RlIHdoZXJlIHRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGlzIGtub3duIGluIGFkdmFuY2UuICBTaW5jZSBpdCBpcyBhIHBhY2tldCBtb2RlIGZ1bmN0aW9uLCBDQ00gb25seSBoYXMgb25lIAorZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyB0aGUgcHJvdG9jb2wuCisKK1xpbmRleHtjY21cX21lbW9yeSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGNjbV9tZW1vcnkoCisgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgc3ltbWV0cmljX2tleSAgICAgICAqdXNrZXksCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsICAgICB1bnNpZ25lZCBsb25nIHB0bGVuLAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgICAgdW5zaWduZWQgbG9uZyAqdGFnbGVuLAorICAgICAgICAgICAgICAgICAgICBpbnQgIGRpcmVjdGlvbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHBlcmZvcm1zIHRoZSBcdGV4dGl0e0NDTX0gb3BlcmF0aW9uIG9uIHRoZSBkYXRhLiAgVGhlIFx0ZXh0aXR7Y2lwaGVyfSB2YXJpYWJsZSBpbmRpY2F0ZXMgd2hpY2ggY2lwaGVyIGluIHRoZSBkZXNjcmlwdG9yIHRhYmxlIHRvIHVzZS4gIEl0IG11c3QgaGF2ZSBhIAorMTYtLWJ5dGUgYmxvY2sgc2l6ZSBmb3IgQ0NNLiAgCisKK1RoZSBrZXkgY2FuIGJlIHNwZWNpZmllZCBpbiBvbmUgb2YgdHdvIGZhc2hpb25zLiAgRmlyc3QsIGl0IGNhbiBiZSBwYXNzZWQgYXMgYW4gYXJyYXkgb2Ygb2N0ZXRzIGluIFx0ZXh0aXR7a2V5fSBvZiBsZW5ndGggXHRleHRpdHtrZXlsZW59LiAgQWx0ZXJuYXRpdmVseSwKK2l0IGNhbiBiZSBwYXNzZWQgaW4gYXMgYSBwcmV2aW91c2x5IHNjaGVkdWxlZCBrZXkgaW4gXHRleHRpdHt1c2tleX0uICBUaGUgbGF0dGVyIGZhc2hpb24gc2F2ZXMgdGltZSB3aGVuIHRoZSBzYW1lIGtleSBpcyB1c2VkIGZvciBtdWx0aXBsZSBwYWNrZXRzLiAgSWYKK1x0ZXh0aXR7dXNrZXl9IGlzIG5vdCBcdGV4dGJme05VTEx9LCB0aGVuIFx0ZXh0aXR7a2V5fSBtYXkgYmUgXHRleHRiZntOVUxMfSAoYW5kIHZpY2UtdmVyc2EpLiAKKworVGhlIG5vbmNlIG9yIHNhbHQgaXMgXHRleHRpdHtub25jZX0gb2YgbGVuZ3RoIFx0ZXh0aXR7bm9uY2VsZW59IG9jdGV0cy4gIFRoZSBoZWFkZXIgaXMgbWV0YS0tZGF0YSB5b3Ugd2FudCB0byBzZW5kIHdpdGggdGhlIG1lc3NhZ2UgYnV0IG5vdCBoYXZlIAorZW5jcnlwdGVkLCBpdCBpcyBzdG9yZWQgaW4gXHRleHRpdHtoZWFkZXJ9IG9mIGxlbmd0aCBcdGV4dGl0e2hlYWRlcmxlbn0gb2N0ZXRzLiAgVGhlIGhlYWRlciBjYW4gYmUgemVybyBvY3RldHMgbG9uZyAoaWYgJGhlYWRlcmxlbiA9IDAkIHRoZW4gCit5b3UgY2FuIHBhc3MgXHRleHRpdHtoZWFkZXJ9IGFzIFx0ZXh0YmZ7TlVMTH0pLiAgCisKK1RoZSBwbGFpbnRleHQgaXMgc3RvcmVkIGluIFx0ZXh0aXR7cHR9LCBhbmQgdGhlIGNpcGhlcnRleHQgaW4gXHRleHRpdHtjdH0uICBUaGUgbGVuZ3RoIG9mIGJvdGggYXJlIGV4cGVjdGVkIHRvIGJlIGVxdWFsIGFuZCBpcyBwYXNzZWQgaW4gYXMgXHRleHRpdHtwdGxlbn0uICBJdCBpcworYWxsb3dhYmxlIHRoYXQgJHB0ID0gY3QkLiAgVGhlIFx0ZXh0aXR7ZGlyZWN0aW9ufSB2YXJpYWJsZSBpbmRpY2F0ZXMgd2hldGhlciBlbmNyeXB0aW9uIChkaXJlY3Rpb24gJD0kIFx0ZXh0YmZ7Q0NNXF9FTkNSWVBUfSkgb3IgCitkZWNyeXB0aW9uIChkaXJlY3Rpb24gJD0kIFx0ZXh0YmZ7Q0NNXF9ERUNSWVBUfSkgaXMgdG8gYmUgcGVyZm9ybWVkLgorCitBcyBpbXBsZW1lbnRlZCwgdGhpcyB2ZXJzaW9uIG9mIENDTSBjYW5ub3QgaGFuZGxlIGhlYWRlciBvciBwbGFpbnRleHQgZGF0YSBsb25nZXIgdGhhbiAkMl57MzJ9IC0gMSQgb2N0ZXRzIGxvbmcuICAKKworWW91IGNhbiB0ZXN0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBDQ00gd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgorCitcaW5kZXh7Y2NtXF90ZXN0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgY2NtX3Rlc3Qodm9pZCk7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX09LfSBpZiB0aGUgQ0NNIHJvdXRpbmUgcGFzc2VzIGtub3duIHRlc3QgdmVjdG9ycy4gIEl0IHJlcXVpcmVzIEFFUyBvciBSaWpuZGFlbCB0byBiZSByZWdpc3RlcmVkIHByZXZpb3VzbHksIG90aGVyd2lzZSBpdCB3aWxsCityZXR1cm4gXHRleHRiZntDUllQVFxfTk9QfS4KKworXHN1YnN1YnNlY3Rpb257Q0NNIEV4YW1wbGV9CitUaGUgZm9sbG93aW5nIGlzIGEgc2FtcGxlIG9mIGhvdyB0byBjYWxsIENDTS4KKworXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CitpbnQgbWFpbih2b2lkKQoreworICAgdW5zaWduZWQgY2hhciBrZXlbMTZdLCBub25jZVsxMl0sIHB0WzMyXSwgY3RbMzJdLCAKKyAgICAgICAgICAgICAgICAgdGFnWzE2XSwgdGFnY3BbMTZdOworICAgdW5zaWduZWQgbG9uZyB0YWdsZW47CisgICBpbnQgICAgICAgICAgIGVycjsKKworICAgLyogcmVnaXN0ZXIgY2lwaGVyICovCisgICByZWdpc3Rlcl9jaXBoZXIoJmFlc19kZXNjKTsKKworICAgLyogc29tZWhvdyBmaWxsIGtleSwgbm9uY2UsIHB0ICovCisgCisgICAvKiBlbmNyeXB0IGl0ICovCisgICB0YWdsZW4gPSBzaXplb2YodGFnKTsKKyAgIGlmICgoZXJyID0gCisgICAgICAgY2NtX21lbW9yeShmaW5kX2NpcGhlcigiYWVzIiksCisgICAgICAgICAgICAgICAgICBrZXksIDE2LCAgICAvKiAxMjgtYml0IGtleSAqLworICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgLyogbm90IHByZXNjaGVkdWxlZCAqLworICAgICAgICAgICAgICAgICAgbm9uY2UsIDEyLCAgLyogOTYtYml0IG5vbmNlICovCisgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAgICAvKiBubyBoZWFkZXIgKi8KKyAgICAgICAgICAgICAgICAgIHB0LCAzMiwgICAgIC8qIDMyLWJ5dGUgcGxhaW50ZXh0ICovCisgICAgICAgICAgICAgICAgICBjdCwgICAgICAgICAvKiBjaXBoZXJ0ZXh0ICovCisgICAgICAgICAgICAgICAgICB0YWcsICZ0YWdsZW4sCisgICAgICAgICAgICAgICAgICBDQ01fRU5DUllQVCkpICE9IENSWVBUX09LKSB7CisgICAgICAgcHJpbnRmKCJjY21fbWVtb3J5IGVycm9yICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgcmV0dXJuIC0xOworICAgfQorICAgLyogY3RbMC4uMzFdIGFuZCB0YWdbMC4uMTVdIG5vdyBob2xkIHRoZSBvdXRwdXQgKi8KKworICAgLyogZGVjcnlwdCBpdCAqLworICAgdGFnbGVuID0gc2l6ZW9mKHRhZ2NwKTsKKyAgIGlmICgoZXJyID0gCisgICAgICAgY2NtX21lbW9yeShmaW5kX2NpcGhlcigiYWVzIiksCisgICAgICAgICAgICAgICAgICBrZXksIDE2LCAgICAvKiAxMjgtYml0IGtleSAqLworICAgICAgICAgICAgICAgICAgTlVMTCwgICAgICAgLyogbm90IHByZXNjaGVkdWxlZCAqLworICAgICAgICAgICAgICAgICAgbm9uY2UsIDEyLCAgLyogOTYtYml0IG5vbmNlICovCisgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAgICAvKiBubyBoZWFkZXIgKi8KKyAgICAgICAgICAgICAgICAgIGN0LCAzMiwgICAgIC8qIDMyLWJ5dGUgY2lwaGVydGV4dCAqLworICAgICAgICAgICAgICAgICAgcHQsICAgICAgICAgLyogcGxhaW50ZXh0ICovCisgICAgICAgICAgICAgICAgICB0YWdjcCwgJnRhZ2xlbiwKKyAgICAgICAgICAgICAgICAgIENDTV9ERUNSWVBUKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBwcmludGYoImNjbV9tZW1vcnkgZXJyb3IgJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIC8qIG5vdyBwdFswLi4zMV0gc2hvdWxkIGhvbGQgdGhlIG9yaWdpbmFsIHBsYWludGV4dCwKKyAgICAgIHRhZ2NwWzAuLjE1XSBhbmQgdGFnWzAuLjE1XSBzaG91bGQgaGF2ZSB0aGUgc2FtZSBjb250ZW50cyAqLworfQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CisKK1xzdWJzZWN0aW9ue0dDTSBNb2RlfQorR2Fsb2lzIGNvdW50ZXIgbW9kZSBpcyBhbiBJRUVFIHByb3Bvc2FsIGZvciBhdXRoZW50aWNhdGVkIGVuY3J5cHRpb24gKGFsc28gaXQgaXMgYSBwbGFubmVkIE5JU1Qgc3RhbmRhcmQpLiAgTGlrZSBFQVggYW5kIE9DQiBtb2RlLCBpdCBjYW4gYmUgdXNlZCBpbiBhIHN0cmVhbWluZyBjYXBhY2l0eSAKK2hvd2V2ZXIsIHVubGlrZSBFQVggaXQgY2Fubm90IGFjY2VwdCBcdGV4dGl0e2FkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YX0gKG1ldGEtLWRhdGEpIGFmdGVyIHBsYWludGV4dCBoYXMgYmVlbiBwcm9jZXNzZWQuICBUaGlzIG1vZGUgYWxzbyBvbmx5IHdvcmtzIHdpdGggCitibG9jayBjaXBoZXJzIHdpdGggYSAxNi0tYnl0ZSBibG9jay4KKworQSBHQ00gc3RyZWFtIGlzIG1lYW50IHRvIGJlIHByb2Nlc3NlZCBpbiB0aHJlZSBtb2Rlcywgb25lIGFmdGVyIGFub3RoZXIuICBGaXJzdCwgdGhlIGluaXRpYWwgdmVjdG9yIChwZXIgc2Vzc2lvbikgZGF0YSBpcyBwcm9jZXNzZWQuICBUaGlzIHNob3VsZCBiZSAKK3VuaXF1ZSB0byBldmVyeSBzZXNzaW9uLiAgTmV4dCwgdGhlIHRoZSBvcHRpb25hbCBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEgaXMgcHJvY2Vzc2VkLCBhbmQgZmluYWxseSB0aGUgcGxhaW50ZXh0IChvciBjaXBoZXJ0ZXh0IGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uKS4gIAorCitcc3Vic3Vic2VjdGlvbntJbml0aWFsaXphdGlvbn0KK1RvIGluaXRpYWxpemUgdGhlIEdDTSBjb250ZXh0IHdpdGggYSBzZWNyZXQga2V5IGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4KKworXGluZGV4e2djbVxfaW5pdCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGdjbV9pbml0KCAgICAgICAgICBnY21fc3RhdGUgKmdjbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAga2V5bGVuKTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIGluaXRpYWxpemVzIHRoZSBHQ00gc3RhdGUgXHRleHRpdHtnY219IGZvciB0aGUgZ2l2ZW4gY2lwaGVyIGluZGV4ZWQgYnkgXHRleHRpdHtjaXBoZXJ9LCB3aXRoIGEgc2VjcmV0IGtleSBcdGV4dGl0e2tleX0gb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufSBvY3RldHMuICBUaGUgY2lwaGVyIAorY2hvc2VuIG11c3QgaGF2ZSBhIDE2LS1ieXRlIGJsb2NrIHNpemUgKGUuZy4sIEFFUykuICAKKworXHN1YnN1YnNlY3Rpb257SW5pdGlhbCBWZWN0b3J9CitBZnRlciB0aGUgc3RhdGUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQgKG9yIHJlc2V0KSB0aGUgbmV4dCBzdGVwIGlzIHRvIGFkZCB0aGUgc2Vzc2lvbiAob3IgcGFja2V0KSBpbml0aWFsIHZlY3Rvci4gIEl0IHNob3VsZCBiZSB1bmlxdWUgcGVyIHBhY2tldCBlbmNyeXB0ZWQuCisKK1xpbmRleHtnY21cX2FkZFxfaXYoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBnY21fYWRkX2l2KCAgICAgICAgICBnY21fc3RhdGUgKmdjbSwgCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgICAgIAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgSVZsZW4pOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgYWRkcyB0aGUgaW5pdGlhbCB2ZWN0b3Igb2N0ZXRzIGZyb20gXHRleHRpdHtJVn0gb2YgbGVuZ3RoIFx0ZXh0aXR7SVZsZW59IHRvIHRoZSBHQ00gc3RhdGUgXHRleHRpdHtnY219LiAgWW91IGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24gYXMgbWFueSB0aW1lcyBhcyByZXF1aXJlZAordG8gcHJvY2VzcyB0aGUgZW50aXJlIElWLiAgCisKK05vdGU6IHRoZSBHQ00gcHJvdG9jb2xzIHByb3ZpZGVzIGEgXHRleHRpdHtzaG9ydGN1dH0gZm9yIDEyLS1ieXRlIElWcyB3aGVyZSBubyBwcmUtcHJvY2Vzc2luZyBpcyB0byBiZSBkb25lLiAgSWYgeW91IHdhbnQgdG8gbWluaW1pemUgcGVyIHBhY2tldCBsYXRlbmN5IGl0IGlzIGlkZWFsCit0byBvbmx5IHVzZSAxMi0tYnl0ZSBJVnMuICBZb3UgY2FuIGp1c3QgaW5jcmVtZW50IGl0IGxpa2UgYSBjb3VudGVyIGZvciBlYWNoIHBhY2tldC4KKworXHN1YnN1YnNlY3Rpb257QWRkaXRpb25hbCBBdXRoZW50aWNhdGlvbiBEYXRhfQorQWZ0ZXIgdGhlIGVudGlyZSBJViBoYXMgYmVlbiBwcm9jZXNzZWQsIHRoZSBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEgY2FuIGJlIHByb2Nlc3NlZC4gIFVubGlrZSB0aGUgSVYsIGEgcGFja2V0L3Nlc3Npb24gZG9lcyBub3QgcmVxdWlyZSBhZGRpdGlvbmFsCithdXRoZW50aWNhdGlvbiBkYXRhIChBQUQpIGZvciBzZWN1cml0eS4gIFRoZSBBQUQgaXMgbWVhbnQgdG8gYmUgdXNlZCBhcyBzaWRlLS1jaGFubmVsIGRhdGEgeW91IHdhbnQgdG8gYmUgYXV0aGVudGljYXRlZCB3aXRoIHRoZSBwYWNrZXQuICBOb3RlOiAgb25jZQoreW91IGJlZ2luIGFkZGluZyBBQUQgdG8gdGhlIEdDTSBzdGF0ZSB5b3UgY2Fubm90IHJldHVybiB0byBhZGRpbmcgSVYgZGF0YSB1bnRpbCB0aGUgc3RhdGUgaGFzIGJlZW4gcmVzZXQuCisKK1xpbmRleHtnY21cX2FkZFxfYWFkKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZ2NtX2FkZF9hYWQoICAgICAgICAgIGdjbV9zdGF0ZSAqZ2NtLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgYWRhdGFsZW4pOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgYWRkcyB0aGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhIFx0ZXh0aXR7YWRhdGF9IG9mIGxlbmd0aCBcdGV4dGl0e2FkYXRhbGVufSB0byB0aGUgR0NNIHN0YXRlIFx0ZXh0aXR7Z2NtfS4KKworXHN1YnN1YnNlY3Rpb257UGxhaW50ZXh0IFByb2Nlc3Npbmd9CitBZnRlciB0aGUgQUFEIGhhcyBiZWVuIHByb2Nlc3NlZCwgdGhlIHBsYWludGV4dCAob3IgY2lwaGVydGV4dCBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbikgY2FuIGJlIHByb2Nlc3NlZC4gIAorCitcaW5kZXh7Z2NtXF9wcm9jZXNzKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZ2NtX3Byb2Nlc3MoICAgIGdjbV9zdGF0ZSAqZ2NtLAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBwdGxlbiwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBkaXJlY3Rpb24pOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgcHJvY2Vzc2VzIG1lc3NhZ2UgZGF0YSB3aGVyZSBcdGV4dGl0e3B0fSBpcyB0aGUgcGxhaW50ZXh0IGFuZCBcdGV4dGl0e2N0fSBpcyB0aGUgY2lwaGVydGV4dC4gIFRoZSBsZW5ndGggb2YgYm90aCBhcmUgZXF1YWwgYW5kIHN0b3JlZCBpbiBcdGV4dGl0e3B0bGVufS4gIERlcGVuZGluZyBvbiAKK3RoZSBtb2RlIFx0ZXh0aXR7cHR9IGlzIHRoZSBpbnB1dCBhbmQgXHRleHRpdHtjdH0gaXMgdGhlIG91dHB1dCAob3IgdmljZSB2ZXJzYSkuICBXaGVuIFx0ZXh0aXR7ZGlyZWN0aW9ufSBlcXVhbHMgXHRleHRiZntHQ01cX0VOQ1JZUFR9IHRoZSBwbGFpbnRleHQgaXMgcmVhZCwgCitlbmNyeXB0ZWQgYW5kIHN0b3JlZCBpbiB0aGUgY2lwaGVydGV4dCBidWZmZXIuICBXaGVuIFx0ZXh0aXR7ZGlyZWN0aW9ufSBlcXVhbHMgXHRleHRiZntHQ01cX0RFQ1JZUFR9IHRoZSBvcHBvc2l0ZSBvY2N1cnMuCisKK1xzdWJzdWJzZWN0aW9ue1N0YXRlIFRlcm1pbmF0aW9ufQorVG8gdGVybWluYXRlIGEgR0NNIHN0YXRlIGFuZCByZXRyaWV2ZSB0aGUgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiB0YWcgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgorCitcaW5kZXh7Z2NtXF9kb25lKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZ2NtX2RvbmUoICAgIGdjbV9zdGF0ZSAqZ2NtLCAKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsIAorICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbik7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB0ZXJtaW5hdGVzIHRoZSBHQ00gc3RhdGUgXHRleHRpdHtnY219IGFuZCBzdG9yZXMgdGhlIHRhZyBpbiBcdGV4dGl0e3RhZ30gb2YgbGVuZ3RoIFx0ZXh0aXR7dGFnbGVufSBvY3RldHMuCisKK1xzdWJzdWJzZWN0aW9ue1N0YXRlIFJlc2V0fQorVGhlIGNhbGwgdG8gZ2NtXF9pbml0KCkgd2lsbCBwZXJmb3JtIGNvbnNpZGVyYWJsZSBwcmUtLWNvbXB1dGF0aW9uICh3aGVuIFx0ZXh0YmZ7R0NNXF9UQUJMRVN9IGlzIGRlZmluZWQpIGFuZCBpZiB5b3UncmUgZ29pbmcgdG8gYmUgZGVhbGluZyB3aXRoIGEgbG90IG9mIHBhY2tldHMKK2l0IGlzIHZlcnkgY29zdGx5IHRvIGhhdmUgdG8gY2FsbCBpdCByZXBlYXRlZGx5LiAgVG8gYWlkIGluIHRoaXMgZW5kZWF2b3VyLCB0aGUgcmVzZXQgZnVuY3Rpb24gaGFzIGJlZW4gcHJvdmlkZWQuCisKK1xpbmRleHtnY21cX3Jlc2V0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZ2NtX3Jlc2V0KGdjbV9zdGF0ZSAqZ2NtKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCByZXNldCB0aGUgR0NNIHN0YXRlIFx0ZXh0aXR7Z2NtfSB0byB0aGUgc3RhdGUgdGhhdCBnY21cX2luaXQoKSBsZWZ0IGl0LiAgVGhlIHVzZXIgd291bGQgdGhlbiBjYWxsIGdjbVxfYWRkXF9pdigpLCBnY21cX2FkZFxfYWFkKCksIGV0Yy4KKworXHN1YnN1YnNlY3Rpb257T25lLS1TaG90IFBhY2tldH0KK1RvIHByb2Nlc3MgYSBzaW5nbGUgcGFja2V0IHVuZGVyIGFueSBnaXZlbiBrZXkgdGhlIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb24gY2FuIGJlIHVzZWQuCisKK1xpbmRleHtnY21cX21lbW9yeSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGdjbV9tZW1vcnkoICAgICAgCisgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsICAgIHVuc2lnbmVkIGxvbmcgSVZsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRhdGEsIHVuc2lnbmVkIGxvbmcgYWRhdGFsZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsICAgIHVuc2lnbmVkIGxvbmcgcHRsZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsIAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgICB1bnNpZ25lZCBsb25nICp0YWdsZW4sCisgICAgICAgICAgICAgICAgICAgIGludCAgZGlyZWN0aW9uKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBpbml0aWFsaXplIHRoZSBHQ00gc3RhdGUgd2l0aCB0aGUgZ2l2ZW4ga2V5LCBJViBhbmQgQUFEIHZhbHVlIHRoZW4gcHJvY2VlZCB0byBlbmNyeXB0IG9yIGRlY3J5cHQgdGhlIG1lc3NhZ2UgdGV4dCBhbmQgc3RvcmUgdGhlIGZpbmFsCittZXNzYWdlIHRhZy4gIFRoZSBkZWZpbml0aW9uIG9mIHRoZSB2YXJpYWJsZXMgaXMgdGhlIHNhbWUgYXMgaXQgaXMgZm9yIGFsbCB0aGUgbWFudWFsIGZ1bmN0aW9ucy4KKworSWYgeW91IGFyZSBwcm9jZXNzaW5nIG1hbnkgcGFja2V0cyB1bmRlciB0aGUgc2FtZSBrZXkgeW91IHNob3VsZG4ndCB1c2UgdGhpcyBmdW5jdGlvbiBhcyBpdCBpbnZva2VzIHRoZSBwcmUtLWNvbXB1dGF0aW9uIHdpdGggZWFjaCBjYWxsLgorCitcc3Vic3Vic2VjdGlvbntFeGFtcGxlIFVzYWdlfQorVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIHVzYWdlIG9mIGhvdyB0byB1c2UgR0NNIG92ZXIgbXVsdGlwbGUgcGFja2V0cyB3aXRoIGEgc2hhcmVkIHNlY3JldCBrZXkuCisKK1xiZWdpbntzbWFsbH0KK1xiZWdpbnt2ZXJiYXRpbX0KKyNpbmNsdWRlIDx0b21jcnlwdC5oPgorCitpbnQgc2VuZF9wYWNrZXQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsICB1bnNpZ25lZCBsb25nIHB0bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LCAgdW5zaWduZWQgbG9uZyBpdmxlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphYWQsIHVuc2lnbmVkIGxvbmcgYWFkbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGdjbV9zdGF0ZSAgICAgKmdjbSkKK3sKKyAgIGludCAgICAgICAgICAgZXJyOworICAgdW5zaWduZWQgbG9uZyB0YWdsZW47CisgICB1bnNpZ25lZCBjaGFyIHRhZ1sxNl07CisKKyAgIC8qIHJlc2V0IHRoZSBzdGF0ZSAqLworICAgaWYgKChlcnIgPSBnY21fcmVzZXQoZ2NtKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgCisgICAvKiBBZGQgdGhlIElWICovCisgICBpZiAoKGVyciA9IGdjbV9hZGRfaXYoZ2NtLCBpdiwgaXZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogQWRkIHRoZSBBQUQgKG5vdGU6IGFhZCBjYW4gYmUgTlVMTCBpZiBhYWRsZW4gPT0gMCkgKi8KKyAgIGlmICgoZXJyID0gZ2NtX2FkZF9hYWQoZ2NtLCBhYWQsIGFhZGxlbikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBwcm9jZXNzIHRoZSBwbGFpbnRleHQgKi8KKyAgIGlmICgoZXJyID0gCisgICAgICAgIGdjbV9wcm9jZXNzKGdjbSwgcHQsIHB0bGVuLCBwdCwgR0NNX0VOQ1JZUFQpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogRmluaXNoIHVwIGFuZCBnZXQgdGhlIE1BQyB0YWcgKi8KKyAgIHRhZ2xlbiA9IHNpemVvZih0YWcpOworICAgaWYgKChlcnIgPSBnY21fZG9uZShnY20sIHRhZywgJnRhZ2xlbikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiAuLi4gc2VuZCBhIGhlYWRlciBkZXNjcmliaW5nIHRoZSBsZW5ndGhzIC4uLiAqLworCisgICAvKiBkZXBlbmRpbmcgb24gdGhlIHByb3RvY29sIGFuZCBob3cgSVYgaXMgCisgICAgKiBnZW5lcmF0ZWQgeW91IG1heSBoYXZlIHRvIHNlbmQgaXQgdG9vLi4uICovCisgICBzZW5kKHNvY2tldCwgaXYsIGl2bGVuLCAwKTsKKworICAgLyogc2VuZCB0aGUgYWFkICovCisgICBzZW5kKHNvY2tldCwgYWFkLCBhYWRsZW4sIDApOworCisgICAvKiBzZW5kIHRoZSBjaXBoZXJ0ZXh0ICovCisgICBzZW5kKHNvY2tldCwgcHQsIHB0bGVuLCAwKTsKKworICAgLyogc2VuZCB0aGUgdGFnICovCisgICBzZW5kKHNvY2tldCwgdGFnLCB0YWdsZW4sIDApOworCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisgICBnY21fc3RhdGUgICAgIGdjbTsKKyAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XSwgSVZbMTJdLCBwdFtQQUNLRVRfU0laRV07CisgICBpbnQgICAgICAgICAgIGVyciwgeDsKKyAgIHVuc2lnbmVkIGxvbmcgcHRsZW47IAorIAorICAgLyogc29tZWhvdyBmaWxsIGtleS9JViB3aXRoIHJhbmRvbSB2YWx1ZXMgKi8KKyAgIAorICAgLyogcmVnaXN0ZXIgQUVTICovCisgICByZWdpc3Rlcl9jaXBoZXIoJmFlc19kZXNjKTsKKworICAgLyogaW5pdCB0aGUgR0NNIHN0YXRlICovCisgICBpZiAoKGVyciA9IAorICAgICAgICBnY21faW5pdCgmZ2NtLCBmaW5kX2NpcGhlcigiYWVzIiksIGtleSwgMTYpKSAhPSBDUllQVF9PSykgeworICAgICAgd2hpbmVfYW5kX3BvdXQoZXJyKTsKKyAgIH0KKworICAgLyogaGFuZGxlIHVzIHNvbWUgcGFja2V0cyAqLworICAgZm9yICg7OykgeworICAgICAgIHB0bGVuID0gbWFrZV9wYWNrZXRfd2Vfd2FudF90b19zZW5kKHB0KTsKKworICAgICAgIC8qIHVzZSBJViBhcyBjb3VudGVyICgxMiBieXRlIGNvdW50ZXIpICovCisgICAgICAgZm9yICh4ID0gMTE7IHggPj0gMDsgeC0tKSB7CisgICAgICAgICAgIGlmICgrK0lWW3hdKSB7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICB9CisgICAgICAgfQorCisgICAgICAgaWYgKChlcnIgPSBzZW5kX3BhY2tldChwdCwgcHRsZW4sIGl2LCAxMiwgTlVMTCwgMCwgJmdjbSkpIAorICAgICAgICAgICAhPSBDUllQVF9PSykgeworICAgICAgICAgICB3aGluZV9hbmRfcG91dChlcnIpOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworXGNoYXB0ZXJ7T25lLVdheSBDcnlwdG9ncmFwaGljIEhhc2ggRnVuY3Rpb25zfQorXG15c2VjdGlvbntDb3JlIEZ1bmN0aW9uc30KK0xpa2UgdGhlIGNpcGhlcnMsIHRoZXJlIGFyZSBoYXNoIGNvcmUgZnVuY3Rpb25zIGFuZCBhIHVuaXZlcnNhbCBkYXRhIHR5cGUgdG8gaG9sZCB0aGUgaGFzaCBzdGF0ZSBjYWxsZWQgXHRleHRpdHtoYXNoXF9zdGF0ZX0uICBUbyBpbml0aWFsaXplIGhhc2ggCitYWFggKHdoZXJlIFhYWCBpcyB0aGUgbmFtZSkgY2FsbDoKK1xpbmRleHtIYXNoIEZ1bmN0aW9uc30KK1xiZWdpbnt2ZXJiYXRpbX0KK3ZvaWQgWFhYX2luaXQoaGFzaF9zdGF0ZSAqbWQpOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyBzaW1wbHkgc2V0cyB1cCB0aGUgaGFzaCB0byB0aGUgZGVmYXVsdCBzdGF0ZSBnb3Zlcm5lZCBieSB0aGUgc3BlY2lmaWNhdGlvbnMgb2YgdGhlIGhhc2guICBUbyBhZGQgZGF0YSB0byB0aGUgbWVzc2FnZSBiZWluZyBoYXNoZWQgY2FsbDoKK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBYWFhfcHJvY2VzcyggICAgICAgICBoYXNoX3N0YXRlICptZCwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuKTsKK1xlbmR7dmVyYmF0aW19CitFc3NlbnRpYWxseSBhbGwgaGFzaCBtZXNzYWdlcyBhcmUgdmlydHVhbGx5IGluZmluaXRlbHlcZm9vdG5vdGV7TW9zdCBoYXNoZXMgYXJlIGxpbWl0ZWQgdG8gJDJeezY0fSQgYml0cyBvciAyLDMwNSw4NDMsMDA5LDIxMyw2OTMsOTUyIGJ5dGVzLn0gbG9uZyBtZXNzYWdlIHdoaWNoIAorYXJlIGJ1ZmZlcmVkLiAgVGhlIGRhdGEgY2FuIGJlIHBhc3NlZCBpbiBhbnkgc2l6ZWQgY2h1bmtzIGFzIGxvbmcgYXMgdGhlIG9yZGVyIG9mIHRoZSBieXRlcyBhcmUgdGhlIHNhbWUgdGhlIG1lc3NhZ2UgZGlnZXN0IChoYXNoIG91dHB1dCkgd2lsbCBiZSB0aGUgc2FtZS4gIEZvciBleGFtcGxlLCAKK3RoaXMgbWVhbnMgdGhhdDoKK1xiZWdpbnt2ZXJiYXRpbX0KK21kNV9wcm9jZXNzKCZtZCwgImhlbGxvICIsIDYpOworbWQ1X3Byb2Nlc3MoJm1kLCAid29ybGQiLCA1KTsKK1xlbmR7dmVyYmF0aW19CitXaWxsIHByb2R1Y2UgdGhlIHNhbWUgbWVzc2FnZSBkaWdlc3QgYXMgdGhlIHNpbmdsZSBjYWxsOgorXGluZGV4e01lc3NhZ2UgRGlnZXN0fQorXGJlZ2lue3ZlcmJhdGltfQorbWQ1X3Byb2Nlc3MoJm1kLCAiaGVsbG8gd29ybGQiLCAxMSk7CitcZW5ke3ZlcmJhdGltfQorCitUbyBmaW5hbGx5IGdldCB0aGUgbWVzc2FnZSBkaWdlc3QgKHRoZSBoYXNoKSBjYWxsOgorXGJlZ2lue3ZlcmJhdGltfQoraW50IFhYWF9kb25lKCAgIGhhc2hfc3RhdGUgKm1kLCAKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQpOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmlzaCB1cCB0aGUgaGFzaCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUgXHRleHRpdHtvdXR9IGFycmF5LiAgWW91IG11c3QgZW5zdXJlIHRoYXQgXHRleHRpdHtvdXR9IGlzIGxvbmcKK2Vub3VnaCBmb3IgdGhlIGhhc2ggaW4gcXVlc3Rpb24uICBPZnRlbiBoYXNoZXMgYXJlIHVzZWQgdG8gZ2V0IGtleXMgZm9yIHN5bW1ldHJpYyBjaXBoZXJzIHNvIHRoZSBcdGV4dGl0e1hYWFxfZG9uZSgpfSBmdW5jdGlvbnMKK3dpbGwgd2lwZSB0aGUgXHRleHRpdHttZH0gdmFyaWFibGUgYmVmb3JlIHJldHVybmluZyBhdXRvbWF0aWNhbGx5LgorCitUbyB0ZXN0IGEgaGFzaCBmdW5jdGlvbiBjYWxsOgorXGJlZ2lue3ZlcmJhdGltfQoraW50IFhYWF90ZXN0KHZvaWQpOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIHJldHVybiB7XGJmIENSWVBUXF9PS30gaWYgdGhlIGhhc2ggbWF0Y2hlcyB0aGUgdGVzdCB2ZWN0b3JzLCBvdGhlcndpc2UgaXQgcmV0dXJucyBhbiBlcnJvciBjb2RlLiAgQW4KK2V4YW1wbGUgc25pcHBldCB0aGF0IGhhc2hlcyBhIG1lc3NhZ2Ugd2l0aCBtZDUgaXMgZ2l2ZW4gYmVsb3cuCitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CisjaW5jbHVkZSA8dG9tY3J5cHQuaD4KK2ludCBtYWluKHZvaWQpCit7CisgICAgaGFzaF9zdGF0ZSBtZDsKKyAgICB1bnNpZ25lZCBjaGFyICppbiA9ICJoZWxsbyB3b3JsZCIsIG91dFsxNl07CisKKyAgICAvKiBzZXR1cCB0aGUgaGFzaCAqLworICAgIG1kNV9pbml0KCZtZCk7CisKKyAgICAvKiBhZGQgdGhlIG1lc3NhZ2UgKi8KKyAgICBtZDVfcHJvY2VzcygmbWQsIGluLCBzdHJsZW4oaW4pKTsKKworICAgIC8qIGdldCB0aGUgaGFzaCBpbiBvdXRbMC4uMTVdICovCisgICAgbWQ1X2RvbmUoJm1kLCBvdXQpOworCisgICAgcmV0dXJuIDA7Cit9CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworXG15c2VjdGlvbntIYXNoIERlc2NyaXB0b3JzfQorTGlrZSB0aGUgc2V0IG9mIGNpcGhlcnMsIHRoZSBzZXQgb2YgaGFzaGVzIGhhdmUgZGVzY3JpcHRvcnMgYXMgd2VsbC4gIFRoZXkgYXJlIHN0b3JlZCBpbiBhbiBhcnJheSBjYWxsZWQgXHRleHRpdHtoYXNoXF9kZXNjcmlwdG9yfSBhbmQKK2FyZSBkZWZpbmVkIGJ5OgorXGJlZ2lue3ZlcmJhdGltfQorc3RydWN0IF9oYXNoX2Rlc2NyaXB0b3IgeworICAgIGNoYXIgKm5hbWU7CisKKyAgICB1bnNpZ25lZCBsb25nIGhhc2hzaXplOyAgICAvKiBkaWdlc3Qgb3V0cHV0IHNpemUgaW4gYnl0ZXMgICovCisgICAgdW5zaWduZWQgbG9uZyBibG9ja3NpemU7ICAgLyogdGhlIGJsb2NrIHNpemUgdGhlIGhhc2ggdXNlcyAqLworCisgICAgdm9pZCAoKmluaXQpICAgKGhhc2hfc3RhdGUgKmhhc2gpOworCisgICAgaW50ICAoKnByb2Nlc3MpKCAgICAgICAgIGhhc2hfc3RhdGUgKmhhc2gsIAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuKTsKKworICAgIGludCAgKCpkb25lKSAgIChoYXNoX3N0YXRlICpoYXNoLCB1bnNpZ25lZCBjaGFyICpvdXQpOworCisgICAgaW50ICAoKnRlc3QpICAgKHZvaWQpOworfTsKK1xlbmR7dmVyYmF0aW19CisKK1xpbmRleHtmaW5kXF9oYXNoKCl9CitUaGUgXHRleHRpdHtuYW1lfSBtZW1iZXIgaXMgdGhlIG5hbWUgb2YgdGhlIGhhc2ggZnVuY3Rpb24gKGFsbCBsb3dlcmNhc2UpLiAgVGhlIFx0ZXh0aXR7aGFzaHNpemV9IG1lbWJlciBpcyB0aGUgc2l6ZSBvZiB0aGUgZGlnZXN0IG91dHB1dAoraW4gYnl0ZXMsIHdoaWxlIFx0ZXh0aXR7YmxvY2tzaXplfSBpcyB0aGUgc2l6ZSBvZiBibG9ja3MgdGhlIGhhc2ggZXhwZWN0cyB0byB0aGUgY29tcHJlc3Npb24gZnVuY3Rpb24uICBUZWNobmljYWxseSwgdGhpcyBkZXRhaWwgaXMgbm90IGltcG9ydGFudAorZm9yIGhpZ2ggbGV2ZWwgZGV2ZWxvcGVycyBidXQgaXMgdXNlZnVsIHRvIGtub3cgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuICAKKworVGhlIFx0ZXh0aXR7aW5pdH0gbWVtYmVyIGluaXRpYWxpemVzIHRoZSBoYXNoLCBcdGV4dGl0e3Byb2Nlc3N9IHBhc3NlcyBkYXRhIHRocm91Z2ggdGhlIGhhc2gsIFx0ZXh0aXR7ZG9uZX0gdGVybWluYXRlcyB0aGUgaGFzaCBhbmQgcmV0cmlldmVzIHRoZSAKK2RpZ2VzdC4gIFRoZSBcdGV4dGl0e3Rlc3R9IG1lbWJlciB0ZXN0cyB0aGUgaGFzaCBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgdGVzdCB2ZWN0b3JzLgorCitUaGVyZSBpcyBhIGZ1bmN0aW9uIHRvIHNlYXJjaCB0aGUgYXJyYXkgYXMgd2VsbCBjYWxsZWQgXHRleHRpdHtpbnQgZmluZFxfaGFzaChjaGFyICpuYW1lKX0uICBJdCByZXR1cm5zIC0xIGlmIHRoZSBoYXNoIGlzIG5vdCBmb3VuZCwgb3RoZXJ3aXNlLCB0aGUKK3Bvc2l0aW9uIGluIHRoZSBkZXNjcmlwdG9yIHRhYmxlIG9mIHRoZSBoYXNoLgorCitJbiBhZGRpdGlvbiwgdGhlcmUgaXMgYWxzbyBmaW5kXF9oYXNoXF9vaWQoKSB3aGljaCBmaW5kcyBhIGhhc2ggYnkgdGhlIEFTTi4xIE9CSkVDVCBJREVOVElGSUVSIHN0cmluZy4KK1xpbmRleHtmaW5kXF9oYXNoXF9vaWQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBmaW5kX2hhc2hfb2lkKGNvbnN0IHVuc2lnbmVkIGxvbmcgKklELCB1bnNpZ25lZCBsb25nIElEbGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1lvdSBjYW4gdXNlIHRoZSB0YWJsZSB0byBpbmRpcmVjdGx5IGNhbGwgYSBoYXNoIGZ1bmN0aW9uIHRoYXQgaXMgY2hvc2VuIGF0IHJ1bi10aW1lLiAgRm9yIGV4YW1wbGU6CitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CisjaW5jbHVkZSA8dG9tY3J5cHQuaD4KK2ludCBtYWluKHZvaWQpCit7CisgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxMDBdLCBoYXNoW01BWEJMT0NLU0laRV07CisgICBpbnQgaWR4LCB4OworICAgaGFzaF9zdGF0ZSBtZDsKKworICAgLyogcmVnaXN0ZXIgaGFzaGVzIC4uLi4gKi8KKyAgIGlmIChyZWdpc3Rlcl9oYXNoKCZtZDVfZGVzYykgPT0gLTEpIHsKKyAgICAgIHByaW50ZigiRXJyb3IgcmVnaXN0ZXJpbmcgTUQ1LlxuIik7CisgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIC8qIHJlZ2lzdGVyIG90aGVyIGhhc2hlcyAuLi4gKi8KKworICAgLyogcHJvbXB0IGZvciBuYW1lIGFuZCBzdHJpcCBuZXdsaW5lICovCisgICBwcmludGYoIkVudGVyIGhhc2ggbmFtZTogXG4iKTsKKyAgIGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKTsKKyAgIGJ1ZmZlcltzdHJsZW4oYnVmZmVyKSAtIDFdID0gMDsKKworICAgLyogZ2V0IGhhc2ggaW5kZXggKi8KKyAgIGlkeCA9IGZpbmRfaGFzaChidWZmZXIpOworICAgaWYgKGlkeCA9PSAtMSkgeworICAgICAgcHJpbnRmKCJJbnZhbGlkIGhhc2ggbmFtZSFcbiIpOworICAgICAgcmV0dXJuIC0xOworICAgfQorCisgICAvKiBoYXNoIGlucHV0IHVudGlsIGJsYW5rIGxpbmUgKi8KKyAgIGhhc2hfZGVzY3JpcHRvcltpZHhdLmluaXQoJm1kKTsKKyAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikgIT0gTlVMTCkKKyAgICAgICAgIGhhc2hfZGVzY3JpcHRvcltpZHhdLnByb2Nlc3MoJm1kLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKKyAgIGhhc2hfZGVzY3JpcHRvcltpZHhdLmRvbmUoJm1kLCBoYXNoKTsKKworICAgLyogZHVtcCB0byBzY3JlZW4gKi8KKyAgIGZvciAoeCA9IDA7IHggPCBoYXNoX2Rlc2NyaXB0b3JbaWR4XS5oYXNoc2l6ZTsgeCsrKQorICAgICAgIHByaW50ZigiJTAyeCAiLCBoYXNoW3hdKTsKKyAgIHByaW50ZigiXG4iKTsKKyAgIHJldHVybiAwOworfQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CisKK05vdGUgdGhlIHVzYWdlIG9mIFx0ZXh0YmZ7TUFYQkxPQ0tTSVpFfS4gIEluIExpYlRvbUNyeXB0LCBubyBzeW1tZXRyaWMgYmxvY2ssIGtleSBvciBoYXNoIGRpZ2VzdCBpcyBsYXJnZXIgdGhhbiBcdGV4dGJme01BWEJMT0NLU0laRX0gaW4KK2xlbmd0aC4gIFRoaXMgcHJvdmlkZXMgYSBzaW1wbGUgc2l6ZSB5b3UgY2FuIHNldCB5b3VyIGF1dG9tYXRpYyBhcnJheXMgdG8gdGhhdCB3aWxsIG5vdCBnZXQgb3ZlcnJ1bi4KKworVGhlcmUgYXJlIHRocmVlIGhlbHBlciBmdW5jdGlvbnMgdG8gbWFrZSB3b3JraW5nIHdpdGggaGFzaGVzIGVhc2llci4gIFRoZSBmaXJzdCBpcyBhIGZ1bmN0aW9uIHRvIGhhc2ggYSBidWZmZXIsIGFuZCBwcm9kdWNlIHRoZSBkaWdlc3QgaW4gYSBzaW5nbGUKK2Z1bmN0aW9uIGNhbGwuCisKK1xpbmRleHtoYXNoXF9tZW1vcnkoKX0gCitcYmVnaW57dmVyYmF0aW19CitpbnQgaGFzaF9tZW1vcnkoICAgICAgICAgICAgICAgIGludCAgaGFzaCwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgaGFzaCB0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7aW59IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufS4gIFRoZSBoYXNoIHVzZWQgaXMgaW5kZXhlZCBieSB0aGUgXHRleHRpdHtoYXNofSBwYXJhbWV0ZXIuICBUaGUgbWVzc2FnZQorZGlnZXN0IGlzIHN0b3JlZCBpbiBcdGV4dGl0e291dH0sIGFuZCB0aGUgXHRleHRpdHtvdXRsZW59IHBhcmFtZXRlciBpcyB1cGRhdGVkIHRvIGhvbGQgdGhlIG1lc3NhZ2UgZGlnZXN0IHNpemUuICAKKworVGhlIG5leHQgaGVscGVyIGZ1bmN0aW9uIGFsbG93cyBmb3IgdGhlIGhhc2hpbmcgb2YgYSBmaWxlIGJhc2VkIG9uIGEgZmlsZSBuYW1lLiAgCitcaW5kZXh7aGFzaFxfZmlsZSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGhhc2hfZmlsZSggICAgICAgICAgaW50ICBoYXNoLCAKKyAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm5hbWUsIAorICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGhhc2ggdGhlIGZpbGUgbmFtZWQgYnkgXHRleHRpdHtmbmFtZX0gdXNpbmcgdGhlIGhhc2ggaW5kZXhlZCBieSBcdGV4dGl0e2hhc2h9LiAgVGhlIGZpbGUgbmFtZWQgaW4gdGhpcyBmdW5jdGlvbiBjYWxsIG11c3QgYmUgcmVhZGFibGUgYnkgdGhlIAordXNlciBvd25pbmcgdGhlIHByb2Nlc3MgcGVyZm9ybWluZyB0aGUgcmVxdWVzdC4gIFRoaXMgZnVuY3Rpb24gY2FuIGJlIG9taXR0ZWQgYnkgdGhlIFx0ZXh0YmZ7TFRDXF9OT1xfRklMRX0gZGVmaW5lLCB3aGljaCBmb3JjZXMgaXQgdG8gcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX05PUH0KK3doZW4gaXQgaXMgY2FsbGVkLiAgVGhlIG1lc3NhZ2UgZGlnZXN0IGlzIHN0b3JlZCBpbiBcdGV4dGl0e291dH0sIGFuZCB0aGUgXHRleHRpdHtvdXRsZW59IHBhcmFtZXRlciBpcyB1cGRhdGVkIHRvIGhvbGQgdGhlIG1lc3NhZ2UgZGlnZXN0IHNpemUuICAKKworXGluZGV4e2hhc2hcX2ZpbGVoYW5kbGUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBoYXNoX2ZpbGVoYW5kbGUoICAgICAgICAgIGludCAgaGFzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBoYXNoIHRoZSBmaWxlIGlkZW50aWZpZWQgYnkgdGhlIGhhbmRsZSBcdGV4dGl0e2lufSB1c2luZyB0aGUgaGFzaCBpbmRleGVkIGJ5IFx0ZXh0aXR7aGFzaH0uICBUaGlzIHdpbGwgYmVnaW4gaGFzaGluZyBmcm9tIHRoZSBjdXJyZW50IGZpbGUgcG9pbnRlciBwb3NpdGlvbiwgYW5kCit3aWxsIG5vdCByZXdpbmQgdGhlIGZpbGUgcG9pbnRlciB3aGVuIGZpbmlzaGVkLiAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgb21pdHRlZCBieSB0aGUgXHRleHRiZntMVENcX05PXF9GSUxFfSBkZWZpbmUsIHdoaWNoIGZvcmNlcyBpdCB0byByZXR1cm4gXHRleHRiZntDUllQVFxfTk9QfQord2hlbiBpdCBpcyBjYWxsZWQuICBUaGUgbWVzc2FnZSBkaWdlc3QgaXMgc3RvcmVkIGluIFx0ZXh0aXR7b3V0fSwgYW5kIHRoZSBcdGV4dGl0e291dGxlbn0gcGFyYW1ldGVyIGlzIHVwZGF0ZWQgdG8gaG9sZCB0aGUgbWVzc2FnZSBkaWdlc3Qgc2l6ZS4gIAorCitUbyBwZXJmb3JtIHRoZSBhYm92ZSBoYXNoIHdpdGggbWQ1IHRoZSBmb2xsb3dpbmcgY29kZSBjb3VsZCBiZSB1c2VkOgorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CitpbnQgbWFpbih2b2lkKQoreworICAgaW50IGlkeCwgZXJyOworICAgdW5zaWduZWQgbG9uZyBsZW47CisgICB1bnNpZ25lZCBjaGFyIG91dFtNQVhCTE9DS1NJWkVdOworCisgICAvKiByZWdpc3RlciB0aGUgaGFzaCAqLworICAgaWYgKHJlZ2lzdGVyX2hhc2goJm1kNV9kZXNjKSA9PSAtMSkgeworICAgICAgcHJpbnRmKCJFcnJvciByZWdpc3RlcmluZyBNRDUuXG4iKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKworICAgLyogZ2V0IHRoZSBpbmRleCBvZiB0aGUgaGFzaCAgKi8KKyAgIGlkeCA9IGZpbmRfaGFzaCgibWQ1Iik7CisKKyAgIC8qIGNhbGwgdGhlIGhhc2ggKi8KKyAgIGxlbiA9IHNpemVvZihvdXQpOworICAgaWYgKChlcnIgPSAKKyAgICAgICBoYXNoX21lbW9yeShpZHgsICJoZWxsbyB3b3JsZCIsIDExLCBvdXQsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJFcnJvciBoYXNoaW5nIGRhdGE6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICByZXR1cm4gLTE7CisgICB9CisgICByZXR1cm4gMDsKK30KK1xlbmR7dmVyYmF0aW19CitcZW5ke3NtYWxsfQorCitcc3Vic2VjdGlvbntIYXNoIFJlZ2lzdHJhdGlvbn0KK1NpbWlsYXIgdG8gdGhlIGNpcGhlciBkZXNjcmlwdG9yIHRhYmxlIHlvdSBtdXN0IHJlZ2lzdGVyIHlvdXIgaGFzaCBhbGdvcml0aG1zIGJlZm9yZSB5b3UgY2FuIHVzZSB0aGVtLiAgVGhlc2UgZnVuY3Rpb25zCit3b3JrIGV4YWN0bHkgbGlrZSB0aG9zZSBvZiB0aGUgY2lwaGVyIHJlZ2lzdHJhdGlvbiBjb2RlLiAgVGhlIGZ1bmN0aW9ucyBhcmU6CitcaW5kZXh7cmVnaXN0ZXJcX2hhc2goKX0gXGluZGV4e3VucmVnaXN0ZXJcX2hhc2goKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCByZWdpc3Rlcl9oYXNoKGNvbnN0IHN0cnVjdCBfaGFzaF9kZXNjcmlwdG9yICpoYXNoKTsKKworaW50IHVucmVnaXN0ZXJfaGFzaChjb25zdCBzdHJ1Y3QgX2hhc2hfZGVzY3JpcHRvciAqaGFzaCk7CitcZW5ke3ZlcmJhdGltfQorCitUaGUgZm9sbG93aW5nIGhhc2hlcyBhcmUgcHJvdmlkZWQgYXMgb2YgdGhpcyByZWxlYXNlIHdpdGhpbiB0aGUgTGliVG9tQ3J5cHQgbGlicmFyeToKK1xpbmRleHtIYXNoIGRlc2NyaXB0b3IgdGFibGV9CisKK1xiZWdpbntmaWd1cmV9W2hlcmVdCitcYmVnaW57Y2VudGVyfQorXGJlZ2lue3RhYnVsYXJ9e3xjfGN8Y3x9CisgICAgICBcaGxpbmUgXHRleHRiZntOYW1lfSAmIFx0ZXh0YmZ7RGVzY3JpcHRvciBOYW1lfSAmIFx0ZXh0YmZ7U2l6ZSBvZiBNZXNzYWdlIERpZ2VzdCAoYnl0ZXMpfSBcXAorICAgICAgXGhsaW5lIFdISVJMUE9PTCAmIHdoaXJscG9vbFxfZGVzYyAmIDY0IFxcCisgICAgICBcaGxpbmUgU0hBLTUxMiAmIHNoYTUxMlxfZGVzYyAmIDY0IFxcCisgICAgICBcaGxpbmUgU0hBLTM4NCAmIHNoYTM4NFxfZGVzYyAmIDQ4IFxcCisgICAgICBcaGxpbmUgUklQRU1ELTMyMCAmIHJtZDE2MFxfZGVzYyAmIDQwIFxcCisgICAgICBcaGxpbmUgU0hBLTI1NiAmIHNoYTI1NlxfZGVzYyAmIDMyIFxcCisgICAgICBcaGxpbmUgUklQRU1ELTI1NiAmIHJtZDE2MFxfZGVzYyAmIDMyIFxcCisgICAgICBcaGxpbmUgU0hBLTIyNCAmIHNoYTIyNFxfZGVzYyAmIDI4IFxcCisgICAgICBcaGxpbmUgVElHRVItMTkyICYgdGlnZXJcX2Rlc2MgJiAyNCBcXAorICAgICAgXGhsaW5lIFNIQS0xICYgc2hhMVxfZGVzYyAmIDIwIFxcCisgICAgICBcaGxpbmUgUklQRU1ELTE2MCAmIHJtZDE2MFxfZGVzYyAmIDIwIFxcCisgICAgICBcaGxpbmUgUklQRU1ELTEyOCAmIHJtZDEyOFxfZGVzYyAmIDE2IFxcCisgICAgICBcaGxpbmUgTUQ1ICYgbWQ1XF9kZXNjICYgMTYgXFwKKyAgICAgIFxobGluZSBNRDQgJiBtZDRcX2Rlc2MgJiAxNiBcXAorICAgICAgXGhsaW5lIE1EMiAmIG1kMlxfZGVzYyAmIDE2IFxcCisgICAgICBcaGxpbmUKK1xlbmR7dGFidWxhcn0KK1xlbmR7Y2VudGVyfQorXGNhcHRpb257QnVpbHQtLUluIFNvZnR3YXJlIEhhc2hlc30KK1xlbmR7ZmlndXJlfQorXHZmaWwKKworXG15c2VjdGlvbntDaXBoZXIgSGFzaCBDb25zdHJ1Y3Rpb259CitcaW5kZXh7Q2lwaGVyIEhhc2ggQ29uc3RydWN0aW9ufQorQW4gYWRkaXRpb24gdG8gdGhlIHN1aXRlIG9mIGhhc2ggZnVuY3Rpb25zIGlzIHRoZSBcdGV4dGl0e0NpcGhlciBIYXNoIENvbnN0cnVjdGlvbn0gb3IgXHRleHRpdHtDSEN9IG1vZGUuICBJbiB0aGlzIG1vZGUKK2FwcGxpY2FibGUgYmxvY2sgY2lwaGVycyAoc3VjaCBhcyBBRVMpIGNhbiBiZSB0dXJuZWQgaW50byBoYXNoIGZ1bmN0aW9ucyB0aGF0IG90aGVyIExUQyBmdW5jdGlvbnMgY2FuIHVzZS4gIEluIAorcGFydGljdWxhciB0aGlzIGFsbG93cyBhIGNyeXB0b3N5c3RlbSB0byBiZSBkZXNpZ25lZCB1c2luZyB2ZXJ5IGZldyBtb3ZpbmcgcGFydHMuCisKK0luIG9yZGVyIHRvIHVzZSB0aGUgQ0hDIHN5c3RlbSB0aGUgZGV2ZWxvcGVyIHdpbGwgaGF2ZSB0byB0YWtlIGEgZmV3IGV4dHJhIHN0ZXBzLiAgRmlyc3QgdGhlIFx0ZXh0aXR7Y2hjXF9kZXNjfSBoYXNoCitkZXNjcmlwdG9yIG11c3QgYmUgcmVnaXN0ZXJlZCB3aXRoIHJlZ2lzdGVyXF9oYXNoKCkuICBBdCB0aGlzIHBvaW50IHRoZSBDSEMgaGFzaCBjYW5ub3QgYmUgdXNlZCB0byBoYXNoCitkYXRhLiAgV2hpbGUgaXQgaXMgaW4gdGhlIGhhc2ggc3lzdGVtIHlvdSBzdGlsbCBoYXZlIHRvIHRlbGwgdGhlIENIQyBjb2RlIHdoaWNoIGNpcGhlciB0byB1c2UuICBUaGlzIGlzIGFjY29tcGxpc2hlZAordmlhIHRoZSBjaGNcX3JlZ2lzdGVyKCkgZnVuY3Rpb24uCisKK1xpbmRleHtjaGNcX3JlZ2lzdGVyKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgY2hjX3JlZ2lzdGVyKGludCBjaXBoZXIpOworXGVuZHt2ZXJiYXRpbX0KKworQSBjaXBoZXIgaGFzIHRvIGJlIHJlZ2lzdGVyZWQgd2l0aCBDSEMgKGFuZCBhbHNvIGluIHRoZSBjaXBoZXIgZGVzY3JpcHRvciB0YWJsZXMgd2l0aCAKK3JlZ2lzdGVyXF9jaXBoZXIoKSkuICBUaGUgY2hjXF9yZWdpc3RlcigpIGZ1bmN0aW9uIHdpbGwgYmluZCBhIGNpcGhlciB0byB0aGUgQ0hDIHN5c3RlbS4gIE9ubHkgb25lIGNpcGhlciBjYW4gCitiZSBib3VuZCB0byB0aGUgQ0hDIGhhc2ggYXQgYSB0aW1lLiAgVGhlcmUgYXJlIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzIGZvciB0aGUgc3lzdGVtIHRvIHdvcmsuCisKK1xiZWdpbntlbnVtZXJhdGV9CisgICBcaXRlbSBUaGUgY2lwaGVyIG11c3QgaGF2ZSBhIGJsb2NrIHNpemUgZ3JlYXRlciB0aGFuIDY0LS1iaXRzLiAgCisgICBcaXRlbSBUaGUgY2lwaGVyIG11c3QgYWxsb3cgYW4gaW5wdXQga2V5IHRoZSBzaXplIG9mIHRoZSBibG9jayBzaXplLgorXGVuZHtlbnVtZXJhdGV9CisKK0V4YW1wbGUgb2YgdXNpbmcgQ0hDIHdpdGggdGhlIEFFUyBibG9jayBjaXBoZXIuCisKK1xiZWdpbnt2ZXJiYXRpbX0KKyNpbmNsdWRlIDx0b21jcnlwdC5oPgoraW50IG1haW4odm9pZCkKK3sKKyAgIGludCBlcnI7IAorCisgICAvKiByZWdpc3RlciBjaXBoZXIgYW5kIGhhc2ggKi8KKyAgIGlmIChyZWdpc3Rlcl9jaXBoZXIoJmFlc19lbmNfZGVzYykgPT0gLTEpIHsKKyAgICAgIHByaW50ZigiQ291bGQgbm90IHJlZ2lzdGVyIGNpcGhlclxuIik7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgfQorICAgaWYgKHJlZ2lzdGVyX2hhc2goJmNoY19kZXNjKSA9PSAtMSkgeworICAgICAgcHJpbnRmKCJDb3VsZCBub3QgcmVnaXN0ZXIgaGFzaFxuIik7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgfQorCisgICAvKiBzdGFydCBjaGMgd2l0aCBBRVMgKi8KKyAgIGlmICgoZXJyID0gY2hjX3JlZ2lzdGVyKGZpbmRfY2lwaGVyKCJhZXMiKSkpICE9IENSWVBUX09LKSB7CisgICAgICBwcmludGYoIkVycm9yIGJpbmRpbmcgQUVTIHRvIENIQzogJXNcbiIsIAorICAgICAgICAgICAgIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgIH0KKworICAgLyogbm93IHlvdSBjYW4gdXNlIGNoY19oYXNoIGluIGFueSBMVEMgZnVuY3Rpb24gCisgICAgKiBbYXNpZGUgZnJvbSBwa2NzLi4uXSAqLworfQorXGVuZHt2ZXJiYXRpbX0KKworCitcbXlzZWN0aW9ue05vdGljZX0KK0l0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBcdGV4dGJme25vdH0gdXNlIHRoZSBNRDQgb3IgTUQ1IGhhc2hlcyBmb3IgdGhlIHB1cnBvc2VzIG9mIGRpZ2l0YWwgc2lnbmF0dXJlcyBvciBhdXRoZW50aWNhdGlvbiBjb2Rlcy4gIAorVGhlc2UgaGFzaGVzIGFyZSBwcm92aWRlZCBmb3IgY29tcGxldGVuZXNzIGFuZCB0aGV5IHN0aWxsIGNhbiBiZSB1c2VkIGZvciB0aGUgcHVycG9zZXMgb2YgcGFzc3dvcmQgaGFzaGluZyBvciBvbmUtd2F5IGFjY3VtdWxhdG9ycworKGUuZy4gWWFycm93KS4KKworVGhlIG90aGVyIGhhc2hlcyBzdWNoIGFzIHRoZSBTSEEtMSwgU0hBLTIgKHRoYXQgaW5jbHVkZXMgU0hBLTUxMiwgU0hBLTM4NCBhbmQgU0hBLTI1NikgYW5kIFRJR0VSLTE5MiBhcmUgc3RpbGwgY29uc2lkZXJlZCBzZWN1cmUKK2ZvciBhbGwgcHVycG9zZXMgeW91IHdvdWxkIG5vcm1hbGx5IHVzZSBhIGhhc2ggZm9yLgorCitcY2hhcHRlcntNZXNzYWdlIEF1dGhlbnRpY2F0aW9uIENvZGVzfQorXG15c2VjdGlvbntITUFDIFByb3RvY29sfQorVGhhbmtzIHRvIERvYmVzIFZhbmRlcm1lZXIsIHRoZSBsaWJyYXJ5IG5vdyBpbmNsdWRlcyBzdXBwb3J0IGZvciBoYXNoIGJhc2VkIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZXMsIG9yIEhNQUMgZm9yIHNob3J0LiAgQW4gSE1BQworb2YgYSBtZXNzYWdlIGlzIGEga2V5ZWQgYXV0aGVudGljYXRpb24gY29kZSB0aGF0IG9ubHkgdGhlIG93bmVyIG9mIGEgcHJpdmF0ZSBzeW1tZXRyaWMga2V5IHdpbGwgYmUgYWJsZSB0byB2ZXJpZnkuICBUaGUgcHVycG9zZSBpcwordG8gYWxsb3cgYW4gb3duZXIgb2YgYSBwcml2YXRlIHN5bW1ldHJpYyBrZXkgdG8gcHJvZHVjZSBhbiBITUFDIG9uIGEgbWVzc2FnZSB0aGVuIGxhdGVyIHZlcmlmeSBpZiBpdCBpcyBjb3JyZWN0LiAgQW55IGltcG9zdG9yIG9yCitlYXZlc2Ryb3BwZXIgd2lsbCBub3QgYmUgYWJsZSB0byB2ZXJpZnkgdGhlIGF1dGhlbnRpY2l0eSBvZiBhIG1lc3NhZ2UuICAKKworVGhlIEhNQUMgc3VwcG9ydCB3b3JrcyBtdWNoIGxpa2UgdGhlIG5vcm1hbCBoYXNoIGZ1bmN0aW9ucyBleGNlcHQgdGhhdCB0aGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSByZXF1aXJlcyB5b3UgdG8gcGFzcyBhIGtleSAKK2FuZCBpdHMgbGVuZ3RoLiAgVGhlIGtleSBpcyBtdWNoIGxpa2UgYSBrZXkgeW91IHdvdWxkIHBhc3MgdG8gYSBjaXBoZXIuICBUaGF0IGlzLCBpdCBpcyBzaW1wbHkgYW4gYXJyYXkgb2Ygb2N0ZXRzIHN0b3JlZCBpbgordW5zaWduZWQgY2hhcmFjdGVycy4gIFRoZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGlzOgorXGluZGV4e2htYWNcX2luaXQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBobWFjX2luaXQoICAgICAgICAgaG1hY19zdGF0ZSAqaG1hYywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGhhc2gsIAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBrZXlsZW4pOworXGVuZHt2ZXJiYXRpbX0KK1RoZSBcdGV4dGl0e2htYWN9IHBhcmFtZXRlciBpcyB0aGUgc3RhdGUgZm9yIHRoZSBITUFDIGNvZGUuICBUaGUgXHRleHRpdHtoYXNofSBwYXJhbWV0ZXIgaXMgdGhlIGluZGV4IGludG8gdGhlIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIGhhc2ggeW91IHdhbnQKK3RvIHVzZSB0byBhdXRoZW50aWNhdGUgdGhlIG1lc3NhZ2UuICBUaGUgXHRleHRpdHtrZXl9IHBhcmFtZXRlciBpcyB0aGUgcG9pbnRlciB0byB0aGUgYXJyYXkgb2YgY2hhcnMgdGhhdCBtYWtlIHVwIHRoZSBrZXkuICBUaGUgXHRleHRpdHtrZXlsZW59IHBhcmFtZXRlciBpcyB0aGUKK2xlbmd0aCAoaW4gb2N0ZXRzKSBvZiB0aGUga2V5IHlvdSB3YW50IHRvIHVzZSB0byBhdXRoZW50aWNhdGUgdGhlIG1lc3NhZ2UuICBUbyBzZW5kIG9jdGV0cyBvZiBhIG1lc3NhZ2UgdGhyb3VnaCB0aGUgSE1BQyBzeXN0ZW0geW91IG11c3QgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CitcaW5kZXh7aG1hY1xfcHJvY2VzcygpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGhtYWNfcHJvY2VzcyggICAgICAgICBobWFjX3N0YXRlICpobWFjLCAKKyAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbik7CitcZW5ke3ZlcmJhdGltfQorXHRleHRpdHtobWFjfSBpcyB0aGUgSE1BQyBzdGF0ZSB5b3UgYXJlIHdvcmtpbmcgd2l0aC4gXHRleHRpdHtidWZ9IGlzIHRoZSBhcnJheSBvZiBvY3RldHMgdG8gc2VuZCBpbnRvIHRoZSBITUFDIHByb2Nlc3MuICBcdGV4dGl0e2xlbn0gaXMgdGhlCitudW1iZXIgb2Ygb2N0ZXRzIHRvIHByb2Nlc3MuICBMaWtlIHRoZSBoYXNoIHByb2Nlc3Mgcm91dGluZXMgeW91IGNhbiBzZW5kIHRoZSBkYXRhIGluIGFyYml0cmFyaWx5IHNpemVkIGNodW5rcy4gV2hlbiB5b3UgCithcmUgZmluaXNoZWQgd2l0aCB0aGUgSE1BQyBwcm9jZXNzIHlvdSBtdXN0IGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB0byBnZXQgdGhlIEhNQUMgY29kZToKK1xpbmRleHtobWFjXF9kb25lKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgaG1hY19kb25lKCAgIGhtYWNfc3RhdGUgKmhtYWMsIAorICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KK1RoZSBcdGV4dGl0e2htYWN9IHBhcmFtZXRlciBpcyB0aGUgSE1BQyBzdGF0ZSB5b3UgYXJlIHdvcmtpbmcgd2l0aC4gIFRoZSBcdGV4dGl0e291dH0gcGFyYW1ldGVyIGlzIHRoZSBhcnJheSBvZiBvY3RldHMgd2hlcmUgdGhlIEhNQUMgY29kZSBzaG91bGQgYmUgc3RvcmVkLiAgCitZb3UgbXVzdCBzZXQgXHRleHRpdHtvdXRsZW59IHRvIHRoZSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gIEl0IGlzIHVwZGF0ZWQgd2l0aCB0aGUgbGVuZ3RoIG9mIHRoZSBITUFDIGNvZGUKK3Byb2R1Y2VkIChkZXBlbmRpbmcgb24gd2hpY2ggaGFzaCB3YXMgcGlja2VkKS4gIElmIFx0ZXh0aXR7b3V0bGVufSBpcyBsZXNzIHRoYW4gdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UgZGlnZXN0IChhbmQgdWx0aW1hdGVseQordGhlIEhNQUMgY29kZSkgdGhlbiB0aGUgSE1BQyBjb2RlIGlzIHRydW5jYXRlZCBhcyBwZXIgRklQUy0xOTggc3BlY2lmaWNhdGlvbnMgKGUuZy4gdGFrZSB0aGUgZmlyc3QgXHRleHRpdHtvdXRsZW59IGJ5dGVzKS4KKworVGhlcmUgYXJlIHR3byB1dGlsaXR5IGZ1bmN0aW9ucyBwcm92aWRlZCB0byBtYWtlIHVzaW5nIEhNQUNzIGVhc2llciB0byBkby4gIFRoZXkgYWNjZXB0IHRoZSBrZXkgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZQorbWVzc2FnZSAoZmlsZSBwb2ludGVyLCBhZGRyZXNzIGluIG1lbW9yeSksIGFuZCBwcm9kdWNlIHRoZSBITUFDIHJlc3VsdCBpbiBvbmUgc2hvdC4gIFRoZXNlIGFyZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gYXZvaWQKK2NhbGxpbmcgdGhlIHRocmVlIHN0ZXAgcHJvY2VzcyB5b3Vyc2VsZi4KKworXGluZGV4e2htYWNcX21lbW9yeSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGhtYWNfbWVtb3J5KAorICAgICAgICAgICAgICAgICAgIGludCAgaGFzaCwgCisgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcgIGtleWxlbiwKKyAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgd2lsbCBwcm9kdWNlIGFuIEhNQUMgY29kZSBmb3IgdGhlIGFycmF5IG9mIG9jdGV0cyBpbiBcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0uICBUaGUgaW5kZXggaW50byB0aGUgaGFzaCBkZXNjcmlwdG9yIAordGFibGUgbXVzdCBiZSBwcm92aWRlZCBpbiBcdGV4dGl0e2hhc2h9LiAgSXQgdXNlcyB0aGUga2V5IGZyb20gXHRleHRpdHtrZXl9IHdpdGggYSBrZXkgbGVuZ3RoIG9mIFx0ZXh0aXR7a2V5bGVufS4gIAorVGhlIHJlc3VsdCBpcyBzdG9yZWQgaW4gdGhlIGFycmF5IG9mIG9jdGV0cyBcdGV4dGl0e291dH0gYW5kIHRoZSBsZW5ndGggaW4gXHRleHRpdHtvdXRsZW59LiAgVGhlIHZhbHVlIG9mIFx0ZXh0aXR7b3V0bGVufSBtdXN0IGJlIHNldAordG8gdGhlIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiAgU2ltaWxhcmx5IGZvciBmaWxlcyB0aGVyZSBpcyB0aGUgIGZvbGxvd2luZyBmdW5jdGlvbjoKK1xpbmRleHtobWFjXF9maWxlKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgaG1hY19maWxlKAorICAgICAgICAgICAgICAgICAgIGludCAgaGFzaCwgCisgICAgICAgICAgICBjb25zdCBjaGFyICpmbmFtZSwgCisgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcgIGtleWxlbiwgCisgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorXHRleHRpdHtoYXNofSBpcyB0aGUgaW5kZXggaW50byB0aGUgaGFzaCBkZXNjcmlwdG9yIHRhYmxlIG9mIHRoZSBoYXNoIHlvdSB3YW50IHRvIHVzZS4gIFx0ZXh0aXR7Zm5hbWV9IGlzIHRoZSBmaWxlbmFtZSB0byBwcm9jZXNzLiAgCitcdGV4dGl0e2tleX0gaXMgdGhlIGFycmF5IG9mIG9jdGV0cyB0byB1c2UgYXMgdGhlIGtleSBvZiBsZW5ndGggXHRleHRpdHtrZXlsZW59LiAgXHRleHRpdHtvdXR9IGlzIHRoZSBhcnJheSBvZiBvY3RldHMgd2hlcmUgdGhlIAorcmVzdWx0IHNob3VsZCBiZSBzdG9yZWQuCisKK1RvIHRlc3QgaWYgdGhlIEhNQUMgY29kZSBpcyB3b3JraW5nIHRoZXJlIGlzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CitcaW5kZXh7aG1hY1xfdGVzdCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGhtYWNfdGVzdCh2b2lkKTsKK1xlbmR7dmVyYmF0aW19CitXaGljaCByZXR1cm5zIHtcYmYgQ1JZUFRcX09LfSBpZiB0aGUgY29kZSBwYXNzZXMgb3RoZXJ3aXNlIGl0IHJldHVybnMgYW4gZXJyb3IgY29kZS4gIFNvbWUgZXhhbXBsZSBjb2RlIGZvciB1c2luZyB0aGUgCitITUFDIHN5c3RlbSBpcyBnaXZlbiBiZWxvdy4KKworXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CitpbnQgbWFpbih2b2lkKQoreworICAgaW50IGlkeCwgZXJyOworICAgaG1hY19zdGF0ZSBobWFjOworICAgdW5zaWduZWQgY2hhciBrZXlbMTZdLCBkc3RbTUFYQkxPQ0tTSVpFXTsKKyAgIHVuc2lnbmVkIGxvbmcgZHN0bGVuOworCisgICAvKiByZWdpc3RlciBTSEEtMSAqLworICAgaWYgKHJlZ2lzdGVyX2hhc2goJnNoYTFfZGVzYykgPT0gLTEpIHsKKyAgICAgIHByaW50ZigiRXJyb3IgcmVnaXN0ZXJpbmcgU0hBMVxuIik7CisgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIC8qIGdldCBpbmRleCBvZiBTSEExIGluIGhhc2ggZGVzY3JpcHRvciB0YWJsZSAqLworICAgaWR4ID0gZmluZF9oYXNoKCJzaGExIik7CisKKyAgIC8qIHdlIHdvdWxkIG1ha2UgdXAgb3VyIHN5bW1ldHJpYyBrZXkgaW4gImtleVtdIiBoZXJlICovCisKKyAgIC8qIHN0YXJ0IHRoZSBITUFDICovCisgICBpZiAoKGVyciA9IGhtYWNfaW5pdCgmaG1hYywgaWR4LCBrZXksIDE2KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHByaW50ZigiRXJyb3Igc2V0dGluZyB1cCBobWFjOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgcmV0dXJuIC0xOworICAgfQorCisgICAvKiBwcm9jZXNzIGEgZmV3IG9jdGV0cyAqLworICAgaWYoKGVyciA9IGhtYWNfcHJvY2VzcygmaG1hYywgImhlbGxvIiwgNSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHByaW50ZigiRXJyb3IgcHJvY2Vzc2luZyBobWFjOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgcmV0dXJuIC0xOworICAgfQorCisgICAvKiBnZXQgcmVzdWx0IChwcmVzdW1hYmx5IHRvIHVzZSBpdCBzb21laG93Li4uKSAqLworICAgZHN0bGVuID0gc2l6ZW9mKGRzdCk7CisgICBpZiAoKGVyciA9IGhtYWNfZG9uZSgmaG1hYywgZHN0LCAmZHN0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHByaW50ZigiRXJyb3IgZmluaXNoaW5nIGhtYWM6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICByZXR1cm4gLTE7CisgICB9CisgICBwcmludGYoIlRoZSBobWFjIGlzICVsdSBieXRlcyBsb25nXG4iLCBkc3RsZW4pOworICAKKyAgIC8qIHJldHVybiAqLworICAgcmV0dXJuIDA7Cit9CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworXG15c2VjdGlvbntPTUFDIFN1cHBvcnR9CitcaW5kZXh7T01BQ30gXGluZGV4e0NNQUN9CitPTUFDXGZvb3Rub3Rle1x1cmx7aHR0cDovL2NyeXB0LmNpcy5pYmFyYWtpLmFjLmpwL29tYWMvb21hYy5odG1sfX0sIHdoaWNoIHN0YW5kcyBmb3IgXHRleHRpdHtPbmUtS2V5IENCQyBNQUN9IGlzIGFuIAorYWxnb3JpdGhtIHdoaWNoIHByb2R1Y2VzIGEgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlIChNQUMpIHVzaW5nIG9ubHkgYSBibG9jayBjaXBoZXIgc3VjaCBhcyBBRVMuICBOb3RlOiAgT01BQyBoYXMgYmVlbiBzdGFuZGFyZGl6ZWQgYXMKK0NNQUMgd2l0aGluIE5JU1QsIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBsaWJyYXJ5IE9NQUMgYW5kIENNQUMgYXJlIHN5bm9ueW1vdXMuICBGcm9tIGFuIEFQSSBzdGFuZHBvaW50LCB0aGUgT01BQyByb3V0aW5lcyB3b3JrIG11Y2ggbGlrZSB0aGUgCitITUFDIHJvdXRpbmVzLiAgSW5zdGVhZCwgaW4gdGhpcyBjYXNlIGEgY2lwaGVyIGlzIHVzZWQgaW5zdGVhZCBvZiBhIGhhc2guICAKKworVG8gc3RhcnQgYW4gT01BQyBzdGF0ZSB5b3UgY2FsbAorXGluZGV4e29tYWNcX2luaXQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBvbWFjX2luaXQoICAgICAgICAgb21hY19zdGF0ZSAqb21hYywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGtleWxlbik7CitcZW5ke3ZlcmJhdGltfQorVGhlIFx0ZXh0aXR7b21hY30gcGFyYW1ldGVyIGlzIHRoZSBzdGF0ZSBmb3IgdGhlIE9NQUMgYWxnb3JpdGhtLiAgVGhlIFx0ZXh0aXR7Y2lwaGVyfSBwYXJhbWV0ZXIgaXMgdGhlIGluZGV4IGludG8gdGhlIGNpcGhlclxfZGVzY3JpcHRvciB0YWJsZQorb2YgdGhlIGNpcGhlclxmb290bm90ZXtUaGUgY2lwaGVyIG11c3QgaGF2ZSBhIDY0IG9yIDEyOCBiaXQgYmxvY2sgc2l6ZS4gIFN1Y2ggYXMgQ0FTVDUsIEJsb3dmaXNoLCBERVMsIEFFUywgVHdvZmlzaCwgZXRjLn0geW91Cit3aXNoIHRvIHVzZS4gIFRoZSBcdGV4dGl0e2tleX0gYW5kIFx0ZXh0aXR7a2V5bGVufSBwYXJhbWV0ZXJzIGFyZSB0aGUga2V5cyB1c2VkIHRvIGF1dGhlbnRpY2F0ZSB0aGUgZGF0YS4KKworVG8gc2VuZCBkYXRhIHRocm91Z2ggdGhlIGFsZ29yaXRobSBjYWxsCitcaW5kZXh7b21hY1xfcHJvY2VzcygpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IG9tYWNfcHJvY2VzcyggICAgICAgICBvbWFjX3N0YXRlICpzdGF0ZSwgCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4pOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgd2lsbCBzZW5kIFx0ZXh0aXR7aW5sZW59IGJ5dGVzIGZyb20gXHRleHRpdHtpbn0gdGhyb3VnaCB0aGUgYWN0aXZlIE9NQUMgc3RhdGUgXHRleHRpdHtzdGF0ZX0uICBSZXR1cm5zIFx0ZXh0YmZ7Q1JZUFRcX09LfSBpZiB0aGUgCitmdW5jdGlvbiBzdWNjZWVkcy4gIFRoZSBmdW5jdGlvbiBpcyBub3Qgc2Vuc2l0aXZlIHRvIHRoZSBncmFudWxhcml0eSBvZiB0aGUgZGF0YS4gIEZvciBleGFtcGxlLAorCitcYmVnaW57dmVyYmF0aW19CitvbWFjX3Byb2Nlc3MoJm15c3RhdGUsICJoZWxsbyIsICA1KTsKK29tYWNfcHJvY2VzcygmbXlzdGF0ZSwgIiB3b3JsZCIsIDYpOworXGVuZHt2ZXJiYXRpbX0KKworV291bGQgcHJvZHVjZSB0aGUgc2FtZSByZXN1bHQgYXMsCisKK1xiZWdpbnt2ZXJiYXRpbX0KK29tYWNfcHJvY2VzcygmbXlzdGF0ZSwgImhlbGxvIHdvcmxkIiwgIDExKTsKK1xlbmR7dmVyYmF0aW19CisKK1doZW4geW91IGFyZSBkb25lIHByb2Nlc3NpbmcgdGhlIG1lc3NhZ2UgeW91IGNhbiBjYWxsIHRoZSBmb2xsb3dpbmcgdG8gY29tcHV0ZSB0aGUgbWVzc2FnZSB0YWcuCisKK1xpbmRleHtvbWFjXF9kb25lKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgb21hY19kb25lKCAgIG9tYWNfc3RhdGUgKnN0YXRlLCAKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CitXaGljaCB3aWxsIHRlcm1pbmF0ZSB0aGUgT01BQyBhbmQgb3V0cHV0IHRoZSBcdGV4dGl0e3RhZ30gKE1BQykgdG8gXHRleHRpdHtvdXR9LiAgTm90ZSB0aGF0IHVubGlrZSB0aGUgSE1BQyBhbmQgb3RoZXIgY29kZSAKK1x0ZXh0aXR7b3V0bGVufSBjYW4gYmUgc21hbGxlciB0aGFuIHRoZSBkZWZhdWx0IE1BQyBzaXplIChmb3IgaW5zdGFuY2UgQUVTIHdvdWxkIG1ha2UgYSAxNi1ieXRlIHRhZykuICBQYXJ0IG9mIHRoZSBPTUFDIAorc3BlY2lmaWNhdGlvbiBzdGF0ZXMgdGhhdCB0aGUgb3V0cHV0IG1heSBiZSB0cnVuY2F0ZWQuICBTbyBpZiB5b3UgcGFzcyBpbiAkb3V0bGVuID0gNSQgYW5kIHVzZSBBRVMgYXMgeW91ciBjaXBoZXIgdGhhbgordGhlIG91dHB1dCBNQUMgY29kZSB3aWxsIG9ubHkgYmUgZml2ZSBieXRlcyBsb25nLiAgSWYgXHRleHRpdHtvdXRsZW59IGlzIGxhcmdlciB0aGFuIHRoZSBkZWZhdWx0IHNpemUgaXQgaXMgc2V0IHRvIHRoZSBkZWZhdWx0CitzaXplIHRvIHNob3cgaG93IG1hbnkgYnl0ZXMgd2VyZSBhY3R1YWxseSB1c2VkLgorCitTaW1pbGFyIHRvIHRoZSBITUFDIGNvZGUgdGhlIGZpbGUgYW5kIG1lbW9yeSBmdW5jdGlvbnMgYXJlIGFsc28gcHJvdmlkZWQuICBUbyBPTUFDIGEgYnVmZmVyIG9mIG1lbW9yeSBpbiBvbmUgc2hvdCB1c2UgdGhlIAorZm9sbG93aW5nIGZ1bmN0aW9uLgorCitcaW5kZXh7b21hY1xfbWVtb3J5KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgb21hY19tZW1vcnkoICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgd2lsbCBjb21wdXRlIHRoZSBPTUFDIG9mIFx0ZXh0aXR7aW5sZW59IGJ5dGVzIG9mIFx0ZXh0aXR7aW59IHVzaW5nIHRoZSBrZXkgXHRleHRpdHtrZXl9IG9mIGxlbmd0aCBcdGV4dGl0e2tleWxlbn0gYnl0ZXMgYW5kIHRoZSBjaXBoZXIKK3NwZWNpZmllZCBieSB0aGUgXHRleHRpdHtjaXBoZXJ9J3RoIGVudHJ5IGluIHRoZSBjaXBoZXJcX2Rlc2NyaXB0b3IgdGFibGUuICBJdCB3aWxsIHN0b3JlIHRoZSBNQUMgaW4gXHRleHRpdHtvdXR9IHdpdGggdGhlIHNhbWUKK3J1bGVzIGFzIG9tYWNcX2RvbmUuCisKK1RvIE9NQUMgYSBmaWxlIHVzZQorXGluZGV4e29tYWNcX2ZpbGUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBvbWFjX2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLCAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworV2hpY2ggd2lsbCBPTUFDIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IFx0ZXh0aXR7ZmlsZW5hbWV9IHVzaW5nIHRoZSBrZXkgXHRleHRpdHtrZXl9IG9mIGxlbmd0aCBcdGV4dGl0e2tleWxlbn0gYnl0ZXMKK2FuZCB0aGUgY2lwaGVyIHNwZWNpZmllZCBieSB0aGUgXHRleHRpdHtjaXBoZXJ9J3RoIGVudHJ5IGluIHRoZSBjaXBoZXJcX2Rlc2NyaXB0b3IgdGFibGUuICBJdCB3aWxsIHN0b3JlIHRoZSBNQUMgaW4gXHRleHRpdHtvdXR9IHdpdGggCit0aGUgc2FtZSBydWxlcyBhcyBvbWFjXF9kb25lLgorCitUbyB0ZXN0IGlmIHRoZSBPTUFDIGNvZGUgaXMgd29ya2luZyB0aGVyZSBpcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgorXGluZGV4e29tYWNcX3Rlc3QoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBvbWFjX3Rlc3Qodm9pZCk7CitcZW5ke3ZlcmJhdGltfQorV2hpY2ggcmV0dXJucyB7XGJmIENSWVBUXF9PS30gaWYgdGhlIGNvZGUgcGFzc2VzIG90aGVyd2lzZSBpdCByZXR1cm5zIGFuIGVycm9yIGNvZGUuICBTb21lIGV4YW1wbGUgY29kZSBmb3IgdXNpbmcgdGhlIAorT01BQyBzeXN0ZW0gaXMgZ2l2ZW4gYmVsb3cuCisKK1xiZWdpbntzbWFsbH0KK1xiZWdpbnt2ZXJiYXRpbX0KKyNpbmNsdWRlIDx0b21jcnlwdC5oPgoraW50IG1haW4odm9pZCkKK3sKKyAgIGludCBpZHgsIGVycjsKKyAgIG9tYWNfc3RhdGUgb21hYzsKKyAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XSwgZHN0W01BWEJMT0NLU0laRV07CisgICB1bnNpZ25lZCBsb25nIGRzdGxlbjsKKworICAgLyogcmVnaXN0ZXIgUmlqbmRhZWwgKi8KKyAgIGlmIChyZWdpc3Rlcl9jaXBoZXIoJnJpam5kYWVsX2Rlc2MpID09IC0xKSB7CisgICAgICBwcmludGYoIkVycm9yIHJlZ2lzdGVyaW5nIFJpam5kYWVsXG4iKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKworICAgLyogZ2V0IGluZGV4IG9mIFJpam5kYWVsIGluIGNpcGhlciBkZXNjcmlwdG9yIHRhYmxlICovCisgICBpZHggPSBmaW5kX2NpcGhlcigicmlqbmRhZWwiKTsKKworICAgLyogd2Ugd291bGQgbWFrZSB1cCBvdXIgc3ltbWV0cmljIGtleSBpbiAia2V5W10iIGhlcmUgKi8KKworICAgLyogc3RhcnQgdGhlIE9NQUMgKi8KKyAgIGlmICgoZXJyID0gb21hY19pbml0KCZvbWFjLCBpZHgsIGtleSwgMTYpKSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJFcnJvciBzZXR0aW5nIHVwIG9tYWM6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIC8qIHByb2Nlc3MgYSBmZXcgb2N0ZXRzICovCisgICBpZigoZXJyID0gb21hY19wcm9jZXNzKCZvbWFjLCAiaGVsbG8iLCA1KSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJFcnJvciBwcm9jZXNzaW5nIG9tYWM6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIC8qIGdldCByZXN1bHQgKHByZXN1bWFibHkgdG8gdXNlIGl0IHNvbWVob3cuLi4pICovCisgICBkc3RsZW4gPSBzaXplb2YoZHN0KTsKKyAgIGlmICgoZXJyID0gb21hY19kb25lKCZvbWFjLCBkc3QsICZkc3RsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJFcnJvciBmaW5pc2hpbmcgb21hYzogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKyAgIHByaW50ZigiVGhlIG9tYWMgaXMgJWx1IGJ5dGVzIGxvbmdcbiIsIGRzdGxlbik7CisgIAorICAgLyogcmV0dXJuICovCisgICByZXR1cm4gMDsKK30KK1xlbmR7dmVyYmF0aW19CitcZW5ke3NtYWxsfQorCitcbXlzZWN0aW9ue1BNQUMgU3VwcG9ydH0KK1RoZSBQTUFDXGZvb3Rub3Rle0ouQmxhY2ssIFAuUm9nYXdheSwgXHRleHRpdHtBIEJsb2NrLS1DaXBoZXIgTW9kZSBvZiBPcGVyYXRpb24gZm9yIFBhcmFsbGVsaXphYmxlIE1lc3NhZ2UgQXV0aGVudGljYXRpb259fSAKK3Byb3RvY29sIGlzIGFub3RoZXIgTUFDIGFsZ29yaXRobSB0aGF0IHJlbGllcyBzb2xlbHkgb24gYSBzeW1tZXRyaWMta2V5IGJsb2NrIGNpcGhlci4gIEl0IHVzZXMgZXNzZW50aWFsbHkgdGhlIHNhbWUKK0FQSSBhcyB0aGUgcHJvdmlkZWQgT01BQyBjb2RlLiAgCisKK0EgUE1BQyBzdGF0ZSBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBmb2xsb3dpbmcuCisKK1xpbmRleHtwbWFjXF9pbml0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcG1hY19pbml0KCAgICAgICAgIHBtYWNfc3RhdGUgKnBtYWMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBjaXBoZXIsIAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBrZXlsZW4pOworXGVuZHt2ZXJiYXRpbX0KK1doaWNoIGluaXRpYWxpemVzIHRoZSBcdGV4dGl0e3BtYWN9IHN0YXRlIHdpdGggdGhlIGdpdmVuIFx0ZXh0aXR7Y2lwaGVyfSBhbmQgXHRleHRpdHtrZXl9IG9mIGxlbmd0aCBcdGV4dGl0e2tleWxlbn0gYnl0ZXMuICBUaGUgY2hvc2VuIGNpcGhlcgorbXVzdCBoYXZlIGEgNjQgb3IgMTI4IGJpdCBibG9jayBzaXplIChlLnguIEFFUykuCisKK1RvIE1BQyBkYXRhIHNpbXBseSBzZW5kIGl0IHRocm91Z2ggdGhlIHByb2Nlc3MgZnVuY3Rpb24uCisKK1xpbmRleHtwbWFjXF9wcm9jZXNzKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcG1hY19wcm9jZXNzKCAgICAgICAgIHBtYWNfc3RhdGUgKnN0YXRlLCAKKyAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbik7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB3aWxsIHByb2Nlc3MgXHRleHRpdHtpbmxlbn0gYnl0ZXMgb2YgXHRleHRpdHtpbn0gaW4gdGhlIGdpdmVuIFx0ZXh0aXR7c3RhdGV9LiAgVGhlIGZ1bmN0aW9uIGlzIG5vdCBzZW5zaXRpdmUgdG8gdGhlIGdyYW51bGFyaXR5IG9mIHRoZQorZGF0YS4gIEZvciBleGFtcGxlLAorCitcYmVnaW57dmVyYmF0aW19CitwbWFjX3Byb2Nlc3MoJm15c3RhdGUsICJoZWxsbyIsICA1KTsKK3BtYWNfcHJvY2VzcygmbXlzdGF0ZSwgIiB3b3JsZCIsIDYpOworXGVuZHt2ZXJiYXRpbX0KKworV291bGQgcHJvZHVjZSB0aGUgc2FtZSByZXN1bHQgYXMsCisKK1xiZWdpbnt2ZXJiYXRpbX0KK3BtYWNfcHJvY2VzcygmbXlzdGF0ZSwgImhlbGxvIHdvcmxkIiwgIDExKTsKK1xlbmR7dmVyYmF0aW19CisKK1doZW4gYSBjb21wbGV0ZSBtZXNzYWdlIGhhcyBiZWVuIHByb2Nlc3NlZCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgdG8gY29tcHV0ZSB0aGUgbWVzc2FnZSB0YWcuCisKK1xpbmRleHtwbWFjXF9kb25lKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcG1hY19kb25lKCAgIHBtYWNfc3RhdGUgKnN0YXRlLCAKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIHdpbGwgc3RvcmUgdXAgdG8gXHRleHRpdHtvdXRsZW59IGJ5dGVzIG9mIHRoZSB0YWcgZm9yIHRoZSBnaXZlbiBcdGV4dGl0e3N0YXRlfSBpbnRvIFx0ZXh0aXR7b3V0fS4gIE5vdGUgdGhhdCBpZiBcdGV4dGl0e291dGxlbn0gaXMgbGFyZ2VyCit0aGFuIHRoZSBzaXplIG9mIHRoZSB0YWcgaXQgaXMgc2V0IHRvIHRoZSBhbW91bnQgb2YgYnl0ZXMgc3RvcmVkIGluIFx0ZXh0aXR7b3V0fS4KKworU2ltaWxhciB0byB0aGUgT01BQyBjb2RlIHRoZSBmaWxlIGFuZCBtZW1vcnkgZnVuY3Rpb25zIGFyZSBhbHNvIHByb3ZpZGVkLiAgVG8gUE1BQyBhIGJ1ZmZlciBvZiBtZW1vcnkgaW4gb25lIHNob3QgdXNlIHRoZSAKK2ZvbGxvd2luZyBmdW5jdGlvbi4KKworXGluZGV4e3BtYWNcX21lbW9yeSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHBtYWNfbWVtb3J5KAorICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICBrZXlsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB3aWxsIGNvbXB1dGUgdGhlIFBNQUMgb2YgXHRleHRpdHttc2dsZW59IGJ5dGVzIG9mIFx0ZXh0aXR7bXNnfSB1c2luZyB0aGUga2V5IFx0ZXh0aXR7a2V5fSBvZiBsZW5ndGggXHRleHRpdHtrZXlsZW59IGJ5dGVzLCBhbmQgdGhlIGNpcGhlcgorc3BlY2lmaWVkIGJ5IHRoZSBcdGV4dGl0e2NpcGhlcn0ndGggZW50cnkgaW4gdGhlIGNpcGhlclxfZGVzY3JpcHRvciB0YWJsZS4gIEl0IHdpbGwgc3RvcmUgdGhlIE1BQyBpbiBcdGV4dGl0e291dH0gd2l0aCB0aGUgc2FtZQorcnVsZXMgYXMgcG1hY1xfZG9uZSgpLgorCitUbyBQTUFDIGEgZmlsZSB1c2UKK1xpbmRleHtwbWFjXF9maWxlKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcG1hY19maWxlKAorICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICAgIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1doaWNoIHdpbGwgUE1BQyB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHNwZWNpZmllZCBieSBcdGV4dGl0e2ZpbGVuYW1lfSB1c2luZyB0aGUga2V5IFx0ZXh0aXR7a2V5fSBvZiBsZW5ndGggXHRleHRpdHtrZXlsZW59IGJ5dGVzLCAKK2FuZCB0aGUgY2lwaGVyIHNwZWNpZmllZCBieSB0aGUgXHRleHRpdHtjaXBoZXJ9J3RoIGVudHJ5IGluIHRoZSBjaXBoZXJcX2Rlc2NyaXB0b3IgdGFibGUuICBJdCB3aWxsIHN0b3JlIHRoZSBNQUMgaW4gXHRleHRpdHtvdXR9IHdpdGggCit0aGUgc2FtZSBydWxlcyBhcyBwbWFjXF9kb25lKCkuCisKK1RvIHRlc3QgaWYgdGhlIFBNQUMgY29kZSBpcyB3b3JraW5nIHRoZXJlIGlzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CitcaW5kZXh7cG1hY1xfdGVzdCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHBtYWNfdGVzdCh2b2lkKTsKK1xlbmR7dmVyYmF0aW19CitXaGljaCByZXR1cm5zIHtcYmYgQ1JZUFRcX09LfSBpZiB0aGUgY29kZSBwYXNzZXMgb3RoZXJ3aXNlIGl0IHJldHVybnMgYW4gZXJyb3IgY29kZS4KKworXG15c2VjdGlvbntQZWxpY2FuIE1BQ30KK1BlbGljYW4gTUFDIGlzIGEgbmV3IChleHBlcmltZW50YWwpIE1BQyBieSB0aGUgQUVTIHRlYW0gdGhhdCB1c2VzIGZvdXIgcm91bmRzIG9mIEFFUyBhcyBhIFx0ZXh0aXR7bWl4aW5nIGZ1bmN0aW9ufS4gIEl0IGFjaGlldmVzIGEgdmVyeSBoaWdoIAorcmF0ZSBvZiBwcm9jZXNzaW5nIGFuZCBpcyBwb3RlbnRpYWxseSB2ZXJ5IHNlY3VyZS4gIEl0IHJlcXVpcmVzIEFFUyB0byBiZSBlbmFibGVkIHRvIGZ1bmN0aW9uLiAgWW91IGRvIG5vdCBoYXZlIHRvIHJlZ2lzdGVyXF9jaXBoZXIoKSBBRVMgZmlyc3QgdGhvdWdoCithcyBpdCBjYWxscyBBRVMgZGlyZWN0bHkuCisKK1xpbmRleHtwZWxpY2FuXF9pbml0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcGVsaWNhbl9pbml0KCAgICAgIHBlbGljYW5fc3RhdGUgKnBlbG1hYywgCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGtleWxlbik7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB3aWxsIGluaXRpYWxpemUgdGhlIFBlbGljYW4gc3RhdGUgd2l0aCB0aGUgZ2l2ZW4gQUVTIGtleS4gIE9uY2UgdGhpcyBoYXMgYmVlbiBkb25lIHlvdSBjYW4gYmVnaW4gcHJvY2Vzc2luZyBkYXRhLgorCitcaW5kZXh7cGVsaWNhblxfcHJvY2VzcygpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHBlbGljYW5fcHJvY2VzcyggICAgICBwZWxpY2FuX3N0YXRlICpwZWxtYWMsIAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuKTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIHdpbGwgcHJvY2VzcyBcdGV4dGl0e2lubGVufSBieXRlcyBvZiBcdGV4dGl0e2lufSB0aHJvdWdoIHRoZSBQZWxpY2FuIE1BQy4gIEl0J3MgYmVzdCB0aGF0IHlvdSBwYXNzIGluIG11bHRpcGxlcyBvZiAxNiBieXRlcyBhcyBpdCBtYWtlcyB0aGUKK3JvdXRpbmUgbW9yZSBlZmZpY2llbnQgYnV0IHlvdSBtYXkgcGFzcyBpbiBhbnkgbGVuZ3RoIG9mIHRleHQuICBZb3UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiBhcyBtYW55IHRpbWVzIGFzIHJlcXVpcmVkIHRvIHByb2Nlc3MKK2FuIGVudGlyZSBtZXNzYWdlLgorCitcaW5kZXh7cGVsaWNhblxfZG9uZSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHBlbGljYW5fZG9uZShwZWxpY2FuX3N0YXRlICpwZWxtYWMsIHVuc2lnbmVkIGNoYXIgKm91dCk7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB0ZXJtaW5hdGVzIGEgUGVsaWNhbiBNQUMgYW5kIHdyaXRlcyB0aGUgMTYtLW9jdGV0IHRhZyB0byBcdGV4dGl0e291dH0uCisKK1xzdWJzZWN0aW9ue0V4YW1wbGV9CisKK1xiZWdpbnt2ZXJiYXRpbX0KKyNpbmNsdWRlIDx0b21jcnlwdC5oPgoraW50IG1haW4odm9pZCkKK3sKKyAgIHBlbGljYW5fc3RhdGUgcGVsc3RhdGU7CisgICB1bnNpZ25lZCBjaGFyIGtleVszMl0sIHRhZ1sxNl07CisgICBpbnQgICAgICAgICAgIGVycjsKKworICAgLyogc29tZWhvdyBpbml0aWFsaXplIGEga2V5ICovCisKKyAgIC8qIGluaXRpYWxpemUgcGVsaWNhbiBtYWMgKi8KKyAgIGlmICgoZXJyID0gcGVsaWNhbl9pbml0KCZwZWxzdGF0ZSwgLyogdGhlIHN0YXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXksICAgICAgIC8qIHVzZXIga2V5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiAgICAgICAgIC8qIGtleSBsZW5ndGggaW4gb2N0ZXRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICkpICE9IENSWVBUX09LKSB7CisgICAgICBwcmludGYoIkVycm9yIGluaXRpYWxpemluZyBQZWxpY2FuOiAlcyIsIAorICAgICAgICAgICAgICBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgfQorCisgICAvKiBNQUMgc29tZSBkYXRhICovCisgICBpZiAoKGVyciA9IHBlbGljYW5fcHJvY2VzcygmcGVsc3RhdGUsICAgICAgIC8qIHRoZSBzdGF0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlbGxvIHdvcmxkIiwgICAvKiBkYXRhIHRvIG1hYyAqLyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMSAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBkYXRhICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJFcnJvciBwcm9jZXNzaW5nIFBlbGljYW46ICVzIiwgCisgICAgICAgICAgICAgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIH0KKworICAgLyogVGVybWluYXRlIHRoZSBNQUMgKi8KKyAgIGlmICgoZXJyID0gcGVsaWNhbl9kb25lKCZwZWxzdGF0ZSwvKiB0aGUgc3RhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZyAgICAgICAvKiB3aGVyZSB0byBzdG9yZSB0aGUgdGFnICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICApKSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJFcnJvciB0ZXJtaW5hdGluZyBQZWxpY2FuOiAlcyIsIAorICAgICAgICAgICAgIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICB9CisKKyAgIC8qIHRhZ1swLi4xNV0gaGFzIHRoZSBNQUMgb3V0cHV0IG5vdyAqLworCisgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQorXGVuZHt2ZXJiYXRpbX0KKworXG15c2VjdGlvbntYQ0JDLU1BQ30KK0FzIG9mIExpYlRvbUNyeXB0IHYxLjE1LCBYQ0JDLU1BQyAoUkZDIDM1NjYpIGhhcyBiZWVuIHByb3ZpZGVkIHRvIHN1cHBvcnQgVExTIGVuY3J5cHRpb24gc3VpdGVzLiAgTGlrZSBPTUFDLCBpdCBjb21wdXRlcyBhIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZQorYnkgdXNpbmcgYSBjaXBoZXIgaW4gQ0JDIG1vZGUuICBJdCBhbHNvIHVzZXMgYSBzaW5nbGUga2V5IHdoaWNoIGl0IGV4cGFuZHMgaW50byB0aGUgcmVxdWlzaXRlIHRocmVlIGtleXMgZm9yIHRoZSBNQUMgZnVuY3Rpb24uICBBIFhDQkMtLU1BQyBzdGF0ZSBpcworaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgorCitcaW5kZXh7eGNiY1xfaW5pdCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHhjYmNfaW5pdCggICAgICAgICB4Y2JjX3N0YXRlICp4Y2JjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLCAKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAga2V5bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBpbml0aWFsaXplIHRoZSBYQ0JDLS1NQUMgc3RhdGUgXHRleHRpdHt4Y2JjfSwgd2l0aCB0aGUga2V5IHNwZWNpZmllZCBpbiBcdGV4dGl0e2tleX0gb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufSBvY3RldHMuICBUaGUgY2lwaGVyIGluZGljYXRlZAorYnkgdGhlIFx0ZXh0aXR7Y2lwaGVyfSBpbmRleCBjYW4gYmUgZWl0aGVyIGEgNjQgb3IgMTI4LS1iaXQgYmxvY2sgY2lwaGVyLiAgVGhpcyB3aWxsIHJldHVybiBcdGV4dGJme0NSWVBUXF9PS30gb24gc3VjY2Vzcy4KKworVG8gcHJvY2VzcyBkYXRhIHRocm91Z2ggWENCQy0tTUFDIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgorCitcaW5kZXh7eGNiY1xfcHJvY2VzcygpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHhjYmNfcHJvY2VzcyggICAgICAgICB4Y2JjX3N0YXRlICpzdGF0ZSwgCisgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4pOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGFkZCB0aGUgbWVzc2FnZSBvY3RldHMgcG9pbnRlZCB0byBieSBcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0gdG8gdGhlIFhDQkMtLU1BQyBzdGF0ZSBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7c3RhdGV9LiAgTGlrZSB0aGUgb3RoZXIgTUFDIGZ1bmN0aW9ucywKK3RoZSBncmFudWxhcml0eSBvZiB0aGUgaW5wdXQgaXMgbm90IGltcG9ydGFudCBidXQgdGhlIG9yZGVyIGlzLiAgVGhpcyB3aWxsIHJldHVybiBcdGV4dGJme0NSWVBUXF9PS30gb24gc3VjY2Vzcy4KKworVG8gY29tcHV0ZSB0aGUgTUFDIHRhZyB2YWx1ZSB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworXGluZGV4e3hjYmNcX2RvbmUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCB4Y2JjX2RvbmUoICAgeGNiY19zdGF0ZSAqc3RhdGUsIAorICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIHJldHJpZXZlIHRoZSBYQ0JDLS1NQUMgdGFnIGZyb20gdGhlIHN0YXRlIHBvaW50ZWQgdG8gYnkgXHRleHRpdHtzdGF0ZX0sIGFuZCBzdG9yZSBpdCBpbiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSBcdGV4dGl0e291dH0uICBUaGUgXHRleHRpdHtvdXRsZW59IHBhcmFtZXRlcgorc3BlY2lmaWVzIHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGRlc3RpbmF0aW9uIGJ1ZmZlciwgYW5kIGlzIHVwZGF0ZWQgdG8gaG9sZCB0aGUgZmluYWwgc2l6ZSBvZiB0aGUgdGFnIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMuICBUaGlzIHdpbGwgcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX09LfSBvbiBzdWNjZXNzLgorCitIZWxwZXIgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBtYWtlIHBhcnNpbmcgbWVtb3J5IGJ1ZmZlcnMgYW5kIGZpbGVzIGVhc2llci4gIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBwcm92aWRlZDoKKworXGluZGV4e3hjYmNcX21lbW9yeSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHhjYmNfbWVtb3J5KAorICAgICAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICBrZXlsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB3aWxsIGNvbXB1dGUgdGhlIFhDQkMtLU1BQyBvZiBcdGV4dGl0e21zZ2xlbn0gYnl0ZXMgb2YgXHRleHRpdHttc2d9LCB1c2luZyB0aGUga2V5IFx0ZXh0aXR7a2V5fSBvZiBsZW5ndGggXHRleHRpdHtrZXlsZW59IGJ5dGVzLCBhbmQgdGhlIGNpcGhlcgorc3BlY2lmaWVkIGJ5IHRoZSBcdGV4dGl0e2NpcGhlcn0ndGggZW50cnkgaW4gdGhlIGNpcGhlclxfZGVzY3JpcHRvciB0YWJsZS4gIEl0IHdpbGwgc3RvcmUgdGhlIE1BQyBpbiBcdGV4dGl0e291dH0gd2l0aCB0aGUgc2FtZSBydWxlcyBhcyB4Y2JjXF9kb25lKCkuCisKK1RvIHhjYmMgYSBmaWxlIHVzZQorXGluZGV4e3hjYmNcX2ZpbGUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCB4Y2JjX2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLCAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworV2hpY2ggd2lsbCBYQ0JDLS1NQUMgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgXHRleHRpdHtmaWxlbmFtZX0gdXNpbmcgdGhlIGtleSBcdGV4dGl0e2tleX0gb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufSBieXRlcywgYW5kIHRoZSBjaXBoZXIgCitzcGVjaWZpZWQgYnkgdGhlIFx0ZXh0aXR7Y2lwaGVyfSd0aCBlbnRyeSBpbiB0aGUgY2lwaGVyXF9kZXNjcmlwdG9yIHRhYmxlLiAgSXQgd2lsbCBzdG9yZSB0aGUgTUFDIGluIFx0ZXh0aXR7b3V0fSB3aXRoIHRoZSBzYW1lIHJ1bGVzIGFzIHhjYmNcX2RvbmUoKS4KKworCitUbyB0ZXN0IFhDQkMtLU1BQyBmb3IgUkZDIDM1NjYgY29tcGxpYW5jZSB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworXGluZGV4e3hjYmNcX3Rlc3QoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCB4Y2JjX3Rlc3Qodm9pZCk7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX09LfSBvbiBzdWNjZXNzLiAgVGhpcyByZXF1aXJlcyB0aGUgQUVTIG9yIFJpam5kYWVsIGRlc2NyaXB0b3IgYmUgcHJldmlvdXNseSByZWdpc3RlcmVkLCBvdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIAorXHRleHRiZntDUllQVFxfTk9QfS4gCisKK1xteXNlY3Rpb257RjktLU1BQ30KK1RoZSBGOS0tTUFDIGlzIHlldCBhbm90aGVyIENCQy0tTUFDIHZhcmlhbnQgcHJvcG9zZWQgZm9yIHRoZSAzR1BQIHN0YW5kYXJkLiAgT3JpZ2luYWxseSBzcGVjaWZpZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBLQVNVTUkgYmxvY2sgY2lwaGVyLCBpdCBjYW4gYWxzbyBiZSB1c2VkCit3aXRoIG90aGVyIGNpcGhlcnMuICBGb3IgTGliVG9tQ3J5cHQsIHRoZSBGOS0tTUFDIGNvZGUgY2FuIHVzZSBhbnkgY2lwaGVyLiAgCisKK1xzdWJzZWN0aW9ue1VzYWdlIE5vdGljZX0KK0Y5LS1NQUMgZGlmZmVycyBzbGlnaHRseSBmcm9tIHRoZSBvdGhlciBNQUMgZnVuY3Rpb25zIGluIHRoYXQgaXQgcmVxdWlyZXMgdGhlIGNhbGxlciB0byBwZXJmb3JtIHRoZSBmaW5hbCBtZXNzYWdlIHBhZGRpbmcuICBUaGUgcGFkZGluZyBxdWl0ZSBzaW1wbHkgaXMgYSBkaXJlY3Rpb24KK2JpdCBmb2xsb3dlZCBieSBhIDEgYml0IGFuZCBlbm91Z2ggemVyb3MgdG8gbWFrZSB0aGUgbWVzc2FnZSBhIG11bHRpcGxlIG9mIHRoZSBjaXBoZXIgYmxvY2sgc2l6ZS4gIElmIHRoZSBtZXNzYWdlIGlzIGJ5dGUgYWxpZ25lZCwgdGhlIHBhZGRpbmcgdGFrZXMgb24gdGhlIGZvcm0gb2YgCithIHNpbmdsZSAweDQwIG9yIDB4QzAgYnl0ZSBmb2xsb3dlZCBieSBlbm91Z2ggMHgwMCBieXRlcyB0byBtYWtlIHRoZSBtZXNzYWdlIHByb3BlciBtdWx0aXBsZS4gIAorCitJZiB0aGUgdXNlciBzaW1wbHkgd2FudHMgYSBNQUMgZnVuY3Rpb24gKGhpbnQ6IHVzZSBPTUFDKSBwYWRkaW5nIHdpdGggYSBzaW5nbGUgMHg0MCBieXRlIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBzZWN1cml0eSBwdXJwb3NlcyBhbmQgc3RpbGwgYmUgcmVhc29uYWJseSBjb21wYXRpYmxlCit3aXRoIEY5LS1NQUMuCisKK1xzdWJzZWN0aW9ue0Y5LS1NQUMgRnVuY3Rpb25zfQorQSBGOS0tTUFDIHN0YXRlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKK1xpbmRleHtmOVxfaW5pdCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGY5X2luaXQoICAgICAgICAgICBmOV9zdGF0ZSAqZjksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLCAKKyAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBrZXlsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGluaXRpYWxpemUgdGhlIEY5LS1NQUMgc3RhdGUgXHRleHRpdHtmOX0sIHdpdGggdGhlIGtleSBzcGVjaWZpZWQgaW4gXHRleHRpdHtrZXl9IG9mIGxlbmd0aCBcdGV4dGl0e2tleWxlbn0gb2N0ZXRzLiAgVGhlIGNpcGhlciBpbmRpY2F0ZWQKK2J5IHRoZSBcdGV4dGl0e2NpcGhlcn0gaW5kZXggY2FuIGJlIGVpdGhlciBhIDY0IG9yIDEyOC0tYml0IGJsb2NrIGNpcGhlci4gIFRoaXMgd2lsbCByZXR1cm4gXHRleHRiZntDUllQVFxfT0t9IG9uIHN1Y2Nlc3MuCisKK1RvIHByb2Nlc3MgZGF0YSB0aHJvdWdoIEY5LS1NQUMgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CitcaW5kZXh7ZjlcX3Byb2Nlc3MoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBmOV9wcm9jZXNzKCAgICAgICAgICAgZjlfc3RhdGUgKnN0YXRlLCAKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBhZGQgdGhlIG1lc3NhZ2Ugb2N0ZXRzIHBvaW50ZWQgdG8gYnkgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IHRvIHRoZSBGOS0tTUFDIHN0YXRlIHBvaW50ZWQgdG8gYnkgXHRleHRpdHtzdGF0ZX0uICBMaWtlIHRoZSBvdGhlciBNQUMgZnVuY3Rpb25zLAordGhlIGdyYW51bGFyaXR5IG9mIHRoZSBpbnB1dCBpcyBub3QgaW1wb3J0YW50IGJ1dCB0aGUgb3JkZXIgaXMuICBUaGlzIHdpbGwgcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX09LfSBvbiBzdWNjZXNzLgorCitUbyBjb21wdXRlIHRoZSBNQUMgdGFnIHZhbHVlIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgorCitcaW5kZXh7ZjlcX2RvbmUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBmOV9kb25lKCAgICAgZjlfc3RhdGUgKnN0YXRlLCAKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIHJldHJpZXZlIHRoZSBGOS0tTUFDIHRhZyBmcm9tIHRoZSBzdGF0ZSBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7c3RhdGV9LCBhbmQgc3RvcmUgaXQgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtvdXR9LiAgVGhlIFx0ZXh0aXR7b3V0bGVufSBwYXJhbWV0ZXIKK3NwZWNpZmllcyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIsIGFuZCBpcyB1cGRhdGVkIHRvIGhvbGQgdGhlIGZpbmFsIHNpemUgb2YgdGhlIHRhZyB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zLiAgVGhpcyB3aWxsIHJldHVybiAKK1x0ZXh0YmZ7Q1JZUFRcX09LfSBvbiBzdWNjZXNzLgorCitIZWxwZXIgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB0byBtYWtlIHBhcnNpbmcgbWVtb3J5IGJ1ZmZlcnMgYW5kIGZpbGVzIGVhc2llci4gIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBwcm92aWRlZDoKKworXGluZGV4e2Y5XF9tZW1vcnkoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBmOV9tZW1vcnkoCisgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLCAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcgIGtleWxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIHdpbGwgY29tcHV0ZSB0aGUgRjktLU1BQyBvZiBcdGV4dGl0e21zZ2xlbn0gYnl0ZXMgb2YgXHRleHRpdHttc2d9LCB1c2luZyB0aGUga2V5IFx0ZXh0aXR7a2V5fSBvZiBsZW5ndGggXHRleHRpdHtrZXlsZW59IGJ5dGVzLCBhbmQgdGhlIGNpcGhlcgorc3BlY2lmaWVkIGJ5IHRoZSBcdGV4dGl0e2NpcGhlcn0ndGggZW50cnkgaW4gdGhlIGNpcGhlclxfZGVzY3JpcHRvciB0YWJsZS4gIEl0IHdpbGwgc3RvcmUgdGhlIE1BQyBpbiBcdGV4dGl0e291dH0gd2l0aCB0aGUgc2FtZSBydWxlcyBhcyBmOVxfZG9uZSgpLgorCitUbyBGOS0tTUFDIGEgZmlsZSB1c2UKK1xpbmRleHtmOVxfZmlsZSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGY5X2ZpbGUoCisgICAgICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLCAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworV2hpY2ggd2lsbCBGOS0tTUFDIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGZpbGUgc3BlY2lmaWVkIGJ5IFx0ZXh0aXR7ZmlsZW5hbWV9IHVzaW5nIHRoZSBrZXkgXHRleHRpdHtrZXl9IG9mIGxlbmd0aCBcdGV4dGl0e2tleWxlbn0gYnl0ZXMsIGFuZCB0aGUgY2lwaGVyIAorc3BlY2lmaWVkIGJ5IHRoZSBcdGV4dGl0e2NpcGhlcn0ndGggZW50cnkgaW4gdGhlIGNpcGhlclxfZGVzY3JpcHRvciB0YWJsZS4gIEl0IHdpbGwgc3RvcmUgdGhlIE1BQyBpbiBcdGV4dGl0e291dH0gd2l0aCB0aGUgc2FtZSBydWxlcyBhcyBmOVxfZG9uZSgpLgorCisKK1RvIHRlc3QgZjktLU1BQyBmb3IgUkZDIDM1NjYgY29tcGxpYW5jZSB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKKworXGluZGV4e2Y5XF90ZXN0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZjlfdGVzdCh2b2lkKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCByZXR1cm4gXHRleHRiZntDUllQVFxfT0t9IG9uIHN1Y2Nlc3MuICBUaGlzIHJlcXVpcmVzIHRoZSBBRVMgb3IgUmlqbmRhZWwgZGVzY3JpcHRvciBiZSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQsIG90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gCitcdGV4dGJme0NSWVBUXF9OT1B9LiAKKworXGNoYXB0ZXJ7UHNldWRvLVJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yc30KK1xteXNlY3Rpb257Q29yZSBGdW5jdGlvbnN9CitUaGUgbGlicmFyeSBwcm92aWRlcyBhbiBhcnJheSBvZiBjb3JlIGZ1bmN0aW9ucyBmb3IgUHNldWRvLVJhbmRvbSBOdW1iZXIgR2VuZXJhdG9ycyAoUFJOR3MpIGFzIHdlbGwuICBBIGNyeXB0b2dyYXBoaWMgUFJORyBpcwordXNlZCB0byBleHBhbmQgYSBzaG9ydGVyIGJpdCBzdHJpbmcgaW50byBhIGxvbmdlciBiaXQgc3RyaW5nLiAgUFJOR3MgYXJlIHVzZWQgd2hlcmV2ZXIgcmFuZG9tIGRhdGEgaXMgcmVxdWlyZWQgc3VjaCBhcyBQdWJsaWMgS2V5IChQSykKK2tleSBnZW5lcmF0aW9uLiAgVGhlcmUgaXMgYSB1bml2ZXJzYWwgc3RydWN0dXJlIGNhbGxlZCBcdGV4dGl0e3BybmdcX3N0YXRlfS4gIFRvIGluaXRpYWxpemUgYSBQUk5HIGNhbGw6CitcaW5kZXh7UFJORyBzdGFydH0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBYWFhfc3RhcnQocHJuZ19zdGF0ZSAqcHJuZyk7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgc2V0dXAgdGhlIFBSTkcgZm9yIGZ1dHVyZSB1c2UgYW5kIG5vdCBzZWVkIGl0LiAgSW4gb3JkZXIgZm9yIHRoZSBQUk5HIHRvIGJlIGNyeXB0b2dyYXBoaWNhbGx5IHVzZWZ1bCB5b3UgbXVzdCBnaXZlIGl0IAorZW50cm9weS4gIElkZWFsbHkgeW91J2QgaGF2ZSBzb21lIE9TIGxldmVsIHNvdXJjZSB0byB0YXAgbGlrZSBpbiBVTklYLiAgVG8gYWRkIGVudHJvcHkgdG8gdGhlIFBSTkcgY2FsbDoKK1xpbmRleHtQUk5HIGFkZFxfZW50cm9weX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBYWFhfYWRkX2VudHJvcHkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcpOworXGVuZHt2ZXJiYXRpbX0KK1doaWNoIHJldHVybnMge1xiZiBDUllQVFxfT0t9IGlmIHRoZSBlbnRyb3B5IHdhcyBhY2NlcHRlZC4gIE9uY2UgeW91IHRoaW5rIHlvdSBoYXZlIGVub3VnaCBlbnRyb3B5IHlvdSBjYWxsIGFub3RoZXIKK2Z1bmN0aW9uIHRvIHB1dCB0aGUgZW50cm9weSBpbnRvIGFjdGlvbi4KK1xpbmRleHtQUk5HIHJlYWR5fQorXGJlZ2lue3ZlcmJhdGltfQoraW50IFhYWF9yZWFkeShwcm5nX3N0YXRlICpwcm5nKTsKK1xlbmR7dmVyYmF0aW19CisKK1doaWNoIHJldHVybnMge1xiZiBDUllQVFxfT0t9IGlmIGl0IGlzIHJlYWR5LiAgRmluYWxseSB0byBhY3R1YWxseSByZWFkIGJ5dGVzIGNhbGw6CitcaW5kZXh7UFJORyByZWFkfQorXGJlZ2lue3ZlcmJhdGltfQordW5zaWduZWQgbG9uZyBYWFhfcmVhZCh1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcpOworXGVuZHt2ZXJiYXRpbX0KKworV2hpY2ggcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgZnJvbSB0aGUgUFJORy4gIFdoZW4geW91IGFyZSBmaW5pc2hlZCB3aXRoIGEgUFJORyBzdGF0ZSB5b3UgY2FsbAordGhlIGZvbGxvd2luZy4KKworXGluZGV4e1BSTkcgZG9uZX0KK1xiZWdpbnt2ZXJiYXRpbX0KK3ZvaWQgWFhYX2RvbmUocHJuZ19zdGF0ZSAqcHJuZyk7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgdGVybWluYXRlIGEgUFJORyBzdGF0ZSBhbmQgZnJlZSBhbnkgbWVtb3J5IChpZiBhbnkpIGFsbG9jYXRlZC4gIFRvIGV4cG9ydCBhIFBSTkcgc3RhdGUKK3NvIHRoYXQgeW91IGNhbiBsYXRlciByZXN1bWUgdGhlIFBSTkcgY2FsbCB0aGUgZm9sbG93aW5nLgorCitcaW5kZXh7UFJORyBleHBvcnR9CitcYmVnaW57dmVyYmF0aW19CitpbnQgWFhYX2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcpOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIHdyaXRlIGEgXHRleHRpdHtQUk5HIHN0YXRlfSB0byB0aGUgYnVmZmVyIFx0ZXh0aXR7b3V0fSBvZiBsZW5ndGggXHRleHRpdHtvdXRsZW59IGJ5dGVzLiAgVGhlIGlkZWEgb2YgCit0aGUgZXhwb3J0IGlzIG1lYW50IHRvIGJlIHVzZWQgYXMgYSBcdGV4dGl0e3NlZWQgZmlsZX0uICBUaGF0IGlzLCB3aGVuIHRoZSBwcm9ncmFtIHN0YXJ0cyB1cCB0aGVyZSB3aWxsIG5vdCBsaWtlbHkKK2JlIHRoYXQgbXVjaCBlbnRyb3B5IGF2YWlsYWJsZS4gICBUbyBpbXBvcnQgYSBzdGF0ZSB0byBzZWVkIGEgUFJORyBjYWxsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24uCisKK1xpbmRleHtQUk5HIGltcG9ydH0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBYWFhfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcpOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGNhbGwgdGhlIHN0YXJ0IGFuZCBhZGRcX2VudHJvcHkgZnVuY3Rpb25zIG9mIHRoZSBnaXZlbiBQUk5HLiAgSXQgd2lsbCB1c2UgdGhlIHN0YXRlIGluCitcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0gYXMgdGhlIGluaXRpYWwgc2VlZC4gIFlvdSBtdXN0IHBhc3MgdGhlIHNhbWUgc2VlZCBsZW5ndGggYXMgd2FzIGV4cG9ydGVkCitieSB0aGUgY29ycmVzcG9uZGluZyBleHBvcnQgZnVuY3Rpb24uCisKK05vdGUgdGhhdCBpbXBvcnRpbmcgYSBzdGF0ZSB3aWxsIG5vdCBcdGV4dGl0e3Jlc3VtZX0gdGhlIFBSTkcgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZi4gIFRoYXQgaXMsIGlmIHlvdSBleHBvcnQKK2Egc3RhdGUsIGVtaXQgKHNheSkgOCBieXRlcyBhbmQgdGhlbiBpbXBvcnQgdGhlIHByZXZpb3VzbHkgZXhwb3J0ZWQgc3RhdGUgdGhlIG5leHQgOCBieXRlcyB3aWxsIG5vdCAKK3NwZWNpZmljYWxseSBlcXVhbCB0aGUgOCBieXRlcyB5b3UgZ2VuZXJhdGVkIHByZXZpb3VzbHkuCisKK1doZW4gYSBwcm9ncmFtIGlzIGZpcnN0IGV4ZWN1dGVkIHRoZSBub3JtYWwgY291cnNlIG9mIG9wZXJhdGlvbiBpczoKKworXGJlZ2lue2VudW1lcmF0ZX0KKyAgIFxpdGVtIEdhdGhlciBlbnRyb3B5IGZyb20geW91ciBzb3VyY2VzIGZvciBhIGdpdmVuIHBlcmlvZCBvZiB0aW1lIG9yIG51bWJlciBvZiBldmVudHMuCisgICBcaXRlbSBTdGFydCwgdXNlIHlvdXIgZW50cm9weSB2aWEgYWRkXF9lbnRyb3B5IGFuZCByZWFkeSB0aGUgUFJORyB5b3Vyc2VsZi4KK1xlbmR7ZW51bWVyYXRlfQorCitXaGVuIHlvdXIgcHJvZ3JhbSBpcyBmaW5pc2hlZCB5b3Ugc2ltcGx5IGNhbGwgdGhlIGV4cG9ydCBmdW5jdGlvbiBhbmQgc2F2ZSB0aGUgc3RhdGUgdG8gYSBtZWRpdW0gKGRpc2ssCitmbGFzaCBtZW1vcnksIGV0YykuICBUaGUgbmV4dCB0aW1lIHlvdXIgYXBwbGljYXRpb24gc3RhcnRzIHVwIHlvdSBjYW4gZGV0ZWN0IHRoZSBzdGF0ZSwgZmVlZCBpdCB0byB0aGUgCitpbXBvcnQgZnVuY3Rpb24gYW5kIGdvIG9uIHlvdXIgd2F5LiAgSXQgaXMgaWRlYWwgdGhhdCAoYXMgc29vbiBhcyBwb3NzaWJsZSkgYWZ0ZXIgc3RhcnQgdXAgeW91IGV4cG9ydCBhCitmcmVzaCBzdGF0ZS4gIFRoaXMgaGVscHMgaW4gdGhlIGNhc2UgdGhhdCB0aGUgcHJvZ3JhbSBhYm9ydHMgb3IgdGhlIG1hY2hpbmUgaXMgcG93ZXJlZCBkb3duIHdpdGhvdXQKK2JlaW5nIGdpdmVuIGEgY2hhbmNlIHRvIGV4aXQgcHJvcGVybHkuICAKKworTm90ZSB0aGF0IGV2ZW4gaWYgeW91IGhhdmUgYSBzdGF0ZSB0byBpbXBvcnQgaXQgaXMgaW1wb3J0YW50IHRvIGFkZCBuZXcgZW50cm9weSB0byB0aGUgc3RhdGUuICBIb3dldmVyLAordGhlcmUgaXMgbGVzcyBwcmVzc3VyZSB0byBkbyBzby4gIAorCitUbyB0ZXN0IGEgUFJORyBmb3Igb3BlcmF0aW9uYWwgY29uZm9ybWl0eSBjYWxsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zLgorCitcaW5kZXh7UFJORyB0ZXN0fQorXGJlZ2lue3ZlcmJhdGltfQoraW50IFhYWF90ZXN0KHZvaWQpOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIHJldHVybiBcdGV4dGJme0NSWVBUXF9PS30gaWYgUFJORyBpcyBvcGVyYXRpbmcgcHJvcGVybHkuCisKK1xzdWJzZWN0aW9ue1JlbWFya3N9CisKK0l0IGlzIHBvc3NpYmxlIHRvIGJlIGFkZGluZyBlbnRyb3B5IGFuZCByZWFkaW5nIGZyb20gYSBQUk5HIGF0IHRoZSBzYW1lIHRpbWUuICBGb3IgZXhhbXBsZSwgaWYgeW91IGZpcnN0IHNlZWQgdGhlIFBSTkcKK2FuZCBjYWxsIHJlYWR5KCkgeW91IGNhbiBub3cgcmVhZCBmcm9tIGl0LiAgWW91IGNhbiBhbHNvIGtlZXAgYWRkaW5nIG5ldyBlbnRyb3B5IHRvIGl0LiAgVGhlIG5ldyBlbnRyb3B5IHdpbGwgbm90IGJlIHVzZWQKK2luIHRoZSBQUk5HIHVudGlsIHJlYWR5KCkgaXMgY2FsbGVkIGFnYWluLiAgVGhpcyBhbGxvd3MgdGhlIFBSTkcgdG8gYmUgdXNlZCBhbmQgcmUtc2VlZGVkIGF0IHRoZSBzYW1lIHRpbWUuICBObyByZWFsIGVycm9yIAorY2hlY2tpbmcgaXMgZ3VhcmFudGVlZCB0byBzZWUgaWYgdGhlIGVudHJvcHkgaXMgc3VmZmljaWVudCwgb3IgaWYgdGhlIFBSTkcgaXMgZXZlbiBpbiBhIHJlYWR5IHN0YXRlIGJlZm9yZSByZWFkaW5nLgorCitcc3Vic2VjdGlvbntFeGFtcGxlfQorQmVsb3cgaXMgYSBzaW1wbGUgc25pcHBldCB0byByZWFkIDEwIGJ5dGVzIGZyb20gWWFycm93LiAgSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGlzIHNuaXBwZXQgaXMge1xiZiBOT1R9IHNlY3VyZSBzaW5jZSAKK3RoZSBlbnRyb3B5IGFkZGVkIGlzIG5vdCByYW5kb20uCisKK1xiZWdpbnt2ZXJiYXRpbX0KKyNpbmNsdWRlIDx0b21jcnlwdC5oPgoraW50IG1haW4odm9pZCkKK3sKKyAgIHBybmdfc3RhdGUgcHJuZzsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzEwXTsKKyAgIGludCBlcnI7CisgICAKKyAgIC8qIHN0YXJ0IGl0ICovCisgICBpZiAoKGVyciA9IHlhcnJvd19zdGFydCgmcHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICBwcmludGYoIlN0YXJ0IGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgfQorICAgLyogYWRkIGVudHJvcHkgKi8KKyAgIGlmICgoZXJyID0geWFycm93X2FkZF9lbnRyb3B5KCJoZWxsbyB3b3JsZCIsIDExLCAmcHJuZykpIAorICAgICAgICE9IENSWVBUX09LKSB7CisgICAgICBwcmludGYoIkFkZF9lbnRyb3B5IGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgfQorICAgLyogcmVhZHkgYW5kIHJlYWQgKi8KKyAgIGlmICgoZXJyID0geWFycm93X3JlYWR5KCZwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHByaW50ZigiUmVhZHkgZXJyb3I6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICB9CisgICBwcmludGYoIlJlYWQgJWx1IGJ5dGVzIGZyb20geWFycm93XG4iLCAKKyAgICAgICAgICB5YXJyb3dfcmVhZChidWYsIHNpemVvZihidWYpLCAmcHJuZykpOworICAgcmV0dXJuIDA7Cit9CitcZW5ke3ZlcmJhdGltfQorCitcbXlzZWN0aW9ue1BSTkcgRGVzY3JpcHRvcnN9CitcaW5kZXh7UFJORyBEZXNjcmlwdG9yfQorUFJOR3MgaGF2ZSBkZXNjcmlwdG9ycyB0aGF0IGFsbG93IHBsdWdpbiBkcml2ZW4gZnVuY3Rpb25zIHRvIGJlIGNyZWF0ZWQgdXNpbmcgUFJOR3MuIFRoZSBwbHVnaW4gZGVzY3JpcHRvcnMgYXJlIHN0b3JlZCBpbiB0aGUgc3RydWN0dXJlIFx0ZXh0aXR7cHJuZ1xfZGVzY3JpcHRvcn0uICBUaGUgCitmb3JtYXQgb2YgYW4gZWxlbWVudCBpczoKK1xiZWdpbnt2ZXJiYXRpbX0KK3N0cnVjdCBfcHJuZ19kZXNjcmlwdG9yIHsKKyAgICBjaGFyICpuYW1lOworICAgIGludCAgZXhwb3J0X3NpemU7ICAgIC8qIHNpemUgaW4gYnl0ZXMgb2YgZXhwb3J0ZWQgc3RhdGUgKi8KKworICAgIGludCAoKnN0YXJ0KSAgICAgIChwcm5nX3N0YXRlICopOworCisgICAgaW50ICgqYWRkX2VudHJvcHkpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgbG9uZywgCisgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKik7CisKKyAgICBpbnQgKCpyZWFkeSkgICAgICAocHJuZ19zdGF0ZSAqKTsKKworICAgIHVuc2lnbmVkIGxvbmcgKCpyZWFkKSh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcgbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqKTsKKworICAgIHZvaWQgKCpkb25lKShwcm5nX3N0YXRlICopOworCisgICAgaW50ICgqZXhwb3J0KSh1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcgKiwgcHJuZ19zdGF0ZSAqKTsKKworICAgIGludCAoKmltcG9ydCkoY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBsb25nLCBwcm5nX3N0YXRlICopOworCisgICAgaW50ICgqdGVzdCkodm9pZCk7Cit9OworXGVuZHt2ZXJiYXRpbX0KKworVG8gZmluZCBhIFBSTkcgaW4gdGhlIGRlc2NyaXB0b3IgdGFibGUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjYW4gYmUgdXNlZDoKK1xpbmRleHtmaW5kXF9wcm5nKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZmluZF9wcm5nKGNvbnN0IGNoYXIgKm5hbWUpOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgd2lsbCBzZWFyY2ggdGhlIFBSTkcgZGVzY3JpcHRvciB0YWJsZSBmb3IgdGhlIFBSTkcgbmFtZWQgXHRleHRpdHtuYW1lfS4gIEl0IHdpbGwgcmV0dXJuIC0xIGlmIHRoZSBQUk5HIGlzIG5vdCBmb3VuZCwgb3RoZXJ3aXNlLCBpdCByZXR1cm5zCit0aGUgaW5kZXggaW50byB0aGUgZGVzY3JpcHRvciB0YWJsZS4KKworSnVzdCBsaWtlIHRoZSBjaXBoZXJzIGFuZCBoYXNoZXMsIHlvdSBtdXN0IHJlZ2lzdGVyIHlvdXIgcHJuZyBiZWZvcmUgeW91IGNhbiB1c2UgaXQuICBUaGUgdHdvIGZ1bmN0aW9ucyBwcm92aWRlZCB3b3JrIGV4YWN0bHkgYXMgdGhvc2UgZm9yIHRoZSBjaXBoZXIgcmVnaXN0cnkgZnVuY3Rpb25zLiAgCitUaGV5IGFyZSB0aGUgZm9sbG93aW5nOgorXGluZGV4e3JlZ2lzdGVyXF9wcm5nKCl9IFxpbmRleHt1bnJlZ2lzdGVyXF9wcm5nKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcmVnaXN0ZXJfcHJuZyhjb25zdCBzdHJ1Y3QgX3BybmdfZGVzY3JpcHRvciAqcHJuZyk7CitpbnQgdW5yZWdpc3Rlcl9wcm5nKGNvbnN0IHN0cnVjdCBfcHJuZ19kZXNjcmlwdG9yICpwcm5nKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoZSByZWdpc3RlciBmdW5jdGlvbiB3aWxsIHJlZ2lzdGVyIHRoZSBQUk5HLCBhbmQgcmV0dXJuIHRoZSBpbmRleCBpbnRvIHRoZSB0YWJsZSB3aGVyZSBpdCB3YXMgcGxhY2VkIChvciAtMSBmb3IgZXJyb3IpLiAgSXQgd2lsbCBhdm9pZCByZWdpc3RlcmluZyB0aGUgc2FtZQorZGVzY3JpcHRvciB0d2ljZSwgYW5kIHdpbGwgcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBwbGFjZW1lbnQgaW4gdGhlIHRhYmxlIGlmIHRoZSBjYWxsZXIgYXR0ZW1wdHMgdG8gcmVnaXN0ZXIgaXQgbW9yZSB0aGFuIG9uY2UuICBUaGUgdW5yZWdpc3RlciBmdW5jdGlvbgord2lsbCByZXR1cm4gXHRleHRiZntDUllQVFxfT0t9IGlmIHRoZSBQUk5HIHdhcyBmb3VuZCBhbmQgcmVtb3ZlZC4gIE90aGVyd2lzZSwgaXQgcmV0dXJucyBcdGV4dGJme0NSWVBUXF9FUlJPUn0uCisKK1xzdWJzZWN0aW9ue1BSTkdzIFByb3ZpZGVkfQorXGJlZ2lue2ZpZ3VyZX1baGVyZV0KK1xiZWdpbntjZW50ZXJ9CitcYmVnaW57c21hbGx9CitcYmVnaW57dGFidWxhcn17fGN8Y3xsfH0KK1xobGluZSBcdGV4dGJme05hbWV9ICYgXHRleHRiZntEZXNjcmlwdG9yfSAmIFx0ZXh0YmZ7VXNhZ2V9IFxcCitcaGxpbmUgWWFycm93ICYgeWFycm93XF9kZXNjICYgRmFzdCBzaG9ydC10ZXJtIFBSTkcgXFwKK1xobGluZSBGb3J0dW5hICYgZm9ydHVuYVxfZGVzYyAmIEZhc3QgbG9uZy10ZXJtIFBSTkcgKHJlY29tbWVuZGVkKSBcXAorXGhsaW5lIFJDNCAmIHJjNFxfZGVzYyAmIFN0cmVhbSBDaXBoZXIgXFwKK1xobGluZSBTT0JFUi0xMjggJiBzb2JlcjEyOFxfZGVzYyAmIFN0cmVhbSBDaXBoZXIgKGFsc28gdmVyeSBmYXN0IFBSTkcpIFxcCitcaGxpbmUKK1xlbmR7dGFidWxhcn0KK1xlbmR7c21hbGx9CitcZW5ke2NlbnRlcn0KK1xjYXB0aW9ue0xpc3Qgb2YgUHJvdmlkZWQgUFJOR3N9CitcZW5ke2ZpZ3VyZX0KKworXHN1YnN1YnNlY3Rpb257WWFycm93fQorWWFycm93IGlzIGZhc3QgUFJORyBtZWFudCB0byBjb2xsZWN0IGFuIHVuc3BlY2lmaWVkIGFtb3VudCBvZiBlbnRyb3B5IGZyb20gc291cmNlcyAKKyhrZXlib2FyZCwgbW91c2UsIGludGVycnVwdHMsIGV0YyksIGFuZCBwcm9kdWNlIGFuIHVuYm91bmRlZCBzdHJpbmcgb2YgcmFuZG9tIGJ5dGVzLiAgCisKK1x0ZXh0aXR7Tm90ZTp9IFRoaXMgUFJORyBpcyBzdGlsbCBzZWN1cmUgZm9yIG1vc3QgdGFza3MgYnV0IGlzIG5vIGxvbmdlciByZWNvbW1lbmRlZC4gIFVzZXJzCitzaG91bGQgdXNlIEZvcnR1bmEgaW5zdGVhZC4KKworXHN1YnN1YnNlY3Rpb257Rm9ydHVuYX0KKworRm9ydHVuYSBpcyBhIGZhc3QgYXR0YWNrIHRvbGVyYW50IGFuZCBtb3JlIHRob3JvdWdobHkgZGVzaWduZWQgUFJORyBzdWl0YWJsZSBmb3IgbG9uZyB0ZXJtCit1c2FnZS4gIEl0IGlzIGZhc3RlciB0aGFuIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIFlhcnJvd1xmb290bm90ZXtZYXJyb3cgaGFzIGJlZW4gaW1wbGVtZW50ZWQKK3RvIHdvcmsgd2l0aCBtb3N0IGNpcGhlciBhbmQgaGFzaCBjb21ib3MgYmFzZWQgb24gd2hpY2ggeW91IGhhdmUgY2hvc2VuIHRvIGJ1aWxkIGludG8gdGhlIGxpYnJhcnkufSB3aGlsZQorcHJvdmlkaW5nIG1vcmUgc2VjdXJpdHkuICAKKworRm9ydHVuYSBpcyBzbGlnaHRseSBsZXNzIGZsZXhpYmxlIHRoYW4gWWFycm93IGluIHRoZSBzZW5zZSB0aGF0IGl0IG9ubHkgd29ya3Mgd2l0aCB0aGUgQUVTIGJsb2NrIGNpcGhlciAKK2FuZCBTSEEtLTI1NiBoYXNoIGZ1bmN0aW9uLiAgVGVjaG5pY2FsbHksIEZvcnR1bmEgd2lsbCB3b3JrIHdpdGggYW55IGJsb2NrIGNpcGhlciB0aGF0IGFjY2VwdHMgYSAyNTYtLWJpdAora2V5LCBhbmQgYW55IGhhc2ggdGhhdCBwcm9kdWNlcyBhdCBsZWFzdCBhIDI1Ni0tYml0IG91dHB1dC4gIEhvd2V2ZXIsIHRvIG1ha2UgdGhlIGltcGxlbWVudGF0aW9uIHNpbXBsZXIKK2l0IGhhcyBiZWVuIGZpeGVkIHRvIHRob3NlIGNob2ljZXMuCisKK0ZvcnR1bmEgaXMgbW9yZSBzZWN1cmUgdGhhbiBZYXJyb3cgaW4gdGhlIHNlbnNlIHRoYXQgYXR0YWNrZXJzIHdobyBsZWFybiBwYXJ0cyBvZiB0aGUgZW50cm9weSBiZWluZyAKK2FkZGVkIHRvIHRoZSBQUk5HIGxlYXJuIGZhciBsZXNzIGFib3V0IHRoZSBzdGF0ZSB0aGFuIHRoYXQgb2YgWWFycm93LiAgV2l0aG91dCBnZXR0aW5nIGludG8gdG8gbWFueQorZGV0YWlscyBGb3J0dW5hIGhhcyB0aGUgYWJpbGl0eSB0byByZWNvdmVyIGZyb20gc3RhdGUgZGV0ZXJtaW5hdGlvbiBhdHRhY2tzIHdoZXJlIHRoZSBhdHRhY2tlciBzdGFydHMKK3RvIGxlYXJuIGluZm9ybWF0aW9uIGZyb20gdGhlIFBSTkdzIG91dHB1dCBhYm91dCB0aGUgaW50ZXJuYWwgc3RhdGUuICBZYXJyb3cgb24gdGhlIG90aGVyIGhhbmQsIGNhbm5vdCAKK3JlY292ZXIgZnJvbSB0aGF0IHByb2JsZW0gdW50aWwgbmV3IGVudHJvcHkgaXMgYWRkZWQgdG8gdGhlIHBvb2wgYW5kIHB1dCB0byB1c2UgdGhyb3VnaCB0aGUgcmVhZHkoKSBmdW5jdGlvbi4KKworXHN1YnN1YnNlY3Rpb257UkM0fQorCitSQzQgaXMgYW4gb2xkIHN0cmVhbSBjaXBoZXIgdGhhdCBjYW4gYWxzbyBkb3VibGUgZHV0eSBhcyBhIFBSTkcgaW4gYSBwaW5jaC4gIFlvdSBrZXkgUkM0IGJ5CitjYWxsaW5nIGFkZFxfZW50cm9weSgpLCBhbmQgc2V0dXAgdGhlIGtleSBieSBjYWxsaW5nIHJlYWR5KCkuICBZb3UgY2FuIG9ubHkgYWRkIHVwIHRvIDI1NiBieXRlcyB2aWEKK2FkZFxfZW50cm9weSgpLiAgCisKK1doZW4geW91IHJlYWQgZnJvbSBSQzQsIHRoZSBvdXRwdXQgaXMgWE9SJ2VkIGFnYWluc3QgeW91ciBidWZmZXIgeW91IHByb3ZpZGUuICBJbiB0aGlzIG1hbm5lciwgeW91IGNhbiB1c2UgcmM0XF9yZWFkKCkgCithcyBhbiBlbmNyeXB0IChhbmQgZGVjcnlwdCkgZnVuY3Rpb24uICAKKworWW91IHJlYWxseSBzaG91bGQgbm90IHVzZSBSQzQuICBUaGlzIGlzIG5vdCBiZWNhdXNlIFJDNCBpcyB3ZWFrLCAodGhvdWdoIGJpYXNlcyBhcmUga25vd24gdG8gZXhpc3QpIGJ1dCBzaW1wbHkgZHVlIHRvIAordGhlIGZhY3QgdGhhdCBmYXN0ZXIgYWx0ZXJuYXRpdmVzIGV4aXN0LgorCitcc3Vic3Vic2VjdGlvbntTT0JFUi0xMjh9CisKK1NPQkVSLS0xMjggaXMgYSBzdHJlYW0gY2lwaGVyIGRlc2lnbmVkIGJ5IHRoZSBRVUFMQ09NTSBBdXN0cmFsaWEgdGVhbS4gIExpa2UgUkM0LCB5b3Uga2V5IGl0IGJ5IAorY2FsbGluZyBhZGRcX2VudHJvcHkoKS4gIFRoZXJlIGlzIG5vIG5lZWQgdG8gY2FsbCByZWFkeSgpIGZvciB0aGlzIFBSTkcgYXMgaXQgZG9lcyBub3QgZG8gYW55dGhpbmcuICAKKworTm90ZTogdGhpcyBjaXBoZXIgaGFzIHNldmVyYWwgb2RkaXRpZXMgYWJvdXQgaG93IGl0IG9wZXJhdGVzLiAgVGhlIGZpcnN0IGNhbGwgdG8gYWRkXF9lbnRyb3B5KCkgc2V0cyB0aGUgY2lwaGVyJ3Mga2V5LiAgCitFdmVyeSBvdGhlciB0aW1lIGNhbGwgdG8gdGhlIGFkZFxfZW50cm9weSgpIGZ1bmN0aW9uIHNldHMgdGhlIGNpcGhlcidzIElWIHZhcmlhYmxlLiAgVGhlIElWIG1lY2hhbmlzbSBhbGxvd3MgeW91IHRvIAorZW5jcnlwdCBzZXZlcmFsIG1lc3NhZ2VzIHdpdGggdGhlIHNhbWUga2V5LCBhbmQgbm90IHJlLS11c2UgdGhlIHNhbWUga2V5IG1hdGVyaWFsLgorCitVbmxpa2UgWWFycm93IGFuZCBGb3J0dW5hLCBhbGwgb2YgdGhlIGVudHJvcHkgKGFuZCBoZW5jZSBzZWN1cml0eSkgb2YgdGhpcyBhbGdvcml0aG0gcmVzdHMgaW4gdGhlIGRhdGEKK3lvdSBwYXNzIGl0IG9uIHRoZSBcdGV4dGJme2ZpcnN0fSBjYWxsIHRvIGFkZFxfZW50cm9weSgpLiAgQWxsIGJ1ZmZlcnMgc2VudCB0byBhZGRcX2VudHJvcHkoKSBtdXN0IGhhdmUgYSBsZW5ndGgKK3RoYXQgaXMgYSBtdWx0aXBsZSBvZiBmb3VyIGJ5dGVzLgorCitMaWtlIFJDNCwgdGhlIG91dHB1dCBvZiBTT0JFUi0tMTI4IGlzIFhPUidlZCBhZ2FpbnN0IHRoZSBidWZmZXIgeW91IHByb3ZpZGUgaXQuICBJbiB0aGlzIG1hbm5lciwgeW91IGNhbiB1c2UKK3NvYmVyMTI4XF9yZWFkKCkgYXMgYW4gZW5jcnlwdCAoYW5kIGRlY3J5cHQpIGZ1bmN0aW9uLgorCitTaW5jZSBTT0JFUi0xMjggaGFzIGEgZml4ZWQga2V5aW5nIHNjaGVtZSwgYW5kIGlzIHZlcnkgZmFzdCAoZmFzdGVyIHRoYW4gUkM0KSB0aGUgaWRlYWwgdXNhZ2Ugb2YgU09CRVItMTI4IGlzIHRvIAora2V5IGl0IGZyb20gdGhlIG91dHB1dCBvZiBGb3J0dW5hIChvciBZYXJyb3cpLCBhbmQgdXNlIGl0IHRvIGVuY3J5cHQgbWVzc2FnZXMuICBJdCBpcyBhbHNvIGlkZWFsIGZvcgorc2ltdWxhdGlvbnMgd2hpY2ggbmVlZCBhIGhpZ2ggcXVhbGl0eSAoYW5kIGZhc3QpIHN0cmVhbSBvZiBieXRlcy4gIAorCitcc3Vic3Vic2VjdGlvbntFeGFtcGxlIFVzYWdlfQorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CitpbnQgbWFpbih2b2lkKQoreworICAgcHJuZ19zdGF0ZSBwcm5nOworICAgdW5zaWduZWQgY2hhciBidWZbMzJdOworICAgaW50IGVycjsKKworICAgaWYgKChlcnIgPSByYzRfc3RhcnQoJnBybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJSQzQgaW5pdCBlcnJvcjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIGV4aXQoLTEpOworICAgfQorCisgICAvKiB1c2UgImtleSIgYXMgdGhlIGtleSAqLworICAgaWYgKChlcnIgPSByYzRfYWRkX2VudHJvcHkoImtleSIsIDMsICZwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHByaW50ZigiUkM0IGFkZCBlbnRyb3B5IGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgZXhpdCgtMSk7CisgICB9CisKKyAgIC8qIHNldHVwIFJDNCBmb3IgdXNlICovCisgICBpZiAoKGVyciA9IHJjNF9yZWFkeSgmcHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICBwcmludGYoIlJDNCByZWFkeSBlcnJvcjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIGV4aXQoLTEpOworICAgfQorCisgICAvKiBlbmNyeXB0IGJ1ZmZlciAqLworICAgc3RyY3B5KGJ1ZiwiaGVsbG8gd29ybGQiKTsKKyAgIGlmIChyYzRfcmVhZChidWYsIDExLCAmcHJuZykgIT0gMTEpIHsKKyAgICAgIHByaW50ZigiUkM0IHJlYWQgZXJyb3JcbiIpOworICAgICAgZXhpdCgtMSk7CisgICB9CisgICByZXR1cm4gMDsKK30gICAKK1xlbmR7dmVyYmF0aW19CitcZW5ke3NtYWxsfQorVG8gZGVjcnlwdCB5b3UgaGF2ZSB0byBkbyB0aGUgZXhhY3Qgc2FtZSBzdGVwcy4gIAorCitcbXlzZWN0aW9ue1RoZSBTZWN1cmUgUk5HfQorXGluZGV4e1NlY3VyZSBSTkd9CitBbiBSTkcgaXMgcmVsYXRlZCB0byBhIFBSTkcgaW4gbWFueSB3YXlzLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBleHBhbmQgYSBzbWFsbGVyIHNlZWQgdG8gZ2V0IHRoZSBkYXRhLiAgVGhleSBnZW5lcmF0ZSB0aGVpciByYW5kb20gYml0cworYnkgcGVyZm9ybWluZyBzb21lIGNvbXB1dGF0aW9uIG9uIGZyZXNoIGlucHV0IGJpdHMuICBQb3NzaWJseSB0aGUgaGFyZGVzdCB0aGluZyB0byBnZXQgY29ycmVjdGx5IGluIGEgY3J5cHRvc3lzdGVtIGlzIHRoZSAKK1BSTkcuICBDb21wdXRlcnMgYXJlIGRldGVybWluaXN0aWMgdGhhdCB0cnkgaGFyZCBub3QgdG8gc3RyYXkgZnJvbSBwcmUtLWRldGVybWluZWQgcGF0aHMuICBUaGlzIG1ha2VzIGdhdGhlcmluZyBlbnRyb3B5IG5lZWRlZCB0byBzZWVkIGEgUFJORyAKK2EgaGFyZCB0YXNrLiAgCisKK1RoZXJlIGlzIG9uZSBzbWFsbCBmdW5jdGlvbiB0aGF0IG1heSBoZWxwIG9uIGNlcnRhaW4gcGxhdGZvcm1zOgorXGluZGV4e3JuZ1xfZ2V0XF9ieXRlcygpfQorXGJlZ2lue3ZlcmJhdGltfQordW5zaWduZWQgbG9uZyBybmdfZ2V0X2J5dGVzKAorICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgCisgICAgdW5zaWduZWQgbG9uZyAgbGVuLCAKKyAgICB2b2lkICAgICAgICAgKCpjYWxsYmFjaykodm9pZCkpOworXGVuZHt2ZXJiYXRpbX0KKworV2hpY2ggd2lsbCB0cnkgb25lIG9mIHRocmVlIG1ldGhvZHMgb2YgZ2V0dGluZyByYW5kb20gZGF0YS4gIFRoZSBmaXJzdCBpcyB0byBvcGVuIHRoZSBwb3B1bGFyIFx0ZXh0aXR7L2Rldi9yYW5kb219IGRldmljZSB3aGljaCAKK29uIG1vc3QgKk5JWCBwbGF0Zm9ybXMgcHJvdmlkZXMgY3J5cHRvZ3JhcGhpYyByYW5kb20gYml0c1xmb290bm90ZXtUaGlzIGRldmljZSBpcyBhdmFpbGFibGUgaW4gV2luZG93cyB0aHJvdWdoIHRoZSBDeWd3aW4gY29tcGlsZXIgc3VpdGUuICBJdCBlbXVsYXRlcyBcdGV4dGl0ey9kZXYvcmFuZG9tfSB2aWEgdGhlIE1pY3Jvc29mdCBDU1AufS4gIAorVGhlIHNlY29uZCBtZXRob2QgaXMgdG8gdHJ5IHRoZSBNaWNyb3NvZnQgQ3J5cHRvZ3JhcGhpYyBTZXJ2aWNlIFByb3ZpZGVyLCBhbmQgcmVhZCB0aGUgUk5HLiAgVGhlIHRoaXJkIG1ldGhvZCBpcyBhbiBBTlNJIEMgCitjbG9jayBkcmlmdCBtZXRob2QgdGhhdCBpcyBhbHNvIHNvbWV3aGF0IHBvcHVsYXIgYnV0IGdpdmVzIGJpdHMgb2YgbG93ZXIgZW50cm9weS4gIFRoZSBcdGV4dGl0e2NhbGxiYWNrfSBwYXJhbWV0ZXIgaXMgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHZvaWQuICBJdCBpcyAKK3VzZWQgd2hlbiB0aGUgc2xvd2VyIEFOU0kgQyBSTkcgbXVzdCBiZSB1c2VkIHNvIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIGNhbiBzdGlsbCB3b3JrLiAgVGhpcyBpcyB1c2VmdWwgc2luY2UgdGhlIEFOU0kgQyBSTkcgaGFzIGEgdGhyb3VnaHB1dCBvZiByb3VnaGx5IHRocmVlIAorYnl0ZXMgYSBzZWNvbmQuICBUaGUgY2FsbGJhY2sgcG9pbnRlciBtYXkgYmUgc2V0IHRvIHtcYmYgTlVMTH0gdG8gYXZvaWQgdXNpbmcgaXQgaWYgeW91IGRvIG5vdCB3YW50IHRvLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkIGZyb20gCithbnkgUk5HIHNvdXJjZS4gIFRoZXJlIGlzIGEgZnVuY3Rpb24gdG8gaGVscCBzZXR1cCBhIFBSTkcgYXMgd2VsbDoKK1xpbmRleHtybmdcX21ha2VcX3BybmcoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBybmdfbWFrZV9wcm5nKCAgICAgICBpbnQgIGJpdHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd3BybmcsIAorICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCkpOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgd2lsbCB0cnkgdG8gaW5pdGlhbGl6ZSB0aGUgcHJuZyB3aXRoIGEgc3RhdGUgb2YgYXQgbGVhc3QgXHRleHRpdHtiaXRzfSBvZiBlbnRyb3B5LiAgVGhlIFx0ZXh0aXR7Y2FsbGJhY2t9IHBhcmFtZXRlciB3b3JrcyBtdWNoIGxpa2UKK3RoZSBjYWxsYmFjayBpbiBcdGV4dGl0e3JuZ1xfZ2V0XF9ieXRlcygpfS4gIEl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSB1c2UgdGhpcyBmdW5jdGlvbiB0byBzZXR1cCB5b3VyIFBSTkdzIHVubGVzcyB5b3UgaGF2ZSBhCitwbGF0Zm9ybSB3aGVyZSB0aGUgUk5HIGRvZXMgbm90IHdvcmsgd2VsbC4gIEV4YW1wbGUgdXNhZ2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyBnaXZlbiBiZWxvdzoKKworXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CitpbnQgbWFpbih2b2lkKQoreworICAgZWNjX2tleSBteWtleTsKKyAgIHBybmdfc3RhdGUgcHJuZzsKKyAgIGludCBlcnI7CisKKyAgIC8qIHJlZ2lzdGVyIHlhcnJvdyAqLworICAgaWYgKHJlZ2lzdGVyX3BybmcoJnlhcnJvd19kZXNjKSA9PSAtMSkgeworICAgICAgcHJpbnRmKCJFcnJvciByZWdpc3RlcmluZyBZYXJyb3dcbiIpOworICAgICAgcmV0dXJuIC0xOworICAgfQorCisgICAvKiBzZXR1cCB0aGUgUFJORyAqLworICAgaWYgKChlcnIgPSBybmdfbWFrZV9wcm5nKDEyOCwgZmluZF9wcm5nKCJ5YXJyb3ciKSwgJnBybmcsIE5VTEwpKSAKKyAgICAgICAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJFcnJvciBzZXR0aW5nIHVwIFBSTkcsICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIC8qIG1ha2UgYSAxOTItYml0IEVDQyBrZXkgKi8KKyAgIGlmICgoZXJyID0gZWNjX21ha2Vfa2V5KCZwcm5nLCBmaW5kX3BybmcoInlhcnJvdyIpLCAyNCwgJm15a2V5KSkgCisgICAgICAgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHByaW50ZigiRXJyb3IgbWFraW5nIGtleTogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIHJldHVybiAtMTsKKyAgIH0KKyAgIHJldHVybiAwOworfQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CisKK1xzdWJzZWN0aW9ue1RoZSBTZWN1cmUgUFJORyBJbnRlcmZhY2V9CitJdCBpcyBwb3NzaWJsZSB0byBhY2Nlc3MgdGhlIHNlY3VyZSBSTkcgdGhyb3VnaCB0aGUgUFJORyBpbnRlcmZhY2UsIGFuZCBpbiB0dXJuIHVzZSBpdCB3aXRoaW4gZGVwZW5kZW50IGZ1bmN0aW9ucyBzdWNoCithcyB0aGUgUEsgQVBJLiAgVGhpcyBzaW1wbGlmaWVzIHRoZSBjcnlwdG9zeXN0ZW0gb24gcGxhdGZvcm1zIHdoZXJlIHRoZSBzZWN1cmUgUk5HIGlzIGZhc3QuICBUaGUgc2VjdXJlIFBSTkcgbmV2ZXIgCityZXF1aXJlcyB0byBiZSBzdGFydGVkLCB0aGF0IGlzIHlvdSBuZWVkIG5vdCBjYWxsIHRoZSBzdGFydCwgYWRkXF9lbnRyb3B5LCBvciByZWFkeSBmdW5jdGlvbnMuICBGb3IgZXhhbXBsZSwgY29uc2lkZXIKK3RoZSBwcmV2aW91cyBleGFtcGxlIHVzaW5nIHRoaXMgUFJORy4KKworXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CitpbnQgbWFpbih2b2lkKQoreworICAgZWNjX2tleSBteWtleTsKKyAgIGludCBlcnI7CisKKyAgIC8qIHJlZ2lzdGVyIFNQUk5HICovCisgICBpZiAocmVnaXN0ZXJfcHJuZygmc3BybmdfZGVzYykgPT0gLTEpIHsKKyAgICAgIHByaW50ZigiRXJyb3IgcmVnaXN0ZXJpbmcgU1BSTkdcbiIpOworICAgICAgcmV0dXJuIC0xOworICAgfQorCisgICAvKiBtYWtlIGEgMTkyLWJpdCBFQ0Mga2V5ICovCisgICBpZiAoKGVyciA9IGVjY19tYWtlX2tleShOVUxMLCBmaW5kX3BybmcoInNwcm5nIiksIDI0LCAmbXlrZXkpKSAKKyAgICAgICAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJFcnJvciBtYWtpbmcga2V5OiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgcmV0dXJuIC0xOworICAgfQorICAgcmV0dXJuIDA7Cit9CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworXGNoYXB0ZXJ7UlNBIFB1YmxpYyBLZXkgQ3J5cHRvZ3JhcGh5fQorCitcbXlzZWN0aW9ue0ludHJvZHVjdGlvbn0KK1JTQSB3cm90ZSB0aGUgUEtDUyBcIzEgc3BlY2lmaWNhdGlvbnMgd2hpY2ggZGV0YWlsIFJTQSBQdWJsaWMgS2V5IENyeXB0b2dyYXBoeS4gIEluIHRoZSBzcGVjaWZpY2F0aW9ucyBhcmUKK3BhZGRpbmcgYWxnb3JpdGhtcyBmb3IgZW5jcnlwdGlvbiBhbmQgc2lnbmF0dXJlcy4gIFRoZSBzdGFuZGFyZCBpbmNsdWRlcyB0aGUgXHRleHRpdHt2MS41fSBhbmQgXHRleHRpdHt2Mi4xfSBhbGdvcml0aG1zLgorVG8gc2ltcGxpZnkgbWF0dGVycyBhIGxpdHRsZSB0aGUgdjIuMSBlbmNyeXB0aW9uIGFuZCBzaWduYXR1cmUgcGFkZGluZyBhbGdvcml0aG1zIGFyZSBjYWxsZWQgT0FFUCBhbmQgUFNTIHJlc3BlY3RpdmVseS4gIAorCitcbXlzZWN0aW9ue1BLQ1MgXCMxIFBhZGRpbmd9CitQS0NTIFwjMSB2MS41IHBhZGRpbmcgaXMgc28gc2ltcGxlIHRoYXQgYm90aCBzaWduYXR1cmUgYW5kIGVuY3J5cHRpb24gcGFkZGluZyBhcmUgcGVyZm9ybWVkIGJ5IHRoZSBzYW1lIGZ1bmN0aW9uLiAgTm90ZTogdGhlCitzaWduYXR1cmUgcGFkZGluZyBkb2VzIFx0ZXh0YmZ7bm90fSBpbmNsdWRlIHRoZSBBU04uMSBwYWRkaW5nIHJlcXVpcmVkLiAgVGhhdCBpcyBwZXJmb3JtZWQgYnkgdGhlIHJzYVxfc2lnblxfaGFzaFxfZXgoKSBmdW5jdGlvbgorZG9jdW1lbnRlZCBsYXRlciBvbiBpbiB0aGlzIGNoYXB0ZXIuICAKKworXHN1YnNlY3Rpb257UEtDUyBcIzEgdjEuNSBFbmNvZGluZ30KK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb24gcGVyZm9ybXMgUEtDUyBcIzEgdjEuNSBwYWRkaW5nOgorXGluZGV4e3BrY3NcXzFcX3YxXF81XF9lbmNvZGUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBwa2NzXzFfdjFfNV9lbmNvZGUoCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBtc2dsZW4sCisgICAgICAgICAgICAgICAgICAgIGludCAgYmxvY2tfdHlwZSwKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBtb2R1bHVzX2JpdGxlbiwKKyAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgaW50ICBwcm5nX2lkeCwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgZW5jb2RlIHRoZSBtZXNzYWdlIHBvaW50ZWQgdG8gYnkgXHRleHRpdHttc2d9IG9mIGxlbmd0aCBcdGV4dGl0e21zZ2xlbn0gb2N0ZXRzLiAgVGhlIFx0ZXh0aXR7YmxvY2tcX3R5cGV9IHBhcmFtZXRlciBtdXN0IGJlIHNldCB0bworXHRleHRiZntMVENcX1BLQ1NcXzFcX0VNRX0gdG8gcGVyZm9ybSBlbmNyeXB0aW9uIHBhZGRpbmcuICBJdCBtdXN0IGJlIHNldCB0byBcdGV4dGJme0xUQ1xfUEtDU1xfMVxfRU1TQX0gdG8gcGVyZm9ybSBzaWduYXR1cmUgcGFkZGluZy4gIFRoZSBcdGV4dGl0e21vZHVsdXNcX2JpdGxlbn0gCitwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSBsZW5ndGggb2YgdGhlIG1vZHVsdXMgaW4gYml0cy4gIFRoZSBwYWRkZWQgZGF0YSBpcyBzdG9yZWQgaW4gXHRleHRpdHtvdXR9IHdpdGggYSBsZW5ndGggb2YgXHRleHRpdHtvdXRsZW59IG9jdGV0cy4gIFRoZSBvdXRwdXQgd2lsbCBub3QgYmUgCitsb25nZXIgdGhhbiB0aGUgbW9kdWx1cyB3aGljaCBoZWxwcyBhbGxvY2F0ZSB0aGUgY29ycmVjdCBvdXRwdXQgYnVmZmVyIHNpemUuCisKK09ubHkgZW5jcnlwdGlvbiBwYWRkaW5nIHJlcXVpcmVzIGEgUFJORy4gIFdoZW4gcGVyZm9ybWluZyBzaWduYXR1cmUgcGFkZGluZyB0aGUgXHRleHRpdHtwcm5nXF9pZHh9IHBhcmFtZXRlciBtYXkgYmUgbGVmdCB0byB6ZXJvIGFzIGl0IGlzIG5vdCBjaGVja2VkIGZvciB2YWxpZGl0eS4KKworXHN1YnNlY3Rpb257UEtDUyBcIzEgdjEuNSBEZWNvZGluZ30KK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb24gcGVyZm9ybXMgUEtDUyBcIzEgdjEuNSBkZS0tcGFkZGluZzoKK1xpbmRleHtwa2NzXF8xXF92MVxfNVxfZGVjb2RlKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcGtjc18xX3YxXzVfZGVjb2RlKAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICBpbnQgIGJsb2NrX3R5cGUsCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbW9kdWx1c19iaXRsZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgIGludCAqaXNfdmFsaWQpOworXGVuZHt2ZXJiYXRpbX0KK1xpbmRleHtMVENcX1BLQ1NcXzFcX0VNRX0gXGluZGV4e0xUQ1xfUEtDU1xfMVxfRU1TQX0KK1RoaXMgd2lsbCByZW1vdmUgdGhlIFBLQ1MgcGFkZGluZyBkYXRhIHBvaW50ZWQgdG8gYnkgXHRleHRpdHttc2d9IG9mIGxlbmd0aCBcdGV4dGl0e21zZ2xlbn0uICBUaGUgZGVjb2RlZCBkYXRhIGlzIHN0b3JlZCBpbiBcdGV4dGl0e291dH0gb2YgbGVuZ3RoCitcdGV4dGl0e291dGxlbn0uICBJZiB0aGUgcGFkZGluZyBpcyB2YWxpZCwgYSAxIGlzIHN0b3JlZCBpbiBcdGV4dGl0e2lzXF92YWxpZH0sIG90aGVyd2lzZSwgYSAwIGlzIHN0b3JlZC4gIFRoZSBcdGV4dGl0e2Jsb2NrXF90eXBlfSBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQgdG8gZWl0aGVyCitcdGV4dGJme0xUQ1xfUEtDU1xfMVxfRU1FfSBvciBcdGV4dGJme0xUQ1xfUEtDU1xfMVxfRU1TQX0gZGVwZW5kaW5nIG9uIHdoZXRoZXIgZW5jcnlwdGlvbiBvciBzaWduYXR1cmUgcGFkZGluZyBpcyBiZWluZyByZW1vdmVkLgorCitcbXlzZWN0aW9ue1BLQ1MgXCMxIHYyLjEgRW5jcnlwdGlvbn0KK1BLQ1MgXCMxIFJTQSBFbmNyeXB0aW9uIGFtb3VudHMgdG8gT0FFUCBwYWRkaW5nIG9mIHRoZSBpbnB1dCBtZXNzYWdlIGZvbGxvd2VkIGJ5IHRoZSBtb2R1bGFyIGV4cG9uZW50aWF0aW9uLiAgQXMgZmFyIGFzIHRoaXMgcG9ydGlvbiBvZgordGhlIGxpYnJhcnkgaXMgY29uY2VybmVkIHdlIGFyZSBvbmx5IGRlYWxpbmcgd2l0aCB0aCBPQUVQIHBhZGRpbmcgb2YgdGhlIG1lc3NhZ2UuCisKK1xzdWJzZWN0aW9ue09BRVAgRW5jb2Rpbmd9CisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb24gcGVyZm9ybXMgUEtDUyBcIzEgdjIuMSBlbmNyeXB0aW9uIHBhZGRpbmc6CisKK1xpbmRleHtwa2NzXF8xXF9vYWVwXF9lbmNvZGUoKX0KK1xiZWdpbnthbGx0dH0KK2ludCBwa2NzXzFfb2FlcF9lbmNvZGUoCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLCAgICAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBtc2dsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBscGFyYW1sZW4sCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbW9kdWx1c19iaXRsZW4sIAorICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsCisgICAgICAgICAgICAgICAgICAgIGludCAgcHJuZ19pZHgsCisgICAgICAgICAgICAgICAgICAgIGludCAgaGFzaF9pZHgsCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHthbGx0dH0KKworVGhpcyBhY2NlcHRzIFx0ZXh0aXR7bXNnfSBhcyBpbnB1dCBvZiBsZW5ndGggXHRleHRpdHttc2dsZW59IHdoaWNoIHdpbGwgYmUgT0FFUCBwYWRkZWQuICBUaGUgXHRleHRpdHtscGFyYW19IHZhcmlhYmxlIGlzIGFuIGFkZGl0aW9uYWwgc3lzdGVtIHNwZWNpZmljCit0YWcgdGhhdCBjYW4gYmUgYXBwbGllZCB0byB0aGUgZW5jb2RpbmcuICBUaGlzIGlzIHVzZWZ1bCB0byBpZGVudGlmeSB3aGljaCBzeXN0ZW0gZW5jb2RlZCB0aGUgbWVzc2FnZS4gIElmIG5vIHZhcmlhbmNlIGlzIGRlc2lyZWQgdGhlbgorXHRleHRpdHtscGFyYW19IGNhbiBiZSBzZXQgdG8gXHRleHRiZntOVUxMfS4gIAorCitPQUVQIGVuY29kaW5nIHJlcXVpcmVzIHRoZSBsZW5ndGggb2YgdGhlIG1vZHVsdXMgaW4gYml0cyBpbiBvcmRlciB0byBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIG91dHB1dC4gIFRoaXMgaXMgcGFzc2VkIGFzIHRoZSBwYXJhbWV0ZXIKK1x0ZXh0aXR7bW9kdWx1c1xfYml0bGVufS4gIFx0ZXh0aXR7aGFzaFxfaWR4fSBpcyB0aGUgaW5kZXggaW50byB0aGUgaGFzaCBkZXNjcmlwdG9yIHRhYmxlIG9mIHRoZSBoYXNoIGRlc2lyZWQuICBQS0NTIFwjMSBhbGxvd3MgYW55IGhhc2ggdG8gYmUgCit1c2VkIGJ1dCBib3RoIHRoZSBlbmNvZGVyIGFuZCBkZWNvZGVyIG11c3QgdXNlIHRoZSBzYW1lIGhhc2ggaW4gb3JkZXIgZm9yIHRoaXMgdG8gc3VjY2VlZC4gIFRoZSBzaXplIG9mIGhhc2ggb3V0cHV0IGFmZmVjdHMgdGhlIG1heGltdW0KKyBzaXplZCBpbnB1dCBtZXNzYWdlLiAgXHRleHRpdHtwcm5nXF9pZHh9IGFuZCBcdGV4dGl0e3Bybmd9IGFyZSB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgYXJndW1lbnRzIHJlcXVpcmVkIHRvIHJhbmRvbWl6ZSB0aGUgcGFkZGluZyBwcm9jZXNzLiAgCitUaGUgcGFkZGVkIG1lc3NhZ2UgaXMgc3RvcmVkIGluIFx0ZXh0aXR7b3V0fSBhbG9uZyB3aXRoIHRoZSBsZW5ndGggaW4gXHRleHRpdHtvdXRsZW59LgorCitJZiAkaCQgaXMgdGhlIGxlbmd0aCBvZiB0aGUgaGFzaCBhbmQgJG0kIHRoZSBsZW5ndGggb2YgdGhlIG1vZHVsdXMgKGJvdGggaW4gb2N0ZXRzKSB0aGVuIHRoZSBtYXhpbXVtIHBheWxvYWQgZm9yIFx0ZXh0aXR7bXNnfSBpcyAKKyRtIC0gMmggLSAyJC4gIEZvciBleGFtcGxlLCB3aXRoIGEgJDEwMjQkLS1iaXQgUlNBIGtleSBhbmQgU0hBLS0xIGFzIHRoZSBoYXNoIHRoZSBtYXhpbXVtIHBheWxvYWQgaXMgJDg2JCBieXRlcy4gIAorCitOb3RlIHRoYXQgd2hlbiB0aGUgbWVzc2FnZSBpcyBwYWRkZWQgaXQgc3RpbGwgaGFzIG5vdCBiZWVuIFJTQSBlbmNyeXB0ZWQuICBZb3UgbXVzdCBwYXNzIHRoZSBvdXRwdXQgb2YgdGhpcyBmdW5jdGlvbiB0byAKK3JzYVxfZXhwdG1vZCgpIHRvIGVuY3J5cHQgaXQuIAorCitcc3Vic2VjdGlvbntPQUVQIERlY29kaW5nfQorCitcaW5kZXh7cGtjc1xfMVxfb2FlcFxfZGVjb2RlKCl9CitcYmVnaW57YWxsdHR9CitpbnQgcGtjc18xX29hZXBfZGVjb2RlKAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywgICAgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbXNnbGVuLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxwYXJhbSwgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbHBhcmFtbGVuLAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1vZHVsdXNfYml0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgaW50ICBoYXNoX2lkeCwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgaW50ICpyZXMpOworXGVuZHthbGx0dH0KKworVGhpcyBmdW5jdGlvbiBkZWNvZGVzIGFuIE9BRVAgZW5jb2RlZCBtZXNzYWdlIGFuZCBvdXRwdXRzIHRoZSBvcmlnaW5hbCBtZXNzYWdlIHRoYXQgd2FzIHBhc3NlZCB0byB0aGUgT0FFUCBlbmNvZGVyLiAgXHRleHRpdHttc2d9IGlzIHRoZSAKK291dHB1dCBvZiBwa2NzXF8xXF9vYWVwXF9lbmNvZGUoKSBvZiBsZW5ndGggXHRleHRpdHttc2dsZW59LiAgXHRleHRpdHtscGFyYW19IGlzIHRoZSBzYW1lIHN5c3RlbSB2YXJpYWJsZSBwYXNzZWQgdG8gdGhlIE9BRVAgZW5jb2Rlci4gIElmIGl0IGRvZXMgbm90CittYXRjaCB3aGF0IHdhcyB1c2VkIGR1cmluZyBlbmNvZGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgbm90IGRlY29kZSB0aGUgcGFja2V0LiAgXHRleHRpdHttb2R1bHVzXF9iaXRsZW59IGlzIHRoZSBzaXplIG9mIHRoZSBSU0EgbW9kdWx1cyBpbiBiaXRzCithbmQgbXVzdCBtYXRjaCB3aGF0IHdhcyB1c2VkIGR1cmluZyBlbmNvZGluZy4gIFNpbWlsYXJseSB0aGUgXHRleHRpdHtoYXNoXF9pZHh9IGluZGV4IGludG8gdGhlIGhhc2ggZGVzY3JpcHRvciB0YWJsZSBtdXN0IG1hdGNoIHdoYXQgd2FzIHVzZWQKK2R1cmluZyBlbmNvZGluZy4KKworSWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzIGl0IGRlY29kZXMgdGhlIE9BRVAgZW5jb2RlZCBtZXNzYWdlIGludG8gXHRleHRpdHtvdXR9IG9mIGxlbmd0aCBcdGV4dGl0e291dGxlbn0gYW5kIHN0b3JlcyBhIAorJDEkIGluIFx0ZXh0aXR7cmVzfS4gIElmIHRoZSBwYWNrZXQgaXMgaW52YWxpZCBpdCBzdG9yZXMgJDAkIGluIFx0ZXh0aXR7cmVzfSBhbmQgaWYgdGhlIGZ1bmN0aW9uIGZhaWxzIGZvciBhbm90aGVyIHJlYXNvbgoraXQgcmV0dXJucyBhbiBlcnJvciBjb2RlLiAgCisKK1xteXNlY3Rpb257UEtDUyBcIzEgRGlnaXRhbCBTaWduYXR1cmVzfQorCitcc3Vic2VjdGlvbntQU1MgRW5jb2Rpbmd9CitQU1MgZW5jb2RpbmcgaXMgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBQS0NTIFwjMSBzdGFuZGFyZCB3aGljaCBpcyBwYWRkaW5nIHRvIGJlIGFwcGxpZWQgdG8gbWVzc2FnZXMgdGhhdCBhcmUgc2lnbmVkLiAgCisKK1xpbmRleHtwa2NzXF8xXF9wc3NcX2VuY29kZSgpfQorXGJlZ2lue2FsbHR0fQoraW50IHBrY3NfMV9wc3NfZW5jb2RlKAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZ2hhc2gsIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1zZ2hhc2hsZW4sCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgc2FsdGxlbiwgIAorICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW50ICBwcm5nX2lkeCwgCisgICAgICAgICAgICAgICAgICAgIGludCAgaGFzaF9pZHgsCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbW9kdWx1c19iaXRsZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHthbGx0dH0KKworVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoZSBtZXNzYWdlIHRvIGJlIFBTUyBlbmNvZGVkIGhhcyBwcmV2aW91c2x5IGJlZW4gaGFzaGVkLiAgVGhlIGlucHV0IGhhc2ggXHRleHRpdHttc2doYXNofSBpcyBvZiBsZW5ndGggCitcdGV4dGl0e21zZ2hhc2hsZW59LiAgUFNTIGFsbG93cyBhIHZhcmlhYmxlIGxlbmd0aCByYW5kb20gc2FsdCAoaXQgY2FuIGJlIHplcm8gbGVuZ3RoKSB0byBiZSBpbnRyb2R1Y2VkIGluIHRoZSBzaWduYXR1cmUgcHJvY2Vzcy4gIAorXHRleHRpdHtoYXNoXF9pZHh9IGlzIHRoZSBpbmRleCBpbnRvIHRoZSBoYXNoIGRlc2NyaXB0b3IgdGFibGUgb2YgdGhlIGhhc2ggdG8gdXNlLiAgXHRleHRpdHtwcm5nXF9pZHh9IGFuZCBcdGV4dGl0e3Bybmd9IGFyZSB0aGUgcmFuZG9tCitudW1iZXIgZ2VuZXJhdG9yIGluZm9ybWF0aW9uIHJlcXVpcmVkIGZvciB0aGUgc2FsdC4KKworU2ltaWxhciB0byBPQUVQIGVuY29kaW5nIFx0ZXh0aXR7bW9kdWx1c1xfYml0bGVufSBpcyB0aGUgc2l6ZSBvZiB0aGUgUlNBIG1vZHVsdXMgKGluIGJpdHMpLiAgSXQgbGltaXRzIHRoZSBzaXplIG9mIHRoZSBzYWx0LiAgSWYgJG0kIGlzIHRoZSBsZW5ndGgKK29mIHRoZSBtb2R1bHVzICRoJCB0aGUgbGVuZ3RoIG9mIHRoZSBoYXNoIG91dHB1dCAoaW4gb2N0ZXRzKSB0aGVuIHRoZXJlIGNhbiBiZSAkbSAtIGggLSAyJCBieXRlcyBvZiBzYWx0LiAgCisKK1RoaXMgZnVuY3Rpb24gZG9lcyBub3QgYWN0dWFsbHkgc2lnbiB0aGUgZGF0YSBpdCBtZXJlbHkgcGFkcyB0aGUgaGFzaCBvZiBhIG1lc3NhZ2Ugc28gdGhhdCBpdCBjYW4gYmUgcHJvY2Vzc2VkIGJ5IHJzYVxfZXhwdG1vZCgpLgorCitcc3Vic2VjdGlvbntQU1MgRGVjb2Rpbmd9CisKK1RvIGRlY29kZSBhIFBTUyBlbmNvZGVkIHNpZ25hdHVyZSBibG9jayB5b3UgaGF2ZSB0byB1c2UgdGhlIGZvbGxvd2luZy4KKworXGluZGV4e3BrY3NcXzFcX3Bzc1xfZGVjb2RlKCl9CitcYmVnaW57YWxsdHR9CitpbnQgcGtjc18xX3Bzc19kZWNvZGUoCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnaGFzaCwgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbXNnaGFzaGxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIHNpZ2xlbiwKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICBpbnQgIGhhc2hfaWR4LAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1vZHVsdXNfYml0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgaW50ICpyZXMpOworXGVuZHthbGx0dH0KK1RoaXMgd2lsbCBkZWNvZGUgdGhlIFBTUyBlbmNvZGVkIG1lc3NhZ2UgaW4gXHRleHRpdHtzaWd9IG9mIGxlbmd0aCBcdGV4dGl0e3NpZ2xlbn0gYW5kIGNvbXBhcmUgaXQgdG8gdmFsdWVzIGluIFx0ZXh0aXR7bXNnaGFzaH0gb2YgbGVuZ3RoCitcdGV4dGl0e21zZ2hhc2hsZW59LiAgSWYgdGhlIGJsb2NrIGlzIGEgdmFsaWQgUFNTIGJsb2NrIGFuZCB0aGUgZGVjb2RlZCBoYXNoIGVxdWFscyB0aGUgaGFzaCBzdXBwbGllZCBcdGV4dGl0e3Jlc30gaXMgc2V0IHRvIG5vbi0temVyby4gIE90aGVyd2lzZSwgCitpdCBpcyBzZXQgdG8gemVyby4gIFRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBhcyBpbiB0aGUgUFNTIGVuY29kZSBjYWxsLgorCitJdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIHNhbWUgXHRleHRpdHtzYWx0bGVufSBhbmQgaGFzaCBmb3IgYm90aCBlbmNvZGluZyBhbmQgZGVjb2RpbmcgYXMgb3RoZXJ3aXNlIHRoZSBwcm9jZWR1cmUgd2lsbCBub3Qgd29yay4KKworXG15c2VjdGlvbntSU0EgS2V5IE9wZXJhdGlvbnN9Citcc3Vic2VjdGlvbntCYWNrZ3JvdW5kfQorCitSU0EgaXMgYSBwdWJsaWMga2V5IGFsZ29yaXRobSB0aGF0IGlzIGJhc2VkIG9uIHRoZSBpbmFiaWxpdHkgdG8gZmluZCB0aGUgXHRleHRpdHtlLXRofSByb290IG1vZHVsbyBhIGNvbXBvc2l0ZSBvZiB1bmtub3duIAorZmFjdG9yaXphdGlvbi4gIE5vcm1hbGx5IHRoZSBkaWZmaWN1bHR5IG9mIGJyZWFraW5nIFJTQSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIGludGVnZXIgZmFjdG9yaW5nIHByb2JsZW0gYnV0IHRoZXkgYXJlCitub3Qgc3RyaWN0bHkgZXF1aXZhbGVudC4KKworVGhlIHN5c3RlbSBiZWdpbnMgd2l0aCB3aXRoIHR3byBwcmltZXMgJHAkIGFuZCAkcSQgYW5kIHRoZWlyIHByb2R1Y3QgJE4gPSBwcSQuICBUaGUgb3JkZXIgb3IgXHRleHRpdHtFdWxlciB0b3RpZW50fSBvZiB0aGUKK211bHRpcGxpY2F0aXZlIHN1Yi1ncm91cCBmb3JtZWQgbW9kdWxvICROJCBpcyBnaXZlbiBhcyAkXHBoaShOKSA9IChwIC0gMSkocSAtIDEpJCB3aGljaCBjYW4gYmUgcmVkdWNlZCB0byAKKyRcbWJveHtsY219KHAgLSAxLCBxIC0gMSkkLiAgVGhlIHB1YmxpYyBrZXkgY29uc2lzdHMgb2YgdGhlIGNvbXBvc2l0ZSAkTiQgYW5kIHNvbWUgaW50ZWdlciAkZSQgc3VjaCB0aGF0IAorJFxtYm94e2djZH0oZSwgXHBoaShOKSkgPSAxJC4gIFRoZSBwcml2YXRlIGtleSBjb25zaXN0cyBvZiB0aGUgY29tcG9zaXRlICROJCBhbmQgdGhlIGludmVyc2Ugb2YgJGUkIG1vZHVsbyAkXHBoaShOKSQgCitvZnRlbiBzaW1wbHkgZGVub3RlZCBhcyAkZGUgXGVxdWl2IDFcbWJveHsgfShcbWJveHttb2QgfVxwaGkoTikpJC4KKworQSBwZXJzb24gd2hvIHdhbnRzIHRvIGVuY3J5cHQgd2l0aCB5b3VyIHB1YmxpYyBrZXkgc2ltcGx5IGZvcm1zIGFuIGludGVnZXIgKHRoZSBwbGFpbnRleHQpICRNJCBzdWNoIHRoYXQgCiskMSA8IE0gPCBOLTIkIGFuZCBjb21wdXRlcyB0aGUgY2lwaGVydGV4dCAkQyA9IE1eZVxtYm94eyB9KFxtYm94e21vZCB9TikkLiAgU2luY2UgZmluZGluZyB0aGUgaW52ZXJzZSBleHBvbmVudCAkZCQKK2dpdmVuIG9ubHkgJE4kIGFuZCAkZSQgYXBwZWFycyB0byBiZSBpbnRyYWN0YWJsZSBvbmx5IHRoZSBvd25lciBvZiB0aGUgcHJpdmF0ZSBrZXkgY2FuIGRlY3J5cHQgdGhlIGNpcGhlcnRleHQgYW5kIGNvbXB1dGUKKyRDXmQgXGVxdWl2IFxsZWZ0IChNXmUgXHJpZ2h0KV5kIFxlcXVpdiBNXjEgXGVxdWl2IE1cbWJveHsgfShcbWJveHttb2QgfU4pJC4gIFNpbWlsYXJseSB0aGUgb3duZXIgb2YgdGhlIHByaXZhdGUga2V5IAorY2FuIHNpZ24gYSBtZXNzYWdlIGJ5IFx0ZXh0aXR7ZGVjcnlwdGluZ30gaXQuICBPdGhlcnMgY2FuIHZlcmlmeSBpdCBieSBcdGV4dGl0e2VuY3J5cHRpbmd9IGl0LiAgCisKK0N1cnJlbnRseSBSU0EgaXMgYSBkaWZmaWN1bHQgc3lzdGVtIHRvIGNyeXB0YW5hbHl6ZSBwcm92aWRlZCB0aGF0IGJvdGggcHJpbWVzIGFyZSBsYXJnZSBhbmQgbm90IGNsb3NlIHRvIGVhY2ggb3RoZXIuICAKK0lkZWFsbHkgJGUkIHNob3VsZCBiZSBsYXJnZXIgdGhhbiAkMTAwJCB0byBwcmV2ZW50IGRpcmVjdCBhbmFseXNpcy4gIEZvciBleGFtcGxlLCBpZiAkZSQgaXMgdGhyZWUgYW5kIHlvdSBkbyBub3QgcGFkCit0aGUgcGxhaW50ZXh0IHRvIGJlIGVuY3J5cHRlZCB0aGFuIGl0IGlzIHBvc3NpYmxlIHRoYXQgJE1eMyA8IE4kIGluIHdoaWNoIGNhc2UgZmluZGluZyB0aGUgY3ViZS1yb290IHdvdWxkIGJlIHRyaXZpYWwuICAKK1RoZSBtb3N0IG9mdGVuIHN1Z2dlc3RlZCB2YWx1ZSBmb3IgJGUkIGlzICQ2NTUzNyQgc2luY2UgaXQgaXMgbGFyZ2UgZW5vdWdoIHRvIG1ha2Ugc3VjaCBhdHRhY2tzIGltcG9zc2libGUgYW5kIGFsc28gd2VsbCAKK2Rlc2lnbmVkIGZvciBmYXN0IGV4cG9uZW50aWF0aW9uIChyZXF1aXJlcyAxNiBzcXVhcmluZ3MgYW5kIG9uZSBtdWx0aXBsaWNhdGlvbikuCisKK0l0IGlzIGltcG9ydGFudCB0byBwYWQgdGhlIGlucHV0IHRvIFJTQSBzaW5jZSBpdCBoYXMgcGFydGljdWxhciBtYXRoZW1hdGljYWwgc3RydWN0dXJlLiAgRm9yIGluc3RhbmNlICAKKyRNXzFeZE1fMl5kID0gKE1fMU1fMileZCQgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZm9yZ2UgYSBzaWduYXR1cmUuICBTdXBwb3NlICRNXzMgPSBNXzFNXzIkIGlzIGEgbWVzc2FnZSB5b3Ugd2FudAordG8gaGF2ZSBhIGZvcmdlZCBzaWduYXR1cmUgZm9yLiAgU2ltcGx5IGdldCB0aGUgc2lnbmF0dXJlcyBmb3IgJE1fMSQgYW5kICRNXzIkIG9uIHRoZWlyIG93biBhbmQgbXVsdGlwbHkgdGhlIHJlc3VsdAordG9nZXRoZXIuICBTaW1pbGFyIHRyaWNrcyBjYW4gYmUgdXNlZCB0byBkZWR1Y2UgcGxhaW50ZXh0cyBmcm9tIGNpcGhlcnRleHRzLiAgSXQgaXMgaW1wb3J0YW50IG5vdCBvbmx5IHRvIHNpZ24gCit0aGUgaGFzaCBvZiBkb2N1bWVudHMgb25seSBidXQgYWxzbyB0byBwYWQgdGhlIGlucHV0cyB3aXRoIGRhdGEgdG8gcmVtb3ZlIHN1Y2ggc3RydWN0dXJlLiAgCisKK1xzdWJzZWN0aW9ue1JTQSBLZXkgR2VuZXJhdGlvbn0KKworRm9yIFJTQSByb3V0aW5lcyBhIHNpbmdsZSBcdGV4dGl0e3JzYVxfa2V5fSBzdHJ1Y3R1cmUgaXMgdXNlZC4gIFRvIG1ha2UgYSBuZXcgUlNBIGtleSBjYWxsOgorXGluZGV4e3JzYVxfbWFrZVxfa2V5KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcnNhX21ha2Vfa2V5KHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICB3cHJuZywgCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHNpemUsIAorICAgICAgICAgICAgICAgICAgICAgICBsb25nICBlLCAKKyAgICAgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CisKK1doZXJlIFx0ZXh0aXR7d3Bybmd9IGlzIHRoZSBpbmRleCBpbnRvIHRoZSBQUk5HIGRlc2NyaXB0b3IgYXJyYXkuICBUaGUgXHRleHRpdHtzaXplfSBwYXJhbWV0ZXIgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIFJTQSBtb2R1bHVzIGRlc2lyZWQuCitUaGUgXHRleHRpdHtlfSBwYXJhbWV0ZXIgaXMgdGhlIGVuY3J5cHRpb24gZXhwb25lbnQgZGVzaXJlZCwgdHlwaWNhbCB2YWx1ZXMgYXJlIDMsIDE3LCAyNTcgYW5kIDY1NTM3LiAgU3RpY2sgd2l0aCA2NTUzNyBzaW5jZSBpdCBpcyBiaWcgZW5vdWdoIHRvIHByZXZlbnQgCit0cml2aWFsIG1hdGggYXR0YWNrcywgYW5kIG5vdCBzdXBlciBzbG93LiAgVGhlIFx0ZXh0aXR7a2V5fSBwYXJhbWV0ZXIgaXMgd2hlcmUgdGhlIGNvbnN0cnVjdGVkIGtleSBpcyBwbGFjZWQuICBBbGwga2V5cyBtdXN0IGJlIGF0IAorbGVhc3QgMTI4IGJ5dGVzLCBhbmQgbm8gbW9yZSB0aGFuIDUxMiBieXRlcyBpbiBzaXplIChcdGV4dGl0e3RoYXQgaXMgZnJvbSAxMDI0IHRvIDQwOTYgYml0c30pLgorCitcaW5kZXh7cnNhXF9mcmVlKCl9CitOb3RlOiB0aGUgXHRleHRpdHtyc2FcX21ha2VcX2tleSgpfSBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGF0IHJ1bi0tdGltZSB3aGVuIHlvdSBtYWtlIHRoZSBrZXkuICBNYWtlIHN1cmUgdG8gY2FsbCAKK1x0ZXh0aXR7cnNhXF9mcmVlKCl9IChzZWUgYmVsb3cpIHdoZW4geW91IGFyZSBmaW5pc2hlZCB3aXRoIHRoZSBrZXkuICBJZiBcdGV4dGl0e3JzYVxfbWFrZVxfa2V5KCl9IGZhaWxzIGl0IHdpbGwgYXV0b21hdGljYWxseSAKK2ZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQuCisKK1xpbmRleHtQS1xfUFJJVkFURX0gXGluZGV4e1BLXF9QVUJMSUN9CitUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIFJTQSBrZXlzLiAgVGhlIHR5cGVzIGFyZSB7XGJmIFBLXF9QUklWQVRFfSBhbmQge1xiZiBQS1xfUFVCTElDfS4gIFRoZSBmaXJzdCB0eXBlIGlzIGEgcHJpdmF0ZSAKK1JTQSBrZXkgd2hpY2ggaW5jbHVkZXMgdGhlIENSVCBwYXJhbWV0ZXJzXGZvb3Rub3Rle0FzIG9mIHYwLjk5IHRoZSBQS1xfUFJJVkFURVxfT1BUSU1JWkVEIHR5cGUgaGFzIGJlZW4gZGVwcmVjYXRlZCwgYW5kIGhhcyBiZWVuIHJlcGxhY2VkIGJ5IHRoZSAKK1BLXF9QUklWQVRFIHR5cGUufSBpbiB0aGUgZm9ybSBvZiBhIFJTQVByaXZhdGVLZXkgKFBLQ1MgXCMxIGNvbXBsaWFudCkuICBUaGUgc2Vjb25kIHR5cGUsIGlzIGEgcHVibGljIFJTQSBrZXkgd2hpY2ggb25seSBpbmNsdWRlcyB0aGUgbW9kdWx1cyBhbmQgcHVibGljIGV4cG9uZW50LiAgCitJdCB0YWtlcyB0aGUgZm9ybSBvZiBhIFJTQVB1YmxpY0tleSAoUEtDUyBcIzEgY29tcGxpYW50KS4KKworXHN1YnNlY3Rpb257UlNBIEV4cG9uZW50aWF0aW9ufQorVG8gZG8gcmF3IHdvcmsgd2l0aCB0aGUgUlNBIGZ1bmN0aW9uLCB0aGF0IGlzIHdpdGhvdXQgcGFkZGluZywgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CitcaW5kZXh7cnNhXF9leHB0bW9kKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcnNhX2V4cHRtb2QoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICB3aGljaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIHdpbGwgbG9hZCB0aGUgYmlnbnVtIGZyb20gXHRleHRpdHtpbn0gYXMgYSBiaWcgZW5kaWFuIGludGVnZXIgaW4gdGhlIGZvcm1hdCBQS0NTIFwjMSBzcGVjaWZpZXMsIHJhaXNlcyBpdCB0byBlaXRoZXIgXHRleHRpdHtlfSBvciBcdGV4dGl0e2R9IGFuZCBzdG9yZXMgdGhlIHJlc3VsdAoraW4gXHRleHRpdHtvdXR9IGFuZCB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0IGluIFx0ZXh0aXR7b3V0bGVufS4gXHRleHRpdHt3aGljaH0gaXMgc2V0IHRvIHtcYmYgUEtcX1BVQkxJQ30gdG8gdXNlIFx0ZXh0aXR7ZX0gCisoaS5lLiBmb3IgZW5jcnlwdGlvbi92ZXJpZnlpbmcpIGFuZCBzZXQgdG8ge1xiZiBQS1xfUFJJVkFURX0gdG8gdXNlIFx0ZXh0aXR7ZH0gYXMgdGhlIGV4cG9uZW50IChpLmUuIGZvciBkZWNyeXB0aW5nL3NpZ25pbmcpLgorCitOb3RlOiB0aGUgb3V0cHV0IG9mIHRoaXMgZnVuY3Rpb24gaXMgemVyby0tcGFkZGVkIGFzIHBlciBQS0NTIFwjMSBzcGVjaWZpY2F0aW9uLiAgVGhpcyBhbGxvd3MgdGhpcyByb3V0aW5lIHRvIHdvcmsgd2l0aCBQS0NTIFwjMSBwYWRkaW5nIGZ1bmN0aW9ucyBwcm9wZXJseS4KKworXG15c2VjdGlvbntSU0EgS2V5IEVuY3J5cHRpb259CitOb3JtYWxseSBSU0EgaXMgdXNlZCB0byBlbmNyeXB0IHNob3J0IHN5bW1ldHJpYyBrZXlzIHdoaWNoIGFyZSB0aGVuIHVzZWQgaW4gYmxvY2sgY2lwaGVycyB0byBlbmNyeXB0IGEgbWVzc2FnZS4KK1RvIGZhY2lsaXRhdGUgZW5jcnlwdGluZyBzaG9ydCBrZXlzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUgYmVlbiBwcm92aWRlZC4KKworXGluZGV4e3JzYVxfZW5jcnlwdFxfa2V5KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcnNhX2VuY3J5cHRfa2V5KAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBscGFyYW1sZW4sCisgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgCisgICAgICAgICAgICAgICAgICAgIGludCAgcHJuZ19pZHgsIAorICAgICAgICAgICAgICAgICAgICBpbnQgIGhhc2hfaWR4LCAKKyAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgZnVuY3Rpb24gd2lsbCBPQUVQIHBhZCBcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0gYnl0ZXMsIFJTQSBlbmNyeXB0IGl0LCBhbmQgc3RvcmUgdGhlIGNpcGhlcnRleHQKK2luIFx0ZXh0aXR7b3V0fSBvZiBsZW5ndGggXHRleHRpdHtvdXRsZW59IG9jdGV0cy4gIFRoZSBcdGV4dGl0e2xwYXJhbX0gYW5kIFx0ZXh0aXR7bHBhcmFtbGVufSBhcmUgdGhlIHNhbWUgcGFyYW1ldGVycyB5b3Ugd291bGQgcGFzcwordG8gXGluZGV4e3BrY3NcXzFcX29hZXBcX2VuY29kZSgpfSBwa2NzXF8xXF9vYWVwXF9lbmNvZGUoKS4KKworXHN1YnNlY3Rpb257RXh0ZW5kZWQgRW5jcnlwdGlvbn0KK0FzIG9mIHYxLjE1LCB0aGUgbGlicmFyeSBzdXBwb3J0cyBib3RoIHYxLjUgYW5kIHYyLjEgUEtDUyBcIzEgc3R5bGUgcGFkZGluZ3MgaW4gdGhlc2UgaGlnaGVyIGxldmVsIGZ1bmN0aW9ucy4gIFRoZSBmb2xsb3dpbmcgaXMgdGhlIGV4dGVuZGVkCitlbmNyeXB0aW9uIGZ1bmN0aW9uOgorCitcaW5kZXh7cnNhXF9lbmNyeXB0XF9rZXlcX2V4KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcnNhX2VuY3J5cHRfa2V5X2V4KAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgICAgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBscGFyYW1sZW4sCisgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgCisgICAgICAgICAgICAgICAgICAgIGludCAgcHJuZ19pZHgsIAorICAgICAgICAgICAgICAgICAgICBpbnQgIGhhc2hfaWR4LCAKKyAgICAgICAgICAgICAgICAgICAgaW50ICBwYWRkaW5nLCAKKyAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOworXGVuZHt2ZXJiYXRpbX0KKworXGluZGV4e0xUQ1xfUEtDU1xfMVxfT0FFUH0gXGluZGV4e0xUQ1xfUEtDU1xfMVxfVjFcXzV9CitUaGUgcGFyYW1ldGVycyBhcmUgYWxsIHRoZSBzYW1lIGFzIGZvciByc2FcX2VuY3J5cHRcX2tleSgpIGV4Y2VwdCBmb3IgdGhlIGFkZGl0aW9uIG9mIHRoZSBcdGV4dGl0e3BhZGRpbmd9IHBhcmFtZXRlci4gIEl0IG11c3QgYmUgc2V0IHRvCitcdGV4dGJme0xUQ1xfUEtDU1xfMVxfVjFcXzV9IHRvIHBlcmZvcm0gdjEuNSBlbmNyeXB0aW9uLCBvciBzZXQgdG8gXHRleHRiZntMVENcX1BLQ1NcXzFcX09BRVB9IHRvIHBlcmZvcm0gdjIuMSBlbmNyeXB0aW9uLgorCitXaGVuIHBlcmZvcm1pbmcgdjEuNSBlbmNyeXB0aW9uLCB0aGUgaGFzaCBhbmQgbHBhcmFtIHBhcmFtZXRlcnMgYXJlIHRvdGFsbHkgaWdub3JlZCBhbmQgY2FuIGJlIHNldCB0byBcdGV4dGJme05VTEx9IG9yIHplcm8gKHJlc3BlY3RpdmVseSkuCisKK1xteXNlY3Rpb257UlNBIEtleSBEZWNyeXB0aW9ufQorXGluZGV4e3JzYVxfZGVjcnlwdFxfa2V5KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcnNhX2RlY3J5cHRfa2V5KAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBscGFyYW1sZW4sCisgICAgICAgICAgICAgICAgICAgIGludCAgaGFzaF9pZHgsIAorICAgICAgICAgICAgICAgICAgICBpbnQgKnN0YXQsCisgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIGZ1bmN0aW9uIHdpbGwgUlNBIGRlY3J5cHQgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IHRoZW4gT0FFUCBkZS1wYWQgdGhlIHJlc3VsdGluZyBkYXRhIGFuZCBzdG9yZSBpdCBpbgorXHRleHRpdHtvdXR9IG9mIGxlbmd0aCBcdGV4dGl0e291dGxlbn0uICBUaGUgXHRleHRpdHtscGFyYW19IGFuZCBcdGV4dGl0e2xwYXJhbWxlbn0gYXJlIHRoZSBzYW1lIHBhcmFtZXRlcnMgeW91IHdvdWxkIHBhc3MKK3RvIHBrY3NcXzFcX29hZXBcX2RlY29kZSgpLgorCitJZiB0aGUgUlNBIGRlY3J5cHRlZCBkYXRhIGlzIG5vdCBhIHZhbGlkIE9BRVAgcGFja2V0IHRoZW4gXHRleHRpdHtzdGF0fSBpcyBzZXQgdG8gJDAkLiAgT3RoZXJ3aXNlLCBpdCBpcyBzZXQgdG8gJDEkLgorCitcc3Vic2VjdGlvbntFeHRlbmRlZCBEZWNyeXB0aW9ufQorQXMgb2YgdjEuMTUsIHRoZSBsaWJyYXJ5IHN1cHBvcnRzIGJvdGggdjEuNSBhbmQgdjIuMSBQS0NTIFwjMSBzdHlsZSBwYWRkaW5ncyBpbiB0aGVzZSBoaWdoZXIgbGV2ZWwgZnVuY3Rpb25zLiAgVGhlIGZvbGxvd2luZyBpcyB0aGUgZXh0ZW5kZWQKK2RlY3J5cHRpb24gZnVuY3Rpb246CisKK1xpbmRleHtyc2FcX2RlY3J5cHRcX2tleVxfZXgoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCByc2FfZGVjcnlwdF9rZXlfZXgoCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgICAgIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCAgIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxwYXJhbWxlbiwKKyAgICAgICAgICAgICAgICAgICAgaW50ICBoYXNoX2lkeCwgCisgICAgICAgICAgICAgICAgICAgIGludCAgcGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LAorICAgICAgICAgICAgICAgIHJzYV9rZXkgKmtleSk7CitcZW5ke3ZlcmJhdGltfQorCitTaW1pbGFyIHRvIHRoZSBleHRlbmRlZCBlbmNyeXB0aW9uLCB0aGUgbmV3IHBhcmFtZXRlciBcdGV4dGl0e3BhZGRpbmd9IGluZGljYXRlcyB3aGljaCB2ZXJzaW9uIG9mIHRoZSBQS0NTIFwjMSBzdGFuZGFyZCB0byB1c2UuICAKK0l0IG11c3QgYmUgc2V0IHRvIFx0ZXh0YmZ7TFRDXF9QS0NTXF8xXF9WMVxfNX0gdG8gcGVyZm9ybSB2MS41IGRlY3J5cHRpb24sIG9yIHNldCB0byBcdGV4dGJme0xUQ1xfUEtDU1xfMVxfT0FFUH0gdG8gcGVyZm9ybSB2Mi4xIGRlY3J5cHRpb24uCisKK1doZW4gcGVyZm9ybWluZyB2MS41IGRlY3J5cHRpb24sIHRoZSBoYXNoIGFuZCBscGFyYW0gcGFyYW1ldGVycyBhcmUgdG90YWxseSBpZ25vcmVkIGFuZCBjYW4gYmUgc2V0IHRvIFx0ZXh0YmZ7TlVMTH0gb3IgemVybyAocmVzcGVjdGl2ZWx5KS4KKworCitcbXlzZWN0aW9ue1JTQSBTaWduYXR1cmUgR2VuZXJhdGlvbn0KK1NpbWlsYXIgdG8gUlNBIGtleSBlbmNyeXB0aW9uIFJTQSBpcyBhbHNvIHVzZWQgdG8gXHRleHRpdHtkaWdpdGFsbHkgc2lnbn0gbWVzc2FnZSBkaWdlc3RzIChoYXNoZXMpLiAgVG8gZmFjaWxpdGF0ZSB0aGlzCitwcm9jZXNzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUgYmVlbiBwcm92aWRlZC4KKworXGluZGV4e3JzYVxfc2lnblxfaGFzaCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHJzYV9zaWduX2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgcHJuZ19pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBoYXNoX2lkeCwgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBQU1MgZW5jb2RlIHRoZSBtZXNzYWdlIGRpZ2VzdCBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7aW59IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSBvY3RldHMuICBOZXh0LCB0aGUgUFNTIGVuY29kZWQgaGFzaCB3aWxsIGJlIFJTQSAKK1x0ZXh0aXR7c2lnbmVkfSBhbmQgdGhlIG91dHB1dCBzdG9yZWQgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7b3V0fSBvZiBsZW5ndGggXHRleHRpdHtvdXRsZW59IG9jdGV0cy4gIAorCitUaGUgXHRleHRpdHtoYXNoXF9pZHh9IHBhcmFtZXRlciBpbmRpY2F0ZXMgd2hpY2ggaGFzaCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBQU1MgZW5jb2RpbmcuICBJdCBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIGhhc2ggdXNlZCB0bworaGFzaCB0aGUgbWVzc2FnZSBiZWluZyBzaWduZWQuICBUaGUgXHRleHRpdHtzYWx0bGVufSBwYXJhbWV0ZXIgaW5kaWNhdGVzIHRoZSBsZW5ndGggb2YgdGhlIGRlc2lyZWQgc2FsdCwgYW5kIHNob3VsZCB0eXBpY2FsbHkgYmUgc21hbGwuICBBIGdvb2QKK2RlZmF1bHQgdmFsdWUgaXMgYmV0d2VlbiA4IGFuZCAxNiBvY3RldHMuICBTdHJpY3RseSwgaXQgbXVzdCBiZSBzbWFsbCB0aGFuICRtb2R1bHVzXF9sZW4gLSBoTGVuIC0gMiQgd2hlcmUgXHRleHRpdHttb2R1bHVzXF9sZW59IGlzIHRoZSBzaXplIG9mCit0aGUgUlNBIG1vZHVsdXMgKGluIG9jdGV0cyksIGFuZCBcdGV4dGl0e2hMZW59IGlzIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgZGlnZXN0IHByb2R1Y2VkIGJ5IHRoZSBjaG9zZW4gaGFzaC4gIAorCitcc3Vic2VjdGlvbntFeHRlbmRlZCBTaWduYXR1cmVzfQorCitBcyBvZiB2MS4xNSwgdGhlIGxpYnJhcnkgc3VwcG9ydHMgYm90aCB2MS41IGFuZCB2Mi4xIHNpZ25hdHVyZXMuICBUaGUgZXh0ZW5kZWQgc2lnbmF0dXJlIGdlbmVyYXRpb24gZnVuY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgorCitcaW5kZXh7cnNhXF9zaWduXF9oYXNoXF9leCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHJzYV9zaWduX2hhc2hfZXgoCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgICAgIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgIGludCAgcGFkZGluZywKKyAgICAgICAgICBwcm5nX3N0YXRlICAgICpwcm5nLCAgICAgCisgICAgICAgICAgICAgICAgICAgIGludCAgcHJuZ19pZHgsCisgICAgICAgICAgICAgICAgICAgIGludCAgaGFzaF9pZHgsIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIHNhbHRsZW4sCisgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBQS0NTIGVuY29kZSB0aGUgbWVzc2FnZSBkaWdlc3QgcG9pbnRlZCB0byBieSBcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0gb2N0ZXRzLiAgTmV4dCwgdGhlIFBLQ1MgZW5jb2RlZCBoYXNoIHdpbGwgYmUgUlNBIAorXHRleHRpdHtzaWduZWR9IGFuZCB0aGUgb3V0cHV0IHN0b3JlZCBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgXHRleHRpdHtvdXR9IG9mIGxlbmd0aCBcdGV4dGl0e291dGxlbn0gb2N0ZXRzLiAgVGhlIFx0ZXh0aXR7cGFkZGluZ30gcGFyYW1ldGVyCittdXN0IGJlIHNldCB0byBcdGV4dGJme0xUQ1xfUEtDU1xfMVxfVjFcXzV9IHRvIHByb2R1Y2UgYSB2MS41IHNpZ25hdHVyZSwgb3RoZXJ3aXNlLCBpdCBtdXN0IGJlIHNldCB0byBcdGV4dGJme0xUQ1xfUEtDU1xfMVxfUFNTfSB0byBwcm9kdWNlIGEgCit2Mi4xIHNpZ25hdHVyZS4KKworV2hlbiBwZXJmb3JtaW5nIGEgdjEuNSBzaWduYXR1cmUgdGhlIFx0ZXh0aXR7cHJuZ30sIFx0ZXh0aXR7cHJuZ1xfaWR4fSwgYW5kIFx0ZXh0aXR7aGFzaFxfaWR4fSBwYXJhbWV0ZXJzIGFyZSBub3QgY2hlY2tlZCBhbmQgY2FuIGJlIGxlZnQgdG8gYW55Cit2YWx1ZXMgc3VjaCBhcyAkXGxicmFjZSRcdGV4dGJme05VTEx9LCAwLCAwJFxyYnJhY2UkLgorCitcbXlzZWN0aW9ue1JTQSBTaWduYXR1cmUgVmVyaWZpY2F0aW9ufQorXGluZGV4e3JzYVxfdmVyaWZ5XF9oYXNoKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcnNhX3ZlcmlmeV9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIHNpZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnaGFzaCwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBtc2doYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBoYXNoX2lkeCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIHNhbHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnN0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzYV9rZXkgKmtleSk7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgUlNBIFx0ZXh0aXR7dmVyaWZ5fSB0aGUgc2lnbmF0dXJlIHBvaW50ZWQgdG8gYnkgXHRleHRpdHtzaWd9IG9mIGxlbmd0aCBcdGV4dGl0e3NpZ2xlbn0gb2N0ZXRzLiAgTmV4dCwgdGhlIFJTQSBkZWNvZGVkIGRhdGEgaXMgUFNTIGRlY29kZWQKK2FuZCB0aGUgZXh0cmFjdGVkIGhhc2ggaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgbWVzc2FnZSBkaWdlc3QgcG9pbnRlZCB0byBieSBcdGV4dGl0e21zZ2hhc2h9IG9mIGxlbmd0aCBcdGV4dGl0e21zZ2hhc2hsZW59IG9jdGV0cy4KKworSWYgdGhlIFJTQSBkZWNvZGVkIGRhdGEgaXMgbm90IGEgdmFsaWQgUFNTIG1lc3NhZ2UsIG9yIGlmIHRoZSBQU1MgZGVjb2RlZCBoYXNoIGRvZXMgbm90IG1hdGNoIHRoZSBcdGV4dGl0e21zZ2hhc2h9IAordmFsdWUsIFx0ZXh0aXR7cmVzfSBpcyBzZXQgdG8gJDAkLiAgT3RoZXJ3aXNlLCBpZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMsIGFuZCBzaWduYXR1cmUgaXMgdmFsaWQgXHRleHRpdHtyZXN9IGlzIHNldCB0byAkMSQuCisKK1xzdWJzZWN0aW9ue0V4dGVuZGVkIFZlcmlmaWNhdGlvbn0KKworQXMgb2YgdjEuMTUsIHRoZSBsaWJyYXJ5IHN1cHBvcnRzIGJvdGggdjEuNSBhbmQgdjIuMSBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLiAgVGhlIGV4dGVuZGVkIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZnVuY3Rpb24gaGFzIHRoZSBmb2xsb3dpbmcgcHJvdG90eXBlOgorCitcaW5kZXh7cnNhXF92ZXJpZnlcX2hhc2hcX2V4KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgcnNhX3ZlcmlmeV9oYXNoX2V4KAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgICAgICAKKyAgICAgICAgICB1bnNpZ25lZCBsb25nICBzaWdsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgICAgIAorICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGhhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgIGludCAgcGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgaW50ICBoYXNoX2lkeCwgCisgICAgICAgICAgdW5zaWduZWQgbG9uZyAgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCAgICAgCisgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBSU0EgXHRleHRpdHt2ZXJpZnl9IHRoZSBzaWduYXR1cmUgcG9pbnRlZCB0byBieSBcdGV4dGl0e3NpZ30gb2YgbGVuZ3RoIFx0ZXh0aXR7c2lnbGVufSBvY3RldHMuICBOZXh0LCB0aGUgUlNBIGRlY29kZWQgZGF0YSBpcyBQS0NTIGRlY29kZWQKK2FuZCB0aGUgZXh0cmFjdGVkIGhhc2ggaXMgY29tcGFyZWQgYWdhaW5zdCB0aGUgbWVzc2FnZSBkaWdlc3QgcG9pbnRlZCB0byBieSBcdGV4dGl0e21zZ2hhc2h9IG9mIGxlbmd0aCBcdGV4dGl0e21zZ2hhc2hsZW59IG9jdGV0cy4KKworSWYgdGhlIFJTQSBkZWNvZGVkIGRhdGEgaXMgbm90IGEgdmFsaWQgUFNTIG1lc3NhZ2UsIG9yIGlmIHRoZSBQS0NTIGRlY29kZWQgaGFzaCBkb2VzIG5vdCBtYXRjaCB0aGUgXHRleHRpdHttc2doYXNofSAKK3ZhbHVlLCBcdGV4dGl0e3Jlc30gaXMgc2V0IHRvICQwJC4gIE90aGVyd2lzZSwgaWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCBhbmQgc2lnbmF0dXJlIGlzIHZhbGlkIFx0ZXh0aXR7cmVzfSBpcyBzZXQgdG8gJDEkLgorCitUaGUgXHRleHRpdHtwYWRkaW5nfSBwYXJhbWV0ZXIgbXVzdCBiZSBzZXQgdG8gXHRleHRiZntMVENcX1BLQ1NcXzFcX1YxXF81fSB0byBwZXJmb3JtIGEgdjEuNSB2ZXJpZmljYXRpb24uICBPdGhlcndpc2UsIGl0IG11c3QgYmUgc2V0IHRvIAorXHRleHRiZntMVENcX1BLQ1NcXzFcX1BTU30gdG8gcGVyZm9ybSBhIHYyLjEgdmVyaWZpY2F0aW9uLiAgV2hlbiBwZXJmb3JtaW5nIGEgdjEuNSB2ZXJpZmljYXRpb24gdGhlIFx0ZXh0aXR7aGFzaFxfaWR4fSBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKworXG15c2VjdGlvbntSU0EgRW5jcnlwdGlvbiBFeGFtcGxlfQorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CitpbnQgbWFpbih2b2lkKQoreworICAgaW50ICAgICAgICAgICBlcnIsIGhhc2hfaWR4LCBwcm5nX2lkeCwgcmVzOworICAgdW5zaWduZWQgbG9uZyBsMSwgbDI7CisgICB1bnNpZ25lZCBjaGFyIHB0WzE2XSwgcHQyWzE2XSwgb3V0WzEwMjRdOworICAgcnNhX2tleSAgICAgICBrZXk7CisKKyAgIC8qIHJlZ2lzdGVyIHBybmcvaGFzaCAqLworICAgaWYgKHJlZ2lzdGVyX3BybmcoJnNwcm5nX2Rlc2MpID09IC0xKSB7CisgICAgICBwcmludGYoIkVycm9yIHJlZ2lzdGVyaW5nIHNwcm5nIik7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgfQorCisgICAvKiByZWdpc3RlciBhIG1hdGggbGlicmFyeSAoaW4gdGhpcyBjYXNlIFRvbXNGYXN0TWF0aCkKKyAgIGx0Y19tcCA9IHRmbV9kZXNjOworCisgICBpZiAocmVnaXN0ZXJfaGFzaCgmc2hhMV9kZXNjKSA9PSAtMSkgeworICAgICAgcHJpbnRmKCJFcnJvciByZWdpc3RlcmluZyBzaGExIik7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgfQorICAgaGFzaF9pZHggPSBmaW5kX2hhc2goInNoYTEiKTsKKyAgIHBybmdfaWR4ID0gZmluZF9wcm5nKCJzcHJuZyIpOworCisgICAvKiBtYWtlIGFuIFJTQS0xMDI0IGtleSAqLworICAgaWYgKChlcnIgPSByc2FfbWFrZV9rZXkoTlVMTCwgICAgIC8qIFBSTkcgc3RhdGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfaWR4LCAvKiBQUk5HIGlkeCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAyNC84LCAgIC8qIDEwMjQtYml0IGtleSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgNjU1MzcsICAgIC8qIHdlIGxpa2UgZT02NTUzNyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSkgICAgIC8qIHdoZXJlIHRvIHN0b3JlIHRoZSBrZXkgKi8KKyAgICAgICApICE9IENSWVBUX09LKSB7CisgICAgICAgcHJpbnRmKCJyc2FfbWFrZV9rZXkgJXMiLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIH0KKworICAgLyogZmlsbCBpbiBwdFtdIHdpdGggYSBrZXkgd2Ugd2FudCB0byBzZW5kIC4uLiAqLworICAgbDEgPSBzaXplb2Yob3V0KTsKKyAgIGlmICgoZXJyID0gcnNhX2VuY3J5cHRfa2V5KHB0LCAvKiBkYXRhIHdlIHdpc2ggdG8gZW5jcnlwdCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYsIC8qIGRhdGEgaXMgMTYgYnl0ZXMgbG9uZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIC8qIHdoZXJlIHRvIHN0b3JlIGNpcGhlcnRleHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmwxLCAvKiBsZW5ndGggb2YgY2lwaGVydGV4dCAqLworICAgICAgICAgICAgICAgICAgICAgICAiVGVzdEFwcCIsIC8qIG91ciBscGFyYW0gZm9yIHRoaXMgcHJvZ3JhbSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcsIC8qIGxwYXJhbSBpcyA3IGJ5dGVzIGxvbmcgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBQUk5HIHN0YXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX2lkeCwgLyogcHJuZyBpZHggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfaWR4LCAvKiBoYXNoIGlkeCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkpIC8qIG91ciBSU0Ega2V5ICovCisgICAgICAgKSAhPSBDUllQVF9PSykgeworICAgICAgIHByaW50ZigicnNhX2VuY3J5cHRfa2V5ICVzIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICB9CisKKyAgIC8qIG5vdyBsZXQncyBkZWNyeXB0IHRoZSBlbmNyeXB0ZWQga2V5ICovCisgICBsMiA9IHNpemVvZihwdDIpOworICAgaWYgKChlcnIgPSByc2FfZGVjcnlwdF9rZXkob3V0LCAvKiBlbmNyeXB0ZWQgZGF0YSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwxLCAvKiBsZW5ndGggb2YgY2lwaGVydGV4dCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQyLCAvKiB3aGVyZSB0byBwdXQgcGxhaW50ZXh0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbDIsIC8qIHBsYWludGV4dCBsZW5ndGggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0QXBwIiwgLyogbHBhcmFtIGZvciB0aGlzIHByb2dyYW0gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNywgLyogbHBhcmFtIGlzIDcgYnl0ZXMgbG9uZyAqLworICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfaWR4LCAvKiBoYXNoIGlkeCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzLCAvKiB2YWxpZGl0eSBvZiBkYXRhICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZrZXkpIC8qIG91ciBSU0Ega2V5ICovIAorICAgICAgICApICE9IENSWVBUX09LKSB7CisgICAgICAgcHJpbnRmKCJyc2FfZGVjcnlwdF9rZXkgJXMiLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIH0KKyAgIC8qIGlmIGFsbCB3ZW50IHdlbGwgcHQgPT0gcHQyLCBsMiA9PSAxNiwgcmVzID09IDEgKi8KK30KK1xlbmR7dmVyYmF0aW19CitcZW5ke3NtYWxsfQorCitcbXlzZWN0aW9ue1JTQSBLZXkgRm9ybWF0fQorCitUaGUgUlNBIGtleSBmb3JtYXQgYWRvcHRlZCBmb3IgZXhwb3J0aW5nIGFuZCBpbXBvcnRpbmcga2V5cyBpcyB0aGUgUEtDUyBcIzEgZm9ybWF0IGRlZmluZWQgYnkgdGhlIEFTTi4xIGNvbnN0cnVjdHMga25vd24gYXMgCitSU0FQdWJsaWNLZXkgYW5kIFJTQVByaXZhdGVLZXkuICBBZGRpdGlvbmFsbHksIHRoZSBPcGVuU1NMIGtleSBmb3JtYXQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBpbXBvcnQgZnVuY3Rpb24gb25seS4KKworXHN1YnNlY3Rpb257UlNBIEtleSBFeHBvcnR9CitUbyBleHBvcnQgYSBSU0Ega2V5IHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgorCitcaW5kZXh7cnNhXF9leHBvcnQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCByc2FfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgd2lsbCBleHBvcnQgdGhlIFJTQSBrZXkgaW4gZWl0aGVyIGEgUlNBUHVibGljS2V5IG9yIFJTQVByaXZhdGVLZXkgKFBLQ1MgXCMxIHR5cGVzKSBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIFx0ZXh0aXR7dHlwZX0uICBXaGVuIGl0IGlzIAorc2V0IHRvIFx0ZXh0YmZ7UEtcX1BSSVZBVEV9IHRoZSBleHBvcnQgZm9ybWF0IHdpbGwgYmUgUlNBUHJpdmF0ZUtleSBhbmQgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgUlNBUHVibGljS2V5LgorCitcc3Vic2VjdGlvbntSU0EgS2V5IEltcG9ydH0KK1RvIGltcG9ydCBhIFJTQSBrZXkgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24uCisKK1xpbmRleHtyc2FcX2ltcG9ydCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IHJzYV9pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBpbXBvcnQgdGhlIGtleSBzdG9yZWQgaW4gXHRleHRpdHtpbmxlbn0gYW5kIGltcG9ydCBpdCB0byBcdGV4dGl0e2tleX0uICBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgaXQgd2lsbCBhdXRvbWF0aWNhbGx5IGZyZWUgYW55IGFsbG9jYXRlZCBtZW1vcnkuICBUaGlzCitmdW5jdGlvbiBjYW4gaW1wb3J0IGJvdGggUlNBUHVibGljS2V5IGFuZCBSU0FQcml2YXRlS2V5IGZvcm1hdHMuCisKK0FzIG9mIHYxLjA2IHRoaXMgZnVuY3Rpb24gY2FuIGFsc28gaW1wb3J0IE9wZW5TU0wgREVSIGZvcm1hdHRlZCBwdWJsaWMgUlNBIGtleXMuICBUaGV5IGFyZSBlc3NlbnRpYWxseSBlbmNhcHN1bGF0ZWQgUlNBUHVibGljS2V5cy4gIExpYlRvbUNyeXB0IHdpbGwKK2ltcG9ydCB0aGUga2V5LCBzdHJpcCBvZmYgdGhlIGFkZGl0aW9uYWwgZGF0YSAoaXQncyB0aGUgcHJlZmVycmVkIGhhc2gpIGFuZCBmaWxsIGluIHRoZSByc2FcX2tleSBzdHJ1Y3R1cmUgYXMgaWYgaXQgd2VyZSBhIG5hdGl2ZSBSU0FQdWJsaWNLZXkuICBOb3RlIHRoYXQKK3RoZXJlIGlzIG5vIGZ1bmN0aW9uIHByb3ZpZGVkIHRvIGV4cG9ydCBpbiB0aGlzIGZvcm1hdC4gIAorCitcY2hhcHRlcntFbGxpcHRpYyBDdXJ2ZSBDcnlwdG9ncmFwaHl9CisKK1xteXNlY3Rpb257QmFja2dyb3VuZH0KK1RoZSBsaWJyYXJ5IHByb3ZpZGVzIGEgc2V0IG9mIGNvcmUgRUNDIGZ1bmN0aW9ucyBhcyB3ZWxsIHRoYXQgYXJlIGRlc2lnbmVkIHRvIGJlIHRoZSBFbGxpcHRpYyBDdXJ2ZSBhbmFsb2d5IG9mIGFsbCBvZiB0aGUgCitEaWZmaWUtSGVsbG1hbiByb3V0aW5lcyBpbiB0aGUgcHJldmlvdXMgY2hhcHRlci4gIEVsbGlwdGljIGN1cnZlcyAob2YgY2VydGFpbiBmb3JtcykgaGF2ZSB0aGUgYmVuZWZpdCB0aGF0IHRoZXkgYXJlIGhhcmRlcgordG8gYXR0YWNrIChubyBzdWItZXhwb25lbnRpYWwgYXR0YWNrcyBleGlzdCB1bmxpa2Ugbm9ybWFsIERIIGNyeXB0bykgaW4gZmFjdCB0aGUgZmFzdGVzdCBhdHRhY2sgcmVxdWlyZXMgdGhlIHNxdWFyZSByb290CitvZiB0aGUgb3JkZXIgb2YgdGhlIGJhc2UgcG9pbnQgaW4gdGltZS4gIFRoYXQgbWVhbnMgaWYgeW91IHVzZSBhIGJhc2UgcG9pbnQgb2Ygb3JkZXIgJDJeezE5Mn0kICh3aGljaCB3b3VsZCByZXByZXNlbnQgYQorMTkyLWJpdCBrZXkpIHRoZW4gdGhlIHdvcmsgZmFjdG9yIGlzICQyXns5Nn0kIGluIG9yZGVyIHRvIGZpbmQgdGhlIHNlY3JldCBrZXkuCisKK1RoZSBjdXJ2ZXMgaW4gdGhpcyBsaWJyYXJ5IGFyZSB0YWtlbiBmcm9tIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZToKK1xiZWdpbnt2ZXJiYXRpbX0KK2h0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KK1xlbmR7dmVyYmF0aW19CisKK0FzIG9mIHYxLjE1IHRocmVlIG5ldyBjdXJ2ZXMgZnJvbSB0aGUgU0VDRyBzdGFuZGFyZHMgYXJlIGFsc28gaW5jbHVkZWQgdGhleSBhcmUgdGhlIHNlY3AxMTJyMSwgc2VjcDEyOHIxLCBhbmQgc2VjcDE2MHIxIGN1cnZlcy4gIFRoZXNlIGN1cnZlcyB3ZXJlIGFkZGVkIHRvIAorc3VwcG9ydCBzbWFsbGVyIGRldmljZXMgd2hpY2ggZG8gbm90IG5lZWQgYXMgbGFyZ2Uga2V5cyBmb3Igc2VjdXJpdHkuCisKK1RoZXkgYXJlIGFsbCBjdXJ2ZXMgb3ZlciB0aGUgaW50ZWdlcnMgbW9kdWxvIGEgcHJpbWUuICBUaGUgY3VydmVzIGhhdmUgdGhlIGJhc2ljIGVxdWF0aW9uIHRoYXQgaXM6CitcYmVnaW57ZXF1YXRpb259Cit5XjIgPSB4XjMgLSAzeCArIGJcbWJveHsgfShcbWJveHttb2QgfXApCitcZW5ke2VxdWF0aW9ufQorCitUaGUgdmFyaWFibGUgJGIkIGlzIGNob3NlbiBzdWNoIHRoYXQgdGhlIG51bWJlciBvZiBwb2ludHMgaXMgbmVhcmx5IG1heGltYWwuICBJbiBmYWN0IHRoZSBvcmRlciBvZiB0aGUgYmFzZSBwb2ludHMgJFxiZXRhJCAKK3Byb3ZpZGVkIGFyZSB2ZXJ5IGNsb3NlIHRvICRwJCB0aGF0IGlzICRcdmVydCBcdmVydCBccGhpKFxiZXRhKSBcdmVydCBcdmVydCBcYXBwcm94IFx2ZXJ0IFx2ZXJ0IHAgXHZlcnQgXHZlcnQkLiAgVGhlIGN1cnZlcworcmFuZ2UgaW4gb3JkZXIgZnJvbSAkXGFwcHJveCAyXnsxMTJ9JCBwb2ludHMgdG8gJFxhcHByb3ggMl57NTIxfSQuICBBY2NvcmRpbmcgdG8gdGhlIHNvdXJjZSBkb2N1bWVudCBhbnkga2V5IHNpemUgZ3JlYXRlcgordGhhbiBvciBlcXVhbCB0byAyNTYtYml0cyBpcyBzdWZmaWNpZW50IGZvciBsb25nIHRlcm0gc2VjdXJpdHkuICAKKworXG15c2VjdGlvbntGaXhlZCBQb2ludCBPcHRpbWl6YXRpb25zfQorXGluZGV4e0ZpeGVkIFBvaW50IEVDQ30KK1xpbmRleHtNRUNDXF9GUH0KK0FzIG9mIHYxLjEyIG9mIExpYlRvbUNyeXB0LCBzdXBwb3J0IGZvciBGaXhlZCBQb2ludCBFQ0MgcG9pbnQgbXVsdGlwbGljYXRpb24gaGFzIGJlZW4gYWRkZWQuICBJdCBpcyBhIGdlbmVyaWMgb3B0aW1pemF0aW9uIHRoYXQgaXMKK3N1cHBvcnRlZCBieSBhbnkgY29uZm9ybWluZyBtYXRoIHBsdWdpbi4gIEl0IGlzIGVuYWJsZWQgYnkgZGVmaW5pbmcgXHRleHRiZntNRUNDXF9GUH0gZHVyaW5nIHRoZSBidWlsZCwgc3VjaCBhcyAKKworXGJlZ2lue3ZlcmJhdGltfQorQ0ZMQUdTPSItRFRGTV9ERVNDIC1ETUVDQ19GUCIgbWFrZSAKK1xlbmR7dmVyYmF0aW19CisKK3doaWNoIHdpbGwgYnVpbGQgTFRDIHVzaW5nIHRoZSBURk0gbWF0aCBsaWJyYXJ5IGFuZCBlbmFibGluZyB0aGlzIG5ldyBmZWF0dXJlLiAgVGhlIGZlYXR1cmUgaXMgbm90IGVuYWJsZWQgYnkgZGVmYXVsdCBhcyBpdCBpcyBcdGV4dGJme05PVH0gdGhyZWFkCitzYWZlIChieSBkZWZhdWx0KS4gIEl0IHN1cHBvcnRzIHRoZSBMVEMgbG9ja2luZyBtYWNyb3MgKHN1Y2ggYXMgYnkgZW5hYmxpbmcgTFRDXF9QVEhSRUFEKSwgYnV0IGJ5IGRlZmF1bHQgaXMgbm90IGxvY2tlZC4KKworXGluZGV4e0ZQXF9FTlRSSUVTfQorVGhlIG9wdGltaXphdGlvbiB3b3JrcyBieSB1c2luZyBhIEZpeGVkIFBvaW50IG11bHRpcGxpZXIgb24gYW55IGJhc2UgcG9pbnQgeW91IHVzZSB0d2ljZSBvciBtb3JlIGluIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUuICBJdCBoYXMgYSBsaW1pdGVkIHNpemUKK2NhY2hlIChvZiBGUFxfRU5UUklFUyBlbnRyaWVzKSB3aGljaCBpdCB1c2VzIHRvIGhvbGQgcmVjZW50IGJhc2VzIHBhc3NlZCB0byBsdGNcX2VjY1xfbXVsbW9kKCkuICBBbnkgYmFzZSBkZXRlY3RlZCB0byBiZSB1c2VkIHR3aWNlIGlzIHNlbnQgdGhyb3VnaCB0aGUKK3ByZS0tY29tcHV0YXRpb24gcGhhc2UsIGFuZCB0aGVuIHRoZSBmaXhlZCBwb2ludCBhbGdvcml0aG0gY2FuIGJlIHVzZWQuICBGb3IgZXhhbXBsZSwgaWYgeW91IHVzZSBhIE5JU1QgYmFzZSBwb2ludCB0d2ljZSBpbiBhIHJvdywgdGhlIDIkXntuZH0kIGFuZCAKK2FsbCBzdWJzZXF1ZW50IHBvaW50IG11bHRpcGxpY2F0aW9ucyB3aXRoIHRoYXQgcG9pbnQgd2lsbCB1c2UgdGhlIGZhc3RlciBhbGdvcml0aG0uCisKK1xpbmRleHtGUFxfTFVUfQorVGhlIG9wdGltaXphdGlvbiB1c2VzIGEgd2luZG93IG9uIHRoZSBtdWx0aXBsaWNhbmQgb2YgRlBcX0xVVCBiaXRzIChkZWZhdWx0OiA4LCBtaW46IDIsIG1heDogMTIpLCBhbmQgdGhpcyBjb250cm9scyB0aGUgbWVtb3J5L3RpbWUgdHJhZGUtb2ZmLiBUaGUgbGFyZ2VyIHRoZSAKK3ZhbHVlIHRoZSBmYXN0ZXIgdGhlIGFsZ29yaXRobSB3aWxsIGJlIGJ1dCB0aGUgbW9yZSBtZW1vcnkgaXQgd2lsbCB0YWtlLiAgVGhlIG1lbW9yeSB1c2FnZSBpcyAkMyBcY2RvdCAyXntGUFxfTFVUfSQgaW50ZWdlcnMgd2hpY2ggYnkgZGVmYXVsdAord2l0aCBURk0gYW1vdW50cyB0byBhYm91dCA0MDBrQiBvZiBtZW1vcnkuICBUdW5pbmcgVEZNIChieSBjaGFuZ2luZyBGUFxfU0laRSkgY2FuIGRlY3JlYXNlIHRoZSB1c2FnZSBieSBhIGZhaXIgYW1vdW50LiAgTWVtb3J5IGlzIG9ubHkgdXNlZCBieSBhIGNhY2hlIGVudHJ5CitpZiBpdCBpcyBhY3RpdmUuICBCb3RoIEZQXF9FTlRSSUVTIGFuZCBGUFxfTFVUIGFyZSBkZWZpbmFibGUgb24gdGhlIGNvbW1hbmQgbGluZSBpZiB5b3Ugd2lzaCB0byBvdmVycmlkZSB0aGVtLiBGb3IgaW5zdGFuY2UsCisKK1xiZWdpbnt2ZXJiYXRpbX0KK0NGTEFHUz0iLURURk1fREVTQyAtRE1FQ0NfRlAgLURGUF9FTlRSSUVTPTggLURGUF9MVVQ9NiIgbWFrZQorXGVuZHt2ZXJiYXRpbX0KKworXGJlZ2lue2ZsdXNobGVmdH0gCitcaW5kZXh7RlBcX1NJWkV9IFxpbmRleHtURk19IFxpbmRleHt0Zm0uaH0KK3dvdWxkIGRlZmluZSBhIHdpbmRvdyBvZiA2IGJpdHMgYW5kIGxpbWl0IHRoZSBjYWNoZSB0byA4IGVudHJpZXMuICBHZW5lcmFsbHksIGl0IGlzIGJldHRlciB0byBmaXJzdCB0dW5lIFRGTSBieSBhZGp1c3RpbmcgRlBcX1NJWkUgKGZyb20gdGZtLmgpLiAgSXQgZGVmYXVsdHMKK3RvIDQwOTYgYml0cyAoNTEyIGJ5dGVzKSB3aGljaCBpcyB3YXkgbW9yZSB0aGFuIHdoYXQgaXMgcmVxdWlyZWQgYnkgRUNDLiAgQXQgbW9zdCwgeW91IG5lZWQgMTE1MiBiaXRzIHRvIGFjY29tbW9kYXRlIEVDQy0tNTIxLiAgSWYgeW91J3JlIG9ubHkgdXNpbmcgKHNheSkKK0VDQy0tMjU2IHlvdSB3aWxsIG9ubHkgbmVlZCA1NzYgYml0cywgd2hpY2ggd291bGQgcmVkdWNlIHRoZSBtZW1vcnkgdXNhZ2UgYnkgNzAwXCUuCitcZW5ke2ZsdXNobGVmdH0KKworXG15c2VjdGlvbntLZXkgRm9ybWF0fQorTGliVG9tQ3J5cHQgdXNlcyBhIHVuaXF1ZSBmb3JtYXQgZm9yIEVDQyBwdWJsaWMgYW5kIHByaXZhdGUga2V5cy4gIFdoaWxlIEFOU0kgWDkuNjMgcGFydGlhbGx5IHNwZWNpZmllcyBrZXkgZm9ybWF0cywgaXQgZG9lcyBpdCBpbiBhIGxlc3MgdGhhbiBpZGVhbGx5IHNpbXBsZSBtYW5uZXIuICBcCitJbiB0aGUgY2FzZSBvZiBMaWJUb21DcnlwdCwgaXQgaXMgbWVhbnQgXHRleHRiZntzb2xlbHl9IGZvciBOSVNUIGFuZCBTRUNHICRHRihwKSQgY3VydmVzLiAgVGhlIGZvcm1hdCBvZiB0aGUga2V5cyBpcyBhcyBmb2xsb3dzOgorCitcaW5kZXh7RUNDIEtleSBGb3JtYXR9CitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CitFQ0NQdWJsaWNLZXkgOjo9IFNFUVVFTkNFIHsKKyAgICBmbGFncyAgICAgICBCSVQgU1RSSU5HKDApLCAtLSBwdWJsaWMvcHJpdmF0ZSBmbGFnIChhbHdheXMgemVybyksIAorICAgIGtleVNpemUgICAgIElOVEVHRVIsICAgICAgIC0tIEN1cnZlIHNpemUgKGluIGJpdHMpIGRpdmlkZWQgYnkgZWlnaHQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gYW5kIHJvdW5kZWQgZG93biwgZS5nLiA1MjEgPT4gNjUKKyAgICBwdWJrZXkueCAgICBJTlRFR0VSLCAgICAgICAtLSBUaGUgWCBjby1vcmRpbmF0ZSBvZiB0aGUgcHVibGljIGtleSBwb2ludAorICAgIHB1YmtleS55ICAgIElOVEVHRVIsICAgICAgIC0tIFRoZSBZIGNvLW9yZGluYXRlIG9mIHRoZSBwdWJsaWMga2V5IHBvaW50Cit9CisKK0VDQ1ByaXZhdGVLZXkgOjo9IFNFUVVFTkNFIHsKKyAgICBmbGFncyAgICAgICBCSVQgU1RSSU5HKDEpLCAtLSBwdWJsaWMvcHJpdmF0ZSBmbGFnIChhbHdheXMgb25lKSwgCisgICAga2V5U2l6ZSAgICAgSU5URUdFUiwgICAgICAgLS0gQ3VydmUgc2l6ZSAoaW4gYml0cykgZGl2aWRlZCBieSBlaWdodCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBhbmQgcm91bmRlZCBkb3duLCBlLmcuIDUyMSA9PiA2NQorICAgIHB1YmtleS54ICAgIElOVEVHRVIsICAgICAgIC0tIFRoZSBYIGNvLW9yZGluYXRlIG9mIHRoZSBwdWJsaWMga2V5IHBvaW50CisgICAgcHVia2V5LnkgICAgSU5URUdFUiwgICAgICAgLS0gVGhlIFkgY28tb3JkaW5hdGUgb2YgdGhlIHB1YmxpYyBrZXkgcG9pbnQKKyAgICBzZWNyZXQuayAgICBJTlRFR0VSLCAgICAgICAtLSBUaGUgc2VjcmV0IGtleSBzY2FsYXIKK30KK1xlbmR7dmVyYmF0aW19CitcZW5ke3NtYWxsfQorCitUaGUgZmlyc3QgZmxhZ3MgYml0IGRlbm90ZXMgd2hldGhlciB0aGUga2V5IGlzIHB1YmxpYyAoemVybykgb3IgcHJpdmF0ZSAob25lKS4gIAorCitcdmZpbAorCitcbXlzZWN0aW9ue0VDQyBDdXJ2ZSBQYXJhbWV0ZXJzfQorVGhlIGxpYnJhcnkgdXNlcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSB0byBkZXNjcmliZSBhbiBlbGxpcHRpYyBjdXJ2ZS4gIFRoaXMgaXMgdXNlZCBpbnRlcm5hbGx5LCBhcyB3ZWxsIGFzIGJ5IHRoZSBuZXcKK2V4dGVuZGVkIEVDQyBmdW5jdGlvbnMgd2hpY2ggYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGVpciBvd24gY3VydmVzLiAKKworXGluZGV4e2x0Y1xfZWNjXF9zZXRcX3R5cGV9CitcYmVnaW57dmVyYmF0aW19CisvKiogU3RydWN0dXJlIGRlZmluZXMgYSBOSVNUIEdGKHApIGN1cnZlICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAvKiogVGhlIHNpemUgb2YgdGhlIGN1cnZlIGluIG9jdGV0cyAqLworICAgaW50IHNpemU7CisKKyAgIC8qKiBuYW1lIG9mIGN1cnZlICovCisgICBjaGFyICpuYW1lOyAKKworICAgLyoqIFRoZSBwcmltZSB0aGF0IGRlZmluZXMgdGhlIGZpZWxkIChlbmNvZGVkIGluIGhleCkgKi8KKyAgIGNoYXIgKnByaW1lOworCisgICAvKiogVGhlIGZpZWxkcyBCIHBhcmFtIChoZXgpICovCisgICBjaGFyICpCOworCisgICAvKiogVGhlIG9yZGVyIG9mIHRoZSBjdXJ2ZSAoaGV4KSAqLworICAgY2hhciAqb3JkZXI7CisgIAorICAgLyoqIFRoZSB4IGNvLW9yZGluYXRlIG9mIHRoZSBiYXNlIHBvaW50IG9uIHRoZSBjdXJ2ZSAoaGV4KSAqLworICAgY2hhciAqR3g7CisgCisgICAvKiogVGhlIHkgY28tb3JkaW5hdGUgb2YgdGhlIGJhc2UgcG9pbnQgb24gdGhlIGN1cnZlIChoZXgpICovCisgICBjaGFyICpHeTsKK30gbHRjX2VjY19zZXRfdHlwZTsKK1xlbmR7dmVyYmF0aW19CisKK1RoZSBjdXJ2ZSBtdXN0IGJlIG9mIHRoZSBmb3JtICR5XjIgPSB4XjMgLSAzeCArIGIkLCBhbmQgYWxsIG9mIHRoZSBpbnRlZ2VyIHBhcmFtZXRlcnMgYXJlIGVuY29kZWQgaW4gaGV4YWRlY2ltYWwgZm9ybWF0LgorCitcbXlzZWN0aW9ue0NvcmUgRnVuY3Rpb25zfQorXHN1YnNlY3Rpb257RUNDIEtleSBHZW5lcmF0aW9ufQorVGhlcmUgaXMgYSBrZXkgc3RydWN0dXJlIGNhbGxlZCBcdGV4dGl0e2VjY1xfa2V5fSB1c2VkIGJ5IHRoZSBFQ0MgZnVuY3Rpb25zLiAgVGhlcmUgaXMgYSBmdW5jdGlvbiB0byBtYWtlIGEga2V5OgorXGluZGV4e2VjY1xfbWFrZVxfa2V5KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZWNjX21ha2Vfa2V5KHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICB3cHJuZywgCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGtleXNpemUsIAorICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5ICprZXkpOworXGVuZHt2ZXJiYXRpbX0KKworVGhlIFx0ZXh0aXR7a2V5c2l6ZX0gaXMgdGhlIHNpemUgb2YgdGhlIG1vZHVsdXMgaW4gYnl0ZXMgZGVzaXJlZC4gIEN1cnJlbnRseSBkaXJlY3RseSBzdXBwb3J0ZWQgdmFsdWVzIGFyZSAxMiwgMTYsIDIwLCAyNCwgMjgsIDMyLCA0OCwgYW5kIDY1IGJ5dGVzIHdoaWNoCitjb3JyZXNwb25kIHRvIGtleSBzaXplcyBvZiAxMTIsIDEyOCwgMTYwLCAxOTIsIDIyNCwgMjU2LCAzODQsIGFuZCA1MjEgYml0cyByZXNwZWN0aXZlbHkuICBJZiB5b3UgcGFzcyBhIGtleSBzaXplIHRoYXQgaXMgYmV0d2VlbiBhbnkga2V5IHNpemUgaXQgd2lsbCByb3VuZCAKK3RoZSBrZXlzaXplIHVwIHRvIHRoZSBuZXh0IGF2YWlsYWJsZSBvbmUuCisKK1RoZSBmdW5jdGlvbiB3aWxsIGZyZWUgYW55IGludGVybmFsbHkgYWxsb2NhdGVkIHJlc291cmNlcyBpZiB0aGVyZSBpcyBhbiBlcnJvci4KKworXHN1YnNlY3Rpb257RXh0ZW5kZWQgS2V5IEdlbmVyYXRpb259CitBcyBvZiB2MS4xNiwgdGhlIGxpYnJhcnkgc3VwcG9ydHMgYW4gZXh0ZW5kZWQga2V5IGdlbmVyYXRpb24gcm91dGluZSB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gc3BlY2lmeSB0aGVpciBvd24gY3VydmUuICBJdCBpcyBzcGVjaWZpZWQgYXMgZm9sbG93czoKKworXGluZGV4e2VjY1xfbWFrZVxfa2V5XF9leCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50ICBlY2NfbWFrZV9rZXlfZXgoCisgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICB3cHJuZywgCisgICAgICAgICAgICAgICAgICAgIGVjY19rZXkgKmtleSwgCisgICAgIGNvbnN0IGx0Y19lY2Nfc2V0X3R5cGUgKmRwKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgZnVuY3Rpb24gZ2VuZXJhdGVzIGEgcmFuZG9tIEVDQyBrZXkgb3ZlciB0aGUgY3VydmUgc3BlY2lmaWVkIGJ5IHRoZSBwYXJhbWV0ZXJzIGJ5IFx0ZXh0aXR7ZHB9LiAgVGhlIHJlc3Qgb2YgdGhlIHBhcmFtZXRlcnMgYXJlIGVxdWl2YWxlbnQgdG8KK3Rob3NlIGZyb20gdGhlIG9yaWdpbmFsIGtleSBnZW5lcmF0aW9uIGZ1bmN0aW9uLgorCitcc3Vic2VjdGlvbntFQ0MgS2V5IEZyZWV9CitUbyBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGEgZWNjXF9tYWtlXF9rZXkoKSwgZWNjXF9tYWtlXF9rZXlcX2V4KCksIGVjY1xfaW1wb3J0KCksIG9yIGVjY1xfaW1wb3J0XF9leCgpIGNhbGwgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CitcaW5kZXh7ZWNjXF9mcmVlKCl9CitcYmVnaW57dmVyYmF0aW19Cit2b2lkIGVjY19mcmVlKGVjY19rZXkgKmtleSk7CitcZW5ke3ZlcmJhdGltfQorCitcc3Vic2VjdGlvbntFQ0MgS2V5IEV4cG9ydH0KK1RvIGV4cG9ydCBhbiBFQ0Mga2V5IHVzaW5nIHRoZSBMaWJUb21DcnlwdCBmb3JtYXQgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgorXGluZGV4e2VjY1xfZXhwb3J0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZWNjX2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIHdpbGwgZXhwb3J0IHRoZSBrZXkgd2l0aCB0aGUgZ2l2ZW4gXHRleHRpdHt0eXBlfSAoXHRleHRiZntQS1xfUFVCTElDfSBvciBcdGV4dGJme1BLXF9QUklWQVRFfSksIGFuZCBzdG9yZSBpdCB0byBcdGV4dGl0e291dH0uICAKKworXHN1YnNlY3Rpb257RUNDIEtleSBJbXBvcnR9CitUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGltcG9ydHMgYSBMaWJUb21DcnlwdCBmb3JtYXQgRUNDIGtleToKK1xpbmRleHtlY2NcX2ltcG9ydCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGVjY19pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIHdpbGwgaW1wb3J0IHRoZSBFQ0Mga2V5IGZyb20gXHRleHRpdHtpbn0sIGFuZCBzdG9yZSBpdCBpbiB0aGUgZWNjXF9rZXkgc3RydWN0dXJlIHBvaW50ZWQgdG8gYnkgXHRleHRpdHtrZXl9LiAgSWYgdGhlIG9wZXJhdGlvbiBmYWlscyBpdCB3aWxsIGZyZWUKK2FueSBhbGxvY2F0ZWQgbWVtb3J5IGF1dG9tYXRpY2FsbHkuCisKK1xzdWJzZWN0aW9ue0V4dGVuZGVkIEtleSBJbXBvcnR9CisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaW1wb3J0cyBhIExpYlRvbUNyeXB0IGZvcm1hdCBFQ0Mga2V5IHVzaW5nIGEgc3BlY2lmaWVkIHNldCBvZiBjdXJ2ZSBwYXJhbWV0ZXJzOgorXGluZGV4e2VjY1xfaW1wb3J0XF9leCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50ICBlY2NfaW1wb3J0X2V4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5LCAKKyAgICAgICAgICAgICAgICBjb25zdCBsdGNfZWNjX3NldF90eXBlICpkcCk7CitcZW5ke3ZlcmJhdGltfQorVGhpcyB3aWxsIGltcG9ydCB0aGUga2V5IGZyb20gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IG9jdGV0cy4gIFRoZSBrZXkgaXMgc3RvcmVkIGluCit0aGUgRUNDIHN0cnVjdHVyZSBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7a2V5fS4gIFRoZSBjdXJ2ZSBpcyBzcGVjaWZpZWQgYnkgdGhlIHBhcmFtZXRlcnMgcG9pbnRlZCB0byBieSBcdGV4dGl0e2RwfS4gIFRoZSBmdW5jdGlvbiB3aWxsIGZyZWUKK2FsbCBpbnRlcm5hbGx5IGFsbG9jYXRlZCBtZW1vcnkgdXBvbiBlcnJvci4KKworXHN1YnNlY3Rpb257QU5TSSBYOS42MyBFeHBvcnR9CitUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGV4cG9ydHMgYW4gRUNDIHB1YmxpYyBrZXkgaW4gdGhlIEFOU0kgWDkuNjMgZm9ybWF0OgorCitcaW5kZXh7ZWNjXF9hbnNpXF94OTYzXF9leHBvcnQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBlY2NfYW5zaV94OTYzX2V4cG9ydCggICAgICBlY2Nfa2V5ICprZXksIAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CitUaGUgRUNDIGtleSBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7a2V5fSBpcyBleHBvcnRlZCBpbiBwdWJsaWMgZmFzaGlvbiB0byB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSBcdGV4dGl0e291dH0uICBUaGUgQU5TSSBYOS42MyBmb3JtYXQgdXNlZCBpcyBmcm9tCitzZWN0aW9uIDQuMy42IG9mIHRoZSBzdGFuZGFyZC4gIEl0IGRvZXMgbm90IGFsbG93IGZvciB0aGUgZXhwb3J0IG9mIHByaXZhdGUga2V5cy4KKworXHN1YnNlY3Rpb257QU5TSSBYOS42MyBJbXBvcnR9CitUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGltcG9ydHMgYW4gQU5TSSBYOS42MyBzZWN0aW9uIDQuMy42IGZvcm1hdCBwdWJsaWMgRUNDIGtleToKKworXGluZGV4e2VjY1xfYW5zaVxfeDk2M1xfaW1wb3J0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZWNjX2Fuc2lfeDk2M19pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5ICprZXkpOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgd2lsbCBpbXBvcnQgdGhlIGtleSBzdG9yZWQgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IG9jdGV0cy4gIFRoZSBpbXBvcnRlZCBrZXkgaXMgc3RvcmVkIGluIHRoZSBFQ0Mga2V5IHBvaW50ZWQgdG8gYnkgCitcdGV4dGl0e2tleX0uICBUaGUgZnVuY3Rpb24gd2lsbCBmcmVlIGFueSBhbGxvY2F0ZWQgbWVtb3J5IHVwb24gZXJyb3IuCisKK1xzdWJzZWN0aW9ue0V4dGVuZGVkIEFOU0kgWDkuNjMgSW1wb3J0fQorVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBhbGxvd3MgdGhlIGltcG9ydGluZyBvZiBhbiBBTlNJIHg5LjYzIHNlY3Rpb24gNC4zLjYgZm9ybWF0IHB1YmxpYyBFQ0Mga2V5IHVzaW5nIHVzZXIgc3BlY2lmaWVkIGRvbWFpbiBwYXJhbWV0ZXJzOgorCitcaW5kZXh7ZWNjXF9hbnNpXF94OTYzXF9pbXBvcnRcX2V4KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZWNjX2Fuc2lfeDk2M19pbXBvcnRfZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5ICprZXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19lY2Nfc2V0X3R5cGUgKmRwKTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIHdpbGwgaW1wb3J0IHRoZSBrZXkgc3RvcmVkIGluIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7aW59IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSBvY3RldHMgdXNpbmcgdGhlIGRvbWFpbiBwYXJhbWV0ZXJzIHBvaW50ZWQgdG8gYnkgXHRleHRpdHtkcH0uICAKK1RoZSBpbXBvcnRlZCBrZXkgaXMgc3RvcmVkIGluIHRoZSBFQ0Mga2V5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtrZXl9LiAgVGhlIGZ1bmN0aW9uIHdpbGwgZnJlZSBhbnkgYWxsb2NhdGVkIG1lbW9yeSB1cG9uIGVycm9yLgorCitcc3Vic2VjdGlvbntFQ0MgU2hhcmVkIFNlY3JldH0KK1RvIGNvbnN0cnVjdCBhIERpZmZpZS1IZWxsbWFuIHNoYXJlZCBzZWNyZXQgd2l0aCBhIHByaXZhdGUgYW5kIHB1YmxpYyBFQ0Mga2V5LCB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKK1xpbmRleHtlY2NcX3NoYXJlZFxfc2VjcmV0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZWNjX3NoYXJlZF9zZWNyZXQoICAgICAgZWNjX2tleSAqcHJpdmF0ZV9rZXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjY19rZXkgKnB1YmxpY19rZXksIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CitUaGUgXHRleHRpdHtwcml2YXRlXF9rZXl9IGlzIHR5cGljYWxseSB0aGUgbG9jYWwgcHJpdmF0ZSBrZXksIGFuZCBcdGV4dGl0e3B1YmxpY1xfa2V5fSBpcyB0aGUga2V5IHRoZSByZW1vdGUgcGFydHkgaGFzIHNoYXJlZC4gICAKK05vdGU6IHRoaXMgZnVuY3Rpb24gc3RvcmVzIG9ubHkgdGhlICR4JCBjby1vcmRpbmF0ZSBvZiB0aGUgc2hhcmVkIGVsbGlwdGljIHBvaW50IGFzIGRlc2NyaWJlZCBpbiBBTlNJIFg5LjYzIEVDQy0tREguICAKKworXG15c2VjdGlvbntFQ0MgRGlmZmllLUhlbGxtYW4gRW5jcnlwdGlvbn0KK0VDQy0tREggRW5jcnlwdGlvbiBpcyBwZXJmb3JtZWQgYnkgcHJvZHVjaW5nIGEgcmFuZG9tIGtleSwgaGFzaGluZyBpdCwgYW5kIFhPUidpbmcgdGhlIGRpZ2VzdCBhZ2FpbnN0IHRoZSBwbGFpbnRleHQuICBJdCBpcyBub3Qgc3RyaWN0bHkgQU5TSSBYOS42MyBjb21wbGlhbnQKK2J1dCBpdCBpcyB2ZXJ5IHNpbWlsYXIuICBJdCBoYXMgYmVlbiBleHRlbmRlZCBieSB1c2luZyBhbiBBU04uMSBzZXF1ZW5jZSBhbmQgaGFzaCBvYmplY3QgaWRlbnRpZmllcnMgdG8gYWxsb3cgcG9ydGFibGUgdXNhZ2UuICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uCitlbmNyeXB0cyBhIHNob3J0IHN0cmluZyAobm8gbG9uZ2VyIHRoYW4gdGhlIG1lc3NhZ2UgZGlnZXN0KSB1c2luZyB0aGlzIHRlY2huaXF1ZToKKworXHN1YnNlY3Rpb257RUNDLURIIEVuY3J5cHRpb259CitcaW5kZXh7ZWNjXF9lbmNyeXB0XF9rZXkoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBlY2NfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd3BybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBoYXNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CisKK0FzIHRoZSBuYW1lIGltcGxpZXMgdGhpcyBmdW5jdGlvbiBlbmNyeXB0cyBhIChzeW1tZXRyaWMpIGtleSwgYW5kIGlzIG5vdCBpbnRlbmRlZCBmb3IgZW5jcnlwdGluZyBsb25nIG1lc3NhZ2VzIGRpcmVjdGx5LiAgSXQgd2lsbCBlbmNyeXB0IHRoZSAKK3BsYWludGV4dCBpbiB0aGUgYXJyYXkgcG9pbnRlZCB0byBieSBcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0gb2N0ZXRzLiAgSXQgdXNlcyB0aGUgcHVibGljIEVDQyBrZXkgcG9pbnRlZCB0byBieSBcdGV4dGl0e2tleX0sIGFuZAoraGFzaCBhbGdvcml0aG0gaW5kZXhlZCBieSBcdGV4dGl0e2hhc2h9IHRvIGNvbnN0cnVjdCBhIHNoYXJlZCBzZWNyZXQgd2hpY2ggbWF5IGJlIFhPUidlZCBhZ2FpbnN0IHRoZSBwbGFpbnRleHQuICBUaGUgY2lwaGVydGV4dCBpcyBzdG9yZWQgaW4KK3RoZSBvdXRwdXQgYnVmZmVyIHBvaW50ZWQgdG8gYnkgXHRleHRpdHtvdXR9IG9mIGxlbmd0aCBcdGV4dGl0e291dGxlbn0gb2N0ZXRzLgorCitUaGUgZGF0YSBpcyBlbmNyeXB0ZWQgdG8gdGhlIHB1YmxpYyBFQ0MgXHRleHRpdHtrZXl9IHN1Y2ggdGhhdCBvbmx5IHRoZSBob2xkZXIgb2YgdGhlIHByaXZhdGUga2V5IGNhbiBkZWNyeXB0IHRoZSBwYXlsb2FkLiAgVG8gaGF2ZSBtdWx0aXBsZSAKK3JlY2lwaWVudHMgbXVsdGlwbGUgY2FsbCB0byB0aGlzIGZ1bmN0aW9uIGZvciBlYWNoIHB1YmxpYyBFQ0Mga2V5IGlzIHJlcXVpcmVkLgorCitcc3Vic2VjdGlvbntFQ0MtREggRGVjcnlwdGlvbn0KK1xpbmRleHtlY2NcX2RlY3J5cHRcX2tleSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGVjY19kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5ICprZXkpOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyBmdW5jdGlvbiB3aWxsIGRlY3J5cHQgYW4gZW5jcnlwdGVkIHBheWxvYWQuICBUaGUgXHRleHRpdHtrZXl9IHByb3ZpZGVkIG11c3QgYmUgdGhlIHByaXZhdGUga2V5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHB1YmxpYyBrZXkKK3VzZWQgZHVyaW5nIGVuY3J5cHRpb24uICBJZiB0aGUgd3Jvbmcga2V5IGlzIHByb3ZpZGVkIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCBzcGVjaWZpY2FsbHkgcmV0dXJuIGFuIGVycm9yIGNvZGUuICBJdCBpcyBpbXBvcnRhbnQKK3RvIHVzZSBzb21lIGZvcm0gb2YgY2hhbGxlbmdlIHJlc3BvbnNlIGluIHRoYXQgY2FzZSAoZS5nLiBjb21wdXRlIGEgTUFDIG9mIGEga25vd24gc3RyaW5nKS4KKworXHN1YnNlY3Rpb257RUNDIEVuY3J5cHRpb24gRm9ybWF0fQorVGhlIHBhY2tldCBmb3JtYXQgZm9yIHRoZSBlbmNyeXB0ZWQga2V5cyBpcyB0aGUgZm9sbG93aW5nIEFTTi4xIFNFUVVFTkNFOgorCitcYmVnaW57dmVyYmF0aW19CitFQ0NFbmNyeXB0IDo6PSBTRVFVRU5DRSB7CisgICBoYXNoSUQgICAgICAgIE9CSkVDVCBJREVOVElGSUVSLCAtLSBPSUQgb2YgaGFzaCB1c2VkCisgICBwdWJrZXkgICAgICAgIE9DVEVUIFNUUklORyAgICAgLCAtLSBFbmNhcHN1bGF0ZWQgRUNDUHVibGljS2V5CisgICBza2V5ICAgICAgICAgIE9DVEVUIFNUUklORyAgICAgICAtLSB4b3Igb2YgcGxhaW50ZXh0IGFuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tImhhc2ggb2Ygc2hhcmVkIHNlY3JldCIKK30KK1xlbmR7dmVyYmF0aW19CisKK1xteXNlY3Rpb257RUMgRFNBIFNpZ25hdHVyZXN9CisKK1RoZXJlIGFyZSBhbHNvIGZ1bmN0aW9ucyB0byBzaWduIGFuZCB2ZXJpZnkgbWVzc2FnZXMuICBUaGV5IHVzZSB0aGUgQU5TSSBYOS42MiBFQy1EU0EgYWxnb3JpdGhtIHRvIGdlbmVyYXRlIGFuZCB2ZXJpZnkgc2lnbmF0dXJlcyBpbiB0aGUKK0FOU0kgWDkuNjIgZm9ybWF0LiAgCisKK1xzdWJzZWN0aW9ue0VDLURTQSBTaWduYXR1cmUgR2VuZXJhdGlvbn0KK1RvIHNpZ24gYSBtZXNzYWdlIGRpZ2VzdCAoaGFzaCkgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CisKK1xpbmRleHtlY2NcX3NpZ25cX2hhc2goKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBlY2Nfc2lnbl9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjY19rZXkgKmtleSk7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIGZ1bmN0aW9uIHdpbGwgRUMtLURTQSBzaWduIHRoZSBtZXNzYWdlIGRpZ2VzdCBzdG9yZWQgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IG9jdGV0cy4gIFRoZSBzaWduYXR1cmUKK3dpbGwgYmUgc3RvcmVkIGluIHRoZSBhcnJheSBwb2ludGVkIHRvIGJ5IFx0ZXh0aXR7b3V0fSBvZiBsZW5ndGggXHRleHRpdHtvdXRsZW59IG9jdGV0cy4gIFRoZSBmdW5jdGlvbiByZXF1aXJlcyBhIHByb3Blcmx5IHNlZWRlZCBQUk5HLCBhbmQgCit0aGUgRUNDIFx0ZXh0aXR7a2V5fSBwcm92aWRlZCBtdXN0IGJlIGEgcHJpdmF0ZSBrZXkuCisKK1xzdWJzZWN0aW9ue0VDLURTQSBTaWduYXR1cmUgVmVyaWZpY2F0aW9ufQorXGluZGV4e2VjY1xfdmVyaWZ5XF9oYXNoKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZWNjX3ZlcmlmeV9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIHNpZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGhhc2hsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgZnVuY3Rpb24gd2lsbCB2ZXJpZnkgdGhlIEVDLURTQSBzaWduYXR1cmUgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgXHRleHRpdHtzaWd9IG9mIGxlbmd0aCBcdGV4dGl0e3NpZ2xlbn0gb2N0ZXRzLCBhZ2FpbnN0IHRoZSBtZXNzYWdlIGRpZ2VzdCAKK3BvaW50ZWQgdG8gYnkgdGhlIGFycmF5IFx0ZXh0aXR7aGFzaH0gb2YgbGVuZ3RoIFx0ZXh0aXR7aGFzaGxlbn0uICBJdCB3aWxsIHN0b3JlIGEgbm9uLS16ZXJvIHZhbHVlIGluIFx0ZXh0aXR7c3RhdH0gaWYgdGhlIHNpZ25hdHVyZSBpcyB2YWxpZC4gIE5vdGU6IAordGhlIGZ1bmN0aW9uIHdpbGwgbm90IHJldHVybiBhbiBlcnJvciBpZiB0aGUgc2lnbmF0dXJlIGlzIGludmFsaWQuICBJdCB3aWxsIHJldHVybiBhbiBlcnJvciwgaWYgdGhlIGFjdHVhbCBzaWduYXR1cmUgcGF5bG9hZCBpcyBhbiBpbnZhbGlkIGZvcm1hdC4gIAorVGhlIEVDQyBcdGV4dGl0e2tleX0gbXVzdCBiZSB0aGUgcHVibGljIChvciBwcml2YXRlKSBFQ0Mga2V5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGtleSB0aGF0IHBlcmZvcm1lZCB0aGUgc2lnbmF0dXJlLgorCitcc3Vic2VjdGlvbntTaWduYXR1cmUgRm9ybWF0fQorVGhlIHNpZ25hdHVyZSBjb2RlIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIFg5LjYyIEVDLS1EU0EsIGFuZCB0aGUgb3V0cHV0IGlzIGNvbXBsaWFudCBmb3IgR0YocCkgY3VydmVzLgorCitcbXlzZWN0aW9ue0VDQyBLZXlzaXplc30KK1dpdGggRUNDIGlmIHlvdSB0cnkgdG8gc2lnbiBhIGhhc2ggdGhhdCBpcyBiaWdnZXIgdGhhbiB5b3VyIEVDQyBrZXkgeW91IGNhbiBydW4gaW50byBwcm9ibGVtcy4gIFRoZSBtYXRoIHdpbGwgc3RpbGwgd29yaywgYW5kIGluIGVmZmVjdCB0aGUgc2lnbmF0dXJlIHdpbGwgc3RpbGwgCit3b3JrLiAgV2l0aCBFQ0Mga2V5cyB0aGUgc3RyZW5ndGggb2YgdGhlIHNpZ25hdHVyZSBpcyBsaW1pdGVkIGJ5IHRoZSBzaXplIG9mIHRoZSBoYXNoLCBvciB0aGUgc2l6ZSBvZiB0aGV5IGtleSwgd2hpY2hldmVyIGlzIHNtYWxsZXIuICBGb3IgZXhhbXBsZSwgaWYgeW91IHNpZ24gd2l0aCAKK1NIQTI1NiBhbmQgYW4gRUNDLTE5MiBrZXksIHlvdSBpbiBlZmZlY3QgaGF2ZSA5Ni0tYml0cyBvZiBzZWN1cml0eS4gIAorCitUaGUgbGlicmFyeSB3aWxsIG5vdCB3YXJuIHlvdSBpZiB5b3UgbWFrZSB0aGlzIG1pc3Rha2UsIHNvIGl0IGlzIGltcG9ydGFudCB0byBjaGVjayB5b3Vyc2VsZiBiZWZvcmUgdXNpbmcgdGhlIHNpZ25hdHVyZXMuCisKK1xjaGFwdGVye0RpZ2l0YWwgU2lnbmF0dXJlIEFsZ29yaXRobX0KK1xteXNlY3Rpb257SW50cm9kdWN0aW9ufQorVGhlIERpZ2l0YWwgU2lnbmF0dXJlIEFsZ29yaXRobSAob3IgRFNBKSBpcyBhIHZhcmlhbnQgb2YgdGhlIEVsR2FtYWwgU2lnbmF0dXJlIHNjaGVtZSB3aGljaCBoYXMgYmVlbiBtb2RpZmllZCB0byAKK3JlZHVjZSB0aGUgYmFuZHdpZHRoIG9mIHRoZSBzaWduYXR1cmVzLiAgRm9yIGV4YW1wbGUsIHRvIGhhdmUgXHRleHRpdHs4MC1iaXRzIG9mIHNlY3VyaXR5fSB3aXRoIEVsR2FtYWwsIHlvdSBuZWVkIGEgZ3JvdXAgd2l0aCBhbiBvcmRlciBvZiBhdCBsZWFzdCAxMDI0LS1iaXRzLiAgCitXaXRoIERTQSwgeW91IG5lZWQgYSBncm91cCBvZiBvcmRlciBhdCBsZWFzdCAxNjAtLWJpdHMuICBCeSBjb21wYXJpc29uLCB0aGUgRWxHYW1hbCBzaWduYXR1cmUgd291bGQgcmVxdWlyZSBhdCBsZWFzdCAyNTYgYnl0ZXMgb2Ygc3RvcmFnZSwgd2hlcmVhcyB0aGUgRFNBIHNpZ25hdHVyZSAKK3dvdWxkIHJlcXVpcmUgb25seSBhdCBsZWFzdCA0MCBieXRlcy4gIAorCitcbXlzZWN0aW9ue0tleSBGb3JtYXR9CitTaW5jZSBubyB1c2VmdWwgcHVibGljIHN0YW5kYXJkIGZvciBEU0Ega2V5IHN0b3JhZ2Ugd2FzIHByZXNlbnRlZCB0byBtZSBkdXJpbmcgdGhlIGNvdXJzZSBvZiB0aGlzIGRldmVsb3BtZW50IEkgbWFkZSBteSBvd24gQVNOLjEgU0VRVUVOQ0Ugd2hpY2ggSSBkb2N1bWVudAorbm93IHNvIHRoYXQgb3RoZXJzIGNhbiBpbnRlcm9wZXJhdGUgd2l0aCB0aGlzIGxpYnJhcnkuCisKK1xiZWdpbnt2ZXJiYXRpbX0KK0RTQVB1YmxpY0tleSA6Oj0gU0VRVUVOQ0UgeworICAgIHB1YmxpY0ZsYWdzICAgIEJJVCBTVFJJTkcoMCksIC0tIG11c3QgYmUgMAorICAgIGcgICAgICAgICAgICAgIElOVEVHRVIgICAgICAsIC0tIGJhc2UgZ2VuZXJhdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gY2hlY2sgdGhhdCBnXnEgbW9kIHAgPT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGFuZCB0aGF0IDEgPCBnIDwgcCAtIDEKKyAgICBwICAgICAgICAgICAgICBJTlRFR0VSICAgICAgLCAtLSBwcmltZSBtb2R1bHVzIAorICAgIHEgICAgICAgICAgICAgIElOVEVHRVIgICAgICAsIC0tIG9yZGVyIG9mIHN1Yi1ncm91cCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAobXVzdCBiZSBwcmltZSkKKyAgICB5ICAgICAgICAgICAgICBJTlRFR0VSICAgICAgLCAtLSBwdWJsaWMga2V5LCBzcGVjaWZpY2FsbHksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGdeeCBtb2QgcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gY2hlY2sgdGhhdCB5XnEgbW9kIHAgPT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGFuZCB0aGF0IDEgPCB5IDwgcCAtIDEKK30KKworRFNBUHJpdmF0ZUtleSA6Oj0gU0VRVUVOQ0UgeworICAgIHB1YmxpY0ZsYWdzICAgIEJJVCBTVFJJTkcoMSksIC0tIG11c3QgYmUgMQorICAgIGcgICAgICAgICAgICAgIElOVEVHRVIgICAgICAsIC0tIGJhc2UgZ2VuZXJhdG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gY2hlY2sgdGhhdCBnXnEgbW9kIHAgPT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGFuZCB0aGF0IDEgPCBnIDwgcCAtIDEKKyAgICBwICAgICAgICAgICAgICBJTlRFR0VSICAgICAgLCAtLSBwcmltZSBtb2R1bHVzIAorICAgIHEgICAgICAgICAgICAgIElOVEVHRVIgICAgICAsIC0tIG9yZGVyIG9mIHN1Yi1ncm91cCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAobXVzdCBiZSBwcmltZSkKKyAgICB5ICAgICAgICAgICAgICBJTlRFR0VSICAgICAgLCAtLSBwdWJsaWMga2V5LCBzcGVjaWZpY2FsbHksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGdeeCBtb2QgcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gY2hlY2sgdGhhdCB5XnEgbW9kIHAgPT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGFuZCB0aGF0IDEgPCB5IDwgcCAtIDEKKyAgICB4ICAgICAgICAgICAgICBJTlRFR0VSICAgICAgICAtLSBwcml2YXRlIGtleQorfQorXGVuZHt2ZXJiYXRpbX0KKworVGhlIGxlYWRpbmcgQklUIFNUUklORyBoYXMgYSBzaW5nbGUgYml0IGluIGl0IHdoaWNoIGlzIHplcm8gZm9yIHB1YmxpYyBrZXlzIGFuZCBvbmUgZm9yIHByaXZhdGUga2V5cy4gIFRoaXMgbWFrZXMgdGhlIHN0cnVjdHVyZSB1bmlxdWVseSBkZWNvZGFibGUsIAorYW5kIGVhc3kgdG8gd29yayB3aXRoLgorCitcbXlzZWN0aW9ue0tleSBHZW5lcmF0aW9ufQorVG8gbWFrZSBhIERTQSBrZXkgeW91IG11c3QgY2FsbCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uCitcYmVnaW57dmVyYmF0aW19CitpbnQgZHNhX21ha2Vfa2V5KHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICB3cHJuZywgCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGdyb3VwX3NpemUsIAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtb2R1bHVzX3NpemUsIAorICAgICAgICAgICAgICAgICAgICBkc2Ffa2V5ICprZXkpOworXGVuZHt2ZXJiYXRpbX0KK1RoZSB2YXJpYWJsZSBcdGV4dGl0e3Bybmd9IGlzIGFuIGFjdGl2ZSBQUk5HIHN0YXRlIGFuZCBcdGV4dGl0e3dwcm5nfSB0aGUgaW5kZXggdG8gdGhlIGRlc2NyaXB0b3IuICBcdGV4dGl0e2dyb3VwXF9zaXplfSBhbmQgCitcdGV4dGl0e21vZHVsdXNcX3NpemV9IGNvbnRyb2wgdGhlIGRpZmZpY3VsdHkgb2YgZm9yZ2luZyBhIHNpZ25hdHVyZS4gIEJvdGggcGFyYW1ldGVycyBhcmUgaW4gYnl0ZXMuICBUaGUgbGFyZ2VyIHRoZQorXHRleHRpdHtncm91cFxfc2l6ZX0gdGhlIG1vcmUgZGlmZmljdWx0IGEgZm9yZ2VyeSBiZWNvbWVzIHVwdG8gYSBsaW1pdC4gIFRoZSB2YWx1ZSBvZiAkZ3JvdXBcX3NpemUkIGlzIGxpbWl0ZWQgYnkgCiskMTUgPCBncm91cFxfc2l6ZSA8IDEwMjQkIGFuZCAkbW9kdWx1c1xfc2l6ZSAtIGdyb3VwXF9zaXplIDwgNTEyJC4gIFN1Z2dlc3RlZCB2YWx1ZXMgZm9yIHRoZSBwYWlycyBhcmUgYXMgZm9sbG93cy4KKworXGJlZ2lue2ZpZ3VyZX1baGVyZV0KK1xiZWdpbntjZW50ZXJ9CitcYmVnaW57dGFidWxhcn17fGN8Y3xjfH0KK1xobGluZSBcdGV4dGJme0JpdHMgb2YgU2VjdXJpdHl9ICYgXHRleHRiZntncm91cFxfc2l6ZX0gJiBcdGV4dGJme21vZHVsdXNcX3NpemV9IFxcCitcaGxpbmUgODAgICYgMjAgJiAxMjggXFwKK1xobGluZSAxMjAgJiAzMCAmIDI1NiBcXAorXGhsaW5lIDE0MCAmIDM1ICYgMzg0IFxcCitcaGxpbmUgMTYwICYgNDAgJiA1MTIgXFwKK1xobGluZQorXGVuZHt0YWJ1bGFyfQorXGVuZHtjZW50ZXJ9CitcY2FwdGlvbntEU0EgS2V5IFNpemVzfQorXGVuZHtmaWd1cmV9CisKK1doZW4geW91IGFyZSBmaW5pc2hlZCB3aXRoIGEgRFNBIGtleSB5b3UgY2FuIGNhbGwgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB0byBmcmVlIHRoZSBtZW1vcnkgdXNlZC4KK1xpbmRleHtkc2FcX2ZyZWUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK3ZvaWQgZHNhX2ZyZWUoZHNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CisKK1xteXNlY3Rpb257S2V5IFZlcmlmaWNhdGlvbn0KK0VhY2ggRFNBIGtleSBpcyBjb21wb3NlZCBvZiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcy4KKworXGJlZ2lue2VudW1lcmF0ZX0KKyAgXGl0ZW0gJHEkIGEgc21hbGwgcHJpbWUgb2YgbWFnbml0dWRlICQyNTZee2dyb3VwXF9zaXplfSQuICAKKyAgXGl0ZW0gJHAgPSBxciArIDEkIGEgbGFyZ2UgcHJpbWUgb2YgbWFnbml0dWRlICQyNTZee21vZHVsdXNcX3NpemV9JCB3aGVyZSAkciQgaXMgYSByYW5kb20gZXZlbiBpbnRlZ2VyLgorICBcaXRlbSAkZyA9IGheciBcbWJveHsgKG1vZCB9cFxtYm94eyl9JCBhIGdlbmVyYXRvciBvZiBvcmRlciAkcSQgbW9kdWxvICRwJC4gICRoJCBjYW4gYmUgYW55IG5vbi10cml2aWFsIHJhbmRvbSAKKyAgICAgICAgdmFsdWUuICBGb3IgdGhpcyBsaWJyYXJ5IHRoZXkgc3RhcnQgYXQgJGggPSAyJCBhbmQgc3RlcCB1bnRpbCAkZyQgaXMgbm90ICQxJC4KKyAgXGl0ZW0gJHgkIGEgcmFuZG9tIHNlY3JldCAodGhlIHNlY3JldCBrZXkpIGluIHRoZSByYW5nZSAkMSA8IHggPCBxJCAKKyAgXGl0ZW0gJHkgPSBnXnggXG1ib3h7IChtb2QgfXBcbWJveHspfSQgdGhlIHB1YmxpYyBrZXkuCitcZW5ke2VudW1lcmF0ZX0KKworQSBEU0Ega2V5IGlzIGNvbnNpZGVyZWQgdmFsaWQgaWYgaXQgcGFzc2VzIGFsbCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzLgorCitcYmVnaW57ZW51bWVyYXRlfQorICAgXGl0ZW0gJHEkIG11c3QgYmUgcHJpbWUuCisgICBcaXRlbSAkcCQgbXVzdCBiZSBwcmltZS4KKyAgIFxpdGVtICRnJCBjYW5ub3QgYmUgb25lIG9mICRcbGJyYWNlIC0xLCAwLCAxIFxyYnJhY2UkIChtb2R1bG8gJHAkKS4KKyAgIFxpdGVtICRnJCBtdXN0IGJlIGxlc3MgdGhhbiAkcCQuCisgICBcaXRlbSAkKHAtMSkgXGVxdWl2IDAgXG1ib3h7IChtb2QgfXFcbWJveHspfSQuCisgICBcaXRlbSAkZ15xIFxlcXVpdiAxIFxtYm94eyAobW9kIH1wXG1ib3h7KX0kLgorICAgXGl0ZW0gJDEgPCB5IDwgcCAtIDEkCisgICBcaXRlbSAkeV5xIFxlcXVpdiAxIFxtYm94eyAobW9kIH1wXG1ib3h7KX0kLgorXGVuZHtlbnVtZXJhdGV9CisKK1Rlc3RzIG9uZSBhbmQgdHdvIGVuc3VyZSB0aGF0IHRoZSB2YWx1ZXMgd2lsbCBhdCBsZWFzdCBmb3JtIGEgZmllbGQgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIHRoZSBzaWduYXR1cmVzIHRvICAKK2Z1bmN0aW9uLiAgVGVzdHMgdGhyZWUgYW5kIGZvdXIgZW5zdXJlIHRoYXQgdGhlIGdlbmVyYXRvciAkZyQgaXMgbm90IHNldCB0byBhIHRyaXZpYWwgdmFsdWUgd2hpY2ggd291bGQgbWFrZSBzaWduYXR1cmUKK2ZvcmdlcnkgZWFzaWVyLiAgVGVzdCBmaXZlIGVuc3VyZXMgdGhhdCAkcSQgZGl2aWRlcyB0aGUgb3JkZXIgb2YgbXVsdGlwbGljYXRpdmUgc3ViLWdyb3VwIG9mICRcWi9wXFokLiBUZXN0IHNpeAorZW5zdXJlcyB0aGF0IHRoZSBnZW5lcmF0b3IgYWN0dWFsbHkgZ2VuZXJhdGVzIGEgcHJpbWUgb3JkZXIgZ3JvdXAuICBUZXN0cyBzZXZlbiBhbmQgZWlnaHQgZW5zdXJlIHRoYXQgdGhlIHB1YmxpYyBrZXkKK2lzIHdpdGhpbiByYW5nZSBhbmQgYmVsb25ncyB0byBhIGdyb3VwIG9mIHByaW1lIG9yZGVyLiAgTm90ZSB0aGF0IHRlc3QgZWlnaHQgZG9lcyBub3QgcHJvdmUgdGhhdCAkZyQgZ2VuZXJhdGVkICR5JCBvbmx5Cit0aGF0ICR5JCBiZWxvbmdzIHRvIGEgbXVsdGlwbGljYXRpdmUgc3ViLWdyb3VwIG9mIG9yZGVyICRxJC4gCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb24gd2lsbCBwZXJmb3JtIHRoZXNlIHRlc3RzLgorCitcaW5kZXh7ZHNhXF92ZXJpZnlcX2tleSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGRzYV92ZXJpZnlfa2V5KGRzYV9rZXkgKmtleSwgaW50ICpzdGF0KTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCB0ZXN0IFx0ZXh0aXR7a2V5fSBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiBcdGV4dGl0e3N0YXR9LiAgSWYgdGhlIHJlc3VsdCBpcyAkc3RhdCA9IDAkIHRoZSBEU0Ega2V5IGZhaWxlZCBvbmUgb2YgdGhlIHRlc3RzCithbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGF0IGFsbC4gIElmIHRoZSByZXN1bHQgaXMgJHN0YXQgPSAxJCB0aGUgRFNBIGtleSBpcyB2YWxpZCAoYXMgZmFyIGFzIHZhbGlkIG1hdGhlbWF0aWNzIGFyZSBjb25jZXJuZWQpLgorCitcbXlzZWN0aW9ue1NpZ25hdHVyZXN9Citcc3Vic2VjdGlvbntTaWduYXR1cmUgR2VuZXJhdGlvbn0KK1RvIGdlbmVyYXRlIGEgRFNBIHNpZ25hdHVyZSBjYWxsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CisKK1xpbmRleHtkc2FcX3NpZ25cX2hhc2goKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkc2Ffc2lnbl9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzYV9rZXkgKmtleSk7CitcZW5ke3ZlcmJhdGltfQorCitXaGljaCB3aWxsIHNpZ24gdGhlIGRhdGEgaW4gXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IGJ5dGVzLiAgVGhlIHNpZ25hdHVyZSBpcyBzdG9yZWQgaW4gXHRleHRpdHtvdXR9IGFuZCB0aGUgc2l6ZQorb2YgdGhlIHNpZ25hdHVyZSBpbiBcdGV4dGl0e291dGxlbn0uICBJZiB0aGUgc2lnbmF0dXJlIGlzIGxvbmdlciB0aGFuIHRoZSBzaXplIHlvdSBpbml0aWFsbHkgc3BlY2lmeSBpbiBcdGV4dGl0e291dGxlbn0gbm90aGluZworaXMgc3RvcmVkIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb2RlLiAgVGhlIERTQSBcdGV4dGl0e2tleX0gbXVzdCBiZSBvZiB0aGUgXHRleHRiZntQS1xfUFJJVkFURX0gcGVyc3Vhc2lvbi4KKworXHN1YnNlY3Rpb257U2lnbmF0dXJlIFZlcmlmaWNhdGlvbn0KK1RvIHZlcmlmeSBhIGhhc2ggY3JlYXRlZCB3aXRoIHRoYXQgZnVuY3Rpb24gdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CisKK1xpbmRleHtkc2FcX3ZlcmlmeVxfaGFzaCgpfSAKK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkc2FfdmVyaWZ5X2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgc2lnbGVuLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CitXaGljaCB3aWxsIHZlcmlmeSB0aGUgZGF0YSBpbiBcdGV4dGl0e2hhc2h9IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSBhZ2FpbnN0IHRoZSBzaWduYXR1cmUgc3RvcmVkIGluIFx0ZXh0aXR7c2lnfSBvZiBsZW5ndGggXHRleHRpdHtzaWdsZW59LiAgCitJdCB3aWxsIHNldCBcdGV4dGl0e3N0YXR9IHRvICQxJCBpZiB0aGUgc2lnbmF0dXJlIGlzIHZhbGlkLCBvdGhlcndpc2UgaXQgc2V0cyBcdGV4dGl0e3N0YXR9IHRvICQwJC4gIAorCitcbXlzZWN0aW9ue0RTQSBFbmNyeXB0IGFuZCBEZWNyeXB0fQorQXMgb2YgdmVyc2lvbiAxLjA3LCB0aGUgRFNBIGtleXMgY2FuIGJlIHVzZWQgdG8gZW5jcnlwdCBhbmQgZGVjcnlwdCBzbWFsbCBwYXlsb2Fkcy4gIEl0IHdvcmtzIHNpbWlsYXIgdG8gdGhlIEVDQyBlbmNyeXB0aW9uIHdoZXJlCithIHNoYXJlZCBrZXkgaXMgY29tcHV0ZWQsIGFuZCB0aGUgaGFzaCBvZiB0aGUgc2hhcmVkIGtleSBYT1InZWQgYWdhaW5zdCB0aGUgcGxhaW50ZXh0IGZvcm1zIHRoZSBjaXBoZXJ0ZXh0LiAgVGhlIGZvcm1hdCB1c2VkIGlzIGZ1bmN0aW9uYWwgcG9ydCBvZgordGhlIEVDQyBlbmNyeXB0aW9uIGZvcm1hdCB0byB0aGUgRFNBIGFsZ29yaXRobS4KKworXHN1YnNlY3Rpb257RFNBIEVuY3J5cHRpb259CitUaGlzIGZ1bmN0aW9uIHdpbGwgZW5jcnlwdCBhIHNtYWxsIHBheWxvYWQgd2l0aCBhIHJlY2lwaWVudHMgcHVibGljIERTQSBrZXkuCisKK1xpbmRleHtkc2FcX2VuY3J5cHRcX2tleSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGRzYV9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgaGFzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzYV9rZXkgKmtleSk7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgZW5jcnlwdCB0aGUgcGF5bG9hZCBpbiBcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0gYW5kIHN0b3JlIHRoZSBjaXBoZXJ0ZXh0IGluIHRoZSBvdXRwdXQgYnVmZmVyIFx0ZXh0aXR7b3V0fS4gIFRoZQorbGVuZ3RoIG9mIHRoZSBjaXBoZXJ0ZXh0IFx0ZXh0aXR7b3V0bGVufSBtdXN0IGJlIG9yaWdpbmFsbHkgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIuICBUaGUgRFNBIFx0ZXh0aXR7a2V5fSBjYW4gYmUgCithIHB1YmxpYyBrZXkuCisKK1xzdWJzZWN0aW9ue0RTQSBEZWNyeXB0aW9ufQorCitcaW5kZXh7ZHNhXF9kZWNyeXB0XF9rZXkoKX0KK1xiZWdpbnt2ZXJiYXRpbX0gICAgICAgICAgICAgICAgICAgICAgCitpbnQgZHNhX2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2Ffa2V5ICprZXkpOworXGVuZHt2ZXJiYXRpbX0KK1RoaXMgd2lsbCBkZWNyeXB0IHRoZSBjaXBoZXJ0ZXh0IFx0ZXh0aXR7aW59IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSwgYW5kIHN0b3JlIHRoZSBvcmlnaW5hbCBwYXlsb2FkIGluIFx0ZXh0aXR7b3V0fSBvZiBsZW5ndGggXHRleHRpdHtvdXRsZW59LiAgCitUaGUgRFNBIFx0ZXh0aXR7a2V5fSBtdXN0IGJlIGEgcHJpdmF0ZSBrZXkuCisKK1xteXNlY3Rpb257RFNBIEtleSBJbXBvcnQgYW5kIEV4cG9ydH0KKworXHN1YnNlY3Rpb257RFNBIEtleSBFeHBvcnR9CitUbyBleHBvcnQgYSBEU0Ega2V5IHNvIHRoYXQgaXQgY2FuIGJlIHRyYW5zcG9ydGVkIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgorXGluZGV4e2RzYVxfZXhwb3J0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZHNhX2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgZHNhX2tleSAqa2V5KTsKK1xlbmR7dmVyYmF0aW19CitUaGlzIHdpbGwgZXhwb3J0IHRoZSBEU0EgXHRleHRpdHtrZXl9IHRvIHRoZSBidWZmZXIgXHRleHRpdHtvdXR9IGFuZCBzZXQgdGhlIGxlbmd0aCBpbiBcdGV4dGl0e291dGxlbn0gKHdoaWNoIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkKK2luaXRpYWxpemVkIHRvIHRoZSBtYXhpbXVtIGJ1ZmZlciBzaXplKS4gIFRoZSBcdGV4dGl0e3R5cGV9IHZhcmlhYmxlIG1heSBiZSBlaXRoZXIgXHRleHRiZntQS1xfUFJJVkFURX0gb3IgXHRleHRiZntQS1xfUFVCTElDfQorZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91IHdhbnQgdG8gZXhwb3J0IGEgcHJpdmF0ZSBvciBwdWJsaWMgY29weSBvZiB0aGUgRFNBIGtleS4KKworXHN1YnNlY3Rpb257RFNBIEtleSBJbXBvcnR9CitUbyBpbXBvcnQgYW4gZXhwb3J0ZWQgRFNBIGtleSB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbgorOgorXGluZGV4e2RzYVxfaW1wb3J0KCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZHNhX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2Ffa2V5ICprZXkpOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGltcG9ydCB0aGUgRFNBIGtleSBmcm9tIHRoZSBidWZmZXIgXHRleHRpdHtpbn0gb2YgbGVuZ3RoIFx0ZXh0aXR7aW5sZW59IHRvIHRoZSBcdGV4dGl0e2tleX0uICBJZiB0aGUgcHJvY2VzcyBmYWlscyB0aGUgZnVuY3Rpb24KK3dpbGwgYXV0b21hdGljYWxseSBmcmVlIGFsbCBvZiB0aGUgaGVhcCBhbGxvY2F0ZWQgaW4gdGhlIHByb2Nlc3MgKHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgZHNhXF9mcmVlKCkpLiAgCisKK1xjaGFwdGVye1N0YW5kYXJkcyBTdXBwb3J0fQorXG15c2VjdGlvbntBU04uMSBGb3JtYXRzfQorTGliVG9tQ3J5cHQgc3VwcG9ydHMgYSB2YXJpZXR5IG9mIEFTTi4xIGRhdGEgdHlwZXMgZW5jb2RlZCB3aXRoIHRoZSBEaXN0aW5ndWlzaGVkIEVuY29kaW5nIFJ1bGVzIChERVIpIHN1aXRhYmxlIGZvciB2YXJpb3VzIGNyeXB0b2dyYXBoaWMgcHJvdG9jb2xzLiAgVGhlIGRhdGEgdHlwZXMKK2FyZSBhbGwgcHJvdmlkZWQgd2l0aCB0aHJlZSBiYXNpYyBmdW5jdGlvbnMgd2l0aCBcdGV4dGl0e3NpbWlsYXJ9IHByb3RvdHlwZXMuICBPbmUgZnVuY3Rpb24gaGFzIGJlZW4gZGVkaWNhdGVkIHRvIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIGluIG9jdGV0cyBvZiBhIGdpdmVuCitmb3JtYXQsIGFuZCB0d28gZnVuY3Rpb25zIGhhdmUgYmVlbiBkZWRpY2F0ZWQgdG8gZW5jb2RpbmcgYW5kIGRlY29kaW5nIHRoZSBmb3JtYXQuICAKKworT24gdG9wIG9mIHRoZSBiYXNpYyBkYXRhIHR5cGVzIGFyZSB0aGUgU0VRVUVOQ0UgYW5kIFNFVCBkYXRhIHR5cGVzIHdoaWNoIGFyZSBjb2xsZWN0aW9ucyBvZiBvdGhlciBBU04uMSB0eXBlcy4gIFRoZXkgYXJlIHByb3ZpZGVkIAoraW4gdGhlIHNhbWUgbWFubmVyIGFzIHRoZSBvdGhlciBkYXRhIHR5cGVzIGV4Y2VwdCB0aGV5IHVzZSBsaXN0IG9mIG9iamVjdHMga25vd24gYXMgdGhlIFx0ZXh0YmZ7bHRjXF9hc24xXF9saXN0fSBzdHJ1Y3R1cmUuICBJdCBpcyBkZWZpbmVkIGFzIHRoZSBmb2xsb3dpbmc6CisKK1xpbmRleHtsdGNcX2FzbjFcX2xpc3Qgc3RydWN0dXJlfQorXGJlZ2lue3ZlcmJhdGltfQordHlwZWRlZiBzdHJ1Y3QgeworICAgaW50ICAgICAgICAgICAgICAgICAgICB0eXBlOworICAgdm9pZCAgICAgICAgICAgICAgICAgICpkYXRhOworICAgdW5zaWduZWQgbG9uZyAgICAgICAgICBzaXplOworICAgaW50ICAgICAgICAgICAgICAgICAgICB1c2VkOworICAgc3RydWN0IGx0Y19hc24xX2xpc3RfICpwcmV2LCAgKm5leHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICpjaGlsZCwgKnBhcmVudDsKK30gbHRjX2FzbjFfbGlzdDsKK1xlbmR7dmVyYmF0aW19CisKK1xpbmRleHtMVENcX1NFVFxfQVNOMSBtYWNyb30KK1RoZSBcdGV4dGl0e3R5cGV9IGZpZWxkIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nIEFTTi4xIGZpZWxkIGRlZmluaXRpb25zLiAgVGhlIFx0ZXh0aXR7ZGF0YX0gcG9pbnRlciBpcyBhIHZvaWQgcG9pbnRlciB0byB0aGUgZGF0YSB0byBiZSBlbmNvZGVkIChvciB0aGUgZGVzdGluYXRpb24pIGFuZCB0aGUgCitcdGV4dGl0e3NpemV9IGZpZWxkIGlzIHNwZWNpZmljIHRvIHdoYXQgeW91IGFyZSBlbmNvZGluZyAoZS5nLiBudW1iZXIgb2YgYml0cyBpbiB0aGUgQklUIFNUUklORyBkYXRhIHR5cGUpLiAgVGhlIFx0ZXh0aXR7dXNlZH0gZmllbGQgaXMgcHJpbWFyaWx5IGZvciB0aGUgQ0hPSUNFIGRlY29kZXIKK2FuZCByZWZsZWN0cyBpZiB0aGUgcGFydGljdWxhciBtZW1iZXIgb2YgYSBsaXN0IHdhcyB0aGUgZGVjb2RlZCBkYXRhIHR5cGUuICBUbyBoZWxwIGJ1aWxkIHRoZSBsaXN0cyBpbiBhbiBvcmRlcmx5IGZhc2hpb24gdGhlIG1hY3JvCitcdGV4dGl0e0xUQ1xfU0VUXF9BU04xKGxpc3QsIGluZGV4LCBUeXBlLCBEYXRhLCBTaXplKX0gaGFzIGJlZW4gcHJvdmlkZWQuCisKK0l0IHdpbGwgYXNzaWduIHRvIHRoZSBcdGV4dGl0e2luZGV4fXRoIHBvc2l0aW9uIGluIHRoZSBcdGV4dGl0e2xpc3R9IHRoZSB0cmlwbGV0IChUeXBlLCBEYXRhLCBTaXplKS4gIEFuIGV4YW1wbGUgdXNhZ2Ugd291bGQgYmU6CisKK1xiZWdpbntzbWFsbH0KK1xiZWdpbnt2ZXJiYXRpbX0KKy4uLgorbHRjX2FzbjFfbGlzdCAgIHNlcXVlbmNlWzNdOwordW5zaWduZWQgbG9uZyAgIHRocmVlPTM7CisKK0xUQ19TRVRfQVNOMShzZXF1ZW5jZSwgMCwgTFRDX0FTTjFfSUE1X1NUUklORywgICAgImhlbGxvIiwgNSk7CitMVENfU0VUX0FTTjEoc2VxdWVuY2UsIDEsIExUQ19BU04xX1NIT1JUX0lOVEVHRVIsICZ0aHJlZSwgIDEpOworTFRDX1NFVF9BU04xKHNlcXVlbmNlLCAyLCBMVENfQVNOMV9OVUxMLCAgICAgICAgICAgTlVMTCwgICAwKTsKK1xlbmR7dmVyYmF0aW19CitcZW5ke3NtYWxsfQorCitUaGUgbWFjcm8gaXMgcmVsYXRpdmVseSBzYWZlIHdpdGggcmVzcGVjdCB0byBtb2RpZnlpbmcgdmFyaWFibGVzLCBmb3IgaW5zdGFuY2UgdGhlIGZvbGxvd2luZyBjb2RlIGlzIGVxdWl2YWxlbnQuCisKK1xiZWdpbntzbWFsbH0KK1xiZWdpbnt2ZXJiYXRpbX0KKy4uLgorbHRjX2FzbjFfbGlzdCAgIHNlcXVlbmNlWzNdOwordW5zaWduZWQgbG9uZyAgIHRocmVlPTM7CitpbnQgICAgICAgICAgICAgeD0wOworTFRDX1NFVF9BU04xKHNlcXVlbmNlLCB4KyssIExUQ19BU04xX0lBNV9TVFJJTkcsICAgICJoZWxsbyIsIDUpOworTFRDX1NFVF9BU04xKHNlcXVlbmNlLCB4KyssIExUQ19BU04xX1NIT1JUX0lOVEVHRVIsICZ0aHJlZSwgIDEpOworTFRDX1NFVF9BU04xKHNlcXVlbmNlLCB4KyssIExUQ19BU04xX05VTEwsICAgICAgICAgICBOVUxMLCAgIDApOworXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CisKK1xiZWdpbntmaWd1cmV9W2hlcmVdCitcYmVnaW57Y2VudGVyfQorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3RhYnVsYXJ9e3xsfGx8fQorXGhsaW5lIFx0ZXh0YmZ7RGVmaW5pdGlvbn0gICAgICAgICAgICYgXHRleHRiZntBU04uMSBUeXBlfSBcXAorXGhsaW5lIExUQ1xfQVNOMVxfRU9MICAgICAgICAgICAgICAgICYgRW5kIG9mIGEgQVNOLjEgbGlzdCBzdHJ1Y3R1cmUuIFxcCitcaGxpbmUgTFRDXF9BU04xXF9CT09MRUFOICAgICAgICAgICAgJiBCT09MRUFOIHR5cGUgXFwKK1xobGluZSBMVENcX0FTTjFcX0lOVEVHRVIgICAgICAgICAgICAmIElOVEVHRVIgKHVzZXMgbXBcX2ludCkgXFwKK1xobGluZSBMVENcX0FTTjFcX1NIT1JUXF9JTlRFR0VSICAgICAmIElOVEVHRVIgKDMyLS1iaXQgdXNpbmcgdW5zaWduZWQgbG9uZykgXFwKK1xobGluZSBMVENcX0FTTjFcX0JJVFxfU1RSSU5HICAgICAgICAmIEJJVCBTVFJJTkcgKG9uZSBiaXQgcGVyIGNoYXIpIFxcCitcaGxpbmUgTFRDXF9BU04xXF9PQ1RFVFxfU1RSSU5HICAgICAgJiBPQ1RFVCBTVFJJTkcgKG9uZSBvY3RldCBwZXIgY2hhcikgXFwKK1xobGluZSBMVENcX0FTTjFcX05VTEwgICAgICAgICAgICAgICAmIE5VTEwgXFwKK1xobGluZSBMVENcX0FTTjFcX09CSkVDVFxfSURFTlRJRklFUiAmIE9CSkVDVCBJREVOVElGSUVSICBcXAorXGhsaW5lIExUQ1xfQVNOMVxfSUE1XF9TVFJJTkcgICAgICAgICYgSUE1IFNUUklORyAob25lIG9jdGV0IHBlciBjaGFyKSBcXAorXGhsaW5lIExUQ1xfQVNOMVxfVVRGOFxfU1RSSU5HICAgICAgICYgVVRGOCBTVFJJTkcgKG9uZSB3Y2hhclxfdCBwZXIgY2hhcikgXFwKK1xobGluZSBMVENcX0FTTjFcX1BSSU5UQUJMRVxfU1RSSU5HICAmIFBSSU5UQUJMRSBTVFJJTkcgKG9uZSBvY3RldCBwZXIgY2hhcikgXFwKK1xobGluZSBMVENcX0FTTjFcX1VUQ1RJTUUgICAgICAgICAgICAmIFVUQ1RJTUUgKHNlZSBsdGNcX3V0Y3RpbWUgc3RydWN0dXJlKSBcXAorXGhsaW5lIExUQ1xfQVNOMVxfU0VRVUVOQ0UgICAgICAgICAgICYgU0VRVUVOQ0UgKGFuZCBTRVFVRU5DRSBPRikgXFwKK1xobGluZSBMVENcX0FTTjFcX1NFVCAgICAgICAgICAgICAgICAmIFNFVCBcXAorXGhsaW5lIExUQ1xfQVNOMVxfU0VUT0YgICAgICAgICAgICAgICYgU0VUIE9GIFxcCitcaGxpbmUgTFRDXF9BU04xXF9DSE9JQ0UgICAgICAgICAgICAgJiBDSE9JQ0UgXFwKK1xobGluZQorXGVuZHt0YWJ1bGFyfQorXGNhcHRpb257TGlzdCBvZiBBU04uMSBTdXBwb3J0ZWQgVHlwZXN9CitcZW5ke3NtYWxsfQorXGVuZHtjZW50ZXJ9CitcZW5ke2ZpZ3VyZX0KKworXHN1YnNlY3Rpb257U0VRVUVOQ0UgVHlwZX0KK1RoZSBTRVFVRU5DRSBkYXRhIHR5cGUgaXMgYSBjb2xsZWN0aW9uIG9mIG90aGVyIEFTTi4xIGRhdGEgdHlwZXMgZW5jYXBzdWxhdGVkIHdpdGggYSBzbWFsbCBoZWFkZXIgd2hpY2ggaXMgYSB1c2VmdWwgd2F5IG9mIHNlbmRpbmcgbXVsdGlwbGUgZGF0YSB0eXBlcyBpbiBvbmUgcGFja2V0LgorCitcc3Vic3Vic2VjdGlvbntTRVFVRU5DRSBFbmNvZGluZ30KK1RvIGVuY29kZSBhIHNlcXVlbmNlIGEgXHRleHRiZntsdGNcX2FzbjFcX2xpc3R9IGFycmF5IG11c3QgYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgbWVtYmVycyBvZiB0aGUgc2VxdWVuY2UgYW5kIHRoZWlyIHJlc3BlY3RpdmUgcG9pbnRlcnMuICBUaGUgZW5jb2RpbmcgaXMgcGVyZm9ybWVkCit3aXRoIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24uCisKK1xpbmRleHtkZXJcX2VuY29kZVxfc2VxdWVuY2UoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkZXJfZW5jb2RlX3NlcXVlbmNlKGx0Y19hc24xX2xpc3QgKmxpc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorVGhpcyBlbmNvZGVzIGEgc2VxdWVuY2Ugb2YgaXRlbXMgcG9pbnRlZCB0byBieSBcdGV4dGl0e2xpc3R9IHdoZXJlIHRoZSBsaXN0IGhhcyBcdGV4dGl0e2lubGVufSBpdGVtcyBpbiBpdC4gIFRoZSBTRVFVRU5DRSB3aWxsIGJlIGVuY29kZWQgdG8gXHRleHRpdHtvdXR9IGFuZCBvZiBsZW5ndGggXHRleHRpdHtvdXRsZW59LiAgVGhlCitmdW5jdGlvbiB3aWxsIHRlcm1pbmF0ZSB3aGVuIGl0IHJlYWRzIGFsbCB0aGUgaXRlbXMgb3V0IG9mIHRoZSBsaXN0ICh1cHRvIFx0ZXh0aXR7aW5sZW59KSBvciBpdCBlbmNvdW50ZXJzIGFuIGl0ZW0gaW4gdGhlIGxpc3Qgd2l0aCBhIHR5cGUgb2YgXHRleHRiZntMVENcX0FTTjFcX0VPTH0uCisKK1RoZSBcdGV4dGl0e2RhdGF9IHBvaW50ZXIgaW4gdGhlIGxpc3Qgd291bGQgYmUgdGhlIHNhbWUgcG9pbnRlciB5b3Ugd291bGQgcGFzcyB0byB0aGUgcmVzcGVjdGl2ZSBBU04uMSBlbmNvZGVyIChlLmcuIGRlclxfZW5jb2RlXF9iaXRcX3N0cmluZygpKSBhbmQgaXQgaXMgc2ltcGx5IHBhc3NlZCBvbgordmVyYmF0aW0gdG8gdGhlIGRlcGVuZGVudCBlbmNvZGVyLiAgVGhlIGxpc3QgY2FuIGNvbnRhaW4gb3RoZXIgU0VRVUVOQ0Ugb3IgU0VUIHR5cGVzIHdoaWNoIGVuYWJsZXMgeW91IHRvIGhhdmUgbmVzdGVkIFNFUVVFTkNFIGFuZCBTRVQgZGVmaW5pdGlvbnMuICBJbiB0aGVzZSBjYXNlcwordGhlIFx0ZXh0aXR7ZGF0YX0gcG9pbnRlciBpcyBzaW1wbHkgYSBwb2ludGVyIHRvIGFub3RoZXIgXHRleHRiZntsdGNcX2FzbjFcX2xpc3R9LgorCitcc3Vic3Vic2VjdGlvbntTRVFVRU5DRSBEZWNvZGluZ30KKworXGluZGV4e2RlclxfZGVjb2RlXF9zZXF1ZW5jZSgpfQorCitEZWNvZGluZyBhIFNFUVVFTkNFIGlzIHNpbWlsYXIgdG8gZW5jb2RpbmcuICBZb3Ugc2V0IHVwIGFuIGFycmF5IG9mIFx0ZXh0YmZ7bHRjXF9hc24xXF9saXN0fSB3aGVyZSBpbiB0aGlzIGNhc2UgdGhlIFx0ZXh0aXR7c2l6ZX0gbWVtYmVyIGlzIHRoZSBtYXhpbXVtIHNpemUgCisoaW4gY2VydGFpbiBjYXNlcykuICBGb3IgdHlwZXMgc3VjaCBhcyBJQTUgU1RSSU5HLCBCSVQgU1RSSU5HLCBPQ1RFVCBTVFJJTkcgKGV0YykgdGhlIFx0ZXh0aXR7c2l6ZX0gZmllbGQgaXMgdXBkYXRlZCBhZnRlciBzdWNjZXNzZnVsIGRlY29kaW5nIHRvIHJlZmxlY3QgaG93IG1hbnkKK3VuaXRzIG9mIHRoZSByZXNwZWN0aXZlIHR5cGUgaGFzIGJlZW4gbG9hZGVkLiAgCisKK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkZXJfZGVjb2RlX3NlcXVlbmNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYXNuMV9saXN0ICpsaXN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgZGVjb2RlIHVwdG8gXHRleHRpdHtvdXRsZW59IGl0ZW1zIGZyb20gdGhlIGlucHV0IGJ1ZmZlciBcdGV4dGl0e2lufSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0gb2N0ZXRzLiAgVGhlIGZ1bmN0aW9uIHdpbGwgc3RvcCAoZ3JhY2VmdWxseSkgd2hlbiBpdCBydW5zIG91dCBvZiBpdGVtcyB0byBkZWNvZGUuCitJdCB3aWxsIGZhaWwgKGZvciBhbW9uZyBvdGhlciByZWFzb25zKSB3aGVuIGl0IHJ1bnMgb3V0IG9mIGlucHV0IGJ5dGVzIHRvIHJlYWQsIGEgZGF0YSB0eXBlIGlzIGludmFsaWQgb3IgYSBoZWFwIGZhaWx1cmUgb2NjdXJyZWQuCisKK0ZvciB0aGUgZm9sbG93aW5nIHR5cGVzIHRoZSBcdGV4dGl0e3NpemV9IGZpZWxkIHdpbGwgYmUgdXBkYXRlZCB0byByZWZsZWN0IHRoZSBudW1iZXIgb2YgdW5pdHMgcmVhZCBvZiB0aGUgZ2l2ZW4gdHlwZS4KK1xiZWdpbntlbnVtZXJhdGV9CisgICBcaXRlbSBCSVQgU1RSSU5HCisgICBcaXRlbSBPQ1RFVCBTVFJJTkcKKyAgIFxpdGVtIE9CSkVDVCBJREVOVElGSUVSCisgICBcaXRlbSBJQTUgU1RSSU5HCisgICBcaXRlbSBQUklOVEFCTEUgU1RSSU5HCitcZW5ke2VudW1lcmF0ZX0KKworXHN1YnN1YnNlY3Rpb257U0VRVUVOQ0UgTGVuZ3RofQorCitUaGUgbGVuZ3RoIG9mIGEgU0VRVUVOQ0UgY2FuIGJlIGRldGVybWluZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgorCitcaW5kZXh7ZGVyXF9sZW5ndGhcX3NlcXVlbmNlKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZGVyX2xlbmd0aF9zZXF1ZW5jZShsdGNfYXNuMV9saXN0ICpsaXN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBnZXQgdGhlIGVuY29kaW5nIHNpemUgZm9yIHRoZSBnaXZlbiBcdGV4dGl0e2xpc3R9IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSBhbmQgc3RvcmUgaXQgaW4gXHRleHRpdHtvdXRsZW59LiAgCisKK1xzdWJzdWJzZWN0aW9ue1NFUVVFTkNFIE11bHRpcGxlIEFyZ3VtZW50IExpc3RzfQorCitGb3Igc21hbGwgb3Igc2ltcGxlIHNlcXVlbmNlcyBhbiBlbmNvZGluZyBvciBkZWNvZGluZyBjYW4gYmUgcGVyZm9ybWVkIHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgdHdvIGZ1bmN0aW9ucy4KKworXGluZGV4e2RlclxfZW5jb2RlXF9zZXF1ZW5jZVxfbXVsdGkoKX0KK1xpbmRleHtkZXJcX2RlY29kZVxfc2VxdWVuY2VcX211bHRpKCl9CisKK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpKHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIC4uLik7CisKK2ludCBkZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLCAuLi4pOworXGVuZHt2ZXJiYXRpbX0KKworVGhlc2UgZWl0aGVyIGVuY29kZSBvciBkZWNvZGUgKHJlc3BlY3RpdmVseSkgYSBTRVFVRU5DRSBkYXRhIHR5cGUgd2hlcmUgdGhlIGl0ZW1zIGluIHRoZSBzZXF1ZW5jZSBhcmUgc3BlY2lmaWVkIGFmdGVyIHRoZSBsZW5ndGggcGFyYW1ldGVyLgorCitUaGUgbGlzdCBvZiBpdGVtcyBhcmUgc3BlY2lmaWVkIGFzIGEgdHJpcGxlIG9mIHRoZSBmb3JtIFx0ZXh0aXR7KHR5cGUsIHNpemUsIGRhdGEpfSAgd2hlcmUgXHRleHRpdHt0eXBlfSBpcyBhbiBcdGV4dGJme2ludH0sIFx0ZXh0aXR7c2l6ZX0gaXMgYSBcdGV4dGJme3Vuc2lnbmVkIGxvbmd9CithbmQgXHRleHRpdHtkYXRhfSBpcyBcdGV4dGJme3ZvaWR9IHBvaW50ZXIuICBUaGUgbGlzdCBvZiBpdGVtcyBtdXN0IGJlIHRlcm1pbmF0ZWQgd2l0aCBhbiBpdGVtIHdpdGggdGhlIHR5cGUgXHRleHRiZntMVENcX0FTTjFcX0VPTH0uCisKK0l0IGlzIGlkZWFsIHRoYXQgeW91IGNhc3QgdGhlIFx0ZXh0aXR7c2l6ZX0gdmFsdWVzIHRvIHVuc2lnbmVkIGxvbmcgdG8gZW5zdXJlIHRoYXQgdGhlIHByb3BlciBkYXRhIHR5cGUgaXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbi4gIENvbnN0YW50cyBzdWNoIGFzIFx0ZXh0aXR7MX0gd2l0aG91dAorYSBjYXN0IG9yIHByb3RvdHlwZSBhcmUgb2YgdHlwZSBcdGV4dGJme2ludH0gYnkgZGVmYXVsdC4gIEFwcGVuZGluZyBcdGV4dGl0e1VMfSBvciBwcmUtcGVuZGluZyBcdGV4dGl0eyh1bnNpZ25lZCBsb25nKX0gaXMgZW5vdWdoIHRvIGNhc3QgaXQgdG8gdGhlIGNvcnJlY3QgdHlwZS4KKworXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQordW5zaWduZWQgY2hhciBidWZbTUFYQlVGU0laRV07Cit1bnNpZ25lZCBsb25nIGJ1ZmxlbjsKK2ludCAgICAgICAgICAgZXJyOworCisgICBidWZsZW4gPSBzaXplb2YoYnVmKTsKKyAgIGlmICgoZXJyID0gCisgICAgICAgIGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkoYnVmLCAmYnVmbGVuLAorICAgICAgICBMVENfQVNOMV9JQTVfU1RSSU5HLCA1VUwsICJIZWxsbyIsCisgICAgICAgIExUQ19BU04xX0lBNV9TVFJJTkcsIDdVTCwgIiBXb3JsZCEiLAorICAgICAgICBMVENfQVNOMV9FT0wsICAgICAgICAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgLy8gZXJyb3IgaGFuZGxpbmcKKyAgIH0KK1xlbmR7dmVyYmF0aW19CitcZW5ke3NtYWxsfQorCitUaGlzIGV4YW1wbGUgZW5jb2RlcyBhIFNFUVVFTkNFIHdpdGggdHdvIElBNSBTVFJJTkcgdHlwZXMgY29udGFpbmluZyBgYEhlbGxvJycgYW5kIGBgIFdvcmxkIScnIHJlc3BlY3RpdmVseS4gIE5vdGUgdGhlIHVzYWdlIG9mIHRoZSBcdGV4dGJme1VMfSBtb2RpZmllcgorb24gdGhlIHNpemUgcGFyYW1ldGVycy4gIFRoaXMgZm9yY2VzIHRoZSBjb21waWxlciB0byBwYXNzIHRoZSBudW1iZXJzIGFzIHRoZSByZXF1aXJlZCBcdGV4dGJme3Vuc2lnbmVkIGxvbmd9IHR5cGUgdGhhdCB0aGUgZnVuY3Rpb24gZXhwZWN0cy4KKworXHN1YnNlY3Rpb257U0VUIGFuZCBTRVQgT0Z9CisKK1xpbmRleHtTRVR9IFxpbmRleHtTRVQgT0Z9CitTRVQgYW5kIFNFVCBPRiBhcmUgcmVsYXRlZCB0byB0aGUgU0VRVUVOQ0UgdHlwZSBpbiB0aGF0IHRoZXkgY2FuIGJlIHByZXR0eSBtdWNoIGJlIGRlY29kZWQgd2l0aCB0aGUgc2FtZSBjb2RlLiAgSG93ZXZlciwgdGhleSBhcmUgZGlmZmVyZW50LCBhbmQgdGhleSBzaG91bGQKK2JlIGNhcmVmdWxseSBub3RlZC4gIFRoZSBTRVQgdHlwZSBpcyBhbiB1bm9yZGVyZWQgYXJyYXkgb2YgQVNOLjEgdHlwZXMgc29ydGVkIGJ5IHRoZSBUQUcgKHR5cGUgaWRlbnRpZmllciksIHdoZXJlYXMgdGhlIFNFVCBPRiB0eXBlIGlzIGFuIG9yZGVyZWQgYXJyYXkgb2YgCithIFx0ZXh0YmZ7c2luZ2xlfSBBU04uMSBvYmplY3Qgc29ydGVkIGluIGFzY2VuZGluZyBvcmRlciBieSB0aGUgREVSIHRoZWlyIHJlc3BlY3RpdmUgZW5jb2RpbmdzLgorCitcc3Vic3Vic2VjdGlvbntTRVQgRW5jb2Rpbmd9CisKK1NFVHMgdXNlIHRoZSBzYW1lIGFycmF5IHN0cnVjdHVyZSBvZiBsdGNcX2FzbjFcX2xpc3QgdGhhdCB0aGUgU0VRVUVOQ0UgZnVuY3Rpb25zIHVzZS4gIFRoZXkgYXJlIGVuY29kZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uOgorCitcaW5kZXh7ZGVyXF9lbmNvZGVcX3NldCgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGRlcl9lbmNvZGVfc2V0KGx0Y19hc24xX2xpc3QgKmxpc3QsIAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfSAgICAgICAgICAgIAorCitUaGlzIHdpbGwgZW5jb2RlIHRoZSBsaXN0IG9mIEFTTi4xIG9iamVjdHMgaW4gXHRleHRpdHtsaXN0fSBvZiBsZW5ndGggXHRleHRpdHtpbmxlbn0gb2JqZWN0cywgYW5kIHN0b3JlIHRoZSBvdXRwdXQgaW4gXHRleHRpdHtvdXR9IG9mIGxlbmd0aCBcdGV4dGl0e291dGxlbn0gYnl0ZXMuICAKK1RoZSBmdW5jdGlvbiB3aWxsIG1ha2UgYSBjb3B5IG9mIHRoZSBsaXN0IHByb3ZpZGVkLCBhbmQgc29ydCBpdCBieSB0aGUgVEFHLiAgT2JqZWN0cyB3aXRoIGlkZW50aWNhbCBUQUdzIGFyZSBhZGRpdGlvbmFsbHkgc29ydGVkIG9uIHRoZWlyIG9yaWdpbmFsIHBsYWNlbWVudCBpbiB0aGUgCithcnJheSAodG8gbWFrZSB0aGUgcHJvY2VzcyBkZXRlcm1pbmlzdGljKS4KKworVGhpcyBmdW5jdGlvbiB3aWxsIFx0ZXh0YmZ7Tk9UfSByZWNvZ25pemUgXHRleHRpdHtERUZBVUxUfSBvYmplY3RzLCBhbmQgaXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gcmVtb3ZlIHRoZW0gYXMgcmVxdWlyZWQuCisKK1xzdWJzdWJzZWN0aW9ue1NFVCBEZWNvZGluZ30KKworVGhlIFNFVCB0eXBlIGNhbiBiZSBkZWNvZGVkIHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4KKworXGluZGV4e2RlclxfZGVjb2RlXF9zZXQoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkZXJfZGVjb2RlX3NldChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2FzbjFfbGlzdCAqbGlzdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBkZWNvZGUgdGhlIFNFVCBzcGVjaWZpZWQgYnkgXHRleHRpdHtsaXN0fSBvZiBsZW5ndGggXHRleHRpdHtvdXRsZW59IG9iamVjdHMgZnJvbSB0aGUgaW5wdXQgYnVmZmVyIFx0ZXh0aXR7aW59IG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufSBvY3RldHMuCisKK0l0IGhhbmRsZXMgdGhlIGZhY3QgdGhhdCBTRVRzIGFyZSBub3Qgc3RyaWN0bHkgb3JkZXJlZCBhbmQgd2lsbCBtYWtlIG11bHRpcGxlIHBhc3NlcyAoYXMgcmVxdWlyZWQpIHRocm91Z2ggdGhlIGxpc3QgdG8gZGVjb2RlIGFsbCB0aGUgb2JqZWN0cy4gIAorCitcc3Vic3Vic2VjdGlvbntTRVQgTGVuZ3RofQorVGhlIGxlbmd0aCBvZiBhIFNFVCBjYW4gYmUgZGV0ZXJtaW5lZCBieSBjYWxsaW5nIGRlclxfbGVuZ3RoXF9zZXF1ZW5jZSgpIHNpbmNlIHRoZXkgaGF2ZSB0aGUgc2FtZSBlbmNvZGluZyBsZW5ndGguCisKK1xzdWJzdWJzZWN0aW9ue1NFVCBPRiBFbmNvZGluZ30KK0EgXHRleHRpdHtTRVQgT0Z9IG9iamVjdCBpcyBhbiBhcnJheSBvZiBpZGVudGljYWwgb2JqZWN0cyAoZS5nLiBPQ1RFVCBTVFJJTkcpIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgdGhlIERFUiBlbmNvZGluZyBvZiB0aGUgb2JqZWN0LiAgVGhleSBhcmUgCit1c2VkIHRvIHN0b3JlIG9iamVjdHMgZGV0ZXJtaW5pc3RpY2FsbHkgYmFzZWQgc29sZWx5IG9uIHRoZWlyIGVuY29kaW5nLiAgSXQgdXNlcyB0aGUgc2FtZSBhcnJheSBzdHJ1Y3R1cmUgb2YgbHRjXF9hc24xXF9saXN0IHRoYXQgdGhlIFNFUVVFTkNFIGZ1bmN0aW9ucwordXNlLiAgVGhleSBhcmUgZW5jb2RlZCB3aXRoIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24uCisKK1xpbmRleHtkZXJcX2VuY29kZVxfc2V0b2YoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkZXJfZW5jb2RlX3NldG9mKGx0Y19hc24xX2xpc3QgKmxpc3QsIAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgZW5jb2RlIGEgXHRleHRpdHtTRVQgT0Z9IGNvbnRhaW5pbmcgdGhlIFx0ZXh0aXR7bGlzdH0gb2YgXHRleHRpdHtpbmxlbn0gQVNOLjEgb2JqZWN0cyBhbmQgc3RvcmUgdGhlIGVuY29kaW5nIGluIHRoZSBvdXRwdXQgYnVmZmVyIFx0ZXh0aXR7b3V0fSBvZiBsZW5ndGggXHRleHRpdHtvdXRsZW59LgorCitUaGUgcm91dGluZSB3aWxsIGZpcnN0IGVuY29kZSB0aGUgU0VUIE9GIGluIGFuIHVub3JkZXJlZCBmYXNoaW9uIChpbiBhIHRlbXBvcmFyeSBidWZmZXIpIHRoZW4gc29ydCB1c2luZyB0aGUgWFFTT1JUIG1hY3JvIGFuZCBjb3B5IGJhY2sgdG8gdGhlIG91dHB1dCBidWZmZXIuICBUaGlzCittZWFucyB5b3UgbmVlZCBhdCBsZWFzdCBlbm91Z2ggbWVtb3J5IHRvIGtlZXAgYW4gYWRkaXRpb25hbCBjb3B5IG9mIHRoZSBvdXRwdXQgb24gdGhlIGhlYXAuICAKKworXHN1YnN1YnNlY3Rpb257U0VUIE9GIERlY29kaW5nfQorU2luY2UgdGhlIGRlY29kaW5nIG9mIGEgXHRleHRpdHtTRVQgT0Z9IG9iamVjdCBpcyB1bmFtYmlndW91cyBpdCBjYW4gYmUgZGVjb2RlZCB3aXRoIGRlclxfZGVjb2RlXF9zZXF1ZW5jZSgpLiAgCisKK1xzdWJzdWJzZWN0aW9ue1NFVCBPRiBMZW5ndGh9CitMaWtlIHRoZSBTRVQgdHlwZSB0aGUgZGVyXF9sZW5ndGhcX3NlcXVlbmNlKCkgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgYSBcdGV4dGl0e1NFVCBPRn0gb2JqZWN0LgorCitcc3Vic2VjdGlvbntBU04uMSBJTlRFR0VSfQorCitUbyBlbmNvZGUgb3IgZGVjb2RlIElOVEVHRVIgZGF0YSB0eXBlcyB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMuCisKK1xpbmRleHtkZXJcX2VuY29kZVxfaW50ZWdlcigpfVxpbmRleHtkZXJcX2RlY29kZVxfaW50ZWdlcigpfVxpbmRleHtkZXJcX2xlbmd0aFxfaW50ZWdlcigpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGRlcl9lbmNvZGVfaW50ZWdlciggICAgICAgICB2b2lkICpudW0sIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgZGVyX2RlY29kZV9pbnRlZ2VyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpudW0pOworCitpbnQgZGVyX2xlbmd0aF9pbnRlZ2VyKCAgICAgICAgIHZvaWQgKm51bSwgCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKmxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGVzZSB3aWxsIGVuY29kZSBvciBkZWNvZGUgYSBzaWduZWQgSU5URUdFUiBkYXRhIHR5cGUgdXNpbmcgdGhlIGJpZ251bSBkYXRhIHR5cGUgdG8gc3RvcmUgdGhlIGxhcmdlIElOVEVHRVIuICBUbyBlbmNvZGUgc21hbGxlciB2YWx1ZXMgd2l0aG91dCBhbGxvY2F0aW5nCithIGJpZ251bSB0byBzdG9yZSB0aGUgdmFsdWUsIHRoZSBcdGV4dGl0e3Nob3J0fSBJTlRFR0VSIGZ1bmN0aW9ucyB3ZXJlIG1hZGUgYXZhaWxhYmxlLgorCitcaW5kZXh7ZGVyXF9lbmNvZGVcX3Nob3J0XF9pbnRlZ2VyKCl9XGluZGV4e2RlclxfZGVjb2RlXF9zaG9ydFxfaW50ZWdlcigpfVxpbmRleHtkZXJcX2xlbmd0aFxfc2hvcnRcX2ludGVnZXIoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkZXJfZW5jb2RlX3Nob3J0X2ludGVnZXIodW5zaWduZWQgbG9uZyAgbnVtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IGRlcl9kZWNvZGVfc2hvcnRfaW50ZWdlcihjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm51bSk7CisKK2ludCBkZXJfbGVuZ3RoX3Nob3J0X2ludGVnZXIodW5zaWduZWQgbG9uZyAgbnVtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoZXNlIHdpbGwgZW5jb2RlIG9yIGRlY29kZSBhbiB1bnNpZ25lZCBcdGV4dGJme3Vuc2lnbmVkIGxvbmd9IHR5cGUgKG9ubHkgcmVhZHMgdXB0byAzMi0tYml0cykuICBGb3IgdmFsdWVzIGluIHRoZSByYW5nZSAkMCBcZG90cyAyXnszMn0gLSAxJCB0aGUgaW50ZWdlciAKK2FuZCBzaG9ydCBpbnRlZ2VyIGZ1bmN0aW9ucyBjYW4gZW5jb2RlIGFuZCBkZWNvZGUgZWFjaCBvdGhlcnMgb3V0cHV0cy4gIAorCitcc3Vic2VjdGlvbntBU04uMSBCSVQgU1RSSU5HfQorCitcaW5kZXh7ZGVyXF9lbmNvZGVcX2JpdFxfc3RyaW5nKCl9XGluZGV4e2RlclxfZGVjb2RlXF9iaXRcX3N0cmluZygpfVxpbmRleHtkZXJcX2xlbmd0aFxfYml0XF9zdHJpbmcoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkZXJfZW5jb2RlX2JpdF9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IGRlcl9kZWNvZGVfYml0X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgZGVyX2xlbmd0aF9iaXRfc3RyaW5nKHVuc2lnbmVkIGxvbmcgIG5iaXRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK1xlbmR7dmVyYmF0aW19CisKK1RoZXNlIHdpbGwgZW5jb2RlIG9yIGRlY29kZSBhIEJJVCBTVFJJTkcgZGF0YSB0eXBlLiAgVGhlIGJpdHMgYXJlIHBhc3NlZCBpbiAob3IgcmVhZCBvdXQpIHVzaW5nIG9uZSBcdGV4dGJme2NoYXJ9IHBlciBiaXQuICBBIG5vbi0temVybyB2YWx1ZSB3aWxsIGJlIGludGVycHJldGVkCithcyBhIG9uZSBiaXQsIGFuZCBhIHplcm8gdmFsdWUgYSB6ZXJvIGJpdC4KKworXHN1YnNlY3Rpb257QVNOLjEgT0NURVQgU1RSSU5HfQorCitcaW5kZXh7ZGVyXF9lbmNvZGVcX29jdGV0XF9zdHJpbmcoKX1caW5kZXh7ZGVyXF9kZWNvZGVcX29jdGV0XF9zdHJpbmcoKX1caW5kZXh7ZGVyXF9sZW5ndGhcX29jdGV0XF9zdHJpbmcoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkZXJfZW5jb2RlX29jdGV0X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgZGVyX2RlY29kZV9vY3RldF9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IGRlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nKHVuc2lnbmVkIGxvbmcgIG5vY3RldHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGVzZSB3aWxsIGVuY29kZSBvciBkZWNvZGUgYW4gT0NURVQgU1RSSU5HIGRhdGEgdHlwZS4gIFRoZSBvY3RldHMgYXJlIHN0b3JlZCB1c2luZyBvbmUgXHRleHRiZnt1bnNpZ25lZCBjaGFyfSBlYWNoLiAgCisKK1xzdWJzZWN0aW9ue0FTTi4xIE9CSkVDVCBJREVOVElGSUVSfQorCitcaW5kZXh7ZGVyXF9lbmNvZGVcX29iamVjdFxfaWRlbnRpZmllcigpfVxpbmRleHtkZXJcX2RlY29kZVxfb2JqZWN0XF9pZGVudGlmaWVyKCl9XGluZGV4e2RlclxfbGVuZ3RoXF9vYmplY3RcX2lkZW50aWZpZXIoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkZXJfZW5jb2RlX29iamVjdF9pZGVudGlmaWVyKHVuc2lnbmVkIGxvbmcgKndvcmRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG53b3JkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgZGVyX2RlY29kZV9vYmplY3RfaWRlbnRpZmllcihjb25zdCB1bnNpZ25lZCBjaGFyICppbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqd29yZHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IGRlcl9sZW5ndGhfb2JqZWN0X2lkZW50aWZpZXIodW5zaWduZWQgbG9uZyAqd29yZHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbndvcmRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGVzZSB3aWxsIGVuY29kZSBvciBkZWNvZGUgYW4gT0JKRUNUIElERU5USUZJRVIgb2JqZWN0LiAgVGhlIHdvcmRzIG9mIHRoZSBPSUQgYXJlIHN0b3JlZCBpbiBpbmRpdmlkdWFsIFx0ZXh0YmZ7dW5zaWduZWQgbG9uZ30gZWxlbWVudHMsIGFuZCBtdXN0IGJlIGluIHRoZSByYW5nZQorJDAgXGxkb3RzIDJeezMyfSAtIDEkLiAgCisKK1xzdWJzZWN0aW9ue0FTTi4xIElBNSBTVFJJTkd9CisKK1xpbmRleHtkZXJcX2VuY29kZVxfaWE1XF9zdHJpbmcoKX1caW5kZXh7ZGVyXF9kZWNvZGVcX2lhNVxfc3RyaW5nKCl9XGluZGV4e2RlclxfbGVuZ3RoXF9pYTVcX3N0cmluZygpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGRlcl9lbmNvZGVfaWE1X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgZGVyX2RlY29kZV9pYTVfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKK2ludCBkZXJfbGVuZ3RoX2lhNV9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqb2N0ZXRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbm9jdGV0cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGVzZSB3aWxsIGVuY29kZSBvciBkZWNvZGUgYW4gSUE1IFNUUklORy4gIFRoZSBjaGFyYWN0ZXJzIGFyZSByZWFkIG9yIHN0b3JlZCBpbiBpbmRpdmlkdWFsIFx0ZXh0YmZ7Y2hhcn0gZWxlbWVudHMuICBUaGVzZSBmdW5jdGlvbnMgcGVyZm9ybXMgaW50ZXJuYWwgY2hhcmFjdGVyCit0byBudW1lcmljYWwgY29udmVyc2lvbnMgYmFzZWQgb24gdGhlIGNvbnZlbnRpb25zIG9mIHRoZSBjb21waWxlciBiZWluZyB1c2VkLiAgRm9yIGluc3RhbmNlLCBvbiBhbiB4ODZcXzMyIG1hY2hpbmUgJ0EnID09IDY1IGJ1dCB0aGUgc2FtZSBtYXkgbm90IGJlIHRydWUgb24gCitzYXkgYSBTUEFSQyBtYWNoaW5lLiAgSW50ZXJuYWxseSwgdGhlc2UgZnVuY3Rpb25zIGhhdmUgYSB0YWJsZSBvZiBsaXRlcmFsIGNoYXJhY3RlcnMgYW5kIHRoZWlyIG51bWVyaWNhbCBBU0NJSSB2YWx1ZXMuICBUaGlzIHByb3ZpZGVzIGEgc3RhYmxlIGNvbnZlcnNpb24gcHJvdmlkZWQKK3RoYXQgdGhlIGJ1aWxkIHBsYXRmb3JtIGhvbm91cnMgdGhlIHJ1bi0tdGltZSBwbGF0Zm9ybXMgY2hhcmFjdGVyIGNvbnZlbnRpb25zLgorCitcc3Vic2VjdGlvbntBU04uMSBQUklOVEFCTEUgU1RSSU5HfQorCitcaW5kZXh7ZGVyXF9lbmNvZGVcX3ByaW50YWJsZVxfc3RyaW5nKCl9XGluZGV4e2RlclxfZGVjb2RlXF9wcmludGFibGVcX3N0cmluZygpfVxpbmRleHtkZXJcX2xlbmd0aFxfcHJpbnRhYmxlXF9zdHJpbmcoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCBkZXJfZW5jb2RlX3ByaW50YWJsZV9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IGRlcl9kZWNvZGVfcHJpbnRhYmxlX3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgZGVyX2xlbmd0aF9wcmludGFibGVfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9jdGV0cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG5vY3RldHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworVGhlc2Ugd2lsbCBlbmNvZGUgb3IgZGVjb2RlIGFuIFBSSU5UQUJMRSBTVFJJTkcuICBUaGUgY2hhcmFjdGVycyBhcmUgcmVhZCBvciBzdG9yZWQgaW4gaW5kaXZpZHVhbCBcdGV4dGJme2NoYXJ9IGVsZW1lbnRzLiAgVGhlc2UgZnVuY3Rpb25zIHBlcmZvcm1zIGludGVybmFsIGNoYXJhY3RlcgordG8gbnVtZXJpY2FsIGNvbnZlcnNpb25zIGJhc2VkIG9uIHRoZSBjb252ZW50aW9ucyBvZiB0aGUgY29tcGlsZXIgYmVpbmcgdXNlZC4gIEZvciBpbnN0YW5jZSwgb24gYW4geDg2XF8zMiBtYWNoaW5lICdBJyA9PSA2NSBidXQgdGhlIHNhbWUgbWF5IG5vdCBiZSB0cnVlIG9uIAorc2F5IGEgU1BBUkMgbWFjaGluZS4gIEludGVybmFsbHksIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIGEgdGFibGUgb2YgbGl0ZXJhbCBjaGFyYWN0ZXJzIGFuZCB0aGVpciBudW1lcmljYWwgQVNDSUkgdmFsdWVzLiAgVGhpcyBwcm92aWRlcyBhIHN0YWJsZSBjb252ZXJzaW9uIHByb3ZpZGVkCit0aGF0IHRoZSBidWlsZCBwbGF0Zm9ybSBob25vdXJzIHRoZSBydW4tdGltZSBwbGF0Zm9ybXMgY2hhcmFjdGVyIGNvbnZlbnRpb25zLgorCitcc3Vic2VjdGlvbntBU04uMSBVVEY4IFNUUklOR30KKworXGluZGV4e2RlclxfZW5jb2RlXF91dGY4XF9zdHJpbmcoKX1caW5kZXh7ZGVyXF9kZWNvZGVcX3V0ZjhcX3N0cmluZygpfVxpbmRleHtkZXJcX2xlbmd0aFxfdXRmOFxfc3RyaW5nKCl9CitcYmVnaW57dmVyYmF0aW19CitpbnQgZGVyX2VuY29kZV91dGY4X3N0cmluZyhjb25zdCB3Y2hhcl90ICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgZGVyX2RlY29kZV91dGY4X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgZGVyX2xlbmd0aF91dGY4X3N0cmluZyhjb25zdCB3Y2hhcl90ICpvY3RldHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbm9jdGV0cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworVGhlc2Ugd2lsbCBlbmNvZGUgb3IgZGVjb2RlIGFuIFVURjggU1RSSU5HLiAgVGhlIGNoYXJhY3RlcnMgYXJlIHJlYWQgb3Igc3RvcmVkIGluIGluZGl2aWR1YWwgXHRleHRiZnt3Y2hhclxfdH0gZWxlbWVudHMuICBUaGVzZSBmdW5jdGlvbiBwZXJmb3JtcyBubyBpbnRlcm5hbAorbWFwcGluZyBhbmQgdHJlYXQgdGhlIGNoYXJhY3RlcnMgYXMgbGl0ZXJhbHMuICAKKworVGhlc2UgZnVuY3Rpb25zIHVzZSB0aGUgXHRleHRiZnt3Y2hhclxfdH0gdHlwZSB3aGljaCBpcyBub3QgdW5pdmVyc2FsbHkgYXZhaWxhYmxlLiAgSW4gdGhvc2UgY2FzZXMsIHRoZSBsaWJyYXJ5IHdpbGwgdHlwZWRlZiBpdCB0byBcdGV4dGJme3Vuc2lnbmVkIGxvbmd9LiAgSWYgeW91IAoraW50ZW5kIHRvIHVzZSB0aGUgSVNPIEMgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggd2lkZS0tY2hhciBhcnJheXMsIHlvdSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgd2NoYXJcX3QgaGFzIGJlZW4gZGVmaW5lZCBwcmV2aW91c2x5LgorCitcc3Vic2VjdGlvbntBU04uMSBVVENUSU1FfQorCitUaGUgVVRDVElNRSB0eXBlIGlzIHRvIHN0b3JlIGEgZGF0ZSBhbmQgdGltZSBpbiBBU04uMSBmb3JtYXQuICBJdCB1c2VzIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIHRvIG9yZ2FuaXplIHRoZSB0aW1lLgorCitcaW5kZXh7bHRjXF91dGN0aW1lIHN0cnVjdHVyZX0KK1xiZWdpbnt2ZXJiYXRpbX0KK3R5cGVkZWYgc3RydWN0IHsKKyAgIHVuc2lnbmVkIFlZLCAvKiB5ZWFyICAgIDAwLS05OSAqLworICAgICAgICAgICAgTU0sIC8qIG1vbnRoICAgMDEtLTEyICovCisgICAgICAgICAgICBERCwgLyogZGF5ICAgICAwMS0tMzEgKi8KKyAgICAgICAgICAgIGhoLCAvKiBob3VyICAgIDAwLS0yMyAqLworICAgICAgICAgICAgbW0sIC8qIG1pbnV0ZSAgMDAtLTU5ICovCisgICAgICAgICAgICBzcywgLyogc2Vjb25kICAwMC0tNTkgKi8KKyAgICAgICAgICAgIG9mZl9kaXIsIC8qIHRpbWV6b25lIG9mZnNldCBkaXJlY3Rpb24gMCA9PSArLCAxID09IC0gKi8KKyAgICAgICAgICAgIG9mZl9oaCwgLyogdGltZXpvbmUgb2Zmc2V0IGhvdXJzICovCisgICAgICAgICAgICBvZmZfbW07IC8qIHRpbWV6b25lIG9mZnNldCBtaW51dGVzICovCit9IGx0Y191dGN0aW1lOworXGVuZHt2ZXJiYXRpbX0KKworVGhlIHRpbWUgY2FuIGJlIG9mZnNldCBwbHVzIG9yIG1pbnVzIGEgc2V0IGFtb3VudCBvZiBob3VycyAob2ZmXF9oaCkgYW5kIG1pbnV0ZXMgKG9mZlxfbW0pLiAgV2hlbiBcdGV4dGl0e29mZlxfZGlyfSBpcyB6ZXJvLCB0aGUgdGltZSB3aWxsIGJlIGFkZGVkIG90aGVyd2lzZSBpdCAKK3dpbGwgYmUgc3VidHJhY3RlZC4gIEZvciBpbnN0YW5jZSwgdGhlIGFycmF5ICRcbGJyYWNlIDUsIDYsIDIwLCAyMiwgNCwgMDAsIDAsIDUsIDAgXHJicmFjZSQgcmVwcmVzZW50cyB0aGUgY3VycmVudCB0aW1lIG9mIAorXHRleHRpdHsyMDA1LCBKdW5lIDIwdGgsIDIyOjA0OjAwfSB3aXRoIGEgdGltZSBvZmZzZXQgb2YgKzA1aDAwLiAgCisKK1xpbmRleHtkZXJcX2VuY29kZVxfdXRjdGltZSgpfVxpbmRleHtkZXJcX2RlY29kZVxfdXRjdGltZSgpfVxpbmRleHtkZXJcX2xlbmd0aFxfdXRjdGltZSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGRlcl9lbmNvZGVfdXRjdGltZSggIGx0Y191dGN0aW1lICp1dGN0aW1lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgZGVyX2RlY29kZV91dGN0aW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3V0Y3RpbWUgKm91dCk7CisKK2ludCBkZXJfbGVuZ3RoX3V0Y3RpbWUoICBsdGNfdXRjdGltZSAqdXRjdGltZSwgCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitcZW5ke3ZlcmJhdGltfQorCitUaGUgZW5jb2RlciB3aWxsIHN0b3JlIHRpbWUgaW4gb25lIG9mIHRoZSB0d28gQVNOLjEgZm9ybWF0cywgZWl0aGVyIFx0ZXh0aXR7WVlNTUREaGhtbXNzWn0gb3IgXHRleHRpdHtZWU1NRERoaG1tc3MkXHBtJGhobW19LCBhbmQgcGVyZm9ybSBtaW5pbWFsIGVycm9yIGNoZWNraW5nIG9uIHRoZSAKK2lucHV0LiAgVGhlIGRlY29kZXIgd2lsbCByZWFkIGFsbCB2YWxpZCBBU04uMSBmb3JtYXRzIGFuZCBwZXJmb3JtIHJhbmdlIGNoZWNraW5nIG9uIHRoZSB2YWx1ZXMgKG5vdCBjb21wbGV0ZSBidXQgcmF0aW9uYWwpIHVzZWZ1bCBmb3IgY2F0Y2hpbmcgcGFja2V0IGVycm9ycy4KKworSXQgaXMgc3VnZ2VzdGVkIHRoYXQgZGVjb2RlZCBkYXRhIGJlIGZ1cnRoZXIgc2NydXRpbml6ZWQgKGUuZy4gZGF5cyBvZiBtb250aCBpbiBwYXJ0aWN1bGFyKS4KKworXHN1YnNlY3Rpb257QVNOLjEgQ0hPSUNFfQorCitUaGUgQ0hPSUNFIEFTTi4xIHR5cGUgcmVwcmVzZW50cyBhIHVuaW9uIG9mIEFTTi4xIHR5cGVzIGFsbCBvZiB3aGljaCBhcmUgc3RvcmVkIGluIGEgXHRleHRpdHtsdGNcX2FzbjFcX2xpc3R9LiAgVGhlcmUgaXMgbm8gZW5jb2RlciBmb3IgdGhlIENIT0lDRSB0eXBlLCBvbmx5IGEgCitkZWNvZGVyLiAgVGhlIGRlY29kZXIgd2lsbCBzY2FuIHRocm91Z2ggdGhlIHByb3ZpZGVkIGxpc3QgYXR0ZW1wdGluZyB0byB1c2UgdGhlIGFwcHJvcHJpYXRlIGRlY29kZXIgb24gdGhlIGlucHV0IHBhY2tldC4gIFRoZSBsaXN0IGNhbiBjb250YWluIGFueSBBU04uMSBkYXRhCit0eXBlXGZvb3Rub3Rle0V4Y2VwdCBpdCBjYW5ub3QgaGF2ZSBMVENcX0FTTjFcX0lOVEVHRVIgYW5kIExUQ1xfQVNOMVxfU0hPUlRcX0lOVEVHRVIgc2ltdWx0YW5lb3VzbHkufSBleGNlcHQgZm9yIG90aGVyIENIT0lDRSB0eXBlcy4gIAorCitUaGVyZSBpcyBubyBlbmNvZGVyIGZvciB0aGUgQ0hPSUNFIHR5cGUgYXMgdGhlIGFjdHVhbCBERVIgZW5jb2RpbmcgaXMgdGhlIGVuY29kaW5nIG9mIHRoZSBjaG9zZW4gdHlwZS4gIAorCitcaW5kZXh7ZGVyXF9kZWNvZGVcX2Nob2ljZSgpfQorXGJlZ2lue3ZlcmJhdGltfQoraW50IGRlcl9kZWNvZGVfY2hvaWNlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICppbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfYXNuMV9saXN0ICpsaXN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGRlY29kZSB0aGUgaW5wdXQgaW4gdGhlIFx0ZXh0aXR7aW59IGZpZWxkIG9mIGxlbmd0aCBcdGV4dGl0e2lubGVufS4gIEl0IHVzZXMgdGhlIHByb3ZpZGVkIEFTTi4xIGxpc3Qgc3BlY2lmaWVkIGluIHRoZSBcdGV4dGl0e2xpc3R9IGZpZWxkIHdoaWNoIGhhcyAKK1x0ZXh0aXR7b3V0bGVufSBlbGVtZW50cy4gIFRoZSBcdGV4dGl0e2lubGVufSBmaWVsZCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbGVuZ3RoIG9mIHRoZSBkZWNvZGVkIGRhdGEgdHlwZSwgYXMgd2VsbCBhcyB0aGUgcmVzcGVjdGl2ZSBlbnRyeSBpbiB0aGUgXHRleHRpdHtsaXN0fSBmaWVsZCAKK3dpbGwgaGF2ZSB0aGUgXHRleHRpdHt1c2VkfSBmbGFnIHNldCB0byBub24tLXplcm8gdG8gcmVmbGVjdCBpdCB3YXMgdGhlIGRhdGEgdHlwZSBkZWNvZGVkLgorCitcc3Vic2VjdGlvbntBU04uMSBGbGV4aSBEZWNvZGVyfQorVGhlIEFTTi4xIFx0ZXh0aXR7ZmxleGl9IGRlY29kZXIgYWxsb3dzIHRoZSBkZXZlbG9wZXIgdG8gZGVjb2RlIGFyYml0cmFyeSBBU04uMSBERVIgcGFja2V0cyAocHJvdmlkZWQgdGhleSB1c2UgZGF0YSB0eXBlcyBMaWJUb21DcnlwdCBzdXBwb3J0cykgd2l0aG91dCBmaXJzdCBrbm93aW5nCit0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhLiAgV2hlcmUgZGVyXF9kZWNvZGUgXF9zZXF1ZW5jZSgpIHJlcXVpcmVzIHRoZSBkZXZlbG9wZXIgdG8gc3BlY2lmeSB0aGUgZGF0YSB0eXBlcyB0byBkZWNvZGUgaW4gYWR2YW5jZSB0aGUgZmxleGkgZGVjb2RlciBpcyBlbnRpcmVseQorZnJlZSBmb3JtLgorCitUaGUgZmxleGkgZGVjb2RlciB1c2VzIHRoZSBzYW1lIFx0ZXh0aXR7bHRjXF9hc24xXF9saXN0fSBidXQgaW5zdGVhZCBvZiBiZWluZyBzdG9yZWQgaW4gYW4gYXJyYXkgaXQgdXNlcyB0aGUgbGlua2VkIGxpc3QgcG9pbnRlcnMgXHRleHRpdHtwcmV2fSwgXHRleHRpdHtuZXh0fSwgXHRleHRpdHtwYXJlbnR9IAorYW5kIFx0ZXh0aXR7Y2hpbGR9LiAgVGhlIGxpc3Qgd29ya3MgYXMgYSBcdGV4dGl0e2RvdWJseS1saW5rZWQgbGlzdH0gc3RydWN0dXJlIHdoZXJlIGRlY29kZWQgaXRlbXMgYXQgdGhlIHNhbWUgbGV2ZWwgYXJlIHNpYmxpbmdzICh1c2luZyBuZXh0IGFuZCBwcmV2KSBhbmQgaXRlbXMKK2VuY29kZWQgaW4gYSBTRVFVRU5DRSBhcmUgc3RvcmVkIGFzIGEgY2hpbGQgZWxlbWVudC4KKworV2hlbiBhIFNFUVVFTkNFIG9yIFNFVCBoYXMgYmVlbiBlbmNvdW50ZXJlZCBhIFNFUVVFTkNFIChvciBTRVQgcmVzcC4pIGl0ZW0gd2lsbCBiZSBhZGRlZCBhcyBhIHNpYmxpbmcgKGUuZy4gbGlzdC50eXBlID09IExUQ1xfQVNOMVxfU0VRVUVOQ0UpIGFuZCB0aGUgY2hpbGQgCitwb2ludGVyIHBvaW50cyB0byBhIG5ldyBsaXN0IG9mIGl0ZW1zIGNvbnRhaW5lZCB3aXRoaW4gdGhlIG9iamVjdC4KKworXGluZGV4e2RlclxfZGVjb2RlXF9zZXF1ZW5jZVxfZmxleGkoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK2ludCAgZGVyX2RlY29kZV9zZXF1ZW5jZV9mbGV4aShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2FzbjFfbGlzdCAqKm91dCk7CitcZW5ke3ZlcmJhdGltfQorCitUaGlzIHdpbGwgZGVjb2RlIGl0ZW1zIGluIHRoZSBcdGV4dGl0e2lufSBidWZmZXIgb2YgbWF4IGlucHV0IGxlbmd0aCBcdGV4dGl0e2lubGVufSBhbmQgc3RvcmUgdGhlIG5ld2x5IGNyZWF0ZWQgcG9pbnRlciB0byB0aGUgbGlzdCBpbiBcdGV4dGl0e291dH0uICBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcworYWxsIHJlcXVpcmVkIG1lbW9yeSBmb3IgdGhlIGRlY29kaW5nLiAgSXQgc3RvcmVzIHRoZSBudW1iZXIgb2Ygb2N0ZXRzIHJlYWQgYmFjayBpbnRvIFx0ZXh0aXR7aW5sZW59LgorCitUaGUgZnVuY3Rpb24gd2lsbCB0ZXJtaW5hdGUgd2hlbiBlaXRoZXIgaXQgaGl0cyBhbiBpbnZhbGlkIEFTTi4xIHRhZywgb3IgaXQgcmVhZHMgXHRleHRpdHtpbmxlbn0gb2N0ZXRzLiAgQW4gZWFybHkgdGVybWluYXRpb24gaXMgYSBzb2Z0IGVycm9yLCBhbmQgcmV0dXJucworbm9ybWFsbHkuICBUaGUgZGVjb2RlZCBsaXN0IFx0ZXh0aXR7b3V0fSB3aWxsIHBvaW50IHRvIHRoZSB2ZXJ5IGZpcnN0IGVsZW1lbnQgb2YgdGhlIGxpc3QgKGUuZy4gYm90aCBwYXJlbnQgYW5kIHByZXYgcG9pbnRlcnMgd2lsbCBiZSBcdGV4dGJme05VTEx9KS4gIAorCitBbiBpbnZhbGlkIGRlY29kaW5nIHdpbGwgdGVybWluYXRlIHRoZSBwcm9jZXNzLCBhbmQgZnJlZSB0aGUgYWxsb2NhdGVkIG1lbW9yeSBhdXRvbWF0aWNhbGx5LiAgCisKK1x0ZXh0YmZ7Tm90ZTp9IHRoZSBsaXN0IGRlY29kZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBcdGV4dGJme05PVH0gaW4gdGhlIGNvcnJlY3QgZm9ybSBmb3IgZGVyXF9lbmNvZGVcX3NlcXVlbmNlKCkgdG8gdXNlIGRpcmVjdGx5LiAgWW91IHdpbGwgaGF2ZSB0byBmaXJzdCAKK2hhdmUgdG8gY29udmVydCB0aGUgbGlzdCBieSBmaXJzdCBzdG9yaW5nIGFsbCBvZiB0aGUgc2libGluZ3MgaW4gYW4gYXJyYXkgdGhlbiBzdG9yaW5nIGFsbCB0aGUgY2hpbGRyZW4gYXMgc3ViLWxpc3RzIG9mIGEgc2VxdWVuY2UgdXNpbmcgdGhlIFx0ZXh0aXR7LmRhdGF9IAorcG9pbnRlci4gIEN1cnJlbnRseSBubyBmdW5jdGlvbiBpbiBMaWJUb21DcnlwdCBwcm92aWRlcyB0aGlzIGFiaWxpdHkuCisKK1xzdWJzdWJzZWN0aW9ue1NhbXBsZSBEZWNvZGluZ30KK1N1cHBvc2Ugd2UgZGVjb2RlIHRoZSBmb2xsb3dpbmcgc3RydWN0dXJlOgorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorVXNlciA6Oj0gU0VRVUVOQ0UgeworICAgTmFtZSAgICAgICAgSUE1IFNUUklORworICAgTG9naW5Ub2tlbiAgU0VRVUVOQ0UgeworICAgICAgcGFzc3dkSGFzaCAgIE9DVEVUIFNUUklORworICAgICAgcHVia2V5ICAgICAgIEVDQ1B1YmxpY0tleQorICAgfQorICAgTGFzdE9uICAgICAgVVRDVElNRQorfQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CitcYmVnaW57Zmx1c2hsZWZ0fWFuZCB3ZSBkZWNvZGVkIGl0IHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOlxlbmR7Zmx1c2hsZWZ0fQorCitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19Cit1bnNpZ25lZCBjaGFyIGluYnVmW01BWFNJWkVdOwordW5zaWduZWQgbG9uZyBpbmJ1ZmxlbjsKK2x0Y19hc24xX2xpc3QgKmxpc3Q7CitpbnQgICAgICAgICAgIGVycjsKKworLyogc29tZWhvdyBmaWxsIGluYnVmL2luYnVmbGVuICovCitpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfZmxleGkoaW5idWYsIGluYnVmbGVuLCAmbGlzdCkpICE9IENSWVBUX09LKSB7CisgICBwcmludGYoIkVycm9yIGRlY29kaW5nOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgZXhpdChFWElUX0ZBSUxVUkUpOworfQorXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CisKK0F0IHRoaXMgcG9pbnQgXHRleHRpdHtsaXN0fSB3b3VsZCBwb2ludCB0byB0aGUgU0VRVUVOQ0UgaWRlbnRpZmllZCBieSBcdGV4dGl0e1VzZXJ9LiAgSXQgd291bGQgaGF2ZSBubyBzaWJibGluZ3MgKHByZXYgb3IgbmV4dCksIGFuZCBvbmx5IGEgY2hpbGQgbm9kZS4gIFdhbGtpbmcgdG8gdGhlIGNoaWxkCitub2RlIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlIHdpbGwgYnJpbmcgdXMgdG8gdGhlIFx0ZXh0aXR7TmFtZX0gcG9ydGlvbiBvZiB0aGUgU0VRVUVOQ0U6CitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CitsaXN0ID0gbGlzdC0+Y2hpbGQ7CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KK05vdyBcdGV4dGl0e2xpc3R9IHBvaW50cyB0byB0aGUgXHRleHRpdHtOYW1lfSBtZW1iZXIgKHdpdGggdGhlIHRhZyBJQTUgU1RSSU5HKS4gIFRoZSBcdGV4dGl0e2RhdGF9LCBcdGV4dGl0e3NpemV9LCBhbmQgXHRleHRpdHt0eXBlfSBtZW1iZXJzIG9mIFx0ZXh0aXR7bGlzdH0gc2hvdWxkIHJlZmxlY3QKK3RoYXQgb2YgYW4gSUE1IFNUUklORy4gIFRoZSBzaWJibGluZyB3aWxsIG5vdyBiZSB0aGUgXHRleHRpdHtMb2dpblRva2VufSBTRVFVRU5DRS4gIFRoZSBzaWJibGluZyBoYXMgYSBjaGlsZCBub2RlIHdoaWNoIHBvaW50cyB0byB0aGUgXHRleHRpdHtwYXNzd2RIYXNofSBPQ1RFVCBTVFJJTkcuCitXZSBjYW4gd2FsayB0byB0aGlzIG5vZGUgd2l0aCB0aGUgZm9sbG93aW5nIGNvZGU6CitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CisvKiBsaXN0IGFscmVhZHkgcG9pbnRpbmcgdG8gJ05hbWUnICovCitsaXN0ID0gbGlzdC0+bmV4dC0+Y2hpbGQ7CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KK0F0IHRoaXMgcG9pbnQsIFx0ZXh0aXR7bGlzdH0gd2lsbCBwb2ludCB0byB0aGUgXHRleHRpdHtwYXNzd2RIYXNofSBtZW1iZXIgb2YgdGhlIGlubmVybW9zdCBTRVFVRU5DRS4gIFRoaXMgbm9kZSBoYXMgYSBzaWJibGluZywgdGhlIFx0ZXh0aXR7cHVia2V5fSBtZW1iZXIgb2YgdGhlIFNFUVVFTkNFLgorVGhlIFx0ZXh0aXR7TGFzdE9ufSBtZW1iZXIgb2YgdGhlIFNFUVVFTkNFIGlzIGEgc2liYmxpbmcgb2YgdGhlIExvZ2luVG9rZW4gbm9kZSwgaWYgd2Ugd2FudGVkIHRvIHdhbGsgdGhlcmUgd2Ugd291bGQgaGF2ZSB0byBnbyB1cCBhbmQgb3ZlciB2aWE6CitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CitsaXN0ID0gbGlzdC0+cGFyZW50LT5uZXh0OworXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CitBdCB0aGlzIHBvaW50LCB3ZSBhcmUgcG9pbnRpbmcgdG8gdGhlIGxhc3Qgbm9kZSBvZiB0aGUgbGlzdC4gIExpc3RzIGFyZSB0ZXJtaW5hdGVkIGluIGFsbCBkaXJlY3Rpb25zIGJ5IGEgXHRleHRiZntOVUxMfSBwb2ludGVyLiAgQWxsIG5vZGVzIGFyZSBkb3VibHkgbGlua2VkIHNvIHRoYXQgeW91IAorY2FuIHdhbGsgdXAgYW5kIGRvd24gdGhlIG5vZGVzIHdpdGhvdXQga2VlcGluZyBwb2ludGVycyBseWluZyBhcm91bmQuCisKKworCisKKworXHN1YnN1YnNlY3Rpb257RnJlZSdpbmcgYSBGbGV4aSBMaXN0fQorVG8gZnJlZSB0aGUgbGlzdCB1c2UgdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4KKworXGluZGV4e2Rlclxfc2VxdWVuY2VcX2ZyZWUoKX0KK1xiZWdpbnt2ZXJiYXRpbX0KK3ZvaWQgZGVyX3NlcXVlbmNlX2ZyZWUobHRjX2FzbjFfbGlzdCAqaW4pOworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGZyZWUgYWxsIG9mIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IGRlclxfZGVjb2RlXF9zZXF1ZW5jZVxfZmxleGkoKS4KKworXG15c2VjdGlvbntQYXNzd29yZCBCYXNlZCBDcnlwdG9ncmFwaHl9Citcc3Vic2VjdGlvbntQS0NTIFwjNX0KK1xpbmRleHtQS0NTIFwjNX0KK0luIG9yZGVyIHRvIHNlY3VyZWx5IGhhbmRsZSB1c2VyIHBhc3N3b3JkcyBmb3IgdGhlIHB1cnBvc2VzIG9mIGNyZWF0aW5nIHNlc3Npb24ga2V5cyBhbmQgY2hhaW5pbmcgSVZzIHRoZSBQS0NTIFwjNSB3YXMgZHJhZnRlZC4gICBQS0NTIFwjNQoraXMgbWFkZSB1cCBvZiB0d28gYWxnb3JpdGhtcywgQWxnb3JpdGhtIE9uZSBhbmQgQWxnb3JpdGhtIFR3by4gIEFsZ29yaXRobSBPbmUgaXMgdGhlIG9sZGVyIGZhaXJseSBsaW1pdGVkIGFsZ29yaXRobSB3aGljaCBoYXMgYmVlbiBpbXBsZW1lbnRlZAorZm9yIGNvbXBsZXRlbmVzcy4gIEFsZ29yaXRobSBUd28gaXMgYSBiaXQgbW9yZSBtb2Rlcm4gYW5kIG1vcmUgZmxleGlibGUgdG8gd29yayB3aXRoLgorCitcc3Vic2VjdGlvbntBbGdvcml0aG0gT25lfQorQWxnb3JpdGhtIE9uZSBhY2NlcHRzIGFzIGlucHV0IGEgcGFzc3dvcmQsIGFuIDgtLWJ5dGUgc2FsdCwgYW5kIGFuIGl0ZXJhdGlvbiBjb3VudGVyLiAgVGhlIGl0ZXJhdGlvbiBjb3VudGVyIGlzIG1lYW50IHRvIGFjdCBhcyBkZWxheSBmb3IKK3Blb3BsZSB0cnlpbmcgdG8gYnJ1dGUgZm9yY2UgZ3Vlc3MgdGhlIHBhc3N3b3JkLiAgVGhlIGhpZ2hlciB0aGUgaXRlcmF0aW9uIGNvdW50ZXIgdGhlIGxvbmdlciB0aGUgZGVsYXkuICBUaGlzIGFsZ29yaXRobSBhbHNvIHJlcXVpcmVzIGEgaGFzaCAKK2FsZ29yaXRobSBhbmQgcHJvZHVjZXMgYW4gb3V0cHV0IG5vIGxvbmdlciB0aGFuIHRoZSBvdXRwdXQgb2YgdGhlIGhhc2guICAKKworXGluZGV4e3BrY3NcXzVcX2FsZzEoKX0KK1xiZWdpbnthbGx0dH0KK2ludCBwa2NzXzVfYWxnMShjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd29yZCwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgcGFzc3dvcmRfbGVuLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBpdGVyYXRpb25fY291bnQsICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBoYXNoX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQorXGVuZHthbGx0dH0KK1doZXJlIFx0ZXh0aXR7cGFzc3dvcmR9IGlzIHRoZSB1c2VyJ3MgcGFzc3dvcmQuICBTaW5jZSB0aGUgYWxnb3JpdGhtIGFsbG93cyBiaW5hcnkgcGFzc3dvcmRzIHlvdSBtdXN0IGFsc28gc3BlY2lmeSB0aGUgbGVuZ3RoIGluIFx0ZXh0aXR7cGFzc3dvcmRcX2xlbn0uICAKK1RoZSBcdGV4dGl0e3NhbHR9IGlzIGEgZml4ZWQgc2l6ZSA4LS1ieXRlIGFycmF5IHdoaWNoIHNob3VsZCBiZSByYW5kb20gZm9yIGVhY2ggdXNlciBhbmQgc2Vzc2lvbi4gIFRoZSBcdGV4dGl0e2l0ZXJhdGlvblxfY291bnR9IGlzIHRoZSBkZWxheSBkZXNpcmVkCitvbiB0aGUgcGFzc3dvcmQuICBUaGUgXHRleHRpdHtoYXNoXF9pZHh9IGlzIHRoZSBpbmRleCBvZiB0aGUgaGFzaCB5b3Ugd2lzaCB0byB1c2UgaW4gdGhlIGRlc2NyaXB0b3IgdGFibGUuICAKKworVGhlIG91dHB1dCBvZiBsZW5ndGggdXAgdG8gXHRleHRpdHtvdXRsZW59IGlzIHN0b3JlZCBpbiBcdGV4dGl0e291dH0uICBJZiBcdGV4dGl0e291dGxlbn0gaXMgaW5pdGlhbGx5IGxhcmdlciB0aGFuIHRoZSBzaXplIG9mIHRoZSBoYXNoIGZ1bmN0aW9ucyBvdXRwdXQKK2l0IGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIGJ5dGVzIHN0b3JlZC4gIElmIGl0IGlzIHNtYWxsZXIgdGhhbiBub3QgYWxsIG9mIHRoZSBoYXNoIG91dHB1dCBpcyBzdG9yZWQgaW4gXHRleHRpdHtvdXR9LgorCitcc3Vic2VjdGlvbntBbGdvcml0aG0gVHdvfQorCitBbGdvcml0aG0gVHdvIGlzIHRoZSByZWNvbW1lbmRlZCBhbGdvcml0aG0gZm9yIHRoaXMgdGFzay4gIEl0IGFsbG93cyB2YXJpYWJsZSBsZW5ndGggc2FsdHMsIGFuZCBjYW4gcHJvZHVjZSBvdXRwdXRzIGxhcmdlciB0aGFuIHRoZSAKK2hhc2ggZnVuY3Rpb25zIG91dHB1dC4gIEFzIHN1Y2gsIGl0IGNhbiBlYXNpbHkgYmUgdXNlZCB0byBkZXJpdmUgc2Vzc2lvbiBrZXlzIGZvciBjaXBoZXJzIGFuZCBNQUNzIGFzIHdlbGwgaW5pdGlhbCB2ZWN0b3JzIGFzIHJlcXVpcmVkCitmcm9tIGEgc2luZ2xlIHBhc3N3b3JkIGFuZCBpbnZvY2F0aW9uIG9mIHRoaXMgYWxnb3JpdGhtLgorCitcaW5kZXh7cGtjc1xfNVxfYWxnMigpfQorXGJlZ2lue2FsbHR0fQoraW50IHBrY3NfNV9hbGcyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIHBhc3N3b3JkX2xlbiwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBzYWx0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBpdGVyYXRpb25fY291bnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGhhc2hfaWR4LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pCitcZW5ke2FsbHR0fQorV2hlcmUgXHRleHRpdHtwYXNzd29yZH0gaXMgdGhlIHVzZXJzIHBhc3N3b3JkLiAgU2luY2UgdGhlIGFsZ29yaXRobSBhbGxvd3MgYmluYXJ5IHBhc3N3b3JkcyB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIGxlbmd0aCBpbiBcdGV4dGl0e3Bhc3N3b3JkXF9sZW59LiAgCitUaGUgXHRleHRpdHtzYWx0fSBpcyBhbiBhcnJheSBvZiBzaXplIFx0ZXh0aXR7c2FsdFxfbGVufS4gIEl0IHNob3VsZCBiZSByYW5kb20gZm9yIGVhY2ggdXNlciBhbmQgc2Vzc2lvbi4gIFRoZSBcdGV4dGl0e2l0ZXJhdGlvblxfY291bnR9IGlzIHRoZSBkZWxheSBkZXNpcmVkCitvbiB0aGUgcGFzc3dvcmQuICBUaGUgXHRleHRpdHtoYXNoXF9pZHh9IGlzIHRoZSBpbmRleCBvZiB0aGUgaGFzaCB5b3Ugd2lzaCB0byB1c2UgaW4gdGhlIGRlc2NyaXB0b3IgdGFibGUuICAgVGhlIG91dHB1dCBvZiBsZW5ndGggdXAgdG8gCitcdGV4dGl0e291dGxlbn0gaXMgc3RvcmVkIGluIFx0ZXh0aXR7b3V0fS4KKworXGJlZ2lue3ZlcmJhdGltfQorLyogZGVtbyB0byBzaG93IGhvdyB0byBtYWtlIHNlc3Npb24gc3RhdGUgbWF0ZXJpYWwgCisgKiBmcm9tIGEgcGFzc3dvcmQgKi8KKyNpbmNsdWRlIDx0b21jcnlwdC5oPgoraW50IG1haW4odm9pZCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIHBhc3N3b3JkWzEwMF0sIHNhbHRbMTAwXSwKKyAgICAgICAgICAgICAgICAgIGNpcGhlcl9rZXlbMTZdLCBjaXBoZXJfaXZbMTZdLAorICAgICAgICAgICAgICAgICAgbWFjX2tleVsxNl0sIG91dGJ1Zls0OF07CisgICAgaW50ICAgICAgICAgICBlcnIsIGhhc2hfaWR4OworICAgIHVuc2lnbmVkIGxvbmcgb3V0bGVuLCBwYXNzd29yZF9sZW4sIHNhbHRfbGVuOworCisgICAgLyogcmVnaXN0ZXIgaGFzaCBhbmQgZ2V0IGl0J3MgaWR4IC4uLi4gKi8KKworICAgIC8qIGdldCB1c2VycyBwYXNzd29yZCBhbmQgbWFrZSB1cCBhIHNhbHQgLi4uICovCisKKyAgICAvKiBjcmVhdGUgdGhlIG1hdGVyaWFsICgxMDAgaXRlcmF0aW9ucyBpbiBhbGdvcml0aG0pICovCisgICAgb3V0bGVuID0gc2l6ZW9mKG91dGJ1Zik7CisgICAgaWYgKChlcnIgPSBwa2NzXzVfYWxnMihwYXNzd29yZCwgcGFzc3dvcmRfbGVuLCBzYWx0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbHRfbGVuLCAxMDAsIGhhc2hfaWR4LCBvdXRidWYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dGxlbikpIAorICAgICAgICE9IENSWVBUX09LKSB7CisgICAgICAgLyogZXJyb3IgaGFuZGxlICovCisgICAgfQorCisgICAgLyogbm93IGV4dHJhY3QgaXQgKi8KKyAgICBtZW1jcHkoY2lwaGVyX2tleSwgb3V0YnVmLCAxNik7CisgICAgbWVtY3B5KGNpcGhlcl9pdiwgIG91dGJ1ZisxNiwgMTYpOworICAgIG1lbWNweShtYWNfa2V5LCAgICBvdXRidWYrMzIsIDE2KTsKKworICAgIC8qIHVzZSBtYXRlcmlhbCAocmVjYWxsIHRvIHN0b3JlIHRoZSBzYWx0IGluIHRoZSBvdXRwdXQpICovCit9CitcZW5ke3ZlcmJhdGltfQorCitcY2hhcHRlcntNaXNjZWxsYW5lb3VzfQorXG15c2VjdGlvbntCYXNlNjQgRW5jb2RpbmcgYW5kIERlY29kaW5nfQorVGhlIGxpYnJhcnkgcHJvdmlkZXMgZnVuY3Rpb25zIHRvIGVuY29kZSBhbmQgZGVjb2RlIGEgUkZDIDE1MjEgYmFzZS0tNjQgY29kaW5nIHNjaGVtZS4gIFRoZSBjaGFyYWN0ZXJzIHVzZWQgaW4gdGhlIG1hcHBpbmdzIGFyZToKK1xiZWdpbnt2ZXJiYXRpbX0KK0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8KK1xlbmR7dmVyYmF0aW19CitUaG9zZSBjaGFyYWN0ZXJzIGFyZSBzdXBwb3J0ZWQgaW4gdGhlIDctYml0IEFTQ0lJIG1hcCwgd2hpY2ggbWVhbnMgdGhleSBjYW4gYmUgdXNlZCBmb3IgdHJhbnNwb3J0IG92ZXIKK2NvbW1vbiBlLW1haWwsIHVzZW5ldCBhbmQgSFRUUCBtZWRpdW1zLiAgVGhlIGZvcm1hdCBvZiBhbiBlbmNvZGVkIHN0cmVhbSBpcyBqdXN0IGEgbGl0ZXJhbCBzZXF1ZW5jZSBvZiBBU0NJSSBjaGFyYWN0ZXJzCit3aGVyZSBhIGdyb3VwIG9mIGZvdXIgcmVwcmVzZW50IDI0LWJpdHMgb2YgaW5wdXQuICBUaGUgZmlyc3QgZm91ciBjaGFycyBvZiB0aGUgZW5jb2RlcnMgb3V0cHV0IGlzIHRoZSBsZW5ndGggb2YgdGhlIAorb3JpZ2luYWwgaW5wdXQuICBBZnRlciB0aGUgZmlyc3QgZm91ciBjaGFyYWN0ZXJzIGlzIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlLgorCitPZnRlbiwgaXQgaXMgZGVzaXJhYmxlIHRvIGxpbmUgd3JhcCB0aGUgb3V0cHV0IHRvIGZpdCBuaWNlbHkgaW4gYW4gZS1tYWlsIG9yIHVzZW5ldCBwb3N0aW5nLiAgVGhlIGRlY29kZXIgYWxsb3dzIHlvdSB0bworcHV0IGFueSBjaGFyYWN0ZXIgKHRoYXQgaXMgbm90IGluIHRoZSBhYm92ZSBzZXF1ZW5jZSkgaW4gYmV0d2VlbiBhbnkgY2hhcmFjdGVyIG9mIHRoZSBlbmNvZGVycyBvdXRwdXQuICBZb3UgbWF5IG5vdCBob3dldmVyLAorYnJlYWsgdXAgdGhlIGZpcnN0IGZvdXIgY2hhcmFjdGVycy4KKworVG8gZW5jb2RlIGEgYmluYXJ5IHN0cmluZyBpbiBiYXNlNjQgY2FsbDoKK1xpbmRleHtiYXNlNjRcX2VuY29kZSgpfSAgXGluZGV4e2Jhc2U2NFxfZGVjb2RlKCl9IAorXGJlZ2lue3ZlcmJhdGltfQoraW50IGJhc2U2NF9lbmNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KK1doZXJlIFx0ZXh0aXR7aW59IGlzIHRoZSBiaW5hcnkgc3RyaW5nIGFuZCBcdGV4dGl0e291dH0gaXMgd2hlcmUgdGhlIEFTQ0lJIG91dHB1dCBpcyBwbGFjZWQuICBZb3UgbXVzdCBzZXQgdGhlIHZhbHVlIG9mIFx0ZXh0aXR7b3V0bGVufSBwcmlvcgordG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFuZCBpdCBzZXRzIHRoZSBsZW5ndGggb2YgdGhlIGJhc2U2NCBvdXRwdXQgaW4gXHRleHRpdHtvdXRsZW59IHdoZW4gaXQgaXMgZG9uZS4gIFRvIGRlY29kZSBhIGJhc2U2NCAKK3N0cmluZyBjYWxsOgorXGJlZ2lue3ZlcmJhdGltfQoraW50IGJhc2U2NF9kZWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworXGVuZHt2ZXJiYXRpbX0KKworXG15c2VjdGlvbntQcmltYWxpdHkgVGVzdGluZ30KK1xpbmRleHtQcmltYWxpdHkgVGVzdGluZ30KK1RoZSBsaWJyYXJ5IGluY2x1ZGVzIHByaW1hbGl0eSB0ZXN0aW5nIGFuZCByYW5kb20gcHJpbWUgZnVuY3Rpb25zIGFzIHdlbGwuICBUaGUgcHJpbWFsaXR5IHRlc3RlciB3aWxsIHBlcmZvcm0gdGhlIHRlc3QgaW4KK3R3byBwaGFzZXMuICBGaXJzdCBpdCB3aWxsIHBlcmZvcm0gdHJpYWwgZGl2aXNpb24gYnkgdGhlIGZpcnN0IGZldyBwcmltZXMuICBTZWNvbmQgaXQgd2lsbCBwZXJmb3JtIGVpZ2h0IHJvdW5kcyBvZiB0aGUgCitSYWJpbi1NaWxsZXIgcHJpbWFsaXR5IHRlc3RpbmcgYWxnb3JpdGhtLiAgSWYgdGhlIGNhbmRpZGF0ZSBwYXNzZXMgYm90aCBwaGFzZXMgaXQgaXMgZGVjbGFyZWQgcHJpbWUgb3RoZXJ3aXNlIGl0IGlzIGRlY2xhcmVkCitjb21wb3NpdGUuICBObyBwcmltZSBudW1iZXIgd2lsbCBmYWlsIHRoZSB0d28gcGhhc2VzIGJ1dCBjb21wb3NpdGVzIGNhbi4gIEVhY2ggcm91bmQgb2YgdGhlIFJhYmluLU1pbGxlciBhbGdvcml0aG0gcmVkdWNlcwordGhlIHByb2JhYmlsaXR5IG9mIGEgcHNldWRvLXByaW1lIGJ5ICQxIFxvdmVyIDQkIHRoZXJlZm9yZSBhZnRlciBzaXh0ZWVuIHJvdW5kcyB0aGUgcHJvYmFiaWxpdHkgaXMgbm8gbW9yZSB0aGFuIAorJFxsZWZ0ICggeyAxIFxvdmVyIDQgfSBccmlnaHQgKV57OH0gPSAyXnstMTZ9JC4gIEluIHByYWN0aWNlIHRoZSBwcm9iYWJpbGl0eSBvZiBlcnJvciBpcyBpbiBmYWN0IG11Y2ggbG93ZXIgdGhhbiB0aGF0LgorCitXaGVuIG1ha2luZyByYW5kb20gcHJpbWVzIHRoZSB0cmlhbCBkaXZpc2lvbiBzdGVwIGlzIGluIGZhY3QgYW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIG9mIFx0ZXh0aXR7SW1wbGVtZW50YXRpb24gb2YgRmFzdCBSU0EgS2V5IEdlbmVyYXRpb24gb24gU21hcnQgQ2FyZHN9XGZvb3Rub3Rle0NoZW5naHVhaSBMdSwgQW5kcmUgTC4gTS4gZG9zIFNhbnRvcyBhbmQgRnJhbmNpc2NvIFIuIFBpbWVudGVsfS4KK0luIGVzc2VuY2UgYSB0YWJsZSBvZiBtYWNoaW5lLXdvcmQgc2l6ZWQgcmVzaWR1ZXMgYXJlIGtlcHQgb2YgYSBjYW5kaWRhdGUgbW9kdWxvIGEgc2V0IG9mIHByaW1lcy4gIFdoZW4gdGhlIGNhbmRpZGF0ZQoraXMgcmVqZWN0ZWQgYW5kIHVsdGltYXRlbHkgaW5jcmVtZW50ZWQgdG8gdGVzdCB0aGUgbmV4dCBudW1iZXIgdGhlIHJlc2lkdWVzIGFyZSB1cGRhdGVkIHdpdGhvdXQgdXNpbmcgbXVsdGktd29yZCBwcmVjaXNpb24KK21hdGggb3BlcmF0aW9ucy4gIEFzIGEgcmVzdWx0IHRoZSByb3V0aW5lIGNhbiBzY2FuIGFoZWFkIHRvIHRoZSBuZXh0IG51bWJlciByZXF1aXJlZCBmb3IgdGVzdGluZyB3aXRoIHZlcnkgbGl0dGxlIHdvcmsKK2ludm9sdmVkLgorCitJbiB0aGUgZXZlbnQgdGhhdCBhIGNvbXBvc2l0ZSBkaWQgbWFrZSBpdCB0aHJvdWdoIGl0IHdvdWxkIG1vc3QgbGlrZWx5IGNhdXNlIHRoZSB0aGUgYWxnb3JpdGhtIHRyeWluZyB0byB1c2UgaXQgdG8gZmFpbC4gIEZvciAKK2luc3RhbmNlLCBpbiBSU0EgdHdvIHByaW1lcyAkcCQgYW5kICRxJCBhcmUgcmVxdWlyZWQuICBUaGUgb3JkZXIgb2YgdGhlIG11bHRpcGxpY2F0aXZlIHN1Yi1ncm91cCAobW9kdWxvICRwcSQpIGlzIGdpdmVuIAorYXMgJFxwaGkocHEpJCBvciAkKHAgLSAxKShxIC0gMSkkLiAgVGhlIGRlY3J5cHRpb24gZXhwb25lbnQgJGQkIGlzIGZvdW5kIGFzICRkZSBcZXF1aXYgMVxtYm94eyB9KFxtYm94e21vZCB9IFxwaGkocHEpKSQuICBJZiBlaXRoZXIgJHAkIG9yICRxJCBpcyBjb21wb3NpdGUgdGhlIHZhbHVlIG9mICRkJCB3aWxsIGJlIGluY29ycmVjdCBhbmQgdGhlIHVzZXIKK3dpbGwgbm90IGJlIGFibGUgdG8gc2lnbiBvciBkZWNyeXB0IG1lc3NhZ2VzIGF0IGFsbC4gIFN1cHBvc2UgJHAkIHdhcyBwcmltZSBhbmQgJHEkIHdhcyBjb21wb3NpdGUgdGhpcyBpcyBqdXN0IGEgdmFyaWF0aW9uIG9mIAordGhlIG11bHRpLXByaW1lIFJTQS4gIFN1cHBvc2UgJHEgPSBycyQgZm9yIHR3byBwcmltZXMgJHIkIGFuZCAkcyQgdGhlbiAkXHBoaShwcSkgPSAocCAtIDEpKHIgLSAxKShzIC0gMSkkIHdoaWNoIGNsZWFybHkgaXMgCitub3QgZXF1YWwgdG8gJChwIC0gMSkocnMgLSAxKSQuCisKK1RoZXNlIGFyZSBub3QgdGVjaG5pY2FsbHkgcGFydCBvZiB0aGUgTGliVG9tTWF0aCBsaWJyYXJ5IGJ1dCB0aGlzIGlzIHRoZSBiZXN0IHBsYWNlIHRvIGRvY3VtZW50IHRoZW0uICAKK1RvIHRlc3QgaWYgYSBcdGV4dGl0e21wXF9pbnR9IGlzIHByaW1lIGNhbGw6CitcYmVnaW57dmVyYmF0aW19CitpbnQgaXNfcHJpbWUobXBfaW50ICpOLCBpbnQgKnJlc3VsdCk7CitcZW5ke3ZlcmJhdGltfQorVGhpcyBwdXRzIGEgb25lIGluIFx0ZXh0aXR7cmVzdWx0fSBpZiB0aGUgbnVtYmVyIGlzIHByb2JhYmx5IHByaW1lLCBvdGhlcndpc2UgaXQgcGxhY2VzIGEgemVybyBpbiBpdC4gIEl0IGlzIGFzc3VtZWQgdGhhdCBpZiAKK2l0IHJldHVybnMgYW4gZXJyb3IgdGhhdCB0aGUgdmFsdWUgaW4gXHRleHRpdHtyZXN1bHR9IGlzIHVuZGVmaW5lZC4gIFRvIG1ha2UgCithIHJhbmRvbSBwcmltZSBjYWxsOgorXGJlZ2lue3ZlcmJhdGltfQoraW50IHJhbmRfcHJpbWUoICAgICAgIG1wX2ludCAqTiwgCisgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgCisgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdwcm5nKTsKK1xlbmR7dmVyYmF0aW19CitXaGVyZSBcdGV4dGl0e2xlbn0gaXMgdGhlIHNpemUgb2YgdGhlIHByaW1lIGluIGJ5dGVzICgkMiBcbGUgbGVuIFxsZSAyNTYkKS4gIFlvdSBjYW4gc2V0IFx0ZXh0aXR7bGVufSB0byB0aGUgbmVnYXRpdmUgc2l6ZSB5b3Ugd2FudAordG8gZ2V0IGEgcHJpbWUgb2YgdGhlIGZvcm0gJHAgXGVxdWl2IDNcbWJveHsgfShcbWJveHttb2QgfSA0KSQuICBTbyBpZiB5b3Ugd2FudCBhIDEwMjQtYml0IHByaW1lIG9mIHRoaXMgc29ydCBwYXNzIAorXHRleHRpdHtsZW4gPSAtMTI4fSB0byB0aGUgZnVuY3Rpb24uICBVcG9uIHN1Y2Nlc3MgaXQgd2lsbCByZXR1cm4ge1xiZiBDUllQVFxfT0t9IGFuZCBcdGV4dGl0e059IHdpbGwgY29udGFpbiBhbiBpbnRlZ2VyIHdoaWNoCitpcyB2ZXJ5IGxpa2VseSBwcmltZS4KKworXGNoYXB0ZXJ7UHJvZ3JhbW1pbmcgR3VpZGVsaW5lc30KKworXG15c2VjdGlvbntTZWN1cmUgUHNldWRvIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yc30KK1Byb2JhYmx5IHRoZSBzaW5nbGUgbW9zdCB2dWxuZXJhYmxlIHBvaW50IG9mIGFueSBjcnlwdG9zeXN0ZW0gaXMgdGhlIFBSTkcuICBXaXRob3V0IG9uZSwgZ2VuZXJhdGluZyBhbmQgcHJvdGVjdGluZyBzZWNyZXRzCit3b3VsZCBiZSBpbXBvc3NpYmxlLiAgVGhlIHJlcXVpcmVtZW50IHRoYXQgb25lIGJlIHNldHVwIGNvcnJlY3RseSBpcyB2aXRhbGx5IGltcG9ydGFudCwgYW5kIHRvIGFkZHJlc3MgdGhpcyBwb2ludCB0aGUgbGlicmFyeQorZG9lcyBwcm92aWRlIHR3byBSTkcgc291cmNlcyB0aGF0IHdpbGwgYWRkcmVzcyB0aGUgbGFyZ2VzdCBhbW91bnQgb2YgZW5kIHVzZXJzIGFzIHBvc3NpYmxlLiAgVGhlIFx0ZXh0aXR7c3Bybmd9IFBSTkcgcHJvdmlkZXMgYW4gZWFzeSB0byAKK2FjY2VzcyBzb3VyY2Ugb2YgZW50cm9weSBmb3IgYW55IGFwcGxpY2F0aW9uIG9uIGEgVU5JWCAoYW5kIHRoZSBsaWtlKSBvciBXaW5kb3dzIGNvbXB1dGVyLiAgCisKK0hvd2V2ZXIsIHdoZW4gdGhlIGVuZCB1c2VyIGlzIG5vdCBvbiBvbmUgb2YgdGhlc2UgcGxhdGZvcm1zLCB0aGUgYXBwbGljYXRpb24gZGV2ZWxvcGVyIG11c3QgYWRkcmVzcyB0aGUgaXNzdWUgb2YgZmluZGluZworZW50cm9weS4gIFRoaXMgbWFudWFsIGlzIG5vdCBkZXNpZ25lZCB0byBiZSBhIHRleHQgb24gY3J5cHRvZ3JhcGh5LiAgSSB3b3VsZCBqdXN0IGxpa2UgdG8gaGlnaGxpZ2h0IHRoYXQgd2hlbiB5b3UgZGVzaWduCithIGNyeXB0b3N5c3RlbSBtYWtlIHN1cmUgdGhlIGZpcnN0IHByb2JsZW0geW91IHNvbHZlIGlzIGdldHRpbmcgYSBmcmVzaCBzb3VyY2Ugb2YgZW50cm9weS4gIAorCitcbXlzZWN0aW9ue1ByZXZlbnRpbmcgVHJpdmlhbCBFcnJvcnN9CitUd28gc2ltcGxlIHdheXMgdG8gcHJldmVudCB0cml2aWFsIGVycm9ycyBpcyB0byBwcmV2ZW50IG92ZXJmbG93cywgYW5kIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWVzLiAgQWxsIG9mIHRoZSBmdW5jdGlvbnMKK3doaWNoIG91dHB1dCB2YXJpYWJsZSBsZW5ndGggc3RyaW5ncyB3aWxsIHJlcXVpcmUgeW91IHRvIHBhc3MgdGhlIGxlbmd0aCBvZiB0aGUgZGVzdGluYXRpb24uICBJZiB0aGUgc2l6ZSBvZiB5b3VyIG91dHB1dAorYnVmZmVyIGlzIHNtYWxsZXIgdGhhbiB0aGUgb3V0cHV0IGl0IHdpbGwgcmVwb3J0IGFuIGVycm9yLiAgVGhlcmVmb3JlLCBtYWtlIHN1cmUgdGhlIHNpemUgeW91IHBhc3MgaXMgY29ycmVjdCEKKworQWxzbywgdmlydHVhbGx5IGFsbCBvZiB0aGUgZnVuY3Rpb25zIHJldHVybiBhbiBlcnJvciBjb2RlIG9yIHtcYmYgQ1JZUFRcX09LfS4gIFlvdSBzaG91bGQgZGV0ZWN0IGFsbCBlcnJvcnMsIGFzIHNpbXBsZSAKK3R5cG9zIGNhbiBjYXVzZSBhbGdvcml0aG1zIHRvIGZhaWwgdG8gd29yayBhcyBkZXNpcmVkLgorCitcbXlzZWN0aW9ue1JlZ2lzdGVyaW5nIFlvdXIgQWxnb3JpdGhtc30KK1RvIGF2b2lkIGxpbmtpbmcgYW5kIG90aGVyIHJ1bi0tdGltZSBlcnJvcnMgaXQgaXMgaW1wb3J0YW50IHRvIHJlZ2lzdGVyIHRoZSBjaXBoZXJzLCBoYXNoZXMgYW5kIFBSTkdzIHlvdSBpbnRlbmQgdG8gdXNlIAorYmVmb3JlIHlvdSB0cnkgdG8gdXNlIHRoZW0uICBUaGlzIGluY2x1ZGVzIGFueSBmdW5jdGlvbiB3aGljaCB3b3VsZCB1c2UgYW4gYWxnb3JpdGhtIGluZGlyZWN0bHkgdGhyb3VnaCBhIGRlc2NyaXB0b3IgdGFibGUuCisKK0EgbmVhdCBib251cyB0byB0aGUgcmVnaXN0cnkgc3lzdGVtIGlzIHRoYXQgeW91IGNhbiBhZGQgZXh0ZXJuYWwgYWxnb3JpdGhtcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgbGlicmFyeSB3aXRob3V0IAoraGF2aW5nIHRvIGhhY2sgdGhlIGxpYnJhcnkuICBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSBhIGhhcmR3YXJlIHNwZWNpZmljIFBSTkcgb24geW91ciBzeXN0ZW0uICBZb3UgY291bGQgZWFzaWx5IAord3JpdGUgdGhlIGZldyBmdW5jdGlvbnMgcmVxdWlyZWQgcGx1cyBhIGRlc2NyaXB0b3IuICBBZnRlciByZWdpc3RlcmluZyB5b3VyIFBSTkcsIGFsbCBvZiB0aGUgbGlicmFyeSBmdW5jdGlvbnMgdGhhdCAKK25lZWQgYSBQUk5HIGNhbiBpbnN0YW50bHkgdGFrZSBhZHZhbnRhZ2Ugb2YgaXQuICBUaGUgc2FtZSBhcHBsaWVzIGZvciBjaXBoZXJzLCBoYXNoZXMsIGFuZCBiaWdudW0gbWF0aCByb3V0aW5lcy4KKworXG15c2VjdGlvbntLZXkgU2l6ZXN9CisKK1xzdWJzZWN0aW9ue1N5bW1ldHJpYyBDaXBoZXJzfQorRm9yIHN5bW1ldHJpYyBjaXBoZXJzLCB1c2UgYXMgbGFyZ2UgYXMgb2YgYSBrZXkgYXMgcG9zc2libGUuICBGb3IgdGhlIG1vc3QgcGFydCBcdGV4dGl0e2JpdHMgYXJlIGNoZWFwfSBzbyB1c2luZyBhIDI1Ni0tYml0IGtleQoraXMgbm90IGEgaGFyZCB0aGluZyB0byBkby4gIEFzIGEgZ29vZCBydWxlIG9mIHRodW1iIGRvIG5vdCB1c2UgYSBrZXkgc21hbGxlciB0aGFuIDEyOCBiaXRzLgorCitcc3Vic2VjdGlvbntBc3ltbWV0cmljIENpcGhlcnN9CitUaGUgZm9sbG93aW5nIGNoYXJ0IGdpdmVzIHRoZSB3b3JrIGZhY3RvciBmb3Igc29sdmluZyBhIERIL1JTQSBwdWJsaWMga2V5IHVzaW5nIHRoZSBORlMuICBUaGUgd29yayBmYWN0b3IgZm9yIGEga2V5IG9mIG9yZGVyCiskbiQgaXMgZXN0aW1hdGVkIHRvIGJlCitcYmVnaW57ZXF1YXRpb259CitlXnsxLjkyMyBcY2RvdCBsbihuKV57MSBcb3ZlciAzfSBcY2RvdCBsbihsbihuKSleezIgXG92ZXIgM319IAorXGVuZHtlcXVhdGlvbn0KKworTm90ZSB0aGF0ICRuJCBpcyBub3QgdGhlIGJpdC1sZW5ndGggYnV0IHRoZSBtYWduaXR1ZGUuICBGb3IgZXhhbXBsZSwgZm9yIGEgMTAyNC1iaXQga2V5ICRuID0gMl57MTAyNH0kLiAgVGhlIHdvcmsgcmVxdWlyZWQgCitpczoKK1xiZWdpbntmaWd1cmV9W2hlcmVdCitcYmVnaW57Y2VudGVyfQorXGJlZ2lue3RhYnVsYXJ9e3xjfGN8fQorICAgIFxobGluZSBSU0EvREggS2V5IFNpemUgKGJpdHMpICYgV29yayBGYWN0b3IgKCRsb2dfMiQpIFxcCisgICAgXGhsaW5lIDUxMiAmIDYzLjkyIFxcCisgICAgXGhsaW5lIDc2OCAmIDc2LjUwIFxcCisgICAgXGhsaW5lIDEwMjQgJiA4Ni43NiBcXAorICAgIFxobGluZSAxNTM2ICYgMTAzLjM3IFxcCisgICAgXGhsaW5lIDIwNDggJiAxMTYuODggXFwKKyAgICBcaGxpbmUgMjU2MCAmIDEyOC40NyBcXAorICAgIFxobGluZSAzMDcyICYgMTM4LjczIFxcCisgICAgXGhsaW5lIDQwOTYgJiAxNTYuNDkgXFwKKyAgICBcaGxpbmUgCitcZW5ke3RhYnVsYXJ9CitcZW5ke2NlbnRlcn0KK1xjYXB0aW9ue1JTQS9ESCBLZXkgU3RyZW5ndGh9CitcZW5ke2ZpZ3VyZX0KKworVGhlIHdvcmsgZmFjdG9yIGZvciBFQ0Mga2V5cyBpcyBtdWNoIGhpZ2hlciBzaW5jZSB0aGUgYmVzdCBhdHRhY2sgaXMgc3RpbGwgZnVsbHkgZXhwb25lbnRpYWwuICBHaXZlbiBhIGtleSBvZiBtYWduaXR1ZGUKKyRuJCBpdCByZXF1aXJlcyAkXHNxcnQgbiQgd29yay4gIFRoZSBmb2xsb3dpbmcgdGFibGUgc3VtbWFyaXplcyB0aGUgd29yayByZXF1aXJlZDoKK1xiZWdpbntmaWd1cmV9W2hlcmVdCitcYmVnaW57Y2VudGVyfQorXGJlZ2lue3RhYnVsYXJ9e3xjfGN8fQorICAgIFxobGluZSBFQ0MgS2V5IFNpemUgKGJpdHMpICYgV29yayBGYWN0b3IgKCRsb2dfMiQpIFxcCisgICAgXGhsaW5lIDExMiAmIDU2IFxcCisgICAgXGhsaW5lIDEyOCAmIDY0IFxcCisgICAgXGhsaW5lIDE2MCAmIDgwIFxcCisgICAgXGhsaW5lIDE5MiAmIDk2ICBcXAorICAgIFxobGluZSAyMjQgJiAxMTIgXFwKKyAgICBcaGxpbmUgMjU2ICYgMTI4IFxcCisgICAgXGhsaW5lIDM4NCAmIDE5MiBcXAorICAgIFxobGluZSA1MjEgJiAyNjAuNSBcXAorICAgIFxobGluZQorXGVuZHt0YWJ1bGFyfQorXGVuZHtjZW50ZXJ9CitcY2FwdGlvbntFQ0MgS2V5IFN0cmVuZ3RofQorXGVuZHtmaWd1cmV9CisKK1VzaW5nIHRoZSBhYm92ZSB0YWJsZXMgdGhlIGZvbGxvd2luZyBzdWdnZXN0aW9ucyBmb3Iga2V5IHNpemVzIHNlZW1zIGFwcHJvcHJpYXRlOgorXGJlZ2lue2NlbnRlcn0KK1xiZWdpbnt0YWJ1bGFyfXt8Y3xjfGN8fQorICAgIFxobGluZSBTZWN1cml0eSBHb2FsICYgUlNBL0RIIEtleSBTaXplIChiaXRzKSAmIEVDQyBLZXkgU2l6ZSAoYml0cykgXFwKKyAgICBcaGxpbmUgTmVhciB0ZXJtICAgJiAxMDI0ICYgMTYwIFxcCisgICAgXGhsaW5lIFNob3J0IHRlcm0gICYgMTUzNiAmIDE5MiBcXAorICAgIFxobGluZSBMb25nIFRlcm0gICAmIDI1NjAgJiAzODQgXFwKKyAgICBcaGxpbmUgCitcZW5ke3RhYnVsYXJ9CitcZW5ke2NlbnRlcn0KKworXG15c2VjdGlvbntUaHJlYWQgU2FmZXR5fQorVGhlIGxpYnJhcnkgaXMgbm90IGZ1bGx5IHRocmVhZCBzYWZlIGJ1dCBzZXZlcmFsIHNpbXBsZSBwcmVjYXV0aW9ucyBjYW4gYmUgdGFrZW4gdG8gYXZvaWQgYW55IHByb2JsZW1zLiAgVGhlIHJlZ2lzdHJ5IGZ1bmN0aW9ucworc3VjaCBhcyByZWdpc3RlclxfY2lwaGVyKCkgYXJlIG5vdCB0aHJlYWQgc2FmZSBubyBtYXR0ZXIgd2hhdCB5b3UgZG8uICBJdCBpcyBiZXN0IHRvIGNhbGwgdGhlbSBmcm9tIHlvdXIgcHJvZ3JhbXMgaW5pdGlhbGl6YXRpb24KK2NvZGUgYmVmb3JlIHRocmVhZHMgYXJlIGluaXRpYXRlZC4KKworVGhlIHJlc3Qgb2YgdGhlIGNvZGUgdXNlcyBzdGF0ZSB2YXJpYWJsZXMgeW91IG11c3QgcGFzcyBpdCBzdWNoIGFzIGhhc2hcX3N0YXRlLCBobWFjXF9zdGF0ZSwgZXRjLiAgVGhpcyBtZWFucyB0aGF0IGlmIGVhY2gKK3RocmVhZCBoYXMgaXRzIG93biBzdGF0ZSB2YXJpYWJsZXMgdGhlbiB0aGV5IHdpbGwgbm90IGFmZmVjdCBlYWNoIG90aGVyLCBhbmQgYXJlIGZ1bGx5IHRocmVhZCBzYWZlLiAgVGhpcyBpcyBmYWlybHkgc2ltcGxlIHdpdGggc3ltbWV0cmljIGNpcGhlcnMKK2FuZCBoYXNoZXMuICAKKworXGluZGV4e0xUQ1xfUFRIUkVBRH0KK1RoZSBvbmx5IHN0aWNreSBpc3N1ZSBpcyBhIHNoYXJlZCBQUk5HIHdoaWNoIGNhbiBiZSBhbGxldmlhdGVkIHdpdGggdGhlIGNhcmVmdWwgdXNlIG9mIG11dGV4IGRldmljZXMuICBEZWZpbmluZyBMVENcX1BUSFJFQUQgZm9yIGluc3RhbmNlLCBlbmFibGVzCitwdGhyZWFkcyBiYXNlZCBtdXRleCBsb2NraW5nIGluIHZhcmlvdXMgcm91dGluZXMgc3VjaCBhcyB0aGUgWWFycm93IGFuZCBGb3J0dW5hIFBSTkdzLCB0aGUgZml4ZWQgcG9pbnQgRUNDIG11bHRpcGxpZXIsIGFuZCBvdGhlciByb3V0aW5lcy4KKworXGNoYXB0ZXJ7Q29uZmlndXJpbmcgYW5kIEJ1aWxkaW5nIHRoZSBMaWJyYXJ5fQorXG15c2VjdGlvbntJbnRyb2R1Y3Rpb259CitUaGUgbGlicmFyeSBpcyBmYWlybHkgZmxleGlibGUgYWJvdXQgaG93IGl0IGNhbiBiZSBidWlsdCwgdXNlZCwgYW5kIGdlbmVyYWxseSBkaXN0cmlidXRlZC4gIEFkZGl0aW9ucyBhcmUgYmVpbmcgbWFkZSB3aXRoCitlYWNoIG5ldyByZWxlYXNlIHRoYXQgd2lsbCBtYWtlIHRoZSBsaWJyYXJ5IGV2ZW4gbW9yZSBmbGV4aWJsZS4gIEVhY2ggb2YgdGhlIGNsYXNzZXMgb2YgZnVuY3Rpb25zIGNhbiBiZSBkaXNhYmxlZCBkdXJpbmcKK3RoZSBidWlsZCBwcm9jZXNzIHRvIG1ha2UgYSBzbWFsbGVyIGxpYnJhcnkuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNoYXJlZCBsaWJyYXJpZXMuCisKK0FzIG9mIHYxLjA2IG9mIHRoZSBsaWJyYXJ5LCB0aGUgYnVpbGQgcHJvY2VzcyBoYXMgYmVlbiBtb3ZlZCB0byB0d28gc3RlcHMgZm9yIHRoZSB0eXBpY2FsIExpYlRvbUNyeXB0IGFwcGxpY2F0aW9uLiAgVGhpcyBpcyBiZWNhdXNlCitMaWJUb21DcnlwdCBubyBsb25nZXIgcHJvdmlkZXMgYSBtYXRoIEFQSSBvbiBpdHMgb3duIGFuZCByZWxpZXMgb24gdGhpcmQgcGFydHkgbGlicmFyaWVzIChzdWNoIGFzIExpYlRvbU1hdGgsIEdudU1QLCBvciBUb21zRmFzdE1hdGgpLgorCitUaGUgYnVpbGQgcHJvY2VzcyBub3cgY29uc2lzdHMgb2YgaW5zdGFsbGluZyBhIG1hdGggbGlicmFyeSBmaXJzdCwgYW5kIHRoZW4gYnVpbGRpbmcgYW5kIGluc3RhbGxpbmcgTGliVG9tQ3J5cHQgd2l0aCBhIG1hdGggbGlicmFyeQorY29uZmlndXJlZC4gIE5vdGUgdGhhdCBMaWJUb21DcnlwdCBjYW4gYmUgYnVpbHQgd2l0aCBubyBpbnRlcm5hbCBtYXRoIGRlc2NyaXB0b3JzLiAgVGhpcyBtZWFucyB0aGF0IG9uZSBtdXN0IGJlIHByb3ZpZGVkIGF0IGVpdGhlcgorYnVpbGQsIG9yIHJ1biB0aW1lIGZvciB0aGUgYXBwbGljYXRpb24uICBMaWJUb21DcnlwdCBjb21lcyB3aXRoIHRocmVlIG1hdGggZGVzY3JpcHRvcnMgdGhhdCBwcm92aWRlIGEgc3RhbmRhcmQgaW50ZXJmYWNlIHRvIG1hdGggCitsaWJyYXJpZXMuCisKK1xteXNlY3Rpb257TWFrZWZpbGUgdmFyaWFibGVzfQorCitBbGwgR05VIGRyaXZlbiBtYWtlZmlsZXMgKGluY2x1ZGluZyB0aGUgbWFrZWZpbGUgZm9yIElDQykgdXNlIGEgc2V0IG9mIGNvbW1vbiB2YXJpYWJsZXMgdG8gY29udHJvbCB0aGUgYnVpbGQgYW5kIGluc3RhbGwgcHJvY2Vzcy4gIE1vc3Qgb2YgdGhlIAorc2V0dGluZ3MgY2FuIGJlIG92ZXJ3cml0dGVuIGZyb20gdGhlIGNvbW1hbmQgbGluZSB3aGljaCBtYWtlcyBjdXN0b20gaW5zdGFsbGF0aW9uIGEgYnJlZXplLgorCitcaW5kZXh7TUFLRX1caW5kZXh7Q0N9XGluZGV4e0FSfQorXHN1YnNlY3Rpb257TUFLRSwgQ0MgYW5kIEFSfQorVGhlIE1BS0UsIENDIGFuZCBBUiBmbGFncyBjYW4gYWxsIGJlIG92ZXJ3cml0dGVuLiAgVGhleSBkZWZhdWx0IHRvIFx0ZXh0aXR7bWFrZX0sIFx0ZXh0aXR7XCRDQ30gYW5kIFx0ZXh0aXR7XCRBUn0gcmVzcGVjdGl2ZWx5LiAgCitDaGFuZ2luZyBNQUtFIGFsbG93cyB5b3UgdG8gY2hhbmdlIHdoYXQgcHJvZ3JhbSB3aWxsIGJlIGludm9rZWQgdG8gaGFuZGxlIHN1Yi0tZGlyZWN0b3JpZXMuIEZvciBleGFtcGxlLCB0aGlzCisKK1xiZWdpbnt2ZXJiYXRpbX0KK01BS0U9Z21ha2UgZ21ha2UgaW5zdGFsbAorXGVuZHt2ZXJiYXRpbX0KKworXGJlZ2lue2ZsdXNobGVmdH0gd2lsbCBidWlsZCBhbmQgaW5zdGFsbCB0aGUgbGlicmFyaWVzIHdpdGggdGhlIFx0ZXh0aXR7Z21ha2V9IHRvb2wuICBTaW1pbGFybHksIFxlbmR7Zmx1c2hsZWZ0fQorCitcYmVnaW57dmVyYmF0aW19CitDQz1hcm0tZ2NjIEFSPWFybS1hciBtYWtlIAorXGVuZHt2ZXJiYXRpbX0KKworXGJlZ2lue2ZsdXNobGVmdH0gd2lsbCBidWlsZCB0aGUgbGlicmFyeSB1c2luZyBcdGV4dGl0e2FybS0tZ2NjfSBhcyB0aGUgY29tcGlsZXIgYW5kIFx0ZXh0aXR7YXJtLS1hcn0gYXMgdGhlIGFyY2hpdmVyLiBcZW5ke2ZsdXNobGVmdH0KKworXHN1YnNlY3Rpb257SUdOT1JFXF9TUEVFRH0KK1xpbmRleHtJR05PUkVcX1NQRUVEfQorV2hlbiBcdGV4dGJme0lHTk9SRVxfU1BFRUR9IGhhcyBiZWVuIGRlZmluZWQgdGhlIGRlZmF1bHQgb3B0aW1pemF0aW9uIGZsYWdzIGZvciBDRkxBR1Mgd2lsbCBiZSBkaXNhYmxlZCB3aGljaCBhbGxvd3MgdGhlIGRldmVsb3BlciB0byBzcGVjaWZ5IG5ldworQ0ZMQUdTIG9uIHRoZSBjb21tYW5kIGxpbmUuICBFLmcuIHRvIGFkZCBkZWJ1Z2dpbmcKKworXGJlZ2lue3ZlcmJhdGltfQorQ0ZMQUdTPSItZzMiIG1ha2UgSUdOT1JFX1NQRUVEPTEKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCB0dXJuIG9mZiBvcHRpbWl6YXRpb25zIGFuZCBhZGQgXHRleHRpdHstZzN9IHRvIHRoZSBDRkxBR1Mgd2hpY2ggZW5hYmxlcyBkZWJ1Z2dpbmcuICAKKworXHN1YnNlY3Rpb257TElCTkFNRSBhbmQgTElCTkFNRVxfU30KK1xpbmRleHtMSUJOQU1FfSBcaW5kZXh7TElCTkFNRVxfU30KK1x0ZXh0YmZ7TElCTkFNRX0gaXMgdGhlIG5hbWUgb2YgdGhlIG91dHB1dCBsaWJyYXJ5IChhcmNoaXZlKSB0byBjcmVhdGUuICBJdCBkZWZhdWx0cyB0byBcdGV4dGl0e2xpYnRvbWNyeXB0LmF9IGZvciBzdGF0aWMgYnVpbGRzIGFuZCBcdGV4dGl0e2xpYnRvbWNyeXB0LmxhfSBmb3IKK3NoYXJlZC4gIFRoZSBcdGV4dGJme0xJQk5BTUVcX1N9IHZhcmlhYmxlIGlzIHRoZSBzdGF0aWMgbmFtZSB3aGlsZSBkb2luZyBzaGFyZWQgYnVpbGRzLiAgSWRlYWxseSB0aGV5IHNob3VsZCBoYXZlIHRoZSBzYW1lIHByZWZpeCBidXQgZG9uJ3QgaGF2ZSB0by4KKworXGluZGV4e0xJQlRFU1R9IFxpbmRleHtMSUJURVNUXF9TfQorU2ltaWxhcmx5IFx0ZXh0YmZ7TElCVEVTVH0gYW5kIFx0ZXh0YmZ7TElCVEVTVFxfU30gYXJlIHRoZSBuYW1lcyBmb3IgdGhlIHByb2ZpbGluZyBhbmQgdGVzdGluZyBsaWJyYXJ5LiAgVGhlIGRlZmF1bHQgaXMgXHRleHRpdHtsaWJ0b21jcnlwdFxfcHJvZi5hfSBmb3IgCitzdGF0aWMgYW5kIFx0ZXh0aXR7bGlidG9tY3J5cHRcX3Byb2YubGF9IGZvciBzaGFyZWQuCisKK1xzdWJzZWN0aW9ue0luc3RhbGxhdGlvbiBEaXJlY3Rvcmllc30KK1xpbmRleHtERVNURElSfSBcaW5kZXh7TElCUEFUSH0gXGluZGV4e0lOQ1BBVEh9IFxpbmRleHtEQVRBRElSfQorXHRleHRiZntERVNURElSfSBpcyB0aGUgcHJlZml4IGZvciB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzLiAgSXQgZGVmYXVsdHMgdG8gYW4gZW1wdHkgc3RyaW5nLiAgXHRleHRiZntMSUJQQVRIfSBpcyB0aGUgcHJlZml4IGZvciB0aGUgbGlicmFyeQorZGlyZWN0b3J5IHdoaWNoIGRlZmF1bHRzIHRvIFx0ZXh0aXR7L3Vzci9saWJ9LiAgXHRleHRiZntJTkNQQVRIfSBpcyB0aGUgcHJlZml4IGZvciB0aGUgaGVhZGVyIGZpbGUgZGlyZWN0b3J5IHdoaWNoIGRlZmF1bHRzIHRvIFx0ZXh0aXR7L3Vzci9pbmNsdWRlfS4gIAorXHRleHRiZntEQVRBRElSfSBpcyB0aGUgcHJlZml4IGZvciB0aGUgZGF0YSAoZG9jdW1lbnRhdGlvbikgZGlyZWN0b3J5IHdoaWNoIGRlZmF1bHRzIHRvIFx0ZXh0aXR7L3Vzci9zaGFyZS9kb2MvbGlidG9tY3J5cHQvcGRmfS4KKworQWxsIGZvdXIgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGN1c3RvbSBpbnN0YWxsIGxvY2F0aW9ucyBkZXBlbmRpbmcgb24gdGhlIG5hdHVyZSBvZiB0aGUgT1MgYW5kIGZpbGUgc3lzdGVtIGluIHVzZS4KKworXGJlZ2lue3ZlcmJhdGltfQorbWFrZSBMSUJQQVRIPS9ob21lL3RvbS9wcm9qZWN0L2xpYiBJTkNQQVRIPS9ob21lL3RvbS9wcm9qZWN0L2luY2x1ZGUgXAorICAgICBEQVRBUEFUSD0vaG9tZS90b20vcHJvamVjdC9kb2NzIGluc3RhbGwKK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBidWlsZCB0aGUgbGlicmFyeSBhbmQgaW5zdGFsbCBpdCB0byB0aGUgZGlyZWN0b3JpZXMgdW5kZXIgXHRleHRpdHsvaG9tZS90b20vcHJvamVjdC99LiAgZS5nLgorCitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CisvaG9tZS90b20vcHJvamVjdC86Cit0b3RhbCAxCitkcnd4ci14ci14ICAyIHRvbSB1c2VycyAgODAgSnVsIDMwIDE2OjAyIGRvY3MKK2Ryd3hyLXhyLXggIDIgdG9tIHVzZXJzIDUyOCBKdWwgMzAgMTY6MDIgaW5jbHVkZQorZHJ3eHIteHIteCAgMiB0b20gdXNlcnMgIDgwIEp1bCAzMCAxNjowMiBsaWIKKworL2hvbWUvdG9tL3Byb2plY3QvZG9jczoKK3RvdGFsIDQ1MgorLXJ3eHIteHIteCAgMSB0b20gdXNlcnMgNDU5MDA5IEp1bCAzMCAxNjowMiBjcnlwdC5wZGYKKworL2hvbWUvdG9tL3Byb2plY3QvaW5jbHVkZToKK3RvdGFsIDEzMgorLXJ3eHIteHIteCAgMSB0b20gdXNlcnMgIDI0ODIgSnVsIDMwIDE2OjAyIHRvbWNyeXB0LmgKKy1yd3hyLXhyLXggIDEgdG9tIHVzZXJzICAgNzAyIEp1bCAzMCAxNjowMiB0b21jcnlwdF9hcmdjaGsuaAorLXJ3eHIteHIteCAgMSB0b20gdXNlcnMgIDI5NDUgSnVsIDMwIDE2OjAyIHRvbWNyeXB0X2NmZy5oCistcnd4ci14ci14ICAxIHRvbSB1c2VycyAyMjc2MyBKdWwgMzAgMTY6MDIgdG9tY3J5cHRfY2lwaGVyLmgKKy1yd3hyLXhyLXggIDEgdG9tIHVzZXJzICA1MTc0IEp1bCAzMCAxNjowMiB0b21jcnlwdF9jdXN0b20uaAorLXJ3eHIteHIteCAgMSB0b20gdXNlcnMgMTEzMTQgSnVsIDMwIDE2OjAyIHRvbWNyeXB0X2hhc2guaAorLXJ3eHIteHIteCAgMSB0b20gdXNlcnMgMTE1NzEgSnVsIDMwIDE2OjAyIHRvbWNyeXB0X21hYy5oCistcnd4ci14ci14ICAxIHRvbSB1c2VycyAxMzYxNCBKdWwgMzAgMTY6MDIgdG9tY3J5cHRfbWFjcm9zLmgKKy1yd3hyLXhyLXggIDEgdG9tIHVzZXJzIDE0NzE0IEp1bCAzMCAxNjowMiB0b21jcnlwdF9tYXRoLmgKKy1yd3hyLXhyLXggIDEgdG9tIHVzZXJzICAgNjMyIEp1bCAzMCAxNjowMiB0b21jcnlwdF9taXNjLmgKKy1yd3hyLXhyLXggIDEgdG9tIHVzZXJzIDEwOTM0IEp1bCAzMCAxNjowMiB0b21jcnlwdF9way5oCistcnd4ci14ci14ICAxIHRvbSB1c2VycyAgMjYzNCBKdWwgMzAgMTY6MDIgdG9tY3J5cHRfcGtjcy5oCistcnd4ci14ci14ICAxIHRvbSB1c2VycyAgNzA2NyBKdWwgMzAgMTY6MDIgdG9tY3J5cHRfcHJuZy5oCistcnd4ci14ci14ICAxIHRvbSB1c2VycyAgMTQ2NyBKdWwgMzAgMTY6MDIgdG9tY3J5cHRfdGVzdC5oCisKKy9ob21lL3RvbS9wcm9qZWN0L2xpYjoKK3RvdGFsIDEwNzMKKy1yd3hyLXhyLXggIDEgdG9tIHVzZXJzIDEwOTYyODQgSnVsIDMwIDE2OjAyIGxpYnRvbWNyeXB0LmEKK1xlbmR7dmVyYmF0aW19CitcZW5ke3NtYWxsfQorCitcbXlzZWN0aW9ue0V4dHJhIGxpYnJhcmllc30KK1xpbmRleHtFWFRSQUxJQlN9CitcdGV4dGJme0VYVFJBTElCU30gc3BlY2lmaWVzIGFueSBleHRyYSBsaWJyYXJpZXMgcmVxdWlyZWQgdG8gbGluayB0aGUgdGVzdCBwcm9ncmFtcyBhbmQgc2hhcmVkIGxpYnJhcmllcy4gIFRoZXkgYXJlIHNwZWNpZmllZCBpbiB0aGUgbm90YXRpb24KK3RoYXQgR0NDIGV4cGVjdHMgZm9yIGdsb2JhbCBhcmNoaXZlcy4KKworXGJlZ2lue3ZlcmJhdGltfQorQ0ZMQUdTPSItRFRGTV9ERVNDIC1EVVNFX1RGTSIgRVhUUkFMSUJTPS1sdGZtIG1ha2UgaW5zdGFsbCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0IHRpbWluZworXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGluc3RhbGwgdGhlIGxpYnJhcnkgdXNpbmcgdGhlIFRvbXNGYXN0TWF0aCBsaWJyYXJ5IGFuZCBsaW5rIHRoZSBcdGV4dGl0e2xpYnRmbS5hfSBsaWJyYXJ5IG91dCBvZiB0aGUgZGVmYXVsdCBsaWJyYXJ5IHNlYXJjaCBwYXRoLiAgVGhlIHR3bworZGVmaW5lcyBhcmUgZXhwbGFpbmVkIGJlbG93LiAgWW91IGNhbiBzcGVjaWZ5IG11bHRpcGxlIGFyY2hpdmVzIChzYXkgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCB0d28gbWF0aCBsaWJyYXJpZXMsIG9yIGFkZCBvbiBhZGRpdGlvbmFsIGNvZGUpIHRvIAordGhlIFx0ZXh0YmZ7RVhUUkFMSUJTfSB2YXJpYWJsZSBieSBzZXBhcmF0aW5nIHRoZW0gYnkgYSBzcGFjZS4KKworTm90ZSB0aGF0IFx0ZXh0YmZ7RVhUUkFMSUJTfSBpcyBub3QgcmVxdWlyZWQgaWYgeW91IGFyZSBvbmx5IG1ha2luZyBhbmQgaW5zdGFsbGluZyB0aGUgc3RhdGljIGxpYnJhcnkgYnV0IG5vbmUgb2YgdGhlIHRlc3QgcHJvZ3JhbXMuICAKKworXG15c2VjdGlvbntCdWlsZGluZyBhIFN0YXRpYyBMaWJyYXJ5fQorCitCdWlsZGluZyBhIHN0YXRpYyBsaWJyYXJ5IGlzIGZhaXJseSB0cml2aWFsIGFzIGl0IG9ubHkgcmVxdWlyZXMgb25lIGludm9jYXRpb24gb2YgdGhlIEdOVSBtYWtlIGNvbW1hbmQuICAKKworXGJlZ2lue3ZlcmJhdGltfQorQ0ZMQUdTPSItRFRGTV9ERVNDIiBtYWtlIGluc3RhbGwKK1xlbmR7dmVyYmF0aW19CisKK1RoYXQgd2lsbCBidWlsZCBMaWJUb21DcnlwdCAoaW5jbHVkaW5nIHRoZSBUb21zRmFzdE1hdGggZGVzY3JpcHRvciksIGFuZCBpbnN0YWxsIGl0IGluIHRoZSBkZWZhdWx0IGxvY2F0aW9ucyBpbmRpY2F0ZWQgcHJldmlvdXNseS4gIFlvdSBjYW4gZW5hYmxlIAordGhlIGJ1aWx0LS1pbiBMaWJUb21NYXRoIGRlc2NyaXB0b3IgYXMgd2VsbCAob3IgaW4gcGxhY2Ugb2YgdGhlIFRvbXNGYXN0TWF0aCBkZXNjcmlwdG9yKS4gIFNpbWlsYXJseSwgeW91IGNhbiBidWlsZCB0aGUgbGlicmFyeSB3aXRoIG5vIGJ1aWx0LS1pbiAKK21hdGggZGVzY3JpcHRvcnMuICAKKworXGJlZ2lue3ZlcmJhdGltfQorbWFrZSBpbnN0YWxsCitcZW5ke3ZlcmJhdGltfQorCitJbiB0aGlzIGNhc2UsIG5vIG1hdGggZGVzY3JpcHRvcnMgYXJlIHByZXNlbnQgaW4gdGhlIGxpYnJhcnkgYW5kIHRoZXkgd2lsbCBoYXZlIHRvIGJlIG1hZGUgYXZhaWxhYmxlIGF0IGJ1aWxkIG9yIHJ1biB0aW1lIGJlZm9yZSB5b3UgY2FuIHVzZSBhbnkgb2YgdGhlIAorcHVibGljIGtleSBmdW5jdGlvbnMuICAKKworTm90ZSB0aGF0IGV2ZW4gaWYgeW91IGluY2x1ZGUgdGhlIGJ1aWx0LS1pbiBkZXNjcmlwdG9ycyB5b3UgbXVzdCBsaW5rIGFnYWluc3QgdGhlIHNvdXJjZSBsaWJyYXJ5IGFzIHdlbGwuICAKKworXGJlZ2lue3ZlcmJhdGltfQorZ2NjIC1EVEZNX0RFU0MgbXlwcm9ncmFtLmMgLWx0b21jcnlwdCAtbHRmbSAtbyBteXByb2dyYW0KK1xlbmR7dmVyYmF0aW19CisKK1RoaXMgd2lsbCBjb21waWxlIFx0ZXh0aXR7bXlwcm9ncmFtfSBhbmQgbGluayBpdCBhZ2FpbnN0IHRoZSBMaWJUb21DcnlwdCBsaWJyYXJ5IGFzIHdlbGwgYXMgVG9tc0Zhc3RNYXRoICh3aGljaCBtdXN0IGhhdmUgYmVlbiBwcmV2aW91c2x5IGluc3RhbGxlZCkuICBOb3RlIHRoYXQgCit3ZSBkZWZpbmUgXHRleHRiZntURk1cX0RFU0N9IGZvciBjb21waWxhdGlvbi4gIFRoaXMgaXMgc28gdGhhdCB0aGUgVEZNIGRlc2NyaXB0b3Igc3ltYm9sIHdpbGwgYmUgZGVmaW5lZCBmb3IgdGhlIGNsaWVudCBhcHBsaWNhdGlvbiB0byBtYWtlIHVzZSBvZiB3aXRob3V0IAorZ2l2aW5nIHdhcm5pbmdzLgorCitcbXlzZWN0aW9ue0J1aWxkaW5nIGEgU2hhcmVkIExpYnJhcnl9CisKK0xpYlRvbUNyeXB0IGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgc2hhcmVkIGxpYnJhcnkgdGhyb3VnaCB0aGUgXHRleHRpdHttYWtlZmlsZS5zaGFyZWR9IG1ha2Ugc2NyaXB0LiAgSXQgaXMgc2ltaWxhciB0byB1c2UgYXMgdGhlIHN0YXRpYyBzY3JpcHQgZXhjZXB0Cit0aGF0IHlvdSBcdGV4dGJme211c3R9IHNwZWNpZnkgdGhlIFx0ZXh0YmZ7RVhUUkFMSUJTfSB2YXJpYWJsZSBhdCBpbnN0YWxsIHRpbWUuICAKKworXGJlZ2lue3ZlcmJhdGltfQorQ0ZMQUdTPSItRFRGTV9ERVNDIiBFWFRSQUxJQlM9LWx0Zm0gbWFrZSAtZiBtYWtlZmlsZS5zaGFyZWQgaW5zdGFsbAorXGVuZHt2ZXJiYXRpbX0KKworVGhpcyB3aWxsIGJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBsaWJyYXJ5IGFuZCBsaW5rIHRoZSBzaGFyZWQgb2JqZWN0IGFnYWluc3QgdGhlIFRvbXNGYXN0TWF0aCBsaWJyYXJ5ICh3aGljaCBtdXN0IGJlIGluc3RhbGxlZCBhcyBhIHNoYXJlZCBvYmplY3QgYXMgd2VsbCkuICBUaGUgCitzaGFyZWQgYnVpbGQgcHJvY2VzcyByZXF1aXJlcyBsaWJ0b29sIHRvIGJlIGluc3RhbGxlZC4KKworXG15c2VjdGlvbntIZWFkZXIgQ29uZmlndXJhdGlvbn0KK1RoZSBmaWxlIFx0ZXh0aXR7dG9tY3J5cHRcX2NmZy5ofSBpcyB3aGF0IGxldHMgeW91IGNvbnRyb2wgdmFyaW91cyBoaWdoIGxldmVsIG1hY3JvcyB3aGljaCBjb250cm9sIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGxpYnJhcnkuICBCdWlsZCBvcHRpb25zIGFyZSBhbHNvCitzdG9yZWQgaW4gXHRleHRpdHt0b21jcnlwdFxfY3VzdG9tLmh9IHdoaWNoIGFsbG93IHRoZSBlbmFibGluZyBhbmQgZGlzYWJsaW5nIG9mIHZhcmlvdXMgYWxnb3JpdGhtcy4KKworXHN1YnN1YnNlY3Rpb257QVJHVFlQRX0KK1RoaXMgbGV0cyB5b3UgY29udHJvbCBob3cgdGhlIExUQ1xfQVJHQ0hLIG1hY3JvIHdpbGwgYmVoYXZlLiAgVGhlIG1hY3JvIGlzIHVzZWQgdG8gY2hlY2sgcG9pbnRlcnMgaW5zaWRlIHRoZSBmdW5jdGlvbnMgYWdhaW5zdAorTlVMTC4gIFRoZXJlIGFyZSBmb3VyIHNldHRpbmdzIGZvciBBUkdUWVBFLiAgV2hlbiBzZXQgdG8gMCwgaXQgd2lsbCBoYXZlIHRoZSBkZWZhdWx0IGJlaGF2aW91ciBvZiBwcmludGluZyBhIG1lc3NhZ2UgdG8gCitzdGRlcnIgYW5kIHJhaXNpbmcgYSBTSUdBQlJUIHNpZ25hbC4gIFRoaXMgaXMgcHJvdmlkZWQgc28gYWxsIHBsYXRmb3JtcyB0aGF0IHVzZSBMaWJUb21DcnlwdCBjYW4gaGF2ZSBhbiBlcnJvciB0aGF0IGZ1bmN0aW9ucworc2ltaWxhcmx5LiAgV2hlbiBzZXQgdG8gMSwgaXQgd2lsbCBzaW1wbHkgcGFzcyBvbiB0byB0aGUgYXNzZXJ0KCkgbWFjcm8uICBXaGVuIHNldCB0byAyLCB0aGUgbWFjcm8gd2lsbCBkaXNwbGF5IHRoZSBlcnJvciB0bworc3RkZXJyIHRoZW4gcmV0dXJuIGV4ZWN1dGlvbiB0byB0aGUgY2FsbGVyLiAgVGhpcyBjb3VsZCBsZWFkIHRvIGEgc2VnbWVudGF0aW9uIGZhdWx0IChlLmcuIHdoZW4gYSBwb2ludGVyIGlzIFx0ZXh0YmZ7TlVMTH0pIGJ1dCBpcyB1c2VmdWwKK2lmIHlvdSBoYW5kbGUgc2lnbmFscyBvbiB5b3VyIG93bi4gIFdoZW4gc2V0IHRvIDMsIGl0IHdpbGwgcmVzb2x2ZSB0byBhIGVtcHR5IG1hY3JvIGFuZCBubyBlcnJvciBjaGVja2luZyB3aWxsIGJlIHBlcmZvcm1lZC4gIEZpbmFsbHksIHdoZW4gc2V0Cit0byA0LCBpdCB3aWxsIHJldHVybiBDUllQVFxfSU5WQUxJRFxfQVJHIHRvIHRoZSBjYWxsZXIuICAKKworXHN1YnN1YnNlY3Rpb257RW5kaWFuZXNzfQorVGhlcmUgYXJlIGZpdmUgbWFjcm9zIHJlbGF0ZWQgdG8gZW5kaWFuZXNzIGlzc3Vlcy4gIEZvciBsaXR0bGUgZW5kaWFuIHBsYXRmb3JtcyBkZWZpbmUsIFx0ZXh0YmZ7RU5ESUFOXF9MSVRUTEV9LiAgRm9yIGJpZyBlbmRpYW4KK3BsYXRmb3JtcyBkZWZpbmUgXHRleHRiZntFTkRJQU5cX0JJR30uICBTaW1pbGFybHkgd2hlbiB0aGUgZGVmYXVsdCB3b3JkIHNpemUgb2YgYW4gXHRleHRpdHt1bnNpZ25lZCBsb25nfSBpcyAzMi1iaXRzIGRlZmluZSBcdGV4dGJme0VORElBTlxfMzJCSVRXT1JEfQorb3IgZGVmaW5lIFx0ZXh0YmZ7RU5ESUFOXF82NEJJVFdPUkR9IHdoZW4gaXRzIDY0LWJpdHMuICBJZiB5b3UgZG8gbm90IGRlZmluZSBhbnkgb2YgdGhlbSB0aGUgbGlicmFyeSB3aWxsIGF1dG9tYXRpY2FsbHkgdXNlIFx0ZXh0YmZ7RU5ESUFOXF9ORVVUUkFMfQord2hpY2ggd2lsbCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMuCisKK0N1cnJlbnRseSBMaWJUb21DcnlwdCB3aWxsIGRldGVjdCB4ODYtMzIsIHg4Ni02NCwgTUlQUyBSNTkwMCwgU1BBUkMgYW5kIFNQQVJDNjQgcnVubmluZyBHQ0MgYXMgd2VsbCBhcyB4ODYtMzIgcnVubmluZyBNU1ZDLiAgCisKK1xteXNlY3Rpb257VGhlIENvbmZpZ3VyZSBTY3JpcHR9CitUaGVyZSBhcmUgYWxzbyBvcHRpb25zIHlvdSBjYW4gc3BlY2lmeSBmcm9tIHRoZSBcdGV4dGl0e3RvbWNyeXB0XF9jdXN0b20uaH0gaGVhZGVyIGZpbGUuCisKK1xzdWJzZWN0aW9ue1ggbWVtb3J5IHJvdXRpbmVzfQorXGluZGV4e1hNQUxMT0N9XGluZGV4e1hDQUxMT0N9XGluZGV4e1hSRUFMTE9DfVxpbmRleHtYRlJFRX0KK0F0IHRoZSB0b3Agb2YgdG9tY3J5cHRcX2N1c3RvbS5oIGFyZSBhIHNlcmllcyBvZiBtYWNyb3MgZGVub3RlZCBhcyBYTUFMTE9DLCBYQ0FMTE9DLCBYUkVBTExPQywgWEZSRUUsIGFuZCBzbyBvbi4gIFRoZXkgcmVzb2x2ZSB0byAKK3RoZSBuYW1lIG9mIHRoZSByZXNwZWN0aXZlIGZ1bmN0aW9ucyBmcm9tIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgYnkgZGVmYXVsdC4gIFRoaXMgbGV0cyB5b3Ugc3Vic3RpdHV0ZSBpbiB5b3VyIG93biBtZW1vcnkgcm91dGluZXMuICAKK0lmIHlvdSBzdWJzdGl0dXRlIGluIHlvdXIgb3duIGZ1bmN0aW9ucyB0aGV5IG11c3QgYmVoYXZlIGxpa2UgdGhlIHN0YW5kYXJkIEMgbGlicmFyeSBmdW5jdGlvbnMgaW4gdGVybXMgb2Ygd2hhdCB0aGV5IGV4cGVjdCBhcyBpbnB1dCBhbmQgCitvdXRwdXQuCisKK1RoZXNlIG1hY3JvcyBhcmUgaGFuZHkgZm9yIHdvcmtpbmcgd2l0aCBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IGhhdmUgYSBzdGFuZGFyZCBDIGxpYnJhcnkuICBGb3IgaW5zdGFuY2UsIHRoZSBPTFBDXGZvb3Rub3Rle1NlZSBodHRwOi8vZGV2LmxhcHRvcC5vcmcvZ2l0P3A9Ymlvcy1jcnlwdG87YT1zdW1tYXJ5fQorYmlvcyBjb2RlIHVzZXMgdGhlc2UgbWFjcm9zIHRvIHJlZGlyZWN0IHRvIHZlcnkgY29tcGFjdCBoZWFwIGFuZCBzdHJpbmcgb3BlcmF0aW9ucy4KKworXHN1YnNlY3Rpb257WCBjbG9jayByb3V0aW5lc30KK1RoZSBybmdcX2dldFxfYnl0ZXMoKSBmdW5jdGlvbiBjYW4gY2FsbCBhIGZ1bmN0aW9uIHRoYXQgcmVxdWlyZXMgdGhlIGNsb2NrKCkgZnVuY3Rpb24uICBUaGVzZSBtYWNyb3MgbGV0IHlvdSBvdmVycmlkZQordGhlIGRlZmF1bHQgY2xvY2soKSB1c2VkIHdpdGggYSByZXBsYWNlbWVudC4gIEJ5IGRlZmF1bHQgdGhlIHN0YW5kYXJkIEMgbGlicmFyeSBjbG9jaygpIGZ1bmN0aW9uIGlzIHVzZWQuCisKK1xzdWJzZWN0aW9ue0xUQ1xfTk9cX0ZJTEV9CitEdXJpbmcgdGhlIGJ1aWxkIGlmIExUQ1xfTk9cX0ZJTEUgaXMgZGVmaW5lZCB0aGVuIGFueSBmdW5jdGlvbiBpbiB0aGUgbGlicmFyeSB0aGF0IHVzZXMgZmlsZSBJL08gd2lsbCBub3QgY2FsbCB0aGUgZmlsZSBJL08gCitmdW5jdGlvbnMgYW5kIGluc3RlYWQgc2ltcGx5IHJldHVybiBDUllQVFxfTk9QLiAgVGhpcyBzaG91bGQgaGVscCByZXNvbHZlIGFueSBsaW5rZXIgZXJyb3JzIHN0ZW1taW5nIGZyb20gYSBsYWNrIG9mCitmaWxlIEkvTyBvbiBlbWJlZGRlZCBwbGF0Zm9ybXMuCisKK1xzdWJzZWN0aW9ue0xUQ1xfQ0xFQU5cX1NUQUNLfQorV2hlbiB0aGlzIGZ1bmN0aW9ucyBpcyBkZWZpbmVkIHRoZSBmdW5jdGlvbnMgdGhhdCBzdG9yZSBrZXkgbWF0ZXJpYWwgb24gdGhlIHN0YWNrIHdpbGwgY2xlYW4gdXAgYWZ0ZXJ3YXJkcy4gIAorQXNzdW1lcyB0aGF0IHlvdSBoYXZlIG5vIG1lbW9yeSBwYWdpbmcgd2l0aCB0aGUgc3RhY2suCisKK1xzdWJzZWN0aW9ue0xUQ1xfVEVTVH0KK1doZW4gdGhpcyBoYXMgYmVlbiBkZWZpbmVkIHRoZSB2YXJpb3VzIHNlbGYtLXRlc3QgZnVuY3Rpb25zIChmb3IgY2lwaGVycywgaGFzaGVzLCBwcm5ncywgZXRjKSBhcmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiAgVGhpcyBpcyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLgorSWYgTFRDXF9OT1xfVEVTVCBoYXMgYmVlbiBkZWZpbmVkLCB0aGUgdGVzdGluZyByb3V0aW5lcyB3aWxsIGJlIGNvbXBhY3RlZCBhbmQgb25seSByZXR1cm4gQ1JZUFRcX05PUC4KKworXHN1YnNlY3Rpb257TFRDXF9OT1xfRkFTVH0KK1doZW4gdGhpcyBoYXMgYmVlbiBkZWZpbmVkIHRoZSBsaWJyYXJ5IHdpbGwgbm90IHVzZSBmYXN0ZXIgd29yZCBvcmllbnRlZCBvcGVyYXRpb25zLiAgQnkgZGVmYXVsdCwgdGhleSBhcmUgb25seSBlbmFibGVkIGZvciBwbGF0Zm9ybXMKK3doaWNoIGNhbiBiZSBhdXRvLWRldGVjdGVkLiAgVGhpcyBtYWNybyBlbnN1cmVzIHRoYXQgdGhleSBhcmUgbmV2ZXIgZW5hYmxlZC4KKworXHN1YnNlY3Rpb257TFRDXF9GQVNUfQorVGhpcyBtb2RlIChhdXRvLWRldGVjdGVkIHdpdGggeDg2XF8zMix4ODZcXzY0IHBsYXRmb3JtcyB3aXRoIEdDQyBvciBNU1ZDKSBjb25maWd1cmVzIHZhcmlvdXMgcm91dGluZXMgc3VjaCBhcyBjdHJcX2VuY3J5cHQoKSBvciAKK2NiY1xfZW5jcnlwdCgpIHRoYXQgaXQgY2FuIHNhZmVseSBYT1IgbXVsdGlwbGUgb2N0ZXRzIGluIG9uZSBzdGVwIGJ5IHVzaW5nIGEgbGFyZ2VyIGRhdGEgdHlwZS4gIFRoaXMgaGFzIHRoZSBiZW5lZml0IG9mIAorY3V0dGluZyBkb3duIHRoZSBvdmVyaGVhZCBvZiB0aGUgcmVzcGVjdGl2ZSBmdW5jdGlvbnMuICAKKworVGhpcyBtb2RlIGRvZXMgaGF2ZSBvbmUgZG93bnNpZGUuICBJdCBjYW4gY2F1c2UgdW5hbGlnbmVkIHJlYWRzIGZyb20gbWVtb3J5IGlmIHlvdSBhcmUgbm90IGNhcmVmdWwgd2l0aCB0aGUgZnVuY3Rpb25zLiAgVGhpcyBpcyB3aHkKK2l0IGhhcyBiZWVuIGVuYWJsZWQgYnkgZGVmYXVsdCBvbmx5IGZvciB0aGUgeDg2IGNsYXNzIG9mIHByb2Nlc3NvcnMgd2hlcmUgdW5hbGlnbmVkIGFjY2Vzc2VzIGFyZSBhbGxvd2VkLiAgVGVjaG5pY2FsbHkgTFRDXF9GQVNUCitpcyBub3QgXHRleHRpdHtwb3J0YWJsZX0gc2luY2UgdW5hbGlnbmVkIGFjY2Vzc2VzIGFyZSBub3QgY292ZXJlZCBieSB0aGUgSVNPIEMgc3BlY2lmaWNhdGlvbnMuCisKK0luIHByYWN0aWNlIGhvd2V2ZXIsIHlvdSBjYW4gdXNlIGl0IG9uIHByZXR0eSBtdWNoIGFueSBwbGF0Zm9ybSAoZXZlbiBNSVBTKSB3aXRoIGNhcmUuCisKK0J5IGRlc2lnbiB0aGUgXHRleHRpdHtmYXN0fSBtb2RlIGZ1bmN0aW9ucyB3b24ndCBnZXQgdW5hbGlnbmVkIG9uIHRoZWlyIG93bi4gIEZvciBpbnN0YW5jZSwgaWYgeW91IGNhbGwgY3RyXF9lbmNyeXB0KCkgcmlnaHQgYWZ0ZXIgY2FsbGluZworY3RyXF9zdGFydCgpIGFuZCBhbGwgdGhlIGlucHV0cyB5b3UgZ2F2ZSBhcmUgYWxpZ25lZCB0aGFuIGN0clxfZW5jcnlwdCgpIHdpbGwgcGVyZm9ybSBhbGlnbmVkIG1lbW9yeSBvcGVyYXRpb25zIG9ubHkuICBIb3dldmVyLCBpZiB5b3UgCitjYWxsIGN0clxfZW5jcnlwdCgpIHdpdGggYW4gb2RkIGFtb3VudCBvZiBwbGFpbnRleHQgdGhlbiBjYWxsIGl0IGFnYWluIHRoZSBDVFIgcGFkICh0aGUgSVYpIHdpbGwgYmUgcGFydGlhbGx5IHVzZWQuICBUaGlzIHdpbGwKK2NhdXNlIHRoZSBjdHIgcm91dGluZSB0byBmaXJzdCB1c2UgdXAgdGhlIHJlbWFpbmluZyBwYWQgYnl0ZXMuICBUaGVuIGlmIHRoZXJlIGFyZSBlbm91Z2ggcGxhaW50ZXh0IGJ5dGVzIGxlZnQgaXQgd2lsbCB1c2UgCit3aG9sZSB3b3JkIFhPUiBvcGVyYXRpb25zLiAgVGhlc2Ugb3BlcmF0aW9ucyB3aWxsIGJlIHVuYWxpZ25lZC4KKworVGhlIHNpbXBsZXN0IHByZWNhdXRpb24gaXMgdG8gbWFrZSBzdXJlIHlvdSBwcm9jZXNzIGFsbCBkYXRhIGluIHBvd2VyIG9mIHR3byBibG9ja3MgYW5kIGhhbmRsZSBcdGV4dGl0e3JlbWFpbmRlcn0gYXQgdGhlIGVuZC4gIGUuZy4gSWYgeW91IGFyZSAKK0NUUidpbmcgYSBsb25nIHN0cmVhbSBwcm9jZXNzIGl0IGluIGJsb2NrcyBvZiAoc2F5KSBmb3VyIGtpbG9ieXRlcyBhbmQgaGFuZGxlIGFueSByZW1haW5pbmcgaW5jb21wbGV0ZSBibG9ja3MgYXQgdGhlIGVuZCBvZiB0aGUgc3RyZWFtLiAgCisKK1xpbmRleHtMVENcX0ZBU1RcX1RZUEV9CitJZiB5b3UgZG8gcGxhbiBvbiB1c2luZyB0aGUgXHRleHRpdHtMVENcX0ZBU1R9IG1vZGUgeW91IGhhdmUgdG8gYWxzbyBkZWZpbmUgYSBcdGV4dGl0e0xUQ1xfRkFTVFxfVFlQRX0gbWFjcm8gd2hpY2ggcmVzb2x2ZXMgdG8gYW4gb3B0aW1hbCBzaXplZAorZGF0YSB0eXBlIHlvdSBjYW4gcGVyZm9ybSBpbnRlZ2VyIG9wZXJhdGlvbnMgd2l0aC4gIElkZWFsbHkgaXQgc2hvdWxkIGJlIGZvdXIgb3IgZWlnaHQgYnl0ZXMgc2luY2UgaXQgbXVzdCBwcm9wZXJseSBkaXZpZGUgdGhlIHNpemUgCitvZiB5b3VyIGJsb2NrIGNpcGhlciAoZS5nLiAxNiBieXRlcyBmb3IgQUVTKS4gIFRoaXMgbWVhbnMgc2FkbHkgaWYgeW91J3JlIG9uIGEgcGxhdGZvcm0gd2l0aCA1Ny0tYml0IHdvcmRzIChvciBzb21ldGhpbmcpIHlvdSBjYW4ndCAKK3VzZSB0aGlzIG1vZGUuICBTbyBzYWQuCisKK1xzdWJzZWN0aW9ue0xUQ1xfTk9cX0FTTX0KK1doZW4gdGhpcyBoYXMgYmVlbiBkZWZpbmVkIHRoZSBsaWJyYXJ5IHdpbGwgbm90IHVzZSBhbnkgaW5saW5lIGFzc2VtYmxlci4gIE9ubHkgYSBmZXcgcGxhdGZvcm1zIHN1cHBvcnQgYXNzZW1ibGVyIGlubGluZXMgYnV0IHZhcmlvdXMgdmVyc2lvbnMgb2YgSUNDIGFuZCBHQ0MKK2Nhbm5vdCBoYW5kbGUgYWxsIG9mIHRoZSBhc3NlbWJsZXIgZnVuY3Rpb25zLiAgCisKK1xzdWJzZWN0aW9ue1N5bW1ldHJpYyBDaXBoZXJzLCBPbmUtd2F5IEhhc2hlcywgUFJOR1MgYW5kIFB1YmxpYyBLZXkgRnVuY3Rpb25zfQorVGhlcmUgYXJlIGEgcGxldGhvcmEgb2YgbWFjcm9zIGZvciB0aGUgY2lwaGVycywgaGFzaGVzLCBQUk5HcyBhbmQgcHVibGljIGtleSBmdW5jdGlvbnMgd2hpY2ggYXJlIGZhaXJseSAKK3NlbGYtZXhwbGFuYXRvcnkuICBXaGVuIHRoZXkgYXJlIGRlZmluZWQgdGhlIGZ1bmN0aW9uYWxpdHkgaXMgaW5jbHVkZWQgb3RoZXJ3aXNlIGl0IGlzIG5vdC4gIFRoZXJlIGFyZSBzb21lIAorZGVwZW5kZW5jeSBpc3N1ZXMgd2hpY2ggYXJlIG5vdGVkIGluIHRoZSBmaWxlLiAgRm9yIGluc3RhbmNlLCBZYXJyb3cgcmVxdWlyZXMgQ1RSIGNoYWluaW5nIG1vZGUsIGEgYmxvY2sgCitjaXBoZXIgYW5kIGEgaGFzaCBmdW5jdGlvbi4KKworQWxzbyBzZWUgdGVjaG5pY2FsIG5vdGUgbnVtYmVyIGZpdmUgZm9yIG1vcmUgZGV0YWlscy4KKworXHN1YnNlY3Rpb257TFRDXF9FQVNZfQorV2hlbiBkZWZpbmVkIHRoZSBsaWJyYXJ5IGlzIGNvbmZpZ3VyZWQgdG8gYnVpbGQgZmV3ZXIgYWxnb3JpdGhtcyBhbmQgbW9kZXMuICBNb3N0bHkgaXQgc3RpY2tzIHRvIE5JU1QgYW5kIEFOU0kgYXBwcm92ZWQgYWxnb3JpdGhtcy4gIFNlZSAKK3RoZSBoZWFkZXIgZmlsZSBcdGV4dGl0e3RvbWNyeXB0XF9jdXN0b20uaH0gZm9yIG1vcmUgZGV0YWlscy4gIEl0IGlzIG1lYW50IHRvIHByb3ZpZGUgbGl0ZXJhbGx5IGFuIGVhc3kgbWV0aG9kIG9mIHRyaW1taW5nIHRoZSBsaWJyYXJ5IAorYnVpbGQgdG8gdGhlIG1vc3QgbWluaW11bSBvZiB1c2VmdWwgZnVuY3Rpb25hbGl0eS4KKworXHN1YnNlY3Rpb257VFdPRklTSFxfU01BTEwgYW5kIFRXT0ZJU0hcX1RBQkxFU30KK1R3b2Zpc2ggaXMgYSAxMjgtYml0IHN5bW1ldHJpYyBibG9jayBjaXBoZXIgdGhhdCBpcyBwcm92aWRlZCB3aXRoaW4gdGhlIGxpYnJhcnkuICBUaGUgY2lwaGVyIGl0c2VsZiBpcyBmbGV4aWJsZSBlbm91Z2gKK3RvIGFsbG93IHNvbWUgdHJhZGUtb2ZmcyBpbiB0aGUgaW1wbGVtZW50YXRpb24uICBXaGVuIFRXT0ZJU0hcX1NNQUxMIGlzIGRlZmluZWQgdGhlIHNjaGVkdWxlZCBzeW1tZXRyaWMga2V5IGZvciBUd29maXNoIAorcmVxdWlyZXMgb25seSAyMDAgYnl0ZXMgb2YgbWVtb3J5LiAgVGhpcyBpcyBhY2hpZXZlZCBieSBub3QgcHJlLWNvbXB1dGluZyB0aGUgc3Vic3RpdHV0aW9uIGJveGVzLiAgSGF2aW5nIHRoaXMgCitkZWZpbmVkIHdpbGwgYWxzbyBncmVhdGx5IHNsb3cgZG93biB0aGUgY2lwaGVyLiAgV2hlbiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkIFR3b2Zpc2ggd2lsbCBwcmUtY29tcHV0ZSB0aGUgCit0YWJsZXMgYXQgYSBjb3N0IG9mIDRLQiBvZiBtZW1vcnkuICBUaGUgY2lwaGVyIHdpbGwgYmUgbXVjaCBmYXN0ZXIgYXMgYSByZXN1bHQuICAKKworV2hlbiBUV09GSVNIXF9UQUJMRVMgaXMgZGVmaW5lZCB0aGUgY2lwaGVyIHdpbGwgdXNlIHByZS1jb21wdXRlZCAoYW5kIGZpeGVkIGluIGNvZGUpIHRhYmxlcyByZXF1aXJlZCB0byB3b3JrLiAgVGhpcyBpcwordXNlZnVsIHdoZW4gVFdPRklTSFxfU01BTEwgaXMgZGVmaW5lZCBhcyB0aGUgdGFibGUgdmFsdWVzIGFyZSBjb21wdXRlZCBvbiB0aGUgZmx5LiAgV2hlbiB0aGlzIGlzIGRlZmluZWQgdGhlIGNvZGUgc2l6ZQord2lsbCBpbmNyZWFzZSBieSBhcHByb3hpbWF0ZWx5IDUwMCBieXRlcy4gIElmIHRoaXMgaXMgZGVmaW5lZCBidXQgVFdPRklTSFxfU01BTEwgaXMgbm90IHRoZSBjaXBoZXIgd2lsbCBzdGlsbCB3b3JrIGJ1dAoraXQgd2lsbCBub3Qgc3BlZWQgdXAgdGhlIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbiBmdW5jdGlvbnMuCisKK1xzdWJzZWN0aW9ue0dDTVxfVEFCTEVTfQorV2hlbiBkZWZpbmVkIEdDTSB3aWxsIHVzZSBhIDY0S0IgdGFibGUgKHBlciBHQ00gc3RhdGUpIHdoaWNoIHdpbGwgZ3JlYXRseSBzcGVlZCB1cCB0aGUgcGVyLS1wYWNrZXQgbGF0ZW5jeS4gIAorSXQgYWxzbyBpbmNyZWFzZXMgdGhlIGluaXRpYWxpemF0aW9uIHRpbWUgYW5kIGlzIG5vdCBzdWl0YWJsZSB3aGVuIHlvdSBhcmUgZ29pbmcgdG8gdXNlIGEga2V5IGEgZmV3IHRpbWVzIG9ubHkuICAKKworXHN1YnNlY3Rpb257R0NNXF9UQUJMRVNcX1NTRTJ9CitcaW5kZXh7U1NFMn0KK1doZW4gZGVmaW5lZCBHQ00gd2lsbCB1c2UgdGhlIFNTRTIgaW5zdHJ1Y3Rpb25zIHRvIHBlcmZvcm0gdGhlICRHRigyXngpJCBtdWx0aXBseSB1c2luZyAxNiAxMjgtLWJpdCBYT1Igb3BlcmF0aW9ucy4gIEl0IHNoYXZlcyBhIGZldyBjeWNsZXMgcGVyIGJ5dGUKK29mIEdDTSBvdXRwdXQgb24gYm90aCB0aGUgQU1ENjQgYW5kIEludGVsIFBlbnRpdW0gNCBwbGF0Zm9ybXMuICBSZXF1aXJlcyBHQ0MgYW5kIGFuIFNTRTIgZXF1aXBwZWQgcGxhdGZvcm0uCisKK1xzdWJzZWN0aW9ue0xUQ1xfU01BTExcX0NPREV9CitXaGVuIHRoaXMgaXMgZGVmaW5lZCBzb21lIG9mIHRoZSBjb2RlIHN1Y2ggYXMgdGhlIFJpam5kYWVsIGFuZCBTQUZFUisgY2lwaGVycyBhcmUgcmVwbGFjZWQgd2l0aCBzbWFsbGVyIGNvZGUgdmFyaWFudHMuCitUaGVzZSB2YXJpYW50cyBhcmUgc2xvd2VyIGJ1dCBjYW4gc2F2ZSBxdWl0ZSBhIGJpdCBvZiBjb2RlIHNwYWNlLgorCitcc3Vic2VjdGlvbntMVENcX1BUSFJFQUR9CitXaGVuIHRoaXMgaXMgYWN0aXZhdGVkIGFsbCBvZiB0aGUgZGVzY3JpcHRvciB0YWJsZSBmdW5jdGlvbnMgd2lsbCB1c2UgcHRocmVhZCBsb2NraW5nIHRvIGVuc3VyZSB0aHJlYWQgc2FmZSB1cGRhdGVzIHRvIHRoZSB0YWJsZXMuICBOb3RlIHRoYXQgCitpdCBkb2Vzbid0IHByZXZlbnQgYSB0aHJlYWQgdGhhdCBpcyBwYXNzaXZlbHkgdXNpbmcgYSB0YWJsZSBmcm9tIGJlaW5nIG1lc3NlZCB1cCBieSBhbm90aGVyIHRocmVhZCB0aGF0IHVwZGF0ZXMgdGhlIHRhYmxlLgorCitHZW5lcmFsbHkgdGhlIHJ1bGUgb2YgdGh1bWIgaXMgdG8gc2V0dXAgdGhlIHRhYmxlcyBvbmNlIGF0IHN0YXJ0dXAgYW5kIHRoZW4gbGVhdmUgdGhlbSBiZS4gIFRoaXMgYWRkZWQgYnVpbGQgZmxhZyBzaW1wbHkgbWFrZXMgdXBkYXRpbmcKK3RoZSB0YWJsZXMgc2FmZXIuCisKK1xzdWJzZWN0aW9ue0xUQ1xfRUNDXF9USU1JTkdcX1JFU0lTVEFOVH0KK1doZW4gdGhpcyBoYXMgYmVlbiBkZWZpbmVkIHRoZSBFQ0MgcG9pbnQgbXVsdGlwbGllciAoYnVpbHQtLWluIHRvIHRoZSBsaWJyYXJ5KSB3aWxsIHVzZSBhIHRpbWluZyByZXNpc3RhbnQgcG9pbnQgbXVsdGlwbGljYXRpb24KK2FsZ29yaXRobSB3aGljaCBwcmV2ZW50cyBsZWFraW5nIGtleSBiaXRzIG9mIHRoZSBwcml2YXRlIGtleSAoc2NhbGFyKS4gIEl0IGlzIGEgc2xvd2VyIGFsZ29yaXRobSBidXQgdXNlZnVsIGZvciBzaXR1YXRpb25zCit3aGVyZSB0aW1pbmcgc2lkZSBjaGFubmVscyBwb3NlIGEgc2lnbmlmaWNhbnQgdGhyZWF0LgorCitcc3Vic2VjdGlvbntNYXRoIERlc2NyaXB0b3JzfQorVGhlIGxpYnJhcnkgY29tZXMgd2l0aCB0aHJlZSBtYXRoIGRlc2NyaXB0b3JzIHRoYXQgYWxsb3cgeW91IHRvIGludGVyZmFjZSB0aGUgcHVibGljIGtleSBjcnlwdG9ncmFwaHkgQVBJIHRvIGZyZWVseSBhdmFpbGFibGUgbWF0aAorbGlicmFyaWVzLiAgV2hlbiBcdGV4dGJme0dNUFxfREVTQ30sIFx0ZXh0YmZ7TFRNXF9ERVNDfSwgb3IgXHRleHRiZntURk1cX0RFU0N9IGFyZSBkZWZpbmVkCitkZXNjcmlwdG9ycyBmb3IgdGhlIHJlc3BlY3RpdmUgbGlicmFyeSBhcmUgYnVpbHQgYW5kIGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5IGFzIFx0ZXh0aXR7Z21wXF9kZXNjfSwgXHRleHRpdHtsdG1cX2Rlc2N9LCBvciBcdGV4dGl0e3RmbVxfZGVzY30gcmVzcGVjdGl2ZWx5LgorCitJbiB0aGUgdGVzdCBkZW1vcyB0aGF0IHVzZSB0aGUgbGlicmFyaWVzIHRoZSBhZGRpdGlvbmFsIGZsYWdzIFx0ZXh0YmZ7VVNFXF9HTVB9LCBcdGV4dGJme1VTRVxfTFRNfSwgYW5kIFx0ZXh0YmZ7VVNFXF9URk19IGNhbiBiZSBkZWZpbmVkCit0byB0ZWxsIHRoZSBwcm9ncmFtIHdoaWNoIGxpYnJhcnkgdG8gdXNlLiAgT25seSBvbmUgb2YgdGhlIFVTRSBmbGFncyBjYW4gYmUgZGVmaW5lZCBhdCBvbmNlLgorCitcaW5kZXh7R01QXF9ERVNDfSBcaW5kZXh7VVNFXF9HTVB9IFxpbmRleHtMVE1cX0RFU0N9IFxpbmRleHtURk1cX0RFU0N9IFxpbmRleHtVU0VcX0xUTX0gXGluZGV4e1VTRVxfVEZNfQorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorQ0ZMQUdTPSItREdNUF9ERVNDIC1ETFRNX0RFU0MgLURURk1fREVTQyAtRFVTRV9URk0iIFwKK0VYVFJBTElCUz0iLWxnbXAgLWx0b21tYXRoIC1sdGZtIiBtYWtlIC1mIG1ha2VmaWxlLnNoYXJlZCBpbnN0YWxsIHRpbWluZworXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CisKK1RoYXQgd2lsbCBidWlsZCBhbmQgaW5zdGFsbCB0aGUgbGlicmFyeSB3aXRoIGFsbCBkZXNjcmlwdG9ycyAoYW5kIGxpbmsgYWdhaW5zdCBhbGwpLCBidXQgb25seSB1c2UgVG9tc0Zhc3RNYXRoIGluIHRoZSB0aW1pbmcgZGVtby4gIAorCitcY2hhcHRlcntPcHRpbWl6YXRpb25zfQorXG15c2VjdGlvbntJbnRyb2R1Y3Rpb259CitUaGUgZW50aXJlIEFQSSB3YXMgZGVzaWduZWQgd2l0aCBwbHVnIGFuZCBwbGF5IGluIG1pbmQgYXQgdGhlIGxvdyBsZXZlbC4gIFRoYXQgaXMgeW91IGNhbiBzd2FwIG91dCBhbnkgY2lwaGVyLCBoYXNoLCBQUk5HIG9yIGJpZ251bSBsaWJyYXJ5IGFuZCB0aGUgZGVwZW5kZW50IEFQSSB3aWxsIG5vdCAKK3JlcXVpcmUgdXBkYXRpbmcuICBUaGlzIGhhcyB0aGUgbmljZSBiZW5lZml0IHRoYXQgb25lIGNhbiBhZGQgY2lwaGVycyAoZXRjLikgbm90IGhhdmUgdG8gcmUtLXdyaXRlIHBvcnRpb25zIG9mIHRoZSBBUEkuICBGb3IgdGhlIG1vc3QgcGFydCwgTGliVG9tQ3J5cHQgaGFzIGFsc28gYmVlbiB3cml0dGVuCit0byBiZSBoaWdobHkgcG9ydGFibGUgYW5kIGVhc3kgdG8gYnVpbGQgb3V0IG9mIHRoZSBib3ggb24gcHJldHR5IG11Y2ggYW55IHBsYXRmb3JtLiAgQXMgc3VjaCB0aGVyZSBhcmUgbm8gYXNzZW1ibGVyIGlubGluZXMgdGhyb3VnaG91dCB0aGUgY29kZSwgSSBtYWtlIG5vIGFzc3VtcHRpb25zCithYm91dCB0aGUgcGxhdGZvcm0sIGV0Yy4uLgorCitUaGF0IHdvcmtzIHdlbGwgZm9yIG1vc3QgY2FzZXMgYnV0IHRoZXJlIGFyZSB0aW1lcyB3aGVyZSBwZXJmb3JtYW5jZSBpcyBvZiB0aGUgZXNzZW5jZS4gIFRoaXMgQVBJIGFsbG93cyBvcHRpbWl6ZWQgcm91dGluZXMgdG8gYmUgZHJvcHBlZCBpbi0tcGxhY2Ugb2YgdGhlIGV4aXN0aW5nCitwb3J0YWJsZSByb3V0aW5lcy4gIEZvciBpbnN0YW5jZSwgaGFuZCBvcHRpbWl6ZWQgYXNzZW1ibGVyIHZlcnNpb25zIG9mIEFFUyBjb3VsZCBiZSBwcm92aWRlZC4gIEFueSBleGlzdGluZyBmdW5jdGlvbiB0aGF0IHVzZXMgdGhlIGNpcGhlciBjb3VsZCBhdXRvbWF0aWNhbGx5IHVzZQordGhlIG9wdGltaXplZCBjb2RlIHdpdGhvdXQgcmUtLXdyaXRpbmcuICBUaGlzIGFsc28gcGF2ZXMgdGhlIHdheSBmb3IgaGFyZHdhcmUgZHJpdmVycyB0aGF0IGNhbiBhY2Nlc3MgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgY3J5cHRvZ3JhcGhpYyBkZXZpY2VzLgorCitBdCB0aGUgaGVhcnQgb2YgdGhpcyBmbGV4aWJpbGl0eSBpcyB0aGUgXHRleHRpdHtkZXNjcmlwdG9yfSBzeXN0ZW0uICBBIGRlc2NyaXB0b3IgaXMgZXNzZW50aWFsbHkganVzdCBhIEMgXHRleHRpdHtzdHJ1Y3R9IHdoaWNoIGRlc2NyaWJlcyB0aGUgYWxnb3JpdGhtIGFuZCBwcm92aWRlcyBwb2ludGVycwordG8gZnVuY3Rpb25zIHRoYXQgZG8gdGhlIHJlcXVpcmVkIHdvcmsuICBGb3IgYSBnaXZlbiBjbGFzcyBvZiBvcGVyYXRpb24gKGUuZy4gY2lwaGVyLCBoYXNoLCBwcm5nLCBiaWdudW0pIHRoZSBmdW5jdGlvbnMgb2YgYSBkZXNjcmlwdG9yIGhhdmUgaWRlbnRpY2FsIHByb3RvdHlwZXMgd2hpY2ggbWFrZXMgCitkZXZlbG9wbWVudCBzaW1wbGUuICBJbiBtb3N0IGRlcGVuZGVudCByb3V0aW5lcyBhbGwgYW4gZW5kIGRldmVsb3BlciBoYXMgdG8gZG8gaXMgcmVnaXN0ZXJcX1hYWCgpIHRoZSBkZXNjcmlwdG9yIGFuZCB0aGV5IGFyZSBzZXQuCisKK1xteXNlY3Rpb257Q2lwaGVyc30KK1RoZSBjaXBoZXJzIGluIExpYlRvbUNyeXB0IGFyZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBsdGNcX2NpcGhlclxfZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCisKK1xsYWJlbHtzZWM6Y2lwaGVyZGVzY30KK1xiZWdpbntzbWFsbH0KK1xiZWdpbnt2ZXJiYXRpbX0KK3N0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgeworICAgLyoqIG5hbWUgb2YgY2lwaGVyICovCisgICBjaGFyICpuYW1lOworCisgICAvKiogaW50ZXJuYWwgSUQgKi8KKyAgIHVuc2lnbmVkIGNoYXIgSUQ7CisKKyAgIC8qKiBtaW4ga2V5c2l6ZSAob2N0ZXRzKSAqLworICAgaW50ICBtaW5fa2V5X2xlbmd0aCwgCisKKyAgIC8qKiBtYXgga2V5c2l6ZSAob2N0ZXRzKSAqLworICAgICAgICBtYXhfa2V5X2xlbmd0aCwgCisKKyAgIC8qKiBibG9jayBzaXplIChvY3RldHMpICovCisgICAgICAgIGJsb2NrX2xlbmd0aCwgCisKKyAgIC8qKiBkZWZhdWx0IG51bWJlciBvZiByb3VuZHMgKi8KKyAgICAgICAgZGVmYXVsdF9yb3VuZHM7CisKKyAgIC8qKiBTZXR1cCB0aGUgY2lwaGVyIAorICAgICAgQHBhcmFtIGtleSAgICAgICAgIFRoZSBpbnB1dCBzeW1tZXRyaWMga2V5CisgICAgICBAcGFyYW0ga2V5bGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQga2V5IChvY3RldHMpCisgICAgICBAcGFyYW0gbnVtX3JvdW5kcyAgVGhlIHJlcXVlc3RlZCBudW1iZXIgb2Ygcm91bmRzICgwPT1kZWZhdWx0KQorICAgICAgQHBhcmFtIHNrZXkgICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgc2NoZWR1bGVkIGtleQorICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAqLworICAgaW50ICAoKnNldHVwKShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBrZXlsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBudW1fcm91bmRzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBFbmNyeXB0IGEgYmxvY2sKKyAgICAgIEBwYXJhbSBwdCAgICAgIFRoZSBwbGFpbnRleHQKKyAgICAgIEBwYXJhbSBjdCAgICAgIFtvdXRdIFRoZSBjaXBoZXJ0ZXh0CisgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAqLworICAgaW50ICgqZWNiX2VuY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBEZWNyeXB0IGEgYmxvY2sKKyAgICAgIEBwYXJhbSBjdCAgICAgIFRoZSBjaXBoZXJ0ZXh0CisgICAgICBAcGFyYW0gcHQgICAgICBbb3V0XSBUaGUgcGxhaW50ZXh0CisgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAqLworICAgaW50ICgqZWNiX2RlY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBUZXN0IHRoZSBibG9jayBjaXBoZXIKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIAorICAgICAgICAgICAgICAgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdGluZyBoYXMgYmVlbiBkaXNhYmxlZAorICAgKi8KKyAgIGludCAoKnRlc3QpKHZvaWQpOworCisgICAvKiogVGVybWluYXRlIHRoZSBjb250ZXh0IAorICAgICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkKKyAgICovCisgICB2b2lkICgqZG9uZSkoc3ltbWV0cmljX2tleSAqc2tleSk7ICAgICAgCisKKyAgIC8qKiBEZXRlcm1pbmUgYSBrZXkgc2l6ZQorICAgICAgIEBwYXJhbSBrZXlzaXplICAgIFtpbi9vdXRdIFRoZSBzaXplIG9mIHRoZSBrZXkgZGVzaXJlZCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHN1Z2dlc3RlZCBzaXplCisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAqLworICAgaW50ICAoKmtleXNpemUpKGludCAqa2V5c2l6ZSk7CisKKy8qKiBBY2NlbGVyYXRvcnMgKiovCisgICAvKiogQWNjZWxlcmF0ZWQgRUNCIGVuY3J5cHRpb24gCisgICAgICAgQHBhcmFtIHB0ICAgICAgUGxhaW50ZXh0CisgICAgICAgQHBhcmFtIGN0ICAgICAgQ2lwaGVydGV4dAorICAgICAgIEBwYXJhbSBibG9ja3MgIFRoZSBudW1iZXIgb2YgY29tcGxldGUgYmxvY2tzIHRvIHByb2Nlc3MKKyAgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleSBjb250ZXh0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAqLworICAgaW50ICgqYWNjZWxfZWNiX2VuY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgYmxvY2tzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KTsKKworICAgLyoqIEFjY2VsZXJhdGVkIEVDQiBkZWNyeXB0aW9uIAorICAgICAgIEBwYXJhbSBwdCAgICAgIFBsYWludGV4dAorICAgICAgIEBwYXJhbSBjdCAgICAgIENpcGhlcnRleHQKKyAgICAgICBAcGFyYW0gYmxvY2tzICBUaGUgbnVtYmVyIG9mIGNvbXBsZXRlIGJsb2NrcyB0byBwcm9jZXNzCisgICAgICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkgY29udGV4dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICAgKi8KKyAgIGludCAoKmFjY2VsX2VjYl9kZWNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGJsb2NrcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBDQkMgZW5jcnlwdGlvbiAKKyAgICAgICBAcGFyYW0gcHQgICAgICBQbGFpbnRleHQKKyAgICAgICBAcGFyYW0gY3QgICAgICBDaXBoZXJ0ZXh0CisgICAgICAgQHBhcmFtIGJsb2NrcyAgVGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcworICAgICAgIEBwYXJhbSBJViAgICAgIFRoZSBpbml0aWFsIHZhbHVlIChpbnB1dC9vdXRwdXQpCisgICAgICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkgY29udGV4dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICAgKi8KKyAgIGludCAoKmFjY2VsX2NiY19lbmNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGJsb2NrcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqSVYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpOworCisgICAvKiogQWNjZWxlcmF0ZWQgQ0JDIGRlY3J5cHRpb24gCisgICAgICAgQHBhcmFtIHB0ICAgICAgUGxhaW50ZXh0CisgICAgICAgQHBhcmFtIGN0ICAgICAgQ2lwaGVydGV4dAorICAgICAgIEBwYXJhbSBibG9ja3MgIFRoZSBudW1iZXIgb2YgY29tcGxldGUgYmxvY2tzIHRvIHByb2Nlc3MKKyAgICAgICBAcGFyYW0gSVYgICAgICBUaGUgaW5pdGlhbCB2YWx1ZSAoaW5wdXQvb3V0cHV0KQorICAgICAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5IGNvbnRleHQKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICovCisgICBpbnQgKCphY2NlbF9jYmNfZGVjcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBibG9ja3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KTsKKworICAgLyoqIEFjY2VsZXJhdGVkIENUUiBlbmNyeXB0aW9uIAorICAgICAgIEBwYXJhbSBwdCAgICAgIFBsYWludGV4dAorICAgICAgIEBwYXJhbSBjdCAgICAgIENpcGhlcnRleHQKKyAgICAgICBAcGFyYW0gYmxvY2tzICBUaGUgbnVtYmVyIG9mIGNvbXBsZXRlIGJsb2NrcyB0byBwcm9jZXNzCisgICAgICAgQHBhcmFtIElWICAgICAgVGhlIGluaXRpYWwgdmFsdWUgKGlucHV0L291dHB1dCkKKyAgICAgICBAcGFyYW0gbW9kZSAgICBsaXR0bGUgb3IgYmlnIGVuZGlhbiBjb3VudGVyIChtb2RlPTAgb3IgbW9kZT0xKQorICAgICAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5IGNvbnRleHQKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICovCisgICBpbnQgKCphY2NlbF9jdHJfZW5jcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBibG9ja3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBtb2RlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KTsKKworICAgLyoqIEFjY2VsZXJhdGVkIExSVyAKKyAgICAgICBAcGFyYW0gcHQgICAgICBQbGFpbnRleHQKKyAgICAgICBAcGFyYW0gY3QgICAgICBDaXBoZXJ0ZXh0CisgICAgICAgQHBhcmFtIGJsb2NrcyAgVGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcworICAgICAgIEBwYXJhbSBJViAgICAgIFRoZSBpbml0aWFsIHZhbHVlIChpbnB1dC9vdXRwdXQpCisgICAgICAgQHBhcmFtIHR3ZWFrICAgVGhlIExSVyB0d2VhaworICAgICAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5IGNvbnRleHQKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICovCisgICBpbnQgKCphY2NlbF9scndfZW5jcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBibG9ja3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKklWLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0d2VhaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBMUlcgCisgICAgICAgQHBhcmFtIGN0ICAgICAgQ2lwaGVydGV4dAorICAgICAgIEBwYXJhbSBwdCAgICAgIFBsYWludGV4dAorICAgICAgIEBwYXJhbSBibG9ja3MgIFRoZSBudW1iZXIgb2YgY29tcGxldGUgYmxvY2tzIHRvIHByb2Nlc3MKKyAgICAgICBAcGFyYW0gSVYgICAgICBUaGUgaW5pdGlhbCB2YWx1ZSAoaW5wdXQvb3V0cHV0KQorICAgICAgIEBwYXJhbSB0d2VhayAgIFRoZSBMUlcgdHdlYWsKKyAgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleSBjb250ZXh0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAqLworICAgaW50ICgqYWNjZWxfbHJ3X2RlY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgYmxvY2tzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpJViwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdHdlYWssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpOworCisgICAvKiogQWNjZWxlcmF0ZWQgQ0NNIHBhY2tldCAob25lLXNob3QpCisgICAgICAgQHBhcmFtIGtleSAgICAgICAgVGhlIHNlY3JldCBrZXkgdG8gdXNlCisgICAgICAgQHBhcmFtIGtleWxlbiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgICAgIEBwYXJhbSB1c2tleSAgICAgIEEgcHJldmlvdXNseSBzY2hlZHVsZWQga2V5IFtjYW4gYmUgTlVMTF0KKyAgICAgICBAcGFyYW0gbm9uY2UgICAgICBUaGUgc2Vzc2lvbiBub25jZSBbdXNlIG9uY2VdCisgICAgICAgQHBhcmFtIG5vbmNlbGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgbm9uY2UKKyAgICAgICBAcGFyYW0gaGVhZGVyICAgICBUaGUgaGVhZGVyIGZvciB0aGUgc2Vzc2lvbgorICAgICAgIEBwYXJhbSBoZWFkZXJsZW4gIFRoZSBsZW5ndGggb2YgdGhlIGhlYWRlciAob2N0ZXRzKQorICAgICAgIEBwYXJhbSBwdCAgICAgICAgIFtvdXRdIFRoZSBwbGFpbnRleHQKKyAgICAgICBAcGFyYW0gcHRsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgKG9jdGV0cykKKyAgICAgICBAcGFyYW0gY3QgICAgICAgICBbb3V0XSBUaGUgY2lwaGVydGV4dAorICAgICAgIEBwYXJhbSB0YWcgICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiB0YWcKKyAgICAgICBAcGFyYW0gdGFnbGVuICAgICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAgICAgICBAcGFyYW0gZGlyZWN0aW9uICBFbmNyeXB0IG9yIERlY3J5cHQgZGlyZWN0aW9uICgwIG9yIDEpCisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAqLworICAgaW50ICgqYWNjZWxfY2NtX21lbW9yeSkoCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICBzeW1tZXRyaWNfa2V5ICAgICAgICp1c2tleSwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgIHVuc2lnbmVkIGxvbmcgbm9uY2VsZW4sCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGVhZGVyLCB1bnNpZ25lZCBsb25nIGhlYWRlcmxlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgICAgIHVuc2lnbmVkIGxvbmcgcHRsZW4sCisgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsCisgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCAgICB1bnNpZ25lZCBsb25nICp0YWdsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGludCAgZGlyZWN0aW9uKTsKKworICAgLyoqIEFjY2VsZXJhdGVkIEdDTSBwYWNrZXQgKG9uZSBzaG90KQorICAgICAgIEBwYXJhbSBrZXkgICAgICAgIFRoZSBzZWNyZXQga2V5CisgICAgICAgQHBhcmFtIGtleWxlbiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleQorICAgICAgIEBwYXJhbSBJViAgICAgICAgIFRoZSBpbml0aWFsIHZlY3RvciAKKyAgICAgICBAcGFyYW0gSVZsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBpbml0aWFsIHZlY3RvcgorICAgICAgIEBwYXJhbSBhZGF0YSAgICAgIFRoZSBhZGRpdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGRhdGEgKGhlYWRlcikKKyAgICAgICBAcGFyYW0gYWRhdGFsZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBhZGF0YQorICAgICAgIEBwYXJhbSBwdCAgICAgICAgIFRoZSBwbGFpbnRleHQKKyAgICAgICBAcGFyYW0gcHRsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQvY2lwaGVydGV4dAorICAgICAgIEBwYXJhbSBjdCAgICAgICAgIFRoZSBjaXBoZXJ0ZXh0CisgICAgICAgQHBhcmFtIHRhZyAgICAgICAgW291dF0gVGhlIE1BQyB0YWcKKyAgICAgICBAcGFyYW0gdGFnbGVuICAgICBbaW4vb3V0XSBUaGUgTUFDIHRhZyBsZW5ndGgKKyAgICAgICBAcGFyYW0gZGlyZWN0aW9uICBFbmNyeXB0IG9yIERlY3J5cHQgbW9kZSAoR0NNX0VOQ1JZUFQgb3IgR0NNX0RFQ1JZUFQpCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqYWNjZWxfZ2NtX21lbW9yeSkoCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgICAgIHVuc2lnbmVkIGxvbmcgSVZsZW4sCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRhdGEsICB1bnNpZ25lZCBsb25nIGFkYXRhbGVuLAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAgICAgdW5zaWduZWQgbG9uZyBwdGxlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCAgICB1bnNpZ25lZCBsb25nICp0YWdsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb24pOworCisgICAvKiogQWNjZWxlcmF0ZWQgb25lIHNob3QgT01BQyAKKyAgICAgICBAcGFyYW0ga2V5ICAgICAgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgICAgICBAcGFyYW0ga2V5bGVuICAgICAgICAgVGhlIGtleSBsZW5ndGggKG9jdGV0cykgCisgICAgICAgQHBhcmFtIGluICAgICAgICAgICAgIFRoZSBtZXNzYWdlIAorICAgICAgIEBwYXJhbSBpbmxlbiAgICAgICAgICBMZW5ndGggb2YgbWVzc2FnZSAob2N0ZXRzKQorICAgICAgIEBwYXJhbSBvdXQgICAgICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBmb3IgdGFnCisgICAgICAgQHBhcmFtIG91dGxlbiAgICAgICAgIFtpbi9vdXRdIEluaXRpYWwgYW5kIGZpbmFsIHNpemUgb2Ygb3V0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqb21hY19tZW1vcnkpKAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworICAgLyoqIEFjY2VsZXJhdGVkIG9uZSBzaG90IFhDQkMgCisgICAgICAgQHBhcmFtIGtleSAgICAgICAgICAgIFRoZSBzZWNyZXQga2V5CisgICAgICAgQHBhcmFtIGtleWxlbiAgICAgICAgIFRoZSBrZXkgbGVuZ3RoIChvY3RldHMpIAorICAgICAgIEBwYXJhbSBpbiAgICAgICAgICAgICBUaGUgbWVzc2FnZSAKKyAgICAgICBAcGFyYW0gaW5sZW4gICAgICAgICAgTGVuZ3RoIG9mIG1lc3NhZ2UgKG9jdGV0cykKKyAgICAgICBAcGFyYW0gb3V0ICAgICAgICAgICAgW291dF0gRGVzdGluYXRpb24gZm9yIHRhZworICAgICAgIEBwYXJhbSBvdXRsZW4gICAgICAgICBbaW4vb3V0XSBJbml0aWFsIGFuZCBmaW5hbCBzaXplIG9mIG91dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnhjYmNfbWVtb3J5KSgKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBvbmUgc2hvdCBGOSAKKyAgICAgICBAcGFyYW0ga2V5ICAgICAgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgICAgICBAcGFyYW0ga2V5bGVuICAgICAgICAgVGhlIGtleSBsZW5ndGggKG9jdGV0cykgCisgICAgICAgQHBhcmFtIGluICAgICAgICAgICAgIFRoZSBtZXNzYWdlIAorICAgICAgIEBwYXJhbSBpbmxlbiAgICAgICAgICBMZW5ndGggb2YgbWVzc2FnZSAob2N0ZXRzKQorICAgICAgIEBwYXJhbSBvdXQgICAgICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBmb3IgdGFnCisgICAgICAgQHBhcmFtIG91dGxlbiAgICAgICAgIFtpbi9vdXRdIEluaXRpYWwgYW5kIGZpbmFsIHNpemUgb2Ygb3V0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAgICAgQHJlbWFyayBSZXF1aXJlcyBtYW51YWwgcGFkZGluZworICAgKi8KKyAgIGludCAoKmY5X21lbW9yeSkoCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworfTsKK1xlbmR7dmVyYmF0aW19CitcZW5ke3NtYWxsfQorCitcc3Vic2VjdGlvbntOYW1lfQorXGluZGV4e2ZpbmRcX2NpcGhlcigpfQorVGhlIFx0ZXh0aXR7bmFtZX0gcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgY2lwaGVyLiAgVGhpcyBpcyB3aGF0IGEgZGV2ZWxvcGVyIHdvdWxkIHBhc3MgdG8gZmluZFxfY2lwaGVyKCkgdG8gZmluZCB0aGUgY2lwaGVyIGluIHRoZSBkZXNjcmlwdG9yCit0YWJsZXMuCisKK1xzdWJzZWN0aW9ue0ludGVybmFsIElEfQorVGhpcyBpcyBhIHNpbmdsZSBieXRlIEludGVybmFsIElEIHlvdSBjYW4gdXNlIHRvIGRpc3Rpbmd1aXNoIGNpcGhlcnMgZnJvbSBlYWNoIG90aGVyLgorCitcc3Vic2VjdGlvbntLZXkgTGVuZ3Roc30KK1RoZSBtaW5pbXVtIGtleSBsZW5ndGggaXMgXHRleHRpdHttaW5cX2tleVxfbGVuZ3RofSBhbmQgaXMgbWVhc3VyZWQgaW4gb2N0ZXRzLiAgU2ltaWxhcmx5IHRoZSBtYXhpbXVtIGtleSBsZW5ndGggaXMgXHRleHRpdHttYXhcX2tleVxfbGVuZ3RofS4gIFRoZXkgY2FuIGJlIGVxdWFsCithbmQgYm90aCBtdXN0IHZhbGlkIGtleSBzaXplcyBmb3IgdGhlIGNpcGhlci4gIFZhbHVlcyBpbiBiZXR3ZWVuIGFyZSBub3QgYXNzdW1lZCB0byBiZSB2YWxpZCB0aG91Z2ggdGhleSBtYXkgYmUuCisKK1xzdWJzZWN0aW9ue0Jsb2NrIExlbmd0aH0KK1RoZSBzaXplIG9mIHRoZSBjaXBoZXJzIHBsYWludGV4dCBvciBjaXBoZXJ0ZXh0IGlzIFx0ZXh0aXR7YmxvY2tcX2xlbmd0aH0gYW5kIGlzIG1lYXN1cmVkIGluIG9jdGV0cy4KKworXHN1YnNlY3Rpb257Um91bmRzfQorU29tZSBjaXBoZXJzIGFsbG93IGRpZmZlcmVudCBudW1iZXIgb2Ygcm91bmRzIHRvIGJlIHVzZWQuICBVc3VhbGx5IHlvdSBqdXN0IHVzZSB0aGUgZGVmYXVsdC4gIFRoZSBkZWZhdWx0IHJvdW5kIGNvdW50IGlzIFx0ZXh0aXR7ZGVmYXVsdFxfcm91bmRzfS4KKworXHN1YnNlY3Rpb257U2V0dXB9CitUbyBpbml0aWFsaXplIGEgY2lwaGVyIChmb3IgRUNCIG1vZGUpIHRoZSBmdW5jdGlvbiBzZXR1cCgpIHdhcyBwcm92aWRlZC4gIEl0IGFjY2VwdHMgYW4gYXJyYXkgb2Yga2V5IG9jdGV0cyBcdGV4dGl0e2tleX0gb2YgbGVuZ3RoIFx0ZXh0aXR7a2V5bGVufSBvY3RldHMuICBUaGUgdXNlcgorY2FuIHNwZWNpZnkgdGhlIG51bWJlciBvZiByb3VuZHMgdGhleSB3YW50IHRocm91Z2ggXHRleHRpdHtudW1cX3JvdW5kc30gd2hlcmUgJG51bVxfcm91bmRzID0gMCQgbWVhbnMgdXNlIHRoZSBkZWZhdWx0LiAgVGhlIGRlc3RpbmF0aW9uIG9mIGEgc2NoZWR1bGVkIGtleSBpcyBzdG9yZWQKK2luIFx0ZXh0aXR7c2tleX0uCisKK0luc2lkZSB0aGUgXHRleHRpdHtzeW1tZXRyaWNcX2tleX0gdW5pb24gdGhlcmUgaXMgYSBcdGV4dGl0e3ZvaWQgKmRhdGF9IHdoaWNoIHlvdSBjYW4gdXNlIHRvIGFsbG9jYXRlIGRhdGEgaWYgeW91IG5lZWQgYSBkYXRhIHN0cnVjdHVyZSB0aGF0IGRvZXMgbm90IGZpdCB3aXRoIHRoZSBleGlzdGluZworb25lcyBwcm92aWRlZC4gIEp1c3QgbWFrZSBzdXJlIGluIHlvdXIgXHRleHRpdHtkb25lKCl9IGZ1bmN0aW9uIHRoYXQgeW91IGZyZWUgdGhlIGFsbG9jYXRlZCBtZW1vcnkuCisKK1xzdWJzZWN0aW9ue1NpbmdsZSBibG9jayBFQ0J9CitUbyBwcm9jZXNzIGEgc2luZ2xlIGJsb2NrIGluIEVDQiBtb2RlIHRoZSBlY2JcX2VuY3J5cHQoKSBhbmQgZWNiXF9kZWNyeXB0KCkgZnVuY3Rpb25zIHdlcmUgcHJvdmlkZWQuICBUaGUgcGxhaW50ZXh0IGFuZCBjaXBoZXJ0ZXh0IGJ1ZmZlcnMgYXJlIGFsbG93ZWQgdG8gb3ZlcmxhcCBzbyB5b3UgCittdXN0IG1ha2Ugc3VyZSB5b3UgZG8gbm90IG92ZXJ3cml0ZSB0aGUgb3V0cHV0IGJlZm9yZSB5b3UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIGlucHV0LgorCitcc3Vic2VjdGlvbntUZXN0aW5nfQorVGhlIHRlc3QoKSBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbGYtLXRlc3QgdGhlIFx0ZXh0aXR7ZGV2aWNlfS4gIEl0IHRha2VzIG5vIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBcdGV4dGJme0NSWVBUXF9PS30gaWYgYWxsIGlzIHdvcmtpbmcgcHJvcGVybHkuICBZb3UgbWF5IHJldHVybgorXHRleHRiZntDUllQVFxfTk9QfSB0byBpbmRpY2F0ZSB0aGF0IG5vIHRlc3Rpbmcgd2FzIHBlcmZvcm1lZC4KKworXHN1YnNlY3Rpb257S2V5IFNpemluZ30KK09jY2FzaW9uYWxseSwgYSBmdW5jdGlvbiB3aWxsIHdhbnQgdG8gZmluZCBhIHN1aXRhYmxlIGtleSBzaXplIHRvIHVzZSBzaW5jZSB0aGUgaW5wdXQgaXMgb2RkbHkgc2l6ZWQuICBUaGUga2V5c2l6ZSgpIGZ1bmN0aW9uIGlzIGZvciB0aGlzIGNhc2UuICBJdCBhY2NlcHRzIGEgCitwb2ludGVyIHRvIGFuIGludGVnZXIgd2hpY2ggcmVwcmVzZW50cyB0aGUgZGVzaXJlZCBzaXplLiAgVGhlIGZ1bmN0aW9uIHRoZW4gaGFzIHRvIG1hdGNoIGl0IHRvIHRoZSBleGFjdCBvciBhIGxvd2VyIGtleSBzaXplIHRoYXQgaXMgdmFsaWQgZm9yIHRoZSBjaXBoZXIuICBGb3IKK2V4YW1wbGUsIGlmIHRoZSBpbnB1dCBpcyAkMjUkIGFuZCAkMjQkIGlzIHZhbGlkIHRoZW4gaXQgc3RvcmVzICQyNCQgYmFjayBpbiB0aGUgcG9pbnRlZCB0byBpbnRlZ2VyLiAgSXQgbXVzdCBub3Qgcm91bmQgdXAgYW5kIG11c3QgcmV0dXJuIGFuIGVycm9yIGlmIHRoZSBrZXlzaXplCisgY2Fubm90IGJlIG1hcHBlZCB0byBhIHZhbGlkIGtleSBzaXplIGZvciB0aGUgY2lwaGVyLgorCitcc3Vic2VjdGlvbntBY2NlbGVyYXRpb259CitUaGUgbmV4dCBzZXQgb2YgZnVuY3Rpb25zIGNvdmVyIHRoZSBhY2NlbGVyYXRlZCBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjaXBoZXIgZGVzY3JpcHRvci4gIEFueSBjb21iaW5hdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMgbWF5IGJlIHNldCB0byBcdGV4dGJme05VTEx9IHRvIGluZGljYXRlCitpdCBpcyBub3Qgc3VwcG9ydGVkLiAgSW4gdGhvc2UgY2FzZXMgdGhlIHNvZnR3YXJlIGRlZmF1bHRzIGFyZSB1c2VkICh1c2luZyB0aGUgc2luZ2xlIEVDQiBibG9jayByb3V0aW5lcykuCisKK1xzdWJzdWJzZWN0aW9ue0FjY2VsZXJhdGVkIEVDQn0KK1RoZXNlIHR3byBmdW5jdGlvbnMgYXJlIG1lYW50IGZvciBjYXNlcyB3aGVyZSBhIHVzZXIgd2FudHMgdG8gZW5jcnlwdCAoaW4gRUNCIG1vZGUgbm8gbGVzcykgYW4gYXJyYXkgb2YgYmxvY2tzLiAgVGhlc2UgZnVuY3Rpb25zIGFyZSBhY2Nlc3NlZAordGhyb3VnaCB0aGUgYWNjZWxcX2VjYlxfZW5jcnlwdCBhbmQgYWNjZWxcX2VjYlxfZGVjcnlwdCBwb2ludGVycy4gIFRoZSBcdGV4dGl0e2Jsb2Nrc30gY291bnQgaXMgdGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2Vzcy4KKworXHN1YnN1YnNlY3Rpb257QWNjZWxlcmF0ZWQgQ0JDfSAKK1RoZXNlIHR3byBmdW5jdGlvbnMgYXJlIG1lYW50IGZvciBhY2NlbGVyYXRlZCBDQkMgZW5jcnlwdGlvbi4gIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgYWNjZWxcX2NiY1xfZW5jcnlwdCBhbmQgYWNjZWxcX2NiY1xfZGVjcnlwdCBwb2ludGVycy4KK1RoZSBcdGV4dGl0e2Jsb2Nrc30gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2Vzcy4gIFRoZSBcdGV4dGl0e0lWfSBpcyB0aGUgQ0JDIGluaXRpYWwgdmVjdG9yLiAgSXQgaXMgYW4gaW5wdXQgdXBvbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIG11c3QgYmUKK3VwZGF0ZWQgYnkgdGhlIGZ1bmN0aW9uIGJlZm9yZSByZXR1cm5pbmcuICAKKworXHN1YnN1YnNlY3Rpb257QWNjZWxlcmF0ZWQgQ1RSfQorVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgYWNjZWxlcmF0ZWQgQ1RSIGVuY3J5cHRpb24uICBJdCBpcyBhY2Nlc3NpYmxlIHRocm91Z2ggdGhlIGFjY2VsXF9jdHJcX2VuY3J5cHQgcG9pbnRlci4KK1RoZSBcdGV4dGl0e2Jsb2Nrc30gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2Vzcy4gIFRoZSBcdGV4dGl0e0lWfSBpcyB0aGUgQ1RSIGNvdW50ZXIgdmVjdG9yLiAgSXQgaXMgYW4gaW5wdXQgdXBvbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gYW5kIG11c3QgYmUKK3VwZGF0ZWQgYnkgdGhlIGZ1bmN0aW9uIGJlZm9yZSByZXR1cm5pbmcuICBUaGUgXHRleHRpdHttb2RlfSB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgY291bnRlciBpcyBiaWcgKG1vZGUgPSBDVFJcX0NPVU5URVJcX0JJR1xfRU5ESUFOKSBvciAKK2xpdHRsZSAobW9kZSA9IENUUlxfQ09VTlRFUlxfTElUVExFXF9FTkRJQU4pIGVuZGlhbi4KKworVGhpcyBmdW5jdGlvbiAoYW5kIHRoZSB3YXkgaXQncyBjYWxsZWQpIGRpZmZlcnMgZnJvbSB0aGUgb3RoZXIgdHdvIHNpbmNlIGN0clxfZW5jcnlwdCgpIGFsbG93cyBhbnkgc2l6ZSBpbnB1dCBwbGFpbnRleHQuICBUaGUgYWNjZWxlcmF0b3Igd2lsbCBvbmx5IGJlCitjYWxsZWQgaWYgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQuCisKK1xiZWdpbntlbnVtZXJhdGV9CisgICBcaXRlbSBUaGUgYWNjZWxlcmF0b3IgaXMgcHJlc2VudAorICAgXGl0ZW0gVGhlIENUUiBwYWQgaXMgZW1wdHkKKyAgIFxpdGVtIFRoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBpbnB1dCB0byBwcm9jZXNzIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgYmxvY2sgc2l6ZS4KK1xlbmR7ZW51bWVyYXRlfQorCitUaGUgXHRleHRpdHtDVFIgcGFkfSBpcyBlbXB0eSB3aGVuIGEgbXVsdGlwbGUgKGluY2x1ZGluZyB6ZXJvKSBibG9ja3Mgb2YgdGV4dCBoYXZlIGJlZW4gcHJvY2Vzc2VkLiAgVGhhdCBpcywgaWYgeW91IHBhc3MgaW4gc2V2ZW4gYnl0ZXMgdG8gQUVTLS1DVFIgbW9kZSB5b3Ugd291bGQgaGF2ZSB0byAKK3Bhc3MgaW4gYSBtaW5pbXVtIG9mIG5pbmUgZXh0cmEgYnl0ZXMgYmVmb3JlIHRoZSBhY2NlbGVyYXRvciBjb3VsZCBiZSBjYWxsZWQuICBUaGUgQ1RSIGFjY2VsZXJhdG9yIG11c3QgaW5jcmVtZW50IHRoZSBjb3VudGVyIChhbmQgc3RvcmUgaXQgYmFjayBpbnRvIHRoZSAKK2J1ZmZlciBwcm92aWRlZCkgYmVmb3JlIGVuY3J5cHRpbmcgaXQgdG8gY3JlYXRlIHRoZSBwYWQuICAKKworVGhlIGFjY2VsZXJhdG9yIHdpbGwgb25seSBiZSB1c2VkIHRvIGVuY3J5cHQgd2hvbGUgYmxvY2tzLiAgUGFydGlhbCBibG9ja3MgYXJlIGFsd2F5cyBoYW5kbGVkIGluIHNvZnR3YXJlLgorCitcc3Vic3Vic2VjdGlvbntBY2NlbGVyYXRlZCBMUld9CitUaGVzZSBmdW5jdGlvbnMgYXJlIG1lYW50IGZvciBhY2NlbGVyYXRlZCBMUlcuICBUaGV5IHByb2Nlc3MgYmxvY2tzIG9mIGlucHV0IGluIGxlbmd0aHMgb2YgbXVsdGlwbGVzIG9mIDE2IG9jdGV0cy4gIFRoZXkgbXVzdCBhY2NlcHQgdGhlIFx0ZXh0aXR7SVZ9IGFuZCBcdGV4dGl0e3R3ZWFrfQorc3RhdGUgdmFyaWFibGVzIGFuZCB1cGRhdGVkIHRoZW0gcHJpb3IgdG8gcmV0dXJuaW5nLiAgTm90ZSB0aGF0IHlvdSBtYXkgd2FudCB0byBkaXNhYmxlIFx0ZXh0YmZ7TFJXXF9UQUJMRVN9IGluIFx0ZXh0aXR7dG9tY3J5cHRcX2N1c3RvbS5ofSBpZiB5b3UgaW50ZW5kCit0byB1c2UgYWNjZWxlcmF0b3JzIGZvciBMUlcuCisKK1doaWxlIGJvdGggZW5jcnlwdCBhbmQgZGVjcnlwdCBhY2NlbGVyYXRvcnMgYXJlIG5vdCByZXF1aXJlZCBpdCBpcyBzdWdnZXN0ZWQgYXMgaXQgbWFrZXMgbHJ3XF9zZXRpdigpIG1vcmUgZWZmaWNpZW50LgorCitOb3RlIHRoYXQgY2FsbGluZyBscndcX2RvbmUoKSB3aWxsIG9ubHkgaW52b2tlIHRoZSBjaXBoZXJcX2Rlc2NyaXB0b3JbXS5kb25lKCkgZnVuY3Rpb24gb24gdGhlIFx0ZXh0aXR7c3ltbWV0cmljXF9rZXl9IHBhcmFtZXRlciBvZiB0aGUgTFJXIHN0YXRlLiAgVGhhdCBtZWFucyAKK2lmIHlvdXIgZGV2aWNlIHJlcXVpcmVzIGFueSAoTFJXIHNwZWNpZmljKSByZXNvdXJjZXMgeW91IHNob3VsZCBmcmVlIHRoZW0gaW4geW91ciBjaXBoZXJzKCkgZG9uZSBmdW5jdGlvbi4gIFRoZSBzaW1wbGVzdCB3YXkgdG8gdGhpbmsgb2YgaXQgaXMgdG8gd3JpdGUKK3RoZSBwbHVnaW4gc29sZWx5IHRvIGRvIExSVyB3aXRoIHRoZSBjaXBoZXIuICBUaGF0IHdheSBjaXBoZXJcX2Rlc2NyaXB0b3JbXS5zZXR1cCgpIG1lYW5zIHRvIGluaXQgTFJXIHJlc291cmNlcyBhbmQgY2lwaGVyXF9kZXNjcmlwdG9yW10uZG9uZSgpIG1lYW5zIHRvCitmcmVlIHRoZW0uCisKK1xzdWJzdWJzZWN0aW9ue0FjY2VsZXJhdGVkIENDTX0KK1RoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGFjY2VsZXJhdGVkIENDTSBlbmNyeXB0aW9uIG9yIGRlY3J5cHRpb24uICBJdCBwcm9jZXNzZXMgdGhlIGVudGlyZSBwYWNrZXQgaW4gb25lIGNhbGwuICBZb3UgY2FuIG9wdGltaXplIHRoZSB3b3JrIGZsb3cgc29tZXdoYXQKK2J5IGFsbG93aW5nIHRoZSBjYWxsZXIgdG8gY2FsbCB0aGUgc2V0dXAoKSBmdW5jdGlvbiBmaXJzdCB0byBzY2hlZHVsZSB0aGUga2V5IGlmIHlvdXIgYWNjZWxlcmF0b3IgY2Fubm90IGRvIHRoZSBrZXkgc2NoZWR1bGUgb24gdGhlIGZseSAoZm9yIGluc3RhbmNlKS4gIFRoaXMgCitmdW5jdGlvbiBNVVNUIHN1cHBvcnQgYm90aCBrZXkgcGFzc2luZyBtZXRob2RzLgorCitcYmVnaW57Y2VudGVyfQorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3RhYnVsYXJ9e3xyfHJ8bHx9CitcaGxpbmUgXHRleHRiZntrZXl9ICYgXHRleHRiZnt1c2tleX0gJiBcdGV4dGJme1NvdXJjZSBvZiBrZXl9IFxcCitcaGxpbmUgTlVMTCAgICAgICAgICYgTlVMTCAgICAgICAgICAgJiBFcnJvciwgbm90IHN1cHBvcnRlZCBcXAorXGhsaW5lIG5vbi1OVUxMICAgICAmIE5VTEwgICAgICAgICAgICYgVXNlIGtleSwgZG8gYSBrZXkgc2NoZWR1bGUgXFwKK1xobGluZSBOVUxMICAgICAgICAgJiBub24tTlVMTCAgICAgICAmIFVzZSB1c2tleSwga2V5IHNjaGVkdWxlIG5vdCByZXF1aXJlZCBcXAorXGhsaW5lIG5vbi1OVUxMICAgICAmIG5vbi1OVUxMICAgICAgICYgVXNlIHVza2V5LCBrZXkgc2NoZWR1bGUgbm90IHJlcXVpcmVkIFxcCitcaGxpbmUKK1xlbmR7dGFidWxhcn0KK1xlbmR7c21hbGx9CitcZW5ke2NlbnRlcn0KKworXGluZGV4e2NjbVxfbWVtb3J5KCl9IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2FsbHMgY2NtXF9tZW1vcnkoKS4KKworXHN1YnN1YnNlY3Rpb257QWNjZWxlcmF0ZWQgR0NNfQorXGluZGV4e2djbVxfbWVtb3J5KCl9CitUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciBhY2NlbGVyYXRlZCBHQ00gZW5jcnlwdGlvbiBvciBkZWNyeXB0aW9uLiAgSXQgcHJvY2Vzc2VzIHRoZSBlbnRpcmUgcGFja2V0IGluIG9uZSBjYWxsLiAgTm90ZSB0aGF0IHRoZSBzZXR1cCgpIGZ1bmN0aW9uIHdpbGwgbm90CitiZSBjYWxsZWQgcHJpb3IgdG8gdGhpcy4gIFRoaXMgZnVuY3Rpb24gbXVzdCBoYW5kbGUgc2NoZWR1bGluZyB0aGUga2V5IHByb3ZpZGVkIG9uIGl0cyBvd24uICBJdCBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBjYWxscyBnY21cX21lbW9yeSgpLgorCitcc3Vic3Vic2VjdGlvbntBY2NlbGVyYXRlZCBPTUFDfQorXGluZGV4e29tYWNcX21lbW9yeSgpfQorVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBwZXJmb3JtIGFuIG9wdGltaXplZCBPTUFDMSAoQ01BQykgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlIGNvbXB1dGF0aW9uIHdoZW4gdGhlIHVzZXIgY2FsbHMgb21hY1xfbWVtb3J5KCkuICAKKworXHN1YnN1YnNlY3Rpb257QWNjZWxlcmF0ZWQgWENCQy1NQUN9CitcaW5kZXh7eGNiY1xfbWVtb3J5KCl9CitUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIHBlcmZvcm0gYW4gb3B0aW1pemVkIFhDQkMtTUFDIG1lc3NhZ2UgYXV0aGVudGljYXRpb24gY29kZSBjb21wdXRhdGlvbiB3aGVuIHRoZSB1c2VyIGNhbGxzIHhjYmNcX21lbW9yeSgpLiAgCisKK1xzdWJzdWJzZWN0aW9ue0FjY2VsZXJhdGVkIEY5fQorXGluZGV4e2Y5XF9tZW1vcnkoKX0KK1RoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gcGVyZm9ybSBhbiBvcHRpbWl6ZWQgRjkgbWVzc2FnZSBhdXRoZW50aWNhdGlvbiBjb2RlIGNvbXB1dGF0aW9uIHdoZW4gdGhlIHVzZXIgY2FsbHMgZjlcX21lbW9yeSgpLiAgTGlrZSBmOVxfbWVtb3J5KCksIGl0IHJlcXVpcmVzCit0aGUgY2FsbGVyIHRvIHBlcmZvcm0gYW55IDNHUFAgcmVsYXRlZCBwYWRkaW5nIGJlZm9yZSBjYWxsaW5nIGluIG9yZGVyIHRvIGVuc3VyZSBwcm9wZXIgY29tcGxpYW5jZSB3aXRoIEY5LgorCisKK1xteXNlY3Rpb257T25lLS1XYXkgSGFzaGVzfQorVGhlIGhhc2ggZnVuY3Rpb25zIGFyZSBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBsdGNcX2hhc2hcX2Rlc2NyaXB0b3Igc3RydWN0dXJlLgorCitcYmVnaW57c21hbGx9CitcYmVnaW57dmVyYmF0aW19CitzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciB7CisgICAgLyoqIG5hbWUgb2YgaGFzaCAqLworICAgIGNoYXIgKm5hbWU7CisKKyAgICAvKiogaW50ZXJuYWwgSUQgKi8KKyAgICB1bnNpZ25lZCBjaGFyIElEOworCisgICAgLyoqIFNpemUgb2YgZGlnZXN0IGluIG9jdGV0cyAqLworICAgIHVuc2lnbmVkIGxvbmcgaGFzaHNpemU7CisKKyAgICAvKiogSW5wdXQgYmxvY2sgc2l6ZSBpbiBvY3RldHMgKi8KKyAgICB1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZTsKKworICAgIC8qKiBBU04uMSBPSUQgKi8KKyAgICB1bnNpZ25lZCBsb25nIE9JRFsxNl07CisKKyAgICAvKiogTGVuZ3RoIG9mIERFUiBlbmNvZGluZyAqLworICAgIHVuc2lnbmVkIGxvbmcgT0lEbGVuOworCisgICAgLyoqIEluaXQgYSBoYXNoIHN0YXRlCisgICAgICBAcGFyYW0gaGFzaCAgIFRoZSBoYXNoIHRvIGluaXRpYWxpemUKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICAgICovCisgICAgaW50ICgqaW5pdCkoaGFzaF9zdGF0ZSAqaGFzaCk7CisKKyAgICAvKiogUHJvY2VzcyBhIGJsb2NrIG9mIGRhdGEgCisgICAgICBAcGFyYW0gaGFzaCAgIFRoZSBoYXNoIHN0YXRlCisgICAgICBAcGFyYW0gaW4gICAgIFRoZSBkYXRhIHRvIGhhc2gKKyAgICAgIEBwYXJhbSBpbmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAob2N0ZXRzKQorICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAgKi8KKyAgICBpbnQgKCpwcm9jZXNzKSggICAgICAgICBoYXNoX3N0YXRlICpoYXNoLCAKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4pOworCisgICAgLyoqIFByb2R1Y2UgdGhlIGRpZ2VzdCBhbmQgc3RvcmUgaXQKKyAgICAgIEBwYXJhbSBoYXNoICAgVGhlIGhhc2ggc3RhdGUKKyAgICAgIEBwYXJhbSBvdXQgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBkaWdlc3QKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICAgICovCisgICAgaW50ICgqZG9uZSkoICAgaGFzaF9zdGF0ZSAqaGFzaCwgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0KTsKKworICAgIC8qKiBTZWxmLXRlc3QKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgCisgICAgICAgICAgICAgIENSWVBUX05PUCBpZiBzZWxmLXRlc3RzIGhhdmUgYmVlbiBkaXNhYmxlZAorICAgICovCisgICAgaW50ICgqdGVzdCkodm9pZCk7CisKKyAgICAvKiBhY2NlbGVyYXRlZCBobWFjIGNhbGxiYWNrOiBpZiB5b3UgbmVlZCB0by1kbyAKKyAgICAgICBtdWx0aXBsZSBwYWNrZXRzIGp1c3QgdXNlIHRoZSBnZW5lcmljIGhtYWNfbWVtb3J5IAorICAgICAgIGFuZCBwcm92aWRlIGEgaGFzaCBjYWxsYmFjayAKKyAgICAqLworICAgIGludCAgKCpobWFjX2Jsb2NrKShjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK307CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworXHN1YnNlY3Rpb257TmFtZX0KK1RoaXMgaXMgdGhlIG5hbWUgdGhlIGhhc2ggaXMga25vd24gYnkgYW5kIHdoYXQgZmluZFxfaGFzaCgpIHdpbGwgbG9vayBmb3IuCisKK1xzdWJzZWN0aW9ue0ludGVybmFsIElEfQorVGhpcyBpcyB0aGUgaW50ZXJuYWwgSUQgYnl0ZSB1c2VkIHRvIGRpc3Rpbmd1aXNoIHRoZSBoYXNoIGZyb20gb3RoZXIgaGFzaGVzLgorCitcc3Vic2VjdGlvbntEaWdlc3QgU2l6ZX0KK1RoZSBcdGV4dGl0e2hhc2hzaXplfSB2YXJpYWJsZSBpbmRpY2F0ZXMgdGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGluIG9jdGV0cy4KKworXHN1YnNlY3Rpb257QmxvY2sgU2l6ZX0KK1RoZSBcdGV4dGl0e2Jsb2Nrc2l6ZX0gdmFyaWFibGUgaW5kaWNhdGVzIHRoZSBsZW5ndGggb2YgaW5wdXQgKGluIG9jdGV0cykgdGhhdCB0aGUgaGFzaCBwcm9jZXNzZXMgaW4gYSBnaXZlbgoraW52b2NhdGlvbi4KKworXHN1YnNlY3Rpb257T0lEIElkZW50aWZpZXJ9CitUaGlzIGlzIHRoZSB1bml2ZXJzYWwgQVNOLjEgT2JqZWN0IElkZW50aWZpZXIgZm9yIHRoZSBoYXNoLgorCitcc3Vic2VjdGlvbntJbml0aWFsaXphdGlvbn0KK1RoZSBpbml0IGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBoYXNoIGFuZCBwcmVwYXJlcyBpdCB0byBwcm9jZXNzIG1lc3NhZ2UgYnl0ZXMuCisKK1xzdWJzZWN0aW9ue1Byb2Nlc3N9CitUaGlzIHByb2Nlc3NlcyBtZXNzYWdlIGJ5dGVzLiAgVGhlIGFsZ29yaXRobSBtdXN0IGFjY2VwdCBhbnkgbGVuZ3RoIG9mIGlucHV0IHRoYXQgdGhlIGhhc2ggd291bGQgYWxsb3cuICBUaGUgaW5wdXQgaXMgbm90CitndWFyYW50ZWVkIHRvIGJlIGEgbXVsdGlwbGUgb2YgdGhlIGJsb2NrIHNpemUgaW4gbGVuZ3RoLgorCitcc3Vic2VjdGlvbntEb25lfQorVGhlIGRvbmUgZnVuY3Rpb24gdGVybWluYXRlcyB0aGUgaGFzaCBhbmQgcmV0dXJucyB0aGUgbWVzc2FnZSBkaWdlc3QuCisKK1xzdWJzZWN0aW9ue0FjY2VsZXJhdGlvbn0KK0EgY29tcGF0aWJsZSBhY2NlbGVyYXRvciBtdXN0IGFsbG93IHByb2Nlc3NpbmcgZGF0YSBpbiBhbnkgZ3JhbnVsYXJpdHkgd2hpY2ggbWF5IHJlcXVpcmUgaW50ZXJuYWwgcGFkZGluZyBvbiB0aGUgZHJpdmVyIHNpZGUuCisKK1xzdWJzZWN0aW9ue0hNQUMgQWNjZWxlcmF0aW9ufQorVGhlIGhtYWNcX2Jsb2NrKCkgY2FsbGJhY2sgaXMgbWVhbnQgZm9yIHNpbmdsZS0tc2hvdCBvcHRpbWl6ZWQgSE1BQyBpbXBsZW1lbnRhdGlvbnMuICBJdCBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgaG1hY1xfbWVtb3J5KCkgaWYgcHJlc2VudC4gIElmIHlvdSBuZWVkCit0byBiZSBhYmxlIHRvIHByb2Nlc3MgbXVsdGlwbGUgYmxvY2tzIHBlciBNQUMgdGhlbiB5b3Ugd2lsbCBoYXZlIHRvIHNpbXBseSBwcm92aWRlIGEgcHJvY2VzcygpIGNhbGxiYWNrIGFuZCB1c2UgaG1hY1xfbWVtb3J5KCkgYXMgcHJvdmlkZWQgaW4gTGliVG9tQ3J5cHQuCisKK1xteXNlY3Rpb257UHNldWRvLS1SYW5kb20gTnVtYmVyIEdlbmVyYXRvcnN9CitUaGUgcHNldWRvLS1yYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgYXJlIGFjY2Vzc2libGUgdGhyb3VnaCB0aGUgbHRjXF9wcm5nXF9kZXNjcmlwdG9yIHN0cnVjdHVyZS4KKworXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorc3RydWN0IGx0Y19wcm5nX2Rlc2NyaXB0b3IgeworICAgIC8qKiBOYW1lIG9mIHRoZSBQUk5HICovCisgICAgY2hhciAqbmFtZTsKKworICAgIC8qKiBzaXplIGluIGJ5dGVzIG9mIGV4cG9ydGVkIHN0YXRlICovCisgICAgaW50ICBleHBvcnRfc2l6ZTsKKworICAgIC8qKiBTdGFydCBhIFBSTkcgc3RhdGUKKyAgICAgICAgQHBhcmFtIHBybmcgICBbb3V0XSBUaGUgc3RhdGUgdG8gaW5pdGlhbGl6ZQorICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICAqLworICAgIGludCAoKnN0YXJ0KShwcm5nX3N0YXRlICpwcm5nKTsKKworICAgIC8qKiBBZGQgZW50cm9weSB0byB0aGUgUFJORworICAgICAgICBAcGFyYW0gaW4gICAgICAgICBUaGUgZW50cm9weQorICAgICAgICBAcGFyYW0gaW5sZW4gICAgICBMZW5ndGggb2YgdGhlIGVudHJvcHkgKG9jdGV0cykKKyAgICAgICAgQHBhcmFtIHBybmcgICAgICAgVGhlIFBSTkcgc3RhdGUKKyAgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAgKi8KKyAgICBpbnQgKCphZGRfZW50cm9weSkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcpOworCisgICAgLyoqIFJlYWR5IGEgUFJORyBzdGF0ZSB0byByZWFkIGZyb20KKyAgICAgICAgQHBhcmFtIHBybmcgICAgICAgVGhlIFBSTkcgc3RhdGUgdG8gcmVhZHkKKyAgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAgKi8KKyAgICBpbnQgKCpyZWFkeSkocHJuZ19zdGF0ZSAqcHJuZyk7CisKKyAgICAvKiogUmVhZCBmcm9tIHRoZSBQUk5HCisgICAgICAgIEBwYXJhbSBvdXQgICAgIFtvdXRdIFdoZXJlIHRvIHN0b3JlIHRoZSBkYXRhCisgICAgICAgIEBwYXJhbSBvdXRsZW4gIExlbmd0aCBvZiBkYXRhIGRlc2lyZWQgKG9jdGV0cykKKyAgICAgICAgQHBhcmFtIHBybmcgICAgVGhlIFBSTkcgc3RhdGUgdG8gcmVhZCBmcm9tCisgICAgICAgIEByZXR1cm4gTnVtYmVyIG9mIG9jdGV0cyByZWFkCisgICAgKi8KKyAgICB1bnNpZ25lZCBsb25nICgqcmVhZCkodW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZyk7CisKKyAgICAvKiogVGVybWluYXRlIGEgUFJORyBzdGF0ZQorICAgICAgICBAcGFyYW0gcHJuZyAgIFRoZSBQUk5HIHN0YXRlIHRvIHRlcm1pbmF0ZQorICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICAqLworICAgIGludCAoKmRvbmUpKHBybmdfc3RhdGUgKnBybmcpOworCisgICAgLyoqIEV4cG9ydCBhIFBSTkcgc3RhdGUgIAorICAgICAgICBAcGFyYW0gb3V0ICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBzdGF0ZQorICAgICAgICBAcGFyYW0gb3V0bGVuICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplCisgICAgICAgIEBwYXJhbSBwcm5nICAgIFRoZSBQUk5HIHRvIGV4cG9ydAorICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICAqLworICAgIGludCAoKnBleHBvcnQpKHVuc2lnbmVkIGNoYXIgKm91dCwgCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nKTsKKworICAgIC8qKiBJbXBvcnQgYSBQUk5HIHN0YXRlCisgICAgICAgIEBwYXJhbSBpbiAgICAgIFRoZSBkYXRhIHRvIGltcG9ydAorICAgICAgICBAcGFyYW0gaW5sZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGltcG9ydCAob2N0ZXRzKQorICAgICAgICBAcGFyYW0gcHJuZyAgICBUaGUgUFJORyB0byBpbml0aWFsaXplL2ltcG9ydAorICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICAqLworICAgIGludCAoKnBpbXBvcnQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZyk7CisKKyAgICAvKiogU2VsZi10ZXN0IHRoZSBQUk5HCisgICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgCisgICAgICAgICAgICAgICAgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdGluZyBoYXMgYmVlbiBkaXNhYmxlZAorICAgICovCisgICAgaW50ICgqdGVzdCkodm9pZCk7Cit9OworXGVuZHt2ZXJiYXRpbX0KK1xlbmR7c21hbGx9CisKK1xzdWJzZWN0aW9ue05hbWV9CitUaGUgbmFtZSBieSB3aGljaCBmaW5kXF9wcm5nKCkgd2lsbCBmaW5kIHRoZSBQUk5HLgorCitcc3Vic2VjdGlvbntFeHBvcnQgU2l6ZX0KK1doZW4gYW4gUFJORyBzdGF0ZSBpcyB0byBiZSBleHBvcnRlZCBmb3IgZnV0dXJlIHVzZSB5b3Ugc3BlY2lmeSB0aGUgc3BhY2UgcmVxdWlyZWQgaW4gdGhpcyB2YXJpYWJsZS4KKworXHN1YnNlY3Rpb257U3RhcnR9CitJbml0aWFsaXplIHRoZSBQUk5HIGFuZCBtYWtlIGl0IHJlYWR5IHRvIGFjY2VwdCBlbnRyb3B5LgorCitcc3Vic2VjdGlvbntFbnRyb3B5IEFkZGl0aW9ufQorQWRkIGVudHJvcHkgdG8gdGhlIFBSTkcgc3RhdGUuICBUaGUgZXhhY3QgYmVoYXZpb3VyIG9mIHRoaXMgZnVuY3Rpb24gZGVwZW5kcyBvbiB0aGUgcGFydGljdWxhcnMgb2YgdGhlIFBSTkcuCisKK1xzdWJzZWN0aW9ue1JlYWR5fQorVGhpcyBmdW5jdGlvbiBtYWtlcyB0aGUgUFJORyByZWFkeSB0byByZWFkIGZyb20gYnkgcHJvY2Vzc2luZyB0aGUgZW50cm9weSBhZGRlZC4gIFRoZSBiZWhhdmlvdXIgb2YgdGhpcyBmdW5jdGlvbiBkZXBlbmRzCitvbiB0aGUgc3BlY2lmaWMgUFJORyB1c2VkLgorCitcc3Vic2VjdGlvbntSZWFkfQorUmVhZCBmcm9tIHRoZSBQUk5HIGFuZCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyByZWFkLiAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYXZlIHRvIGZpbGwgdGhlIGJ1ZmZlciBidXQgaXQgaXMgYmVzdCAKK2lmIGl0IGRvZXMgYXMgbWFueSBwcm90b2NvbHMgZG8gbm90IHJldHJ5IHJlYWRzIGFuZCB3aWxsIGZhaWwgb24gdGhlIGZpcnN0IHRyeS4KKworXHN1YnNlY3Rpb257RG9uZX0KK1Rlcm1pbmF0ZSBhIFBSTkcgc3RhdGUuICBUaGUgYmVoYXZpb3VyIG9mIHRoaXMgZnVuY3Rpb24gZGVwZW5kcyBvbiB0aGUgcGFydGljdWxhciBQUk5HIHVzZWQuCisKK1xzdWJzZWN0aW9ue0V4cG9ydGluZyBhbmQgSW1wb3J0aW5nfQorQW4gZXhwb3J0ZWQgUFJORyBzdGF0ZSBpcyBkYXRhIHRoYXQgdGhlIFBSTkcgY2FuIGxhdGVyIGltcG9ydCB0byByZXN1bWUgYWN0aXZpdHkuICBUaGV5J3JlIG5vdCBtZWFudCB0byByZXN1bWUgXHRleHRpdHt0aGUgc2FtZSBzZXNzaW9ufQorYnV0IHNob3VsZCBhdCBsZWFzdCBtYWludGFpbiB0aGUgc2FtZSBsZXZlbCBvZiBzdGF0ZSBlbnRyb3B5LgorCitcbXlzZWN0aW9ue0JpZ051bSBNYXRoIERlc2NyaXB0b3JzfQorVGhlIGxpYnJhcnkgYWxzbyBtYWtlcyB1c2Ugb2YgdGhlIG1hdGggZGVzY3JpcHRvcnMgdG8gYWNjZXNzIG1hdGggZnVuY3Rpb25zLiAgV2hpbGUgYmlnbnVtIG1hdGggbGlicmFyaWVzIHVzdWFsbHkgZGlmZmVyIGluIGltcGxlbWVudGF0aW9uCitpdCBoYXNuJ3QgcHJvdmVuIGhhcmQgdG8gd3JpdGUgXHRleHRpdHtnbHVlfSB0byB1c2UgbWF0aCBsaWJyYXJpZXMgc28gZmFyLiAgVGhlIGJhc2ljIGRlc2NyaXB0b3IgbG9va3MgbGlrZS4KKworXGJlZ2lue3NtYWxsfQorXGJlZ2lue3ZlcmJhdGltfQorLyoqIG1hdGggZGVzY3JpcHRvciAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgLyoqIE5hbWUgb2YgdGhlIG1hdGggcHJvdmlkZXIgKi8KKyAgIGNoYXIgKm5hbWU7CisKKyAgIC8qKiBCaXRzIHBlciBkaWdpdCwgYW1vdW50IG9mIGJpdHMgbXVzdCBmaXQgaW4gYW4gdW5zaWduZWQgbG9uZyAqLworICAgaW50ICBiaXRzX3Blcl9kaWdpdDsKKworLyogLS0tLSBpbml0L2RlaW5pdCBmdW5jdGlvbnMgLS0tLSAqLworCisgICAvKiogaW5pdGlhbGl6ZSBhIGJpZ251bQorICAgICBAcGFyYW0gICBhICAgICBUaGUgbnVtYmVyIHRvIGluaXRpYWxpemUKKyAgICAgQHJldHVybiAgQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmluaXQpKHZvaWQgKiphKTsKKyAgIAorICAgLyoqIGluaXQgY29weSAKKyAgICAgQHBhcmFtICBkc3QgICAgVGhlIG51bWJlciB0byBpbml0aWFsaXplIGFuZCB3cml0ZSB0bworICAgICBAcGFyYW0gIHNyYyAgICBUaGUgbnVtYmVyIHRvIGNvcHkgZnJvbQorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCppbml0X2NvcHkpKHZvaWQgKipkc3QsIHZvaWQgKnNyYyk7CisKKyAgIC8qKiBkZWluaXQgCisgICAgICBAcGFyYW0gICBhICAgIFRoZSBudW1iZXIgdG8gZnJlZQorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgdm9pZCAoKmRlaW5pdCkodm9pZCAqYSk7CisKKy8qIC0tLS0gZGF0YSBtb3ZlbWVudCAtLS0tICovCisKKyAgIC8qKiBjb3B5IAorICAgICAgQHBhcmFtICAgc3JjICAgVGhlIG51bWJlciB0byBjb3B5IGZyb20KKyAgICAgIEBwYXJhbSAgIGRzdCAgIFRoZSBudW1iZXIgdG8gd3JpdGUgdG8gCisgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpjb3B5KSh2b2lkICpzcmMsIHZvaWQgKmRzdCk7CisKKy8qIC0tLS0gdHJpdmlhbCBsb3cgbGV2ZWwgZnVuY3Rpb25zIC0tLS0gKi8KKworICAgLyoqIHNldCBzbWFsbCBjb25zdGFudCAKKyAgICAgIEBwYXJhbSBhICAgIE51bWJlciB0byB3cml0ZSB0bworICAgICAgQHBhcmFtIG4gICAgU291cmNlIHVwdG8gYml0c19wZXJfZGlnaXQgKG1lYW50IGZvciBzbWFsbCBjb25zdGFudHMpIAorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqc2V0X2ludCkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBuKTsKKworICAgLyoqIGdldCBzbWFsbCBjb25zdGFudCAKKyAgICAgIEBwYXJhbSBhICBTbWFsbCBudW1iZXIgdG8gcmVhZAorICAgICAgQHJldHVybiAgIFRoZSBsb3dlciBiaXRzX3Blcl9kaWdpdCBvZiB0aGUgaW50ZWdlciAodW5zaWduZWQpCisgICAqLworICAgdW5zaWduZWQgbG9uZyAoKmdldF9pbnQpKHZvaWQgKmEpOworCisgICAvKiogZ2V0IGRpZ2l0IG4gCisgICAgIEBwYXJhbSBhICBUaGUgbnVtYmVyIHRvIHJlYWQgZnJvbQorICAgICBAcGFyYW0gbiAgVGhlIG51bWJlciBvZiB0aGUgZGlnaXQgdG8gZmV0Y2gKKyAgICAgQHJldHVybiAgVGhlIGJpdHNfcGVyX2RpZ2l0ICBzaXplZCBuJ3RoIGRpZ2l0IG9mIGEKKyAgICovCisgICB1bnNpZ25lZCBsb25nICgqZ2V0X2RpZ2l0KSh2b2lkICphLCBpbnQgbik7CisKKyAgIC8qKiBHZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgdGhhdCByZXByZXNlbnQgdGhlIG51bWJlcgorICAgICBAcGFyYW0gYSAgIFRoZSBudW1iZXIgdG8gY291bnQKKyAgICAgQHJldHVybiBUaGUgbnVtYmVyIG9mIGRpZ2l0cyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgbnVtYmVyCisgICAqLworICAgaW50ICgqZ2V0X2RpZ2l0X2NvdW50KSh2b2lkICphKTsKKworICAgLyoqIGNvbXBhcmUgdHdvIGludGVnZXJzCisgICAgIEBwYXJhbSBhICAgVGhlIGxlZnQgc2lkZSBpbnRlZ2VyCisgICAgIEBwYXJhbSBiICAgVGhlIHJpZ2h0IHNpZGUgaW50ZWdlcgorICAgICBAcmV0dXJuIExUQ19NUF9MVCBpZiBhIDwgYiwgCisgICAgICAgICAgICAgTFRDX01QX0dUIGlmIGEgPiBiIGFuZCAKKyAgICAgICAgICAgICBMVENfTVBfRVEgb3RoZXJ3aXNlLiAgKHNpZ25lZCBjb21wYXJpc29uKQorICAgKi8KKyAgIGludCAoKmNvbXBhcmUpKHZvaWQgKmEsIHZvaWQgKmIpOworCisgICAvKiogY29tcGFyZSBhZ2FpbnN0IGludCAKKyAgICAgQHBhcmFtIGEgICBUaGUgbGVmdCBzaWRlIGludGVnZXIKKyAgICAgQHBhcmFtIGIgICBUaGUgcmlnaHQgc2lkZSBpbnRlZ2VyICh1cHRvIGJpdHNfcGVyX2RpZ2l0KQorICAgICBAcmV0dXJuIExUQ19NUF9MVCBpZiBhIDwgYiwgCisgICAgICAgICAgICAgTFRDX01QX0dUIGlmIGEgPiBiIGFuZCAKKyAgICAgICAgICAgICBMVENfTVBfRVEgb3RoZXJ3aXNlLiAgKHNpZ25lZCBjb21wYXJpc29uKQorICAgKi8KKyAgIGludCAoKmNvbXBhcmVfZCkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBuKTsKKworICAgLyoqIENvdW50IHRoZSBudW1iZXIgb2YgYml0cyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlcgorICAgICBAcGFyYW0gYSAgIFRoZSBpbnRlZ2VyIHRvIGNvdW50CisgICAgIEByZXR1cm4gVGhlIG51bWJlciBvZiBiaXRzIHJlcXVpcmVkIHRvIHJlcHJlc2VudCB0aGUgaW50ZWdlcgorICAgKi8KKyAgIGludCAoKmNvdW50X2JpdHMpKHZvaWQgKiBhKTsKKworICAgLyoqIENvdW50IHRoZSBudW1iZXIgb2YgTFNCIGJpdHMgd2hpY2ggYXJlIHplcm8gCisgICAgIEBwYXJhbSBhICAgVGhlIGludGVnZXIgdG8gY291bnQKKyAgICAgQHJldHVybiBUaGUgbnVtYmVyIG9mIGNvbnRpZ3VvdXMgemVybyBMU0IgYml0cworICAgKi8KKyAgIGludCAoKmNvdW50X2xzYl9iaXRzKSh2b2lkICphKTsKKworICAgLyoqIENvbXB1dGUgYSBwb3dlciBvZiB0d28KKyAgICAgQHBhcmFtIGEgIFRoZSBpbnRlZ2VyIHRvIHN0b3JlIHRoZSBwb3dlciBpbgorICAgICBAcGFyYW0gbiAgVGhlIHBvd2VyIG9mIHR3byB5b3Ugd2FudCB0byBzdG9yZSAoYSA9IDJebikKKyAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqdHdvZXhwdCkodm9pZCAqYSAsIGludCBuKTsKKworLyogLS0tLSByYWRpeCBjb252ZXJzaW9ucyAtLS0tICovCisgICAKKyAgIC8qKiByZWFkIGFzY2lpIHN0cmluZyAKKyAgICAgQHBhcmFtIGEgICAgIFRoZSBpbnRlZ2VyIHRvIHN0b3JlIGludG8KKyAgICAgQHBhcmFtIHN0ciAgIFRoZSBzdHJpbmcgdG8gcmVhZAorICAgICBAcGFyYW0gcmFkaXggVGhlIHJhZGl4IHRoZSBpbnRlZ2VyIGhhcyBiZWVuIHJlcHJlc2VudGVkIGluICgyLTY0KQorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpyZWFkX3JhZGl4KSh2b2lkICphLCBjb25zdCBjaGFyICpzdHIsIGludCByYWRpeCk7CisKKyAgIC8qKiB3cml0ZSBudW1iZXIgdG8gc3RyaW5nCisgICAgIEBwYXJhbSBhICAgICBUaGUgaW50ZWdlciB0byBzdG9yZQorICAgICBAcGFyYW0gc3RyICAgVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgc3RyaW5nCisgICAgIEBwYXJhbSByYWRpeCBUaGUgcmFkaXggdGhlIGludGVnZXIgaXMgdG8gYmUgcmVwcmVzZW50ZWQgaW4gKDItNjQpCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKndyaXRlX3JhZGl4KSh2b2lkICphLCBjaGFyICpzdHIsIGludCByYWRpeCk7CisKKyAgIC8qKiBnZXQgc2l6ZSBhcyB1bnNpZ25lZCBjaGFyIHN0cmluZyAKKyAgICAgQHBhcmFtIGEgIFRoZSBpbnRlZ2VyIHRvIGdldCB0aGUgc2l6ZQorICAgICBAcmV0dXJuICAgVGhlIGxlbmd0aCBvZiB0aGUgaW50ZWdlciBpbiBvY3RldHMKKyAgICovCisgICB1bnNpZ25lZCBsb25nICgqdW5zaWduZWRfc2l6ZSkodm9pZCAqYSk7CisKKyAgIC8qKiBzdG9yZSBhbiBpbnRlZ2VyIGFzIGFuIGFycmF5IG9mIG9jdGV0cyAKKyAgICAgQHBhcmFtIHNyYyAgIFRoZSBpbnRlZ2VyIHRvIHN0b3JlCisgICAgIEBwYXJhbSBkc3QgICBUaGUgYnVmZmVyIHRvIHN0b3JlIHRoZSBpbnRlZ2VyIGluCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnVuc2lnbmVkX3dyaXRlKSh2b2lkICpzcmMsIHVuc2lnbmVkIGNoYXIgKmRzdCk7CisKKyAgIC8qKiByZWFkIGFuIGFycmF5IG9mIG9jdGV0cyBhbmQgc3RvcmUgYXMgaW50ZWdlcgorICAgICBAcGFyYW0gZHN0ICAgVGhlIGludGVnZXIgdG8gbG9hZAorICAgICBAcGFyYW0gc3JjICAgVGhlIGFycmF5IG9mIG9jdGV0cyAKKyAgICAgQHBhcmFtIGxlbiAgIFRoZSBudW1iZXIgb2Ygb2N0ZXRzIAorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCp1bnNpZ25lZF9yZWFkKSggICAgICAgICB2b2lkICpkc3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqc3JjLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIGxlbik7CisKKy8qIC0tLS0gYmFzaWMgbWF0aCAtLS0tICovCisKKyAgIC8qKiBhZGQgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgKyBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCphZGQpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisgICAvKiogYWRkIHR3byBpbnRlZ2VycyAKKyAgICAgQHBhcmFtIGEgICBUaGUgZmlyc3Qgc291cmNlIGludGVnZXIKKyAgICAgQHBhcmFtIGIgICBUaGUgc2Vjb25kIHNvdXJjZSBpbnRlZ2VyIAorICAgICAgICAgICAgICAgKHNpbmdsZSBkaWdpdCBvZiB1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgKyBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCphZGRpKSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpOworCisgICAvKiogc3VidHJhY3QgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgLSBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpzdWIpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisgICAvKiogc3VidHJhY3QgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIgCisgICAgICAgICAgICAgICAgKHNpbmdsZSBkaWdpdCBvZiB1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgLSBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpzdWJpKSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpOworCisgICAvKiogbXVsdGlwbHkgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIgCisgICAgICAgICAgICAgICAgKHNpbmdsZSBkaWdpdCBvZiB1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgKiBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptdWwpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisgICAvKiogbXVsdGlwbHkgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIgCisgICAgICAgICAgICAgICAgKHNpbmdsZSBkaWdpdCBvZiB1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgKiBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptdWxpKSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpOworCisgICAvKiogU3F1YXJlIGFuIGludGVnZXIKKyAgICAgQHBhcmFtIGEgICAgVGhlIGludGVnZXIgdG8gc3F1YXJlCisgICAgIEBwYXJhbSBiICAgIFRoZSBkZXN0aW5hdGlvbgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpzcXIpKHZvaWQgKmEsIHZvaWQgKmIpOworCisgICAvKiogRGl2aWRlIGFuIGludGVnZXIKKyAgICAgQHBhcmFtIGEgICAgVGhlIGRpdmlkZW5kCisgICAgIEBwYXJhbSBiICAgIFRoZSBkaXZpc29yCisgICAgIEBwYXJhbSBjICAgIFRoZSBxdW90aWVudCAoY2FuIGJlIE5VTEwgdG8gc2lnbmlmeSBkb24ndCBjYXJlKQorICAgICBAcGFyYW0gZCAgICBUaGUgcmVtYWluZGVyIChjYW4gYmUgTlVMTCB0byBzaWduaWZ5IGRvbid0IGNhcmUpCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmRpdikodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCk7CisKKyAgIC8qKiBkaXZpZGUgYnkgdHdvIAorICAgICAgQHBhcmFtICBhICAgVGhlIGludGVnZXIgdG8gZGl2aWRlIChzaGlmdCByaWdodCkKKyAgICAgIEBwYXJhbSAgYiAgIFRoZSBkZXN0aW5hdGlvbiAKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmRpdl8yKSh2b2lkICphLCB2b2lkICpiKTsKKworICAgLyoqIEdldCByZW1haW5kZXIgKHNtYWxsIHZhbHVlKQorICAgICAgQHBhcmFtICBhICAgIFRoZSBpbnRlZ2VyIHRvIHJlZHVjZQorICAgICAgQHBhcmFtICBiICAgIFRoZSBtb2R1bHVzICh1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgIEBwYXJhbSAgYyAgICBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSByZXNpZHVlCisgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptb2RpKSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgKmMpOworCisgICAvKiogZ2NkIAorICAgICAgQHBhcmFtICBhICAgICBUaGUgZmlyc3QgaW50ZWdlcgorICAgICAgQHBhcmFtICBiICAgICBUaGUgc2Vjb25kIGludGVnZXIKKyAgICAgIEBwYXJhbSAgYyAgICAgVGhlIGRlc3RpbmF0aW9uIGZvciAoYSwgYikKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmdjZCkodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYyk7CisKKyAgIC8qKiBsY20gCisgICAgICBAcGFyYW0gIGEgICAgIFRoZSBmaXJzdCBpbnRlZ2VyCisgICAgICBAcGFyYW0gIGIgICAgIFRoZSBzZWNvbmQgaW50ZWdlcgorICAgICAgQHBhcmFtICBjICAgICBUaGUgZGVzdGluYXRpb24gZm9yIFthLCBiXQorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqbGNtKSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKTsKKworICAgLyoqIE1vZHVsYXIgbXVsdGlwbGljYXRpb24KKyAgICAgIEBwYXJhbSAgYSAgICAgVGhlIGZpcnN0IHNvdXJjZQorICAgICAgQHBhcmFtICBiICAgICBUaGUgc2Vjb25kIHNvdXJjZSAKKyAgICAgIEBwYXJhbSAgYyAgICAgVGhlIG1vZHVsdXMKKyAgICAgIEBwYXJhbSAgZCAgICAgVGhlIGRlc3RpbmF0aW9uIChhKmIgbW9kIGMpCisgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptdWxtb2QpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMsIHZvaWQgKmQpOworCisgICAvKiogTW9kdWxhciBzcXVhcmluZworICAgICAgQHBhcmFtICBhICAgICBUaGUgZmlyc3Qgc291cmNlCisgICAgICBAcGFyYW0gIGIgICAgIFRoZSBtb2R1bHVzCisgICAgICBAcGFyYW0gIGMgICAgIFRoZSBkZXN0aW5hdGlvbiAoYSphIG1vZCBiKQorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqc3FybW9kKSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKTsKKworICAgLyoqIE1vZHVsYXIgaW52ZXJzaW9uCisgICAgICBAcGFyYW0gIGEgICAgIFRoZSB2YWx1ZSB0byBpbnZlcnQKKyAgICAgIEBwYXJhbSAgYiAgICAgVGhlIG1vZHVsdXMgCisgICAgICBAcGFyYW0gIGMgICAgIFRoZSBkZXN0aW5hdGlvbiAoMS9hIG1vZCBiKQorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqaW52bW9kKSh2b2lkICosIHZvaWQgKiwgdm9pZCAqKTsKKworLyogLS0tLSByZWR1Y3Rpb24gLS0tLSAqLworCisgICAvKiogc2V0dXAgTW9udGdvbWVyeQorICAgICAgIEBwYXJhbSBhICBUaGUgbW9kdWx1cyAKKyAgICAgICBAcGFyYW0gYiAgVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgcmVkdWN0aW9uIGRpZ2l0IAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKm1vbnRnb21lcnlfc2V0dXApKHZvaWQgKmEsIHZvaWQgKipiKTsKKworICAgLyoqIGdldCBub3JtYWxpemF0aW9uIHZhbHVlIAorICAgICAgIEBwYXJhbSBhICAgVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgbm9ybWFsaXphdGlvbiB2YWx1ZQorICAgICAgIEBwYXJhbSBiICAgVGhlIG1vZHVsdXMKKyAgICAgICBAcmV0dXJuICBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqbW9udGdvbWVyeV9ub3JtYWxpemF0aW9uKSh2b2lkICphLCB2b2lkICpiKTsKKworICAgLyoqIHJlZHVjZSBhIG51bWJlcgorICAgICAgIEBwYXJhbSBhICAgVGhlIG51bWJlciBbYW5kIGRlc3RdIHRvIHJlZHVjZQorICAgICAgIEBwYXJhbSBiICAgVGhlIG1vZHVsdXMKKyAgICAgICBAcGFyYW0gYyAgIFRoZSB2YWx1ZSAiYiIgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptb250Z29tZXJ5X3JlZHVjZSkodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYyk7CisKKyAgIC8qKiBjbGVhbiB1cCAgKGZyZWVzIG1lbW9yeSkKKyAgICAgICBAcGFyYW0gYSAgIFRoZSB2YWx1ZSAiYiIgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovICAgICAgCisgICB2b2lkICgqbW9udGdvbWVyeV9kZWluaXQpKHZvaWQgKmEpOworCisvKiAtLS0tIGV4cG9uZW50aWF0aW9uIC0tLS0gKi8KKworICAgLyoqIE1vZHVsYXIgZXhwb25lbnRpYXRpb24KKyAgICAgICBAcGFyYW0gYSAgICBUaGUgYmFzZSBpbnRlZ2VyCisgICAgICAgQHBhcmFtIGIgICAgVGhlIHBvd2VyIChjYW4gYmUgbmVnYXRpdmUpIGludGVnZXIKKyAgICAgICBAcGFyYW0gYyAgICBUaGUgbW9kdWx1cyBpbnRlZ2VyCisgICAgICAgQHBhcmFtIGQgICAgVGhlIGRlc3RpbmF0aW9uCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqZXhwdG1vZCkodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCk7CisKKyAgIC8qKiBQcmltYWxpdHkgdGVzdGluZworICAgICAgIEBwYXJhbSBhICAgICBUaGUgaW50ZWdlciB0byB0ZXN0CisgICAgICAgQHBhcmFtIGIgICAgIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgcmVzdWx0IChGUF9ZRVMgaWYgcHJpbWUpCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqaXNwcmltZSkodm9pZCAqYSwgaW50ICpiKTsKKworLyogLS0tLSAgKG9wdGlvbmFsKSBlY2MgcG9pbnQgbWF0aCAtLS0tICovCisKKyAgIC8qKiBFQ0MgR0YocCkgcG9pbnQgbXVsdGlwbGljYXRpb24gKGZyb20gdGhlIE5JU1QgY3VydmVzKQorICAgICAgIEBwYXJhbSBrICAgVGhlIGludGVnZXIgdG8gbXVsdGlwbHkgdGhlIHBvaW50IGJ5CisgICAgICAgQHBhcmFtIEcgICBUaGUgcG9pbnQgdG8gbXVsdGlwbHkKKyAgICAgICBAcGFyYW0gUiAgIFRoZSBkZXN0aW5hdGlvbiBmb3Iga0cgIAorICAgICAgIEBwYXJhbSBtb2R1bHVzICBUaGUgbW9kdWx1cyBmb3IgdGhlIGZpZWxkCisgICAgICAgQHBhcmFtIG1hcCBCb29sZWFuIGluZGljYXRlZCB3aGV0aGVyIHRvIG1hcCBiYWNrIHRvIGFmZmluZSBvciBub3QgCisgICAgICAgICAgICAgICAgICAoY2FuIGJlIGlnbm9yZWQgaWYgeW91IHdvcmsgaW4gYWZmaW5lIG9ubHkpCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqZWNjX3B0bXVsKSggICAgIHZvaWQgKmssIAorICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKkcsIAorICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKlIsIAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1vZHVsdXMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIG1hcCk7CisKKyAgIC8qKiBFQ0MgR0YocCkgcG9pbnQgYWRkaXRpb24gCisgICAgICAgQHBhcmFtIFAgICAgVGhlIGZpcnN0IHBvaW50CisgICAgICAgQHBhcmFtIFEgICAgVGhlIHNlY29uZCBwb2ludAorICAgICAgIEBwYXJhbSBSICAgIFRoZSBkZXN0aW5hdGlvbiBvZiBQICsgUQorICAgICAgIEBwYXJhbSBtb2R1bHVzICBUaGUgbW9kdWx1cworICAgICAgIEBwYXJhbSBtcCAgIFRoZSAiYiIgdmFsdWUgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCplY2NfcHRhZGQpKGVjY19wb2ludCAqUCwgCisgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqUSwgCisgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqUiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbW9kdWx1cywgCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbXApOworCisgICAvKiogRUNDIEdGKHApIHBvaW50IGRvdWJsZSAKKyAgICAgICBAcGFyYW0gUCAgICBUaGUgZmlyc3QgcG9pbnQKKyAgICAgICBAcGFyYW0gUiAgICBUaGUgZGVzdGluYXRpb24gb2YgMlAKKyAgICAgICBAcGFyYW0gbW9kdWx1cyAgVGhlIG1vZHVsdXMKKyAgICAgICBAcGFyYW0gbXAgICBUaGUgImIiIHZhbHVlIGZyb20gbW9udGdvbWVyeV9zZXR1cCgpCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqZWNjX3B0ZGJsKShlY2NfcG9pbnQgKlAsIAorICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKlIsIAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1vZHVsdXMsIAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1wKTsKKworICAgLyoqIEVDQyBtYXBwaW5nIGZyb20gcHJvamVjdGl2ZSB0byBhZmZpbmUsIAorICAgICAgIGN1cnJlbnRseSB1c2VzICh4LHkseikgPT4gKHgvel4yLCB5L3peMywgMSkKKyAgICAgICBAcGFyYW0gUCAgICAgVGhlIHBvaW50IHRvIG1hcAorICAgICAgIEBwYXJhbSBtb2R1bHVzIFRoZSBtb2R1bHVzCisgICAgICAgQHBhcmFtIG1wICAgIFRoZSAiYiIgdmFsdWUgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICAgICBAcmVtYXJrIFRoZSBtYXBwaW5nIGNhbiBiZSBkaWZmZXJlbnQgYnV0IGtlZXAgaW4gbWluZCBhIAorICAgICAgICAgICAgICAgZWNjX3BvaW50IG9ubHkgaGFzIHRocmVlIGludGVnZXJzICh4LHkseikgc28gaWYgCisgICAgICAgICAgICAgICB5b3UgdXNlIGEgZGlmZmVyZW50IG1hcHBpbmcgeW91IGhhdmUgdG8gbWFrZSBpdCBmaXQuCisgICAqLworICAgaW50ICgqZWNjX21hcCkoZWNjX3BvaW50ICpQLCB2b2lkICptb2R1bHVzLCB2b2lkICptcCk7CisKKyAgIC8qKiBDb21wdXRlcyBrQSpBICsga0IqQiA9IEMgdXNpbmcgU2hhbWlyJ3MgVHJpY2sKKyAgICAgICBAcGFyYW0gQSAgICAgICAgRmlyc3QgcG9pbnQgdG8gbXVsdGlwbHkKKyAgICAgICBAcGFyYW0ga0EgICAgICAgV2hhdCB0byBtdWx0aXBsZSBBIGJ5CisgICAgICAgQHBhcmFtIEIgICAgICAgIFNlY29uZCBwb2ludCB0byBtdWx0aXBseQorICAgICAgIEBwYXJhbSBrQiAgICAgICBXaGF0IHRvIG11bHRpcGxlIEIgYnkKKyAgICAgICBAcGFyYW0gQyAgICAgICAgW291dF0gRGVzdGluYXRpb24gcG9pbnQgKGNhbiBvdmVybGFwIHdpdGggQSBvciBCKQorICAgICAgIEBwYXJhbSBtb2R1bHVzICBNb2R1bHVzIGZvciBjdXJ2ZSAKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovIAorICAgaW50ICgqZWNjX211bDJhZGQpKGVjY19wb2ludCAqQSwgdm9pZCAqa0EsCisgICAgICAgICAgICAgICAgICAgICAgZWNjX3BvaW50ICpCLCB2b2lkICprQiwKKyAgICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICptb2R1bHVzKTsKKworCisvKiAtLS0tIChvcHRpb25hbCkgcnNhIG9wdGltaXplZCBtYXRoIChmb3IgaW50ZXJuYWwgQ1JUKSAtLS0tICovCisKKyAgIC8qKiBSU0EgS2V5IEdlbmVyYXRpb24gCisgICAgICAgQHBhcmFtIHBybmcgICAgIEFuIGFjdGl2ZSBQUk5HIHN0YXRlCisgICAgICAgQHBhcmFtIHdwcm5nICAgIFRoZSBpbmRleCBvZiB0aGUgUFJORyBkZXNpcmVkCisgICAgICAgQHBhcmFtIHNpemUgICAgIFRoZSBzaXplIG9mIHRoZSBrZXkgaW4gb2N0ZXRzCisgICAgICAgQHBhcmFtIGUgICAgICAgIFRoZSAiZSIgdmFsdWUgKHB1YmxpYyBrZXkpLiAgCisgICAgICAgICAgICAgICAgICAgICAgIGU9PTY1NTM3IGlzIGEgZ29vZCBjaG9pY2UKKyAgICAgICBAcGFyYW0ga2V5ICAgICAgW291dF0gRGVzdGluYXRpb24gb2YgYSBuZXdseSBjcmVhdGVkIHByaXZhdGUga2V5IHBhaXIKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIHVwb24gZXJyb3IgYWxsIGFsbG9jYXRlZCByYW0gaXMgZnJlZWQKKyAgICAqLworICAgIGludCAoKnJzYV9rZXlnZW4pKHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIHdwcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBzaXplLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOworCisgICAvKiogUlNBIGV4cG9uZW50aWF0aW9uCisgICAgICBAcGFyYW0gaW4gICAgICAgVGhlIG9jdGV0IGFycmF5IHJlcHJlc2VudGluZyB0aGUgYmFzZQorICAgICAgQHBhcmFtIGlubGVuICAgIFRoZSBsZW5ndGggb2YgdGhlIGlucHV0CisgICAgICBAcGFyYW0gb3V0ICAgICAgVGhlIGRlc3RpbmF0aW9uICh0byBiZSBzdG9yZWQgaW4gYW4gb2N0ZXQgYXJyYXkgZm9ybWF0KQorICAgICAgQHBhcmFtIG91dGxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIgYW5kIHRoZSByZXN1bHRpbmcgc2l6ZSAKKyAgICAgICAgICAgICAgICAgICAgICAoemVybyBwYWRkZWQgdG8gdGhlIHNpemUgb2YgdGhlIG1vZHVsdXMpCisgICAgICBAcGFyYW0gd2hpY2ggICAgUEtfUFVCTElDIGZvciBwdWJsaWMgUlNBIGFuZCBQS19QUklWQVRFIGZvciBwcml2YXRlIFJTQQorICAgICAgQHBhcmFtIGtleSAgICAgIFRoZSBSU0Ega2V5IHRvIHVzZSAKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnJzYV9tZSkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBpbnQgd2hpY2gsCisgICAgICAgICAgICAgICAgICAgICAgIHJzYV9rZXkgKmtleSk7Cit9IGx0Y19tYXRoX2Rlc2NyaXB0b3I7CitcZW5ke3ZlcmJhdGltfQorXGVuZHtzbWFsbH0KKworTW9zdCBvZiB0aGUgZnVuY3Rpb25zIGFyZSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIGFuZCBkbyBub3QgbmVlZCBkb2N1bWVudGF0aW9uLiAgV2UnbGwgY292ZXIgdGhlIGJhc2ljIGNvbnZlbnRpb25zIG9mIHRoZSBBUEkgYW5kIHRoZW4gZXhwbGFpbiB0aGUgYWNjZWxlcmF0ZWQgZnVuY3Rpb25zLgorCitcc3Vic2VjdGlvbntDb252ZW50aW9uc30KKworQWxsIFx0ZXh0aXR7YmlnbnVtc30gYXJlIGFjY2Vzc2VkIHRocm91Z2ggYW4gb3BhcXVlIFx0ZXh0aXR7dm9pZCAqfSBkYXRhIHR5cGUuICBZb3UgbXVzdCBpbnRlcm5hbGx5IGNhc3QgdGhlIHBvaW50ZXIgaWYgeW91IG5lZWQgdG8gYWNjZXNzIG1lbWJlcnMgb2YgeW91ciBiaWdudW0gc3RydWN0dXJlLiAgRHVyaW5nCit0aGUgaW5pdCBjYWxscyBhIFx0ZXh0aXR7dm9pZCAqKn0gd2lsbCBiZSBwYXNzZWQgd2hlcmUgeW91IGFsbG9jYXRlIHlvdXIgc3RydWN0dXJlIGFuZCBzZXQgdGhlIHBvaW50ZXIgdGhlbiBpbml0aWFsaXplIHRoZSBudW1iZXIgdG8gemVyby4gIER1cmluZyB0aGUgZGVpbml0IGNhbGxzIHlvdSBtdXN0IAorZnJlZSB0aGUgYmlnbnVtIGFzIHdlbGwgYXMgdGhlIHN0cnVjdHVyZSB5b3UgYWxsb2NhdGVkIHRvIHBsYWNlIGl0IGluLgorCitBbGwgZnVuY3Rpb25zIGV4Y2VwdCB0aGUgTW9udGdvbWVyeSByZWR1Y3Rpb25zIHdvcmsgZnJvbSBsZWZ0IHRvIHJpZ2h0IHdpdGggdGhlIGFyZ3VtZW50cy4gIEZvciBleGFtcGxlLCBtdWwoYSwgYiwgYykgY29tcHV0ZXMgJGMgXGxlZnRhcnJvdyBhYiQuICAKKworQWxsIGZ1bmN0aW9ucyAoZXhjZXB0IHdoZXJlIG5vdGVkIG90aGVyd2lzZSkgcmV0dXJuIFx0ZXh0YmZ7Q1JZUFRcX09LfSB0byBzaWduaWZ5IGEgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uICBBbGwgZXJyb3IgY29kZXMgbXVzdCBiZSB2YWxpZCBMaWJUb21DcnlwdCBlcnJvciBjb2Rlcy4KKworVGhlIGRpZ2l0IHJvdXRpbmVzIChpbmNsdWRpbmcgZnVuY3Rpb25zIHdpdGggdGhlIFx0ZXh0aXR7aX0gc3VmZml4KSB1c2UgYSBcdGV4dGl0e3Vuc2lnbmVkIGxvbmd9IHRvIHJlcHJlc2VudCB0aGUgZGlnaXQuICBJZiB5b3VyIGludGVybmFsIGRpZ2l0IGlzIGxhcmdlciB0aGFuIHRoaXMgeW91IG11c3QKK3RoZW4gcGFydGl0aW9uIHlvdXIgZGlnaXRzLiAgTm9ybWFsbHkgdGhpcyBkb2VzIG5vdCBtYXR0ZXIgYXMgXHRleHRpdHt1bnNpZ25lZCBsb25nfSB3aWxsIGJlIHRoZSBzYW1lIHNpemUgYXMgeW91ciByZWdpc3RlciBzaXplLiAgTm90ZSB0aGF0IGlmIHlvdXIgZGlnaXQgaXMgc21hbGxlcgordGhhbiBhbiBcdGV4dGl0e3Vuc2lnbmVkIGxvbmd9IHRoYXQgaXMgYWxzbyBhY2NlcHRhYmxlIGFzIHRoZSBcdGV4dGl0e2JpdHNcX3BlclxfZGlnaXR9IHBhcmFtZXRlciB3aWxsIHNwZWNpZnkgdGhpcy4gIAorCitcc3Vic2VjdGlvbntFQ0MgRnVuY3Rpb25zfQorVGhlIEVDQyBzeXN0ZW0gaW4gTGliVG9tQ3J5cHQgaXMgYmFzZWQgb2ZmIG9mIHRoZSBOSVNUIHJlY29tbWVuZGVkIGN1cnZlcyBvdmVyICRHRihwKSQgYW5kIGlzIHVzZWQgdG8gaW1wbGVtZW50IEVDLURTQSBhbmQgRUMtREguICAgVGhlIEVDQyBmdW5jdGlvbnMgd29yayB3aXRoIAordGhlIFx0ZXh0YmZ7ZWNjXF9wb2ludH0gc3RydWN0dXJlIGFuZCBhc3N1bWUgdGhlIHBvaW50cyBhcmUgc3RvcmVkIGluIEphY29iaWFuIHByb2plY3RpdmUgZm9ybWF0LgorCitcYmVnaW57dmVyYmF0aW19CisvKiogQSBwb2ludCBvbiBhIEVDQyBjdXJ2ZSwgc3RvcmVkIGluIEphY29iaWFuIGZvcm1hdCBzdWNoIAorICAgIHRoYXQgKHgseSx6KSA9PiAoeC96XjIsIHkvel4zLCAxKSB3aGVuIGludGVycHJldGVkIGFzIGFmZmluZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qKiBUaGUgeCBjby1vcmRpbmF0ZSAqLworICAgIHZvaWQgKng7CisgICAgLyoqIFRoZSB5IGNvLW9yZGluYXRlICovCisgICAgdm9pZCAqeTsKKyAgICAvKiogVGhlIHogY28tb3JkaW5hdGUgKi8KKyAgICB2b2lkICp6OworfSBlY2NfcG9pbnQ7CitcZW5ke3ZlcmJhdGltfQorCitBbGwgRUNDIGZ1bmN0aW9ucyBtdXN0IHVzZSB0aGlzIG1hcHBpbmcgc3lzdGVtLiAgVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHdoZW4geW91IHJlbWFwIGFsbCBFQ0MgY2FsbGJhY2tzIHdoaWNoIHdpbGwgYWxsb3cgeW91IHRvIGhhdmUgbW9yZSBjb250cm9sCitvdmVyIGhvdyB0aGUgRUNDIG1hdGggd2lsbCBiZSBpbXBsZW1lbnRlZC4gIE91dCBvZiB0aGUgYm94IHlvdSBvbmx5IGhhdmUgdGhyZWUgcGFyYW1ldGVycyBwZXIgcG9pbnQgdG8gdXNlICQoeCwgeSwgeikkIGhvd2V2ZXIsIHRoZXNlIGFyZSBqdXN0IHZvaWQgcG9pbnRlcnMuICBUaGV5Citjb3VsZCBwb2ludCB0byBhbnl0aGluZyB5b3Ugd2FudC4gIFRoZSBvbmx5IGZ1cnRoZXIgZXhjZXB0aW9uIGlzIHRoZSBleHBvcnQgZnVuY3Rpb25zIHdoaWNoIGV4cGVjdHMgdGhlIHZhbHVlcyB0byBiZSBpbiBhZmZpbmUgZm9ybWF0LgorCitcc3Vic3Vic2VjdGlvbntQb2ludCBNdWx0aXBseX0KK1RoaXMgd2lsbCBtdWx0aXBseSB0aGUgcG9pbnQgJEckIGJ5IHRoZSBzY2FsYXIgJGskIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZSBwb2ludCAkUiQuICBUaGUgdmFsdWUgc2hvdWxkIGJlIG1hcHBlZCB0byBhZmZpbmUgb25seSBpZiAkbWFwJCBpcyBzZXQgdG8gb25lLiAgCisKK1xzdWJzdWJzZWN0aW9ue1BvaW50IEFkZGl0aW9ufQorVGhpcyB3aWxsIGFkZCB0aGUgcG9pbnQgJFAkIHRvIHRoZSBwb2ludCAkUSQgYW5kIHN0b3JlIGl0IGluIHRoZSBwb2ludCAkUiQuICBUaGUgJG1wJCBwYXJhbWV0ZXIgaXMgdGhlIFx0ZXh0aXR7Yn0gdmFsdWUgZnJvbSB0aGUgbW9udGdvbWVyeVxfc2V0dXAoKSBjYWxsLiAgVGhlIGlucHV0IHBvaW50cworbWF5IGJlIGluIGVpdGhlciBhZmZpbmUgKHdpdGggJHogPSAxJCkgb3IgcHJvamVjdGl2ZSBmb3JtYXQgYW5kIHRoZSBvdXRwdXQgcG9pbnQgaXMgYWx3YXlzIHByb2plY3RpdmUuICAKKworXHN1YnN1YnNlY3Rpb257UG9pbnQgTWFwcGluZ30KK1RoaXMgd2lsbCBtYXAgdGhlIHBvaW50ICRQJCBiYWNrIGZyb20gcHJvamVjdGl2ZSB0byBhZmZpbmUuICBUaGUgb3V0cHV0IHBvaW50ICRQJCBtdXN0IGJlIG9mIHRoZSBmb3JtICQoeCwgeSwgMSkkLiAgCisKK1xzdWJzdWJzZWN0aW9ue1NoYW1pcidzIFRyaWNrfQorXGluZGV4e1NoYW1pcidzIFRyaWNrfQorXGluZGV4e2x0Y1xfZWNjXF9tdWwyYWRkKCl9CitUbyBhY2NlbGVyYXRlIEVDLS1EU0EgdmVyaWZpY2F0aW9uIHRoZSBsaWJyYXJ5IHByb3ZpZGVzIGEgYnVpbHQtLWluIGZ1bmN0aW9uIGNhbGxlZCBsdGNcX2VjY1xfbXVsMmFkZCgpLiAgVGhpcyBwZXJmb3JtcyB0d28gcG9pbnQgbXVsdGlwbGljYXRpb25zIGFuZCBhbiBhZGRpdGlvbiBpbgorcm91Z2hseSB0aGUgdGltZSBvZiBvbmUgcG9pbnQgbXVsdGlwbGljYXRpb24uICBJdCBpcyBjYWxsZWQgZnJvbSBlY2NcX3ZlcmlmeVxfaGFzaCgpIGlmIGFuIGFjY2VsZXJhdG9yIGlzIG5vdCBwcmVzZW50LiAgVGhlIGFjY2xlcmF0b3IgZnVuY3Rpb24gbXVzdCBhbGxvdyB0aGUgcG9pbnRzIHRvCitvdmVybGFwIChlLmcuLCAkQSBcbGVmdGFycm93IGtfMUEgKyBrXzJCJCkgYW5kIG11c3QgcmV0dXJuIHRoZSBmaW5hbCBwb2ludCBpbiBhZmZpbmUgZm9ybWF0LiAgCisKKworXHN1YnNlY3Rpb257UlNBIEZ1bmN0aW9uc30KK1RoZSBSU0EgTW9kdWxhciBFeHBvbmVudGlhdGlvbiAoTUUpIGZ1bmN0aW9uIGlzIHVzZWQgYnkgdGhlIFJTQSBBUEkgdG8gcGVyZm9ybSBleHBvbmVudGlhdGlvbnMgZm9yIHByaXZhdGUgYW5kIHB1YmxpYyBrZXkgb3BlcmF0aW9ucy4gIEluIHBhcnRpY3VsYXIgZm9yCitwcml2YXRlIGtleSBvcGVyYXRpb25zIGl0IHVzZXMgdGhlIENSVCBhcHByb2FjaCB0byBsb3dlciB0aGUgdGltZSByZXF1aXJlZC4gIEl0IGlzIHBhc3NlZCBhbiBSU0Ega2V5IHdpdGggdGhlIGZvbGxvd2luZyBmb3JtYXQuCisKK1xiZWdpbnt2ZXJiYXRpbX0KKy8qKiBSU0EgUEtDUyBzdHlsZSBrZXkgKi8KK3R5cGVkZWYgc3RydWN0IFJzYV9rZXkgeworICAgIC8qKiBUeXBlIG9mIGtleSwgUEtfUFJJVkFURSBvciBQS19QVUJMSUMgKi8KKyAgICBpbnQgdHlwZTsKKyAgICAvKiogVGhlIHB1YmxpYyBleHBvbmVudCAqLworICAgIHZvaWQgKmU7IAorICAgIC8qKiBUaGUgcHJpdmF0ZSBleHBvbmVudCAqLworICAgIHZvaWQgKmQ7IAorICAgIC8qKiBUaGUgbW9kdWx1cyAqLworICAgIHZvaWQgKk47IAorICAgIC8qKiBUaGUgcCBmYWN0b3Igb2YgTiAqLworICAgIHZvaWQgKnA7IAorICAgIC8qKiBUaGUgcSBmYWN0b3Igb2YgTiAqLworICAgIHZvaWQgKnE7IAorICAgIC8qKiBUaGUgMS9xIG1vZCBwIENSVCBwYXJhbSAqLworICAgIHZvaWQgKnFQOyAKKyAgICAvKiogVGhlIGQgbW9kIChwIC0gMSkgQ1JUIHBhcmFtICovCisgICAgdm9pZCAqZFA7IAorICAgIC8qKiBUaGUgZCBtb2QgKHEgLSAxKSBDUlQgcGFyYW0gKi8KKyAgICB2b2lkICpkUTsKK30gcnNhX2tleTsKK1xlbmR7dmVyYmF0aW19CisKK1RoZSBjYWxsIHJlYWRzIHRoZSBcdGV4dGl0e2lufSBidWZmZXIgYXMgYW4gdW5zaWduZWQgY2hhciBhcnJheSBpbiBiaWcgZW5kaWFuIGZvcm1hdC4gIFRoZW4gaXQgcGVyZm9ybXMgdGhlIGV4cG9uZW50aWF0aW9uIGFuZCBzdG9yZXMgdGhlIG91dHB1dCBpbiBiaWcgZW5kaWFuIGZvcm1hdAordG8gdGhlIFx0ZXh0aXR7b3V0fSBidWZmZXIuICBUaGUgb3V0cHV0IG11c3QgYmUgemVybyBwYWRkZWQgKGxlYWRpbmcgYnl0ZXMpIHNvIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IG1hdGNoZXMgdGhlIGxlbmd0aCBvZiB0aGUgbW9kdWx1cyAoaW4gYnl0ZXMpLiAgRm9yIGV4YW1wbGUsCitmb3IgUlNBLS0xMDI0IHRoZSBvdXRwdXQgaXMgYWx3YXlzIDEyOCBieXRlcyByZWdhcmRsZXNzIG9mIGhvdyBzbWFsbCB0aGUgbnVtZXJpY2FsIHZhbHVlIG9mIHRoZSBleHBvbmVudGlhdGlvbiBpcy4KKworU2luY2UgdGhlIGZ1bmN0aW9uIGlzIGdpdmVuIHRoZSBlbnRpcmUgUlNBIGtleSAoZm9yIHByaXZhdGUga2V5cyBvbmx5KSBDUlQgaXMgcG9zc2libGUgYXMgcHJlc2NyaWJlZCBpbiB0aGUgUEtDUyBcIzEgdjIuMSBzcGVjaWZpY2F0aW9uLgorCitcbmV3cGFnZQorXG1hcmtib3Roe0luZGV4fXtJbmRleH0KK1xpbnB1dHtjcnlwdC5pbmR9CisKK1xlbmR7ZG9jdW1lbnR9CisKKyUgJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvY3J5cHQudGV4LHYgJCAgIAorJSAkUmV2aXNpb246IDEuMTIzICQgICAKKyUgJERhdGU6IDIwMDYvMTIvMTYgMTk6MDg6MTcgJCAKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L2RlbW9zL2VuY3J5cHQuYyBiL2xpYnRvbWNyeXB0L2RlbW9zL2VuY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzg0NDBkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvZGVtb3MvZW5jcnlwdC5jCkBAIC0wLDAgKzEsMjQxIEBACisvKiBlbmNyeXB0IFYxLjEgRnJpIE9jdCAxOCAwNDoyODowMyBOWkRUIDIwMDIgKi8KKy8qIEZpbGUgZGUvZW5jcnlwdGlvbiwgdXNpbmcgbGlidG9tY3J5cHQgKi8KKy8qIFdyaXR0ZW4gYnkgRGFuaWVsIFJpY2hhcmRzIDxreWh3YW5hQHdvcmxkLW5ldC5jby5uej4gKi8KKy8qIEhlbHAgZnJvbSBUb20gU3QgRGVuaXMgd2l0aCB2YXJpb3VzIGJpdHMgKi8KKy8qIFRoaXMgY29kZSBpcyBwdWJsaWMgZG9tYWluLCBubyByaWdodHMgcmVzZXJ2ZWQuICovCisvKiBFbmNyeXB0cyBieSBkZWZhdWx0LCAtZCBmbGFnIGVuYWJsZXMgZGVjcnlwdGlvbiAqLworLyogaWU6IC4vZW5jcnlwdCBibG93ZmlzaCBzdG9yeS50eHQgc3RvcnkuY3QgKi8KKy8qIC4vZW5jcnlwdCAtZCBibG93ZmlzaCBzdG9yeS5jdCBzdG9yeS5wdCAqLworCisjaW5jbHVkZSA8dG9tY3J5cHQuaD4KKworaW50IGVycm5vOworCitpbnQgdXNhZ2UoY2hhciAqbmFtZSkgCit7CisgICBpbnQgeDsKKworICAgcHJpbnRmKCJVc2FnZTogJXMgWy1kXShlY3J5cHQpIGNpcGhlciBpbmZpbGUgb3V0ZmlsZVxuQ2lwaGVyczpcbiIsIG5hbWUpOworICAgZm9yICh4ID0gMDsgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMOyB4KyspIHsKKyAgICAgIHByaW50ZigiJXNcbiIsY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSk7CisgICB9CisgICBleGl0KDEpOworfQorCit2b2lkIHJlZ2lzdGVyX2FsZ3Modm9pZCkKK3sKKyAgIGludCB4OworICAgCisjaWZkZWYgUklKTkRBRUwKKyAgcmVnaXN0ZXJfY2lwaGVyICgmYWVzX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgQkxPV0ZJU0gKKyAgcmVnaXN0ZXJfY2lwaGVyICgmYmxvd2Zpc2hfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBYVEVBCisgIHJlZ2lzdGVyX2NpcGhlciAoJnh0ZWFfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBSQzUKKyAgcmVnaXN0ZXJfY2lwaGVyICgmcmM1X2Rlc2MpOworI2VuZGlmCisjaWZkZWYgUkM2CisgIHJlZ2lzdGVyX2NpcGhlciAoJnJjNl9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFNBRkVSUAorICByZWdpc3Rlcl9jaXBoZXIgKCZzYWZlcnBfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBUV09GSVNICisgIHJlZ2lzdGVyX2NpcGhlciAoJnR3b2Zpc2hfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBTQUZFUgorICByZWdpc3Rlcl9jaXBoZXIgKCZzYWZlcl9rNjRfZGVzYyk7CisgIHJlZ2lzdGVyX2NpcGhlciAoJnNhZmVyX3NrNjRfZGVzYyk7CisgIHJlZ2lzdGVyX2NpcGhlciAoJnNhZmVyX2sxMjhfZGVzYyk7CisgIHJlZ2lzdGVyX2NpcGhlciAoJnNhZmVyX3NrMTI4X2Rlc2MpOworI2VuZGlmCisjaWZkZWYgUkMyCisgIHJlZ2lzdGVyX2NpcGhlciAoJnJjMl9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIERFUworICByZWdpc3Rlcl9jaXBoZXIgKCZkZXNfZGVzYyk7CisgIHJlZ2lzdGVyX2NpcGhlciAoJmRlczNfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBDQVNUNQorICByZWdpc3Rlcl9jaXBoZXIgKCZjYXN0NV9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIE5PRUtFT04KKyAgcmVnaXN0ZXJfY2lwaGVyICgmbm9la2Vvbl9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFNLSVBKQUNLCisgIHJlZ2lzdGVyX2NpcGhlciAoJnNraXBqYWNrX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgS0hBWkFECisgIHJlZ2lzdGVyX2NpcGhlciAoJmtoYXphZF9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIEFOVUJJUworICByZWdpc3Rlcl9jaXBoZXIgKCZhbnViaXNfZGVzYyk7CisjZW5kaWYKKworICAgaWYgKHJlZ2lzdGVyX2hhc2goJnNoYTI1Nl9kZXNjKSA9PSAtMSkgeworICAgICAgcHJpbnRmKCJFcnJvciByZWdpc3RlcmluZyBTSEEyNTZcbiIpOworICAgICAgZXhpdCgtMSk7CisgICB9IAorCisgICBpZiAocmVnaXN0ZXJfcHJuZygmeWFycm93X2Rlc2MpID09IC0xKSB7CisgICAgICBwcmludGYoIkVycm9yIHJlZ2lzdGVyaW5nIHlhcnJvdyBQUk5HXG4iKTsKKyAgICAgIGV4aXQoLTEpOworICAgfQorCisgICBpZiAocmVnaXN0ZXJfcHJuZygmc3BybmdfZGVzYykgPT0gLTEpIHsKKyAgICAgIHByaW50ZigiRXJyb3IgcmVnaXN0ZXJpbmcgc3BybmcgUFJOR1xuIik7CisgICAgICBleGl0KC0xKTsKKyAgIH0KK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgCit7CisgICB1bnNpZ25lZCBjaGFyIHBsYWludGV4dFs1MTJdLGNpcGhlcnRleHRbNTEyXTsKKyAgIHVuc2lnbmVkIGNoYXIgdG1wa2V5WzUxMl0sIGtleVtNQVhCTE9DS1NJWkVdLCBJVltNQVhCTE9DS1NJWkVdOworICAgdW5zaWduZWQgY2hhciBpbmJ1Zls1MTJdOyAvKiBpL28gYmxvY2sgc2l6ZSAqLworICAgdW5zaWduZWQgbG9uZyBvdXRsZW4sIHksIGl2c2l6ZSwgeCwgZGVjcnlwdDsKKyAgIHN5bW1ldHJpY19DVFIgY3RyOworICAgaW50IGNpcGhlcl9pZHgsIGhhc2hfaWR4LCBrczsKKyAgIGNoYXIgKmluZmlsZSwgKm91dGZpbGUsICpjaXBoZXI7CisgICBwcm5nX3N0YXRlIHBybmc7CisgICBGSUxFICpmZGluLCAqZmRvdXQ7CisKKyAgIC8qIHJlZ2lzdGVyIGFsZ3MsIHNvIHRoZXkgY2FuIGJlIHByaW50ZWQgKi8KKyAgIHJlZ2lzdGVyX2FsZ3MoKTsKKworICAgaWYgKGFyZ2MgPCA0KSB7CisgICAgICByZXR1cm4gdXNhZ2UoYXJndlswXSk7CisgICB9CisKKyAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICItZCIpKSB7CisgICAgICBkZWNyeXB0ID0gMTsKKyAgICAgIGNpcGhlciAgPSBhcmd2WzJdOworICAgICAgaW5maWxlICA9IGFyZ3ZbM107CisgICAgICBvdXRmaWxlID0gYXJndls0XTsKKyAgIH0gZWxzZSB7CisgICAgICBkZWNyeXB0ID0gMDsKKyAgICAgIGNpcGhlciAgPSBhcmd2WzFdOworICAgICAgaW5maWxlICA9IGFyZ3ZbMl07CisgICAgICBvdXRmaWxlID0gYXJndlszXTsKKyAgIH0gICAKKworICAgLyogZmlsZSBoYW5kbGVzIHNldHVwICovCisgICBmZGluID0gZm9wZW4oaW5maWxlLCJyYiIpOworICAgaWYgKGZkaW4gPT0gTlVMTCkgeworICAgICAgcGVycm9yKCJDYW4ndCBvcGVuIGlucHV0IGZvciByZWFkaW5nIik7CisgICAgICBleGl0KC0xKTsKKyAgIH0KKworICAgZmRvdXQgPSBmb3BlbihvdXRmaWxlLCJ3YiIpOworICAgaWYgKGZkb3V0ID09IE5VTEwpIHsgCisgICAgICBwZXJyb3IoIkNhbid0IG9wZW4gb3V0cHV0IGZvciB3cml0aW5nIik7CisgICAgICBleGl0KC0xKTsKKyAgIH0KKyAKKyAgIGNpcGhlcl9pZHggPSBmaW5kX2NpcGhlcihjaXBoZXIpOworICAgaWYgKGNpcGhlcl9pZHggPT0gLTEpIHsKKyAgICAgIHByaW50ZigiSW52YWxpZCBjaXBoZXIgZW50ZXJlZCBvbiBjb21tYW5kIGxpbmUuXG4iKTsKKyAgICAgIGV4aXQoLTEpOworICAgfQorCisgICBoYXNoX2lkeCA9IGZpbmRfaGFzaCgic2hhMjU2Iik7CisgICBpZiAoaGFzaF9pZHggPT0gLTEpIHsKKyAgICAgIHByaW50ZigiU0hBMjU2IG5vdCBmb3VuZC4uLj9cbiIpOworICAgICAgZXhpdCgtMSk7CisgICB9CisKKyAgIGl2c2l6ZSA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl9pZHhdLmJsb2NrX2xlbmd0aDsKKyAgIGtzID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5oYXNoc2l6ZTsKKyAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJfaWR4XS5rZXlzaXplKCZrcykgIT0gQ1JZUFRfT0spIHsgCisgICAgICBwcmludGYoIkludmFsaWQga2V5c2l6ZT8/P1xuIik7CisgICAgICBleGl0KC0xKTsKKyAgIH0KKworICAgcHJpbnRmKCJcbkVudGVyIGtleTogIik7CisgICBmZ2V0cygoY2hhciAqKXRtcGtleSxzaXplb2YodG1wa2V5KSwgc3RkaW4pOworICAgb3V0bGVuID0gc2l6ZW9mKGtleSk7CisgICBpZiAoKGVycm5vID0gaGFzaF9tZW1vcnkoaGFzaF9pZHgsdG1wa2V5LHN0cmxlbigoY2hhciAqKXRtcGtleSksa2V5LCZvdXRsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgcHJpbnRmKCJFcnJvciBoYXNoaW5nIGtleTogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnJubykpOworICAgICAgZXhpdCgtMSk7CisgICB9CisgICAKKyAgIGlmIChkZWNyeXB0KSB7CisgICAgICAvKiBOZWVkIHRvIHJlYWQgaW4gSVYgKi8KKyAgICAgIGlmIChmcmVhZChJViwxLGl2c2l6ZSxmZGluKSAhPSBpdnNpemUpIHsKKyAgICAgICAgIHByaW50ZigiRXJyb3IgcmVhZGluZyBJViBmcm9tIGlucHV0LlxuIik7CisgICAgICAgICBleGl0KC0xKTsKKyAgICAgIH0KKyAgIAorICAgICAgaWYgKChlcnJubyA9IGN0cl9zdGFydChjaXBoZXJfaWR4LElWLGtleSxrcywwLENUUl9DT1VOVEVSX0xJVFRMRV9FTkRJQU4sJmN0cikpICE9IENSWVBUX09LKSB7CisgICAgICAgICBwcmludGYoImN0cl9zdGFydCBlcnJvcjogJXNcbiIsZXJyb3JfdG9fc3RyaW5nKGVycm5vKSk7CisgICAgICAgICBleGl0KC0xKTsKKyAgICAgIH0KKworICAgICAgLyogSVYgZG9uZSAqLworICAgICAgZG8geworICAgICAgICAgeSA9IGZyZWFkKGluYnVmLDEsc2l6ZW9mKGluYnVmKSxmZGluKTsKKworICAgICAgICAgaWYgKChlcnJubyA9IGN0cl9kZWNyeXB0KGluYnVmLHBsYWludGV4dCx5LCZjdHIpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgcHJpbnRmKCJjdHJfZGVjcnlwdCBlcnJvcjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnJubykpOworICAgICAgICAgICAgZXhpdCgtMSk7CisgICAgICAgICB9CisKKyAgICAgICAgIGlmIChmd3JpdGUocGxhaW50ZXh0LDEseSxmZG91dCkgIT0geSkgeworICAgICAgICAgICAgcHJpbnRmKCJFcnJvciB3cml0aW5nIHRvIGZpbGUuXG4iKTsKKyAgICAgICAgICAgIGV4aXQoLTEpOworICAgICAgICAgfQorICAgICAgfSB3aGlsZSAoeSA9PSBzaXplb2YoaW5idWYpKTsKKyAgICAgIGZjbG9zZShmZGluKTsKKyAgICAgIGZjbG9zZShmZG91dCk7CisKKyAgIH0gZWxzZSB7ICAvKiBlbmNyeXB0ICovCisgICAgICAvKiBTZXR1cCB5YXJyb3cgZm9yIHJhbmRvbSBieXRlcyBmb3IgSVYgKi8KKyAgICAgIAorICAgICAgaWYgKChlcnJubyA9IHJuZ19tYWtlX3BybmcoMTI4LCBmaW5kX3BybmcoInlhcnJvdyIpLCAmcHJuZywgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICBwcmludGYoIkVycm9yIHNldHRpbmcgdXAgUFJORywgJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnJubykpOworICAgICAgfSAgICAgIAorCisgICAgICAvKiBZb3UgY2FuIHVzZSBybmdfZ2V0X2J5dGVzIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgaXQgKi8KKyAgICAgIC8qIHggPSBybmdfZ2V0X2J5dGVzKElWLGl2c2l6ZSxOVUxMKTsqLworICAgICAgeCA9IHlhcnJvd19yZWFkKElWLGl2c2l6ZSwmcHJuZyk7CisgICAgICBpZiAoeCAhPSBpdnNpemUpIHsKKyAgICAgICAgIHByaW50ZigiRXJyb3IgcmVhZGluZyBQUk5HIGZvciBJViByZXF1aXJlZC5cbiIpOworICAgICAgICAgZXhpdCgtMSk7CisgICAgICB9CisgICAKKyAgICAgIGlmIChmd3JpdGUoSVYsMSxpdnNpemUsZmRvdXQpICE9IGl2c2l6ZSkgeworICAgICAgICAgcHJpbnRmKCJFcnJvciB3cml0aW5nIElWIHRvIG91dHB1dC5cbiIpOworICAgICAgICAgZXhpdCgtMSk7CisgICAgICB9CisKKyAgICAgIGlmICgoZXJybm8gPSBjdHJfc3RhcnQoY2lwaGVyX2lkeCxJVixrZXksa3MsMCxDVFJfQ09VTlRFUl9MSVRUTEVfRU5ESUFOLCZjdHIpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgcHJpbnRmKCJjdHJfc3RhcnQgZXJyb3I6ICVzXG4iLGVycm9yX3RvX3N0cmluZyhlcnJubykpOworICAgICAgICAgZXhpdCgtMSk7CisgICAgICB9CisKKyAgICAgIGRvIHsKKyAgICAgICAgIHkgPSBmcmVhZChpbmJ1ZiwxLHNpemVvZihpbmJ1ZiksZmRpbik7CisKKyAgICAgICAgIGlmICgoZXJybm8gPSBjdHJfZW5jcnlwdChpbmJ1ZixjaXBoZXJ0ZXh0LHksJmN0cikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBwcmludGYoImN0cl9lbmNyeXB0IGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycm5vKSk7CisgICAgICAgICAgICBleGl0KC0xKTsKKyAgICAgICAgIH0KKworICAgICAgICAgaWYgKGZ3cml0ZShjaXBoZXJ0ZXh0LDEseSxmZG91dCkgIT0geSkgeworICAgICAgICAgICAgcHJpbnRmKCJFcnJvciB3cml0aW5nIHRvIG91dHB1dC5cbiIpOworICAgICAgICAgICAgZXhpdCgtMSk7CisgICAgICAgICB9CisgICAgICB9IHdoaWxlICh5ID09IHNpemVvZihpbmJ1ZikpOyAgIAorICAgICAgZmNsb3NlKGZkb3V0KTsKKyAgICAgIGZjbG9zZShmZGluKTsKKyAgIH0KKyAgIHJldHVybiAwOworfQorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9kZW1vcy9lbmNyeXB0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNS8wOC8wNCAyMDo0Mzo1MCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9kZW1vcy9oYXNoc3VtLmMgYi9saWJ0b21jcnlwdC9kZW1vcy9oYXNoc3VtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUzYjZlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L2RlbW9zL2hhc2hzdW0uYwpAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIFdyaXR0ZW4gYnkgRGFuaWVsIFJpY2hhcmRzIDxreWh3YW5hQHdvcmxkLW5ldC5jby5uej4gNi83LzIwMDIKKyAqIGhhc2guYzogVGhpcyBhcHAgdXNlcyBsaWJ0b21jcnlwdCB0byBoYXNoIGVpdGhlciBzdGRpbiBvciBhIGZpbGUKKyAqIFRoaXMgZmlsZSBpcyBQdWJsaWMgRG9tYWluLiBObyByaWdodHMgYXJlIHJlc2VydmVkLgorICogQ29tcGlsZSB3aXRoICdnY2MgaGFzaHN1bS5jIC1vIGhhc2hzdW0gLWx0b21jcnlwdCcKKyAqIFRoaXMgZXhhbXBsZSBpc24ndCByZWFsbHkgYmlnIGVub3VnaCB0byB3YXJyZW50IHNwbGl0dGluZyBpbnRvCisgKiBtb3JlIGZ1bmN0aW9ucyA7KQorKi8KKworI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CisKK2ludCBlcnJubzsKKwordm9pZCByZWdpc3Rlcl9hbGdzKCk7CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgIGludCBpZHgsIHgsIHo7CisgICB1bnNpZ25lZCBsb25nIHc7CisgICB1bnNpZ25lZCBjaGFyIGhhc2hfYnVmZmVyW01BWEJMT0NLU0laRV07CisgICBoYXNoX3N0YXRlIG1kOworCisgICAvKiBZb3UgbmVlZCB0byByZWdpc3RlciBhbGdvcml0aG1zIGJlZm9yZSB1c2luZyB0aGVtICovCisgICByZWdpc3Rlcl9hbGdzKCk7CisgICBpZiAoYXJnYyA8IDIpIHsKKyAgICAgIHByaW50ZigidXNhZ2U6IC4vaGFzaCBhbGdvcml0aG0gZmlsZSBbZmlsZSAuLi5dXG4iKTsKKyAgICAgIHByaW50ZigiQWxnb3JpdGhtczpcbiIpOworICAgICAgZm9yICh4ID0gMDsgaGFzaF9kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTDsgeCsrKSB7CisgICAgICAgICBwcmludGYoIiAlcyAoJWQpXG4iLCBoYXNoX2Rlc2NyaXB0b3JbeF0ubmFtZSwgaGFzaF9kZXNjcmlwdG9yW3hdLklEKTsKKyAgICAgIH0KKyAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgIH0KKworICAgaWR4ID0gZmluZF9oYXNoKGFyZ3ZbMV0pOworICAgaWYgKGlkeCA9PSAtMSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJcbkludmFsaWQgaGFzaCBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lLlxuIik7CisgICAgICByZXR1cm4gLTE7CisgICB9CisKKyAgIGlmIChhcmdjID09IDIpIHsKKyAgICAgIGhhc2hfZGVzY3JpcHRvcltpZHhdLmluaXQoJm1kKTsKKyAgICAgIGRvIHsKKyAgICAgICAgIHggPSBmcmVhZChoYXNoX2J1ZmZlciwgMSwgc2l6ZW9mKGhhc2hfYnVmZmVyKSwgc3RkaW4pOworICAgICAgICAgaGFzaF9kZXNjcmlwdG9yW2lkeF0ucHJvY2VzcygmbWQsIGhhc2hfYnVmZmVyLCB4KTsKKyAgICAgIH0gd2hpbGUgKHggPT0gc2l6ZW9mKGhhc2hfYnVmZmVyKSk7CisgICAgICBoYXNoX2Rlc2NyaXB0b3JbaWR4XS5kb25lKCZtZCwgaGFzaF9idWZmZXIpOworICAgICAgZm9yICh4ID0gMDsgeCA8IChpbnQpaGFzaF9kZXNjcmlwdG9yW2lkeF0uaGFzaHNpemU7IHgrKykgeworICAgICAgICAgIHByaW50ZigiJTAyeCIsaGFzaF9idWZmZXJbeF0pOworICAgICAgfQorICAgICAgcHJpbnRmKCIgIChzdGRpbilcbiIpOworICAgfSBlbHNlIHsKKyAgICAgIGZvciAoeiA9IDI7IHogPCBhcmdjOyB6KyspIHsKKyAgICAgICAgIHcgPSBzaXplb2YoaGFzaF9idWZmZXIpOworICAgICAgICAgaWYgKChlcnJubyA9IGhhc2hfZmlsZShpZHgsYXJndlt6XSxoYXNoX2J1ZmZlciwmdykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBwcmludGYoIkZpbGUgaGFzaCBlcnJvcjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnJubykpOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgKGludCloYXNoX2Rlc2NyaXB0b3JbaWR4XS5oYXNoc2l6ZTsgeCsrKSB7CisgICAgICAgICAgICAgICAgIHByaW50ZigiJTAyeCIsaGFzaF9idWZmZXJbeF0pOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBwcmludGYoIiAgJXNcbiIsIGFyZ3Zbel0pOworICAgICAgICAgfQorICAgICAgfQorICAgfQorICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKwordm9pZCByZWdpc3Rlcl9hbGdzKHZvaWQpCit7CisgIGludCBlcnI7CisKKyNpZmRlZiBUSUdFUgorICByZWdpc3Rlcl9oYXNoICgmdGlnZXJfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBNRDIKKyAgcmVnaXN0ZXJfaGFzaCAoJm1kMl9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIE1ENAorICByZWdpc3Rlcl9oYXNoICgmbWQ0X2Rlc2MpOworI2VuZGlmCisjaWZkZWYgTUQ1CisgIHJlZ2lzdGVyX2hhc2ggKCZtZDVfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBTSEExCisgIHJlZ2lzdGVyX2hhc2ggKCZzaGExX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgU0hBMjI0CisgIHJlZ2lzdGVyX2hhc2ggKCZzaGEyMjRfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBTSEEyNTYKKyAgcmVnaXN0ZXJfaGFzaCAoJnNoYTI1Nl9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFNIQTM4NAorICByZWdpc3Rlcl9oYXNoICgmc2hhMzg0X2Rlc2MpOworI2VuZGlmCisjaWZkZWYgU0hBNTEyCisgIHJlZ2lzdGVyX2hhc2ggKCZzaGE1MTJfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBSSVBFTUQxMjgKKyAgcmVnaXN0ZXJfaGFzaCAoJnJtZDEyOF9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFJJUEVNRDE2MAorICByZWdpc3Rlcl9oYXNoICgmcm1kMTYwX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgV0hJUkxQT09MCisgIHJlZ2lzdGVyX2hhc2ggKCZ3aGlybHBvb2xfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBDSENfSEFTSAorICByZWdpc3Rlcl9oYXNoKCZjaGNfZGVzYyk7CisgIGlmICgoZXJyID0gY2hjX3JlZ2lzdGVyKHJlZ2lzdGVyX2NpcGhlcigmYWVzX2VuY19kZXNjKSkpICE9IENSWVBUX09LKSB7CisgICAgIHByaW50ZigiY2hjX3JlZ2lzdGVyIGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgIH0KKyNlbmRpZgorCit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L2RlbW9zL2hhc2hzdW0uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM1OjU2ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L2RlbW9zL211bHRpLmMgYi9saWJ0b21jcnlwdC9kZW1vcy9tdWx0aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1MjBkZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9kZW1vcy9tdWx0aS5jCkBAIC0wLDAgKzEsMTEwIEBACisvKiB0ZXN0IHRoZSBtdWx0aSBoZWxwZXJzLi4uICovCisjaW5jbHVkZSA8dG9tY3J5cHQuaD4KKworaW50IG1haW4odm9pZCkKK3sKKyAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XSwgYnVmWzJdW01BWEJMT0NLU0laRV07CisgICB1bnNpZ25lZCBsb25nIGxlbiwgbGVuMjsKKworCisvKiByZWdpc3RlciBhbGdvcyAqLworICAgcmVnaXN0ZXJfaGFzaCgmc2hhMjU2X2Rlc2MpOworICAgcmVnaXN0ZXJfY2lwaGVyKCZhZXNfZGVzYyk7CisKKy8qIEhBU0ggdGVzdGluZyAqLworICAgbGVuID0gc2l6ZW9mKGJ1ZlswXSk7CisgICBoYXNoX21lbW9yeShmaW5kX2hhc2goInNoYTI1NiIpLCAodW5zaWduZWQgY2hhciopImhlbGxvIiwgNSwgYnVmWzBdLCAmbGVuKTsKKyAgIGxlbjIgPSBzaXplb2YoYnVmWzBdKTsKKyAgIGhhc2hfbWVtb3J5X211bHRpKGZpbmRfaGFzaCgic2hhMjU2IiksIGJ1ZlsxXSwgJmxlbjIsICh1bnNpZ25lZCBjaGFyKikiaGVsbG8iLCA1LCBOVUxMKTsKKyAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKKyAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICB9CisgICBsZW4yID0gc2l6ZW9mKGJ1ZlswXSk7CisgICBoYXNoX21lbW9yeV9tdWx0aShmaW5kX2hhc2goInNoYTI1NiIpLCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImhlIiwgMlVMLCAibGxvIiwgM1VMLCBOVUxMLCAwKTsKKyAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKKyAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICB9CisgICBsZW4yID0gc2l6ZW9mKGJ1ZlswXSk7CisgICBoYXNoX21lbW9yeV9tdWx0aShmaW5kX2hhc2goInNoYTI1NiIpLCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImgiLCAxVUwsICJlIiwgMVVMLCAibCIsIDFVTCwgImwiLCAxVUwsICJvIiwgMVVMLCBOVUxMKTsKKyAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKKyAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICB9CisKKy8qIEhNQUMgKi8KKyAgIGxlbiA9IHNpemVvZihidWZbMF0pOworICAgaG1hY19tZW1vcnkoZmluZF9oYXNoKCJzaGEyNTYiKSwga2V5LCAxNiwgKHVuc2lnbmVkIGNoYXIqKSJoZWxsbyIsIDUsIGJ1ZlswXSwgJmxlbik7CisgICBsZW4yID0gc2l6ZW9mKGJ1ZlswXSk7CisgICBobWFjX21lbW9yeV9tdWx0aShmaW5kX2hhc2goInNoYTI1NiIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImhlbGxvIiwgNVVMLCBOVUxMKTsKKyAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKKyAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICB9CisgICBsZW4yID0gc2l6ZW9mKGJ1ZlswXSk7CisgICBobWFjX21lbW9yeV9tdWx0aShmaW5kX2hhc2goInNoYTI1NiIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImhlIiwgMlVMLCAibGxvIiwgM1VMLCBOVUxMKTsKKyAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKKyAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICB9CisgICBsZW4yID0gc2l6ZW9mKGJ1ZlswXSk7CisgICBobWFjX21lbW9yeV9tdWx0aShmaW5kX2hhc2goInNoYTI1NiIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImgiLCAxVUwsICJlIiwgMVVMLCAibCIsIDFVTCwgImwiLCAxVUwsICJvIiwgMVVMLCBOVUxMKTsKKyAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKKyAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICB9CisKKy8qIE9NQUMgKi8KKyAgIGxlbiA9IHNpemVvZihidWZbMF0pOworICAgb21hY19tZW1vcnkoZmluZF9jaXBoZXIoImFlcyIpLCBrZXksIDE2LCAodW5zaWduZWQgY2hhciopImhlbGxvIiwgNSwgYnVmWzBdLCAmbGVuKTsKKyAgIGxlbjIgPSBzaXplb2YoYnVmWzBdKTsKKyAgIG9tYWNfbWVtb3J5X211bHRpKGZpbmRfY2lwaGVyKCJhZXMiKSwga2V5LCAxNiwgYnVmWzFdLCAmbGVuMiwgKHVuc2lnbmVkIGNoYXIqKSJoZWxsbyIsIDVVTCwgTlVMTCk7CisgICBpZiAobGVuICE9IGxlbjIgfHwgbWVtY21wKGJ1ZlswXSwgYnVmWzFdLCBsZW4pKSB7CisgICAgICBwcmludGYoIkZhaWxlZDogJWQgJWx1ICVsdVxuIiwgX19MSU5FX18sIGxlbiwgbGVuMik7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgfQorICAgbGVuMiA9IHNpemVvZihidWZbMF0pOworICAgb21hY19tZW1vcnlfbXVsdGkoZmluZF9jaXBoZXIoImFlcyIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImhlIiwgMlVMLCAibGxvIiwgM1VMLCBOVUxMKTsKKyAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKKyAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICB9CisgICBsZW4yID0gc2l6ZW9mKGJ1ZlswXSk7CisgICBvbWFjX21lbW9yeV9tdWx0aShmaW5kX2NpcGhlcigiYWVzIiksIGtleSwgMTYsIGJ1ZlsxXSwgJmxlbjIsICh1bnNpZ25lZCBjaGFyKikiaCIsIDFVTCwgImUiLCAxVUwsICJsIiwgMVVMLCAibCIsIDFVTCwgIm8iLCAxVUwsIE5VTEwpOworICAgaWYgKGxlbiAhPSBsZW4yIHx8IG1lbWNtcChidWZbMF0sIGJ1ZlsxXSwgbGVuKSkgeworICAgICAgcHJpbnRmKCJGYWlsZWQ6ICVkICVsdSAlbHVcbiIsIF9fTElORV9fLCBsZW4sIGxlbjIpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIH0KKworLyogUE1BQyAqLworICAgbGVuID0gc2l6ZW9mKGJ1ZlswXSk7CisgICBwbWFjX21lbW9yeShmaW5kX2NpcGhlcigiYWVzIiksIGtleSwgMTYsICh1bnNpZ25lZCBjaGFyKikiaGVsbG8iLCA1LCBidWZbMF0sICZsZW4pOworICAgbGVuMiA9IHNpemVvZihidWZbMF0pOworICAgcG1hY19tZW1vcnlfbXVsdGkoZmluZF9jaXBoZXIoImFlcyIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImhlbGxvIiwgNSwgTlVMTCk7CisgICBpZiAobGVuICE9IGxlbjIgfHwgbWVtY21wKGJ1ZlswXSwgYnVmWzFdLCBsZW4pKSB7CisgICAgICBwcmludGYoIkZhaWxlZDogJWQgJWx1ICVsdVxuIiwgX19MSU5FX18sIGxlbiwgbGVuMik7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgfQorICAgbGVuMiA9IHNpemVvZihidWZbMF0pOworICAgcG1hY19tZW1vcnlfbXVsdGkoZmluZF9jaXBoZXIoImFlcyIpLCBrZXksIDE2LCBidWZbMV0sICZsZW4yLCAodW5zaWduZWQgY2hhciopImhlIiwgMlVMLCAibGxvIiwgM1VMLCBOVUxMKTsKKyAgIGlmIChsZW4gIT0gbGVuMiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMV0sIGxlbikpIHsKKyAgICAgIHByaW50ZigiRmFpbGVkOiAlZCAlbHUgJWx1XG4iLCBfX0xJTkVfXywgbGVuLCBsZW4yKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICB9CisgICBsZW4yID0gc2l6ZW9mKGJ1ZlswXSk7CisgICBwbWFjX21lbW9yeV9tdWx0aShmaW5kX2NpcGhlcigiYWVzIiksIGtleSwgMTYsIGJ1ZlsxXSwgJmxlbjIsICh1bnNpZ25lZCBjaGFyKikiaCIsIDFVTCwgImUiLCAxVUwsICJsIiwgMVVMLCAibCIsIDFVTCwgIm8iLCAxVUwsIE5VTEwpOworICAgaWYgKGxlbiAhPSBsZW4yIHx8IG1lbWNtcChidWZbMF0sIGJ1ZlsxXSwgbGVuKSkgeworICAgICAgcHJpbnRmKCJGYWlsZWQ6ICVkICVsdSAlbHVcbiIsIF9fTElORV9fLCBsZW4sIGxlbjIpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIH0KKworCisgICBwcmludGYoIkFsbCBwYXNzZWRcbiIpOworICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9kZW1vcy9tdWx0aS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMDcgMjI6MjU6MDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvZGVtb3Mvc21hbGwuYyBiL2xpYnRvbWNyeXB0L2RlbW9zL3NtYWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAxOTc0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L2RlbW9zL3NtYWxsLmMKQEAgLTAsMCArMSwxNCBAQAorLyogc21hbGwgZGVtbyBhcHAgdGhhdCBqdXN0IGluY2x1ZGVzIGEgY2lwaGVyL2hhc2gvcHJuZyAqLworI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CisKK2ludCBtYWluKHZvaWQpCit7CisgICByZWdpc3Rlcl9jaXBoZXIoJnJpam5kYWVsX2VuY19kZXNjKTsKKyAgIHJlZ2lzdGVyX3BybmcoJnlhcnJvd19kZXNjKTsKKyAgIHJlZ2lzdGVyX2hhc2goJnNoYTI1Nl9kZXNjKTsKKyAgIHJldHVybiAwOworfQorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9kZW1vcy9zbWFsbC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMDcgMjI6MjU6MDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvZGVtb3MvdGVzdC5jIGIvbGlidG9tY3J5cHQvZGVtb3MvdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2YTIxMTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9kZW1vcy90ZXN0LmMKQEAgLTAsMCArMSwzNiBAQAorI2luY2x1ZGUgPHRvbWNyeXB0X3Rlc3QuaD4KKworaW50IG1haW4odm9pZCkKK3sKKyAgIGludCB4OworICAgcmVnX2FsZ3MoKTsKKworI2lmZGVmIFVTRV9MVE0KKyAgIGx0Y19tcCA9IGx0bV9kZXNjOworI2VsaWYgZGVmaW5lZChVU0VfVEZNKQorICAgbHRjX21wID0gdGZtX2Rlc2M7CisjZWxpZiBkZWZpbmVkKFVTRV9HTVApCisgICBsdGNfbXAgPSBnbXBfZGVzYzsKKyNlbHNlCisgICBleHRlcm4gbHRjX21hdGhfZGVzY3JpcHRvciBFWFRfTUFUSF9MSUI7CisgICBsdGNfbXAgPSBFWFRfTUFUSF9MSUI7CisjZW5kaWYKKworICAgcHJpbnRmKCJidWlsZCA9PSBcbiVzXG4iLCBjcnlwdF9idWlsZF9zZXR0aW5ncyk7CisgICBwcmludGYoIlxuc3RvcmVfdGVzdC4uLi4iKTsgZmZsdXNoKHN0ZG91dCk7IHggPSBzdG9yZV90ZXN0KCk7ICAgICAgIHByaW50Zih4ID8gImZhaWxlZCIgOiAicGFzc2VkIik7aWYgKHgpIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgIHByaW50ZigiXG5jaXBoZXJfdGVzdC4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgeCA9IGNpcGhlcl9oYXNoX3Rlc3QoKTsgcHJpbnRmKHggPyAiZmFpbGVkIiA6ICJwYXNzZWQiKTtpZiAoeCkgZXhpdChFWElUX0ZBSUxVUkUpOworICAgcHJpbnRmKCJcbm1vZGVzX3Rlc3QuLi4uIik7IGZmbHVzaChzdGRvdXQpOyB4ID0gbW9kZXNfdGVzdCgpOyAgICAgICBwcmludGYoeCA/ICJmYWlsZWQiIDogInBhc3NlZCIpO2lmICh4KSBleGl0KEVYSVRfRkFJTFVSRSk7CisgICBwcmludGYoIlxuZGVyX3Rlc3QuLi4uLi4iKTsgZmZsdXNoKHN0ZG91dCk7IHggPSBkZXJfdGVzdHMoKTsgICAgICAgIHByaW50Zih4ID8gImZhaWxlZCIgOiAicGFzc2VkIik7aWYgKHgpIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgIHByaW50ZigiXG5tYWNfdGVzdC4uLi4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgeCA9IG1hY190ZXN0KCk7ICAgICAgICAgcHJpbnRmKHggPyAiZmFpbGVkIiA6ICJwYXNzZWQiKTtpZiAoeCkgZXhpdChFWElUX0ZBSUxVUkUpOworICAgcHJpbnRmKCJcbnBrY3NfMV90ZXN0Li4uIik7IGZmbHVzaChzdGRvdXQpOyB4ID0gcGtjc18xX3Rlc3QoKTsgICAgICBwcmludGYoeCA/ICJmYWlsZWQiIDogInBhc3NlZCIpO2lmICh4KSBleGl0KEVYSVRfRkFJTFVSRSk7CisgICBwcmludGYoIlxucnNhX3Rlc3QuLi4uLi4iKTsgZmZsdXNoKHN0ZG91dCk7IHggPSByc2FfdGVzdCgpOyAgICAgICAgIHByaW50Zih4ID8gImZhaWxlZCIgOiAicGFzc2VkIik7aWYgKHgpIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgIHByaW50ZigiXG5lY2NfdGVzdC4uLi4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgeCA9IGVjY190ZXN0cygpOyAgICAgICAgcHJpbnRmKHggPyAiZmFpbGVkIiA6ICJwYXNzZWQiKTtpZiAoeCkgZXhpdChFWElUX0ZBSUxVUkUpOyAKKyAgIHByaW50ZigiXG5kc2FfdGVzdC4uLi4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgeCA9IGRzYV90ZXN0KCk7ICAgICAgICAgcHJpbnRmKHggPyAiZmFpbGVkIiA6ICJwYXNzZWQiKTtpZiAoeCkgZXhpdChFWElUX0ZBSUxVUkUpOworICAgcHJpbnRmKCJcbmthdGphX3Rlc3QuLi4uIik7IGZmbHVzaChzdGRvdXQpOyB4ID0ga2F0amFfdGVzdCgpOyAgICAgICBwcmludGYoeCA/ICJmYWlsZWQiIDogInBhc3NlZCIpO2lmICh4KSBleGl0KEVYSVRfRkFJTFVSRSk7CisgICBwcmludGYoIlxuIik7CisgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9kZW1vcy90ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMjggJCAqLworLyogJERhdGU6IDIwMDYvMDUvMjUgMTA6NTA6MDggJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvZGVtb3MvdGltaW5nLmMgYi9saWJ0b21jcnlwdC9kZW1vcy90aW1pbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWNjN2MwCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvZGVtb3MvdGltaW5nLmMKQEAgLTAsMCArMSw0MiBAQAorI2luY2x1ZGUgPHRvbWNyeXB0X3Rlc3QuaD4KKworaW50IG1haW4odm9pZCkKK3sKKworaW5pdF90aW1lcigpOworcmVnX2FsZ3MoKTsKKworI2lmZGVmIFVTRV9MVE0KKyAgIGx0Y19tcCA9IGx0bV9kZXNjOworI2VsaWYgZGVmaW5lZChVU0VfVEZNKQorICAgbHRjX21wID0gdGZtX2Rlc2M7CisjZWxpZiBkZWZpbmVkKFVTRV9HTVApCisgICBsdGNfbXAgPSBnbXBfZGVzYzsKKyNlbHNlCisgICBleHRlcm4gbHRjX21hdGhfZGVzY3JpcHRvciBFWFRfTUFUSF9MSUI7CisgICBsdGNfbXAgPSBFWFRfTUFUSF9MSUI7CisjZW5kaWYKKwordGltZV9rZXlzY2hlZCgpOwordGltZV9jaXBoZXIoKTsKK3RpbWVfY2lwaGVyMigpOwordGltZV9jaXBoZXIzKCk7Cit0aW1lX2NpcGhlcjQoKTsKK3RpbWVfaGFzaCgpOwordGltZV9tYWNzKCk7Cit0aW1lX2VuY21hY3MoKTsKK3RpbWVfcHJuZygpOwordGltZV9tdWx0KCk7Cit0aW1lX3NxcigpOwordGltZV9yc2EoKTsKK3RpbWVfZWNjKCk7CisjaWZkZWYgVVNFX0xUTQordGltZV9rYXRqYSgpOworI2VuZGlmCityZXR1cm4gRVhJVF9TVUNDRVNTOworCit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L2RlbW9zL3RpbWluZy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYxICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzAzIDAzOjA4OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L2RlbW9zL3R2X2dlbi5jIGIvbGlidG9tY3J5cHQvZGVtb3MvdHZfZ2VuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjNjFhOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L2RlbW9zL3R2X2dlbi5jCkBAIC0wLDAgKzEsNzg2IEBACisjaW5jbHVkZSA8dG9tY3J5cHQuaD4KKwordm9pZCByZWdfYWxncyh2b2lkKQoreworICBpbnQgZXJyOworCisjaWZkZWYgUklKTkRBRUwKKyAgcmVnaXN0ZXJfY2lwaGVyICgmYWVzX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgQkxPV0ZJU0gKKyAgcmVnaXN0ZXJfY2lwaGVyICgmYmxvd2Zpc2hfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBYVEVBCisgIHJlZ2lzdGVyX2NpcGhlciAoJnh0ZWFfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBSQzUKKyAgcmVnaXN0ZXJfY2lwaGVyICgmcmM1X2Rlc2MpOworI2VuZGlmCisjaWZkZWYgUkM2CisgIHJlZ2lzdGVyX2NpcGhlciAoJnJjNl9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFNBRkVSUAorICByZWdpc3Rlcl9jaXBoZXIgKCZzYWZlcnBfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBUV09GSVNICisgIHJlZ2lzdGVyX2NpcGhlciAoJnR3b2Zpc2hfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBTQUZFUgorICByZWdpc3Rlcl9jaXBoZXIgKCZzYWZlcl9rNjRfZGVzYyk7CisgIHJlZ2lzdGVyX2NpcGhlciAoJnNhZmVyX3NrNjRfZGVzYyk7CisgIHJlZ2lzdGVyX2NpcGhlciAoJnNhZmVyX2sxMjhfZGVzYyk7CisgIHJlZ2lzdGVyX2NpcGhlciAoJnNhZmVyX3NrMTI4X2Rlc2MpOworI2VuZGlmCisjaWZkZWYgUkMyCisgIHJlZ2lzdGVyX2NpcGhlciAoJnJjMl9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIERFUworICByZWdpc3Rlcl9jaXBoZXIgKCZkZXNfZGVzYyk7CisgIHJlZ2lzdGVyX2NpcGhlciAoJmRlczNfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBDQVNUNQorICByZWdpc3Rlcl9jaXBoZXIgKCZjYXN0NV9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIE5PRUtFT04KKyAgcmVnaXN0ZXJfY2lwaGVyICgmbm9la2Vvbl9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFNLSVBKQUNLCisgIHJlZ2lzdGVyX2NpcGhlciAoJnNraXBqYWNrX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgQU5VQklTCisgIHJlZ2lzdGVyX2NpcGhlciAoJmFudWJpc19kZXNjKTsKKyNlbmRpZgorI2lmZGVmIEtIQVpBRAorICByZWdpc3Rlcl9jaXBoZXIgKCZraGF6YWRfZGVzYyk7CisjZW5kaWYKKworI2lmZGVmIFRJR0VSCisgIHJlZ2lzdGVyX2hhc2ggKCZ0aWdlcl9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIE1EMgorICByZWdpc3Rlcl9oYXNoICgmbWQyX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgTUQ0CisgIHJlZ2lzdGVyX2hhc2ggKCZtZDRfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBNRDUKKyAgcmVnaXN0ZXJfaGFzaCAoJm1kNV9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFNIQTEKKyAgcmVnaXN0ZXJfaGFzaCAoJnNoYTFfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBTSEEyMjQKKyAgcmVnaXN0ZXJfaGFzaCAoJnNoYTIyNF9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFNIQTI1NgorICByZWdpc3Rlcl9oYXNoICgmc2hhMjU2X2Rlc2MpOworI2VuZGlmCisjaWZkZWYgU0hBMzg0CisgIHJlZ2lzdGVyX2hhc2ggKCZzaGEzODRfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBTSEE1MTIKKyAgcmVnaXN0ZXJfaGFzaCAoJnNoYTUxMl9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFJJUEVNRDEyOAorICByZWdpc3Rlcl9oYXNoICgmcm1kMTI4X2Rlc2MpOworI2VuZGlmCisjaWZkZWYgUklQRU1EMTYwCisgIHJlZ2lzdGVyX2hhc2ggKCZybWQxNjBfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBXSElSTFBPT0wKKyAgcmVnaXN0ZXJfaGFzaCAoJndoaXJscG9vbF9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIENIQ19IQVNICisgIHJlZ2lzdGVyX2hhc2goJmNoY19kZXNjKTsKKyAgaWYgKChlcnIgPSBjaGNfcmVnaXN0ZXIocmVnaXN0ZXJfY2lwaGVyKCZhZXNfZGVzYykpKSAhPSBDUllQVF9PSykgeworICAgICBwcmludGYoImNoY19yZWdpc3RlciBlcnJvcjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICB9CisjZW5kaWYKKworI2lmZGVmIFVTRV9MVE0KKyAgIGx0Y19tcCA9IGx0bV9kZXNjOworI2VsaWYgZGVmaW5lZChVU0VfVEZNKQorICAgbHRjX21wID0gdGZtX2Rlc2M7CisjZWxpZiBkZWZpbmVkKFVTRV9HTVApCisgICBsdGNfbXAgPSBnbXBfZGVzYzsKKyNlbHNlCisgICBleHRlcm4gbHRjX21hdGhfZGVzY3JpcHRvciBFWFRfTUFUSF9MSUI7CisgICBsdGNfbXAgPSBFWFRfTUFUSF9MSUI7CisjZW5kaWYKKworCit9CisKK3ZvaWQgaGFzaF9nZW4odm9pZCkKK3sKKyAgIHVuc2lnbmVkIGNoYXIgbWRbTUFYQkxPQ0tTSVpFXSwgKmJ1ZjsKKyAgIHVuc2lnbmVkIGxvbmcgb3V0bGVuLCB4LCB5LCB6OworICAgRklMRSAqb3V0OworICAgaW50ICAgZXJyOworICAgCisgICBvdXQgPSBmb3BlbigiaGFzaF90di50eHQiLCAidyIpOworICAgaWYgKG91dCA9PSBOVUxMKSB7CisgICAgICBwZXJyb3IoImNhbid0IG9wZW4gaGFzaF90diIpOworICAgfQorICAgCisgICBmcHJpbnRmKG91dCwgIkhhc2ggVGVzdCBWZWN0b3JzOlxuXG5UaGVzZSBhcmUgdGhlIGhhc2hlcyBvZiBubiBieXRlcyAnMDAgMDEgMDIgMDMgLi4gKG5uLTEpJ1xuXG4iKTsKKyAgIGZvciAoeCA9IDA7IGhhc2hfZGVzY3JpcHRvclt4XS5uYW1lICE9IE5VTEw7IHgrKykgeworICAgICAgYnVmID0gWE1BTExPQygyICogaGFzaF9kZXNjcmlwdG9yW3hdLmJsb2Nrc2l6ZSArIDEpOworICAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICBwZXJyb3IoImNhbid0IGFsbG9jIG1lbSIpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgICAgZnByaW50ZihvdXQsICJIYXNoOiAlc1xuIiwgaGFzaF9kZXNjcmlwdG9yW3hdLm5hbWUpOworICAgICAgZm9yICh5ID0gMDsgeSA8PSAoaGFzaF9kZXNjcmlwdG9yW3hdLmJsb2Nrc2l6ZSAqIDIpOyB5KyspIHsKKyAgICAgICAgIGZvciAoeiA9IDA7IHogPCB5OyB6KyspIHsKKyAgICAgICAgICAgIGJ1Zlt6XSA9ICh1bnNpZ25lZCBjaGFyKSh6ICYgMjU1KTsKKyAgICAgICAgIH0KKyAgICAgICAgIG91dGxlbiA9IHNpemVvZihtZCk7CisgICAgICAgICBpZiAoKGVyciA9IGhhc2hfbWVtb3J5KHgsIGJ1ZiwgeSwgbWQsICZvdXRsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgcHJpbnRmKCJoYXNoX21lbW9yeSBlcnJvcjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGZwcmludGYob3V0LCAiJTNsdTogIiwgeSk7CisgICAgICAgICBmb3IgKHogPSAwOyB6IDwgb3V0bGVuOyB6KyspIHsKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiJTAyWCIsIG1kW3pdKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGZwcmludGYob3V0LCAiXG4iKTsKKyAgICAgIH0KKyAgICAgIGZwcmludGYob3V0LCAiXG4iKTsKKyAgICAgIFhGUkVFKGJ1Zik7CisgICB9CisgICBmY2xvc2Uob3V0KTsKK30KKwordm9pZCBjaXBoZXJfZ2VuKHZvaWQpCit7CisgICB1bnNpZ25lZCBjaGFyICprZXksIHB0W01BWEJMT0NLU0laRV07CisgICB1bnNpZ25lZCBsb25nIHgsIHksIHosIHc7CisgICBpbnQgZXJyLCBrbCwgbGFzdGtsOworICAgRklMRSAqb3V0OworICAgc3ltbWV0cmljX2tleSBza2V5OworICAgCisgICBvdXQgPSBmb3BlbigiY2lwaGVyX3R2LnR4dCIsICJ3Iik7CisgICAKKyAgIGZwcmludGYob3V0LCAKKyJDaXBoZXIgVGVzdCBWZWN0b3JzXG5cblRoZXNlIGFyZSB0ZXN0IGVuY3J5cHRpb25zIHdpdGgga2V5IG9mIG5uIGJ5dGVzICcwMCAwMSAwMiAwMyAuLiAobm4tMSknIGFuZCBvcmlnaW5hbCBQVCBvZiB0aGUgc2FtZSBzdHlsZS5cbiIKKyJUaGUgb3V0cHV0IG9mIHN0ZXAgTiBpcyB1c2VkIGFzIHRoZSBrZXkgYW5kIHBsYWludGV4dCBmb3Igc3RlcCBOKzEgKGtleSBieXRlcyByZXBlYXRlZCBhcyByZXF1aXJlZCB0byBmaWxsIHRoZSBrZXkpXG5cbiIpOworICAgICAgICAgICAgICAgICAgIAorICAgZm9yICh4ID0gMDsgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMOyB4KyspIHsKKyAgICAgIGZwcmludGYob3V0LCAiQ2lwaGVyOiAlc1xuIiwgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSk7CisgICAgICAKKyAgICAgIC8qIHRocmVlIG1vZGVzLCBzbWFsbGVzdCwgbWVkaXVtLCBsYXJnZSBrZXlzICovCisgICAgICBsYXN0a2wgPSAxMDAwMDsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAzOyB5KyspIHsKKyAgICAgICAgIHN3aXRjaCAoeSkgeworICAgICAgICAgICAgY2FzZSAwOiBrbCA9IGNpcGhlcl9kZXNjcmlwdG9yW3hdLm1pbl9rZXlfbGVuZ3RoOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMToga2wgPSAoY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubWluX2tleV9sZW5ndGggKyBjaXBoZXJfZGVzY3JpcHRvclt4XS5tYXhfa2V5X2xlbmd0aCkvMjsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6IGtsID0gY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubWF4X2tleV9sZW5ndGg7IGJyZWFrOworICAgICAgICAgfQorICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvclt4XS5rZXlzaXplKCZrbCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBwcmludGYoImtleXNpemUgZXJyb3I6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICB9CisgICAgICAgICBpZiAoa2wgPT0gbGFzdGtsKSBicmVhazsKKyAgICAgICAgIGxhc3RrbCA9IGtsOworICAgICAgICAgZnByaW50ZihvdXQsICJLZXkgU2l6ZTogJWQgYnl0ZXNcbiIsIGtsKTsKKworICAgICAgICAga2V5ID0gWE1BTExPQyhrbCk7CisgICAgICAgICBpZiAoa2V5ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHBlcnJvcigiY2FuJ3QgbWFsbG9jIG1lbW9yeSIpOworICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgfQorCisgICAgICAgICBmb3IgKHogPSAwOyAoaW50KXogPCBrbDsgeisrKSB7CisgICAgICAgICAgICAga2V5W3pdID0gKHVuc2lnbmVkIGNoYXIpejsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbeF0uc2V0dXAoa2V5LCBrbCwgMCwgJnNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgcHJpbnRmKCJzZXR1cCBlcnJvcjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgIH0KKyAgICAgICAgIAorICAgICAgICAgZm9yICh6ID0gMDsgKGludCl6IDwgY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoOyB6KyspIHsKKyAgICAgICAgICAgIHB0W3pdID0gKHVuc2lnbmVkIGNoYXIpejsKKyAgICAgICAgIH0KKyAgICAgICAgIGZvciAodyA9IDA7IHcgPCA1MDsgdysrKSB7CisgICAgICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbeF0uZWNiX2VuY3J5cHQocHQsIHB0LCAmc2tleSk7CisgICAgICAgICAgICAgZnByaW50ZihvdXQsICIlMmx1OiAiLCB3KTsKKyAgICAgICAgICAgICBmb3IgKHogPSAwOyAoaW50KXogPCBjaXBoZXJfZGVzY3JpcHRvclt4XS5ibG9ja19sZW5ndGg7IHorKykgeworICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiJTAyWCIsIHB0W3pdKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgZnByaW50ZihvdXQsICJcbiIpOworCisgICAgICAgICAgICAgLyogcmVzY2hlZHVsZSBhIG5ldyBrZXkgKi8KKyAgICAgICAgICAgICBmb3IgKHogPSAwOyB6IDwgKHVuc2lnbmVkIGxvbmcpa2w7IHorKykgeworICAgICAgICAgICAgICAgICBrZXlbel0gPSBwdFt6ICUgY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoXTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvclt4XS5zZXR1cChrZXksIGtsLCAwLCAmc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJjaXBoZXIgc2V0dXAyIGVycm9yOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICAgICBmcHJpbnRmKG91dCwgIlxuIik7CisgICAgICAgICBYRlJFRShrZXkpOworICAgICB9CisgICAgIGZwcmludGYob3V0LCAiXG4iKTsKKyAgfQorICBmY2xvc2Uob3V0KTsKK30gIAorCit2b2lkIGhtYWNfZ2VuKHZvaWQpCit7CisgICB1bnNpZ25lZCBjaGFyIGtleVtNQVhCTE9DS1NJWkVdLCBvdXRwdXRbTUFYQkxPQ0tTSVpFXSwgKmlucHV0OworICAgaW50IHgsIHksIHosIGVycjsKKyAgIEZJTEUgKm91dDsKKyAgIHVuc2lnbmVkIGxvbmcgbGVuOworICAKKyAgIG91dCA9IGZvcGVuKCJobWFjX3R2LnR4dCIsICJ3Iik7CisKKyAgIGZwcmludGYob3V0LCAKKyJITUFDIFRlc3RzLiAgSW4gdGhlc2UgdGVzdHMgbWVzc2FnZXMgb2YgTiBieXRlcyBsb25nICgwMCwwMSwwMiwuLi4sTk4tMSkgYXJlIEhNQUNlZC4gIFRoZSBpbml0aWFsIGtleSBpc1xuIgorIm9mIHRoZSBzYW1lIGZvcm1hdCAodGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBIQVNIIG91dHB1dCBzaXplKS4gIFRoZSBITUFDIGtleSBpbiBzdGVwIE4rMSBpcyB0aGUgSE1BQyBvdXRwdXQgb2ZcbiIKKyJzdGVwIE4uXG5cbiIpOworCisgICBmb3IgKHggPSAwOyBoYXNoX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMOyB4KyspIHsKKyAgICAgIGZwcmludGYob3V0LCAiSE1BQy0lc1xuIiwgaGFzaF9kZXNjcmlwdG9yW3hdLm5hbWUpOworICAgICAgCisgICAgICAvKiBpbml0aWFsIGtleSAqLworICAgICAgZm9yICh5ID0gMDsgeSA8IChpbnQpaGFzaF9kZXNjcmlwdG9yW3hdLmhhc2hzaXplOyB5KyspIHsKKyAgICAgICAgICBrZXlbeV0gPSAoeSYyNTUpOworICAgICAgfQorCisgICAgICBpbnB1dCA9IFhNQUxMT0MoaGFzaF9kZXNjcmlwdG9yW3hdLmJsb2Nrc2l6ZSAqIDIgKyAxKTsKKyAgICAgIGlmIChpbnB1dCA9PSBOVUxMKSB7CisgICAgICAgICBwZXJyb3IoIkNhbid0IG1hbGxvYyBtZW1vcnkiKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgZm9yICh5ID0gMDsgeSA8PSAoaW50KShoYXNoX2Rlc2NyaXB0b3JbeF0uYmxvY2tzaXplICogMik7IHkrKykgeworICAgICAgICAgZm9yICh6ID0gMDsgeiA8IHk7IHorKykgeworICAgICAgICAgICAgaW5wdXRbel0gPSAodW5zaWduZWQgY2hhcikoeiAmIDI1NSk7CisgICAgICAgICB9CisgICAgICAgICBsZW4gPSBzaXplb2Yob3V0cHV0KTsKKyAgICAgICAgIGlmICgoZXJyID0gaG1hY19tZW1vcnkoeCwga2V5LCBoYXNoX2Rlc2NyaXB0b3JbeF0uaGFzaHNpemUsIGlucHV0LCB5LCBvdXRwdXQsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBobWFjaW5nOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgfQorICAgICAgICAgZnByaW50ZihvdXQsICIlM2Q6ICIsIHkpOworICAgICAgICAgZm9yICh6ID0gMDsgeiA8KGludCkgbGVuOyB6KyspIHsKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiJTAyWCIsIG91dHB1dFt6XSk7CisgICAgICAgICB9CisgICAgICAgICBmcHJpbnRmKG91dCwgIlxuIik7CisKKyAgICAgICAgIC8qIGZvcndhcmQgdGhlIGtleSAqLworICAgICAgICAgbWVtY3B5KGtleSwgb3V0cHV0LCBoYXNoX2Rlc2NyaXB0b3JbeF0uaGFzaHNpemUpOworICAgICAgfQorICAgICAgWEZSRUUoaW5wdXQpOworICAgICAgZnByaW50ZihvdXQsICJcbiIpOworICAgfQorICAgZmNsb3NlKG91dCk7Cit9CisgICAKK3ZvaWQgb21hY19nZW4odm9pZCkKK3sKKyAgIHVuc2lnbmVkIGNoYXIga2V5W01BWEJMT0NLU0laRV0sIG91dHB1dFtNQVhCTE9DS1NJWkVdLCBpbnB1dFtNQVhCTE9DS1NJWkUqMisyXTsKKyAgIGludCBlcnIsIHgsIHksIHosIGtsOworICAgRklMRSAqb3V0OworICAgdW5zaWduZWQgbG9uZyBsZW47CisgIAorICAgb3V0ID0gZm9wZW4oIm9tYWNfdHYudHh0IiwgInciKTsKKworICAgZnByaW50ZihvdXQsIAorIk9NQUMgVGVzdHMuICBJbiB0aGVzZSB0ZXN0cyBtZXNzYWdlcyBvZiBOIGJ5dGVzIGxvbmcgKDAwLDAxLDAyLC4uLixOTi0xKSBhcmUgT01BQydlZC4gIFRoZSBpbml0aWFsIGtleSBpc1xuIgorIm9mIHRoZSBzYW1lIGZvcm1hdCAobGVuZ3RoIHNwZWNpZmllZCBwZXIgY2lwaGVyKS4gIFRoZSBPTUFDIGtleSBpbiBzdGVwIE4rMSBpcyB0aGUgT01BQyBvdXRwdXQgb2ZcbiIKKyJzdGVwIE4gKHJlcGVhdGVkIGFzIHJlcXVpcmVkIHRvIGZpbGwgdGhlIGFycmF5KS5cblxuIik7CisKKyAgIGZvciAoeCA9IDA7IGNpcGhlcl9kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTDsgeCsrKSB7CisgICAgICBrbCA9IGNpcGhlcl9kZXNjcmlwdG9yW3hdLmJsb2NrX2xlbmd0aDsKKworICAgICAgLyogc2tpcCBjaXBoZXJzIHdoaWNoIGRvIG5vdCBoYXZlIDY0IG9yIDEyOCBiaXQgYmxvY2sgc2l6ZXMgKi8KKyAgICAgIGlmIChrbCAhPSA4ICYmIGtsICE9IDE2KSBjb250aW51ZTsKKworICAgICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW3hdLmtleXNpemUoJmtsKSAhPSBDUllQVF9PSykgeworICAgICAgICAga2wgPSBjaXBoZXJfZGVzY3JpcHRvclt4XS5tYXhfa2V5X2xlbmd0aDsKKyAgICAgIH0KKyAgICAgIGZwcmludGYob3V0LCAiT01BQy0lcyAoJWQgYnl0ZSBrZXkpXG4iLCBjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lLCBrbCk7CisgICAgICAKKyAgICAgIC8qIGluaXRpYWwga2V5L2Jsb2NrICovCisgICAgICBmb3IgKHkgPSAwOyB5IDwga2w7IHkrKykgeworICAgICAgICAgIGtleVt5XSA9ICh5ICYgMjU1KTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgZm9yICh5ID0gMDsgeSA8PSAoaW50KShjaXBoZXJfZGVzY3JpcHRvclt4XS5ibG9ja19sZW5ndGgqMik7IHkrKykgeworICAgICAgICAgZm9yICh6ID0gMDsgeiA8IHk7IHorKykgeworICAgICAgICAgICAgaW5wdXRbel0gPSAodW5zaWduZWQgY2hhcikoeiAmIDI1NSk7CisgICAgICAgICB9CisgICAgICAgICBsZW4gPSBzaXplb2Yob3V0cHV0KTsKKyAgICAgICAgIGlmICgoZXJyID0gb21hY19tZW1vcnkoeCwga2V5LCBrbCwgaW5wdXQsIHksIG91dHB1dCwgJmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBwcmludGYoIkVycm9yIG9tYWNpbmc6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICB9CisgICAgICAgICBmcHJpbnRmKG91dCwgIiUzZDogIiwgeSk7CisgICAgICAgICBmb3IgKHogPSAwOyB6IDwoaW50KWxlbjsgeisrKSB7CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiUwMlgiLCBvdXRwdXRbel0pOworICAgICAgICAgfQorICAgICAgICAgZnByaW50ZihvdXQsICJcbiIpOworCisgICAgICAgICAvKiBmb3J3YXJkIHRoZSBrZXkgKi8KKyAgICAgICAgIGZvciAoeiA9IDA7IHogPCBrbDsgeisrKSB7CisgICAgICAgICAgICAga2V5W3pdID0gb3V0cHV0W3ogJSBsZW5dOworICAgICAgICAgfQorICAgICAgfQorICAgICAgZnByaW50ZihvdXQsICJcbiIpOworICAgfQorICAgZmNsb3NlKG91dCk7Cit9CisKK3ZvaWQgcG1hY19nZW4odm9pZCkKK3sKKyAgIHVuc2lnbmVkIGNoYXIga2V5W01BWEJMT0NLU0laRV0sIG91dHB1dFtNQVhCTE9DS1NJWkVdLCBpbnB1dFtNQVhCTE9DS1NJWkUqMisyXTsKKyAgIGludCBlcnIsIHgsIHksIHosIGtsOworICAgRklMRSAqb3V0OworICAgdW5zaWduZWQgbG9uZyBsZW47CisgIAorICAgb3V0ID0gZm9wZW4oInBtYWNfdHYudHh0IiwgInciKTsKKworICAgZnByaW50ZihvdXQsIAorIlBNQUMgVGVzdHMuICBJbiB0aGVzZSB0ZXN0cyBtZXNzYWdlcyBvZiBOIGJ5dGVzIGxvbmcgKDAwLDAxLDAyLC4uLixOTi0xKSBhcmUgT01BQydlZC4gIFRoZSBpbml0aWFsIGtleSBpc1xuIgorIm9mIHRoZSBzYW1lIGZvcm1hdCAobGVuZ3RoIHNwZWNpZmllZCBwZXIgY2lwaGVyKS4gIFRoZSBPTUFDIGtleSBpbiBzdGVwIE4rMSBpcyB0aGUgT01BQyBvdXRwdXQgb2ZcbiIKKyJzdGVwIE4gKHJlcGVhdGVkIGFzIHJlcXVpcmVkIHRvIGZpbGwgdGhlIGFycmF5KS5cblxuIik7CisKKyAgIGZvciAoeCA9IDA7IGNpcGhlcl9kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTDsgeCsrKSB7CisgICAgICBrbCA9IGNpcGhlcl9kZXNjcmlwdG9yW3hdLmJsb2NrX2xlbmd0aDsKKworICAgICAgLyogc2tpcCBjaXBoZXJzIHdoaWNoIGRvIG5vdCBoYXZlIDY0IG9yIDEyOCBiaXQgYmxvY2sgc2l6ZXMgKi8KKyAgICAgIGlmIChrbCAhPSA4ICYmIGtsICE9IDE2KSBjb250aW51ZTsKKworICAgICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW3hdLmtleXNpemUoJmtsKSAhPSBDUllQVF9PSykgeworICAgICAgICAga2wgPSBjaXBoZXJfZGVzY3JpcHRvclt4XS5tYXhfa2V5X2xlbmd0aDsKKyAgICAgIH0KKyAgICAgIGZwcmludGYob3V0LCAiUE1BQy0lcyAoJWQgYnl0ZSBrZXkpXG4iLCBjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lLCBrbCk7CisgICAgICAKKyAgICAgIC8qIGluaXRpYWwga2V5L2Jsb2NrICovCisgICAgICBmb3IgKHkgPSAwOyB5IDwga2w7IHkrKykgeworICAgICAgICAgIGtleVt5XSA9ICh5ICYgMjU1KTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgZm9yICh5ID0gMDsgeSA8PSAoaW50KShjaXBoZXJfZGVzY3JpcHRvclt4XS5ibG9ja19sZW5ndGgqMik7IHkrKykgeworICAgICAgICAgZm9yICh6ID0gMDsgeiA8IHk7IHorKykgeworICAgICAgICAgICAgaW5wdXRbel0gPSAodW5zaWduZWQgY2hhcikoeiAmIDI1NSk7CisgICAgICAgICB9CisgICAgICAgICBsZW4gPSBzaXplb2Yob3V0cHV0KTsKKyAgICAgICAgIGlmICgoZXJyID0gcG1hY19tZW1vcnkoeCwga2V5LCBrbCwgaW5wdXQsIHksIG91dHB1dCwgJmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBwcmludGYoIkVycm9yIG9tYWNpbmc6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICB9CisgICAgICAgICBmcHJpbnRmKG91dCwgIiUzZDogIiwgeSk7CisgICAgICAgICBmb3IgKHogPSAwOyB6IDwoaW50KWxlbjsgeisrKSB7CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiUwMlgiLCBvdXRwdXRbel0pOworICAgICAgICAgfQorICAgICAgICAgZnByaW50ZihvdXQsICJcbiIpOworCisgICAgICAgICAvKiBmb3J3YXJkIHRoZSBrZXkgKi8KKyAgICAgICAgIGZvciAoeiA9IDA7IHogPCBrbDsgeisrKSB7CisgICAgICAgICAgICAga2V5W3pdID0gb3V0cHV0W3ogJSBsZW5dOworICAgICAgICAgfQorICAgICAgfQorICAgICAgZnByaW50ZihvdXQsICJcbiIpOworICAgfQorICAgZmNsb3NlKG91dCk7Cit9CisKK3ZvaWQgZWF4X2dlbih2b2lkKQoreworICAgaW50IGVyciwga2wsIHgsIHkxLCB6OworICAgRklMRSAqb3V0OworICAgdW5zaWduZWQgY2hhciBrZXlbTUFYQkxPQ0tTSVpFXSwgbm9uY2VbTUFYQkxPQ0tTSVpFKjJdLCBoZWFkZXJbTUFYQkxPQ0tTSVpFKjJdLCAKKyAgICAgICAgICAgICAgICAgcGxhaW50ZXh0W01BWEJMT0NLU0laRSoyXSwgdGFnW01BWEJMT0NLU0laRV07CisgICB1bnNpZ25lZCBsb25nIGxlbjsKKworICAgb3V0ID0gZm9wZW4oImVheF90di50eHQiLCAidyIpOworICAgZnByaW50ZihvdXQsICJFQVggVGVzdCBWZWN0b3JzLiAgVXNlcyB0aGUgMDAwMTAyMDMuLi5OTi0xIHBhdHRlcm4gZm9yIGhlYWRlci9ub25jZS9wbGFpbnRleHQva2V5LiAgVGhlIG91dHB1dHNcbiIKKyAgICAgICAgICAgICAgICAiYXJlIG9mIHRoZSBmb3JtIGNpcGhlcnRleHQsdGFnIGZvciBhIGdpdmVuIE5OLiAgVGhlIGtleSBmb3Igc3RlcCBOPjEgaXMgdGhlIHRhZyBvZiB0aGUgcHJldmlvdXNcbiIKKyAgICAgICAgICAgICAgICAic3RlcCByZXBlYXRlZCBzdWZmaWNpZW50bHkuXG5cbiIpOworCisgICBmb3IgKHggPSAwOyBjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lICE9IE5VTEw7IHgrKykgeworICAgICAga2wgPSBjaXBoZXJfZGVzY3JpcHRvclt4XS5ibG9ja19sZW5ndGg7CisKKyAgICAgIC8qIHNraXAgY2lwaGVycyB3aGljaCBkbyBub3QgaGF2ZSA2NCBvciAxMjggYml0IGJsb2NrIHNpemVzICovCisgICAgICBpZiAoa2wgIT0gOCAmJiBrbCAhPSAxNikgY29udGludWU7CisKKyAgICAgIGlmIChjaXBoZXJfZGVzY3JpcHRvclt4XS5rZXlzaXplKCZrbCkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIGtsID0gY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubWF4X2tleV9sZW5ndGg7CisgICAgICB9CisgICAgICBmcHJpbnRmKG91dCwgIkVBWC0lcyAoJWQgYnl0ZSBrZXkpXG4iLCBjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lLCBrbCk7CisKKyAgICAgIC8qIHRoZSBrZXkgKi8KKyAgICAgIGZvciAoeiA9IDA7IHogPCBrbDsgeisrKSB7CisgICAgICAgICAga2V5W3pdID0gKHogJiAyNTUpOworICAgICAgfQorICAgICAgCisgICAgICBmb3IgKHkxID0gMDsgeTEgPD0gKGludCkoY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoKjIpOyB5MSsrKXsKKyAgICAgICAgIGZvciAoeiA9IDA7IHogPCB5MTsgeisrKSB7CisgICAgICAgICAgICBwbGFpbnRleHRbel0gPSAodW5zaWduZWQgY2hhcikoeiAmIDI1NSk7CisgICAgICAgICAgICBub25jZVt6XSAgICAgPSAodW5zaWduZWQgY2hhcikoeiAmIDI1NSk7CisgICAgICAgICAgICBoZWFkZXJbel0gICAgPSAodW5zaWduZWQgY2hhcikoeiAmIDI1NSk7CisgICAgICAgICB9CisgICAgICAgICBsZW4gPSBzaXplb2YodGFnKTsKKyAgICAgICAgIGlmICgoZXJyID0gZWF4X2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeSh4LCBrZXksIGtsLCBub25jZSwgeTEsIGhlYWRlciwgeTEsIHBsYWludGV4dCwgeTEsIHBsYWludGV4dCwgdGFnLCAmbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIHByaW50ZigiRXJyb3IgRUFYJ2luZzogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGZwcmludGYob3V0LCAiJTNkOiAiLCB5MSk7CisgICAgICAgICBmb3IgKHogPSAwOyB6IDwgeTE7IHorKykgeworICAgICAgICAgICAgZnByaW50ZihvdXQsICIlMDJYIiwgcGxhaW50ZXh0W3pdKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGZwcmludGYob3V0LCAiLCAiKTsKKyAgICAgICAgIGZvciAoeiA9IDA7IHogPChpbnQpbGVuOyB6KyspIHsKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiJTAyWCIsIHRhZ1t6XSk7CisgICAgICAgICB9CisgICAgICAgICBmcHJpbnRmKG91dCwgIlxuIik7CisKKyAgICAgICAgIC8qIGZvcndhcmQgdGhlIGtleSAqLworICAgICAgICAgZm9yICh6ID0gMDsgeiA8IGtsOyB6KyspIHsKKyAgICAgICAgICAgICBrZXlbel0gPSB0YWdbeiAlIGxlbl07CisgICAgICAgICB9CisgICAgICB9CisgICAgICBmcHJpbnRmKG91dCwgIlxuIik7CisgICB9CisgICBmY2xvc2Uob3V0KTsKK30KKwordm9pZCBvY2JfZ2VuKHZvaWQpCit7CisgICBpbnQgZXJyLCBrbCwgeCwgeTEsIHo7CisgICBGSUxFICpvdXQ7CisgICB1bnNpZ25lZCBjaGFyIGtleVtNQVhCTE9DS1NJWkVdLCBub25jZVtNQVhCTE9DS1NJWkUqMl0sIAorICAgICAgICAgICAgICAgICBwbGFpbnRleHRbTUFYQkxPQ0tTSVpFKjJdLCB0YWdbTUFYQkxPQ0tTSVpFXTsKKyAgIHVuc2lnbmVkIGxvbmcgbGVuOworCisgICBvdXQgPSBmb3Blbigib2NiX3R2LnR4dCIsICJ3Iik7CisgICBmcHJpbnRmKG91dCwgIk9DQiBUZXN0IFZlY3RvcnMuICBVc2VzIHRoZSAwMDAxMDIwMy4uLk5OLTEgcGF0dGVybiBmb3Igbm9uY2UvcGxhaW50ZXh0L2tleS4gIFRoZSBvdXRwdXRzXG4iCisgICAgICAgICAgICAgICAgImFyZSBvZiB0aGUgZm9ybSBjaXBoZXJ0ZXh0LHRhZyBmb3IgYSBnaXZlbiBOTi4gIFRoZSBrZXkgZm9yIHN0ZXAgTj4xIGlzIHRoZSB0YWcgb2YgdGhlIHByZXZpb3VzXG4iCisgICAgICAgICAgICAgICAgInN0ZXAgcmVwZWF0ZWQgc3VmZmljaWVudGx5LiAgVGhlIG5vbmNlIGlzIGZpeGVkIHRocm91Z2hvdXQuXG5cbiIpOworCisgICBmb3IgKHggPSAwOyBjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lICE9IE5VTEw7IHgrKykgeworICAgICAga2wgPSBjaXBoZXJfZGVzY3JpcHRvclt4XS5ibG9ja19sZW5ndGg7CisKKyAgICAgIC8qIHNraXAgY2lwaGVycyB3aGljaCBkbyBub3QgaGF2ZSA2NCBvciAxMjggYml0IGJsb2NrIHNpemVzICovCisgICAgICBpZiAoa2wgIT0gOCAmJiBrbCAhPSAxNikgY29udGludWU7CisKKyAgICAgIGlmIChjaXBoZXJfZGVzY3JpcHRvclt4XS5rZXlzaXplKCZrbCkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIGtsID0gY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubWF4X2tleV9sZW5ndGg7CisgICAgICB9CisgICAgICBmcHJpbnRmKG91dCwgIk9DQi0lcyAoJWQgYnl0ZSBrZXkpXG4iLCBjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lLCBrbCk7CisKKyAgICAgIC8qIHRoZSBrZXkgKi8KKyAgICAgIGZvciAoeiA9IDA7IHogPCBrbDsgeisrKSB7CisgICAgICAgICAga2V5W3pdID0gKHogJiAyNTUpOworICAgICAgfQorCisgICAgICAvKiBmaXhlZCBub25jZSAqLworICAgICAgZm9yICh6ID0gMDsgeiA8IGNpcGhlcl9kZXNjcmlwdG9yW3hdLmJsb2NrX2xlbmd0aDsgeisrKSB7CisgICAgICAgICAgbm9uY2Vbel0gPSB6OworICAgICAgfQorICAgICAgCisgICAgICBmb3IgKHkxID0gMDsgeTEgPD0gKGludCkoY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoKjIpOyB5MSsrKXsKKyAgICAgICAgIGZvciAoeiA9IDA7IHogPCB5MTsgeisrKSB7CisgICAgICAgICAgICBwbGFpbnRleHRbel0gPSAodW5zaWduZWQgY2hhcikoeiAmIDI1NSk7CisgICAgICAgICB9CisgICAgICAgICBsZW4gPSBzaXplb2YodGFnKTsKKyAgICAgICAgIGlmICgoZXJyID0gb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeSh4LCBrZXksIGtsLCBub25jZSwgcGxhaW50ZXh0LCB5MSwgcGxhaW50ZXh0LCB0YWcsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgcHJpbnRmKCJFcnJvciBPQ0InaW5nOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgfQorICAgICAgICAgZnByaW50ZihvdXQsICIlM2Q6ICIsIHkxKTsKKyAgICAgICAgIGZvciAoeiA9IDA7IHogPCB5MTsgeisrKSB7CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiUwMlgiLCBwbGFpbnRleHRbel0pOworICAgICAgICAgfQorICAgICAgICAgZnByaW50ZihvdXQsICIsICIpOworICAgICAgICAgZm9yICh6ID0gMDsgeiA8KGludClsZW47IHorKykgeworICAgICAgICAgICAgZnByaW50ZihvdXQsICIlMDJYIiwgdGFnW3pdKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGZwcmludGYob3V0LCAiXG4iKTsKKworICAgICAgICAgLyogZm9yd2FyZCB0aGUga2V5ICovCisgICAgICAgICBmb3IgKHogPSAwOyB6IDwga2w7IHorKykgeworICAgICAgICAgICAgIGtleVt6XSA9IHRhZ1t6ICUgbGVuXTsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGZwcmludGYob3V0LCAiXG4iKTsKKyAgIH0KKyAgIGZjbG9zZShvdXQpOworfQorCisKK3ZvaWQgY2NtX2dlbih2b2lkKQoreworICAgaW50IGVyciwga2wsIHgsIHkxLCB6OworICAgRklMRSAqb3V0OworICAgdW5zaWduZWQgY2hhciBrZXlbTUFYQkxPQ0tTSVpFXSwgbm9uY2VbTUFYQkxPQ0tTSVpFKjJdLCAKKyAgICAgICAgICAgICAgICAgcGxhaW50ZXh0W01BWEJMT0NLU0laRSoyXSwgdGFnW01BWEJMT0NLU0laRV07CisgICB1bnNpZ25lZCBsb25nIGxlbjsKKworICAgb3V0ID0gZm9wZW4oImNjbV90di50eHQiLCAidyIpOworICAgZnByaW50ZihvdXQsICJDQ00gVGVzdCBWZWN0b3JzLiAgVXNlcyB0aGUgMDAwMTAyMDMuLi5OTi0xIHBhdHRlcm4gZm9yIG5vbmNlL2hlYWRlci9wbGFpbnRleHQva2V5LiAgVGhlIG91dHB1dHNcbiIKKyAgICAgICAgICAgICAgICAiYXJlIG9mIHRoZSBmb3JtIGNpcGhlcnRleHQsdGFnIGZvciBhIGdpdmVuIE5OLiAgVGhlIGtleSBmb3Igc3RlcCBOPjEgaXMgdGhlIHRhZyBvZiB0aGUgcHJldmlvdXNcbiIKKyAgICAgICAgICAgICAgICAic3RlcCByZXBlYXRlZCBzdWZmaWNpZW50bHkuICBUaGUgbm9uY2UgaXMgZml4ZWQgdGhyb3VnaG91dCBhdCAxMyBieXRlcyAwMDAxMDIuLi5cblxuIik7CisKKyAgIGZvciAoeCA9IDA7IGNpcGhlcl9kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTDsgeCsrKSB7CisgICAgICBrbCA9IGNpcGhlcl9kZXNjcmlwdG9yW3hdLmJsb2NrX2xlbmd0aDsKKworICAgICAgLyogc2tpcCBjaXBoZXJzIHdoaWNoIGRvIG5vdCBoYXZlIDEyOCBiaXQgYmxvY2sgc2l6ZXMgKi8KKyAgICAgIGlmIChrbCAhPSAxNikgY29udGludWU7CisKKyAgICAgIGlmIChjaXBoZXJfZGVzY3JpcHRvclt4XS5rZXlzaXplKCZrbCkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIGtsID0gY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubWF4X2tleV9sZW5ndGg7CisgICAgICB9CisgICAgICBmcHJpbnRmKG91dCwgIkNDTS0lcyAoJWQgYnl0ZSBrZXkpXG4iLCBjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lLCBrbCk7CisKKyAgICAgIC8qIHRoZSBrZXkgKi8KKyAgICAgIGZvciAoeiA9IDA7IHogPCBrbDsgeisrKSB7CisgICAgICAgICAga2V5W3pdID0gKHogJiAyNTUpOworICAgICAgfQorCisgICAgICAvKiBmaXhlZCBub25jZSAqLworICAgICAgZm9yICh6ID0gMDsgeiA8IGNpcGhlcl9kZXNjcmlwdG9yW3hdLmJsb2NrX2xlbmd0aDsgeisrKSB7CisgICAgICAgICAgbm9uY2Vbel0gPSB6OworICAgICAgfQorICAgICAgCisgICAgICBmb3IgKHkxID0gMDsgeTEgPD0gKGludCkoY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoKjIpOyB5MSsrKXsKKyAgICAgICAgIGZvciAoeiA9IDA7IHogPCB5MTsgeisrKSB7CisgICAgICAgICAgICBwbGFpbnRleHRbel0gPSAodW5zaWduZWQgY2hhcikoeiAmIDI1NSk7CisgICAgICAgICB9CisgICAgICAgICBsZW4gPSBzaXplb2YodGFnKTsKKyAgICAgICAgIGlmICgoZXJyID0gY2NtX21lbW9yeSh4LCBrZXksIGtsLCBOVUxMLCBub25jZSwgMTMsIHBsYWludGV4dCwgeTEsIHBsYWludGV4dCwgeTEsIHBsYWludGV4dCwgdGFnLCAmbGVuLCBDQ01fRU5DUllQVCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBwcmludGYoIkVycm9yIENDTSdpbmc6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICB9CisgICAgICAgICBmcHJpbnRmKG91dCwgIiUzZDogIiwgeTEpOworICAgICAgICAgZm9yICh6ID0gMDsgeiA8IHkxOyB6KyspIHsKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiJTAyWCIsIHBsYWludGV4dFt6XSk7CisgICAgICAgICB9CisgICAgICAgICBmcHJpbnRmKG91dCwgIiwgIik7CisgICAgICAgICBmb3IgKHogPSAwOyB6IDwoaW50KWxlbjsgeisrKSB7CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiUwMlgiLCB0YWdbel0pOworICAgICAgICAgfQorICAgICAgICAgZnByaW50ZihvdXQsICJcbiIpOworCisgICAgICAgICAvKiBmb3J3YXJkIHRoZSBrZXkgKi8KKyAgICAgICAgIGZvciAoeiA9IDA7IHogPCBrbDsgeisrKSB7CisgICAgICAgICAgICAga2V5W3pdID0gdGFnW3ogJSBsZW5dOworICAgICAgICAgfQorICAgICAgfQorICAgICAgZnByaW50ZihvdXQsICJcbiIpOworICAgfQorICAgZmNsb3NlKG91dCk7Cit9CisKK3ZvaWQgZ2NtX2dlbih2b2lkKQoreworICAgaW50IGVyciwga2wsIHgsIHkxLCB6OworICAgRklMRSAqb3V0OworICAgdW5zaWduZWQgY2hhciBrZXlbTUFYQkxPQ0tTSVpFXSwgcGxhaW50ZXh0W01BWEJMT0NLU0laRSoyXSwgdGFnW01BWEJMT0NLU0laRV07CisgICB1bnNpZ25lZCBsb25nIGxlbjsKKworICAgb3V0ID0gZm9wZW4oImdjbV90di50eHQiLCAidyIpOworICAgZnByaW50ZihvdXQsICJHQ00gVGVzdCBWZWN0b3JzLiAgVXNlcyB0aGUgMDAwMTAyMDMuLi5OTi0xIHBhdHRlcm4gZm9yIG5vbmNlL2hlYWRlci9wbGFpbnRleHQva2V5LiAgVGhlIG91dHB1dHNcbiIKKyAgICAgICAgICAgICAgICAiYXJlIG9mIHRoZSBmb3JtIGNpcGhlcnRleHQsdGFnIGZvciBhIGdpdmVuIE5OLiAgVGhlIGtleSBmb3Igc3RlcCBOPjEgaXMgdGhlIHRhZyBvZiB0aGUgcHJldmlvdXNcbiIKKyAgICAgICAgICAgICAgICAic3RlcCByZXBlYXRlZCBzdWZmaWNpZW50bHkuICBUaGUgbm9uY2UgaXMgZml4ZWQgdGhyb3VnaG91dCBhdCAxMyBieXRlcyAwMDAxMDIuLi5cblxuIik7CisKKyAgIGZvciAoeCA9IDA7IGNpcGhlcl9kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTDsgeCsrKSB7CisgICAgICBrbCA9IGNpcGhlcl9kZXNjcmlwdG9yW3hdLmJsb2NrX2xlbmd0aDsKKworICAgICAgLyogc2tpcCBjaXBoZXJzIHdoaWNoIGRvIG5vdCBoYXZlIDEyOCBiaXQgYmxvY2sgc2l6ZXMgKi8KKyAgICAgIGlmIChrbCAhPSAxNikgY29udGludWU7CisKKyAgICAgIGlmIChjaXBoZXJfZGVzY3JpcHRvclt4XS5rZXlzaXplKCZrbCkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIGtsID0gY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubWF4X2tleV9sZW5ndGg7CisgICAgICB9CisgICAgICBmcHJpbnRmKG91dCwgIkdDTS0lcyAoJWQgYnl0ZSBrZXkpXG4iLCBjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lLCBrbCk7CisKKyAgICAgIC8qIHRoZSBrZXkgKi8KKyAgICAgIGZvciAoeiA9IDA7IHogPCBrbDsgeisrKSB7CisgICAgICAgICAga2V5W3pdID0gKHogJiAyNTUpOworICAgICAgfQorICAgICAKKyAgICAgIGZvciAoeTEgPSAwOyB5MSA8PSAoaW50KShjaXBoZXJfZGVzY3JpcHRvclt4XS5ibG9ja19sZW5ndGgqMik7IHkxKyspeworICAgICAgICAgZm9yICh6ID0gMDsgeiA8IHkxOyB6KyspIHsKKyAgICAgICAgICAgIHBsYWludGV4dFt6XSA9ICh1bnNpZ25lZCBjaGFyKSh6ICYgMjU1KTsKKyAgICAgICAgIH0KKyAgICAgICAgIGxlbiA9IHNpemVvZih0YWcpOworICAgICAgICAgaWYgKChlcnIgPSBnY21fbWVtb3J5KHgsIGtleSwga2wsIHBsYWludGV4dCwgeTEsIHBsYWludGV4dCwgeTEsIHBsYWludGV4dCwgeTEsIHBsYWludGV4dCwgdGFnLCAmbGVuLCBHQ01fRU5DUllQVCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBwcmludGYoIkVycm9yIEdDTSdpbmc6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICB9CisgICAgICAgICBmcHJpbnRmKG91dCwgIiUzZDogIiwgeTEpOworICAgICAgICAgZm9yICh6ID0gMDsgeiA8IHkxOyB6KyspIHsKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiJTAyWCIsIHBsYWludGV4dFt6XSk7CisgICAgICAgICB9CisgICAgICAgICBmcHJpbnRmKG91dCwgIiwgIik7CisgICAgICAgICBmb3IgKHogPSAwOyB6IDwoaW50KWxlbjsgeisrKSB7CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiUwMlgiLCB0YWdbel0pOworICAgICAgICAgfQorICAgICAgICAgZnByaW50ZihvdXQsICJcbiIpOworCisgICAgICAgICAvKiBmb3J3YXJkIHRoZSBrZXkgKi8KKyAgICAgICAgIGZvciAoeiA9IDA7IHogPCBrbDsgeisrKSB7CisgICAgICAgICAgICAga2V5W3pdID0gdGFnW3ogJSBsZW5dOworICAgICAgICAgfQorICAgICAgfQorICAgICAgZnByaW50ZihvdXQsICJcbiIpOworICAgfQorICAgZmNsb3NlKG91dCk7Cit9CisKK3ZvaWQgYmFzZTY0X2dlbih2b2lkKQoreworICAgRklMRSAqb3V0OworICAgdW5zaWduZWQgY2hhciBkc3RbMjU2XSwgc3JjWzMyXTsKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeSwgbGVuOworICAgCisgICBvdXQgPSBmb3BlbigiYmFzZTY0X3R2LnR4dCIsICJ3Iik7CisgICBmcHJpbnRmKG91dCwgIkJhc2U2NCB2ZWN0b3JzLiAgVGhlc2UgYXJlIHRoZSBiYXNlNjQgZW5jb2RpbmdzIG9mIHRoZSBzdHJpbmdzIDAwLDAxLDAyLi4uTk4tMVxuXG4iKTsKKyAgIGZvciAoeCA9IDA7IHggPD0gMzI7IHgrKykgeworICAgICAgIGZvciAoeSA9IDA7IHkgPCB4OyB5KyspIHsKKyAgICAgICAgICAgc3JjW3ldID0geTsKKyAgICAgICB9CisgICAgICAgbGVuID0gc2l6ZW9mKGRzdCk7CisgICAgICAgYmFzZTY0X2VuY29kZShzcmMsIHgsIGRzdCwgJmxlbik7CisgICAgICAgZnByaW50ZihvdXQsICIlMmx1OiAlc1xuIiwgeCwgZHN0KTsKKyAgIH0KKyAgIGZjbG9zZShvdXQpOworfQorCit2b2lkIG1hdGhfZ2VuKHZvaWQpCit7Cit9CisKK3ZvaWQgZWNjX2dlbih2b2lkKQoreworICAgRklMRSAgICAgICAgICpvdXQ7CisgICB1bnNpZ25lZCBjaGFyIHN0cls1MTJdOworICAgdm9pZCAgICAgICAgICAqaywgKm9yZGVyLCAqbW9kdWx1czsKKyAgIGVjY19wb2ludCAgICAqRywgKlI7CisgICBpbnQgICAgICAgICAgIHg7CisKKyAgIG91dCA9IGZvcGVuKCJlY2NfdHYudHh0IiwgInciKTsKKyAgIGZwcmludGYob3V0LCAiZWNjIHZlY3RvcnMuICBUaGVzZSBhcmUgZm9yIGtHIGZvciBrPTEsMyw5LDI3LC4uLiwzKipuIHVudGlsIGsgPiBvcmRlciBvZiB0aGUgY3VydmUgb3V0cHV0cyBhcmUgPGsseCx5PiB0cmlwbGV0c1xuXG4iKTsKKyAgIEcgPSBsdGNfZWNjX25ld19wb2ludCgpOworICAgUiA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICBtcF9pbml0KCZrKTsKKyAgIG1wX2luaXQoJm9yZGVyKTsKKyAgIG1wX2luaXQoJm1vZHVsdXMpOworCisgICBmb3IgKHggPSAwOyBsdGNfZWNjX3NldHNbeF0uc2l6ZSAhPSAwOyB4KyspIHsKKyAgICAgICAgZnByaW50ZihvdXQsICJFQ0MtJWRcbiIsIGx0Y19lY2Nfc2V0c1t4XS5zaXplKjgpOworICAgICAgICBtcF9zZXQoaywgMSk7CisKKyAgICAgICAgbXBfcmVhZF9yYWRpeChvcmRlciwgICAoY2hhciAqKWx0Y19lY2Nfc2V0c1t4XS5vcmRlciwgMTYpOworICAgICAgICBtcF9yZWFkX3JhZGl4KG1vZHVsdXMsIChjaGFyICopbHRjX2VjY19zZXRzW3hdLnByaW1lLCAxNik7CisgICAgICAgIG1wX3JlYWRfcmFkaXgoRy0+eCwgICAgKGNoYXIgKilsdGNfZWNjX3NldHNbeF0uR3gsICAgIDE2KTsKKyAgICAgICAgbXBfcmVhZF9yYWRpeChHLT55LCAgICAoY2hhciAqKWx0Y19lY2Nfc2V0c1t4XS5HeSwgICAgMTYpOworICAgICAgICBtcF9zZXQoRy0+eiwgMSk7ICAKKworICAgICAgICB3aGlsZSAobXBfY21wKGssIG9yZGVyKSA9PSBMVENfTVBfTFQpIHsKKyAgICAgICAgICAgIGx0Y19tcC5lY2NfcHRtdWwoaywgRywgUiwgbW9kdWx1cywgMSk7CisgICAgICAgICAgICBtcF90b2hleChrLCAgICAoY2hhciopc3RyKTsgZnByaW50ZihvdXQsICIlcywgIiwgKGNoYXIqKXN0cik7CisgICAgICAgICAgICBtcF90b2hleChSLT54LCAoY2hhciopc3RyKTsgZnByaW50ZihvdXQsICIlcywgIiwgKGNoYXIqKXN0cik7CisgICAgICAgICAgICBtcF90b2hleChSLT55LCAoY2hhciopc3RyKTsgZnByaW50ZihvdXQsICIlc1xuIiwgKGNoYXIqKXN0cik7CisgICAgICAgICAgICBtcF9tdWxfZChrLCAzLCBrKTsKKyAgICAgICAgfQorICAgfQorICAgbXBfY2xlYXJfbXVsdGkoaywgb3JkZXIsIG1vZHVsdXMsIE5VTEwpOworICAgbHRjX2VjY19kZWxfcG9pbnQoRyk7CisgICBsdGNfZWNjX2RlbF9wb2ludChSKTsKKyAgIGZjbG9zZShvdXQpOworfQorCit2b2lkIGxyd19nZW4odm9pZCkKK3sKKyAgIEZJTEUgKm91dDsKKyAgIHVuc2lnbmVkIGNoYXIgdHdlYWtbMTZdLCBrZXlbMTZdLCBpdlsxNl0sIGJ1ZlsxMDI0XTsKKyAgIGludCB4LCB5LCBlcnI7CisgICBzeW1tZXRyaWNfTFJXIGxydzsKKyAgIAorICAgLyogaW5pdGlhbGl6ZSBkZWZhdWx0IGtleSBhbmQgdHdlYWsgKi8KKyAgIGZvciAoeCA9IDA7IHggPCAxNjsgeCsrKSB7CisgICAgICB0d2Vha1t4XSA9IGtleVt4XSA9IGl2W3hdID0geDsKKyAgIH0KKworICAgb3V0ID0gZm9wZW4oImxyd190di50eHQiLCAidyIpOworICAgZm9yICh4ID0gMTY7IHggPCAoaW50KShzaXplb2YoYnVmKSk7IHggKz0gMTYpIHsKKyAgICAgICBpZiAoKGVyciA9IGxyd19zdGFydChmaW5kX2NpcGhlcigiYWVzIiksIGl2LCBrZXksIDE2LCB0d2VhaywgMCwgJmxydykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBzdGFydGluZyBMUlctQUVTOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICB9CisKKyAgICAgICAvKiBlbmNyeXB0IGluY3JlbWVudGFsICovCisgICAgICAgZm9yICh5ID0gMDsgeSA8IHg7IHkrKykgeworICAgICAgICAgICBidWZbeV0gPSB5ICYgMjU1OworICAgICAgIH0KKworICAgICAgIGlmICgoZXJyID0gbHJ3X2VuY3J5cHQoYnVmLCBidWYsIHgsICZscncpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgZW5jcnlwdGluZyB3aXRoIExSVy1BRVM6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgIH0KKworICAgICAgIC8qIGRpc3BsYXkgaXQgKi8KKyAgICAgICBmcHJpbnRmKG91dCwgIiVkOiIsIHgpOworICAgICAgIGZvciAoeSA9IDA7IHkgPCB4OyB5KyspIHsKKyAgICAgICAgICBmcHJpbnRmKG91dCwgIiUwMngiLCBidWZbeV0pOworICAgICAgIH0KKyAgICAgICBmcHJpbnRmKG91dCwgIlxuIik7CisKKyAgICAgICAvKiByZXNldCBJViAqLworICAgICAgIGlmICgoZXJyID0gbHJ3X3NldGl2KGl2LCAxNiwgJmxydykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciBzZXR0aW5nIElWOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICB9CisKKyAgICAgICAvKiBjb3B5IG5ldyB0d2VhaywgaXYgYW5kIGtleSAqLworICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7CisgICAgICAgICAga2V5W3ldICAgPSBidWZbeV07CisgICAgICAgICAgaXZbeV0gICAgPSBidWZbKHkrMTYpJXhdOworICAgICAgICAgIHR3ZWFrW3ldID0gYnVmWyh5KzMyKSV4XTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoKGVyciA9IGxyd19kZWNyeXB0KGJ1ZiwgYnVmLCB4LCAmbHJ3KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGRlY3J5cHRpbmcgd2l0aCBMUlctQUVTOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICB9CisKKyAgICAgICAvKiBkaXNwbGF5IGl0ICovCisgICAgICAgZnByaW50ZihvdXQsICIlZDoiLCB4KTsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgeDsgeSsrKSB7CisgICAgICAgICAgZnByaW50ZihvdXQsICIlMDJ4IiwgYnVmW3ldKTsKKyAgICAgICB9CisgICAgICAgZnByaW50ZihvdXQsICJcbiIpOworICAgICAgIGxyd19kb25lKCZscncpOworICAgfQorICAgZmNsb3NlKG91dCk7Cit9ICAgICAgCisKK2ludCBtYWluKHZvaWQpCit7CisgICByZWdfYWxncygpOworICAgcHJpbnRmKCJHZW5lcmF0aW5nIGhhc2ggICB2ZWN0b3JzLi4uIik7IGZmbHVzaChzdGRvdXQpOyBoYXNoX2dlbigpOyAgIHByaW50ZigiZG9uZVxuIik7CisgICBwcmludGYoIkdlbmVyYXRpbmcgY2lwaGVyIHZlY3RvcnMuLi4iKTsgZmZsdXNoKHN0ZG91dCk7IGNpcGhlcl9nZW4oKTsgcHJpbnRmKCJkb25lXG4iKTsKKyAgIHByaW50ZigiR2VuZXJhdGluZyBITUFDICAgdmVjdG9ycy4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgaG1hY19nZW4oKTsgICBwcmludGYoImRvbmVcbiIpOworICAgcHJpbnRmKCJHZW5lcmF0aW5nIE9NQUMgICB2ZWN0b3JzLi4uIik7IGZmbHVzaChzdGRvdXQpOyBvbWFjX2dlbigpOyAgIHByaW50ZigiZG9uZVxuIik7CisgICBwcmludGYoIkdlbmVyYXRpbmcgUE1BQyAgIHZlY3RvcnMuLi4iKTsgZmZsdXNoKHN0ZG91dCk7IHBtYWNfZ2VuKCk7ICAgcHJpbnRmKCJkb25lXG4iKTsKKyAgIHByaW50ZigiR2VuZXJhdGluZyBFQVggICAgdmVjdG9ycy4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgZWF4X2dlbigpOyAgICBwcmludGYoImRvbmVcbiIpOworICAgcHJpbnRmKCJHZW5lcmF0aW5nIE9DQiAgICB2ZWN0b3JzLi4uIik7IGZmbHVzaChzdGRvdXQpOyBvY2JfZ2VuKCk7ICAgIHByaW50ZigiZG9uZVxuIik7CisgICBwcmludGYoIkdlbmVyYXRpbmcgQ0NNICAgIHZlY3RvcnMuLi4iKTsgZmZsdXNoKHN0ZG91dCk7IGNjbV9nZW4oKTsgICAgcHJpbnRmKCJkb25lXG4iKTsKKyAgIHByaW50ZigiR2VuZXJhdGluZyBHQ00gICAgdmVjdG9ycy4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgZ2NtX2dlbigpOyAgICBwcmludGYoImRvbmVcbiIpOworICAgcHJpbnRmKCJHZW5lcmF0aW5nIEJBU0U2NCB2ZWN0b3JzLi4uIik7IGZmbHVzaChzdGRvdXQpOyBiYXNlNjRfZ2VuKCk7IHByaW50ZigiZG9uZVxuIik7CisgICBwcmludGYoIkdlbmVyYXRpbmcgTUFUSCAgIHZlY3RvcnMuLi4iKTsgZmZsdXNoKHN0ZG91dCk7IG1hdGhfZ2VuKCk7ICAgcHJpbnRmKCJkb25lXG4iKTsKKyAgIHByaW50ZigiR2VuZXJhdGluZyBFQ0MgICAgdmVjdG9ycy4uLiIpOyBmZmx1c2goc3Rkb3V0KTsgZWNjX2dlbigpOyAgICBwcmludGYoImRvbmVcbiIpOworICAgcHJpbnRmKCJHZW5lcmF0aW5nIExSVyAgICB2ZWN0b3JzLi4uIik7IGZmbHVzaChzdGRvdXQpOyBscndfZ2VuKCk7ICAgIHByaW50ZigiZG9uZVxuIik7CisgICByZXR1cm4gMDsKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvZGVtb3MvdHZfZ2VuLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTUgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMDkgMjI6MTA6MjcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvZG9jL2Zvb3Rlci5odG1sIGIvbGlidG9tY3J5cHQvZG9jL2Zvb3Rlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZTE2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9kb2MvZm9vdGVyLmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPGhyIHdpZHRoPSI4MCUiPgorQ29kZSBieSA8YSBocmVmPSJodHRwOi8vd3d3LmxpYnRvbWNyeXB0LmNvbS8iPlRvbTwvYT48YnI+CitEb2NzIHVzaW5nIDxpbWcgc3JjPSJkb3h5Z2VuLnBuZyIgYWx0PSJkb3h5Z2VuIiBhbGlnbj0ibWlkZGxlIiBib3JkZXI9MD4KKzxhIGhyZWY9Imh0dHA6Ly9qbGNvb2tlLmNhL3RvbS9oaWRkZW5faW1hZ2UucG5nIj4KKworPCEtLQorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvZG9jL2Zvb3Rlci5odG1sLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzQgJCAqLworLS0+CmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9kb2MvaGVhZGVyLmh0bWwgYi9saWJ0b21jcnlwdC9kb2MvaGVhZGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMxNDc1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L2RvYy9oZWFkZXIuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KKzxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sO2NoYXJzZXQ9aXNvLTg4NTktMSI+Cis8dGl0bGU+TGliVG9tQ3J5cHQ6IE1haW4gUGFnZTwvdGl0bGU+Cis8bGluayBocmVmPSJkb3h5Z2VuLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+Cis8L2hlYWQ+PGJvZHk+Cis8IS0tIEdlbmVyYXRlZCBieSBEb3h5Z2VuIDEuMy44IC0tPgorCis8IS0tCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9kb2MvaGVhZGVyLmh0bWwsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNS8wNS8wNyAxMDowOToyMCAkICovCistLT4KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L2ZpbHRlci5wbCBiL2xpYnRvbWNyeXB0L2ZpbHRlci5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWJhNjJmCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvZmlsdGVyLnBsCkBAIC0wLDAgKzEsMzAgQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIHdlIHdhbnQgdG8gZmlsdGVyIGV2ZXJ5IGJldHdlZW4gU1RBUlRfSU5TIGFuZCBFTkRfSU5TIG91dCBhbmQgdGhlbiBpbnNlcnQgY3JhcCBmcm9tIGFub3RoZXIgZmlsZSAodGhpcyBpcyBmdW4pCisKKyRkc3QgPSBzaGlmdDsKKyRpbnMgPSBzaGlmdDsKKworb3BlbihTUkMsIjwkZHN0Iik7CitvcGVuKElOUywiPCRpbnMiKTsKK29wZW4oVE1QLCI+dG1wLmRlbG1lIik7CisKKyRsID0gMDsKK3doaWxlICg8U1JDPikgeworICAgaWYgKCRfID1+IC9TVEFSVF9JTlMvKSB7CisgICAgICBwcmludCBUTVAgJF87CisgICAgICAkbCA9IDE7CisgICAgICB3aGlsZSAoPElOUz4pIHsKKyAgICAgICAgIHByaW50IFRNUCAkXzsKKyAgICAgIH0KKyAgICAgIGNsb3NlIElOUzsKKyAgIH0gZWxzaWYgKCRfID1+IC9FTkRfSU5TLykgeworICAgICAgcHJpbnQgVE1QICRfOworICAgICAgJGwgPSAwOworICAgfSBlbHNpZiAoJGwgPT0gMCkgeworICAgICAgcHJpbnQgVE1QICRfOworICAgfQorfQorCitjbG9zZSBUTVA7CitjbG9zZSBTUkM7CmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9maXh1cGluZC5wbCBiL2xpYnRvbWNyeXB0L2ZpeHVwaW5kLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0M2FlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9maXh1cGluZC5wbApAQCAtMCwwICsxLDExIEBACitvcGVuKElOLCI8Y3J5cHQuaW5kIik7CitvcGVuKE9VVCwiPmNyeXB0LmluZC50bXAiKTsKKyRhID0gPElOPjsKK3ByaW50IE9VVCAgIiRhXG5cXGFkZGNvbnRlbnRzbGluZXt0b2N9e2NoYXB0ZXJ9e0luZGV4fVxuIjsKK3doaWxlICg8SU4+KSB7CisgICBwcmludCBPVVQgJF87Cit9CitjbG9zZSBPVVQ7CitjbG9zZSBJTjsKK3N5c3RlbSgibXYgLWYgY3J5cHQuaW5kLnRtcCBjcnlwdC5pbmQiKTsKKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvZ2VubGlzdC5zaCBiL2xpYnRvbWNyeXB0L2dlbmxpc3Quc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlMTNiMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L2dlbmxpc3Quc2gKQEAgLTAsMCArMSwxMCBAQAorIyEvYmluL2Jhc2gKKyMgYWVzX3RhYi5vIGlzIGEgcHNldWRvIG9iamVjdCBhcyBpdCdzIG1hZGUgZnJvbSBhZXMubyBhbmQgTVBJIGlzIG9wdGlvbmFsCitleHBvcnQgYT1gZWNobyAtbiAic3JjL2NpcGhlcnMvYWVzL2Flc19lbmMubyAiIDsgZmluZCAuIC10eXBlIGYgfCBzb3J0IHwgZ3JlcCAiWy5dL3NyYyIgfCBncmVwICJbLl1jIiB8IGdyZXAgLXYgInNoYTIyNCIgfCBncmVwIC12ICJzaGEzODQiIHwgZ3JlcCAtdiAiYWVzX3RhYiIgfCBncmVwIC12ICJ0d29maXNoX3RhYiIgfCBncmVwIC12ICJ3aGlybHRhYiIgfCBncmVwIC12ICJkaF9zeXMiIHwgZ3JlcCAtdiAiZWNjX3N5cyIgfCBncmVwIC12ICJtcGlbLl1jIiB8IGdyZXAgLXYgInNvYmVyMTI4dGFiIiB8IHNlZCAtZSAnc0VcLi9FRScgfCBzZWQgLWUgJ3MvXC5jL1wuby8nIHwgeGFyZ3NgCitwZXJsIC4vcGFyc2VuYW1lcy5wbCBPQkpFQ1RTICIkYSIKK2V4cG9ydCBhPWBmaW5kIC4gLXR5cGUgZiB8IGdyZXAgWy5dL3NyYyB8IGdyZXAgWy5daCB8IHNlZCAtZSAnc2VcLi9lZScgfCB4YXJnc2AKK3BlcmwgLi9wYXJzZW5hbWVzLnBsIEhFQURFUlMgIiRhIgorCisjICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L2dlbmxpc3Quc2gsdiAkICAgCisjICRSZXZpc2lvbjogMS40ICQgICAKKyMgJERhdGU6IDIwMDUvMDcvMTcgMjM6MTU6MTIgJCAKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L21ha2VmaWxlLmljYyBiL2xpYnRvbWNyeXB0L21ha2VmaWxlLmljYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmFmY2YxCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvbWFrZWZpbGUuaWNjCkBAIC0wLDAgKzEsMjkyIEBACisjIE1BS0VGSUxFIGZvciBsaW51eCBJQ0MgKEludGVsIEMgY29tcGlsZXIpCisjCisjIFRlc3RlZCB3aXRoIElDQyB2OC4uLi4KKyMKKyMgQmUgYXdhcmUgdGhhdCBJQ0MgaXNuJ3QgcXVpdGUgYXMgc3RhYmxlIGFzIEdDQyBhbmQgc2V2ZXJhbCBvcHRpbWl6YXRpb24gc3dpdGNoZXMKKyMgc2VlbSB0byBicmVhayB0aGUgY29kZSAodGhhdCBHQ0MgYW5kIE1TVkMgY29tcGlsZSBqdXN0IGZpbmUpLiAgSW4gcGFydGljdWxhcgorIyAiLWlwIiBhbmQgIi14KiIgc2VlbSB0byBicmVhayB0aGUgY29kZSAoUk9ML1JPUiBtYWNybyBwcm9ibGVtcykuICBBcyB0aGUgbWFrZWZpbGUgCisjIGlzIHNoaXBwZWQgdGhlIGNvZGUgd2lsbCBidWlsZCBhbmQgZXhlY3V0ZSBwcm9wZXJseS4KKyMKKyMgQWxzbyBub3RlIHRoYXQgSUNDIG9mdGVuIG1ha2VzIGNvZGUgdGhhdCBpcyBzbG93ZXIgdGhhbiBHQ0MuICBUaGlzIGlzIHByb2JhYmx5IGR1ZSB0byAKKyMgYSBtaXggb2Ygbm90IGJlaW5nIGFibGUgdG8gdXNlICItaXAiIGFuZCBqdXN0IGhhdmluZyBmZXdlciBvcHRpbWl6YXRpb24gYWxnb3MgdGhhbiBHQ0MuCisjCisjIFRvbSBTdCBEZW5pcworCisjIENvbXBpbGVyIGFuZCBMaW5rZXIgTmFtZXMKK0NDPWljYworCisjTEQ9bGQKKworIyBBcmNoaXZlciBbbWFrZXMgLmEgZmlsZXNdCisjQVI9YXIKKyNBUkZMQUdTPXIKKworIyBDb21waWxhdGlvbiBmbGFncy4gTm90ZSB0aGUgKz0gZG9lcyBub3Qgd3JpdGUgb3ZlciB0aGUgdXNlcidzIENGTEFHUyEKK0NGTEFHUyArPSAtYyAtSXNyYy9oZWFkZXJzLyAtSXRlc3Rwcm9mLyAtRElOVEVMX0NDIC1ETFRDX1NPVVJDRQorCisjSUNDIHY5IGRvZXNuJ3Qgc3VwcG9ydCBMVENfRkFTVCBmb3IgdGhpbmdzIGxpa2UgUGVsaWNhbiBNQUMKKyNEZXNwaXRlIHRoZSBmYWN0IEkgY2FuJ3Qgc2VlIHdoYXQncyB3cm9uZyB3aXRoIG15IGNvZGUKKyNPaCB3ZWxsCitDRkxBR1MgKz0gLURMVENfTk9fRkFTVAorCisjVGhlIGRlZmF1bHQgcnVsZSBmb3IgbWFrZSBidWlsZHMgdGhlIGxpYnRvbWNyeXB0IGxpYnJhcnkuCitkZWZhdWx0OmxpYnJhcnkKKworIyBvcHRpbWl6ZSBmb3IgU1BFRUQKKyMKKyMgLW1jcHU9IGNhbiBiZSBwZW50aXVtLCBwZW50aXVtcHJvIChjb3ZlcnMgUElJIHRocm91Z2ggUElJSSkgb3IgcGVudGl1bTQKKyMgLWF4PwlzcGVjaWZpZXMgbWFrZSBjb2RlIHNwZWNpZmljYWxseSBmb3IgPyBidXQgY29tcGF0aWJsZSB3aXRoIElBLTMyCisjIC14PwkgICBzcGVjaWZpZXMgY29tcGlsZSBzb2xlbHkgZm9yID8gW25vdCBzcGVjaWZpY2FsbHkgSUEtMzIgY29tcGF0aWJsZV0KKyMKKyMgd2hlcmUgPyBpcyAKKyMJSyAtIFBJSUkKKyMJVyAtIGZpcnN0IFA0IFtXaWxsaWFtZXR0ZV0KKyMJTiAtIFA0IE5vcnRod29vZAorIwlQIC0gUDQgUHJlc2NvdHQKKyMJQiAtIEJsZW5kIG9mIFA0IGFuZCBQTSBbbW9iaWxlXQorIworIyBEZWZhdWx0IHRvIGp1c3QgZ2VuZXJpYyBtYXggb3B0cworaWZkZWYgTFRDX1NNQUxMCitDRkxBR1MgKz0gLU8yIC14UCAtaXAKK2VuZGlmCisKK2lmbmRlZiBJR05PUkVfU1BFRUQKK0NGTEFHUyArPSAtTzMgLXhQIC1pcCAKK2VuZGlmCisKKyMgd2FudCB0byBzZWUgc3R1ZmY/CisjQ0ZMQUdTICs9IC1vcHRfcmVwb3J0CisKKyNUaGVzZSBmbGFncyBjb250cm9sIGhvdyB0aGUgbGlicmFyeSBnZXRzIGJ1aWx0LgorCisjT3V0cHV0IGZpbGVuYW1lcyBmb3IgdmFyaW91cyB0YXJnZXRzLgoraWZuZGVmIExJQk5BTUUKKyAgIExJQk5BTUU9bGlidG9tY3J5cHQuYQorZW5kaWYKK2lmbmRlZiBMSUJURVNUCisgICBMSUJURVNUPWxpYnRvbWNyeXB0X3Byb2YuYQorICAgTElCVEVTVF9TPSQoTElCVEVTVCkKK2VuZGlmCitIQVNIPWhhc2hzdW0KK0NSWVBUPWVuY3J5cHQKK1NNQUxMPXNtYWxsCitQUk9GPXg4Nl9wcm9mCitUVj10dl9nZW4KK01VTFRJPW11bHRpCitUSU1JTkc9dGltaW5nCitURVNUPXRlc3QKKworI0xJQlBBVEgtVGhlIGRpcmVjdG9yeSBmb3IgbGlidG9tY3J5cHQgdG8gYmUgaW5zdGFsbGVkIHRvLgorI0lOQ1BBVEgtVGhlIGRpcmVjdG9yeSB0byBpbnN0YWxsIHRoZSBoZWFkZXIgZmlsZXMgZm9yIGxpYnRvbWNyeXB0LgorI0RBVEFQQVRILVRoZSBkaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgcGRmIGRvY3MuCitpZm5kZWYgREVTVERJUgorICAgREVTVERJUj0KK2VuZGlmCitpZm5kZWYgTElCUEFUSAorICAgTElCUEFUSD0vdXNyL2xpYgorZW5kaWYKK2lmbmRlZiBJTkNQQVRICisgICBJTkNQQVRIPS91c3IvaW5jbHVkZQorZW5kaWYKK2lmbmRlZiBEQVRBUEFUSAorICAgREFUQVBBVEg9L3Vzci9zaGFyZS9kb2MvbGlidG9tY3J5cHQvcGRmCitlbmRpZgorCisjTGlzdCBvZiBvYmplY3RzIHRvIGNvbXBpbGUuCisjU1RBUlRfSU5TCitPQkpFQ1RTPXNyYy9jaXBoZXJzL2Flcy9hZXNfZW5jLm8gc3JjL2NpcGhlcnMvYWVzL2Flcy5vIHNyYy9jaXBoZXJzL2FudWJpcy5vIHNyYy9jaXBoZXJzL2Jsb3dmaXNoLm8gXAorc3JjL2NpcGhlcnMvY2FzdDUubyBzcmMvY2lwaGVycy9kZXMubyBzcmMvY2lwaGVycy9rYXN1bWkubyBzcmMvY2lwaGVycy9raGF6YWQubyBzcmMvY2lwaGVycy9rc2VlZC5vIFwKK3NyYy9jaXBoZXJzL25vZWtlb24ubyBzcmMvY2lwaGVycy9yYzIubyBzcmMvY2lwaGVycy9yYzUubyBzcmMvY2lwaGVycy9yYzYubyBzcmMvY2lwaGVycy9zYWZlci9zYWZlci5vIFwKK3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVyX3RhYi5vIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVycC5vIHNyYy9jaXBoZXJzL3NraXBqYWNrLm8gXAorc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoLm8gc3JjL2NpcGhlcnMveHRlYS5vIHNyYy9lbmNhdXRoL2NjbS9jY21fbWVtb3J5Lm8gXAorc3JjL2VuY2F1dGgvY2NtL2NjbV90ZXN0Lm8gc3JjL2VuY2F1dGgvZWF4L2VheF9hZGRoZWFkZXIubyBzcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHQubyBcCitzcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5vIHNyYy9lbmNhdXRoL2VheC9lYXhfZG9uZS5vIHNyYy9lbmNhdXRoL2VheC9lYXhfZW5jcnlwdC5vIFwKK3NyYy9lbmNhdXRoL2VheC9lYXhfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5Lm8gc3JjL2VuY2F1dGgvZWF4L2VheF9pbml0Lm8gXAorc3JjL2VuY2F1dGgvZWF4L2VheF90ZXN0Lm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9hZGRfYWFkLm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9hZGRfaXYubyBcCitzcmMvZW5jYXV0aC9nY20vZ2NtX2RvbmUubyBzcmMvZW5jYXV0aC9nY20vZ2NtX2dmX211bHQubyBzcmMvZW5jYXV0aC9nY20vZ2NtX2luaXQubyBcCitzcmMvZW5jYXV0aC9nY20vZ2NtX21lbW9yeS5vIHNyYy9lbmNhdXRoL2djbS9nY21fbXVsdF9oLm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9wcm9jZXNzLm8gXAorc3JjL2VuY2F1dGgvZ2NtL2djbV9yZXNldC5vIHNyYy9lbmNhdXRoL2djbS9nY21fdGVzdC5vIHNyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdC5vIFwKK3NyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdF92ZXJpZnlfbWVtb3J5Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2RlY3J5cHQubyBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZW5jcnlwdC5vIHNyYy9lbmNhdXRoL29jYi9vY2JfZW5jcnlwdC5vIFwKK3NyYy9lbmNhdXRoL29jYi9vY2JfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9pbml0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9udHoubyBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX3NoaWZ0X3hvci5vIHNyYy9lbmNhdXRoL29jYi9vY2JfdGVzdC5vIHNyYy9lbmNhdXRoL29jYi9zX29jYl9kb25lLm8gXAorc3JjL2hhc2hlcy9jaGMvY2hjLm8gc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9maWxlLm8gc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9maWxlaGFuZGxlLm8gXAorc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9tZW1vcnkubyBzcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeV9tdWx0aS5vIHNyYy9oYXNoZXMvbWQyLm8gc3JjL2hhc2hlcy9tZDQubyBcCitzcmMvaGFzaGVzL21kNS5vIHNyYy9oYXNoZXMvcm1kMTI4Lm8gc3JjL2hhc2hlcy9ybWQxNjAubyBzcmMvaGFzaGVzL3JtZDI1Ni5vIHNyYy9oYXNoZXMvcm1kMzIwLm8gXAorc3JjL2hhc2hlcy9zaGExLm8gc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5vIHNyYy9oYXNoZXMvc2hhMi9zaGE1MTIubyBzcmMvaGFzaGVzL3RpZ2VyLm8gXAorc3JjL2hhc2hlcy93aGlybC93aGlybC5vIHNyYy9tYWMvZjkvZjlfZG9uZS5vIHNyYy9tYWMvZjkvZjlfZmlsZS5vIHNyYy9tYWMvZjkvZjlfaW5pdC5vIFwKK3NyYy9tYWMvZjkvZjlfbWVtb3J5Lm8gc3JjL21hYy9mOS9mOV9tZW1vcnlfbXVsdGkubyBzcmMvbWFjL2Y5L2Y5X3Byb2Nlc3MubyBzcmMvbWFjL2Y5L2Y5X3Rlc3QubyBcCitzcmMvbWFjL2htYWMvaG1hY19kb25lLm8gc3JjL21hYy9obWFjL2htYWNfZmlsZS5vIHNyYy9tYWMvaG1hYy9obWFjX2luaXQubyBzcmMvbWFjL2htYWMvaG1hY19tZW1vcnkubyBcCitzcmMvbWFjL2htYWMvaG1hY19tZW1vcnlfbXVsdGkubyBzcmMvbWFjL2htYWMvaG1hY19wcm9jZXNzLm8gc3JjL21hYy9obWFjL2htYWNfdGVzdC5vIFwKK3NyYy9tYWMvb21hYy9vbWFjX2RvbmUubyBzcmMvbWFjL29tYWMvb21hY19maWxlLm8gc3JjL21hYy9vbWFjL29tYWNfaW5pdC5vIHNyYy9tYWMvb21hYy9vbWFjX21lbW9yeS5vIFwKK3NyYy9tYWMvb21hYy9vbWFjX21lbW9yeV9tdWx0aS5vIHNyYy9tYWMvb21hYy9vbWFjX3Byb2Nlc3MubyBzcmMvbWFjL29tYWMvb21hY190ZXN0Lm8gXAorc3JjL21hYy9wZWxpY2FuL3BlbGljYW4ubyBzcmMvbWFjL3BlbGljYW4vcGVsaWNhbl9tZW1vcnkubyBzcmMvbWFjL3BlbGljYW4vcGVsaWNhbl90ZXN0Lm8gXAorc3JjL21hYy9wbWFjL3BtYWNfZG9uZS5vIHNyYy9tYWMvcG1hYy9wbWFjX2ZpbGUubyBzcmMvbWFjL3BtYWMvcG1hY19pbml0Lm8gc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5Lm8gXAorc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5X211bHRpLm8gc3JjL21hYy9wbWFjL3BtYWNfbnR6Lm8gc3JjL21hYy9wbWFjL3BtYWNfcHJvY2Vzcy5vIFwKK3NyYy9tYWMvcG1hYy9wbWFjX3NoaWZ0X3hvci5vIHNyYy9tYWMvcG1hYy9wbWFjX3Rlc3QubyBzcmMvbWFjL3hjYmMveGNiY19kb25lLm8gXAorc3JjL21hYy94Y2JjL3hjYmNfZmlsZS5vIHNyYy9tYWMveGNiYy94Y2JjX2luaXQubyBzcmMvbWFjL3hjYmMveGNiY19tZW1vcnkubyBcCitzcmMvbWFjL3hjYmMveGNiY19tZW1vcnlfbXVsdGkubyBzcmMvbWFjL3hjYmMveGNiY19wcm9jZXNzLm8gc3JjL21hYy94Y2JjL3hjYmNfdGVzdC5vIFwKK3NyYy9tYXRoL2ZwL2x0Y19lY2NfZnBfbXVsbW9kLm8gc3JjL21hdGgvZ21wX2Rlc2MubyBzcmMvbWF0aC9sdG1fZGVzYy5vIHNyYy9tYXRoL211bHRpLm8gXAorc3JjL21hdGgvcmFuZF9wcmltZS5vIHNyYy9tYXRoL3RmbV9kZXNjLm8gc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9kZWNvZGUubyBcCitzcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2VuY29kZS5vIHNyYy9taXNjL2J1cm5fc3RhY2subyBzcmMvbWlzYy9jcnlwdC9jcnlwdC5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2FyZ2Noay5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9kZXNjcmlwdG9yLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfY2lwaGVyX2lzX3ZhbGlkLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXIubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlcl9hbnkubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlcl9pZC5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9hbnkubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfaWQubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfb2lkLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9wcm5nLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZnNhLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9kZXNjcmlwdG9yLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9pc192YWxpZC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2x0Y19tcF9kZXNjcmlwdG9yLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19kZXNjcmlwdG9yLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19pc192YWxpZC5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2NpcGhlci5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2hhc2gubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9wcm5nLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9jaXBoZXIubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2hhc2gubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX3BybmcubyBcCitzcmMvbWlzYy9lcnJvcl90b19zdHJpbmcubyBzcmMvbWlzYy9wa2NzNS9wa2NzXzVfMS5vIHNyYy9taXNjL3BrY3M1L3BrY3NfNV8yLm8gc3JjL21pc2MvemVyb21lbS5vIFwKK3NyYy9tb2Rlcy9jYmMvY2JjX2RlY3J5cHQubyBzcmMvbW9kZXMvY2JjL2NiY19kb25lLm8gc3JjL21vZGVzL2NiYy9jYmNfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9jYmMvY2JjX2dldGl2Lm8gc3JjL21vZGVzL2NiYy9jYmNfc2V0aXYubyBzcmMvbW9kZXMvY2JjL2NiY19zdGFydC5vIFwKK3NyYy9tb2Rlcy9jZmIvY2ZiX2RlY3J5cHQubyBzcmMvbW9kZXMvY2ZiL2NmYl9kb25lLm8gc3JjL21vZGVzL2NmYi9jZmJfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9jZmIvY2ZiX2dldGl2Lm8gc3JjL21vZGVzL2NmYi9jZmJfc2V0aXYubyBzcmMvbW9kZXMvY2ZiL2NmYl9zdGFydC5vIFwKK3NyYy9tb2Rlcy9jdHIvY3RyX2RlY3J5cHQubyBzcmMvbW9kZXMvY3RyL2N0cl9kb25lLm8gc3JjL21vZGVzL2N0ci9jdHJfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9jdHIvY3RyX2dldGl2Lm8gc3JjL21vZGVzL2N0ci9jdHJfc2V0aXYubyBzcmMvbW9kZXMvY3RyL2N0cl9zdGFydC5vIHNyYy9tb2Rlcy9jdHIvY3RyX3Rlc3QubyBcCitzcmMvbW9kZXMvZWNiL2VjYl9kZWNyeXB0Lm8gc3JjL21vZGVzL2VjYi9lY2JfZG9uZS5vIHNyYy9tb2Rlcy9lY2IvZWNiX2VuY3J5cHQubyBcCitzcmMvbW9kZXMvZWNiL2VjYl9zdGFydC5vIHNyYy9tb2Rlcy9mOC9mOF9kZWNyeXB0Lm8gc3JjL21vZGVzL2Y4L2Y4X2RvbmUubyBzcmMvbW9kZXMvZjgvZjhfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9mOC9mOF9nZXRpdi5vIHNyYy9tb2Rlcy9mOC9mOF9zZXRpdi5vIHNyYy9tb2Rlcy9mOC9mOF9zdGFydC5vIHNyYy9tb2Rlcy9mOC9mOF90ZXN0X21vZGUubyBcCitzcmMvbW9kZXMvbHJ3L2xyd19kZWNyeXB0Lm8gc3JjL21vZGVzL2xydy9scndfZG9uZS5vIHNyYy9tb2Rlcy9scncvbHJ3X2VuY3J5cHQubyBcCitzcmMvbW9kZXMvbHJ3L2xyd19nZXRpdi5vIHNyYy9tb2Rlcy9scncvbHJ3X3Byb2Nlc3MubyBzcmMvbW9kZXMvbHJ3L2xyd19zZXRpdi5vIFwKK3NyYy9tb2Rlcy9scncvbHJ3X3N0YXJ0Lm8gc3JjL21vZGVzL2xydy9scndfdGVzdC5vIHNyYy9tb2Rlcy9vZmIvb2ZiX2RlY3J5cHQubyBzcmMvbW9kZXMvb2ZiL29mYl9kb25lLm8gXAorc3JjL21vZGVzL29mYi9vZmJfZW5jcnlwdC5vIHNyYy9tb2Rlcy9vZmIvb2ZiX2dldGl2Lm8gc3JjL21vZGVzL29mYi9vZmJfc2V0aXYubyBcCitzcmMvbW9kZXMvb2ZiL29mYl9zdGFydC5vIHNyYy9way9hc24xL2Rlci9iaXQvZGVyX2RlY29kZV9iaXRfc3RyaW5nLm8gXAorc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZW5jb2RlX2JpdF9zdHJpbmcubyBzcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9sZW5ndGhfYml0X3N0cmluZy5vIFwKK3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9kZWNvZGVfYm9vbGVhbi5vIHNyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9lbmNvZGVfYm9vbGVhbi5vIFwKK3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9sZW5ndGhfYm9vbGVhbi5vIHNyYy9way9hc24xL2Rlci9jaG9pY2UvZGVyX2RlY29kZV9jaG9pY2UubyBcCitzcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9kZWNvZGVfaWE1X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci9pYTUvZGVyX2VuY29kZV9pYTVfc3RyaW5nLm8gXAorc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfbGVuZ3RoX2lhNV9zdHJpbmcubyBzcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZGVjb2RlX2ludGVnZXIubyBcCitzcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZW5jb2RlX2ludGVnZXIubyBzcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfbGVuZ3RoX2ludGVnZXIubyBcCitzcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2RlY29kZV9vYmplY3RfaWRlbnRpZmllci5vIFwKK3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfZW5jb2RlX29iamVjdF9pZGVudGlmaWVyLm8gXAorc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9sZW5ndGhfb2JqZWN0X2lkZW50aWZpZXIubyBcCitzcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2RlY29kZV9vY3RldF9zdHJpbmcubyBzcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2VuY29kZV9vY3RldF9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2xlbmd0aF9vY3RldF9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZGVjb2RlX3ByaW50YWJsZV9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZW5jb2RlX3ByaW50YWJsZV9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9leC5vIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpLm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9leC5vIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpLm8gc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9sZW5ndGhfc2VxdWVuY2UubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX3NlcXVlbmNlX2ZyZWUubyBzcmMvcGsvYXNuMS9kZXIvc2V0L2Rlcl9lbmNvZGVfc2V0Lm8gXAorc3JjL3BrL2FzbjEvZGVyL3NldC9kZXJfZW5jb2RlX3NldG9mLm8gc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2RlY29kZV9zaG9ydF9pbnRlZ2VyLm8gXAorc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2VuY29kZV9zaG9ydF9pbnRlZ2VyLm8gXAorc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyLm8gc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2RlY29kZV91dGN0aW1lLm8gXAorc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2VuY29kZV91dGN0aW1lLm8gc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2xlbmd0aF91dGN0aW1lLm8gXAorc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2RlY29kZV91dGY4X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci91dGY4L2Rlcl9lbmNvZGVfdXRmOF9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nLm8gc3JjL3BrL2RzYS9kc2FfZGVjcnlwdF9rZXkubyBcCitzcmMvcGsvZHNhL2RzYV9lbmNyeXB0X2tleS5vIHNyYy9way9kc2EvZHNhX2V4cG9ydC5vIHNyYy9way9kc2EvZHNhX2ZyZWUubyBzcmMvcGsvZHNhL2RzYV9pbXBvcnQubyBcCitzcmMvcGsvZHNhL2RzYV9tYWtlX2tleS5vIHNyYy9way9kc2EvZHNhX3NoYXJlZF9zZWNyZXQubyBzcmMvcGsvZHNhL2RzYV9zaWduX2hhc2gubyBcCitzcmMvcGsvZHNhL2RzYV92ZXJpZnlfaGFzaC5vIHNyYy9way9kc2EvZHNhX3ZlcmlmeV9rZXkubyBzcmMvcGsvZWNjL2VjYy5vIFwKK3NyYy9way9lY2MvZWNjX2Fuc2lfeDk2M19leHBvcnQubyBzcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfaW1wb3J0Lm8gc3JjL3BrL2VjYy9lY2NfZGVjcnlwdF9rZXkubyBcCitzcmMvcGsvZWNjL2VjY19lbmNyeXB0X2tleS5vIHNyYy9way9lY2MvZWNjX2V4cG9ydC5vIHNyYy9way9lY2MvZWNjX2ZyZWUubyBzcmMvcGsvZWNjL2VjY19nZXRfc2l6ZS5vIFwKK3NyYy9way9lY2MvZWNjX2ltcG9ydC5vIHNyYy9way9lY2MvZWNjX21ha2Vfa2V5Lm8gc3JjL3BrL2VjYy9lY2Nfc2hhcmVkX3NlY3JldC5vIFwKK3NyYy9way9lY2MvZWNjX3NpZ25faGFzaC5vIHNyYy9way9lY2MvZWNjX3NpemVzLm8gc3JjL3BrL2VjYy9lY2NfdGVzdC5vIHNyYy9way9lY2MvZWNjX3ZlcmlmeV9oYXNoLm8gXAorc3JjL3BrL2VjYy9sdGNfZWNjX2lzX3ZhbGlkX2lkeC5vIHNyYy9way9lY2MvbHRjX2VjY19tYXAubyBzcmMvcGsvZWNjL2x0Y19lY2NfbXVsMmFkZC5vIFwKK3NyYy9way9lY2MvbHRjX2VjY19tdWxtb2QubyBzcmMvcGsvZWNjL2x0Y19lY2NfbXVsbW9kX3RpbWluZy5vIHNyYy9way9lY2MvbHRjX2VjY19wb2ludHMubyBcCitzcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQubyBzcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQubyBcCitzcmMvcGsva2F0amEva2F0amFfZGVjcnlwdF9rZXkubyBzcmMvcGsva2F0amEva2F0amFfZW5jcnlwdF9rZXkubyBzcmMvcGsva2F0amEva2F0amFfZXhwb3J0Lm8gXAorc3JjL3BrL2thdGphL2thdGphX2V4cHRtb2QubyBzcmMvcGsva2F0amEva2F0amFfZnJlZS5vIHNyYy9way9rYXRqYS9rYXRqYV9pbXBvcnQubyBcCitzcmMvcGsva2F0amEva2F0amFfbWFrZV9rZXkubyBzcmMvcGsvcGtjczEvcGtjc18xX2kyb3NwLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9tZ2YxLm8gXAorc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2RlY29kZS5vIHNyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9lbmNvZGUubyBzcmMvcGsvcGtjczEvcGtjc18xX29zMmlwLm8gXAorc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZGVjb2RlLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZW5jb2RlLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2RlY29kZS5vIFwKK3NyYy9way9wa2NzMS9wa2NzXzFfdjFfNV9lbmNvZGUubyBzcmMvcGsvcnNhL3JzYV9kZWNyeXB0X2tleS5vIHNyYy9way9yc2EvcnNhX2VuY3J5cHRfa2V5Lm8gXAorc3JjL3BrL3JzYS9yc2FfZXhwb3J0Lm8gc3JjL3BrL3JzYS9yc2FfZXhwdG1vZC5vIHNyYy9way9yc2EvcnNhX2ZyZWUubyBzcmMvcGsvcnNhL3JzYV9pbXBvcnQubyBcCitzcmMvcGsvcnNhL3JzYV9tYWtlX2tleS5vIHNyYy9way9yc2EvcnNhX3NpZ25faGFzaC5vIHNyYy9way9yc2EvcnNhX3ZlcmlmeV9oYXNoLm8gc3JjL3BybmdzL2ZvcnR1bmEubyBcCitzcmMvcHJuZ3MvcmM0Lm8gc3JjL3BybmdzL3JuZ19nZXRfYnl0ZXMubyBzcmMvcHJuZ3Mvcm5nX21ha2VfcHJuZy5vIHNyYy9wcm5ncy9zb2JlcjEyOC5vIFwKK3NyYy9wcm5ncy9zcHJuZy5vIHNyYy9wcm5ncy95YXJyb3cubyAKKworSEVBREVSUz1zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYWMuaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYWNyb3MuaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9jdXN0b20uaCBzcmMvaGVhZGVycy90b21jcnlwdF9hcmdjaGsuaCBzcmMvaGVhZGVycy90b21jcnlwdF9jaXBoZXIuaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9way5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2hhc2guaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYXRoLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWlzYy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0Lmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGtjcy5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BybmcuaCB0ZXN0cHJvZi90b21jcnlwdF90ZXN0LmgKKworI0VORF9JTlMKKworI1dobyBkbyB3ZSBpbnN0YWxsIGFzPworaWZkZWYgSU5TVEFMTF9VU0VSCitVU0VSPSQoSU5TVEFMTF9VU0VSKQorZWxzZQorVVNFUj1yb290CitlbmRpZgorCitpZmRlZiBJTlNUQUxMX0dST1VQCitHUk9VUD0kKElOU1RBTExfR1JPVVApCitlbHNlCitHUk9VUD13aGVlbAorZW5kaWYKKworI2NpcGhlcnMgY29tZSBpbiB0d28gZmxhdm91cnMuLi4gZW5jK2RlYyBhbmQgZW5jIAorYWVzX2VuYy5vOiBhZXMuYyBhZXNfdGFiLmMKKwkkKENDKSAkKENGTEFHUykgLURFTkNSWVBUX09OTFkgLWMgYWVzLmMgLW8gYWVzX2VuYy5vCisKK0hBU0hPQkpFQ1RTPWRlbW9zL2hhc2hzdW0ubworQ1JZUFRPQkpFQ1RTPWRlbW9zL2VuY3J5cHQubworU01BTExPQkpFQ1RTPWRlbW9zL3NtYWxsLm8KK1RWUz1kZW1vcy90dl9nZW4ubworVElNSU5HUz1kZW1vcy90aW1pbmcubworVEVTVFM9ZGVtb3MvdGVzdC5vCisKKyNjaXBoZXJzIGNvbWUgaW4gdHdvIGZsYXZvdXJzLi4uIGVuYytkZWMgYW5kIGVuYyAKK3NyYy9jaXBoZXJzL2Flcy9hZXNfZW5jLm86IHNyYy9jaXBoZXJzL2Flcy9hZXMuYyBzcmMvY2lwaGVycy9hZXMvYWVzX3RhYi5jCisJJChDQykgJChDRkxBR1MpIC1ERU5DUllQVF9PTkxZIC1jIHNyYy9jaXBoZXJzL2Flcy9hZXMuYyAtbyBzcmMvY2lwaGVycy9hZXMvYWVzX2VuYy5vCisKKyNUaGVzZSBhcmUgdGhlIHJ1bGVzIHRvIG1ha2UgY2VydGFpbiBvYmplY3QgZmlsZXMuCitzcmMvY2lwaGVycy9hZXMvYWVzLm86IHNyYy9jaXBoZXJzL2Flcy9hZXMuYyBzcmMvY2lwaGVycy9hZXMvYWVzX3RhYi5jCitzcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2gubzogc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoLmMgc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoX3RhYi5jCitzcmMvaGFzaGVzL3doaXJsL3doaXJsLm86IHNyYy9oYXNoZXMvd2hpcmwvd2hpcmwuYyBzcmMvaGFzaGVzL3doaXJsL3doaXJsdGFiLmMKK3NyYy9oYXNoZXMvc2hhMi9zaGE1MTIubzogc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5jIHNyYy9oYXNoZXMvc2hhMi9zaGEzODQuYworc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5vOiBzcmMvaGFzaGVzL3NoYTIvc2hhMjU2LmMgc3JjL2hhc2hlcy9zaGEyL3NoYTIyNC5jCisKKyNUaGlzIHJ1bGUgbWFrZXMgdGhlIGxpYnRvbWNyeXB0IGxpYnJhcnkuCitsaWJyYXJ5OiAkKExJQk5BTUUpCisKK3Rlc3Rwcm9mLyQoTElCVEVTVCk6CisJY2QgdGVzdHByb2YgOyBMSUJURVNUX1M9JChMSUJURVNUKSBDRkxBR1M9IiQoQ0ZMQUdTKSIgbWFrZSAtZiBtYWtlZmlsZS5pY2MKKworJChMSUJOQU1FKTogJChPQkpFQ1RTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpFQ1RTKQorCXJhbmxpYiAkQAorCisjVGhpcyBydWxlIG1ha2VzIHRoZSBoYXNoIHByb2dyYW0gaW5jbHVkZWQgd2l0aCBsaWJ0b21jcnlwdAoraGFzaHN1bTogbGlicmFyeSAkKEhBU0hPQkpFQ1RTKQorCSQoQ0MpICQoSEFTSE9CSkVDVFMpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoSEFTSCkgJChXQVJOKQorCisjbWFrZXMgdGhlIGNyeXB0IHByb2dyYW0KK2NyeXB0OiBsaWJyYXJ5ICQoQ1JZUFRPQkpFQ1RTKQorCSQoQ0MpICQoQ1JZUFRPQkpFQ1RTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKENSWVBUKSAkKFdBUk4pCisKKyNtYWtlcyB0aGUgc21hbGwgcHJvZ3JhbQorc21hbGw6IGxpYnJhcnkgJChTTUFMTE9CSkVDVFMpCisJJChDQykgJChTTUFMTE9CSkVDVFMpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoU01BTEwpICQoV0FSTikKKwkKK3R2X2dlbjogbGlicmFyeSAkKFRWUykKKwkkKENDKSAkKFRWUykgJChMSUJOQU1FKSAkKEVYVFJBTElCUykgLW8gJChUVikKKwordGltaW5nOiBsaWJyYXJ5ICQoVElNSU5HUykgdGVzdHByb2YvJChMSUJURVNUKQorCSQoQ0MpICQoVElNSU5HUykgdGVzdHByb2YvJChMSUJURVNUKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKFRJTUlORykKKwordGVzdDogbGlicmFyeSAkKFRFU1RTKSB0ZXN0cHJvZi8kKExJQlRFU1QpCisJJChDQykgJChURVNUUykgdGVzdHByb2YvJChMSUJURVNUKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKFRFU1QpCisgIAorI1RoaXMgcnVsZSBpbnN0YWxscyB0aGUgbGlicmFyeSBhbmQgdGhlIGhlYWRlciBmaWxlcy4gVGhpcyBtdXN0IGJlIHJ1bgorI2FzIHJvb3QgaW4gb3JkZXIgdG8gaGF2ZSBhIGhpZ2ggZW5vdWdoIHBlcm1pc3Npb24gdG8gd3JpdGUgdG8gdGhlIGNvcnJlY3QKKyNkaXJlY3RvcmllcyBhbmQgdG8gc2V0IHRoZSBvd25lciBhbmQgZ3JvdXAgdG8gcm9vdC4KK2luc3RhbGw6IGxpYnJhcnkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoTElCUEFUSCkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoSU5DUEFUSCkKKwlpbnN0YWxsIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChMSUJOQU1FKSAkKERFU1RESVIpJChMSUJQQVRIKQorCWluc3RhbGwgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKExJQlRFU1QpICQoREVTVERJUikkKExJQlBBVEgpCisJaW5zdGFsbCAtZyAkKEdST1VQKSAtbyAkKFVTRVIpICQoSEVBREVSUykgJChERVNURElSKSQoSU5DUEFUSCkKKworIyAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9tYWtlZmlsZS5pY2MsdiAkICAgCisjICRSZXZpc2lvbjogMS43MyAkICAgCisjICREYXRlOiAyMDA2LzEyLzAyIDE5OjIzOjIxICQgCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L21ha2VmaWxlLm1zdmMgYi9saWJ0b21jcnlwdC9tYWtlZmlsZS5tc3ZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNDA4ZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9tYWtlZmlsZS5tc3ZjCkBAIC0wLDAgKzEsMTQ5IEBACisjTVNWQyBNYWtlZmlsZSBbdGVzdGVkIHdpdGggTVNWQyA2LjAwIHdpdGggU1A1XQorIworI1RvbSBTdCBEZW5pcworQ0ZMQUdTID0gL0lzcmMvaGVhZGVycy8gL0l0ZXN0cHJvZi8gL094IC9EV0lOMzIgL0RMVENfU09VUkNFIC9XMyAvRm8kQCAkKENGKQorCisjU1RBUlRfSU5TCitPQkpFQ1RTPXNyYy9jaXBoZXJzL2Flcy9hZXNfZW5jLm9iaiBzcmMvY2lwaGVycy9hZXMvYWVzLm9iaiBzcmMvY2lwaGVycy9hbnViaXMub2JqIHNyYy9jaXBoZXJzL2Jsb3dmaXNoLm9iaiBcCitzcmMvY2lwaGVycy9jYXN0NS5vYmogc3JjL2NpcGhlcnMvZGVzLm9iaiBzcmMvY2lwaGVycy9rYXN1bWkub2JqIHNyYy9jaXBoZXJzL2toYXphZC5vYmogc3JjL2NpcGhlcnMva3NlZWQub2JqIFwKK3NyYy9jaXBoZXJzL25vZWtlb24ub2JqIHNyYy9jaXBoZXJzL3JjMi5vYmogc3JjL2NpcGhlcnMvcmM1Lm9iaiBzcmMvY2lwaGVycy9yYzYub2JqIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVyLm9iaiBcCitzcmMvY2lwaGVycy9zYWZlci9zYWZlcl90YWIub2JqIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVycC5vYmogc3JjL2NpcGhlcnMvc2tpcGphY2sub2JqIFwKK3NyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaC5vYmogc3JjL2NpcGhlcnMveHRlYS5vYmogc3JjL2VuY2F1dGgvY2NtL2NjbV9tZW1vcnkub2JqIFwKK3NyYy9lbmNhdXRoL2NjbS9jY21fdGVzdC5vYmogc3JjL2VuY2F1dGgvZWF4L2VheF9hZGRoZWFkZXIub2JqIHNyYy9lbmNhdXRoL2VheC9lYXhfZGVjcnlwdC5vYmogXAorc3JjL2VuY2F1dGgvZWF4L2VheF9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkub2JqIHNyYy9lbmNhdXRoL2VheC9lYXhfZG9uZS5vYmogc3JjL2VuY2F1dGgvZWF4L2VheF9lbmNyeXB0Lm9iaiBcCitzcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5vYmogc3JjL2VuY2F1dGgvZWF4L2VheF9pbml0Lm9iaiBcCitzcmMvZW5jYXV0aC9lYXgvZWF4X3Rlc3Qub2JqIHNyYy9lbmNhdXRoL2djbS9nY21fYWRkX2FhZC5vYmogc3JjL2VuY2F1dGgvZ2NtL2djbV9hZGRfaXYub2JqIFwKK3NyYy9lbmNhdXRoL2djbS9nY21fZG9uZS5vYmogc3JjL2VuY2F1dGgvZ2NtL2djbV9nZl9tdWx0Lm9iaiBzcmMvZW5jYXV0aC9nY20vZ2NtX2luaXQub2JqIFwKK3NyYy9lbmNhdXRoL2djbS9nY21fbWVtb3J5Lm9iaiBzcmMvZW5jYXV0aC9nY20vZ2NtX211bHRfaC5vYmogc3JjL2VuY2F1dGgvZ2NtL2djbV9wcm9jZXNzLm9iaiBcCitzcmMvZW5jYXV0aC9nY20vZ2NtX3Jlc2V0Lm9iaiBzcmMvZW5jYXV0aC9nY20vZ2NtX3Rlc3Qub2JqIHNyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdC5vYmogXAorc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkub2JqIHNyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9kZWNyeXB0Lm9iaiBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZW5jcnlwdC5vYmogc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0Lm9iaiBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5vYmogc3JjL2VuY2F1dGgvb2NiL29jYl9pbml0Lm9iaiBzcmMvZW5jYXV0aC9vY2Ivb2NiX250ei5vYmogXAorc3JjL2VuY2F1dGgvb2NiL29jYl9zaGlmdF94b3Iub2JqIHNyYy9lbmNhdXRoL29jYi9vY2JfdGVzdC5vYmogc3JjL2VuY2F1dGgvb2NiL3Nfb2NiX2RvbmUub2JqIFwKK3NyYy9oYXNoZXMvY2hjL2NoYy5vYmogc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9maWxlLm9iaiBzcmMvaGFzaGVzL2hlbHBlci9oYXNoX2ZpbGVoYW5kbGUub2JqIFwKK3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5Lm9iaiBzcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeV9tdWx0aS5vYmogc3JjL2hhc2hlcy9tZDIub2JqIHNyYy9oYXNoZXMvbWQ0Lm9iaiBcCitzcmMvaGFzaGVzL21kNS5vYmogc3JjL2hhc2hlcy9ybWQxMjgub2JqIHNyYy9oYXNoZXMvcm1kMTYwLm9iaiBzcmMvaGFzaGVzL3JtZDI1Ni5vYmogc3JjL2hhc2hlcy9ybWQzMjAub2JqIFwKK3NyYy9oYXNoZXMvc2hhMS5vYmogc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5vYmogc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5vYmogc3JjL2hhc2hlcy90aWdlci5vYmogXAorc3JjL2hhc2hlcy93aGlybC93aGlybC5vYmogc3JjL21hYy9mOS9mOV9kb25lLm9iaiBzcmMvbWFjL2Y5L2Y5X2ZpbGUub2JqIHNyYy9tYWMvZjkvZjlfaW5pdC5vYmogXAorc3JjL21hYy9mOS9mOV9tZW1vcnkub2JqIHNyYy9tYWMvZjkvZjlfbWVtb3J5X211bHRpLm9iaiBzcmMvbWFjL2Y5L2Y5X3Byb2Nlc3Mub2JqIHNyYy9tYWMvZjkvZjlfdGVzdC5vYmogXAorc3JjL21hYy9obWFjL2htYWNfZG9uZS5vYmogc3JjL21hYy9obWFjL2htYWNfZmlsZS5vYmogc3JjL21hYy9obWFjL2htYWNfaW5pdC5vYmogc3JjL21hYy9obWFjL2htYWNfbWVtb3J5Lm9iaiBcCitzcmMvbWFjL2htYWMvaG1hY19tZW1vcnlfbXVsdGkub2JqIHNyYy9tYWMvaG1hYy9obWFjX3Byb2Nlc3Mub2JqIHNyYy9tYWMvaG1hYy9obWFjX3Rlc3Qub2JqIFwKK3NyYy9tYWMvb21hYy9vbWFjX2RvbmUub2JqIHNyYy9tYWMvb21hYy9vbWFjX2ZpbGUub2JqIHNyYy9tYWMvb21hYy9vbWFjX2luaXQub2JqIHNyYy9tYWMvb21hYy9vbWFjX21lbW9yeS5vYmogXAorc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5X211bHRpLm9iaiBzcmMvbWFjL29tYWMvb21hY19wcm9jZXNzLm9iaiBzcmMvbWFjL29tYWMvb21hY190ZXN0Lm9iaiBcCitzcmMvbWFjL3BlbGljYW4vcGVsaWNhbi5vYmogc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fbWVtb3J5Lm9iaiBzcmMvbWFjL3BlbGljYW4vcGVsaWNhbl90ZXN0Lm9iaiBcCitzcmMvbWFjL3BtYWMvcG1hY19kb25lLm9iaiBzcmMvbWFjL3BtYWMvcG1hY19maWxlLm9iaiBzcmMvbWFjL3BtYWMvcG1hY19pbml0Lm9iaiBzcmMvbWFjL3BtYWMvcG1hY19tZW1vcnkub2JqIFwKK3NyYy9tYWMvcG1hYy9wbWFjX21lbW9yeV9tdWx0aS5vYmogc3JjL21hYy9wbWFjL3BtYWNfbnR6Lm9iaiBzcmMvbWFjL3BtYWMvcG1hY19wcm9jZXNzLm9iaiBcCitzcmMvbWFjL3BtYWMvcG1hY19zaGlmdF94b3Iub2JqIHNyYy9tYWMvcG1hYy9wbWFjX3Rlc3Qub2JqIHNyYy9tYWMveGNiYy94Y2JjX2RvbmUub2JqIFwKK3NyYy9tYWMveGNiYy94Y2JjX2ZpbGUub2JqIHNyYy9tYWMveGNiYy94Y2JjX2luaXQub2JqIHNyYy9tYWMveGNiYy94Y2JjX21lbW9yeS5vYmogXAorc3JjL21hYy94Y2JjL3hjYmNfbWVtb3J5X211bHRpLm9iaiBzcmMvbWFjL3hjYmMveGNiY19wcm9jZXNzLm9iaiBzcmMvbWFjL3hjYmMveGNiY190ZXN0Lm9iaiBcCitzcmMvbWF0aC9mcC9sdGNfZWNjX2ZwX211bG1vZC5vYmogc3JjL21hdGgvZ21wX2Rlc2Mub2JqIHNyYy9tYXRoL2x0bV9kZXNjLm9iaiBzcmMvbWF0aC9tdWx0aS5vYmogXAorc3JjL21hdGgvcmFuZF9wcmltZS5vYmogc3JjL21hdGgvdGZtX2Rlc2Mub2JqIHNyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZGVjb2RlLm9iaiBcCitzcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2VuY29kZS5vYmogc3JjL21pc2MvYnVybl9zdGFjay5vYmogc3JjL21pc2MvY3J5cHQvY3J5cHQub2JqIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2FyZ2Noay5vYmogc3JjL21pc2MvY3J5cHQvY3J5cHRfY2lwaGVyX2Rlc2NyaXB0b3Iub2JqIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9pc192YWxpZC5vYmogc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXIub2JqIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2FueS5vYmogc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfaWQub2JqIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaC5vYmogc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2FueS5vYmogXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2lkLm9iaiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfb2lkLm9iaiBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX3Bybmcub2JqIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZzYS5vYmogc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9kZXNjcmlwdG9yLm9iaiBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2lzX3ZhbGlkLm9iaiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9sdGNfbXBfZGVzY3JpcHRvci5vYmogXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19kZXNjcmlwdG9yLm9iaiBzcmMvbWlzYy9jcnlwdC9jcnlwdF9wcm5nX2lzX3ZhbGlkLm9iaiBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9jaXBoZXIub2JqIHNyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2hhc2gub2JqIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX3Bybmcub2JqIHNyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfY2lwaGVyLm9iaiBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2hhc2gub2JqIHNyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfcHJuZy5vYmogXAorc3JjL21pc2MvZXJyb3JfdG9fc3RyaW5nLm9iaiBzcmMvbWlzYy9wa2NzNS9wa2NzXzVfMS5vYmogc3JjL21pc2MvcGtjczUvcGtjc181XzIub2JqIHNyYy9taXNjL3plcm9tZW0ub2JqIFwKK3NyYy9tb2Rlcy9jYmMvY2JjX2RlY3J5cHQub2JqIHNyYy9tb2Rlcy9jYmMvY2JjX2RvbmUub2JqIHNyYy9tb2Rlcy9jYmMvY2JjX2VuY3J5cHQub2JqIFwKK3NyYy9tb2Rlcy9jYmMvY2JjX2dldGl2Lm9iaiBzcmMvbW9kZXMvY2JjL2NiY19zZXRpdi5vYmogc3JjL21vZGVzL2NiYy9jYmNfc3RhcnQub2JqIFwKK3NyYy9tb2Rlcy9jZmIvY2ZiX2RlY3J5cHQub2JqIHNyYy9tb2Rlcy9jZmIvY2ZiX2RvbmUub2JqIHNyYy9tb2Rlcy9jZmIvY2ZiX2VuY3J5cHQub2JqIFwKK3NyYy9tb2Rlcy9jZmIvY2ZiX2dldGl2Lm9iaiBzcmMvbW9kZXMvY2ZiL2NmYl9zZXRpdi5vYmogc3JjL21vZGVzL2NmYi9jZmJfc3RhcnQub2JqIFwKK3NyYy9tb2Rlcy9jdHIvY3RyX2RlY3J5cHQub2JqIHNyYy9tb2Rlcy9jdHIvY3RyX2RvbmUub2JqIHNyYy9tb2Rlcy9jdHIvY3RyX2VuY3J5cHQub2JqIFwKK3NyYy9tb2Rlcy9jdHIvY3RyX2dldGl2Lm9iaiBzcmMvbW9kZXMvY3RyL2N0cl9zZXRpdi5vYmogc3JjL21vZGVzL2N0ci9jdHJfc3RhcnQub2JqIHNyYy9tb2Rlcy9jdHIvY3RyX3Rlc3Qub2JqIFwKK3NyYy9tb2Rlcy9lY2IvZWNiX2RlY3J5cHQub2JqIHNyYy9tb2Rlcy9lY2IvZWNiX2RvbmUub2JqIHNyYy9tb2Rlcy9lY2IvZWNiX2VuY3J5cHQub2JqIFwKK3NyYy9tb2Rlcy9lY2IvZWNiX3N0YXJ0Lm9iaiBzcmMvbW9kZXMvZjgvZjhfZGVjcnlwdC5vYmogc3JjL21vZGVzL2Y4L2Y4X2RvbmUub2JqIHNyYy9tb2Rlcy9mOC9mOF9lbmNyeXB0Lm9iaiBcCitzcmMvbW9kZXMvZjgvZjhfZ2V0aXYub2JqIHNyYy9tb2Rlcy9mOC9mOF9zZXRpdi5vYmogc3JjL21vZGVzL2Y4L2Y4X3N0YXJ0Lm9iaiBzcmMvbW9kZXMvZjgvZjhfdGVzdF9tb2RlLm9iaiBcCitzcmMvbW9kZXMvbHJ3L2xyd19kZWNyeXB0Lm9iaiBzcmMvbW9kZXMvbHJ3L2xyd19kb25lLm9iaiBzcmMvbW9kZXMvbHJ3L2xyd19lbmNyeXB0Lm9iaiBcCitzcmMvbW9kZXMvbHJ3L2xyd19nZXRpdi5vYmogc3JjL21vZGVzL2xydy9scndfcHJvY2Vzcy5vYmogc3JjL21vZGVzL2xydy9scndfc2V0aXYub2JqIFwKK3NyYy9tb2Rlcy9scncvbHJ3X3N0YXJ0Lm9iaiBzcmMvbW9kZXMvbHJ3L2xyd190ZXN0Lm9iaiBzcmMvbW9kZXMvb2ZiL29mYl9kZWNyeXB0Lm9iaiBzcmMvbW9kZXMvb2ZiL29mYl9kb25lLm9iaiBcCitzcmMvbW9kZXMvb2ZiL29mYl9lbmNyeXB0Lm9iaiBzcmMvbW9kZXMvb2ZiL29mYl9nZXRpdi5vYmogc3JjL21vZGVzL29mYi9vZmJfc2V0aXYub2JqIFwKK3NyYy9tb2Rlcy9vZmIvb2ZiX3N0YXJ0Lm9iaiBzcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9kZWNvZGVfYml0X3N0cmluZy5vYmogXAorc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZW5jb2RlX2JpdF9zdHJpbmcub2JqIHNyYy9way9hc24xL2Rlci9iaXQvZGVyX2xlbmd0aF9iaXRfc3RyaW5nLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfZGVjb2RlX2Jvb2xlYW4ub2JqIHNyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9lbmNvZGVfYm9vbGVhbi5vYmogXAorc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2xlbmd0aF9ib29sZWFuLm9iaiBzcmMvcGsvYXNuMS9kZXIvY2hvaWNlL2Rlcl9kZWNvZGVfY2hvaWNlLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9kZWNvZGVfaWE1X3N0cmluZy5vYmogc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZW5jb2RlX2lhNV9zdHJpbmcub2JqIFwKK3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2xlbmd0aF9pYTVfc3RyaW5nLm9iaiBzcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZGVjb2RlX2ludGVnZXIub2JqIFwKK3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9lbmNvZGVfaW50ZWdlci5vYmogc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2xlbmd0aF9pbnRlZ2VyLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2RlY29kZV9vYmplY3RfaWRlbnRpZmllci5vYmogXAorc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9lbmNvZGVfb2JqZWN0X2lkZW50aWZpZXIub2JqIFwKK3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2RlY29kZV9vY3RldF9zdHJpbmcub2JqIHNyYy9way9hc24xL2Rlci9vY3RldC9kZXJfZW5jb2RlX29jdGV0X3N0cmluZy5vYmogXAorc3JjL3BrL2FzbjEvZGVyL29jdGV0L2Rlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZGVjb2RlX3ByaW50YWJsZV9zdHJpbmcub2JqIFwKK3NyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZy5vYmogXAorc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2xlbmd0aF9wcmludGFibGVfc3RyaW5nLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9leC5vYmogXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfZmxleGkub2JqIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9leC5vYmogXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkub2JqIHNyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfbGVuZ3RoX3NlcXVlbmNlLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX3NlcXVlbmNlX2ZyZWUub2JqIHNyYy9way9hc24xL2Rlci9zZXQvZGVyX2VuY29kZV9zZXQub2JqIFwKK3NyYy9way9hc24xL2Rlci9zZXQvZGVyX2VuY29kZV9zZXRvZi5vYmogc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2RlY29kZV9zaG9ydF9pbnRlZ2VyLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfZW5jb2RlX3Nob3J0X2ludGVnZXIub2JqIFwKK3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9sZW5ndGhfc2hvcnRfaW50ZWdlci5vYmogc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2RlY29kZV91dGN0aW1lLm9iaiBcCitzcmMvcGsvYXNuMS9kZXIvdXRjdGltZS9kZXJfZW5jb2RlX3V0Y3RpbWUub2JqIHNyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9sZW5ndGhfdXRjdGltZS5vYmogXAorc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2RlY29kZV91dGY4X3N0cmluZy5vYmogc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2VuY29kZV91dGY4X3N0cmluZy5vYmogXAorc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2xlbmd0aF91dGY4X3N0cmluZy5vYmogc3JjL3BrL2RzYS9kc2FfZGVjcnlwdF9rZXkub2JqIFwKK3NyYy9way9kc2EvZHNhX2VuY3J5cHRfa2V5Lm9iaiBzcmMvcGsvZHNhL2RzYV9leHBvcnQub2JqIHNyYy9way9kc2EvZHNhX2ZyZWUub2JqIHNyYy9way9kc2EvZHNhX2ltcG9ydC5vYmogXAorc3JjL3BrL2RzYS9kc2FfbWFrZV9rZXkub2JqIHNyYy9way9kc2EvZHNhX3NoYXJlZF9zZWNyZXQub2JqIHNyYy9way9kc2EvZHNhX3NpZ25faGFzaC5vYmogXAorc3JjL3BrL2RzYS9kc2FfdmVyaWZ5X2hhc2gub2JqIHNyYy9way9kc2EvZHNhX3ZlcmlmeV9rZXkub2JqIHNyYy9way9lY2MvZWNjLm9iaiBcCitzcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfZXhwb3J0Lm9iaiBzcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfaW1wb3J0Lm9iaiBzcmMvcGsvZWNjL2VjY19kZWNyeXB0X2tleS5vYmogXAorc3JjL3BrL2VjYy9lY2NfZW5jcnlwdF9rZXkub2JqIHNyYy9way9lY2MvZWNjX2V4cG9ydC5vYmogc3JjL3BrL2VjYy9lY2NfZnJlZS5vYmogc3JjL3BrL2VjYy9lY2NfZ2V0X3NpemUub2JqIFwKK3NyYy9way9lY2MvZWNjX2ltcG9ydC5vYmogc3JjL3BrL2VjYy9lY2NfbWFrZV9rZXkub2JqIHNyYy9way9lY2MvZWNjX3NoYXJlZF9zZWNyZXQub2JqIFwKK3NyYy9way9lY2MvZWNjX3NpZ25faGFzaC5vYmogc3JjL3BrL2VjYy9lY2Nfc2l6ZXMub2JqIHNyYy9way9lY2MvZWNjX3Rlc3Qub2JqIHNyYy9way9lY2MvZWNjX3ZlcmlmeV9oYXNoLm9iaiBcCitzcmMvcGsvZWNjL2x0Y19lY2NfaXNfdmFsaWRfaWR4Lm9iaiBzcmMvcGsvZWNjL2x0Y19lY2NfbWFwLm9iaiBzcmMvcGsvZWNjL2x0Y19lY2NfbXVsMmFkZC5vYmogXAorc3JjL3BrL2VjYy9sdGNfZWNjX211bG1vZC5vYmogc3JjL3BrL2VjYy9sdGNfZWNjX211bG1vZF90aW1pbmcub2JqIHNyYy9way9lY2MvbHRjX2VjY19wb2ludHMub2JqIFwKK3NyYy9way9lY2MvbHRjX2VjY19wcm9qZWN0aXZlX2FkZF9wb2ludC5vYmogc3JjL3BrL2VjYy9sdGNfZWNjX3Byb2plY3RpdmVfZGJsX3BvaW50Lm9iaiBcCitzcmMvcGsva2F0amEva2F0amFfZGVjcnlwdF9rZXkub2JqIHNyYy9way9rYXRqYS9rYXRqYV9lbmNyeXB0X2tleS5vYmogc3JjL3BrL2thdGphL2thdGphX2V4cG9ydC5vYmogXAorc3JjL3BrL2thdGphL2thdGphX2V4cHRtb2Qub2JqIHNyYy9way9rYXRqYS9rYXRqYV9mcmVlLm9iaiBzcmMvcGsva2F0amEva2F0amFfaW1wb3J0Lm9iaiBcCitzcmMvcGsva2F0amEva2F0amFfbWFrZV9rZXkub2JqIHNyYy9way9wa2NzMS9wa2NzXzFfaTJvc3Aub2JqIHNyYy9way9wa2NzMS9wa2NzXzFfbWdmMS5vYmogXAorc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2RlY29kZS5vYmogc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2VuY29kZS5vYmogc3JjL3BrL3BrY3MxL3BrY3NfMV9vczJpcC5vYmogXAorc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZGVjb2RlLm9iaiBzcmMvcGsvcGtjczEvcGtjc18xX3Bzc19lbmNvZGUub2JqIHNyYy9way9wa2NzMS9wa2NzXzFfdjFfNV9kZWNvZGUub2JqIFwKK3NyYy9way9wa2NzMS9wa2NzXzFfdjFfNV9lbmNvZGUub2JqIHNyYy9way9yc2EvcnNhX2RlY3J5cHRfa2V5Lm9iaiBzcmMvcGsvcnNhL3JzYV9lbmNyeXB0X2tleS5vYmogXAorc3JjL3BrL3JzYS9yc2FfZXhwb3J0Lm9iaiBzcmMvcGsvcnNhL3JzYV9leHB0bW9kLm9iaiBzcmMvcGsvcnNhL3JzYV9mcmVlLm9iaiBzcmMvcGsvcnNhL3JzYV9pbXBvcnQub2JqIFwKK3NyYy9way9yc2EvcnNhX21ha2Vfa2V5Lm9iaiBzcmMvcGsvcnNhL3JzYV9zaWduX2hhc2gub2JqIHNyYy9way9yc2EvcnNhX3ZlcmlmeV9oYXNoLm9iaiBzcmMvcHJuZ3MvZm9ydHVuYS5vYmogXAorc3JjL3BybmdzL3JjNC5vYmogc3JjL3BybmdzL3JuZ19nZXRfYnl0ZXMub2JqIHNyYy9wcm5ncy9ybmdfbWFrZV9wcm5nLm9iaiBzcmMvcHJuZ3Mvc29iZXIxMjgub2JqIFwKK3NyYy9wcm5ncy9zcHJuZy5vYmogc3JjL3BybmdzL3lhcnJvdy5vYmogCisKK0hFQURFUlM9c3JjL2hlYWRlcnMvdG9tY3J5cHRfY2ZnLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfY3VzdG9tLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfYXJnY2hrLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfY2lwaGVyLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGsuaCBzcmMvaGVhZGVycy90b21jcnlwdF9oYXNoLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWF0aC5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X21pc2MuaCBzcmMvaGVhZGVycy90b21jcnlwdC5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X3BrY3MuaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9wcm5nLmggdGVzdHByb2YvdG9tY3J5cHRfdGVzdC5oCisKKyNFTkRfSU5TCisKK2RlZmF1bHQ6IGxpYnJhcnkKKworI2NpcGhlcnMgY29tZSBpbiB0d28gZmxhdm91cnMuLi4gZW5jK2RlYyBhbmQgZW5jCitzcmMvY2lwaGVycy9hZXMvYWVzX2VuYy5vYmo6IHNyYy9jaXBoZXJzL2Flcy9hZXMuYyBzcmMvY2lwaGVycy9hZXMvYWVzX3RhYi5jCisJJChDQykgJChDRkxBR1MpIC9ERU5DUllQVF9PTkxZIC9jIHNyYy9jaXBoZXJzL2Flcy9hZXMuYyAvRm9zcmMvY2lwaGVycy9hZXMvYWVzX2VuYy5vYmoKKworbGlicmFyeTogJChPQkpFQ1RTKQorCWxpYiAvb3V0OnRvbWNyeXB0LmxpYiAkKE9CSkVDVFMpCisJY2QgdGVzdHByb2YgCisJbm1ha2UgLWYgbWFrZWZpbGUubXN2YworCWNkIC4uCisJCit0dl9nZW46IGRlbW9zL3R2X2dlbi5jIGxpYnJhcnkKKwljbCAkKENGTEFHUykgZGVtb3MvdHZfZ2VuLmMgdG9tY3J5cHQubGliIGFkdmFwaTMyLmxpYiAkKEVYVFJBTElCUykKKworaGFzaHN1bTogZGVtb3MvaGFzaHN1bS5jIGxpYnJhcnkKKwljbCAkKENGTEFHUykgZGVtb3MvaGFzaHN1bS5jIHRvbWNyeXB0LmxpYiBhZHZhcGkzMi5saWIgJChFWFRSQUxJQlMpCisKK3Rlc3Q6IGRlbW9zL3Rlc3QuYyBsaWJyYXJ5CisJY2wgJChDRkxBR1MpIGRlbW9zL3Rlc3QuYyB0ZXN0cHJvZi90b21jcnlwdF9wcm9mLmxpYiB0b21jcnlwdC5saWIgYWR2YXBpMzIubGliICQoRVhUUkFMSUJTKQorCit0aW1pbmc6IGRlbW9zL3RpbWluZy5jIGxpYnJhcnkKKwljbCAkKENGTEFHUykgZGVtb3MvdGltaW5nLmMgdGVzdHByb2YvdG9tY3J5cHRfcHJvZi5saWIgdG9tY3J5cHQubGliIGFkdmFwaTMyLmxpYiAkKEVYVFJBTElCUykKKworIyAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9tYWtlZmlsZS5tc3ZjLHYgJCAgIAorIyAkUmV2aXNpb246IDEuNTEgJCAgIAorIyAkRGF0ZTogMjAwNi8xMi8wMiAxOToyMzoyMSAkIApkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvbWFrZWZpbGUuc2hhcmVkIGIvbGlidG9tY3J5cHQvbWFrZWZpbGUuc2hhcmVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NmFiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9tYWtlZmlsZS5zaGFyZWQKQEAgLTAsMCArMSwyNzkgQEAKKyMgTUFLRUZJTEUgZm9yIGxpbnV4IEdDQworIworIyBUaGlzIG1ha2VmaWxlIHByb2R1Y2VzIGEgc2hhcmVkIG9iamVjdCBhbmQgcmVxdWlyZXMgbGlidG9vbCB0byBiZSBpbnN0YWxsZWQuCisjCisjIFRoYW5rcyB0byBaZWQgU2hhdyBmb3IgaGVscGluZyBkZWJ1ZyB0aGlzIG9uIEJTRC9PU1guICAKKyMgVG9tIFN0IERlbmlzCisKKyMgVGhlIHZlcnNpb24KK1ZFUlNJT049MDoxMTYKKworIyBDb21waWxlciBhbmQgTGlua2VyIE5hbWVzCitDQz1saWJ0b29sIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDIGdjYyAKKworIyByYW5saWIgdG9vbHMKK2lmbmRlZiBSQU5MSUIKKyAgIFJBTkxJQj1yYW5saWIKK2VuZGlmCisKKyMgQ29tcGlsYXRpb24gZmxhZ3MuIE5vdGUgdGhlICs9IGRvZXMgbm90IHdyaXRlIG92ZXIgdGhlIHVzZXIncyBDRkxBR1MhCitDRkxBR1MgKz0gLWMgLUkuL3NyYy9oZWFkZXJzLyAtV2FsbCAtV3NpZ24tY29tcGFyZSAtVyAtV3NoYWRvdyAtRExUQ19TT1VSQ0UKKworIyBhZGRpdGlvbmFsIHdhcm5pbmdzIChuZXdlciBHQ0MgMy40IGFuZCBoaWdoZXIpCitpZmRlZiBHQ0NfMzQKK0NGTEFHUyArPSAtV3N5c3RlbS1oZWFkZXJzIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IC1XYmFkLWZ1bmN0aW9uLWNhc3QgLVdjYXN0LWFsaWduIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMgXAorCQkJIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgLVdwb2ludGVyLWFyaXRoIAorZW5kaWYKKworCitpZm5kZWYgSUdOT1JFX1NQRUVECisKKyMgb3B0aW1pemUgZm9yIFNQRUVECitDRkxBR1MgKz0gLU8zIC1mdW5yb2xsLWxvb3BzCisKKyMgYWRkIC1mb21pdC1mcmFtZS1wb2ludGVyLiAgaGluZGVycyBkZWJ1Z2dpbmchCitDRkxBR1MgKz0gLWZvbWl0LWZyYW1lLXBvaW50ZXIKKworIyBvcHRpbWl6ZSBmb3IgU0laRQorI0NGTEFHUyArPSAtT3MgLURMVENfU01BTExfQ09ERQorCitlbmRpZgorCisjIGNvbXBpbGUgZm9yIERFQlVHSU5HIChyZXF1aXJlZCBmb3IgY2NtYWxsb2MgY2hlY2tpbmchISEpCisjQ0ZMQUdTICs9IC1nMworCisjIG9sZGVyIEdDQ3MgY2FuJ3QgaGFuZGxlIHRoZSAicm90YXRlIHdpdGggaW1tZWRpYXRlIiBST0xjL1JPUmMvZXRjIG1hY3JvcworIyBkZWZpbmUgdGhpcyB0byBoZWxwCisjQ0ZMQUdTICs9IC1ETFRDX05PX1JPTEMKKworI091dHB1dCBmaWxlbmFtZXMgZm9yIHZhcmlvdXMgdGFyZ2V0cy4KK2lmbmRlZiBMSUJURVNUX1MKKyAgIExJQlRFU1RfUz1saWJ0b21jcnlwdF9wcm9mLmEKK2VuZGlmCitpZm5kZWYgTElCVEVTVAorICAgTElCVEVTVD1saWJ0b21jcnlwdF9wcm9mLmxhCitlbmRpZgoraWZuZGVmIExJQk5BTUUKKyAgIExJQk5BTUU9bGlidG9tY3J5cHQubGEKK2VuZGlmCitpZm5kZWYgTElCTkFNRV9TCisgICBMSUJOQU1FX1M9bGlidG9tY3J5cHQuYQorZW5kaWYKKworSEFTSD1oYXNoc3VtCitDUllQVD1lbmNyeXB0CitTTUFMTD1zbWFsbAorUFJPRj14ODZfcHJvZgorVFY9dHZfZ2VuCitURVNUPXRlc3QKK1RJTUlORz10aW1pbmcKKworI0xJQlBBVEgtVGhlIGRpcmVjdG9yeSBmb3IgbGlidG9tY3J5cHQgdG8gYmUgaW5zdGFsbGVkIHRvLgorI0lOQ1BBVEgtVGhlIGRpcmVjdG9yeSB0byBpbnN0YWxsIHRoZSBoZWFkZXIgZmlsZXMgZm9yIGxpYnRvbWNyeXB0LgorI0RBVEFQQVRILVRoZSBkaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgcGRmIGRvY3MuCitpZm5kZWYgREVTVERJUgorICAgREVTVERJUj0KK2VuZGlmCitpZm5kZWYgTElCUEFUSAorICAgTElCUEFUSD0vdXNyL2xpYgorZW5kaWYKK2lmbmRlZiBJTkNQQVRICisgICBJTkNQQVRIPS91c3IvaW5jbHVkZQorZW5kaWYKK2lmbmRlZiBEQVRBUEFUSAorICAgREFUQVBBVEg9L3Vzci9zaGFyZS9kb2MvbGlidG9tY3J5cHQvcGRmCitlbmRpZgorCisjV2hvIGRvIHdlIGluc3RhbGwgYXM/CitpZmRlZiBJTlNUQUxMX1VTRVIKK1VTRVI9JChJTlNUQUxMX1VTRVIpCitlbHNlCitVU0VSPXJvb3QKK2VuZGlmCisKK2lmZGVmIElOU1RBTExfR1JPVVAKK0dST1VQPSQoSU5TVEFMTF9HUk9VUCkgICAKK2Vsc2UKK0dST1VQPXdoZWVsICAKK2VuZGlmCisKKyNMaXN0IG9mIG9iamVjdHMgdG8gY29tcGlsZS4KKyNTVEFSVF9JTlMKK09CSkVDVFM9c3JjL2NpcGhlcnMvYWVzL2Flc19lbmMubyBzcmMvY2lwaGVycy9hZXMvYWVzLm8gc3JjL2NpcGhlcnMvYW51YmlzLm8gc3JjL2NpcGhlcnMvYmxvd2Zpc2gubyBcCitzcmMvY2lwaGVycy9jYXN0NS5vIHNyYy9jaXBoZXJzL2Rlcy5vIHNyYy9jaXBoZXJzL2thc3VtaS5vIHNyYy9jaXBoZXJzL2toYXphZC5vIHNyYy9jaXBoZXJzL2tzZWVkLm8gXAorc3JjL2NpcGhlcnMvbm9la2Vvbi5vIHNyYy9jaXBoZXJzL3JjMi5vIHNyYy9jaXBoZXJzL3JjNS5vIHNyYy9jaXBoZXJzL3JjNi5vIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVyLm8gXAorc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXJfdGFiLm8gc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXJwLm8gc3JjL2NpcGhlcnMvc2tpcGphY2subyBcCitzcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2gubyBzcmMvY2lwaGVycy94dGVhLm8gc3JjL2VuY2F1dGgvY2NtL2NjbV9tZW1vcnkubyBcCitzcmMvZW5jYXV0aC9jY20vY2NtX3Rlc3QubyBzcmMvZW5jYXV0aC9lYXgvZWF4X2FkZGhlYWRlci5vIHNyYy9lbmNhdXRoL2VheC9lYXhfZGVjcnlwdC5vIFwKK3NyYy9lbmNhdXRoL2VheC9lYXhfZGVjcnlwdF92ZXJpZnlfbWVtb3J5Lm8gc3JjL2VuY2F1dGgvZWF4L2VheF9kb25lLm8gc3JjL2VuY2F1dGgvZWF4L2VheF9lbmNyeXB0Lm8gXAorc3JjL2VuY2F1dGgvZWF4L2VheF9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkubyBzcmMvZW5jYXV0aC9lYXgvZWF4X2luaXQubyBcCitzcmMvZW5jYXV0aC9lYXgvZWF4X3Rlc3QubyBzcmMvZW5jYXV0aC9nY20vZ2NtX2FkZF9hYWQubyBzcmMvZW5jYXV0aC9nY20vZ2NtX2FkZF9pdi5vIFwKK3NyYy9lbmNhdXRoL2djbS9nY21fZG9uZS5vIHNyYy9lbmNhdXRoL2djbS9nY21fZ2ZfbXVsdC5vIHNyYy9lbmNhdXRoL2djbS9nY21faW5pdC5vIFwKK3NyYy9lbmNhdXRoL2djbS9nY21fbWVtb3J5Lm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9tdWx0X2gubyBzcmMvZW5jYXV0aC9nY20vZ2NtX3Byb2Nlc3MubyBcCitzcmMvZW5jYXV0aC9nY20vZ2NtX3Jlc2V0Lm8gc3JjL2VuY2F1dGgvZ2NtL2djbV90ZXN0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0Lm8gXAorc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZGVjcnlwdC5vIFwKK3NyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9lbmNyeXB0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0Lm8gXAorc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX2luaXQubyBzcmMvZW5jYXV0aC9vY2Ivb2NiX250ei5vIFwKK3NyYy9lbmNhdXRoL29jYi9vY2Jfc2hpZnRfeG9yLm8gc3JjL2VuY2F1dGgvb2NiL29jYl90ZXN0Lm8gc3JjL2VuY2F1dGgvb2NiL3Nfb2NiX2RvbmUubyBcCitzcmMvaGFzaGVzL2NoYy9jaGMubyBzcmMvaGFzaGVzL2hlbHBlci9oYXNoX2ZpbGUubyBzcmMvaGFzaGVzL2hlbHBlci9oYXNoX2ZpbGVoYW5kbGUubyBcCitzcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeS5vIHNyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5X211bHRpLm8gc3JjL2hhc2hlcy9tZDIubyBzcmMvaGFzaGVzL21kNC5vIFwKK3NyYy9oYXNoZXMvbWQ1Lm8gc3JjL2hhc2hlcy9ybWQxMjgubyBzcmMvaGFzaGVzL3JtZDE2MC5vIHNyYy9oYXNoZXMvcm1kMjU2Lm8gc3JjL2hhc2hlcy9ybWQzMjAubyBcCitzcmMvaGFzaGVzL3NoYTEubyBzcmMvaGFzaGVzL3NoYTIvc2hhMjU2Lm8gc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5vIHNyYy9oYXNoZXMvdGlnZXIubyBcCitzcmMvaGFzaGVzL3doaXJsL3doaXJsLm8gc3JjL21hYy9mOS9mOV9kb25lLm8gc3JjL21hYy9mOS9mOV9maWxlLm8gc3JjL21hYy9mOS9mOV9pbml0Lm8gXAorc3JjL21hYy9mOS9mOV9tZW1vcnkubyBzcmMvbWFjL2Y5L2Y5X21lbW9yeV9tdWx0aS5vIHNyYy9tYWMvZjkvZjlfcHJvY2Vzcy5vIHNyYy9tYWMvZjkvZjlfdGVzdC5vIFwKK3NyYy9tYWMvaG1hYy9obWFjX2RvbmUubyBzcmMvbWFjL2htYWMvaG1hY19maWxlLm8gc3JjL21hYy9obWFjL2htYWNfaW5pdC5vIHNyYy9tYWMvaG1hYy9obWFjX21lbW9yeS5vIFwKK3NyYy9tYWMvaG1hYy9obWFjX21lbW9yeV9tdWx0aS5vIHNyYy9tYWMvaG1hYy9obWFjX3Byb2Nlc3MubyBzcmMvbWFjL2htYWMvaG1hY190ZXN0Lm8gXAorc3JjL21hYy9vbWFjL29tYWNfZG9uZS5vIHNyYy9tYWMvb21hYy9vbWFjX2ZpbGUubyBzcmMvbWFjL29tYWMvb21hY19pbml0Lm8gc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5Lm8gXAorc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5X211bHRpLm8gc3JjL21hYy9vbWFjL29tYWNfcHJvY2Vzcy5vIHNyYy9tYWMvb21hYy9vbWFjX3Rlc3QubyBcCitzcmMvbWFjL3BlbGljYW4vcGVsaWNhbi5vIHNyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX21lbW9yeS5vIHNyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX3Rlc3QubyBcCitzcmMvbWFjL3BtYWMvcG1hY19kb25lLm8gc3JjL21hYy9wbWFjL3BtYWNfZmlsZS5vIHNyYy9tYWMvcG1hYy9wbWFjX2luaXQubyBzcmMvbWFjL3BtYWMvcG1hY19tZW1vcnkubyBcCitzcmMvbWFjL3BtYWMvcG1hY19tZW1vcnlfbXVsdGkubyBzcmMvbWFjL3BtYWMvcG1hY19udHoubyBzcmMvbWFjL3BtYWMvcG1hY19wcm9jZXNzLm8gXAorc3JjL21hYy9wbWFjL3BtYWNfc2hpZnRfeG9yLm8gc3JjL21hYy9wbWFjL3BtYWNfdGVzdC5vIHNyYy9tYWMveGNiYy94Y2JjX2RvbmUubyBcCitzcmMvbWFjL3hjYmMveGNiY19maWxlLm8gc3JjL21hYy94Y2JjL3hjYmNfaW5pdC5vIHNyYy9tYWMveGNiYy94Y2JjX21lbW9yeS5vIFwKK3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeV9tdWx0aS5vIHNyYy9tYWMveGNiYy94Y2JjX3Byb2Nlc3MubyBzcmMvbWFjL3hjYmMveGNiY190ZXN0Lm8gXAorc3JjL21hdGgvZnAvbHRjX2VjY19mcF9tdWxtb2QubyBzcmMvbWF0aC9nbXBfZGVzYy5vIHNyYy9tYXRoL2x0bV9kZXNjLm8gc3JjL21hdGgvbXVsdGkubyBcCitzcmMvbWF0aC9yYW5kX3ByaW1lLm8gc3JjL21hdGgvdGZtX2Rlc2MubyBzcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2RlY29kZS5vIFwKK3NyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZW5jb2RlLm8gc3JjL21pc2MvYnVybl9zdGFjay5vIHNyYy9taXNjL2NyeXB0L2NyeXB0Lm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfYXJnY2hrLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfY2lwaGVyX2Rlc2NyaXB0b3IubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfaXNfdmFsaWQubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlci5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2FueS5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2lkLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2FueS5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9pZC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9vaWQubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX3BybmcubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9mc2EubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2Rlc2NyaXB0b3IubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2lzX3ZhbGlkLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfbHRjX21wX2Rlc2NyaXB0b3IubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9wcm5nX2Rlc2NyaXB0b3IubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9wcm5nX2lzX3ZhbGlkLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfY2lwaGVyLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfaGFzaC5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX3BybmcubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2NpcGhlci5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfaGFzaC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfcHJuZy5vIFwKK3NyYy9taXNjL2Vycm9yX3RvX3N0cmluZy5vIHNyYy9taXNjL3BrY3M1L3BrY3NfNV8xLm8gc3JjL21pc2MvcGtjczUvcGtjc181XzIubyBzcmMvbWlzYy96ZXJvbWVtLm8gXAorc3JjL21vZGVzL2NiYy9jYmNfZGVjcnlwdC5vIHNyYy9tb2Rlcy9jYmMvY2JjX2RvbmUubyBzcmMvbW9kZXMvY2JjL2NiY19lbmNyeXB0Lm8gXAorc3JjL21vZGVzL2NiYy9jYmNfZ2V0aXYubyBzcmMvbW9kZXMvY2JjL2NiY19zZXRpdi5vIHNyYy9tb2Rlcy9jYmMvY2JjX3N0YXJ0Lm8gXAorc3JjL21vZGVzL2NmYi9jZmJfZGVjcnlwdC5vIHNyYy9tb2Rlcy9jZmIvY2ZiX2RvbmUubyBzcmMvbW9kZXMvY2ZiL2NmYl9lbmNyeXB0Lm8gXAorc3JjL21vZGVzL2NmYi9jZmJfZ2V0aXYubyBzcmMvbW9kZXMvY2ZiL2NmYl9zZXRpdi5vIHNyYy9tb2Rlcy9jZmIvY2ZiX3N0YXJ0Lm8gXAorc3JjL21vZGVzL2N0ci9jdHJfZGVjcnlwdC5vIHNyYy9tb2Rlcy9jdHIvY3RyX2RvbmUubyBzcmMvbW9kZXMvY3RyL2N0cl9lbmNyeXB0Lm8gXAorc3JjL21vZGVzL2N0ci9jdHJfZ2V0aXYubyBzcmMvbW9kZXMvY3RyL2N0cl9zZXRpdi5vIHNyYy9tb2Rlcy9jdHIvY3RyX3N0YXJ0Lm8gc3JjL21vZGVzL2N0ci9jdHJfdGVzdC5vIFwKK3NyYy9tb2Rlcy9lY2IvZWNiX2RlY3J5cHQubyBzcmMvbW9kZXMvZWNiL2VjYl9kb25lLm8gc3JjL21vZGVzL2VjYi9lY2JfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9lY2IvZWNiX3N0YXJ0Lm8gc3JjL21vZGVzL2Y4L2Y4X2RlY3J5cHQubyBzcmMvbW9kZXMvZjgvZjhfZG9uZS5vIHNyYy9tb2Rlcy9mOC9mOF9lbmNyeXB0Lm8gXAorc3JjL21vZGVzL2Y4L2Y4X2dldGl2Lm8gc3JjL21vZGVzL2Y4L2Y4X3NldGl2Lm8gc3JjL21vZGVzL2Y4L2Y4X3N0YXJ0Lm8gc3JjL21vZGVzL2Y4L2Y4X3Rlc3RfbW9kZS5vIFwKK3NyYy9tb2Rlcy9scncvbHJ3X2RlY3J5cHQubyBzcmMvbW9kZXMvbHJ3L2xyd19kb25lLm8gc3JjL21vZGVzL2xydy9scndfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9scncvbHJ3X2dldGl2Lm8gc3JjL21vZGVzL2xydy9scndfcHJvY2Vzcy5vIHNyYy9tb2Rlcy9scncvbHJ3X3NldGl2Lm8gXAorc3JjL21vZGVzL2xydy9scndfc3RhcnQubyBzcmMvbW9kZXMvbHJ3L2xyd190ZXN0Lm8gc3JjL21vZGVzL29mYi9vZmJfZGVjcnlwdC5vIHNyYy9tb2Rlcy9vZmIvb2ZiX2RvbmUubyBcCitzcmMvbW9kZXMvb2ZiL29mYl9lbmNyeXB0Lm8gc3JjL21vZGVzL29mYi9vZmJfZ2V0aXYubyBzcmMvbW9kZXMvb2ZiL29mYl9zZXRpdi5vIFwKK3NyYy9tb2Rlcy9vZmIvb2ZiX3N0YXJ0Lm8gc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZGVjb2RlX2JpdF9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9lbmNvZGVfYml0X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci9iaXQvZGVyX2xlbmd0aF9iaXRfc3RyaW5nLm8gXAorc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2RlY29kZV9ib29sZWFuLm8gc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2VuY29kZV9ib29sZWFuLm8gXAorc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2xlbmd0aF9ib29sZWFuLm8gc3JjL3BrL2FzbjEvZGVyL2Nob2ljZS9kZXJfZGVjb2RlX2Nob2ljZS5vIFwKK3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2RlY29kZV9pYTVfc3RyaW5nLm8gc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZW5jb2RlX2lhNV9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9sZW5ndGhfaWE1X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9kZWNvZGVfaW50ZWdlci5vIFwKK3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9lbmNvZGVfaW50ZWdlci5vIHNyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9sZW5ndGhfaW50ZWdlci5vIFwKK3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfZGVjb2RlX29iamVjdF9pZGVudGlmaWVyLm8gXAorc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9lbmNvZGVfb2JqZWN0X2lkZW50aWZpZXIubyBcCitzcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2xlbmd0aF9vYmplY3RfaWRlbnRpZmllci5vIFwKK3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfZGVjb2RlX29jdGV0X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci9vY3RldC9kZXJfZW5jb2RlX29jdGV0X3N0cmluZy5vIFwKK3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfbGVuZ3RoX29jdGV0X3N0cmluZy5vIFwKK3NyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9kZWNvZGVfcHJpbnRhYmxlX3N0cmluZy5vIFwKK3NyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZy5vIFwKK3NyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9sZW5ndGhfcHJpbnRhYmxlX3N0cmluZy5vIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX2V4Lm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfZmxleGkubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aS5vIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlX2V4Lm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkubyBzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2xlbmd0aF9zZXF1ZW5jZS5vIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfc2VxdWVuY2VfZnJlZS5vIHNyYy9way9hc24xL2Rlci9zZXQvZGVyX2VuY29kZV9zZXQubyBcCitzcmMvcGsvYXNuMS9kZXIvc2V0L2Rlcl9lbmNvZGVfc2V0b2YubyBzcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfZGVjb2RlX3Nob3J0X2ludGVnZXIubyBcCitzcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfZW5jb2RlX3Nob3J0X2ludGVnZXIubyBcCitzcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfbGVuZ3RoX3Nob3J0X2ludGVnZXIubyBzcmMvcGsvYXNuMS9kZXIvdXRjdGltZS9kZXJfZGVjb2RlX3V0Y3RpbWUubyBcCitzcmMvcGsvYXNuMS9kZXIvdXRjdGltZS9kZXJfZW5jb2RlX3V0Y3RpbWUubyBzcmMvcGsvYXNuMS9kZXIvdXRjdGltZS9kZXJfbGVuZ3RoX3V0Y3RpbWUubyBcCitzcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfZGVjb2RlX3V0Zjhfc3RyaW5nLm8gc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2VuY29kZV91dGY4X3N0cmluZy5vIFwKK3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9sZW5ndGhfdXRmOF9zdHJpbmcubyBzcmMvcGsvZHNhL2RzYV9kZWNyeXB0X2tleS5vIFwKK3NyYy9way9kc2EvZHNhX2VuY3J5cHRfa2V5Lm8gc3JjL3BrL2RzYS9kc2FfZXhwb3J0Lm8gc3JjL3BrL2RzYS9kc2FfZnJlZS5vIHNyYy9way9kc2EvZHNhX2ltcG9ydC5vIFwKK3NyYy9way9kc2EvZHNhX21ha2Vfa2V5Lm8gc3JjL3BrL2RzYS9kc2Ffc2hhcmVkX3NlY3JldC5vIHNyYy9way9kc2EvZHNhX3NpZ25faGFzaC5vIFwKK3NyYy9way9kc2EvZHNhX3ZlcmlmeV9oYXNoLm8gc3JjL3BrL2RzYS9kc2FfdmVyaWZ5X2tleS5vIHNyYy9way9lY2MvZWNjLm8gXAorc3JjL3BrL2VjYy9lY2NfYW5zaV94OTYzX2V4cG9ydC5vIHNyYy9way9lY2MvZWNjX2Fuc2lfeDk2M19pbXBvcnQubyBzcmMvcGsvZWNjL2VjY19kZWNyeXB0X2tleS5vIFwKK3NyYy9way9lY2MvZWNjX2VuY3J5cHRfa2V5Lm8gc3JjL3BrL2VjYy9lY2NfZXhwb3J0Lm8gc3JjL3BrL2VjYy9lY2NfZnJlZS5vIHNyYy9way9lY2MvZWNjX2dldF9zaXplLm8gXAorc3JjL3BrL2VjYy9lY2NfaW1wb3J0Lm8gc3JjL3BrL2VjYy9lY2NfbWFrZV9rZXkubyBzcmMvcGsvZWNjL2VjY19zaGFyZWRfc2VjcmV0Lm8gXAorc3JjL3BrL2VjYy9lY2Nfc2lnbl9oYXNoLm8gc3JjL3BrL2VjYy9lY2Nfc2l6ZXMubyBzcmMvcGsvZWNjL2VjY190ZXN0Lm8gc3JjL3BrL2VjYy9lY2NfdmVyaWZ5X2hhc2gubyBcCitzcmMvcGsvZWNjL2x0Y19lY2NfaXNfdmFsaWRfaWR4Lm8gc3JjL3BrL2VjYy9sdGNfZWNjX21hcC5vIHNyYy9way9lY2MvbHRjX2VjY19tdWwyYWRkLm8gXAorc3JjL3BrL2VjYy9sdGNfZWNjX211bG1vZC5vIHNyYy9way9lY2MvbHRjX2VjY19tdWxtb2RfdGltaW5nLm8gc3JjL3BrL2VjYy9sdGNfZWNjX3BvaW50cy5vIFwKK3NyYy9way9lY2MvbHRjX2VjY19wcm9qZWN0aXZlX2FkZF9wb2ludC5vIHNyYy9way9lY2MvbHRjX2VjY19wcm9qZWN0aXZlX2RibF9wb2ludC5vIFwKK3NyYy9way9rYXRqYS9rYXRqYV9kZWNyeXB0X2tleS5vIHNyYy9way9rYXRqYS9rYXRqYV9lbmNyeXB0X2tleS5vIHNyYy9way9rYXRqYS9rYXRqYV9leHBvcnQubyBcCitzcmMvcGsva2F0amEva2F0amFfZXhwdG1vZC5vIHNyYy9way9rYXRqYS9rYXRqYV9mcmVlLm8gc3JjL3BrL2thdGphL2thdGphX2ltcG9ydC5vIFwKK3NyYy9way9rYXRqYS9rYXRqYV9tYWtlX2tleS5vIHNyYy9way9wa2NzMS9wa2NzXzFfaTJvc3AubyBzcmMvcGsvcGtjczEvcGtjc18xX21nZjEubyBcCitzcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZGVjb2RlLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2VuY29kZS5vIHNyYy9way9wa2NzMS9wa2NzXzFfb3MyaXAubyBcCitzcmMvcGsvcGtjczEvcGtjc18xX3Bzc19kZWNvZGUubyBzcmMvcGsvcGtjczEvcGtjc18xX3Bzc19lbmNvZGUubyBzcmMvcGsvcGtjczEvcGtjc18xX3YxXzVfZGVjb2RlLm8gXAorc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2VuY29kZS5vIHNyYy9way9yc2EvcnNhX2RlY3J5cHRfa2V5Lm8gc3JjL3BrL3JzYS9yc2FfZW5jcnlwdF9rZXkubyBcCitzcmMvcGsvcnNhL3JzYV9leHBvcnQubyBzcmMvcGsvcnNhL3JzYV9leHB0bW9kLm8gc3JjL3BrL3JzYS9yc2FfZnJlZS5vIHNyYy9way9yc2EvcnNhX2ltcG9ydC5vIFwKK3NyYy9way9yc2EvcnNhX21ha2Vfa2V5Lm8gc3JjL3BrL3JzYS9yc2Ffc2lnbl9oYXNoLm8gc3JjL3BrL3JzYS9yc2FfdmVyaWZ5X2hhc2gubyBzcmMvcHJuZ3MvZm9ydHVuYS5vIFwKK3NyYy9wcm5ncy9yYzQubyBzcmMvcHJuZ3Mvcm5nX2dldF9ieXRlcy5vIHNyYy9wcm5ncy9ybmdfbWFrZV9wcm5nLm8gc3JjL3BybmdzL3NvYmVyMTI4Lm8gXAorc3JjL3BybmdzL3Nwcm5nLm8gc3JjL3BybmdzL3lhcnJvdy5vIAorCitIRUFERVJTPXNyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21hYy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21hY3Jvcy5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X2N1c3RvbS5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2FyZ2Noay5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2NpcGhlci5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BrLmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfaGFzaC5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X21hdGguaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9taXNjLmggc3JjL2hlYWRlcnMvdG9tY3J5cHQuaCBzcmMvaGVhZGVycy90b21jcnlwdF9wa2NzLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfcHJuZy5oIHRlc3Rwcm9mL3RvbWNyeXB0X3Rlc3QuaAorCisjRU5EX0lOUworCitURVNUT0JKRUNUUz1kZW1vcy90ZXN0Lm8KK0hBU0hPQkpFQ1RTPWRlbW9zL2hhc2hzdW0ubworQ1JZUFRPQkpFQ1RTPWRlbW9zL2VuY3J5cHQubworU01BTExPQkpFQ1RTPWRlbW9zL3NtYWxsLm8KK1RWUz1kZW1vcy90dl9nZW4ubworVEVTVFM9ZGVtb3MvdGVzdC5vCitUSU1JTkdTPWRlbW9zL3RpbWluZy5vCisKKyNUaGUgZGVmYXVsdCBydWxlIGZvciBtYWtlIGJ1aWxkcyB0aGUgbGlidG9tY3J5cHQgbGlicmFyeS4KK2RlZmF1bHQ6bGlicmFyeQorCisjY2lwaGVycyBjb21lIGluIHR3byBmbGF2b3Vycy4uLiBlbmMrZGVjIGFuZCBlbmMgCitzcmMvY2lwaGVycy9hZXMvYWVzX2VuYy5vOiBzcmMvY2lwaGVycy9hZXMvYWVzLmMgc3JjL2NpcGhlcnMvYWVzL2Flc190YWIuYworCSQoQ0MpICQoQ0ZMQUdTKSAtREVOQ1JZUFRfT05MWSAtYyBzcmMvY2lwaGVycy9hZXMvYWVzLmMgLW8gc3JjL2NpcGhlcnMvYWVzL2Flc19lbmMubworCisjVGhlc2UgYXJlIHRoZSBydWxlcyB0byBtYWtlIGNlcnRhaW4gb2JqZWN0IGZpbGVzLgorc3JjL2NpcGhlcnMvYWVzL2Flcy5vOiBzcmMvY2lwaGVycy9hZXMvYWVzLmMgc3JjL2NpcGhlcnMvYWVzL2Flc190YWIuYworc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoLm86IHNyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaC5jIHNyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaF90YWIuYworc3JjL2hhc2hlcy93aGlybC93aGlybC5vOiBzcmMvaGFzaGVzL3doaXJsL3doaXJsLmMgc3JjL2hhc2hlcy93aGlybC93aGlybHRhYi5jCitzcmMvaGFzaGVzL3NoYTIvc2hhNTEyLm86IHNyYy9oYXNoZXMvc2hhMi9zaGE1MTIuYyBzcmMvaGFzaGVzL3NoYTIvc2hhMzg0LmMKK3NyYy9oYXNoZXMvc2hhMi9zaGEyNTYubzogc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5jIHNyYy9oYXNoZXMvc2hhMi9zaGEyMjQuYworCisjVGhpcyBydWxlIG1ha2VzIHRoZSBsaWJ0b21jcnlwdCBsaWJyYXJ5LgorbGlicmFyeTogJChMSUJOQU1FKQorCit0ZXN0cHJvZi8kKExJQlRFU1QpOgorCWNkIHRlc3Rwcm9mIDsgQ0ZMQUdTPSIkKENGTEFHUykiIEdST1VQPSQoR1JPVVApIFVTRVI9JChVU0VSKSBWRVJTSU9OPSQoVkVSU0lPTikgTElCUEFUSD0kKExJQlBBVEgpIExJQlRFU1Q9JChMSUJURVNUKSBMSUJURVNUX1M9JChMSUJURVNUX1MpIG1ha2UgLWYgbWFrZWZpbGUuc2hhcmVkCisKK29ianM6ICQoT0JKRUNUUykKKworJChMSUJOQU1FKTogJChPQkpFQ1RTKSB0ZXN0cHJvZi8kKExJQlRFU1QpCisJbGlidG9vbCAtLXNpbGVudCAtLW1vZGU9bGluayBnY2MgJChDRkxBR1MpIGBmaW5kIC4gLXR5cGUgZiB8IGdyZXAgIlsuXWxvIiB8IGdyZXAgInNyYy8iIHwgeGFyZ3NgICQoRVhUUkFMSUJTKSAtbyAkKExJQk5BTUUpIC1ycGF0aCAkKExJQlBBVEgpIC12ZXJzaW9uLWluZm8gJChWRVJTSU9OKQorCitpbnN0YWxsOiAkKExJQk5BTUUpCisJaW5zdGFsbCAtZCAtZyAkKEdST1VQKSAtbyAkKFVTRVIpICQoREVTVERJUikkKExJQlBBVEgpCisJY2QgdGVzdHByb2YgOyBDRkxBR1M9IiQoQ0ZMQUdTKSIgR1JPVVA9JChHUk9VUCkgVVNFUj0kKFVTRVIpIFZFUlNJT049JChWRVJTSU9OKSBMSUJQQVRIPSQoTElCUEFUSCkgTElCVEVTVD0kKExJQlRFU1QpIExJQlRFU1RfUz0kKExJQlRFU1RfUykgREVTVERJUj0kKERFU1RESVIpIG1ha2UgLWYgbWFrZWZpbGUuc2hhcmVkIGluc3RhbGwKKwlsaWJ0b29sIC0tc2lsZW50IC0tbW9kZT1pbnN0YWxsIGluc3RhbGwgLWMgbGlidG9tY3J5cHQubGEgJChERVNURElSKSQoTElCUEFUSCkvbGlidG9tY3J5cHQubGEKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoSU5DUEFUSCkKKwlpbnN0YWxsIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChIRUFERVJTKSAkKERFU1RESVIpJChJTkNQQVRIKQorCisjVGhpcyBydWxlIG1ha2VzIHRoZSBoYXNoIHByb2dyYW0gaW5jbHVkZWQgd2l0aCBsaWJ0b21jcnlwdAoraGFzaHN1bTogbGlicmFyeQorCWdjYyAkKENGTEFHUykgZGVtb3MvaGFzaHN1bS5jIC1vIGhhc2hzdW0ubworCWdjYyAtbyBoYXNoc3VtIGhhc2hzdW0ubyAtbHRvbWNyeXB0ICQoRVhUUkFMSUJTKQorCisjbWFrZXMgdGhlIGNyeXB0IHByb2dyYW0KK2NyeXB0OiBsaWJyYXJ5IAorCWdjYyAkKENGTEFHUykgZGVtb3MvZW5jcnlwdC5jIC1vIGVuY3J5cHQubworCWdjYyAtbyBjcnlwdCBlbmNyeXB0Lm8gLWx0b21jcnlwdCAkKEVYVFJBTElCUykKKwordHZfZ2VuOiBsaWJyYXJ5ICQoVFZTKQorCWdjYyAtbyB0dl9nZW4gJChUVlMpIC1sdG9tY3J5cHQgJChFWFRSQUxJQlMpCisKK3Rlc3Q6IGxpYnJhcnkgdGVzdHByb2YvJChMSUJURVNUKSAkKFRFU1RTKQorCWdjYyAtbyAkKFRFU1QpICQoVEVTVFMpIC1sdG9tY3J5cHRfcHJvZiAtbHRvbWNyeXB0ICQoRVhUUkFMSUJTKQorCit0aW1pbmc6IGxpYnJhcnkgdGVzdHByb2YvJChMSUJURVNUKSAkKFRJTUlOR1MpCisJZ2NjIC1vICQoVElNSU5HKSAkKFRJTUlOR1MpIC1sdG9tY3J5cHRfcHJvZiAtbHRvbWNyeXB0ICQoRVhUUkFMSUJTKQorCisjICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L21ha2VmaWxlLnNoYXJlZCx2ICQgICAKKyMgJFJldmlzaW9uOiAxLjc2ICQgICAKKyMgJERhdGU6IDIwMDYvMTIvMDIgMTk6MjM6MjEgJCAKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L21ha2VmaWxlLnVuaXggYi9saWJ0b21jcnlwdC9tYWtlZmlsZS51bml4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZTBmZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9tYWtlZmlsZS51bml4CkBAIC0wLDAgKzEsMjM5IEBACisjIE1BS0VGSUxFIGZvciBic2QgbWFrZQorIworIyBUb20gU3QgRGVuaXMKKworIyBDb21waWxlciBhbmQgTGlua2VyIE5hbWVzCitDQz1jYworTEQ9bGQKKworIyBBcmNoaXZlciBbbWFrZXMgLmEgZmlsZXNdCitBUj1hcgorQVJGTEFHUz1yCisKKyMgQ29tcGlsYXRpb24gZmxhZ3MuIE5vdGUgdGhlICs9IGRvZXMgbm90IHdyaXRlIG92ZXIgdGhlIHVzZXIncyBDRkxBR1MhCitDRkxBR1MgPSAtYyAtSS4vdGVzdHByb2YvIC1JLi9zcmMvaGVhZGVycy8gLURMVENfU09VUkNFIC1PMiAke0NGTEFHU19PUFRTfSAtbyAkQAorCitMSUJOQU1FPWxpYnRvbWNyeXB0LmEKK0xJQlRFU1Q9bGlidG9tY3J5cHRfcHJvZi5hCitMSUJURVNUX1M9JChMSUJURVNUKQorCitIQVNIPWhhc2hzdW0KK0NSWVBUPWVuY3J5cHQKK1NNQUxMPXNtYWxsCitQUk9GPXg4Nl9wcm9mCitUVj10dl9nZW4KK01VTFRJPW11bHRpCitUSU1JTkc9dGltaW5nCitURVNUPXRlc3QKKworI0xJQlBBVEgtVGhlIGRpcmVjdG9yeSBmb3IgbGlidG9tY3J5cHQgdG8gYmUgaW5zdGFsbGVkIHRvLgorI0lOQ1BBVEgtVGhlIGRpcmVjdG9yeSB0byBpbnN0YWxsIHRoZSBoZWFkZXIgZmlsZXMgZm9yIGxpYnRvbWNyeXB0LgorI0RBVEFQQVRILVRoZSBkaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgcGRmIGRvY3MuCitMSUJQQVRIPS91c3IvbG9jYWwvbGliCitJTkNQQVRIPS91c3IvbG9jYWwvaW5jbHVkZQorREFUQVBBVEg9L3Vzci9sb2NhbC9zaGFyZS9kb2MvbGlidG9tY3J5cHQvcGRmCisKKyNXaG8gZG8gd2UgaW5zdGFsbCBhcz8KK1VTRVI9cm9vdAorCitHUk9VUD13aGVlbAorCisjTGlzdCBvZiBvYmplY3RzIHRvIGNvbXBpbGUuCisjU1RBUlRfSU5TCitPQkpFQ1RTPXNyYy9jaXBoZXJzL2Flcy9hZXNfZW5jLm8gc3JjL2NpcGhlcnMvYWVzL2Flcy5vIHNyYy9jaXBoZXJzL2FudWJpcy5vIHNyYy9jaXBoZXJzL2Jsb3dmaXNoLm8gXAorc3JjL2NpcGhlcnMvY2FzdDUubyBzcmMvY2lwaGVycy9kZXMubyBzcmMvY2lwaGVycy9rYXN1bWkubyBzcmMvY2lwaGVycy9raGF6YWQubyBzcmMvY2lwaGVycy9rc2VlZC5vIFwKK3NyYy9jaXBoZXJzL25vZWtlb24ubyBzcmMvY2lwaGVycy9yYzIubyBzcmMvY2lwaGVycy9yYzUubyBzcmMvY2lwaGVycy9yYzYubyBzcmMvY2lwaGVycy9zYWZlci9zYWZlci5vIFwKK3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVyX3RhYi5vIHNyYy9jaXBoZXJzL3NhZmVyL3NhZmVycC5vIHNyYy9jaXBoZXJzL3NraXBqYWNrLm8gXAorc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoLm8gc3JjL2NpcGhlcnMveHRlYS5vIHNyYy9lbmNhdXRoL2NjbS9jY21fbWVtb3J5Lm8gXAorc3JjL2VuY2F1dGgvY2NtL2NjbV90ZXN0Lm8gc3JjL2VuY2F1dGgvZWF4L2VheF9hZGRoZWFkZXIubyBzcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHQubyBcCitzcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5vIHNyYy9lbmNhdXRoL2VheC9lYXhfZG9uZS5vIHNyYy9lbmNhdXRoL2VheC9lYXhfZW5jcnlwdC5vIFwKK3NyYy9lbmNhdXRoL2VheC9lYXhfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5Lm8gc3JjL2VuY2F1dGgvZWF4L2VheF9pbml0Lm8gXAorc3JjL2VuY2F1dGgvZWF4L2VheF90ZXN0Lm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9hZGRfYWFkLm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9hZGRfaXYubyBcCitzcmMvZW5jYXV0aC9nY20vZ2NtX2RvbmUubyBzcmMvZW5jYXV0aC9nY20vZ2NtX2dmX211bHQubyBzcmMvZW5jYXV0aC9nY20vZ2NtX2luaXQubyBcCitzcmMvZW5jYXV0aC9nY20vZ2NtX21lbW9yeS5vIHNyYy9lbmNhdXRoL2djbS9nY21fbXVsdF9oLm8gc3JjL2VuY2F1dGgvZ2NtL2djbV9wcm9jZXNzLm8gXAorc3JjL2VuY2F1dGgvZ2NtL2djbV9yZXNldC5vIHNyYy9lbmNhdXRoL2djbS9nY21fdGVzdC5vIHNyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdC5vIFwKK3NyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdF92ZXJpZnlfbWVtb3J5Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2RlY3J5cHQubyBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZW5jcnlwdC5vIHNyYy9lbmNhdXRoL29jYi9vY2JfZW5jcnlwdC5vIFwKK3NyYy9lbmNhdXRoL29jYi9vY2JfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9pbml0Lm8gc3JjL2VuY2F1dGgvb2NiL29jYl9udHoubyBcCitzcmMvZW5jYXV0aC9vY2Ivb2NiX3NoaWZ0X3hvci5vIHNyYy9lbmNhdXRoL29jYi9vY2JfdGVzdC5vIHNyYy9lbmNhdXRoL29jYi9zX29jYl9kb25lLm8gXAorc3JjL2hhc2hlcy9jaGMvY2hjLm8gc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9maWxlLm8gc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9maWxlaGFuZGxlLm8gXAorc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9tZW1vcnkubyBzcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeV9tdWx0aS5vIHNyYy9oYXNoZXMvbWQyLm8gc3JjL2hhc2hlcy9tZDQubyBcCitzcmMvaGFzaGVzL21kNS5vIHNyYy9oYXNoZXMvcm1kMTI4Lm8gc3JjL2hhc2hlcy9ybWQxNjAubyBzcmMvaGFzaGVzL3JtZDI1Ni5vIHNyYy9oYXNoZXMvcm1kMzIwLm8gXAorc3JjL2hhc2hlcy9zaGExLm8gc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5vIHNyYy9oYXNoZXMvc2hhMi9zaGE1MTIubyBzcmMvaGFzaGVzL3RpZ2VyLm8gXAorc3JjL2hhc2hlcy93aGlybC93aGlybC5vIHNyYy9tYWMvZjkvZjlfZG9uZS5vIHNyYy9tYWMvZjkvZjlfZmlsZS5vIHNyYy9tYWMvZjkvZjlfaW5pdC5vIFwKK3NyYy9tYWMvZjkvZjlfbWVtb3J5Lm8gc3JjL21hYy9mOS9mOV9tZW1vcnlfbXVsdGkubyBzcmMvbWFjL2Y5L2Y5X3Byb2Nlc3MubyBzcmMvbWFjL2Y5L2Y5X3Rlc3QubyBcCitzcmMvbWFjL2htYWMvaG1hY19kb25lLm8gc3JjL21hYy9obWFjL2htYWNfZmlsZS5vIHNyYy9tYWMvaG1hYy9obWFjX2luaXQubyBzcmMvbWFjL2htYWMvaG1hY19tZW1vcnkubyBcCitzcmMvbWFjL2htYWMvaG1hY19tZW1vcnlfbXVsdGkubyBzcmMvbWFjL2htYWMvaG1hY19wcm9jZXNzLm8gc3JjL21hYy9obWFjL2htYWNfdGVzdC5vIFwKK3NyYy9tYWMvb21hYy9vbWFjX2RvbmUubyBzcmMvbWFjL29tYWMvb21hY19maWxlLm8gc3JjL21hYy9vbWFjL29tYWNfaW5pdC5vIHNyYy9tYWMvb21hYy9vbWFjX21lbW9yeS5vIFwKK3NyYy9tYWMvb21hYy9vbWFjX21lbW9yeV9tdWx0aS5vIHNyYy9tYWMvb21hYy9vbWFjX3Byb2Nlc3MubyBzcmMvbWFjL29tYWMvb21hY190ZXN0Lm8gXAorc3JjL21hYy9wZWxpY2FuL3BlbGljYW4ubyBzcmMvbWFjL3BlbGljYW4vcGVsaWNhbl9tZW1vcnkubyBzcmMvbWFjL3BlbGljYW4vcGVsaWNhbl90ZXN0Lm8gXAorc3JjL21hYy9wbWFjL3BtYWNfZG9uZS5vIHNyYy9tYWMvcG1hYy9wbWFjX2ZpbGUubyBzcmMvbWFjL3BtYWMvcG1hY19pbml0Lm8gc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5Lm8gXAorc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5X211bHRpLm8gc3JjL21hYy9wbWFjL3BtYWNfbnR6Lm8gc3JjL21hYy9wbWFjL3BtYWNfcHJvY2Vzcy5vIFwKK3NyYy9tYWMvcG1hYy9wbWFjX3NoaWZ0X3hvci5vIHNyYy9tYWMvcG1hYy9wbWFjX3Rlc3QubyBzcmMvbWFjL3hjYmMveGNiY19kb25lLm8gXAorc3JjL21hYy94Y2JjL3hjYmNfZmlsZS5vIHNyYy9tYWMveGNiYy94Y2JjX2luaXQubyBzcmMvbWFjL3hjYmMveGNiY19tZW1vcnkubyBcCitzcmMvbWFjL3hjYmMveGNiY19tZW1vcnlfbXVsdGkubyBzcmMvbWFjL3hjYmMveGNiY19wcm9jZXNzLm8gc3JjL21hYy94Y2JjL3hjYmNfdGVzdC5vIFwKK3NyYy9tYXRoL2ZwL2x0Y19lY2NfZnBfbXVsbW9kLm8gc3JjL21hdGgvZ21wX2Rlc2MubyBzcmMvbWF0aC9sdG1fZGVzYy5vIHNyYy9tYXRoL211bHRpLm8gXAorc3JjL21hdGgvcmFuZF9wcmltZS5vIHNyYy9tYXRoL3RmbV9kZXNjLm8gc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9kZWNvZGUubyBcCitzcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2VuY29kZS5vIHNyYy9taXNjL2J1cm5fc3RhY2subyBzcmMvbWlzYy9jcnlwdC9jcnlwdC5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2FyZ2Noay5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9kZXNjcmlwdG9yLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfY2lwaGVyX2lzX3ZhbGlkLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXIubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlcl9hbnkubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlcl9pZC5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9hbnkubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfaWQubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfb2lkLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9wcm5nLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfZnNhLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9kZXNjcmlwdG9yLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9pc192YWxpZC5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X2x0Y19tcF9kZXNjcmlwdG9yLm8gXAorc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19kZXNjcmlwdG9yLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19pc192YWxpZC5vIFwKK3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2NpcGhlci5vIHNyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2hhc2gubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9wcm5nLm8gc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9jaXBoZXIubyBcCitzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2hhc2gubyBzcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX3BybmcubyBcCitzcmMvbWlzYy9lcnJvcl90b19zdHJpbmcubyBzcmMvbWlzYy9wa2NzNS9wa2NzXzVfMS5vIHNyYy9taXNjL3BrY3M1L3BrY3NfNV8yLm8gc3JjL21pc2MvemVyb21lbS5vIFwKK3NyYy9tb2Rlcy9jYmMvY2JjX2RlY3J5cHQubyBzcmMvbW9kZXMvY2JjL2NiY19kb25lLm8gc3JjL21vZGVzL2NiYy9jYmNfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9jYmMvY2JjX2dldGl2Lm8gc3JjL21vZGVzL2NiYy9jYmNfc2V0aXYubyBzcmMvbW9kZXMvY2JjL2NiY19zdGFydC5vIFwKK3NyYy9tb2Rlcy9jZmIvY2ZiX2RlY3J5cHQubyBzcmMvbW9kZXMvY2ZiL2NmYl9kb25lLm8gc3JjL21vZGVzL2NmYi9jZmJfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9jZmIvY2ZiX2dldGl2Lm8gc3JjL21vZGVzL2NmYi9jZmJfc2V0aXYubyBzcmMvbW9kZXMvY2ZiL2NmYl9zdGFydC5vIFwKK3NyYy9tb2Rlcy9jdHIvY3RyX2RlY3J5cHQubyBzcmMvbW9kZXMvY3RyL2N0cl9kb25lLm8gc3JjL21vZGVzL2N0ci9jdHJfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9jdHIvY3RyX2dldGl2Lm8gc3JjL21vZGVzL2N0ci9jdHJfc2V0aXYubyBzcmMvbW9kZXMvY3RyL2N0cl9zdGFydC5vIHNyYy9tb2Rlcy9jdHIvY3RyX3Rlc3QubyBcCitzcmMvbW9kZXMvZWNiL2VjYl9kZWNyeXB0Lm8gc3JjL21vZGVzL2VjYi9lY2JfZG9uZS5vIHNyYy9tb2Rlcy9lY2IvZWNiX2VuY3J5cHQubyBcCitzcmMvbW9kZXMvZWNiL2VjYl9zdGFydC5vIHNyYy9tb2Rlcy9mOC9mOF9kZWNyeXB0Lm8gc3JjL21vZGVzL2Y4L2Y4X2RvbmUubyBzcmMvbW9kZXMvZjgvZjhfZW5jcnlwdC5vIFwKK3NyYy9tb2Rlcy9mOC9mOF9nZXRpdi5vIHNyYy9tb2Rlcy9mOC9mOF9zZXRpdi5vIHNyYy9tb2Rlcy9mOC9mOF9zdGFydC5vIHNyYy9tb2Rlcy9mOC9mOF90ZXN0X21vZGUubyBcCitzcmMvbW9kZXMvbHJ3L2xyd19kZWNyeXB0Lm8gc3JjL21vZGVzL2xydy9scndfZG9uZS5vIHNyYy9tb2Rlcy9scncvbHJ3X2VuY3J5cHQubyBcCitzcmMvbW9kZXMvbHJ3L2xyd19nZXRpdi5vIHNyYy9tb2Rlcy9scncvbHJ3X3Byb2Nlc3MubyBzcmMvbW9kZXMvbHJ3L2xyd19zZXRpdi5vIFwKK3NyYy9tb2Rlcy9scncvbHJ3X3N0YXJ0Lm8gc3JjL21vZGVzL2xydy9scndfdGVzdC5vIHNyYy9tb2Rlcy9vZmIvb2ZiX2RlY3J5cHQubyBzcmMvbW9kZXMvb2ZiL29mYl9kb25lLm8gXAorc3JjL21vZGVzL29mYi9vZmJfZW5jcnlwdC5vIHNyYy9tb2Rlcy9vZmIvb2ZiX2dldGl2Lm8gc3JjL21vZGVzL29mYi9vZmJfc2V0aXYubyBcCitzcmMvbW9kZXMvb2ZiL29mYl9zdGFydC5vIHNyYy9way9hc24xL2Rlci9iaXQvZGVyX2RlY29kZV9iaXRfc3RyaW5nLm8gXAorc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZW5jb2RlX2JpdF9zdHJpbmcubyBzcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9sZW5ndGhfYml0X3N0cmluZy5vIFwKK3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9kZWNvZGVfYm9vbGVhbi5vIHNyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9lbmNvZGVfYm9vbGVhbi5vIFwKK3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9sZW5ndGhfYm9vbGVhbi5vIHNyYy9way9hc24xL2Rlci9jaG9pY2UvZGVyX2RlY29kZV9jaG9pY2UubyBcCitzcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9kZWNvZGVfaWE1X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci9pYTUvZGVyX2VuY29kZV9pYTVfc3RyaW5nLm8gXAorc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfbGVuZ3RoX2lhNV9zdHJpbmcubyBzcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZGVjb2RlX2ludGVnZXIubyBcCitzcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZW5jb2RlX2ludGVnZXIubyBzcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfbGVuZ3RoX2ludGVnZXIubyBcCitzcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2RlY29kZV9vYmplY3RfaWRlbnRpZmllci5vIFwKK3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfZW5jb2RlX29iamVjdF9pZGVudGlmaWVyLm8gXAorc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9sZW5ndGhfb2JqZWN0X2lkZW50aWZpZXIubyBcCitzcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2RlY29kZV9vY3RldF9zdHJpbmcubyBzcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2VuY29kZV9vY3RldF9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2xlbmd0aF9vY3RldF9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZGVjb2RlX3ByaW50YWJsZV9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZW5jb2RlX3ByaW50YWJsZV9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9leC5vIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpLm8gXAorc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9leC5vIFwKK3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpLm8gc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9sZW5ndGhfc2VxdWVuY2UubyBcCitzcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX3NlcXVlbmNlX2ZyZWUubyBzcmMvcGsvYXNuMS9kZXIvc2V0L2Rlcl9lbmNvZGVfc2V0Lm8gXAorc3JjL3BrL2FzbjEvZGVyL3NldC9kZXJfZW5jb2RlX3NldG9mLm8gc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2RlY29kZV9zaG9ydF9pbnRlZ2VyLm8gXAorc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2VuY29kZV9zaG9ydF9pbnRlZ2VyLm8gXAorc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyLm8gc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2RlY29kZV91dGN0aW1lLm8gXAorc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2VuY29kZV91dGN0aW1lLm8gc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2xlbmd0aF91dGN0aW1lLm8gXAorc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2RlY29kZV91dGY4X3N0cmluZy5vIHNyYy9way9hc24xL2Rlci91dGY4L2Rlcl9lbmNvZGVfdXRmOF9zdHJpbmcubyBcCitzcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nLm8gc3JjL3BrL2RzYS9kc2FfZGVjcnlwdF9rZXkubyBcCitzcmMvcGsvZHNhL2RzYV9lbmNyeXB0X2tleS5vIHNyYy9way9kc2EvZHNhX2V4cG9ydC5vIHNyYy9way9kc2EvZHNhX2ZyZWUubyBzcmMvcGsvZHNhL2RzYV9pbXBvcnQubyBcCitzcmMvcGsvZHNhL2RzYV9tYWtlX2tleS5vIHNyYy9way9kc2EvZHNhX3NoYXJlZF9zZWNyZXQubyBzcmMvcGsvZHNhL2RzYV9zaWduX2hhc2gubyBcCitzcmMvcGsvZHNhL2RzYV92ZXJpZnlfaGFzaC5vIHNyYy9way9kc2EvZHNhX3ZlcmlmeV9rZXkubyBzcmMvcGsvZWNjL2VjYy5vIFwKK3NyYy9way9lY2MvZWNjX2Fuc2lfeDk2M19leHBvcnQubyBzcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfaW1wb3J0Lm8gc3JjL3BrL2VjYy9lY2NfZGVjcnlwdF9rZXkubyBcCitzcmMvcGsvZWNjL2VjY19lbmNyeXB0X2tleS5vIHNyYy9way9lY2MvZWNjX2V4cG9ydC5vIHNyYy9way9lY2MvZWNjX2ZyZWUubyBzcmMvcGsvZWNjL2VjY19nZXRfc2l6ZS5vIFwKK3NyYy9way9lY2MvZWNjX2ltcG9ydC5vIHNyYy9way9lY2MvZWNjX21ha2Vfa2V5Lm8gc3JjL3BrL2VjYy9lY2Nfc2hhcmVkX3NlY3JldC5vIFwKK3NyYy9way9lY2MvZWNjX3NpZ25faGFzaC5vIHNyYy9way9lY2MvZWNjX3NpemVzLm8gc3JjL3BrL2VjYy9lY2NfdGVzdC5vIHNyYy9way9lY2MvZWNjX3ZlcmlmeV9oYXNoLm8gXAorc3JjL3BrL2VjYy9sdGNfZWNjX2lzX3ZhbGlkX2lkeC5vIHNyYy9way9lY2MvbHRjX2VjY19tYXAubyBzcmMvcGsvZWNjL2x0Y19lY2NfbXVsMmFkZC5vIFwKK3NyYy9way9lY2MvbHRjX2VjY19tdWxtb2QubyBzcmMvcGsvZWNjL2x0Y19lY2NfbXVsbW9kX3RpbWluZy5vIHNyYy9way9lY2MvbHRjX2VjY19wb2ludHMubyBcCitzcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQubyBzcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQubyBcCitzcmMvcGsva2F0amEva2F0amFfZGVjcnlwdF9rZXkubyBzcmMvcGsva2F0amEva2F0amFfZW5jcnlwdF9rZXkubyBzcmMvcGsva2F0amEva2F0amFfZXhwb3J0Lm8gXAorc3JjL3BrL2thdGphL2thdGphX2V4cHRtb2QubyBzcmMvcGsva2F0amEva2F0amFfZnJlZS5vIHNyYy9way9rYXRqYS9rYXRqYV9pbXBvcnQubyBcCitzcmMvcGsva2F0amEva2F0amFfbWFrZV9rZXkubyBzcmMvcGsvcGtjczEvcGtjc18xX2kyb3NwLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9tZ2YxLm8gXAorc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2RlY29kZS5vIHNyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9lbmNvZGUubyBzcmMvcGsvcGtjczEvcGtjc18xX29zMmlwLm8gXAorc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZGVjb2RlLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZW5jb2RlLm8gc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2RlY29kZS5vIFwKK3NyYy9way9wa2NzMS9wa2NzXzFfdjFfNV9lbmNvZGUubyBzcmMvcGsvcnNhL3JzYV9kZWNyeXB0X2tleS5vIHNyYy9way9yc2EvcnNhX2VuY3J5cHRfa2V5Lm8gXAorc3JjL3BrL3JzYS9yc2FfZXhwb3J0Lm8gc3JjL3BrL3JzYS9yc2FfZXhwdG1vZC5vIHNyYy9way9yc2EvcnNhX2ZyZWUubyBzcmMvcGsvcnNhL3JzYV9pbXBvcnQubyBcCitzcmMvcGsvcnNhL3JzYV9tYWtlX2tleS5vIHNyYy9way9yc2EvcnNhX3NpZ25faGFzaC5vIHNyYy9way9yc2EvcnNhX3ZlcmlmeV9oYXNoLm8gc3JjL3BybmdzL2ZvcnR1bmEubyBcCitzcmMvcHJuZ3MvcmM0Lm8gc3JjL3BybmdzL3JuZ19nZXRfYnl0ZXMubyBzcmMvcHJuZ3Mvcm5nX21ha2VfcHJuZy5vIHNyYy9wcm5ncy9zb2JlcjEyOC5vIFwKK3NyYy9wcm5ncy9zcHJuZy5vIHNyYy9wcm5ncy95YXJyb3cubyAKKworSEVBREVSUz1zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYWMuaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYWNyb3MuaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9jdXN0b20uaCBzcmMvaGVhZGVycy90b21jcnlwdF9hcmdjaGsuaCBzcmMvaGVhZGVycy90b21jcnlwdF9jaXBoZXIuaCBcCitzcmMvaGVhZGVycy90b21jcnlwdF9way5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0X2hhc2guaCBzcmMvaGVhZGVycy90b21jcnlwdF9tYXRoLmggXAorc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWlzYy5oIHNyYy9oZWFkZXJzL3RvbWNyeXB0Lmggc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGtjcy5oIFwKK3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BybmcuaCB0ZXN0cHJvZi90b21jcnlwdF90ZXN0LmgKKworI0VORF9JTlMKKworVEVTVE9CSkVDVFM9ZGVtb3MvdGVzdC5vCitIQVNIT0JKRUNUUz1kZW1vcy9oYXNoc3VtLm8KK0NSWVBUT0JKRUNUUz1kZW1vcy9lbmNyeXB0Lm8KK1NNQUxMT0JKRUNUUz1kZW1vcy9zbWFsbC5vCitUVlM9ZGVtb3MvdHZfZ2VuLm8KK01VTFRJUz1kZW1vcy9tdWx0aS5vCitUSU1JTkdTPWRlbW9zL3RpbWluZy5vCitURVNUUz1kZW1vcy90ZXN0Lm8KKworI0ZpbGVzIGxlZnQgb3ZlciBmcm9tIG1ha2luZyB0aGUgY3J5cHQucGRmLgorTEVGVE9WRVJTPSouZHZpICoubG9nICouYXV4ICoudG9jICouaWR4ICouaWxnICouaW5kICoub3V0CisKKyNDb21wcmVzc2VkIGZpbGVuYW1lcworQ09NUFJFU1NFRD1jcnlwdC0kKFZFUlNJT04pLnRhci5iejIgY3J5cHQtJChWRVJTSU9OKS56aXAKKworI1RoZSBkZWZhdWx0IHJ1bGUgZm9yIG1ha2UgYnVpbGRzIHRoZSBsaWJ0b21jcnlwdCBsaWJyYXJ5LgorZGVmYXVsdDpsaWJyYXJ5CisKKyNjaXBoZXJzIGNvbWUgaW4gdHdvIGZsYXZvdXJzLi4uIGVuYytkZWMgYW5kIGVuYyAKK3NyYy9jaXBoZXJzL2Flcy9hZXNfZW5jLm86IHNyYy9jaXBoZXJzL2Flcy9hZXMuYyBzcmMvY2lwaGVycy9hZXMvYWVzX3RhYi5jCisJJChDQykgJChDRkxBR1MpIC1ERU5DUllQVF9PTkxZIC1jIHNyYy9jaXBoZXJzL2Flcy9hZXMuYyAtbyBzcmMvY2lwaGVycy9hZXMvYWVzX2VuYy5vCisKKyNUaGVzZSBhcmUgdGhlIHJ1bGVzIHRvIG1ha2UgY2VydGFpbiBvYmplY3QgZmlsZXMuCitzcmMvY2lwaGVycy9hZXMvYWVzLm86IHNyYy9jaXBoZXJzL2Flcy9hZXMuYyBzcmMvY2lwaGVycy9hZXMvYWVzX3RhYi5jCitzcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2gubzogc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoLmMgc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoX3RhYi5jCitzcmMvaGFzaGVzL3doaXJsL3doaXJsLm86IHNyYy9oYXNoZXMvd2hpcmwvd2hpcmwuYyBzcmMvaGFzaGVzL3doaXJsL3doaXJsdGFiLmMKK3NyYy9oYXNoZXMvc2hhMi9zaGE1MTIubzogc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5jIHNyYy9oYXNoZXMvc2hhMi9zaGEzODQuYworc3JjL2hhc2hlcy9zaGEyL3NoYTI1Ni5vOiBzcmMvaGFzaGVzL3NoYTIvc2hhMjU2LmMgc3JjL2hhc2hlcy9zaGEyL3NoYTIyNC5jCisKKyNUaGlzIHJ1bGUgbWFrZXMgdGhlIGxpYnRvbWNyeXB0IGxpYnJhcnkuCitsaWJyYXJ5OiAkKExJQk5BTUUpCisKK3Rlc3Rwcm9mLyQoTElCVEVTVCk6IAorCWNkIHRlc3Rwcm9mIDsgQ0ZMQUdTPSIkKENGTEFHUykiIExJQlRFU1RfUz0kKExJQlRFU1RfUykgJChNQUtFKSAKKworJChMSUJOQU1FKTogJChPQkpFQ1RTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpFQ1RTKQorCSQoUkFOTElCKSAkQAorCisjVGhpcyBydWxlIG1ha2VzIHRoZSBoYXNoIHByb2dyYW0gaW5jbHVkZWQgd2l0aCBsaWJ0b21jcnlwdAoraGFzaHN1bTogbGlicmFyeSAkKEhBU0hPQkpFQ1RTKQorCSQoQ0MpICQoSEFTSE9CSkVDVFMpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoSEFTSCkgJChXQVJOKQorCisjbWFrZXMgdGhlIGNyeXB0IHByb2dyYW0KK2NyeXB0OiBsaWJyYXJ5ICQoQ1JZUFRPQkpFQ1RTKQorCSQoQ0MpICQoQ1JZUFRPQkpFQ1RTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKENSWVBUKSAkKFdBUk4pCisKKyNtYWtlcyB0aGUgc21hbGwgcHJvZ3JhbQorc21hbGw6IGxpYnJhcnkgJChTTUFMTE9CSkVDVFMpCisJJChDQykgJChTTUFMTE9CSkVDVFMpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoU01BTEwpICQoV0FSTikKKwkKK3R2X2dlbjogbGlicmFyeSAkKFRWUykKKwkkKENDKSAkKExERkxBR1MpICQoVFZTKSAkKExJQk5BTUUpICQoRVhUUkFMSUJTKSAtbyAkKFRWKQorCittdWx0aTogbGlicmFyeSAkKE1VTFRJUykKKwkkKENDKSAkKE1VTFRJUykgJChMSUJOQU1FKSAkKEVYVFJBTElCUykgLW8gJChNVUxUSSkKKwordGltaW5nOiBsaWJyYXJ5IHRlc3Rwcm9mLyQoTElCVEVTVCkgJChUSU1JTkdTKQorCSQoQ0MpICQoTERGTEFHUykgJChUSU1JTkdTKSB0ZXN0cHJvZi8kKExJQlRFU1QpICQoTElCTkFNRSkgJChFWFRSQUxJQlMpIC1vICQoVElNSU5HKQorCit0ZXN0OiBsaWJyYXJ5IHRlc3Rwcm9mLyQoTElCVEVTVCkgJChURVNUUykKKwkkKENDKSAkKExERkxBR1MpICQoVEVTVFMpIHRlc3Rwcm9mLyQoTElCVEVTVCkgJChMSUJOQU1FKSAkKEVYVFJBTElCUykgLW8gJChURVNUKQorCisjVGhpcyBydWxlIGluc3RhbGxzIHRoZSBsaWJyYXJ5IGFuZCB0aGUgaGVhZGVyIGZpbGVzLiBUaGlzIG11c3QgYmUgcnVuCisjYXMgcm9vdCBpbiBvcmRlciB0byBoYXZlIGEgaGlnaCBlbm91Z2ggcGVybWlzc2lvbiB0byB3cml0ZSB0byB0aGUgY29ycmVjdAorI2RpcmVjdG9yaWVzIGFuZCB0byBzZXQgdGhlIG93bmVyIGFuZCBncm91cCB0byByb290LgoraW5zdGFsbDogbGlicmFyeQorCWluc3RhbGwgLWQgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKERFU1RESVIpJChMSUJQQVRIKQorCWluc3RhbGwgLWQgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKERFU1RESVIpJChJTkNQQVRIKQorCWluc3RhbGwgLWQgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKERFU1RESVIpJChEQVRBUEFUSCkKKwlpbnN0YWxsIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChMSUJOQU1FKSAkKERFU1RESVIpJChMSUJQQVRIKQorCWluc3RhbGwgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKEhFQURFUlMpICQoREVTVERJUikkKElOQ1BBVEgpCisKK2luc3RhbGxfdGVzdDogdGVzdHByb2YvJChMSUJURVNUKQorCWluc3RhbGwgLWQgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKERFU1RESVIpJChMSUJQQVRIKQorCWluc3RhbGwgLWQgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKERFU1RESVIpJChJTkNQQVRIKQorCWluc3RhbGwgLWcgJChHUk9VUCkgLW8gJChVU0VSKSB0ZXN0cHJvZi8kKExJQlRFU1QpICQoREVTVERJUikkKExJQlBBVEgpCisKKyMgJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvbWFrZWZpbGUudW5peCx2ICQgCisjICRSZXZpc2lvbjogMS40ICQgCisjICREYXRlOiAyMDA2LzEyLzAyIDE5OjIzOjIxICQgCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9tZXNzLnNoIGIvbGlidG9tY3J5cHQvbWVzcy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDhkYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvbWVzcy5zaApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9iYXNoCitpZiBjdnMgbG9nICQxID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4gZXhpdCAwOyBlbHNlIGVjaG8gIiQxIHNob3VsZG4ndCBiZSBoZXJlLCByZW1vdmVkIjsgcm0gLWYgJDEgOyBmaQorCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L25vdGVzL2Jhc2U2NF90di50eHQgYi9saWJ0b21jcnlwdC9ub3Rlcy9iYXNlNjRfdHYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYzhhNGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9ub3Rlcy9iYXNlNjRfdHYudHh0CkBAIC0wLDAgKzEsMzUgQEAKK0Jhc2U2NCB2ZWN0b3JzLiAgVGhlc2UgYXJlIHRoZSBiYXNlNjQgZW5jb2RpbmdzIG9mIHRoZSBzdHJpbmdzIDAwLDAxLDAyLi4uTk4tMQorCisgMDogCisgMTogQUE9PQorIDI6IEFBRT0KKyAzOiBBQUVDCisgNDogQUFFQ0F3PT0KKyA1OiBBQUVDQXdRPQorIDY6IEFBRUNBd1FGCisgNzogQUFFQ0F3UUZCZz09CisgODogQUFFQ0F3UUZCZ2M9CisgOTogQUFFQ0F3UUZCZ2NJCisxMDogQUFFQ0F3UUZCZ2NJQ1E9PQorMTE6IEFBRUNBd1FGQmdjSUNRbz0KKzEyOiBBQUVDQXdRRkJnY0lDUW9MCisxMzogQUFFQ0F3UUZCZ2NJQ1FvTERBPT0KKzE0OiBBQUVDQXdRRkJnY0lDUW9MREEwPQorMTU6IEFBRUNBd1FGQmdjSUNRb0xEQTBPCisxNjogQUFFQ0F3UUZCZ2NJQ1FvTERBME9Edz09CisxNzogQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEE9CisxODogQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSCisxOTogQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWc9PQorMjA6IEFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTT0KKzIxOiBBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VCisyMjogQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZRPT0KKzIzOiBBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZPQorMjQ6IEFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYCisyNTogQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQT09CisyNjogQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQms9CisyNzogQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthCisyODogQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3c9PQorMjk6IEFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4dz0KKzMwOiBBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkCiszMTogQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEhnPT0KKzMyOiBBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdkSGg4PQpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvbm90ZXMvY2NtX3R2LnR4dCBiL2xpYnRvbWNyeXB0L25vdGVzL2NjbV90di50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmNGI3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L25vdGVzL2NjbV90di50eHQKQEAgLTAsMCArMSwyMTQgQEAKK0NDTSBUZXN0IFZlY3RvcnMuICBVc2VzIHRoZSAwMDAxMDIwMy4uLk5OLTEgcGF0dGVybiBmb3Igbm9uY2UvaGVhZGVyL3BsYWludGV4dC9rZXkuICBUaGUgb3V0cHV0cworYXJlIG9mIHRoZSBmb3JtIGNpcGhlcnRleHQsdGFnIGZvciBhIGdpdmVuIE5OLiAgVGhlIGtleSBmb3Igc3RlcCBOPjEgaXMgdGhlIHRhZyBvZiB0aGUgcHJldmlvdXMKK3N0ZXAgcmVwZWF0ZWQgc3VmZmljaWVudGx5LiAgVGhlIG5vbmNlIGlzIGZpeGVkIHRocm91Z2hvdXQgYXQgMTMgYnl0ZXMgMDAwMTAyLi4uCisKK0NDTS1hZXMgKDE2IGJ5dGUga2V5KQorICAwOiAsIDU0QzkyRkU0NTUxMEQ2QjNCMEQ0NkVBQzJGRUU4RTYzCisgIDE6IERBLCA3QTg5ODQyMjhEQ0Y5NDQ5MDM5MzZDQTlENzcwOUFDRgorICAyOiBCOTVFLCAxMDU2REUwQ0JCRUVBNzYwRUQyMDUzRkZFQjU1NEVBNgorICAzOiA1OEZGM0IsIEE0MkRFMUE4MTJEMjlCQkM2QzFDNUFDODA4NTY1NDM3CisgIDQ6IDlENkU2RkI2LCA1RThFMDQyMjc5Mjk5OTM4MUVENjY5Q0UxNzYwMUQzNAorICA1OiA0MEQ0OUU4NTFELCBCMDc2QjRFRDc5QkYwMTU1QjM5QTc0MzU1MDU5Mzk0NAorICA2OiAwMTUzNTZCOUE2RTEsIDhENjJDRUZDNDUxQ0FFNEEyMUMxQzU3OUM2Q0FBMTI4CisgIDc6IEEyQ0YwQTc3QUUwREUyLCA5N0I5RDIwMTc0MEZBNTlFODYzNTEzRURBQ0M1OUZGQgorICA4OiBBNDRDNjhFNTJGOTVCNDhCLCBBNDYxQjc5RDREOUI4QURGNkM2NjE4RTZFQ0RDMDU5QQorICA5OiBGNTZCOEFENjhBQTMxRjIyQjksIEM1QzdEMkU2RkUzNEQ5NENFNzJCODZEQTU1Njc5MDgwCisgMTA6IDVDMTdFRUJGNEUzNDhDQkUzMjc4LCAyOUZBRTdCNDcwQ0I2NTJDNTAxMzQzRkUyM0IyNTg5NAorIDExOiAxRUU5NjBCRkFFMzYwMzAyRDgzNEUzLCA4RjhGNDc1RUI5QkFCMjlDRTE0QTlDRjQyQzMwQjE0OAorIDEyOiBFRkY2QkExRjJCMTM4OTIzN0M2QzA0NUUsIEM4OTUzMDJERDhFNzUwOTY5NTFFRjVDQTYzQkZERDY3CisgMTM6IDVBMTE3OUE0MDQ3MzM0Q0NEOTE2MkYzNkVCLCAxMTA5ODdEMzdGNDU0MjI2MjVERUE0MDJCRDc1ODBFQgorIDE0OiBGMjZFMkMyN0U3RDI4N0IxODJGQTQyODc5OTc4LCA1MzBGREU5MEMxM0EwMUVCQ0E4NjQ0OTA3M0EzQjAzNQorIDE1OiA3N0JGRTc5QjRCQzg3MTE2RUM1MjMyNjA2RTg5MEYsIDI4MDk5NEVCMEUxNkM3Q0YxMEYzMUJCNjBEQkY1MkM4CisgMTY6IDk5MjZBNENFMUFENzBCODlDQzAwNTBBNThCOTU4NzQyLCBBNjM1QjQyNzJFQkZBMUY4M0RBRTI3MDQ1MkQ4NzdFNworIDE3OiBCQUFGOTlDQUU0NzUzRTMzMDRENkY4RjlDMENEMzY2QzY4LCBBNkY2MDZBQUNEMEI4NzkyM0I0M0MzRUI2MUFDMzk2NQorIDE4OiBGNzI0NTNDNjc2NTM1MkEzMTQ5NEZBMDJCMzg4RTQwN0IxRkIsIDBBNDQ2RDI4QjdDNTg0NUMzNjIxQjREM0EwRkE5OERCCisgMTk6IEE3MzcyNTg5QTg2QjJFMTM3RjEyNEE5NjYxODA5NUVCNUUxNDM1LCAzQzU5QTZBODU4OTQ3RkVCRkQzMjQ0MUUzNzMwOUYxQQorIDIwOiA1NjgzRTEzQTRFODJBMUFCOEIzREMyMDUxQjZEQkYyRTFGMkJCNDE3LCA0NTlEMUIwRDJDRjJDMzBCNUVENUMyMzdEMDdERkMxOQorIDIxOiAzMzU5NEM0Qjg0NTM2QzIzREE1QUIyMTE3RTkyNjcyNThDQ0U1REVDM0IsIDZFNEJCNzBBNzIzNDNFMTQyQUM0RTMxQ0UwRkU2QTc3CisgMjI6IDMzMkVEQzlBM0JEQjkwREJDQ0YzMTdBQzU1QkU1ODU1Q0E5QkNBMkE3M0M0LCA5RkIzMTBFNUZGRjVDNzU0RUUxRTVGRkY4NjVGMTY1NgorIDIzOiA3MzQ2MTg2NzcwNTU0NjkzMzVGRkQ1NzRCMDA4RjJDNjhCNzg2MzNGNzkwMTBFLCBGQUQzMTM4NkU0MkJCNEVBNzZBNjQzQTkwMDRBOENCNAorIDI0OiBCQTZGNkFCQTJBRjM1ODk1RjdGOTY2RDcxRjRFOTFBMEJERDFERDU1MTgyNkY4NjEsIDI1QTNFQzFDOTFDMjYyODNCQUE1OTc1MzkwMjg1QUIyCisgMjU6IEZGNTE5MjEzRTg1OEUzNkFDOEQ5MjQ1MEY4MUNBNDZDOENBOEFCMTI5QTk5N0VCQjM2LCAwRDRBQjJCN0E1RUIwMjI0MkMwMUE4MUNFQkY1RDg0RQorIDI2OiBCMUY4MDA1OEMzQjQzMTZFQTg2RTlBODk4Q0QwQjlDMDM2NkRGQ0IyQUVDMDc5OTMxMkQ1LCAwRjRGRjI3NTlFRERGNjM0OUY0RTIzRjI4NEZBQUQyRQorIDI3OiAwMEJEQzE1MDEyRjgxODMxMTJENUMzQTEzNURDNjBEQzlDNzY0QTA0QkQzOUE4RTA0MUYxRDksIDBDNjhCQzlFNkE2QkYxQjAxNzQzRjMxODNDOUI3QzgwCisgMjg6IDMwMjJGRDEyOTY5RDkyNTM2NUM1NTNEOThENTlFNUQxRUM0OTQ1NDA5MDlEMUZBNzk0RjQxRTE4LCAwNUU2MTg0NDk0M0U3OERCOUJENDE3RERERTlDOThCMgorIDI5OiA0RjRBNDU1NEJGRUQ2QkFBMDlFM0Q4ODQzQzRFQTM4MDdCODc2Mjc5OUMxRDIxMjg5QTQ2NTc1Mzg5LCAzQTU5QTZEQzkyMzAwMjBGRTA2MTQ2NkE5MkJCQ0FGRAorIDMwOiA2QUU3MzVFQjE1RDlCMzlDOEFEMEU1NEY0NTMwN0FBRDk3REI5RjhBMkE2NkJEQzlCQUJDQ0ZCRDU0QTMsIDBCREIzNjVFNDkzQTlFMTYwRUVGRDdERTI0MTAxODcwCisgMzE6IDRBRjE5RjAwRUFFNTVGRUQyMzA0Qjk0RkJDQTI5MzgzMDQyRjJCRTcxMTA0MTMyM0MxRDlGMTRCQTYzMzgzLCA5NDU2MTU4MUU0OTY1NTNEMDY4MDUyQkE2OTg2ODNEMgorIDMyOiBDMjQzOEJDNDZBOTJBNDY1RTBEQjQxRTYzOENDNkM4RTAwMjlDNERBODQyQ0E0MTQwRDczRjkwOTg1RUFCQTlDLCAwRjVBNjlGNTJBQThEODUwOEQwOUU2NDI1MTFFNTRFNQorCitDQ00tcmM2ICgxNiBieXRlIGtleSkKKyAgMDogLCBEMDFGQUNGMkJCNTc3QkZBNjE5NDgwMEU1M0ZCNEEwMAorICAxOiA2NSwgOTJFNDhGNzMwMEZBMjY5N0U5RTBGRjgwREQxODcyMzcKKyAgMjogQUY1QywgMzMyODYzQkM1MTU2NDlENUJDQUI2QTJGRTVGNTI1MEQKKyAgMzogRTdDODlELCA0OUE2NDFGMDI3QzY1QTE1MTAwMDA5RDk5RTc5Q0YzRgorICA0OiBBQ0IzNkQ0NiwgNTNERTMyOEE4QjRCMTRDQUQzNjNCRUQ1M0RBQ0U4QTEKKyAgNTogQzNBREFFNkNDRiwgRjcxM0Y1MDc5QkQ3NzA0NkY5NUQ4Njg1Q0RGNTIyREMKKyAgNjogNUE4Q0FCQzkxMkRBLCBGQjk3QjA1OUQyQkUxMjczNDk3RkE4RDI3MzlBMTUwNQorICA3OiAyN0YxMDFERDZEMDg5NCwgMjY2QUNFRjM0NDc2QTBFNjQ0MTBEMjA5MjE5MzM1RDAKKyAgODogNjYxNjREQTA5QkUyRjQ2RCwgRUZDNjRDMDE4OTBBNUI1NjJBRjM5QURGQzQ4RTFDQTkKKyAgOTogMUIwMDE4ODk1Mzk0NzUzOTk1LCBGQTg5NEUxQzg4MkQ5NkUzNUE0QzIzODcwODkzMUYzRAorIDEwOiBEMzQ2MDYyODI2MTg3QkFFRkMzQiwgQTAzNkFFMUQzQzAyRTJBRDIzNTQxREUwOTVBQzdCODQKKyAxMTogRUZCMzc1QkExMTM4MzM5RkExQjUwNCwgQ0RENDIzMkZGNDY2NEQ1OUQ1QUM2QkUzMkNCRTFCMzUKKyAxMjogQUZDRjQ5NDA3OEQ3RDdFNkQ5ODAzRkQ1LCAwN0UwNkVEOTIzRjc2MTUwQkU4MkMxRERDQjYyQzRERAorIDEzOiA3NURGMkVDOTEzNzk0MDhEQTQyNkE0NDRFNCwgNDQwQUNERjJBNjU2N0ZBM0E1MDA5RERGRTUwMkExQTEKKyAxNDogM0IzNkI2MkIwMUUzMjRFNzAyNjk0MzA1REQyOSwgNDA5MzU5ODYwN0RDRDk5OTM4NDVEMTgzN0QyMTFGRTIKKyAxNTogN0RGNjU5NUM5NzExQjE2NEM5OUNCMjQ2QjRENTdFLCBGMzY0OTkzQjJDMTg3MDU4RjQ2NkI2MkQxMUUwRjk0RAorIDE2OiBEMzE3RUU5RUUxNzQ2RDFCODlBNENDNTJEODhGMDgxOSwgNDE4NTZCMEIyMjlEMzgzNDRGQTcxOEUwNENBNTdBOEIKKyAxNzogODUyNTIyNzdBOTdDQTc1NTMwMDc5OTVCRDVBMERDRDM3MiwgQkRFRUFCNjM2QkQxQUNDOEQ1QTIzRjY1ODE1MEZBMzAKKyAxODogMzZGRjMwNUFDNkVGNjYyQzE1NUExQzE1QTZDMTk1RDNFQzg4LCA5QUM0OEVGMDdBNTEwRTMwOEUwNkU3OUMwQzgwQzNBMAorIDE5OiA1MTY0NUE2MTQzMTNFOTc4RjZEQ0U3QkJEREVEQzMzRTMyODRBQiwgRTlGNzcyM0U3NjNBRDUwMTYxQzA2NzFDNDAzNEZEMEEKKyAyMDogM0NCOUU2RDA3MzBGRTA1RjkwM0QzMzg3MDhBRDhFMzRCRkJCMzI4NSwgOEExMjE4NURBRDUxODA0OUYwRkFDOTQ1QThGQjMwNUEKKyAyMTogMjc2RTM3RDI0NkM0MEFCRjMyREM4MzAwN0I5NTM5MEVFODAxQ0RBNkUzLCA3M0ZBMUQzMTBEMDMxRTBBMEEzQTE0MjE2NjFCNDY5NworIDIyOiA0NDQ0QkIwNzBFREZCRDFBQzU5RDBCRjcwRDY2RjQ4RjA4MzAwNjlGMzU2MiwgOURDQjZBOTlDQkNDRTNDOEFFRjI5RjA2QUY1MDU3RkIKKyAyMzogRDE2QkEwODRDRjgyRUREMkU0MzM0OTMxMTE0MEJGM0EyRTM3REU0MDU0NEJGMywgQ0I5M0M1QUQ2MEM3MDBENEVBNjUzMTM2MTAxQUFDQ0MKKyAyNDogM0ZCQUVCQjM2RTJCNzQwMTQwNDNCQTdENzJGODk5QjBEOERFRDg4M0Y1OTJENzc4LCA1NERFQTMxRDdFRUE4NjNBMDZBMTZENkM5QjI1REMxMworIDI1OiAzNjE0QjU0MjhCNzkwNzkzRjMxRTIzNjcwQTM4QTA3MEI2NURCOEU1MUM2MUZFQTlDOSwgQTkxQjc1MEZEN0FCRkYxODM3NkM5ODJERkEwQzg4NzIKKyAyNjogQUMxNUZEOTBBNEMyNTRCQTE0MDZCRTdEQkE1Njk0QkIyNjI1RjYzNEM2OUY0NUNDQ0QwNCwgRTZGOTdCQ0M4NTI2QkUzQzA0QkExMzlFQjUwRTY1REYKKyAyNzogQjUwNkU4MzU1N0U0ODU1M0JEODU1NzQxMUQyQzE3RDY0MDA1RTczNEJBNUE1RkYxQ0Y5OEIxLCA2RkEwMDE3NThBMTlGNzgzQTcxQzk3QUYxQUE2MUY5NAorIDI4OiBGMDc3MjE2NjM0MDA4Mzg5NDdFQTFCOTQwNEQ5NjgzNTU2RjJEOTExNDI5QTlGNTlFM0Y1QUQzMSwgMzc2QTExNjVBMzBDOTE5RTk2QzM3MDZBNEFCNURCMzcKKyAyOTogOThCNUVCOEZFMDAwNUU1MTVBNTg1RDhGNDREODM4RkE1OTAwNTRFQTUyMDFDRDQ0NDM2NkI2RjcxRSwgRDhDNTg0NDhGNjAxRjJDMDVGMjRFRDJDQzM0OUM3OEIKKyAzMDogRTM2RTJGQzIyNTc2N0NDMUUyQzM4OEJFQkMyQzgxQzM0MEZFRjVCNTA0NTc1RDVGQTQ5NjgyRTFDMjE0LCBDRkVENTZGMzhDQTRGODRFNkUxRTE2Q0VGNTBBNjE1NAorIDMxOiA3QTlGREQ4RTQ4MUI4MjJCM0QyODJBQUY3MjY5NDQxMDFFRDYxREFFNzM3ODJERTA1NUQ3RDMwNUUzNkIyNywgMzI4QjEwODQxRTk3NzA0MUNCRDEzQzM5Q0Q3MEYwM0YKKyAzMjogNDhBRThCNUZBMDI3OTMwQTdCQ0VDMjc0NjhENzk1RDBEOEU2MDk5QzVGMDU1ODM2MUIzQUQyMEMxRUNGRjg5RiwgQjE4MEFBOTM1M0U5RUI2QTIyNzEwQTRERTg3MkZBQ0IKKworQ0NNLXNhZmVyKyAoMTYgYnl0ZSBrZXkpCisgIDA6ICwgRTEwNkY0MUQ2MTQwMkU1MzI2NjIyMTNFQkE0NzFCRkYKKyAgMTogMDUsIDE3NDk2MDBDNzA0NTY0N0RDQjMyOTNDMDcyNEU3QTIxCisgIDI6IDIzNTUsIDgwREQ1OTc2NjU3MjNGNEFFRkZGNzYwQzVDNkM1RUUyCisgIDM6IDVGNENEOCwgNTlBRTU0RTYzQThDRjREQkFEMDUwQjQyQ0U5MjIwMTMKKyAgNDogNzVGNjNBNDMsIEMzMUI2QkQzMTI1QzAzNkM5OTUwN0RERUUwMTk3MjAxCisgIDU6IDUxRDREODdCOEQsIDBGMzg3MjA4OENERUIwRTk1OEMzNUYzNDM2NzdBQzI0CisgIDY6IDhDRjZEODFBMjc0QywgQzhFNjg4OTU0RTcyQTA1MkI1RjhEMUNBNDZGQjQ0QjAKKyAgNzogNUVCODI4M0IyOTlBQjEsIDU5NzdDQjk2QzhENDM5REUzQTg2QUUwNDUyQTJFRTM0CisgIDg6IDgyOUIxQTRFQTg2NDNFQUEsIDFFODkyRDNERkI3M0E0NjkwMzVDQTgxREQ3RjkzN0QxCisgIDk6IDBGRUVGOTUwNENGMEY0RTI4MiwgRURDQkVEN0M2MUU4RTJEMjQzOTJCNDE0NTIxOEYwQUIKKyAxMDogREVGNzY3OUQzMDczRDQ2MUE5NEMsIEQ3QUJBRTU2MTkwMUNCQjMwRkQ3RDk0NjdDMDg4QjNCCisgMTE6IDYyNUZENjc5QzczNTRBNzRENjI4OTMsIDQ1MEUzOTU0ODU3NjQwRERGNEM3QTk1QTZFMjAyQTFFCisgMTI6IDNDOUU3NkU0RTJENEQ5NUZFQUJENUM5MCwgQ0Q0NDY3RjY5NUI3RUQ4OTczQUVFRDVBODIyQjM0N0EKKyAxMzogQjFCNjI5NEVDRUFFNkFFRTQ4NTM3MzFDQTksIDYwNDIzMDJEQUU1OTg4MjJCRTg1NTRCRTAzODExOUNGCisgMTQ6IDIwNEJGNDgwNTgyRDRCQTQwOEJBRDIzQ0VCNTIsIDRENkI4NzMzNEUxQkZCOUJBMkQ0MkI4OUIyNDE2NUIyCisgMTU6IDI3NzU5MTc3MEUzRTJEQjk3QTMwMTFEOTYxNjk5MSwgNzVEMEE0Qjk5Mzc3NDhFQUU3Nzk0MDU2RjdBOEE3RkUKKyAxNjogNTY2OUY3NUQwQzkwOEJGRjdCODIwOTUyMzFCODZEQUEsIDNFODE2Nzc2QTczRkI4OTI3NjUzNEEzNjQ2QzBGOEZCCisgMTc6IDM3RTYyMUVGNUEwNDNBODNGQzk4QTY1MzI5ODkxQkMwMzEsIDE1OUE4MjNFQTYxQjNBNDdCNDJFRkNGMTJGMzA0NzI1CisgMTg6IDE4QUM2RUNGM0Y0NzhBMDc5N0JGODEzQzg3MTIzNUE5RDMwOSwgOUI0MTVCMUIzQTkzM0IyMkM5MDI3RTJENzI3NjQ5NTYKKyAxOTogNjcxNDg0Qzc1ODdEQUFCODg1QzdGMkZBRjAzMDA4MUI0NTJDQzYsIDU3NEE2M0QxMTNBNUVDRUM4NzdENUEzNjhBMzE2MEFBCisgMjA6IEQ3QUIwRjdENDZCN0VEOTc2QzhGNkU3RDBDNkFBQkUzQ0FBQTVBNkUsIDI2NkM3QTAyNUM0RURGNjU3REQ0MkVCODJCQjY2MTZBCisgMjE6IEQ2MEU0Q0ZDNjUwMEUyMzcyNzZBNjlGMzVBRTRCQkFFMTczNzEzOTJFRiwgNkVEMkExNjczRjhCNERCNzk1NTQ3RDlEOTNENzZEOEIKKyAyMjogRkFDNkUyMTk3OUQ4RDk4OTZDNzkwQ0I4ODNDMjlGODRENjgyMEFFNEZENEIsIDFDN0I2RDczMjAwRTNDMkRDNUM3MDExNTJGMzhFRThFCisgMjM6IDM5MjQwREMyQjU0NENBOEJFQkJCNEVBNDk5RkQ0OEE1RUU3MDcxOThBRThBQzgsIEU3RkZEMTY5NTUyNjY1QURFN0I5QzBERkZERDA0RUJECisgMjQ6IDZCRTJDMjQxNzJDQUExOTJENTVDQzNFNjQwRTM0Njc1REQ3RjQ0MUNFNURCMEZDMCwgNzYwQ0E5NzYzNTUyODFGNzZFNDlBMjg1NkE0RUM3QTAKKyAyNTogMEUyMDQyNzIxOEQ2NDQ3RDZFMjNGQTQ4MzJDQjhEMkExNzJCMjNGREM1NDJCNDE1MjQsIDI3RDBGMzdFMTA5MjUyRkY1RTZGNkY3MDNDQTc4NEY1CisgMjY6IDBBRjc1QkQ4OTAyOEE1NjkxQjhCNzk5M0I5Q0U0RkQyNDMzNEEzMTJERTI4MjEyQzhCMkMsIEFGRTRDNkIxOTNCMEYxNzk2RkM5RTZDMjMyOTJDMDYwCisgMjc6IDY4MzBEOEUyRTZERUMxNDc2Nzk2REE0NEM5ODJEMzY0MDlFMjY4Rjk2NjI4M0E2NkU4MDFFRCwgOUUyQzkyRDVCMzBFQjA5NDNFMTc4NjlFRDRDNzg5RUMKKyAyODogNzVFRDI4MEJFRUNENzc2OEY3RTAzMjA3MUYwRTA2RDlENkJGMUM5RkY4RTVERUI1MzZEQ0Q0QkEsIEJGMEREMTFENjMzREJBNURDRDI1RjQxNzI3NjU1NzBCCisgMjk6IERGMUZBRUNDMURCMjQ3MTgyMzZCMThCOTBCMzU0RjQwNUZENURFMTI1N0VDNDNGODExRjRBNDNEQ0QsIDQ4RDE4MkU1NzJFNzk0MzUwQkJEQTkxRkQ3NkI4NkJDCisgMzA6IDE3NjY4MUUzOEFDQUNDRDNDNjI1RjU1NEMxRjdBMkQ3QzJDNDc0Qzk0NDRFQUM4OTI5QjhDMzZFQzA1RSwgMDgwRTEwOUZGQzVEMjQ3RjEwMDcyMTdERDY0MkJCQTMKKyAzMTogOEE4MTcyQzIxRDg4QTFGREQ0MzA4OUM1NDVDMzA4NTA3NjE3RjdCREIwMkM0N0NGMjcxOUYxNDg0NDA3RTIsIDFBMEQxMEIwQUY1QkUyMUJGMTlENTcwRDNGREE1QkNFCisgMzI6IDBBOTNDQUUyQjk1NTE3NzczQTQwMDlGRDM0MzgyMzFBMjA3QjlENDZBQUJBRTgzRkM0RTEwNTdFQTRFMkQ2QjQsIDcxN0FFRjJGNTVEQzg2NjlGN0UyRDAyOThGOEE3QkU5CisKK0NDTS10d29maXNoICgxNiBieXRlIGtleSkKKyAgMDogLCAzM0IzREYxQjU5Qzg0REQzQzE1RTRGRUI2NjE3MzMwMworICAxOiBCRiwgOTJEQ0VCRjFDMTFERDBCMDI4REVDOTQ0QTU1NUU0QzYKKyAgMjogOEE0RiwgQTg1OUM3Rjc2MjkxMzI2RDgyMUJCM0M3NTE5NjU3QzAKKyAgMzogQkFFNzU1LCAxNEQ3QzJFRkJDQTEwNjM0NjBGRUZDRUJBRTNBRDc5QQorICA0OiAyNTY5NUJDNiwgOTM1OEJDNDM0QjE0QjU5RUQxN0Y5QzBEM0Y1MURDQjEKKyAgNTogMUQ5RkM3MEVDRSwgMkE4NjU3OEZBM0E4QzcwMkUyRTY3MjNEQjlBOTg5M0YKKyAgNjogQUMzOUYxREYzNjYxLCAzRjlDNzFFRTA1MDZGRDJCQUZGRUU3MjAwRDIyQ0Q5MgorICA3OiBEMzMwQTkxNUVFRDlEMCwgMjJEQzI1RURGNUFDREVGODM1OEJFMkEzMDgyMTEyQkMKKyAgODogRUY5MTNBREFFNjM4MDUwNywgRTg3RDcyQkI2Mzk1RUVFRjJBRDRGNTQ2QjQwMzNERTgKKyAgOTogNUVDMTY5OTRFNzYyQkNFNDY3LCBENzcwMEY3QkY0RkUwMjZBMjA3NkYxNjFDMzM4M0EwQQorIDEwOiA3RUVCNDkxMEI3QzJCNTQwQjQ5MCwgNDBDODhBOTc3RTFEQ0REQUJENzQ5QUJDOUEwQzYwRjgKKyAxMTogRTVERDMyRkY1NEQzOTQ1MUNDMkFGOCwgNTQxQjE1NThCNUFGRjZFOUVGQkVFNDk2RDYwQUQ2NUMKKyAxMjogMjQyQzI5MDBGODU5OTY2QjY2MjdGRjVDLCAxQ0VEMTQ4MDk4MzUwRjNBNUQxQjU2MzQxODA4MTdBMworIDEzOiBFRUYwMjVCOUU0RUI4NjdCMTI3RUJEMTlENCwgQUQwMTc5QTA3QUQxNDE4QzI1RjQwRTEyM0MyQkVGNDcKKyAxNDogQzVFODEyQjBBRTM3MDk4Njg2RTJDNDQ1MkMxMiwgMDJGQzg4QUFBNjJFMzQ3NDJCQjg1NzdBNjUxRTkyMkIKKyAxNTogN0JDQUIzMkQxQTg3MUE2MkY5Qzc4MUFGQ0FDNjBDLCAyQ0QxQzExRUUxOTdEOUUxMzAzNTlGNzZFN0Y0OTI1MQorIDE2OiAxRTgyRDhCOEVFRDlBNzMwRDE2NzBGMERDRkYxN0I2MCwgQjc3MzAyNjE1NjBFQTZDRjcxNUZGNzAwNkQ1RkVGRTIKKyAxNzogMEUxOTY2OTkyRTM2MERDODEzMTJCMjhFQ0E2ODY1QjgxMSwgMTBDNDBBQ0QxNjlDQjBGMkE2RkZDOTlGOUE1NTE2RUEKKyAxODogNUY1NDE4QzEzMjJCRjdFQjgyOENGMjdDMUY3MjA4NjUxNUJFLCA5MEY4RUQwNDQ3MTcxQTEwNDc2REVEMzlGNzUxODA3NQorIDE5OiA2QzU1MjUwNkZBMTY3RkI4QUExMkU5RjQxNjkzMDAzMTQ4N0Q0RSwgQzk5MjAwOUY4M0YzMUE3QkY5MjJCRkFFNjhDNDEzNEIKKyAyMDogMzg0MjlEOTY2Njc2NDA2QjE3NjM4REI3RjlGNzIwNTI1MDQwOEJCMiwgMzM4NUE1MEU5Nzg5RDJDNjM4MzVBODBFRkU5Q0ZBRTQKKyAyMTogNTZFRjQyNjMxNUVGOTZCRTRDNjBCNDlGNDFDOUJEREUyRTBDREIzQzIyLCAyRDUxRDVCNEY1QjA0QkVGM0JDMUE3Q0YxQUVBNzBFOQorIDIyOiAzMTRCMDc1QzA5N0VFNTMxRUNDRTZBRDdDRUYyMkE3MkFBRkNFRkIwMjAyOSwgRkI3QTdEODREMjNGRjUyNEQwNjA4NzFEOTBGQUMxMDYKKyAyMzogNjFDQ0NGN0UyQTlCM0U0NkNEMEE5NEQ3RjRBNzYxN0JCMERCQTJEOTg5OTA3QSwgQjNGNEQ0NjA5NDczMkYzRUREODFFMDc1NUYwQzUyRUIKKyAyNDogN0E4MTJBM0JDRUQ0RTBBNzJGQjgxMjE4QkQ1QTRFMzNENjlDQTE4ODM0RkZBRTYxLCA0ODdGODA1ODhCNDFGNEUxMTk4MTI0NzA4OTg3NjY3RAorIDI1OiBEQkZBQjc3RUYwN0FBNEM5RUQyQjA1NTAwQkRGQTAwRkUzRjE5RjE1Rjk3QTc0ODgwQSwgODQ1MDREOUVFQ0JDNkNFMTFCMThCRDEwNURFNTVFMkMKKyAyNjogRTY3NkQ0NzM5QjAxQjUxMDFFMzZCRjhEOUY0RkFFOEY3NjdDMDI4RTgzQTZENUIzOTY2NCwgMzE0MUEwNTY2OTgwN0JDQTMwRjA5MzRGNTk5RkQwNzcKKyAyNzogRDhGRUJEMDY5RDg3QzFFRTUwNENCOEY3MkFERkYyMTY2QjE0QkE0MEIxN0I0REFBNDM5NjY4LCAxRDk5QTMwMTk0MzA0MUMyRjdBNzE0MzJEQTczNkZFMAorIDI4OiBEOThFMkExQ0ZGQUIyODM0MUY5MkM0MTk3MUEyMUFEMEZEREU3MzNFQTI1RjI2MDc5NjdDRDBDMywgNDJFMDVBNTNCRjRGMUE2QzVCN0Y4NDc0MkVDRTAzMUIKKyAyOTogMTNGQTQxMkI0ODQ5NDVDMUZFODI5MUE3RUI4RjhGQjc4RDJEQzJDNzJDNTEzMjM4NkVBODJCRjRBNiwgQTFBOEU4QjAyNkREMTE2QjBGOUM3M0VCMTRDMUM3Q0QKKyAzMDogMTBBQkQyREMyNUM4QkE1OTRGQkZBOTMxMkU2OUMxQTJEQkYzMjY0NzVBRjIwODBFNTVFMzYxMUZCQzBFLCA0OURGOEE1MTcxREFDM0ZCNjg0QkEyQ0Y3RkJCM0QzQgorIDMxOiBGNDAxRDIxMjM2MTlCODFGNTRGMzA3Qjc4MzM2MkNDNDBGQjRGQjI0MzNDRjUxRjU1NDNBMTQ3QkNEMUZFNSwgQUNCQjY3MENCMzcyMjA1OUI0QjlGQkVFNjc3MDNFOTgKKyAzMjogODM5QTlCRkExRDNDQTM3OTI0QkM2NjQ4REVEMjI5MUZDNjE3MzZBMzYzODkwNkQ5QzVEQTI4QTY2QUE2ODRBQywgQ0QwN0I4M0M4RTBDM0U2RkI0MTE1QTE0OUJERjZGREEKKworQ0NNLW5vZWtlb24gKDE2IGJ5dGUga2V5KQorICAwOiAsIEZGNzNDNjc3NUM2MURCMzZEOUI1RUVDODEyMDkxRkY3CisgIDE6IDVGLCA3RDJBRUE2MkE1MjAyRTNDNEZCRTA1RjMzRUJFNENDNQorICAyOiAwRUE1LCAzMTJFRDE1RkREQUI2RUVFQUM2QUY5QkU5Q0U2OThGQQorICAzOiA5NjhGOTUsIEZBMUFENThCODVCOTNCNUE0QjUwOTZDODgxRjc3M0MzCisgIDQ6IDlBOEY0MDY5LCA4OTExMDYzQURERjc5RTI3RDlEQ0VGRjNGNDQwRTZENworICA1OiBBNUMwMzc2RTI3LCA5NTUzRjQ0QjBCQTgwMzk1MjdGOEUwNUNENzBBRDhCMAorICA2OiA1QjA5NzczNkYzREEsIDQwNUI3RUM2ODVGQzk0OTAzQjM2QUM4RTcwMDU1OEI4CisgIDc6IDYxNjgxMEFFMzAzQjJDLCA2NEM5NUEyREY1MjYzRjdCRTZEMUY5RjNDRjg4RUFERQorICA4OiBDOEQ2OUEyRTExNzA1MzJDLCAwNzNBN0U0MjYyNjYyMzdGRDczRDgxMDlGNTVBRTVEMworICA5OiAzRTQyQ0RCN0RBNEE3MkYyRTAsIDQ4Njc1RUE0MzAyQ0E2QkZFNTk5MkRFOTZDRTQzQkIzCisgMTA6IDg4NTMyQ0MxRjNFMzIxRjY2RDY0LCA1MjhCMzUxNkM2RDlBNEI1MzkwREQzMkMyQTJFNkMxOQorIDExOiA5MjE2QThGQzlBOTYxRTdGNjAyRjdELCBCMDMwNDcxODZCNzgzODQ0RjVCNjc1NzA1NzU3NkIzOAorIDEyOiA4OUIwODU4RDRGREU2Nzk1RURFMTlDQ0MsIEY0NTMwQTJEQ0E4MjMzMDdBRURFNUFGMzRFNUM0MTkxCisgMTM6IEE2NzZFMjBCQjBBNUU4NEZEMEI5MTQ5QkY3LCAxMUI4MjNCMzE1REE5M0IwRTE1NzgwODUxNTI2RDRCRAorIDE0OiA5MDNBRDVDMTA4QzQzQTgwNDM2RkUyMTE3RUYwLCBFQjFDNzlDN0RGMjBDRTI5NjdBOTk3ODNFQThENkVGOAorIDE1OiA4MTc3NEMzNkY0NkY2NzE1OUI3RkZDMjRDMDgwRDcsIDJFOUU0ODEyRDlBOTI5NzdFQzM0OTIyNzgyQjY0MjBECisgMTY6IDYzRkQxQzNGNjkyRDY0QjJEQTM5ODJGQ0Q0NzRBNUQ0LCAwNDE3MUFFODQ4NTc3MTNBOUJBQkJENDU2NDg3NUQzMworIDE3OiBCMUJGNkFEOTlGODNDOTE3M0M2QzAyMUFDQTc0QzU0MzFDLCAzOEQxN0Q0RjZBQTNDMjRCOEYzQjQ2NUVBQUNFMEExRQorIDE4OiAwOTQ4RDFFRDU5RjA3REU0NEE5NkE3NkUwNUIwQjZGN0MzMDksIDE4NDhEODg2RkNGRjM1RTg1QjBEQzNDQkU1QkVFN0ZBCisgMTk6IDM0NThFNTkxMTIyMkY5QzU1NUExMDU0QzdEOTc0ODg3NkRBMzlBLCA1ODRBRkFFNzJGQjYwNjVBNzRCRTAxNkNGMzlEMkU4NgorIDIwOiA2NDFGMzg2NzE4NUQwNjA1RTlENjY2QUI2MDUxODdFNzVBMTI5OUVGLCA2RjkzMzJFNkZCNUVBMENFODExRTMzNDU1OTNDRDE2MworIDIxOiAwNjc2NjIyRDA3NzMzRUYzMUE3NjVBQUIxRTcxM0ZDRTMyOTI3N0ZCMTYsIDg4NTQ3NDc0MDUwRkZDOTg2OTMwQ0MwNEJBOEEwM0YwCisgMjI6IDc5ODYxRUMyRkQyQkNDNUMxMkI2OUYzMEExNTc1RkM2NkFDMTQwNTI4MUJCLCBGQzY4RUVBQzhGMzlFRDY5RDMxMkFFQUJGODAwMDA4NAorIDIzOiBDQjI3MzE4MzVBNTc2RjdGOEYyQzI3ODZENzg2RkI2MTg2RTJGODVEODlEQTNCLCAzRUQ5RTk1QkM1MUNGNjM2OEU2RUY2MzY2N0IzNUJEOAorIDI0OiAzQ0IxQzAyRkFEQjZERDU0ODNCQzVEM0MwM0Q5NDQxMDJDRkNFREY4MkI5MTM0MDIsIDFDM0Y2MEM5ODlBNkZCRjQxQTdBRjRGMjkxMTVDMzM0CisgMjU6IEU2OUZBRUE1RTNEMEI3NkVGOUU3MEY5OUM1OTE4RDkzNEQwRTk4MzZGMjQ4REI5RUVFLCA3RjE5MTZCMkNGN0M5QTVFM0Y1NTgxRDM2NUFEQkQzMQorIDI2OiAzNjc3OUFENzU1QTlERjJEQzNDNTgyNERDMkY3REQ0RkZFMDM4NjI4QTRFMUExQzMzQUU3LCAyQkRFRDM3MDM0NjhEMjY3RjhBQjdFQzBBRjhGMUU2NQorIDI3OiBFOUQzMjU2NDZBNDFFRTVBQTdEQUJDREU5OERFODM0NDBBN0RDMDI3MTRCQTBBRUUwMTdFMjIsIDk3MkY0RDc4MzJGMzM3MUM2MERDRDA0QTZERURFQTE1CisgMjg6IDBGQUFFM0Y2MDI4QTI4QTgwQkJGRTcxRkE3QUE5MDQyRTUzOEI0MUEwRDUxNEQ2RUI0RUU2MDI5LCBGN0IzOTI1NDk1RTI2MDI0OUFDQzZFMUNCRTk1NkJDNQorIDI5OiBBOUNDMzlFRkZFRTM1NEMwRTA1NzkyNTZBQTg1Q0JBQTdCMTBFNjcwREQzODI4QTdBMDVEQTBGNDlELCAyOEQ5RDIwMTg3QUZFNzBBRDlERDE2NzU5RjBFRkVCNQorIDMwOiAwMzJGNEJCQjRFQkYyRTY1NzU4QzU0MUZEQUZGMjEwN0REQkVEMzk5NzM5ODQ5RjhFQkI0MUFGOTcxMUYsIEEzNDM2OTgxRUQ2MzdDRTVFRUUwMUIzODBDNDZBQ0FECisgMzE6IDdCMzIxRUQ4MzFDRTk2QTYwMzY2OEUzRTc0QkJDNzQ1Mzc0OUEwM0QwNEExQjM4RTk1OTY2RTZDQzQ4OEYwLCA4OEQxREFERjJDMUVFMEJBNTc5RDBBOEE5MEMxRTYyQQorIDMyOiBEODYyQjBCRDBFMjE3OEFFMDVBRUZCMTRGMzRDNzkxNTQ3QzU5NTZGMUYzQjVCRDUyNTkyNjU3OERFMzgzQTk0LCBCRjMyQ0ZFMDU5RjI3MjIyREM1NUQzRTdDRTdDNUYxMAorCitDQ00tYW51YmlzICgxNiBieXRlIGtleSkKKyAgMDogLCBDODVGNDE0NzVFMDZGMjU2ODJGODU1QzNENDVBNjUyMworICAxOiAyNSwgNDM3QkQ3M0VDQjhDRkZBRDlCMjg3NkYwOEQ0QkRBMzYKKyAgMjogNUFEQywgNUM3NjIwNThBNUVGNzEyNzhCNjlGNTY3RjE4Q0JFNTEKKyAgMzogOTVFNTQxLCBERjA5OUU4MjE4QUVERTgwODc3OTFCMzgyOTgzMzRFOQorICA0OiAyREFBODRFNCwgNzQzNzA5NDE5OEU0QUQyNjQ3QzI2MTgyNDg3NjlBMjYKKyAgNTogQjk2NDFDNTg1NSwgOTFCMDJFQzQ0RDIyNDYwQkZGMjJCQjQwQzc5OUUyMEMKKyAgNjogMTAyMDEyQkNFRkE1LCBFNjA0ODhEQTY1RDY4MzE4MkYwRUZERjlEQTUyQTc4QworICA3OiA4RjE0OTcyQ0E0RjhFQSwgQzI2QjUxRjIwQUNERUM3RENBOTExNTAwQ0YxMjQxRUQKKyAgODogRUQyNzE0QjY1Mjk3MjI1NiwgOEJBMjk0NTlENUQzNzBGQzYwOEVFMzYyQjU1Qjc2MzMKKyAgOTogQkY1OEEyNjlBNEY1OUNFMEE0LCBENjkwODA4MjBGODM2RTVCNUNBOEYzOTNFNjFFRDAwOQorIDEwOiA0NEFGMUY3MTVBREFGMjZDNkVGMCwgRkVGQkM3REI3NUVDRERCQTRBMTNDQkY5QTU3ODczRDgKKyAxMTogNzdDREUxQjk1MUYwODAzODkzNjQyRCwgRkJGOEI4MEIwNjE3MDM1MDREOEQzQTc3MTgzNjZCNkUKKyAxMjogREU1OTlCQUFDOUQzRUZEOUZDRDQ3RTQ0LCBGNjM2RUMzNUQxNzJENjYxRjAxNzQ2RkY4NjY4OEI5NQorIDEzOiBBNzkyQjgzNTkwNTBDNDg2NjU3Mjk3NzQxNSwgQUU2N0Q0RUVEOTJFNjNBMTQwMDNGQkM5MzZFRUY0M0UKKyAxNDogNjJENUE3QTRERkI3OEExNzU4MzE2Mjc5ODdDQiwgMjVGN0I0NDBEQkU5OTAyQzI4QjI4RTUwQkYwMkM1MTYKKyAxNTogQjZGMjg5NDU5RjkyNEM3NjU4NkY0RUVBMEMxQ0FBLCA1NDI2NkI0NDI0QzNBRjZFODFGNkNDNEYyNDM3RjU0RQorIDE2OiA4ODRCN0RGMzM5NUYwNjNEQ0EyNkJERjlGMkZFRjRFQSwgRTNDMkJGQTE5NjRFRkRGNzhGREI5NTU5QzgwMzFDNTAKKyAxNzogNzc0OTYyMzc3Qjg3MzFGMkYzMDFCOTMwNDg3NTE4ODAxRiwgRjM1QjU0MjY0NzExRDg0M0QyMzYzNkJBNkNGQTNFNEMKKyAxODogRTlDOEQxMTY0RjJCMTk2QzczMDU0MDYxNzlCMjMyRTQ1RjFGLCAyQTEzRTAzNEExMzZFQkMwRUQzMzYxNzM3RUFEMjE0QworIDE5OiBEM0RDRDI0MkM5NTJDNTU4OUUwMEI2NUNEODI2Q0E4NzY5MUI4RiwgOUQ2MjRENDgyMDQyNzk4REI4OTZCNTVEODAxRUFEOTgKKyAyMDogNTcwNjVCMjY1NUQ0Nzk5QzA0NzhGRTdFODQ2M0EyMjE1RTc1ODg3NSwgQzhGQjA1MkYxNEY5REY2NzMxQTlDOEI1NjZFNzFENTMKKyAyMTogRkY3MzZGREJEMjM1OTNEOUJDOUEwRDhDQTdEODE5RjU1MEVGOTY5MzIyLCA1Q0MzMDIzMDI5NzkwQkZENDMyMDRCMjdENTJEN0Q3RQorIDIyOiBDNTYyQjczODdCOEYxRDNEQkEyMkREMTYzNkM5QzRBQjQ0M0YyRkYxNUY3MCwgMTk1QzkyOEVBRjg4QkI0QUNCQThBMDFCNEVCQUVFNkUKKyAyMzogRDBBQzZFQThBODA0REMyNjEzMDRENDgyMUU2QUQ3RkNDMkYwREMxQTI5OUI5QSwgMzRGRTIwMzRDQ0YwOUE5OERENTA1ODFEQThCQ0JFMzkKKyAyNDogQjY1OTMzQTdEN0M4RUYxOUMxQkRFQUFCRTJCNENFNUU4MjE0NTlEOTUzNTY1RUY4LCA0MkIyMEVGMTQyRUIyMjg4MDNENkFGNDdDNjQ4MkJFQgorIDI1OiBGMUY0RkNFODQyRUZFRjU2M0Y2RjA0Nzk1NkU2NzA2REM5QjE3OEQwMEQ4Mjc3NkQ3NCwgM0VDRTMwNTBEOEM4MDMxOTgyMUQ1RjU3QTdDQTcwNjYKKyAyNjogNEEzRjEwRjRFMzQyMTBBNUNBMUI4MUFENDI2OUNCQzNGRDY4QUM2NjJCRjBFOURDOTkzNSwgMEJDMDcyNEFBOUExOTREOEM3NUVFNkZDOEU3RjI4RjEKKyAyNzogMDc3RjNDMDU1MzAzRkQ2NjlCQzFBMzcwQjE4QUE3RjMxRDNDOENCRkY1QTY5MzgxNDA0RkJCLCA4NzJDNzk0NjQwMUJFNzBFNjc3Qjc5RUExM0ZCMEY1OAorIDI4OiBGRDM5RDMyQjI3RkU1QkI4RTY1MTJDNjQyRDQ5MEUwQUQwODY2RTM4NjU4MEFFMTE1Qzg1RUQyQiwgRUU4MTcxMkVBNTdERDU0RERFRTk4RUFCMzI4NUU2RUUKKyAyOTogQjQ1RUQxNzkyOTBBNjA2NDE4OEFGRjZCNzIyQjM3RjhDM0U5ODRFQzM3QUI1RjQ3QjM1MzIyOUIxMiwgMTg2QjNBRDBDOUY2MEQ1N0U4NDk5MkNCQjJCMEY3MUIKKyAzMDogODNGRjFGRDE3OUQ1MThBNDE0MTQ4QzE1QkU1NjZCRTRDQzNEQkU5RkY1MzE5QTY1MUU4NjI4MTFGMTUyLCA0QjI5NDJDNjY1NjVFQjkxMzlBODNDMkVGRDU0OUQ1NQorIDMxOiBCODE3NjQ2OUU2QTBENTc5N0VENjQyMUE4NzFGRUVDREU0OEFDRjAxMUUzOTQ5ODFDNDNBQzkxN0U4RkZENSwgRTlCMDEzODNEQjFBMzJFNjEyNkJEODAyQTZDNkY0N0UKKyAzMjogQUI2QTBBQTI5QjY4N0QwNTczNTE2N0Q3OERCNjk3QkEyNDc4QkQxNEVDRDA1OUFFOUQxMjM5RTdGMkFCNDhGRCwgQTU2MEEzMEZEODdDRjI4QkE2NkY1QjI2Mzg1NjdFNEIKKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvbm90ZXMvY2lwaGVyX3R2LnR4dCBiL2xpYnRvbWNyeXB0L25vdGVzL2NpcGhlcl90di50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0OWQyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L25vdGVzL2NpcGhlcl90di50eHQKQEAgLTAsMCArMSwxOTY3IEBACitDaXBoZXIgVGVzdCBWZWN0b3JzCisKK1RoZXNlIGFyZSB0ZXN0IGVuY3J5cHRpb25zIHdpdGgga2V5IG9mIG5uIGJ5dGVzICcwMCAwMSAwMiAwMyAuLiAobm4tMSknIGFuZCBvcmlnaW5hbCBQVCBvZiB0aGUgc2FtZSBzdHlsZS4KK1RoZSBvdXRwdXQgb2Ygc3RlcCBOIGlzIHVzZWQgYXMgdGhlIGtleSBhbmQgcGxhaW50ZXh0IGZvciBzdGVwIE4rMSAoa2V5IGJ5dGVzIHJlcGVhdGVkIGFzIHJlcXVpcmVkIHRvIGZpbGwgdGhlIGtleSkKKworQ2lwaGVyOiBhZXMKK0tleSBTaXplOiAxNiBieXRlcworIDA6IDBBOTQwQkI1NDE2RUYwNDVGMUMzOTQ1OEM2NTNFQTVBCisgMTogMkIyMEFGOTJBOTI4NTYyQ0Y2NDVCMUI4MjRGMkU2RDkKKyAyOiBGQzI5QzMzNTY5MzdFQ0MzMTU5RDhENkVGNUU4ODNBMQorIDM6IDRDMDdCNUEyRUYzMUEzMjI5Qzg3QUIyRTRERTg4NjAyCisgNDogOTNBRkExMTQ3RTc5M0ZGQ0MzRDg1MjY5NUE2MkQwMDgKKyA1OiBENEJDQzMxN0RDOUFGRTBFNkM3QUQxRTc2Rjc5REJFOQorIDY6IEZFREIzMzcxRjNDNjUxNjJBRkNDREM2RDE4Qzc5QTY1CisgNzogNEFGMkE3NkY5M0YwN0MxNDE2MUMxNkI1QzE3NkU0MzkKKyA4OiAwMEExQTU5NkFGN0NGNDRGRDEyOTgxRkExMkNCMTUxNQorIDk6IDgwMTNENzAwNkFCMzhBRUJENDBEMERDMTAzMjg3NTFDCisxMDogODFBMDc3RjNBMjYyRkE0RDAwRDk4RUU0RDFCRUMzOTAKKzExOiAwQ0NCQzk5QTMxMzVGMjZEMkJFODI0RDYzM0MwMzY2RgorMTI6IENEQkI1NTY4NjEwQUQ0Mjg3MDY0MDhCNjREQjY2RTUwCisxMzogQ0U5NDQ2MUVCMEQ1N0M4REI2QUVCMkJDOEU4Q0UxRDIKKzE0OiAwNkYxNDg2OEY0Mjk4OTc5NDYyNTk1QzBGQkYzM0Y1QQorMTU6IEZFMjJBNzA5NzUxMzI0NjA3NEI3QzhERkQ1N0QzMkIyCisxNjogMEYyRDkzNjYxMEY2RDlFMzJDMEU2MjQ1NjhCQjhFNkYKKzE3OiBGMzJCQ0Q5MkI1NjNENDc1RTk4MzIyRTU4NTBBQzI3NworMTg6IDZFNkZDQjcyOTMwRDgxNDY5RjlFMDVCMjBGRDQwNkMwCisxOTogNDJGRjY3NENCQTZDMTlDNEFEODRENDI4MTYxNzMwOTkKKzIwOiA0MUMxMjQ3NEE0OUI2QjJCNUU3RDM4RTAzQTRERDRFMAorMjE6IEY5RTIzNEUzQ0UzRkNFRDE4NEM3NzVCNjE0MEFENzMzCisyMjogN0VCNUNDNkIxODNEOEIzRUI0RkJBNDcxN0NEODgzOEEKKzIzOiBDQjZDNUQ3OEY5NzIxRTVCRjhFOTgwRjBFRENBRDRBRgorMjQ6IEIzRjIwRUY2QzI2RkQ5MzAxNTc2RDgyREE2RDUwODA5CisyNTogRjkzNzUwMzczNzdEODY1OTlGQjRGMjQxMTY2QzQzRTkKKzI2OiA5OEJBRjlBQjc0MDI0NzlDMkRBMzU2RjVEQUUzNUQ1RgorMjc6IDU4RDFBOEUwREMzQkM1M0ZEOTk1QkIwRjYwRjI1RkU3CisyODogMEE3NUMwRDIyRDI2MjdDOTdCQTJBNzM0NEI5QjhDNzQKKzI5OiA4OEMyOTlCMkY4QzlFREFGODZBMzAxQkJGNTM0QkRBNworMzA6IDc1NUUzQTE3NDIwMjgxRjJDNjE5NTg4QTZCNTIxRkY5CiszMTogMEU1NDBERDI1QzBDMTQ3NDYxMTQ2RTExRjgzMkE2M0QKKzMyOiBEQzVCNTg2OTFDNkJBNUIyNDMwMzZBNDEzMDFCRDdEMQorMzM6IEU5Mjk5QTczMzZDMkQ4QTUxRDZDN0UyQkQxQjhGMDU0CiszNDogNzhDQTZGNjgyRkM2NDlEQjI4OURENjJEMjhEM0EyMkQKKzM1OiA5OEQ5NkVEQTA4MURFNDE2MDgzNjUwQjIyQkQzODY5RAorMzY6IEU3NDdERTk2RDEyMkNFMUVGNkY4OUJERTBGQUU3NUZGCiszNzogRTQ4RERGMkVEREVCNTRDODYxQTFFNDJGNUI2NDlFRUUKKzM4OiBDNjUwQzJDRjFFOTAzQjdGOUM4NTM2QTI0NDZDQTc2MgorMzk6IENGMEJDRENFMEYxRkU3RUI0MDAxNkMxMjMxRkIyOTYyCis0MDogMzdCMUM4QkUzODEyMTQ3RTBENUQxMTVBNzk3NjYzRUYKKzQxOiA0NUREODE4NDU4MTA0OUM0QjI4RkJDMDgwOTY5MEM1RAorNDI6IDExQjBEODg5Rjk2RTY3N0VFQzJFOTM0RTlGN0Y1Mzk4Cis0MzogQ0VDMzBCQzExMjhBOTZDRDUwNkU0MDZCNUFERkFFMTkKKzQ0OiBERTY3RDU0MzlCRjgzRDUzMzhENTNGMzYyRkNGNzlCNgorNDU6IDcyNEZCQjJEOTVDQkVBQkM1NjhBQTQ0OTQxRDlCNkU1Cis0NjogQzYzRjQ4MERBM0M3M0IyQTY2MUYxRkJDM0U0RDFGODkKKzQ3OiAyMjVDRDE4Nzg5RDE4RkYwOUM5ODJFRjM4QUVGMEFBRgorNDg6IEI0OTNERUM3RTNEMTE5MTFERUY4Nzg4MTAyNDUzNjcwCis0OTogMjNFMEIxMkE2N0RGMDI1Q0I3N0NCREY5RTI5NUZDQUYKKworS2V5IFNpemU6IDI0IGJ5dGVzCisgMDogMDA2MEJGRkU0NjgzNEJCOERBNUNGOUE2MUZGMjIwQUUKKyAxOiA1OTdGQTAwRDAzRUREQzgxQzI1NzVCNERENkI2QUVGRAorIDI6IDQ4ODFFNEVGNjkwMDVEQ0I5MTEwQkEzMjdDQUM4NDYwCisgMzogRkM0QTk2OEFGNjVGQ0ZGNDVFNDY5ODQ1NTkxODY3M0QKKyA0OiAzMDc5RDdCMjdBM0RBNUMwODA1QTYxQ0MzNzEwOUVFMAorIDU6IDlCM0YyQzdDMzU4MDYyNzZFMkM1MzgyNkVDMUIzQzg0CisgNjogRkNERkNCMUZEOUZDRjFCNjNFMUFCNjczN0ZDMTU0RTgKKyA3OiA0QTgwMTJBRkQ0MTBEMjlDRTJDRUUwRkQxOTVFRjlEQQorIDg6IDlGNDIwMUM0MTc0QzcxQTNBRUY4RkQ2ODIyMTk3RDY3CisgOTogREUzRTVFOThEQTYwRTg5NTM4OUExQzE3RTNENTBEQTEKKzEwOiAyMEM5MDY0QTA3NkMwMUQxQkMxMjFBNUEyQTFGOTEzQworMTE6IEJBNDFBMzZDRDI0QjUxNTU0NUI4QjQ2NEIyNDRFNUJFCisxMjogMkNDMURFOURCQ0FDNDUyNjlDNkRCQkM5MjAzMDk1RjQKKzEzOiAyRUQyNDk5Q0ZFQjMwMjAzRTYzMDVCM0UxQzMyOUM0RAorMTQ6IEZENzA5RkMwQUI0OEIyMDRDOTVCNzRBRDE4OUM4ODMyCisxNTogN0VEMjk4QjQ3MkM1M0E0Q0I3QTNCQUU1ODg4MDVFODYKKzE2OiBDQjBDNkZFMkJBNzY5MDFGOUVERTc1MjYzNERDQzMxRAorMTc6IDZDNUNBNkVGQ0Y3MTAxODgxNTA3QUI4NzcwQUNGMURFCisxODogREVDM0M1MjA5RTk4QkJGQUE0NjlDNUZFNkMwMkE2NzQKKzE5OiBDRkFDMDQwQzExOThDODI2NDY3OUNBQ0VBQTdFOURFNworMjA6IEVGOTkwOTkyRUJBOEVDQTdFNUY5NUUzQjlENjlEM0E0CisyMTogOEZDMUI2NDBFQjU1QTk2RDA4RDgzRDExODRCNzc3NjkKKzIyOiBFMUYzREZCOUQwNTVCQ0IyRDZDRUQ2RENCODM2MUJGQgorMjM6IDY2MjFGNDcwNTc3MDZGMkEwNzk4MTlEQkMwMTk3QjlDCisyNDogODgyNjExQUM2ODc3OENCRDZBNDZGQjVERDQ2MTFBMzcKKzI1OiBGMzVFMTM2N0EyODNDQzY0MUZCQ0UyNjUxMkE4RjJGMQorMjY6IDVBNEE3MUY2OTA1NkNGQkFCNjdEREE3NzdGNUNEOTQ1CisyNzogQzQ0NkYyQkZBRDA2MEE5RTlFMTdGNzFCMDVBREFCRDAKKzI4OiAxRjBFNTBGNzFBNjdGQUE3RDE2OUE3QTEwMTdGRkQ2NQorMjk6IEE2QTM4NTg4ODQ4OTE1NTA5NDUxQTIzNTREMkFBQzhFCiszMDogNEM4ODc1NzRGMkM1REIwMEVENEZCQUY4MTRBNzAzMDIKKzMxOiAxQjY0Mjk0NDE2MkEwNDlDQ0E5RkQwMjg0RDdBQjRDMworMzI6IDQzMUJEOTI5M0M1QkZEMTJGOTQ4QzI1NUM4Mzg4ODBCCiszMzogMzJDRDIzQTMwMDM5QUUyRkI4MEI4MDRCOTA1MzYyQjEKKzM0OiBFQkIzMEUwN0U3NTE3NTgwQTY0NUNEMUI1RjY2NDE4MgorMzU6IDI5MkYyQkIyOEJCMTcyNjIwQjA1Qzc2MjFCQTM0N0Q2CiszNjogNDZDMDZFMTIyM0YzOTJENTdCOThFRkNGNEM4MzJDMTgKKzM3OiA0NTFERkJBRDJBQTkyMDgwMjA0Rjg1NDMyMjM2QTQyQworMzg6IDc2OEQ2MjA2RDJCM0REMUI5QzI2RkFBNTk3N0E2NDc3CiszOTogMzcwNUY5Q0VCRkU4RjkxRUNFMDdGODQ1NzhDMDU0OTQKKzQwOiAwODVFQjBEQ0YzNjBGNTQwM0ZGMUU3NDAyQTBGN0EwMworNDE6IDJBMEQ1NkYyRTdDN0ZDRTMwOTVGNTExQkRFNEFEOUEyCis0MjogQThBQjJGMzY0M0E2MUFGMTY0Rjk5RkVGQUUyQ0UxQjQKKzQzOiBFNzNGRDRCMUZBRTBFNUU2QTZBMzFDQ0MyQUY5NjM4NgorNDQ6IDU3OEU4NEZEMUFBMTZGRjM1MDM3NEU0RkQ1RkRENTI5Cis0NTogRUVBRTMwMURENTcwODQ4MDFEQjAxRjhCOUM0MDM2Q0UKKzQ2OiAxQzQ0QTkzQjQwNDI5ODMyNzg1N0Y3MTk2MkUwNjA0QworNDc6IEI1RjY0Q0Q1ODM1Qzg1QTY4REMyM0UyNkQ0QjhGRjgwCis0ODogNkM2Rjk3ODUwQTg3MDg4QUYxOTVEMDUwMEIzRjVENzgKKzQ5OiAwQkFCM0E2MEEyNUNEMUE3NTBDMkM0NDNBQTAxQzU3QQorCitLZXkgU2l6ZTogMzIgYnl0ZXMKKyAwOiA1QTZFMDQ1NzA4RkI3MTk2RjAyRTU1M0QwMkMzQTY5MgorIDE6IDVGNzIyOUQ2QUFDRjBEQUZFM0I1MThDMEQ0QURCQUI0CisgMjogOTY0NzdGNDdDMEE2RjQ4MkFDNDAzNkQyQzYwRkFBRDgKKyAzOiA3Rjc5MUQ1NDkxNEYxMkU5RjBEOTJGNDQxNkVGQkVDMAorIDQ6IDg3RERCMTk0MTVCRURDNDJCRDM2MUZFMzgwNTUzQzVBCisgNTogOEVEQjJBMDlEQzg3MzFEQjc2RDlGNjdBMDNBQzREOUUKKyA2OiAyNjlBN0MwOEMyOEQ1RTREOTM1NUREQkExNjFGODYyRQorIDc6IDA0MkEzMzk3QkE1MDI5QzQ0M0RENzY3NTUwMDhEQjJBCisgODogNDY5QzgyQTk0QkM1RjdCMkRGNTdGMENFMTcxNkVFNzQKKyA5OiA1QTg0QTkzMDc3RkExOTE0NjA3ODMxMDAzNUY0QjdFNAorMTA6IDI4Q0FGMUMwRDgxMUY4NkNGRDNDNUVGQzMwREY3OUY5CisxMTogMDVCNTc1RDA2QzJENTkzQjcwOEY3QzY5NUNFOTc1NzEKKzEyOiBCN0U4Q0FDRjBBMEJEN0YyRjVEQTBCMDlDQzhCOEFFQworMTM6IDBBRERFOTBGNjZGMUJDRjM4Q0VDNjNFRkJGOURCRDQ2CisxNDogOUJGOTlFN0Y1QjhGMTc2REQ2ODZBRjAxN0Q1MTk2RTIKKzE1OiBBQkMxODlFRTgwRDRBNDU4OEIzRDU0RERBQ0NEOTc3OAorMTY6IEE1NzQwNTM3ODU4MEIxRThBOEQ4Nzc3OTEzMDAzNzRDCisxNzogRDFFRjAzRjcyRkFCM0RCNjgwMjJGQzYwQTJDRUMxM0QKKzE4OiAzRDI0MDYyMzFCQTE3RkY3Q0M5NzNDNUUyMDM4NzJERgorMTk6IEMzRTA3MjMzQkQxMDE1MDI5NTNENjE4NjAwMTgzOEU0CisyMDogREMyODFDMENFMDJBODMwOThDODBENkM5NDYzRjM0NDkKKzIxOiBBOTIzMDIzRDIzOTBCMjIzMEZDRTkyMTc3NzZBQUFGQworMjI6IDkyRTI4RTY5MDA5OTU5RkI4NDA0NkM1RUQxQjY0RDFBCisyMzogQ0VGOEY2ODRFQzY0QTMxQzY1MTI4MENEQzk0MkRGQzIKKzI0OiA1QTk1NDY4NEIyMjY5MUY5Q0ZDNjA0NDJBNjU0RUY2MQorMjU6IDU2QTM4QTBEOTMxODhCQUE1MERGQUYyQ0I3OTlBNzZDCisyNjogNTQ1MDMzNDBDNURFMjY2NzlBQTVGMzUyMTVERTg1RUEKKzI3OiBFNzRCRkFGNjQ5NDZERkQ2OTk1ODNGRjlDNDdBMUVBRgorMjg6IDAxRjIzNEY5ODY4QjA4NUU5QjFBMkVDODQ3MzhFMkRCCisyOTogQkJDQTNEQUVBQjI0RUYyNUJDN0I2MjNGNEQ5RkQ2ODAKKzMwOiAzOTU2Qzg4MEY3RjdEOTRBQkMyNTlEM0Q4NjE1N0YyNworMzE6IDQ2NzJDMjE0OTA1NEM4MzlDNTM3QkRBMUY1QkJGOEY0CiszMjogQ0YxRTlBQ0JFQjM5MTA2MjU5M0JEODhDNzk0OEY2NEQKKzMzOiBDQTVCNEU4NjdBRTlEOEJBMkQ0NDE2QzkwOEVCOTlGMQorMzQ6IDM2NjY2MTgwQzc2ODYzNkNGMTcwOENDNUM4NUE2ODc1CiszNTogNTNFMzk2RDI3NTUyMTg2NzU0OTRDN0FBNTE1QTIzMTAKKzM2OiBDMkI3RDMxQTU5QTYwMkE2NUUxNTVGODAzNTNEQjgzRAorMzc6IDBFQkNFMTlGRjZGQzAzRTMyN0EyNjAyRjg1OEQ4MzVFCiszODogRTQ3Q0MyQTVFNkM3RkVGMTg1ODA2RTJDRkIzMDREOTEKKzM5OiBENjFGMTVGRjc1RTBGNTIzRkEzODcyMTMyQTA5QUY0MgorNDA6IERDQzI1NDk1MDUyOTgwOTg2QUUzMDc1NkJBMDQxN0RBCis0MTogNDUxQkY1QjdDMUYxQUVEOUYzRDVFMThBMzkxRUE0REEKKzQyOiAxQjZCMTA1QzU4MDA4M0QyM0YzQThFQUNFNDFCNzk4NAorNDM6IDhDMkY4NkNENkM4NkI2N0M5RUJEQ0FGQzU3MjBFNEY4Cis0NDogNDEzNjBCREIzRTRDNjgzNkJFMEQxNUI2NTlDRUM1QUEKKzQ1OiBGOTcyMTA0QUQ4NTFCQUUwQUQ5NjM4MTdBM0YwM0Y1OAorNDY6IDM5NjA5NUY3QzEwMkI1QTIzODExMEREM0Q2RDRBREZGCis0NzogRjU4MzkxQUVCOUE1RDhCQjMyQTMwNTVCMzc1NTZFODEKKzQ4OiBBMjM3ODlCMTQ2Q0U4OUM4NzZGM0MzMzE5MDEyNjFEOAorNDk6IDI2ODRBRjM0NUM0QjEzRkExNTRFOTNBM0UyQ0QyQTkwCisKKworQ2lwaGVyOiBibG93ZmlzaAorS2V5IFNpemU6IDggYnl0ZXMKKyAwOiA4NEJGNDRBMTQ0MkI4MjE3CisgMTogMzk4MTIwNUJERDIyQzAxRQorIDI6IDBBQ0M1Q0NCQTExOENEMDcKKyAzOiBERjc2OTgwRDVFMDg5MTQ1CisgNDogQTg1MDNFOEQ4NDlDNTk5RAorIDU6IDVFNTY1NzQ2ODcwMzhGNUYKKyA2OiBENjMyOTZCMDM2OTk2RjUwCisgNzogRkQyRkQ3QTA2NjlBOUU3QQorIDg6IEJDNjU4MzcyMEE5NjI1ODUKKyA5OiA0QjM4QzI4NTYyNTYxMDNFCisxMDogNDhBNEZBMzU0REIzQThBNgorMTE6IEVGOTdDMzI3MzRCRTJBMTAKKzEyOiBBNzQ2N0U5QzcyOUY4MTIzCisxMzogMDREMjUwN0Y5QzRCNTg1NAorMTQ6IDU3Rjc2QTRENDA2QjIyRDEKKzE1OiBFRDBBM0IyNkQ4NDJDOEYyCisxNjogMDQ3Q0I0NTdFOTczMENEMQorMTc6IDlGMTNCQjFBOTdCRjVFMkYKKzE4OiA2MjhDQTRGNzcxNjFDOTVBCisxOTogMzdDN0Q4RUY3MThERkQ1MAorMjA6IDJDOUE5QzY1NUI4MzlCMUUKKzIxOiBBQjIyMkQ2NjU3OURCRTBECisyMjogNTc5NTBDREVBRDZGQUU4OAorMjM6IDY3QUFCMzY2OTQzMUU0MDMKKzI0OiA2QjM1Qzg3MTQ0RjZCNzQ4CisyNTogOTRDMkU4QTFEQkM5NjNDMgorMjY6IEVDRDY4RjU2RUVEMUY3OEUKKzI3OiAyRTdCRTBCODY2QjFEM0M3CisyODogNjY3MURDRENCM0Q4RUVENAorMjk6IDhBQ0JFN0EyRjc3RkJCMzUKKzMwOiAwQkYwQUM0RUFFMjg0RjkzCiszMTogMjk5MjhBRTVEQzhBNTdDNgorMzI6IDg0RTQ4QzI3RTIxMjY0REYKKzMzOiA0RUYwRTk0M0U0RjQ4RUQzCiszNDogREExNTVCRUZCRkZEMjYzOAorMzU6IDYxMUVDODNFMDkzMUZGQkUKKzM2OiAzQkRERUMxNUJDNTQzQTkyCiszNzogRDdCOTU2NEJCQUVFMTlGQworMzg6IERFNDQ5MDdFOUYwQTFGMTEKKzM5OiBDODYzOEMwNTk0RDEzNjE0Cis0MDogOUU2N0YxQjE1NDE4QkYxNAorNDE6IEVERjUzMUEwODNGNzI4NTIKKzQyOiA3RTVGOEY5QTcyODkwQkIzCis0MzogMkEwQjA2MEUzRURERTlDMworNDQ6IDlCNEIwRjZGRTY1MTExMDYKKzQ1OiAzMjg2NThGMjIyQzdGQ0U0Cis0NjogRjZGMUI1MEI0RjlGOUM5MworNDc6IEE2MjA1MTlFNjk5NTJGNUUKKzQ4OiAyNERBMjRERkU5NkFEODE4Cis0OTogMjI2QzQzNDM1RkJEQTM0QQorCitLZXkgU2l6ZTogMzIgYnl0ZXMKKyAwOiA0NkNEQ0M0RDREMTRCQTJFCisgMTogQzA3OTY0MUJENjU4NEU1QQorIDI6IDM4ODI4REY4QjRDNDkyMEMKKyAzOiBCNEFCQ0Y2Qjc4QTcyMUYzCisgNDogOEU3RTI5MTRDQkJBNzA4QworIDU6IEMwRUJFNzAwMkM4ODg0OTUKKyA2OiBDNjBGNDA0REU3Q0Y5Qjc4CisgNzogQjI5RTg0M0UxNzcxRUYyNgorIDg6IDk4MzAzMzM4NkNBNkEwOUIKKyA5OiA3NkYxRjg5QUZEQ0Y3MTMwCisxMDogQkVENEUyMTE0RjQzNzZGQQorMTE6IDg3OUEyQjlEMTlBRkFCODcKKzEyOiAzNjYyMDFCQzg3NTMyQUU1CisxMzogNkY0MDk1ODBGQTkwN0E2NAorMTQ6IEY3QTIwMkYwMEEzODg2M0UKKzE1OiA5OEIwQTlDNzlGRkMyN0IxCisxNjogMUNCNjhEOUJCRjhBMUE4QQorMTc6IEMyMUEyQzU0RTU0NzFEMjMKKzE4OiA3NkE4MUMzREZDMTQ5OTM0CisxOTogQzdBMDYyNzQxMkZDMzIzQQorMjA6IEEwMzQ2ODRENzA1OEU3QTYKKzIxOiBBQzg3NzIyRjI3MDI5QkMyCisyMjogMzZBNkMyQUYxMDI0NUUzRQorMjM6IDFGODVCOTBEMTEyMTdFQkUKKzI0OiA5QzJBMEMzODNBNEFCN0Q1CisyNTogMTFENUM2ODkwMzlDQTE3OQorMjY6IEIwQjM4QzcwNzdFMTQ1MEIKKzI3OiBDNTlDN0RDQ0MzQjhBMUJCCisyODogOUJDNTM5RjI5MjA4QUMyNAorMjk6IDg1NDZGMTdDNzdDNjBDMDUKKzMwOiBCMTg5QzNFOTJBRjUzODQ0CiszMTogM0M3Njg5MTYzQjhEMjc3NgorMzI6IDZBRkVCOUEwNjcxMTU2QTgKKzMzOiAwNTUxNEUzOUYyOTkwMDA4CiszNDogQzk0MUUzMUEyQTFGNDJCRgorMzU6IDg3QzM3NzdDNzRBNzMwQTAKKzM2OiAyODYxNjY3NzU1QzhCNzI3CiszNzogQUY3NUEwMzEyNDMzQjE1MQorMzg6IEY3NjkzOTMzMUU5Qzk3OTIKKzM5OiA4MTlGRjhDODFGQzdDOERDCis0MDogMzFFN0IwN0VCMDNEMTcwRAorNDE6IDY5NkU1RUMxQTc0MTE3MEUKKzQyOiA2QzVCRjBFMEJBNDhGRUMzCis0MzogNkQ3NTFCQ0NEQzQ3NTc5NworNDQ6IEJCNUE5MUQwQ0E3RTYwRjQKKzQ1OiA3RjdFQzA1MzFDODhCMTRDCis0NjogOUYzMDIzOTI1MjlCNzBFOAorNDc6IENBQzlBMUE4OEYwOUFDMUQKKzQ4OiAzOUQ1NkE2NTJFMDJENUIwCis0OTogMTM2NDFENDJCQzEyNjUxNworCitLZXkgU2l6ZTogNTYgYnl0ZXMKKyAwOiAzNzNDNjZCQkE1MEVCOUNDCisgMTogQTRFOEM2MDJBRTNBMkNFQgorIDI6IEE1OUYwOEJBNzg1MDJGMzIKKyAzOiBEMEQ0OTY4MDE1RjRFNEZGCisgNDogMEQzQzJGMjkxRTZDMkVFMAorIDU6IDNGOTlGNURBREFENUZEMkMKKyA2OiA1QkE0MUVDMUE1MDYzOTZECisgNzogMEJERTNCNUI1MDU5MUQzNQorIDg6IDVDNEE2QUVGQTY5QTExNUQKKyA5OiBBREFCRkU5NkQ2RDE1OUU4CisxMDogRjk3RjBCOUM4OEFDRDVDMAorMTE6IDg4ODJBMTYzRjBGMDJCQjIKKzEyOiBGMDA1NTZDOUY1QTU2QTMyCisxMzogMjU3NjE1QkVDOTZDQzIyOAorMTQ6IEQ1OERBRUM1NDdERDhCODkKKzE1OiBFNjc3RjQ5NTNFQzQ0MDk3CisxNjogMjAxNTZEMDY2REMzNzAwMAorMTc6IDZGMThFMDFDNkZERjk0N0UKKzE4OiBDOERGRjI0RjEyNjIxMjM3CisxOTogMDMyRjkxQzUxMTlBRTMwOAorMjA6IDM5NDE5NEFEOEJDMUU1Q0YKKzIxOiA2RjI0RTkzN0YzOTI1NTgxCisyMjogMDg2QTQ1MTBEOTU3NTlGMworMjM6IDA3MzIwNEJBREYwRUU5NDIKKzI0OiA1QkM4QjhFNDAyRDkwRjQzCisyNTogQTEwQjdFOUQwMUREMzgwOQorMjY6IDIyQzBCMTgzQUZGREE1MDYKKzI3OiAyMTYzMDZBRTZEREJBRjNGCisyODogRTI3NUUxRjUyNDMwQTFGRAorMjk6IEMzQkRCNDlENTg4RDMxQkIKKzMwOiBCODYwODE4QzU5MjNCNjg4CiszMTogQkUxQkM3QTQ0NEIwRTE0MQorMzI6IEU0QzRCNjc5MDBEQkM4REIKKzMzOiAzNkQ3QjdFQ0I2Njc5QTlDCiszNDogQzFFQUQyMDFFRTM0QkVGNworMzU6IDlBQkJDODc3Q0U4MjVCMTQKKzM2OiAzQjIxMTEyMUMwQzNDMDlBCiszNzogQkUzQjM0RkYyRTgzRjVBNworMzg6IDQ2QzJCM0U2MjhBNTNFQUQKKzM5OiBCN0U3RERFMTZDN0RGRjYyCis0MDogM0M5QTE0QzQyMjZFQkNDNQorNDE6IEM1RkQ0NjI0MkRCMjk3MDQKKzQyOiBENDVBOTY3MjNGRjYyMjAxCis0MzogQkIwMTVEMTA4NzhDRjcwRAorNDQ6IDcxREIwMjFCRTM5OEQ0MUEKKzQ1OiAwNkY1MkQyMzdGMDZDMjYwCis0NjogMzU1MkY0N0U4Q0NGQzczRgorNDc6IDc2OUUzMzgyOEFENUQ4OEUKKzQ4OiA2NTk4NjFEREYwODBBQTY3Cis0OTogQ0Y3QTEzNzgyRjMxNzM0MgorCisKK0NpcGhlcjogeHRlYQorS2V5IFNpemU6IDE2IGJ5dGVzCisgMDogMjU2MDA0RTFGNTVCQzBDNworIDE6IDJEMzg1QzE1MUE2OTFDNDIKKyAyOiBGOTNCRkVBNzU4QTdEREI0CisgMzogMkE5MDVEOTdDMENBM0U0OAorIDQ6IDEyQzdDMjc4N0I5MTNBRTYKKyA1OiBGQjI0QjFGMzI1NDlFRjU5CisgNjogMkE4QkZGODY3RkI0RkY3MworIDc6IDU2OTIyNDM1MjZDNkJBNzcKKyA4OiA0Q0Q0MjNBREZDREQxQjZDCisgOTogOUI5OUFGQzM1RUIyRkVEMAorMTA6IDQxNkI0QUE0RTA3REE3RjQKKzExOiA0REJDOTA1MkFCRkY5NTEwCisxMjogOEFGOTQ1N0Y4RTU5OTIxNgorMTM6IEJDM0NBMkIxQzcyNjczOTUKKzE0OiBFNEJFMzFERjQyMjgyRjdBCisxNTogQjM0NENBOEFBNTdFOUU0MAorMTY6IDU3QTFGOTRDRDJGNDU3NkQKKzE3OiA5NjE3N0ZDRDI4QkZGMUJCCisxODogNzhBMUY2M0EwRUJBQUMzMworMTk6IDVGM0ZDQkNENzQ0MkI2MTcKKzIwOiBENkY3Q0Q1RUNBNjg4OTY3CisyMTogRDkyRURGNzBDQkRFNzAzRgorMjI6IEUyRTJDMkVFNUQxOEU1OEUKKzIzOiA0QkYwMDQ3OENCNzgzM0MzCisyNDogRjk5MzZENTUwODE1RkU4RgorMjU6IDE5QTNCMDdCM0U0N0Q3RDgKKzI2OiBBQ0E0NDFGMDk5QTdFMzBDCisyNzogRjcwMTgzRjE5OTk4OEUzRgorMjg6IDBBNDFGQzIyRjM2OTMxMEEKKzI5OiBBQkZBRjQwODUzQTRBMzhDCiszMDogNkI1RDI5REIxMTU1RDk2QgorMzE6IDBERDBDMDhBMjc1NjFENjYKKzMyOiA0QzU2RTIyMjkyRjE3QUEzCiszMzogM0Y5MjVFRDY1NjEzREY0QQorMzQ6IDUyMUI0Qzk3MDgxREM5MDEKKzM1OiAyQjFFQzNFMUM4Q0Y4NEVDCiszNjogMkE0MTI1NTZGNDJBNDhGNgorMzc6IDBBNTdCOEE1MjdERkU1MDcKKzM4OiBFQjU1QzlDMTU3RTNDOTIyCiszOTogNkU2RDZFOUFCOTI1RUQ5MgorNDA6IEE0QzVDOTBBMEQ0QThGMTYKKzQxOiA3RjlGOUY2NThDNDI3RDU1Cis0MjogOUE1MTM5OTk0RkYwNEMzRgorNDM6IDkwNTQ3NzFGMDI3RTI5QkMKKzQ0OiA5MDU0M0U3QkFFRDMxM0JECis0NTogNURFQzFFQkU2QTYxN0QzNgorNDY6IDE5QUI2QTcwOENEQjlCMkQKKzQ3OiBCQUJCOTdCQjVDRjlENEU0Cis0ODogMkMyQURDMDVBRjI1NTg2MQorNDk6IDUyMjY2NzEwMTUzRTNGN0UKKworCitDaXBoZXI6IHJjNQorS2V5IFNpemU6IDggYnl0ZXMKKyAwOiAwNEY2QjlCMThFNjgyOEMxCisgMTogQkVBNTBEMTY1RTUwRUEwNAorIDI6IDZGMzcyOEZFMTlGMDlCMDMKKyAzOiBDNjgyQzI2Mjc4QjM3MkZFCisgNDogNzhCQ0M4MUUxNDRFMUIwRgorIDU6IEI2Mjc3NTcxNjM2NjQ1MEYKKyA2OiA1QkM0OTY5MEY5N0NCQ0ZDCisgNzogMzU5NDE0RTlFQUNERTM3OQorIDg6IEQzMzMxRDhFQ0JGNjg0RkYKKyA5OiAxMzEyOUZCMTBFQUZDODJFCisxMDogN0YyOTIxODQyMUNDNEI1QQorMTE6IEZDMjI1QTRGMzFBNzUxNjIKKzEyOiAyOUJGOEJGREE4QTE1RDM3CisxMzogNjg1NEFDNUJEOThFRUU5NQorMTQ6IERFRjA1QUI2RDEwMkU5OTIKKzE1OiAzMTdDM0VBNkYwNjAwMDE2CisxNjogRDZGMzY1OEIyRTgwQjc3RgorMTc6IDdDMURGN0VENkM5MkMyM0QKKzE4OiBGODY2NTE0NUJBRkUyOEM1CisxOTogOUQ4MDU5QzM0Qjc5RjBFRgorMjA6IERDOEQxNjE3RDNFQkM3REIKKzIxOiAyRDhGRjU5RkNBMTlCRTZDCisyMjogNUM2OTU2NzQzNzE1RUExMworMjM6IDkxMTYwQkUxRjRGM0Q0QTAKKzI0OiAxRDQ4MkMyMzU5RUM5M0Y1CisyNTogOUMyMUQxQTM3NTVBNzI1MQorMjY6IEU0OEQxQkI5MjZENTFFNjMKKzI3OiAwOEEwNTQ5NDYyNjNGNjE3CisyODogOUM5MDBCQTM3MTk5QjdDNworMjk6IDBDNkM1ODc0M0VDODMwODIKKzMwOiBCMjQxOTdFRUI1NjAzRDNECiszMTogQ0Y1QjczNUY4QTQ5MkU0OQorMzI6IDMzN0M1MDQ2OThCQkU1NTMKKzMzOiAzQTJCQ0NDODhCRTlFRDUxCiszNDogRjNFOTI0MTc0MzIwM0FCRgorMzU6IEI2N0JDQzYyNTgxNUM1ODUKKzM2OiBGOEU5NkU0RUVCQzI1NjZDCiszNzogRTI3RDE2MjAwNkM2N0M4RAorMzg6IDA4Q0U4QzFBNUUzQzE2OUEKKzM5OiAwQ0Y4QUQwNDEyNUVGQ0Q4Cis0MDogNjcxMkY5RjA0NDg2NEZBQQorNDE6IDBGRDQ2NUFGRkQ2NDA4NUUKKzQyOiA2QkE4QzgyQjM5NzQzOTFGCis0MzogQTVGRkYyNENFOTY1OTM1NworNDQ6IDA5NDdGODFFMUVCNDk3MEUKKzQ1OiBERUE5NjZDQTUwMjQzMDY3Cis0NjogMUYxQkU0ODY2RjQ4RTM5RgorNDc6IDAzQTdEN0NFNzkzRjUyQzcKKzQ4OiBBMUZBREUzRjgwMUI0MTRBCis0OTogREU3REE2RDE0QTUwRTMwNQorCitLZXkgU2l6ZTogNjggYnl0ZXMKKyAwOiBDODcwNEFCQkRBOTYyNEVFCisgMTogQzcxOUM2NDVFMzAxRkMxNgorIDI6IDMyRDgyNTUzQjBFMzVFRjgKKyAzOiBDNjNDNzdFRTZDMkE2RTM2CisgNDogRjg0RURBMUU3N0VDQjVGMAorIDU6IDM4MkMxRTcyQUExRkQxQkMKKyA2OiA2QjAwOTM5RjUzNUY5QzgzCisgNzogM0NFMDgyNUFFMTBDMkIwRQorIDg6IDFGOUU3NzM4NjAyQkREMEEKKyA5OiA5MjczRTc5MzNDRUQwQjBBCisxMDogNENBQjQ1RUVBNDVDMzJEQworMTE6IEZEMDIwOEM2QTg5RkI1MTkKKzEyOiA1MjBEOEU2OTEyRTk1NTFECisxMzogNUI4ODY4NDU0NDg2OEJENQorMTQ6IDMyQUEyQThFRTU4MTM1RDQKKzE1OiAyODEwNDU3MDJERDM4NzY2CisxNjogMjZENjhFMDczQzk5Njc0NworMTc6IDIzREZCOUUxNzREODYxOTIKKzE4OiBFMzJGRDVBRjUxMDFFNDVDCisxOTogM0RFRkI2Nzk2NzBBMTQzQworMjA6IEU2MTYzOTREODU5QkZFOTQKKzIxOiAyMTdCOUJFMEVENDdEREFECisyMjogNEY3OTAxQTU2MjBFQTQ4NAorMjM6IDY2NTRDMDQyNzgzRjU3MzcKKzI0OiA3NTJBQTc0QkFDRjlCRTY1CisyNTogMkZBRUJFQjhCMzI1Rjg5QgorMjY6IDZGRUEwMjBCMDU4RjMyQ0IKKzI3OiAyQTMyNjgyQTM2NjkxNjY1CisyODogMzM4QzhBQjYyOEEzMDEwNQorMjk6IERGQUU5REQwODJERkUzOEMKKzMwOiA1MUI0NTFDMjlEQkExOUM0CiszMTogQTI5OTNEQTlCOEMxRDVGRAorMzI6IDI0RDkyRkEzMzFFMkY5M0EKKzMzOiA4MjFBOTYxQzA1MjRDODlECiszNDogQTA3QkYzMDVFRTg5NjREOQorMzU6IDk4MTY1MjM2MTI2MkM1Q0UKKzM2OiAzREQ3NzBDMzc2MUI2OTVCCiszNzogRjM2MzU5QUZFMUM4QTA3QworMzg6IEJFQkM2MjlCODkzOEY0QTMKKzM5OiAyRTMxREM1M0Y3Nzg5OEIzCis0MDogNTJFNDEwNEM0RThFNjkwMQorNDE6IDc1QzkxMkRBNjEwNTI1RUEKKzQyOiAyRjI4MEY3MDk2M0Y4MkRFCis0MzogRDdFM0ZDQ0E3NUFFRTVERgorNDQ6IDhFQkM3RTgyNUExNEEyQkIKKzQ1OiBDMTEzODcwMUY2NDE4N0RCCis0NjogMTI5NEUyMUVEMjU1MERGQQorNDc6IDU3NzgyMEQ3NzJCRTJDOEUKKzQ4OiA0OENFOTNDNDZCRkQzM0NECis0OTogM0I1MEQyNjQzODJFMDNCQworCitLZXkgU2l6ZTogMTI4IGJ5dGVzCisgMDogMjM2Q0YwQTIwNzU3NkU4RQorIDE6IEFDMTJEOEYxQUU1NUYwNTcKKyAyOiBDRUM0MjMwRjc0N0I1NDdBCisgMzogNjFFQTFCNTEwRDAzM0IyNgorIDQ6IEUwNjRGNTE5OThFMjA4MDQKKyA1OiA2MjQ3Nzk3REYwMkJBRUY3CisgNjogRDI1QTc2NjI0NDA2M0E3RgorIDc6IDJDMkIzRkREQTBFMDcwNjcKKyA4OiAwNEVFRDY0NkMzRjZGRjkwCisgOTogMDU0ODdFNzcwMjg2NUU0QQorMTA6IDZDMEE5MkFDMjNFRDA3QzUKKzExOiA2RTU0RTc2OEM3OTdGNzk3CisxMjogQTdDNTNCRjdCMjUyQTg4NAorMTM6IDczMTA1Mjc5NUUxMkM4MEIKKzE0OiAzRTREQUQxNUE4MjZDNDNECisxNTogMTBCMTE5MUI0MDEyQzJBMAorMTY6IEFERDI0NEIzM0FFQUVGN0UKKzE3OiBGNkNDN0I1RjA4ODVFMDU2CisxODogRTIzNDg5RjNCN0JFNDM4RQorMTk6IEIwQzI3NjYxNjkyRkRFNEMKKzIwOiBFODFDRTAxNERBNzY5RjA3CisyMTogN0E4QkUwRDJENTI2MjNBOAorMjI6IDA4MkY0NDRFMDBENUUxMjcKKzIzOiBBRTQyRjY4NEFERDFEQUM3CisyNDogOTA2MUJBNjg2Rjc2QTQ1MAorMjU6IDlCRUI3MTQxQjhGNkY1RjAKKzI2OiAzOENCQTk5MzNBRUY4NUU3CisyNzogQzY2RjQyNDU5MDFDQjM0MQorMjg6IDg2NTlBQTQ3RTZCMDZCQzMKKzI5OiAzNTdBQjIwRENFMkREQTNFCiszMDogMjM2Njg5QzJGMzY5NzZEOQorMzE6IDMzMUVGRDdENUNGN0FENTAKKzMyOiBDMzczNTI2QzJENDREQjgwCiszMzogNzlGN0FDQkE3NzBGNUM5MgorMzQ6IDY0MzI1QzVBNjdGMzY0RjYKKzM1OiBERjJGNzIwODI5RkYxNjk0CiszNjogOUVFMTdGNDdFRDQ4N0JDNgorMzc6IEM0MTA2Nzg5NkFGNENGQzUKKzM4OiA1Nzc2RTFFNUZCRTU5OTMzCiszOTogMDdBMDVCMTUwOEI3MzlFMAorNDA6IEIxOUVGNzJBNjVCM0MwMzUKKzQxOiBGOEJGNUZGNDA5NUMwMTczCis0MjogN0YxMjI2QzZDQTdCNDA3MgorNDM6IDhBNkM4RjI2QTk3REQzM0IKKzQ0OiA2Mjk0OEE5QTYyN0U5OEFECis0NTogOUVDNThFM0Y4QTQ3N0QyMQorNDY6IEE2NTZGMjg1QUUwNjg0QjQKKzQ3OiA4NDg5NjkwNjgxQTUzRUU1Cis0ODogOTQwOTE1RTczMzcyMTgzNworNDk6IDEyMjE5NTZCQ0VFMDE0M0IKKworCitDaXBoZXI6IHJjNgorS2V5IFNpemU6IDggYnl0ZXMKKyAwOiA2NTMzRjcwNDFENjlCOUI4ODNBNTMwNTE4MEE4NTUyMAorIDE6IDQ5NjY4M0Q2MzU2OTUwRThGNEFGNDU4MjYzMEJFNDZDCisgMjogQ0E0MjE4MjhGQ0ZDRUYyRjA0MkY2RDgxRjE0Q0JFNzYKKyAzOiA5MkRCNjdGMkYwNTc4NThGQzgwNkUwNzFEMjM5RjI0NQorIDQ6IDIwM0NERkUwQzM2NDM0QUVEREJFMkRBNjhBREM1RUYwCisgNTogOEVCMjNCREJENThBMjc5QzFGM0JGNzUxOTlGQzlFMzQKKyA2OiA4RkE4QkI0RTc3MkUwOUREMUVGQkUwMzA5MEU3N0ZGOAorIDc6IDIwMTg4MDNCRkQ5MUQxNTdBRTIwQzZFOEZGMTg5NEIwCisgODogMjY3MzE5NjM0Mjk0RjA2ODRBRkE3QjI2RUI2MTJCM0MKKyA5OiAxMDg3NDVFMUYyRTgwODY0RDkwNDM1ODJDRDU1NTBFRQorMTA6IEU0RjlFRkU1QTZDNDI2QkI3MTlFQTE3MTc0ODkwRDBBCisxMTogRUZGRDRDQUU2NDk3NDBCMzMwOTY5MkFBMTlBQ0EyMjcKKzEyOiBFQjkwOUU2RDA3ODlGNjQ5NTM4RTdFQTE2ODZGQzBGOQorMTM6IDAyMTY4NTFFMjNFREFFNTJEOTk2NDkzOURBMEE3NDkzCisxNDogRDZBOUNEMzQyOUQxNjc5RDI2QTk1OTlFQkRFNTQwOUEKKzE1OiA1RENERUNBNkU4OUE3RjBFQjQwNjQ5RUZERTY0MjBBRgorMTY6IEI3NEZENTU2QjA2QzA3QkE4RDlFNTE3MzQ4Q0M2NkNDCisxNzogOUEyMkNCNUI3M0VGMURERTY4QTVBRUYxQjE1MTBFQ0MKKzE4OiA3N0Y3ODU1NzE0M0UwOEE3NDQ5QTc1QTEzMDk4RkVGOAorMTk6IDU0OEZFNjcwMEJEMTdEMEFFMjQ3QjA3QzJGMUFCMEU3CisyMDogQjdERkQ4Q0I0MjhBMzY3MzNCQkU5QTUxQ0Y0NUMwNzIKKzIxOiBFN0U4QjdBQTJEOTNFM0RFOTlDNTQzQTQ3M0NDNjc2MAorMjI6IDNGQTU4MjEyNDhCMEYwQUVCNUNGMDBFRUY3OTU4RjVFCisyMzogMEE2NTVBQzZDNTFEQjMzODQ5QkNEQTcyREFFMTA2RjEKKzI0OiA5RUU5M0VBQjAxRTFBMURDNTdCNjk4QzI2NjQ2OTQ4MQorMjU6IEE3RDM5ODcyMEUwQUJBMkQwRDE0M0Q4MzA2RkQ1QUM4CisyNjogOThBNDZDOTQxMjVCRDJFNTYwMEJEMjZFRUE0MjBGMkEKKzI3OiBGNDc4OUVEQzNDNTBCQzQxODY4MTZGMTRBODY0MDNEMQorMjg6IEY4QUZCQThFQzY1MkVGREMzQUY1RUE1Q0ZFMTQzRTE2CisyOTogQ0VFRUJENEI2NzI0QTMwRTE4NTlBNUI0RUY5QjJCM0QKKzMwOiA3NjY3MTVCNEM0RkE3Q0Q0QjM2NUEyQTY3Qzc5RTQ4QQorMzE6IDkyQzVFQjdCRTYxMTU1RDc5REUwQTZGNTU3MTVEQTIyCiszMjogNDJDRjBDOUIyQkFBQ0IwODVDQjE2MDM2ODgwMzdEMEYKKzMzOiA2QzRCRTgxNkY3QjU3M0NDRkE4QkI2RTM5OUVFQjE3RgorMzQ6IEI2RDdFNjA2Q0M5OUQyNjdFQ0NGREJDMDA2ODc4NjkxCiszNTogMjA0OEI1OEI3NEY5QTcyMUIyRTMzRDJFQjg2RjU5OTEKKzM2OiAzRTQ1OEMxMDE1RUNCMDhDQzdCODk4MDEzNUU3MTg5MworMzc6IEU0RTI4QTAzMkNGMkYzQzgyNjJDRDRCQkU3QTRDREY4CiszODogNzAxRUFBNDQ5QUQ5RTVBRjgxREYzRjQzNkFCMjU2MjAKKzM5OiBEMUMzRkI3QzE2RjUyNDk1MDNFQjM4OUE2OTJCMTEyRgorNDA6IDcwMTI3OTBEQjY1NTI2REM4N0Y5QTJCRjBGQkI1NjY0Cis0MTogQjc4MkEzMTA0RkZFNjVEREIzNDBGNzEzQUNGRkUyNUIKKzQyOiBBMTU1RjAzM0U0NTM2RkIxMTc2RUJERjlFQjVGRUM0QworNDM6IDg4OThCQ0M3QTAwODEyNzAxNDg1MEQ1NTI5MzI3MzUyCis0NDogOEY0QjNCRTE1MEZBQTAzNzFDREU2OTg5MUU1MkEzQzkKKzQ1OiBEMzcxQzgyODNGNjhERTk4M0M5OEQ5OEE3NTYzQjkzNAorNDY6IERFQjY3OTkxNUU4RjBEMEI2NUIzNzkxOEJFNDU5NkY3Cis0NzogODRENzRGN0ZBMTk5MzA0QTQ3QkIzN0I4QUY4OTNDRjAKKzQ4OiA1MzY3QjAxODc0OTY1MzlGNkRGNkNDRTA5NjVCMzc2RAorNDk6IDRCOUM2MDExRDQzQ0YyRDhGQUZBMkU3MTA1RDg1MDI0CisKK0tleSBTaXplOiA2OCBieXRlcworIDA6IDZCQkY3NjNGRjMwODc2QTRCQkI2OEE3RTdFMjkwNzcwCisgMTogNTk4NTIyNzlFODJFOThCOEI2ODBFNUNFRTEyQkI5OUEKKyAyOiBGOTY5ODk1NjVFNUIxNjNFQTQ4M0ZGNzRBQ0EyMkRDOQorIDM6IDIyMUY3QTQxMEY1QUQ3M0MxQzY3REVCQTk5NjgzRTBBCisgNDogNTVGMDU4RDFEOUI4QzM3MkUyQTI4QUI2RTk1M0E4NTEKKyA1OiAyNEE4RjdFMDc2MjBBNTVENjlDQzM5ODFCOTJFNUNDRQorIDY6IEY0RDlEQTk1QkY2NkZFMjhCQTNBODRFNzdFNjI4MjJECisgNzogRUU3RUFDMkJEMzREREU2RjgzRTZENEYyM0MwQTQ5RDMKKyA4OiA0MjE4QUE2OTdGQjdDNUQ4OTdFNjZFQjAwQTlGQjQ4OQorIDk6IDU1QThDREY4NjA4QTNCMUE2QjE0Mjc1RTIyNThBMDk2CisxMDogMThENTA3NDM5ODJGNUM4QTVDNTI4QkRCNTg5NkNERkMKKzExOiAzOTE0MDNCODg5RjBDRUU4NjU4OTNFQkU5RjFCRjkwQQorMTI6IEYzQ0E5QzMwQzE2M0M1MTA0MzJEMzIwN0RCNjk2N0VBCisxMzogQjE0QjY1NzRERjUzMjU3QkU0NTA4REJFNzg4NDNCNDcKKzE0OiBGNTJGMUU1RkQ2RkIxOUMxRjU0NjYyNzZGOUMzM0E5NworMTU6IDlENUFBQkE4NkU4QjY1RTRGNjMzQjZFREUxNzUxNkU4CisxNjogOTAzOENGNzQ2RjcyMkRBMUEwQzM0NDYxMzU5RkQzNzgKKzE3OiAzOThFMzE3RTlDQzA3NEMyMjkzQjU5NTk4RjcyRUE2NAorMTg6IDlENzVEODk3RDQ4N0REMkI1QkM1MzRCNEIyMjNBREQxCisxOTogNkM2REZGNzM0QkZCOTcwMEVERDZCM0NGQzZFMzExRjcKKzIwOiBFMjc1OTE0MDdDQTk3NzFGMjI3QTVCNkIzQTc3QzkyOAorMjE6IDE2MThGMTVGRkE4RTI2OTJBM0IzRUY4RUI2MTUxNDI3CisyMjogRkE0MjZBQzYxNjFGMzFGMEQ2M0ZDOURBOTdBNkEzOTMKKzIzOiAxMjgxODY5RTk5NTlERUQyQ0Y3NUY1MERBN0ZBQjY2QQorMjQ6IEU4QkYxN0U0Qjc2RDZEQzVDMUQwN0RDODA5NzA2NjVBCisyNTogOUE4NjlCNkM1RUVGMzkxQzdFN0M0NTg1RkZEOUZGM0EKKzI2OiA1OTU2NEY3OTlBRkM5ODREMzlBODE2OEQxQTMwQzhDOAorMjc6IDFEMzkyN0FBMkUyQzQ4RTZDRkVGODhEMDRBREQzMERFCisyODogMzlCRjg5REUxMzY1REYxNUE4QUJBODY4NTZFRDA3NEIKKzI5OiAwQ0NDNEE0REVCMzZBMDAwRTdFQjI3MUY1RUU1NDU0MworMzA6IDI2NDc2NjIzRDM1QTUxNEI4ODMzRDg2ODQyNkEyQkU5CiszMTogQzNDODU5OTNFQTE1QUIyRDA1NkQ2NzA3MDc4NTE4MDIKKzMyOiBCRjVGN0VEMThFMTMyMEJBRDUzNkRDRURFRTFBOUFGNworMzM6IDMzN0JEQzVGRjBGN0FENDRFNkEzRjVENjcxMkJENURGCiszNDogN0RCQTc2QjNEOUM4MThEMENFMUE1MzBCQzc5RTc3RDIKKzM1OiAyMERGNTVFNjE3Q0QyNTk4RjE4NTM0REE3QTIyQjU1NQorMzY6IEIwQTBDMUJERjlFODFCNEYwN0Y0N0QzMUE5Q0M4NDA4CiszNzogQ0I5NTg2RjRCMjdGNzU5QjlCOUM2QzdEQjAxRDI2QTgKKzM4OiAxRTc5QTI4OTQ5MDZBNjQwOThBQzQzNzk5Q0VGRUQzOAorMzk6IDgyRkExMjBGMjM3RUIwQjNBMUY4QjUyMzc5QjgzNDZGCis0MDogM0RCOTg0ODYwM0UzQjExMzQ1ODVFNUM5MDAxRDExOUIKKzQxOiBBNzUwODc1OTAwRTI0NDk5Njg4N0VDOTk1MTMxRDE1MQorNDI6IDEyMTMzNzQ4RDM3NDVGNzdDMTYxNDcwQTkyMUY3M0JECis0MzogQTI2NUMzNTE2OTQ1NzRCNDQ1MTdGREFEODgxNjEzM0YKKzQ0OiA1RTUwQ0M4MjgxQzJBNjlGRDM3NjI1MEQ5OTYyMEREMworNDU6IDQ0M0FCQkMxQUQ1NjA1QTBCQTA1QjhFNkFCQTVEMkExCis0NjogNzM1NDZBODdCMzlDNTRGMDYzOUVCRUMxMThBREEwMDcKKzQ3OiAzODAyNDRDODIyODE3NDUzQzc1NDA1QjcyN0Q2N0M0QgorNDg6IDczRjFFMjNERkYwNUVGQUI1RDM5RTUwMzAzMUM0MTY1Cis0OTogODAzMDA3MTQ5MTQ5MDU5MEE4OTEzQUU0QjVEMDgyQ0MKKworS2V5IFNpemU6IDEyOCBieXRlcworIDA6IDI0QjA2ODExQkQ5N0FFOTUxMkIzNzk5RTMxODlEQ0QzCisgMTogOTJEQkE2MjY5RTg4MEY4RDhBMDkxNDNENzkyQTQ2REUKKyAyOiBGOTU2RjQ1OUMzMzNERkJBNEM2QTMwOUM2MTNERDY2MQorIDM6IEMzMTQ4OEVBNTUxQ0MwRkM4ODg1RjY4MTdDQTY5NkZGCisgNDogRjU5NjM0RkU5MDdGOURGOTQ2N0JEMTA1OUY4MkRBQUMKKyA1OiAwNTFBRjExREQyRkNGNzQyMTY5QjU4QTc4NjEyOENFNworIDY6IDg3MzI2QTNBNEE5OENDMTVCMjNERkJGRkM1QUUxNkQzCisgNzogNThGQ0RFMkU4OEE3OUQ1NjgyNzI5QURCNEQ5NzExNDIKKyA4OiBFQUE3ODdENjhFQjY4Q0E3OUNDQzZCRkFDM0JFOTI0NworIDk6IDhCQ0Y2OTgwQUVFRDM2QUYzOEI2OEE1MERENDU0QUYwCisxMDogNEIwRTMxQUU0OEU5MDNERkY1MjkzOTgwMEJCMTZEQzAKKzExOiAxOTc2NkFBOTI5QjQwODQwNzE1RDUzRDkxNzBDOTg2RgorMTI6IEY5Q0FFQjM2RjAzQ0U3QjNCQjM2M0FDN0VCM0FDRjk5CisxMzogQzhFMzRBNkJERURBNERCODM2REYzRDg2M0QwMkE2RUIKKzE0OiAzNzA1NDdDRUE0NDFGRENCQUZEMjgxQTg2NTNCRTJENAorMTU6IDc3RTBGMzMzNDMxNThBOEMzQUMzQzZEMTRGRDY5NDMxCisxNjogN0E5ODVCMTM2OEY4NDJDNjQ0NTM4QzY1NEQwODFGRDMKKzE3OiA2MEUwQzg5MzNGNDNENDAwMDMwMzAxOTZFOEU4ODFBQworMTg6IDM0NzM0NzRCNThBRTZCQzc1ODJBREQ3QUUyNDcxMUI3CisxOTogNzU5MzZDOEQ0NkY2RDVBRjVDN0VFMEU4RENFQjVBQjIKKzIwOiA0QTA0RjYxOUZCMEUwNUY3QjA3QzQzRjRCOUYyRTEzNAorMjE6IEZENTNBNUE3RjRGMEI5RDkzM0UzOEQ5RjA3QUM4OENECisyMjogRjYyRUU0M0IyMEY1ODJBQzc3ODc5QUQ3RTY2RkNDQUMKKzIzOiA0NDM2QUQ3NzE2MjQ4OTY2ODNEN0QyOUU4ODc5Rjg5RgorMjQ6IEY4OEYzQzBFRjJCOUZEMENBOTk3QkVGMTc3ODdEQTJGCisyNTogRkY1NTc2RjQyQ0U5QTA2NjVBMUQ2QTI0MjBBNjkxRDAKKzI2OiBDMDc3RDZBRUJBNjVCNjFDRDFBOUFBRTE3RkNGQzA0RAorMjc6IDg0RDBEN0M1MkQ2REIzOTc5QkMzRjZGMzQ0NTZDQjkxCisyODogRjE2MzEyMUQ5RUI3NTY5Q0E3REUzQjc2MTlFMEJFNTEKKzI5OiA3MjdEMjNGQjQzMjE1NDY3QjU3REM2N0E4ODkwQ0YyNgorMzA6IDYwQkE1NzdGM0M2NjI3MjY3RDdCMzNFNjkzRkI3QkNCCiszMTogODJDNjZCMjM1ODZDQ0VBMkFFMTQ4MEI0NjlCM0YzQzMKKzMyOiBBNjUwOTI3MjZENkNGMkY3N0NFMDA2NDhFMkQxMTdCMAorMzM6IEVDMzA2NjJDQkE4OTFBMzM4MEI4NDZEQTZDNjQwMjRFCiszNDogQ0UxQjI1M0ZCQ0UzNkIyMTdFRDFFRkJBQUFEMkU3ODMKKzM1OiA5RDk2M0NENUU2NUE5RUNEMkRBRUU5M0I2QzZDMTE3OAorMzY6IDFCOEUzRDA3RTdCRDRCQjQyNDhCNkE3REY4OTM1OTgwCiszNzogREJDM0ZENTg4OEI4MEM0Q0VGQzZDNUUxNzBFMjcxQ0UKKzM4OiAzMDdDQThDRERGRTVEQTE1MkI2NkUxMDM0NkJCMkUxQworMzk6IDg4NTgyNTBGOTMzNjUwRDk3OEI0MDNBNDUwNEVBNTgxCis0MDogRjA2MDA1RkE2RTU2RTBDMEQ5Njk4OEEzRkFEMzU5RkMKKzQxOiA4MTZDQkUzN0ZERTM3MTk4MDREQkZEMDkzRTNGRDg3RAorNDI6IDQ4NzhDMDdCMTI3RDY5NjIxNDM5M0REQzY2RjVFQjM2Cis0MzogRUZCQTYwNDUyNDMwNTBDMEQ4RDgyMDQ2QjE3MDA4RTgKKzQ0OiAzRDMwQzNFNTg5MkQzMkJBM0M2ODVEQzVCMTg2RTk1OQorNDU6IEQ0QTRDNDFGMEU2Njg3RTQwMjFGQjkwRDdBOEE5RjgxCis0NjogRkUxMDU3QjIwMTMzMDhDNENFODM5QjQxODZGNDNCNEMKKzQ3OiBENzMzM0FDNjVGNjZFRDZENEJCOEQwNjlFMjY1MDIwRgorNDg6IDMzQzI2MkY1OEJGMEQ5MURGMjA0N0U3OTlCQUE1RjM3Cis0OTogQjk2MEExODc2NEQ3QTZFMTdGQTFGODg0ODdFRkYxOTIKKworCitDaXBoZXI6IHNhZmVyKworS2V5IFNpemU6IDE2IGJ5dGVzCisgMDogN0Q0MjYwNzg4MEI0MjRDMjdFNUE3M0EzNEZFQ0U2ODYKKyAxOiAxQTk5RDQ2OUYxOTQ2RUE0NjUyMzA4M0ZCQUE3OUNCQgorIDI6IDgzMTM4NUU0MDBGRDY4MUM4QTMwQUFEOTQ3N0YxQUJCCisgMzogNUMxQkI4RjI1OUNERUMyQzFCRTBCODAzQzdEOTQ0N0YKKyA0OiBDNTdDMUNCQjE4RDg3RkNGNzJBODdCMjQ3MzkyNzUyRAorIDU6IDE2MjUxODNCMEM1OTVBMzNGRTBFOEFFMERDRTQwQURFCisgNjogNEFGM0E5RDY3MzNEQzRGRkYzNDIyQUE1QkU1QURDOTQKKyA3OiA4NTMxMzM4OTRDODdBMjMzMThERkFEMkIyNDdGQkZGMworIDg6IDhDN0Y2OEUwMUE4NDEzRDE5QjlBNDc5MjQ2RTU0NzIyCisgOTogODYyMDg5OEVDRDNCRjkxQTQ3Q0M1NEU2RDk5ODdGQTcKKzEwOiAzM0YxMkFCQjdDQzZBOTA0MTU0M0EyMDczQUVERkZBNworMTE6IEEwOTZFNDZGMjgzNEY3OUMwOTZEMEI2NTVFREM5QTYzCisxMjogM0REMEQ3ODI0QTg3QzlGNUQ4RDI1RjVBRjU3RTcwQjcKKzEzOiA2QjdDOTlFNUNEMjlBQzFDNUE4RDY2QUI0NjBFNUFENQorMTQ6IDk1QTlGNjAwOUFCNEREMkFDN0U4RTQ1RjM2RDkxRTlDCisxNTogNjBDQ0VGQzY2MzAzMjlDMzQxNzgyQjE3MzY1OTk1QTIKKzE2OiAwMjc2Qzk2QTdCMTE5MUJDMTZDOEE5Qzk4NDY4REIwNQorMTc6IDFGMzUyQ0I3N0MyMTEzOUMwNTg4MzdCODE5NEUzRTY0CisxODogMkRCOEUzNDBGNTg4NDQ3MDVGMjE3NTUxNzgyRjZCNEQKKzE5OiAzNEU5OTgzMkUwNzIyQzVBRThGMENBMUE1MEU5RTdFMgorMjA6IDdFMTUzOERDMTBDMUY1NkMzNzIzQTg3QkZEMTI3NzQzCisyMTogMzZCOTcxNEE4QUNEQzhCOEExN0U4NUUyODAzQThDODgKKzIyOiAxMTg0ODMyOUIwREI5REM3NzY4QzA3RDk1RjBDRjY2MgorMjM6IDkzRUNFREVCNEM2MzY5QUM1NkFGMUY0OTM0NTcyMEE2CisyNDogQTNFRDdGOUQxNzA2N0MyNjUwNzI4RTI2NkI2MjMxMjQKKzI1OiBGMzM1NzQ1OTBCNDM1RDFEREJCQTkyNUYwRDBFQThBRAorMjY6IDg3RTU0MkRCRDQwRENCRDgwQzRBQjUyNTU1QzI2NEMxCisyNzogNkQ4MDY5OTFBQjhFMzYwNEM4MjY3QUMxRUJFQzJFMjEKKzI4OiA0QjczMzNGODdFQkI0NkJCMkE4RUNEMzkyQzg1QTEyQgorMjk6IDRGRjQ5QUNBNjI4OThGNTU4QUMwNjVCNjZDQUQwMjM0CiszMDogNjJERTdCMjEzM0IwOTU0NEVERDBERjY2REM0RjVFMkEKKzMxOiA4MjE5NUIzOUZGN0I4QTg1RDdGMEVFNTJEMTlFNTEwRgorMzI6IDI0RkE1NjE3NkE0RjBCMzdGODUxQ0JBQjE3NkM5NzAyCiszMzogODVGQTkyMzBEOUI5M0NEQ0MwNzUyRkM3MzgyMTE3MDMKKzM0OiBENDQxMTMyMDMyQkRBQzY3MTVGNDQ1M0NCQzI0MzREOAorMzU6IDQzOEFCOUJFQThBOTAwMzY4RDg0RUY4NzBFQUY3RTg0CiszNjogNDMzQkU1QkZFMTUyOUJGQTdDNTY4OENGRTNCRDRERTUKKzM3OiAyQTc5RkI2RjM3QUEwODUzMzQ0NUI4QkVBNTA5OEVBMgorMzg6IEI5Qzk4NkVFNDVEMjA0QjZBMUNBMTUyOTQ0OTEyQzlGCiszOTogODI4OUM5Rjc4NzYwRDAyQUE3MTg3M0ZEOTdFMkVDQjgKKzQwOiA0OEIwRDEyNDQ1MjMxNjUwNTVCRTlBNUU5NUNGODUyRQorNDE6IDQ3MUUyMTFFNUU3ODRDMkFGNDc2REIzQ0I1NTVDRjM1Cis0MjogRjI5MENCRUIxRjEwMDlEMjUwRjdCMTJFMDQ0QjgwQzMKKzQzOiAxQjk3OTZEODBDMzk3NkZFMzA3MUIxQzAxMTU0RDQyRQorNDQ6IEE4MEUyMUExQTEwMDdCNjlFOEJDQUU3MjhCQkU2QTkyCis0NTogNjUyMDU4RUYwRkFGODU0OTQyNEY5OTg2Njk2NjA5MzEKKzQ2OiA4OTQxOEZCNDc0MEU5ODAxRjZERkZFREM1OTNGQTMyRQorNDc6IDkwNzU2MUE2OUNGQTExN0YxNjdBNTJCODg3NzdEODlDCis0ODogRUEyRUI0QjFFRTczOTMyMEY5OTg5NEI0NzZBOEE1MUUKKzQ5OiBFNjI3RTY0QUFCNkUyRkY2Qjk5NjQzQTdGQkI4NEJGQworCitLZXkgU2l6ZTogMjQgYnl0ZXMKKyAwOiBFODk3NUY5NEE4QjEzOTJGQkE3OENCRERDQzhFOEYwOAorIDE6IDcwOENFRkI2OEEwMjgxQUVBNDI0QjNENDY5OEQyRjJCCisgMjogMjFBMERFNTY1NDVCQzk1MEZDRTRERjIwOUM5NkNFNkYKKyAzOiBGMkNBNDEwM0I3MDMyNjRENDZDQkMwOUUxM0Q1QjhFRQorIDQ6IDI4OTIxMDEwNzdGRUU0MjdDNDM0Q0NGQkJBQjU5OEI1CisgNTogQzJGMTkxQ0M1QzY4MUNCRkMwOThCMjY0QzQ3OUIyQUQKKyA2OiAzMDhDM0I3OTRDOEE3OTcxQkJBOTZGRTRDNzI3RjQ4RQorIDc6IDhBNEY5RDQ0NjNCNURDNERENDYxRUQwNzYzQ0RBRUEyCisgODogQjdFMUJCQkU0NTVBRURGMTgzMjlBNkVFQ0Q2RTIyMkMKKyA5OiBDODBEQUFFN0ZCREY1NkRFMDVBODk3RkJEQkI1M0RFQworMTA6IDZBM0QzODc1OEJGMDM5MDE1NkYyMkY4M0MyMEYwMjYyCisxMTogQ0E0OTNERjc3MUUzN0E5MzgyMkQ2MTE3RUQxNEI2MEMKKzEyOiA2MjMwMTI3NDg4MjZBMDhGM0M1OUI3MUZGM0Q2NjMyNworMTM6IEEyODNCQ0IxMjZCOTc5NUQzMDZCMTI5MDM1QkNDMkRDCisxNDogMzc5MEE2NzA0QkIwRjExOTEzOUEwMjY0RjdFOEIyQzgKKzE1OiA5QjM2OUJCQzA5NTQyOEVCRDcxMjUxN0IyQzREMDZGMAorMTY6IDBGNDg4MDE4MTYyMTkzQURCMTFFNEMzOUNGREVFMERDCisxNzogOEFGQjdDNkZEN0Q2REQ2NEMyQzc3REEzQTBEOTFFRTIKKzE4OiBCOEJFRkEyNDFCQTMzOUJGNkYwNTk0NjRDNTMzRjlGMAorMTk6IEU3NjE0MUM4Q0Q1NDIwMEZBQjJGOEMyQjc2QUY1RkVFCisyMDogODBCNEZFNTc4NTFDMDI0MEQ4MUU3OERBODIwMEYxOTUKKzIxOiA4QkYxQzY5MEVGNUZDRTdBREM3NEUzMUMyNEY4M0Y1RQorMjI6IEQzMEM0Rjc4NzAzQkRFOTE3NTBFMEU0OUZBMEU4OTgyCisyMzogODZDNUQxRTBCODhFRjBBRjlCODk5ODUwNTEwMDAwRUIKKzI0OiBGREU3Mjc0NDJCQ0MwMzA1QTdCMDZFNkVFMTc5RDgzNgorMjU6IDBCNEE3MTkzNDJGOTIyNkZBNjgwNzk2ODg3QTk4RkE1CisyNjogOTgwRDRCRTlBRjNFM0NGOUQ0NTU4NDc4RDFERDAzQUIKKzI3OiAwM0VDRDExOTkyRDNENTg2NEI4RDE5ODc5NjZCQTU0NAorMjg6IDhEQkMyOTMxRDdEMTc2NTdCRjM4RTM5MzFGNDg2ODUwCisyOTogNzZBRTA2OUUzOUZBNzMwOEJCRjUwN0FCRTM1QkMxRTgKKzMwOiA5NTQxQjU5Q0UxOEVBMjU1Q0RDMDZERkQzRkZDRDFDMQorMzE6IDVBMzgyNzQ4QUUzNjQxQUJGNkQ5Q0EyNEEzNUIyMDAyCiszMjogOUI3QTQ5RENDMkNGQzVBNjA3OEFCNDFFNkY2MkI0Q0QKKzMzOiA5MUIyRUFDODc4RTU2MjhEQkNDN0M4NzZCOTFCNzNEMQorMzQ6IDMxMTI1Q0ZGQzQxQTBEMzUyOEZCMTZCQUU3NjFDNDdBCiszNTogOTE2RDJBNzY5REEwMDJBRENBOEM4N0Y4MjQxQkI1MEQKKzM2OiA2ODFDM0Y2MDFFRTVEODJGOUIwNDA5MzJGMkZCNEFFRgorMzc6IDZCNkYzMkU1RUFDMkY0MjQwNzRDMzNGN0M5ODhENUZFCiszODogRDE1QTVGREMyQTQ5NTZERTYxQkE2RTFDOTg4NjcyNDIKKzM5OiAwNzQ3QkNGRTFCOTc5RTk0N0VFRDUyMjVGQUZDQTQ0RgorNDA6IDEzM0I0M0M4NUNDQkMzNjBERjg2NDlCQkJEMkVCNDVCCis0MTogMDUyRDk0MzA2MkE2RDQ3NUQzMDEwMEVBNDEyQzMwRUUKKzQyOiBCRDY0MDFDNTkxRDU4NUY0QTgyQ0RDRjY3ODY3OUQ1QgorNDM6IEY5NUQxQTVFMzM4RjU2NzYwQzQyNUQ5NzJENjdCNTdCCis0NDogOUIxNTY5MzA4NjA4Q0EwMEJCMUUyQkM5RTIwMjg5QTcKKzQ1OiBCNjQ1NEM1MkM2NEY2NEQ2OUYxRDM2RDJEMjI0QTIyMgorNDY6IDUyOUI1QjAxM0FFM0YzN0UzOEJFMzQwRDFEMjAwQTY0Cis0NzogMUI2NTkwNEYxNzcyMTJBQzhFOUVENEQ4REIyODc4MTAKKzQ4OiBDRDVDQUM1NjIzNkUwQjlBMjVBNUQzMDZGMTJEOEM0QgorNDk6IDAxREY3RTFEMEY1RjdBNURBQTBCMzc5Mzg4NDI1MTI2CisKK0tleSBTaXplOiAzMiBieXRlcworIDA6IDdGQkMyMTI5OTZFQ0U5Q0EyQzRENUJEODhGQTBCM0Q5CisgMTogRUEzRDc4OEMyNUNGM0JFN0Y0MTAxRURFQ0YyMzQ1NUIKKyAyOiBCRDBCOTg0ODEzNjZBRTA4NjlBQkExMURCMThEMUU5NQorIDM6IDUzMzkzRTJCNzU3QzkwNDg5RUI2QjQ3RjY3ODM3MzM3CisgNDogRTFEMzUwNjQwQ0NBNkMxMzY0OEMzQjU3QkUwMEI5NTAKKyA1OiA5NTFFMUVGOTlFNkRFNzI3NDRBOUQ4RDlFQkZCQTk0RQorIDY6IDQzM0U0RDRFNjRCNDE4MTgwOTdCRDVFMkVCQTAxRDhFCisgNzogOEZDQkQwN0UzMDNCMzgxQjI5MzVGQjgyQ0EwQ0JGMTMKKyA4OiBDRjQ2NTY5MDA1QkQ5NjhCOTMxMDE0OUU4OTJCNEQ2OQorIDk6IEYxQjY3MjY1N0MyNjU3QUQ1M0JGRkUyQkE1RERFMUQyCisxMDogMDAzNTMzNzIxMDcwMzI0MEY5Q0YyRjVBOTE4NEZEQjcKKzExOiA3NzM5NTE4NDFGNzdEQ0Y4QTY3MzAxMDlERURGM0U5QQorMTI6IEU0N0RDMEZCMzgxREI4NkVCRDIwOEEwRDY0OUU3QjAzCisxMzogMEQ5RTM0QURCMjU3MTQ2RUFCOTVBRjE0NjM2MzAxRDIKKzE0OiBBQjVENUMxMDZFNTJBQzc2NjJDMjZGOUYyN0YyQ0Q1NQorMTU6IDY5MzhGMjA1REMyM0MzNTAwQjc3MjMyODFFOUY2MjZGCisxNjogM0NBQkQ1MjU1OEQ3RjQxOENBRjZCNDFDRUMzMzREQUQKKzE3OiBEMjE5MkYxRTVBRkMzQjk4OUM0MkMzOTZCMzc2NDg2MgorMTg6IDU5RDMyRTNBNDExNDFDNkNBQTJBOEY0NEZENTg3RDk0CisxOTogNDgzQ0ZFQ0Y2NUQ3MUNCMjk5NEUxQzEyQTFBN0Y5MDcKKzIwOiA4RjA4NkFEODFCMUZENUIxMzE5NUVEQjREQUI3REM3MworMjE6IEVGRUIxMzI4Q0U3QUU2QTYzRTdEOEIzRUNBOUUxMkI5CisyMjogMzYyQUFFMzA4QjNCQkE1ODhEQkNGQkI3MTk3RTY5M0MKKzIzOiBCODE3QTEzNkVCMzBDRDEyN0I1MDE1QTg1QTdCNkU5NQorMjQ6IDAzNzk2RTdGMjQ0Q0M5MTZCRTAyQUY2MUU1RkVDNDJGCisyNTogNTg1NEYyODg5Q0ZGNDRCMDY4ODcxOEMyM0IwQTgyMkQKKzI2OiAwRjc3MkFDNkUzNzM2NEFBN0I4NDRBRUFDQjMzRjRBMgorMjc6IEIzRTk1RjUxOTVCQTY0NkRBRjMzM0FBODkxMzA0NTFGCisyODogOTExQTMyQUY3Q0M0NDMwOUIzN0Q3NUUxNThBNEFCMTgKKzI5OiAyMzJDRkUyMjhFQjcyQTk0OTYxNkIzMDdDMkJFRUQxNQorMzA6IDdDODk4OUYxMzVCOERFNkZEMjZDNzc5MkI4MzU0RjM1CiszMTogRTc5MjMxNzc5QkZCOUY3OTJCRDE3OUMwNjI1MjgwQTgKKzMyOiAwMTVGNkNDQUU4QTEyNzVBMkU4MzZBMjA3RDgyNTRFQQorMzM6IDRFQjk0NzA5MjQ1Q0UxRkJGN0M2RDk1ODdGQTkyRDQwCiszNDogNjNEODIwMDUzMjBGOTc0RUZEQzRDMDIxRkI3M0FCQjUKKzM1OiAwRjE1QjJFOEUzODlDMkQ1OTI4OUQ3REE0MUFCRDA3RAorMzY6IENFRTdGQkJGNzY2NTQwRDRFMzk5MDNEMDQ5NERCNzk3CiszNzogRkI1NjRDMThBMTVENTMxMDhDMTk1NEZDRDM1MThGQzEKKzM4OiBBNjdDNUY0QTRBOTVBRjJCRDhFNEZDMTE4MkIyRUVCQgorMzk6IDBEMzU0RTY2NEMzNUI5MzY0RTRFRTlEQjhERTBDQTc2Cis0MDogMzI5NTgyNkQ1MkYzQjk4MEI1MEVGRjNFOTMxN0YxQ0IKKzQxOiBCQzY1NTkyQTlDMEJBREQ4NEYzNjNBMTc1RUU2QkM1NAorNDI6IDU4REU3NjJBREE2MjFGRTJBN0E2QTgzRjY4RTkzMjEzCis0MzogQUQ3NzRGQzg0MDJGN0REQkI4ODFCNzAzRUM4MzYwNTcKKzQ0OiBGMUM5NUFENUUwMDRBRjM1QUUzMTVBRTg4QTI1NzdGQQorNDU6IDk2ODc3NUEyQzM0ODU4NzVCMDI0QjAwOEQ5NjE4MkVDCis0NjogNjIzRTczNjIzOEI1ODAwQUNEOUI2N0Q3NkM4NEQyMzYKKzQ3OiAxQzVFOUY2NUQ0MzM0M0Q3NDNFNTBDODBEMEUwRjY0OAorNDg6IEE2MkU0QTE5N0UxNUNGOTBDMjU2OURDMzhEOUZDOTE1Cis0OTogMTY1QjEzOUJFNDgzQTcxMzgxQjlBOEU5M0Q5NDczREEKKworCitDaXBoZXI6IHR3b2Zpc2gKK0tleSBTaXplOiAxNiBieXRlcworIDA6IDlGQjYzMzM3MTUxQkU5QzcxMzA2RDE1OUVBN0FGQUE0CisgMTogOENDNUE5MzFERUMyOUI0QzdEODU1OTVEMjRGRjg0MDUKKyAyOiBFODY3RkMwRTE0NEZERUEyNEZFQTg4RDIyRDg3NzZFQQorIDM6IEI0NTBBMjk2OUM2N0Q5M0UxQUUzQTQwOTNCQTRDNDhGCisgNDogN0FFQTQxRjk5NTYxNDlGMzM2NjEyRTg2OEU0MkIzQzQKKyA1OiBGMjAxRkJCNzMwRTZFNThDRjlFNUFEMURDNDg0NEM0QworIDY6IDEzRDg4NjlFNjY0MTJDNkMyODhCNUQ3RjM3RjJEOTRBCisgNzogQ0Q1N0RERERCNzgyQzBBMDRDNDBFNDdEOTIwNzk5REMKKyA4OiA2NTM3MUM4QUJDOTE5RUMwOTAwNEE3RDYzRDkzMDJCRgorIDk6IENDMzFERkQzQjdEQ0NDODY4NjZDQzc5RDQ1QTg5QzNGCisxMDogNTQxRDU0OEQzMTE3MTRFRjg2NjFCRkE3MjE1NjhEMTYKKzExOiAyNjlGM0FBMkQyRDEwREJEM0REMzk5MkJGRUUyM0MwNQorMTI6IEY4NkRBNUQ3M0FGQkE5NEE5RDU5MkQwMkI1ODU1RDI1CisxMzogRUFEOEQ3ODVCNTBFMDM2NDM3RTM5RjNCMjdEQjQ2NTcKKzE0OiAyQUQwQTEzQzQ5M0I5RjNFREQyNTlFMTFBNDk1QjIwNQorMTU6IEMwNUY5RDcyQUEzODRGMDVCMjhBMzUxOUFGMjE4Q0E5CisxNjogRDQ0MjA3MkY1ODhEMzhBQzhCOUQ0NDc3NjJFOUZDRjMKKzE3OiBGREQzQkZCOTFFRkQxMjcxOTZGRjlGMTlBREFEQkYyOAorMTg6IEY1NjcxNzY2MUI0MjRFNDFEN0RFMUNEMTNFMjFERjg5CisxOTogMEY2Qzk1MkQ5QkU2Q0E0OUI1MTQ3RUZENDQ0NTVBOTIKKzIwOiA2QzIxNDkzNTcyNjM2NEYyNzY2QkU3QjRDMkI2NDM2MgorMjE6IDVENTMxNkQ3RTA1N0ZGNDgxQ0NDMTBDNzQ1MkQxQTE3CisyMjogNTZDNzhEQkQ4MDJDQzlCMDQwNDQ2QTNFRkYzRjEyQUMKKzIzOiBBMzhDRUFEQTg0NDhEQkUyOUMyRDExREYyQTQ4NzcxNQorMjQ6IENCMkY3ODZBQjgwNjMzNTBGM0ZBRTExRUM4QzY1QTVCCisyNTogRjVCNzI5OEI2RjU1OEUyQzRGQ0MxMTc0NEFEMjI2NTMKKzI2OiAwMUJGODlDMUI0OEM1RjY5MThGQzZCREMxMEIxMkEyMQorMjc6IEEwMzFGMjVBQUZGMjk0RUU3OTIyMEJDNzZFNzNFNTJFCisyODogNDJDOTRCNTBFMTI0OTlEQTM1RjE0QkI2QkI2RTY4NEQKKzI5OiBGRDY4QjY4NDBEQzlBMjcxQ0RFMjAzMkVGMDIwMDI5NQorMzA6IEE5ODYzQzFCMDRCM0ZFMzk0NUQyOTk2NkY2N0I4N0UyCiszMTogNjIyNkQ0Q0VFQzFFOEFFQzFCN0IzRTEzRDgwQTgzRkYKKzMyOiA2MTAwQTcxQjFFM0FCQkJBNDhBOUVEMjgwREQxNjE3RQorMzM6IDVDRTkzQTI2RDRFRkYwQ0M3REZBMkRENDNBNTExODcxCiszNDogMjgyRDE2NUJGQkEwRjdGMjI5MTYxQkU1MzNCRkM0RDkKKzM1OiBFNkFDNDc5OTcwODkxMzkyOTcyQjI4NDVDOTQ5QTA2OAorMzY6IDRFNEE4ODczNjhGODQ0M0JFNTFGQTdDRDE2Q0YwQjg3CiszNzogMTIxQUZDODFBQTI3NTA1NzJCMzVEMTAwQkRDMzREQjUKKzM4OiA3QzQxRkE3RTBBMThBODdFNDRCRTQ4OEYzMzFCMzVFMAorMzk6IEM4ODQ3RDI5NUUxRjUwNUMwNEUyRjVDRTJDQkY1RTAwCis0MDogNDY4NkVFODYyOEJDMUJCQjkyQ0U4MjVGMDRCMUQ1RTgKKzQxOiAzOTdERkFDRDE5QzI4M0IzRkMyN0QzRkNCRTk1MjI1NAorNDI6IDgxNUI2QzY5NjA4QjVBMzc5RTNDOUU2N0ZCMUJBMTVBCis0MzogQTczRTcyQjkxMkVCM0FBNDkyOUU5RUFGNzNBNDQ4QkIKKzQ0OiA1QkM0RTJDODg1MTJCQ0Q1NTQwOENDNUFFQUQxNUE5MQorNDU6IEVGMjBCMkJGMjk3NDU2REVEMUY0QUI3QkUwNzQ3OTAyCis0NjogM0Q4NzYxMzVFMTlCQjU2Qjk4MDUwNDUwQzZCMEZEMDYKKzQ3OiBENjgxMDBFMUJBRDA3QjQzODc4NjMzN0MwOTU3NDcxRAorNDg6IENFODVBOTE5MzgwNDlCNUUyMUM5ODNGN0M0NUVDQTNFCis0OTogOUZBQ0VGRkI5RDA4QkI2NUREQzM0RTNDNTc1Qjg0NDIKKworS2V5IFNpemU6IDI0IGJ5dGVzCisgMDogOTVBQ0NDNjI1MzY2NTQ3NjE3RjhCRTQzNzNEMTBDRDcKKyAxOiA5OUFFQjI1Q0NFNzNCMzc5NkMzNTFBMTk3OTFBQ0Q1MgorIDI6IDU2QjlENjY4OTgzMDI3NUMxQTNFNDI2NkIzRDU2RDUzCisgMzogMkY1RjgyMkUxMUYwODdCQ0I4QTBGNDI4NDE0ODU1QTAKKyA0OiA2NTQwMEY3Mjk5OTBGRTE3NUFBQTg5NEJDRkJCMUE1OQorIDU6IDk0N0JBMzNEMjAxOTRCQkIwRDQ5MDQwMjNGQjMyRkZCCisgNjogMTE2QjBDNjc0NEQyMTVBRTk4REVCMUY5RkYxRDM2QzAKKyA3OiBCQTY5NjRDMTAxRkEwNDRFRDA2ODc3RTQ2RDU0MDg1MAorIDg6IEEzNkIxODUyNkZBMDAwNENGNTU3Qzk5QTNBQzE0MjNBCisgOTogNTczMDk5Njc0QjhBRkMyREQ2NDI0QTJFNEM1ODFCODkKKzEwOiBGNDYxNjlDRkU5NDk2QTI2OTZBOTNFRUI3RUM1NjFGQgorMTE6IDJDNjRCQzA1Mjg5OEYzRjNBMkI3OEYyNTkxRjJCRjFFCisxMjogRThBMEQ0MEIwODU4NTQ1OTE5OURENkVDQzEwOEE0OTAKKzEzOiA0NzkyNzk4OUJFNUVCNTVCOUEwRjI5NEMwNEZGMDM1RgorMTQ6IDU0QTMwMjRFM0FEODYwMDVBMkM0NEU0QjhCREJCRUZCCisxNTogRDBBRDUxRDFEQURGQUQ3RUQwRUJDQzc1NkRCQ0RDQzkKKzE2OiA1REU2OThCNzAxNEMzNEFBNkYwMDk5Q0JCNTkzN0EyMAorMTc6IDlCQTMwRjQ5NDcwQzZEQjk2MzJDNUVERTM0RjhFRTczCisxODogMEJERjU1OEEyQUU5Mjk4Mjg4RTYwNjE2NDQyRDM0MDgKKzE5OiAyNUY2REQyM0JBNEUwOTBFMUNGRkE2RUUzNDg3QUZBNworMjA6IERBQzVGQjk5RTI5OUQyNjcyRjc5RjBDMzhFMTc3RDgzCisyMTogNThDQjExMzQzMDg5NUM5ODkwRDk2RUE2MEUzRERDMjMKKzIyOiA0OEEwNzcxRjAwNDlCNzc2QTQ0QUU4ODc3QjU3RUZGQgorMjM6IDJGMTJCMjZBNEJGNzA2NTA3NjQxNzUzMENERUUxNENDCisyNDogQUE2QURDQjAxNzZENTMyNEM0QzFGRkQ2NDBENTAyRUUKKzI1OiAzODRCNTJBNjZGNEM3QTcwRUQzNjA5MUJDM0ZFQTA5QworMjY6IDJBRkU3QUNGMDcxQzZCMEZENjk5MzBBMDlENkRENUU1CisyNzogOUEyREI5QTVFNzcxMkE1QkZCMDk1RDJDMDk0NTNDQTMKKzI4OiA3MTZDMEVGNTIyQTEzRUEwNUE0OEYxNkJBRDNGRDEwQQorMjk6IDQ0QUI0NkYzQ0NGRDAyQkREMkM3N0EzMzIyOTNBNEQ5CiszMDogQ0U2QUIyN0EwRjYwRjQxMEIxQjNDQUNEOUFCOTIzQTgKKzMxOiA2OUVBRkFGQzE3MUM1NUQxRDkwRUQxQzZFMUYzQTQ4RgorMzI6IDVFRUVCMEI3ODMzMTIxQUQ3RDI3QkNGQUYyRDRGOEVECiszMzogNDcxMzM0NDVBNEVCQ0M2MEUyN0IyOUZDQzE2MEZBNzUKKzM0OiA5RjFCRkVCOTcxNUEyMEQ1RkE3QkEzQkZGMUEyN0JCQworMzU6IDUxNkQ0NjE1RjA3NzU2QjREQkU3RDM3RUJCRjQ2ODRFCiszNjogQjg4NzQ0RTUzMDczQkRBMEYxQjExNUUzREIyMjRFODMKKzM3OiAxQjc3QzNEMDY3QkJFMDA0MjA0NTBCQTVDRDlBODNDQQorMzg6IDk0Qjg3QUM5NkY4Q0JGRjM2QjAxQTY4RTA2NTFFNTkxCiszOTogNTJBQ0U4N0ExQThFNDY2NTU5MzU1MzZGQjM3MDEyOTAKKzQwOiBCNDA2QkI2MzJENUI3OTg1NDAwRUM3OEQ2MjFDODgwMQorNDE6IDIwRjlBQkNCRjk3QTk5MTdFQzZDNURFM0NCMkM5MjVCCis0MjogNTM5QThBRjkyMDgzM0Y5RTgxQTIwQTZEMTA1NDMxNzYKKzQzOiBCNzlBRkI4QkIzOUIwMzUxMDk0RjM3QzZFQzkzRjhBOQorNDQ6IDU4MzBCRDIxMjg5RkVEM0Y5NUMzRTM3NDBBQzZDNUJGCis0NTogODZDNEFGNTgzOUVDQjk4NjBCMTc1NjQyQURBMzI4OTUKKzQ2OiBBNjQyN0U1RTA4Q0VBMkE1MEI4NDI2QjA2M0FFRTE4OQorNDc6IDJFODcyMTI5QjVCQzVGNTM1QkNFMkI4MUYwMTNBMTAzCis0ODogMjIwM0VCOUIyQkY1MUZDMjAyNTU0OUQwQkYxOTI0QTcKKzQ5OiA2QTVFMzgzQTRGQzc4RjZFMDNCOUIyNzZGODExOTVCRQorCitLZXkgU2l6ZTogMzIgYnl0ZXMKKyAwOiA4RUYwMjcyQzQyREI4MzhCQ0Y3QjA3QUYwRUMzMEYzOAorIDE6IDlGODgwMUU5NEU0MUE3REM4NzU2NjU2NjNCRkE3OTEyCisgMjogRUJFMkNBNkI0NUEwQkVFODNCNTQ0MDJFMUE4NDNBM0IKKyAzOiBGNkM1QTExODdBRUY0QjVBODhFOTdFODY2Q0Q3NTdBMQorIDQ6IEIzRTYyQ0Q0NzNFNTM4MTJFREY5RUNFODc1RjM5RjVCCisgNTogRDhDMzhCMUVDMjMyNjRCQjdDNDJCNTU4OUMxMzAwQjIKKyA2OiBCRTMxNUVCNzVCOTQ0RUM5RTUxRjVFQUU2NUY3MEJEMgorIDc6IEQ0Mjc1NDA5OTQxQTQ0OTkzMDM3MzY0ODg2QjYwNTk4CisgODogRkMzNEYxRDRFOUM0QTYzNEMxMzQ5RjZENEU5QUI5NEUKKyA5OiBCRTcxMjM4N0M1OUE0MEE4QTM1Rjg1NDMzM0EwMzAyRQorMTA6IDFGMUZFMTY0ODM0QkFCQzcxREJGREZDQ0E3RDJCNEI2CisxMTogQkIyNDEzQ0NCNTM0N0I1MTU3NjUxODE5RTY5OEQ5ODgKKzEyOiA2RUI1NTIzQTk2OEVDRTk2NUQ5QUE0Qjk3NUQ3QzJFRgorMTM6IEI1REQ0OUFCN0UyNjlGOUQ4NTE2RkI1N0VCNDdENTdECisxNDogNzRGNUQ4MTg1NkYxOTJENDlBNzBCMzc0Mzk0NUJGQzAKKzE1OiA5NTQzN0JCMDBENTdDRDg4QkQ1MkRFMEE2NkQ5MzRDNgorMTY6IEFFNDgwNEE5NzVENjdDNkI2Rjk5MTc2RjQwN0FBQTNDCisxNzogNUU1QjJGQjlCMkEwMjhBNTQ2N0I1NkY4QkRCQTY5ODAKKzE4OiA4QzYxN0ZGMUY5QzUwQTM2QkUyRUMxOUE2MjlCQTk2QgorMTk6IEUzNDAxRjdDQkUxNzdBMUQyMjQxMTc4OTRFN0VBMDhBCisyMDogRjg0NTFEOUREMzFBMDhCRTgyOEZBOUFGMzk3MDg5MjEKKzIxOiA1QkU2NkRENTc3ODI2ODA0ODE3Qjg1QTA3QkNFREUyOAorMjI6IEU0MjYyMjc3ODA5NDNBQTFBODMwQjdFN0Q3RjdDQTBBCisyMzogQjM5QzcyNzdDM0E1Q0EyMTg5NzU2M0RCRDhERDZEOTQKKzI0OiBGQTk5OTIzODUzOTZGOTU5ODQxRDFFMEU2OENDRTAwRAorMjU6IEUxREU4OUIxREQ1Q0MzMTY4NTU1OEE1MUNDNzMxRTZDCisyNjogNjQ2MTg0NTVDNDZDNkZGMTE3RjE5RkYzMDBCM0I1NTcKKzI3OiA4ODI3NThDMDJCM0MxMUQ0MDZBMjEwMTI5NzdENEJGOAorMjg6IEY5NDhCNjJGODAzOEQzQTNBRkI3MzA0MUIyRjI2M0FFCisyOTogQUUzQkY2MjYwMjBEMjg3NzA1MkI5MEIzMUU3MEI4QTQKKzMwOiBGMUM2REJCQzE2Njk4NUM5RUMyRTFBM0E2MUJEOEU3NQorMzE6IDgyQzM0M0ZBMzZCNkQ0RTlFN0FGNkQwQjc3NDFGQjA5CiszMjogMEJGQjc1NkVDNTVBQzYzQkVBNzFFNEE4MTg3QzJCMTAKKzMzOiBGMTk0MUFEMTBCRTYwREFEM0ZCQTMzQ0I4OTlCNjNBMworMzQ6IDE4MjM2QTM5Q0QzNDc0M0RFN0I2MEIyNTc1QTlCMjA0CiszNTogQUEzN0ZCQzI1MjVGNzQ3MTBENzU2MUQzMTZFOEQ5MEIKKzM2OiA0MTNFMEY3MkMyQjM0OUZFMjY5MTU1NEY3NzE2MkI1QworMzc6IDVCOUU2Rjk4QjJDQTBGNjM3RTQ2M0JFNEE2RUZEMzlFCiszODogMUI0QTRDQTM2REM2MEQ1MUJBOTgxMzkyRDYwNzAzNzkKKzM5OiBCMUUyNjE2M0E5MEYzMzlFMzNGODZEMjUyRUZCQUI5OQorNDA6IEJCOThGOUY4NDRGQTgxQjI1RUNDODlBODQ4MjQwNEJFCis0MTogQ0UxNDJGNTEyQTQyQTI4RjQ3ODg4NDdCOTcxQUE3RTkKKzQyOiBDNUNFNzgyOTM2RjNEMjhDNjlDMkJENDVGRDdCQzExNworNDM6IDlCNkUxNDI1ODJFMEEzMDlFREI1NTBERUQ1MTIzOEIwCis0NDogMEQ5RDgwQzAxNjEyOTc3RkYzQTJDN0E5ODJEMDg5NEEKKzQ1OiBBNzYzMEM3NTJCMUY3ODdCMDdDMzgyNjkzMzM0QzZBRgorNDY6IDlGMjQ5OTBGMjcwRDU3NTg4MUM3NDY0ODFBNTlDMjQ1Cis0NzogQzM4QjVFMTE0NzlDMjAwQjVBQ0UxRDY1MjJGQzZCMUYKKzQ4OiA5OTExOEQ4MTE0RDI0QjY1NTlDQzVEOTQ1NkYxQkVEQgorNDk6IEY4Qjk3NEE0QkMxMzRGMzlCRTlCMjdCRDhCMkYxMTI5CisKKworQ2lwaGVyOiBzYWZlci1rNjQKK0tleSBTaXplOiA4IGJ5dGVzCisgMDogNTMzRjBDRDdDQ0M2RERGNgorIDE6IEMzQ0Q2NkJCMUU1RTVDMTcKKyAyOiAwNzlERkQ2OEY2QUY5QTc5CisgMzogODRFQjQ5MjIyNjRBMTIwNAorIDQ6IDMxRjNBN0Q3MzlDN0U0MkMKKyA1OiAzODFGODhGQjQ2RTFEQ0EyCisgNjogQ0FGNEFDNDQzRTUwRUY0NworIDc6IDI5MTRFMjU1REE5QkREQkIKKyA4OiBBMTYwQTI0MTIwRTRGRUNDCisgOTogRjc0OEM2MDA5RkZCQzQ2NQorMTA6IDhCM0NCNTc4NDg0NkQyQjAKKzExOiA0Rjk4QzE2MjE0NzMzOTlCCisxMjogQjQ4NkIwQkMzNjVBQkVFOQorMTM6IDMxNEVBQjJCNEU5Rjc4NDAKKzE0OiA2MTNGRTM2Mzc5NjhBOEZFCisxNTogMjg5MzUzNTIzNjFFMTIzOQorMTY6IDBEQ0IwOTAyMzNCOEVCM0MKKzE3OiBDRjBCQzdGMzA3NTg2QzhCCisxODogNjRERjM1NEY5NkNCMDc4MQorMTk6IEQyQjczQzZCQUFDQTdGQjEKKzIwOiA2MzhGQ0VFRjQ5QTI5NzQzCisyMTogMjA0QzRFMEUwQzBBOEI2MworMjI6IEYwNDFFRjZCRTA0NkQ4QUEKKzIzOiA3Njk1NEQ4MjJGNUUyQzMyCisyNDogNjcwMEM2MDk3MUE3M0M5RQorMjU6IDgwMDE5MjkzQUE5MjlERjIKKzI2OiA4RUY0REUxM0YwNTRFRDk4CisyNzogNDFEREY5ODQ1QUJBMkI3QQorMjg6IEI5MTgzNDA3OTY0Mzg1MEMKKzI5OiA4RjQ0RUM4MjNENUQ3MERDCiszMDogRUMyRkY4REU3MjZDODRDRQorMzE6IDI1REY1OURDMkVBMjJDQjUKKzMyOiBGQzExMzBCNTExNzk0QUJCCiszMzogRUQzMjU5MzU5RDJFNjhENAorMzQ6IEQ3NzczQzA0ODA0MDMzRjYKKzM1OiBDMUEzMkMxMTQ1ODkyNTFDCiszNjogNTE2NDdFNjFFRTMyNTQyRQorMzc6IEI5NUE4MDM3NDU3Qzg0MjUKKzM4OiA0Rjg0QjNENDgzRjIzOUVFCiszOTogNDU4NDAxQzM3ODdCQ0E1RQorNDA6IEY1OUI1QTkzRkQwNjZGOEEKKzQxOiAxNDUwRTEwMTg5Q0M0MDAwCis0MjogMEY3NThCNzE4MDRCM0FCMworNDM6IDUxQjc0NEIyNzE1NTQ2MjYKKzQ0OiBCNTVBREExRUQxQjI5RjBECis0NTogNTg1REY3OTQ0NjFGRUJEQQorNDY6IDM3OTBDQzREQ0E0Mzc1MDUKKzQ3OiA3RjdENDY2MTZGRjA1REZBCis0ODogNkFFOTgxOTIxREZDRkIxMworNDk6IEZFODkyOTlENTU0NjVCQzYKKworCitDaXBoZXI6IHNhZmVyLXNrNjQKK0tleSBTaXplOiA4IGJ5dGVzCisgMDogMTRBMzkxRkNFMURFQ0Q5NQorIDE6IDE2QTU0MThDOTkwRDc3RjQKKyAyOiBFRTMzMTYxNDY1RjdFMkRECisgMzogQUI4NUEzNDQ2NEQ1OEVDNAorIDQ6IDNEMjQ3Qzg0QzFCOTg3MzcKKyA1OiBEODhEMjc1NTQ1MTMyRjE3CisgNjogMDBCNDVBODE3ODBFMzQ0MQorIDc6IDY4MzBGQUU2QzRBNkQwRDMKKyA4OiA5M0RGNjkxOEUxOTc1NzIzCisgOTogMTVBQjkwMzZEMDJBQTI5MAorMTA6IDA5MzM2NjZGMEJBNDQ4NkUKKzExOiA5M0Y0MkRFRTcyNkQ5NDlDCisxMjogNzU2RTdCQTNBNkQ0REUyRQorMTM6IDQ5MjJEQ0U4RUVEMzhDRkQKKzE0OiA4RUMwN0FGQkQ0MkRGMjFDCisxNTogRTgyQkVCQ0ZCMUQ3QzZCNAorMTY6IEIzRURCNENCNjJCOEE5QkEKKzE3OiA1NTIxMzA3Q0E1MkREMkYzCisxODogNTRCNUQ3NTUxMkUxRjhGMworMTk6IDFBNzM2MjkzRjJENDYwQTgKKzIwOiA3NzhDNzEzODQ1NDVGNzEwCisyMTogQ0JDMDQxRDNCRjc0MjI1MworMjI6IDlDNDdGQzBGREExRkU4RDkKKzIzOiBCODRFMjkwRDRCRjZFRTY2CisyNDogRkMzRTUxNENFNjZCQjlFMworMjU6IEU4NzQyQzkyRTM2NDBBQTgKKzI2OiA0REEyNzVBNTcxQkRFMUYwCisyNzogQzU2OThFM0Y2QUM1RUQ5RAorMjg6IEFDM0U3NThEQkM3NDI1RUEKKzI5OiBCMUQzMTZGQzBDNUE1OUZECiszMDogMjg2MUM3OENBNTkwNjlCOQorMzE6IEU3NDJCOUI2NTI1MjAxQ0YKKzMyOiAyMDcyNzQ2RURGOUIzMkE2CiszMzogNDFFRjU1QTI2RDY2RkVCQworMzQ6IEVDNTc5MDVFNEVFRDVBQzkKKzM1OiA1ODU0RTZEMUMyRkIyQjg4CiszNjogNDkyRDdFNEE2OTlFQTZENgorMzc6IEQzRTZCOTI5ODgxMzk4MkMKKzM4OiA2NTA3MUE4NjAyNjEyODhCCiszOTogNDAxRUVGNDgzOUFDM0MyRQorNDA6IDEwMjVDQTlCRDkxMDlGMUQKKzQxOiAwQzI4QjU3MEExQUU4NEVBCis0MjogQkZCRTIzOTcyMEU0QjNDNQorNDM6IDA5RkIwMzM5QUNDRUMyMjgKKzQ0OiBERkYyRTBFMjYzMUI1NTZECis0NTogRUNFMzc1MDIwNTc1QjA4NAorNDY6IDFDNEMxNDg5MEQ0NEVCNDIKKzQ3OiBFQTkwNjJBMTRENEUxRjdGCis0ODogODI3NzNEOUVFRkNBQjFBQgorNDk6IDUxNkM3OEZGNzcwQjZBMkYKKworCitDaXBoZXI6IHNhZmVyLWsxMjgKK0tleSBTaXplOiAxNiBieXRlcworIDA6IDRENzkxREIyOEQ3MjRFNTUKKyAxOiA1Mzc4ODIwNTExNEUxMjAwCisgMjogNDQ3MkJDQ0FGM0RERUY1OQorIDM6IEZFOUIzNjQwRUQxMTU4OUMKKyA0OiA0RERENzg1OTgxOTg1N0Q3CisgNTogNkJGOTAxQzRCNDZDQzlEQgorIDY6IDkzMERCRkMwREUwRjUwMDcKKyA3OiBFODlGNzAyMTU4QTAwRDgyCisgODogQkVCNjYxOTUzQkY0NkQ1MAorIDk6IDZGMERBNjRDMEZEMTAxRjkKKzEwOiA0RUJCQ0U0RTVBMzdCRUQ4CisxMTogOTk2RUFBMEFGOTJBMDlBQworMTI6IEFFRDZCQjk1MjJFMEIwMEYKKzEzOiBERjlDNjQzNjI0QTI3MUI0CisxNDogMkU1Qzc4OURENDRFRjBDRgorMTU6IDg2QTVCQTEwNjAxNzczMzAKKzE2OiAyMzg1REJBNERFQkVCNEEzCisxNzogODJFMkZDNzY1NzIyMDk0RAorMTg6IEIzQ0EyMTYxNzU3Njk1RUYKKzE5OiBGOEE0QzYwODFGM0FCQzA2CisyMDogNjQyMjMxNkUxQkVGRkFDOAorMjE6IEMxNzg1MTFCRkJGRjM4MEUKKzIyOiAwNDlCOENCRURFNTk0MkE5CisyMzogMEUxODEyOTJDMUIxREVGQworMjQ6IEMzNDdCQTA2MzJBNDlFNTUKKzI1OiAzMkZEQTQ2NjY5NzE0Rjk5CisyNjogMDUyMzc0M0UzMEMxNjc4OAorMjc6IDc4MkJFOTZBOTM3NjlFRDAKKzI4OiA5Rjk5QzlFOEJENEE2OUQ4CisyOTogMTA0QzA5NEYxMjBDOTI2RAorMzA6IDFGN0VBM0M0NjU0RDU5RTYKKzMxOiA5MEMyNjM2MjlCQzgxRDUzCiszMjogMTgwMzQ2OUJFNTlGRUQ5RQorMzM6IDE0NzhDN0MxNzZCODYzMzYKKzM0OiAzNjJGRTExMTYwMTQxMUZGCiszNTogNjQyODQxNzQzMkVDQzNDOAorMzY6IEQ3NEM0MkZDQzY5NDZGQzUKKzM3OiAxQThGM0E4MkM3OEMyQkU2CiszODogRUUyMkM2NDFEQzA5NjM3NQorMzk6IDU5RDM0QTAxODdDNUMwMjEKKzQwOiBGNjhDQzk2RjA5Njg2QTMwCis0MTogQ0Y4QzYwOEJEQ0M0QTdGQworNDI6IEQyODk2QUIxNkMyODRBODUKKzQzOiA4Mzc1QzVCMTM5RDkzMTg5Cis0NDogMEYwNDYyRjlEOEVCQUVEMAorNDU6IEMzMzU5QjdDRjc4QjM5NjMKKzQ2OiBFNEY3MjMzRDZGMDVEQ0M5Cis0NzogODUzM0QxMDYyMzk3MTE5QgorNDg6IDRCMzAwOTE1RjMyMERGQ0UKKzQ5OiBBMDUwOTU2QTRGNzA1REI5CisKKworQ2lwaGVyOiBzYWZlci1zazEyOAorS2V5IFNpemU6IDE2IGJ5dGVzCisgMDogNTExRTRENUQ4RDcwQjM3RQorIDE6IDNDNjg4RjYyOTQ5MEI3OTYKKyAyOiA0MUNCMTU1NzFGRTcwMEM2CisgMzogRjFDQkZFNzlGMEFEMjNDOAorIDQ6IDBBMERDNEFBMTRDMkU4QUEKKyA1OiAwNTc0MENGN0NEMUNBMDM5CisgNjogMjRFODg2QUQ2RTBDMEE2NworIDc6IEVFRjE0RDdCOTY3MDY2QkMKKyA4OiA2QUJERjZEOEFGODVFQUEwCisgOTogMEVCOTQ3NTIxMzU3RUQyNworMTA6IEJERDJDMTU5NTdGOUVDOTUKKzExOiAwOTg5Qjg3QTc0QTJENDU0CisxMjogMDRDNzkzQkEyRkFCNzQ2MgorMTM6IDNEQUQyRkFDRERGQTNDNDUKKzE0OiBEMTE5NDkzNUNDNEUxQkQ3CisxNTogQkFDMEEyQzgyNDhGRjc4MgorMTY6IDdERDU4OTRBODIyOThDNjQKKzE3OiBBNTlGNTUyQTQzNzdDMDhCCisxODogOEREREU0MUFCNDU4NjE1MQorMTk6IDdDQzQyNjFCMzhGRkE4MzMKKzIwOiBFOTkyMDRENjU4NDE1OEVDCisyMTogQUFDQzhFRDA4MDNDQjVDNAorMjI6IEMxMDVDQTcyQTc2ODhFNzkKKzIzOiAzRDY2MkZEQzM1Qjg4QzA5CisyNDogQTRCQ0VEQzBBRTk5RTMwRQorMjU6IEVBRUNGOUI2MDI0RDM1M0MKKzI2OiAyMTQ2NTFBM0QzNEFGRjQwCisyNzogODA3MDk5MzI1RjlENzNDMgorMjg6IDQ1RUMyMUFFQjZCOTBBMjQKKzI5OiBEQ0VEMzk1MjY2ODdGMjE5CiszMDogMkNDMjQ4RTMwMUQzMTAxRAorMzE6IEM3RjM3QUI4NTcwQkExM0MKKzMyOiBCQjlCMzFBMzRBMzk2NDFCCiszMzogNTMxNDU3MDg0NDk0OENBQworMzQ6IDQ1ODFGODM3QzAyQ0Q0RjQKKzM1OiA0RTAzNkIxQjYyMzAzQkYzCiszNjogN0IzQjg4REUxRjU0OTJBNAorMzc6IENFRjI4NjVDMTQ4NzUwMzUKKzM4OiAxNERFOEJFRTA5QTE1NURFCiszOTogM0FBMjg0Qzc0ODY3MTYxQgorNDA6IDM2MTZCNDYwNzM2OUQ1OTcKKzQxOiAwNzUxMkY1N0U3NUVERUY3Cis0MjogNzEwRDE2NDFGQ0U2NERDMgorNDM6IERCMkEwODlFODdDODY3QTIKKzQ0OiBBMTkyRDdCMzkyQUEyRTJGCis0NTogOEQ3OTdBNjJGQkZFNkM4MQorNDY6IEU1MkNFODk4RTE5QkYxMTAKKzQ3OiA3MjY5NUMyNTE1OENCODcwCis0ODogMjlGOTQ1QjczM0ZCNDk4RgorNDk6IDI3MDU3MDM3RTk3NkYzRkIKKworCitDaXBoZXI6IHJjMgorS2V5IFNpemU6IDggYnl0ZXMKKyAwOiA4M0IxODlERTg3MTYxODA1CisgMTogN0RDQjlDOUU1MEQxNTUwOAorIDI6IEM3MjRENTM1ODUzQ0RFNzkKKyAzOiAxMTNBRkQ0QkE3RDNEN0UzCisgNDogQ0ZBMDZDRkI5M0MyMjgwQworIDU6IEIzRjI5MUMxQUFEOUNCMDcKKyA2OiA2MDZGNzREOUFBRDRGQTcxCisgNzogMUNDM0Y3QUQ1NTFDNUY4OQorIDg6IDQzRjg3NzJCQTZDNkI2MEQKKyA5OiAyRjkzM0UxMkY1NzY4OURECisxMDogMkJDMUFGMEQ1NTcxRDE3RQorMTE6IDQxMjNBQUZBQkRCMjU0RTUKKzEyOiA0MTNFMEFENUM3MDlEQ0UwCisxMzogNkIzQ0YwMUE3NTQyQkQyRgorMTQ6IDFFNUUyQ0EwQ0Q2MDU5OTkKKzE1OiBEMEY3QzlEQzQ3MkEwNzA5CisxNjogMDA0ODI3OTg4NTdBMkJCOQorMTc6IEVFRDU4MzQ0MENGQThCNDgKKzE4OiBERkIzNzdGRTFFRTVFMDU1CisxOTogMzA1MTFDNEM1NjVFOEY3NQorMjA6IEY3NEE3MjQ4MkI0M0I5OUUKKzIxOiAxRUU0RUE3ODQ5QjBCMDcwCisyMjogREI3QTRBQ0YwMjI3MDZGRAorMjM6IDJEN0VCQUJDOEM4RTRERDQKKzI0OiA2RjAzNjlCRjY2QThCNjM3CisyNTogNTlFNUQxM0IyNDdFRTBGNgorMjY6IEM3QkFCNDMwQUE4OUE1RkUKKzI3OiBBRTBGMDM3NDZEMzgxMzhCCisyODogOTQyREYwQjUyM0QwMjQ4MgorMjk6IDkyOUNFMDk2M0NGQTQ2QjEKKzMwOiBGOEM2OEE5MURDNTNCN0NDCiszMTogNTczNTM5NUM2M0UxNTA5NAorMzI6IDc4MjE2MDVDMThEODNENDIKKzMzOiBERUM4OTJGRDc0M0JBNkRDCiszNDogNzdBQzgwQzExNzc5NjNEMworMzU6IDNFMjIzRUI0RUEyOTc0NTYKKzM2OiBBRjYzQjIzMUQ2NzFEOURDCiszNzogNjY1Q0EyODdBRjMyRTkyQworMzg6IEU0NTFFQUIzMzdEQzFFQjYKKzM5OiA5NUIxNzlFQzk1MDk5MkNBCis0MDogQjg5MzcxMTU0OTI4MDJBRQorNDE6IDM1NUE2RTVFREY0MEE5MzkKKzQyOiAzNTNFNzdENEE1QTI4RDc5Cis0MzogQzk1OEZBNTkwM0Y5MjFCOAorNDQ6IEMzMzRFMjk2QkNCMjRBQkUKKzQ1OiA0RjM3RjdGNjUyRkUzMUVECis0NjogNzczMDRBNjU1QjAzRUQ2NworNDc6IDM1NDhBNDIwOUFDQjZFRTIKKzQ4OiA2OTZFNzEyQjE5MTFCNjk1Cis0OTogRTRCNjM2NDFEMjJBM0RERAorCitLZXkgU2l6ZTogNjggYnl0ZXMKKyAwOiA3RUQ2OEU4QjMwQTdENURBCisgMTogODY3RTE4QUU2NEI3ODNFRQorIDI6IDAzMkU1NTRENkFBRDcwNTUKKyAzOiAyNkJENzg1RDBEREFENDhCCisgNDogRkZCRDQwMDlBQkY1M0QwMworIDU6IEE3MTAwNkUxRTMwQzM4NTUKKyA2OiA5MjYzOEVFNzQxQkU2NUI1CisgNzogRkM4QzVGMjhDQjM4QzgzRAorIDg6IEYwM0YxNDVDQkNDNENGODAKKyA5OiBBMjhBN0M2M0Y2N0RERTdCCisxMDogMzA4OTQ4NkEyMjQ3QjcyQQorMTE6IENERDZFNkJBNUVENTNBOEQKKzEyOiBCNzVBMkRFOENCOTZBMjY3CisxMzogRjc0RDcyQTJDRDY4Q0VGNQorMTQ6IDM4NjVBQzhEMTcwRUVEQkEKKzE1OiBCMUI1MjBDRTVGQzJCQTM5CisxNjogNjU4REFDRkRENzAxQjRFQQorMTc6IDZCNUMxREE5NDg0RkNFREYKKzE4OiBFM0NERkI1NzU1QkRGRkMxCisxOTogNTZEQUZGN0U5QTkwODg4MAorMjA6IEI2RjhCOTcwRjY4QkMyQkQKKzIxOiA3QTAwREVFNjk3N0E5MUYyCisyMjogNkMwQ0U0RkQyRDAyQjM2QworMjM6IDhFREExMEQ4Njg1MDQ2NDgKKzI0OiA3NkZCMTA2Njg5RTY2RUE3CisyNTogNjdGNDVCQjI4QTIwRTExMAorMjY6IDVGMzIwNzA5OUFGOTNCMDcKKzI3OiBGNUUzODJGNzI2NkFCMzQyCisyODogMEUzMUFDMkU0Q0VGRkJEQworMjk6IDhEQkExQjJGQzY5ODBGRjAKKzMwOiAzMTEzNjhFNjJFQzJBOUUyCiszMTogNTBERDFGN0EzMTk3MjdFQgorMzI6IEYwREUxNDZDOUVDRjU2NjIKKzMzOiA4MUNFMDg0MkNFMjIzRjE1CiszNDogNEM0NDI1MzVBOEJDOUFEMgorMzU6IDA2RUU4ODY5REI5MUVCREEKKzM2OiA0MDc4RTdDQUMyOURDRUU3CiszNzogMTE1RDYxOUZCNzA1RjI4OQorMzg6IDNEM0Y4QTM4MERDQjhGQjEKKzM5OiA5MDQ0RTVBQjgwNDlEMjFBCis0MDogNjYzMjdGMDBCMDdDRkM3NgorNDE6IDgxMUFCMjNBNEFEM0YxMzIKKzQyOiBENEE1MDdFOTZCQjM5QkMyCis0MzogNTFDOUU0QzkzMThGODdEOQorNDQ6IEQyMjU1QzEzREJEMDlFODgKKzQ1OiBFQ0I3NkJDQjk2MUY4MTJECis0NjogODNEN0UzOTcyN0JCQkVDNQorNDc6IDQxNTU0MEYwQUUzNERENjUKKzQ4OiAyMzJEMjBGOUUxODhFMkM3Cis0OTogRUUzNzI2MUFCQTI3MEIyMgorCitLZXkgU2l6ZTogMTI4IGJ5dGVzCisgMDogOEE4RjhFNUM1QTA0QzczQgorIDE6IEIxOTdDRjkyMjg4M0NFNzEKKyAyOiA4QUYzRjg5NjQ2MENDNTk3CisgMzogNzU1RjMxM0FFQjE4RDNCOAorIDQ6IEYxREI1MjY4OEJCODc5QTgKKyA1OiAyOUQ2OEVBNjQ1NkIxQ0Y5CisgNjogQkU3QzQ0NDI2N0E3OTI1RAorIDc6IDQ2QTdCRjdERUQ1NzU5MzMKKyA4OiBFMkM3QUQ3QzkwMkU1RTE1CisgOTogOTBBMzhBRTFERDY5QzJFQQorMTA6IEFBOTVGQTA1MENEMzM4OEMKKzExOiAyMzgyMkI2QUQ1QjgzMDE4CisxMjogOEZENDJGMERCRkYzRkVFMQorMTM6IDY0NTA5OEJDOTRGREUyMUIKKzE0OiA3RTQzRDQzRUFDNTBFOTkyCisxNTogMkY1NDBGQzY2QTlFMEY0MworMTY6IDQ1M0U1MkVBN0IyRDFGOTIKKzE3OiBGNkY3MzFFOEM1QTMyQzU0CisxODogQjFFODk2NDY1MDRFNEQ3QworMTk6IEFCODE2ODQ1MkE3OTg0RTEKKzIwOiAwNDRCQjA3NThEQjU0MzVCCisyMTogRTlCQUU3Qzk5QTE1MkJGRgorMjI6IEI3NThGNzA3MDhCNjU5N0UKKzIzOiAyM0ExRUZEMEFBOTI1RDdFCisyNDogQ0E2MEREMTc0Q0JBMjNEQworMjU6IDVFOTE2RjJERjdCNkIzQ0YKKzI2OiBGMjcyM0E5QkZEODJCQjYyCisyNzogMkJDMzgxRjZDMDQ4Njg3RQorMjg6IDU3M0JGRDcxODk2QTQxMzMKKzI5OiAwM0RGNzI1MEMzRDY5ODAxCiszMDogODYzOTA2MDQ1NDY2OUJDQgorMzE6IEUzMTk0NUYwQTg3MjIxQUIKKzMyOiBBQTM5NDQ3QkJGMEE3N0VBCiszMzogMTc0RjFCNjVCRjZBMzRBMworMzQ6IDI3MTJGOTY2MDIyQTk1ODkKKzM1OiBCNjM1ODg3NkQ2RDU2RDE2CiszNjogMkE5MkMxMzFFNjhCNzdCRQorMzc6IDA0MEM2OTM1RjRDRkM0M0IKKzM4OiBGMjM1MDNDNzQxMjFDNjYwCiszOTogRUREMTIwODgzRjFGODEzRAorNDA6IEFGQzY1MDBEMzRCRDlEMzMKKzQxOiA5NjMxMTc0NDQ0MTdCREQzCis0MjogMkZDM0E1ODg2MUI0QTU4RQorNDM6IENGREI3MEVEOEJDRDExNzMKKzQ0OiA5MUI3NTc2MENGMzhCOEQ1Cis0NTogOTNBNTkwNDhCNzhCMzQxNQorNDY6IDdFNjBDNUU3NTIyNUQ0NUYKKzQ3OiBENDIxMkM2NDIyODc4RkZBCis0ODogREREMUIyNDFFMEUwRUY2RQorNDk6IDIwMzM3REI5MzEwNzgwNzgKKworCitDaXBoZXI6IGRlcworS2V5IFNpemU6IDggYnl0ZXMKKyAwOiBFMUIyNDZFNUE3Qzc0Q0JDCisgMTogOTI2MkFGRDhBRDU3MUUyRQorIDI6IDM2RDIwNjdEOTYwRUI4NzAKKyAzOiAzMTk4MzREQzY2NzA1MTkyCisgNDogQjQ1MDhBN0M1RjAxMkM5MworIDU6IENBRDFERUNEREVFODEzNDIKKyA2OiBBRTlFMUNCQjcxQzcxOUU2CisgNzogRDdGQkIxQ0RBRkQ1QjJDMQorIDg6IEJFMUE3MDU2NEUzQkZCNUEKKyA5OiA5NkQ5RUMxNDA3QTFCRDM0CisxMDogMDVFNEI5QUYzQTREQUJCMworMTE6IDBEQzc3NDE5RTFGMTJDMDIKKzEyOiBGNzNFNjIzNjkxOTBBNUUzCisxMzogODMwQzFDQTc4MjBBQkEyRAorMTQ6IEQyNTc0QjZBRUVEMEE0RjQKKzE1OiBCQzA4NzgyRTI5MzU0NkExCisxNjogQTM1RENDOUFBRDFFQkZCMworMTc6IDc5QjIyMjQ2NjdCMzM3MDYKKzE4OiBGOTQ2MkZGRDI4MDgyMzNBCisxOTogRDY0MjFDRDBEOTY5N0RDNQorMjA6IDU3Q0IyMTczRDY3RTcwMDEKKzIxOiBEQkUyREIwQkRDMDc2NDRGCisyMjogMDE0RTcyRTdFOTlDOTY5RgorMjM6IDM3OTAxQjE5NjNEMEIyOUIKKzI0OiA4RTEyQzIzOTI5MTI1Njg2CisyNTogNzNBQTlFMkE2MEMzMjdBMQorMjY6IDU0QTE5RDA3RDk0MUVBQzIKKzI3OiBBREI4Q0JCQUVFMTg0OEQ2CisyODogMzk5N0U4NjYxMTk4NTZCNQorMjk6IDRENjQ3NTI2RkU3RTFFMjcKKzMwOiBENTc0RkU3MzQyMTA0RjkzCiszMTogQjg0MzgzRTM0QTc5MEUxMQorMzI6IDMyMjIxNEJFOUI5M0JCNkYKKzMzOiBENEM4RTBCN0FBMTM5RDY4CiszNDogMkI5NzQ3Q0QyODBFNDhDOAorMzU6IEY5MkVCMkUzNzExRkVFMkMKKzM2OiA1Q0VFODRFMTI0Qjc4ODJCCiszNzogODI0Mjc0ODg1OTdGRjYxOAorMzg6IEIxRThCMzEzRDJEQzc2Q0YKKzM5OiAwM0UyMzdDRDQwRDdGMjE0Cis0MDogOEM4REMxMjk5MjkzRTE1RAorNDE6IEQ2Qzc0NjNGRTg2RDRFRjgKKzQyOiBDRjE1NTBDQUNFNjQ3Nzc5Cis0MzogQjk5OEIzRDMyQjY5RjAwQgorNDQ6IDFCOTRDMzQyQzNEOTExMDcKKzQ1OiBBQkQ0NTUxQjI3RjU4QkU4Cis0NjogMkIyNEQ5NzhEMUJGQjNEQQorNDc6IDg1MzYxRDM2OTUwNjM1Q0IKKzQ4OiA0NDgwMDlGMzhGMURCQjRBCis0OTogNkI5MDFCMkI3OUI2OTUwQworCisKK0NpcGhlcjogM2RlcworS2V5IFNpemU6IDI0IGJ5dGVzCisgMDogNThFRDI0OEY3N0Y2QjE5RQorIDE6IERBNUMzOTk4M0ZEMzRGMzAKKyAyOiAwQkQzMjIxNzdCOTM1OTIwCisgMzogOUQwOTNGMzE3NEVEQkFFMworIDQ6IDc1NkIxRjJDREYwMkI3OTEKKyA1OiA1N0MzMUMyQTkxM0MxMTI2CisgNjogQ0Y5MzYyNTc1MTdDNTNGQQorIDc6IDVGMDYzMDU4NDlFNUUxNTgKKyA4OiA5QTg1REZENzg4QzU5RDE5CisgOTogNjM5MjI3OUJCRTI5REMxRgorMTA6IDc2QjBBRjgzNUQ3OUM0RTgKKzExOiA3MDczRjM2REIxRTMxNDY0CisxMjogMjc2MjU4NjA1RjJDQUIzQgorMTM6IDNCNjlFOTc4MTFGREE5OTYKKzE0OiAzRTZFNDkxRDI4NjJBMUYzCisxNTogRjhGM0Y2OEJEQjAwNjUyMAorMTY6IEZEMzc2RTY2RDQwMUEwOTcKKzE3OiBDQTJGRTQ3ODI1ODA0OTk2CisxODogNkY1QzI1NkY4NEZEMTRBRgorMTk6IEQ3QjA3RjVDNDBGRjBDREUKKzIwOiA3M0YyRTA3NEYxMzI0NDk2CisyMTogMEIyQTM1MDE2RjI0QkQyMQorMjI6IEIwNDBEMkUzQjMxMUMxOTMKKzIzOiAzOTM4REVBMzQ3MTEyRTJFCisyNDogOUQ3QzE3MDNDRUMwQkZBQQorMjU6IEEwNzk0OUY3NkJERkFGNjgKKzI2OiA0MzA4N0VFRjUyNTY0QzRDCisyNzogMTExMzJCNTk5NzM0QUYwRQorMjg6IDYyQTA0QzgxOUZERDlBOEMKKzI5OiBCNzRGMEU1NjQ5RDMzNjkwCiszMDogOEU3N0U1MDA5QjBBQTMyMgorMzE6IDUxNzQxMzRCOUExODg5QjkKKzMyOiAwNTNFMzM0NDFEMTFBRTYzCiszMzogMDFFRjM4MTAxM0Y4NkU0QworMzQ6IEJDQTM1OERFRjM1REZENjAKKzM1OiA1OTA4QTg4NTEzRTJFNUEwCiszNjogQTMyMTRDODM2N0UwNEIwNQorMzc6IEIyQ0JCRTg1MUE1NEJFOUMKKzM4OiBCMjcxODE3RjYzQjNCNzZBCiszOTogMDhBRkJGODJBQkI5N0Q4QQorNDA6IDJDRTAyRUQwMTQxODZCODYKKzQxOiA2M0YzMDExQzk3RjZFOTkwCis0MjogQzM5MjM1MUY0MzI3MzhEOQorNDM6IDA1MzREREE1MEU2ODU3MjUKKzQ0OiAxNTA5NDU2ODcxRjVDQzIwCis0NTogMjM4MzAyOTkzNTkwMTM0MgorNDY6IDg3MTRGMUE1M0NDQjIxM0EKKzQ3OiAyNDkxQjJGRDNDRTZBN0NCCis0ODogNEJCMDIzOTlEODVCQjY2RQorNDk6IEI4QUMyQ0RGRjdBQzIyQzEKKworCitDaXBoZXI6IGNhc3Q1CitLZXkgU2l6ZTogNSBieXRlcworIDA6IDlCMzJFRjc2NTNEQUI0RTYKKyAxOiA0OEFFQjA2QjFCREIyMzk3CisgMjogQjUzMDkyNzE4MzYyMkQ1OAorIDM6IDBFQ0M4RjI0QkE3NDIyMTYKKyA0OiBGNjM1MkY5QjY0NjFEODJDCisgNTogQUY2MzE1QUU5OEUxMkE3MQorIDY6IEMzNjRENEI1MDZFRjI4QjkKKyA3OiA4MTcwNjFCRURGNUUwQTVECisgODogQzE5REU3QjFGMjA2NkMwNAorIDk6IEE2RTEzNDVFM0FBMUI3OUQKKzEwOiAwNkIwMzZCMDQ3ODU0MjhGCisxMTogMjQ0REFCM0Y3MjIzRjU2NworMTI6IEI5Q0YzNzkxRjZDNzlGNEEKKzEzOiA4NkM1QTAyQUYwNTE3QzVFCisxNDogQTE2RTMxOThGMTMxN0UwNAorMTU6IENGNzJBNDRDMDFFMzZEREQKKzE2OiAxOTlDNzJFQ0Q1RTYzMkVECisxNzogMEJDNjZCRjA1RUI3ODg3QQorMTg6IEFFMUY2OTZGM0Q2Qjc5NTIKKzE5OiA2ODVDOTIwODRGNjAwODg1CisyMDogREJDMTM1M0E5NUFEMjA5NworMjE6IEY0ODFFOThDQjM2Q0FCM0IKKzIyOiA4RjFDMDZBNDgyQzcwQkI2CisyMzogRUEwODc3Mzk5NTRBOUNFNQorMjQ6IDZEMEFENzI3RDhFNEVGOUQKKzI1OiA2MUNBMEY3OTY1RkVFMjQ2CisyNjogMEQ2NjRDQTE2QkE3ODVEQQorMjc6IDIzNTlEMzYzNzU1NjA1QjkKKzI4OiA2QjZFM0EyMTZBQkZCNTVBCisyOTogNkZCQ0NGN0IwMzQyRDNDOQorMzA6IDM0MzFGNDU3MkUyQ0JFNTcKKzMxOiAzNkQ4NEZDRTZENUQ4RkU0CiszMjogQzIzNEY2QUQ0MUUzNEU3NgorMzM6IDUyMkYxMkU4RDA2MTcyNjMKKzM0OiBBRDgxOTlCNkU5NEQ0RTc0CiszNTogNTZERUM3QzIxQzgzQjJBRAorMzY6IDIyQ0RCRkJDNUI0NzZFNjkKKzM3OiA3MEJBRDQ5NzM4MUYzNzhECiszODogNDU4NEYxNURCQzBFQjdGMworMzk6IERFMDYwM0NFRTE5QkNGQ0QKKzQwOiBFQThENTgyQzFDRTYyRkM5Cis0MTogNDI5OUMyOEE5MTJDRTU2OAorNDI6IDcyMDhBQjAwMEUzRkE5RDQKKzQzOiA3QUFFNkNCMzk4RDAxNjY1Cis0NDogMzNBNkFBNDJCNkQ3OTQ5QworNDU6IDJBRUM1NjQwQUQ1MzVENjkKKzQ2OiA3NEQzN0Q5REQ3QjY3MjQ4Cis0NzogQTUzMDBGRkY1Q0Y4NTgzMworNDg6IDgzNEY4MzM5OEQ1OTFDMzgKKzQ5OiA4NUM3ODdBOEI3RTUxOURCCisKK0tleSBTaXplOiAxMCBieXRlcworIDA6IDk1ODI3Q0I1MDRCRDQzQzcKKyAxOiA4RkJGNEVCQ0I4NDEzQUJGCisgMjogNUNGRjQxMUJFQ0VEOTk3MQorIDM6IENFRTJBRUI0NDE1RTBBNUQKKyA0OiBCQjNBOERGN0M1NEZBODhGCisgNTogRDUwOEI5MzNFRjMzNTExMQorIDY6IDk5Mzc0NTcyMkVGMEQ4RDMKKyA3OiAwNEVGQjIzM0FBODhFNzk2CisgODogNDc4QTdEQ0VBRjI0M0Y5MAorIDk6IDI2OUNDM0QxMzhFRDQ4RTcKKzEwOiA4OEVCRDE0RDJGOTk5Qzg5CisxMTogQjc0NDE2MjZENDQ4N0EyMAorMTI6IDQ2QTZFMkNFNkM2NjA1OEUKKzEzOiA2MDY4N0QyRDUzODE3NTdGCisxNDogODg1RDA1QUJCRjE4N0I4OQorMTU6IDUwMzJBN0VDRDNENTE1MjEKKzE2OiA1MEJBRjM2QkM1QzE0QThCCisxNzogOEU4MDU0OTk1NjlGQkIwRQorMTg6IEY4MzU5QjE4QUYzRTY5QzUKKzE5OiBGMjRFNDE1Q0I0RDJBQTk1CisyMDogMzYxODA1RDRFNDVCNTZCNAorMjE6IDMxNzIzMzZGMDFFMzUzMEMKKzIyOiAzMzNBNTUxRTBBMDNDNEEzCisyMzogRTJCOTkxOTk1QTJEMjk2MgorMjQ6IDA2N0NFRUREOEYyMTNCNjcKKzI1OiBGRUMzRjMwNjg1MUY4NjE2CisyNjogNEI4MERBRTZBQjExODk0RgorMjc6IDI1MEMyNkUyMUE4MjczQTIKKzI4OiAzMTNGMkE1MDU5MTVDOTA5CisyOTogNDJFMERDM0Q0ODE2QjM4RAorMzA6IDlGQUVFRjA1MTBERUU3MjEKKzMxOiAzQkI1RjVFRjc0QjRDRDdFCiszMjogMEZCQzkwMDdGNDYyQkVBQworMzM6IEI5RDE0NjdCMEQ3QTEwNDMKKzM0OiBEOUI5OTFDOTM0OERGMzIxCiszNTogMDYxRDU3NzgwNkM1MDc0MgorMzY6IDQ4QUVBNjdBQUFCNkZBMjMKKzM3OiAyMkY3OTEwMzgzQkRBODdDCiszODogOTk4NzA4N0VEQkE1NkZEOAorMzk6IDJGQ0M4MzQxQjY5QkFBMTQKKzQwOiAyOURFREI2QzJBNDMzRjUwCis0MTogRTA2N0QyNzQ2Qjk5QTlDQgorNDI6IEE1QzlDQjk3NUE4NTZENTcKKzQzOiBBQUZFRkQzQTgyRDYxODVCCis0NDogQkJFODk1MkNDOTNDQ0NDOAorNDU6IEZDMDhDRTA5MzRFRjJFMjUKKzQ2OiBFNDRFNjQyREJBN0NGM0YwCis0NzogQ0MyNkYwRThFODVBQjM3MgorNDg6IEQ5NUQ2M0I4Mzg5MDgyRTAKKzQ5OiBCQ0E5NDFDOTIxQjkxRTE2CisKK0tleSBTaXplOiAxNiBieXRlcworIDA6IDIwQjQyRDc3QTc5RUJBRTUKKyAxOiA5NkNGNkM5MUU1MTgzQ0EyCisgMjogQkQ4N0U3N0EzOEREQjRFMgorIDM6IEU3NDU0Q0EzMEI2OURFMkQKKyA0OiA4ODhGMjc4RDIxOTM4NEVFCisgNTogOTcyQ0I4ODdDREU5MjBGOAorIDY6IDQ5QkVDMUU3OTEzRjNDQUUKKyA3OiA5NkE4MUIzN0ZFRjYzQ0E1CisgODogNDA4REQyM0E2REE5NDBGQworIDk6IERBODZFOTJCQjczNTc1NUYKKzEwOiAyMDMyRjJEOTcyRjIyOEJECisxMTogOEY5RUY3REVFRjc0RUZFQQorMTI6IDU0N0M5MjAyNURDQUY5RjQKKzEzOiA4MENENDQwREZGMkVBNjJBCisxNDogN0Q2MTQxRDEwMkUxQjk0MQorMTU6IDMwNzU5NkFCRjVDOUE2QjIKKzE2OiA4MkUzRjFCMTdFQkQ1MkZFCisxNzogNTkxN0RERDExRURCNTVBMworMTg6IDI5MDlGNzcxNjZGMjRGOUYKKzE5OiA4OEJERTlENjg2MzI4OTQyCisyMDogOEY5ODdCNzM3RjZBMDExQQorMjE6IEE3NEIzRDFENjQzM0I5RjQKKzIyOiBEQThGOTVERTk0OTQ4MkVDCisyMzogOTUzQkE5QjI2QjlBQzQ3NgorMjQ6IDc2QTUyRkUxOTNDQkZBRjkKKzI1OiA0QkI3RDI1OTdBNzhGMkQ4CisyNjogNUM4QkU5NTEyNTFGNEIxRAorMjc6IDZFOEFCMzJBNEEyNzlEODQKKzI4OiBCQjk0QkM5OTM3QjQyODQ4CisyOTogRkYwRUU2ODZGOTdCRjhEQgorMzA6IDQxNDY2NTZBQjE0NzdFMTMKKzMxOiAxQkZDQTcwNTNFNkRCOEFDCiszMjogNEI5QTZBMzQ5QkZBOTI2RQorMzM6IDNCNUY2RkREMTI3QjBBODcKKzM0OiA1M0M5OTZFOTU2NTk4NTk5CiszNTogNjJDMTQyRTYzQzI4QjVFRQorMzY6IEJCQjcxRDY1NDhGMzI2OTMKKzM3OiAxMDc1NzZBQTI2MzUyNDU1CiszODogREUzMkUzMUZGRTAyQjZGOQorMzk6IDRDNURCODFEMTcxNUZGNUMKKzQwOiA4RTVDNzA2MjA2RjQ5M0E2Cis0MTogNEJCQzUxRTE4NEE2N0M5MgorNDI6IEFBRTIxNkI0MTNERTJBMDYKKzQzOiA3N0FFMjZGNDY3MjMzQjA2Cis0NDogRTg2ODBEMEU3MUY2QUFENgorNDU6IDcwNjFEQ0VENEJDOTRGNzgKKzQ2OiAwNjc3MkQ2MzgxOEM3RTg2Cis0NzogRUU1QjlDRkMwNkNCRDYzOQorNDg6IDU3ODRCM0VGQ0RDMjhERDQKKzQ5OiA0Rjk2MjEwN0EyRUY4NDNDCisKKworQ2lwaGVyOiBub2VrZW9uCitLZXkgU2l6ZTogMTYgYnl0ZXMKKyAwOiAxOEE2RUNFNTI4QUE3OTczMjhCMkMwOTFBMDJGNTRDNQorIDE6IDJBNTcwRTg5Q0Q4QjdFRUVFMkMwMjQ5QzhCNjg2ODJFCisgMjogODI4RjRGNkUzRjNDQjgyRUVFRjI2RjM3QjI2QUVBNzgKKyAzOiBBM0NBNzE4MzM0OTlGMjQ0QkYyNkY0ODc2MjAyNjZBNAorIDQ6IDMzM0FDQ0U4NEIwQTlERTkxQTIyRDE0MDdGOURBODNDCisgNTogMjI0Mjg1RjNEQjNEMEQxODRENTNGOEZGREM4MDA4RDAKKyA2OiBERTM5RTI5NzMwMjVGRTlFQzFBQ0RFOEYwNjk4NUY5MQorIDc6IDJGMDBGNDVBMDFCMUIwQUE5NzlFMTY0REM1Q0NGRTEwCisgODogNDM3NzVGM0NCRUU2MjlFRjZBOUJBNzdDQTM2MTcxRDkKKyA5OiAxRTZBNjdBQkYxQjZBQ0Y1OUZCNDg0ODY2QUMxNUE4NgorMTA6IDcwNDkwOTg5RTJDRDIxNDU3MzA5MjFDQ0MzN0YwQTE3CisxMTogNjdCMEREMEVBOTAzNDg2QjFDQjU2NTkxRkNGNDI2NzgKKzEyOiA3NzRBQUI3MUZGMjhFNDlBMzBFMUU3MThEOTgxMTRFOAorMTM6IERGNDc5Nzk5MEUxQzY1QzlGNjczNUJEOTY3MTY0RDQ1CisxNDogREUyNzc5REYyNkZDMUI5OUY1NzZFRDRDRkJBRTc2Q0IKKzE1OiBBMTNBRDE3NDQwNjQxQjM0NjBBMDExNzVFMzI3NEFCOQorMTY6IDExNjY0OTkxNjVGMkExMTk2Q0EyREI4MzFGMjY0RTc3CisxNzogMzVEMjRBMzg1NDE2Q0YyQTQ0QUI5N0E0QUVDNDVFMTQKKzE4OiBEM0QwRTBEQzk2MkIxQUQxQUVEOTJGNTcxMjkwODhCMgorMTk6IDAwRUYzRTI0NkIzMjYzNEFCQUY4QkVFMzFENUM1OTJBCisyMDogNzlCQkYzRjgwNzY3NUI5RjI2NEJBQkM2N0RGNEMyQUIKKzIxOiBGMzkxRjJENThGMDk5OEYyNEJDOUU1RkE3NURCOUU5OQorMjI6IDA2NkVGMTNDMjYxN0U5N0U2MDE1Qjg2QkExRTA1OUIyCisyMzogNUIwRTJEN0FFMUUyNzM0QjlENTczNEM4N0Y3QkUyNzIKKzI0OiBDREY3MDIwMjEyQjdDRjIxRjQ4MTc4MjkzODZBNkY4RQorMjU6IDI0ODczRTFBMEVGNDkwOERGODUxMTRFRDlCREIwMTY4CisyNjogOTk5MDQzNjBDODQzNDcyRjcxQUI4NkIyNkRDNzhBMDAKKzI3OiBCRUU3MEIzNzM1QTY3MjY4NTc4RkYxMDdDMzI4OTQwQgorMjg6IDk3REJCMjgzNTM2QkM4QUU4REJGNTZGMzQ3NEM3NzQwCisyOTogMkY0QzkwMzk3NUVGNzA5RTAwNEQyNERDMTMyQThBNTEKKzMwOiAzRUYwODU5QTI4MTc4MkY5MDUxOThDNjA3RkJFNUM0MworMzE6IDJEOUNENDhCQzZBOTlFODY0NjhDQkREMkE1NUM3RDVGCiszMjogNTUxOEQzRUQxOEQ1RTVBNjI3NTJDREYwODQ2RDBDNzcKKzMzOiBGNzUxRTlDQUYxMDdCQUQ4QTFGMUY5QzM3NDI3N0E2QQorMzQ6IEM1QkE0REU5MDdDNDEyMjFGQkFCQzVFQzQzNzEwRDBDCiszNTogNUNBNDg4MzYzMzA4NzAzNjVBMTBFN0I2NzY2OTVDOUQKKzM2OiA5MzdBOTY0RTBFQTREMjQ2RTk3MjkzMzc1QjE2N0VGRAorMzc6IEMwQTg3NkNCNjk1NzcxNzU0MUE5MENDQ0IwMzRCRkI4CiszODogQTU3QzkzQTA5RjkxNjBBMjhEM0Q0REVEQzk4Nzc0NkMKKzM5OiAxRkZBMUUwQjVFRTBGMEExODQyNUY2MjcxNzI1NDQxOQorNDA6IDg0MTFDODcyNjJBRTQ4MkNGQzQzQzMwOTJCRUFGRDkwCis0MTogMEI5QkIzNzlGQjM1ODdBOUFDRUVFRDQ3NzFEOERDMjAKKzQyOiAzQjMyRURCRjk1NTdFMURGQkNFRUMyNjlCNTFGQTQ5NAorNDM6IEQxMTA0RTI4ODg2NzlBOUVGNkExM0FFMDBFRDdFMUZCCis0NDogMEVDOTg0OUJBRDU4QTI3OUI0MkI1QkE2MjlCMDA0NUIKKzQ1OiBDRjIwNkU4RDMzOTk5MThFNzVERTQ3NjVERDc0MzA2MAorNDY6IDU1Q0NFQjI4RTI3RDREQzdDRTI1NDY0NTRGRkQyQzMzCis0NzogNkUyMzM5MjgxNTgzNDIwQjc2RTE3NTBEMzUyOTZDMTIKKzQ4OiA3ODAwRUMzRDhDMzQ0QkU3RjJEMjgxMkY1QUZGM0RBNAorNDk6IEI4MEY0QjBCREFBNTRBMDRENUEyNkJDQTE4NUY0RUEyCisKKworQ2lwaGVyOiBza2lwamFjaworS2V5IFNpemU6IDEwIGJ5dGVzCisgMDogRjYyRTgzNDg0RkUzMDE5MAorIDE6IDAzQjRERkU1NDIzQTExN0IKKyAyOiA4Q0U0REFBMjMwN0NGMDE4CisgMzogNzdEOEM5NThEQUU0MzM2RAorIDQ6IDAwRDM2N0Q1QzFGQzk1RDgKKyA1OiBDMUYxMzA1QTVCMDFBNDc0CisgNjogQzM5NTYyMjVDODQ2RjY5NQorIDc6IDJBODk3N0RDMTg2NzQ5QTMKKyA4OiA0MzNBQzZCNTZBRTVDMjAwCisgOTogMTA0ODlBN0U4N0Y4MDNDRQorMTA6IEYxNzZERjAyMkQwMkQxMzYKKzExOiAxMzk1QUUxQzBDMDBBQTFCCisxMjogMEMxQzNGRjMyRTkzRjc4OQorMTM6IDkwMUVBQUQ1NjJFRTkyREYKKzE0OiA1OUQ1NUQ5RUUzRUEwMTU0CisxNTogRDkxMzVDRTBCQkY2OEFDNworMTY6IDkwQThFNEE4RTc2MzQ5QTMKKzE3OiBDMDRFRDUyQUE2OUQxRUQwCisxODogMTlFODQyNjk4QjUwMDhBNAorMTk6IDI2RkNBMEZBM0FBNzcxOEQKKzIwOiA2MjYzNUZEMUE1NDJDN0MwCisyMTogNUEzNjk1Mzk4Qzk3OUU0MAorMjI6IDM0OTk4QkI3MjEwOEQ4OUYKKzIzOiBGODg5Q0Y4OTI5OThENjg5CisyNDogMkM2QTRENjFGNDY4RjE5QworMjU6IEVDNzBENTlGQzkwNjM0OUIKKzI2OiBCOTVGMTFGRDA5OEIzNEE2CisyNzogMzJGODYyMDZCQjRFNTI1QgorMjg6IEU2QkU1MTA2M0I2MENCOUEKKzI5OiA4OTY0RTQ3QkFDMjJGOTk1CiszMDogQjFDMjk3ODgzODE5NzQ3QgorMzE6IEYyQUUxRjM5RjU1RkI2QzIKKzMyOiBFNjMzRUEyREUzNDI3NjdFCiszMzogQUYxRjBFQ0JDQTc4OEEyOAorMzQ6IDZBODk4RjQ0MDc2OTZCMjcKKzM1OiBDRDlDQjUzNzRFQTA4MEJECiszNjogMTU4ODFCMDIwMEFFNkE0MgorMzc6IDU3OUQwNUU1RjVERTc4NDAKKzM4OiA4NkY4QzY4M0QyM0VCOTc2CiszOTogRkRBQzdEQzZDOEY3Nzc3RAorNDA6IDEwRDZGNzY0MTQwOUYwMjcKKzQxOiBGQ0RBQTA4NzJEMUVDNjFBCis0MjogN0EzNTM5OTFBODEzNDREQworNDM6IDQzNjYxMTg3OTU2RDNGOEQKKzQ0OiA1MTkwRkRGQjkwNEE3OEYwCis0NTogRUY2NTFFNjdGNjVDQ0Q1NworNDY6IDVFNTM5QzYxNzQ4QkRFM0QKKzQ3OiBFMTFFMjNCQThCRUJBNDJFCis0ODogQkFFRjA5NTYxNzNCMzJBRAorNDk6IDBBQUIyOURGNjU4NjFGNEMKKworCitDaXBoZXI6IGFudWJpcworS2V5IFNpemU6IDE2IGJ5dGVzCisgMDogMzBGRjA2NDYyOUJGN0VGNUIwMTA4MzBCRjNENEUxRTkKKyAxOiBERDdBOEU4N0NGRDM1MkFGOUY2M0VBMjRBREE3RTM1MworIDI6IDBEMEJFOEYwNTUxMEVCRDZBM0VDODQyRTVCRDlGQzJBCisgMzogMzMwRjA5NTgxRkRDODk3QjNGRTZFQzFBNTA1NkE0MTAKKyA0OiAzMDM0OUQ5NjVGNDNDMjk1Qjk0ODRDMzg5QzREOTQyQworIDU6IDkyMjUzNDNGMDA1NkJDMzU1MDYwQzAyODJDNjM4RDAyCisgNjogRTNBODVENDFCNTMzNzUzM0M0RDg3NzMwOTQ4QTlENEUKKyA3OiAwOURBMEREQjY1RkY0MzEwODFDQUIwOEEyODAxMEI3NgorIDg6IDZDMEQwQkQ2Q0VBRkI5NzgzQjMxMDIzRkQ0NTVEQUM2CisgOTogRkJFNkYyNkI3Q0EzMjJBNDUzMTI4NTZENTg2REUyRUUKKzEwOiAxRjI2OUVDMDcyRDBGQkE3MkU4N0NBNzdGOEI5ODNGQgorMTE6IENGRkFFOUFERTMwMDZCRDUxMUVEMTcyRDQyRjE2RDA1CisxMjogNzNGMEU5REU4OUY0Qzc1NDE1MDZGMDUyRDE4MUJBQzIKKzEzOiBGQ0ZBM0UyRTg5RkY3Njk4MzQyOTVDNzc0MzFFRjdDRQorMTQ6IDA0NTIzNjAzODNENTZGODI3QzgxMjYzRjZCMDg1NUJDCisxNTogNDA3NDRFMDcyOTlENkEyQTIxMEJFNTU5ODgzNTIyMUIKKzE2OiAyRjBGQzYxMTQ4QzM2RjRDN0I0MkRGMjc0QUQwRERFMAorMTc6IDJFQTBFOUJFOUU0RTRERjg1NDg4RkU2RTdDRkNENkUzCisxODogMEFEMTI1NEZBNjRDMzk5NkJCRDQ4NUQ0MUEzNjg3QTAKKzE5OiA1QjU1OTg4NjUyREYyMDAzNDhBMTE0RjgwMkZEM0MwMworMjA6IEMzMjkwNkFGNzY5MzRDMTQzNkNBNjBCQUQ1OEEwQzY2CisyMTogNTlEODc5ODdERTlERDQ4NUM0NTM3RjNBOTVBMTY0QTAKKzIyOiAwQTcwNkFERjQ4OEQ4NDYzMkM5NkY0QkVDNDNEOUZBOAorMjM6IDBCNzRFMENERDE0RDk4NEIzNzQ5MUUyRDlGQTYzQ0FFCisyNDogNDdDQjE4MjdEMTUxQTYwNDczRTY3QkQ1RDIzMzEwMkYKKzI1OiBGNDU1QjRCNjY1RDNEMEFGQjI1RkRFNEEzMzEyQUZGNgorMjY6IEY5QTA2NDk0MjFENDVERjYwNDIwNjg1NEY2ODFEQkRCCisyNzogMjE0NzdGNTU0NjMzOUU0QjZEODIxNTM2OEVFOUY4ODQKKzI4OiA1Nzc2NDBGMjNDQTczMzQ1NzAxQjA5MDZERkFCQTRCNworMjk6IDg5RjhEMDhBNkUxNzM3NTkwMjBERDczMDFFMEZFMzYxCiszMDogNDRFRjdBRjcwNDNGRDRCODExMjM0NUNFRTQyQkM5NjkKKzMxOiBEN0NGMENFMDRBNTcyNTNGNEM2M0NBQkM0QTVDQjAzNAorMzI6IEFGNzNEM0Y0Q0VEMzI1OTNCMzE1RTI3MDc5MTMxRDIyCiszMzogRjZFNjAzRTM0NTUzNTlGRTQzQTNCODNBQUYzQUYwQzUKKzM0OiBEQ0MzRkI1NTdGMkMzMDFCNjMxREVGNDk5MDk3RTRGRAorMzU6IDgyODVBMjVDRjZGN0U3MDE2NDQ3MDhFMTIwODFDNjJDCiszNjogRUM3MDJERDAyOTNGNEM2NDZCMUM5QzI2MDY3NjI4MTYKKzM3OiAyODk0OTFFNUE2NURDQTYwNUI3OEU4OERBOEE5RjhBQgorMzg6IEQ4MkZCQzE0NDUyQkUzNEM1ODQwREFEODFGQzJBNjVFCiszOTogQjg4QTM0MEVCMUJGOEQ1QURFNkE0RTZDMTYxMDRGQzgKKzQwOiBDOUZDM0Q3MEQyQkEyNkM0MDU5QkQzRDM0MTM0MjY0QworNDE6IDE4Q0UzRDI5MjBFM0JERUZBOTFDMzY5RTlERTU3QkY0Cis0MjogNTA5MTdBRTU4Mjc4RTE1QTE4QTQ3QjI4NEQ4MDI3QTMKKzQzOiBCREE2RjlERTMzNzA0MzAyQ0UwNTY0MTIxNDNCNEY4MgorNDQ6IEMyODc4OThDMTQ1MTc3NDY3NUVCN0E5NjRDMDA0RTBECis0NTogM0JERTczRTBEMzU3MzE5QUIwNkQzNjc1RjFEM0UyOEQKKzQ2OiAzMEZGNDMyNkM4OUMwRkZFNEQzMUQyRTkyQ0MwQkY5QgorNDc6IEY2OTgxNkYzMDRFRDg5MjIzMkYyMjBGMjkwMzIwQThECis0ODogMTM2ODE1M0YxQTU0RUZGOEQ2MUY5M0EyRDZBRjIxRTMKKzQ5OiAwNkREMjc0ODk0QjZFREYzMTU5QTE0MDNGNDdGMDlDNworCitLZXkgU2l6ZTogMjggYnl0ZXMKKyAwOiA3ODI4QjE5OTdEM0QwNTAyMDFEQzZFRTQ1Qzg1MjFCNQorIDE6IDBENzdGODk2RjlDRUYxNkRBQUZDRjk2MkMyMjU3QUFFCisgMjogODlDMjdCMDYyM0Y1RUVDQ0EzOEJBRTFBRDg2QUUxNTYKKyAzOiA0NEVDMDk4MzQwNTIwMDlDQzNDRDY2RTFCQTExQUYwMQorIDQ6IEY5MjJCRkRCMDNGQjE4NkEwNjlDMUU3QjQ4MjIyRTNECisgNTogMjc3Rjc5NzE5NTVEODk4NEFBRUNGMjg3QzMyQjgyMTEKKyA2OiBFNzdFRDAxNDRBM0VEODI3QjcxNDUzQjkxNTYyRkUyNQorIDc6IDE3NjBFRkQwNDQ3N0FFNTI3QkMzN0Y3MkM4QkJCQ0FFCisgODogMjYyNTk0MjVBQ0Q1ODIwN0FFMzI4QjNGMUEyMTdBQzEKKyA5OiAwODc2QzREQzUxRDIyNjU3QzQxMjFFOTA2N0MyQzNCQQorMTA6IDAyMTQ5ODE1OTJDOUNFREQ0RDY1NEY4NEFGMTc5M0E1CisxMTogM0UxMUZBMDI3QkM0RjE1MDQ4RDI3QjE4NzA2MjI1OUEKKzEyOiAyNEU3RDYxQkIyMUVBOTBCNTI4MkI0M0FBRkIwREJEQworMTM6IDY4OEY1NkVDQjQ1QjdDMjQyMDAwNjUzNDYwRjA0QTIzCisxNDogREZBNTg3NTAxQTg3NUFDREU4Njg3QTA0QUU0MDQ4NjEKKzE1OiA0QzIxQ0MzRkJCNzY4Q0M5QUYyMjQyRkEyMDZGRTQwNgorMTY6IDVDQTBCMDNGQTc3NTFERUJCRTcwQ0IyMUFBNjE3NjVBCisxNzogNDg3OUIzQUMyNjI3MEM0MjI2NDVCOUNBMjlDQUQ4QkIKKzE4OiAyNEY5NDFFMUI5QUY4NEMxOEQwMzg4NUVBQUNFMTZFMworMTk6IDA1RTE2M0EwMTUwMTIzQzI2NjQxMzFBODFCMjBBRkMxCisyMDogRDYwNkNBQTg1MzYyRTIzNTk4RTVCOEJENjBDNjA1MDYKKzIxOiAzM0JEMEFFNzUxMDE5QkI3NTFDMTUxQUU0N0JENTgxMQorMjI6IDc1REE1MjNGNUY3OTNGOTAwMzQxNDRBMzU5OURDNUU2CisyMzogQ0Q0NzA5QjU2NTIxRUEzMDZGNUFEOTVDQ0E4NzgxODMKKzI0OiA2QTRFQzJFRERFQkJCRkVCNjJDMUYxM0Y3QTU5QkYyMAorMjU6IDJBMzYyNzJEQzRFRkRGQzAzRjREQ0YwNDlFRDJBREZGCisyNjogRkQ0RjM5MDRFOEUzN0U3QzMxNTA4RTU4Mjk0ODI5NjUKKzI3OiBCQTY0QkFFMUMyQUJCODU5OUEzMUIyNDVEQkFEMTE1MworMjg6IDc1N0UwMTUxNzgzQTUwRkM5MkFFNTU4NjFEQ0Q3OTdECisyOTogNUU2M0JEQTMyMTdFQ0I1NDQ5NzJDQTE0QTkwNzREQTUKKzMwOiBFNTJGMTE5NTkyMTc2N0ZBMjQxMEJBMDk1RUE1QzMyOAorMzE6IDZEN0U0MkQ2N0UzMjlENjY5Mjk5QjVBNTkwMDE3RThECiszMjogMDUxNkY2RjdEOTlBREU1REM0MkU2MzVCQjU4MzJFODAKKzMzOiA1N0ZCNEU2QjgyRUQyQTMwOTEyNDhEQ0VGOUMyN0YxNAorMzQ6IDI1MjMxRDBFOUI5NjUzNDk3N0QyRjJBRjkzREQxMEFCCiszNTogODQ3QzRDNTI0QTU4NjU2OEQxOUVGQTNFQ0EzNDNGMUMKKzM2OiA1MjQ0ODgxNDA2NEUwRjMzQTRFQTg5MzY4QzJFMUFDQworMzc6IDQ2MTI3NTQ2NkZBQTdCQzE2QUJBRDlFQzQ1OUJENjdBCiszODogMTZDODMyNEEzODNBMDBEQTA2REJFQzQxOUI2OUM1NTEKKzM5OiA1RjI2RjdDRjcxNUZGMjY0OURDQzNDNzFFQjZCOTJERgorNDA6IDU3NTM2MzQxMUZCMDdDMDY3Q0Q0MzU3QTFDRDFENjk1Cis0MTogQUI3MEYwOEJBQjUxQzVGNTcxMzlBMTA3RUU4NThBMTIKKzQyOiA4ODdGNjJBRTNENzAwRUM1MzIzRURBMjMxQzZCNEM0OAorNDM6IDdCOTg1MUIwMURDOTA4MzI5M0YzQjIyNjY5MEE1NEY0Cis0NDogMzZFMDNERjUxQzU3NEUzNUVGMjA3N0RCN0E0OTU0OEUKKzQ1OiBFMjM4QTU2NDI0NkIxNjNGOTdFREQ3MzNBMjM1RURFQgorNDY6IDMwNjc5Q0UwODA5MTVEQzNCRkE5MUQwREFGRjVFODJFCis0NzogN0MyRTgxNDVEODAzRDRGRTE4RUUzMjk5NUFBQzE2QjAKKzQ4OiAyNEQ2RjYxRUNDODcyMDY4MDQ4ODVEMzNCRkE3QjJDQQorNDk6IDFGNEY4MTc1MUNCM0ZBRkRDOUY5QzI3RTYzOUYzNzBCCisKK0tleSBTaXplOiA0MCBieXRlcworIDA6IDMxQzMyMjFDMjE4RTRDQTE3NjJCMERFNzdCOTY0NTI4CisgMTogMEI2RTRCRDkzNzc3MzU5NzY0N0ZGRTBBMzg1OUJCMTIKKyAyOiA2N0ExMTZFNUY3NjI2MTlERTcyRjk5QUQxNTYyQTk0MworIDM6IEI2QTg0MTY2M0ZCNDY2QUNBRjg5QzhEQTVCQTA4MEYwCisgNDogMDQ0MjcwOEJGODA0NjQyQjlCMUM2OUY1RDkwNTgxN0UKKyA1OiBCQzc3MzkxRUFCNTMwQjk2Q0EzNTMxOUU1MTBEQjMwNgorIDY6IEFFRDM3OTkxQTUwQUVDQjcwQzFCOTkxMzdENUIzOEYyCisgNzogODczNUY3QUYwQkY2QzVDN0UzQzk4MDIxRTgzQTMxRUUKKyA4OiBBNjE0MjQzQjFCODcxRDgwQkRDRTRBMjNBRDAwRjlGQQorIDk6IDE2QUM2N0IxMzlBOTJBRDc3Nzg3MUM5OTBEM0RBNTcxCisxMDogQjE3NzRBMkExMkE4Q0FCMjVEMjhBNTc1QjY3Q0VGNUQKKzExOiA0QzlCMUExMjBCQzZBMzNDNjJBRjkwM0ZFRUMzQUY1RgorMTI6IDdCMTI4RjAwNDgwRTQ5N0M1NzU0RUUzMzM0NTdFRTVFCisxMzogQUI1NkQ1NzgyMjk0OTJCOTVFRDMwOUMwRUM1NjY2NTgKKzE0OiA0MkZBRjU3Nzg1NUZFREIzNDQ2RDQwQjRCNjY3NzQ0NQorMTU6IDg0RTBDMTlCNEE0NTEyMDAxRjY2M0UyMkQzMTg0RjBBCisxNjogOEIwMTY4MEQwNDlGNUE5NDIxQkE5QkVEMTAwQ0MyNzIKKzE3OiAyQjFENzBCOTJBNURGMTJDRTBGQTZBN0FBNDNFNENFRQorMTg6IEM3RjYxMzQwRDFCMjMyMUExODg0RTU0RDc0NTc2NjU3CisxOTogMTUzQzA3QzU2QjMyNTMwODY2NzIyQzRERUFDODZBNTAKKzIwOiAyRUFDQkVGQzRBMjlEMTI1MEVFQUZEMTJBMUQ0QUU3NworMjE6IEZDQ0I0MEIwOTk3RTQ3NTEyMjk1MDY2RjFBMDM0NERECisyMjogQzE0OUE1NDMzNDVFMkExQjgyNDlGNzFDQjlGOTAzQTQKKzIzOiAzRkQwNjg4QThEMEJFNUYwNkYxNTdDMjM0QzI5QkY5QQorMjQ6IDZBM0Y4MTNGMzk2RDc3QzdGNDY0MUVDQzNFMEJGM0FBCisyNTogRTI4ODhCOUQyQTZEODE5MzY3RjYxQzU3OTI4NjZBOEYKKzI2OiAxQThBMDAwRjkxQUY0RTYwMERERDg4RTA5OEJEOTM4QgorMjc6IDIyODNFNzU4QzA0NTQ4RUY4QzM3RkE5RjU3MDBBN0FECisyODogNEZENkQ4RTE2NzhEMkI4NTUyMEI5NkMwMzhDNTgyQkYKKzI5OiBEMTNDMEIyMjhGNzkyRUY4OEYwOUVEMTkyQzU3MTAyOQorMzA6IDFBMkEwNkIxOTg3QkUwREFEQTRCNTU4QUU1RTZBMTI4CiszMTogMDk3QjA0NjBDNDdGMTgwMTk4NkY1NzA2QTY5RUIwMUMKKzMyOiBERDE3QkFDMDczNzUxNUM2Mzg2RUNBNkE2RDZDMDJCNgorMzM6IDU5ODlCRDFENDZGRDZFQzE0RDRDNTVENUQ2RDE3Rjk5CiszNDogNDMxMDAyRTAyMjRCRDM0QjBCOTM5ODgzNTZDMTlFN0MKKzM1OiAzN0RCNzU3MDI5NkRDQ0U0NUFCRERFMzZFQkU0NzMxRAorMzY6IDQ3MzFERTc4RUVCQUExRDAyNTY4RUVFQTJFMDRBMkY1CiszNzogMUY4Nzk3NTNBNzk2NEFGNDRDODRGRDU3NjVEOEUwODAKKzM4OiA1NEYxMjA3MjZGNjhFQTRCMDUwMTM2NUNEMkE4NDc1OQorMzk6IDM2NkU0M0JCNzQ0QzYxNTk5OUU4OTZEMDFBMEQxRDBFCis0MDogMTg3NDdCRDc5RjFEMDUyOUQwOUNBQzcwRjREMDg5NDgKKzQxOiA0Rjk4NTRCQUUwODM0QTBDNUZEMTIzODEyMjU5NThGMgorNDI6IDdDMTRBREY5NEEwQjYxODI4OTk2RDkwMkU0Q0NGRjNFCis0MzogMjQyRjBFOUNFOTZFNEUyMDhBOUUwQzVENzZGOEU2OTgKKzQ0OiAyN0VFMTc5RTJBOTMwMUI1MjFCMkM5NEVEM0QzNkE3NworNDU6IDg5MkM4NEE1RTc3RTg4QTY3RjVGMDBGMzU5N0Y0QzA0Cis0NjogRkM3ODgwRDc4NjBFOTBERTE3RTkzNTcwMEZDOEMwMzAKKzQ3OiBCQzQ5MzczRjc3NUJGOUNENkJEQzIyQzg3RjcxRTE5MgorNDg6IDM2NTY0NkQwREUwOTJBRjQyRUM4RjEyQTE5ODQwMzQyCis0OTogNjJEMEU5QzIxMEEyMEVDRDJGRjE5MUFEMzQ5NURFNkYKKworCitDaXBoZXI6IGtoYXphZAorS2V5IFNpemU6IDE2IGJ5dGVzCisgMDogOUM0QzI5MkE5ODkxNzVGQworIDE6IEY0OUUzNjZBRjg5QkQ2QjcKKyAyOiA5RTg1OUM4RjMyMzY2NkY5CisgMzogMzQ5RUM1N0EwMjQ1MTA1OQorIDQ6IDU5RTM0Q0YwMzEzNEE2NjIKKyA1OiA0MzZDMTZCQUI4MEUzRTJECisgNjogODFDMzUwMTJCMDhBMTk0QworIDc6IDA1NkNDQzk5OTFDMUYwODcKKyA4OiAwQTU5RjI0QzQ3MTVCMzAzCisgOTogM0MyQ0ZGOThBRTg1MDBGRAorMTA6IDkxMzZDM0ZDQzMzMkQ5NzQKKzExOiBGQTNGQTcyNkU2QkVCQTY1CisxMjogREQ4NEU0RjlGMzlGQjdFRQorMTM6IEEzRjM5N0NDOUZCNzcxRjUKKzE0OiBFMkQ2RUNDMUY0MEE1MUM3CisxNTogNjcwNEExQTcwNTE2M0EwMgorMTY6IEJEODIwRjVBRjdERUVCMDQKKzE3OiBFMjFFMzdDQzEyMjAyN0ZGCisxODogRTMxOTA4NUQ4RTJDMUY0RgorMTk6IDBEREZFNTVCMTk5QTQ5QTkKKzIwOiBCNzBGMzlDQ0NCMkJBOUE2CisyMTogM0YyRjI1NzIzQUVEMkUyOQorMjI6IDc1MUZBQ0Q1RjUxN0FCMkYKKzIzOiBEMzJDRTU1RkJGMjE3Q0U5CisyNDogOTEzOTMwMThFQTg0NzAxMgorMjU6IEQ1MEYxQzU0QkFCRTcwODEKKzI2OiBDNzMzNTBGQkM1QjNBODJCCisyNzogRTlBMDU0RjcwOUZENUM1NworMjg6IDk0QkQ1MTIxQjI1NzQ2RDQKKzI5OiBFRTE5Rjg4QjI4QkVCNEI3CiszMDogQ0U2ODQ1RkQxM0EzQjc4QQorMzE6IDU2NjcyOUQwMTgzNDk2QkMKKzMyOiBEQzBFMUQzOENCNUUwM0E4CiszMzogMjUxQUQyQjI4NDJDNzVFMworMzQ6IEQzNDRBQzQxMTkwRjM1OTQKKzM1OiA1NzlCOTU2QTM2QURBM0E4CiszNjogNUY4M0QzQUZFRTlBNkYyNQorMzc6IDJEM0ZGODcwOEEwM0M2MDAKKzM4OiAzMkE3MzJDN0JFRUJCNjkzCiszOTogRjQzNzI3NkZBQTA1QkIzOQorNDA6IDU4RERENENEMDI4MUM1RkQKKzQxOiBFQ0MyQzg0QkQ4QzBBNERDCis0MjogQkFCMjRDMkNFRkUyMzUzMQorNDM6IDUyNDRCRkEzRTI4MjFFN0QKKzQ0OiBBNEIyNzNFOTYwOTQ2QjJDCis0NTogMDM5Mzc2RDAyQThENjc4OAorNDY6IEQzRUI3MDc0RTNCMDUyMDYKKzQ3OiA4OUMxOEZGQTI2RUQwODM2Cis0ODogMUYwNUEyRDJENzg5MjdEOQorNDk6IDAxMzNFMTc0NTg1NkM0NEMKKworCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9ub3Rlcy9lYXhfdHYudHh0IGIvbGlidG9tY3J5cHQvbm90ZXMvZWF4X3R2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWNkN2MxCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvbm90ZXMvZWF4X3R2LnR4dApAQCAtMCwwICsxLDQ2MSBAQAorRUFYIFRlc3QgVmVjdG9ycy4gIFVzZXMgdGhlIDAwMDEwMjAzLi4uTk4tMSBwYXR0ZXJuIGZvciBoZWFkZXIvbm9uY2UvcGxhaW50ZXh0L2tleS4gIFRoZSBvdXRwdXRzCithcmUgb2YgdGhlIGZvcm0gY2lwaGVydGV4dCx0YWcgZm9yIGEgZ2l2ZW4gTk4uICBUaGUga2V5IGZvciBzdGVwIE4+MSBpcyB0aGUgdGFnIG9mIHRoZSBwcmV2aW91cworc3RlcCByZXBlYXRlZCBzdWZmaWNpZW50bHkuCisKK0VBWC1hZXMgKDE2IGJ5dGUga2V5KQorICAwOiAsIDlBRDA3RTdEQkZGMzAxRjUwNURFNTk2Qjk2MTVERkZGCisgIDE6IDQ3LCA1N0M0QUM3NUE0MkQwNTI2MEFGQTA5M0FDRDQ0OTlFRAorICAyOiBDNEUyLCAyNkM1QUIwMDMyNTMwNjc3MkU2RjZFNEM4MDkzRjNEMgorICAzOiAxNjE3N0IsIDg1MjI2MEY5MUYyNzg5OEQ0RkMxNzZFMzExRjZFMUQxCisgIDQ6IEYwOUY2OEJFLCA3MDA3NjZDQTIzMTY0M0I1RDYwQzNCOTFCMUI3MDBDMQorICA1OiA4NDcyNzA1RURGLCBBQzRDMzM1OTMyNkVFQTRDRjcxRkMwM0UwRTAyOTJGMgorICA2OiAxNEMyNUVCNUZEMEQsIDhEQkQ3NDlDQTc5Q0NGMTFDMUIzNzBGOEM5NzU4NThDCisgIDc6IEY2QTM3RjYwNjcwQTg1LCBBRkJEMUQ1OTIxNTU3MTg3NTA0QURFNjEwMTRDOTYyMgorICA4OiAxQUFDRkVBRThGQkFEODMzLCA4MkY0NzczMjVENkY3NkJCODE5NDBBRTI1Rjk4MDFDMgorICA5OiAwNjk0MTQzMjRFQzI5MzY5N0MsIEI5ODBFMjFDMDlDQTEyOUI2OUU5MDMyRDk4MEE5REM1CisgMTA6IEQ4MTc0REU5QTJGQzkyQjdEQTlDLCAxRTQyQ0M1OEJBMkM4QkZEODM4MDY0NDRFQTI5REI2MQorIDExOiAyQzA4N0RFQTMwRjhCN0VFNTEwOTkwLCA4M0RCNDAwQTA4MEM0RDQzQ0FBNkVDM0YxMDg1QTkyMworIDEyOiBGMzZCOTNDMjcyQTcwM0QzNDIyQzZBMTEsIDEzNzBDM0FGMkYzMzkyOTE2MzY0QkJCQ0MyQzYyRUMxCisgMTM6IEEwRjMzNDc3QkFFMkUyOEU2NzQ3QUEzMTkzLCBCNjI2REM3MTk1MjhDQUM2NURCMEVGOTRFMzU0MjJDRQorIDE0OiBGQ0Y1MTkzNTA2MDUyRThCRkEwOTVDMUE1MjA1LCBGNUJEMDJFMEIzQzkxQ0M3RDZGQUFBOEE5QTc2Q0U2QQorIDE1OiAzNzk3RDdGODU5OUI4RUVBQjM5QzU2MjQxODgwREMsIDBCNzAwMDNFNzcxNDZCOTAzRjA2RUYyOTRGRUNENTE3CisgMTY6IEM0QkFEMEUwMzU2RkZEMzY5MTEwQzA0OEQ0NUQ4MUJFLCBERTdDMkIxRDgzQkUyQ0M4RUE0MDJBQkUxMDM4QkI3OQorIDE3OiBBRjVDMzU4QkQzMUNEQ0FDMkYwRUE1MjUyRjFDM0JFMUU0LCAyRDcwMDk4NkY5M0IyMkRGRTY2OTVDMkEyNDNCNEU0MgorIDE4OiA3REVGOTA1NkZCREFGNDkxRDcyMDZCMjZCMTlERUY2MTdBQTEsIEU3MUE3RDAwQkU5NzJEODVDNzc5MzFENzU5MUIyMTUxCisgMTk6IDZFOUIyQzBBOTBCRjlEMzhBNkVBM0I1RDJCOUIyRDk3RjkzOEVCLCA1QjQ4M0Q3RjE1QzM5NjAyQzI5MTgxODFFNTdEQTM0MQorIDIwOiA3QzVGNjhERUU5QkJBM0IwNEYxMUQ1RkM3QzlDN0ZFNkU4QjUwMjVDLCAwQUU2QTEyRDM3QTlDMTBCQjFBNDk0RTE2NzA1REMwNQorIDIxOiBBRjBBODg2QkY2NzNCQzcyMDQ1RkMwNzRGMDZBMDE3NkM5NjEwNUUyRTYsIDA2QjJEQzlBMjg2OEMyM0Y4NkQ3MTBFMDFFMzdFMDdCCisgMjI6IDVGMjI4QTk4NkRGRTQzMDFFREJBRjA3QTAyRTExNEYxQjMwOTMyOTk1Q0QxLCA3NEVCRjY4NjI3Qzc4QjFGRDAyNEE1OUI1NkIyQThGQQorIDIzOiA5MTEzMjJGNjA1NTUxMThDQkVDRDhERDgyRjE4NkFDMTk1MTQzMTZFOEQ0OEJBLCBCNkE4QkFGMkYxNzVDRDBDNzFCNjNCMUVGMzdFMTg1RQorIDI0OiBFN0Y1MjczMENGQjgwOEVGREIzNzZBNUQ1REYzMUE3RUY4MjkyREM1RkMzN0U5QkMsIEJBMkFEMTU4QTJEMkU1Q0UwMTI5NjQwMkI1OTJFMURCCisgMjU6IEIzRjhEN0NBNDdEOEQ4NkU5NEQ2NzBBRkJBRkEzQjhEOUUxODZDOTdEQzAyOUQ0NzA1LCA3MDlEMkQyQjk5NzVENDcyOUMxOUQ0RUFDNDMwRTY1RQorIDI2OiA3MTc4RkVDMDI3QUZBRERDMkMwMzUxOEU3NUNGMzREMjA3Q0FDMkVCMTUzN0EwREJBNTIwLCBBMzE1RjAzNENFNUU2NjYwMTQ0NDQwMjUyMEY1NURFMgorIDI3OiBGQzIzMEIyQjg1MjJGNTM0NTlEMEI5Njg0MjE0NjlCQkE3RTY4M0FDQjAxOTAzOTNCMjg3MEYsIDQ4Njc5QTc4RTQ3MEUxNzVDRjNEM0U5QjQ2Q0VERkNFCisgMjg6IDM1QTY0MTEyN0M3OEM3MjFFQ0RDNTA4NjZDMjE2MzdGREM5NTE1RTQxQ0U2MEYwOTAxNUVBNzEzLCAwMDYyOTg3MjIyRjY0MTJCN0FBRjhBOUFCRjZGQkY5OAorIDI5OiAzRDQyRDZDMTEzNDIxNzQzQzA4QTZGNjgyQ0ZBMEU1MTdENTUzMUJCNjYyNDFDMDJFQzREQ0MyNkY3LCBCMUFBRkUxMUZBMkQ2RTBDODcwMTc3REREN0Y5OEZGMAorIDMwOiBEQUQwNjVCNDY2OUI3QzU5QzgzOTJEOEU3QkQ3RTY0QkMwMUNFRkZGMjdFMzM1QjI1QTMyOEQzNTZGMEUsIDg5NzNCOUI5RUNGMjZEQUI1OENDRjA3ODdFRTkyOEU1CisgMzE6IEVCRTYyNkY5RTI0MUZEMjMzRDk3ODFDMzU5NDMwQzk4MjY2N0FBMjY5MjFCNjJFOThGQUVDNTAyQzAxQjBCLCAyQUMwRDcwNTJBMkNEQ0NFOEUyNkZFQTc1OTUxOThBQQorIDMyOiA2NEQ4NDJCNjY3OTZBNzk3QzJCNEM2OTA1NzQyRkRGMjE0OEZGQzQ0NUUxOTJGOUUwM0I1MzgxMEMwODJGNzg4LCA5Nzc4QjM0NUVDMTJEMjIyRENDNkRCQUJEMjY1MTc1MAorCitFQVgtYmxvd2Zpc2ggKDggYnl0ZSBrZXkpCisgIDA6ICwgRDhDNEMyM0E2QUMwQjdCNworICAxOiAyQSwgNUUwRTRCRERCNjA3NzJGQgorICAyOiA3Njk1LCA3NTgxQjE2Q0NDOUM0NUYxCisgIDM6IEVCMTRDOCwgNjIyM0ExMjFDRkEyMTZDNworICA0OiA1QTVDODA5QywgNEE0NzY1ODc5NjMzN0Q2QQorICA1OiA4QkMyMDQxMTgxLCBFMUZCQThEQkEwMDU3MUZDCisgIDY6IDg5QzY2NkYwMTVGQSwgMkI0QTc2QTBFNjk5RkNGRQorICA3OiA4NkMxRkE5MjQ4NEFGNiwgMzFCM0I3MzhBMjYxRDZGNQorICA4OiBEMUY0MDFDMTQ1QzkzMjhCLCA0QzRBMDQ1RUI0ODlGNTlDCisgIDk6IDcwQzlDNzc1MzY5ODMyNEE3MywgQUIyOThCNUIyMDU2N0VCNAorIDEwOiBBNTBEOUQ4OERDMTAxQjZEQzhEMiwgNTI5REZDQkZEMTNCOEU2QworIDExOiA3Q0MyODg1QzJCRTc5QzQ0RjI4RkYyLCA1NjYyNTUwMjJCNDBDODFDCisgMTI6IDY5MDJENTgzNDdDMjkyNTBFRTA3OTgxQywgMzQ2MTlBRjE4RTE0QzY5MAorIDEzOiBBQjZDM0M0QUQzRUM0NTE0MzM5MkI2NDJEQSwgRTZEMkREMzIzREExNzVCQgorIDE0OiA3MDY1QjI4QkE4QUI2N0IyRkI3QjZENUUzRkFGLCBBRURDQUE1NEY0QjA3NzJGCisgMTU6IENCQkExNEE3NEFENEFEQzBFRjAzNkVEQUU0MkQ1MSwgRjJCRkZBNEQ4MUJBQzAzNAorIDE2OiA2MEEzMTUxOTNGNTgxNDRGNTcwMUQ1NDdDNzlGRUVFRCwgOTEyRkRCREIwNTQ2N0RGNQorCitFQVgteHRlYSAoMTYgYnl0ZSBrZXkpCisgIDA6ICwgODY4ODFEODI0RTNCQzU2MQorICAxOiBFRSwgNEMzNTA1RjA0NjExRDlDMgorICAyOiA4MEM4LCA2QTM0MjhCRUVBRDYwNzM4CisgIDM6IEJGODhFNywgMDRGMUU5OUU5RjU5MDZDMgorICA0OiBFMDY1NzRCNywgMzNCMDE1M0FBRUY5Nzc2RgorICA1OiA0MkQ5NTBBRjYzLCA0QTBGNDE1NjQwMzIyRkRGCisgIDY6IEMzMEY2QUQ0NkVDOSwgOTY0NkZFOTA5RDJCOTVDQgorICA3OiBBMDA0OUZDQTg1NkExNCwgQTAyNTcyODlDNkJCRjI3OAorICA4OiAyODE0QjBDMTM1ODQ0MEUwLCBDNEIwQTIzNTQ5MjVFODg3CisgIDk6IEJGNEYwNjJCNTJDMUU0ODlDRiwgQjU2NDQyQTNDQTU3QTA0MQorIDEwOiA2M0RGNDMzOTU2ODMxQjg3ODBGQywgQURGOUVEMEI0NkRDQTE5RQorIDExOiBDMzE3RkQwNzk4MTdGNTBFMEU4QTE2LCAyRUEwRUM5OTNGQzYwM0FFCisgMTI6IDJCRDEyRkRERDgxRUIxMTY2MDM0NkQyQSwgRkJDNkY2OTEyNUJCQTg4RAorIDEzOiA4NUQzNTY1MzZGRTI4NDNDNkJCRTYwRURCQywgQkIyRkVGRDA0RjIzMEU3OQorIDE0OiAyMjQ5MzAwOURCMDFCNDc0NkY0OTI3QThDNEZCLCA2NENDMDg0NzFEOTNDOUFDCisgMTU6IEMwRjNDMERCMDhEQzkzRkJBNzI1RDFFMDJERTA4NCwgNzdCNzYyMjEzRERDQ0ZGRQorIDE2OiA1NjhCNjZEMzExMjU1NkJEOThGRjkzMzlFOUMwMDJFNSwgQzgzNTVGNTA4MjE5RkUwQworCitFQVgtcmM1ICg4IGJ5dGUga2V5KQorICAwOiAsIDE2OUM3OTU0MzQxRUY0NEQKKyAgMTogMjIsIERBQkZEQTlBMEIwQkEwNjcKKyAgMjogMkU1NCwgNkEzRDZEOUFBNTg3N0M1QQorICAzOiAyQTZFQ0YsIDJBMzRBM0FGNURFODkxOUUKKyAgNDogOUNDNUY4NEYsIEQzRjY3M0VEQUY3NUUzQjUKKyAgNTogRkY1NjExNzU2QywgQ0M2NDdGQUFDOEQ0OUJGMQorICA2OiA3NEM5MzlCRUIzMUMsIEMzMzU5OTlDQ0ZFOEY1RkEKKyAgNzogNzk3NkI2Rjc3MDlCNUYsIDJBNzk2OUM1RkQwNjNBODgKKyAgODogNDIxRUVDNTAyMjI3NjE3NCwgMkM5QkZCMUVBQzNDNTRBMgorICA5OiA2QTQ3NjFDRDI2NkIxQzBFQ0IsIDNFQTNDQ0VCQzg1RkFDNEUKKyAxMDogN0MwOTIwMTA5OEU3NjQyMzlBMkUsIDgwNDNBQkE5QkY0RDVBRUUKKyAxMTogOENFMjYyNzc1NjJGNjQ2REUzM0M4OCwgRDcyQUVENDg4OTVFM0I0MAorIDEyOiA1MjE1MEY0NEQzN0QxMjE1NjBEQTg3RjYsIDU4RTg2NUUyMkI0ODU5MDYKKyAxMzogQkEwQTczQjQ1RjkzRUNGQkZDM0FCM0Q4RDAsIDY4M0Q1MkZBNDdGQjFBNTIKKyAxNDogOTY1NDZDQkUwMTA1NEFEMjRDQzk1REI1NDcyNCwgRDgwRDBENTMwRTVEMURERQorIDE1OiA2MUU2NTRCQjE4Q0QyNkZDMzZDMDlGODc0REMyQzcsIEM2NTg4NENCOUQ5RkVDMUUKKyAxNjogMUQ3N0I4QkYwMkNERUFCNEE3MDdDMDc2Mjg4MjZENUIsIEYxOEQxNzMwQzNENjQ3MDEKKworRUFYLXJjNiAoMTYgYnl0ZSBrZXkpCisgIDA6ICwgMURGOEIwQjkyQTNGMEM5NTFDNDI1QUY0ODMwRTYzRkQKKyAgMTogMUEsIDhBMjk1OUVCQkU5MDE4MDk5OTk5NERFQjcwMzZEQjg1CisgIDI6IDQzNUQsIDdFRjAwQ0I1N0RCN0I0MTU1REI1MzBENzVDRTZCMDI1CisgIDM6IDA4QTZDRiwgMkVENkFGMEYyRDVCQUIwNUY2MjNEMzg5NDgwQTAxRjIKKyAgNDogQTg2RTU0RDMsIEZDNjk1NDdDOEJEOTIyQTVCRjJGN0IyNkM0RDIwRjk4CisgIDU6IEVEMDgyMkU0MzksIDAwMDdBM0M2REVGQzZDOTEyQzBFNUI4NTNCNTIwMzY4CisgIDY6IDdCRUZDN0ZENDA1NCwgRDMyQzQzQTREMTA4NkQ1N0M1QkNGQUVFMDRFQkM2MDAKKyAgNzogNTIzNUU1OEU3OTI4N0MsIEEyN0U5Qzc4MTMyN0MwRkM3QzU1NDEwRUIwQzgyOEE5CisgIDg6IENFQjVFRTk5QkU1MjFGNEQsIDU0N0Y0NjM4Mzk4N0YyQTM1ODJBODFBM0JDRjlCMjgwCisgIDk6IDAzNThCMDYzRDVGOTlDMzc3MCwgQzBBNzM3MzA1MTJDREE2QUQ0OTU5OTc3NUQ1OUVEQTEKKyAxMDogNDM0QjlBRUUwN0RGQUREMEEzMzIsIDQ5OUJEODg4ODFFNTU4RTA5QThFODIyQkUyN0QyNDk2CisgMTE6IEQ0Nzg0OUU2NTBGMzUwQkI2MjJENzQsIDYzOEUzN0E4NEU3RkFBRjhGNUQ3N0YxQjA2MTc3M0RDCisgMTI6IDgxNDU5MkY1NjgyODQwODVFNzlBMDI0QiwgOUVCMTQwNUU4NDIyRkU1MEJDMEQ4OEQ4MzdBMkM2NTAKKyAxMzogNkYyQjU1RUM5MUI1OTEwODIwNTNBRjY5MkUsIEM0OEY5MUVGMDFBQTQzQTFFRTNCMzZEMjMzRERENDhCCisgMTQ6IDUwNkNCREQyOTAxODM4RUUyRjE3OEI2OTUzREEsIDAzNzc4OTU3RjUzNjUwOUJGQ0E1NzdCMjNBMThGNzI2CisgMTU6IDQ0NkVFNDM1RDNEMTg0OEI1MUJCOEM1RjdCRTRBMSwgMTEyOUVBRUFBREU1MzQ5NDA1NDZENDMyNDJBNEM4MzkKKyAxNjogRkI5RDJCMTUwQzQyNDY1QjE2ODVEOEYwNjlDQzA2REIsIDQxRTI5NDBGNURDNjNDQjRFMkZCRUMyNUVEOEEzMUU2CisgMTc6IDk2ODRGNjgzMjYwMTA3QkU4RkVCQkVFMUQzRUVEQUE3QkQsIEJBRTdDMTE2RjdGRjk2NjMxRjRBQ0VFOTVDNjVDRUYzCisgMTg6IDUwODJCMUZFNDhDRDNBQjU4RjYzQzJEQ0ZERDQwNjlBQzczNiwgMTlBQzdCOEVFMzE1Q0JCNzEzMUEyODM4NTFCMzIyNjYKKyAxOTogOEM3MkFFNDk1QjZGMDAzQTNDNzg0RDE0NEU4NEU4ODg4NUY3OEUsIEZBNENFQzAyMzc0MEE4RDY3MEUzNTFGQkNGNjJDMUNCCisgMjA6IDgxNUQ2MzYxQzdBRTM0QzlENzk2QURGOUM3MUFCQzQ2QUVGODhCQzksIDlBMUY3Mjg4QzYxQTY2MjNCOUE4Mjc0ODEzN0VEN0NDCisgMjE6IDkwNEE4NTNFMkU5NkJEMkI4NUFBQjNGNURGQjkwMEU5QjM2NDJFRTY2NywgOUFBOTBEQkRENDYxQ0FEMjA0OTVEQ0ZCQ0I1MTNERDIKKyAyMjogNzlENzM4QTQ2MkY3MjdCM0QzQzUyOUVEOTk5QjZGRENDRDk5MUQxQzVBNEQsIEJGMDk4N0JFRERFNjUwRDczQ0FFN0QzODBGRUQzNDMxCisgMjM6IEIyREVGREI3RDUwM0E4NEU4MzE1NUEwNEI4REU4QzhEQkI2OEMyRkM0NzUwMDcsIEI3Q0U5MDBDRjQzQ0Q1MTgwMjQxMjNDNzZGNkRBMzI4CisgMjQ6IDlFNzIzRTE1NDM5RTEyRjZDNDZERjhBMzA5QUUxRTk3QjZGRDE4NDM2MjU5Q0ZCMCwgREY4QjZFMUUyMzUxMkNDNENGNUZGNTMxQTE5MDhGNjkKKyAyNTogQTdGMEFEMDNDRUJDQzkyMDI3MThBQTE2NDg4NkUxMDI2OTc1MzA2QTY2NEM1QUM3QTksIDRBNzcxQkY4QjlBNDMyNTcwNUM4NUU1NDk5RkQ5OEU5CisgMjY6IEE1M0E5MkFEMUM2ODM1RjI4RTA0RUY1OTFFNzgzRDM2RjNENzZFNDg5QjMxQjg3QkVCN0EsIEFBMjYzQjUyQTZFNkEwNDNERTRENzAyOUQ0REM3M0Y1CisgMjc6IDc5QkUzQzM4MjkxQTdGNzdFOTMyQzhBOURFQUMwOERFNjQ0MkVBOUIzODk1QjEwMUExNEU3QiwgMzNCODRERTA2MzQyRTY3NUUwMTlDRDAyMzcyOTJFRDAKKyAyODogRkExMDgxMjNDNUE2OTU3MUNGREZFOEMzRDAwNTM1MTIxRkRFMzA5NkREQzBENzAwRjhGMjZBNUEsIDc2NDAyNUQ3Q0ExQTNGMkM1NEQyODk1NjQyM0IwQzc3CisgMjk6IDM2RUMyRDY3RkQ5NzdCRDJCNzNEQjZEOEVCNzU2QjNFQURBMTM2OTBFMUI2REZDMTJBNDc4MUIzNEIsIDRCQzZCMzhERTNCMDIyODNEOTJGNERGMTlBNUM0OEM1CisgMzA6IDk2RDMyNDNDOTQ1OTA1Qzk3MzJCNTkyN0U0NkYwMDg4NkQ1MTE0NjNCMzhDODYwMDJGQzI2QjY1QUI4QywgNUI1NTExQ0RFQzM1Njg3QUI4NDI1QUIyMkQ1OEI0RjEKKyAzMTogOUNGODNCODdCRUEzMzc0QUY3NzIyRTk5OTg2M0UzREFCQjg1OEIwMzgzMzgzRUFDNzc1N0Y1QjgwRkQ0NEIsIDFFMENCQzk2MTk0MEZEQTkzQjczQTkyREFDRkQ2N0YzCisgMzI6IENFM0JDM0M5RkE1RUY0QUZFNTI3MkIzRUREMjRCMUIwMDNGRUQyQzJFNTAxNTI4Q0ZGNDREM0ZBQkZGNTJDQjQsIERDOTRGRERDNzhBQUIyQjdDQUExRTFFRjE0OUFDMzU1CisKK0VBWC1zYWZlcisgKDE2IGJ5dGUga2V5KQorICAwOiAsIEIxMjBDN0IzNzQ1MEM0NjE4OTcxMkU0REZEMUYwQzQ0CisgIDE6IENBLCA4MkJBMTg2OUM1RkYxRUYyQTRGNkFEQzFFN0RDMUYxRAorICAyOiBERDIwLCA2QkQ1NjAxQjE2Qzk5NDNBODRBQzFGOTlBMTc2RTZEMQorICAzOiBDMUMwOUYsIDA5MTFEQzYzQUE0MTRDMDA0RTJCRDgyNUJFQ0RDOTNCCisgIDQ6IDI3RTQzRjU5LCBCRDg1OEYwODRCMDgyRjc2ODE0REMzODVFMUZCMjBEMQorICA1OiAyQTlBOTJGMjQ2LCA1QURDNEEzMjQ5MTkzNEFDMEJEMDBGQ0U2ODZCMjZGMQorICA2OiA1MkM3OEMwQ0Q2RjQsIEYzNTg4NkY0NkMwM0VEQ0ExMEIzRDAxQ0YwN0IxRTBBCisgIDc6IDIzRTBEM0NFRDM3OTVGLCBGRTMzRDk2RkM5OEI3OEEzMEMwQTQxMkM2MEU5Mzk5MgorICA4OiBDRDNGQzk5NjE1NTlGMjM5LCA5OTgyMzY0QTYxNjA5RkM0MTA2ODI2MDI2NzIzMUVFOQorICA5OiA2RUE0NkNCN0FENzUwNUMxQkMsIEJCMTUwNTNFRjBGNzhCOTA5MUIzMDY0MTE4RjNFOUJGCisgMTA6IDA1RDlCQTIzMEE1NkNDQTA3MDNBLCAxMzM4RTY4RTNEQzk5MkI2RUIyNjg1QzY2OEU3NTg2OQorIDExOiA3QUFENjA0OURGRENBNjc3MUFFNDJCLCAzNTI2N0U0MzEwNTFFMTgxMjQ5NTYxNTMyNEM0Q0JFNgorIDEyOiA4Njk1MDkxNTMyQjgzQjIzQzI5NkY2MjAsIDdCMkVFQTg2MUU5QTkxRTZCNkE5MTFFMTBGQzNGREQxCisgMTM6IEQ5MDlEQTRCQzczNzJBQ0FFQTc4RTZBMEVFLCBFQTZDMUNEMTYxODBERjBCMDdGNEUyMDRBNEI0RkFDQgorIDE0OiA3REVDODQ0MzYwMEQwNTYzQUVGRTg3QTIwNjRGLCBEQTQ1NDcyODA2OUIzQjQwOTg4OTY2NDc4MzU4ODE4OQorIDE1OiBDMDQyRkU2NTY3NDJDRDJGRTVEOUMyMTJEMThDNkMsIDU5MjlFNEFFQ0MyQ0EwNDdCQUU5NDhFNzAyM0ZFNEQwCisgMTY6IDBCODREM0NGNTlFRUY3MzE5NjMzRjRBMzk3RDQ3Q0Y4LCAzMUY4OTJGRkRCNzUzNURGNUQ5MTQzNDU2RTQwNDE2MworIDE3OiA4QzlFNTdBQUZBNzk2OUIxNDI3NDJCNjNBQjczMjg2NjAwLCBDNDE4MjMxQzQ0Rjk2NjYwRERCQThDMjZCM0JCMzY4MQorIDE4OiBFOUVFRDY2RDM3MEEzQTZBMzlDN0UwRTU3MEQ5NkY4MDdFQUMsIEE0QUZFOEQxRDNDMzFCOTU2QTNCREJEMDQzRTdBNjY1CisgMTk6IDFBNUQ0Nzk5MkRBNTU5N0QxNDQ5QjRDOERENDdCNzQwNEM3NjU3LCBGM0VDRUU1MTgyMDE0RkMzMzY1RkRCQzRDMzNDQzA2QQorIDIwOiBFN0M3OTQ1RkQxQUZEM0Y1RENFNjY2RDhBNUEyRThBM0MxMUE3QTVGLCA4NkQ3OEIyRkJBNzU5N0I4ODA2QkVENTA1QjUyQkRGNgorIDIxOiA5RTIxNjVCNDdCMjlDQkM0QUNENTA2NjBFMDExRDY5MUYwNjEyMDk5NjksIEU5QjFFODYwQkQwMjA4NTE3N0UxQTk0RTFFRTZGM0YwCisgMjI6IDQ4RUEyOTQ1QzhERDNGRTA5NDA3QkFDODk3M0E4NjFEQjE1Qjc4OEM4RkZELCA1MDI5MjY3MTJFREIxQjNERDEzODA2MDUyQzZDNzVENworIDIzOiBGMzdENDZCMzVCNjA4MTlFQTUyQjAwNDU3RDc5MTU1QzA0QjU1OTcyRDBERkE5LCBCQjJCN0QyMTBCRjA1NzBGNDIyNjQwQkY4MUYzOUI5RQorIDI0OiAxMkU4NUMwQzc4MjI3MjA1Q0M2ODIzNjBDNzlFMzVCRjU4RUM2NTUxQ0Y4RkUyRDAsIDA0Mjk5MEQ3QTU4RDQ1OEM1NzBBMTVERDM3NURCNEU3CisgMjU6IDRGNkMxNTEwOURFOTgwREQxNEE3RjRDMjdGNDg2NzFFNDc4N0M1M0E1NjQyMzJGNDI3LCBCMDk3QTU5OTBEODA2N0REODlDMjE0NzMxNTBDMDcwRgorIDI2OiBBQUM0NzJFNDlEQjEwMUI1NjRBOEEwMUUyQzgwQzBDNkFFOTA2NUQzMzJDMkRFNzlGQUI2LCBBQ0RENTg3QTdEQjg2NTQyRTE5NURGNzNBRjFDMUNCQworIDI3OiBCOTkxMkNFMTgwMTlDMzE2OTJBMUY3RTExRDlDQ0IyMDI5N0FDQ0I5REM2MkM0N0MwMUQyQzIsIEIwQUNCRjAyOENBNUIxNUUwMDM1RDJFQjhDQTkxNkJFCisgMjg6IEI0RjJCMUZFMTRBMUVDREM5QzhFQTFBMDEyMDM5NUU2RUQxRTY5RDNGQzg1REQwRjNGOTBGMzUwLCA5QTU2MUVCQzc2OTM2OUI5NUI5Q0I3NEZDNkFDMjdEMworIDI5OiAzRkUzOTdDOEFEMDI2ODlCNzQzN0EzNzg2MUYwOTA3QUYxRjYwMTRBMjkzQjQ2NDE5MzQ4NzcxQzVBLCA2QjdCRUI5QkQ1MDE4RkVDRDcxQkU1MDgxQzdDMjU0NAorIDMwOiA1MDE5MDg5MTQyMTk5RjcyMDdFMUI3NzMxQjhCMjQ3QTE4QTY4NUIyMzE0OTlERjEyQTczRjVENjdEMzcsIDMwN0U5MzQ0Njc3NzAwNUJBMUIwODhGMTc4QTBEQjZFCisgMzE6IEVBRThGOUYwMkY4REIzRDcwQjc4QjA4Q0ZCMDk0OUQ5OUYxQTg2Qzk1OEE4RTM4MjM3MzZCQ0VBQjg2QkUxLCA2Qzk0RjQ4NTkxQzE4QkY5QzQ1MDUxNUI3MzM3OTk3MworIDMyOiBCOUM3OTVGN0E4NzMwNUI0QUQzNkRCQTEwQjNCMUM3MEIzMjlEMjlFNDlDOEM2QTkzMkQ5NkE3NDMzNEFFRTRBLCBEMThFNkUyMzNGRUZENkU1QzcxNDhCREMxNTA0Mjk5QworCitFQVgtdHdvZmlzaCAoMTYgYnl0ZSBrZXkpCisgIDA6ICwgREIwQzAyQ0IwNjlFMzc3MzI5NkQzQkQ0QTg3QTM4MUIKKyAgMTogOTksIDdEMjFEMTlFOUM0NDBGNjhFOTlGMUYyRUEyNjY4Njk0CisgIDI6IDA2OTYsIEVBNTkwRUM0MTdDODhFMjNGRDIzOTE3RjlFQ0ZCMEM2CisgIDM6IEI5QjA4MiwgODJENEM5QjY4RERCMDJDOTA2NDk2NDEzRTEzQTJENjgKKyAgNDogRDZCMjlENzQsIDVCQ0U1Q0E0RjY2MkU4ODNCRjdGQ0FBRTVGQjJDRTAxCisgIDU6IEE1OUM5Q0IwMDksIENCRkIwNDIyNkQxMDI5QTdFQzlENjRBNDhBNjcyOUJFCisgIDY6IEY0OTI0RkUzRTM1NSwgM0Q4NUIzOTAwREVDQTA1MjhDODE1RjE0NDdBMUYyMDkKKyAgNzogNjc5Qzg4RDUyRkI1MTksIDkzMUM3QTg2M0MzNzAxRDgwMTVGREJEODY5NkM2QzMwCisgIDg6IDI2REE0MUMwRDExNTM3NUUsIDc2MjdFMjNFNzkxQTREQ0IwRkE1RUQ3MUIxRUQyMjg4CisgIDk6IDhGRUM2RUI3MDE2QUQyQjE3OCwgRjY1RUQwMjg2QTcyNEYwQ0IyRUEzMTdENTAyMkIwRDgKKyAxMDogQjVGMjI0MTVCMTMzNDEzM0M1MzEsIDg3QzRGM0E4OTkxQkJCODU5ODRCQzREMzMwNUE1Q0YxCisgMTE6IDIzRTFEMEVEMkU4MjBBRkU3REEyRkUsIDEwMDQ5OUYxMDkzRkFCMkVDRjczQjY0MzU5NEU5OEUzCisgMTI6IDc5NTE5QUJBOTFGNDZCOERBRDZENTMzNSwgRkJEQ0QxRkNEQjIwQUI5OTEzNUYyOEE3MTRDNjk5MkYKKyAxMzogNTk2OEQwQjQxOThBMEFBRDNEMDM5NTAxOEYsIDc4MUYyMkUyREE5OEY4MzM5OEZDRjkxMUIyMDEwMDU3CisgMTQ6IDRFNTVCMTQ0MzJCNjAxRTNFRjJFRjU2N0NCMTUsIDhCRjZFNTNENzY1N0U1NkVBM0RBMUJGRDlDOUVDMDZFCisgMTU6IDZFRDg5NjUxQ0UxOUIzREQxRUU1Qzg3ODBCNTAxNSwgMTMxQ0ZENjU3RDMyRDRFMUIzNTE0MEFERENBMEUxM0EKKyAxNjogMjI5NUE5NjhCNEQwNzJEMTI3NTc3NTYyNDc1NTQ4NTAsIEYzNUZBQzk1QzJBQTQxNTU0NTBFQUFBNkUyRTc4OUI1CisgMTc6IEY5QjJBQTJBQTUwMkVBNzlCQkEwQzVFQUQ5MzJCOEUxRUUsIDBFRDgxQUE0MEI5QkYzOUE5QUFFREREQjdBMDRCRUE2CisgMTg6IDM4NTA1NUYxQzFDMjZDMDQ3MkE1MDRCNENEMjI1RENBNTVGRSwgMjQ4MzE2ODBCNTYzNjgyMzFBQzU0MjI3RDczN0Y1ODIKKyAxOTogNzcxNTI5NTg1Qzc0MUEzRjhCMUM5NzM3MDk4OTJGMjU1QTk5RUUsIDJBMTMyQjRCRjk2RkQ1MTA5REIwNDQ1OTEwM0Y1RTg0CisgMjA6IEU3QTIxOTdEOUZBQThBQjhCMzAzQjVFQzcxQUUzNEFENUVDNURENjYsIENDQUI2NTE4MzcxRUM4RTBBOUU5RUU0RjdDQTU4NzhCCisgMjE6IDI3OUU1NEY3NTVFQUM2QjU3Mzc1QjlFQzQ0MDZFNDNEQjMxMzlENzQwQywgN0I2RjI2RjJDMEVDQzlGMkRGNEVERDc1MTNFNkUwQjcKKyAyMjogMjc4MTZBQTk0Q0JBMkJGOThFNDlFNTk1QUY1QjNGQUQxMkJGMUQ2RjFBQzYsIEQwNDg3NkM1NDkyRDI3NUYxNUM4MzRFM0NGNzk0RjBFCisgMjM6IEI1NjU4REMxNDg4NTVGNjhCMjgyMjExRDg3OUY2ODhGM0MxNDJGRTU1NUNGODEsIDQ1MzlDREE4QTY1REI5MDQ3QUFENzZCNDIxQjgxMTIwCisgMjQ6IDcyRjBCRDRGOTM5QzJDOUI0RkE3MzREQ0IwQUU0RkI5QkQzNDJCQzg0NTlFRDJGRSwgQ0VBODQ2OUJDMDQ1N0VCRjM0MThDMTExNDI4OEM5MDQKKyAyNTogNzA1NjgyNDVFNkU2QkQ1RDExQUQwQzc0MDMwRDdBRTA4QkEwNTA1N0RFQTBGQkY0QUQsIDcxNTU0RkRFNkI4NzQ3N0E1MUVFNDQ5OUQ3ODc4M0QyCisgMjY6IDg3MDJEMzVCRTA3RDdBREY3MDY4NDA0NkNDNkM3MkZCQkJGODIxRTBCQkNDQkM5NzM2MDEsIDMzQ0M2RkJGREExNUUzMDY5MTlFMEMzQkIyRTIyQkI2CisgMjc6IDBCQTIzRjRBNjE3NDE2NUQ0QThCQTgwQjdDODc1MzQwQjBGOEIyQTY5NjdEMzRFMTA2QkMyMiwgMDBFNjY3OTQ5NjcxNDIzNkVFQ0VDODRCOUFGMzA3MkUKKyAyODogQjlFMjVBQkE4NEM2QkQ5NUI1MTQ5RTc2MTZGRTJFMUQ2RkFBQ0VBQUQ3N0E2MzZDNjAyNzkxNzYsIDhEOEFEMEI5RDRDNzA5RTFEQTM3MEVFMDE2MTE0ODJBCisgMjk6IDc0NzU5NzExRjZENTQyNTgxRjlGODM0OThGQjYxNjYzOEQwOTI3MzJCQTA3MTA5QkY0QjVCRTA0NUMsIDcxQTQwREM3NzdCRDA5Rjc1MzYyRjdCMjBFMEI3NTc2CisgMzA6IEFEQkY3RTk4OTI2NDg0QkEyQzdGNkNEN0NEOTczNEZDMTkyNjVGNjhBRjNCRkNBRUIwMjVGNjI5NkUzNywgOERGMTVCNUY2OUI2N0Y3REFCRTQ0RTM2NjZCNTUwNDcKKyAzMTogMkRDMjZENDQ5Mzc5OTk3RDExMDMwOUIyQTBEQzI3NjBGQ0U4Q0FEQjRCMTRFRDU4MEY4NkM3MEY2OUM5QkEsIEVGQ0I2MEVCMkIyNTczN0UyNTZCQzc2NzAwQjE5OEVGCisgMzI6IDJCMTg5MEVCOUZDMEI4MjkzRTQ1RDQyRDIxMjZGNDA3Mjc1NEFBNTRFMjIwQzg1M0M1RjIwRkJBODZCRTA3OTUsIDFBMUIxNUJCQzI4NzM3MkZCOUFGMDM1RkIxMjRCNkExCisKK0VBWC1zYWZlci1rNjQgKDggYnl0ZSBrZXkpCisgIDA6ICwgOTA2NTExOEM4RjZGNzg0MgorICAxOiBBMSwgMTkyNkIzRjUxMTJDMzNCQQorICAyOiAyRTlBLCA1RkE2MDc4QTBBQTdCN0M4CisgIDM6IDU2RkNFMiwgOTg0RTM4NUY5NDQxRkVDOAorICA0OiBDMzNBQ0U4QSwgMjRBQzFDQkJDQ0QwRDAwQQorICA1OiAyNDMwN0UxOTZCLCBERDJENTJFRkNBNTcxQjY4CisgIDY6IDMxNDcxRUFBNTE1NSwgRUI0MUMyQjM2RkFBQTc3NAorICA3OiAwM0QzOTdGNkNGRkY2MiwgN0RGQkM4NDg1QzhCMTY5QgorICA4OiA4RkEzOUUyODJDMjFCNUIyLCAyQzdFQzc2OTk2NkIzNkQ3CisgIDk6IEZFQTU0MDJEOUE4QkUzNDk0NiwgQTA1OEUxNjVCNUZGQjU1NgorIDEwOiA2Q0RFRjc2NTU0Q0E4NDUxOTNGMCwgRkVENTE2MDAxRkZFMDM5QQorIDExOiBEQzUwRDE5RTk4NDYzNTQzRDk0ODIwLCA4RjlDQ0YzMjM5NDQ5OEExCisgMTI6IDQyRDhEQzM0RjE5NzRGQjRFQjI1MzVENywgNzdGNjQ4NTI2QkNCQjVBRgorIDEzOiBCNzVGMTI5OUVGNjIxMUE2MzE4RjZBOEVBQSwgQzUwODZBRUExQkU3NjQwQgorIDE0OiAxRTI4RDY4MzczMzMwODI5REQxRkZDNUQwODNFLCAzM0VEQTA2QTdCNTkyOUEyCisgMTU6IDg1NTI5Q0Y4N0M0NzA2NzUxQjBENDdDQzg5Q0VBNiwgRDAzMTkwNUQ2MTQxQ0JFRAorIDE2OiBGRTVDQjYxQkFGOTNCMzBFRDNDMjk2RUU4NUY1MTg2NCwgQ0M0ODQ4ODhGMEFCRDkyMgorCitFQVgtc2FmZXItc2s2NCAoOCBieXRlIGtleSkKKyAgMDogLCA1MjU0QUIzMDc5Q0RDQjc4CisgIDE6IDc1LCA3OThEQ0YxNEZFRjhGNEQxCisgIDI6IDAzMDAsIEQ1RkNBNzVEQUM5Nzg0OUMKKyAgMzogNTIwRjk4LCAxMEUzNTc5NTdDRTIwODk4CisgIDQ6IDgwRTI3NjRELCA1QzdGNDY2NTZDNkE0NkVBCisgIDU6IEM0ODk2MENEQUEsIDNDQ0Y0NEJENDFGMDFDQTgKKyAgNjogRTBFNjBCRDlBQTJDLCBFQkI0OTM5ODNGQ0VFNzlECisgIDc6IEQxM0Q4ODA0OTA2QTFCLCA2RUREQ0E5MTk5NzhGMEI2CisgIDg6IEI3QUUxNEMzN0EzNDNCRkIsIDIzNjlFMzhBOUI2ODY3NDcKKyAgOTogNURFMzI2QkJDQzdEMEQzNUU5LCAwNDFFNUVFODU2OEU5NDFDCisgMTA6IDEzNDk0RjVCMDYzNUJBM0Q2RTUzLCBFQUVFQThBRkE1NTE0MURECisgMTE6IEE5QkIzNUIxNEM4MzFGREEwRDgzRjcsIDQwMDJBNjk2RjEzNjM5ODcKKyAxMjogRTI0MjA0M0ExQzM1NTQwOTgxOUZBQkZDLCA2M0EwODVCODg4NkM1RkRDCisgMTM6IDIwNDU5OEI4ODkyNzJDNkZFNjk0QkRCQjRELCAxOTRBMTUzMDEzOEVGRUNFCisgMTQ6IEVFM0YzOUUwODIzQTgyNjE1Njc5QzY2NERFQkYsIDFFRkY4MTM0QzhCRUZCM0EKKyAxNTogODU3OUQ4N0ZEM0I1RTI3ODBCQzIyOTY2NUYxRDFCLCBBODMyQ0QzRTFDMUMyMjg5CisgMTY6IDc0RDcyOTBENzJEQTY3QzRBOUVBRDQzNEFFM0EwQTg1LCA5NkJBQTYxNUE1MjUzQ0I1CisKK0VBWC1zYWZlci1rMTI4ICgxNiBieXRlIGtleSkKKyAgMDogLCA3RTMyRTNGOTQzNzc3RUU3CisgIDE6IEQxLCBCQTAwMzM2RjU2MTczMUE3CisgIDI6IEY2RDcsIDhFMzg2Mjg0NkNEMUY0ODIKKyAgMzogNTMyM0I1LCBCRDFCOEMyN0IwNjE5NjlCCisgIDQ6IEEzRUMzNDE2LCAxNzBCQkI5Q0UxN0QxRDYyCisgIDU6IDBDNzRENjY3MTYsIDdCRDAyNEI4OTBDNUNFMDEKKyAgNjogNjE1OEE2MzBFQjM3LCBCNUM1QkQwNjUyQUNCNzEyCisgIDc6IDE3RjJEMEUwMTk5NDdELCBGOUZGODFFMjYzOEVDMjFDCisgIDg6IDY4RTEzNUNDMTU0NTA5QzgsIEFBOUVBRUY4NDI2ODg2QUEKKyAgOTogRURCMUFCRTBCNDg2NzQ5QzIxLCAzNTVDOTlFNDY1MUMwNDAwCisgMTA6IERCMEMzMEU5MzY3QTcyRThGNUIyLCA2MzFCNTY3MUI4QTFEQjlBCisgMTE6IEQ0RTU0NTNEOUE0QzlEQjUxNzBGQ0UsIDc1QTJERjAwNDJFMTREODIKKyAxMjogM0Y0MjlDQzlBNTUwQ0JEQTQ0MTA3QUE3LCAyQzI5NzdFQTEzRkVCRDQ1CisgMTM6IEE3Q0EyMkE5N0MyMzYxMTcxQjQxNUU3MDgzLCBCRkU4MTE4NUYzMTcyN0E4CisgMTQ6IDE3MEY3OUQ4QjBFM0Y3NzI5OUM0NDIwOEM1QjEsIEQ1RUQ5Rjk0NTlERjlDMjIKKyAxNTogMkUyNDMxMkQyQUU1RDVGMDlENTQxMDkwMEE0QkJBLCAyRkM4NjVDQTk2RUE1QTdFCisgMTY6IDhGM0M0OUEzMTZCQTI3MDY3RkYyQzZEOTlFQzhDODQ2LCA5RDg0MEY0MENEQjYyRTRCCisKK0VBWC1zYWZlci1zazEyOCAoMTYgYnl0ZSBrZXkpCisgIDA6ICwgMjJEOTBBNzVCQkE1RjI5OAorICAxOiAzRiwgOThDMzFBQjJERTYxREU4MgorICAyOiA1ODRELCBGNDcwMUQ0QTFBMDk5MjhDCisgIDM6IEI5REVBRCwgNkUyMjFBOTg1MDUxNTNEQQorICA0OiAwNkQ0QTZFQiwgMEU1N0M1MUI5NkJBMTNCNgorICA1OiA3QjU4QjQ0MUNBLCBFMjhDQ0YyNzFGNUQwQTI5CisgIDY6IDc5NTBFMEQxRUMyNCwgMkFDRERFNkUzODE4MEMwNworICA3OiA2NUE0RjRFMDk4RDdDNiwgN0RDMUM5RTk2MDJCQUNGMgorICA4OiBGRUJFNEU3MkJBQTA4NDhGLCBDNDYwN0VBM0YxMzhCQUQ5CisgIDk6IDlCN0JENkQ2RDY1NTk4NUFBMywgOEIyQzU4QTk1MzBFQTZBQworIDEwOiA2MEM5MkY5MjVEMTQ3ODQ3MDIwMywgNTFFNkY1RjZEQzk5NkY4NAorIDExOiA3QjQwNzY5MzcwRTY1MUY2NEFBNjU0LCA3NEYxRjhBOEQzRjRCOUFGCisgMTI6IDcyMTU4MzJDMkZCOUM1NERGN0E5QzY4NiwgOUJGOUFFRjE0RjkxNTFEMQorIDEzOiBBRDBGOUM3OTAwODU3MkFCOEFFMjQ2NkVGRiwgRjM3NUQwNTgzRDkyMUI2OQorIDE0OiBDMDUwNzZFMkMzMzBBMEQyNUQ3Q0VDODA1OTdGLCA4NDNDMTJGODRCMDBBOEUwCisgMTU6IEQxOEYwNTYzQUIwMjc4MTQwQjBDRDlBOUIwN0IzNCwgMjYyQjE2ODhFMTZBMTcxRQorIDE2OiA2NTA3NDcwOTFGNUM1MzJFRTM3RDJENzhFRTFFQzYwNSwgMUJBQzM2MTQ0RjlBMEU4RAorCitFQVgtcmMyICg4IGJ5dGUga2V5KQorICAwOiAsIEQ2Q0M4NjMyRUVFMEY0NkIKKyAgMTogNEMsIEVBMTk1NzJDQjg5NzBDQjQKKyAgMjogNTUzNywgM0VERDMyNTNGNkQwQzFBOAorICAzOiAyMDZGQTYsIDIwRkE4OEYwM0YyNDBEMzEKKyAgNDogMTdFRThCNDAsIDcwMkU4MTk0RjFGQ0JGREUKKyAgNTogMkE4OTI4NzEzNiwgMzFDNTUzNDc4NkUxNUZCMworICA2OiAzQTZBRURDNzA2NkIsIDNDNjYzQTQwODFFMUQyNDMKKyAgNzogOEJDNTIwMzk0N0E2NDQsIDZBQUM4MDZDOTJCRkJENkUKKyAgODogMkUwMjc0QkJFMTREMjFBMywgQ0VCMEUwQ0I3M0MzNjY0QworICA5OiA5QzRCMjkyQjBDRjE3RTNBMjksIEYyM0NENTM1NTU5MDIzRUMKKyAxMDogOEUzMjI3MzQzMDhGODU2NjI4NzcsIDQ2MzYzRDdFRkMzMjI4MjEKKyAxMTogQzQxM0M0MDU3NjdGRjVGOThFMzY2NywgRTdCQTM1RDhGMzY3OEU3RQorIDEyOiBENzc4MDZCN0EyMTgwOThCMTU2OUVBREMsIEJBNjdDMzA2RTVDMDE4MUIKKyAxMzogNEJFNUVGNzRGOUU5Nzk5QTRENjM2RkVBOUYsIDRDNTExQzQ0QURCQTQwMzAKKyAxNDogN0UxOTk2OTE3MEMyQzhEOEFFQkE4QzdGQkMyQywgNTRDQzZENDY2QTJERjZEQQorIDE1OiAyRUYxQ0VEQzFERDM0MDNDRjQ0MEZDNTU2MUJFMzMsIDYxQzZGQjI3N0U5MzcwMUYKKyAxNjogREUwNTI3MTkxNTNFQkFDRTlEN0IxOUY1MkFDNDI4MkYsIDRBQzJBOTZGMkZBODYzNEMKKworRUFYLWRlcyAoOCBieXRlIGtleSkKKyAgMDogLCA0NDA0OEI3RjI0MEI2RjVGCisgIDE6IDBBLCAzNzAwOUI3RDRFMDk5NTNBCisgIDI6IDAzQkEsIEJGRDJGRDc3NTg5NjE3MjgKKyAgMzogMzdFRTEwLCAxNkE2QUY5NkRFODg4QTE5CisgIDQ6IDA3RjQ0MjkwLCAxMDBDQTg0QUEwRURBQTFECisgIDU6IDM4OUVGMDAyM0IsIDk2MTRGQjgwMEE1MzMyNjgKKyAgNjogM0Y0REJBOEFBMDFDLCBFRkE2QjU1QjdFRDVFNDBGCisgIDc6IDhDN0I4Mzc4OTZFQUU3LCBDMTEzQ0U4RjY2NENFM0Q0CisgIDg6IDcwMTFEOTkzRDhFREIwQzcsIEI0QzM3MEE5MTlGNjA0OTcKKyAgOTogMERFQjMwQTMxMzUxQjEzRDdCLCAwMEFCQzgyREM1RjNBMUFGCisgMTA6IDhEMzg5N0IyQ0JFMzIzRDZFRTFDLCA3QTJEMTU2MjdDQTE0NDFCCisgMTE6IERCQzAwMkM4MTdERUJGQjQxOUY5NEIsIEQ4RUI4N0Y4NkQ2QUNERUYKKyAxMjogMTcwNDhFMjk3NkZBODVBQTg0OUU5QTgwLCAyMjlGQ0QxQzlEMUUzQjlDCisgMTM6IDMwQjk4OUVGNjQ2NTQ0ODg1QTQ3OEFDMTk4LCBDMUI3RUI0Rjc5OTEwNUM4CisgMTQ6IDVDMkUxMkE3RjExOEEwOEQ2RkQ1ODVGOUM4MzksIEMzNTg2NzlGRUU2RkU3RDcKKyAxNTogOEQxQTFFODg4QkJCODY0OEU2MzhDNEU3NEUxMUI4LCA2ODVFMDA2QzQ0MTQ0OEI4CisgMTY6IDkzQUU5MDZCOEJFNEVBQzhFRDZEOEY0OEYwNEE3QUZGLCA3MUREN0FGNzUyRkUyOEZCCisKK0VBWC0zZGVzICgyNCBieXRlIGtleSkKKyAgMDogLCA4OTE0MzExQkI5OTBCNzI1CisgIDE6IEQ4LCAyMDk0RURDNUQwM0U1NEIxCisgIDI6IEZFRTUsIDc4MUNGQjBFQkUzODk1Q0EKKyAgMzogREVDRjVFLCA1OTkxOEU4QTVDNEI0NTlCCisgIDQ6IEJENTgzQUFELCAyMDEzQkVFQkVFQTc5NUExCisgIDU6IDJCQzAxQzZDNzgsIDBCMTEzNERCQkVBQjVEM0YKKyAgNjogNEQ1RUFGMDFBODk1LCBBQjREMTc1MTZFQ0JBNTBBCisgIDc6IEFGMjI5RjkwNjE0NDgwLCBEMzExM0MwQTlEMTMzQ0Q0CisgIDg6IEJDQTZGMzc1REY0NTY4RTAsIDhFOUVBRUM4RTc3Nzg2QkMKKyAgOTogNTc1RjM0MjE5RTZERDhEQjRDLCBCNDBDNzUxMzlFNUQxODYwCisgMTA6IEExOTlCOEFDNDMzQjYxNUVDOTZGLCA3NzRBRjgwMzY5OEFERTNECisgMTE6IDcxOEEyOTc1REQ5QTg3MkE2OEFFMTAsIDNCOTQ2MEY4NDlDQkE3RkIKKyAxMjogQUIzOEUxNDgxODBGNkUyRkZCQjk2RjkxLCBFM0VFM0I4RkM1MERBREJDCisgMTM6IEVCMTBFMDIzMzUwNzQ1OUQ0QTZDMjlFRTgwLCA4RDkwQjQ2QkIxRUFCMjdFCisgMTQ6IEVCNDg1NTlDMzIwREZCMDU2QzM3NDU4RTE5QjUsIDkzMTVGMEM0QUY4NTAwRUIKKyAxNTogOUU4QzczRUFEQTEwNTc0OUI1RDhEOTczOTJFREMzLCAyRTc0OUVFNjZDMUU2QTE2CisgMTY6IDYwMEZBNDE0OUFGMjUyQzg3QjgyOEM3ODBBRUZGOEJDLCAzM0Q3RDExRENEQzE5OTM2CisKK0VBWC1jYXN0NSAoOCBieXRlIGtleSkKKyAgMDogLCAzODJGQjhGN0U5RjY5RkRDCisgIDE6IDk5LCAyMERBOTU5ODQ5QjNGN0FCCisgIDI6IEM1NEIsIEQwNTU0N0M2QUZBMzQ4NEEKKyAgMzogNTc5ODM2LCBBQUE5MkIyMzIxRkM1MEM1CisgIDQ6IEZFQjdBRTU1LCA2MzlFREYwMUM0RkI5NjVECisgIDU6IEVBOEE2MDIzRkEsIDAxMjc0QjNFRDVDRTEwMkMKKyAgNjogQjdDNEU5OTUxMjFGLCA3MTJCRkUyN0NBRkY2RERFCisgIDc6IEY0NDIzNjY2MEIwMDA0LCBGQUM1MUQxREY4RUM3MDkzCisgIDg6IDAxQ0Q3RTNEMEJGMjlFOEEsIDA0OUM0N0E0NUQ4NjhEMEIKKyAgOTogREFCMTcwNDkzREZENkUwMzY1LCA2RjNBRUREOUEzRUNGNEZECisgMTA6IDgyQzlFRUM0ODAzRDlDRDExRkE4LCAzMjY4M0MwQTkxMjhDNkVBCisgMTE6IDMyNEFDNTlFODdCMjQ0RUNFMEYzMkYsIEY2QjA5NUFBQjQ5MzUzQ0YKKyAxMjogREJEREFCMTFEMDJDOUNBNTg0M0M0MDZFLCBFQTcyOEZDNDZEREQzQjA0CisgMTM6IEQ2NzM3NkMyQTRBRDkyRTdERDgwRTM5MzAzLCBDQUY3MkI3RTdDMjM3RUIzCisgMTQ6IEYyQjlCQkVGMDgwMzZDMjk4MkM2REREMDY5MTgsIDcwQTI5RDc4MEMyMjc1MkMKKyAxNTogOTZFM0Q5MTQxRjhFQkY1MjA1NDBDMkJDOUE5QzIzLCBDRUZDODZBMUNENDgyMDNECisgMTY6IDcwQ0FCQkE5ODMxNzkxMDZBRTdGQ0Q1RjFGMzFENUMzLCBCRjdGOTE2OEY0RjgyRjU2CisKK0VBWC1ub2VrZW9uICgxNiBieXRlIGtleSkKKyAgMDogLCA1NTY4MDVFRUE1OTVDRkI5QTMwRkFEMTk2MTAzRDdGRAorICAxOiBGNSwgMEE3REFFREZCNjU2NTI2Q0VGNEREQkE4MDg3QTIyN0EKKyAgMjogN0I4QywgMjQ5ODk1RDc5OTYyRDVCNEQxOEZFMDczNjYyODFCNzIKKyAgMzogQUNGRjE1LCBEQ0M0ODlEMjQ4MzJFQjEwNkY1NzZBRTZCNkVCOTU3QQorICA0OiAwOEFERTdEQiwgMEQzMjE1OTk5RTk5NjBFREFCMjlCNzg3NDRDN0YxMzkKKyAgNTogNjYxMzkyMTNGNiwgNTA1RTFFNzE0MUQwNDNFOTAzQzI2RUUwOTU5RUVFQ0QKKyAgNjogMDc4Qjc5Rjg4MEE4LCAzNUI3RUIzMjZBNTVFNTAzMzI4NjZFRURCNjgyRUMyMAorICA3OiAyODA5RTM0RDk2NjdENCwgRkZERUM1NTVGNjg1MjRBMDlBNkFCQUNBMzcyMDc3RDkKKyAgODogOTNEMjY3REUxRUM2MzVEMywgNEZGMzU2MTk5MEE1NkU0QjM3NDYxODcyMkVGODUwRkYKKyAgOTogRjM3N0E0RDkzRkYzMkY0QTUxLCA5MUQ0MDcwNDIzQTkwRkM1NEQzMDUxNjlDMDNGNDlFRAorIDEwOiA2MjQ0QjcxN0UwODI5OTNFQjdBMSwgMkUzQThBMzU0QUZBOTQ3MzY2N0VEN0ZERDQ2QkU5RkMKKyAxMTogRTkxNzU1OTYyNUQyNUU2RTVGMkVEQSwgMTkyOTVDMzdBNzAzMTRDQzlBMUQxMUZERThEMjNDOTIKKyAxMjogMUU2REYyRUUxMTJBODkzQUIxNERGQTkyLCAxMkM0QTg5RDRDRDY1RjgxMTZBMDNBMTM1QUZEMzcwMQorIDEzOiA0N0IxOENENzYyRTAxMTc3MEUyMDNDRjYwNSwgNDM0OTA5QTk3RTExOEIyMEQzQUVEQzc5QUZFMzNBOUUKKyAxNDogNzJEOUExQTdEQTZGMzNENUUwQjkyN0Y5RjMyQywgNzc5QzIzNzE0RkNBQTJCMjMyMUVDN0ZCNUIwM0UyMjIKKyAxNTogREE4QjgzMEZGQ0IzREIyNzQ4MDdGNzgwRDMzMjQwLCBFREMyRjFDOEE0MDFGMzI4QTUzMzkyNTk3NzMwQjAwNworIDE2OiBCNTNERDJCQjg0MEFEOTMzRDM2QTdCNUZGRENDRkJCQiwgNEVDMEU2RDFGOTE2QkY2MzM4NjkyMzlCNjcyQjM3QTEKKyAxNzogNDI5MzZCQjlBOTM2QzMwNDA4NjYwODU1RjRGNDdGMzMxNCwgRjBEQUE2RERBMTU1ODVFMTY5N0FCQkI0NzkwQjE1QjUKKyAxODogMDAzNzJFNDdGNUJBMDE2RjFCMkExRTY4MEI3NkFCMDIwNTJBLCBDREJGM0QyNDFCRjdGRjk2RDNERkJFRERCODcyRTkwMQorIDE5OiA4QUEyMzZCMEM4QkVGNkY2N0E5N0MyREY5MDYyOEY2RTU4MzhGRiwgNzMxRENENjFGN0YyNjAwNEMwMzUxOUY5NTAwRUE4MjQKKyAyMDogNTUzMzg2NDc4MTJGQzlEODZDQkREQ0VENzEyMDI2OEE0RDQzRjhCQSwgMEU2MUIzQzgzNUNBRDk1RkQ0OUZFRjAwMkMwMTRFNzIKKyAyMTogNDM1ODIwQjI4RTUyMTU0QjQ3QTA0RDVFNjM1RDhGRTM3RkE0N0ZDOTg1LCBGNkE5NkRDRTQ5MTdFOEQ3QzYxMDkyMzYyN0U4MDk3MAorIDIyOiAwRDMwQzE1QjZGRUI0QTQ4QjE0REQxNUQ0MUE0QjI1RDQ0MkFBNjc3QjI1QywgMjhFMTVDQ0I3NEFFOTkyQzY4QkREQzhEODc4MDIwNTAKKyAyMzogRDlENzAxRjlBRDZCMEUxM0QyQ0REQTE1QTUxOTRFN0NFOEJEMkMwMjEzNzM5MSwgMkRCOUExNTg4NEU5Qzk5NkMzRDZCNUJEQTQ0Qjk1OTgKKyAyNDogRTIzOTBBQzVDRTEwQ0NGQkM3MjEwNkE1MkM3RjE4MENCNDc3RTNDMTkzQ0JBQ0E4LCAyMkQzRjdEQ0Q2OTQ3RUE0RTc4REY1N0E4RTFBOUE1OQorIDI1OiBBREVGQjdEOTUwMDY1OEQzNDk5NkFGNkJFNjMzNkNENzg4OTEwNjRFQTFEQjhFOTc4NSwgRjIzOUQ2N0QwMzlBMTVDNjIwQTdDRDRCRTQ3OTZCM0YKKyAyNjogODk5NjRDOTBBQkY1NEE2REY5RjEzQzM2ODFFNzBDNzAyRDgwQTE3QkU3OUY4MTYwRjMwRSwgNjMzNkY3MjlFQ0UxRUQ3MzY4NjY5RDc1QjdFMkRDQkEKKyAyNzogNTc2QjI4MTNDRUNEQTRGOTA1QkQ1RDU4MzQ5RUYwNzBGRjQxQjdFQjZCQjJCMDFCMDYxQjBCLCAxMjUzMjRDQkYyQUNGMTAxMUE0NEE5OUExMUVDOEFGQworIDI4OiA0MzBCOTU3NDgxNzQ4NTE5QTYwNDk0RjBCNUY2OThGMzRCMUE4MjM1QjAwQUMwRDFGMEE0NDQyRSwgMUU4MEE3RkNFQkJCOEUxRTEyRDY4MzE5MDYxNTQ0ODUKKyAyOTogRTc4MUJGRTVGQ0RFMEJGQzA1NkNDODZDNEEwQjlERDNCODE1QkU4Q0E2NzgyMDRDRjQ3Mjg5QjVCNSwgMTkwRDVBQUE5RUMxQ0I0Q0M4NkZBQ0U1M0JGMTIwMUIKKyAzMDogNzhCRkFDMDdBOUI3QjJBRTkzMjlCRjlGOUJGMThBMUE0OUREOTU4NzAwMUVGQ0EwMEU5QUQ5NzUyNzY0LCA0RkI1RUNCRUVCMDk5NUMxNTBFQkM2NjUwOEZBMTlDMQorIDMxOiA3RDZDMjA2OTQxMDlERTIxRjc5NTU4NTVBOEZGODMyMzQ3NTE4REQ0OTZDMkExMTRERjE0MkM2OEFDREVBQSwgQjI1RDRCQjM0MDU2REMwOTFBN0EzOTUwRDQ2QzMyRUMKKyAzMjogM0UxRTQzOTVERUMxQUZFQTkyMTJCOTVGMzdFNjc5QjZFMkQxNERGMjNDNURFNDkwMThDMkM4MDM4Q0M0QUQ0NSwgOUE2REU3QkQ0MUEyMTkxOEFENTA0NDkwRUY0RTU4MUQKKworRUFYLXNraXBqYWNrICgxMCBieXRlIGtleSkKKyAgMDogLCA4NUY3NEI2QUZGQjEwQUNECisgIDE6IDNGLCA2MDRERjhCREQ5OEEwQjNGCisgIDI6IEVBODcsIDc5MjM3NEZFMDc1ODhCRjkKKyAgMzogMDE2OUNBLCA0ODlBQjhBRjY5REEzMzA2CisgIDQ6IEE3QUMzRUIxLCA0MjhEQUY1MDhFMjRCNTgzCisgIDU6IEFBOTAyOEQ1QjMsIEMwQTQ0RURBNzFGQjJDODYKKyAgNjogREE5N0JBODhBMDYxLCBEQTJFQzM0MDc3RjQyNTg1CisgIDc6IDdFMjVGQUE0MUNFQkM4LCAzNkQ0OTg3NTUxRTA2RDVCCisgIDg6IEY2NjJEQTZDOTAwMUNCRkUsIEI3REVGNzY2ODBDMzE2QTkKKyAgOTogNkQzRjczRUM3MTZFMURBODk3LCA1RjBGODNCQUU0RDM1MTNCCisgMTA6IDJBMzAwRjU4NUJFRTlDODg5NzQzLCBGNDc1NkMyNERFQjcyQTlDCisgMTE6IDgwNTE4QjAxMERENzdDODJEMTkxMDYsIDUwRkY1Q0FBMzY1RjRBNzAKKyAxMjogNkU1NzlBMjE3M0M4NjFCNkYzN0I0Q0QzLCA4MUUzRTVBQkJBOEYwMjkyCisgMTM6IDVCMDQ4Mjk4ODBBNzJDMzg4NzFDNzAyMUYzLCA2QjI2RjQ2MzcwOEEzMjk0CisgMTQ6IDkzNDE3Nzg3OEU5QTlBOUZCNERFQjM4OTU5MjIsIEVCQzFDMzJGMEEyQTNFOTYKKyAxNTogMDdBRjQ4NkQxQzQ1OEFBQjJEQkYxM0MzMjQzRkFELCA4NzI4OEU0MUE5RTY0MDg5CisgMTY6IDg0MDU5MjgzREY5QTJBODU2M0U3QUY2OTIzNUYyNkRGLCAzNTE2NTJBMERCQ0U5RDZFCisKK0VBWC1hbnViaXMgKDE2IGJ5dGUga2V5KQorICAwOiAsIDhFMjBGMTlEOUJBMjJBQkEwOUZCODZGREU2QjlFRjM4CisgIDE6IDNCLCBGNDIwMUU1NDZBOTE2MEY5ODkxOTE5NDJFQzhGRDFEMworICAyOiA5RjM4LCA0RTNDRUFFM0UxQ0I5NTRFMDIxQTEwRTgxNEI3MTczMgorICAzOiA0RjQ3NjksIDNFOEYzNUE2QTVCMTEyMDBFOUYxQUEzODU5MDA2NkNECisgIDQ6IEFCNDFGNUZDLCBFQzRDOTdBODg5MkFBRjU0MzMxMDZENEFDOEE0OTg0MworICA1OiA0MTRGOTVENjFCLCBCRjgzMUUzNEQxRTNGRUNCOTczQThDNzMwRUNBMkU2RAorICA2OiA0Nzk4MzIyRjA2RDEsIDAwNUJCQzMwQkZFREJFNjQ2MzUzNkM0RjgwRDFBMDcxCisgIDc6IEYyNTZCNkNEMUJGNEY1LCA0NjhBMjhGMDY2MTg4NEI4NDZCMTkxQjUzMEM4RDA2NAorICA4OiA5MDkwNkYyN0E2MzNBRERFLCA2RDkyMDBBMzdBN0Y2QTQ1NkNCMTAzNjczMTg0QzJFNQorICA5OiAxNkNEM0MxN0M5QjRFQUIxMzUsIDZENzE2RTIzRDdCMzUxMDlGNTVCMDM2RURGQTc3NDJFCisgMTA6IDdBRDFDMjJGMUYwNjI5OERGQjI1LCBCMDc2OTkwRjgxOTM1NDNDOEYzMTg1RDM3OTJCQ0U1NgorIDExOiAwNDc2RjJBQkNEMDU3RkU2RkVFMzlELCBCQjI4NzZEQjE4QzAwMDM4RkFEQkJEOUIyNjRBQ0MzQworIDEyOiBCNjlFREUzMzY0MDdEQkMyRUU3MzU4NTcsIEFCNjNFNTkwNjExNkE4QkUyMkM1MkI1REEzMUIxODM5CisgMTM6IEMzODY0QzEzNTQwNjVBNTY0NzA2NjlFNjAyLCBDNzJCRkQzQTBCQzczQkZGMDUxQzlBQjJGMERGRUQ5MworIDE0OiAyOTZEOEYxODNBNTkwMjBEMzM4OTA0MjBERDdCLCBDOUQ5MEI5RUI0MkMzMkVEQ0Y2MjIzNTg3RDE1OThBNgorIDE1OiAyNTZFRDhFOUQ5ODI2MTY2ODA1NTk5NzlCREYyRTksIDE3OUZFNEU3QkE3RTk2NjA1MEQzNTkwMDMxN0U5OTE2CisgMTY6IEQ0RUQ4RjMwRkY5QzA0NzBENzVCM0IxNjc1MEEzQUU0LCA1RDUwRjA1QkIyNzBBMjkyREZGOUY2N0EzQkE4NDY3NQorIDE3OiA0MENERUI2Mzg4Mjc0MTQzQ0EzQzRGNjAyMEJEOUE0ODc1LCBCMjdDN0RGQjFCRkJCM0ZDQ0VFMDE3MTg1MkM3OTI0RQorIDE4OiA1NEVGMjYyRUMxODAxRDUwNUM3NjI5RDAzODY1NEVCQTA1OTQsIDlEMjA2MEZDRDBBMkM1Nzc1MTFDNzc1MkFERTYwQkJFCisgMTk6IEYzOUVFNTRBMzdGMTZERDM4QjYyNEQ3QUI4RjBEOUNCRDRCOTgxLCBCQzA1NkM3RDJDMDlEODEzNzAzQ0RENjNDMUM2OUY0NAorIDIwOiBGNEU3QUQ0NzRGQ0ExNTNBQkQ2NzBFNDMwODFFRDA5RUIyQzRDQzFBLCBGMjQ0QkQ0RDYzMDI3MkYwRDk4RkNBMDQyMjZDMDRGMQorIDIxOiAwMzlFQ0MzNkEwQTE2MjczRTcyNDZDQTFGRjE5RDIxM0FDODdCNTNGMjksIDMwNTZEQjY5MTZDOTI1REYyMjBCNkM5OTgwRUUxNDFBCisgMjI6IDdERTFEQ0RFRjAxNDQ3Q0EyRkU4MzM3NUE0OEREODRFNEE3Q0I3QzAxOTkyLCA3OUFGRUE0ODE2RUFGOERBQzhBNUU5Mzk2MEYxNTk0RgorIDIzOiBBODg2QzRCOTE0QkYwOTgzMDAzMjcyRjIyNkY5QjIxOTdFRjJEQzA1QUNEREUwLCBCNTlEODVBMEZEQTVGQTQ0MjJGNzIwM0MwNTVCOTdBOQorIDI0OiAwMEIzRTFFOTE0NDhFMjUwQUFGQjY5NUMwNjQzQTY1NzdBQjQ1M0VGRUNGQUJGNTMsIDRBN0VGRjFDQkMxQUI1MzUxMjJBMDE3MjAzNjE2RDg1CisgMjU6IDg1RTk3MkU3NzRENjZEMDUzMUU0MEI4RkU5RTI2NEE3N0I1MEZBODgzQUIwOTQzMDgwLCBCMThFMTY0QkY4OUI3RTdBQjBEQzI1NkRGRUM3QzcyRgorIDI2OiAwMDQ4NDlFMzkzMzQ5NjlCMzkyQ0IwQ0YzRkRFRkIzRDc5MkRDQkJDMTVGODMyOEM3RURDLCAzQzUxMjk1NzExRjVGODc4REU4RjBCMkI1QTI2QTIyNworIDI3OiBBMEJBRDZDMjI2NEFCMTU3ODk5M0JBNDlFNTlENDU5ODgyMkZGRUQyMEE1N0Q4OEY3NTZGRjEsIDJFQjlENTI1Njk3QTQxOUExMERCMkE4NEFFRUE1RkJDCisgMjg6IEMzNEREODA2RUFCNUFEODIzRDc4QkNBNzhBNzcwOUE3MDVGQzk0RUNDNTIxQTM2N0Q3NkM5NTg4LCAzQzU3NTgwQzc5MDMwMzlENjQ1QzA2REJBRjA3QjQ3NworIDI5OiBDNDQ3RUM3NzUxMjkzOENGNzg2MjM4OEMzMkFGMjJBQ0U2QjVFNENCQUE5OThCRTRGNUNCQzREMjE1LCA0MzQyNUQwOUI3QUNGRDkwMzcxQzA4OTUzOTQ2QTk1NQorIDMwOiAyQzE2OTkzQUFFNjI0Q0JBNENEQUYzNEZFM0QzNjg1NTlFNkJFNTQ4MjkyQjI4MTQzOTg2NjM3NTAxM0IsIDNCNzM2MEMzRkE4RkIxQzE1RDE5RjU2NzE1M0NCNDZDCisgMzE6IDUzOEU1REZBRjE0ODU0QTc4Njg1MUU0MTY1RjJFMDFDRERBOTYzRTMxOEZDRTRGQjU4RTMxQTZCNUNGQzMzLCAyRjhFQTEzQjdBNjg3M0ZFNTU2Q0E1MzVBQkEwOTY4QgorIDMyOiA1RTI5Q0RCN0Q5Njk1QTExMDA0M0U5QzI2MDEwNEJERjAyMEEzQTJBMTM5RDQxMTJFOTE4QUI1ODRCREQ3RURBLCA5MTMzMjEzQUE3QkNGMDYyRDJCRDM3Rjg2NjY4M0QzRgorCitFQVgta2hhemFkICgxNiBieXRlIGtleSkKKyAgMDogLCA3NTk2OEU1NDQ1MkY2NzgxCisgIDE6IDk1LCBBREFGNTk0OUYwOUI1QTIyCisgIDI6IDZCOEYsIEEwNkIyMDE5NDc0MjRBMTEKKyAgMzogNUJFNjY4LCAzMjUxNDE2NjI1REYzNDdBCisgIDQ6IDVBOTJFODJCLCAzM0UyNTc3MjQyN0Q5Nzg2CisgIDU6IDYyRjlGMkFCQ0MsIERFNzE0RjVGNUQxN0Q2RDAKKyAgNjogMEUzQ0Q4MjVCRDhELCBBNzk5MUM4Q0I4OTc1RUQ5CisgIDc6IDRBRDBEOTk5NTAzQUFELCA1M0E4MjdENzg4NkY3MjI3CisgIDg6IEJCMDhFNkZBRUQxREFFRTgsIDkxQTExODc0OUI3QUI5RjMKKyAgOTogMTZFMzBDQjEyRTIwRDE4NDk1LCBGOEY4QjhDMTI4MDE1OEY5CisgMTA6IDYxNkRCQ0M2MzQ2OTU5RDg5RTRBLCA1MDZCRjM1QTcwMjk3RDUzCisgMTE6IEY4NkIwMjJENEIyOEZEQjFGMEI3RDMsIEVBNDIyMjBDODA1RkQ3NTkKKyAxMjogOUI4QTNEOUNEQkFERDlCQkNDQ0QyQjI4LCBCQjQ3OEQzQ0U5QTIyOUM5CisgMTM6IENEQzRBQjRFRjJENUI0NkU4NzgyNzI0MUYwLCA2NThFREI5NDk3QTkxODIzCisgMTQ6IDFBMTEzRDk2QjIxQjRBRUJEQjEzRTM0QzM4MUEsIDYzQUQwQzQwODRBQzg0QjAKKyAxNTogMTREQTc1MUU1QUY3RTAxRjM1QjNDRTc0RUUxQUNGLCAzQzc2QUI2NEUxNzI0RENFCisgMTY6IEExM0JCQzdFNDA4RDJDNTUwNjM0Q0JDNjQ2OTBCOEZFLCAzRDRCQkMwQzc2NTM2NzMwCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L25vdGVzL2VjY190di50eHQgYi9saWJ0b21jcnlwdC9ub3Rlcy9lY2NfdHYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MTcyOWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9ub3Rlcy9lY2NfdHYudHh0CkBAIC0wLDAgKzEsMTI2MSBAQAorZWNjIHZlY3RvcnMuICBUaGVzZSBhcmUgZm9yIGtHIGZvciBrPTEsMyw5LDI3LC4uLiwzKipuIHVudGlsIGsgPiBvcmRlciBvZiB0aGUgY3VydmUgb3V0cHV0cyBhcmUgPGsseCx5PiB0cmlwbGV0cworCitFQ0MtMTEyCisxLCA5NDg3MjM5OTk1QTVFRTc2QjU1RjlDMkYwOTgsIEE4OUNFNUFGODcyNEMwQTIzRTBFMEZGNzc1MDAKKzMsIENGQzFFMzQ0N0ZDMzNFNUMyQTdEMkJGNzEyOTgsIDVCRDZBQzMyRjBBOUU3QUFCNkFGNzIyQzNDQjcKKzksIDNGMzdDRjg3MEI5MThDRDQxRUU1OEY1OERGMTQsIENFQzNGQTVBNTNGRjVBMzcyQjU4M0NFNDBGMjAKKzFCLCBENUU0NUQyOEE0N0EwODE5RjNBQTMwMThFNTgsIEIwNURCNjY1NTlGQjc4ODc2Q0Y4MzBBNkFEQjQKKzUxLCA4NjlGRUZBNkRFNUY2MTlDQTU0Q0E3MTk1NTRCLCBCQjkzRTI3QkJDM0ZBRDAxNkJDMzY5NzY2RjRBCitGMywgQkYxNzg0Qjg1N0Y2NjhFOTQ1OTcxNEQ4MEQ3NSwgQkVFNTVCNTY0Q0I5MjNDNzAxOEU4NTVBMkUwNQorMkQ5LCAyNzA2N0NBQjJCQzhDOTIwMUIxRThGMUQ1NEZFLCA0QTlCQ0U0MEQ4N0IwQzgyRUE2NkQ2NDVDOTMxCis4OEIsIDRFOTk3NEQ3Qjg5MDQ0Mjc2MEZFNEQwNUZCOEUsIDk2QkY0RERGMDA0M0FCNkFCNzhFMzczREYwMTAKKzE5QTEsIDZDQ0U5MTIyQzQ4MkE4RURDMkRFMzcxNDIwNDMsIEJDNjRFMUQzNThGNzI5M0ZDOUIwQzJCODFEM0EKKzRDRTMsIDQ4MjY4RUE4MTkzRDhCRDAzMDgxMDg0MTEzNjgsIDEyN0E2RDhFMDEzOTlERDNGNjU0RjcxM0I1QUIKK0U2QTksIDQ2MTU0RkIxMDI4QkZEODZDQjI5NzQ5QzFFNEMsIEM0RkFEMDY0Q0E4NDU2NjczOTQ1MURDNkRFRgorMkIzRkIsIDExRjE2REY0QTEyMkI1Qzk5Qjg5NzkyMTY4OEQsIEMyQ0UxNDZDMjZCQjc5RjdDRUE3NEE0MDY2NUEKKzgxQkYxLCA4NjAyM0Q0RTlBNDAyNTJCOTk0MzMyM0FDNkMyLCA5OEJDN0NGRDU0MDUyOTc3MTMzNjQxNEIwMjQwCisxODUzRDMsIDlGRkFBREU3QzEzODcyODA5NDI4QjI4RkZFRjEsIEEzMzgzRjQ0NkJFQkY1N0M5MzIxM0E3MEIxNTUKKzQ4RkI3OSwgQjE2RUU0MkVEQTQ4NEUzRTMyQkZDRDMwMEE1NiwgOEQwRkVFRTQ3REFBQUNBQTlEOEJDRjY5RDJGRgorREFGMjZCLCBBNUIzMzBFOEVBMzYwNzc1MjJGRTFDNkZCN0MzLCA4OEE4NEJCODA2QTZGNUE0QkZGM0U1NTFBRjAwCisyOTBENzQxLCAzQzU4NkVGM0Y3MzFFNjUxQ0E2MDAyQzczMzJGLCBEMDU5QkM2OEQ3QkRCRDM2Q0ZDOTg5Q0Y3QkYwCis3QjI4NUMzLCBDMkM5MUZBOUU3NzZFRDNCQTI4NUFCNUUxMDdBLCBDOTNGNDFBOEEzOUIyQkFDQkUwNUUxRjkzNDI4CisxNzE3OTE0OSwgMzU0QUEzRkUxOTFBNTA2MzU5RUZFM0I5RUJDMCwgN0JFREJCRURFQzc2ODA4NjA4NkM0NzRGRTlEQworNDU0NkIzREIsIEIwQzM0QzdCNEVDNTA5QkE3RDEyOEQ3Qjg4MEYsIEQxNzZCRjA3QjM3NUVCRTgwOEZCNTc4NjMzODIKK0NGRDQxQjkxLCA2NzUyQUU2NkYzRDMzMDJFREUwMjBFRjY0Q0Y1LCA3QUJDQ0M0NTIyN0NFM0ZCQTU3RjAzNkU1MTgwCisyNkY3QzUyQjMsIEMyOTJDMEYyMjA1QzdERDg1QzE2MDUwMEMzOUYsIDQ0NzA0RjVDRTBGQTgwM0I0NEJBODVCRDREMjYKKzc0RTc0RjgxOSwgNTYwQTVGRDRDQkVCMjZFRjJDNEE4MUMzQUI5OSwgOUE2ODVCNkM3RjhCRDIwMzc2NEI2NDk4MDA2OAorMTVFQjVFRTg0QiwgQkZFQzI0OThBNUM2NjJEN0NFMEVDMDc5NUQ4NiwgODFFRkM0NEZGRkJBMUZFNUMxMEVBNTBFODA1QgorNDFDMjFDQjhFMSwgM0VBODYzNkVGNzQ2QjZBN0Q0MkRBMkU2MzFERCwgRDIzREIwOTdEOUY2NTZCOTAyRTVCQ0FFNTkyMworQzU0NjU2MkFBMywgMTE4OUJGMkVEMkExMEY3MzEyRjBEQzZBQzEzMSwgNjdBQ0JFMjBGNjM2REQ0QjVCMzQyQTNDNzZCOQorMjRGRDMwMjdGRTksIDI4OEI0QkJEQzI5RUE3MTE5NjMwMUI4QUZFOTksIDg3MzE5NkJDRkNDQUVEMkUyMjMzNTI1OTE3RTAKKzZFRjc5MDc3RkJCLCBDODkwMDlGM0U3QTkyMTAyMjAyMDgyQTRCRTM1LCA4NERBMzM0QkQ2REY0ODQ3QjIzQTIyMDRCQTVFCisxNENFNkIxNjdGMzEsIDFDM0M5RjZEMTVBOUIzNjY0MzE1NzlGQjQ4Q0YsIDlBRkI4MUJFODFGQThEMUE2RDA2N0Q3Q0MyOAorM0U2QjQxNDM3RDkzLCBEOTZGMzBERUZBRTFGMzQ0NTA2N0UxQkM1MTI2LCA1Rjk0QzJBMzg4RjdGNEU3RUM5Qjc4M0RCMENDCitCQjQxQzNDQTc4QjksIDVFODVEMjc3NzAzMUZFNzRCMDIyMTRBODk4RTksIDU2QkRFQjA1NDJCQzM2Q0MzRjZBMjY5NjY3RUMKKzIzMUM1NEI1RjZBMkIsIDE1MEEyRTI0MTZFM0FDMzE1NTY5QTM4MjBEOTIsIDRERjhGQzFGOEFDRDA2Qjc0MkU2MTE2MjYxOTkKKzY5NTRGRTIxRTNFODEsIDU0MUQ1RkNDRkM4NEEyQzA1RThBMDE0NUJGQzIsIDI4QkZEQjczRENGNDIwNjg1N0QwMjJBRjUyRkMKKzEzQkZFRkE2NUFCQjgzLCBBOTkwQTJCQzNCMTEzQTY0OEI5RTAwRDhFNzUwLCAzREVCOUY1QjRBQTY5MTNDQUI4NDNCOEYyQkIyCiszQjNGQ0VGMzEwMzI4OSwgOUEwRkM5OUI4MjZDQzY2NjI1Mjc0REYwMUIzOCwgQTA1NzA2MTlEMjA0N0M4NjRCOTBDMDUxMzU3NQorQjFCRjZDRDkzMDk3OUIsIDNCQUJCOEUzNzYxQjM4RTAwNERCMzM0RTU2OEQsIDE2OUI0NzRBNDFENkQwNjA1QTM5RDQ1QzBDRTcKKzIxNTNFNDY4QjkxQzZEMSwgQjEyRTg3M0Y1OEM4OTcxOEI2REQ0NkRBNkMwNSwgQkRDMzY4NEFEODE3N0ZGRjkwODYxREVGMzQ5NworNjNGQkFEM0EyQjU1NDczLCA2QjlCMTk1RUE5MTc5OEZERkVBQkFDQzQxNUI3LCA0MEEwNjkzQ0ZGNTJERTUzODE5QTk3MDREQ0E4CisxMkJGMzA3QUU4MUZGRDU5LCA4QTBBQjI0RThFOTc5NUI4NDgyRkE0NzhBNzFFLCBCQ0M5OTE4MjFGRkI1NzM4RTA2NjczMzYzM0YzCiszODNEOTE3MEI4NUZGODBCLCA3MzBFNDAzRTY0RDY5OUMxNkZBQ0Q2NzM4QjIxLCA5MTk3NjFENzE5QzEyQkQyQkYyMjkxOTM3NDZBCitBOEI4QjQ1MjI5MUZFODIxLCAzMzMzQjQ3Qjg1RDIzQzZEODMwMEY1MjI5NDYxLCA0OEQ2RkVDRUEzMDgzQjlEMzFFQzQ2OUM2QjQzCisxRkEyQTFDRjY3QjVGQjg2MywgQzNGNUFFNDYxMjUyRjVCMjZFQkM5REYxQjVGQSwgMTZEQTU4QTZDNTY1NzA4QzEzODIzRDFCMkU1OAorNUVFN0U1NkUzNzIxRjI5MjksIDZCQUVFRDNFOTBFODQ5QjAwMTIwNzEwN0Y3QjgsIDVFMUM3QjhFQjRCM0UzNjdBNENFQUY0QjczQzYKKzExQ0I3QjA0QUE1NjVEN0I3QiwgMzM4NUFDNkJCRDQ5MEFGRjIwMTUzMjI4NkRCRiwgN0IwMjdCRkYwN0I1NkZERTZGMEJDQjM3NzUyQQorMzU2MjcxMERGRjAzMTg3MjcxLCA4MTQ2RkQ3NDU5MkIxMTQ1NDkyRDM5NjgwQUQ4LCA1MDhBQTlFMTA2RTc5NThDRjAxMUQ4QUE3MUU5CitBMDI3NTMyOUZEMDk0OTU3NTMsIEIwRkUyNDRDQUVFRDlGQUVDNjc4QkQyMkNDRDIsIEM5N0IzMjU3NDY4QTIzQzRGNkU4ODM3MzdGQkIKKzFFMDc1Rjk3REY3MUJEQzA1RjksIDYwNURDQUZGMjNEREY4MDRDQjFDRTRGRDg0N0QsIDY4Njg0MDc2NTkxRjA0MkI5OENERjE0MTQ4RjAKKzVBMTYxRUM3OUU1NTM5NDExRUIsIEI2NUFBMEFDRjhBOUM4RTk5QTNGNjQ5MzBERjEsIDM0NjEzRDkxNTYzMDAyMzgyNkNBRTkwODkxOEMKKzEwRTQyNUM1NkRBRkZBQkMzNUMxLCAxNkNGRDQ5RUU0RDQ4NTBGMTY4OUZBQjAwNDFDLCBCNTBERDM2NjNBRkE2N0EzMDY3MDJCQjA1ODJFCiszMkFDNzE1MDQ5MEZGMDM0QTE0MywgNEUwRUJDODA3NTZCOTlEOTE2NjNEQjdFRTQ5OCwgNkEyMkQ5NDRCMUJBRUNFOEIyRUFENkFGM0YzRQorOTgwNTUzRjBEQjJGRDA5REUzQzksIDYwMzIyMTYxNTk2NUM5RUM5RTU4N0MzNDMwM0QsIERDQjFFRTdBMEM0MUU2NUMwOENBOEQ3ODk4MworMUM4MEZGQkQyOTE4RjcxRDlBQjVCLCBBQjgyRjQyNzBGOEMzNUM3NzQzNDQ1OTVGNDhCLCAzQjQwMDcwMzBFMUQ2NUM2Rjg1NDQ1MDhGNUY4Cis1NTgyRkYzNzdCNEFFNTU4RDAyMTEsIEJBQURGNUY3RTk5ODQ2NURCRkVDNUE3QTQ4NDcsIDEyODJDOTgxRUE0RDBCOEU3Qzc3REU5MDVENUIKKzEwMDg4RkRBNjcxRTBCMDBBNzA2MzMsIDZENjBBNUNEM0NBODZGNzlDNTY2RjgxQUU2NkMsIDIyNTg3RDI2MENEOEQ0NURBRDJFNUNFOUMyRUIKKzMwMTlBRjhGMzU1QTIxMDFGNTEyOTksIDY4MDVGNEZDMEIzNTAxMDk3MjhCM0Y1NkJDNDEsIDYzQTk4NzAzMDBFRDdEMDg1MkRBNzE2M0E5Q0MKKzkwNEQwRUFEQTAwRTYzMDVERjM3Q0IsIDE4MzE1NkZDRDU2RDExQjgyQ0U0QjY4OTMyM0UsIEFCNjE0NUM1Rjc5MzQ0MkIwMjJCNzYyNTE3NjcKKzFCMEU3MkMwOEUwMkIyOTExOURBNzYxLCBDRDU5QUM4N0IwNkM1RDhCMUVFQjhDNTlCMjlBLCBDOTU2NzI4RDRBOENGMTA1RjJGMTVCN0YxMjhBCis1MTJCNTg0MUFBMDgxN0IzNEQ4RjYyMywgOTBBQTM5OERBODEyQTE4MEZFOEY2QzhDQ0M0MSwgOUVCMkM3MDVFQzAxMUVDMjMzNDVFNjE0OERGMworRjM4MjA4QzRGRTE4NDcxOUU4QUUyNjksIDIxOTg3MzVDODA2MjY2QzFDNDdDOEFDMDgxNjEsIDVGRDFBMDZDNjhCRTBGOEQwOEE4RUU5QTJDNEUKKzJEQTg2MUE0RUZBNDhENTREQkEwQTczQiwgMkY3RTBERkQ2OTVBNkZCMzA4NUM0RjNFOEM5MSwgQTUxQjhFQzVDMEMxOTg5MDczRTc1NjY2NkUwMworODhGOTI0RUVDRUVEQTdGRTkyRTFGNUIxLCA3ODJEOTkyQTA2MDFFRjREQUZGODlDMTMzMTUxLCBENTI2ODBGMzRGMEUwM0I1NEY3NkU0RjQ5RjUyCisxOUFFQjZFQ0M2Q0M4RjdGQkI4QTVFMTEzLCBCQjRDOERDMEZFNkZEMDA4QzgxNzdGMEQwQzAxLCA1NzU3NEFBQjA3MUM2MzM4NTk4MzMzMjEwMTAwCis0RDBDMjRDNjU0NjVBRTdGMzI5RjFBMzM5LCBBMTJGNUJCRkQzNzU3QUQ1N0VCRjE5RkE4OUFDLCBCNUYxMjI4OUNGQkVEOTE2MTMyNEVBMTM3MDA5CitFNzI0NkU1MkZEMzEwQjdEOTdERDRFOUFCLCA2RkI4MkY5QTAxNjMwMTI5RDcwQTI4NTVERkZCLCAzMkUwRTU1RjVCMzlDMEZENjA0MjEyNjg2MEVBCisyQjU2RDRBRjhGNzkzMjI3OEM3OTdFQkQwMSwgMzdGMDM0NjA3QjcxRkQwQkUxRjg1QUNCODE4RSwgMzRDQzYzRkY3REM2RTU0NDk0QkU2NUY4MkJEOAorODIwNDdFMEVBRTZCOTY3NkE1NkM3QzM3MDMsIDkyMEFERThEM0FBRjI0NzgzMDgyQUYxNjNGQTEsIDEzQTAyRUM4OEM5QUYyMzc0NjdGQUVDRjk4MEQKKzE4NjBEN0EyQzBCNDJDMzYzRjA0NTc0QTUwOSwgRDI3OTBDRkQ2MDVGMkQzMjJEMjEzMDkyQTU4QSwgMUJEN0FGOEU2RjM3MTA5MDlCN0Q0MDBGM0I1MQorNDkyMjg2RTg0MjFDODRBMkJEMEQwNURFRjFCLCA3RjVFNTcwRkUzMEY3MjExQUYwNUUyNDVDM0ZDLCA3RUVENDZGODkxQzM1MDQ3MEFCMjdBMUNEMEY5CitEQjY3OTRCOEM2NTU4REU4MzcyNzExOUNENTEsIDc1NDE1MDYxNTBEQkIxRDRDNDRDQkJEOEUwMjUsIEM4M0Y1OUQwMzU5NUY5N0Y2RkFEMUVGMDBENzcKKzI5MjM2QkUyQTUzMDBBOUI4QTU3NTM0RDY3RjMsIENBMzZERDI2ODlGQzI4MTk5OTQzN0NDNDEyRTIsIDU3N0UwNEU4MDYwMDNBQUM1QTRFMjdENDk2QjUKKzdCNkE0M0E3RUY5MDFGRDI5RjA1RjlFODM3RDksIEJBNTdCREY4Rjc0OEI5NDZGMzRGMENFNkJBNjQsIDZCOUI1QTVBOThENEQxRjBCQkE1NjQ4OUIyNTkKK0VDQy0xMjgKKzEsIDE2MUZGNzUyOEI4OTlCMkQwQzI4NjA3Q0E1MkM1Qjg2LCBDRjVBQzgzOTVCQUZFQjEzQzAyREEyOTJEREVEN0E4MworMywgQUQ2MzJGNTQyOTQyRjIzQUE0MjNCNjI4QTMwNEIzQiwgN0FBNjdFRTQyMUM0RTc4ODUxRTRCNDY3OUJDREM0MUYKKzksIEM3MzJBRTk1Nzg4MkY2QURFRUY5NEVGNEZERkRCNUEsIDVGODMyRDNBNDYxQjlCRTBEQUI5QjZFRkJEQUFDMTZBCisxQiwgQzNFN0ZBQTJCMDA0Q0M2NkRENzc5RDRENENDQzkyQTMsIDg5OEE1Rjc3MTMwNzI2NDQ3RDdDNkE5RkY3QkI1NUNBCis1MSwgODgyRTc5QkU2RTJBOTJGMTdGQ0MxNEVBOEY0QTAwNEUsIDgxRUZFQjgzMDc2NERFMzA4NDA0NDEwODdFMDI2OUE3CitGMywgRkM4Nzg2RTQ3OTExQkVCNDQ4RkM4NjE0RkY0NEY5MjksIDVGRTI2Qzc4MzdDQUMwRTcyQ0MzOTJBQkM5MTVCQkU5CisyRDksIEVCMzAwMkFGOURFNEJDQUI3RjAwQ0UyMkU2MUU2MzhCLCBCQTk1NTU2MTZENjFDM0RGNTVGOTQwRDlCQjk0MDdFNgorODhCLCBBQTM3MzMyQzk1NjUxQUEyN0Q2QzE0QjFCREM0QjksIEUwNjJBMEIyRjBDRjAyRkQwODU5RTJBRDQ1MkUxMkNBCisxOUExLCBDNTM2NEQwMjI3M0Y1QUUwMzJGRkU1Qzk1QkEzM0ZCLCAyMTM1OUJGM0Q0NTVFOEU0RkExQjY0OThDRjAzQzY2NworNENFMywgNTY1NDA2NjM3QjMzOUNEOUU1MTQwNDhEMEMxQjY2NjksIDMzNjU3QjdGQUUxRDQzQUNCOEE1MkY1RDdGMEQ0NkY1CitFNkE5LCBGNjg2RDg1OTNFNjc1QzU5NjkxM0RDMjBDMzkxOTZBQiwgRUMzREExNjRGNTYxMjg4QjNCRTcyN0FCQTk5QTVCQTgKKzJCM0ZCLCBDQkIyMEI4MzQ1OTFFRDUzOEEzMkI3MURFNUFBMTY5NCwgODRDQzMyMkQzNUI3NjBFMTQyMkI4NUFCMzk1MDBDQzYKKzgxQkYxLCA1NzY4NDAyNzUwRjk0ODcwOUJGMDgzRDNCNDNENzA2MiwgN0ZDQjg1NzdGMTQ2NkREM0I0QUREQTU0MzFFNjAxQzkKKzE4NTNEMywgQzYzMTU4RkYzMzU5Q0U0OEFCRkNDNTUzRjREMzcyQjksIEI2RjAyMEI2Nzk4RUZCOEFBRjU0NUQxQjlDQTgzMjE0Cis0OEZCNzksIEM4QjE1NDk2NzRDNkIxQkVFQjQ2Mjk1Mzg2OUMxQjg5LCA2MUVBOTVDMUZCRjU3RUVEMkZENzQ0M0U2NjdENUVGOAorREFGMjZCLCA5M0Q5NzcxNUE2NzFENTFENTkwMUM0MTc3MkVDNzlERSwgQ0JDODk5NEVBRjlDNDc4QTA4QjZEMkU2Rjk1Q0ExRTkKKzI5MEQ3NDEsIDU0QzM4RUE1OUVERTU0NTY1RkYzQjQ0RDBCODA1QzUxLCA0REYxODQ4QjA4OUFCM0U0OTgwOERDNkNGRDY4MkJDMgorN0IyODVDMywgQzUxQjVGQjAyRDhGRjQwOTVFMUFGQjI3NkE0Qjc2MzYsIEU0NDAzOTIxREYwMjI5MkI4MUE0MUNBQUQ5RTJBNjg2CisxNzE3OTE0OSwgMzlBRjE0NDNEODhFQkFBRkY2NDVEMTZGNzI4MTcyOEIsIDc5OTkyRDlDQUJCNjc1QjFBMzA2N0Q3Q0I0QzdEMgorNDU0NkIzREIsIDRCNTQ5MzYxMTM2NDE2RDg1QUVCMEVEMEZDRUIzMjg4LCA3RjFEQUQ5NEQxQTcyNzM3Mjg2QTMwMzJCNkQxNTYzOQorQ0ZENDFCOTEsIEVDMjY4Mjk5REVGQzVDQzAwM0I1OTNGOEU5RDlENDk2LCBGMzc0NDAwMkI4M0ZGRkM2QTU0NUE3RUFGMEZFRkY2QQorMjZGN0M1MkIzLCA2NzEwRDAwMjA2NUI4OUVGMjI3N0U2Q0VDQTdEQTdFNiwgQUE1QTI0RENBNTAxMEEwQTAyNkY5MDVEMzU3Q0QzNUYKKzc0RTc0RjgxOSwgOTA5RTUwQTYxQTk2MzRBQzcwQTFGMzZCNUVFQTYyRDYsIDFFRkE4OUE4MUQ4M0NDOTkxMUNENUU5OTc4ODc4RUVECisxNUVCNUVFODRCLCA3NkFEMERDREE5N0NFODZBRkE1NTc4RTA1QkUzRUZDNCwgN0RBQUQ3RTcyNEFFNUVCNEIzQzlENEQwRkVCMkQzMEUKKzQxQzIxQ0I4RTEsIDU4REIxNTFDRTc0QjBFMTI0MjA2NUYzMzJFQkM1MEEyLCA4RTY1Q0E2MzM2NDEzMjM1QzdDMUFDMTRBRTJBOTBDNgorQzU0NjU2MkFBMywgODQ0MEVCRDNCQ0I5OERCRDcxMDgzNUNEQTUyM0IwNDgsIDNCMERBNDdCMTQ3MjhDNjM4MTEwNTRFQzBGODFFOEYyCisyNEZEMzAyN0ZFOSwgQ0REMTQ2NTE0NDMyNTRFNDEzQzYwOEYxMkM2MUE3Q0MsIDU1MDI3MkJGRDYzNzNCQzRGQzE4MzFCMzdCRDVBQkUwCis2RUY3OTA3N0ZCQiwgNEMxOTI2MDc1MTBGMzYyNTQ4NDYxNzMzMDI5QjNFRDUsIEI3OTc5MDA2QkU2QTkyRjI0NkQ3QTA5OUY3NjlEMzVGCisxNENFNkIxNjdGMzEsIERFQUI4QzA1MjVCRjQxRjVDN0IwQ0JENjdDMkFBQjUwLCBBRUJDOTlGMkU1NEQwMDlFNUUyQzMyMEY2MENBRUI3CiszRTZCNDE0MzdEOTMsIDJGRDBCQjIyODBCQzZDNzIyRkU1RTgwRDEyRDE5NUYsIEZDQTM3RUFCMDYyQTk0NjJDMDNDQTk4ODIxNTA5RDA5CitCQjQxQzNDQTc4QjksIDhBM0QzRkNDRkQ1QkJGQzk0RDE2Qjk4Mjk1MjdFQ0M4LCA3QjlGRDA0MDZGRDIwODBCOEFEMENEM0UxNzgzOTkxRgorMjMxQzU0QjVGNkEyQiwgMzgxMDExNEI2QzFGRTNDM0FDRDU1MjJBQzQ2QUFGOTcsIEVDMzJEQkVFNTIxQkFBNEY4MkVGNzdFMDYxOUY1QzE4Cis2OTU0RkUyMUUzRTgxLCA0MDVGNzAxNkM5MjhBMTBCRjY2REE5QjAzMDQ0QkI5RiwgRDQ2OTg5Mjk2OTZFM0MzN0FDN0FDOUZCQkZGQTQ0NzIKKzEzQkZFRkE2NUFCQjgzLCBENjdGRTRGREQyRUNEQzhCQUJBRjkyNkE2NzgxRjk1QiwgRDFENkRDN0NDRDkxMzZFRDdGMUEzMTdDMzJDQjIxRkUKKzNCM0ZDRUYzMTAzMjg5LCAxOTg5MUQxQ0NDQjBEODJEQzA3RTU1RDhBRkQ4NDA0MywgRjk0QTJCNjBGMzYxMkYyRjkzRjA4OUY0QzdBN0Q2NTEKK0IxQkY2Q0Q5MzA5NzlCLCA0MjBEMjkyMDQxNDhGNUM1QUUzRTAxRjg1MURBNDk5OSwgQ0VEOUY5N0ZGQkJGRDQ4REM0N0E3MzAyOUNDREQxNzcKKzIxNTNFNDY4QjkxQzZEMSwgREFBQ0RFMDVCNTVDQkYwMzkwNjE5MDk0QTIwMDg0ODgsIDU2RUE3Rjg5RTg0NzExODAzMTUwQkRCMDQyMTc2M0U3Cis2M0ZCQUQzQTJCNTU0NzMsIDZFNUU4Njg0MjgwQzg3RTFDMDBBRDlFM0Q2MUNERjYsIDUyODc0Qzk5Q0I4NDIyNTdDMEIwRjM3OUI4QkFFQzkzCisxMkJGMzA3QUU4MUZGRDU5LCAyMDJFODI3OEU4QzNGMkMxQUY4NEY1QTBGNzZGMjM4NSwgNjg0NENDNjY5NjQ0QjFBQjhFRTBGREZEOUVCOTU3RkIKKzM4M0Q5MTcwQjg1RkY4MEIsIDEwNzY2ODhBREQ1Q0FBMUI5REYwMjExMDE3MkYyM0EzLCBFNDJEMDNBRTkyNDFDMzRGOTgzNUI1ODA4NjE3NkUyNAorQThCOEI0NTIyOTFGRTgyMSwgNDREMDE5RDJDQ0VBQzc0OUUwM0ZFRDNDMjE2MDRDRkIsIEZDRTFDMkI5ODQxN0RDQTA2MTI0QjNBRTZCQjc5MUMwCisxRkEyQTFDRjY3QjVGQjg2MywgMTI3QTUwRjdBQjdCRUI0MTJGOTNENzFBNUNGNjBFRTMsIEI0ODE2MEREQUQwOUMwOTdDQjc1OUU3N0RBMDk3RkVDCis1RUU3RTU2RTM3MjFGMjkyOSwgQjAzOUUzRDVDNDFGQ0NGMDNENjc5Q0E2MzNFNDY3QkIsIEZENTZFRjI0OUI4OEY5RjhFOTRCNTU1MzFERDQxREJBCisxMUNCN0IwNEFBNTY1RDdCN0IsIDYwNEU2RDg3N0FFRThGNUY5MjY5QzkzMEMxMjdEN0Q4LCBCRTUwRkM4QkU1MEYwNTBCMDYxMTBERjcxNzgyNTM1NworMzU2MjcxMERGRjAzMTg3MjcxLCBFMjI2RTIzODI2RDc2MkQ2RjM1QkMzQjNCRDNEQjk1MCwgQ0ZCOTREQjkxQjM3NUJGODEzRDEyRDg1MjQ1Mzg4RjcKK0EwMjc1MzI5RkQwOTQ5NTc1MywgODM1MDFCNTI3NDk3M0Y3QUFDN0UzRjc5OTUyQjEzRUUsIEM5OTA1OThGNDUyNUUzM0IyODA2MjRBNDUxQ0NBRUE0CisxRTA3NUY5N0RGNzFCREMwNUY5LCBEQzk0MUY1M0U1NzAxNDFEMTU0QzhBOEY2QkU5Njk2RCwgNjlFMjY4RkQ2MzcwMkZBOEVFQjkyMjQ1QTY0MTczRkQKKzVBMTYxRUM3OUU1NTM5NDExRUIsIDk1NTgyRTNCQTJCOTI2NzFEMUM1NTk2OEZCRkZEQURELCBCMkQyODY3RDZFNjg1MTlFNDk3MkUxMDcyMjJDQzIKKzEwRTQyNUM1NkRBRkZBQkMzNUMxLCA5RTU1NTA3MDY4QjBBQTMzNEI2MTA2MUI1NUEzRkE0QywgNzYzMjZDQTA3QTYwOEVBRjJFNDRCMjg1MEJFRUU3RAorMzJBQzcxNTA0OTBGRjAzNEExNDMsIDY0NUM0NzNEMUQyOUUxMkRFQjEwM0UzMzc4OEFGQzMxLCA2REJDODU3Qjg1MTFDQkVFODdEQkNFRTUxRjFCQUZGQworOTgwNTUzRjBEQjJGRDA5REUzQzksIDk3MkZENzRGOTA5MDgyMUUxQkQ4MjgyREFBMTc5MzY3LCAzMTU5NDE3MjkzNEZDODA5OUZFMzI0M0M3MDkzQTZFNworMUM4MEZGQkQyOTE4RjcxRDlBQjVCLCA3MjUwOEQ0MDQ2N0ZBNTI4MDJBNUUzRUFFNDZBMTdDQiwgNkNEQkIzMjk0RkNDNDYzMDU0OTg3ODM1QUEyQ0Y2OUYKKzU1ODJGRjM3N0I0QUU1NThEMDIxMSwgRjQ0QjBDRTMwQUU4NTgxQkYwMjc2RTYxNTRCQUFDRjAsIDlERUVGMEVGNTIyREVCNDgxQTU3QUE1MjhBOUVGMzg5CisxMDA4OEZEQTY3MUUwQjAwQTcwNjMzLCA3Q0FENjJGMjNCNDk4QTYyOUY2MUMyNzdCNzhGNTNEQSwgOEY4NDhDQTI4RDEwNzU4QUYyNjIwOTQ4RkU3RkIxOEQKKzMwMTlBRjhGMzU1QTIxMDFGNTEyOTksIDY3NEQ0RjgwRDFFNkU2MDA2NjBGRThDNzQ1QzM1MTM3LCA4MTEzRTlGRUZFRTY3QkZBMUM1Rjg0REEzN0I4NUFDNAorOTA0RDBFQURBMDBFNjMwNURGMzdDQiwgQTJFMzI5OEY1QjhENUJBNDA4RkJENTlBMEJDRjIxRTcsIEUxOURFQTA2QTdDQjI1MTM2NzJFRUMwOTc0NzMxMUEwCisxQjBFNzJDMDhFMDJCMjkxMTlEQTc2MSwgODJENDA1NDEwMUQyNjBBRjU5QkM2QjM0RDlGN0VGMCwgNDRCMjY3ODI3OERCNkUxOUQ2RDdGNjc5QzY0RTJBODMKKzUxMkI1ODQxQUEwODE3QjM0RDhGNjIzLCA3RkYyMTZERUJCMDA1RDdENTNFOEZEODNDQzBCNzM5OSwgRTMyNkUwRTE1NkZGMjZGRTk2RUIzRDEzOTg0OUMxODcKK0YzODIwOEM0RkUxODQ3MTlFOEFFMjY5LCA5OEE2MTREQkQ5MkNBRDVEMTdBMEE1MUJCQTY2NTFDLCA2MTY4QzQ2NTkyQzA3QkFGNzk0QzIwMTg0ODNERjRFMAorMkRBODYxQTRFRkE0OEQ1NERCQTBBNzNCLCBFMTVBRTE1MUNGRkZGN0M5QkFCMDZDMEM0RTAyMTg5QSwgNEZENTdBNjkzNzI4QjU4NTFCOTYxNzZCRThBMDIwQ0EKKzg4RjkyNEVFQ0VFREE3RkU5MkUxRjVCMSwgNjI2QUQyNzc0OTgzMTlDRUFCNTgwQzNEQUQ2MTEzNjQsIEQ2MzVBNTREMzEzQ0EwMUFFNTY0RDE1MDkwRThEREVCCisxOUFFQjZFQ0M2Q0M4RjdGQkI4QTVFMTEzLCBGQkI4NDFEMDg3MTZGMzkxMDVGMEM2QTBFNkI0NEQzNCwgQjIzODQ4OTU4Q0U1NTczRDVFNjFENzdBRTY1QUZCQTUKKzREMEMyNEM2NTQ2NUFFN0YzMjlGMUEzMzksIEVENkE0RUM2MDg4NzJFRERGMERDQ0ZBQjk4Q0FFRUQwLCAzODBEOEVCN0RGRDI3NDU5NjczMTg5RkQwOTg1ODU3QworRTcyNDZFNTJGRDMxMEI3RDk3REQ0RTlBQiwgQ0Q3MTNBNkZBNjVDNERFQ0IyRTkxOUQ4MUZBMjZFRTMsIDdDNzZERTc0MzkxNkJGRDQ0ODIzRjIxQzk3RkU2RjE3CisyQjU2RDRBRjhGNzkzMjI3OEM3OTdFQkQwMSwgMTI5RjVGNDBCNzAxNUNBMzE4MkU1NkRCNUJCOTQ1MjcsIEI1NDczODY5NDJEQzUzQjk0MEFCQjRENzEwQzU3M0IKKzgyMDQ3RTBFQUU2Qjk2NzZBNTZDN0MzNzAzLCBENjFGRTQ0M0U4NzY4QjRBN0M3NUM1MURGQzc5QjNDMSwgM0Q0RUIxQUEwNjJENTU3NzJBNTRGQTQwODI2Mjk0MDIKKzE4NjBEN0EyQzBCNDJDMzYzRjA0NTc0QTUwOSwgQjY1QjU0MjRCNDkxNjdGQUY0OUY0NUQwRjk1RTZCRjUsIEY1QjM0NzdDMzkxQjRBMERGOTJCNUY1NEE2MzMyMjUKKzQ5MjI4NkU4NDIxQzg0QTJCRDBEMDVERUYxQiwgOURBNDQwNTFCN0Y5MzlCQkQ1QTREMDE1NkFCMjY5NzUsIDlFOUE3N0VBMjdDNEI2MjgxQTA0QzJFOEIyMEMyNDQwCitEQjY3OTRCOEM2NTU4REU4MzcyNzExOUNENTEsIDRDNkY2N0I0MThGQjVFNEUzNTREQ0I2MjJGNTU4OTMsIDlDRTdFNDI0OTE0OEE1NEVGOUY3NUEyM0JGRjdFMTYzCisyOTIzNkJFMkE1MzAwQTlCOEE1NzUzNEQ2N0YzLCA4NEZCREU0NjFBQkZCNEM0N0Q5RjlFRjYwNzM5MDExMywgMkRCOUVEOTE2NDdDMEJCOTg5ODVCRkYwQkM2NTJDOTQKKzdCNkE0M0E3RUY5MDFGRDI5RjA1RjlFODM3RDksIDExMUE0MjU2OTlBOTVDRDZFNkNGQzhCMkRFNzk4MkE4LCBERTNDMjVFQjg1OEZGNDZDRkNENzU1QzQ2NUVFMEVBNworMTcyM0VDQUY3Q0VCMDVGNzdERDExRURCOEE3OEIsIDQxOEREREY2NDU1MjQyREM4RTNDRjcwNkY3MzU3QTMxLCA5ODc0RUZEOUI3ODFFNzJENkRFQTUwOTA3RTA5RjlGNQorNDU2QkM2MEU3NkMxMTFFNjc5NzM1QzkyOUY2QTEsIDI0QjFCMTU4RUI4Mzg3NTJFQjdFRTgyNjYxOTQyRDZCLCBENjMwQjA2NTU4RDVDODA0MjAzMjI5RDIzQ0I5N0IxQgorRDA0MzUyMkI2NDQzMzVCMzZDNUExNUI3REUzRTMsIEFBNjJDNTFBMTZENzRENTcyRTA1RDcyNDY1QTlFQUU4LCBCQTU0NkVGNDNDODQzMkREMTEyRjZGM0YzMzQ4NEZBNgorMjcwQzlGNjgyMkNDOUExMUE0NTBFNDEyNzlBQkE5LCBCMTdENUE2M0QzRTUwRTA3NTlGQUNFMTcxMzlGNEM5QiwgNTlGMEQwOTZEMjNBNzJCQ0YzOTkwRERERjlCMTM1RgorNzUyNURFMzg2ODY1Q0UzNEVDRjJBQzM3NkQwMkZCLCBDMzk0QTg1RERERjNFOERGNUE3ODRDQzJEOTRCODdCNywgNEI4MTJBRUM0OERDRDFBODg1NjUyMjg2MkNFMTFGRUQKKzE1RjcxOUFBOTM5MzE2QTlFQzZEODA0QTY0NzA4RjEsIERBNTRENTFDMzVGQkY1RDU1Q0UxNkM1RDM1NTFBNjRGLCBCNUI0NkUzODU0MUZBN0Q0RThCMzAwRjNFQ0Y0NjI5OQorNDFFNTRDRkZCQUI5NDNGREM1NDg4MERGMkQ1MUFEMywgRDUyRjdFNDM3MUU3MDY2OTQ3OTk1OUU2NzQyNkYwOTEsIEFBMDAxQjFFNzcxNEQwRTJCNkRFODNBODM5Q0YzMDgzCitDNUFGRTZGRjMwMkJDQkY5NEZEOTgyOUQ4N0Y1MDc5LCA4MUM4N0Q0NEExMTI2NzZDMTI5RjdGMEE4QUIyRkMyRSwgNzM0RTREODkwMkU2OEYzNDY1NUFENDI1REU5QzREOEYKKzI1MTBGQjRGRDkwODM2M0VCRUY4Qzg3RDg5N0RGMTZCLCA1NkNEMkFFRUQ3N0YwREI5MDE0MDJDMzJERkY0QzMyNSwgNEFDMjIzN0UxOURBMjlEMEYyODFCMkI0RjE4OTUzQTAKKzZGMzJGMUVGOEIxOEEyQkMzQ0VBNTk3ODlDNzlENDQxLCAzNTYyMTJDNTA3N0YxNzYyMEU2QTc4MUFGMjBDRDY1LCBENDVDNzM0NDlGNkI1RjdGMjcxREJEQ0IwOUFFOTBDMAorRUNDLTE2MAorMSwgNEE5NkI1Njg4RUY1NzMyODQ2NjQ2OTg5NjhDMzhCQjkxM0NCRkM4MiwgMjNBNjI4NTUzMTY4OTQ3RDU5RENDOTEyMDQyMzUxMzc3QUM1RkIzMgorMywgN0I3NkZGNTQxRUYzNjNGMkRGMTNERTE2NTBCRDQ4REFBOTU4QkM1OSwgQzkxNUNBNzkwRDhDODg3N0I1NUJFMDA3OUQxMjg1NEZGRTlGNkY1QQorOSwgMjUzOTNFNDhFMkI3QjVERjgxNDJDRjczMUUzRjAwNjY0RDkzQkJCLCBFNzVERTVERjc2MTg1QzBEMjMzRjIzQTJFN0I5NzNBOTU0Njk0MTU2CisxQiwgQTNFMzNBRUIxNkI4QjMwRjI4QkUwMEE1NEVEMUQxMjc4RUY3RTRDMywgRUEzMzFCQUJDMUY5Qzg1MENCNkZFMDBDNkU4RDU5NUEyRjBBNTI2QQorNTEsIDczNEYwRUMxMzRGQTUzRTU3M0JFMzE4MjhFQ0RDRkU5NjkyMzBGMTgsIEIzOTczNkUyRkU5QTc2Njk0N0NDOEYyMzY2MjdFNjU1MUM3NEYxQTMKK0YzLCBCNUM3MDk4N0YzODBDM0ExNDgyNDk5QjdFMzhERTEwOEU0OUIxQjcsIERBNzJFM0IwNjkzMzFBNENDQ0E2QzY3NzBDMUIwRTk1QkVEOEYzQkIKKzJEOSwgQTJEQ0VCNjNGMkRBMTZCOEFDRDY4QjZFRkZDQzczMEJDNzY3RDQwMCwgMjNENkRFRkY0QTBDMDg1RDYyMzYyN0QyOEU5OTFFRTI1RDVBRTc0NQorODhCLCBBMzNEOTgwRTREMUU2RUJERTg4ODM4MDY0NUIxRjgxQzI4MzQwRjYxLCA0N0Q4RDE4RDhENjQwMTA1Q0U3MzVEMDU3MEQxNkI1NzhGNzU1MkM0CisxOUExLCBCRDUyRTVDMjI5RkE1NzYzRTJGMDQ4NTgyNjcyRDc3OTk2MDk1MkQ0LCA4RUYxNzc5REE1QThBRUYyMjNFMEFFRUMxOURDMzE1RTE5QTM0MDJDCis0Q0UzLCBFN0Q0OTY0Njc2QzM5OTRDMDYxOTAzMDE1MkREMUU3MzkxNjZGMkU3LCAyMEU2QkM2NzhENEMzQzBCMDUxNDdBMkRFQjEyM0NENjU5MDI1Q0M3CitFNkE5LCA1RDBDMzNGRTY2RkQxREE1NkZBMzFFMEMxNTcwMjg2ODc1QzdBNUMzLCA5MTc3NzM2MTVDQTJFMURFMEI2QTdFMTRCQzVFRkE4QUI4Njk0N0ZBCisyQjNGQiwgREM3NTIwQUU4QTYwNEZCNUJBRkNCNDBCQUIxODU4MDNGNTAxMkQ4OSwgM0FDQjZFNkY0NTRERUVFODA5RDM2MTEzRkI5NDFBMzE5QzAwNDU5NQorODFCRjEsIDk2ODE5MTk5MkFFQTU1NzYzNUYzMzdGQTIzQ0Q4OERBMjRERUJGNEEsIEUzMDM1RTVFNUFGRkE3MDE5REI4OTlGQUY2NUZBRUNEMjc1N0VBNjAKKzE4NTNEMywgNkQyNzhCODQ2N0RBNDNCRjg0QjcyNjc1REVDODdFRDkxQTZENDg5MywgMkVCNTVDMUMzQUQxQzk4QzU1M0NDNkIyQ0I5OEU2Q0VGQzczQzhCNQorNDhGQjc5LCAzMUUwMTREMjc0MzBDRTk5RThGODkzMkYzNkQ5RkUxMzIxQzlBQzksIDRFQzRGRTJFRjI0QkQ0MjQ0Rjg3MkFBMjg2RUQzQkRDMTgyRUE0MTAKK0RBRjI2QiwgMjY5MTlENEUzREU5OTlDQThCRkE2RDAwRkE4RTk3QzQyRkFFQTg1LCAyREI4NDNGNzYwMzM2N0Y0QjFGMDdGNkI0NTQwM0E4Rjg4MzI0QkM3CisyOTBENzQxLCA0QjdEN0ZFM0ZCRjczQUYxOUNBMEVDMTNBN0YyMkI4RUEzMUNFN0RCLCBGODJEQzE0QjVFNTNDQzM1RTQyNzVCRjYzOURDMjFCNDlGMjRFQkJBCis3QjI4NUMzLCBGNDQ1OTAzRjgyNUVFQjVBM0JBQUQ2REQ1RTdCMzE5QjBFOUFCQzJCLCBDNUJBRUNDRkRFQTM0QjcwMzJCREEyOTMyREY0QzlBQzEwQ0NCNEI0CisxNzE3OTE0OSwgNDE4M0I1RjkzOEZCRjVGMERDOEE5NTcwNDA5NkRCNTkzMUE1RDYyNywgMkQ3RTQyOTQ5Qzc3MDNCQjAxNDlGRjk1ODE1RjJERkFBQkI2QTczRQorNDU0NkIzREIsIDY3RUVDQTJBMjQ0OEE0MkZCNTBGNjMyMUYzQUI0QzA2RTNEMTBEQSwgRDJERTFFRkU4MEEyOUY0NjBGN0Y3QjJERkJERDkzQTNCODdCQzFGQQorQ0ZENDFCOTEsIDMwNkQ1RkY5MEJDNTdBRTdCMzQ3RTg5MzhGQkFDRDVFOEMzQ0I0RUQsIDM4Nzc0NzRFQUJDNUI4OEQ1MjlFQTk1NTBBM0VCNDQ1QTRGRTAxRjgKKzI2RjdDNTJCMywgMzBERTZFMkE0MzcwNjkzQkQ5RkE3RDhBNjAwRUE1RTZENzU5NDNDMSwgQzI4OEE0ODg1N0ZBMkU4RjY3N0RFRUQ0NEExREM1QjE2NzcwODI4NworNzRFNzRGODE5LCA3MUU3OTZGRjY2OTAyM0M3MTRBMEE1MjE1RDdERTI0OUI5NkU0Q0JBLCAxRDVBRTE2MDAwRkZBOEZDODQ4NTUyRTkzMEU5RDAwRTJEQ0ZDNENDCisxNUVCNUVFODRCLCBGOEE4NzgxRDhGMDg0NEJBMEY2ODkxODRGRjU2QUZENTNEODc2NTU3LCA4NDBFNzc1QzQ5NDczOEU0OUQzQUU1RDBBQjdCRjZGMjVGNTBGMzg1Cis0MUMyMUNCOEUxLCA0OEI1RjMxM0YyM0UzMUE3MkQ2MTMzN0U1NjIwMzg5MkZCRDRBRTY4LCBCQUM3QTQ5OTg2RTA2MDg4QTYyRkUxQUMwN0NBMkI2N0NCQUZCRUM3CitDNTQ2NTYyQUEzLCA3M0NCOEQ1QTVDMjk0MUM2MzZCNUQ3RTlFQzY5QzEwMTU5ODIxNTRBLCBCQ0I4MTk3NkYwQ0Y0RjlFNTU4ODdFRTRBRTdDQjUyNzQ5NDRGMjhFCisyNEZEMzAyN0ZFOSwgQkY5MEUwMkFGREExRUJDQzM0QjAyRDY5NUNCMzYwQjE1MEVERTNFOSwgNzM2MUQ2QkQ0Njc2N0YyNjA1OTk1QTc0NDgxNTQ1NDFBQkYzQTk5NgorNkVGNzkwNzdGQkIsIDkzRjRCNjAxRDgxOEE0QzExMDI1Nzc5QkFDODA5MTNCQTA4NTg4MDEsIEMzMUE2NERGMkU2MDA5MDE2NzRBQTEyM0E3OTIxNjhFMTdBRkU5MAorMTRDRTZCMTY3RjMxLCBEN0Q4NTdCNDRDNTNCQkNCNUMzQzg4OEUxNUZBMkZCMzE0NTFFMjhGLCAyRTBGMDA5MzFGQzVEQ0IwMDQ5RkNDNzhCRDJGNEIyNTkzRkE4RjZCCiszRTZCNDE0MzdEOTMsIEEyOUIzRkZCNDAxRkQ3NkE0NURDRDhGNUU4N0MyMTMzQzM2RkQxRUQsIDE4ODNFRTg5MURDMDlBOTE0QUIwQjQ1NkQ3ODg3NkI4OUY0NTUyNjYKK0JCNDFDM0NBNzhCOSwgOUZDOEM4NkE3RTlGMjk1OEM4Q0Q5NTdDODlCNDE0QTc1OTU4Njk1NCwgQTc2QzE1NzZBRUQzMDVDOTQ5MUI3RUMwNzVEM0M3NzY3Nzc3QzM3QQorMjMxQzU0QjVGNkEyQiwgNkQzNDhFN0M0QTMxOUJCMDBEQUE2NjYxNUMxMTM5NzZBRkRCRjY2LCBCQzZEQTRGOTU0NTYxN0REMkY4MDBFNzRCMjIxNDJFQkQyREEyRkRBCis2OTU0RkUyMUUzRTgxLCBEREM2OEY5ODNBMEQ5RURBNzBFMEI5RTYxOUQ3MUE4RjQzN0I2Mjc2LCA3MjY2NDI2Njg5NzkzMDAxNjFGNDhCQTk2OTZBQkM4NTVCQjRCNzk1CisxM0JGRUZBNjVBQkI4MywgRjYzODM5OUE4OTA0QUYwNTlCNDZBNkI4QjhCOENCREFGNTk4RDlDNywgNkYyNjdCNkMyODdERjYxNUY1NDkxNURDOTIyRUU0QUU0MTEyNkQ5MworM0IzRkNFRjMxMDMyODksIEZEMTM2Njc0QzVBOUU1OTA5RkY5MDM5N0ExNjBFQjIyMzI5ODNCNDQsIDUxNDNFMTk4QzBCOUUzRjcwMjE1RTBBRjg0MUJDODQxRjdGN0Y2QjMKK0IxQkY2Q0Q5MzA5NzlCLCA0ODM4MzJDMjFBMzU2OUU4RjU4QUQ4RkNBRUE4NEY3RkM0NTU5NjYzLCA1Q0RBQTdGQzEyOEU4NUFDNUJFRkJEOUQ5NEFFQUFDNjgxRjdBQzJBCisyMTUzRTQ2OEI5MUM2RDEsIDk5MThERUNGMDE2MzBFRUFBNUIyMjZBQjZBRDU3N0E0RDkwNDRGOEQsIEY1N0FEMDE2MjU2OUNCNzIyQzg1REU3Q0Y5ODQ2NkZGNEFCMEUwOUYKKzYzRkJBRDNBMkI1NTQ3MywgNTZBRURGQzlERTUyOTNGQTNGQTYyNUQ2RDhGNUI1NEY5NTc1NDE2MCwgMjZEMzY2MDI4NjIxODE1ODYyRUMzQ0RFRENBN0JEMDk2NTQ2MDVFMgorMTJCRjMwN0FFODFGRkQ1OSwgRDcwNzc3RTlGMjM4MTQyOTI1MDI3OUZGQTA5QTI3QTFBQTdFRTg2NiwgRkRGMkZGMUQzNjlFRDEwMDNDMUJCM0FFRTNGNUY2REVBQUJDMEU1NworMzgzRDkxNzBCODVGRjgwQiwgQkQzQTE5RERGMTZEOTI4MUI4RjVBMzVFMDQ1ODIyOTQ4MUFCQzJBLCBCMzVFM0RFNzEzMDM3MDJBMUFBOEY5QjQ4NDVFM0I2NjBFRjNGNEY3CitBOEI4QjQ1MjI5MUZFODIxLCA5RDc2NTlDNkIxN0QxN0RGNTEwNERCMjAyMkJDMDU5RDg1MTcwRjgyLCBERUI5QTlCNzg0RTE0RUNFQTE0MTE2NDQzQzJGQzZENDZGNzIzRAorMUZBMkExQ0Y2N0I1RkI4NjMsIEMxMjJCQkMyMDM0RTMwNTg4RDEwNjM3NUMwOTgwMDZGODBEQkFBRkMsIEMzMTU2N0EyODdEMENGMERGMTkwNENEQTdCMjM5RURGNERFRjgzRkQKKzVFRTdFNTZFMzcyMUYyOTI5LCAxQTExODE4Mjk3NDRCMkQwREJBQTIzNTcwQzE0NTBCREFFNkE5Mzg4LCAyM0UyOTVBMzgyRThDQjJDRjY4MjJCNzg0MDczNDcxMjQyN0ZCRDYwCisxMUNCN0IwNEFBNTY1RDdCN0IsIENDQUM5MjE5MjRFNEUyQ0U3M0IxMzI4QkI2NUQxQkVCMTExRDA1RjksIEI2RENGMTM4NTc1Njk5QjI0RTY1RjhFNDUwOURFMzY1NkFCNjcwRAorMzU2MjcxMERGRjAzMTg3MjcxLCA0NkNBRTNGODY0MTE0ODYyMERBQzk3QjIyNjkwODZFMTAzNDUwOENELCBDNDY2RkI5N0QyQjYzQTg2NjA3OUM0RUJFNUZCNjE0N0M0RDQxQzg0CitBMDI3NTMyOUZEMDk0OTU3NTMsIEMzRDA1QTAyQzA5NkUxOUY2QjgyM0QzOTlGMTc3RjMzQjY2NjE0MDQsIDE5RUIxQ0UyQjEyM0Y4QUYzNDJBNzBEQkE2QkYxQjA5MDRERkEyNzcKKzFFMDc1Rjk3REY3MUJEQzA1RjksIDM1NUYxMEY1MjZERTNEQjc5QTI4QzRBRTRBQjgzQzkxRjE2REUyREEsIEQ5M0E4RjIyOTI4NDdCQTIwQzU0RTlENEZFMzc2QkVDOUJEQkFFRDYKKzVBMTYxRUM3OUU1NTM5NDExRUIsIDY5RTYxN0I1RTQwM0FCMTVCMTA5MzIwMDNBQTRDNzU0RkQ1ODU4ODgsIDYxOTlCOTdFQjBCNjM0REY0QjUxOTg3REU4NzMwRjdFMzY0Q0M0NkIKKzEwRTQyNUM1NkRBRkZBQkMzNUMxLCBGMjMwQzc2OTc2RTU3Q0YxMERDRTg4NEQxMDcxM0NBRjhCNDY5NTVDLCA4MEMxQTE1MjExQjFGMDY5MTlENTZDQzg2MzYwQUZGMzUyMkFFQkZGCiszMkFDNzE1MDQ5MEZGMDM0QTE0MywgNTE3QUJFMjIyNDU1NDhCMThDQjdDQTU0MTg1MkZCNDY4MkM5MkI1NCwgN0FENUFEN0U5MUY4QTI4RDg0MkYzOEMxMjc3NTUzRDE0QzFEOEVDNAorOTgwNTUzRjBEQjJGRDA5REUzQzksIDRBRDc3OEY3QUY3MDMyMzhBOTNFQUE3NjFCMzA1QUMzNjAwOEFBQjksIDI5NkM3RDQwRDA3QzM3RDUxOTBCOUZEQjU1QUJFQjgzNjNENTk4REUKKzFDODBGRkJEMjkxOEY3MUQ5QUI1QiwgMzQ1ODlBNEY5NzRFMjc3MkI1ODFGOEIxRjkyOTJCNEEzMjIxQTM5MiwgOTVGNjM0QzAzRjM0NjFDODhDMjU4QjZDMzQ5NkNERjU3Q0E5NDg1NQorNTU4MkZGMzc3QjRBRTU1OEQwMjExLCBCQTFGQzQ4RTk1NTg0RjA4ODFGMTE3QzUyRTlCODRENzBBREI4Q0IyLCBFMzRCMDUxNjFEMDBERTFCOTIzNTUzOEI0RTY0MDJGOEQ2MkREMTNFCisxMDA4OEZEQTY3MUUwQjAwQTcwNjMzLCA5RUUzRDc0OUVBMDhBNERDRjNBN0FCNTFDMTVBOEVDRjhGNDFCMDE2LCAzQTIxRTk1NjIwQUFCNUY4QjgyOUM0OTQ4MTBFOTIyNkFBNzgwNjBGCiszMDE5QUY4RjM1NUEyMTAxRjUxMjk5LCA4NjEzNTc3N0I1MDExOUNFQTRDNTRBNzY4QjRENTVDMTRCNkVFQUZFLCBFODQ4QjJGMDA3MkRCMUU1N0JCMkJCNDFGREJFRUY2MTM0MTAxOTE4Cis5MDREMEVBREEwMEU2MzA1REYzN0NCLCBCM0VGMjAzNUFGOUE4RkY2QTFENTQxRDBGMUM2RDU2RjI1MDUxQzM1LCA3MkRGMzVGNTBFNDU0MEM4MEUwN0FENUQ0OUU5RjE4MkNFRjc4QUY1CisxQjBFNzJDMDhFMDJCMjkxMTlEQTc2MSwgNkY4RTlFOTQ1NjgwNURCMEM1OEVDQzZENTk2NzY2QTFBMjQ0RjYwQiwgM0VEQ0RCQ0ZBQ0E3QTlENUExMzE5RThBRDQyOUEzMjBERjQzNTRDCis1MTJCNTg0MUFBMDgxN0IzNEQ4RjYyMywgOTNGQzJGMjIxNjVFOEEyMjQzOUM5QUM0OUQwQkVDRTFFMkJCODcxNiwgNzUxMzE0NDA0RUUxMDkxQTA5ODY0NzkxRkNDOTE3ODBGOTQwNTdFRgorRjM4MjA4QzRGRTE4NDcxOUU4QUUyNjksIEQzNDFGNTAxOEQ2QUE0NUMzMURFRTUzNDFEMDlFM0UwNDgxNEI1NkEsIDdBM0ZEOENFRDgyQzdEQ0JENDQ0QzJFMDc2OTFCMTcxMUM5NkM1NkUKKzJEQTg2MUE0RUZBNDhENTREQkEwQTczQiwgODk2MEJENENEQTg4NTYxREE0MTU1NTQyRkNFOTk1RkJERUVEREYyMywgNzk3MzEyQjdCMkI1RTI5Mjc5QTMyNzMxOTJFMEEwRTE0OEJCQ0I4RQorODhGOTI0RUVDRUVEQTdGRTkyRTFGNUIxLCA1OTM5NkJEQ0RBOTY1RDE1RjFGQzBCRjAyMjJGMEZDODZCMkMzMDBELCBENDI4M0QwM0M3OEM3MTc0NDVBQzM2MzI4QzFBNjQ2OTNGQzdCREI0CisxOUFFQjZFQ0M2Q0M4RjdGQkI4QTVFMTEzLCA0MEEwMDc3NjI4MkQzQzM5M0JCQzFERTdDOUQxQzFGQkJERUNGNDQ4LCA1MTJERjMyOEFBRkVFMDk5RTg4OUNGQjJDNkZFOTkyNzAwNUZENEVCCis0RDBDMjRDNjU0NjVBRTdGMzI5RjFBMzM5LCBERTY1Q0E5QTU2NkQ4OUM2Nzg4NjU1RjFFNDUwMzI0RDU1NEI4NERGLCBCRjUwOEU4QjRGRUEyQjAxNUU5NkMwM0ZCRTMxMjY4QTZFRDU5MUFGCitFNzI0NkU1MkZEMzEwQjdEOTdERDRFOUFCLCAxRjY4MDQ5MUVGNjU3QTVGQzI0NkZCQjIwMkEwMDAyOTIzMzI1NzMzLCA1NTUzQ0M2OTgyNDZDOUI3ODYxNzlCQzUwMzdDOUZCMDE3MTM4MTRGCisyQjU2RDRBRjhGNzkzMjI3OEM3OTdFQkQwMSwgRjMzMzM0NEM5RjQxOTU2OURFQTZDQjIyOEQ4OTM4Q0M2OUZCODFFNiwgNUQxOTNDQzVDNUE4MzBBMTJBQzRGNkM5MUZBNjI1M0U5MTI2N0IxNQorODIwNDdFMEVBRTZCOTY3NkE1NkM3QzM3MDMsIEZENjYyMzc2OEEyMzczQjZCQ0M2RDg0NTY5ODE4RDMzMkUyN0IxRUMsIDcyQzM5MjkxODU5RTBBRDEyMTdEMjNBMzRCNjYyQzQ2NDIxMTMwMjQKKzE4NjBEN0EyQzBCNDJDMzYzRjA0NTc0QTUwOSwgOTU3NjFBRDJCRDUxREM1ODdBNDE4QUNEQTE2MDc2QTREQzg0NEUyMiwgRUU1RDIxNURERjdGRTlGNkVBMjc3NDg0NTA0MUVEQjJENjFDNkU4NQorNDkyMjg2RTg0MjFDODRBMkJEMEQwNURFRjFCLCA0QTNDNjA3N0Q3NkQwOTE0OEIwNjExQzg3NDZFQzU2RDBERURDMDMxLCBCQ0EzQkMyMTc3Rjc3NENGM0IxNUI2RTIxMjg5ODZGRUI3ODkzMjJDCitEQjY3OTRCOEM2NTU4REU4MzcyNzExOUNENTEsIDJBM0M2QUQ4MTAyOTk3QUJCMzcyRDlEOUM5N0M0RTRFQzhCQUZGOTYsIEUxNTJDNEQ1QzU5NDA4OEIyNzhFMkE5MzVFRkNBQkUxRTdCMUZENkMKKzI5MjM2QkUyQTUzMDBBOUI4QTU3NTM0RDY3RjMsIEFCMDk3RTVBQ0IwMkU0NDU5MDMwODk1QzZFMzU0NDg0RURGMjUxRjEsIEU2RkUzQkM1MDcyNDQxNjlEQzdDQUI3REUzMkI2QUU5MkFBMUE2QkIKKzdCNkE0M0E3RUY5MDFGRDI5RjA1RjlFODM3RDksIDEyOUQ3QkU5QzRFQzg5MTRCNDFBMkM3NjZENDc2ODc5RDZGNzZCRTQsIDU4Nzk2MjQ0M0I4RTI5NUIxQ0I4OTNFNEVEMjgxNTU4QThDOEVGQkMKKzE3MjNFQ0FGN0NFQjA1Rjc3REQxMUVEQjhBNzhCLCAxQzk2RDIxMjE4RjI4NTFGNDUzRDUyODcxNTU3QjAzN0IzNTEyRTBBLCBGNkI5Nzc3OTFFMUM4M0EzNEIzRURFNjdDQUQ3Qjc1MUNEMEMwRTkyCis0NTZCQzYwRTc2QzExMUU2Nzk3MzVDOTI5RjZBMSwgRUZCRjA3NUEzRkRDRjExQzZGQzhDM0VEQUVBQjI3NjhBNkQzMDczMSwgNkI3MjlERkE1NzI5NDc2NTQ0NzcwRjUwRjkxNUQ0NThCNjc4MzQxQworRDA0MzUyMkI2NDQzMzVCMzZDNUExNUI3REUzRTMsIDM2QkREOUZDNDVBQjc3QjA2Q0UyMTczQjhCNzkzNDI3RDEwOEVGODEsIEI5NjYxMkFBQ0ZCNEM0NERGNzRCNkUyNkIxMjAzOEJGREI3QUQ2OUYKKzI3MEM5RjY4MjJDQzlBMTFBNDUwRTQxMjc5QUJBOSwgRkM0RDE1RkVFQzExQTBFRjU5NjIyQjdEMjg5NTk3MDU1MjM0NUE1NiwgMUFCMjA1NzNGMTIzQzE0OUQ0ODdFM0IxMzM2OTkzRDNFRjVBRDFDQworNzUyNURFMzg2ODY1Q0UzNEVDRjJBQzM3NkQwMkZCLCBDNDQzMEE4MzU3MkExQkRDOThDQjFFNDU3NzgxQTQzQzM1MDUwQjJBLCBDM0RFMDk2NzQ1RTgzMUU2Q0ZDN0VCQjk4Qjc0NzYwMkM5NjA5NkNCCisxNUY3MTlBQTkzOTMxNkE5RUM2RDgwNEE2NDcwOEYxLCBBRDc4Rjg5MDUxNUI0MzZCN0JBRTZBMDgzQjJERDVFMUMxRjdCNzBFLCA0RTg0OUMyMjFBNjFFNUQ0NkRBMjNFM0IyRjc0QjhCOEVFMTRFMDc1Cis0MUU1NENGRkJBQjk0M0ZEQzU0ODgwREYyRDUxQUQzLCBBNTNCQjM5REJFNjNFQTVCQjQ5RDVEODU5OTE2NjZDMzQ5MENBRDAyLCA4ODQ3OUVEMDAwRjYxRTI4NDUwRTFBRjFFMEY2MkY1QUQxRTNGOTA1CitDNUFGRTZGRjMwMkJDQkY5NEZEOTgyOUQ4N0Y1MDc5LCBBNjUzRjQyNTg5RjhCMjZGMDMwNjdGQkExRDNGMjAwODI2MzJDRjAsIDg2MjVCODZEOTEyRDE3N0UxMzlFNEEwRkVBQkI2OERCMjhFOEQ4NEEKKzI1MTBGQjRGRDkwODM2M0VCRUY4Qzg3RDg5N0RGMTZCLCA2QTVGMkM4MUEzQkE4NTQzODU4RUNDOTdGQkQ5OEJCMDk5MEI4NTFCLCAyMEYzNzc3Njk0NTkyRjFGRkZGQzA1NUI3MTY5MTlDMUVBNjI1Mzg1Cis2RjMyRjFFRjhCMThBMkJDM0NFQTU5Nzg5Qzc5RDQ0MSwgMUQ3QTJGQUI0MUE1Q0YxREIzQTIzNUUyNjFDNUUzRDJCNEY5MkVGNCwgQTFCQkMwRTY3M0ZFQkQ0RDVGNDA5OTA3RkJFNDA0QjQxNDM1Mzk1RQorMTREOThENUNFQTE0OUU4MzRCNkJGMEM2OUQ1NkQ3Q0MzLCAyRjg4NUE3QTM0NUI5OUUwMzE5MkE2RUVENUY5NjkzNDdEQTgwNUVDLCA2MjNCOUQxQTlBOTAxMkRDREI5QkE2ODk1OEE0N0VDRjRDM0NEMEFBCiszRThDQTgxNkJFM0REQjg5RTI0M0QyNTNEODA0ODc2NDksIEFDQTVBMzgyQzcwQUNGNjE5OTcxNkEzNkZCOTY2NkY3MUY4REZGNTcsIDYyQkE5NkRDREM0ODA5RTcxQzY1OTIyOEU2Q0ExRkU4MDU5N0I4QUYKK0JCQTVGODQ0M0FCOTkyOURBNkNCNzZGQjg4MEQ5NjJEQiwgNkVDRkU3RTY5NUYxN0QwNDhDNTE2QzM1NDU4Q0EzOTY3NTQxNjUxQywgMTAzNkZEOERCMjZBNzQzQjdEQjQ5OUY0MkM0MzAxRjA3OUU1RDU2NworMjMyRjFFOENDQjAyQ0I3RDhGNDYyNjRGMjk4MjhDMjg5MSwgNDRFMEFGN0EwNEZFMzk1N0M2MDgxNDZDRjE0QjQyNzVDM0Q3QjY2NiwgMzhBMDcxNDI1MkI5QjdEM0E0NEVFQUU1MDA4NkRBMDZBOTM4ODk5OQorNjk4RDVCQTY2MTA4NjI3OEFERDI3MkVEN0M4N0E0NzlCMywgNzA4OEQ5NzM2ODBBNTNFOTQ3OURCRkZBNDY3QTIxMTFCQ0QzQkUwRiwgN0Q1RDA1OTk0REE1MjlFOEUwMDRENjcxRTc4OEZGM0JGODg4Q0Q3QworMTNDQTgxMkYzMjMxOTI3NkEwOTc3NThDODc1OTZFRDZEMTksIEU0QTlDMzIyNUMxQzJFQjc2Q0M1OENEQzZFODk0OTczRDU4RDcwREQsIEE3QjkyQzg3OTFDNUU1QkFCQUExNzQ2NjU2NEE3MjgxRjkyMjJGMzYKKzNCNUY4MzhEOTY5NEI3NjNFMUM2NjBBNTk2MEM0Qzg0NzRCLCA1NzM5NzEzREJENDcxNjdEM0UzMkNENzlCNDdBNEE2RTI3NUFGMDc4LCA1REI3M0VFNkRBOEQ0OTc5RkQ5NEEyODFENjMzQjQzQUVDQTZFOUQKK0IyMUU4QUE4QzNCRTI2MkJBNTUzMjFGMEMyMjRFNThENUUxLCBDRjk2REM0MEU0QjY5Q0Q4Qzc5MEZCRURDMEJCMjU5NTJDOURFNUVDLCAzNjY4ODFFREUzNzA1MTBBRTFFODI1MzIxNDdDRDhFMDE3NTJFOEM1CisyMTY1QjlGRkE0QjNBNzI4MkVGRjk2NUQyNDY2RUIwQTgxQTMsIENDQjA0M0I2MDhEQkM2Mzc2MEI1NjRDQTUwNjU0RkI4NjgxN0VGQzUsIEEwQ0QzOENFNTJERTJGMjgzQ0QyQTdDQTU1OEVEOUJBMDFDQjU2RjMKKzY0MzEyREZFRUUxQUY1Nzg4Q0ZFQzMxNzZEMzRDMTFGODRFOSwgOUZBMjFBMjFGQUVGQkZCNkUxMjc3NUY5OTQ5QUJFMjQ0MjkxMTBGQSwgRUZBRTQxMkZENDcyRDJBMDVFRDNGNDY5MzNCM0VEQ0ZCMjAzRTcyMworMTJDOTM4OUZDQ0E1MEUwNjlBNkZDNDk0NjQ3OUU0MzVFOEVCQiwgNUQ4NzYzMzlFNzE3MDA4NUEzQTc0ODQ4RUE3MEI2MEI2NTg4QkQ3MSwgNjVBN0RBNUMwOUY2NDVCRkUxMENFNTJDRDAwRjYzQjAwMzUwMzg4RAorMzg1QkE5REY2NUVGMkExM0NGNEY0REJEMkQ2REFDQTFCQUMzMSwgQzdFRjRDRjU3RjBCRTQwMTQ2QjJENUY2QjE0NDQzQjZEOTYxNzFFNSwgQzdCMEJGMDU1ODQzM0ZCRTEwMThGQTI4QTgwQjM4NDU5NkE2QjlCRQorQTkxMkZEOUUzMUNEN0UzQjZERURFOTM3ODg0OTA1RTUzMDQ5MywgNTc4NjM5MDZGNzYwRUI3NDcyRkRCQkFBN0FCOTIyRURFOTlBMzBDRCwgNDcwRUVFMzU3NzU3OTdGRDdENzU2MzA2MDExNzg0RDREMUE5NEIzRgorMUZCMzhGOERBOTU2ODdBQjI0OUM5QkJBNjk4REIxMUFGOTBEQjksIDRFRTE5ODFENTVBNzdGRkZDMzg0NEM3REZCODdGRkVCMzNEMjI4N0YsIDQxMUQ3QTI5NDc5QTU2NUJFRkM1NkY1RkQyOTUyREFEQkZFM0I3MzYKKzVGMUFBRUE4RkMwMzk3MDE2REQ1RDMyRjNDQTkxMzUwRUIyOTJCLCBEQTcwNkU0NDA5NDQ3RjQxRDM2NjM0QTg5REVBREQ0NTAwMzFFQjA3LCAyNUU2NkE0NzY2ODhDNDk5Q0UzNTQ1MDBCNjlBQkY3RTU0QzgzQ0FBCisxMUQ1MDBCRkFGNDBBQzUwNDQ5ODE3OThEQjVGQjM5RjJDMTdCODEsIDNCNDkyRTAzNzhEOEJBQzI3RkNEQUZFQjUzQjZEQjhFODhBNjc4RUMsIEJBM0E0NTk0NzQxOEU1MUEwOUI1RkIxNkM4MDhCNEEyNTYxMTJFNTEKKzM1N0YwMjNGMERDMjA0RjBDREM4NDZDQTkyMUYxQUREODQ0NzI4MywgMjAxRDZEQjQ1RUExRjIyRTdBRkQ2RDFFMjI2RjAyODEyM0VFOUVDOSwgRTY5NDIzRDVEODdGRkJGMTAxQkE3Qzg1Q0MzRDJGNjNDRDAxM0JCMQorQTA3RDA2QkQyOTQ2MEVEMjY5NThENDVGQjY1RDUwOTg4Q0Q1Nzg5LCBCMjNFMDgyRkVGM0M4N0Y2QzQzMUZBNDJDQUIyRTcwRTZCMjIxNjVBLCBBQUYxMzcwRkNEMzZBRkM3RUJCMTg4RUEzQ0FDMzZCNjE0M0M0MzI0CisxRTE3NzE0Mzc3QkQyMkM3NzNDMEE3RDFGMjMxN0YxQzlBNjgwNjlCLCAyQTgwODgyOUYxNzg5ODc2QjJGREUzNDQzODJFRTBCODY5MEMyQjAwLCAzMjczRkE4RDE4QTIzOURDODFGRTgyOTQzNTJDRDQwQTQwOEZFQ0ExCis1QTQ2NTNDQTY3Mzc2ODU2NUI0MUY3NzVENjk0N0Q1NUNGMzgxM0QxLCBERkEwMDhCOTE4Nzc4ODA3ODI5N0Y0QTlGQTAyMTkyQzRGQzBEQUUyLCBFRDA2MTREQUNGQ0YzNEYwMTI1RkRBNkY5RTdBRkY3QzVEQ0FDQ0I2CitFQ0MtMTkyCisxLCAxODhEQTgwRUIwMzA5MEY2N0NCRjIwRUI0M0ExODgwMEY0RkYwQUZEODJGRjEwMTIsIDcxOTJCOTVGRkM4REE3ODYzMTAxMUVENkIyNENERDU3M0Y5NzdBMTFFNzk0ODExCiszLCA3NkUzMkEyNTU3NTk5RTZFRENEMjgzMjAxRkIyQjlBQURGRDBEMzU5Q0JCMjYzREEsIDc4MkMzN0UzNzJCQTQ1MjBBQTYyRTBGRUQxMjFENDlFRjNCNTQzNjYwQ0ZEMDVGRAorOSwgODE4QTREMzA4QjFDQUJCNzRFOUU4RjJCQThEMjdDOUUxRDlEMzc1QUI5ODAzODhGLCAxRDFBQTVFMjA4RDg3Q0Q3QzI5MkY3Q0JCNDU3Q0RGMzBFQTU0MjE3NkM4RTczOQorMUIsIDFDMEE1NTg1NDkxNjJGRTdDNUQ3Mjc0QTczMEU5RjU4Q0U5NjBCQzk5NThEMzI4OCwgNjE4QUVFQ0Q3QzZENzk2RjBGQTlCQTMzMTI0OTBDREJGQTBGMzQ4OEYyRkNENTlBCis1MSwgNDZBRkY4NTgyN0M5MDY1MTMzQUQ3OUJDRjAzNzI4MjBDODE4ODBDNjQ1RjJEOTI4LCAxQjg5MTFENDRGMDZDRkYxNEI0MjIyRTE5QkNCREE1OTE5NEY5NzBGMzRBMTAzRTIKK0YzLCAxQzE0MkM5N0M2Q0RENUE4NzQ3NUUwNEZBRTJFODY3MDhFRENBQUEyRjMzRDk3RDAsIDY3NzkzNzI3QjYwRkJCMkU4RDQxNjNDMTMxRDJENzJGNjc3NDgyNzEwOUMwMkI2OQorMkQ5LCA2MTU3NDY1NzcwRDA4QjhFNTNGQjYwQUM1N0RENjhGODgxNjBGRDQ3NEI5QjAyQjIsIEJDRjY3Q0Y0MDAzQ0RFOTVCNTA3RUFGNEUwN0NENzEzQzJGN0E5RkIzMjAyQjQ5QworODhCLCA3NjdCMDBDMDlFMEQ1ODNDRUY0RjMwMUI3Mjc3Nzc2NzNFQUQyNDJGMjU5MzY5N0QsIDdDRjI1MTBENEZGNjA0QTc0OUZBMzkxOERDQjQ4NDA0NTVDRjdFNjhBQjI0NUEwRQorMTlBMSwgNUExNUI2MkNDNzRGQkRFQjkzMUYxMjcxQ0QzOENGOUYxRDg2MTMxMjEzMjQ4Njc3LCBCNjlCQ0Y3OEY5QkE3NkM0NTYwMUVGMjQ4NkMxNjZEMDRGMzQ0MTc4MDRFOTEzRUMKKzRDRTMsIEE1MUJDMjlCREZCMDk5M0ZFREU5MTkxNkQwNkQ2MDlGQzc0NEE4MTMwMzNCMkYyNiwgNkIwRDY2OUVBRDQ5NDUzMTVFOTI5ODkzNThBQkUzNjNBQ0NBOTBGRjA5QzI1MTIwCitFNkE5LCBGRjcxNDA0MEFBRERGOTZBOTQzODBFRDYzRkRCNEQ0MjA3RTlDOTQ2NjQ3MjRDNTcsIEE4QjFBOEIxOUYzMzlBQzY2MzkxOTg1MEJEREI4QTQzREVBQTA0Qzg2MTczNTk4NworMkIzRkIsIDM1RjgwREEyRTI0RTM1MjNGMUNGMTlCNDRBNUMzQjNBNThDOTZBRTE0NjQ2NDI5MywgN0U3QjdDNEFGRkNERDc4MUY2NDFGOUMyMzc2RTVFMjQxMjFDQ0IyQjk5NTc5MDEKKzgxQkYxLCBGMjlGNkY4NEFDQkYxRUVFMUE0QzNDRDRENjAwNkUwRUVCMEFFMEE5RUUwOEVFMkEsIDQzQ0IzMzBFMzE0Mzk0M0NCRkYxRjBFQjg4OTI1OEUxMjM1M0EyNzc3RjYxRkQ0QgorMTg1M0QzLCAyQUFERTczODgwNDNGRkRENEQ0RUNFMjZBREY2Qzg1RTU2NEFFNzExOUFENjAxRCwgQjAxMzZDRDU1QUY0REQ3NkMwOTAzNTgzMjRCMkQ0MDQ0RkU3ODUxOUFGRDI2MjdGCis0OEZCNzksIEFCRkZCNDI3QUYxOUMxNjE4OTM0QzRBQ0Y4MEE3M0QzMENEQ0IzRjU2NDczNjFCLCA1NzcwNTg5OTdEN0FGMjNGODhEMDM5QUU4RDE5NUUxQ0YyMEU5NEE5RTU1Q0ZFQkEKK0RBRjI2QiwgRTQ0Rjg5RjFGQjA0RkRCQzE5REFENTcwRDFFRjM1ODhFQjQ3Rjc5OUYzQjMxRjQwLCA0NzUwOUQ2QkY4RjdBMDcyMjU1RDQ4NTZCMDIxNTQzQUIxN0RERTBGMEVFQTA0NkIKKzI5MEQ3NDEsIDg1RTE4MEJDRjZCRTc3OTY5NEEyQzcxRDM5M0FGODA0M0E3QTc0RjA3Njc3ODI4MywgQjBEMjU0QzFFNjdCN0VENTdDNDg0N0FFREU3RjExMEZCRUIzMzcxMDY1MTczNTNGCis3QjI4NUMzLCBGMTVCOTI3MDE5OEY0QURCQ0ZGM0UzNzE5RjIwRjQ0RTlDMDc4NkVCRjUxMTZCQ0YsIEVGMTJEOTVFRkZFOEZBOUU0NTc0Qjk0OENDQjAwOUM1OUI4MzdCMjA2NUQ0RTc1NAorMTcxNzkxNDksIDc2RDgwMjhEMzVFMkI2NzYwRTQyNzA3ODFFMkNBRjUxMzEwNDMzQjBBN0E1MjVDNCwgRkMyOTY5Nzk1RUI0QkJDMjNCNDAyODQyQzRCQTcyM0QzNjFBQzA2NTk2NkM0OTI3Cis0NTQ2QjNEQiwgMTE1NTY5MzMzRjExMUExMkJFNTU1NjQ1MzY0NEYwMDk1NjdGNEM3QjQwQzU3MTJBLCA5NTc3NkVGRjQ3NDk2QkNFMjE1RTYwOEY1N0UyNzMxRkFDMjQ0NTY2Njg1NUJDRUQKK0NGRDQxQjkxLCAxODFCODA5N0JBNTY3N0NCM0EzQzNCQzk3N0FFREI4RTg2MURDNzM3NEQ1QzlEODIsIEY5NUVDQkQ3QjA5NTIzODBDMjFBMjE0Rjc1QTY5REZDNDg2RjIzMTZBN0EyQkFDQQorMjZGN0M1MkIzLCBCNDNBMTQ3Qzk3OTA4MEZEQzgzNjAwMzlGNDk4NUVBMzFGN0NFN0QwNDk0Nzg0NTAsIEZCNDY4N0REN0Q3NzM1OUM0OTcyMTZGQUU1MEY5NTNDMzgyODhGQUYyNzFCREE2OAorNzRFNzRGODE5LCBGMTYxOTFGRDAwMEVERkM2RjNEMEU5Qzc1RERDNTZFQ0MwMjU1QkQwODc0QjhCNDAsIEU2RkY4MUE0MzA0MDVCRjMxMTFBRTIxQjI4Njc5RDNGRTZCQ0U1NzBFQkIzRUQ2RgorMTVFQjVFRTg0QiwgRDg4MTkyMjE0RjBBMjVGQUJBRDEwRUM3QTRGN0ZFMEVBNkNEMzI4RDBFODE3ODRGLCBFOEQxMDMzMjMxNDA3N0ZGMjgzNzhDMEQ0MDRGREFFQjM1MDhCRjExQzAyNURCOUMKKzQxQzIxQ0I4RTEsIEQ3OTdBMDc3RkM0NEQxQTUzOThGQkNGNjQ4RkUzQ0Y5MjFFREMyM0E1OUM2QUE1NywgMTk3RUJBMDFGNkVCRjA1OEQ0RTE5QkJDRjM1OEVCQTUxMkRENEM0MDMwOTVGOTZBCitDNTQ2NTYyQUEzLCAxRUE5RkU4M0NEMzYyRjVBNjc1REFFNjcyRDEyMjlEMzdGQkQ1MDFDMERFQTcwMjEsIDVFQjY4NzRDODg1M0IwRkQxMDY2MkYzQjI1RkE5QTIxRjRBNjYzMTVFNzkwRkI4CisyNEZEMzAyN0ZFOSwgMUUzNjI4RDI1RjFBRjNDNTE1QzA3NTg3MjNCQkUyRDExMUFGN0U0Nzc5REY0MjVGLCBGOTkxREFBN0FDMkJFQUExNTE1RDgyMzI4M0I2N0Q5RkIxQjkxQzFFMDQzQjI3RUYKKzZFRjc5MDc3RkJCLCA2QzNGOEU4QzEzNUJDNDYyMzREOEI4NUFCOUJBOTRBOUVEMkU3RkY5QjhEOUQ4NEQsIDE3MTBEOEIyMkNBM0Y1NzJDQ0M0RjNGN0QyOUI0NTA4RkQwRUI0OTczN0VDRkIwMQorMTRDRTZCMTY3RjMxLCBBMUREN0RDMTRBRDg5NUZDMEU2REU5NTAxOTM3OUE0RkNBNDg4OTk2OTAzMzIwQ0EsIDM0Q0I4NUEyRDk4QUFBMEZFQzE5OUE2REMxRjVCRDIzOUY5RTNBRDQ1RDVGOUM2MworM0U2QjQxNDM3RDkzLCA4QTI5MjM2Q0ZEREVEMUYwNTcxNDFDREIwMUUyMDQyQTM2Qzg1ODRCRDFGN0VCQjEsIDQxREZBMzg4NzQzRUI3ODA4NDJDRkE4RTkwMzYwRTIxQkM5NTdFRjBCMDk0M0FENQorQkI0MUMzQ0E3OEI5LCBGMEQzMUU3QkE2Mjk5Q0Y5N0Q0OTQ1OTc0NkYzNzY5NzZGM0Y2OUEyNTRGQTQzMEIsIDgxNkIzQkUzQ0RBMjEyRENBNDc5NDJFODM5NDYwQUY1NUJCMzY4Q0Y4MjQ0M0ZENAorMjMxQzU0QjVGNkEyQiwgQjYxRTNDRTc0NjlGQjQ2QTVBNzVFNkYzNjkzMTlFODZCM0VERkRDMTVGRDcxMTM5LCA2RTRBOTFBQ0ZENjdCRUMzNDEyMEExMzMyOUI5Qjk0RTkzMzRCNDQwRjVCRjkyOUIKKzY5NTRGRTIxRTNFODEsIDEwNzVDQzVEMjc3QUVEN0UwNjAzQzg1MkVFRUVGRTk4QjAxMTE1NzcwNDdDMjM5RCwgODJGRDQxQzBEQkI3NUY4Njk4Rjk2MjYyRUI1M0VGNkM2RDE2NkFGMDc4NTE5RTEyCisxM0JGRUZBNjVBQkI4MywgQzVEQ0VGODg3RDhBQjFGRUYxRERCNTIzRjRGMTNCM0I5QzY2OTJGQzhGRDhGQ0E4LCAxMDhFQkREREM0MTE2ODVEMjQwQ0NCNzJEOTA0NkY2MDM4OEM0NUQ0QjM4MEVEN0QKKzNCM0ZDRUYzMTAzMjg5LCAxMjE0QTJGOTM2MUY4RjdFNDUwRDU3NkE4QzIzMTY0MzFFRENFMUUwQjQwQTE4MEIsIEM0NzY5OUFDRDRGMUI1ODM0OEY1QUM0ODRCOThBOTFBQ0QzMDk3RTFERDg4QzAxQgorQjFCRjZDRDkzMDk3OUIsIEQ1OTBEMkEzQjZEQzAyMUU0RTMyQ0RDMzE5RUE0OENCNjhGQTdFOTUzNDA5QzcxLCBDMDZFQ0IwRkQ3MkY1NTYwMDZERDgxMEU4NEUwREQxQjEyMDkxOThGMDEzQTg2RDUKKzIxNTNFNDY4QjkxQzZEMSwgN0RGNjIwMTE0NEFDRDJGOTNGQjc0ODcyNENENEU0RTZGMzVGREM4Qzk0Q0IyMDNCLCBFOUExMkI4NTNFOTRDQjc2RkMwQkVCQTUzNDYxNDQxQjcxQzUzQjVDMTA2MUNDMDcKKzYzRkJBRDNBMkI1NTQ3MywgNzYwRkNGOTA1N0IwRkVBMTZCNjBDOEQzRjc1NEQ5RTJDMThCOTczQUJDNzAxQkMxLCA5MkJGQkE2RTU4NjU4M0Y2MUZDRkYwODZDQkI1NEFBMDcwQzI3M0Q4NDc1NzZBODEKKzEyQkYzMDdBRTgxRkZENTksIEU0NjJCQUM2MzdFODBENzA5RkMyMDI2Q0E4NjQzNDk3MjJDRkZFQjJBOEMxNDAzNCwgRDZGQzlBRDREMEQ5RTNBODA5MDBEQTgyM0EwMkQwMUMyMEMwNUNEMjA4MjE3Q0IzCiszODNEOTE3MEI4NUZGODBCLCAyQTIwNjY0ODEzRDIzNDc2NTAyRDRDNDA1RDdFMDczNTcwRjYzMUU0RTI1MjdFODcsIDk3RjBFMDYwQkFBQjIxMzIzNjk1QkVFNjcyQUUxQTE1RDdCNDk2MTc2QjFGN0MyNQorQThCOEI0NTIyOTFGRTgyMSwgOEE5RkU1QzcwQzhFMUI3M0MwRTJBM0U1QUNFOTE3NDFGMjQ4RTM2RjVFOTgwOUVELCA3MDA1MUMyNkYzMzhENjEwMTBBOTU5MjExMTdFNkYwQjZFOUJGMEY5Q0VENDJFQzUKKzFGQTJBMUNGNjdCNUZCODYzLCAyMjgzNDc0OUYwMkZCQjJEOTY0MzU4RDEyQTcxMzNEQkRBNTMyNTQ5RjE3NDVGMzUsIDY3MzU0NkYxM0M2OTk0Qjk3MEMwMzc2Rjk2QkQwMDUxRDE5RUIwRDdBMENGMDlENgorNUVFN0U1NkUzNzIxRjI5MjksIDRBMzFEQkExQjRFQTZGNUY1QTE2NkI3M0NGN0U4M0JGQkVDQkNEMkNCMjJEMEE2NSwgODlFOEFBMjMyNUM5ODY1NTdDMjYyQkRCMkJFODA1MjIyODc1MjQyRTI3NkQ3RTZCCisxMUNCN0IwNEFBNTY1RDdCN0IsIDRGRTU3OUNBODdBMDA0QUQzNkNFQTE0MjkyRjkxQkI4NUE2RjU5NjQ3NjA0MzNFRiwgRDM4MUQyMTJEQUVEMTg4RTcyMUFGQjgzNTRDRTBEMUI3MDE1QkE4RDhFODI0NEUyCiszNTYyNzEwREZGMDMxODcyNzEsIEI4MDRBNUY0MDREQzE2M0VFRDJEMkU1NzFGNUZCNzdGMzVBQThCMDc4NTg2QUU3MywgQTYwNzFGOEUxNkY4QzJGQzRFQzg3QjNGQjIwNDQyRjRFMUEzNzM4RTkxMzA0NTY4CitBMDI3NTMyOUZEMDk0OTU3NTMsIEM3RjkyOTJBRDlGQTk3REEzQUZBQUNEQTJCNkQwQjlEODNFNzExNkYwQjJBMkI3NiwgQzI0OTlFRDQ5Mzg0NDRGMzRGMUQ4OTEzNkM3MTUzQTY4M0E4NEYwNDhBNkRCOURDCisxRTA3NUY5N0RGNzFCREMwNUY5LCBBNUY1Mzc0QjJGN0UwN0VCMDY1NjJBMUJEM0Y4RjUzMTQwRjNENDM0NzJEMURFOCwgNUU5NEJEREIwMEJFNDcyM0Q2NEY1OEQxQzc2QTU5MTZFRTc5QjlCQzA4RTY1NzU0Cis1QTE2MUVDNzlFNTUzOTQxMUVCLCA1NDY2NTg4MkM5MzlGNjkzOEUwMDY3OTRBQjNGMkVBNTAxNDhDNzdGMkYzRTA5QTYsIERDMTlGODBCMjAwRkIzNkFBMzkzM0U3REQyQjhCRENEOURFRkJGQTA5NEMwNjhBRQorMTBFNDI1QzU2REFGRkFCQzM1QzEsIDZEMzJDNDc3QjlCODhFNEEyOTg0OTk2QzhGNTg2RTRDRTY3MEFCQTdGOTMxN0JCNywgNDdCMUZBRTVBNzMzQ0MxNjU2NjZBOEUxQjFCM0M5RDM2NTIwQ0E4Mjk3OEIzQzRBCiszMkFDNzE1MDQ5MEZGMDM0QTE0MywgNzA0OTYyRjAxNTVBMTkwN0QwNEM5MjFENzczODI3NzI0QzE1NTBDOUIzMjFFMDdGLCBENjVEMkZERDEwRjM1NjlFQkUwRjcxQ0FEQ0VENkEwOEMzMEM3OUVDMjIxRkU3MDMKKzk4MDU1M0YwREIyRkQwOURFM0M5LCBERDJCMDlBQkVDMDNDMkI2Qjc5QzU5NTI3QkMyNTA2QUU4QUNFNUY1QkRGOEM5QzQsIEEwRjBGQTI4QTg2QkY0QThFRURDMTNBNDA3MUNBNDc5OUUzRUQzQjdBNTUxRkFFNAorMUM4MEZGQkQyOTE4RjcxRDlBQjVCLCBERDhENDRDRTY0MTE1MzUzQzUxQkJGRTk3MEUxQjdGOEJFQzBBNTY4MTU2NDFBRDksIEExNjc4QjI1NTdBRjQwMzlBRDVGRjU1NTkyRjFCNjJEMTZDNDkzMTQ0NjUwNTg4QworNTU4MkZGMzc3QjRBRTU1OEQwMjExLCA5RjQ5RkMxNDMwRjQ1MUI0MjM5QzI2NUM2RkRFRDkzODY2RDgyREYzMDIzMzI5NkEsIEM1QjA3Rjg0MEVCMkYxNzFDRjRBNjc4NjQ3MzA5NkJEOTQwNzBGM0Q4RjlGRDgwQgorMTAwODhGREE2NzFFMEIwMEE3MDYzMywgQzNGOEI3Q0Y1N0EyODE0NjMyMzlDMDNDNTFBRUM4NDE0MzVGRTdENDNGMUUyNDFBLCBEOTQ3NDI5N0EzMjIwOUFDNjU3N0FDREJFNTk0ODI5NzFEMjVDODExQTgzNTI0QTUKKzMwMTlBRjhGMzU1QTIxMDFGNTEyOTksIDJGODlGRjQyQTM0NzdBRjAwOTlFQjhEMjBCRkJGMjQ2QTQyQkNFMjhDMDQxQkExMCwgQTM5NTg2MjNFOEFDREIxNjY2MkMzRjVFQUZCNzU3Q0I5MTJGMEU1NUFGNDgwQTZFCis5MDREMEVBREEwMEU2MzA1REYzN0NCLCBERTk4NzdCNzNCOTdEQUM0MEUwNjU2MEI1MzU1N0MwOTNGNDZFMkE5RkFBNzAwMjAsIEI3ODY4NDQ0Q0U2MzhCRUVBOEMwNjJBRjhGREMzRDQyQkEzRUQ4RDM4NDM2ODE5NgorMUIwRTcyQzA4RTAyQjI5MTE5REE3NjEsIDg3NDExRjM1NzUwNUJFNjFFOEEyRUM4M0ExQzczRDQxNDg5MzQyMUU3OTQyQTYzQywgQTJGNjQxQkE5MkY1OUJDMkZEMDA1MUVDNzg5REM2QTIyRDFCNzkwNDMxQ0Q1M0ExCis1MTJCNTg0MUFBMDgxN0IzNEQ4RjYyMywgMzNFQTQwRUJEMTgzRDNDQTJFOTY3NzYzNzExRjVFQUFDMjQ3QTgzRDEwRjREOENELCBCNTAxODY4QjQ5NDJEMURFQjNGNERCQjE4QzkzOEJBQUVBMDk3QjVEQzhEQ0FGMDYKK0YzODIwOEM0RkUxODQ3MTlFOEFFMjY5LCA5NzU4MzQ3NTMxREU4MkQwNDg3RUEwM0ZFNDI0NTc0NzY0MEZBN0NDMTA4OUMyN0MsIDVGMzdFNjAxQzU2RUQ4QjYwMENDOUQxQjU3QjkwOUQyMUExMkVBREVCOTE3NjM2QQorMkRBODYxQTRFRkE0OEQ1NERCQTBBNzNCLCA2M0Q3MDA3QTNCMjVBMzYyNzY3QTQwNDExQjJBMDM5NEFBQ0RCRjEzQTdFRURGM0QsIEE3MjFEMTM5NTc0NUU0MDMxREYxNzdCNTM1QzA5RkM5NDc1NkMwRkRBMEFFNjYzMQorODhGOTI0RUVDRUVEQTdGRTkyRTFGNUIxLCA2QzhBOEMyMzk0RkYzODBBMjI4OTE3QjA4QjExMUQ3NkEyQTRFOUVGRDdFNEU2NkUsIDJFQTYxNzM4QzI0RDMzQzI3ODlBMTg2QTVDQzE1MjQ1Nzk4Q0JDNjJGNUE3NDc2NgorMTlBRUI2RUNDNkNDOEY3RkJCOEE1RTExMywgOERGMzE1ODIwQkQyNEJENkYyMDEyMkVDQ0EwM0VDNjA3ODM1NzZGRjE5MzFEMDZCLCBGRkEyQUM3ODM2QjI0QzNDMkVFQkI3NkYyNEI1QTc4Q0U4QkRDODE0NDU0NUVCOUMKKzREMEMyNEM2NTQ2NUFFN0YzMjlGMUEzMzksIDNDQkNFMDY5QzgwMzREMjMzQjlDMkFERTNDOEYzRjI2RDYwMDRENjg1MUJFMzZFRSwgRjFDQ0U0NTNDNDJGNjA4RUQ3OUVDQkU5REZGMDVFMTJENzg0M0RBQzJBRjAxNjVFCitFNzI0NkU1MkZEMzEwQjdEOTdERDRFOUFCLCBCQzYxOTZCOEUwMjBGNzY0QTg0RTlBNzAzMkIyQUMzODQ2MDAxNURGQzNFQUM0MTEsIDkyNEVCOTQ2MEJENzIzQ0I5RUQyREQzRTg5NENCMjRDQzQxMkIwQ0FFMkFGODg4NgorMkI1NkQ0QUY4Rjc5MzIyNzhDNzk3RUJEMDEsIDFGOUU3MzRDRDQ3NDJGQTg1MzdEQjlCQkQ1M0E5RUVBOTRENENENDdCQ0U5MjE5NiwgMkYyRkFFNTVGNzlBQ0JFNjIyM0FBQ0IzMDI1NTE2MUFDOUI5OUYzQTc3MDg3NDE2Cis4MjA0N0UwRUFFNkI5Njc2QTU2QzdDMzcwMywgNkEwMEY1NDdEMkNBMDc5MjlBRDAzODJFQzFDRjJERTQyNDBDRjA0RTJBREI5NTgsIDlGNkExRDIwMDMwMzJCNjFGNjVBQkEzMzQ2OTQ2NEFFRTIyRkZFNDBCRDIxNEVCRQorMTg2MEQ3QTJDMEI0MkMzNjNGMDQ1NzRBNTA5LCA4NjA3REU2ODJFRjQwQUIxNzdGOTY1NDBDNzA4MzA4NTVDMUQ4QTNCQjMzNDAzNjQsIEJDNUI1OUY5RThDOTgzRUQzMzNEQzc1MjMxMjIzNjY4QzIwQ0Q3RDgxOEZFMDlCMQorNDkyMjg2RTg0MjFDODRBMkJEMEQwNURFRjFCLCBFNDBFN0I1RTVDQjQyMjQxQ0MyMzE3MDczOURFNDk3OEYwQzFGQUE0NEMzQjBBNjYsIENBRUVBQTNERTA4QkRGMzI0MjdDRERGOEZFQkZDNDJDMjU1NUZFMzg3MDIyMjdBNworREI2Nzk0QjhDNjU1OERFODM3MjcxMTlDRDUxLCBCNzJCRjAyNEIzRDc2RDgwOEQ1NTRENEE2NTMzNEQ0RkNFOEQ1MDEwRDgyMkMwRUEsIDM1MDRBQzIyMkZFODIyRTQ4MUEyN0Y5QzE2RUI1ODRGQ0IzOTBDQUQwRkVCQjQ2QgorMjkyMzZCRTJBNTMwMEE5QjhBNTc1MzRENjdGMywgODg2QUVGNjY5QkM1NjQ2MTdCNjZGNjA1N0QwNDBFNjBBM0FBQzhBREZCQzU4ODMsIDc2NUQxMzE3RTczMEUwNDYyMjg2MzQyNDE2MjZBRDE3QTAwNEQwREVCM0U2QjhFOQorN0I2QTQzQTdFRjkwMUZEMjlGMDVGOUU4MzdEOSwgOTE5RjVDQ0U0QTg4OUJBQTFERUI5MTZCQkFCNUM5NTE2MzkzNURDN0Q3OEIzNUI3LCAyQUU2QzlGOEMwMjcxMzVDODhERkIxMjIzQ0Y3QjlFMTk4RDYzNUQ3QkM4RkNBMkIKKzE3MjNFQ0FGN0NFQjA1Rjc3REQxMUVEQjhBNzhCLCA5NzU2NEQ0RkFDMzQ5REVBRUI0QUQyNEQ5QzI1NjVDQUNBNTk4QkFEMDc5ODFFMkIsIDE3NjIxMjYxRjE0NzU3NERDMkQ2NjNENThBODEwMTFDQjQyQzU3ODc0MjRGQTU3MAorNDU2QkM2MEU3NkMxMTFFNjc5NzM1QzkyOUY2QTEsIDQwNjc3MDc5QjUwMEIzRERFQUE2QjBENTE5QzUxQ0M5OTk1NEI4MERFRkI0MTZGNCwgN0E4MEIwODBGNDRDNEY3MUEwMUNGRkMzMzYyMkUzREZDOTg2NTZCM0E1Q0Y3MDFGCitEMDQzNTIyQjY0NDMzNUIzNkM1QTE1QjdERTNFMywgNzhFQTUzNkIyMzkzOEFGNjgxRTBEQTdCMjE2ODE1QzNBOUQ2MkFGN0NBNzZDQjhFLCA0QTQ0MzE4RTIxRjcyRTBDRjA5MkREQjgwQTlBMTQ1RDQyMzUwNUM3NzUzMzBCRjIKKzI3MEM5RjY4MjJDQzlBMTFBNDUwRTQxMjc5QUJBOSwgMUU0Mjk2RjhCQkJGMkJBMTQxNkIxMzE3MTJEMEQwMzIzQ0Q1NjZEMjg4NjE3QTM4LCBDNEUzMzk3N0Y3Q0U5OTg1MjhBQkU5ODk5QkVBMzMxMkZBRDk3NkE5RDA3RkRCQzEKKzc1MjVERTM4Njg2NUNFMzRFQ0YyQUMzNzZEMDJGQiwgNUQzN0YyNzc5ODRGQTE1RkI1RTQ3RUYxQjRBQjQ4REEwMDI1RTAxQzcwQkNGMTkyLCA1Mzc1ODQzN0REOUY2Q0U3MjE0RUQ5OTgwNjM1MEU1ODIyQzFDMDIyMzcxQzk4NgorMTVGNzE5QUE5MzkzMTZBOUVDNkQ4MDRBNjQ3MDhGMSwgNDVGMEQ5MzFCRTBCRUNGQTE5RUU3N0M2OUYyRDZFRTJCRkQ0NkEzQUJBOUU3ODYwLCAyREQyMDVDNzM2Q0Y4RDQ3NDUwOEQxRDlGRURCQUE5QjM5ODEyNEM4OTYzQUM5QUYKKzQxRTU0Q0ZGQkFCOTQzRkRDNTQ4ODBERjJENTFBRDMsIEM0MTQ4RUQzM0ExMUUzQjkxOUY2NzhEMEY2REYyRTVGMTlFODg4MjUyMzM3NTAyLCA2QkJCNUVGNUFGMDY4ODk1MEI0RTlBMDVCNjlGM0FCNDQ0OTcyNENGRjM4QjZEMTcKK0M1QUZFNkZGMzAyQkNCRjk0RkQ5ODI5RDg3RjUwNzksIDFGNTg1NUM1NzNFQTdDNzZENkU2QjM0NTM5ODg1QjFDQURGNjlBMjZDNEY0RDQyLCAyNUVDODQ0Nzc4NjcxODM4NzM5Mzg5OTlDNTQ0NTg3MTYzMERDOUVBQzkzMzFCN0MKKzI1MTBGQjRGRDkwODM2M0VCRUY4Qzg3RDg5N0RGMTZCLCAyMjc1MTk0RTFGRjlGMDcxRDBCOUQ0REFBMEM4NTlFOUVGQUI1REQwMTMxQjg2RUYsIENFQkExRTc3RjM0OUYzQTlFNEU5Q0Q0MjY4OUZCMjlFMDYzMzE3NDYyN0E5ODkyRQorNkYzMkYxRUY4QjE4QTJCQzNDRUE1OTc4OUM3OUQ0NDEsIEEyQ0UxQjcyMkFFREQxQzU0NUUxRkI2RTZBMzAxOEMyRURDQUE1REI3RDRCNTIzQywgNzU5MDcwRkMwQ0Y2NjNGMUQ4NEU4ODU5NTJGRDk2ODE4OThBRENEQTQ3RDNEQTg4CisxNEQ5OEQ1Q0VBMTQ5RTgzNEI2QkYwQzY5RDU2RDdDQzMsIEE3QkY0NDI4NEI5RUY0OTY5NDFGMzFCNjQ0MkVGNjYzNjI3NDI3QzlERTUwQUExMCwgOTkzQ0EyRTRCMjYzQkFBQkRCQjU4RDI3RjNFM0M3MkJDNzE2NDdEOUVDM0QwQUJFCiszRThDQTgxNkJFM0REQjg5RTI0M0QyNTNEODA0ODc2NDksIDNEQjgyNUZDMzM0OTZGRUJDQTM3RkZBRjk1OERCRUI1MEVCODcwRjcxOTNEMkJCLCBENTk4ODRBMEZBNzg1MzhCNjc4NjI4Mzc0RERBMjNFRDZFRUY3NUE4NjNFM0Y1M0EKK0JCQTVGODQ0M0FCOTkyOURBNkNCNzZGQjg4MEQ5NjJEQiwgOEQ2MDExMTUxMzM3QzU3MDU1Mjc1N0EyMkUzQTMwMkZDQjdCQzNENjFERjYwNjFFLCBDNDU1QzM1RTRBMDcxQ0EyNzE1QzgwMTIxQkU0M0RBRUY1MTlCNUQxQjc2OEI4NDkKKzIzMkYxRThDQ0IwMkNCN0Q4RjQ2MjY0RjI5ODI4QzI4OTEsIDEzNzE1MTREMzNENDI1NkU1MDQyNTUwMDcwODQxNkU0Rjg3MDZFRTUyRjgwM0E5MCwgODkyRkM3MDdEQ0UzMzUyQ0U4RUQyM0VDRTk4OTgyNUZERUIzMkU3OUMwNDlDMkQzCis2OThENUJBNjYxMDg2Mjc4QUREMjcyRUQ3Qzg3QTQ3OUIzLCBCOTQwRUEzMTMzQ0JGNUEzRTI4N0Y3MUVENURFRjk4RkI5MzFCQzA5NjVCQjZCMzYsIEQyNzIwOTNDNjk0MTFDMTBEQTg5MzMxNjgzMUEzREQxMUQ3NkM0NDFBRTBFMzhEOQorMTNDQTgxMkYzMjMxOTI3NkEwOTc3NThDODc1OTZFRDZEMTksIEMxQkY2MUM4NUY3OUIyNEE3QjMwMjQwRDQyQTcwQkUwQkU1RTdERTZBMDU2MzQ3MSwgREI0OUUwMkVDMEJCMDQwMUJENTY2QjA3MjAxMzU1MjI2NkY1MThERjA1OTg3QkU1CiszQjVGODM4RDk2OTRCNzYzRTFDNjYwQTU5NjBDNEM4NDc0QiwgQzBFRDkzQjUzQTE5M0EzNUQxNzk0MzM3Rjc0QzRERDU4RDhCQTg4Njc4OTI5RTY4LCA3REU4NkZEMUM0NjkzREM5MDFBNzg5MERFQ0IzMDdGMDBFRjQzMkNEMTdBOTY2OUIKK0IyMUU4QUE4QzNCRTI2MkJBNTUzMjFGMEMyMjRFNThENUUxLCA3MUU2RTA0NzBBMkE3NjU2NkFDRkQ4QzY5Nzg2MjEzREZDNTBGRjg0NDlGQTlEMDAsIDZGRjg2MDdGMDAzQTkwRkI3Njg0MEQ4Q0EzNjdCNDYxMkY4QTU1NUJBMkM3RDA3QgorMjE2NUI5RkZBNEIzQTcyODJFRkY5NjVEMjQ2NkVCMEE4MUEzLCAxNjIzNzZGMjhFNTMyNDk2MTE1NTZDMUFERDU4REQxNUFBNjY0NTFENDlCREIxOEMsIDlBMjQ2NzY1RTZDQTVCMTlCRjg1MzMzMkIzOUZFQzQyMTczOURCNTI3MDNCNjUxMworNjQzMTJERkVFRTFBRjU3ODhDRkVDMzE3NkQzNEMxMUY4NEU5LCA3RjMzNTVBMTBDOTZFRTY0REU5NUNCNDBGMkMxNkM2QThCRDlBQjE5RjI0M0VGQUMsIEUyNUVEN0Q0QkYzOTVBQ0UxNUNBN0FEOUNDRUY4RjgyQzNCODY4MEI0MEM1QUQ4QgorMTJDOTM4OUZDQ0E1MEUwNjlBNkZDNDk0NjQ3OUU0MzVFOEVCQiwgNjU4MDFCRjE5QzI2RjI3QkUyNTlBNjgwMzMwOTZDMEYyMUNCOTA4QzJCRTQzMUY3LCAxQ0JGN0ZEMTgwQTFGQTc2NzNCQjIwREREM0RFQUZERDIyNDk5MkIwMDBEQUU5NjkKKzM4NUJBOURGNjVFRjJBMTNDRjRGNERCRDJENkRBQ0ExQkFDMzEsIDI0MzQ0NDc1MDNDNzNDQkUyNTAzMjlBNjQ5QTcxQkY3RkI5MjM1QjREN0RCNUFBRSwgNEYxRTZCMzY5MTUxMkJERkQ2NDJCODM3MDM1RUM2OEIzRERBRDA4MzA2RDBFN0JDCitBOTEyRkQ5RTMxQ0Q3RTNCNkRFREU5Mzc4ODQ5MDVFNTMwNDkzLCBBQkUxRDdDOUQ0NDQ2Q0FEOTZCNjk2RTEyOTIyNUFCQUU3OUJGRjQzQ0JGRjRFQUYsIEEwN0NEMERBNjE3NzkzOEQzMzQzODFBNkNBRDRGRTJBNTQxODlFMTU3REJGQjY1NworMUZCMzhGOERBOTU2ODdBQjI0OUM5QkJBNjk4REIxMUFGOTBEQjksIDQ1QjNBOERGOEM1MzAwNkQyMTgxRDUyRTU3ODUwMjkwNkRDRjE2NkU1M0IyRTQ5MCwgQTRDMTVGMzAxQUQ1RjVCNjFGNjAzRjkzMjMwQ0MzQTgxN0M2REM4NkFCODQyREJECis1RjFBQUVBOEZDMDM5NzAxNkRENUQzMkYzQ0E5MTM1MEVCMjkyQiwgQ0E2NkQ0QUU1RTM3OTgwRTU0QTMyRUM5ODFBRDZGQjhGMTMwQTgxMURGQTlGMjgzLCAyRTUxNkZEMTE3NjYwMkQ2NTBCNzY4NzQ0OUU4NzEyNzU4M0UxOEY4RThBRDZCNjcKKzExRDUwMEJGQUY0MEFDNTA0NDk4MTc5OERCNUZCMzlGMkMxN0I4MSwgNjczQUUwOTYxRDBCMTJCNjUyNkU4MkVCRjMyNDRCRDlDMzkyQjkyRDUyQUREMEI4LCA1NkY2MDVDRUFFOEU3MUYyOERGREQ0Q0JBQzA2Q0FFREMzRUZEMEY0RkYwQzdEN0IKKzM1N0YwMjNGMERDMjA0RjBDREM4NDZDQTkyMUYxQUREODQ0NzI4MywgMkJCNkQ1QjlFNTJCNDJDMTdFMzQyMDVBNTIzRkI0NTk2RTgzQjM0RTY1M0ExQjIwLCBBMUY4OUI0NjgyRDhBNkYxRDA3RjhDQTQwQTQ1Njk2MkJGRkUwRDAzMjJFQTVCQTEKK0EwN0QwNkJEMjk0NjBFRDI2OTU4RDQ1RkI2NUQ1MDk4OENENTc4OSwgNUMxNkM3Rjg3MUZBQTI5NzJENkMwMEVFQ0NFNjJCOTk1MUNDQTkxQ0RENDRDOTc4LCA1MzM3OUJDODc1Qjg0MDk0MEJFMkYwQkQ4M0MzQkUzQTRGNzM4OThCMkQyNDNENzIKKzFFMTc3MTQzNzdCRDIyQzc3M0MwQTdEMUYyMzE3RjFDOUE2ODA2OUIsIDk4NUUyODcxMTAyQzBGNUJGQTA5RTFEMTZGNjc3RTEwNzYxMjNCRUEwMTlERkYwRiwgM0IwRUU0NTI5OTRBMzFFRTEwRThCNzZENEYxRTVBRkJGRUJBRERBNTJCRkU1MjM4Cis1QTQ2NTNDQTY3Mzc2ODU2NUI0MUY3NzVENjk0N0Q1NUNGMzgxM0QxLCA4NUE5NUI0MEEyNDA4Qzg4MDY1QTZCMDZBMkM3MEMwRjNCMTAxNkI4NTBCMDNGQTQsIEUxMjM3NjJFRDlGQUFEREJENTcxRDREOUQ1NUJBQzIxNjM1QjhGMjM0MzJDQ0RGNworMTBFRDJGQjVGMzVBNjM5MDMxMUM1RTY2MTgzQkQ3ODAxNkRBODNCNzMsIEVFOUJDRTg4RTEzMDBBMDQ4QzZFRTA0QkM3QzRENkIxNEY5QzQ2QzRFNUUwREM1QywgNDI2REQ1QkNCQURCMkI1ODMxQjA1QUUwRUUzNkE0MzU3QTlDQ0I5NzVCRTZEOTdGCiszMkM3OEYyMURBMEYyQUIwOTM1NTFCMzI0OEIzODY4MDQ0OEY4QjI1OSwgQzhGNjdEQkZBODFBOTE3QURFNUJDN0M2ODA0NjZCNkM1OUEwNjE0Q0UzN0NDNDkyLCBCQ0JDMzI0NURFMzA5QjI2MDM4MUMyOUE1MUEwOEZEN0FBN0E4OTdBNTdGNjBDNDMKKzk4NTZBRDY1OEUyRDgwMTFCOUZGNTE5NkRBMUE5MzgwQ0RBRUExNzBCLCAxMDJGMjgyQzc3NDk0NjREMEI1QkFGRTc4NjJBREIxNzZDRjUyODk1OUU2RkYxNiwgNDQ3MUIzNEQwQzQyN0QxQjJFNkJCNEQxRDFFNzAxOUIxOUZCMjlBRDM1MDhGRDU1CisxQzkwNDA4MzBBQTg4ODAzNTJERkRGNEM0OEU0RkJBODI2OTBCRTQ1MjEsIEE5RDg4Q0VDQzhGMzBFNzM2N0IxODI2NjE0NzUwQzVFNjJEQUM2M0I0RUM2OUY2NSwgMURENUNFNDAzQjI4RjhFODI4QUQ2MUZCREU4RERCMjlBQjc5OUUzMjJFRTVCMTJDCis1NUIwQzE4OTFGRjk5ODA5Rjg5RjlERTREQUFFRjJGODczQjIzQUNGNjMsIEJCRDlCRDhEQjUyQkM3NzlERUQ0RDEwRDg3RjlBNTFENkY2ODhFRjJBQjI0REE5RCwgM0I4MUU4MDNCNDk0N0Q4ODZDMzFERTY3MUMyNTdCOEQ0QUFCOTcwM0IxNDI1RkE3CisxMDExMjQ0OUI1RkVDQzgxREU5REVEOUFFOTAwQ0Q4RTk1QjE2QjA2RTI5LCA0RDE3QzYxNDU1NEVGNDlDM0VDQTQxNzRCQTczRTUxMThFNUU2MEFBMEE3N0M2MywgN0I2Mjk3RTE2N0VDQkZBNEI3QkQ3RkVBODhCQ0VEMEQ4NDZGRUUwM0REM0RDRTdCCiszMDMzNkNERDIxRkM2NTg1OUJEOUM4RDBCQjAyNjhBQkMxMTQ0MTE0QTdCLCAxNEQzODI0NkNFRkE4RDk3OTU4OTQwMDhDQTBDMEQxMjZGODNDNzhDODNEQzkyQkUsIDM2NDExQjc3Q0VDREFFODQ3NTkwQjU2NzdGNTk5Mzk5NzNCRTZGRjJGNjRBOTA0MgorOTA5QTQ2OTc2NUY1MzA5MEQzOEQ1QTcyMzEwNzNBMDM0MzNDQzMzREY3MSwgQkY3QUMxRUIzRTcxOTBCREU0RDcxRUQ1N0RCRDUyREUwMzA1MEVGQjQwQ0I1RUFBLCA4RkNBRkE3ODM2MTY1OEYxODhGNDMxNDI5NTZBMTU2ODU3NTYzQUZFNkMxRUM0NQorMUIxQ0VEM0M2MzFERjkxQjI3QUE4MEY1NjkzMTVBRTA5QzlCNjQ5QjlFNTMsIEY4RDI4QzBEQ0FFOTFDNDYxQzcwQTIzNEQ2OUEyNTM4RjI5MzA4QTExREVDNkI3RSwgODFGMTE2NTlDNkY4RjQzM0RBRjM4NEIwNjc3NjU2RDQzQUExMDQzNjU1REQ4RTVECis1MTU2QzdCNTI5NTlFQjUxNzZGRjgyRTAzQjk0MTBBMUQ1RDIyREQyREFGOSwgRjczMDU4OTY1OUU4RkVFNzE1RjBBMzM5OEE1NDc0OThDODU4MTcyRTc3NkM5RTMzLCA3NzI1QzEzNzA2NjcwQTgxMUY5M0Q1RkIwRkM3QkVERjBENDM5MzM1RDJGQkExQjYKK0Y0MDQ1NzFGN0MwREMxRjQ2NEZFODhBMEIyQkMzMUU1ODE3Njg5Nzg5MEVCLCAzQjY2NkRBNDZDNUJCOUNGOEQ4NDQ0MzY2NjAyREMyQzc5MzI4MUM5RkZBMTZFMkEsIDkzM0IzOTE5Nzc4QTc5NzM1OEQ0RjQ4NUQ5MTFFRDdCOEM4QzNBM0M5Qjc4MkNCOQorMkRDMEQwNTVFNzQyOTQ1REQyRUZCOTlFMjE4MzQ5NUIwODQ2MzlDNjlCMkMxLCAyNTFGMzFFM0Y3QjUyREQ4QkQ1OEU1RDE1RTVBRTQ5MDkyMzc1MjY3MkE1NzhENzgsIEI1RDZEMDc1RENENzg1ODNCRTY4RDhGMzdDM0E0RTZCQTM4QzQ3OEJFRTE2RTkwRAorODk0MjcxMDFCNUM3QkQxOTc4Q0YyQ0RBNjQ4OURDMTExOEQyQUQ1M0QxODQzLCBFRTQwODk3ODJCRUVFQTU0QjhDRTJBMjE2NUEzNDNEOEQxRDExMUY4QkVFQTZGN0EsIDI5RTZCOUZFMzA2NkNGMDlDRjgyMjdEOEU1NTlBMDcyRjM2QjIzODJGRDNCRkNBCisxOUJDNzUzMDUyMTU3Mzc0QzZBNkQ4NjhGMkQ5RDk0MzM0QTc4MDdGQjc0OEM5LCA4N0UxMDdBRDVBOUQ3M0FEMzU3NUJCNTY3ODVCMTQ5QzdDNTQ4Njg5MjkwREUxQzcsIEE1Nzg3OEExNjlFRUQxQjZEMkFCOTlGODg3MTZFRDg2RDVGRjA5MEQzQzcyQkI5NgorNEQzNTVGOTBGNjQwNUE1RTUzRjQ4OTNBRDg4RDhCQzk5REY2ODE3RjI1REE1QiwgRjAyMDlEMDQ1NjUyQkVDNjk5M0EzQjI4MEFCNjU4NEVFMEZBNENEQTg0NTFDRjY3LCBGQjAyRUM3NTlCNjM4QjQzQ0M2OTRGMUZGQkZFOERBNDlFQTc2QzJEMTdBMzc5M0MKK0U3QTAxRUIyRTJDMTBGMUFGQkREOUJCMDg5QThBMzVDRDlFMzg0N0Q3MThGMTEsIEZEMUU3Q0YwODJCMkRDMTY3RTE0MjhGMTI3MzVCRTA5MkYyOTVBNEE4RTFFNzYwRCwgMzU0NDg2OEI1NTkxNEQ5MjgzOEUxMjAzQzMxMzE3QzY0MTgxNTk3MkZBODEyMTJGCisyQjZFMDVDMThBODQzMkQ1MEYzOThEMzExOUNGOUVBMTY4REFBOEQ3ODU0QUQzMywgRjBERDYxNkEyM0RBNjFGRkNFMDAxRTcwOTcwNjM2N0M5QjNFMzYyRTc0MUI2MzhGLCAyM0RDRUQ4NTMyOTQ0QzJDRDQwODc0NTA1M0I0RDg1NjZBMTIyMkI0RkRDRjc3OQorODI0QTExNDQ5RjhDOTg3RjJEQUNBNzkzNEQ2RURCRTQzQThGRkE4NjhGRTA3OTksIEY3NDc3QjFGNjhCQzY3ODA2MjBCMjA2QjQ2MjUxREI1QkRCM0MzREY3RTFFMjdGQSwgMzFCQTU3QUQwQjBCRjI0ODY3NDgwQTlGODVGQkZCOTkzMDI3NDYxNkVBMjYwMjM2CisxODZERTMzQ0RERUE1Qzk3RDg5MDVGNkI5RTg0QzkzQUNBRkFGRUY5M0FGQTE2Q0IsIDk2QUU3OUVCMEE2NDhEQUEyRUY3MzhDQTZBNEZENEREMTcxQTIwREQwQTM2RTdGNSwgMURBNTU2OTE3RkQ2RERDRkMyQUNGODMzRDJERDlENUI4MDcxQzMwNUVBMUZDMDUyCis0OTQ5QTlCNjk5QkYxNUM3ODlCMTFFNDJEQjhFNUJCMDYwRjBGQ0VCQjBFRTQ0NjEsIDk0QTA5QjdDNjNFOUI3NUIxMTdFMDlFMTc4NDEyNUM2NUIyQjY3Rjk4RDNGNDZCMywgOTIyQjVGOTJCQTUxQUE3MkM1MUZDRTNCNkZGMTRBRENFMTI0OEVDODM5OTg0MzMyCitEQkRDRkQyM0NEM0Q0MTU2OUQxMzVBQzg5MkFCMTMxMTIyRDJGNkMzMTJDQUNEMjMsIDU5Nzc3RjZEM0JCNEQwRkJCNDAzMEJGQjU5MjYxRjI0QjkwNTdBOUREMjlCQzJDMSwgMUM0NTBGQzI2NkMxQTQ1QUU1Mjg2NERFQjczOTBBMjk0N0JGMEM1MzY1MDkyRDM4CitFQ0MtMjI0CisxLCBCNzBFMENCRDZCQjRCRjdGMzIxMzkwQjk0QTAzQzFEMzU2QzIxMTIyMzQzMjgwRDYxMTVDMUQyMSwgQkQzNzYzODhCNUY3MjNGQjRDMjJERkU2Q0Q0Mzc1QTA1QTA3NDc2NDQ0RDU4MTk5ODUwMDdFMzQKKzMsIERGMUIxRDY2QTU1MUQwRDMxRUZGODIyNTU4QjlEMkNDNzVDMjE4MDI3OUZFMEQwOEZEODk2RDA0LCBBM0Y3RjAzQ0FERDBCRTQ0NEMwQUE1NjgzMDEzMERERjc3RDMxNzM0NEUxQUYzNTkxOTgxQTkyNQorOSwgMkZEQ0NDRkVFNzIwQTc3RUY2Q0IzQkZCQjQ0N0Y5MzgzMTE3RTNEQUE0QTA3RTM2RUQxNUY3OEQsIDM3MTczMkU0RjQxQkY0Rjc4ODMwMzVFNkE3OUZDRURDMEUxOTZFQjA3QjQ4MTcxNjk3NTE3NDYzCisxQiwgMTk4OTE1M0I1RjY2MzZCNjEwODU0QkNDNTBBRkM5MjlFOTE0QzAzREE1MUE0QTgyMzlGNDg2NUIsIEI5MzgxRTZEQzc5QjU4RTA0NDNDREIwMDkxNjQ4MzdBRDQ1MEE2OEMxOTE5MkYxMjY1NDI3OTZDCis1MSwgRjkyNzY3MzgwRDM3MzFGMjI4QTQ0QUE3ODVCNDEzRkQ4MDdEQkIzMEZENkUxMUFFNDVEMUVBQzEsIDgyRkMxMjg3MTUzQzNFNUYxQ0VGMTNGRTMxMjkxQzQzQ0M1NEYxMDE2OUZDOUNBMjJFNTA4M0E2CitGMywgOTc5OTQ4MUYzQTlFMDI5N0E3NUUzMkRGQzg4NTEyRTc3N0VGREM0OEU5NzczNDlDNEZDNjhDNzQsIEI2RThFOTg3NDc0QzBDOEQxM0FGNEY3QjhBRjlBMUYyNzY2N0FCRThENjU3MUU3MUI3RDgzNTlFCisyRDksIEFCOTRDMkQ3QTU2RTgyRDc5QzE2OEIzREE0NUUzM0Q3MkQ0NUE1QjI1RkE0QUIwOTY4OThDMTBCLCAyNDg5OUZDODU1Mjk3NEU0MEZDMkE1RUU5NjkwRDExQkZGOTZBMzhEODRGQzc5REVGOUVCNzBERgorODhCLCA1QUY1NzlFQUQyREM2RTZCNTI0MzBBMkY3OUEzQkNFQ0RDMkI5OTUyRjM1M0FBMTJBRUQxMzM5MywgMzAzNzlGMzAxMkExQjk0RjgzQzVCNEFENjU4MEQ3QzhENDIwMDFGRTI5RkE2RDA2RjRDNDlDOTYKKzE5QTEsIENEQzRFQkM2NDM0RTE2RUQyQTk0QUQ4RkM1MzI1RDY5RURCQTVGQzNGOTQ5NDBDMzdCREZCQjkzLCA2RjNERDBEMkM0Q0FBQTU0REUxNERFRDI5NkI4MDY3RUMwNEY1RUUxNzA5QzI3RTkwQ0M0NzQ4QgorNENFMywgMzYyOTQ2RjNFMTgxM0Q0REJBREVBMTVBNzhDREY0RDA0QjlERDU3M0I4Q0U0OEUwODJERDI0OUUsIDQ2MzJGMjRENjcwRTE3MTYxQkZFQjQzNzM3QTI5RkE3RUMxOUNBRTU5Qzk5NERERjM4MzQxQTA1CitFNkE5LCAxOThGMDAwQjExMEJCMjc3NkJFMDI0QzUxNUJDNTYxODZDQUUxM0ZGQTFGNDIwRUFGQjdEMTM2OCwgRDQ3REUwNDU1RTM1RDQwMkU1RTdENzY4OUFGODM3NjIxRjFFNTA2N0M3RkJGOTY1M0Q2RDQ3RDgKKzJCM0ZCLCBFQUVDQTAwMTFCMUFGM0NDMkM4MUM1NDJBQjgyQzE4QzUwNDZCNERENjQyMDkxNDY3QjA1QkFEMCwgODIzRTIwNzRBNTVENEFEQzMyNzg3Mjg1RjQyQjlFNjE4NkQzODQyODk5NjQ0MjA0Mjg4NEUyREQKKzgxQkYxLCAzRkE0MzIxQ0VGNzVEOUMxNDgwNjk4NzFCMjFFMEU3RDYyMUMwMDhDQzFFM0VCNDFDQjYzRTMwNiwgNjc0QzA4QjJBRUM3NkRCM0RGNUZBOUZDNUY4REFCNkNBQTE0QzYwNTUzNkIwQ0JGMjZFOTFFMTcKKzE4NTNEMywgNzUwRjExQzU0MjRFRjg4RDIzNkY4QzBCOEYzQjg1ODU2ODMzM0MyQUNGNEMxNzA4NEZCQ0IyNDMsIEVGOEQxQzJCNTA5NEIyMTA4NTJEOEU3NTFGMjhFMjNGQUQ0RENBMjZCOTg1RTU0QjUyNzQ4MkVECis0OEZCNzksIDYxMjkwMTNFQTQyNDkzM0ExOEIzOTg2QzlEQ0M0MTY2QzdBMUZDMTNDMDAyMjM1ODg5NEQ2RjNDLCA3MjUxQjJBODRCQjI2NURDNDkzNjE3RkQ3MTJDQjk3MUZFMTBDNjkwM0ZFQzgyQ0RBODYzMTMxMgorREFGMjZCLCBEODJCNUY4QTY1MkFEMEI5MjM1NTdENjhDQTVDQzQyQ0ZGQkRDNzNERjNCMDBBQThGOUYzNzk5QywgNUVGQTg2RjcxNDlCQ0Q5RkY0QTUyMjdDMUUzMzE0ODdCOTE0OTI2MjU2MUE5NEU2MzU5OTlBNgorMjkwRDc0MSwgRUU4OERFQjk4RTY4QTU2RTQwNDY1NjY4MTJGNjgxOTNBMUI4ODU2RDA5Q0NGMzNENkVFQkM0NDYsIEZFNUU3RkU5ODVFMkRFNDgzQ0QwQjY0ODFBMUExOTAwQ0MzREEwNTY3QUQ3QkNCMUFFNTRCNTk3Cis3QjI4NUMzLCBDRTkxODRGMzM1NDhCQTY2NEFFMzJBRTM2MTM2NDA5ODhDQ0FDM0E0QTYyNjk1NzcwNDA2MzNCMiwgNkFBMzUxRDEwMDc1RjVGQzZCQkFCM0UxRDY1OTJBMjU4Q0JDQjZEMUQ2QzgyOEI4ODAwNDNBOEMKKzE3MTc5MTQ5LCAzRDMwREM5OTM0MDU2NTFDRjkzNkE4NDBFQzI3NTg0NTRCNzFBRDdEQkZCOUVGRDMyMTZCNDZEQSwgOEYxRTc4MzdGMjREM0UwNEY3MzRGRDYyNzVDMjUyRTU2QjlGNjFGNDAwNTZBQUMyQ0RBQ0ZDNTYKKzQ1NDZCM0RCLCBDRDYwNzVGNDhGNTdDNjYzNDFCODIxQkIwNUQ3NUU4QzVGNjhDMEVDOUU1QzkwMURCNkUxNkE5NiwgMkFEQ0I5RTgzNEE2NTM2RDI2QzAzMjVEMEE5QjhBMDVGMzI1MjNCNzdBQUVDQkIzOTAyNTk5MEQKK0NGRDQxQjkxLCBFNzAwNDY2NDkzQjUxQzUyMUM0QTdERTA3MUJDQjg5NjM1QURBNDY5QjdDQ0ZCQUVERTg0RTZFNywgMkRGODgwOEZCNDY5REYxQTU3NjIyOTFCRDcxQTZGNDdENUE4N0M4Rjc3ODQ5NDQzQUQwOEIzRjIKKzI2RjdDNTJCMywgOTg1ODA5QkYwQkYzNERBMkM5MEFCRURERUI1NDI2RTc3OUEwNTE0NEMyMzM3MTVFQTJGMUUyQzgsIEI0MkUxNTIzMDU4NEZBQ0M1MTM1NUU2MDJDQjUzNkE4OUVCREU4NTRDMUI0MTEzMTNEQjMyOTJGCis3NEU3NEY4MTksIEY0MTgzQzNCNEFBODY5NEE1ODFGNkZGQzgxMUU4RkEyOTczREIxQ0EyNzIxQzE3NzFERjdCNzQxLCA5ODEzNTRFOTcxNkEwQjNDQkI3ODk1OTIxMTY0MkM1QUZFN0RCOTRFN0Q4NzRCNzE2RURDOTZEMworMTVFQjVFRTg0QiwgQzkwRDc4MjMwOUI2QzM1OEM2QTA0MDkzNkEzMjZCQzRGQkRERDVBMzAxNkNEMDQ5NDlGNjQ5NDEsIDRDMDhDMzUxQTQ0QkVCNTYwOEFDNzJFOUNGRUMzQkY2RDYzRERDMjg5MDIzRTA2Nzg3MDA1OEYyCis0MUMyMUNCOEUxLCBGMTU3ODhBMEJCRDUzQTQ2QkFFMjQ5RkUxOTdERDVERDZGRTBFOEEwRkFBQUY5RjMxREZFMEM5NSwgMTFGNjZCRUIwNkU0RENCMTNCOTdFQjgwRDMxNDAyNzM0RUYwNzhEMzQxNTIyNjYyNDU4RDMzRjEKK0M1NDY1NjJBQTMsIEZFOTc4RjNGNTc0NDFFMUUwOTk5QkIxMkNDNzc0RTMyRDlDODkyOEVFN0ZGNTg5RDIxQ0Q5MEMzLCA5RTdFQ0Q5Mzg4NzBBNUUzQUFCQUU5MkZBNzUzNTcwNzc3N0Q5RDgwRjlBMTREREIzMTA0MkE1MAorMjRGRDMwMjdGRTksIEFGRDg3RjYyRDIyODQ1MEI5NjEwOUU1MjA2Q0MwNTUzRDlERDg3NjBBOUZGMDUyQjIzMDk1MzM5LCA1NkYxNDU5NTJBNDY4RTMxQUIwNkNBQ0ZDNzg1MEVGRkVGRUI2REE5NjdGRDM5QzRGRDhDODlCQQorNkVGNzkwNzdGQkIsIDVFRDAzNjU5MjUxNjUyN0I2Mjc3NTc5M0ZGMDhENDU0MDBFNTBGMTk4NTgzRjI5QkNGNkEzM0U2LCAyQjkwNzM2MTFCMjRGN0NBNjI1NUI5NUJDQ0UxOUEzRDk1NTRBRDEwQzdGMTg4Rjc4REY1MDY1QworMTRDRTZCMTY3RjMxLCA2MEEwQTU2NzZBQUJBQUZBRDY3NTk1RUVEOTU3RjA2MEE4RDkzNDI5ODVDQjYwN0JBMjEwREJCMywgM0FCMDUzMzhGQTEzNEM0OTc4NjczRTkxRDc5MEU2RjVFRDI4QTQ2REE5NDMzREFCRUU3MjAyNEQKKzNFNkI0MTQzN0Q5MywgQkEzM0JFN0RFRjQ4NjREMUQ0MERCN0UyNTg2NTgyNThFMDRBRDFEMTIyMTkwOUI1QkNERUI5RUQsIDk2REE3QUQ1MTJCNjlDODdBM0ZGNkFGODlDMTQ2QzczNjEyQzhGQTE3REE2RkMzOUVDQzJDMDAwCitCQjQxQzNDQTc4QjksIDU2NTkxRjBBRDc5NjRFQjY5RDJDNDIyQzcwMDkwMTRGQUY0NUQzQzRGQzRERkZCNjYxNzBERjcyLCBBQTNEQ0YwNDUwRjIyMTkzQUE1ODZEMTgwOTBERTJDMkRDNDU2RTcwMTc3MDFDNzlFRENENEJBCisyMzFDNTRCNUY2QTJCLCBENDQyMzczOUI1RDJFODFBQjg1QjJEOUY5QkZGRkE0RDlFMkU5NzIzODY0MkExQzJBNUZDQTVCMiwgMjgxODE3RDI5QkNGQjE2NzcyMDhFQTI3NkI0QUFBQTAzMTAxN0MyNTJFM0Q3NDI5NjA0NzQ0QjIKKzY5NTRGRTIxRTNFODEsIDJGRTYxOEFCQ0QzNTREMTREMTc1Qjg5QzJGQTg3MjdGNzU0RUQwNTQwOEY4RUM5NTNEN0EwMjlDLCA4QTBGNzRBNzBGNkJGRUVBNDgyNUFDNkQ0OTQwNzA5RTM4QTlEMjQxQjlCNjdCQzE1QzEzMjlEMQorMTNCRkVGQTY1QUJCODMsIDFFNzlDRkJEMTcxNDI1RTUzMjQ2RDE2NDk2MzJFQTgyMzIwRDA5RDEwNDU0MUJGNjQ0QjQzMjc2LCBGQzQyNjVCRDgwRkI0NkE0Njk0RTIyMUUwNEVGNkNFODVGMkYzNDk0NzYzNTFGQkJDRjA5OEI3NworM0IzRkNFRjMxMDMyODksIDI1MzFDQzRFNzg4RUVFMzNGRjQwRjAzRTYzRkVGOTk3RDdCRTIwQUQ1QUFEQzAyREY5M0FFRTQyLCBBNzM4RDM5OUM1QjM1MzgyMTlFMjEyMTcxNEEzMTZGNDI3QjI1NTVGNzg5OUY0MEE2QUQ4OTlFQworQjFCRjZDRDkzMDk3OUIsIEE1QUM0MkQ2MzQ1QTlENzVEQ0JDMzVGM0U5ODk1RDk1M0VGN0QxNUI1NDM1OURGNkJDQTFEMTVDLCBENTVFQUQxMTI0ODhDNTc2Qzc1MUM4MzIxNzZFQzdBRkREN0QzMTQ0MEJDRUE4NkI5MzM0NTE1NQorMjE1M0U0NjhCOTFDNkQxLCA2MzAyRDA3OTc1RTlCQzBFMEM3OTRERDM2QUJDMzlCMTUzREZFMjkxQzhDMTczMURFNEE3MzkyNiwgNjAzMkNDMTQwRkFDMTYwMzYwMjM1NEYzRkY5OUY2MEZBQ0ZGQkJENDM5M0IyNEVBMDYwMUE0MDcKKzYzRkJBRDNBMkI1NTQ3MywgMUZFMDAzQjE5NkU1RjBCRkI4OEFBMzQzRDU5MTlFN0M1RTE5MDI2OTU2REZBRUZGMTBCNDFENiwgNjI0RUI4MjkxMTZBMzM2RDg0NzI1OUY4MEVDNDVCNkIxRDY0NEMxRjVEOEREQzgzNDA0RDM1QkYKKzEyQkYzMDdBRTgxRkZENTksIDkwN0EyMTJDMjBDNzBBN0U1M0E5MzQwMzMwQkMwNTQ5M0REMTg4QTdDRkVFNUZBMzcyODg5Nzc4LCBDM0ExM0UzRDc3RjI2OUM2N0M2NTQzNjc4RTYxQTM1RjM5MkRBODVGNDlCOTkyMTA1MzUwRDAwCiszODNEOTE3MEI4NUZGODBCLCBEQjQyQkRCRTA3NkY3RTc1QzM0QzJCOTI3RTczRUM3MDkyNjU5OTVCQzQ1MTJBN0U2RjA0QzEzMiwgQUUyQTQxRUUxMDlDQkNBMjZFMzE4QTE4MDAzRTJEN0QxQjU1N0FDQzE5NjI0NENCMTc1REQ4NjUKK0E4QjhCNDUyMjkxRkU4MjEsIDE3RjBCQUYxNzc5RTMxRUNBRTAyQzEzOEQ2OTEwOUNBQTFFQkUxMDFGOUFEOTFEODI1RTFEM0Q1LCAyNEI3NkFDMDgxQzk2NDk3QUE3QjhDREY2MTRFNUE1QUE1M0ZCNTNGMUQ5MzM2OUI5REE4MTkwRQorMUZBMkExQ0Y2N0I1RkI4NjMsIERFQzk1QUY2Nzk3N0E5MEYyQzgzMUY4MjJBOTg4M0ZERDNCMTE5QzlDQ0M1NTJFNzE0OTA3RjIxLCBCMTYxQjg0MjA1MUQyQ0Q4NTgyQ0YzNjVFNUY5MTk0MTFDOUUyN0VDREI4OTZCQTZEQTIxREZFRQorNUVFN0U1NkUzNzIxRjI5MjksIEQzNENCNTAzMEQ2MTU4QTBCREE5OUE5QUM0MDIzNTU5MUMwNDA5QkVDRTRBMjhBQTdFOTg5MTI4LCA3OEQ2NzBBRjhEMzFEMDUzQjUzRjY3ODU0Qjc3NTVGMzhDREE2NzMxMTQ1Rjg5Mzc4RTJFREQxMgorMTFDQjdCMDRBQTU2NUQ3QjdCLCA4MDYwMjNGNjAwRDJEMzVCMkI5REE5QkUxMDc4MDJGQkQ5QjA0RjRGQjU2OTA1NTg4NUY4NDE3NCwgODQ2M0RCNDkyOTZFODY3NTA4ODhFMDYzNTNFRDQyNzMyQzk1RjVDNjFBQTQ2OTY1MDhGOUJBQjIKKzM1NjI3MTBERkYwMzE4NzI3MSwgMjRGODI3NENBNTI4MkNEOUZEOTVCNTMwMjJGNUNEMUI4NzhBRERFRDFEN0EzRENGNDZEMjU3ODYsIEIwNDg1REFFNDY3RDY3OTVFQzk3REUxRkI0NDg3RkMyMTEyRDU3OThCNzc2MDVFNUM4RDNGNzdGCitBMDI3NTMyOUZEMDk0OTU3NTMsIEU3RDBCNDFERDIwQUY1QTM2MTc2QkNDMjM0QUVFMjVGRTdGOUExMjM2MEU2MjA0M0YxMUZGMkFGLCA5ODJCREIxQ0ExNDA4OENGNkE4MEUzQTlDRDVGMzI5QThDRUQ1QUZBRDUxOUZGRDdBN0NCM0RBRQorMUUwNzVGOTdERjcxQkRDMDVGOSwgNDE4REQwRjI5OEREMDI2MTgwMkNERTI4QkNFODQwQTAwN0UwOUNGQ0ZFODVGNTE4RjdBRTRDN0EsIDc2NkMwQUI3QjhENEIyMzUxRjcyQTkyNzU4M0E5MjdBNDY1NDY5MzFCREY2NkU5RDUzRTc5MTMKKzVBMTYxRUM3OUU1NTM5NDExRUIsIDI2RDgxRjhBQUYzOTJERjIyMTZCNjhDMjEyNTExNUIzQUVEMTE3QTRGMjA1ODhBMTNDMkQxRUU2LCBCRjk1NzUzMDczNzAxNTFGN0YyMTc0ODJDNjM4NTE4OTVDREE3REY0OUI0MDZBRDgzNDQ5QzYzMworMTBFNDI1QzU2REFGRkFCQzM1QzEsIDJBMkJEQUI5RjFFMzQyNjUyNkVBOEEwMkVEQjc1MDQ3OTNBMDIzQTdCOTRGMTc1MEEzNUYxMjkwLCA0NkZBNDE5MzNFQTQwRjg1OUQyMzBEMkFGNzZEMzA5RjRCNDI4MzE5NjQxMzFEQTc4NzlBRkZBQQorMzJBQzcxNTA0OTBGRjAzNEExNDMsIEY4QkMwRjdGQjcyNEIwRTk4MDY4REM3QzY0OUM4NjQzOUQ5QTBDQTExMEQ3MDUzNEMyNDlBOTU3LCA1NjdEOUQxNjExMjIyODI5Rjc2NUUyMzNGMjg2NUNBNzY1QzUzM0E3NURGNTJBOENBNkUyRUU0MgorOTgwNTUzRjBEQjJGRDA5REUzQzksIDNFNTJEODVDQkJFNjY2MzVDRUJFQzkzRkZERjA5OTg2M0FDMzUzMjI0ODgyODQwNEM0NDg4QTY2LCA2RTMyRTdGREJBM0Q0MTIxMzcwRTZFNzQxOTI1OEVGODM0MzRBRDkzQUIwQkMyQzQyQUJERDMyNAorMUM4MEZGQkQyOTE4RjcxRDlBQjVCLCA2QjFGRjA3M0EzQ0Q4QTY0QUU3NkNDNDI4QjgzRDI1QjlEQUEwRDgwODMwRTk4QjhEMzBCMUFEOCwgNUQ4OEVDOEEyNkQxQ0UwMDY1NDY2NzIxQTVFQkQyMTk4M0U1MjEyQ0U3Q0UwRTg2NDEyQ0M0Q0YKKzU1ODJGRjM3N0I0QUU1NThEMDIxMSwgRjg2NkUzRUYzRkE3RTA0QkRBRURFNjk3OTNBNDhCMUExMUYxODQwMDdFMkU4QkYzRTdCMEIxM0YsIDg5Q0JDQURDMzk5NzBDREZDOTA4MzkxRkMzMzJCRTQ1QUI3MDQwQzE1NDkwOEIxRkE5MzYzRTQxCisxMDA4OEZEQTY3MUUwQjAwQTcwNjMzLCAyNzA4OEJFMTUwNDI3MjZDNTkzNDUwNENDMDk3RURCODI4QjgwOEUyNzQzODIxODRBMDQ4NjVGQywgN0UyODg0MkIzRDNCMTQxQThGQUZGNEVDNUZCNDUyM0E4MTdGNTMzQkEzODc4QkY2MkRFNDkwRDIKKzMwMTlBRjhGMzU1QTIxMDFGNTEyOTksIDc2MTJBNUVGMkE0RkUyQUNDOTY1RTlFQTk4Qzk4MDQxNDAwODgyMDA0NEM4RDI0OTRBNkU0OEExLCA4MDRGODg3NUU0RkQ2NzA0NjBFNkU4Nzc0RTNGOEVBN0FCRTEzMkVCNEY4NTM4QzBGMjYzRTc1MworOTA0RDBFQURBMDBFNjMwNURGMzdDQiwgQTJFMDdFQjQ0QTQwMjY0RDhDRkE5MzExODk4NUUyQUE3MTVEOTgzNEE3QTJGQ0E1MzM3MTA1QUIsIDgyRUU5OTI4NUQ4ODc0N0M5QTk2OUMwM0REOTFGOTc3NDlBNzk1NTU2MjA2OTM3RTAyRUI3MDcwCisxQjBFNzJDMDhFMDJCMjkxMTlEQTc2MSwgRDEzMERCQjY1ODdDNzRENzlBN0IyQzI1NDY3RDg3RDYzMjkwMjAxQkMxNDJBMjZBM0Y3NzI5RjgsIDU5M0Y3QjUxRTVERTg0MzkyOTE3NTg5NDlBMjg3OTQxRTJEMEM5QzE2RDI1N0I1MEU1OUU1NjU3Cis1MTJCNTg0MUFBMDgxN0IzNEQ4RjYyMywgNERCMTgyQTMwQkJFNkIwRjBDMTczM0ZFQzBFRENGMEYyOUY2RkYzQzMyMjRFRjE2NUI0MDEzNUYsIDJGMUIyODRGQjkyRTQ3QzdCQkU5QzQ5Qjk5QTZFNjNFOTVBOTI5QTIwNDNBM0FEMTU2QTgzMUM4CitGMzgyMDhDNEZFMTg0NzE5RThBRTI2OSwgOTE1MDdEQzBEMDUxMzE1QjM5NEM5RDg4NjhCNTIzQzE1ODBDQTAwNkQxMkFGN0E1OUI3NDI1OTUsIDhDMzVFNkFCREVBMTBFMzQxNDdBQkRENTFBMzM4RDA0M0E3REUzNkM2NkNDRUZBRTgyMzg4NTIxCisyREE4NjFBNEVGQTQ4RDU0REJBMEE3M0IsIEM4NjlFMTkxNzcyRDc0MTZFMDg1NEZDNjI3Q0Q0RDUyQzhFMURDNzA2MzY4RURFRDg2QzBBNUM5LCAxOTU4REIzNDM4MjYwMzg5N0ZBNURCQjQ4MUFCOTQ5MUIwQjQ1NjNEOTQxMTcwN0RCMjdFNzVEQgorODhGOTI0RUVDRUVEQTdGRTkyRTFGNUIxLCBENzQ1MjBGQUQwOUMyNEQ3QzgyMjlEMjEyNjhEOUY3OTZDRTY3MTY0NkM3QTFGNjYzMTEyRTNENywgQTM5RDA4NTZBQjA3OTBGQzQxNzUwQkY0QjQ0NDcwNjg1ODQ3ODEwQzU5MUU5QzY1NDk3QTcwMDMKKzE5QUVCNkVDQzZDQzhGN0ZCQjhBNUUxMTMsIDZBODU0MjUyRjFFNkEwQjM3NkJFREFFMzU0QUYyMzAxMjk2MzM2NDU4OTQxN0VFOUEwRTBDOEM1LCBBOERCRjc1QzlBRTgxMDhBRUE2NDA3ODM5REIwNTc0NTVFNzVFRkYyNEIxMjY3ODJEQkYxN0U3MQorNEQwQzI0QzY1NDY1QUU3RjMyOUYxQTMzOSwgQTdCRTc4OTU0RTY3MTE4NTA4ODFBQUVGMzBBODA0RTk1MDkxRjRBQ0UwQTQ1MUM0RUZCQkZDQzQsIEFFNDVGNDExMTcwOTEyNEMyNDY1NkI1RDlBMDBBMkVDNjMyREQxRjlFMEQxOUI3QzRDNzRFMkJECitFNzI0NkU1MkZEMzEwQjdEOTdERDRFOUFCLCBCQjZCRjZENTIxMDFENzE3MTY5MkIwNzY3MTg5MjYwMjQ5NDlCMkZDMUNBQ0M0QzIxN0UyMkE0OSwgRjRFMkU5NDVENkEwNDdBQTNDMTlFOEFBQzA2NzA0RDZFNkEzRTY1OTdDOTY1MjIyRUYxNDYwNjAKKzJCNTZENEFGOEY3OTMyMjc4Qzc5N0VCRDAxLCBGRENBQzRGNTkyNDk2MDlBRDI5NEM1MTlDOEFDNTNERTJGMDAwQkVEOUZDMDRDNEM2QjhGMkI3MiwgM0QyRTVDNDJDNTYzNTcyQkM5MDFFOTIyRkJFQUIzRjA1MzYyRjMwRkIwNjQ5MjdDOUYxMkI2Q0UKKzgyMDQ3RTBFQUU2Qjk2NzZBNTZDN0MzNzAzLCA3ODg0MTc3MUU1OTYxN0Y4NkYyNkY1NEUyOUZCMzREMEJCQkFEQkUwMzYzMzJEOTVDRENGOTlFRSwgNDMwMUVFNkZBQjc0MTZBQ0M1NTNDMjcxN0Q3Q0QzNkQ1NTQ1RjFCQkZDQzNEOUQxQUM5OUNGNzMKKzE4NjBEN0EyQzBCNDJDMzYzRjA0NTc0QTUwOSwgMzRGOENEM0M0MDc1Q0MyNDNFOTBBRDc5MUZDQUQwODYzQTBCODc4MEU4MDczNDlDQjk1RjgzNTYsIDY2RkY4NkFCM0M0RkU2NzU5NTc3MDdEREUwNTQ3NTFFQzRGNjMwMzEzREExRDNFQzMyNDg1OTlFCis0OTIyODZFODQyMUM4NEEyQkQwRDA1REVGMUIsIEMwNjM0MDBBMjVCQzBGNDk0RkM3QzE1MEFDQUI3QTYyQjExN0E3MDhFOTEyQzE4OThCRUNGNjA3LCA0RUE4RjZGQkIzMkIzRTg5MTk4OTExNzMxNjRBNjNCRjhCOEZCOTY0RTBCMDA0RTU2Mzc5RTA0OQorREI2Nzk0QjhDNjU1OERFODM3MjcxMTlDRDUxLCAxQzk0NTVCNjc2NDg3QkFBOTI3NUNGNDc0RjI1Qjc3QzA1Q0QxQ0VCQkE1RTgzQjcyRTg0RjhDNSwgRjc3MUYwNDAyQkNEM0ZCRTU3QkEzMTU1RTc2QUY2RjFFRjQ4OTVDMDcyRjI3NTc1RUE2NzRCMzgKKzI5MjM2QkUyQTUzMDBBOUI4QTU3NTM0RDY3RjMsIDNFMjQ2RDFCRUFENUI5QTY1QTY0NjJCMTQ0RDc0RTlFQzkwNjBENUNCREY3MTk5RDAyNzFEM0JCLCA0RDk2RkJDNDA0QkIyMDhEMjI4M0RDQjQ0RjkwN0U1NjNDMzcyNTU1MEVDNjAxRDExNDY0QzRDRgorN0I2QTQzQTdFRjkwMUZEMjlGMDVGOUU4MzdEOSwgNDQ4MDk4ODU4OTBBNjgyQUEyRTVBM0UzNkRGMzBGNDk2NTBFNTM1OTdBOTBFREUxNjJFMEE2NjMsIDMyRjJFRkEwMUYyMkMyRjVDMzVFNzE1QkNGQ0NFRThBMUQwNTRFMzFENkJBNjdFNkY2NkI1MUQyCisxNzIzRUNBRjdDRUIwNUY3N0REMTFFREI4QTc4QiwgMUVEOUExREEzRkYxRDg5NkU1M0RBNUFFMkQxQUJCNTUzMUYyOUQ4QUVDRTAxN0VDMjczMzMwOTksIDgxMEE1RDMyQjg1MjY0MEY2MTA0M0Q4OTA1Q0M0OUY2QjlFNUUxQTg2NzVFMTE0REJEMTBFMjgKKzQ1NkJDNjBFNzZDMTExRTY3OTczNUM5MjlGNkExLCA5NjNCQzYyRTUyRjNFOTA4OUE0Q0ZBRTg4ODlBQzM2QzAyQ0E1Q0E4NzAyNTVCQkE0MUQ4MDk5MiwgODI4MzAzNkVDNzJFNzc2NTY5NjVBMzIyRUFFMTgzNURFRkU4MUJDMkJCNjA2QkUwMzlBQTA4QjEKK0QwNDM1MjJCNjQ0MzM1QjM2QzVBMTVCN0RFM0UzLCA1OTUxM0IyN0QzMkY1NDg3RTdCQzI2M0NBODE2MzgyNUNBMzAxQUQ0RkNEMkFGNkJDMzhDRDhBMCwgODZGMTBDNjNEOERERjYwMkZDNUZEMUZGMjEyQkQ2MDE4RkQ4RTg0RUUyREQ4QUY2OTkwMzBGREQKKzI3MEM5RjY4MjJDQzlBMTFBNDUwRTQxMjc5QUJBOSwgQTZGREIyOTY5NjM5RTU3OUZDNDMyMDQ1NDE0QkU0MUM3MEREQTJFMDhGMDM4QTBBNUJCNDJBRTMsIDY3NkY3NkRCRjQ0QTgwREJFNjc0Qzk3RTkyNUFEMDczQTIyNUFERUQ1MkE2NkVBRDE3NDNFMzQ5Cis3NTI1REUzODY4NjVDRTM0RUNGMkFDMzc2RDAyRkIsIEFFM0M1NUY5RjkyQUY4NkUyRTI0NjkwMDkzMjc5NzIxQkE4QkM0NzBDMEJCMzA2MjlERTdBODMwLCBCODlGRDAyMDdBMjI3MDAwQkI2OEIzMENCNTRFMzBGNEZCOTFENTUzMDE1M0I4MkQ1MkVDODY4OAorMTVGNzE5QUE5MzkzMTZBOUVDNkQ4MDRBNjQ3MDhGMSwgMzQwRTJDMzMzQ0JDNEY1NTRBOUQzOTVGODFGREM2NTEzNDUwNEREOTQwQzVDMTY5MDk2QjJFNkIsIEU0NjQ4MkQyQUNGQzZCN0REMTI3OTQxMThCM0ZCNDg0NDcwMkU2QUQ0MTBFQkIyNTcyRDcwQzJECis0MUU1NENGRkJBQjk0M0ZEQzU0ODgwREYyRDUxQUQzLCAzREJDMzBFNEM4NUNCNzZFN0FCMTNDRTkzM0MxMjRCQkNFNDc4MEVEMEU1REQyMDlFRjNFMEQ3OSwgMjQzNkZEMTAxREI0ODNDNEE5QUVENENBNDY1MjQ4MTQ3NjNFMzNERjc5OTU5NDE5NkZCRDVGRjAKK0M1QUZFNkZGMzAyQkNCRjk0RkQ5ODI5RDg3RjUwNzksIDhEMjMyRTJDQzJCRkQyQUJGMjM4MUVCREY4RTJGMjA4RUI3MjIxRDYwNTFBQTNGODQ4QkFEN0FBLCA4NDM3OUNBQ0M5N0NCNENDM0UwMzhGMDNGOUMzRTM5QTk1QjI2OTJFRjMyMDc5OTJGNkJDNUE3MQorMjUxMEZCNEZEOTA4MzYzRUJFRjhDODdEODk3REYxNkIsIDQ3NEU4MDYxMTNFQkVENUQzMjA3RjM2OUI5MDI1QzkyRTU3ODE4ODJGRDgyODNEQzE1NkZFQzk0LCA5MkMxMjU1QTIzNTdGNTdEMjAzM0Y2NDhBMDdDQjhCRjZFRDk3NkRGOTI3MjNGODNDMTc0MkM2OAorNkYzMkYxRUY4QjE4QTJCQzNDRUE1OTc4OUM3OUQ0NDEsIEVFRkZFQjZFOTY1NzlFQUJBODQ4MTNDRTdEN0Q4Njg0QkM0NTI2NzgzQkI5OUQ3NjY0MTJDOTNGLCA3QTg4MkQ5NjZDNDFBNzc3NkRFMTZEODM2MjdCRjI2RTZBQTI0MzhBQUFDNTA5RUNCNTlGQzE4OAorMTREOThENUNFQTE0OUU4MzRCNkJGMEM2OUQ1NkQ3Q0MzLCBCNkQxQzc0NEU1RjFCNTAwRjdDMDBGQTNBQ0Q3NzZBNEQ0RkRBNzBBMUFENkZGMkEyOENCNTQ0MCwgQjZCMUI1M0JEQ0YxRDVDMzM4OEM3QjlFODlEMTNCMzE3OTM1REU0MkUwRUE3OTZEQjRDRDRGOTUKKzNFOENBODE2QkUzRERCODlFMjQzRDI1M0Q4MDQ4NzY0OSwgNTY1QTI0MTNEQUEyNDFCRDc4RTAwMEQ0NTE0NTg2QzMyQTM2MThCMDU0MEVBNDZFNkU0MDREQTEsIENFNjA1NEMzNjdDMDEwOEQzQUU0QkExNDMzNTNEMEU4OEI0ODUwNzIwNkJGNzA5MjhGMkQ2MTJDCitCQkE1Rjg0NDNBQjk5MjlEQTZDQjc2RkI4ODBEOTYyREIsIEZEREI3NTU0MkVDMTMxMkNFMzdEMjdDODZCNzEzMzIyRTcxREJEODYyRjdDMzIyMjVBM0ExQUJDLCBGODlFRTdBMUQxQzRFNEUyMTFBNzA4MEJERUM2QTU5MjFDMjg1QUNCQTdGNjk3MUMwMzFGMTM4NworMjMyRjFFOENDQjAyQ0I3RDhGNDYyNjRGMjk4MjhDMjg5MSwgMTM5NTdCRkNFMkVGMURBMzg2N0JGRTIyRTMxRTQwNzIwRTRENEE1ODgwMzU3OUZGMTJDRjcyRkUsIEI4MkRFN0ZBQTI1MjhCNEE3N0Q2MjU1OUVDRkQyMzIyQTRGQkUxOEVFNTExM0QxRTQzQzI0RDg1Cis2OThENUJBNjYxMDg2Mjc4QUREMjcyRUQ3Qzg3QTQ3OUIzLCA4NjBGNjFGMTFBRjgzQzJENkI2NkRBOUQ5NDJDMkU1QkY2QjMxNTk4M0E1OEZFMTlGMzgyNzAxMCwgMUE2ODk0QjBENTcyQTJENTk0MEYyQ0UwNDZBQjQwMzM0RkMxMTQ1REJDOEUyREQ4N0ZEMUUzM0IKKzEzQ0E4MTJGMzIzMTkyNzZBMDk3NzU4Qzg3NTk2RUQ2RDE5LCBDN0M2N0U1RTA2Mzc0MUUzOTA2QjEzRTdDN0QxNjVDOEYxNkQ5MEI4MzdCNTI5NEFCQjAyQ0EzRSwgOTEzOTQ4MTJGRDNBMzVFMzU4QjI4NjRDOUU5QUFFMjcwRjk0ODM5MEIzQjFCOUZGRjVEMjM1MkMKKzNCNUY4MzhEOTY5NEI3NjNFMUM2NjBBNTk2MEM0Qzg0NzRCLCA4RTA2MjhEQzIzNTk2NDkyNTVCMkZCMEJDRDgyMEFBNUVGNDZENTJGQ0Q0RkE5QzZEMjkzNTcwNCwgODE1NTk2RERBMEQxMzhGOTAzODFGQzYzNTkxRjkyRjZEMEVEMTkwMjhERDY0NTdCOEQ1NkI5ODgKK0IyMUU4QUE4QzNCRTI2MkJBNTUzMjFGMEMyMjRFNThENUUxLCA3OUM0QURCNjA1RjlDMEIzNEY1MjI4MTgxNzk2OTc3NUZGRDYzRjM2QjRGNjk2QjA2NzkwRTYxRiwgMjIxNzFDMDgyRUFFOEVFNTM5NDM4QTNERUU4NDA0QTk0QTE3MzdGMDg2NDU0MDNGQjMyRDc2RkYKKzIxNjVCOUZGQTRCM0E3MjgyRUZGOTY1RDI0NjZFQjBBODFBMywgODNFMkI1NDFGNzBCNUY0OURGMzg1QTQwRTkxRUVEQjQyNDMwQTEyM0M3M0JENzE1NzNDNEFENjgsIDQ3MTA2NDM3MjY2MUEzQ0UzRkQ4MDE2MDQ2NzY0MTNGMjlGMzdFNUEwNzZGMzA3RDY4NUY4NjI3Cis2NDMxMkRGRUVFMUFGNTc4OENGRUMzMTc2RDM0QzExRjg0RTksIDdFNEM0NUI5NEVBQUM3QTQ2M0RGMjNGNUQzMzBGOUI3RDdBMTMwQ0FGNkQ5QUUyNTMwMTUwNTRDLCA0REI2RURERUQzNDhBOEUzRTMyNjBFQjdENkE3MDJBN0U5REQzNzA2QzNFQzQwMDFBRTFBMTMwNAorMTJDOTM4OUZDQ0E1MEUwNjlBNkZDNDk0NjQ3OUU0MzVFOEVCQiwgNUIwRTI3MTRBQjczOTM3OUE2NDJFQkJCNkRGOUE0MkZGOEJGM0FBMDhERjJDODc0RTM0MEFEMTIsIEQxMzc4N0E0MjI2NjlFQTk2NEM2RTY5NEMzRTZBMkZFRDRBNUJCQzU0QkY3RUI2RTVDRkY1NEZDCiszODVCQTlERjY1RUYyQTEzQ0Y0RjREQkQyRDZEQUNBMUJBQzMxLCA4MzVDRURCMjQyRDJGQ0UzMENDMjVFRDQxMzAwMkFGODFDQTNCRTY2OTRCQjI3NDBEMkM3QUZFNiwgRjRGMkZBNUExMzkwRjA2QzEwMzczQ0VFOTI3QTI3NTNBRDRFNkU3NkUxNkU4MjQxOTkzNkZBNUMKK0E5MTJGRDlFMzFDRDdFM0I2REVERTkzNzg4NDkwNUU1MzA0OTMsIENFOEFDRUE3MzIyRkNCOUQwMEY3MjYxM0Q3MEVFQ0YzNjM0QzE4Q0I3Q0RCODZCODVERjI1QjE2LCBGOEQ3NDIzQzAwM0VCRUREMzhGRDI4M0E0NTgxQjAxNjU1NEIzQjZGMTlDN0EzQjIxRjFCNUY0OQorMUZCMzhGOERBOTU2ODdBQjI0OUM5QkJBNjk4REIxMUFGOTBEQjksIEE1Mzg4OTA4NzA0QkQ3MDM3MzAzNDUyQzlDRDY1MkIwMTlCOTBCOTEwMkUzNEM2Mjk5NTEwOUUyLCA1N0I3RkJEQzgyMDUzOUU2OTc1NjAwQUE1NUM0NTIxODAzODVBQjZDREI5RkE5Q0NDQjM5RDVCCis1RjFBQUVBOEZDMDM5NzAxNkRENUQzMkYzQ0E5MTM1MEVCMjkyQiwgMTg0NkMyQTgzODJDQTdEMzVBRTI1OUE1Rjk5MTc2NUIwRkZFNjg2Mzk4NENGQ0I5QzVFM0YxOEQsIDkyMTdCQjg2NzVFNUFBNzBEREM5MDdGOUU3QjM3MDRENkY3Q0E3OEU3QUFGQTc4RjRCRDNEMzI2CisxMUQ1MDBCRkFGNDBBQzUwNDQ5ODE3OThEQjVGQjM5RjJDMTdCODEsIDRBQjIwOUU2NDU5NzJCNTg3NUJDNkZCNjdGNDUxQjg5RTFEMEU5OTgyRkJBREVFN0Y4QUU5QUU3LCBFNTEwOEIxMDgyMjgxRkYxQjdFMUMwMEEwQUZBNzkyNTQ2OUI3NjUzODVCMDM5Q0YwQUNBNEE4CiszNTdGMDIzRjBEQzIwNEYwQ0RDODQ2Q0E5MjFGMUFERDg0NDcyODMsIDQ5MzhDNjQzNjY5NUQ0QkQxQkY5MzkwRjgxQzc0RjlDM0Y0MDlEMjlDRThEMUM3MjRCMUQ5M0FCLCBBRUEwREY1OUIyOUEwODk1MUYzMjAwMUUwRUM3OEI2N0U4QkQwMjZCMEIwQTVFNUU4QjY3QTY3QQorQTA3RDA2QkQyOTQ2MEVEMjY5NThENDVGQjY1RDUwOTg4Q0Q1Nzg5LCA1MTNCOEUwN0Y0RjMxNUU4NEVERDZBQTY1RDhFQzAzREYzMjREM0ZGOENBQ0RBRjU3OEMxOUJEOCwgMTcxQTBEM0JCOTAzMUQzQjFBM0YzOTVBODlCQURFMkMwMTVGQjc3RkUyRjcyMDYyNzkxM0RFNUIKKzFFMTc3MTQzNzdCRDIyQzc3M0MwQTdEMUYyMzE3RjFDOUE2ODA2OUIsIEU4NTIyN0M0RjVDNzA0OUY3QTNFMkQxQUY2RjgwOUQ0REQ0MDYwNTg2QTdEQ0Q4QTk2MzJFMzBELCBDNTBFMzQzRTA3QTlCNjJCQzNGOTBGNTY4QkRCQjQzODExOUFGMjkxRjc4NEYzQ0Y5NDE3MEIzMgorNUE0NjUzQ0E2NzM3Njg1NjVCNDFGNzc1RDY5NDdENTVDRjM4MTNEMSwgNTAwNEY0MURDNzVBNTEwMEQwQzRDOTRCNUY0QUJEQzgzMEJCNzBEOEEzRUY4QkE4MEY4QjAxMDYsIEQwMUQ5MzZFOUIxMjc1NDEzRDZGNUEzQUU2OUM1MzMzN0Y5MkE5OTk5QUM2QTE3NEQ0QkI3QkRECisxMEVEMkZCNUYzNUE2MzkwMzExQzVFNjYxODNCRDc4MDE2REE4M0I3MywgREEwOEI0RkEyNUQ4RUZEQUEyMUNCMTZBRjBCQ0NDNUExRkI4NEYzNkIwNEYwMUY5QUJGN0E0NjYsIEVGNUZENUJDQTEwNDI3QkM5RTlFQjk3RkU2NEI1MjUzOEJEMkE0Mjc2N0VFMjRFMjhEOTk4Rjc5CiszMkM3OEYyMURBMEYyQUIwOTM1NTFCMzI0OEIzODY4MDQ0OEY4QjI1OSwgNUEzRDdFNEZGNEFDQjlFMkU0MkUyOTFDQjBBMDAwNTVFOEQ1NjQ2NTZCRjgwMTQwQTY5QUM3Q0QsIEQ0NDQ2NUFCOTg4OTA3MUI5NjRFQTlENkREMjI5M0MyRkQ1REVDNUYyREExOTY0N0UyQURERUM5Cis5ODU2QUQ2NThFMkQ4MDExQjlGRjUxOTZEQTFBOTM4MENEQUVBMTcwQiwgRjQyNkM4QjI2RTY1NTkwRDdFNDgyRUQxNEUwQTc1M0EwNEY3NDhFNkNBNjhBOTVCMTA5NDIyLCBBQTkxQkM0MEFGN0UyREI1MzEwQUUxNkE3OTE1NDYzMjdCM0Y2NUM2QkU5RDBENDhBREMxNkIyQworMUM5MDQwODMwQUE4ODgwMzUyREZERjRDNDhFNEZCQTgyNjkwQkU0NTIxLCBGODcxQzk3RkEyMThDMkI5QTI0NkRCMUM5ODM5NTBFOEVEMkE1QzFGNzgwRDFCQTkwRENGNkQzMCwgNTk2MzAwQ0ZEQzFCNTUwRjdBRDcwNzNGRDcxREUwMkNENzE4N0E5QjU1RTQ2OTUzNjQ1MzRFRjIKKzU1QjBDMTg5MUZGOTk4MDlGODlGOURFNERBQUVGMkY4NzNCMjNBQ0Y2MywgRDZCRDlDRTc2REIyMzg5RTJBOUYwMjgyRkUwOTY1MDU5OUEwRURBQkVGQUY5NEQ2ODAwNDEwMzUsIEZBNTQ2REVFRkVEN0IwMDFBNzczRkFCQ0E4RkU5NjIxNzQwOUJEMjQxN0QwQjNBRkRDRjlBNjIyCisxMDExMjQ0OUI1RkVDQzgxREU5REVEOUFFOTAwQ0Q4RTk1QjE2QjA2RTI5LCA1REM3QTk5RjQ5M0NBMzk0RjMwQTgzQjhDM0VGQkI0QUNFREVFQTMyNzQyNzkxQjZFNEQ5NkQwNiwgNTRCMEFFM0U4OUNGREY1MEYyNjczQ0JBRUQxQTJFNTFGQzNBQTg4RDIzMUNENzU1RjNFODY1RjQKKzMwMzM2Q0REMjFGQzY1ODU5QkQ5QzhEMEJCMDI2OEFCQzExNDQxMTRBN0IsIDNCNzA0QTU3NDE2MDQ1MDQ4NkUyODE0MDdGQ0I5RjM4NTg4N0U5Q0VEMDI0RTA3NzJEOTU2RjdGLCA3ODY3RDdDMEY4QTU4QkE1OUI5RUQ2NDMwMEFDNjE4QTM1RDExMkQ3RDAyRUM2NjMwQ0NGODExMgorOTA5QTQ2OTc2NUY1MzA5MEQzOEQ1QTcyMzEwNzNBMDM0MzNDQzMzREY3MSwgRUIyNzUwOTI1MTM4MjYyNDFBREQyMDI3QzMxODYyMkZDQjYxMEZDNDg4ODZCMEMwNTNGNjZCOUMsIDQ3NTJEQUMwNzM3MjhENEIzRTEyQTIzMzkzNjQwQTBGMzhBMUFCQTFGRTUxNEFBOTUyQjA3MUVECisxQjFDRUQzQzYzMURGOTFCMjdBQTgwRjU2OTMxNUFFMDlDOUI2NDlCOUU1MywgRjNBODBCRUM2MzI2Mzk5RTVEODQ2NDU1RDJBQjREMjZGODBBNTQ2N0EzNDRCNkU1M0RCNTEzMDgsIEEyREVGRkY5NjhFQjNEOTE4RDMzNDg2MzlDRDlERkIzMURGMEEzQkZFQjhCMEM2RDY4MTMyQjIKKzUxNTZDN0I1Mjk1OUVCNTE3NkZGODJFMDNCOTQxMEExRDVEMjJERDJEQUY5LCA1MTk4OTgzMzQyRDcyRUEzMzIzMDA0ODUyREJFMzREMkQxOUJDMDY2Njc0NkNENERCQTVCQjRBMCwgRDQzNTk2Q0U1ODFDMDc4MDFGNDk0RUIwRDIxNzZBNzEwNzZDNUM1NjAwMzlDRTI2RkIyQkQ5OTAKK0Y0MDQ1NzFGN0MwREMxRjQ2NEZFODhBMEIyQkMzMUU1ODE3Njg5Nzg5MEVCLCBBQkFGQjQwREI4MTQxNjgzNDg5NzIyN0E4MDYyQ0RCNDAwNkY4QTIzNzZCQzUzMDk3ODcwNDlBNywgMzFFQTY2NzYwODk5NkVFQzVCREE2ODAzNzgwMDBGNzI0NkUzNzI4RjhGNkNFQzc5ODlCNzJGNDAKKzJEQzBEMDU1RTc0Mjk0NUREMkVGQjk5RTIxODM0OTVCMDg0NjM5QzY5QjJDMSwgNDlBRDgzQ0ZFQjM0N0QwQjc5RDQ0QTUwRjRFQzMwRDRFNTBFQkU5Q0JDMTUyMDhFQzhBNzVFMkYsIEUzN0Y3RTg1MUU0ODVBOTI2NTAzN0U1NDhGMzE4RDY4OUU4MjEzRDc2MjU4RkFGN0I3MEM1MTc5Cis4OTQyNzEwMUI1QzdCRDE5NzhDRjJDREE2NDg5REMxMTE4RDJBRDUzRDE4NDMsIDg0MzkyMDYxRjY2NUI1QUY1QUY1RDQwQzk1OENBNTIyODlBRDRGMTcyMTJDN0UyNTEwM0VGRThFLCBDRkJBMDdFMjA0NUY2MDM5OUQ3RTRCMTFFQzcwQzJFQ0IxQjVFQjI2RUUxNTU3RDI4RDU0QTVBQQorMTlCQzc1MzA1MjE1NzM3NEM2QTZEODY4RjJEOUQ5NDMzNEE3ODA3RkI3NDhDOSwgNzUxRTgzQTZBRjE1MjgwRkMwMEFFMzFFQTNCMzYwN0FDOUNDMjU0NjJFOENDRjZDQ0MxM0M2OTEsIDlEQjZEQkMzNEFDNDlBM0QwODYxQUZEOUM0NDFBMUJDMTc3QkJDNjE3RDQ3MEQ0OEMzRjUzNDRFCis0RDM1NUY5MEY2NDA1QTVFNTNGNDg5M0FEODhEOEJDOTlERjY4MTdGMjVEQTVCLCA2NDZERkZCQUQwNDkxNkU2MjlGRjUyNDEyMTQzQ0NGQjJFRTNBNjYzODhCRTJGNzg0QTY3NjMzQiwgNjZENzgxQjQxRjZEMzQ4MTc5Mjc1QkRDMDZENDFEQkM2RTg1OTJDQzRBQjQ4OUQyNDY3NTJFMAorRTdBMDFFQjJFMkMxMEYxQUZCREQ5QkIwODlBOEEzNUNEOUUzODQ3RDcxOEYxMSwgNjRDRjg0NzBFQjU5RUFCNkZFQkYwRkY0MDFEMTYzRUVENTA5Q0MyMjVBMTE3NTlEODkzRUIwMUEsIEUyMzlEQ0Q1MzE1QUMwN0IzNEM1OThFMTY0QzIzQTAyMjY2MEQ2Qjk0MzQwMjE3M0EzRTBEODVECisyQjZFMDVDMThBODQzMkQ1MEYzOThEMzExOUNGOUVBMTY4REFBOEQ3ODU0QUQzMywgNTZGRURBN0Y3MzA4MDQ5MjI2NDU5MjhDNUVDMzhCMzU4QjE2RjVCMzdGMDc1NjJDQTk4OEZDRkIsIDNFRENEMzc3RTRCMjAzRDg2MEREMjRGRTczRDE4Q0EwMjUwMUZFOEYxQjlFMTRFRjgxN0Q1M0UKKzgyNEExMTQ0OUY4Qzk4N0YyREFDQTc5MzRENkVEQkU0M0E4RkZBODY4RkUwNzk5LCA2MDM5NTlFMEY1M0VERjE5RDEzMTQwQzQwNEU5NzJDNTg3QTM0QkM3REFDNTQ4NjNCRTYwMDI0MCwgNUE3MjkyNzg5MTM2NzdGQjE3M0U5RjMzRjRDNkI1RjJENEYyM0RCMDlDQjFBNDkxNDE5QjQ2QkUKKzE4NkRFMzNDRERFQTVDOTdEODkwNUY2QjlFODRDOTNBQ0FGQUZFRjkzQUZBMTZDQiwgQzBCRDIyNzMwRkQ5Q0I5Q0U1MUU3M0ZCMDQzMDAyMTRCMTFEMDI4RUE5N0ZDQTI1NjMwMzI5QjQsIDQwMDAyOUUyRjEyN0YwMEVFMDk3MjQ3NjlBRDRFQTJGMDIxOTMzNEE4NjVDNDY2RkI2ODZCMTIwCis0OTQ5QTlCNjk5QkYxNUM3ODlCMTFFNDJEQjhFNUJCMDYwRjBGQ0VCQjBFRTQ0NjEsIDg5Mjg2NjI1MzM3MzVDQzREMjI5NEJCNjVENjJDOTM0OERDNTQ4NjA2NTFDNUQ4RUNFOUNDNEEyLCBDRjM4REIxQTk5QTA0NjMxQzNFQjNEOTFCNzVEMzI0QjdFQzE1ODg5ODg0N0M4RTk3RDBEMUNFRgorREJEQ0ZEMjNDRDNENDE1NjlEMTM1QUM4OTJBQjEzMTEyMkQyRjZDMzEyQ0FDRDIzLCBFMzFGNzBENDUwQjFDNEQ5MDhENDJGRjE0RUNDMjg4NDAxQjRCMjM1MUUwOTAzOUFBQzA2NzYwQiwgQzA1Mzg1NTg1Q0MzMjFCRkUxRTlDRUU0QjcyNEIyN0ExQTQ0MDczMDQ3QjJEQjIzMjE4QjhEODkKKzI5Mzk2Rjc2QjY3QjdDNDAzRDczQTEwNTlCODAxMzkzMzY4NzhFNDQ5Mzg2MDY3NjksIDU0MENFMjAxNzQyOEY4RjJDNjg1RDNFMDI2NDAwQjhCN0Y4NUE5MTExQUVCMUM3RTczMkVFRENBLCAzRkFDNUIzOEYxNDI1QzkyQkYyMDVDNTgwN0VGNDlCMEUxODQwNzAxNUJDOENCOEU0OEJDRDY1NAorN0JBQzRFNjQyMzcyNzRDMEI4NUFFMzEwRDI4MDNBQjlBMzk2QUFDREJBOTIxMzYzQiwgRDZERUY5MjlBNjNCQzg5MjVCNEE0RTYzMTczQkQ5MDY2MkE4RjdGQjlEODhCNDI3MERFMkNFNjksIDlGNEVBMjI0MTg0NzlCMTBCNDc1NUU4RkUxMDdEOEVEODY2Q0U0OURCMjJBMUFDRTc2NzE4OTk2CisxNzMwNEVCMkM2QTU3NUU0MjI5MTBBOTMyNzc4MEIwMkNFQUM0MDA2OTJGQjYzQTJCMSwgQkI0NjcwQ0UwMzI5QUZGNzkyNThFRjI2OUE3QkNDOTU5RDg3REZFODBCRENFOEJBNjQ1OTkzNkYsIEJCQTFEMzFDMDRFNzgxQTkwMEFBOEJBRjI5ODhEMzRGMzQwOTczMTkyRjk4MUNEMUU4M0I0NTY0Cis0NTkwRUMxODUzRjA2MUFDNjdCMzFGQjk3NjY4MjEwODZDMDRDMDEzQjhGMjJBRTgxMywgNDVFNkIxNjc0NzMyQjdEMjMzOERENTZBMEFCRDlCM0Q5QTlBNTlEODZCRDQ1NURDN0ZGOTYxNkYsIEEyQjg1RUM1MkY2OTlFMDAwNTA3QjZDOEI0NjYwQUYzMUNDQjkwQ0UxMDZBRjk0Q0NDNzhCRjc4CitEMEIyQzQ0OEZCRDEyNTA1MzcxOTVGMkM2MzM4NjMxOTQ0MEU0MDNCMkFENjgwQjgzOSwgQjgzN0Y0M0JFNzNCQzBCNTYwODAxREU5MUE3RDQ3QTU1OEQyNUZCMUU0RkRBRDI2MzU3Q0VCOEMsIDY3ODlFRUREMTE0RjdBM0ExQjE4QzU3MzdERjJCQ0IxRkI5RUYxOTk2QjVERDAzRUFFQjlGMTBGCisyNzIxODRDREFGMzczNkYwRkE1NEMxRDg1MjlBOTI5NEJDQzJBQzBCMTgwODM4MjI4QUIsIEM4QjUzNzc5NDQ2NjdCMEMwMTdBQjIyQ0NDNzM0RUY1NDk2MzJGNDA2MTA0RDNDMUQyRkIxOUQwLCA4MDVBMEY5Q0JCNzc2NUE3OEFFREI4N0ZFNDJBRUE2RTM2MEMzN0E0MTE2RERGOUJCODMyOTk1NAorNzU2NDhFNjkwREE1QTREMkVFRkU0NTg4RjdDRkI3QkUzNjQ4MDQyMTQ4MThBODY3QTAxLCA0RjQwMEY3QTg3MjFFRjlGQzlDRTRBRDhBODA2OEY3NEI1MUIxOTc0MDBBQjM4QjREMTBFNkM4NywgNUY5NDIzQzgwN0QwNDlGMkZFODY0NDNGRThGMEM2RjFBMUY2NTZGM0QzNUNBNzEwNkQ3NEY4QzMKKzE2MDJEQUIzQjI4RjBFRTc4Q0NGQUQwOUFFNzZGMjczQUEyRDgwQzYzRDg0OUY5MzZFMDMsIDgzOEQ5RjlFQTQ3QzQ3QUUyNTg5NjMwMzgyNUMzMUMxRUNBNzVGMjJBOEQzMTY1QkExQjRGMDkwLCA5QUJEMzNFQzAzNUIzODdBODQ1Q0UxMUU0MkVGRjcxQzg3NDJEQjVFRkM0QzYxQjIwMUE5NjU5OQorNDIwODkwMUIxN0FEMkNCNkE2NkYwNzFEMEI2NEQ3NUFGRTg4ODI1MkI4OERERUJBNEEwOSwgOUI1ODlEMUExNTM0MDgwRkQ5MURGMjg4RjBEODhDOTI3RDI3NTU3RkQwQTFDNkYxOTZBOUUzQkEsIEU3MEU0RDJCOTUyMzZERDJCNjU3Mzk0NUZGRURBQjNDMDIxNzlEMjk0MEI3NTMzNTQ0NEU3MkJFCitDNjE5QjA1MTQ3MDc4NjIzRjM0RDE1NTcyMjJFODYxMEZCOTk4NkY4MjlBOTlDMkVERTFCLCBCNjBDMDVFQzcxNkY1QjE4MzYyQUVGQjRCRjUyOTE0NkVCMkEzQzJGMjk0NkZDQTc0MDc4MTgxQSwgOThGNjk4OEM3MTBENzM5MzJBQjdGNzJBRDBEOTFDQzdEN0VFMjNERUQ4MENBMEM1ODJGNDczQjQKKzI1MjREMTBGM0Q1MTY5MjZCRDlFNzQwMDU2NjhCOTIzMkYyQ0M5NEU4N0NGQ0Q0OEM5QTUxLCBCMTEzMEVBRTJCNTczM0JFNzhFNTREQzkwNzBCRDNBREE2N0VCMTk0MjFDOUZDMTk1NjNEMkVBNywgRUEzNDAwMUE0RTk3NTFDOTQ0NDZFODU3MDE2NzFENzNDOEI2NjhFNjdGOTUwQjI1NjYwMDE2REYKKzZGNkU3MzJEQjdGNDNCNzQzOERCNUMwMTAzM0EyQjY5OEQ4NjVCRUI5NzZGNjdEQTVDRUYzLCBDOTFFNzJEODkwMDE4QjM0M0QzRDZEOTA1NzJCQjc1MDAwQjI2RUVBMURERUYxNjcwOUM4NEYxLCBFODUzMEI3MTQzREQ4RTgyOEUxMEEwNjEzNUMxMkNEMDAyRTVFRkIzNUY1RDlERkNERDYzNjMyMAorMTRFNEI1OTg5MjdEQ0IyNUNBQTkyMTQwMzA5QUU4MjNDQTg5MzEzQzJDNjRFMzc4RjE2Q0Q5LCA0OTZDMUFGQzdEQ0MyRjg3OEIyNDQ0M0Q0MjUwRUU1M0EyRTU3NkZBOERGMkRBNDdBRjQxMzZCNCwgMzRCNjhGQTk5NEIwMzdCNURENzU4Q0RDRjczN0FDOTdEQUYwNEM4QzZGQUNBNEEwMzZFRjY5MzUKKzNFQUUyMEM5Qjc3OTYxNzE1RkZCNjNDMDkxRDBCODZCNUY5QjkzQjQ4NTJFQUE2QUQ0NDY4QiwgRDkyMjUzREMzMjQ2NDAxNzJGNTcyQTY3Q0I3RkRGQTJGREFFMDA5MDIwRTM2RjU5NjczQ0Y3OTUsIDcxMzUzNUEwQTRGNzAwOTNEMzY2ODI2NDUxMkExNTRGQjQ3QTZFNjM4ODNFQ0Q0NjI3NTMyNDg2CitCQzBBNjI1RDI2NkMyNDU0MUZGMjJCNDFCNTcyMjk0MjFFRDJCQjFEOEY4QkZGNDA3Q0QzQTEsIDk4Mjk5ODFBQkM5MTBGMTk1NDc0RUJBODBDODEwNTU3MEU3MDYyRDVDQTJGNjk4MTgwODk2MDU4LCAyNDcxQTY5NDU0ODREMDkzMjBGOTI1Qjk2NjZEQ0VENjYyRkJEMjc4NDgwOTM1MDc1QjEwODBCRAorMjM0MUYyNzE3NzM0NDZDRkM1RkQ2ODFDNTIwNTY3QkM2NUM3ODMxNThBRUEzRkRDMTc2N0FFMywgRTczOEZBODlGMDRCM0IyNjRFM0Q5MTQ4NjU5RjhFODlGQURBNzVDQTA3RUY5NEQ5OUU1RTQwNDksIDhENzE4OUIxRjFFNzEyMTk3MkFFRjdFREQyMkY2NDY5NzNGNzdCN0ZBMkU5QkQ5NjQyQzk3NEM3Cis2OUM1RDc1NDY1OUNENDZGNTFGODM4NTRGNjEwMzczNTMxNTY4OTQwQTBCRUJGOTQ0NjM3MEE5LCBCM0ZDOURFMkIzOTAwMUE1NTg3NTI1NkYwRDU3M0Y0N0UxMTc4ODcwQTJFQTg3NDlFNUY2QjBERSwgMTc1RjdDMzUzRkM2ODA2OEZCNTAxRjNGNkEwRTZCMTA0MzIyRTY0MzBFMTRCNDZCMzYyM0RCREIKKzEzRDUxODVGRDMwRDY3RDRERjVFOEE4RkVFMjMwQTU5Rjk0MDM5QkMxRTIzQzNFQkNEMkE1MUZCLCA4MzIyNjRDREEwODU4MDNGNDk3NjQ1QTU4NDFGOUU0QUVDRkFFQkIxQjkxMDY4RDA1QzIwRDJBOCwgQjAwMzJBRTJCRTQ4OTgzRkQ5Njk2MzMxQzc0NEFEQzk1RDJBNzA2RDk3Q0U1RjZDQ0M4MDE2QworM0I3RjQ5MUY3OTI4Mzc3RTlFMUI5RkFGQ0E2OTFGMERFQkMwQUQzNDVBNkI0QkMzNjc3RUY1RjEsIEZEMDBCMzg1OEI4ODhDQTBFN0E0NEU0MjY1Njc2NUY3NzVBNzQ4QkQ3NUUxRTNDNkQ2NTU1RDdGLCBBNkU3MTAzOTBFMEFEMkFGMTQ0NzQ2RjU5NzU4QzkyQzA4QTlGNEI2NjY4NzlCNzk1RTlBQzlFNAorQjI3RERCNUU2Qjc4QTY3QkRBNTJERjBGNUYzQjVEMjlDMzQyMDc5RDBGNDFFMzRBMzY3Q0UxRDMsIDIzQjk3MDk5QTk0NDI0NDUzM0FDNzY1NDJBQjlBMDA0Mjc0QUNDNUVDQzk4MTk0NzQ2ODFDMDY4LCBFM0MxQzVFQjE4MDZEQTA1QzNGNDBFRTAyOTY5OTFENUY5MDE5Q0E5OThGNzBFNDUwOUVBQ0E0QworRUNDLTI1NgorMSwgNkIxN0QxRjJFMTJDNDI0N0Y4QkNFNkU1NjNBNDQwRjI3NzAzN0Q4MTJERUIzM0EwRjRBMTM5NDVEODk4QzI5NiwgNEZFMzQyRTJGRTFBN0Y5QjhFRTdFQjRBN0MwRjlFMTYyQkNFMzM1NzZCMzE1RUNFQ0JCNjQwNjgzN0JGNTFGNQorMywgNUVDQkU0RDFBNjMzMEE0NEM4RjdFRjk1MUQ0QkYxNjVFNkM2QjcyMUVGQURBOTg1RkI0MTY2MUJDNkU3RkQ2QywgODczNDY0MEM0OTk4RkY3RTM3NEIwNkNFMUE2NEEyRUNEODJBQjAzNjM4NEZCODNEOUE3OUIxMjdBMjdENTAzMgorOSwgRUE2OEQ3QjZGRURGMEI3MTg3ODkzOEQ1MUQ3MUY4NzI5RTBBQ0I4QzJDNkRGOEIzRDc5RThBNEI5MDk0OUVFMCwgMkEyNzQ0Qzk3MkM5RkNFNzg3MDE0QTk2NEE4RUEwQzg0RDcxNEZFQUE0REU4MjNGRTg1QTIyNEE0REQwNDhGQQorMUIsIDE4NEZGQTU4MTlEODBENTFERUJBMkZBQzQ2MTFGMzc4NTc2MzU1QkQ2ODNFNTRBQkYyRTIwMTE3M0IwODgzRDEsIEMwQTY2RTI3NjY4OEYzNTlBNEM2RDkwODI2Q0I5OTk1NDVCREVDQ0M2M0YwNDkxNjIwRDI0MkMyNjA5MDZFNkYKKzUxLCBEODI5QUIyRDJFRUQzNThDODQ2NEMzMDkzREM3MkU5MTFFMkExQjk2NzAwQkI5QjEyQ0RDRjBDMkE4QTNCMDcyLCAzRUMxQkJFNDU5Q0FFODk5RTFGNkM3QkUyQTU5ODA1OTE2NjI3M0UyRDQwNkFBRjdDRjNCQzBCMEI1NDM3NzVFCitGMywgQTM5MkIyNkIwNTAzQTcxRjBDRTFFMDJBQ0FERjE5RDcyQTg0RDYyMTFCMjFDOTE0RUU4QkM1OERGRUE5MjUyOSwgOTBCQjNDOUY5RjFCNTk4QjZGOTdBRUQyQzQ4RjRDNTlGMTIxOTREOEVCMDExNDY1RkY4OEU3NTYwRDFDNTQ5MworMkQ5LCA3OEQ1NkZBOTM1OTk2RERCNzU2NUNEMzIwRDJGMjY0RjUzMDVCRTU1MUY0MTFENDlDRTE3OTQ0QkJEODAwOUNGLCBEQzVCNTNCQjMyRjREMTQ2QTkzQTZEREUzNTNCNkUyNUE5RkNBRkM3QTVERTE1RTAxRjc3NDYyMzlCODhDMDdGCis4OEIsIDUxRTM5RTlGMTExQTFGRkM3NEQ2MzQ5OUNGMDY1MzI0Qjg2QTQ3OUJDMEZCQjNEQjBFQkI3N0U5NURGQTg2QTEsIDhDOTQ1Rjc3OENERURDRDJERTZENzc2ODAwNTA0MUZGQjkxQzZCQzJEQTY1NkMxMDQzNzMxMzJBQjBDOTEwMkQKKzE5QTEsIDlFRThDNTUyRjYxNUM4RDBFODZBN0I5ODNFRjM3RjY5QkY1OTA2REUzQUJCNzU4NDQ5M0VDMTVFOEM4MDNFRjcsIDJCMDM2MzkyN0JFQzg1MjA3RkZBRkY0RkE5NUMyMEJDRjcyM0FFQjY3ODYyQzVFQjg5MkE3MjZBNDE1MDBBMjcKKzRDRTMsIEI5N0I5MkY4NkYyMzg1NUFFOTJFODU3OEIyM0ZCODUxMjhDRTAwQTQ0MjhFRTFGRDkxQUJGQjQ4MzE2RkVBNTgsIDc3REE0MzBBOUI5OEU0NkM5RUJDOUY2MjdGNTA3NDY3RDA1Q0IwNjE3MkVERTE0RkE1ODBDQTI3ODIxODQ4MDUKK0U2QTksIDgyRDNCM0EzQTVDN0U1QjM0MTg3Q0RDMUFBMEZBOUZGMEU4QUQ4MUYyNjlFQkUyQTA3OUExQ0Y5ODM3QzA3OTQsIDg0MTNBNzk1MURBQjBDREIwMEM3OTAxOTJDRTlEN0ZDMTQyQUMyRThCREJDQkMzNzY3MTc2NEIyNjQwODdEOEQKKzJCM0ZCLCA4NEQ4NDVCREExMEJENDY4QTI3MEIyOTAwMjBDNDQwOTU4RjJDQkExMzQ1Rjc3MDk3NTkwRTRGMDk4MkM1QTk3LCA5NTJGOUI1MzdFNkUzMjQ5OUE3NkFGMzQzMkNGMEI0N0M5RUY1REUzOUU3RUI4QjVENTM1NUMzMEJFMUNGQ0M3Cis4MUJGMSwgNDhGQjIyQUMzRUE4NTExOEU5MUVCMjFDMjJDRDA2QzBFOUFGRjE5REI4Mjc0MzlCRTI3NTU1M0MxMjMyREJDNCwgQzFGMDkyNTVCRTA4QTY3MTYyOEE2NEYyNUEyQjU2MjYxOEYwMDE0REQwOTJCQkMxMkZDMkZGOEEzRTU5QkY2RgorMTg1M0QzLCBENTQ3QTU4M0M0NzlCREJGNjVEOTBBNkFCQUNCRTQ3QjJFRDlCRDVEREI4NDhEQUVGQzNBREE5RjA0NUY4REY1LCA3QTdFMkFBMEFGQzI0MUZGNkIyNTRDQjU4QjM2MTI1Qjg3RTU2MEFENTBCNDY5RTU2MkNFRUFBMUJDNjI2QzM5Cis0OEZCNzksIDI2QTE0MUE4QUNCQjQ3MUQzRjNCREZFRTU4ODlEMTAxRjVGMjQ0QTFBREEwNzNBMjhBMUFCRTRENjZBRkFDREMsIERENUU3QTcxNEJBRUYzRjNEMjA5NDdBM0VEQjZDOUExMUQyMjEzNDRCNTcyRUI3NUYwNzVERjIyNTUxNEFFNAorREFGMjZCLCBFRThBM0E5QTY4NUJDNzVBNkE2MzI5NTM3QUI0NDdCNEVCRUZDOTNERUVFMDVEOTJENTQ4MUJDNUZBMkREMkQ0LCAxMUM2RjM0MDZGQzA4NzFGQTgwMDIxRDI4QjkyNTJCQTJBNDQwMUNDNkRFNUREODg3RTFDMTAyRjg5MTk0MjM2CisyOTBENzQxLCA2Nzc3RDQ5QkM0NUY1NDUzN0E0NjU5OEM5RUY5M0Q0QTI2MENCMkUyMjM4ODMxMzFGOTBFQzAxM0FGQzNDQTlDLCAxQjMwOUFEMTVFNTc2QThGNkFGQUNDQzMwRTE0QkEyMjJDODI3OEQ1OTQyQjFEM0M0RDVGM0IyRTkyNkU5RDgKKzdCMjg1QzMsIDFDMzhDREYyMjQ2MzM4QTA5OERCMEUyQjBFNDM4RkRCQzFDOUU1OThCRTZCNjYxQUI1NDEzRDdBQUM3MzY1RDEsIDk2NUU1QzlBRDg2QzBCRDgzQkIwRUIzNEY0NzQyRDAyQjRDMTIzNzI2NjFBNUE3NzkyRkVERTQxQTAzNjM2M0IKKzE3MTc5MTQ5LCAyRTFGOTIzMEMxMTg5RjczMDNBRTIzRjg1QTRERUMyMDZGQ0IyQzlCOURBQUJFNzc1RDQzNTA3NTk4ODdFM0U3LCA4NTNFMTdFNTI1NDYwOEIxNUZGNjhEQ0NFNkRENDdGNTIwNkFEMDU0NUE3MEIwQkI4RTM4QUY4MTZEOUNGMTU0Cis0NTQ2QjNEQiwgNkREOEJERkFGM0E2RUQ4QTk3QzM1RTBCOEMwODg5QTQ1MjMyRTVFRDhEQjEyQkMwM0MxOEI1Q0VBNEQxNDZCMSwgQkRBQjc0MUNERDcyNDAxQTQwRDNGRjQwRjJGQjZDOEQ0OUFFREJFMDFBQzgyMjFEQTY4RDkyMkU0RUZCRjBDRAorQ0ZENDFCOTEsIEYxMUM0NDRFRjg4N0NBNDRFRDAzMUREQ0VDNTRBQjA5Q0E4MzkxMTNCODREQTU0NzhGNTk5MENGREM0QTI4MEEsIEFDMkQ0OTMyNjZGQzhFNTgxNDk5NEVGNDBDNjYxMkQxNUI4QTVGQTY0MzVDNDQ5OUExRUNBMTc4MzQ0OEVFNAorMjZGN0M1MkIzLCA0Q0ZCNTIxRDI1RDQ4NDFCM0IzQUVBNjBCRjU0ODkwNzQ0RkIwNEFEMzg5RDkwNzUxQ0FCNDA4ODcwQUE5NkU3LCA2M0ZGMzBDNDExNjg4ODkxRjMyMjg0MjQ2NEQ1MENFQUIwOTUwOENERkZCMjUxODYxM0QwNzQ5M0E2OEU3RDUzCis3NEU3NEY4MTksIEUzM0RGQjJCRUJFQTBGODlGN0IyNEU5MTJDMzA5RjFCRDIyMDEzODVFNzE5NUE3Rjg2RUU4RDgyN0QyNTJDNDgsIENGNzg4NDc3NTQxQTk5QzYwNUE1QTQ5QTQ0NUFFMkRDODNEMzMyQ0MyRTI1QzAwRThEQTc0REExODE2NjAyQjMKKzE1RUI1RUU4NEIsIEI2RjA1RjczNTBGOTg0RTQ4Mzg2NjYyNEZEMzJGMzQ0NTcxNTA1RDc5OEFGMDFDNzZCMDAzN0ExNjE4OTg0MDIsIEJFQzY0QkI3MjUxNEYwMzAyQ0Q4NEFERDdGOEI4Mzk5MTREMTY5RjMyQzREN0REN0U3NUJERTE0NjEwRUZFQTMKKzQxQzIxQ0I4RTEsIEU0QkUzOEUzQTcxOUM3NkNCRTY2MDc1NkVFRENFNTg1RTgzNkY3OUMyNTJGMTRBQ0JDMzQ3RDFGMkIwMDVEMDMsIDZGNjlDMEEzRENENUY0OEJFNkVERjBENzg3QUY2Qzk4NTU5MUM5M0ZCQThFOTg0NEIyRTJCQTgzOTM3QTNGMDYKK0M1NDY1NjJBQTMsIEJFMTRCNDQyRkUxNjVGRTY1N0NGQzBDQThBMUE3NjVGQUI1RDE0Rjk2OTg4RkQwMjMzNkYwM0I5NjY4NkZEM0UsIEU2RTgwMjBFODE4NTZFNzg4MzcwRkFDQTA3MDhBRkY4MzgzMUEyNUY3NTFBOEYxOTJCQjEzQjkwMzkzMzhEQkMKKzI0RkQzMDI3RkU5LCBGRkFDQzlDQjFGOEZFREMxMTJCRTRFQkYyNTU5NTZBOEM4NzcwNjg2RDIzNjg2MkFEMUFBNTFDNjU1QThENkUzLCA4MzAxQjI3MDQzRUY1RDc3NDQyMUU1OEUzMTYwQUMyQjgyREY4RkVFMEM5N0UwQTdEMkMzNDk5RDFDMkQxQjkxCis2RUY3OTA3N0ZCQiwgQjE5MjI2NEIxQTQ0M0U5QUZCOUNGNzlCMUFDQjk5N0I2NjY0QTkyQUUxQjhDODRGQkVBMkZBRjZFOUZCMTg0MSwgRDQ5OUZCNDE2Q0I0NzA5QUYwNzJDNzhBNENENUFERDA5MjZCRTQ1OTY0RjA5QTM3RTlCMzYwNUIxNUY2MkYyNworMTRDRTZCMTY3RjMxLCBENEM5OTQ5REI5QUMyMUYxMjY1NzUyNTVBRjJFOTlFQUE2RUMzRTJDOTY1OEQ1NzI1OTQ0NDU2OTlCMEE4MTFGLCA2Qzg4QjE0NzRDRDQxOUQ2RDc3MjVGRUIyRUFCOUUwRjAwN0RDODczRjEyQjExNDg0QTA2NDMzQUZBMEFCRDU0CiszRTZCNDE0MzdEOTMsIDVCNTgyQjY4MTQ0RUVCOUI0OTIxRDY5ODEyOUNDODdENERCNzlBODA1N0UxREZERjg3MDMxRkI1OTYxN0M2RUYsIDQzRTlBOEI2NjlCNDE1MzI3Njg1NTBCNkZFNzg4NUY1RTc1QjExNEQ5ODAyQTc3N0E5RDZDMjcyMjRDOEYzNjEKK0JCNDFDM0NBNzhCOSwgQ0MwMjZBOUQwQTcyOEVDODk5NERDQkFGNzlGM0NBNkJEM0E5MzVBRDgwOEM2MDY4ODZCRDMzM0IwMzE5NDBGMCwgQTQ0QzkwMzNGOTgwNzlFN0YyNjIxQTkyMUJERjU2NUM4NjFDMTI1QThFNkE5NzdGMTg0N0I5MEYzNEEwNDk1RgorMjMxQzU0QjVGNkEyQiwgQjREMDI5MTk3N0I3MzM4MjM5QjAwODdEQTcyMDVGRUU5MUFGRTRFOTUwMkFGNjBBNjg2RjBBNEVENkU4OThENCwgRUFBOTk4Q0RDN0Y1QkEzQURBOUI0RkQxRjAzMUMwNDM5QjE5MDFGRDc4MzlDNEU2QzU3RDM0OTgxNTk4ODE3Cis2OTU0RkUyMUUzRTgxLCBDODRFRkI0MjAwQTkwMEUyNUMxMTc4OERDRDY0ODYyNzE2ODM5NjY4OTFBMTcyMEQ0RTY5QTA1RUZERjc1Q0VCLCA3OTI3NjE4Q0YyOThDNzA2QTg0RjI2MzIxNDM4OUQyRUQzNTkwQjBDRjU2NjE2QjE3QTRGOTI1NzhBQTY2Rjc5CisxM0JGRUZBNjVBQkI4MywgNjg3MzY3N0IzNDgxNTEwQkE2QzA3MDk0NjY3QTc0NzU4QTk1OTU1MzgyNzQ1QzJEQzlCRkQyMjFEODYyMjBFOSwgQTk5Njg0Mzk0OEE2ODI2MTgxOUM2N0Q5ODMyNDMxRkRGRUU0QzRCNzQwNDY4QjFEMzJFNjM0QUI1NEZCRTU2QgorM0IzRkNFRjMxMDMyODksIDMxOEQyMDgzRURCQkRGRjYxNjAzNTA2ODA5OURFRjlGOEYzMDFDMTg4NjI4MTk1NzJBRjk4M0MwREUxQjU3NjYsIENGNEVCMkU0RUVBMjFDQjgwNzM3MTQ2QTlGRTBBOUZBOEVEMjdCQTMzMDRCNTkxRDA0NEYwQjU4NDRCRTI0NDAKK0IxQkY2Q0Q5MzA5NzlCLCBCOUY4RDJDRDg2MDVGQkIzNEZCMkU0NUNBMUI3QjU1MTI5MEE5NzU2RTRFNTA1QjhCQzFBMjRENTczQTIzMTVELCBBN0RERTQ2OUY3RUM2QzQxQUY3MTA2RDg3NkU5NDJENjMyNkIwQjA4MEZCODk3NEI1RkNGRjRGNTdCMkZFM0RECisyMTUzRTQ2OEI5MUM2RDEsIDRGMzRCODVBNkU4NkVGQ0UwN0YyNDE2RUE1MjA3NTg0RUE3M0VFNTYzQUFFQjhCQTU3MTg5OThDM0U2QkM4MzcsIEI5RTU4QjhDNjI0RkM2OUNBQkZGRjA1RjBBRTYyNzgzMUQzMjFBN0NFRkI5QjQ2REMwMDAwMUJFMDQ1NTdGQzMKKzYzRkJBRDNBMkI1NTQ3MywgQzcyNzQ3NDE3RjNFREVFM0E4MjVENjgxMjQzM0E3NjVCODZBNTIzMkM2QzZBNjU5QzlBNEIxOTFCMUUxREU5NCwgNkNFRUY4NzI3NzNEMDFDRTNERjI4QkM5Q0FBRjdGQUZCOTlERjFEOTU5RjY4RTcyRTM1QjY4NTdFMDkzMkY4RgorMTJCRjMwN0FFODFGRkQ1OSwgODFGRDAxMUM4QTk5QTQwRENBOEE3QzMyQzc5MTYyQTVGMkQ0ODkwODk2Q0M3OEIzQTMyRUQ3MTdDQTVGQTJBNCwgQjlENzRFQjM1OEU4MzE3ODM2QjRBRjU1NTcwQTFEM0QxMjg2MDU3MkNEMkE1QjJEMERGQ0M0QkQzQzRCQzk4NworMzgzRDkxNzBCODVGRjgwQiwgNDBBRkFFNEM0NjJDNjkzMzZEODkxOTYwREZFNkUxOTZFOTk5MzgzM0U2NjVFMDQ5QjE5NTQ2MzdENDNBMTI5RSwgQ0Q0MDYxQzA5ODkxOENFNUE5QzhBQTY4MzRCQjAzQkQ3NzIwNzVFNjVBNDA5RTQ2RDcxNEYzNTVFQzYwRUI4QQorQThCOEI0NTIyOTFGRTgyMSwgNzQ3MDRCRDgwRDRFMjcwNzhBNjU1RTcwNkUyQTU5N0FDREMyOUU0MzZFRTgwQkNCRTE4RkFBODRDMTVDNkRBMywgRDFCNDA5MzE3ODBDMURBNjMzNUZDNDRGRTQ2OTJCNjQ4NEY2MEUyNTJEMDJGODNCQ0FERERCM0VFN0E4OTZDOAorMUZBMkExQ0Y2N0I1RkI4NjMsIDZCNDM5RERCQzEwMERFREVFMDQ4M0EwQzRGRDVBOENEQUMxODAyQ0EzRjk3MjkzQ0E3MjVDMjc5Q0Q3QkIwOEUsIDU5MTQwQzA3NDFCMUZBMjM0QUFFMURBMzFEQkE2NUQ5NzkxRjMzOTY5QUE3MDYxQjA3NDlGREJGODg3NThGRDkKKzVFRTdFNTZFMzcyMUYyOTI5LCA3NjY4QzJCREM5MUQyOTFCMDI2NTA3ODkwNjJENUU3NTFCQUZBRjU5Q0Y5OTg2NzhCODk4ODIzOTYxMDYyRDAxLCBCMzRFQjE1QUE0NTZFMjRBRkI5OEM1RTZFNERGMzcyREQ5MUQxMjlBRUY5MDFFMEIxMzBCQ0Y3RTkzMzFGNUVECisxMUNCN0IwNEFBNTY1RDdCN0IsIEY5MkMzQTM4RkE1RTdERkJFRkM2MEZBMEUyNDU2REI0Mzc1M0EyNjFCRkU2RkY2M0M2MkUzNjNFQzA4NzgxMTMsIEVFQjJFMUIwMjc2MTQwRTlCRTUzMDVCNTBCNzQ5QzdCODZBMDNFMzE4REMzMjk2MzFCQURCRjM4ODc0ODIyNDYKKzM1NjI3MTBERkYwMzE4NzI3MSwgMjlFNzAyMDQ5N0Q2QUNBNjdGNjc2M0Y3NUY0QjQyQUI1QUU0RUU4QTEzQUM1MDJGQ0QzRDM2MEY0RUQ2NDJGMywgNENERTEyQjM4ODNENzVEMkUwQTZENzYwOUIwQUZCREZBQzQ5ODhEOTcwNUFGQUI0RUMwQTE1ODk1MTRFMDMyOQorQTAyNzUzMjlGRDA5NDk1NzUzLCAxRkFENUU3NDYwRjZERkQzOUYzMDE3NTkzMEFGNTBEMUJEN0M1RDdEQzZCRDA0MkQ1QzQxRjJDNTBDREEzOUY1LCA2MjFGRjExNUUyMEM5RUE4MkYwNjVENDRBM0E4RTFBNUFERkU1QkVENUEyQ0NDQjdDQjQxRUEzMDExREVFMzcKKzFFMDc1Rjk3REY3MUJEQzA1RjksIEMzMjI2MEZGMkNBMzE0QkYyMUM5NjU3RkUyQTY3REJDRDQyRjhGRUU5NDgwMURGQkYxOUI5MEI1RjAzOTFEM0QsIDRENUM0RDdBNTFERTBFMTNDODREOUY3MzM5N0UyQjYwNjkxNjQxREFFMjFFOEEwRUMxNzYwOTlFNTNDQTI1RDYKKzVBMTYxRUM3OUU1NTM5NDExRUIsIDI3QTdDOUI3QzFENDg5MERBMkQ3RUZGNzI4MTc2NzRBRjg5QjAyNTJENEM1RDQ3NUJCM0E0NDY1RTQ0N0ZBRTUsIEM1RTQ2RjhGMjczMzc0QTEzQzU5NDZGMzg4ODVDMzJFQzJBNzRFMEVBODQxRkNDN0I4OUJEOEQ4M0Y1NUZCNworMTBFNDI1QzU2REFGRkFCQzM1QzEsIDExOEEyQ0FDMEE0ODM3MjMwODlBM0U4ODQ4NzFERjg1QUM4NUFGNzlGNTg1RUJDM0RFNDI4MTYxRkNERkYxN0EsIDI1NzU1RTZFNENCRTY1MUEwRkZBRENCOUJBNzI1QjgxNDEyMEI2QzA2Q0RGRTVBODRGOTA3RTZFMkE2NDcwREIKKzMyQUM3MTUwNDkwRkYwMzRBMTQzLCA4NDQ5MTczRjFFRjMwNkM1NDNEMEM0QjlGMkNCOTM0MjlGMzQ2MzcyMzZFMzA5QkU2N0Q1M0Q0MTU3Nzk2NzIzLCA3ODE4NDJGN0M5NzhCQjYzQUE1OTRGQUQ4QTY4MTM0MzM1Qzk0NUFEMDkxNzdGRkUwMzAxRTY3QTBCODU3OEVBCis5ODA1NTNGMERCMkZEMDlERTNDOSwgRjVFMTc3RTRDMjA4RUU3M0VBNjBGOTNDRjU1QUEyOUM3NDMyRjY0MTkwMTUxQzNDOTEyMEVGRjU0NDUwNzg5NSwgQzNBMTEyOTQwM0FGOTBFQjAxNDRCMDIwNjRDODA4QTc0RTc3RkYxQjhENUQyMDk1OUYyRDFDNjQ4NUQ4MjAxQgorMUM4MEZGQkQyOTE4RjcxRDlBQjVCLCBFOTdBMTAzM0Q4RDQ3NjEyRjY5NDE3RDc1QTM5RjQ1RTREM0UyRkIyQkVGOEEyMzZDNUIxMzc4NDAzQzNDODIsIEExRkY2RjdERUNCRDc5MDgzMTlEMTczNUY3RTlGQUJFOEE2NUM2NDk2NTg2Qjc3NzNCOUREN0YzQzg0NThBQQorNTU4MkZGMzc3QjRBRTU1OEQwMjExLCA5QjYyQzdEMERCMEExRjFGNzEwNjAzNzNGNTBBMzRBM0E4OTU2Q0I0QzZFRDRBQjk1QjQwMDM2OUUxODBGNzRBLCAyMDc0QkU1MUY5NjhCODc0NjU5MThDMTY0NjM3RTMzODhDMTUxREExNDU0RjlGNTY5NkQ5M0MwQjg5RjVCNzk1CisxMDA4OEZEQTY3MUUwQjAwQTcwNjMzLCA1Nzc4OUM2RjYzQzZEOEIzRTFCOEQyREVENDc5MjI2QkQzQzRFMTVENzZBOEYxODRGNjQzNERGRDUxQzk1RUI3LCAyQ0VBNkVEM0RFOEU4REEzRkMwMjNCN0VGMTg3OUQ0MDM1RjZGRDU4QTlGNUIyQ0ZDM0FDMEJBNThDNkNBNjIzCiszMDE5QUY4RjM1NUEyMTAxRjUxMjk5LCBEOEJGQUNCODM0MTdDMkI2NjU1NjJGNzBDOEFBMkE1NDA0OUI1NDkwQkU4M0QzNTIxOUU2MUY0RjNBRkE2REZELCBGQTBFQTEwNURDM0VEQjVCRkI1N0FCMkVCMEFGRTYwNDM5RjZGQkY3RUQzNzJDNDFFMjNDRjg3RUExRDdEN0E2Cis5MDREMEVBREEwMEU2MzA1REYzN0NCLCBFMDVGREE1QTIxNzQwOUZBMzY4MkM2RTU3MDdENDQwRDNERjc1MEMxODVDNThDRENGOUZCOTZENzAyOUU2NzI3LCA0RTMzNjMwODA2OUYwNkFEOTE0MEMyM0ZDNDY2QTE2MTU2RjVFOTZFODM4MjEzQUU3N0Y5OENEREIxQzM2QTFCCisxQjBFNzJDMDhFMDJCMjkxMTlEQTc2MSwgODQwOTBGREY4Qjk3MjYyNDE1MTkwQjc5REIwRDI3MkVDRTVDQjJGMzc0RTRDMDVBNTI0REYyMTRCRTI5MUJBQiwgMUY0MDAxMzA3Mjc2OEEyQ0JBQzUxRjRDMUYxQzAzRkU1N0JFNzhERDUwNjMwNDE2NDUwQzkyMzM2ODI1MTRBNworNTEyQjU4NDFBQTA4MTdCMzREOEY2MjMsIEEzRTJDODVCMTMxOTQzRkMwRDE3RUFFRjJCNUE0MTdEMzFDODIxMzlBQ0IyREJDQ0UyQUJCQjQ3QUZCOEJEMUMsIDlCRkREOThDNTY5ODY4MEU5OTEzNjdBNDk1OTVCRTAzNjkzRTYzM0Y2RDNFRDhENzk4RDhEMTZGM0I0QUYzQjYKK0YzODIwOEM0RkUxODQ3MTlFOEFFMjY5LCAzOEYwQkU2MEUwRkMyNUQ2NDA4RDg3NkUzMzBDQjhFRjFFQjI3MTg3QjEwNUQxNkIxNjI5MTczRjhENjhCMkZFLCA1RUE5NUNCQjFDOTIxQjFDREY3QjNFQUZDMTlCMzhCODZDMEMwMTRDODMxMEFCQ0Q0N0FFNzIzMzJGQTM0NzZFCisyREE4NjFBNEVGQTQ4RDU0REJBMEE3M0IsIERDMjhDNzA2MDk3Rjc2MjVBNTk2QjZBODIwQ0JGRTM0MTUyQzFDQjNCNkU5OEE0NUNGNDA4QjJGRkI5QTQyMTIsIENBNTJCMDlGM0UxNUYyNDcxOUZGMjk1NzQzNzExNzIyNUY4OUNEMTkxQjkyNjg2OERGNjdBQkY2MzAwQTYyOEEKKzg4RjkyNEVFQ0VFREE3RkU5MkUxRjVCMSwgNzU3QzM5RDBERjcxQjE0NkYzMUE0M0RGNDM5OUU0RDQ4RDJGNDMxMEI0Njg2MDY1RDExNTFDMDBCQTNERDU4QiwgQTlFQUVGRDk2RjNCMDREQjRDRjcwODM1NTJCQ0MzOTQ5MDY1MUIzRDI1OTM5Qjk3NjI3MzE3MkVGMjE0OENEMAorMTlBRUI2RUNDNkNDOEY3RkJCOEE1RTExMywgQzVDRjI2RjhBODFBNzI1Nzk1RkRFOUU0RDg3RDVEM0E2NUQwMkM2MkJBOUEzMTRGRjNDNDUyMjg3Q0ZDQjNCQywgN0E2RTdFNEYyRjZGNUIwMUI2QkQ1NkQ4NUQ1QTUyMUUyMDJEQkUxQzkyQzI2RTRFRkI1M0E0MkU4MjEzMkZFNworNEQwQzI0QzY1NDY1QUU3RjMyOUYxQTMzOSwgRTRBMDk2QTA2NzlCMTc5NjkyRDc2MTY0OUZDODREMTI2MzNBNDU4MzVCRjY4RkYwRjYzNjNCQjdBQ0RBMkMyMCwgRDU4M0IzOUMxM0VCOTUzMjExMTk0MzhBMEZFRjk0OEI2RkUxNTNBQjg2Q0QzQjA0RDY4QzFDOTk2RTAwNzdGOQorRTcyNDZFNTJGRDMxMEI3RDk3REQ0RTlBQiwgMUVGN0YzQkM2N0RDNjFCM0ZDQTQ0M0UxQkU3RDc3NUI4OEYxNzdEREUwREJCQzRGODc3NDdGOEUxRkVBNTc3MywgNDlEOUI5OThBNkUzNkVEQ0MzNkVDMDJEOEZCMTlGQjdCOUM2Mjc3M0VGRkFENUREQkNFNDRFQTg1MzZEQkExOQorMkI1NkQ0QUY4Rjc5MzIyNzhDNzk3RUJEMDEsIEI2Mjk0MEQxMUU0NzFGREI0RDE5QTFDMDMxQkRENzdEMDNEOUVCNzg3MkYxRTM0NkM0RDcxQzg0QTVGQkVCMkEsIEQ2QTI1MUI4OUFDQzYyREUwQzMzNEU3NzJCQjEwQ0Y5OEQ0MjIxM0NBMzNBN0Q4MEUxRDVGRDk3QTZCQTc1ODgKKzgyMDQ3RTBFQUU2Qjk2NzZBNTZDN0MzNzAzLCBGMTlDMTMyRjFBNzA4MTM1MTI4OTI3M0RDMzFFMjM4M0RDRUM5MTFDMjZBNUU3MkI0NzkzMTBFRkRDQTQ5NTZBLCA1REE3RUM4MDQ1MjY2QkNEODk4QjNCNzRFQzcwQzUwRjMwMThGNjM1OERCNzc4RENDMDMwODUzMjdBNTI4OUU5CisxODYwRDdBMkMwQjQyQzM2M0YwNDU3NEE1MDksIDQ5RTc2MDg4NDhCN0Q2RkVBRjFDMkUzMDk5QkU2QzI3Q0IxMkZBOTBDMTUyQ0ZGODA3OTI0NUVDN0M5OUZEQSwgRTJEM0JFQTc4NzM3NkVENUE4MDY4RDBERkZDNTJERjkxMDk3OTYyMkY0QzZFN0I4QzM2NjM5NUU2RDc5RUIxRQorNDkyMjg2RTg0MjFDODRBMkJEMEQwNURFRjFCLCBGMUY3RUMzM0Q1OTZEODVBMkREOUY5Nzc2MURBMEVDODg2QTI4QThFMzc4NUIxQzQzMUM4MDhCQ0E1NEFCMTAxLCBGNUUyNjVEMkFBMDI3QUFBRkY0MUVCNkM2MkMwQzJCNDVFQTEyRUI3NEJGQkU5MEJBMjRGN0FGQjIwMjNDNjEzCitEQjY3OTRCOEM2NTU4REU4MzcyNzExOUNENTEsIEE4QUU2NDE2QzcyREEzNTdGRTM1NjIxMEIyMjA5MjJEOTE0NTlGODAxN0I5NDhDOTM5OTY4QkFFNkE4MTZGRDIsIDE5MTkyRkRFRDlCNUJFNUY2NzY3MTE2MzQzQUJBRDJCOTE4RDNFMUU2OTMyNEU4Mzk0QzNBRTE1RDE4QjM2M0MKKzI5MjM2QkUyQTUzMDBBOUI4QTU3NTM0RDY3RjMsIDgwMjYwNDQ5NUQzQ0FGNThDQjJEQjdFRjFCNUE5NDg5RThGMUVDODdFQzJGQjg3NTVEMTNBNzEyQjlGMjlGMjgsIDg0MTlGODA0NDkwNDhBRDIwOTI1OEUzNTc4OTQxNzUyNEU1Mjc5RkRDNjkyOTFBRTc1QzFFMkUwRkMzQkM5MjMKKzdCNkE0M0E3RUY5MDFGRDI5RjA1RjlFODM3RDksIDMyNTZBOTU5QUQyRjA3MjIzQ0NFMTZDNDUxOEM1RkMwQTA0OEMyRjI3NUQ2QUJGNUEwRTc1RDg5QjRBRTQ2NDEsIDU3NzA1MTFGNjYwNkIwQTlDMzFCQjcwOTk2NTgwQTlENTk0QTczNTJFOUYwRUFCMTQ1NTIxMjM4QTFEMEUxNDEKKzE3MjNFQ0FGN0NFQjA1Rjc3REQxMUVEQjhBNzhCLCBFM0RFRUU4NkJBQjc5NzMzMkRENkMyMURFOEU2RDNDQzQwMjM2QzUyQTQwOUIyQjJBQzc3RjJFQjQ1MEVCMjcxLCA1MTQ5Q0E3RkVBQjY5RDI5Rjg2MzZERTU3RThCQ0NCN0QyREI2MEY0MUM4RDYyOTRGNjg2M0UyOUFENDZCNkZDCis0NTZCQzYwRTc2QzExMUU2Nzk3MzVDOTI5RjZBMSwgNjM5MzQ2RkM2RTYzMjgzMDZGNEVCM0VERkFBQjAwMzIwMjc0MjNBQzU5M0M2QkRFNzBENkQxNUZCREZEOTRGRiwgNjQ4QjE5QkJBQTVBQUU2MEE4OEZCQzEwMDNDQkVCQjY4NDk3NzM3MkQxREJCN0QwNjEwOTQyMUEzQkE2NTA0MworRDA0MzUyMkI2NDQzMzVCMzZDNUExNUI3REUzRTMsIEVERjJCM0QyNDMxQzhERjI4RTJDQUVFRERGNTQzQjgyRUI0MjdGOUMxNzZGM0Q2RTdBN0UyRjc5NkIwMUJCOTEsIDgwM0ZBMTRFMUQ5NzJEOEQxQjk3MzFDNjlCMUJFQ0U0OUI4QjVEQjVGMEYzNUYwREQ4M0U1ODk2MEY4MDY3Q0EKKzI3MEM5RjY4MjJDQzlBMTFBNDUwRTQxMjc5QUJBOSwgQzA4NTE4ODQ5MThBMkExODRCRjE3NDU5RTUyQzE4MTM4NDg5OTI4RDM0RUIxOEM0MTQ1MTEwNTI1Q0NCNzBFRCwgNUUyQkNEQkRFNzY5OUE2QzQ5RDIyMjE3Nzk5Qzc4Qjg4MUQwN0EzRjY5NjhGMjEyOTRBQjlGQjlCQjgwQ0QwNQorNzUyNURFMzg2ODY1Q0UzNEVDRjJBQzM3NkQwMkZCLCBFODZBMjZBRjdERjM5RERDNjUzQUNEQzBGRjBDMTA2RTlDQzM5QTUyOTUwQjY2QzgxM0FDQUNGRDdFQUUwMzk2LCA4OTRFMEEzODFEODE1QUJGQkYyOTM1REVDOEI1RkNGMUFFREFERDhDOEE3MzM5OTFCN0U2QTFGNDZCMjJFNUMwCisxNUY3MTlBQTkzOTMxNkE5RUM2RDgwNEE2NDcwOEYxLCAzQkE1NzU4MTQxNjBEOUUyMjNBODdFQkVBNjYwRUU1Qjc4MDFFMDdDOTRGRTU2Q0ZFQkI4Qzc3NDBCMkRDRkZFLCBDMDU3MDM1MTg0QjdCQkE5MUZGM0I3MTI5N0FEODQ4MkI5REZDMEIxQkYwMzk1RjAzNjVBRTVFMEVCNTM1MDE5Cis0MUU1NENGRkJBQjk0M0ZEQzU0ODgwREYyRDUxQUQzLCAyNkMwNjI1MTkxQUEyMTE4M0I5OUQzNjc3ODg2NTA3M0E4QTA3Q0U1RUJFMTEyNEJDNzk2RDAyN0VGODg0QjQzLCBBRThCM0JEMDk1RDc5Q0IxOTVDREQ5RkJDMTA3ODg3OEI3RUYwMTg5MDJCNTA0QTNGMUI4RjhCMjkxQzY1NUY4CitDNUFGRTZGRjMwMkJDQkY5NEZEOTgyOUQ4N0Y1MDc5LCAyRUM3NDQ1Qzk2NkU3NUI1MDk2RkNEODVEQjk1RTVBNDZCODIxNEMwQjQxMkU2NDgzQTcwREU3QUIzM0U5RjYxLCAxRjA2RENDQjI5MDUxNzEzODUyQzNEOTEyMEQ1REE4NDZCODY4MTA1RjU4Mzg5OTNCNDhFNjQ5QkU3NjYwMTA0CisyNTEwRkI0RkQ5MDgzNjNFQkVGOEM4N0Q4OTdERjE2QiwgNTE1MjU5RThDN0RFRjZENTg1MzlEMTQyRDQwNDlENkMxQ0FENzBDMUVCQUIyNDhFN0FDQTQxMTNDREExNDdCQiwgQTI1MDcyNjk2MTgyQjRFRjE1REIyQTQ1M0Q0MjUzNDkxQTg2QkVEQjkyOUExQkYxMEFFQzE4NDZBNjhCMkE5RAorNkYzMkYxRUY4QjE4QTJCQzNDRUE1OTc4OUM3OUQ0NDEsIEZDOUQ4OURGRkNGODI1RkRFOTZDNkEzRTExODU2MzlCNTFFQ0Q0MDlBNkVGM0ZCMDE2RDgyNUJCRDAyNzVBOTEsIDRCRTZGRTA2NjVGNzMzRjQ4ODI3QkRDQzAyRTE0RkMwNDQzRDNCQjZEMTY1OTU2QTEyRjZBNDkzNTA1NjgwNTEKKzE0RDk4RDVDRUExNDlFODM0QjZCRjBDNjlENTZEN0NDMywgRjQzQUEzOTBEQjQ2QzRERDBCMTZFNjE2Q0ZCOUM1NjU1NkFGMzZFMzIwOEI3QUUxMDlCQzMxNjk2QTEyRThBNiwgN0IyNjExOEY3NTM0MTY2MDg5NDlBNTQyNUFDNEZCQTRDNzNDNzk5QTkyRUE1NkEwN0QzQzcwQTYwQTM3Q0E2QQorM0U4Q0E4MTZCRTNEREI4OUUyNDNEMjUzRDgwNDg3NjQ5LCBDNTE5OTc5Q0I4QkY4MDczNEQ2MTIyMzE3QTQxQjJCMDI4QzAwRjlENjcwQjIzNTFBMjU1NjE1MEQzQUY1MkMwLCBBQ0I2QURENTM0QjBENDI3MkI5M0VBRTlGOEQ3N0EwNjRGNTFGOUExMTA0Mjc2OTRFQThFRTk1NDlDNUVGMjcwCitCQkE1Rjg0NDNBQjk5MjlEQTZDQjc2RkI4ODBEOTYyREIsIDNFRTg3QzQ3OTZBOTZFMDc0MTIyQTYyQjE5NTNCRDM4MTI0ODk3NDFCQjg4Q0E3MTRGMjA3OThGOEIyN0I0ODcsIDJBOEI3NjIxRENENTZEQkNEQUEzQTRBQzVEN0IxQ0MxRDc4NTg2OTY5Q0RDOTczOEY5N0EwREU3RDQ2OTUyNworMjMyRjFFOENDQjAyQ0I3RDhGNDYyNjRGMjk4MjhDMjg5MSwgRDM3MzIxRDIyMDEwQkEzOTc0MTE4OUIyODQ0Mzg1NDBCQ0Q4ODU5NTg5MEI4QUVDMzdDOEY1MEExMDYyMTRFQiwgOTM4NENBMUU0ODVGMEM3N0UzQ0UzOTlEMTUxODAyMUQzM0YxQzA5NDU0OTI0RUExQzczNzdCRDlGNDZFNDA2NAorNjk4RDVCQTY2MTA4NjI3OEFERDI3MkVEN0M4N0E0NzlCMywgQjAwNjNBOTUwQzcyQkVEOEYzQUEyRDg3RTdGOTcyOENCREUyQUMxMEFBMjAzQ0YwQTUwN0VDMkIxRjQzMTk3MiwgRkM5RDE2NEYyNTREODJBQTZERkZBODFGMEMwQUZCQTUyNUIyQUYzRjVBRDE5MTQwODFBM0FBNTdEODQyNEEwRgorMTNDQTgxMkYzMjMxOTI3NkEwOTc3NThDODc1OTZFRDZEMTksIEY0NkEyMDVGMjFFODU2MENFMjg5RDRGQzdFREE5MUFBOTMwMkI3MjI0MzVGMjREMzE2OEZBRTExNzZCMEVCQ0UsIEUxRjA0QzgxNkQ3RUE5NzgzNTM4RDU1NkI1OEE4M0RCNUVDQkM4MzU1NTlDRDYyMEQ3NTI3QkRFRjY2RDJBRjcKKzNCNUY4MzhEOTY5NEI3NjNFMUM2NjBBNTk2MEM0Qzg0NzRCLCAyN0FDQkI1MzA4OTY2QkY0NkNEOTA3QzE2QTczRUVBMTc1QjZBOERGRjcyQkE4MDAwQ0ZDMEM1RDhEM0NGMUIxLCA0QkEyNzk3QzUyMTAxNzU4NDYxNDUzNTVFN0RCRjQyMERFOENDRUQ2MEEwRjJDMzEzMEVGRDIyNkM2NkMwMDg0CitCMjFFOEFBOEMzQkUyNjJCQTU1MzIxRjBDMjI0RTU4RDVFMSwgQjVDM0U3RjM0ODhGQ0Q3NDdEN0E2NTRERjY4N0U3MjI5QjQ4RDhCNDM1MEYzQzQ4QTI4QkRGMTY2MTZFOTk4OSwgNjQyNUM2QjZBNTE1RUM1MTUyRUNBNkFBQTlCN0RBNzYzNkRBREY1MUMyRTU0NDI5ODI4RjA5MzhCQjQ5MzRFMAorMjE2NUI5RkZBNEIzQTcyODJFRkY5NjVEMjQ2NkVCMEE4MUEzLCAzNzlCMzYwOUMzNDlCMEUxREFEOEM5MEVERDQ3OUU3MEYyNzhGNUJCN0NEQjM2NTMxNkUyM0REMDQ0QTA1MTZBLCBEQzc5RTIyMzVDQUFGQUQ4MTYzMTIwNTA4RTZBMjMzQTYwODgzMTE5RTM2QTYyNUU4QTExMzI4OTU3MDcyQjlDCis2NDMxMkRGRUVFMUFGNTc4OENGRUMzMTc2RDM0QzExRjg0RTksIDc1MzhBQzRBMEYwOENDQjU5QTAxOTNCRkNFMEMxMkREQzgwQzg0ODA3OTM5MTkwQjA2MjlDNTEwQzgwNEI3MTQsIEE4QjNGQzgwNjZGRTFDOTQzODNGNEM0MTg4MjcxRUFDODM4M0YyQkE2MzUzRTI4OTUxOEM3RjBGN0IwNEFGN0EKKzEyQzkzODlGQ0NBNTBFMDY5QTZGQzQ5NDY0NzlFNDM1RThFQkIsIEJCQzIwNzZCRTEwNjBBRDk4MDZBOUZFRTlDMzlEQ0Y4M0U4OTExQ0YxMDhBREQ2NERERDlBMUY1OTEzMDIyRkIsIDk5QkQ5NzRBQTFFREM0MTRGRkUwQ0FFQ0I0MkUzQUVFNDM3REE2NDgwRTkzQzVCOEE5REQ0NzY5MzlCNEJBRDgKKzM4NUJBOURGNjVFRjJBMTNDRjRGNERCRDJENkRBQ0ExQkFDMzEsIDc1MDY0NjYzMTczNDM5RjQ2NDJCMzIyNjA0QTVDRkRCQjU0MkU0NzQ1NTVGRkVGRUNCMUZDRTNCNTE3NTQxMiwgQzMzOTU2Q0MyM0MyQjMxQ0YwMURBODAxRTE4NTcxNTM1QzI3QzVGNUExNkE4NjgwMzQ1NzEyNTk3ODZFM0MzQworQTkxMkZEOUUzMUNEN0UzQjZERURFOTM3ODg0OTA1RTUzMDQ5MywgNDFCMzI0OEQ4M0E3MzhGOUQxODE4N0JENjFFM0EzREU2NjEyN0Y4Qzc1OTgzMjA2NTNGNDgyN0U3NEYxQUJBOSwgNTM1QTAyMTJBOTEyRTEzNEUwQUZGMDc5MjA2MkE3RThBQjcwRERBQ0QyN0E4NEUxNTc3MUQ1Mjc4OUQwQkU4MworMUZCMzhGOERBOTU2ODdBQjI0OUM5QkJBNjk4REIxMUFGOTBEQjksIENCMEQyNkI3MUVCMUEzRjBCNjczNEFDNjA3REFFQUJBOEZDMTc0RTU4RjA5NDMxMDIyRDI3QTdFQjNFMDM5MEUsIDk4RjQ5QTE1NzZCRUY2MDdFMTA1RkQ2NjIzM0Y1RjRCM0VDMkUxMzdFMzE5MTMwOUUwMjUyMzNGMTIzMzhDQTcKKzVGMUFBRUE4RkMwMzk3MDE2REQ1RDMyRjNDQTkxMzUwRUIyOTJCLCBCQkE2QjRBQUI0RTlBRkZEQTEyQTFCNDZCREU4QkQ5NzRCOUJFMzQ5MjdDQTFDRjYwNDE0QTlBMTE4MTQ1RUVDLCAxNTA2QzBDMUMxNkRENEVCMzZGQzBDQ0RCRjYyRkY2RTgzMzM4QTMxNUQ0RkU3RDE5OEM0MTAyMTU5NUM5RkVECisxMUQ1MDBCRkFGNDBBQzUwNDQ5ODE3OThEQjVGQjM5RjJDMTdCODEsIEQzMTM5NkFEQUY1Q0UyOEMxNURBRDk1MDM1REE5MjQ3MDgyMUY0RUY1RjA1ODBBNzZENDdGMDFBNTk1MzM2REUsIDZFMTVCQzFCQUY5Q0IyQjg1QUJFNTg2M0FFODE3NEQ5QzdFN0FGRjY1QTI1M0Q3NjI3MTAwRjIxRDU4MDVFOEYKKzM1N0YwMjNGMERDMjA0RjBDREM4NDZDQTkyMUYxQUREODQ0NzI4MywgOUQyOURBNDU2QkM5NkIxQTYwOThFNUQzM0M2QTI4RDA5RTMwMzY4RDI4NjRFQTA5QTM5MkZFNjU5MDNCOTI2QywgM0VEMkJFRTlBMUY4MTYyNUI1NkJEOTk1MzRGNEYzMzJGQzU5MDk2MEJGODc5MjUxMDI4Nzg1RDc1QUY4QjAxNQorQTA3RDA2QkQyOTQ2MEVEMjY5NThENDVGQjY1RDUwOTg4Q0Q1Nzg5LCBDOTE4NUY4REM1RTU5MjBGREMzRTdCRThEQzAxRTIyNUZFRTMzRkQzNjg3OEFCODUwOUY4NUI1MzA2RkZBOUJGLCBFM0NCNzM0MDBFRjk1NDYzM0VCMDUyQzI1MjFEMEFBQkY1N0MzRTY3QzI0REM1MkQ5OTk0ODZENTUzQzdFODUKKzFFMTc3MTQzNzdCRDIyQzc3M0MwQTdEMUYyMzE3RjFDOUE2ODA2OUIsIDQyQTIyN0VFREZBRDRGOTU2QjA4MjIwRDIyQ0EwQkU4OTlGNEI1MzQwNzk2OEMyOERBMkQ4QTFCN0RCMTY0QUMsIDRBOTA3NjQ1RDY2M0MyNjg1RjZGRDZERjBEQzVBNkI2RUExNThEMzcxMUQ1NEMyMEUyNjlGQ0RFREJFMzE1QkEKKzVBNDY1M0NBNjczNzY4NTY1QjQxRjc3NUQ2OTQ3RDU1Q0YzODEzRDEsIEQwRDlFRTRFMzZDNjc3RDgzQzMyNTQ1M0JGMDIzQkRBNUFGQzhENThFMjFEMjNDMTA1NEYxQkZDNjRCQjUzQzYsIDJBRkQ2OEVEMTM3QjNEMTk5NjU3QkExODE4Q0VEOTk5ODZGNTFGRDI1QjQ4MjAzNTU0NEU2REI2RUVDMzc0QzEKKzEwRUQyRkI1RjM1QTYzOTAzMTFDNUU2NjE4M0JENzgwMTZEQTgzQjczLCBENUIwQTI3MzMxQjcyMDQ4RTAyNTZDMTg4OTQ1MkI5MUUzNjZBNjE3NEJDRTEzMTcwN0Q3NzE0QTc3RUFFQjcyLCA1Njc3RTQ2RDU3NTdFQTQxREFDMDI3NzU3QzNGQTM3MTY3RUZFOTg5OTg4MjM2NUE5MDA4OEFGNzhFNzA4NjRDCiszMkM3OEYyMURBMEYyQUIwOTM1NTFCMzI0OEIzODY4MDQ0OEY4QjI1OSwgNjAxQjNBN0Y2NjE0MDBEQzVGRTQyODM2QzMxNzkxODM0MzdDMkZBQjQyRDE3N0E5QjREQjFFM0MzRDAwMUJDRiwgQUVFODIwMUFCOUM4QTEzMUE5QkU3OTNBQTVBRDI2NTZFNjE3QzlGNjc1NkEwN0EyMUI2RDBDRUFDMUY5ODZENworOTg1NkFENjU4RTJEODAxMUI5RkY1MTk2REExQTkzODBDREFFQTE3MEIsIDIwQjU4MDU2OThCRjhBQkUyMkU5RUVBRUEzQkFDMzk5NzM4NkVCOEFENDQ5NzhDNzRBOTZDODIyODU5NTQyNDMsIDc0NzE3RTZCOTgxRkZBNTNERkM0REE2QTU5NEY1RDFGMTk1MDJERTQ1NUY0RTc2RkQ0NTJEQkM0M0MwMDZFRQorMUM5MDQwODMwQUE4ODgwMzUyREZERjRDNDhFNEZCQTgyNjkwQkU0NTIxLCA1REQ0NTEzRDE3MEQ0MUYxQzQ0QTM5QkQ3MEJBMEY4OTM1MTRFNjIxOTM4QjQ2QkM3RUQ1MjdCRDU2Q0YyMjlCLCBBRDdFMEExMUZENTRDRjA4MzYwNTQxRjk1NkRDMjA5ODFDMzM4NzM2QUY1Q0M5Q0ZBMDI5NDRDMjVFNDUwREZDCis1NUIwQzE4OTFGRjk5ODA5Rjg5RjlERTREQUFFRjJGODczQjIzQUNGNjMsIEJDQkE0Rjc2NDQ4MjcyNTUzNzNCODQzOEZGODc1MzZBQjhCMzExNDAzRTU2NjUwOUVCRUFDRUZBNjM3OTVDNTMsIDZCMzNDMkUwRjVFNTI5NUE1NDBERjI1MzgyQUNGM0Y3QTQzQTJCQkY4N0YwNzM2MjUwMDg0NkEwOUE5OTU5MjgKKzEwMTEyNDQ5QjVGRUNDODFERTlERUQ5QUU5MDBDRDhFOTVCMTZCMDZFMjksIDJDNERENkUyNzAyMjY2MDVBQTg3MEE1NTc0NzhDNDU4MThDMkZCRTYwQTMwNTE2MDI5Mzg5NjFBODk4QTQ3REYsIDY3ODA5QkFEQjMyM0I1NzcxNDAzRTU0NTFGMTE2NEQzMEIxNTNCRjA2MjY0RDk1QzU1MDZBQ0E1NTE4MDg0OTQKKzMwMzM2Q0REMjFGQzY1ODU5QkQ5QzhEMEJCMDI2OEFCQzExNDQxMTRBN0IsIDE3MkU3NjBGNjBGNTgzMkE0MTAyMjc5QjY3RDdEQkNFRTVENkIxNjBEMDhCMzQwNjI5MUIyNjAyQjYzODAxMjMsIDZCQ0Y5RjMxMjdEMzRDQTQwMThCMkEzNTMxODgxMzlBRDVCQjI3MzQ5MzQzOTczQkZBQzhDNEM4RjdCMDZGQgorOTA5QTQ2OTc2NUY1MzA5MEQzOEQ1QTcyMzEwNzNBMDM0MzNDQzMzREY3MSwgRTVFRkU2NjE1OTg4RkRDMjQyRjQ4OTc0MDhGMTJBNzc1RTlDRTMwRUE0OUU4Njc2OEE1MEQ3NUIxRDI5RUMyLCA4MTFDM0U3NDZEQjAyMTNBRTY4QzRBNTlEQ0VGRDhEOTdCMDI1NjQyQURGMzc4RDFEOERBRkJFQjAwOTAyRUVFCisxQjFDRUQzQzYzMURGOTFCMjdBQTgwRjU2OTMxNUFFMDlDOUI2NDlCOUU1MywgMTEyMzBGMTczNzgyQTZGNDAxNUI1QzczRjE5QkJFRDNCNEE3N0E0MjE5NENFOTY2NjM0RkJDRkJDNTVGQUE3OSwgRTdGNTYwMUY3MTQyQjMyNDM5OURCRjQzMkQ5NkUzRUM3REMxRTlDMUIzMDM4RUY2NzEzMjNCRjU0NEIzNDcyRQorNTE1NkM3QjUyOTU5RUI1MTc2RkY4MkUwM0I5NDEwQTFENUQyMkREMkRBRjksIDI5MzI3MzI3NzdEQUQ2Njk5Qjc3MUJFMTU4OEZEN0E4NzU1MTI1Rjc1MjExMjU2QUU4MDg4MjMwMTQwMkU4RTIsIDIxRTcxRDA5MTREOTUyQ0ExRUI0QkNCREY1MjQ1RDYwNjNFNEY0MTRERDM4RTdEQ0I5RkYzNUNBMjMyOEQ2NDQKK0Y0MDQ1NzFGN0MwREMxRjQ2NEZFODhBMEIyQkMzMUU1ODE3Njg5Nzg5MEVCLCBFMURDOUZCQTUxMzQ0RTg5NjFBOUYxQkMyNDU3QkZFQjcyRTAxMkZGRkFDRjZCN0Q4NzhBRjk0Njg1QTk5NzgzLCAyQzczNTc1QkFFOEFGNEU2NzI5QUM1MEE4QkEzMjMyQ0UzQTUwODg5OUI4MkJDNDAxMjRFREFGRkMxNDg2NjJDCisyREMwRDA1NUU3NDI5NDVERDJFRkI5OUUyMTgzNDk1QjA4NDYzOUM2OUIyQzEsIDhDNEU1MEI2NjhFNDhDRjE2RDA0MjRENURGNjJGREY1NkQ4MTY2NEJCMUM4NkQ2RTIyN0UxMTQ4RTU3Rjg3NUEsIEI1QTMzNjBGREVBMTZENEIxOTgzMTk0MTdBMERBNjdGNjFCMDVGRDE3NTQ1REEyRjEwMjM0N0Q5Qjg1NEE5NjUKKzg5NDI3MTAxQjVDN0JEMTk3OENGMkNEQTY0ODlEQzExMThEMkFENTNEMTg0MywgQTBFOTI1NTdGMjQ2MTI2NTdBRDdGODA2QjAxNzgzNzI5REIxMTc2ODREMUNGRDNFRUEyMUFGMDAyMzlEQUM0QywgMUU1REJEQjIxOUI0NzdEQ0E0NUYzM0ZCRENBMzU2M0VGQzAyMzhBODAwRkU2M0FGNjdFMjI5MzQ2QzA5M0VBQgorMTlCQzc1MzA1MjE1NzM3NEM2QTZEODY4RjJEOUQ5NDMzNEE3ODA3RkI3NDhDOSwgQ0YwOUZFRUM2MjJCNDUxMEY1NDU0RTZENjA3RDZBMERFQUI5NzQ3ODU5RjA0Njc1RTZDODJEQkI0OUJDMzJCRCwgRTRENkFFQTU4MzEwN0I1MzgyOTFCOENFNkQxOEJCMUQ4Rjg4QjUyNjEzQzhEQUJFQUZBNjM0RDQ3MkVCNDdFOAorNEQzNTVGOTBGNjQwNUE1RTUzRjQ4OTNBRDg4RDhCQzk5REY2ODE3RjI1REE1QiwgOUYxRTRBMUQ3QjcxMDJDNzFCMkM5NEZGMjA1RTNBNUI0NjZENjFCQTc2QTM4REI1QUY4NUEyRkM0N0E1Nzg2NSwgN0EwQjI2QzkzQzFFNjI3RTMzODA2QzE4OEY5MjM0MTUwN0IxNzJCMzI1ODM2Q0IzQTg5RjlERDE1M0UyQzY1MgorRTdBMDFFQjJFMkMxMEYxQUZCREQ5QkIwODlBOEEzNUNEOUUzODQ3RDcxOEYxMSwgNjkxNUI2MzM2NDY3NUJDN0FGQkFGRkRGNzhEOTIzOEQzRDdGRTg1MjVBRTZFNDA1MjVDRTkxNjRDNTkwMEY0NywgMUY5MjJCNjdERjc3M0VGOUREQzAzMDNBOTE3M0Q0QTBEMkEyOTRBRjIzQUQwNjI5QjhDOUQ4NEMyOUIwNjFEMworMkI2RTA1QzE4QTg0MzJENTBGMzk4RDMxMTlDRjlFQTE2OERBQThENzg1NEFEMzMsIDg4RTMxNEEyQzdBRTYyREI4NThBQTFFOTc5NUE1QTg5RjJGQjM2MEEyQUM2RDQ0MjZEN0EzQTQ1NUVCRDNCRkYsIDI3Q0REMEE2NjBGRDM1OUJCNEVCOUNFQTI2OUJCRDQ3RDREMDk5MDRDRTYzNkZDNkU0NzBDQzdCMjEyQUM5NzUKKzgyNEExMTQ0OUY4Qzk4N0YyREFDQTc5MzRENkVEQkU0M0E4RkZBODY4RkUwNzk5LCBBQkEwQ0Y2OTdCMUI3MzNCMjg3QzBBOTdFRDFGRTc2RTI5QUJCNEZDOTEzRTY3NDQzQ0UzNTA4MkE5MkNCMjA0LCBFNDUxN0ExQUVEMjcyMzUyRTAyMTYzOEI4MTI2MzVGNkM2MDFCRDQ2RDA0REYxRUYzQjM4RDQxMzZDNDZDNTU2CisxODZERTMzQ0RERUE1Qzk3RDg5MDVGNkI5RTg0QzkzQUNBRkFGRUY5M0FGQTE2Q0IsIDVFNDJEQzA4OEI0NzVGNjExOEQ1OTVCQjNFNzlFODk2RjVCMkQ4NzA0ODkwQTFBMDUwMTcwMkVEQzAwRTg5OTQsIDFBODIyREIzMzg3NTdDNTY2MEQ0Mzk3MDBBQTIxODNERjU4RkRBQkNCNzVFN0VDREU1MjcyN0ZFNUYxOEIyMjAKKzQ5NDlBOUI2OTlCRjE1Qzc4OUIxMUU0MkRCOEU1QkIwNjBGMEZDRUJCMEVFNDQ2MSwgNDA4RkU0M0Q2MTBFOTc5MDAyQkNENEJFRDg2REYxMzZEMUE3NUVDQUEzMjRBN0I5QkVBOTc1MjBDMzg1NEVCMCwgNzk4NkZFMUU4OTFDNjIwN0M1NUFGMjQwQzdERDEwRjY5QTgxOUNFOUY2MkZBQTFDRTJCQ0MwQ0Q3MDFFQTI0MworREJEQ0ZEMjNDRDNENDE1NjlEMTM1QUM4OTJBQjEzMTEyMkQyRjZDMzEyQ0FDRDIzLCBEMTY1MTMxMTlCMjVGM0JFMTU1NThGRTIzRjVCODdCQzI4QzIxODlCNzA2RUJFOTU3MTlEQUFGMzA5MjczODM0LCBGMDE3Mzk4OUMzN0QyRTc4NkUzMTEwQ0JENEI2RTU2QzRGREIwMEQ0QjIxQjg1NzIzRTE3ODQzMTZBQTFDMDQ3CisyOTM5NkY3NkI2N0I3QzQwM0Q3M0ExMDU5QjgwMTM5MzM2ODc4RTQ0OTM4NjA2NzY5LCAzREFCNkFEMjU5QjVGNzMxRTUyRkJBQzQxNkQzQkVDNUREMzAyRDZFQjY4QzUxOEY3RDhEOTMwQTEzNEIzNkM4LCA3RkY1QjZCMDE4QjBFQTBGRTlBRERFM0U3Mzc1NTQ1MDk4QjVFM0UyNTlDQTQ0OUZFMjBDNTZDMkZGNDk2RjI2Cis3QkFDNEU2NDIzNzI3NEMwQjg1QUUzMTBEMjgwM0FCOUEzOTZBQUNEQkE5MjEzNjNCLCBBNUMyOTYxOTVEQTE1NEQ5MkMzRDE5NTQxOTk1RjU5MEI4OEFDNjU5RjlGNzRCOTg5NzIzMDk3N0JGREQyRDVFLCA4OTA0ODEzOTI3RDVDMUU2QjRGMzkwNUM4QzUxQzNCMTREQ0FDMjcxOTIwMUE4RUIwNUQ2ODk2MjgxNDhDMUJGCisxNzMwNEVCMkM2QTU3NUU0MjI5MTBBOTMyNzc4MEIwMkNFQUM0MDA2OTJGQjYzQTJCMSwgQkI5Q0YzNTg0RDE5MUE0QUVBQ0I0NTAzNkQ4MzFDODQ5REY1NzU2MDA4NEU1MkE3MjA2N0QzQkU2MTRFNzUwQiwgNTRBQjRBODMzQzAxQ0M0MjJBMUEyNTNFRjkyQTYwRkZBMzRBMjBCRDgyRThCRkFENkUxNTU1OEFCREI2MjI2Cis0NTkwRUMxODUzRjA2MUFDNjdCMzFGQjk3NjY4MjEwODZDMDRDMDEzQjhGMjJBRTgxMywgNUZCRTJGQzNCODBBRDZDQ0UyNjA3QUMyN0M2QkFDMzY1M0EyMzRCRkMyM0I1N0EwMzBEQUQ4NTE0QTJDNjIxNiwgMUVDRTRCRjIyRkQ0NzIwNzFDMUM5RjIzNjUwNEE3NENDNzlBODMwREFDNzcwRDUxOTdGMzkzOTZBRTJCRkJFNworRDBCMkM0NDhGQkQxMjUwNTM3MTk1RjJDNjMzODYzMTk0NDBFNDAzQjJBRDY4MEI4MzksIEIzNTNBOEE5RUVGMTA1Q0NEQjQ0RkQzMTk5Q0I2RjEyNUNDQTg0NERCQ0VCRDUwQ0EwMkJBQTE2MDBCQzUwQ0MsIEQwMkRGOUJFQkIxMEQ1MzJGNzZENzMxMUQ1NjNDQTk4RkFFQTRDQkE3ODc1Mjg1Qzg0NkE4RUE3NkIwRDFFRUIKKzI3MjE4NENEQUYzNzM2RjBGQTU0QzFEODUyOUE5Mjk0QkNDMkFDMEIxODA4MzgyMjhBQiwgOTFENjM1MTZCOEJCN0ZBRUM1RjYyMUY1QTk2NzVGMzY1MEU0QzgxNkNDRjg3RTgwMDk0Q0I3RDY4MTdBMzY2QiwgNTE3NDc4MjJEMkQ0ODlFMUE5RDUwODJGMzZDMkMxNTA1NEIyNzQ3RUYyMzJERDlEMDhCQjFCM0JGOTQ0QkUyMAorNzU2NDhFNjkwREE1QTREMkVFRkU0NTg4RjdDRkI3QkUzNjQ4MDQyMTQ4MThBODY3QTAxLCAxNUUwQjZBRDZGRkE4ODc3NDFERTMwMTRCRjRGQkNGQTEwMjJGQTgyODUzODJEOEQ1QzY5RUUyNDNFQjM1NDFGLCBEMDRCMUYxQzc3RURFNkE1NTc5Mzk3QUEzNUVCMDEyRUFCMUMzMTQyM0IyMjI0QUE5NzJDRDg0NzFERThEM0Q4CisxNjAyREFCM0IyOEYwRUU3OENDRkFEMDlBRTc2RjI3M0FBMkQ4MEM2M0Q4NDlGOTM2RTAzLCAxODE1OUU1QURGQTJFNTQ3OEExOTZEM0U5NzM3NThGNkQ2QTI0RTkwQkZFNjY2RkUwOTM0RTM1NjdGMjEyRDQ1LCA0MjQxNzE1QzkwRTQzMkYxNTQ5NDlCM0Q4MkNGMkYyRUY0OEYwQzE3RkZFN0Y1MzIzNDdDOERCNEIzMERBQTFECis0MjA4OTAxQjE3QUQyQ0I2QTY2RjA3MUQwQjY0RDc1QUZFODg4MjUyQjg4RERFQkE0QTA5LCA1NUY3RDU1QzYwNUMwMzU4QkMwNzg2MTZFRkFEOEU5MENDQjZFNzM3QkQ5RDFDQzEwRjVCQjhBODNCNDlGMjU3LCAzOTM0NTk3NEU0NjU5RTY0M0NERTkyQzlFQTUzODNGMkZDNzRCNTMzQjM1OUE3MDFENDM2OUU4N0M1QTg3Mzg0CitDNjE5QjA1MTQ3MDc4NjIzRjM0RDE1NTcyMjJFODYxMEZCOTk4NkY4MjlBOTlDMkVERTFCLCBDNTAxMkI3QTI4ODE3MERBM0UwQzlCMzBDNTU4NDI0MDYwNzc3QkIxQUEzODVEN0JBNzc3RDNGMkE1Q0Q1NzBCLCAyNjk0ODc0MzFBMDFBNDk1OEFDQUNGMzA5MTkzRjgwRTA5RTc2MkNENDVDMjI4QjMxRDdDRjNCRTA2NEMwRjZECisyNTI0RDEwRjNENTE2OTI2QkQ5RTc0MDA1NjY4QjkyMzJGMkNDOTRFODdDRkNENDhDOUE1MSwgNDk0MDAyRTI5QURBQUIzQkQ0MkRFODI3OTY5MDIxMTYyNTc2RTU2MkQzMThBODhFNjgzOUIwNjMyQkVEQ0UzRiwgNEI2NTlCQzZFQjc3RUVBQzlBQTYyQTlCMEEyNTI4M0MyODVEMzUwMDAyODY1RUQyNjYzNTdDOTc4RkE5QUZBMgorNkY2RTczMkRCN0Y0M0I3NDM4REI1QzAxMDMzQTJCNjk4RDg2NUJFQjk3NkY2N0RBNUNFRjMsIDg5MzdDRkRDNUI5Nzc0ODc2OUY5OTNCRkYxRkM1MzAwQTEwMjM2MjY5NEY5Q0RBMjAwRjVBMzkxN0U3MzQ5NDcsIDNENzdCMTBBMDRBMjdCOEM3OTM3NUY2Q0E1RjI0REIxMUEwMjYyMDA2NUI5QTVEQjA4OEQyNDZERDI1QkJFNTIKKzE0RTRCNTk4OTI3RENCMjVDQUE5MjE0MDMwOUFFODIzQ0E4OTMxM0MyQzY0RTM3OEYxNkNEOSwgMjQ5NkVENkM0NEE5Qzc4ODIyOUE1MjA1RDJBQjAxRjQ5MUFFNDIxNzcwN0YxOEMyN0Y1RTYzQjU2NzU4MUExRiwgRTM5NEEwNkMwMDhCODBFMDBCRTdGREE2QTc5RDQ1RDEzNDIyQjU3OTBBODcxRjAxMEI2QzkyRUVDOEFEMTVBNAorM0VBRTIwQzlCNzc5NjE3MTVGRkI2M0MwOTFEMEI4NkI1RjlCOTNCNDg1MkVBQTZBRDQ0NjhCLCBGMjFDRkZCM0VBRUU0MEJBOURGMURBQ0I0Q0VDN0Y2NURGNzE5MTA0NDUwMjcxNTMyMzFERUQwRjQ1MkRDM0YwLCAxRDAzQjk3RjExRkU3QkY4N0VEODQ4NTU4M0VDMTlCNkFFRjlBMjM2RjNEQ0NGODg2ODlFRjc3MjExRTIxQUM4CitCQzBBNjI1RDI2NkMyNDU0MUZGMjJCNDFCNTcyMjk0MjFFRDJCQjFEOEY4QkZGNDA3Q0QzQTEsIDY0NTExMkI1NUQ0RUZDOTA0OTUwMDg2QzA4MkRDNEQzRDQxQThFMTY0RTg2QzAxNTU0OTA5QzAxMTg2ODZDMkEsIDZCNjgxMzBEQ0QzOEQ3RERGRkIwQjZDMjRGNjNCQjg1Njk5NUREMUExNjk5ODQ3RjY3OTM1QTdFQkMwN0VEOTUKKzIzNDFGMjcxNzczNDQ2Q0ZDNUZENjgxQzUyMDU2N0JDNjVDNzgzMTU4QUVBM0ZEQzE3NjdBRTMsIDkzRjE3MTExRUZFNDBBMDgwQjhFQ0I3OUUxOUIwMTc2RTlEODBBNDZDMEFDNkY2ODc5OURFQkY2NEIzMUY3MiwgRkY2NEE3ODI4MkVFN0QxM0VEQ0E4NEM0NkYwODY5QzZCRDk2MkQwMjQ2MEVGRjREREQ4NjQ0QUREQUU0NjU1NgorNjlDNUQ3NTQ2NTlDRDQ2RjUxRjgzODU0RjYxMDM3MzUzMTU2ODk0MEEwQkVCRjk0NDYzNzBBOSwgQUU2OTMzNEJBNzFEQkQwMEI3MjQ5MEFBOUVGNUJBNzhBMkUyMEQ1MTVGMkNBNUM2RjkyNkQ5QzA4RTNCMzI1OSwgNzk3QkY4NUM5MTI0NTY2NEJDMUVDOTJCOUE3MDY5NzdGRkVBNjI0NjU3ODNBRTlEOTNGQUM2Mzg1QTc0RkRBMgorMTNENTE4NUZEMzBENjdENERGNUU4QThGRUUyMzBBNTlGOTQwMzlCQzFFMjNDM0VCQ0QyQTUxRkIsIDVGMDM4QThBQzg0MzFGOTMyMUQyMDJDMjQwMDU3ODE4NjY1NjNBNjhBMkJEODMyQkM1NUNBRENBQTBBNTFBRDUsIEFDMDY5NkUyNzk2QzVBMzExMkNGNkVEMUE3RDlBMDhGQzNEOThBQjlBMjRDOEZDMjNBMjQyMjhENUFEOEM4Q0IKKzNCN0Y0OTFGNzkyODM3N0U5RTFCOUZBRkNBNjkxRjBERUJDMEFEMzQ1QTZCNEJDMzY3N0VGNUYxLCA4MkRCOURCM0VFQzEzMjUwMDU3Q0YxQkZFNDkxQTY1NjU3MTYwRENBOEQ4QjJGRUI2RkU2RkFENTQ2RDRGMkE3LCA4NEIwRTZDMzFGQzQwMUM1MzA1MzgxMTI3RTBCQTlENjkyNzBCNDAxM0M1NEY0OTBFMTUzQTA3NTgyN0E2OTA4CitCMjdEREI1RTZCNzhBNjdCREE1MkRGMEY1RjNCNUQyOUMzNDIwNzlEMEY0MUUzNEEzNjdDRTFEMywgMzRCODI0QkI3MTcxQUU2N0I4RDM2QkRDMDNCQTE0NjM0OEU0NzIwMjRDNDgzMzZGMjUzQTU1RkZEOTJFQjk4QiwgRjg2Q0I1RUVFQ0QwQTAyQkYwMUQwNzlCQTVDRjk3Qzc5N0M1QUM2OEZBMjcxMEUzOTZDOUJENDVFMDQwN0M2OQorMjE3Nzk5MjFCNDI2OUYzNzM4RUY4OUQyRTFEQjIxNzdENDlDNjE2RDcyREM1QTlERUEzNzZBNTc5LCAyNzlEQkQ2RDFFN0MwODU2QzYyODQ5OUNFRDc4NERBMEUwMjUwNjVFOENENzNDRjQ2ODI4MTE0N0Y3NjY5NUMwLCAxNUMzMjJGMDdCMTM3MTFERkZDNEY5MDE0OUU0OTY3OUEzNDc4RkI1OThDMDEzNzI0NTcwRjFDMDQyQjFDQTk3Cis2NDY2Q0I2NTFDNzNEREE1QUFDRTlENzhBNTkxNjQ2NzdERDUyNDQ4NTg5NTBGRDlCRUE2M0YwNkIsIDg4RjZDNzYzODk0RTk4NUMxMDBBMjk3Q0VCRUI3NEYwQUMyMjAwQTZDRTczRTE5Njg5NzNGNkRDMDkzRUU1MjMsIERCNkUxQTg2QjUyQjE4MEVDMUE2MUM2MUNDNTc0REQ4NkY5QTc1NTAzRjkwNTY3OURFQjY0MjYxN0JGMzZFRTQKKzEyRDM0NjIyRjU1NUI5OEYxMDA2QkQ4NjlGMEI0MkQzNjc5N0Y2Q0Q5MDlCRjJGOEQzQkYyQkQxNDEsIEQ1RDM1NkQwNDNCMTUzNkM1RDE5NzA3MkM5RDE1NTkyRUZCRkU4RDM0MjUwQ0Y3RDIwRkIxQUE3QUVCMzQ4QTUsIDU2QTVGOTM4RURENUZDRjk5RDQ5Mzg3NEY3MUQ2RDg5MzYzNTI1NUE4ODcyNkQ5QzM1QUU4NUQ3NzE5NEQzODUKKzM4NzlEMjY4RTAwMTJDQUQzMDE0Mzg5M0REMjFDODdBMzZDN0U0NjhCMUQzRDhFQTdCM0Q4MzczQzMsIEMxNERCOEM4NUUwQjZEMkI2NzZFNEMwQTI1MDY0OUE4NUZFNzNDOEQwQzdCNDUzRjFDNEFGRURGNjc0NTRBQkYsIDg5NTI1N0RGQjY5NEVEMUZCNDQ4NTgwMERFNzkwMDY1Njc3QzI5QzBFQzJEMDUyQTg4NEMwN0Q0ODA5MzNBNTQKK0E5NkQ3NzNBQTAwMzg2MDc5MDNDQTlCQjk3NjU1OTZFQTQ1N0FEM0ExNTdCOEFCRjcxQjg4QTVCNDksIERGN0Q1QzdDRjcyRTk0QzhDOEJCQzU0NEI1OTNBQzk0MjM0NUEwMjJCOEYyNTJENTE3RkVDODc0QUVCQjU3REIsIEM3RDg4NTU5RUZENDQwN0Q4QkNBQTE3NjE4RTQ5QUE0Q0IxNDQ3ODg2OTYwMjBBMTU1MDdGMkZDOUMyODdFQjcKKzFGQzQ4NjVBRkUwMEE5MjE2QjBCNUZEMzJDNjMwMEM0QkVEMDcwN0FFNDA3MkEwM0U1NTI5OUYxMURCLCA2RjZFRDlGRTJCNEFDMERBNjU2ODhBQjY1OTdBNEZFQ0MyNTY5QzdBNDBCOEVBNDY0QTQzM0MzOTk4MDFCODdGLCBGNjA4MUYyQ0Q1MDM1Q0NFNTcyMEMxOTk0Q0FGMjlBRUVDQjcwM0Y4NjJENjA0MTczNDA0OUZCRjg5RDAwNDk1Cis1RjREOTMxMEZBMDFGQjY0NDEyMjFGNzk4NTI5MDI0RTNDNzE1MTcwQUMxNTdFMEJBRkY3Q0REMzU5MSwgOEJCODJEMUQ0ODE0RTYzMkU1NkIxNEU3RTE0QTY2RUI0RDE5OUI4REIyNzY4OEQ5MzEwOUMwMkE4M0MwMzcxNywgOTgyNjk1MjlGMjRDQ0EzQ0E0Mzg1QjYyRkUzNDAwMDBBMzE1QTVCRTg4N0M2QzkxNEI1OEEwRTcxRkMyQjExMworMTFERThCOTMyRUUwNUYyMkNDMzY2NUU2QzhGN0IwNkVBQjU1M0Y0NTIwNDQwN0EyMzBGRTc2OTdBMEIzLCBBMzNGQjNENzkzRkEzODBBRjJGMjhBRjdBNjJENTlBOTJENkJEMEM4MzdEMDFCQUJDRDQzOUM0N0MyNzBBMDkwLCA0QjdEQUJEMzYyQTNDRDQxRDgzOTY4NEQ4RjI0N0RCMDMxQjlFQjVBMDZGODA4MzYwMjg4QjBBRjQyQTY0NUNCCiszNTlCQTJCOThDQTExRDY4NjRBMzMxQjQ1QUU3MTE0QzAxRkZCRENGNjBDQzE2RTY5MkZCNjNDNkUyMTksIENFMjY4NDVGOTRERUU3RTAwNjFFOUU1QzE0QTdDRUE5ODQ3MDgzNjIxNjgzMjBBNUEwRTgzMDI5QzE2QTJEOUIsIEMwMkZCMERGMzRDNzYxNzM0QkFFRjE1NzNCNDg1NEUyNDE3NDM3MkU3MzVBQUI4MUU2MTYzMjZENDA2RUYxMEQKK0EwRDJFODJDQTVFMzU4MzkyREU5OTUxRDEwQjUzM0U0MDVGRjM5NkUyMjY0NDRCM0I4RjIyQjU0QTY0QiwgQjg1OTU0N0M0RTcyMDdCRTNDRDQzMjY4MTkyQUI4OEE4OEJCRkJCRTU2ODdFODUzM0M3QUVDQzZBMUQyQkY2MSwgN0U1MzkzNkJDNzkyNDM2RTUzQzEwQjkzMDMyMTk0NTc4NEU4ODVCNDM2MjZCMjY3MzlEQjg0QTcxM0UwMDJDNQorMUUyNzhCODg1RjFBQTA4QUI4OUJDQkY1NzMyMUY5QkFDMTFGREFDNEE2NzJDQ0UxQjJBRDY4MUZERjJFMSwgMjJDRTBGQkU0NERFNkJDREYwOUNCOUQ4NUZFQTFGRUU1MUU1MTVFQUVENkNCMjFCODk3N0M3QkFGNTk4MUMzOCwgMURFRTA3QzdBQzAyN0EwODJGNzdFQzU4MkUyRUFGRTI4MUY3QUMxRDcwOTc4ODMyM0RBQkY3OUU1QTczRkJFQworNUE3NkEyOTkxRDRGRTFBMDI5RDM2M0UwNTk2NUVEMzA0MzVGOTA0REYzNTg2NkE1MTgwODM4NUY5RDhBMywgMkVDQzEyOThGNDE4OTE0QzZBRjc5REU5MEJFODAyMUUzQzdGODFBQ0Q2MUYwNDQ5RDNBQkZEOUUzREM2Mzk5NywgOEQyMjlDMzgxQTAyMkQyQUU2MkE3QjRFNDgxRjI1NjQyMDI4NjdBNEZDQTkwNEQ0RTkxQ0M2QjcwQzNCQjEwRAorMTBGNjNFN0NCNTdFRkE0RTA3RDdBMkJBMTBDMzFDNzkwQ0ExRUIwRTlEQTA5MzNFRjQ4MThBOTFFRDg5RTksIEY4RjRGNkExOTU1QTlCNzUzRDc2NjY2OENFMzU4MjlGNzAwMzBBMTRDRDA1ODUzQUEwOUU2RjYxMENDQjE2OEYsIEM2QUU4ODAyMzEyMjU4MDIwMTEzRkZBOTU3Njg1NjE1NTA1NzM0NUU4REUwNkI0M0Y1RDhFQTlEQUFBOTk0MkIKKzMyRTJCQjc2MjA3Q0VFRUExNzg2RTgyRTMyNDk1NTZCMjVFNUMxMkJEOEUxQjlCQ0REODQ5RkI1Qzg5REJCLCBENzQyOEI5RERBRDBCQUFCQjI5RTkzRTEzRjc2NEY5NDFBMDBFNDY0NUYyNTkwRDdFMkMxRUZDODREOTE1NjhELCAxOTY2OTZGMjc3QzcwQ0I0OTY3ODM1OUQ2M0FCOTlBRDQ3OUI2Qjk2NDRDQTFDREZERDJBMUJCM0VGQUQyNDlBCis5OEE4MzI2MjYxNzZDQ0JFNDY5NEI4OEE5NkRDMDA0MTcxQjE0MzgzOEFBNTJEMzY5ODhEREYyMTU5RDkzMSwgQjhFODA5RjI5NUE3NjIzNjkxNzM0QzA2NkQ1OUM4RkEwRDI4MDE1OUFCQ0JFMUQ0Mjk2N0E1MTM2NDg2NjRGMiwgMjgwRjQ0RTczMDY1OTFBNzY2NDZENUZBRDY4NjkwMzRBNTE3NkE0QzM2MUIzNzRFOEM2RDNDRkQzMzNENURBCisxQzlGODk3MjcyNDY0NjYzQUQzQkUyOTlGQzQ5NDAwQzQ1NTEzQ0E4QTlGRUY4N0EzQzlBOTlENjQwRDhCOTMsIEFFQjVCNEMyQUFFMkI4RjY3REY5ODhGNDNCQTUyMzc0MENCQTI1N0JFNDQyMjIxM0Y0RjJBMTYyRTRBNUJFNEEsIEQ0Mjk5NENGMUMwRUM4MUQ1MUVGNjdBQzY3RjdFNzdGQ0IxREZGNEEwRTAzMUFEQUM4OTNFRkMzRUE5QzBBQjkKKzU1REU5QzU3NTZEMkQzMkIwN0IzQTdDREY0REJDMDI0Q0ZGM0I1RjlGREZDRTk2RUI1Q0ZDRDgyQzI4QTJCOSwgRjlCQkY0QzA3NDk3OTBGMjE2Q0M1Q0RBQTE3MjMyQkE4NUIzNzI5QjM2QTQ1NDdGNzk1QTc0QkE0QkIzMUYzLCAzMjJFRkQ5RUJDQTQzQTI2MjVBQzNEQjhBNzg1REI2RkRFNzI4ODI1OEI2NEZBQjZDODI0MDEzNTY4RTFBQTM0CisxMDE5QkQ1MDYwNDc4Nzk4MTE3MUFGNzY5REU5MzQwNkU2RkRCMjFFREY5RjZCQzRDMjE2RjY4ODg0NzlFODJCLCA2MzM2RjNGMkMwMjg3RjFFQ0EyOTFBQjY0MzQxNjNERTc5QjQ1RTY4REI2Mjk4Njk3MERFRDNBNDZEMzhBNDNELCA0RDkxQzc3OUYyQjM1MDVFMDk1MkQyQkQxQzNGNTlGQzkxQjYyNTU0NkM1MDg3RTlFN0QzOTM0N0RFRjQ0NkU1CiszMDREMzdGMTIwRDY5NkM4MzQ1NTBFNjNEOUJCOUMxNEI0RjkxNjVDOUVERTQzNEU0NjQ0RTM5OThENkRCODgxLCBFRjc0NDRFOTlEMkYyQTA4QUNFODlDNDE0M0IwRjk1MDc4RjE1QjdGNEZDN0Q5MzQxNzY2NDI5MzgzNTg5MDk1LCAyMTVGMDAxNDk4MjRFMTczOUUzNkYxRTZGRkUzRUFBRDlDMDhEQTVDQjA4MkYzQjFERjBBM0YyMzQ5REREOUYwCis5MEU3QTdEMzYyODNDNDU4OUNGRjJCMkI4RDMyRDQzRTFFRUI0MzE1REM5QUM5RUFEMkNFQUFDQ0E4NDkyOTgzLCA0QjBBNDI4M0Q5QTA3RTU0RTJEMDlCNDE1REVGOUMwOUM1MjMwNTY4RUZFMjkwRTY5NkYyOTU3Rjc1RTJFQkNGLCAyMkZCNjZGMDk2MzJDOEE5QjM5REFCOUJBRUE2M0QzNjRCOTNGRTBENEI1MDhERUVBNkY0NzE2QzRFNTYxNkY2CitFQ0MtMzg0CisxLCBBQTg3Q0EyMkJFOEIwNTM3OEVCMUM3MUVGMzIwQUQ3NDZFMUQzQjYyOEJBNzlCOTg1OUY3NDFFMDgyNTQyQTM4NTUwMkYyNURCRjU1Mjk2QzNBNTQ1RTM4NzI3NjBBQjcsIDM2MTdERTRBOTYyNjJDNkY1RDlFOThCRjkyOTJEQzI5RjhGNDFEQkQyODlBMTQ3Q0U5REEzMTEzQjVGMEI4QzAwQTYwQjFDRTFEN0U4MTlEN0E0MzFEN0M5MEVBMEU1RgorMywgNzdBNDFENDYwNkZGQTE0NjQ3OTNDN0U1RkRDN0Q5OENCOUQzOTEwMjAyRENEMDZCRUE0RjI0MEQzNTY2REE2QjQwOEJCQUU1MDI2NTgwRDAyRDdFNUM3MDUwMEM4MzEsIEM5OTVGN0NBMEIwQzQyODM3RDBCQkU5NjAyQTlGQzk5ODUyMEI0MUM4NTExNUFBNUY3Njg0QzBFREMxMTFFQUNDMjRBQkQ2QkU0QjVEMjk4QjY1RjI4NjAwQTJGMURGMQorOSwgOEYwQTM5QTQwNDlCQ0IzRUYxQkYyOUI4QjAyNUI3OEYyMjE2RjcyOTFFNkZEM0JBQzZDQjFFRTI4NUZCNkUyMUMzODg1MjhCRkVFMkI5NTM1QzU1RTQ0NjEwNzkxMThCLCA2MkM3N0UxNDM4QjYwMUQ2NDUyQzRBNTMyMkMzQTk3OTlBOUIzRDdDQTNDNDAwQzZCNzY3ODg1NEFFRDlCMzAyOUU3NDNFRkVERkQ1MUI2ODI2MkRBNEY5QUM2NjRBRjgKKzFCLCA5QzVGQTJDMTNGNDE4RTYyM0MzMTZENUE4MkM4QjcwNTA4RTNBQ0FBMkI0QThEM0E0QUNCNDlDMEQ3QkEwNEUyMjA3NjFCQzE1ODk4RTFCMDZCNEVFREZBMjNFMkU1NDYsIEY2NDFERTBDQjA3NTg1MUE1QUZFODE1MDNDQjdCRjYxOTRGREYxQjdEQTlFNTk1NTZGMDE1NjUxQkQ5MjE4RTMwRUYyQzRCMjIxM0Y1MTlCNTI5RkI1NjQ3OUY0ODc1MgorNTEsIEYwMDkxQjEwODBCMjRDNDA3RTk4M0ZDNzdDMDUyNzg2MUUyOENDOEQ1QzlDNUI0OEIxRjQxNkZCOEY3MkZEQkFCMUJBODc3RTJEQzlFQTgyMTg3QTNFNDZEMDcyQUE0NCwgMjI0OTJCNTZDMzUxRkM4ODJDRDYzQTU3MkZCQjdBNzk0RUM4Q0NDMThGMTZGOEYzNTIwNzFENjlBRjc2OUY0RTdFRDYwNzdBOUEwODQyOUI1ODgxMEY4Q0ZERENGQjgKK0YzLCA1QTgxNUQ4NDYzMTVFNURCRDE1NUJDNzI5QjA5OEM4MTBENjhCOTJCMDVFQ0EyODQ5MjMwRjY2QTM1NjE1OEM0QTE4NTZBMTFDRjdCQTVENTYzQkFBNkYzQUIzRDAwODcsIEZCODgwRjBENkY4NTA3NUI3MDE5MTgzN0NDNDU5ODUxOTgxNDA2ODU3RjAzRjZDOEVBMEQyQUJDNTA0MkYwRUZCOUZDOTc1NjFBNjNDNzFDRjgxNTkzODFGMDM4RTdDCisyRDksIDJDQzZFMERFMTdEODZDNjBBOUQ3NjRDQTE3RTZCM0JGOEZGNDhBQjlFNkUzOEVCMDk5NkJCNkNCMzZEQ0QyNzZCNjFCMjRDNURDMEY3QzEwODNGQ0IyQTg3QjQ5MzI0MCwgQzg2RUNCQjA2QURENDVGNEZCQzVENDExQUMwQjlCQjA3MjkyRDdDQjZGREFDMTE2NzcyOEE3QjgyNUUyMjZEMjI1QTNGOTBEQzQwREM3REE0RjEwMTA2QTc0MTJFN0EzCis4OEIsIEQ1QkVDRjkzNzQwMUQwM0M2Mzk5NEJBQTc2RkYxRjM1OUE1NTQ5NTNCMjYxM0Y2MjkwOEI0NzQ5N0NCRTE1QTVGMTI0NDg4QzNEQkI5RjEzREI5NDA5NzUxQUM2QjlEMCwgRUQyODQxNzAyOTY2QzE1NjY0QUVBNzMzOTExRkQxQzAwRkYxMjU4QTVCNkM5RjAwNTMwQzBCRTlFQjk0MDkwOUQ4RjUxOUQ1MEQwOEFEQTgwMUQzNUQ2RUEwNEMwNUVGCisxOUExLCBDN0E4QUM2OUE1NkU4RjcyNEFGRDZGRDAxQ0E5RURGMkQ0MjdDMzMyQzU5Njk5MkM1RjNCNTRENTc5MTFGQzUzMjNEMjEyNDJFNDk0MjEzNTY0OUYzODJFRjlBMkNBOEIsIDQxODZDMTYyMThFQkJGRDg0RTREQkUzNTgzRTM3RDcxNTgwNzE2MzlCODRCOUZBQUFFQ0YxRkY2OTU1RjZBQTRCMEJEMjFCRDVEQzdDMjkyN0U3NkM3QUU0OTU4NTU0MworNENFMywgQTRCMzI4MTNCMTk4NDREODNBMzFDOUQ2MzhERDg3RjE2RDdFRTdBMzJENDlBNkE5OUQ2QTkwMkFDMjYwODJFNDFFQjlFNzdCMUQ0NEMwMkU5RjQ4RjI0N0Q4REVCRjExLCBGQjY2MTQwQzVDODg3RDFDQTI4RUVBRjVCOERCN0IyNUFDNERCMUE0OUZBNkJBQjkzNjM5RTRBMURBQzY0Nzk0NDdFOEY0QkIxMzEyOTQ2RTBEMDdDQzA5QjYzRkVENTEKK0U2QTksIERFNTgwNjk0NjZENDA3Q0IyNzI1NzQ3M0RDMDhGRDJCRDA5RDI2MjAzNkQ1NkVDQkMwQkE5RjU4MjY0MTI5NEIxOEQ3QjEyODVFOTI5MEM1NTc2NENBMEU3MTY3QjA1QSwgNDI0OEI0MkM4QjZGRjU1QUM0MEE1MDE5MUQ4NjEyOTM3NUM3QTZDMzU5NUVFNjJBMTJGNzQxOTJDOUE0MzFFRTFCRTEzNDFEODI0Q0MzMUFGMTAzNzBEOERCMzU4QkVECisyQjNGQiwgQTlFQjAwNDFBQzBFQjU4MjVCMDRCODFCMzREMjQwMkUxRjE0NjM4QjYyRjRCQUE1RTlFM0Y0NzMyMEFFNzI0RjcyNTczODdCQzQ3MEEwQjc3RTFGOTg1NTE1NTAxOEQ2LCA3MDc0MDBGQTQ3Qzg3QzY5NkFCNjFBNjEwRDY4QTM0NDgyRUYzRkYzMkQyRDk1NEUzNTQzRjI3QzJBOUYwNEIyNjFERDUzMjE5RTE0RjYxQjRENUY5Q0Y5Q0JENDI2MEYKKzgxQkYxLCBEQjcwQ0I2OUFGQzJDOUJCMEVFNjQ3QkVCRUU0RjkwOEY0M0UwNDgwMEI4Njg1NzI2RTFCQkJEMTlBRjM2QjlDQTQ3RDFGNDYwOTIzQTAwQ0U1NEU5RjAzQTQ2MkI0RDcsIDdGQkI4QkVDQkIzM0FDOTIxQjNDNThEQzYyRUQ0RTMzOUIxQTcxNUQ1QTI0MTM3QjVEQTZDNDhEODEyM0RENUE5MUQzQTRGQ0JGOEUxQzhEQzRGRDgwRjc1NDEyMDJEMgorMTg1M0QzLCA1QjUxM0JDQzIxMEZFRERBQkZBQzM2OENBODc2RjkxODA4RkY4RDA4MkRGQjNEQzZEQUI0OTQ3OTdBNTQ3RjI2NDNCQzFDM0QwNTc3MEUwRjM5RjA4QTFDNTI1OTlCRUMsIEY2RDJBNDcwOTYxQUZCQTA0RDk0RTk2QTREQjFERDQxM0REQkZBMDQ0OUMxNkE3MkVCOTVEMzlDQUJBNDdBM0NCNEZGOTBBN0M4MDg1Q0U3Q0RBMzU2NEQwREQ5NzFDQgorNDhGQjc5LCAyQUVFMTQwN0QwN0Q0QjgxMDFBODYwNjE0ODZCMTlEOTM5OUNFMjgzNDVBMTk5MkE3Q0I5RUFDNDNGM0ExMzk0MUNBRTc5MkUzNDAyODY3QjA4MEJDNTA1NEQyNTlGNkEsIDgzODNFRTRBOTk4NEUwQ0MzRjUxQ0IxQkRFRTZCQkEzQTE0RTUwM0QwOUVGMzZGQkE4M0JERTc5QTE3QkJCRDk2NjNDRThBQTRDQjc3OEM4RjgyNTJCMzA5NzkwQjEyMAorREFGMjZCLCA2RTY0MENEMDRFMUFDMkE3OTU3OTg3RDJGQzg1RUE3Njg4NjI1Q0FGRkJGQjU4Nzc3MEYyNkUxQTQ0QzY4MkEwRDk0N0JFN0JFNDg1MjMzMDA2QUU1OUVEMTJCMjU2MjUsIDFDRTFERDRGNTc1MkY4MDJEMjY0QTY4RjUxMzdDQzVGMEM3NkYyNDAwN0FEQ0Q2QzI1ODVGMzNBMjFCRjRGRUFFMEM4RTQ1MEE2RkI3OUEwQjA5MTY3NEJEMjJCQjY2OAorMjkwRDc0MSwgOUZCRjJDQkY3NEVGMjQ0RDczMzY3NkQwNTFEMDMxNEJFQUNFNTcyMDdFMDJBNTNCQUQ1QkY3NzdEOTlFQkYzQjIxNzcwNTc5MEVFMTdDQzQxRUMwOTgwOUU2NEY2QTI3LCBDQ0IwQTMzNkNGNUI0MkJDMTgxRUEzMzQ3NkNDNEYzNDg3MTBDQkVERTY5MEIzOUM1NzgxMTVEMUUwODVDRkY1RTUxRUY5NTYzNEMyM0E3MTIyNjU2M0ZBODBFNTVBRjcKKzdCMjg1QzMsIDlEOTREMDk5OUQwNTlBNkUyOTREQUVGNTZGNzU4MDlEODI0RThBRDkxMDI2QkYwMEM3OTI5NTMzMzBCNTk5N0I1MTg0OEVDQTg1M0Y1OTY5RkVGMTJCQjg3N0E3RUM4QywgNDZDNjFDOUM1ODhENTgxNEI3ODk2NDNEOTQ1Mjc3RDZFNzgwMTg3N0EwOUIyRUE3MjY1NjdGMTFCMkRCN0EwNjUyNkZCRUYzNjVCNkZCRkI0RDU2NDk3ODE0QkZEOTdBCisxNzE3OTE0OSwgRTZBOUY2NkE3NTUzNzVGRURGRTlFRjU3REJCNjNBNzg0RDU0MUJBNkJDQjZGRUQyN0ZFNEQ0QjU2MDVFNUE2RjgzQUZBNzFFQzE0MzYwOTFCOEI2NEUyRkNDMjdGNUE3LCA5RTVCQkMxNjA4NTQyMjNCNzRDRjFFMEUyNkM3QUIzMDRBM0JBM0U2MzkyQzFGNzRFQTFCQThDNTU2ODAxNzFCMDFEMjc4RUVGNzRDQjNCNEQ3RjM5MEM4NjAwNUMyMUIKKzQ1NDZCM0RCLCBGODA2QjE0RkE3MUI4OEQwRjZBOEI1NEUzNzA4RTQ1MDQwQTg1OTk5QTcwQzEzRDQwRTA2OTkwRjM2MzA3OTNBMTQxRkM1MTdFOTVDRDAwMjFFQTE2MjFDOTUxQTRBMkQsIDcyODcwRkU4QkUyNEI1Rjc0OTMyMkY5MTk3QUUwM0RGRjFFNDY4OUFBQURGNzhCQkQ0REYxNjQyMUQ1RDU5RTJBRjJBNUI0OTlCN0ExOTE5RUEzMTEwNTNFNkVCODEzRQorQ0ZENDFCOTEsIDEzOUVFMEUyREQ4MTNGRTcyMTY4RTg4NzZFMTRBMDNFRjMxRjRDM0ZCRkMwMTU5NTczM0I4MDlBN0MxQjhDRkU2MDE0NjI2NjIyQkZFMkY2NzQxRTc3QjI3MTIzODE1RiwgM0QyRjc1NzBDQ0VDRjA4RDdFRDg0NTFBRkFGN0EwNkQ5NEJBNjU1NDVBMjBCOEVENjI0OEIyNDk4OEI3MjRGMjM0OTYyREIwNUUyQTYzOTREMzQ0RkY2NEM3NzJCOUI2CisyNkY3QzUyQjMsIDEzQkFDNTQzMERERTE0Q0RCQTMzMUE4MjE1OEQzQTQ1RDJDRjA5RDMwQ0JEOTUwRjM2MDYxMDNCREVFMTk1MTc5QUJCRkNGM0JBNThCNjY0QTVDOTcxNTZBQkZFMzM3NCwgNzRBMDBEQkYwQzZFNDQ3MDMxMjY5QjA0MTEyMUQ3QzkyODE3OTkzN0VCOTA3RkFENTBERDRBOUYxMjhGRjQ2MkJCRTMwMjFCMDFGOURFOUM3MTI0MjVCQzc1MDhDMEYxCis3NEU3NEY4MTksIDg5NTlBNEQ3MjYxM0NDMDIxRDY5MUI4REZCODg3QzIyODcwQzAxMzU0QTZCMEMxODVDQkI1MzU5NDVBMTlBQjVBRTQ3NkE1ODYwNUE0OEEyNTY4RjNBMTQ4OUI5ODI3QSwgRTQ5QUM3QzkzMjg3NDIyNUE5NEEzMDIwQ0M5RTgzNDE1RTlGMkZDRjc3QTJENzBDRjZCRkNEMkY4OTBEMjcxOURCNEUzRkQ4MTZDNzZENEQzRjNGMTA0QUM3NkMwMzUzCisxNUVCNUVFODRCLCBCNTQxMjVDQTFBNUNFNDdFRDA5QUI5OTg3MjgwNEZBODE0OUU1QjExRkM2NUFCMzRDRDJCMzBERjAzOTY1RDE0N0NEMzk0NzFDMkE1OTU0OUE5NUQ2REQ4NTA2NjZEM0EsIDJCRTgyRDA4QTBDRjJGRDI4Q0JCQjkzNzNDNDBBNTg3NEY4QTE1NTY1MEU4NjBBMEIzMUQxOUY4MUI5NDU1MEIwNjVCNDA1MjQ1RTBBM0E2ODNFMzVCMjUyMTRDNjA5QworNDFDMjFDQjhFMSwgOUU2MzlFMjkwNjE0RUU3OUNFQzM5MEEwMTNBNDA5MDMxOEZDRjU3NDRBRkFEOTFBMzM2MzREQjRCRjVFMzZCNDg4RkM3NUUyMUVBNUZDMjMyMTdEQzNGQTNFMDA2RDY5LCAyRTE5MjI1OUIzMTZBNEVGRjA1OTI1Q0MyRDU5NTcxQTAxOTdFOUQ2RTA2QjAyMTVFMTVFM0YzRjREQzRFNjdBOUQ4OTZGRDI1QTI1NjkwN0EzNDE1NkI3MkNEOUJGQ0QKK0M1NDY1NjJBQTMsIDM1OENFNzlGNjM4N0FFODA0QzZFQUJDNjc4MENGRENEMUFFRUI4MzZCOEY5NDc5OUNDNTczOUI4OTVENjAzOTQwQzUyODUwMDYyODI0QzM1QkI4QTJCMTk5REM0QjYxNywgNkQ3RUY5N0ZBQzc5Rjc5NkZBNzcwNEYwN0ZFNjgyQUFDMjhFQjlDQkNGQUEyREU0RkJGRjQ3QzcxNjczQkREQUU1NjMxNjk0MERERTU4QjQwQjhCN0E3RDBBNUI4NkI1CisyNEZEMzAyN0ZFOSwgNDIzQ0FFRkExN0Q0RTA5MjI2MEE3QkIzRTJEQTU1RDJERkIyRTEyOTM4QkE5NTBFMEU2RTRCRDRGRThCMEFENDhCMEEwNURFMDA5REY0QjVBRkNFMUMyODY4NDE4QTkxLCA2OUIyREQwNTBBNzdDQzREMjA0NDkyRUVGOUQ5MjlDQTc4MjhCM0EzMjI4MjczMzNGMzdFODJBMEU3NkQzNDQ3MEFCMzMyQzk4MTk5NUJGMTQ5NUFDOTk3NzI0NjM0REUKKzZFRjc5MDc3RkJCLCA2MThGQTk5RUZCRjRBNkRCQUREQkU5QTFCMEVERjM0RjVDRkI5M0ZFNTU5MUUzQjIwQjU0ODhFQ0M0OEM3OUM3Rjg0MzExNzVGODdGMTIyOUI4N0ZCMkYyMTEzMjhCMDQsIDQ4REYyRDMxQ0I0NjI1RUE3RkExOThGNDE0MkM2RUNDNzBFQUYyMTVCOEY1NEI1Q0RGRjA5ODg0OTk1NTlEMkFDMTE1NEI5RDkxNTJBODNDNDYyRTQxMjkxQjEyMUE5MworMTRDRTZCMTY3RjMxLCAzNERFRTFEMjcwNjA2Q0M5QjQ4RjMxNTFGOEQzNDkwQzM3RTMzOUE5MTMzRDQ3NzQ2RDI5MDFEQUZGRTVENkM1RjhGQjIwNUI2NjgxMkIxNzdCRTQzODU1RDJDRjQ3QkQsIEEyMEQ1RkRFQ0NCOERCMzk2Qjk1NzRFQkQ4QjA1QTczNjBCRDAxQzQ3RkM3OTQ0QjQ2NjI3QjA5QTQ5OTA0OTRCRTJGQUYxNTkzOEQ4M0ZGNEYwMDM4REY2MTM0OEIxMworM0U2QjQxNDM3RDkzLCA3RUNEMEEyMjEyMDVEM0JFMDA2OUFCM0M1Q0EwM0M5NjdFOUYyN0FBREVBMkE1MkM4QTAyMTNDQ0I4QzdBMjBBQzI5OUVBNUFFMjY4QzNGNUY3NzYzRjVCNkYyQkREQUIsIEE0QUNFNDZEMDJCRDlDNjNERkRFODI3QzIxM0Q3MTJBQjhGMDFBOEFDMDAwOTk1REMzOTAwNkE2MEUwQ0NEMjMzRjhDRjA2OUJBOTYyMDczMUZGNkZDNzcxNzVEREE5CitCQjQxQzNDQTc4QjksIEZERUQ4RDNDQjM1MUUyNTREMUUwNzI2RDZDMzREN0I0QTY2NDZGOTc3OEMwMDhCRDBDQzA5NEI4MDNEQTFBOTg1QkUwMzlDRkI0MzgzMjZCN0VFRjdDNTVDNEIyM0RGNSwgRkEwMjNBMzJGMjBFMjE3RkRFMzc2RjRDNzc1QzZBNDExMjFDNzdCNzlENUU2NTJGOERCNzFFNzU2NEIwRDZCOERGODNFRURGQTI0NjQ4N0U5NERDNTNDQzQwODlGMEQ1CisyMzFDNTRCNUY2QTJCLCBEMTdFOUM5NzkyRDlEMkU0Mzg1MzY0MzNDNjc2RUZERjZCQTE0ODBBQ0I1MjVBMTI5NDdCRTdCNzU3NUI4NzM5NDhBQkMzNEEwMTRBNEUwOUJCQzdCQzc2NkZGMUI3ODUsIDYwNDE2RkJDQkZBQjg1RTM5Mzk3MjIxNkIyNjc1QkJFMjVEMDUwRjJBRTRDQ0ExNUZDQTBFOUYyODAzRjFDODczQkU2Njg5NUMzRjNCRTkyRDAzN0ZGQjA5NzJBN0IzRQorNjk1NEZFMjFFM0U4MSwgNTIwMEZDOEI0QkRGNDIyQjAxODNDQjBBNERBQkU5Nzg4NDc5ODM3NzI4OTMzMzdGRTgyN0EwMkEyNzkxQkJENzIwQTZDOEZENDZDQUJGRDMyMjUwQzY0QjVENjdERjI5LCA3QjQ3RUJFMkY5RTIwODQyRTUxMkQzNTNFNUNGMkNCRkI4MDI1NjdBNkM4MDVFREJGMTg1NkE5QjQ2RDA5NzFGRTVBMjQ5NEVDNTE3NTE1MThGOUZCMUVFMDM2RTYyREMKKzEzQkZFRkE2NUFCQjgzLCA3OTYwOTIxMDExMDYzNzg4M0IyQkI0Q0IwMTdGRDUzMUYyRjg1REEzM0M3NUEwQkMzRkVEMzNCODg1QjMxRDY4NEI3NkRBRTIwN0E2Q0RBQTkxMzcwNDU1RkIzNjgxNCwgRjRGRkVBRjE4QzE5NkU5NENEQzFCQkQwOUZGNTJFRDk1N0Y0MzNGMjNCRUIzNzUxMDAzRTJDM0ZERjAzN0Y5RjhEQUQ0M0REQzk1NjIyMERBNUQ2OUIwRDQ3RUUxNTM0CiszQjNGQ0VGMzEwMzI4OSwgOEQ2Rjg1MzNDMzgwQTVDRTZCMDdGODYwNjQ0MDg3Nzg4RjA2RTY1MTM1Q0Q1OEQ0NEZFRDkyMjgyQTQ1RUI5OTc5M0NGRjAzNzlGODFGQURDMkVFRkY1QjlGRkM0QzVFLCAxQjUzMDJGRDE4NkUyQzhFNTdBODY5NDcwRjU0MkM0QjYzM0U0OEEwMjY5MzNEOTVFNjIwMjQ1NTI2MkFBRUI4MDE1REE4NTc0ODZEMkQyRDFCNDVGRjA3QUUzMDgyOEEKK0IxQkY2Q0Q5MzA5NzlCLCBFMUMyNTUzRjc0MkNGRjI4M0Q2MDhFMjI2QzVFNzYyRUY4OERBRkQ3NUE2RDY4REQ3OUE2RTk0RUIwOTRENEQwNEE0MEM4QjRCQjgwQjVGNDk5OUMzQTQ0MTUxREExOUMsIDk3NEVBNEFCRTg5NTVDRUE3MTVGMDQ0MTA3MEJCQ0JCMDRFQ0Q2ODZDNTBFRkI0NEIwN0U4MzBFNTc2NTkyODQ5NUQwNjM1QUM4QUYwQ0NDODI5RTdERUREQkQxNjk4RQorMjE1M0U0NjhCOTFDNkQxLCAxMDgyMUYxRDlBRDJGMUMwOTkyOUQwOEYyMjkyQjU4MTU2RTk0QzBDNzI5REY1OEJGM0FGOTI5RTc5Q0UwMTFEM0JDQTExNkZENDdCMjFEQjlGMDQzQzE3RTIwNTIxRTAsIEI2MDMyRDM0OUI0OURGQTJDOTdFRUExMEE2MDVBMDk3QjUxNTgyRDY1M0QwQkYyOTdDQjM4NUUwRUJBMkRDOTgyQ0E3RTkxMzVBMDE5NjAzMUVFMDcwMEM4RENDM0RFQgorNjNGQkFEM0EyQjU1NDczLCAxQkJENUM1NUNDRTE5Q0NCMEFEMzBERDc0MDVGNUU5MUUyRDJGNTFERUIwOUVEOTc0QUUwOUVGNzY2NkE4Qzc0NjE2RDc3NzlGQzVCQTc0RTc2RjM5RkU0QUFCRUYwODksIEM4MjdBREFGRDQ4MTkyQjJCOTk1RkM4Mzc4MTIyQkQ4QTM2MDI5OEM3OUIzNjY0M0RCQUQ0OUJFRDg0NTM3MTFBRTE2REU2QTFCMTQ2NDQzQzE5QkI1OUU0MzlCMTRBNgorMTJCRjMwN0FFODFGRkQ1OSwgNDAzNUUxM0VGODk4QTEyRUYxNUU3MkNCNzlERjgzNDk2RDVCM0NCNUEwQkJCRDY4MDAxOTNDQ0RBQkZCMjA3OTQyOTc1MjlGMzRGOTM1RjFEODBERkM2OUIzMTQ0Nzk1LCBGMkU4NTQzNTE1MDZBMUMxNUNEMkUyRTZEQTdFQ0ZEMTBBMEFDMTZEQjJGQTkzN0EwM0FDNkMwQjg3NEJFMzRBMjQzODkwNkZEM0YyMkY1RTUwQ0I1MkQyRTg0RDU2NzUKKzM4M0Q5MTcwQjg1RkY4MEIsIDJBQTRCODE5QUM1NzM3RDg5OTQ4NjM0RThBOTI5NjhCMEE5RTcwQ0JCNDdFQjY3QUQwOEYxNEI4QTU5Qzk3OEM5NDRGQ0Y1MDM5RDQwMzJCNDFDOEJBMjRBNkIwODA2OSwgMzMzMkIxN0E0RjY2QTAxOEI3Mzk4Rjc5M0Q1NDM4QzQ4RUY4OEY5QThCNDM5ODAwQjRBM0EzOEU0ODM3Mjc4NzE2ODMyODYxNzk0OTRERDRDODQxMzBEQjYzQjk4RDYyCitBOEI4QjQ1MjI5MUZFODIxLCA1NTFBRkM1ODVFNDZDREQ1MDI0QUU4MEJFQjc1QjA3OUI0MzVGOTBGQUFCQkVCQ0MwQTc2MTU5MzhBODNGQUFDM0I1MUM0MkIyOTVCOEJENzQ3MkFFOUU0Mjc4QjUwNzIsIDVFRUM4QzVDMUFFQ0I1RDQzMjk3Mzg5NDJENDAwNDY1NEFDMzc1RTQ4NjEwOEZFQjI0RkJGMkFBRDVGRDQ1N0JEMzJGNjU2MzI4MUEzNEI2NzBEMTAwRjE5NkU1NjNDMworMUZBMkExQ0Y2N0I1RkI4NjMsIDE5RTg5QzRFNDdFRUI4OTcwNTczQzA1OTMxRDQzQjgwODNEODUwNDk0NjQ1Q0Q2QzRCMzc4QjNDOTBDQTgwMTVFQjlCMjJDNzlDODg3NkIzQUI3ODE1REMxQzlDOTYyMCwgRTk3QjRGMUMyMjJGMTA2MTBGNkRERkI1RDE4RDNGQzE5OTMzNjdFMkVCQTMyQjk0MzkwNTczRTg5RDQzQTE2NThBRTc5ODUyM0ExMTRFNkFENThBNTZDRTVBQkJBRTZFCis1RUU3RTU2RTM3MjFGMjkyOSwgM0FBNzcxMTcwMEVCQTU2NUU5MEIyNUJDMEExRUQ5MjM5NUQ5MkQ5REI4RkUwNkE1NEU0NTVGOUZDOUMwMzExODgyQzQ3MEU1MTlCMkFCMjc0OEEzRUE4RUQ1OTM0QkY5LCBDQTBFRUYyN0I3RkE2MjE4OTNCMTU1MzIwQThDRkNDN0JBQjJDNEMwNTY3NTIzQTM0QjNGRDE3Rjg0MzIyNjAyMkU1RDg3MDI1REQ0Rjg3QjFGNkNBNDM3NkJCRkFGREQKKzExQ0I3QjA0QUE1NjVEN0I3QiwgMkJEODk1REZDQkJEODU5NTBGRkU2NzVCRDZDQzI5ODk2M0I5OURCOTA5RjYyN0E1QjJCMDhCRTQ4MUQ4NkZDQzk2NDA4MjM5NjRFMjQxMzgwODYyNTUxMUUzRjhERkFCLCA1MTYxQ0NBRDRBNzk2OEI2ODVFRDNDRDM4MEY5QkIzOTFCQzU5RDlERTA4RjRDNDY3RjBCNjVGNzBERDc3QTM2N0VERTJCNjY1NTEzMzBFNUZDODg5OEUxNDQ2RTM5QjIKKzM1NjI3MTBERkYwMzE4NzI3MSwgNEE1NTM3MUUwOTcwMEQ3RjFCOTU0NzQxNEQ2QjNFNDA3MUY0MjZBMzBGMTU4MDY5MDQ5NkY3REEwNkVBOTI5MEQzQTJGNjhFREY2NEJENzUxNDVBQzhENjBFMTI0RUNBLCBEQUU3M0YzOUJGQkQzRjJBOUYzQUQyNDdFRTk0RkQyNUFEOUU4OTFBMDc5RjJBRTE5MTYyNTYzMkQ5RDUxMURENzc3RkMzMkUyQUU5MzBDNUE1QjYzMzczODU2MThBQjEKK0EwMjc1MzI5RkQwOTQ5NTc1MywgNkI0NUE5M0Y0QkZDOUY5MDNCNjM4MEM4RTFCRjIzRDMzMEZGNjY5NzgwMzFCMkJDMkJBMkY5RjExMkUwNEMyNDJCN0UxREI3M0M3QjI4QkMxRkYxMkExOTk5MjQ5MjI5LCA5NDY2N0FBMDM4MTUyNTIwRjFDOENGRUQ2NEQ4QzY1RjYwQjJBNjhGMUI1Rjk2MTZBNjY1NkZDNUU5MUYzNDQ3QTM1RjY4NDE4N0RFNjUxQzUxN0E0QUE4Njc5QjJDOEEKKzFFMDc1Rjk3REY3MUJEQzA1RjksIDdGMEY1NEMxRTRGQjQyNzU1NkRBNDU4MUY0ODAxM0YzQTJDRTQ2QkJFRDY2RTg3MkMyODcxMjBGNzIzODE4QjlDRDY4MTZERUNBQTZFMjE1RDYyOUFDMDFCQjVDMjA3OCwgNDcwMTIxQTdFMzRCMzkyMTIxMDdCQTQ3M0I3REMxMzJFMkZBMzIzOURGRjNDOTI4N0RBNkFGMUFGNDY1OTFGMDE1QkQ5NjJGRjBGOEM2NkRCRjU1REREMDI1NzlFRDBECis1QTE2MUVDNzlFNTUzOTQxMUVCLCBDN0U4NTkxN0I2NTI1MEFDODQzRkE1RkRBODA4RjAxQ0FBQkQyNzZERTAzQTQ2RjU0Q0U5MkMxN0VENjAxOUQzNTNGRUU4QkRFQUZCNjQ2RUE2QjY0NUUxNkQ4MjIwMzksIDZEMzhGQjEwMjUyNDI2QzI0RDc3MzY3RjZFRDZDRDY4QzFDQjNFRkFFMEVGMjNBMjlCOEZGRjUwNzJDMzIxOTlENzFEQUUxMjA0RUYzMEFBODQwNUMyNDI4QzA5M0E0RQorMTBFNDI1QzU2REFGRkFCQzM1QzEsIDM2QThCMzcwOTU3REIxRjg3NUE2RDkxNkQ4NDYwOEIxRDQ5MDIxODM1MThCMkUyQTM0MDk5NjFFODUyREM0MjI3NjlBN0M2RDg3MTk5NkZBQTBENjhBODdENzM4MjRFMSwgN0MwQjU2QjAyOUNDREQ5RDEwNkU4OEE4Q0M0QTUzODQ2OTdFQjlBNUQ2NjA0MUY0Mzg3NTNGQzA3MjRGQzhDMzJBQjIwMDE1MzFBQjM3QkREQUZBMkY2NjZBN0E4RjU3CiszMkFDNzE1MDQ5MEZGMDM0QTE0MywgNjVFODMyNEM4Q0FGMDVCQUM2ODMxNUUxRkEzQkFFQUE0RDdEMDdCNDJBMEYzNDE5NjBEMzg4MUQ4OEFEMTFEMzgyM0NEQzA2NzE3OTQ3QkZCQzQ3Q0Y3N0VGMDJBMjg4LCAyMzZBMDVFQTBDRkU3MUI1RDJFNkFCMjEyMjgxRUUzNTFFMzgwMTUwNzMzRjUyRkRGNDA5N0QyNTU5OTRGRjlENUU1ODE3QjExNEMxRDdFMjU5RkI0NUQ2MTY3NURFRUYKKzk4MDU1M0YwREIyRkQwOURFM0M5LCBBN0I5Mjg0NjE0NjRDMUE5ODczQTBCREQ2RDQ4QjdFQkNFOTMzRkVBMUY0NTVCMjFCNTIyNUIzRDExMTdBNUU3N0VGQkJBRjYwRURGQ0FBNTFCREUzNEUwNjlCNTM5RDcsIEI0QkYzNTIzQzA2QjFBNzFEMjIxNzI1OUYzOTA1NkJFMjhDMzRGMDg2MkRDMzc2NjM5NTQxMTE0NThEOERBREFFNUNCRTE0NkRGMUE5MDMzQjE3M0ZDRjVCMkM3RjE0NworMUM4MEZGQkQyOTE4RjcxRDlBQjVCLCA4N0IyOEI0NTU1QUVFN0M1NzkxOEZEQzZCNDE2MDk4RDMwQzlGMzgwMjI4QjYyMjdBRjlBRTcyQ0Y5ODU1MENDRDVCNEE1NTY2Q0VFNkZGRUNEOUI4QjBFMDI0RUQ4RjgsIDcwRTVEMTNGRDExRjBGQjVCRUY2RkZGODQ4NjRCMkM3QTUwQjU2QjVDMjVGQkY4MTE2NzMwMTFDQzk4NTMxQjE1RjMzMThBQjkyODdDNjk5OURGMDc0MjJBRkQxRDg5OAorNTU4MkZGMzc3QjRBRTU1OEQwMjExLCA5QjdERDM5QTZERUEzOTJDMDk3MUIyMzAzQ0RGRjBGNTk1QjZEOUM2RjdCQTIyNzhGQzZCMUEyOTI0NTUxOTlDRDM4Q0NEQjc1QzYzNTlDN0Y5RkE2Mzc3MzVFMjk0RjIsIDRDQkZFMDc0QzUyOTE3N0NFRTc5QTM4ODlDMjkwNkY1MUNCNDIwREVBQjI0RDFBMjI5NUQxNEJBRDJDRTFFNjM1NzhGOEUzNjMyNjYxMjJBNTU1M0IwOTVGMjU3QzNDQworMTAwODhGREE2NzFFMEIwMEE3MDYzMywgOEVERTcxQzgwMDA3Q0I4QzQwNjZDNzU5M0MzMTM5REZDQ0VEN0ZFNDJCM0Y2NEExRjZDRDEwREJBQkJEMUU3MDQ1NTc5Rjc0NkUyRjhDOEVDRDgzQjdGMzhBMDA1OUQ1LCBCQjc5Rjg4MjJFQUNGQTMyODQzMjIwOTQyMkE1MTFGRkU0QzRDMUFGQzhFMDJBODI2QjRGMTYzRDg4NkI1ODU0MUJFNjQ3RkU5QjNDNzhBODkwNjkyOUU4RDc2QkQ5NjYKKzMwMTlBRjhGMzU1QTIxMDFGNTEyOTksIEU0OUFEQkM3RkM2MUE0OUZGMUY0MkNGODBCOTgwMzM1QTg5MkY2Q0YxOTY4NTRBMjFEN0MwMjE4MjFDNzYwNzk3QzcxNUU3REUxRTk4NUVCQTkyQTJEMkE2RENGREM2OCwgMTE3QjVBM0JFOTEwMzI1QkVFOTg0OEE5Q0Q0QjgwQTA0QTNEN0U5NjVEMjVCMDI5MEM3NTg2NTM2RjJFQkY2MDk1MjBBM0QyOTRGNzVENkZFNDAzM0VBREMzMDY2RkI2Cis5MDREMEVBREEwMEU2MzA1REYzN0NCLCAzRjdEOTdDNjE1MTEzNTRCNzAxMkZBQUE3RDk2Q0EyNDhEMjE4NzEyQkFENjA5RjhDOEJCNTgyQTQzOTBBNkZGRUM0RDg0RTdCQzhDNTI3NUQzNjg5MjgwRUIzQjhGM0MsIEM1Mzg1NTQwOEEwQTY2REMwMkZEMDUzMTVDQkI4OTZFNEMyNjdGRjg2OTI3RkY2MEEzOEZDRDZFODA1Mjg1ODkwRjJDN0E2M0JBQUY4NUE3NkIyMjBFRTM2Mzg1NUNFMQorMUIwRTcyQzA4RTAyQjI5MTE5REE3NjEsIDNENDdGOERGMTYyMDk3NzdGRURDNkUyNzVDODYwRDREOUE1NkU4Q0QzNDQ0NjM3QzBDQTBDRDg1RDJFNjE3ODg4MEE5NjJCOEU0MERGRDBEQ0IxNDlEQzZBQTkzNzg3QSwgQTVEMzlCNTQ4QkEzOTFBREI0NUVGMDVDMzY0ODg4OTBENzA1QUMxRkNBQjcxOTg3RURDMjgwMkJFNkJFOTBBNzMxNTk4QTM4MjQ4MkIzQkM5NkFDQ0Q2RjZFQzU5Qzg1Cis1MTJCNTg0MUFBMDgxN0IzNEQ4RjYyMywgQzMyMjYyOUI2MDZCNDA3QzhGMUM1RjYwNEFBRUFBNDIzQkE2M0Y2MUFFOUJFNzhBMkI4OUI0N0FEODkzMUMyMTJGNUNBMEE5NUMxQ0IzMjBBNkIxQkQ4QURGMTM5MjU1LCBDNkNCNDc2RUY0MTUxMjEwQzNCMjUxOTgyRTc2MEUxM0U0RTVDMTQ0MUE4MjgzQzZGMDg0MDZCQjg0Q0JDQzRFRkFEODBBM0M2NEY5MDQzRjMxMTkzREY1MzI0REQ4MkUKK0YzODIwOEM0RkUxODQ3MTlFOEFFMjY5LCAzRTUzODQyMEMzQzc2NDY2RTY5MUI2MjQ3QjBCRTM4REFGNDc5OEI4MUZENTVDNzA5QzdDNjE5RDRCMTVENjBGODgzRTQ4RDA4RkE2QzA1M0EyNEZDMDZFODQzQzM3ODMsIDVBNjQ2MkIxODk0QzBDRjk4RDExMTY4NUVDMjc2RTVGQTFBQTFCOTQxN0E3MzlGRUUyNzE2Njg3NjZBRkE1RkFBMkI1Qjk4RUE2M0E1ODQ4Qzg1OENBNDg3QTlEQjgzNworMkRBODYxQTRFRkE0OEQ1NERCQTBBNzNCLCAyOTBCN0Q2NzE5MEI2NEIxNzU1MjEzOTJCMzEwMzM2RjNCNTFFRUQ0RTgyQ0FFMjZCREU5MTExRDQwRDVBNDI1QjhDRDdDNDkyQjNCNDI4NjUzRDQ0MjhGMjFBRUEzMiwgRkMyQ0NBRTRGRTIwRjE1QTY1OUI2RjA3OTUyRDdDMjNERDM2RTc3MTUxMUREQUIzNDZFRkQwMjcxM0Y3OEY2ODgyN0I3Mjk2Q0Q2RUM4QkI5OEY5RTUzNjI5Rjk2N0M4Cis4OEY5MjRFRUNFRURBN0ZFOTJFMUY1QjEsIDQ2OTU5OUYzRDFENzI4NTU2NEQyRDE5RTlGQjIwRTM3NDY2MUI5NTk1OUY4NzQ5N0Y2REQzMDE5REE3RDEyM0E3QTI3OTRGOTdGNjE0NzFGRDQzNUM0NzhDNzg3MUU1MiwgRDZCQ0M2RDk5RTNGNDQ4RTdGNjc4NkZFQzcyMUU4NDA4MTY4Q0MzQTQ5QkYzQTVEMTJENjM1ODUwREFDNDI0RjhBRDZDRDc5MDgyOTJBQTdDQjExODQxQjY4M0E3ODRFCisxOUFFQjZFQ0M2Q0M4RjdGQkI4QTVFMTEzLCBEODQ4NkM1RTIxMjZCMUMwQzc0NUYzOEFBOUE3QzJDQUI4Q0RDNjI2NzdEQjk5M0M5MTc5RTNFNzI5OTZDREUzM0M3NzNENEY5MERERUI2QkQxMDlFQzlEMjk1QjM3NTQsIDE4MENBQTJFQzg3RUFDQTE0RDkzRTVBOEI0MjQwOTBBNzZERDdFOUU1MzI5OTAxMDg0OEE3NzFCNEU1NjVBREQyOTc1MjcxOUQ1RDY5OTMwQUU4REE0NjYyQTcxMzNDNQorNEQwQzI0QzY1NDY1QUU3RjMyOUYxQTMzOSwgMkYxNzY3MTc2QzJFNThFMEYwOEI0QTUxRjUwMEYyMDM2RUY0RDAwRTE2MzUwNEEyRUFBNzVBMzc0QjI5OTlGMDQ4NjE3M0EyMkJDNEJGQTIxMzFDMTE1OTBFQTk3NDksIDI5M0EzMjEyMjNERDdFRURFNEIxRkQ2QzVDQUQ1MUZERUM3RTExRjE5QkNGM0JDRDE1Q0E0M0RCQzE4NDk0NENCMzgyRDUwRTQzNUFGM0E3REYwNjlFNjkwRkFFNkE4NQorRTcyNDZFNTJGRDMxMEI3RDk3REQ0RTlBQiwgMzlDMURCMDQ0Mjk0NDUyRkYzQUZBMkVDRTNBMkE1RTE2RDFBMjM5QzBCNjNBMjJBNTIzODZDQjQ1NDZERDg3NTk5RENERDk4OTRCOTVBOUQxN0QwRjE1NDIyQTY0MjQ0LCBGQURFREFGNkU1MjI0RkVDMDhFM0EyQjMyOTQ5MTZGRkExNzhGMTI5ODRDM0U3NzdFMUZCRkE1NzFFODU4RjdCMjhBRkRCQ0MwRTI0QkZBN0NGODQzNTI3OTBCQkM5NDIKKzJCNTZENEFGOEY3OTMyMjc4Qzc5N0VCRDAxLCA5QTIzRjEzNDI1NjE5OUI2OTIyREU4QkY2M0EzMzRENDhEMTM4MjNERDQ0N0U1MDUzNzNENUFGREU0RkNEMzkzMjlCNUQxREYwQTMzQjAwNjVCNzY5QTI3OEEwN0U1MjUsIDg4RUMyNUQ4QTJFMzNCNTFFOENBMTdENjg1RkQ5RDQ4QzgyRTQyMEYxQjlBQ0E5RTc4OUNGNUJBRTk1QkE4NTc5RjdEMjg4NEMwQjYxQTQwMEI2OUU3NUY2Q0M4OTcyRgorODIwNDdFMEVBRTZCOTY3NkE1NkM3QzM3MDMsIDVEREYzQUZCNUQ2NDUzQUZCOTBEN0ZCQkYzRjczRUU5QzE1NDQzQTgyRTExQTZFNzE5RjQ1Qjc2NEUwREFGRUZFRUUxMUYxQUNGRTE4OEY3NUFBMjc3MjE0RTU4MEYxMywgMjIwQjY0MDFDQ0E0OTRDNEU5M0U0NzhEQjQ3ODhDMDE3MzAzNkFBOTlFRkE5QkE0NDA1RjJGODJCMTEwRDY4RjI0RkU3NzEwNzg2NjFGQUY0RkY0Q0U4N0RCQjUwQTMxCisxODYwRDdBMkMwQjQyQzM2M0YwNDU3NEE1MDksIEIzMkY2N0YxNTU1OTYzOTQzODU4QkEwQUM3M0MyQjRGQzJCQTJGNTQ2ODFCOTIzRUFDNUIxMjlFODMyQkE5QUQyNTAyOEM4REZEQjI1MDYwNkU5MzcyNzdBM0E4NUIxRCwgQjBGMzk4OTVDODFGQTgyMzQ2NUU5REIzMDA4REFFOURCNEU3RkEwNkIzMUM2MTUzOUNGMjM0MjlGOUNENThGRDI5NkFGNjc2MUQ4QjI1ODY0M0M3NzlCOTMyQTlBNjdDCis0OTIyODZFODQyMUM4NEEyQkQwRDA1REVGMUIsIENGMTM3MDEzNjhFMEI2NjA0NUNGQzQxRDQ1RTE5N0E2NzVGNEI0QzRDNUQ0MUJGNkNDRkM5MDhDMzgyNkM2QzIyNzdCNjhCNTI5OTVGOUJFODYwRUJDMjkzQTU5QTU2QiwgNkQwMThFQTE3NUQ2MDNFOTI0QjEwREVEODAyODM2RENFOUYwQTQ0RUIzNjA5NEZEMUNBQTc5QjAzMDE1NTZCOEZCNjJERDg4ODZENUIyMjE0RjVCQ0E2NzMxNDc3QUYzCitEQjY3OTRCOEM2NTU4REU4MzcyNzExOUNENTEsIEY1NUZGMUM3ODdBODJFNkRBNzgxODdDNTMxMDBCMzE4NkU5NkRBMzlDN0ZCRkQ3RUEwNjlCMjhFMUQwQjJBMUM2N0EzQTkzQTBENUM3OTM5MENEMUUyQzlFMDNGREIzRiwgNTQxRjVCQTZEODU2QjlDOUJBMzI1RjdGMEU2MEZDMjNFM0NGRUVBMEQ1QzEzMTYwNzRBREUxMDU4NkEyOTI5MzdEQkU4RDhFRTE5MUE1ODg0RUE5NzU2QTUzREZFNkVBCisyOTIzNkJFMkE1MzAwQTlCOEE1NzUzNEQ2N0YzLCAzQTM4NjhDNUY5Q0Q5MDhDM0IwRjE5OTQzRUE1NTUyMzY0RTk5NzU1QkE5NzQ4NDNEMzI2MDlGNjNDQzk0ODM2NDUzNjU0MTdBMzQ2NzBFRTZEMEI1M0QzQUJCQjFCQjYsIDhCQ0VFMEI4NjNFQURDMkREMEQ1RTUyOEU5RjRGNkZFNTQ5RTg0REU0ODk1OEY2MTIwMUYzQTc3ODJEMEZBRTUyMzc5MTY1M0NCQkE1NDI0QjE3REY3QzY1MDc1OUU4RgorN0I2QTQzQTdFRjkwMUZEMjlGMDVGOUU4MzdEOSwgNzhENTAzNTI4QkJEMTZERkVFNkVFNEE2REMxRjM5NUE2RjU1OTUxODQ5NTNBNzkwRUMwMUEzQjYxRUI4QzUwNjBGQTNDNUJGMzYyRkE2NTc1RjhCQTU0Njk4MjMxNzQ4LCAxMEVFMkRCNjlGM0I5Q0M0OUM1NTU0N0ExQTc2NURDMEQ2QjczOEUzRUI2RUQ1RkM0ODMxMTM1OEI1QTY2MEVBQUQ1ODVCMERGNEQ3RDVBRDA4ODJFODQzNEZBM0ZCQkIKKzE3MjNFQ0FGN0NFQjA1Rjc3REQxMUVEQjhBNzhCLCA4MzkyNUVCMEZFRDlGNzQzQjA0RjRCNUIzNDNGNjQ5MDk1QzE0QzhFRjUxRTA3OURCOTY5MzYwOTZCM0U4MEI3QTJBMDU1NTAyMDI5MjZENjNCOTNDOTJBNzM3Q0I4NjIsIEI0MTE2QkZDNDlDRDIwNjYxOEMzRUQxMDBGQ0ZDNzc4OUUyMDhGODNFNUQ5RDk1OTE3RkQ0NUE1MzQ2RDRDMzdDREE2QUYyMTA0OUUxNjBBNjI4QjA2QTEzOTU2MjQyMworNDU2QkM2MEU3NkMxMTFFNjc5NzM1QzkyOUY2QTEsIEIxN0FDNzQxQzZDQURGM0E3NkRFMEZERjFGMjRCMjAxMjlDRTNCNzI0OUI4QUNDM0REODMyNUMwOUIxNzA4Mzg5QkIyOEY3RjNERDRDOUEwODYzRDA3NkRENjE0RUI4MSwgMUU0MkNCRkY0NThDREUwN0E4QTYxNUQzRTVGRTdCNTE5RUMyMDA3MUVFMUE4MkM2QjMyMjc5RjgyM0RCODRFRDE5MkYzMTBFNkJFRDRGMjQ3ODBEQUVBNzZFMTU0MUVFCitEMDQzNTIyQjY0NDMzNUIzNkM1QTE1QjdERTNFMywgQUYxRkRERTY3MzIzQjhBREExNUMwMEUxQzVCMTYyMkM3RUMzRDQzMDZBRjZCRDJDRkQxQUNDNDQzREVEMTE2MzFFMzlDODUxQTM1NjQ2NDZBMkVDNDc0OEFFNkQyQjI1LCA4RkRCNDYzNjg2OTAyMEQ4OUZDQ0JGRDA1MkI4RUNCREVCNzIwMDRENkY2NzQ1RkNGRUNDMUYzQzY2Mzc2REE3MzEyMjAzNTE4QjI2QzREOTA3QzJGNDIwOEJGMUMyNEUKKzI3MEM5RjY4MjJDQzlBMTFBNDUwRTQxMjc5QUJBOSwgODAxREI1NkJENDNBNTBDNDg1N0JBOTIyNjREMzEyODE2QTE0NTVENjY4Njc0NkZBRDgxNThDMzgwODQxQzU3ODc1MERDMTYyQjc1NDZCMTRFMUJCQzVEQkQ0M0E1REJELCA0NzQ3RkQ1ODc0QTEwRTQwRTc2REFCM0M4RDI3NDQyNjk0NkQ3MTA4NTc1MDFEMUFDNEYzMkQ5M0IzNTUxQzNBOEUzN0MzRUUxMkM5RDZCRTQyNUYyNkEzM0JDOEI5NTMKKzc1MjVERTM4Njg2NUNFMzRFQ0YyQUMzNzZEMDJGQiwgNTU2MkUwQ0NENzhDNThGMzgyQjk4NjU5QjZDMEJCNjA3MUVGRjc0QTUyQkIxRDkwREZGMDk0NjJDRTFFMUIzRDNDRjI0Q0I3MjI1MzhFOTkyREI4NjFFOEIwNDU5QzA5LCA0OERENTI2MTJFOEU3OUVCOEY2OEIxMTdBNTc5RUU1OThDNEUwNDk5N0JGQzcxRkRBMUU1MUE5OEYyRTFBMDcxQ0I5NUM2RDQwQkMzMkMxMzMwREM4NUM1MjM5ODAzN0UKKzE1RjcxOUFBOTM5MzE2QTlFQzZEODA0QTY0NzA4RjEsIDNDNzIwMTE4RUFDRTU3MjA4MUVENzEyNDU3RTAyOEUwMUE2MzdBMTMxRkMxNkVCRjM0REYwQjY1MTQyQTZENjZCODEzREE2OEE2NkFEMjEzRDE4REI1QTBBNTYyRDBGQywgODA2RTE2MjkyNTAzOTZDMDBDMzUyNDA3MTk0OTlDMDJGOEFFNzM0QzQ5QkEyRUQ5MDk1QkFCNUVEN0MxNzQzREM4Qzc3NDc4RUZGNTUxQjI1QkMxNjA2NkJFQUM4RUZDCis0MUU1NENGRkJBQjk0M0ZEQzU0ODgwREYyRDUxQUQzLCBBNjY1RTlCMEY1RUU0RkVCQzhFQkFBNzg3MTM1RUREQ0Q0REQ2NEY1NTY2RjhDNEEwMjE0NjQyRDA4RDJDOEU5NkQ0QTlGOEI2QTFEQkY5NDZBRkJENDdFOENDMUY2QzcsIEM3OTM1NDBFRTRGQzhEODRDN0M3QTVDNUFGRkY3QjkyMTNFMjk0RUFDRDQ4NjgwRjE4NEFFNTUwQzM1QzNCNjA5QzRFNDUyNEVFQUMzMDFGQjdDQTg3Qjg5MjU1QTkKK0M1QUZFNkZGMzAyQkNCRjk0RkQ5ODI5RDg3RjUwNzksIDY5ODg4MjM0MzQ2N0VBQzZFNjQyRTA2MzRBRTc0ODI2RjBGODYzNTgyNUNCODYzMUZERDQ2MUZDQTc3NkRBQUZEOTNBRDkyNkFGMEYxRjcyMzY0M0REQUJBODY3NDZGQiwgQTE1RjdDOEIyQUREREE1QTUwRTgzMEM1NkY1NjM3QTI3MDFDNUFCOEUwRjNBRjc3NkU3NDZGMzVCRERBRkE4MTIwMDQyOEJERkZDM0JCQzM5OEZDMjJEOTQyQTMyRjhDCisyNTEwRkI0RkQ5MDgzNjNFQkVGOEM4N0Q4OTdERjE2QiwgRkQxMEI2MkU1ODI2ODgwRUM2NTVCOEZFMzhEODgzN0YxMTFGQ0FDQTFFMzM4OURDOTY0NTM1MEE4QjE3RjBGMTI3ODdCNjU0QzAyQjdEM0JGNkE3Mjg4MzU1MkI2NkEsIERENjlBRDUzMTFCMjAzQzg3MDk3MDhDMkFFOUU1QUNENkVDQ0JDNzFDQkU4MzdGMDVBQzU5MTg4QjJDRjUzNjRGOTQ0OTQ0Njg5OTg3OUE0MEFGOUEzQzhBOTRENTE3MgorNkYzMkYxRUY4QjE4QTJCQzNDRUE1OTc4OUM3OUQ0NDEsIDdEM0RFODNBMjdGNTUwMURDM0FFQjUyNDZBQTE1OTExOUNDMjBCQzU5MkIzQTA0RUFDMTQwMzgzMTc4RkJENzNEQzI5MUM2OTc2REJGNjJFOEZCQUVCNDdFNEVFQzI0MiwgQkI2RUVBMzg0ODgwOEVCQTg5RUJFNDcwQUQyQzc5NjM5QkFEMzQzNjdBNEE5RkEyQkNFMDdENTk0NDE2QTg3QTAzQUQ1NkY0N0E1OTk0ODQ5MjNFM0I4ODRDRUEyODk3CisxNEQ5OEQ1Q0VBMTQ5RTgzNEI2QkYwQzY5RDU2RDdDQzMsIDU2RjY0MjNDQTEzNUVERTAwNjVFRDY4NTNEQzMzQTVDRUNFQTRCREIwRkRDQTVEQzQ4NTgxMjY5NUFBRUMxRUE2MkUzMkYzNjJBODlBQUY3OTBDRTM4NUFBM0IyMjdGOCwgN0EyMzI0NUZENDAxRjRCOEY4MDZEOTJDQjBEQzAxRDA3MEExNzIwMDEwNTQ4MkYyNEIzMzRDMjlERjQzNkM4REU0QkY3NDAwNEMzNkYxNzE2Q0U4NTUzOTMxNURENDdDCiszRThDQTgxNkJFM0REQjg5RTI0M0QyNTNEODA0ODc2NDksIEZCN0FDRjU0RDZCQzFGODcwNTNBMkE2OEVCNzNEQjhDMDQxRTlCRDkwQkEyRDczODRDMjQwNEQzQkE2Qjk4OTk1NUEyM0M0QTQyQ0JCRTU5MjExOUVBNTdDN0QxMzBGQSwgODA0RjE3RDRCMkY0MzQ3QUZFQTAwNDZBRDJFM0FGRUM2NkYzMjBBNDBCMkVGREMwMkZEMjEwNUE0NEZBM0E0QTM5RDc1RjhBMjM0OURBREYxNTQ4MzA5MTFENEM0RDc5CitCQkE1Rjg0NDNBQjk5MjlEQTZDQjc2RkI4ODBEOTYyREIsIEM2MDUxRjZBQzdDOEQzQTBGQjk2MTdDRjZCOTM1QkUyNDYzNjZEQUM0MEQ2REFCN0Q1Q0EzMjcxMTA5RTc0RTlERUY1QjVEQ0QzNDA1NEMzMTQ4RTA5QThFRTM3NkY5NiwgMTdENTExOENENDZDQjUyMEVBQUUyMkE1Q0Y5NTNBQjZDNkJGMzBDNEU5OTAzRTU2NDZBRTREM0RBQkMwMTEyRDhBOURFNTI5QTlBNzMwRTExQzk3QkRGNkUyNENGMzdECisyMzJGMUU4Q0NCMDJDQjdEOEY0NjI2NEYyOTgyOEMyODkxLCA4MjI2RjE2RUVDRENFRDc2MkI1M0E1QzIzNkNCMDQ3M0IxRTQyNkI3NTE0REZERUE4RTFENUUyMjM2Q0FDNjUxNkE4MzU0QzBBOUQ4QUVGMkFCMjVCMEFFQjU2NDJDREMsIDgxNDE3ODVFRUNDOTY5QkE1OEVCRkMzQTBFMEY5MkMxNzg3OEU3ODBDNjgyM0RFRDc3Q0M4NjM0RURCNTE1MUExM0RBQTUwNjQzNjc4N0ZCRUYyMUZEMDJGNDNFMUIwRgorNjk4RDVCQTY2MTA4NjI3OEFERDI3MkVEN0M4N0E0NzlCMywgN0M2OTU0OTgyQjVCQUYwOTA2MjdFMDA3RUY5NkJGNDVCRDE4OUJEN0MwQUQ2QTIyRTU5NTY3MzlCNjBFNTM0REJCMTBENEI1Mjg0OUU3RjIzMEJEOEIwMDk3RTI3ODQ4LCA0NDE0MzMyRTU3NTg1ODZDNDk1RTE0RDY1MDFCRjBCQjMxMkE3QTkzQUNBNzVCNERDM0MyRTgyOTU0NjkwMzk4NjRBNzBDRkZDMTQxNkQxN0MxRDU1OEFBRDFCNTU2NTYKKzEzQ0E4MTJGMzIzMTkyNzZBMDk3NzU4Qzg3NTk2RUQ2RDE5LCA4NDVFMjRBNTcyODAzQjAyNTk5NzM5RDAyMTBCQ0FFNkMzODNGRDM2NDAwQTVBQTk2QjA5Qjg5RDg4OTE2NzMyQTAzOUE1NDZGNzdFQTkwNzE4OTcxRDI1MjBFRThGODksIDg5NzRBNThERjBGRTY3RjFCNzIzRUE3MzlGNTc4NzMzQjQwQkRBNzNFRUUzREEyQkI0NUJFOTRENDg1MTg2Q0MzRTc2MTc3QzBFRTgxQTMyQkFBMDNDNjgxRTRBQUEzOQorM0I1RjgzOEQ5Njk0Qjc2M0UxQzY2MEE1OTYwQzRDODQ3NEIsIEZEQTZBRDE5NTdBNkNGMkUzNzdEMUU0NEUyN0RFMERGREUzOUNEQ0VBRTQwQTJFODMwQTAwRDJENTE0RjkzOUIzMjIwRkMxREFEM0YwOEZBN0VGQTlFMUQxNURDRDAzMywgQUQ4NTBDMDAzQkRBNERCMEQyQ0NFMEI0NzQ3NkFGQUE2MzA4N0EwNjZGRTlEOUFCOEU1MEIxRTY5ODBBODEwQTQ4NTc1OTIzOEZBOEZENDU2NzVCQjRFMDQyNTNEMTYwCitCMjFFOEFBOEMzQkUyNjJCQTU1MzIxRjBDMjI0RTU4RDVFMSwgNDMwQ0FFQkZGMUQ4NTc4Q0YwNTA5MURCMEM4MTBDMTkxRTQ4QzRBN0I0NkExNjIzODYyRENCODk5MkM1MjBFNjIxMzBGNjZFQThERjY1QTgwODc0Q0QwODhCOTE3MkJGLCAxMzYwMTMyRUQ4M0ZCNUZFNEQyNkUyOUI4NEI0NzQ3QzBDMDBFODg0QTJFOUZDMjA2RDU0REM3MDI5MUI4REMyRjBCRjBDODRFQjBGQTkzQjQ3MURDMTBENDlEQ0U5ODIKKzIxNjVCOUZGQTRCM0E3MjgyRUZGOTY1RDI0NjZFQjBBODFBMywgNjczOUU2QTk4NUVBOUYxRUM5QzkzODg3QUM3QTgyMUJGNjhCMTgzM0VBQzMyODMzNjAyREUxQkU4ODI1OUMwMUJGRUI0MTJCRDkzNTI3NDREQjJBQTdFMDk5RjY1QzUxLCA4RTM2NEY2ODMzMUEyODEyNDc2RjFBRDBDMzUzNjZDQkYwOEZDQkRFNjlCRThGNzRDMzM5NjFGNDcyMTJCRENCM0YwNkIxQjM3NEYwM0Y4MUFCNDEzMDZBMTA2OTJGRDEKKzY0MzEyREZFRUUxQUY1Nzg4Q0ZFQzMxNzZEMzRDMTFGODRFOSwgRURFQzRBN0EzRjU4NDMwMDRFQzMxMTA5NkY4MzUzNjU1OTg2MTE4RTdFRDM2MkQyNEYzMUEyMTRGOUJFREM3OEJCMEExRENGQzNCMjgyNkY0NUY5RTVDQzQyM0QwOTE1LCBFMEJDRkMwMkJGQzFCMzI0M0E3NDZCM0JEOUFFRThDQzMwODYxRDkzQTgxNEI0MURGOTBEOTgyRTcyQTk1QzRFMzYzOTQ0OEMzQkRGOTU4MUYxQzJGM0U2MjlDMzFGOQorMTJDOTM4OUZDQ0E1MEUwNjlBNkZDNDk0NjQ3OUU0MzVFOEVCQiwgNThDNkVGMjk2Qjc1ODA0NDFCNkY2MzhFMzk2MTAzMjM4ODI0NTZCMDM2Nzc0NUE4OEFGQzgxNzg3RjFBMzlCNkVFQ0U2Q0Q4RTE3RTkwMTBBOTA2OUZEQjU0QzBCNEFFLCAzMjg3MTk4RDMwMkE3Q0RCMDJFNjU0NzJDQzhBNTlCMjZGQ0JBQjJBM0ZBNUU3QTEzQjI5RDJBNTZFMjk5MzBEOUMwQTU1Mjk0NTA3REM1NjNDOTYwMTBEODk4OTdERTEKKzM4NUJBOURGNjVFRjJBMTNDRjRGNERCRDJENkRBQ0ExQkFDMzEsIDhGNDYwQ0FDNUMwRTAxOUIyREM4RDM4RkQ5RDc0RkMzRTBCQkNBOTFFMUVCRTVEQjM5NkNCOTkxQjIzQUY5MUE3NjNCQUFBMEUxQjE5MkU1MkNGREUwOUU3MzRCMDY3NSwgOUNFOTNBMjdBNkNGRUE5QjY5Mjg1MjFFQjlCQkIwN0NFQUQzM0QwNDAxMTkzQ0IyNzlGRUJFRjBDMkY1MzI3QjJFODlFRTBERTM2QjgwNEY1ODk4NDYzOTEyMDI2NDc5CitBOTEyRkQ5RTMxQ0Q3RTNCNkRFREU5Mzc4ODQ5MDVFNTMwNDkzLCBDQzE4MTM4RDk1N0Q1ODJGNzkxMzNGMDVBNEM4REUxNDQzRTZCMDI3OTdDMjU1QTI5QzA1RTk5QkFBNzY0QjFERTBDRjk3NTlFNUZBRTc3MzNBRTEwQ0RDMTA1ODE4RDAsIDgyRDQ0MDNDM0RDQjE2MDdBRDhEOTgwODk1ODU5RTI1MUZERDIxNzcyNUQxRjZFNTQzQzI4NEU3NUNCMjNBQThENkU0MkY4MjRBOTQzRjA1RjFGMTU5MEYyQjUxOTRFRQorMUZCMzhGOERBOTU2ODdBQjI0OUM5QkJBNjk4REIxMUFGOTBEQjksIEFFMUU5OEMwRUM2QkZFREQwRDZEMDZERkNFOEJFQ0JBNjM3QkRFMzAyMjlEMDhFMDdCRUQ1MjFGM0JBQUVFNDk0QkQwNUMwNDRCQzY5MzM1REVDQjE2QTdEREE3OTg2MywgMzNFQzMxMTNBMzREMjVERjU4MzdFMEE3QUM0OTI4QzEzMjJCQTI4NUYwN0Y0NTQzREJCNjdENzlEOTcyMkIyRDNBNkUxMUUwQzA0QjM5NjdGNDIyRTBFMTlFQTFBNEQ2Cis1RjFBQUVBOEZDMDM5NzAxNkRENUQzMkYzQ0E5MTM1MEVCMjkyQiwgNTlFQjA3MkM2QUY2MDZDNkY1NkNCNEVBQkFBREI3RkY1NUNBNUYzNzNDOTY4RDZENDdCMjg4NDU0OUFDNDFDNjFGQzBDN0E1NDkyOEZGRkU0MTJEMTc0ODgyN0MzNzk3LCA3MzY2QzY0MjcxMjVGNzk5MTA1NTVFMjcyNDU1Njk5MjczOEJFN0ZGRTZENzRDMjIxMUZBRUVCN0M2NERDNERDMzdFQjIwQjcxQTE4MTVFRUNGMUNBRDcwODI4NzQyRkEKKzExRDUwMEJGQUY0MEFDNTA0NDk4MTc5OERCNUZCMzlGMkMxN0I4MSwgMzREQ0Q1QkJCMzg5QTUyODhBRUM4NUU5MkREM0Q2MDNBNkJEQzRCOTEyMzQ0QTM3QjM5MDYwODc2NjZGNjNBOUE1RTFCOThCNTFDQ0M1NUQ4Q0U3MUUyQzYwOTc4NkUyLCBDQzA1OTJGRUE5Mjg0RDE2MjMwNjUyQUJFNjM1MDFEQjEyM0Y3NERGQjk2MEU1ODAzQjI5QjU0ODhCOEJCNkM4NUYwQjE2QjVDQ0Y2NTJFN0UyRjZFNkY3OTdFOTkyNUYKKzM1N0YwMjNGMERDMjA0RjBDREM4NDZDQTkyMUYxQUREODQ0NzI4MywgNkRGN0RCQzZDMDI3MDg4NTk2RDgyMTMyQTdDRTE1MzExRDM0RDA2NDg2QTk2OThCNTYxQUEzQjg4NTZGQzY2NDE5RkI1NTFCMEIwNzBEQjBEMzhDRkZDRDFGRUVBRTMzLCAyOEZGMUUxRTk1NjQwRTdDQ0IxMUUyNjdDMDYyODRDM0U2RkIzNjA0OEI4Q0UwN0I2OUZCOEQ2MDUwNzA0RkQzREIyODk5QTNDNzk1QTI4N0Q1Q0VBNzM3QkZFNEY2NjkKK0EwN0QwNkJEMjk0NjBFRDI2OTU4RDQ1RkI2NUQ1MDk4OENENTc4OSwgQkVBRTlFREQ0NDRGNjZBMkVEQzYyQjVCRjhDMEY0MEFBMzMwRjFEQUQyRDlBRDk3QkFGRDFBNERGN0UxMjZFOUU4QjQ4RDA1MzI0QTQ0QzNCMkNBRDU5QTZCOEVEMjcsIDQ1Q0I1RDZDOTgwNkE4NDgzMjVFRDFDNzAxQzhEMTk0QzQ2OTdBNEQ5OTA3RUNFNDMyMjk4MEUyMTQzREJGN0QzMDBFRDNBOUY3QzI3QzNBMjM3ODgxQTcxREY1N0VBOAorMUUxNzcxNDM3N0JEMjJDNzczQzBBN0QxRjIzMTdGMUM5QTY4MDY5QiwgOEFENjRCOUJGNzU3MTgxQjlDMTQ3QTc3NDAzQTcxMzIwMjEwNkRCOTI2QjgzOEYxRTQyQjgwNzQ2NTA3NzlBM0E1ODUwNzNGRERDMzY5MTUxODQwRjcyQzg0NkZDQTgwLCA0MTY2OUQyQTA2Mjg0RjkwQTM3MTc1OTQ0RTBBRkQzMDUxMkMwMjgzOEJFMEQzNzU5Qjg4Mjc5MDQwODZFMzVGNkZEOUI3RUNFMDI3MDAwMjYxMDBEQkIxQzEyOURCOTUKKzVBNDY1M0NBNjczNzY4NTY1QjQxRjc3NUQ2OTQ3RDU1Q0YzODEzRDEsIEMzQjY5QUFDNzdBMkRGQkM1RDM1NDRGNTBBMDlGQzExM0UwQTVGQ0I2QjA1MTQ0Qjk4NjNERTY0QjQyNTcxQzJCOTYwREEwNzVCRDI5OUJEQTI4RjFDN0Y1NTNFRjUzQSwgRjZFOTExMTcxNjg3MDZGRUREMTNCNTA0OEFGQjkyNTVEODUwMUNGOEREQTQ4Q0QxRTNFOUUxMUQ2QzUyMEE0OEExQUJDQjdGRjM5MDYyRTdBQzQ0RDA3MDAxQkYxQUUwCisxMEVEMkZCNUYzNUE2MzkwMzExQzVFNjYxODNCRDc4MDE2REE4M0I3MywgNTM1MjQ1QUY4NDhEN0JBQUVERUU5MzRCMTFBMDYzOTlGNDhEQTlEQzI0NjY0OUYwMzdBQjhGQkEwRDk0MzY2N0I1ODlCMjI5RjNFQ0FFRjExOEFDMzAxQUI0MEVCMjZDLCBGM0M2OUE4ODFEREIxOTA1NURGNTI3OEU2NTk3MjIwQkJDMTMwREJFQTgwNzRERDk4RDhGNThGMTU1RUU2N0ExODBGMURGNjEzNzQ5QTc4OEI5RTFFOEExOEZDREEzOTgKKzMyQzc4RjIxREEwRjJBQjA5MzU1MUIzMjQ4QjM4NjgwNDQ4RjhCMjU5LCA2RTMzMjEwOTU3OTQ0OUJBNkJDMTE1OTc2M0RENzNEQUE3NTA0MDdENTFBNjA1N0Y3MTk2NDNCMUVFMDZDNkMyM0Q0MDYxNzY4QzU2QzhGOTkxQTZERDZBNDhDMDQ1RDQsIDIzRDI4Qjg5OTk1RTM1NUY5OEFBQjM1MjJCODU2ODJGQUVEQzk5NjlENzExQkZCNzkwNzI2OUIxRTk2RUM0OEVGQTA5MjI1RUIxRjBDMjc3MkNFM0E2MDIyRDIzNTY0RQorOTg1NkFENjU4RTJEODAxMUI5RkY1MTk2REExQTkzODBDREFFQTE3MEIsIEVFRTg0OEFGM0Q1NTIzMjkxNEYyMEQ5RDk4NThGMERBN0Q4ODYwOEUzRjk1REVBMzI4OUVCMDQyNjU1RTVCRkNBRTFGRUJEMUU0NzU3RTlBMEE4NzAwNUU5Qjc3MzMxLCA5QzgxQUY1OTI3MERBMjk3RTVBODcyRjdBMDI5NTc5NEFDODRFOUQ4NURFMEM2NUI0QTFDRDQwQUUwNjkwQ0M5OEM2RTBDRDg5RDZFNjg5NzU4MTE2RDFCRjRFRTc5MjAKKzFDOTA0MDgzMEFBODg4MDM1MkRGREY0QzQ4RTRGQkE4MjY5MEJFNDUyMSwgNEI0NEQ0RUQzQzJGMDMyQTgxQ0UwMUY1QzMwNDlCOUYxRTEwMjhBOTAyMkUzQjBCM0M3QTQ0NzZFOUJEQUI1RkI3QkMwQ0MwMTY0NTZBMURDMTZBQTcyODM4RUE1NkJCLCBGMzY4MDNBNzQ4M0QwNEYwNUZCMEUwRUE1MkFCRkQyM0FBNUMyRUY4RTJCNzA5N0M1OEJENkZEOURCODNBRkU5OEYyNkZEMjFFRUJDMUJBQ0UyNTdGQjQxMDcxQTgzNTYKKzU1QjBDMTg5MUZGOTk4MDlGODlGOURFNERBQUVGMkY4NzNCMjNBQ0Y2MywgNjMzNkE3NkQ1RDk0RkRFMkExQTYyNTc5MEIwNDRFMzg5NTlDNDYyQzM4RkQyMDIwNDhCM0E4MURCN0YyNzA0ODA4NUVGMDZEMTNBMEY1REVBMzU5Mjg1RjYzNkY0MkU0LCBDNTI5MjNEMEYxMjY3OTY1NkI1OTY2MEZGQTRCRDcwMzEyMDQ1OTg1QTA0MENEODU4RjdDRDA3RThFMUYwMzkyM0I5MjU0MzE4NkQyRTg3ODIzQjY0RjdDRDk5ODE5ODYKKzEwMTEyNDQ5QjVGRUNDODFERTlERUQ5QUU5MDBDRDhFOTVCMTZCMDZFMjksIEUxRkJCNjRFRENEQkYyMUI0NDgyNDM4OTZEMERDMDI4REZBOUNFRDJBRTNGMTg0RDk3OEYyOTU4MkZFRjM5NjQzRjM2RTBBMEFDNzlERERDMTNCNTI5OUQyMEJFQkVBNSwgQUUyNTc4N0MwRjFCM0ZFQ0UxODUxMjQ1RDk4QTE0OUI3ODc3RUI5MDQwMEMyM0E3OTIxNDVDRkVGQTI2OTU4RjE4N0I2OEFCQjdDN0ExMDc1OUFBNTZGRURBNTVDRDlDCiszMDMzNkNERDIxRkM2NTg1OUJEOUM4RDBCQjAyNjhBQkMxMTQ0MTE0QTdCLCAyNjlCODNDNjQ0QkQwMjE3RTMyNTREQUVFNDc2RDNCOEJBRDNBNzg1NEIyNkEyREE4QTQ5NDQ1RERFMkQ5MDdCQUI0MDhDRjczNkYwMkE2NTRDNEUxMDRCODIxNjMyNzEsIEREQzRGMTRGQUIyNEU1NDk2MjMyQkU5OUQ3NDU0NkVCRkQyOEM5RkM0ODZGMkVGMjc5MDhDN0EzQzQ0RDUyNDhDQ0JCRUNBMTY0NUUzMjdBREVGQkFFNjYwNDlBMkQ1RQorOTA5QTQ2OTc2NUY1MzA5MEQzOEQ1QTcyMzEwNzNBMDM0MzNDQzMzREY3MSwgNjBERTZGOUNEQjI3MEExODEzNjA4QjQ2Qjk4NTU2NUMxMjAyRURERTYyQzM3NTBBOTc3OTJBQTFGODMzQTkxMDkzRUY4Rjg2REVDMDE4RkYyRDQyN0I4NDlEOTY2QkU4LCBENkFEMTczNEU1RTNDNEFBQUI1ODNGNzU4NjI4NjhFRUU0RDZFRjJDNkU3RUZCMjJFNzNFQTU2Nzg1NEJFQ0MwMzhBQTgwNEU3NTdEOTNCQTZDQTQxMTY1Qzk3OTVFOUQKKzFCMUNFRDNDNjMxREY5MUIyN0FBODBGNTY5MzE1QUUwOUM5QjY0OUI5RTUzLCA5MTdCNkU5ODM2RjQyNTYwNUYyMEI4QTc3NzQ5QTcyOUM3RTRGMzdBNzI4MzYzQjAzODEzQUVBMUI3QjFCQkFDMTk1QzYyNTRFQkI1MkVCOUM1QUM4MDI2NzI5RTZEMywgNzdDQTY1NUQwRDU0MEVBOEVGQ0RDMTAxM0E1RTZDMUZENEI0QzlENDA3MEE4MTA0N0M0NzZCMkI3ODkxMEVDQzk3REFDRjhFMUE5NjcwOEJENTBGODJFRjRGMTNEMTlGCis1MTU2QzdCNTI5NTlFQjUxNzZGRjgyRTAzQjk0MTBBMUQ1RDIyREQyREFGOSwgM0E0ODk0MTU5QTg4N0U2QzU2RUY5MkM2Qzg4QzY3NTBCRkUxRDJEMTM2NDdGQjFCNTI2MjNDOEU5NkJCRjRFNEI2MUMxRjA3NDI4NTlBMTg4NzhBMkE0OTY1RTY4NUZBLCBGOUU5M0NCNkRDMUJCQkRBN0Y0Qjc4Q0M0RjY0REE4NUNGOEM3MEYwOTlEQ0YyREMxNjQ4MjgwQjk2MTA1RUYwODIxNDAxNDRCMjQ0QTIwMjQ5NjIwRjJDRjVFODkyNUMKK0Y0MDQ1NzFGN0MwREMxRjQ2NEZFODhBMEIyQkMzMUU1ODE3Njg5Nzg5MEVCLCBGMDk0QzI4NjYzMkY0MTE0M0ZGQjA0QTBCMkNEOEU1Qjc4N0YwOUUwQzM0NTFERDUzMTg1MjgwNDFEMENBNjNDNTEwNEQ5MUE1OTY0MDI3NUNFNTI1QzBDOEYwNjdENzYsIDY3MDI0QURGQzAwOEM0NkEwRDQ4M0VENzdDRDU4MTRBRTlFMEQ1M0M2MEM2MEQ0RDFDN0VEMjU0ODBBMUU5NjAwMjg3ODExODA1NTQxNEUxRDY2MTgxMUFDM0YxODIyCisyREMwRDA1NUU3NDI5NDVERDJFRkI5OUUyMTgzNDk1QjA4NDYzOUM2OUIyQzEsIDUwQzg2NDk2QkU2OEUwNUY5NERFNzU4MjUyNDE2OEQyRDJDRDhDQzAyNzZGNDk1OTFENUZGNzFCNTQ1M0ZFOTFBMTFBNjUxNEM0MzQ5NjBGRDhDNUI4MTk1NjQ1MEJDMywgQzkzOEQxQzIyMDlENDhFNTQzM0IyOTZCN0ZFRDEzNTkwQzFGQTZFRTA5RkQ0QkY1RkRDNjQ3NDNBRTc2NEREQUVENEEwODY5NzY1MzBGNkYyNUY5NjgzQjE1M0MzRjdGCis4OTQyNzEwMUI1QzdCRDE5NzhDRjJDREE2NDg5REMxMTE4RDJBRDUzRDE4NDMsIDE2RkU4RDc0MTE0NTExNzc2MjA3RDUyNjBDQjdBMThEQ0ZGNEJBMjJCMDIwMDMxQTY5QTY3NDEwN0I2NUU4Nzk4OURBOUEwRjcyRjYzNTI4RTcwRjk5MTVDODIwMzQwOSwgN0RCNTZERkEyM0FCMTlCQkY1OEY1NjU3NkUzMEZGN0Q2OUZGNUI1MjMxQUQxN0UzMTVCRkZDRDk3ODk4RjcwRjFBNkZBODhGQjc0RjExRkJBNjMyOTcwOUQzRUFCMDVCCisxOUJDNzUzMDUyMTU3Mzc0QzZBNkQ4NjhGMkQ5RDk0MzM0QTc4MDdGQjc0OEM5LCAyMEZDQTU2MkM4NTcxRkZDMUY1NzdCNUM5NEZBQUJFMkQ1MzgwRTM5MkRBMjZDNTIyQTg1QUMxQkJGREE0QzhDNDU4MDY3NzVGRkMyOEEyNEY1RkEwQTRBOTY0RTk3NDksIDJEMjQ2NUFGNzcwREE5M0Y1QTNGOTkyRTJGQURCQ0M2RDNFQTYyN0Q2QjMyODA0ODM4QUNCMDk3OEM0RjhDMEEyNkM2ODZDMDNDNDlFOThGOTQzQUM4RTc3MzNBOTJDMQorNEQzNTVGOTBGNjQwNUE1RTUzRjQ4OTNBRDg4RDhCQzk5REY2ODE3RjI1REE1QiwgRTY4NDA1RkVFM0VFMjVFNDJEQTFBRDIxOEMyMEFBQ0YzMEQ3NDQ4QzRDRjE1MEE5NjIyQTg1MThEOERGQzZGMUQ4NDY5Q0ZBRjFDMkM5Nzk0NDNDQzhDMkVCMUIwODhDLCA4ODlDRjMzRURFNjEzMzE2MjVDOUY4N0M2OEY1NjQxN0QxMjVGRUE2MTEwQjcyRUVGODU2OUE1RDAwNUMwQkNDOEYyREYwRjY1QjA2OERCNEZDNEE5QUM1QzAwNDVEM0UKK0U3QTAxRUIyRTJDMTBGMUFGQkREOUJCMDg5QThBMzVDRDlFMzg0N0Q3MThGMTEsIDRFREJCNjdFMTg5NENCNUExQjI3NDQ5OURCMDkyNTVBODY2NDI5OUFERDVENEJENzE5NEREMTY1RUNGMUY5MzkzOTQyMkU3QjM3QTkxRTdERDJBMDE3OTMxRjc3QURBQywgMjU0MTg4OURGQjYyMEMwQTY4RkZBRDIxNTY1QkRGN0QxQzdFQjQzQTM3QzQyOEVCQ0I4QkU2NzQ4QkYwNEEzNTEzNzkxQTMwNEJFNTI3NTdDRjkyNUMxQ0JFMDZGMDI3CisyQjZFMDVDMThBODQzMkQ1MEYzOThEMzExOUNGOUVBMTY4REFBOEQ3ODU0QUQzMywgMjNFRUFEOEIwNEM5OTBFMjQ1ODIyMzE4RTY1MzkwMjEwQzZDQ0M0OTYyNTJBQTIyQkVBMDdGNkJCNEUxMzMxNTVFOEZCNjg2QTI3RTc0NjYwRTAyNDg0QkFBQ0Y2OEEzLCA3NTZGRUEyRDJBNTdDNDA0RDVCQjMwNTAxNzA2NERENTI5QUI5MTQwNDY1RkEzRTk5RjgxMjA4M0Q2MjgxQkQ1NUMyRkJCM0JDMkJENDlBQjJBODUxMDE5MEU5MzUyNjEKKzgyNEExMTQ0OUY4Qzk4N0YyREFDQTc5MzRENkVEQkU0M0E4RkZBODY4RkUwNzk5LCAyNTdEODFBQzg0NTY1NTFFRkY0ODA3MDUxOTY5RUNGRjE5NTA5OEMxNkY3Mjg0MjYwQTc0RUNGNjkzMjZEMDQyNjlBMzFDOUZEODkyRjYxQzZERUQ3OTM4MzgzODlERjIsIEEwMTlDQUEzNkUwNDQ3QkQ1RURCMkVCNzc1QTYyNTAyNEE1NzIzQzQyOTY2MzBCNEVDNEM2NEY1QjRERkY3Q0JCMjcwNzA1QTUzQzU5MTIxQkUzOEE0MThBMDg3NkQxRAorMTg2REUzM0NEREVBNUM5N0Q4OTA1RjZCOUU4NEM5M0FDQUZBRkVGOTNBRkExNkNCLCBCNEVBNURBMjA4QUI0QUM1RTM5NkRFMjRFNDk3QkExQUU4NDlFMUMwNTE3NDhGOTUyMUQ1MkIwRkMzNDIyMEYxMURFNkQxQjJEQkI5MTM5MTBBNEZBOERDMzAyMzc1RjMsIDdDOUUxMDhBNTJEQjI4NTNENUNDQUJBQjg3M0JCQUE1NjU3NDZERDQyNkI1QzlDOTEzREI5MzRBQzU4ODFBQ0EwOUQxM0FCQ0M0RUFGNEMyQzJFODgwN0UyNDcwQjAzRgorNDk0OUE5QjY5OUJGMTVDNzg5QjExRTQyREI4RTVCQjA2MEYwRkNFQkIwRUU0NDYxLCBBQjE2NEI0Q0JDRTQ2NzJBRTdGRTUwMDk4NTkwOTJEMDhERTUxMUIxNUFDNUQ5M0RFQzAxNzRBRTQxODNDRjNCOEU0OERGQTBFNUVCNTZGRjhDMUIzREQ5MEEyQjU4RDYsIEZCM0ZCMjFBQzA4OTlGNUVFNDE0RDc0QjcyNzcyNkI3NzkyN0U1QjgwM0E4NjYxODE3OEVGMUFFNjg0RjlBRTU5RjRBQUEwQkU2NjhCRDJDNjEyMjI1NjAxRDc2QjNBNgorREJEQ0ZEMjNDRDNENDE1NjlEMTM1QUM4OTJBQjEzMTEyMkQyRjZDMzEyQ0FDRDIzLCBERjRCMkVEOENCRjgxNkM5MDVENDlBQjA1QUVDOTIwNzU5NERBQkJGNzE0RUZDOEY0QjA0MkY0MTMzQjc0MEZCNERCRjIxODBEMjFBNkU3RjE2N0Y3OTU4NDg5RDQwNkYsIDM0NkQ5MjRFRTg1MjE3QzE1MDQ3RDY4RTUyNTNDMkI4NzRFRkEyREM1NjI2NTcyRjM0NzY1MDA2RTBDODAyRTJFNjNDRkM5MDgzMEUwRTU2RDkwRjQwODA5OTE4OEY4RgorMjkzOTZGNzZCNjdCN0M0MDNENzNBMTA1OUI4MDEzOTMzNjg3OEU0NDkzODYwNjc2OSwgNUEyMzhDMEMyNjE4OUJCMEI2NUE1NDkzNUI5REVERDk1MzkzNzI2OTc2NDQwQkYzNzNBNkNGQkJDNkZDNDY1MzE0NUNDODlCQzhCMDA2QTA3RUQzN0YyQTBFQ0IwQkRFLCBFQUFCQUU4OUVGQzZCMDIyRUEzQUI1Njg0NDFEQ0I1N0I2NkM2RDMzQzNFNDE5QURCRDE3Nzg3RDkwRkMwNDM2Qjk3MEREOTIwRUY4NDE3QzZCQjFEOTQxQzlDMzdEREEKKzdCQUM0RTY0MjM3Mjc0QzBCODVBRTMxMEQyODAzQUI5QTM5NkFBQ0RCQTkyMTM2M0IsIDZGNkZEM0FBMkU3MzExQzJFOTJBMjJFQTdFNkMzMzI4RjEyMjk4QzJDOTYzQkU4MUM2RjAyMEYyNzA4ODk5QUUxRkYzOEJDNjM3OERGMjFCRUQwNjdFRTg5RTc4RTkzOCwgNTcwMTk4ODU0NkYwMEZDNzI3OTg5QjQ4NUExQjYxQjA2QzJGOEU2QjlEQkM5MjQ3MTlGNjY4NUIzQkMzRDZCMDBFQjJFODE3NTIxN0IwNDA1OTYwNkIyRkEwMjQ1MDE5CisxNzMwNEVCMkM2QTU3NUU0MjI5MTBBOTMyNzc4MEIwMkNFQUM0MDA2OTJGQjYzQTJCMSwgMUNDRDdCMjU3QUM5QTY4NzJDODgxMEEwNjBBQjdFMTk0MzBGN0U0Q0EwNTVGQ0QzNjExQTNGMjE0NEM0NTdBQ0RCREMyNDE0MjBCNTU5NTgxRDI5MDRGRTIxMURFOTlFLCA2NDkyQkJDOUFDQkVBM0ExODBGOEREODY5MkMwODI4N0M1RUY5OTE5NzAyN0IzNTI2NzAyM0I4OThDOTdFNTlGM0M5N0U4MEYzN0RGMjFDNzZGRkE1RTNERkZGMDY0RjkKKzQ1OTBFQzE4NTNGMDYxQUM2N0IzMUZCOTc2NjgyMTA4NkMwNEMwMTNCOEYyMkFFODEzLCAyNkU0QkRDQjdFNDcyOEZERDY2Mzg2QkQ4NERDOEY5RDFGOTcwMjI1REZCRDNDMEZFMkY2N0QxODE2NTBFMTU5NkQ3RUZGQzAyNkJDQzVBMURDMzA4RTdERUUxRTNCRUMsIDM4MEU1QzlEQjM2OTZCNkZDRTYzQTU3RjdDMDdEM0I4MUE4RThFNTg5ODZBQTM1NUFDMkM5NjYwQjk5MjE0MDNBRTI2NEJENkJFOTVBMDA3RTZCQ0NEQTEzNjM2Mjk2NworRDBCMkM0NDhGQkQxMjUwNTM3MTk1RjJDNjMzODYzMTk0NDBFNDAzQjJBRDY4MEI4MzksIEQyQUEyMUUzRjhDMEJGOTI4NEQyRTY4QzY4MjVEQzU4MkY1NjJBOTdCN0E3Q0NFQjQ2NUQ4NDJERUVCNzY5QTM1OTAxMjQ5NkU1Q0MwNEQxNzFENEZEQkY1OTgyRjhEQiwgMUM1QjU2ODExRUQwNEY3MTc4QUI1MEMyOUI2RTNEM0QyNzc1NUJDMzM1OUMxRUJGRjkxREQzQzc2OEQ2MzMzQzY3MDc0RTUxQTdBMzQ5RjlCNzIzNTU5MTc3RjVFNDJGCisyNzIxODRDREFGMzczNkYwRkE1NEMxRDg1MjlBOTI5NEJDQzJBQzBCMTgwODM4MjI4QUIsIDkxQUM1RkVDNkM0MUQ0NDI1RTM4OTdDQURENUFFNTFFRDQ3MkM1N0I3MDNFRkVBNkFFQ0ZDNjdCRTY3M0ZCMjdEOEI4MDRGNTAzRUFEQkM4NzFDRTcwQzlEMEJFNEY5MywgNDc3MTc2MTlFNkMwQ0EyN0I4MTBGMDNFMjk4NjlEQjdEMzJCMzQ3MUYxREU2QjU0NjU3RkFDMjI3NDM2RUExOUREQjAzNjM4RUNGNTU2QzY4NDQyNkZFRUFDRDZCODdCCis3NTY0OEU2OTBEQTVBNEQyRUVGRTQ1ODhGN0NGQjdCRTM2NDgwNDIxNDgxOEE4NjdBMDEsIDUyNjJENEExREQwNUI5MzJDNzExMUU1QUFCREQ2M0IyOEJGOEQzRDY3MjJBNjlBQThFNTE5QkJENEYyRDg3RUZGMTJBQzk3M0Y0REQ5MUJEOThGMjE2M0Y4RTQzMEM5RCwgQjIxMkU1MkRCMjlGNDUwMTA3Nzc5QURCNzg1OURFOTk3OEM0Njc0QTA2RDlFRDUxM0ZDNjhFNEJCMzYzQjM4MjQ4NkQwNjc2MEIzOEI1NDhFMEM4OTA3NEIwMTM2MUIzCisxNjAyREFCM0IyOEYwRUU3OENDRkFEMDlBRTc2RjI3M0FBMkQ4MEM2M0Q4NDlGOTM2RTAzLCAzRUFCRDBDQzNBOTc4MTA0NzMxMzNCRjBFOENDRURBOTNCM0ExNjY0NkY5NDIyMTlCNTVBNzY3QkU3NDlBRjlFREVDNUI4NkZCMTBDRUU5MENGQUFDODJCREU4MDlCQ0MsIEVGNUQzQzE2NzAwRTYwNTdBMzcxMDlBQjk1REQzMkQ4NkU2NzAyQThBMTAzQ0EwQkYwRTk1NjAwQjEyOEJEMDc5NERDMjM2RjQ0MjI4OEZCODE4NDE5QUUyRDBDRTA0NworNDIwODkwMUIxN0FEMkNCNkE2NkYwNzFEMEI2NEQ3NUFGRTg4ODI1MkI4OERERUJBNEEwOSwgRUZCNTFGQUJBNUUwMDkyMUI0RkRDNjE1QzM2NTZDOUUzMkM2RTNGQjAzMTlDMDhFNzIwQzA1MzdCNDJBMDM3Q0EwRDdEQkVBMUE5RDE4MTc2NjNCOTE5RjUwRDZBMTksIEVDMzEzQTQxMDg3MUM3MURCMDU0NzI0ODRCMDc5MkU4MjU3Qjc4MUQzNjZBOTIwNkFBNTNFQjhEQjU2RjNGRTVDMjVBMDk0Q0YyRDg0QjE0N0Y2OTZCNjY0NkVDOTg0QgorQzYxOUIwNTE0NzA3ODYyM0YzNEQxNTU3MjIyRTg2MTBGQjk5ODZGODI5QTk5QzJFREUxQiwgNjYxMjE5QUM0QUY4RkM3QkY4QkQyQjI1RjM5MDAwQTQzOTdDOUZGQjEwRkMyMzQ0MEY1QTdFMzNEQ0M4NzlBMUE3QUJCRUI4OUVDRDQ2MkY3QjdFODk1RUI3RUJCRERGLCBDODIwNkFERDg3QkVFQzYwQTAxQzU1Q0YxMTREOTI5RTJBQkZDMkY1MUM4RkVFMTJGRUYyODM3OUVFQzEyMjU0RjlERTcxMTFENEMxRUZGNTA0NzdDM0JCMDQxMkQ4MjYKKzI1MjREMTBGM0Q1MTY5MjZCRDlFNzQwMDU2NjhCOTIzMkYyQ0M5NEU4N0NGQ0Q0OEM5QTUxLCBDNTVDMkQ0ODc3NEFFNzM5REFCNTRDMzM1NEZEMkZENDg2NjNFNkNGMUNCQjUyRjc0NkU5MUI4RTk2QkE4MjBCNDM2NUY0QkI1RUFDOEVDQzUxOThCRjA4MURGN0Q0NEUsIERDNDQyQ0FBQTE0MDVDMTBDQzg2NTJCMzI2M0M1MkFBOTlBNzg4QjUzQ0QxNEQyNTZDMTQ1M0QyMDkxMUZDNDk3M0U3N0E1Mzk2RDA2NEM4RDE1NTcwQUQwMTc3Qjk5MworNkY2RTczMkRCN0Y0M0I3NDM4REI1QzAxMDMzQTJCNjk4RDg2NUJFQjk3NkY2N0RBNUNFRjMsIDY1NEY4NDQ0QjQwREM2RUNDRUEwMUY2RkNDODNFNENFNzREMzlGMzM2MTJDNTc1RjkyNjgzQjI3ODJBNjNEQzFFMzQ1ODdCRDQwRURBOEE2OTc3NkUwOTQ1Q0ExRkYyNSwgQzJEMjI3NUUzMUY0MkYwMDQ5MThGOTE5MDFFNjYzMDUzMzkyQzFFNDlGQkYzNzVCQzdCMjE4ODAyNENEQzU0OTlDMDEzNjdCRTQxRTA4MjBEMUY1ODY4MTMzQkYwQzZBCisxNEU0QjU5ODkyN0RDQjI1Q0FBOTIxNDAzMDlBRTgyM0NBODkzMTNDMkM2NEUzNzhGMTZDRDksIDNGMjE2QUEyRjAxNzU2MTFCNDFCQzA3QjlCODFGMTBGODRCNTQ2OUEyREQ1NkJFNEUyQkY3Njk0OEI5QkUyRTg4QTQxQTk4QzFFNUNCNjE3RkI3NzU0OEE4Mjg2MDVGRiwgRkMyOTg2QTAwN0I3MkVGQjVFMDBCQjNFN0E0MzY2RTA4MDYwQTk5NURERjRGRjQ5QkE1OUNBRUIxOTNBM0RENEJFQjFBQ0Y0MjJGOTA2OUM1OUI2NjhDQkVBNzQyNjJFCiszRUFFMjBDOUI3Nzk2MTcxNUZGQjYzQzA5MUQwQjg2QjVGOUI5M0I0ODUyRUFBNkFENDQ2OEIsIDQ5RUMxMTU0MzFBNUE5REMxRkQxQ0RCOUIzQzQ2QzgwQUI0MkFGN0IwMjUyMTg4MUY1RDJCREY5QzE0QjVDRDVEOEFBQzA4RkNDREVEN0I4QTA1QzU0RjMyMkM3MDBCRiwgOTBEQTM5NzJGMkRBQTgzNEVFQjQyMUM2QjU1N0JGMjc0NDEwREZERDM2MjQxMEFBODlFQUEzRDk2NzdFRTgzQTRCNkVCNTgwNUQ5MThFMTgwNUFDNUFGNzMzMTZBMzg5CitCQzBBNjI1RDI2NkMyNDU0MUZGMjJCNDFCNTcyMjk0MjFFRDJCQjFEOEY4QkZGNDA3Q0QzQTEsIEQwNzI0QTQwQTZEREUzNDI4RDlCMkJBRjJFMDBEQTczMkFGNDhFQzA3Njk4Q0Y3OUE3Q0E5RUI2N0NDQkEzRUZCOTAxREQwMDYzQzA4NUIwODVCOTI0N0I2QTdBRTg5RSwgNzIxODBEODIwNjA2RTRGRUE5NkZEODU2QkYwMTE3QUU2NDJGRDNENzJFMjYyOTY4NTJENkVCOTg0QUZGOTBBRURFNDQzODBCODRGODg5NzA0NUVBQ0I2RTM4RTE3M0RGCisyMzQxRjI3MTc3MzQ0NkNGQzVGRDY4MUM1MjA1NjdCQzY1Qzc4MzE1OEFFQTNGREMxNzY3QUUzLCA4MzNFRDM4MzgxNjE3MTBFRUU0RkMxRjYyNjgzMTgwNDgwMjYyMUI0OUVEMDM3NEQ0NkY5NkI2NDdDMzI2RjQ4Q0Y5NjY5MEI2OTg5M0U0ODk0MTJCN0ZEOTMxOENGMDcsIDk2RkIzNUU3RjM4MTUyNjE0NzI0OUM5OTg0NTZDN0MzRDdGNzU3NDk5QTZEMzNGN0M1MDkzRTAxOUMyNjEyQThGRDI0RjdGMUJBQTAzMkU5QjBEN0I0NkNFQjA1MkE2Cis2OUM1RDc1NDY1OUNENDZGNTFGODM4NTRGNjEwMzczNTMxNTY4OTQwQTBCRUJGOTQ0NjM3MEE5LCA0MEYyNjEyQ0M5RjBFOTZDNjg3OUNBMDg1QTU2MTZFNDlEQTU3RkVDODQzNUZBNUVCRjkzOUNFNzg4ODQ1MjQ2OTcwQ0IwRTNDRTFCQzVCMkVFNjEzNTgxQzYwQTRBNTMsIEMzMTdBMUU2MTMyODYwRkFCOTg4MEYwMzdDMjI5RUQ4MjFEODEyRjc4MzM3NDNFNkVGMTg2MjE4N0QyMTA0NjJBNkFFMkJFQTI5MUEzNDU3QTI4MDA2NkUwNTg5NEJCMworMTNENTE4NUZEMzBENjdENERGNUU4QThGRUUyMzBBNTlGOTQwMzlCQzFFMjNDM0VCQ0QyQTUxRkIsIDUwMTc1MDU1ODY0MEZBMDRBMTQzOTZFNDk0MkYxOUI1NkFBQzhCRURGRTZGMENFQTkxNjJGRDkxREIwQUNCQzAyN0JGMzk0QkMzQzU0NTRDQzJGMTQzNTNFQjg1QUZGRiwgNDhBQTFFQ0E3REFEMkRGMjg3NzUxRkJENENDQTg4NkVCREIxRDM4NDc1N0VDMjQ5OTdDMEYzRDkyMzg4NDEwM0VGNkVDOUFFMjcxRkI1NDhENjcxNUYxNjQwQzRFM0QzCiszQjdGNDkxRjc5MjgzNzdFOUUxQjlGQUZDQTY5MUYwREVCQzBBRDM0NUE2QjRCQzM2NzdFRjVGMSwgREE3MUJGRkE5QjNERkNDMUM4QzY5RjM5OTUzNTYyMDE4MUY5NzQ2Q0M0M0QxMUI3RDE4QTZFMDU4MzI1NDk0QUU2MkQyNzcwRkMxNTJDMDM2REYxQzM0ODQ0RERBNTUxLCBDNTlBNUFGMzM3MEQ4MzA2OTMyNjNGMDk5NTA5NENDNTgzRTNEQkEwODRGNEQ3QTM4RjFERDEyREQyM0Q2RjhFMTEyQTFCOEVGRTBCOUU5QzA2MTkzMUNENjA3MUFEMDkKK0IyN0REQjVFNkI3OEE2N0JEQTUyREYwRjVGM0I1RDI5QzM0MjA3OUQwRjQxRTM0QTM2N0NFMUQzLCBDN0IzMEYxRUQ0QzNCNTdCMzhCNTI5RUQ3NDA2QzBBM0IyQkQ4QjYxQ0U2N0MxNTQxQUZEMENCNzhEMTQwMTUyNzFGQzRBNzgxMzY3RkY3M0JBQjYwNjNCMDYyQ0FFMUEsIDhBODg0Mjg4QkY5QTIwMEE3Njg4NDNFQzU4RTk3OEFENUZDQjREOURCNUMzRkJCRkI0NjA3OUI1OEQ4RTZGQ0I5OTE4Nzc0MkFBNENFQkQ5Nzg0NzM1MTA3QkJDMkMzNgorMjE3Nzk5MjFCNDI2OUYzNzM4RUY4OUQyRTFEQjIxNzdENDlDNjE2RDcyREM1QTlERUEzNzZBNTc5LCBCRjkyN0YyQUY4MzhGQUVERjk4QkJBRUVGMjY1OUY1M0Y2M0U0RTlCNTZDMEFENEI2ODY1MEE0MjBGNzA5MzZFMUZFQzM5MTJERTc2RUQyMEJFOEEyMUQwREI3N0E0MjIsIEJGMDg0NzcyMUE1MDYzMDJFQzk2Qzk5RTZEMzMyQjkyQjA5RTA4OTdGQkVFNDJGNDU1MkQ3MDVGMzQ1OERDMTJGNDdDQTBERDg4RjBEM0U1MTAwMDAwNTJEMzIwQzAxMQorNjQ2NkNCNjUxQzczRERBNUFBQ0U5RDc4QTU5MTY0Njc3REQ1MjQ0ODU4OTUwRkQ5QkVBNjNGMDZCLCBDOUJEMkIzRkQwRjU2NkQ4MDlFQzhEN0I3RkQ3MjEyMEIyRTYyNkMwRjhDNjQxMDg0QjZBMTlBMzE4QkVFMDA5QTZENTNBOTM5RTQyMURDODdFNzEzRjhEOURFRTFGMjQsIDE5RUMzMDRBNTAxMjREREVCOTYyNzU1QjJFNzc4NzQxRkEzQjYzMkI0MjcyQkExODdEMTdBN0QwRUYyNEFFRDU3QUZBODg0MTE4QzMyNDc0RTE2NDU0QTVGNDIwMzMzNQorMTJEMzQ2MjJGNTU1Qjk4RjEwMDZCRDg2OUYwQjQyRDM2Nzk3RjZDRDkwOUJGMkY4RDNCRjJCRDE0MSwgQ0FCM0E0QTk3ODJGMzYyMkYyMTJEMkQ3QzBDMkQ5QjZENDEyOUE0QTkxQTkzRDY0NkJCQjVFRkIwOUM4MjJFMjU4MDBFMUQyREE2Qjc0OTJDNEJERDUyNjNDOTc5MUNCLCA1QTQ5NUM2M0M4OEY2QTdCQ0M1MTNBRTE3QjMyQjFENzg3RENGRjIyRUE2MEVEMzA0MTU4RURCOUVFM0M5QjBEODZBRDQyRjc3NzY0RDY5MDBERjUwQTRCMkVGNzk5QworMzg3OUQyNjhFMDAxMkNBRDMwMTQzODkzREQyMUM4N0EzNkM3RTQ2OEIxRDNEOEVBN0IzRDgzNzNDMywgODkzRTQyQTgxMjc4MTRDRDAwOTQxMTgzNjAzRjY1Qjg1M0RERTVERDg5RDMzREJEMkM3RTJCRjlDRUE5M0Y2MEI4NTBENzBDOENBQTUzMTQzRjZCRkQzNEQ5QkVFMjBDLCBGNzFDNjkxOTAxQTVCODE5OEY5N0Y1QUY0MzI3NjA1MDFBOEM0OTQ4Q0EzNUE1MUVBNjE0M0Q4QTY0NTg3Rjc4Rjc5NDE3MkFEQzU2MDMyMEFGQ0NFRDNDNkZBMTU2N0YKK0E5NkQ3NzNBQTAwMzg2MDc5MDNDQTlCQjk3NjU1OTZFQTQ1N0FEM0ExNTdCOEFCRjcxQjg4QTVCNDksIDFBOTRCRjczODdCQ0RBNTMwMUU2QjE5MkM4NUQyREI5RTc3QTdBMDE4QzQxNTZCRjIyQTU4RDUwMTQxMjM3OTgyN0UxMTNDNjRFMDQ3RENGNjlCQzJBOUJFNjIwMywgMjI0MzRCMjhBRjhEQjA3MjkxOUU2NjAyOThBRTBCMzI1QjM0NDBFMzY2QTZFREE1QTIyRTJCRDlBNjg0RTI2OTA5MTgzRUFDNTFCNERGQ0RCN0ZDMUM5RjQ5N0YwMTYyCisxRkM0ODY1QUZFMDBBOTIxNkIwQjVGRDMyQzYzMDBDNEJFRDA3MDdBRTQwNzJBMDNFNTUyOTlGMTFEQiwgNUY4MzA0OUFEMkE4RUIyRjc2M0Q5NjVFMzBDMDhEQjg1QURDQkEwMjkwNEU5RkY2MDM1MkUwNEM1OTJBMjQxNEZGN0JEQjg3QTYyMkNFQUVFRjgyQjM4MERDRUM0NUI4LCBCODg0RTQ3QTlCQ0Q4NUQ3MUI1MkI1NzQyMDI5NzNGRDY2QzQ5RDVFRDk4OTZBQ0Q5QUE5NUNENzBENDAwODhBRDBBODhDQUY1RTVEOEQyNEFFNTQxQzAxMTg2ODBGQworNUY0RDkzMTBGQTAxRkI2NDQxMjIxRjc5ODUyOTAyNEUzQzcxNTE3MEFDMTU3RTBCQUZGN0NERDM1OTEsIEU2NDI3RTJBNTdCRTVDRkM3QjgyMzUyOEFENTEwMEJDNDE1NDc4OUE5Q0ZCNUExRDkzNTM2QTI0RTcyQTRDRDBEM0JEMzg1RTRBRkI1QUNFQzlFMEZEMzdGNDJCODMyLCA3NzVBRjdFOTAzRUQ2OEQ0NDU2MjUyRUJFRUUwNEZBNUMxRkJFOTE3NzQyRDE3OUZBQjI3QTJBRjE2RjFCQ0FCQTIxMzFGNkE2Njg0MkMyNkE0MDYwOThCRTA3NzhGNjMKKzExREU4QjkzMkVFMDVGMjJDQzM2NjVFNkM4RjdCMDZFQUI1NTNGNDUyMDQ0MDdBMjMwRkU3Njk3QTBCMywgODkyRkQyOTRGODdCRERBQjMwRjM4M0NFQ0M3NkQxNTk3QUNGMDlERjg3MjU0QzNCNEUxQzZDOEI1MTM1RkNFQjE3QTZEMzcyMzJFRkEzRDhDNDVGMTZGMzExMEIxN0FDLCA0Mzg1RTg1OEM4RTM0NzFBNERDMDJBREE0NTg0ODA4MzMzQjI1MzFCNkY1RDIzNDY2QkRERjJBNTQ1RUNFODAxQjQ0RjgwMEE4MjM1NzA4MEU1M0QyNTQ0MzY0MzY5NTMKKzM1OUJBMkI5OENBMTFENjg2NEEzMzFCNDVBRTcxMTRDMDFGRkJEQ0Y2MENDMTZFNjkyRkI2M0M2RTIxOSwgQ0E5MTAxMjdFOTZEMkUwMDM5OEI4OEE4OTMzRDlDRjVEQjM2MkJFRjA2RkI5QTlBNDY1QzY0Qzc2NzQ5Rjg0N0I5MTRGNURBMTc2MUFCMjZCMTk0RUU4NzlGMDgxRjVGLCA5ODMyN0JEMTkwQzlGNEMxQjk0MTc4OTg0MkREMEI0NzVCNUI4MTY3MEY4MENCODIzQTc3OTAxQ0ZBODIyMkQ5OUU1MzhENzIyMTdDRDVEQjJEMjgzNDEyMkE3MTFGMDEKK0EwRDJFODJDQTVFMzU4MzkyREU5OTUxRDEwQjUzM0U0MDVGRjM5NkUyMjY0NDRCM0I4RjIyQjU0QTY0QiwgOEM0OTQ0RkFBRDFBNTc4REYyODVFNjQ3NDQ3QzgxNURCQ0JDNzA3MENFMzc0NjhDNEYxREJEMjhFQUYwRjA1Mzc1REY3NjQxMUI2MDlCNzEwNDI4Mzk2MzFGNUE4NThELCA2NDk1OEZBOEQxREY3MUVBMzlCN0REQzcyQ0QyMDQzNjY5RkZEQTc3QjAyOTA3RDFGMzRENzYzNjQ1RTAxMzAxOUEwQTg3MUQ3M0QwMUIzNDBCQzRGNDVFNjM0MEVBNEEKKzFFMjc4Qjg4NUYxQUEwOEFCODlCQ0JGNTczMjFGOUJBQzExRkRBQzRBNjcyQ0NFMUIyQUQ2ODFGREYyRTEsIEZGN0U1ODRDMjg5RDREOTcyMTVDOUM0MzcyQUNFQzI1OUI2OTQ1NzRBOEFBNzQ5MDU2MTgxRkZGM0Y2MDE3MTZGQTk3MkZEMkRCQjEwNDUyREEzNTFGMTBGRkI2MzBDMCwgMTA4RjVCNEI0OEIwRkQ1NjdEOEE3QTZERkMzQTdGQUEyODg1MDM1ODEzMjA2MThCQkI5QzIwMDEyNEQ0Q0Q1MUU0NzlDRjMyMDk2QzNFNkRFRjY2QTU0OEEyNjhCQjY2Cis1QTc2QTI5OTFENEZFMUEwMjlEMzYzRTA1OTY1RUQzMDQzNUY5MDRERjM1ODY2QTUxODA4Mzg1RjlEOEEzLCBCNTMzQjVEQ0M2RDhDNDY2NkFFODM1NzkzRkQzOUU4N0NFRkY1N0ZCN0MxMTNBM0I5OUY4MkQzNDQ4RkVDMDFEMDg4RjdEQjc1MDcwN0I1NTczRUQwNTVFNzU1QTMyMEUsIEU2NDc4RTdGOTRCQzIzMzhDNTUxQUMwM0M2MEQ4NjhCMERGNkNCNjY1NDM5N0Y2QUM5MEI4QzEyNTFEMkExRTFEMkZCNzFENUZGQkFGNDY4NzVGRTBDQzEwQjRDQTdBRQorMTBGNjNFN0NCNTdFRkE0RTA3RDdBMkJBMTBDMzFDNzkwQ0ExRUIwRTlEQTA5MzNFRjQ4MThBOTFFRDg5RTksIEQ3RERDQkJBMjU5QTZFNDAxOEEwRjYyREQwREM2QUY4NDEyQkJBMUYwOTA5Qzg4RTcxQjgzRDlBNzVDRUYxQTY2RjhBMjdCNUE4NzU0QUQ3N0IwQTlBMEM2NEI4RjBGQiwgQzQ5MEY0MjJFNUE4RjY0MjY0REE1RTgyNjkzNjQwQzVGMDUwNUY5MjRGNTUzMTA1MTMwQ0M3MDVENEY0NjlFMzc2OEQ5QTI5RENDMkY5QzFGRTZFQkM0RUQ4MzQwMzQ5CiszMkUyQkI3NjIwN0NFRUVBMTc4NkU4MkUzMjQ5NTU2QjI1RTVDMTJCRDhFMUI5QkNERDg0OUZCNUM4OURCQiwgM0FDMDY2Nzg0QUNGREVEMjQwNUU5OTJBMjk3RURCRjk5NzA2MzFCMkY3M0EwNjk2NjE4ODdBREZGQzg0REQzNTEyMUYzQzYxQTE2QTlEQjQ0MUEyNTZDQUUzQUQ3NkZBLCAyOTAyNDI4RUVFMjI0Qzk0MDZBMzE5RkQ2MDY4Rjk1OEE3QUM0OTBBNkRGQTcxQTBENUQ2RENERjA2NDEyQzY4QzJGQTNGREVCMEQ4MjY2QkFDQzQyRjlCNkNFQTYwMUIKKzk4QTgzMjYyNjE3NkNDQkU0Njk0Qjg4QTk2REMwMDQxNzFCMTQzODM4QUE1MkQzNjk4OERERjIxNTlEOTMxLCA5MDQzNEIyNjM2NzlCQ0JFQzA2QkFENUJCNDNCMTg1RTkxMjgzMUEzMUMwNjIyNjI5RjgwQUEwMDVBMDlDMzRCNjUwRkJCRTgyRTczNUY0Qjk3NTUxNTdFMUVEN0Y2MTksIDVGRUI4NDJGOTlDRDU3MTIwMkUwNUVERDlEQ0VCRUVFNzEzM0EzODdBM0NGMzExNERFMjEwQzJCMDc2RkFCNjUxNjZCNEFENDYyMTExMzdDQ0JDMTU2NDQ2RjM0OEEwMQorMUM5Rjg5NzI3MjQ2NDY2M0FEM0JFMjk5RkM0OTQwMEM0NTUxM0NBOEE5RkVGODdBM0M5QTk5RDY0MEQ4QjkzLCAyMjE2QjhGQUVDNjBGODc3MjY1QTQ0MEQwRjMxMUU2NUU2QUUzMTJCRTAzMjYwNDA4QTAxREFBMURFQzFDMTgwMDNDMjk2NTQ2MUNFQkU2MTQ1Qjk5RkFENkE0RUYyODIsIDVGQjVCNkExQzdCQ0FBNjA4QUM5QzY4QUI0RDNFQjQxOTRBMDM1ODM1RDQ1NTE5RjM0REU1OUFGNEQzNEI2ODg3QzMzOTQ1MDBBQjU5MTkzQjdGNjQ1ODk2Njc3NEFBQQorNTVERTlDNTc1NkQyRDMyQjA3QjNBN0NERjREQkMwMjRDRkYzQjVGOUZERkNFOTZFQjVDRkNEODJDMjhBMkI5LCBFMDNFRTAzRDQ4ODgyNkFFODk3MjVEQkIwMDM4RTUwM0Y4NzlBRUM3REJEM0M3QTg4RTUyMjI0NkJFOEIyQzRGRTJGMUZGMTBENTVCNzQ5ODUyQUMyQkM5RjU0QzUwNzgsIERFQkJFMDg3NzEyNDBBQkQ4NUE1MDhCQzY0RUQwOUNDNzg3ODdGOTczOTNDNThCQUEwNzQ4QkM5RDMxRjhBMTA3RkRGODhGMDE4NTk2QzIwMEE0RUVFRjAzMDNEMTBDRQorMTAxOUJENTA2MDQ3ODc5ODExNzFBRjc2OURFOTM0MDZFNkZEQjIxRURGOUY2QkM0QzIxNkY2ODg4NDc5RTgyQiwgNkNBMUJENUZGMjdENjhDMDYzNTgyM0ExNTZDNThDRDg0MjA3N0IxMkQwNTA3MjlEQ0NGRUY3QkRBREQ3QTcwMEVDRjExNDUxOTkxQzNBMzA0RUU0ODUwNzJERUMyMzM5LCA3NUUwRUZDRjgwRDQ3ODU5RTAzMEJCNEU4OUQyNUYzNkE2RTkzQTRGRDE5RjgxOTNGQTI2Nzc1MjMwNEM4QjA4NEM0MjZDMENEMjgxMUJGMTg4NjAzRTE5QjYzOTY5NAorMzA0RDM3RjEyMEQ2OTZDODM0NTUwRTYzRDlCQjlDMTRCNEY5MTY1QzlFREU0MzRFNDY0NEUzOTk4RDZEQjg4MSwgNkU3RkQwQ0IzNjgzNDQwNjhCRTYxNEU4RDNDNTRFOTIwREQ0MzM3RUNCNjQ1QUI4MTZCQTQyMDMyQzQwQUY5RTQ0QTc4RDQ3OEE3RDAwNzgzRkMyM0FEMEM2QzZEM0M1LCA2QjgxNDZDNjgwOTRFNkZDNjg3N0VFOTk5NjZBNEM5QkQ3QjE3Mjc1NTQ1NEE5MEJBRkZCOUI5RUNFMjVEMEMxMTg4RTcyM0U3ODNENkMyQzRBMTFFMjJCNjVEQ0E1Q0EKKzkwRTdBN0QzNjI4M0M0NTg5Q0ZGMkIyQjhEMzJENDNFMUVFQjQzMTVEQzlBQzlFQUQyQ0VBQUNDQTg0OTI5ODMsIEI3OTZBQzU4MjM4OEI1NkZFRjlEMzc3NTVCQjdFNTI5RkMzOTNDNTk4MTdFMkMyQTMwMzY1MzUyRTMwNThCREVCQkMwNUExNzQ3NEM5QjIxQkIxNzdFNERBREM5MEEzOCwgNTgxMTJENDBEMzM5OEY0OTA5NDE5NkE4RkQ4MTA5MEIxQ0Y0RjYwQzhGRTU2N0QyNTIxQzhDMERCNTgyOUI3NTgyNDU1N0MwMDEwNUQ5RkU0MDdDQTFGMjIyQkVGQ0IKKzFCMkI2Rjc3QTI3OEI0RDA5RDZGRDgxODJBNzk4N0NCQTVDQzFDOTQxOTVEMDVEQzA3ODZDMDA2NUY4REI3Qzg5LCA2NzIyNzYzMzQ5RERFNjMwNTQ4OEE1NkJGNTRDNjVFREQ1MDVDMzY4RDE0N0M3QzVBQkFFMjUzRUREODc0RDkyN0UyNzA2NDFFRjYwNkRDQzU5NDRFQUZCNUM4MTY3NTUsIDY3QkVDQzVGMTIyMjFBRUUyRjE4RUE2RUE5OEIxQUMzNTQ0ODA1NjZCMjcxQTJBOTVDRjE1RDdBQTdDNEI0MEVFNDFFMkE3NzU5RDQyMjNFOURGMzA2MUE5NzJCOTk5NAorNTE4MjRFNjZFNzZBMUU3MUQ4NEY4ODQ4N0Y2Qzk3NjJGMTY0NTVCQzRDMTcxMTk0MTY5NDQwMTMxRUE5Mjc1OUIsIDFEN0QyMDFFQjFFNkRCNTJFMUQ0RUI4N0M4NTdFMDkzMzM3ODc2ODIzOEIwMkNCRjc0ODY0QkNEMzU4NTQzMjY3MEY3OTcwQUIxNTBDNkNBRDIxQzRDQ0NDRTlBQkI3QywgNjQyOTQyOUZDRDA1ODc2OUMwNTU3RjFGNTkxRDIyODA0QzcxRTM0Q0Y2MkE5MkFGMzM5OENBMjk2QTNENDIyREE3NjMyNkFGN0QzNDAxQ0IwRDkyMkMzNUI2MDQ2OAorRjQ4NkVCMzRCNjNFNUI1NTg4RUU5OEQ5N0U0NUM2MjhENDJEMDEzNEU0NDUzNEJDNDNCQ0MwMzk1QkZCNzYwRDEsIDgxOEREQjI2MkRCQTIyNEI0MUE0RTZCQ0IzQkM1QjA2RDJFMTIxNTI5NUE1Nzk1QkVFNzYyQTJCMUFCODAzQURBQjFDRjc4Q0ExRTlCNDI4Njc4NzY2Qzc4ODlEQzBCMCwgMjg1MUJCQzM5OTIxNkQwOUI1MkUzRDBGNTE4RkM0NDBCQzExRTY1QjhGNjBGRDVGNjFGQ0RDNTQ0NzQwRjRBRkFBMDgwODgwMTU4QjFFODk5RjRDRTE5NDI3Rjg5RTRGCisyREQ5NEMxOUUyMkJCMTIwMDlBQ0JDQThDN0FEMTUyN0E3Qzg3MDM5RUFDQ0Y5RTM0Q0IzNjQwQUMxM0YyNjIyNzMsIDYwRDY5MjZFNTk0MTcxQjhDODhDMUI4NUEzMTc2NTNGQTBBNUJFQ0Y5MTM4QkExNUJDNUNEQzM0REExMzlEQjM4NDBCOTAyNzRDQTREOTJGNDdCQTg0RDdDMDQ1RDYxNiwgRDA4NzJBMkU3MzVERUIyNEFGODAxMjUyQjIwOTZFMkEzNDA2NzFGN0I0QjJCODkwNjNDMkYyRTRENTFFRDQ4OTc4Qjk5RkJDQTM2Rjc4MUYwQTgwNUZFOEY0QUEzMzA0Cis4OThCRTQ0REE2ODMxMzYwMUQwNjM1RkE1NzA3M0Y3NkY3NTk1MEFEQzA2NkVEQTlFNjFBMkMyMDQzQkQ3MjY3NTksIDZDRTAwRkZFNDM2QkVBRUIwN0M5N0MzRTI3M0REMTY2RDlGMjkyRDhDRERFODg1QjA0Njk3QTc3MjY3RTk5QzdCM0U4NENFQzc0QjA4OTc0NzY0RUZBRkNFRDc5NzFDQSwgMTJGQzQzRjA0M0M4QjhCRUE5QzlFMUNBNjc2MDJERkFFMjJDMkQxQjk3NTRDQjQ0RjQ1M0ZBRTY3MTBBMzFGMzM4OTI0REU0RkE5QUMwMERBMTE2QjYxMzgyRDAzOTIwCisxOUNBM0FDRThGMzg5M0EyMDU3MTJBMUVGMDUxNUJFNjRFNjBCRjIwOTQxMzRDOEZEQjI0RTg0NjBDQjM4NTczNjBCLCA5RDk2MDg4RTJENDFERTlCQ0U0NThBNkFEODNCRkU5NjMxQ0Y1NDYxNjE2QjVDQTA4RjMwMERCNjA1QTBGRTk1MEQ3NjE3NkQzMUI3MjI1RjdFMTM4NjZGQjU3RkU1REMsIDVGQ0JDM0MyN0U4QTJFMTZCOTVDQTlCRjgzMkE3RUM0MTg2NDI5MjkxMTY0Q0MxMzRGNkRERTk2REE5MjQwRjEzNTYxRDVFODRGQTRFQjEzQTFFNDFCRDY4MzdCNENGQQorNEQ1RUIwNkJBREE5QkFFNjEwNTM3RTVDRDBGNDEzQjJFQjIyM0Q2MUJDMzlFNUFGOTE2RUI4RDIyNjFBOTA1QTIyMSwgMkQzNDEwRDE2MDZGQUMzQjREQkYxMjY1QzgyRjJENUYyMTEwMzVFMEMyRTkyOEQwQTlEMTUxMzIzRjdCMzIzNjBFNTIyMzhENDIyNjc5MjAwRUY2MkRBMkU2QzM2MDEzLCA3OUI0RjI1NjQzOEMwMkIzREQwQTVDRERCQTlFMUY2RTE4QTlENjY5RDM2NTJGOEZBREQ3OUE1MzBGOEMyMkM1NDAyOTAxNUYxNUIxMDk0MTc5QUY1RDlCNEI5MDg5RTkKK0U4MUMxMTQzMDhGRDMwQjIzMEZBN0IxNjcyREMzQjE4QzE2NkI4MjUzNEFEQjEwRUI0NEMyQTc2NzI0RkIxMEU2NjMsIDE3MkZGNDk4REJGRjcwNjU0MUZGMzFBRkYzMkUzRUI5RjA3RkM4MTc0OENEODRBOEFFQzFFRTlDRjM1QzJFMTc0MDdBODEyRERBQTU0OTFFMzJFODNGNjlBRjQyNzA4NiwgNkY2N0Y2NkI3QkQzRkZERTRDODBBRUVDMDI2RTMxRDFEN0NENDU5QTYzNjBFQ0Q5MDBBODc5QThCRDQyN0QzNDBCMEE5MjVEQTgzNjU0Qzk4NTVDMDQ5MTBCMTE3NjhFCisyQjg1NDMzQzkxQUY3OTIxNjkyRUY3MTQzNTg5NEIxNEE0NDM0Mjg2RjlFMDkxMzJDMUNFNDdGNjM1NkVGMTMyQjMyOSwgMzE2MjYyNjZDRjczNUY3OEM1QTlCQTk4RUY2QTlFQjNCNzE0MDc3MzY1REVBOUFCRURDNENCRkUxODEyRTRGODE5QjVGRjMxMjNBMkE3QUM2ODNFQTQyRTU3OEI2REE3LCBCMEZENjVFRTdBMzhFNEE0Mzg5NDEyODExRjQyQTBGQjdCMjIzMTgzQTIyOTJGQTBDRDhBNUM2NkYwNTRDOTg3RDhDMUZFRTdBNTcxQTJCNDVEOEJGMTI2QkMxQkU1QQorODI4RkM5QjVCNTBFNkI2NDNCOENFNTNDQTA5QkUxM0RFQ0M5Qzc5NEVEQTFCMzk4NDU2QUQ3RTJBMDRDRDM5ODE5N0IsIDQ5QjlCRTkwNzBENEJCQ0FFRjIzMzMzREVBRTJBN0UzOTg0NkVBNTdDODUzQzU5MjQ5MDQ4RDZDQTNDNzJFRjhBQzVDMTU5QjM3MUUxNkY1OTlCRkFBQTM1OEZDQ0ZDOSwgQzQ0MEM3MTdFQkZBMjIwMjNENzRCRTY5NDVDN0YwMDQwQjUyMDI5QTQyQUM5RkRFRjFFRjM2NzU0NzhDNTZGMDFCNzFBQTI2QkZFMEYzMEU3MTk0QzRBOTIyNjgzOUZGCisxODdBRjVEMjExRjJCNDIyQ0IyQTZBRkI1RTFEM0EzQjlDNjVENTZCRUM4RTUxQUM4RDA0MDg3QTdFMEU2N0FDODRDNzEsIDIzRDdGNTk3QkJBMTdCNDUxNzQ1Q0EyMzQyOEQ2MkJBNzA3MTNERDVCNUI1QjhGRDA2MEJBNEQ3MDcwRjNBODUzMDk5NkVBOTZDRjZDNDIzRkVFOUYxRDI4QjEyQzIyMiwgMUVCNUM3QTEyNTkwMjY1OTIzRjVDODAzRTUxMDUyQjc1NDc5QjJBRjg0OEM0RkFBODk4QzlGOTMxMzJDMzczMUJCQjYyRTIwQjMzRjcwNjk2NDVBNkI5ODAyMTQwRTU3Cis0OTcwRTE3NjM1RDgxQzY4NjE3RjQwRjIxQTU3QUVCMkQ1MzE4MDQzQzVBQUY1MDVBNzBDMTk2RjdBMkIzNzA1OEU1NTMsIEM1MkIzRTYzNjAxMTE5MzFCQkQ4MDcwRjc5QkIzRjJCMUM1OTREN0Q4RjI5MDBBRDE0MjQzRjE5QTlENUQ3MzlGQUEwQzg4RjMwRDdDNkJGOUY5ODMyQjQyMzBEOEQ3MSwgQkI4MkVDRjk4MjA0QkJDRTIzQTc5NEQ1RDA0OUM5OTI1QzEzMjFFOEY3RURDOTUyOERDQUZFMDZGRTk2RUQxRTExQzk5MjEwQ0ZBQTY3QUY0QTcwQjU1NTFFOTVCMzM3CitEQzUyQTQ2MkExODg1NTM5MjQ3REMyRDY0RjA3MEMxODdGOTQ4MENCNTEwMERGMTBGNTI0NEM0RTZFODFBNTEwQUFGRjksIEIyNjA5QUZDNTdBODIzOEFENEEzQzE0MDc3NzM2QjMyNDkzNDUyQzk2MkQzNjlCQTRFRDgxODI1NTBFQUNFNzAyNTJFQTlEQTc5MEM5ODc2N0Y0NkE4NjAzRUMwQTUzQiwgOUU4M0M1RkEzMjc4OUMxRThCRDdEQkUwNEQwQjk2NzgwQzkzRUZGMzBGQ0VERDI4NEQwMjNFNTg4RkQxMjY4Q0FEOTg3RjU2OTgzNjJERTNFRDI0RDlCRjNFMjlFQzk3CisyOTRGN0VEMjdFNDk4RkZBQjZENzk0ODgyRUQxNTI0NDk3RUJEODI2MUYzMDI5RDMyREY2Q0U0RUI0Qjg0RUYzMjAwRkVCLCAyQUU5MTY3MzJERTdEQ0Q4Qzg1Mjc4OTBDMTBBQTIxODY4OEI1NzgwNzhBMjUwMzNDREJDNTdGQUZFNzlBRjgyRTMwOEQ4NjBCRUZFNzQ3RUFFMTlGNUVEOEZBOUQxMzYsIEU1OTkzRDZFQzNFQTZEOEUwQ0I1OEQ0MDM3OUI2QTBDNDg5RDQ1NUY5QUM1NDI5N0E0MUQyMENCRjk1OENFQzdCMzVBMDI1OUUwRTI0NEZFRUQxRURENUVBODZCOUFDMworN0JFRTdDNzc3QURDQUZGMDI0ODZCRDk4OEM3M0Y2Q0RDN0MzODg3MjVEOTA3RDc5ODlFNDZBRUMxRTI4RUNEOTYwMkZDMSwgN0E3NDQzNERCMjMwQzQwQUFBNkU2Njk2RUI5NzNBQTZBMDJCQjFBODVFQTlCNDAzQjIxQjdGNEY4MzQwNEZCRjc5RDExQjREQzQyNjRDODQ4RUU5ODYzRDQ5REY2MzFBLCBDQzZEQTA0OTg0NzgxRDU3MTk5QkIzNkVBRTYzQjY1MDQwMkRFRjE5NjgyMTZFRTE5NEJBMzZBRUIxNzZCN0JGNDBEQkRFMjhGNjQ2NUVDRjMzNzFGMDQwQjlBNkFGRjEKKzE3M0NCNzU2NjcwOTYwRkQwNkQ5NDM4QzlBNTVCRTQ2OTU3NEE5OTU3MThCMTc4NkM5REFENDBDNDVBN0FDNjhDMjA4RjQzLCBCOEY3RjQ2M0U4REQyNkExQTVGQjQ4RDNERjBDMDhBNEYyRUQzNzg3N0I0QTA1NUZFNERCRTBCQTRFODc2MUMxRDU3MkJBQURBRjJBOTk5QzQxNDhCNDFEQUM2OTI3MDAsIEI5MTQxRkQ1QUMyNDlGQ0VGNjNDQTFFMTM4NTJFRDRBODc0MzE0RTc0QzhGN0YxNTk1Rjc3NDJBODYyNkQyODUyRjlFQUYzMUFBMTk4NkMzRTU3QTgwODI2RDNGNEM1OAorNDVCNjI2MDMzNTFDMjJGNzE0OEJDQUE1Q0YwMTNBRDNDMDVERkNDMDU0QTE0Njk0NUQ5MDdDMjREMEY3MDUzQTQ2MUFEQzksIDY4RTM0Q0I0OERCQjAwOTI5RDlCRjZGQ0VGOThBMTE3QkJENTEwQzI1NjRGQTI5RkQyNzM1NjgwNTUwQkFCMkNEOTNERjhBRTFFNkE0QUVGMTE1NkE3MDkzQkREMDdENSwgNzRGQTM3ODAyRjUzRjM2ODJCRjAzRjJCQ0E0OEM4MzNBN0I0MEQxQUVFMTgxRkU3NjQ0NTlBNjJFQjk5QUU5NEUwRDkyMDQ4MTg2NzE3Q0NGMkFBRDdDNDgzRjZCRjE5CitEMTIyNzIwOTlGNTQ2OEU1M0RBMzVGRjE2RDAzQjA3QjQxMTlGNjQwRkRFM0QzQkQxOEIxNzQ2RTcyRTUwRkFFRDI1MDk1QiwgNEJBMTg1NkZFNTNBMzVFMjU2MzVBQUI5RjA4MEVBREQ5N0Y5Qzk2Q0M0OUQwMTI5M0Y2MTc4RjVCMDlCNzM2QzY5NjkyNDAxMTQzRDEyMDBDRUY0RThCNTJDNTk4NEQ5LCBERDhEMEJCRkYzRTY1MTFBQTQ1MzA2NzFGNTI1QUJBQkZFQTJDNUQ0NTAwQzE1MTAyOTIzMjE3MkZEQzY5Q0U1QzY5QkI1M0EyQUVBRkU5OUM4RjdGQ0UxRUUyNUZFQ0EKKzI3MzY3NTYxQ0RERkQzQUFGQjhFQTFGRDQ0NzBCMTE3MUMzNERFMkMyRjlBQjdCMzc0QTE0NUQ0QjU4QUYyRjBDNzZGMUMxMSwgMjNDNEM3MzIyQzI3NEMxRkQxMEI0QUVFQTc4NEZBNEM4QTdBOEU3MjUzNkVBRTNGOEE5N0VCM0ZCMUIyQjhEN0U4ODBBMzlCM0IwRTREQzk1RjFDNzA0RjBBQ0UyRjM4LCAzNkZCNjIyRTA5QTQzRjYyQTRDNTQzNDg4QTMyMzlGMzQxRDIzMTExNUM0QkJFMEQ3NTc3ODgzQTEwOUVEOTRCMTk5NzREMkI4N0I2RDFBMzI0REZBQjczQzZEQUZFMDMKKzc1QTM2MDI1Njk5RjdCMDBGMkFCRTVGN0NENTIxMzQ1NTQ5RTlBODQ4RUQwMjcxQTVERTNEMTdFMjBBMEQ4RDI1NjRENTQzMywgMjlFNzE2QUM0Q0Y1RUZBOTBFNzlEOTlFRUQ5REVFQjQ2RUMzOTIyOUI0NzdGODg3MTc1QzZBNjhDQzYzNDVCNUVEMUE3NjBGQkM5OTdFNkNGM0VFRTU4NDY3OTI3MUZDLCAyREFGRUFEMTdDREFFMjdDODNBOEFDRUVCRUJEMTY1NTcxOUM3NDQ5NUIxQkQwNUMxMjMyNTRDRUUyNEQzNDhCMEU2QzM2NDk0MDlGMzkxQUFCRTUxRTYwMDZFNDVBNUMKKzE2MEVBMjA3MDNDREU3MTAyRDgwM0IxRTc2N0Y2MzlDRkZEREJDRjhEQUM3MDc1NEYxOUFCNzQ3QTYxRTI4QTc3MDJFN0ZDOTksIEE4NDBEN0Y5RkVCMjM1MUMzQzZCRjE4NzJBQzAyMkFDMDY4RjI2NUYzRkEwRDgxNDc2MjExOUM1MTRCRTAwMTBGNjJERTc0MUU0NjZBRUZENUU3RjcyMTkwQUY1QzdELCBGQjBFNURGMDk5NkYyMDZFNzE1NDQxMUU5OTBEODNEMEU3MzM5N0EyN0ZBNzk1QjgxNEI2OEIzNDRGMTcyMjQ4QjBGMUI3Nzg5ODQwQjc5MjU2NEQ4M0FEODk4NTEwQkMKKzQyMkJFNjE1MEI2OUI1MzA4ODgwQjE1QjYzN0UyQUQ2RkY5OTM2RUE5MDU1MTVGRUQ0RDAyNUQ2RjI1QTc5RjY1MDhCN0Y1Q0IsIEJGMERBNzdCNDlGQkI4RUEyQkI0MzNDODg3M0Q5NjQ4NUI0QTYyMzgyMEI4RkRGODI1QTM0QjdCQjVFQTZGMEM0MTUxMDJDNkJDRTAzODQyNEJGM0QzMTNCQkQzRTdCQiwgMzhGODFCOUYzM0RGMzkwQkExRDEwMDFBMDk1MzBFMzVFNzdGOTFGQUEzRkUzNUNCNUM5NUZCRTdEQjQ1RTg5RDlCRDA4MUU5OEEwQTFENzI1MDg2NkIyNzAzMEYxMUQKK0M2ODNCMjNGMjIzRDFGOTE5OTgyMTQxMjJBN0E4MDg0RkVDQkE0QkZCMEZGNDFGQzdFNzA3MTg0RDcwRjZERTJGMUEyN0UxNjEsIEVGMTI0MEY1Mzk2Qjc2OUFCQjEwNzgxQjc5RjlBMUQwNEM5NEIwODk1MTIyOThCMUVFNEExRTUwNzNDMjFGRERERjlFQTExMDZFOUM3M0RDMEMyNzYzNkY2QjExOTkzLCBGMDQ1MUZEQUUxNUJENTVFMTk5MkFFREI2RDkwN0REMEE2RUVGNUU5QTA4NzJCRTYwNDJGOEU4NDhGNTM2MTgwRkQxM0VCNzFENzkyRTBGOEZBNDg1QzhGNjU4QkZEMTMKKzI1MzhCMTZCRDY2Qjc1RUI0Q0M4NjNDMzY3RjZGODE4RUZDNjJFRTNGMTJGREM1RjU3QjUxNTQ4RTg1MkU0OUE4RDRFNzdBNDIzLCBGM0I4QTcwQUU5OTIwRjg4NURBMjQ4N0I4MzlGQ0MyMzhFNzhEM0Q5OEIyNEVBQjhCMjlGMzI5MTU5QUIxQTI4NTU3QjAxNTRDOTJGNzI2OENFOUY0OEQ4QzQ3REFBOTIsIDdDNTQ0NzkzQjVFREQ1MjNEMjE3RUJCQjRFQTNDMzZGODA3NUIxMTY2QzA2NTY3RjY1MzhDM0ZGNTIxMkVDN0FCNDIyQ0VEQ0Y1QjRDQUE4NkRDOUNFMjhFNzgwRjY2Cis2RkFBMTQ0MzgzNDI2MUMxRTY1OTJCNEEzN0U0RTg0QUNGNTI4Q0FCRDM4Rjk1MUUwNzFGM0ZEQUI4RjhBRENGQTdFQjY2RUM2OSwgNUI5OTAwQjJFMTgxNDM3RjIwQzczNzFDOUVGQjZEREE5NzA5QUIzRTgzMjBBRDc1QkVEQTNEMEEyNDU0RjVCODRDRkI5ODMxMUYwRUIxNUNFNDQ3QTM5NTQ4MkEzMUZDLCBEMTZBODk4ODE3RjJDOUZCMkRDODU3NDg1RjlCQjYxNUE1QUU3MjU4QkQ1OTkyQTU2NUZBNzREMjIzMkZENzU0RTcwRUEzNUVBQTE4MTM1NUFBQzMzNzRCNUJEOUZFRDIKKzE0RUZFM0NDQTg5QzcyNTQ1QjMwQjgxREVBN0FFQjhFMDZERjdBNjAzN0FBRUJGNUExNTVEQkY5MDJBRUEwOTZFRjdDMjM0QzUzQiwgM0I4RjFDRTM1M0FDQjAxMUY0OUM5MDY0QzYxOUJBQzBEQ0Y1MUUxOEFCRTI4REVBNDE0QTgxNTMxQTU2NUQ1QkY5NDg2NTlDQzY4QTkyMDYwNjU4RTg3MDZCMTI1NEIsIDZFOTMxNkNERDM5OEZEMTFEODc5NUNBNDczODIxMDZGRDU3MzgzOEQxNEU2MTI1RjIyOEQ3NUY5Q0I5QzA2NThFNDU4M0NFM0M2QTcyQTk3N0MyOUYzRjg5MTQxRkFBQworM0VDRkFCNjVGOUQ1NTZGRDExOTIyODU5QkY3MEMyQUExNDlFNkYyMEE3MDBDM0UwRTQwMTkzRUIwODBCRTFDNENFNzQ2OUU0RkIxLCA2QUQ2OTgwNDQ1RDlDQUI4M0NEMzUzN0IyRUIxNjcyRTNGQ0NGQUZFRUU5QjcxMzY3RTYwQTQ3NzkwQTBENDZDMURCOTYyODEwRDczNEYyMDdBMTQyMjAzNEMwNTU5MjYsIDYxQ0I4NzIxNDM4QkFBMEY0MTM1REJDQkYxRkMzNTc2MTE5NDREQkM3MUM5OTQzNjg3NEFBM0NFMjg4NDEwQzAyQ0NCRTIyMjI1NTg4NTI0RTIxNzk0RkU0NDNDOERERAorQkM2RjAyMzFFRDgwMDRGNzM0QjY3OTBEM0U1MjQ3RkUzRERCNEQ2MUY1MDI0QkEyQUMwNEJCQzExODIzQTU0RTZCNUQzREFFRjEzLCAxNkYyNzQ1ODRDNDlFM0ExRjIwQUY0MDNCNEY4NDQwRkYwRDZBQjMyQTFBMjNDMDdEQTU4NDgxODNDRkM1MDk0MDFFRkY1MTE0ODE4RkE0NUFDQjgxOTAzMDQwQzJFQzMsIDIzRkVENEIyMkU3MEU2RUE2OTlGMzNFMTU0QTg2MUU0QUMyNzgyQUVBNjJENTREN0NBMUZDNTg5M0E1ODRDQUMzOTQ0M0Y4RkFDM0FGQkNGOUMxQjA3Mzg2QzIwOUQxCisyMzU0RDA2OTVDODgwMEVFNTlFMjM2QjI3QkFGNkQ3RkFCOTkxRTgyNURGMDZFMkU4MDQwRTMzNDM0ODZBRUZFQjQyMTdCOTBDRDM5LCAxQTU4MjVEMzkzRTFBNDcxOTFFQkExMzRFN0Q2MEZGNjExMzQ4OUY5OTM4NEFFNzAwMDg0NEE0N0VGMTc4MTA3OTU3MkJGQTI2QkRBMEQyOTUxQzdCREExRkFDMjA5OTksIDc1MkVGMkM4RUFCNTkxMjVBODBERDBGRTNDNDQyQTJFMEQ1MEE2OUQ3RTAxQkYwREZDM0E5ODQxM0MwNDFDQTQ0OUI4QkFDODg1QkNGNkY4QkQ1OEM2MDRBMTJCNjk2NworNjlGRTcxM0MxNTk4MDJDQjBEQTZBNDE3NzMwRTQ4N0YwMkNCNUI4NzE5RDE0QThCODBDMkE5OUM5RDk0MENGQzFDNjQ3MkIyNjdBQiwgM0I4MkY4RjJDODAxMjVFRTJBNDMyMzUwMzdGNUI5NTM3M0IwNDIyRkEyRjU3MUI1MEY4OEVCODBDMkM4MTMxQzhEOEIzRjY0REI5RkExNUNFNDQzQ0MxNTk4OUIyQkYwLCA1RDZCNjYzRTk5NTI4OTQ2NUJCQTNDQjQyODhGRTI5MzEyNDNDQkJBQzhCMTFBMjRCNDdGMUM5RDg3OTZGQThEQUI3NTk3MzQ0NjIxMTQwMERBQjY0MEYxM0U2RUY5OTQKKzEzREZCNTNCNDQwQzgwODYxMjhGM0VDNDY1OTJBRDk3RDA4NjIxMjk1NEQ3M0RGQTI4MjQ3RkNENUQ4QkMyNkY0NTUyRDU4MTczNzAxLCA2RDIzQkVGNjAxOUY2REJDOTJGNDM5N0FGMzgwRDBCQUU3MkQ4OEVERTc4RjYyQzFBQzhBNjZBNUI5Rjc0MjNGM0E1NzM2MjUwM0M5QUFDNkJGMDk4RjM4NjNCRTY3OEUsIDE1NjIxQkE3NzBDOTE4RUVBQzk3QzhFQzIxQzk4RkQyN0RGQUZGQkY5QTI5OTNBRDZDMTExRTAwNzBBMkU3MTQwQUNDQjg3OEMyRkQzOUQwRDMyMzQ2QzdDNDIzMUE0NworM0I5RjFGQjFDQzI1ODE5MjM3QURCQzREMzBCODA4Qzc3MTkyNjM3QkZFODVCOUVFNzg2RDdGNjgxOEEzNDc0RENGRjg4MDg0NUE1MDMsIDUxNkEwN0Y0OUJEREFDMjgwNTdBNjEzRDVDNUU4QjNERTBCN0QzM0YzREE2RkEzOERCMjgyOTU5Q0I1RDBERUYwNjU2Q0I0NTM4MTVEQjVEMjdFMDRERUUzRDVDNDk3OSwgRkMwODkyRUNGRDU3QkNCMEJFRDE5RjRFOTM5MUNFRUZBNTg2N0MyRTQ5N0EwQjhENTM3QTVCMjQ0OTg1QTMwNURFRjFFMjhCRDg3MzYyMkExRkNDOURERDIwRDY5QjgyCitCMkRENUYxNTY0NzA4NEI2QTcwOTM0RTc5MjI4MUE1NjU0QjcyQTczRkI5MTJEQ0I2OTQ4N0UzODQ5RTlENUU5NkZFOTgxOEQwRUYwOSwgNjYzMzM0MDA5RUVGMEY1QkRBQzgyQTk4ODQyREJBNkMyOTBBRjAzRkRFRDhFODkzMzgwMERGQzc3Q0QxRjIxRjQ3RTE5QkU5RjBFOTE2RDZBREQ1NDU4RkE5QUU3NTdFLCBDMTQ1QzI2NDEwRjcyMjkwNkQ1QUY4NEUwNzJEOTUzQjZCQzJBMDdDNkM4OTY2MDA4RkQzOEQxMkQxQjhFNTE0Q0I0NjcyNTBGMEM1QkMwQ0Y4MEQ0RkYwNTZEMUVEMkEKKzIxODk4MUQ0MDJENTE4RTIzRjUxQjlFQjZCNjc4NEYwMkZFMjU3RjVCRjJCMzg5NjIzQkQ5N0FBOEREQkQ4MUJDNEZCQzg0QTcyQ0QxQiwgNjk1ODkyRTdBNTc4MTA4RDk2MDUwMTc0NTZDQ0M0NEEwMjI4RTNBMENFREVDNjdBOEE1Q0IyMTlGMzU2MjZBNzMyMjhDNjAyREZGOTYwMEMyNDgxRTFBNTJGODgxQjUsIDgwM0U1RTFFMUJFOUFERjlGOEIzMEVGREY5NDFCRUI4QUUwMTFCRDFDMkU0QzZBRjA3RDIwQUNCQjg4RTlEQTgyRjI0MzQ4QUI4M0UzOTQxQjc1QTNEMDAwOEEzNDFCMgorNjQ5Qzg1N0MwODdGNEFBNkJERjUyREMyNDIzNjhFRDA4RkE3MDdFMTNEODFBOUMyNkIzOEM2RkZBOTkzODg1MzRFRjM1OERGNTg2NzUxLCA4Qjg2RTdENTNCQzQyMzQ1NjNBMDM2QTJBRkE5MEE5OEE5RkRGODY2ODdBNEMzQkQ2MDg3OEFFQTQ3OURBMUVDMTBBOTgyMUNFRUY1RjUwRjRDNzJDRDhCNThENjQ0NTIsIDJCRTg0RUFDOEJCMzEyRTRCMzEzREQwOUUzMDI4NTRDMzhCREY4MkExQjVFOUMwOTA3RjE0NzdEOEFDMDlFMEUxQzc3ODAzODI3RTVFMERDQ0RCQUYwQjMwOUUzNzMzMAorMTJERDU5MDc0MTk3RERGRjQzOURGODk0NkM2QTNBQzcxQUVGNTE3QTNCODg0RkQ0NzQxQUE1NEZFRkNCQTk4RjlFQ0RBMEE5RTA5MzVGMywgQTc5NkFFQTYxRjNCQjM0MUMzNUY1NDc3MTVGRUFDQzVBRkRBOUQ0ODk4NUU0MjRCODkyNTFEOUJGMTFDOTlBNUIxMEYzMkE4RkMzMUZGMTM2RDAxNkU3NEU3Qzc0MTVFLCBFREY1ODM0MDZCRkI3ODM0MTgzMDI0NURCNUVFQzdGNjAxQ0Q4NEFFQjlEMDQ1QTZGMUIwQUVGNzExNEY1QjdENEE2QzlBMUZBNjFBM0Q0QzNBMTZFMkZBMTA1NkUxOTEKKzM4OTgwQjE1QzRDNzk5RkRDQUQ5RTlCRDQ1M0VCMDU1NTBDREY0NkVCMjk4RUY3RDVDNEZFRkVGQ0Y2MkZDQUVEQzY4RTFGREExQkExRDksIDRBRTkzNUMyODQ3NzZBQ0QxNjZGNEMzNDNENUQxMjcyMEMxQkU4Qzg4Q0JCOUM3QkU5RUExQTcwNDY2QzQ3QTU4Q0E3QjVBMkU1QjhGQkNBRjIzQzBEQUZGNjVDRkQzMSwgOTFGODVFNEYzMDVCN0YxNzE2QzlDRDQ1QUZFMDdCNzk3RTcwRUE4QjgyM0YyNTcyMUM1OEJEODlFRkU3MUY3Qzk3OEQ0QjExODBEN0E4OEFENjg4M0RBRkI1QjJENDBBCitBOUM4MjE0MTRFNTZDREY5NjA4REJEMzdDRkJDMTBGRkYyNjlERDRDMTdDQUNFNzgxNEVGQ0ZDRjZFMjhGNjBDOTUzQUE1RjhFNTJFNThCLCA2M0Y0MEI3QzYyNjY0NTQ4MUE1QjUzOEMzNjBFQjI4ODEyMUEzRUVFQTkwRENBRjcxNzdFN0RGODA0MTY1NTEwOTQyNEE3QkJERTczMEQxRTA5RDY5MDg1NUE3QjRBMUEsIEMyOEU2OTk0MUQwNjMyNTk2RDgyMkVDNThCOUI2QUZCMTZFMzAzRDNDNjMzMDJBOUJDRURENUE5NkUwNkI2ODNFNkFDRjFCRjU0NEM4Mzg5M0U5RTY2N0E0MjVCRkZFNAorMUZENTg2M0MzRUIwNDY5RUMyMUE5MzdBNzZGMzQzMkZGRDczRDk3RTQ0NzYwNkI2ODNFQ0Y2RjZFNEE3QUUyMjVCRkFGRjFFQUFGOEIwQTEsIDg0MzFGNjU2NDZGMUE5RkQ2NDMzM0RBMjY4NzkyNUM1NUVBRkEyNUE2OUU0NzZFM0RBMUNGNDE1QTFGMDVEQjQyQzRDMDVFQTQ0NjkxNzlFRTBGOTBDMkQ3MDIxM0RBQywgQjAxNjJGMDJEMEZGOUQ2NEEzRjZGOTJDMDAxNzUwNEVFNDQxRUE2MTI0MkYxQkRCREQ2RkNBQjBFQjI5MTVCOTFDNTM4RDQzNUM2RDNGNDAwMzE1QzQyQzYwRTdBNEE1Cis1RjgwOTJCNEJDMTBEM0RDNDY0RkJBNkY2NEQ5Qzk4RkY4NUI4QzdBQ0Q2MjE0MjM4QkM2RTRFNEFERjcwQTY3MTNGMEZENUMwMEVBMTFFMywgNzIwQ0IzMUQ2QUYyNTBDRTAyNjc1OUMxNzA1NzdCMDA4MzM3RDU3RjUzQTc1MUVGM0E5RkYyOUY4OTYwMTQ5MEU1RjY5RUUwRTIzNDQ0ODFBQjhDODgwOUVENjQ5MTBELCA3NDgzMjcyQTk2MDlEQ0I4QkVDOEZDNzEyN0YwNUY2QUQ2MjBFNjUzNTFERjIyNEQ3Njg3NDBCMTU1RDdEMTNCQkJBMjM5QjM4NjQwQUVFQTY1RDVGRUYxMUMzOTMyNkYKKzExRTgxQjgxRTM0MzI3Qjk0RDJFRjJGNEUyRThENUNBRkU5MTJBNTcwNjgyNjNDNkFBMzU0QUVBRTA5RTUxRjM1M0JEMkY4MTQwMkJFMzVBOSwgM0RGM0QzNjRBOTVFQTI0Qzc0MTE3QTk2MENENTA0NDVFQ0I1MjQ5MzM0ODQ3MTNBODczNDJCMDY2MjJCOTc1MzEzQUMyNkE4MjM1N0M0NjgyNEE1MEU5ODNFNzk0MTk0LCBEODAwODIyNEFDRkZDQ0JBNEEyOTc4QzIwNzk0RjI1MjE1RkU3QTU3NjcyMThDRjI2QjAxN0VGN0UxREFCNjkyRTJBMkNCQTg3RTdBOTVEM0JDQjM1QTYxMTA0MTI5MDYKKzM1Qjg1Mjg1QTlDOTc3MkJFNzhDRDhERUE4QkE4MTYwRkJCMzdGMDUxMzg3MkI1M0ZFOUZFMEMwQTFEQUY1RDlGQjM3OEU4M0MwODNBQTBGQiwgREYyQzU1MDg2ODFCMUFDNjhENzFCNjc1NTZGMTNCQjRBMDY2MUJEODI2NjU5M0ZCOTQ4Mzc5RDJDREVCODM2QjQ5QjUxNzBBOUMzMDkyODRFQ0I1OTkyOUIwQUY1NDM0LCA5MDZGNzg0Mjg5MjE0Rjg2QTk3OEE3MTkxMDg1MzdCODEzRTMyODUyOTA3MDVGMkYyRTEwRDYxNzU1NEI4OThGOThCNzIyODZCOTY2NDNEN0IxN0Q2QkZDQ0U3NUU3MkYKK0ExMjhGNzkwRkQ1QzY1ODNCNkE2OEE5QkZBMkY4NDIyRjMxQTdEMEYzQTk1ODFGQkZCREZBMjQxRTU5MEUxOERGMUE2QUI4QjQxOEFGRTJGMSwgN0IwN0QyMDhCNUEwNThFN0QwOTExMkYzQTg3NUE1OEQwRDA4MEJFRjFGOTMxRDgzQzZGMjc2Rjg1Mzk4RkI3RUQ0MEREMTkyRjAzMTVEN0FFOERFMEREMDBFNDAxNDNDLCAxQTc1NTFGNDBBRDE0QUIxOTExRjc5NEMzNjhBNTNFNjczNUMzRjNBNUVBNTREQkVBODhEOTlCRjRDREZDMDUxQkI2RkQxOTE4NUNGMTVBREUyNTg1OUU0QzgyQUZCQTkKKzFFMzdBRTZCMkY4MTUzMDhCMjNGMzlGRDNFRThFOEM2OEQ5NEY3NzJEQUZDMDg1RjNGMzlFRTZDNUIwQjJBNEE5RDRGNDAyQTFDNEEwRkE4RDMsIENBODVEQzg5MTQzMTRBNEYzNjVCMUYyNzhGMjhFMEE3NEVFNDFFN0ZDMjc3ODYxNDA2RTc0RTIzRjZCNkZDMUE0QkQyQzM4NThDNzEwOTgyOTZCOThDRjczOEY0NzEwNSwgNEE5NjRGODg1QzIxQzVGNUQzOUVCMjkyRDI0NDk1NzFEMTI1NTQ1OTY5NkM0REM5QzcxQ0REQkU3NDA4NTM4RTMzREZCNzkzMTUzMEYyN0RFMjAzQjE3NThBRjVGQkNDCis1QUE3MEI0MThFODNGOTFBMTZCREFERjdCQ0JBQkE1M0E4QkVFNjU4OTBGNDE5MURCREFEQ0I0NTExMjE3RURGRDdFREMwN0U1NERFMkVGQTc5LCBDMUI5NjA3QjRFOURFMjNCNjNBNDYzMzFEMEM0QjVBQjlFNkVCMDk0RUZENzU1MjA4MUE2QjI0NTcwMjQyMDlCMTA4QkNENkNFQTExNzQyODJCRDA2QjM0REFGMzMwRkYsIDVCMUM2MkNEQzQxRTg0OUNDQTQ2NTQ2ODE3MURCMUY1NDg0QTBFQzZDNjJENUY5NERCNUMyRkNBNUNBNkQ2NTMyMkE2RjM2Mzc1RDgxMEJDNUNDOTcyMTg1Rjg0MzcyOAorMTBGRjUyMUM0QUI4QkVCNEU0NDM5MDlFNzM2MzAyRUZBRkEzQ0IzMDlCMkRDNEI1OTM5MDk2MUNGMzM2NDdDOUY4N0M5NDE3QUZFOUE4Q0VGNkIsIDhCOEI3M0Y1OEY1OTA4OEJENUU2MjRGNjhCNDI2NjU2RkM2RDkwODEyQUZDN0FFM0Q0RTI4RjM1MzJGMjE4QzY1RDIxQkQ1NDVEMzI1QzRCNkE2QkVGMjk4ODk0RUNEMCwgQzcwMEUwRTAyRjY1REIxNjFBNDRCNUE4MzQ5MjY1NEZDNTE5RDFDRDM3QzE5MERBODMwNzc0NTJEMjE2ODFERjUyRjA2REMzQzRDNDRCODMwQTExNUJFQTQwQjk2QTJFCiszMkZERjY1NEUwMkEzQzFFQUNDQUIxREI1QTI5MDhDRjBFRUI2MTkxRDE4OTRFMjBCQUIxQzI1NkQ5QTJENzVERTk3NUJDNDcwRkJDRkE2Q0U0MSwgNDQwRDVCQzU4MEIwNjcxNTU4NzE3OTAxQzVEOTA5NDIyRTcyQUVGNThBRDBDRkY0QTIyMzJFQzhCQ0Q5ODYxOUU4MUIxMzE1ODNGOEY3NTg5REI1REQ1OEQ5RTU1N0Y0LCBGODY4Q0Q2OUZGQzBBQzI1NEU3NUJFMThGNTY1MDQ1NkVFNzkzQ0U2M0RFQ0FENjJGNjc0Q0I3MUE5QjgwQTAxMEQ0NkI1RTRBOUNEM0ZFMkRFNjI2ODczRjdFNkJFNQorOThGOUUyRkVBMDdFQjQ1QzA2NjAxNTkyMEU3QjFBNkQyQ0MyMjRCNTc0OUJFQTYyMzAxNTQ3MDQ4Q0U4ODYxOUJDNjEzNEQ1MkYzNkVGNDZBQzMsIEJENzVBOEZEMDUxNDFDNDJFMjU2QTg5NkQ3NDdGMzFFMUZENUU0RDlCQkVCQzZCMDNBRkFGMkQ3ODdBMDYwNTgyQzA5NzMyOUY1ODFCNkQzOUIwQTE1MDVGQjhBNjc4MCwgOUUyNkIxNTUyQzY1REI5NDc1RDFCQkE5OTExMzU1RUY5MjU4OTVDOTA2QzlDODM2MTYwMTkyQkFBRDQxNUMwQjFCRTgwRTI4MEUxOUEzQzYwQjc2MUFCNjc1MzA4MDYwCisxQ0FFREE4RkJFMTdDMUQxNDEzMjA0MEI2MkI3MTRGNDc4NjQ2NkUyMDVERDNCRjI2OTAzRkQ1MERBNkI5OTI0RDM1MjM5RTdGOERBNENERDQwNDksIEU1RkFDMjI0MTczOTgxNzg3MDUxRUFCQzBEMjhGMDQyMEIwREMwODU5RjA2NzVFMzA2QUQ3NkFGNzM3RjVENDA4MjFBRDYyQjU5MDM1RUM5NEFEMkJGOUE3MkZGN0E5RiwgMzlGNjk1RkQwQTc1MUY4OTEwQUZGMUVEMEM5Q0JBNEFEMTAxNUM5RTA5ODA3ODUzMkU1Q0I1NzkzNTcyNzdGMjlENjEwMzk2NTBCOTBEM0FDNEJGRTZDMkEzNEZDRTc1Cis1NjBDOEZBRjNBNDc0NTczQzM5NjBDMjIyODI1M0VERDY5MkQzNEE2MTE5N0IzRDczQjBCRjdGMjhGNDJDQjZFNzlGNkFEQjdFQThFRTY5N0MwREIsIDI4ODlERjMyNjJERTYxQzkzRDhBOUFDN0EzM0U5RUM4ODI2OEQ3NDQ3ODhBNEFERThBRDE5MTAyRTNGNjQ3NzI1QzYyMkY4MEFCNjU0Mjc1Q0RGNDUwMjM5MDI3RDlBNywgQzMzMEJCM0Q0QkQ1OTE0RkQ0MzFBQjIxNjEyREU0ODg5M0ExQTNCMjVCQ0MxRTlDMDNFOTI2MjgwQkJGRTVFNUQ4REQ3QTcxNDQ5NzA3QjExQjgxOEM2MDM1Q0IxRUQ5CisxMDIyNUFGMERBRUQ1RDA1QjRBQzIyNDY2Nzg2RkJDOTgzQjg3OURGMjM0QzcxQjg1QjEyM0U3RDdBREM4NjI0QjZERTQwOTI3QkZBQ0IzQzc0MjkxLCA4MDdFM0JGNTUwQjMyRTI3N0M4ODUzMzQ0MDY2NjcwOEE0MjlGRTM5RUREMUZEQkZFRTAyRkI4NTVBRDRCREJCQ0NGOTEwNDhGNzRBNjEwMjZDNDRGNTUwQkRDQjMwNUQsIEU3QjVBOTlBM0MyOTg1Nzg2NzZCNTdEMjFCOUZGNUMwQjJBNDk5QjE0OTQwMTY4NjBGMTRGNzgxRTIxRkM4ODNEQkQ2QTVENkY0N0UyRTYxNDNFMUJBMkNGMkUyMkY1OAorMzA2NzEwRDI5MEM4MTcxMTFFMDQ2NkQzMzY5NEYzNUM4QjI5NkQ5RDY5RTU1NTI5MTEzNkJCNzg3MDk1OTI2RTI0OUFDMUI3NzNGMDYxQjU1QzdCMywgRjdFRkRGOEVCQ0JENTYxNTZDQThENEE5RjU1Njg0ODE5MTk4MjY5ODBCNEY3RTY2N0MwMEZCODQzNjBCREM5OUUyNDYzQzdBNjE3QjZCODFGQTZCQTk1RTlFODhDMDk4LCAzMjdBMjk4QTFBMjMwNjA3NkMxQ0I3MDY0MkFCMUREMDlBMjY1MDJENDUwRDM3MEJFNkQ3OTc2NjUxODM5QTQ4M0YwMTVEOTA0MkY2OTA2RDU5NUZDNzVDODAwMDUwOTcKKzkxMzUzMjc3QjI1ODQ1MzM1QTBEMzQ3OUEzQkVEQTE1QTE3QzQ4RDgzREFGRkY3QjMzQTQzMjY5NTFDMEI3NEE2REQwNDUyNjVCRDEyNTIwMTU3MTksIENEOEFGQTJFODgzMzczQUIxNjQ3QUZENjREQzhBODBGNjFBMjAwM0IzQTRBQkRDMkI3NTc2MTk2NDc1RUExNEU0MzRBODc0Q0Y0NkE1OEY2ODM5NkI5MThCMTEwOTkxNSwgNUEzQkM0QjE5RkY4M0ExRjNDQ0Y1Mzk0NzVBOEE0QTBFNTBGOTA1NUUzQjM4MUQ2QTM2NkY0REUxRTVFMTVFN0M3ODJFRDI2RTE5MjE1OEUwREZGNTI5MzRDRUU2RkUzCisxQjM5Rjk3NjcxNzA4Q0Y5QTBFMjc5RDZDRUIzQzhFNDBFNDc0REE4OEI5MEZGRTcxOUFFQzk3M0JGNTQyMjVERjQ5NzBDRjczMTM3MzZGNjA0MDU0QiwgQjc3OEVFQkVGRjI3QkZFMzYxQjJDOTE5QTEyRUU0M0FGMTBERThBMEYwOUY3N0M2ODI5MTc5NDlDQjY4QUIxQTQ3QjhEOUMzQjQxNEQ0OTNBNDFGRERGRjA5NjBCMzc4LCBDQjcxMDMxRkRDODZERjdBQzE5QkQ2MEJDRUJGQjFCNjkzNEU2NjJGODNCNDEzMjZDODI0N0RGMjNGM0FEQkM4NTdBRDcxMDVFOUJFMzBEOTZGQkY3RjU0MzhDN0UxRDUKKzUxQURFQzYzNTQ1MUE2RUNFMkE3NkQ4NDZDMUI1QUFDMkFENUU4RjlBMkIyRkZCNTREMEM1QzVCM0RGQzY3MTlEREM1MjZFNTkzQTVBNEUyMEMwRkUxLCA3MTUwRjJEQkE3NzczOUY0MTc3QjY1NjQzMTZFMTJCNjMxNkNBNDJFRTEzNURFMjE0OTE4QzRBRjQ2OEMwN0FFQThBN0Y3Mzc4Njg5QkFFRkY0RDMzNEQwNEQ0MTg0NzksIEY1RDIxNUIwNzVERDk2QjVERjFDRUFFOUJGQjhDRDVCNzdDMUQ5Q0U4RjI4RTc4QTNCMDAwRkZCNzI0RDZGMUQzNkYxNUNDNkM0MTM4QkUwNTAzRkU0OTUwNEYxNEQ5CitGNTA5QzUyOUZDRjRGNEM2QTdGNjQ4OEQ0NDUyMTAwNDgwODFCQUVDRTgxOEZGMUZFNzI1MTUxMUI5RjUzNTREOTk0Rjc0QjBCQUYwRUVBNjI0MkZBMywgREM2MURCQUY3MUY0OEM0RkNGODk5NDBFMTg5NDlCOTJCOEI2REQyRUQ4NDU5NzcyN0ZDMTY3NkIyMUQxQTZGMkMzMTc5OTVBOUYzRkQ3RjM1QURCMEFBRTBGMTdGN0FFLCAzMzBDOTAzRjQxM0Y3ODAzMEMxMzAxQURFRjQ5MUNBNjJBNUVFRDQ2QTdCNkYzQUVEMkQwMTI0RkNDQUI3MDU2QzI1NTgyMTM5QTA1RUE5Q0EwNjkzMkEyNTdFNzY1OQorMkRGMUQ0RjdERjZERURFNTNGN0UyRDlBN0NDRjYzMDBEODE4NTMwQzZCODRBRkQ1RkI1NkYzRjM1MkRERjlGRThDQkVFNUUxMjMwRDJDQkYyNkM4RUU5LCBDQTc2NDQ3NUQzNUFDNEExNUVBREJCRjUzRUJEM0Q4Njk0QjFFMEE4MzI3OTNCRUNFN0NERUZDRkZBMTFFNzVBNURERjIzQ0EyNDMzQkMzREVEMjEzREMzNjRFNTBEMUMsIEYwRjY1NTlGQUMxMzExNzRCODg2RjJCRjExMTI3NTlGRDBBMjFGOUY5OTkxMDAxQUZBQTI4QzcyRDExQzYyODA3MTA3REVCNkYyNTZBMkUwRUE5MzUzMzMzODA2MDhGMworODlENTdFRTc5RTQ5QzlBRkJFN0E4OENGNzY2RTI5MDI4ODQ4RjkyNTQyOEUwRjgxRjIwNERCRDlGODk5RURGQkE2M0NCMUEzNjkyNzg2M0Q3NDVBQ0JCLCA0Mzg1QzBCOERDMDI0QzBFNEU4OTFGNTZDNTg5ODdBOERDNDRBOTJGNkYxQ0RFMTVGMzI3RDY2RUREM0EyMjQ4RDZBNzMzQTkxM0EwMTM5REJBODMzMjM1RTZBNDc2RDMsIEJEOEI2OUE1NkQ2ODhFOERERjJFNjk2RTM2M0YxQzExOUZBNEY5MTAyRjQwMTVFOTlFMzdDODIxREQ4MDkzOTg0RDE4ODhDREIzQTQ1MzA1RDJGMjVERERCRUYyRTBBNworMTlEODA3Q0I2REFERDVEMEYzQjZGOUE2RTYzNEE3QjA3OThEQUVCNkZDN0FBMkU4NUQ2MEU5MzhERTlDREM5RjJGMkI2MTRFQTNCNzY5MkI4NUQxMDYzMSwgRjI2RUVBOTY5NDk4MzE3MUQ3MEUzQTVBNEZCRjE3OEEwOEMxQzA4N0I1NDUyQkVGNTk0OTBGNjg4RDM5NzJGQThDRjA1QjlEQkI0REI1RkM5N0I3MUVGNDdFRkM3NzQ1LCBFMTREQ0QxRjZCMzM5MkRBM0UyRDM5QjkzRDkwNDI0MzUzOTMyMDY3NjQyMjhGQzJFMDdBNUEwQzlEOTU2NTVENUY1OTE1NTUxQUZDMzFGOEJERTA4NzNBMEQyRjRGNjIKKzREODgxNzYyNDkwOTgxNzJEQjI0RUNGNEIyOURGNzExNkNBOTBDMjRGNTZGRThCOTE4MjJCQkFBOUJENjk1REQ4RDgyMjNFQkVCMjYzQjgyOTE3MzEyOTMsIDQ2OUIxRDhBMjAxQ0I5QzYzRDkxNUJBNzZDNzc2QjA0REI2N0RFNEEzNDM3MDlGOEZDODRDM0E3NTY5NzU3QTE0QzczOEE4OUQxRTA5M0ZBQzI4RDg0RTgxMDk4QzIwOCwgNDU4NUJBQUZBNjM2MjYxQzVGRDhCNDE3Qjk4MTgzRThEQjRBNUZDMzFGMTVCOUYzNjA3QkFCNThBNURBQTRDREZEQUVBOUVFREIyQzg0MjNCNTNFRTQzOUQ2MzBFOUI4CitFODk4NDYyNkRCMUM4NDU4OTE2RUM2REUxN0Q5RTUzNDQ1RkIyNDZFRTA0RkJBMkI0ODY4MzJGRkQzODNDMTk4QTg4NjZCQzNDMTcyQjI4N0I0NTkzN0I5LCAyMjI0QTVCOEQwRTZERjVDMTQzMDNGNDBCQTNGRUM1MTEyMEQwNzhDQzlFMkQzRTA4NUZDMkUwMDJENzkzNDRCNTQzMkMwRDc4QzE3OUI1RDY0QjNEMjZDMjlFOTQzQUUsIEEwNTVDRjAyQTk2RTM3NTU5QTIxOTU5OUZCM0RFRDhENzUzREQ5QUY3RjJERDMwNzNENkQ2MERCMDA1OTMwNThDMTI0MzBCQUU5NjY4QjdGNUIxRjNDNzI0NzEyMTU4MQorMkI5QzhEMjc0OTE1NThEMDlCNDRDNTQ5QTQ3OERBRjlDRDFGMTZENENBMEVGMkU4MUQ5Mzg5OEZGN0E4QjQ0QzlGOTkzNDM0QjQ0NTgxNzk3MUQwQkE3MkIsIEU5N0Q3NjJDRjk4QkUzQkQxRDQ0MjFGQUMyRURCMjBGNEU4NEU2RDkzOEJGOTY5QUFCMDA1MTIzQUE2RkI0MDcxNjQwMTNDOUMzM0Q5OTgzRDExRDE0QkQ5MjJCNzkyOSwgMzE4NDJCMkJFN0I3Rjg2MDE4N0E2RDg5NTE1NjU2ODcyMjk2QTNFMTkwOTMzODY4QUQ2QjI3MDM1RjZCOEE1RkI3NzAxOTIzMjQzQTgwMkQ0RTk2MjVBMDIwOUY5Q0Y0Cis4MkQ1QTc3NURCNDAwQTcxRDFDRTRGRENFRDZBOTBFRDY3NUQ0NDdFNUUyQ0Q4Qjg1OEJBOUNBRkU2RkExQ0U1REVDQjlDOUUxQ0QwODQ2QzU1NzIyRjU4MSwgMjU5MTVDNTAwMDA3MzFDMUVFNTczRDE5NzdBNUI4Q0M3MjRGMDY2MzgzOEJBQkU2N0VFMTE5ODBCREMyNjE4QUUzODc4NzQ0MDNEQkZDMEQzQUM0RDBEQTRDQTA3OEE2LCBBM0I0OUJGRUM2NkM1RkNGQ0FGMkFDRUVFMjhBOEQwMUY0RDU3Mjk2QUI3MzBCNjUwRjQ4OENBMDNCQjNDOTBFNzU4QkY2NTU4REY1RDkxODM5MjBDRUMyRUY1QTFBN0QKKzE4ODgwRjY2MTkxQzAxRjU1NzU2QUVGOTZDODNGQjJDODM2MTdDRDdCMUE4NjhBMjkwQTJGRDYwRkI0RUU1NkIxOUM2MkQ1REE1NjcxOEQ0NTAwNTY4RTA4MywgNjg1ODJFMzkzMjAzMzY0MzExNTE1Njc4RkQ4Njc5QTE3NzhFNkVGMUQ2OUVEQkY5M0Y0NUVDQ0U2M0I2NDk4NTAxQUNBMUVGQUVGREFGNzQzM0IzQTNGRkI2MjA4Q0NFLCBEMzRGRUY0NjVFQkFFNzkxMkI3MDZFRTI3QjYyQkNCMjdEOUE0NDg4NkIzRkQ1MDJCQ0VFNjJGMDQzMzgzMzM1RDFBMTIwOUI1OTMyQ0RGOUVDNENCMzFCMEUxNTRFMjgKKzQ5OTgyRTMyNEI1NDA1RTAwNjA0MENFQzQ1OEJGMTg1OEEyNDc2ODcxNEY5MzlFN0IxRThGODIyRjFFQ0IwNDE0RDUyODgxOEYwMzU0QTdDRjAxMDNBQTE4OSwgRTMxOURGOEUzNDFEQTU5NjgzQzI4NDk3RThGMDExMTBBMDM2ODA1QTA1NDdBQzhGMDU1MEE1REMwQTk4QTMxNUMxOTY2NDQ1N0I1MTdGQzY4QkEzMUU0OThBNTkzRkRCLCBEMjhDNURDQjQ2NjQ4NjJGREVERjkwQzNDOUUxQzBFMTg3RDc5RjI5OTRGN0QxQjI0RTE0MzFENUQwMzdBNjlENjVFRjI4NUVBM0U2OTA0NzRCNkRCNDZGRTA2RjEwRkMKK0RDQzg4QTk2RTFGQzExQTAxMjBDMjZDNEQwQTNENDkwOUU2RDYzOTUzRUVCQURCNzE1QkFFODY4RDVDNjEwQzNFN0Y3OTg0QUQwOUZERjc2RDAzMEFGRTQ5QiwgRDkwNEE3MTJDQTNERTBBNzY1QkMxRTQzMjRENkQ1MDFCMUUzNEMwQzgyMjNEOEE1MUNEMTJCQUY5RjZFRjAzRjNEMDJCRTg4QUM1QTk2NDVDMUM5MUIxMzJFMkQ4RUY0LCAyNUY1NENERTg4N0E0REE0MEZFMjExNDFFNDMxQjBDNEQ0OTg1REJCN0ZFQUI0QjdGQjIwNzBBRDMwOUE3OEFBMjFEREFCNEJCMUEzNEJGQzRGMjlDNDdDNUYxQTlFNTAKKzI5NjU5OUZDNEE1RjQzNEUwMzYyNDc0NEU3MUVCN0RCMURCNDgyQUJGQkNDMzA5MjU0MTMwQjkzQTgxNTIzMjRCQjdFNkM4RTA3MURGOUU2NDcwOTIwRkFERDEsIEUxMDMwQ0Y4NDFFNUJFQTQ2MEEyQkIyQkQwNDE2MkNBQzU1NjI5QjI0MjREMDREQzBGNjUzRUVGMkQxMzlCRjg2RUE2RTg4NUE4QjdCRkEzMDExNEZBOTc4NzMzRkIyNiwgNkE0QUU5Qzk0NTQyN0UxQ0QzMEFDMkMyREI0Q0IwNzkzREM5QTFGQzMxQTU4N0VBRTFGQjg2REQ4MDBBMzc1OEI0QzQ0QzMwMTNGODE1NjkxMDE5REUxRUIzNDNCNzE2Cis3QzMwQ0RGNERGMURDOUVBMEEyNkQ1Q0VCNTVDMjc5MTU5MUQ4ODAzRjM2NDkxQjZGQzM5MjJCQUY4M0Y2OTZFMzI3QjQ1QUExNTU5RURCMkQ1MUI2MkYwOTczLCA1NTJBQzVDODcyNjMwNjE4QTJEQTcxRDkwRTA1QjgwRDcwNzI2MkFGRkQ4OUI3QkYxMzc5OTExQjQzQUUzMDNFRTQ3OTZGRDRDMTFEOTU3N0QyMEE3OEQ4RjhBMDc2NzAsIEM2RURBQkVCNTMyNUZBQjE5QjI3QUEyNjkyQ0JCNThBNEFGNTc2NDJDN0UzNTQzNUVFMUExMThBNjE4QzZGRjkyMTcxNUQ2MkZFODU0MDRBMzQxODc3RjY0MjlCRUIzMQorMTc0OTI2OURFOUQ1OTVEQkUxRTc0ODE2QzIwMTQ3NkI0MEI1ODk4MEJEQTJEQjUyNEY0QUI2ODMwRThCRTNDNEE5NzcxRDBGRTQwMERDOTE4N0Y1MjI4RDFDNTksIDIyNTQxQzE4MUJFRjMxOUJBNERFMEY1QTM4RTVFM0FBMTc4NjgzRDczNTk1OTRDOTgzNEE2OThCNDg4MkY4RUM5MzNCMEMyNTMwMzQwODYxQTY0NThFRDdBQTNFMzBFMSwgRjEwQkFEQUQ3MUJFMDlFMUI5RENGMEQ1NkMyMkNGNUMwQUUzMERCQzMyOTNCOTdDOUYwQzc2RjBBMjA5RjcyRjMzQ0E2OTlEMEUyNEZCQkE1MEY4RTczNDQwQzkyMEQwCis0NURCNzNEOUJEODBDMTkzQTVCNUQ4NDQ0NjAzRDY0MUMyMjA5QzgyMzhFODkxRjZFREUwMjM4OTJCQTNBQjRERkM2NTU3MkZBQzAyOTVCNDk3REY2N0E3NTUwQiwgNzAyQTYzQ0IwQjJGRjE1RjkzMTlEQThBNENEQTI1OUFGQTg0OTRDRjlGMTQ0N0I3NDNFQkE3RUUxM0JGNzE3NzU0RDBFN0QyMDdCODZGNEIxRDNFMTY3MzAyMkVEOUIsIEIyMUNFMTRGMzM2NTkwQzdCODUxMjI0RTVDMkU0ODA5MzI3OTIwMzRDREQ0OTQ2NEVBODVDOEFBQzZGRUJGMkJFNjhBN0I3QjdFRDI4MTY2RkU5OTc0MUQ5NDU2QTQ3RgorRDE5MjVCOEQzODgyNDRCQUYxMjE4OENDRDIwQjgyQzU0NjYxRDU4NkFBQjlCNUU0QzlBMDZBOUI4MkVCMDFFOUY1MzAwNThGMDQwN0MxMURDNzlFMzZGNUZGMjEsIEFBOTk4NUQ3QUYzRTJGQjkzNTAyOTUxMUNERUEwREIxNDRCM0Q4RDY3RTUyM0U5OEUyM0UyQUFDMzQ2OUI0NkRBRDQxNEI0NTIyREVCMzlFQzkwOTA3ODUxQzlEM0NENiwgNjUxMzQ5NEIxRTEwQUE4NUQ0REJGRTg5OTJGNjFBMTE0MEExRTdEMDY2REQwQzJFN0M1QzM0REQ4QUI2NDlEMzFBNTU1QTQxQ0QwNkRGQUM0RUQ5MkZBMzI1RkI3NDhBCisyNzRCNzEyQTdBOTg2Q0UzMEQzNjQ5QTY2NzYyMjg4NEZEMzI1ODA5NDAwMkQyMUFFNUNFMTNGRDI4OEMxMDVCRERGOTAxMEFEMEMxNzQzNTk1NkRBQTRFMUZENjMsIEU4QzgxRDFCQzFDM0ZGMkNDRUY2MEY1MDI5RDRBNjNCQ0QyMkZGNzYyMDMyQUM2NUIzMDJBMDQ0NUYxMUEyRUZDNjBFNDZCQ0UwMEQ3MTRFMEEyNDYyNzZFOTcwNjQyOCwgN0I1NTY1ODQwRkI5NUEyRDc2MzEzNDgzRTJEQ0RGNEIxN0YwRjM3QzZFNjdCOUE5OTg5Mzc3OTEzMjNBMzEwRDNFNzVDMzBGOEU0MDI3MzU0NEYwQUNFQkNBQUU0RjlBCis3NUUyNTM3RjZGQzk0NkE5MjdBMkRDRjMzNjI2Nzk4RUY3OTcwODFCQzAwODc2NTBCMTZBM0JGNzc5QTQzMTEzOTlFQjAzMjA3MjQ0NUNBMEMwNDhGRUVBNUY4MjksIERCRDdBQjVCQkE1QTVDRkJBQTdBMTQxNkJGMDY1QjA3QjdFMzMyNTc0MkFCOUJGRENCRjc4REUxMTFGRUFCQjlGMDQ1MzJGRTA2NjA0RDYwNTZDRjYxMzM2RUUxNzUwQiwgNjZBMzU1OUQzMThEMjY0REZFRTVERjc3Q0U1MjFBM0Y1Mzg1NzM4M0I4OTgwMDc1Nzg2NkQ3OEI2NDE3M0YxQzNGMjQyMDZEQ0I4OTA1RjVBQzBFODU5QUNCQjcxNTQ3CisxNjFBNkZBN0U0RjVCRDNGQjc2RTg5NkQ5QTI3MzZDQUNFNkM1MTg1MzQwMTk2MkYyMTQzRUIzRTY2Q0VDOTMzQUNEQzEwOTYxNTZDRDE1RTI0MERBRkNCRjFFODdCLCBGQTUzM0U4QUExRkMxMjAzQTNDOEQ4RTlBOTQwNUM3MTY5OUI3NUVBNzFDRTBCMTI0NkVDREVCMDAwQjFCQjgxMTdBMTM3N0VCQ0IyQTQzMUZCNjNGNEUwRDkwQ0UwNkMsIDIzQTQ4MEQ1QTRDNTI4QThCOUE4RDc5MEEwM0Q5RkU3NkQ5Q0Y4REEzQzUzNzBDODEwQjYyQTFDNkYyOEEwMTY5QjNFRjA5MzM0ODREQTY4NURDRTQwQ0M1RTJENjYwNworNDI0RjRFRjdBRUUxMzdCRjI2NEI5QzQ4Q0U3NUE0NjA2QjQ0RjQ4RjlDMDRDMjhENjNDQkMxQkIzNDZDNUI5QjA2OTQzMUMyNDA0Njc0MUE2QzI5MEY2M0Q1Qjk3MSwgOEJGNjZDMDVEQjU0NDhFNkJGNDgxMjg1QTE0RDM4QUNCMTg3NDBCQzI4RkQ4Rjc3QTJDQjMwNDlGODk0RjE0RjY1NjVBMEMyRTdEQTI5RTM4N0MxOTFCNUUzRTE5RDQzLCA2MzdDRUJBRUZBNDI1QTJDMjNFNjE2NzU4OUEwRDY4RERFMTlBQTQ2NUY1OUExRTA4QzQ2QTY0MzgzQTFBNDcwM0ZFMDUxMEFDQjUwNENDRjIxMjk0NzlFRUEzQUNFRQorQzZFREVDRTcwQ0EzQTczRDcyRTJENERBNkI2MEVEMjE0MUNFRERBRUQ0MEU0N0E4MkI2MzQ1MzE5RDQ1MTJEMTEzQkM5NTQ2QzBEMzVDNEY0NDdCMkUyQjgxMkM1MywgOUY3NzZGNDk0MkU5NjMzNjRCNTcxQ0ZFMEYyNzQzMDMwODY5QzAzQTU2RDM1RDBGMzkyOEY0M0VCMkQ5QTIxNzlBNkQzRDRGMkJBQ0RBRDk2RjMzMDRFRjdGQTk0MUE5LCA1QjBEMjcwRkQyQzlCREVDMjg3MTUxMEQ1NkI1Mzg2RDUyQjJCMDkxMUFBMTgwRUVCMDI3ODAyRTVBMjVBODg2NzRDM0NBMEE0MkMyMDRFNzM0MTE4NzdEQTYxMjgwNkQKKzI1NEM5QzZCNTI1RUFGNUI4NThBODdFOEY0MjIyQzc2M0M1NkM5OTBDN0MyQUQ2Rjg4MjI5Q0Y5NEQ3Q0YzODczM0IzNUJGRDQ0MjdBMTRFRENENzE4QTgyODM4NEY5LCBEQUZEQ0FFNEQ2QzQ3NTcxNkVDNDA1QzM0OEFDOUEyMzQzRDVENjdGOUIxMDA4MkI0RDNFMjY3NUJEODVFMzI3ODVENTM2QzEzQkVDNjA3RDQxNDEwQkFENjA5NzQyQTEsIDI4Mzc5MTBFOEE3QzhEM0FERDhCRkQ3MTRGRjU3MzA2MTQ2OThDNEQzMkI4QTk4MjhDNDJDMjg4NjlGOTAyNTREQkVGNDFBNUU0M0I3MUU3OEEyMDY5QUM4NUIwNTY2NgorNkZFNUQ1NDFGNzFDMEUxMjkwOUY5N0JBREM2Njg1NjJCNTA0NUNCMjU3NDgwODRFOTg2N0Q2RUJFODc2REE5NTlCMUExM0Y3Q0M3NkUzRUM5Njg1NDlGODc4QThFRUIsIEM0N0I0RDYzNTFDMzA1NDRCRTAyMDcwNkEzNzEzQjhDOUJENDhCRTQ0RkVDQUJERjEzNEI0NUFDNzA1QjdBQTVFMUQyRTBBNEM1Q0VDNDEzNTkxQTkzRDUxMzRBQTUwQiwgQzlDRjMxNDlBQjE2RkNEQTRDRUUzQkJCNzU3QUVEMzI0MDA3ODY5QzQ3ODE5NjU2RUVBNjQ3RUMxNkY4OTZDOTkxOUU3QzU4NjI0QkVFMzcxQzhENDA5N0EyMDRFNDJFCisxNEZCMTdGQzVFNTU0MkEzN0IxREVDNzMwOTUzMzkwMjgxRjBEMTYxNzA1RDgxOEVCQzkzNzg0QzNCOTY0OEZDMEQxNEUzQkU3NjU2NEFCQzVDMzhGRERFOTY5RkFDQzEsIDRENDY2REVDQTBFNUYyQzY2NEIxQzE3MDQ4NUQwNDM1Q0M5MTNCNENFRENCODkwNEU3RUM2ODAyNUM1RTI0RjU0MjUwRkY4RUJEMUFBREJBNTc1Q0FFNzk2QkEyMEUzMiwgQzFCNTM0NjdGOTE0RjdCRTA3NzlBNDRBRkM1MTczNUIyNkI2NDRBMUFCQUZGNzAyN0JGODdCRTExRkQ4MEI4MTZDQUVCMzNDNzM1QURDNTVEQkY0QzIxMTg2MDhCQTU4CiszRUYxNDdGNTFBRkZDN0VBNzE1OUM1NTkxQkY5QUIwNzg1RDI3NDI0NTExODg0QUMzNUJBNjhFNEIyQzJEQUY0MjczRUFCM0I2MzAyRTAzNTE0QUFGOTlCQzNERjA2NDMsIDE4NkYzNEY3RDQ1QUNCRUY3RjdGN0Y5M0M1Nzc1OEEyQTU3ODk4MUU5OTM5QUZBMjJBQUQxNDg3OTkwNUUzNjk0NzM3ODY3QkY3MzYzM0NGOUY3RTI1QzZBNTk4RkYyNCwgREQwQjFGNjgwMDVEMzU4ODQxOEQxM0U2OUQzNDNCMTA3MjJDOTYyODVBMTJCMTM5MDQ5QjhEM0UxNjQ0QzJGMTEwRDM2QkI3RjkxOUJDNDBERUI5OUVBRjQ0M0QzNDgyCitCQ0QzRDdERjUwRkY1N0JGNTQwRDUwMEI1M0VEMDExNjkxNzc1QzZDRjM0OThFMDRBMTJGM0FBRTE4NDg5MERDNzVCQzAxQjIyOTA4QTA5RjNFMDBFQ0QzNEI5RDEyQzksIDhGNkY2NEVBMjc1NUZEQTUxQzk5QTUwQjU3RDdGNDM4REEwNUExMTczMjI4ODRBOEY3Rjc5MjhCQTkyQzc4MzEwRUY1NzgwMDVCMUZDQzJGRkNGRkU3OUMwODAyQjJFNCwgRDMyMzAxQkMzM0I3QjE2N0VFQUI1NTJFMDVBMjBBRjY0RTg2RTY1OTg2RDU5NjFDOUU5RUJGNTZGNEQ3RjA1RDQyOEVCREFDRkFBMzA5MDdDNTBEMThFM0U3Rjc5MjcKK0VDQy01MjgKKzEsIEM2ODU4RTA2QjcwNDA0RTlDRDlFM0VDQjY2MjM5NUI0NDI5QzY0ODEzOTA1M0ZCNTIxRjgyOEFGNjA2QjREM0RCQUExNEI1RTc3RUZFNzU5MjhGRTFEQzEyN0EyRkZBOERFMzM0OEIzQzE4NTZBNDI5QkY5N0U3RTMxQzJFNUJENjYsIDExODM5Mjk2QTc4OUEzQkMwMDQ1QzhBNUZCNDJDN0QxQkQ5OThGNTQ0NDk1NzlCNDQ2ODE3QUZCRDE3MjczRTY2MkM5N0VFNzI5OTVFRjQyNjQwQzU1MEI5MDEzRkFEMDc2MTM1M0M3MDg2QTI3MkMyNDA4OEJFOTQ3NjlGRDE2NjUwCiszLCAxQTczRDM1MjQ0M0RFMjkxOTVERDkxRDZBNjRCNTk1OTQ3OUI1MkE2RTVCMTIzRDlBQjlFNUFEN0ExMTJEN0E4REQxQUQzRjE2NEEzQTQ4MzIwNTFEQTZCRDE2QjU5RkUyMUJBRUI0OTA4NjJDMzJFQTA1QTU5MTlEMkVERTM3QUQ3RCwgMTNFOUIwM0I5N0RGQTYyREREOTk3OUY4NkM2Q0FCODE0RjJGMTU1N0ZBODJBOUQwMzE3RDJGOEFCMUZBMzU1Q0VFQzJFMkRENENGOERDNTc1QjAyRDVBQ0VEMURFQzNDNzBDRjEwNUM5QkM5M0E1OTA0MjVGNTg4Q0ExRUU4NkMwRTUKKzksIDE1ODUzODlFMzU5RTFFMjE4MjZBMkY1QkYxNTcxNTZENDg4RUQzNDU0MUI5ODg3NDY5OTJDNEFCMTQ1QjhDNkI2NjU3NDI5RTEzOTYxMzREQTM1RjNDNTU2REY3MjVBMzE4RjRGNTBCQUJEODVDRDI4NjYxRjQ1NjI3OTY3Q0JFMjA3LCAyQTJFNjE4QzlBOEFFREYzOUYwQjU1NTU3QTI3QUU5MzhFMzA4OEE2NTRFRTFDRUJCNkM4MjVCQTI2M0REQjQ0NkUwRDY5RTU3NTYwNTdBQzg0MEZGNTZFQ0Y0QUJGRDg3RDczNkMyQUU5Mjg4ODBGMzQzQUEwRUE4NkI5QUQyQTRFCisxQiwgMTYwMzczRURGODIxOEY5QjZBNzYyQTRENEVCODg5RTY0NkY4NzM5NTM1RDBFNEY4NjJDMzNGMzUxODdFMTM1ODU0RDgwQjIxMjNEQTcxOUQ0ODM1MTM1M0FFREEwRDMxNjNDQjIxNTYwNDQ5MkVDNDU2ODM1NzY0MzAxNzAwMkQ2OEIsIEYxNTk3MDUwMDE0RENGRTFDNUU1ODI4NDAxQUMwNkEzRkE5RkQxOTNDNUNGNTJDM0JCNEE1NkY3OEUxQTFCMjIwMTFFRkE0OTFFRDkyRUJDNTQxM0I4NzRGNEE4QkI1NzJFNDYzRkZFNzA5RDQ1QUNCM0YzRTZBRUNBNUQ5MEI3NDAKKzUxLCAxRDFCQkEzODAyODlBNzcyNkJCQ0Q3RDc2RDZENjM0NjlDQzg0MkRFNDREMjY2NDZCQkM0NTM4MUZENzJCRTdFRTgxMDlGNjcxNzEyMjdCNUM5MjM1NzdGNkIwQTQ3MzE4NzI1NzVBMEIwMjlBN0IyNTFFNUEzMzk0MTYyOTlDOEFFMCwgMTcwM0FFRTBGN0FEODI0NENDMzVCRDY5RTkxQzA2NzBGM0U1NDFDOUNFNkUzNTI5QjkwMkE5ODBFOTMxNzJFQkM4QUZFQzAzNjg2MTZFMUUyM0IwNEI0RDVERkNBODM0M0VCOTNCMEM4ODcwRjdBNjY2MkVFMUIyMTYwQ0JCOTBGMDEKK0YzLCAxQ0IyNTMyMjdCMzc5NjUxNzQ2MTdENTU0MkZDMENBNUVCMTQyQjRCQ0I1MUJBRjJENjQ5NTAwOEJGMkM5MEJEOTMwNDNBNzM3N0E5MzdFMTA1MEI2QkIxMTdBODFDNDYxQTM0QjE0QzA4MzJBQjI2QTI3ODVENzY0NjJBQkRDOEIyQiwgMTJGREYzNUE5MzVBQjMwMDhFMDM3RDg0RjVCNjM3QzdBNzQ1RkIyMUEwMDg4NDgzNEM5ODA0QjRDRDNCQUM0OUM5QjFERTRBRjMxNUVCMzZFOTJFMUU0QTRBRUE4MzUxODU1RTcwQjBCQzRCQTg5MDRFQTNFNzRFMkE1RjJFRDE1RUMKKzJEOSwgMTg5NjA3QzE3OTNBRjM4MThEQTMyRkEyRjk0QTQ2OEJBNjlCM0VFNkVBQjgxOEI2OUY4ODkxMDE0OTQxNTVGOTUxNjc2NUE4RUE3NDQwQkUyOTMwMTc5RDAxNkI3REY2QkIwRDg5NzczQjA3MkNCRUJFQ0ZEQ0QxOTZBNTYxMjREQkMsIDIwRkZGMzJFRkVGOTJEOEEyRkY5OUUyOUMzNzI0Mzk5Q0ExQjBGQzk0MzBGNjcyQjVBODJGNzQ5NDc4N0U0RUYwREYwNzI3Q0FCOEI4MjI1MEIwQ0FCRTY5QUJGMzRDQkY0QjE5NEQwM0ZEOTlDRDg1QUNFQ0UwODNGMkIzNEU5REEKKzg4QiwgNEU1RUIxMDNCMTlCQkI4NEM4OTY0MUI3RTUwNzMwOERFREM1NjA2MEJGRjAzMzI1QUUwMDlBNDE0MkQxMTQzOEEzQjJFQTIyRkE4NzQzRDZCNEFEMkNFREIyRjA1NzhDOThGQjZGQTg1N0NFMzUyN0REM0I3NDYzMTY1MzAxMTZDMywgNzE2RjY4RjgxOTE2NTgwQTY0N0NDRjMwMzZGM0M4MTQwRDYwQTYzRDEwNUI5MUFEMDE3M0JDRjZGODRDRTBDQTFCREIxRDQwNDlCQjcyNjNCRTcyNEZDOTIwMjA4MDE0QkNGNzU0MDREMzMwMEMxQ0QyQ0FDQ0IwNzQ3ODMwOEFFCisxOUExLCAxRDJFRjQ2NTc3QjY2MTcwRDlFRjBGMUYxNDg2QzNFN0RFQjk4NUZFRTc2ODk4NTc1QjYzMDA0MkRFRUI1NEQ4QzNFOTM0RTZERjc3RkE3NjgxQ0FBMUFGQzdBN0MyMzA1M0U4NzA4NjkzMkY1NjFCRTlCMjVGRjcwMzE4QkM0OTVGMiwgMUIwRDEyRTc0RUI5OUE4RTE2RjBBRkEzQkI5MjhCNzVEMkIwM0UyODg5Rjg0RjNBQkJDQkFBNzcwMjcxOThENUI4RTJGNzJCNkJGMTY5MzdBRTcwOUMzMDI2Qzc0RDI2RjJCQUJFMzFDRTZFMDI5NDQzOTkyODI2MkQ2NkE0QUFDREMKKzRDRTMsIDUzMUM5QUJFNTE1NjNDN0M3NzlFODlCQjI0MDRFMDBCNDc4OTFERTNFNDY1Mjg2QjUxNzcyNzRCMTIyODVBRUQxNDkzNUZGQTgyMjk3MDVCM0JENTIzQzkzNDIxMjgyRUU0QzU0NDA1MEY0OUE3OTI4NUM2MUY4RjMxMUJERDBGQjcsIDIzQjY3MUEwNzA1OTA4ODdBRDMzODhEOTJBQjJGQTZBMDE5NkJBMDQ0MTg2Q0VBMjc5QkU5MzlDQzEzMDUzNzAyQkJGQ0JFNEE4Q0JDRjE2MkQ4MEREQTY3RTQ2RURFNTEzQjU3RTVCN0Q1MkZEQkUwNDBBOTFDNDk3QTJGMzVDRTgKK0U2QTksIDFFQzc2MDVDRDMzNjNCNTI0QTcwQzBCQzFBMjU4QTUzRkU4RjYxQTk4MkZBM0U4NjMzN0MyQjlBQURBNkMzNjgzNzE3OTgyQTk1NDZDRDFDQzAyRkNCMUYxRUI5Q0Q0NUQ5MURFOENBMjlFNjFFOEE4ODMyM0E2RTIzN0E2MkEyOEVDLCAxN0NFQzYwMkZBQTkxNjRBRTdEOEQzNDJGRDlCOEE0Nzg0OEQxNzgwRjkyQ0IwMEMyMjFFM0EzMjQyNERBQkNGODlFRTgwNUQxQkZDNjAyQkM2MTEwMDEyMzUyQTE1MTg1Q0M1NTEzMTE2RTM3MEI0NjA1N0E4REY2MUQ5QTYwRjNFOAorMkIzRkIsIENERDJGMEYzMDEyREYxOTBCQjI2MENDODcxRkM0MkE5RjE3OTc5QTMyOUQ2ODM1MDNFNTlFN0Q0Nzc2RDhGMTBGNjJDMzkwRTA0NUQ4NDdFN0ZBRjlBQTFDQzA3N0NEQUJBNkQ4N0Y0QjExMjU4ODZGMjVBRkM0RDYzMDkxOTlGNUEsIDQxNzkwM0EwNUMwMjEwNjhCMkZCQjlGMjAwOTMxN0RDMEI1MUQ4QTVBMUM4OUI5ODI0RDk5MDg5RDA5NThBRDQ4OEMxMDAxQkExNkU3NTg3M0FDQUMxN0UwQ0Y3MTE4NTY5MjkyNTVCNDBCOTNDQjJCOTVGQUY3N0FDM0M4RUJGN0EKKzgxQkYxLCAzRDg4MjVDRjA4RTJFRUMwRkNGMUJDMzkyRDcwMTlFRDQxN0U1RERDQTQ3NTQ2QjE0QTgyRjhEN0YyRURCOUQyREM3NzRDMEFDOUU5RjU0NzhGRjFDQUU4Q0NBRDAyRTAwQTI1QjhEODE3OUI4MTJEMTRGQkVCOTYyMTY5Mzk3MDA0LCBBQjE5RTc4MzYzM0E4OTgzNUY3Mzg5MTg0NjgxQTYwNUU2RDVFNEUzRTlCQkQ1NTc5MkUxRjA1QTFFQUI1QjBGM0Y3MkY3MzMzRTY1OUFDNUVFQkVEREIwRjZEM0U4MDkyMkMxOTQyN0NFNEUzOTFBQUFCOEY3MDk2MTNFRkFCODZGCisxODUzRDMsIDQyNUVGREJDMjg0QTA0Qjc5NTIxOTk4QkQ4MTk5QzlDMkNBOTc5QTMzQ0VENEQ3OEEyNzMyMEIwNEJDNDYwQUI1RjUwNEZBMkEzQjg1QjA5RDcwOUIxNjQ0MEJFODBEQTYzOTFGNDQ4QzEzNEMyRkE5OUVGNUU3RDZCMDMxMTg1MiwgNUIxNUIwQzlEQ0FDODhBMUUwREE1NzM5NDhEM0U2MzdBQzMzQjNENTJCNUMzNjVCNUY1NkFCRjAwMjYyNEZGNjhDQkM1NTRDMzc3MDZGMzNBRDAwNUNGMEQyRjA3MTIyQUQzQTM1QzhFODAzODlEQUZFQkI1REJBNDg5QTE0NzRFNworNDhGQjc5LCBGNDY2NjQ1OEU2MUU3NzdBMDFDNUNBMTk1QkQwQkM0OEMzQkRENUYyNzIxRjYyNEM0NDgwMzRDRUFBNTQ2MzhEODU3NEU1NkRGNTI2QTgxQ0NCQjQ2NTJCQTI0MzcxM0Y2NTlCMUVEQTkwQ0YyRDdBQjYyQkVGNTExQjY2NUY4NDNFLCAxOTQ1MEI5QkM4MDJEOTEwMzRFNTgwRjk1NjhFRjgwQjQ1REExRjg0QzFEQjFEMUQ1NTQwMEQzRDNDRURBRjY0Q0IwMTYwNkYzRDFFQTNDMDZBNTk3NUIwOUU5MTE3M0UxNTczQzkxMEY4NEE5ODcwOUVCQ0M5RUQxMzg2Njg3RDNGOQorREFGMjZCLCAxMzBBODUwMDJGOEI1REZBMDRFNkFFMjgzNTk0OTNBNjRDRUJBOUNDNkU2OUY3OTlGQTUwMkEzRTA3Q0M1MzREOUExRTdCMzc1OEI2QTNDNEY5NTA4OEUwM0FBMTYxOUQ3NzhDODMzRUREMUZCQTE5NkVFQjZBQjE5RkVEM0Q2NDQ4NiwgMTgyMzNDQUM0OTI5MEREODZGNENGQ0ZEQTc0QTIxN0UxNDE0OTdFRTZEM0VGQ0NCMUIzMkM0NjgwMkFBM0FCREIyQ0RGRDNDQUQxOTcwNTU4MEEyQkM1QzAzRDQyRjQ0NEFBOEI5RDk4QTUxNjM0RjNCNURGMDQ4QkRDMTdENjMzQ0EKKzI5MEQ3NDEsIDFBNTUzNjBBQjg2NjczQUYyOTRBNjI2NjE2QjkxOEVCNkJCOTE2RTQ1MTc5QUU0Q0I3MEY1OTgxRDcxQzk3NkJDREVFMTk3OUZCNzZFM0Y4QjA0QTYwRDE4MjNFNjk3RDdDMzcxNjhEMzRFQTAxOEYwOEE3OUNFOTAxNDE4MTg2RTI2LCBEM0FDQTYxQjQ4RDc5QkFGOUJGMDYwQTBFN0UxRDlEOTlDOEMxQ0JDM0RFN0Y4RTk3NkVDMDc4NkE4MDc1QUY0MDdDOUI0MkNDOTMxMEQxNkNCQjQ5M0NDQkM4RTgxNkY2Q0I2NTBDMUY4RkI1ODQzRTVCQjQzRUY3OUZBNjM5QjgyCis3QjI4NUMzLCAxNURBMEZBRDk3QzU2NjRBMDE0RUVBMjA2OEFGRUIyODU1MzY4MjUxMDhCQzM0QTYxRjA4N0ZBRjE3MUE5OUQzMzY3MUVBNDVGNjQ5QTVEQUY0OEYzNEVGODZEOTgwOEFEOEMxNUZCMTc4MEMxNTM5OUUxRTRCRUQwMDZFMTFEQTAzNSwgRjc4QjIxNzdEMThCNkM2QzVGQUU4RjBFRjE5QzhGQkVEQjQzNkE0MUUzNDk1QjhDNkQwRDdGQjFGQzcxNEU5NDZGQUQxM0IyQzFENDQwQzY2MjlDMkNFRjA3NjZFNUExNTkzMjFDNjk2NjAzQjU3NTQ4OUNEQjU0OTVFNjlCRDhBQworMTcxNzkxNDksIDFCQTFDNjg1NTkyQjdGNDJEMTZFNjFDODA5REFCMTFGMDUyRjIxNEJFOTA4MDA5QjI1MTAxRTM5RTUyRjQ0RkJGRDBEMjhFNjc5REY0QjgzMEY3NUE2M0ZDQzJFQkQ1MkFFMUY3NDM0NUUyODFEQ0FGRDNDOTNGNUY5RjkzOTc4OEJCLCBDNEE2OUFCMjY2QTg5QjNBREQ5NTI3ODBDOUI3NDRFRDlCRThGQUQxMzU1NzlBREJBNEUxOTg1ODcyRTE3QTQ0RUM2OEEzNEIxNzlFMkU1REQ2Qjc1OTAyMjBGNUQ3NjI5QUVEMEE1MTE4NEZERkVFRkJFNjk3NTQ1MjhGNDQxMzU5Cis0NTQ2QjNEQiwgMTJBQUM3OTA3Njc3RkZDMkIwRUE4MjhGOUI2MkNDMUQwNzgyOTUzMzJDODgyRkVGNEU4RDZEODNEOTc3NEM4NERERTNDRUFBODYzQjM2OTE2NzI4Q0UwODczQ0Y4Q0FBQkYxMTIyOTI3OTIyRUM3REQ3NDg1NzhERDE0MzBGNTQ5MzYsIDkzREVFMjM5QjZBOTY5QUM4Njk3RjJFNjZEQUY2RDg2REQzODI5NDlGRTM2QzYyODIzMkZBQUI3RjhBQ0U3NTZEMzVGODc3MEI4NEMwQ0Q5MTc0MDI2MzgwMUI4NkVDODVEODRBNzA3REZFODIzNjkyMERBQTBEQjYxREIwREEyMUIKK0NGRDQxQjkxLCAxQkE3QjE1REVDRTU1RjUyOUYxODYwNzA5RDgyNUI5NkEwREEyRjFCMTA2OTZFQTE0MTFCODNFMEIxQTYwQUI0ODQxOUQ2MzMyNTI1MTQwNzMzRjVBMzlFQzY2RTlBN0U2MDQxQ0IyOTFCQjRBNjUwRDI4RTEyRTYwOTAxMTUxRTc3OCwgMTEyNEU2NkU5ODIwMTMwNDVGQ0JGM0FBQTA0Q0YxNkU5MTlERDk1ODRBMEFEQjc1QjE1NTU2OUYwMzdGMDM3QzlFNDYzQjREQzc4MUJFNzBGQ0U2RTRGRDZEMDY0QTAzREFGQkFGQjJGMUIzQkY5OEFDMDgxQTU4RDk2NTVCRkUzRTEKKzI2RjdDNTJCMywgMUQ1NjA1MTUwQzlDNTVGMkFENDhENERDREY1N0Q3ODNDRDBGQjEwN0Y4OTlBQ0ZBODA0NDg0MkJEM0VFRkYwRTE0QzM1RkQ5RDZBRjhGNUM4Q0NFMzI2NTJBNDREMDQ4NUY2NEQzQkIyMjcyQjQ3OEE0MDUyQzA3Q0UwODM2NDVBQkEsIEJDNzE3OENBOEI5RjcwMjE0N0Q1MUQ5QzIyN0FCNEFCRUFEQzkxQ0IzMTVCRkI0RkEwNzQxQ0VBMTRBMUYwOTNDQkMxQzlGMDgwNzBFMDNFNUEzNjNBQ0NDRTM1MjZCMzk4QUQ3OUExOUI5ODkwN0M0RTgzRDJGMDIwQTYxNUQ4MzYKKzc0RTc0RjgxOSwgODgxQTE5MDlDMDVDMzhBQkIwQjM0RkI5NzNCMEU3RjJFNjdEQzg4N0UyN0IzQ0M1MjMzRjhCNDUzNzY1NkRCMEIxNzRGODVGMzQ1QjI2QjI2RjE2OTFBMUMxMzA4RTFFQThBM0NFRUE1OTU3NTY2QUMyOTkyM0U3NDMwNTAyN0IyQywgMUUyNjZCOURGMzdGNjU3ODkxOTE5NDQyQjdBQTNCQUQ3OTE4RDFBNUJFMTJDRjA0MDU3REFCOUYyQTA1NDhBNDQ3M0M2MTE0OTU1QUVEMEFDQzRFMTkzRTE4NUY3NjJGMTZDOEQxMzVDNDMwNTkwODNFRkRGOEZEMkUwNERDRDdCRjkKKzE1RUI1RUU4NEIsIDE4Njk3MTZEMDAxREFFQ0NGRDY3NjUxMzZEMjU2NjgwQTY4ODM3REM2OEYyQkQyMzVGMUExQUIyODY3OTFGODQ4ODM3MzEyMkM1MENDNTk4Q0UxMEI4Njg0NUJENzIyQUMwQUNCQUU5QURGQzNBNzVCNzc2MTdBRkI2NDgxQ0FENzI5LCA0MzZGRTJBQUM4MkYwRkU1MTM1NzNDNkYyNDg0RkQzMDJBNDZCM0Q0ODI3QkUzQjcxQTI2QTkwOTQ3OTQzNkM5QTU4RDc1MTBDQjRGQTk0MzVEQjg2RUZCMTcyMzBFREQxQ0FDQTI3NDQ1MTE1RTdCMDYxQTYyQTkyNDQ0NEQ0QjcKKzQxQzIxQ0I4RTEsIEZFMzgyNkJEODRBQjI4RTA3NUFFQjE0Nzc5OTlEQUYzMkQyMzhBOTVDQkZGNDQyQzA5QkQxQjVFRjk0NDdCQUU2Nzk4RjJEOEY2RkJFMEM3MUNDMThGMUVERDVBMDI1NEQ5NjZBNkFEODQ5NzdCODhENEM5NkVFNDhFQkQ0NTdBQjYsIDk4QzE2MDgzNjA1MjA4REIzRkIyMjAzODNCNDk5M0UxNUY1QzE1MEIzMTM4NjY0MkYwQkEwNUY4OTk3NzEzQTkyMzhFNTk5NjI4RTEyQkM1QjgzODNFNjU4MDYzMzk0QTdDMjBCMEQyNEM0RjdFRTUyOTRBQkE1OTZENTQ0NUYxQworQzU0NjU2MkFBMywgRUM2RjdFREEwRUI3MjRGQkJCQ0QxNjQyQjcxQkJEMEQ0MEY3RkUyRTQ3RDMxQzdEMDJBN0FFRjFCRjg5Q0VGQzE4NEIyQjZBRjdEQzhBQjVFRDA1MjAyMzlFQUVCOTQ5QkU2OUJENDY3RjBBQUE1NjM2OUEyMTEzRkZENTc5M0I3NiwgODQ2MDU4RTVGQjNDNkYyNTFCNjEwNEIwQ0ZCMzg3NENCMkRBODgwRjg4QzQ4QjRDNDU0QjE3OTNGMDY4M0QyMTk0NEVDRjQ1RDQyMUZFMTY1QkY0M0MxRjA3MUZFRjY4RUU4OTQzNENCN0Q1NDBENDk1MDA3NDc4NzcyNTVGNjBGMAorMjRGRDMwMjdGRTksIEIzODJDRkFGOTdEMDYyNEJEOUVCMjgwQ0VGOURCNTZCMDQ4NjE5NEE0Q0NCQUZDQkQ4NUFFRkM5NUExMkNCNjI0MTI2MjQ2RjAxRDE1NDBFQTIyRTk0Nzc5Q0E4MjVGRkExREFBNjE3OEFDMTMwNEY4NjQ3NUQ0QkFEQThEMzY3QTEsIDFGMkJBMjg5NjhGRUUxQjZEODdCMzQ1ODhBRDk2MzZFRDI2MTc5MUYyREExMjM4QzVEMDFBODA5QTAxQkREREZCQTcyQzMwNTI2NTQyQUVGOUFEODgzNzIyQkUzOTJEMDgzMzA5NzA1RTFEMEI3OUEzNkI3MzQxRTE2NUUzQzExQjU1Cis2RUY3OTA3N0ZCQiwgMTc4MUM3NkRDRjI3NTc0NDcwRTNERDI2MDA1OUJGOEE2ODNDN0IwMzVFRTQ3REM4OTBBMEYyMjU3NEQ1ODE2NTU5NEYzN0QyRDA3MjNDMzlDNzJBREExMEU1MUU1MDgxQzYwRERCRDE2N0FCNjIwQ0UzQ0QwODFCQzQ3MDVBNkQ4MzcsIDQ1Qjk2OUEwNTQ3ODRFNkYxM0UzRUUxNjE4MEUxQ0EwQThEMTgxNDIxRDk5Q0Y4ODkzQTUwMDA0MzU0NTZDQUJDMERDRDVEMjM2OUM0MjJEODcwMThCMTVBODFCQ0IzMzIwM0EyRTQ4RDM2NkQxNjJDQjVGNEE0RUVGMEI0QjA1NDYKKzE0Q0U2QjE2N0YzMSwgRDNGRUQyREYyNzg2MTlGQTdBMzg1OUZCNzBCODEzRDg2RTY3NjU3QkY0RTdFM0U5NUQwQThFN0IwMTg0MjdCRDVGMTA1QjU0QUY4RkI2QTcyRTdEOEFCOEJCRDgyOEU1RUUwNUE1MzVFOEJFMTgzODYxMTYzREIxNTM3NDk2RjlBQSwgRDgxNTc3OTNFNTFDRDFDNDVBRjIxN0FDNzczRUQwMzUwNjVDNUEzRTc4QUQ3QjE0ODkwQzY2RjI0MDMwOTFFN0NFMUREREQ5NTk3MDc5MzIwOUNERjkyMjc2NjhBN0JDNjIwODMyRDZBOENGOEZEMDc3ODdCMUM1RTYyQTFGRERGNQorM0U2QjQxNDM3RDkzLCAxMTEwQjE4N0M1M0FBMUIyNTkxMkI4MDRFMTAxMUExNkRDODZENTMyNjkxRkMyQzc0OUZCRDIwNzFDRTY4NzMyMjc5OEQ1MEZDN0YzREU2N0E2RjE1MEQ0Q0UwODEwNzdGODcyNTMyRkVGQTg3Q0RBOUE2NDA5MEE5RDk2NTQ4QUIyMywgMTM0NUE5N0MxNEY0NjlFNThDQjhCOTU5OENBQTFFNDMzNUYzQUVCOTE3NEY1N0JDOEQxMkFDQjc0OTk1QTg4MUE1RDQyMTVEODM0QzcxQ0JBM0I3RUFFRTg5OTBBQUUzMjRFOTY0QTFGRTk5RTRFQkRGMzlEMEUzMEIwMTNFMjM3NDAKK0JCNDFDM0NBNzhCOSwgN0VGNjVGQjMzMTQxRkMzQ0Q1NzdFODNDNkREMjRDOTk2MDQ2OUMxQkE5Rjg5MzlFODNDMzlFMEM1NjFBNjFDM0REQjc4QjY3MDlGRkZGMENGQjczMDBFNDE0OUQ2NTU1NEYxNTRENUFDOTQwMUM2RTY2NjNEMUIxOUIyNDVEQkU0MywgMTVFMDg0MUJGQzU2MjgxOUNGMjlGNjAzQjE2RjNCNEI2RUNCRkFFQTk4MEZBOTlDQUVCQjU4NjAyMDE4MkREMkFFM0FENDY5RDhFNDUwNkE2MjBBMjYxNzYwQTA4RTg5RDdBREZBNjMwMzY3NkREOUIyQTJDMzU2QTA3QTIxRTc1NTgKKzIzMUM1NEI1RjZBMkIsIDVDM0Y4Q0M1NUY0NDdBRjJFQjE4MzYwNUM3NEE4MkYzQzA1MDNGQzU5MEMyODZERTA4Mzc3REMxRjg0MTUwNjkyMTQ1REJFRURCOEQ5NERERDcwQTJFM0RCN0MxQjIwMDUyRDlBMzhBMTRCRjBFQUQ3NUUxQUI3RDk2QTU0MURDRDcsIEIyRTE5Qzg1REYyRkExQTZEMTg5QTZDNEY4Rjg2OTFFM0E1MzVFRUU4M0JDOTg2ODZBODBDNkZDNUU5NDFBRUJERjE4Nzk2NENCNjhGRTU3MjRGRTg0QjUxQjVCMTRBQkVBRjdCOUJCRjRFOTExMkUyOUEyRjAzRjgzQTUxRDY3NzcKKzY5NTRGRTIxRTNFODEsIDE4MUYxODBFQ0E1OTM4NUExQzFDRkQ1RDczRDNEMDkzM0UyMUMzNzE4RjVEMUVGQUVFMzhBODc3MzFCOUUzMzdDNjFENEMxREJBQzlGRDlDODE3QjFFMEQ3NDhFQzJCNTRCMzk2QzE0REFFNjc0RDUxRjFEMDA3QTMzMzFGMUVGNzZELCAxQTA0RDExRDlDRUYyNTc0MkUwNzMyQUZDNDgxRTFEODZFRDYxNzI1MkJCQkJDQjJCQjlFNjQ0MTE2N0VFQjlGNUVFNEI1Q0I5REUzMjBDMTI4NzNBMjBDRjNGOURBMzQ2NThCMzA1NEUxN0IzMDkzOTYxMkJBRTlGQUIzQTQ1NzJGOQorMTNCRkVGQTY1QUJCODMsIEYwOUFFQjQxNzQyNDNBMzlFNDExMjUxQzcyRkI4QTE0MUY1M0Y3OEY2NDM3QTkyRDlGODYwRTc3NzNCOEZBMjU4MUQ5QjkyNUVDNUFEMUE1MjNBRTU5MDVGNzQxMzc0NUY1MkE3RDgxNTlCREExQzY5NjgyOUYyNTFBQzJDODdENTEsIDFGRUNFNzE2RjQ3QjNDRjc3RjJDODU2NEZEMEVCMTFDODcwNTYzNUYzMUE5QjlGNDU2RkFEN0Y3NDE2RDJBMjFDQzU5QUFEOEUzQTczNDBGMTA5NzE2NEU0NjcyMjRFNzU1M0E3QzgxQTI3OTE4N0IwOEJEODc5NzA4MDMzNENCNjQyCiszQjNGQ0VGMzEwMzI4OSwgQTQ4NDlGRkJDNzE0MjU3MEUwOTYzOTdFMTYzODFDNDVGQ0U5MEMzOTQwRjVDNTA2QTZEQzQzNjNEMUE4NDkxQTEzMzU3QUJFMzMwQkNFNkE5NzY0QjhDQzUxN0QwMzAzODA0NjQ4MUZDRjE4QTUwM0M1RDhENUJCMDQ3MzExQzgxNiwgNjM5RkIxMjA0MTcyNTZCQjNDRTFENTVDNUY1Nzk3RDNBOUJBMjFFOUUyQkVBNDE1NTM2RUY2NTQ4QzIyMTRFODBEM0Q4MTYyMDcwMkU3RUFCODQ4ODAxQTQwOEVGNkJDOUQ0OEM0Q0U5MEZDNjhDODA1NjYzMDVEODg4MzVFNjQxNAorQjFCRjZDRDkzMDk3OUIsIDEyQzA4MzhFRDAxMDFFQTA0QzVBRjIxQjA5QzJEQTRCM0ZDRThEQjAwNjdGQzQyQUJBMUZCRjMxOUNERUJGMzNBMzg0QkE5NDA3QTU1MEMyMjU3MkZDRDQxMjA0QjRGRjAxRDY1RTI5QjlFODc1OTcwQ0JFQkJDOEU2NTA1ODQ5NzgzLCAxQTJEODYzMzE5RTNBRUNGMjBDM0U5RDZGNjA2MjRBODczNjExNzdBNjk2RDc3QzU1OUMzRUYxNjYyNDBDNkI4NDlBOTg2RDJCQjUyMTRBRkIzQzFFRjVEQjYwQ0E1RjIyQTRERDkxQjAyNjBFRkRCQ0Q5NDc1MzZENjM0RDZFMTdBRQorMjE1M0U0NjhCOTFDNkQxLCA1NEIxMzg4MTU5MTcwQzBDN0M0QTZBREQ1RkM0MUM3NEZCQjFFREYzNTVFQ0QxRDg3MkY5RTk1ODJBMDBEMzIwRDBBOTIwNUZEMjY3M0QzQTA5RkZGQUY1OEM5NkZBQzY1NTI3RkU1Nzk2RkFDNzk2MzcxRDgxNTAyQjkzRkU0NTVGLCBGQUQ4NEVFMEZCRjgyM0E1NTdCOENBMTdCM0ZFQjc5RUI1MEI2MzFDRUJEN0M0RTQzQTMzNjJGMzZEQUE4OUFFN0FBNDRFNDk0NTlERjM0MzIxRjdBQzlBRkFBQkZDNjg2QTAwQkYyRDc4MzkwOTY1M0IzQkRBQzc1OTNFOEU5RTAxCis2M0ZCQUQzQTJCNTU0NzMsIDFERDY2NkEwNTFCQkFENUU2RUI5Njg4M0E1NUE5REQ3N0U2M0MyMDFBQjFBMTQzNTEyQjc3NDA3NkQwQzQwQUI0RjAzMDhENjU2NENCNjNENzNDREQ4MURCNDYyRkIzQzE3QTU3QkQzM0UzQjI2RDdFQjk2QkMyREJCRkRFOTZCMjYwLCA1MDg5MzYwMkJDMUVDNkYyOTRCNUVDRDM5Q0U5RDE4NDA3MzlDMDk2QUM3QzFEOEMxRTQ0NTNGQTFCQUVERDBCMTg2NTVGRjcyNUU2NjUzRkRFMThFQjhGQkI2RjRGNjMzMzVGRjJERDY5QUU5OEYxNzFEQ0ZCRjE0NkI4NkJBMDgKKzEyQkYzMDdBRTgxRkZENTksIDFERTBFOUYzRTAzNUUzRjdENTY0QzE4OTM5N0MyMTgzMkFERTI5Rjg1RUM4RkM5QjFEMDA4ODcxRDZCNEVFQkM4NEQzNThDNzA0Q0I0RjdFOUQxMkI5MDlENDU4RTIxOEU5QTdBOENGQkYxRDJDNDA0NEI2MDM0RUJCQThDNDc3MjE2LCAxMEIyRUNFQUE2OUY1Rjg5QUM0QTdCOTBFQzVBMEQ4RDQzNjEzRjhFMjgxQTYzRTA3MjdFNUIwODIzMDY4OTE0MkMzQTRCQjgyNkY4NjAxQ0JGQURENjI4MkVDMjkyOTY2OEVFRTBCOTc5OTVBQzc5NkUxMzM1QUMzMkMxQThENDE5CiszODNEOTE3MEI4NUZGODBCLCAxMThBOEEwQjk4QTI5OUY1RkZDN0NCREU1RDg5RkZCOEFEN0MyNDgzMkRFMDgzMDIyREFENDgxNEYzQzdBNzM5NTlGNzdCNkRFODA3RjFEQjE4NzlEQTFCQTlCQjU0N0RCMzhCRUJGODI3MDdENkE3RTY2RjU4NkIyMDUyREFDNzdCQSwgQUREMEYxQjhEQkJGRUFEMzVGRDdDNEE5RjNGOEQyMDc2RkU0MkJEOTE3NDA5MTVCNzZEMDkwRkQzMUY4QUQzMzY1RTVBMDI4QUQyMDA4MUVCNzhCNTI2QUQzNkQ0NjMyMUFBQjJGRURDNjhGMEVBMzk2MUI2OTlDQTAxNUI0MTJBNgorQThCOEI0NTIyOTFGRTgyMSwgQzIzRkM0QjU2QzgxNjc1N0FDREJDM0Y1M0MyMUNENjdGNjYwREVFMjNBMDZBOTVEOEM4RUY3NTFGMDA2MDk1MUQzNDM3ODBGQjU3NkFCMDdDREE2QjJGNjg5MDBENkU5N0M2ODEzRThFM0JGNDBCM0QwQkFEODA5MDk4NzIyMjhFNiwgMTlBQUJGRUI3QzQyOTVBNTYxOUM1NTkwRjIwOURDNzJDOTU3NjU0MDU4MTA0RTJCMEFCNDcxNjUwNUM0NzZDRjIyMUU1NDFFMDI2NDM0ODI4NTk2MUQzQUNCQjNCMTQ4OTkzQTA2NTc4REM5NEQ3Q0RDOTc5M0M3QzJGQzg3MTRCQTkKKzFGQTJBMUNGNjdCNUZCODYzLCAxRkQ3MjMyQTI4QTRBMzcyMzhDMDgwNzUzRTZGRUJEQTg5QTE0QzlDNDQyMjRENzdFOEU4OTE4N0MzOTEyRUFBQUQ1OUVBQzU1NDIwMTU4QjAyQzEyOTBGNjY1RjdERjRCQTY2RDAyQTgyQkIzNzlCREJCQUFCQzQzMTVCMURCM0JBOCwgMTkwOUFDNDMwRkM0QTU1M0RENzI4NTAxOUUwRDM2MjcwNjJBNkI0MUQ4QUFFREFGMEI5MDdFMkJFNjg4ODdBNTY4RDcyOTg3OTVBMEM5NDcwQUJGRDZBREQyOUU2MkFDM0I2OTA3NzRFRjdCMTI5MUEwNUM2MUQwREJCNDdCNzJFOEMKKzVFRTdFNTZFMzcyMUYyOTI5LCAxRUY2NTk0Rjk0NjU0ODY5QjRFQkZBOTVERkJCNzBCOUM3MzU1MDVENDU4MzNFMTdGNkRERkY2QjAyQjFDNTYwQ0U4RUU3RjRFMjVGN0MxQTU5QzE2N0Q2RjM5NTczQTlBNDgwOEJENTU1QzhFOEFEQUU3QUM5Njc4RERGNURGRTZFMiwgMUE0Nzk4N0JBNDBDNDNENkE5M0U1RkVDQjAzMDQ5NzNEMkVDOEUyNzk3MjUyNEUzRTk1RkY3RUIzRTE4NTc5ODhDMUQzN0NFNkNEOUQ3RTU5MDg5MTk4NjlCOEExNDBGRTc4MENGNEVBODAzRkI5MTI0RTBCRTEyRTE5NjRCNkI5RDQKKzExQ0I3QjA0QUE1NjVEN0I3QiwgRDI1NjM3RkUwM0VGNEZGOUE3MUJEMDU5NEVBNTJDQkVCRjRGMTZCNTZFODJDNTY2NTMwQjBEMUM3MDU2RUMxOTA5OUVDMTQ4MDAxOENEMTQ0RDlDOTE0MjZCQzAyMjcxNUJDQjE5MEQ5QkJEQjVBQzE2MDVCOEExMDJBMUUyRjYzRCwgNThCQjc5QzE2QzEwRDJGQjIzN0VGNTVCQjM0MDFCNEI5RDlGQ0NCREVGMzY4M0MyRjU0MzFENDYxNEVERUFDMUZFMjlEREQyM0Q1OEREODE5RjJFRDY0RDlFNkZFOTVGMUFGREMzQzE3RjcwRTMyRDE1NkI0MTZFNjMwOEY4QkI1OAorMzU2MjcxMERGRjAzMTg3MjcxLCBCNjc4ODg1RENCRTU1MkUwOUYyQzJCOUNDRDA0MEE3NkJFNzNEMTAxQ0RGRjEyQzFGMzg0MjdGMEI1NjNGMjIxMzY2MkQyODFFREZERDA1MThFOTM4NzE0OTBEM0MzMjIxNTJCOEI5OUZFMTU2QzA3MkFENDhBNkYyNDZGQ0VBNDNELCBEOTgxNzJDRDEwOTQ3MzZBQUE5NDdDQkIyMkE0QjlDN0NGRTgyMDM3QjgxNkFCQkNDNzBBQTIwQjI2QjI3ODFBQUZEM0I4QkI1OTcxNDBFRjQxNzQwNUFGNzI2Rjg1MjE5MThBN0IxNDUzNzQ4MEI3ODhEREY3RkFCRDUzNUI0RUM0CitBMDI3NTMyOUZEMDk0OTU3NTMsIDEwRjhDNTdBQ0Y0NTM1NUVEMkMzOEU0MEJDQUQ5QkVCRDIwMjBDRTk5RDJGNDQ1QkJEMUIyQTVDMkU5RERDOERFMDBBNkJGQjUxQjg1MzU1MjA5RTgwMjMzMDc1NTEwMTM0RThDNDQ1NzZGQzNGMzNDOTM5MDU2MkZGMjE1OURFMDU4LCA1MkNCMUNENkYxQUM4NDI1MkI1QTY5QUY1MTY4RTAwQzI5OUMzNTk0NDBDQzhFMUJGMDNDNDlCODZDRTg4Nzk0RjY0REY4OTU2M0Q5NzlGNjhBMTY2QTA3OUE3RkIwMUNGMTE4QjQ2NjY1QkZFOUMyMDgyRjU3NjE0RDlCNDhGMTYzCisxRTA3NUY5N0RGNzFCREMwNUY5LCA0NUZEMjUwMEMxNzQ0QTBEQkI5QTI4QTgzMkZBRUMzQUU1NjhBOEU3N0U0QUUzODVGQ0RGNDU4OTBGRjgyNkZBMTY2MDAxOEMyNDZFNTFGQ0RBNkNFMEFEN0U3QkQxQzVCOUQ1ODY0OTVEMUQ2MUUxQUUxRENEQ0QyRjg2M0EyMzA1LCBGQzZCNjhFMDFBRDUyODU1NTIyREZCNDQwQTVDNDYxNzFGNjkwNDdDMTY0RTU1Q0E2RUJBRkRBNTkwODE1NUIxNjY2NTJDNDg3QjQwMjRENUI0Njg3Rjk3M0Q5MEZBMUY5REQzRjQzMzQyMzU4M0I0RUIxQjE4NEMwRTc1M0Q3NkY5Cis1QTE2MUVDNzlFNTUzOTQxMUVCLCAxNDk2RDMyMTg5N0IzODY5NjgwREIwRUY5RjAwMzY4NzVCMjFGMjdCNzNFMjQ2Mzc3QURCQjgwMTY0QTBDOEY3QUVENTU3MkRBRjEyNjc5REZEQTAzMDFCNTBDN0ZBNTBFNzlDQjQxMDE0M0I3RTk1MDUxQUJENTJCM0RGNzk0NEZBMCwgMTJFMzMzMkI0OEFBMTFFMzEwODYwNDBFN0I0NjY5RjYyOEYxN0JBMzMzQzY2RTVCNEYwNjAyQzkzNDhGRDVCNTkzMzNGMjY2QTE3RTdGODE4NTM4N0U0QjFCMTc5OTc1OUQ1MURDMDE3ODExQjRFOUZEMzdBNTA2Rjg2NTZEMzgxMEUKKzEwRTQyNUM1NkRBRkZBQkMzNUMxLCBBQTgyMTg3MkVFODgyNzlCNzQ5ODg0NjZDNDgwNDM4NDQ3QjBCOTFCODY2MEYxQzc0MjdFMkEyM0NDNjYwMDhFMjlCNUQ5QUU5OTlDMjAwMjM3QzM4MDAzNEU1Q0VDNjJDNjAyOERCMEI5ODY0NjVFRTAxRUYyOTlGQTQwNTFEMDYsIDQ3ODcxRTdGQzQxQTQ1MjAzMDMwOTFFNzA3N0E4MjAzNTFBNkFEREI5QjU1Rjc1REEzOUU2QzU2NDA0RUIzODk3QkVBNTlEOUJBOTMzRTY0QTQzNEVDQjAxMDI1NkUzM0I1NjQzMDNCMjM0QThCMThBQ0VCREM5MDUwOTA5MjI4QTcKKzMyQUM3MTUwNDkwRkYwMzRBMTQzLCBBRUZERUYzRTYyNDQ0N0U4Nzc4OUIzN0I5QjM1NUI1MUVEMzgyRjYyQUYyQkI5QjAxNzIyQzNEMTEwRkI4NjUzMjhBRTU5NzNDRTkyMEU1QkNGRUQxNEU2RTZGRjMzNjlGNTlGMEUwQjBEQzhDMjU5NUI5N0YzMDkzODQyQkZEQTg5LCAxMUMxNUYxNjYyODJGNjkyMTc3QTgwMjVBQ0FBMUUyN0M2Q0FBNzcxNTIzNDAwNjM0RTA4M0RERjAzNjIyRTZBQTBGRTMyQzk3QUNEODBGNzRBN0FFQTgzRTNDMUM0NjYyMDQ1NEYxOURDNDRGNjk1NjkyQ0ZGOEM5QjU5MjRFRUE1Cis5ODA1NTNGMERCMkZEMDlERTNDOSwgODJDRURFOThGREVBMDVFRTgxNEE3RUU4NkY3M0VCNUQxOTZGQTA1MjlDOTU4RjhBQ0M1REM2NUVBODU2NkIwRDZBN0EwNjlDOTA2ODAzQzgxMjc3NEQ5MkVBMTk2NDAzMzI2RjVDQ0Q4NEE2RTA3RUI1RENBNDlEODQ1NzAxNzk3MSwgODAyMUVDQjZDQTcyRkFEMDZCNjlBMDk2MzI0NUMyNkM5RDU3ODJBQ0IyODY5OEUzQThBREUxRERBRDIwQzBBM0ZCMEVEOTBFQUQ0QTdDRjBBNTMzQUY1MDg4ODQzNThBNkY3MDlGMzREOTI0NEJBQUM0MEZGRDQ0QjZCMTdFRjAwRgorMUM4MEZGQkQyOTE4RjcxRDlBQjVCLCAxMDc5RTgyMkVGNUI0MENGODA1MDIxNEEyQUUxNkYyNEYxMTVCQjk4QzM3OUQxRDk3MThFQUEzM0VDOUY4RkE5NEMwNUMwMTdDQTU5MTE3RDJBQTUyMTA5ODJENTc5ODg5QzY3NUQ2MTI0MERGQTNDNzA2MEM4NTczMERFQjM2Q0FCRSwgMTMzOTI0RjY3NDdGNjYxMUExRUU2NkIyRTZGQ0U0OTFFRTE4QTZCRjExREQ2QzU2Qjk1QUU1RTJBOTZEM0REQzlGMjJDMEMzQ0ZFRUUxODI0OUE1RDgwNzhBNzg1RDg1QTI3MUIwRjhBNkRBQzY2QzQ0MEJDQ0U2QTRERTMyMEFFNzgKKzU1ODJGRjM3N0I0QUU1NThEMDIxMSwgNDY0QzdGMEJCMTFDNEVGQTMwOTIyMUJEOUY2MTdGQjVDMUQyODZBRkUxQUIxQ0YwMUI4RkU3MTMxNTZGQjk1NTY1OTJEREYxRkM2N0ZENzJDMzgyNDE0Q0I0MzY2RTVFMTdBODQ4OTI4RDhEQUFENDhEMUI5RDU4RjQxMDg1ODQ2MCwgNDlENzU3RjRCOUQ1OTkzRTBFNzUxNkFGNDVERTdFRkQ3NkU2RDQzM0I3QjczRjkwRjY2OUVEMDA4NEM0NTZGOTE4MUU2OTI1QkNGNjIwMzZCOUE5Q0M5RTI4MzZCOEEzRjkxQ0E0RTU0NjRERTc0OTM5MkM0RDE1OUY2ODFDRTZGMgorMTAwODhGREE2NzFFMEIwMEE3MDYzMywgMTQzOTVDNUY4RkVDNEJFMDYxMUExMzIwOEZBMEE1MTg4NEI5QjY0MTM0RDBENDkwRENEM0UyMjY4MThEQjI1RjYwQkZERkNBQTAzOERFNUVCRUVBMjYxODMyNDUwRDg1NzM2QUQxRjVBMzUzRTAzMjRBOTA1QjAwNEYxMTc1NTY1RjIsIDFCOTlGNEFFQ0Y5QzE1QjFEMDkxOTU4NDA0MDBDQUU1NjdEMTQxQTA2ODE0MERDQzA4RUYxMUJFQzcyNTlCMTM1MThGRjY3ODYzNTREMDk4NTlBMDREMTE3RTk0RTc2NTkyOTE4QzIxRjc4MTAxMDM1RjM5MDYyMzJFMTY0MDE5REQxCiszMDE5QUY4RjM1NUEyMTAxRjUxMjk5LCAxREVERUIzNTVERkIyNUMwNzgxQkY1QjhEOURFODhDOURBQjU2REI5OThCQzVDNkIwNjFBQUVEOThFRTk1MTMyMTczRTgxRkExNTE1QUE4NTQwMTUwRTFCNkJCODBCQjY5NjgyMzgxMEEwRjhBRDE3QUE0MUVGNkZFMzc4NkM5MTA2MywgMTE1NzVBQzFBMzZBMTc0RkM5MTAzRjIyRDk5N0M2N0M3Njg3OTQxMDkzQTIyRTgzRDA0RDg4OUEwRTRDNDIyOEZEMTNCMDFBMzhEQUIxNUNDRDdCNDlFMjE5QTY2OTczMzlDODU2RjcyQkM5OTg3MEJCRDVFQzJEQTAyQzVFNTA4MzkKKzkwNEQwRUFEQTAwRTYzMDVERjM3Q0IsIDE2RjU4NjFFNzBGMjBBMUY4MDkwODUyNTA1OEIxNzY5NkExMTE4NUY2NTQ0Qzc4RDRGMzAyNTg4MTZCMkI1REVDQzdFMjZCMzMzRDMxRTI5RENCMjZFN0IxNTVEMzQ2NTZCQUVGNUM5RDlDOUFDQjMyQzVBRjBDMDU3MUJBODYyN0Y0LCAxRkUzQUE5NUNBRTZEMkRFN0ExQ0NDREYyOEYyNDlGQkFENTA3Q0MwMzUzM0M5OTJBMjkxNDI5QUVFMENFMUVCODM5NkY0Rjk2MDY4NkNBNjM1MUM4ODNFNUE5MzYyOEJDMjhEQkRFREJDOUNEQjg5RDkyQUJCNkY0REE2RDczNkM0NQorMUIwRTcyQzA4RTAyQjI5MTE5REE3NjEsIDRFNDVGREUwRkZFNjRCODY4MTgxNDZGOTI3ODNEMUU5NjdDOEM0QkRDREE0NEU4OTI3RDcyRjI2OUFGRjVGNkRGOEY0QkFENkNFM0IyQTcyMkU1QTFEREQ4QUZDMDQ4QzNEN0NGMDJEQTNCNEM3MTU1NkQ2RjJGODJDMjA3MDQ5QTUsIDEyNTU1NkFEMzI5NTBCQUFCNEMzNzY3NjgxNUY0OThGQjI3MEEyOTJFQUEzQzc2NjlBMEQxMzYxNDc3MkM4REJCMDUyQzZFQTlFNzUzRTU4RTlDNjVGMEQ4QzRCNTRBNThDQjFGMjVFMEM0REMxNjdCNEFDMDk0MkJGMUNDNUYwQzlBCis1MTJCNTg0MUFBMDgxN0IzNEQ4RjYyMywgMUVGMjU1MjU5MTJGMjhCQzZGMkIzMjFDMTNCN0QyNzIzN0FERTU4NTE0MzFBMTkwQzYxOTAxNURDMzU3MTM2MEIzRTc2NDUyQThBOTA0NTMyNTEyRjFGMjEwNTA5RkE4RUFDMkQ4RTlGRDNCNkI4MTA1MEMyMDI2RTYzQ0NCQ0JENzgsIDdBRkI4RDQyQkI1QjU2QzczQjM4QTQzMDE1MzU0RTg1RDlFNjU0ODIxRTM3NTZDMkY1N0ZFMUIzMjA2RjhCREM2OTNFRTk2QzExNjZCMjM3QzkwQ0U5RTlCNjVBNDlGMUQyQ0FFNEJDNEI5QTEwQUM5NEVBMEI1MDVCQjIzM0NFNEUKK0YzODIwOEM0RkUxODQ3MTlFOEFFMjY5LCBGMzNENzg0MzEzQjlFRkZGMDk3Qzg4REZBODdFRDgwQjFCRkY1NjM0MDgzMkI1QkRBQjM1RTBCRUUxRDczQkFGMTgzRDQ1NUM5NzdCQTY0M0U0MkIyMTg0MDBGQzVCMzg5QjFDQjlBNTVCOUZBRTFEMkY2NkMyNjFFRTI0QjU0NTY3LCBGRjFENkNFRjhEMEU2QUFEOTZENUM5Q0E4MjcwNTQ5MzdDRjQwQUQyRjY4RkUyNzc0MzZFNDk2NkQwNEI2NEZBMDcxQTU2QjA1OENBMzg4MDdDNjFDNTUzM0M5RTY1MjVDMkZCMDIyNjZCRTIyMkE1QUNERkIwNTlDQ0JFRDhFMjU1CisyREE4NjFBNEVGQTQ4RDU0REJBMEE3M0IsIDFFRDZDMkMzQjQ1NDZCNDFERUMwMDA5NTk0MEM3QThCNjI5QzVDMDcwM0YxNTgzMTA5NjI0MDE3NEQwQTE4QTk0Mzc2NTYxNTM3QzU3Rjg0ODMzMTdCMjE1QjAwRDQyMkQwNEE3QzQ3OTAzNTA5M0NENTgwRjFEQkZFODFCQkNBQUZELCAxQjRBRDNCN0NEQ0VCOEMzNEZEN0QzNUZEMDg3RDU3MzdBODQ2RDdGODJDOUMzRTgxRDQyQjM1RDA4OUUwMEFBQjYxOTdGNzk1NkE0NzU3MjdGNUZFMjg5OUVCMTk2NjM2MDlDOUVCRDgzNUM0RTA2NkJEQzRERTg4MzAxMzg0MzdGMAorODhGOTI0RUVDRUVEQTdGRTkyRTFGNUIxLCAxRjUxMENGMTJBRTU1OTU1OUI2RDU2QTdDNENEMTJCMkQ2RjRFOUIyMTFBQzgwMzQ3QkUyOEM1NDQ1NjAzOTRFMEI3N0QxODkwOTc1MTQyN0YwRDcyNzU3Qzk1QjIyODhBRDUzQjA0RUIwNEMxREU4MjNGRkI2NTk5Q0MxMjkxMDY0NywgMUM4MjUzMDhDNDUzRTRCRTFCQzI1QTQ3MEFBQTI2MkNGMjU2QkVDRjY1MzkwMDVCMTgzNTQ2ODU0MUI5RDEzN0U1QTIwRUZFRTQxQjcwQkM2MTA5RTkyQzFFRDIyOTBEQUZFMjBGNTIzNDMzMTUwQUMzQTFENEI2MkEzODJEQTZBNAorMTlBRUI2RUNDNkNDOEY3RkJCOEE1RTExMywgMUQ5NkY3NzNDMTczNkQwNDZBREJDRTI3OEE0OENDNjAwQTQ5NkFDMzUzRkQzQTBEODVCN0EzOUI0RjEyNzk2NDU3NzY0MjE4M0U3NjI4Mzk3NjAxNEJFRTAwRTdGOENGQUFGREZCRjM1RkM2RTc5REQ2MzdCNjdGRThBRkMyMkYwMTgsIDFCMjBEQkEyQjE4RTMxRjU2MjBFMjIzMUJDQTRCNDQ5OUZCQkE4NDRFMUQ0MjREMkMyOTVGNDExNEFFQTRCQkVBNjQzQzMxNzExMjZCQzk0OTg0MDBFNjg5REEzNDlGMzQzNEM2OTJDNTU5OEQ5MzY4OUM5Q0NGN0EwRTI2RDE5N0I4Cis0RDBDMjRDNjU0NjVBRTdGMzI5RjFBMzM5LCBCNjlFNEE4QkYxQUE4OTVDNjE4QThERjg5Q0Y1NzRDMDdCNzM3MDc0MzU1NTc4QUVFRjQ1MzRDOEQyMThDOTc1QTAxRDg5RTY5OUUyQkM4NDg2NDNDRDVEM0QxQkNBMDQ2OEJCMEQ1N0FGMTFCOEM5MEU4QzkwRjQxNUQ3REJEMTQsIDhDREVCQjQxQUVGMDczMjZBRkJCQjRDRjM1MEI2NTFCRTc3MUY0NkMyNjI5MTQzNTNENjRFNzUzRkY0NjE2RUMwN0YxNDIxRkMzODk5OTEzMTQ0OUI5OUE0MkQ0NjA1OTZFNTNFQ0FBREY5NTIwRDhDNjI5MzZDMTk0NUU2OTVDRUMKK0U3MjQ2RTUyRkQzMTBCN0Q5N0RENEU5QUIsIDJGNDREQUM3QjY0MjI2MTg3RTZENEEyNDMxMjIyNjgyMDlCMjZBRjg5QzM2OTYxNDA4MEEwMTAyQ0FDRERGOUZGMTBBM0FENDQ0M0FDMDg5NUQ5MzVFNzZFQzcwNzdGQzIyRDZGODE0OEU0M0I0RUUxQUJBRkU3MkRGRDRBNUM0NUMsIDE2ODExQzMwMkJBRTFEMjEzOTkyNkRGQjg0RTA3NzQ3RjI5OTJFODY2OEE0Mzg2NDJFNDJFMDM3MUQwOTY0RjVCOUU1NDRFOERENTBGRDRERTdBNEZDMTQ5RkE3Q0UxNTcwNUFFQkFFQkNFMjQzMEY5OEY3NjFFNDFFREIwMzQ4RUQKKzJCNTZENEFGOEY3OTMyMjc4Qzc5N0VCRDAxLCA1OTlGOUE5QjVERjdFNDJGNzNCRkY5NDA5OTExMTUwNEJDM0ZFODEzNDBDQjdCNzYxQTkwNEQ4RjAyRTU3QjExMzA5MzlDNTkyNkJBNkQ4RTdBMkYxNkI2RUFEMTg1QTY3RTc0QkJGMzJEOUMzNTM2OUVBQzA5NEU4NDA0REYwOEYsIDE1MTE4N0E2NEY1MTZGQjdFNTc0MDA5QTA1RkVFRDU4RkU5NjUxOTA4MTI4MzAzQkVDRUNGQUM4ODMzRERGNUMzM0UxOUVGQ0YwODhDMkRGOTQ0OTA3RUQxQTcyMjJDNTU4NDRERDcxRkVERTA2MzQ0N0MzRDJCOTAwRTNCMDExOTMyCis4MjA0N0UwRUFFNkI5Njc2QTU2QzdDMzcwMywgMUYwRUU3QjQ3REYwOTgxRkI2NThFQUY2MjIxNTFGQ0Q1ODg1NkY5RUYyMjYyOTZGOTI2NUZGQjREMzQ1RDYxRUMwQkU3OTUwQkE4OTFDNDQ5QjE0MTRDQTAxRTgyNEMyMTlFMEY5NTg2MEJCQzRDNkJENUQ1QTgwODJBRTE1NkE1MDAsIDEzNkMwRkRCMTMzREVEMTQyRDk3M0NGM0ZGQjdBRTU5RjVFMzc5RTUzQUJBM0Q1QjhBNzczNTI0QTk0N0U2OTRCNDU4MDBBRUMwQjhFNjRCMUQzQkU1NDU2OUIxMkIxRTk2RDZGMjVCNjEyNkYwMzYwNEVCNUYyMDVFMEMwRDJBRkY4CisxODYwRDdBMkMwQjQyQzM2M0YwNDU3NEE1MDksIDk2N0M4RDA1N0MyQzZDNTI3RkZFQzRCNjU0MThDRDA3MEQyMEM5MTdGN0VDRDUzQjk4MDM1MkMyNkU0RThDRTFFRUYxQkQ4QzE4QkVDNjFBMzI1OTE2OUFBOTU3M0U4OUJENEE0MzM2NUFBMzUyMzhGRjc5MkY4ODMxQzk0RjU3NzgsIDc2QTY1MkM5NjcwNkU0OTBFMDY0MkIxQjg5N0MxRTgzNUZGRkY1QTBCNkI3MEM3Mjk5QzBGRDFDRDdGQzkwMkZCNTA3OEQ1OERBNTgzRERDOUZBRkY0QTFFNTk1MUM0MjExMTlERTgxOEVCRDc4RDRCOUM2NDVBODM5REQ4RkQwNUUKKzQ5MjI4NkU4NDIxQzg0QTJCRDBEMDVERUYxQiwgRDQ4MTUyOUMwQjg5MDhCMEQyNkJBNTI4MEMzNkMwOTA1MzlCMkM4Nzc3REE0MjI3ODJEQUMzMkI4RDkzOENEOUZCRTQ4QjBGMDg5Q0NDMTlFOTI3NDc4MzQ0REY2NTM4QTEyRTRDNzBGQjgzQkIwMTY3QkM1RjY3REVCQTk2RUFDOSwgMTBCQ0EzMDA2REQ4QTYzRjM4MDM5MzMzN0FEQTc4RUEwOURCRUY2N0I3MzQxMDA1RTU0MjZGRUJFNkNGNkIxRDNDRTYxNjRDM0RBNDZCQjdDNTgzQzdFREVFNkIzQjJDRjYxREQ3MTcwNjY4RUNCNTc4MEJGQkE5MzYzQjUxRDhEN0QKK0RCNjc5NEI4QzY1NThERTgzNzI3MTE5Q0Q1MSwgMTdDMENFNDA3MTJGNEI1MjcwNURERUIxMDREQUJEMjdGRTBEQzgyNTJENzMyRUQ5NkIxRUI2RDBEMkFCQzQ2NTlCMTFBN0VDRjIxRkUxQUQ2NkVGREQ2NDM2RDQ5ODNEMUQ5MTkzMzQ4NjNBRjA0Mzc4M0EwRUQxNkM5MUIxNEZFQkMsIDY4MEE4MTkxRTYwRTVDRDZFNjRDNTExQjI3MUI2NjVBNEE3QTMzMjUxMTNDOTY4MjlGQzI4RkI3NTMwNUQyMDdCRTMzN0E3NzgzMkE0NjE2MTFGNzZGNjM2MzdEQzhFMkIyODM4MzAyNTg2OUFGRTVCNjM3RTBENkFENTdGRDU2NzMKKzI5MjM2QkUyQTUzMDBBOUI4QTU3NTM0RDY3RjMsIDJGQUU1NENFMUQ0QUU1QjlFODNBQ0RERTkyQzQ3NzQ5QzIwNkY0MUI3MkE1Q0Q1QkFBRDAzMUYwQUFDMzRDQTY3OUQ1Rjg0QjgxQUU0MjkxQzdBOThCQjJDMzk2QzIyQ0RFMEQ4OTZCRTM0RkUyMzczOTBEMjdCRTU0QTc1MzNBREQsIDE3M0VENDNDQ0Q3RkNFM0I1MTVDOTQxQkM3NDRGQzYyRTJCNDE5M0UxRDk1REY2MjQ2NjFGNzk1QUJCMjYxQjVEQTVDQkZBQUEwMkNGOTk4OEI1RUYwNUUwOTVBMkM3Q0IwQUNFMzU2RDc2RDkxOTg1MkExRDY3MkUzN0ZCM0NCM0M2Cis3QjZBNDNBN0VGOTAxRkQyOUYwNUY5RTgzN0Q5LCBDRjY3MjdERDg5RjFDRkMxOTk3QkExNjg2MkNGMTlFOTIxN0E4MkZGMjcwQjI0N0FFRDJBQTBDOTkyQTQ1MjZFNThCODZFMjNGMzc1QkY1MEI1NjI5MzEyMzcwRkFEMUUzRkExREE1RTNCMkU2RERFRjdEMUY0OEVCMjQ1MjcwNDg5LCBBQjM1QTQ4MTExMDM3Mjg5QTRDOEUzNjBCMUFFMzAwMEFEREUzRkEyNzkxN0JBREVGODI0NTM4NkYxRENDNjI3NDUyMkEzRDM4Qzc0OTc1QkZBNTI2NEJGMUJCQ0YzOUUzN0M3RTZFREEwQTZEMDNCODk2MTQwNzcxOTkxRDI4ODkwCisxNzIzRUNBRjdDRUIwNUY3N0REMTFFREI4QTc4QiwgMTVFRDQzNjNGMDdBMjhBMzAxMTJFRkE4Q0E4QUE1NjM1MEFGNTc1MkQ2NUFGNEVCNTcwMDcwMjUxMTZFQTlGMDRFQ0U0ODFGOTBFQjUzNDk1Nzk4Rjg5RDRBNTQwNDBFNUZENEMxNkQzNjg5MjE4NjVCRTQ1NEVGQ0Y2MEFENUZDQTUsIDY4MDM5RTgyMjBDMTU5REMzMEYzNUY0MzdEOUQxNzQ1NzRDMkFDNjdEMzg4Qzk2NkM0ODk0NjIyMTdDMjE4OUIyQUVERUU5NjAyODgwNTc4RUNEQjQ5MDM0QzBCMTA2NUM2NTlERDA0M0VERTkzQUNCMUIxOEVBODc0Q0FEQkEwNjQKKzQ1NkJDNjBFNzZDMTExRTY3OTczNUM5MjlGNkExLCA5NThDREZDMzU3RUMzNjE4Qzc3NjJCMTBFM0Q0NUU3NkVBREY5MTU3Q0VCNTIzNkE1NjQ4OThERkM0QUZBQUFFMjZBMDdCRThDNjUzQThFMTZBMzZERDBGNEU0NDhBMUU3Q0M4OEQ2Qjc1NDJBOEU0OTlFQjY3OEY3OEU0QjZCMkNDLCAxOTcyM0YwQ0RGMzNCRDIzQTE0QkExM0E5ODA0M0ZCNjNCNzQ2QjBFREIyODUyOTYzRTQ5MUUyMUFEMzdCOTU5RjUxMkRFODRGOTk1OEJDREY3N0QyMjEyM0Y4ODdBNjU5QURCMjdEQjY2OERFRUQ5QzkwRDdEMjgzMzY4NjUxQzdEOAorRDA0MzUyMkI2NDQzMzVCMzZDNUExNUI3REUzRTMsIDFENkZGODI3MDI0MzMxQzQ1MTIwQzRDNzFERjM1RDY4ODhCMTJDNUFGNEZCNzBCNTcyNDk1N0ZERkU4ODI0QTBFNzEzMTA2RTg4OEI3N0QwMzFCNzQwQ0I3M0Q0RDZCRDQ5NUQ4MDQ5NEFENjIxRjBBRjg3MjdBNjc1OEE0NTVDNjhDLCAxOUUyRERDMzI2MDc5NEI0NTIwNEM5NDZBMjQzN0QyNjZGOUY3OTlENkY4QUU5ODg2RDk0QUJENTAxOUU3QUE3OTU3RDU4MDQ0MjZBQTYxOTVFQUJBOTlGRDVFMkVCOEUwOTM2M0Y0NkZBQUZGQzI2MkRGQkVBQTI0MUM3OUEyRTdBMQorMjcwQzlGNjgyMkNDOUExMUE0NTBFNDEyNzlBQkE5LCA4Rjk2M0MwRDA2MEQyNzNDNzRCMDk3RkY1NzYyQ0YyMjdCRDg1OTU2MUQyRkU2MTk1QzFFRjQ5NURFMUI3OUM5NzU2MkM3ODY2QTM0REU1NkQ2MUIzQThFQjQyRUU4N0MzRTQzNzE1N0VFQzMwNjRDQTBDN0JFNkIzOEY3QjI1OUUsIEJGQzJBOUJEOTUwMzRBM0IwNUY2M0NGOTE0MDI0MDNCQzk5ODdCMjIyOTAyODg4MzJEODRGMzNCMEY2NzM4QzdEMDEwMDMzRUEwMzJGMzMyMUI2RDg3NzIwRTVGNkY1NjRCMUJGMzFCRDlBMzgwMkZCRjJFMTA4MTI2NTkxRTcwN0EKKzc1MjVERTM4Njg2NUNFMzRFQ0YyQUMzNzZEMDJGQiwgN0I5RjNCNzdEQUIzMjJGQkIzREExOUVGNzNGNkY4MjlEODgxNjE5NDUxQjBDNURDREFDRTE3RUFGMDgzMEFGMDIwNEQ0RDBDNTFCODJBQ0Q5NDM0MTg3MEJBNEM0RUVGMUExNzdEQTJBQUU5MzA5MkQwNEI0ODA5REVFOTRBMjA0NywgNDRCRDNDMzYxOTJDQjUyNDMxNTg0RjAxRkQyMTE3QzYxQTBEOThCOUNFRjFBRjlENDMwNTEwQjlCOTYyOTU1OERFNzQ1QUEzQ0VGMkIyMTFCRTRFRENCOUJGRDg1M0RBRDlGNEIwQzJGNkRBODk1NEFDMENFMjk1NjVGNUVDMUY1OAorMTVGNzE5QUE5MzkzMTZBOUVDNkQ4MDRBNjQ3MDhGMSwgMUYyQzE2ODVFOERGQkE2OEQzNzU5ODY5MDgxMjg4Q0M5OTIyNDE4OUVBQ0E2MTM5MkM3MkJENEM0OTY0QzY3RTM4OTVDRTdCNUI0MTRGNEMwQUY3M0I3NzY5MUNDQjI2QjU5MjYzOUUzMDA4REQ3MkJEMzhFQjkwMjM4MTUwRUVGREQsIDExNDFGQjYyQTk0NzRFNDMwQTcxNEEyQjA0NzQzRkRGRkM5MzhCRkYxNkRGOUQ0QUE4RUFDRDcwQ0YxRjA1RDg4QTdCOUM1QjhGRjA1MzYyMDgzRUEwOTEyRDM2NTQ5REMzQUU4QzFGREEyRTdCM0RDMTcyOTVBRTBGMDI3QzE2QTQ1Cis0MUU1NENGRkJBQjk0M0ZEQzU0ODgwREYyRDUxQUQzLCAxRUE3QUZGREVDQzlEMkQxNzNFMEIyQjJEQzBCQjU3MERERDEwRDc4MTQwNjdGMDMwNjIwQjhGRDlEOEUxQkM4QjU1MjUwNjQxOEY1MTM5NjE3NEY5OTE1MDg1MjQ5MEQwRjZBREFCMzkyQjdDNzQzQ0Y1MzcyOEFERjc0MTJCM0YwQSwgMTBCREUxNDlCMzRBMjE4QjYyRDM1QUEzREYyNTJGRUY0OTQ3M0MyRjczMEY0ODY4RTQ2RkVEQjUxMkFDOEYxNzZCRTJBMEMyQzMzOUNCQ0EzQTcwRjkxMzNDRTBGRUU1MkRFQkI1M0JFOTAyODkwMUM2Q0EwQjI1RjdDN0Y4NDJGMkUKK0M1QUZFNkZGMzAyQkNCRjk0RkQ5ODI5RDg3RjUwNzksIEZCODY1REYyNkNCM0FDMzFGNkRGRTk5RTcyM0Y2MzFBODlENjMyQjYzNzE1NjA2RDhFRkQxQUNGN0Q0OTJBOUU5NzRCMjAwQjE5MDhFMERENTMyRDU2NEQ1NjdFMzcwMTc3NzdBNkJDRTA0MEE1RUU2NDM5NTBFQkI4MzhCNjAxQzAsIDFDQUI1MDlEMUUwRTZBMUI1OUMyQTVEMzQ4N0Q3ODUyQ0IzREExMzUzM0VCMUMyRkE1MEEyNTZCODA1QjVCMEFGMzVEOTUzODQ4NDZDQUUxQzI4RUM1MzI5RjgwNEY2MzgxQkI3OEFDQ0YzRjczNzM3M0EyQTY3RkU4MzJENzFCNkE3CisyNTEwRkI0RkQ5MDgzNjNFQkVGOEM4N0Q4OTdERjE2QiwgQzlGMDBBQTBBNTQ4RkZBQ0M1NDc4Q0ZBNDNBMkY5RjIzRkQzMjM5MkZBQ0E0RjY4QUIzRkJFNjYzODNCMkI2RTM3QkEzNTUzMjZGNDJCNThDM0E3RjZFOTNFNTE5MDhENEVEMDE4NUQwNUU1QTc4NDQ5MjlBRTIwOEMzQjUxQjQ2QiwgNUI3NTY5NkRGQzY4NERDOUE4NDMyMzE3RUZEMDdDMEIyNjkxQTIzN0FDMEU3NDk4Qjk2NzMwRkY1NDdBQTdDRDlCNTFCODQ3QkJDRjJERUQ4Q0I5M0JCMDQ4MkI2N0UxMzVGODc0RjVGNEM0MkE4QkJFMUI3MEM1ODYwMEU5OEY4NQorNkYzMkYxRUY4QjE4QTJCQzNDRUE1OTc4OUM3OUQ0NDEsIDFGODY2RUQ5ODNFNkVGNTkwMzcxNjE4QTBCRDhGQTQyQjBERDQ2QUFDOTQxRjg3N0VDMTRCMjRDMkI4MjhDRUVEMzkxQUNGRUNFRkMwNEUzNUEwREQxRkU4NTY0MjZEODNBQTNGRkUxRjU1NTY5MTlGRDY5NzA2NkJCRUQzMzM5MzM1LCAxOTk1ODVERDA3QkFGQkEyNEYyREZBRTM2QTMwRTA0MEFDMjlFQkM2M0FCREZDRkJFQTA5NTc3MDIyNjIzMzRFQjFBN0ZBMTc5QzNCQkZCRTkyOEFGQkI0RDA1MzJBOEYwRUYxMTNDREI4OTgyMTM0QTlEMzI2MTQ4Q0ZFRDIxRjc2MgorMTREOThENUNFQTE0OUU4MzRCNkJGMEM2OUQ1NkQ3Q0MzLCAxMENENEUzOTNERjAxMjA2NEI3MzkzNENGRjdFRkJERkM3MkYzRDU4Q0NENzMzRDg4NUVFQkFENEI5MUI2NEE1RTUwNEZERThGMjI5OUY3MDQ0NzI3NzJENTNDRTZEODFCQjM5NjMyQjgxQUIyNUZGRkE3Qzc3NEU5MDFFMUEyMjJGMCwgMjkxNzhGMTI2MjU3NDg4OTUxMThENzAzMDU1MzVFRjg4QTkzMTEzRkVFOTc3REUzM0UzMzA2MzNENDAxODFFOUY0NURBRjcwMzA1NDVGNTVFRThBNjEyQzYwOEI3RjQxRjI4MTJCNzlEOUMyNkNFRTM3MzRERTU1MTAyNkU1OENBQworM0U4Q0E4MTZCRTNEREI4OUUyNDNEMjUzRDgwNDg3NjQ5LCAxNzFFNTc4REZDREE2OUJEOUQyREE1N0RCRThBNTE1RDQ4RDRDNEJBMjIyNjI3RkJCOEIwNjhBQkE1NjA1OTU2OTAzMTExM0Y2MENGRTgwMjdENzdGM0ZCOTkwQzczRjcwRjFBMkU0QkYzMURFMTlERDAyMDIzMzRDRDExNTdGRjVEMywgRjExMDE2NzRGRjFDMjgzMUUyQzE0NUJEMkVDQ0FCQTE5QUNDMkI4N0I2OEE0RjVCRjVDQkQ2ODUyMEM2Nzk4NjE4MDBDODM2NkQ1NDVBN0ZDRDkxMjQzNDk3MzdBRkY1NDc4RUM0REFFNUYxQUUyRUVDRjVGOUZCOEFEREU5QTI5MgorQkJBNUY4NDQzQUI5OTI5REE2Q0I3NkZCODgwRDk2MkRCLCA1NDI4ODBDMDQwQ0M2ODJFRkU3QkE5MkRCREUzREJGRkM1NzgwNTg0QUUzRDFGN0MyOTQxMzY4RjBCNDRGNTlDOThGMjcwMTQ2NDQ1ODBCQkZGQTJDNjJDNEE4MURGQTA4N0FDQkE3RjBBMjRFN0REODc3RkMyNkFEMTBEMDc0MDQwLCAxODY4N0QxMzM2MUIyRTREQzY2RTgxMzZFNTBCQkVGMDc5QjVENkFGNjRCODM5MjY1RUMzODcxQjJBOUQwMzRGQTk3QTk0RENFQjgxRDE1NEMwMjA2MzhEMzhCNEJBRTE2QzZEQjg2NTc1ODVFQjRGNjBCNzFCQTA4QzlFRjA1Q0EyRgorMjMyRjFFOENDQjAyQ0I3RDhGNDYyNjRGMjk4MjhDMjg5MSwgMUNCODgxNkVDNjZEODBFRDA1QzMxNzJBQTMzQjRGOEM4RjAyMzgxNjcwOEYyQkNFM0I0MUM0MkFBRkQ0MUM2ODUzNzk2RjdEMDE0MTI1MTI0MjMwRUMyNjQ4QkRCNzA4OEExQUY0NTRCMDFCNEVBNkY3N0UzOTM2MUFDNjk4MTM4RUYsIDE2NTAzQzk5M0I1MUY2RkM0QzNFQjRBOEQ0MDhFNzM3MEU2RUZBRTIxNERGMDk4NTBERkUxMkIxQzJFN0U5QjkwODMxQjFGNDk1Q0E4MUJFQjlBOTZDNjYyRTBCMjIzQ0Y0Qzk1N0UyQjNBMzYyQUI2MDNCMEREMjY3NzBDNjMyMUZBCis2OThENUJBNjYxMDg2Mjc4QUREMjcyRUQ3Qzg3QTQ3OUIzLCAzQjJDNTVENzE3MUJBREFBMjdGMzYyNTU0NThCMzBBNzE3NDlBRDE3RjExMTQwODU0M0RCQzgzRERFRDYzQ0ZDQTdBMjMyQTlBM0ZGQjE4MDczQ0YzOTgwM0U4RjZGMEMxQUZCNUU3NDVDRkM4RjkyM0M0MTBCN0FFNzUxQkU4MEVBLCA4RjU2NzAxODQ5QzhGQUY3MEFGQ0I5MkFBRTJCMEU0OEMxRTg1MTE0Qjc4RDU0NTYzNUFBQ0U0M0ZCMEI1MUVBNTNCM0NDNkQ1NEYxMzM0NUJGMzU0OTI0RkZBNEUyNkM3MTAxNzNGMjg5RTQ5QjlBMUUxMDA0MUMyMDc4QzFBQTY0CisxM0NBODEyRjMyMzE5Mjc2QTA5Nzc1OEM4NzU5NkVENkQxOSwgMUZFMDEyQUVGOTUzN0U1NzRGRTU1MEU4RTE0NUYyMDI2Rjk2RDNFRTFEMjMwMUIzRDY5NjlEOTc3QzRDMzE0RTkwNzhGMEM1RUQ4NUMxNkM0NENCRkNFMDRDQjQ0RUMyQTcwNzJDNUQ5MzY0OTVBNjhBNjAxQkUzMkVERUM1OTVCNEQsIDE3NDJBQzM5NjYxMDAyRjRERTEyMzA3RDM2N0YwMTdCQjQ2ODVBQjAzMDM1RDZCOTBDRkI0Mzg5RTEzOURDREZEMUI0MzJGRTdEQTUxRDg3NTE5RTQ2Q0U5QzZFNjQ5NkExM0Y1OTI5OTgzMEIzMjZBQTU0OTc5NDc3NTIzRDU0N0NDCiszQjVGODM4RDk2OTRCNzYzRTFDNjYwQTU5NjBDNEM4NDc0QiwgRDJCMDA4QzNENTk5Q0I3Q0M2QzRDQ0Y1RjA2NDIxQjQ5RkE0NTREODBCMDUwM0Q2NkU4NTlEMDJFRjBGNkExNTA3RkUzQjQyQjVFM0JERUM4MzI4OEFGMEMyRTc5REMzNDhGRkMzNTA5QTM4OUYyMjMxMDRDRkJBQzQzMzdCMjBGMCwgMTU4NTcxRDI4RDgxNzlGRDkzNEVDNDE0NkY0NUM4NDRCRkQ4MDZEQTREMjE4NTY3RkM0Q0ZCMDhBMUYwMUI1RUMyMTNDODE2ODQ3NzgxNkYyMzBEQTBGQkZCNjY1Mjc4RTc5RUUzNjUwMUM2NzMyOTJGM0RFODA4N0IxQkQ3RTE2RDAKK0IyMUU4QUE4QzNCRTI2MkJBNTUzMjFGMEMyMjRFNThENUUxLCA0QzIzRTI5NzM4MzAyMjI0OUZBRUVDNTE3QUZCRkMwRUJFNDVBRTE1NjAyQUFGNDUwMjNCRTI1QTkzM0QzQTlBODVGQUYzQjcyQTJFMjc4NTI4QjlBNzUzRDMwMDVFMjk5NzY0QkVGM0E0NzVCRkU3REQ2OEVBM0M3MkU3QkFCRjZGLCAzNkQ0NjgwQzUzQTYwNDcyNDgzQjdCOEYxODQ1RDU2QkYxOUZFQUY5NzE0NkUxNkM2NkQ3OEE0QzVCMkVFMjcwODhBRjBEQzYwMjY1MjI4MjI2OUE2OEVEMUNCREVGOUZCQzYzODhCMjhCRTczMkE5QkY0REQzOEM1OTlFMzE0M0Y4CisyMTY1QjlGRkE0QjNBNzI4MkVGRjk2NUQyNDY2RUIwQTgxQTMsIDJGN0Y5RDFBODlCNzIzODRDRjVCNUI2MDQyNDZGRjhBQjRCRjAwQTY4RUExREZBN0IxRERGODM0NUQyMDE2RjU3MDI3NkEyQUNCRjMyMTc3MkRFQzc1MjQxMjg3MjQ5MzhFNzRENUUzNjlGNkVGNUY5MTlBREYyRThGMEI4Rjg3Q0IsIEFEQUJBMjM4NDEzNjVBODNEMjg3QkI1MUM1MEUzQ0QwMTQ5QzM2OTA4MENERjJDMTA4MkE3RTM1OUExNjUwNkFBQTNGMEI2REI1RjU1QjNDRTk5Nzc3NzJENDM0RDdBQTBDRjhFRUQ3QjMyMkJGQzE2NzkwRTJBMjU3QUEwMEIxNDQKKzY0MzEyREZFRUUxQUY1Nzg4Q0ZFQzMxNzZEMzRDMTFGODRFOSwgMUVGMkREQjk0Q0I5NDg4NDRGN0MwMDBGQkUwOTBENzg3OEYwMkMzQUUzN0Y3MjIyMjBEOTIyNTVGNTI0NDg4OUFFRTBCNUQwQ0E5Q0MxREZGOEVCQ0YzNUM0QzE0RDdFMzNDMDUyQzQ3QkM4NzBGNUMyRjY0OEYzQUE5RjE1NkUzNzIsIDE3RjNENkQ4OTEyNUFCRDQ1N0VFNDVCOTEyQUZCRTRFOUIyMDA4QzdBOTU1NjIzMDNDRjdBMEYyQkUwOUI2OUQ5MDVFNTQ5NEUwRUIzRkFFMUM0N0E0ODkyNENBQjRDNTZGQTQ5RTk3MEU1NzU5OUM4NTJFOTMyMDhBQzBCNzc0N0Q2CisxMkM5Mzg5RkNDQTUwRTA2OUE2RkM0OTQ2NDc5RTQzNUU4RUJCLCAxMUEwOTA3RDVCNEU2QkFBQjA1RjgxM0EzMDdEN0RGOTRGRTMxMDI0RDk2MjMzREQ5RjUyOTY2QTk0RUUxOUJFQ0FGMEQ5M0Y2RUNDQTYyMTdGRDcwOTU0QjM3OTI5QkZFMjJFRDVCNTI5QTFGQURFNjg5NkVEMzU4NjY4RTc0NkYyNywgRkE0NkIzQjZDNTY5NEYxQjRBQzk3NjNFOTg3NzYyM0JFNkRDQjAxRDZBMTAxMDg4REVEREE2OUZFRDE4RDQyQjBFRDEyNDZDNEREQzczOUQwM0E0MTFFQUIzRTYzMTZBRkRFNzFFOENDMEUyQUEwNEZDOEU1RjEzN0I4NENCOEUzMAorMzg1QkE5REY2NUVGMkExM0NGNEY0REJEMkQ2REFDQTFCQUMzMSwgMUVENjU2OUY1RjY2OUYzRTZBNTVBNTI1NDYwNjBENTlENUExNTYxQjBFOERGNDM5NjAyMTk1Q0M4QkEwMUM5MEMzRjgwRDdGRUQyNjMxQkI4MTUzRUZBNDZGRDU2QjhDQjBERURFOTVGOUZGRDBCMDU0NkQyM0FCRUY3OTk2MjI2QzIsIEY0RTRBOTIzNzIwOTE3MjQyQTE2QkI3Q0M2MkEwN0M0RDAxN0RFNjUzRDc2QUM5MTI3ODNCREVBMjM3RjY3MzFBQzJDODAyQzdFRDcwNjM5QjFCMDAwMjY1MzRBOURFQzIzRDcxMzBCRjMxMTc0NzVGOUYxQTA3MDJDREM2RDZENTkKK0E5MTJGRDlFMzFDRDdFM0I2REVERTkzNzg4NDkwNUU1MzA0OTMsIDFFRjAxRTMwOUU5QjFGQjY4N0FFQ0U5NDc4MDZDMzVCOTQ0RDlFNUVFMDZFNjFEQjkzOTBGREUwMTEzMDlFMEE5MUVCMEY0RkE0QTVFNjJFNkQ1OTk5RTQ2QTRDMkQ0OEVBODUzRENEOTMxM0Y0QkZBRjg1M0M0QUREMUNGNDdCRDcyLCAxOTUxNTk4NDFDOUQxNkMzNTBCNTJFMTgxRjU1OUVCOTY5QkIxMTNCRDA4QjUxNTlCMDVBMTk4MEY1M0M3OTlFQzFDREIxQUE0QzhBMDQwQjlEOUQ2N0IyRjc5NENDQTk1RUU3NjdCQjE4QUY5RkQzNkM0NTMxODI5NEJBMTY2OEM4MAorMUZCMzhGOERBOTU2ODdBQjI0OUM5QkJBNjk4REIxMUFGOTBEQjksIEJEOTMzNEREMzQ4NUJFQTdEQTEwRTJFQ0RDOEY1NDMzQTM0QzlCRkU0MjM5MTA2OEJCOEMwNjFDMTI5RjcwMEZGRkY4M0I2RkY5RDMxQjBFMUQzRTJCRjY1QUNERkVBOUJEMjQ0RDA1NUQ1MENFRTM1NTQxMkE0RUY5RThENDkzNTYsIDFCODc3MDdCRDVEMzE3RUI2NjhEMDE3NkI3ODZDNzI4RENGRkRCODE0MUVFOTQ1QkQ5ODlCMjdBQjFGMzEzMjBFNUEzNzBDNTgyRTZGNjVEOTFDQTE2NkZGOEQ5OUREQUFDRTdBRUZCRTE1NzZBODYxMzUxNzFBREFDMUIzRkM0MTJFCis1RjFBQUVBOEZDMDM5NzAxNkRENUQzMkYzQ0E5MTM1MEVCMjkyQiwgMTQyOTkxRDhCMjFBQjUzRkJCNTM4MEIzREFDQUEzRTQxRkMxRUUxRUNFNzY0MURDNzE1ODYyMTQxODUyM0RCQ0VDMEFCQzdDQTI4REJENkJDQ0I2QzMwOTdDNjdGNUI2MEIyMDNGMDYzNkY5NDc5RUIxQjdDRkJCNzU1N0MxNEQ1QTIsIDE0MzRFNDRENTJDREVEMkVEMTlCNUEzQjY4QTBDNjE4RUIzN0IyMTdGNTJCRTJFNTZDQ0E0MUIzMkZCMUUwNDQyNEZDRDlFMDdCQUJERDM2OTU4MTA4Qzc3MDI3MzExREU0OTM1QTIwM0RDQjMyRkFGMTgzNDVFREY3NjJCNEZDRTc2CisxMUQ1MDBCRkFGNDBBQzUwNDQ5ODE3OThEQjVGQjM5RjJDMTdCODEsIDc0RkI1MTVFNDA3OEQyQ0E2QjFCMTdFMzI5N0E3MDcyNkVCNTZDMTI0RUE5NjRFQzI0RkVCNjEzOUE1REE0N0QzRjE5NjEwOUFGQTVEMTExNUIwQzY0NDY0RDhBQjExNjcwOERBMEI3NjBCOTkwMzY4MEFGOTdGMzBBQjU1NTJFMTgsIDEzRDE5NDk4QzY1QTZEOUJENzIwOEFCRkJENzRCRTFCNjdCMTEzQjM3OEI1ODAzNUMyRkEwRDA2OTFENzJFQzY4M0JGQjcwMDEwODBDOTA2MzVFODM3Qjg3NjIxRTYxODY5MDE3OUUxOUY1ODBFNURCNEY2QjNCMjhFNjFFNkZFQTA1CiszNTdGMDIzRjBEQzIwNEYwQ0RDODQ2Q0E5MjFGMUFERDg0NDcyODMsIDQwNTgxRUIwQzVGMTc4NEM1QTMxNzNDMjczQURBQjI2RTdENzJFRjc1N0QxNzU5ODlCRjczQkQzNjQ4MTJGNzM5MTM4MURDOTY3MzU5OTBGOEYxRjBFMzZFMUVBQ0U1NUY3MTNFRTRGRkFBMzFCNTE2ODM4QTNDNUY4NzhCRDk2M0MsIDE3M0I0MUQ0NkM3MzQ0M0U3RUVEM0YxNTNBMTc0NEQ3MDQ3RThBQ0M4QTk0OUFEMjQwRjhEMzE1RkQ2ODFGNEZENDQ4NTVEMjNDNUZBNEJBQUYwNTBDRDIxQzEwRjEzQkIxQTA0MUMxNzAyOTVBRTE5QkEyNUExREUxQzQyMDhFNEJDCitBMDdEMDZCRDI5NDYwRUQyNjk1OEQ0NUZCNjVENTA5ODhDRDU3ODksIDE1NjRBQTE4QzVDMTAzNjRFNzVFMTIxMUUxRDU5NTdDNjczQjA2NDA3MjBDQzUwMDNBMzFCRDEzNjdFMjY0NzkzN0MyOUM1NkI2OTE2RjQ0RjczRjYwQjFFQUY1OTJGRDgwOEQ0QzRERTg3NEJEREEyN0U1RDg4QzE0QTcxRDc1RUVBLCBDNTNEOEEyMzAxRjIxM0E2ODBGNTg3NzRGQjRDRkY5REQzQjZFOEU1M0I5NEI5NEZBMTMxQkVEODdEQzUzQ0ZDNEM2QkU0QzA4NEZGOUI5NEYzNTU5MEI3NDU1MUMwMzUwRTcxOEQ5OTRCMTBCMUM5RTQ0MzczMTUyRTc2RkVDMjVDCisxRTE3NzE0Mzc3QkQyMkM3NzNDMEE3RDFGMjMxN0YxQzlBNjgwNjlCLCBEMUU2RjJFRjEyQzY2ODY5RjY3OTMzQjY0QzJGNEUxNkU5MzQ3NjcyMEI4NzM4M0U2MUZDNDEwRUYzRDBGOTY4NEMxQTIxQzVCOTMxNUMyOUJENEQ2MzFFREE0RENEMTA3ODk3OEU2NzgwNDY2NjBBOEZFOTgyREE4MThDMzI1OThGLCAxODVEMDhEOTNENDYzMjMwMzY2NDgwMjYxQjkwQUExMENGQkNFMkRGQTQ4NEE1RjVCRTU2MjczNTRFQzc1MzQwNjExRTdFQkQzQjEwQjAzMTY1MDQwQzBFNUM1MDM0NUMyOThGQTlGREY5MzdDNUI3NjM4NEU3MkFBMkEwMUUzMzU5Cis1QTQ2NTNDQTY3Mzc2ODU2NUI0MUY3NzVENjk0N0Q1NUNGMzgxM0QxLCA5RjlBOEIzRjJDMDVGQzgwRDlDMDg5N0E4MkI0N0Q2NTdBMEE5MTcyREIxNkM1RUY2QkY3QjdDQ0ZBNTg5QkVBNjlDQzkzMThBOUI3REVGNUE0RTFENjkwNjVCNTM2NENFRDBGMDk3QzA3MzU2MkNGREI2MUE5RDlGMzgyOUIyRkVCLCBBQkYwRTE2MDhEOTk1NjAwMTE4RkI1OUNEQ0FDNUQ2MzM3RTA0QTc5QkVDRUQyNDY5NzI5MUYwMTFGMTg1QUVCQUJGOEE0Q0UzNUVGNUFDMDlCRDI3NEQyMUEzOTNGRjZBMjU5NTJEOTU5NDI5RTZFMDBBNDg3OTQxQTUzMUE5REJGCisxMEVEMkZCNUYzNUE2MzkwMzExQzVFNjYxODNCRDc4MDE2REE4M0I3MywgMTE3MTc3MDJFQUVFQjg5Qzc5MjcxRkQ1QjZFN0UwNERFRTM1NTBFOEY0QUI3NUM4OUVDQkQzM0I2MzZFMzY5OEQ1RUY2OURGMzI0QkI4QjNFQzZCODc3NDQ3MTg1MDFBMkM3Q0M5QTlEMTVCM0E3NUMwMTVEQzMxMEEyMTBGMDlBNDAsIDFCRjNBQ0UwRDEyMUQxNjUzRTg5NDU5QzUwRkFFRDY1NjJCQTY5RDJBMENCQzY1RUE5MkRGQzUwMzRDMjAyMUUyOUIxNkM2QjQzQjQzNkJFNzZGQTdEMzFDQTFBRkMwNkM4MDNENDMwNjA0NTlERjIyQkE3NTMxMkYxNThBMEUzMkQKKzMyQzc4RjIxREEwRjJBQjA5MzU1MUIzMjQ4QjM4NjgwNDQ4RjhCMjU5LCBBM0QyNjFENDgxRUJCMDk2OUM0QTY3NjcwMTNBRkM3NTlEOTFGMjE0QTVFQzRGODVDN0U1MDQ5NTVGRjZCQkJBNEY3QTlGNDg4M0QxNUM0QkE4RjRBMEFBODZFNUY3MEU3QUNGODQ0N0U0NDEyNkRGOTU3RUU4NUM0QkJCMzdDNTAxLCA2MjQ3MkEyQzdEOTI0RTFBQjBDOTVDOUM1QTJBMjA1RUEzMUREQkY0RDgxOUEwREE0QjlGNzZBRUE2MTBCQjJGQThBRjQ4NkMxOEZBMERDNUYzM0I0QkIyMzA5QjUxNjJBRUNBNkU3QTc2QzFENzgzQ0E5REI3QjA0MDVGNkU0QjJFCis5ODU2QUQ2NThFMkQ4MDExQjlGRjUxOTZEQTFBOTM4MENEQUVBMTcwQiwgNzJBMTIyQUMyNzFEQkFDOTVGMzEwRjIwRThEOEEwQkU0MTkyQTdFNzAxQzkzQjYwMEFENEFFQ0U2MkVEMzFENTZDNEIxRjVDQjE4MDUyNkZFMkI4OThGRUUwQ0ExMzkyMzY4QTExMjg0REExRjBEMENBRDdGNDI5QjVGRDJCN0RDRCwgRDA5QjBEMUQ1QjVDRjVGOUMwNjhCNzU4RTMzM0ExMDE3NjU5QURGQzZDRkM3RDI1MUU2Nzc3OEQ4RDBFRUZGNkYxQTAzQUZFNDdBREVBQ0UwNDZCMEI2ODkwQ0YyOTc0NkVDNEQ3NzRCQUYyNkQ2RTJGN0E3RkZFMUVEMDk5MUY2NAorMUM5MDQwODMwQUE4ODgwMzUyREZERjRDNDhFNEZCQTgyNjkwQkU0NTIxLCA0QzFBMjBFQzI0MjVGNzBDRENFNTM1OENDN0NEMjVEMERFRkIwQUNGRjE2MEJDNEFBMjE4QUQzRUI5MTMwNEQxN0I0QTEzNEVBNDE3MjkzM0UzOUVCMjVEMERFRTBCMUEwNzc1Q0UyNTgwQjdDRkRCQjQ0OUUyQTM5QjlDNTk2RkMzLCAxRTdCOEEyQTY2RkM3M0YxMTRDODFBRDE3RDdGQzA4REJFNzc2ODA0RkQzQjgzRjZEMjc4MUI4RTg3RTY3QzE2Njc0NjFCQTBFRTBCMkJCMTZBMzQ4MUUxMENEOTQwRThBNTgxNUE4Mzc4NUYwQTk1NzY4MzU4QzZENkQ0M0NFMkE1NgorNTVCMEMxODkxRkY5OTgwOUY4OUY5REU0REFBRUYyRjg3M0IyM0FDRjYzLCBCRTVDM0Y0MjUwMkNBNjFEMUU1RTY3N0Q0MjIxRkMwOENBOEYxQTRFRDM4MjBFRjQ0MjZFQUM3ODA0MzE4NzM3OUU1MjYxMjU0NzQ1RjJGQzg3NUM5MDQ0NkI0QTFFNkNCRDUzMkYyNzYxMzNBQjQ1NkJEQkVCMEUyNUEwRDUzRDQxLCAxNzRBNEI1ODY4MDE4Qjg0QkQzODk3RDE2MEU3OTEyMTE4ODlDM0NDOTU2RTREOTg1RkI2RkZEQ0FFN0QyODM2QjNDQzU0MkYwMzc5NzFEMkVCNDQyRDk2NUMzNzNBQjVDRDUxMDg3MDkwQ0NFMUVGQTcyNUFFMUVBNURBOTMyRjcwRQorMTAxMTI0NDlCNUZFQ0M4MURFOURFRDlBRTkwMENEOEU5NUIxNkIwNkUyOSwgMTQ4NjhFQzBERjAwNkVDRkM5RDAzMERCNUQxRUUyMDA5MTI3RjJFOTFDQ0YyMTc0QjNBNDYxMUJDNUZDQTZBMzYxNDNEMzEyQTFBNTQwRDQ4NzFDMTIzRjZDRTU1MTdCQzY0OTBBODc0QjA5Q0JFREQzMEIyNzYxRjdFQ0M2NEY5Q0QsIDFEQjg5NDI2OUVGOEMzRjYwQkM2OTk4RjBFQjNENDFBMkUyRUQ3NDg0RDFDQTkyN0Y4MEYzRkYwQjVFRkNCNjc5Nzg1N0ExMTRGOUUzODA2MUVERTdENTNCOUZEQzk3N0Y3Q0Q2QTUzRTRBREVGNTE5NEFDNUE2QTEyMzhERkQ5MjdFCiszMDMzNkNERDIxRkM2NTg1OUJEOUM4RDBCQjAyNjhBQkMxMTQ0MTE0QTdCLCAxNjlENzREMERGNkU1NUM4NDJGNDJEQUYyQTc1NzY3ODVBQTUwMDEwMDUyOEY3ODU5QUMyM0IyMjc5RjRGOUI0OEFFQ0VEMTIzNzg1Njg0NEQ4N0RDQ0U1N0Q3NUEzOEFBRUM1RkM1NDQ2OEE1MDdGRDU2MzBEREVDRUQ3M0M2RTc4MSwgNEM3NTg2MTkzMDRCNzIwOUQyRUU5Rjk1Njk4RkI0NDBGNDk4MzY5QkNDQUIwNTlBNjFFOEJEQzRCRTU2MzYxMTlDMDNCNkQyQjc1MjQwODdDRjVDRjQxNEEyRENBMTgwMUJCRDA0Q0YwNjY4NzBCODM4NjQ3MzE0MjJEMzYxOUQ0OAorOTA5QTQ2OTc2NUY1MzA5MEQzOEQ1QTcyMzEwNzNBMDM0MzNDQzMzREY3MSwgMUNGMzhGOTc2RTFCQ0E3QzIxNjczNTUwNzVGQjg0OUFGMjdBRUU2N0I1NjYyQ0UyQTBBMTQzMUQ0RTRBOTNFMUVDODcxRkRENzgwOTJBNDJFMTNEODdFMTZERkZEQUYxMTM5QTRDMDk3RUM3N0VBNjgxMkE2QkYyNEQwRUFEMjY4MjEsIDFEQTRGNTkwRTQ5OUQ3Nzg3Rjc5MTYyREM4OUMyOTRDOEM1RDgwNTFGRERGOTIyMjMxRUUzMzhGQjExMUUyMUJDQkNBM0E2RUNFRjJGRTZFNEY4OTRBQTUwN0RDQ0M1QzQxOTFBMjhEODQ4QjhDNUU4MDE4NkZBODUxNEIwREFBQzQ3CisxQjFDRUQzQzYzMURGOTFCMjdBQTgwRjU2OTMxNUFFMDlDOUI2NDlCOUU1MywgRjExMTkwMEUxMTVERTlEMzc2NTYxM0EyMERFQTRENUUyOThCRUQwM0ExOTNFREY4NTFFMEQ3M0JBMDU0RjcyMDgyMUIxNDU2MEJFQjI1OTI5RUE2REMzNDI0RTdDN0YyRDk4NjQ1NUE0Q0E5MkY5NkI3NEI1NTZENjUzNjE4MEIzMCwgMUZBMTRGNDE2QzYzRTZBMTI2ODk0QjNDMzBCMzQzM0E1MTc5QTM0N0IwQkI0NzlGNkY5NjFFRTZFMzMzMUEwQ0I0Q0JBOTJCMEU4Mzk3NjA3MUI2NzIxOEY4OTQ4QkJDNUYwMEVBRENBOEZBMjZCRUQzRTVCRkNGNDk0RDhFRTM1OEQKKzUxNTZDN0I1Mjk1OUVCNTE3NkZGODJFMDNCOTQxMEExRDVEMjJERDJEQUY5LCAxMTFFNjY2QURFQ0NEOEJEM0JGRTM3ODNGRDg3RjA5NzQ4M0FBMzM1RjJEODIwNkVEMUQzN0I4MUY1MDhEMTlERDYxQkFGOTNGQ0Q5NkFFRjY4QUIxNDI0MDdFNjFGQzhDMUZEQUE0NDU4RDZCQjZBMDA0NEU2RjAxOEFCODY4NkY3RCwgMTMxRkZDRDVCMkQ4MDA2M0VEMjgxNUJFQTEzQTVBNUQxRTExMDQ1OENGQ0I2RjM2Q0NBMUJGQTU1MzQzRjg4MjNFNjhEMEFGODA0MzU1MTAwMkEwOERCQTAzOTI0NTExN0REMDcwQjg4RkY2MUE5QTE1Q0ZGMTQ1QUFFMEUwRjZDQTkKK0Y0MDQ1NzFGN0MwREMxRjQ2NEZFODhBMEIyQkMzMUU1ODE3Njg5Nzg5MEVCLCBGMkQ0OTY0ODM1ODRGMDFFMTM4MEZGOTFCNDc0MEI1MTg1OUVDNjBBQkRFRDRBRThBQ0U4MDNDNjZCODIyQjVGRjY5Mzg5MkE0OTY2NDk0MTVGRENBOTg2NTQxRTM1ODYzQzMwMThGRTMzNjM4Q0U0RDI0MTFGNjVCQUUwRDcxNEVBLCA4QzRDRjg1Mjk0NzBFMEQ2RUMzMjlBQkY5RkJBRkYxNzBENjc4ODVGMUVFMTlGRkJFNkFDRjg0NEZCRjIzM0NCRDU5NUM2NTM0QUYxRTI3QzJGNjNFODVEOUVDMkY5RDY5NTJGNDYyMkMwNjY3QUY5Rjg1QTBFRjlGOTZFREREMkNECisyREMwRDA1NUU3NDI5NDVERDJFRkI5OUUyMTgzNDk1QjA4NDYzOUM2OUIyQzEsIDFCNEYwNDFBRkMyNUZGNDA3RTAwMzhBOURDRjVBQTQyQjdCOTk1NDJGNUFDODBGQUNBMzE0NThGMzZCNkY0NjZCNkYwNjYwQTIzMjY0RjI4Q0QwRUIzMTE0NEQ4M0EwMDEwMDIwNThEQkE4MTFFMUFBNjI2NUUzNEY1MDY1NEYzMThCLCA3RTRENEU2NDVCODBFOEYwNzBEREU4QTNBNUZFQjJGNTc4RkNBQjg0MDg1MTEyRDZFOTQ4Mzc3NTE1OTkzOEI1M0M4RUY1REVEMkNFQzU1NkQyMDBGMjBEREZFNjUxODkyRTAwOUM4RDVCRjhDQ0M5NUYxQTBBNUYxN0U4Nzc4OTBECis4OTQyNzEwMUI1QzdCRDE5NzhDRjJDREE2NDg5REMxMTE4RDJBRDUzRDE4NDMsIDE1MjY1OTcwNzIxMTZFNjhGNzQ3NjNCN0RCOTE5MzhBQjMxOUQ4RkFFRURDQTk0MkE1QkE2NDgyMzU2REVDM0RGOUU4ODk1Qzg4QTdEOURFNjU5MEFDOUNEMzI3RTY2RDlFNzU2MTNEQ0U1QTg5NTMwMzJEREUwQkVCNEI4NUQ4QjdGLCA5NjFDRDQxOTE5MjQ3MjJDNUVBQ0IyODVBRjI1NUU1NkEyREQ0QkFFOTU4Q0E1OTUyQzQ1MzhGRTVFN0FGRjc5RDJBQjM1MTVBNEIwMzFBMTFCOTVGMkFDNzZEQzc2M0I0MDI1N0NGRDlEMTBEQjZGQjVBMUMyMURENkE1M0RBOEM5CisxOUJDNzUzMDUyMTU3Mzc0QzZBNkQ4NjhGMkQ5RDk0MzM0QTc4MDdGQjc0OEM5LCA0OTlGQ0JBM0FCNzUzODY5REY1RDA4OUI1NTA4QkM3QTBBRjhGNUY2QTU0NUM3QkFFNEM1N0EzQTY5RjhBMDlBQTNCMzAwMzg5QzNBMDRDNzBENTlGNTEyMjgyOEIwRTlGNkVFOTM4NUM1MTJGRDMzNDg5NDA2MDVEOEE1N0ZEQURGLCA2NUFCOUNDNkI1RkU4RTAwNjM0NTc4MzMxQjAyMEMzRUYwOUQ1MTM4NkUxOTA0QTFCRTA3QUZFODMzRDAxOEZFQUIwMzNDQjAxRTg1NEQ4Q0EzNDMzQjY5M0M5MTY3Njk4NkFEMzEwRkJDMjZCQjVBMTcyOEVBRkUzRTRCNDMwODMKKzREMzU1RjkwRjY0MDVBNUU1M0Y0ODkzQUQ4OEQ4QkM5OURGNjgxN0YyNURBNUIsIDExODc4QzVCOTc0OTIzNTQ2Mzc1QUYwMzEzRkI4NDQ5MjRFRURFMUY3NkM4MDM1QzhFQzJBODE1MkQ3OUIwM0FFQjk2RjcxQzc2MThGODUxQjQwQjRBQjU4MTFDNDAyRjZCODc3RjIzM0M3RjZGNzdBOENGMDI1QkU2ODE5RDkwMUMxLCA3MUFEQjBBOTQ0MDFFMUNEODlBMzUzRDUwODlCNTg0OTNBRkEwOTNEQ0IzMjVEMThDM0E1ODJBRkUxQjhCMjUwNTU0NjdCOTNDNjFCMUY1QzM1RTg2NDVEOTBCN0U5RUIwNjJGMzZBMzlENjIxMDI5QkRGNkFBMDYzOUUyNTUzMkM2CitFN0EwMUVCMkUyQzEwRjFBRkJERDlCQjA4OUE4QTM1Q0Q5RTM4NDdENzE4RjExLCAxRUI2QjQ3NzUwNjFBNDBBQjFDN0QxNERFQTMzOUZCMENFRThFRjYxRUZFMzQwRjIwRUM3NkQ1MkFEMDNCRjYwQTFCNjYzMDE4N0ExRDBCNDFDQjBGMDYyQzkxRkI5N0NBNDU0RTc3OTM2QjE0Q0NDQkQ2RUNGRDM5MjA3RTk4RDBFMSwgMTE5MzA5RUJGQkI3ODdGNjJFQzA3ODZENUFENUVDRjE0NkQ3RjhENDc1OEM4OTY2ODAxODBCNUVCRjExOURBQkUwMzlENTVCRDFDNTAzMjUyQjI1NzEzQjI5RURCNTJERjY3Q0NEQjgzRjY4NTlCOEU2Njg5N0UzQkIzRUMxMEQ5RDkKKzJCNkUwNUMxOEE4NDMyRDUwRjM5OEQzMTE5Q0Y5RUExNjhEQUE4RDc4NTRBRDMzLCBBMDI4OTEyNUE3MTdENzkwOTA1RjdCMTE3MTE1OEI3NjQ0QUNDQ0E0NEJDOURENjdGMjc3OEM4OURDNzczMUIxODkwODA0MEJCM0Y4OTFBRkM1QjJFNTE2OEUxQkMyOTQ0MkI4QkY1QjVDQkMwRjNFQjIwOEQ5OTgwQTVEMUE3M0I3LCAxMjk1NDA4MjFCMDc5QkI3REI3QkY5RDkwNzVDRUE3ODMzNDU4RkZGNzc5NTBEREM5MEI3REE0RDMwRURFRTUyQjRDREVFOTUxOURBRjZGRjU4OThDQTMzNjVDRjAxMDdEMDdEOUNBOUREMERBMkJBNDdGREFGODIxODIzQUFFRDM0QQorODI0QTExNDQ5RjhDOTg3RjJEQUNBNzkzNEQ2RURCRTQzQThGRkE4NjhGRTA3OTksIDFBMEQzNkE5MTA4MkM2OTdDN0ZBQzRFNTA4ODdCOEE4QUI2QUYwQzgyRTI5QjY0OEE3MTQ0RjYwQUYyQzY4QTMxNkE5MERGRUUyMTMwM0ZGRUM3REYxRjlCNjUwNjc0Nzk0MzI5NTUyOUE2QUJGNDJGMjYyNEIyM0E2MDMyOEMzNzM1LCBFRjBCOEU4MzlBMzk0RkU0QUMxNDFCQTJGMkREQTBEQ0MzNTdBNTQ2MUVERDY2OEJERTQ2MjM5QUJBQTNBOTFCRUFCQkE1MjkwNDYzREFCQzEzQTQyNkM1RjI1MEYyNkQ1NTlDQjkxMzFEODlEMjhBOTUzREU3QkZFOEYyOTU1QTNECisxODZERTMzQ0RERUE1Qzk3RDg5MDVGNkI5RTg0QzkzQUNBRkFGRUY5M0FGQTE2Q0IsIDFCMDk5QzFBRDlERjZCNTc3MzQ0NDQxNkEyOEEyOEJGMjU3NDRDOUUyNEY4MEVDRDc3NTQxN0FFRDA2MkMxODc0RTg0RTM3NjhGQ0JEMUUyNzUzQzQzRUU3QjkyQUJBNkNEQzI3NjMyOTZCMEUzQjg4MzE2MzU2NTE3MjkyQUU5MDQwLCA5RkU0NjMxODYyOTc2MDBENjIxODJFRkM2RDUxODQ3NTgwMDVBODk0Qzk2REQxNzc0OTEzMzNFQ0QyNzM4QkU2NEI1NTc1RkIwQzQ1M0Q0OURDOTM0OEJGRDk3ODRCOTI3MTIzM0U1QzM5OTJEQUQ4RDNBQkRGMUQ0NTY3RENCMTZECis0OTQ5QTlCNjk5QkYxNUM3ODlCMTFFNDJEQjhFNUJCMDYwRjBGQ0VCQjBFRTQ0NjEsIDEwM0ExQUU4M0QwQzYzRTczOEY3RUZCMkEzNUM0Njg4QzkzQTc0RkU0MUQwQUZDQzNBQkY4RjVFMTU1OEYwMEExNzI1MDY3MzMxMTNFRjBBQTdCNDFCMUQ4QzNBNUE2RENDQkQyNTIwOTNFQzlCRDYyNzk0REI2RkVFOUU4NkQ3RUE2LCAxNUU0MDUzNDU0RDlGQ0MyRDNDQTg0QjdEQkVDNUMyNDUwREREQTMwMzVGREE3RTY3ODhGRkEwRjhEMEYwMzg3NTNBMkZCRDRDMTAzQUZGQkY5RDdFMzZBMkY4MTM5RkUzRENDMTM3RDQxRjA2MUE1QzEzMjhBOTkwMUZDNkIxNTg1RAorREJEQ0ZEMjNDRDNENDE1NjlEMTM1QUM4OTJBQjEzMTEyMkQyRjZDMzEyQ0FDRDIzLCA2NjIyNDlBRTRERDg3QUI1Rjk4RDhCRTRFMTczRDkxNjgxOTQ4MjMyQ0JDNUMzRjg3OUFCODk2NTQwMThBRTcwRDc5N0I4MDY5Njc3NDVFOUVCREE1NjEwMkVCRjZBNzJBQzlCRDUzMjVEM0Y3NTUxQTM3RDREMTIzMDg2MzA4RjkwLCAxNDc4ODY2QkIzNTBFMkFBNzJBQTE1NDAzN0Q2RDY1N0REMTIxNDA3MkFFMEU2QkMyQjg3MUZFNEIxNzhFNTVGODE2OEExNDc0MTZEOEE5MDQ3OEE0QzU1OUM0OTcxQ0U2N0MwNzY0RDAzNzU0RUYxNzEwMEM0QTgzOEI4MjU0NUE2QgorMjkzOTZGNzZCNjdCN0M0MDNENzNBMTA1OUI4MDEzOTMzNjg3OEU0NDkzODYwNjc2OSwgQTJCODA2NkQ3MDBBRDY5MTg2RUQ0NzFBMjAxNURGREEzN0QzMEM3MjAxNjU2OUY5QzU3MTcwRTc4QjNCM0ZENjA4NUI2RDJFRDgzQjdGQjBGRDAxMzU2NzFGREE3MTM3NTkzMUY0QkYyMUE0MDYwMEIyMTRGODg1NjgwMUY3MEJBRiwgRjNDM0E0RDI1NUJFRDgxRTlBNDNFNDQxN0M3RjJFRjFCQjk5MDEzQkNGOUFFOTNFMEFBMjczREE0MUIwNDQxRTVFRUI3MjI1NThBODlBNkE1Q0U1MEZBQzVBNTEzQTFDODU0Njg0NUNFNDA3MENCRDVBMEM1MjBERUE3MjRBQTFDQgorN0JBQzRFNjQyMzcyNzRDMEI4NUFFMzEwRDI4MDNBQjlBMzk2QUFDREJBOTIxMzYzQiwgNkI2NUU5QUUwQURBMzk4MDcxQTM3NUY3NTdCQ0RGODA5QzBERTc5MUQ0MDlENzExRjM1Mjc4RDk0QTFDNTZDQUUzNzE2RUEzNzdFOTFBNUIyNDY1MTExQUE3NkZEOThCREY0QTY1NEY5NzU1ODJCN0UwNDFFNzdCQ0YzQjFENzM3RCwgRDYzM0U0Q0VEOTc3QkUyMUQ2OENDOTk5NTk2RjBFRDhDNDg5MEI5MzhBQjg1QkMwNkM1QTJFQTUyQTQzOUE4RkY1QzcwQzcyODg0REVEQjE4RDkwQUVDMjlDREY2QjE3MDg2Qzk0Q0U1MTYyRTZGODRFNEE4MzA4QzREQzAyQTk1QQorMTczMDRFQjJDNkE1NzVFNDIyOTEwQTkzMjc3ODBCMDJDRUFDNDAwNjkyRkI2M0EyQjEsIDE3RkFBMUJGQkRBREQ5MEE4NTZEOUIyRkM0NzhGNTQwMkIxRDI5MThDODc2NjhGNTVCQTEwQ0U2NUY2NzZGMDc0ODE2OENBMEQwMkJFQjJERkFCOTVFRDQ5Mzk5RDlDNDQ5NUE5M0M2Q0UxMzdDQzNEMEI0NUFFMDMwREU4NUM0MUQ3LCAxMTYzNTgzMDY1MzI3Qzk0M0EzMEM5QkI2MDNDNDgwNzI3REVBREVBNDM3RDBENTg3M0U5OURGMEJEMzQ4N0RGRjI2ODZFOEFDOEFCRjNEQUIzNkQxOURCMkZBNTk2NjE1NUQ4QUQyQzMzN0I2NURCNzBBMDVEN0ZCMzgxM0I4NDdERgorNDU5MEVDMTg1M0YwNjFBQzY3QjMxRkI5NzY2ODIxMDg2QzA0QzAxM0I4RjIyQUU4MTMsIDEyODNCRTEyOTZGMkFFNEM0OTk3QkJCNjMyRUU2RDA3OTQ0QUFDQTdENjQxQ0M4QjNERkI4QTA5MDU5MTVCMDA1ODQ0NTI5QjkwQ0JCMkVCQjRDRjZCQUREMTE3RTI4NThEQ0QzMERENjU2MEY4N0NBQjM0OUYwNTAxRTkyNUFCQjgyLCAxM0FEQzM4MDdDODBBOUJDNTE5Rjc0NDE5QjQzMkYxMjBCRkRDOTE4OTkyNzI5QTdBREIzQUQ5NTIwNkJFQjc5MzAzNTk2MERBQTBFNUQwMDJFQThFNkRGRkY5Mjc0NzJBQzFEREUxMEFDN0UxOTZGRTc3QUUyM0M1RTFBNjQ3Q0NECitEMEIyQzQ0OEZCRDEyNTA1MzcxOTVGMkM2MzM4NjMxOTQ0MEU0MDNCMkFENjgwQjgzOSwgQThDM0FEQzMzMUJGNDBGNDU3NzIwMDc2NTc3Q0ZBOThGNkI2MTIwMUU3MDBEQjU4RkI0Q0E0NkMxQUVBRkJFOEVFMEJBNTJCMUJBNzI2NDVBMzM0OUI2M0I5OERDMjUyQzEwODkxNDAyNEJGOENGNzA2OTgxOTkzRERENjMxMEQ3MiwgMTg0MjNFQzZCNTA3MkNGMDA0QTYyNDY5OUMwMDNGMkQ3RkRDRTVFMjQzRENEQUZEQTExNzI3M0Q3Mjc0NkZGM0E5MTdFRkFBNTIzRkMyMjI2RDlCMzlGNTI1NjlERjUwOUZGMzQwQjMyRTcyN0E2QTIyRjNBMzNDNjJGNEYxQzM1N0EKKzI3MjE4NENEQUYzNzM2RjBGQTU0QzFEODUyOUE5Mjk0QkNDMkFDMEIxODA4MzgyMjhBQiwgMUZDRTdBQkM4RjgwOUZERTYzNzU4RDFFOTM1QUEyRDgxMDc3MzAwQUVDMkMxNkFBQ0UyMURENkVERDkzRkI5MzMzRTA0QjhCNDAzOTAyQzlGMUI3MUMyRkRGOEEzMjE2QzIwNTk4QkIxNkRDOTBFQ0M2RDA2Njc5NEVDNjNDQjU5MUMsIDNDNjFEQjFCOURFRTA2Nzc1NkU5NEE5NjNBMkM2RTNGNEJCNjgxRjI4RUZBM0QyMDg0QkE2RjhBQkVGNDE0MTlFNEZBODk0N0I4QTAyMjk4NTQyRjRBM0IxRjQxMjI3NDVFMURFMTA2QzkwQTY5ODY5RTAzMDBDNjhCOENCQTE2OUQKKzc1NjQ4RTY5MERBNUE0RDJFRUZFNDU4OEY3Q0ZCN0JFMzY0ODA0MjE0ODE4QTg2N0EwMSwgRTZCRkJBNDBGRjEyMEUxNkFBMDBDMEY2NkE4MEY3RENEQkQ3RDZGQkE4RUVFREJCQTAyQTk4Qjc2MEEwMDA3MDVFODVEQTBDN0Q1MEM0ODc0MDA0N0YwREQ2OUJGOURGOUM2MkExMUYwRjExNkVDQTE4RTRFQTU0NkFGQTFCRkQ4RCwgMTQ5QTNGQzI4QzYzODM1MDY2MzQ5MjY0MjVGMzNERDA1QzBDQzlCRDk0ODBFMDYxMkYwQTVENjI4QjRCQTk2M0Q2QjI5N0E0NDM4NUYzRDE4OTVGQzE2MTM3RkQyQTM4QzI0QTAyMzA1MzM1NkE5OTNCRDRERUM0NTdBNDZEQzIyODIKKzE2MDJEQUIzQjI4RjBFRTc4Q0NGQUQwOUFFNzZGMjczQUEyRDgwQzYzRDg0OUY5MzZFMDMsIDFENENBRjU3Qjk0QzE2RDBBQTA2MkQyNTUwQzk4RjIyMEQxMUEzMjI1Q0EwQzdEOEUwNzJCQzNDMjQxRUJGRThENEZFMTgxMjE1OTlFRkVDMEJFN0VBNDJDMDk2MDEwQjM2OTNDQjg4RjIzNkE1MzMzNzI5NjcyM0E0RDU1MzRCNjY3LCA3NEE3QTdENkYwOTlDOEI5M0VCNTZCQjlCRkY0MEFBNjlCODY0RThDREM2QUYwOUM1RENDRjdCNkFCM0VCRjJGRUYyNzA3NDg2MDc0QkExMkJEMUNFRkM3RDBFM0E2NEQ5NTJFNDA3OUY3QTI4Q0U2OUZCMUU1NTBCNjZEOTA1RkUyCis0MjA4OTAxQjE3QUQyQ0I2QTY2RjA3MUQwQjY0RDc1QUZFODg4MjUyQjg4RERFQkE0QTA5LCBGQ0FGMzMwRDUzQUU0MDc4QjM0QTMzRENGQTc3MUU3REFENURBRDUzRkE4OENENzM0RkY3RTMyQzRDMTRGQzU0NEUwRDU1REIyQ0M3MUYwQzg3N0QxQzZDODY5MkI1ODJCQTVCNEMyQkUzMzUzMEUwMDM4NDk1NjczQzhDRUI1MEQwLCA1NjlDQ0M0RDhDRDBBM0IwNkRGQjRBRUNCMTQ4MEQyMkNBN0M5MjEyRUMyMjkzOTgzNEY1MTg1NkZGRkE5RDRCQ0UyNkNCQzFGNUJCMDJBMTk5NzY2NzBBRkUzQ0QwMzY4QUFFQUY1OUQ4NTlDMkMzMDg3Qjc5Rjk4NzdENDA0NDEyCitDNjE5QjA1MTQ3MDc4NjIzRjM0RDE1NTcyMjJFODYxMEZCOTk4NkY4MjlBOTlDMkVERTFCLCAxMzg1OEEyNkVDMzhEQTkwNDMzNjJENEU1QTQ2RjY1Rjk4NzlCOTVDMUY5RDU3NzM2MDMzMTAxN0MzQzc4OTQwRkJFNTk3RjNDQjMyMEI5MTY3QzMzQUExRUM3MDE0QzMyMTZBM0M3NEM2RTZGQjcxM0JFRjE3MjBCRkFFNkI4NUQwQiwgMTI3RTI2ODNCMjgwRjgyMTRCMzUxQTkyRjk1MzU5QURGMUU4RUUyMEE1NzEyMzQ2MDY5NjI2OUZBQUVEQ0IwNURBOEVFMDIwRTExNEU0NzZBMDc3MTZEQzhEMkQyOTAwOTdBQUY0RDA5QzZFMkVFMjVENkY1QTgxMUJFQkM1NTRCRjcKKzI1MjREMTBGM0Q1MTY5MjZCRDlFNzQwMDU2NjhCOTIzMkYyQ0M5NEU4N0NGQ0Q0OEM5QTUxLCBCQzkyMEUwMTE1OTdBNzNFMkVBN0VFNDM0MDUxN0VCREMzREM2ODQwMjE4OTUyMjc3MjNDNDc5ODkyOTNEODg5Mjc5OUMzOTEwQTIyQkFENDczREI5QjkyNkQ3OTk0RDg5QjlFNjM2NEMzODdBRERBNEE3RUM0Rjg5OUVFNDZFQUQ1LCAxN0M0MkNCNzg4RTVBNDA3NEY1QUM1MkJBMkM5REU0MTQxQzVBOThBMzRDMUJGNjFENjIxMUVBQUQ2MjQwQ0Q2NzhFODAwRURGRTU1RjI4ODMzMkJFNUNBOTM2M0NENDk1NkFDNjM0QTUwNjZFQzk1MjYzNkUzODYyODQ3QjExQUZEQgorNkY2RTczMkRCN0Y0M0I3NDM4REI1QzAxMDMzQTJCNjk4RDg2NUJFQjk3NkY2N0RBNUNFRjMsIDk3NTlFQzU4MkRDRDU2NzA4MTNBRkMxNDcwOTFFNDg1MDgxRkYzQzNENTYyQUQ3NUY2RjU2OEY4NEY2NEY1MTQ2QzQ3NDAyRkY2NzI0NEI1NzNBRkQ2Mzk1NTcwNkREQkM3NzAwOURFNkY3NEM0QjlGOTk4MUI5NzhDQUYyQzYzOUQsIDFFMjkzM0ZCQkZFMTAzRjY2Qzg2QUMyOTM4OUQ5REFEMjdCODc2MjIyNUY3M0EwRjNFQ0M0MThBMDJBNjM4NzJDNzkxRjEwNUMzMzEyM0M1NjJDMENBQzJDNkU4NzEwNkREOTMzNDRBMzExRjNBRUE4NUFFNEI2Nzk4MEI2MEM5MjM0CisxNEU0QjU5ODkyN0RDQjI1Q0FBOTIxNDAzMDlBRTgyM0NBODkzMTNDMkM2NEUzNzhGMTZDRDksIDFEQkQ1OTRBMEFGNjdGQzdDQzJDMkZFODQ0RTQ4M0IzQTU5N0M4NDU3M0YwRkNDRDg0NDM1MUQ0M0Y1RDU3RUQ5NzM4ODBCNTVDMDJENDhERkMzOEFGRjI4NDA1QjMxOTRCMEEwQzRENDY3NTU3MUYyQUU1RkZDRTkzRjNFMDg0NjZBLCA4MEQ0Mjc2NTBFODdGQzNDNzNENTJCQTY4MjU5Nzk0NkQwODY1RTNGOUIxNTE5QjE3RTJENUZGMUM2MEYyRkNGNzUzMEVDNTVGRTU4MEYzODU3ODcyRTk3NzQ5RkY5NUI2RDI2M0JDNjk3RTI5RkRDODVDNTE5NTNEOEE3MjA5NkYyCiszRUFFMjBDOUI3Nzk2MTcxNUZGQjYzQzA5MUQwQjg2QjVGOUI5M0I0ODUyRUFBNkFENDQ2OEIsIDE5MERFRkU3RDE2ODUzNzlBMDAwM0MyQTBEODJFRTc0NkJEQjgyREFCRTA5NTEwQUNGNzIwNDM2MEQ0M0MwQTMzMTRENEVFNzQ2MzM3NDFBNTI3NzE3MjNGRjFCNkM2Qzg1MjZBMTJBNTU3QkVDODk2ODc4RUY5RDExRTFCOEY4RjBGLCA1QkU1OTJCMjE3ODQ1RDRDRjkwNTkwNDZDNTNGODVCODcyNkZFMTEzQkRBMDA2NUZDQzZFNUVDQzBBMDZGOTNCQ0JFRTZBNjQwNjFFQjQ4QzQ5Mjk1NjFCM0RGOEM4NkZCMEJBOTc5NjYyREYxQ0YzNzc2QkMxOUQ3NEUyMDVBMUI2CitCQzBBNjI1RDI2NkMyNDU0MUZGMjJCNDFCNTcyMjk0MjFFRDJCQjFEOEY4QkZGNDA3Q0QzQTEsIDExQjZEMDI2RDlGNDg1MUYwMUQzNEQ3RjU3ODA3MDFEQUNCN0FCNkREN0NERkVDNDcwRTI1QzM2NTJDOUM3NzlBOTgyRTQ3NENDMTIwOEY5RUYyQkY1OTZENzRFMUZBQUE0OUI0M0U5NzNBMjQzRjhBNUI2MEQzRkI2NjAzMERFN0UxLCA2NEJGOEMxQkQ1NDczQjBENDYxQjQ5MjE4M0MyMjVGMEQwRjNBQTM0REI4QjdGNEM3QzNFRTA2MDcyQzg3QUQxNDA5MzBBNDYyRUZGRERCMTRGQTlFMUZFNDM1RTcxODAwMzFCN0YwMDVEMzRBMUQwQ0JFNDg4NThBQTI5OUJFRjFCCisyMzQxRjI3MTc3MzQ0NkNGQzVGRDY4MUM1MjA1NjdCQzY1Qzc4MzE1OEFFQTNGREMxNzY3QUUzLCAxNjRBQjM1MjNBNzI5MjAxQkQxRDE5MzgyRjFEQzU1RTY3MDcwNTYxMDQxMkE4RERDMTY4RkY4MTRGRUI4NDdCRDU2ODQ5QTk1MTY5NkVDRjlFMjI3REU4Mjc3M0I2ODE4QzkyQkIyNjI4NTYxQkUwRDVBMTg0Mjc5NEFCNENGMUY4RCwgMjJDNjk0MzcxQUVFQUYyNUM3QkM5MDcyQTg4NDBCMjhCNTlGNjcyQUU1RDE3MjYxQzAwMzAzMEU3ODBGRkNBNUU5RDAxRDk3OTMxRDIxODdEQ0QwMzU5QTRGQkJBRkY1QkU4OTkxN0EwMjMwQTczNDY1NzdCNUQyQzkzQjBEMUJGNAorNjlDNUQ3NTQ2NTlDRDQ2RjUxRjgzODU0RjYxMDM3MzUzMTU2ODk0MEEwQkVCRjk0NDYzNzBBOSwgNEJDNzI0MDU4RkJBM0Y2QjhERDU1QjU0OUZBRUNERUZGMzBFOUFFQzNFMUFCNDAzNTEwRkFCQjBGODY4Q0Y0QjE2OTk3MkRFNEE4NTlBODhDNDNCREM1MjAzQTkyNjU4MkE0ODI2MjkxMTYyMDU5QTVGODY4RTA4RDk0RkI2QTY2NSwgRjkzN0UzNjk5REMwRjFFNzUxNkUwQ0I1QUNGQjY0OEIzMkY0NEUxQzJBRkE2OEJCMDJDNTEyRjUyNzIzQ0JFODFCODg3QzQxQ0JCQTNENjk0QTdDMUVBRTIzOTVDNjg3Q0I2MDVGMDAxOUUxNTA0MTlENEY0Q0E0Q0M0RURGRjE3RAorMTNENTE4NUZEMzBENjdENERGNUU4QThGRUUyMzBBNTlGOTQwMzlCQzFFMjNDM0VCQ0QyQTUxRkIsIDFEODkyRURENTUwNDE0NEEzRjNCOUYwMDdENTQ1MjVDRjREODRBNjREMkY2NzM1NTlGRDdENDU2MDI5QjAyQzNEN0ZBMDEwRkRDRTFDRkQ2NzBFMTYzNzZDMkRGRDc0NkFDNUNGMzlEMkIwNUI2QTQ1NDUwMTNCNzhCMzE1QTRFNTVBLCBDMTcyMThBMzM5N0NCMTE1QTM1OTVERTc5ODA5RUYzQzRCQTJCMTVBREE1RUIyMkNFNDAxNUFERTlFNDAyM0VBODAyQjhBOERGRjM4NjYwM0E2NzBCNDk4N0E5ODQyMUY4Njg2ODI3OEZFNUFBMDQzMTQxNTk2QzcyQUQ5MkEyNDQKKzNCN0Y0OTFGNzkyODM3N0U5RTFCOUZBRkNBNjkxRjBERUJDMEFEMzQ1QTZCNEJDMzY3N0VGNUYxLCAzQzVCMkIxMTJDRjExQkIyMzVBQzFCODAwQUY2RTMxRTM1NDcxQ0JGNTBBRUQ2OThCRjc5Mjk5QzA4QTM3MzhCNDFDNjEwNDJEOTcwMjAyQzM5MTNGNEQ0OThCMEI0MUIyMEExM0JBMzEzMTE5Q0I1MzI4NzJCMUM0QzYyMzJFMDdFLCAxRDVBQTQ4RDIzNzY0RkM2MzU5QTEzRDk4OUY1OEYyMkJGRTkyMDdCMTQ2OTkzRTFFREIzMDU2MTcwRUM5MzY1NDBEMEM5OTUzMjUyQjdFRUJGOTdFMTNDQTA0NjIxQUI2MkNCRTVGMTExMkE0QTNDNkU3QzFDREU0Mzc1NUI3MzU2MworQjI3RERCNUU2Qjc4QTY3QkRBNTJERjBGNUYzQjVEMjlDMzQyMDc5RDBGNDFFMzRBMzY3Q0UxRDMsIDEwRTg2NzNDNzU1Qzg1NERGREE2MkI4N0QzQkQyRDdFNjNBRjY5NTYzNjU3NEJCQUJGMDRDRDM0M0ZBNzQ5MkZFQ0E3OUFCMDQzMDMxREQyQkRCOTBDQ0FERkUzRjY5MUE4OUUzQTEzMTU2NUQ2NjM5NkNFNjlFMjJGRDYwODNCQjY3LCA3NEFFREVEMEQ5NjJBMjhCNUU3NThGMTQwMjM5QTIxNDU1MjczRkE4RTE5MTNGRDRBNTMzNTdBRDVCNTQ2NjhCQUQ0QTJEOEEyQTE5MzREM0IzM0VEQURDQUIwRDcyNzUwOEZCRDE4RThBRTM4QjVBMDYwMEQzNEFERjEyNzZGMjcKKzIxNzc5OTIxQjQyNjlGMzczOEVGODlEMkUxREIyMTc3RDQ5QzYxNkQ3MkRDNUE5REVBMzc2QTU3OSwgRDA3Mjk0MDZGNDI4QzgwODM3NzY4Njc4QkI5ODMwMjdBRTc1MDVERThGRTI2MjJDNUNDNzE0RkJFODIzQUYzN0UwNzM0Q0NFOTRCM0I4NzQwNDg5NjU4NzA1QTg5MUY4RDg4MEMyREJGMTFBNTFERkMyNkEyRDJGMTgyQjZBNjhBQiwgN0NFOURBRjExRTE0QUE4MjlEQkY1MjY0MkVERjlCNDkyODY5ODM1MDcyRkI5OTEzQ0I3OTVCRTE4NUMwQzNENkFBREY4NTlCMkFFQzIzQ0UyN0I2NEQ3NEMyOTAwQTlGMkVFNDdBNDM1ODRFRTlGMDM1MDlDOTRDNkIwNUE3MEJCMgorNjQ2NkNCNjUxQzczRERBNUFBQ0U5RDc4QTU5MTY0Njc3REQ1MjQ0ODU4OTUwRkQ5QkVBNjNGMDZCLCAyOUYwQTlBNDUzRUJDRkQ2MkMxRkFDQURCRTM4RDIxMUU3MzEzRDZFMkZEMzNEOTU4RTlGNkMzQzZBNjExRDdERTZBMzc3MEQ1MDRDQzA5NjQ2QzJDNEQxMDk3N0VGQUI4NDcxRUU4MzZBODA4NDU1NDE4RjdCQzlBNDUzNzA1RDAxLCAxMUY5NjYzREY0RTRBMDY2RUFFRDJDREFGMjkwRkI4MjhENjI1MEVCRkE5NzFBODQ1NzI4RDA1MjFFRkMwOUJDM0E5MTZGQkNBNjY3RjU0ODIxNkU2MjRCRjUzMEJGODExMjg1OThEOEExMDYxQjA0MERERkM1NTdDQzg4Rjk0MThEOQorMTJEMzQ2MjJGNTU1Qjk4RjEwMDZCRDg2OUYwQjQyRDM2Nzk3RjZDRDkwOUJGMkY4RDNCRjJCRDE0MSwgMTFDRTZCQUJDRjlFOEREQjMxRkU5NzFEOUU0NUQ0QTVDODQ5RjlEOTU5NUJCRDZERkQ4RUUyMjM4RUE1M0FBNDFGMUI1RUJGN0QwRkVCMzM2MkExNDdBMjlGQzE4NkQ4MTY5NjA4RUJFRDY1MzBCRUZFNTU5QzczNUI1OUZFRjM2N0IsIDNCN0MyQ0E2NzgwRkI2RTVCOEE5QzMyMjIwOEQ2OEY1RTc1MDQwOEExNkQ1QjY0RUZBODA0MDE4NzFEMTBFRkM1RkFDQzE0QTJCODVBMjlCRDAzQzFEMjgzRUNDQjczN0RGQzUwODNFOUJFQzU3QjY2Mzg4QUFDMjExNzgwQzRENzkKKzM4NzlEMjY4RTAwMTJDQUQzMDE0Mzg5M0REMjFDODdBMzZDN0U0NjhCMUQzRDhFQTdCM0Q4MzczQzMsIEQ0NzY3MDY2RTc1RjE3MDI5N0FGMEEyREZDOEI5OTJEQUVCNkM5NjU5QUUxODUzQzg2NDE0MURGODk4NkNCQTQ3REIzN0FGQkJBMDlGM0I1QURGMjFFODcyQTlBQ0M2QjZBNTVDNjU3QkEzMEEzMkE1NDY1MDRFMDU2MDAyNjRCMSwgNkFGMzBDQUYzMEJEQkVCQUU5QjdCOUU1NjEwNEQxMUU2RDFBNzcyN0Y5NUMwRDZCMUVBN0IyRjI4OUQzQzQyMjA1NkE3NTJDRTY4NEE5QTFFRjMwN0NDN0EzNDNFQTQzOTlCMDlFODhBRUE3ODMzNjdGM0YzM0JBRDdEQUMyODA3QgorQTk2RDc3M0FBMDAzODYwNzkwM0NBOUJCOTc2NTU5NkVBNDU3QUQzQTE1N0I4QUJGNzFCODhBNUI0OSwgMTdCOENEQTczMkEzOEJCNEYyRTVFRUQ0NTk4QzBGNTU5QzA5MTYyQzMyQTdCNThERkI1MzEzRkQxNDk5M0EzM0UzQTBERDc0RjQwNzMxRTM5QTU3QTAyRkE3N0MwOTZEQjhBODAyMTQyNDU1MDA1ODBCRTRDMDEyRkE1RTA2NTY0NDgsIDFCNTQ0ODAwMjEyMDE3RDMxMzVEOTQxNEQ3NDYyMkM3RUIzODg0ODVGNzRDQ0FFODBDN0MyNUUxOUMzMTNBMzlBMDQ4NzYxNTIxRDczRDZEQjRBQUE2QTkzMTJBNkQ3MkNENjRFMURCNjczMjVFMDRDNzQyMzNDNkU2MDAwRDJBRTU5CisxRkM0ODY1QUZFMDBBOTIxNkIwQjVGRDMyQzYzMDBDNEJFRDA3MDdBRTQwNzJBMDNFNTUyOTlGMTFEQiwgRUNEQTJBM0I3RjVBMTY0NkJDQzFEMTYxRThFMTE2NkNDMkZDNDM2QzIxMTJCRjYwQzA5MjlEQzQzNUQxQkI5ODdDQkRCMjdEQjFDRDRBNkE0Q0YyNzBEMDdDOUY5MDI0M0VCRTQzMkFCQjZGNTk1MTM0RjM2NzUzMjRGRUFBMjRDRSwgNzg1QjVFMDIxQjExQzJDQ0UyMUVEQ0RDRTNEQzg5MzYzODUwMUY5RTc4NjQyQkM4REYxRUFBM0JGMDkzNDQxRjE4Njc1RjFCMzcxREUyMUM5MTJBNDY1OTRGMTIwMjk5ODEzRUQ0NjBDRTExOTVFNDc1QzZBRTFBMkEwNTAzOUNCRAorNUY0RDkzMTBGQTAxRkI2NDQxMjIxRjc5ODUyOTAyNEUzQzcxNTE3MEFDMTU3RTBCQUZGN0NERDM1OTEsIDE1OUY4OEZGMUUyRjJGRkNDRUZEMjNGOEQxQTM4QTRGQTJDNTIyRjZCOUIxODE0N0UwM0Q3MkJCMTJDOUMyOTU2QkM5OTQ2MzRCMEE3NERFQjIyMTk0QTAxMUM1QjY2NUZBMERCMDUzNzA3ODFBODZENjgzQzlFNzU2NEFDN0RDQTNELCAxRTcyNEZDODc4NTQ4NkEwRjY3N0M0NURCQTE4NzdGQzkxQzZEN0NBQTQyMjNCMkY1OTE2Qjg2QUE4MTRBMTMzMzdBNjY3NDdBQUM1Q0U5NTMyQzgwNEMwMzQxMEZCODU1OTM5NzA1OTEwMzE0N0Q5RUE4NEJCNzU2RTBGRDU2RUExOAorMTFERThCOTMyRUUwNUYyMkNDMzY2NUU2QzhGN0IwNkVBQjU1M0Y0NTIwNDQwN0EyMzBGRTc2OTdBMEIzLCAxNjEwQTVFQ0ZFM0RFRjI4NDk1N0I2MEE1RTkzRDhBMUM3NTM1RTRCNkVEMTJDNzYxRTNCMEU0NzFGNzkxRDhDMTgyMzQ2NzVGMjFGMzAyNTJFNzc2QkFDOENEMTQ2RURGMzZBNEE4RjhFNEE1MzcyNURGMzA2QTBEMzY3M0E1N0UwNywgMjlFOENGNTUzNEJGM0REREZFNzc3QzJEMjk5MEQzQUFDMTkxREUxRjQ4NEExNjdBNThERjEwNzU4N0FBNTY2MjQ3REVFNDI1NTdDMTU2Q0YxRkNCQTM2RjgzNjNDRTdDM0Q4NEYzNkNDQUZBM0U1ODNFQUZBQThFRjVCOUNBQ0ZENworMzU5QkEyQjk4Q0ExMUQ2ODY0QTMzMUI0NUFFNzExNEMwMUZGQkRDRjYwQ0MxNkU2OTJGQjYzQzZFMjE5LCBERUE2MkM3MkQ2Qzc4MDUwRTc1QzAwMDM1RTFBRjhERjI5ODlDODk0RDY3MERCMDFGMzQ5RkVFRTBERTRFNTQ2OTI1NzE0QUYwMTVBQjI3NEVDNjE4QzQ3NjhCRTI3NERBNzlDRkEyMkU5NDUyN0RGRkNGRTE0RjQzNTREMTZFMkNBLCAxMjM3OTcwMjM2MzU3NjE2NzkwMzRGQTE5NTBBRDI4QzMzQjBGOEQ5Njg0NUVFRDVEODhDMDJFNzU2OEI2Q0VDNzQ4MEE4NzcwMTkxQ0IyRkExNEQyRDY0ODZGMEUxMEUzMDdBQUEwNUMxMDU2OTk1QkVBQjMyOEM5QjdCNkRBODVFOQorQTBEMkU4MkNBNUUzNTgzOTJERTk5NTFEMTBCNTMzRTQwNUZGMzk2RTIyNjQ0NEIzQjhGMjJCNTRBNjRCLCBCODdCQkQxRjYxMUJGOTJEODk0MTY5QkZENEYyMzU0N0UzNkQ2N0RBMDMzNkM2M0IxNTMzQTlDRTIxQ0RDOTZBMEM2NEM2RkREMTc4RDNGMDhGOUI4RkE2N0M1NUYyOERDNDdBNkZFODc5MEY1MzUxN0QwMUE5NjFCMjc2Nzc0RUM5LCA4N0Y3RUMxREI5ODgwQjQzRUY4ODM0RjMyQjVGMDMyRjc0NTlBOUI5RUNCMkE3NUVDMDExRDgxMzUxRTQzQTZENUI3MzU0MUExRDlFNUE5RTUxOEI5QjUzQzQzNjczMzBCOTQ5MkE2NURBNDI5RUE1QzhDRkM0REZFNkQyNDRCNjdBCisxRTI3OEI4ODVGMUFBMDhBQjg5QkNCRjU3MzIxRjlCQUMxMUZEQUM0QTY3MkNDRTFCMkFENjgxRkRGMkUxLCAxOUEzNEQxQjc2QTE4RDBFNjA3RUY3N0M4QzgxNEZGMDMzNjAyQTIxMDYyQTFFODNBNzQwQjI4NjJFNjZGMkExNTYwRDQ3NTFBQ0UxOUI5NEZBNENFMTFDODY1QjY0QTUyNTE5QzEyNkE0MDBGQTFENDQ4OEZGOTQ1RjRGQjVEQjYwQywgOTBGQjVDQUY2NTA3NTFEQ0VGQTE2QjZFOEIwQ0Q1NzMwQUI3Nzk1NTAxNjMwREE1NDgxNDFBRDY1NTE2REMyMEE3MEZCMjUwOTkxRDE3OTE5MDZBQTgwNTFDODQxRkM5NUZGRUMxNEIyNUUxMDNFM0ExNDcxRDRCMzM4NjYwMzlCNAorNUE3NkEyOTkxRDRGRTFBMDI5RDM2M0UwNTk2NUVEMzA0MzVGOTA0REYzNTg2NkE1MTgwODM4NUY5RDhBMywgMUQwODMxQjZGRDNDQUJEQThCMUQ1MTY2Njc3NTlFQjQ5MTE0RkZBNjlGNTM3RjQxN0E0QkVDNDY0MTIxNjU5RTBBMTE0NERFOUY5NDM2RjA3MUJBRkEzRDEzQUI3QjQ3NTQxMTBCMjMwNDExRjZDNUQ3QjRFNTZFM0I1QkVGM0Q5MkIsIDM5MjUzNURGMEEzMUE4OTdFNjY5NDY1MUE1MDkzRkE5QTZBQUEwMEVFNENDNkJENTc0NjkzNjlFMDIzQTc2RTEyNDkxMTdBM0Y2OTg2QUVBRDFGNjI5OTYzOTczMTk3MzJGRkE4NjQ1MzZDNjc4MTY3RjcyNzg5OTFGN0ZGMzU2ODcKKzEwRjYzRTdDQjU3RUZBNEUwN0Q3QTJCQTEwQzMxQzc5MENBMUVCMEU5REEwOTMzRUY0ODE4QTkxRUQ4OUU5LCBFMEIzRDNDNjNFOEIzM0UxRUQyNENDNkRBMzNCNkQ3Mjc0MkE1NDVDMjE1OEQwNDUxMTk0QjNFMTA5MEJGM0JBRERFMjRFQjk5RjU4RkIwMUM2MjUyNDE2NEY2MTg4QjA4ODRBRjE4QUFBNkE0NDhEQTAwNzQ0RTJEMUM4OTNDNDMyLCBDNjNGN0FBNTRDODk1NUQzOTA5QThFMzE5QzkxOURENjgyQUVFNkM5RkI0QTkxRDFFNUYzRjlDRjI5NjIwMTJENTRERDFENjgxREYyQzE4ODQwRkIyMjBBNjRGMUQ3ODg2Q0FGQkU3QTkxQUIxRTk2REJCMDQ3NkRFNzU1OTFCQUYzCiszMkUyQkI3NjIwN0NFRUVBMTc4NkU4MkUzMjQ5NTU2QjI1RTVDMTJCRDhFMUI5QkNERDg0OUZCNUM4OURCQiwgMUI0MThBODg1REJFMTBGMURFMUQ0RkFBNjYyNUU3QzVCNTBFN0YxMDNDRjE5OEE1RDAzNzcxOTczMkZCMDJBMjQ3NDIxNzA2MTFEOUExN0ZGNDQ1N0RENDJGNTdGMzFEN0E2QjkyOTdBQ0E5NEY1ODg5OTY4NDU1NTVFOTEyN0NDMjAsIDEzQUIzN0FFN0NDNkNBRENBNDc3MUQ5QzAzOEU5OUUxRDU4ODc0QUI4OTRGNUI5QkU4RUM5RjE0RjNBNzc1RDBDQUMxOUY4QjM0QTM3NTE4OTZENTlENEYwNTkyREVBQzJEOUM1MDQ5MTc2RThBNjhGMjk4NDMyODE0RUQ5NzczQTNCCis5OEE4MzI2MjYxNzZDQ0JFNDY5NEI4OEE5NkRDMDA0MTcxQjE0MzgzOEFBNTJEMzY5ODhEREYyMTU5RDkzMSwgMUEzNTlBMUYzRDE2NjdDREM1MTlEMzZDMTk2MkNEQ0ZCQ0VGNzYwMkU0ODkxMEE1QjMzMjg4QTVFRTU0N0I2QTNGOTRFRkY4QkVDMkU1NDdCNUE5MTM0QTkyMkFFNDg5NTNCNTM2OUNGMzk4MzlGOUE2OUYxMTA4MUQ3NkE2QkYzQTUsIDE2MTVDQ0E3N0FFQjk2Q0UxNUVBQjYzQzUxRUFBNkVFRjUyNjFCMTYyQzc0QjNEQzA4NEM5MEIyNzBERDUwRUY3M0ZEMEVDREZCRjRCNUJEMjMwQzE2NThCRjk3Mjg3NUQ5NjE2NUY3NTkxRUE0ODE0RkU0NjE3RjNBQzdDMjgzNzU0CisxQzlGODk3MjcyNDY0NjYzQUQzQkUyOTlGQzQ5NDAwQzQ1NTEzQ0E4QTlGRUY4N0EzQzlBOTlENjQwRDhCOTMsIDFFNEZFMjk3RTcwM0M5M0UyQjc1MTAwRjQ0QjZBNTJCRUUyNzJBRURFN0EyMUFFOTY1OUU0QkE0MzQyOEU0MzkyQzFDMjdFNUE2QzlCNjZBM0Y0MTJGNEJGMzg0M0FERTA0NUExQzFEQjE2MkQxNDg1NzU1RjI1OEQzNjVCNDhGMTNBLCAzQUY4QzA1NDlERDNGOEIwQ0RBRjk3NTVBNjQ5MjU4OEZCOTY4NUQwMDhFRDI0M0MyNTc5OERBM0MwOUYxNTc5NUY3RjRFMUM4MkJENTU0QjZDMDhDQjgwQjQyNUYwMDk2NTJENzY5MkY1N0FEMEIzMTJBQzlCMDVDOEREQUMxRjNECis1NURFOUM1NzU2RDJEMzJCMDdCM0E3Q0RGNERCQzAyNENGRjNCNUY5RkRGQ0U5NkVCNUNGQ0Q4MkMyOEEyQjksIDIwQ0EzNzI5MjQ1MDEwOUU0OUEyQTlEMDY4NkQxQjQzQjY5NjM0Q0RBOENDQkY3OEM2RUQ3QTI5RkMxODE1RUYzQ0I1M0Q1MjIyNDk2RDVGMEVCQjlFODM1QzkwNDkzQjkwMzYzRTY5MDNBNUVFRThCNkRCOTc4REU4QTVGQUQyQTksIDczMEQzODExQTQ2RkRGMTgwOEY1OERCMTk1REY1RDJCM0E0RkJERTE4QzhBQTdBNDA3N0E3NkE0RUZDQUE0NkNCQTk2RkExMTIxNzBGNkY0MzAzNzNEMkNBNDU3QjNENTcwOTRGNDg2RTlCNjFDRjhFREMxNTUyNjE3QkY2NkYxRDMKKzEwMTlCRDUwNjA0Nzg3OTgxMTcxQUY3NjlERTkzNDA2RTZGREIyMUVERjlGNkJDNEMyMTZGNjg4ODQ3OUU4MkIsIDE4RDY1MTQ4N0JFRjcwMTYzNTg1QzNDODM3Mjg3MkVCODZFNkE5OTBENEU3MTlDOTc4QzkxRjNBNzQ2Rjc0QTIxMzYwQTY0QkJCNjY4NjVDM0VERTk2NERGQUEyNzQzREI0RTRCRDYyMjIxQUE5QUExMUJGQTlGNTM5NUU3MTMxRkQ0LCAxMzA4NUQ4MzdDQzY3OEE4ODdBNTFGOEQ3MUVBNEMxOUQxRDBFQTYwNDVGRUZGMzg4MEIyNjdFRDcxNjJEMjc3MkZCMUI3MUZFRDBCQUM1OEJCODI0MTRGNTZCMDg1Mzg2NEQzMkUwM0VFMjA2OUVBNUMyQ0M5NzdDOERBRUQyMzgyNAorMzA0RDM3RjEyMEQ2OTZDODM0NTUwRTYzRDlCQjlDMTRCNEY5MTY1QzlFREU0MzRFNDY0NEUzOTk4RDZEQjg4MSwgMTgwRjM2QTAxMjlCNTI3QUEyNDA2OTE4QjM1MzE3QTdCNDZBQTU5OEY5NzIwNjZBMUE1MDczNThBQjA5Mjg1OTI5OUQzQ0M1OTAzRTRBQzg4QjMzOEQwQUNFQ0ZEMEVCMjA0QTM0NTNFMDFDRTAwNDlDMDE3NjZFRjgyQzVBMzQ5MjgsIDZBRDk3QTBGMzBGQ0NFQ0VGMUZFRTY5NTcxMUUzQTQ5NkU0NkRDMjg0QURDMUNFMjAyNkUxNEI1NjlGN0VFMjc3MjlENTVDMUY3QzBFNDUxMUIzNzE5NDkyQTZEM0RDQTgzQ0YxRTI4REY3NzIwMTk0NEZDNDFCQkY3M0EyQ0JCNkEKKzkwRTdBN0QzNjI4M0M0NTg5Q0ZGMkIyQjhEMzJENDNFMUVFQjQzMTVEQzlBQzlFQUQyQ0VBQUNDQTg0OTI5ODMsIDFBNUI0MTU3RjBDNUZDQjkwQTU4QTVEQzFEMTQ5NzVCMTU5NjJGNDlEQkJDMkVCQTMxQTY1QjcwMUMyMzhCMEFEMDIyRTI0RTQ3RTU4N0VENTcwNTk1QzkxNjJGM0U0MjFCN0Y3ODA0QjYxNTRCOEQ2MDY2NDFBODJBN0I1QkU1Q0IzLCAxMkYzNzYwN0JFMzZBQzRERDQ3RENCRTgwMTVCNjlCQjU4OEU2RkEwQkMwMTM5MkIyQjM2QzZFMjkwRjVFOTY5QkY4M0EyRDFCOENBNEVGRDc5QUM3RTVCMjI0MTM0NjUwQzJDMzlFRjA0N0FGNDM3OTFBNDEwQUI0RTY4ODUyRjE4NgorMUIyQjZGNzdBMjc4QjREMDlENkZEODE4MkE3OTg3Q0JBNUNDMUM5NDE5NUQwNURDMDc4NkMwMDY1RjhEQjdDODksIEU2M0E0RjU1MUQ5MEI1MTRGNDgzMjY0OUEwNkNBRDQ1MjM5MTRFNkJGQkMzOTFBNzI2RTUwNkVDRTk4NjUxMEE1RUQzQzU1MTc5NDA2Mjc1NUU1QTIyOEYzRTk5NTdCNThERUMxMEQ4MEZGNUEwRTQ3OTgwOUYzNzVGMzIyNzRBMTMsIDFFQUU2QzQ0QjEwMUZENDgwNUNBQzdGQzNCRjk3QkIxQTY4MTQ5QkIxN0MyMzNFODVFQ0Y0QTg4MzZDNTg2MUFDOTJBQTYwNkVEMTIyMDlFRkUxQjFFMzAyMkNDMzg3MEExRDUzQzlCQTFBNDM0OEZBQTVGQjAxQkQ3MjRCQ0FBM0Y4Cis1MTgyNEU2NkU3NkExRTcxRDg0Rjg4NDg3RjZDOTc2MkYxNjQ1NUJDNEMxNzExOTQxNjk0NDAxMzFFQTkyNzU5QiwgMUYwMkU3MEZFM0RDQUMzNjE1MUVEQUUyNUM2RDcyODEzQ0E2REZFMzY0NzZGRDQ2ODJFNTYyRTgyREVFQTEyQ0REM0UwQjM3QjYwQUExMEY3MTk1QkJGOUIwRkY2MTkyN0Y0NDRBODBBQzBCNEVEMURCMTQwNzRGNEQ1QTVFNDQyNywgQjEyOEY5RDgwRjZFNThEQUUyRUZBRkQ5QjJDMjg0RTlGREY0MzY4MUFGQ0VCNjY5MkUyRUM1OTBDM0Y1MkI1MjdGRTU3NEI4MTZGRTg1NDJDNTI1M0Q3RkJDQUZFMDExQkNFRDUyQ0VFMjBGNTFDRDYxMkY1NzA0NUNGMEVGRUUxRgorRjQ4NkVCMzRCNjNFNUI1NTg4RUU5OEQ5N0U0NUM2MjhENDJEMDEzNEU0NDUzNEJDNDNCQ0MwMzk1QkZCNzYwRDEsIDlDMDAwN0VBOTk0MzVCMjUzMzQ1NEU5MDgxNzMzOTY4NTJENzZFNTQ3NTNGMjcwRDI4RThGMEIyRTE3QUM3RUIzMzk0QTA1MkYxMDU1MzhBQ0VEREU1OEZBMkI3Mjc0OTExRjk1MjAxNTA1ODMzM0ExMjNENTI2MkIyNDE5MzM4MTgsIDEwQzJDODI4M0Q5RDM3MDlFODI5NzU1NTUzNDU4N0Y5MjBBQ0Y4M0NBQThENkI5MEVBNjY0ODZGODJCMDJBRDlDMEM4NUFBQTBDMTNFMTUwNEI3MEQ3QzYzMEY3MTk3MUFERjZFMkRFNEQ2NzJFMUFBQzBEQjJCOERCMEM3MjZBNjgwCisyREQ5NEMxOUUyMkJCMTIwMDlBQ0JDQThDN0FEMTUyN0E3Qzg3MDM5RUFDQ0Y5RTM0Q0IzNjQwQUMxM0YyNjIyNzMsIDEwQzE5MDNGQjhBMzJDRjIwQzdBMTJEQUQ2ODBDRUJCMzA3NjA3ODc5MjQyRDA4REJEQzhDOTAzQzExQkZFODUyMDg3MDFCREFDRkUxNjEwOEMyMkIwQkQzM0QwMzBBQTk3MDBFOUZERUY3OUM3NEU4NjYwMDEzNEE4MjIyRDlBNTAyLCAxM0E4OEZENkQyMjc4OEU5NTU2NjZENjAwMDhENTkzNTRCNjMzNEFFMjUxNjIzMUM1QzAzQzNCRUY0NTZCQUVBMTE5MTcyREQ3NDMwMUY1M0U4MDM0NEQ0QTdBRTc0MEMxRjM1N0Y3MUQ2NDVFMTczMzg1ODdGMDM2RDM4QjM4M0IzQgorODk4QkU0NERBNjgzMTM2MDFEMDYzNUZBNTcwNzNGNzZGNzU5NTBBREMwNjZFREE5RTYxQTJDMjA0M0JENzI2NzU5LCAxQTFDRDcwRjFFNjgzRUNGMTI3RUMyNzcyQzM3OTUyMjk3NjQ3N0UxRDA2NzhBNTBDREZDNzk2OEZEQTQ5MjdDNERFRDg4RDUyMDQ3NEQzMTRGMzIyREJENzY1NzFBMjY5OTMxRUNENTQzNTI4MUQ5MkQ3RDU3RTcyRTdFNjU5RjVENCwgMUI2MjdBM0E1MjZEMUQ3QkM0MUQ1ODQzQjIxM0JBRkREQTI0ODY2MkJCNkUxOTNDQkNCMkI2REQyODY5NjBCOTVEQ0RDRTk2NDAzQ0VENzQwOEVFMzYyRDIxQzA0MUJDMEYzRUZFNDEyRDYwNTFEMUU1OTQ2NEQ0NzIxMThCODc1MjgKKzE5Q0EzQUNFOEYzODkzQTIwNTcxMkExRUYwNTE1QkU2NEU2MEJGMjA5NDEzNEM4RkRCMjRFODQ2MENCMzg1NzM2MEIsIDVBNTQzRUJCQjFGODM3Mjc0ODczQjkzRkQ1OTEyM0UwQzQ1RkVDQ0MwRjBGNTJBMDM3RjEwMzMyOTYwQUFGMDE5MzQwMkE4NjQ4NUMzRkQ5MDRDMzQ5RUEyRUUyQTlBQjNFREQxQzM3MDdEMkJCN0VCMDA3MjdFMzNCNzgyRkZBMEQsIEYyMjM3NTg0NkFGQ0JBNjc1NDRFMjcxNkI2QTkwRUI1NkFGQUY4QzVCODJFOEIzQzhCOEFGQzBGRDYyNEQwNzkwMjhFRjY4NTQ3MUQ3RUVGQkE0RjI3Q0ZERDM0RkY0NUU5NjY2OThCQkIwNThBQjIwQjBDMjU2QUFEN0RFQzAyNkIKKzRENUVCMDZCQURBOUJBRTYxMDUzN0U1Q0QwRjQxM0IyRUIyMjNENjFCQzM5RTVBRjkxNkVCOEQyMjYxQTkwNUEyMjEsIDFGM0Y5QjJDQzlDMUUwNzg4MEE5NjY5OEM3NTNDRjU2OTdBM0JCOEYyMDQzRTI2QTIxMTAyNkMwQUE5RDNDRUY1MEIwRjhBMTJCN0Q5OUU4RkRFQ0NBM0JGOTIxRDE0MzczOUFFMEQ5RUEyOEEyRTNEQjRCQzQ5NTkwRkUxNkJCNEFFLCBERkVGRjQ4RTQyQTczN0E1MTAxNDM5MkUwQUVCQkFDMDI4MkZGN0IzRTU2NkQ1M0VBQzcxREYxRUQ1MjUxQThFRTZGRDA4RTQ5MDc3Qjc1NTQ5OEZENUU1QTZDOUUxNTY5N0I3RUVBOTNBQzk0QjVBRUMxOUVCMEVFN0FDQjk5QworRTgxQzExNDMwOEZEMzBCMjMwRkE3QjE2NzJEQzNCMThDMTY2QjgyNTM0QURCMTBFQjQ0QzJBNzY3MjRGQjEwRTY2MywgRkZDMUNCQjIwM0YxOThFRjQxQjQwRjIwOEM1MzkxQUM2M0M5Q0IyODY5RTIxRjIxQkU4Q0ZCODgxRjgzMjQzMEZCNkJBQjYzQjZBMzg5NUEyOUVCM0JENTcwMUIxRjUwQUJBMjlCMUVFRDRCOEMzQUVEQzAxMkYxRjA4QjZDMTJEMCwgMURDQzMzMjk0RjNDQjc2NDk5QThBMTlEN0Y4OUQ4ODE4MUMwQ0E0OTEyOTg3RjkxMjBDOTA5MTcwQ0EyMEQyRTZCNjY5RTQyRDQ2RDJFQjE0Q0MwNTUyODMzQzcxODcyNDE5RTA5ODI5OUVFNTREOTZGOUJDQUVFQTgwRUJEQzVGQ0EKKzJCODU0MzNDOTFBRjc5MjE2OTJFRjcxNDM1ODk0QjE0QTQ0MzQyODZGOUUwOTEzMkMxQ0U0N0Y2MzU2RUYxMzJCMzI5LCAxRDZBODVGOEI3MDEwODg2MTMwNzcxMENCOEQ3QkIzRDFCNTkxQ0FBNDYxMERFOEM3RjRERjFFQUU2REU5QjUxMzIwRjFFMjFGQzY1MTVCMUFFN0YyQ0QzQzAwRUUxQzkyNjRCRDk2OTZENTZBN0VDODNBQ0JBQjkyMDNFRjk1N0JDRiwgMTAwNkE1QjFGQTUzOTk5M0U4QzA4OTIyNUM5NThFRUUxNzNFNjMwNjVDQTY4Q0RBREQ2OTJFMEJGMUNCOUIzNEUyMTAwRjYyQjJBRjkyQUI4MDNDNkU4QTAwQjIwOThFQjg0MDI1OTZGMTQ3MjgyOUI3NTZDQTY2QkEzNzU5QkMwRDcKKzgyOEZDOUI1QjUwRTZCNjQzQjhDRTUzQ0EwOUJFMTNERUNDOUM3OTRFREExQjM5ODQ1NkFEN0UyQTA0Q0QzOTgxOTdCLCAxRTdGMzMyREZGMUUyRDI0NTlBNjdBMEZGMUI4NEJDQTNENDZEMDkzRjU4M0MyOUQ3NkUxNDUyQkI3NTBBOUJCNDE4N0IxREZDQTJGOEI1NkZGMDMyQkQ0M0YwRkJCMjlENkQyNDkzM0UxMTk3REVGRUExQUU4OTk0NEY5NDE3OTc0NywgMTJDRkMzM0ZCNEJGRUUwRkMxMjJFM0RFNUVEQzY3RUQ3NkI2MUExM0YyN0NGRUEyMTM3QjZDQUY0MkMwMDJFOEE1RjVFNjE0NDkwNTRGQ0FBMUM1RTc0MEUxQjJEQkYyMURFNUE4MTZERjJEODkyQzJDMjBDOTQ5QzQ2Q0U1Rjg2MEQKKzE4N0FGNUQyMTFGMkI0MjJDQjJBNkFGQjVFMUQzQTNCOUM2NUQ1NkJFQzhFNTFBQzhEMDQwODdBN0UwRTY3QUM4NEM3MSwgRTk1M0Y3OTEwRTdBODk5MDRGQjJFN0RCOUI0RjlBQzFENjJEQzVCNDAxNzMyNzMzMDcyNzBDNjc3QjUxQjM2QThEQzJGQTc5NTNBRTE4OEQ4NTE5RjlGQUNERTUwMTAwMDYzQUI0NjUzQzBBQjA3MUUwNTk2RUU5MEJGNjc1RTlDNiwgNDU1QUNEQTIwMzhENjRDQjM4RDg4N0Q1MTAyMTZCMUExOTQ2RTE0OEQ3OTU1ODA4MTk0Q0IwNjgwRkVBOEU0M0NGNjlCNzZDMzZCNzlCQTdDQUI0NEJFNTE1RUNCMjdEMjVEOTZDRUJDQjRBMTlBRDQ5MjdCMThDREM3RUNEQkY3MQorNDk3MEUxNzYzNUQ4MUM2ODYxN0Y0MEYyMUE1N0FFQjJENTMxODA0M0M1QUFGNTA1QTcwQzE5NkY3QTJCMzcwNThFNTUzLCA1MzgzQkRBMzJFREU2QTc1NzVGMjlGNDhGOUQ4NDI4OUQwMDY0NTY3NEQ2MURBQTc0QTFFRDIzQ0YyMERDQkNFQkE3QzA3NEFGRUFDNEE0NzI0MzFEM0U5QUI0ODFENjM1MEFDNTY3RjgxOEVFNzE2NDZDNTc5RDQ1NzYzQTBCNjY5LCAxQ0FERUFDNzE2REEyMEYwMkU3QjEwRjhBNzMzNEE3NjkyQjVCQ0Y4NUFEMTlCOEYzQUUxQTREN0JDRUQyMzhGQjBBQjZCQUNDREEzNUExMkEyRjJCOENFOUE0RTAyMTQ1QTdCM0I2Q0IwOTlGMDkyOEU3RjQ3MDk3RTZGNUYyQzdGQQorREM1MkE0NjJBMTg4NTUzOTI0N0RDMkQ2NEYwNzBDMTg3Rjk0ODBDQjUxMDBERjEwRjUyNDRDNEU2RTgxQTUxMEFBRkY5LCAxQkQ0NTc5QjNFNDVDREQzRjUzNzVFMjhBMDMyNjREQTg3NzRCODAxQzc3NENDQ0FDMTZEMTAyQ0VDN0M2QTU4MDNCRTExOEUxQUU5RkJFOEYzQ0JFRDc2QzNDNDRERDgyMTY4MjZGMzJCNkIwMTUyMEMxOTVEQTNGQzg4RTRCMTE1RCwgRjBFNDI4QUQyNjY2RkIyMTlBMkZFMTA4MjRENEJDMzI1MkEyREZGNzgzN0VGOUM0M0IyMDg2MjQ5Rjg4MjY5MkMzOEU2REFCMkY4MTk2ODcwOTM5MzAxMkZCNjI5NTEzMzY1NkQzQzhGOEU3NjEzNjg5NjFFMzkzRjZEQjgzODE1OQorMjk0RjdFRDI3RTQ5OEZGQUI2RDc5NDg4MkVEMTUyNDQ5N0VCRDgyNjFGMzAyOUQzMkRGNkNFNEVCNEI4NEVGMzIwMEZFQiwgNkI0NkJCMzk3Q0U3QUI1OTZBMkFGQjNDMzRFRUU2ODM0REYxNDkxQjQ3RjBERTdCM0QyOTkwQTQ4NTc1M0Q2QzE2NjE5NDQ4NEFGQjU1RjM4QzUxNzU0MzZFNUE5RjEyOEJFMEJFMDAxOUIyNEFCNzFBMzRFNDI4NDJENzM3NDhBRSwgMTE5MjVDRkVFNTc4MDczMzcwMjFDNkY0N0NDNzI3MTJDMDNFN0VFMzY4REREQzMwRTAxMzBFOTM3MEQ4MDcwNjlFREQ2MTlBMjFDRTExM0EwN0IyMDYzRjk4MzlCMzk1NDEzOUNFOUQxQ0FEQzE1OEU2MzhEMTkzMDdBREIyMTZFRDgKKzdCRUU3Qzc3N0FEQ0FGRjAyNDg2QkQ5ODhDNzNGNkNEQzdDMzg4NzI1RDkwN0Q3OTg5RTQ2QUVDMUUyOEVDRDk2MDJGQzEsIDE4NzI5NzQ0NTIyMzY5RDk0MTgxMDg5Qjg3QkVFQTVCQkYwQzY2MUYyMUVDNUJGQ0NCNUIzODgwNDQ5RTNDNERFOTI2NDFEMDQzQjQ2RTU1NzJGMkM5QUQzODM2NDIwOTgxMTU2QzVGNDg3NjBFN0MzOTNDMjlCNDI2ODdFRUNBRkUxLCAxNjkxN0UxNzc3RThCQzQ4RDhFNjhBMDZBMzE1QUNDQ0IzMkEzN0I2RTZFQzNGRTk5RTZGOEE2MzNEQjIzNTQ0QTYxOTE3MzBGRDRENjRDRDYwMjU2NzUzRTlBMDdFNTQyM0FGNDI1OTU1MjMxNDUyODIxMzgwNjE3RkQzNEU2ODU5CisxNzNDQjc1NjY3MDk2MEZEMDZEOTQzOEM5QTU1QkU0Njk1NzRBOTk1NzE4QjE3ODZDOURBRDQwQzQ1QTdBQzY4QzIwOEY0MywgQjhDMUEyRkFBNEEzOEM2QjVDMDg2QjNFNDdGRUY1RDMyRjNBQzlDQkMyMUJGNjdFRkM3MTFDRTAxMUI0NDNGMTE3MjA4QTE2QzM2OTRDMTZCQTg0RTA3MTJDMjQzQzEzQjJGNEY3QkVFN0IxQTM3RjJBRUI2RTdFNTQ0RjIxRjBEMCwgOUM1MUE3Rjg5QUVGQUQ0MjBFNDRCNERGRDNCRTE2QkI2NkUxMDM0MkFDOEJBNDJGOTI5RjE4RTI1QjU5RDIyRUEyRUIxRjgzRDM5MDc4QUM5MDM4MTcxMzZCNEY0NzJCNUU4N0VBMkY2Q0JGOTEyQkI3MDM4RjU1MDRGRjhDODkxNAorNDVCNjI2MDMzNTFDMjJGNzE0OEJDQUE1Q0YwMTNBRDNDMDVERkNDMDU0QTE0Njk0NUQ5MDdDMjREMEY3MDUzQTQ2MUFEQzksIDE4QUI0Qjc4NUNCRTExNjFBMzYyRTVGMDNEODQ1NDM4NzU4QzU4QTVFRjk2MjBCOTYzRDVCNDJBMUVBQThGNEM0OUFENUY5RkQyMDgyRTIyRTUwNjVEMkZBQUUwRjBFMUM4M0UyOTQ5MDhDOTlFRkNDNjA2NEE1MzJFNTJBRDY4Q0Y5LCAyNTM4NDcwQkM3NkQwMTU2MUM0NjY2QThFNjlCQzYyNkQ0NEI1MkZEMjI1MDQzNjM5Q0MzRTk5MjJFMzhBNUMyOTI3NDlGODIwNUQyMUNGRjhDQUU5NjgzN0ZFNjc3QkEyQjlCN0MxQzg2OTBGQzQxN0U4RUYyRTNGRjAzRjNERDYKK0QxMjI3MjA5OUY1NDY4RTUzREEzNUZGMTZEMDNCMDdCNDExOUY2NDBGREUzRDNCRDE4QjE3NDZFNzJFNTBGQUVEMjUwOTVCLCBFNEE1MjkyNEQ0MzkyMzZCMUExQkFFOTZGNTUzQjIzMTFGQzBBQzQ5QjVCQjgwMDY2QjAwQzI2QUEyODk2MThCRTg1NTUyM0M3RTY5OUI2QUQyQUVERDAzREVEM0E5RjZFRENBMDY1RkUzN0U1RkE2OTdFMjczMjE1RUNGNDVCRkIxLCAxMTE2OEMzNjk1MzFFODgxMzdGNTlEQ0VDRDYwMDU1RjQ3MjdCMDM2NDE0NzZFRDE3M0U0NkVGRDZCOUU4OUNFRkUxMTVBQTRBN0E5MzkxMTQxRjdBODQ3MDdDNzhGQTJFRDg5QTI2QzREQzEyREFGN0M3NTI0NUYwRURCODUxNTFEQQorMjczNjc1NjFDRERGRDNBQUZCOEVBMUZENDQ3MEIxMTcxQzM0REUyQzJGOUFCN0IzNzRBMTQ1RDRCNThBRjJGMEM3NkYxQzExLCBBQkQ3NTU4N0YyMzY2NEM3MzZFRTlDMzlFRUY3RUE3OUE4QTVFNzU2NjA3RTY1NjdFMEMyRTNFQjhBM0E2QkFEQjAxN0E0MERBQjU2RkQwRjU2NTcyRUNERDI5ODY1ODk5NDFEQUJDRjdENDZGODQwMzIzQ0Q2MEZFMjAwQUQwMUU2LCBFNURGQjVCMDEwREI3RTFBNkQ2MzRFOUFFMjJFMTQxNTUxQTZCNDNEM0RFMzJCNDVEREFCQTQwOTY1MDBBQkMxRjUwRTJFMjUyMkNEOUJERjc0QzZFNkQzNDBGMzUxNDNFOTg4NTU1MEZGMjMxOTk4NkYxN0Y2Qjg1NDU2NjI5NjIxCis3NUEzNjAyNTY5OUY3QjAwRjJBQkU1RjdDRDUyMTM0NTU0OUU5QTg0OEVEMDI3MUE1REUzRDE3RTIwQTBEOEQyNTY0RDU0MzMsIDFGM0RDMzRDQjlBMTY5NzgyNTQ2MjA2MjMxNkUxOTE0NTEyMzhDQjQxQTk4MjZEQjVFNTNBM0EwODJCOUJENDFERUREMDNFOTA2NzUzMDJDODFBMzUyOTRGMEYzMzdEODZEQ0Q3RjcxRjMzNjJEQzdCQ0QzN0EzNzYyMkEzQjlGMDYxLCA3MjU4RUQ2N0VFMUY4OUYyRDAwQkZEOTBGMThGOEQ1NDA1Q0UyMzUwOUEzRjg4OTNCOTQ2ODM3OTREMTlENTY4MEZGRTRCMDVDOTEyMDdDMjlERDRGNDRDOEQ2QzkwOTFDQjI1NDQ2M0VENDE5RTUzNDExNUE5Mzg1N0QzRDk5RDNDCisxNjBFQTIwNzAzQ0RFNzEwMkQ4MDNCMUU3NjdGNjM5Q0ZGRERCQ0Y4REFDNzA3NTRGMTlBQjc0N0E2MUUyOEE3NzAyRTdGQzk5LCAxOTczMzlDNERCMjY2MDY2M0M5QkEzMThGMUE4NzExNzlGRUREMTQ1MDg0RjVBNDYwN0JGMEJFNTg5MkM1OTAyNzFBQzdBMjJEQzE4ODhGMDY2OTMxREIwNjlDRjFGOURGRDRBMjYxMjJDNjREQTA5NzU4MURFRUQ0MTdGRjAyMUZDNiwgMTcwN0MyREI2OEQwNjU4QkJEREY1QzMxMUE4REQ5MDU1MzhGQjM0NTMyMUJDRDY1QjcyNzU5ODNCMzU5OTg3M0I2MzFBQTEyQkI5MTFBRTgyOTUyM0M1NTQyRDI3MDlFRTNCOUY4NEJCNTA5RUVCNzBGNUNGRUZCMjM3MjBFNDMyRkMKKzQyMkJFNjE1MEI2OUI1MzA4ODgwQjE1QjYzN0UyQUQ2RkY5OTM2RUE5MDU1MTVGRUQ0RDAyNUQ2RjI1QTc5RjY1MDhCN0Y1Q0IsIDE5QTlBNTdGQkE0OUVFOTg5N0YxN0IwRDUxODAyNjI1RTBDRDU2MzVERDAwMjUzQkMwRjg2MDY2QUE5Q0JBODNFOUE0NEU1Q0RFMTQyMjdDMjlBRTBDMzc0NzZFMzhFMkQ5RkU0QTRFODVCQUY2RTNFNERFOEIxRThDMUUyQjkyNjY4LCAxRTRDOTlGODdDN0EwQzZFNjcwMDg4MkFCQkRGNDc2QTdFRUZBRUVEMDcwOTNEMzZBMjEyRjk1MTJBODMyMUI2MEUzQjJDNEZCRUIwRjUxMTlBMzNBRDUzNDBBMTYyODgyRkVBMTY4NDE1MjE1NjE3MDhFRjUzMzVCOUMzNkIyNzIwMgorQzY4M0IyM0YyMjNEMUY5MTk5ODIxNDEyMkE3QTgwODRGRUNCQTRCRkIwRkY0MUZDN0U3MDcxODRENzBGNkRFMkYxQTI3RTE2MSwgQUZGQUREODZGREFFQ0VCNUZFODdFNUQ2OEJDQTVENkZDNjZGQUFGNzVCMjM1RDc1MDU2QzcwM0U1QzdEMDhDODU2OEFGQjdGQUQwMzE4QjQ1NUJCNzQyRTVDNUQ1NzNEMEU3NzdGMUFBQTY5MzJGMTJGMUI0Q0FDMDFENEY0OEI5QiwgMUQ0NjU0NENFMTY1NzY1RDdEQjUxQ0YzQzRENDlFNzVBQUYwRDhFMTk3MzZFMzg5ODgwNDc2MjdDQUFCQjkyNEE5NTkzRkE1RjZFOTg2MzMwRDZDNzczNTBBNzdCMDU2MEJGRDNDNkEyQkUzQTRERjNENEEyMjRGMDMzQkMxREFCMjUKKzI1MzhCMTZCRDY2Qjc1RUI0Q0M4NjNDMzY3RjZGODE4RUZDNjJFRTNGMTJGREM1RjU3QjUxNTQ4RTg1MkU0OUE4RDRFNzdBNDIzLCA5RDYzNEIwQ0ZGNDk1QjM3QUMyOUNBMzAyMzE3NjY1ODhBRUEwQkY3MEUzQjUwQTU3QkVBNDE1OUJGQkRGM0E3MjhEMUE0QzUwOEEwQjlGRkNEN0E1RkUxNzA2MEJBOUMxM0NGQ0RDQ0I0OEM3MzIzMEI4RDk4MEU2MkZCRkIzRTIxLCAxQUYzRTUzQUQ3QTg5MkE2Njc1NzgyMzQ0OEU0OUYxNDdEOEZFODRBMEZENTZDMzRDNkQ1MzZGQjIwNjBEQ0JGQkVGRTNEMTdBNDk4MTU0OUQ1NzkwMDI4RDM0QkE1NjczRjQyMEIxQUIwOTM2NDE5NUU4REU0QjMxMzBENjUzMzExNworNkZBQTE0NDM4MzQyNjFDMUU2NTkyQjRBMzdFNEU4NEFDRjUyOENBQkQzOEY5NTFFMDcxRjNGREFCOEY4QURDRkE3RUI2NkVDNjksIDFBNjU3MURDNjZEREM4NzVFQkM3MTI4QzdGRDFERDVBNjgzODU0NkJENkUxMDFCNzkyNUJGODkxQzc0QjNDQjUwRDI5RTUxN0RCQ0EyOEE1MzhDNUFGQTkyOTY4NTRBMjYzQ0ZFNjEyMzY0RUFEODU2NkExMUIxNTUyNDc0MTQ2NTM3LCAxQzgxQzNFOUQ5RTc3MUMwQkFBMDkyMjRCRDAwMDhBMTFGMTdGMTRCNjgxMzZDNjFBMDJEMDM4NzY3MTFDMDhGRkQxMjIyNzU3MEZDNjdEQjhENUE3REVDNzAyRTFCQzkyOEVBM0VBMzM3MEE4Rjc0NTUxMTMzMzhEOEEyNzk2NTI3OQorMTRFRkUzQ0NBODlDNzI1NDVCMzBCODFERUE3QUVCOEUwNkRGN0E2MDM3QUFFQkY1QTE1NURCRjkwMkFFQTA5NkVGN0MyMzRDNTNCLCA4RUNFOTA1NTYzOUM1ODFCOTM3MDdEQzU3RjFFQkZBNUFDNUJDNURCRDczQTA1RTIzMENBNEM3QzEyODRGRTBENDdCRDhFNDJGMTBCRUI2NTc2RTIwNzBDQTFEMzA3RDIzRTVFRkI1MUQxREMyMEFFMTlDNTBCRERBRUFEQURCNjY2LCAxNkNFQ0VFMDVCQTQzNjM0MDI1M0M2MTZGMURBM0RFNUNFQjVBOTZCQTdDMDc3ODExRTNBRUMzOUE1QjA2QjgyOUE5NTkyMTM2NTVFRDZGMjY0NkE2QUQxRjNGQ0M3MUQxOEFCNUI2Rjg1QkI3MkExNUE4NTYwMzU2RDZCRjBDNDNEMgorM0VDRkFCNjVGOUQ1NTZGRDExOTIyODU5QkY3MEMyQUExNDlFNkYyMEE3MDBDM0UwRTQwMTkzRUIwODBCRTFDNENFNzQ2OUU0RkIxLCAxMDhCRDNBNjRFNUQyMDQ1N0ZGQkE3QzhENjg3MzIyMjMyMzk4RDQ0QzhBMkFBMkNFQkEyNjM0QURBQUM1Qjk1REU2NUEzMkIzNENDNEE5QUJBNjA2RTIxMDBFRDdEOTY4QUEyQzI5Qjg3MjZEOTQwNjBDQzgyRDgzMzkyNkQ3QjlBMiwgMTBEMkM3OTc3RTRGN0NBRThFQ0YwRDA2RjkzNzY2RENERjM1REUwNjlEMDBEMjYwODYxOTMzMDVBNjE5N0UzOTJGRkE5MjA2MUQwMTlEQUJDNjQ4QTlEQ0Y0MzBBQjgzOEYyQ0Q0NjgxNEEzRjYyNzYxOEFBQ0RFMTc1NkQ3MTIzMzMKK0JDNkYwMjMxRUQ4MDA0RjczNEI2NzkwRDNFNTI0N0ZFM0REQjRENjFGNTAyNEJBMkFDMDRCQkMxMTgyM0E1NEU2QjVEM0RBRUYxMywgMTRFODJGNUUwMEU0OTM1OTc5RDA1MTI2NTRCMUI5RDJDQUJGODI1N0ZENUJFNDg1MEZFNzZEQTVFQUQ1RTg0ODA0OTc1RDJERDI4NjZGQzE3ODRFRUEwNDYxOEUxODNGNjI4NEZCQzdDNjJBQUU0NzAxM0VCQ0Q0NTkwRjJCM0Q2QzIsIDFBNzE5NEJFNDlCRTg3ODQ5Mzc2QkM4MTA5Rjk0NTQ3MDU2OTM2REJFRjgxMjMxOUNENzU2NTZFRTdGNTRBMTUyNTc2ODQwQkIwMzk5ODg2RTlGODBCNzYxNDgyMDhCMjFFNTNFMENBNEQyOEYxNTA1NDIxQ0JEMUM2ODIxQ0NFNDc2CisyMzU0RDA2OTVDODgwMEVFNTlFMjM2QjI3QkFGNkQ3RkFCOTkxRTgyNURGMDZFMkU4MDQwRTMzNDM0ODZBRUZFQjQyMTdCOTBDRDM5LCA4NTJFOTE1QTdBMDJFNDBFODBBMkE4MjM1QzJCN0E4RDQ1RTE0N0VBMDU0OUQ0MzQ2MUI0QkVDRTI5Njg5NjdGNjREODk5MEZEQzczOENFOURBQ0JERjFGQjc2NjI0MEY2RjM1OTk4RUYxRTRBRUY4MEFBRTRBNkVBQzA0RDgyMEVBLCAxNzY3RUE5QTY0ODk0QjJGNjZDMzA3NjIwMkI5QTJBRTg4MDVDNDZGRDQ1OUEyQzhFNjExMEVDNzg0NTU0Mzk1OTNDNUVBNzIxNDg5MzY0NDg3RUE2RDkwRjNCRjhFNjdEMEEwRUMzOUJCNDMwRkJDNzA1MjdCNkVCQjk1MURDMEIxMgorNjlGRTcxM0MxNTk4MDJDQjBEQTZBNDE3NzMwRTQ4N0YwMkNCNUI4NzE5RDE0QThCODBDMkE5OUM5RDk0MENGQzFDNjQ3MkIyNjdBQiwgMUQ3QzgxRUQzQ0U0M0YyMUNFMDlCMzNFRTlBMkE5ODVERkY4QUFCQUM4MTdCQUQ2QTk5QUFENjY3RjQ0NDY0QjUyOUJFOUYxOTg1NDYxMThENUUzNTI1RkYwQkFCQUIyRTg4MENCRUIwQkUwMDNCQjA0Q0NDN0E1QTVEMDk0MTg5NEIsIEVERUQ0NjYxQzUxMjZCNTQ2MkZCMTkwMUE5MjRCN0Y4RkFCNzQyRDY2MjVBQTlCNzBEQzA3N0QxQUM0RkIyRDMwMjMwRUYzMDBGQkIyOUI4QjRGMkExMDAxMDRBOUU2MzAyMzAzNDZFRTM0REQwMEIwRkQwMjkxMzBDRTg4ODBDNEUKKzEzREZCNTNCNDQwQzgwODYxMjhGM0VDNDY1OTJBRDk3RDA4NjIxMjk1NEQ3M0RGQTI4MjQ3RkNENUQ4QkMyNkY0NTUyRDU4MTczNzAxLCBGNUY5QTMxMEYzQ0E0NzQxRUUwMkUzQjJBNkZENkQ3NDU5MEU5RTBGMUJDRjBDQUUxNDkzRkYwRjU1ODg4NUY3NUU3QTAyOERCOThGMzQzRkEwRjY0RDYyQUYzNzg1OTdGQkRFMTA3OTYyNjdFNDgxQzJGNUYxM0M5Mzc5RjY4QzRELCAxREJERDVBMDBFNjIzMkE3QUNERjNBMUMzODFEQzZDNkZGRDM1REY5MTM5M0VEOUZDRkYzNThDRUREOUFEMDY2NUVGNEJEQTIzRDNERjUzMUVFNjQ4QzQyRkU1MkJBQ0NCQTI5RTYxMTFFQkRCQUU0NUFGQjA3NTMxMkRERUU2ODYzQgorM0I5RjFGQjFDQzI1ODE5MjM3QURCQzREMzBCODA4Qzc3MTkyNjM3QkZFODVCOUVFNzg2RDdGNjgxOEEzNDc0RENGRjg4MDg0NUE1MDMsIEI3QUI3NUQ0QjY1MkM5MTA4MzYzNEI4NTIzQzFGMjExM0NFNUFBMThBRjcyN0VCOTk4NjkyOUJGNTgxN0I5MEI4MjQyODY5QURDQzY3M0E5OTNCNjg4MTkxRTA2MjE1RDIwOEIzMUI0MjJBRTJFNzc2MkNCMzgzRjNFRUEwNzFCNTksIDQwQzgyMkMyQTcwQ0QzNzg1OTIxMjdGMkI0M0IxRUU5NjVDRjRDOEIyNUQ2MEU2MjAyNDVGNjA0MDM3OENFQURGNDIxMTIyODIxMDFFREFENDRGNEExQzAwODlBQkY4Q0ZCQUMxQUIyNUU0MjlFNUIwRjk5ODQzMjUyMTZCQjIxNDIKK0IyREQ1RjE1NjQ3MDg0QjZBNzA5MzRFNzkyMjgxQTU2NTRCNzJBNzNGQjkxMkRDQjY5NDg3RTM4NDlFOUQ1RTk2RkU5ODE4RDBFRjA5LCAyM0JCMEJCRTUwNkYzNUUxRDA0RjdERjlGNDg0MTEyOUY5MEY3N0I2RThCNDgwMDU1NDY0MDIwMTI1QzA2NEZFMzU4Q0JFQjA4OTU0RUNGRjE2NzdDQkEwRDY4NTQzM0MyRDNEOTI3RjYwQjE4RUM1NTc0NTJCNTlCNUIxM0MxNkY2LCAxODcxMDE5OUM1RTdCMURFOEEzRjNFMkY4RkJCMzI0REZFODFDMTI1RUY4MUM1NEZCQjQ4OTdGQkJGRDc1M0ZGMUYzQzU2MjJDMjM0NjkwOUQxMzlCREZBN0Q4QzNDMEZDQTBGQzM1OUY0MjdDMUZDRURGQkY3QkI4QTZDQkYyQjMxMgorMjE4OTgxRDQwMkQ1MThFMjNGNTFCOUVCNkI2Nzg0RjAyRkUyNTdGNUJGMkIzODk2MjNCRDk3QUE4RERCRDgxQkM0RkJDODRBNzJDRDFCLCAxOUVFNTU1RERGRUQzODc1QkEwOEFBNjE0NUQ2MkQxN0Q5Q0FFMzQ4RUIwMzEzMjBBM0NEMDg4MTUwRDFGOTBFREVCREM2MUI0ODJFOTdEMTlBQjIyOUVFREIyM0YxQUY5QkNDNjJBNjg5MkFEMTUyOUZEQzdCMEU2MjM0MjIyQzdBLCA5MzE0QzEzRjIyMjQ2NDNFRTBCMDE5QkFENkYzNzc0RjdDQjYwNzYzRjgzQjU0NkQzQjhBNzk0NkZFQzUyMDk4NTdCRUYyRDA5OUVERDhDMkZEMjE1ODc4RUU2NDg0QjdCRTNDQzMwNDRFQzA5OENFMkZEQTgzMDkxQjI2NDg5OUM1Cis2NDlDODU3QzA4N0Y0QUE2QkRGNTJEQzI0MjM2OEVEMDhGQTcwN0UxM0Q4MUE5QzI2QjM4QzZGRkE5OTM4ODUzNEVGMzU4REY1ODY3NTEsIDE2MDc1MzcyQzcyMTY3NDU3N0NFRTUyRUE0NTUxMjhEMzk5ODI5MkEzOEJDODhCNEVBNjk3RDQyMTQzMzI1QUYwN0RBMDU3RjY1Q0U1N0M5MEMwMzY1RENFMDhGN0U1Qjk1RjI1NTBBMUNEMEMyOEQzNTE1ODYxRkQwMTc3RUREMjA5LCBGNUJFRDQwNDQ0QTc3MDE0NUI1MzRBQTFEODYyMjkyQ0IxMzQwNDA5QTM1NjU1NUY3NUYwRUVBQTc0MEM0Rjg2Q0FDQUYyNDREQzY2OTI0Q0IyMjgwRTVDQkJBNjc4OUY0RUFFMjhBMUQwOENGMEYzNkE2REJCNDQ2Qjg3RkIyMzM4CisxMkRENTkwNzQxOTdEREZGNDM5REY4OTQ2QzZBM0FDNzFBRUY1MTdBM0I4ODRGRDQ3NDFBQTU0RkVGQ0JBOThGOUVDREEwQTlFMDkzNUYzLCAxNTUxNUMxMjk0RTI4OENGMTU5NjI4N0E0ODYxM0M1RkVCRjg2RTQ0MDMzOERGMDlGRENFNjFBNzA2MkZBMDQ3RDFGMTIzM0RENjMwRDYyNUFCNTJBMEUyMjQwRkFDNkQ2MTAyNkM4QTExNzU1RjRGQzE0RDkwQjBEQkIyMjlBMDE0QywgRUIwNkMyNzZGNDMyRUExMEFGMkU1NThEQkY0NzY1NzU3NzJCODZBRDE3RENCRjg5NEUwREE3OURFODlFRTQ2RDU1QTRENUU5NkNCMUFGNjY4MzUzQzFDRjZCNTRCM0E0QTJFRkE2NUJBQjM2QUZDNzc1NDMyNjI0QzFEMkQyNkNCMQorMzg5ODBCMTVDNEM3OTlGRENBRDlFOUJENDUzRUIwNTU1MENERjQ2RUIyOThFRjdENUM0RkVGRUZDRjYyRkNBRURDNjhFMUZEQTFCQTFEOSwgMTUzQTRCQzYyNkE5QThEMTlEOEExNjQ2OTU0QjEwMDUwMzZEQTAyQTVCNTE5QTUxNTQwQTU1QzUzRjNFMDg2MURCN0ZCMDA3NTAzRjgwNTUyMUM2MzYxQjY5NjRDM0NCNDFCNUZEMDkwMjA0NzExMUE0OTE3NUY1QjI0RDVGOURDNDAsIDFENUYwNDAyMjQ0RDRDMUQ0NTk0MjU1M0NBQUE1MTEwNzYzN0U3QzkzRkE1NEE4M0M5RjVENTVBODA3NzVBRkExQUQ0Mzc0RUEyRDU5MjAwOEFDMTAwNDE0MjY1Mzc3QkE4QkYzRUUxMUMwMEZCREZDMURFNENCOUEwRkUzNkY5NzIxCitBOUM4MjE0MTRFNTZDREY5NjA4REJEMzdDRkJDMTBGRkYyNjlERDRDMTdDQUNFNzgxNEVGQ0ZDRjZFMjhGNjBDOTUzQUE1RjhFNTJFNThCLCBGMTA2MjQ0NEQwOTJGQkVEMjk3OTk3MUVBQjREMjc0QTEwMjYyMTEyRkRBRDA2MjlBRDVFRDIyMzJCQTk0QkQ5QUJBOUEzOTkxNjg2ODIzQTYzMUU2RkMzN0E3REVGOUM5QUY5RTkzNzY5Q0ExMDMwOEU3RERFQjM5QUNCMDQyREEwLCAxOEVFQTc5NjIyQkUxQjI0OUIzNzAyMUQwQTJCMkYzQ0IxNkREODBCODgzNENCQjk0NEJCNUI3QzY0OEMwRTlCRjZBRUUwMzIwOTk5MjAzNUFENDE4QzZCMzk5OEJFN0M3Q0FBMkE5QzMxNTIzNkNFODA4Q0ZFMzJGQUM3RjlCNURCCisxRkQ1ODYzQzNFQjA0NjlFQzIxQTkzN0E3NkYzNDMyRkZENzNEOTdFNDQ3NjA2QjY4M0VDRjZGNkU0QTdBRTIyNUJGQUZGMUVBQUY4QjBBMSwgMTZBN0IzQjhBMDExNjI5QkE4RkMzRDZCNzMyMzlENTNCMkFBODEyM0YzOTg0ODFCQTVERUFBNzc5MTRGMjIzRjE1OEY2QkZFNkE0M0JDNzgzQkQzNjQ0NDM0MENBQjcwMzcxODcxODM1QkVCNzFGMjVGMzgxNTBGMkJCQkYwQUFBMjAsIERFMUExRDJEQzg0NTMzRDRDQUVERjM2ODYyNzk2QzdFRkU4RjNGQkIyNDc3NTE2QUEyMzE2QzVEQ0FCNjZFRDlEMTU4QkZENjQ3NTkyNUI4RUU2OEExOUM1MDZEMDRCMDEwQjc2QjczQzg5NTM5NDdCNDUwNzYzREE2OThBOTU4NzMKKzVGODA5MkI0QkMxMEQzREM0NjRGQkE2RjY0RDlDOThGRjg1QjhDN0FDRDYyMTQyMzhCQzZFNEU0QURGNzBBNjcxM0YwRkQ1QzAwRUExMUUzLCBCM0EzMkI4RjBCRjEyNjE0NjNGOTJGRkQ2Q0E5RDMzQjc4MjJEQUQ0OENFMTJFMjAyMzgwRDg2QzFDRkE2N0UxMTg0OTgxQTBDMjU1M0Q3MkQ0MTQ1QUQ2RjhBNkUyQjZDQUFENDNFMzZERUQ5MzVEMjdGNUU1OEM4Q0VEMEFCRUUsIDdFQUFCODVGMzA5Njc3MkE2QkQ2NzE1RDc4QUNBQjhGM0JFRDFEQTAwNzE0RkZBMzJEODlDODQwMDVEMjUyQ0U3NjI4MzVEREU5RTcyMTEwMjEwNUU0NzVDNjMzMTgxNjgwNDEwQjMyODUzNjVFMzRBRTRGN0VDREE3NDJEQzQwNEEKKzExRTgxQjgxRTM0MzI3Qjk0RDJFRjJGNEUyRThENUNBRkU5MTJBNTcwNjgyNjNDNkFBMzU0QUVBRTA5RTUxRjM1M0JEMkY4MTQwMkJFMzVBOSwgMTYyOTNFM0M4NDE5RDI5OUU4MEI5NDg3NEFCMzNBNDhCNkVGNEM2OEY4QkRDNTM4M0ZCRDMyNERCNjA3MjJBRTNDMzI0RTYzNEY1RUM3NjZGNDI5QUE4MkY5QjM3NTE5RDMwNkM5QTlCMTcxQjNGRTAxMEJGRjZGRTI0OEU3NzY0MjEsIDFFQjlEMUIzNDEyMENBN0E3NUY0NDIyQTdGRjY0OURFNEE5MDUzQ0M1NDk2ODhFMDZGOUM5RjE2MDFGMjc3QkQ4RUY5MjdCQ0M1MjUwNDI5NjEyRUU3NTRGOTVFNzlFQkU4OUQ4ODZGMjBBNjM5MDIyMTY4QUQ0N0NGOEU2QzVCMUE5CiszNUI4NTI4NUE5Qzk3NzJCRTc4Q0Q4REVBOEJBODE2MEZCQjM3RjA1MTM4NzJCNTNGRTlGRTBDMEExREFGNUQ5RkIzNzhFODNDMDgzQUEwRkIsIEU4QjMyQ0I0OTlFQ0IzRTAxREFFMjgxRjk3MzY4ODAyRTczNEI1NEE0REQ2MjE5N0Q3MTMzODZBQ0NDMEQyNjhBQTZGQjBGNEIwNEExN0U3NTcxRkRFQkQ3QjgyRDlBQUUxNzlCNjAyQjAwMjMwNEMwQzk2QjUwMUE2MDFCNDAxMDYsIDE4NTQyOEYxQkQ3OTVDNUMxMUZCNDVCOUVCNjlFMkQxMkJCN0YyRjQ2MDhCRUVGNEM2QTkzMTc5MTFCMEI4QjU3NDBCQkQ1NEJGODk5ODEyQUIzOEVCNkVEMzNBNzkyOEFFNkI5QUM0OUZERTM0QzMwMDkyODFENkM2MjAxNDU5NkMxCitBMTI4Rjc5MEZENUM2NTgzQjZBNjhBOUJGQTJGODQyMkYzMUE3RDBGM0E5NTgxRkJGQkRGQTI0MUU1OTBFMThERjFBNkFCOEI0MThBRkUyRjEsIDI4MzI4QjBDQjg4RjU0ODEwQTUzNTc1Q0M0M0MwQzgxOTVDMEVDRUQyNEI0QzQ2NjhFNkM0M0E2RjFDNDJGQjZGQUE4RDJBOURGRTA5MEYxMzVCM0ZBNEZEODAyMDhBMDNDRUI4RjVERkJCQjQxMjA0NTkwQTY3MEYyNTBGODBBNUEsIDFFNjQ2QTEzRTI0RkQwRUQyNjE2NkFBQ0YwNzBBOTEzQjA2NTAyQUNDOUY0QkVBRUJFMUMxRUM0MzQ3RkYwQjU2QTNCRjk3QTExQzU1QzFFRjgyQ0MyOThDMzkzRDgzNkM5MjlBNDNBNkU2MDVCQjRDQTFFNzJERDREMDJENTAyODJFCisxRTM3QUU2QjJGODE1MzA4QjIzRjM5RkQzRUU4RThDNjhEOTRGNzcyREFGQzA4NUYzRjM5RUU2QzVCMEIyQTRBOUQ0RjQwMkExQzRBMEZBOEQzLCBBMDFDNTRDOTMxNEQyMkRFNjhFNkY5MDA0NkY4Q0I0RUI0RTA2RDlGNTcyMDlEM0JENkYxRTA0M0FFRTlBMTQwNTZCOUZFRDc1M0REMUIwNTRFODEwNEMwNjA2MzdGOEZGQjIyQkZGRkU3N0M4NDE3QjE5NzdBRTNCRkZEQThCMEVFLCAxRERDQTg4MEM3QUE0NDVGMUIxNTQyNzdFOUVGREY0NkU2NUUxQkQ2MEQ0OTg3NUFGQ0RGQ0ExMDQxQzVENzlGMTVCODI1QjJGNzc3ODdEMEEzODUxOEJBODAwMTcyMTVDRjNBNUE3N0YwQTczRTRFOTlGQzhFNUNBQjNGQTQxNzMyNQorNUFBNzBCNDE4RTgzRjkxQTE2QkRBREY3QkNCQUJBNTNBOEJFRTY1ODkwRjQxOTFEQkRBRENCNDUxMTIxN0VERkQ3RURDMDdFNTRERTJFRkE3OSwgMTM2OUUwODE1MTcwRDM3M0QzN0YzMjg4QkJDRkRBRTI4REE1MkZCMTMwRkZBNzExNTdFNDcyQTA1RTc1RTlFOTQ1RThFMDQyMjBCM0E1NzhFRUEyODM4NjYxMUM2M0FCNTI5Njc4NDFGMTAyOTg1Q0RCNDBBNTc3MkYwOTE3MjE5NzksIEIxM0E3ODE0N0IxNDJEQzMyNTg3OTk5MkY4NTM5ODA0QUY0Njc0QjBGREQ2M0I5M0U5NDVFOUU1NEMwMDA4MzhFNzY0Mjk0NDFGMEU4QTBGNDk3QjlFREE4QkFFMjg0MzdCNDYwMDQ5MEE4OEM3REFBNkQxMEMxMTI1QjA5OTJBNDgKKzEwRkY1MjFDNEFCOEJFQjRFNDQzOTA5RTczNjMwMkVGQUZBM0NCMzA5QjJEQzRCNTkzOTA5NjFDRjMzNjQ3QzlGODdDOTQxN0FGRTlBOENFRjZCLCAzNkRBNTk2M0U5OTkxMEExQTY4QjEyNzM5OEQzRkZBRTM0RUE3Q0ZCQTNFREU3MEUxMjE0NkZENEJGOEMxNzAxRkREMUMzOENBOUY3M0FFRDFGNjAyM0Q1QzBBMEIyQjJCMDUxNTk0NjRDQTIyRTgyQUFFNDk1MEU0NkM3NzU0MTE3LCAxQzdEOTBCQzRBNUEyQTU2OEU4OUUyRDAwQUZGMEFCMEQxNjY1ODFBNzI3ODYzODBDNUE3M0ZFMTk2QjRCNTQ4NzI4MTY4MUZBODgzRjIxQkI2QzE0NzUzRTY5NkFENTZDRjlFREQxOTJCMURGREI2RkI5OTMzREVCMTlGNzQ1MjlGOAorMzJGREY2NTRFMDJBM0MxRUFDQ0FCMURCNUEyOTA4Q0YwRUVCNjE5MUQxODk0RTIwQkFCMUMyNTZEOUEyRDc1REU5NzVCQzQ3MEZCQ0ZBNkNFNDEsIDE2QTgxMEQ5NzE1NEUxOTg5RjgzMTkzMkU5ODc5MkEzMTY2RTYzODJDRUM2QjUyODNFRENGMURCMzRBMTQ5OTIxNUIzRDExNDAxQjBENDNDRUY0RDFGM0ZGOTVBRDQyQjREODE3N0QyOTJFQzI4ODU2NEZERkNGNEIyMzFDMDkzOUZGLCAxNjBBRDNGMEJEMjczNDcyMzMzNzBENzEyMDFFMzM1NkUzN0Q4NzcwQzQwQzU2Q0Q5OUFENjk5RDVDOUFEMzhGQkQyMTY3QzhFRDI4OEE0NEYwODk2M0ZEQTI4MjBEREE2NUMzNjUxM0ZFNUM0MjQwOTU0MkU0ODAyRTRCRTVCNUJGQQorOThGOUUyRkVBMDdFQjQ1QzA2NjAxNTkyMEU3QjFBNkQyQ0MyMjRCNTc0OUJFQTYyMzAxNTQ3MDQ4Q0U4ODYxOUJDNjEzNEQ1MkYzNkVGNDZBQzMsIDE4MDdBMDkzNjNFNjM1MzNFQ0NCMEVDRjE4MDk1OUU3QURBNjRDNkMwQTEwNDhEN0FCODFERUUzODNDODQ2NkY4RjhBMUE1MDk4RUU1Q0Q2Mjc3ODA2NDEyOTQ3REFEMjY4NkE3RkVCRTkzMDY2RDAyQURDNEFFNkUwRTQ3NThDODg0LCA1MDQ0M0Q4QzM5M0FGMzlFQkM5NUJEMUY3NkYyODgyNjBGQ0FCMEI1QTQ5NEEwNjRDQUQxRjdBMkFCMUQyNzNEREQ3QkQ1MjBDMUQ3QjkxRDYyMkYyRDlENUZCNzlBNDZGRTVCM0MwMEExN0NEN0REOEI3NTBCMDVENTAzNDRGOEYKKzFDQUVEQThGQkUxN0MxRDE0MTMyMDQwQjYyQjcxNEY0Nzg2NDY2RTIwNUREM0JGMjY5MDNGRDUwREE2Qjk5MjREMzUyMzlFN0Y4REE0Q0RENDA0OSwgQUQ4NUUzODk1NkNDQzBGM0Q0OERDRDNENDZBRTUxRENDNUJGRTdDRTIxRjdGQTlDMUM3NTc3OTZBRTgxNzRDRkJDMENFRTlCMTg5NEU1MkVDODI0M0QwMTJERjY0OTVDNkNGQTA4NjY1RjlDOTMxMzYyRUVGMDg5Q0Q0RjBDNEM0NCwgMTQ2MzM2MjgyREFGOTFCMEEyNkVFMjA1NDhGOTc4OTE1REM2QTg0QzEzNjFEMDE5NTg3QTk4QTM4QkE1RDA5ODhFRkU1NjAzMUM3MUJBNEU3NEYwQ0EwMTI2MTMyMURDMzI0Mzk0M0Q3QzlEMzJBREI0NTkwOUE5MzhERDNBOEEyNDgKKzU2MEM4RkFGM0E0NzQ1NzNDMzk2MEMyMjI4MjUzRURENjkyRDM0QTYxMTk3QjNENzNCMEJGN0YyOEY0MkNCNkU3OUY2QURCN0VBOEVFNjk3QzBEQiwgMUU2NkQ2ODk2RjczMDJEQUE1NENDRUYyMTcyQzAyNjVERUFCMkJBMDg4NDdDMjQ2QTYzMUNFNjkwN0Q1RUFENENBNzhDMjk5RDQxQjM1QzRFQTQ0NzdFQUFBNzlCRThGQkNGOUI0MUIxNzc0RjhCMUVGQjU0Q0QyNjg5QThENjVEMzksIDYzQUYwQUNBNjg1MjlEQTY3RTREQ0U0NTZGNjY3MjE4QTMyRDE1RUM0RUVEQzRGNjk3NkFEODU1NDNEQUI4MTQ1OUIyODQ0QTQ2M0UxRUEyMzc4QzNFRTk4MUM3NUMyMTlFMENCNUFGQzVGRUY3RjM2OEVDMzJCMUYzNURGMjIwMDcKKzEwMjI1QUYwREFFRDVEMDVCNEFDMjI0NjY3ODZGQkM5ODNCODc5REYyMzRDNzFCODVCMTIzRTdEN0FEQzg2MjRCNkRFNDA5MjdCRkFDQjNDNzQyOTEsIEY1RUNGM0E4Nzk2ODY1RUMxQTIxQzU1RDc3RDQ2N0E1NjY3NDgxNDg0MkJCQUUzMkVFMEEyRDBERjBDMDJFQUNEQUIzNDU3OThCQTg1M0FCRUFCMTNDMDE3Qjk5REE1RjdCRTRDNjI5NTBCNTUyNjM1NjVDN0Y5MzhENEU4RTZFRkIsIDMxQkJENzE1NTJEMkE4NUVCRDZDMUM0QUU2OEZBMDNDOEI1QzQzNThGNjVEMzlEQkZFNUY0MDk3NTYxMUZFRDdFMDA2ODQzMDIyNUNDQTEyNTVBMUEwRjE5MEE4MUEwOTcyNDM1MDE2MzUxMTFDQ0FGQzYyQjk4Q0M3NDU4N0M3RDkKKzMwNjcxMEQyOTBDODE3MTExRTA0NjZEMzM2OTRGMzVDOEIyOTZEOUQ2OUU1NTUyOTExMzZCQjc4NzA5NTkyNkUyNDlBQzFCNzczRjA2MUI1NUM3QjMsIDFFOTU4ODI0ODQ1ODYwQjZERTJDNDlGNjBEQjU4NTkzQzdERTNGM0Q0MERCOEMyMzlCREFFRTM1Q0JBNzdFODZCRDk3ODVEOUZDNzM4NDU0MzY0ODk4RUY2ODI5MDRGQkQ2OTI4NEI0Q0E4NTc5RjgxOUI2MDVBMDBFOTBGMEQzOTUxLCBDQkY3RjREREM2ODAxRkE5MDdBMDM0N0RGRjU2MkIyMTc1NTVEQTBDRDgxOTQwOUQxRkNBOTI0NzAyNzlFMDZGRUY1NjUxNEU0MzREM0UwRUFDM0Y0RDgxQjRDRTcxNkE4OUYwNjFBOUZEOTg2NjI2RUU3QTRFQTQyNENERUVGNzc3Cis5MTM1MzI3N0IyNTg0NTMzNUEwRDM0NzlBM0JFREExNUExN0M0OEQ4M0RBRkZGN0IzM0E0MzI2OTUxQzBCNzRBNkREMDQ1MjY1QkQxMjUyMDE1NzE5LCAxRDA4OTQ2OUFCQkY3RjE3N0VFMDg2QjIwRDhGNEQ1NjBGOUQyRjY1RkUzMDE1NjhGQ0EwRTlGRjhEQ0JEOTlENTZBMTQzRDg5ODAxNTY5NEEyM0Y3MjA0NzQ0QTM5MDUzQ0VGQUJBMDRBRjNGRTA3MTNDODU5OUVENDIyNDA5QzNDMCwgRkEwQjk2QTU2MzhFODI3QTczREQzMEY1ODVCRjFGNUJGMjAyOUM5MzlFMDAzQ0VCNEUyN0NFRENEMjQ0MjBBRkU0Qjc4NjhCOTFCMDEyN0U1MzRFOUU0NjM2NkVBQjZEMTQyQjlDQjc4OTBFMDQ3MEYxNEYwRjM0QkM2Q0E5ODdFRQorMUIzOUY5NzY3MTcwOENGOUEwRTI3OUQ2Q0VCM0M4RTQwRTQ3NERBODhCOTBGRkU3MTlBRUM5NzNCRjU0MjI1REY0OTcwQ0Y3MzEzNzM2RjYwNDA1NEIsIDcxMTMwMTVDMjZCRjFCQUUwM0I2OUY0MDU3NzM2Mzg5REE1NDY3QjJEQTk1NUNDNTg1MThFODUzRjkzQUI0NTgxQThCMzBBMDFFMjU5N0NENDQyNURBOUVCQkFDRDc2M0VCNDFCN0E0Qzk2MUVCNkYyNkEwNzIwMkYwQzlBMjNBNzksIEI0RUY1NzU3QkM1MzREMjdDNzZBN0JBODU2M0NENjZFQ0YxRThENDJEMUY1RUI3NzUxMkU4REE0QTYyQzY4MTI4Mzg5QTNGNjFDNERCOEVDNDI0MUZDMTc3QkVENTM4MjI2QTgyNUEyNTgyNTkxRDY5MjE4RUNDRTQ3QjhERjcyNDAKKzUxQURFQzYzNTQ1MUE2RUNFMkE3NkQ4NDZDMUI1QUFDMkFENUU4RjlBMkIyRkZCNTREMEM1QzVCM0RGQzY3MTlEREM1MjZFNTkzQTVBNEUyMEMwRkUxLCAxMjc0QjAzNDNGNjdBOTk4NEUxNkZEMEVFODA3NDMwNTYyMTQzMTA3OTZGMzREMzk3NkE2QThENDNDQjAyMEI2NUMzRDg4RENGNThCNkMzQjdDNzVBNEY3MTEyREMyMUIzQ0VBNEJFMkE4MEQwOTlDMzBDNDRGM0UyRjUwNEQzNjE5QywgRUVDNDNFMkU1MjM1NzdERDU1Q0EzOTZFNzRCMkM2QzZDQ0VGNkNENTY1RDU3MTg0NzFBMEY3M0YyRjc0QTE1MjU0NUYzMzY2ODJGREFCM0RBMDU5OURENTJFNDZBRjJBMzNGN0M1RkI0NjZBRkFBRkNBQTU5MThCNzY1MUE5QTY3MworRjUwOUM1MjlGQ0Y0RjRDNkE3RjY0ODhENDQ1MjEwMDQ4MDgxQkFFQ0U4MThGRjFGRTcyNTE1MTFCOUY1MzU0RDk5NEY3NEIwQkFGMEVFQTYyNDJGQTMsIDEyRTg3QTU4NDk2QzA4QUNERTY4MUEzNzFBMDAyOTMyRjk2RUFENUJFMERDODNDRDc1NkMwQzBGQkI2OUNDNUNDQjI3QTAyNTZGNzg3NTFDOURFQzI5NkJEOUFDMjE2MTEwQUJFMkQzNkZGNUM2QzBFNzE5NjQ2Q0Q5QkM5ODQ4Q0FCLCAxM0Q1MTA4M0UzMzQ2NkRBQTc0Q0U5MEM0MjAxMzY3M0I1NjdBMTU5NERCRTE4OUVCNTg0QjY3RTlFQjAyQTk1NzRBRUE3QzlBRkIzMDUzOUIyRDgyQTI1QjBBMTBCQ0Y4NkNERTVBREEwRjI5RkM4NjFDMTU4MkFFRjg5NzAyMTQ3NQorMkRGMUQ0RjdERjZERURFNTNGN0UyRDlBN0NDRjYzMDBEODE4NTMwQzZCODRBRkQ1RkI1NkYzRjM1MkRERjlGRThDQkVFNUUxMjMwRDJDQkYyNkM4RUU5LCAxQUE3MDUzMkZBOEIyOTExRDM0NzQ5RTY2REExQkI1MTUxQzg3QjE0MTE4MjBCODQ3NDZEQTVEOTU1MTk4Nzg0ODM0MUQ4NjFEQUU5M0ZGRTNGRkI5QTIxM0Q5MjhDRTAyMDkyQzBCQ0NEMDBGQUYxNkQyMkE4RTAyQzgzNTg3NTJEOCwgMUFCNEExQjNFNjQ4QThFMzYyMDEzNkZGNzQ0NTgyNjYwMEU5NDUwNkYwOUFERTZCMjUzNTE1Rjg5MjhDMkNBOTk3QTFBNjY1MzI0MDgyODkxMzg4RkYwNDZDOTJFNUEzM0I2RjM0QTI4OUJFMUQxRDJEREQzMkM5ODc3Mjg3RkZCNTcKKzg5RDU3RUU3OUU0OUM5QUZCRTdBODhDRjc2NkUyOTAyODg0OEY5MjU0MjhFMEY4MUYyMDREQkQ5Rjg5OUVERkJBNjNDQjFBMzY5Mjc4NjNENzQ1QUNCQiwgMUZGNDYyODhBMzAxNTJEQTYzMDkwODFEQzFCQkExMTYyNEZFQzkwMkE1QTk1OUFCQjNBNDZDMDNGQzQ0NURFMUJBNkE3MUMzMzgwQ0EyMUQ3NTdBMUMwN0FGRUMwM0FEMjNDMEY1MTVGMUU5QUY0MzAzOUFGODZCMDExNUYxM0VFNkEsIDExNjY2MEY3NTREQ0MxQUZBRDI5Njc5QTE2RDUwRjM1QzM3QjYwNDI0RTI5QTE1RDY0RjRDMTgxQTVBMzgwODY0NzNFRUNDOUQwNTJFNUY4N0YzNTQ5MkUwNTQ3NjJFQzgwQTUxODkyRjFBM0Q4QUM5NjNCQjgwMTkzNkFERjlFMDMyCisxOUQ4MDdDQjZEQURENUQwRjNCNkY5QTZFNjM0QTdCMDc5OERBRUI2RkM3QUEyRTg1RDYwRTkzOERFOUNEQzlGMkYyQjYxNEVBM0I3NjkyQjg1RDEwNjMxLCBFMkUyNjU5RDE4MzEzNzYyOUNFMzM5ODE1OTgzOTEyNzA1ODYyRDExMjQxOUI1Q0QzRkM0RUE1MUM5NTQ0QTkwQkQxRTU4ODgwMTkxM0YxMkJERDMwQUYzMTU0RTExNkQ5Q0NCNUY3NDUwMzVGQjRBRDg5Q0ZBOTNGRTRBMjVFQTM4LCAxNDhCODVGNzE2RUI3MUVGOEU0RDY5OEE0MTA3M0ZBRUYzMDgzMkFGQTgwQTM2QTMyRDQwQTFGMUIyQjVEMjY2MzE4N0M4MEVFNUEwMURBOTVEODgyMDdENkRFNkFEODRCNTBDQkZDNEQzQ0FFNjVDOUI3Qzc3MUYzMTkzNDY4RDMyNgorNEQ4ODE3NjI0OTA5ODE3MkRCMjRFQ0Y0QjI5REY3MTE2Q0E5MEMyNEY1NkZFOEI5MTgyMkJCQUE5QkQ2OTVERDhEODIyM0VCRUIyNjNCODI5MTczMTI5MywgRkJDMjI2Rjg2RDU5MkJEMjkxNDJDQzgzMTdENUIzQUJFMjk0NDlCNjc3Q0IxQjgyQUM2MjIwMzlERDg5REJFMUFGQ0E4ODRFNDJDQjNFMDdCMkVBODExNUNBQTAzMDRFNjBEQjYyNkNGQUM2MTk0NzFCNzUwRUZGNjJBNDcyNkU3RCwgREZFM0M0NUIwOTY0MjAyNkM2REMwODYzRjZGNTAyQTY5OEQ3MTg4RTY4MTcwRkI3OUE0NjAyM0IyQzk4NkMyNDVGMjQ2RkMwRDUzRUM0NDA5QTgxQjI2OTc5ODY2QjlBQkJENEQyMDgzRjIzQjYyODI2MEI5M0JCOTE0RkE4MzQ1QQorRTg5ODQ2MjZEQjFDODQ1ODkxNkVDNkRFMTdEOUU1MzQ0NUZCMjQ2RUUwNEZCQTJCNDg2ODMyRkZEMzgzQzE5OEE4ODY2QkMzQzE3MkIyODdCNDU5MzdCOSwgN0Y5NTM4QUZCMTVERDMxQTBCN0VBQ0M2OTEyQ0M3NkZFODExMEZEMjhBOTAwRUVCMEFBMjkxMEVGQjY5M0UyMTI0NTIwQUE3RENDQTY0MURGMUQ3OEQ5MTA5MUY5MDFDNzU5QzkzMjg4NDI0NURCQzZDRTZBMjhENTkzNDUxNTY5MSwgM0E5REVCQ0UyMDIwMzFDMjUwRTA3OUUyMjY5Q0NFMEU5RTdBMUUzNTlFMTRGM0E3RjhENTRCNUE4QTY1RTQ1MkY0QTdBQ0RENDQ4ODQ5RjI2N0M1MzVGOUM0REI1RERDRTQ2QTVCN0Y4MTIwRjYzOTM4NzQxNUE0QzE1Q0E1MDA1OAorMkI5QzhEMjc0OTE1NThEMDlCNDRDNTQ5QTQ3OERBRjlDRDFGMTZENENBMEVGMkU4MUQ5Mzg5OEZGN0E4QjQ0QzlGOTkzNDM0QjQ0NTgxNzk3MUQwQkE3MkIsIDFFNUZENUM5Qzc1Q0EwQzJEM0M0M0FEQzhDRDVDM0ZENjJBRjgwMkNCNjE5NTMzMTVFOUQ0QTFCOEMxOTVBNjJGNUMyRjhDREZCMjgzRDBCMERGN0YxMUI0OEIxMzhFRjBBRjdGQjBFRUYwNEU1MjFENjQzQkNFMjZCRjZFMjc5RTQ0LCAxNzk2N0IwRkFDMDg1RUU1RDIwRkNCMEIyNzA5QjVDMjQ4RjI0QjY1MzA2QkE4NjBCNTQxNUE3MkQ0NDA4QzhBMkE3RURGODVCQ0QzNkU2NUY4NUI1NDU2NTdCOTRBQTIwOUVFOTk0RkNBMEQ4RkEyNTg1RjU4QzMyRjEzM0RGMDJDNgorODJENUE3NzVEQjQwMEE3MUQxQ0U0RkRDRUQ2QTkwRUQ2NzVENDQ3RTVFMkNEOEI4NThCQTlDQUZFNkZBMUNFNURFQ0I5QzlFMUNEMDg0NkM1NTcyMkY1ODEsIDFCQzY5MDRCQTE2OTc4RDkwMTE4QkY3ODQ3QjU2MUNDRUFCREVGRjc2NjQ5QkYxREQ3QzdCRkM0ODY2QkEzODkwRjM2QTA0MzY0NzVEQUVCNDgwMzZFMTBCRTU3MEE2RjM2NDJCRjY5MTI0QzQ3MjUxQUY4OUE5Mjc4Q0M2RTU2QUEyLCAxNjE0ODg0RkI1OEI3NzY1RUZCMEE2NjZBRjREMDNGRDUyOTQwQkRCMDAyMEFFOEI5NEFBMzZCNDk0MkNCNDcwOUYxMjY0REJFMEE1QUQwQkU1M0Y1N0Y4MjcwRkE0NDNENEJCNDRENTUzNEJBMjAxRDQ3MDRDMTJFQ0REMDA4RENBRgorMTg4ODBGNjYxOTFDMDFGNTU3NTZBRUY5NkM4M0ZCMkM4MzYxN0NEN0IxQTg2OEEyOTBBMkZENjBGQjRFRTU2QjE5QzYyRDVEQTU2NzE4RDQ1MDA1NjhFMDgzLCA5QjFENEM2RDdGNDE4RDA0RjA5QUMxN0M2MTIyNzZCRTBEMDMzNDFFQzgzOEYwNDhDRUU5QTJBQkI3M0VDNTQ4MTVDOTlFMjBDNTFGRTdEQjQ3RjhDRjJBMjgyREI0NEFCMTRBMUZFOTIwNDEzRjYwNDQ5OTY0Qjc0MkY4QjAyQzNGLCBERjI0RkI4RkNGMTNCMzVERkNENjc2RUJGQUVFM0U4RDZEQ0Q5QzM2MjNBOTQ2NUJFQTk2QURBNTdFNEI0MUFGMzFCRTA0QUJEODI0MDBBREMxRTQxOUNGMUE0M0FFQzlDMDI0NzAzNzEwNjYwQkYzQTBFRDA5NkFCODhBNEY1OEFFCis0OTk4MkUzMjRCNTQwNUUwMDYwNDBDRUM0NThCRjE4NThBMjQ3Njg3MTRGOTM5RTdCMUU4RjgyMkYxRUNCMDQxNEQ1Mjg4MThGMDM1NEE3Q0YwMTAzQUExODksIERBRTREOUYxMDdDQzExODIzREZFODI5M0ExRkI2OUVDQkI5RTk0NkVDQjk3Mzg0QzQ0NEI2MzRDMzlGQzAyMDc0REE3QkUwNEQ3RkM1QjY4RjczQkU3NTREQzNCMzJDREZGQTgyRTlFMUQ2QTNBRUNEQTQ2OTlEMENCOTNGN0Y5QkUsIDE2ODQxQUNGMDJFNzFENzRCMjAzNkI2RjFCMUE5RTA2MEJGMzBFMEYzRkJERTZDNjEwMEQyMTA0MDYzM0NFN0RDODk0RDdGQkRDNzg1NDk4MTU1QUI4RTg0NTgyMzk0REFDMDM0MTMzOUMxREZDMDA3OEYzMTZGOTYyNDI4NUREMkQ4CitEQ0M4OEE5NkUxRkMxMUEwMTIwQzI2QzREMEEzRDQ5MDlFNkQ2Mzk1M0VFQkFEQjcxNUJBRTg2OEQ1QzYxMEMzRTdGNzk4NEFEMDlGREY3NkQwMzBBRkU0OUIsIDE2MTEwN0QwMzY0RDA0Q0VGQTlFQzA0Q0E2MUUyNkVEMjg2OThCOEY5MEM1ODg0MDAzMzY5Qzg0NUEyQUY5MjM5NkMxNTAxQTU2QTYwMEI4MThFNjg4QUE5QjkxM0U5MDQwMkREMkMxMUE2OTk2NDBDQTVCMjc5NjEwMDNDQUY1QzVDLCBDQUU0MzM1RENBNzhFQ0MwODBDNkQ2MjUxRTUyNUU3RUE2RjI5QUY5RDUyMjBFOTEwMDQxM0FFRUU1OTJDNEMzODYyMkY5MDJENUQyOUIxQThGOTZCQTQxRTAwNEVBOUYzNTIwREYxNjMzMkE0OEM1MzQ1RTYwMEVEMUVEQUUxNzhBCisyOTY1OTlGQzRBNUY0MzRFMDM2MjQ3NDRFNzFFQjdEQjFEQjQ4MkFCRkJDQzMwOTI1NDEzMEI5M0E4MTUyMzI0QkI3RTZDOEUwNzFERjlFNjQ3MDkyMEZBREQxLCAxRDYxQ0NBQUI5QjlBMTk4NkNGRDgwQjI1QzU4QjVCRjE3MzQ5QUU2RTZBQjQ4N0QxQ0UwMEM0NDVFODk1NjhDMTU4NEFEMzQyRTQwRjk1RDM5RTQ1MDA4NDk5RjUyNTIxOEQ3RjNGMzg2QzhBMzgxODQ3NUM0RDREMjYwQzlDQkY0QiwgRDkwNTJBRjVFODE5NEJDOEExM0VGQTA3OTdGRDRGMTU4NUI0Rjc5RDk3RUUyNjFGRUJFRUM2OEMxNUIwQjZFODA3ODAwNDgzNjk0QTVBQ0JCMTk5MzE4NEU3NzQxRDc4OTU2NTU1NTEwQzFDQ0ZFMjg1RjdDM0ZCRUIxREQyNTUyMAorN0MzMENERjRERjFEQzlFQTBBMjZENUNFQjU1QzI3OTE1OTFEODgwM0YzNjQ5MUI2RkMzOTIyQkFGODNGNjk2RTMyN0I0NUFBMTU1OUVEQjJENTFCNjJGMDk3MywgMTUxNkI0QjhBNjM4QTIxNkNDRjNGREE3ODlGMjY1RTA3MTBDNUFDNUNDN0NBOUFEQkM4QzIxOTkyQTdFRDZEMEJEMjgyMDU2RTk5QkQyRkI5MjBFREI1RDZFQkM0QUExNTk0QzJENDlCN0YxNkJDNDg4NEYxMjA0NTZCRDQ3OEMxQTksIDk3QTg0NUIwM0MxOTVFQUY3NEJEQUM4RUQ5ODA4QTQ2NTVEN0IxNDEwMjM1OTlCQUFBRjRGQjlGNEYzMzgzODc1RDEyQkFFNzU1MjE5QjdEMTg0MEE4OEEwOTk0MjIyQTFEMzZBQjkyOUI5QjEyQUIzRjgyNUU3NjY1MjAwQTFBRjUKKzE3NDkyNjlERTlENTk1REJFMUU3NDgxNkMyMDE0NzZCNDBCNTg5ODBCREEyREI1MjRGNEFCNjgzMEU4QkUzQzRBOTc3MUQwRkU0MDBEQzkxODdGNTIyOEQxQzU5LCBBQTA2NjU1RUE3QkFBMkZEQzIxOTE4RDU1MDI3RkNCMUNCNzAyREMzMEQ0MTA3MDNCQ0U5NTI3MjM3MUExMzhDOTVCRDEzRTYzQUExRjVDQkRGM0VFMTg0NTdFRjUyNkRCNzMzMDY3QkRFOUY5MjZCRTZFMDExQTMyRjBENzY2MzE2LCAxNDE1M0IwRjhCNkM0QUQ0Q0VDMjE2QzI4RUU1OEJBMjAwM0IzMDkyQ0U5ODk5NUZFNEYzRDkwQjA4MTRGNzFFMkUwMjc2MjEwMDdFQkM1NjcxMjdDQzIwREJDMDFCQkZDODhCQjIzRkE2NUUzQjVEN0U2MkZEMjFFRTA0MUFEM0Q3NworNDVEQjczRDlCRDgwQzE5M0E1QjVEODQ0NDYwM0Q2NDFDMjIwOUM4MjM4RTg5MUY2RURFMDIzODkyQkEzQUI0REZDNjU1NzJGQUMwMjk1QjQ5N0RGNjdBNzU1MEIsIEZCMzM2OTFGMzcwQUQzMDU4MTkwRjkyQkE3RjA2RDI4NEZCOERCNUIxNUZFOTBFRUVERkZBN0IxREE3MDZBRDRFRjdFQ0Q4NjRCNjI0OTQ4MEU4RDkxRkFCRjc3MEFBQkYzNkRCRTI2QjUyNzkxREMxNjRFQ0NGRTg2NDdERDYwMTYsIEE1MDFCQjRBODg4RTI4OUZDNEVGQTdGMEM0MDhDQTAzMzY3MjU4MjlENUZDODc1MTQzRDRFMzE4NEQ3QzJDQUJCQTU1ODY3MTBBRjcwMkIyQjQ1RkMxOTgzQkREOUMzMDBFQTg2Q0RBMjIzQjdBNTlEQjhGQkIzNzczQTYyMzU4M0UKK0QxOTI1QjhEMzg4MjQ0QkFGMTIxODhDQ0QyMEI4MkM1NDY2MUQ1ODZBQUI5QjVFNEM5QTA2QTlCODJFQjAxRTlGNTMwMDU4RjA0MDdDMTFEQzc5RTM2RjVGRjIxLCA1RUVDMUE2MjhBNTA4Q0E3QTU0OUU3N0FFNjgzODQyRkMzNkQ3QUYwMzg0RjU0QzYxMEEzMzM0RTdGRjNBRDk0MzFCQ0I0NTE2NTZEQTkzMkRBMjMwRkNFRUQyNjA5NUEwQzdCQUIxOUY1RDI4Q0ZGNDVDRjBDNUUwQTFFNzUxMTczLCA3MzQyNzk1MzBCMUE1MEJEODRCMEQwRjhEQTk4ODAwRjJBOTcyODMzMzI1NEYyOUI5OTIzMkZEQTBENkIwQzU2QkE5NkQ1QTg0RTMyRTVCMDcwNEEwNkQ2MDBENkE0MERCMEI4M0NBMUM2RDAxQzdBMjlCQTE0NTI2OTEzNkUwNTUzCisyNzRCNzEyQTdBOTg2Q0UzMEQzNjQ5QTY2NzYyMjg4NEZEMzI1ODA5NDAwMkQyMUFFNUNFMTNGRDI4OEMxMDVCRERGOTAxMEFEMEMxNzQzNTk1NkRBQTRFMUZENjMsIDFCMTlERjZDOTVCREE2MkZDQjM4NkE3NjQ4NzU0NDk2NUE0NTQyOTQzRTdCREQ0OTQ1REE1OUU4OTdBREVDMEZBRUI1QzI5ODM2MUU3RDk3MTQ0Rjg5MEM4RjZDQjRFRDVEMTM5RTBGMkJBRTIwMUE2ODU5RDU5REUwODAwRjZBN0JFLCAxODg3OEM2NzlERTJGQzZGRjMwNUEzQjYxQjNEQkU2MDhBMjFDRDAxMDlBN0U0QTlBNkE4QzUxNkNGMzkzRjJCNUY5MENDREUxMDBBMDdFOUU4M0ExQUIzRTFCMThFM0FGN0Q1MzNGNTBFRUZFMjU5MTBGOERBQUZDMTIyNzNGMTJGMworNzVFMjUzN0Y2RkM5NDZBOTI3QTJEQ0YzMzYyNjc5OEVGNzk3MDgxQkMwMDg3NjUwQjE2QTNCRjc3OUE0MzExMzk5RUIwMzIwNzI0NDVDQTBDMDQ4RkVFQTVGODI5LCAxNzVDRjNEMEUxQkJEQTYzRDhFNTMzRjk3OEQ0QjZEMEVGNkVGMjkyNDMzRUNCNzE4NjIxNkQxNUY0RDU2Q0RFNkIyQ0Q5NDlBNTgzMjNFNzEzMEY5RTcyQTE3Qzg5Q0Q1OEQzMkEzQUI1MUUyQTlFMjA3REVCQUFCODUzMjRFMzNENSwgMTNBMDc1NDA4MjIwNTEyN0M0RkQ2NTk3NjA2NUI5MDQ0MzZFRTA3MzFCRUI3NEREMDIyOTI0MzEzNDlCRkU5NTNCOERDQUU5QTI5QUQ5MjRGNDcwNkU2MzcyRjZFMzBBMUE2OTUxNDI4MTVBQjZFRjNEMzQyMDhGQzhCNjdEM0UyQjUKKzE2MUE2RkE3RTRGNUJEM0ZCNzZFODk2RDlBMjczNkNBQ0U2QzUxODUzNDAxOTYyRjIxNDNFQjNFNjZDRUM5MzNBQ0RDMTA5NjE1NkNEMTVFMjQwREFGQ0JGMUU4N0IsIDEzOTZCOEZDQzBCMTc0MzVFNjdGRjQ3MTA1MjgyRTMwOTBBOERFM0E3NUY0M0VCRUM5OTA0MUNGOTRENjY3OUFDQjIxNUQ4NEU3RjMwRTVDRThCOTA1NDhDREZBRjU5ODY0NzUwMjQzNEM5MDlGMTNCQkJBN0NFQjgyNEU5NkI4OTNFLCA3NTUxQ0JDRjQwNENENDE2Q0Y4NjExMjUxMUM5N0I5MEM4QUUxMUI5QzM4MTU2REMwMThGRjhGOTdDRjBBNTg0RkZGM0E4OTNCMUE3RUJDQkRGQkJBN0YyNTk3NUQxODg2Q0I0MzVENjcxNjQ1QjM0NEM4MEVDNTUyNjg5ODBEM0RGCis0MjRGNEVGN0FFRTEzN0JGMjY0QjlDNDhDRTc1QTQ2MDZCNDRGNDhGOUMwNEMyOEQ2M0NCQzFCQjM0NkM1QjlCMDY5NDMxQzI0MDQ2NzQxQTZDMjkwRjYzRDVCOTcxLCA2NThEMjFCMDRCQjdDNTc0NjFDODg0MzRBMjVENDVFMDM0MkVGNjBCMjk3ODRDNkQ4OUJBRUEzMkNFRTk3RTg1MUMxNDJFOEM1RkJDNUMwREU4NkNBNTNCNDAyNTIxQjdGNjhFRjQyRDJBOUE3RkE1OUVDQjIyNDhERTlGQzZBNkNBLCA3NzQ4MDIyMUY5REU5ODFFM0Y4Njg3MURBQTRENkI4MDkzMUY1MDVGREU3RkEzRUFCNDk5QTE1RjYxNTlDQUNEM0NDRUFBMThGOEU1OTVDRjU1QzE1QkJBNTRGNUU5RkJCQ0NFRDU5MzdCMEE0OTM1RDg3NjM1QzZCQTlGQTJBMjhDCitDNkVERUNFNzBDQTNBNzNENzJFMkQ0REE2QjYwRUQyMTQxQ0VEREFFRDQwRTQ3QTgyQjYzNDUzMTlENDUxMkQxMTNCQzk1NDZDMEQzNUM0RjQ0N0IyRTJCODEyQzUzLCAxMjE5ODBDMkMzN0JFRENFMzMyNjY3N0ZGMzVDNzcxQUU3NkJFMjI5QjQzQTAxQjNDM0Y1RDBDNjNDNUU4Q0RERkEwRDU3RTU0NDI2RkQyOTg1NDNGNTVBQkExN0Y0MDhCRjI1ODk3MDRBMjRGODEzNzdCMTQ4RjkyQzlBQTIxMTk5QiwgQzA1RDJCMzU5ODAxREJDMzc2NTE2NDlCNTEyRjBCM0MzNTE1NjlFQ0RCRTgwREU5RDM4NjBGRTlGMkJCMzhBN0U4NDg2NTYzNEFBRUZEMkVCOTVDMkUyRkVBMjEwMjk4RTBDMDlDNTBDNjI1RDJBMkJDRTYxRkQ3QTMyNEM2Q0JENworMjU0QzlDNkI1MjVFQUY1Qjg1OEE4N0U4RjQyMjJDNzYzQzU2Qzk5MEM3QzJBRDZGODgyMjlDRjk0RDdDRjM4NzMzQjM1QkZENDQyN0ExNEVEQ0Q3MThBODI4Mzg0RjksIEVEMzdEQUUwM0VGNEIyODEzRDJGM0U4MUU2NkZDODc1ODJDQzFBNUI3MDMyRTRFNUU2MzMwNkUwNzk3NTNDRTJBQzU3QUJENEQ2MUJERDZBREJBNTQ5MDI4MTQ0REM1NkY2N0I2QjYzMzA0RjM4QTY5MzQxMTlGRDc5ODAyQzM1M0YsIDFFODA1Q0Q1MzA2OEQ5NzlCMzFBNDNDQkFDN0QyRDY0NDkwNTVBNjA4NTU5OENBODI3RkU0QTExNzU1RDhFMzIwRTU3MUZEMTlGMUE3NjEyODFBQzA2QjI4NDdERDM0Q0JDRTEyRjFBQkZENUExNzU1QUQ3QzE2NzE0MkMwQkUzNkM2Cis2RkU1RDU0MUY3MUMwRTEyOTA5Rjk3QkFEQzY2ODU2MkI1MDQ1Q0IyNTc0ODA4NEU5ODY3RDZFQkU4NzZEQTk1OUIxQTEzRjdDQzc2RTNFQzk2ODU0OUY4NzhBOEVFQiwgMUM0QzBGNTcxNjhGMjFEOUQxM0IyRkUxMDMxNUIzNUQ2MUFGRENDRDhCNUM5N0FFNzFEMkU0MzA1RjdERDkxQjgxQTFDMDE0RDM1Mjc4MDU3MTc1OTJCRDc1QUQ1ODMwODY1NkIxMUVGRTY2Q0MyQTEzOTQ2NjNCRkFDQkRDMTYyMiwgMUI1RUYwODk3QjM0QUIwQTAwMDYxQjhENjlFQkY2NUIzQjI3NUYwOTA2ODYyNzMzMTA0NzVEODQ0OEYyQzFDQTQ5NDc1RTdGQTRCRkEwMzREMUY0MjlBN0MyQkJDMzE4ODJCOTk3OUUyM0M3QjIyRjU4QTFCM0Y0OUMzQ0U5N0VFNTIKKzE0RkIxN0ZDNUU1NTQyQTM3QjFERUM3MzA5NTMzOTAyODFGMEQxNjE3MDVEODE4RUJDOTM3ODRDM0I5NjQ4RkMwRDE0RTNCRTc2NTY0QUJDNUMzOEZEREU5NjlGQUNDMSwgMTFDMDA2MkU5Nzc2Q0VEN0JGQ0Y2RjQzQzlFMTVCNkNERjAwRTc2RTg3ODQzNzRBNDA2Mjk0Qzk2RkMyMjNGQjBDMEIwRTc4RDA4NDFFQUU5MDYwNzc4N0Q5NzIxODUxNjc4QkQ0QUI1QTM2Qjg1MUU1QTNDM0IzRTUzREIxMUVDMzYsIEQ2QkUzNzM5NDMxMjA3QjMxQjRBNzUyNzY3QTM1MkVFMDY2RkRGRDRDMjZCMEI2NTBBREFDQjY1MzVCMEZBOTBGQjQ1MUVGNTc3RUFGNjgxRDM2M0ZGNzJEMEM4MkQ1QTQ2Q0M0RDAyRDdFQzRGNDRFRDk3QzYyNUYyRTJGMzAxMTgKKzNFRjE0N0Y1MUFGRkM3RUE3MTU5QzU1OTFCRjlBQjA3ODVEMjc0MjQ1MTE4ODRBQzM1QkE2OEU0QjJDMkRBRjQyNzNFQUIzQjYzMDJFMDM1MTRBQUY5OUJDM0RGMDY0MywgMTcxREZDOEVERDc5REFFNUE2M0Q2Qjc5NDk3QzdCNUVCNDMyMUM4NzUyRjBGNzY2Qjg5OTdBQjhFRjNCMEFDRjVBNzJGMjM0NEJCNzM3Q0QyQ0JFNTY5NjlENkNFMUE5RDcxRTNDOUM1M0E1MThDNjI2MzA5RDNCOUFFMEY5MkYzQUYsIDE4M0JBODc4REQyOTJBMjI3MUQ3NDlEMTA2MzQ1NTQ2NjIxQzVDMjUzNzY3RUFDNzJDQTNGMDM2N0I1MEUyNUVCOTIwMUYyQThCMzYxNjE2MDExNUVBRTQ2MTU2MjVBNTQ2NDY2OTQ1NDA4ODlGQkEyNjJBRDYwQzMxNzFDNjk4MkJFCitCQ0QzRDdERjUwRkY1N0JGNTQwRDUwMEI1M0VEMDExNjkxNzc1QzZDRjM0OThFMDRBMTJGM0FBRTE4NDg5MERDNzVCQzAxQjIyOTA4QTA5RjNFMDBFQ0QzNEI5RDEyQzksIEYyMDdEMzkyNzE3MjU5MzJBNTgyMTU0NjUwMTU2RDZEMzhCRjlGODk1NjQwRDU1Q0I2OTZDNEQ3ODZBQTUzQUNEN0MxREQzOUVFN0I3RTBDMkU0MDFFMEEzRkU1RkIzQkQxQzc4MTQ0OUE2MzhENTVFNDkxMTREQ0Y2ODM3QkQyOEIsIDE1OTlGRDcwNTE5MjU2RjFERTRDNThBRUVDM0I1MUM4N0FGM0QxODYyODY2Nzg2MzA5MTVBMzU1RUUyMzQ1ODNBRjUzRERCN0ZDNDI3NUVENjZDNjhBQjNGQzJGQjk0MDNDNjAxNDIxNTU2QTYxNjJGMzMzMzRDQTUwMjQ5OENEMkI0CisyMzY3Qjg3OURGMkZFMDczREZDMjdGMDIxRkJDNzAzNDNCNDY2MTU0NkQ5RENBQTBERTM4REIwMEE0OEQ5QjI5NTYxMzQwNTE2N0IxOUUxRERCQTAyQzY3OUUyRDczODVCLCBGQ0MyRTVGNDcxODM5RkQ3QTRFNzg2ODM0RjYxRUY2OTUzQjFGMTMzRTA0NzMzMDVDNDJBNDdGNzkxMDA4NjNBQzhDRUIzNTM2RkRDMjRDRjcyMDhGQTc0Q0QxNTk2OUEyRURGQzMzMjFFMTVDNDY3MTE1QTE0OERENUYxNzMxQTcyLCAxRDI0QjdDMTU2NkRDMTBCQkUyMTY2ODcyQTNEOTZCMThBOTM0MDg5QkMzMUU4NzNEMUM0QzdGQUFFMUQ2MEZBNDAwRUJCNTdDMkMyMENFNTRGOUI3NkYxQzIxOTA0NjVFNUMwQjQwRkYyQkM2MUJBQ0JFQTFEOEM2QzRCMEU3ODA4QworNkEzNzI5NkQ5RDhGQTE1QjlGNDc3RDA2NUYzNTUwOUNCMUQzMjNGRDQ4RDk1RkUyOUFBQTkxMDFFREE4RDE3QzAyMzlDMEY0MzcxNERBNTk5MkUwODUzNkRBODg1QTkxMSwgM0RGOTY1QzQ1OTQ2QUQ1MzdBODZGQzJCMTk5NDRDQkIyNEY5MEVDNjQ4OTlCOThCNEFFNTlCREJERDJEM0JFMkFCQUZBNjMwMEQ5MTZERTg1OTZDMEFENUQ1MzkyMTBFOEI1MDEzNDcyMDIyRDVCN0E1NDNCNjUyQzJCOTFDNEZBRiwgRTkwRTQyMjQ3MDI5RUMxRTlBQUQ3NEVCMzhCRUYyMjk3MUI1MzFBREM2REM2NjVBN0M0OTI3NzJERUU3NTM3MjE4MzY3OEUwQzczQkNDQjk2RTkyNUNCQUMxOUEyQkZFQTlFNDA2MTBDQkY1NDk5MTg5Q0RDMDE0NjQwRjg0OUZEMQorMTNFQTU3QzQ4RDhBRUU0MTJEREQ2NzcxMzFEOUZGMUQ2MTU3OTZCRjdEQThDMUZBN0NGRkZCMzA1QzhGQTc0NzQwNkFENDJEQ0E1M0U4RjBDQjhBMThGQTQ4Rjk5MEZCMzMsIEVBQzcxQjEzQzEwMDZCMDE2M0RCRkU1QkVFMDVFRTAwNUI1Njc5NEU1MDUzNjY0MjlBRTAwMDAxMzg2MzZFRjM4QzlFRTlGMzg1ODEyNTM5ODQ0ODFCRDI4NUFFMjFGMDI0NEVBRDlCRTQ5QjU3NjAwMUEzNjA4QkNCOUU2MUQxQzAsIEU4MTVFQTg2NDFBMjBCNkU3RUE5MkE4MkEzRDU1QkQ5QzRGREY2NTQ4OUNCMTRCNzgyRDExOTEzRTBGQzBCRDU0NkU1QkU1RDhBOEUwMzM0RkY3MjU1QkY5MURBNjExQURGMTgyNDU1Q0E2NUU5QkQ3Qzc3QkJFRjBBQjMzQ0I2NTgKKzNCQkYwNzREQThBMENBQzM4OTk4MzY1Mzk1OERGRDU4MjQwNkM0M0U3OEZBNDVFRjc2RkZGMTkxMTVBRUY1RDVDMTQwN0M4OTVFRkJCQUQyNjI5RTRBRUVEQUVDQjJGMTk5LCAxMzdCRkUyODFDMzlDMUE4MkJGQkJGOUU0RjhCNDE0NzdEOTE2QkZCQzMwNTQ1QUQ5ODY4RDNBNjUwQUVDRkU5Q0VEODE4QkE4N0ZGMDdENDk5MUUyNkZDRDRBNTRFNDU5NEY5MUQxNjIwOEFDQTIxN0UzQUNENkVGREI0NzcwMEQ4OCwgNTc4QTI4N0FFNTBFRERBQTdFODQ0OUFCNUEzNDUwQUVCRkYwQTU0MjY0OEU5RDk5REU3MzM2NTdGMkM0MUQ5RDQzRjgyQTEyQUFGNzFDNjM5RDUzMEJGMzBBQUMxM0Y0MzBGQjY0RTFGMTFCRjcwMDk4MkRFNTRENDQwOTg3OTM2CitCMzNEMTVFOEY5RTI2MDRBOUNDOEEyRkFDMEE5RjgwODZDMTQ0Q0JCNkFFRUQxQ0U2NEZGRDRCMzQxMENFMTgxNDNDMTc1OUMxQ0YzMzA3NzI3REFFMENDOTBDNjE4RDRDQiwgMTRBREY4NEI3QjI2QzNCNzZDRjBDQ0VFRkNCQzA5QTNBOTI4NzBGN0VFNjBDNkY2MTZBNzkwRkUyREM2MjdFQjI4RTA2QzVCMkZDMkU2ODkwOTIyRUZCODM4MzIzN0E1ODg3MDM2MDIzMUJDNUZBMkE0ODQ4OUI1QUM3NkVDRDE1MkIsIDhDREVCOEVBODJCMDc3RDJDODdFM0Y3MTA4QTVGQzEzRTNGQkM5RkI4NDQxM0Q5OUUwM0RFOERDRkZDNjY0NzE0MzI2NkRBMjFFNTgxQzcxQzhEQzY4QTcwNjdCNkVBQjE1QTQzOTZBQ0YyQTEyNzlGMEIzRTNFN0JFMTYyMDY2OEIKKzIxOUI3NDFCQUVEQTcyMERGRDY1OUU4RjA0MUZERTgxOTQ0M0NFNjMyNDBDQzc1NkIyRUZGN0UxOUMzMjZBNDgzQ0I0NDYwRDQ1NkQ5OTE2NTc3OTBBMjY1QjI1MjRBN0U2MSwgMTEwOTU5NjA3Q0VDQUQxQzBFRUIyNjFGMDA3Mjc2QTRCNTMwNjkzRUI1QjFFRTNDQzY3NkJENzQzRTBCMDYyRTgwRkFGQjVDRDU3QTZGRDBBMzM2ODMwMkIzMERGRUMzQzE2MEI5NDFCQ0VBMjM1RkFFOUUwQzgzOTVFNTVBODVGOUEsIDE5MDM3MTY0RTMyRTU2QTU4REUyMzA3OTJBNUIzQTY3QUVGRTU1QTgyRjRBN0QxQ0JFOEMxRkI3MDZCNzM2N0ZCRDVENDlBODlEMzlEQjI3RTg1MTY3OTkzRTlFNUE5Qjk2MjNFMjBFRTQ2M0I0OUUzRDMwQzA0OEFFMTNDMjY4RjMwCis2NEQyNUM1MzBDOEY1NjI5RjgzMERCQUQwQzVGOUI4NEJDQ0I2QjI5NkMyNjU2MDQxOENGRTdBNEQ0OTczRUQ4QjYxQ0QyMjdEMDQ4Q0I0MzA2NkIxRTczMTE2RjZERjdCMjMsIDE2RjdDQTI4Qjk5QTJFREY4NEI0QkU4OEI3ODZCNkI5QTAwNzQwQzJFRjcxRDE2NjcwNDhBODAwRTRDMDhDOTZCMjc4QUY3RUYxMDcxNkJDNUVCREVBMzY5NzUzMEM0RDMzRURENjFEQkZEQTMyMkRCM0U4MDVGQUVEOTU5NUM2MDNFLCAxNzc2REJERDQ0NzM2RjE0RjU5NjVCQTdEMzQ5NDk4NTc3MkQ1QkZGRUZFRjZCMDcxMDlGNkVFQjcxRUIwQkFBNzI4MzZGMDI3NTgxOUZEQUE5RjZGRERFQjM0Qzc5MTM3NDI2RUFFNEM4QkM5REVDMzkzOEJENDIzNzU3RTEzMjQzRgorMTJFNzcxNEY5MjVBRTAyN0RFODkyOTMwNzI1MUVEMjhFMzY2MjQxN0M0NDczMDIwQzRBNkZCNkVFN0RDNUJDOEEyMjU2NzY3NzcwREE2MUM5MTM0MTVCNTkzNDRFNDlFNzE2OSwgNDYwOTM2MTZGOThCQUYyRUIzRTE3NURDNDU4RUUzQzY5RTVDNkI4QjVDRjEzOTg3RTNBN0EwQTk0MTU1OTY4NEY5MjI5REUyQThFOUVDRUREODJGMjg5N0MwM0JFMzJCQ0YwODk4REU5RTM0Mzc0ODk0MzFCRDdBMTIzQzM5MkY4RiwgNTczODFCODhCRkNFMEE1NTdGNzM1RDk2NjVDNUFCMjlERjE2OUYyNTQyMzFCQkJERTJFMTU1QjUwREFCRDUxOTZBOURERDE4M0NDRDgxNzZCRjRCOUZDRTA5RUIwMTFDNUZCMzAxNDBCRDc5QTc0NDAwNjRDOTAzNDFDN0NEODlBOQorMzhCNjUzRUVCNzEwQTA3NzlCOUI3QjkxNTZGNUM3N0FBQTMyNkM0NzRDRDU5MDYyNERGNEYyNENCNzk1MTM1OUU2NzAzNjM2NjUyOEYyNTVCMzlDNDEyMEI5Q0VBRERCNTQzQiwgNDI2Qzg4NzUwMDZBQ0REODI3MUY2MzVENkUzQTg4MkMwODM2OTA2MzVBNkM5NTg5MzI3MjM0NDdDQjEzNThEODZEQ0U0Q0U3MDdCNkU1MEY1NDc2RTdFOTlEODQ4OTE3MjMxRkI1MUM3MkIyNDI1RERBREE0MDFFNkE4Mzc4NTE1NywgMTZCREUyMzJDMzAzQUNEMUNBNkZBQzI2OTkxMzU3Mjc4RjlFRDhCRUM3REI0MkJCNTBEN0UyMkNBMEJDOTZERDMxNkRDRDg3RDREMEY1MzI4NzdEQUFBNjg4NUFGREIyMjk4NzIwMDYyQjlFNTkxNDUxQjVGRjZDRUZDQjVCNUY3RTAKK0FBMjJGQkNDMjUzMUUxNjZEMkQyNzJCNDA0RTE1NjZGRkU5NzQ0RDVFNjgwQjEyNkU5REVENkU2MjZCRjNBMERCMzUwQTJBMzJGN0FENzAxMUFENEMzNjIyRDZDMDk5MUZDQjEsIDEyOTI2ODc2NzYwOTZCQTAzRDAxMzMwNDI2QUQ5MEEzRjFEMzc3MkFFODE5N0IxRDJGNjI3OUZBMzFDMTRDMjYwMzRCNTY3QkJFQjdDRERBMDdCRjI2RDE4MDlBNjk0Q0Y2Mjc0NTM5QjQyQTcwNkEzOTE1QzJGNDQwNDZDRUEwNDk5LCAxNEM4Q0JGNzg0NjJFQ0YyMDkwQzAwOThDRTdFRTkzQzIzNThFN0MzMDhCMTdBNUQ1OTk4ODdGQzIwRERERjUyMEYzQ0E4QTE1RDE5MjhFMEVDNjdEQkJDMTY3REE1ODgwOEFGNDIxMjdCMUM2OTk0QjdGM0IxOEY1MUVBQzU3Qjg2MAorMUZFNjhGMzY0NkY5NUE0MzQ3ODc3NTgxQzBFQTQwMzRGRkJDNUNFODFCMzgyMTM3NEJEOUM4NEIyNzQzREFFMjkxOUYxRTdFOThFNzA4NTAzNTA3RTRBMjY4ODQ0MUNCNUY2MTMsIDFGQkQ5NzNGOEFBMUNEN0U3RTc1OEY1NDNDNEIxNTk2MkUyNDNCQTQzNUE3Q0U2MkU3NTE5MzA0NUQyNDhBQzNDQzA4RTdCNzE3RDY1NDFGMzAwNDFDMDIwMDAzMTExNTVDMkY3QjhCQzUwQ0FBQ0RGOUEyMDIyMzMwOEJBMEIzRUQ0LCAxMTEzMkY3RUNBMjgyRjJDRDE1QjEzNTY2NERDNzFCMzA3NzkzNjgxRDM1RDM1NUNBQkUxOTYwMTA0OEU5MzIyODdBQjYwNjkxOUM3QzMxOTZFQUJFOEExRkQ3RTYwQkM2RUVDNTk1NjE5MDU4QjVBMzgzMjUzOEZENjdBREFCQjg3OAorNUZCM0FEQTJENEVDMEVDOUQ2OTY2MDg1NDJCRUMwOUVGRjM1MTZCODUxQTg2M0E1RTM4RDU4RTE3NUNCOTBBN0I0REQ1QjdCQ0FCNTE4RjA5RjE3QURFNzM5OENDNTYyMUUyMzksIDExNzJDNUUwRkI2RDFFMzY3NjQ5MEE4RjZBNkYwN0JCQTAxNjhCQTY2NjFBMkY4MUZBREIyMDFGOTUyMjgzOTk3NTg0MEMwMjhBOEIwQjYwQTY5MzE2OTI1NTRFRkJFODgzMDI2QTJDMTUyREU5MUNFQTc3N0JEREM2RjYyN0E2NjFFLCBENEFDMEYxMUE4NzI3NDk1RTY5Q0Q1RjYwMzU5RDEyQTBBMUIxMUZERTNFMDA5MzQyOTlDMEU4M0RFQkJGN0NCQUFCQ0RCODc1QjI0NDY2Q0MwQTQzRURERDVGOEQ3NTQ2RTRDMjI3QjI0RjdENEY3NzMyQjNFNjY1MEFBNDE5ODNCCisxMUYxQjA4RTg3RUM0MkM1RDgzQzMyMThGQzgzQzQxRENGRDlGNDQyOEY0RjkyQUYxQUFBODBBQTQ2MTYyQjFGNzFFOTgxMjczNjAxRjRBRDFERDQ3MDlCNUFDQTY1MDI2NUE2QUIsIDFDQTVDOEVEODQxNEU3RjhGNjg0NUJBRkY0QzIyMjE3NjMyM0VBNTc0NzBBNTNDNjlGOEM0M0I1RDQ3NjBFOTA0MUZBNDAwQkZBMjdGNTM4QUYxQTU1RkVBNkQwNEY1RTE0RDcyMkExRTcyODk2OUE4NzA0Qzk2NDIzQzI1QUYyNDdFLCAxNjZDQTkzQTIyQjQ1ODdGQ0IyQkRFMzYyNTNBOUI5Rjk5MEM1NTExOUUzREEwMDYxOUU5RkZGQUIxMUY5NzlCQTEyNUY5ODY0RTBCRTMwNDdDNUY4NTc0QUUyN0IyRDM5QTA4MUNEQkUwREZFNzI1RDdEMDVBNUQ5REE2OTMzNDM1OAorMzVENTExQUI5N0M0Qzg1MTg4QjQ5NjRBRjU4QjRDNTk2RjhERENDN0FERUVCODBENEZGRjgxRkVEMjQyODE1RTU1QkM4Mzc1QTIwNURFMDc1OTdENTFEMjEwNUYyRjA3MzBGNDAxLCBCN0U5RDZBMjdGNjU0NTMxRkMwRjdDNzg2RjAwMDg2M0FEMEQwOEZBQTQyNERCMDRDMzdGODVFOTFBNDM5MDVFQzFGNTBDRjdFMERFNTc3MTI3OUI2RDAwREJGMkNDNzk3QjkyRjQyOEY0MDhERDRGMjNBRUUzNzkwM0YwRUFCNzJDLCAxOTg2RDEyMTZCQjI1NEEyRDE2MURFNDI0MTdCNjg4QjgzQTc1NDYyQkJEMDBFOUM3M0VEREU2QjFCQ0QzRTdGOUYwQkUxN0JEMDM4RjlDMDI0MTk3NEIyOTRGQzEyNzgyODM1MjdGQ0M4M0I4QjkzQTBBNjYxMUQ0QjJDNTkyRUY3RQorQTE3RjM1MDJDNzRFNThGNDlBMURDMkUwRTBBMUU1MEM0RUE5OTY1NzA5Q0MyODI3RUZGRTg1RkM3NkM3ODQxQjAxMzU4QTYwRTYxMTlBMTYwQzc3RjU3NjMxMUQ4RDE1OTJEQzAzLCAyMzZEMkJGNzRBMjc3ODkwMkRGQzcxMTM0NDYxOTY4MTE0RjZDQjg1NDcwRDA4MTRDQUUzMkM5M0IxRjY3QjRBRDc4MTI5Q0RCMjU3RkFCMjk4QkNFNTEwODhCN0M0NDZEQzk4QjIwRDJGOUU1OTFFMUZDNDU3MzdEODFCMTczNzFCLCA3NjRFNDk0NTA2NjIyODdGRjk2MEY3REI5NTM4MjdEMTRDQTY4N0VBQUI2RjQ2RkIyNzU0RUZBQUJFN0IyMzcwMzNDRDUyRjRDOUFGQTE1ODQ5NEQxMDVGOEUyODRBMDdDRDkwNjE2OTRERUU0QUYyMDAxNDRCNjQ1QkY2MkZCMEQxCisxRTQ3RDlGMDg1NUVCMEFERENFNTk0OEEyQTFFNUFGMjRFQkZDQzMwNTFENjQ3ODc3Q0ZGQjkxRjU2NDU2OEM1MTAzQTA5RjIyQjIzNENFNDIyNTY3RTA2MjkzNThBNzQwQjg5NDA5LCBENkM0OEJCREFEMDlENUM0RDIxQzE1OTEzRjEyREU2OTBEMjk4RDc4OTE5QzMwODMzMjM0RjIzNDA4M0MyRkJFNDIyQzk5Q0EzRUQ2MkE4NEM0NkI1OTY2REE1MDJDNjc0QUJCMkQ0NDVGMDg0RjEwRUEwMzI1REM3MjVFQkExQzZBLCAxMjM2QzlGQTQ3RTBERjcxM0U2RkIwNkFFNjIzREZBQkVENjU0QzY5OUE1MEM5RkUwMUYwNDczQkUzNzg4NkI5NkEyMEFBMjEwNDQxQjI4QzA3NzgwNTdCRjhCMkU0NTQyMUVEMjk0MUJDOUVGQTUyNzkxQkQ0NzdFRkJERTJBOTBCMworNUFENzhERDE5MDFDMTIwOTk2QjBCRDlFN0U1QjEwRDZFQzNGNjQ5MEY1ODJENjk2NzZGRjJCNUUwMkQwM0E0RjMwQUUxREQ2ODE2OUU2QUM2NzAzN0ExMjdCQTA5RjVDMjI5QkMxQiwgMTAyNzFEOThFN0QxNTdCNzQ2MjUzNEVDOTA5QTc4RjQ0MUUyQTc2Q0I4REI0RTcwQTFDM0QwRjI1MzIyNDQwQURBQzIzOThGQTdBNEIyNDAwRUExNzMyMDlBRTc2NDQyNUMzNjc3QjkzQzE5MkNBMjMxNkE4MUMzMkI5MDQwQUU1MjMsIDRFMUNCRUUwMDNGRkMzNDk2MzU5RkYxOURFMzNFQ0UyQUQ4Nzk2MDk5OEIyNUI3Qzc0NEIwOTZENEIwODI5RjQ1NTNDNjBDNTVEMzRGNzQyRDY4NUNCQkEzNjE1M0JGNDYyREQ3RTUxNjY1OUYxQjk2MTlEOUU1OEVDMjk4MkI3MTYKKzExMDg2QTk3NEIwNTQzNjFDQzQxMjM4REI3QjExMzI4NEM0QkUyREIyRTA4ODgzQzM2NEZEODIxQTA4NzBBRUVEOTIwQTU5ODM4NDNEQjQwNTM1MEE2RTM3NzJFMURFMTQ2N0QzNDUxLCAzQzVCRjk5Q0JGMjVBNUZCQzFFRDQxMzQxQTAxNzI3RjEzMkNGQjlCODhGOTZDQjRFMjA1RkY3OTgyQUU2NDMwRUVDRjlGMUNBRUIwNjE2Mzc3QjE5NUYzRDZDQjMyREQyQjI1MjFGOThBNTE3N0QyNzBBNTg2QkMwMzU5MUY0QjUsIEYxM0M4MkE5RkIwQkUwRkMzMjg1QkJCQjM4N0M2RUY0MkFERDlEOEIxREFBNDJGQkQ5REIxNzEyMjBFNzk4OUMxM0ZEQ0U3RjZGMDQ5QjY0OUJFODBFMTkzODQ1REUyQjgyRDM0QURCODg1OEIzQkREQUI1RUI3NjQ5MDA3NjE2N0MKKzMzMTkzRkM1RTEwRkNBMjU2NEMzNkFBOTI3MTMzOTc4RTRFM0E4OTE4QTE5OThCNEEyRUY4ODY0RTE5NTIwQ0M4QjYxRjBDOEE4Q0I5MUMwRjlGMUY0QUE2NThBNTlBM0QzNzc5Q0YzLCBEOTc0NDQxRkY5M0JEODc1RDMyRjg1NjIxRkRBNDBDQzVCOEQzRTU1Mzg5ODE5NUQwMTk1MTQzNEZGNjJDRURDOUU1RUY5RjI4NjQyNzc5OERBQkNGOEQ3Qzg2QjAxNzdENTc0MTRBNUJCNUJFNDNFNjcxMTEyNjAyQjlDQjUyM0FGLCA1RERDMkRFRjVCOTA0RTVCQUZFQzQwQjBCREIwMkQ0QzlGRjk1NEVCNzU0NTRFNjhBODNDMEZCMjgzNjA5MEFBNTkzRUQ4ODY3ODA1MThGMTEzQzU5OEJGRTkwMTcyNEI2NEYzMjE5Nzc5RTk4MjlDRDQyMzcxNzNCRTNCNDlBMzUyCis5OTRCQkY1MUEzMkY1RTcwMkU0QTNGRkI3NTM5QUM2QUFFQUFGOUI0OUU0Q0NBMURFOENFOTkyRUE0QkY2MjY1QTIyNUQyNTlGQTYyQjU0MkVERDVEREZGMzA5RjBDRUI3QTY2RDZEOSwgM0IxMTMwQkVBQjc1MUMxNzlENTVBREJCNDlDNkNDOTQxNDQwMTA0QUUwNzBGNEQ5NjBCNjk5NDYxNUI2NjFEQzMxRUE0MjVBRURFMURDNDA4NkUzNjcxQTgyODM2RTVBRDQyNUY3M0U3NkRFOTVGRUQ3RTExRTI4RTdCRERFQjI3RCwgMTQwMjhGMUU0MkM1QjBCNzY4MzJFQUZGRDVEQUJGMjIwNkEyREQ4RkM0ODE4Mjc0NDlBRUZBOTIyQTBBMTE3RUU0RDg1REU5NTQ3NUZDMzAzOEIyRDY1NDM1MzhGQjBCRjAzN0RGQ0VCNkE5MTk5NTk3QTFCQzI5ODdDQzY3QjIzQjQKKzFDQkUzM0RGNEU5OEUxQjUwOEFERUJGRjI1RkFEMDU0MDBDMDBFRDFEREFFNjVFNTlCQTZCQ0I4QkVFM0UyNzMwRTY3MTc3MERFRjI4MUZDOEM5ODE5OUZEOTFERDI2QzI2RjM0ODQ4QiwgMTU0OTEwNDgzNzg4MDhDN0Y5QUJGNkVDRkE0OTlBNEJBRjMyMDhERUQ0OUQ2MDQ4Njc0RUM1QTdDNTExOEI0Nzc0OEE2NkI1REUwNUU0RjhENTA4Q0I1QTM4QzAyQTlBQjRFRTU2RTYyODE3MzhDNEIyNEE1OUFFNDMyQjM4MjBCMjgsIDFGMENEOTZGQjUxMzYwQjk1ODgyMzM2MDU1MDQ4MTYyODRENkM0NjM5N0RDQUYxNDU2Q0M0MDY2OTQwOEVFMzVCOEU2RjhDMjFBQUVDRUZBQUYxMzVCOUUyQzA1MUQ2NTdBNjU3MjQ2RUVGRjg1MUY4MEExQjNGRTMwOTAwQkZDRUMzCis1NjNBOUI5REVCQ0FBNTFGMUEwOUMzRkQ3MUYwNzBGQzAyNDAyQzc1OTkwQjMxQjBEMkY0MzYyQTNDQUJBNzU5MkIzNTQ2NTI5Q0Q3ODVGNUE1Qzg0Q0RGOEI1OTc3NDQ3NEQ5RDhEQTEsIDc0NERDNTUzMjYyMkNFOTMyNjVBOUJEMjY2QTk3MzEyMDg0MEVFNDJBNzAyMzFGMjc3MzVDMTJGMjYyRjQ4NkY0MkI5RTM0REI0ODIzRDgyNDE3MUUzOTUyRTM5ODg4RkVCNTM2QkJFRjM1NjJGOUI3RkQwODAzMUQzMkE1QUFCOUQsIDFEMzYzNzVFREM2MjMxQkEzQUQwNTVDNzhCRjkzQ0VENjdCNDk3MDIzNUFDNjk5MDhGRkVCQ0Q1MjAxQTdENDI2MjFDRTY3NDJCMkE3NjgzQkM3MDEyODZERUJFMkYxQTU3NkQwMkE5RUQxQkRGMkNDN0VGQjhBRDkyQUQ5QTU4OEY5CisxMDJBRkQyRDlDMzVGRUY1RDRFMUQ0QkY4NTVEMTUyRjQwNkMwODU2MENCMjE5NTEyNzhEQ0EyN0VCNjAyRjYwQjgxOUZEMkY3RDY4NjkxRTBGMTU4RTY5RUEyMEM2NUNENUU4RDhBOEUzLCAxREM1MzNGMEU0MTA0NkRFMDdGMTVCNTM1Mjg0NzZEQjQ3MkQ4Q0NBQzgwMjhFRUE1ODY5QkY2MDEwMjkyMTY0NEY2MTJERTBBOTZEOEU0N0IyQUFDQzEyODY4Q0IyNEYxQTZDODlDNUM5MTEzNkRCOUU2OEJFMEE0RUM3MTkxRjg3NSwgQUY1QTU5Q0RBRENERDVCREZBODcyNzkyMzY1RTczNUEzNTA3Qjc2QTc5MEY4NzM4Qzg4RTYyRENGNzU4RUQyMjg3NUNFOEEyN0UzRTE2NkE1OTg5MzE2MzMxQTkxRjVCQjAxMTI1OTBFNkIyMTc5OTAzQkVBRjMxNzlGMkQxREQ3QgorMzA4MEY3ODhENEExRkNFMTdFQTU3RTNFOTAxNzNGOERDMTQ0MTkwMjI2MTY0QkYzNzZBOTVFNzdDMjIwOEUyMjI4NERGNzhFNzgzOTNCNUEyRDQwQUIzREJFNjI1MzE2ODFCQTg5RkFBOSwgMTkyRTQ5NjBERkYzMDQ1OTVDNEY3ODQzMzRBQTA5MkMyQzk0NENCMzEzMjhBMDVDMDIyNEI2M0E4RjBENUVBMTc1M0Y1OTFFMDJDMzUwNjQ2ODBEQkJGRDZCOEI4QkI1MTRFMUUwQkM0QjY2QzY3NTEyRDEwODBFQjRBQkIwMTBFNDQsIERCQzAyODRBMjExRkU2OEQ1MjYxNEFCQTlCOUJBNTg0N0JDMTE0RERCMUIyODA1Rjg0Rjc3MkJFMjk1QjA1MzY1MjA0MDQ0MThFMkIzMTg2QTJEQ0FCNEM0RTFDRkFDQTFEMDk2QkEzQkVDN0YzMkVEMjBBRjEwNTM3QTZCNkREMzAKKzkxODJFNjlBN0RFNUY2QTQ3QkYwN0FCQkIwNDVCRUE5NDNDQzRCMDY3MjQyRTNEQTYzRkMxQjY3NDY2MUFBNjY3OEU5RTZBQjY4QUJCMjBFODdDMjAxQjkzQjI2Rjk0Mzg1MkY5REVGRkIsIDFBNzIyODZDQTQ1MTAzMzUyNjlDMEE3QTg1Mjg5NzNDOTA1N0I0MDhGQTkzNDREMUY0MDY0RkZGRDMyODBCNjg5N0QxRjQzQjM1Nzk3Nzc4MDBGNUM0OEQ5RTg1NTVFNUMyN0RDMTc5QkYyNTgyNUNFRjlGQkQxQjVCNjNCMDQ5MjgsIDE5MkZFNDU1MTQ1NEQ1NUUyNjZBNjIzMTU1RDI0NzNBQjRERjFGNjc1QTQ1MzQ5NEQzQTdFOTA1QjREQ0EwOTU5Qzk4RTg2NTYyNEJFM0I4NEU2MDM2OTM5MDQxRDBBNzM3NTgyQ0IxRjg0MDREQjBDM0JERjk5OTAyOTBBMzI1NDdBCisxQjQ4OEIzQ0Y3OUIxRTNFRDczRDE3MDMzMTBEMTNCRkJDQjY0RTExMzU2QzhBQjhGMkJGNDUyMzVEMzI0RkYzMzZBQkRCNDAyM0EwMzE2MkI5NzQ2MDUyQkIxNzRFQkNBOEY4RUQ5Q0ZGMSwgMTMwOTNEQUQwNTQ4RUYxQ0QzREQxMDRGNkY0MTVCNEJEQUM4MzA0NDJBRTE5NDZDQzk1RDRGRTM4NUY3RDg5MjgyMzYwQjc1ODFGNzg1MUMwQTQ4NDg3OUU1QjNGMjc5OTc3MkU2QkU1MTVEMTBDOTA1NjdENUI2NDYyRkFCQzhBM0IsIEYwQTJFNjUwNjc4QjA1MjY5MzFDNTQ0RDI0OTg3NTgxRTAxQzYwQTIyREQyRDVFMzJEOTA4QUEyN0I3QzBGMjk2MzJCREYyRjAwNDlGNzIxNzgzQzQ3MkU1RjJGQTRGOEFFRTY4OEZGNTMwMDk4QjhDREI2Nzk2OEJCMzM1NEMyNzEKKzUxRDlBMUI2RTZEMTVBQkM4NUI3NDUwOTkzMjczQjNGMzYyMkVBMzNBMDQ1QTAyQUQ4M0RDRjZBMTc5NkVGRDlBNDAzOTFDMDZBRTA5NDI4MkM1RDIwRjgzMTQ1RUMzNUZBRUFDOEQ2RkQzLCAxNjM4MkMyQjdGOUMyODJFREY0Q0MxNTg5ODc0NERENDA0QkVGREREMjc0NDYxQ0MzM0JBRkI4NjgyQjRDMDI0MTdCQjM1MTJCNTY2QTA3MjJCNDBGQjdBNUI4QjMyNDZGNDY2MjE0NDVGRDFBREYxODZFMkI3QTlBRkY4MDJGNDgxOCwgMUM3RDM3QkMyQTRGMjM1OUZEMzVBMkFCMTRGRkVCMzU1QzQ4MzQ1M0ZCQkNEN0EwRDBGNEFFMEIzMEUxNTYyRkEzRDMxNTM5M0U1NzAyRkMwN0RFRjIzNTZFMERCM0JBQzFBNUY1OEFGM0M1RTg1NkU1MTk1OEE2MTQ2NDFDQzU0MDIKK0Y1OENFNTI0QjQ3NDEwMzU5MTI1Q0YxQ0I5NzVCMUJEQTI2OEJFOUFFMEQwRTA4MDg4Qjk2RTNFNDZDNENGOENFQzBBQjU0MTQwQTFCQzc4ODUxNzYyRTg5M0QxQzRBMUYwQzA1QTg0Rjc5LCAxNTE2MkMyREIwNjdFRjI0QTI2QUZCRTc2OUVBNUZFNjkxNTVBQkYwQzM5RUVCOEUzQjg5ODA3MDc1MEEwNTQ5QjMxOEQ1QjY5NTE5Nzk1RUM3RkIwRThGNkE3QUMxNzU3OTczRUI2MDQwMjgwQzMxNDRCNTdBQzk1MEIyQTNERjg2MiwgRURGRThENUFBNUJBRTdDNDJFNEE0RERBNUVCMzUxMkZGODU0QzAyMDc4RDE5RjE3QUUwMURGQjY2NTE0NzI0MzJGOEY2OUY5QzY3OEFCRkU0RUIyOEI2RTYzMTM4ODEzNTY5MDQyREVCQ0EzMkUwRDdDRjNFOEYzQkQ5Q0YyNEI2CisyRTBBNkFGNkUxRDVDMzBBMEIzNzE2RDU2MkM2MTE1MzhFNzNBM0JEMEEyNzJBMTgxOUEyQzRBQkFENDRFNkVBNkM0MjAxRkMzQzFFNTM1Njk4RjQ2MjhCOUJCNzU0REU1RDI0MTBGOEVFNkIsIDFEMzBENDcwQjJFMDc5RkZGQkVDNTAxQzMwNDY2NkY0OUE3MjQ2QjdCNEEzOTMyNTA2RTBGNzUyMUZCOTM1RThBQTlFRTgyNjI3MjQ3RkM3MjRBMzI5RDdBOEFENUJCMThCOTUzRjNGNUEwNzY0Qzk1OUJCMEI0Mjc1NTE1N0EyMUEzLCAxMDUxQUIwOERGNThERURGNUU4MzEwMUEzQTgzNDlDN0MwRjY5MjlCQ0U5RkNBOTExNjdGRUJDMjQ4RDg4QkM2Q0U0NkZFQzQ1MjFBOTYyNEVFQTRBRjMwOTkxQUEwM0JBMzQyQzg1NTE3QzM5RTA0RDM4Mzk1NDJBNjczMzFDNDU5NQorOEExRjQwRTRBNTgxNDkxRTIxQTU0NDgwMjg1MjMzRkFBQjVBRUIzNzFFNzU3RTQ4NENFODRFMDMwN0NFQjRCRjQ0QzYwNUY0QjQ1QUZBMDNDQUREMjdBMkQzMjVGRTlCMTc2QzMyRUFDQjQxLCAxNzk2NDhERkM3NkY0OUZFQTkxMkMyMTMwNEVFQUJCM0VGMkQ5RDQzOTMwREM1MjEzRTFGMjYxRTMxRDlBMzI0OThCOEQ5N0EwRkYwRTkzQzA4RkI3QThCNThEMDA2MkIzQUM5ODNGQ0JFMEQ0MjdEREZBQTZBNUY2MjcwQTlGN0I2MSwgNTRCMTBEMEQ5NEQ0OTlGRDJFODUzQjYxRkQ2QzA5OUU0RkJGRkE4RDQyRkMyNzNBODExMDMxQUU4RUNBNENGNEZBRUYzNzM1QjExRkRBOTBFNTcxRDg5RUEwNkI3RDc1QTBCNEY4NURDNUYyMEE2ODFFMDNCQzRCMDhBNTQyNDZGCisxOUU1REMyQURGMDgzREI1QTY0RUZDRDgwNzhGNjlCRjAwMjEwQzFBNTVCNjA3QUQ4RTZCOEVBMDkxNzZDMUUzRENFNTIxMURFMUQxMEVFMEI2MDk3NzZFODc5NzFGQkQxNDY0NDk4QzA2MUMzLCBFQUQ3MDY0QTIzODE3NkI4MUM2MDVDNENFMEUyRURCQjdCNUYxMjQ2QTE2NUE5NjFENUY3N0NGODczMDQxRjRBN0RFM0YzN0IxMjVDODk2M0Y3Qjg0NTA4MDFGMjc4MkZCRjEzM0FENDAzNUU2MTgyQzlCNUYxNUQxMzQ0Q0E3Q0ZCLCAxMUE4RjNDQUZGQ0YyQjlFMEI0Q0U5Njc1NjZBQUY1NjY4NzM5N0Y5QTk3MjYxMkQ4MzUyOTlENjk1MjI3NUY2ODYxNTA1RDg3NjIwOURFRkMwNTYxNDE0Qjk1MjdDNkEyMDFCM0VENjI2NjlCRjQ1RUI4QTcwN0M0NkM0MUMzNEE2RAorNERCMTk0ODA5RDE4QjkyMEYyRUNGNjg4MTZBRTNEM0QwMDYzMjQ0RjAxMjIxNzA4QUI0MkFCRTFCNDY0NDVBQjk2QUY2MzU5QTU3MzJDQTIyMjFDNjY0Qjk2QzU1RjM3M0QyQ0RDQTQxMjU0OSwgMUI4RTgyMTQxODMwRkU1MDk0NTgzQTkxMzgzRTFDOTY1NTJDOTUwMDJBMUZGMDI2QTYwQUI1QTBBMjBGRkQ2QTkwRUIwQjEzMDYwMTVFQjAzOTQ2RTM3RUQxM0NCMjlDQzU5RDc0REIwOTg0NDBGNjQyRTk2M0U1NTNDOTg0RDI2RUQsIDRDRDYyRjAzRTRERDc1NzhDNjRDMTA0NjI4MEZDRjhDM0U1NEE5MUUxNkRDQUE2RDZCNjVDNTkzNThDQzBGQ0NBOUE0QjU5N0FFOUUxM0ZGNThCQjVEREE0QzdEMTkyNTA3QjI5QUU0NDA1MjZFNjM5NTI4MzAwMzEyN0VEMzgyM0EKK0U5MTRCRDgxRDc0QTJCNjJEOEM2RTM5ODQ0MEFCN0I3MDEyOTZDRUQwMzY2NDUxQTAxQzgwM0E1MUQyQ0QxMDJDNDBFMkEwQ0YwNTk4NUU2NjY1NTMyRTJDNDUwMURBNUI3ODY5NUVDMzZGREIsIEYxOUVGOEQ4N0FGODVDM0I1MzIxQkIzQzM5QUQ5Q0JGNjBGOTExQjRCQjZDNzNGMDJEMkVDREVGNEExMzY3OTg5MTE1MTkyNzA0Qjk4ODlDRjBFQjg0MDEzQjIzRENCQjBEMzhGMEZEQTAyOTY3MTRCNTBENkYwRUYxQUFGNDc5MUUsIDNCOTBENjhBMjk0QjRFQTNEMzM2MTMzOThFQjFBODg4MUVEODc2RjQ3QjU0REFGOTJDM0M4MEE4MEFDNTU1QzhCRUU5OEE5RDMwMjVERDAzRkFDMDQyMTIxQkNCRTc5N0UzOUIzODgwMzA5QzBFNTBBQ0UyNEY4MjREQTFEMDczOUIKKzJCQjNFMzg4NTg1REU4MjI4OEE1NEFBQzhDQzIwMjcyNTAzN0M0NkM3MEEzMkNGNEUwNTU4MEFFRjU3ODY3MzA4NEMyQTdFMjZEMTBDOTFCMzMyRkY5OEE4NENGMDU4RjEyNjkzQzFDNEE0RjkxLCAxRjJDRTc0N0VCNEIyMkQ1MDE0QjY5QkYzQ0RFQ0IyNzk0NDYxMDVCREVDN0FGMjFCNThDOTMxNDFEMzJDOEQxQjAzMUNDNzhCRTI2NTc5QTA1MTdCOEUxNjMzNUY3MDg3NDUyOTYzQ0NCMDEwQzUyQTkxQTJENEJDNTA3REEzQkU4LCAxRjYxNjFBMjNDMjZBRDZBMURERDk2NUFCQTFDMzExN0M3N0Y4MThDQjMwODNBRjY1NjhGMUJCOEZDMkFDN0RGQ0FCNzc0NjY3NkUyMTk5NDMzRjdFNUQ0QTY2M0YxNEVBOUFGRjM0MTM5MzBDRTYyQTRGQTRGQTFGMDAwNDQ4QUJCOQorODMxQkFBOTkwOTE5Qjg2Nzk5RUZFMDA1QTY0NjA3NTZGMEE3NEQ0NTUxRTk4NkRFQTEwMDgyMENFMDY5MzU5MThFNDdGN0E3NDczMjVCNTE5OThGRUM5RjhFNkQxMEFEMzczQkI0NTRERUVFQjMsIDE1NkE2OUUxNzU2MTA3QjMzMTBENzc5MDc0NThFQUEyN0ZBNjlERTdDMTEwNDI4NjE4RjdDRkVDRTZCREVENzA1MUEwRTg1NkZDMkVCMkU3RTkzQjNGRDhDMTg1QjAyMEFFN0FFQjY4MEY5QTVFRkE3MkQxQ0E0RDA0NkY3RDUxNzM1LCAxRURDMTdGRjc2REEzNEFFQjBDRkZCQUM1OThGMkMyODdBQzA2QThGMjEwMTUxNDk3OEFDQTgxMjdEMzc0RUVGRjY3N0ZGMUJDNzIyODI3NkQyNzJBQ0NCODcyOTA5RkVBMURFNkVFQTY5QzEyMUQ1MUNFRjJEQTAyMDI5MTZEMTUwNgorMTg5NTJGRkNCMUI0RDI5MzZDRENGQTAxMEYyRDIxNjA0RDFGNUU3Q0ZGNUJDOTQ5QkUzMDE4NjI2QTEzQkEwQjRBQUQ3RTZGNUQ1OTcxMUY0Q0NBRkM1REVBQjQ3MzIwN0E1QjMxQ0ZFOUNDQzE5LCAxOEUyMzFBMkJCMDk3MERDMUU2NjU1QzhBMkI3RDgzMjU5NTdENzNCN0U1OUE5QkIyMDZCNjM4QzhDRDU0MzlCRDI5NUQ0MkJEMkM5QUFDQUMzOTFBNzUxMzI2NkVEQTM1Mzc5RkMxMkI1OUQ0OTRCNEFFNjBFOTBCRjA4MThENjNGRiwgMTgzNzVCOTUxRDI2ODMyOTAyNjUwMTQ0Rjc2QTFDQzE2RTkxRjZFRTVBRDc2Rjk1M0U2QjYxRkE3NTRFM0NEQzc2NDQ4MUVDNTE5QkM2RDRDRkUxQkY2ODU3MjU4RjBBQTA5N0I1QTcyNEU3OTBBMDAwMDg2RTcwQjI0RUI3MzIwNkEKKzQ5QkY4RkY2MTUxRTc3QkE0Njk2RUUwMzJEODc2NDIwRTc1RTFCNzZGRTEzNUJERDNBOTA0OTI3M0UzQjJFMjFFMDA4N0I0RTE4MEM1MzVERTY2MEY1MTlDMDFENTk2MTZGMTE5NTZGQkQ2NjQ0QiwgMTk3NUFBQTY2QURDRUQyODMzREU2MjJCMDFBNzk3RUZBRTQ3ODYzMUE5QjQ1NUQ4OTVGNDZENDBBNjkwMUFCRjZGNkY3QzVBRjIwOEQyQ0NCNkJFMkI4MUU3MEJCN0ZDNEM3MkU4OERERjAwRjE0MDkyNjlBOUZFMTczNzRCOTQwQkIsIEI2MDVDNEU5Q0RFNkU0M0YyNTRBNEZCRTNBMzI2RjNGRjM3OTY2QkZENUYxRkY1QkVCMDE3OEVFQUU5MzJGQTc4OTg3RTZGODY0NDQzQjkzQkI3Qjk2MjlFMTY0MTFCMzVCNjgwRTFCMTEwOTEyQTMzNDQ1RTZERkNGNEJFQkVENworREQzRUFGRTIzRjVCNjcyRUQzQzRDQTA5ODg5NjJDNjJCNjFBNTI2NEZBM0ExMzk3QUZCMERCNzVCQUIxOEE2NUEwMTk3MUVBNDgyNEZBMTlCMzIyREY0RDQwNTgwQzI0NEQzNEMwNEYzODMyQ0UxLCAxRUIxMTIzRjQ1NUI2Nzc3MjNEMTQ0MTI0ODRDRkVCQjREQTM5NTBGNjFGMTlERjU3MjFGNThGRDNFRkE4QTc1REE5ODY4OUI1RTdBMUVFMkMwNzBDRDNCQjA2OUU1NURGODREN0RDMkNDMjI1ODJGM0Y3RTU2RDBDNDM5RDJFODMyNSwgREE2MThGRDNDNTUwNTA0N0FBQThDQUUwNzU3MjQ2Mjc5N0EyNkEwOUQwODlBQ0VDRTNDNzg2NDA4QkFBNjU3RjY0MjJFRDVGNzQxN0Y1MzY3NDE2RTlENzY0RDBGMjJCOUY3RUI2MUU3REZBRTk3RDBDRTI5QzU2MzIyQjlEQzA5MQorMjk3QkMwRkE2QkUxMjM1OEM3QjRFNUUxQzk5QzI4NTI4MjI0RUY3MkVFRUFFM0FDNzBGMTI5MjYxMzAxNDlGMzBFMDRDNTVCRUQ4NkVFRTREMTk2ODlERTdDMTA4MjQ2Q0U3OUU0MEVEQTg5ODZBMywgMUNDNEVBNEZDQUY2Nzk4QzU2MERGRTlGRTk3MEFENDVENzU0QkIyOTMzMTQ3QTczQTgxQTJEQjlBQ0VGREE0RjYwNjM5OEUxNTk3RDJDMDY0MjQyQTU2MzQ1OTU5NjkyODQxRkYyNkQzNjRBNTc0NUMzRDY1OTdCOTY0RjJEOTg3RkMsIDFFNjdFRTg5OTU3MUFBQzE4RUY0NTcwREY5MDk4ODJENkZDNzZCMUJERTgyNTRBNjE2Q0U5NzA1QTlCNTUxMDBDMzIyQkU4NjNGQzEyREJEQ0JGRUI0QTlENDczNDQ3NzU5MEEyRjUzRjYzRUU4QTNENEVGRkYyMTk4RjEyMzJDNEEyCis3QzczNDJFRjQzQTM2QTBBNTcxRUIxQTU1Q0Q0NzhGNzg2NkVDRTU4Q0NDMEFCMDU1MkQzN0I3MjM5MDNEREQ5MkEwRTUwMTNDODk0Q0NBRTc0QzM5RDlCNzQzMTg2RDQ2QjZEQUMyQzhGOUM5M0U5LCAxQzVDOTRFQkNGNEU0NDFBRjk2MTYzNUU4NTJBNTkwNjM4RTY2QUQ2MUFEQUZGRDM4QUI5NUNBOUJCMEQ5N0FEREE2RDQ1QkYyMTE1NjQ0RDQzMThEMjVGMzU3RDQ2Q0VBOTg1OEJFNTNDRDlERTc1QzZFRUQwNUZFRTY0OTdBNUU4QywgODg1REFFNzEzMzJCNzVFOTg1MzkzMUU3QTYwMjc0NEQ2RkI3RTMwMTM4RDhCODMwOTU1RDI0QTBBODNBMDQ0OTc5Qzc0RDUxQTU5RTI0M0Y5MEY0ODBBNTlCREMzOEZGNzlBOTI5NTYyQkZDNzNBRDg5Njc3NUNCQ0RDQTEyRDJDMQorMTc1NTlDOENEQ0FFQTNFMUYwNTVDMTRGMDE2N0Q2QUU2OTM0QzZCMEE2NjQyMDEwRkY4N0E3MjU2QUIwQjk5OEI3RTJBRjAzQjU5QkU2NjBCNUU0QUQ4RDI1Qzk0OTQ3RDQyNDkwNDg1QUVENUJCQkIsIDFCMUY1RUJBQkM2OTQ3MjFCQUVFODZCOEI1MjdDNEVBOTcwM0MyRjQ5RTE5MUY0RTY1MDJEQTZDNDQ3RTBBNjA4RTg3MTUwRkU4N0FBQzY3NTU4MEQzMEQ3QTc0RkE1MkJDREE4MEFCODgwNEQxOEVBOTAyQkI0NTIwNjcwRUJBOEI1LCAxODQzQjVDMjRCNjJDQTIwRjQ2RTc1NTlGM0FDRkUyREE4QzIxNUZGQzZCNkI5RkRDN0VCNTA3RDgxNzFCN0E3RTgwNzQ2NUI5ODA3N0VCNUNDNjBBMDU2QzFGQTczODgxMkM2QzFCQjQ5QUZEMTE3QTZBQUYzRDFGODM4MEY0QjMwMAorNDYwMEQ1QTY5NjBCRUJBNUQxMDE0M0VEMDQzNzg0MEIzQjlFNTQxMUYzMkM2MDMyRkU5NkY1NzA0MDEyMkNDQTI3QTgwRDBCMjBEM0IzMjIyMUFFMDhBNzcxNUJEQkQ3N0M2REIwRDkxMEM4MTMzMzEsIEY3MDlCNTRCNTExNDU0MzQ3MTg3MDY5Mjc1NEE4NDE0MjhFRkQwNzcwQzgyQTc4MUFFQ0FFNjMzODZDMzI3QjNDNTJFOTkyMzc5QUEyRkJDODUxNEYwQTBDOUJBMkIwNjhDRDFDNDk0REIxREZFRjRCNzgyNzQyNDEwOTMyM0UyQTcsIDE1OTkyNkJGRTU0NDI1N0FDNUVBRkRBQTQ5QTkwRDQzOTBFNTc4RDlBOTBDMjY3MDYyNjMxN0ZDRDI2RjM4NENENjUxMzhFQTdDQTEyNjVFOTM4MkY2NzA1MTU4MTkyNzg1RDhGQjYwNEVGMTVDNTQwRTQ2MUY1OEIxN0JGMjFENDg0CitEMjAyODBGM0MyMjNDMkYxNzMwM0NCQzcwQ0E2OEMyMUIyREFGQzM1RDk4NTIwOThGQkM0RTA1MEMwMzY4NjVFNzZGODI3MjE2MjdCMTk2NjY1MEExOUY2NTQxMzkzODY3NTQ5MTI4QjMyNTgzOTk5MywgMTdDNEVGMkVEREFDN0I2QjlDODk2RDkzNjY2NDU1NTc5ODQyMjY1NkJCRDQyNDBFN0M3RjlBNDQ3RTZFQjUwQjZBMUIyQTU2QkRDQkI5MkQ0QkQxMDU1MzE2NjgxNUIwMTI3OTYwRTc2NzEwM0JERjIwQ0M3RTI0NjY3QUMwQUNBNTcsIEFENTJGNDJDNDQyQjIzRkNFMjY1MEU0Qjc3MDdENkFBNTg2NkY4NjJFQkY4OThGMTA1RDZBQjQyMjkyQjMzNDNFQTk4NkJGRTNCRjY4NEYxMzFEMERGMzQ5QzM2ODg2MDE2NzI4N0IxQzJCRTU2NzJFQzQzMUE3Q0RBOEJBMjJEM0UKKzI3NjA3ODJEQjQ2NkI0OEQ0NTkwQjYzNTUyNUYzQTQ2NTE4OTBGNEExOEM4RjYxQ0FGMzRFQTBGMjQwQTM5MzFCNjRFODc1NjQyNzcxNEMzMzJGMUU0REUyRkMzQUJBOTM1RkRCMzdBMTk3MDhBQ0NCOSwgMTMyOTUxM0M5MzdBRDQwOTIyOThDRjE1OTNBOTcyQjM5QzMzQTFBODU5NjYzMkFCNjQyMkJFMUQxQjlERkZEMTdFMjcyRDdDOTM2MzIxMEUzN0U0MzUwMEMzOTlDRjlCMTQ4NzBEMjMxQTUwOUZFNDM4NjQ0OURDMzIxMjRGNUE2RDMsIDlCM0VCNTZCMTIyQjgyMDM1MDMwREYyQTZDQjA1RkQwNDYzMzI1QjcwQjU0NzVFQzU3NjE3NEZDRjU4ODYxQkMyNjg5MzU1NUQyNjFBOEM3QjY2QjM4RTJGQUYzOTNEMUM4OThGQzZGNEIzMzlCM0ZGQjQ4RDYyMDhEMkM1NTM0RTEKKzc2MjE2ODg5MUQzNDFEQTdEMEIyMjI5RkY3MURBRUQyRjQ5QjJEREU0QTVBRTI1NjBEOUVCRTJENkMxRUFCOTUyMkVCOTYwMkM3NjUzRTQ5OThENUFFOUE4RjRCMDJGQkExRjkxQTZFNEM1MUEwNjYyQiwgMTA3RDhGRTlCQTc5NzVGNEFENENBMUU4NDQ2Njk5QjI0Mzg2MjFCMkMwMTc4OTAwRjJGOEUyQ0UxNzkwNDhDOTg0QUFEODhFNzk0RjQ5OTI1OEVCRkY0MkRGMkI5MjcwREU4MzNFQzMzN0JCOEJGQzEwMzNGNzk3NkE0OUJDOUIxRkEsIDUxMTc0QUM3QTEyRjBBNEQ1MDhGRjA5QTBFRjQ4Q0ZBMjEyQzM2RjM3OEFDNjc5Mjk2MDc1NDc1NDRBMTk4REVEQTgwNjc0RkJDRkRDQjgxRkE5MEQ5OEYwOTYwRkE3Q0ZEMTdDMkM2OTQ1QjVEN0VFRDIyQjcwMUY4NjQ2OUM1QjYKKzE2MjY0Mzk5QjU3OUM1OEY3NzIxNjY3REZFNTU5MEM3OERERDE4OTlBREYxMEE3MDIyOERDM0E4ODQ0NUMwMkJGNjhDMkMyMDg1NjJGQkFEQ0NBODEwQkNGQURFMTA4RjJFNUVCNEY0QUU0RjRFMTMyODEsIDE1RjFEMDM5NUNGRkVGQTE3Njc3MENEQjY2QkRCREEwNzUzNEE0ODFCMUY1QTJBMzE5OTFCMTQwRkRBODM1REJGRjU4NDI5QTQ4NDVFQjUwMUE3MzNGMDIzNDY5OERBOUIzQzU4RTIzRTlCRTI0RTU4MTBGOTA2MUFGN0YyMERCRjk1LCA1RkUzRjdBOUQ4MjEzRkU2NUQyMTlFNjM4ODczRjA4MEZFOTRFRkYxOTI3MTFFQzIzN0IxMDk4RDFGNkYzQzZBRjFERTdFM0M3MjdGQ0RBQTFCMzNENkVGREVCNzJGRDk5MDEwNDlFMjZDMzczQTdGQTM3RkQ4RTNCNUMyRjIzNjc5Cis0MjcyQ0FDRDIwNkQ1MEFFNjU2NDMzNzlGQjAwQjI1NkE5OTc0OUNEMDlEMzFGNTA2N0E5NEFGOThDRDE0MDgzRTNBNDg0NjE5MDI4RjMwOTY1RjgzMjM2RjA5QTMxQUQ4QjFDMUVERTBBRURFQTM5NzgzLCAxM0JCNzNDN0MwREU5MzQzRkQ5QkYzMzE3N0NDMkM5MTZEMkZGQTBBQUJFRkZCOUYxNjY5MzI4NDVBOTcyMTJBMTI1OUJDNjQxNkUxRUI1ODRDOUFERjc0ODYxNjdDRTZFOEI2NDJDOEFFNDZGQTcxNDM0RDFCODJFNTE0NjIwRTRFQiwgMTQzMjY2RDkxQkQyNEE2Mzk0OTlCNUEwQzk0NjQxQkUyRDY0MzRCQjhGQkFFQTZEMDA4RjAyMTg4NEU0QTU4ODJFNTBDRkNDNEE5MzkzMTlBRTBBQzI3MzNBOTFCMDQwM0JGNzIyRUY3MzgyQ0EwRUE2OTY0NTc5MjE4NDVCNTc1OTcKK0M3NTg2MDY3NjE0N0YyMEIzMDJDOUE2REYxMDIxNzAzRkNDNURENjcxRDc5NURGMTM2RkJFMEVDQTY3M0MxOEJBQUVEOEQyNEIwN0FEOTFDMzFFODk2QTREMUNFOTUwOEExNTQ1QzlBMjBDOUJFQUM2ODksIDFBMkQyODhGQTg3NzY5Qzk2OTVERDc4QzcwRDQ2MzM5MkFGRkEyQkI5M0VGOUQ1NDI2NTE4RjczRkI0MUFCQkZCQzFDRUJGMTQyNzE0MDBDNTQ3ODJGOENCQTI4REM2NjVCM0ExNDZCMzgzRjFENzBFMzkxQkFBMTc2NjlFODI5Q0MwLCA3NjBDN0ZDQjkzRkQ4RDE0NTY5MkMzRUI0MzE4RUU2RjAzREFEMTJGMDE0Mjk0Q0FDMzVBODQ4MUM2MDIwRUM3MURGMTQ3NjRBRDEzOUI5NDA2RTc3RjYzQTQxQzdFODMyRjRCREE5NDBFRjU3QTk1N0RFOUI0QTdGMTdDMUZEQTY5CisyNTYwOTIxMzYyM0Q3RDYyMTkwODVDRjQ5RDMwNjQ1MEJGNjUxOTgzNTU4NkMxOUQzQTRGM0EyQzVGMzVCNDRBMzAwQzhBNzZFMTE3MDhCNTQ5NUI5QzNFRTc1NkJCRjE5RTNGRDE1Q0U2MjVEM0MwNTM5QiwgMTI3Qjg2Njg5MEYzNENDNzc1MDQ0ODQ0QkMwODY0QjE1MTc1REU3QTI2RTUxQjRGOTkzRDE4NTFGNjA1RjZENDk0NDcwM0Y3RDcxOEVDQkFFRjVDNjlCODA2RjdBQzI5NjA0OTUyQUQwQTBDNzcxNTRFQ0JCRDNBRkUzQTlEMzY1MkUsIDFDODk0OTQyOEE2NkExRjJEN0U1NENDOEY4QzU2QTQyMUZDMEI4QThFMkM2QjA2Mzc2NzFGMkJGMzFBQzA2NEUxNDFGRDYxNUZCQjk5NkMyM0E0QzQ5OTE4OUIwN0JCOURGNzJGNUNGQkVCMTZDMjVBNzFGOUQ0NzMzRTdBQjNGQjgzCis3MDIxQjYzQTI2Qjg3ODI2NEIxOTE2RERENzkxMkNGMjNFMkY0QzhBMDA5NDQ0RDdBRUVEQUU4NTFEQTExQ0RFOTAyNTlGNjRBMzQ1MUExRkRDMTJENEJDQjYwNDMzRDREQUJGNzQxNkIyNzE3QjQwRkFEMSwgNzlDRDMzMjhBM0E1ODA2NEZCOEI5MEY5RkVBNDQzNzQxM0YxNzZFRTQxRjZCOTdFMjk5QTUzODE3MENCODEwMTZDQkREQjUzQzY3OTE5NzUwNUI1NzIzRjc3MEQ3QTRGMDU5QURDODYwMDNDNjM0QTU2MzBBQTExNEUyNDNFMjQ1MywgRDgyQTI1MjI4RjhDM0IxNDA3QjdFQUI2NzYyODk2NjAxMDQyOTI0N0E4QTRCN0I2MjE4RDAxMDE3MUVFOUM4OTZDQzRFODE3MDQwRkFFMUZBOEEwQkNDMjMwMzk5REZEM0M5NjEzOTdBRjRFOEQyRkQwQkM1RTM4MEZDQUM0RUZFMAorMTUwNjUyMkFFNzQyOTY4NzJFMTRCNDQ5OTg2QjM4NkQ2QkE4REU1OUUwMUJDQ0U4NzBDQzkwQjhGNThFMzU2OUJCMDcwREUyREU5Q0Y0RTVGOTQzODdFMzYyMjBDOUI3RTkwM0U1QzQ0MTc1NDcxQzJGMDczLCA2N0EyMEI1ODY5NjBFNjQwQzk2RjZDNDdFQUQ5RDhDMDExNkFFQjhDNjYzNDU4NzlGQ0UzOTRBNUU5NEYxMjJBNjI4QjU2QjVCNTU1QTJCMjc0QjI4QTRDQjgyMTNCNTk0QkU5NERGMjEwMzU4QUU3NjA2NzI3NzE0MzUzNDJDREI3LCAxNjFBMzk2RjlFNjY1MTY0MkE2MzExNzdERjFBNzlCRDUzQjEwNDdDMEExNEE4REY5MTMyNjEzNDNGQTQwRThDNzNCMTA4Q0U0RDZFNEU1MDlFQjE0RUQ1OTdGMzRGQUIwQjMwQkYxMjVDNjI3QkM3NzhDRTc2NEVBQjI0RDBERTI5NQorM0YxMkY2ODBCNUM3QzM5NThBM0UxQ0RDQzk0MUE5NDg0MkZBOUIwREEwNTM2NkI5NTI2NUIyMkFFMEFBQTAzRDMxMTUyOUE4OUJENkRFQjFFQkNBOTdBQTI2NjI1RDI3QkIwQkIxNENDNDVGRDU1NDhEMTU5LCAxMEE5MTMxMjI2QjYxOTc5QjZBOTc5OEQyRTJBODQ0OEUzNzlBMkU1NThCNEU0RDgxN0FBQTA0QjAzMDRCNTlGODY0QTNFODVDQTEwNTBDRTU1QUM3MzhEOEFFMTQzODZCRUM2QzBDMzExNTA1RDU1QUQ4RDdDQzkzMUFFRUJFNjkyQywgQjY0ODMzNDNENzAwNEEzQUQ4RDVCOTkwOTQxOTFDN0ZCRThCOEI1MkQ2RjU2NEUwQTRENjBFM0Q1NkY5RUVENDQ0NUIzMDFEODM3MjYxMzQyOEZERUY4NjgyNEVCQUU5RTRDQzI5QkZENENBMzlEMjYwMkM5MTVBQ0E3NUE1MzQ2NgorQkQzOEUzODIyMTU3NEFDMDlFQkE1Njk2NUJDNEZCRDhDOEVGRDEyOEUwRkEzNDJCRjczMTE2ODBBMUZGRTBCNzkzM0Y3Q0Y5RDM4NDlDMTVDMzVGQzZGRTczMjcxNzc3MzEyMzEzRTY0RDFGN0ZGREE3NDBCLCA5RTUxN0RDMzA1NTlDNENFQTU1NjYwRkU5Q0M2NTA0RDg3NTk4OURGMjE2MjlEMkM4QTgzQTUyNkE5QTE4NkJFRUQwRThCRUZFODk5OUY0NDA4NjYyNUMzMkRGNDVBMzEwRTQxRTE4QjgyMjEwQjgxQTgxMDQ4RDQ2NUU3NjJCQUQyLCAxNEJBRDJERDJEMTBFMzI0NDkxQUU4RDI5RkIwMTgxRjE2REMwMTAxQzQ3RkJERDIxMTg5NzQyNUE0MTBCNzQzMDI4Q0E0MDVGQzA3NDg0MzkxNjgwMTUwNzg5NEMyNEFDMjJDMjQyOEZEQjcwNTNERDA3RTZENzg5NTBGNDUyRTBBQworMjM3QUFBQTg2NjQwNUUwNDFEQzJGMDNDMzEzNEVGMzhBNUFDRjczN0FBMkVFOUM4M0U1OTM0MzgxRTVGRkEyMjZCOUJFNzZFRDdBOERENDQxNEExRjU0RkI1OTc1NDY2NTkzNjkzQkIyRTc1RTdGRjhGNUMyMSwgOEM2RTFDRjk1N0U5NTUxODFEQTU0OEUzREM1NUVCRUM2QzNDNjhCRTUwRjRGQkZBMEI4QUMyOEY3RDRFOTJGQzFGOUU1RjlEMzJBQzQ5NTNGN0E2NjAyODYxNTc1QkVFMDEyQjlGNDM3NzE2MTlEMUNFRjdBOENENDkyQjI1NTI2OCwgMTRGRjI0OENFQURCQzkyMzY2MzU4QzJGM0Y4MDQ2RjVEQTFBMTUzRjhBQUIxRkY1MEZENzAxMjIzMjA5QzlCODc2ODQ2RDFGQUU2OUVCQTdERkUyN0U2ODI0QTEwMUYzRTk3NjkyOUVBQzlBRjA3MEFFQTVENTMyOTYxNTVBRTQ4NjgKKzZBNkZGRkY5MzJDMTFBMEM1OTQ4RDBCNDkzOUVDREE5RjEwNkU1QTZGRThDQkQ1OEJCMEI5Q0E4NUIxRkVFNjc0MkQzQjY0Qzg2RkE5N0NDM0RFNURGRUYyMEM1RkQzMzBCQTNCQjMxOEI2MUI3RkVBRTE0NjMsIEJCRUY1NjlFMENDOUE5NkM3QTFDMENDNEQzRDcwNjIwQkQ1RTlENTNBNThBQ0Q3Q0QyNUJGMjE2NzhEQzZFRkZBQTFGODlCMUY4RjM5RTc2MzFBOUEwN0QyNUMxOUUxQzY3OTQ5NThBQjJBNjAwQjI3ODExOEYwRTI1QzYyMjM0ODcsIDE0ODc0M0UzRDk4OTI1QkVFQzUzM0MyNkIwRTNBRDEwMUNBMjhCQzc3MDFDNTRGMTZBOTJDRTcwQjJGMzlCNjdEQkM1OTg0RDgwNUM0MThGRTVDQjA5RjQxMzRDMkZGNThCODYwQTY0QjlDRkQ4NjZCQUE0NzBFQTMyREY3RERENjhCCisxM0Y0RkZGRUI5ODQzNEUyNTBCREE3MjFEQkFEQzY4RkREMzE0QjBGNEZCQTYzODBBMzEyMkQ1RjkxMTVGQ0IzNUM4N0IyMkU1OTRFRkM3NjRCOUIxOUZDRDYyNTFGNzk5MjJFQjMxOTRBMjI1MjdGQzBBM0QyOSwgMUM2NThFOTE4QUQ0ODE5MDJGRkNCNjk3QUY1MkNFREUzRjI2MjQ0OTQzNjE0NUI3NEFEMTQ3RDJEOEU0NTcwRkY2MzBENTQ3QUFBQjRGMEFEQUMzMjk0NUU1NTk2MjhBNTUwOEM2MEUzNzc1RjBGN0IzQzYyMjIzOTk1Q0VCNTZBQkIsIDdCRDg2MTE2M0VGQkVDMjRDQ0MzOEE0MkUxRUFBOUQyQjlCQTJEMkNEODU0NTg3NjAwNEVBNjY1RjBBQkQzNzREMzhFOUE0NzZCMjkxRTU3REI5MkRENTEzRDE3QjkzQzg3Q0VERUIxQTE4N0ZCRjcyMjQxNkI0Q0UyNzEzODRCRUUKKzNCREVGRkZDMkM4QzlFQTZGMjM4RjU2NTkzMDk1M0FGOTc5M0UxMkRFRjJGMkE4MUU5MzY4ODFFQjM0MUY2MUExNTk3MTY4QjBCRUNGNTYyRTJEMTRERjY4MjZGNUU2Q0I2OEMxOTRCREU2NkY3N0Y0MUVCNzdCLCBBRjE0MzBDQ0ZCNkU5NjkwNUM2MDEzMkQ3MTFDQTAxODNEQzQ1NjUxNzQxM0Q2QjRFQTc5MzYwRUUyNERGNEM2MUNFRTM4RDY3RDU3RDhGNkI5N0I3OTk2RkNFRkE0OTM1QzJFQUU5MERDMUY3RUY2Q0Q5M0I3OTJFQTA5Q0I3MkNBLCAxNUJCRUIwQjI2REYwOEJBM0JBM0RGMDREQTE1REVGMzMzNDQ1QzlENTg4MTY2RThGNUU3QzQzMzNFRkVEQUFFMjE2MjI4QTc4OURCNUU5Qjc2QTlGOUY4QzQ2M0M3RDAyOEVBMzg5OTVEMzdENjc1NUU5NTc2OUQzMkI2OEI5MzczNgorQjM5Q0ZGRjQ4NUE1REJGNEQ2QUFFMDMwQjkxQkZCMEVDNkJCQTM4OUNEOEQ3Rjg1QkJBMzk4NUMxOUM1RTI0RTQwQzU0M0ExMjNDNkUwMjhBODczRTlFMzg3NEUxQjQ2MjNBNDRCRTM5QjM0RTY3REM1QzI2NzEsIDExRUIyMTMwQkNEQ0U5MURGRUJGNDc3ODk4RTAwRjQ2Q0I0NzVCRjVCMjdFN0M1Njc5QkQwQjE2N0FFRkZDRTlEQTQ3RDQ5OUI0QTJGMTNEQzRERTlFNzIyMzY1OUE2QTY0RDZERTJCMjQ2QzQ3NUY5M0E0RTBBQjY5Mzc0Qzc3Q0I5LCAxRDMzRDQ3ODAyQkQwNTI1QTQyOTRBMDFBQUZBMUM1QkM0NDVFQTYwOUQxQzkxRDBBMzVBQjI1MTQ1OTUxQkM5NzY2MTQ5RUUyMTkwRkJGRjU3MzUwMTg3Njc1Q0E0RjBBMkUyRjRDREJFMjFBQTU4MDQ4RTUzOEQzMDgyNzM1QUYwOAorMjFBRDZGRkREOTBGMTkzREU4NDAwQTA5MjJCNTNGMTJDNTQzMkVBOUQ2OEE4N0U5MTMyRUFDOTE0NEQ1MUE2RUFDMjRGQ0FFMzZCNTRBMDc5Rjk1QkJEQUE5NUVBNTFEMjZBRUNFM0FBRDE5RUIzNzk1MTQ3MzUzLCAxQTJGMTg0MDVCQzdBM0Q1MDlCNjlDMUQwNTg1NkQ0Q0VGOTgzNEU3OUEyNTYyNzM5MDVERkE2RjhCOTY1OTYwQjFBNzM1NUM4RjYzNjVDOUQ5RjREMjU0MDk3OUFFNjhGRTZENEY4OUYxQzQ2MjYyOEZEQkYyQzI1RjQ3QTk0OTZDNSwgMTREQUE2QkI4MjQ5ODk3NDQxQTZFMTQyMjQ0MTY3QjlERjA2RTc0RDc5MDU5MTBBMTRBRTY0NUEwRDIzQUVDM0I0QzVBMTYwREU2MEM5RkYxREIwQUM0QTJBQzNENTkzMkQ3N0JCQzIyRDAyQUMyREMxODUyRjNBOUYzNTlEMzhFRUIKKzY1MDg0RkY5OEIyRDRCQjlCOEMwMUUxQjY4MUZCRDM4NEZDOThCRkQ4MzlGOTdCQjM5OEMwNUIzQ0U3RjRGNEMwNDZFRjYwQUE0MUZERTE2REVDMTMzOEZGQzFCRUY1Nzc0MEM2QUIwMDc0REMxQTZCRjNENTlGOSwgMUJCOUQ5OUYwQjM0RjcxNjgzRjk2MjlEM0FDQzFFQzBFNzEwODYxRTk5RkZFQzNCRkNBMDMxNDdBRkJBNERGMjUwMjQ3RTJFM0FDMEMxMzlDNTRDOURCNzhGM0RFNEI2Qzg4RDg4QzQzNUMwMjUzRUUzMEJDNTVBMEY3NUVDNkNGRjAsIEYzOTBCODY3MTFFQzFEQTQ2MEZBNzNBQjFDNzc1MzQyOEFCNTkyRkFBNzg4NDkyNzE4RDBFRDU5NkEzMjczOTE0QTBCREI0RUY0M0FERDg1QTlDMDk3RjQ4RDdDNjE0RTI4RkNEQjE0QUU2MjEyOUFBMkRENzk5NEM1RjUxQzdEN0IKKzEyRjE4RUZFQ0ExODdFMzJEMkE0MDVBNTIzODVGMzdBOEVGNUNBM0Y4OEFERUM3MzFBQ0E0MTExQjZCN0RFREU0MEQ0Q0UyMUZFQzVGOUE0NDlDNDM5QUFGRjQ1M0NFMDY1QzI1NDAxMDE1RTk0NEY0M0RCODBERUIsIEFCNzA3NzFCNTVEQzI0MDZEQTJDRkRGNkFEMzZCRTA1RjNENkI3MTM5MTUwNDMzM0MyQURBODUzNjcyMTU1OTlCMUY3NTQ4M0UzMjQzMjcwOUFGMDFFOEVGMkRDN0IzOTNCNjlEMEE2NkY2QkI1Mjc0OUU1MUE4Qzg1NUUyQjIxNjUsIDFDOTI3RDIzMERERUM5OTA4RTIyMDJEODYzRTM3QTkyNTRBOUFCMEYxNUI0QUQzMDU4RDZCNTA4Mjg1QkY2MzgzNzlERjA1MTNDM0RFRDRDNUYwMDNDQjQ4NjAwMUZCOUI1QUVBNzk2RTg1NTkyODRGRTgyMTEzRTdCQzlFRTcxODRDCiszOEQ0QUNGQzVFNDk3QTk4NzdFQzEwRUY2QTkxREE2RkFDRTE1RUJFOUEwOUM1NTk1MDVFQzMzNTI0Mjc5QzlBQzI3RTZBNjVGQzUxRUNFQ0RENENBRDAwRkRDRkI2QTEzMTQ2RkMwMzA0MUJCQ0VEQ0I5MjgyOUMxLCAxQ0M5ODAyRTNENTNBMDhDMTA2M0VGNTA1MTAyNDFEQUFFREY4MEMxNjk2MjU4RjgxMjQxMUE3NjE5RDUwMEUzQUNBRTM1RDFEQzE2NzYxRTlBQjFCNjY3RjZBNUNGQjNERTYwQzZEMEUwNjI2REU0MjlBMTM4RkVGMzQxODkxMDYyMiwgRjQ1QzJDQTU0QjM5N0RCMTU2NDBDMTlFMkZDNUMyM0E3MjczNDFBODZBQTQ4NUI5NUU1RTIxRUY1NkJEQTUwOTIzOTY0OUQ0REY3QzczNkRGRDVCOTQyM0ZFMkI5NjQ5NDEzMzNCQTdENjNGOEFEOTJFNkNGQjA0MDk5MkM3RjY5NAorQUE3RTA2RjUxQURDNkZDOTY3QzQzMkNFM0ZCNThGNEYwNkE0MUMzQkNFMUQ1MDBCRjExQzQ5OUY2Qzc2RDVEMDQ3N0IzRjMxRjRGNUM2QzY5N0U2MDcwMkY5NkYyM0UzOTNENEY0MDkwQzUzMzZDOTYyQjc4N0Q0MywgMTVDN0M3N0E4NUEwODc1ODZFMzU0Mzg0OTYxNEFGN0NEMzczQzU2QUQ0RDA0ODY1QTcyRDlEQzg1NzJERUIyRTgxMUE3NUEzRkMyOEM4QTFEMUQ3RUM2MTMxMkUxRTgxQ0IwMkVFRDAwM0ZGMzY5MzI1OURGQ0Q4Nzc4OTFCRTE4M0MsIDZGOTQ5OUY0RDkxRjkzNkMxNTMyODVBN0MzODNCOEM2MDU4RTlFNjc2RDFFNjhBQTc3Nzg5NjAzMEM4NkY5NjAyMkEwOENERUQ0NTI3RTJCOTQ3RDRBMjdFN0QxMUU5NDJGNkVCQzBFNzRFODRFQzJFMkYxQ0QzRUNGNTlEQ0M4Q0YKKzFGRjdBMTRERjUwOTU0RjVDMzc0Qzk4NkFCRjIwQURFRDEzRUM1NEIzNkE1N0YwMjNEMzU0RENERTQ1NjQ4MTcwRDY3MUJEOTVERUUxNTQ1M0M3QjIxNTA4RUM0RDZCQUFCQjdFREMxQjI0RjlBNDVDMjgyNjk3N0M5LCA1NDJCNkI3NDc3OEFDNDU4ODg2RTM1QTlBMTQxMEMzREE5RjBGMEU3NzkzMDQ5NUI2MjYzMUFDRTE3QjdBMDQ4NEM5QjAxNENCMTUzNjc3MEJCN0I2REZDNDkxM0IwRjM0RTYzRkYzM0M5MTQ4MUM2M0Y3QkMwMzEyMjJCQ0I1M0FBLCAxMUQ5NkM0MDU3ODEzODlDRjUzM0Y4MTU2QTcwQUFFODg0RDI2MUZGMzZBRDc5MjgxMENBODU5QTI3NTFCNkMxNENBMUM5OEUxMjMzMkRBQzI4QTM3NjcxRDA2OTNDNUU4MTQ5M0E0ODNCQ0UxQkQ3MzkzMzMwMzVEREFFQUVGNUFBRgorNUZFNkUzRTlERjFCRkVFMTRBNUU1Qzk0MDNENjIwOUM3M0JDNEZFMUEzRjA3RDA2Qjc5RkU5NjlBRDAyRDg0NTI4MzU1MzhDMTlDQTNGQ0ZCNTcxNjNGMUFDNEU4NDMwMDMyN0M5NDUxNkVFQ0VEMTQ3ODczQzY3NUIsIDE4M0MwNUI3MEYyMDlCRTcxNzA0NUFCRUEwQjkxRTg4NjQ1RDkyMTAzMDdBNDVGNzg4N0NCNUI4RTA1Mzg3ODAxRTA2QTE3RTM0NTQ1RTRENTRCNTBBNjFBMEFEODYxOUI2MkE5NDUzRDQ5OUQ0Q0ZBNjRGQzU5MTU0MUQzNjBGQTU1LCAxODVDQTlGRkE4MjdDOUVBMzhGOUVCMEJGMjRDRTM2NzAxQUU3OTRDRjA1MzQ0QUFENDY5QzZCMTNDQzQwQjE0MjZFQ0Y4REZFQjY5RUE4ODMxNjEyRTRBMDQyQTg4MzI3OUFFODM3OEYzQzI4Q0I1NEE1QjM2N0Y0MUE5Q0VGQTg4NQorMTFGQjRBQkJEOUQ1M0ZDQTNERjFCMTVCQzBCODI2MUQ1NUIzNEVGQTRFQkQxNzcxNDI2REZCQzNEMDcwODg4Q0Y3ODlGRkFBNDRENUVCRjZGMjA1NDJCRDUwNEVCOEM5MDA5Nzc1QkNGNDRDQzZDNzNENjk1QjUzNjExLCAxN0UyRDNFODI4OUYxQTM4MjIzMTZFQzQ1QzgwQTkzRjExM0MyQ0NGOTJCQkFEMDYxNkNFNEMzMUY0N0E2Nzg2REUzMTA0QjE3MjczM0M5QzM0OUVDQjQ3MjRDNTlGOTA5NDNDRTZBODcwNjRGMzYzNjlCNDE3M0Q0MDJCMzNCODlENCwgMTRGQzE0RTVCRUIwODY2NjIzNDAwNjk2QTJGRjQzOTk2N0M3RTMzQTE1MjhGNTc5MEQxOTZGQUUwQ0FBNTY4NkQzOEJENzk1QkJCQTc0NzEyRjQwNkUxODNBOTJFQjc5MTAyMDg2MjI5Njc1QTJBOEIyRUJDQTk4MTY2MDg1OTZEQTAKKzM1RjFFMDMzOEQ3RkJGNUVCOUQ1MTQxMzQyMjg3MjU4MDExOUVDRUVFQzM3NDY1M0M3NDlGMzRCNzE1MTk5QTZFNjlERkVGRUNFODFDM0U0RDYwRkM4MzdGMEVDMkE1QjAxQzY2MTM2RENFNjU0NTVCODNDMTFGQTIzMywgMTY3M0MwRjRENkEyMUVBQTU2OTJBQzkyNTZDNjQ4NzM4QkQ3MjUyREZEMTg0RTk1MTJDM0Y1RjkyRjhGNTFFNERDQTZGRUI3NUQxM0ZGNzVFREM4RUQ3MjhDRTI0NTEyMTE1QjdENjZFNUE4QzdCREQ1M0YxNDhDRjdEQTcwRTZDRTcsIDExQUFFQzNDRTdERjJBRDA1OTE5NDlEMEJCNUY0QjU0MzdBNzI4N0QzQTFDRkMwNkY2MUZGMjRENDcxNDYzMUUwNDcxRTAyNzgyQkU4MjNFOTA0QUQyOUZGQ0U1MUQxN0FBODM4RjUyRTMwNEExNTdGRTBFRTA2NzQyNjc4QTFEMjJFCitBMUQ1QTA5QUE4N0YzRTFDMkQ3RjNDMzlDNjc5NTcwODAzNERDNkNDQzRBNUQyRkI1NURERDlFMjUzRjRDQ0Y0QjNEOUZDRkM2Qjg1NEJBRTgyMkY1OEE3RDJDNDdGMTEwNTUzMjNBNDk2QjJGRDAxMjhCNDM1RUU2OTksIERFMzIxQkJCRjRDNTRBRkNFN0QzMjIxNUEyRUVGRUIyRUUwOTc2N0ZGRjA0RkFBNkIyMzQxRkFGNzgyQ0Y5QTlEMDdFREJFNTkzNkYyQjM2QzU4NUU1RDk5QTI5QjY5RThGMDhGNEEyQ0ZFMjE2NDFERUI2RDA0MUMwOEI5NzRFQkQsIDE4MTc3MDI1RDFFMEJFNzdBNjdDREVCNTQyQzA5ODQ4ODUwM0Y3MDM2MEVCMkY2MUM4MjNBN0IxQkRFQkIxQTg4OTJBMzA5N0Q4NUY0OUFBQUJDQ0EyOTc0NUM1RTdDQkYxMDNBQzYyREFEQ0FBOTk1QUQ5NTIwNkVGMjQxMUM3NTJECisxRTU4MEUxQ0ZGOTdEQkE1NDg4N0RCNEFENTM2QzA1MTgwOUU5NTQ2NjRERjE3OEYyMDE5OThEQTZGQkRFNjZERTFCOERGNkY1NDI4RkUzMEI4NjhFMDlGNzc4NEQ3RDMzMEZGOTZBRURDNDE4RjcwMzdBMUNBMUNCM0NCLCBEOERFMkUxNkQzNUZBREQ1NDYyOEJGOTREMUVDODE2MTFFNkQ3MDNCN0Q4N0IzNzI3Rjk2RkJGMTMyNkQ4RUZDRUU1NDY5NDQyRjYyMjk3MDhEMkI5RjI4RDBGRjI3ODRDNzhCNDQ4NzczMDRBODkwMjQ3QUNDQ0JDMTY4NzJBM0IzLCAxRkU2RUEyOERENEIzMERGMzkwQzU2N0FBMTVFREVCMzAwODYzRjQyNUE1QjFCM0NDMTZCQ0Q4NjE5MjRFQUU3ODM0RDczQzBCMTNGRTFBMDNCQjFERDI3RUQ3NDI0QkNDMDFFN0MzOUFCM0EyMTFBOEVBOTI0NDVEMTM0NDRCRTlDOQorNUIwODJBNTZGRUM3OTJFRkQ5OTc5MUUwN0ZBNDQwRjQ4MURCQkZEMzJFOUQ0NkFENjA0Q0NBOEY0RjM5QjM0OUE1MkE5RTRERkM3QUZBOTIyOTNBQTFERTY2OEU4Nzc5OTJGRUM0MEM5NEM0QUU1MEE2RTU1RTU2MUI2MSwgMTg0QUJFM0ZCMDMxMkQyODJBNEUwREYyMkRBRjY0MDhGMzVENEYwOEVBMTcxRTk2REQ3NTNEQUZCOEUzMzREOUNCMUY5NEZEQUFFMjhBNTJDQURBQTYxOTZGOEVDOUZBOEM0QTEyMjhFNUMwRkQxQzc3QjY5NjYyQ0ZEQjkwODIxREIsIDE4ODMxNENBMDkwNTk1OTQyRDI1RDI2RUUzQTcxQjk3REJGRDhGMzAyMkE3OTlCRDYxMDU0RDZCQ0Q3REQ4NTI3NTkxMDJFMEIxRkQxM0E0RTQ5NkIwRDAzRUI0OTlGNDRGNjZEODAzQUU3RkREQkFBQkQ2QjQzQUQxOTYxQ0QzOTJGCisxMTExODdGMDRGQzU2QjhDRjhDQzZCNUExN0VFQ0MyREQ4NTkzM0Y3OThCRDdENDA4MjBFNjVGQURFREFEMTlEQ0VGN0ZEQUU5RjU3MEVGQjY3QkFGRTU5QjMzQUI5NjZDQjhGQzRDMjVCRTRFMEFGMUY0QjAxQjAyNTIyMywgMkRGNDg2QTNEQzM1NDEwQUFEMjdDNjg2NzEyNzhCMURGMDdFQzU5QTM1NTVBQzFGMzNBQzk5MzI3NzQzRUVFRkE1MDQ1MDk4MUQ0QTYzQUUxRDQ3OTFGODU3NkU3NDVCNThFMjFGRkIwMTMyQkM5RjU0NzFDRDU5NkM3NUM5RTJEMSwgQ0RERjk0MkZBQzlFQzVBODNEMzRDMUU2MUJGQzZERDA0MzJGQ0YyMkEwM0U2MTdCMkE3NkZCNDMyQUNDRjA3NkVFNTUzOEQ5MTAxOTgwOUMyNTdGMzI5RDY3MEREMzJCQzg2MTIzNkM0NkY4OTg1MjYzNTU2NDIxNzM0RTJEQjQ3RQorMzMzNDk3RDBFRjUwNDJBNkVBNjU0MjBFNDdDQzY0ODk4OTBCOUJFNkNBMzg3N0MxODYyQjMxRjA5QzkwNzREOTZDRTdGOTBCREUwNTJDRjIzNzMwRkIwRDE5QjAyQzM0NjJBRjRFNDcxM0FFQTIwRDVERTEwNTEwNkY2NjksIEZDNDdGMzlEOUE5MzQyRDMyQ0NEN0VEMTU1MEIxN0ZDNzZEQkQ5OEU0RUM2NDg0OTFFQUEzQUQ4MUVDQ0Q0OThFNzU4RUY2RTY4RTI5NDJGQjU0MzZFQzJGMThFNkUxQTU5NDU1NTM0RDM2NjQ1QUE2Q0UyRUVGN0FCRUE2QTQyOUYsIDc3QjY0RDBDODQ0MkMxNjA3MUQwNkFCMkY1NkRDMUU0NTRFQjM3QzAwNDZDRjlEOUEwNUFGMTcxMDA3ODkyNDJENkI0MjZBMzM1MDA3OTM2Njc3QUE3QzgyRTM2NUUyNUU2RDMzNUM2N0U1QTRDN0YyMkU4MEFDNEY3QTkxNUQyMTgKKzk5OURDNzcyQ0RGMEM3RjRCRjJGQzYyQUQ3NjUyRDlDOUIyMkQzQjQ1RUE5Njc0NDkyODE5NUQxRDVCMTVFOEM0NkI3RUIyMzlBMEY4NkQ2QTU5MkYxMjc0RDEwODQ5RDI4MERFQUQ1M0IwQkU2MjgxOUEzMEYzMTRFMzNCLCA3MkRGN0QyOURDMzgyRDA2MUQxN0ZBMjlDREY0RjJDQTVGRTUzM0Y0NEU2QzBCQjM5QUNBQUE1QjUzNTc0OEQxNTVEQTIxNUM1NzJBMjRFRkJFQjNFMDhDNDIyQ0JDN0NDMzg5MjgwQzc2NEZCQjEyMEIzNzQ4NUJFN0VENzkzMzAwLCAxMzc5RjA0RTM1RTE5RTI4MjM1MzFDMEQ5MjY4ODkyODdCQzY2RkVERTYxN0VCMUY5MDYyOTRGQzVDMTBENzE4NUFGRjA5QUNBQTM2NDg0MDk3RUVGQUQyQ0IyRDlGQ0QxNjY3RkM5NEEyMUQ3QkYyNzg0NEMxNTdEOEVCNTQ2NzY5RQorMUNDRDk1NjU4NjlEMjU3REUzRDhGNTI4MDg2MkY4OEQ1RDE2ODdCMUQxQkZDMzVDREI3ODRDMTc1ODExNDFCQTRENDI3QzE2QUNFMkU5NDgzRjBCOEQzNzVFNzMxOERENzc4MjlDMDdGQjEyM0IyNzg0Q0U5MkQ5M0VBOUIxLCA2QUY0OUY1MTYwQzcyRjcxOUM3NDNDNTE2MTIzRjQ1REVEMTc3RkM5NzlBNTI1N0VCNDU5RDI5M0NDNDlDNkQ2Qzg1RkEwMTlBMUIyNUE3NUQ1QzVDOEVGNUFCMkQ3RjQ3MTcyMkJBRjQxRDg4MDQzNUNEMzMzRjFEMzVBMTFBMUY5LCAxN0EwOTJGNTRFMjI0RjNGNUUzNzBENjE4OEI5NzM1RDc3QkE1OUExNkJGMThCREJBMjdDODYyMkNEQjBDNEFBQURERTY3Njk3NUYzNkE3MTVCMUY1Qzk5OEU0NjM5NzNDNTZFNTA3N0Q4MTM1MTYwNURFRENDODZFMTU3OUU0RjQ1QworNTY2OEMwMzA5M0Q3NzA3OUFCOEFERjc4MTkyOEU5QTgxNzQzOTcxNTc1M0Y0QTE2OTI2OEU0NDYwODMzQzUyRUU3Qzc3NDQ0MDZBOEJCRDhCRDIyQTdBNjFCNTk0QTk4NjY4N0Q0MTdGMTM2QjE3NjhFNkJCODhCQkJGRDEzLCAxNTA5RkU4MzU0RTFDMEQ0OTcwNEY3QzlFMzg0QjQ0RUUxMjJGMjA2QTczRkQxNUQ1RkU1QzA4OTNBMzVCQUNGQzY1N0EyRjQ1OUI2OTE5QzZBNTlGOEIxNjQ4NUREODY5MDFENUZDMDMzNEM3RjhGNTZGRTJGREQ5Q0Q3MTBCQUZDMywgMUEwRkEzRTMyMTgwMjI2MDQ4RjM4RkZFNjA5QkMyNkZEMjM5N0EwOTJENkE5Q0YxRUY0Rjc2QzY4MkZDQTVFMEE5QkY1QjE3RTg3NzM3Q0MxODc3MjJBQjREQjg1RTM1RTY0MzVGQkQwQjEwMTM2RjY4REFCQTAwOUQwM0NENTUzRjEKKzEwMzNBNDA5MUJCODY1MTZEMDJBMDlFNjg0QjdBQkNGODQ1Q0FDNTQwNUZCRERFNDNCNzNBQUNEMjE4OUI0RjhDQjc1NjVDQ0MxM0ZBMzM4QTM3NjdGNkYyNTIwQkRGQzkzMzk3N0M0N0QzQTQxNDYzQUI0MzI5QTMzM0Y3MzksIDQ2REJFRkRBNDY3ODAyOTEzN0Y4RDJCNTM3RjhCMzQxOEZDRUIzNUFENERFOUVGRDcwMTZFQTEwQUI4Q0M4M0Y1REU1MjVBNEFGNDRCODVEODcxODgwNDkwMzQwQzI0Nzk5Q0ZFQzdBRUI3RENCOEEyN0YzMjhCNzgwMzNEQTNFM0EsIDE3MDg4RTBEQTcwQTRFOTVDNUEwNUMzQzlFN0ZBMUU2NDgwMzQ5N0M4QUREODVDQzZCRTAwRjFGNDczMEVDQzNEODMzMjAyNTFCRUE2RjkwM0MyNkQ1MThDNjRENzBGMDM5MUU0MEY1MjM5NEQyMEQ0NjRDNENCMUFEREZEMTc3NjVCCiszMDlBRUMxQjUzMjkyRjQ0NzA3RTFEQjM4RTI3MDM2RThEMTYwNEZDMTFGMzk5QUNCMjVCMDA2NzY0OUQxRUVBNjI2MDMxNjY0M0JFRTlBOUVBNjM3RTRENkY2MjM5RjVCOUFDNjc0RDc3QUVDM0QyQjAxQzk3Q0U5OUJFNUFCLCBCRDFEMTE3MkZFQTNFNDU3QkQ4QUQ1NDQ0RTIzQzMxODVEMzNCNjNGOTAzODFDN0Y0RUQzNURENUFCQUQ0MjI1RUI5NkM5NEIyQUNBNkQ2NDQ1Q0Q4MDU0OTJGQUVEMTU1MzgzQ0IyQURDQUY4RDIxMDlFRDU3RkZEMTJEQkM2MEQ3LCAxMjgxODdEQkQ4NzJEMkZFOTYxMTJBRDQ2NzA2NjFERTJCMUUxRkYzMTVFQzQ1NDM3REQxRDE3RjIyODU1QzY0MTgxNjk4RUZFQTg3MDYyRUEwQjIxRTk5MjA4MTFBMDk2MTZERDcyQTk1ODhENEMyQjNDMDVGMkQ3NTE1NTRBOTg2RgorOTFEMEM0NTFGOTdCOERDRDUxN0E1OTFBQUE3NTBBNEJBNzQyMEVGNDM1REFDRDA2MTcxMTAxMzYyREQ3NUNCRjI3MjA5NDMyQ0IzQ0JDRkRCRjJBN0FFODRFMjZBREUxMkQwNTM1RTg2NzBDNEI3ODEwNTVDNzZCQ0QzQjEwMSwgQUI2NTdBODREMDNDQkU5MEUzMjFCMEMxMzJDNTkzQTg3RTMyMjlBQjZGODUyNkJFMjEyNzE4QjQ5MzhGQjQzMUExMEQ2MTIxNDZGMkZFQTA5N0EyNThDQkMzQzY0OTBEOTAxMEQ0QkMzQzhENDQ5NTEyQTg2NDRFMzJCNEIyODAyRiwgQkU2MTBBMEVEQTIxQTgyODRGRTdBRjAxQUUxNjNFOTNDN0FBNzFFQ0NEREI1MEIxNUQyREU5QTEzRkFBQjQzNjJDMkEyOUREQjNCQjU5QUNDOERGOTAwMjc5NkIxOTNGQjlDNjg2QzQyOUY1Qzg5NjFFQ0NFOTQ2RjkwNTE4NDlGQQorMUI1NzI0Q0Y1RUM3MkE5NjdGNDZGMEI0RkZGNUYxRUUyRjVDNjJDRENBMTkwNjcxMjQ1MzMwM0EyODk4NjE2M0Q3NTYxQkM5ODYxQjYzNkY5M0Q3RjcwQjhFQTc0MDlBMzg3MEZBMUI5MzUyNEUyNjgzMTAxNTY0MzY3QjEzMDMsIDE2RkRCQ0Q4NzkwN0Y3NjQwMjUwRTU2MkQ1RDdFQTVGRjBDMUVFRTQ5QTBENjNGQTdBNTZENkI4NDg3OTNCRjFCQ0Q5NzU1MDExRkZFQTgxMTMyQTkzNjQ0MDdGMjk5MTcwQTA5NUZFODlCOUE2QTNERjlENzlBRUU3N0ZEMzQxRDYyLCAxMjU0ODQ0MUEwQjYyOTAwOTQ1NkVBRDA5REQwNUYwREUxRkUxNzhENzFEQjdBQjE0MEQzMkI1RDAyMDgyNjhDMTI1QkQ2QzYwMzA0RjQ1MEI0Q0I2ODRDQkU2Nzc5OEM5MUQ0Q0Y3MEUxN0QyREJGRTZFMUM0QzNFNzBCQUUwMzc5NgorNTIwNTZFNkUxQzU1N0ZDMzdERDREMjFFRkZFMUQ1Q0E4RTE1Mjg2OTVFNEIxMzUzNkNGOTkwQUU3OUM5MjQyQjg2MDI1MzVDOTI1MjJBNEVCQjg3RTUyMkFCRjVDMUNFQTk1MkVFNTJCOUY2RUE3Mzg5MzA0MDJDQTM3MTM5MDksIDEwNDcwQTg4REZFRDQ1RDBGMTk1OTVFNjcxRDUzNTgxRjUxRTRBMkQzQTBEQTY1MzNGODk2MzJBQUIyMkZDQjRCRkJCMDI1NTU0Rjc2MkEzMkFFQUVFNkExMTAxMTAwRjlDMDA2QTAzN0JDNkRCRUNENzlBQTc2MUYwRTg0M0YzOTVDLCA2NTc0NThERUM0NENDQUFFNzA2Q0I1NTJCMzRCREM1N0UzNEY0NkU3QjI0QjNEQjhEM0IzNDZFOEQzRjA2NkRDQkM3QUY2RkZEQzUyMTE1RDc2QTU1NTFDOTk2RkU0NjAzN0E0NTI3OTU1M0E4NTMyRDRBNjI4ODIxMUY5NjZGQTY0CitGNjEwNEI0QTU1MDA3RjRBNzk3RTc2NUNGRkE1ODE1RkFBM0Y3OTNDMUFFMTM5RkE0NkVDQjIwQjZENUI2QzgyOTIwNkZBMTVCNkY2N0VFQzMyOTdBRjY4MDNFMTQ1NkJGQkY4Q0FGODJERTRCRjVBOUI5MEMwODVFQTUzQUIxQiwgQTlDN0I1MzBBOEM4MkVEM0REQUMwOTNDNjc5QkJBOUMxMEJBRTRDNkU3MEE0NkNFNjk5MDU2NzgyMjEyQzI1MUQ0NjU5RDAxNzRDODBFQjRBM0E5REE1QzEzMDlERThFQUI2NjBEMTgyQjE5N0NCNzA5ODRDMzk0QjI4MEYyRkU1MSwgMUE5QUZEMzU2RjkwNERFNTVCODlFNjY0MTQ2NjM2RDVBQTM4MzNDOUE4Q0RDM0RCMURFNkE0MEIxODNGMkI2NThBQjc5RjI5MDI0QUYzODJBQjZFMUUwRjVBNDUxQzlGNTQyODg4NjlGOUVCNzI4RTNBRTgwRTJGMDBCNzg2Q0U4ODMKKzJFMjMwRTFERUZGMDE3RERGNkM3QjYzMTZGRUYwODQxRUZFQkU2QkI0NTBBM0FERUVENEM2MTYyMjQ4MTI0NTg3QjYxNEVFNDEyNEUzN0NDNDk3QzcwRTM4MEJBM0QwNDNGM0VBNjBFODg5QUUzRTBGRDJCMjQxOTFCRUZCMDE1MSwgMTBCRkVDQjJGODY5MzNFRjJEM0QwRjRGQzFCOEJFNEMzQzJCNkFFQTFGQUZBNEJEQzAwQzVFMjY0NTc1NTFERkUzRkRFQ0I4MTE0NTk2RUFEMzQ0NUZCM0Y3QzJENjgwN0FBQTRDRjQ3NkMwRjlFMjExNkVFMjEyODQ4RTIyRjdFNjQsIEFBMDNBRjIzOEMyMjg1MzdFMTUyOEFEQjU2MjQzNzk5NjQ1RUNDQ0E5QUI2MkQ3OEQ0MzU0REE2QjA2RUFCNTlCN0IxQTYxQkUxMDNDRjUyQUVGNkZEMDJFMzk5OTRCMEVERjVCNTVFNUU2ODM1RTIwNzI5QkE2Q0MzQkRGRDdCODEKKzhBNjkyQTU5Q0ZEMDQ3OTlFNDU3MjI5NDRGQ0QxOEM1Q0ZDM0I0MzFDRjFFQjA5Q0M3RTUyNDI2NkQ4MzZEMDk3MjIzRUNBQzM2RUFBNzY0REM3NTUyQUE4MjJFQjcwQ0JEQkJGMjJCOTlEMEFCQTJGNzgxNkM0QjUzQ0YxMDNGMywgODlDOUM4MUI3ODYzMDU2QTA0RDM1QThEQTU2NkZFRDFBNTgzQjExQTMyQzEzOUFGNUVENTJCNkIzQzg0NzYzQ0Q5RDE2QTAzRkU5RjhGNzZENjZEOTA0M0ExMkNCQTk5RTIxNjAxNjM0NjI1NTNBMjU5RTdEQkI5RTM5QjM2QkZDQSwgMUFDQTY0NjUxNkZCQ0RDNzQxOTcwMkE1Mzc1N0JBMkVFOEVFQUMwRDIyOEY0OTk4NzBCRURGNjg2NjFGOEQ1NkZGOUI0NEY4MjlCNkYwREMzMkQ0QzcyMDlGODFBOEE4MThDODNCOERBRTIzMzczQzVGQjQ4MjMzNTAwN0I1Mjg3RkQKKzE5RjNCN0YwRDZGNzBENkNEQUQwNTY3QkNFRjY3NEE1MTZGNEIxQzk1NkQ1QzExRDY1N0FGNkM3MzQ4OEE0NzFDNTY2QkM2MDRBNEJGRjYyRTk1NUZGN0ZGODY4QzI1MjYzOTMzRDY4MkNENzIwMkU4RTY4NDQ0RTFGQjZEMzBCRDksIEM4MzhFMDk1RDI1OUFEQzEwODExODMyMTQ5MzBFMzY4QkMzQzY4QzIyNjk4M0IwODA4MzE0QTdCNUM1NDQwMEY3RUU0N0MwOTMyMzBDMzY3QUQ0NkQwNjYxNkFCODY0QTI5M0MzNTA5NzMyRjk5QzRFNEEzQkY3NjI3N0I1OENEMjAsIEI1QTRBQ0QzMkZCMzE0QjFBMEZFREI2ODdDRTk3RkUxNkNBMDBBNzAwNEQ3MzAzNkU4MEM2MjQ2NDIwRDlFQTUyMTFEQjBBQ0FEMDc4MTNDOEU3NEIwMzcwMDczOTA2RUM3QUIzQjA5NjJEQjMxQTYyNEFDODZBMDM5MTRFNTJEMDUKKzREREIyN0QyODRFNTI4NDY5MDcxMDM3MzZDRTM1REVGNDRERTE1NUMwNDgxNDM1ODMwNzBFNDU1OUQ5OUVENTU1MDM0MzUyMERFRTNGRTI4QkMwMUZFN0ZFOTNBNDZGNzJBQjlCODM4ODY4NTYwOEJBQjM4Q0NFQTVGMjQ3OTIzOEIsIDEyQjdCQThDRENENzY2MzA5ODgyOTFFRjlCOUY0MTQ3MTFCRUNCOTIzMjA3QkQxNjQxRjYzNjUwRDJFQjc5RjAzRDQyNDM4QjI3NUEyMjYxQzY5RjdERDZGQTQzOTc5NDAyMkZGQzk5N0M4MEYxMkIxMjU1RENBRTgyQTUwQUVCMzMxLCA4QjM3NTgzQ0YxNTFCQjk2OEQ0MzhFMTdFMjE0ODBBNzAxMjYxQzE0OTYzRkFFNEVGMzdGOUJGQTEyMTc0RDFGQjQ3N0RBRUFEQUY0NDdEQTgxODhFMkQ4OUMwNTIxNzQwNzNFRDAyQ0QwMTRDRjE2QTg3RDJDQzc3RkIwRjQyRjVFCitFOTkxNzc3NzhFQUY3OEQzQjE1MzBBNUE0NkFBMTlDRENFOUE0MDE0MEQ4M0NBMDg5MTUyQUQwMEQ4Q0RDN0ZGRjA5QzlGNjI5Q0FCRkE3QTM0MDVGQjdGQkJBRUQ0RTU4MDJEMjhBOTkzOTAyMUEzMDFBQTY2QkYxRDZENkI2QUExLCAxQUE0RDk5ODU0QzU1NEI0QkMxMTA2QzY3QjRGNEM3NDcxQzM1MDA2ODk0OTA5NzQxMEVDQzkzNENFMUQ4QTkzNTIxRkVFNzJCMzI5ODBENTFCMEM0QkVCNENDQzRGMjY2NjFFRDE3QUY0OUQwOEE2QjY4NTBGMDFDOTgxMTk2MDYzNSwgMUUyRkRBN0VCRTRDODU4MUM1MzQyNTQwQTIyQzZBRTEyRDk5MUQ1RDRBQjY3Q0FDQzM4MDc4RjBEQTI4MDkwMkU5MEU2QTE0NjA5RTlFNDA0NzExQTA0OEE4RkVGOEE3NURBNDA5NTc0OTRFMTU3N0RBQUZFRDE5OUE2NkVFOTdDNUYKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L25vdGVzL2V0Yy9zYWZlcnBfb3B0aW1pemVyLmMgYi9saWJ0b21jcnlwdC9ub3Rlcy9ldGMvc2FmZXJwX29wdGltaXplci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZGU4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9ub3Rlcy9ldGMvc2FmZXJwX29wdGltaXplci5jCkBAIC0wLDAgKzEsMTc3IEBACisvKiBlbWl0cyBhbiBvcHRpbWl6ZWQgdmVyc2lvbiBvZiBTQUZFUisgLi4uIG9ubHkgZG9lcyBlbmNyeXB0IHNvIGZhci4uLiAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogVGhpcyBpcyB0aGUgIkFybWVuaWFuIiBTaHVmZmxlLiAgSXQgdGFrZXMgdGhlIGlucHV0IGZyb20gYiBhbmQgc3RvcmVzIGl0IGluIGIyICovCisjZGVmaW5lIFNIVUZcCisgICAgYjJbMF0gPSBiWzhdOyBiMlsxXSA9IGJbMTFdOyBiMlsyXSA9IGJbMTJdOyBiMlszXSA9IGJbMTVdOyAgIFwKKyAgICBiMls0XSA9IGJbMl07IGIyWzVdID0gYlsxXTsgYjJbNl0gPSBiWzZdOyBiMls3XSA9IGJbNV07ICAgICAgXAorICAgIGIyWzhdID0gYlsxMF07IGIyWzldID0gYls5XTsgYjJbMTBdID0gYlsxNF07IGIyWzExXSA9IGJbMTNdOyBcCisgICAgYjJbMTJdID0gYlswXTsgYjJbMTNdID0gYls3XTsgYjJbMTRdID0gYls0XTsgYjJbMTVdID0gYlszXTsgbWVtY3B5KGIsIGIyLCBzaXplb2YoYikpOworCisvKiBUaGlzIGlzIHRoZSBpbnZlcnNlIHNodWZmbGUuICBJdCB0YWtlcyBmcm9tIGIgYW5kIGdpdmVzIHRvIGIyICovCisjZGVmaW5lIGlTSFVGKGIsIGIyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGIyWzBdID0gYlsxMl07IGIyWzFdID0gYls1XTsgYjJbMl0gPSBiWzRdOyBiMlszXSA9IGJbMTVdOyAgICAgIFwKKyAgICBiMls0XSA9IGJbMTRdOyBiMls1XSA9IGJbN107IGIyWzZdID0gYls2XTsgYjJbN10gPSBiWzEzXTsgICAgICBcCisgICAgYjJbOF0gPSBiWzBdOyBiMls5XSA9IGJbOV07IGIyWzEwXSA9IGJbOF07IGIyWzExXSA9IGJbMV07ICAgICAgXAorICAgIGIyWzEyXSA9IGJbMl07IGIyWzEzXSA9IGJbMTFdOyBiMlsxNF0gPSBiWzEwXTsgYjJbMTVdID0gYlszXTsgbWVtY3B5KGIsIGIyLCBzaXplb2YoYikpOworICAgIAorI2RlZmluZSBST1VORChiLCBpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBiWzBdICA9IChzYWZlcl9lYm94WyhiWzBdIF4gc2tleS0+c2FmZXJwLktbaV1bMF0pICYgMjU1XSArIHNrZXktPnNhZmVycC5LW2krMV1bMF0pICYgMjU1OyAgICBcCisgICAgYlsxXSAgPSBzYWZlcl9sYm94WyhiWzFdICsgc2tleS0+c2FmZXJwLktbaV1bMV0pICYgMjU1XSBeIHNrZXktPnNhZmVycC5LW2krMV1bMV07ICAgICAgICAgICAgXAorICAgIGJbMl0gID0gc2FmZXJfbGJveFsoYlsyXSArIHNrZXktPnNhZmVycC5LW2ldWzJdKSAmIDI1NV0gXiBza2V5LT5zYWZlcnAuS1tpKzFdWzJdOyAgICAgICAgICAgIFwKKyAgICBiWzNdICA9IChzYWZlcl9lYm94WyhiWzNdIF4gc2tleS0+c2FmZXJwLktbaV1bM10pICYgMjU1XSArIHNrZXktPnNhZmVycC5LW2krMV1bM10pICYgMjU1OyAgICBcCisgICAgYls0XSAgPSAoc2FmZXJfZWJveFsoYls0XSBeIHNrZXktPnNhZmVycC5LW2ldWzRdKSAmIDI1NV0gKyBza2V5LT5zYWZlcnAuS1tpKzFdWzRdKSAmIDI1NTsgICAgXAorICAgIGJbNV0gID0gc2FmZXJfbGJveFsoYls1XSArIHNrZXktPnNhZmVycC5LW2ldWzVdKSAmIDI1NV0gXiBza2V5LT5zYWZlcnAuS1tpKzFdWzVdOyAgICAgICAgICAgIFwKKyAgICBiWzZdICA9IHNhZmVyX2xib3hbKGJbNl0gKyBza2V5LT5zYWZlcnAuS1tpXVs2XSkgJiAyNTVdIF4gc2tleS0+c2FmZXJwLktbaSsxXVs2XTsgICAgICAgICAgICBcCisgICAgYls3XSAgPSAoc2FmZXJfZWJveFsoYls3XSBeIHNrZXktPnNhZmVycC5LW2ldWzddKSAmIDI1NV0gKyBza2V5LT5zYWZlcnAuS1tpKzFdWzddKSAmIDI1NTsgICAgXAorICAgIGJbOF0gID0gKHNhZmVyX2Vib3hbKGJbOF0gXiBza2V5LT5zYWZlcnAuS1tpXVs4XSkgJiAyNTVdICsgc2tleS0+c2FmZXJwLktbaSsxXVs4XSkgJiAyNTU7ICAgIFwKKyAgICBiWzldICA9IHNhZmVyX2xib3hbKGJbOV0gKyBza2V5LT5zYWZlcnAuS1tpXVs5XSkgJiAyNTVdIF4gc2tleS0+c2FmZXJwLktbaSsxXVs5XTsgICAgICAgICAgICBcCisgICAgYlsxMF0gPSBzYWZlcl9sYm94WyhiWzEwXSArIHNrZXktPnNhZmVycC5LW2ldWzEwXSkgJiAyNTVdIF4gc2tleS0+c2FmZXJwLktbaSsxXVsxMF07ICAgICAgICAgXAorICAgIGJbMTFdID0gKHNhZmVyX2Vib3hbKGJbMTFdIF4gc2tleS0+c2FmZXJwLktbaV1bMTFdKSAmIDI1NV0gKyBza2V5LT5zYWZlcnAuS1tpKzFdWzExXSkgJiAyNTU7IFwKKyAgICBiWzEyXSA9IChzYWZlcl9lYm94WyhiWzEyXSBeIHNrZXktPnNhZmVycC5LW2ldWzEyXSkgJiAyNTVdICsgc2tleS0+c2FmZXJwLktbaSsxXVsxMl0pICYgMjU1OyBcCisgICAgYlsxM10gPSBzYWZlcl9sYm94WyhiWzEzXSArIHNrZXktPnNhZmVycC5LW2ldWzEzXSkgJiAyNTVdIF4gc2tleS0+c2FmZXJwLktbaSsxXVsxM107ICAgICAgICAgXAorICAgIGJbMTRdID0gc2FmZXJfbGJveFsoYlsxNF0gKyBza2V5LT5zYWZlcnAuS1tpXVsxNF0pICYgMjU1XSBeIHNrZXktPnNhZmVycC5LW2krMV1bMTRdOyAgICAgICAgIFwKKyAgICBiWzE1XSA9IChzYWZlcl9lYm94WyhiWzE1XSBeIHNrZXktPnNhZmVycC5LW2ldWzE1XSkgJiAyNTVdICsgc2tleS0+c2FmZXJwLktbaSsxXVsxNV0pICYgMjU1OyAgICAgICAgCisKK2ludCBtYWluKHZvaWQpCit7CisgICBpbnQgYlsxNl0sIGIyWzE2XSwgeCwgeSwgejsKKyAgIAorLyogLS0gRU5DUllQVCAtLS0gICovCisgICBmb3IgKHggPSAwOyB4IDwgMTY7IHgrKykgYlt4XSA9IHg7CisgICAvKiBlbWl0IGVuY3J5cHQgcHJlYWJtbGUgICovCitwcmludGYoCisidm9pZCBzYWZlcnBfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KVxuIgorIntcbiIKKyIgICBpbnQgeDtcbiIKKyIgICB1bnNpZ25lZCBjaGFyIGJbMTZdO1xuIgorIlxuIgorIiAgIExUQ19BUkdDSEsocHQgICAhPSBOVUxMKTtcbiIKKyIgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7XG4iCisiICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpO1xuIgorIlxuIgorIiAgIC8qIGRvIGVpZ2h0IHJvdW5kcyAqL1xuIgorIiAgIGZvciAoeCA9IDA7IHggPCAxNjsgeCsrKSB7XG4iCisiICAgICAgIGJbeF0gPSBwdFt4XTtcbiIKKyIgICB9XG4iKTsgICAKKworICAgLyogZG8gOCByb3VuZHMgb2YgUk9VTkQ7IExUOyAqLworICAgZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgeworICAgICAgIC8qIFJPVU5EKC4uLiwgeCoyKSAqLworICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7CitwcmludGYoImJbJWRdID0gKHNhZmVyXyVjYm94WyhiWyVkXSAlYyBza2V5LT5zYWZlcnAuS1slZF1bJWRdKSAmIDI1NV0gJWMgc2tleS0+c2FmZXJwLktbJWRdWyVkXSkgJiAyNTU7XG4iLAorICAgICAgICAgIGJbeV0sICJlbGxlIlt5JjNdLCBiW3ldLCAiXisrXiJbeSYzXSwgICAgICB4KjIsIHksICIrXl4rIlt5JjNdLCB4KjIrMSwgeSk7CisgICAgICAgfQorICAgICAgIAorICAgICAgIC8qIExUICovCisgICAgICAgZm9yICh5ID0gMDsgeSA8IDQ7IHkrKykgeworcHJpbnRmKCIgICBiWyVkXSAgPSAoYlslZF0gKyAoYlslZF0gPSAoYlslZF0gKyBiWyVkXSkgJiAyNTUpKSAmIDI1NTtcbiIsIGJbMF0sIGJbMF0sIGJbMV0sIGJbMF0sIGJbMV0pOworcHJpbnRmKCIgICBiWyVkXSAgPSAoYlslZF0gKyAoYlslZF0gPSAoYlslZF0gKyBiWyVkXSkgJiAyNTUpKSAmIDI1NTtcbiIsIGJbMl0sIGJbMl0sIGJbM10sIGJbM10sIGJbMl0pOworcHJpbnRmKCIgICBiWyVkXSAgPSAoYlslZF0gKyAoYlslZF0gPSAoYlslZF0gKyBiWyVkXSkgJiAyNTUpKSAmIDI1NTtcbiIsIGJbNF0sIGJbNF0sIGJbNV0sIGJbNV0sIGJbNF0pOworcHJpbnRmKCIgICBiWyVkXSAgPSAoYlslZF0gKyAoYlslZF0gPSAoYlslZF0gKyBiWyVkXSkgJiAyNTUpKSAmIDI1NTtcbiIsIGJbNl0sIGJbNl0sIGJbN10sIGJbN10sIGJbNl0pOworcHJpbnRmKCIgICBiWyVkXSAgPSAoYlslZF0gKyAoYlslZF0gPSAoYlslZF0gKyBiWyVkXSkgJiAyNTUpKSAmIDI1NTtcbiIsIGJbOF0sIGJbOF0sIGJbOV0sIGJbOV0sIGJbOF0pOworcHJpbnRmKCIgICBiWyVkXSAgPSAoYlslZF0gKyAoYlslZF0gPSAoYlslZF0gKyBiWyVkXSkgJiAyNTUpKSAmIDI1NTtcbiIsIGJbMTBdLCBiWzEwXSwgYlsxMV0sIGJbMTFdLCBiWzEwXSk7CitwcmludGYoIiAgIGJbJWRdICA9IChiWyVkXSArIChiWyVkXSA9IChiWyVkXSArIGJbJWRdKSAmIDI1NSkpICYgMjU1O1xuIiwgYlsxMl0sIGJbMTJdLCBiWzEzXSwgYlsxM10sIGJbMTJdKTsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzE0XSwgYlsxNF0sIGJbMTVdLCBiWzE1XSwgYlsxNF0pOworICAgICAgaWYgKHkgPCAzKSB7CisgICAgICAgICBTSFVGOworICAgICAgfSAgICAgICAgIAorICAgICAgfSAgIAorICB9CisgIAorcHJpbnRmKAorIiAgIGlmIChza2V5LT5zYWZlcnAucm91bmRzIDw9IDgpIHtcbiIpOworLyogZmluaXNoICovCisgICBmb3IgKHggPSAwOyB4IDwgMTY7IHgrKykgeworICAgcHJpbnRmKAorIiAgICAgIGN0WyVkXSA9IChiWyVkXSAlYyBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWyVkXSkgJiAyNTU7XG4iLAorICAgICAgIHgsIGJbeF0sICJeKyteIlt4JjNdLCB4KTsKKyAgIH0gICAKKyAgIHByaW50ZigiICAgICAgcmV0dXJuO1xuICAgfVxuIik7CisgIAorICAvKiAxOTItYml0IGtleXMgKi8KK3ByaW50ZiggIAorIiAgIC8qIDE5Mi1iaXQga2V5PyAqL1xuIgorIiAgIGlmIChza2V5LT5zYWZlcnAucm91bmRzID4gOCkge1xuIik7CisgIAorICAgLyogZG8gNCByb3VuZHMgb2YgUk9VTkQ7IExUOyAqLworICAgZm9yICh4ID0gODsgeCA8IDEyOyB4KyspIHsKKyAgICAgICAvKiBST1VORCguLi4sIHgqMikgKi8KKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgeworcHJpbnRmKCJiWyVkXSA9IChzYWZlcl8lY2JveFsoYlslZF0gJWMgc2tleS0+c2FmZXJwLktbJWRdWyVkXSkgJiAyNTVdICVjIHNrZXktPnNhZmVycC5LWyVkXVslZF0pICYgMjU1O1xuIiwKKyAgICAgICAgICBiW3ldLCAiZWxsZSJbeSYzXSwgYlt5XSwgIl4rK14iW3kmM10sICAgICAgeCoyLCB5LCAiK15eKyJbeSYzXSwgeCoyKzEsIHkpOworICAgICAgIH0KKyAgICAgICAKKyAgICAgICAvKiBMVCAqLworICAgICAgIGZvciAoeSA9IDA7IHkgPCA0OyB5KyspIHsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzBdLCBiWzBdLCBiWzFdLCBiWzBdLCBiWzFdKTsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzJdLCBiWzJdLCBiWzNdLCBiWzNdLCBiWzJdKTsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzRdLCBiWzRdLCBiWzVdLCBiWzVdLCBiWzRdKTsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzZdLCBiWzZdLCBiWzddLCBiWzddLCBiWzZdKTsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzhdLCBiWzhdLCBiWzldLCBiWzldLCBiWzhdKTsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzEwXSwgYlsxMF0sIGJbMTFdLCBiWzExXSwgYlsxMF0pOworcHJpbnRmKCIgICBiWyVkXSAgPSAoYlslZF0gKyAoYlslZF0gPSAoYlslZF0gKyBiWyVkXSkgJiAyNTUpKSAmIDI1NTtcbiIsIGJbMTJdLCBiWzEyXSwgYlsxM10sIGJbMTNdLCBiWzEyXSk7CitwcmludGYoIiAgIGJbJWRdICA9IChiWyVkXSArIChiWyVkXSA9IChiWyVkXSArIGJbJWRdKSAmIDI1NSkpICYgMjU1O1xuIiwgYlsxNF0sIGJbMTRdLCBiWzE1XSwgYlsxNV0sIGJbMTRdKTsKKyAgICAgIGlmICh5IDwgMykgeworICAgICAgICAgU0hVRjsKKyAgICAgIH0gICAgICAgICAKKyAgICAgIH0gICAKKyAgfQorcHJpbnRmKCJ9XG4iKTsKKyAgCitwcmludGYoCisiICAgaWYgKHNrZXktPnNhZmVycC5yb3VuZHMgPD0gMTIpIHtcbiIpOworLyogZmluaXNoICovCisgICBmb3IgKHggPSAwOyB4IDwgMTY7IHgrKykgeworICAgcHJpbnRmKAorIiAgICAgIGN0WyVkXSA9IChiWyVkXSAlYyBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWyVkXSkgJiAyNTU7XG4iLAorICAgICAgIHgsIGJbeF0sICJeKyteIlt4JjNdLCB4KTsKKyAgIH0gICAKKyAgIHByaW50ZigiICAgICAgcmV0dXJuO1xuICAgfVxuIik7CisKKyAgLyogMjU2LWJpdCBrZXlzICovCitwcmludGYoICAKKyIgICAvKiAyNTYtYml0IGtleT8gKi9cbiIKKyIgICBpZiAoc2tleS0+c2FmZXJwLnJvdW5kcyA+IDEyKSB7XG4iKTsKKyAgCisgICAvKiBkbyA0IHJvdW5kcyBvZiBST1VORDsgTFQ7ICovCisgICBmb3IgKHggPSAxMjsgeCA8IDE2OyB4KyspIHsKKyAgICAgICAvKiBST1VORCguLi4sIHgqMikgKi8KKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgeworcHJpbnRmKCJiWyVkXSA9IChzYWZlcl8lY2JveFsoYlslZF0gJWMgc2tleS0+c2FmZXJwLktbJWRdWyVkXSkgJiAyNTVdICVjIHNrZXktPnNhZmVycC5LWyVkXVslZF0pICYgMjU1O1xuIiwKKyAgICAgICAgICBiW3ldLCAiZWxsZSJbeSYzXSwgYlt5XSwgIl4rK14iW3kmM10sICAgICAgeCoyLCB5LCAiK15eKyJbeSYzXSwgeCoyKzEsIHkpOworICAgICAgIH0KKyAgICAgICAKKyAgICAgICAvKiBMVCAqLworICAgICAgIGZvciAoeSA9IDA7IHkgPCA0OyB5KyspIHsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzBdLCBiWzBdLCBiWzFdLCBiWzBdLCBiWzFdKTsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzJdLCBiWzJdLCBiWzNdLCBiWzNdLCBiWzJdKTsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzRdLCBiWzRdLCBiWzVdLCBiWzVdLCBiWzRdKTsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzZdLCBiWzZdLCBiWzddLCBiWzddLCBiWzZdKTsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzhdLCBiWzhdLCBiWzldLCBiWzldLCBiWzhdKTsKK3ByaW50ZigiICAgYlslZF0gID0gKGJbJWRdICsgKGJbJWRdID0gKGJbJWRdICsgYlslZF0pICYgMjU1KSkgJiAyNTU7XG4iLCBiWzEwXSwgYlsxMF0sIGJbMTFdLCBiWzExXSwgYlsxMF0pOworcHJpbnRmKCIgICBiWyVkXSAgPSAoYlslZF0gKyAoYlslZF0gPSAoYlslZF0gKyBiWyVkXSkgJiAyNTUpKSAmIDI1NTtcbiIsIGJbMTJdLCBiWzEyXSwgYlsxM10sIGJbMTNdLCBiWzEyXSk7CitwcmludGYoIiAgIGJbJWRdICA9IChiWyVkXSArIChiWyVkXSA9IChiWyVkXSArIGJbJWRdKSAmIDI1NSkpICYgMjU1O1xuIiwgYlsxNF0sIGJbMTRdLCBiWzE1XSwgYlsxNV0sIGJbMTRdKTsKKyAgICAgIGlmICh5IDwgMykgeworICAgICAgICAgU0hVRjsKKyAgICAgIH0gICAgICAgICAKKyAgICAgIH0gICAKKyAgfQorLyogZmluaXNoICovCisgICBmb3IgKHggPSAwOyB4IDwgMTY7IHgrKykgeworICAgcHJpbnRmKAorIiAgICAgIGN0WyVkXSA9IChiWyVkXSAlYyBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWyVkXSkgJiAyNTU7XG4iLAorICAgICAgIHgsIGJbeF0sICJeKyteIlt4JjNdLCB4KTsKKyAgIH0gICAKKyAgIHByaW50ZigiICAgcmV0dXJuO1xuIik7CitwcmludGYoIiAgIH1cbn1cblxuIik7CisKKyAgIHJldHVybiAwOworfQorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L25vdGVzL2V0Yy9zYWZlcnBfb3B0aW1pemVyLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9ub3Rlcy9ldGMvd2hpcmxnZW4uYyBiL2xpYnRvbWNyeXB0L25vdGVzL2V0Yy93aGlybGdlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNjY4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9ub3Rlcy9ldGMvd2hpcmxnZW4uYwpAQCAtMCwwICsxLDk1IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKwordW5zaWduZWQgRVsxNl0gPSAgeyAxLCAweGIsIDksIDB4YywgMHhkLCA2LCAweGYsIDMsIDB4ZSwgOCwgNywgNCwgMHhhLCAyLCA1LCAwIH07Cit1bnNpZ25lZCBFaVsxNl07Cit1bnNpZ25lZCBSWzE2XSA9ICB7IDcsIDB4YywgMHhiLCAweGQsIDB4ZSwgNCwgOSwgMHhmLCA2LCAzLCA4LCAweGEsIDIsIDUsIDEsIDAgfTsKK3Vuc2lnbmVkIGNpcls4XVs4XSA9IHsgCisgezEsIDEsIDQsIDEsIDgsIDUsIDIsIDkgfSwKK307IAorCisKK3Vuc2lnbmVkIGdmX211bCh1bnNpZ25lZCBhLCB1bnNpZ25lZCBiKQoreworICAgdW5zaWduZWQgcjsKKyAgIAorICAgciA9IDA7CisgICB3aGlsZSAoYSkgeworICAgICAgaWYgKGEgJiAxKSByIF49IGI7CisgICAgICBhID4+PSAxOworICAgICAgYiA9IChiIDw8IDEpIF4gKGIgJiAweDgwID8gMHgxMWQgOiAweDAwKTsKKyAgIH0KKyAgIHJldHVybiByOworfQorCit1bnNpZ25lZCBzYm94KHVuc2lnbmVkIHgpCit7CisgICB1bnNpZ25lZCBhLCBiLCB3OworICAgCisgICBhID0geCA+PiA0OworICAgYiA9IHggJiAxNTsKKyAgIAorICAgYSA9IEVbYV07IGIgPSBFaVtiXTsKKyAgIHcgPSBhIF4gYjsgdyA9IFJbd107CisgICBhID0gRVthIF4gd107IGIgPSBFaVtiIF4gd107CisgICAKKyAgIAorICAgcmV0dXJuIChhIDw8IDQpIHwgYjsKK30KKworaW50IG1haW4odm9pZCkKK3sKKyAgIHVuc2lnbmVkIHgsIHk7CisgICAKKyAgIGZvciAoeCA9IDA7IHggPCAxNjsgeCsrKSBFaVtFW3hdXSA9IHg7CisgICAKKy8vICAgZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHByaW50ZigiJTJ4ICIsIHNib3goeCkpOworICAgZm9yICh5ID0gMTsgeSA8IDg7IHkrKykgeworICAgICAgZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgeworICAgICAgICAgIGNpclt5XVt4XSA9IGNpclt5LTFdWyh4LTEpJjddOworICAgICAgfQorICAgfQorCisvKiAgIAorICAgcHJpbnRmKCJcbiIpOworICAgZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgeworICAgICAgIGZvciAoeCA9IDA7IHggPCA4OyB4KyspIHByaW50ZigiJTJkICIsIGNpclt5XVt4XSk7CisgICAgICAgcHJpbnRmKCJcbiIpOworICAgfQorKi8KKworICAgZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgeworICAgICAgIHByaW50Zigic3RhdGljIGNvbnN0IHVsb25nNjQgc2JveCVkW10gPSB7XG4iLCB5KTsKKyAgICAgICBmb3IgKHggPSAwOyB4IDwgMjU2OyApIHsKKyAgICAgICAgICAgcHJpbnRmKCJDT05TVDY0KDB4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngpIiwKKyAgICAgICAgICAgICAgZ2ZfbXVsKHNib3goeCksIGNpclt5XVswXSksCisgICAgICAgICAgICAgIGdmX211bChzYm94KHgpLCBjaXJbeV1bMV0pLAorICAgICAgICAgICAgICBnZl9tdWwoc2JveCh4KSwgY2lyW3ldWzJdKSwKKyAgICAgICAgICAgICAgZ2ZfbXVsKHNib3goeCksIGNpclt5XVszXSksCisgICAgICAgICAgICAgIGdmX211bChzYm94KHgpLCBjaXJbeV1bNF0pLAorICAgICAgICAgICAgICBnZl9tdWwoc2JveCh4KSwgY2lyW3ldWzVdKSwKKyAgICAgICAgICAgICAgZ2ZfbXVsKHNib3goeCksIGNpclt5XVs2XSksCisgICAgICAgICAgICAgIGdmX211bChzYm94KHgpLCBjaXJbeV1bN10pKTsKKyAgICAgICAgICAgaWYgKHggPCAyNTUpIHByaW50ZigiLCAiKTsKKyAgICAgICAgICAgaWYgKCEoKyt4ICYgMykpIHByaW50ZigiXG4iKTsKKyAgICAgICB9CisgICAgICAgcHJpbnRmKCJ9O1xuXG4iKTsKKyAgfQorICAKKyAgcHJpbnRmKCJzdGF0aWMgY29uc3QgdWxvbmc2NCBjb250W10gPSB7XG4iKTsKKyAgZm9yICh5ID0gMDsgeSA8PSAxMDsgeSsrKSB7CisgICAgICBwcmludGYoIkNPTlNUNjQoMHgiKTsKKyAgICAgIGZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKKyAgICAgICAgIHByaW50ZigiJTAyeCIsIHNib3goKDgqeSArIHgpJjI1NSkpOworICAgICAgfQorICAgICAgcHJpbnRmKCIpLFxuIik7CisgIH0KKyAgcHJpbnRmKCJ9O1xuXG4iKTsKKyAgcmV0dXJuIDA7CisgICAKK30KKworCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L25vdGVzL2V0Yy93aGlybGdlbi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIgJCAqLworLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvbm90ZXMvZXRjL3doaXJsdGVzdC5jIGIvbGlidG9tY3J5cHQvbm90ZXMvZXRjL3doaXJsdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNmUwMTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9ub3Rlcy9ldGMvd2hpcmx0ZXN0LmMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK2ludCBtYWluKHZvaWQpCit7CisgICBjaGFyIGJ1Zls0MDk2XTsKKyAgIGludCB4OworICAgCisgICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKS0yLCBzdGRpbikgIT0gTlVMTCkgeworICAgICAgICBmb3IgKHggPSAwOyB4IDwgMTI4OyApIHsKKyAgICAgICAgICAgIHByaW50ZigiMHglYyVjLCAiLCBidWZbeF0sIGJ1Zlt4KzFdKTsKKyAgICAgICAgICAgIGlmICghKCh4ICs9IDIpICYgMzEpKSBwcmludGYoIlxuIik7CisgICAgICAgIH0KKyAgIH0KK30KKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9ub3Rlcy9ldGMvd2hpcmx0ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9ub3Rlcy9nY21fdHYudHh0IGIvbGlidG9tY3J5cHQvbm90ZXMvZ2NtX3R2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWQzYjhkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvbm90ZXMvZ2NtX3R2LnR4dApAQCAtMCwwICsxLDIxNCBAQAorR0NNIFRlc3QgVmVjdG9ycy4gIFVzZXMgdGhlIDAwMDEwMjAzLi4uTk4tMSBwYXR0ZXJuIGZvciBub25jZS9oZWFkZXIvcGxhaW50ZXh0L2tleS4gIFRoZSBvdXRwdXRzCithcmUgb2YgdGhlIGZvcm0gY2lwaGVydGV4dCx0YWcgZm9yIGEgZ2l2ZW4gTk4uICBUaGUga2V5IGZvciBzdGVwIE4+MSBpcyB0aGUgdGFnIG9mIHRoZSBwcmV2aW91cworc3RlcCByZXBlYXRlZCBzdWZmaWNpZW50bHkuICBUaGUgbm9uY2UgaXMgZml4ZWQgdGhyb3VnaG91dCBhdCAxMyBieXRlcyAwMDAxMDIuLi4KKworR0NNLWFlcyAoMTYgYnl0ZSBrZXkpCisgIDA6ICwgQzZBMTNCMzc4NzhGNUI4MjZGNEY4MTYyQTFDOEQ4NzkKKyAgMTogRjEsIDM5N0Y2NDlBMjBGM0Y4OUEwMEY0NUJGMjMwRjI2QjYxCisgIDI6IEQ2QjgsIDE2NTNGNjdDOUM3MTZEMEZDNTlGM0IxNDE1NERFQ0JGCisgIDM6IDY3MzQ1NiwgRTgyRUZDNzlCMzBDQTUyMzVFMkRDOEJFNEMxNDI2NUQKKyAgNDogMjZERDdDMjYsIEI4RDFGNERCODQ1RjdENzA3OURFQjg5MjA5NDlDMTRECisgIDU6IERBNjJBRDE0ODcsIDgyOEE0MjMyOTMyMDc2NEU1RkI3NEQ0NEE2MTA4RjRCCisgIDY6IEZCNzlGN0Q1MTc0MiwgODY1NDE1QkQwNDlFODZGM0RBMkUwQjZFMjVFMUE1MEMKKyAgNzogOUQ5NkQxMDM0MTY2QkYsIDUwNjY5MjQ3QTVCMzM4RTE4M0RFNTEzOTgzMUNENkE0CisgIDg6IEI0NjYwNTBFMTMzMEIyMEEsIENCMjY0RkE3ODUzQTFGRkU4NkUxQTA3Q0ZBN0M3MzE5CisgIDk6IENGMTZGMEIzRDlGQzYxODNERiwgNjQ3REQ2RTFGNDBGMzg1RTFERkU2Njc2RkIwMzYyNDIKKyAxMDogMTREOTA5MjhDNzIzNjA1MDA5NkYsIDkzMENBQUE1NTM2NDA2MjE4ODg1NDc1Q0E4MjNBOTczCisgMTE6IDRGMjMyMkQ2NkE3MDc5QkQ3REY1MTksIDNCMzkzMUQ0NzQxMzA0MkZBRjEzMTNGMTA0MTUwOUEzCisgMTI6IEYxNDk3OTA2RjFEOEY0RjlFNDdFNEJFOSwgNDY5RkIwRDYyODI4NDI3QzJFOUJBMDQwNDFBMTQyNEYKKyAxMzogMkZBRkEyQTNFRUE0QzAwMDcwMkU1OEQxRDQsIEM5QTQ4NEZDNEVEODY0NEEwNjA2MERBRTJDM0QxNTY4CisgMTQ6IDVENzA3RjhBQ0YzMTk0MTNEMjIwQUEyRkMyQjIsIDBFRTlBQUY1QjFDRjYyMkVDRjZDNEY1RTVGRjQ2NTZBCisgMTU6IDJDMTlEQkY5NjZEMjRCMjcxM0Y4MkI2OTkzNDA2MCwgODY3NjI0NkEyRjc3OTVBQkQ0MzVCM0M2QjRFQTZFN0EKKyAxNjogQjNGRUQ2QzIzMTVDRTZEOTg3MjlEQkU2OTI3MEExMUUsIEI4QUM3MzlBRDE1NDc0NEEzM0U5MDZDMzREOTFCRDRCCisgMTc6IEIyQkM0NENFMDg4QkMzRjY1NEI5NzAzRDlDNjkxRjE3QjMsIEJBRDgzMTRBMTcxQkMwMTE5OTQyMTM2QzU4NzZBQUNDCisgMTg6IEM2RTk1OEUzRTlBQzgzNkM5NjI2QkQ2NjQ3ODk3NEQyNkIwQywgNEU2RDYxODMzRTlEQjgzOTExN0I2NjVBOTZEQzY4NkMKKyAxOTogRDQwRkFERDA3OEI0NzRFQkNFMTMwRkI0NEREQjQ4MjQwNzc5ODgsIEY0M0UzQ0Q5NzhBNkUzMjhBRjAzOUNDNzBFMjkxRTFDCisgMjA6IEUxNzdCM0RGODNBMTE3RTU1RjI1NUE2QzJDRDc4QUZEQUZEQTMwN0YsIEVFRjFBQkFBQjlDQkUwRUUzMTdDQzc5RTdFNUUyNEI4CisgMjE6IERCQjQ1NjlCM0UzMDVFNDUyNUYxRjdCM0QyQUZFRjIyNkYzOTdFNjYxRCwgNjVBQ0ZCNzAxMzJFRUUxRDQ3MzE5QTU1MEE1MDZEQjUKKyAyMjogQUMyQ0FGNzc3MThERTU5MTMxQTZCNzQ1REU5RjNBOTg5N0IxNzU4MEVDNzEsIEQ4REI5MDA2QTk1OTdGNjQwRjI1OTQzNDBENjlFNTUxCisgMjM6IDhGNjIwMjJGNzJBMEQ3NjlEMkQwOTVBNTVFMjg4MzI5NTA4NzBCMkI0NEIwQkUsIEE3RTE5NkY4NjkwNzFCN0JCNzEzRThBMkQxNTYyN0U5CisgMjQ6IDM3RjU2NDBGODIwMzg0QjM1RjEzRjhDOEM3REMzMUJERTFFNEYyOURDRkJEQTMyMSwgRDU3NjVDMzlEQkNBNzJBQzg5MTAwQ0NCODg2NEUxREIKKyAyNTogMjUwNTlCRkMzMDJEMEY4REQ0MUJCMjJDRjIzOTFENDU2NjMwQzA2RjFEQUY0REZBODYsIERDMkZGRDE1M0M3ODhDMjhEMjUxQjc4QUI4QjczODhDCisgMjY6IDE1MUYxNThDQzRCQTkzOTNGREIxNTNDNEM3MjkxMUMxMjBCQUI1MTlGQUY2NDcxOTEzM0QsIEM2MTkxNTAwNjAzOEJGMTVERUQ2MDM4MzJGRDE3OURFCisgMjc6IEY1RENGNDIzMTQ4MkY3MkQwMkY4QjlCRTBBNDExMTNEMzVBRUExQ0Q4NTAyMUNFQzk3OEQ5QywgOUNCRDAyQzU1NzE4MEZCRDA4NjhDODdBMEJFQTI1QUUKKyAyODogNUQ4OEI1NTU0QTJFRDczMDU0MjI2NDczNjc2RkFBNzE1OUNFMTJCNTM1N0Q2MzVEREVEMzVCNUEsIDVBRDExQ0Q2QjE0QzU5RTY0QjVCMjZERkJEMDBGQjVDCisgMjk6IDU2OTZDNzA2NkVBMDlBMzBGQzhCQ0JBRDk2RDQ4QTVFNUZCQ0M4NzU2Qjc3MEYwQTg5Qjg3MTE5MTEsIEI5RUE1RjNCRUYwNTk5RDM4NUE5QUNFQkU0MDY0NDk4CisgMzA6IDEyNDBGRUQ0N0IzMDVBQzE4ODNGOENGMTM3RDU4RTc5MDUyQjRFNjg2RENBMTQyM0E2QTJCRUNCRDVGNSwgMDM2QTVFQTVGNEYyRDBCRjM5N0U4ODk2RUI3QUIwM0QKKyAzMTogQUQ5NTE3QkYzOTJDMUVCNTZENzhFREUxQzQxRjNDNzNCNzIzMDREQTQ3RjQwMEMzOTBDODZCMzdBNTBDMkEsIEVCM0UwMjZENTE4RUVENDdGNkM5Mjc1MjU3NDZBQzU0CisgMzI6IDJBRTFDRUVEODNDNjQ5MEE3RTU3NTJFOTE1MzI0MDZFQUM2RkY0QjExQUE3NzBFRkZGMUIyNTVGREI3N0M1MjgsIDc0QkZCQzdGMTIwQjU4RkEyQjVFOTg4QTQxRUFGN0FDCisKK0dDTS1yYzYgKDE2IGJ5dGUga2V5KQorICAwOiAsIEQ1OTVGRURBQjA2QzYyRDhDNTI5MEU3NkVEODQ2MDFECisgIDE6IDRELCA0N0E2RURFRjgyODZGOUMxNDRCN0I1MUM5QkNDQ0FDRgorICAyOiAwMDg1LCA5Nzg4RERGODk4NDNFQzUxMTIwQjEzMkVCMEQwRjgzMworICAzOiA0NjM3MDEsIDY3M0NCOEQyNDhFNkJFQ0Q1QTZBN0IwQjA4NDY1RUY2CisgIDQ6IEY1QjMyMjJDLCAxQzQyNDI4MkQ3RkI0MjdFNTUyODVFMjBGQzJBQkZGOQorICA1OiAzQTRBODM2MUIyLCBCRDQwRTYzMUIwNTRGMjgwQzc5NzNFNUFCM0YwNkI0MgorICA2OiBBNDc1ODY2QkYyQzUsIDIwNjdGNDJGQUFBNjI3NDI3MENGOUU2NUQ4MzNGREVECisgIDc6IDY4OUQwRDQwNzE3MkM4LCAzQkNDRkZDNjRFNTZENUI3NTMzNTJFMURERDVDQ0FBMworICA4OiBEOUNFNEIwNTEyMDJBMUQzLCA3OUIwQ0NEQTNEMEI5QzlCQ0Y2NDBCQzlFNkQ5Q0UwRAorICA5OiAwMzE3RDY4QkUwOThEMjc2QjcsIEFGMzUwNDNEQjYyMTNEQzVENEYzREZCOEUyOUVFNTM3CisgMTA6IDE1NENFRjBDNkYzN0FBMEE3M0M0LCA2MUU1OThBOEM2RDE3QjYzOUY5RTI3QUY1NUREMDBGMworIDExOiBDM0RCMUIyQjZDQ0M5MTcwQjlDMDVGLCA5NjY4NzFEREQ2RTExMDcxMUZCOURENzMzQjZCMkIzQQorIDEyOiBFNEYyMjM4M0M3NUJDMEZCMEU1OUM1RTgsIDk3MTUzNkFGODc4RjRFRUQ2OEY1OTA0NkM5MjhFQUM4CisgMTM6IDJGQkZCOTlBQUJDNjIwOUZCODY2NDkxNkRELCA2OEQwQkYyMTQ0QUQxQURFQ0M0MDc0REFFNTg1NDBDMgorIDE0OiA1RkVFREZEMDlCRjg5NzE5QTM0Q0RDQ0QyQUFBLCA2NERFQjdENUU2ODkxMTAzQUE1NEMwRUIzNjY3MTVEMAorIDE1OiBFMDYzQTA3NkUwQzc3MEZCMDEwRDI2QzNBQzNFQjUsIDBDQTMyMUIyQTc0NDhGRUVGODRENEUwQUQ1QkEyREE0CisgMTY6IEFGQjBEQjk5NTlGMDkwNkJEMzQ2QzJEODFEQzU0MTJDLCA0MjU2Mjc4OTVFMkM0Qzk1NDZEMzIyNzk3NTU4NTQ1OQorIDE3OiA3OTE3OUMwRDRENkM1RTA3NDFERDRDQTFFOENGMjhDNzVDLCBEMDE4OEEzNDRBMUNFRTUyMjcyRkU2MzY4REIwRkI3NQorIDE4OiA4QTc1NTIxMTM5QjBERTNDMDhDOUVBRUI3N0Q4MDE4QTM5RkUsIDQ3RkNDMjAwRDhBMzg0MzIwRDJGMUE1RTgwM0E5OTkxCisgMTk6IDAzOTkzODFEMEE5NzVBRTM5ODBBOUZCNzVCOTkxQzA1NUFGMzY3LCAwMzQ5MTUzNzBBRjk0Qjk2QThBNEU1MEZGOUIxMzRDQworIDIwOiA4QzE4OTA5NERCMTNGQkU2MkVBNUM0QTUzQzI5QTQyOEVENTg3QkEyLCA5OUM1OEY4Mzg0MjMwMzMyOTg4OTc4NDFFRDUyNjM0NworIDIxOiBEOTFGNTE0NEI1MjVBRjVENDdFRjRENUYwQUY5OTE1NDQ3QTU1OTI3RjksIEY2NzUwQkY3RTA4OTUxNUQzNUI0N0JDMUM2NUUyRTNBCisgMjI6IEE0RTI2QjU1NEFBMjc3MDU3QTVGRTNGQTA4QTYxMzhDRUVDNkQ2OUJCMUQ4LCA3QkJFQkY1MkQ4MjUxMTA4QzdBQTEwMjVFMjEzRUM0NAorIDIzOiA1QzFBOEMzQTQ2RkNBOTBENzM2NzU3MDYzMTNDQURGQkI5MEE1MzVBNEIzRDVBLCBFMzUyNDRBMjYzMzQ3OEJCREFGQ0M4MTE2MUYyOEI4MAorIDI0OiBENjlGNzI2NEZDNTk0MDU3Qjg5MTgxQjgzNTgyRDc5OUFFNTRFOUVFNEZFOEFENDgsIEQ0QjI5RTVDMjVGOTQ3N0Q5MzQ1NTI2REJERTkzNzJBCisgMjU6IEFGRDMyMkQwQUM0QUYzOEQ1QjlDQkUwREZFODU2MThDMDAxQTdBNzdDRDhGRkZDQjNFLCBBRDA2QkI5QzU5RDIzRDI1OEQ2QTJBRUREOTQ2QUEyMAorIDI2OiAxNzlDQTgzOTVDRDhFNzVCNEU1RUEwN0QyNUM4MDM2QUYwOEIxQTFDMzMwNDkyNTIzRDM2LCBFMzcwNEM0MzQxQTgzNEMwODc1MDBFMzMyQjdERUFFOQorIDI3OiBCOTE3OEVGNzc3NDY4NEY0M0YxRkNFOTlBNDMxOUI1QTREMTY3QjBBODQ4NTUxRjU2MkNEN0MsIDVENTA4MkZCMDJCOUI0OTRENTg4M0RGNDlEQjNCODRCCisgMjg6IDgzMEZDRDE1QTA5RUM2MTI0NUQ3REEyNThFMzA4RTc2RDNCNTQyRjIzNDVEQkZDMTFBRTk4M0EzLCBGNTBDMzMzMkY4RDkxOTExQkRBQ0NGRTIyODU2NUU1QworIDI5OiAxNzk2MTlCOEM3RUU5QjMxMjE0MDVCQkVEMkFDMTAyQTAyN0U2Qzk3RUFFREI1RUNGRUIxMzc5MkVGLCA4NTlFQkEzQkFEQ0U2RTVBQjI3MUEyNjFCMjZERTI4QworIDMwOiAxNDI2NEM3RTBBMTU0MTE5QkYyNEI3RkNGNDM0RTgxNDQwRDQyRDU0NzM4RjBCQUU1NTgzNjg0OUFCODUsIDBCNkM5QjlDQURCMUI2RUM3MUNFQTA5MEM4QzcyODM0CisgMzE6IDBEN0EzMTZGOEI4NzNGNjJDRjI2Q0ZDNTY5MTc5QUIxMUNCRjA5RDM0Njc5MzZBODVBREMyNjVCMkM5QThGLCA4NjZBRTdDNTFFQzJEOURFQjMyNzQ4QTFDOEI2MTE0MworIDMyOiBGOEZEMUY5NjdDRDM2MzI4MDVBRDdGQThFQ0I0MEY1MzA5MjdERDVDNDlEMzFGREJBRTQ5NzM4RTIzMTU5MDVELCA5Q0IxQ0I4NEE3MjdDOUY0MjU1NUVCNTY2RTBBMURFRQorCitHQ00tc2FmZXIrICgxNiBieXRlIGtleSkKKyAgMDogLCBGNzY5QjQzNkM3RkI3QzBDODIyRTI0QkIyQjI1NTVEMworICAxOiBDQSwgQjE1NjI5ODYyNUY1NjM0RkEwMTJCMjMwNDQ0Mzc4MDcKKyAgMjogNDk2MCwgQTY0QzczRTg5MEYzRDc3QjJDM0IzQzc2QzJEOTEzQzYKKyAgMzogREJCQjhELCA2ODY2NTFBMDE3Rjg5QTIyRjlGRTk2NTMzQzg1QzUyQworICA0OiAxNTBBRDk5QSwgMTc3RjdERTlFODk3REFDQ0FCN0VBQ0VFM0NERTc2MDEKKyAgNTogMDc3MDU1MDY1RiwgNDhCNDMwOUM3NkNBQzM3QkRGMTE4NDIzMTFCQTZDRDMKKyAgNjogQjJGOENFMDYyQzA2LCBFRDA0REY5NkMwNjk1OTUyNDk1NkU4QUM1QzMzODQ1NworICA3OiBEQ0U3MTgyMTE0MTBEOCwgM0Y4RDgxODBCREVBQzJGMDE4RUE4MTYxNTE3N0NDOEYKKyAgODogMEY3MUUyNzcyNDAyQUM4MywgMjEzMDQ4MUIyQ0E3QjRCNEM4RjNFRTczQjNCM0MyOEYKKyAgOTogQjY5MDMwNzM0RTVBREY3NTNDLCA4Q0M0QjYyQkZCQzNFQTU2Q0NEQkYwRUQzMThDNzg0RAorIDEwOiA2QjhBOTFBQkMxQkYyRjJEMDE3NiwgODZFQUFEODBEMTQ4QTQ4MDg2OTg3QTQwQTU2MzFERUYKKyAxMTogNDRBRDAwNzk5RUM4RTYyRTM0RDZBMSwgMDE2ODMwRDU4RjA2Rjc1RTU0NTMxQjQ1RDlFNzg1RjkKKyAxMjogMEM0QjkzODFENzhFMEYwQTc4QjNDRUFBLCA0QTc5QzU4REFCMTMxQTIyRjE3MkY5MTc3REM0MTU4QgorIDEzOiAyQzU2RDQ2MjU4NzY1MjRCNEQ4RDVGMDc5QiwgN0I0MDdGNzA0MjI1QjI1RjFGMTM2Qzk4NEU1NjQxNDcKKyAxNDogMzY0MjRENjlCQUNDNTY0MDdEMzQ1QjNEN0I0RCwgRUIxMjZDMjU1QTJEQ0ZEMzJGNjlERDVDQjYxODc2QzcKKyAxNTogRkREM0UwOTFDMDQyMEQxQTRENEE4NDg3NTdGQ0MyLCBEMzE5QzVDMDcxMzRENjdCQTQyQTRCRjMxMkNEODc0RAorIDE2OiBFRkFGNkYxMTdFQTlBNEI0QjgzMDUyQkJGNUEwN0RCOSwgQkIwOUQ0NzNGRTgyMjU3MTQ2RTdBQkMyRUZGNkY2MzEKKyAxNzogMTlCNzEzODNDNDE0QkFDM0VGMjUyRkZGMDlGNUFDRDc3NywgNTI2REM5QUU2ODk1RUQzM0EzNEE5QTRBREIwN0UxQjYKKyAxODogOUFCNkRGREI5MzBEMjZFMDBCM0Q5OERENUFEMDE0RTA4NzU2LCBENzBCOTVCMjBDMTA2QTVBMDNGOUI4MDNEMkNBQzNBMAorIDE5OiBFRUIzQzIzNkMzMDMxREU0QzNGOTRCRDc0NjY3N0FFODRCMjcxRCwgOTQ4M0JCQ0JCRkRCQTFDQzVGNjM5MkRBQkEyQUNDMTkKKyAyMDogM0EwRUJDNzUzNkY4NzE3RThGREFGRURBQzM5RThGMUY0M0MwNjI3QSwgM0RBN0RDMjQ3NTQ2NkNFREYwMUVCNTQzODcwQTc0RkEKKyAyMTogNzlEMjhEMkYxNDlFMUQ5N0U5MTAzNDJERjM4M0ZDRUVDRjVBRkQ0QzZBLCAyMzY0RjMzQkNGNkYwN0UzODFGN0UyNkRBRjgwMkQ4MworIDIyOiBGMUQ3QzMxOUJBRkI3NDAzMzJDQTE5QUIwQzlCNzE3MjhEM0FFNjlCRkFDMiwgM0Q0QUVFOTc4MEE1Qzk4Q0JDNjk2MDZDREREQjMxRjgKKyAyMzogMUEwRDgwMzgxQTE4NjY3M0ZCN0I1MkM0MEFCNkM0NkExMUFCMDg4OTMzM0MyMCwgQUY1QzE3RTNEMEQ5NzI0RURDMUZDNDM4QTE2QjRFQkIKKyAyNDogNUU1MDM0NDBCMjJERDZBRTY0MDFCQTQzNTVDODc5MUJBQ0M1OThDOUUwRjE0MTJFLCAxNTZEODIyMUJENjFGNUMxMDhGQzE4RkIyRjUwRDE1OQorIDI1OiA3Nzg0RUZEQzZGMEZDNTZGQ0FEQUZGMTdCQjUyREVCMzVCNjRGQTE5QzNGMzkxQkRGRCwgQTI5MUU4MjM4RUYxNThBMjM3OTY5MjA3N0Y3MEU4RDAKKyAyNjogMTg0QjZFMTgwMzJEMUE3MENFNTAyNzkxMkU0NDdDMzU3QzcyRUVGN0IyMEVGMEZCMjU2QywgMEZBMDEzOEZCOTQ4MEUwQzRDMjM3QkY1RDYwOTk3NzcKKyAyNzogN0FDOEZDQjY0RjM1QjcxQzVFRDBDQ0Q3NzZCMUZGNzZDRTM1MkVCNTcyNDQwODVFRDM0RkU4LCBEOTk1QjNDMTM1MENDNzc3ODc4MTA4NjQwQzFDQURBRQorIDI4OiA4NkM3QTAxRkIyMjYyQThFMzdGRjM4Q0M5OUJGM0VGQUVCOEIzNjE2NkQyNDkxM0JERDNCOTFEQSwgMjVFQzZEOUY2OTE2OEM1RkEzMkMzOTYzMUI2MDZCNTUKKyAyOTogOTFGNUQzRTNGRTBCMTk3NkUyOTE1QjhEQTNFNzg1RjRENTU3NjhGRDcyN0FFRjE5RkExNTUyRjUwNiwgQUY5MDJERUQ1NUUzODZGMEZDNDIxMEM5N0RCOTQ0NkUKKyAzMDogN0FCRjVCRDlDQjJFRkY4MzgyQzZEMkIyOEMxQjBCMjU1NDBFNDM0MTIzQUMyNTIwNDZCRERBNzREQTMyLCA3MTMyNTlFRERBOUIxQjYzRUI2OEUwMjgzRDAyNTlEQgorIDMxOiA1NjM0QjIzQUNFRjI4NzRCRTA1OTFCRTMyNjhDNDUzODY5OEZGMkQ5M0Q1OUIzOUJDODZEMDEzN0RBQ0JBRCwgQzQwNTQ3OTZBRkQzMzVCNDNDNjBFN0U2MzQxMjJCQUYKKyAzMjogRjI2QzY4QzM2QjFFNTY0NDk1OTVFQTRFMTYyMzkxRTBDNkEzMDY1OTI5NDlGNjk3OTdCNkMyMzI3RTUzM0FEQiwgN0IzOTJBRjc3NkE5NDk4MzA3ODgxNEI2Qjg0MjhCRkUKKworR0NNLXR3b2Zpc2ggKDE2IGJ5dGUga2V5KQorICAwOiAsIDYyNzVFOENBMzVCMzZDMTA4QUQ2RDVGODRGMENDNUEzCisgIDE6IDM4LCBBNzE0MjEwNzkyRjlFRDEyQTI4RjI1Q0FFM0IzQkM1RQorICAyOiA4RTJGLCA2MzU3QzFGMTI1NzIzRjIyNDREQUYzNDRDREZDRDQ3QgorICAzOiA5MDBBNEMsIEVENEUwQjMxODM0NkQ1QjlCNjQ2NDQxRTk0NjIwNEU5CisgIDQ6IDA4N0VBRkY4LCBCODcxRUQ5NUM4NzNGMUVGQTI0RUY4QjY5MTVGNDQ3RAorICA1OiA2M0ZDOUVGQkQ0LCA2NTBEMEVEOThDQkVDQTA3MDQwQUI5N0I5NzEyOTM2MAorICA2OiBCNjA4MUU5NEFBMTksIDZBM0JEQTgwMzBDNUE3OUI2QjkwODc1NTVBMURBNjdCCisgIDc6IEUxMEE3QjlDQkIyMEMyLCA1OUVCNTVERkQwQTM3QzU1QTg2OTgzNEU1OTczNzNBRgorICA4OiA5NEU5NDdGRUUwNTc4MEVFLCAzNTQ5MTg1MjdGODU1MjY0RTM3REI2ODkyRTg2ODA1MAorICA5OiA5QTgwQzU2N0FBNTAyMjA4NjIsIDgxNEVFNTdDQzlENTFEN0Q5MDBBQjQ4NDBDNEIwNzJGCisgMTA6IEE4NzQxQkUxRTQyQkUyMDdDNDE2LCAyQjI4QUZEOEFCRTIwNjY0RDhCQUQ3NTM1RjgyRjExQQorIDExOiA2QUI3RTNDNjhCNjY4MjAyM0U4MTkwLCA1RTQ4QjY3NTQxRkU4Mzk2OTk1MjM5NEY4NEQyOUU5MworIDEyOiA0RjY2RkI2MzRFQjI1OENFRTI5NTVEODQsIEYyNjMyQzIxMzVCNkUxMTQ0NjczQjBFRjczNDk5ODE4CisgMTM6IEIyOTA0MkYzODc3QzJGNUU2OTQ5NTNDNUY2LCAwMzI2OEEzMDQ5OUQ1N0EwNkFBODczRUYwMDE2MEMzQworIDE0OiBEQ0M3QjVEOUY1OEM4OEY1NEE5NjExMzg5QjhELCA1NTE1NDI2RkY3Q0YyRUVBOTFCRTJCMzc1MjM3MUNFMAorIDE1OiBCNjY1NDg4QkNENzVGQzAyQTBERjc5OTRCN0NGOTgsIEI3MjE1MzFFMkEzMTdDMjU0RkEyRUQzMDZBRENGOTZDCisgMTY6IDk1MzVEQzhBNzI2NDVFMzRGOTQ4QjcxQTUxNTlBQTlCLCA1Q0VFRDkzREUxMjgwNDRGMDQ3MUM2NUFBOEYyMUQyOQorIDE3OiA1Q0JGQzYxQTIzRDI4NTYyRkNBOTI5Mzc1RTVCNTg1MzI3LCAzQUE4NDJCMjE2MzE5NjhEMUI1OEI3MkZFRTA5MEVFMQorIDE4OiAyQUMzRjc4MEI5NTZBOTMzQzBCODU2NUVFNTI3MTczQjhDQzgsIDE2RUM0QjZEOEUyQ0YzQ0QwRDE2RTdBNUY0MDFDNzhFCisgMTk6IDUwNjdGRDY1ODcwQTRFQkY2QzdGQTgxMUExNTI3MEU3RjhGMTdELCA5QTc1NjNCRURBREZBNkI2RTQ4RjVDMTNGQ0VBRUQ2RQorIDIwOiBFM0E2NUExODgwNzdFNURDMTcxQ0ZGMzBCRThCMjdGMTBGMDE1MTY2LCBCRDVCM0Q4NEQwQzFERDUxQTM5MDlGODQ5MTQxQjU3RgorIDIxOiA4OEQwQTY1QzEwNTgyM0U2OEJFMzk4N0NCMjA1QUUwQzFBMjc1ODhGQ0QsIEIyODAyMjFBRDBCRDgzRTFENkIzN0YzMzFGMzI2QUI1CisgMjI6IDdDNTZEOTg3RkVGNjgwN0VFRkFGRDRDN0VCOUQ3MkFBMEUwMzc5NzlEOTFFLCA2ODZFMTI2OEE4REM5Q0QwMTkyQTM4M0VBNkMyRDk3NQorIDIzOiBCMjNDQ0QwQTA3NkNCMTIyNzUwQjYzNEI5RTY1NTFFMDU4NUVERUExOEMzMjQ1LCA2REYzMEE3RjA3MjhFMkQ1NDlBQTQxMUFFMzc1RTU2OQorIDI0OiA3NjdCQzNBRjIwNkU2N0M5RTI3QTREN0U4MTRGM0IzQTY1RDI3QkI3MEJBOURENEQsIEFCMkIxNkMwMzFGQjJDOEU4NUIzQjJCMzhBNUNCQTRFCisgMjU6IDlBQkYzNEFCRDQzNzA1RDYyRjM3NzQ0OTQ2MUM1REMyMzlBMkE4NkU1QTk4QUZCMTU5LCAzREVERURBODVFNkJGQjUzQzZGMTg3MjZDRDU2MTYwNAorIDI2OiBGRTc1NjM0NEMwNUNCMTJBQTA2NzNGMUMyMDY5QTg2NTU2RTU4M0ZGNEI3MzEzQTBEMzk1LCAyMUNCMEUwQkFCQzNDN0U1NDdGNUNCMjA3Mjk1QzBFRQorIDI3OiBCNzBGMTZBRDE5QTZCMEFGNkQ4REJGNEU5OEQ3RDVBREI5NDREOTFCRDg4OUQ5MzkwQzNFMjEsIDJBRTY3ODEyQTIyQzFDNzg1RDNCRkMxODRBMUM3NEVBCisgMjg6IEE2Mzg5MDMyQUE5RDA4QkRCQUFBNUUyMzBFNTEzMDY2NUZCNEYwQ0I4NjhGM0YyMEM0QzU0MzhCLCBFQ0EwNTRFRkEzRjM5NDAwQTU4NzgzOUM0RjA2MDVDNworIDI5OiBBNTVBNDEzMTVFQUYzQTY3QTBGRDBFMTRDNkUwNEQwM0E1RTM4RDBGNzU2NzE5RjRBMDgwMEIyOTBBLCA3QTUyNzc4MDlENEI2NUU2NjM2MDMwOTlCNERGRkJEOAorIDMwOiBFNzM5NjMzNTc5QUE2MjAxQTAyNEI5ODczRjI4NDEyQkIwOEIwOEI4NjE2RDYxMUJDOUQwNzk3OUJEM0EsIDM5MDAzOEE5M0FGRDMyNkM1Q0MxNTI1QTI0Q0E5MUFECisgMzE6IEVEMzI2NkY4QjBEQUE3QzNEQjc4MTQ0MjdFODEzOTgzMUNGQzBFREU2NjhGMERBODNGRjcwOTAxNTQ0MTBELCBERTQ0MEVDMkM2MDgwMDQ4QkZGM0M1NDU1RTFCQjMzRgorIDMyOiA0RDBGNzUxQjU1REEzQTJFMEIyOERFNTlFOTY4MDY2OUZDQjU5ODRFOUMwREI5NDJEQkFBQ0RERUYwODc5NzMxLCA2MkY5NkNGRTMxRDNENkFBQTBCOUY1MTMwRUQxQjIxQgorCitHQ00tbm9la2VvbiAoMTYgYnl0ZSBrZXkpCisgIDA6ICwgRUI1QThFMzBENUMxNjMxMTg2NEUyRDhEMzI4NTlBQ0IKKyAgMTogODgsIEVBQjg4REUxRUI3QkM3ODRBNzA2QjJENzk0Njc5OEQ3CisgIDI6IEJBMUYsIERDM0NFQzZBQTMyNEFDN0QwNTNFRkY3QTk5QUQzMDY5CisgIDM6IDlBMTQ1NywgNEFCNjU4MzFERTM3OERGRjcxQzIwMjQ5QzdCRUMwNUUKKyAgNDogMkY5NDk2RDYsIDgwMDc0NUNGOTVFQUUzQTY5OEVERjlFQzk0OUQ5MkI3CisgIDU6IDg0MTUzMTc3QTIsIEY2QTA1QjY1NDQzNUFCREY1RjY5NkMwRTA1ODhDQjVDCisgIDY6IEY4MEI3ODY1Qzc2NiwgMjMzNEQwMDYxRkQ0ODhEMTVBNkFDOEU0NEVBMUY0QjkKKyAgNzogODcyRUE0ODZCNEVBOUQsIDNBNDk2NzFERTM0N0Y2NzVBRDc5MDREREY0MjU1RjNECisgIDg6IEE0RUU1NzUwNTA3RkM4MzEsIDk1NkQwOUY3QzVGRTgxMkM2RkI5ODJFMUREQkU4NjRBCisgIDk6IEI1ODc0QUM5NjRGQkZDMUE5NywgOTBGQkM3NUY0NUJGRjU4QjNBMTEwMDM5Mzk1NUQwQzIKKyAxMDogOTJGRjVGQ0YxRUM2NzVFMDJFNzEsIDk4M0M5NkE3QkQ0QTBEQjVEM0I4Nzc5MTFDRThBNkIzCisgMTE6IEY3QkNBNjlBOUM3MDMzRDg0QTJCQTAsIEQ0RUNFNUJCOUZGQ0JCMzMxQTY0NkQ5Q0U4MDc4NjM0CisgMTI6IDVFMTA0MUI0NTU0QzhDREQxNEFBRjE2RCwgMUVGNzc3RjMwN0NCOTY3ODhCOTEyMEZGRjhBOEJDMkYKKyAxMzogN0JCNzI4OUZDQUQyMDlENzk5MkVCN0FFREMsIEU4QUVGQjgzMERCQUVEMkI0QTc5MEZGRUY5NDBBMjBCCisgMTQ6IDEyNzc2QTdDOTM3QTY0OEYwQTg2MjhBRDhDNUMsIEYwNzAyODM4NTJBQzAzMDgxOUVBNjdCRjgyQzcxOUFBCisgMTU6IDcyOTM0NzZEOUU5MzVFQUU5REVCNjZGNjk3RjY2MiwgRDYzMjI2MDM2NzExNTNBMUVDMTQ1M0NEQTU5NzhFMTUKKyAxNjogREMxMkE4NkM4NUU3MzU4OTE5QkFCQjE1QTNCRjVGRDcsIEJCQkZBNDY3RUJBODEyNERGRUM4MkRCMDEzN0Q1NkI5CisgMTc6IDBDQzFEQUQwMEE5ODdGOUM1N0UzNjYwRDk0MTdGMjI2RTUsIEJCOEFGNUEwQjVCQzc5QkQxMUM1RDQxQ0E4MENERTJDCisgMTg6IEQwMDQ5MTE1RDZFQjU0OTVGQjM5MUNEQzQ5NDAyMkFFQUE0OCwgNjgyRkYzNTdCMkJDMDU5NzY1QzI5QUU2Q0E2NjhEMEMKKyAxOTogNDhGQzU0QTQwMUI0QzA2Q0U4NTY3QUQyOThCNjcyMTkxQzdFODQsIDQ5M0E0QUY0QzJBODgyOEZFRDg0NDJDNEVGRjg3N0Y2CisgMjA6IDkwNzc5Nzk1ODIxQ0IxQjdEQkQ5NzAyOEUyOURDMUNFN0QwQ0ZBRTAsIEUxMjZGNDg1RjczQjZGN0IzODk0QjRDRjdFMUM1RERFCisgMjE6IDhDQTVDMjQ2QzhCN0MwNEJENzE3MUNBRTJEMUE4OTJENjYzMDI0MzNGOCwgNUQ3MzE0OUEzNjM1QTg2QjNDMzRERUE1Qjk1Q0NCQ0IKKyAyMjogREYwODJCNjY1RjdBOTUyQjI2MDRDMDQ1NTRCODEzOTNGQ0M3QzBCODE2QzgsIEQzNTY5RUQ3RDQzMTE3NkIyODZFRjIyNDE0RTRDQkE4CisgMjM6IDc2MTkwODUzMEM5MDY5RTE4OTY0OUVEMjRCNkE2OEE4OUIwNjdDMzFFOTg2OEMsIEEyNThCQ0Q4M0QzRkJDN0FFMkFFRjc1MTYwMjVBQjM2CisgMjQ6IDcxNzA0OEY1QTMxRjNDODlEMzcwNEY5MDA2OUFDNUQ1MTc0MTE4NzcwQzY1QkRBMSwgMDY3RUJGMThGN0UzREY0RUExM0Y5QUJBQzY4MkMyQTIKKyAyNTogMDhDNkZDQzVEMzA5OTM0N0MzRkVCQTM4NThBNkMyMkM1MTI5OENCNTkxRERCNzc4MjcsIEI1N0JGQkE0MEJFOTlERjUwMzE5MThBMUE0RTJDQTgwCisgMjY6IDJDQzUzRUY3RUI5NTQyMzRFNjRDRDRENjBGQjFENzE1N0E0ODlBQkFCQzEwOTAwRkZDREIsIDIzNkU3Njk2MTFEMTZFQjdGNDYzQjc1Nzg3NzBGODg2CisgMjc6IDI1NTZCNDZGMkU4MzEyMjNENjMyRjI2OTEzMjlBODc0RjUxNzY4N0FGODFCODMyMkFDNTVENywgRTIxM0E5MERCQzMxREMyNjFBNDVBOUFFNDFDRkVFQzMKKyAyODogNzEyNDE3OTI3Mjg1OTRENjk3OTFCODBBRDZEQkM2NDE3RDFEMTREMjIyREY1RTZGODM0QjgyQzgsIDYwMUY5NzYxNzcwOEIxOTQ1QkNEQThBODI0OTZFRkIxCisgMjk6IDUwMDNEQzJFQUFBMjNGOUUyMjIxQ0NCQjlFMjAxMTY2OTJDQ0M5OUIzQ0ZCRDBEREQzQTg0OTFFN0MsIDM3NDMxNTVCNzkyMDEyODQ1NTUwMjA1Qzg5NDlCNzNFCisgMzA6IEQwNTg5Njc1MzU3RTg1MDMzM0Y4NTRGQkExNjA2ODhGMDZEMTIyREVDMDBDQzI2MjBEQTBCMjc3MDc2NSwgMjBFMDg1NzUyRkM0RDM3NzkxQzIyNTAxRUQxREI2QUQKKyAzMTogNjQ1QjQ2RDJEMTE0RUU3MzI5RjE0QUMxRDk0RTY4MTdFQjM4NUVCODBDNjFGMDE0RjkwNTMwNzQ5MDc5RUMsIDhBMThERTg2Rjk1NTVBMTA3MEQwQkZFREFDMTVCMTRGCisgMzI6IDA2ODM4OTIwNkQzN0JGNUE0MUM1ODA3NUZDOTg5MDFDM0I0MkU2RjJGMTNDMDlGNEU5MjUyNDAyMUJCMUMxQzgsIDM3MEI4NjkxNEQ2M0NGRUU4MzAzRDUzOEE2QkVBMEU3CisKK0dDTS1hbnViaXMgKDE2IGJ5dGUga2V5KQorICAwOiAsIEEwMDYxQzJGM0IyMjk1QkZBMzNCQzc0QzAzN0VBOERBCisgIDE6IEVELCA5RTU2NDhEQ0U0MERFMzdCNTZDNTU3RDI2Q0IxOEQ4MworICAyOiA2NzE5LCBBNjYwNTI1M0M1OUExMDFGRjg1QzUxMDJDRTkyQkU0NQorICAzOiBCODg3M0QsIDEzRjNFM0VEMzY0NkJCMjk2RUU0RUQ1RDYzNzlBMjFCCisgIDQ6IDVBQTZFMkNCLCAxODEyRTgzODVEMTVCNUJBRTA0M0U0RTg2MEJFRjQ5MAorICA1OiA0RjZGNENEOEU5LCA4QTgwQkM1RTA4OTI5QzQyQTVBNzRDNUQ5QUNDMEM2RAorICA2OiAyRjBEOEI0ODNDRTQsIDMxNkY1ODhGNzhGQzZBOTE5NkM5N0NFNTlCOUI2M0I2CisgIDc6IDgyRDg4NUZERTFGOTQ4LCA3MTYwQkY1NTY2MTQ1MTFGNTM3MzhBOTJCNTI3NzA1NgorICA4OiBFNDkzMTQ2MkFENDFCNkRDLCA3Q0UyNEM0RDZCNDk5OTc1RkNCNzJCNUUyMjc1RUQ1NgorICA5OiA1MDNBQTcwQkU2OThCQzVCNDEsIDEwRUEwQzYxRkRCQThGRjdCNEU5OTI3QkNDRUZEOTExCisgMTA6IDZCMkQyMTNEMTRCNUQyNUVCRTM2LCBEQzMyMjJBRUQxMkVFMjZEM0QxNEUyRTczM0VEQjJBNworIDExOiA3RDhCMEJDMUI3NDQzRTcyNjczNzFFLCBGQ0FDRkM3M0UzOTE4NjVCRTg2RTA0MUY1MUM0NUU4MQorIDEyOiA5RUYzQkY4NjA5RTEzM0JFQjEwNTY1QUYsIEQ4NDMyNkQ0Q0FDOUQ1Qjc0RkNGRDhDQkFGRTc5RTc3CisgMTM6IDU5QUU3QjFGREUxMTc4Q0VFN0Y2M0M0ODk0LCBFMUJDRkNEQ0E4NkNBQjlDNjg0RjdEMjE5NjJENTgwRAorIDE0OiA1NjRFN0I4QkFDNTU4MkEzQkYxMTc4OTE2NTY5LCA1NDgwNEQ4REY0RDc1NzdFRjY1QzE1NDg3Njk1Rjg0MAorIDE1OiA3NThBNkRDNDM3Qzg4MjEyNzRCMEYxNkY5MTFCQUEsIDE5REQyNzUwMDkxNUY0MjVGMzRGNjdDQzIzNzREQzM2CisgMTY6IDA0NjhDOTRBODhBMjdBRUVFMkIzQTk3MzA2NUU1M0NDLCBDNzQzOTk2QzZGNDkzNjNCMkY0NjEzRjI0NzAzRUY3RQorIDE3OiAzQjBDQUJBNUVFRTQ0QjdCRkYwRDcyNkVDRUQ1NDc2M0ZGLCAxNEQ5RDA5ODE1QkNEOTFEQ0NFMkY1QUUxQTk5MjlDRgorIDE4OiA1Qjk0NUQ4M0I5OEM0M0IwMjQ4RjlCQzA0NzlFMzMyODY5QUIsIDY3QTI3NUYwMzEzRDQyNDVCMTk2NTQxMUNGQ0M4RjE3CisgMTk6IDk3MzMyNDQxQ0E5NkRFODU1M0EzQzZEODk4RkM2RDkwQzg2REJGLCA3MzE1MEVDM0Q2MzI3RTNGQzgwMTVBNjE5MjY1MkQzQgorIDIwOiBCOUExNzc4RkFGOTc2NzE2MEQwRDg3ODE2RUNFMUI5OUFBNzI3MDg3LCAwQzE3M0QzQzQwNzgzOTJDRTM3NzMxM0M0OEQyQkFFOAorIDIxOiA1ODgyQjczOTExQzdEMjZFRkRDQ0EzQUVEMkVEQzhBOEJGRkU3NUIxRjgsIDhGOEM1MzU2MzlBMEI1OTUzN0U1OTBDN0ZDOUQyRTUzCisgMjI6IDcwQUVCRUQ4Q0NGRkY2RTVDRjA2RjNFODQxRDEyMzg3RUY4RDZDN0I0QkRFLCA0QjAwQzI3RkNBOUJFQjgyMzMxQ0M4RUIxM0RDQzU4MAorIDIzOiAzNDVDQ0I1MkJDMjBEQzVGMUJGNUVFREY1RDcyQTZDNDhGNDAyNTU3RkZEMzQyLCAxQTc5MEEzOTU3M0I4NTNEQkI4RTJFNzNCNzMzMTAxNAorIDI0OiAwNjM3Qzc4QTgxN0U5MUQ2M0NFMThDRUFGOEQ2NUM2MTA3MjgzQTkwQzVBOTc4NDIsIDUyNzg2Q0I4MTcyNEUxMkM3NkEwRDIzRDQ2ODBFMzZCCisgMjU6IDU5NTI2RDFFODZBNDczREZCNzIwRkYyNUU5N0Q2NTcxMDc3ODQ1RjczQzVFODMyMkYxLCAzNjlGQkE3ODIzRkM4M0Q3MjdGRkQyNUQxMDEzMDk4NworIDI2OiAyOTMzQkI0RTc2MDNDMzEzQjYyMzMyODI3NjAxRjgxODlFMTRDMUYwOEVBNTQ3RTE1QUI1LCAyMDQ1MjBFMzY1REFGRjY1NTFCMDE1NjJBNENFRkRGQgorIDI3OiBBNDA5OENGMkE0OEExREMyQkNDRTY1Q0NFOERGODI1QUY1MUU3RTVGOTRCNjE4NkZGODVENzcsIDk4MzNFQkI5QTFENUNEMDM1NkUwMjNFMkMzNzYxQzJCCisgMjg6IDI2NTU3Qjk0MkZENjkxM0Q4MDY2NzJFQjAxNTI2REJENUQ2RjUzMkY3OEFCNjc1OURFMzQxNUM1LCBFREFBQ0REMTAxQkM0MEVFNjUzMEQ4QjVEQzAzMUYzMQorIDI5OiBEQjkyQzNENzdERjBDOEY0Qzk4ODQ1QUE5QUQ0M0ZCODAwMTkyRTU3QTUzRTA4Mzg2MkI3RTNGQUYwLCA2MjhERUIxRTM0NTMwM0E0MDcwMDI4OTA1MjA4MEZGOAorIDMwOiBGQzU3QkZBQzJDNzc3ODE3MjNDMkI3MjE4ODZENDRFRDY3QTUyRDlBRDgyNzg3NEJDNEVFQzBBOTcyODEsIDlBMjIyREJDNDdCNEFCNEU1MjBEM0NDNTg1MEQ0REVGCisgMzE6IDcyREZCOUU5MUE3OEVBRkU3NThCNDU0MjIwNkE0QTk1N0I0NTIzQTU4NDI4Mzk4QzExQkNGMkFFQUUxOTM4LCAzMDdEMEI4NzYxMzBFODI4MDRDMTE2N0UwM0I2OUIyRgorIDMyOiA3Mjc1QzZFQkRDMjY4MERGQ0I3MzMyNkE5ODdEMkZCQ0U4M0U0MEE5QUVGRTYzNTFDRkRBNzI1MUE2RkUxMEE2LCA4OTVFNkVFQUE5QkQ4ODU5NDkwMzMyNUEwNjNDQTQ1RgorCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9ub3Rlcy9oYXNoX3R2LnR4dCBiL2xpYnRvbWNyeXB0L25vdGVzL2hhc2hfdHYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjcxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9ub3Rlcy9oYXNoX3R2LnR4dApAQCAtMCwwICsxLDE3NzEgQEAKK0hhc2ggVGVzdCBWZWN0b3JzOgorCitUaGVzZSBhcmUgdGhlIGhhc2hlcyBvZiBubiBieXRlcyAnMDAgMDEgMDIgMDMgLi4gKG5uLTEpJworCitIYXNoOiB0aWdlcgorICAwOiAzMjkzQUM2MzBDMTNGMDI0NUY5MkJCQjE3NjZFMTYxNjdBNEU1ODQ5MkRERTczRjMKKyAgMTogNUQ5RUQwMEEwMzBFNjM4QkRCNzUzQTZBMjRGQjkwMEU1QTYzQjhFNzNFNkMyNUI2CisgIDI6IDY1QjBFMUVBMzZDQTE3RURFMkYwNTVFNjdFQUQ2N0IxQzI4MkExMUE1QkEzQThFMAorICAzOiBBQjdGQjhEMjFDRTNEOEQ5QkI1RjFBRjFGMkZBMEQzQzI3NzkwNjE2MERCOEQyMjYKKyAgNDogRkUyRTlENDNGNzRCMTk5RDkxQjkyOTFENzNDQ0ZDQTBCRUE1RjA2OEZCQTI0NEZGCisgIDU6IDNERjZENjcyRkU5REFBQjIxNTIzRUIwNDcwNUQ4QThCNzJCNzhCMDBBRDQ2NUQxQworICA2OiBFMDU3MjQzNTNGRTI5OTU3QzNFOERFQkFBMjFEMEMyREQ0OUNDQTIyMTkxRDVBRDMKKyAgNzogNDA1NkREQkY4MkFFNzRBQjU2NzIwREVBRjA3OUFDQTJGMDc2RUQwNDZEMDQ0REU1CisgIDg6IDgwMUZCOUJFMUE5QUM3MzM3QTgxMzQ1QjM4NDVFNEU3QzEzQUYxRkJBREI3MzcyMworICA5OiA0MzAxNTY1NDdBODI0OTJDQTg1OTM4NTMwNDc0OEY2NUYyRDRBN0UyNjY0QUUyQjEKKyAxMDogRkM0MzUxMzdDRDY1MkQ3MjBBMTFFREY0N0FCRTQ2ODBCQTRBRDVCRDgxMEM5ODM1CisgMTE6IDIwQTgxNDNERjQ3RjU3MTVGQTA5MDVGRTZGOUQxRDJCNUIyRDRFMjZGQTk4OTMwQgorIDEyOiBFNEEyMDYzMDE5RkJDMDM0REVCMDFFMkE5NTI5NjA0MjMxOUNCQzAzOURBNjlBOTEKKyAxMzogQjVGMEZBNTcwQzRDRDY5QTNDNjg0NDhCRTQyQzg2NUJERjc3RUQ2OEI5Mzg3NUU3CisgMTQ6IDgwMkJFNkVBMkNFODZBMEIzNzFGMjM1NDk0NEIxOUNCMzIzMUFGN0ZCNEYwMEZGOAorIDE1OiBEN0MwODg2M0I1RTVFM0Q2OUI1NDA0QTExNjMxNUE2OThFMTI4RUJBRjg2MzZCNzAKKyAxNjogNUM1Mjg4Q0IwRTRFNTMzMDU2QkE1MjkzNDQwRDlCRTZGM0M0NjEyMzNCRjFFRDUxCisgMTc6IDg4RDNBOTRGMzgyMEU0MDg3REE2OUQ4QkJFMkNGNDE1NDY2MDYzNzA5QzQ1MEM0RAorIDE4OiBDMDdCNEIxNTVGOUY3NTgwNUQ5RDA4NzA4N0ZDREQyOEQwOEE5RDAyMjE5MjQ0N0UKKyAxOTogRUU0NzNFNTY5RkYzRTA5MkNGODk5NkIzMUNFNjY1RUE3RDYxNTIwRDQyRTI3Mzk1CisgMjA6IEUxM0RBRTgwOTgxMzlDRkNFQTc1NUQyMDYwRjEwN0UzQzc1ODFFREY5RjRCM0I4NQorIDIxOiBCNDhBOUMwOUYyNkIzNzlBQTI4RkJDNzUwQjUwQ0VGNjlEMEQwRUUzN0ZGNzY1RjcKKyAyMjogNTc0QTAxNDU2MzczMDE0RjQxNzlDREExNDU0MUUyRTNDNUExQ0REQTlGOUQwNzFDCisgMjM6IEYyRTI4MzFFNUJCNEFGMDU5MTRDNEJBNjFCQjhENjAwRDFFRjA3MUM1REYwMjI2OQorIDI0OiBCNzgwOEE1QjYyNThDQkU3MThFREE5Mzg5NzhDNjlEM0ZGQzQ1QTIyMkU5REJGNEMKKyAyNTogRDhFNEUwNzZEREU3ODk1MEQ1MUVBQzlGOTdEMkQxOTE2QTA5MTA0NjVENDVBNTVDCisgMjY6IDRFREVDRkFBRTFERTk4QjdFMDU2RTY0Q0EyNDAwMzQyMkJCRTZGMDQ4MTI5QjI0QworIDI3OiAwREUyODNCNUE0OTUzRUFBRUM2RjNGREU1MEQ3ODc1QzhFRTU3RkE3OUJEQzcwRkMKKyAyODogRUNERDRCQTE5MzZEQjlFNkY4M0UyQkQ3RjM5RDIzOTI3QTFBMTdCMkQ1MkE4NjQ5CisgMjk6IEJFMTE4OTM0NjBFNDk2NTlGN0RGM0ZCM0JENUUzRTlBMzE5Rjg1RkQzNDk2RTI2QworIDMwOiBBRUMwREEwRjJDQzA2NDYzMjVDQzAzMzE5QTBFMDgwRjY4QjQ2QjMzRjgxOTIwRDYKKyAzMTogODgyNEZEMzk5ODRGNkE1MkZGRkYxOTAxNkUyN0M1OTQ5MjE0NTIwODYzNzNGMkVFCisgMzI6IDhCNjU5MkFGQkIwMkUyMjdBQTQ1MUI1Q0ZEQzgyMUI4NDI0NUQzNEI5NkJGNEYxMworIDMzOiA5NjBERjlDMzQ5RUM2NjE5RkYzN0UzRjBGNDgzMkUxOUNDNkE0RTRENjg5NjI2NTEKKyAzNDogRjRFMkI3QUE3MkJDN0Q2RTBDRjZEQTEwOTRCRUVGQUE5QzU1NjEwMzI3QzYyOTAwCisgMzU6IDA1RkQxQjgwQ0E0QzdDMTRGRTVCRjBBQ0JEMEVBM0RBRTQ5OERDMzkxRENGMjI3NworIDM2OiBDNUU5NUY5NTM4OThDNjgzNTVCNTkxNTA3QkI3MTRGMEU1REFCOTk4OUQwODM5MDAKKyAzNzogQjJENEUyODZDRjdFQThBQjZFQ0Q2NTBDOUU0OENBMjM0OTdFQURFNTU0ODVEQjFFCisgMzg6IDlENTE2NTdFMTFDNTRGRkRGMjA1REJCNDM1MDk3QTJCQzZGOTNDNEJFOEQ2MTgwQgorIDM5OiAzQzZBRTM5MTEzNTZBMzQzQUUzMTEzNzM1RjA3RkNGQjVFMDQ2QUNENDdCMDBGQkIKKyA0MDogNjY0MzQyQ0RFQ0M4MjVFRDM0MEE3RkZFMkU1NzEwN0REMEI1RjI0QzI0QjJDM0YwCisgNDE6IDRFRjdGQ0ExM0NFNjg0RDgxREU0RjU2NkQyODk3Q0VCNDA3RkJCM0RERTgxRkQ2NAorIDQyOiA1NDY4OUZFQ0VENjNGMjk3QjEzQ0Q0OTRCODVFNjg2NjgwRjRGNzhERTdFQzgxRDUKKyA0MzogQUY0MzRCREJEQzdFRjkwQkUwM0U0MEEwMzNGMTZFOEE1N0I0MTg0MEUxRThBQjU5CisgNDQ6IEEzMkRCNjc4RjQ0OTA1QzE4OTY4RjVEODk4Q0E3OTkyRUJFMkU0Q0MzMzE4Qjk2QworIDQ1OiBERUU5RDUxOUExMkFDRkI4QTA5MzVBMzY4RDZFNkM3NUVFRUVFNkYyQjBENUQxOTEKKyA0NjogQ0JDNzQ4NjM0NzJEMUM5RDIzQzUyNkY0OTA4QkQ0RDQyMzRFMDBDQkNDOTlBOUU5CisgNDc6IDZDMjI4QTFENDg3MUU4MDJFMDM1QzlCQjE2QzUxODczNTQ4NDFGQjZCRTNDNjlCNgorIDQ4OiBDQUE3NTVDNTVBQTg2OUU2MzNDQjNDNkQ5M0E1NjE5NDRBQzc0MTgxNTRFMkIwRjAKKyA0OTogQTY4MzVGN0MwQzZDQThGNEE0NTc4N0JBRkE3NzQ3OEFFOUFEREJFRkJDMzA1MkQzCisgNTA6IEU0MDY3NTU5NTdFQzIxQkE2QTY0QjVEM0FBRjMxNzQ5Q0Y5OERGOTJGMUIxRkZFMAorIDUxOiAwQzJENEE0NEE4MDNEQkE5OUI3QTQ2NzU1M0M5MjkzQjQ2QTUzODU1OEJENzdERDQKKyA1MjogRjA0RjAxMUIwOUQyNzVBMTg1NTI4Q0MwNDBFQjcxOTY0OUM4NDcxQTg3QjI1OUIzCisgNTM6IDNEQThCNTdGRjUyRkNBRTdDMzI2MzZFQzZDODA3MDgxODlDRUQ4MTEzQzVDREUxRQorIDU0OiA2QzZDODhCOEUxOERGNUNCMjJFREI2MUEyRDNFRDc0NzQxQTcwOEJDNDY1NzZGQjcKKyA1NTogMkQ0OEVFMkJGODVERTIzNDc1NEJFQ0YzQzZGNUIwRTYyOTg4QjVCRjI0QUVBNUJCCisgNTY6IDBEMTc3MDJERENBMDc4RUQxQ0M1MUI5NURGMjlFQTEwNTNDRTk3RjY5Mzk1QzYxMworIDU3OiA5RDhDMkFEMzI3REU0M0Q1NzgyRDVGMjA4ODFGNEE4QzQzM0JBMTlBRkM4QzE1QUQKKyA1ODogMjI3QkE0MTlCNzYwRDlEMTBEQkIwOTU4NUVERDQ3NUFDMjczNEZENDUzOUY4Mjc1CisgNTk6IDJGNTIyMEE4MjhFRjk0RTMyN0JENTFENERGNUM1ODYwOUY4QTkzQjlGRTAxRkZGNgorIDYwOiAwRUVEOUY5MUUxQTMzQTUwQjhFOTEzREJBMEI1RTI0OEQyNjNFMUZDNzJDNkE0NDkKKyA2MTogNzY2QjcwN0U5OTlGRjNDNTFFRTAxMTY4NTEzQkEwRENFRkVBQjIyMkREMUY2OUY2CisgNjI6IDg1RTY3MTA2OTRFN0MzNkEyMzQwREE2QTM3MUMwNTYwNDUwRjNENDREMzVBRDk4QworIDYzOiBENDAxRjlCMTNEMzlDMjQ0NzdDMEFFNjk3MUM3MDVDNjNDMDY3RjI5NTA4QzI5QzkKKyA2NDogMjEyREY4OUM1NzE1NTI3MDM0NEFDQ0IxOTAyN0IwQjI2QjEwNEZBMEZCQkUwRkU0CisgNjU6IDNCRURFNzY3QUE0QTc1MDdEQkVGRjgzRDFCQzMzRjY3RUJBOUM2NDk0NTA2NjIyNworIDY2OiA3OUZFRDFGQjlGMTdDNDk4MDEwOEU4NjA1QzEwRDlFMTc2QUM4RkU0RjZBNjUwNjQKKyA2NzogNDhEOUI3NjIyQUI3Rjg5NjhFRDkyNjI1NUY3OEU4Q0U0NjFFNEM5MTYyRkZFOEI3CisgNjg6IDY2MzhDODM4MzcyOTdCM0Y1M0IwRjgyNEMwODdEOUEwQjhEOUZDNjI2NTY4M0I4RgorIDY5OiAxNzQ0MjFDRjZEMzMxRkY1MTkyNEY4OTQ2RTgyNDQ1NTVDOTAyMEQzOEUzMUI2REIKKyA3MDogMDNFNDJBRkI1RkZGOUI5QzM3OTRBM0RCRUM5OUZBN0UzRjczMDVFRjA3QkQyOUVGCisgNzE6IENDQUZDNjhENEIzRUQ4ODlEQzlGMjhDQjkyMjU4MDhBNDBBQThFMEQ1Q0EzNDNGRgorIDcyOiBFODI0RjkzQjQwMjIwMTE4ODZFRkM1NDUzOUQ0RDVENTE4NjNBREEzMjlGQjRFMjIKKyA3MzogN0NGMERDMDFCMzI2Njg3NTMwRjQyMDQwQkEwRDBDRTkzMTc0NDU1RThBOTkwRDE0CisgNzQ6IDdBOEU2MTk0NzlGNEY1QzQxOEVDMDQxODA2ODUwRTY3MjNDQTU2QUZCQzNEMzJDQworIDc1OiAwODNDNUNBOTBGNEIyOTZDNDIwNDA1NTlDODI5NjE0OUQ0RUVCQUI1RUYyQ0I4MkQKKyA3NjogMzU4MUI3QUMzMkZBOEEwOTg2RkQxNEYyNzdGQjEwNkUxMTJCOTJEMThDRDY4OUJECisgNzc6IDI1OEU4MjJEOUNDMUVDQThCNTVEOTI1QkEzNjFCQTJEOUZDMjdBRjE4MUYxMzhCNAorIDc4OiBBODZDMUU4OEE2NDUxNUZBMjgxQTQ2MkQ0Njc0NTgyMzE0OTRGMTZFODM1REY4NzMKKyA3OTogNzZFN0YwNkZFOUI4QjM4OERCMDEyRjhCNEJFMkZCMzQzRjk1OTEzRURERTQ3QTI3CisgODA6IDAwMjc4QjRFNTY5MEU3MjlFQzcxMThCNUJGNjNDOUQxRUIxMjY4OTYwODkzQ0E3NQorIDgxOiA4REU3MEU2NEEzMUJBMUFGNEY1QzIzQ0Y3NzRDQ0EzMkZFOTUyRDc2QzNGREQxQjcKKyA4MjogQkJFQTcyQzg0MDc0OUJBQkFGMTQxNUZFQUMzNDM0MTFCODk1MTVCODc4NDhBMDlBCisgODM6IEM2QzNDQ0FDMUIzMzhERjExN0E2MUVDRjlBMjgwRTlCQTcwOTc4NEM3MkI3Njc3MQorIDg0OiBBRTk4MTNFRjQ0MjlFQUU3M0VBOUZEQjVFMjNEMjYzQUYxQkI4NzkyOENGNUYwNDgKKyA4NTogNjg2NDdDRDdCRkZCOEU1MzBEMjhDODY2ODVBOEQyRjY1N0VFNENENjRFREQ3RTY2CisgODY6IEFBOEMzNUIwRTc0NkFGNTY0MzVGNkM3MTFBRDA0MjM5NjZFQTQ1OTA4NzQwOTcxMworIDg3OiBBQUQ1QzBENUU5ODBCMjlCQzg4OTg1QzU0NDcxN0I4MUY1OENEQjkyM0EzNDY4RTAKKyA4ODogRjYwOTI5RDE0NzgxREU0NEVBNjA3QUFGQzBEMjVGQTFCNkVGM0M2QUEwRjhCM0Q3CisgODk6IEM0ODA4N0RDNzVFQzQzQTU0QTU5M0YyNEUxQjM1OUJCNzVDNTgxQTY1QzMxNzBEMAorIDkwOiAxMUQxMzcyRkJERkQ5RkY1MTQ2MTFBQjIwRDMxQkE2MkYxODg1NkM4RDZBRTNBRDcKKyA5MTogRjJBODA3NkI5MDE3RURBREVFRDQxRjQwOUM5RTMyRUIzQkMwOTBFQUU4OUY4NTVECisgOTI6IDcwMkZBNDdFNUJEMzVFMzQ0QjVCODdDMDA4MjEwNjMzNzIwNkNBREQzRDRENTAxNAorIDkzOiBCOUUwM0ZFRDc1MkE1NjBDM0IwMzY1RURGNUJGQzREQzdFQUM1RTRCQkI5MzczOEQKKyA5NDogM0M4NEM1MkJGNTEwNzdBNTgxOUY1NkU1QTVDMUMwNjIwOTE4MTU3OTM5MzIyMEM3CisgOTU6IEY4RUNDQTI4QTUyNTU5NEUxMzhCNTVDMDY2MTdBMDYzREY3NEZFMzQ2OUQ5ODM4MQorIDk2OiAxMDgxQzNCQUVFQzBBREY0OTgwQzJFQTY1OTNCMDkwNkRDQkVERTQ4MDU3NTQ3NzQKKyA5NzogQjUxNTJFMzlERTBCRkU4OTgyRDc4M0ZDNEYwQ0I3MTYwRUIyRDY5RjZGM0IzRTVCCisgOTg6IDZBNkI3NjBCRkIxOTY1QzcyQUM3OTNGOUMwMkZBMjFCMEYxQzM0QkQyNjQwQkI2QgorIDk5OiAxRTZEQ0JGQThCQThEOTZDMjkxMDE3NjhBNkEzOTQzM0Q1QUQ1QTUwRTA5NzA3MzAKKzEwMDogNzMzMjIyRDNBMDMzMzUxRkFGRDY4QzVDRThBNEQ4MzNCQTc0MjBENDQxMDNDQjZCCisxMDE6IEU0Q0Q3REE1OUIyMTVGMURFQUE4RkJCQTg1MEYyQzFBN0Y0QzNENDk1RkU2ODA0QQorMTAyOiA3QkU3OEM3OTA3MTM1NDU3NTRENEM3OEE5MzE4QUNBNEFBMDU4QzVDMjM1NDAxMzEKKzEwMzogQjcxQzM4MDlBNTA0QkUyRjU3QUU5RTI1QkRDQzM5MjFEQzY2NUM2NTI4OUVBNTVBCisxMDQ6IDJCOENBMzk5Nzc1MzVFQjY5MkVGQkYwREVDREE4OTcxQTg2MDRGN0ZDQkFFNzVERAorMTA1OiAzQ0M0OEI1MUU0QzVERTRGMEMyQUJFMEJFNkVFNEI2M0NDNTY0QTg3QzAxOTQzQ0QKKzEwNjogMTU3QUNERjdCNTlGQzI1OTY2Rjk3ODMyMDc1NTQzNjQ4ODI4NDBFNzI1MUVENkMxCisxMDc6IERFQTFDRkFFQ0YxOEQzNjExQ0NEMDUxNzEzMUExNkREQkM5N0ExMjkwMkREOEJBQgorMTA4OiAyQUQyRTk5MEJDRjY0ODEyODRERjQ0Qjk2MTYzMjY4N0MyRTY0REZBRTJBRTE2QzIKKzEwOTogODM4RjNBM0IyOEE1MEExMkI1NzA3NDkwQTY2MDgwRENGQTAyMzBFNTgzQjZFQjE0CisxMTA6IEM4QjIwMzE1MTIxQ0RGQjNBOTFCQzBFREYxMTg4NkYyODNDRjZDNDgwRjQ5ODYyNworMTExOiAyQjBGQjA0RjEwMEJFOUFENTFCN0Q2NEM3NjY1MUJBQjRCN0QzMUQxRDkxOTU3MTEKKzExMjogQjY0OTVCNjI1NkZGNDY0RUM0MDlBNDA5OEI2MjJFOEJEQkIxMDAzNDExODU0RkQ3CisxMTM6IDE3NDFBNzg5NDcyRTIwRTFDQzg5ODY5QTI0NzdFNEYyODA3QzIyMTgyRUE1QjIyMQorMTE0OiAwN0FEQzgyQ0IzRjI3Mzg5QTEyQjZCOUMyQjI2OEJEREZEMUQ5NDc4RDlFREEwRDcKKzExNTogRDlCRDY3NjBGQjgxOUE4QTNDRUU3NTMwM0Y4MjA4RkNBM0UxMzhCNTE3REFCOTM0CisxMTY6IDlGQ0YyMUE5MjM2QzJDMTI4NjFGRDIwRjFGQjE1QTE4N0NEN0VFNzgyMUY3MkJFNworMTE3OiA3M0QxNjU3NjlCMzREQTZGMTUxNDY0RTYxMTE1RDBFMDlBNjZGOEQwRkEwNDk3MjYKKzExODogNzQ1ODBCRkE4OEVFQTAzQzBFQUU3MjJGODE5OTdFNDAwRDlDQzI1RkEwMzExREZBCisxMTk6IEUzQzZBMzY5ODIwRTI2N0M5MzhEMjc2QTg1ODkyODA0MEM3QzI1QTgyNjUwMURDNworMTIwOiBDMjBBRDkwREIwQjhCRUUwMzM1RDA2OTI1OTk5MTA2MDk2OUVFQzlGOTM5RTRDQTcKKzEyMTogRjM3NDZGNENENkExOUNDMTM3QzVGQ0M4RjYwQTRDMEE3RjU2RDk3MTkwQjdBOUMyCisxMjI6IDYzQTNCNzlFQUYzREYzNTE4MDk2MDQ2NTA1OUMwQURFRTA2RDQ1MTc5QTU2Mjg0RgorMTIzOiA2MDZBRkQ4MzNEMDgyNjI4RDU4NjcyNDAzRUU2REIzNDhFNkY2OEQ4Q0QxOTQ3RjgKKzEyNDogNzU2N0VBOEUxMENCRjMxMkY4NDc4QjdDNTFEODdCMDBCNkNGM0RFODJCMDNEQ0U3CisxMjU6IERCQ0RDMkI5Qjg1ODlGNkM3NjE2QjU1QjA1OUIzQjNFMzhEOTdBOUU2REYxRjI5QQorMTI2OiAxNUQ5OTA5RjhENjk2ODlFN0U3OEEwREI5MjgxOTRBNTk2MjNFNzI1M0FBOUQ0MDAKKzEyNzogREUzOTU4OURDQzBDNjU0ODY3OTQzODAxOTQ2Qjk4ODhCMzQ3NTI2Mjc5Q0ExNUJECisxMjg6IDM0RkE3Qzc0RUU2N0MxRjkyQzBCRTFDRkQ0QjJGNDZBMTRGRkI5OTk2MDQ5MjVGNgorCitIYXNoOiBtZDIKKyAgMDogODM1MEU1QTNFMjRDMTUzREYyMjc1QzlGODA2OTI3NzMKKyAgMTogRUU4REJBRTNCQzYyQkRDOTRFQTYzRjY5QzFCQzI2QzkKKyAgMjogMUVBQTRGNDk0RDgxQkM1NzBGRUQ0NDQwRUYzQUMxQzMKKyAgMzogNTRDREI2RDFCRjg5MzE3MUU3ODE0REI4NERGNjNBM0EKKyAgNDogRjcxQTgyRjgwODNDRDlBQkEzRDBENjUxRTI1NzdFREEKKyAgNTogMkY3MDgzMzREQkQxRkU4RjcxQ0VFNzdFNTRCNDcwRjkKKyAgNjogRTAxNERGMkRGNDM0OTg0OTUwNTZFN0E0Mzc0NzZBMzQKKyAgNzogOUM0MTA2NDQ0NDY0MDBCMEYyQzFCNDY5N0M0NDNFMTkKKyAgODogMDk0NERFQzQwMzY3QUM4NTUxMTcwMTIyMDQwMThDOUYKKyAgOTogQ0U4QTZFNzk3QUM3OUQ4MkQyQzZEMTUxRjc0MENCMzMKKyAxMDogMDZEQjRDMzEwNTcwMjY4NzU0MTE0Rjc0N0UxRjA5NDYKKyAxMTogOUYzMjNENUZDNkRBODYzMDdCRUJDMDM3MUE3MzM3ODcKKyAxMjogM0MxQzdFNzQxNzk0RDNENDAyMkRFMTdGQ0U3MkIyODMKKyAxMzogMDM1RDcxQUE5NkY3ODJBOUVCOEQ0MzFFNDMxNjcyRUUKKyAxNDogN0FCRTQwNjdFRDZDQTQyQzc5QjU0MjgyOTQzNDU1OUMKKyAxNTogNUU4RDBENkY2RjhFMDdDMjI2QUU5REQzMjYwOTAzNUEKKyAxNjogMkIxNjMyRkY0ODdENkM5OEFBMzc3M0I5RDNGQ0QyQUIKKyAxNzogRDNEODk0NDgyRjc1NDFCQzA5NDhCMTk4NDJCNDc5RDkKKyAxODogQ0ZFNkI4NzJBQzk4MzA0NTI0Q0M2QTg4QjZDNDU4ODEKKyAxOTogMTU3M0REMDE1Qzg2MjlERTk2NjRDQTA3MjE0NzM4ODgKKyAyMDogQUNGRTJEM0JCM0NDQUQ4QUVGNkUzN0QwRDhGQkQ2MzQKKyAyMTogRjVGODM0OTlBQTE3MkJFODM0NEY3RjM5QkE3MDhBQUEKKyAyMjogMUQxQzcxRkY2MzIxQjY4NUQyNkY3RkE2MjBEQTZDMjIKKyAyMzogNEQ3RTc0QjZDODMyMTc3NUEzNEY3RUZGMzhBQUU1REYKKyAyNDogMzUxQTk4OEM4NkFDNUExMEQwQUI4RTkwNzE3OTUxODEKKyAyNTogOTcwRjUxMUMxMkU5Q0NENTI2RUZGODU3NENGMTQ2N0YKKyAyNjogMEE2OEY1M0E0NzZGNzQ5OUVGNzkyNzhBNEVFOERBQTMKKyAyNzogRDQ1OENGOUM4Q0QwQUJBMjNCRDlBOEM1QUJFNDk1Q0UKKyAyODogQzgwMDJFODVDM0FEOUI4QjRBRkQyMzM3ODE2NUM1NEIKKyAyOTogMEI0Nzg4QjE1N0VEMTUwQTM0RDBFNkU5NkJCNDc4OUMKKyAzMDogQjE0RjRFMzFERTA5MjgxRTA3MjQ4QTE3OTM5QkU1QjkKKyAzMTogODAzRUVCOTkyMzE1MjZENkEzM0M4RDRGQ0E1MzdBNkYKKyAzMjogNTFGRTVENjYzN0QyRjBGMDlFNDhDRTJBN0Y1MDMwRUEKKworSGFzaDogbWQ0CisgIDA6IDMxRDZDRkUwRDE2QUU5MzFCNzNDNTlEN0UwQzA4OUMwCisgIDE6IDQ3QzYxQTBGQTg3MzhCQTc3MzA4QThBNjAwRjg4RTRCCisgIDI6IDlFN0ExRERFNEQyODBFN0YzODkwMThBNUNDQzNBQkYyCisgIDM6IEU5QTREQjI5MjNGQUY2MzRDQkIxMkNDMUY4QUM1QzY2CisgIDQ6IERGOEZBMDY5QzYxMjE4MDFGRkM1MzlEQUREMzNGQ0I5CisgIDU6IDRCMzUxMTMwOEY3RTcxQkY2NDYyQ0YxOEYxMTg0QzYxCisgIDY6IDA3NTU4MkE1MUY4NzY4MjkxOUU3MzNDODRDOUZEOTk4CisgIDc6IDIwRERBNzUzNUE0NjREMTNFMTc2M0JBNjFCREMxMkFDCisgIDg6IDY2QUUxRTMwNUJFRDE4Njc4MEJCNjAzMjhEM0NDQkM1CisgIDk6IDUwM0U5MEJGMjM3NTYyNzI2MkU1OEQ5MDE3NzIyMEY4CisgMTA6IEFFQzZCNDhDMTA2NTlFM0Q2RTE4QTJDREU4RjhEM0EwCisgMTE6IDQ1RUZCMzcwNEI2Njg0QjA3NTBFM0RFREJCMkJDREE5CisgMTI6IDdDOTQ0M0RCQ0Q4NTgxMzhFMzI2MDRFMEQyODhGN0I4CisgMTM6IDk1RTVCOTNGNEVBNzlDMDgyQkExNzQ1RDMwMjZENzBBCisgMTQ6IEM5MTNENURFMEJCRDFDMkYyODM4RTQ2MzYzNzMyRDk3CisgMTU6IEFCRTM1N0JEQzQxM0M4MkM4QkJBQTM4MEMzOUNCNUY5CisgMTY6IDIyRjg0MDM3MEVCQjFEREJFQTRGQTNBNDAyNDMzOTFFCisgMTc6IDBBMjg5RkVDNjlBRjk2Nzk4OEZBNDBDNDc5NjAwNjBCCisgMTg6IEI2M0QzQURGMTNCNTA5Qzk1QzA4OEY5MDlBMEIzNTZFCisgMTk6IDM2RThFMDdFMzIwMkU2RjRGN0U4ODU4NTNDOTczNUM3CisgMjA6IDFEMzYzQUZEMTIwOEE3QjhCRDQ4NkQ1MUFFQkZBRUI4CisgMjE6IDc1RTM2QTU0NDVBRDcyQ0Y1QkY0NzMwMUVCRUQxRkRGCisgMjI6IERBNzk3OTY4OEY0OEE2NjA2RDg2Qzc2MkRGMEQ4ODUwCisgMjM6IDZBQ0IzMjVDRTYyNDM3Mjg3M0NDMDFBNEFBMDUzRjhFCisgMjQ6IDk0RjlCRkQ2NTAzREJEQzU4QzE2M0UzMzUwNEI3RURCCisgMjU6IDM3MDJDQjI5Njc4NDI5MEZDNDZCODI0NDVCRjdFQjE3CisgMjY6IDkwMzUxMDI1MUU3QTAwNDE1RUEyMUI2QUMyNjhBOTJECisgMjc6IDZERjA4REI5QzMzQzg2Q0ZFOERBRjVFNUJCODY1RUNFCisgMjg6IEMyOUM1MjIzRDg5QTY1ODlERTkyNTNBRjA1MEQzNDQ5CisgMjk6IDE2QjkzNUFDQzNFQzZDMDE2Q0ExQkJGNzI3QzI3MkI5CisgMzA6IDY0NEMwMUIxNTdBMjQ1ODRCMDJBMzIxMTlBNDI0QzAxCisgMzE6IDRBM0M2QzczNjM0NzU5NDIwQzQxOTQyNkY3RDQzRTY3CisgMzI6IDdCRDYyN0E2QjgyRkYzRDc5N0ZGRjEzMEQ4OTU2MzkxCisgMzM6IDgxMUE2OUQ2QThBRkUzQzRGRTVCNEVGRDczODA0RjZFCisgMzQ6IDcyMUJFNUY0QkRERUQ4ODVCRkY4NDI4NjhGNjJGNEVECisgMzU6IDc2OTU2ODcxQjIyRDVCRUNBRDNFOUE0NTlCNEE0NDhCCisgMzY6IDRGMkNGMzcyNzcxQTEzQjRDMEMxQTU4OUYwRURDRjg3CisgMzc6IDA4NEFGQkFFOEQyMkRGODNDQzc2MEE2MTEzOEU1NjBBCisgMzg6IEUxQ0ExMjNFQkEwNUNDNDg5OTczMUE1OTM4MzNGMzcyCisgMzk6IDlEOUUyNzdGQTYxOTkzQzAxOEMxQzYxQUUwOTU4OEJDCisgNDA6IDg1RTBEMDMxNkYwQjc2NTc4OTQ4ODEwMDM5RURFMkJBCisgNDE6IDI3NzM2MzQ1RDBGMkIwQTFBOTU3NkQxN0M0N0QwMjAyCisgNDI6IERDOUY3ODhCRTdDOTdCQjVFMEQyREQ0OUI5RjFEMkRDCisgNDM6IDI3RjFBOUEwRDE2NkM0OTU0OTM4NzdERjA2RTlDMTA0CisgNDQ6IEQxQUNBNzk1MTg2NkY1ODc3M0NENEFGQTNEMkY1QzJFCisgNDU6IDUyMDRCRTM3MjlCRDdEMzE4RUE4MTI3QkVEODJENUNDCisgNDY6IDEwMjU4Qjc5MzlEODFGNUY4RTBFQTcwRUU2NTAwQjA4CisgNDc6IDRFNjk5OTUyMTY5MDk4RUQzMDg0REMyRUVFN0JDNDg4CisgNDg6IERGNkVEOEQ2MDQ1MTIwODhGQ0VBRkIyMTgwOEJGN0QwCisgNDk6IDkwNEQwNjY3Qzk0QzlDOTgxRDU5QkU4MERFRUVFNjI4CisgNTA6IEQ4MzQ4M0E0N0I2NEQ3NEY5REVENTI3OEVFNDYyNDA0CisgNTE6IDQ5MEVDODc5OUE5REUzQkRFODcwOERBRjY4RTY4ODhFCisgNTI6IDQ0M0U0RDJENUY4MDBDMjJEODE4OTI3QTI5QTM4NDkwCisgNTM6IDQ4RTgyQUE3NzJFMTExRkNCRTM5MzE3N0YzMTIzOTYzCisgNTQ6IEI3MjY4NUQwNDIxNjJENUYzMDQ3MjI4MTI3OEM0MkY3CisgNTU6IENDOEE3RjJCRDYwOEUzRUVFQ0I3RjEyMUQxM0JFQTU1CisgNTY6IEI4RTk0QjY0MDhCQkZBNkVDOTgwNUJGMjFCQzA1Q0JECisgNTc6IDZBRUM4NTQxMDQxMkZGNTQwNzhBOUZDNzJBNTVBQ0U1CisgNTg6IDNFNjlGNzkyQkU4ODQ3ODg4M0U0NkU4NjdGM0M5M0VCCisgNTk6IDNCMDU3RkM0MUJBNzAwRjBFNDY3NDBCOEZGMzkxRjUyCisgNjA6IDNFM0M2REY5NTAwQkZGODQwNDQ4NkEzQUVGQzZGMTZECisgNjE6IEY1QUQ2NUJBOTcwQUNCQkI4MzM1RjlDMEI5RDcxMzlGCisgNjI6IDc1RDQ1RjhFNDg0MDZFMzJBQkY5NEQwN0ZGOUI5Qzg0CisgNjM6IDU0QkE0NDcyRkNEMDNFOTlDRjI4RjkwRUVEOUYyQUUwCisgNjQ6IDJERTY1NzhGMEU3ODk4RkExN0FDRDg0Qjc5Njg1RDNBCisgNjU6IDNBNEYyQ0EzN0VFQkRGNkRDOTlBNjE1NTUxN0I3NEZDCisgNjY6IEUxOURDNDYzQzAxRTFCNzEyQjk0MTUyMDJBMkI1NTA1CisgNjc6IDYxRDhBQTA4MzhERUFFRUFERTJGMjYxNTZBRjU4NzYxCisgNjg6IEJFMjk0QUZGODFCRkVBMzE1OTU2NEI4QjYxODQ0RUZFCisgNjk6IEJCOTQzMzE5MzIwRUU3QjNBMDI5RDdCQ0QxMDFGOTJGCisgNzA6IDM2MjM5NzkxQTdCRTMzQUQ0NkY2NjhCNTFENzI0NDgxCisgNzE6IDIxRENDOUEzMjAzMTQyOEI3QjAyRjY4RTE0NTBBMEYzCisgNzI6IDk1QzFCMDgzMjU3NUUyMTk4MkIxN0NDQ0NBRjU0NTU2CisgNzM6IDI0OTM5RTI1OTg1QTNCNTYyMEIxOUQ3ODg5RTVFMTUzCisgNzQ6IDMwMjlDOEIwMDUzODY3MDVGRTdFNENCQUEwNjBFOTg3CisgNzU6IEU4QkQ5N0M1QzFBMENDOUFEMUYxQkVCMzkxM0IyMkZGCisgNzY6IDgwOEVCQ0EwQjBFNkZEMUIzMEU0QkE0OTlDMDVFRjlCCisgNzc6IDU1QkQyMEFCODdERTJFNTM2RERFMjIyODZEMDkyMkQ5CisgNzg6IDJCMkU0NUZBNTYyOEYyOURBMDY0NjIzNzhEMTdERDEyCisgNzk6IEI5MEYxNzA5MjQxRUY1OUY3ODY2NkFFQkIzRDU2MDdDCisgODA6IDM3ODU0Mjc1MzQzRjA3OUJDRTE2MzlDODRENzRBRTFDCisgODE6IDQ0NEFCNUE0RjM5Qjc2NUM1RDY3QkI0MzNENENGMEIxCisgODI6IDdFMzBDRkE2MzYzRjlBQzk2NjA3NzgzNzEwRTE1MUI5CisgODM6IDlEOTI1MkRGRkIyRDUwMjNDRkUzNDg3M0VBNkM0M0FFCisgODQ6IDQ5QTcwNjM0QUZDRUQyN0RDMkRGMkVCMDc5RjdBMUU2CisgODU6IDRDOTc2QzlFRjEzNzE2Q0NCNDY4RDgyQkQ4QzU2RkUyCisgODY6IDRFQjM4MkQxNkREQzE4QzMxRTZEQkFDNkNBODMyNDdECisgODc6IEIxNjExMkQwRkYzQzZBOEFEQjE5QzEzREY3NDJGNUQxCisgODg6IEY3MDNEQzYxMDBBRTIzRDE5NEUwMUVBQzQzM0NGMjhCCisgODk6IEE2NTI3QjFCOTA3MjE4MDYzQkYxOTZBQTkxQzczRjQ3CisgOTA6IDYxRjFBMUU5NDdGM0Y1NDJGQ0Y4NUFDNzU4QkE1RDE0CisgOTE6IDEyQURERURDRTQxOEU5NDQ0QUUzNEE0MDM1M0VEMEVCCisgOTI6IEQxQzM1MTQyQzQ3NUQ0NEE1MkNFQjBBOEZBRUE3QUFCCisgOTM6IDFGODk5MTJDMUZDNTlBQUI1M0M5ODNCMDM1NjYxMjY5CisgOTQ6IDJFN0UxOUE0QTY2MzVBQjU5NThEREE3MEI0MTVFQjA2CisgOTU6IEI3MDBCNjczOUMwQUYxNjJEMjQ2QUYwNzI4NEExQUU4CisgOTY6IEUyQjk1QUM5Rjg3NkEzOEQzM0NDQkJEN0ZBOTJENjdFCisgOTc6IEFFQjQ4NDk5NTM3NTBBMTBCQjIzNkJBQzhENUFCNDg3CisgOTg6IDgyRDczOEFGMThGRDRCMjZGRkY2MTM3N0VFOTIxRTYyCisgOTk6IDBFMTQ1MTY0MEU1OUNFMDQ2MUE0NjkzNEYxNzRFMjM3CisxMDA6IEFFMDZFQTY0MDc0RThDMDcxMTY1NjNFOEUwODkzQkRDCisxMDE6IDU2MkRDRUI2NzhGQkZBQjI0MTQxRTU5MUZGRDQ3MUIxCisxMDI6IDdERDZDM0MyODg0RTQ4M0U4Q0E1NzJDNDcxQjJEODEyCisxMDM6IDJBNEM4RTRFQzI2NzJDMUQ1NEE4REE4RjMyRjA0NzgzCisxMDQ6IDJCRkVEMjJFODgxMEE0NjU4MDYwQjk1QjBBREI2MEJDCisxMDU6IDIxNEQ4RjJERDA5OUJBQjY4RUMxNzE4OUJGRjhBOEVGCisxMDY6IDk4RTRFQjI5Nzk3QzhFNjMxQ0Q0MzE3QUY0MjJGQjA1CisxMDc6IDI0MUEwRjgyNkYzNTlBMjFDQTBFNkQ5MTU0RDFFMjkxCisxMDg6IEEzMzk4QzAxMThBMzYwNUU3QTc3OTRCOERGN0NBMTUyCisxMDk6IDVCMEE2RkM4NzIxRjE0RUI4QTAzRTlBNUQ4N0YxNzNCCisxMTA6IEQ5M0FCRUMzRUJENTY3MjM1MEMzQzM2RjhGQjAwRTUzCisxMTE6IDY1OTkwNTc1MUQxRjYxNEE3OEVDQkI1NkQ0Mzk4RDA2CisxMTI6IDU5NDY5MUIzODEyNkUwMjgzNTJEQTVCMjhBREZENDE2CisxMTM6IDc1MzNGQkQxRkQ1OEM4NUQ1NEE3MTJFRjIxOEE5RDUzCisxMTQ6IDY1NDc5NkU3RDJGOUYyQzJEMTY2RjIzQjVBQjE4ODEyCisxMTU6IDVEMjVCNjA0RkI3NTcyN0FFN0VCRkY5ODBGNTREOTZBCisxMTY6IDQyNkE3NzA5Q0Q2MUVCNkVDRjQwMzRFQzgzRTA3M0VDCisxMTc6IDYyRTIxQ0EyRjhFMzlDMDNCRkY1NkM4MjY1QUNCNjBBCisxMTg6IEI3QzlEQUFBODlBMjlGMjgwNURFREU3OTBEQ0I5NTc1CisxMTk6IDlDMTA2NzE3MDk0MENFOEY4RTQ3NDVEMzYyNjc1RkFCCisxMjA6IEM1QkIzNTY2MEUzRDBBMjg2QTk2RUEzQUE0OTIyQjNDCisxMjE6IDhGM0I2MzUxNjIzQTBFNDgyQjU3NTI1NDc0REM3MDNBCisxMjI6IENDQzM0Q0MyODAzNDA2ODFDQTUxMTc0NzdERDg2QUU4CisxMjM6IDJGNUZCNkI0MTMwMUY4N0EwNDkwMDM1REU0QzFCQjk5CisxMjQ6IEExNkUyOERCM0YzMzEwOTFFOTI4RjlBRTNGMUFDRUI2CisxMjU6IDdEMjI1OUM5ODA4NUI5QkY3RjVFMzZCMjlERjgzODRBCisxMjY6IEJEREExMjY2RkYzRThGRkJBMURFMUIyNzU5QjU4QkNDCisxMjc6IDIwNjc4ODZEQTRCREUxMEE5NEI5NzFDRDc0MEIwQUFCCisxMjg6IEUxMjc1OTcwRUI2N0QyRDk5NkU2RTY1ODI3MEFBMTQ5CisKK0hhc2g6IG1kNQorICAwOiBENDFEOENEOThGMDBCMjA0RTk4MDA5OThFQ0Y4NDI3RQorICAxOiA5M0I4ODVBREZFMERBMDg5Q0RGNjM0OTA0RkQ1OUY3MQorICAyOiA0NDEwNzdDQzlFNTc1NTRERDQ3NkJERkI4QjhCODEwMgorICAzOiBCOTVGNjdGNjFFQkIwMzYxOTYyMkQ3OThGNDVGQzJEMworICA0OiAzN0I1OUFGRDU5MjcyNUY5MzA1RTQ4NEE1RDdGNTE2OAorICA1OiBEMDUzNzREQzM4MUQ5QjUyODA2NDQ2QTcxQzhFNzlCMQorICA2OiBEMTVBRTUzOTMxODgwRkQ3QjcyNERENzg4OEI0QjRFRAorICA3OiA5QUE0NjFFMUVDQTQwODZGOTIzMEFBNDlDOTBCMEM2MQorICA4OiAzNjc3NTA5NzUxQ0NGNjE1MzkxNzREMkI5NjM1QTdCRgorICA5OiBBNkU3RDNCNDZGREZBRjBCREUyQTFGODMyQTAwRDJERQorIDEwOiBDNTZCRDU0ODBGNkU1NDEzQ0I2MkEwQUQ5NjY2NjEzQQorIDExOiA1Qjg2RkE4QUQ4RjQzNTdFQTQxNzIxNDE4MjE3N0JFOAorIDEyOiA1MEE3M0Q3MDEzRTk4MDNFM0IyMDg4OEY4RkNBRkIxNQorIDEzOiBCMjBENDc5N0UyM0VFQTNFQTU3Nzg5NzBEMkUyMjZGMworIDE0OiBBQTU0MUU2MDFCN0I5REREMDUwNEQxOTg2NjM1MEQ0RQorIDE1OiA1OEI3Q0U0OTNBQzk5QzY2MDU4NTM4REFDQjFFM0M5NAorIDE2OiAxQUMxRUYwMUU5NkNBRjFCRTBEMzI5MzMxQTRGQzJBOAorIDE3OiAxQkREMzZCMEEwMjRDOTBEQjM4MzUxMjYwNzI5MzY5MgorIDE4OiA2MzNBQjgxQUVBNTk0MjA1MkI3OTQ1MjRFMUEyODQ3NworIDE5OiAyRDMyNTMxM0VCNURGNDM2QzA3ODQzNUZBMEY1RUZGMQorIDIwOiAxNTQ5RDFBQUUyMDIxNEUwNjVBQjRCNzZBQUFDODlBOAorIDIxOiA3RTQzN0M4MTgyNEQzOTgyRTcwQzg4QjVEQThFQTk0QgorIDIyOiAyRjVGN0U3MjE2ODMyQUUxOUMzNTMwMjM2MThBMzVBOAorIDIzOiA2NTM1RTUyNTA2QzI3RUFBMTAzMzg5MUZGNEYzQTc0RQorIDI0OiA4QkQ5QzhFRkJCQUM1ODc0ODk1MUNBNUE0NUNGRDM4NgorIDI1OiBEOTgzQzYzQkY0MTg1MzA1Njc4N0ZFMUJCNzY0REJGRgorIDI2OiBCNEYyNEMxMjE5RkIwMEQwODFDNDAyMEM1NjI2MzQ1MQorIDI3OiBCMEFFNjcwOEM1RTFCRTEwNjY4RjU3RDM5MTZDRjQyMworIDI4OiBCQTdCQjVBRDREQkE1QkRFMDI4NzAzMDA3OTY5Q0IyNQorIDI5OiBFQTg4MEUxNkVBQzFCMTQ4OEFGRjhBMjVEMTFENjI3MQorIDMwOiBDNzE3MkYwOTAzQzQ5MTlFQjIzMkYxOEFCN0EzMEM0MgorIDMxOiBFOUU3Nzg5M0JBOTI2RTczMkY0ODMyODJGNDE2RkZBQworIDMyOiBCNEZGQ0IyMzczN0NFQzMxNUE0QTREMUFBMkE2MjBDRQorIDMzOiA1NTA2QTI3NkEwQTlBQ0MzMDkzRjkxNjlDNzNDRjhDNQorIDM0OiBFNUE4NDk4OTdEOUNDMEIyNUIyODZDMUYwQkZCNTBFMworIDM1OiBGNTRGQTMwRUE3QjI2RDNFMTFDNTREM0M4NDUxQkNGMAorIDM2OiAwNzYwMkZFMDIyOUU0ODY5NTcwODFBNDlFM0YwNkY4MworIDM3OiA3QzRCQkE5ODI1M0NBODM0QkY5RUQ0M0ZEOEIyRjk1OQorIDM4OiBDRjhERjQyNzU0OEJCRkRCMUUxMTE0M0ZERjAwOEI4NQorIDM5OiAxNDMxQTY4OTVBOEY0MzU3NTUzOTVGOUJBODNFNzZCRgorIDQwOiAzMERENUU0Q0FFMzVCQTg5MkNDNjZENzczNjcyMzk4MAorIDQxOiA4RUUyNDdBMTA2MzkzMUJFREFGNEMyRkEzRTRFMjYxQQorIDQyOiBDMzJDRUVFMkQyMjQ1REY4NTg5Rjk0RkNEQTBDOUYyQworIDQzOiBGMjVGQTBFMDcxRDFGMUNEQzY2MzJDNkI2NzNCQ0NENQorIDQ0OiAzNzA0OTFCNjQzRTk3NTc3RjRGNzRCRDg4NTc2RDFFQworIDQ1OiBCMjkyQkYxNkUzQUFGQUY0MUYxOUM5MjEwNjgyMTRGOAorIDQ2OiA1MjkyMUFBRTVDQ0M5QjZFOEU0NTg1MzQxOUQwQzgwRgorIDQ3OiBGMTM3NUJFMzE5NjkxNTVFRjc2RjA0NzQxQ0Q4NjFENworIDQ4OiAwNDYwNUNBNTQyQjJEODJCOTg4NkE0QjRCOUFDRkIxQworIDQ5OiBGQTg4N0JBMEZBNDkxRkFBQUNCQjgyQkM1RkVGQ0Q1QgorIDUwOiAwNjQ3MEU5MzJBRDdDN0NFREY1NDhCNUNDQjlENDgwNgorIDUxOiBBRDEzMEIyNDVFMkREODk0MjY3Q0IwRERDNTMyRDE2OQorIDUyOiBBOUVFQjk1MDUzNjgyMjQ4NjA4RTk3RDc5RTg5Q0E4MgorIDUzOiBDQzI2QTNEQzYwODI2OEI5OEVDRDFGMzk0NkM0QjcxOAorIDU0OiAzM0RENjJBMkRGNjUzOERBRjFDRjgyMUQ5Q0RFNjFGOQorIDU1OiA2OTEyRUU2NUZGRjJEOUY5Q0UyNTA4Q0RERjhCQ0RBMAorIDU2OiA1MUZERDFBQ0RBNzI0MDVERkRGQTAzRkNCODU4OTZENworIDU3OiA1MzIwRUY0QzE3RUYzNEEwQ0YyREI3NjMzMzhEMjVFQgorIDU4OiA5RjRGNDFCNUNERTg4NUY5NENGQzBFMDZFNzhGOTI5RAorIDU5OiBFMzk5NjVCQzAwRUNBQ0Q5MEZEODc1Rjc3RUZGNDk5QQorIDYwOiA2M0VENzIwOTNBRTA5RTJDODU1M0VFMDY5RTYzRDcwMgorIDYxOiAwRDA4RkMxNEFDNUJBQTM3NzkyMzc3MzU1REJBRDBBRQorIDYyOiBGM0NERkZFMkUxNjBBMDYxNzU0QTA2REFGQ0ZENjg4QgorIDYzOiA0OEE2Mjk1MjIxOTAyRThFMDkzOEY3NzNBNzE4NUU3MgorIDY0OiBCMkQzRjU2QkMxOTdGRDk4NUQ1OTY1MDc5QjVFNzE0OAorIDY1OiA4QkQ3MDUzODAxQzc2ODQyMEZBRjgxNkZBREJBOTcxQworIDY2OiBFNThCMzI2MUE0NjdGMDJCQTUxQjIxNUMwMTNERjRDMworIDY3OiA3MzA2MjIzNEI1NTc1NEMzMzgzNDgwRDVFRjcwRENFNQorIDY4OiBGNzUyRUJENzlBODEzRUYyN0MzNUJFRDY5RTJFRTY5RgorIDY5OiAxMDkwNzg0NkVCODlFRjVEQzVENDkzNUEwOURBRDBFNworIDcwOiA1RjFGNUY2NEI4NDQwMEZCOUFENkQ4RUNEOUMxNDJBMAorIDcxOiAzMTU3RDdCQjk4QTIwMkI1MENGMEM0MzdBQTIxNkMzOQorIDcyOiA3MEU3QURFNzAyODFCMEFGQ0IxRDRFRDEzRUZDMkUyNQorIDczOiAwQkI5NkE1MDNCMTYyNkM5QUIxNkMxMjkxQzY2M0U3NQorIDc0OiA1QkVENDEyNkIzQzk3M0Y2ODVGQ0Y5MkE3MzhENERBQgorIDc1OiA3NTIzQzI0MEYyQTQ0RTg2REQyMjUwNENBNDlGMDk4RAorIDc2OiA2NzEwOTQ5RUQ4QUUxN0M0NEZCNzc0OTZCRURDQjJBQgorIDc3OiA0QTRDNDMzNzNCOUU0MDAzNUU2RTQwQ0JBMjI3Q0UwQgorIDc4OiA5MTk3N0NCQ0MzMkNERUFFQzdBMEZBMjRCQjk0OEQ2QQorIDc5OiBBNkEwRjEzNzNDRjNEQkVFMTE2REYyNzM4RDZGNTQ0RAorIDgwOiA3NjFGNkQwMDdGNkU1QzY0QzhEMTYxQTVDRUQ0RTBBQQorIDgxOiBENDRFQTRENUE3MDc0Qjg4ODgzQTgyRjJCNENGQkU2NworIDgyOiAzMDk3RURBNTY2NkUyQjI3MjNFODk0OUZDRkYyRjI0NAorIDgzOiBBQjI0N0EzRDlCQzYwMEY1OTRENUE2QzUwQjgwNTgzRgorIDg0OiBCMjI5NDMwRTNEQjJERkREMTNBQTFEQTFCQUMxNEQ1QworIDg1OiBCRUZFRjYyOTg3QzZEQ0RGMjRGRUJEMEJCN0NEMzY3OAorIDg2OiBCRkMzRTVDN0M0NjE1MDBGRjA4NUE2NjU0ODM3OEUwRQorIDg3OiBBNTcxMjE5NDUzN0M3NUYwREQ1QTVBQjNFOUVCQUYwMworIDg4OiA4REFBQzA5N0U5MDQ0Qjg1Qjc1OTk5RDZDM0JDQ0QyNAorIDg5OiBCODEyNERGMjExMjk2ODU1OTdDNTNBM0Y2MDZGRkQyOAorIDkwOiA4RkJDNEQ3OTVDMjJEOTU4MjQ4NTgyQThERjczMzJFRAorIDkxOiAzNkQyMTcxMzVEQjEzNkIyQkRGMTYxN0Q3RTlDNzlDRQorIDkyOiAxQjNFNjI3MUEzQTRCNjYzQzUwOUExMjU1MDI3Q0E5OQorIDkzOiBBMjVGNTk2NTc0MDMxRkY5QzM0MzE0QzFCMUY2QkYzNAorIDk0OiBBQ0E3MDE3RTVCQjYyQkZERDVCQkZERUQ3OEM4OTg3QQorIDk1OiA4MTI5RTUzQTY5NEFERDA1NjBCMTUzNEIzMkZFNTkxMgorIDk2OiBEQTBFNDgyMjQxMDZDNzUzNUE0Q0Q4REIyQUM3QjhFMworIDk3OiBDQkQ0QUNFM0Q3NjZEOEU0NEY2M0UwREU4RjExMEYwNAorIDk4OiBCREMxN0EwRUYyNzc3NTEyQ0I0MDJDOTBFOUQxM0UzMQorIDk5OiA0NzY5NUFENkFGOTY4RDZGMUNERDJEOEM1Qzg3QTQ2NgorMTAwOiA3QUNFREQxQTg0QTRDRkNCNkU3QTE2MDAzMjQyOTQ1RQorMTAxOiAyMjU0ODlEM0QwNzNBQzcwNUY3QjNBRDM1OEVBQkFCMgorMTAyOiAzMDFEQTg3QTdCMkVDMjc1MTRDM0EyNzg5RDVEQkU0OQorMTAzOiAxNjIyMkM1MDM3MThGMTQyMDk1ODEzM0MzMzBGRTNGOAorMTA0OiBENzc4Q0U3RjY0MkFBMjMzNTU5NDg0NzdEQTRDQzExQworMTA1OiBFODczQzM3Rjg5NzdFMjAwQTU5NEI4MTVFMUE4N0VGMworMTA2OiBFOEY4RjQxNTI4RDRGODU1RDhGREY0MDU1QkJBQkUyRgorMTA3OiBDQUNGM0QzRDFFN0QyMUM5N0QyNjVGNjREOTg2NEI3NQorMTA4OiA2QkY0OEYxNjFFRkY5RjcwMDVCRDY2NjdGMzBBNUMyNworMTA5OiA0MkU3QkI4RTc4MEIzQjI2NjE2RUNCQ0FDRTgxRkExQQorMTEwOiAyMjVBRkQ4RUMyMUY4NkY2NjIxMUFERjU0QUZDMkU4NgorMTExOiA0RkFEM0FCN0Q4NTQ2ODUxRUMxQkI2M0VBN0U2RjVBOAorMTEyOiBEMUZFQzJBQzM3MTVFNzkxQ0E1RjQ4OUYzMDAzODFCMworMTEzOiBGNjI4MDdDOTk1NzM1QjQ0Njk5QkI4MTc5MTAwQ0U4NworMTE0OiA1NDA1MEIwOTAzNDRFMzI4NEYzOTA4MDZGRjcxNjM3MQorMTE1OiA1MDQ4MjI0MTI4MDU0M0I4OEY3QUYzRkMxM0Q2NUM2NQorMTE2OiA0QzM2RjI3RDQ3ODZGRTJGQjhDQUFDNjkwQjZENjJGNworMTE3OiA1QTBFREYwQjk3OTc3RUU1QUZCM0QxODVCNjRGQjYxMAorMTE4OiA0NTQxMDU1QzY2NzVCNjE0RDI3QzUzN0MzQkIxNTY3NQorMTE5OiAxQzc3MjI1MTg5OUE3RkYwMDc0MDBCODg4RDZCMjA0MgorMTIwOiBCN0JBMUVGQzYwMjJFOUVEMjcyRjAwQjg4MzFFMjZFNgorMTIxOiBCMEIyRDcxOUE4MzhEQjg3N0I2RDY1NzFBMzlBMUNEQworMTIyOiA4MDBBQTk1NkVDMTZGNjAzRUNEQkE2NkMyREM2RTRDRgorMTIzOiA4ODI3RDI3NzgyODdDNThBMjQyQUNENEM1NDlCRUIzMQorMTI0OiBDRkJDNUFBMEI2MTEwM0MxQTk4MkQ4OTI3QjI2RjU3NQorMTI1OiBBMUY1QjY5MUY3NEY1NjZBMkJFMTc2NTczMTA4NEY4QQorMTI2OiA4MDc0OUJFMDNGNTcyNEZBNENBMEFFRjg5MDkzNzlCNworMTI3OiA4NDAyQjIxRTdCQzc5MDY0OTNCQUUwREFDMDE3RjFGOQorMTI4OiAzN0VGRjAxODY2QkEzRjUzODQyMUIzMEI3Q0JFRkNBQworCitIYXNoOiBzaGExCisgIDA6IERBMzlBM0VFNUU2QjRCMEQzMjU1QkZFRjk1NjAxODkwQUZEODA3MDkKKyAgMTogNUJBOTNDOURCMENGRjkzRjUyQjUyMUQ3NDIwRTQzRjZFREEyNzg0RgorICAyOiAzRjI5NTQ2NDUzNjc4Qjg1NTkzMUMxNzRBOTdENkMwODk0QjhGNTQ2CisgIDM6IDBDN0E2MjNGRDJCQkMwNUIwNjQyM0JFMzU5RTQwMjFEMzZFNzIxQUQKKyAgNDogQTAyQTA1QjAyNUI5MjhDMDM5Q0YxQUU3RThFRTA0RTdDMTkwQzBEQgorICA1OiAxQ0YyNTE0NzJENTlGOEZBREVCM0FCMjU4RTkwOTk5RDg0OTFCRTE5CisgIDY6IDg2ODQ2MEQ5OEQwOUQ4QkJCOTNEN0I2Q0REMTVDQzdGQkVDNjc2QjkKKyAgNzogNkRDODZGMTFCOENEQkU4NzlCRjhCQTM4MzI0OTlDMkY5M0M3MjlCQQorICA4OiA2NzQyM0VCRkE4NDU0RjE5QUM2RjQ2ODZENkMwREM3MzFBM0RERDZCCisgIDk6IDYzQkY2MEM3MTA1QTA3QTJCMTI1QkJGODlFNjFBQkRBQkM2OTc4QzIKKyAxMDogNDk0MTc5NzE0QTZDRDYyNzIzOURGRURFREYyREU5RUY5OTRDQUYwMworIDExOiAyQzdFN0MzODRGNzgyOTY5NDI4MkIxRTNBNjIxNkRFRjgwODJEMDU1CisgMTI6IENGRjk2MTFDQjlBQTQyMkExNkQ5QkVFRTNBNzUzMTlDRTUzOTU5MTIKKyAxMzogRTUxRjk3OTlDNEEyMUJCQTI1NUNGNDczQkFGOTVBODlFMUI4NjE4MAorIDE0OiBGNzQxNjQ0QkE2RTFCQ0Y1RkVFNkQzQzFCNjE3N0I3ODQ2OEVDRTk5CisgMTU6IEZCMUQ5MjQxRjY3ODI3Q0U2REQ3QUM1NUYxRTNDNEU0RjUwQ0FBMDMKKyAxNjogNTYxNzhCODZBNTdGQUMyMjg5OUE5OTY0MTg1QzJDQzk2RTdEQTU4OQorIDE3OiAwQTAzMTVFQzdCMUUyMkE3OUZDODYyRURGNzlCREEyRkMwMTY2OUUzCisgMTg6IDMyQUY4QTYxOUMyNTY2MjIyQkIwQkEwNjg5REFCQ0M0ODBDMzgxRDUKKyAxOTogRDM1QjVBRkJDNDhBNjk2ODk3QzA4NEU2RTcxQUFFNjdDN0NEOTQxNworIDIwOiA2MDJDNjNEMkYzRDEzQ0EzMjA2Q0RGMjA0Q0RFMjRFN0Q4RjQyNjZDCisgMjE6IEEzQzZGQkU1QzEzRThCNDFGQURDMjA0QzBDRjI2RjNGMjE0MTg5RjQKKyAyMjogMjVFNDgwRTlFMENBMkI2MTAxMDVDRDE0MjRCOEEzNUY2M0ZCMzk4MQorIDIzOiA0NTQxMkQ1MUQzQ0E3QkNGNDUyRDE2MTI3MjBFRTg4RjlEMjQyN0MzCisgMjQ6IEVENkE5NTAzNkUzRTA0NjkzMTU5N0E0NTdEQjdBNzhCNzMwOUM0QzAKKyAyNTogQjRGRTAyNTZEMzQ2NzAwNzgzNDIwRTA4QTRBNkY3OTkyQjFFMzZDOQorIDI2OiAzM0UxNzk5RTk4MjgwRTVBOUFDRTU1MDk0NzdBMjA0ODYwN0M1NTM3CisgMjc6IENGMTkzODM3RjZERTQzRjhFMzgwMDBBQ0ZDRjc2NEZBOEQ4RkRFMjIKKyAyODogN0M4REUyNDdEREE4MzU5OUFGMkVDMkVFMkQyOUUyMDU4M0RBQzM0QgorIDI5OiBGMzhBMDc2RjcwNjEzRkMyNTFDNEQyMUU2NDM1QUQwODM0MUE4QTk5CisgMzA6IERDRDY4RTYxNzRCRDc0QkExODBEQTA0N0E3MzQ1RThEMTExRjg1RkQKKyAzMTogNDNCQkFDQjVGNjJBMDQ4MkNCREI1NjQxNzFCMDQzNjVDQTZFMjdDMAorIDMyOiBBRTVCRDhFRkVBNTMyMkM0RDk5ODZEMDY2ODBBNzgxMzkyRjlBNjQyCisgMzM6IEVCOTBCQ0UzNjQ2MzVDNEMyM0I0OUY0OTNGMDA0MzU3OUJDODVDMTcKKyAzNDogMjk0MkM3QUZBNjU0NDRDNDNEMDU5MkQwREM3M0NBNzFEQjcyOTIwNQorIDM1OiBBQkY3MjZGNUZEQTcyOUZCN0YzRjA0ODREN0M5NEIzMTA3QUEwMkFFCisgMzY6IDc1REI0RjZCQ0MwNUE3ODFEREE5RDE3QzQ2NzE3Mjg2REQ1MzY1NEIKKyAzNzogQTgyQ0I0MkQ4OURBRjVGQkMxRDRBNDg0NzYyMjlDNDk1NzgyRjk4RAorIDM4OiBGQzFBNjk2ODM3NDRBRjgyM0NENjlFOEExRTNGNDYwNTkxNzE0MDI4CisgMzk6IERDNjhEQjQ0QjQ4NTIxQjA3MDBBODY0ODk2QTAwRTE3Nzc3QUVBODMKKyA0MDogQ0M5QUQ5OUU5MTcwNDIzODFCMEY5OTU4ODg5NkNCRjIzNkFBOEVEMworIDQxOiBFQzdBNjg0ODRBNzQ5QzcwNjVDNkI3NDZGOUM0NjVEQ0I0MTRGMzcwCisgNDI6IEM2MjdDNDQ5REVGRjE0QUU3RUQ4MDcyOTNEMzA4NDZGMDYxREE1QjgKKyA0MzogNDc4MkYyQTE5QjZEQkIwODgyRDY1NkRFODZDM0QyMUE3MzE3Rjc2OAorIDQ0OiAwMkQ0RUVEOTlFNzMwN0JFQTM5QUY1MzMwQkY3RkIzODhENDhCNDk2CisgNDU6IEIzRDk5QjlEOTBBNjlFNTBGRDQzNjU3MDRGNUFCMkVBQjdCQzk3NjMKKyA0NjogOUIxQzA3MTc2QkIyMjdGNzNFOEE0RTE3MzA3MUQzOTMwMjA2MURFMgorIDQ3OiBENzkwOTdEREFDNTUyQTZFMDJBNTJDRTdBQUY0OTREMkQ3M0IyNTU3CisgNDg6IERGN0YyM0IxNjBFNzVCOUJBRTVFQTFFNjJCNDNBNUEzNEEyNjAxMjcKKyA0OTogRjU5OEYzNzgwRDhDMzc0RDk3OTU3QjlCNjJENTYxMDZFOUUwQjJEMgorIDUwOiAwQkQ5ODU5OEY5QUIyOUMxMzU5RUY1NDYwQTIwNkREMTM3MDUxNUUzCisgNTE6IEU2QzMyMDgzNEY2OUQ4MTY4OUUxRUNENUFCQzgwOEQ0OUQ5QzRFMDcKKyA1MjogRkQ1RUU3NTg4Q0QxMjlFMTJCODg2OTc0NjIxRkQyOUZBQ0M3OEUxOQorIDUzOiAyQTlDMjhFRjYxRUI1MzZEM0JCREE2NEFEOTVBMTMyNTU0QkUzRDZCCisgNTQ6IENGQUU2RDg2QTc2N0I5QzcwMEI1MDgxQTU0MjY1RkIyRkUwRjZGRDkKKyA1NTogOEFFMkQ0NjcyOUNGRTY4RkY5MjdBRjVFRUM5QzdEMUI2NkQ2NUFDMgorIDU2OiA2MzZFMkVDNjk4REFDOTAzNDk4RTY0OEJEMkYzQUY2NDFEM0M4OENCCisgNTc6IDdDQjEzMzBGMzUyNDRCNTc0Mzc1MzkyNTMzMDRFQTc4QTZCN0M0NDMKKyA1ODogMkU3ODA0ODZGNjRCQzkxRkJGQTI3ODVFQzFDQTVDOUUzQ0MwNzkzOQorIDU5OiA0QTc3MTNENDRFOTdEOUYwOUFFMUQ3ODYxOTlDNThBRTJCRkFGM0VCCisgNjA6IEM5ODcxNEIxNkY5MkM4QTc3MEU5RkMyMjlERjgzNEQxNjg4RTI4MkYKKyA2MTogQUFDRTNERDZGNTRBMkEyNTVBQkE5MjBGNUZGQzhDRjA0Qjg1QTY5QQorIDYyOiBDRjg1NjM4OTZBM0IwQTA3NzU5ODVEODI4OTQ0NEM0QkJDNDc4REE3CisgNjM6IDZEOTQyREEwQzQzOTJCMTIzNTI4RjI5MDVDNzEzQTNDRTI4MzY0QkQKKyA2NDogQzYxMzhENTE0RkZBMjEzNUJGQ0UwRUQwQjhGQUM2NTY2OTkxN0VDNworIDY1OiA2OUJENzI4QUQ2RTEzQ0Q3NkZGMTk3NTFGREU0MjdCMDBFMzk1NzQ2CisgNjY6IENFNzA1QjdDNjBENDZFN0UzNkZFMDczREI4ODIyNjk4NTc5Q0E0MTAKKyA2NzogQzcxN0VCQkY2QTJCRjFCQjMzREE2MjU3MzUyRDUwODVCRUUyMThCMworIDY4OiA4NjE1MUQxNDBBQUZDOUE0QjU4NzdEM0ZCQjQ5MDE0RkU1OTA2RTU3CisgNjk6IDc0NDZCNUE2QkJDQzU4QkM5NjYyNDUxQTBBNzQ3RDdEMDMxRjlBN0QKKyA3MDogQzI0ODg3OTI0RjkyQURBQzVBRTM2Nzk5NUQxMjY5MUM2NjJCNzM2MgorIDcxOiA1QUY4M0NGRDQyRDYxOTY3Nzc4ODg5Q0E5MTFDRkI2QzE0MzM5QkE3CisgNzI6IDU4N0Q0RjZFNkI0RTIxMzQzNDIzRTQzNDY3OTAwOUNCRDNEMjREQ0YKKyA3MzogQUM2NUREOTQ2QzVDQzQzMkQ0RDYyNENBRUI1M0M3MzYzRjk2QjdBRgorIDc0OiBGQTcxRTcwNzUwNjc0QzBGNkI0QUExOUQwQkU3MTdCMjkzNkM4M0ZECisgNzU6IEM5RUZFNkREMEEwMTkzMTVGNzNGMzk2MkRFMzhCNkM4NDhBMTcwNUIKKyA3NjogRDFEMDU2NDlCOTUyQzhGNkVCMDE2QkUwOEZFMTU0NEFBQzVENTkyNQorIDc3OiBDQzMwODFBQzFENjk1QkFFNTFDRkQ1QjQ0QjlGQjNBMjMwNzMzQ0MzCisgNzg6IEVCOURFMzMyNTU4OTUzNzkyNjg3RDlBN0Y1OThCNUQ4NEJGMEE0NkIKKyA3OTogMzlERTVFRkRDOTJFM0QzNjc4RjI0RDJDRjU0NUJBNEQxNzJEMDAzRAorIDgwOiAzOTlEQkM5RjcyMUU0NEE5OTJBMERFRjQyRDk5OUIzMkFGNDQ5QURDCisgODE6IDk5NkEyODE3QzhBQ0JDNjY3RTFDNEMyN0I4RjRFOTk1MjczNkREN0EKKyA4MjogM0VGODE4OUNFMUJDQzBENjVBQTE4MkIxQTgxNTM0NjM1RURGREYyQgorIDgzOiBENjc2NzE0QzZBNkZGNEUxN0E2MEMwNTExQzI1QUE4QjE2NEZBNjA2CisgODQ6IDREQjZFMzM4MUUxQjkyOTAyNjdDMTUzOUUxMDUzNzkzQzhCODFGQTEKKyA4NTogM0EzNEQzNUIwMjk2RkU0RDgzRURBMzlCNzQyQTlEOEY0QjEzQTk1OAorIDg2OiA1NEYzQjQ1MzA0RUYxMjg3RjU0Qjg3N0ZDQ0UzMjg1RTE1NEY5RDZDCisgODc6IEIxRUE5NjIxNkUwMjUzNzdBQjVBQTg0NTIzOEZDOEJDNjVERDYwRTEKKyA4ODogQkM2Qzc0ODgxNDU0ODVERURFMUFFMUQ0M0I1OTRGMDA0NkJDREEwRgorIDg5OiAzRDlBMDYxOUVDRjg4Qzg0Q0U4NjIxM0U5QUE5MUQ5QTI1MkNCQzMyCisgOTA6IDkyQ0NBQTBCNENFODlFMkJEODBBNjFCOUJBRkQ1QUM1OEFCN0I1ODgKKyA5MTogM0VCMzI2QjVCRjQ0NDBGQjNBODhFM0RDQjA1QzFEQjVFQTAxQUM1QworIDkyOiA5ODlDNjNFODE5QjEzRDRDQURGQjMzRjhERUFGQkM1N0MxOTkyQTEyCisgOTM6IEFFOTQ0NTUyQzIwQ0YxNkYwN0E1QzM1NzcxMzgzMkM5RDcyRDBDNkIKKyA5NDogNDY3MjNFOTgyNTY5QTFFMkQ5RURDRUQ1NDk4RkMxRjQ2RjdENjNGQworIDk1OiAzQkM1REFFNzkwN0M4M0EwNjkzRjg3RkQ4MzcyRUZERDFERjUzRTA5CisgOTY6IDk2RDI4MUJBNDRFQjIxRUNGQjE2NjNDOEFDNTc1MkM0ODY4NkE5MjcKKyA5NzogRkEwRUYxODE3ODg4MEE3MkI1MUMyNjU1NUMxMEY1MjEwREFCNDM5MAorIDk4OiAwQzdFQ0FDMzJCOEVENkQ5ODM1RDM4MUJGMDY5NTY4NzIyQTI3NkUxCisgOTk6IDY0OUU0NEVDQkE4NUMwOTM4RUMwOTIyOUNFRTRCQjY5Mzg4RUM2NDIKKzEwMDogMUU2NjM0QkZBRUJDMDM0ODI5ODEwNTkyM0QwRjI2RTQ3QUEzM0ZGNQorMTAxOiBBRjJBRjI3MzRCQjJCQUEyODg5NDBDQjYyMTA5RjQ4NDlEQUEzNDdGCisxMDI6IDIyRDE0QkMwNDVDQzlBMzc5NEM5OUJFRUU3QUJFMjc4QkYyNEQ2RDgKKzEwMzogQzMxNjRDQ0JFRDc1QjgyRUQzRjU5RjRBNDdGRTA5QjI1NjAyNTU0OQorMTA0OiBDMjdCNUJDN0NEMjRERTQ5MTM2MTRBNzY5QTQ0MkU5Q0M5RkIwRTA4CisxMDU6IEY0NEQ0OEQ5OENBQzc3NTIyRkY2QjlFMUI5Q0JCODQ4OUU1OEU1ODgKKzEwNjogRUExOUE3MUZGQkVDOTU3MkY2Q0Q2NTUyM0FDQUY4NjVFQzA1QUI1MgorMTA3OiBDREEwRUI5RDMxMDI0N0JEMUU4QjNFQTEwRDlCOURFRkY2RkJBQkE5CisxMDg6IDQ0OURGQ0U5NzFCOUQ2NUQ2OUZCQzcyOTQwRTlBODg1RThEREU5Q0UKKzEwOTogOTZFRUJCNkI5NUE5REE5OUM1ODE5MENCRDc3Q0Q2RkJDRjYzOEE3OQorMTEwOiA2NzBGN0E4NjlFOTBDRTg2RTBBMTgyMzJBOUQ0QjFGOTdDMUM3N0QwCisxMTE6IEJDNTQ0RTI0NTczRDU5MjI5MEZEQUZGOEVDRjNGN0YyQjAwQ0Q0ODMKKzExMjogRTRDRTE0MkQwOUE4NEE4NjQ1MzM4REQ2NTM1Q0JGQUFGODAwRDMyMAorMTEzOiAxQzI2NDYxRTI2RUI2OTdDQ0MzNkE5ODcxNEVFNzBDQUFBODdBODRFCisxMTQ6IDUxQzVCMUMyNUE3MUZGMDAzOTRBODRBQjQ4QjU3MzNDODk1NTU1MUUKKzExNTogODQ4MDM1MDQxODFDMEFFMzNBNTExQzQ5QUY1MDE1QTVCMTg5MkJGRAorMTE2OiA3Q0M4QkNBMTIwQzI2MzVBQkZFQTgyREQyMDMxMTJCNUM3RTE2NURBCisxMTc6IDQ0RTI1MTlBNTI5RDcyNjFGMUJFQkVEQzhFRDk1RTExODJDQUUwREMKKzExODogMkE4MTM3MkRBMzlDMURGNDI1MTUzOUE5OTIyNzE3QjdDRjVGMDMzNAorMTE5OiA0MUM4OUQwNjAwMUJBQjRBQjc4NzM2QjQ0RUZFN0NFMThDRTZBRTA4CisxMjA6IEQzREJENjUzQkQ4NTk3Qjc0NzUzMjFCNjBBMzY4OTEyNzhFNkEwNEEKKzEyMTogMzcyM0Y4QUI4NTc4MDRGODlGODA5NzBFOUZDODhDRjhGODkwQURDMgorMTIyOiBEMDMxQzlGQjdBRjBBNDYxMjQxRTUzOUUxMERCNjJFRDI4RjcwMzNCCisxMjM6IEUwQjU1MDQzOEU3OTRCNjVEODlCOUVFNUM4RjgzNkFFNzM3REVDRjAKKzEyNDogRkIzOTk4MjgxQzMxRDFBOEVFQTJFQTczN0FGRkQwQjRENkFCNkFDMgorMTI1OiA3QTkxNEQ4Qjg2QTUzNDU4MUFBNzFFQzYxOTEyQkEzRjVCNDc4Njk4CisxMjY6IEEyNzFGNzE1NDc0NDJERUE3QjJFREY2NUNENUZCRDVDNzUxNzEwQUEKKzEyNzogODlENzMxMkE5MDNGNjVDRDJCM0UzNEE5NzVFNTVEQkVBOTAzMzM1MworMTI4OiBFNjQzNEJDNDAxRjk4NjAzRDdFREE1MDQ3OTBDOThDNjczODVENTM1CisKK0hhc2g6IHNoYTIyNAorICAwOiBEMTRBMDI4QzJBM0EyQkM5NDc2MTAyQkIyODgyMzRDNDE1QTJCMDFGODI4RUE2MkFDNUIzRTQyRgorICAxOiBGRkY5MjkyQjQyMDE2MTdCREM0RDMwNTNGQ0UwMjczNDE2NkE2ODNEN0Q4NThBN0Y1RjU5QjA3MworICAyOiAwMEFDNjBGMzBFOUJEMTk1NkY5MTRDOEU1MTI1QjY5RENDMzFBMTc5NzM0RTZBODVCM0Y3MDJCQQorICAzOiBFNjE1MjAyMTg1QUFCRTJBQ0E5MjRCRUMyOUU1QTEyMzg0RjgzMzlFQUU0RTY0QzlDQkE5RjFEQQorICA0OiBENzBEQTA3MDVFQUU0MkE1QzU5NkQ5MkYzMzFEREEyNDIxQjRFMTRGOEIzMDM1RkI3M0I4QjcwMAorICA1OiA5ODAyOUNCNDU4QTM5QTE2MzU1OTYzOTIyRDMyREFDRDk0MzlGOTBFOUZEMTA2RDQyQTBEMTIzQworICA2OiA3RDkyRTdGMUNBRDE4MThFRDFEMTNBQjQxRjA0RUJBQkZFMUZFRjZCQjRDQkVFQkFDMzRDMjlCQworICA3OiBEREQ1QkFCQjFCMDVEOEJDQ0Q2NDRBREMzOTNBOUUyMzAzQzg1MERBMzE5MjJDNERBMDc1NzRGOQorICA4OiA0QzA3MDcwODAyRTIxMDUyRkIwMjk1QUMwNTcxQ0FFREYyMTkxNDNBREFFMDYyN0UyODUwRURBQQorICA5OiA1RDNDQTNCRkU3MzhEMzNGODQxMDY5QURGNkRENzlCOTg3MzUxQ0U1ODBBQ0EyMzMyNkIzQTdFNworIDEwOiA2QjUzNzNDNTM1QTRGQTVENTZENkM0OTUzNTc1Q0U2NDk2ODAzMUJCMDE5QjkwOUY4RjJEQjkwNAorIDExOiA3NjdEMENEQzExMDc5QkE4RENBMjc2REY1QzRCODU1MDdERTY3RENFNDdFREE0Q0Q5MTk2RDMxMgorIDEyOiAwMkM1MTM5NzdCNjI0MkQyRkFBQzA5NENBRTNDMjQ3QzZFMjc0NUY4QTcxNDk0QTYwNTM1QTJFQQorIDEzOiAxRjM5NDgyMzEwRTIyMDlDMTBBODhDN0ZEN0ZDMUZENTY3RjM2Nzg5ODA4QzM3RDMwMDQ1QTgyQgorIDE0OiA1NUJBODFFQkE2NDQxODNBQjI0NjBDMjM0QkI5NUFCREE4OThFOTgwQkE5NzY1ODRFMjk3NzIzMQorIDE1OiAyNTIyRTJCMzVBODM1NDM2QzgwQTEyMkU0Njc2REU2NDY5MEM4MTQ0MEQ0MkRCREE0MEVGMjE1MQorIDE2OiA1MjlENjU2QThCQzQxM0ZFRjU4REE4MkUxQkYwMzA4RENGRTA0MjlEQ0Q4MDY4N0U2OUM5NDYzMworIDE3OiBBMTUzRjgxQzY4RDlGRkZENERFMEFCOTExMUMyRkE4NkU4RURDQTlCMjk0Mzc2MDgzMDc3QTEzNQorIDE4OiAxRUM3MDZBRUIyMjI3QjI2M0ExMDVFREJFMjU2MkUwNTIxQzk2NDIwREE0NTU4MDEyMzI3NjYxQgorIDE5OiA0OTA0QURBREYxOUQwODg5MTFFRTBFRkQyMEE5QUI1MTFGMjc4NkM4RkQ0M0YxRTVFOEJFMkFDNgorIDIwOiA2Q0UyNDVDMjk2Mjg5QTMyRjY2MTk4NkZGMUM4MEU4OTNCQkQzNUVCMEIxODJFREMxNEFCM0E3RAorIDIxOiAzMzgzMUM0NTlBNDNDQkY4QkVCNkRENTAwMzk3NTBGMUVBMzY4OEE3RUFFRjY4Q0IyRjA5NUUxNgorIDIyOiBFQjRCQzJFQTFGNzE0NkU4Mjc0QTk2RTg3NDU4NUM0MDEyNTZGQjkyMUZGQzdFOTM1RERDN0ZGRgorIDIzOiAwOUEyNjZDOTgwMTlCNkIyQTQzMThGQkVEQkVBNTQ4MUFGMDFGMEFEMkFEMTZGMDk5OTFBM0MzQQorIDI0OiA3QUYyODE0Q0Q2MTA1NDczRUU1MzBGMkIzREFFOTkyQUJCNkM4MDE0MjhGMzM0MzA1MDFGMDlBNgorIDI1OiBDNUJENjEyNzI0MzA0OUM0RDVFOUUzQjM5MUUxMkJEQTg2REM3QTk4NTY5MTBBNzU3MDA0NDg2RgorIDI2OiBGQ0EwNkRERTJEQ0QyMTJFNkMxQzExQkIyMkIxOEI0RjU1ODIyMDI2NTVERkI5QjZDOTk2MEM1NworIDI3OiAwODUxOTk4MTIwRjhDRTQ3NDgyREE1QjJFQjIxQkFERjczQzlGMTQ1OTIxRUVGRDMzNDU5RDQ5RgorIDI4OiBFRDM2QTIwOTI1MzhDNUQ0NzY5OTE3OTUzRTczNTVBMTMwNzJEREFEOEE2RTVFMkFGMURFOTZGNgorIDI5OiAyQzRBODlDMDVCRkQwOUI3MDY4QkFGREEzN0IwMzE0RUZDRTAyQUZBRTFCMkMyNURDRTMzNzMyNgorIDMwOiAxRDU1MkE0RDA2QkI4QTA4MjdCRkU4REEyQjZFRTU2QURCRDE3Q0U0ODEwOTA4RDU3MjA3NkY2RQorIDMxOiA5OTdEMTgwOTEyRTA2NTU0NDVCMDcyNTkyNzhBQUFENDI0NjMzRjVGRjZCRDBBRkVDRDRGMTVEQQorIDMyOiA3MTQ0NkVBOTMzODFCQTA5MUY5NEFGQ0RDNUI5MzgzMjMyOTBBMUEwMjdDMjJBNzVFODhBMDREMAorIDMzOiBGNzcwODdENkY0QUUzNEU4OEM2MjU5N0NFQzA2MjIwRjRDNjk0RDJFMEVCNzA0ODIwMDM1QUU2QQorIDM0OiA2NEVFNzhCMEE2QzExNjM4MEE0QzE2RjI0NDg5QzFFOTRBNTc4RTU1ODQ1MzUzN0E5ODE5QTJFNgorIDM1OiBGMzlDMUM4NjJGREM5QUI0QUNGQTUwRkUyODNDQjc1OTVDNjA4RjhDNTIxQkI3ODk4Q0Y3MUQzNAorIDM2OiBEQjQ4MkEyNkM5NDg4QTk2MzM1OUQxNDU5MTQ2MTJFMzRCODIxQ0M2Q0RDMTExMTNCNzNCREUyRgorIDM3OiBDN0M0NUYzQUE1RUVERTY2NEQ2Q0NENTEwRjYyOEQ0REMzQzY3RjkzOTczRkUwNUIwMTYzQ0ExMworIDM4OiA3RjIzMEUzRTU5Nzg0NURCOUY4RDYxQjQ0NzQwOTY4RkY1NUYyREYyOENBNTM4QTY4OTI3RjEzMAorIDM5OiBFQTUyMzYyQTlDNjZCNkE1RkYzQjY0MkZDRkVCQkY1NEY3OTNCMDg4RDI5RTY4NDBEN0E1Q0Y1NgorIDQwOiA4NEIwNjRFRjlDMTNGMUVENTRBRDBCOEZDMENDMjhGOUJDRTUwMDk1MDBFMUNEOTJDQTJCQUUwNAorIDQxOiBBMjcwMjI4MUJENjNDQTc0NTU1M0NCMTg2OTNERDcwQUM5QTcwQ0Q3M0MwMTc4MzcyNzcwN0M5NworIDQyOiA4OTIzMUZDRkZDNzAyMkRGMjBCMTg0NjI4NUZBQUNFNDRBRkNDNjc3Njg1REE1NUVFMDJEOTRFQQorIDQzOiA0QzVCMDFDNTA5MDdEMDk3RERCRjA5MjNCODg1QTI2QjU4REZGNTc2MUMxQUVERkI4RDUzNTNGNQorIDQ0OiA4NEUwQ0YzM0E3RTFDMEVBQTQ2RjM3RTk5Q0U1QzhCMjkyRTgxQUQ2MTMxODc5NkQxQTlBOTBDMworIDQ1OiAyN0U1OUEwQjZFN0I5MTI1RDRDQUE2NTg4MTBBRTUwNTRDRTQwQTlBMEEwRkZFNkUzNjQzNUVCQworIDQ2OiBDN0YyMUUyQjRDODlCMkE2RTY0RDkyRjkzRkM0MTQ2RUI1ODg2NTAzQzEyMzFFRTY5MjRCNEUxMworIDQ3OiA2NTNDQUZGNTBFMDc3QTg1NTk5Mjk5MEYwQzVGODlDNzVGQTE4RDFDQzE0N0Y2ODVBRjJFQTk5MworIDQ4OiA2QTdCREVBN0U0NTZENTMzOUI3RDlDMjQ0RTI0NkFENjVCMThCQTk1RTA1MThFMjAxQUFBNzg4OQorIDQ5OiA4MzdBREU3RjI5OEY4MTU5RTZFMjQwODc1MUIwQzQ4MDY0OENCNkZENkQyNkM1NTE5ODNGMzE3NgorIDUwOiBCRUVGM0Y2QUM0MEE5REVEMzQ1QkU0MTI0MkJCMkNGOTI0QjQ1N0E0NUNBQ0M2ODM3OUIxREM0QQorIDUxOiA2RDI5MDhFQjNCNkM4OTUyMzQ2RTBCNjVCOTQwNkQ5NDlCNUEzNDAxMjNEQjgzQjE1MURGNUY4MQorIDUyOiA5RTc1QTFENkI0QTREMUE5RjVBQTZGOEE0OEFGRDZGM0ZEMzYwRDJEODcyM0I1M0RCQjYzMjA4RQorIDUzOiA0MzZFM0JGRTk0QTM5MzU5Q0RGNDdEMzUzOTVEMzRDMDQzNTAxOEM4OEI0RTk2RTY4QzIyNjQ1QQorIDU0OiBDMjA5REYyRTk5RTAzRDY3OUZCQTlFMTRBQUY5NThBQzFCMEEyMjA3NkJCM0I1MzJBMEQ3RjA5MgorIDU1OiA4OTkxREZCQTc0Mjg0RTA0REM3NTgxQzdDM0U0MDY4RkY2Q0I3QTYzNzMzMzYxNDI5ODM0QkI1NgorIDU2OiAyQjJDRDYzN0MxNkFENzI5MEJCMDY3QUQ3RDhGRDA0RTIwNEZBNDNBODQzNjZBRkM3MTMwRjRFRgorIDU3OiBFODdGNUJDOTM4QzNCOTgxQzE5N0Q0QjE2M0M2MzVBNTA0OUZBQzgxQzRDNjQ2N0UxMjUxQkU0OAorIDU4OiBGRDlCREFGNUNDMjg4QTYwM0QxNjIzNjUxRDVCQTNCODgwMUQxNjAyQjBCOTIyMUMwQjQ4NDM1RAorIDU5OiA4N0YyMDdEOUQ4NzBFREQ3REE2MTc1MzQ3M0E1MUZDMzg2RTI3OTJBMzg2MUY5NDlCRUEwNUNGRQorIDYwOiBDOUVGRjc5RjQ0MTJDRTQ5Mjk2QzA4MkRDNzc3MTE4RjkyQzlBQzQxMzZENEVCMzI2MjFFOTQyQworIDYxOiBEREJDNzZEMjVEOTgxOTY5M0YzNTk3RDZGMDkwNDRGOEQ2Q0NCRDEyRjA4MTE1NkYxMDkwQUY3RAorIDYyOiA2NDExQUQxM0FBMzY1NDMwMkJBQzhFMkJGRDFDRTc2RjM3RTNCMzM5NDAxNEJCRTI2MDA2MkNGQworIDYzOiAwNDlFOEREN0VBQjMzNzhDRTlGODIzQkZCNTY5RTVCMjcwMjM1RDRCN0Y5NjIzNjA2OTcxOTk4RgorIDY0OiBDMzdCODhBMzUyMkRCRjdBQzMwRDFDNjhFQTM5N0FDMTFENDc3MzU3MUFFRDAxRERBQjczNTMxRQorIDY1OiAxMTRCNUZENjY1NzM2QTk2NTg1QzVENTgzN0QzNTI1MEFFRDczQzcyNTI1MkNCRjdGOEIxMjFGNgorIDY2OiA3RDlCODQ0Q0FBQzlFQzkzQUUyMTU5RUQzRDMzNkM1NTM5NjIxNkRBQzZBQzVEQzVERUNDMTFDOQorIDY3OiBFMUM3OTkxMDlERUVBMTE3RjY4REQxODI2QjM4QjUxNEUxRDI2NUYxMUE4QjYwQjI0NjMwRkY4RQorIDY4OiAwMjlBMEQwMjRCNkMwQjYzRTE1ODZGM0QzNDExMTcyN0UzN0Q0OUNBMTJFN0Y1MjBGQTkxQTkyNgorIDY5OiAyRUE5NEYwNEE3MkM3NzBBOThFMkE0OTVEODg2RUU2NzRCN0QwRkI5ODdCN0I1QzIyMTdBODc3MworIDcwOiBGQUY0NDU2ODhGRkNBMzRFRDc4M0Y5NDhCOEY3NDU3ODUwM0Q0ODQ1ODM2Q0FGNjlEQkQ1RUI1MQorIDcxOiA5MUVDNTlBQzdDOThGOURGQjg2OUUxMUM4MDAyN0Y4QTREMzExMzI0NTk3RTZGQzYxMzUyMjREMworIDcyOiAxOTBERkM5QzdCREQ5NTRFNDE1RTU0M0Y5OUIwMEI1MTEwRUQ2QTEyMTgyQkZGRENBQTc3RDhCOQorIDczOiA4QzNBQTgwNUZBNzU2MjU0NzZGMzI2N0MyMTFCMUREQTUyRTE4MTBCMDU4RUY4MDRFMzRCRUU1OAorIDc0OiBCRkQwRTUxN0U0QTM0MEE0RTBFRjFBQzMwNkVFMkM2REQxMjg4Qzc3NTMxRUYwRkQ1QUNCNzNGQQorIDc1OiBDNjIxQTE4RDdFMDk5NzYyOTZDQkMzOTc2MUIwMjBFN0UzNDYwNDJGQzczNUZERjEwNjE0OEYzRgorIDc2OiAyN0VFNUY3RTNGRTQ5RUFFQzBBRTBBOTNGRDk3MUVERjAzMDRBNEMwNTEzQkNGNDM0MjRDOTVBMgorIDc3OiBCRDlENDJGMjkzREE1NzIyMTlGMDhENEEzODA4MUQyMDNFNDRGNjEyRUVERUY5M0NFMERBRjZENAorIDc4OiAzNzRDRkI2RkIxMjc2ODcxN0VGRUQyNjgxNzE4QzExQjIyNTg4QzQyOURCOUM3MUFGQjVFQjU2MgorIDc5OiAxQ0ZCMTAzN0ZDMzk0MzU1OUU5RjkxMzE4M0RCNzEzOTJDRDRCQzY4Q0RGRDQ3RDdERUM5QzlBRAorIDgwOiAyNTM3RTAxNUQ1OTQ1RTA1NDFCQzQ4MzIwQUU0REZGN0ZFQUI5MTEyMjdBRTBENTc5REExQ0QwNQorIDgxOiAwMTJCMzRFMUE1MzBCNjg4OUU4Nzg2M0E1OTY0NUVFNEZGRUIyOTJBMzM4MTVEMkNFMTE5MThFQQorIDgyOiA1MjQyREQ0REZFRTM4OUU2NjhEOEZGNzhEQTlCMkQ4NUFBRTEyRDBDMjIwRThEMUJBREJCQTg0NQorIDgzOiA0ODEzRDcwRTFENkJCNjIzMkNEOTI1N0I1MTMyRkRCQTA1RTFBNEE4NThFMjM3QzMwM0NGQTA1MgorIDg0OiAwNTMwQkJBNDNBRTYzOTM2NTVGMjFGN0VFQTY3RjhFOEU4MTlCQTIyNUFFRDc4Q0E4QkRFMDc1RgorIDg1OiA0RjdFQUY0QTlEMDAwMEIwRTk1N0RGRTQ2REIzMDRFQkIyNjY0QTMyQUY0MTQyRUM3NEJFMThEOAorIDg2OiA2OENGMjNCOURDNERDMzQzMDgzNUI0ODQ2NDhDQkYxMjY5NDBBRjZCQUU1MTQzMUE2NkQ3RjBFNgorIDg3OiBBMDkzRDIxMTlDNzA3NjI1OUYxOTRGMTA3MDc3MDYxQzYxQzc5MkRDNTMyNkMzQTREM0E2M0JBNgorIDg4OiBGNEU4ODNGN0ZEMTJBQ0QzNkUzODkxOTg2RTREN0ZGMDNGM0UxNTBGMDlDRDRGQjU4QTAyM0EwNAorIDg5OiAwODE2ODYyQzU5Q0UzNUUwRDc4ODM0QTIyMUQzQkFCRTIxOTg3RkRBQTgxRjIwRUQ2MUQ5REE4NAorIDkwOiBGNDE1OTMzNjc3QkIzNjRDNTg5NzIyRTMwQjk1OEYyQkVGODY3MEExMEYxRjUwODJGNzlGREI0RgorIDkxOiBFNDBDNTYzMjQ5MEJCOERBRDIyODNCNkRCRENBODcwRjRCNUFCNDI3MUM2MTEyN0RFOTk5QkRGMAorIDkyOiBCMkQ0RTZDRDdBRkMzNUE0NzU2MjBFQTE0NDZCOTAyNEQ3Njc4OTBCODU5M0FCNTAyNzVGMzcwRAorIDkzOiA5NDg2MTZGRDc4MjhGMDlFOEE1N0Y5ODY1ODk5NDgwODVEMThFQzM1NTBFMEFEQThFMDEyNzY2NQorIDk0OiAyQjExNUU5MzAzMzNBMzU1QTgyRjA3NEVGMjYxREU2QkIyOTQyRDlERDY0Rjk4QkExMkQ5MkRERQorIDk1OiA2RUVBQjg2NEI1QUQ2MThDREIxQUU3OUM3QjFERTMxMDIwOTY2QTAyMzUwQUVGNzEwODhFNjg3NgorIDk2OiA2NzZBRDgxRjIxM0UwMzdGM0M5QkEyMzEwRjQ5REREQTRENjQ3NkMyOEE4RUZDMDA0NkQzRjU1QworIDk3OiAwM0EyOEM5MDY4QkMxMEE2RkQ4N0ExRTUzRjAwNDE1RjhDRTk5NEM5NjhERDlDRkY2MEQ2QjBBMgorIDk4OiAwMUQ5MUQwODRGNDAwQzU5MUVERDc1MEI2NkVDMjQ4MkM4MzRDRTBFMTQwQTM3RTZFMTQyQ0ZFQworIDk5OiBCQ0FEODk5RTdDNzcxNzY0Q0I5MUZGNjBBRDc5QkZENjI5RjQ4MDNBMDVGQ0JDQzI0RThGM0U3OQorMTAwOiA2RTA4MjE1QjU0NzBEREVCNjdFNDRBNDk0RTUyRTI1OUE5QzJDNEZCRUQ0QUY1REM2REIzRTkyQQorMTAxOiBFNUM0NUJFRDZGOEJGQzQ4N0ZGNzE5MEIxMDhBRjVDNUI2NkY2RDU1RDM2NUI1QTFCQTE1NjkxNAorMTAyOiAwREI1NUQ4M0IzOEQ0MkQyMjlDQTQyRDAwMUIwOTc1OEI1RjNGMDMyMTA5RjJGOTk5QzU1MzY1NQorMTAzOiBBRDRERjFBRjk3M0EyNzQ3NTY4QTFCOERFRjE1RTM0QTM1MEE5M0Y0NUJBODQ1OTY1ODBEMTFGMAorMTA0OiBENDkwNTg0OUM4QzRFQTMyMTU5QTQzMUI1MkJBQUMwOTJGOTAwMzcwOTNFMjAwQTBDNDY2MTFGOQorMTA1OiBBOTM2RDBBQTA5MUI4MjdCQUQ4NjY0NEM5NDYwMzA2OEFCMzRBNUI1OUUyOUQxRTNCQUIxMzAzOQorMTA2OiA0NkQyMTRFOUZBOEM4NzdDMjc5MUNDOEU2NzE2ODY4NzEzQ0I1QjY3N0NDNEQ4MzgyNDJDOUIxOAorMTA3OiBBRThEM0VCMjI3QUEzNTU4MTAxRDVFNUEyQkY2Qzg2MkM5RjcyOTdBMzFBM0RGMjRFNDUwMjI1NworMTA4OiA0NDYyQzM2NkIxMDMyNkQ0RkVGNDZFNzE5MzBCQ0Y5MzcxM0Y3RDQ1RkFDOTk2MzUyMEZGNUZFOAorMTA5OiAwNUVGQzM1NzgxRTQxM0VDQkNDNzYzQUUxM0Q1QTM3QzE1OUNFNUNDRUU2RUFBMUNGRjdDQTUxNgorMTEwOiBDRERCQTA5RDdGRTA4MUU3QTM5QzQwMTdCM0VERjdBOTEzOEQxQ0I4NTc1NTlCQTlBRDJDOTM5RQorMTExOiAxQUVFRjU4M0M0NDhBOUFFMDBGQkM5MzFCNTBCQzBEQTVCQjgzMjNFNjE2QjExMDc2Q0VFOEI0NAorMTEyOiAwMUU1QUJGNTA2MTlCNUMyMDc4RTc1NEVEREVEQ0Y0REU4RDMxMTg1QTIyMTkzMTNDQjkxQThDOQorMTEzOiBCN0ZGMTE0Q0E3Nzc1N0NBRDY3ODAxRTY3NjFBRjIwRjRDQkI4MzI4QUVGMjkwRjc3RUI2MTJDMworMTE0OiAwOEY0M0RGNDU0NzczMjQyNEFDN0QwMzkwQUQ4QUIzRDQ5Nzg4MjY0NjI0NDZEMTNCMkI0NjhENgorMTE1OiBBQzM3OTlFRDA5RTNCRDlFNzcwRkQzQTAwNzNFMzcxRkU5QTNENEUzRDQ2NEMzQTcwMjNDQzcyRAorMTE2OiA3OTVGMTYwQzI3NUZGNkI1NzUwMzFENDA1M0JBMUQxQzMyNzQ0RDA5RjAwNUIzQkYxMEJERDFGNworMTE3OiBEMkVGRDRBQzhBQkEzMzE1MUQwMzk5RTI4OTM3NjlBNkQ4QkJGQkE3QjEyODM4OEJGQTY1Qjg0MQorMTE4OiBGODU5MTBGNjRGRUUyQjhGOTFERUM4MDY0Rjc1Q0I5N0UxRkZDODk1QUVFOTEyREQzOTQ1RjgzOQorMTE5OiA3NjJGMThDMERGNjVDM0QwRUE2NDEyNkM4QTZFNTFEQjQ0MjVFNzZENEQ5NjlFRDBGODM4OTlCRQorMTIwOiBEMDIyREVCNzg3NzJBNzdFOEI5MUQ2OEY5MENBMUY2MzZFOEZFMDQ3QUUyMTk0MzRDRUQxOEVFRgorMTIxOiBBODAyRDhCNjE4QTUwMzM1MkNEQkNDMUZCRUYwNEVBMzY0OTlFQTcyRDBFMzJEMzE0Q0FGODNFNQorMTIyOiA2REUxMDg4REQ5NUM5NTM1ODQ5Mjk0QTg2MzVBNDQwODRCQTM2RTRFRUY4MUM2RDY3Qjk4Q0U5MAorMTIzOiA2QUExMTU5MTMwMkEzMEVGQUNGODc0RjQwQUEwMTdGODU0NUQzRDlFQTY4RDQ3OTk2NUFDMEIzRQorMTI0OiAzMjg4QTQ3NUE0ODE3RDJFNDI4MzBDNzA5QzFEQzE4QTRCQkQ1OURCRDkwM0I0M0NBNzAyRjI3NQorMTI1OiBDQ0VFRTdGNkVGQTYwQjJGMkNFMTA5MEZCOTI5RDYwNjhGN0VFMzAxRTdBODQwNzJGRDE2M0Y3RQorMTI2OiBBNDVCMEZDRkFDM0YwNTI3OUI3RTgyNzhBRUQ5M0UzN0IyMjVFNkE5OTc2NjRGOTJDNzU1NTQ0NworMTI3OiA1NTRDOUMzRjdFOTJCODBGNDEyMUUwMENDMTQ3NTM1RDM3N0VBRUI0RkIxRkE4RTI1QzdGODFDMQorMTI4OiA2N0Q4OERBMzNGRDYzMkQ4NzQyNDI0NzkxREZBQ0U2NzJGRjU5RDU5N0ZFMzhCM0YyQTk5ODM4NgorCitIYXNoOiBzaGEyNTYKKyAgMDogRTNCMEM0NDI5OEZDMUMxNDlBRkJGNEM4OTk2RkI5MjQyN0FFNDFFNDY0OUI5MzRDQTQ5NTk5MUI3ODUyQjg1NQorICAxOiA2RTM0MEI5Q0ZGQjM3QTk4OUNBNTQ0RTZCQjc4MEEyQzc4OTAxRDNGQjMzNzM4NzY4NTExQTMwNjE3QUZBMDFECisgIDI6IEI0MTNGNDdEMTNFRTJGRTZDODQ1QjJFRTE0MUFGODFERTg1OERGNEVDNTQ5QTU4Qjc5NzBCQjk2NjQ1QkM4RDIKKyAgMzogQUU0QjMyODBFNTZFMkZBRjgzRjQxNEE2RTNEQUJFOUQ1RkJFMTg5NzY1NDRDMDVGRUQxMjFBQ0NCODVCNTNGQworICA0OiAwNTRFREVDMUQwMjExRjYyNEZFRDBDQkNBOUQ0Rjk0MDBCMEU0OTFDNDM3NDJBRjJDNUIwQUJFQkYwQzk5MEQ4CisgIDU6IDA4QkI1RTVENkVBQUMxMDQ5RURFMDg5M0QzMEVEMDIyQjFBNEQ5QjVCNDhEQjQxNDg3MUY1MUM5Q0IzNTI4M0QKKyAgNjogMTdFODhEQjE4N0FGRDYyQzE2RTVERUJGM0U2NTI3Q0QwMDZCQzAxMkJDOTBCNTFBODEwQ0Q4MEMyRDUxMUY0MworICA3OiA1NzM1NUFDMzMwM0MxNDhGMTFBRUY3Q0IxNzk0NTZCOTIzMkNERTMzQTgxOERGREEyQzJGQ0I5MzI1NzQ5QTZCCisgIDg6IDhBODUxRkY4MkVFNzA0OEFEMDlFQzM4NDdGMURERjQ0OTQ0MTA0RDJDQkQxN0VGNEUzREIyMkM2Nzg1QTBENDUKKyAgOTogRjgzNDhFMEIxREYwMDgzM0NCQkJEMDhGMDdBQkRFQ0MxMEMwRUZCNzg4MjlENzgyOEM2MkE3RjM2RDBDQzU0OQorIDEwOiAxRjgyNUFBMkYwMDIwRUY3Q0Y5MURGQTMwREE0NjY4RDc5MUM1RDQ4MjRGQzhFNDEzNTRCODlFQzA1Nzk1QUIzCisgMTE6IDc4QTYyNzMxMDNEMTdDMzlBMEI2MTI2RTIyNkNFQzcwRTMzMzM3RjRCQzZBMzgwNjc0MDFCNTRBMzNFNzhFQUQKKyAxMjogRkZGM0E5QkNERDM3MzYzRDcwM0MxQzRGOTUxMjUzMzY4NjE1Nzg2OEYwRDRGMTZBMEYwMkQwRjFEQTI0RjlBMgorIDEzOiA4NkVCQTk0N0Q1MEMyQzAxNTcwRkUxQkI1Q0E1NTI5NThEQUJCREJCNTlCMDY1N0YwRjI2RTIxRkYwMTFFNUM3CisgMTQ6IEFCMTA3RjFCRDYzMkQzQzNGNUM3MjRBOTlEMDI0RjdGQUEwMzNGMzNDMDc2OTYzODRCNjA0QkZFNzhBQzM1MkQKKyAxNTogNzA3MUZDMzE4OEZERTdFN0U1MDBENDc2OEYxNzg0QkVERTFBMjJFOTkxNjQ4RENBQjlEQzMyMTlBQ0ZGMUQ0QworIDE2OiBCRTQ1Q0IyNjA1QkYzNkJFQkRFNjg0ODQxQTI4RjBGRDQzQzY5ODUwQTNEQ0U1RkVEQkE2OTkyOEVFM0E4OTkxCisgMTc6IDNFNTcxOEZFQTUxQThGM0Y1QkFDQTYxQzc3QUZBQjQ3M0MxODEwRjhCOURCMzMwMjczQjQwMTFDRTkyQzc4N0UKKyAxODogN0EwOTZDQzEyNzAyQkNGQTY0N0VFMDcwRDRGM0JBNEMyRDFENzE1QjQ4NEI1NUI4MjVEMEVEQkE2NTQ1ODAzQgorIDE5OiA1RjlBNzUzNjEzRDg3QjhBMTczMDIzNzNDNEFFRTU2RkFBMzEwRDNCMjRCNkFFMTg2MkQ2NzNBQTIyRTE3OTBGCisgMjA6IEU3QUVCRjU3N0Y2MDQxMkYwMzEyRDQ0MkM3MEExRkE2MTQ4QzA5MEJGNUJBQjQwNENBRUMyOTQ4MkFFNzc5RTgKKyAyMTogNzVBRUU5RENDOUZCRTdEREM5Mzk0RjVCQzVEMzhEOUY1QUQzNjFGMDUyMEY3Q0VBQjU5NjE2RTM4RjU5NTBCNQorIDIyOiAyMkNCNERGMDBDRERENjA2N0FENUNGQTJCQkE5ODU3RjIxQTA2ODQzRTFBNkUzOUFEMUE2OENCOUE0NUFCOEI3CisgMjM6IEY2QTk1NEE2ODU1NTE4N0Q4OENEOUEwMjY5NDBEMTVBQjJBN0UyNEM3NTE3RDIxQ0VFQjAyOEU5M0M5NkYzMTgKKyAyNDogMUQ2NEFERDJBNjM4ODM2N0M5QkMyRDFGMUIzODRCMDY5QTZFRjM4MkNEQUFBODk3NzFERDEwM0UyODYxM0EyNQorIDI1OiBCNzI5Q0U3MjREOUE0OEQzODg0REJGQ0JFRTFEMzc5M0Q5MjJCMjlGQTlENjM5RTcyOTBBRjQ5NzgyNjM3NzJCCisgMjY6IEI4NThEQTgwRDhBNTdEQzU0NjkwNUZEMTQ3NjEyRUJEREQzQzkxODg2MjA0MDVEMDU4RjlFRTVBQjFFNkJDNTIKKyAyNzogRDc4NzUwNzI2MTU1QTg5QzkxMzFEMEVDRjI3MDRCOTczQjg3MTA4NjVCRjlFODMxODQ1REU0RjJEQ0JDMTlEQQorIDI4OiBEQzI3RjhFOEVFMkQwOEEyQkNDQkIyREJENkM4RTA3RkZCQTE5NDEwMUZDMzQ1OEMzNERFRDU1RjcyQzA5NzFBCisgMjk6IEQwOUJFQTY1REZGNDg5MjhBMTRCNzk3NDFERTMyNzRCNjQ2RjU1QUM4OThCNzFBNjZGQTNFQUUyRDlGQUNENzcKKyAzMDogRjIxOTI1ODRCNjdEQTM1REZDMjZGNzQzRTVGNTNCQjAzNzYwNDZGODk5REM2REFCRDVFN0I1NDFBRTg2QzMyRgorIDMxOiA0RjIzQzJDQThDNUM5NjJFNTBDRDMxRTIyMUJGQjZEMEFEQ0ExOTExMURDQThFMEM2MjU5OEZGMTQ2REQxOUM0CisgMzI6IDYzMERDRDI5NjZDNDMzNjY5MTEyNTQ0OEJCQjI1QjRGRjQxMkE0OUM3MzJEQjJDOEFCQzFCODU4MUJENzEwREQKKyAzMzogNUQ4RkNGRUZBOUFFRUI3MTFGQjhFRDFFNEI3RDVDOEE5QkFGQTQ2RThFNzZFNjhBQTE4QURDRTVBMTBERjZBQgorIDM0OiAxNENEQkYxNzE0OTlGODZCRDE4QjI2MjI0M0Q2NjkwNjdFRkJEQkI1NDMxQTQ4Mjg5Q0YwMkYyQjU0NDhCM0Q0CisgMzU6IEYxMkREMTIzNDBDQjg0RTREMEQ5OTU4RDYyQkU3QzU5QkI4RjcyNDNBNzQyMEZEMDQzMTc3QUM1NDJBMjZBQUEKKyAzNjogNUQ3RTJEOUIxRENCQzg1RTdDODkwMDM2QTJDRjJGOUZFN0I2NjU1NEYyREYwOENFQzZBQTlDMEEyNUM5OUMyMQorIDM3OiBGNEQyODVGNDdBMUU0OTU5QTQ0NUVBNjUyOEU1REYzRUZBQjA0MUZBMTVBQUQ5NERCMUUyNjAwQjNGMzk1NTE4CisgMzg6IEEyRkQwRTE1RDcyQzlEMThGMzgzRTQwMDE2RjlEREM3MDY2NzNDNTQyNTIwODQyODVBQUE0N0E4MTI1NTI1NzcKKyAzOTogNEFCQTIzQUVBNUUyQTkxQjc4MDdDRjMwMjZDREQxMEExQzM4NTMzQ0U1NTMzMjY4M0Q0Q0NCODg0NTZFMDcwMworIDQwOiA1RkFBNEVFQzM2MTE1NTY4MTJDMkQ3NEI0MzdDOEM0OUFERDNGOTEwRjEwMDYzRDgwMTQ0MUY3RDc1Q0Q1RTNCCisgNDE6IDc1MzYyOUE2MTE3RjVBMjVEMzM4REZGMTBGNEREM0QwN0U2M0VFQ0MyRUFGOEVBQkU3NzNGNjM5OTcwNkZFNjcKKyA0MjogNDBBMUVENzNCNDYwMzBDOEQ3RTg4NjgyMDc4QzVBQjFBRTVBMkU1MjRFMDY2RThDODc0M0M0ODRERTBFMjFFNQorIDQzOiBDMDMzODQzNjgyODE4QzQ3NUUxODdEMjYwRDVFMkVERjA0Njk4NjJERkEzQkIwQzExNkY2ODE2QTI5RURCRjYwCisgNDQ6IDE3NjE5RUM0MjUwRUY2NUYwODNFMjMxNEVGMzBBRjc5NkI2RjExOThEMEZEREZCQjBGMjcyOTMwQkY5QkI5OTEKKyA0NTogQThFOTYwQzc2OUE5NTA4RDA5ODQ1MUUzRDc0REQ1QTJBQzZDODYxRUIwMzQxQUU5NEU5RkMyNzM1OTcyNzhDOQorIDQ2OiA4RUJGRUIyRTNBMTU5RTlGMzlBRDdDQzA0MEU2Njc4REFERTcwRDRGNTlBNjdENTI5RkE3NkFGMzAxQUIyOTQ2CisgNDc6IEVGOEE3NzgxQTk1QzMyRkEwMkVCRjUxMUVEQTNEQzZFMjczQkU1OUNCMEY5RTIwQTRGODRENTRGNDE0Mjc3OTEKKyA0ODogNERCREMyQjJCNjJDQjAwNzQ5Nzg1QkM4NDIwMjIzNkRCQzM3NzdENzQ2NjA2MTFCOEU1ODgxMkYwQ0ZERTZDMworIDQ5OiA3NTA5RkUxNDhFMkM0MjZFRDE2Qzk5MEYyMkZFODExNjkwNUM4MkM1NjE3NTZFNzIzRjYzMjIzQUNFMEUxNDdFCisgNTA6IEE2MjJFMTM4MjlFNDg4NDIyRUU3MkE1RkM5MkNCMTFEMjVDM0QwRjE4NUExMzg0QjgxMzhERjUwNzRDOTgzQkYKKyA1MTogMzMwOTg0N0NFRTQ1NEI0Rjk5RENGRThGREM1NTExQTdCQTE2OENFMEI2RTU2ODRFRjczRjkwMzBEMDA5QjhCNQorIDUyOiBDNEM2NTQwQTE1RkMxNDBBNzg0MDU2RkU2RDlFMTM1NjZGQjYxNEVDQjJEOUFDMDMzMUUyNjRDMzg2NDQyQUNECisgNTM6IDkwOTYyQ0MxMkFFOUNEQUUzMkQ3QzMzQzRCOTMxOTRCMTFGQUM4MzU5NDJFRTQxQjk4NzcwQzYxNDFDNjY3OTUKKyA1NDogNjc1RjI4QUNDMEI5MEE3MkQxQzNBNTcwRkU4M0FDNTY1NTU1REIzNThDRjAxODI2REM4RUVGQjJCRjdDQTBGMworIDU1OiA0NjNFQjI4RTcyRjgyRTBBOTZDMEE0Q0M1MzY5MEM1NzEyODExMzFGNjcyQUEyMjlFMEQ0NUFFNTlCNTk4QjU5CisgNTY6IERBMkFFNEQ2QjM2NzQ4RjJBMzE4RjIzRTdBQjFERkRGNDVBQ0RDOUQwNDlCRDgwRTU5REU4MkE2MDg5NUY1NjIKKyA1NzogMkZFNzQxQUY4MDFDQzIzODYwMkFDMEVDNkE3QjBDM0E4QTg3QzdGQzdEN0YwMkEzRkUwM0QxQzEyRUFDNEQ4RgorIDU4OiBFMDNCMTg2NDBDNjM1QjMzOEE5MkI4MkNDRTRGRjA3MkY5RjFBQkE5QUM1MjYxRUUxMzQwRjU5MkYzNUMwNDk5CisgNTk6IEJEMkRFOEY1REQxNUM3M0Y2OERGRDI2QTYxNDA4MEMyRTMyM0IyQjUxQjFCNUVEOUQ3OTMzRTUzNUQyMjNCREEKKyA2MDogMEREREUyOEU0MDgzOEVGNkY5ODUzRTg4N0Y1OTdENkFEQjVGNDBFQjM1RDU3NjNDNTJFMUU2NEQ4QkEzQkZGRgorIDYxOiA0QjVDMjc4M0M5MUNFQ0NCN0M4MzkyMTNCQ0JCNkE5MDJEN0ZFOEMyRUM4NjY4NzdBNTFGNDMzRUExN0YzRTg1CisgNjI6IEM4OURBODJDQkNENzZEREYyMjBFNEU5MDkxMDE5Qjk4NjZGRkRBNzJCRUUzMERFMUVGRkU2Qzk5NzAxQTIyMjEKKyA2MzogMjlBRjI2ODZGRDUzMzc0QTM2QjA4NDY2OTRDQzM0MjE3N0U0MjhEMTY0NzUxNUYwNzg3ODRENjlDREI5RTQ4OAorIDY0OiBGREVBQjlBQ0YzNzEwMzYyQkQyNjU4Q0RDOUEyOUU4RjlDNzU3RkNGOTgxMTYwM0E4QzQ0N0NEMUQ5MTUxMTA4CisgNjU6IDRCRkQyQzhCNkYxRUVDN0EyQUZFQjQ4QjkzNEVFNEIyNjk0MTgyMDI3RTZEMEZDMDc1MDc0RjJGQUJCMzE3ODEKKyA2NjogQjZERkQyNTlGNkUwRDA3REVCNjU4QTg4MTQ4RjgyNTNGOUJCQkI3NERERDZEQjNFREJFMTU5QTU2QkMzNTA3MworIDY3OiA4RkE1OTEzQjYyODQ3RDQyQkI0QjQ2NEUwMEE3MkM2MTJEMkFCMERGMkFGMEI5QTk2QUY4RDMyM0ZBNTA5MDc3CisgNjg6IDdERUQ5NzlDMDE1M0VCQjlFRjI4QTE1QTMxNEQwQjI3QjQxQzRGOEVFRDcwMEI1NDk3NEI0OEVCM0VDQUY5MUMKKyA2OTogMUNGM0FBNjUxRENGMzVEQkZFMjk2RTc3MEFEN0VCQzRFMDBCQ0NDRDAyMjREQjI5NjE4M0RDOTUyRDAwMDhDOQorIDcwOiA1NzY3RDY5QTkwNkQ0ODYwREI5MDc5RUI3RTkwQUI0QTU0M0U1Q0IwMzJGQ0U4NDY1NTRBRUY2Q0VCNjAwRTFECisgNzE6IDgxODlFM0Q1NDc2N0Q1MUU4RDE5NDI2NTlBOUUyOTA1RjlFQzNBRTcyODYwQzE2QTY2RTc1QjhDQzlCRDIwODcKKyA3MjogMTA3REUyQkM3ODhFMTEwMjlGNzg1MUY4RTFCMEI1QUZCNEUzNDM3OUM3MDlGQzg0MDY4OUVCRDNEMUY1MUI1QgorIDczOiAxNjlGNkYwOTNBOUJFODJGRUJFMUE2QTQ0NzE0MjU2OTdFQzI1RDUwNDBCNDcyQzVCMTgyMkFFRUEyNjI1OTg4CisgNzQ6IDIwODdFQkQzNThBRTNFQTJBMDkyRkMxOUMyREZFRTU3QzVGMDg2MDI5NkJDN0IwNTdDMTRFMTIyN0M1Q0I5RDEKKyA3NTogMTgyQUI1NkY3NzM5RTQzQ0VFMEI5QkExRTkyQzRCMkE4MUIwODg3MDU1MTZBNTI0MzkxMDE1OTc0NEYyMUJFOQorIDc2OiAwODFGNkM2ODg5OUE0OEExQkU0NTVBNTU0MTYxMDQ5MjFEMkZFNEJEQUU2OTZGNEI3MkY5RDk2MjZBNDc5MTVFCisgNzc6IDVDRTAyMzc2Q0MyNTY4NjFCNzhGODdFMzQ3ODM4MTRCQTFBRUM2RDA5QUI1MDBENTc5RUQ4RUU5NUM4QUZDQzgKKyA3ODogQjkzRTQwNzQwNEUzRTk1RjIwRkQ2NDczNjVFMEU3RjQ2QUZBQkU5QUYxRkYwODNBRjk5NjEzNUUwMEQ1NDAwOQorIDc5OiBFODFGQTgzMkIzN0JFOEVEOEY3OURBMjk5ODdBQTRENjEzMTBEQ0IxNEIyODU5REVERjhGQjFEQUEyNTQxRkQzCisgODA6IEM1NjcwNUZFQTVCMTEwQjhEQzYzNjg4NTMzQ0VEMjExNjdFNjI4MDE3Mzg3Qzg4NTQyM0I4MzVBNTVFREQ1RUYKKyA4MTogQzIyMjYyODVEMDhBMjQ1QTE3MDU4RUQyRDI0QUQwOTVCNzE0RjYwOEFFMzY0RkRERjExOUUwQTdERjg5MDU0MAorIDgyOiBGOUMyNzBEQTg3OTMyMjFBNjgwOUFDNjg1RkRENEY1Mzg3RTBGRTFFRTZBQUYwMUM3NEYxRTBBNzE5NjIxNjE0CisgODM6IEU2OUJFRkQ2RUY3RjY4NUMzNkUzNDNBQzE3MDJEODdBRDZBMEU0QUM4QzBENUM1MjFEMDRBQUQ0RUYwQjc0NTgKKyA4NDogNEUzMDMzNTYyQUQ3NEE3RDQzRUI1RkY1RkMyMzgyNjIyQzYzMDdDQjEwRTI0NUFENjJEQTc3QzRDNjNDQjE3OAorIDg1OiAyRUExNzYyOTQ3MjU2NEE1OUU1RUI4NDVBMkNERDA0RjQ0MkRGMkZGMjZCQ0M4NjZFNDAwRjc3MTU4RDYxMkExCisgODY6IEI5MDIyM0RGNzRERDQ5QThBMTQ2MUYzNDBGMkQ3QTkwRjk2OTAzQ0NCQjVCQzNDNzRFQTM2NThGQzg5NDhCMjAKKyA4NzogRTAyMDlGNDJCOTI3RUM5QzBGNkQ2QTc2MDA3RUQ1NDBFOUJERDZFNDI3QjMzNjhBMUVBNkM1RTc1NjU5NzJERAorIDg4OiAxMEQ5QkQ0MjQxMTQzMTlDMDk5OUFERjYyODhGNzQwNjBDRDg5MThFRjEyMjg4MjdBNjI2OUIyQkYwRjA4ODBDCisgODk6IDdEMTk3OEE2NUFDOTREQkJDREM2MkUzRDgxODUwMjk5RkUxNTdERDlCN0JEOUUwMUIxNzAxNTYyMTBEMjgxNUEKKyA5MDogRTA1MkRGRjlFMUM5NEFBQTQ5NTU2Rjg2RkFENTUwMjlBNDg3NTgzOUZEQTU3RjUwMDVGNEM0NDAzODc2QjI1NgorIDkxOiA1OEQyOTQ1OUIyMTMwQTJFMTUxMjUyRDQwOEI5NUU2REFDNDI0QzU2NDA2MkVCOTExQ0M3NjQ0MENCOTI2Q0EwCisgOTI6IDRFNDUzMEMzOTIzMTZGNTk4RTFCRDA3RjMyMTY2MzgwQThGNzEyQTMzQTQ4RTlFQjQyNDcxMzFFQzVEQzA1RDMKKyA5MzogQTA5QzlEM0U0MjM0MkM3REVBNDRFREI0QUVCNDhDRjY3MjdDQUNEODAzMkExMkNGNzdBMjU4MjlGQzI0OUQzMgorIDk0OiBFQjk3OEQwRjFBQzAzQ0U1QzM1MTBCNUY0QTE2MDczQTdBMkJEQzE1QzRBQjc3NzdEQ0YwMTAzMENDMzE2NjY3CisgOTU6IDdEMTkwNUEzQUNFODI3RUExQUM1MUM0RkEwOEMyODFFRDNCRTg3RTdGNEU5MjhENjk2QkZERTM1QzhGMkRDMEYKKyA5NjogMDgzNTlCMTA4RkE1NjdGNURDRjMxOUZBMzQzNERBNkFCQkMxRDU5NUY0MjYzNzI2NjY0NDdGMDlDQzVBODdEQworIDk3OiBBN0IzODMwRkZBQjBGMkJCQUJCRUY2REYwQjE2OUE3OTE3MDA4QkYyMzg4ODBCQkY4QzIwQjhFMDAwMDc3MzEyCisgOTg6IEI0RjVEOUIxNTU1OTk0QzVFQkFFQkQ4MjkxOEQ1NjBBM0JGODI5NjJBMTcxQTE2MTRFNzU1MTkzOUU5NDMzNjYKKyA5OTogMDE0RUNBRUExQjM3ODkwMEYxMjEyODk4QzZEREIwMTU2NUQ4MUFGMUQwRUY3OERGNUUyOEQ0NkU5Q0FGN0NGQworMTAwOiBCQ0UwQUZGMTlDRjVBQTZBNzQ2OUEzMEQ2MUQwNEU0Mzc2RTRCQkY2MzgxMDUyRUU5RTdGMzM5MjVDOTU0RDUyCisxMDE6IDQ1NjVEN0I4OThDQ0VBMzEzOUFEMjYwRjkyNzMxMTVGODA2QjMwMDc5RDc2ODMyMThDNEUzRUNENDNBRjNCMzMKKzEwMjogRERBREVCNjYwRkU4OTAyQzlGQjJEQjlCNkNGMjM3QzlDRTVCMzE3NTMzOTgwODVDNDM2N0VCNTkxMEI5Q0MxMworMTAzOiBDMTVBODkyODEzMUY2Njg3REQxMEYzQzExNURERjhEN0M4RjJERjdFMThEMTJDMDhDNEZEMTZGNjY2Q0U2MEJBCisxMDQ6IEFFOEUzRDc5OUIxMzUzQTM5ODE1RjkwRUNFRUJFRkEyNjVDQzQ0OEZFMzlGQUYyMDA4Q0IyMDc4NENCMkRGOUYKKzEwNTogOTg1NDUzNzFBM0Q5OTgxQUJFNUFCNEEzMkExRDdCMkZBREQ5ODAxRDg5REE1MkE5NEE0Rjc4QTQyNzQwRDIxQworMTA2OiA2MzIzRENFMkY4QjNBMDREQ0VBOEQyMDU2MDIzNDhDNDA0MDNDQjIwMEM2NzdFQjFBMUMwRkUzN0VEQjZFQjJGCisxMDc6IDgxNTBGN0M1REE5MTBENzA5RkYwMkRERjg1REQyOTNDNkEyNjcyNjMzREU4Q0RBMzBGMkUwQUE1OEIxNEIwQzQKKzEwODogNDREMjFEQjcwNzE2QkQ3NjQ0Q0IwRDgxOUZBNjc5MTgwNUVCQzUyNkVBMzI5OTZBNjBFNDFEQzc1M0ZDRkFGQworMTA5OiBCOUI3QzM3NUNDQTQ1REIxOTQ2NkVCRDBGRTdDOUUxNDc5NDhDQzQyQzFDOTBGMDU3OTcyOENGQjI2NTE5NTZECisxMTA6IEE0N0E1NTFCMDFFNTVBQUFBMDE1NTMxQTRGQTI2QTY2NkYxRUJENEJBNDU3Mzg5OERFNzEyQjhCNUUwQ0E3RTkKKzExMTogNjA3ODBFOTQ1MUJEQzQzQ0Y0NTMwRkZDOTVDQkIwQzRFQjI0REFFMkMzOUY1NUYzMzRENjc5RTA3NkMwODA2NQorMTEyOiAwOTM3M0YxMjdEMzRFNjFEQkJBQThCQzQ0OTlDODcwNzRGMkREQjEwRTFCNDY1RjUwNkQ3RDcwQTE1MDExOTc5CisxMTM6IDEzQUFBOUI1RkI3MzlDREIwRTJBRjk5RDlBQzBBNDA5MzkwQURDNEQxQ0I5QjQxRjFFRjk0Rjg1NTIwNjBFOTIKKzExNDogNUIwQTMyRjEyMTk1MjRGNUQ3MkIwMEJBMUExQjFDMDlBMDVGRjEwQzgzQkI3QTg2MDQyRTQyOTg4RjJBRkMwNgorMTE1OiAzMjc5NkEwQTI0NkVBNjdFQjc4NUVEQTJFMDQ1MTkyQjlENkU0MEI5RkUyMDQ3QjIxRUYwQ0VFOTI5MDM5NjUxCisxMTY6IERBOUFCODkzMDk5MkE5RjY1RUNDRUM0QzMxMDg4MkNBQjQyOEE3MDhFNkM4OTkxODEwNDZBOEM3M0FGMDA4NTUKKzExNzogOUM5NDU1NzM4MkM5NjY3NTNDOENBQjA5NTdFQUVEQkUxRDczN0I1RkNCMzVDNTZDMjIwREREMzZGOEEyRDM1MQorMTE4OiBEMzJBQjAwOTI5Q0I5MzVCNzlENDRFNzRDNUE3NDVEQjQ2MEZGNzk0REVBM0I3OUJFNDBDMUNDNUNGNTM4OEVGCisxMTk6IERBMTg3OTdFRDdDM0E3NzdGMDg0N0Y0Mjk3MjRBMkQ4Q0Q1MTM4RTZFRDI4OTVDM0ZBMUE2RDM5RDE4RjdFQzYKKzEyMDogRjUyQjIzREIxRkJCNkRFRDg5RUY0MkEyM0NFMEM4OTIyQzQ1RjI1QzUwQjU2OEE5M0JGMUMwNzU0MjBCQkI3QworMTIxOiAzMzVBNDYxNjkyQjMwQkJBMUQ2NDdDQzcxNjA0RTg4RTY3NkM5MEU0QzIyNDU1RDBCOEM4M0Y0QkQ3QzhBQzlCCisxMjI6IDNEMDhDNEQ3QkREQTdFQzkyMkIwNzQxREYzNTdERTQ2RTdCRDEwMkY5QUI3QTVDNjc2MjRBQjU4REE2RDlENzUKKzEyMzogQ0M2M0JFOTJFM0E5MDBDRDA2N0RBODk0NzNCNjFCNDA1NzlCNTRFRjU0RjgzMDVDMkZGQ0M4OTM3NDM3OTJFOQorMTI0OiA4NjU0NDdGQzRGQUUwMTQ3MUYyRkM5NzNCRkI0NDhERTAwMjE3NTIxRUYwMkUzMjE0RDUxNzdFQTg5QzNFRjMxCisxMjU6IDNEQUE1ODJGOTU2MzYwMUUyOTBGM0NENkQzMDRCRkY3RTI1QTlFRTQyQTM0RkZCQUM1Q0YyQkY0MDEzNEUwRDQKKzEyNjogNUREQTdDQjdDMjI4MkE1NTY3NkY4QUQ1QzQ0ODA5MkY0QTlFQkQ2NTMzOEIwN0VEMjI0RkNEN0I2QzczRjVFRgorMTI3OiA5MkNBMEZBNjY1MUVFMkY5N0I4ODRCNzI0NkE1NjJGQTcxMjUwRkVERUZFNUVCRjI3MEQzMUM1NDZCRkVBOTc2CisxMjg6IDQ3MUZCOTQzQUEyM0M1MTFGNkY3MkY4RDE2NTJEOUM4ODBDRkEzOTJBRDgwNTAzMTIwNTQ3NzAzRTU2QTJCRTUKKworSGFzaDogc2hhMzg0CisgIDA6IDM4QjA2MEE3NTFBQzk2Mzg0Q0Q5MzI3RUIxQjFFMzZBMjFGREI3MTExNEJFMDc0MzRDMENDN0JGNjNGNkUxREEyNzRFREVCRkU3NkY2NUZCRDUxQUQyRjE0ODk4Qjk1QgorICAxOiBCRUMwMjFCNEYzNjhFMzA2OTEzNEUwMTJDMkI0MzA3MDgzRDNBOUJERDIwNkUyNEU1RjBEODZFMTNENjYzNjY1NTkzM0VDMkI0MTM0NjU5NjY4MTdBOUMyMDhBMTE3MTcKKyAgMjogNUQxM0JCMzlBNjRDNEVFMTZFMEU4RDJFMUMxM0VDNDczMUZGMUFDNjk2NTJDMDcyRDBDREMzNTVFQjlFMEVDNDFCMDhBRUYzREQ2RkUwNTQxRTlGQTlFM0RDQzgwRjdCCisgIDM6IDRGODk1ODU0QzFBNEZDNUFBMkUwNDU2RUFGOEQwRUNBQTcwQzE5NkJEOTAxMTUzODYxRDc2QjhGQTNDRDk1Q0VFQTI5RUFCNkEyNzlGOEIwODQzNzcwM0NFMEI0QjkxQQorICA0OiA4MEFFNDMyRTc1NzgyNjAyNTA5NUNBMUZBNEY4OUMwNkM4QkE2NzU0QjFEODgzQThFMzFBMUU2NUZDRkI4MjBCRDc0QUNGQUNBM0Q5MzlBNTc0RUE0MDhBNzQxNjJEMUQKKyAgNTogNTYxQzE2NDA0QTFCNTkyNDA2MzAxNzgwQzBDMkRGNkFBMDU1NUY1MDRGMzVCRkJFQUM4MTBBRTM2QTM0M0I3NzY4NThDNUUwREU1NkJCNzk2MDdBMzREMkY2NzEwOEYyCisgIDY6IDc5RjQ3Mzg3MDZGQ0U5NjUwQUM2MDI2NjY3NUMzQ0QwNzI5OEIwOTkyMzg1MEQ1MjU2MDREMDQwRTZFNDQ4QURDN0RDMjI3ODBEN0UxQjk1QkZFQUE4NkE2NzhFNDU1MgorICA3OiBFNkNFMTg5NkM5NzgzQTcwQUM0QzkwMjc2Q0MzN0IzNzY4N0Q3RTMwQzc1Mzk3NTc2MkY5NjFBRTM3MTE4RDlBNjEwMjQyNzE2RTgzNTlFRkM0OTc1QUE5OEM2MzJEQ0YKKyAgODogQ0ZCMThGODFGNEJCNjcyQjAzMjE0RjFGRURFNDU2Rjg4MkEwREU0MDEyMDIxMkExRkVCQThGREM0OEY3NjNDODZBQ0JCRkI2ODREMzRCNzBGOTlGNEQ4RDgxRkUzQTI4CisgIDk6IEQwNzVBRTExNzgyMTA4MDQ2MzVBQzAyQzY1NjMwOTMxMTUyN0ZDODE5MDgzNUM4QUQ4MTk2NTc3QzMzMzJBRjREODdGMDU2MDIzRjIzNURCODkzQzY5QUE4N0IwQ0ZCOQorIDEwOiAxODJFOTUyNjZBREZGNDkwNTlFNzA2QzYxNDgzNDc4RkUwNjg4MTUwQzhEMDhCOTVGQUI1Q0ZERTk2MUYxMkQ5MDNBQUY0NDEwNEFGNENFNzJCQTZBNEJGMjAzMDJCMkUKKyAxMTogODlCRkNGNTY5QUU0QUY3MTg1MTBEQTc4QzY3NDE0MTA5RjU3MzlCQjVDNDBENTFDOUM4QzUwRTJCMkNFRTg2RjJGODBDOEI5RDY4RjdDMDEyMDFBMDcxNDU3MkZFNjAyCisgMTI6IEI2MzU0NDFBMzcyMUNGMTkwQjM5RDIzNzAzQzVCNzcwMThGRjFBNTZDOTRGODI1MkVFOTVDMjE3RTM0NzdGMDkzRThFQzY1QzZBRTc2NzE3OUE3ODcyQzhEQjlCMjE0MQorIDEzOiA0OERFQkY1NjYyNkNDODZERkE0N0FENkZERUM3M0ZEMTgyNDM0NjIxREE4QkM2REIyM0FGRjA2N0JDMzZEQzgyNDREMzA3MUIxRjU3REU0QjcxNkY2M0Q5ODIwREZCMjMKKyAxNDogNTg0NzVCN0NGOTNGRUNDQjJDMDJCNTg4RjE1NTJBMzU5RTdFRTlBQzQ1RDlBRTUwQjJEN0MyMjAyMTQ2NjY3N0Q3MEVGMjRFRkE1QzQ5MjUxNTE2NDQ1OEU5QTI0NzQ0CisgMTU6IDBBQTc1NTM0RjBGNTg3NTZBMDFFMzM2NkY3OEU3NjExQkM3RjQzMjM2NEM2NDlDM0Y1MDU0N0Y3QkNBM0U1NDg5NTMxQjhBQjEyOTQ5NUZFQUM4MzRGRjBBMEI0NURCNgorIDE2OiBDODFERjk4RDlFNkRFOUI4NThBMUU2RUJBMEYxQTNBMzk5RDk4QzQ0MUU2N0UxMDYyNjAxODA2NDg1QkI4OTEyNUVGRDU0Q0M3OERGNUZCQ0VBQkM5M0NEN0M3QkExM0IKKyAxNzogRkREM0M0QzBGODdFRUMwQ0FERDczMDI4QTA2QjAxRTY3Njk2QzdFMDQ5NjA5MzZCMzBDNzNGMDA0Q0Y2QjU5NUQ2NDQ1MzNGOEI0NzNDOEU2M0IwMkQ1OTNBNjRCMDQxCisgMTg6IDQ0NUU0Q0NBMUEwMzQ4MEQxNDlGMzgwMTRDMTREMjhERjgyODhGMkM2Q0ZGMDQ3RjQ1RDRGMjU4MEFFODVFRkZCM0JFMDA5QzlEMkFDQzU0QjUxNDY3RjgzQTA5RkJFMgorIDE5OiA4MzA1REM1NjE3MjI0NUI4MkFFRENFN0Y5QzdEQzg4QzBFNjJDQkY4MzVBMkFBMTMzRUI1NzlGNDE1RkZEMTVCQUJCQzMwQkI5OEU1NURGREEwRjlFODAyNzVDOTJCQzQKKyAyMDogOEE0ODI0MEUxQzg1RTgwNjUxRUREQzg4NTk5MjczNDQ0ODM5QTk1MkNBQ0EyQkVGNDQwMDU3NkU2NUIxRUI2QzE5QzQ3QTMwNjdCNjNBRjdDREM0MjM4QURCOUE4REFECisgMjE6IDhGMkY3NjY5QzI3QTdDQjFDRjdBODRBMkM0RjA1MEQ3MTQxODUyRDhCNDI5MjkxOTU2Qjg1RTJEQjUyODc3NDFBMzEwNEU3RTk5Q0E1RDIzQTVFRUE1OUE2OEE0RERCMQorIDIyOiAzMkNGMDRBRTJBNEEzMjZGREUyRkJCODg3RjQ3RkI3QTJDNDg2RTU2MDg4RDg1QjQ1RjBDNzU4NzU5MUY0NDc5N0ZFMEE2N0UzNkY1NzE4MDk2OTVFMDVGMjU0ODg0QjIKKyAyMzogNzEzQTA0QTNBNkJBOEQyRkQ4MjFGMUNERjlGQUNBRjQyNzk1RTQyNDdDOUEyNkYwQURDNUUwRTZBQUNCQUZGRDhGNEUwMjU2MzczM0M2QkRGMUE4NjNBNzg3OTQ5QjM1CisgMjQ6IDM1RDhBNUFBMERDOUFCNEM5QTRDNjJCMzZFMEUxMDEzOTc3QzE5OEIwNUNGNkI5MkNFQTI1QzA4MzA5REFGRDI4MkFBOUE0ODYyOTU4NTkzQzA2QkE0NjkxOUVBODAxOQorIDI1OiBEM0ZCNjBDMkU5ODFBNUM4MkYxQjFCQ0IzRDREN0FGNjJDOUEzMkE5RjBEODdFMDUzMkM5RDNBQUMwODNENzAxMzNFRkY2M0ExRTJDQ0I4NzM2MEJGMDMyQzI1RkU5RTEKKyAyNjogQjExOUY5QUM3NEU1OEJEMDgxRTI0QzBDQzFFMDkwMDEyQzE5Mjk5NkVFRDY3QThFQ0EzMzc5NEZFN0UxOTIwRTI2QzBFRkFFQjg2NkVCNUFCODJGQ0EzMTg4QTNCMDVBCisgMjc6IDVCMjk1NDNBQjBGNzZGMjQ2QjdGREU2RThFNUQzREY2MDE3QTM5MzQyQkIwODM1MUE0RUY2MDlBRTAwQTkxQUNCN0M1RDA0ODdCMzc2MEIzNENFRjMyNkY2M0M4NDU3MgorIDI4OiBGOEUxRkFBNjU3QkY4MjlDOUQyRTQ4MTE4MDUyMzhDQ0NEMTFGMEMxQUI3NjE5MDU4MjQxQkE1NjA2RTdCRDVFNDgxNjE2M0U2RThFODJFNjJBNDNDQjQ5NDNBNDEwMDYKKyAyOTogMDg1NUI5MTk3ODZCNUU1Qzg3Qjg1QTZDMTdBNDZDNTUwQjJCQTgxQjM3MjQzODkwODhFMkI1NEJBODlEODJCOEY5ODQxRkY0NDJEQTVEQjhENTRDOUIyQUMxMDhEQzNDCisgMzA6IDdERUY4Q0FCN0M4MENFRjkwRkIzODk4OUFCRUY2RjFBNUVDMTgzNzk2ODFFNDg0QTFCNERCNjYyNDgxOEQyRTQ4NkZCOUMyNDVDMUYwREREODVBODQ2RDQyNjgzNDRCMQorIDMxOiAwNEFBQTE4MEMyQ0QyNEYwRkIxNTBCMUFBMzYwRjQ0NTM0NDE1MERDQTEzRTFBQkI4MTE3RDQyRTI1REY3RkUyOTI0NkQ5RjAwQzc0NzNEMjBDRUMzMkE3MUU2NEUxRjUKKyAzMjogRTcxMTI0OTFGQUVFRkQ1Nzc4NkRBNzNGMzY3QjI1QTZGNTc2OUY1Qzk4RkE3QjcwNEQ4RDM3NzQ3NzI0QTY0NzM3MTk4OUU4QjBGRThEM0NCMjNGOUVFREQ1Mjg0NTZCCisgMzM6IEVBMjcxMjZEMEI5NkUwMEU0Mjg5NDNFQTk0RjRCMDNGRDIyRDU2QzRGRjQ2MzZFRUQxMzlEMDI3RTZENDVFRjU3QUI4NjA5M0E3MzQyQjNCMzg1MUZEM0JGRDFEREEyMworIDM0OiBCMkJEMzM3QTRCREQ0OEQyNUE1RTNGQ0UzRTA5NDhFQzY3ODI5QjgzNUE4RTNERDBEOUY0ODgxRDEwQzc2NjM2OUIwNzkwMjhDNjA2MEI3MjYzNjAzMjg4RDhGQTRCQkEKKyAzNTogQTlFOTQwNTA0QUU2QjEzN0JCMUJDODhDRTNBOUFFNTNEQ0I2M0FGREZFNUZBMEM2NTIwMDNBOTIxRjU4MkMwODY2MjQyNUM3RkJENUIxRTE0MjJFMzlFNjQ1RDRBNzU3CisgMzY6IEYwMzMxNTBENzQ2NEQ0OUEwNzZDN0Q0QkI5RTJBNTQ4ODEzMjc4NkNCNDg1MUE0QzgxREE1QjBGQ0U2NkQ3NzVEM0MxNzY2MDk0QUQ2Q0E5NDgyREQ5NTM5RjI4RUQ5QQorIDM3OiBFNjREOTk5RTcyNThBQkJCNENGRjZGNzRBRjdENkExRTlCMDQ0QzE3RTFBQ0UwRkM2MUIyOUU3NzMyNzYzNzU1QTlDMUQzQTM4MEIwODBBRDk2OEQyMjI4REI3MzFERTcKKyAzODogOTAzMEQ0N0I1N0FCRUE5M0I1MTE2MjU1NkZGMzUyREE2MUZERjUwMTEzMkE5RkQ5NEU2Q0I1NjY5MEU3QTgwNUNEQjI5MEZCNEFERTM2QkY5MEE1M0YyMDkyMkM5QjZFCisgMzk6IDQ0NzMzOTZCQjA0NjFFREI0NzEyODgwODEwQTNGNzI1MjcyNUFENEZENjA5MjAyMUE0MDU1OUY0NTNBMUM2M0FDRkZBOEEwMkM4NUNDOERCODY1NjAzMjNEQTBBMEZEOQorIDQwOiAwOTVGREQxMzAyNzhCM0M4RjU3NEQxNzI4MzYxMUU0RDYxOTlFQTYzQTBGMTU5OUUwMUVEMDcwQ0QwQjExNTI5NkZFMzUzNDc3NTgyQkYyNzlENjIyMzU1Qzg5QTIzRTQKKyA0MTogN0VFNjAwQ0VFODQzNzUzMUM2QTVCRUMzMTNENTMzNzFGOUI1NjQyNUQ1NjYyQzEwNDYyNEQ4M0Q1MTExMUU1QzlGNEI4MzAwMEI4QTNFRjE1MEUwNEFFRENGNjdDMjM3CisgNDI6IDY3NkQyQkQyNTAwQkM1MjdEQ0I1MTk2OEZFODc0MkU0MEQyOTY1MDQ3NDc4RTY5MTU1QUFCOTIwMUUwQzlCMEY2QkE5QkU4NUM0NzM0QjBERDU1NkI1RkE3NjA4QkU4MworIDQzOiAwOUY1RkU0MzNEMUZCOEY2MkE3NkU1NjU0QjU0Q0I2QTlFRjUwNUQyNDY1QTQ5RENCOTY2OUVBQzlBMzBCMjUzMjUwNUU0NTAwRjg0MkVDOUZCRTc5QTM4MkM4QzJGNEQKKyA0NDogMDc1ODIxQ0E4QzU0N0U2NkFEOTRGNEM0QURGODY2QTJBNzU1NEUwOEQyQjBGMEIzNTc2ODAxNzczRURDODVERjc2MTA3RTY5MTI5MDRFOTc1N0VCQTc1M0E3N0NEMEZGCisgNDU6IDIxNzJDMjJFN0U0OEJEMEI0QTczRkYwMjgwM0Q2RkNFNzc2Q0VDQkQ5NURGQzQzQ0EwNzYzQTBCMzc1RDU3MDMwMDAwQjEyRTU5RjlDREU4MURFNThFMTc0ODlCMkM0MQorIDQ2OiBCOUExNTY4OUJBNEY0MUJFNDY4NTU3NzVCNDZBNURCOUQ2ODI2RTBDQkRCQzNCMjkyREE2RDU3QjJBMTc5QTNEMzkzQThFMUI1NURFNzk0MzhFNTIyMTU4MEM2MDRFQUQKKyA0NzogRUJGQTU3Qzk0NjgzMUUyRTM3MEE2QjFCRTQ2RTI3Qzk1QzUxMjI5NzQ5OUI4QkQxNTcyMjYyMjE3OEUwMDU5OURFRUFERDQ4RjFCNEIwOEVCNjQ5QTEzNzgwNUNCNzg2CisgNDg6IDI1ODY2QzgyODhGOUZBMzE5RkE5QUEyNDcwQjRGQzI1OTVERkZBOTE1NEU2MDc0NDRFQTMyNDdFODFENzRBMkFFMDk1N0Q2QjdFMDUwRjhDOTZBQTc1NzdCRURDQUJCNQorIDQ5OiAzRDI4NjgyQjkwMDIyQzg3M0NFQzc4QzNBNDdGRDQ1QjUxMjRFNDlFRDA3RTJGMEZCNDFBMTEyQTYzQUFDQzlFNzYxNEFEQkIwMDdEMTI5QzA2NzNCMDhDNTEyMTA4MzkKKyA1MDogRjc2RDlCN0VEODY4MDg1OTA1QUU4MDZDRkM1QzZERTk5NDk5OUUzNzk5MjJBQzAwM0Q1M0YwMEI2NTQ2N0FBQ0VGMzkyOTM5MkYxRjJGNTZDNjIxRDJGNTUyNTQ0QTIyCisgNTE6IDMyNDk1MUZBMjQzMkI2M0QxNzY1QzIxRjk4MzI1QkM0QUUyRkZCMjVGNDExMDQ3QzUzRUQ1QTNENTUwQjUwRTJCOEY2RTc5QkJFNjVGMkM2ODZBNTEzMkU1Qjk4MkFDNworIDUyOiAzMjBDQjAzM0FENTMzQUY4RURCM0U2NjRFMzRCQjg1QjIzMjdBRkNGQzU4M0NFOTIwMkMwQjExRjE2NDI1QTU4RkQ4OTVENzQzNUU4OTUzRjk1MDZBMjVERTdCRTZFRjMKKyA1MzogNjA2NUQ1NTUzMEVEODMzOUIwOUQ3QTREOUNCMTkxOTAwNEY2OUVEOUQ2QjExOUU3OEUxQzM5QzdBRDJBQUMwMjlBM0YyNjZGN0U0ODM1MDk2NkI4NDVDNEQ3RDkyQTcyCisgNTQ6IEVCNkU4NjZCREMwQjUwODkzMDFEODlCODcwQjc1MDU2QUJBNkQ1RkE2Qzc0MDZBOEQ2RDk3Q0U1MTc1MTAyNDc5NjQ3RDNGOTMzMjVBMkNCNjQ4QTNGNDBDQ0UzODU0MgorIDU1OiBEQ0VEQjZCNTkwRURCNEVGQTg0OUM4MDFFNkI2NDkwNjU3QTVDMUU2NEY2OTI2OUY1RjYzQzkyNjdGNjIyM0RFMjRDRUE3QUFBNkIyNjdEOUJDRUNDMTUxNDdCNkM4NzUKKyA1NjogN0I5MTMyRDU5N0I4ODczQUQ1NUJCQzMwRjE4RUQzRjJDOUYzNDBFN0RFNjlGQjU3NzQwNTZDNzFBMDZEOUJDMkIxNDEzN0U5RTFDNjhCNkI2NDVGRUQyOEIxODgyNDlECisgNTc6IDA5MDFCMUU1QjEzRkNFMDAwNDg2QkRBNjRGQkU0NUM3OUZDRTE1RjM4QTREREQ5MzM1QTUyMUQ5ODgyOUQyNjdBQkNDRDg0Mjg0QkVGMUVBM0MyRDRFNDY4N0M2RDNCOAorIDU4OiA0QTkzNzVEQkFBODc4RTJDMUM3QkZCOTc3OTg5RTZEMzlDQzAwRjg5MEFEQzQyNUY3MDg0QUUzNzYxQkFFRkNCOTM4NEM4QjlFQjNBREQ0QzNDODM4QTZENTYwREY3ODgKKyA1OTogOTA4NjgyQzNFMEQ5N0E0OTQzMDYzRUE5REQwQTBGNTVFRkNBMjAzQUNBMzAwNDAxMEQzRDdFRjk0NTkzNTkyNzI5QjUyM0VBQUU0MTYwQzNFQTIyNDFFQkEyMzZGRDY1CisgNjA6IDI0NTg2Rjc1QTQzQTA4RDZDRjExNkI4N0I4NkNDNDMzMDBGQzQxMzI1MjNDQzQ4MjRCN0ZCQjNGNTRBNUI0MUM3RDU5OEI0MDYzOUIyNUE5OTczMkQ1NzVBNUNGRDM1NQorIDYxOiA3QjRDRkI3M0UyNDdFOTQxNTcwRTcwQzczMDhBQ0M1MTY2RjEyMzE4N0YwMDNCMUNBQTlCQ0QxN0REQThFRDU1MzVBQ0FFNDQzQzlBREU5M0M1NTY3MDkwRUFDRTI5QUEKKyA2MjogRTk3RUY0NTc4ODIyRERDNzlBRjYwNTE0QTE4OEY4QzcxOUU0MTMzQjU4RTVFQjEzNDI2MUFBN0U4OUM0MDJFQTcyMTkxMjlBMDZCMzk1RTVFMUQyNzM4QUMyM0ZDODc2CisgNjM6IERENjZCNTE5RjUxQTkyNTgxNDQwN0E0NDlDNjBCMzRDNTUzRDc2NTJENDE3ODNFRTkwM0E4MTBBNEM5RjgzM0I4MTgxQzkxQzdGMTIyODNFQUNENkE1RjhBMjYzOURERgorIDY0OiA5RjJDOUVCNzExNkIzRDdBNEJBODRBNzRBNEQ0RUZGOEE1RUZDRjU0QjZEN0I2NjI2OTNDMzg1Nzc5MTRDNzNBMjE0NzY2RjBBMTc1MzM5QkIwODk1QTg2MzgyNEZDMEEKKyA2NTogMTRCMEE5RkZDRTE0OTQyNkJGNTA0NUZGQzI0QzA1NzQ1MUQyNDczMTg2REVCNEYxNTAxMTdCODU1OTExQTc2NDE2NTFGQjFFMTVERjQwNkVCMzczRDcxMTUxQzQ2RjI1CisgNjY6IDI4NjUwNUZGN0E5RUY4MTIyNDk4OEE4RkYxRTQyM0EyQUQyMUY2QjMzOUU5MUI4OUY3RjE1NDBGMTRDQzlBNjAzOTUyNTY0NTM5MTY3NDY1Q0E3MEZGMEI1MjNCRUNGOQorIDY3OiA4Q0FCMDhBNzlCQTE2RjNEN0NCRUI5NDJDN0Q4Njc2RjhEMDI5NUI1RkFBMDFGM0M4NTBEQzRCNUZFOTEzQUYwMEYyRTkzOEJFMEI0NDIxODdCMTM1QkVGMUEzNkMzNEMKKyA2ODogNEQxMkZGQkNFMkU3NzBFQ0ExMTA0QkQyRjI5QzY1RkU5NTUzNEUzOTBBMTM4QzMwQ0IwRUNCNjQzNkE5NzExMTZEODJDNjMyMUQyRUEyQzBBNzM1QUYzNEU1RTNFM0IyCisgNjk6IEY4NjE3QTM1RkU5MTE2QTcxOTQ0MUY4MkYyMUM3OUI4ODY4RTVGRkZDMkVBNzM3RkRDODIxMjQ2REI3NjEwRTk4NjhEODcwNTc1RjE5QjI5RjJGRDI1OUQ5MjQyQTQ5NworIDcwOiA5MzJGQzQzNUI1OTBCMUUxRDQ5QzM0RUIzQjYyN0RBRDU0NzYyMTY1MTgyNTBCMUZCRkU3NzI0NzY0Mzc4NzJCOERBNkNBRjZEMkYzM0NFN0FGODY0OEQ5NTZDRjcxN0YKKyA3MTogM0Y2M0RGNDhDMkQ4N0NFQjIxNjhCRUZCRjZCODU3QTQxNUQ4QkZCNzA2MjI1MUU4RTFBQjA0ODc0ODNFRUJERTVFOEU4QjhCMEUzQUQ4MUVENEFCMTVFODFGRDVFNDQ4CisgNzI6IDRBNzFFNEU3MzdERTc0Rjc4RTcyRUNCOUREQjU4MEVBNUFDOTZFNUJCRDVFNTJFMTFENEE0MUFCM0I4MzAzRTNBRjM0NThBOEFEODlCMzlDRDlGNEE2RDVEQjNDOUUyQQorIDczOiBDQUMzQTgxQTk4MTAzQkJGMDhDNDQwRjZDOEY2MUFDMDEwREY4QUMwNUZEQTc3RTJFRDg2NjBBQjczQTk3OEI5NDI4QkEwNDU4QTVDNjRERkNFMzVEODdGMERBQTJBNkYKKyA3NDogNkU1RDE2MkM2MEE0NTFCNjI1Nzc4MUZBMEUzNkIzQkREOUJDNDJBN0JDRkVBRUI3NUMxOEU1NDFBNERFMDA5NjdFNkJGNTc1Q0IzMjM3NEMxRTlGRTdCMzZEOTIwNDhCCisgNzU6IDA0RERGRDcxODkzRDBGNEFEMkEwQjY3MkEwNTdFRDI3OTVENjgxMUFFQUZEQjcxMzZCQzhDMjBBNTVEQUJCM0FFNEI2MkI4QTJDNzIyQzFGNTNFMThGRkE1NzcxNjEwRgorIDc2OiA1NTVENUI1MUMyRUExNzY1OTUxNkE2N0QzMUNFMkNCMzAyOTc5RjgwQkQ3MDU2OTA4QzFBMTUyNDAzRkQ5MDJFQUVCQUJERDA2NkFCM0Y3ODM0RTcyMTNBNkNFOTlFRUIKKyA3NzogNDQ3OTdDRTRGRUM2NkIyNkI1MkE0MjQ5QzJCMjY3QUY4OTFDOTEyRTU1MjIxRURCNkNBRkM0RTJGMDIyQTQwRTgyMzE5MzFERjBCMTkzMjFENUNDQjJBQjhBNEYyNTZBCisgNzg6IDUxRDdBQzg1Mjg5RkU3RTREOTQzMTQxNEIyQkYzNzYwQkU2NUZFREQxQTBCMzRCRUQwRTE1NjJBNzM0OTVFRTEwOTcxQjUxNDE4MzVEQjQ1NEM4NjUwMzkxNTRCRUExNQorIDc5OiAyRTMxREFFNTBBNDg0QjdFMTFFMkU2MjFEMDU1MjgwMzc5MUUwNzI3OTc1MkUwOUVERjRDODg0RUYyNEM3OUMzM0Q5NTcyQUUwREU2RTBCNkEyMDI3MUYxRjdBQjk4RkYKKyA4MDogRERDNjVFRDIyQ0FFNEQxNTlEMzVFMTI5QTE2MDJEOEZBNTBEN0FBNTNFMjA5QjBENTQ0MkJCMTIxREIwRDVEMTAyNDQxMDU0QjJCMzIxNjc1RjM3MjI2NjlGRUNEMDZFCisgODE6IDIwMEUwQkM0OTUzMTFFMkZFNTI0QTE1Nzk0OTBEODQzMDExQTU5MkU0RTlCOTI3REVCMDcyN0U1NDgxODk4QzU1N0NCMjk0MUYxOEFGMEYyNzI1QTFCMTlERTA0NUJBNQorIDgyOiA1NjFFMTg3NUIzMURFQUVDNERCMkZGNUJGQTc4NTZBNkYwQUJFMTI5NENEQ0NBMURBMTJDQ0IxNzg2RDk1NTY4ODFBNzY4QUJBRTUwRjcyNDM5MjFBQ0Y5OTNBQUYxOEMKKyA4MzogRjZCODgwMDc3MzJENUI5Rjc1MjA5RjlGRTEwN0I5OTE3MDEwRDU5NjAxODRGRDIzOTg1NEFCNDYxMUNDNzg4RDE0NTVCMTEzQTU1NjVBODczMjZCM0NFNkNBMTkwREI4CisgODQ6IEI0RTcwMzE2OTE2OUIwN0FDNjFFNzZBNzVFRDRBQUNFRTQxMTVGNkE0Mzg0MkJGMTM2QjUxNDgyNEEwNUY1QzVBREI2OEYyRTUyNUQ4QzlFOEJEQjIwRDNCQ0EyMTE1NQorIDg1OiBGNzJFMjA4M0IyOTZFQjc0NjhDOTc3NDlEM0FBMUIwOEY0MThFQkNEOUEyRTVDQjQxMTdDNUEwMzRCQkVBNUUyMDA0RUUxRTQzRTI2QTk4RTRGMjVBRDQzMDZBRjNBNTcKKyA4NjogQjFERTlFRDBENUU1RjdGRENERjUzMDA0MUQ3MzIwQ0E3Mzc2QTY0NTkwRjY2Nzk5NzFGODQwNjFDNDJBQTAzRjBCMDdDN0VCQ0I4MDZFQzgzODBEOUZGMEUxODIyOTNGCisgODc6IDMwQUNDMDJBRUNFQTlCOTFGM0M2QkIwRjRDQThFRUExQjg0QTBCQTZCQkI4Rjc3NDlGRDI5QzlCRTVDNUUyOEFGQUU1QTMzNjE3REZFM0ZDMjhDRTNBNzhEMUExOUNERAorIDg4OiA1QjJEQUJBRjY2MkI4NkRDNEIxREY2QTJFQkRFQjVDRkYxRjYzQzY1QUNFNUUxMjM3REI1MDdERDNGQTJDMjdGRjQ2NTE3QjBGQ0Q2RjMyRjI1RENENTVBQ0RDMDdGQTAKKyA4OTogMzNCRTgwQjI5MzU1QUIxNkFBMEYwNUE0NUE4REMxNUE1RUY3RjlGRUU2MEJDQkUwNUUxMDZCRjZGQTBGMTk2QkZEOUNCQjhENzkyOTgzNjBGNzYwREE3QjA1MTM1RjgzCisgOTA6IDA0OEM2NDhBNTI1RkFCNjFDRjgxRTA4NzA0NzA0NDEzMEU0MDdCNzFEREQyNzI5MzExOTY4OUM4NTE2QjE5RERDNEYyNzZFM0I0RTkzRTZBQjgwQTc5QkIyNzAwREU2OAorIDkxOiBCRjE4RUE5RTAwRTZDMjI2MkQ4MDJGQjY2RTA0RkZBMjFEQzVDMTM2NDBCQkYyN0IyQzIyNTkyREU0QUZFMzFDMTgxNDdFNkVCRDJENDU2NjlDMzZGOTQzMjQ5NEEwMDAKKyA5MjogMEExQTExNDk4MUE3ODVDMzk5RTJCMjE4NzFBNTMyQjJBNzQ3RkM2N0I0REFBMjg3QzE0RjJGNDQ5RkM2RjdDNjkyNURCNUU4ODRFNkUwNDFEMDhCRjZCQzY5Mjk1MTI0CisgOTM6IEFDNjcwNUMzNzMzMDBGQ0MwOUEyOTFDRkYxODM0NDAxRkMzMEZBRDUxMjU2OTg0OEEwNTE3MUFBMDI0MjZCNzAzNEVBMkU0Nzc3QUFDMkRERkY0ODA4OTIyNkE0ODg0QworIDk0OiBCN0IwODM1MkZGODk4OEMwRkZFM0ZFMEUyNzI3OEYwNjhCREM4OEFFQ0JBOEQ3QUNEODkxOTg1MEQ3NDAwQTJDMEEwQTg1MTlCMjY0RjYxMTAyMjkwQzlBQUFEM0MyREQKKyA5NTogOEY3OEM1NkE5M0IzREM2OUVDQzU4MjdGOEQ1OTExOTVGQjY4M0E5OTUxMTc1NzU0OTI2QThFMTlGODFGRjg1OURDMTkwNERFMTJCQzg0ODJBNzYwRTk5ODU1MkQyOEU2CisgOTY6IEU2MDYwMDRFQ0RDNjg3OEI1RUMxNUY0NTU0MDE3Q0NGOTYyRTkyQ0M2RUFFQkU0OTk3QkEzNEVDMEU1M0M2N0Q1NjRDODQ2MUMwMTM3MDFBNDAxRkUzNDdFQzBGNzIxRQorIDk3OiBBQjdENzExNkY0MzZFQ0IxM0VEMkVDNDIzNDdEREY5MDJFMEZENzY2RUE4OTc4Q0Y5MzYyNUY1NkIyMTY0RTJFNjMwRDYzODNFQjAzNjAyQThERjI3RjI4RjU4MEUzQzcKKyA5ODogRDcxNkJFNjk3NEU0NkYxOUE2MDY0ODZCRTU3NkFDNkUyNTBBQUU2QUMyQUNFN0NBOUE5MjRDODc0NzkwRTZCNEM5NDY3MEZEODg0QTZFRjc3MEVDNUU1RjNGMjY0MzA2CisgOTk6IDc0NkVFRTUxMzc1RTY2OTVCQzRCNjYxOTAxNzJEQzZFODZDMThFMTQ0MjY3QzdCMDEzM0Q2QzJFQ0UwNUY3NUI4NjJFNEM0RUE1RjgxM0REOTI3RDYwQzQ2RTJDNTU0RgorMTAwOiAzRDIwRTMzQkE0RDUyQThDMzc0ODc4RjFBNjI0QTkwNzEzMjI2NEQwQzgzMUM2NEZDNTFFRDhFMUNEQjc1RDExQzNGQzc4RDRDM0NGQkY5OUQ3RjBCRUE5ODI5QjcyNUMKKzEwMTogRkU2QTZFQkJFMzBFRUExM0NFMDRCMUM4RkE0MTk5MzMxQjc3NTY2RDJBRjQyMEQ0RUFDRURDRjIyQzIzQjNEN0FEMjMxMzE3NTM4OUEwNzY1QUQ2MEE3OUMwQUE4NUM0CisxMDI6IDE4MDY0NjlDNThDMDI4RDdGQkU4MEYyMTlERDQ1MzMzRDQ0MEE4MjQwMzI3NzhERUZDMEE4OUNGNzA0RDQwNzQ1RjBGNDQ5RjdERjgyRDIyOEUxNzE4MzkxQzg1RjMxOAorMTAzOiAyMENEMTVFMzdGNjM3MTAyMEI3ODU3OTIxMEZGRDc3NTZCNDJCRDAxRUI4MjlDMTMyMEM1OUFDMzgyNzgxQUM0MjI0NDM5RjFGODIwRTIxNUVFOTA3MDkxRUU0RjAyOEIKKzEwNDogNzk2NzYzNkU3M0U0NDBFRjFGODc1MTQ0MUFERTBGNEQxNjkxNjdBQzI3MDk0OUE3NThGRTBGRkUwQjkwQzI3NzM0MzU2MjMxNjBFNEJFQTVGMjNEQkUwNjc4RTk1RUQyCisxMDU6IDc1NEY2RDczQTExNjkzRTA3QTJFNUYwNUZCRTEzNTE0QzUyRjA0RjkwNDEzMUUwNTQ0MjAyMzU0RDMwOTE3QzMzM0RDNjQ5RkY3QzMzNTU3MDA1QkIxOUI2NERCNzc3RAorMTA2OiAzNThEODNGODgzMTY2QTZEMjk3MkM2M0YyQTQ2RUY4OTNEMkZGMEY1NzdBNTM4MzBCM0I4RTJDQjI4RDFFRkU4NDA1MDg0QzE0NUVFNEUwQkVFNURGQTlBRUY3MzkyNjMKKzEwNzogRDc0QjZGRDcwN0JDRUM5NDE5RjAzMkE5QzIxQTdDNzlDRDM4RjQyRDU2NDA1N0NEQjk1NjQ4NUZDNUMyQUNBRUNFOUQ4NkJFOEUxMkI5MTgxMDE4RUE3ODcxMzQzMTQ3CisxMDg6IEE1MTczNTlBNjQyMjZGMkQwOEI2NTIwMzU5M0YzNDI3REQ0Mjg1MjQ3NkE3NjA5QzdGNjQyM0MzMDRGQkE2RUE4Mzk4MTQ3MEI4Q0YxNzFGNzFCRjAyRjY4OEJCMjQ0OAorMTA5OiA2MjE2Mjk3NUY5OEM4RUQxQjc0QURFNUIyMzI1RUMzRDE4NUY3QkY4RDlERTZDMDhCQjNBQjA1MkU1NEMyODM5OUFBQkUyQkU0Mjk1Q0JFMTIwMDNBMDM5MjRENEVFM0YKKzExMDogOEYxRTQyMzdGQkI2NjhEMjcwNUZBNjk2NEZGNTAwMTRGNTRBQjYzNDZBN0RFQ0M4REJBQTI4MkI1MTgwM0RFMjBGOTA5MEU3QUYyRTZCNDBGRDhBMTM4QUZFMjVFMUJDCisxMTE6IEY1RjlGRTExMEQ4MDlEMzQwMjlERTI2MkEwMUIyMDgzNTZDQUVDNkUwNTRDN0Y5MjZCMjU5MUY2Qzk3ODA1NzlENEI1OUY1NTc4QzZGNTMxQTg0RjE1OEEzMzY2MENFRgorMTEyOiAzM0JBMDgwRUMwQ0NCMzc4RTRFOTVGRUQzQjI2QzIzQUExQTI4MDQ3NkUwMDc1MTlFRTQ3RjYwQ0Q5QzVDOEE2NUQ2MjcyNTlBOUFBMkZEMzNDQTA2RDNDMTRFRTU1NDgKKzExMzogRjE0RkM3M0M0MTkyNzU5QjcwOTkzREMzNUZCRUUxOTNBNjBBOThEQkQxRjhCMjQyMUFGQTI1M0RFQzYzMDE1QTBENkI3NUZCNTBGOUY5QTVGN0ZCOEU3MjQxNTQwNjk5CisxMTQ6IDcyQjlFMzRFMEU2NTVEQ0Q3RDlDMjg4RDExODM5QTRGRDk2MjkyRjc2RjY5QkZCMkU3RDRGODQ4RTQ5OEI4NDJDRDRFRDY0ODZFNzdFMzBDNjAzRDIxODE0NEFFRUZCNworMTE1OiBENzFDQkQ1MzFCMjVCQTY1RTMxOTk1NEU1QUE2NzBDODA1NTQwNkE1OTVEMDA2RjBEQ0VFMTFBRkFBRjczNUNCMTYxNUVCQUI0Q0M5ODA2MTY0NUZCNzBGMzFDREQ5QUEKKzExNjogMUY0Mzk4NzkzQUU3QjJDNDk3NUFCMTAyQkMwNTREQ0VFQ0IyMzhERTQzMDdCNURDNTRGNkQ3QzIwRTA2NkY2MzhBNzgyRTMzNDQxNTMzMjc2REY5REIxQUQwRUFBNzVBCisxMTc6IENDRDkwODE5NTAxNkRDNTk2QTc4QzZDMTBDOTJFRjZGMjcyQzYyNTFGM0M0MEIyRTdEQUQzQTQ1MzhCRjNGRjU4NUQ0RTQ0MDM1QjQ5RUMzOTdEMTQ3NkU5REQyOEQwMgorMTE4OiBBOEEyNkREQjIzMDMyQkJENDQzMkFDODU3MzgzQTVERTI4MDIwMkIyMUNFMTczRDg2NEUxOUM0QTUyOTg0RTE1OUJERDAwNkQ5NTYwNUE0NjgyNDU4MTM3RkU2QjcxQkYKKzExOTogMEM4RDMwMzFEODVDRUZBMjNBMDlFMTNDRTAzNjIzRjBFNjQ4QTAzMEU0MzcwMEM4MkFBMUM4QUE3RTNFQTlDRUNFRjMwMjlBMjM4MTVBRDk0MENDMzlBREI3NzQ3RDJGCisxMjA6IDA1NzdBRDYwOTBCMkEzOUZGQTFDNEEyNTQzNkY5RTk1ODg5MEM1NUE1QjIzQ0Y4Q0VFODE5NUE1OTg0MzE2RDgxRDZDRjBCNTkxNkMwQUQ4QjFGNTEyRkIzOTgyNkM2RAorMTIxOiBBNUU3QzMxRENERUM1M0Q4ODk4RENCMjdENTJBNUMxNzc0MTE1RDhEQjE2MzU0M0EzMzBBQjUwMkZFMzFENjAxN0ZBNEJBNEM2NUFERTBDRDkxMTk3MkM1QTFCNzczOUQKKzEyMjogMjc4NUMxNDlCNzk4RTQxRTZFRDYwMEREQTUyNTdFMkYzMTQ4NEJBNEQxNEQzNUM4MzUzQkE0QkIzQkZCNDdGNkUyQ0Q5QjY0Qzk0MEUzQzFGODNBQTQ1ODdEQzI5Q0FBCisxMjM6IDk3Nzc1NkVFRjFBN0MxRDRDQTMxQThFNjkzNkU3Qjg4ODQ5NjhBMjJGMjg0NkYyMEIzOEYyNDczNDVCMUNDRDQ3NDA1MDQwRjcyN0JCRTJFMEZGQ0QxNTkyMDZGNUU4NworMTI0OiA5RTQ4MTFGMTgyRTVENjczNEVBMDk3RkNCQzc3ODkyRUM0OEYwOURCQTEzOEFENUE1QUJGRTY3RjJFODhBQjYxQjBBM0VDQjI5MDI4QjU1MjgxODAxOTE3NTQyMzE3NjUKKzEyNTogRTk2NEM1Q0M0NUU4MzU2RENFOUZGRkU3MTVEMDFBRUIzOTM1RDY0NERDOUMyNjAzQUNEMTc1QTA0RTg5MjRERDg0QTREODhBMTM4NEQ2QkFBOEFCM0Y3RjdENTJEMTIyCisxMjY6IDc2NEVCOTYzODUwNTM3RTU3RDA5NjlDOTkxNDM1NUM1QUE2N0FBOTcyMjY0NDU2OUI3RjUwRTIwREE4NDYxQ0M5QzZDQTU5NThBQkUxMEY1NDY5RTREQzFFRDI3NjE5RgorMTI3OiBENUZDRkUyRkNGNkIzRUYzNzVFREUzN0M4MTIzRDlCNzgwNjVGRUNDMUQ1NTE5N0UyRjc3MjFFNkU5QTkzRDBCQTREN0ZEMTVGOUI5NkRFQTI3NDRERjI0MTQxQkEyRUYKKzEyODogQ0EyMzg1NzczMzE5MTI0NTM0MTExQTM2RDA1ODFGQzNGMDA4MTVFOTA3MDM0QjkwQ0ZGOUMzQTg2MUUxMjZBNzQxRDVERkNGRjY1QTQxN0I2RDcyOTY4NjNBQzBFQzE3CisxMjk6IEVGNDlBRTVCOUFENTE0MzNEMDAzMjM1MjhEODFFQThEMkU0RDJCNTA3REJEOUYxQ0I4NEY5NTJCNjYyNDlBNzg4QjFDODlGQ0RCNzdBMERCOUYxRkVCOTAxRDQ3RkM3MworMTMwOiBEOUI2ODFCQTA4RUMwRDA1OThERDNBMkEzN0Y5MDlEMDFBMjMxRDIyREE1MjIxNjEyNjUzNDQwMkE1OEEwNzJEQjM1RkRBRTU1NUI5OTE1OTg5NEJDODIzRjlEQUNGRTcKKzEzMTogOTYxRTc5MkM5NDAyN0EwOTFERjg4MEE3MTNFQ0JDQTk0RTc2OTlGQTM5MkNDQTNFNEI5OTg4Q0I5NURENDZDODk0QUI2Q0ZBM0RFOTEyMzYxODhGN0EzNzJCMUM2MEMwCisxMzI6IDc3OUM4NDVDRUQ5NjIzQjY1NTg1NzdDMDZDNkYyMjc2OEU0QTAxQ0VEMkE5NzIyQ0I4Nzg4RkNDQTg5RTBCNUNDNkE4OTI1NTMzRkQwOTdGNjM1OTk3QTlDMTkxRDU5RgorMTMzOiBGOEE2RkExQzczMDQ4M0FFNDg4MTkxRTU4NjNBQjNEQUI0QkJEQTE3MjI3MTBFNTE5QTJCMjQ1NTI3M0U3OEEzODJDNjBEQjBEMjFFM0I0OTdFRjlFRUIyNzgwQUIzODQKKzEzNDogMURBQTM0NDg2OTgxNDc0QTU3MDI5RjBCMUZGNTE1MEExNDRDRUM3OTM5QTVEMEMzRDdERERDNEY0NzEyMjVEOThFODNFOEEwREU4ODAwMzZGMUEyNjVFMjRDQTFFNjc0CisxMzU6IDc2OTY5NEQ2OUQ3MDE3NjRCQ0Y4MUMwNTNFMjg5OUIyMzIzNDQ1MDZDMDhBMzlERURFM0Q4MzhGODU4NzA4MThDM0E4Q0QyREJDODY5NUVEQUY4RkUzNEI0QTVDQzM1RAorMTM2OiA5N0UyOUU0QUU3QzdFNDYxMTk2QzFENjk4QjVEMTE4NjgyMkJCNjZBQ0EzQjNFMDYyQTNBRTA3REI5REQwRkVEODNBMzQ1MDE0RDNFNUFEODlFOTA0NjYwNkFEMkNFRTcKKzEzNzogNkI1NzU5M0VFMTgxODY1NzNGOTIyNzNBOUI3MjJGOUZENzdBNEE1MTIxNjRGRTM3NTZCQzJEOUY2NjU3NjgwMTZFQjI3NjZDNDZENDczQTEwM0Q3RDcwOTAwNzMyNzFGCisxMzg6IDM1MjM1MjYxQzUyMjYxMjk1ODA0OEI3RkI4RTQ4Rjk2NDYyRDJCOEI1MkFCMjQ1NUM3QzE0MkU0NDJFNENGNjQzQjM2N0VENDY2QTMwQkE5N0Q5MUMxQzhDMDA3MEUwNQorMTM5OiA2NzAwNEE1RTc0NTk4OTgxQTc5OTg0QjI2NjJGRkY4QzhGNDlGOEZEMTNDOEE4NDFGNjhEQkExOERGNjgwMTVFOUMxRUYzOEQ2NTIyRDQ0Rjg5REJGRUE4QUY0OEQyRDAKKzE0MDogOEFDRDA1Rjk3MzhCQkIxNzZFNTBDNzQxOUEwNUM4MjAwRTFCQTg0QjU3OTcwMzJFMDI1RUQ0QjU1RDdBNjFDRUM0Q0UzNjYyNDMyQTRFMEJBOTM4RDhDOTE0M0Q1MjU0CisxNDE6IDk5NjMzMDBDMENFNUYyRDM5QzJCODk5RTQ3OTg4QkZBOTE0RDJFQTJEQkI5NzJDMTVCM0NCQzQxNEU0MURGM0EyRkU3OTM1OTcyNDNENDZDRkY5MzdGNDFDMEQ4MzEzNgorMTQyOiBGQkVFMEY1RTA3MjIzN0QxOTE3MDk5OUQwMkJCOTVGNkY4RjQ4RkQwNTk2QTk4MkE0RkEyRDEyNzM4NzIyMjYzOThERjU3QTYzRTFBQ0NDRjYzNDM0MTVERjM4N0Q4OUUKKzE0MzogMzJBNjUwOTlDNDdFQUUzQkNEMEY2ODY0NTg0NUMwMTcxNDE3Mzg1QjE1REI1RTVGN0JCNUFEOTY1RjY2Qzk4Q0RDMzlCNzUzNDE5OEFGNzBBRDU3MzlDOEEyRjJCOERBCisxNDQ6IEU5MzZEQkEyQ0VEN0Y2NURFMzQ1MEJBN0FEQkUxMDMwRDdBRUZBRkNDRTBDQkE5NEU2NzE0MjI3OTBCNDVCNDk5MTgzMTlBOTBGQUE3NjkyNzgwQ0FCNDMwMUQ5ODMzQQorMTQ1OiAxRTIwRDEzQjRENzFBQ0JEQkQ1RDJBQTEyOUU5ODkyOTUxMEM3OTUxMTlFQThBMDdFQzYzOTE3MTE0MzE1RTI3NTZCNDVFN0FFNDJFMUE0NEM1RTQxMEVDQkVGQjM2NjEKKzE0NjogMDJBMDU3MUM1QzMwNzZDQUNFN0YwNjFCREIxMDhEN0NEOUM3RUE1MUQwRkJGMUQwMEYyMDJBMEI1Qzg3RjIyQ0U2ODdEMUNCMTVGNzk4RUQxNjRDQUYxQ0VDRjkyQ0YyCisxNDc6IEVBMDdDNEExREYxRTVDQjI2REM3QTdCQzc2RkU1MTg4OTBGQjhDNDI0QUYzQjFDNzZCMzdBQjIxNDQ1RDlGN0ZCQUI3M0M3REIzNUU4NTMzN0E4RjdBMEQ1NTEyMUYzNAorMTQ4OiA3ODI5NzEyODc2Mzc4REY5ODZBNjNFNDYxNkRDQTM4REJFODgzM0IxNDc2MDE2ODg5N0FBODA4Qjk2RDhGRkE0NDYwQ0EzQzFBOUI2NzRBMEZDMTNFMDYyNTUzN0M0NUEKKzE0OTogQTdDQkIzQ0Q1MEFBNjYzQkQyQzQ1MjBDQ0VFRjEyM0Y3RDMxNDg3MDgwNjI5MURBMjZBNTlDMDAzRDA0MUU0NkU2QjU2MzY3MEYyN0JFQ0M1RjgzOEEyNzNEMzQ5QUZDCisxNTA6IEMxNEU3RjcwRDI4RTE3RDM1NDZFQjQwRUU5NkQyMzlDQTVFRjdFQkJCRDBERTY0Qjk2NEMxNDVBNUYyOTgwRDQwOEE2QUMyNDhENjUxRTQ1ODNFMjUwOTMwNDJFQTI4NgorMTUxOiAxOUY4N0JGRkJGRjRCMUUxOTU2MTJGNDFFNjdFMUQ0Q0QwMzkzRTczRkVEQUMxQzM2NTUwQzJCMUE3MzIzRDNFN0Q3NDdFQUFCOTg0NEY0NUYxNTBGOERGMEZCNzJFODAKKzE1MjogNkJGQTNCQzI5RkZGM0E5MkZFQzM3N0FGODUwOEQ0ODIzRjRFODcwNzJENkYyRjE2MzcwQjdERDMwNzg5QTk0NEVFNTcyMUVGREE3QUJGRDQ3QTUxMkVBMkQ0OTg0QkMwCisxNTM6IEVFMTBGRERFNzBFQjBBMTE0NjJEQzAwODYwQUM0NzU2QjIxQzgzQkZGMDA2NkM0MzFCMTdCQTU3Q0NCQjlFRDAxOEU4MDU4Q0I5RUE0NENDMTE5NTJDM0M5QkQxNUYwOQorMTU0OiBFNkE3MkI5RDJBMEZGQ0E0MUMzMTIyQzc2N0E2RkQ5Q0ZBMDRDQjVCMUQxRDk0Qjc5QTBCMkM1OTJBNTg0RjczMUNBMDUyM0FFQThGMkRCQTM1RkRFRjc0Q0FGMTY1RUMKKzE1NTogNTkxMThBNTNDNDQ3OTA3MERDNzI4RDk0QkEzNkQyMTFGNEVENUQzNUYxQjY5RTRERkMwNTQzRjA3MzI2Rjk4MkQyQjgxRERCMDIwRjJDQUNDQUYxRTVFOTgzMjYyNEUzCisxNTY6IDYzNzc4Qjc4MzBBM0FCNzQyMTkxMkE1MkIzQ0U5MzAzQTUzQzJBNjY1NTI5MTA0MkY0Mjg2OTFBNjMzRkI5RkYxNzM5MzdBOEQ4RjU5QjIxRjcyRDQ5MEYzOUE5QUMwNgorMTU3OiBBNzAyRjE1RDk0ODNCQjc2N0ZDNkJFOUMzQkZDNjQ3MzIyNzdDRTkzNkFFQkFERTQwMjJCMjRCNDgyMkJEMUIwRkExMjEzQUFDRjdCNDUwNkJGOEYzMzBGQjc2NDM5NTUKKzE1ODogQTNGQkVBOTIwNDE0ODRGN0Y0NkIzODA0NjJDNTExNEIwMjQzQTc5RkVFRDg5RUNGOEU2RDgzMDZENjBEQkVCREM1RkYxNTc4RUU3RTk0QjU1MjdFRkM1NzA3RDJCN0QzCisxNTk6IDFFQUVBMjYwMkUwQjZCMzI4RDAwOEE1MzI1QzVENEY5REZGN0FCOUJCNUQzNjgxNkQzRUJGRUU3MzNCRTY2NEUzNTE3MDUwNjY2N0JGNUEyNEQwMDIyMkVCQzVEQ0RDRAorMTYwOiA5MkU0RDQxNTk0RTE1NjI4QkVGMDZDQTYxRTY0NEQyQTY4NkMxMTNCRjhFM0Y5QThDRDJDRDgyNjFCMTFEMDFCMDgxRUYyOTQxRDUxODJFNTY1QjcwQzU2NkQ0NjFCMjMKKzE2MTogMkYwOERBQUE5OERFNkRCNEU4NUI4MUUzMkM2NTFEODgwNzVERTE4QjdGOUMzRjYzM0JFMUYyOUM4OUYyNDk2ODUyNUIxQjM1N0RFODBDNkVBOEQ5NTcwRTAwM0M3NURFCisxNjI6IDVERjY0RTc5NjBDNzU1RDQwQkU3OEYwQkI3QzFBMTg1REY4RTUwNUYwQjQyMUJFMjM1NjM0NzI4NDNFM0I1Q0ZDN0RBMEY0MDkwOEJGNTZDNkYzQTYyNDQ1ODFDMURFNgorMTYzOiBEQUJCNURDQkMzMkZFNzI5OEM4MTFDRTIyMDI1RTlCMUMwQjg3REE1RTc5MzFDQzM2MTRFM0VFMzkxMTIyMDZERDg0MjJBNTUwNEYxMTU5OTQzNkI4MDZDOTEwOEIwMUIKKzE2NDogMzFBRTI3MzgyRTMzMDExNUUwMDk0NzRGQjVBQzc1MEEyNzhCNzlFRkY2Mzc1NUUzMjNFMzQ3OEIwNzYxRTVFOTQ2REE2RDI0MzZEQzQ0QURFOUY0NTc4QThGQkE5ODk2CisxNjU6IDY4MDRDRjAzMTRFNDU1RjQ5OUU3M0JCREY0RkFBMjJDQTQ5MDIwMzMwRTc0QzU1QjFDRjRBMkQyRjRDNTdENzE0OUI0MTkxNjAwMkIyODUyRUNGQTA3MTNCQTkxQTA5NAorMTY2OiA3RkFEMkFCMDk3MkQ4MDU5RDQzMDZGMEI2M0YyNUQ5QUNCQkQ4RkQ5NUVDODE5OUNGQTg5RDRFMjI3RUVERTYwNTJBRjBDNTNDNzAzQzdFMzE5MDQ3REM1NzM0QzlGNEMKKzE2NzogNDYzNUU2NTQ5NTBCMTczRDNFQzgxQTgyMTJDMUU2NTYwNUM4NTgzNUNGQUQ4NjA3QzgyOTc4Njg1NTYzNkE2NjBENkMzMDQ1RkYxNzY2M0RFNDY1QkYyQjE1Mjg3OUUyCisxNjg6IEI0MDc2NEQ4RjA2NkM4OTdDM0E4RkU1NEJGMjFEQTI5NEM2QjNGMUIzNTI1NUY2OEM4QUIzMjVBQjNCOTRFRThBRTJFNTE3MzkzNkMxN0ZEQzk1QzlCN0MzRDNEM0E1OAorMTY5OiBFRTdFNDI0QzU1MEY3OUJBODIwNDMyNDVDM0I3RDBBQzMyQTQxQjg3Njk4OEMzMjJCOTk5N0Q4N0YwQTBBMUZCODI2MzcyNkI5NTNCNDNCNDYxNjI4NUEyMzk5OTQ5MzYKKzE3MDogNjI3RENFRUFDQjI3RjM5NTUyQUI2ODMzMzBBNjdBMzE2QjJGNTM4NDJCQ0U4MDU2RkNGMzk4ODcwMjk1NUUzQkE3MkZERUVBQzJDREI1M0YxMzYyNzg1OEMxQkJDNTFGCisxNzE6IEREMTNGM0IzRTlDNzk5NThCMjBEMTk4NjY1MEE3OUNFRTEzNDNGOTk1N0ZCRUVERTE4QjJGQjVFNTQzRTNCODgzOUVERjdBNTdFRkQ4MTgxMjlDNEYwMEY1MDVEMjExMgorMTcyOiAwQTcwNjFDMEZCRjFFRThDQ0IwRjRBMUQwRENBRjJGMjAwMjkxQUMwNjgzMEYwRTM4RDA1RTFDQTI0MjlBMkJGNTdERTVCRjhERUQ1QTdDRUNDM0E0NzQ4RkJDQjg4MEUKKzE3MzogMzYzNUFFQTkxNTIzMzdGQkZBNEMyODI0QzU0OTlCOUYzRkQzMjA2MTI5N0M0MTIxRkIwQTQ0Q0RGNUQzQzhENEM2RUZENzYwQTBCRjA3NkRCRDE4MDFDNDE2OTQ5QTlDCisxNzQ6IEY5QzU4QUYyMjU5QzcxOUIwQjg1MkZDNjgyOTlBQzlGMTdBODAyQjQ5QjM0Q0JGNUZCRUI4NURCM0M2ODc2N0NDMzREQUUyQ0NCNTM2RkY5MEJBRTQ5RkRERUMwQ0ZFNAorMTc1OiAzNTQxRUI4NjAyQTRDODQ1NDVGNDQ3Njc0OUVBRDU0RTQ1NDJDNDM1OENDNzhDQTVCN0M4QjZCQ0Q5RTlBM0U2NDlDQ0IyNDNGRTBCM0QwMjkzMENGMUNCN0E1MDdGRkQKKzE3NjogNEFBMjZDMjU2NTUzMUE1MjgxMUQzMEExQzU5MTUyQkRFNEM2MUFFMkNFQUZFRjk2NDJFNzA3NkVDNDRDN0VCRDUwRjFEMTg1Mzc2MUI0MDk3RDk4NURGRTY4NzhBNzAxCisxNzc6IDMyRjFERDBCNEFGMjA1QjQ4OTFFMkY0M0Q3NzJFQjVFNEE1RUEzNjU4MTA2RkRDOEI4Q0VFQkQyRDUwMkY4MDQ4QjU4MzYxMEE0MTlFMUE2MDAyMEM4QzJBNUEwMkZDOAorMTc4OiBEQTc0MDNGRTNDM0QzMTM5ODkzNTIyQzVEQzhFNEY2MTVEMzZBMEY3QjdCOEFBRjE1MEQxMzM3QzhERkU3MDMxMTU0NEU1NDg4MEQxQzU3NUQ2NjRFOUFGOTc5OTg0RDkKKzE3OTogMzlGODQ1MEQ0QTk0NkFCQzZGQ0E4MDRBRTExOTM1Q0RFODQ2RDk5OUJDRkYzMDkxRjFFNjk0NEVBRUFENTA0Rjc3MTM5QTkxOUY5MTVEMzREQUNDMTM3NTdDQ0UwMTU3CisxODA6IDQ1Q0MwMzA4NUNDMzI3OEI4MzM3MDk2QkVERkU2RjFENjQ1OTk0NjkwNjYwRjIzQTM1OEM0RUM3MjhFQkFGRDY5NjZDNDg3Qjk0OTJERTIxN0MxNzgyM0IxNjU4OTg1MgorMTgxOiBBMjE1MEYzQkEzMzQ5RTNBQTBFRDk3QjFBMDJBNThGMzFFQjU3MzEwMTIzOTNFQzY4ODQ2RDk1NDY1RjNCNzg3QzI3Mjg1MkI2OTQ1QjFDQzBGQzJCM0JFOTk5RTBFNDYKKzE4MjogQkY5MzkyQjA4NUIzQzVGRkJERTcwQTNGQjY0QUFCMzZFMzlCREU0ODE2RjFDOUIyQTYwODI2OTMzNjkwNjMwM0Y3REZDMTVGNDcwMUQzRkFGQTVEN0E4QkZFMzE2QTFCCisxODM6IDIxQkRBMTc5RDVCODBGQTZCOTQ0NEFCMUQxRjdFMDZGODlGNjcwREE0QTAzOEU3RTgzRThBNjNDRURENDRBQjZDMUQwNjlEMTJDNkY1MzhCNDUwMjJFRjMxNjBEMzk2RAorMTg0OiBCNDIxNkNERTZCQzFDMjdBNUMxRUE5QUM3OUU4NTc3Njc0MEY5MzQ0MEFFNDM4RDREOUNGNTFCRThBODNBRDQ0NTY1NTg2RkJGQjU4REQ3NDM3ODI3MjRBNDQwMjE4RTgKKzE4NTogNUMzRDVDMDAzODFCQ0NGNzdGQzIxMDNDMjYyRjM3MzU5MkZFMzRDMkIyODk1RjU0QkNGRDFGOUIzQzg3MDI2Mjg4MTMwODIyQjJCNDUxRDcxNkZBOUQ0RDdGQ0M5M0Y1CisxODY6IEI5MjdFMzc3N0Q0QkUwNUZBODVEMENCNzA3RkIwMEYwOEM1NzY3Nzc4NDA2MzQ1MzE3OTVDRDNENjgxOEYxOTI3ODk5NzdBRDY0MjUwMTgwMjVFMTBGNTg5MkZGRTcwOAorMTg3OiA5QzY5NzZFMUVERkFFREMzMjM3OEM4RDI3NThEMUIwQzVCMjg3QzUwMDQ0MkVDNUQxOTU2MEJDODdDNzVGRDJBNzM3OUEzRTY0QURDMTQyMUI3NDEwRDFBREQ2NDU2QkIKKzE4ODogOUMyMDQ4MkFCNzFCQkQ4RTk4NUQ3ODkxNDk5REI1MjZCQ0FBRTExRDJBNDJERDcyRkZFRDY2NEQ3QkY3RjI1NEMyRjhEREEyRTM0MDY5MEZCODNFMUY1QzU4Mzc4QjcyCisxODk6IDc4OTlENUFGNDEwMTg4QTNEMEQwQjEyRDUyNDM3MzEzRDc4NkNFNzk1OUZDNEQxOTRENkEzQUNBODU3MjlCNjBBQkJEQzU4QUM0MDczMUI5RTgzMzUwNTE1NkJFRkUyNAorMTkwOiA0Rjk1OEZEMTg0MUQyQjc5MEExOTlFRTMzNThGNERDRUVDNjRDQjM0RDA4ODZFQTkxQUE1RTM4Rjg2MDBGQkUxM0RFRTRENkE1NUFDMTI3M0IzNzMwQ0M2MkEzNjExQjcKKzE5MTogNjY1NzJGNjFGRTZDMzRCNDQwQUMwMEM4RDM5OTJCOUNERTNGQzQ2NUZDQkIxOTNDQjc3MTZCNTNFODAzMkM3NDM3MThENEY4MjQ1RDk0QTIyQTlBRTEyNTc5NTU4OUUwCisxOTI6IEU3QUQ0OTg2MTk2MEQxNDYwQTc3RjRGMzYzMzQxQURDMjIwN0UyMDUzMDI5NTcyNTA2MTJDN0U5MDM4MDJBRjVDOTQyMzQxNEM1MkY0QzFBRDU1Q0MxQzhCMjkyMkVGOAorMTkzOiA2MkJFM0FBM0E5RDA4Q0I0MUYyQ0EzQUJDQ0I5NkUyRTkxQTI0OEU1NjlGRjU4RjU4QzhCRUNEREE1QjRCMjVGRjQ2QkIzMEVCMzc5OTlFNjEzMUQ5NDRDRjMyNTMzMDIKKzE5NDogM0UwODJGN0RCREY1QkJBNUY1MkNDODcwRjJDNkU5QzYzREZDRDVENTQ3QjE4M0YzRkZCRTM5MkJGMEExRjhGNDk3MENBMjFFNUI5QjQzMDY3OTJDMTM4RDZCMjA1NkMzCisxOTU6IDVDQzM2Mjc3MjI1REEyRURDQzZDQjYwM0VERTlDNjI5RTVEQTgyM0U2RDIzM0FCNzgzM0Y3MEZFQTI4NzhCMkY4RDA4RjM2MUJENUI0Qzc2MDk1NzczMjk3ODREODdERAorMTk2OiA5NTU1RUVFRTFFRTYwRUU5ODFDRUQzRkI2QkY3NDY5OUU1MzgzNDM2QUNDMjgzQkRBMEY5RjZGRkUyMDU2MUVDRTc1RUNFMkM1QTgyQzBBMTU4QzA3MUEzQkE1OUNGNTgKKzE5NzogMEI5NzVEMkFCRDA1NTFCQTk4NzY4MEM0ODkwRjgwREY5M0FGMjI5MkZERDFFNDczMjI1NjBCMEFEM0JERDM4QTY3RDNBNzg0OTdENzhCM0MzOERBNTk3ODQ2QzUxNTlECisxOTg6IDAxNkNFMEI4QUQxNjI4QzdGQkEzNThFRUJCN0MzNjY3RkE5MzU2NjA4NkI5OUYyMEVBNkY4N0ZCQUNCMzIwRTdCQ0VFQkFCRjAwMDg1NTBBNTlBQzFFNkMzQjQ0NzhERAorMTk5OiAzRDEzODExNDQ4MDk0NkEyQUExRTJCNzg5NDhCNkJGRUE5NUY1M0JEOEJFRDgxRUNDRTE2NjA2MkE2N0ZEMTExOTMzQTY5NkU2RkZGQkZDQkRERjcxMDQxOTU1Qzk4QTAKKzIwMDogN0VBNEJCMjUzNEM2NzAzNkY0OURFN0JFQjVGRThBMjQ3OERGMDRGRjNGRUY0MEE5Q0Q0OTIzOTk5QTU5MEU5OTEyREYxMjk3MjE3Q0UxQTAyMUFBMkZCMTAxMzQ5OEI4CisyMDE6IDgwQzM5OUM5NzVBRERBQjEyRkEyMEIzQzNEMDRGMjUyMThERkVCNjc4QjVBODdGOTk2M0E0NjJGNTQ3NDczMkM3QzVGQUZFMEVCQkJBQTk0NjYyNzg5Q0MxMEM5QUFDQgorMjAyOiBDMjdFMjhBNUI2QzdCRkJDN0VEMzcyQjVCRDI1NTVFRjEzNzBGRDk2MDQzNzUzMDE1QjNGQjlBRjMxRDQxRTcxODlENEZBODg2MEIxODM3MDM1NjBBMjk4RDkwQjZFNzUKKzIwMzogQjc5MkIwMjFCM0ZBOTA0QjU5NDhBRkI0RTU2QkQ0QzQwMTE5QUM3OUU1N0VCMjRDMzJBN0JGMEExQTg4OTMxM0Q4MTY5OTdFMzVGMkNBMTkyQjM0RDJGRjlCMDVFRDlBCisyMDQ6IDc4MjhDNjIzNUUyQjhBQzQ2RTRCQ0Q3RjdDNzU1NEVBODFCNUJGQzA0NjEzM0VFRkEwQzRFNjRBQUFBRDcxMTVCMDRFRTA5RTMzQ0I0RUExRkY0NzY5NjBDNjREOUEzNgorMjA1OiAwNjY3OEY5QTJGMjM4OTUzQThENjY0NkY4NTlGQ0MzQkIwQzI5QkFCQTY2OUQ3Rjg5MTE0MkMyQzNBMEJBQzEyMjAyMDBCNEVGRjhDMTdGNUQ3OUUyNjExMjhDNTgyNDgKKzIwNjogMEZENDQ0OEE0N0I2NjIwRkU5MDU1MUE5QUEwNkREOTkxQUIxM0RCRDJBRjE4QTRGMTdBRTRBOUEyNEQ5QTgzRTc2NTNENUY1QTJDNTQ2MzNDNDJBQ0NCMEU1OTE1QTM1CisyMDc6IEFBQkJCODg1N0RFNjBCREJCMjE3NDJERTdBQ0Y3RUI4RDkxODBENUQwQUVEMjNCN0Y3MDhGMDkwMDZDNkZDNTZDRTg1REI4N0Q5NjQyQ0I5MDkwMzhFNzBDMTVDMTU3NAorMjA4OiBFMUJGOTMzQTRGMzJBRjU2QzkyOTkxMTI4NEY5QjA1Qjc5RjAyMTZFRjNBMTUwNDgzRDc0QjJENERDRDc4ODg1MTkwRUIxNjAxQTMyMDE1MEM4NjAxNjgyMjFDNkJBNDkKKzIwOTogOTA3NEIxODczNzJCMDUzNTczOEQ0NjA2QUEwNDc4QkVDQjUyNTFFQUVDOTYxNjk5QzI3OTVGQzAyOEQ2NDFENjAyMzA1MzJDOEY2QTA5NkZFRjQxOUE0NkIwREI4N0ZDCisyMTA6IEE2MzUzMkE2ODRBMTg1MTA1MEUyODYxRjdBQjk0Mjk2RDEzMUY3NjhBOTRBQjAwMTlBOTQxNzM0RTEzODQyRUJFOEFCMUY0MkRCNEQwQTg0RTI2MUNCNDcwN0M3NDI5MAorMjExOiBEREZENjQxMDMzMDhGMDUzN0FCRDhENEYyMjA5RDg5MjBDQjQyRkE5RUNCQzkzMzE4RDQzOEMxNDkzRkUxMUI2MTM0RERGRjk1REJFM0ZDNkI4QUEzMUY4MzNFMzA1QTYKKzIxMjogMDQ0RUQ1NkVGMzEyOUQyOTI0MzY2NTU0NUE1OUZEQzEyNDEyRTEzN0UxRjU1QTU0M0FBQ0U1MTFGOUY4NkNEMzIwMkUzRDI0ODA3QjBGQzg3OEJBNzYyMjNFREM2RjQyCisyMTM6IDJFNDcwQUI1OEE3NjY5MDc1NUFFNjY0M0Q2MTUwMzlFNzY3Qjg0QUU5RTY4NDgwREQ5Mzc5MTNDNDRBQzIzNTBBMjdGREI0NUQ2RkFEQzI0MkJENUY4NDgwOUQ1OUUyQQorMjE0OiBFQzBBQkFDNDc3QjVBRDVGNkIxMURCNEI2OTkyODNGRDQ2NjhEODRDMkJBN0Y4REY5MEE1QkY4M0MwRTFFMjI0NjIzRjBEMkJCM0YyREM2RUFBQzVFNDE0MzYwMzVENTgKKzIxNTogOUZFQkI2QzE2MDQ5MTQ4MzdGNkQwMEY5QUUyM0EzNDU5REVEQ0ZEODFFRjc1NUI5NkEzQ0MxRjYzRTRDRDJFNjdGNUFDMjYwNUU1OTREQ0QyNjEwRjQ5NjJFQTZDMjc3CisyMTY6IDM4NzNCRjFBMTAyRjE2MDlBNjI0RjFBMDk2RTQyMENDNDU5QzAyNTkwNjAwODA4RjdEQTVFM0ZENDlGNUI0OTEyNjlDMTExNkEyQUM3NDE4NUEzMTA1QjVFOTYwNjEyNgorMjE3OiBDRDdFOEMxNkI1OUJDRUU1ODg4REM3RkZDMjhFNjVCNzI1NzBCMjZGM0EwQzg1ODg1QkJDRTgxRTVBNkI2M0Q3ODFGOTUzRTQ5NzM5OURDQjUwNkU4QzRGNUUyMzcxNjkKKzIxODogM0QyNEJDOTFBNDkzMkJGNkQ2MzFFQjc2OTg1NDlCMDNFN0YzOTMwNjYyQjg1MjdFQzEyMkZDMkM3QUE0MUUzMzA4NjIxMDI1NTdGNDgwMjczODY0RkY5QjA2NjI4QkIyCisyMTk6IEYwQjIxQkM5MTlBM0M2MDg5QkUzQ0I3Q0UxMEI1NUQ3NkUzMTU1MkU3NTlGMDQ2NTA4NkE4OUQxRkE0MzVFMjY3MTkyOEFDMzI5RUQ3QjNEN0MxRDcxMjFDMTU4QkFCRQorMjIwOiBCMzJGOUExRkQ4QTk3RTZFOEU3MDEzNzFCRjFBMDE3MDc4QjI2QzNGNEM1OEUzNDJFRDQ1NUIyNTU3QkRBMTZFQUZBQzAwQUVBQzFFRDczMjhDNjVEN0MxRTIyN0ZCODMKKzIyMTogNTQ2OEYxQjkxOTIyNDRDNzM4RUMyMEZBOTc5Rjc0NkNGNjkyOUZDNDhGNjlDNzlGNDNFNDY4NTlBQTAyMkNDNDJFNjUyMDNDRTdDRjc3QTAzOTQwMjA5M0ExNTUyRUMwCisyMjI6IEE1ODE1MUZFMzIxMUMyNzY1MTY5M0I1NUU2N0NERTBFODg2QkIwRDhGMkI2RDkwNjY2MTUxMjRDRjFEQTQwM0RGQTAxNEM2RjE5QzFCMTBERTdEM0JCREJEMEFCOTg4MAorMjIzOiBGRTczRkQzMjc2NDYzRDI3QUU2QTlGNTQ4NzdDRDlCRDM0MTBDNEE0MDM4MUQyNUY1QTkxNTE5NDUzOENBOEM0RjRCNjE1NEVDQjlDRThCMUI3RTIzOTUzREM2NEY2NjQKKzIyNDogMEQ0RUE2ODBCQTdDQ0JCOUQ4OEMwOUY2REFBNkJDNjU1QkRCMEIyQTFDOEMzREUwQkU4OTUzMjgwMjc3OTRFMjIzQTQ1OTY5QUU1OTRDN0EyMUZBQkQ1QzkyQkE2NTMwCisyMjU6IEU2REMwRTY0REM4MDRGRUY5MTU2M0I1NTBBODNCRTdBQkQ1MEY1MUQzQkZGQTc4NUE0MjhFRjk0MzY3NzVERDdFM0E1ODk3OTNDQjI3MTdEQzZCQUQ4QjUzMUNGQzkyMgorMjI2OiBERTE2OEI4RjAzQzBDRTgxNDNGRDE0QkQyRDI5NDQ3NkZCRThEQTg1QjA5QkYyNkM1RDg0NkUyRDE5OTU3Rjg3RDZGRTE1MEIyNzhFQTRCM0JDRDM2QUU1MkQyNTFGRTUKKzIyNzogRjM0NDcyQTRERjJEM0I1MjlDRTU2RTlEMkE3MjFBODM5REIwNURCN0I2NkJFOEFCNzIwMkIwMjRERUZENDZBQ0Y0OTM5NzNERDFGRTg4RDhFRjZFNzA2NzM5MTREQUE5CisyMjg6IDFGNUU4RkZCNDY3OEIzODg5RTdGRUIyMjg4MzU4QTVGMTM3N0E5N0Y3NjY3NEE4RDNFNUVGMzlEMTg1RDAyRjZBMUZCNjBFNDNCQ0M3OUMzMUU2OTc0QjM3RTc0RTUwRgorMjI5OiAxOTBBRkYxRDM2M0M0MTNCRUUxNkM3OEM1NDRBRkQyMDY3OEM3QjExNDFEMzkxN0I2OTQyRTREMTQ4NkVEQkNFRTkwRURFOEE1MEU0NDEyMTlFRDNCMTFCRUZBMDlGMTgKKzIzMDogNjZCQjY3RkMyQkRDMUQ1RThFNDM2Njk1ODgwNEY0NTlBQTY4OUUwNEQ1RkNBRkE4Q0EyMjI2NTZENTY4QjIzRTk3NjA4NkUyQkJBRDk3OUVBMDk3M0FBQTFGQURFQjhBCisyMzE6IDBFMTRDNzBDMDIyMDVBQTI5MzAzRDI0RDY0OTFDQzg0QjY0OEVFQjgwQUU5Q0MyQTA5OTdCN0JCNjQ2RUQzMkM2OUQyQUU0MUMwREMwMDdBRkNFQzUxNEQ3QjA0QkNENgorMjMyOiBFMzhDNDEzRjNGQzEyNzY0NDE1RjM5QTlGMzYzOEFBMTIwNEQzRTgxOEE0M0NGMkVERDlGMkNFMDE5MzZEMzZDNjcyMENGNUJFOEFCQTM2MkY5MkFFQzgxMzg2QTQ4MDAKKzIzMzogQzNFRDBCMzY5N0E4NEIzODhBQTgzREZGOEVBQTY1RjVCQjEyRUYwMDMxNUFENDYyRjFGNkQ4NUQ0MTBEMDIxQkMzMkU3N0FEQzc2M0EyNTRGN0Q5RjFGQjZFRUVGMUYzCisyMzQ6IDhEQzJDM0Y4QzEzQzQzNzA5QUFFQkQ0MDhBNjc5Q0VDNTI0REE4QzhGNDE1N0RBNEJFNTUxRUZENjg3QTM5NUIzMzU3NzcyOEVCNzNFQjQ5OEVDRDBBRDI0ODcwNThFOAorMjM1OiA4QUU4MTdGMjA1NjkwMzY2MUU0RUJGMzdENzI5MzIwMEQ4QkVFN0FFMENBREVBNjcxRTQ5ODc2MjRBNDM3MTJGRDJDMzkyRTM3QzE3RDhFODFFQUVFQkVFOEU5NjY1M0YKKzIzNjogOUE2MjJCQzE4RjNBMDlDOEJDMUM4NjAzQjU1MjYwQkFERjMyQUU3QUJEOERDQjZDREQ5ODBDNUU3QTVCOEEzOEM2RDI4N0E2M0ZFODg1NjdCQjlCMDQ4MTc0M0MwNkQ5CisyMzc6IEI3NEM2MzAzRERGOUYwQUQ3Q0JFRTkyM0Y3RjdGMUM3RkE1MkM4NEVGNjA5RjJCQkNDMDdCOTkxMUMxMkYzRDFBOUJEODE4QTlGMzZFQkI0MEQ0QjQwMEFBNEQwRkRDMQorMjM4OiA1QjFBRDM0MjBFRDU5MkZBM0Q1OTM0MzVDQTZFQkM3MDA1ODNBQzVFM0NBMjg3Njg4N0U1RjE5MEVDMjEwOUExRTZERDA2QUZDNkM5RDdFRDBFOEIwMjcyQjdGOTExNEUKKzIzOTogMjU1NkNGMDc3QTc4OEM0OUJCNkQ2MDBGNEEzQ0VFNjM1QzQ0NDM4MzJEMTY5Rjc2MTUzN0FGRUUyOTgwNzQyQjlGMzRBRkJDODdGNTk4REQwQUVEQzRBODI2RUQ2QTczCisyNDA6IEQ2NDc2OUFENThGNUEzMzg2NjlCOTM1RjM0MzFFNUJFRjMxNjY3RDBBMjQzN0JGRjc4RjFFNTI3NTA3NUY0MzRGRkY2NzVGOTgzM0VBMDRBQzRFNUMyRTJDMkM5OUI4QworMjQxOiAzMjY0Q0FENzBEMjRCNTNDRUM5NTI2OUI5ODBEQUI4NUEzMEQyNENGOEJEQkQ2OEYwRkY4QTQ1QzYyMDhGMDU3MjNBNEIzMjcwQ0QwOTVGQjhCMkQ5QTQxNjdGQjNEM0IKKzI0MjogNEQ1NjQxMTdFODc3MDBDNjlBRkU1QTREOTBGRjUwREVGOEE1NEE5QkYxOTM4MkU0MjkwMjkwRDJCRUUxMDEzNTVFQkIyREZCMkE5RDZEMDQ0QTZEMTJENkRERjdCREJFCisyNDM6IDZBQUQ3MUZBNUQ1RDdCNjNGRUE2NEQ5NEUyMTExNTVCMDFGOEM5RTRCM0Q4NkMzQjlDMDE0Q0E0QkI2QzY2ODAzN0M0NzM5QTA4MkYzN0IyRUM1RkY2RDg1RjBBNThGRgorMjQ0OiBCMzZENTI5RTU1QjVDRjBGRDMyNzNGMjA0Rjc5OEUyMURGNTMzQkU0NjZBRDFBRjM1RUY4MDA4MjEzMjY0MDQ5M0ZEODlBNkNGNDFDQTY4QUVEMDY2RTkzMTgxQTlFRUEKKzI0NTogNzg4MTRFODgzQTI3RDZFRDNBNUIxMjIyNjAwNTlDQzAwRDMxQjhBMEU5MzNGM0MzNzdCQjk5RUYzM0Y0N0IxM0I2QUQ4MjVCNzQwNzg0QkVCREQ5OTE3ODc5QzJEQUVGCisyNDY6IEE3OTc4RDBDNzkwNzBCMjA4RjA3MDI0MTg2NzQ3NkFFNjIyRUE4ODdEMjZCMEY2NzAzRkE4QTQ1NUY0MTE2NDlEODkxOUU2RTEyQzU0MEM1OURGNjBDQTlDMDU2ODRDQworMjQ3OiBCREMzRTAyRDMxREIxRUI3RjA0Q0Q5RkI4ODc2QUE5QzdDQjE4NTJCRDNCRDYyRjU2RTA2MkUyMTZCRTY0OEEzNEZEMzI3Qjg0RTNCNjMzOUY0NDY5NzQ3MDcxMUY2NjEKKzI0ODogOTEzNUU2RDRCMUUyMzU2QzNERTE2QTg1RTRBRjU3MjQzQ0Y2ODYxREZCNkM1M0NBMTNEOTQ4MTM3MUFFRTI4NUI3NURDQ0FGQzFBNjQ0OTlGMUIyQ0JFNEEzQ0Q4MkM4CisyNDk6IEQxRjlCQUE0MDA3QkFENDM3NTA5REI2RjZEQ0EyMjA4NkNCNzg2MDI2NTUzMjQ0QTZGNDgwQzNBNjQ4OEY3RTI2QzQxNkM2QUU4NTg3NDQ3N0JCNTU2M0JBMEFFQ0YyRQorMjUwOiA0OUU1Qjc1MjE3OTRCNkM3MzAwNEJBREYzRDAzOUY0MTg1QkU5QkY4NDk5RkIwOEI5QzhGREEyMTg2QjZDNEJDRDI4MEFFMkQyMDUxQzY3NzVDMTlFQ0YxQzc3NkFDRjYKKzI1MTogQTc1MzRDMTcxNkI1OUFCMUM3QUYzREYwQUUzMkYyMkNEMDJBMTgyM0Y2MUIzMThGMzZERkI1MzZCOEVGNDUxNTExNkEwOTlGOERFRDE5QjAwRUU3QjJEMjQzNTM5OTYwCisyNTI6IDBGMDFGQjMyM0ZBREQ5MzgwQTVFNEVFNjM3MUU4QkRGNkZGQjFGNzBDNEQ0QTFCNUU4QkM5QjI4MTU4MkFFMDUzMUFCMzU0RUE5RjU4QTk2NTY4ODI2RjYxNzJGQzc1QworMjUzOiAxNDVDOUQzOTI2OTA0RDg0MThCNzVDOEQ2NDVENDNBRjY1MTY4NEFFN0ZBRDg4NUFCNDYxNDFCOUVBRDJEOTcyNzczMUY0NEQ1QUFBMDIwNDM5NUUwMjBEMUI1MkRBOTYKKzI1NDogRjY2MzY4MkVGN0ZBM0YzMDBERkYwQjREOUMwRDJEMTI2RjJCQkMxNjRGM0I4OEM4QTIyMDdDMzc5OTQ2NEVEMjA4NkNERDMyNEMxRTg4REFBNkVGMkQ1M0NGN0MxOTBCCisyNTU6IDk4RDdBQzc5NkM0Q0ZCNUQ5OEExQzMyMzY1NkE0QkU4QUZBQUFEMTY4RTVFRTcyQjZCN0EzRkEzMjYwNDYxQTA0M0UyNzI0MzEyMEQ0MTU4NEI1OEYxQUU0NDYzMTIxQQorMjU2OiBGRkRBRUJGRjY1RUQwNUNGNDAwRjAyMjFDNENDRkI0QjIxMDRGQjZBNTFGODdFNDBCRTZDNDMwOTM4NkJGREVDMjg5MkU5MTc5QjM0NjMyMzMxQTU5NTkyNzM3REI1QzUKKworSGFzaDogc2hhNTEyCisgIDA6IENGODNFMTM1N0VFRkI4QkRGMTU0Mjg1MEQ2NkQ4MDA3RDYyMEU0MDUwQjU3MTVEQzgzRjRBOTIxRDM2Q0U5Q0U0N0QwRDEzQzVEODVGMkIwRkY4MzE4RDI4NzdFRUMyRjYzQjkzMUJENDc0MTdBODFBNTM4MzI3QUY5MjdEQTNFCisgIDE6IEI4MjQ0RDAyODk4MUQ2OTNBRjdCNDU2QUY4RUZBNENBRDYzRDI4MkUxOUZGMTQ5NDJDMjQ2RTUwRDkzNTFEMjI3MDRBODAyQTcxQzM1ODBCNjM3MERFNENFQjI5M0MzMjRBODQyMzM0MjU1N0Q0RTVDMzg0MzhGMEUzNjkxMEVFCisgIDI6IDgwNTM2QzYxNzBERDg2MjZEQzA4MUFGMTQ4RDM5RUMyRkQ1RDA5MENDNTc4QTc2NjQ3RTc5MDNGRDM0QkQwMkU0MzMzRUNFNTdCMEUyNEZGMTE2RjQzNDI5QjZGRjU0MTgzNEJENDBFRjBDOEQzNTYzQUNFRjVFRDBGRDI1NEI4CisgIDM6IDgwODFEQTVGOUMxRTNEMEUxQUExNkY2MDRENUU1MDY0NTQzQ0ZGNUQ3QkFDRTJCQjMxMjI1MjQ2MUUxNTFCM0ZFMEYwMzRFQThEQzFEQUNGRjMzNjFBODkyRDYyNUZCRTFCNjE0Q0RBMjY1Rjg3QTQ3M0MyNEIwRkExRDkxREZECisgIDQ6IDRFQzU0QjA5RTJCMjA5RERCOUE2Nzg1MjJCQjQ1MTc0MEM1MTNGNDg4Q0IyN0EwODgzNjMwNzE4NTcxNzQ1MTQxOTIwMDM2QUVCREI3OEMwQjRDRDc4M0E0QTZFRUNDOTM3QTQwQzYxMDRFNDI3NTEyRDcwOUE2MzRCNDEyRjYwCisgIDU6IEI3QjcwQTBCMTREN0ZBMjEzQzZDQ0QzQ0JGRkM4QkI4RjhFMTFBODVGMTExM0IwRUIyNkEwMDIwOEYyQjlCM0ExREQ0QUFGMzk5NjI4NjFFMTZBQjA2MjI3NDM0MkExQ0UxRjlEQkEzNjU0RjM2RkMzMzgyNDU1ODlGMjk2QzI4CisgIDY6IDJGMzgzMUJDQ0M5NENGMDYxQkNGQTVGOEMyM0MxNDI5RDI2RTNCQzZCNzZFREFEOTNEOTAyNUNCOTFDOTAzQUY2Q0Y5QzkzNURDMzcxOTNDMDRDMkM2NkU3RDlERTE3QzM1ODI4NDQxODIxOEFGRUEyMTYwMTQ3QUFBOTEyRjRDCisgIDc6IEI3QzBCNDdGNDJGNzIwMkJGN0QyOEQ2ODM0QkVFMzY1RkMwMUNFM0YwQzhDOERGMjRCNEQ5NDA0MDZDMkU5QzIzMEJBODg4NTRFOTQ2RUJDRDc4NkMxOEM3NDg5NjlGREYwMTIzNjJCN0M5NjQwMDYwNEI2MDU4OTUwRkVBQUQ0CisgIDg6IDhBNDE0QzU4NjBDRjFCRTdCQzg1MzE0NDJGNjlBNjVFRjJFQ0YwQjdDQUQ5OTk0QkNCNDA3MDk3RUI3NENDQjkyRTkzQUFCRDI0QkRFNjAzMzExMjNCNEQ5MDA2ODRDQTdCRTYwMjcwOTlENDk0NkJGNTM3RjRENkM2REYzRDgyCisgIDk6IDhCNUU1RTdGQjY1MzBDQ0UxQkZGRkQxQjFBQTMzOEQzMjgyRTg0ODMzMTlCRjAyOEJCNjc0QkI2QUVCODIwMERBMzg5NjQ3RTNEODYzMTUwM0RDNUM0ODdCQkZBN0QwNzQ1ODQ0OTM2MTVCMDM2ODQ5RTAyNDI2MTBFQTQ3NThGCisgMTA6IDBGODlFRTFGQ0I3QjBBNEY3ODA5RDEyNjdBMDI5NzE5MDA0QzVBNUU1RUMzMjNBN0MzNTIzQTIwOTc0RjlBM0YyMDJGNTZGQURCQTRDRDlFOEQ2NTRBQjlGMkU5NkRDNUM3OTVFQTE3NkZBMjBFREU4RDg1NEMzNDJGOTAzNTMzCisgMTE6IDhGRkFFRTBDQ0NDMTYyODUxRkFGMDUxQUUzODY2N0VFRkQ0MjNDMDE2NEM1MDA1NUY4QURFMDBBRkMzNzA1RTNDREVCOTkwMDAwNEIwRTQyNkNBNjZBQjYzQUEzQjk5QjA3NTI3M0Y0NEZEMzdDMjJBMzU1NUM2RkQxRjM3Q0NCCisgMTI6IEJBNTFCMkE5REEyRjI2RkU4MUZDM0VFMTE1MjQyNTU5MzdFQzZCRUM0ODgzNUVCNDM3QzU5OEM1NTY3NEUxNUFBNTBGODg5MjJERTc1ODQzMzJBNUU0RDI0Nzg3MDkwQ0IxNERGQzNBQkRCMzlDNTVBRURGNkVFMTA4Rjk1MzU0CisgMTM6IEI2RTMwQTQwMTYwMjk0ODZGOTIwNUM1RDE0MTM0NEY4ODVCM0RFMjQ2OEVERkIwQjg3MDU0NUYxNzc1Q0U4MjU5N0MyQTQwNDYyRjM4NUM5NTc3OTBDMjA4MjJEOUU5MjBFRjFBRTIzMDg3OEQ2QjIzRjIyMUIwMTgyODc5Q0NDCisgMTQ6IDc5RDc2MDI0QTMxQ0RCRTU0Q0E5NTFEMjY0QzQ2RTc4RjZGNUFDNURDRDAxOEJBRjg5QUE1ODYzMzNCRTgyQjJENUNBMkJDNjRCOTlDQTJBOTlEOTVBOTg0RjJEQzBENkMwN0U3Qzk2MDU5REQzNDZCQjMyOTZBREUzQUEzM0MwCisgMTU6IDQyMzY3MzZEMDhGMjYyNDRFNzVCNTE2MTQwOTFDQzJDMjkwN0Q1REQxNjJGODQ5N0IxNEQ1OEQwRDk1NEE3NzdDODM5NzU0OUJFRTQ2OEYzMEU0ODAyNTJEOUI4OTMxNzVERjdEMkJGNDE1QTEyOENDQzc5NDA3RDlENUZBNTM2CisgMTY6IERBQTI5NUJFRUQ0RTJFRTk0QzI0MDE1QjU2QUY2MjZCNEYyMUVGOUY0NEYyQjNENDBGQzQxQzkwOTAwQTZCRjFCNDg2N0M0M0M1N0NEQTU0RDFCNkZENDg2OUIzRjIzQ0VENUUwQkEzQzA1RDBCMTY4MERGNEVDN0QwNzYyNDAzCisgMTc6IDdCOUFFODQwQUFCOEJFRTQ1QjAzOENFMzk4RDE1QTg2NzlEQjkyRDBCQTQ2RkE2N0QxQjgxNzc5ODZFNDFFQUNERTkxNUM2NTUyRkMyQUY4Njc4NDI1QjhCRTgxQjU3RTBGN0VFQURDQzkzQjU2QzU4REZDMzhCNEQzM0JGMjVECisgMTg6IDBFRjZBOEMxOUUxOUE0NjZEQkEzMTM5RTJBNDAxMTc1QkVCOUVFMDFGQjU2QThGQzExQTNFNTNCMzQ1RjIzMjc5NTlGNkRBQUNGMENFNjEyMTk4N0QyNDkxMjUxRENGNTUwQzk1RjYwMjZGOTNBMUQ5NkEwRjQxNjRDQjFDNjQyCisgMTk6IEQ2MjIxQUFDQzg4Q0UxNEVCN0RFMEYxNUYyMjYwRUJGNDI5NEQ5QUMzRDc1Qjg3NDY1RUY3QUY5NTcwQzk1OTA3Nzg2MEVCQkM1QzgxNTMwMDA1MDdDRTFFMzlBRUQ1RDAwN0YyMjg2MjEwRUZGRDI2QTExODk2NkVEMTVDMTQzCisgMjA6IEM5QUM0NTYxQTc1MDNGQUI5QzZCNzFDODQzQUY2OTExNDM4NTUwQkNERjQ4ODFFRUMxOEREQTA2RTREOEI4MjBDQ0E5NTIxREZBOUVGNDcyOThDQ0Y2MzA4RkU0QzRGMkY1RTM0REZFQzJBQ0I3OEZCREMwNEQyRUYwQTVBMDlFCisgMjE6IDczQzVENThCMDVFMUU2RkNFNDI5OUY4RDkyOTQ2ODE0MTZCQzM3ODVGNTFFNDAyRENFREMwRTMwQzA2NzFERDQ4MzIxQTAyNDhDQ0MxMzM4OUEwMTJCNTI1MTNGMUI1QkJGODIwRTkxRUI0RjYxNjkyODE4MzQ4NUI0RjFFQjIyCisgMjI6IEFCMTcyNUM1NzQyN0RERjkzQjM0QUFDNjJDMjZGM0ZGMUU0OUNBRDMwREQ0MUFFN0I1RkNFMjM4OTQyNDVFN0U4ODlFMEZDQTVFQzA3NkYyNDdEQzdFOTI5RDcyRkI5NjVCNDU2ODhFNTdEOENENTQyMTI3MTRBMTc0ODBCRTBFCisgMjM6IDQ1NkY2NzU3QTgyRjA1ODkwNDA5OTZCRjg4RjI4RTYxMzE3QzM1ODEzNUE5QUI2RTk2RTIyRjVDQTY4RTJBNjQzOEQxM0QxNzZCMDExNTdBQ0ExRkVFRENFM0MxQTZENUMzQTlCMUQ1QTQ3MTY5MTkxNzM5MkZCOTREMDgzNEY3CisgMjQ6IDUzMzAyNDFFNkYwMUE0OUIyMUFCMEQwMUE5Qzc2QUQ2NjJFOTdBMzI1QkY4RTI0QzRFQjgyQzZGM0I3RDI1MzhBREQ5OEY2MjMwN0YzNkY5MDBGMzkzNDg2MUI4MEZDOTg0NEI3NjFCRTE1NDYwQTFCMTAyQzI2Q0YwNDEwRTgzCisgMjU6IEQ4RERBNjAzREMyMUMyMEE2REQzQzZBNEYzODBDMjk3Njc5RjAzNUQyN0JCQTgyNTU0RDAyRTFGOTVFQ0EyRUIyMDQ5NjE2NEY5NkRDNEI4NEI5QkIwOTQyQjk2QTM3OTZBRkY2MTI1QkI5RTg3MTFFMjY3NEI0NDAxNzZFOTFBCisgMjY6IDgxRTVBM0FGNDYwREQyODgxMzUzRDAwNkFGMzc0NzhDNThBRkZGMTYwMjI0NDEyMjZGQjA0NDM5NzgzREE5MjBEMDlGRDAzRTE5RjQ1QkM4MkY4MjczNUZCRjRGMkU1RjU4OEYxMUFGREI4N0I2OURCOTExMjNDQkYwNUY3RjJGCisgMjc6IDI1QUVDRjdEMjQxRUU1NEU2NjhEREQzNDU1ODJEQjc3N0Y5RjYzMUI5RDI0MzJDRTREMzIxMTlCRUEzOTY4RDlGQTNFMTg0QjEzNTM2NERGNjIyNDdBQjc0QkE3Qjg2QUMzNTQyRjYzRDlGMTg2NTNEODZCOUI0Nzk0NEFCOTZBCisgMjg6IDhBMzcyRjcyMkE5MjJFMjlDRjVDQjIyQkRBQkM2RDI4NDM2NEYzNzZEQTM1NUNBNjVCRTM2REFFMkZBNkYwMzM1NzQ0Q0VGQTkwODlERTU1RDMzMUFFNjRFOUIyRjEwMzdFNzM2MDhCMDNCOTc4NzU4QTIwQTAxMjkyNEFCMjM1CisgMjk6IEQ1N0M1NEFCQjg3QUQyRDUxODc5MEI4MTIzMERBMzM2RjU1MUEwRDg5QTU3RDBBM0NGRTJGNEFDQzU1QjRCMjEwMjYxQ0QxNDgyQkM0MzZGNjJEM0ZDOTZEMTUzNkI4MkEyRTkzRTlBM0RCNUNEMEYxODIyRUVBQ0YzMDc0NjBDCisgMzA6IDYwOTJGMUU3NkYwNEE1OTI2RjZGQ0QxNDlCMThEQzlEQkU4NTgxQkRFNkQyQTE0NjgxNDUyODA0NjM0NzJCNjM2QzcxMUZGNjFGNUNDQTg0RkQyRjA0NDY5N0JEMUREMTgzNDBCM0VEMEExMzFGNEJCQTM1RjgzOUEyREQ5RTBCCisgMzE6IDA2NzRBM0NERjVGN0MxOEMxQjc1MjRDODdDMzYwMzdGM0QwMjY3NTEyRDExRTA1MkY0NTNEQkMwOTdDRkQ1MkJDMzMxOTUwODgwQ0Y5MDQ2NTZDNzA3NThCMkUyNUUyMUZFMkM3RTA0NjJFODYxMTEyQTJEQzlEMDYzNkJCQUZDCisgMzI6IDNEOTRFRUE0OUM1ODBBRUY4MTY5MzU3NjJCRTA0OTU1OUQ2RDE0NDBERURFMTJFNkExMjVGMTg0MUZGRjhFNkZBOUQ3MTg2MkEzRTU3NDZCNTcxQkUzRDE4N0IwMDQxMDQ2RjUyRUJEODUwQzdDQkQ1RkRFOEVFMzg0NzNCNjQ5CisgMzM6IDMwMUYxQ0Q3QjI1QjA5N0FFNEM3OUE5N0U5MkJDRTM1OUQxMjg5RjY3NTRFNzZCNzFFNzYxN0EwNkU3NzgzQTNDQzMwRjUyOTAyMDlCREEzRTZBRjIzOUQwREMwRjNEMUNENEM1RTg2NkY0QzVDMzIwOUVBQkJEN0FBRkI4MDU4CisgMzQ6IEE4QzcxMTRCMjkyQ0M2RjQ2RDczODI0Q0IwNzNDQUVCMjNFQjFFRDVFQkIzN0YwNjRBMEE3NkFENDUyRDkzNkQxREY0MTQzM0ZGQTMzN0MzRjdDRDUzRjVDQzAwNjU4RUQwNjMzMjUyQjY5REUxOTJFNjFEOUYwMDJCMEYxMzNECisgMzU6IEQyRjkyMDY4RTA3QzlBRDA1NzI2OTNDRjU0NkZFNzUwNzBFNTc0ODA3QzAyRjU0ODNBMzFCOENCMjEwNUNBNTVDQzZBQURBQUZFNzQ5NzdGNTgxQ0U5MEY0M0UyQUI0ODI2MEJEN0UyNzNENEE4M0M0NDJFQzQ4NzFDRDg4QUFDCisgMzY6IDFBNDEzM0NERkE2Q0M1MTgzODdEMzkyODE0MDI5NzQ0RDZGQTcxMTIyRUJERkI3MDA1OTUxMkI4OTQ2OUNEQjlEOUI1RTQ1OTAwRTk5RTY3REJBNTRCNDcwODAzNjI5OEE5NDgzNTc1MUVGNTgzMTQ5RjA2QUIyNzJCMkJBMzU1CisgMzc6IEQzMERFNzkwQjQ5MDU3MTdDOTU2QTk1RjYwRDlFRDU5NDhGOUU1MDlCQTI3NjA3RTFDNUM4RkZFMzVBQ0Q4M0Y3MTlBRTA0RDYzMzY0QzBCQ0I3MkJBNTI5QUM3OUMzMjFBRERGQkY3QUVDRjdDQTNDQUM4NDBBMzcyRTZGNkNCCisgMzg6IEEyNUY1RDRCRkZCQzVGMEUzRDVDQUNDM0E5MTg3MDg2NkQ4QzJEMjI1NzM1NTZDOUI5RkEwRDI0RTFENjhDNTVFQjQyNzI2QjE4OTVERjhFNUU4NzBEQTMzNzU1RERCQkFDMTMwQUYyRDk2RDg0REQwRDU3NzYxRDI1RkRCNjRGCisgMzk6IEY0NDAwMUE3NEQwQjA4N0FGMkExNDNCNzc4RENERUMxNTU0QkNFNTk5MkM5NjcyRTNEMEY2NzA0RDAyMkNBMUU3OEYwODc1NDM1NjlDQjk5RDI0OUI4MjBFNjgzMTM4QTJEREM1REMxNzhENTg1MTY3RkREMjY5RDE3Mzk2QTg5CisgNDA6IDY5MkYzNkVCMTE0MDYwRkQwNENEMzg1NTUwMjUyNTFERjk4NURERjY4MUEwNjM2RkJEMjkwRUZFQTZGQ0FDNTIyNjg1OTM3M0YzRTEwRThDQjA3QUI1MzQzNTQ3RUIwQTU0M0MxODQyMEQ3MDUyN0QyQkJEOTAwNDBGOERBQTUyCisgNDE6IDRCMUNFRjg3NUEwMjU2MjQzOThDRDA2REI4NzZFRjlBQjM0RkRCMUI2QTc1QTA3Q0NCNTkxRDlCMjBFQTY2RTI0QkFGMzIzOTExQjVDRThCNjc5MDQ5NDVBMzZDMjg2MzBCMzYxMjk5MzlEMjNEMjYyMTg2MTBDQjA0OUQ3QUVECisgNDI6IERCM0U4MEYxMTUxN0FCNzk3MjY1ODI5MzcxRjI0NUE3QTBBMzg0RTM2QThENDNFNzI4NTJDOEQ0N0Y4Q0UzN0ExNzg0NzVFRUY0NENFOEJERUU1QUIwNTRGNDdFRUQ1MDJFNzZENDlCOUY0QTVBQTM5MjA3N0VEMUU2RjQzRUMxCisgNDM6IEJEMDg1NTFBRUE3NzU5OTExQjM3RTlENDU3NDgyMTlCNDdDNEVDMTdBMkQyQTMwNkQ5QjhGREY5ODJBOUUzMTA2QkRDMUFDRjNGNDdEMzgzQjZEMTZFODU5MTBCQkEwODEyOEUzNUVFNTc4RTdDNTVGMkU5QjlCNTlGNjExMjk4CisgNDQ6IDNCRDhBNzA5REI5QTRFMEI4NzRCMTEzNTY0QjExRUFGODI3MEFEMURBM0E5MjM2REJCMTZGNThGNDMyODUwNzAzNDQ5NjIzOTRDMjIzMUIzOTE3NDAxOTI0QTNGNjg4MTUwQjlBOUVEM0I0MTA1NDdERTNGNTY0NTA3Mzk1OTJDCisgNDU6IEQwMjA2Qzg1NzcyMDJDNjE3NTkyQjQ3QUUxNzhEQTg2N0FDN0RBQUU0RTY1QjkxMkM3NzFDNUZCMDk1ODVGQkQxMEMzNjc4MjA2NEU4M0FDRTc0OUJFMjcwNDU1MDhENTQ0NTMyQjYyOEY2N0RGMDBBNkI3REJBOTc3NUQzRTA2CisgNDY6IDc0NTA4M0U1OTk0MTU4QTBGRUU0RDg0OTAxMkY0M0E4MjJEMTlGMDY4QUZCMzI3QjM3MkE3QThCRkU4MzQ3RTU3OUREMjk0MjRFQzk1MzE5QkY3NUEyNEI0REI0MjgwRDlDMTZDRUJGRjVEOTMwRDYxRDM0OTA5MDYxQTQ3OEFFCisgNDc6IDM1MjdBNUUxRTVFNTk1M0VDNTdGMzA5QzY1MTNDMzQ0MDU1MzE2MDMzNzJCQTBERkQ1NzI1RTY4Qjk1MTBFNTA5MENDNkIzMTdCMkU3MzU5RDJBQkQ1QUREMzUzQUUxNDM1Qjg1NTM1RUI1QjBCOEYyRTA5RDRERDFCQUYzQzhCCisgNDg6IDYyMkJFNDE3OTE2RjFCMEU5Q0U4Qzk1MjE3MUIxMUI2RDJFMjkzMkQ2MTk3Q0MxNzQzMUI5RkZERjAzRkQwQURCNjlCMDhERURBRUJERDBGOTQ4MTJCQzJDNjcwQzg5NEQ2NTE2NUIzMUQyRjI4Nzk1MzJGMkMxNDQ1M0U2QTBFCisgNDk6IEMyRUJEQURFMDM2OEYxREVCRTQ0RjhFMUI3N0U2NkJDMUMyNUU3RjBGQ0VENzc4NEQ2MTU4MTFFMkMwMTE5MkRCQzIxMjUzRTEwNzA5RDBCRUVFNzQ2REU2RUY5M0NGNjVBQTM5QkEyOTU1MUUxMUY2MDJBREREMjdCMTk2MDE5CisgNTA6IDVBQ0UwNjQwRjBEQ0IyNTg3MUUxOTI1Rjk2QkFCNDgxNjJENjkyQkExMzRDOUM3MDUyQTM3RkRGQTQ4OTVCOTBBQzU2QzdGQjBFN0ZBRjE1NUQxNDdBNDY3ODM5NTAwRDk4MEU5RDRFRDFDQzk2NjYxMTc3QUNGMEJBOEQ0MTY3CisgNTE6IDVENDM2MDBDMDRFNTJCRjY1MjRDRENCOURBRDg5QjFDNzU2MzkxMkU3QzdFMkNBM0QzNEIyN0IzQzFEMDdEODVEMzVFQkI3QTY1QUYwNDM0MTU1QUZBMzEwMkE1ODBBRDU1NzQ2OENDMjNFRUExRTE1MUJGRDRFQTgxN0ZDNUIyCisgNTI6IDM4RDc1MzhBQzNFNTFEREZCNjcyNEY1N0IyOUE1RTQ2RDE1QThDMDhGQjI5RDE1RkIwNjgxQTQzMTVCMDNGRDY3NDdCODVEMEVCMkI5RTVGQ0VDNzA5RjM2NURFMDhENjFBMUVCMzYzMDk0QkYyOTJCNTE1NDY3MUQxNUQ2MURBCisgNTM6IDJEQ0UxM0U1ODgyQTMxRjczOTZEOTcwQUU3MkU4OUZCNTkyNzBENzhCRjdCNDU3OUQwODU1QzRFOEJBMjMxRDIzRTU1NjZCNzdFNzlDQ0RDMTE0Njc2MkRBQUE3NEY0OUQ4MkY5RUZDMEQ0RkNBODkxRTc4RjlGRjg2QzYxMzAwCisgNTQ6IDZENzY0NERCNTc1QzVDMjM4REEwMkNDNDI1OTk5NkNGMTYzQTNBM0I1RUNDQzRGQzYyNDQyRERGMDFBQTA1RUYwQzRFREJFM0U2RDIyMERGMTg5Qzk4NEFBNTU3MjZBNDkyMkVGRTAwNDgzMkYyRDg4ODdGMEI4QTkyNjdEQjQwCisgNTU6IDY4NTY2NDdGMjY5QzJFRTNEODEyOEYwQjI1NDI3NjU5RDg4MDY0MUVGMzQzMzAwREQzQ0Q0Njc5MTY4RjU4RDY1MjdGREE3MEI0RUJDODU0RTIwNjVFMTcyQjdENThDMTUzNjk5MkMwODEwNTk5MjU5QkE4NEEyQjQwQzY1NDE0CisgNTY6IDhCMTJCMkY2RkU0MDBBNTFEMjk2NTZFMkI4QzQyQTFCQkZFNkZDRjNFNDI1REE0MzBEQjA1RDFBMkREQTE0NzkwREVFMjBGQThCMjJEODc2MkFGRkZFNDk4OEE1Qzk4QTQ0MzBEMjJBMTdFNDFFMjNEOTBGQTYxQUI3NTY3MUE5CisgNTc6IDkyQ0I5RjJFNEVFRTA3QzdCMzJCMDZDRjQ5MTdGQkU1NDM2NUY1NTI0N0NDOUI1QkM0NDc4RDlGQURBNTJCMDdEMUMzMDJCMzk1OUQwQ0E5QTc1QTYyOTY1M0VBN0MyNDVBOEZCQkEyQTI2NUNEQTRFQTcwQUM1QTg2MEE2RjNECisgNTg6IDIzNDE3RjkzQzQ5OURGOUVBQUYxQkZENkE2MkFBREJDNzExQkZFNTY2ODI5NDNERTVEOTRFMERBQzMyRjczMkI3NjNCRTI4QzMyQUQ1RjAxQ0I5NUU1QjMyMkFFRkY4NDk0QjExMUQ3Q0Q4QkFCNTBFN0M2MDI2OTVFQTZGRTQyCisgNTk6IDRBREZBODgzN0JCNDk5NjA1RDM4NzE2RjgzMDVGRDUwMjU1REVBMkVDNEJGM0VFQjA3NTYwQjNDOTNCNUUzNzI1QzVBNTk4Mjc3QTMyNTAyQ0Q1QzhBRjZDODhENTU3NTZERUIwM0I2OUNGQzI3OEZGRTJCRkIzQ0EyMDJCMEY2CisgNjA6IDk4MUEyNDVCMjQ5MTExQjRDRENENTY1QUU2MEM5REVCNjlGREI1NTJCMTBDOTMyRThEMDYzNTY4NTkwNDIwM0MzN0NDNjVENjc0MjkyNDA1REYyNEE1ODk2ODJCOEFBNjlCRDBFMTZGNjY2NjUyMjkwQkQ3OUFDMTBFM0E5QjM3CisgNjE6IDE1RERGMUU0MzRBODhGMjdERURCODQzNUVEODM3RkU0RjFGM0JGQzVCNkZEMzg3QTk4RTkzRDFDODM0OTNEMzI2NDY3QzdDNTNFRkVFRjE1OEY2QjlDQzIwODEyNjdEOTc2MUEzMkE1MDk0Mzk5NzU0QzBGRDYyRjRDNzIzNzFBCisgNjI6IEUwODAyNjg3NDgzMEUwQjkxMUY1Q0M1MUI4MTU5OUE0REMyMTIwNEY1QzkzODFDQjVBMERBOEY0NTJFRTk5RDlGRjc1OTBCNzk4ODA1QzI3NDM4MjI1NzJFNkQyRTQ3QzJDMUYyRDQyOEVGM0MyOEQwNTI5N0JFREM1Q0FDNEVGCisgNjM6IDlEQzlDNTU5OEU1NURDNDI5NTU2OTUzMjA4Mzk3ODhFMzUzRjFEN0Y2QkE3NERGNzRDODBBOEE1MkY0NjNDMDY5N0Y1N0Y2ODgzNUQxNDE4RjRDRTlCNjUzMENENzlCRDBGNEM2RjdFMTNDOTNGRUIxMjE4QzBCNjVDMkMwNTYxCisgNjQ6IEVFNDMyMEVCQUYzRkRCNEYyQzgzMkIxMzcyMDBDMDhFMjM1RTBGQTdCQkQwRUIxNzQwQzcwNjNCQThBMEQxNTFEQTc3RTAwMzM5OEUxNzE0QTk1NUQ0NzVCMDVFM0U5NTBCNjM5NTAzQjQ1MkVDMTg1REU0MjI5QkM0ODczOTQ5CisgNjU6IDAyODU2Q0VGNzM1RjlBQ0VDNkI5RTMzRjBGQkM4Rjk4MDREMkFBNTQxODdGMzgyQjhBRTg0MkU1RDM2OTZDMDc0NTlBQUQyQTVBRUQyNUVBNUUxMTdFQjFDN0JBMzVEQTZBN0E4QURDRTlFNkFGRTNBRDc5RTlGQTQyRDVCQkE4CisgNjY6IDM3MUREQjk2RUQ1QkU2NTIxMzc5NDU3QUU4QURENzA3QTg2NjczMkI2MjlFRTAwMDc0OTA0RDczODU4RjNGQUU4MjdEODRFNTAzRjM3NzkwNzM0OTBCMjc0RTI5RDY0NEQ3NjE1NEZBQjE4OTQ1MjIyMjg5QkNBNzk4QkE2NDM4CisgNjc6IDk2QTY5M0EyMjI1NkQzOUEwNTk2ODAyMzE5Q0I3QUY5OTdEQjRCRkUzMTE1NzdFMzhGODQyM0RFODFDNTY3QTk2Nzc1RDA2MzQ3MTQzOEYwOTgyRUZBQTZCNzVCNEFCMTczRDlEM0IzRDQ3NjIwMzBCNTIyRkE3MERDRjNCMjdBCisgNjg6IDdEOEFCNjE1NUFCMzFGMjk3NDAwNDJEODI3ODhBNjlFODgwRkM2NDJFNjAwQkVERkM4OTA5OEI5RDJGNEY5OEJDMTExNDFGRDQyMDg3MDk1ODgxMDI5NTEwMERFNjZGNTBDOTZFMUU0RjY0ODlERTk4RjlCRjJENEE5QUEyMjM3CisgNjk6IENFNTYxRjhGNjc5QjRFRUIxREM5N0RCMEY3MjYzMkI5REExQzVCNUMwMjkyQ0JGMDY2MkNBRDk4MTM3NEJGOEM5QTBCRTEzNTU2NTdGQjE4MTk2Rjk4MEU2Njg1RDUyRkU2MDFERDQ1QzZCMEZCREU3QUE1QzlENTJFN0U1OTczCisgNzA6IDEwMTY0Q0ZEMTYyQ0FCQzQ0QzU2RDc2RDM2OTA5NkQ3NTk5NTQwNzRCMDU0N0ZBNzMxMEMzMzg4RjBGQjZCQjJBQTI5NUZBRjFFMjJDNDRDRjU5OTU5QTM3RUZFMzE3Njk4QkMyOUFBNzE4RDU3RUJDODMxQTE0MTQ0RjRFNDhGCisgNzE6IDY1OEIzMzdBOEZBODczQzczQUU0RDE5OTkyQkJBQUQxMEUxMzI1QUZCNERDOEI1NzMzRjg3MDc2MTQyOUI0MjQzQTc5ODJBQjM3NUU1MjlDMUZCRTYzMzlBNDhGOUZCOUU4RkQ2QTU2OEY5Q0FGRTY0MEUxMDJCOUYzOThBMzMwCisgNzI6IDRFQkRGQTBFNjBFMUEzRTdGRUZCOERCNDI0QTVDM0E1MjM2NUYzMjVFQzdGNTEzODlBNDk1NUVFMzQ1M0JCRkM5NDY5MkRFQUMzRkY2QTRFOTQxMDVDMjdENjMyREYyNjI1MEZGMzczMTRDODgyRkRFQjY1RDUzNTM0RjhBOTYxCisgNzM6IERGRTlEMkE2QjBBRDVEQTgwMkQ2OTVCM0I5MTc0NTg1MkM5N0IwMjgzRDlBMDMzRjA0RDc5RDJDQUQ0RkRFNTAwNDhBQzdEODJCQ0Y4QzQwMkIxMDlFNzg1RDM5RkM5RkEwMjAzRjdDRkM2MjBFRTQzNTc3Njg4QkNGM0U2OUJGCisgNzQ6IEYyMTg2OUUxRUFDMzc3NEYzODc4NTcwQUYwREI5QTk0RjQ2NDM3M0MxQTkyRTA5N0QxODBBMzMxQzkwMjhBMThBNjhCRjQ2MjREOEU2MjBCMjIxNkIwMzcwOUYwM0ZCNkNEMTAwMDRGNzc0MzNFRDYwNUIwRjc3MTE2MTE0NUM1CisgNzU6IEYxRjkyOEQzMjJFNjg1MjMwMUFENkZDOTAxRTkxRjIxNTZBM0NFRUZBMjA0MDQ0RERBM0I0Qjc2QTYzNjkyREFBQzQ3OUZGQzZEODNFRUUzQkUwMjhBMUY2NTFEMzUyMDc1OEREMzk1QTFCMjUxRTZDMjYxQjdDQ0U4NkQwNDgxCisgNzY6IDM3OTU0QkIxMUIwQUFBNjdGODAzOTczREREMjcwOUE3M0I5NDdEMEE1RkY4REM0NkMyRDNDNjkxOEM4NzA2OUFEMERGOTA3NTg5RjMwMjZBOTRCMDcxRTBGMDAyMzBGMDBDRjc0QUZFODAxMEMyNEU0ODlDQzhBRjlCOEJENjQ2CisgNzc6IDE0MERCMDRCRjQ2QTE5NEU0NEYwN0Y2QUNFRTgzMjY1NzNBQTA1OTFGODM3MEE3OURGMzIwMDkzQzQ1NzY0QTJBQkFFNTMxRTVBNzQyRjQ5NjU0NDY1N0ZBREZFREI3RjA0RDRCRDc0QzM0N0FBRTIzN0I1RUU1OTkyMUJBODdECisgNzg6IDZEMEQzMEJFNzk2QjZFMTAzOTczOUJGMjRDRTI2RDhEQjk1NEQyNTgxM0Y4RDdGNzQ0NDYxNzgxNkY5M0ZDNzQ4OEI3MUM2OUQ5NkQ3N0M2NTAwN0VGNkEyQkEzMTNBRTA3MzkzMDIzOTVGM0Q5RUFCMDI0NEUzNzJBQjk2OTYxCisgNzk6IDJCOTJFMEQ5MTVCQzdENTYyMTU2NTFCQzlGNzY5NTQ0QzU1RTJBMjcwODBFRTcyNkFCMTRGQUMwQTQzQUM1MUNEMzc4RUVBMzU2REZBNzBFRUMzQzkxNDZFMDhFOTgzNThDNjFGRkZBM0Q0NzdDQ0FDMzVGRDY3MjRBNDRDMjNDCisgODA6IDJDRUQ5RTc0M0Q4NEY4RUM1NjY0QTk5QzZERTIyMzg0NjRFNjExMjlCM0M4NTZBN0ZEMkNFMDhCMTg1RjRENDQ3QTgyOUYyODc4NzBBQzU0MjgxMTRBNzIzNEU0MUE3ODgwMUMxOUVBNUM2MjQ2RkVGRjk2MURDNkE5QjU1ODM1CisgODE6IDQ0NjIzMDNEMDUyQzcwREU3NjI5NjIzNEI3MkJGRjFBRjE3M0U3QjYzRDFDQzBFMjZDNTE4RDEwM0JGM0JBNzhEOUFGNEJBODgwMTMxOTJDQkFEQUQ4MzgwMUI4RkMyOUQwODM4QTE0NEFBM0NCNzIxQUM4NTlFRUFCRjAxOUMwCisgODI6IDg4MEZFRjc5Qjc0QzEwOUYwMzBGM0ZBNkZDQjgyRENBMDM0NTI4Q0NBNjhBMjNFRDFFRTQxMzNDMTBCM0U0NDM0MzRBMzdDNDM2RjA3OUYzRjNBOTIyQTg1NDc1NDlBMzk4NTQxMjA3MjM3OTE1MTlEQkMxNjY5MzZDMjM5QUEzCisgODM6IDEyREU5OTZDOURDRTE1MkM4M0JFNkMwRTY5QzY2NjMzRkM0MjQ0QjQxMjA2NkE1RkU3Q0VBRTI3QkQ0QTEwOUZFQzk1MzMyQzYwRTg3REYwOEExQzcxNEQ5RDJFQ0YyOEE4QTgxRjFDREY4QkIzQ0QyQ0VGNzEwMTFCRjVBNURDCisgODQ6IDc0ODQwNUQxOEZDMDVGMEFGN0Y2MUUwQ0NEREVGRDgwNTVEODY4MjYwMzhDNzdGMkFCMjMwRjdEOTdDODlEMEVGMDlDRTgyQzQzNTJBNzQ5MTcyOUM5RkQ3MDRCMjc5NDQ5RDBERDdEODZDRDJGQTUyRUIzQjVBNTgyREMyMDU3CisgODU6IDc0NjY1M0NEQzQ0QjRDODZCMjlERTVCMjgyNTRCRTkxOThDMDI3MTI0OUYwNjkwNjE1QjA1RjIzQUMwNDU2REQ2NkNEREQxM0QyRjIyOTI0REY1MzBDNzhGREZEMzY5OUUzOEUyOUE1NTBFMjczOUE4MDNGRDFGRkJFQjI5RTU5CisgODY6IENFRDBCM0U0MDExQTZEQTA0MTVDNTFFMzc5OTZFQkJDNTA0MTg2MUZEMTU4NEUzRDk0OEUxRDREQkQ3Rjg2NzNFRjkzOTEwQTEwNzk3NDkwREQ1QzYyMjQ1RUU3RUMwM0Q3Q0U4QjhDMzhGQUUyMUVGQUMxQUU2MDU2QUVEMTQzCisgODc6IEZENEJFN0RDQUM2OTg0MTk2RkFCQTFEODhEMEZGQTlGMzNDQUEyOUZCQUIzRTM4Q0QzRERBN0ZCRDk0ODY2Qzk0NEY5MUI0MDVCM0VDNjEzMDQ0RTRBRjExQkU3MTg3QjE1RDVBRkI0MDY3QzU0RkEwOTIxNUMzQkFDNEZGMDgwCisgODg6IDQ2ODM2RDVBNTc5RDUxNThCOUY0OUQ2RUJFOUE0M0M5RjRBNTVDNzY4ODY5QzNENTQyQkI2MTVGREJBRUM4REQzNEZGQ0M0MDI4ODU2N0Y4QzVFOTM2Mzg1MkVGRjQ0RkVGMEVGQzA5MDRCRTE3OEQzRjc4RUExQjYxQjlFOThBCisgODk6IEMwNUI4NzQ1RDY4QkI5NjQ3RTQxMUU1QUExRjkyNEMyQzlCOTZFN0RERTcxRDE5MEEzQjg3MDlBQ0MyODU2QUJGRjNDMkRCRDcwOTNCMjVGODFDNkI5ODgzRDM3N0U3MjE5Njg2MzJGQTRENTY2RjdGNzJFMTEwOUJERUYyRDc0CisgOTA6IDY0N0EwRTE1Q0M0QkI1RUIzMzMzOTE5Q0M4MjhENjhDNTM1MkYxRkNBQ0U2OTY0RjIzRkNFQjQ2RDBEMjQwOEFFODk2RDMzMTlCMjAyRUM2ODdGM0Y5RTU1MTI2QzA1NzA1RkRCOTA5Q0Q4Q0FDODgzMDRBNjFCNjlBQkNGNjVDCisgOTE6IDJERDFDMzIxRTNDRkI1OEMyRTg4M0Y1REMzRDg3RjAxOTM2QUJBQjNGMUYyNzY0OEI2QUU1NjMzMzNFMzg1MkJDQ0JCQ0JGNDgyMjIzMEU4RjBBMERGRTMyQUI2RDhERTkyQTJCOEIyMjcxRTE3REVCRUVCRjAwRDgzMDQ2Qjc1CisgOTI6IDM4MTIyRDgzMjQ4MDdFMjVEQzhBNzQwMTJDQTlDMDI5MjIyMjYwNDMwM0NFOEI2NkQ3MzI5RkVBMzk0RDg1QjdCRkJFMEY2NTY4OTVFQkZEMjZCRDYwQTNCNTUzQTZFM0U0MDAzMjc2MTU3QjMxQjNBNDc3NzlFMTYzM0Q4OUQ5CisgOTM6IDI3RkZCQTVERDA5NDg1RTE0MUI2NTlFMjE4RDI5MjRBQjAzOTIxNjNDREUyOTZENDEwOUYzQUVGQ0RCMDIyNDFDRjA5NTJGMEEzOEUyNjgwRDVDRkEzNTM2MzM5MUEzMjRFMTI1MTlCNThDMDRFOEFERjBFOUM3QThCNkUxNzEyCisgOTQ6IDY5REE1NUYzQkRCQjFDNzM5N0NCMzgyQjdFODA3NUY2MTU3OTRGNkY4NDUzMzEzQzA5MzNEMzM2NTZBM0JBQjA3QzQyRkY5Nzc4NTA2MjVCMTFDQTMwMjQ5NDQ5N0IwRUYzQTUxRjNEMkVDMkU0QUVDRDI0QkJCQzY2MUM2NTEzCisgOTU6IEVFMTI3MEY2RkU2MjIzQzE5QUQ0ODE0RjA1NDlCNTRDMTFBRTdCNDNBOEYzNDE4QjBGN0JBQzQyQkI1QjA5MzAyNERENEYzQUIwQzlBRjVGRDIwMjVENTBENUI4REMzNTA1RDhGNzU0Rjk4QUMzMjM3MzQ0QTdDMTRGQTUwODE1CisgOTY6IEFEOEVENDhFMDU2Mzc4QjFBRkNEQzBCM0Q1RDM5MzZBQzgyNUY5NkFCRTA5NTNFOUJCODVCMDBFQzE2MDg0QTRGMEJGMTJBMkIwQjczRjBBMjlFQ0I5ODQxQTFEQzdGMDAzNDU2MDE2MjAzRTg5MUFCQTFCRUUxM0ZGRDE5QkYwCisgOTc6IEY2RUI2OTcyQ0I1RkIxNTZGQTIwQTkzRDg2OTVBRTFEOURBOEJCREVDQ0FEQkE4MTEyM0U3RUNCRTkxNzU5NkI1MUU0QTZDRjlFMTQ1OEQ4ODJCNzZCMzNBRUE4RjMyODZDQzdDQTEwODVGMDlFQjNEQjlCOTI2MzA5NTMzOUE1CisgOTg6IDQwQzU0RDQ2OEZFNzYwQTcwOTQ3MjZCOUVGMTJBOThBMUYwRkU1RTcxMTIxMzdFQ0ZCM0E4OERCMDRCMDc1OEVDNTgxNjAzRUZERTM2MTBCMUQ3NkFBODc5RUMzMTkzM0NCNkFBRkEyREZDNTU5QzU5QkEzMTQyNUIwOTFGRkIxCisgOTk6IEREMDMyNEM0RENGRjc5OEYwMjRBMzJBMTMwNjNBMDVBRjY3M0NCNUY4RjAzRTA4QTBEOTMxNDA2Qzg2OEE4NkI1MDcxQkE3MTFGNkRBODBEN0ZEMkY3RDNDRUUxQjdEQzEyRUE0NTZBMUVCRTRDQkNCMjVBQkZCMjc0OTIzOTBFCisxMDA6IEFGMjE2QTcxMjJEMjlENkE3REM3Qjg5QzhCNDFDMTExRTdDOUEwMDc4MUQ0QTg2N0ExRDc1MTEwQjQ4QTVBOUM5MkExNUQxREMyQUVBQkI1M0I4M0JDRkZDNTBGNDRDRkRDQUUyOURDOTk4NEM4Qzg0RkVCRDAxODkzMjJCRTI1CisxMDE6IDFGRDk2RTE5MDVCMDI0RDVGQTg4M0IzQkY3NkMwMEEwMjM1RUU2Mzg2RUFCQUU0RDk2MDJCNUM1RTVFQTgxRkUzQTFERDBEODFCRkIwRjkwNEFCRDREQTdGQzcxRUY3QTJCQkQwREM2QTc2NjkwMjAyMUNFQjAzRDI1NzhCMjA0CisxMDI6IDMxQjc1QjA0N0IxMjE0QjkxNUVDNTY5ODNFMjg0RDE0QzIxNEQ1NjdGMTQ5RUI0NjdBMUEzMjQwODBBQTBEODAyNjRFRDc3MUUyRjkxMTA0QjI2NDJFOUE4MzEyQzBDMDAxNjUyQ0Y0RTU1MzA4QTg3MEE3N0FDRkEwODhEN0MwCisxMDM6IDU5QjhEMTEwNzhDOEI2NUM1REY0RjM5RDFDNTMyQkRCOUM2RThGMkVGMTIxQjk3REM1QkJDMjlDQUY3Njc3NEE3RERDRENFMEYzQkNDRkZENDc3OUU1N0Q5QjIzMTAyRUY1OTZCOEI5NDA0ODAwNzkzNTVDRENGN0VDNTJENDdDCisxMDQ6IDNGMTcwMjQ1OEJBN0YyODQ2MEU4NEEwMzJCQTE2MDQzMDEyNjIyMUFCNTMyMEFFMDI4Mzg3QjYwQUM1M0RFQkM0MkZEMTY5QTIzNzE0QUFDMzAwOUQ1MkJGOUY5NDg1QzA4NzhDMDZBOThCQjQyRDE1NjhFN0QwMzgyMzRBRDIzCisxMDU6IEM4REE3QUJCOTNEMzcwQ0U4QkE2RjJCNThGOTFBQkJGMTMwMkY5Njc5OTU0NENDQUJGNTJENUQxRUFDMzMxOEFENEVDODUzRURDOTlDRjg2REY5MzQxRDZENzk0QjU3QjY4Q0QxRkJDNUUzN0MwM0FBMTAyOTdGOTgyOEQ1RDBCCisxMDY6IEUxNjgwRkFGMzE1OTExRkI3NTg4QUEyRjAyRDVGOTZBM0ZCMDJGNjBEQzNDOTMxMTdCOTdFNEYwMEUyQ0U2ODYyREIwNjExN0E2NjI3QjE0QjExQjlFNEM2MUJCRUVGMDkxMzRFMTY4NDU5OUEzNzBDNjE3MjFBM0IwODY5NDJCCisxMDc6IEJBRUU3MjhGRDM3Q0JFMURBQjNGRDVBOTIyRTU4MTExQkZCQTlCQjQ3RTEwNzkwOUZCREVFQ0NCMTgxMkRFMjdEMkQ4NzAwM0ZDNkY5RjY3OTc3RUQ1OTJFQkZDNzM0NDcwQ0QxRTkwNzg1OEY1NTVGMjFFQUZENkU2NEYwNjBECisxMDg6IDg5MUFGQTM4RjMwOTRFNDg3QkFEQUVCQTAxMkYxMUQzMTA5RUYxOUI4NTgzOTRFRUNBNEM3RjBDMkU4RkZCQjNCODhBNzEwNUM3RDczRTcyNTJFNjdCQkE1MThBQkI2QTMxMkE3QjhBMTE3NDJEMzFCRjUzMjY3Q0YzQjA5RTVCCisxMDk6IDZFNkUzQkUzOTU2MjI0QTk3RjgxM0RFNTVCMzU5NEVDNUUyRjRBNDNCQUI4NzNEOTAyMDI1Njk5QUU1OEZCNDNEQjcxREUxREMxNTlFODNGN0E3RUZGQzE5Q0E1QTAzQzFFRkZEMjdCMDI2RUU5QUFBRDkyRDFENTgxMDREM0RDCisxMTA6IDUxRjJCQTMzMUMyNDU0MUVGRUMwNDJDQzY2Mzk4RDM4ODM0OEM0RkVEQzNGNzdBNERERkRBMzk3NTJBRTI4ODBDNjhFMDQ2NUMxNUIwN0FCRkQ5M0UxNkJBNjM1QUU3Q0E3RDdFMTQ0MDE4QURFNTc2MDdERTg2NDM5OTJGNTBCCisxMTE6IEExQTExMTQ0OUIxOThEOUIxRjUzOEJBRDdGM0ZDMTAyMkIzQTVCMUE1RTkwQTBCQzg2MERFODUxMjc0NkNCQzMxNTk5RTZDODM0REUzQTMyMzUzMjdBRjBCNTFGRjU3QkY3QUNGMTk3NEE3MzAxNEQ5QzM5NTM4MTJFREM3QzhECisxMTI6IEM1RkJENzMxRDE5RDJBRTExODBGMDAxQkU3MkMyQzFBQUJBMUQ3QjA5NEIzNzQ4ODgwRTI0NTkzQjhFMTE3QTc1MEUxMUMxQkQ4NjdDQzJGOTZEQUNFOEM4Qjc0QUJEMkQ1QzRGMjM2QkU0NDRFNzdEMzBEMTkxNjE3NDA3MEI5CisxMTM6IDYxQjJFNzdEQjY5N0RGRTU1NzFGRkYzRUQwNkJENjBDNDFFMUU3QjdDMDhBODBERTAxQ0IxNjUyNkQ5QTlBNTJENjkwREZCRTc5MjI3OEE2MEY2RTJCNEM1N0E5N0M3Mjk3NzNGMjZFMjU4RDIzOTM4OTBDOTg1RDY0NUY2NzE1CisxMTQ6IEMwMkNDQTJFRThCRUQ5QjRBQzc0NDM4RDRFOEIzOTYxOTM0NzkyMkREQTVDQUQyQkMzRUI5RTRDRkQ0RkFGN0NDN0VCOUY2QjIxRUNDQTJDNTVDQjYwRDExRUM0NTAzOTBFQkNGQkExODMxMkU0OTU5OEQyQkM1MjAyMERBOUY0CisxMTU6IEU1MjhBQkQ2QzMxNUVBREUwOUE5ODFFNDg2MUY2MTQ4QzlERDRGMkZDRTBFQTU0Q0QzRTk3OTZGMTcwMzNBMzc1MUZFOUEyMjNBQTIzQ0RFMEUwNTFBMTBDMkJDMjdDMDI5OEJFOTdDQjg3QzcxMTA2NjdBMTE1QjZEMzA2NTdDCisxMTY6IDFCMEJGMjM2MDJEMjcyQTA2QkVDM0U4NkZDNjc1RTE2REZCMDY3QjJBQjY2MjE4MTMxNUM0NTczM0QxOTExMzc0NTRCQTIyNzEzQjUxNDc4QjA5NkRDNTFEM0ZDN0U5NzMwNTA0MzI0NjU1QUU4QjdCREZDMTg0MTE4OTMzRDM2CisxMTc6IDEyRDVFQkMzMDE2Qzc3QURDRDAxRjFERTNGNzkyQzQyMzBERTY3QzBCNTAxMDJFMDNGQkYzQjZCODBCRjkxM0NCNjZDM0U3MjUzMEM2NDQ3MTkwMDNEQjJGQ0IxNTE5NjgwMzgxMkQ4OTc2MUUwQjc4MUU4QUZFRDcyNjhBMzVECisxMTg6IEEzNTI3QzRFNjIzNDkzOTQyNzRGQjE1QjMwQkQ5NUZBQzI3NDcyRTFFNTIxNTE0Nzc1RDJFNjY3QTU0ODBDNTM2N0RBNkVFNTI2QUFDOEQwRDEyMjZDMzNFREExMzU4MDkxQzkzRUM2QjFCODQ2NDczOUQyNUFDNDc5NUVGMTc1CisxMTk6IDQzRTQ5NzI3OUMyQ0U4MDU5MDNBMzNCNTRCNzQ2RUE5MkQ2MDdGN0M0ODA3OTg2Qzg0OTgyM0I4MTA5N0E5MDk5QjU4OTZBQzdDQzY2REYzQTkzRURDOEE5MUI2RjM5NzFENkM3RjU2ODhEQUY2MzU3Mzc3NjBCRDA4MEUyN0IzCisxMjA6IDk2MzY3MDg5NjRDNUZGNjYwMDUxMDMxOUUwN0JGM0ZDRkNCMUY0MDU4RkVDMjc4RUZCNjc3OTY0QkExRTE0MEMxNjMyNTA1NDUyRjgwMkU5OUJDRjA5REEzRDQ1NkRDMzg2OEQxNDlBMDc4OEE3MzBFNDlEMjM5Q0U3NDE1MTQ1CisxMjE6IEQ1RDE3RjU5MkQ0MDFDQjExMUZBN0MzNENGNTAzNUJDMDhFRjZCMkUwRDNFNjREREFCMDg0MzBERUVGQzhCOUMwOUMyMEVCNEU4Rjk4RDhFQkNBQzZGMDlBQTJDMURCQjdDMUIzQjJFRkU3OTIzNzdDQTY2MDBGNzAzNjQzNzAwCisxMjI6IDBFQTA1M0JCRTJFNzIyNjRBRTRGNTQ1MTJDNjIxQzczMzEyMEY3NzdEM0NGOEZDRDhBN0NDMUFCQ0FFQ0ZCOUJFOTNFRTgyMUExNUQxOTQ2N0QyNDlBMjc5NjFFNDc0QUJGQzQzM0I4QzcxMzIzMjExOTg3ODlENUMyQTUwODk2CisxMjM6IEM2NDI5MUMyMTdFMzdFNzU0RjZGNTdDMTMxNkZDRDhBN0MyQUMyNDI2RTg2Nzg2RkZCNjk3OTdDMDY0NTg0OENBQzQxREUzNDVGRjkwQjcyRkNERTkxOEI3Q0ZBRUE0RDY2MTY4N0U2RjczN0EwODhFOTI5NkVFRjRDM0I0RjMxCisxMjQ6IERFRjhBM0NENDkyMTEyNzgxNUY0RDE2NTBGQkY4QjNFRjE2RUY3MjRBMzgwNDUxMzM3NDlCNzM1OUZBNjhCREUzRUVCQzlDQjUxOTBGQjY3MjBFRTNEMjQ0NzMyODZGQzA0NkRFMDY0NkM2QzAwNDJFQTE5NjhCNDhGQjZCRkJECisxMjU6IDZGMzU4MURGMzBBRjc4OUU0NEM3NDU5MzU2RTFDMjQ4NzQ5QjRBNUEzODk3NTlERkYzNzgyNkJEMjc4RDI5M0JBMjI2NEJCODA4QTcxQzQ1M0UyMkEyOTYyREQzM0E5QzAzMzM4QUQwNjBCMzc4MzcxM0VCQThDQzhCNDNFMkMyCisxMjY6IDI2ODFCRjkxMERERkE2ODBCNzIwNDAzNzI5NEQwMEQwRkNBRUU4NEEzNzQ3RjZFMzAyQTE2NzA0QjNCMDhFRkJEQTBFNTdEQkI4RTYxRTkyMzQ4QzhENUZDNUE1OUVBQjc0Qzc3OTQ5QTc0Qzc3NDBDMzA0MTJBOUZDNjVCRjM0CisxMjc6IEVBQjg5Njc0RkVBQTM0RTI3QUVCRUVGRjNDMEE0RDcwMDcwQkI4NzJENUU5RjE4NkNGMURCQkRFRTUxN0I2RTM1NzI0RDYyOUZGMDI1QTVCMDcxODVFOTExQURBN0UzQzhBQ0Y4MzBBQTBFNEY3MTc3N0JEMkQ0NEY1MDRGN0YwCisxMjg6IDFERkZENUUzQURCNzFENDVEMjI0NTkzOTY2NTUyMUFFMDAxQTMxN0EwMzcyMEE0NTczMkJBMTkwMENBM0I4MzUxRkM1QzlCNENBNTEzRUJBNkY4MEJDN0IxRDFGREFENEFCRDEzNDkxQ0I4MjRENjFCMDhEOEMwRTE1NjFCM0Y3CisxMjk6IDFEOURBNTdGQkJEQUIwOUFGQjM1MDZBQjJEMjIzRDA2MTA5RDY1QzFDOEFEMTk3RjUwMTM4RjcxNEJDNEMzRjJGRTU3ODc5MjI2MzlDNjgwQUNBRDFDNjUxRjk1NTk5MDQyNTk1NENFMkNCQTBDNUNDODNGMjY2N0Q4NzhFQjBGCisxMzA6IDkwMjcyQjg5MjEyQzgxQjk3MDA4OTdGNjExRjEzQUMxRDI5MUMzM0E0MzcwMDBDMTQyMzMzNkI0RDk2MkREMzlDRTIzNDEzMTYwRjAyMzk2M0UxMkY0Q0NGOTBEMjc2MkIzMUJGQzY4MThFRjg2NUU4QTdDQkY5MThBOTRDMURCCisxMzE6IDMyNTYzOEQzMEM5RjYzRDdDREJBQTY4OUI3QUY4RDIzODI2QkZFODU5M0IzNjFDNzA0MkQzMjkzOTI2MTQ2QzY1QzJENjA5MkYyMERCNTA2ODI2MjM1OTg2MEIzRTNENTAyQjYwMzRCOUVDOEU3MjUzQTFGQkU0QjIwMDdCNzdDCisxMzI6IEEzRkVFQzIwQzY5Q0RBRjE5MzY3OTVBRUI5MDUyREM1MjVBMjZGNTU1OTA0NUZFNDU4RDRCMjQ2OTdFMjYwQkRBQTQ1QkU4Qzk0MEEwNkFFMzlGREMxRjkzNjVGMzJCQUQ3REU4MjRGRTc3MjJBNDQ0RTQ2OUM3QkMxOThCN0MxCisxMzM6IDNGODBCN0JGQkZDOUQ0NTA3M0ZEQzJFRDkzRjdDMTlGMDFFNEQ0OUNCOTEyQkQyNTY4RjI0ODU2MUY5QzlFRDFCNjc2MjI3MDAzM0Q5RjQyMUM5NzdGOEJCOEI0QTczRjlBOTlENTgwQzAyNDVERDRGNjRBRDM1RDY4Qzk4NDdFCisxMzQ6IEMyOTJFRjA0ODQ0Q0Q3QzNFNDc3QzJDMkZEREVGNDZGQ0VGOTdFNURFQTc5NTVGRDRGNDE4QzdCNDExNEJBMENBMkNBMjMwRDBGNzNBNTg1RUFBQUVBOTI3N0Q3MkI4M0RCNzRBQzVFODg3NDM5QTIyNUMxMDVCMEJGQjVBMzhECisxMzU6IDlGMEREQUI3OTg2REE1NEU2NUVGNkI1MzZCQjRGN0JGRjQ2OEUwRjMxMDgwM0RFMjhEMzkwODQ5MjM0M0U0Q0FBODU1QjhDQUM3NDA5RTNBODkyOEU2M0I5QzVEMUNBRUE3QTQwOEVEMDYxODA5REJBRTFBQjFBNjdCQTFCOTI2CisxMzY6IEM1ODg2N0QzMDlDQTQ4QUY3NEI0RDdFNDlFQ0VENTE0Qzg5RkQ0MzNGOUREODQyRjlCNTBGRkFBNkM3ODEwQkVGMzUzNDhEMDBEMjZEQ0JFMjgxMjJCQTFDRTMzRDRDRDAwRDA5QkE3NkY5ODJBNTk4QjhGNjU3OTAzNjhBRTU5CisxMzc6IEM4QjFENkI0Nzc4OTMyQkMyMUVEREJCRTRFNDhGNzcxMUQ3RTk3RUQ1MzU0RENGMTFCRTk4RTMxMTA1MTBGQjAwNzk0OEMyODhGRDJGN0FBNzFCMkU0MUM4NjMzMERCQkNBMkVENDcyRDE1QjQ0NDgyOEM2REY0MjgyODE1ODc5CisxMzg6IEYxQzBDMDU3Qzk3NEU0QzI3RTQ5N0VFRjUyQTAyOTYzRDU5NTdFQTAyQzdFMUNGRTA2NDIzMDQ4Nzk5QUFGNzQ0NzU3MzJBNzM1MjIyMEE5MTRCRjMyRUJBNkEwQjZGRjI4Qzc3RDI1Q0MzQ0ExQUZCREE4OTg3MEY0RUI1NUQ3CisxMzk6IDA5MkUxMjFGMkM3QTI2MjFBQTM2QUE5QjA0MEVGRTQ0MzVERDY0OUUzRjMzNkJBODI3ODhENTdCOUIxNjQxODRGNUI1QkE2NDREQjQwNzZCNDZGRjlGM0E2QjlGNThENzc1Q0U5NEZFQjY0OEEzNzJEOTYwNDcxQTY2M0I3NEUxCisxNDA6IDQwNkE1MzgyRTlBNTYzRTYwRkRFNUNDNDdGNTJDNkRCODZDRUUyNzFCRDM5NzRBQzZFMjc0QTFCOEM1QTdFQjM2OUE5QjdDRDMxMkMzMDFGODkxRDRFM0E2MDFBODBCOUNBMDYzMDNDNTNDQUJENUQzQjc4MzREQkM1MTA4NDcwCisxNDE6IEIyRDNFRkMyMzkwQ0Y3QTEwOTNCOTNDNTJCNzZEMERENzRCQzI3N0YzRDY3QTg1RjQxNjM1Rjg5RTkyM0FFQkM5NjBCMkJERjhBMTM4NjBDRjMwODNBQzNGQkExM0Q0RkU1RTQyNkYxNDRGQzk4ODU1NEU4OUVEN0EwMzI0NzQ4CisxNDI6IEYxRjcxMDA2MzZBRUVFQzhBRTkzQTJDQUYxRjQ4NTJGMTkyRTFFQzFBRjEzNjk3NzY1Q0FDRTU4RkI0MEI5RDlBRkMzQkJFN0U1MkVEQ0U2NDlGNTNDMUJBRjY1M0NBMjBFNzVEM0U0QUQ1NDlEMDVFQjMzQTY4REQxMUUxODk4CisxNDM6IERCNjA0NDE2REZEMEE3REM1MDlEQkQyQzgzRDVGRURFNUUzMUQ2NDFFRTZDMTQzOTBDRjU5OUNEQzdEODQxNjYwQUM3MDBEM0RFNEJFMzVFMDcwMDZCNzI0QjdERDFCQUEyMUVGQzNDQTZEMzQ2QjNCODU4Mzg0RkY2OTFGOTEzCisxNDQ6IDg3QUUwMEU0OTY2NDk1MTFDM0JGOTQ3QTY1ODA1QURCNUQyMzdBRTg0ODZDQkZGMDFFQkU1MkQ1RDUwNjJBOTlEQjM0MzRFQzIyQTM3REZEQjRDQkExQTU5QUYxRkE1ODI1RUUzREIyQTg1MjRCREVBRTA3RjMyNjQ5ODlCODVBCisxNDU6IEY0NDJCQjY5N0Q0OThGMjAyNkZBMkE1RkZGRjlBQzVBQ0EwMDUyRjZEMjAwRTEwODA1MTA0RDkxQkRGQzcxQTM3NjRDRTAyNzcwMDkyMjlCOUU3Qzk0NTIyMkJEN0M5MDg1MTYzOTg3RTRDRUQwMkFDQzc0MjBBOTZCMEY5NTg3CisxNDY6IDEwNjE1ODg4Nzc5MDlDQUFCRkEzN0Q0OTE1RUVCRDZFNTE3QjhEM0VGRDU2NjBGODcyMDE5MDUwQjNDMTQ2NUYxMUZDOUI0NEU3MjYxMDIxOUYzRjVGMjE3NzI5MzNGMTAxRDlENThCNUM1Rjc5RkQ3NDU3Rjk1NzQ5QkYxMUQ1CisxNDc6IEZCQjRDOUJENjgyMUEwNENGMTU0RENDN0E3NTA3QTJDNjU1NzM5RjM2MzZCNjlFODE4MzQxOEUyQzMzRDk1MURFNkJGREYyQzNDQTYwMzY5NEM0NERFNDQwNTc2NjVFQTQ4MzUyODFBMjc3M0NCOEE4NDk2NUJFMDJERjFGM0UyCisxNDg6IDA4RDU0QjA1RjkwMUZFOTVFQTVCNTZCQTE5REY5MTIwQzY2QUQwMDRGOThCRjhGQ0JEQTlEQTA4NzRFNjQ5NzhFRkMzNDg3N0I4MjI0QTAyNERFMTJEN0I5MjZCNUQ4MzA2OEU4QTcwNEVFRjBGNzM4QTUwNjFFNUY4NDYyRjU0CisxNDk6IEI3OUY1M0E1MTE3NTAzQjVBMDMxNkY4MDFCOEQ0NDgwNzlGMzhDQjkwQ0MzOUJBRkQ0REZFMTY5RTNDOTMxRDYyMkFGN0UyNjgzNUM5QUQ0REIyNUMwRDZBNjg0RTdEQUM0Qjg4QjQ3NTY2M0UwNTYwMUE5OUVFOUZDODkyMkVDCisxNTA6IDIyMDlDRjZCQTQzRjYxRDdFNTc5NjUxRUJCQTA4OTA2ODZBOUNEQzFFMDQ1MjU1NDk0REIwQkM3MzJDOTUxMkFDQkY3MjE1OEQ1NzM4RkY2M0I1MDBBQURDQ0JBMDAwRDI1QTUyMUQ0MUFCNEVFNkQ5MkQzOEU4MDc3Qjc5QzA3CisxNTE6IDgyMzZGN0NGRkE2OEI0OUJFNUMzOEE3QTFCQjY3Qjc0NTQzMEQxNTExQTA4RUYzNDczODNDMzJBQUUxRUY0QUIyRTdGNjNBMjBDOUQ4RTVDRjIxOThCMzJCN0JDNzlCNDcwRDM2QkRGMTJFNzI2M0Q2NjlGQTRBQjg2MDVCNzVGCisxNTI6IDIyOEJFRkU1Nzg4MDkwMDY2RDQ5M0NGODdGNzVDNjY2QkMzQzc1RTBCN0JDNjNFODBEMzgzNDBDRjkxNzYyNTFDNkUxODU5OTJCMjQ0RDRBNUIxQ0VDRkE0MjEyOERBRTZFQzNFRDUzNUFGRjAzOTc2OUUzNjQwNDhDNDQyRENGCisxNTM6IDU5MTcxRDQ5OEJGODA3MzFFMkUzNUQwQTMyREEzNTY0MTlFNjlCOEJBQTVCMTE5NUQ2OTBDRDhBNUIxMTU0MjA4N0EwMDdEOERFM0ZEMDAwQkZCMDNBMDQwOEMwOEU5MkEwQzc3MTI5MjQzNzNGRDY3QTY1MjE4RTRBNEUwRjY4CisxNTQ6IDRGOTRBOEY2QTEzNkU0OTA2OUM4OERGREVBOTM2MUIzNEQ2OEZGQzI1NzI0RjgzNkNDQjAyMUJEQjc0RTBBRUU5RERGRTgwQjkzOEE1QzEyQjAxRjBGMUNDNDlDNTAwRkU3NzA5QzIwOTBGODA5RDlFMDI1NkZDOTNEOTMxMjJGCisxNTU6IERFNUUxN0E2NjhGNzU4NjYyNjJCQkIyMDg5QzlERDg2Nzc1MTAwQzc3OTc0MTYxREY0NkJFMDJBOTU3ODg1NUU3QzgxQzc3MjYzMTA1QzQ3M0ZEMUEyRDU1NDgzMDYzOTcwQzBGNjQzQ0IyNUFBNEI0QUI0NUE0MDg4OEY2MUZCCisxNTY6IDMzMTQwMDFDODI1REZEMkNEMUNFMDhDNzQ2RjBCRTVDNDUxMDI3RjBGQUE0MDE0MzFBQzg0RkFFQTUxNTUzRUZEOUUwNjQ2RkI3RTlCOTRDQkM2NzJEQzk4RkU5ODcwNDY3QzE3NkFBNjQ4RUM3MkJGNjEzMzRCMTNFNDc5RTRFCisxNTc6IDNFRTgwQjE0MjJFMzU3MkI0NkY3Q0U1ODQxOTk4QkQyQjZERjNCNTkxRkI1RTQ2ODUxQjRENTRCRjU3MkExN0RCNTk2M0EwNEVDNkFCOThCQTA3Qzk0MzQ3NUFDMDg4QjREMjAxQUZENjg0RjMwRjQ1QzgwMzc0MDBBN0M5NTEwCisxNTg6IDM3NDNGRTE4QkQ2QUVGMzY4ODdFQUI3QkVCQ0UzNkQ1RDNCNjlERkMzMDZCNThCMUU4QzYyNDFFODFBOUQzODQyNUJBOTkxQTI5QzNCMDdENEY0QjlDNUNDNzYyQjI1NjNDOUU1QTA1QjE5OUNFQTU4MzNEOUZBMDA2MkQxNjFBCisxNTk6IDdGOUY3MUIwODZDQzZENkI2MzA1Mjc2N0NDRDZEMDM0OUMwNzYyODlGNjM0ODMyNDFDRTEwNTA3NkI3NTQ5QjMxODc4OTdENDVEN0I1RkIyMTQ3RTU0RjA1NjUzMDM0N0ExRjkyNjVFNkYzNzk1M0I1OTQxMjcyQTI5RTJGQUM2CisxNjA6IEUwOUNCQkZEM0REQkIyNDc1NUNCRThFNTFDOEJGRjFCRkYzNkU1NzFFRTcyRTZDOTlEREE2RDUwN0FGRTNDNTYyRDQzN0U4NjEyQjUwODU5QUQ1Q0Q2MDg0MjREQkU2MjVFMDE2MkU2Q0I3QjgzOEYyMEU3QjJGOTNGNDBFRDkxCisxNjE6IDJFMkY5MUJENUZFQjVDNzlFOThFRDk3QzUxM0UxN0QyRDk3QjAyQTg0NDc4MEEwMTkwMjY0NzczQzMwNDBBMkNGMDdGQ0IwRTY0MjRCN0EwRTg4QzIyMUJBMzgyNEMxOTA2RkMxNjQ3QUI0MERDMTNFMkQwQ0M1MDdDQkI2QkNFCisxNjI6IDhENEU4N0Y2NkIzNDE4MTA1Q0Q1NTgzQTkyQTJEMkVCRTg4MjRFMUY5MTUwQ0I4NzJGRDNEQTlDOTNEMzgyQzA4MDY1QzgxOEUxQUY5QjI1ODc1QjE0MkU3MDY3NkQ5QTUyNUQ5MDFFQTIxNDJFNDJEODEzQTIyMUQyMUVBRUY1CisxNjM6IDA1MThFNDIwQkI1NjgwQjc0MzY3RjhDRkNGN0REMzJGM0FBRTAwOUEwMDY3RkVDMjI0NTZDRUFEMDgzMkJEQzJBNjBEOEFBN0IwQTJGRENCOTA3MkMwRjExNzE3NzJCQjY2NUMwQjI4Q0QxODQ2MDlGNjNBRDUzRjg5NTk3RjlDCisxNjQ6IDI0NzE5N0ZCQ0JFRTc3QjhFQUY2MzU4RjcxQTQ5RDc4NENCNDNGQjQ0RDk5OTEwQjA1OTlFNjlCMjlFMzFDNDAxOUU4MzBGMzIyRDVBNzExN0E5OTZCREI0RDkxRTVDRjMyM0RCMzU0RTkwMkU0REFFRTgwNTdCM0Y3OEVENUI3CisxNjU6IDM1QTdEODA2QUYwQzgxNjdEMTUwNUIyNUVEQjU2NUU5MzE4NjRDNDUzQkY2MEFEN0I2Njk1MDM1RDc1ODRFNzcxNEUyMUYzNzdCMzVBNUYzQTY5ODc4ODM1NjE3Qjk1MTk3N0MyMDlGNUYzQzU5NjdCN0REOUJFQUE3NUE3Q0FCCisxNjY6IENBOUI2MEVBOERBMkQwQkJGNDY3NDJFMzFBRTg4MkY1MzU1Njg4QjA3MTg4M0Y2OTBBRTc3NUM0RDk0OURFRDgwNzcxNzBGMjZFODlBMThDRkMyNTE2NjJFQThEMUZGNDNGNUE1RjI4RTNGQjQxQURENzQxQUQyRTI4MzQxQTc5CisxNjc6IEE4NjFEQzY0Qzc0NUIwRjVEM0VGQjI3NzNDNTE5ODFBODM2MDI0QkM0MjBCMUZDQzU2NEUwMzAwNjE2M0I0OTExMjZBRDg2MzNGQURCNkRGQ0IyNUMyRUY5MkZEODI4MjNGRTJDN0YxMTYxQTc4Qzc3NjZCNUUyMUY5NkJBQ0I4CisxNjg6IDFFRTZDQTA4NjZGMjI3QjI3Njc4MzI2RkVEQTRDQkY1OTkzNEFCMEVBMkU4NzRFOUVBMjMzQUE1QzY3MTQxQTA1QzFCNEM5NTAwNDRCQjZDOUI5RDE0NjUyMEMyRTM3NzlBRTQ0MTg3QkUwREMxQ0M0MUZBN0Y3MjUwMEIyNDlFCisxNjk6IERBMTAzMjA1N0EyNURBN0VGOTg3QTJEN0NGMjhCOTI3RDNEQkQ5NTY5Nzk2NzlGNUE2QkY0RUEyMEZFMTA4MEJEOEFGMkRDOEIxQzdFMjM2RTc2MDFCRDgyQ0ZENjRERkNBN0QwM0EwMzA4NzQ3NUFERDU3RUFERkZFQzJDQTg1CisxNzA6IDIyRTQxMzI1NDc0QzdDN0VFOTgwMzE0RDc3Mzg5NDdFOUNFM0E5NzBCMkQyOEJDRDY5RDU0NUQ1RTc5NUVENTBBNUExODM5MDIxNjQ1RDAwMENENDc3OUUxODFBNjU5NzQxNzFDMTVCOUIwOEIzNDkyMDVCODdDMTUwNjg4ODM5CisxNzE6IDVGQzVBRDFCOEI3NjIyQzREMTdDQ0UyMzY3OUZDN0UwQ0NFQkEwMEMxRkQ3MTc4MjQ1MjA2Rjg2NkE2QkIxOThGMjZBMDVBM0Q0MjlFMkM1MDhEQUFDNkQwRjY5OEZBRTZDMERFN0ZGOTcxRUFDRUVFODQ4MTMxMTA2NzJGM0FCCisxNzI6IDIyNjRGNjc0QUZDOTc0M0E0NjE4MENFNEU0QUE2QTJCQjMzRDZCRjJGNjJBQTE0NjQ4MTc5NDAwODA2RDcxOERFRThGRTU3REE0OEQ4OERGNUQ1N0I0MjA4N0JCMkZBNjJGODMzQkZGODdCNjY3ODYwNkM2MzM2Q0JDRjM0QjNGCisxNzM6IDY1RTlEMTE4NzgwMUM3NEZDMjNDNEYxOTY5OEY2QjkzNDA1QzY4MUI5M0E4MEQyM0Q0MjdEOUYyQ0JGRTYzRjdFMjk1OUIyQUFENkNEN0VGNkU5ODdBNUZGRDU4NUUxQkU4RTMxNEExRDUwMkZBRTgwMjE1QzUzMzFGOEZGQzJCCisxNzQ6IEUwNDM2QjE3QzJCQjA5NkIwODY5OEY0Q0I0NDgyODdENjkzMjJDMzQ4MTQ3NzZFMEIxQjIxNDg2QTJENUI2OTA2ODg5QTVCMTk4RkRERjY5OUFCMjg1QkRGNTg3ODNERTc5MTMwNzVGODZBREE5NzdERDM1RkQwOUFGMzM2RTIxCisxNzU6IDg1N0JFNjQ4NTcyMkI0QkU0NDVCNzJDN0ExNUExRDBCRUU2QzdGQjJBRDU0MUMyQjRGMDAzNURGQTFFRUFBMTBENEYwQkE1QTEyNEY5ODVERUZBNTNEMEEwNTU0QkIyNThCMjgzMkJDMkNCNUI3Nzg3RDgxMkU5NkE1NUE5M0RDCisxNzY6IDdCMjI5ODY1NEI5NUNEMDAzMDdEOEQ5ODNBMDA3OUNDQ0ZEODlFNTc4ODE4MENBRjM1MkI2Qzk2NUI5QkI1MTUzQzlERTI1QzRBMENCQjVFNTc4ODU5NjYwNjk2Qzg4NzI4MEVBMzc4QTJFMDJCN0M3RjlFNkNDNjM1NTA5RUJECisxNzc6IEM3QURFQ0M5MjhFRjA2NUMyNjNBOTdBMjczQ0U4Q0IzMDQ4NUJGQzAzNUYyRkMwMkM3OEFFMkFDNkI3RjdFRDIwRTkzODk3QzA5OTRDQUI4RDU4NEVFRjlERDQ3NUFBMTYxMzE1OUEwQzg2MkZGMTc5QzY3MTIwRjZCNEM3MkM3CisxNzg6IDA0MUEwM0NDRTY2OTY2NTNFRDVGMzY3NzQ5QUUxQUYzQzI2NTRFOEE5QzBFNzBFNDY3MjYxRTYwMDIzODc2QzcyNzFDQUU1NDVEMTE0QzMyRDM4REE3NTM4OTUyNUNGMENGMUZDMEZBOUE0ODFFQ0Y0M0ZBMEIxRjYxQjg2OEY3CisxNzk6IEU2NTJFNEE4OEVDMUE5QzQ2NzhGOENGREJGQjFENzU4Nzc0NjAwMjU1MTY1RTJCNERDMTVGNjFDMThCOUFERTE0QzVBQ0U3RThBRTcyRDMwNjJCN0YxNzg3NTgzQzU1QjE0QjM0N0Y2NDIzNDRFNzFENkUwMEZENkY0QzU2ODA4CisxODA6IDkwMzY3NUZEOEM3MEJFQkU5RkQwREFEQUIxN0E2MzhBMkREODA4OUFFNjMxMTRFMzZEMjhGNEM3NUQ5NTFENzVCMEJDQUI1MjQ3ODAzNTUxODYyNzIwNzEzQUI0NUE5MzJEQkUxNDFFNDhFOUJGM0VEOUU3NjIwMTU3N0RERDQzCisxODE6IDZFNjEwMTZENDc0RDJBQzI5ODRFNEVBRDQ0RUQ4MkI3MTI5QjBCN0ZGMEI5QUFGNUY0NUNBNjhCMDUyOUE3MzZCODQ2NjI2Q0VCQ0FCOUU3Q0UzNzRENzQ0RTdBMDlDNTFCQkJDNzQ2RDk4OTgwNkYxQTAwNzAzQTAwMjU0MkZBCisxODI6IDIwMDg1RDQ3MTdBMjA0RTg5NkYxMEM1RjdFMUZENDI5QzlBRjg0OEZGRjYwOEEyQzQ2RDM3MzhFRTRGRkI5NDQzODE4ODBBN0E0NTVGRUM2QTFBMjE3NTREOUVDQ0YzRjEzOTBFQTIyRUMxN0ZDRkVDRTJCODZFMzYxNzg0MDQ1CisxODM6IDM3MjE2Q0EwNjkyNTlCQTMyNDRERTM5MzNBM0FENUYzNTcxMkYwQUI3QjlDODFENjQwMDBGMEI5MURENDIzMkI1Mzc0OEI3MDRFN0VEMERENjgyQTc3RDg0QkFDMUI5NDNEMkZGN0EzREJGNUZFMzNERjQ1NUREQjEwRDExNjMyCisxODQ6IDFGMjQ2N0E1NzAwNkQ5NkZEQzc1QThCREFGOTg5MDdBRTcyQUQzMzBDMDQxOEIwNjUxM0MzM0Q4NkREQjgwMEFCNkE1MTczOERCRkRGMUM0NDY3NjAzOEMwOTRFQjVGMzA5QjVCNTkwRUFBQURBNERCMDlGRTc1OTBGRjA0ODg4CisxODU6IEM0NTg5M0Y5MkFDM0UzQUEzQkM4NkE5RUQ2NTk3OTdBN0M3REI5NDlBNjY1NTJBQkQwNDZEQTJBQTdEQTlFNTJGRjhCQTI2NzNDQjQ0QjJDQjA0ODFENTk5RUM3MDAyMEI2RDUwNzkyOTZGMkMxOURCMTYyREM4Q0NENjRCQUZECisxODY6IDk5MTk1NzRBREU5Qjg2NDBCQjBFRjQ1Rjk4RDFEQjZGQjcyNDJDNDMzRDg2Q0Y2RDRCRDY3QUQxNEZGMTVENzRBMTNGNzk2NDI5RTMxMkJBQzU4MTU1MkU2NTk3QkFEMjc5MkYzMUIyNDg4RUQzMDBDNjExODg5MUFERUU5RkIxCisxODc6IDAzNEE5MkQwMEExNzJBNUYwQ0U3MTdGQzM4QUI4RDY4MDE5RjUwMDQ5Mzg5OTQwMUI1NjM4NDVFQjYwNEFCRTA5MDc3NDlBQTgzMEY5MUI1M0FBN0M4OURGRkY4NjY2NEY4QjEyM0FGRjQ3MjFENzkwQTU4Q0MyMkYzNkE1NjBDCisxODg6IDU0NzE0RTY5ODU5QzYwQjA3QzdGRTM0ODU5Qzg1NUEzN0E4MjIwNEQ3MjNGMUE2OTVGNzhENzc2NUNFOTA2RDEwOUZBNjE0NEVCQTlFN0U3QTdEODM0M0E5OTQ5NUU3MkQxNjBERDQ2OEJFRkI3OTREOTc2NTlCOEUyRDhGMUNFCisxODk6IEQ2Q0E0NzZGN0U2ODA5NURGQ0VGNDMzOEJENjQ2NkZDQTkwREY3OEExN0RFOUUyOTExMUQ0NjQ1QjBEQUEwQzZFOThGMTU2QzBFQkY5MTM0QkMyOEVGOUUwRUE2N0U2RDgzOTAyN0RENUNCMDg0RTlFQkE4OTlERDM0MTNFMjIyCisxOTA6IDg2RUI4QzAyNkQ2QkYwOTA2MzZGMDFGNjIzQ0Q5OEI5NjBEMDhFNTIxRTQ0Njk3RjM2NEJDMUFFMTY1NUI5QUQ2RkMzRUEzOEM5MjlBQzlBMjQ0RDE4RTY5NzM0MjU5NEYzRTdERkU2MDU5NTQ1NzlBRTQwNDJDQTY5RTY1QUMzCisxOTE6IDFGNjNFRTYxNUU5QjgwOUUzNjYxQzc3QjUwMjlDNzhBOTJEQzRCRTNDQzRERkQ4QkJFNzhEQzdCN0Q5OTBCQzcxNzIzODAwNDk2OUE4Qjg1NENCQTA0QjREOUIzMEFBMUExOTY0MjY0QzQ3RjIzRDlCQ0RGNDVDNzRGRkZEOTE4CisxOTI6IDAzNTFGNDc1QzcxMUQwNjhCRTdCMDM5NUQ2NTM0M0I1RTI0OUZFQUEzQzNGM0I2Qjg3MTAwQzUwMzA2RUYwMzQwRjYwRUYzNjIzM0YwRTYyODcwNTdFRjdCRTg2MzRCRkM0RDQ2QjQ5RTRBOEYyQ0M0ODM5RjQyRjQ4NkExNkZCCisxOTM6IDE2NjQ1RjlDMEFCQkRBNjAyQjc0MzZERTNCMUM1NUFBRkQxRTg0NDA1N0Q1MUVGODBBOTZDQkMyRkFGRjZFM0IyNzA2QjQ1MDY5QzkwQTUyRDc3OUUxMDE3OTNFQUY0QzlBRTg1Q0FEMEE1QTM5NDE2NEYwQkYzNEMxODlBMkEwCisxOTQ6IDgyMUU0NjE5OUY0RkVCRDlDMTE4RDQ5QjFDRTlGRkU5NTMxMTNFQjZFNEUzM0RBOUUzOUM2NzYzOTlBMEIzRjc5MkMyOTkwQTlGNzVENzI5RTU4RUY3NTA4NTdDMDczMzY1MjY2MzFDQkFBNUVFMDY0MzY5OUM4RTdCN0VFQTEzCisxOTU6IDY0Q0I4M0FCRjJCQjBBOTQ0NTFGMkI5QzNFREQ3NkU0QTE1RjlEMUY5RUUzMkMwNjA3RjVFMDk1MTA4NDM3N0U0ODRBODI1OUIzQzY0NDI4MjkzMzk2Rjc4RTY2NzRDQzNDMDI3Q0VEMUJFMTJGNTY3MUQzMjhEMTMxNzQwNzcwCisxOTY6IENDQzFBNjgxMTRERjU0QkY0NjdFQzQ5Q0IxNUNFMzgxRUJBN0U2RkYwNkE5M0VGQzg4RjQ0MkY4QTM1ODI3RDVEQzY0OTRBNEYzOUU4NDIzMTY3Q0MxQzMyNjlBM0VFNkFFNjg4MjVGRTNFMkU0MEVBRkI3NUM4RDg3OEZGODhCCisxOTc6IDk0RDM4NjkzRjFCMUE4RjEwMTM1NDQ0MTlDNUIzQkEwQ0Q3OUI3MjQ3OEE5MUNGM0FEMzI1RTRDM0NEQ0UwOTJBQjY2NzU3MjIzM0E0RjhERkYxMzI0MDE5NjhCQzc0QzU1M0FFRUU5NkQ1MzBDQTRFNUY2RDQyN0Y5RDJDNDIyCisxOTg6IEVCMDgwRTI1NkZBOUE1RDUxQzNERjU3NzUwOUI4Nzc1NjM5NTg3MDRDMEYxREI2NDVGNzVDRTI0MDA1RDNCMTI1MDNCREMyNkZEM0E2NkU4RjY4ODJEMzQ5MTQyOEE0OTMyRUVENkY1RjU4NTMyRkVBRjUyMUJBNUZFMDVCNzBDCisxOTk6IDlBNDNEN0QwQzQyRDdCNTQwOTk2MzMzOUM5RDk4MDVCQTU5RUQ4QTYzREIxNDQxNjVBM0M3NTlFQjlGNUQ3NTZFNjI4ODMwOEREMkZFNDYwQ0M1MERFMjZFMUExQzE3NDdBQTE2NUZFNkM4QTFGRDVCMEY3Q0IxMzczRTI4Q0FDCisyMDA6IDk4NjA1OEU5ODk1RTJDMkFCOEY5RThDQkRGODAxREIxMkE0NDg0MkE1NkE5MUQ1QTRFODdCMUZDOThCMjkzNzIyQzQ2NjQxNDJFNDJDM0M1NTFGRjg5ODY0NjI2OENEOTJCODRFRDIzMEI4Qzk0QkVENzc5OEQ0RjI3Q0Q3NDY1CisyMDE6IDlGQ0NDNEVFRjc1NzFBMkJFRUUwNjk4MTg1NjIyOENFREFGM0JENDEyRTc3N0Y0QUU4NTI0QjgxQzM3M0ZEQkMyMTA3OTVDMUU3ODhFRTcwODFCQTQyRUMzRkFGQUNDRjJGMzg2QTkwOTZBQzcxOUU2NTY1QjRFMzg0RTM5MEUyCisyMDI6IEU0RThCRjBCRjQwMjQ5MjM2RkI4OEM0NDJFNjY2OEUzMDY3RUQ2MDAxMTg5MDUzQTNBODFFQjc1NTc5ODkxMTI1OEUyNUNBQ0Y3MjgyODExREQ1RTUxNDc4MTE4NDRDNEI1QkY1MkZDMjRBNjg2MkJDQUY5NDA3RjJFMzhFRjVECisyMDM6IDMxN0VDRUQ3MDMwNDRDMUJDRTk0NEREQTcxMTRERDFFMzYyNDRERjZBNTMzNzkwRkFBREJEMEI4RERGMUFDMEQxOThCNTkzRjA0NzlBMDM4MTk4RjRCOTRBQTZFRDI5NDE2OEZFMEVFODAwQzAyRTc2OUVFNzhFRDQ1MjQ5OTQ1CisyMDQ6IEY1RkExRURERTM1OTE3MzA2N0U0NjMxMDdGQ0RGMDBFRjIyN0NCQkEwRUM1RUEwMkVCQkFCRTJDNzlCMTJFNzkzQjk4RkQzQTkwQTcyQkMyNjI0MEQ5OTRGNTNERUQ2NUZFMjJDNkZFODdFQUZEMDFCODQ3OEQxRTg1NjlBODgyCisyMDU6IDYzMjNFMkE4RTM4MENFODY0MzNENUI4RkNDNUUwMkZBQkE0RUQ3RjlDRTVCRDE5NEY3Q0JGQTM2RjY1ODQ0QjYxQTdCREY4RjEzMUNCNEIyOEM1NkFDRkRCOTlDRDg0ODMwNTU3QzU3MUZEMzY5NjUwQjQ2MDgzNzZCQkU0RkRDCisyMDY6IERDNkJEQjY5RDFDNjExMUUyODBGOTkzNjM1QkI1OUNENkU3QjE4OTE2NkRFNTkzQjcxRTE5NEM1RjIxOEQ2N0IwMEVCRTBEMDI4RTk0NDk3NkQ2NTM4REU0MTBDNEQ4NkEyQjZGMjcyQkI5NEZGQTU5MDIwOEM2NDRGOTkyNDBGCisyMDc6IDI0Mjg1OTBEMjA0MzYzNEZCMTAyNjg0MzVFQTkwQUJEMDgyRDQ1MzE3RDJDNTREMDY1NTI5RjE1RTE4MDQzOEFCMThGRTRDQ0M5MTI5NTg0ODA0RUIwNEVBMUNGRjY0NkZBODgxODc4NTIwQkMwMUFGRjM5MkI2RDdEOUMwMzY5CisyMDg6IDFBMjkzNDFCRUY2NzlFNTM1MTkxMTgwOURBMTkwQkFCOEU2NjVBOTM3NUJDMkQ0Nzc3NDIxNzZBNzBBNkJFOEFDRTRBMzU2NDVCRjhEQjk3QUI5QkJBRjFGMDMxMzAwNEFGOEI0Q0YxMEFEQjI2QUMwMTk4QUIxRDQ1RDA1QzQ2CisyMDk6IDBFRjRGQ0YzQjIwMTA5MjFDNTgwNTZCMkJBMzY3QjRDMDlGNTMyNUU2QUU5QUQ3MzJBQjI3NzI4MUQ0QkE3OTdBODQ3QjFDNkE3NEQ4MTUyM0RFQTE2M0FCMEU1NTZGQjUxMDJDMTRFOENEOTRBRkJBQzBBQjBBOTIxQkYxQTI1CisyMTA6IDczQzY1QUYyQTUzRTg4NjBCRUU2M0FGMEJEOEE0NTdCMEFDOEQzQzVEMjQzRkJCMUJDM0Q2NzYyNDcyN0NDMTc1RjNDQTEzM0IyNjM0MkMzNDAxRDc1RENERERBRDlBNjkyRDlBMkIxMjY0RTkwQ0ZGRDRCQjlFNkU3NzVERTE1CisyMTE6IDE4RDNERTA0OTM5NkUyRUE1NDFFMTVDMzFDMEVGMEUwQkQ5MENDQzZDQTM1NjYzODU2Qjk0RjZGMTgxNjBENjE2NjY3QzU1RjNBREMxQjMzRTc0OUY2MEJFNTA1MTRBNEYzQkU0OEFCRTJFMThGQ0ExMEY4NUVEMDI2Njk3MkQ1CisyMTI6IDM0REVENDVFRDI2RkUyMjRFMEM1QTY2QTE5M0MxMUEyQ0MwNzg2RTYxRDQyMTAzNEIzQkIxNjE3NTAxOUM5NTQ1M0YyMEJERTg2NURFRUFDNUMyQkI1Qzg2NTQ0NjQxNDgyQjUxQzRFNjFEOUREQUNDMjM4RDA1MENGQzM1Nzc2CisyMTM6IDAyNUQyMTFCNTU5NzRCQUYwODZCMTM5RDhGQTFBRUE3NUI2MjdDRTFBQjg5NEQ1MkY4NzY5ODc0NTU3QkU1OTQ0RDI3RkQ0QkEzNjA2MjY2QkM3RjUwRDE3MzQ0MzZDNTNENDU1NUExRDJERTBERDJBQzUxRDdGMkZBMzczODY3CisyMTQ6IDA4Q0Q1MjFCMUYxMzQ0MEQ1NzAwMUYzMEJEQTAwMjlGRDhBQTE3RkYyNkFGRUNFRkEyQ0I3RUUxODEyRkM3OUE2OTRBQ0QwQkRBOTgxODQxNTRCNzJGQjdDRTMwNUZGNDg5N0Y0NjZDQkIzOTcyQjQ4NjNGQzg4QjNEQTUyQzI4CisyMTU6IEJBM0JGNDY0MDcxQkRGMTI0MDM0Q0QxMjI0NTFEMzM3NEFBQ0ZCQkM5MTZDODU4QjkzRTE5MTAwNjIzNUY0RDc0MTU2NEJBMURFNzAzNzIyNjlDMTIyRDM2MDEyMUREM0Q0Mjc4NTNCQTc2QzZCNDUwQkI0NkY0MTU2RUE3NTI0CisyMTY6IENCMEIzMjUwNjM5QjRFRDk0N0JFMEM4M0VFRjY3RDM3MERFNzZBQjkwMUY2MDdGNjhGQkYxQkY4QURBMTU5ODREREE3QkVDQUE0RDdGREQ1NUZCRkU0NzlFRUUzRjVFQ0M5Q0RBN0JBRURDOURCN0QzNURDMjI3NDExRENGMjBFCisyMTc6IDhBRkE0MDI0QkQ5NkJENTAzMjNBRkRDRjkyQTdGM0U3QkZCNEM5MjcxMDhDRjgxQzAxRkQzNzhGNjFDNTVEODUwMDIwREJFQjg4QzY1MjhCOEZDMTQxQzM3RUE0ODUyNDgxQzE0OTAyODc4QUZERTUxQTdGMUVBMTYxMkQwMzI0CisyMTg6IDI3MDU3MjY5RUVCNzMzMzNBMUE4MDU5RDZDOUQ2RkQ1QUM4OUVDMjY1MDBGNkY5ODM4Q0FDRUMyMEU5M0YxNzEzQ0Y1NTY5RTgyMEJEODA5Njk1NDdENzdFNTZBQjBDQkY1N0YwMzE4MkVGNDVBQzhCRERFMTE0NDcwQzZEREVBCisyMTk6IEM3OUMzRDRBNDYwOEM3Q0I0QTNEMEMxNEIyOENCQjk2MzY0RjQ0REQ4NjUxRjM2RDkwOEFFNTAyRTU0N0FEN0FENURGQzEwREEyNkNBMjZDNkQ5RTUxQ0Q0MEY2RDdGMUJFQTBBMDMzNTg5NjdEODY3QTk3MzMzREE4QURGM0FGCisyMjA6IDlEQzNCMUVGMTFEODVGRjhBNTczMzBGREY5MUQ1QjVBQjE0MkZCODlBNzJEODgwREFFNDc2RTAyMDc1NUMyRjNCNENBNThDOUVEMzYyMzlFODgwN0MwNTlCRDY2RjgyNkVDNTE3QjdBNDQxODdFNzIxNkU0OEI2ODNCNTY3MDc2CisyMjE6IEQxMUE5N0ZCN0I5NjdFOTBDMkQzOUVGNDJFQkU0OTMyN0NENThFQTY5NzdDODQyNzVCMDE2OThFMzIyREQ5NzAyNEE0MEZDM0VFREQ5NjIwNzMxMDcwOEY3MzdFODFCNzk2NTlBNkM3MjAyRTk2QkU3QUEzNEQxOEQ0MDI2RjYzCisyMjI6IEM5QkQ2MkMwRkNFNDc3MzZBRENEOTI3NUI0Njg0NUU0RUNBMjNCNzM2Nzg2OTNGRUI4RTIxOTA5RUI4NDA1RDRCMDU3QUYyQUZGRDdFNjY3RTA0N0EwN0U2QUNDQURDMkE1OEQ3MzYwQzE3Njg5NzY5REIwMDlGMEE3Nzk1NTYwCisyMjM6IDdGQUZFNkFCRTdDQjhDMTA5QjE4QTE0QkM0RkMyRTRGRkVBREQ1NUE0M0FFN0RGQzU4RDg5QjlDQ0VCQjQ0NjdGRTRDQzE2M0ZGNkVCMTZDOEM3MUI4RUZGMTJFNzg5MUQxMUQzREEyQzZERkE4MTUyREVDNTJCMjMyMjY3QjZCCisyMjQ6IEFFQzM3QjJBMTE1NzcwODE0MkJEQUNGRTc3RTUyMDQxNzRGNTM5RDg2QTEyNzMwQkJFRjYzODZGQ0EwOThBRkYyQTVDMzFFQTFBQjIxRDNCNDUzNzUzMURERUIyN0NBOURBRUEyMkY1Q0M4Qzk5NTZCMkYyNTk1RjUzQkI5MzFDCisyMjU6IDZCMDA1Q0M5MjNEOUFGRjU2MzM0Q0ZDN0E1RTNFQ0Q3MEU5N0M0MjQ3RUIzNzJBMzE4MEU3REM1QkVCRTY3NkU3MkUyRkRGQUNCNzQyNzdCNzBFMTVEODcxODE5NjI2RjQ2NjYxMjg1REIwNEIzRjgyNUM0OUVFRjQyMzkxQjVFCisyMjY6IDUwOUI1Qzk5M0NERjYxRjhGNTA3QTg0QkJEN0Q2RDdBQjA5MDk3MDkyNzQwMDA0M0QzOUU1RjQ3REMyM0FDMjg5RjVCQkY5RDMyNDZFREIxNzREOUM1RDcyQkE3QTA2NkRDMTMxNzFFQzE1RkY5NTA4OTExNDY0Rjg3MzBEMzk1CisyMjc6IDAwQTA1MzAyQzNBNjBFNThDNEM1Mjg0N0Y0NzM3OTIxMkE5MTgwNjA5MzFBNzJCQzY2MEQ4OEU3QkY1NTk5REY2QzM4REU5MjQ1MkI0ODIzQjQ3MjVCQTNFRUU4NjYyMzVDQ0Y0RDU5MDNFOTE3MTRDQUEyMzBDNkQ2RUVCRTQ1CisyMjg6IEM0RkE1RUZBQTMxQ0EyMDVBNzMyRkNENURFQkVENTNDMDlBNEYzMEM1QkQ5QURGMjdGOEMxRENENEIyNzMwOTI1QkI2QUYxNzZFMkU2ODBCMkJFMzI1RjdEREVGQkM5RUU2QzFDQkM0RjA0MjZBRENCNUNCRjE4RDE0MzdFRTZDCisyMjk6IEQxMjUwMDZCODEwN0ZBNjNDMzc1QTc5QUFBMEVCRTgyMDE3MzcyQjdDQzY1QzMxNTdDRTA3OEREQkRBRUU4QzU2OUJCODRGRDg0OTBGMkQ2NkQxNUZFNzNDNjg4MTI0NTc2MUFCMkIxRDRGMDU2NjM3RUNBNzA2NDE3NDVDREE0CisyMzA6IDAxQzdEMDk4RENFNEU0MEE2OURFMTQ2ODI1ODdGRjJBNDBCQUY5ODMzQkRDQzY0MTNBQjU0REIwRTY0MjYyRjI5MEQ1ODRDRDVCMjFDNjU1ODY4MkM1MEUxRTI3QkY1M0ExOEExNkQ3MkFCREU4NzhDMzUyMjE1NkM5RjA0REUzCisyMzE6IEU4NjNEQTUxQ0FFMDk1MDBGNTg5QkUwNUNBQUQ1Nzg4NTg3RTIwMTc5MDc0NDRENzZGNTQ3RDZGMzA2MzJBQzY1OEVFQjg1ODU3MzNCQkI4MTVEMkUxOUVBMDQ2MzY5RUQzQjgxQUE3NzNGQkZGQUMzMTYxNjIzODlFMDE1QTcxCisyMzI6IEZEODIzMkY3Qjc5QkRGOUNDNTJGRjBENURFMUM1NjVFOUQ2NTlCRjE5NzY5MDk2ODk1RDE4MkE4ODAyOEMxQ0RCNzM4N0REMjQwMTI4QTdFQ0ZEMjcwOEVCQTdFOUUzQzY3NkQ2RTJBMDM2RTFCOTkzOTQwRjVDQ0RGMUE3MzZBCisyMzM6IDNCRjg1NzJDREM3QjgyNUNFN0YzMjIyQTNEQjg3RjFDNTJGQkQxQTgyMjlCOTU3QUNGRUYyMDQ3QzU2MDU2NzQ4M0M0Nzk2MDNBM0MwQjBGMUIyREQyNjVCRUMyNTdEMUEzMkM2NTE1MDhEN0E0REY1MDFCQzAxNTY1N0RDQUMwCisyMzQ6IDIzRkM1MzBCMDMxMTM2QTE3QjhCMkZDQjU1MDQ2REU3MjcxMzEyRUUzRTc3ODUxRkJEQjA1Rjc4QTI5NDgxNUNCMjE2OTA3OTE2OEUwNzY0N0EyQkQ1RDA1QzFCQzJCMUVGMUI2NEI5MjlEQUExRjlDRTcyM0Q0NDhDOTM2RkVDCisyMzU6IDgzRDEwMDU3QzdGQjQ5NEZBQUQyODlCNEZFNUYwOTNEQjJBMEM3RDc5QTI5ODE3M0RBNzM1Q0Q1MDYzMjMyQkY5RTUzMjdBN0I0QUE3OTVDOTlGMzIzMDQ1NzkwQjU1NDQ3NkYzN0VCOUQwNEZFM0RGNDBDMDQ3RTQxMTNBNzIwCisyMzY6IDBBQTIwMUVERjQxMjRGNDIxRDQ1MTU1NTRBMUE2NDJFM0I5RDE4QzcwRTA5RTgzQTg4NkQ2RjBDQUIwNzUwRDlCQTFGRkVCOUM1ODdGM0FDQUIwRDhCOUMxRDgzRDc4OTEwMkYwRTJBNkNGRjg4NUM1MEY0ODU5MjlERjQ2MDJECisyMzc6IEI4NUNDNTI5ODE3NTE1MTNCOTE3RjU4MzA1QUZGRERDN0Q5MDFDQjNCQjFEMUJGNURBQjA1OERFQzlCOENEQ0QyREFFNTQzRDczRUM2QUUwODg5QzlENzg1RjkxNzhEMjA3MDU5RDk5NEUxQzgwNzA2RUIyOEFFNjVBQUExMDBDCisyMzg6IDA2OEZFRDcyRTU1NDQ0QUUxMDhFRUZCREQ1OUE5NkRBNEFFQTNEODFBNjY0Mjc0MkMzOEJCRDRFQUFFREE2RUUyMUZCODcwMkMyRjk1MTUyRjFGOTk3QTVGNDBGMDZDNTQ2MTk0ODFGMkVDMzQzQUQzMzQwMDkxM0Q2RkRCNEZCCisyMzk6IENCNEM3RkQ1MjI3NTZENTc4MUFEM0E0RjU5MEExRDg2MjkwNkI5NjBFNzcyMDEzNkNCM0ZCMzZCNTYzQ0FBMUVBNTY4OTEzNDI5MUZBNzlDODBDQ0MyQjQwOTJCNDFERjMyRUJEQ0IzNkRCRTc5REI0ODM0NDAyMjhDMTYyMkE4CisyNDA6IDZDNDg0NjZDOUY2QzA3RTRBQjc2MkM2OTZCN0VFQjM1Q0ZFMjM2RkNBNzM2ODNFNUZBQjg3M0FDMzQ4OUI0RDJFQjNEN0FGQ0NFN0U4MTY1REJCRjM3QURFRDNCNUIwQzg4OUMwQjdFMEYxNzkwQTgzMzBEODY3NzQyOUQ5MUE1CisyNDE6IDRGNjYzNDg0RUZDQTc1OEQ2NzAxNDc3NThBNUQ0RDlFNTkzM0ZFMjJDMEExREMwMUY5NTQ3MzhGRjgzMTBBNjUxNUIzRUM0MjA5NDQ0OTA3NUVENjc4QzU1RUUwMDFBNEZCOTFCMTA4MURGQUU2QUI4Mzg2MEI3QjRDQzdCNEFCCisyNDI6IDgxQTcwNDA0ODU3NDIwNjM4RDcyNjcyQTJERjVBNDlENTJCOUY5RjM4QjM4NUQ4QzUxMjlENkEyQjgyQTY4MkNGRUFGRTY1MDkyNjZFNEIwMEY2QjZBMDczNDFDMkY2NEU0RDRGMjE1MjU4M0VEMTQzRTNEQ0ZCMTRDMUMyMTZGCisyNDM6IDMxRjY1NUExMzM0RTFBNDU1ODRGMTJBMjJFMDNCMDlFM0M2OUVEMEUxRDBGRDU3M0FEMEQ1NkY5Qzg2ODYyMjk5RTMzM0FCRTc4NTkwRTk3RUVBQTVDMkZCMTREQzlGMzRGRUY2RERBRjZFN0E5QkZCRjY4Q0E2NjMxMTk1Q0U1CisyNDQ6IEI2MkM1MTAyRjk3RTVDNEQ3NTU0NzkwQTRDRjUzQTU4RDNFRjQ0QzgzMTQyRDZFMDA5QkQxRjZGQzhGM0ExOUFBMUI4OURBOEREOUJEMTMxMDgyN0E1QkY2NjJCRTdDQUM3NTBDNDhFNkVEOTEzMTNFOTQwRDdEOUU1RUI5QzIyCisyNDU6IDM4MDAyM0MwQkFDNEM5NTI0RkY2Nzc4QkU4MENERjE5NUUzNkZDRjQ2MEU4Q0YxQkYwNEU1QzJGRTA4RTM4QzM1RjE4M0ZCQ0RDMzcyNkZGMjY0MjNGMzUxQzUwNzI3OUY2MjU4RjIzMTlFQTE0MDNCNkM4QTNEQ0IzODRBQzdGCisyNDY6IDQ3M0ZDMTY3QzdDNEJDNDBCMTdEQTAzOUVFMDlGRjNERTg4NDg3OTU1N0U0MEM1MkMxOTgxQUM0MTlDRTAyMUEwOTBCQkFFMDE0ODIyRDA1NzE0MDc3MDA4OTg4RDc0RkYxNTFDOTI3QUE0M0U4OENENjNGRjJDQ0QyMDEyQUY0CisyNDc6IDAwNjA4NkU2MTk1OUIxRDY2QzcyRTc1NDQyN0VBRDVFMUQ2QzAyRDg0MDlGNUMzMkIyRjVBRTQ0OEY1NDY4MkI1MDRBMUFCQzAzNDZDQ0YzOUJGNjZBOEM3QjY5MDgxRTg4NkI0N0E3RDBCMDIyOTE0NjIzOTFDOTUzNTFFRTQwCisyNDg6IDM4MjhCMkVENTQ4Q0ZEMEI3NEJCMzRBMUZFQUUwMzBFMjY3MjIyMTk4RDdFMzg3RTdGRTNFRDUwMzkwNUEyNUQ0QzMzMDFBOUE0N0U3ODM3MkY2ODVCMDU4NDcwNjI0NzZDNTA3NzA4Q0RENzU1ODBBREI1NzlFNENEQzc5QUEwCisyNDk6IEMyNkE3RDVCQjEwM0VERkVBRTJGMTIwMUJFNThBQUMxMjdGNjlBRTM3OERCMDQxNTYwNzRFOTkxNzQ1RDRBQTVBQUIzQkEwNjQ0MDdERkRBOEQzNEU1NzNCN0VDMUY5RjM3Q0VGMDFBREMxN0ZBRjM5M0MyNjJBMDlGMkM0NzM2CisyNTA6IERDRjgyMzA3MTk1MDM1QTY2ODA5NzUxNEZGMUExMEUwQkYwRTgwMkI0OTQ1QTcwMkQyRTE3QUY2REUxRDNEOUJBNDk2MTZERkQxNkQ4MDIwNTRCNTIxOUNBMzc4ODQzODVFODdBNzEzQjRFRjVDN0ZDQjY5NjYxQzdGNTZENUUzCisyNTE6IDQ2MDQ5RUEwREZBNUM0OTQyOUUxNTYyNkFGNEFGMkNFMEE5REQyRjMwOEI5OUJBNkU2RTNGMzA4ODI1MEExNDY4NzBGRDBCNTMyMjhENUExRjFCRjk4NTk0ODBFMUI3QTNEM0RBMTgwQUVGNEQ1RDQxQkQyOTUxQzRFMTk0MjZDCisyNTI6IEMwQTFGQjZDMEE2NUEwRDFBRjQ2QTVGRTg2QzhBODhFOEE4NkY4M0UzNjMxN0Y0MzU1NDI5MjdDOThFNzQ4MzNDODg3Q0EzQUI1RTc5MkNFNUUzRTIxQ0M2QzZBRjQzNzM0OUY1QTY2RkFGQzREQTc5NzQyNDkxQzY0MzkwMUY5CisyNTM6IERDREQyMENENDdCN0M3RDAxMUU5REY3ODU1QjA4MzM2QkQ1MDA3QzQ0MzUyMDhCRDNCOTE0RDdFNTAzQjgzOTkxNjRBMTU1Njk3RTY4QTFCODhBMDYwMEJEQ0Y4NDdBMTE0RDk4RkI3NzNDODFGRUM4MTdCOTIwNTdBNjk5OEE5CisyNTQ6IEUyREEwNzY0NERBQTczQjY2QzFCNkZCQ0RBRTdGRjI4RTNCOTAyNEYwQkM1NDA4RkUwMkMxOEUzNzQ0Q0Y5QkQ2REQ1NEVBN0JGQTFGNkYzQTgxQzg1NjBGQjkzOEZERkY5QTM4QTI5ODUzQTNBODE5QjU4RDEwMjEzQTI5MEVDCisyNTU6IDE1MDI1QzlEMTM1ODYxRkY1QTU0OURGMEJGRDZDMzk4RkQxMjY2MTM0OTZENEU5NzYyNzY1MUU2OEI3QjFGODA0MDdGMTg3RDc5Nzg0NjRGMEY3OEJGRUVBNzg3NjAwRkFBRUJCRTk5MUVEREI2MDY3MUNEMENFODc0RjBBNzQ0CisyNTY6IDFFN0I4MEJDOEVEQzU1MkM4RkVFQjI3ODBFMTExNDc3RTVCQzcwNDY1RkFDMUE3N0IyOUIzNTk4MEMzRjBDRTRBMDM2QTZDOTQ2MjAzNjgyNEJENTY4MDFFNjJBRjdFOUZFQkE1QzIyRUQ4QTVBRjg3N0JGN0RFMTE3RENBQzZECisKK0hhc2g6IHJtZDEyOAorICAwOiBDREYyNjIxM0ExNTBEQzNFQ0I2MTBGMThGNkIzOEI0NgorICAxOiBGMDY5QTQzNUMxNEE4RDRCMDJBN0JCQUVFMDJEMEJDMworICAyOiA0ODQ1NkVBMUNENEM1MUREOEUxMTMwRjYyNURBNEY4RAorICAzOiA2RTQxRjJBRTk1NjA1Nzc5Qzc0Q0I1QUNERkIzNjFDQworICA0OiAwQzdBNkM3M0U5OUE1QzY1QjEyRDNFRjQ3RUNBOUQyQgorICA1OiAzQjgwMzYxQzA3OUQxQjY3OTMzNDU1RDAwQUIxNDI4RQorICA2OiAwRjc0QzRCRkJGQzc0MEEwMjdCMUQ1QkI5Q0FBQUZBOAorICA3OiBBQTU0RUQ1REEzNENFOTIwNUI2NEQxMzg1MzhDMEMxRgorICA4OiAwODQ0NUMzQzNFNzE0MzRERTM3NUNDMjA3MTQzMEVCRQorICA5OiAxRkUwQUU2NDFERUM2RjhDMTcyRjBFMjdFOUU3M0I5RQorIDEwOiA0RTgxNTJCN0VBOEY3QTMxRDg2NDlBNTEzODkyNjBGOQorIDExOiAwRjg1MUM5OEMyQjk5N0MyNDU5QjM0Q0NCMjA5RTQ4MQorIDEyOiA1MkQyNzQ2MUZEN0UwOTVFRTNDNkVENDNCQzI0RUYyMworIDEzOiBFOUYzNDg5MTM1RjNEOTBFQkJBREY5RjkxNkMzNDkyMAorIDE0OiAzNkQ1MjdCNjkzRDY1MzFBNUU0RTE1QkRFOUU0QTY3MAorIDE1OiA1NzQzM0EwN0NDMjAwOTUzQjdGRDQ0MDI1M0Q1RTQ3NgorIDE2OiA0QTkxRkZGOTA3NTYwMjZBOTBBODM5MjcwNjZFQzkxMQorIDE3OiA1QTI0N0MyNkJCMUJBQkRGMTAwOUI2QjQ5NTFGRDc2RQorIDE4OiAwMDJEQTI5QUM5RjUxRjA2NUExRTM3MTY2MEJCNjdCRQorIDE5OiBDRkZFRDA5QUNGMDFERUM5RDM4OTEwMzNDMDk3Mzk1MworIDIwOiBCNzhGMjhBRDM0NjBDOTlENDI4QUYyNEUyNzg3RUZFNworIDIxOiA1RTIwMzE1N0FCNkJBQzU3NjYwRjNEMjVGRjYxNUM5NQorIDIyOiBGMTI4RjVERUMzQTI0QUYzNEFEM0U3RjM4ODNDODA1MQorIDIzOiAyRTA1QUYxMEE2Q0U5QUQxRTBDMEZCQ0JGNjlCMUM5RQorIDI0OiA2N0ZBRkQ5QTVDRUE1RDQxODYzRDAzQUYyOTMyQzVDRgorIDI1OiA1RUQ3RTg2NjUxQUM0QkQwRUVBNzE4Qzc3MzgxMjk3NworIDI2OiA2QkM3NEY3ODI1NkE5ODc2MTk4MTg4MkMzQ0Y3QUFFQgorIDI3OiA0NENDNTczQjk2NDAwMkQ4NzdFNzlCNzVFNDQzM0U0MQorIDI4OiBGQzAyRkY1MzY2NUI1MkI1OERFMzg3ODRFMkMyOEU5MgorIDI5OiBCQzRENjkzMTJERkQyNEVFQTIxOUYyOUZGMkFCMjA3MgorIDMwOiAwMzU1RTgyRjEzMDM0MUVGREQ5OTdFQkRGNDQ2OTIyMQorIDMxOiA0NTNENTAwRDk5N0ZDODVGNkFFMTYzNjVEODNBQ0MwNQorIDMyOiA0MkRGNEM1QTM4NDRGMDBGNzdFRDg0RTEyNTIzNzExMworIDMzOiBFNzgyRDcxNjJCQjU0RTczNUY3QjlGREQ3NUEzRjE0RQorIDM0OiA3ODk5MzAxM0VFRUE3QjE0OTk5REREMzk3OTE5MUQ3NAorIDM1OiAyN0JGQ0VGNTQwRjA3ODJFOUEyODMyOEU4REJFRTU5QgorIDM2OiBEQ0YwMDM1NkRDRDI2NEI3RTM1OUYwMkQ3RDJDREJCMworIDM3OiA5RUUwQkQ3RjU1RUJEODQ0QThEMTE0RjgzQjNFOEZDMworIDM4OiAwMUVGOEYzMTU0QkE5QjlCODE3QUU3MTdGRUEwMEE2OAorIDM5OiA0RENCQzJBQTU2RDc4NUNFNzI0OTc2MTc5MTQ0MkJCQgorIDQwOiAxMDI4MkMwN0I4NzBCQ0NFMEM4REY5RTY4QjRDNURBRAorIDQxOiAwNzU3QjM1OUFCMkQxRDEyMUJBMDFCQjM0NUExMkE4NworIDQyOiA0NTBBRURFRTU3MEEyRTlCMUExOUQ1QjQ3NDdCMkFDOQorIDQzOiAyQzQ1NzEzODk4QkQyNTlCMTBFMjM1MkJFQ0ZENkRFOAorIDQ0OiAzRTkyNzMxMTc1RTUxMEZDRDA3RDI4QUQ0N0REQTBDRQorIDQ1OiA2QThFNTY5MEFENEFBMjE4MDk2NkFDMTUwM0E4MUExOAorIDQ2OiA4MjBCRTE5NUUyQUU4NUMxMTVCRkUzQzM0MTU2NzAzMAorIDQ3OiA5Qzk3RTFGMEU3REEyOUEwNTI3QUM0RjU5RDUyMDEwMAorIDQ4OiBFMTI1Nzg0MkVBMTUyMTY1NDNCRkU4NDUyMUI5RkRDMworIDQ5OiA0MkJBNDg0Q0I3MEE1OEVCM0VCNURBNDNGMUQ1RDVEMQorIDUwOiAyQzY3NDM5N0E4MUNBMzVFREYxRkU3N0I0NDJCQUREMworIDUxOiBBM0UwN0MwMTJBN0M2N0QyQjY1NTdGNEE4QjRERDAzMQorIDUyOiBGMDE3ODlBMkUwMzc5Q0UxNkQ4N0VFREU2NzExNzFDQgorIDUzOiBGRkYxNjU3RUM4NDY1MDdCREVDRDJERDgyOURFQ0RBMgorIDU0OiAxNjczRENFMjNENDMwOTQ4QUI4MThENDdFODNCQjVDRAorIDU1OiAzN0NFQzY5Njk2NzAzMUFCMjEyMjE1NTk5OEEwN0Y1MQorIDU2OiAzMjBCN0Q0REUxN0E3MzFCOUJBNUNCQjQ4OTU2RDYwNQorIDU3OiAxRUIwNzA4OEU1RjU2M0RCQzVERDk4OEFDQjg0QjA0OAorIDU4OiBFNERGRTcwNEU0QzI1RDA2MjI0RDI1NjBCNDY1MDQ2NworIDU5OiA2QzA3MkFENDkxQkVDODA2NjdBNkQ3MUQ5QzhGMkZGOAorIDYwOiA1M0RBOEFFM0YzNkZBOEY4NTA3MkE4OTk2MkYzOUI3NgorIDYxOiA0MDIxMEQxQzdBNzI4QTI3RTFCNUY5MjA1N0RBNDc2NQorIDYyOiBBNEM0RTVGMjcxRjNCREQ3NEM1NjA3ODc3MThFODgxNgorIDYzOiA0NDY2MDMzNDQ3RjFFMUM5QkIxMDdEMTUyQkYwNjA1MQorIDY0OiA0MDZDNkVDMjY0M0NDRUYzOEY5NjQ4NjREMTJDOTE5MQorIDY1OiAxOUY3MjVDQjQzQjE3MURGRTE4RURDQjkwQTlERDkwMAorIDY2OiBFRkFDM0M5RkJGMUFCMEMwRjM2MDFDMThGRTNGMDIxMgorIDY3OiA5QjlCQ0QzMkY3MzVFRTM1M0QzM0E2NTdDMjI5MjQ3NQorIDY4OiA2OEY0QTQyOTRDNjQwQkJFNEIxRTkwRkYxMDdFMDVBQworIDY5OiAzNjMwRkQxQzk1NDJBNTZDODUxMTQwQTdENzZDMEQwMAorIDcwOiAyMUFGREZBQUNERDhGQUI5MTAyN0E2MUY4REFCNkM5MQorIDcxOiAyQzdBQUM5M0I2Q0QxRjhFMjNBQUZENDlGMDRDNjlERgorIDcyOiBBRTRDNTEyNDA1OUNGRkIzQjgyM0U2OEZBQzhDRkIzMworIDczOiA3OUU5NUNCN0U3NTI4NjNBQTg3QTc2OTNEMDY3N0Q4OQorIDc0OiAxQjQ5MUUzM0E5NkQ5ODM4Mzk4QTRGNjI0RTc3M0RBRgorIDc1OiAxRjM5ODZGQzU5M0Q4QThFOTI3QzgyREZFMUY1MzhGOAorIDc2OiBDRTY0RjA5MDI0QTkwN0U3NjcyNkUyOUUxMzY0RTYwNgorIDc3OiBBQzk4ODE3OTgxQjU5Nzg5RTdDN0U5Q0I5RjcwRkRDMworIDc4OiAzODI3QjRCMDc3NDkzQjI4OUMyNUVDM0U5MUIzNkQyNgorIDc5OiA3NTI5NUVFRDY4Rjc1MEU1MDZDNjBBNzgwQjdGMDI4NQorIDgwOiA0RkE0N0YzMjk5MkVFNkM5NkMzQjk2QjZBNjlBNjY1NgorIDgxOiBDNTJFMTQyQjc4MzhENzMxRkMwMzY1MTcwMDNGQTczRQorIDgyOiAzNDUxODEyODcxRUNEMUMwOUU0QTk1Q0RDODAzNjlCMgorIDgzOiBDQjUyNjFBNzkzQTU1REIzMzAxNkVEMjdBMzVBMjBGNQorIDg0OiAyRDA2MzY4RUQ5OEUyNjZFODFBM0M2NDkxQkMyNDg5MAorIDg1OiA2NzdGNjUwOUJEQjNENDRCQ0ZCMDg4QTgxQkZEOTZEOAorIDg2OiA2OTkwMjU2MTkzRkIwNjk3ODYyQUI1QTQ1RkZGMDgyRQorIDg3OiBDODhENjk4RUFGODNFNDQ2QzAyNUVBOTE1OTk4RUEwMQorIDg4OiBEQjhGNjcyRUU4MTI5QkY0QkNFMjU3MDRERDU3QkZBNgorIDg5OiA4MDdGNDkxNDU2RDdFMjhBMzZBRDZFOTM0QjA1M0VBOAorIDkwOiBCQkZENTVBNDgzQ0JEMEY5REZFMThGRUM1MDcwQTE2NgorIDkxOiBERjc3MzUxMDY0MTFDQzI5NTM1NjY0RDg1RUQ4MTYwMworIDkyOiAyNEZFMzUzNURGQ0MyOTVDMkYzNEYzRjg4Q0FDREM4OAorIDkzOiBCODBDREUyMjBDNDE5OURFMzAzQkM5N0ZFRTEyNTA0OAorIDk0OiA4QzI1MjMxMEU5QTcxQzdCQzQwQzNEMjAxMUUyNEVBNgorIDk1OiBCQkRCNzA1RjU2NjBDNTBDNUIwQzg3Q0Q4MTJCNzZGRAorIDk2OiBCRDUxNzkyODU5MTI0MEM3RTYzQzhEOUY5NTdGNkE0QQorIDk3OiA3OEE1MzRBQTBGNDI1MEVFODNENzUyRjNFNjk0MDE0OAorIDk4OiAzMzQ2RURBODgyRjAwRDYwNzNEMTMzQ0U2MDlEM0I4MworIDk5OiA1MUVCMUQzMjM1Q0QzNUEyMzg2RTMxNEY4MTU1ODhDMQorMTAwOiBCNDg2MDE5MkU3OUMxMjMzQTA4RkU1OTVDMDg0MzE1RgorMTAxOiA3OUVEQkUzRTgwODg3QjRGNzQxMTk5Mjk1MzQ3MTE3RQorMTAyOiBBMjc5M0VBNUYyNTQ5MkQzMkQzMTVCMzkyM0U5NDVEMworMTAzOiBFMzk4MjIzRUJFRkM1NkQzNDM3QUE1RkJDNTM0NUNBNQorMTA0OiBEM0U2NTkzRDY5QjI0MDY5QUYwMzc0NjcxRTQ2NjkzMAorMTA1OiAxMkQ2M0Y1QUM0OEY5OUJENTlFQzg2M0I2MTk1MkMxQworMTA2OiBDQzk5QTgxQTIyQjYyQTBGQ0FCNEFFODg5MTEyQThEQworMTA3OiBDQ0M4MkNBNUQzNUE0MjFGRkYzMTNGOTBCOUQxQTY3NQorMTA4OiA1QjRBMjkxMjA3MUNDMzZDRUE2MjZGOUFBRDM0RjI1NworMTA5OiBEMjFGQzgyRDc4QUM5OEM1REE0MzYzODhBQzlBQzZCRQorMTEwOiBDMkYyMkM3QzE2REQyRTFCQkZERDJCRTc5MTVCODY5RAorMTExOiAyQjVBRTVEMTREQzA1MzU1OEExNzAyOTU5MzY3NzYwQgorMTEyOiA3QTZBM0E2NTUzQjJDMzM4N0JFQkUxMTlFODBDRkIyQgorMTEzOiA3RTIyMDZCQ0Y2NjZCODkzNDFDRDc2MTVEMDI5MUUzRQorMTE0OiA5M0Q4N0E2NTgyNTlDN0U5RkREMEJDREY5M0EyNDM1NgorMTE1OiBCREJDMEIwNjJGQTNENzQzQzFCMDcwRjJBQjQzRDE4MAorMTE2OiBFRTBBNTc1QUZGQzk2NkY1OEI5MUJCNjZDQzFFNkI2QQorMTE3OiBDQzI0Q0Y4REYwNzk4RUQyQ0NFRDA3N0IwNkFGMUJBRgorMTE4OiBDQkFFMjY0QkI0QUU2MzVBMTVEOEZEQ0Y3RjlBNjg1MgorMTE5OiBCODc5QjlCQkY2MUI2RjI5MUE4RTQ2NDVCNzBFRTA2RAorMTIwOiBBNkY4OEFENEExNkY3ODlBNThGMTc4Nzk5Mjc5QjQwRQorMTIxOiAzRENCNkIxNjc0NjA4QjExRjQ5NkY0NUM5ODI4RjkwQworMTIyOiBGRjM0QTFDNzc0OEM1QjVGMkYwMTRBREY1NzI0MUM0MworMTIzOiAxQTc3RTJCMjBBREU1RjI4NjcwNTI1MTQ5NUFGMDRCQworMTI0OiBGRDQ3RUU3MzczODYyNjczM0NDNjMzMjdENEY1RUI3RQorMTI1OiBCOTQzOEI1MENDODBDQ0UwMzAzMjQ0NzEzODUzQTBEQQorMTI2OiAwNDBCQzc4NzZCMzFFMjI1OTBGNTg5ODA2OEIxOTg1OQorMTI3OiAxNkVEODJDMzM4NDk1RDA2N0JCRTFENEFFNzMzNDVGQgorMTI4OiBGQkUxQUMwRUVDRjBBQTI2NzFBNkYyNTczM0U5NzExQgorCitIYXNoOiBybWQxNjAKKyAgMDogOUMxMTg1QTVDNUU5RkM1NDYxMjgwODk3N0VFOEY1NDhCMjI1OEQzMQorICAxOiBDODFCOTQ5MzM0MjAyMjFBN0FDMDA0QTkwMjQyRDhCMUQzRTUwNzBECisgIDI6IEMwQzM1NUNBNTU2Q0ZFMzU2QUJDMEE1NTk1QkFCMTM2NEJEODY0NDQKKyAgMzogNkQ4RDM2MDU2N0FDMkNDOEM0RUMxMURFRURFMEFEQ0FDRERBMzg4QQorICA0OiAwNERFNTNGRUQyQkJGQTgwRkE3OTY5OEI0QzU2Mjc1MzZGQjYyMEE3CisgIDU6IDk1MzhGMjRGNzQzMkU5NTJGMDMwQkJBODJDOUY3NDQzNjUwMzUxOTcKKyAgNjogODE3QUJFNzdFQkI3RUExNTlBRjdCQTdERTFFQkJGMDM0RkU2Q0FGRQorICA3OiAzNDA4MzVBRDc5MTMxNkRFNTBEREI1OTgzOEYzRUIxM0Y1NTIxMjI4CisgIDg6IDY0QjcyNjlGQTk3MUIxNjI2MTIyNjVDNzNCOTkxMUY1M0VGNDNCNjMKKyAgOTogQUZERDFFN0Y4RTM5QzYzREVFNzEwNDAxNEFEOUVCMzJCODU1RTBGMAorIDEwOiBDRDJFNDcyNDcwQkU4RkQ3MEEzMDZEQUVDNUM1OUY0ODVFQTQzOTI5CisgMTE6IDU1MDg0NDIwNjAzNEFBNzRFMzdEODEzRkYyOTk3M0QzMDAwQzFEQkYKKyAxMjogREMyNEZENUYzMDlBN0JFQjlBN0NGQTdBMzU0RjJEQjJDQkMxNUFGRgorIDEzOiBBODE0QjRDQkZBRDI0QjdCOTJBRjBFMTY3OTRBNzkzREMxNkQxMEEyCisgMTQ6IDZDMzE2NjE3ODA4QTkzMEJEMjk5NzJCMTE0MkMwQUVDODlFRjAwQUMKKyAxNTogMzI4NkJBQkM3QzQ2MzVGRUM1MkY2N0NFRkYxNDcxRTEyMkQ1MDI1OAorIDE2OiA2OTZDNzUyOEEzNTQ1RTI1QkVDMjk2RTBEMzlCNUY4OThCRUM5N0Y3CisgMTc6IEM4N0RBNkY4N0E2NUNCQ0JDNEIwMkJGRDZEMDFFMjZGODA0N0I1QzQKKyAxODogRjFBQzJFMDk1MUVBNTg3NUI3MTcyM0JBMUEyMTU4REI0OUVFMDczRAorIDE5OiAwOTFBMzk3NjUxMjZFRDQwNjI1NEU3RjgxMEYwMkUwQTYxMjRDNkEzCisgMjA6IDQwMDJDMDMwNTU1MEM1QTcyNjcwNURDRjhEMzg4MEM1NEZFRDA0NTMKKyAyMTogMkI1OTkwNEUxNTg1MzM0QjEyOThBQUU2RUFCMDY1MjZDQUU1QTIzMgorIDIyOiAwRUY5NERGODE2NTkzNzI4NjExNjY0RjRFRDZBMEM0REEyOEM1QUE5CisgMjM6IEZFN0FCOEE1QjBDQTNDODZCNjUyNEUzMzMzNDkwRDA0MzBFOUE0QTAKKyAyNDogRTc0ODAyM0REQTdFNEI3N0RFOEE0NDI0NzQ0MzMxRUJDNjJBNjU5MAorIDI1OiA5NjE0N0ZFNTExQkM2NEQ5NDkzQzc5NUFERThGQzcxQTc4RkE4QzIzCisgMjY6IEQ4MUQ3RDNCNDZENUJBODc1RUMyNjA0ODE0NjE2MjMwRDdBMDc1QTEKKyAyNzogRTgyNDVFNjUzN0ZFRjE0NkEyQ0Y2QUY5QkM1NDQ3MkJFRTYyMTNGNQorIDI4OiAyMzFDQUUyN0I5NkE3ODc2N0EwOTE1QTUyOUFEQjZCNzJBODAwNkI2CisgMjk6IDRENkJFNUJCNkQyOUExNUEyNTlDOEI3QkQ0ODI3RUE4MkY1MTQ0MjUKKyAzMDogM0IwMDU5OTMyOTEyMEU1MzVBNUQxQTQ2RjM1QUQwM0NDQTI3RjlEOAorIDMxOiAyQUY0MTYwREFEQkI4NDcwN0Y3MzU1MTc3QTQ2NDRFNENGNTc3REZBCisgMzI6IEU2QkFCQjk2MTlEN0E4MTI3MjcxMUZDNTQ2QTE2QjIxMUREOTM5NTcKKyAzMzogMUUzNzRBQjkyNEE2NTJGQTM2QjM5NUQ2NTREMjI2QkY5MDFCNkEwNAorIDM0OiA2NzI4MUUyRUZBREYyRUE2MjExQjU0OTQyNkQzQTU5OEI1RTFGMjkxCisgMzU6IDk5MzQ2NEU1NkRDMDM1NzE2MDY0NTc3MjQ1QkNFOTlFRDE3NTM1NkIKKyAzNjogMjk4RDJDRUMwQTM4ODdDOTM1MDEzMDdCNTFGNzVCRkQ1Q0YwQUZFRQorIDM3OiAyQTBBMDJCRjRENjNDQzA5OTc4RUFGM0IzQjg1QTRERTg0NzBCMDI1CisgMzg6IDYyMzZGNkZFMjVENTE1N0JBOTVCRjQ5RUVCQTg5ODdBNkEzMDFEMkMKKyAzOTogQjRERDcxMjE1NjdFOEE0MjhGMTZCQkQ1QTg4MzJGQjJFRTY4QkMwQQorIDQwOiA1RkJFNjAzN0Y4RDhFRkFBOUEzMTVDMDcwQ0UzMzczMDgwMjQ0NDk2CisgNDE6IDA0RDVFMTEyQzQ3RUEwM0JCNjBDQkNFQjlGQzhFRDdEOTJBNjhDMEEKKyA0MjogNjU4Nzk3Qzc3NTYyNTZDOThFMDRFNjcxOEQ5Rjg5NTJGOTBEQTY3MgorIDQzOiA2QTI3RUNENDBCREE0Q0M4MUM1OTlERTk0RDBEMjkwNDcxNkZENDU3CisgNDQ6IEVGNUFDNUI4RTdBMDA1NjBFNzlEQjU0QUFENEI5N0U5OTZEMjc0NUUKKyA0NTogRTY3RUU1Mjc1OTEwQjQ4RjdEMjQ4QThCODQ0REJDMDQxMjU3RDY5NQorIDQ2OiBGRkQyNTZCQ0JCRjBGM0JCNERGNjE1QjQyMzZDMTQ3RkQwOUY0RjFCCisgNDc6IEU4M0E0QjE4QzM0N0YxODgzMDFERDNBQTc4MjY1QUQzQUIzQzAzMTEKKyA0ODogMTM5Njg1ODNCQzAxN0NGMEM1MDQzMzY0QTQyRUMwRDk3RTkyMzcxMQorIDQ5OiAzOUMzM0VBN0M0RjM5M0M0REQ0Qjg4MkY3M0ZEREFDMkQ3RkUxRURBCisgNTA6IDUwQjAwNjhENDZBQTAyNTYxNTA1MzEzMkJCNTNGODhEQzA2MkRCMkQKKyA1MTogNDM0MTk4MjAwNzY2REI2Q0Y0OEM5OTM5MDZGRUFDMkI0NzIyNEEzRgorIDUyOiAwMDRGQkMzODIwMDAyMzU3NDM0RDZCOEFEQ0Y3OUJGQTZGOUUzREQ3CisgNTM6IDEzRjdBOENERERFMDIxQkNBNjIyN0VGRjFBNzFERTE5QUYzOTlCNjYKKyA1NDogRUNBQjg1Q0EwQzJBQUJGMThGNTM1OUY5NEFBRDc1NzhBMDhBQjVFRgorIDU1OiAzQzg2OTYzQjNGRjY0NkE2NUFFNDI5OTZFOTY2NEM3NDdDQzdFNUU2CisgNTY6IEVCREQ3OUNGRDRGRDk5NDlFRjgwODk2NzNEMjYyMDQyN0Y0ODdDRkIKKyA1NzogNjM1QjBEMDVCRTI1NEQ4MjUwM0E5RTFEQjc2NDdERDFCNUQ1RDZCRgorIDU4OiBCRTMxNEI4MThBNjU3RERFRjkyREYxMjNGQ0MxN0MxREFBODUxQzA0CisgNTk6IERDRkJGMDU3NUEyQjNGNjRCMjREQzIwM0JEQ0I0NjI5MEIyMTc5MUUKKyA2MDogQURBNDI1RTg3QThEQUNGOUMyOEI2N0U4QkU0QjIwNEEzMTk2MDAwNAorIDYxOiAzNTY5MUREMTg0RTA4QTgwMjMwNDY3QURDNkU2ODU5OUI3Mjk1QTUxCisgNjI6IEFEMUNBRUZDN0FCREM5MEU3ODc3RDM3Njk1NzUzMkI3RDkxRDc0MzQKKyA2MzogNkQzMUQzRDYzNEI0QTdBQTE1OTE0QzIzOTU3NkVCMTk1NkYyRDlBNAorIDY0OiAyNTgxRjVFOUY5NTdCNDRCMEZBMjREMzE5OTZERTQ3NDA5REQxRTBGCisgNjU6IDEwOTk0OUI5NTM0MUVFRUE3MzY1RThBQzREMEQzODgzRDk4RjcwOUEKKyA2NjogQUM3NDUxODZDODJERjg2OTc0NTgzMjYwNTFBNkNFN0U0RTlDMUMxQQorIDY3OiA1REU1MEJCQjExQzYyQUJFMjJFN0VEQzI4OEI3RDFCNkExQ0ZDQzYwCisgNjg6IDdERDU0Q0M0RThDNzBBNEFDNTVGNEMwNDg1QTRERkUxMzkyNTM3NTcKKyA2OTogQTVFMEVGQjk1RTYxNjJGOTYzN0Q1OEQzRTQ4MzZGOTY2MUQ2QTM0QQorIDcwOiA2Qzc3REU3NjA3QTM2MUQyMjg1MjM4NUU2NjMxNzExNDhDMDQ5OUJECisgNzE6IDM0Njc2NjIyNzVCMTM2QUYwOTZEODQyNThCMTdDQTVGMjNCRDYzOTcKKyA3MjogMUM1NkE2OUE4MjZGOTVCODk3MTYzNUFBNzA5OTc4QTQ0MUU3NTgzNgorIDczOiA5MDk0NzI3NTk2RjA4NkJBMjg5NTZBNkJCNjlDQ0JGM0IyQjI5RkE2CisgNzQ6IDhDMEI2MTgzQzMzRTkwMkMyMkYxN0Q4MUQxODE0NEFDQjdCNjZGQjIKKyA3NTogMjRFQ0Y3NTk4ODk0RkZCQkM3RDMwRkIxRUE0NzA5MkYwM0MzOThDQQorIDc2OiA2QTAyRkUwMDQxRDk4QUI3QUE2OTE2QTUyNDVCRkJCQ0Y2NjM1QzJECisgNzc6IEYzMDIxRURCMjQ0NTk1MzM0ODg2NjA1MTI2NjBEREZGN0Y0NTFDM0MKKyA3ODogRkJCNzU2MUMwMDY1QzkwRDdCODE4MjAxOEVBRTczQTE4Mjg4RTk2OAorIDc5OiAzMjc4NEYwRTM1NEEyMDY4ODM1OUI2RUU3RkQzODc0NzE0QzQ4Njc3CisgODA6IDhCRkJBMDk3MkQzNjczOUVBODA4QzM3QzA3RjJFMzIwQUNCNDExNEQKKyA4MTogNzRFQURBODhDOEVEMEI2NDlGQ0NDMzZERTMzOENCNTM4MjQyRkUxMAorIDgyOiBFRDgxMkI3N0MxMjg1NkRCMzcxRTZGN0RERjE1QTU5RkVCREQ2OTYyCisgODM6IDI3MDIxRjQ5MUU5MjNDRjBCMTkxRTEzQUJDQUREQUE3MjU4NkI3NjkKKyA4NDogNDc2NjQ4NzQyMThDMTM1QzA5RUQ0MERGQUMyNkUwNjczM0FEMDJDRQorIDg1OiBCMzlFNDkyNjE2RkRBRjI0ODBGMTNENkU0NkNFQkVDQzFGRjVDQkE1CisgODY6IERFOTY3RjY1QkY2REYyNjE1MEFGODY2RkFEQ0E1OEM0NUREQzMzN0IKKyA4NzogOEYyRTJEMjNDQzZBMkI1MkI5MDQwMzIxMTlDRTY4NjQ5NDA2MDMzQQorIDg4OiAyNDdGQjhCMkJEMUJEQzM1RDBDMDdFQTEwRkQ5Njg2QTE5RTQ3MjNCCisgODk6IDlEMUU4MEQ1Njk1NTY5RDBERTI4NTg3RDM3MTAzQkJCMDcwMUU0NjIKKyA5MDogRkE1QzMzOEU3NTA2QUM1NDE4QzRGQzJDMDRBQTkzMzU4ODg5MkQ0QQorIDkxOiBENkJDOTM4ODBGRUMwMTYzRTNGMjIzQzhBNjRCQTA4NzlCQkIwQUVECisgOTI6IDhGMjdFRTlDOEE5MjNDOTY5ODU4NDc4NkI1MjI3Q0YxN0YwRjU1N0UKKyA5MzogNEMxMEFDRjJGNDA0MjM2RTJEQUJFRDBCQjQ4RERDNkQwMEFDNEIxNgorIDk0OiBENTE2NkNDNkI3NzlFQjJENDVBQjMyMjIxODEwNjREMDVGRkI1RTIzCisgOTU6IDEzMDQyRUI4MjQ1QThDNURFRDY5Q0ZDQzFGMURCMjY0ODg5Q0Y1Q0YKKyA5NjogMDcxMzZGRThDQzFBMDM2NzM4OTFCQzYxNEUyOUJFNzlFQTAyRDYyNworIDk3OiA3M0M1MEIyNzUxQzUwMjU3MjQ5MkM4MDFDMjhCMDJDN0U5RjYxQjc2CisgOTg6IDhCRTRCNzFENTBDMkQyODk1QjlDQTM1OUVDQjY5RjkwQ0RDQjFERDUKKyA5OTogMzZBNjY5RDdDMURBOEUyM0QwN0IyOUJENjc2OURDMzI0RUI2RDZCMworMTAwOiA4QUU1RDJFNkIxRjNBNTE0MjU3RjI0NjlCNjM3NDU0OTMxODQ0QUVCCisxMDE6IEYxNjM5NkUwMDVGRTVBQ0MzNEVCNTNFNjA4NkY0Nzc0MTU3OTRCRjIKKzEwMjogOTA3Q0QyOTIyQ0E1RjYyRjc5RTE3QjI4QUYzODlBMzgwNjZFMkM5QworMTAzOiA2MkM5MzUxQTIxQTUwRjIxNTAzNjdGMjVENEMxNjZDNjNFNzcxQzMyCisxMDQ6IDg4MDlDQjUyOTIzMkEwQ0IyMkQzODRCNzA0NjJCNjREOTNCMEVDMUEKKzEwNTogQTg1RTRCNDI2MEE4MzZCRjBEQTUwQjgzQkUxMDgwRDk4Q0VGOEExNworMTA2OiAyMUQyQTBENzg0MzVCMjU5MEIyQzYzNjY0Mzk5MzlCOUIxNTI0NkU3CisxMDc6IDIwNEZGREZERkNBNUQ0NkNDRUM1RkE5NkE3NzhCRkNCRUE3MEJDRTkKKzEwODogMDFEQzA1RDYwMDZFMTJEMkY2M0E4RjA2MUIwMEQxOENDQTEzNUQ0MQorMTA5OiAzMEU2N0QzRkMwQTBBNkQyRjI1N0FFMjRFQThDMTY4QTRCMEUwRjVCCisxMTA6IDlCOTQ1NEUyQjQyOTA4RTU3NDAzODcxQTY0RUE1RTkzMEYzNUI3MEEKKzExMTogOUY3MkRCMDUzQkM1MzcwQzc4NkUzNDAxM0ZCOERBNTk1ODAwMEQ1QQorMTEyOiBDMUJGQTQwMDlCRkVBQTMwQURBNEQ5NDBGQzQwRjk3RkZFQTNGQzM5CisxMTM6IDI2RkMzMEJGNjQwODdEQzNGQTRDQTM5NDYzN0QxNUY3M0I3Njg3RkQKKzExNDogMzYxMDZFMERGMjRCN0RFRjQ2RTlBRUFCN0NFMEQ3ODRGRTYxOUQ5RAorMTE1OiAwRDgyMjYyRTQ0M0MzQzU2NTY1RUUzNTc3NkY5NTk3OEUxNkYxNzU3CisxMTY6IEIxOUU2QzczRTk0NDAxMDIwQjE0QUJCRjE5QTE1QTZGMEM5MDYxQUYKKzExNzogNjhFQ0I1NTUyQzdCN0IyNjk0MEE4MkI2QTY3QjBGNEM2MkVFQjg3MQorMTE4OiBBODM0Nzk3Qjc5REJCNTY0QUU1ODcwMDNFQzRCNzQ5MTRBMTU4MEM1CisxMTk6IEFENDMwQjQyODMyMDNBN0I3RjMzOEI5RDI1MkRGREJGODA3NDAyQkYKKzEyMDogQjg5Q0RDMTA5MDA5RjE5ODJDOEIzNEZDQTQ0Njk1MzU4NEQzRjZDNAorMTIxOiA4MDMwQ0M1QTRGNTU1NjY5NThBNUJGQ0E5N0NCNkY0MEI5QzE5Mjc5CisxMjI6IEQwQ0JEMUVBNzExRTJENDA1REE1RUNDMjkwNUREOEEzQTNFODNDMzcKKzEyMzogQUNDREM5MjQ1NDlEMzE0MDE5QzRGRDFBQUM2QUUzQ0RGQjgxQkM4NAorMTI0OiAzMTI5MzM2NDNGQ0FBRUJBNERCOUJERTZFRjdENkVGQTcwRTM3Mzk5CisxMjU6IDQ3RjExQUU0N0UyRTY5M0VEQzBCMDYzNTFFOTM1QzlCNURBNDJBMzUKKzEyNjogRTRDNkFBMjExNzY3QzE1RTkwOTM1REY1NTJFNEVFQjg5RjIzQUQ1MAorMTI3OiAyQkU4RTU2NUUyNEE4NzE3MUYwNzAwRUNBRkEzQzI5NDJDOTcwMjNFCisxMjg6IDdDNEQzNjA3MEMxRTExNzZCMjk2MEExQjBERDIzMTlENTQ3Q0Y4RUIKKworSGFzaDogd2hpcmxwb29sCisgIDA6IDE5RkE2MUQ3NTUyMkE0NjY5QjQ0RTM5QzFEMkUxNzI2QzUzMDIzMjEzMEQ0MDdGODlBRkVFMDk2NDk5N0Y3QTczRTgzQkU2OThCMjg4RkVCQ0Y4OEUzRTAzQzRGMDc1N0VBODk2NEU1OUI2M0Q5MzcwOEIxMzhDQzQyQTY2RUIzCisgIDE6IDREOTQ0NEMyMTI5NTU5NjNENDI1QTQxMDE3NkZDQ0ZCNzQxNjFFNjgzOTY5MkI0QzExRkRFMkVENkVCNTU5RUZFMDU2MEMzOUE3QjYxRDVBOEJDQUJENjgxN0EzMTM1QUY4MEYzNDJBNDk0MkNDQUFFNzQ1QUJEREZCNkFGRUQwCisgIDI6IDI2NjFEMDMzNzJFRDVDOTYxRUUyM0Y0MkVEOTQ5OEI0NTEwMzBFRUQyRkQwMUYyOTE3ODk1NTUyOUIyRjhBNzU4RjA0NDQwODdDODJBRUQ4NTU0MEM4MjE3RTk1OUVCOENCNDNFQkJCQjc3QTdFMEQyOTgwRDY0MDZBQTIxOTBCCisgIDM6IDczMTRFODAzNTc4ODMwNEU1N0U2OEFDOUVBODk1NDRBQ0U2RDIzNzkwMzU2OTdEOTFCOThCNjRCMTA1MTMwREM4MTRCNjdBNEI0NkI0REY2QzEwMzAxNkI4RjdDNzQwM0UwQjk0M0YwMjkxRUQ2OTA5RTIyMTlCNkUxOEU4OUQ4CisgIDQ6IEE2QzAxRDhDQjkzQTVDRUMxN0E5QkREMjcwQjI0QzhFRTc4Njg2Q0FGRkM0NTRGMjUzRDlCOERBRDUzOThFNTIzMDRDRDU3RjMwRjIxMTFCRTc4RkQ5ODMzOEREM0E0MUZEOEE0NTEyNEM5NDBDNEE1OUYyNzAxMDBERDZDQjZGCisgIDU6IERCMjI5ODZGOUZFQ0ExNTRDQ0YwRTdEQUQ5MTRBRThDMDg1MUUxNzBEMTE2RTlCNTUwQzM5QjM3M0YxMDlGRDA3MzM5NUMwNzExNzQ1RTQwMjMzMjI2Rjk2QjVGQkY2QzhFRjFEN0Y4RTJFNEFGNTM3NTgyMUM4OTdFQjE4NTE0CisgIDY6IDc5MzQ5OEI5ODk3MEJCM0NGMTg3QjBBMjhEMzUzQUIyRUVDOEY2Q0RBMTJFNkQ0ODRDQkNDREI5NkIyQkZFNkI1Mjc4Q0RCMzhDOUJFREFFQjU5QTg0MDQ2NDVEQkVERkJFMUZFNTQyMjc5NDdFMjI2RURGRDM2MTE0MDY3RjM0CisgIDc6IDA1MkE3QzRFQzVBRDIwMEI2QjgxMzFGMzBFOTdBOUE1REE0NDg5OUUxQzZDMzFCQkUwNzgwNTg2MzBENUUyMDhGRDZGMkY1MUE3OTZGODE0RjhBRDA0OEQ3NTlGOERDRTQ0MkM0MDVEOTZENkUxQjFBMTk3QUQ5MDhCMzY2RTk4CisgIDg6IDIxOUIwMTk4NzI2MkM1OTc2MDNEQkM0OTU3OTJGMjQyM0UyNEE0QkNEMzg4MjVBNzRDRUU4RUQ5MUQ1NTkzNTI5NkQ4MEU3M0RCNDNBNzhGREQ2MTE5MjMzQTMxREE1OTQwQzZFMzM1RUIyMjYwMDcyOTQ3OEEyMEY2MUE1NkRECisgIDk6IDRCQkI4NzQ2RDFENzU0Q0U5MUMyN0YzQTYyNjJBQ0JCRkQ0QTM4RDEwMEE2NUFEQUREMzE3NEVENkVGOEY2QUQzNDNGMEVEMkRGMjgzMDlBNkU5NzlFMDJCMTJFNzMyQTNFNzAzNzFFRjFFMDkzNUU4QTMwQjdDNTUxNDZEOUFDCisgMTA6IDgxQkUyQUQyNkE5MEJGNTAyQzk1MTRGNDY2ODEyNzZGOTI3RTkxNkE2MzBGQUM0NDJEODIzRkU0RDhFREUwRkFFMkU4Mzg0RjNDMjY3QjU2MTI2RjBDMDA5QkY4Njg5RDQ3NUM1MzQyNTMyMkJGOENEN0Y2QzgwQ0QyQzcyNUM2CisgMTE6IEZDREVBQjAzQzBGQUM3OTM5RTg0NzhGRDE1MkVFQzI0MDhENEE2QzBEODI5QjU1QUZDQzUxODRDNTA3MDZDMjUzNjc2Q0Y2OERBM0FCQzFDMUFFRUI1ODIyODk4QzUxOTRBQzgwMTg4MUI4Q0JDQzhEQjE1OTMwRUFBRUU5MzczCisgMTI6IEY5NDNFNUNEMkRGNzQ2OTk5MTNCMjVFRUYwQjA4RkNBNkJBRTlFNjZCQzA3M0RGMEJEOTUwQ0EwMkZGMTcyNzZGNEEyODM5M0JDQ0NGNkU1NjcwMjRDQkM2QzA1Qzk0RUE5MTJGMUIwNzAzNEFBMzc1MDA5RjU5NEIyNUQ5NTQyCisgMTM6IDEyNjA3MjhFMDg1RDE3MkVFODIwNjVCM0Y4NzhGRTIxRjU1MDc0ODU5OEU3MkE0MEY0RkFDM0Y1NEI3MkE5OUU2QjNDRkRBNzE0MUM3RTVCRTEyMzc1N0FFNDMzMkM4MzIwNzg2NDA4NTIzREZDODY1NUQ3RTFGNzAxMDc5MkIyCisgMTQ6IDY3RUI0RTkzOTYxRUYxOEE4MjE1MkRFMjg4MkNDNUFGNEREMTI1NDczMkE4RkMxOTU5MTQ3MjY4NDQxQTgwRUFGMEUwQjY4MDQxRjdDRjAxMzMxM0FDQUQwNDRCRDQ0MEYxRTA2RDNFNDQ5RDIwNjQzM0YzQjUyQkUyQzlFN0I5CisgMTU6IDlBQjkwQTMzODREQTMyQTAzQjMxRERBMjE3MzJCMzk4MzU4REQ0MEQ3NTg2RTgzNkNGQTA0Nzk2MTM2MENFQTJGMUUzREQwQ0YyRDkwQ0JCNTdGNjhDNDMzNDExMDY5NEE2QzFCQTE3QjFFOUU1MzNFNkNGM0EzQUNDRUZGODRFCisgMTY6IDExMkMyRUQ0Q0U3MzJFMjEzMzRENzI0OEEzMEU2ODMyNDZCQTYwMkFEMzY4MUJBRTM2NUU4NTdBQTg0MEYxRjgwRkNFRjFCOUFEQTMzQUMxRjlCRjZGQjc1MDQ1RjlFNjE0NDlCMjZGOTIwMUU0ODJFN0YyQURDOEVEOUExRDgwCisgMTc6IEVGNTc0RUU3QjQ5OEFBNjRGM0FDQkUxOTcyRTQyQjg3M0M2RkFERTA1M0ExNDU5QUI1MkQ1RTVCNDlDMEFGQTBDNjJGRTkwMUFEQzNGRjA3QTdEMEFDQzQ1OUMzRERCM0Y2RDQ5OUM3MEI2M0Y2OEI2MEIwMkUyNzg0QkI5QUM0CisgMTg6IEM2MTg1QjU4MzZERDNCMTYwNjk1RTVFMjcwNThBQjI2NkVERTkxQTU0MTdEQzA4Njk4OEVBNTE4MURGNUJBMEM1MURFQjExRjZCQTE0QUYyODQ3NTQwQkUzNjhCNkM1NjFDRDk3NjgwOUUyRDk5ODJGNEQ0OUY5NkUwQUY0RjdDCisgMTk6IDg1MTBEMzA1QTVFMUFCM0EwODMyQjI0MkVENDAyQkVDMkQ3MEMyNEI0MUJEODQwQjhEMkRFNDM2QTZCNERCQjdDQjVGN0Y5RjE0MzJFNjk0RjBDQjEyMzlFQUIwREREOTJFNkQwQzdFOTZGREFENUY4RTQ2NUUyODZENzU4OEVDCisgMjA6IDkyNjgwMEZGNTY2Q0FGQUVBQkFDQTk5OTA3NzJFRkVDOEFDOTU2QzNDNTcyQTM2MDE5NEY5NUFBQUFFNDc3Rjk4QUI3NzUwQjI3MTBFMjYyRDAzOUQ4NTg0QkU3OUQ5M0U5RTY0MDVCQTI1REZGNkRDRjI5QzU0RDc0OERENjU1CisgMjE6IDBGMEI5OENFOTRFMkNDNjdEMzYwODZEMTUzQTJERjQ4RjIwMjgzNDEzNDA3QzNDRDA1NzBCNjE5ODcxREFDMTg4QUEzN0JBMzBCRDcwNkFGRUY0NzVCREE3QUVGQUI2MzA1NUFERThCNzkyRjAyNUQwODhCNTFBMDhFOTQxQjAxCisgMjI6IEU2NTM4RjM0NzlEMzM5NzlGMDQ2RkJDODhENEJBNzg1QjA3MkVGNTg4NzdCRkM5RDEyMTRGQTgzNzRCNzhEQTY4OTVENUE0RjRFNTBFNkFDNkEyMzdFNDhBNzNFQjE4RTQ0NTJFN0M4QUQ1MEM4MjIzOEZBOUIzMjNDOTY5MzVDCisgMjM6IDM3OEU4M0I4ODg0N0YyMzRBNkEyRkY3MzA0QUJBNzU5QTQyMkU2ODIzMzM0RUNGNzFFOUMzQzFGOEIyMUIwMTZEOUE4QTEwMEI2QjE2MDc3MkZGRjEyNDgyQTUwNjEzQkQ4MzJFRjUzNERCRDFENEQwNTVGMzIyN0M3NTEzRjExCisgMjQ6IEVDRkMwRjZDMTY4OTYyMTk3RTE4MUMyN0ZDOUFBMTk3NUZFRDAxRTY1NUIzRDRBNzg1Nzg3MjQ1MUQ2QUY4MTA3ODMxODQ1MzRDNDAxNzA5QTYzQkY2QkU2Q0RCMUQxNDU1QzM4MkNCQUE2RjY4RTgxODBDQkE5RTBDRERCOUVFCisgMjU6IDg1MjNCNzM3MjUwNTc5QTM3ODdCRDgzRTVEQ0M1N0Y3MDM4QjM5M0YwMDMyMjNBN0JBQjk4RUU0RDA0MDQ0MTE5MDYyMjI5MEIxNjRGMzJGQjk2NjgyNzMwREY2MkNDMzY2RkMzMzEyNkRFMkY3RERFM0EzOEM4MThDNDhGNjgwCisgMjY6IEM2QkUzNDFBMjg4NzhCNzMzQzMwRjUwRDY3RjY5MzNEM0ExNUEwOTUwQ0FBQjk2QjlGM0Q3RDc4Qzk1QzYxODc0QTQwMENBQjY1QTEwMDMwMkQ5RTJEQ0VBREM0QTBDMDQzODM0RUIwNDMzRDVENjg0QzE4N0FFRDkzQjVFQzZBCisgMjc6IDRBRTgyN0EzNkRBMTQwRDIyNzFGNzRERjFBRjQzMDNERjRCMUMzMTk0MjhGOEJBOTRFQTI4QkQzNzY1QkU0NTM1Mjc1MDUzREE0OUI2MzBFNkI3NTQwOTdBRENEN0YxN0RDN0MxNjE1OEY0M0UyQzE4NTE5NTFFQzMwMTZDRDhCCisgMjg6IDZEM0YwMTg1NkE4QTI4RTI4RUFERjYwNDAxRTg0MjUzQzNGN0NEMTNGM0E5RkI4Rjk0RDhCMDdCNzRGNzQxNjgxN0YyNzQ5MDNDMTM1QkEwREE0NTA5QTc4RDAwNDM4OENCQ0NBNzVCMDYxMzJDN0NGQzAxNTZDMDM4MDNFODVCCisgMjk6IDA3Q0RDMkJERDlDREM0OTg1MzM4NEZCNjQ3NzM2QjUwRDc4OEFCODBBMEE1NEEwOTY5Qjg2NjAzQjY4M0MyMkExQzVGRDMyRDNBQzkyRTczRDM3OEYzNzlDNEJBMzBBNDhFN0QzOEZCQjg2N0U5ODEyNzFGQjM5NjJDNzQ1NjU5CisgMzA6IDlEQzg3NUJGOTg3QzU1Q0U2NDZBNzA5RTg5Q0E4OUUyMjZCMEYxNTY2NkQ1MTc0NzcxMzY4RkFENzY4QkYzMzE4QjhCQzdEOENBODBBRkI1RTZCQjdGQzAwOTBCNTU1OUYxMURBMTY1REU1MUI5NDBDOURGRTkxMUQ0NzkwNDc3CisgMzE6IDU4QkVFOTJCRTAwM0NDQzM0RjlDRThDMEIzMjNDNkJBRjEyOTc0NjBCQUFCNDk5OENCM0I1MkQyQkJBQTI0RDFCMDZDQjU5N0VCMkU2MDlBMDA4NTcyRkY5MzcxMEUzQTdGNDJBQzUzRTNGRjA5RDQ3MzM3NTdFQUNBNDFFMjBDCisgMzI6IDg4OEFFQjFCRTJCRUNCMjg1OTg1NTZBMTI4QUZFQTAzN0QwNjg5QzhEMTNEOTg5NEYxNDE2QjJDNDhCMjU1MUNCMkZEQTMyMUEyNkNDNEQ3RTFDODczMzJEN0EzQzE4RkZCNDU1QzkyQzBFN0FBRjgyOUZBNDBCOEEyOEJCNjU2CisgMzM6IDE5MDk5QjRFOEFCRjIyNURDN0JEMUMxREM2RDUyRjU0RThGQjdFNEVBRTBBQjE5MjkzQzY4NkU2RkQyODI4MjIxQTExNTNCQkE0QzE0Mzc5NUQxQTcxODU4NUQ5MjU1QjZEQzkxMUMwRURBNUUwMDQyQTEwNTY1QUE1RDZEOEU3CisgMzQ6IDIyQjNFRDY1RjY0QzhFNTEyNTdBOTIyRkY5MERDMDk0NDcyMjRCOUE4QzdCNUE2QTk0RDY4NjAxRjNENEM3QzE1NTdCQjkwQjkxREYzMThFRjlGOEJCMzY3RTgzOEQzNkEzQ0E4MkZEQ0I4NTcyMUFFQTIwQThBMjI2OEQ5MEFGCisgMzU6IDBEMkIyNEM2RkQ1RDc3MjcwNEJDMTdEMkZDOEMwMTFGMTUxMUY5MjQ5MTEwNEYzQzIyNDcwODY0ODgyNjU2QUE0MEREMDdDMEMzMjlDOEJBRkQ5MEFERUE3RjQ3MzM0OTAzOENFNDc1RDM1MkRBNDFFMjRGRjY0NzIzMDcwNTY2CisgMzY6IEZFQjQzRjdEQ0RFNTZBMkVFOTYzMjM2QzIzNEU1ODAwQzAxMUZDNTREMTQzOTYyODhERTVBN0FDN0RCMkE3MkQxRThGNjNGMDREMUREQjNDNTVDRjNCRjE5RjRFMEZCQTRCNzk0MDVBNkI0NUVDQjMxMjU0QzlGMTk1MUM2MzJCCisgMzc6IEI4QUUyQzg0MjdBNzUwRjM0NjQ3QzM1MjlBMDVENDQ2OTFCOERFMEM3OTUyNUQ5MTQ1NjY1QkRBNUMwQzM5NkMwMEU5MzZCRjI0OTNGMTI5NDU4OTlCNkZEQUE5RjYxRTZFN0IyMjg0NjAyM0QxNDBGODczRUU3RDQ4RDc2QkM4CisgMzg6IEU4MEM0OUQxRTI5RjZGQUYwQkI1QzdCNDdGNUE4NUIzQTBFRERFRDg0NDE4ODkwNzQ4NzI0NzkyQ0M4M0I1M0FCMDQ0QjA1MTcyMkYxQURBQUI3MTNFNTA2OUU4ODNDMUQxNzJDRTBFRkY2RUU2QUVCRTA1QjFGRDc3REI2NTJCCisgMzk6IDFGRUQwM0ZBNzA0MzZFRjQ1Mjg2NjQ4QUJGMzkwNTdDMzM4MTVFNkE4MEExOUUyMjAwOUI4OUM4MDlERDZGMDA5OUM5NDRCODgyRkY5REYzREYwOERENTEyOTVGM0YwMkZCQUI0MEY2MDZDMDQ1QkQ0Mzk1OTY5RTI3NjQ3RDI0CisgNDA6IDJFMzYzMEVCNTE5RjZERDExNUIzRTQ4MThEQjQ0MjlDRERGMUM2Q0MyQzg1NDhGOENDQTIyNkEyNEY4N0E5NDlBMjdEQ0JGMTQxODAzQjg3QjJBMkMwRjhBRjgzMDAzMURCMUZFMDg0RTM5OTZEODgzNEY4RTdEMjlFRUE0QUZCCisgNDE6IEQ1NDUwOTUyNjgwNURGQzA4NzFDQkQ2RTQxQUNFMzk1QzY0MzczRThGNTcxNDZBNjU3QzI4QkIzQURCRjdFNTdBMTUyRDI3QkUyNEI4RjMwRjA4MzI5QzJFMDQwMzU5QjExOTY5MEQ5QTExMThCQzE0QTNCMTg4M0QwOTM0NjZFCisgNDI6IDBBQjA2Mjk2OEVFNEQ3MURDRTgwN0VGQUY4MzVFRTExNTg4ODU0QUNBMDk1OUI1MzQxRERGRDEwRTcwQkE5QUQ0MjdEOTIxNjhCMzFCOEU2RUY4MUY1ODYxNUFGOTIxNUE4NzA4Q0UxRjE0NEVFMjk5MDFEMUZDMjgyQzNGNzhGCisgNDM6IDQ1ODYyQjBEMEYwQUM1Q0MxQzU3NjlDMjlENzg2RkQzQUM3ODhDRkJDREQ2Q0FFQ0ZCMTIwRDA1RDcxRjI1NzVGNDE3NENBRDVFNUEwMEQyRDc0MEQwNzE0RTkyODIyNDI3MDg1RjA0NEE3MkQ2NjYzMTc1NUJDNTVFNUJDQzhFCisgNDQ6IEQzQTlFRkZBNzU5MTgxMzQ2RDhGRTUzMTMwRjA1QjJDNjVGOTZFMUQ1OTA4QTYxREE4RkEzQTlCQzU1MUE3NzgxRUQ3QjFBNkNGRkNCMkY3NDJEREFFOEQyMkIwRUM5OUQ4MkIxNEVCODU3MTkyNTM2OTNGRjkyMEZENTA3MUQ4CisgNDU6IERCNTMzOTVBNzhEREU2MkE0MDYyMTE5NTVFQzU2QzZGN0JFQjlFQzIyNzU1MDFDMzVDQTk1NTI2OEMzRTJENzFCQTI0NkI0Mjg2Qzc2RkFGREUwMTJGOUUyQ0FBQzg2MDFBNzQ2OTlCNDY2MDIzRkU5RjhCMUJBMjZGNjUwNDJCCisgNDY6IDk0MjZGRkI3QjcwREVERjFDRkJDRTY2MTA1ODNDRENEOTFBQjQyMUZFMzlEREMzMUY0MjE1Q0Y3NjA0QjkwNTBDODRBM0JBMjlDNEIyMzZGMUNDM0IwOUY1M0QyOTIyOTEzMkZEREREOUI0NjhDQkI2MzM4QkJCQTYxOTNGODRCCisgNDc6IDNENzRGMTdEQzZGRTA1NzcwM0M3MjQ1MkJDN0EwNzhFQzAxOTQyNEE4OTc4M0YxRkE0MDAwMzY1N0MzMjM5OTdERjMwQkJBMzhDQjRCMTZCQUQ4RkRDNDMyNjA5NTYwOTBGNzY1QzI2QUIxRkM4OEJGN0Y4N0VBQ0ExODIxQjUyCisgNDg6IEM2RUYxMTkwODVFQjE3RUMxQjlGNzQ3OTFEOTVFMzY2RkU5MTZGNTM5N0MyMDg1N0E4OTY2QzUyNTEyRjRFRTE2RTYzQjUzQTI4Rjc2MzJBODY3RUZDN0ZGRDgwODBCMTczRDVFMkUzM0EyMDYzRkVDN0QxMTgxQUNGOEM3ODI0CisgNDk6IEQ4NzhCMzA0MDJGRUNBNUVDOTMzNjIxMDVENUUxODNENjU4REQyRkQzOEI4MTczRkY2MDk3NDBDQzg0MjM5QzRGOEY1MzNBQzM0NTFEMzY5MDAxQ0NENEFDNzg4MTQwNThERTBGN0UxRjkzRDE2N0E0NkU4NUUzMDAyRjRGMzg2CisgNTA6IDk0OEM0MjU0QUQyQzU2NThBMjhENDJEREMzQ0I0RkU0Q0Y3MzFCNDE4MEI4QTRBMTgzQzIzQzU0Q0NFQTA0NTMwNzQyMjU0NzYwMDU5OENDRkZEM0M2MjI5REFBNkNERDAwNkQzQzc4MkVEOTFBQzYxMTcyMDU5RDAxNjk3MERFCisgNTE6IEI3NEZERkVEMDM4OEQ1MTY0QkVFMjVFMzdDNjY4N0ZBOEQ1QzA2OUQ0RkIwRDQyQTdGMUEyNzBBNjc2RjgzRjI0RkQxQzkwNDhFQzBENDlGN0JFOTEzRDg5M0UwMDE1RTBBM0Y3MjQ2NTNCM0YwQUIwMDE3NjgzOTQ4NzEyRTQ2CisgNTI6IDQ5N0VCODAzRDA1M0Q1REY0OTgzNjlCQURCRjhBQUQ1N0VEMUIwNzJDRjM2MUQzREIyQTUyOEQzREIxNkREOTYyODg3OTE2RTlEMjFGRkI0MzlEQzJDMDI1Q0REOEMyMUFEQ0M5OEEyM0M4QzVCMDI0NUYyRDcxQ0Y3MjhGMTBGCisgNTM6IDYzRjQwOThGNjUwODIwRURDRUEzRTdDMTBCNjVEM0IwRjE5NDlBMjhGRUEzMjM3MDJGMjdDN0QzMTFDN0U2QkZDODJENEMwMUY0RkFEMDZGRTAyODhFNDEwRUYzMjVERTE5MkY3OEI4OEUwNDA3NUZBOTU4MUFFMkIwMzFBNjhCCisgNTQ6IDMzNzkxNEIwMTNCODA1NkQ3ODQ5RTQyQURCNDdGQTc2MUI1QUIwNTY5NkNCOEZEQTZCODdGRkY4OEIwNDc3OTAyOTkxQUQ4MTY2NDcyNzE2NDA1M0U0RTQ3QUNERjg4MERDQUQwRTBFNjdGNzE0MTEyM0RCNDk0NDUwQ0YwQjYxCisgNTU6IEEzODVGRTY2RjhDODUyNjM4RjVCRTQ0NTAzQjY4MDI5OEVCQkYyN0RCRDlGMjBCMUEwNDQ3MjE1QzBFMkMxMDc4OTI2MDAyMTEzQTcxQzc4MTQ4RDUwMTlGQjIyQzgxMzJERDA1MzU2Qzc4QTFBOEQ4RTRFRUM1QTY0NDJEQkE5CisgNTY6IDIxODMzNjU4NUE0MTlFOTg3N0NCNjMzODdDNUU3NTlGQzkzRjBGRTFBN0JBNzE3QjhCRTlCMjMwMjM5M0UwRDE0REVGMkY3NDlEMTM4NjkyRDBBMDI5NkYxQzc5MkI1NjdGNDAwMzdERDJCODc4N0YxRjQ3RkYzNjNDRjM0RjM3CisgNTc6IDdFQjg0Mjc3MUE2MUE5QUY3NzlDODc5NENBMDU1NTE4RTdGMzhDRDEzRjYxNjM4OTAwRUFBRUEwMDBCMTI4MTZENTJDNTkzQjYyQjlEQUQ3OURCNzM5N0E0NjNBQjk5QTlEMDAzNUU3QTEzNjlCMDU1NkQ1OTNEQjQxRUVFQjZCCisgNTg6IEU0MUQxNDkyRDM0NzJGQkQ0MkYyNDYwNjUwRjlEQUYyRUNDREVBRUY1RjQ1MTZCNDUyRDk0MERBRDUxNkY1MTY4NDM5MTU0QjRCQTc2NjEwNDYxQjM0M0JDRjFFN0REN0REOEMyODVFQzBDQzQ2QzE3Q0UzQzdFMTQxMDMwNDJBCisgNTk6IDg4MDU3QzBCODQ0MkJDNTc2MzI4M0VBMTdGRDFGRTFBRTAxMUE5ODhFMUQ3RTBGOTE0MDA0Q0QzQUQyRTA2RkVFRUNERjU5RTMwOUI5RUJEQUJGMTk1NTk5NTRDMzdGNzFGQTk4QzE0QkIxOUY3QjkxQ0U1RjgyN0MxRERFMUI1CisgNjA6IEM1REU5OUFBMjczRDE5NzEyNzIyNjNDNzQwRTY4OTczOUIzOTcyNUEwQjdDNDhCNDE1NzdGMDU3MzhBMjRGNUVFMkMwQjY3M0Y5M0JENTJBMDgzNzk4REREQzZFNzBBMjA5MjEzQjU4Qzk1RDQ5QUJDNUJDQkFCREQ2QUU3RDIyCisgNjE6IDY4Mjk2QUMzNDZCQTNCMTRDMDM4Q0RDNjI5QzVGNTcwMENFQjlGNURBRkQ5NEY5NDhDNkI5OTFDMEY5MTgxM0JGRDAyNjYwQTJBMDVBMDJBNjFEOEVCMDNCQzkzNjAxRjlGNkEzODE5NjY1MDA0N0UxRDdERDEwNzFDQzY5NzRECisgNjI6IDFDRTBFNjc5M0IwRUQ1OUM0REI3RDVGMjRGRUY3NUE0RUQyRjI4Q0U0QUE3RTVFQjI1OTE5MjE5QzJDMDQ5MzVFNEIxNTg0MTgyMUZBOTJGQzc1MzdERTJBNTM4ODcxRTVBMDQzQTc3M0NCMUVEMDYxMzMzMTEzMjIzMjQ4QzE4CisgNjM6IDM3QkYzMjFGNjZBQ0U4MjdCNjZFQ0FBNjUxQ0NGQ0FEMzBBQjYyN0U3MTdBQTRGRTQ0MTI3OUM0RkE0ODU1NUNCNzc4NEIwQUYyNUE3M0I4NjM3NUJFNzFBMUUzRkRERUM2NjFFMEVCODExNUUwQkIyQjlBN0ZGODFEQzc1REY5CisgNjQ6IDVDM0M2RjUyNEM4QUUxRTdBNEY3NkI4NDk3N0IxNTYwRTc4RUI1NjhFMkZEOEQ3MjY5OUFENzkxODY0ODFCRDQyQjUzQUIzOUEwQjc0MUQ5QzA5OEE0RUNCMDFGM0VDQ0YzODQ0Q0YxQjczQTkzNTVFRTVENDk2QTJBMUZCNUIzCisgNjU6IDg1QTE5OTIzMjY4NDE0REU2QTEwQTJDREVGNzkxN0Q3QUEwMUU2OERGOUQwMjhDQkFCNUM1MjM2RkFFRkNFRDgzNkJERTlDRjkwRDhBMjE0MDEzMDU2MjAyQTFCQUU1Q0I3MzYwNjA3OEM1NTcyRDhGRTg1QzM2MDAyQzkyRDcwCisgNjY6IEMyRkI5NzYzQTZGODYyMjVGNkM2NkY1NUFDQzhFN0UxN0MxQTI2NjQ0MTZCMjcwNEQ2NEFBQzJDQzVCMDRBNjI2MDMwQjUyNDNDQTYxRDYyMDc2RERCREYzQzZCMzc2NUMzOEQwQ0ZBMDFENEQ0NUMxMjRFQTI4REE1OTNGODRGCisgNjc6IDUwODMyODAzMDBGQTVBMUIxNzJEN0I1Q0NBREE1Q0VDRTFFRTVCN0I1RDM4MkVCNEE0MzAxNzlFQjEzMzk3MEIwQjg5RjZCQjZEQ0JCMUYzOEVDOUYxM0Y1QjdEMTU1OUYxMTRERTBFRTI2MTc4RUJDNTZDQkUzMUJCMjZBOTFECisgNjg6IEIzNTcxRThDMUNCQzBDNThFMjMwOTRCMzkzNTJENTU0QjQzRjlFN0REMEZGOTgxQzEyQTAxRTBEOEJCRkYwNkEzOTg3NUQ5MEJFREE3RjM0NTU1MEU2RjY3OTM1QTQ5RTAxODM0NTZCOTk2N0JCMzE5RDc0QUFEODdDQ0EzNjk1CisgNjk6IEQxMTUzN0I3ODBENDU4RDM3Mjc5RDAwNjIxRjY0NkVCQUQzMjQ0QTIyRTRENDVERjExQUM1RDA4NEZERjcwRTdBMzJGODk3REY3MjdFNjVFREQxMDE5REFCQ0MwNURGMEI1RTAxNUZDNUNDMTE4NDEyOUM1RERGQjE0RjYyMTU0CisgNzA6IEMxNDY0NThFRjQwRTZGMTk0NEJGRDg2M0IyODYyQTk3MTQ1QkE1ODBENDdDN0FDQTY3RTc5N0VBQzY3OTA4NDFDNTdENjhBNzQ5MzBBRUZDRDQ5MDMxODE5RkJFRDgwNkEwQzAzM0RENTI5QTIwM0I0RTQ2MEYzNTdCQTFCQkZCCisgNzE6IDY2MEYzRTFENUNEM0IyQUZEOTVEQjBEOEMyNThGNkFENzRERDQwREI2ODhBMzdBQjRBMjRENzIwNzY2NTQxQjFDQjkyODAwMUVGNkQ2N0NFNTQyOTAzOUM5QzE0OTA2MTNEREY5MEEyN0U2MTUyQkU3RDQyRTE2MTRDNTkwMDU2CisgNzI6IERFQzQ2OEVGNzNFOThGNDRCNjBFQjk5NDkzNTkyMUY5MjBEQzBDRUVCNzQ5ODY1NUYwRkFCNzYwN0E3N0E3QTNEOTQ2MkREOEJBRDQ2Q0I0MDhFRkE4MUZGMDhEN0U5NTA4QkM1NjVDMTU3OEMzN0MyQjg3RDQxQTBBMzJBNTQ5CisgNzM6IDA3MEQ0QzM2QTA5MzRDNUMxMkU2QjY1RkZGMzg1NDA0RTQ5QzM4NzFEQTg2NzREOTNEMjZFMzE2NkE3RUY5NjkzRDk0NkI0MTlGMEUxMEM5NjI0OTY0QjM3NDkzREM4QTQ2RDI2RDhBQjg5NDJFNjAxNDMwMzY2NTlDQTRDOTFECisgNzQ6IEJCODkzNUNDODRFMDhFNkI0RTdDNjIzM0U0MUQ4ODBENzBDQzAxOEQxNjY4RUU2NEYxOTkwNkE4MzczMDQ5NUQwMUFGQ0UxQTRFQTgxMjlBOThCN0Y5RTA3NEZEMzVDMEJBNkQ1NjY3NjI1REI2M0E4NjdCQUE2N0JERUZDMTkwCisgNzU6IEEwQTdBMEI2MTk2NDMxMTVDNTgyQkI2OTUzRDJBM0VBQTk0MjQ1MUY2MzFGQzU2QzA5MzNCNTM1MzEzRDY2OEZBNENBN0Q2QkVDNERDOUZFMkFENzUyOERENkY4REJFNjg0NzhBMDQwRkJGREQyRjNEQzNBRDcwMzVEQjY3MzcxCisgNzY6IEQ2QzU3QzNGQjA4RDA3QTMwQTYyMkIyNTk4NUE1MkE2RTU1MjQ5OTM0NTI0NDcyNUIxMDg0RTQxNjkxQjExRUIzMUQzQjk3NzY5NDBBOUE3RTYxMTVEMkQxQTkzMzcyRDNBNzM4OEQ4N0IwMUQxM0JDQTcyNkU4ODIzRTg5NzI5CisgNzc6IDQxM0NCMjZCRTJCMUJBOEFCRTkzMEVEMUI5OTc4QkE0ODc0Q0YzMkIzOEM4MjVDQjZERkU5QzIxQTg3QzBCRDExNUQzMzU3MTk4RkRBMEE1QjdDREVCNDIzNUEzNTRFOUMyRjM3RDExQjMzQUM2QTI1N0RFQzY3MzI2ODMwRTIzCisgNzg6IDc0OEU0NjQ4RkJEMDA5RTQ4NDhFNDRBMjg0RDBDQjIwODgzMDBGNTBDRDUyMTVBMjg1ODI2RTk2OEI5REE1OUI2MzIyRTE5ODdGNzg0NDcxNTBBRjcyQ0UzN0U1MTZCRTlFODNCMDVBOTgxN0FCN0E5MjRFRDhCMDk1NTdDQjVGCisgNzk6IDBBODExMUZFQTgyNEQ0M0UwOTkxQzIyRkMzQjEzNjhBMTkxRDBDNzMzMDgyODM0OTQzMDlEMDc2MkFCMUVFNUFGMENFMkRCOEYwNTYyREVDQUM2MzYxMjg2ODg1NDBFODQ1RDcyQkVBMzg1MkExOUNBMkVEMjJENkMxRTgyQ0YxCisgODA6IERCMTA2Nzg3OUYwMTRFRjY3NjQ3MUQ5NTBBODFEQTA3M0Q2NzZERTUyRTg1RjY3ODkwQzg0NzFGRTYxNDQwNzhEQUY5NDBDQjZGOUYwOTdCRURCOEZBQzk0QzczN0M1QjhBM0I0MjE3Q0ZGNEE1NkRDMzQ5QjJBRTg0NUFCMjVCCisgODE6IDYxNjVGMTlGNTY5QkFBQTNBM0FCRTZENjEwOEQwN0UxRUNCMjIwOTJGNjYyMjdEQzI3MTczREFDMDk3MTE4QzJEOTI3RjJFNUY3RDIwQzhDRUYwRjk5QzZGRTZDN0FBNDZCRjE4RkJDNDUyRjZGREQ3MzM3MjgwMzBDRDBBNEE2CisgODI6IDFENEFBMTQ2MTdBNEJCOUU0OERDQzFBN0VFNURGNjUyOThBRTQ1RkIxOTNGMDc3RkRCNkQxQzJCMzI1MkUxNjMzQUY4NkE1MjdDMjk4NjE2NjFDRTE1NUE0N0U1QkFDOTFEOUIwNzcxNUUwRkY3RTA4QjM5QTMxMjg4OTFFQzQyCisgODM6IEMyQzIyQjUzRDZCQTQ2MDk1NEMyRDgyNkZEM0RFRUU2MEUzM0FGMkVGQzg3QTYxQ0JGMkFBMDIxMTY2QUZCOTA5NjdBREUyQzU2NEQwMzc1MThFNDE0MUJFOUMwRDBCQzBCNEY5NTQ5OEQ1QUQ5MjBCRjI4Q0FENEY1RkU3MDBDCisgODQ6IEJCNUU5Q0ZFMTlDNkEyRDE0RUE0QzFGNkJERTUxODU1REY2MUQ2NTBCMjMzMzBCQUMzMEE1MDcyRUFBQ0Y4NkNBMDJBRDMxRkU0QzE0NjE3NkRFQzc1QzU2QTU2QzJCODY4MTc3RTBFMzY1NDE0NTA4RDJFNzYwNkFCOUU4OTIxCisgODU6IDZCNDBBMTNDNTQ4NjM5Njg2NDYwOEJFNzI4NUJENEQxMjA1MTgwQkM0MUUxMEU1MzcwNDJBMUNDNkNEMTJGQTc3MzdCNUU3M0Q3NjhCQkM1RDY4N0ZDQ0U0MTg4MEE4RDk3NzNDMjYzMTZBQ0VBMkQ3OERBMjZGRUNDQzExRTkwCisgODY6IERBRDBEQzhBN0Q3OEUyOUIxMjE4MkQzNkY0N0I5M0NBQjU2MkM0NEZENkM1QjE3MTg2NTEwMjJDREVFQzMwMTMzNDM3NDMxRDEzQzQzRUMxQzAyRENFNzc2RjQ1OUE1N0MyOTM1NUIzRkEwRDY3QzZCRjg0QUQyNjE5NEE4ODU0CisgODc6IDgxMThBRUU1REZCRDdGRDlGOTQ0MDNGRkQzQzZCRUEwODcwNkQ0QzREQzc4Q0RFNzJGNzUxQTZDNDAyN0FCRUM3Nzg2QTYyNzMyODE5QURDMDM2Qjc4N0UyNUUxNTFBQzUxQjYwQkQyMzgxQTY0RjA1QTMyNjgwMEQ3NTE0QjE1CisgODg6IEM2NDczNzMzNEE2MTg3MkVDMDBDOEEzRjFCMUVBOTMxRkVFOEQ4MDIwM0NFNkRCOUYxQUJFRkVFMkNEM0U2NTI5NzE2MTVBRTRGOUEyMzQwMEI5RTMxRDg2MUJFNkI3RTBGNkRFRDI4RUQ3NEI0NUQ2QUU5MEU3MEFENDk1MDhCCisgODk6IEY5MjdCNTcxQjAzQjg5MkI0NkMwQTE2MTQ4RjEzQTJFNkI4MDYzMENFNDFCQTdEQkUzMTFGOUFEQkI1RThGMjM5MjNDRjBDQTUyN0RERDIwQkIzRkU0MkJCRTgwNTA2NkJFQUQ1NjlGNkZFRDEyQTI3MjJBODYyOTQyN0VEODQxCisgOTA6IDI1NzZBNDQ1Q0NEODk3N0YyNEY1MEVFMzBFQTdBNTFGMEYzRjQ5RDQxQkFBNjYzQkQxQzE3MzRFMDIzNjdBMzgyRTNEMEU4QzA3RUFFRDBDNkE0N0NGNjYyRkU1NzNCQUU1NTkzRDlDNEJBOEZGREI0QUYwMjRGNjA2NEY3QTg5CisgOTE6IEU4NUM3M0FFQjYzOEYzNTU2NUJERDI1MjNBRTJBODZCNTczQzMzOUI0RDVGRjg0OThBREY3MUJBNTg3Q0JGMTQ2QUU2M0I4QzkyMEIyRjBBMTY2RjgwMjE2N0EwNENEMEQ3RjdBODQyRDdEMDU4MTY1ODk0Q0Y5MTg4Mjg5MDMyCisgOTI6IEU3NEUyQUJERDZBRkZGODUxRUY3OEY4QTg2NkRERTlCOUY4NkQ5MDZCMjk4REQxRTM2MzBFMUQ0QTMwQjZGQ0Q3RkY5MTk0M0E1NzM2N0EwMEUyNjU4QTg0MzQ2RjUzQUJDODk2RURBQTM5NTE2N0U1RUJEMTJDOTU0RTBCODIwCisgOTM6IDY4MjcyMjY5ODUyNzZCQTczMUE5QUUyRTREQkYyRDAxODdDMDVENTY2RjA2RDA5OEUwNUUzRjQyNURDMDU4OTU4QjUwRjA5QjRDRTA3NDFGMTM3NUU5QjUyMkY5NEE2MUYxRUQ4QTQzQThEMDNBMDM2RDJBQkZDRURENEYwQzFGCisgOTQ6IDE5QTcxQTEyRENBQkExQkExODVCQTM4QkNDMEQ5MTU1ODRBODAxRUE0OUY5NzUzOTNCMjVBRkJDNDU2NTcxQ0JGMUE2RjkxMjFDQkFFODlBOUI0MzgwOTJDNjU1MzI0ODlBOTVBMDg2NDMyMDEwMkVBRDlBMkVCRDMwRDQxRjZGCisgOTU6IEM3MEYxOUJBRUE3NDIwQTc0ODJDOUM1NENCQjY4OUE5QUI5M0U0Rjg1MzhFREMyMzcxQTFFREIzQTEwM0RGQjcxNzZFMDRERjE3MEZGNzFFRjQ2REZEQUMxRThGOUNENkZGOTYxMTVCRTFFRkMyNzFBNTZCRENGQjY3RDI5RTY3CisgOTY6IDhCQkNDRkM4ODE1Nzg2QUREOUYxMDhGNDM4MUEyQjA4NDE3OTAwMkFFOTQwQURENEM0MkFBMjU1MEMzNTNDRDAzNTFDMkY3RjFCRDU0NEQ4RjI2OEZBMzMyQjBFODAzODM4MzE4QTM5MDc5RTlEOTMyNjlBMDFFQUY5Q0FDOTY3CisgOTc6IDUyNjZGQTk2NkEwNEI4QTI0NTBFQ0YzODI2QzlFMTUxNkZFREMzM0VFODFENDkxMUE2MDEzNTE1NjREMjdDOEJENEExMUJGMDBFMERFMjM3RTUwRDc1NDIxQ0JFNDc1RTM4OTY3RjI4RTZBMUM1RDMxMUEyQzk1Qjg0ODk4RDFFCisgOTg6IERGODc4MjNFMUUwMkFGMzQ1MzJDNUYzQTA4Q0YwM0NCOUIyMDE3QjgzNTUyNUIzRTNDNDQ4QjFFRDE1NTY5OTM1RDlBMURBMTlBNkIxRThEMDU2RkJDODY4NDQ3QUJFNjIyNkI5N0YyNTZGNkI2MzhCMDUyQjRCQUIzQkQ0ODA4CisgOTk6IEExMzE3Q0FDMjM2NEIxMEVBQkJEMzU0MEI2MTM5RDMzN0MwRUIzRjdBNzQwQzA1MDk4OEZGOUIzNTg0MjEzREY1ODMzQUFEODFEMzZDMzBDRTZDRTc2OTYyQTlFMUQ0NUYwODY2N0EzMTQwMzZBMjk5NDU0RjI1RjczRUIwNjdGCisxMDA6IEI3NTJCNkVFQjQ5N0E4QkVCRkMxQkUxNjQ5Q0E0MUQ1N0ZEMTk3M0JGRkMyMjYxQ0ExOTZCNTQ3NEUwRjM1Mzc2MkYzNTRDMUQ3NDM1ODFGNjFDNTFGNEQ4NjkyMTM2MEJDMkU4QUQzNUU4MzA1NzhCNjhCMTJFODg0QTUwODk0CisxMDE6IEIwQkIyM0FFRDJDRkM5QzU4QzhCQUIwMTlDRDEwREJFNzU3MTdFRThGMDRBQTQ1RkQ4RDg0NzQ4RTNGMDVDNTIzRkQyRjcwRENDNDYwRjdBMThERjdEMjhBMjI0QkNCODZDRkE0QzgxNjREMDgxRDUxRjM0ODdBN0JEMEM4MTA5CisxMDI6IDBGQTQ2QzZBNzU5REE5QTM2NDk2Nzk3ODBBMjhGREQ1MUVERkQzRjk5QTRCODAxQzU4MjQyNDdCMjcwQTEzN0NGNDAwMDY2MDlFMTQ5QzkxOUNEQTBBNkM4NTZBOUE4RTg1NUE2NzBBMkJCMkNENTIxMUZBRDQyRTg0RjZFMzY1CisxMDM6IEM0RTM1MDI2N0JEMzM1ODQ4RDAwMTUxQUYyQzM4MEU0OUEzMjNFNjNBQTI2NEQ1MzRFQTFCRjdBODYwQjc2NEE3ODk5M0Y3RkZGMzRFRDkzQUNCMUY1QTVBQjY2NzU4QzQ2MkI0RDJGMkY0RTE0MjI1RDI5RkVDMEMxMDJFNzcyCisxMDQ6IEFGQTBGMURCOEEzMjFGQzZDNEVGN0M2NUVEMkFEQzRCMDk0RTkyOEUyMzBEMjcyOTU2OTlERTY4RkI1QzE2NTdGRTBFNUM0RTY2QzU4NTJBQ0ZDNDVEQTk0QkVGREFDODlDRjBENDE3NEIyNjJFNkZENTFDREMzRTdGRkZBNUNFCisxMDU6IDlBODZBNDQwRkY4QTMzRENEMzhDNjlENzU2NEVGODI3RjYxNDYyOUNCNjk5QjdGNDVFN0ZGRjFDRkY0QUQ1RTI3RUZGREQzMkVGMUQwODQ1OTg3QTZBMjczRUEzNEMxOTM3NEU5RkI2MDZCQjJFM0I5MDkxNTdDQzY2NjZEMjlBCisxMDY6IDFGQUY4QzU2NDU3NUQ2NTQxMzNCMEE0NTJFQzQzOTU5QzlGOUUyMEMwNDQ3MjRCNzRFRkM5MEQyQ0VDRTRDNDlBMDUxMkM5RjREQTJFOTk5NTUyRTNBQ0MwNENFMEYwRTJGREE5ODI2QzJBMUZCQkFDRUM0MzMwMDgxRDVDQTQzCisxMDc6IDhCMzVGRkZDRDkxRTYxN0M4QTQ5QjEzQ0QwRkZBMjE5OUZBMUYyMEU1NjMzQUU2RTk1ODgxQkJDQTAyQjFFMDQ3MzkyREM5QTRDMEYwQTRDMzlEMzk4NEU3OEVDQzREQ0MxQjVDOTRBMjZBQ0RDMUY2OUM3QUJBQkZGQjQ1MTc1CisxMDg6IDZDOEFCNjlFOTQ2RkU4NkRFRjZGMTRCOTU1QjhGMTk3NzY4NkVBRkY4RTM4NENBNDVGMjQ1Q0NDMEVCMUM4MEFGOEU2MkIwRTczODdDMERBNTJCQkEzMUIxQTAxRUJCMDBDQTI2Q0JGREE5RDgwNjlBNzczQzNCNjJGOTg5QTJDCisxMDk6IEMzQTI0M0I0NUI3QzNDMjAwMkNCMTk3QkFEQkQ4NEM0OTAwRDUwNEZDRDI3N0QyREM2QzA2RDM0QjEzMTdCNDFFRjA5OEJCOTgwODAwRkE5RDAxMUMwMzYzRDA3NDMwODgzNUFFQkNGMzM5M0IxQzkyNTA0NUU5N0UxNDgzMUMwCisxMTA6IDgwM0UwNjVBRkVGQzZDNDhFRjlGNzAxMjMzQUY1MTI0NjU3MjlFODFCMERCRkY5OUEyRTdGRUZGQjU0MjgzMUUxRDNCMzAyMzBCRkEyRjMwMzQzNjk1QzA2MEFDODE0MEMzN0NDOEQxRTI1RTk1RTZBMTEzOUM1NTIyRjRFRDI4CisxMTE6IDg2NjE4NDI5Qjg3MjBBRENCQzhCOUZFQUVEOEJENDRFMDg0ODU3MkNCNjEzNzIxMzI3MzU2M0VCRkRBODU5MjQwRTE3REZEQUZGNjhCMDk5NTNGMTg1M0M5RTdFRjIxNzg3NUU3QkQ2OTU5RTc2REMzQTFDRTVGNTQ4Qjc2Q0VCCisxMTI6IDk2NDM5QTkzMjk1QjVDNDc5RjAzMTBCMjgzNzdGQzEwREY4MUI1OTNBQzIzMzU1NkIxNTg5N0YxRkEzODg2Qzk0MDYzOUFGRjJFQ0VCMjk4OTREQTg4NDYyNkI0ODExMjU0RkUyNjIyRUM3QjQ1NzcwODdEOTA0NkM5NkFBNTU2CisxMTM6IDlGN0JBRTEzREI4MEM3MkE0MzRCQzQ3MDQ5OThBNzNEN0U1NDZDQzI1OTBFMEQwRUU1MTFDQUZDNjNDNjIyQThCMkEyOTY0MjZFNDI3NTQ2MDZEMDJCNkVBMDYwODkyRTMyNUVBMUFDMTNFRjBCNTIzQTM1NTFGNEQyNUJFMjQxCisxMTQ6IEU5OTlBODYyRTVDNDc5QjdCQjIxRUI1MkU0QkQzMDE1NzFBOEEzOUI3MTJFQkZFRkFDNzIwRjI4QzUxNTAyNUU5OENDQzc0Qjk1MEQ1N0NGM0MzQjM0RDc4OEQ2MkNEQTAzMzlBRTBEQTAyQzhBMTA3QkNERDc5N0M0NzUxRkYxCisxMTU6IENEMDBFQzUxNDJDQkJDQTg3QkMxNUQ2OUVCRTk2QjUyMjJGMjVCRTE1NzZCMzE4MjA4MTc4Njc5QjEzQTlBOEJBNEJCQUJFOUE0ODhCQjM4QzRFRUYzMjdDOUE0REVBNDIyNUREMzBDMEY3MEI5N0MxOEM1QzJGQjE5RkMyMTM0CisxMTY6IDEyODk5NTFEMkI2MjExMkJBNTkwRDhDMENGOUVGQTM4QUI3NzczN0Y5OTQwNjA1OTY3Mzg2MTJFNkJEQzQxRUM4NjcyRjUwQTAyN0EyQzA0OTI5OUZEMzlFMTc3NkJDM0VFQkZFM0U2NkNDRjQwMDk2MTVENjNGMEE0QzQzQUJFCisxMTc6IDQ1MUE0NkZCREM5NTRGQjc2RTc0NEFGM0RBODQyOUM4ODExOTdGNkJDMTJEMjI0MTI0Mzg3MjkyODhBQTQ1NDA4NDNCOUZENENEMUJEQkE1RTg2NEZFQUVGMENENkNGRjA0NUEzNzUxMEIzNzU5RkFERkVGNDY5N0U5QkY5MjQwCisxMTg6IEEyNjdGQ0RGNzJEOTE2MERBMkEwMUU3ODFFMDc3MDE0NzhGOTVBMzhDMjYyQURFQkZBMTk0RUE2RDVBNTBBOUNGM0UwNEQzMkFBNEI0OTI1ODBDNkU4RDhGQUUxRjgxM0YzQzE3RjgyQjdGNDdEOENFMEM5MDBGMEYzMDUyRjk4CisxMTk6IDNEOTEwQUI2NTc5NDU1NjUzRUZDOTM5QkUxQjIyRDk5MzUzNzQwODA4NjM2MTAwOEVCQjE2NjcyNEZBRkUzQzg1NzhFRjRCRTAzNzhCQzI4RUQ4ODNGQzBGRjNERTVBOTMxMENFREU2NUZBRjNBRDk1OTBBMTNCM0NBNEY4MUM1CisxMjA6IDQ3Mzg2REY0RDQxNzc1NzM3QkM0RTUyRDdDQjJFRkMxMUJBMzM1QTVENTk1OTdCNURFQjNERDBBMzUwMzI0NjFGNURCNDc3OUQ0OEJENkYzQTEwQzU1MDNBQzU2M0M3OTAyMzVFNkY1NEVBNzlDRUFEQjZBNTZBRkNDRTg5MERGCisxMjE6IEJBNTkwNDRFRjNBMjQyOTc0RjA3NDMzN0NCQjY4NDBGQTA1MDZDMjIyN0E0Mjk0OThGNTQ2QjJDRUJFMDY0NERGRjFENDQyMTkwQzQ4Q0I1NEJFRTcyRjk2MDY3MEY3MUFGMUY4NDAyQUQ1QUJFOEMxNDgyREVGQTg4MUZBOTAzCisxMjI6IDg5QjRGMzVFNUM4QzE5QUQ2MUNGMTYwMEJBODBDMUExQkJDRkRDODZBRDlGODA2NkM5NjdCQTEwRjYyODI3RkNFRkExRUJEMDdDOTBDODJCNDgwODJBNUI3RDZBNzJFMEFBRkQyMzBERTA1OTU1QzdFOEMwODEyODZCMENBOTZECisxMjM6IDBDN0Y5NDI1MEY0RUE3NjQ3RjkxRTdFQThCODYxMkFFOEU3QkZFNEY1QkNERDkwQ0RDRTU2NEJDOTg0MkY2OTg3QUZCNEMzNjYxRDg0MzE0NDBGRUUxOEVCMkVDNzBCQ0NEMzRBNkI2MUQyMDlDQjcyQkU3ODJBMDgwOEMwOEUyCisxMjQ6IDJDOEI4QjE3ODIwMDg1Nzk1QkM2QTI3MjBCNUQwQkRGNTQwN0Q5REVFMUNBQTQyNzBGRkFEMDEwQUU5NTU1REZEMkI3NEE3NDI1MTJCQUZGQUExRDVCNEYxNEVDREIyQkQ0QkYzNzgzOEQ1OTgxQTMxN0M3Mjg3ODA1OTc0MDE5CisxMjU6IEI0NjRDNUE5RDA0MEYxMURBNDVEOThDNEJDQTkyOTVEMEY1ODlEQjExRUU1NjAzNDEwQzYyQkRBQ0NDMzI5QjlBQzE0NTY3QzNBNkYzQkJBNEI5MkNEM0I5NUJFNThBRDREQTQzNTE5OUNFNjJEOEJENjEyNjlGOEJFQTM4RkU0CisxMjY6IDJGNjQ1NTRGRDU0QUE0QTA0QURFMzc5M0FGQ0M1Qzk2OEIxQzM2MDNGNEY3MUUxQkI1MzQyQkE0RTk1MUQ3OUE0NTgwQkY1NzczNkU3RkMxM0E0MzYwNEEwNTdFOUMzNjBDMDk5QUM1QjM0MDNEQThBQUZEQkJGNDE3RkY2QURDCisxMjc6IDNDOUE3RjM4N0I3MTA0REYxOUNGMjY0QjBCNTgyMUIyRTQ2RTQ0QURDNzkyNjI1NDZFOThGRkExMTNFQjNENDU3OTlFQUM3OENDQTQ2NDNDOTM3RkNDM0MxRDI0OUEyMTJGQUNCMzRDNjNENDVFRUM4MTA2OTA5NUQ3Q0RDRTdCCisxMjg6IDgwM0EzQjM3Qzg5RTg0RkJCRUM3NUJFRTNEMDBERDcyOEZGQzQyNDZCNUE1RTk4OURDOERDMkNEMEY3OTM3OTY2QUI3OEM3OUUxRDQ2NDhFRTZFQjQwRjNENzA0OTFDQjQ2QjhBQjQyRTE1NTY3MkUyQUI4Mzc0RkNGNzBERDc5CisKK0hhc2g6IGNoY19oYXNoCisgIDA6IDQwNDc5MjlGMUY1NzI2NDNCNTVGODI5RUIzMjkxRDExCisgIDE6IDg4OThGRDA0RjgxMDUwNzc0MEU3QThEQkY0NEMxOEU4CisgIDI6IDE0NDU5MjhCQjkxMkE2RDNDNTExMTkyM0I2QzVENDhECisgIDM6IEQ4NUIyRTg4NTREMTZBNDQwQ0YzMkREREE3NDFEQTUyCisgIDQ6IDVGMzA4MjEyNDQ3MjU5ODA5OEIwMzY0OUVBNDA5Q0RDCisgIDU6IDYwNEExOTYyMkEwNkQwNDg2RDU1OUEwN0M5NUIyOTdBCisgIDY6IEExNkY4OUU0REFDQTZDODE3NEM5RDY2QUEyM0IxNUFGCisgIDc6IEZDNjg5M0Y3OUEyRDI4MzE1RkJCRUZDQUYwMjgwNzkzCisgIDg6IDZBODBGMDRDQjkzQjFDRkI5NDdERUQyODE0MUU4NzdBCisgIDk6IEQwMzZEMEI0REVGMUZBMTM4QzMxODEzNjcxNDNEMUE5CisgMTA6IEYwMzFBMkRDMkExOTZCMjY4MDQ2RjczNzI4RUU3ODMxCisgMTE6IDJFMDVDOUI1QTQzQ0ZCMDFBRDAyNkFCQThBRTgyMDFGCisgMTI6IDhCNDlFRjBCQzkzNjc5MkY5MDVFNjFBRTYyMUU2M0MzCisgMTM6IDQ4NUNGNUU4M0JDNjY4NDNENDQ2RDk5MjI1NDdFNDNCCisgMTQ6IDcwNDc2N0E3NUQxRkQ2NjM5Q0U3MjI5MUFFMUY2Q0Q4CisgMTU6IDE5RjYyMjhDMjUzMTc0N0NCMjBGNjQ0RjlFQzY1NjkxCisgMTY6IEI3OEZFQzA2MjhEN0Y0N0IwNDJBM0MxNUM1Nzc1MEZCCisgMTc6IDNFRjlBRkFBRkFFOUM4MEQwOUNEMDc4RTFDQzBCRDhBCisgMTg6IDVFNDUwMUM4REQwRDQ5NTg5RjRGRkEyMEYyNzhEMzE2CisgMTk6IDAwRDJEMEZERDBFMDQ3NkM5RDQwREU1QTA0NTA4ODQ5CisgMjA6IENDNzM4MkU3OEQ4REYwN0YwQkFCNjYyMDNGMTkxNzQ1CisgMjE6IDg1Qjg0MUJDQ0NCNEFEMjQyMEJDQUJDRkQwNkEwNzU3CisgMjI6IDcxNTlFMzhGNEQ3RTRDRUJFQkY4NkE2NUE5ODRCQTJBCisgMjM6IEM4OTQ5QTlEOTI2MDE3MjZGNzdFMUFFRjBFNUYxRTBGCisgMjQ6IDhDRTM1RUY2RUM3RERBMjk0MTM0MDc3NDIwMTU5RjY4CisgMjU6IEEwRjRFNDUyMjgzMjY3NkI0OUU3Q0QzOTNFNkQ5NzYxCisgMjY6IEY1NUMyN0QxODA5NDg1ODU4MTk4MzMzMjJEN0JDNENBCisgMjc6IDBBMzk3NUEwMTEzRTFGRTZBNjZGOEM3RDUyOTcxNUI1CisgMjg6IEY3NzEzNUM1RDA0MDk2MTgxMzA1QzA5MDZCQUVFNzg5CisgMjk6IDMxRkY4MUI0OUI5MDAzRDczRjg3OEY4MTBENDlDODUxCisgMzA6IEJFMUUxMkJGMDIxRDBEQjJGQzVDRTdENTM0OEExREU3CisgMzE6IENCNEFGNjBENzM0MEVDNjg0OTU3NERGMUU1QkFBMjRFCisgMzI6IDdDNUFCREJBMTkzOTZEN0JFNDhDMkE4NEY4Q0M3NDdCCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L25vdGVzL2htYWNfdHYudHh0IGIvbGlidG9tY3J5cHQvbm90ZXMvaG1hY190di50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThlZGQ3MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L25vdGVzL2htYWNfdHYudHh0CkBAIC0wLDAgKzEsMTc3MSBAQAorSE1BQyBUZXN0cy4gIEluIHRoZXNlIHRlc3RzIG1lc3NhZ2VzIG9mIE4gYnl0ZXMgbG9uZyAoMDAsMDEsMDIsLi4uLE5OLTEpIGFyZSBITUFDZWQuICBUaGUgaW5pdGlhbCBrZXkgaXMKK29mIHRoZSBzYW1lIGZvcm1hdCAodGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBIQVNIIG91dHB1dCBzaXplKS4gIFRoZSBITUFDIGtleSBpbiBzdGVwIE4rMSBpcyB0aGUgSE1BQyBvdXRwdXQgb2YKK3N0ZXAgTi4KKworSE1BQy10aWdlcgorICAwOiAyRUY3OTM3NjU3MTZFRTQ4QTY3MUJEQjVGMDAyMTAzQzQzNzM0MzA0Qzg3MTdDODUKKyAgMTogQUU2MUI1NkM4MkJFOUZGOTZEQ0ZCQzIwREQwMkI0QkVBNEZDNkI2RDVGNEVDNDEyCisgIDI6IEI1NEFEQkZCNDA0NDU3RTZDNUFGQ0NFQzI3MTk5RDFGMjU5RUUxOTk0RkZGRTk5RgorICAzOiAwOEFFRUMzOEU4ODQwM0JCODU0OTM1RUI2RjE0NjRDRTk1QjA0NEY0QjQyMDI1MjQKKyAgNDogNEM5REFFREMxOTI5RTIyMTI4RjJBN0VENUYzNTU2RDhBNkQzQTgzMTVBN0I1NTZBCisgIDU6IDc2NDc5NEVEOUVFMUY5NDg5MTgzNUNDM0EzNjFGRTc1QzYwMEM3OTUxQTA3RjQ1MAorICA2OiAxQTRDNDQ3QTBGQjg4MjZBMDg4MUVEMkU3QkQ4OTQ5OUVBQ0E0QjZDNDlGOTYwNjAKKyAgNzogMTM5NkEyMUQ4QjQ2NUM2Qjg5ODUxMURGOTQ4NDY1ODhFRThFMzVDMDA5NUFEOTBBCisgIDg6IDc1NTJFQjAzQ0UyNkE4RjA3OUFDOTZCNDJGNTU2RkVBRUI3NTYwMTRCOEZERTYyMgorICA5OiA4MzVCN0NDQTlEOUYxM0JBMkEzNkNCRDc0NkU1QzkyRDVCMkQxMjNDQTJFQzg0OEUKKyAxMDogN0NGNEVBODhGRjhCOUE1QTU3RTVBQkI2QjM1Mjc4RUU5RDg2NTNGNjI0RDY2MkZFCisgMTE6IEQ1ODhEOTUzQzZGNDM4RDA3N0ExRTMwMkY4NEUyNUVGMzFBRDk5QjlDNUZDOURCNAorIDEyOiA4NkVDNjJDRjFBMDhDRUE5MTcxQUM3NDJFOEU2MTVCM0YwQzdCNkZCQzk1REMzQzgKKyAxMzogNkVFN0M1MUUyNjE4N0Y4NjM3MEEyNjgxMUM3NTEzNkUyOEIwQzM5QTExM0Q4MEY4CisgMTQ6IEUxMzI2RDU0MTIzQkMyNkNGNDFCMzBGOUYyQkEyRTczMjIwMzgzNkFGOEE3NDI3MworIDE1OiBGMjExRTRDNDY4NjJFM0FDOEI4RTY5OTc2QTcwNTU4MkNGNkQxQjM0QTZEMzQyQjcKKyAxNjogMEM2MTYwRkVGRTcwQzgxQzcxQjc0NjVGNDJGMDcwRjMwODA4Q0RBRTQ0OEQxOTc0CisgMTc6IDQ5MkZDNkJDMDkxNDg5RjkyNkYwRjU0Q0JGM0UzRjZDOENFQzZFRDE0REYyREY4QworIDE4OiBGRDE2NjAyN0FCRDFCRDlEQkExM0UzOTA4RDE2QzQwM0UxNjkxRkYxNzMzMjhDQTQKKyAxOTogMjhEOTlDNjRDREZGQUMxRTZGN0IzM0M4RTY3NUU0OTc0OUNFODM1QTE3N0ExQzYzCisgMjA6IEZEN0JENTVCQzJBNjg0RjQ4NzVDODExMTQzQTI5OTczNTZBQTg3QTMwMDM0NTg0MworIDIxOiBEQjg5NjhFNzg3QkY2NUMwMDk5MkVEOURERTk3NEVBNzFCQTk0NzM5NTExMUZGQjMKKyAyMjogNEMzMUIyRkE0RTZGN0Y0MERFQ0E1ODlGODVCQjY5QkZBRDE4MTVBNzNDRjlFQjIzCisgMjM6IEI0RDhEN0ZDQjMxNDk0MkYxNzFGODVFQTA5NTNGNzgxNkRBOUYwN0Q3MkFGNDhCNQorIDI0OiA5QTZBNzBCQUQ3NjIwM0E3QTFGNjREMUVFMzQzNzVFQzhCQ0IyMTgxMEVDRTBCNjgKKyAyNTogRDIxRDdFNUVGNkYxNTc5Qzg0NDI4QUI1RDU3NDQ2ODkzM0JBMDM3QzlCMEMzNEI2CisgMjY6IDNDNTI5MkM4N0IyNDYyNjI0MTY5M0YwRUJFMjBBOTY4MDA5MDU2OTFDNTk0NUU2NQorIDI3OiAzNTBCRUVDMDc1MjU4QkE3RkUwMzE0RTY4MDMxNTJCMDIxNTcwRjA2N0FFMEQ0RDQKKyAyODogNjg4MUY4OTI4ODZGOUQ2NkU2OEI5MzdCQjNBNzFGRjVDQjA2NDYxMUM3MjI5OTZFCisgMjk6IDA3ODMxRjFCMkQwMDEwODM4NjMzOUYxOTI3Mjk2ODdCMkY1N0I5REFCMkIxMjEwQgorIDMwOiAzOERFOERFODM5OEVFQzMyOTM5QTIzOUJDMDE5OEIwQ0ZCMThEMTJFNEYyQTMwMjMKKyAzMTogNUI2ODM1NzhGODE4NjcwNTQwODlBRTJFMUIyMEUwMkIzQkQ5MjMzNENCQjAxRkE5CisgMzI6IEUzMEE4MEJFMDc2NTFCQTE3RTJERjBENDNBNTgzQTlEQjI2OERGRjNBQjczOTNFRAorIDMzOiA0MjM0MUIxRUM0RjYxRTkwNTcxMTg4RjU1OTlGQkE5QUNGODg0QjFFMTU2OTQ5MjEKKyAzNDogN0Q5ODI5N0Q2NUY1RkVBODVDQjk2N0YyMkFFMDcwN0UwM0YzMDVCRjFEMjI0OURECisgMzU6IEJDOEVFNUNFMEZBOEY5RTY2OTQ0MDYwMDlFQzkzNThCQzQyMEI3RTVERTA3QjZGOAorIDM2OiBCODA5NURFNjc3MENCNENDMjEyN0ZBNjcyRjkzRjM5Q0E0QUYwQ0NCQjk4MDVEREIKKyAzNzogMjBDMEU5ODFERjFCNzYzQjZCQjQ3RDQzRjY2NzY1QUQ0MzQxMjdDMUZDNTVGODI5CisgMzg6IDU5Nzk1MzI4RDQwRDJDRTZDRkRFRDhERDUwODlGMkQ1Qjc5NkM5NDM4RTc2NDZDQQorIDM5OiAwNzg5Q0FCMjI5QUQ1NDQxNkM4MkNBNUEyRTY2N0VDN0NFNjYwMTlGQ0FDRjc2NkQKKyA0MDogRjdDODFCMUFFNzA1MDE5RkY5QTk5MDU5NzJBRkQ3MjQ4NEE3MEUxMUZCODFCMjc4CisgNDE6IEU3MkY1MjY0NEJGNUVFNTlCRTg3REY2OTJFRjAwNzBEMDk1MTE1Qjc2NjRCQjUzQQorIDQyOiBCOUE1REQ5ODQzNThEMEIwRjNDMjc4MUJBNjBFOUJEMzQ3M0MxQzg5Qzc5ODJGMjMKKyA0MzogRjdCQTIyMjY5MjQ5NzU5RjFBODdBRUEwQTEyNUQ0REY5QjU4RTkzNzE0NDQ5MDA4CisgNDQ6IDVEMjI1NzMxN0Y4OTc4NTc2Q0Q3RDJDQ0QzNDZFODYxQTU5RkU5NDlGNzRBM0Q4MgorIDQ1OiAxOTlEOEQ1QjBCNUM1QjYxRTA0NkY1MEUwRTM4OURBNkYxOUNCM0E3QTM3Qzg1ODgKKyA0NjogRjQ4OUNDNkNCMkQzRTlGNzQxRDZDOTAwODI2NUNDQTk3RTdFNTRENjJGNUVCODVGCisgNDc6IEE1RTdDQjA3ODdFQjdFNjJBOUNGRDg0ODYzOTBBNjYyOEM5ODc2NjU0QjlFODVFNAorIDQ4OiAyMkZBNzhFQTE3RjBEMjlFMTYyNzZDNzBBNTY0RDIzNEJDNEVDQTczMDIzMDE1MjgKKyA0OTogNDQyMjUzNEZCOUVFQzYwMUNFNzY2MjM0NUQ2QjZGRjkzMkU1NEJCMDQ4M0MyRjYyCisgNTA6IDVEMkUyQjkwQjQ2MEQzOTNGMzZCRjMyQjJGNDkxRTIyNEVGMzg4RkE3MkE0ODUwMQorIDUxOiBFQTUyODdCQ0JCODU2QkYwNEZDNzg1NTQxMDc5MDg3Q0UyNDc4M0U5MzEwRjMwOTAKKyA1MjogREVEQTM5MjA4OTlGQTY5RjkxM0FFNTBBNEYwRDcxMTlDOUQzQ0U4RjRFNkQ1QkIyCisgNTM6IEIyRjU1RDhFQTY0Qzk4NDJCRkVBNEZBREZFNjE2NjY0Q0Q0NEM1N0Q1Mzk5OEM1OAorIDU0OiAzRDJDNzJGMjYxODhFMUVGNUMwRjBGQzhCNTQxMjI0MDY2QzRERjQ1NUZFRTc4RkYKKyA1NTogNTBCQjM2QkQ4QThEOTdFNEQ2Q0E3OEREQ0RBRDA2OTBGQkJDOTNEQzlBNjZCRjE4CisgNTY6IDQ4MTQwRTE5MkZGOEFCNzRGQzIyNjc2QUFBQTE4NkMxQTdFMkZBMDE2NkU5ODZBQworIDU3OiA0MEFGRDU0MEM0MEVFN0U1OThEMjZBRTNGRTVBNDc5MzkyOTlCNURENDZCMEI0RkUKKyA1ODogQ0VCQkJENzYzQjA3NzM0MkJBMTZENEIyMDQxMkM5RURFMEYwNTA4QUJDRTM1MDFCCisgNTk6IDBGRTRERkU1MzkxNjBGNTkyNEMzMjRCOEI0M0RBQ0I0RjIyMDE5NUQyODZDNkZBMQorIDYwOiBBMDZEMTM1MDc1Rjk0M0NFRTc0QUFCMUI4REUwOEI3NzIwNTU1NTFCMUU3M0VENDgKKyA2MTogRDRFMUI1RUJCREE1Q0RBNTA0MERENjk3QkI5NkRENzAyQzY3MzBDRkNDMDEyOTkyCisgNjI6IEJENUU3N0I2N0I0MkM1MDdDNDkxMjEzMEM4ODgwQTlEQkQ2NjQzMURDQTBDMDAzOAorIDYzOiBEODFGNTgzQTlCNEREMUY0ODAyOENBNjAyQ0MwRjEzMUQ2MDU2MUZBMzRGN0IzQjQKKyA2NDogQTQxRjA0ODFFRTUyODQyQ0RGNjc2MTc3RjhFNDNCQzFGMUIwMEE1NjgyQzYzRTE1CisgNjU6IENEQjI5RTI3NEFCRUIyMEVFQ0M4Mzc4RDVCRDgwNjk5NzUwMkU0MjcxQUI1NjcwOAorIDY2OiBCODM2NkFCRDQ1NTY1QkIzRDI2Q0U0NkI2RjQxOUY3NEIzNDg1MTg2M0ZGNEMzMzYKKyA2NzogNUFEMkMxOTNENkQ1MUM5QzdFNTZDNUJGRjU1QzFENjFFMDQ1MzY2QjUxRTdGNjE5CisgNjg6IDk5NDhFM0FCN0QxMjFCMTVBNkNBOERGREY0RUU1Mzc3Qzk1N0YwREU4OTFDMzU3NQorIDY5OiAwOTU2NzZENjEwOTY4NTM2MzUxMjhBODA1NzBCRDFDRTgwM0FDNzI0OUMwQTBGNTcKKyA3MDogMzU0RjRDQ0MxRTUxMTI3NzBCMkFCMDM1QUUwNzIwMEE2Q0RDMDI4MEFEMDg4QUZCCisgNzE6IEE4NzIzMzk1RTgwQkVEMjVERkU4RjlBQ0VEQTk0MkE3N0QyMjVEMDA0NDAzMDJEMgorIDcyOiAwRDJCQ0UwRjhDRjM5NkZEODI3N0M4QkQ5QjE5RDU0OTY1MzA4RDNFRDA0RDJGMjcKKyA3MzogNTRCMTkzOUU5OTQ0RjQ5OTc5OEIzRENFMzQ3OUFDMzE1RjJDNDJBMUVGMjMxOTg0CisgNzQ6IDVDRkY3MjZFRTRCMjU5NjI0MEU2Q0JCQzY2RDdDNzM3QTREMTJBNzAyQjQwRTgxRQorIDc1OiA4Mjk5NkQ3RjNGMjdCNDczQkRBNjQ3QkJCQTcyMzBERjIxNzI4OEYyRDFBMzhCOTkKKyA3NjogQ0I5NUY2M0UwRTdBMkVDNEYyNkU5NEI4MUEzQzhDNzU3RTA0RUVFQUIzNUE4QzJBCisgNzc6IDA1N0RFREY0NTIwN0VBODg1QTBCQUM1QjY0MjQwREQyMUNCOUQ5OUNEOEYzOEZFQQorIDc4OiAyN0RDREQxQUJBNDU5NTA2RUY5OEU1QzhENTY3NjkyMjY0QzQxNTNGOTFGREIyNjkKKyA3OTogOTExQzgzNjYwRjdFRThDRkI1RjU0ODkwQUU5OENDQTM2QzRDMTJCOENDNzcxREY4CisgODA6IDY3Q0QwNzIwOTk4OEM1MTdGQUVFMDFFNjRBQzRCNUNGMjYxQjYwMzUwNjk1MDhGQQorIDgxOiBEOUE0MEM0MDdFMkJBODUyNjg0NzcwQTVFQjA4RDg1MDJERkQyNjRGMkRFNUE1RkMKKyA4MjogOUFBQzUwQTJCQ0ZENzRCRTNERjg1MjM3NDc4QUFBODMzNDg0RkEzREY5MTJBM0FDCisgODM6IDM4MDc4NDg4RjYxODNCNUE5NEI2NTVGMjQyMTJGQzk3Njk0NTBEOTM5ODZDOTIwOAorIDg0OiAyRUZGQ0JGQTRDQ0NBRkNBNjZCRjhCMzY4RkIxRkVGQUMyODBDMjA0MTZCQjkwRUMKKyA4NTogRDYyNkZENkQyODVDNDlGMjBFOTlCODhCOUY4MjY0MEQ5M0Q5RTc2NUNBNTVCNUIwCisgODY6IEIxREQxNzg5NDNCMjZBQTI0MUQzNDAzMUQzMTI4MzQ0QzY5NTVGNkE5NDJDQzVEMworIDg3OiBEQTBDODUwRTIwNjdGOUZEQUU0MzNDMTIzMEUwRjYyOTcwMEZDODg5NkFEREJERTkKKyA4ODogNThFMzkzRTM1M0JEN0RGNzVBNTkxOTA0QUE5OTUyNkU5NEZBNDVDOThEMDk1RTIxCisgODk6IDMyM0QwRTA0RDIzOUJENzAxOTJCMkFDQ0I5QUNGMDZFMkY4QzNCMDc1NjU4OTNBRQorIDkwOiBGOUM0MTQ3QzY5MjE2NDBDMDk3NTM0QkIwODAyMDU0MEI0MjBBRDU2OUQwMzY2NUIKKyA5MTogNTE3MURCOTY0QUM4MTVCM0E2RDA1ODQxOUZENDc4MzNEREFFRDcxMDM5OTY2RTZECisgOTI6IEU3REM3QzU3NEFGQzJDOUE1OUU0NkNCOEFEQkQwMzMzMEE1MzIxQjIzN0RGNzg5OQorIDkzOiA5NzA3NENEQTlGRjhENDBCMDUwMUU5RjYzMkVENzMzNUQ2QTc5MjYxMDFBMzRDMEMKKyA5NDogQkREQ0Q0RDAwN0RFMzk2ODBCODBGOUFGOTgwM0E5RjIxQzgzNkVBOTcxMjUwQ0Q0CisgOTU6IDBEQkZGNDVFMzE1NTA5OEQ0QjRDMTM4MTVGQjQ2MUQzQzRCRTQxRTlFMUE2ODc1NworIDk2OiBGQzE2Q0I5NTQ3OEU0RDIzQTdBRDE1Q0NBRTNDMjRCQkIzRDBGQkRDOEEwMEExNDQKKyA5NzogOTNBN0NCNTA2NDgxRDZBNzJFQUIxNEEyQkE1NDRGODYzMTU0MkI1NTkwM0NDQUFFCisgOTg6IDlDQzFGRkExOTczNkFCNkVCMzZFQjRBMkMxNjI0RkNCNjkxM0IyNTVEMjM0Njc5NQorIDk5OiBDRTM1MjZBMDg4RkZFREVBNDM0NUFCMjIxNzA3ODQ4ODIzQjE2REFERDE5QUI0ODcKKzEwMDogMUUxRDc5MDMyMzU4NkRCOEEzMDZFRENDQUM4QzY0QTZGMjlBMzZGNzcyQjhENjFECisxMDE6IDhDNDAzNTE1RjJCOTAxNEU5NTE5RUMwNDc2OUFDQ0YyM0U1MjJEM0UyMkRFN0Y0MQorMTAyOiA2QjZBNjM0NjA3NjM0ODA0OTg4MzAxMjQwQ0E1QUIwMjlBOUU4NkU1MTI4MUQ2NEUKKzEwMzogQzdDMzQ4M0NDOEU2QjU4NTIwQjU1NDI1OUVCMDg4NjZBQTc5ODBCNTNGRkI2Qjg2CisxMDQ6IDk2RTQyOTYxMUM5RTQxMTMyMTk0NzQ2OUUyMDk1Q0Q5QjBFRjI5NTc4MDMwRTQwRgorMTA1OiA1QzVBN0YyQjdGMUY5QkNFNzMwQkUyNzc5MzA0QTQ0MzE4OEZEM0IzMUREMkJGMTkKKzEwNjogNzA5MzNGOTk5MzI1MzUzMjc3RTBBQTFGNTQzQjVDQkVEM0YyOERBRjRGQzcwQTU3CisxMDc6IDVDRDZEMTM2RkRERjRBRTlDRTQyRjAwODMwMUZCNjY0NzA5NkQ1MDA3RTc5OTczRgorMTA4OiAxMTYyQkE3NDJBRDE5OUFDMTdGQzcwNzI4NTMwMUE4MkJBOUNCMTJDMDlCQTIyOUQKKzEwOTogQzM2NjE1RjZENUUyOUU2Q0FCQjdFQkM0NEE2RDNGN0IwMjREQUZCRDMzOEZFRkZBCisxMTA6IEMyOUZFRjA1MUQxNjA2Q0VGQ0UzNDE3QkQ1NzFDQjkxODhCQkYwRkE4QUI5ODY3OQorMTExOiBGOTI1MTQ0RURERDI3MjQ0RTE5RTRCNkU0MzNGMzEyQzZDREU0M0VGNEY5Qjg0QjUKKzExMjogQzQyMzBBNTlFNTRBMzREMDcwOUYzRjFEQjAyQzE4RUM4QUEyNzAwNzhERTQyNEQ1CisxMTM6IEVCMTY5OUNBRUMzNjY4MUNDRjhBOTE0NERGQjUwNTA1NjYwNDI5NzdEMTVGRDFGOQorMTE0OiA5RkJGMEQ5QjJERDlBNkU4NzI0MEU1Mzg1OTBFOTc5OUI3NkUyMjYwNEQyMkFCNzUKKzExNTogMjY1N0VBMDZENjlBNzhBNTg5NUE5MTY5Rjg0OUIzREUxMTFCMzFFNTY3M0E4RTE3CisxMTY6IEQxRjlFMUJBNEY0RTUyQ0RBQUZDMzg4RkE0QzM2NkVGNEJENUY0NDA2MDhEODZCMAorMTE3OiAwNDkxOTZCRkZEOUY3NzE3NUZBOTM2MDY2QzMxMTkyOTNFQUI3OUQxRTAwMjhDOEYKKzExODogOUNDMUJEMkNBRERFQzFEODJGRkFGQTcwMzFGMkU1QzlCNjc2NUNGMTcyN0EwQUNCCisxMTk6IEVEMDA0Mzg2NzBENjhBNzBDRTJFMDcyOTk5N0NDOTY0ODk0N0VFQTM1ODA5QjhDNworMTIwOiBBNTIwQTAwODlCQzE2Qzg0Q0I4RTA1NDI1QjMzMEM2RDI2MTEwOEVFMzA0OUZBQ0YKKzEyMTogQTU1QjQ3MDQ4M0U1NDdEMjc1MkVEQzNDNEZEQ0YzQjRDNDhBMTk5MEFEODU3OTQxCisxMjI6IDQ2QTc4RTc3MkM1MzNFQzhFREE2MEVCNEExMjdGQ0VCRDM1RTdEMEU3RjE4MzI0MQorMTIzOiA1RUI5QTc3NDEyNEQ1NzFGQ0NDODNEMUYzNkM2MDNEOUMzODczOTBERkIzOTI4QjIKKzEyNDogRTkwNDA2NkZDNzdGNzNDQTQxMTY2Mjk3QThGQzYzMUZGNTk2MzRCNjU5RjBBRUQwCisxMjU6IEI4NUI2NkFFRjdEOTkwNDM1NkYxQ0FBNTU4Mzc1N0QxRDY5RUVCQjhBQjFEMTQyMAorMTI2OiA2NjM5Rjg1MjE0QkM3OThENzFCNzU3RkNENDgwQ0I3OEQzMjU4ODE3ODFBM0EwNzMKKzEyNzogQzVCNzJCQkU4MDkxN0I1NTAzNkE5QUQ2OTA4RDU5MjkzQzQ5MzczRjBCREQxMDRCCisxMjg6IEMwQkQ2OTVGNkI5QjQyREFCNTQzQzMxQkE3M0M5NDk3QTZBQTY0MTlBMDA3QTlGNgorCitITUFDLW1kMgorICAwOiBEMzlBRDlEREUwMDY1ODdBOEJFOTQ5QjExQjkyODhGOAorICAxOiBGQ0IyMUI1MzQ4Qzk1RThBOERDQkVFNTBBODAzMDJDQQorICAyOiAyRjI2QjZBQ0NEMEUwM0ZFOUIyMUExQjBFNzVGRjY2NQorICAzOiAxN0NGODVEOTg1RDBEODVGNTQ1ODk3Q0Q0MkM2RUZFNQorICA0OiAxNTM3QTY5NDNCNEY1QUMxMjcyRTQxNjEyMjVEOTg3QgorICA1OiA4M0UxNzE2NUQ2MkNBNkU0QjlFRDY3REYxRTU5OTk1NAorICA2OiA3QTMxOTVDODYzREZGODZBOTg5NjhGMjU0RTEyOEU2MQorICA3OiBCRDA1MDU3QUVCRkNCOTJGQTRCMDc0NTYwODVFQzZDMgorICA4OiAyM0FDMEQzMDdCRkMyRTg3NzYwRjhCREIyMTg1MURGOAorICA5OiAyQ0QyNkEyRjI5OTQxMDZBMzc1QkVCMDQzMzU3NUJERQorIDEwOiAxRjYzQkZDNDRGREJFOUE5NjZDRDkwREY4MjI2NUVGRAorIDExOiA3MjczNUZBQURDMzgxOUNDMjRDRkNFMUQ1ODlCQTMxMQorIDEyOiAyOEI1ODlDM0M4MDc4QjhGRkVGMUM4Mjk3RTMzQzFFNgorIDEzOiA3MEE2REMwMTRDQUQyNzUyOTMxQTQ3QzA4NzlEMjM3MQorIDE0OiA4MTY5NDMxN0EzN0ZGQkE4MTY1MDQ5NzRGMzhCNDgyOQorIDE1OiA3MkYyNjIwOEIzMDUxRjFCOTM4RUE3RTAzREQ4QzEwNworIDE2OiBGOTQ1RjU3RkUwNjk2QTRDODFFQzU5QUU2OTM4NEZBQgorIDE3OiA1NEQ4REZDRUUzMzk2OTQ4Njk1NjY5ODQ5NUI0QkZEMAorIDE4OiA1MDhCODJGODhBMjM0RTc1M0E5RTMwNUUxNUExNEQ4MgorIDE5OiA1MjdENzdEMkFCMjUxMzE2OTNCMDJGNjUzQUNCRDkwRQorIDIwOiA0ODY4QUM1NDBGQ0MzQTg5NkQ1QTg5RjdBMDQ0NEQzNgorIDIxOiA2MTg5ODA3QzVGRERERDY4RDIwMzU2QURGM0I5MERDMgorIDIyOiAwMzU2MzYyRjJCQzQyMDZGMkI5MzBDNDI4MjIxMzc1OAorIDIzOiAyRjU5OTU2RjE5QjNDQUQ2ODdDNjZDNEVDM0NDOTE2RAorIDI0OiBFMzBDRUZCREEzRkExQThFRERFM0I3MjYxNEFEREVERgorIDI1OiAzM0UwRTZCRkNCQzk1ODFCQkNERjEzRjREM0YyNjcyNAorIDI2OiBCMTFDNjQ3NkY5Nzc1MjE5QTlGMThCNUU4ODg1Nzc5MAorIDI3OiA0OUM3QTlEN0Y1NjM0NEJENDA1RTUzQkU5MjdFM0E1OAorIDI4OiA5OUEwNjg3NEIwRjBDQTQ1QzlGMjlFMDVEMjEzMTk1RgorIDI5OiBEMjFBNjBBMThGMDYxRkM0NTNBRDVBQzJBNTE5MDcxQQorIDMwOiAyRjczNUU4MjA5MDE0NEMwMzZFM0QxMkRFRjJFMDAzMAorIDMxOiBGOTUzOUVBQzgxQkJDRDAwNjlBMzFFMkEzQzQzNzY5RAorIDMyOiBFRENBQTlDODVBNjE0QUI2QTYyMEIyNUFGOTU1RDY2QQorCitITUFDLW1kNAorICAwOiA3NTJFODc0RjM1MDg1RTQ5N0Q1MDMyMTEyQ0M2NTEzMQorICAxOiA2QjJDQUFFRTIxMEY5NzBBQjQ4MUQ2RDhFRTc1MzExNAorICAyOiAyMTYyQTQxNTIyQzJEQjBCOEFGMUYwQzcxMkMxOUEyMgorICAzOiA3QzIxMDZDM0NCNjg3RjM1RkUyNjU4QkVFRkI0OTdBNQorICA0OiAzNzE1MzMzQ0EzRUI3NEExNUI0QjE4MDJBMUE3ODkyMQorICA1OiA0MDNEOUE2OTFBMTMwQUZGRkI4MUE2NTVBQUUxRDk1NgorICA2OiBFNjk3QzNDQjQyNzE2Q0ExOTczREUwRDE1NDg2MDY4RQorICA3OiA5OTY3NkYzNEU0MkM2MUUzOTZGMEU3NkJDQjc3QkVBQgorICA4OiBBMkIyQ0U4Q0Y4QUMxNTFDNTU1NkEzNkQ1ODg5NEM2MQorICA5OiBCODYxNEJGRjFEQUFFQTkwQkYzMTlGMzMzMDI0OTc2QworIDEwOiBCODc1OUU4Qjk3REZDQkIyREI5NEQ4Q0JFMkM5NkIyMAorIDExOiBDRkZFNjExOUVCMEM2NDk4MzE0NTkzMzlDMUIwQzgyQQorIDEyOiBCMkZDMERCQTlDNDgzMENBNjY0MjM3Mjg1OTlEMzY2MAorIDEzOiA0NTQ3NDlGMURFNTc5RjE5MThGRjA0NkZDMUNBRTdGNgorIDE0OiBDQzYyNTE3OEZFRkQ0NjQ4MUI3RDAyNjE4QUY2MTk0RQorIDE1OiBDMjZENTIzRUZDQzQyQzRBRjdFRUMyRUE0QjQ1QjcxOQorIDE2OiBDMzUyREEyRDA3N0ZBM0Y0OTNBNUNFMEU5QTc5Q0I4NworIDE3OiA1NzBEREU5RkQyMjBGNTk4NjdGMTc0ODQ2MDVEMjA2MQorIDE4OiBGRjU5NTRBMTYzQ0JBNjFDRDNDODQyNENDNzE2ODJDOAorIDE5OiAxMjQwRDEyRTNENkMwN0Y2RkUxQ0Q1OTVDODQ3QzAzOAorIDIwOiBFODdBNEQ3OTU4QzQzQ0E3MTc5MUIxM0UxNjMwMTAzNgorIDIxOiBCMkNFREU0QTE1RjhENjRDNTNEMjQzRjhDNTc2M0MwNQorIDIyOiA1NEE5RTlFQUUxNTVFN0FGQTZGQzhBN0UwNUQ3RkE5QgorIDIzOiBERjBFNzlGMjdDRTI1RTU2QUJDRkY1RTc0RDEyMTJDQQorIDI0OiBEOUJFNDU0QTk1RTVEOTEyNzk5MDU3N0Y3RUI3MTgzRQorIDI1OiAyNkY5MjIxQThCODU0NzY3ODYxQkYwMjgxMzAzQjg5RQorIDI2OiA5MkJENENDODFBNjczQjI1NEE0QUI0OTM4NjRCQjAxNAorIDI3OiBFQkMzODUxRTBBRDI4QkU5ODc2QkVGRDZCMEE4OEI0NAorIDI4OiAxMTM0QkM4QTQwRTFEMkZCMDM4QjY3NTQ4QUMyMDQwQgorIDI5OiA5NTQ3MDAxMzVDNEU3RjIzMjMzN0M4NDEzMEI0MzM2MAorIDMwOiA4QzNFRjJEOEY4OTZDOEQyNTI4NTFBMTU0M0Y3MjQ5MworIDMxOiA1MjgxN0U3OUQyQjBCM0EzN0RDMDhEMThEMzUxOUY5MgorIDMyOiBEQTY2MUE0MjhCOTY1OURENTk1NDVFM0IwOTE2MkY4RgorIDMzOiAzRkY1QkI2N0I0OEY4N0I0QjY0MkRBQ0NEMkU0MDAxRQorIDM0OiBDNjc0Rjk1QkI2MjJEN0I4MjgxRkZGMzRFOUVGM0U3QgorIDM1OiAzQTREMjVFM0JDQUJBRDhDRDQ5MThDRTY1MEVGMDBFOQorIDM2OiAyRDkxMjQ4QzUxODM3QThCODA4OThFMkNFNDJDQkNCNAorIDM3OiBDMEIzQkQyQjM2NDkzRjBFQUY5QUFGRUZEQzM3MDY0RgorIDM4OiA5QjQ3MjNCMDkxMTAyQjQ4MEIyQjU5MDY5MzE3RjI5MgorIDM5OiAwRjhFQUJCNDg5MjU0NDkxRkUxOUFEMEUzMjhBNDgzQworIDQwOiAyNTQ2OUJENDgyRTE0MDVFNTFBQTAyMTc1MjM5NEM0QworIDQxOiBERjFERjUwRUY5RDk1ODkyRDA4REZFRkI3OUQ2NTUyQgorIDQyOiA3MDdBNTQ2OTY0Q0IyMjcxMDQ4MkM0NzhFNThDMkUwRgorIDQzOiBEMUUyNDNEQjE0RTJGOTQ2RDY1MEM4MTEwMzBBREU5QQorIDQ0OiAxMUExQUVBNjc4RTk4QTY1NDIwNzQ3REQ2Q0Y5MjkzRgorIDQ1OiA2NkU3MzVGNjU4QkQ2ODlBOUYxQkEwQjUyNjgyN0NGOQorIDQ2OiA5ODE3MDczNEU2N0Y1NzZDQ0MzRDAxRDgzOTY1QTZDOQorIDQ3OiAzOTlEOTlDQjc5NzlFODBGNkQzQjVENUJCQTU4NzFDQQorIDQ4OiBDMjY2NTFDMzJFQUJDNzYyODlDRDA4NDNEM0JDREQ5MgorIDQ5OiBBRTBGNTA5NTRDOTBFODg5N0JDRjUwNDU5MkQwNjI2QworIDUwOiBFQTNBQjcwMTEzNjg2MjQyOEVDMzI2RDI1NTFGOEFDOAorIDUxOiA0QUU5OEU1QTFFNkIxQkE4Q0VBRTg0NEUzNDkzNDAzOQorIDUyOiA3Qzk4MjYxODcwNTMxODZEREMyNzYwQUU2RkI1NkRDNworIDUzOiBGRTBGNTU1Qjg1MUNBRDgzMEJBQzlGQkI0MDcwNTY3MQorIDU0OiAyMjFCQjUwOTU4NEJDQzdFMTBGM0I0RkFCMkFFQjFGMworIDU1OiBERDkzRUFGRTI1RUUyN0M2RkRDMkNDREU3RDI3MzI2NworIDU2OiA1MzU0NzJFMUVDRDQ5RkFBNzVDQzY2MjFCRTdFNjIxMAorIDU3OiBEQTQ1NTRGRjdENUIyODlBMDNEMTk1Rjk0MTU0QUY0NworIDU4OiBGMTVBM0Y1NDdCNUEzODQ0QkZGNzEzQ0JDRUY3MDFBMQorIDU5OiAyNzlERTA2RkQ1NjQ0QzUyMEJBREQzQjk3RDk2Mjc0RAorIDYwOiBCOTMzRTkyOTA3MzQ5MkVDMUUyQUVCNzgwNzFDN0I4MworIDYxOiBEMURBMjMzNTY1NEFCNENFQkFFNUMyRTc4Q0YyNzU1MworIDYyOiAwNkZDNTAyODVGNEJBNUM4QjVBNDc4RTlDMDJENjQzNAorIDYzOiBEQjY2QTVENTUyMjREREI1MDMzN0I3RkVGOUE4MDhBNworIDY0OiBFQ0ZDRDAzODVGQjQ5NTUzRUM4OUREOTRBQjA4NEQyMworIDY1OiA0MTg3QjBCNzlFNkNCOTE2Rjc0N0I4NTdBQjJGNzVEMworIDY2OiBFMDNFMTRGNUUwMEIyREZDMDYxNDMwODYwOEI5MjlCOQorIDY3OiA1RjYxRkMzMDA1MTY3RUIzMjU2REI1NDlEQThCQTU2MgorIDY4OiAyMUE0RDE0REY4RTkzNEE4NTg1NjlEOEJBN0YxNTFFOAorIDY5OiA1OTU1RERBNENFRjE2QUJBREUyQjU1MTg0MUM2OUI4QgorIDcwOiA4RTc3MDY2QTk3M0I2MERGNjRDMjdEQkI5M0VGMjA0QQorIDcxOiAyMTAxRUU5REM4MjIxRkYxN0Q5RDg4N0ZDMzlGNDFCQQorIDcyOiA2NTc0QTlERTMyQjdBNjczQjVCQTIwRkYxOEVGOEM5MworIDczOiBGNTcxQjE0QzlGNUM1QzE4NThENDhBQTk0NEExMzA1MAorIDc0OiAwQkE0QkUwQTVFODUzRDA3Rjc5QjJEMjlCQ0YwNDZCNQorIDc1OiBGMjQwQzhDMzhENzExMzFGNTEwMzY5RDc5RkEzMjIwOAorIDc2OiA5MjBDMjk0REUzN0MyODgwM0ZGM0M0OUE0MTM1Q0Q2NQorIDc3OiAzODc5NkQyNTgyMkFEOEYyQUI0RDY0RTRBNjU2MjZBMAorIDc4OiA2NUEyMDMxNzBGREY3OTQzOTdGRDEwOTBFMzE4QzVEQQorIDc5OiA5NjVBNzY3RkU0QTc1QkVFQ0UyNkJBQTc5RDgxNkFENworIDgwOiAwRjRCMzA5NDdCNzkwQzQ3OTI0NjU3NjQ4RkExRDg4QworIDgxOiA3NEIwNUY3QjdEMDA2RjdEREFCMzFEQUUyNTFDM0JCMworIDgyOiA2MUIwMzY2QjU3QThGNDZDMkY2QzE2RjkzNURBNzY4RgorIDgzOiBENENCMTNDQTkyMkI1NDI5ODBGODU0Qzk3ODBBMTk1MQorIDg0OiAwMzlCMkYyM0ExQ0U0MTBGRjQ2OTZEOUMzNUM0MEMwOAorIDg1OiAyRDczNEUyOEY5OTVDMkFBMkE3QUUyNDEyRUI5OUExMAorIDg2OiAxQTU1RkU0NzcwM0VDREJFNDQ2MDMzRjQ5MjQxMjgxMgorIDg3OiA2QUY0Q0VEODZEMDE4MUQ2RTk5RUU2QUU1N0YyOTVFQworIDg4OiA2OUMyMzlBODc1RTAzNTJEMjBCQ0ZCQ0Y4RDVDQTE5RgorIDg5OiA2MjcyM0ZCQkYwQUM2RjM5NzQzODU4OUFGMDY2MjVBMQorIDkwOiA0MjRFQzkzNTM5MDE3OTUyNTFBRUY3RDdCQ0ZFQjhCRQorIDkxOiA5QkJFNEVENkM4QkQxNEY4NUJBODZFNTUzQjFCODE1MgorIDkyOiBENzg0MEFBODJGNzg4QjdENTg3MTJFMjkwMDNEMTIzOQorIDkzOiA0QUE1NTUxMkRDQUY3NzBGRTREOTQyOEZCMzE4QjBCMAorIDk0OiBEMDQwQkEwOEJFREZGQjIwRDJDNDk5RkVCMzVFRTEyQQorIDk1OiAwRjI5NUVERUZDODU1NDY1NDc4NjBCN0Y3Q0RGQjFBRQorIDk2OiA3MjBGQ0Q4NzFCN0Q4ODI0RUU2QTdERTlGRjFBNjJCRQorIDk3OiAyRkUzQUQxNEUyNEM0NDFDMzYxODY2NzNBMEQ2MDc2NworIDk4OiA5NDNGRDUwMjEzNkI2NkQwMzEzOTUxMTk4NjgwRjc0NgorIDk5OiA0RUU2ODI5RjNFRkZEMEE4NzExNTUxMkVEMjhDODVCQQorMTAwOiA2RUUxQUMyOEEzMjAyNDZDQTVDMzdGOTgxRTIyRDI5NAorMTAxOiAzNkJDNjIzRDY1NzNDM0FEQjE2NEY4QTZGMDIzMTVBQgorMTAyOiAwOEIzQUFFRDM0RkIwQTBGOTlDNEIyMjcxNEI5Q0VBRAorMTAzOiBCRENEMTBCNjYwOTZBQjk5MkRFQzU1Mzk3NzNFQUYyMworMTA0OiA2REEzNkE1M0E3OUZBMkM2OEU1MDYwQzBEMkQ0M0UxMworMTA1OiBBM0U4ODYxOTk1MzJDMDI1MDc0RDQ2NDYxMTNGOUMyMworMTA2OiAwMEQ2N0ExRDJBRENBNzdBMjA0NDFDQkY1OTNGREVFNQorMTA3OiAyRTQzOTlGNUZCNDRGRjU1NzNCNzNEMDFDNUIyNDhFMgorMTA4OiBFRDIyQTE4QTg4MjRBMzBCNjhFRTBFRjk5MDdCMkI5MQorMTA5OiAzNjE2NjgyNDYzNDMwNDQxN0JFQ0NDOTUxOTg5OUNERAorMTEwOiAwNzU3REIwMTE5M0JFRUU5MDYxN0FBOENBRDAzNjBBOAorMTExOiBGNzY5MUNCRUY0RUQyRTlGRTRFQjk5MkNCMzkzOTk3MAorMTEyOiAwOURDMkZBOTc1Q0JFOENFODI4OTE5OTU3RDExMEVDMgorMTEzOiA3RERCNzRERUM1N0FFOEMzMThBQTVDQ0ZCNTM4NzJGNgorMTE0OiBBMjZCN0REMEFBMzBFQUFGMUY0RjgzMTRBQjdERjE2QQorMTE1OiAwODg4NTU1MjdCRUJDREI2N0E0MEZFQTRGRERDQzA2MQorMTE2OiBEMEY4RUNDMEMzMkI3MDYwQ0I2MTI4Mjc5RjU3RkQ4MAorMTE3OiBERjVCNzlEMzY3MUNBNUU1QjQ0Q0QzOTVGNkZGQTU1MQorMTE4OiBEQTg5OTlFQTA1OUM0NjNENUYwNUQwNDAyMEVFODY3RAorMTE5OiBDMEVFNDA0REQ4NDQ3QUE3MEQzNzI1RDU2MzRFMkI1MworMTIwOiBEMTlEMUE3MjVGNUU5RjBERjIxODcxQjMxOTAwQ0E3MworMTIxOiBFQzIwMjk4NEJFMTQ5QzkzQ0MxRDQ0MENGNkQyOUUxRgorMTIyOiA0MjJEQjdDMjFCMTM0ODk4M0I3NTQ5OEUyNzBGRTZDMQorMTIzOiBFRjEzNjMzNEJDMzBDOTJEQjkwODJBOTY1NEIzOTFFNAorMTI0OiAwQjM1MjY0MzBBRTczNDA1NDg3M0IxNERENjk2Q0IzRQorMTI1OiAzQkVCNzdDMEY4NUY4QzZGMjE3OTBBREYzMEVCQjgxMgorMTI2OiA0Mzc2RjhDOEVBRjVBOTQ4NzE4MjJEQkRGQkI1Rjg4RAorMTI3OiBGN0RFQUY1MjM3OEZGNzM1QjJEMTcxQjE3RUY1NzNEOAorMTI4OiBCNEZBOERGRDNBRDRDODhFQUJDODUwNUQ0OTAxQjA1NworCitITUFDLW1kNQorICAwOiBDOTFFNDAyNDcyNTFGMzlCREZFNkE3QjcyQTU4NTdGOQorICAxOiAwMEZGMjY0NEQwRTM2OTlGNjc3RjU4RUNERjU3MDgyRgorICAyOiAxQjZDMkRCNjgxOUE0RjAyM0ZGRTIxQjkxRTI4NEU5MworICAzOiAwNEIwRUQzRTczRkJCOUE5NDQ0NEZERkZBQTUzMDY5NQorICA0OiAxNTU3QTIyMjYxMTEwREZCMzFBQ0UyNTkzNkJERTQ1RAorICA1OiA1NEM1QTY3QTlDQjQ1NDRDQTY2QkJEQTFBMkI4NDc5RQorICA2OiBGODAzRDlFNDNDOTM0NTQ1QUYwNzhGRkJCMzRCQzMwQgorICA3OiAzMkY1NkVBNjU1REYzNkQ4NDVFNDMwRDYzN0M4NUQxNworICA4OiAxNEJEMjA5NUY0QTQ3OEMxMEVFQkZGMzc5REU3NkREMworICA5OiBBQUY2ODY3QjNGQTAxREQyNjMxMkIwREZENjM3MUEyQQorIDEwOiAwRkEyQTZGRUZFQkU3Q0UzQzMxQTM4NDAwRjhBQjI2MAorIDExOiA1NEMzN0JFMTNCNzMzMzI4N0QwRTc0QUE5RDkyMjdGNgorIDEyOiAzODVENzVBNThCMEM5NUU1Q0RDMDU5REIxNjhCRDFEMgorIDEzOiBFNzMwMDMxMDNFRDY1QzA4RTYyRDQ2QUUxRTFCNzcxQQorIDE0OiAyNzhFRDRBNEVCRUExRkZBNUVFQzg3NEYxOThDMENDMAorIDE1OiBGNjVDRTlFRUE3RkRCOTBCOUNDNjAzMzI5RDNGQjlBOQorIDE2OiA4NjQwODM2OTQ0RUUwMDA5QjJDQzZGREMzRjVDMzlFMQorIDE3OiA3ODE5QTk5RjgyQkFCREYwNjBBQTUxQUUxMDk2MjlEQgorIDE4OiBFRjI2MzM2NjY4NDg2Qzc2OTIxRDFEQUI2N0VENTY3MworIDE5OiAxM0VEN0JDMTQwRjE0OTZFMDlBRDI5QzY0NDU4Njk1NworIDIwOiA1RkREMzM3Q0U5QzRBQzhEOTEwODMzRkNDMkJEODM3RQorIDIxOiBFOTQ3MDI0NkFCRjdDRjREMzdGRDM3ODczOEQ4Rjc2MworIDIyOiAzODRBNzVDMzNFRkZBMTJFQjY5MTg3QkI4MERGODQzQgorIDIzOiA2Mzg2NkE1NDA2QjlFQTAzNDEwMzJGQ0ZEMDI0NEE0QgorIDI0OiA4MDQyRjg1NzJDOEE5Qjg4RTEzNUFDQjgzRUYxRkQzOQorIDI1OiBCRDFCRTZBRjJEMDIyRjk2NkY2MTI1NjlFMTkxRjBFOQorIDI2OiA5RjcwQzgzOTUzM0VFNEM3QjNDRjIwQzZGQjY1Qzk0QworIDI3OiA4MDBBNUNFOTJDQTRGRUU2RjFEMzUzRjQ5NjExMzg3MworIDI4OiBDMzVFOTNFMUU1NEM4NEM0Mzg5RDJERTcxRTFCOTg0NgorIDI5OiBBMTMwRUY1RjkxNDY1RjVBNTY5OTlGNDUwRTYzRjRGOQorIDMwOiA1RjE2NTY0RTA1Mjg1QTA5OUY2MjgyNDVERjlBM0MyQQorIDMxOiBBMzRGN0UzREYwNkREODRDQzY3RThBOTIyMjQwRDYwQgorIDMyOiA5NDVFNTA3NTNCNkU2QzkyMDE4MzgyMkQ1RjI4MEYxMAorIDMzOiAyREREMjY5REJDREY1QzIxQTFDM0ZENTQwRkY0QUJBOQorIDM0OiAyMTJGRTNFMkNFRjdERjc0RkMwMUNDMkNDODMxMTlCOAorIDM1OiBEOThCMjkzMDAxMTY0OUYxNkMwOEJDOEMwMTc4RDgzOAorIDM2OiBFMzlFMjEwMjYxMTFDMUVGQjBDNDkxQzBGREZBODQxRAorIDM3OiBBRTQ2REUwNkMzQjBEMkNFQzM1MzUyQzk1QTEwMDNGMAorIDM4OiA1NTUwRUU1MEJGODhDOURFNUFEQTM0NTY3RkUwNDRDNworIDM5OiA2QkM0ODY2Mjc3NjAzNzNFQUNGRjUwOEY3MDMyQkYzMQorIDQwOiBBRTZFMEI4REJDRkRDQ0E0QjM0NDlCNTc2NDdENUFFNQorIDQxOiA2QkU1QTBGMTQwREZDNEI3NTQzOTYzMEU2RjlBMzZFRQorIDQyOiBFM0U0RTczNUJGRTc5Mzk3RDQ2NTNBNjI0M0RGMTkyNQorIDQzOiA2OEMxRDlFODk3M0EzRjZCOTJCNTg4NDY5RDY4QTJBNQorIDQ0OiA5NTYxMzJENTEyMTE4RDVGNDQ2QzhDQjkxMkI5MjREOQorIDQ1OiBERjVDMkFENjUwQjNDQTdBODlFQkY5MkVFNjE4Qzg0NQorIDQ2OiAxNEQzNzVDRjdFNDI5NEVEOTkxMzVFNDIzNzQxNEYwMQorIDQ3OiBEQjk2NkQ0MEI0NDc2OTJFMkQxM0NDMEMwOUMxQjQ5NQorIDQ4OiA1M0RBRENGMUM2Qjk5QkQ0MDMwNTJBMUNFMUVEMEQxNAorIDQ5OiBERUM0QTNDMURCOEY2QUE0NTE1QzUxMkM5Mjk5QzREQworIDUwOiAzQjNBNTFERDgzQUIxREM1NkE3RjBDQkUxQzcxOTIzRgorIDUxOiAwM0M3MzM1M0IzMjAzRUY5Q0RCOTVGOURCODc1MEFGMQorIDUyOiBFRDlFMTVGRDg2RDY2REEyRDU0NkQyQkZDNTUwNDFBRAorIDUzOiA4MUI2NDkzMzhGOURCMUM2RTU5MjQyN0QzODIyMUM3QworIDU0OiA5MkUxNzBFMTNCRjQwRkY2NUUzQjRDNjY1RjIyMkRENQorIDU1OiAwMEQ1RTIzRjVGODI5QjIxRDQ1NEM0NDQ1ODUxQUI1MworIDU2OiAzOTA1NzAyOUFGMEIzRjQzOTFBN0JEQzZERENFNEQwNworIDU3OiAyREVBQ0VGQTY5OEY5Q0NBRDUxOThDNEUxN0U2OUE5MworIDU4OiBBRDM1RkQ1MkVBMTk5RTI2OTQ4MDA5REYzNTQ2RDNBMgorIDU5OiA0QzQyQ0YyQ0ZENEQ4RkQ5QTA2RTNGNzNEMDJGRTgxOAorIDYwOiA0RDdDODkzRTQzMTNGRkY3MjEwMzg1NDQ2MzQxNDI3NworIDYxOiAzRjA0RThCMzJBQjU2RUFGMjE2NTAzRTQ2QkQ3QUVCRQorIDYyOiBGMDE1RERDM0VFRjQxRUNDOTNFOTQ0RkEzNTc3REI1MgorIDYzOiAzMUY3N0E1MEEyRUQ5NkVEOEU0QTNDRTA0QjlEQUEyMworIDY0OiBGQkY0ODEzNzM0ODE3NTZFMEM4ODk3OEY3RTA4MDlBMgorIDY1OiA3RDhENzkzQjI4N0MwNEU3RDI4OTZENzZFQUE1Q0ExNQorIDY2OiBEQUM3NEFFQkVDQzIzODVERDlEMEMzMTQ3Q0NBMUY3OAorIDY3OiBGNkRERTUwRDM3QjQ2MEZGNUU4QjRDMDNBMDg1NEJENQorIDY4OiA1NzEwRDZBNTRBMjEyNEUwNkE2REFEQkU5QkY3NjExOQorIDY5OiAxOURCNUQxM0E1M0U1NzE4NDc1OUYzMzk3NjUzN0FBNQorIDcwOiA4NDhERDhEMzIxMzA2MjZGQkQxMUIwMTMzQzJBMjlFMworIDcxOiA0Rjc1QkUwNEJGMkY2REQ4NUQwNDhEQjgyRjE5QzM4QworIDcyOiA0QUU5NDM2NTQwRUQyNEJDQjVFQzYyOTc3QUM5MDc4OQorIDczOiA4NTlEMUE5RkMyQjc5NUFENjBGMjRBMzdFQjlFRjg5MAorIDc0OiBDRDQ1ODY1MzE3RkQxN0I2NTJERTlGOUVCQkJBMTZCNgorIDc1OiA1MjMxMzMxOUQzOTVGNDUzQkEyQzBBMDE1OUNGMTgwQgorIDc2OiBBN0IxOTBDMEVFQ0FDQ0E0REZDNUI0NURGQjMyNDcxOAorIDc3OiAyM0U4NUNBRTg1QjUwRjQ1RjdGNDhFRTBGMjJGREU4NQorIDc4OiA2QTgwREJGRjEzOUE1MzQ1MjM1RUY3NjU4NkNGQ0JDNworIDc5OiA4NTBFNjM4RkNFNUEyRjNCMUQxRkU5QzI4RjA1RUY0OQorIDgwOiA3OTdDREMzRjdFMjcxRkM5QTNEMDU2NkE5MDVEMUNGRQorIDgxOiAwMzBDRTk3QTlBMEIxRDU0MDNFMjUzRDg4M0ZDQUYxMgorIDgyOiA2NDhGRkZGNDRFNDE2RDlERTYwNkJBMEREQjc1MTE5NAorIDgzOiBGRTE1MDk4RTBEQUM2NUZBOEVFNDVDQUM2NzEyMUNDOQorIDg0OiAxN0M5MEVDRDM5MEE4QjQxMDQ2QjRDN0ZBMDM1NEU0RgorIDg1OiA3RDE0OURGRjVGNjM3OUI3REJGNUM0MDFEQjZEMjk3NgorIDg2OiA4RDA1NUE0NzAxREQ1MUNCOUQxQUY4RTJBRTU5QkQyMQorIDg3OiBGMzQ4MUNCMDdCMDM0RUI0QTAyM0QwMEQ0RkRBOUE4NgorIDg4OiBGRUIyMjU2MkZGQUFBOUNDRTVDRERBMzRDMjlFNTVDMworIDg5OiBBNjIwQUE0NDcyMTY3MDlEOENFNUM1RjIzNDc0RUNGOAorIDkwOiBGMjVGQ0JCMkJGNzQ0MEM1RTNDNUI1MzA5MkI4QzgyOAorIDkxOiBEQkJBRTFDRjYwQkJDQTBCMDVFREVBMEIzNjJGMEEzMworIDkyOiBFMThFODVCQ0I0NjMzQTc5N0ZBRjc5NzVDRUY0NEI4NAorIDkzOiAxQkUyN0VFQzcyQzJFREUxNTE5Nzg3MDVDN0M3REVEMgorIDk0OiBBMTVEMzZDNUM1QkVENzc2OTk4Mzg4MzJGQzIyNUREOAorIDk1OiAwOEYzMUU2OEJGQkJCNDIwNzQyRjgwQjIwQjY5QkU4QworIDk2OiA1RTlCNEI1QjMyMjhGNTMzQkE4RUZDM0MwQjlBQUQzRAorIDk3OiAxMjM5QkE2RDk0MUQxRDhBRDJFRDU2MUJGNTE3RDRCNAorIDk4OiA1MjMzRjUwMjE4RTBEMDk3RUZDQzY4RjE1MzZGMzBBRQorIDk5OiAzNDBCNDdDNzhCMDAzMjcyRUFBNEI5RDIyQzNCMDU0MgorMTAwOiBFN0YxMTc1OUZFOEE4OTczNjRDMjE3Njc1NzA4ODVCQgorMTAxOiAwNTRCRDZBQ0JGRDU0MjFDMDI5MEIwODM5QzBBMEFDQworMTAyOiBDQzA3NDhGN0IyQ0M5MjFDRjVGQTAxOUY5NTUwNjZDOQorMTAzOiBBNERGMTY3Njk3OTQ5QjFBRURCQkEzMjI2QTMzNEJBQQorMTA0OiAyOTg5M0I5Nzc2QkE1RTc1MEE5RkNFQTM3QjAxMTZBRQorMTA1OiAyREMyNUM5MzVGMDA2Rjc5NjVGQUIzMjU2RDc3MDA0RAorMTA2OiAyNDA4OTgxMUZGRjIxODlGQjlBRjM4NjUxRjQzOTc3RAorMTA3OiAwRTA0ODU2OUQ2MzRCRjY1MkNEOEVCRjg1OUM5QjY5QQorMTA4OiAwMDM4NkI1NjlEQUI3Mzg0NEE3MDhCQTVCNDhCQkFBOAorMTA5OiA4MDMzRTFBRkZCRTEyMThGODFDODMzMTM0M0ZCRTVCNQorMTEwOiA5QjgyMDA4QTM0RjM4NDdDMTIwNEFDQTg5RjNENTdEMQorMTExOiBCRTFBNTI5Rjg4QUEwNUE0MkFGQzQwRjY2M0U5Nzg0OQorMTEyOiA1MjM3NjM3QUE2NDVFODNCMEU1NkExMzYxQUI4MDY0MworMTEzOiAxNUJDNDQwNUU4OTFBREFGNDhGQTU2RDQzNTY3MDVENQorMTE0OiAwODIwMDg3NDM4ODMyQjYzQUFEQzQ3OUNGQzg4QkRCRgorMTE1OiBCMUUzQkE3RTk2NjA1RDVGRjYxNEIxQkVDMUY1N0FDMQorMTE2OiA4MzhBMDk2RDY0RTZDMEREQjA2OURDODlFNEMzRjgzOQorMTE3OiA5MzRCQ0UxNTlGMzk1OUE5MzNDODdBQjQ5N0NBOEQ0MgorMTE4OiBDQTUwMUYxREU2MTlBNTcwREMzOEZEQ0I4QjNGNzcyMgorMTE5OiAwMzNCMjdENTk5NEE2RjVENUY2ODAwNTM5QjY5RTg3NgorMTIwOiBCNDQ3RkM2OEZFRjRFM0NGOTI5MEIwNkVCNkFFQ0FBMworMTIxOiBERDNEM0Y3MkYwRjFGQkNEMDMwRDgzOURDRkVFNDU3QQorMTIyOiBFRTczQzRDOTk2RTAxNTBEOTNCMzE0NEYyMEZCMkMxQgorMTIzOiA1QUY5Njc5RDI0NDE1NDIzOTFDNkE5MDNGRDhDMTYyNgorMTI0OiAyQkQ4NEI4NzIzMDUxMURBRTcyNTZCNjJBNDZBQTQ1RQorMTI1OiBFQjE1OUU1Njk0QzE5MUY3NzA4OTUxRUJDMEFBRjEzNQorMTI2OiA2MEYwMkVGRTFEQUZBQUNGNjVGNjY2NEEyMzIxQjE1MworMTI3OiAxNEU1QTBFOTBENDQyMEU3NjVDNDMyNEI2ODE3NEY0NgorMTI4OiAwOUYxNTAzQkNEMDBFM0ExQjk2NUI2NkI5NjA5RTk5OAorCitITUFDLXNoYTEKKyAgMDogMDZFOEFENTBGQzEwMzU4MjM2NjFEOTc5RTI5Njg5NjhDRUNEMDNEOQorICAxOiAwQ0UzNERFQUFENUNGMTEzMUQ5NTI4RkFCOEU0NkUxMkY4RkUzMDUyCisgIDI6IDIzOTI0ODQ5NjQzRDAzQkJFQUM3MTc1NUE4NzhBODNCRDgzRjUyODAKKyAgMzogNjExOUREOUE3MDI0QTIzRjI5M0EzQjY3RUZBMkJGMUQ4MkVDMDIyMAorICA0OiAzNzlEQzc2QUMyRDMyMkZEOEU1MTE3Q0NBNzY1MzkxQkMwRTEwOTQyCisgIDU6IDc4OTdDQzg2Q0ZGMTdBM0Y5NUM3QUYwMkNDQTAzNTQ2RjVDQzIzNjgKKyAgNjogMUZBMUVGMzk4MEU4NkI4REYyQzhFNzQ0MzA5MzgxNzI3RUQxMEU4RQorICA3OiAwM0IyQjcyNkQ3MURBQzZBMkJFRTYzRUFBMDk2MzFEQTc4RjU5NThCCisgIDg6IEI4Q0FDNEMxMDQ5OTdBNTQ3Mzc0ODAzQjU4OTgwNTdCM0Y4MTEwQTkKKyAgOTogRTE2NUUwN0Y4RDU0MkZCMjg4QzdEMzY3MTk4RDA2MThERTNDOTkxNworIDEwOiAxODEyNUYwNDZDNjc1RjQzNEIzQzUzQTI4QzMwMUZCMkQ5MUI1RDM0CisgMTE6IEZBQUI5OTNGMkZFQUU0NDJEMjhGREJCNjEzRDJDNzY4RUQxMzM0MkQKKyAxMjogQjY1N0U3RUUzQTY1QzY0ODREMDA3RTIxNDg0ODEzRDlBRUQxMjY0QworIDEzOiBFRUVDMkJCN0JBQzE1ODc0MjcxMUVEMTMwOTBGQTIwNDYyQTVFNUMwCisgMTQ6IDEyMzY3RjNBNEUxNTAxRDMyRDE3MzFCMzlDRDJEQjJDNURGNUQwMTEKKyAxNTogNTdERDlEQTM2RTdBNEU1NjdBMkM1QUU5RjYyMzBDRjY2MTg1NUQ5MAorIDE2OiBFMzcxMTBEREQyOTVEOTM5OTBDNDUzMUQ5NTU2NEU3NEMwRUJFMjY0CisgMTc6IEIyMTE1QzRFOTIzRUM2NDBFNUI0QjUwN0Y3QkM5N0ZFNzAwRTEyREQKKyAxODogRUQyMEM2NzM0NTg2N0FCMDdFOTE3MUIwNkM5QjNCMjkyOEY0MzE4OAorIDE5OiA2Q0E3REZDOUY4RjQzMkRFRDQyRTRFRkU5RjJENzBEODI1MDc4MDJECisgMjA6IEIzOUVCNEQyQzE5MEUwQ0U4RkEyQzk5NEU5MkQxOENGQkNEOEY3MzYKKyAyMTogOTFCRTVBQkYxQjM1RjYyMjc3NzJFMzYzMzdGMjU4NDIwQ0Y1MTMxNAorIDIyOiBFQjk1NzE5OUVGNjY2QzZEMEVBQ0M2NEZDNDI2MUQxMUM3MTVCQjIzCisgMjM6IDJBMThEOEQ0QUIxRjhDNTI4QzlEMzY4QkY1QTdDRkZDMjE2OEQwNjcKKyAyNDogRDREQzM3MEQ0ODJEODI5MzI3MDFERjhDRUFDOTMzNzY4MkMyNTUxQgorIDI1OiBEQjk2NjVBNkEyNkRCREUyMDIzOEYwNEU5RjFBMzY4RDI2NTY0RTRGCisgMjY6IEQ1QUUyMTJDOUU1NDNGMjY1NjY5OUI1OURFRUQ1NENBQUNBOUEwNzEKKyAyNzogQkU4ODkwRjlERUM2QTAyQUUyODQ4RDg1MDVCNjQwOEU4ODRFNkQxQQorIDI4OiBFOEQ5REQ5RkFBMzA4MDU2MEIwRURFNzk4Qjc0NUZFRTJBMUU1NDc5CisgMjk6IEUyMTkyMTlEMkNCOEMzNjNDMjY4N0Y1Nzg0NDZBREUxQzA0MDQyODcKKyAzMDogRThFNzc2N0IzNUVEOEQwOTY1RjY4MjcyQUNFNjE5MjRDQjA0NDI2MgorIDMxOiAxQjI2Njg5QzFFRjU1NDQ4QTYxREZBRUY5OEI2RTcyMDZBOTY3NUVBCisgMzI6IEZFODUwMzkwODY0RTk4QTE3RkM0M0MzQzg3MTM4MzE2OTc0MUI0NkQKKyAzMzogM0Y2MzA2OEQ1MzZBMjgyQzUzRTVDMDAzQkNFRUM5NjY0NkNGNzQ1NQorIDM0OiAyOTYyQzI5MkNFMjQ3RjExQUNCN0UxRjk4MTQ0N0M1MUU5QkJFNjNDCisgMzU6IEIyODkwOUEyQjdCMkUwRTEzRkRDQjExMjRCMEJEQzMxRDdEMkZFREUKKyAzNjogOERBMEZDMzBDODMyMkRBQkQ2N0Q2MUU4MkZDOTIzNTE4OTQ3ODlBQworIDM3OiA1NDNEQUM2RDQ0OUZFMkREQzMyMDE5MjdEMDg2OTVGNjhGODMyOTA1CisgMzg6IDM3MTU0MEYzMDkyRjc3ODY3RjBDQTlEQTY5MzE4Qzc2NzNGNjgzODgKKyAzOTogN0VBRjMyMjA0RUE1OTkzQzg3RTlBMTJDNjdBREE0Qzg1RDI1MzI4MQorIDQwOiBGQzQ5OTRCQUEwNUY1OTI5MDEwODVFRDdEQTE4OEVDM0E5QkYzNkUzCisgNDE6IEVCRkU3NzU5MkVGMzRFODFCREEwNTMwNTg3NjQxMTQ4NERDMDc0NEYKKyA0MjogMjVGNjRFOEYwNzYzMDVENkY1NzQxRUE1ODIzMkY2OEI3MjVCOEY2RQorIDQzOiA1REJBMDNGN0U0QjQyMjY2NjZGMEQ4RDVCRjQ5RkVFNzc5NTFEMTIxCisgNDQ6IDk4RTFENTZENzIzRENBQ0YyMjdEMkFDNjdCRjJENkU3RkQwMTM0OTcKKyA0NTogNTM1NTBCQzU1QTM2N0Q4NzQxNkZGQTI1MjYxMzYyRTdENDYxOERBMgorIDQ2OiBCMTg0MzRCQ0NDQzVGMDhCMzUzOTdDMUE2Njg0RDYwRjRGM0E0NTJGCisgNDc6IEZGMkJGMzhERkM2OTA5QjQ2QTAxRTA1NUQxNzNGNjdBN0U0NTYzNDEKKyA0ODogREFGQTQ0NTQzMkVEMzdGRUM5OTA1OURCOEEwQkM1MjhFNzg4RTk1RAorIDQ5OiA3RkY4MjNDNTcwRjhCNEMwRTQ4MzE2NUMwNzZBRUE3QjVFNzI3NjMyCisgNTA6IEJDNEZDOTQ4QUI2MjFGRTE0MTlDRjYwMDZEQzA0RTdEN0IzMkZBMjMKKyA1MTogMTY3OEFGQ0MzRkJEMTA2M0U3QzgyQ0FDQUQ1QjZBOTMzQTkzMDkxQQorIDUyOiA5N0RDMkY5RjU2NzM4RkRBRkZENTU1QkYwOTI3NDE1M0ZDMkZEMDA5CisgNTM6IDc0RjVDQjRGMDkwMDQ0MUI3QUZGQzI3OEMwMUEzMDM4REYzRDYwQzgKKyA1NDogMDIxRjY2MTQzMjcwQzlENThGMjZBQjE5M0RCQTgxQTgxMTkxN0NCQworIDU1OiBGNDg2RDFDODEyNzgxM0ZFRUVBOEE2OTNDNEI4RUNCNUJCNTNDM0EyCisgNTY6IDgzOTdDQUI4RUVENUIyMTY0RkVDNkJFNjg4OTcxREZBMjEzODkzNEUKKyA1NzogRTQ0NzdDRTlCRjhDQzVBNENDREUwMzlCNEUzMDAwRjFBMEY0MTUzQQorIDU4OiBENkQyRDFFM0VFNEQ2NDNBQzRCMzg4MzZBRTU0RTg0NkY5OUIzNzZECisgNTk6IDk1NDVCMkM2Mjc5MzcxRDREOTI4QUVFMjQzMjgxMjFENDNERTFFNUUKKyA2MDogOTQ3RUQzOEVDMDg3QzRFNTNGNDE3RTgyMTY0MDg4NjNBOEVCRkNCMgorIDYxOiAzMjUxOEEyMzI2QUNERTFFOTYyQjNEMEQyQkY5NTBGMzE4ODk0RTgzCisgNjI6IDVEMjFEMzY4RkI5RDg3OUFEQzI3QjM0MUQ2MDhCQ0Y4NjBBQjE0RjQKKyA2MzogRTJCRUREOTRENTY1QTUxOTE1QjFFQzZGQTlERTE4QzYyRDEyNTMzQQorIDY0OiAxNUFCRjY1N0RCNjQ3M0M5RTJGMDE3QzdBMkY0REJBM0NFN0YzM0RECisgNjU6IDBDOURBRjhEOTU5REFFM0I2NkZGOEEyMUE5NEJBRkM1MjNBQkM0NjIKKyA2NjogQTM2QkU3MkI1MDFENDM1Q0I2MjdDNDU1NUE0MjZDNEFEQUYzRDY2NgorIDY3OiAxQzE3MTk3OUQ2N0EwMTRBMDQyMkQ2QzM1NjFDODE3QTM1NENGNjdECisgNjg6IEI3NTQ4NUIwOEVEMDUyQTFGNEMzQkFDQ0UzQzU2M0RGNEJBODI0MTgKKyA2OTogMTcyOTc2MjQyMTlDNTk1NUIzQUY4MUU1RUQ2MUM2QTVEMDVCRDU0RAorIDcwOiAzOEE5QUM4NTQ0RjBFRjI0QTYyMzQzM0MwNUU3RjA2ODQzMERBMTNFCisgNzE6IDFFOUVFRUFENzNFNzM2RDdCNEY1QUJCODdCQTBGQUJBNjIzRkIyRTUKKyA3MjogNEI5RDU5ODc5RUFDODBFNERBQjM1MzdFOUNBOUE4NzdGN0ZBRTY2OQorIDczOiA3Rjc2RjJGODc1QjI2NzRCODI2QzE4QjExODk0MkZCRjFFNzVCRTU1CisgNzQ6IDE3MTZBNzgwNEE5QTVBQkM5RTczN0JERjUxODlGMjc4NENFNEY1NEIKKyA3NTogMTY4MDI3RURGMkEyNjQxRjM2NEFGNURGMUNCMjc3QTZFOTQ0RUEzMgorIDc2OiBGQkM2N0RFRDhDMUExQkVCQkJDOTc0RTQ3ODdEMkJBMzIwNUYyQjFCCisgNzc6IDMzREQyNkM1M0YzOTE0RkVDRjI2RDI4N0U3MEU4NUQ2OTcxQzNDNDEKKyA3ODogOTc5MDYyNjgyODZDRDM4RTlDN0EyRkFGNjhBOTczMTQzRDM4OUIyRgorIDc5OiA0NUM1NTk0OEQzRTA2MkY4NjEyRUM5OEZFRTkxMTQzQUIxN0JDRkM4CisgODA6IEFFMTMzN0MxMjlERjY1NTEzNDgwRTU3RTJBODJCNTk1MDk2QkY1MEYKKyA4MTogQ0VDNEI1MzUxRjAzOEVCQ0ZEQTQ3ODdCNURFNDRFRDhEQTMwQ0QzNgorIDgyOiA2MTU2QTY3NDJEOTBBMjEyQTAyRTNBN0Q0RDc0OTZCMTFBQkNGQzNDCisgODM6IDMwNDBGMDcyREYzM0VCRjgxM0RBNTc2MEM2RUI0MzMyNzBGMzNFOEUKKyA4NDogRUUxQjAxNUMxNkY5MTQ0MkJBRDgzRTFGNTEzOEJENUFGMUVCNjhFNworIDg1OiBBOTI5QzZCOEZENTU5OUQxRTIwRDZBMDg2NUMxMjc5M0ZENEUxOUUwCisgODY6IEMwQkZCNUQyRDc1RkI5RkUwMjMxRUExRkNFN0JEMUZEQUYzMzdFRTAKKyA4NzogQUI1RjQyMUEyMjEwQjI2MzE1NEQ0REFCQjhEQjUxRjYxRjgwNDdEQgorIDg4OiAxQjhGNTM0NkUzRjA1NzNFOUMwQzkyOTRERDU1RTM3Qjk5OUQ5NjMwCisgODk6IDA5REFBOTU5RTVBMDBFREMxMDEyMUYyNDUzODkyMTE3REQzOTYzQUYKKyA5MDogQUNCNkRBNDI3NjE3QjVDRDY5QzVCNzQ1OTlEMDUwM0I0NkZDOUU0NAorIDkxOiA5RTFCQjY4QjUwQkQ0NDFGQjQzNDBEQTU3MDA1NUJCRjA1NkY3N0EyCisgOTI6IEQzRTBDOEUwQzMwQkNCOTAxN0U3NkY5NkVFQzcwOUJGNUYyNjk3NjAKKyA5MzogQkU2MUJCMUJDMDBBNkJFMUNGN0VGRTU5QzFCOTQ2N0Q0MTRDRjY0MworIDk0OiAxOUQ2OTNCNTIyNjZBMjgzM0VDQTJCQjkyOUZCRjRGQ0U2OTFBNUM5CisgOTU6IEI5OTgxNjg4NkQ5RkU0MzMxMzM1OEQ2ODE1MjMxRTUwQzNCNjJCMDUKKyA5NjogN0E3M0VFM0YxQ0YxOEI1RTIwMDZBMjBCQjlFMDk4RTk4QjY1MTNDQQorIDk3OiBERUM2MjBGMDA4RUY2NUE3OTBBN0QxMTM5QUNFNkU4QjhFRkNDQTVFCisgOTg6IEI2QkEwRUJEMjE1Q0YxQjM1NzQyQTQxRUI4MUEyNjlBQ0I2N0M5QTQKKyA5OTogM0EwRkFBRDE0RDNCNjRCRTRFREI5RDUxMDlEQzA1REZGQTc2ODBFMgorMTAwOiAxMkU2MkNFNTMyODNCNTQyMkQzRUE1RDhEMDBCQzdGMEFFOEExMjdDCisxMDE6IEFBMzZGMENDNkI1MEFCMzAyODZCQTUyQkNCOUJCNUMxQkQ2NzJENjIKKzEwMjogNTUxMjBDNjhCNDE5RkU1RTEyREI1MjZENEFCRkM4NDg3MUU1REVDOQorMTAzOiAzNzJCRjkyQTlBMjUwNzUwOUMzRDM5MzJCMzI0NDRCN0JFMUM5QkFDCisxMDQ6IDdBQjRCMDRFRUMwOTFGNEFEQTA4MDdEREQ3NDM2MDlCQ0Q4OTg0MDQKKzEwNTogMjBDQjQxMjQyNUU4ODQ4MkU3RDE4NEVGRUY3OTU3N0JFOTdCQUZEQQorMTA2OiBERUI5MTM5OUE3QkZCODMyM0JDOEU2QTVGNDA0NTEyNTI3N0MxMzM1CisxMDc6IDY3NjlGNDE2MjRFNTUzQjMwOTJGNUU2MzkwRTREOTgzQjg1MUM5OEMKKzEwODogNzE2NzYwRTRGOTlCNTlFOTBBNEY5MTRFMUZCNzJBNkQyQzRCNjA3QQorMTA5OiBEQTBBQTU1NDhCNUMwQUYwQ0M0OTRGMzRDQUI2NjJBMzAzNzJERDExCisxMTA6IDE3QTBFMkNBNUVGNjY2RUIzNEUyRUQ5QzEwRUJDNUREQ0QwRDlCQkIKKzExMTogMUIzNjE0QUY3NDlFRTM1OUY2NEYzQkUzNjUwMjEwQ0MzQzM0OThFRAorMTEyOiAzNDZFNjA0NjIyQ0Y4RDZCN0QwM0I5RkU3NEU3QTY4NEFFQ0NBOTk5CisxMTM6IDYyOUU0Njg4MkQyMTRGOUJENzg0MThDMkE5NzkwMEIyMDQ5RjFDODMKKzExNDogNzY1Rjg2MTE0RTk0MjIxNEUwOTlFNjg0RTc2RTk0Rjk1RTI3OTU2OAorMTE1OiAwMDJFRDU3OEY3OTA5NEIzRDdFMjhDQzNCMDZDRDIzMDE2M0YxNTg2CisxMTY6IDUyQ0M5NzQ4Nzc4QUY1QzhFOEI0MUY5Qjk0OEFCQ0VDRjQ0NkJFOTEKKzExNzogOTMyNjE5MEJGM0ExNUEwNjBCMTA2QjE2MDJDN0ExNTlFMjg3RkQ0QworMTE4OiAxOEE1REZCQUU2RTdDOTQxODk3M0QxODkwNUE4OTE1RENFRjdCOTVCCisxMTk6IDZEMjVCRjFFOEYxMjQ0QUNCNjk5OEFBN0IxQ0IwOUYzNjY2MkY3MzMKKzEyMDogNUY5ODA2QzBDMUE4MkNFQTY2NDY1MDNGNjM0QTY5ODEwMEE2Njg1RAorMTIxOiBDMzM2MkNFNjEyMTM5MjkwNDkyMjI1RDk2QUIzM0IyQURGRjdBRjFFCisxMjI6IDNENDJBNUMxRUFGQzcyNUZGMDkwN0I2MDA0NDNFRUY3MEU5QjgyN0UKKzEyMzogN0ZGOTdGRkM1RDRGNDA2NTBEN0E3RTg1N0UwM0M1RDc2RURENjc2NworMTI0OiAzQTkyRjJBMThFOEY1OTNFNkE4Mjg3OTIxRTE1RTI5MTRERjY1MUVGCisxMjU6IENERTZGMkY1ODE2NjI4NTM5MEI3MTY0MEExOUJEODNDQTYwNUM5NDIKKzEyNjogMjFBMjI3QThEQTdBOUY1RDE1QzQxMzU0MTk2RDc5RkU1MjRERTZGMAorMTI3OiBFQkU5M0FCNDQxNDY2MjFCQUFCNDkyODIzQTc0MjEwRDNFOUZEMzVDCisxMjg6IDY1NjBCRDJDREU3NDAzMDgzNTI3RTU5N0M2MDk4OEJCMUVCMjFGRjEKKworSE1BQy1zaGEyMjQKKyAgMDogNkU5OUU4NjJFNTMyRTg5MzZENzhCNUYwMjkwOUIxMzBBQjA5ODA2QjJBRjAyRjdDQjlEMzlEMTIKKyAgMTogMUQxRDA4NjY5RkMzNENEQzVGRTU2MjFBNTI0RTcxODFDRDVCNUJBRkNBM0RBNTZEMkUxNUZDRDkKKyAgMjogMDE0QTIxRjgyRDBDQUFEMTVFQjc0REQ4OTIxODdEN0FEOTNGMkJFQjU0OUE1OTZERkYyQzlBQTkKKyAgMzogNUY2MDBGMTlFREVEODIxQUVFRDA5NzgxNzkyRjk0MzU0NThBMzJBNjBGRkMxQjY3OEZFMkM5MDUKKyAgNDogOEQ5MzNFMTgwNTJFN0ZEMUY5OEU1RTdEMDIzODREQTYwRjNFNzQzODAxMDMyMjU2MjgyQUUyQ0EKKyAgNTogMjEzNjJBNjVCNDlDMzM1NjgyNTFDRDEzNjZFQjEzQTRFNjgzMzU5ODU1QzAwRjNBRDY3MTA4OTYKKyAgNjogMUUxODE0QjcyQkZCMTg1MjY1QUY5NEZBNjIyRTRBMUE3MDgyNkMwNkYyQkUyRUZEOTZFNEUxNjgKKyAgNzogMTE4RjJFMUMyRjFBQjhBRjJCRDE3ODQyRkNCRkFDOTY2RjVCMjFBODE5OTZFM0NCQURGNzY0NDIKKyAgODogMkM2QzcyNzAzRTMzQTIwRUEwMzMzNjI5NTAzRUJDQzQxQjY0REI4MjkwNjRBNUM3ODk3QzQ2NUIKKyAgOTogNzk0MDQ2QUJDM0JEODE2NUQxMkMyNDUzRkZBM0ZDNTE4RDFBNjQ5OEE0OEM5MTA1M0JFQTI5NjYKKyAxMDogRTZDM0I2RTJEQzIxNTcwMjk2MDYzM0M5NzZCODZCODM3OEQ3NzgwRkY4ODQ5MTA0NTQwMzJDN0UKKyAxMTogREU3Q0ZGNkU4NUQ5NDExRkJENThCMjhGQUNGNzJERkRBRkExMTU2MTRCRUYzMTE5RjY1MjcxMDQKKyAxMjogMTFDRjc0OTVBREMwN0VDMjlFQUE3QjM0NjRGNzcyRDQ5OTk5QTVFMTgzMkY3MUZDRTE4Q0Y3RjEKKyAxMzogQTc1NDFFNjM5NDVGQ0FENjJEMjU3MEIwMTUwNzlERjA0MjJFOTYwNzU5ODZCNDU3NzI4NjBGMzgKKyAxNDogQUZEM0VCN0VCRkJBNzlDQzY4RTRGNkY2QTJENzU4OTY5QjVDNUMwMTRGRkI1M0NGRjIxQzI4NDEKKyAxNTogMjhEOTQyRTM3Q0I5MkVERTJFNkY5OTRFOUVFRTJCQTAxMDc3RDA5OUYzNTYyRkVGOTdBOENBQzYKKyAxNjogMzRDNzU2Mjk2MjU0OEFDOTY2MTc1OUI0RkMzNDdENkE4MkNENDc5OTFFQTA2RTg1NTU3MUNERTEKKyAxNzogREE3NkZBMTJENjlEMUZEQkE1RTU0NDQ5NUJCRTQ1RjYyMEJFMTQ3QjczRDZBQTY0RDNCM0MyOTgKKyAxODogRkJGMTkxMUZBMDE5Q0I3QUNBMjBFM0Y5M0VDQzBENUU4RDYwRENBMEExQTc0MjBDNjNCQTE4NjQKKyAxOTogNTY1RkVERTBFRTIwODQyQjgyRDU5NjQ0OTI5QzJBMUE0MjZFMzk3QjM4RkFBNzcyNzgxRkUwMTgKKyAyMDogN0I5QzJCQTc3QjI5ODk5MDRGMTk0MDIxRDMwODA4OUUyM0YwMDk1NDI3NUFFOUFEODczMDZBMzEKKyAyMTogNjZDQkY5M0VEODA3MUZGQTM2QjYxRjNBQUJGREJGRTcxNEMzQzA1NUIyRkJEQ0QzQ0YzNjkwMjUKKyAyMjogRDk2RjEwRUNCRkFEN0ZERERGNjBCRjE1MTFFOTQ4NjlFRDFEOTkyMDUxNTM5RTUwRDVGMzI4MzEKKyAyMzogNTQ3M0Y5M0YwRDk3OUQ3N0MzQzZCOUNFRUIyRjNEQzEwNThEODE0MDE2NjlFRjRBRUFGQTE3RTcKKyAyNDogNUI1QTc1QTdEOTlDMUI0MDk2MTUzM0MzNDVCOTVGQkYwQUZBOTE2RDZFMTMzOTY3RkNBQTE1RjIKKyAyNTogMkExRTUwRTE4QzM3QUI3QkQ5MjhBRTE0QzIwNkZBQzlCM0U4NjkxNzNDQTMzN0ZCOTM3NDU2NUQKKyAyNjogQkYyQjI0MTY1OUM5NjAwN0FEQzI1RDk1Njc5NDdCQUE3NDA1NTVEMDY2NjM2NzMxRUVBRTNDOTcKKyAyNzogNkUxRTdCNjRBNzBCMTkwQkVFQkRCOURBODJDOEU0QjE2MENDNzNCOEZGQTIyNEE2QjkyMTgwQjMKKyAyODogQkUzNkE1RjhEQUU5Mjk0QjM5OTVEMjc4Q0JFOTI3M0U2NkYwNEQ0Njg5MEI0NEVDNTUwMjhDM0IKKyAyOTogOTk4M0MyODlDRTJGODA2RjQxMTgyNzUyQTc1M0UwQTg5MDIxN0RBRjM3NzhCM0FEMkVENjY4NUUKKyAzMDogOEIwRjA4RURGMkNCRTI1RThGOUVFNEQyOTQ4QkE2QkY4MTY3MkJGNEY1MDk1MzAzMjhBOEJBQTIKKyAzMTogQjY1RkI3N0U2Q0I4NkU1RjQwOUVBQzJGMUI1QTA1RTE5MTAyMTM1NjNGODE2MTIxQUZBOENGMTQKKyAzMjogNUQxNUUxN0M4QzE1OUVBNURGNUYxMjZCMTJBQ0U3NzdFQUIzNkEwMDgyQzU3REY3MUU0RDk2MDkKKyAzMzogRENDQjNEMTdDODc1NkYyNTQ2QjNFNUIyNEIxNjc4NDM4OTU5RDgzQTU2NTI0NDE1NjY2REFFMDUKKyAzNDogRDI4REFCN0NBNzE1QUM4NkJGNDQ2OUQ3NDNBMDAwNUFFRTAxMDFGMzM5MzUwNjYxRDQ2QTE2ODQKKyAzNTogRTdBMUNDQzRCMkIzMDA0NTdEQ0M2NDUzNDE1MjExOTM5MEI2OTYxMEM3RkY5REQzQTY4MzQzOUEKKyAzNjogMjkzODAxNDhEQTQwM0FENTkxMUM3QkQ1MkM3ODNFQTk3RUMzMDZGMkIzMkJDNDI2QzREN0ZEMzUKKyAzNzogNTZERjU5Q0Q2MzVGMDI1OTI1QTk2ODU5MUU2MERGMkNCQUIyMkY5OEI2N0M3ODEyMkYzQ0U4NjgKKyAzODogQzIwRUYxMEFFOUNEOTlDQkI1NEM5NEM5NzE3ODBFMDQ4Nzg5OUQ3QTgxMEZBNTFBNjU1M0RDRjUKKyAzOTogNUI3ODgzN0YzNjYwOTdDQUI2RDMxNjI0QzA2QjA5OUJEQzcxMjg2RTNBRDg4NzM1MDlBQkY0Q0UKKyA0MDogOERBMDk1ODlDNDRFNzEwQjlGODQwMTRGRTU1MzA3NEU3MkUwQTg2Qzk0MThFRkJCRTQyMEQyQzgKKyA0MTogRUVFMThGQTJCQjVBNUNEMTYwMTdCNDYyMUFDQzQyMTFFRjdDRDYwNjEzQThDODc5QjBBRkMwRDAKKyA0MjogQUQ5NjcwRkNEMDQzRTZGOTFDRTk4NkU2RjU1OTA1MzM3MjQ4QjcyRTdCODU1MUFFNzJFRDMyQkYKKyA0MzogOTdGQTRGQkE0ODE1REE0OUY2MTI3Qzk2Qzk2OTU3NEFBOTU0M0IzMzhGOTNCRjkxNzFEMjU0N0UKKyA0NDogODM4RDVBQzgxRUE2QkFDQjgyNzMyN0U4RUZFOTZDQzJCMTREOTJDNTVCNDBDRTU4RjREQTE4MUUKKyA0NTogQ0E5OTQ4MERDODQ4MEZBMDc3ODRFRjAyMDc0NDUzNjY0REJDOTIyNTczNjY1MTQwNjBGMDdDOTMKKyA0NjogOTNCMEU0OTNEMjcyNDcwRjlGMjc0REZFNEI5RERGMTgzQjI2MDExMDkwRTE1ODYxRkEyMUNBRjIKKyA0NzogNzcwQ0FFNDg3QUU1ODkwREMwQjkzMUVDMTc2MjMyOTNFRkE1QjIyRUUxRUQ0OTZBMzdFQjlGQ0UKKyA0ODogNkYxRDVDQTA0NDZFN0I4MkRBMDI4NDdFRDE3NjFDRjAyRDY0NkU1NkZCMENBQjlCMTIwRTUyODIKKyA0OTogMkE4QTEyNTRGNkNDQzNENjU2Mzk3QTVGMkQ2NEMyNjY0MTJGQzUyMDc4NjZCMDczQjc3REJERUYKKyA1MDogRThDQjc4OEFBQTk2NUVEODdGRjJDN0I1RjMxMDc2ODQzMjZEQ0JCMEU2NjcyMTdFMEVBNjJDNTEKKyA1MTogODVCREI2RDE0ODZGMjc4MjdENTg3MDgxMkJFRUUyQzM5NzZFMERFRDRCRDJGOTk0QkJFQzEyQUEKKyA1MjogQTE0RTAzNDNGQUQ2QkQ3OEUwQThFM0JDRDZEMEI2QzgzQjEyMjBGRTZDODlGNTdGNDRCQzgwNUMKKyA1MzogMkM2MEQ3MUYyRDRCRUM5MENGMTA4MDREQ0VEQjkzMTE2MzdCMzRENjJFOUNCNjhCODUwMzE2MkEKKyA1NDogMzYzOTdENjZCNDM0QkE3NDQxNzREQTU0MUYwODBDRjY1ODJGMTAzMjJDN0ZCMTg2OUExMDAxNDEKKyA1NTogRjYxMkU0RUEzMDdGNTY0NDcxMTJDQUI1RDJFQkVBN0QxMkM3QzQ0MjdEOTE1NUQ0MDg1Njg3RkQKKyA1NjogOTc5OEI0MjA5ODA3NDg5OTNCQzc4RTM2MDFCOEFFRUUyRDJDRjZFNTk3OTlDN0IwN0I4ODQzNUUKKyA1NzogNTBCRUQzN0YxRUU3OEZBRTE2RDE3OEZFQ0VDMkVCRTQ3NzZDOEU1RkM3MzhGOTUwNkU4QUY2NzYKKyA1ODogMjc1NTQzOEE5QUM0NTdCODE5OTlEOUUxRTQ3OUMzNkREOUFFMUY5MjBGNUJFNkQxMDlFRDc0MzEKKyA1OTogRjNEQzIyMzhCMTNCQTcwNkEwNDgyNTNGODZCNzkwNDVCNzJFRjc2N0NGMjVEQzYyRjk2REFFQTAKKyA2MDogMTE5MDBBMzE1NEM0REZDNDlCOTQxMjU4QTEzNEM5MjAxREZEMjgwNzI4QkRCM0Y4QkM3OTAzRjgKKyA2MTogRkM1ODQyMDI0NTRERDdDOTI1OEY3MkE2MjU4RTQyRjNDMjY2OUZEMTM4RkQ3QUVFNjIwMEM0Q0IKKyA2MjogMTg1MzU1QzEzRTE0NkVBODkzODdDMzMyMjI1REYzMUNGMTE0QUVDMEJBM0E1QTVCNTM2Njc3MDkKKyA2MzogODE5NERBQkQyRjdBMDJEREREN0I3NTJBQjU2Njk4MjE1MTk2NDBFRTNCMDA1OUZEMzMzRjM0MDEKKyA2NDogMkNENjk0NkM2REI2NzZFRDFFQzI3MkFFMzQ3MzVBMDU0NkFGQjhEOTk2MzIzMjcyQzM5QTgxNEMKKyA2NTogQjdBMzQ0QkM1RUZGRUE5N0FDNDk4OTRBODVCOTZGOUI1NzBFNjgwREZCQjI4Qzc2RjdGOUExODAKKyA2NjogOTAxMUI4MDY1NUE5Q0M3OTY0Q0JDNEJFRTFDQzAzMDc0MDAzQ0NDRkY1REE1NTNCMjg5RUNGNkEKKyA2NzogNkJERTI1MzcxQjdFQTlBQkUzMUE1MjRFNDlDQUFFNDBEQjIyMEU0MDU0NjNEOTNGQzdGNjY5MDQKKyA2ODogMzU2OTQxOTRFMTBEMEVCQ0E2NzU4MDk5RDA5Qzk5QzNDQUIzN0FGQTUyRkM0RjQzNjFDNTEwRjMKKyA2OTogNEU3QTc5RjM2MkQ3QUU1QjE2ODBGMzBFNjc3MENBNDZGRTYyNjRDOUZDQTU2NjcxOEMwMUVGNjcKKyA3MDogOUREMThEMjFFNDEzQUUxMjExMkFGQkUxNjY4NEJGRDRGQUVENzQ2N0EyRkQ1OTA0RUYwQjQ5M0MKKyA3MTogNzUzMkQzNzRCNjZCMUU1QjE3RUI0OTgxMERDM0MwNDI2NDU1M0U0QzM2RjQ1NTBEMUU4NjBCNzAKKyA3MjogMzVFQjA5QzgyQTYyNEIxRTNFQ0Q5NjVFRDg1MjJFOTU3MkVCRjI2NzkxRUZBNjY3QjREQjk1MkMKKyA3MzogQjlDMTdERjZGMkE2NTA2RkIxREZDRjFBOTA4OTk3NEM0NTc2MEE0MzgzMzBBRTc1NDdERkU2ODUKKyA3NDogQTdERDAyNjdDMTVCMzZEOEJEMTg3OUY4NzlFODk0RkI5RjMzRjI1NDU1NkI4N0JGRkVERDcxQTAKKyA3NTogNjhBMzU0RDEyMENENjNBNUQzNEVFRTg0QjdFNUU1QkMxRTVERjZFMDIxRjcxMkJENDI3MEI3ODEKKyA3NjogNDQxREM0ODg0MTMwRDQ4QkExMzRFMkZCQTg2QUY2NDNDOEVCNzlDRDFBQTQ2ODhGODJFMEQzREMKKyA3NzogMTdBM0YxNkRFQUZEQkMxREEwMEJEMTREOUMyNDQ5N0JFNzY1RjQxRTJFQzc5NTc4NDIxRUQ4QjkKKyA3ODogODc1NkEyNjdEMENBRDU0QkZDODQ4RkNDNEQ2QjZDOTREMzlDQUYwNzgzMUVFMzUzMjREQ0QzNUYKKyA3OTogMDA0RUJBREE3MEYxOUJBQjQ4RTYwNzJFMjA5MDk0MURFREI1Q0MwQTdCNjI0RTRCQkI2NzEzODIKKyA4MDogQjdGOEQzNUNCODY1OTc3NDIzNzEwRkExRTBGOTM5ODA4RTY4QUJCNTRCRDdFQjA0MjdEQTAzREUKKyA4MTogRjNEMEFBQTJGOTEyRkY5NTI1MUQzQ0Y1MUVCRjc5Qjk0MERCNTY4MzlERUE4QkE1ODcyRDFGREUKKyA4MjogMDgzNUIyREMzNzZCRUFFODczRjFGQTMzN0Q3NUM3MkZEMUJGMEY3MkE4MTY2OUFBODkxRjI3MjIKKyA4MzogN0NGOUE3RDU3Q0FERUMzRjAxM0Q0QkQ4N0MwMEI0MjBDQkZGNzM2NzBBOUNCQjA3MkQxOEVCRUIKKyA4NDogNjhBQzBBMzQ5MzAzMjlGNUFBNDAxMzc5ODcyMDg0ODFFMzREOEI5QzA4RUY3QTg1QUUzQUIzOEIKKyA4NTogMDA0OTJGNzA2RDg0QjkwM0Q1MzU1RkRDMEI2OEMyQzMzQjQ4NEE5NUExNzNGREM0QUM5NDUwMjgKKyA4NjogNkY2QzUwOUNEQ0M4NENFMUMzNkFCNzZDOUJGMzBFNDQyMkM5MEM4NjlDMTY0QzY0Njk2QUI1QjcKKyA4NzogNEMwQTM1RDUxMkJEMERCMTU5MTVERTA4RkVBOEU2MDI3MDYzQTE3ODBDMTA0RjYyNzNDQUQ1QzcKKyA4ODogMjcwODdGNjQyNTg3OEQ2NEE1NkJENUFDQ0MwRTMwM0Y4MDNCNzIwOEYyMEFFRkVGNzU1MDFGMDMKKyA4OTogNEVGNzgxNDA0MzBFRjYwRjNDQTEyQUFGODEzMjY3NEIwRERCMTU0RjQ5NTAyOUI0MDUxQzJBMzYKKyA5MDogQkNDQTMxNTNFRjkzQUFGMjFDQTAyRDIzNUEyM0QzMDEzOTc2Mjk1RTcwNDIyM0NCMzdFODYwQkEKKyA5MTogMjBDQzhENEM2NEUwOUIwMEFCRjIzODY0QkQ3RURFNTQyRjVCRTQ4MEFGQzRCOTU1MUIzMDFFQkEKKyA5MjogRUNBM0Y4NkRBMDAwOThEOTFGODY2QzU4NTU4QkI3QjAwQzlFNDIzOUNGODNDNUEzRTc2MjkxQjMKKyA5MzogN0FEOUFCMTk4ODU4ODIwRDIwMzczQzQ1MTczRDc2QUY4RDY4RjgyOUQ5QTI1MEVDQURFRTBEQTEKKyA5NDogM0UxQzIwMkYyRDU4OUJEQUIwMTUzMDZBRDA2Mzc4NEU1QkVBNDhBRThEMURBRjQ1RDU3MUQyRkQKKyA5NTogOTkwQzQ0MzMwRDU2RUJDOUVERDk1MUY4Q0I5MkQ1ODQ3RjRCRDNDNjQ0MjkwNkY1N0E4MjhGQTkKKyA5NjogQzkyRjlGQ0M2MjIwRURFRjUyQjZGODQyNjM1QTgzOTE0QjIzNjg2MkY2Q0NCRUQxNkY0ODk5REUKKyA5NzogMEU0MUM4NUQ1QzZENjI1RTE4ODRFRjc0MzhERDlFQkFDODE4QUI1MENDMjY1QTczMTY1OTI4RDAKKyA5ODogQUUwODdENTdGOUNEQkNERjRERDY4QTNFOEQ1QkRGRUM3MDlBNTMyQTRBNjQ2Q0IzMTc4NTUwNkMKKyA5OTogNENCMDNBRUZEMjRDODMzQjUzNTA5OTZFQjI2MUU4MDNGNkRCNjk4RkI4MUYzN0Y4QTVDM0Q4OTEKKzEwMDogRTY4MEJEMjE4QUU5NzI5OTlCRUNEQzkwNUY0RDM5MjUxRUNGNDlCMjlDRjBBMTNBRjVGQjA5QTEKKzEwMTogNjQzMjZENkI2OTJCMEExNzA0NTQzNEJGRjEzMjgyQUNCOTFFN0I2OTAzMzlGN0ZDRUJDQzlBRTYKKzEwMjogMjBDRDkxNTA0QUIwNEUyRDNDRDg0OTgwOEYyMzYyOTQzQkVDQjMxMEY0QTBCRjZFM0JENDc3NTEKKzEwMzogODBGNjA3RTJENzlFMUVGQjA0NThFNDdDOEU1NzI2Q0RCODM4N0JDMDVGNDJENkVBRTMyMzlBMjAKKzEwNDogRjgzQzAyM0Q2RjUzOTk2N0FCMjQzMDlERDI4MzIxNTk5NzgyQUNGQ0ZDNzZCNzcxODYzMDczMDAKKzEwNTogNzAxNjRBMjUwNzk5REJFNkM1QkQzRURDREVEQjE2RDI1MTZBOUZDMUJCQTI5NEM0OUY3NTM4MjQKKzEwNjogMTg4MzM5N0M5QzRDOUQzM0ZCOUUxRTAzMzI1RURDRUExNjA2RDdBQkY4NkM0Mzg3REFCQzQ0OUUKKzEwNzogMTM1NURGQTA2ODIyQ0MxRjIxNkMxMzFGMkJBQTkyQTEwQkJGMTA5QkEzRTY0ODQxOUEzNUMwRjMKKzEwODogOUUzNUI5QjMwNzk5MEI3RDY2NEI5RUI3RjA2RUZERDIzMDM3Rjg1OUFDQjZCOTZBNTI4N0E4NDYKKzEwOTogQ0NDQTI2QzhGODQwNUZGNjI0MjE1NTgyNTVGMkRBMDZGNzNGMTdEMUFFMTc2M0EwQkY4NDMwREIKKzExMDogQjRGQUU5MDkzNjg0MDUyMDYzMzM0OTE2NzQ1NTlCOTA5NERBNEM0ODkxM0Q5RUFDQTI4QUQ3NUQKKzExMTogM0E1RTdEOTI3M0Y5MUUxMDU0NUZFNjg2MUQ0RkMyMjNBNUVCMEY3QjRGQkZCQzk5MzE2MzRDMjUKKzExMjogOTY1NTNDRjBDNUM2RjZBMTdGRUVEMDQwMjRGQ0UxRDI5MkMzOTJFNjBCMzU5NUZGNTMwMDdBRDkKKzExMzogQ0E5Qjc5RjQwMzQxMkY3MUZCQzEwRTA5NEIzNTA4ODU3NkVCM0Y3RjhCNUQwODc1N0Q4OUY0NUIKKzExNDogQ0Y2MENDNUIxODIyRTRBMTJFRUIzRTFFNUY0QUE3OUUzNDVEOEM4RkNDNTQ2RDU3RENDN0M3ODQKKzExNTogODA3RDY1QzMzRTc0REEwRTJENUUzNzg4MDg0QzYxQUUzRTg3NzFGREZFNjQzRDEyNjlBNzkwMUEKKzExNjogQTU0MThEQkNBOTRBMUY5NjkyRkZEQjNGN0FFRUQ3NTgwNkNEOUZENDcxNzFBNkI2NzkyMUMwQTgKKzExNzogQzJCODgwQzlFOUQ3OEIwQzM5N0Q3MkM4QjY2ODQyNzZFOEMyMkE3RjRENjgyMURCN0M5OTg3NzUKKzExODogRUE0NDdFQTczMTY3M0U1REVBQjU3MDEyQ0M5RTBEM0E3QjI0NDMxNjVCNjY1ODIyOTYzRkQ2QjUKKzExOTogMEY2RDUwQzA0MzU3REY5MjQwODAyOTc3Nzc5RDdGMjIxNEZCREJBRTk1QjZEOEY1OUI0MTQ5NjQKKzEyMDogQTNCMjRCMjlCMjlCQkYzMkEwMUYyMUZGRjEzRjQ0RkNBQTVGRUQ1MDcxODgwM0FDM0JBQUM1NDgKKzEyMTogRTMxRTM2QzM4QTdGMjUyNUVDQURFQ0EwNDc1MzM4MzBBOUM0NkQ2MDlFMjk3MTQyQUIzREFDQUEKKzEyMjogNTkyRkYwQzM5OUE2Q0MxNjA2RkEzRjQwNERBNEJGODYxOEE0REYxNTlDQkI3RTA1RENEMzBCRUIKKzEyMzogRUVERDZBNTkwMjA5MUFEQjhFRjQ5MUY4MjA2MTM3NDBEQTczQTE2MEQ4MjUxMjE5MTI2MTNEREIKKzEyNDogM0EyRkNCRkNCMDA3RjQ1Q0IwRUVEQkRENUE3NjVFQTBDQjdBMTQyQ0UzQzAyNDExNEQ2RDYxREMKKzEyNTogNUQyOUUxNzMyODk4ODU0QUY0NjhCQkZBNUI4NzA2NUJCODExQUY4RjU1QzkxRTgyRTg4OEU4NDIKKzEyNjogRkQxRjY0NkQwMjFFRjMxRjYzNEVGNUZCMDUwNjYyMDY4NkI5RjdEOUI1QzY3MjczNENBMTBGREYKKzEyNzogNUU0Mzk0NUJBOURFNjJDMzY0RTM0Q0MxMzYxRkZGRUU5QkU4OTc0RDdDRjVEMkUwNjQyODkxNkIKKzEyODogMEZGNERBNTY0NzI5QTBFOTk4NEUxNUJDNjlCMDBGQTJFNTQ3MTE1NzNCRUUzQUQ2MDhGNTExQjUKKworSE1BQy1zaGEyNTYKKyAgMDogRDM4QjQyMDk2RDgwRjQ1RjgyNkI0NEE5RDU2MDdERTcyNDk2QTQxNUQzRjRBMUE4Qzg4RTNCQjlEQThEQzFDQgorICAxOiAxMkIwNkMzMjE4Qzg1ODU1OENBRDFEQTZGRTQwOTg5OEMzMTAxNEQ2NkNCRTRFQ0Q0N0M5MTBFQzk3NUUxMDRECisgIDI6IEVEQkVGNkFBNzQ3Qzk1MUYyNUFCNkFBQTBEODc0NjQ4Q0YxOEZGRUNDNEM5MTU5RjhGQzcxRTk3MUZBQzZEMjEKKyAgMzogMDM0MzYzMzhBMTY2RTkwNTE1OTlBQjI2OENENzQ4NjdDNjE1OTM3ODA2OUE5RkY0NkZDMDdDQUUzNzVFREE2OAorICA0OiA2MzQ3NThERjA3NzRBNTg3RjNBQzZBRDc5ODhEMDk2NTUyNERFMjRFQkU0REZGMDdFRjYyMkJDQjhEQTcxQUNECisgIDU6IDBDMDhFNTJDN0NGRjhCNUY3MDc4MTE5NzA2OURDOEYyMDk1NTJEMjQxNjg3QkEwRDI0NjYxQ0NDQzI4RDM5MzcKKyAgNjogNzQ5RjQ3M0UwRDkzNDY5NEFCOTkxNzU2OUE2MTU5MUNBNTBCRUYxOENBQkRFRDUxNjY2REYyNDNERTg3OUQ1MworICA3OiBCMUUxMkNGRTAyNzNGNUQyNzE5MkQxQTRCNzBFRUM0RERDNzE0QjY2QzhCQjE5MjFDNjMzODFGNzhDRUM1MjE5CisgIDg6IDFDNjBGMTNBMUM1Mzk3ODhFOTg5QkFDMkVCRDRGOEUxMjZFRTZFRDgyQzJFMjU4MTdDNjNCMkI2MzNGQUJEMzMKKyAgOTogNTY0M0Y0NDVCMkMwNjU2QTQ5QkIzREI1MDg4QzlFMkU0QjIwODJDMkI2MTFCQkEwREFFNTc5MUYyRkFBNUQ0MworIDEwOiBDNDY3RjQ3MjUxREFENDY5NEM5QzdBNjc1OEU1NENFQkQ2OEZDOTMzQzdDNTc0NTgwMjA3NzRBMkEyQjQyODhCCisgMTE6IDg1QzkwQ0YyNzE5QkVCRjQwRUY4RDUwMUZEQTIwQzM0MkJDNDA2RTcyODU1MUJDMDI3NUFEQTE3NDdCRDk4MUYKKyAxMjogMDZCNzJEQUM4OTVCMDA4REEyNDlCN0IxRDhBNTEzM0YwOUQ4NkJGODJERTJDNDI1MUJGQTZDM0Q4QzRDRjAzRgorIDEzOiA0OUVEQjY3MTRBNTU2REYzMjRFNDFBM0NFNUI1NzAwNkUzOEZEN0NBOEI5MEZFRUEyQUNBQjQyOTIwNDc0N0JFCisgMTQ6IDc0MTE5MjFENzU5REEwQjQ5MUQ2RDRDQzM3MkRCNzlDQzE2M0YxNDZDMzQ1QjRBNzNEOTNFRUI0QzI2MkExREYKKyAxNTogNUMzN0ZGQkQxRjA1MTJBRjQ0MzI2NUIyRjNFOEI2RDAxQUQ5QjQ1RkY2RjM3M0QyQ0QwQTdDNkU0OEQwM0UyNgorIDE2OiA3NzMxNjVGRDE2RDUxRTUxQ0Q4QTk1OEU1NDg5MDJCNDdCQkQwQTZFMTU2QzMxQjZGRUEwMzZGNkQ4QzRBOTBDCisgMTc6IDVCNEJFOTA5NzU0RUJDOEVDQkJCOEI1REE2Mjk4QjgzNDFCMzVEOTJFMTdDRTcyODE5MDlFQkExRUY1NjgzNDcKKyAxODogQzZFRUYyRDEyRjU0ODE1NTYxRUVFRDM0MjZEN0FBN0U2NzFFMjZENDIzODRCOTQ3OEQ5MUZDNkIxNENDNzZGOAorIDE5OiA0QzlGQTA1NzVDRDk2QkIxREVGNkVBNzlGNUVDN0ExRjA0NzhFODYzNTI4MTJGNjkwQzJDMkJEQjcwMDI4QkNDCisgMjA6IDdGODdCQTQ1RkM0MUVDMzBFNzZGNjFFNEVBREVDMDEzQ0UyQjRDNDlDQTZGRTZEMkZBNTI1RjZCQkQ0NUUxMDMKKyAyMTogOUI4Q0ExRDcwMzM5QTA4OTRFMTZDRTRFNzZGNjY1NUFEREQzRUVCNTk4RjNERDgwRkVDQzVFRUVGM0Y2MzhDMworIDIyOiBFNDYwOEFFQTQzMEE2Mzg3OTk5OTFCNzQ4QkI4NThDOTFBRjU4RjU2QjIyNkUxOTAxRDI4MzM2QjMwNDk4Mjc5CisgMjM6IEFGNEY5QzUyMDc5QjI4NTQ2RkJCNDRFRUJBMjBDN0FGMEJGNDkzRDM0RUY2OTY3QjA3Q0EzMkZDNERFMjVBREIKKyAyNDogRkU1MUYzQTkzMTNFRURBQUE5OTEzNTBBQjREMUQ3MDQ1RDQyQUFDRjNBQzcxNTVEQTNBRDlBMkYxREUzQTczRQorIDI1OiBDMUY1QUVEOUQ3N0Y4NTQwNEE0QjMwOEExMzlEMzNGMzUxQjIwQzkxQTczOEU2OThCRDgxODJGMTI0RDk2QzgyCisgMjY6IDNDQUMxMkEyNTJCOTNCN0Q3MjRBRjkxMTlGRDNDMThFODVFODg0MDFGOTNCRkY0MkFBMDU3MTFCOTgzM0IxRjYKKyAyNzogRTYxRDRFOTRDMjEyMzI0QTY0QjFBMEMwNEIyMjM3QTlBMUM1Q0MwMDNEODNFQTgwQkNFQjQ1NDUyRENCNDJGMgorIDI4OiBEMDFCQTQ3REFCQ0U0NzA0QjY4MjBFQzBFQ0RCRUYxMzdCOUM0QUNCODBEQzk5QjdDOTIyMENGRDlGOUNFMzYzCisgMjk6IEFFRDUwMkM1M0E4QjJDNzZGNjcxMzc2Q0REQkQwNTk2Mzc2QjM2NjRCOTE3Q0Q5QzlBREJDNDg5NTQzRDQ3MjEKKyAzMDogMzQwNUFGRDk2NTg0QzVFNTk2MzM2Mjk0OEQxMTJBNzAxNTU4NzdCRTNCNUVGRDQ3OUYyMjZCNzMzNTFBQkFGMAorIDMxOiA1RkEwMjkwREM2OEI3MkIxRkEyN0RCQUYxNTc5MjNDNzA2QjNGNTJDREU5QzRFRTM4Q0RBMzFEMzc2QjBCQzBECisgMzI6IEMxMzkxQzY5NEM5ODVDQ0JBNzA3QThDNzhBRDA1RTIxODBBRjZCNERBNUJCODc3QUFDNUUyQUIzM0I0ODkwRTIKKyAzMzogQjAxOEU3QjE1RjkyREJFQzU4Rjc2NzYzM0JDQTNCRDBEODRCNkQ1Qjk0NDM3ODREQzE3NTcxNjZEN0FBMUMxNgorIDM0OiA4RDlFMkM4NDk2NzAwNEUzOTU3REY1OUQ1MDJCQzExQ0Y4Qzg5NTkzNjgxMTdFQzVEQjU2QUM5NThBM0U3OTFCCisgMzU6IEIwRUFGOUMwRTg2OUQ3QTMwNEREQjMwMDYxQTczQzU4MEIwQTZGOUQ0OUUxNTQ0MkVDRkJCM0I1QTg1MTg1NUIKKyAzNjogMEI0OEIwRDhDM0FDRjdCNEY5RUNGOEU0NjU2M0M5MjFCMUI2NzIwQjZDNjUwRDcyREQxMTI2QjY3NjNDRDU5NQorIDM3OiA4ODc5RDIzOUVEQjA5RjY2MDY5NTdEOTZBMUY0QkYzN0VBQzBGMzQxOTg4MUVFQTc5RThCRjEzNjRGQjNGRjZECisgMzg6IENDNjYzRTQzNkRFNDJFMzJFQTExMEY5RDkwRUI5OTBEOTE1MUM5RjA2RDUxMjQzRDIwNzZCMENDNDUzNjE3MzYKKyAzOTogNzMyREMzQjFGODA5RTU1QzQ5OEM1M0ZDNzVBMjM5NjZDQUVBMTZCRTk4NEY3OTVDQjFCQzk0RDAyNkZBQjMwRQorIDQwOiBGMUYwRUVDNzdEOTdBMDIzNEQwRjE5QjJGQjEyQTk2QjZFMkZGODYyNkY3OUE3NEQ0QUYyNkNERTEzNDREODM4CisgNDE6IDc1QzlEOEM3MzQ0NjY4QzQ3OEQ4QUU2RDlFMkM0MUUzMzZFN0EyNTA0Q0RENDNCNzNDQ0JGNzhCNEMwNUVFQjEKKyA0MjogNEIxNDlCQ0E2NDI5NDA4QjI0MkU3NkM1MkM0RDNBMEE1RjU0MzdFQzBBQjZEMjRENzFFQjFBQzU0OTZENzVCQQorIDQzOiBFREI2NUVCRUJDMDQxMUI0RkRBRjE4NjAzM0UzMDZBRDUwMDcxMUNDQjgwRTc3MEU5OTUyM0JCMjY3MkEyMzdBCisgNDQ6IEQxQkJGRjVBNDgzNDZBMERGRDVDRkZBQTdBMkFGMDhDMjdGM0ZDMjkwOEQ3QTVEMkY1NzVFMDdDQTlFNzI0NzQKKyA0NTogRThFRkI2MzczREQzNDU3NjEwRTU3NzUwNzM4MzU4QTUwMDI2RDJDNjcwNEE5ODE0OENERDY5QkZGN0I3MDU1MQorIDQ2OiA4RTM3MzNCNzI5Q0VCOTc0NDRCQ0NBNDA1MDQ0Qjk4RjQ1RkM1OUJCQTg2NDQ0QTNGQzBGNERGNDg1NEI1QzRECisgNDc6IDg2OEYzRUU4RjRENERGRURDM0ZGQUVFRTFGQTA2OUY1RkJCMkNCODE4RTYzQzI4MTUxQzE1NjY2MzQxODkyMzQKKyA0ODogM0Y1Mzk2MTE1REM3RjE3QUFCMTlBM0E5Nzc5Q0ZGQ0NBNTdERTdBN0MxQTQyRjc0OEZFQzQ5QjdEOEMyQjgyRAorIDQ5OiBEQzJBNUUzRTE3NkE2OTNBRDhDQUU1NTFBNTA1NzI5Qjc4RkJERTc3OEI1MjZFMjg5NTNCQzFBNTZCNTQ4NDBFCisgNTA6IERDOTFGRDc0NUU5QTdBOUQwQjQxQzc5QjNCMzkzOUI4NEJERjc4QkVCMDA3RjlBQUY4RkY4MjA4NDc1OTIyM0EKKyA1MTogRTczRENGNTQxM0YxN0Q0RUNDRUM4MTNEQzA2MEVGOTA3QzJFOTUyQUY5MkREMjQ3QTBBRTJCRTc5OEU2QTQwQgorIDUyOiA2OTZCNUVFNEMxRTFEOEI2MEIwMDE1RUVBMjM4OUM5QTM1MDg4MDIyRkZGMTAwMzREMEQwOUZBNzIyQTJBM0U2CisgNTM6IEY4NkMwNzI2NTM4OTUxMkIyQ0UyNDBBODlFQTI5RDYxQzZDNzlDMjczOEZBQ0ExNTdCMERFNDMyOTQ0ODU2ODIKKyA1NDogREIzMUNCQkZEMjhENkY4NTY0MjE5OTExRUZCNzQ4QTU2NjNFNDgyREJBMjZFMzg2MzRFOEUyN0UzQ0Y2NTcwNworIDU1OiAyRjk2NzUzMTNBQUI3QTk0MEFFNzdDQTkwNkQwMzQyQTQ0OEZEQkEzRjc1ODlEMTRCMTM0NEQ1ODZFQTE1N0RFCisgNTY6IDdEODI5RkQ5OTQyNThFRjJBRkRFRjIyQzhDRDVDQzFEMjlBOUE1NUI2Mjg0N0IzQjZGNURCNjMwNDIxQ0Y5OTkKKyA1NzogQTZDREI5QkM5QUY3NUVBNDY4MEU4OTVFOEVERENFNzZGNTM2RjdDQ0E1NzFENjI3ODFBMDZEREIzNDI0RkE1MAorIDU4OiAxQjQxODZBMzRFQjA3RjVCMzEyN0YyQkUwRjM5NDM2MTA2NzlEQjBGNkJBQkM3REEwM0I0MTZGQTU3N0QzNkUyCisgNTk6IDdCNURGRjM0NTlEQzEwQjlCN0FBMkIyODI5MDk0Rjk3NzA2REI1QjJGMTMzQjhCRjlGNDhEOTAyNTNENjgzNTkKKyA2MDogMkFCQjY4MTYwMzAwMDI4QkJGM0I1QTQxNDk3MEQxMURGNEZENkY0QjRBMzUwMjlERUY4NDkyQURGQjE5QTQ4MAorIDYxOiBCMUIxM0FCRjlEMjBDNDJFNzU1RDYzRUM2M0MwMTYxMjYyNTlDOEE2QzNGOUFCM0YwRjZBQzVEMEJENDRFQ0EyCisgNjI6IDlBREREMTdFNUNGNDA3Q0RCQjEyRTVFNTJBNTBDRTEzNEYxQjQ4QTJBMkFGOTBENzMwODM0NEZCNUE3MDQ4NUYKKyA2MzogNkE0QzA2REY0MEJBNTE1QzU2NDc2NDcxRDRBOTRGODdBMkI5MUVBRkY2QzY2NTEwODkyRjJGMjBBMzQyQjczNgorIDY0OiA1NTVENDI0MjA2QzAwM0JBRDBCMDhCRUVBNzZERkM4MUIzMDdDNzlCQkI2RTRGMTUzMjVCMkVDRDM3RTA0NDIzCisgNjU6IDhBNTg3MzNFMEI5OTBEMEQ4MkY5M0Y3N0RGMzZFMzBEQ0ZEMDNCMzE4MUI3M0M1NDRCQjA5N0EzQTczQjZBQzkKKyA2NjogNkZDQ0NDQTQxNzJFMzBBMjgxQTcwMkUzNkU3QkNBMDczNzBENEI1NzI3MjM4NTA3N0E0NEQ1Rjc5MzNERDJGQworIDY3OiAzQjFBOTFFNDlBRjg4QjE4MzJGOEU5MTEwOUM3Q0M1REJFRTI4NDdEOUFDRDJBNTc0MDREQkI1NjU0ODBBQzc1CisgNjg6IDY5NTg0MDc1QzI3ODc2M0NCMEIwOUQ0QzlFMTVFOTMwMEExOTFCRjk5OTA3MDQ5RjE0RUM4REUyNEQ4NkMxMjEKKyA2OTogMkVFMjQzNDBEMTNFNjhCMTBCOTVDM0Y3N0Q1NTAyN0Y5OEJERTZCQTUzMjhEMEMwMkNGODk5NjU2ODdDMDYyQgorIDcwOiBDMDRCMzdGNTkzMkY0MjdENDBFMjFFRUFCN0M5NTk0QjE2QkZDRjRGNUZFMkJGMTc1Q0Q2M0M2MkYyQ0VFQUEyCisgNzE6IDA1OEUxQUM4OTcxQUREMjYxN0E0QkY3RDAyQjQ2QThCNzRBNEQ1MkIyNTY0M0RGOTcyOUExRTdERjZDQ0M4NkYKKyA3MjogMTgwMDFGMjQ2QUJDNzYwMTk3NDgyRTI1RjNBQzY0QjE0QTc5NUU1NUI0MUI1MDVENjAyNzI2MUJGREU3QzUyQworIDczOiA0QUVBQUVENTI0QjE3M0UwOEU1NEE4M0UyRDlBOEI4ODI0RTZFMkYxQjg5MjAzRDY5OEU5QkNFN0MzMjQyRjhGCisgNzQ6IDdEODJDRkIxRDc0MjczMDI4ODlDQURCQTIzQTk5MTU0Q0JBQzBDOUFERUM5NEVBRjI5RUIwN0RDODZCMEI3RTIKKyA3NTogMThENDJFOTJCQTUzMkE0MDlDRURBOEUzQTA3RTc1MUI0MzA4MDA4MjdGNUE5RjE0RDkzRTNFRDIzMUJBMDhBRgorIDc2OiA4Q0ZCQTM3OEQ4NTk1MzcyRENFNUQ5QTZFNzI2QzIzNTEyRjg0QzBDMUVDM0M2NkFERjZCNkM1NURGNjM5MzZBCisgNzc6IERFMUE2RTI4MEE5MDU0QzkxQjgyNjc4NTkyOEYzN0ExNkUxRDJBOUEzQ0VDODMxMTg1QjI2RDJCOEVERTE1OEMKKyA3ODogOTIwQzQwQjQyMDRDN0YzRDQ3NzUxNzZCRDI0NUJBMDI3NjYwNEM1NjhCM0MyOTk0M0M5QUVGMUExQzkzNDI4QQorIDc5OiA5MzVCQjM5RTVGQkNFNUM0QTE1QUMyQTg1NDQ3NTU3OENGODAzMDhFNTMxQ0E4NjgxOERBQkU2OUJFRDg4MjRBCisgODA6IEQ2MDhFNTYxNDcxQ0MwOUVDMDg2NUM4MjYyNDJDQTI2QUExQzkwQkRGMTYyNUUxQTM4Qjk2RTNFRTBDQzVGMDQKKyA4MTogRUZFMkE4RDgwNkExQTcxNTk2QTA1QTJGNUY0OEQxOENGRDRBNzQyMjQ3QjA0RTgwODlGQUIyNzI5MUE4REQ1MAorIDgyOiA4MDIzNUJFMzVEREVBNUQ0OUYxMjREOEJFM0QxNDNGODdDQ0JBN0QwNjA4QzdFMkNBQkJBQUIwMUJCOTVFNDc3CisgODM6IEU5NDEwRTBEQzE0RjNCRTM2QTQ5QTVDQTY3M0MxMkUxOENCRTRGMDgxN0UwQzFDQkQyMDY5MzQ5RjhBMDlCQkIKKyA4NDogQjIwNDJBODFBMzZGMjdCNENCOTZEQkI1MkE2MUY3MDFBODE1ODY5RkY1QUEwQ0RDQUQwMzI3RTFFRDFDMkYyMgorIDg1OiBFOUU1QTk1MDFCMjQ5NTJEQ0ZCQjlENTlDRjk1QTlBOUU2QTI3RkI3MzE1RUI0NzJEMUUyQjdGNTIzRDA2RDQyCisgODY6IDk5MTkzQjRGQUZFRkZDOTMyQjI2MUVGMTY5MjUwQjk2OTAxQUJGODc3NDI0RkY2NjdDQzBEQTAxNTRDNTA0OTgKKyA4NzogMUQ5QzdGN0U2ODFEMjBFMUUwMzI0RUZFNzFDOEI2OTEzRkU4Q0E4N0VFNTJFNDQzMzM1MTE1QUIyQzQ1OEU3RgorIDg4OiA3MzA4REI3RTI1OTFEMjM0MjEwOUM1MDg0QjExNzRGMDdEMjg5RkJFOTE0NzJGQjJEOEMwNkRGMzlGODI2Qjg0CisgODk6IDkwRjA2QURDMjkwNzBEQzUwQTIzRDNGMDkzMDA3RTI3M0U3ODM0OTFBNzBBMkYwQUQ2QkE0MEUzNEYwMjUxOEQKKyA5MDogRTY3NkRFRURDOTcyMDE5RjEwRkVDMjRCNEFFQUMwQTk3ODcwRTkyNEY3QjFENkQzRUNGOTFFRjM4QTJBQzU0NAorIDkxOiBCNURBM0I0MEZCRjM3Mzc5NUU2N0E2MzM4RjlBQzNBRDc0Mjc0MUYzNDA0ODkzMEQ5MzM2RDQyOUQwMkVFNzhGCisgOTI6IDZGREUyMDk4ODg2M0NFMTU3MDQyRUU1MjA2NUVFREEyMzNCQjJFNkVDMDQ2NEI5RENGMkFBQzFGM0ExODk3MUYKKyA5MzogNDI4RDRDRkY0NzdGMEYwMzc5RjYzNEQxRTdDMTVFNENFNkRBMDY3QURDNDUyMjFBODYwQzlDM0FDNDIzNTc1MworIDk0OiA5RUM4MEI1N0U5MjFEQTNGODFEMTNCNjVBQTg1MUY1OTcxRTQwNzRDOTZFMEQ4QjY0RTUwQTdGNTA4OUMxRkM4CisgOTU6IDkwODgxNTFCRUY3NjZEMDg5NkE0OEVCNkRDQzhBMDlEMTUxQzMzOTZGQkYzQTlGRTE5M0M1RTdCRjkwMzBCMDEKKyA5NjogODZEODUzMDI0QTc2MjUzNjY2NjMxNkYzNjNCQjg2N0VGRTI1RkJEMDNCREQyOEVBNzUyMjk3M0ExQTFCRDk1QworIDk3OiAwMDcxMDRCRDkzNUI1MzJCQTQ3MDJBNzhDNTA1RDY3QjQxMzU4QTYxREI4MDY5NTg1QjkxQjE0NDVEQzM0NkI1CisgOTg6IDVDNTcwOUY2MjAyOTQ4RTgwNUZBQzI1QzQ1NEVDRkFERkFDNjkzOTU1ODY0NDk0RTUxMUYwQ0QxRkM5Q0ZEQ0YKKyA5OTogMEIwMTBGNzFDNTMyM0NDOTZEM0I4REY3MTE3MDk2ODA5NkU0NDk2OUVBNTVCNEMzREFDNjMyRDMwRDgxRDUyOQorMTAwOiA1NDYyMUVDNEYzMUNDN0Y2MjczNjAxRDgxNjc0NjEyQjQ0NzI2QjVDQzRBNzZFQUQyQkJDM0QzMkRCRjYyQTlECisxMDE6IDI4RUZFMUFCNzQ1QkU2NEU1REQ3Mjg2Qzk3MzYwRkYyRDI4N0Y4NjJBREJFNDQzODBGODVFMTM4ODAwODA3OUYKKzEwMjogODMxQkZBNjg0QzI1NTQyNjc2QUQ1MjgxOTI0OUExMEQ5RUY5QzI1MDVENjlDQzEzOTdEMEQzOUQwOEIzOUU1RAorMTAzOiBFRjc5MjJDNDBDRDk2QTQ3QzVFN0FFNEQ5NThCNDk1RjFENjk1NEVEQzIwNTk2RTMwM0NGQkE0MzE5MEE5RUZBCisxMDQ6IDNBMDI2MkVCQzc0NkE3QzA0NEMxREIwNDM5NTFGN0VBQzY0NUM0MEY1NTQ4OThEM0Q3QjJCN0FBQzRFQkQzOTYKKzEwNTogMUYyQ0ZCQTcyNzU2MzlBMTJEQTdDRDE5ODZGOTIwQzQ3ODUwREUzRkUxM0M5MzE2MThDMEZBQzc2NTgyMEVENQorMTA2OiA3QUM4OTEzQzA5NzUxMDFFMTg3RkRBRERBQzVCNUVDNDY3QTI1ODY5QzRFNjMwRUFEQkI0MkREMkRGRTQ5NThBCisxMDc6IEQzODY1OTFGMzI2QzkxRDI3NEZFNjI1QTY2N0I2RjlGNkY3RDk5Q0Y1NkFDQjM2NUEyMThGMUNGOEUxNjdBNzAKKzEwODogNjYyODZDQjFCNjExNTZCMDA1Q0JGQzk0QzJDQUIxQTY2OTREN0YxMjM0MTFCOEExMjNGMkFDRDgyMUMyOTFGMgorMTA5OiA4NDREMTAzOEU3MTA2OTAwNTBEQTczN0Q1NkZENkIxN0MyNjFDN0JFNTEyNzEzRTYyMDMzMzg0QjUzQzQwOTAyCisxMTA6IDdFRjk3MEM0MDA4MEY1NTQ4NTEyNzdGNEU5NTBDNkYzNzhCMEEzREEzQ0QxQkUyNTBEOTc2MTYyRjhBNEVFNzkKKzExMTogOUJDMjBBMkI2NzU2NjY4OEJDQUM3N0ZDRjMwMjU5RjExRDlCMkZEMjI3N0QwMzNFNkFBRTE5RTM2MDU4QTM1MworMTEyOiA3OTZDNzJEOTVCQkExQTQzNDFDNkIwMzk3RTE2NUREMjFDRkJFRjU1NTU1QjM1QzcxN0NFMzNCNkM2QURFNDkwCisxMTM6IDFFNkE5QzFGNzhBRkYyNjZFRjhGQjI1QzMyQzFGREZCNEEwRjY0QUZGRDA0NkQyNTc0NzBCRjZEQUVGNjFENkQKKzExNDogMEUxQUQ5MjdBRDY1OEM1RTAzMjEzMzNBRjhBRTRFRDY5OTAzQjRGMjJDNURGRjkwQUM5MzI2ODUwN0E3Qzg2QgorMTE1OiAwN0I3QTc3OEUyOTMxNzA0RTdGRUNBMjg0RkYzQjE0MDcxRTI1NUEyQjgyNEFEMEEyMjcyRDIxNDQ4NTc5Q0VFCisxMTY6IEE4RDgxMERGMDYzNjhBMEU4MjVENkRCNDM5NDkxNkU0M0UyMTdCRUU5MzAzQUQ0MDk2QThFMUNBRDM3Qjg3MDMKKzExNzogNkE5QzdEMzAyQ0NBMUVFMTcwMzY2RjM1NUQ4RjQwQUUzQTIwRDI4QkZDQjJCQTE2M0RDQjY4RTA4REFDQjc0OAorMTE4OiA0MEMzQThCMDhGRjlGNzY3NDkxRTQyNDNEMTgwODU3MkZEQUYxRDhDRDIxQUI0NzExNTg0OTUzMTUxM0QwNzUwCisxMTk6IEYyNkVBNjc2MEFBODAzNjAzOTgzNzE4NTU3ODM4MTVCQ0QzNDQzMUUwQ0NFQzU4QTM0QTY3OTk3QUNFNDNDRUYKKzEyMDogRUVBNzhENjhBNTA5OTg4RUQ2RDdFM0YyN0ZDMjJGM0VCQ0Q1NzBFRjBGRTI0MkEwMjUxNDU3RUFDNEMzQzFGNAorMTIxOiBBRjk3NzgxOUI4N0YyRTYzQzBFMTMxREZBMkEzMUM1NTVBRDgzMUFEQ0E2REUwRkMxQkU0OEQyMUExRTdFNjY2CisxMjI6IDg0NkE3NURGMzY5MUIyQkYyMjRGQjBFNjZFMzYwQTJFOEJCMURBMzI0MjIxOTBGMkIzMTlCNzNFNjkwMEFENDIKKzEyMzogRkZBOTk3RkNGQUJDOUZDQUQ0QjU4QjBFRjg0ODg5MEZCMjNCOTc0Q0Q1N0ZBMDcyMjMwMzc0NTBDMzcxQjExNgorMTI0OiAwMDI4Qzc3Njk2NUEwQUU1RTlFNzBEOUI4MzNCRjMyOEJEQkNEMDZDNUExMkEyRjFDNTEwOTExRTYwQUEzMDRBCisxMjU6IDdGQTIzNEM1OTk1N0MyMTRBN0JFOEQxQjkwOUM1NDBCNDhFNTQ0MTRFRTVGRDEwODFCNEMzMzlGRDIyMDQ1MTUKKzEyNjogQTg0MEJFRUJGMkMyRTgwQUYyRTQ4MzBCQjI2RjcxQUVFNDhBOUM2NURFNEE5NDI1REE5Rjk4RkEzQTM3REQ4NAorMTI3OiBBOTUzMzI0MTVFQTI5QThDQTZGREIwRjc3MUUzRjIyNjJDNjkwN0RDNDVCMEFDOEJDMjI5RjYwMDkzMjNDM0E5CisxMjg6IDhCMTg1NzAyMzkyQkMxRTA2MTQxNDUzOTU0NjkwNDU1M0E2MjUxMEJDMkU5RTA0NTg5MkQ2NERBQTZCMzJBNzYKKworSE1BQy1zaGEzODQKKyAgMDogNDRCRTgxQzQxNUQyODNBQjdBNjJBNDUxODhFNURBRkJDQjk3REE2MDZCRDVCMTZDOTJDMUZDMzZGMTk4QzBCM0E3MTQ5MjE4NDhENUUwM0RGMUM0ODQ5QkI4MzEwQzY2CisgIDE6IEMxRTFFNjhEODY0Rjc1ODk0MUI4N0UzMEMyNjIzNDhCMzczRjE2N0NFNDYyOUU0MTE3RkJBMjA4NzczQ0NDMkU2Qzc3OTdBRTVENkJCRTJBQkU2QkFENERFMkUxMDUyRQorICAyOiBCQjI3QTBGMDZBMUJBRUQ1QUM0RkMyMjY3QzM2RUFCNjYzRTExRUM1RjBGQ0MwQkRDMDlCOUIwRTgwM0IwQUNBQTJGMzlEMkFDNzNERTQ4OUZDN0M5QUQ2REUzRkM5QzUKKyAgMzogNzBBMjczQTJFOUU1MDkyRUY4RDRDNThFOTk3MzRBOTExQjdDQURENDg5NTRGRDUxODMwNTMxM0IwQjY4MkNGQ0UxOTIwMThENDg0NzM3NUQ3RTMxMTQ3MEQwNUQ5N0Q5CisgIDQ6IEI0RkFGMTJCMzI1QjQ4NkI2N0UzOEE4NTVEMThCNDVEMUJGNkNDNjBFNEQwMEFBQTZFNTgyNjhGNTI0Q0MxMTIxQUQzRURCNjRENkUwRkE1MjRGMTFDMEYxMzlEMEJCRAorICA1OiBCNTA5QTMyNUY1NjFDRERDNTM5QTNBNDY4MDM4MDc1OTc0NzcwOUQ0MjhCNzdFNjlDNENGRTkyNkY2NUIxNDdEOTJEMkM4MzY5MkY1MjZFQkI1Q0Y2MDZBRDE2MjU1OUUKKyAgNjogOUExRTY3OEE3NDNCQTI4NUNFMTU0QURCQjU1NUNGRDA5N0Y1ODM5RUVCMkRFNDE0Nzk4NjQ2NEMxQkYwMzJCQTBEODA0NzMyOTM0NjdFRDBBMEFDNTlCRUFFNzM2NTk4CisgIDc6IDFERjIxNDUyOTQ2NDY2NjAwMkMxQUYwOTRCQjM2RjBGQjE0QTQ5MjMwMzFCMTA4QzIxODI1RThDNTVCRjZBMEJCMzRDOUFEN0Q1MDMwQjJGQzdDODNBMkNENEM3OUMxQQorICA4OiA4NkQ4QkVFNDRDQUMzNUNEMzk0NjMyMTc5NjU5OUYyMEYzQTQxQkUyOEYxNjFGREEwNjJFNDQ0MENDQzE2RTg4QkM3RkZDNzE0RDUyNUE2NDIwQ0RCRUJERjZBRTlFMTIKKyAgOTogOTI0MTc1OTVGOTk3NEI0NEJCMTFFQjkyMDBCNzU2MEZFQTMzODJDRENCOEJBNEMyQ0M1Q0ZERDAxOUMyQjU5NTZEM0U3OEQ1QjE4NjYzM0FDQjc2NUU4MjJCM0Q0RTkwCisgMTA6IDJFODdDRjg4NjAzNkI3QTY2QUU2NTgxQkEwREJCOUFDMkEzOUUxQzdDNzU5NDMxOTE4NEZGM0I2MTJBMTY1REMwMkIzQTcxMzNFM0FCM0QyOTYzNEIxQ0Q1MzA1QTQ2QworIDExOiBBNUNFREQyQjU0NjU3ODMyRjk0NkJGQkExNEVENTEwNkU4RUI1OTM3RUFDNkM1NDA1QkU1Q0JFN0M1ODA1MzUxNEU3ODRFM0Y2NjY4QzIwNDY2QTI0MkQyNUE0NDQ2MkQKKyAxMjogNzQ0NzVEOTEzNjU5QzJDMzA0QkE0OUREMkIzOUIwQzdBRDdENTM3QkIyMjQwRDg2MTE4NzZDRjU5NTVCMzQ3Njk0NTI1Mzk2QzQzQ0E3Mzk1MUU3MTFEQTM4QzY5NzZBCisgMTM6IEIwQUVFODJENzA0MTFGMUE3OURENzAxMjQyMUJBQzEyMDJEN0MzQkFGRkExNUI0RDhCODY4QTNFNkY5MkI1MTNGNkIwMjZFMkU4RkVFNDVEQjJBRTcwQzE1RTExRDE5RgorIDE0OiA3RDA2RUE2NEZGNUI5MTM5NjYyRkNGOTMxODU4OUU4RkYxRjc4Mzc1NEE5MTE2RTA5MEIwQjdBOTgxQTlFRjFENEMxQkY1ODJDOEVGNUU3MUE0OURFQTI4MzQ0NDcyODcKKyAxNTogOEY1MkJCOUIwQTJCMTA2NkFCNjc2MDNDNTUyQzE3RTk4M0QxNTExNEMzQjk3NzZDNTQ4RDc0N0Y3RTI0QUM3ODIyNTM4MTI4MDJFQzQ1NjkxNDQ0NERENjdDMENERDQ2CisgMTY6IDlERTY1ODcyMTFGRTRBMjMyRjAxRDZEMjA1NTQxMDJEMjREOThFQzE0MEEwNTMwM0MxODkzRjIzMkJBQTJDMDdDODFBMTBDMjVBOTVBNTBCMzhFODc4OTg5MDBCQkUxRgorIDE3OiBFMDE3NUVCOURCMjY0OTgwMUVDMkVFQTlERTJDMUU5NTBDMTI5Q0EyNDlDMTQzMjY2MTRFMEJCOEMzMkFFRTY3REYxREZDNjMyMDQzOURBRTRGQ0RCNEIwMzdBNTM4NjgKKyAxODogMDYwNkE4NDgwODZEREE1MEQwMzFBNTg1MTAzNDc4RUVEMDI1OUE5MTY3OTU5NjU3MDUwRjhEN0REMjFCNEQ2QjYyQjkzQUVCMDAwOUIxRTg3OEVEQURFRkFFOUIyQURCCisgMTk6IEQ0QTQ1REQxQTZCNjEzRTNEMkQ3MkIzNUU2MDMwRTE1MzFENzVBRjdDM0YxMDA5MzRDRjI3RUU5RDBFMEYwQzIzNjU4MUVDOEVFNzRGRjc1OUQ3QTE5QzVBQTZEQTlFOQorIDIwOiAzRTBGRDExQUU0OTMzNjY1RUYzMEUxMDAzNUIwRTY4NkRDQTgzN0Y2RDZGRTJENUExMEI0RUMzMEYxODNFRERGMzU1ODMwOTkwNUYwMjhEQjkzMzIzRDA5QTNBMkYzRTkKKyAyMTogREEyQTIwNEM3OTA4RkQyN0EyOTQxNUNBRTNCRDE2QTA0ODhGQTFENDJDQ0ZBMkUyRjVBMUVGRDZGOTk1ODNFQzZCM0IzNjc2MjA2MEY1NDdDNjI5QjlBMzMyNTg1MzU1CisgMjI6IEZGRThGRkVENDc5MzNDQzk0MUE4RTkyMzNDMDM3MDgwQjk0NjVCNEY5QzI1REJBQzc5MDgyNUMwMTM1NDVEMjM0NDkzMEU5NTMxODdDNzc0NjY0MzdCRTIyNjk2MkY4MAorIDIzOiA2OUZFNzM0RDVDNjlGMzQzNjZFNUNBNkIwOTVERTkxQ0Q0REVBMjlBRDcwQkVGMDZBRkU5QkIyMzIxNjJFNkJCQjEzNDkyNjMwODcyMTJBRTNBRTVENzRBM0IwNjBGNTAKKyAyNDogRUZDRjFCODI1QUY4N0ZBNTE5OUZCM0M3Njc4M0NDRDE3NjlFN0RDNzdCQ0YxNDVEQjc2RkRDNjIyQkZBMjQyNUNGRkFBNDBFNjM3NjA4NkIyREJGNkY1RDlEOTdBNTM0CisgMjU6IDk4QzNEQzUwRkMwOEQyQTg3QUJFM0ZDMTY4NzFFQ0I4MjBENTMwQjQ1M0M0MUY4M0ZEMzA0RDUxNjYwRkQyOUJFQzZBN0QxQzYzRTNFMTJCNkU4MEU4QzU4Q0IxMjlDQworIDI2OiA5NDUwNDdDRDcyM0VGNEYyNUFBQUM0QTE5RkRFRUQ0NjNFQjA0Q0NCNzhFQTMxODk4OTE0MzI5OERGQTcwRDc5MzM5MUJCN0ZDRUE2QkUwRDc5MTg3NTQzNDI2QUFERkMKKyAyNzogMjcxOEQ4OUY4MzUwMzdDOTRDRDYzNzhBMzgwNjYxNEI4NTM2NUE4ODhCNDhGRkQwOEMwOUYwQjkzMzYwQzA0RTQzQjdFN0ExOUM3OUJDREM1REI5RjU5NDQ1NzlBQjc5CisgMjg6IEY3MTRGMTYyMzgwNzU3OTZERDQzOTYwRTE3QUUwRURGOTk5MDEzMkQ2OTBGNDQ5NTdDM0RFOUVFQzI3NzM2ODMxNzJGRENDNDRFRDIxMDQzMjA3MjZCQUE3REJEQTFBNworIDI5OiBBODdBOTZFRDhGRjBFN0ZEMUYyMzVGMDcwQ0I1RjE0QjQxQjJDNDQzOEE2RDdBMEEzOUQwMzhDNzQwMDhGRTlDNTI0OTdDQzUwNjQ5ODQxNDgzNUFFQTExOTI0MzkzNzkKKyAzMDogMzFCMDI5REZBODVERjU0NUI3NTI1MDZFODA2NzVFNjE3NTQ5QTY3MjVBNjU4Q0E4MTIzRDhDODM3RkI3MUQ4Qzk5NjFCQkMyNDYwRDdDQ0UwQ0FCQkRFREFDQjU2QzM3CisgMzE6IDBCMUE5REQzMDhFNUU2RTY1RTRDNjA4NjFENDJCNjI4RkJEQjJDMjI4MDM3MEVGRkFCNzM2QTc3QTgwMDRDNUFDRDUyNjlEMDkwQjY1MkIxRDhGMTQ2QzFENTE4RDI4OAorIDMyOiAyQTE2MEUwQjJFQzdCQzkyN0ZGRjgxM0EyQjU2QUU2MTMwMUFBMTQ5MzNDNjU5QjMzOThDN0EwQjNDQTUwNkREMDBGQTZGMURFOUM2RDQ3QUIwRkIyQkYyRTdCNEI4M0YKKyAzMzogNjg5M0MwMjA1RjNGNEFDRTkwNkYyRkFDQzk3RTJCMTYyNEQ0MDk5NzM3MDQxOUU1OTgxRTYwNDFENUNGMzRDNzdFRjVBQkRCMUFBMEQzQzhDMzc0MDEwMEMyNzExNTU1CisgMzQ6IDk1QkM4QzcyREM4QzcwQURCN0NEMzgzMTEyOTJBREVCOUQ3QkRFQzZBOTU4MEVGNEUxMUExODMxN0NCNjU2NjdEMzQ0RDhENjYwM0MwNDQ0NTRFNjdGOTdGNERERkY0MAorIDM1OiAzREQ4OTJBNEU3MjQzNzY4MTRERDVBNENCRTk2RTQzMTdBQThBRjcyNDc4RDUzMzc5MjQ3RTc3QzM1NDYxQkI5MkNGNDkzODUxRkYxRkNGNTdBNjcwNDkyMzA5OURGRUUKKyAzNjogM0E1REVBRjk2N0JGQTNFRUNBM0YyNTkzMDc5OTFGN0RCRkNFQzFGMzU0REYzODVDRjBFRThEOTMyOTE3MjE1NTNFQTk1NEU5RDY1OTM1MDZFOUYzRTMzMEUwQTAyNTc0CisgMzc6IEUwMEE4ODNEQ0I1NDYwQUFENjExNjAzNjE0QzcyMTRFQzRBNTY2RTA1ODBGQ0FCMUNBNEVDRjEzODZBNDJEQ0RBNzQ2RDNBRTFCMEQ1NEUwQjlBQzFGQTMzNkZFNzg3QgorIDM4OiBGNDM3Q0RFQTQyNUU3QTcwQ0I0RDE5N0MwQ0EwMTU2MjUzMkE3QzUxRkZCODQ2MkI0Nzk2QTRGRDBBN0VDODgwQ0IwRTVFRERENUY3MDNBREMxNzkzNzQ0MTY1OTIyNTYKKyAzOTogQ0U2OUU0MEY1QjVGMkYyNUUwQjUzMjgxQkU3NkVDQjBFNUI0NTU4MjkyQTFDMUE1RUM1NkYyQ0YxMUIwMUJFRUIxRjBCQTAxRTZBOUIzRDAzQkVCNjlBRTA1MTFGMzIwCisgNDA6IDQxQUE4NEQxNTM0MkNEMDY3NUM4QzAzMTJDMDI0MzUyRTk5OTE0QzNFMDFDOThGOTY5QUQwNENCNTcwNUU5MTg0RjM4MjFDRkM2QTIyRDQzQTc3QzkyOEY2REI3OUQ4RAorIDQxOiA3NDAwMUQ5NzIzNTNCQjQ1RkYzRjdGNDA1RkM3MjdDQjVEMEIwMDQzMUJDNzZBNTdFQUYxNzg2MkJENTI5NDlBRjg4NDQwM0VENkIyQTAwMkQ2MThFQTMzNTIzREUyMDAKKyA0MjogOTY4QkMyODIyMzc5OUYxRUI5MkYxNDMyQjZBQUY1Q0Y2OTUzNDkxQzNGOTU5OTc3QjA2NUJEQjgwMEFBNDM4Q0M4QUE3RUUxMzA0QzE4OTk5Q0I1RUQ3MDk0MzFDRkZFCisgNDM6IEQwNjdFQzAzRjE0RDJENjM5QzQ0MjNBMzExRUM4NkIzRERDMzY5M0EyQ0Y0M0MyNTlCRDAzNThGOEQwRDY4RjQxOTUwQ0I3MDUyNDlBNTkwNzJBMkNFN0RGMTU1RjVDMAorIDQ0OiBGNDFFQjc3MTc5OTM0ODg0RERCNTZEQ0Y4M0RDOTBDNjA2RDAyMjZEREY5NDEzNUZGOEUxRTBBQTU2QzlBOTA4ODFDNEMzODBDQzBBRDNCRDBEQTQ1QTYzNTJCQUNDMDUKKyA0NTogMjdCRjlBOThGOUUyNzMyOTcyRkUyRjM1QUJDODBBRTJFNUEyQkMxRDIzOEI5QjFEOUNFNjA1QTg5MTQ0RUU5NzY2OTg3Mzg0RUJEQ0Q2MzUzM0U2NEJFRTA5NEU0NTAzCisgNDY6IDE2Njg5MkUxMDZCQkQ5RDE2ODE5RDlCREQzNjAxRDI0QzBDMTE4NjBEQjEzNzk5RjA3OTdGMjA0RDA3REJFOTE0QTdCRDI4NkIzODBFRkFDMzRERkUzQzk0MENERDNCRQorIDQ3OiAyRDg1REJDRkM0MzFBOTRGOEY1MDEzMkRDOEMxMEIyNTAwMUVBMTBBQTlERjdDNTNBRUU5RTgzODNFQUFERkNFQ0MyMTIwMkVGQkNBNTU2QkI0RTMzQ0M2ODE1NkIxOTAKKyA0ODogMDg2MDA3RTI4NzRFNzc5QTVFREYwRTE3NkFDMUExMUQyNDFGNEFEOEQwMkFBOTlERjJCQzFBRTNFNUNDNDc3NUFBQTkyQURGRTc3MkNFRUU4OUQ0RkRGMUI2MDFEMDVBCisgNDk6IDJFQ0EzMTQ0RjRGOUVBMEYzN0MyQ0E1OTQzRjQ1ODU5MEExRDREMTlDMEVDRUE2QTU1Q0RDQTY0OEM5OUNENDU3REM1N0VBQTk5NTA0MkQ3RkJGQUI1OThCOEFGRUVERgorIDUwOiA5QzFGMzFGNUQzQTU4OTYzMUQ4QjdFRjg5QTUwNzAxMTczNkJGQzMyODA3MTUxM0Q2NEU1NDMyRDI0QjFCQ0Y0N0VCMTAxMzlCNjQxMEEzMTAzMTQ1QUY2N0I1QjZDNDYKKyA1MTogRTA2NDVFREEwMDREOTAwNTM5OUEyQzA3MkVEOTk1OUU0Rjg5MDVEMTVDNTc5OTI1NTMyMDJBM0I1M0JDRkVBMDA5OEU2QjI4QkUwNDdBNEIyOUVFRDdCNTc2MDJDMEUzCisgNTI6IDZDRTVDQTkyRjBCMUU4NEQ3NTc4RERCODZDOTZBMTA5MjQ2MDFBMzY4MEJBRkVFNUEwQjI3RDgzOTBCNTk3NTIyMDVFQTQ4MzgzMkVEM0U5MzQzREU3MTc1NjAxQzAzQQorIDUzOiA0N0Y1MDg0NEM4OTdGRDkxMEM1QzIyOERFQTFFQUY0NTY4ODJDMTExNUFCNzFEQjE1RTY4MzJEOTY2MDdDQjc5QzhCN0FEMUNEREUwMTk2NkZDRERBQTBCMEJBOUYyNjQKKyA1NDogQzBBN0VGQTI0NTkwODMzRTQ3ODhCQjExN0QzQUIzQ0UwMEM4NENCNDgyMEFEOUZEN0YwM0NGMUNFMUE4OTgzRjk5MDZCREQxMzhFMTk0M0Q3NUVDRDlCOThENUFEOEQzCisgNTU6IEQwNTZFOUY4MzFCNkRCRTk3RkM3NTE0NTNCMUM1MkM4QzZDNEQxOEEwMDA1MEY1QUYyNDI3QzExMjM3MDYzNzVBOTE4NjU2RDY3NTVBNEM5NTBGNEU1QjVDMzE4Q0VCQworIDU2OiA0NjI2NTBDRTM5ODFFREQxM0QwRkQyRTVGREVBOTNBOUExOENGOEZBNzRDRDYxNDJERjQ3MDdFNjA0RDFGNzI3NDVEN0VFMDhBQjEzQUZGM0E5RjhEMTY2RUE5MENFM0UKKyA1NzogMkJBNTI0OTg0MTQxMjU4NEIxNjEwNjMwODdBRjlGNUJBRUVGRDk3OTg5QkY4QTA0NTVFNjVDOTRCMDY2MzQxMEYwRTFCQjIyRUE2NDAyRTU5Q0JDNUEyM0YyNEFCQkZECisgNTg6IEMzQjFFNEIwNUE3NTkzQ0MzMTVBRTE1RjYzQ0U4RDkxQzRCMzBFMEQ4NDZBOTdCN0Q4RjAxRkFBMUI2QkQ3QzkyMzRFQjE1MzM3MkY2Q0M3Nzk5QTAzNUUyMkE3N0VGNgorIDU5OiAxRTY1MjY1M0I5QTNDRTg2MkRCQkFGMkM5MTlFODY4OTFDNUMwM0Y1NEVENTk3MEU4MDI4RjhENUVGQjUzM0I5QzExMURGRDg4QUNCQkRFNTE2RjBENEQ2MzZGNUU4MjEKKyA2MDogREE3NzNENUFBQzMzNkI2MjY2RDI3QTAzQUZERjNBMTUxRkFCMzAyRTg5NENDMUQwOUI2RTRFQ0QwN0M0QUY0QkUwNkEyRDI4RDAxNjY5Qzc1NTdGQUU4RTUxM0QwMUQ1CisgNjE6IDhDOEZFNjQ4QTI5RDRCQTc4QjNFMEI5NDQ1OTdFMzkyQTMxRTI4Rjk4QjE1MjgwRTFFQzBBNzIxQzlFRDVFMzYzOUE2QTQ1Nzc0NENDNUFBQkZCMzYwMDUwMUY1MDU0RAorIDYyOiBCNDQzREVDRjQwQTU2OTNGNjdCNUJGNTU4MEE2NjVERjZFQjk4RkE5RjE0QTY2MUNENTBENjYzNUUwRjc4RkIyOTQzNzMxQUYzNjM4MzlGRTZERkMwQjRDNDlGOUU4NDkKKyA2MzogQjIyRUM0QUZFRTNFQTY5MzY0NzAxRTU2MjFFNDUzQTBDMzk4OEMxRTJGREE1NEZEQjk5MzUzRjI4NTMyN0E1MzRGNzE2MkJDNTRENzAxNjUyNzQ0NDEzQjlBNUQ0Q0JCCisgNjQ6IDQwQTIyQjc4ODFBRTgxMzk5NDE1NDA1NDBGQjM3QzlBRjI3QkNCMTY0QjZEMUEzQkVDNzA5NzMwQkJCQjQxM0QxRjJGRDZCQTRBN0I3RUE3NDdGRjQ1RjNFRDMzMzZDMworIDY1OiAyNDZFNDI2QzU3RTQxNDU3NURGMzEyMjIzMjcyODE5QjBGNDlGRjk0OTUzRENCOTQ2NjVGRkY3NEZFQUIwNDlBRjE1MTYwNzA2QUM1RjcwMkFGNjY0NzhDRjJCQkE1QkQKKyA2NjogMTg0RTZFNkQ1RkI1NTQ1NEVFQjZEQkUzMjNCRjI4REI4Q0U2MEMyNzFERDBFQ0M4QkQ0RDNGMUMyMzM5Qjc4MjhDMTUxNUYwMzAwNThGRjM3QkQ1MzU2OEZFQTgxMzc4CisgNjc6IDEwQjIzRkUxNjE2QUQ1NjA5RjZGNkMxRDkyNjZGNzAyQzFCNUU2RjdGQTBCM0E4MTQwNkI1QTc2NkUyMTc5RDA4Mjg1NDY4NzcwMTMxOEE3QjQ2RTIxRkE2N0QyNDA0RgorIDY4OiBERkNDMTI4MEM1MjA2Rjk5QTU1NUUyOTFBQTFERTZGMEEzQUU0QjQ5OTE2RkVFRDQzMzc1ODJCOTFEN0VGMDk0MTU5NTU2QjAxQUM4N0JGN0E4RTg0RjlGNTM1OTU5MzgKKyA2OTogOTFCQTlBNjQxNjE2NDQ5MDg0QTU3MjIxNjQ3MzY5RTJFNjk1MjVBMzBCMjc0RUU1NDAzRkU5NUE0M0QwQTdDMkIzMDFCNjE5MjlEODkyMjJBM0EwMzMwMzU1MDUyMUI0CisgNzA6IDk0RjU5QTdGNUU2OEI5NDJBNUQ2NkQzQzY0MkE3ODY4NUYzQkI0MDBGNEZGOTcxQkE1NzZERUNFOTRBMzUzNDU1Mjc3NjMyQjcwRDA2RUFFMzgzMjlDQzIyOThFRDc5MgorIDcxOiAyMUE5RjVDNEIxMjkwRDk1QTFGM0YwNTFBMDE1OEY3REQ4QTg3OUU3ODYxQjYxQ0M3NTdGQjVDNzI5RkU5QThCRDQ2QkM2RENFNTk1RDIwNjQ5MDkyQjMxQUQyNzQzM0QKKyA3MjogRTQyNDZGN0RFNjdDM0EwOEYxODg1MkY2MTU5RjVEQzlGQTRDMDEyOUE5Rjg5NEVCNjEwQzEwRjFGQjhCNjFCMUM5OTQ3RDc0MkE0MThGMDNBMDBBN0UxMUFERjQzNkYzCisgNzM6IDhEMkNFODIwOUI4MzYyMzExRDk5RDY4REMyQUFFNkJFNENDOEU1MkMwM0E5N0Q5OUQwQzVDMTVEOEUyNEYxRDNCNTE3MzhCRDI3QkVCNkU3NzM0NzJDRDIyQTEyMjVDNgorIDc0OiA3RUFBQjEyNEEzQzkwMEYzM0RFMDZCODRFNzgzMUZFMzI3RkQ2MzhDNEU2OERDODY0OEVCNjE5RTNDN0U1NzM2QTI2QkNEQ0ZEM0FBNkFGMzRFQjEzN0M2QTIxMDc0NkEKKyA3NTogOEI2MEY2MUExQUMyQzY1MjhDOERCMDdCNjg3NEYxOUI4RDQ3NDg1OUY5OEFGMDM1MDNCMTE1RUVCODA4MkUxOUQ1M0Y2M0QzOTc2NDdCQzJENDI3OEI4QzJCNzQxRDE5CisgNzY6IEE0OEQ5MkJBNjQ2REFGRjdEMEY4Q0JDQjFENTc0RTlDMTlEMzk2QTMwNTczQTc0MDRGNjE5NkZCRDdFMjI2NzMxQzhBQjA1MTM4RjdCMTkzNjk4NkRFNkMxRjFGN0I1MgorIDc3OiAyQzNFQ0NBNkU3QUYwRjk1ODdFNUEwM0Q0NjJDOThGMThCOEMxM0MwMzlEMDJEMkQyOUUwNkI1MzA5RURDODIwNTJFRjcyQzk0RTBBNUVCN0ZEMzU4Mjc2NjVDQTJGOTIKKyA3ODogQzlCNjU5QUZBQUVBQTg3NzhFOUU0RTNCNzI1Rjc1ODc2ODk2M0M1NTE1MUE1NEJEOURDMTkxRTEzMDJBQkExRjFGMDg1RDU0NDNDNDY0NDE3OTM2ODJBODA0NzIxMUUxCisgNzk6IDlBNzZFODNBMzAxQzE0QUM2QUI4Q0ZCMjlEMkNFMzlFMEU4NkIzMzVGMkIyMEMzQzg4OTY1MUI0RTBCOTRDNTIxOEU5MTBCMURBRDI4NDc0MjUxRDA2RDEyRDQ3MDcyQQorIDgwOiBBNTI2Q0ZBQTJFRTk4MUE5QTREMEVGMTJBNkZBMzYzRjU2MjA1N0JCNzVBMjE4RjQ2NDVCQzVFOUJFN0NGRTdFQURGRDg3Mzg2QUFFMUM2MDdEODEyNzcyNDk4QUJCRjYKKyA4MTogQjc0NzgxOUI1NENERkVBQTc1MUZCOUY1QzIyRkIyNjkxNTEwMjhCRkJDNjY1MEJDNTE4NjkyOTQ0QzVGNDE5NUQyNkFFQzQ1QzlCNEM5ODdFQ0Y0MDc2QjM4NzFDNUNGCisgODI6IEQ0NTk2OEQ0NTJCNTM0OUNBNDNBMEZERUZFNEE1Mzc5MzgxNjI1ODI1QTI3MjU5QUQ5QkY1QTgwQzQ2Q0IwN0JGMUM5MTlGQjNBQ0MyNTBENzMyMzhCMTFDM0EwN0Q5MAorIDgzOiBDMEI4QUIwRjhDNDk3RUQ5NTYyQzY1MDkxREYxRDgwQzMyQzU3QTAxOEIwMDk1N0JGNTNDNDFERjgxQTJGNjM3MUZDRkU4MjYyNEIyRTg0ODU5MTE0MTUyQjM2QjZBQUQKKyA4NDogMzBEMkJGM0RBODBDMEYzNzgwN0YwNDJGRTdCODc4ODUxRTBCQzQwOTNEOTg3NDM4RkMyQjk5M0Y0Q0M0QUY2RjcwNDY2OTkzOEI5RTMwRTU5QkY4OTk5ODgzNjM5RjY0CisgODU6IEJCNzgyQUNFRTQyOTMwOTIyQTk4RjY1RjMxOTA4OUU5QjRGNUQyREQyMzc0REQ3NjAzNUUzMTc4REI0NDY4QTNDMDRGNUVGODc4RUNGOUVENzU3REYxNEREODlCREQ0OQorIDg2OiAxNTc0MjRGMzBBMTA3NDg5NDBCQkZBRkI2RDk5QjFCMDZBODk3RTdEQUE0RjAzMzg3RTVFRDAzRjAyRDM5QUY1OUY5NkEyMEU0RTlGM0E0QzVDMDdDMjBBOEZBREM4RDAKKyA4NzogQjlBREVENzExQjFFMTUzN0EzNUFGODgyRjFGODY4RDk2NEI1ODk4RTg1QjA3RjU2NzdEQkYxODMyMzJGMzZDMTRBRjREOTk1OUMyMTA4RDkzMTNGOEJGQjE0ODMwQjAyCisgODg6IDdDNDU2M0JBQzNDMDU0NDRDMzY4MjAzOUVBRjlGOUVDNzlCOTZGMENEMzYyNDVGNTg0NjQ3QkM0NDRCODE3MzREN0VENDM4MENDMUYwQTJCQTg3NjAyMEU1NTY2MEJFMAorIDg5OiA5ODExQTRBNDVDQjI4QTc4MEMwNjMwNDdFQzZDRjk0MzI4MTAyREVFRDk5NzFEQjk5RTExQzZGQkNGQzA0NkVFMzhDMUEwMEYyOTBGRjY0MzU2QjlBMzA0REMwRjM0MEYKKyA5MDogMDlBNjlEMzI1NUVCMDhFOUIzQ0Y3Q0ZBNzNEODY5NDRDQ0M5MURFRUVGQzA0MjE0Rjg5ODI4MzY3MjZDQUYwMDZBM0ZEODNGOEZCNzU2MDBDQkQwNjBFQ0Q2MzlDMzg4CisgOTE6IDUyRDZEMDk0MzcyOENEMkVFRDY3MTczNkI2QjNCRTgwMUI4MTE0MTA5OTJFNEEzQkI1MEFCNDI2OUVCMjFBQjk0NUY2QTlGNzAzNkRBNjU0QTdGMjc4NTg2OTMzNTM5NQorIDkyOiA4QzBFMTA1MkVGMkIwNkMwQzIwRjY3RDkyRTUxREZCQURGMzY1NUZDNjQ3NTkzNTQyNkFFMUM4OEYzMDk2NjI4RUFCOTg1OEU1NDcwRkI5OEE1NDZFQjExQzdCNzUyREQKKyA5MzogQjIxMzUxQUY4NDAwQjk3NTZGMTA0NTk5QkE0QkI3OEMyOTA0OTU5RTJCMjRBQzNFMTVGRDAzOTg2MjdFNkM4RDU3QTdGOUZFRUQ2M0Q4NjM4QTIwNkJDMTY4Mzc5NEEzCisgOTQ6IEI5RjdDRkU5N0M3OTU2OEQ2MkIwN0YxRUY4ODdDNDM5MUI0OENBQTY2OUFBODQ5NUI3MUEzMjZCMTIwRkE0OTY1MkYwMkVDMEQ1MzQ0MURBQkExRTEwNEFGMDkxRTBFNAorIDk1OiA2OUQyRDE3NzMyMDhDRTNCRjAyQjM4QTdGMTQ5MTAxODdGMzQ3NjgxN0FEQ0M3QTFEOTgzMEM5RjI1RjExMkU2MDRBRUJCOTVEMDIzN0FDODc5NURDQjIzRUNGNTI5MjcKKyA5NjogNTdBOUZBN0NBNjFGQTJGREJGMEJDM0UzRTY0NjM5MDFCM0IyNkU1RDlBRDc5REZDMENDNzdGNzlFRjNBQTFBRTM5NDlFN0Q3MUNGNzk0RTA2N0QyRTM4RTcwMzhFREVDCisgOTc6IEZFRTkxOTZBMEExMTk5REE4Njk3RDAwQUM4MDg0RDZDQTFGODY3RDEwNUVFOTI4RkZFRTE0RTVFMzZCRUJFREU1Qzc5NTA5Q0E1QkEwNUUzNkMzRjBCQUZEQzlBNzU1QgorIDk4OiAwRThEQUY4QkE0RUQ2MTRCMzg4MDhCNEU0NjhDREY4OEVDOUIxNDgwMTdDNkJFM0ZFNTkzNDEwRDM3RDlCNTBBREYwOTEzQjc4NDRGRkRDQzJGMTkxN0EyN0E1OEIzNTIKKyA5OTogQzdGRDQwNDYzRTI2RDZBMjEzNzNFQUUxNEJDQjc0MDNCMTI3QTFFMjNFNDU4M0IyQUM3MjcxMDZCMDdCODQ5Rjc0QzA5MDc4MDRBQTc5OUMwNUQ5RkYzMjREMDRCMTgyCisxMDA6IDE2RTg5OUY0ODUwNTEyRkYzREIwRkNDNThGRUE5NjA4MzEzNjRFNUZCMDc3Q0Q4REEzRjVCM0YwRjUwQUM2MjY2MDE5MTdFODM1NUU0ODQ3QTAwRTBBNTE2NkU3ODZEOAorMTAxOiBBRjJEQURCMTc2MDVEQjNDQzQ3MUMwMEQ2M0M0MkY3NUY4MTU1OTRDMUI0OUQ5Mzk2QkNGRTdFRDRENEZCQjFDRjE1QjU0MjY3NURFOEM5RkY1MEVGODFCNzJGRjcyQ0UKKzEwMjogMTY5OUExRUEyQ0FDNzA3MjA1QTZCRkFEOERGREFGMDlDOEQ2RkNEREYyQkMxNEE5Njc4NDUzNDYzQUM4MDA1NDYyN0YyQzM5QjcxMzg2MTczNEIwOTc0RjQ0MkQ3MDdECisxMDM6IDE4NkRBNzFEN0U5MTNEQTQ5RDhEOTcxMDE4ODJCMTI4Mjg0MUQ0MUNBMTJGNTE0QzFCMkRENjE1NDNFMzMwQjc1MUU5Rjk3NDkwRTE4QTRBMzdGRjE4NTNFRkRENzU3RQorMTA0OiBEODIwNTAwMzhFNkRGNkVBRTlEMkQ0MDE5ODI3MDI1QTI1QkM4Q0IxNTgxMkUwQUNGNEI2NzZDNzk5QTNEODBBQ0FFNTcwNkMwRkIxRkY3MkIyQzQ4NTFEQzkyMzJCN0MKKzEwNTogMTY1N0M5OTUwNkVDOEIyOEFGQzE2ODRDNEE5RUU0OTcwRjhGNDI2RTRCQjBDM0ZDMjc5NUNGQkE4MjkxM0I0NTNDODdEODRBRTlCMzI4OTdBNENFMjZGRjQzMjBDRjIzCisxMDY6IDk4MzRFOTM2NDgyNTkyQkFDMjM3M0FBNjQ4MDZGRTBENUM4RkE5MjE0MzA3MEM2MUU1OTQwMDRGMEQzQjg1MTZDMkE1QjAyNDRGMjczMTI0RTgzQjIwRkU5QTJDRjVEMworMTA3OiA1QzQ4NTZBODJDOEU2RTQ5QkI4MUU4OUMyNkUzNTVBRkI3NUVGOTIxRTU3OUVDNEI5Nzg2OEJFMkNGQjRCMUQ5MzE5NUFCQTA1MDBENzc0QzUzNjVDMjI2OUZGMzMzQTcKKzEwODogNjdCODhGQUQ1MDg1QzhCQUI4RTE5NERGNzMxNTNBNUIxRDMzNDQzMTIyN0RGQzYxOUQ1Q0E1RDU2MDVFREM3QkM5NURFMzM1MTJCMkY1QjcxNEY0NkY1NEUxRTYxQjBBCisxMDk6IDkwQzZBOEYzNkQ0MkM1RjIxQTg5NDE3QUEwNEQ4MjJBNTMxMTBERjFEMDYyRTBDMUE2RkQ5QUU1OUM2NTg4Q0MxQzc4NDY5Qjk0NTc4QjZEN0MwNUVGRkFGN0ZFQzI2QQorMTEwOiA4MTdDMEU3QUNENTQ4QkQzNzMzNzkyRjRGOEQ4NDVEN0U0QjNDQUEwRjBFQTk0M0I1MTIzNUVCODJEQTdDOEI3N0E3MzNENzU2RTg2RDU3RUEzMDNGMzRCRDk3QkExQ0UKKzExMTogN0ZGMzk3RkI0M0REOTA5QUI4MEJDMzgxRUFBNEJENTBCNzI3OERCRjEwRjM5RkU3MThCNDIxRDZDMDczMjRGMzk4QkE1QjFEQkFBQzY0MTM3MjY3REUyQzYyRjE5RjdGCisxMTI6IEZBQzEyQjczMjEyMkUxOERGQkNGOERDNzM4MkFCMUI1NTM1MzEzNEYwN0UwNzcyMzYwODgyNUM5MDdEQjA1QjRGREU0MEZFNTUwODc4RDk3MUY4QjBCMDk1M0M4OEM1NAorMTEzOiA0REIwRkEzQzEwNUQ2NEE5Q0FFODRDMEI1RDdBRjA5NTVGNkY1ODcxN0Y2ODM2NjkzNUZGOUY0NzhFOTREMzk2OUIxMjY0QjFGMzdGOEY1NTM4QkYxMTZERTI5NDM4QUUKKzExNDogQkE2RTY5M0E2QzNDNUIwNDhGQjdGMjMyQ0M1RTEyQ0E3MTY2MjMzMkVCRjY4OUFENzVGNkYyQzU0NzE1QTY4OUNCMUY3NTUyNTMxM0ZCOEIyNzEzOTA5RUMxM0VFMEQzCisxMTU6IDAwQkE2NTZCRUEyNURCQTM2ODYxQjkyQjM1NkMzREVFMERCMUM4NkQ0NTAzQzdGRUIwQTg4QTM1NDFBNzAxOEVBNDU2Qzk1MjI0RUZDNDZBQTMxQ0I2MjU0MjFCQzgxMQorMTE2OiA4MTI2MjIwNzhDQTNCNEY1OTE0MTU2OUEwRTEyNUIzNkY3Q0M0NzFGNzZCN0I2NUZFQUExRjFGNjU2QkFCNkEzQ0Q2MUE0RDI0NTZFMkY1MTA5Mjc0QjIwOTBDMUY0Q0IKKzExNzogREJEQUQ4OTI2QTgxMUREMDI5NUMzMUQ1NUFFMEQ0MTY3MkM3RjIyQjVDQUVBQkZEQTJDMTUwNUIwODRBRDAxNDQwRTlCOEZGREE0REZDRkJFMjgxMjIyQUZENTQ3RTI5CisxMTg6IEEzMkVCQzEzRDY4OUIzMTYxN0QyNEU2QUMwM0NFNkZEN0IxQUFBMkJBNzhDQUUyRTI0QzM2QThDQTdCQzc0RUQ5QkQ0Q0Y2Qzc0RTNDOTZERUZGMDQ4RkUzOTY0RjBBMAorMTE5OiAwOTVEMkM4RENGODhGNjlEQTRDQzQ5QzY0QjAzQjJBMUQyQzY5MjJDRTBDNkVEQTEyNjQyNDgwQUUwREYzNTE1MkI0RTRBOUFCMDhENjY0MkREQzMxM0MwRkEwMTQ0NEMKKzEyMDogNTc4QTRCRkMwQ0E4M0YxQjM4QTBEMkVBQkUyQzdEM0Q2NzQzNkI1NTk2MjRCOTJFNEZCRDkyNDFCMkNBOEMxQUI2NzlCNTAzQTc1NEQ1MDI5MzE0QUFDM0FGMjI1RjM4CisxMjE6IDI1RTMyMUU2M0U0QUM4OTk0RkE0NjRCM0UyQjY4NzE1MDAwN0Q4M0VEOEQ2RTFCMjE3RTg2QjBDQTBEMTYzQjBCOTY4NkU0RkEyRjI2QzE4MzlGMkQ3NzhFRENFRDg2RAorMTIyOiBDNzYxQkExN0ZBQzNDQ0NBRjJDQUNFOTIyODNEQzVFNUI4QTY1NzE5NThGQzU5RDAwNzBGQjIxQ0FCQzg4QTgwQTQwRENENTYzMTg5ODhGM0FFREYzOEFFRkJCODRFQjIKKzEyMzogNUVERjVENzFEMkNGODVFN0FERjlDN0U5NjRGRDYyOEFDRjMwNEM0REUzNDgzRjY3MjY2NkE1ODNFM0Q5QjFEODZFOUUwOTY1NDFBREEyMzdENjlBMTQwNTcxRjVCM0I5CisxMjQ6IDQwMTcwMkNEODQ3RUNBMkJDOTIwOEY1MkYyN0Q4NEQwN0IzN0E4NkNDQTVDM0E4NzdGMjQzNjZDREI5NzE5REU2MzY3MEU4NTBGMDJDRDAyQzYyMjdCNzIxNEQ1RERBNworMTI1OiAzNjJDODk5MTU2REY3MEZBMTg5QTY2REFCNkRCQjNDQkY4MEI2MjlEMUU5MEQ5QUJFQjAwN0MzQzUwMTAyNzdFQTU4OUM0RDczMDA5QzgxRjk0QUZGM0ZGQUNCRkNCMUYKKzEyNjogQ0E0MzM4N0M3MUI4MjQ1QjgyMkQzMDg1Q0YwMjkwMDRFMThDRUJERkM5Rjc4QzI3NkYzNTU5RDk2MjYzNTYwMTk1N0I2RDIyODcwODlBRDQzRjMxNzlEMDc3RjM3Njg2CisxMjc6IDRDRTg1MDQyOTdFMjE4MTJDOTAxRTc3QzY2ODA1MjkxMDNBMDE3NTUzRjA5NTkxM0NGRjA2QUYyMEUzRDZERTdFRkU5MTFCNjM2RENCNTc5MUIyOTJDNjAxNDdGNjQ3MworMTI4OiAyQUM3MTk1OEM3N0UzOUQ0REU0REFDRTkyRkJCNkEwOTNFQUJEMTkxMzIwQTVBREE3MTE0QkQyMDFERDAyNjU2N0QyQjc5OUVBQzc4QzFGMDg0QkE5RkFFQzJGQzhCRDQKKzEyOTogODc0ODcwNjBDMjczRkUxOEEyQ0YxREZGMjIyNjU4RTFCNTBDM0JDNUEzRjFGNDU3NUIzQTRBNkVBMkY0MjIzOERFQjY4QjNBMkVDNkEzMjVFM0ZDQTUwNEIyRTIwRTI2CisxMzA6IDRBNzlBMUMzQzc5OEQ5RjI2RDU0NzE1MTA4Mjc5OTQ4RUFCMjQ2MDg2RUJGREYwRUFDOTE1MjIxNkMwQkEzQTc3QUFERjgyQTIzMEFBODRBN0M4ODQwNjM5NjA0MTlBQQorMTMxOiBEQjBCQTQzOTYwRkE2Qjc2MzIwMkI4QkRGM0ZFNEFEQTBCQUQ3OEVCQjNFNkU4RTU3QzJENTY0MEQxRUQ0Q0ZCNEFDMThBREIxQjk3NzBEQjQ5QTQyNTJDREQyNUEzNjkKKzEzMjogRUVDRTI5NkUyNThFQTM1ODNGQkNBRDFDREYyQjkxRjREMkFEMUZDQzFBQTMzOUQ4RjU5MUY4OUM3RUNCNUVBMkZBNjQ0OTU0MDA2RjBBNThGMkYzQkVFQTFBRUFGN0Y4CisxMzM6IDdBRkQ5NUM4NjUxN0JCNjA1MEQwNEJGM0JCMTQ0OEEwNjA4NDExQjYxMkE3QzJBOTM5QkI0NEI5ODRFMzYxQzQwNTY5RTVFNTdBRDdEQUNCMDE4Njg5QzJCOEUyQjNBNworMTM0OiA3RkNFNzg5NEM4RThEMUZCMTg3Q0MzNUNGNTc1ODI2OUUyODY0MjdBNjNBNTIyRjRCQzQ1RjgxNEIzMTZDMURBRUY5ODE5MTc2NDJDNTBFQzY5M0YzRUY0REI4RTY2RTMKKzEzNTogRjY3RjU2Qzk4MjIxODkyRjY0RTJBRTQzMjVDQ0I4MEMyODQ2QTQzRTE2MjlENDBCQjUwODQ1MTg0RTlDM0I2NjQ4MEIzRTlGNzkyMzg5OTgzRjJGQzQ4RkQyNTA4RjA5CisxMzY6IDFDRDkxNTU2MTg1NjkzNkFGQ0M3NTUzMERGRjE1MUY0OUEzNEQwREQwMDMwNzY2RkJDMUJFNDdENjExRjEwNTAyQkU4NkM5N0I5MUQwRTg3NjdENEYzODkxM0VFREMxQQorMTM3OiA4MEQ5Q0M4QjFCMkI4ODNDNDczNUIzQzBDMTlBRURBQjc4QTA3NzE3NTNFQkI0Njg4QTdFNTg0QkU3MzY2QjNDMTgxQzg1MzJGQjNBOEJGQzQ4NEM5Q0IwQkJDMUI0RjEKKzEzODogOEFERTJCODUyN0M5OTRFQUIwODA3QTg5Q0FCRDVCMDc1Q0FDRkVGNDIzODFEQTNDQzNENzAyMzE2ODQyRTI1MTUxQzY1QTIyRTgwODg1RTVDRDVGQjU4NzBGQ0U1MDFDCisxMzk6IDJCNDAzRjIxODhEMDg2MzI3QzkyMTY5ODcxRkQ1QTdCNDMyRDJFQjk5OUZGQjBGMjM2OUIyQjc2NkU3OTlBRkRDMTQ2M0NGNEQ5OTQxRjgyOEZFNDI1OTFENkI5NjZFRQorMTQwOiA0QTBDMThDRUNDMDY0MUMyOEM0MTM2RDQyRkFCRDBCQzI3RkVDMjdDMjU4N0ZFOEE1N0NFMEQyNzlBREFENzBGODBDMUU4MTJFMDFCMjZGMkJGM0VDREM3NjczQzM0OUIKKzE0MTogODkwNjc2MkI2MzY1MURENTk0OEM5OERCQjFCMzlCRDYwOTVDMTQzOEIyRTRDQTRCNUE1ODFENDUxQUQzRUY3NkM4QTBGQURFQzlDMEIwMDM2QTgzM0Q4RjVDMTNGMUMzCisxNDI6IEEzNjNCRjJBNDc5RjY3Rjk0OUFGQzE1MUMzNkIwNTIwNjJDQzJDRTg0MDk3NEJFMkY1RTc5QzBCRkQ3QkEyOTAwOEE2QkZEQjU1QjQ2NTI3RDE3RjYxNTMxQzk1MzA4MQorMTQzOiA0RTJBQzVENkVFNTY1Njc5MDJDQzFFMDJGMTE5RTMzOTc0NzYyQzAzODg1RUI3REZGN0M1OEFERTIyRTU2QkMzODRGRTc0QkQ0OTFFRkRCMkU2Q0Y0MDIxRTMwMTZFODEKKzE0NDogQkRGMEFGREYxN0Y3QjAxNEE2MUVDRTI1N0Y4QzdFMEI1MjM4NEVCN0RFRjYwQURFNzg1RjI3Mzg1MUQ2NDVFNUQzQjREOTUzNEMwRTYwOTdBMTJDM0NGRjVDMTFENDJBCisxNDU6IDBDREM2MUZGMEIzRDg1MTBDMzE5MDIwQjgyQzFDNUFBMTJDN0I2RjI1N0Q3RDRGMTE4QTVFQzNDQ0UwM0M2M0ZGRDM4NzEwRjhBM0M2MjFERDhENjZEOEJGMzc5MEI2MworMTQ2OiAxOUUzNUUxRTc4NUM3QTQxQzUyM0Y4OENEQ0Q5MTlFREM0NUY2Mzc4MzMzMEQ5MDMzNzY4NTQ2Q0Y1OUQxMEFFQkM3N0YwMTMwNTdDMEU0MUQ2RkQwRkU3N0RCRjkxNEQKKzE0NzogOEFGQTVERjUyRjY1ODE3OTRGRjAxNEEyRTFBQkNCMDU3ODFDN0Y0NEFFNkYzNzExMkIzNjNBQjEzRkYwMUZFMUU4MDc0RjE0NDY2QTM2NTM3NEMyOUZFQjA0OEM1QjlFCisxNDg6IEJDOUVDRDEyNzA2QkU1QURCQTA0RENFODRBRDUzQUUxQjMyNEY5OUMxRjU5Mzc3NzRERkUxOUM1RUI0RDZBMjA5ODJFOTdCOEY4RTRFMDJFRUQxM0IyNUI4QjEzRTY0QgorMTQ5OiA4RDAyQTFFMzE4REExRUJGRDFDRERCQjcyODBGMzYwM0FGM0FGQTIxQjNENEUwNzI3QzdDRkM1NzZGNTU2NDBCN0E5NzhCMTc5RUVDREI4RkJFODk2QUQzOEU4MkYxMkIKKzE1MDogMTk2OTI5Q0YwODQ5MDIyQ0NFOUNCRTRFQjJEQUY2RTVEODAxNEM1QTI1RTExOUVGRjc5OUE4MjA1MzAzNUJGREI4QjA1RjZDMTI1QjFEQkRENEU3QjM5M0M2ODRGQjVECisxNTE6IDU4ODA4RDA0MDY3RkFENzJCQkVFRTRGNkEzNTVFODBBMkZGNzZFREJCNTM2NkNBNDNGRjM1OEE4NDJGQkZBMkY5RTFBRjVGRjI2NkJEMkUyREFCMUQyODZBRjVCQkY5MgorMTUyOiA0QTU0ODAzMTA5M0FCQTczMEQ4RDk5QTJDMUM2RUMyQTk4NkE5NDE2N0NGOEMxRUJFODNENTJCMzRCQzIwNjhBNEM5NTY2NTk4OEZBOTNGNTI0NkQwRkJBQ0RGODVGRTIKKzE1MzogRUQ5NDk5NjUwMzZGMTZBMEI1ODU2RUE0Q0Y2OUNFREEzNUM2NTNCQjU2RkQwRjBCMzk3RTczRkY0ODg0QjNFNjc5RUNDQjE5QjA3RDZBOTM1MDRFODJBMTYxM0NCODdDCisxNTQ6IERCQTY0NEIyMEIwMUU0QUM1Q0QwQTMyNUNCMDYzRUVGNTNBRDc3RTVBOUU3MDk1QzFCRTBFQjBFNkI3Q0ZFNjBCRjI1RjM4Q0Q1N0YyQUMwNTVEMzI3RUI2QUVDQzdENgorMTU1OiBDRUZENjE2NUY3MEQ5MDE5ODY2Mzc0QUQ3QUY5QzczRjMwNDFCOTMyRDYxQTQxNzM0RTM5QUU4QUE5QzdBNEZCRjFEQ0JBRTlCMkE0RTk3OUM2NDM1MkUzQ0Q0RTFCOTUKKzE1NjogNzMyQzNCNDU3Rjc4REVEODkzOTBCQzQ2MTM4MDc2MEZCRUYzQ0ZDQjlCRjQyQTZDODZFQ0YxMjBDODIxQ0FDNzlENEQ1MUM3MUE5NTUzMDlFMzM3MjQ3NDJGRTJGQTBECisxNTc6IDU0ODAzNTY4QkFFMkRCNEYxNDNDNzhGRjUzQjg1RTZBOUQ0MkVDMzg5NEZDRkIzOUJFRDhFRTYxMUIzNkJCQ0JFRDgzNEQzNjZBMUY3OTdCNjI2REZGM0Q4M0NFOTYzQworMTU4OiAzNUExODU4RTU2N0ZDOEExMUI5MjczN0UzNjkwNjlCMTI1MDJFRDNGNDREQjUwNDM0NTA2RjJFNTQwRkU2NDM2NTVDQkY4MDZDMDZGMTVDRjI0MjhGQjQwOEE2NUMwNEIKKzE1OTogRDFGOUU5MzA0MThEMTAwNDNEMEU4MzA5NkNGNzE3Qjc5QzFDOTIzNEM3NDFDNTk0MzZGNDI3MzdBQzczQkQzOUIzRjRCNkQ2NDM5Mzc1RTBENDQyNjAxMzFCMjVGREU5CisxNjA6IEQ1QjU2QTFBNzBDNDdBM0Y4OEM1MTk2NjgwOTdCNTRDOTg5RTExOUVFOURENUI4QjM0RjBEQkMwOTJGRTcxMDhDOUQzOTZDRkM2MkM5MzIyNTYzRUU3MkEwRTMyNDAxMAorMTYxOiAxNTc4QkI3NkY4N0RCMzA5QTVEM0EyMjI5QTJCMzQ2REUzOUFEQjYyMzgzNkVGMDU2MTM0OEFDQTdFMzE1QzE2QzZFMzEzMjhCQzcwREQwQjBEN0Q5QjdFQ0UwNzZDRTYKKzE2MjogRjhERjRDNzFGMzYyM0VEMDBFREY4RUZDNEUwRUMxNTQ2NDRFMjFFNzhCMDZDOUM1QUNCOTgwNDgwNzMyRTE3RTkyQUNGQTA1OUJERjI5OUJCNkM4MzUxQzZDQzZBRkYyCisxNjM6IDA5MERDRTI1NTk1RDc3NzA3NTNCNzhDNDEwRjEwRTgzMDE0MEIyM0Q3NzlFMEY1MkZDNDUxNTgyQ0RFNzUxMUEzOTA0NTBGOEI2NUQ3QkRBNzdBMThDRDk1RUUzREQzOAorMTY0OiA1RDNBNTZEMjNCRUYxMzI0QjFFQUUzM0I4MjU1RjkwNEY3RERGMTMxNTE3MjAwQTUwNTAzMUQ0MUEyRUMzRjJBQjAzOTEyREVGRjZCQ0VDQkZFRENCOEI5NDhDREFDQTIKKzE2NTogRUY3MTJBQzFFNjg1OUY3MEQwRDJDQUNFN0FFRTEyMEE2NjZERjlGMjEwNTEyRjVDOTRBQTdGQjM4OEYxREREOTEzQTEyRkY5MkNDRDI1Mzc2NzVFQUVDODcwMjAzNDExCisxNjY6IEEwRTY0NDM1MDVCMTkzRDg5NTk1QTUxQkNCRDQ3QTQ2RTFCNUFFQjIzOUQ2OEI4QjE4QTExOUU1QzlFQTFFQjg4NjNCMzczRjkxQjlGMjJGQTk0NEMyOTM2NTQwNkE3OQorMTY3OiBEOTdEQUNCRjgwQkNDNzYzMzVDMTg3REEyOUZGMzNGNkQzNUVBOEE4OTI1NzA5MzIyRUYzQzBGNkZFMzVEMTI4RDlENDIzRjkxMUVFMzFGMUMzOEUxREYzNjA0NkU1MDcKKzE2ODogNjdGRkNGMEE5Rjg4Rjg0QjNFRTg1MDAwQjJERTBCN0RDMTJBMDYxNjBGQ0JCQjU3QkEyOTFEQzA0RTE0QjZEQkIzQ0RCODFBNDBDMkVFMTg1OTk1NkRBRDA5N0MxRUUxCisxNjk6IDdBRTgyMTk2QjQ2REUzRTY5NDhEN0ZCQzczODNBNkYwODA5MDNENkJFNkUzNTc3MDBBODdGODJBOTY0NTgxRDM3NTAwNkRFMzUxNjk0NDZCNDQ3NTM3QjRGMTFDNTcwMgorMTcwOiA1MDJFMEE0Q0YxMjVFQzA2NDBEQzdFNzI2NEQ5RTQ3MzAwODE0QjAwRDQzMjJGMkY2MkJDMUQ1RjFEMEQ3NzE3M0IwRTdDMjg3NENENTlGRDhFMDU2QjhGMzhGNzhEOTkKKzE3MTogNzRGREJDNDUzMjUzNERCRjI0MjMwRUQ1Njc3QTkyMEIxMkUzMjhFM0QwNzMzNjQ0OThEODBGMENFQUZCRUM3NzRFQjUzRjI4RjA5MzRGNzg3QzU2QUI3OTRCNjBCRTMxCisxNzI6IDNDOUJGNUVFQzY1MkY0MEFBMEVDQjgyQTgzNEM4MzZFNDk1RTg0MUQzMzdFMTI5OUFBRkMwNjdBMjA0OUM1NDBBQUJFOTJDQUVBRTAyRjA5OUJDNEQzQTM4M0Q1NDFCNQorMTczOiAxMDVBQzYxRjJENEU1ODZFMzc2NTI0QzQ4OEMzMzUyMUM0RDQ5RDFGOTVCNzUyRDI3RjQ5QUNENzE4MUU4RkJCQ0EyRTBGMEI1NDNFRkMwQ0JEMzJBNUVFRDJDQzA4QTIKKzE3NDogNUNBNDlEOEI1NTRENzBCM0ZDNDY3NjA0NjYxREY4RkE1MUQ5OTg3RjJBNzdCMTNERTQ0RDc4MDlGRTI5NTZEMjE0ODVCMzZGMUQxN0I1OUYyMjYxQjFCNDA1NTNGQkUzCisxNzU6IDFERDA3NUM2OTZEQjlCMDc1MTBBMEQyNzZGOEJBRDEyMjI1RTAwNTE1RDE5RTNCODU1ODNCRjk3Q0Y4MkI1RkUzRjY4NTUwMkY2NEQ5MUY0RkVFRTE4NDhCQ0QwNTAyQgorMTc2OiAxMUEwMThDNEIyMTNCQzY3QzA5MzcwQzhBM0QwQjcyMDQyOEJFNzFDMDFDNkVFOUVGNkM5QzlEQThCMkUxRkJBRUVFNDJGQTQ0RUU1NEQwRjUyNkRDRENEM0MyQkIyRkQKKzE3NzogRTE4OEVDNTE5QzZFMEI4QTg5REU2OEE3NjQ4REFDNkQ5Rjg0RkRBQTY3OEI0MzE3OTRFQjRCRkUwNzc5MDFDOTVGQUUyNUNBM0QzOUQ0OEVBMDI5MkYzRjZDMzVGRjczCisxNzg6IEZBQkVFMEIwQTAyQkE2MjI5MzFBNUVCODJDRDYzNjU2QjQ3QTIwRDNDMEU3MDNENUE2OUFGREI5MkMwQTdFQzVDRjY5NDREOUQ3QTE0MUMxMjU1RDYwRkY5NTMyQjA4OQorMTc5OiAzQzhFMEJCNTVFMDk5Q0E5RjZFNDM2QkIzQ0EzOUQ1MTFBQjlDRTU2NzQ0NjlERjhCRUE0QTIwMTkzMDg0QUY4NTYxRDUxMzBGREZGQkU2MjE5M0E3MTJEN0MyRDRCNDgKKzE4MDogOTE0QkU4RjBBNTgwODJCODc3QUYwREMwNzdFRDE0NkNDRDgyNDUzMzlBMTcwQjQwOTlCMTQ2NDc2QjBBNTgwNzQ5RDAxRjgzRkI1MjgzNEEwMzNBMzgyMkQxMjA0MUI5CisxODE6IEExQjMxRUNCRjQ1MTU3MTQzN0RFMTAzMzBBNkU5QUI0NDg0NTc2QUFEQzRERUUwQjMxRDlDM0FGRTU5RkM2REUwMjgyNzUxMjZENzg4MkEyQzIyNUVERkU0OTEzMDVFNAorMTgyOiBFNEREMkU4MDVBNUJERTNEQ0QzMjlFRDlEMzVDQUVDMkQ1QTk3MDgyOTY2MTg2MTE4REM0NkJDQTdBRUIxRUY1MkUwQzYwMDdDQTI4MTMxNzkwODM4REQ4QzAwRTk2RkIKKzE4MzogNzg1QjgxQTk3MkRGQzZBNDk4MkUwQkI3NkY5MEYyNkRCQjdCQ0QyRDA2RTg3MjMwNENDRjZBQjJENjM5Q0FEODVGQjI5MTI0QUNFNDExRUE0NzQyNDY4QTY2NjNFQjJBCisxODQ6IEVFQzNDQkI1QUExMjlDNzIwNkEzMkExNzY0ODJDOUJBMjRGRTYwRTcxQjQ2RjdDM0MxMUZFRjhFQjU3NjgyQTM3MzI2ODBFNjU0MUQ1ODc4Q0Q2QTcxNUE0OEQ3NUYxMgorMTg1OiAyNTRFMjc5QjdDNEYxN0I5MTE3MTJCRjcxMzhFMkM2OTMzODE1QkFCMTg2NjFDQjQ3Mzg4RkVFQkRDQ0RGRkZCNkFFOEI0Qjg4MDcyQjkwMDc0NzA0RUI3RUM1Njc4NDMKKzE4NjogOUE4Q0MzRkYwRDk2MzcyMjBDRjJCNEFGQzlBOEE2Q0JBNEQwQUJFQTZBMEJBRUJGMTUxMzgwODQ4RTkyREZFRDhDMEYwRTU3QjZEMDUwOTVFRUFCMEE1OERGQkFFRDEzCisxODc6IDM0OTk2NkUxRDU5QkM5QjMyRTFCRURCMDUwMzU0MTc3ODY4RkMwNzI1N0EzQTE4MDBGMEU3MTFBRDAwQUUzODg3NDZEQjFFNDU5MUUzQUJCQUQ4RjQxOEUxQUU2MjdERAorMTg4OiA4NEVEOTUwQkU1NDc2ODU1NzQ3NUU2QjFBMjU2QzMwRjQ0NEUxMjM0MEMyOTQ4NTgzMjQzOUJCQjlDQkQyMTkwNTBEMTg0NjI0RDYyODI3MjhENEFGQkI5OENFNEJDRDYKKzE4OTogMkE3Q0E0RUYxQTkzNTZFODUzMzI5RDMzNkI2RTdFMDMzRjJDQTEzNjc3QkVBNjdDQTY2OUVCN0M3OERCRERFNjdGOUU3RDkwOTlDNjhGMzRFMDdCOTZERTQxNTVBRkYyCisxOTA6IDdDNzAyMEIwNTI4RjFCM0Y3NkJBMjU4ODM2QTg5QkQyNzQyOTExMEYwQUI3MzBGRDc0MUZFOUVBMjcxNEFGODI3RTcxQjczMUFGRDUzQTI5MzMyODc4ODI5MkFDRkUyMworMTkxOiA5MTQwMEFCQzA4OUY4ODg4RENCMjI4ODBCODdBMzgwRkVGREFGODFGMjM3RDQyNEYwNTdFNUM0QzhFM0M4RUU0RTQyMzkzMEMxRDNEOUUxNjE5OUVEODI5OTZCRTQyMzIKKzE5MjogNDEyOTc5RTEzQjNEMTQzMjcwQkI0MUZFQkMxMjE5NkI5ODFFOTlCRkQ2Njg3Qjc4MDgxMkY0MDlDNzhBNUUyREI3QUU4Mjg5OTRCNjBEMjZDQTRBMUY3QTNBNDRDNjRCCisxOTM6IDAyQkRENDE3ODUyRDlCMDNBMzczMzg1NDlERkI2RDc2NUVDNENGRTRDMjM4NTAwMjg0OEJBNEQ0NkY4ODA1M0ZBRDJBMzlERkY2MTVFQ0ZBRTBENDFGMDJFNTg3NzI1MQorMTk0OiA3Nzg0NUJBMjIxMDk3MUUzNjJEQzExN0IxQkIxM0Q3REZCQTYyRjgxRUVFQzcwNjhEM0NCOUNEMDkzREY1MzU0NDhDQzM1N0FEQkYwQzIzOTQzNTFFRkIwN0MzRTdERTcKKzE5NTogMEY0M0FBMTczOTM1OUMxNEJDNTcwMjMyMkYxOTNBRjg5MzM1ODg3RjkxNzUyODk5MzNCMkJCM0YwMEE3NzdEMUQxREE3NEY1RDQ1RkM0M0FBOTBDOUZGQkIwQ0Q1ODBFCisxOTY6IEQxRDlBN0I5OTVCOUJGRjA5MjUyNTY2RDIwNzkxMjFBQjEyQjBBNUVEMDYwMTQ5OTQ0NjRGQTFBQTE4Q0IxQkQ4RTdENUUwN0UxQzcxRTJFRUQ5Q0YwODFBNTM3RjI4QgorMTk3OiA2N0RGRkU4QTE2OEI3NDA4QjdEREJEMTBCREYxNEY0RjIyNDRGQzkwNERFQzU4NTBGNUQ4MzAyRkUzNUFEMTc1MkJBRDJERTUwNDQ5RjlDMTIxODJBMkFBQjhGQkM5RjYKKzE5ODogMDMwQjVFODMzRjZEODcwM0JEMEM1RTM2MzU0Mzg3QUY4MzNGNDY2QUM4MTJENEUxRkFCNkNEQ0QzMTQ2RkZFM0IwRTU2NzIyRDY3MUZCODVFQUIyMkNBNUNCMDMwOUJCCisxOTk6IENCOTkyQjM3ODVFNTFFRjNBMzJERTg4MDczNTg2REIwNDVGMzU2RjE4QTA5MzI5RTgyOTQzRTI5QTEyQjJEMTQ5MEIzODZEOENFQkY3RDkwRkI0OTI5NjY5ODlBNzNCRQorMjAwOiBBMUQzMzdEMzYzQTBCRDhBMEYyMzQyMzUxNTE5QzYyMzE4QTEyMEZBRjg4RjlCOTAzMzA4NDVEQTY4MjI2MUM2NDYyN0I2N0QyRjUzM0ZDNDhEMkJFMzk0REY4RjRGNjEKKzIwMTogMzE5REY2MzI2MTYwQzcyNzdBM0QzQzY1OTk1QkZCNzI5QTY5QjcxQjQwQzE0OURCMTI0MUMwQjIzNzZCNDIwNTgzN0I1NzcwODA1Qzg2MTA0Njc3OTE3RUU1RTU5MTJDCisyMDI6IEVCQUJFM0JDQUQ4MjhBOUEzRDVFRTA1QzVFQkE5NjA1QTY3RTFBQ0U3M0FFNjlGMjBCRjQzNUMzQTE0QUM2M0U0M0I2MTAyMUNERjNGQzIyNDVBMTRGQzE0QTdBQjMyQgorMjAzOiAxNzIzRDg0NEMwNTU4RDU4RUIzRUVFMzI4NkM0OEMxMzNDNUY2QzFEOENBNTEyRjJCQUYxRkFENzg4NEQ0RkQ1QzMwMDBBNjc1NkREMUUzNEU4M0REMDY2QUQyQkVCRTIKKzIwNDogQjA0OEJFRDE4OEJGRkI4RkYxQjE0Q0FBMEJBQ0U4MjYwNUFFQjFDNjY2MjgzRkI3QTZGREYyMTY3NDJGOUY2NEE4OUM1MEI5ODUyQjgxMTlCNUZBRUZFNjQ2MTVDMjQxCisyMDU6IDdGQzZFODYzM0NCOUIxNkY1NTNFQ0EzQzc1QzBDMEY3QjYxMDAxMDg1M0VGQzk0QUMzMzBEMzY5NzdFQTg3MjJCOTcwREMyNjRENUZDNEQ2OUYzOTEwNUU3QUEwRUUzQworMjA2OiBCQkM2RjBFMDE1OEI2REQ1NDlDNUJBREUwRkRGRTQxNTc0N0YxRkEyRDJBODVDQzlEQjc1OEYzNDk5OEZCQzhDOEQ5OUQ1NzNDRDk0OEVDNzY4NTQwQjM2M0Q2N0M0RjAKKzIwNzogNTA3M0ZBOUUxNjJCRTc3M0FGNUJBMUNFNUU2RkMyMUYyRjBGOTAyQzgwRjA5QkJDM0FFQ0FBNkNCMTg2N0RBRTREQzAxMUQxREI5ODc2NDI5NDlFODA5NTkwOUNCOTg0CisyMDg6IEE2NDFCQjBFMUQyMEQ1REIwQzVDQjMzRDM1QjczRUQ4MzIxNkYyRjVEREQ1MjM0QTBCQUEzQjIwOUEzOUUwMTVCNzI0NUM0MEY5RjM3MkU2MThFQzczNDUwNDg3QjU0QworMjA5OiA5NDg4MDZCNzMzNUVEQ0M3QzRCQkU3NTE4NDRERjU3MTc0NTdCMjIzQzdBM0I4MUI1N0FCM0E5NDlEMEE3MjZCQUFDRkJBMjI4QkY2QzJDRjk0RTk0MkY5QjJGMUE3QUEKKzIxMDogMDQ1MUNENUVFQTIwNkQ1MEE3ODk3RjQ5NUQ2NDg0MjVDQTMzMzE1OEMxMjZDNERCQTQ0QURDMDY0NDdBNTFEM0M3QkYyRDREODE3Nzk1MzVDQUUyOTc5MkM3RkU1NjUwCisyMTE6IEI0MjI3RkVFMEEzMjAwOUQ2MEM5QzMwMDMzQzEyQjcxNDNENEM3QTFDMjVGMzlGM0U0QTA3NkJDNDk0Mzk5MkFEMjk5REVCMkMxNUUyN0RGODY3QkY5NDhEQTI3QzAwOQorMjEyOiBEQUFFQTE4RkE0MzNDRjNFMTE3RjJENDMzMDMxMzlEM0YxRDhDM0JCOEFFOEVGQjMwQjQ0QjlENUQ0QkQ0RTU1M0I5QjZFQjkwMTlDQzRFMUFFNUQwREJCNkMyM0ExMDIKKzIxMzogNDQzNEM4MThCQ0NGRDkyMTg5QTNBNDY2RDI3NTdBRTI2NTVCRjBENkNEOTU0NzA2Qzg1MjIwQTMzQjk1QjE4NEVCNTYwRkYzQ0REQ0M0REY1NTdFNDI3RTYwRjlGQkZDCisyMTQ6IDZBQTNCNDRGQTUwN0I2RDcwNEE2NkI0RDdGMjZDQkFBQjJCNDAwQzZCRTBBOEI2MUI1MEVFNjE3QTE2QzJDMDlDQjM2RTcyRkMzMDlDNkU0REIyNDk2MUIxNzg1Q0UzQgorMjE1OiA2M0FFOUMwMkI5NkI0QkM0NTZGRTVDQjlCQTM1MzY2REQ2OUU3OERDOUNFRUMzNzZDNjc4MDcwMzg4M0Q2MDkzMzNENDVDQTU3N0E5ODJBMTc3NTE1Njc0Qjk3NUI2NTgKKzIxNjogM0I1REQ0Q0NCRThDREYzMjAwOUNFMjlGRUU0RjZFQzdDQ0IxNDcxQTNGOEU5QkM5QTM1RThDQzM3RjZDNTY5NTdCNzU3REE0QzMyMDRGOTAxNDk3N0I5M0Y5RTMwRENCCisyMTc6IDA0QTY1MjhDREU2QkI5RjQyNTEzMkNDRDRBRUExRUM2Q0VBNDgyMjQ5RTVGMzc4MkIwMDBGQjA3MUE0RUIyNDM0NTk3QTdGQ0UyQTM2NEE5QkM5RTA2NDNBODQwM0RERAorMjE4OiA2OTI3NUNBMUY5RjEwMjkyNTE2NUE1NjhDMUYxNTJEMjVERjg4MjBBNkYzNDU5NUM0MzU5MTU5MDcwMDUyRkVEMjYwQzU1RkZGQUVBMjExNkFFRTdBNjNEREJBQTAxNjAKKzIxOTogNTg0Njk3QzIzQzYzOTA0NzA5QkVBODlGMDU1QUM1OTJERjQ4MDM0RjkwOEM5RjA2QzcwNkE1MUMzRjZCRTVGMEYyQTVCOTUzQUMyMTE5RkJDMDg1NUI3ODUzMjZDMDZECisyMjA6IDA0MjIxRjBBNkM0Nzk5RjlDRUEzQzFEOUU2NUI5Rjc3Rjc3QzYxM0ZEMTE0MTM1REIwMTlEOEM0OTdCODg5OTUxM0FBNEI0OTlFNzIwQ0MxMUFFQ0FERDFBQzA3MURCQworMjIxOiBDN0I4Nzg2MTNDMkYyRUQxMEM4RUE0MTM5NzBCMTI0ODM4RjExRjA0MTRBRUM4OUEzODI1RERDNTg4NjI5QTgwNDlFODJCNDYxQTIzRjI1QzRGOTNFNUJEMTFDMTg0QUMKKzIyMjogMTg5MUU3QTUxNzY4RTA1QkIxRDAzQTFFQzFCODQ0QzdDOEVGNzdDNDMzRjcwMDE3NTk5OEIyRDhFMkVFRUVDNDYxOEYwMDAwMzc5M0M1ODczNjU1RTA5MzA0OEI2NzRFCisyMjM6IEFERDJCODE0NjZCQzcyN0FDODVEQkUyNThCNTY2QzREQjU2RjZGN0Q4MUQ3QTRFNDNGODZDMTI1RjJBQjJFMDhDNjQ4RTYyOEI5Q0ZFNDQwRjhCQzA2RkQ1RDg2MUQzQworMjI0OiBCMzY4NEJFQkE4NkQyNzU3NDVDRUFGMDkyMjQ3M0NBNTgxQ0VCNzM3MUM1NzQ3RUI4N0I0MDc0NjgwMDZCQTUwRDY5RjlCRDhCQjdGMjE0MTg1Q0QwRDBDNTQ4QzU0MzIKKzIyNTogMEM3ODM4ODJGQzgyNjkxNzYxOUMwN0ZEMDNGRkM0NkRFNkNEODdCREZBODdGMUZCODcyOTg5NDg5QzMyRkU3NEU4QzU2NjA3NDhFMUU4RTlBRTE5QzY4QjA3NUIwRUJBCisyMjY6IERGNTI1NTNCNEY3QkQxNDg1NzRCQjQ3RjYxQkY4RjdCMkZEQkU1QjY5NjNFMjlDRDU1OUYyMzZCQUFGQzNERkQ2QTdFQjVFQzk5NjhFMEMyQjNBNDUzRjk4MkYxNkFBQworMjI3OiA0NTEwMjY3MTQ0MEIwNDAyN0IxRjk5NjZDMTAxM0FBMzUxQ0FBM0YzQ0Y0MkM0RDk4RjVCMkQwMzBGRjM3ODM2RTlGNTg2NTQyMUQ3REM4QjAzNzY0NEZFNTNDNkIyODAKKzIyODogMjQ3Mzk2QkY2MEMwRkJBMjdCMjQ1Q0ZDQTA2MUQxRjZFQzUwQ0I4N0NFRTU0RThDNEE3MTg2QTA3NzQ1RDI1NUU0RUY5NDU3QzBBMzI5QUM5RTNGQzkxM0RGODZBNENBCisyMjk6IEFDQzU5OThDNDY0QTI2QzE3MTlFOUIxN0UxQjhGNUUzNjU3RkYwMzY0QzQ2RkU4NzE1NERDRDFDOTVBODQ3MzQyMTREMkI4MUNFQThEREJBNTAxOTc1MjgxRUY0RUE5RAorMjMwOiAxNjNGNUFFMzg1NTAwQzFBNkVBMjEyRDY5MjVFNDhDRTIxODlEQjFERDQ3RjdGMkQyRDg4OTI3MkQxNzQ0OUExQzMzRUIzOTcwQTU5ODJFRjJGRTVGMTI1NTM2N0MzM0UKKzIzMTogRThCQkZGMkM1Q0RBODhDQjYwQkVBREI4RDA0Qjg4Nzk1QjBDQ0Q4OTA1N0NFRkYxRkY1ODhBMTY5MzYzQUQ0NTM1NjRGRTc1MjhEMUZCNzE0ODg0NTM2M0MzRTE3ODI0CisyMzI6IDVGODY3MUI3QzYyQTVFRTk3MTdGRjgwRUMyQUEwQTAzRTU1N0EyODQwQzBGRDBCNTkwMjdBRkM4MzRDMDUxQ0M5QjdCRUZGREVFMzQ3ODE2NURCOUNBMzAzRTJEODc0QworMjMzOiBFMEU0REUyMjk5M0U0QTZCNDg4NDE2M0M2NzhBMjNBRDYzNDlEQ0Q0QzE2QjkwNDFEMDFGOEIzRkFCMUU4RDhCMDdEQTc4QkZFQjU3RjhDMjM1QzE3M0IyRDIzOEM0QjcKKzIzNDogQUQ2RjU4QkZBMTVGRDBERjExOTExNzFGODZGMkI0Qzg3MjlGRTQwNzEyOEFEQjRGQUMzNDA0RTE1QzA0NzUyRjJBNEI1RjRCREQ0ODgzNzhDNTZGRjhEODVBMzhFNTgzCisyMzU6IDkwQzVBNzU2NDJBMTgxMUQ4RkMxRUNCODRBRjQ5MDRDNkQ5RTYxMzM1M0MxQjlFRDBGQ0EzN0QyMDk3NENDMjQyNTA1MkUyMzAwNzM4ODI0QkVDRkRCOTgxQUZGMDZGRAorMjM2OiBFRjczQTlFNkQyM0NFNDM1MDg0MDAxNjNDRTZGM0U4RjcwNzZDRUZCOTRFNTQ5RUI2MTE2QzI1NTdGNzQwRDY2QTE3MjdBRDUxQ0E2NDVBN0Y5MDIyOTEyMDU4RkQyNjIKKzIzNzogOTlGQTQyNEU0MTNBNTdEQjJCMUI4NTEwOThGQUIxQjZEMzMzN0FDN0ZBODU3MDkxMjFGMEJCREFGQjNFRTI5MUY0NDA5MkVBN0VCMjhFOUJGMEVBMDY5MUFBNTMxQkZDCisyMzg6IEExRTBBMDg4QTI3OUU3NTBDRUM0MjlEMEFFMzIwQjYzOEVDQkY5RUUzODdDNjVDNjZEMjIzMUM4ODREODQ0RENENDM4RDRENEUwNTJCOEQ3Njk5OEE0NDRFMDY2NjYyOQorMjM5OiAwNjU3RkJBMEU3QTczRjc1MjU1MDUyMzUxMjBDNDRBQUM2RDM3Q0U5NzRGRjIzRjUyODcyRDZBREE1MERBMDIyRDQxN0Q4REFFNDBFODAzMzY4NDZFOENFMjExRDVBQzUKKzI0MDogQTcyRUQ3OTE3RjBGOUQwREQ4ODhEQUIxMEFGOTA5MUEzODBGNTE4RDVEQUZDMDA1RDFFQkYwMDEzRjU3QTc0NTJBRUJBOTg5MTNGNTA5NTA5QTAyNjY1RjMzMkVFMjU1CisyNDE6IDc0Q0M5NTlEQzZDRkIzMUNGQkJFOUNFOEFCRjMyRDE2MjlFMEY1NzhGOTE5OUI5QTJFOTA4ODlBMkYwMzI5MTk5MjMxNDJBQjMyRTFERUUwQTUzQURBRkFFRkUwRUJGMgorMjQyOiA5RTRENDYzRDJFM0RDMkI5OENCQTQwRUY4NEIwMjJBNzZEMDE5MjZEOERFNkFDMDVGOTk1QzA3QzVGMDdEMDE3NDJDNTQxMEIyNDAyNDA0NTkyODBEN0QyNzhFOEJGRUMKKzI0MzogMEQ3NEM0MjdFRTY1NEU0NzkwQzcxMTgyNzI5OThDMTMxMzM3RDBEMDU1NUI2OEY0ODhBQzdDQjhERTNDRkI0NjFCMDI0OEU3ODM0MEQ3NEI4MjhDODBDQTI4QURGNDc4CisyNDQ6IDk1MkYyNzRFQ0JDNjZCNjhFQTc0Q0M4NTM0QTVEN0VEQjIxOUI3NTVDOTEyNjZFNUE3NzlFQzIyRjUyREQyRUZBOUM0NDdERDMxMUU3MUM5MEUxNDE5QjRCMkYzREFFMAorMjQ1OiBCODQ1QjBBNTZBRkVDMkZCMzk5NTU5RkE3N0M0ODM1RDJCQzRDM0Y4RDYyQkVCMUM0NTQ2MkJBQzY2MUQyRTU1M0I0M0QwQTg2MDczRjBCQTVBQjg1QjEyOUVEMjBCMUMKKzI0NjogRTY1QjkzMUUyNTEwMTIyNEE2OTMzRkFBRTdERkNGMjJGRTg0NzU5OTM3RjVGM0JEQUE5MEQ5QzhFOEVDRDBCRkExNzc3Qjk5QTc3RTMyMzJFMzg5MTdGOTQzMkNDQkZDCisyNDc6IDRGNjlGRTJDQjk3RTkyMzNCQzg3M0QxNTNFRDlENjFCODhDMjBGQTMzM0JENDEzN0E1MzJGNEY3MDNBMzIzRkFDNkY4Njc1RDhCNDRFRjVGQUQyMzE0ODk0RjdENjBCNgorMjQ4OiBCMzZGNDNBNkREMjkxN0ExQUEwQzZCNTY2NTk5QzI3NDcwMUJERjAzQTVCN0RDNjVFNUU5RjBBQ0Y4ODI3ODZGMDc5ODlCMTA2QTUwRDBEODk2MjkxMzZFQTBFMjZFQjEKKzI0OTogOERCN0I4MDYzNUM1M0RBRUY4OTFCNzc3ODUwNDg3RTcyQjY3RjU3NTc2RUIwNUY3MDg3ODZGNzY2NUYxRkRDMkE3OEY0NDE2MzY1NjlEMUU4NDA1OEE0M0YwMjQzQTFBCisyNTA6IDE0QTQzRjE4ODJBRTAyMTRGNTY4MTlGNEFFOTI3NjQ5OUQzOURCNEE0QTkzOTI3NURERENEREQ4MENCNkI3MDk5OUU2MTc4QzRFRjI5NUU2OUE4MDdFRTVGREJGOUFGRAorMjUxOiBFNUFBNDRDRUE2N0YwODIxRDRFQ0JDOTgxRjI1ODgzN0EyNDNGRDkwMTY1M0Q0ODRCRTVDMjRFQjdGMDhFMEJGMzM1MjVFRTNEREY5QTg5RTEyNjNBODUzNDg1QjVBMDIKKzI1MjogMDE5MUYwNTA1Q0U1NTEyRkEwODUwMEJEQzA5MDU3MEYwQzQzMDE2MTU5NTg5NDUyOEZFN0FFNURBRDg3MjZFMTEwQjA2NzYxODFBMjI4QTdBOTBFMjFCN0IwNTUzNjFBCisyNTM6IDc2RkExMjMwOTcyRTc3MTY2MTQ4NTU0NkQ2Q0U1NTZGQ0RBMjNCNkRDMEZGRTk0REQzQkY3RkYxM0ZFOUI0NkRDQkM4RDhGRkM2MTdGMzU2ODc5MDNCOTcyRkE3RUE0MworMjU0OiBGRTI4MEUxMTkxRDIxQ0FFMTJFQTNCNTNENzdFMDNFQTREOTYxMDhEMzU1NTVDQkZBOUIxNTYyNTNBMDExRUQ5MUI4NTdCODJENjQ0QkI5NEJBQzhFNEZDNEUwMTQyQjUKKzI1NTogQkVEREMzQzBFMTY4QTRCMTRCMDIzREZDMUFFMDdCRTlBNDE4Njc4NDk0QzIzOTk2OTVFQTlCMTc4NDNEMzczMDc3QTcwOEY4QzgyRjM3NjU3QkRDMTAxOTUwRkVENjY0CisyNTY6IEFBNUQ3RUExMTI2QkYxNkRBMjg5N0FFMDM2RTk0RDFGOTY4NzVBRDMwNkIxOTkxMEVGRTNGMTdCN0E5OEY5QTQxNjNFNDAzMkVGRDE3RERCRjc4RkUzMzIxMDQ3NTA5QworCitITUFDLXNoYTUxMgorICAwOiBEMjlCOUUzRjg3ODA5Njg2RjM0MTA5RkJDNzE4RDZBQkJCMDlDMjc4Q0YwNUEyMDZBREYyMTQ2M0UxMTcwMzYyMTIyRTU4MjcyQTMxNjc5NzIwQjI1NENCRDYzQTdDNkQ2OTZCRjkyODNGOUM2ODk3RTdENzkyNDgzQkIwMzg4QworICAxOiA1RUMxOEZDQTIwNzg4MzQ4MjQ0NzIwRDU4RTk1MzJCNEI2OTlFNzhENDhDRjdEN0JERDFBNEU1QzYxQ0QwOUMwNzVFQTdGMTEyREUzNzlGQkU5NTMzMzJDNkE3RDYyNzNCM0Y2MzYwQkMwNzIwM0E1MTc1RkFFNjE4RTRBMkY1NQorICAyOiAyOTNEMjc1RkRENTAyMTcxNjExN0QyQjg1RTZEMzhGOEQ2MEQ0OTg0QkM3M0UyRDhEN0VGNTk0MkNGMTI4N0I2NUMwNjc1RTU2Njc5NDc4NkZFQTE4QUVEMTE5MkEwMjRGQzRCM0UwNTA1RDkxRTFGOTE4MzNCMjEwNTkwQkZERgorICAzOiA4RDlFMjIyRDZCMTZDNThCMzg2MkQ2QkZBNTU2QkRGQzJBNEExNTJCQjI1NzRDMjI5NEQ1MzgxRjZFMzhGQjY4MTUwMEE2QTE5RDU1NTI1QjMzN0E0NjdBMkZDMzBERDE2ODQ4MzJGRkY5MkFEMDcxRUVGMDVCQzRGNDM5OUZFOQorICA0OiA3MUU3MDI4RjhDNENFOUMxRUFFRkU0NTk3NzE1MjhEMjY5OTNFMTgwRTYxNkQ2ODM1NUI5QzYxODE1M0FGRjJDMEU5NjIwQjE1MUM4RjczM0U3MTE4MEVCODdCRDc3M0E1MTJCOTQ1QUEzNTMwMjlBOEY4MDdGQjJBOEZGMjI2NAorICA1OiA1ODlGNDYyRDM3MDk1NjkzRUQwQzFGM0UwRENCODkyQkQxOTA4NkZFMDMzNzE4OTExOTMxNTA5RUY2MTk1QUQxN0M3OTkzOUE4NzY2NTg4OUVGQTZEQzE5QTY5QkVDNkU3MDU4NTMxNTUyODMyQ0NCQkMwNkYxQkVDNzBEMTczNgorICA2OiBEOTRGQzZCREFCMzYxMzI3MTUyMkJBMDVDOTk4QTZEMUM1N0NBRjBFNkVFOTI5NjUxNzYyRjI1N0U3RUVCQzA3RjVDQzdDRDNENDA2NEEyNzU1RTQwOEIzNDc5MzlCMzkyNzQzNDU1NkI0RUQ0OUNBNDA2QzIxRDEwMjRFNkQ4MAorICA3OiA0RDhBODg2QTg5RTlDNjBFREEzQkYwQkM1MTJBMjk1MTk2QzNGNjIwMTg5MzZEREIyNEJFOUY2QUVDN0FBOTUxMUIzM0NCRUM4QTIyMzA5QjYzODk0MTdGNEU3RkIwNDg5OTgxQ0FDRjAzREZFQ0Y3RDlGRTVCOTFENjJCQjcxOQorICA4OiBEMEUwMDk1NUYwRkZGOThBQkU4ODU5NzBFRTQ0RjFCNUQ0QzIzQzIwNUM2NEI2ODEzODFGQTEzQzU0MzEwNkIyQUI0RTc2MkZENzFGNDcwMDhCNEM0MjlDMzlFRDNENjZCM0VBRUE5NDY2NzRGMDg2ODRBQzk5Rjk1N0Y1MDQxNgorICA5OiA0RjYyM0U1MkI1RkEyRDU1NkQyNTc1NEZEMDBCQjg0MjkzNTZGRDc1RkUyRUM1N0VCNEJBNEUyNUNFMDNDNTMzMkQzQTYzMjE3OUM5RkNGRkYxNDBFNkI0NDNBNDI4NUY0QTdDRTg4MUU2RDNFRUM0RkIwREIyNkMwRTJEQ0RDMQorIDEwOiA1MTk2RUU4RDQ0MkU1MzA4RjlEODkxMUM4NzA1MEREM0M0ODQyRDBDRENGNTVBQzU1NDQxMkNGMDk2RURBOTRCRTFBMjUxNzQzQUQ1QkM1RjhBQzkwMkEzOEI2NkQ3RDU3QzkwQzI5MjAwOTg0NTcyRDU3QzA0RjY0MTY2QjgwMworIDExOiBFRjc3MDE5QjBGOTNCMTU5OEUzOEQzQjFCNzAzQjUyNjYwMTkyNTQ3MzUzRTdGQ0Q1QTdDODUyNURCQjUxNjk3MEQzQTZGMkE5NDcyOUQ5MEE1QTM0Q0VBMjU1RjMxMEMxRjQ2NTQ2QzJBMDg5NzVBRjQ3N0RBMkYzNjg5RjE3RQorIDEyOiAwQTc3NTMxRDcwODEwOTVBQzBEMEFERjJCMzc5RDNGODIwREQyMENEODk2MTA5MTdFMjg3RkY1N0JDQTVERUFCQTc1MEUxRTA3NURBQUNBOUNDNEREQzc0NzMyRTZGN0JDQ0NEMzY3MUI2REQyNzUwM0NBODU1RUFDQzYzRkZCMQorIDEzOiBGMUUwNEIxRjdCMDlEQTI3MEE0NEI2MkRCQUQyRkMwMTYwQkExRDE0NEQ3NzIxMDEwRDc3RUQyNTBBMDA5ODY5MzJDQjY2NTJEOTVCNEE5Nzc0OTRGMTFBRjdFN0ZDODJBNzBERkRBQ0ZBMTEyMzJENjUzQjFBMDUyODIwMTg1QQorIDE0OiA3QkUxODU1NTUwQTQ5RkY2NkQ2RDM5NURBN0RFQkRFQUY2NzRGMUFCMTkyREY4MkQ3NEY2QkFFODA4OEY4M0VGMTQ3MUY0MTNDRTAwQTQwNDQ4NjIxM0U0MUI0MkNGNkM0RjdGRjFCRkExN0ExRTI4OTI4QjcxNzlGMEE5NjZFRQorIDE1OiBERkYyQ0RFODg1NkQ4MTE0OTRGNTU5RTlGNDE1OTA2NUE1MEIxRTgyOTYxNjI4RTk1RjA0RDU5NUY2NzAyNDlBMkI3MUMyNjI1Q0MxQ0MyQjFGODU4MjkyNTVEQTAwN0YwMzc0MzYzRUI3NDlFOTM1QkI3MkJEQTI0QjhBM0Y3MAorIDE2OiBEMkY3RkU1N0Q5NTgzRUMxQUE3MzM0MDM1MjdERkJCMTE4REZFMDdCMkE2MEM0MzAzOUZCMjM4QTcyMDVBMDUzRTA0OTZBRDBGM0MxODk2MDkwQUVBQjMwODgyODNDOEZBRjI3MkQxRDUzQjVGOUY4ODI4MUUwQTUzRkU3RjhEQgorIDE3OiA5NjNGNjI5RUQ4RjBFN0Q2RDRDQTREQzhBOEI1N0M4MjVGNzI2MzgwRDBCQTlBOTg1NzQ1OTQ5MUJBODJGNjRBOTI5RUM0QUJGQ0Y3OTM3NENBNjhCQTgxMkUzQTgzQTY0M0QwNTQ1NEUxNDZFOUY0MTAzRDE3RTIwQjgzNTBGNQorIDE4OiAxRkRBRTY5Q0E0QTlGQUFDRERGMzBBNTZCMjNGMTQ3NjhFQjdENTYxNkY2NjY2QjZGMDFGRTVFMjE2ODI1Q0Q0MjAxQTY5Q0UzRDJEMUQyQzNEMDMyNDZCQTdEMzJBRENBQUE0QTdEMDNCOUFFNkFGNENGQkI0NzRFMTcxN0JDQQorIDE5OiAyNTMyRTk4QjZEOTFEOEQ2NThCQzFBMUZFNDFBQzcxOUQ2NDhENDdCQUNCNDIzQzAzMUE4RTJFOUMyNUNDNjY1MEQzRTVERjgwNDZCQzM1MzI4NzVGMEM4REFEQjM4QUE5MTFGMjE2RTY3NDFFOUZBRDcwMEQzMTI2OUVFNUQ0NgorIDIwOiBDODFFNkU5RjRCNzVBNEVCMkI5MDNDNERFMjhDQzQzN0NEODdCRjc4OUY2QkU2MEVGNTIxNDkxQ0M3RTQ0QUYyNkU5RUZBQzU1OTYxMTM1Rjc5QjM1OTFGNUY3QjkyRUNEQzk5MTc2NDFCREMzNDk0M0M2NzU5QUFEOTQzNzQ5OAorIDIxOiBDMEMyQjk0NzhGOTU2ODAwQjY0RkE0MDhCQjBFMDc3RkVGNDhERTRCMTQ2OTI2QjNDNTc3QzAwNjg4ODI5RkZBNjU0MEFEN0MyMTFBODA3Mjg2QzU0NkY3RDE0NkY5NTk4OUU3N0I2MkY1RTE0RDYyRkUwQzc3Qzg1RkNCNkNDMworIDIyOiA5ODBEMDZDMUIyN0VCMkVCMTUwNjk1NjZCRDFCRDgzOEZEM0RBNDUzNzUxQkVDNTY0QzA1OTQxQzlCRkI5RUU4NDQzRUVDRjg0Q0JGOEFBN0RFQ0FBMjk0QzdEMUEzRkE0QTM5QzIwQTQ2NTlERjMzMkNBRkZDQjI4NjNBNzY5QgorIDIzOiA3MEZCMTBFNDgyQUQxOTQ0N0NGQUYxMEVCOUZDRkVFNjdGOURGNzE2NEIyNjQ3RjE5Q0IyMjBFN0Q4M0JGODkyQUI3QjVDNUFCQjczQjc3OTUyMjAxMkJGRDQ2NEQ5RDFCMThDMzdDM0Y2Q0I3MEVDNDEwNkZBOTRGOENFRkVDQworIDI0OiA3QUIxOUJGNjczODAwMTJEM0E1M0I5M0FDMTVFMzUzRDQ3N0ZERDFFMkU4ODUxQ0Q1QUI1RjM2RUEwQzhCMTI4RDMxOTM5MzRGODM3RDIzRDIzMkY0NDAwOUFDNjBEREQzNThBRkM4RDNBMjAxQkVEM0VBRUVGNzRDMDM2MTdBMAorIDI1OiBBQUZDMTIyN0FDNDJDQzI3QkJGNzhGRTI2QjNGQUNCQjdCMTUzNjA4OTFDOEVBQThDNzM3QUQ0MkMwMDk3MUQwMkIzQTA3Q0E3NTE3NzREMDJGNDAyRjdFNzZCRTA4RTJDMTI0MUVCNjYyNDJEQjVFMTFCMzQyQzIyQUFCOUZFQgorIDI2OiBEOENDM0JFNUI0OEM3QkVFODUyMkJEODg3MjQxOTkzMjkwN0I3ODM5MkI3RjI1NDY3ODg0NzdDODU4RDBDN0JENzcyOTg1QzBCMEQyMDJBQjdFNjlBQjVGNEUxQTBCQzg0OEE1MTJGREQ3OUVDMjlGMTlCQzRCQTZEMjhERUIwNworIDI3OiA2MTMzRDgzNkQ2OEM4MjY1OEY2MjYzRjc5NDA3M0NBRDkwMjlGMjBDQzExRDBBNkNGNTg5MzM1QjAyM0NGRDY2RDcwOEYwOTEzNjU0NkM2QzA4NzY5MTM5MzYzQUU1Q0I0Q0MyQ0M4NkVDNjkxMTIzN0FDQkZEOEIwNDIzRTM3NworIDI4OiA4MzNEQUM5Q0ZGQkQ2MkZGMDc0OTM5MUE0MjMyNEUyODQ4NjcwOTEzODkwNzU0RTI0RUNDMjlENDczOEFGMDBBNzgxMzQ2NjBBMjAwNzhGRTU5QzY2MTEzNzg3RjRBM0U2QzBFNzgzNzQwQjJGMkIyQkM4RDM2RkU0RURFMzlFRAorIDI5OiBBMkYzQkMwREYwNTg1MDY4MDVEQ0Y1Q0MzMDA2Q0M0RkM0MDg1RkQ4NDZDN0E3QTdERDNBMDZDRDZERjYzNTM1OUY0RkJFOTBBNjc2REFCRDdGOUFBRjQyNTc3QzhFM0IwN0I2M0I5Q0VDOEE5QUQwNUIzOEQxNkY1NjIxNEU4RgorIDMwOiBBNDlDM0JCNDg3QzU2MUU1QUFEQTRGQkEyRDlGNUI0MjY4MTQ4NkFFMkRGNTYwODdERDY1QjNENUUwM0M2MjVGNzA5Mjk5Qzg0QzY0QTY4RDg3QzkyQTRDQzkwMjQ2RDYwOEU2OTJEMUZGQ0UyQzA5OTM0OENEMEExOTQwN0MyQgorIDMxOiBDOEQ3QjdBN0ZGQUVERTg4OTYzQjA5QTA5RUNDQ0I0Q0FFNzdERjlEOEQyNDJCQTE5RjY0ODVCQzc3NzUzMDhFNUQxMUM3OEZFOUM0NkU2MDlGM0FGMDcwRjNEQThFRDkyOUMxMDNEQTFGMjVCRTc4NjdGRDREM0U0RjI3NTdDOQorIDMyOiBBRDQ2MjdBRkIwMkRFQ0ZGOTU2RTYxMjUzN0YwMTFFODJDQjBDMjAyQTVBMTFBQjdBRkY1NUEyMDEwMTZDMDJDRDIxRUZCNEVCMTk3QkMyRDEzRDI3MkM2QTgzMEZENzdGNTM0RTgwMEIwQUYxRTc5RkNGQjYyNkVENkEwRDZCOAorIDMzOiA4RDRFMjMyRDk2MTRFQTExOTRFNjA3NDg0OTZDRkQzMkE0QUMyNDlCQjhGMDhFNTVBN0M5REZEQTcwOERFOTBEMDY3RkM0MzNFQjlEQTJBNjgzM0Q0M0JCQThFOERCRjMxMTM3QTNDOUIyNjkwMzA2MEVGOTIxNzQ3MUU5Rjk0NQorIDM0OiA0Q0U1RTQwNTVGMTBGMUQyMTgyQTc4OTJGOTgyMDZEOUExMjBGQkRBMzI1MTAzNkI3RUZFQzgzNUM5NUI0RDFGRTBCRTM4OTJFMjM2MzA4N0QwMTk0OEFBNDI2QUE0MDNBQkUxQ0Q3OUYwQUE4NTFFMkQxMTk1NTExQzdBODVBQworIDM1OiBBQkQ2NUY4RTlBMkIzOUJGRUY2RUZDOUE5RURFRjY1NzI0ODlBRTgyMDM0RUYzQkYyQUU1RjM4MDAyNkZGNENDNDBBRjA5M0YwNDA4NDQ1NzM1QzBFNkVCRUY1RDdFN0VDQzEzQzk4QjU5ODA3QUUwMUZGRTFCQUIwNDBGRDE0RAorIDM2OiBFOEM2ODdEN0FGNzg1QjFFNTQ3MzA3ODc1NjgyQUNEODJGQjU4QTgyNTk1NTFEODFGMzA5QzkyM0MyQjFGQkFGNTkzNUVFMDU5Qjg5MDcwQjg0MjBGNzFFRUUzQkU3QjFFM0I1NUIxOTY4NzJGMDZERDFGQjg5MEY2RkVEMTFDQQorIDM3OiBBMzQ0QkU3M0U2NTg1RTBDQzMxNTI1QkQ2RDRFQzMzNDVENzc4MENGMTgwRDBENUMyRDVGQkRFRENCRUEwNTBBOTU4RkVCMTNDMjE5MjRFMzExRjU3RkQ2QTQ5ODc1NjE0NkFBQzU4NDEyQjk4RTREMkEzQjI5RDlCNzdBOUY1MworIDM4OiBGMEEwODhDQzgxOEY3NkExRkQ2QjVENzA3QjExNEJERTI0MjQ1Q0Q1NUU0ODYxMUFDQzZBQTQ5N0EwQ0VGOTM3Njg1MDFCNUYyODBBQzUxOENFRTQ4QzE1MzczMTE4QkU3QjcyRjhBQkIyRTlGRDM1MjZERDFDMThEOUNCMjU0NQorIDM5OiA0RDU2RDVDOTIyMkJCNzhFMDREQzkzNDZGQTlDNEFEQzI3QUUwOERBM0UzNEY0OTBBMTNGNjc0MjY0ODk2RTU4RjlFOTgzOTcxNUY2MzNDNzE5NUI0MERGNzIyNDQxMjc1Qzg0QUVGMTYyQjUxM0U2NzM4MDlGNzg3NEU3QTEyNAorIDQwOiBDNEIzQzlFODE0MEYwRDU1ODlFMzI2OTE2NDYyMzU0ODI3RTQ5MUYzNDQ0RTBDMzYxNTEyRTZFNzYxRjVFMjRBRTE4NzNCMjM4QjczRjMyRjZCRjhGMUQxRDhGRjk0MzdBMDFEQUNDQjc0OTI4MkU3NzZGRjY2MTUxQTRGN0UxOQorIDQxOiA3QjRFMDdCQUYzMzhERjY0NzlFMTY5RUI2Q0M2NENGRjg4MTY3OTU4RDQ0QzVDQjY2MDY5NjRCN0Y5RUNGNUYzRjFCMUY2OTVDNjNGMkJENjYzNTQ3MjJGODFFRTRCQzkwQjlGQ0Y1MzQ1NjQyRTI2NEM2NkY2OTUwQ0M4QzQ4MQorIDQyOiA4NTcxQThGNzZBMUQ1REFBMDkwMEEwM0UyMzZGRTk2NUQwODVCRTYwMzVCN0MwNjAxRUFEMzM4MTA2QkU3REFGQUVDODJGN0MzRDhBRDM0NkZGNzQ5QjZEQUZDNjk5MDFBNjA3MkNBMDg5QjdBNTcyNEM3NUNCMDgxODY0MEY3RAorIDQzOiBERjUxNkQ4NDM5MkU1NzFDM0ZFMzlGNEEwQkE1RDE2RDg2NjU1MzY0NEI0QzQ2MjdEMzUxM0YwQTFDNjBEMjJGQzVBQTQyNzZBNzFDQjM3QkQ2RDZBRDA1QTEyQkY4MTJBMkQ1Mzg4QTYwNjU4M0I3ODM3MkI4NERDNTY3NDMxRQorIDQ0OiA1MzVBRjNDNzNCNDc5QjYxQjhCNzBFNTkwRTMzNURDNEMxRTIyRENBNjU2NDU0MjEzRTFGREQ0NkQwMjZCNkQzNjEzM0JERDM3MkZCRkJCMjdCNkRDQThFNDg3RjRBNTRCREE4QzVGNjdCMzdDODcxNjUzQzY1NkRERTk1MjRFQQorIDQ1OiBEQkZBMjc5NjREQzZBODBGRjc2MTEyRkM2Q0MwMkM4NzgxMURGMUVDQTNBODYyMEE1MDMwQzYwMDU2MTAzMkZDMzc0QTZCMDYwRkVCRTBFRDY3NDIxRDkyMTdEMjcxOUY1QTU1NjIxNzM2RkZGQzZGNEYyNkRENEM2MDQ5RkMwOQorIDQ2OiA2RjY5QkZEMkM2MEFCMTU1NDAyM0E2QTIwOTREMzBDQTc4RDM2NDUwMUY3ODEzQTJDQjczREVBOTRBRDRCOTRBMEVERjNBMzY5OEQ2QTMwQzhBNUU3NjRCODFGNTFDRDBDQUVGMEY5OTZCOEM2ODVBMzQ1QUE2MzBDRDEwNTcwQQorIDQ3OiAyNzY5RERCM0FGM0RENjUwQkMzODFEN0IxMENCQzQzNTM2OTlBMkEzNTJFNTdGQTVENUNDNEZCNjEwRTQ5ODc2N0Y0OTEwNEVEMEY0RTA2RTJCRDU2M0Y3RjgwNDUyMTJGNUI5QzQ5Q0JFMDUwQTE2NjJGMjI2MkJBQzQwNTNDRQorIDQ4OiBFNTAxNjlCMTU3NzIwMTdDRDlGRjkzRDFCNDZBRjI3M0IzNzVBMzlEMTc0RTNCODYyMUVBQzhFRjk2OEJEOTY3RTE0NDhEQzNCMkM3MkE2NjdFRkFFQkYyQjkwRDRFNjY0MDY5OENCODY2MDc1RTk1ODE3NzE5RTBFRTYxREYzMAorIDQ5OiA0MjEyNjQ4RThGOUFDQkRDMTZENDhDRDdCMzU1ODg0RTA4MTdBOTVEQjAzQkQ5QjhBQzVCMjhCRTYzNzFEOEFGODM1NDZEQzgyNTUwQjhCMjNEQzc3RjZEMDYyMTFFM0FGM0IyNTUyOEJFNjg2Q0NBMTY3MkM5MTExN0RGOTc2MgorIDUwOiAzM0M3MUVFQ0RCRTUwM0E2QUY3MkVCQThEMkI5QUE3QUI4RkE4REU1MzZDODc2NDNBQkYxQkMzRURBNTM1QkJBNjRBOEE3RjRCQUM5MEFEQjdEOEM5MjZEQ0FCMUQ3RENFMTVEMzU2QzUwNzRCQjNFQkM3QjE3NTE2NjcxRUM4RgorIDUxOiBDOEVFOUU1N0VGQTg1OURDNTU1M0QwMzQwMkFFODBCODRCMUUwMDMyQ0UzRjJDQUM0M0Y4NDIyQTgwRTNFRjU5MTI2QUU3QUI0ODkzNzM1RjlDOTQ4Q0Q5RkE4NzkzNTcxRTQ1ODI5MDhEQTE5RkM3MjNBOTNDN0MzNkY3OUY5QworIDUyOiA3Q0FCRTBGODNFOTBDRjlBNDk3RENFNDVGMTRGOTkyNkRDNzE0REVFRjA1QTFBMDYwM0Y2NDM2RTEzNEZDN0M4MzQ2QTE5Q0I5MkRDREU2OUQ3OTRCMzhGQjIyMjMzNTc3QkEzOTA1Qzk0QTcwMjA4NDEyMjREQTg4OEI5QkUxRgorIDUzOiBGREMyMDU1NEExNUI3MUJBNjJGODk2RERDNEY4QjM1NEU1RDI0MzRCMEFGNzE5Q0NBN0RDNTZGQkM5QkQyODBCMEY4MDEzNkM0MzM2RDYwNUM3QzI2MjA4NjQ5RjM4QzFERDAwMDRDNkUwRTc4N0E5MUZBQTYwNzUwNTFGRkRDRgorIDU0OiA4NzM4N0Y4OTY0NkI0MDY4MDM4RTAxMUQ3RTAyQzM1M0JENTY0OUY2REExQzRDNDZDRDlGN0Q2OUVCM0EyRjZFRTg0REQ0MkQyNUI2N0JCODE2NjZDRThGOTJBNUIxQTBGM0VBNThENEYwQjVCNkU1OUVERUM4NkI0M0JBMENBNgorIDU1OiA2RDAyMTA0MTc2NzFCNjZENTlCOEYyOENBMEVBRkRCNDkzQzMwQTdENzMyOURGMjkxOTRDNTM4ODdGMDVFREMyQzNGMzU4NTM4OThFRDc3Mzk0Q0NDNjUwRThEMzUwRjY5NTk4RTNBRUYzRERGNTQwREFDQ0VENUJCQ0JBRjZBQQorIDU2OiBGMTQwODUwMzZDNjkzOThCQzdFMENEOEE5RDQ0NTFBMTBCMDgwRTdDRURBNTU4MkVEMzk2RTVENTQ0NDExMjVFQjNFRjZFREU0NTM0RTc4OERGRTZERDNEQUFBMjA0ODE0MDk3OTg3OTgxRUM4QkQ4RTM5RThFOEIzNUFEOEZBQQorIDU3OiBCQTY3RkI0RDdEMTM3NTMxRDNGNENEM0Q5MTk3NTI1NUZDRjhFQUJCRUI5N0VGMEZDN0MyMUM0RTI1RkQwMzQ2NThDNjM4ODFCMEFFQkVFQ0QyQjdEMTUzNTdDMTQ1NDJEMjZFQkEzQUNDQTk0NEVCNEM0RDdFNDRFOTg5OUQ0MgorIDU4OiA0NTQ2NTg1NjY5RTM0M0FENDA3OTIzMDhBQjQ1NkRGNjIzQTZBMjNDQ0JFNjRCMjZCOTUzRDZDNDYxNDYwQkJBN0EzRkI0NDQ0ODFCREIzRjdGQzhENUU4MjVGMjUyN0QyREZGMTkzMzU2Q0IzMTcxQ0ZCQjU2QzY3OUFEMUJCOQorIDU5OiAyMTBGOEFENjhGQ0QxMEJEQjg3NzMxOTRGRTU3RUZGNTY2QzdFNjVCQ0Q4MkJFNjE5NkRFQ0I0MEJGMzk3NzQ2OTFBQzZCQTcxOEU0QjVGRjBERENGMkMwNTEwMTgyQjlBMTE0QzZGMDExN0EwQkIwRTFBRDU4NUM2OUQzOEQwQgorIDYwOiAyOTAwM0EwNDhFQ0FDMDYxM0NGQUU4RUM4NzU3RjVFNUNGODBFOUIwQkJGNTM4RDc0NjA3NjVGRTJENkI1NkQ2MjUxQUJDRkQ0MkI1NkQ2NEI1NkQ4RjIxOTg2OERFQjQyQjk2OEU4OEQzRjNCRTNBMTYxRENCNDNFQTk4MzQ5QQorIDYxOiBBMzA4RjlFMkI2MEQwMDkzQTcyNzhCMDY0NUE0NzE0MDhGNThCNDVCMzY4MzUzMTE3OUYzNDkzMUQwNkExNUY0QTUwMkYyRjdFMURGOEI0NzgzMEY2NTM4N0JCOUYxMDI2NDYwNThBQjQ1NjA0NTI2N0YyREM0MDNBMUQ5QTZERAorIDYyOiBBRDQ4NEREQzI3MEZFNzRFNjg2MjBBRUM4ODJFODYzMjBEMEQwNzUzRTcxM0Q5RDVDOUM3RkVFQjg5NEREM0ZENUZERjQ5OTVEREVGODdCMTEyNkIzNkU5MjYxODMzMTEyNkY1ODUyQUE4QzBENDQ0MDRCRjlGNzdCNzgwNTk1RAorIDYzOiBCNEJBN0IyRjA4QkMwRkM5MDExODhCNTA0OTNGRDE2NUY2NTlEMzIyNjIyN0UyRTk4OTJCRDcwQjAyMzEyQzEyRDE5NUE3M0FFRDNBNDAwOTYxOEU2RTc0Nzk5REIxNThEOUFDMjdGQ0NBOUJDNjgyQjA5RUNGNTNCRDM2OEM0NgorIDY0OiAwQUY2NUVEOTM2NDZBRTgyNkM3OUJCNkU4Q0QxOTNENTI0NkJEMDBCMEJBQkY4NDI1QUNFMDNDODQ1QjlBRUU0MjgwNDVENUY4MjY3RjNFQTg2QzQzM0YxQTlEQkY0QUQxODgzQUYxNjRFQUZFMDJDMDdDRTQzMDc5NjY4QTI0OAorIDY1OiA2NUY4OTlCRTJDNUU5ODc5RjZBM0JGN0I2MEU2MjU5MUI1REM1Mzk4MjgzMjI5RTRGQURCMUVFNzhGRkJGOTYyMjk1QzQyN0JBMEQ1MEJCQ0I5RTJGMUREOTY5NEJEMzZDQTU5OEJBRTdDMkVGMUY0RDA3MDBEQzk1QkI2NkMzNworIDY2OiBGQTlBQ0M0NkYwODQxOTYyRDZERENCRjVENDdCQkVDNDNBMEUxRTlCMkE4RjhCNzk3MEUyRTczQzA2NjEyRkQ5NTA0NEI4QkVCNThDNzFCMTlBRjQxNjlCN0U2NTAwNTAwNDQ1NDkwRjgwRUE0RTMwNUI2QkIwMEM3MTgxODEwRAorIDY3OiBFOUFFQTZFMTJGODgxQTdBRUMzQUFGNDI4QkJGMERBMzEzOEVCRjY5QzZCOEU1MjYyMTYwOUFEMzQwRDY1MzdFNEEwM0UyQjA5OUI3MzVGQTgyQTNEMzAwRjc4MjYwNkVGNTg1OTg2ODNENEFDQjA4NzBENTEzMEI0QjMxNDJGQgorIDY4OiAzNTU4QURCRkQ0MTFEQjg0MzZBMUE4QjQwNDIwRUU5QzI3NEZBMTUzQUVGODkxMjkwRjc5REU1NzE0MTMwQTUwQzcwRUI4N0U4QTkwMUQ1NDBBRENGQzM3RTQwRUY0NDU5MjgyMkY2QURCQkU4RTVDQjRFQzg5OTA5NjMzREQ3QworIDY5OiBBRjM4NTJBMEI0RTg0NkI1OUE0RUFFQjdBN0E0NTEzMTFCMUU4RjU1NDA0MkNFQjJEMjUzRjEwRkNCMzA2N0Y5Q0E5MjdDN0RBM0U1N0JDOUM5OUU0RTc5OTc4NTZCMzVEQUIwNjQ1QzE5NEFFOUYxRkEwQTkyQkMyMThDQzlCQworIDcwOiA2QkQ5MEYwRjhGRkEzOUMyQTQ4M0U4MzQ5RDJBMjlBOTZBQTdGM0NCNEI0QzEzMjVGRTUxNjI5ODhDOURFRTg0OUI4RTU2QkYxNDIzQjY5MDVFRDNGQzZBODJBMDY3Rjg1MDM3MjQxNEUyQTRBN0U1Q0EzNzlBQjgwRjFDNEYyMworIDcxOiA2NDMzODg1QThBMzlGMkU0Q0JCMzYxOTFBMDM4RUMzRTMyMjdCREREQUVBRTI0RkQzOTY0ODEzMzJBOUFEN0JFQ0NDNEU5QkRFQTBDOEE3RjMzMTgwRUNCMUVDMURCNDkyMThEMTdDNDMyNUI2NjE5NjdBRENCQTI1QjM0MTY0OQorIDcyOiBDMzIzNTA1NEExRkRGRjJDMEQyMThDM0I1NEVFNkE1OEZBNUFFOTkwNDBBNjRBOTBCOUM4REU2MDFCODBBN0MxMzAxNjhGRTc0ODRDRTFGRDlGQkUyMkU2RTc5NDE2MTgyNjczMEI2M0RFNzk0RUM0RUQxRDY1M0U0MEIyN0Y3QQorIDczOiA4OUY0REY1QUM2MjY2NjVEOTc5MUExRTFDMzBEMUYyMDZEODlDNEIwQzU5OTE2REEyOTU5MzE1MzlCMEE2MDdBMTI2MUI0RUYwMjJDQ0RBNkVDRTAyRTk5NDQ5RTI1MkVBRkM4OTI5RjUwNzQ4NjZDM0ZGNTlDQzU4MjY4RTJCOAorIDc0OiAzRjFBQzE1QTkwQzM4QUE5NjQ1MThGMTc2MDE2RkRDNzNBODVCMDk2RUZEMUZDRENDRjM4RjNFQzY5MjYzNUJENEU2MTBGMUIzMzE0RTA2ODE2NEQwMjE2OEY3M0EzMDdBRDU0OUUxRTdFRjA3REQzNzRGOTY5N0RCNkExNzQ0NworIDc1OiA0RkUxNkEzQkYwNTM0REQyRTREQUNDNDNFMjIxMTc5QzlCNjFEN0Q1MERBRURBNERBOUM0NUNDRkRDNzZENkZBOTZFQjNDQzFDMTg0REQ1RERGN0RBQUE0MTNEMDVCMkZFNTE4MTE3RTJDOUE4ODA3MjYxNDhDN0FFNjA1MjE2MAorIDc2OiAxRUE4NzBFMTNCN0U1OUI5NzA0NUY2NjI2ODJGMjlEQUVDNDQxMzU2NkRBMzQxNDY4Q0M5RjVDQUI3MzNEMTg5N0JCQUQ4RTk1MjBCODVDNDNERTMzQjlCNzA4ODBBQjc3NEVBNjM2MjQ4Q0QwQTE2MjZDOUNERkVDM0YxODM1RgorIDc3OiAzN0FFM0E5ODI4QjA4QTA1NUIyRTQ3QTYxM0QyNUE4RDQzRDVBNDU2QkY3NDFFNzk2NEMwREY0QUVDNkQ4RTVGM0VGODc0RjJCMjA2MDZBMzhBRkNCRDMwN0MxMDRERkE1QkY0MEJGQkIzMDc4NzcxNDM2Mjc2RTc3N0Y2NDVERgorIDc4OiA0OENCOUI3NzlEMzcyOTkxNjJEMjY3NENFMkMyNTk1QjI0MjIwNzE5MTdDMjhBQjQ4NzgxREVENTA2MEU3NkVEQUJBNTZFN0M1MzhDMzE4MkY5RDk2MERDMjE5MjhFNkIzMDY5RDUxMDA0NjYwOEM5NzZEN0ExMTNERTU0RENFQgorIDc5OiBBNTY1NDU5Q0VENkM5OTZDMDRBMjFGRjBEQTEwQTdGMjRCMURFMjJFRUFEN0ZBN0ZEMkNFRUFGNTIyQTQyRTI5Mzk1Rjc3MTE0MDU3M0Q2ODRDOTRGNjFGMTlDNzcxREY2OEZGOEVBMEZGNzI3QzU1Mjk0QzcwRTcwMUM4RTQyNgorIDgwOiAzQTBBREI1NDc5RTY1QkUxRjAwNDYyRTYwQzhGN0Y3NEZGNUM5OTY2ODBBMkE0Q0Y3ODdCNURGNjVCQjJFODIyNjQwMDRFMzk2QUQ3RUFGQ0Y4QTIwMUUwM0FBOTUwRDQyQjlBMjZFRjJEMjRGRDJBRDdDRjU3Q0JEMDhBRkZBQworIDgxOiA2RkZDNzk5NzgxQjJFOUYzRjU3MzY1MUVCMkRDQjA3NzEwNzNEQTE4NzVDQ0MzRDJCNEM2QzA2RjQzMTYxMTk1NjEwNjE3MDA3Q0E5QTk0M0IxRjJCMDAxRTYyNTE4RUJBQkQ0NTQyRTczQ0ExMzFFMjBBMTY3RkE2RThDQUU0NAorIDgyOiA3OUM5RTM0OUYxMjE2RkNCMjk1RkZGRTU3NzFFRjU0QTAyNDMwNkNFRDlDQTExMURBM0RDNjI5NzIyREY3RkE1RjA5MjcxNTJFNDQwMUUwMzU4QkRDMTZEOUFCRkEwMkM3MDlCMUMyMUY2RDg2OTA1QjBDRjBENkVDOUZEMTk1MgorIDgzOiA2ODc2Q0M1MTMzMDBDQzgzQkFGQ0FBRTVERkU0QzRBMENCOTYyMDc5NTIzRUQ0NzVCMTk1NjgyNDNBNjNCMjA4MzAxMzM1QkRERTEwQ0VDOTBDQTgxNjk2MDAxM0UwODI3MUYwMjExMUJEMThGRDAzQzFCOTQxNTQzRkY0QTU3OQorIDg0OiBGQjUzOTJCQ0I2MEMxMzI5RDNGQkVEQjRERTExMzFFN0I4OTMyNkEzNEYzNEJCMDk5QTdFQkVFNDJCOTg1NjgyRjUyNDEyRDNGMDYyOEFBNzJBOEMyQzQ2QkEzRkVBMDhENTc2NTI2NEU0OEREREJCOTZDQjU5OEM5QzBCQTkzQworIDg1OiBGQUU2NTVEN0NDMkZEQjU0MzQ5ODcwQjE5OUZBNTRDRjQ3QkVGMkFEOTgwMjFGQTI3Qjk2OEFENEMzQUU0NzdDNkIyREZBOUExMEM3NUZFMjc1RDVBMzJDNUU5RkEwNkIwM0Q0QzkwODE4NEY0OUZDRjE1QUJDNDA5MTA2RTk1MQorIDg2OiA5QjE1REQxOTIzOTIwMTdFMkY0RERGQ0QzMEI3QUU1ODU0NkFCNzFFQzQ0REI5NEVFNjZDQTM0MTlENTgwQUEwNUI1RjEwRTVEMzZEOUU2MDQ2NUZCOEY1NjY2NTM2NjgyNEI1QjZFOUE2M0ExM0Y2RTgzQTAyNkY1QThFMDkxMQorIDg3OiAxQTBFQzZGMDI0MTMwRDI0RDk3NDBFODAzN0M3OEExNzZEOUM1OTMzQzQwNzNERTNDNkIwNTM2RTlGN0NEMjBFMEU4OTcwNTk1M0RBQzlDRDQ0Qzg1RUEwNTlBREM0OTZBN0EwRUZDNDBGMTg3REY2NzZEMkJDODNGODBCRTk4MworIDg4OiA1RTk2ODNCRDY4RkExNkJFOTA0RkY2MTc1MTBBRTk5MjQ5RUQzNDc3Mjc2QTBCNDEwQjI2OUVCMkUwM0EzNTA1RURGNjUzQzcyNTgxMUFEOURDRDdGQ0NGNkYyNDExOTgwNzg0RjRCRTc0MDdENjhDMDJDRjZBQ0QyMUZBMUI1MgorIDg5OiA0N0NFMzA3OTAzN0UzOTZBNUI1QTFBM0ZGRkMzQzYwQTEzOEFBMkM2QkY0RkZGMjZEODQ2QzdFMUU4NEUzMUEyNjI3MEFBQzVDNjg4REE3QTI5REVENTg5MDE4QkMzNDlFMzI0N0IwNzNCNzY1RkRCQTRDOEJCMjcxQ0M2RTIzMworIDkwOiAyODBGRTJCNUIwQjcyRkVGQTQ4QTlCNkExQjBBMzUyOUNBQzlENjMzOEUyMDgzODE2OTMwQjE0RkVBNUIyMTA4OEIxMDA5REUxNDdEODFGQzdGMjlCMDBCQURBQjMyQjU3RTE1MzIyQTYxODBENzEzNDExRjU1OTY1OEZBQzcxNQorIDkxOiA1MjdDMkUzMzAxOENFOTg5NUMzRjg0QkE1QzA3MjA1NTczMEFBRjc2N0RDODJBRTIzNkYxRjdDNTUxMUZCRjJDRkNCRTMyQUFFRUZFQURFMzhFRUQ0QzA4OTUyOTBEMEVBQUIzOEUzQTVDRjdCMjQ2MjY3NUQxRTZCMjZDRTgxNAorIDkyOiA4QzBFMjJGNUJFMDk5Q0VFMzFDODE2QTBGNURDRjlBNTQ4QjBFQUI1NUFFN0NDMTI3RDE3MkFBNTI0M0E1QzczQjVCRDNBRkQ3N0M4OTM3MEQ1MTQ2MENCN0U4NEYxREQxNTc3NEQxQjg0NDJDMDdBRDIxQTNCMTI4Njg4RTFFMAorIDkzOiA2Q0YwMEYwNUE5REQ3RUJBNUYxQTc1NTk4N0Y1Njc4RjgwQUFBRjlCNUZDNDRENjE5OTEwMEMwNjJEQjUwRDJEQTg5MDk2Mzg5REI5NEE2RDY4QkQ4MzM3NjQwQkFCNjBBRkM4NzkzRTFBOTA5NjI0QTRFMTQ5QUVDQkU0MTVDNQorIDk0OiA4NDUyRkQ0QUFFQjFBRjRBQ0E4MTkyREQ1OTkyNkU3QjBEN0IyOTVCOEZFMThERjRERDIxRTdDN0FCRThGNEFERTczOTE3NTNFNTMzRURBMkVGQTEzQ0JDRDk2OTQ4QUNGMjZCNjU4RjFFNzIzOTBCQkNEN0MxQkRDRThGRDY1MAorIDk1OiBDNERCRThEQzg3NUQwMEZGQUUyQUFFQjNFMEJGMUYwMTUyOUEzNjQ0NTRENTZEMzI5RkQ0OTNEMzI3Mjg3RjNFMzREQkRGMkFENTRDNUJBQzVFNjA1OUY1ODk3RDE4MTU3QzdEQzg0NkYxNUYyQ0RBMUIyRjBBNkVFQUFFNThENQorIDk2OiA2Qzg4QkJCQUQ5NjFFOUREMTQxOEU5RjhFQzY5RkVCNDQzMTc2MTA4RjU2RkEyQjBCNjg2RTkzQjBFNUY1MDVFNTYzMDI5OTRGQjE5MDc4N0VCQTdDRUQ1RUFCNjlERDI0Q0VDMzlCRDU2NkQxOEFCRTMzN0EzMTQxNDk5MTczNQorIDk3OiA0MzlBQ0M3MjBFOENEMEM0QTExOUI5QzMxOEZCQzU0M0NCN0IzNUZGMTJEQTE5MEQ4MkE5NTE5NzAyNDhCQjQ3RDBEQTIxNzFBN0JGODUwQTg4MUU4NzY3RkJDRDU0MjAzOUU0ODM5NzRGMTg1MzJGREI1N0RGMjNDRDE4QjFEMworIDk4OiBENzFFRjYyODQ5ODQ0NDJEMDVFOEI2QjFBQjYzNkUwQkEwMTNBOEQ3MDAyOUY5RjFCOUJBNzkyN0E1ODJENUFDNjg5OUI5QzhFQjk5MENBOTNCNDlFNDYwQUUxNDA1NjRENDA0NjdBMTM2OEZCNEE5RUZGRUQ0QTQ2N0UxNzRDRAorIDk5OiA4QjVBRDJEREI0RjhDMDQ0QUZFMkIwMjE2QjdFN0Q4MzBFQkREMjg1RTREOTkyQ0EwMjJDQTJGNTk2NDQ4MDZEOEI3NTk5Q0VDNTFEQzczNzg2RDk4QjdCNkY3QzEwQzNCQjdENENFRTM3NDBGQTQyREIyMUJCNTFBMTI2OTYxMQorMTAwOiAyOENBN0FGMTU1RTlFN0UxRjVFQjY0RjIxMUYyNTRENjI0QzZDNDI5MzVFMjdBOTE3NDVGMkFGMkVFQ0ZEQ0YxREJENTg5NkY2MDUyMEE1Mjc0OTk0MzJERDNEMEYzOTgxRjBFNUJBNzJFRjExMzIzMUEwMzE5NDY3QkY1MjcxQQorMTAxOiA0NUI2OTQ4MEE3N0FFRTNEODNEMzlBMzg3MTdFQzFDQUUxNjM0RDJENTBEMDVGRDc4RjcwMzA5RERBNTY2REZDMTYwRkRBOTY3RUE2QURFQThCRjQ1Qjc0NTU3REJDQUU0RDYxODdERTFCQjgyQTA1M0NGODRCNDIxN0Y5Q0NBNgorMTAyOiBCRjQ2RTAzQ0VBRTMyMTFGRUFFRDIxNDdCM0YyOTA5RDQwNkE3NjcwMDVGOUM4QTVDRTYxMzkxMzNENDFDMjgxMkQzMjI1MTIzQjNCRjA3OTIyODhFNEJCNUM4QjVFQ0U5QkRGRTBGOEZGMDk3REQ2NEZCMkNDQjk2NEZDOTg2MgorMTAzOiAzQ0EyNUFFMjRFMEQ4NDdEOTU1MkZENzRFMUQ2RkFBRjkxNzM2NjAzREVFOThFNTE5MjJBMjkyMzYzMEQ3Q0YzNTkxNzkxNkExREIyM0E3NThFN0YwNjdGMjZBNURFOTEzNTg3MUIzREU1MDhDRTRFQ0ZFQkNCQkExQTk1OEM3OAorMTA0OiAyQzQzODBCQjlGMjkwNDEzODhBMEY4MjkyRDk3NDgyRTFFOTY0MjlCNzkxNjJBMTlGMDE5MThEQkMyREYwQjM2MjQ0RUQ5RTdEMDE1QTIwMjkwODc3QUNDNEQyRkZCMTREMjM2Q0U3RkM5MkVEMTZDN0M1NzAxMkIwQ0Y2REY3MAorMTA1OiBBMDAyMDE5M0FEQTdGNTdEQTY0OEMxNDc0NzMxRjE0NUU2QThFOUU3Rjk1NTBFQ0UxQTg0MUUyRDczNUIxODc2OTczOEFFQTc4RTdBQUJCOEFCQjUxRUYwOEEzNEMxODc0NzhCNEM1QUI1QkZGNDkzMkU5N0Y0RTI0NkM2MEM2QQorMTA2OiA2MEU4MTA5MEMzNjVEQTVFNjlFMkZDMTIyNTYxMzFGMTM0RjU2MUM3QTQxMUY1MUY3MkI3NjQ5NzI3QzlEN0U5OTc5NUQxOEQxQUE1NEQwOUY2QjJERDdGQzU1NjUxMkY0OUQ1ODJCQTYwMDZEOTUxRDQ3NDAzOTA5NUYzRUQwNworMTA3OiBCMjEzREEzRkIzQUJEMTZCMUNGNUNBODE1NzRENzg2NDkzODJBNkNGRUJBNUE4OEMwQjhERDQwQjFDNkUxODUyMEYxNDU5NjhDMzQyREIxM0EyQjRCMjY1OUY0Rjg2NUU4Q0Y1MEJDRjIxMzhBN0IwOUExRkMxOTA2NzZFMTg5NQorMTA4OiA2ODYyQkY4RjczMDU0REVGNDJFRjM4QzRBMzYyRUNDOEYxM0JFN0U3MDU1NzNEOEU5QUM2QjM0N0VGRTZBMjE4OTUwQTVBQjVBQ0FDMzYwN0MwQzk0MzAxRTBBMDg1QkZBRTdEQUQ1RTE4NjNENDY5QzExM0I3OTBDMjM0QTk0NworMTA5OiAyRDdEMzA0MEE0OTVGOEMwODlDNjdGRUUyMzZBMDdDN0QzMzYxRDM1MjcxQjRERkVBNUYxN0M3RTgwQjg4OEVBMzM5QjkzNkM0NDc1MTk0QkJFMzVERDlBRjNCRTExMjIwMUFDMjFDOUY1ODU4RTRGNEMzOUEwRkNGRjBFQjMxQworMTEwOiAxRjk5NTUxNTc1NUM5OEM1RUI5NTgxOERBRjBDNTVCNTExOTJCRDhENzUyRkEzNUVCQkY1MTE3NkYwNUFERkRDMzJFMkZBODQ1QzE4MjFCNjExMEY3RUMxRjFEMUVBOTYzNDMzMTk0QkI5NzgyODVDQTQzNDRBNUY5ODkxMTNFRgorMTExOiAzRjU4NTVCMDdBNDI4ODQ5NzUzMzkyNDE2NUU3RUFEM0Q5MUExNkY1RTgzMkZCMzQxRjUzNzNDMTE4RDVFRDdFMEVGOEQ4MzdGRUY1OTRDMjAzOUYwOEE3ODcwRUMxQzI3NzBCN0M0RTcxODUyNDY5MDg5NzZCNjJBNDE2REU1QgorMTEyOiAxNTQxQjVBOUM4NEI2ODRCQkRCNTQzRjc3Q0YzODQ0NzNEMDA3OTkyRjM3NDk4RjA3NzA5RUU2ODAzM0U0MTgyOUUyOTEwOUU3Qzc3RTI1MkMyNDFDNzhBRjQxQzc5MEU0MDY5NjIwNkQ1OEIyRkRFRTc2OEU1QjMyMTM2MkY0RQorMTEzOiA2REE5QUM4MzkwRjQyNjQwNjQ5NDc2ODRGNTNBMUFEQjQ5MzE0RTA2MTk1MDkyOThDRkZFQTE3MjlBOTQ0OTkwQkUyRDRDMDk4OEJENkU4QkQxMDYyRDU3NDg3OTIxOEVEOEZDNDgwMTg3N0Q2MzdFRDNCNTM4M0MwNjlBMjlEOQorMTE0OiBCQTBBMTk0RDUwNzgwMTlCMjE5MTBDMzdBRkI4MUE4OTBDNEZFQ0U3QjFGNEU3MjJDRjg1NUE2RjJGOEI4MkU0RUFEMzdCN0I1OEMwN0FDRUYxRUEyQjc2QjE0NjgxMTczMkVCRTFCQzBGNzZBMTQ2MjA3QjgyMTM4MDJERkIyOAorMTE1OiAyMDYzMUJGMUQ2NTU1QzdCQTc2MUIwNTgxQkJDRENBNUE3QjFCQUFDQTFCM0QzRTVCNEQ3MEQwQzlCMEEyNzlCQUYwMERFMDkzQUIxMzM0RUQ1OTk0RkMxNzM4NkQwQjJCRTlFMEZCNjdBQzEwMzg3MDQ4OTE3NjlBRTUzMEJCNgorMTE2OiBGMzFGNjZFMTc2REY2MzI2OTRBNkY3RTE2RUQ4RjE1Q0U4ODkwOEVGMUQxRjAwNjdDQzhBNUM4MDUzNzBCOUNBQ0UwQkRDNzhCMUNFRjA2NjMwMDEyQjNBMzVEMTI5QzRFMkFBNEY3MzAyRTFBMTIyQzdFNTNDNTFEQTdGNzk1RAorMTE3OiAxOEI1NDE3REM0Q0VFNDM4NzMzOEM2MzE1NkMzNEJCQUZGMTlBMkJCOTYyRTQyNDhCMUExQUZGMUZGMTQ1QkE0N0Q4NEM2Qzg1NzBEMDcyQkJDNTdEOTEyQzgwNDhFMEVENTAwNjBDQTMzNDA4QTAwNzIyQTY1QzE5NDE3ODM4NworMTE4OiAyQUUwOURDNTJEN0JCOUU2OTI4MjJBNkZCM0Q1ODJCODA1RTVFQ0QyQzFDNDgxM0Y5NEY1NTVCQTIyMTA0MjlCNjE1QTIzMDFCM0VCN0M0OTExNTNENjhBRTMzQUQ5RDI4RjJGQzExQjZDNjE3MDBENzlCQzdEREIyNTFCRDE1RgorMTE5OiA1MzQzOTBFRDJEQTU1RDQ1NDAyRjgyOEQ2MDM1ODE5QzQ1Mjg3NjhEQkZGQUUxMDM5Q0YwRDE4Rjg5QkVBQTg2NzU4OUY3ODg3MUZCQzc0NkU0M0I1OUU3ODg2RkRGNzM0MzY0REVDNDE5M0FBQkY1NkU4QkVERDgwMUU2MEQ4OQorMTIwOiAyMzE1OTdCMkI3MUU2QkU1NjdDODZERkUzMUFERDdCMzEzMzJCRURBOTMwQzQ5MjFDNDgxN0I3REVCQjAyODJBMTJEMjNCMDc2RjQ3ODNFQTg0MEQ4OTBGNkM1NzE3NjBFNzBFMTQzRjg1NjU1NjEwNjI4NzdEOTVCRDBGRjk0MQorMTIxOiBENjBBMTQ4MTY4NkFCOEY4ODlFQUNGMkU5RjY2QkMzMjI3MUU3MEUzRTA0QjkxQUNBNkNGQjkwMzc1ODYwRTBCRkM1QUQ5QTYyN0JBMEM3NjNDRDc1NzY4MTFDREUyOTIxRTlBNjNDMEYwQTdBMjZFNzYzRjdFQzc5MDIzMDhFNworMTIyOiBCQTY1QkU3RDFFRjY5NzI4MTczNkIzQUZBOTdGRjY3NUNENzc2QzEyNUNCMDEwMjhFQzI4OTRFQzJFRkI5OTA4ODM1QTM4ODJFNUU1N0JENDRBQ0EwOURDM0IwNTgwMTQ1RUIyMjY1RTE3MjREQTZGMDFBRjVGOTMwMjJENTc3NAorMTIzOiAwREVFMkVCRUJBQTc3MDg5MUMxNDM0NkEyNjgzNENGNDAyMTI1MzFFRERENjRBMjFFRjlGQkQ2MkY0NzI4QTE2RTE4QzY3M0RDOENFMzg4MzE1NkY1MTg1NEEwQUNDMzQxRERFRTZBMEI3MUM0Q0JGNzk3Q0Q1MzI3MDU2QUFEOQorMTI0OiAwNzE3QzlFRENDMkZBRUU1MjVBNjg0RUFBQjc5NjUzREQ4M0JGNDZFQ0IyODVFNkIxNTRERkNCOEEwQzlGOEQ0QjI4RkEyMDBBNkMyMjRCNDYyMENCMEFCNUIzM0I5QzhCRTc3QjJCNUEwNERCMUEzRUY4QTU5NTFFQzQ2NjA3QworMTI1OiBCQURDQUFFNEY3NjAwNjI5MEI5MDkwQUM4MUI4MDdFNzI1MUVBQzA0MUU2Q0IxMEEyQzVCNThDNEY0QjIzODZFMDY1RTZENTVDNDZDRDg4ODM5NkM4NjYwNkZBQ0M4MkRFMkYzRjg4OTA0RTE1RDU0OTEwMUFDN0ZGQkEwNTdEMworMTI2OiA3NTFGNjM2NkVGQzk3MjE4QUMyRTA2NzVFN0YzNzU0NDRDOEQ4MkFFN0ExMzlFNzgzMDVFMTQxNDhFMDcxMDBGNUI3RUY5M0I1NzZEQ0U1NDZBN0JBRkNFMjRGRTE0OEIyNDhCRTA3MjAzMUY4OUI2QUU3QkE5Q0M1NTlFOUM5QgorMTI3OiBFQzBGQ0IzRTEyNEM0ODJDQzhEODZCQTJDRERFOTMxRTUyMUYwQjZGM0U3RjMzM0M0Mzg4RTc0NDhBN0YxOTZEOTU3NjZDRUI4QTQ5QTkwRTQ2QjU5Mjk1OEJCODVCRDc0OTU3NDdFNzE1MDg4Nzc5NzVFQjE0NTRBNEVCRDU3RQorMTI4OiBDREVFRTZFQzRENjdERDg2OThCNzJDMTM3MzU2NTdFRTlGNzhCQjBFMUREMzdEMENGMDYwNjM3MTdEQTlEQ0Q2MTdDNUY0RkY3NjU2QUE0OENCM0Y2OTdFMzZCMzkwNEY0OTYxMzZBMkIwNEUxOTcyNkRFRjlEMzQwNkY4QTg0QQorMTI5OiA4MUJCNjkyRUFGN0Y1MTc2QjZBMEU1RjJERkMwMUEwNDVBOTE3NjQ5RDBCMjNCMjJDMTgwQkQ3ODY3MkYzN0Y4RTU2MkZEMDA2QTAwQUYyRDdBRjBBRkUxNUM4RDE5MTMzOUFFMjhGRjI3OTdFNjRBMzgwOTQwMEUyRTczQTc4NQorMTMwOiAwNEE4NDU2RDEzMTQ5OTU4NkNGN0I5RkM0NUMyRUM5Njg1OUYzRjRCQjgyNDBFQ0Q5M0U0MzlFRkQ1RERFMURFN0I2N0I2ODhCNTgzNTk4RDdGRDUwQ0IxNzlEMzE4RDRDMDVFREUwNEY2RkEzMThBQTFFOUREN0Q0RTI3OTMwNworMTMxOiBFNUM5RDU1QjY4NkREOUQ3QjE4MTlBNjE0NEY2MjcyQjFGQjVCQjNCMzAzNEFCOUQxQkYzNDM5MTI4M0JBNjE0RDU3ODk0OTI1QzNENTg5QTdGQUMwQ0ExQjFFOThBMTJFOURGRERDMkJDRDg1RDFFN0YyOTgwNzA5RUYyNTcxOQorMTMyOiAyQzZFRjJFMUMxNzlCRkE4Mjk1MTk3MzcxQzQ3NDA4MTc5MEE2M0FGQUExOTRFNDU5Q0RDMjdBRDQ0NTNCM0E4QzAxMTBGOTIyOUJCREQ0QkJBNUQ2RTgwRjJDRUE3MTA1OTMzNEE5N0VBMzRGOTY4MTBBMkVCRkNDM0IxNzdCOAorMTMzOiBBQUQ1NEZFMDJFNjcwODA4NTFEQzg0RTIwRjc2NjFFNDJBREI2MTBEMEIxMDVCM0VBNkVCNjY1NERBRjY0NDU4QjdFMEY3NTYzOTIxOTZBRTJCNDA2MjZDQzJCMEQ4MkU0N0Q3NEQzQzUwQTYwN0Y0NDAyQzZDNkE2Mjk5OTMyNAorMTM0OiBDRjIxMEVFOUE4MDA5NDNFQUFGNEVGRTE1REI3REVCNjk2MjMzQTRERDYyMjA2RDQ2QkQ5Qzg0QTdFQjEzQjVFQTQzRkYzQ0UxNUFERDhGQzRCQ0ZGMDIyMTk2MTk3RDFEMDk3QjdBODkzQTc5QzY2NDAxMzU5MjlGQ0VGMTBGNgorMTM1OiBDODE3NjFFQkYzMjM1RjRENTY2OTdCMTlGNjJCNEY3NDQ1QzhGRENFM0Q3OTk5RjMyNDk0OTNENTBDMTlDQTU3QzVGQzg0Q0QzNUNGNzk0RjU4RERCNkFDODZFOEJENTMzNTBCQTk2NzZBQjYzQjg4MjE0MTYyQzhFMTFDMTZBRgorMTM2OiA4RTU2RUIxMzFFRkEyODZBOTIwNzhGNUEzNjY3QkM2NjY5RDZBN0ZEOTc0NkNBNUYyMDhFRTM4RDUyNjVDRjI3MDc2QzE2MjRFRDBGOThENDg2QzU1QzI4QTRGQjg5QzdCNjY3QUFDNTA1Q0ExQ0ZFMUU4NDExODQ2MTVCNzYwMgorMTM3OiBCNkNBRjQ0Rjg3Njg4RTlFMzY1MUMyQzk4RTg0MDI2NDQ2NERFOURGRTFGM0U0Q0U1QzFCRUFENDZDN0Q5RDc0N0RGRkUyODJENzc1RTEwMTU5MUE3MjU0MTEyQzJERkQ1NDNFNDRCNDFFNzJFRkVFMzBCMDMyRTVFMDE1MTUwQQorMTM4OiA4RTc4NTFGNTY1ODU1OTVBQkQyQjNFQkE1QUU3MTM2NzIwOTNBMzEyMDc5ODUwNkFERDFBQ0FBM0FERDkyRDczN0Y5QUUxNTVCOEE1MTY2QzBGMDQ3ODAxQTkzNzMxRDRCODA3REZFMTVGMDhENjdERUYzMUE3QjgwODYwMUQ2RQorMTM5OiBCMzZCNjY4OUE1RjM5MTY4OERBM0EwNzU2QTE1QUYxNUU2RTY2NzAxRTIxMzJDRjZGMDYzMjZBRTlDOTFBMEJCQUEzNTY2NEIyOEJDNUI5MzZEMkJGMUU2NjUzODQ4QzVEQjU3NjU0Njg1MTI0QTA4Qzc5RkQwM0FDQzA2ODFEMQorMTQwOiAyNEEyM0NFM0E5MEM4RUMzRDEwMzMwRUJEQTQ3NzYzQjFCMDMwMzVGOUU0QUFFMEFEMzM2MTY5QTJGNDY0RTA2N0IwMjZEOTRFRDRCOTcyM0U5NjlDOEFBRTdGNDA0RjdCNDQ4MUM0OEVGNzU0NUVBQUU0RTY0ODUyNUE2ODc1MQorMTQxOiBDN0FERTYxRjIxMTMzODg2RUUwRTBCMTQ0MzhGMDcwREEzOThCM0E1Mzg3Q0FCRjk4QjA4MDI2NjJGM0JEM0FBQTg3MzhEMzZDQ0MwRDNFQTI1QkJFOUREM0I1OTA2MkJERjRCRTI3NDA0ODJCRjZENEMyMUQwRTBGRDdCMDY3OQorMTQyOiAxN0VFQUQ1OTMwREIzQTFGOEUxMjNBRDJFNzJDMzgyMDk4MjRGOTc3Njc0QTUyRjM4MDg0MzQ0MkYwQTVDODJCNTVGOEEzNjI1MjdCRjUzMjQxMjQ0MDE2NDhCRUY1RTlFMjZFMDgwNTBCMUZFODA4ODZFMzg1NkY5OEFDMUVGOAorMTQzOiA5REU0RjQzQ0E4RjdFNTI4RkZGOUY0RUY1ODk3NjUyMzIzQUVCOTVERjgwMDQ5QUZCQTE4OUMzRDE0MkNGRjU1QUUzNDAzNThBNzFCMDE3OTdBOEI3MkY0NzgyNzZFNjM1MzQyMUUxQzBDMjJFQkRFQTBDMDQ0RUE2MDg2NTc4NAorMTQ0OiBFMjU5QkUzNEM0NjdCNDcxQzk0QjYxMkVBNkJEOTlBM0Y3RURFNThFMjM3REFCQTZBNjY1NkY3RjdFQjU0NjZEQUY5MDhCNzc1OTAyN0MyNzdCRDkyMzRFQ0JCMjNDNUM2MkREMkM5RDI0OEMxQUU1Mjg2NUQ2NkI1QzI1Njc1NgorMTQ1OiBFNDkwOTlGQzk3MDk5NEY4MjkzRTcxNDY3QkZCMUQyNDFGRTk5MzIyMDc1Nzk1RkNBQ0ZEQkZBQjM5NjM5MkUzN0JBMDlFNjZCRjQ5MjY4NDY0MkZGMkEwM0Y4Q0Y5MkUwQUNGNDY3N0MyMUFDMUMyMzZERENBMTAzRjBCNUE2OQorMTQ2OiA0MzM4RTQzOEQ0MTlEODY5NEZDNDAzODNFQjEwNDVGRDlERkVCQzZGMThBOUEwM0I0OTE0Njg3QTg2MzkzMjJFM0IwNTBGNDhFODcyQkI3RTJBRDkwMTNEMzc0RDY4QkRCQkREMEIxNzcwMjRDMTE4NTMyMEQwNDU5ODUxNUFERgorMTQ3OiBBMzYyMzhBNUM3OTVCMjNGNDJEMDgzM0E1MTUyNzcwQTRCMDA5NEJDMTlERkE3MkM5MzVEMzJEMDJGQUY1RDEzNkJGNTVEOTJCMDIyRDAxOTQ5RkYwNEI3ODUwN0ZCMjAzMzAyODMzQUE3MTAzNzI5NzcxQTExMkU0RkQxNTg0RgorMTQ4OiA0NzE4MEY5RTgzOEIxMjlBNzczMkE4REFENzYzQjhDQzU0MzdCQUVGNzdFRkQzNEQzQjMzQzYzQzA5RjYzMTRCODdCM0ExNDM2QzY4NjY2MTRDM0IzQTY5M0JDNzkyNkU5QUU4NzZDN0JERTlENzEyRkI1MTk4RDY0MTdGQ0VGNgorMTQ5OiBBODcwNjRGRjVEQTE3N0YzNjUxNDg4QTEzOUU1NjhGNkM3NTcyMkVDRjk3NTA3MzE2QkRBQzM2MzkzNzI0NTI1MjkxNjgyNzc2ODQzQjg1NjNBNkIwMTQ2NDZGNkIxOUYwNDBCMTdCNjJCRUU0QTA3MTFBN0IwNkE2N0RGNzVDMworMTUwOiBGMzU4MzIxREM2QTM3NkVENTAwQTJEQUJBNjAwOTZCODE3RDEzQjU5QUEwMkI1NkMxRjUxRTJDNjgwNEY1RDJERTIwMjg0MDk5NjRENTc1NUJGQzY0MjQyODc1MDQ5OTRDNzYwNTc0OUE1RTVEOUQ4MDJCQjQyOTIyRjQ0NEQ3NgorMTUxOiBBQzRBOTk5OTEzMzU0NkI4NDUyMDQ3RUUzMUIzOThGNjIzRTAxRENBQ0VEN0JBRTRDQjBCNERGMERENTNCOEU0OTIxMTA5MzA4REU1M0MwOTI0RTAwMDYzNjFCQzhBNDgwQUFDRjc5OEQ2QjQwM0YzMzgzNTdFOERCNjc2QUZCQQorMTUyOiAwRTczQUJCRUI2ODk4MkYxNjMyNTdDMTE0NUZBMkU0NjVGRDZFNzIwRUVBRjVFNTMyREREMUFDQ0M2OTBCMzdBOEZBRUZGOEQ3RDQxNTY0QTlDODZDMkYxODVFMEZCRDBGQ0U3NTI1OUQzNEE1RTk2QjhDNTE0RUM4M0NBMTM4MgorMTUzOiAwOTQ1MDNBMUI5MEQ3MTk2MEY4M0M5MUQ3Njc1NEJBNkIwNUQ2NzBFQzZBOEVFRTFEM0NEQzY1MkRBNkU1MkIxOTZFMTU1RjNCQ0I2MkE5RTRFRjhDNTA3RjM3N0FDMTMyMUM0QzBEN0EwM0Y3RDhBNTI4NkMwMDE5QzM1OEU5MgorMTU0OiAxMjgwMzM0OUYxNUZDQkQ1M0YyRkUxMUI2N0RBQkNGM0Y0NzBCOEUzQUZFOEE4NTVEN0E5MThFNjExQTJENUY0REFFOEZFODQ3RUQxRkFGODM0QkIzNjc4QzYyNTMxMTE2MzYxMDBBOTkxQTgwQzFFQUQwRDM1RTI4REIzQUM4NQorMTU1OiBGNDg5NjY1RjREOEE0QUFBNjc5RDVFNUExQjdDNTAxREVDRTJFMEIyMjg2MzBBRUVBQTFGNTY0M0ZDNEJDQ0I5RTJGMDE4RkMyRDdDNDRBQkM0QUMwODYxRUJBOEI3NzAwQTQ5QjQyNDg2REQxMzI2M0Q5NzhGOEE3QzlDQTMwNgorMTU2OiBEOURGQkMzREJGMEUzRDI0N0M5NUUxNkQzNzZFNzA5OEE5MkVDNTlBNTRGQUI0ODJDMzMwMTM5RUM2RTA2RUQ1MTRENUM3NEY5NjA0RDExNzFBMTI3NTAyODExQTE2RDFEMzAzOUJEMDNDNERCRUQyMEJCNzY1RUZEMzRDNUYwRgorMTU3OiBCQTU2QTY0RDAxRkNGMzkyQTZFMkY3M0Q3OTFENkM1QTU3QUI0MEEzNzZFNzMzODhDRUNCRkRCOTEwNDAyMDQzQjREQjJGMkQyQjg2RTM1MTA5ODZDRjFERUMzODgwRTNDNzM5MTc1RDVDMEFBMURDRUExODk1OTEzNUUyQ0Y0OAorMTU4OiBGNEIwN0IwQTA2M0FCMjQwRTVBNjRGMUM0OTRGQ0Q5ODM5Mjc2RkQ5Njg5QUE2NzIwQTk0QjgzRTU3OUVGMTA0NDk5N0Y2NTA2QzFBRDgyQzJDQUJCOTM4NENFRUEwQjc3RDM5NzBDMUI3RTEzRjhERTk4QUZBODY5RjFGNEQyQQorMTU5OiBDQjRGMjMyMDI0QjJEMEM0OEU0MTVENzMxOTNDRDgzQzFBNkJCOTgwNkNBMzM2QUM0RjNCOEZGN0JGOTkyQjIwMDUwNEVENUU1MzlDQUFFNjhCMUU0N0Q0RDhBQ0ZEMkU2QjRCQkMxQjUxODY4OUJCQjVCQjQzMTFDOTZGRTA2QQorMTYwOiAxRTY3RTM2RDJFQzVEMDU5MUMwMTcxRTc0MjZBODg5MTlFQTVBMTc0NzBEQTMwNUNCQTdCQUVFOTAwMDJFMjMwNDNGQUUxRjRCRTAwM0VEREMyNTIwQTQwNEU2MzlCMDM4ODBFM0NDQzY4MjQzQzYwRTI0M0EwRTdBMDJFMkNBMAorMTYxOiA0MEU0NkE4RjI1NzI2NUExRTU3QTA5QjQzODkwRkVFRkE1N0Y1NkJCNDc1NTFCQUIzOEJFMkJBOEQxNDNDMTc2NzQ5NDg0QURFQjJEODMzRUM5RDZCNzBGQkU4NzJGQTUzNjE4RTY0Q0YwQUVEMjRENTFCQTk4MkQyOUU3MzBDOAorMTYyOiBGMzk5NzEyRTVFRkJBM0ZERjZCN0QwNDYwMEMxNkY2OTI2MDE3OUFCNzk1NDVGNDRFRjU4NDkzMDhFNkZBNTg5NzIxQ0Y3RTZGRTM4NDQ2MUQwNUVGMDJCRTUxRTUwRkE5M0M1RkVFRTkyNzlBOTUzQzU3RUMwN0NGQkU1M0UxRAorMTYzOiA1OERFRUUxM0JGNzNBREQ4QjQ5RUJCQTkwQThFRENFNzAzMEMxN0Q2RTZDNDQ5NzI2RDA5NEY5MEEzNUEwNzc1OUEzQkVBMDMxRUVBRjk2M0M0NzUzNTIyRUJCRUQxNDgyNzg5ODMzRDE1RDZFRUQ3RjUyMTRFMUFCOTNDMTc0QgorMTY0OiAxM0IyRjc2NkU2Qjc5NkM0NDQyOUE3NDdDQjQ2RDk5QTk4NjYxMTVDNzhEMkU5NERBQjUyQkJDOTI2OUI2NTg0RDI2Njc2Q0ZFQ0MyQTlGMDI2QUU4RTAxNjJCNkJCOERDQjIyNDI2NTlFREE2N0NGNzkzQkY2Njk2M0M2OTAyMQorMTY1OiA5OTJCOTk1ODY1RjU3NjMzNjY1NDgzQzdDM0FDRDM0QkQxMDhCNURERjE1MUNFRDk3QzBEN0FEMTM0QThEOTI1MENBOERDMTdDNUMyQTc2QzFDMDc5ODkyMjhGOEI0NzQ4MTRGQjExNkM5OEQyNUQ4RjI5MUQxMENFMjU5NTcwRQorMTY2OiAxQzVENUU5QzI5REQ5MTg3N0UyNzlEQjY3OUFDRjBFRkQ4NDY0QjBBNThFQzlBMzAzNkVEQjI2MjFFODEwNkZDRjJBODE3MTlGREQxQjg5RjEzRkNCRDIwOTYwMzg3NzU0REQwRjEyODc2REFBOTExRTc5M0RGOEYxOTkxQzA0MworMTY3OiBGRTdGOThBMUQ3ODM5QkI0MTdDRkY2NUE0NUUyREU4MDZDNzRBREYyNjM2Mzg1RkVCMTZBMzRDODkwQjUyNEE3NTQ1MkVDMDk2ODQ5RUYwRjkwNUZGQjM4QTAzMTlEMzFBODg2REQ4NDBGRTJGQTY2RTE2QUM3QzY4QjBEN0ZDQworMTY4OiBFQzY3NTMwNDU4RjAxMzY2QkU5NTA0OUZDRkJGNjU0NjVDRUM5QUQ3RDEyMzMyQ0Y4OThERDcyRUQ0RDI3NUY5QzlFRTk2QUQwMjYwM0U4MDMyRjlCM0IxMjYxNTMyOUNGMEZFQTU2NEQyNzhCMURDM0I0N0VGMzA0QkY5MDFCNworMTY5OiA3N0JCM0Y1RTU4QUYxNzRERUQwQjMxNjI3NjQ4QTFDN0I1QjgwOTJDODI5MDIwQTZGRTRDRkQ0MkNCNTExNDNFOURFMjBFM0Q4MjdGQjA3MERFRERBOTREMzlCRDBEMzMwNjA0RENCMTkwRTcyNTJCMTJCMDNGNDgwNzJCN0UyNworMTcwOiBDRjMzRTUzNThFNTE4ODA3QjcwRDZEQ0ZCRkIxQ0JBRkJBN0IyQkREMjA5MzFCMkEzQjA4QkY4QzY3NTUzNjdBQjNCQkIyRkRDQUUzMDVGMDQ4MTI0NjBGQUQzN0U5QUY3MEYxOTA1RDJGMEQzRTc2MjhERDFGQTQ1M0U1QUU2MworMTcxOiAwNzM5RDMyMTEyMTA3OTk0QkYzRTZFQzNBMTA3QUUzQkRCOUUyQkJEQTFEN0MxMEQ5QUQ2QUUzMjk1MjY0OTAwN0Y2OEQyOEJBMERERDFGMUM0NUY3MTI4QzFEM0M0MkVCRkRCMTk3NUExNDNBNDI5NDlDN0Q5N0Q5RjlEM0JBMQorMTcyOiBBNEYwQjc3NTk4ODAzOEU1MDQyOTQyOEM4NTI2NzkzQUQ4QjZFQzFGMEYzQUI3RjZCMzNGNzE2QzYxQjdERkM0OUUyNTRFQUEwMUZGQTQyMkEzMUQzMEE4MjY4RTFCRTk5RDM4NTkwNzQ3OUM3RTJFMDQ5MjY4MUI2ODUxREUxQgorMTczOiBEMjQ3MkU5Mzk4OUUxRjI5QkUwRENGOTkxQTY1QkZFMEU3NzJDRTc3ODUwQTJGOTZGQzYxMTRFQkNENzgyNTJERkMxNzcxMkFGMTkzRkM1RUNCQTM3MUI4RkQyN0IwREFDNDRBRkY2MTQwOTIzODg1RjQwMzkwNEYxNjY0QUFENAorMTc0OiA2Njk2RTA5QTE1M0IwMDc3RDM1ODY3MDVFNEExOUZBNkIzQjJERDg2MjFGNUQxM0Q3MDAzMDE3QTBDNTY5Qjc0ODNDOENEOTIxOEVEMUEyNTJFQjE2MEMzNjIwRkU5NkEwMEUyNjdEQTBGQTg5OTZCNDE3RjY0REQ0QTIyMTUzQgorMTc1OiAyMzM3RTM4QjQ2MENEREIwMjZDQjgxQjU5Qjk5NTcyRDQ1QkNBNEE0Mzk0OTQ0MEFBNUM5RjI1MDJEQkQ4OTA2NDUzRkVFMjNBQzBBRTQ3QUI3NzIxNEU1MkU3Q0YwNkFDRTczREQ4NTY1QkREMzE1RjQ5QTQ2MDk5NkUwOERFOQorMTc2OiAwNjhDQUVERkEzMjlDMUZCMDBCQTAyQzgwODc3RTBFMkIxQ0I2MTI3RkEyMjI0QkQxNEZBRTVBRDBBQUU2RkJBRTA1MkExNDVGNUE4MzQwQjQ0NkY1NEFDOUJCMjEwOENGNjU4MkFGQTBGQURFOTFDRDM1NjhCNjA0RjY4RjQ3MAorMTc3OiBFQkQ2OUM5NkY0RjJEQjA1MzUwQjc0QTQ3NUNBOEMxRkRDNjcxQjAxOEE0NzA3MkExMUE4REMwODJDNDE4RUIyMDQ2NjcyMEFGMTJFMTEzQzJENTA3RjAyNTk2Q0IwMjJEMkJFQ0M0RUY4NDg2Q0I1NDI2MDAyMEVCNkMzNjQ4MQorMTc4OiBEQjA3NzA5MjIwMDVERTY2RkJDMkIwNUIxRjg2M0FEQTU2OUI3NkRBOUI4Q0E0MzNDOTlDMkYyQjRBRDYwQkQyOEIxOUE1QjM4MjBDMEQ4QjZCMkU0NDNDRjU0QTk0MkI5NjFFNUVGMUQ1M0JBQzRDQTM3OTk2NEQ3MDEwNzBEMworMTc5OiBENDM1RDcyNDBCOEM2QTZBQUJDQjAyNkVBNTNCQjhERTU4QzVEQjQ3MUVERDgxNzNBRTMwQzgxQkVGQTlDQ0RFOEUzMDc1OENCRDdERUQ4MjI0MTA1NzYxMTVDMjQxNUQ5REE3RkQ4QTgzQ0JFQUUzMzdFNTkwOEEwMTJBRTFFNworMTgwOiA4MzhBRkVGOTdCQkNGRjc2OTJDNzMxRDU1NDQyMTQwRDU4Q0FCRkJFODFCRTc2RDQxNjUyMTA2RTIxNUFGNEU5MzQ2OTFEQzIwRjE4MUMyMTIzQ0YwOTFCNkQ3NTUyMTE1RjU5OTM3RTE2NUYxNjQ1Q0UwRTE0REVEQjg2NEIxMQorMTgxOiA3NzE4MTU3MDhBM0Q3QkJFNUUwMEZENjc3RTRFQjc2QjJCOUEwM0EwOTQxMjI4NEEyMzY0MDFFN0ZDQjE5QjM0MDc4MkM4MUQxQTQ5MzcxNjA5RERDRDdFMzhGOTQ0OEZBNjU3NTMzRDUzMjgwQjNENkI0OTI5ODRFOUM5Q0JDMworMTgyOiA2NDlFQUIzMjQ0QUVEQUExOENGMEExRkZGNjYxOUQ2M0JCQjY2OTU1QzVENThFM0E1OTJFNTNGNTM3RkE3NEM2MDYxNkI5RTQ0ODNCQ0JCMDhBRDdEMUY1QjZCOTFFRDMxNzZFODlDMDNDMjI0Rjk0RTVEMzg5M0ZCNkQwMUNGQgorMTgzOiBCNEI2QzY1M0Q5MEVERkVDM0JFQTBGRTFGRDc2NkQ1NzM2REFGQTE4NEMzNjBDOEIwMzZCN0NDODQyRThDNzZCRUNGQkFBNzA0NkFGMDg3ODMxRTMyMkZGQzE4MTA3M0MxOTM2MEEyNjk4NTFGRjRERkZCNDcxMkU2ODU2MEMzQQorMTg0OiBCMEMwMDYxRUM1MEJCQzY3REE0NzY1RkVCRDQwMzNCOEEyMDQyNjAxNzdGOUNGRDQ1MUU5N0I5M0YxOTczNkQ0QjBCNzQ3OEUyOUZCRTc2QkUxN0FBNkIwREZFOUM0Q0I5QzZFNDczNERDQzhBQTVFQTgyNUYxMDFFNUM5QjAyQworMTg1OiA1NEVCNEQyQzlCMjZCOEIxNzgxOEFENzAyRTA2NTQwN0ExOUE3MTFFMjJDOEU2NjE2M0U3MzExRDhFQ0ZBNTQ0NDg0NTM4OTAxOTRDM0VFODkyQTU5OTEyNUFBRkUxQ0IyMzBDNkVBMjY4RUQ2OEFDRDg2REJCRDE3NDMyMzUyQworMTg2OiBDMDQ5NzQzRjQ5RDU3RDkyMjZBRkQyNkI5NEJGRTkxNjVCRTVBOENFQTlEQ0NEMTAxRjgzN0YyOUM2M0E0MjAxQjFENDQ3OEVCNUM0Q0U5RDhGNUQ2RTkxQkY4OUQwOUU2QTBEOTE4RUU3QTZENThDQ0QwQTQ2RDM2OTYzQkNBQgorMTg3OiBGMTFBRUQ4RUMyQjFDMDAzQjhFMzVGOEYyQTA1ODYxRDlERDZCN0RFRDAyRTI4RUZBNEVEQkIwQkRBMERBQTc2RUFEODEwQ0YxQzc4RjUwNjY4RDUwREJFMkFFNjUwMDlDMkUxMjUwNERGQ0U5RjlCRkE5QTE0OTY5RTFEMDYyMgorMTg4OiAxQ0VCNDEwNkJDNzAwRjc2RjQ4MjVFNjc5MDk1OUNDNkVDODVBRDkzRDZGQkI5NzgzMDk4RTM2N0U1Qzk2NzZBQTBENkI4Q0Y5QTdEQ0M2NzU2NTI4NEU3MTIwNTU1MTY1MDU1N0Q1NTY4NzBCNDIxMjczNzcyNTI0NDYzMjQ1QgorMTg5OiA5NzExMjc1MTAwQTc4N0Q5Njc4Q0VCMzg5ODFBMjI0NjExMkMyRkIxRjBFRUMxRjg0NERGMTcwM0RFNUIwRkFEOTk1RkFDOTgzNTI2RTdFMzMzNkI4Q0RDOURDRTU2RkQ2NkI3MzgxMTIwMUEyREE2NzgzMzA5QUI2QjlDMDU0NgorMTkwOiA4MUU5REMwQ0JGNzE3OTcxMDRBNDRFNzI4NDFGQUY3RjlDQ0YzNUMxOEVGRUVGODczNDUwQTI1QUU1NjU2NEIwRTlEQTk4NTk4QzUyN0Q1NjI5RUVGN0YwNTcxRDlBRDkyOUJBQjg3QTI3NTM5Q0U5ODk4QUJGNEM1N0M5RUJCNQorMTkxOiAyOEY0MjE0RDFDOEM1QjkyOTFGMkUxRjdGQ0U3MzJDMzI5MEE2OTE0MzJBNjVBMDFGN0VBQjFBMzEzQjgzOTM2REM5OEEzQjM5QjVGNzcxMkRERUVCODk2ODAwMUM5M0ExMDJDN0ZDRkI4QUQ3RDQ5QjI5NjYxQzlBOTg2NzEwOQorMTkyOiA3OEM3QTAyNUFEQjg1MTQ1Q0E4QzZFNDE3QzRFNjhBOURCODNGQTc4QTIzRDBDQzNERjIwQUQxNDA5QjkzNjY4NkZGNzU2RUI1MUJEODkwMTE1N0IxRDAzMURFNjg0OEQ5N0RDMkUwRjEzN0JDQTFENDlFRTNGQjJENUE1RTgzRgorMTkzOiBFMkMyNUZDNjFBRkM3OTRGNjVBQTU3RENDQzQxMTFENEIxNTMzMTg0MjQ5M0Y5M0U5NTAwQUYwMUUyMDE3Q0IyMjY0NDRFMjA4QkE5Qzg0MURGNkQ3RUQyODk1NUIzMTg1MTEzMzVGODQyQUYzQzJDMDU3MzIyN0FGRDc5MDczOQorMTk0OiA1MEQ3NjhDNzQ0Q0REMzE4Qjk1MDk4NkUzMDVCRjc0Qjc3Mzk2RkRBQkNBRjYzQUI3ODY4OTNCNUY0MTA0QzI1MjVGMkY2OTkwNTk1NUEzNTIzNEJENkJEODVEQjE3Qjk0QUU3MDA4RjJFMkMzNjhFOTYzOUFCRThCQUZFRTRDQQorMTk1OiBDNEYxQkY2QzU2QzQ5NDM1MUE4ODAxNzJCOUNCQjU5QkIwRDFBNTk1NTM1MkUxMEE4NjhEM0MzM0JGRUEwNDg0RURGNkFEREQwMDlBMjBDOEQ3QjU5QjdBQkQ1MTE1RDU5NUIwMjZDQ0E2NDQyOTIxMDM4RDlCRTg2MEM0NENCRQorMTk2OiBDNzgyQ0U2QTE0MUVGOUU2Q0FBNjE4NTM1ODhCOEM3NUIzQTM5Q0UxOTFDMTYxRjQzRDdDNUY4OEZCNzdCRDUwNTVCMjFGMzdENEE0OUQ2NUNDREJEMEU2QkZEOTgxOTNGQzAwOTJBMzRDMjFENUVEMENBQTVGMTI5RDQ2MjA3MworMTk3OiAxQjJGNjhEN0RDNzU2M0MyODY2MTJCM0Q3MDhBQTcyNTkyM0ZDOUEyRkVEQ0Q0QjFGMUUyNTU3Q0M3MEYzQkY2NTk0NEEyQkFEOTcwNTMwMzIwN0IwMEY2REJDQ0UyNDVDNkU2NTNDMzhFQTA4OTZERUY0MTUwREExMThBNjk5RQorMTk4OiBDMTI0OEQwQTZCNzVCRUZGRkQ3MEVGMTdGMkQwRjNDRTM2MjhCQ0ZCNkE2MzRDOTNFOEYwRUQ5N0JCRkRCNDhGNkU1NjA4NTExQUQ3MDkxRDdCMDYyQjc5NUVCRURFQzY3Njk2Njc5RUEwOTJGN0I4NEE2NEM5OUJCMjI0RDM4NworMTk5OiAyMEEzRDNGMzY3Njk0NzE3M0M3RkI4MjRCNDAwNjlBMjAyRUQzQTU2MzdEQjQxQzk3QUJGRTlFNzAzNkQ2QzAwOUJEREQ1QkZGRjk3RkU4MEVCQzQwMzU1QTUzNUQ3RDNBNEIyRkRDMDlCODA5RDNCQUUyREMzMTgwMzQxM0IyNworMjAwOiBCODU1MDBDQjc3N0IxNDU5MkE0NTYyQTI2QjEzQUYzRjA4Q0U3NEUwMzM3MkQ5NjIyRTI5QzFGQjc5ODhBODZCOEMwMEREQjIwNDlDMTM5NUI0M0IxN0NENUM0MTVBNUFFREQ3MUUwNUNDMDk4MEVCOTUyMEQ0Q0FBQkJENkZEQworMjAxOiBEQjU1M0EzNkEzRUFBQkY3QkU2RkFGODVEQjk2RDNEMEYyMDdFQTFFNUI1NURFNTg5QTExNkRCODBDMjFBRTVCMTgyNkE1RkYzQkI5RDg0QzI2QTQwM0ExRTVDMDBCQzdEMkY2REUzRjZBOTY2MTg5OUQ2RDc1MzczRUQ3NkI3MQorMjAyOiA1NTgwNDIyRTYzOTM0NzVCN0MxRjUwMTBGQTdGNDM5NUI5NjlFMTkwQUVBMDU2RUNDODg3ODNBOEI1RkFCOEFDRjEzMERGRjM5REMwMTc1RTlCQThCNjNCNEZBQkE3RTRBMzZGQzU1RkExNTA0NDY4NzI3MDg2QjJEMjZCNTgxOAorMjAzOiAxQ0EzREQxOTRFN0JDQTI1OTFBRDFCOTVEMENENENGNzkzODMzNEM5NUExRUJFMkM4QzFBOUI3NUU2QTg1RjUzNEMwOTRFNjUyMjQ4MDQ4OTIzQ0JBQjk3Q0IxNTgxRTlBMkQxQUI4Mzc1QzUwNjE1OUI3MjRGNzQ0NDdBMzIwMQorMjA0OiBEQzUyNUQwRUMxRTYyRUE2OEMwMTM0NzBENzdCNjEzNzczOThFRENBODJBOTFDMUMzRTREN0U1RDkxMEE5RDU1NkIzQUM4MTBGQjE0NTdCREQ3MEExOEIwNjM1MjNDMzlCRDgwNkEyMjI3QzdFMDU3Q0M2QjAxOEREQUJGRjczRQorMjA1OiAyRjBCOTUyMzcyNUIyNzI0NUQyQTFCNjM1REI1QTNBMzgwMDA5OTU0NkFCRkREOTVDOEU4NkM2N0MzNzhEOTFFNDcxMUFEMTkyN0U5MENDOUI1MEExQTdCRTNENjA0MTRFNDg3RTcyNDQ1OTM2RkQwRkEyQkJGNTQxRjEzOTRFQworMjA2OiBBQjZFQjIxQkM4MDJFQjA4NTRGNjEzNDZGN0JGQ0ZGRjczOEVBMzk4MjlBQjI3ODU5NzZEODY5ODMwREJBQzM2N0Q1OUQ1MEMzODczQjk2MEFDNTE4NUYzREJDRUFCRDRFNEU1OTRDNUMyOTE2QThEQzMwNDIwN0U4ODc0NzNDNQorMjA3OiA4RTFDMTYwQTMzNEQ0MUYwODkxOEVDMDg0QkUxMjg3MkRFNzlEMDA0NzNEMUI2QUNBREFCRDY3RTJBNjgyN0ZCMUREREFDQUQ5QkZDRjI3NDMwQUE4NEYzRjdBMEQ2Q0YyRkZDOTFFNzc1OEY0NzFGMjczOUQ1MUI2MDEyNUQ0NgorMjA4OiBDMTM1NTMyQ0ZFODQ4NDlGRTlGNDA3OTlFMUYyQ0EwNTU2ODg2OEMwRDQ0RTY4MzJBMDVDMjlFRDE3QzVGNkQwRkI4NDQ0ODVDQkFFNUU1MEE2N0YyMzE5QzMwNTI2REI0NDRGNEI0NUNEQUUwMUE5RDA1NDI0Mjc3MzFEQzE3NQorMjA5OiBCMUZCRUU2ODg0M0Q0MkZCNTU4RDFEOUUwQjc1OUMxNjhENkY4NEQwN0IyRTkwQjY0NkY0NUYxNzA4QjBENkFGRjdCQTg5NTlFQkI2QUU0RDVERjlBOTk1MUQxMzlDODFCQkU2MDI2NzFDRkRDNjE4QUExRUI2MzI4OERBRDcyRAorMjEwOiBEQzExQzNEOTkzRjU5NDczRjY0RjE2Rjg3RDVGMDg1RTgzNDMwNkZDMUM0MEQxMkNFN0Q2RTQ0QzU5QzMxMzE4QzY5NDI4MkIwRkU1M0I0QjYwRTFFNURCNTQ2RDkzMEFCNzQxQThEQUFCOEVENjdDM0Q4N0U4RTc2QjhDMDI1QworMjExOiA4NUJGQUUwN0VFQTgwRjkzOUQ1MkNCMThDOTcwQzhFRDlENDAzNUI1NzM5MTczOUM0NEQ3OTczMjIzQzUxMzQ0QjlCRTI4QzE2RUEyOUIzNUFGNzRBMkY4Rjc1ODFDNzY2RDYxNTI1REU1OTIyQTgzQTFCQjYwMEQ5N0Y3QTNGMgorMjEyOiAyNkU1MkFGRUUwRjExREQ3OTA2MUVBM0U0Rjk3MjA1NzI5RTZCNjFFNTBCNjlDQzI4OTRDQUJCMDhDRkQzQTEwQzQxNjYyQ0E2RjZGRUM5QjVCODBBQ0FDQkY5NjhDNUI3NUJCOENGQTMxRDA2QzgyRDlDRkU5N0Y2RTFGNDNGRAorMjEzOiA3NEYxOEU5MkQ4NUQ5QUU3OUJENjJDNEI4RkZCMjExNkRBODE1N0UxN0E2OTI3QkUyQjJEMEQ3OUNBMTAxRjdDQUQ2QTI1Q0Q2MjNDODc1NkQ0OUI5Q0JCOTAzNDc3QjlDQUM2NzczNEY4NEYwOTE1QUNBOTAyNUE5RDVDNkREMgorMjE0OiBBNTFCNDVCQzA5MzgyRjg1MzM0RUE1OENGN0U3NzQ3NDU3QjUxNzExODA0MkQ1M0Q3NzNDNjY2NjhDRDZENTA1OUI5OTk3REIxODNCMUMwRjI5MDBBQzk5NDkwMjhEOEY3NkREOEI3MjU5MTQ5Mzg4RkJGMzQwODM0QTNCRjRGQQorMjE1OiA1OURDODhBNTE4RkU0NEE3RkQwRjMxNkJDOEI1Qzg2NUQzNzBBOEJDODI1MzMwMzdDOTg3MkIyNDM5MEY3OTY5RUNBNTMwOTExNDYzNTIwMjE4RDAwQjQxNTQwOUFGQTkwQTYzRjg4RUU3MjlBMjUyRjFCNzQ3QzQxNDQxNDA5MQorMjE2OiAxNDZGQkYzNjJBQ0NFQjhERjc5QTc2MTI4NUEwNjUzNDg0QzM4NTg1ODE3RTI2QTdCODkwNkZCQkVBRDcwMDMxMTYwQzdCOTI0RDNCRDNBOUFDRTI4QTU3MTJFRDBFNkU4OUNFNEU3MTQ5M0IyN0Y4N0JGNzNCRjU5MkQ4MDYwMAorMjE3OiA3NEI2NzM4QjJGMDkwNEZENTlGM0E2ODBDRkJGRTRFNDY2RkI1MDk0MDM3QUExOTQyREIzQTAwMTcyNjBENzVBQzU5MTZFMDQ0Q0FDNkJEMEUyNUQxNzZGREEyNjc1NDJCMkM3RUEyMDFGNzIzN0UxOEI5RDAwNzIzRTk4QTIzOQorMjE4OiBFODIxQTQwMzNGQUYwRkVGRTUyNTExNTEwOUQwQjgzNkEyMkMyODdFM0IxNTdFQzMwMjc2OEJFRjc5ODlBQUNFODUzMjE4RTVBRjdERUU5RjZFMjM0QUQ1MEFCQ0M4QTk2NThBMEVFNEQ5RkUwNTAyMzUzNDFDOTQzMDhEN0E0RAorMjE5OiBDM0VERDY1MkQyRjgzMUIxQzc4M0NFMUI4QkI4Q0VGOTQ1M0ZDNzFGNTE5QTQ4MDBFQzIzNjJFQ0RCRTlFQzE0MkY3NjgxODVENTVFMzIyQTMyQUY0MjFEQzg0RUY4NDYxNUY3RjNEQkU2QkM2RTcwMkI0QkM4NjI1Q0VCNUJGMworMjIwOiA2QTNDQTBCNUE0M0VGNDJBMUQ2NTI2QzJGMTUwNzc4NTI0ODM3NEM3RDI2MDIwNzlBOTIzQzg0MUY3NzVBNjUyNzI0QzI5RTc4ODY5NUI1MjM4Nzc3OENGMkUyQkJFMjIxM0IyRkUyMTJENzI5RTM3MThEOTQ2MjM4RkYwRTU3RQorMjIxOiBDNDI1MTQ4MzM1QUY4MTNFMzZEMDcyREM2NEM3RUY2NzgyRDdEQjk4MUM1MTQyQjVEMzJENkQ0MzM4RTA2QUM2NDM2M0U4NkU4OERGMDE4OTY4RkQ2NTlEQkY1MEE0Qjc3QkUyQTAyRTcxQjI0M0Q2NTAyNEIzNkNENzFDMTc5NgorMjIyOiBCNzk2RDFGNUFCMTEzODlFQzdFQzhERDREMUQ1QUFGMTcyNjJDODUyMkE0QUFDRjQ1NEI0NEE3RUQ3MUUyMEY3MDI4MTY5RjMxNjRBQUJFRTRDNzE2QjM4MjcxRDcyRDdBQ0EzRTU0QjMwQjlFMDU2MTZBQzUxNTk0OTk1RjYxRAorMjIzOiAxMTNBNTZFOTZFRDZGODYxMzcwNUI1Q0NBNkNDNEYyMTM4MjA0RDdCQzBDODk2NTE2MjU5N0MxRkQyRjZFODE0M0Y1N0ZGMTE2MEY0QjQ4MkY3NDMwNTM2QTM0OUQyMDkxODA2NEFBRDJCQjM4QTlENDQwM0MxNjk3N0I5NjE2RAorMjI0OiA5NTkwQTNCRDdBMDYxMzM4MTE1OUUxRTI2MzQyQzE1MEREOUIwQTkzNzg1NUJGNzhGQkY2MjU2NDg0NDhCNTQwMTU4MTk2QTI4NTVFN0ZDQjk2N0YyMkY1QUU5MjdENjBFOTdEMEMxQzE3QTAxRThEMDcyODRGRjk4NUY1NEI4QQorMjI1OiA3NEIxMTk2OENDN0NEOTI1RTIxMDM3REYwMTFGMUM5M0IyRUMzNEMzNEEzMjI0QUEyODFBQ0U3RDZGMUIxMEYyQTc1NURENkRERjMzRjFBNDYzMDEyM0JDMUNGODc1ODk0RkJEOEQ4QjcwQUMwNUY4QzNDMTA3NkUzNDZBNDVCNgorMjI2OiA4NUEwOEQ2OTkzQjdFNUMwMTRDM0NBOTU3RDZCNTNFQzFCOEE1Q0VBREQ1MDYwQkJDQzM1MDkxNUQzMjc4RjI4RTIzODQyNURBM0E5NUFFRjcyNUEyM0IxQkJENDNFNUQ4ODMyMzgyQkY3NjYwM0Y3RTJFNEZGNzExRDU0MDk4MAorMjI3OiBCRUZCMDhGNjIxMjgxNDczOTQzQUYxNTMxMjQyNTYzODY1NzAyNjE5MTZFNTIzOEZBRkU0NEE3MjgwMUQ3QzIwNEE5NzRCMzg2OTZDMTAyNzQ4Q0QxREY2NUJFM0VBOEM0NUE0MDAyMUMyOEM3RTRCQjE0MzgwMEEzRjM4QTkzRgorMjI4OiBBRkI5NzQ5NDMxOEYzMUE0QzY4MTMyNDZEMTI1MjE3MjQyMjQ3RDRFQjZDRjg4NEIyNDRFNTk2NTVERjg2NkIyODIwQThFMUE3MTIzRENDREU5OEVDQkRGMUY2MTI1RUM1Qjk1QTBEOUY4NUYwNUNCMDk1MzdCM0ZDRkMyQ0YzRAorMjI5OiBFOEMyRTFEMzQyRTY1MDNENzczMjhBMkMxMzM2Rjk1OTM5QjBFODg1NUY3NUNGQzYxRDRCMDNGNEFGMjMwNUFCNTdDN0RCMzgzMDU1QTUxRTYxQUZCNzU0OTRDMjIyQjAxOTY3QkM3NEI0NTc0QjgyMDhGQzMzN0UwOUU1NzA3NQorMjMwOiAwQjM5NkQwRjE1RjQ5RTYwOTk0REY0RkIxRTdFNTI2QTI3MkE1QjQxRkFCNjdFQjhBNDE1NDdDQTZDRTVCN0YzRkNFNDA0QjZBNDZCRTc5QUFFMzdCNERGMkMyRUY2OEVBQjcxRjM5RDU5MDg3NjBGQjIxMjRDN0M4M0IwQUFGQQorMjMxOiBGRTg2NTgwNDM4RThFRTM0NTlBNjJFNzNBRjBFMTRGMDBGNEYwRkFEMDQ0NzkyMUZBRUIyQjc3QTBEODc4Njc4NDY1OUIxRjZEMzA0NDUzODMwMEM3NTlFQkVGNzA2NkY5MjE4RjkzODZGRjZDODA5OUU2QzcxQjVFQzZCNzIxQgorMjMyOiBDN0U0NUIxNzM3RUJDQTYyQzg3QThGMEM0NkY2NjFCRjdEM0ZDMDIwQzNCNEI5MTk4OEZDMzZDMzhCQkM4REUwNUEyMkQ0QkYxNDhGOTZEMzExMTU2MDVEN0IwNEQ0Q0M4QUIzRjg3MzhCNjUyRTkzM0Q3NkNENjk2NjYwNENBRQorMjMzOiAyQzQzRjg0MzgxRkI2MTg1MTJFREEwMjc4RkQzODJBQUJCQTQxRkNGNTU0NjMxMkRBNTY1RjQ1MDNDQUNCODZCOEE3MDRCM0I0OUMwQzg2QjIyMDdFNDY0MUY3MUZCNUU3MjY1NEIwQUVFNzA1QzUyRUNCMkU4RkFGMTA5RkRGMAorMjM0OiBBQkM0RUVEODYzNURERkZEOTkwMEY1REY4QzYyNDZDQUYxMkQ4Q0Q5MzMzRjM4NjQ3MjU1RENDNTJBMjBCNkRFOEQ0MTA5OTU3Q0JDQzJGNDhGNTIzNDY1NzlFMDA4MDkxNjI4RkQ3Q0FGQTA5MkYyNTY4ODI4RjQyNEVBQkYyNgorMjM1OiAxNDY3MkYxOUJFRUY4ODk2Rjc1MUIwQkNGNDBGRUVENzhBODA5M0FBNERDQjU5MEQ3QUE1ODhEREVCMzE3MDQ2MDM4MUZERUYzQ0ZCNjA4RDU1RjlFOEEyOTVBMzZERDY0REUwNThDOUVGRjMwQjFEMUYxQTM2NzEzODhCMEFCOAorMjM2OiBEQjg3NDI0Rjk3NUIwM0Y5MjVEOEI5OUExREQwOTY3RDIyODNFNDA4QjZCMDE1NTg1MURDRkQ1M0MwQzAwQjA1QTQyQ0ZFMTRCMTA0MDhFMEY1OTg1ODA5ODEzRDM1RDdBQTdDNzBDMUE3QkM4NTJDN0YyNTRGMDMwMzEwMzYyOAorMjM3OiAwOTVEMzQwNjZBNkUyMDJDODk2RUYyOUYzNDgxRUZBQ0JCRkE2MjI2NzZGNThFOTBGQ0Q1QTA1OTExMjRFNDg5QkUzODA0QUZBOUJEM0U0QzkyQTk2NTNFQkU4NzhBODhCMjc1QkY5QjVDOEVGOEVBMEYwMUM4OUNGNDBFNUZFMAorMjM4OiBCQjVCQzgwQzcxOEI4NUJCM0MzRENFOTVEMTg2NzExRDVCOTA4MjdCMjA5N0RFNjNDNjQ3RTVCNkMxNEI0NzY2QkY4RUU4RUQzOTUxMDMwMzBGNzJBREYwQzg5OTJBRTgzNjA4NjU3MTkwOERCNEE2MjU4NjE2RURCNEJEQTg3OAorMjM5OiA5QTE4RDZERDBGOTdCNzQwN0RCMEYxNzg5NkRCMkEyNzUxQjc2QzY5QjZGOTFFODIxQTBERDcxN0RGREVGNjMwRUVDMTQyN0MyRDE5MEMwOTVEREIwNzYwMURDMEVDODY4N0I3NDExRDczNUE5QTZFRjBFRUI4NEE2MDk0OEJBQworMjQwOiA2MEE2MTRCQzQwQTdERTU4MEI2QUREMDUyNzlBNjhERENBRTc5RUMzRERERDJDNkZGRjdCNzdCRTlERDAyNjBEQTUyNDE2NjA5ODJCNzdCQTlDNEI5MDQwNzVGMzk2MTJGNTE0QkM4NkRGNkY2OEUxODlGQUUyQzg0QTMyQ0NFNworMjQxOiA1Q0ZDRDQ0REVDQkUzRDc0NzA4QzYyMEM3MERBODA3QzVBRDU4MDcyRjc1NThEOTUwRjUxOTY5MUZDOTZGOThCNzYwQjAyODk3QzNBODVGNjhFRTM3QjI3MzU5MzE2NjAxMDY2NzBDNERDN0ZBOThFRTJFMThCNkRFRDUzMkE5RgorMjQyOiBBRkJFNkQ5ODcxQUZGRTZEMjAxRTJFNjE0MzU3MDM4NTY0MjQzMDFBREQ1MTUyREM3NDVEOTZEMUJBQTNBREQ0Qzc4RjJEN0M1MDU3RjFBRThCMjFGQjkxODc5NTYyMDUwQzg0MTQ0QTIwNDJBQjJDRDI3MzAyNUZBMDM4MzlGNQorMjQzOiBDRTlDMUIxOUQwRTBGRkQzMDg1RDI4QzVCMjE3NkE3NDFBMzAzNEMxQjc2QzU0NzQwQUFDMzQ3MEMxQzhDNkU3N0JBNzY1QUM0RDZEOTBENERBQjBBODlBRkIxN0E4ODYzQTI5MTc2NzRGNUExODlBNUNCRjcyMUMxNEY1RDYzNworMjQ0OiBGMkYwNjU5Mjc4MzlDMjJERjU2OTYwODQ1RTI3ODY4QkE4RjI3MkE0NjQ2MTlFRkZEOUFFQkFGMUU0MEE3MkREQTgxQ0ZDNjdERUUxM0MzNTE3MzZDNDA3RjU5REFFOEVFNkYyQkRBMTc1MjFDRjY2RjEwQzczNTY2QjdEQTg5MQorMjQ1OiAyNENEM0FGQTIyMTg4NjM0MzdDNTUxODAyMUQxQjk2RTBBODBFQkQxNEVCRjJGQTE2MUE1RTcwMzJGRDk4NUJGNzFFQTU5REM1RTM1REVERTVFRUUzMDk4RUFGNkExNjY5OEY1QkQ1OTAzQzRFRDIxODg2OEQxRTk2RTRCODA5NgorMjQ2OiAxQzZBQzMxMTczMDY0MEZFNDI3QzFGMjNCNjBFODE3QzI1RTEzMTgxMDk2NDNBOEFCNTFEQTc0OTk1RkZDM0YxNTZGMDk4QUVGOTdGMzdDRDk3NDYwMDJEQUQyMkZCRUQxQTFGMjIyNTExQjkyQUI1RjM5REE5QjUzQkQ2MkFGMgorMjQ3OiAzNzYwOTM3MUVCNjNBRUYwQ0E2RUFDRUQ4Mzg4RDE4NzIwM0E4OEMzNzlGMjQ5NzA0MzREODc5NTBDOUI3REY5QTY4QjYxOEU5RTgzRTNFQjEwMzc2NTA0RjhGRUUyNTA1ODMwRUZFM0ZGQkQyM0VGQkUwODEzMjVBQTE3MTQ4MgorMjQ4OiBGMEMwNkY2QTJDN0FDM0YwRUU0MjhEN0QxQkE4OTNFNzNENEQyRjQxNzk5OTA0M0JFRkJCM0NFRDUxRjk1RjdFQTNDQTg4MkI5RThDMUM5NzNERDhBN0Y0NTBDRDYwQkI1QTBCMzBENDRBNTc0RTQzRTcxRDI1MzNFRkFFQzZCNQorMjQ5OiAzQTlEMUJENDNDQjNCN0QzRTkzNjRGMDU5ODdERjRDRDk5RDU3M0MwMzZCRjEzMzc5ODg3NTE2NThFQUYyODk2MjQ0REY1RTRERDg5ODRERDQ5NDcwOUU1ODdBNzVFQThBRkY5MzY4MTc4N0FENzM4QTk1QzVFOTg2MTYxMTVGNgorMjUwOiBENDJFMkQ1N0IzNjA5NUYwQ0ZFOEY3NzFBOUIxOThDN0I3RTA0MzM3NjMzNDFEMzUwMzNGMzJEMjFDNjM4Q0Q5NDhEOERCRTc1RjUzMzM5MTM0N0M0NDBGMjA4RDE3RjIwNjE0MzA5REJGMTA5MURDQTEwODAxRTE2RjVEMDNCNQorMjUxOiBGQkI5NjRCNzg2NUE4ODk0MzNFOTlDNEI2MUQzQ0QwNjlERUI5OUU0NDY3MzA2ODc3MTAzMEVCMUI4RjFGRDNCM0VDQUVEMURDRThBREZBNDRGOUE2MjU0NzJDRDREOTg3RUM3RUQ3RkRBMERBOTEyQzhBRkY1QjIwQkVEN0YwNAorMjUyOiAxM0Y2N0NBRDk2QzMzMDRGRjNDMkU0NUQ3MUEyRDY5MzAxNjk1NTE2RUEzODRGNjAwMTg1MEE0NkE3RjkzQ0I3NEM1QTRDQkMxQzU2NTQ0MTY2QUJCNkM5QkJGOTBCOTU1OTMyMEY1Rjc1QUJCQkRFMzRDN0I4QjQ1Qzc4M0JDMQorMjUzOiA3OEE2MDkxOTZCQjQwRUVFQkVCQzA0QTg3OTRDODQwQTZGODMxNjgwODY0RDY1RkFBQjA5M0E0OTlBM0NGMTUyRUFDOTY4NjU3NDdBQ0EyODM5MkU5RjEwMjk2MkM0OTI0N0UwRURBNDI0QTM0NUM0QUM2RjRCNjBDQzNEMjU5NworMjU0OiBGMTk5NTE1Q0Y4MDZFQTI1MjM3RUI5M0Q2NThCRURDOTk0RTYxRUY3MEY1NjY1Q0MyRjIzMEU3QTQwRUFEQTE0QkZBMDBENTZDMTI0OUYyRTVDODkyMDk3N0E2Qzg1MDE3Rjg2NjNCRTk0MjI3NjJDRjg4NDg3Qjc2RUU3RUY5QgorMjU1OiBFODcwMkFERDRCOTAzNEJDQTA1OTBGRjg5N0MxMDAyMkM1NkQwOEZDNEVFRTBBNDNCQTg1RTlFOUMyMDg2NjE2QjFCRTdCNkY5MjhBM0M1Mzc1NTUwNkVEMkQ5RDYyREY1QkE0QTE4NjJGQkNEQkEyMDY4MzkzMUEyMjQ0QUZCRQorMjU2OiA2RTZBM0NERTEyRjJDQjNBNDJFQzhBNUQyMUI0MzVDNERBNERGNkNBN0U0MTUzN0QzNjFEODE2OTE1ODI4N0JGMUQyMjQxNTgxREUwN0Y4OEZFOTJGNUFFNEU5NkVCOUM0ODlGQzNCMjU4RUEzODQyRUEyRDUxMUNFODgzODgzRQorCitITUFDLXJtZDEyOAorICAwOiBFOUJGNDAxRUIzMzhBRTlFQ0U5RjJERTlDQzEwNEE1QworICAxOiA5NTM2QjE5QjAyOUU2MEY5NzlCM0E2QjMwNTI2ODVCRQorICAyOiBCNTJGOTBCNDg4NDY5NTlFRjU2MDUxQ0I2RUQyMTU4OAorICAzOiAwODExRDIxMDg0MTNEOUI2NEFERkE3OEIwNUVERjFDOAorICA0OiBFMDY0MTQxODlDQ0UxM0I2MUEyRkMzQ0U5QkMxMTkzOAorICA1OiA4QkEwMjY0N0E0OTE0QkY0MjQ4RjZDNzk5MDU1QUJBOAorICA2OiBBM0Q1RDQ0Q0JFMzBFMjNEMjA2NDNFODY1RjI4QjdDRgorICA3OiA0NTlEQzhBODEyQkJCODQwQ0ExMEE0OUUxMEYyNDBFOAorICA4OiAyNjEzMUNFNERFQTdENjZFNUIzRTZFQ0IxRERBNDMyOQorICA5OiA1RUI0MUI2QThGMTQwRTQ5QkI0RUJDQjc2RUZBQTBBNAorIDEwOiBDNUUwNzY4OTAwNzFDODcyQjA3MUUyRDA2OEVBRDFFMworIDExOiA0NzY0NzQzNjVERUJBRkUzOURFNzgzMEEwQkMzQURDRQorIDEyOiAzRTlFMEQ0QjQxRDc0MDMxMDU3MjU2MkU1RjdGMENGRgorIDEzOiA5QkE5OUI3ODJGN0I3OUM5QzE5RDQwRUIyNzAzMzk0MQorIDE0OiA4RTk5MzFBNzU0MzVCMTEzQzdFMTdFOTRFMjJEMEI3QworIDE1OiAxOTc3QkVGRkZCRjM3ODYzM0FEMjJEOUU0ODlGRkI5MAorIDE2OiA5Q0EwNjUzNjcxMzIyNUYzQTVGNjdDQjY1MTBGQjE2NQorIDE3OiBGNDZGNTRCMDEyOTgyNjIxRTMzQkExM0E4NzFGODJGOAorIDE4OiA3M0Y5MjVCRDUwRTYwM0E2NkIxN0Q4RDkyNkNBRDFGRgorIDE5OiBBQzc0RUM2OTJEREJFRjg2NTcwMDQ0RTFCNUYzMUVGMgorIDIwOiA0RjRGOTVCQzc0ODdBOEYwN0IyM0MxMUY3MDBGOUM0QQorIDIxOiAwMkNFNzgxMzFCMjdBQjc3NDc0Q0ZBRTVFRUEzNzA1NQorIDIyOiAxRDY2QkFENDE0ODdCQTZDMjM4QkRBRkMwNEU5OTYzRgorIDIzOiA3OTA1OEVFN0Q3MEM5RDE5MDU4QkUyRTFENTM4M0YzOQorIDI0OiA3NzNFQjlDNjc3MDU1Mjg2Qzg0QjM5RDIzNDRDNDNGRQorIDI1OiA0MTRBNDgxNkMxMjRCQjYyREJBM0JGNjVCNjI3NjIwOAorIDI2OiAzNTBERTVERjQ2ODAxQkFGOEIxMkQ0NTE2RTgyRUY0MworIDI3OiBGMzFDNThDRDczQTNEOEFDMDUwQkZGQTVGREI2MjAwQworIDI4OiA1RDc0ODlBQUQ2NTM3REIzREMyN0Q0M0Y2OThGNkU3OQorIDI5OiBFRUY3RkMzN0RDRjJBQjk2MzI4RTYyQjgwOTcyMDNCNgorIDMwOiA4RkQ0MjgzNjhCOUI1MkYyNUM0N0U3NEMwMzI3REE1MgorIDMxOiA5MjNCNkVDQUJEMDMzN0UzOUU2RDA2OENDOThGNzFBOAorIDMyOiBFQ0YyMjM5RkM3NjcxMDVGQzY5RjQ2RkRBNUJBMzdDQgorIDMzOiBFQUVFRkVERUMzQjFFNzRBMDI5NjgzRkMyMUYwM0I0MAorIDM0OiA5NjIwQzQ5MTMxMjNGM0E3MThENjFDOTU2NjczRkIyMworIDM1OiA1OTI4M0VERUEzODA0RUNENjQ3MUVBNDFFQUY4OUE4RQorIDM2OiBGQjVCNjA2ODVEQzFEQUYwQzY1NTczMjVEQkJCMzJDNAorIDM3OiBEQjcxRDEyQUEzQjk3QzQyMUZDQkU0NUY4MjMyRjNFNworIDM4OiBCMDg0OUVFNUYxRjk0ODQ1MTRGNTUxMkJEOTI4MTQ4QworIDM5OiBDNzNBNzc3RTIwQ0M0OUFEMzNEQkNCQjE2REM1OUE4NAorIDQwOiA2MDBCRjZGQjc3OUVBMkY3MTA4RDFGN0I4RkU4OUY0NQorIDQxOiAwQkQ3NkYwN0Q0QzQzM0U1QkI5RkM5OEI3RkU0OUEyQworIDQyOiAyMDlFMjEyNERBQUFCM0I1QzZEMkREOUE3OUEzNkU0RgorIDQzOiA5MDdFNEUyNTQwQTY3OTRENjUyNkE0NEZBMDhDQUFDMworIDQ0OiBCQTFCQ0VCQTYwRjMyQUJEMEVFRDBBMUE1Njc0ODI0OAorIDQ1OiAzMUY4NTI3Q0NERDAyMkNCOTQzOUY4QjM5RUQ3MEQxMQorIDQ2OiAwNUY0MjlENkFBOUZCQjE3MjNEODFBQjI2OEY5NTk2MworIDQ3OiA3QjkxRDU0MDkzNTdGRjEzRjlCOTJFRDJDNkQ2M0I2NgorIDQ4OiAzMEFBODhEREM2RDQ5QUVGMEQ0MDU4NjE2RUVGRDlEOQorIDQ5OiAxNkMwQjRGNDY5MzZBRDUwMUVFQjVCRUM4QzY5OUVCMworIDUwOiA3ODJEREMzQUE5QjNFNDk4NzY3QUEzMTBEN0MzMkNEQgorIDUxOiBGQUJFRDkyQzQ1NDU0NDU4ODk2NUU0Q0JCQkRDREFDNQorIDUyOiA3QjA0RUM4NDdGMTYwQkUyNkZCNEE3QzZCMTExRUY5MQorIDUzOiBDMjBBQzYyMjBCRDM1MkY4RDUzRjBERURCQ0E5Nzg2MgorIDU0OiAyRUI4QTg5Qzg1NEFEMjQxMkU1RTJEQjg2Mzg1NTBDMQorIDU1OiAzOTBEQzNEMUM2RUE0Q0Q3QTM4MUJERDlGMEI1MDVBNQorIDU2OiAxRDg2QjlBQUU1MjQ2MTgyRUY3NjQ1NkU5QThGMkNDMworIDU3OiAxNzU5QkU4MDMzQ0QwODJENzcxMTI3Q0M4MTQzNTY5NgorIDU4OiA0RjIzMEQ0MTc0QkJCMTEyMzFBQkQ0QUI1OEQ2RkI4MAorIDU5OiA5RkEyMTY5OURFOENERTM5RkU0QzlERjI1MjcxQTg3QworIDYwOiA3NjU4ODgzQzAwMkQ2MkQzM0VBMjFBQzQzRTI2QzM1NQorIDYxOiBFRDFDRDRDNjNDNDA0NTM2Nzc4MDRGRDY2QkUzRTA2OAorIDYyOiBENzE1RThFMDlDRjRDNUEzNDc5M0ZDRkYwQTdFRjBGOQorIDYzOiA4NkM0NTA3OTRDNEY5MjAxMzhBOENGMkREOTIyMTgyNgorIDY0OiAyQUUxQTgwOEY2M0NGN0FGRjM5RkU5NTk1QkU1NDBFQworIDY1OiBDOEU1NTBGNTIwQjA2NjIxMDBGRjc2N0ZDMEZDMzhFNAorIDY2OiAxQTRDQTUyNDlCQThCRjhFNEFGNTBCRDAxQjg5QzEzQworIDY3OiAyNUEzNTY2Q0VFNUUwOTIxODU3MDQ4RjRBNTRCRjc0NQorIDY4OiA0RDc2NDQ4Q0UyQzA4RUJDRjZDMjFGRDMwNDk3M0RCMQorIDY5OiA4M0JCQzZEODI2MzM5NzRENzZBMUIwOTk0REQ4ODkxRQorIDcwOiA5RjMyMjg4NUVCOTI3QjhDNEY5M0FBQzA4MUM3RjM3OAorIDcxOiA3RTBERkIyMkM5NDMzQTBBNjZBNjczQUJCM0U4MUI0QQorIDcyOiBGRDNERTYyODI5Q0NGMkFDMzg5NTgxRDk5MzJFMUI5NAorIDczOiBDQURGNjZCREU2OTkwM0U5RTMxMTdERkU3NUVCMUM2QworIDc0OiA3MUREOUJGMTkxQTVBMUEwMzExQkExOUJGMDU2ODcyNworIDc1OiBFRUMwNTc4MUFFRUQyNTVBOERBNzMwMzk5QUJFODkyOQorIDc2OiAwN0U3RTZFNTdBMjM5RjY1OUE2QjE3QjY5NTE2MTg3OAorIDc3OiA2RTdEQzY3NjQyRUI3MkMyOTVFQzEyQzAwOTkwMjU3NworIDc4OiBGNkFEM0JGNTcxQUVDMjdCMkM5OUFBRDRBMjJCOTY1NAorIDc5OiAwRjM4QTU1OTZCQzlCRkExQUJCNzMxOEEzNUU1ODQxQQorIDgwOiA5ODdCQTI5Mjc2Njk0QTg0REY2RjM0NDhEMkZBMzZCMQorIDgxOiAzNjYxRDhGMTU3RENCQTc2MUQxMjkyRkMyRkIzMzJDNQorIDgyOiA4MTgzNDgyMDU5OURFNjYyNEVDMTE2QTY1MUZGQTJBNAorIDgzOiA1OUU1NTZDMDIzODI5RDMxRjc2RUNCNUQyRDUwNTBGQworIDg0OiA5Mzg5NTk3NjM0MjI4RTI0MzgwOEMxQ0NDQzcxNjI3RAorIDg1OiBGRkQzMEExNzg1MERCMTdCQkRFN0MzRUJDODQ4MkE5NQorIDg2OiAwMjk3ODk1OTY1QjhDOTZGOTVBNzdFNkExQkVCNUZBNQorIDg3OiA0NjE4NUZCQTM3MUEyODJBRDgyNTFBOERBOTNFN0ExMAorIDg4OiAzNDk0MDM3NzIyOEE3M0MyQ0RBMTc4NjM1QjhBNDgyNworIDg5OiAwNzM3QzMxQkVGREU2ODc4MEVCM0E1NTA0RjI5NTgwOQorIDkwOiAzREVFMkIzOEVBRjk2QkM2MjA3ODU1NTFDOTI2RTlBRgorIDkxOiA3MTlCMzI0MTBFNjI1REM2NUFCNEU0MjJFMjRDODY2MworIDkyOiA1QjlBRUE4MDJFRkZFMDBEMTlFNzQ2RTA2ODQ5OTNDQworIDkzOiBFRTk2RjlCOEY4RkZDMDg0QzBFRjhDMjhFRDBFRUM0QworIDk0OiBDNjU3NUU1RjRDREVFNTBDMEMyRjQxRUNDMzNCQzlFMAorIDk1OiAwMDBEQ0UwRkE4MkMxNDIyQUJGMzdFRjE5NzFCNEIxRgorIDk2OiA4M0QxQzZFQkVGNTJEMUI5REZBM0Y0MzlCRjhEQ0UyNQorIDk3OiA2NTdBRkU1Q0E2RDU0RjkwODNGMDJDMjU3Q0U3RTNEQgorIDk4OiA5RTY1MjM5NTAzQkVBQjkyNzE2RDVCNTA0MzU4MzUyQQorIDk5OiBEODM3NTMyMEUzMkZBRTNCQkFCRDQ2MjBCMTIzMTMxNQorMTAwOiBDQzg5MTQ0NzJBOUI1ODYyMjg3RDY5NUFEMEE4OEJFNgorMTAxOiBCMEUwRDhFREExQkRCRUJDRDBBNzg2NzhBRDdENkE2NAorMTAyOiBDOEVCRTkzNjQxMjlFNjUxQkQ0RkI0OTFGRTAzNTQzMworMTAzOiAyQTZERjAzMkUwRDYxNURCM0JFODkwQjBCNkQzMzQ5RAorMTA0OiA5NzVGMEUxODQ1MTc5MDJGMUMyMzk2ODRFQkMwNjMxNAorMTA1OiA1QTg2RTQwM0FEM0QwQjlFRTVDRjg3QzMyNDgyQzZGQQorMTA2OiBEM0U5ODZCNTIzMUEyMDRDODhEN0MyRkQxRUNBNDBDNQorMTA3OiA4OTFBQkQyNzREMDI0RjhCMDQxNDNERTU4OEEwMkFDNworMTA4OiBFQTYxOTQwNTAwM0REMTdGMTNFRDVCRkIyOTU4NzU2OAorMTA5OiBFRjVDRDVFRjExNjRBMkU1QkJDMkQ5NjM2MEU1NUI4NworMTEwOiAwN0M3NDM5Nzk1NTU3MUE3RTQwMjVCQjlFQzU1NTg0NgorMTExOiBCNUYyMEZCMEFDMUMxREFBMERFRjhFRjc4QTlCRERCNQorMTEyOiA4OEQ5MUMxOEE0QUQyNzJCNEMxRTJDNzZCRTIxN0JGQQorMTEzOiBBQzU0ODg4OEYwRTVFNTU5Nzc3NTY4RUNFNzFFMjAwNworMTE0OiA4MTYwNzFFMkI4MDdDRTZFRjUyNkU0MjNCQkEyNTJENQorMTE1OiAwNTg1QTY3NUJBREZERDc0OUVDQURFNjZCRkZEMDU0NgorMTE2OiA5NjRDQTk3OTM5NjY0RUU1NUI4Qjk3M0QwNDRENzY5NQorMTE3OiBCQjhGQUFDQ0U5RDMyMzg3MTRDMzkzNEU2RkVFMjM4NgorMTE4OiAyQkIyNkNENjFCMjRDQjVDQjlFMkM1RkY0MEM1MUEwMAorMTE5OiBGNTMzMkRFQkE2NEVCMzVDRTNCNUM3MTM0QzRDODQ5NQorMTIwOiBBREU3QTVDOTk3NTdEMjE2RDEwRTFGMTNFM0E5MUYxRgorMTIxOiBBRTk4QzNDNEZEODc0Q0UwQjg1MDFGRTRDNDI4MjgyQQorMTIyOiAwNEQ3NjI1QjY3QUMzRjlEMTE3QUE0NUZFRjZDNkFDMQorMTIzOiBBMDVEM0M5MzNEQzhDOEExQ0Y0ODI5MEE1RDUyNjQ0RQorMTI0OiAwNzhGODgyMjY0MzE3QjBDMDAzODNGQkE3RTA3OTMwMQorMTI1OiA0NDAyM0YzQjEwOTc2M0E1M0ZERUZGMTgyMjQ4ODg1NQorMTI2OiBDQTUzNTcwMkJBQUI4NThENUZCNUI3OTg5NUUwRTFFMAorMTI3OiBGRTFDMkMwMkI3NjY1ODk1REJEMkY0RDJDMjJBNzIzMgorMTI4OiA3NUExODJEQjRGRDk5NTk5MDIyRjVBMDNGMTQyNzI4OQorCitITUFDLXJtZDE2MAorICAwOiAzMzUyOEZEQjRGRDA2NDBCNEM0MzYzQ0VGMURFNzk1NzE5RUJDN0VFCisgIDE6IDUxNERGNTY2QzYyMDQzNzNFRUU2MDIwMDU0QUU3RERFMkIwOTM0REIKKyAgMjogQ0M4QTVDOEQyRUJBMDJCRjQ0NzRBNENDMDVDQzJEODYzRjFBQTM5MgorICAzOiAyN0Q3MzFFMjE4QzM2OUEzMkJFNEIyQkIyOUQyRjFBMDk4OEJBNTgzCisgIDQ6IDA5MTI0NUJGQURGNUM2NjM1Mjk4NzAyRjIzM0VDQjMyNjVFODU0NjAKKyAgNTogQkQyQzA3RkEyMTk3MjAxRENBMzA5MDYzODgxRjJFQUM5RDkyNUEyMQorICA2OiA0ODA4ODY4NTYzNTRFNkZGMzRCM0FGQUY5RTYzRkI3OTRCQUM0NTIxCisgIDc6IDI1OEQ1ODUzMkJFQjVFQUQyOEU5QkNBNTJBQTRDMDQ0NENDMjQ2N0EKKyAgODogREI3NTEzRjgyNEI0MkE5RTFGRkMxMzY5RjIyRjYxMDU0QTNFQjdGMAorICA5OiAzQTRBMjU4RjIzNjc1RUUwMkUxQUMxRjcyMTk3RDFBMTFGMzJERTIxCisgMTA6IDkzMTVBQ0FBQUE4REM5MUE5QUFGOERERDRDRDAwMEFFMDRGNzBFMUQKKyAxMTogNTdENjBENzdFMUQ3OEQyM0QzRjE4NDc0MEQ5REUzOTJGQzZDM0M0MAorIDEyOiA5NTAzOTVDODE1QTNEMUE0QThCQjI1MzIyMzMzRkVDQTE1NDQ1QkZCCisgMTM6IEY4MjAxQTAxQzMwRjNCNTY5Qjc0OTdCNTE5MUFFMTZEMTcwNTA4NUQKKyAxNDogMDhERUExQTBDRDRCRDZDOTAzMUM4NEZEMjAwNUYxNTgxMEZGMDg4QgorIDE1OiBDRjQxRDg4RUIzOTIxRkExMzdGMDIwM0MyQ0I4QkM1MjAwRkRFN0JFCisgMTY6IEEwNzEwMEFBQUNGNTI1MzUwMUE2NjQzNDUyRDA3QzdERTJFQTgyNEUKKyAxNzogMTlERTIyMDgyRDFGNDUzNUE3MzNGMTYyNjJBMTM1MzU4RDY1MTczNworIDE4OiBENTBCRDkyOTAyQUUwMTI3QUM4REQ4NUU5QTgxQURCN0VGM0YxRTY0CisgMTk6IDNGQTM0QTNDMDJFMDZERTQ1MTc5NEFCODdDNEZDRTY4Nzc0NThDREEKKyAyMDogNTkyODMyOUU0RDgzMEU4QjJGNzYwOEE0RUQ0NkRDQ0ZENTc5ODQyNQorIDIxOiAyODI1REJENzk4OUE4OTc4OTA0QTY1NEU2QUYxMjU2MDhCMEJFQkMxCisgMjI6IDlDODEyNDI0NDE3RDQ3RUQ3Qzc4QzdBMDQ5RDRFNkNCOTA2RENGM0MKKyAyMzogOTUxOEE0NzNBOTAyREI2QkI1NkY3QTc2N0FCQTEzQzhERjMwNkQzNworIDI0OiA0MzlDNDQ0QzdBQjQzOTVDNERCQTMyRTRGOENGNEY3NjIwN0U1QkI0CisgMjU6IDkwMjFGQ0IwODcyNjk0NTdBQkFBODEwNUQ0REFEOERGODkwNEEyRjYKKyAyNjogOEI3QjY4NjE5OUJDNzNBMTc1OTQwNjg2QkQ1N0Y0NUIyMzI5RDg5NQorIDI3OiAwRjUwRkI3QUE5NDI1OTc1QkZCQjZBRDY1Q0Y5NjI4NEY3NjhCQjc1CisgMjg6IEJBQTFCNzc0OUE5Q0NBRDcxMDVFOUFERUU0OTkwNThBN0JFNEJBNzAKKyAyOTogRkJEMzQxM0NFODlERkZFMkYwQTg2OTAzNkY1QzQyNjVENUIxNDc0MworIDMwOiA3Q0RCMjU3RTA1MUVEMEVGQjc2MUE1QTA0NEVDRTVCMEMxRjEyMDMzCisgMzE6IEJCMUU1RDQ5NTA3NDU5NDUzNEFENTIzOTg3RDg0MzhDRjE2MzI0MjUKKyAzMjogQ0U2RDdCRUFEMTQ5NjE5MEYwRjBFOTlCMEIwQzlCRUNGQjdEOTE3MworIDMzOiBGOEJFNjE3QTMyNTZFQjFDNEJGQzA0Q0QzODZFQjdGQTQ2NjAzOTI2CisgMzQ6IEQxQTFGNDg5NDM0QzQ1ODM0NDIzOUE3NURBNDI0MUEzQTk0QkVCQTIKKyAzNTogQkVERDk1MURDOThCRDVDNDEzOEMxRjg1MzFEODI4OEJBM0M1MUI4NworIDM2OiA5QzIzNTdFODMyQ0U4N0EyMjdGNjkxOUI1MEEwQTlEM0EyOUI3Q0FGCisgMzc6IEM5RkNCQjlBMUFDNDhCNzFCMkFBMjBBQzk5MjgyMTUzMUYxMTQxRUYKKyAzODogMEI1OEQ1NjkyM0Y5NjIwQkNEMDcyNzAzRkJBNzFFQzIxNzJFRUFEMgorIDM5OiBEOTc0ODBFMDlGQTY0NzNBRjlBQUZBMTRGQTk1ODlBRjY1RTYyMzI4CisgNDA6IDRENUM1NkQwRUIwQkFENjRGRDBCMEZCN0Y4N0QwNUVCNTUxOTUxQ0UKKyA0MTogQjdFQzJEMTNFREQzNjAzRDFCQkM4Q0QyOUYzMkI0M0FFQUY2RUI0RQorIDQyOiA5QkQ1MzAwQjAyQzk0MzJGNjg2ODQyRTc5MDBGM0QyQTA4NUM1MDA4CisgNDM6IDdFODc4N0M4NzgwQzY0MDA5MjE2MzI0ODAyOTU4RTFEODQ1MzMyRkIKKyA0NDogMUEzQkMxQUU5NTM4MEQ2MDk1NzFCMDFEOEMzNDU4QjI1NjZCNzRBNQorIDQ1OiA5NjcyQkQxMkVCQkIxMkYzOThDRUZBMDg5QkQzMjgyQTJEMjg5MkZCCisgNDY6IEQ1RDNDQUQ3MDVFMkIwQjZFMENCRkJCMEU4QzIyQ0Q4RUIxREM0QzUKKyA0NzogNDA4RDg0RkUwQjI4QTNCM0NGMTZGNjBENjIwN0E5NEIzNjIxOUY4MQorIDQ4OiAwQjdFM0QzNUMyOTJEMjk1Nzk3RTNFRDFGM0Q4QkQ1RkQ5MkE3MUJGCisgNDk6IDE4QUMxRUEzNDA2RDY5Q0Q5RTlDODAxRjQ3MUFFQTNBMzFDNjlENTEKKyA1MDogOThFNDBDRTI5M0FCRTRBQ0ZBREU3RDgxMzcxRkE5MkFGQTY5MjQ4QworIDUxOiBEOTVFMzhGMkQwQzVBREI0NzhBOUJGRjlGOEU3QjEwMDY0NDU1QzMxCisgNTI6IDYyNDZDNjlGRjUwMkQ0NTM5NTBCRkVCNURCRUY2OENFNzZENzBGMTIKKyA1MzogOUQ3ODhGMDJFRUU2NzVGNDdBQjQ0OThCMTMzN0M2RDgzQTM3RjY0QQorIDU0OiAxMzkzODdENzQ5Njc0RDBFODRGM0MyQkZCQUZCM0YwQ0RDNENBMjczCisgNTU6IDA5NDA2Q0VEQzFDMzdEMjc1RUJGRTAyQ0M3MDcyMjkyNDQwODZDQTIKKyA1NjogQkFDQTEzOEU2RUI2RTVCRUYxNTAwODNDRTBFRkM2NEZCMTYzRUJGNAorIDU3OiA4N0NGNENDNDUwMEE2OTE5MzRDMkM2NjA3RjMyOTZBMEJFQzk4MEY2CisgNTg6IEY4RTREQjRGRTY4Nzk4NzBFOUY0N0JBMjlGMERBODQzMzQyOTUzQ0UKKyA1OTogNTJEREYzMDUwMTRGMUM2OEEzNEVENTE0QjEwRkFFM0IxQjkxRjM4MworIDYwOiAwRDU2ODE2NEMzMDBCQjE0QTQ1NzFBNzM0OTNDMDJFNDE2NTM4M0U0CisgNjE6IEUxREQ4MDY5NjFENzE4RjhDMDg1Q0VBMTFBMTQwOTAwRkU4MDY0QTQKKyA2MjogNjQ3MENCQzdGRTA3OUI2ODREMTA4NTUwNjk4QjdDNUQyNjU3MzZENAorIDYzOiBEQUY4MzI3M0IyRjE2RENDNjlGRDU1REM4NDgzNTkzMUU3NUZGNUQ4CisgNjQ6IDQ3RjRENzcyNEJGNDlERTg4NUQyM0Q4NEQ1ODJFQTNBMDBFMUMyREUKKyA2NTogREJENkJENDBGODA0RTM4OTYzRUJEMkU4MUNFNTE5NkY2RTY5QUM0OAorIDY2OiBCRDk2RTkzOTExNDg5NTdCRTY0RkU2REE4OUNCREZGNDUyMzNGQkNFCisgNjc6IDIwOTc1NjgwQzJFMzFENjFEN0YzMDMyMTVBMjVDRkFCNDQ3OUY2NDYKKyA2ODogRkZDMzIxRUQ0NUVDQzFBOUZDREJDMjhBQkFFMERBMUZEMjdBNjI4QQorIDY5OiA5OUY5MDAwOEYxMzlGQTQ0MkMxNTI3MDZFNTIyQ0VCMzQ5RUFCQjAwCisgNzA6IDI4OEM1N0RBRDlEMTE3NEY0RUJBOTJGNzgxNUI5M0MwOTE2RTgxNTcKKyA3MTogODM4MEZEMDgzRTc0Mjc3NkNDMzI5NzFCOUUwODhCODk0QTZBMDA3MQorIDcyOiBCMEY0NEM2NjU1MkVDRTk0NTAyNTk3QjZCMTAwQ0M2NDU2MUU2RjFGCisgNzM6IEFBMDQ2NTQ1OEZBMUYyODVGNUE0NTMwMDM1Rjg0Rjg0NEQ1NDVBNzUKKyA3NDogQzkwRUUzQkFDOTJGQTQ5ODZDODUwREVEMTFENzI4QTc4QkU4NTU0MworIDc1OiAzRTUyNUJCRUIxNThCMjQ2QTNGNDkxOEI2RDYzNENFOEVCRTQ1MDNBCisgNzY6IDdCNDI2NzVBQUUxRDBEQTVBODQ2MjNFNDdDNjE4NzQ0MjQ5Mzg0RTUKKyA3NzogRjUwQUMzMUI0M0JDOTNEMUJFMkE0RDlDNDBGQzREMzU5M0YyNTUxQworIDc4OiBBMzFBRTM5OEUwRDY2NjhBNTJEQUZFMzdEMDE5Rjc1NzFFMEY2ODFCCisgNzk6IEJGMTBCMjlCNERDN0M4NDhDNTE5MjYzMUU1OUUwRUVEMzJCOEQ4MUMKKyA4MDogNzdCMjE0RUIzNjE3QzM3MkMxOTFEMUQyODRGQ0VEMDRGNUFFMTdCRgorIDgxOiAxQjE3REMzM0Y1OTY2NjIxRjRCRkE5Mzk2MUIxQThGRkVFMUFDODIwCisgODI6IDVBMDdEOTg2MUVEQTZEODY5OEUxMkZFNTI1MENDQUQ4ODI2MjhCNDQKKyA4MzogMTc2RjQ2RkYyMjAyMzA3ODI4RDdGNjJEMzkzMzA0NDRENjg4RkRBRAorIDg0OiA1OUU5NENGQTNBQzJCRThEQzYwOTg4NDBFODg4MzA2NzY0MzA4REUyCisgODU6IDY3OUYyNDM4NDdDNjQ3RkNDM0Y0NTg5Q0Y4Nzk3MjU1ODM1MERDOTgKKyA4NjogREI5N0Y1RUY0OTJDNzM4MDQ3MkUxNkUzQjA1NTU2N0RBQjYzMDE1MworIDg3OiAzNTlDRjk1MTVGNkIyMTkyQkYwRTg1RURCQkM4MUQ1MTIzMjIxMEI3CisgODg6IDMwQjU5QjNDQkZGQzA4REE3RDk1MTRBRTc2Mjc0NjBCQkJERUQ3MjIKKyA4OTogRjMxRDVFMjg2NkQ5NzI2MDUxQjZFNUFDOUI4NDZEQjM2RUI3MDVGRAorIDkwOiA4NjBBNThEREI2MTE5MjYxNjQ2OTA3RTI1MUQ2MDc2MDA5OUNBQTA3CisgOTE6IDIyRUEwMjc4RUEwNTMxNzVDMkYxMkJBNEVEMTcyRkIwQjUxOEYzQkEKKyA5MjogRUM2ODI5NzMzNEY0MjFBQjNGMkVGMzUxODY4NEU4RTFCNTQ4QkY1NgorIDkzOiA1QzE0MDVDQzMzRDkwMjVEQTI2NUZGNEYyNTk0Mjg1MzcyMTQ4OUUyCisgOTQ6IDhBRUE4RTlFQUZCRjNCQTU5N0I2NUJCQ0NFRTU5MDEzQzhFNkFDOEIKKyA5NTogQUJGN0NDRDAxMzc0RDVEREFENkVGRkIxOTQxMkVFNzcyRTY2M0RFMgorIDk2OiBGN0YyOEUwNUZBQjkzQTNEMDg5QkJGRjU2RDRFNDYyRjBCRURBNDFBCisgOTc6IEI2QzQxOTlENTA0RTcyNzkzRUVCNDk2MTFFMjhBODJERjVDRDc5MDUKKyA5ODogMEIwOTE2Qzg5RjFEOUYxMTM0RTkxMDZGRUJBRjQxNjlEQzQ5Rjc1MgorIDk5OiA0RjE4QUEwRTg4QTAxRUQxNjJEMDhGMzUzMDBCMUMzRkNFMUZFOEI4CisxMDA6IDVENEYzQzQ3M0Q1ODU5QzE2RjcwQzE1NjZGOTgwMEIzREJCQkM2NDMKKzEwMTogMDJDMUE1RjM0MjMyQjg5MDBFNkM3REYyQkVEOTU3QkNBRTUyOTc4NAorMTAyOiBDREQ0NkU0MzQzMzFENzg2OUEyN0VBMDk2Q0FFQkY1ODZEOTNDQzJFCisxMDM6IDQ5MkMwNEU2OUYwMjA0RjE1MEI2MzAyMkM3REJEMjgxMTY0NThGOTcKKzEwNDogQ0REQUI5MDE2OEU5MzRFNjlFOTQyQjFGMUVDMEQwQUQ3QkZCNUI0MworMTA1OiBGNDMzNjQyRkE4MDkxRkIyNTE3RjMzNTdERDMwMzA4QjRBMkFFRjUzCisxMDY6IDUzN0IyMTE4NzkyQjZBNDE5QzQzOEU1OENCQjZDNUJBODg3QUUyNTcKKzEwNzogNzUzNzI4Q0IzOTgxM0MyNzQ5ODAzM0EwN0RFQzAzRDFGQTcyMEZFOQorMTA4OiAxMTlBNkM1QkYzRUE4RjdBNzhEQTlFRDJERTdFRDlBRTM5NDI5NjRBCisxMDk6IEE1MDFFQjYxMTU0MkEyQTJDQ0M2OEFFNzU0RDJFQUMxNzk0MkJEOEQKKzExMDogMTU4RkI1NEUzN0M3REY1NEIyOTkyOEI1REZBNTNBNTYwREMwOUE1QQorMTExOiAxNUY1MzgwMjUyRTIzQjVDMzdFRTdFOEQxRjU5NjNGQkY4Nzg4NTc3CisxMTI6IDczNUYyQzNDRjc2ODBDNjNGMzNBRTJENEYzNTY5RkE4RUI0NUVCOTMKKzExMzogNjdBRkM1MDFDNjU4MkRGMkE5REJENzEzRjIwNjA0MUU1RjNFMURFQgorMTE0OiA3Q0FFRkVDMUM2RTgyMzJCQ0I5MEUzRkUzNTIzRUUwNjQ5NkYzNkEzCisxMTU6IENDOTBBREZDRjNGOUFFNzc3QjMwRUFBNjIwNkEzNEVGNTRGNzRDMDIKKzExNjogOTc0RTBFODVCNDdDQ0I4NzBBNTExODEwRERFRkU4MUNCODVCMjhEMworMTE3OiA1MTZENkJBMDFFMDE4NkNCN0Q3OTZGQ0Q5REQxNjlDNDVCNjNBOTNFCisxMTg6IEExQ0U1MzRCREQ2NTkxQUY0RUJGNjFFRDc1NjM2QzdCRkY2NzA2NTgKKzExOTogMUU0QjI0MUQ2RUFERDc3RTA0NkJEQ0NEMjVGNzBBQUM5NjkyNjJEMworMTIwOiA3RjJGMUI0Qjc3QzMxNzBBOUUwMTVERjRFOEM2RURGRTczNkRGRkMzCisxMjE6IDg5QTNCRjE4MUVGMTk1NDY0REJFRjk1NzY4NzNDQTJERjdEMTYyNjgKKzEyMjogRTFGOTZBN0M5MTE1RTNEQkYyOEUxMEQ2MkYyRDZFQzg5NDE1QjZENworMTIzOiBENzVDMTA4MUIzQzI3MjBEMDMwRUM1REUxMzA5MzM1N0EwRUU2RTUxCisxMjQ6IEMxMTYwM0NEQUQ4REYyNzEwOTNDQUNERkI1QUE0RTExM0EyNzBFQTUKKzEyNTogMzlBOUU2NTlERkZEQzJBQkM4OEFEQTJCNkE3NDQ1MDkwQzdFRkJGNworMTI2OiA0MTMyMzMwQzVFMzM0NDgxOEFGNUMwNTRBRDU1MzA5RkY3Qjc2N0EyCisxMjc6IEIxMDdBOEIwQzdCNjg1ODE5NjlBMEY2REI5NURCMkY3OTAwOThGMUQKKzEyODogQUQwOTBDQzlBNkIzODFDMEIzRDg3MDM1Mjc0RkJDMDU2MDEyQTRFNgorCitITUFDLXdoaXJscG9vbAorICAwOiA1QzM2QkUyNEI0NThGRDM3MTM3NjE5NTVGMjgzNTNFNDMzQjFCODE4QzhFRjkwRjVCNzU4MkUyNDlFRDBGOEM3QzUxOEVDRjcxMzQxMDg4NUUzRkEyQjE5ODdCNURFRTBGQkFDMjEwQTAwN0RBMEZFOTk1NzE3RjhGRUE5ODk5NQorICAxOiAzMEM2NkVBN0NFOTU3NjRGNENGQ0ZCQkU0QzE2NkU4MEExRjIzRThDODhEMkRCN0ZBQzExOEJDQTlFRTI4Mjk5Nzc4NjEwRDk0Q0Q1NDVDMThDMTE0QTJBMTQ0RjlFOTMzQ0Q4MDIzOEU5RjFBQzczN0Y3MTQ5QkEyMzJGQjg0NgorICAyOiBBNjFGQUM0REFBQURGM0RCNzQ2RENEQzI0Q0FDREQ4QzJCNzQ0MjlDQTgxMkQ4NjA5MUI1RTdGODE4Njc1M0IzNDUzMjA0N0IzMjYzRDJFMjMxMDc0Q0NERkIxODE4ODc0N0I2NTdFMEI2ODU2OTM5MDFDQkJFQzUyNDk0OTI0NAorICAzOiBBQzNCQkE4RDk5OEMyMzRGOUJDRTlBOTY2NDNFOEVGQzM0MkY0NzcyREY1NjA2QTgxMkMxQzZDRkQ2NDRFOEYyQjhGOUJENzI0Q0JDOEQ3NjlCNzRDNTI2Njk3MDVCRDNBRDM5MENBNjFEQkM3RUJFNDQzODcyNkE5MUZCMjQ1NQorICA0OiA1OUFENDE3MUI0QzMzRTA5MzEyQTAxQjk3QjNCQzJCN0RBNDNGODc5MTU2MUUzMkE5MTg2QzlCMEM0MThCQkMzMURGNTRENkE5QUNBMDA5MTBDMEYzREY1RDdDMkREN0NGNTYzNEI3NjUwNjY0NkI3RDRFRTVDNjBBQTdDNzk1MAorICA1OiBFREZEOUZCNUI3QkNCMzk4MTFEODdBODkwMTcxMDk2QUQyMjM3Qjc4ODYyQzQ5MjExOTFGOEIwQjEzN0RFNTE3OEJFOERBODk4QjZBODk1RkE2QzRGNDAxNzE0RDJBQUM3NDNGNTEyRjg5ODlFMzkwODFGMDJBMkEwRjlGNjEzNworICA2OiA2QkJFMjY4MjRDNzU4MjIxM0Y4OUY3NzNDNTIwNzEwQUU0MDBGMDFCOTlCQ0UxMjZDNUYzQUJERTc5QzhCMzA0MTM5MzUyNDI3QTNFMjVBMzEzQTVGNzUzQTk0QjU1RjFFRTlEM0EwMzAwRThFOTg3RTk4MDA0RjU4NzA3RjczRgorICA3OiBFQjg5RERBQ0EyQkE2ODk0MEM0NjE2QjNCMUJERkMyNUQ5NEE3OEI4QzNBNTMzRjEyMzFBMjU5QkFGNkE2NzA2RTFCOTBDQkMyRjIxQTc2MjEwQzAzMjJDN0U0Mjg2RTM5M0IxNjdBMjQ1NURCMjRDNkI1MkIwQ0VGM0VCNzhBNQorICA4OiBFOEFGMzg1NDQwNTg5OTU5RDY3NzQ2RkNENDBFMjk1MDI2RTk0MkU0NDI1OTE2OTc4MEIzOTU0RDIwQ0JGRTI1ODZEMkE4QkJFNDA4QUMyRDcwN0IwRkU1MzlEQjQzQjNFOUIyOUE4RDI2RDA5QTQxRkE2RjE5MTk5OUE0NTE4NgorICA5OiBGNkI5Q0Y2RTBBMzM3OTA2NTE3REIwOUVGQTMxRTkxRDU3RDZCOTA4RUQ1MTE2QzEzQjQ5QjhGMUYzQzNBODcyRUY0MkRFRDUzRjkzOUNDNEVBNDEyMkZEODU4MEQ1MjhBRDJEQTcyQkUwNjMyNTFDQzg5RkI1Mjc0MUUyQUVCMgorIDEwOiAyNzRGRUYzRTVFRjdBRDdBRkIxMTYxQTI5NDkyRjBERjQ0QkE5RTFDMzBFMUU4OENENzA4QTVEMjdGMkIzNUM0NTA4NUEyMDBFOUY0MkYzNDBCMEQ5QjNBMUEzNTRCMUY1RjZEMEQxQTc1NEQ1MURGQzM5Q0IyRUUyMTMxMTJERgorIDExOiBFMkVGN0EwQTY0QTNGMzg0Rjk1ODIzMjAxODIzQkM5NTA2MDcwN0YyNzNFMzk1RjQ2RjNDMDYyN0UxQ0QyQkNFOTdEQjI5ODRDMEVFN0ExMUIyMkU2MTdGMENGNjRBM0Y0NEJFOUZENkIzOEMzQTA3QTUwNEREQzFEMzNDNzNCNAorIDEyOiA2ODFENzJCOUJDQTQ0NjIwMEJBNzU3OEUwMzhBOEZDNDE4MjI1QkU1RjAyRDhEQTNDRjA4NTE4MjYyOEI3QkU1ODdEQ0FENDg1MTg2M0NFMUNFODY1M0U0OTE2MDQ3RjhFOTJFOTFBNkIwRDdGRkIwNjVGMzE2REE5M0M0RjQ0QQorIDEzOiAyQ0M4MkYyMzdFQ0MxQjlCMEI5RkI3NkU2Qjk2NTFDNTZBRTU3Q0FBMDcyQTBDMjBCOTY4RjJBNzRGQ0E2QTk3NDlGQTI2NDMzMUY0RjI2MTJBRTBERjMyODEwQjBDQUU5NUU1ODYxNDczRjQ2NzU3NjY0NTlCNzM4MEY3QjlBNworIDE0OiAxRjM4MThDRkIwNEFBMzg4MjQ0MkZERjFGNUNCMERCMkZBOTYwNDIyOEQzQ0NBMUYxNERBMTZCMzVEOUIyMDcxQjM3Mjk5NkExNzZBRjA1OTJGMDAxNzVFRUE0QzE2QTZFMDE2MkRFNjJERTMwRThBODBGQTY2OUZBRTlBMzNDRAorIDE1OiBCRkU0QkY4NjhBOEFGRUQyODlERUQ1RjZFN0IyMUU2ODU2MTA3RUJFRkFFQUI1Q0Q2NDRGQjU2MzQxODFENTJEOERFQUEyMDNDNDY4QUJEMjc5RTlCRTczNTA3QTY5MEMwQjcxNTg2OUY2RTcyMkM0NTEyRTgxNUZBNEVGNjQxQworIDE2OiBDQ0JBMzgzNEFDN0JGMDZCMTY2NzUzNzZFQ0NEOTZBMEY5MUUzRTNDNTg4QzVCRUUxNzExQTAwQzEwN0IzNUQ2MDNCMjBEQThFNUNDNUZCQTY5MzdBMjREQTUzRDhGNTVDOTA3RjNFNTNGMEYyNTVFMDgwMzk2NDI2RTdBREY5QgorIDE3OiBCMDlGNjg5ODY0MEU1Q0Y3N0I2REQzRDVBOEE0NDUyRjRGMUQyNUM5MEY3QUE1NUEyMDVFRkYyQzMxOUVDMEJFMjQ1Q0VCNDE5MEYxMUQ4NUMyRjcyMzRCRUI4OTlCREE0NjVDOTVBMUM1OTU2ODk4N0M0QzAyMEI5QTdBRkMwMAorIDE4OiBBQTdGRUVDNTZFMTZBRDc5OTkwQjAwM0FENTE2MjZDODdDOUNDQjkwRUJGRDc0OERDMjY4QzBDOEMxREVFMUJEQ0ExQzgwNjRGRTc1NzBBNUM2MjRBQTBDQjZCRUMxNjNFNjM2ODAzNzdBMTZBRDQ5RDFBRTE2NjA5MERDMEQ4MAorIDE5OiBGNzU1MzA0QTQ2OTREQkJFQjBFNTlCOTc4OTQzRjNENEU0MjlGODEyM0IzRDZDRTI3QUI0MDBEM0M0QkQ4MUExM0E4QzNDMEJBMEZBN0U1RjEzQkNCMEI0ODI5MDkzM0EwNURDQjQ5QTU5MDdDMDc0MDM5NDI3RjBFQzkwMDRGQworIDIwOiBDQjhCNTgwNEVGMDQ3ODY0NTQwMEIxNjU1REM2RTE5NEM4REMyNjExMkVGNzZDNTc4MjNBMDJGMzlDOEFEQjQyRjEyMjVCMTMwRkYwRDQwRjU4MERBOENBOTVEODJDMDQ0MUUzQTgyQzIwNkQ5RDhENkRCRDYzQjRCQjFCQ0NFMgorIDIxOiA0RUVBNEFGMjk0QzQ1OEJEQkE3RjQ5QUMwODI2QkMyOTVCQUY1QjE2RDE2RjQwRDM3OUY2QjdDMzQ1NkVGNDE0NUI1RUM3RjdDRkI4NTYzOEY2NDFDRjREMDdGRTM5MDREQTg5MUU2ODI4OEZDMTFDMEM3MkY1NDQzMDkxNTAyNAorIDIyOiBFQzUyRkM4Q0MwRjg0OUU2MzNFM0Y3MzM5MDMxRENCQ0VBQjY5QjY2MzREM0U1NEU3QzE1M0NDNjNERjdEM0QzRjkzQjEzQzhFNzUxRTc5MjkwRUQ0ODQ1RkFBM0Q1QTc5QTdERTZCMTAwRjUzOEUwRkZGNDcwQTUxQ0Q2MzBFNAorIDIzOiBENDQ0MTlDMEEzNkZCRkQwRkI0NDFCNTk2RTg4MjFEM0Y1NDNEODBGQzdFQjVBMzM4OTAzN0JFMDEzOTkyMTAyNzU3MTUwMkI1QzUzQkEzMEQzMUQ0QTA1M0U4MzBFNjEwQTM5NDg0MjIyOUUwODQ4NUEyMzc2Q0I5NzY2MzEzRAorIDI0OiAzRjRCREJDOEE0Qzg2QjNGNjQ2Q0M0NDVFMkNENTRCNEM3ODZCQUVERUU5RkQ5MUE4Nzk2NDBCNDA4NUQ0NkZFQkVFQ0VDQzk1RTgxOUVDRjZBQTkwODVDMjMwOUU3OURFMUE5ODhDNkI2ODkzMEFCQ0I5QkJBQjkwRjFDMkY4NQorIDI1OiBFNUVCQzAxNTI2OUUwRTYxQkJEMTcxNzYxOEMxNUQ0NDk1M0FCNkY4NTREOTYyQTA0RkU4ODg2NTYyNkRDRERFQzVGMDk0QUFFRENCNzA4RDk0N0E5NTQ3QTk4NUYwQjI4N0NBMEZCQkUzRkYyRUNDQzRDMEM0RkVFNEZFNzRDQgorIDI2OiAwMTBDNjIyREY4NEU2Nzc4MDUxMDhBMkM1RkIxRThCRjU5MjJEMzVDRkFDMjQwOEYyQUUxNzREMzUzQUYxNjlBNDAxNjk3MDlDMzlCRkU5MEU1MUIwOTVDOEMwRDI4ODZCNEYxMEIzN0JFRkY4MDVEMzg0RTI5Q0VDRTg5QzRDOAorIDI3OiAzRTlDN0JFOTZFMDNDNDhERUE3NzMyMDRFMUVDMzcyMUVFODE3RUQyNDAzRTNDOEY5NTBBNEM0NDc5NDk0MzgwMzdFMkFGMEEwMzBDREI5ODNEM0ZCRTVCODIyMjZGNTEwRkQ5MUNGODgzMEY1OTIxMkY4Q0YyNkMyQjVFNERGRQorIDI4OiA4Nzk3QzlDMTRDRDJERTNDQjFEMjk4MDhEQTlGMjNBNTUwMkE3QkE1Nzk1ODZERTk1MTNCOTgwRkMwNjk5MERFMEUyOTgzN0VEMDZFMjRCMTVERDAwMDA2OTc2NjZCOEQzRERDNTU2RDgxOEU4N0Y4NEQxMjU2OTdENUUyRjhGRQorIDI5OiA5M0RGQTNERUIzMjU4RkM3QzRGNTM2MkQzNkMyQUUyMUFDMDQ3MUFGOEI4OTVCNUFEMUM0MDdFOEQ1MEREQ0QwMTExQUY3NkVDNTAwRDdCRTAzNUU2RjlDRTkzMjE5MDcxMkEzRjUyRkJBNEJCMERGQ0U3NDQwMEM4MkQxQkQ4RgorIDMwOiA1NTg3RUY3QTMxMzUzQzBFOUMzNDZDODM3RUE2NDU3NzBCQzVGNUM1NDFCNzI4ODY4NDRCNEIwNzg5RkYxRDk1MTM0RjU1OEIyOTM4NUIzNTk2MEFGREZFQTdFM0FBNDA1NjJDMTI2ODNDQjdERDlBNDEwODczNTY1Q0ExMDg4MAorIDMxOiAwNTJDQjBGQUFCQjI2M0E0OTUxNkUzOTUyNTAyM0UyQTAyRENEQjJENUZDNzg5NDhFMDQyRTU5Rjg5MzYzRkFBRjE4NjlENDJFQzlEN0FGQjBEQURCN0Q0RTk5NTQ0QkVEQTkyRTMyNzA1NDQ5MDBBNTY0MUYwNTk1NzFCNjIzOAorIDMyOiAyRkFFQkYwNDlDQzRDOUMyNzcwRTg1OTczOUIxNzc0RUI2RTZBQzJFQUYxQUY3RDNFQjU1Nzc0QzAzQURDNEM4NjVBNjVDODJFNzk1OTU5Q0JDNEJGMDBBNjRBRkQyQUUwQ0NBMTZENThBRUI4NzRFMjUzRkI5RkI5QTI2Njc5MAorIDMzOiA4MkZCRkQyQTQ2RjIxMDJBQzI3MDg5QjY4ODkwMjRGQTkxNzJGQTY5MUMxRTNCQTlCNDRBMzk0RDUyRUJGNUE3QThCQjIzMjE3MDhFRDlBRjI3NzZEOEJBRUExM0E1RjJFOUVBNEFBRjQyMEEyNEI2RjU5RTJGNTgzRDU0QTc5NworIDM0OiBCMzA2RDE4MTYxQzc2NkRCREM3MzRGQ0VCMDhEMTQyNDhFQkNDNjNGQ0JCNUI5Q0MwQUU5RDY5MEUyMEU3MTUyRDc3MUIzRDYyM0Q3RUNBMUNCRDMwNUEzMUVFMTBDMjIwRkNEREMyQ0U3NkI1NzhFMkYxNURFNDc0MUU5QzlBRQorIDM1OiBGNTI3RDU3RjBBNUYxM0Q3RkM2QTMwQTg0QkY0MTQ3MTIwNDRCNTZGQjhGNkMxRTEzNzVBMDk3ODM5NjhBODUxREJENDk1RDUxQzY5MzU5MEU3QThCQjU3MEE3RjFDMEM5QURBQURCNzRFRjhFQzcxQTAwOTNEOEQxQTQyODVFRQorIDM2OiAwRDlGOURCNDNBMEZCNEJERjcwNDg3MDAyOTQzQTZDRDNCRjIwMDUxODUwMEI2OTM0QkE1MThCM0IwOTU4MDk1OTMwRUY1OUJBQzQ4Qzg0QzFFMUFEQjgxNUE2NTY5RkJCRTdFNjFGMDM5QkZEOEMyRjcyN0VGNDYzNjU0MkE1RAorIDM3OiA2MTRDRkIyNTc0MDAxMjhGQkJCN0I1NjU1MEU4NjE5ODE1NUE1NjQ3RkMxMTExMUZCNEQzNjA3M0JCNTdBRTREOUMwQTU0QkNGMERDREI4QjU0QURFNEZGOEFFNTY0NTgyMUNGOUM4M0Y3RkE5NDY4RkMyQ0NCNTUyRTMwQkVERgorIDM4OiA3MDMyNzI0NTAzRkE1QjA3NjVENjEwRDNGQTQ2MDlGNDUzN0Y2RUFCNzVEN0NDNEUyQTE1RDJCMTQyMTI5M0Q5NDExQzlFOEYzODk5OUY3RDY0RDYwN0VGRTk1MjI0MzMxRTQ3RkFENEY5QkRCNkFDMTlDRDNBREU0N0MxN0U3RAorIDM5OiBBOEU0MzE2MTI2NDc1QjQyOUU3MjQzMjA3M0NCRjI2RTk0REE0NTBEQjU1M0Q0NjY2N0Q1OTdGMEFBQ0I5OTMyNUM5RUREQjk0RjhDRTMzNTUxODU3ODI3QUYzOTM1RjJERkZFMUVFNjlBMjA4ODRENThFMDk1MzkwQzA0QjkyNQorIDQwOiBFN0U5MEIxOUU3NjAxN0VFODBFNDk3OUZFNTZBNDg4QUFFRUEwMTFERTlEQzA2OERCRTUzQUYwNkVENDREQTRDQTNCRjY2MjM1OEYxOTFGRTI4NDJCMDgzQkM1REYyRDQxODM2NjhGNEU3RkE5RTI3NTA4NjlERUNBNzMwMjIwMgorIDQxOiA4MThENzM0QTAyQTBBRTc2QTAwMTJEN0JGRTk4M0IxN0NBQ0UzN0Q0ODkwMjE0QzdDNTNBODFDQTlGNDJFRjBBNDcyMTAxRDYwOUJFNUQzREY0RjBBNTVEQUYxNTRDMjBBMUE5N0Q1MzExMkUyMkQxMzZDMDMwMDRGRTA5MTQ5QworIDQyOiAwQjlGNUIyRDRCQzNERjc4MUY1NUVDRUUxNDk0NzBGM0JGNjhGQzUxRDEyMUQwMjFERjBDQjhENEE1RURBNDJFQTY4NDBERDczNUFERjhERUQ3MkIzMjU2NjJCQ0VFQ0M2MTk1QUU4MzFEMTY5QTg5MUY2NjYzRjhEN0M2RTBEMworIDQzOiA3QTVBRTQyQzYzNUIyNTA1OThDNTM2RTUzMUZEQUExNzQ2REUyRUM3OTg0REMxQkU0ODhERTQ3NjZEMENENTQ0QUI1MUFCMUU2MkE4QTE3MEQxMjA5OTlBNjFDQzY5MjBEQjk2OTM1RjI5NTgxNzg1MUE0Q0UyODVEMjc1NTExMgorIDQ0OiA5NTA5MzA4NUNGRTUyRDc0NkM1NERERjhEMkZCRTMzRUMwMEQ3MUMzOUJFMDg2NUI4OTZDMzMxQzdFNTY4MkZCQzBERDg0RUQxNUIzRjc5MDE2NkQ1MzdBOUE2OEVFRTVGRUVDNjNGQzc2MUVCODU0MDE4Q0VCNjgyNDVDQ0I5MAorIDQ1OiA4QkExNzdDNDk1RTk4MzJDQThFQjU1RTY3RTVEN0YzNEM1OUM0QzU5RDU2RDUwQkY2OTgyQjM2QUMzNDFDQkZERkJGNUE5OEJCRUJDMjZBOTUwOUZCREZCMjM5MzEyREYzQjNENUJDRTcwMzg2RUYwRTU5M0UxN0E2MjFGNDFGNQorIDQ2OiA2REQzOUQ5NDIzNUQwMTJDODlGRDAzMDM0MTM5MkFFNDJCRTc3MDJDNEQ4RTcyNUM0MjI5OTQwQkMyNzNFQkI4RURBN0E2ODkzQjRGRjg2RDFFRjg0REZBMTE5MDU4QkM2QzhDQTQ3Njc1NDkyQTBEMzdDODU5RTZEOUJENTQ3MQorIDQ3OiAxM0EyRkJFM0RCQUVGQ0FDNUFCOEJCQUY5MUJBRkRFRjVGRTM4QjdGMkVCQThCRkYwRjQ0QjRCQkIyMzY2MTNCOEJCMTIyQkVDQUQ5ODUyQkY3NjM4RTQ4RjBGQzY1NkY5QzQzMkQ5QTY2QzExODhERjNGRDFEMkE4ODE2MTEzOQorIDQ4OiAzM0I5QjdFRjYzQjMwMkMxQzc5RTBBNDNENzc0ODdDNTVEMzhDNTNGMjlDODAwQjRDQzI4N0E5OUE0NDA0MzUxMjFDN0VENzhCRTc0MDYzNDlFNjVBQUY5OTFFQTBFRjE5RDA2QzFBRkJCODE0RkU0RTBCRDY4NjEzQUYwQzc2MAorIDQ5OiA3MjBFMTAwNUFDRTI4OTAzRDlDMkI2RURFMDJBNTJGODk4NjA3ODhBRkIzNTIwOEI0QjdDMTQ3RTQzQkFCM0QwNjQ0NURBMTM4NjA2RjMzNDYyNEM2MDZERkYyODhCMEM3MEI0ODc2Nzk2ODVEMURERDI2RjFEQTBBNUY2ODM5RgorIDUwOiAyQTc0MkYxRThDRTZDREI1MDFFOEFEOUJEMjU2Nzg2QTQyRTdGMTg4OEQ5ODAzQUE4RDU3NTA4MTdCM0VBMTAxMzMxRDcyNjYyOTg5NjJGQTI4QUYyMjMyQkY5NTZGQUM3QzFDMEIxQzNERTRDNUIzRkRERjhFNjNCRUIwMjE4NQorIDUxOiAwNUNGNjM2MUE0QTIzODA5MUExRkQwMTEzMzZGN0Y1M0I5QUNGNzhCQTFCOTY5OTdFRTQ5Qjk5RkUzNkYwRjExNjNFMDRCNDQ2RUVGQzExN0IzNzc1OTNFRTA3OEI4NUJCOTU4ODkxOEM3NjYxMkUyQTZGOTUxNUUwQ0EyNDRCMgorIDUyOiBGNTEwQzg3NzU0NkZEMkQwMjIwNTEzNjRBMDlGMjA1MTUyM0Y4RTdGRENEM0U5RDJBQzUxNTgyMDVGQjM2Q0YyNUE5RTBGQzM5NEVEMkZBQ0E3Q0I0RjA2MzlCMzNCNzA2RkQ0RDA3MkQ2MkY2RUIyMjlFNEQ3ODc5REZCNDVDRAorIDUzOiAyNjY0NDc2RDk0Nzc2REI1MkJBQUYzQjJERTA1QTM2RDNFMzVFRjQ0QUJCNkYwOTY3MEYzN0VFRTAwQzJDNTRCMzhGNzBEMDYzNTlCMjBGN0U0MEUyMkI0MjkwMTg2Mzg2NEVGODlFQTQ3M0ExRjNDODM0RDIyMTc2RTg3RTYxNworIDU0OiA2MjYyMENCREE5MkVDODI0MUREM0E2QTBFRkIyODI1NEIwQ0VCRjNFMjM1MUIxMENGOTMwMjkyNDRBNkEzRDFEQ0UxMEQ5QTg5NUVCNkU4QTMzMTA4RERCQUE4OTdERkYyNzAzNzU3REEzNzA2MjA5QTc4NzFGNDI3NDkwMUUzRgorIDU1OiA1MTI4MkE5MEI2Mzk5OEY3QUU3QURFNDc4N0Q5NTc5OTJBODFEMzAwOUQ2QUM1QkY4MjRERDE1MDdCNTNGNjkxOEU5QUI2QUExRjM2MzczRDVFNUQzRUY4RDAxQUY5RDA1RkJDMjI0NzgxQzYyQzFEQ0I0QTIwODlCRkY1NDk2RgorIDU2OiBGRTFDNDM5NEFFMjZFNEI4NTc1MjA0NURCMTRFMEFEMzc4NzI2QkMxQzk4NUM4ODA1MjIyQjYxNEM2MjcyMUU0MEIyQTBEMjE5ODNGRjQwQUFDRThFNUY5Q0Q1N0JBNjJDMzdDOEYwOTY4RUUxMkZBRTE0MjY3RDZBRTkwNkE3QQorIDU3OiBFNTcwRTExODNDQzZBRDdBMkM3M0Q3RDBFOTZEM0FFMDYwNTAzOTYwM0I2RjY0NjdGQTVDQTYyRTRDMTQyNEJDMTRCMTdFOTYxNEYwQUNBQ0NBRkMyQjFCMzlEOEMwODFCMDVERkUyQjk3OTZGMzJDMEM3NDJGQjA5REM3QjhERAorIDU4OiBFNjkwRDY2N0E5NDM0NEUyNjdBNkVBN0YzRjdBNkE1Mzg1Qzk2MUJCNjEzOTgwMENENTI1N0JGRDZDNEE2NzJEQjU3NkI1MjMzNUQyMjE2MEEzNzI5ODdENjUyNzQxRUMzQUE5NDM5QjM1RDg5NzVBRUE0OTY5OEY4RDU1MjhFOAorIDU5OiA1OUZFOTc3RUMxRDk5MjdGQjA5Mzg5RTNEMzEyNzJFNjI1RjA4OUFBNzU0MDFEMUI1NDFERENFOEM2OTgzQTM2MzYyMkNBNEYyQUE5NzQxRjBEMTQ4NDE5NUNBMzFENkQzMTVERjZCNjZFNzQ4ODhEMTExRkVGRDI0OUZBMDE3NAorIDYwOiAyQ0FBOTkwRDA2ODE0Q0E3M0FDRUZFMEQ5QTgxNTU4OTk1ODM5ODk5OTcwN0JENTJDMzc3M0Y2MUIyREMyRjIwRUU3QUI3RjY2RDY0M0JEOTY4NkM0QzQ2MEFGNDVENThCRTlGOERGQzFCNUNGRTNBNUMyREMyQzkzRDk0OTFBMworIDYxOiBGMTk4RTkyMzhFOTU5MkE5N0RERkUxQjBCNTZERTVEQzA1RDM1ODk0MDY3MkQ4NEYxNUUxQ0U3MUVDRkQzODU0Q0REMzg3NjJERjExRTE4NzFFRTYxNUVCNjA4MEUzMjk0OTVCMzdCMjM3MTBEQ0E5RjQxNzlGNUY5NUYzRTJBMworIDYyOiAzRDdDNDU2MDM1MTBDNjkxNjIyNkIxOTJDODFCOTBFQzIxM0QzMEMxMUFBMjFDODUyMDQzN0NBNTYzOUQwMEVBQjUyOUE0QzQ0M0M5QTM5QzVFNDBERkVFQTBGNjg1QjNEMEUxMjc3QkVCRERCRjgwQzNENUY5QzgzMjY3NjVEOQorIDYzOiBCQTA4MUNBMTJGRkJFM0NBOEYxRTI3MDNDOTY1ODc2MzRGOEVCM0JBMTQwRjkzRDk5N0I2RDBGQUQxQzE5MTVFQ0Y3RDc3Q0MwNDIxRTYzOUIwODM0NTFFREE2MDU1NzFENjhERTgxRTdBNEJGQzE4M0Q3QTUzQTA3MTIyMTY4RQorIDY0OiBDRUZFMjIwM0Y2NDI4RDI2N0NEMkUyODRDM0I4QzMxRTE5NDY1NThBNTZBMzMyOTE1MDgwOTNEQ0JGNjRGRDVGQTREMzNGQjcyM0VENDlDQkEwMkQ5Nzc0MzMxMjEzOEZBNzdBRTk2MEVERjU5MTBFM0FEQkQwMkIxMjAzRkQ5NworIDY1OiBERTAzNzkzMzZCMUM3NDIxQUI0QTdGNTcwOEJBQTNENEUxNUNFNzVDRUVCOEM3MzQ5MjY1RTcxOTQyQTk2MzIxNjU1OUZENjI4QzUyRjcxMzU2MTM0QUMzMjhEMDMxNUFDQjYzQTA2MzgyRDQyNTFBMjgxMjczODBDQ0VCMDhGQQorIDY2OiA5NUZEMzM5OTI3MDQxNUE4MEMyRjI5NTk1N0MwQkQ4RTMzRTM1QzY3OUMzMUIyMTE4REZBQkQ1NDJFRjAyRjZFMkU0MzI1NTlFRDQwNjY5NTRBRkJGOTBDOTgyRjYwRDczREE4QkNDOTRERDQ4QkVEQkIwMEE4RTQ1OENDQjZCOAorIDY3OiBERTQ5QUQ4MjYyRUFDRjczM0I1NjdEOEY3NzUyNzExRUNCNUQwRkY1Q0IxOEU1QTk5QzZDMzU0NDJFNjUyNjQzMTQ5QTUxQzgyMEU2RDQ0ODFBRkU2M0Y1QjY5NTUxMDVGODE3M0RBNTdERUZBMzkyRTQzRjcyODU3OTlBMzJCOQorIDY4OiBCRUQ0MUFGMDczM0VFRDg1QkIyNkU4QTA2OTQ5QUZBMUNCQ0E5QkE4N0MwODVCREUyOUZEMzhGOTQ3MDlGNEFDMjAzNjBGN0M3OTU4NDU3RDJDNDlCQzVBMzhGQkEwNkQ2QTZBRjc3QUNDODgzNzgzQjM1NzAzMkZCQTlGOTNDRAorIDY5OiBDRTcyRDQ3NUQ5ODNFQjVFNTI4QzRENzFFRUU0OEVGMzM3RTE3MjNERUZERjE0MjU5OEU0Q0VCM0IyOTc4QjFCNEUzNkE2OUVBQjZDRUU4RjNEQjJFQjM1M0NCRDI3QkY3RDQxRjczRkIxODRDQzg3ODVERENFOEVDMjJFOTc0MQorIDcwOiAyNEE4QTdDNzU5RjU5Q0QzREUyRTNCQTk1M0VBOTc1QjYwMDc5RDlCMzMxQUVDNEQxRjQ1ODZGRkFEMTkwRUY1M0MyRUM2QkFCNTY2NjYwRUI1RDY1MkQ3RDU0MjY1Qjg1ODRDNkJCRjk4NjUzN0Y1NEY5RDhFNDA2OEMwMUY2NworIDcxOiBBN0NCRTcyQzk5RUVFQUNCMzg3RDQ1MzJCREI2NTFFQjQ2QjhEMzBBOUQ1REI4MDk1QzlCMzQyMkQ5RDVDOTQ4MEFBODIwQ0ZBRkU0MDQ3QUEwNTQ2QzAzREJGMDc0MjRGQ0Y3QjgxMjI3NEIzQ0RGREM3NkI5RkJCQkYwODE5MAorIDcyOiAxNkQ1MzZEMUQ2NzNGNzREOUUyOThCMTZBRTY1QzY1RTQ2NzEzMUZERTVCNDM1NkZFMTZFM0ZDMzY2MjRFMTlGQTdCNTU3MjcyNDBDNTFDMjA0OTFGMzEyMkExQUIwNzNCOThFMDk1QTI0RjRCMzI2MEVCRTUyMTFFQTJEQ0IwRgorIDczOiA2OTIxODlDMUZGNkRBNTg2MjY1NzYyM0JDODYyRjUwNDFENjNBMkExRUM4OTg2MTM5Q0NCQ0FCMTE0NDI3QjFBMjUwMEIxNTJDQzYxMUM1RDU1OTlFOTc5MkYwMTRBNjQwRkJGN0M2RDk0NEVEQTgxMUNEOTIzNzQzMjZCMkM1MgorIDc0OiAyNzNFMThGNEI5NEU2MjQ5ODhDNDdDQzQ1ODIwRTQ1NTJEQ0M1M0JCNDBBOUEyNEY3NDRBMTRFNTZGQjFEQUREM0VBNDA4N0E3ODVBRURCNTQwMEE2NTk3MTcwOURBMUFBQjlDMThFRjUzNDA4N0VBNzNBMUZDOEZEQzg2NTE3MAorIDc1OiA4RjA0ODIzMEIyMDI3NDNGRjFERUJBRkVGOENDOTMyNDQ2ODdBNThBOEU1RTNFNkY3RDg1MjM3QURCQzcyNDY0MTQzMTc4M0U2M0ZDOEVGMkZCRUY5REU5Q0Q1MEM5RkIyOTQzNDE2NTQ3MDZEQkVGRTZCMDVDQTg1ODhFMUEzQworIDc2OiA3QUVGNzcwMTQzOUY5REI1NTZBRDNCMTY2QjBCMjVBNTE3OTU2MzhBODNFMEVFMjVFNTI0NEJCRTlEMkU4Q0I2QTgyNDJEODFFNzhFNDkwNkFDOUNBMEFENEZFQ0QxMDA2RDg5QzVBODU4MkQxQkY1MUMyNzhFRTdBMzU3MjMyRAorIDc3OiA1NUNFNzE4Rjc2ODZBMDY5MkIzNzI3QkI1QzI0QjE2RkNCODdEOEU4RUM5NDNBODAyMzZDRjNFOUIzN0E0QTIwMTk0MjQzRTQ2MUI0NTNDRjAzQUQ4NDZBMEIzMjg3QTIwMDVENjYwM0Q1RTA4MEQ3MDBFRDJGQTI1RjBGQ0E4NworIDc4OiAzMzc4QjA3RTA1NjNDQTdCQ0I5MUYyOUM4RUNBODc2QUQ3NDg3NjA3NDhBRDA3REUwMjA4QkFDMjI3RTBFRUQ0QTQ4MzRCODg3OUYzREZFNTFGRkEyN0I3MEFBRDFGM0U5RkUxNTg2QjFENkIyQjk3NTdENTQ1RDlDQzVERkJCMgorIDc5OiAwNDBFMUVDNzY3Q0REODVGRUVEMkFDNjc2N0YwQjNDMTdDRTQ1NzlGRDk1MjUyMTNBNjgyQTlCNDlFRDAzOTc5MTQ0Q0NFMkI5NDAyNkFBRjdENDAxMzU1QjkwQjI1MjU5OTU0MTYzRTBDOTczOUNCOUU3NTYxNzdBQkEwNTNDRQorIDgwOiBEMUNBRTBFNEZCMjQ1QzFBQzI3NjU5QzJFRTg2QkFEQ0UyNjIyOENGOEVBMjRBQTYyQjY5OTk1RkYwMkY5QTU5QjFBQ0MxQzk1OUVGOTFBN0I2RUM5MEVBOUQ1N0Y0OUNEMEU3NjIxRDA5RTQwMTY2NzY5NTNBM0Y5QjlENDBFOQorIDgxOiBCNDFFQUMwODUwNzk3OTU5QzYyREEyNzUwRjJCQ0FFQ0NERkJBQjg0M0Q1NkMwMzRFNEUwREMxNUM5NjFGQTYxMUM1MEYyMkJCQzEzNUU1RDk5REM0RTRCNzYzNEE4REY0QjAyNjI4Mjk1OTNBOEE4NkVGNkMyNjVEQjlBRTkwNworIDgyOiA2NkJFODJGRDE1ODI3MzZEMERFNzg2MUQ5REY3NDcxNTY1OENGM0NEMkJDRUQxMjg2OEVDNEQ5MkY0QjAxNUI3QkFDQkIzMzFBQ0E4RDU4Mzg2QUU2QjA2NDJDMzc0MEJGNUYzQ0IyNkU3NjU1MTU0MUFENTdFMUMzMDNENDUyNworIDgzOiBDMzhCQzI2MzlBRkVDMTk2NEM4OUNCOTJERTVFQ0I3OEUwQjI5OTRFRjM3RjgzOUQwQTYxRUE2ODhDQ0VCMDY4QjFBNTkwRDZDQ0M5MjlFRkYxMTQ1RjVBNTkyNUExN0JGMkZDMEFEMzUyODAxQ0I5MjY1MUYwODM1MkE5OTJENQorIDg0OiBCNjk5QURGQzI5QzU0RjE3OEIzRUZGQkY4RkU4QkZCQ0Q3MjJGMjk5N0FDMzA3NTRBOEZDNUNDNkQ1MTM1MkFGRkY3RjMxRDdGNzFGRDlEMTM2RTc4RDFDMUUwNDBCMDVFMjVDQ0I3NUM3QUVFRjcxNDAxOEY1MTY2M0M3QUQ5MQorIDg1OiBGREM0MjA3RTk3RDEyQjdBOEQwNUY1MDczRDQ3RUYzMkJBMzI5NjE1Njg1OTlFRDM0Q0ExNjBGMkVEQzg3NzI2QzUzMDg3NzExQTYzRjZCQjdFODQwRjMwNTQ3N0I5MzFEMUNCQzE5MzlBOEI4MDIwNTU2NUQ0NTM2NzVGQ0ZENworIDg2OiAwN0UxRERFNjQ3OTBBMjc5QjY5ODczQzY4ODdGQkZDQTY5Qjg3Qzk3QkMyNUI5NjlFMkIxNjA0MENERDIwNTFCQ0Y0MzYzN0Y0OTBFRjFCMDUxQ0Q4ODJCNjRFMjJEQTU1QzI1M0E1RTc5NjUyODUyNkVDNjJBMzA1RkIwNTYyMQorIDg3OiAzQUJFMzUzQTQyOTFBM0EwRUNGMjA0OTk0RDQ5NDQzQzFGQ0M2MEM4MEJGNjA5NjAyNjU1MTA0ODUzM0UwMkM0NzVCOTA1MDQ2Qzc3MDhGNDg1MjY0NTE2OEM4ODEyNTIyMTUwNEUxNzRBOEI3RTY3QUU0MjRDMDA3NzE2M0UwRAorIDg4OiAzMzc5MzY5NzE0MDE4MEEwNERBNzJDMEY3NEUxRjg0NTEzOTkzN0NENkYwNUFGNzRFM0YzQzUwMzFEMUQyREU1NzFCRDcyOTE2Q0JFNjc4NTlGRTUwMUMwRTU2MzU0QzEzNjBFM0VCQzM2RUJDMTFEMTFDMUVFMDhEMTU4MjQ3QworIDg5OiA5RTVBMzg2QUE5QzRDNUEyNDE5QjkwMkQyMzlFNDlFRDg0RTU0MkE2Rjk0OTg5NUM4ODEyOURGQzI4NDRGQzc3RkIxMzI1OTJDN0MxNDc0RTYxOUM1NUZDMjgzNUYwODEwRjIyNzc5OTk4NDc3N0NFOTlENTg2QzE1OEM4RjlFRAorIDkwOiA2RTBEOTg0MUMwNEJCNDdERUUzMEY2QUI0MzBFNTNGQTE2Mzc0MjFFNDYwQkJCRDdCQzhFQTE2N0I5QTM0MUREQzVFOTMzQjY5ODNBMDI1MjI2QjFGQjNDQzY2M0VEQzM0NzdGOEYwQzhGQTEwOUE4Qjk3QjRCMTdBRjNDMjc3NAorIDkxOiBBQTAyMThGRDU0NTMzMzE0RjYyMzkwQjhDMDIyMTlEMjY4MDFDMjQ5RDM5NEUzMzk4MUUzQjg1M0M1NzM1RTMzMTgyNkZBMDI2OTdERjU0QzkyNjhCODkxNTkyREJEODc2RTI1QzhEOTg1REU4NzUyQURBQTBDQkU1NUFFN0ZGQgorIDkyOiAyMzkwNUI5MjczQ0ExN0Q4MEQ5Qzg3N0RENzgxNTBCNTM4Mjc0NDg5NkIwNzNEQzYzNjYxOEM1NDA4NzZCOUJBNTFFQzYwRjVFNDVERDUzQkUyMTBCNjA3NjU1NDIzOEEzQjVFQTk1RENFMzQ4MUYwRkNGMjgyNUI4NTJCREUzRQorIDkzOiAxODE1RDFBQTQwMTg2MjZFQUZGMDUxQUZCQjkyRTkxRjZENkQxMzZGNThFOERCMTYwQzlFODVCRUMwMjdCNkNDOTJGMEYwNzYwREZENzIyQkUxMkE5N0Y3RDI5RUVDMzQxQkQzMDlGMjMwQjU1QjgxRDE0NkI0MDlFQUVFQjdEMAorIDk0OiBBMjM1ODc4OUEwNDc5NUJCMjBEMkVEQkY5NUQ1REEyOEExRkJBQjMyOUY5OURGRDBCMTAzMzA0Rjg2OENFNUFBMkRDMUY1MkZFOThDQzg0RUIwOTVCOUM1QUNCRDZEQzA1RkQwM0NGQkIzRjFEMjY2NzVEMEE4RjY1MkQzODIzNgorIDk1OiAyQzRERUYwMjgwOThBMDY4MERGMTVERUJGRTZBN0ZBNDJDN0E3RDc1Q0Y0MTAzNDBBREQ1MjU3MDM3RjBCMkY5OEZCNUEwNjgzNjFERjMzMDEwRkQ0OEE0QjQxRTBFNDBBMjczMEZGMjE0OEM0NUZBNTY4RkFBMTgyNTg5QTU0MworIDk2OiAzNjBGM0I2ODE5RUFGRDlCM0Q2QkM0NjlGNDI3MkY5NDU4QzA3OTE3NTlFQzExMzZGQUQ1MDBGM0ZDQjRGQTA1OTgyMDQ2NjlFODY1RDdENUY4QzI4OTA0M0EyQTFDQ0I0N0Y1NUNFRUZBRUFEOThDN0ZERUYzOEZCMjJEM0EyOQorIDk3OiAxQ0IyRTk4RUU4Nzk1NzYxRURCNzU3OTU4M0VGODZFNzIyM0EyMTA5MjY3RTUyMzQ2NjNCQ0FBRjlGQkYyOEVBRTM1RkUzNjJBRTlBRDA3NTAyM0MxRDM2NjcyMDAyRTA4Q0IzNjE4OUE2MDNDMTc0RDczQkI5NDg5RTEzMzU1RgorIDk4OiA5QjNGMkQyQjJFM0QwNDAxMjI5RjExRTZERUQ0NTFBMTI4OUM2MzExMjI2ODRCQjMyQjhDMDQ1MDA0M0VEMjI2N0FBRUEyMEU5NTBGNTJCNDRFQTU5NDFDNTA3RjM4RDIzQ0E3NkUyMTI1OTNCNjVCQUIzNDc4NDExNzlCRUQxRAorIDk5OiAyRTI3QzUzMzI0MDE3NjI2RjdFRTdFRTI2QkIwQzg4NDUwQjNEODgyQzJEODgyMzY0N0VDQTc2NTBDQURERkYzRTQyMDFEN0RGQTJBMDdBNTFCOTM3MkZDQjA0QzFBNzlBMjY0RENEM0QyNjBERTEzNUQwOERCQUJEMkM1ODY5QQorMTAwOiAwQjNEN0ZGQzVEQzFDQjE4Qjg2N0Q5OTVFM0QwMkZCMkZCQTBERTI3QkNDODVFNDlBM0IwMUM1NTgxRUIzQjE0QzE5MjU0Qzg3RDkyRDJFRUY5NTJDOThFNEU2RjUxQzk2NjJDREI5ODJCQzk1Qjg4QzExQ0IyRUVDRjAzMjU3NgorMTAxOiA4NUMwQjlDOEFCOEM2NzBDMDFFMTc5RjQ5NURFMjZGODE4RUU3NzJBQUY2RkNFNEVDQkRCNEZGQURFQjFDRkQ4RUE4NkU0MjAyMEI0Nzg5NDMwMTkyMEI4NjA4MkRFNTJBN0U3Q0RDNkRCNDkwNEY4RjBEMzgzRDlDREEzMTJFNworMTAyOiAwQzY2MzdEMzk5Q0ZFMjczNEFGN0I2M0Y4MUI3NDkzMTU4Qjc4NDJFM0M1QjcyRTZDRUE0Mzg4QTVDNkRCNzIyMkQ0NjcyN0I5MkZCODJEODg1NTFBMjI3NzAzQjhCQjZBMUFBRjQ3MjQ3NjYxRTA3NENGNkFFNDI3N0Q1ODZEQgorMTAzOiBEQzU0QjRBQkJCNzk0MkM1MDJCRjMyNzVFMzc1NzA5NDdGRjcxNjJCNjgzMUFBNDMwNTY2RTY5QUE4MDY1OEM2RTc5MkI3OEVBMDgxNjExMjU2QzY0NTUyQTlFMTVBNjYwMDA2MzIxMTZBQzgzNzY5QjdDNThCODA5RkQ5NjAyMQorMTA0OiA1MzIzNzI4NDhEMEY1MjU4ODRFNUFDRUQ5QTcyN0U5NkE4RDkyQjQ4NERDMkQ0MDg5MjA2QjAwMUNGOUVDNTI5MDJFNDlFNkZEOUZERTYzNDk0MUJERjVBQTJCNDVCMDc4N0QwQjE4M0I4OTU0NzBCRjFFNzlCNTdEQzk3NkVFMAorMTA1OiA0QjZDRUI1QUEyMTc0RTY0ODZFQ0IxODUwNDQ2MjlCRTZDMjgwODA3RjEwMkNFNTJEMkNFMkRDQ0NGRTk2RTU1ODZBNjg4OERGNzUwMDYxNDg5NkM5RkU3MENGN0JDODNGRTc1NUU4ODE3MEIzRDM5RUY5QjIxOEJFODA5RTQ5NQorMTA2OiA2RDUwNkI0QkQzRjA3OUVGNDgxOEZDRkRBNTE5RTdFMkFCNkEwMzI5MzUyNTcxMTE0MkMzQ0RDNTIzNkE3Q0Q4MkE4ODBEOUNFRENCQzA4OUY3QTNENUQzRTQ4QkQ3NURDQ0E3QURDNTNCMTNBMkZDOUNBQzgwQzAzN0YyQ0U1RAorMTA3OiBCOEFCRTMwODg0MENDOTAxQzZDNUZEOTA4RTI2ODA4ODZBQUEwQkRGNzA4NUMxQTZBQkMyNTcxODZBRkM1MkM1MjI1MjhCRDdCRjRFODI1NTNEOUU2NENCRUUwOUI5MzE4OTk1RTEzNzE1QUIxRjc4MDlFRjE4NUU4NDczRDcwRQorMTA4OiA5NzkwQTE5OERBNzYxNkY0RDhBQ0RFNjhERTE5NjM1QTU1NTg3NEVBRTc3QUQ0RUNGRUY3MjA3REMzMDVENDc1RkQyNTBGMzA4RjQ2NkIxODk0MjVBQjZBOTcyMkQ3NDRBRUYxNDU0MUZFQjgzNjk4OTQzRTg3RThBMzlERjgzOAorMTA5OiA4MTY2NzhGMUQ3NDg0NjYwRjQ3MDFDRTc3RjRDNUUxM0U1REZBREVFNjYyMjQxMUJFODZEQkE0RUI3MUExMTBERDEwODdBRjdEM0YzN0I4RUNCMUI5QzQ0QTNCRDVFQTczOTAxQzIxQUFCNTFFNTY5RTYxRUZGMjVCNUU5NTVGOQorMTEwOiA1MTg4MUZGNEIxNTBFREMzNTQyQ0ExMkNFNjU1NEE0MDQxNUFGRkFBMTE5N0ZFN0NBNEI4QjA2NUE0RkIxREMzQjkyNEE0NDRDQTMxNzc2Q0VENTI1MTRDNTI1MjYxMjY5ODk1RUJEODU4NEMyOTc0N0Y4RDUyNzIxMzUzNEU0OQorMTExOiA2RDg5MDJGMjg1MDI5RUU2ODNDRTE4MDNCMkQ5QzZCRjZFNEI3QjU5QzBBREJGQkNFRDMzNDY3ODJBMzU2NTJERTNGMzA0QUJCREU5RjIyRTQ5NjBERjYwNDk0MzExMzlFQzZBQTAyM0VFMkIwMTNBNDI2REI5QTgxNkQ5MjY5OQorMTEyOiAwNkU1ODQ3QTA2MEJCQzRGQ0UxMzc1RENDMTVBRUFGQkY1MTRFRTFBRENERjQyQUZGOTMyQUEyNzdEQzA5RUY2MTQ2NTEyNTVFMzVDNDk5RDZCQTFCQjg3NUVBM0U4MEY4MEFBQkY4Qjc3MTBBQTU2OTZCMDU4QkU5MUI5OUIwMQorMTEzOiBDQjE4NTk1ODBEQ0ExMzU1NkZBQjc5MTU3MkU1MjNDMkU4ODgxMTVDMThDMDQzQjBFMzNGMjI2OEREMDA1NkY5QTYwRURCQjY1REQ5QzhCNTUyQ0UyMjk5RTg0N0VENDYxN0JFRjNBNDUzRUQyQUMzQjUzNjZCNEQ5QTY1MUI2MQorMTE0OiAzOTc3OEY4MEQzNDZFNTNEMUIwRTYwRkY3QjM2QTkyNjM5RDlFN0YxMTU0OEM5MzI2QTU5RDkzMTFENTdCRjA5RjMzQkZENkFDNTM1MkYyRjA0MUJEMDdBNkQyNkExODE0MTlGNUZDRDFENUZGOEFEMzhFNDg1REE3REJENTQxOQorMTE1OiBFNTA4QzlBNzdGNTNFMzZGNzZGMEU0NzdERkYwNzZERTgxMEY5RjE1OTlBMTZBM0VGRjE4NDAzMzJCMjZENkM3Q0M0MEUwM0NBOENDMjEyRkRBNzc2RjRERjk2OEZDRjkyQ0U0OTJBRUJBQUJENjVGMDY5RDFBRUJFQ0QxMUI3QgorMTE2OiA0NjU5RDBFMUY5RTUzMThEN0I5MkZDRjc3MDBDNDY3NDI5QjYzRjI3MTg4QzBCQTE2OEYwRDU2OTZEQzc2NEZCRkUyQzVFRkZDRjZERjExRUE3N0ExN0IwNTY1Q0FEQzA0Rjk1RkZCMDQ4NUNFNjkwMDE2MUI4MjYwOEIxNjQ3QgorMTE3OiBCM0RCN0ZGMkYwOEY1N0YwQ0JGMjE5NUJCOTYwMEU5QUU1RDg2QTE1OTIxRUIxNjRBOThEMjVENTU5QkFGNUZENzQwRDY4NDMwNjUzREU3M0YzMjc3NDI1REQ3N0NDM0ZCMENCNDRBQ0M1RkRFNjkzRDU5RDVGQTZERUQ4NDU5NworMTE4OiBDQTQ1NTk4NDM5NDZBNzU4M0Y5NDRENTFFMzFGREYzMkJCREJCRkMwNDk3MjQ0NTRDMDkwQTZEQjlDMzU2NzM5RjJCN0UyNTRDRjk3NDY1MjFEOTY1NTkzRkJCQ0ZCMjYwOTIwNjlGQkZCMEQxN0ExNTkzNDE2RDY5NjgxQjY4NworMTE5OiAyN0NCOEEyMTQzRDEwNzNBQzE3MDA5QzMxQjI4REI5NURDMTk1RTIwQUQ3RDI0NUQ4QUQ4ODA3ODk4OThGMDQzRjA1NjVGRTQxNDg1RURDMjM5QzcxMjlFNEI3RkI2OTNEOTA0NEIyQzNEMzRDNTY0OEU0RkQ4NDQ3RTg1RkQ3MQorMTIwOiA5OTgxMTQ5MEM3RkM4M0ExMEFBRDE5N0U5NUQzNjE4QUJGNTAxOEU5QUY3RUEwQUEyQ0MwQzc3MUZDMTFGQ0VGOUZENjA3MEEwOTYyQTU2M0QyNjBFOENDRkRCNzdCNDg3NDVDOEMyNzAxOEY5MTQwODcwRjE0NkYxMjRGRjE0QgorMTIxOiBBMTUzN0ZEQUQ3RTE4RjczMjE4MUNEOUVDOUJGRDM5OTNGQUY1Rjk5NEE4ODA5QTEwNkI1OUQxM0JCNzBGRDhEN0Q0RTZBNEJFREZBODA2QTlENDM0QUFCMDM2OERFODQwRkQ2NDM5NUI0QTlBODc0REIzOTQwNTcwN0FFM0FFMworMTIyOiBGQjBENkQ5NjIwNTVCNDdEM0E3MjM3MUJEQUY3N0JFN0JGOTY1RUE3RDUzMDE4Q0FFMDg2RTM1MzY4MDRBQzc0OEU3MDZFODk3NzJEQjYwODk2RUI4RkUyRUQ4RjU4MDg2NkJBRjMxMDhDQTBDOTc5MzhCNjk4MzBGRkJDMTRFMworMTIzOiAzQzk0N0Y0MTM2RDlFNzgwQTc1NzJDQTRENUQ3OTk4REQ4MkQzODkwQ0MzRjFCQ0I1OUE3RkUyMzBFMzFERTMyMkRCQTdDRjdDMURBQ0IzM0EzRUIxRjdFNzUyOTdDMDU2NTcwRDI4NDZFREY3NTZEMzZDMUFFOTJGOERGNjk1NAorMTI0OiBCQzFCREVGRkM2QUI3NzlBN0FDRkU1M0EzRjlERDU4OENEM0M3N0M3NDBGOTQ0QzY5RTMzMUMzOEYxNjI2MDdFMEQ0QTBDQTg3NEFDM0QxRDc0OTY1NDY4ODQzMTMzQUE5Rjk2MUZCRkNCRjU5QjU4ODE4NTc3MTMyQjg2MzE4MQorMTI1OiA1MTE0M0RBOEY1RDZFNjhFQzk3Q0UyMkE0OTYxRUY0M0IzQUI2NTg3MTEyODA1ODdEOUFDRUU3MDFDQTY1Q0FFOTBEMzRCNjZEQjUyRDc3OUE4RTJCQjYyMDRGRkNCQ0E5NDVDNkI5OEIyQzE3QzgzNzU1NTFGQUFGRTRDOEE0NAorMTI2OiAyNTUwRkNGNTQ4NzI2MTZFRDMxQzYwRkIzRkQ5N0I5QUVDN0EyN0IzQ0VDMDdENzc0RkNFNjk0RUQ5RDYwQzQzQTk2ODI1MUM1RjNDNUI1MEU2MjE0NDI2QjAwQzU1RDdEQjFEQjMxQ0ZDNEJDMDdGNkFDRUEyMjIwNTJBQjc5NgorMTI3OiAxRDhCMjUyNUU1MTlBM0ZGOEJEQUFGMzFFODBFRTY5NUY1OTE0Qjc4RTdEQUI4MDE3MjlCNUQ4NEMzQTdBMkIzNkEzMzgwM0Y1RTA3MjM5ODFDRjhBOTU4NkVDMUJFQUJDNTgxNTRFRkQ5MTlBRkYwODkzNUZCRDc1NjMyN0FBQgorMTI4OiA0QUFCRjFDM0YyNEMyMEZGQUE2MUQ2MTA2RTMyRUYxQkI3Q0RFQjYwNzM1NEJENEI2MjUxODkzOTQxNzMwMDU0MjQ0RTE5OEVFQ0Q0OTQzQzc3MDgyQ0M5QjQwNkEyRTEyMjcxQkNBNDU1REYxNUQzNjEzMzM2NjE1QzM2QjIyRQorCitITUFDLWNoY19oYXNoCisgIDA6IDA2MDdGMjRENDNBQTk4QTg2RkNDNDVCNTNEQTA0RjlECisgIDE6IEJFNEZCNUUwQkM0QkQ4MTMyREIxNEJDQkQ3RTRDRDEwCisgIDI6IEEzMjQ2QzYwOUZFMzlEN0M5RjdDRkNGMTYxODVGQjQ4CisgIDM6IDNDN0VBOTUxMjA1OTM3MjQwRjA3NTZCQzBGMkY0RDFCCisgIDQ6IDdGNjlBNURENDExREZFNkJCOTlEMUI4MzkxQjMxMjcyCisgIDU6IERDQjRENEQ3RjNCOUFGNkY1MUYzMERDRjczMzA2OENDCisgIDY6IDEzNjNCMjdFNkIyOEJDRDhBRTNEQ0QwRjU1QjM4N0Q3CisgIDc6IEJCNTI1MzQyODQ1QjEyNTNDRkU5OEYwMDIzN0E4NUYzCisgIDg6IDg5RkIyNDdBMzZBOTkyNkZEQTEwRjIwMTMxMTkxNTFCCisgIDk6IDU0RUIwMjNFRjlDRTM3RURDOTg2MzczRTIzQTlFRDE2CisgMTA6IDIzNThEODg4NDQ3MUNCMUQ5RTIzMzEwN0M3QTdBNEEwCisgMTE6IDk0QkFCMDkyQjAwNTc0QzVGQkVCMUQ3RTU0QjY4NEM0CisgMTI6IERGMTgxOTcwNzYyMUI4QTY2RDk3MDkzOTdFOTJEQzJGCisgMTM6IDMwNDRERkZDNzk0Nzc4N0ZEQjEyRjYyMTQxQjlFNEZCCisgMTQ6IDlFQTk5NDNGQzI2MzVBRDg1MkQxQzU2OTkyMzQ5MTVECisgMTU6IDFDQzc1Qzk4NUJFNkVERDNBRDU5MDdFRDcyRUNFMDVFCisgMTY6IDFBODI2QzQ4MTdGRjU5RTY4NkE1OUIwQjk2QzlBNjE5CisgMTc6IDQ0REIyQTY0MjY0QjEyNURFNTM1QTE4MkNCN0IyQjJDCisgMTg6IDQ3NDFENDZGNzNGMkE4NjBGOTU3NTFFN0UxNENDMjQ0CisgMTk6IDEzRkRENDQ2MzA4NEZFRUIyNEY3MTNERDk4NThFN0Y0CisgMjA6IEQzMzA4MzgyRTY1RTU4OEQ1NzZEOTcwQTc5MkJBQzYxCisgMjE6IDM4RTA0QkQ1ODg1RkVBOUUxNDBGMDY1RjM3REQwOUZDCisgMjI6IDVDMzA5NDk5NjU3RjI0QzE4MTJGRDhCOTI2QTQxOUUyCisgMjM6IEQxRkRCOUU4QUMyNDU3MzdEQTgzNkQ2OEZBNTA3NzM2CisgMjQ6IEY2OTI0MDg1OTg4NzcwRkNDM0JDOUVFQThGNzI2MDRFCisgMjU6IEM3MkIyNjFBNzk0MTFGNzRENzA3QzZCNkY0NTgyM0JECisgMjY6IDJFRDIzMzNFQkFDNzdGMjkxRkM2RTg0NEYyQTdFNDJECisgMjc6IENFMEQzRUY2NzQ5MTdDRUE1MTcxRjFBNTJFQTYyQUFFCisgMjg6IDU1RURFQUM5RjkzNUFCRUFGMjk1NkM4RTgzRjNFNDQ3CisgMjk6IDgyMEI3OTlDQjY2REM5NzYzRkZEOUFCNjM0RDk3MUVDCisgMzA6IEUxNEIxOEFCMjUwMjVCRjVERjJDMUE3M0MyMzVBRDhCCisgMzE6IERFOUYzOTQ1NzVCOUY1MjVBNzM0RjMwMkYwREIwQTQyCisgMzI6IDYyNUVEM0IwOTE0NEFERkY1N0I2NjU5QkIyMDQ0RkJFCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L25vdGVzL2xyd190di50eHQgYi9saWJ0b21jcnlwdC9ub3Rlcy9scndfdHYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NTMyNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9ub3Rlcy9scndfdHYudHh0CkBAIC0wLDAgKzEsMTI2IEBACisxNjo5MzFiNDBiOTdjZDFkMTMzOGQ0YTRhYmRmOTZkMWY0NQorMTY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYKKzMyOjg1ZTgyZmU1ZThiNDI2Y2YwNGJkOTZkOWFlZDMxOGZiNWRhZTg5YTFkZmI4NTRhMDlmNTU2YjYxYzVhYzkxOGIKKzMyOjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYKKzQ4OmRkN2FhZDZjNmQxMDE3NmUyNWViOTdlMTY1YmE2MTJhMmI2Mjc1ZDk3NjY3MTAyZjIwYWYyMGVjMjYzMGM3Y2NiNGY1NzcyYTNlMDA5OTQ4ZjFlYTkxZjNiYmFmN2UwNAorNDg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmCis2NDozMzg1MDllZDAyMWVlY2QyNDljYjE1Y2RkNDQwYTg0ZmY5ZDY3MDRiOTllOGU1MmU5ZDA1N2YxNTJiNzQyYTVlM2I5YzMxNDU3NDAyNmM3NmZjODg3ZmI0MDRhMTJkNjY5ZWVhOTQ2MGMxZmEwOGUxODY3YzJjMDI3NDQwOGI5ZQorNjQ6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2YKKzgwOjhhOWNiZmYzNjg3NGRlN2RhM2UyMGU5YTI2NjkxZWVmOTQ0ZmY3OGE3MjM0MTUxNWFlMjBjMjE5OTY4OGZmOTJmMDM5YTE5ZGM2ZDUxN2UwMTdlZjM2NjQ3ODM0ZGViZWU5MGJmODBiYTIwYTdjYWYyNDk2NGJjYjBiYjNhNjIxZjgyMDNjZTU0Mjg0NjFkM2VlNzJlYWQ3YWViMjAxYTkKKzgwOjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGYKKzk2OjA2ZWI2NmE4OGI5NjY3Mjk2Yjg2NDRjZGEzNDY0YTI3ZTNlMmQ4YjZiM2QwYTlmZmJlYmZkNDhmMzk2Nzk1MmNlMTYxZDg4Njc5MDBiMGE3YTQ0NjM4YTZlNDFiOWE5ZGM1M2JmMTgzYTg1YTRlZTMzYmI2ZjZjMmQ2NGI4Y2I1NGJmYmI4NjI1ZmY1Y2QzOTY1YWEwOGI0NjA3MzdiNTc1ZGEwYjhmNDEyMzc1MWNmOGYwYWU4MDFjNTg1NjcxMgorOTY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmCisxMTI6N2FmNWEyYjEzODFhOGJjNWFhMmJkZDQzNzBiODhkNjgwYzM0YmE5MzMyZDFkOWY2ZTIwM2M0ZDlmZGJmNWVjZTM5ZmU1YWZiNTg3MTQ5MGExODBjNGIxMDI2NjU4MjNkYWJlMTA3OTY1NmYyNDk2OWJmODQyNjdkMzI2NGY5MmNiYmM2MTBmMjYyMDM1MzZkMzg3MzMzOTM4ZDFhNTJmNDA3NmRmMWFhMGExMTRmM2IwMTgyZGExMmMzYTVkODdiZGM4ZWZmNTRmODBiMGQ1NmY3MDQ0YmEzNzJlZTYzNjYKKzExMjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZgorMTI4OjgxNGZlODI2NzRiOThkNTQ2NzE4NjllM2ZkNzA1Zjc2ZTM1Mzc2MWJmNjFjZmM2MzVmYmIyMzAzN2Q4YTBlMGRmYzEzYzZjMGUzNGY4Yzc5ZDQ0NDRhYzMxNGQ0OTE4NzczMjY1YjNmYjU4NjZhOTk3ZTI3MGQ1ZWE4ODkxZjAyMTdlYzY3NDlkZjI4MWQ3OTBkZmJiZWM4YWRjNTA0NDA0Y2MwYTZmMTFlOTFkMGVlNmMxOWFiZGM2N2IwYzIyZWE0ZDlmYTIxODMyMGE2OTRkY2E1M2NmNTIyYzc2MWU0MjZlMGNkNTdlNDliNzNhNWQ3NjVjYjRiYzU3MWU4ODgKKzEyODowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmCisxNDQ6OWZhYjk1ODRiMGRkODdkZjQyZjA3NTEzZWRhZDNiNWUzYTM1Yjg4NzEzMjNlZWQ2M2E0OGRlZDFlZmU0MzA4YTk4ODM1NzlmM2E3YWI4MzAyNzdiZGE1OWIxZjFjMjYxNGEyY2FiZTExY2RkODc2ODljMGJhZTgwZWJhZDAyYjc2ZDkzMDA3MDNkMDI2OGUwZWIwNTJkOTk1NmM1NjQ4OTEyODQzYjE2YmU5ODgxMzRjZmFmNjVmYTg3MDEzYWI5NjBiMTkwYWZlYTg3OTg5N2YxZmRkMDBiMzYwYjZiZmM2Y2MzNTMxMjg1NjgyODk0YjcwN2FmNTkxNGQyZDFhMTM2NDA3Zjg2OWFlNjY3MmUwOTZhZDdlOTVmMzgwZDUzCisxNDQ6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmCisxNjA6OTVhYTE2ZTYzN2YxNDQ5ZDkwMTIyMzdmNWZkOTVhNTdjNWE5ZTIwM2NhMGE5MzkzOTc1ZTU5OTFjYzU2OGY3YWQyYWYzMjY2YWI2MDU5MTVhZjI3N2Y0Mzk1YWEzMTI1ODZmYjI4YTE4ZjIyZDE2NDQ5NjMyMzNlMTEyMTQ3Mjk4MDIyOWEzOTQxYzJmMjQ3NThhNTFjNDhhYTIyYjYxZmE0MzEwZWQyZTYxNzVhNzFiZDQwNThjZGIwNzBmMmI4Mjg5YTQ2YTM5NjM2ZGJlMjU5ZWVmZjNjODdmOTZmYzhkNDY5NjFhYWM1NGQ3YTg0OTFiNWQ3MTNlNmNjMGQ2NTUxYjllOTA5MTE5NDdkOWZkMTUwNTFiYWRmNjc0MjAxODhjNDUwZjk5MTZjMmVkYWUyNDVmMWY2YTY3ZTRmNWMKKzE2MDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZgorMTc2OjVjYjc4MmRkOWUyMzkxYWI1NDM3ODEyMWQwNzY2YWZlNmQzNWVjZWY3YTJjYmQ4NWFiMDRlYTgyYjA2YjU2ZGRhYmQzMTE5MTcwOTNmZjE2YmMxODU3NDgwZjg0MDQ5ZDg5ZWM2Njk0NDE0NjE3YjFjZjNhMTE3NzhjMWNjYmYyMmI4MWJlNWYwN2VkNmY5NzhkZjUwODllNTQ1NjFmZWM1M2RlOTUyMDVmZmE3ZDU3MzA5MjY4OGZjZTkyY2FlMjI4ZjM0MmY3N2M1MGRmODc0MDRkNTAyYTliMjc0YmJmM2NmY2FmNGU5NGExZTg0MDE2MzBlMThiNzlkMDQ4YTVmMzkwMWFiZTgyNDkzZDkxMWQzODU4OTA0MDViY2FmNGQ1OTgxZGVmNjcwOTU1ZTk1YzU0NmRhODkzOWFhNjhhZWZkYTU2YjM3YWJkM2JkY2Q0NjY2MDVmOWJjYzU5MzEKKzE3NjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmCisxOTI6ZTlhNzc4MWM3NTA5MTBmMjY1ZTcyZWRmMDY1OWQ3NmEwZGIyZGFiODYzZjQzY2EzMTNiOWU2N2U4ZjlmOTdhMWFkOGNlZDY0MWM2ZDhkODg5ZWQyZDM4Y2FhNzg4N2VjMmViOTI0MjA5M2IzOWQ0NjMzNzAyNzMxYjk2ZTExZGE1MmIxYTlhNTg0ZDIzNjdlNmEwZTc1OWJhZjkwMmViOTA4YjQ0MzJmZmVjZDM2N2ZmMWZkZTQ1NGQ0YWY4NDRlOWExMGNiMjYwYWUyMjI0NDZjMTc5ZGNjODJiNWY3NjdiOTQxZjc1MTk2ZThjNGIyMTAzMTVkMDFiMDA2ZmE2YjVmMWZhZjkzMTU0OTA0NGIxN2IzM2Y1NjdiNzI5ZGRlYTExNWM3YjExYzkwOTgyZTE0ODAxMDFlOThhYWIyM2RhNjUzM2I0MDc3Nzk3MWI0YWZjMzgxNWQwNjNlZjE3NTQxOWRkNzJiZGRjZGM2YmIxODdiMzUxMmMzYmZmNTZlCisxOTI6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmCisyMDg6OGZkMzNhYzE2ZjhkOWJkMmFiMjRkMWQyNmIyNjdmNjcyMjJiOTMwOWQ2OTc1MDJiZDAwMWJiNDhiOGMzMjA2YmQ1Yzk4Y2MxY2ZmNzg4NjMzY2RhNGVkYjVhYWVkMjA1NTQzNWMyYzA5MmE3YzY1NTQ1NWQxZDAxYTZkN2E0NDlkZjg3MGRkNTU5ZTliYWUxZTBmYjBkNmU1YTk4Njc5NDAyYzI4OGI4N2NiZGE1NjljMzUwM2I0YWE5NDAzZjgwYzgzNWM5OTVlM2I0N2UzM2MxYzViODMyMWU4ZGIxYjcyOTU1Y2NiZGY2NDBjNzhhYWMzNzZlYzQ0OTM5NmIxNjNiOGQxNmI1MWIwNzQ5ZmFiNmJhNzFkMGI1NjNmZWY2ZTk0NzAyZjM1ZmYyZWQxODBmMGRlMWY4NjY3OWQ4ZjJhMjZiMmI5ZDhhZGZmYzdhZDExYzU5NDQxMThlMzAwMjVjOWJlMjY0MzFmMTMwYWEyYmMyMzhlNGIwMTA0ZGRmOWY4MjYzMGFiN2VlYTU5MGJkN2VhYmIyZGE3NDVmZmEKKzIwODowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZgorMjI0OmFjMmRhYTZiMzMwMjI0YjZmMTQ2YWQ2N2VkZWJhY2Q5OGNkMjI2OWQwY2IzMTNmZGU0OWQ4NWFkNjBmOWIyMWM5OTI2ZDQxMWZkNDM1YmU4YmQwNzNkMjk0ZTkwNWFjZmNjZWEyNzA4Zjk4ZTA1Y2M5ZGVkM2M3N2U2ODRiNjcxYmRjNTlkZWZmM2I0M2ZiOTMxMzgxYjEyMTMzY2UzODZhMDMxNGE5MzlkNmM0ODU1YmJiNzc2NWFkZjk1NWY0ZTU4N2JlYmFmNmQzYjhjZjU0N2IyZmVkYTYwYzMyNmUzNDA5ODMzNjY1ZjYxZDkxYTI0NTFjYTI2OTNiYWQ2Nzc5MDk0ZTAxMGEzODA0OTkzZDYwNzhjMWFjM2MyZDI2ZDU4OWE4YjMzNzZkZDA2MjQxYjMxMzlkMmFlNjAzYWU1YzQ4MjljMjk3ZjA5YTVjNTM1YzM3OTk4ZjU3MWIwZTk2ODU1ZTdhNzA4ZDdiMmFjNDI2NTkwNTA1NDdjN2JkNDQ3YmJlYmFkOTJlOThiMjAzY2U2ZTgzYmFiOGU5NGYyMzI0MTcxNTJhYzZiZmU4Zjk5ODIwMTJjOGY4M2M2NzQKKzIyNDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmCisyNDA6NWM0ZDM0NDQ4Y2Y1YjViMzg1YThhYTllNTA0ZDcyNGU2ZTY4OWEzNWZmMzYxNDNjMjBmYTE2ZGYxNmY3NDM0N2RmNmI2NWVmMzU0YzA5NDczMmZlMWIzMWU0NTRlMzE5YTdiZTIwZGM2ZGY0YjkwMGRkNjUyN2ZlYjViN2M4MWE3YTQwZGY3M2Q1MTNjZDQwYTVlMWFjZmRhNGJhOWU0ZmVkNzg0YmIyNmIyNzE5ODk5YzYwYTU0YmQ4Yzc3MmYxN2M5NWU2MTAwYzZkZWYyMTZjOWM2MTJhMTBkYjYyYTU3NmNmNDUzOTJjNjg3MzY0NjYzMDVmNmNiODZmMjE4ZjU3YjAzM2MzNzczZDBjZGQ5ODI3ZjgyMmNkNDgwYjYwZjk0ZDMyYjI4ZjUzNmU2ZjA0NjRlNjNlODQyOTRmMGMzYWIwODhkYmYwZWZjZjk1YjAyMGY0YzJkZGM3MmM1ODIzYzIxODIwMjVjZmRhNTEwZTFhOTQ0YWM5MzE2ZjBjZWFiYTdkYmQxMTZjZWY5NWUwNTFjYTkxNDNlZWJkNTc1Y2U1M2MyNmNhYjlhYTg5NzE2N2Q1MDBmY2JlMjI5NTYwYTg1Yzk4ZTgzMzg1Y2E2YmVmYTkwNzI2ZTc2OGI0CisyNDA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmCisyNTY6NDZkMzFhMWE2ZmNjYmZmMDQzNWUxODExYTQ4NTE3NDZkZjJhZjU3NzJkZDA0MDhmYmNhMmIzNjAzY2M0ZjkyZjc3OGRlYzhmMTRkYWFhNmYwODE1MDBkZTU1ZDAzNmIzNjgwYThhOWI2YzUwYmMyMGVlYmYwOWUzNTAzNmJkZWY5YjM3NTExNjdlODA3Y2QxYWE3MDM4NWVhOWY0YmU0MmVmNGRlNjIxMTA3OWViMGNkNmMzODEwNDA0YTYwZjA5ZGQ0ZTk4Y2NjYjA5YzM1NmU2YjRjNGNjMWRhMDM2YmM4MjAyM2IwNzUwMTFjYWQyZDAxYmY5NWZjNDU4MjljN2FmNDg0ZjkyNTYyYzI1NzliZDNiNGRiYTM5NjdkNWM2YmZkYjNlMjIzNmMyYjQzNjU1ZTYzOTNjZGNlOGEyY2NhMGFmZmI4ZTQ1ZTg1NDVhYWYwNDA0OWMyNzg5MTA4YWM1YmM2YmNlYmExOGJjYjlkNDk0NGVkODFhNjRhYjQzZTI4ZTI4MjA3MjY4NDY0Yjk5ZGFkNzMyOGRiMDA1OWRlZmEyNWE3MjJjYmZhZjg5ZTkzYTIwNzY4YmJjZTkxYjY0ZjM5NWEzNzliYTU1ODBhMmNhNGFiMmQ5NzhjNmVkM2FlZGM5ZjUzODk2YmRjMjhhYTVmMTMwMDQ3M2EzZGYKKzI1NjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZgorMjcyOjk2YTQ2MTkwYWM4YzU2Y2IyNzI0ODhkMWRiM2E2MTUzYTRiZTdhMjk4ZjIwMGVlY2Q0MmIwNjU3ZTcxMTBlODc5ZGRhZjEyYTc4MmQzZjk0NmEyODNmMjNmZDVmZDk4ZGRjZTU4NzRlYTY0NWU2NTgxMjg0ZDk0YzU0MzdhNDczNzkyMWZkMTUwNGZkZWQ3MjFkOWExMmM5YmFjOGQ4ZmVkYTBiMWEzMmE1YTA0ZTM2MDJkZDNiZWZhZWJiMTYxYWY2ZGYxNTkwZDI4MGNlMDlmZDk5ZTU1MWFiMzkzNTFkZmY4Y2Q4NWRjMDg0OTIwYTIxZjQ5ZTcyNmJhZmRmYzc1ZTFjZDJjNDJmYzg3ODllZGY1MmFkY2I4YjhmODdiMGI3Yzg5YzdlODBmYjhhMTQ4MDdjOTY5MTJmYTEyNTM5NWQ3MWY2MzFjYzMxODFjY2NiZjQzNWRhMDE0ZTQ3YzRkZDI1NjQwY2Y3OTUzNzg3YzNmYTJlOWRlNGE4NjdkNjFjYzM5ODcyNGE5NGI1ODRlZDMzNjcxNWVjOTJhNTYyMjE1YmYzNmMxOTNjZjIzNTY5NzNlNjBiODU4ZDNmOTdhOTQ0ZDEyYTQwMTczMjE4ZjBiZDJlNTY1ODMzNTgxZTUxYmVlNTgwZTNiMzQzMGIzZDQxZDZkNjc4OGI3M2ViYjQ1YTIyYTU0ODQ1NmYzOTNmMjQ5OTljNDAxMzY2ODgKKzI3MjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmCisyODg6NGVhOTY0NDk5MDUzNjUyNTEwNTc5MmI3MzVlMWE5YWRhYWJmNzU0MmY4ZDMwZjQxNTUzZjc1NmIzM2ZhOTAwNTEzNTI5MzlmZTI2OTNiZTllNWU0ODJmOWEyZmQwZWEwMGVjODVhYmIwMWE1Njc4MGI2MTYwOWFjMTM2NGIyMmIyYTFmN2IwNjEzMTc5OTVjMWQyYThiZGQyODBhNzczNWQxMTkxYWE2YzU0NjUxNjcxMzU3NzA5M2YxN2I1Njk2YzlmMmEyYjk0Yjc2NmI1YTlkMjU1MTg5MWE1YzE3NTMwYmY5NTNhYTFkYmVjNmE5NTYwMDU0NTM0MTYzYzI2OTczMzk5YjEyODE1NmFmNmEyNTdlMGM1OTFiMjc5ZmYzNzZkMGUyNDY0YjA2YTQ2NGJjNWU1ZjNkNGNhMzA5ZGRiOWZjOTZkOGM1OWVmZTAwMjczODllMjVhY2E5MTA2YjRhNmMwZThlMzcyNmUyNjQ3MGYwYWE1OWVjYmIxMDIyOTUzMzEyYmY1YTA5ZGI3NTcyOGNlNDU1ZjYzYmQzMjg0Mzc2MjJiYzYxZGM1ZjcwM2U3ZTBkNDlhMjdjY2MxZmEyNTQzOTg0OGExMzQ5Yzc3OTBkMTkyMGY0NjUxNTEzMThjM2QyNzg1NWJkOTUzMjMxOTgxZWI5MDNiZGUxOTkwNjY2N2QyNjkwMGUyYzIzMzMzMGZhMGI2YzE1N2RiMzdkNWI3Yzc2ZmRmYTdhN2UxNjA2MDQ1ZTlhMThhMGI5CisyODg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmCiszMDQ6NTNlZjFkNzM1MGNhOWM1MmYzZDUzYjFmMzA5NzkxOWE0ZTQ5YmM0OGQyZTYzYzU3MWFiYWMyZjE5ZjE2MDg0YjE2MzA4ZGQ4Y2Y5NmYzNzRmYWZiZDFhYzdiM2Y5Y2YzYjljNjJhZjI1NTYzZmYwOWY0MTljOTRmMDUzMGQ0M2RkZGE4Mzk2ZDk5MDEwYzg2MWM5MmQ1OWIzZDAzYmI4NDIzZWVhNTUwNDQwNTNiMDZiZTA3ZmRhYjM5MmNmZjVmODViZTgxMTljZTNlMzc4M2NkMDM5MjNkMjhiZDZjYmVjZDU2MjBmYzI0NjVhOWYyYjFhMDg1MGU0YTZmMzVjMTg5MzgxOWI2ODkzODdlNWJkMjQ0OWFhZjhiMTQ5N2E1OThhNDg1OTUwMzBhMDBiOTJjZTM1NzUwOWYyNTk2OTA4MjNjMGQxYjcxMGVkYjM2Y2FlOGI3NjUzYWZjMTgzZjU0YjE5NTVhNTZkYjY1OTI5ZGY2YjI5ODgwZTk5ZWI2ODU4MWYxZTQxMTQxZWU2OTdjMWZhNTY1ZjBkNjc0YTJiOWYxZTg4YzNmMzcwZDFkNWM1NjQ1NDczNzBlNzNlMmY0NzVmNTJlZGExNjdiY2NiY2MxOTQwNWUxY2RkMjRjMTNhYzI1YmNmYTNmN2RkNjVlMjMzZTA1OWIxOGZiNDIwYmRiNTI5Njk4MTY1NDhiY2E4M2FlOWQzOTJiOGJhMWVlY2UwZmFlYTJhNGQ5NjVlNDZlMzhjM2FjZGIwMDQ2Njg5MmMxYmU2OWVkMGU3M2FkODBiZWVlMGNiZTZkMmIKKzMwNDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZgorMzIwOjU3N2QzMDVkODJkOTkzYWRiM2ZiZjFlOTFiYmZjZDZkOWZkOWI3ODcyNDIwZGM0MTg4MjVmZjBiYzc5MWIxMmRjYzVmYjU2ZjBhNDM5NjEzMWY5ODljZWJiN2IwN2I2N2Y2MzY1YmYxMjBiMTVjZGY3Yzg1NmU0ZmZkZWNmZjU3MWJjOGIwNGExMDMyODgxMTQwMWNlZDk4YzE0YjkyZDY2N2Q4OWVmMGY0MTNkMjQ3MmQwMzk5MzFjMzM1NzBiZWYzZGIzNDg1YjRmMDE4YmRjNzcxZWNhZDhjZGNhMWFjZTBlYzk0ODU5MWU5OGNlMWUwMzdkMzNjZTAwMzI2NDUyZmRkZmM3MGEzNDBjNzNiMDg4NmI0M2RkMGU5MjAzYzExYzAyNWFmMGFhMmVmM2UzNTM4ODkzZDY3MTY1NzRmMjQyNjU3Y2YxYmZkZjZkOGNhM2ZhYmI5ODI4NjZkMDQ1NTRkNzRhOTQ5NWYxNzhiNWJiNjhkMmMyZDAyNmI4MmExZDY1YTJhNjNhNTUyNzcxMGMzMDVkNmI1NGU4MzBiYWExOGY2OTJkYzBmMjk4MTViN2VlYjcxN2MwOGQ0OWI2OTZhZjgwZGIyYzA1NDgxYWEwNzdlNTI0MjBjYmQxZWM0N2M5OWFhODJhMGJiNzMwYTg1YmZmMWE4MDAwYzE3MzVhZjA5YWM0NWFkM2QwMDg4ZWFmNTJmNWQ0MmJhMTMzN2RmZTNhZTk1NmQ2ZDc4OTlhYzk0OTAyOGVjMGY1ODg0YWU1OGQ5NDkwOTk1MDVkYzk1NzZkMjA0NzAyZDliMjVhMTcyZjgxYTA0MWZlYTRlODc0NDYwNWZmMGRjYjUKKzMyMDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmCiszMzY6Y2YzYzM2ZmJmMmI4ZDcyYjZlOWU4ZTllYzg3MTExN2IyZDRkYzgxNGUzMjA0YTVhYTIyMzEzNmY4ZmI4MjE4MjQ1ZGNmMDNjZDgxZGU4MGE0ZDM1ZmM1ZDBhNGY4YTMxYTI4NzJkM2MxYWNkYWIwODQ2Yzg5YmJjOGRiNmYzMTQzNjc0MWY2ZTNmMjFjYzFmNzgzYmY0ZWVlYTliMjk0MTVlYWI5YzFkNmVkOTRkYmQzOTFhMTNiYTk4YTg1MWVlMDY0NmEzNzhhOGQxYjI1ZDU2ZGU4MzA0OWZhNWZmYjMzZWQyYzVmNjBjNjU4OGVhZjhlNmIzNzRjNDNjZjFhYWMxNTNkZDYzOTUxYWFiMmVmMTA5MjM4ODlhZjMxOTJiZjJhZGY5ZWFhZDA0OGViOGVlM2Y4MTkxNmViNTg5OTc0YjUxNTIyMjZjNWQxZTZmNTE2YTgyZThhY2ZjY2JiNDZhYjE0ZDViOTAxYTRiOWFkMjNjMzMxMGIwYTJkMzBmMGQ4OGQwODUyZTY3ZmQ3MzkxYzY0YjllNTc4MDBkNjJkODE2OTVkOTQ1MGUxMzVjOWQxOTNmYzBlZmNjOGY3NzRlMGZhYjAyMGRmZjVkMGEyODM5MGRkNGQ2MjlmNTQ5MmE1NDRmY2YwNDgxMWYyYjBlM2E2NGQzM2M1ZWFiYzQzYTIyYTk3YzY5ODM5MGQ1Mzc4OTkzNWFhYjkwODA4YjA5MTIxMTYwOWE1ODM0ZWU2MGRhN2FmNmNjZTVjZmU5ZGNkYjQzOGI5ZThiZjYwNzA2Njk2ZDBhOTVjNWU2YmZkMjU5MjFkZWU5OGM0N2RlNWQ3ZTRjZjUxMDFmYzk5NGIwNjJmZDJkZDAxYTE3NjM1ODExM2JhZmE0MDRiYmM4CiszMzY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmCiszNTI6N2RmYzUzMWI4ZDliNGY4YTA4NGVmMGY2YmNhODFjY2VkYjg4ZDEzZjg5OWM2NGRkYWU1NDYxMWQ3NmEwZjc3Y2EyN2QzNzQ1ODYwYzc5YmM5NDRlYjg1NDczOGExYzVhMWQyMzQ5MWQxOWEyMGY3ZmVmM2FjNjM5MTc5ODM2MGViMjEwODc0Y2VjMWNlZGVlZjU0OTcyNmU1MzNiMjIzYTNmM2IxNGQ0YmRhZDA1OTkyMDkxMDI3OWNlYjQ5ZTcwYzg3YTg0ZjE5MDExMjUzMjdhOTkyOWYyMzhmNTM2MTA5OTQyNWFmYTVkODI2YzgyMjUzZDk0ZDgzY2QyOTE5NDdhN2Q1NGRkZTg4YWFjNzM0ZDFkZjhkZTFmMTI1ZmEwMmI2YjA5ODNjZDg2NzRiZjUyOWM5NzkyOWI1NmE1YmE2ODFjNzI3OTQ2MTU3NWE3NTY4YzdiOTUxOGQ5NWU2ZWE4ZmFhNmFiNmI0ZGNhNzg3NGRkYTJjOGQyY2M3MjU3N2RkNjc3NDQ4NzNkYTE0NWJjZTI1NTkzNTExZDBiYzNkNjdiZjVjYjYxZjlhYzUzZTA0NzAxYTFhNDQ4ZTgwZDY5MmZiNDY2NTFlNDViNjVkYWU5MDk5NGM5MWI4M2JhNGMxZWM5Zjc5NDUxODdiOWU3YzMxZTg3MDQwMWY1ZWM4MzIyZDBhNjg2ZmMyZjk1NTkyNzlkZTk5MjE3MTk1NzcxOTAwNGRlNjAyYTdkYTlhYjYzYTkwMmZhZDgzMTNiNjBmZDg4Mzc4MWFlYjFjOGQ1Yjk5YzczZTQxN2M4MjFmNzU4NTliYmFhZmFkNDBhYjg1MDk4ZGFlMzU2Yzk5NmY0Mjc0YjE5ODUzNjI2MmIyZDI2YjIyMjE2ZTc5ZmYzZmM3MDdmZDE5N2UxZjM5YmRmYjlhY2I2MjE0ZDkxOTYKKzM1MjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZgorMzY4OjEwMGU2ZTgxN2VkODY1NzU3MDM5Zjc1ZWI2ZDE1YzE2YzU0Nzg3ODRlYjlkYzcwZjYwZTNiOTAwZjYwZmE5MjU0MDRlMDllMmNmYzA0NTBiYzg5YmNlMTE1ZmVmNjJkZTc4MmEyZDc3MjU5NzBlN2ZlODIyNjEyMmMxZmY5Y2NmMTQyMjc1ZDRmMzdkMDExY2EzYWFkNTcwMGUyZThhOGQyN2M3NTUzZTU5ZjgxNzNjODExN2Q4MTNlNGQyMzdiZjkwNmUzNDk5MzA2ZmQ1YmVlMGZiYWUxMzdhMzcyODA3Y2FhZTA2MTljYWVlNTEwMzkwNDlhMDkwNjZiNjI5NTNmYzViZjEyMTNkYWM3ZGE4NmI0NDE4Y2YzYmJmZTA0NmMxYjlmZWRiNjA0NWNjYmYyNTYxN2VhNTJlMmI2ZmUyY2Y5YTUyZWQzNzFmODY0MTk3ZmJiM2NjZDI3ZmYyZDBlMmU3Mjg1ZTI5YjIxNjMyMTExZDJlYmVhMGM4ZjFhMjE2Nzc5YWFlZjk4MzQ2Yjg0ZjU0ZmFmZTQ2ZWUzMTI4MDIwNDM0ZDBmYjEyOTFlMDdjNTNiZGIyMzZlM2Y0NzYxOTk2NDdiZDczNjZhNzJkY2RiNTQ4NGUyNDM5MjU3ZGRjNWIyZDc3YjNjMDMzZTA2OGMzMjI4OGQ5NGE3MmYyYzY1NjJjN2UxNzI3ZTRmNjBmYTQxYTc1ZjU1NjFjNGMxNWQ1OTk3ZGI5OTQ3MWZmNjhiMDg1YjM5ZDUxMDcwMDM5MjdkY2UwMDYwYjE5MjZlZDhlOTE0NGE2YmE2ZDkwN2VjZjAzN2Y4MDA2OTM2YmE1MzY1MTNmYjgxMjJiODIyMTQxNjJiNzczNWExNmY3MmZmYzQ3NzNjMzJjOWQ2OTQ4MjdjM2MyZWNkZGY3NDI3NjZkMmI3NDJmZmJhNjc0YTA0YzM3MDBlYTUyOTg4ZjZlMjY1OTI1Y2RjZjRlZjUKKzM2ODowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmCiszODQ6MGUyYTEzMmVjYTIxNjA3NjY2NWJhYjZmM2QxZjIyMmE5YjUwMmE0ODMwZTdhNjdiZTMzMzBmYjRhNGNiYzFmMmJhMmMzODkxZmZkNjdjY2E4NTE0NzM5ODQ4Y2Q5MDM1NGU5OWU0ODkyMzVmMzgwYjM3MjdlNzQ0NjdiNTU3OWFiMmMzNjYxMDU0ZWFjN2Y5NDEzZmUxZjVmOWI4YjU0ZjI1YjllZWM1ZjY5MzAyNWQzMDBiYzcwYzYwN2YwNzRiNjQwNzY0ZDkxMjMwYTZhOTc1M2JjNDAzYTE3MDA5ZTIwMWNiOTZiNTcwMjBiNTI3ZDQ4OTQzNDM2ZTRmYjcxN2E1YzVhYjAyN2UyMzljYjUwODExNTI0NGYxYmE5NzU4NjFjMGJlZWJiZmE2YTdmZjFlNDdhZTEzNWViMmNlZmRkODk3NmM0OGFkNzFmZjE5NTQ5MTY0ZDIyZGY1NDA0NGFiYjhjZjg2YzcyODEwMzVjMDBmNDcxNTE0NzYyYjYyMjRiMmMwNmNkNDk2ZTE0OWZlNDMyNjJjNTU0YmEwNDczNWRmNDBhZTg5NDZhNTlkODdkN2JmYzQ1NzNlNWExY2M0YmVlNTNhNGQzM2QzMDE1MDM5NTVlNDA1YzQ3Y2NlOTc0YTg4NDRhZDE5OTBjNTY4ZGQwN2RjYzFhMjQwZGQxZGJhNWY0Y2U4NjQzMjE5Njc4NzBhY2Y5NDE1MzU5MjZlNWQzYjUxMWE5NzkyNDM1MGM5MDE5MzEzYTU2ODE2YTFhYmM1YzUxYWE5NmJiZmRkMmM3ODM3YTQzMzIwYmE5NjRkMDQ3ZmU1ZDJkYjI4MDA0NzE2Nzk2NjNkYmM4YWZkNGZiOGNhNGQzOWM1NzM1MjgxYjlhNjY4YjlkY2M0NmM0ZjQ1ODgxYTJjOWY4NDFkYzUyZjM1NGQ3MDZjZDMyZWY1ZGNiNGE5ZjJjYjVjMWM3YjRmYzllMmI1NmUxNGZlMTBhODQ5MmY3MTM3ZTU4MGI2ZjExN2QxY2FlNThjCiszODQ6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmCis0MDA6MDE5NWI0YmQyNGU2YTYyOTVhM2E2ZWEwNWVlNzcxN2VjMDdlYjZlYWI1MGJiYWM3NTFmNjZmNmE3OWZjNTY0ZjdhYTFiY2U4YjYyYjg3ZGMyNWU3YjQ1ZDUyZmYzNGY0ZjlkMzBhZmQwZWIzM2VlZGFjNGViMTkyNDFmZDgwZGMwNWVkODI2NTk3NGQxZWQzZGY0OGMyZTAyN2I3Nzg2NmRiYzIzNTUzNmI0OGFiNTBmNjI4NjM1YTk1YzQ0MzBmOGMyMzdkNjQ3ZmQ1ODhlMDMxOGE1MzcwZWU2MzQyZWI4MDJjNmU1ODQ5ODNlYzZhYWNlNGY0ODZhYTA1ZTRhZTY4ZGEyODMwN2NkNjRmMWI5NTcyYmE1OWMwYzU5ZWNkMTk4ZGNhZTNkNmQzNmUwOWM4MGQxMGM4NzdhODhiODc3OWI5MzRjNmUzOWRmZTAxMjNjOTIyYmU3OTZhNWQ5NjI1ODZiNTRmNmU5ZmJiNDY3ZjcyNTM0YmU3M2M0Mzc0YTdlYzdjMzRjYzFlYjNlMzkzNDUwNWQ5ZWRkZTkxYzIxMDY5N2IyZTU1MDU2OWJmNmEzZTFhZGZjMmRiNWQzNjQzMzZjMTlhYzRkYzE3ZTMyNzA2MDFhYzg4Zjk5NmE1ZWZiY2IyZDI0MWExYzdhY2M4YWI0YTM1NDUzM2Y5MTJjOWU1MWJhODk4YmQ0MWY0MzQ4NjI5MGZhMzJiMzZhNzYwZGU1ZGYwYzI1ZDU5MTRmM2Q1NjAwNDkyMGM2ZGMyZTE3MjRhOTVlYWI4OGY2MWNmZDE1NGRkNDdmYzhiNjI3MDJlNzc4MDUyMjkzOGZiOWMwMzViNDk0YTBhY2U1YTIxYzA5ZjBjZDQ2NWE4MzRhNjFjNGM5NzliMDkzYTVkNzgwMTQxY2NhODIzMjRmM2RkZTc3ZjQ1ZWZiZTQ2ZDM3NzI4MzFjZmE5Mzg2OWQxNDQ3NDBiYzRkMDk0OGJkNjBkZjM3M2VhMjRlNGJlODc2YjZkYzhhMzM4ZTE4NTNjY2UzNmI5NDE1ZWU5YWE5MDc3YzRjZjliMmQ0ODJmNzAKKzQwMDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZgorNDE2OjVjMzk4NWYzNzVjZjZjY2EwODFkZmMxMThkNDQ2MDIwODQ0NmQyMWQzZjNkMTAwZTg4MzIyMmNhYmRkZGE1MzgxMTVjY2ZjMzdmNjg3MzlmYjZhMTY0OWM1NWZkMzY0MTI1NzlhZDFjNjY5MDhiODdmMjUyY2RlOGFiMzIzODZlZjY4YzYyMDVjODk5NGJiN2QwZjllMGZhNWUxZTZkOGFlZjcwNjRiMDQzMmIxYTAzYjNkZDRmZWE2NDVhZWExNTIxNmMwM2Y1ODY1OGRmMjFjYTg3OTJmZDIyNTNhMmE4ODlkMWIyMjNlZmJkNjBlMTA4OTA2NzYyOTFmZWRiZGM5MWFmZjQwM2NiOThmY2Q5NmRlMWQxNDgxYmI4MTAzZjE1Nzc4MGNhMDlhYjU0OTBjNzlmYzljNjBmZTkxZDUzMjUxMDM0NDFiOTg2YWY1ZTlhMGUzMjNiZGM5ODE1MGU0NWEyZTdjZDIwOTk3YzU4YTU2MWM4Njk4YTY0ZTc3MzRhZGE2MGFkMTY2OTE2MGY5MmMwN2U1NjM2MDExM2FkZjY5OWMyNTk5MGQwMTcyY2Y2N2ZhOGUwZTRhMzY4N2FjMjM4MDFiYWRkNDk4YzdhMWE0MTFmZmIxZjk2YmRmYTVkZTk5ZDVhNGQ2ZmFhOGZlZmY5OWY2MjRjMzk2MDI5YzU2MDU5MjdhZTBiNzMxNWRkYTc3ZDA5MmQ2ZTM3ZmY4ODU2NjllN2U2MGE4MjNmZDA2YTQ1Nzc4NWJlMGExNTE3ODZmYjBhN2EzYThiNjdhNGNmNDc3ODhmZjg3NjhlMjRiMzhkZjczMzhjODdjMmZlMzkxOWU3NGU5MjNjYzhhNGEzYWI3YTIxZGIxOGZmNDY3MmEyNWQzNjUyYmUyM2I0ZWYwMmU5NThhNzdkN2RmMDI1NGQ3ZDU0ZjZjZTBmM2E0NTcyZWY2NzU3ODJkMGE5MDgzYzY1NDkzMDRjYjMwMmEwM2I1NjkyMTM3YTJmZDY1ZjBiNWEyMWVlYWUxOWM2NTM1ODM2ODQ0NDQ1YWZiYmUyYTIzNmVjM2ZlMjZiN2Q3NjE1YTQxNzFhNjkwMDYyMDM3NmJmMjdkYjE0NzkKKzQxNjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmCis0MzI6ZGU4MTU1OTgxMmQyOTM4Y2JhODA3NWVlMWNmYjczMTMxNzMzMDU0ODZmNTllNTNhYmMwMGVmYTI3NjY1M2Q2Y2YyMDA4Mjg2MTVhOWY1MWEwNDVlZTk0MDE3NzIzYWE0MzFlMGQ0MjUyMjA1ZjhiNDVhZmNlMTVkMzY1NGZjNjM4YmMzMjc0NDQ4OGU5N2Y0ZjdiOTk1ODY5NGQ0MDQwM2JlYzQyYTFjYTk3MDExY2MxNjY1ODA3MzdiNmZkZDcxODQzYjhlOWU4NzY3OTM4NThkNWI3YTA2ZGE4Y2Q3YmNhYWQ0YWIyZGI4YTU2MzVmMzY0MzI2M2M5ODgxYTkxNTdlMWFkODJjMjgzMmU1ODk0NjMwZGQzNmNiOWM2NWRkN2ZhZjE0N2I1N2UyMzBiNWI5NDQxN2FhOTYyYTNmNjNiZjE1OTRhOTlhZGJiZWRiOWMwM2JiOWQxYTcyODYxNDAzMjk0NmFkOTc0M2M1MTQ5NDhiM2UwMWJhODA5OTk1NGRkNWUzYTBjMTU3ZWVlM2UwMDM4YzgyNTRmYmVkYjEwYzY4NWQ4OWNiMDU1NWVhN2QzZjdiZDViY2UyMjQzMWJiMjc0Y2E4NDIxYWYxZmQ5ODQyY2M5ZDgwOTRmMjI4OWI2ZTBmNGVhYTE4M2YzMTZhMjAzYjFhYTRlNmY4MDA4ZDg1NzZiNTkzNmY3MTVjY2M1ODRlNGNjZjFhZTgxYmE1OTU0ZWU0ZjVkNzhlZDE3MTM1Y2IxM2FmMDQ4NGYzNjY0YTZmOTYzOWE3NDQwY2VmZmQ1ZWE2MGNjNWYzOTFiN2NkNzIwMWIwMDU5ZTMzOTFlYWI2Y2VlMGU5YWUwYWI3YzRiN2U2NDgwY2U3ZjMxNWI4NGQ4MzIxZWM0ZDFhMzNjY2UzZmY4ZGZjZjliMTI5OWNiYmZlZTlhNTg3NGNlNWExYzFkZDg5NzEwYTMxMTljMWQ3M2JkOTc5NWQ4NWZmM2EwMWQ4ODA2NmE3YjIzNzc3MzhhMjI0N2YzY2MwMjA3MmYwZjNlYTJlM2FkZjQ2M2MxNTdlOWQ2NjIxNjc0MjJkYjM4MjRkZjMxYzU5Mjg5MTQ3NGZkNGQwMjY4ZTBjNjRlZTkxMTdmNmZhMDJhY2JiZWM1MzJkNGY5ODAxCis0MzI6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmCis0NDg6OTU3YzJhZGM5NTJiOTE4N2NjN2RhNzczNzE0ZmNiNmZlNTc0YTA3Njg0YzNkNWQxZTJkNjMzMzU0Y2ZlMjQ4NDA2Yjk1ZjBlOTcxNGYyNzZmMTU2ZDk3MDE0Y2ZiMzU5OTFjMzU5ZTA3NDY0YjU1ZWJmNjdmNzQ1MTY4YjM4NmJkYTcyZjBjMmRmNWE3ZjgzMGE1ZTQ2MjkzMDM0NDMxODFjZDQzY2Q4ZDMwYTQxNWNiY2UwZjUwM2QxMGEwZjYzYTM0ZWFhM2E3YWU5NjIxMTFjYWZmNWZjMzNkMDEyNTQ5ZWFjOTk3MjkwZWU3OGY0YzljZjk1YzE0ODEzOGI2MDczNGNlZjA2MTI5ODNlYjI3YTE2MGJjZjU0MzRiYjFlM2U2YTZjMTAwZGQ1NWRmZjI1YjA0ZDczOGJmY2VkYjg0YWUyYTE2OGYzYmU5NzExYmY3NGMwYzYxOTI1YjYxYjMyMWY5MGJlZDQwMThmMDc5OGI2YWViOTk5NzVkMjYyNDQ2MDZlMWI1NjMyYWQxYzEwMTlkMGVkMGYyNTQyNzNjYjZhNDg0OTRiOTJlNTE2ZGQxYzkwYjZlNDhiNDA3MTc5ZmIyMDQyNmVlNDZhOGEwNzcxZjFiZDY3YjE1M2JkNzYyNWU3NmViZTA1MmQzMzEzN2VkMWNiOGIwNTc0ZWI3YzkzMTc2ZDZhZDg4YzVlNGJjNDdjOGM5ZWY0YmQ1NGE0NmZhOGZmMzJlZDI4NDMzOTk4MmExYWFmZTM3NTI2NDhjNTVmMDFmNWVhODBjNDE5YWVlMzliMDU5MGRlMzlmMGUzNGYzODJlMzQ2M2JhZDdiNDJhYTE3YjVlZWIyZTVhNGNhMDZlOWRjM2MyNTRjY2ViNTU2N2FjYzU2ZmQ2ODQ4ZDVkNmIyNTllNzk0NTI0MjNkMWE1NDFjNmNiYWZmOTI4MDM5MTg2ZjUxYmYxODAwZDg1OWVkOTMyOTc3ZGYzMGZlMjhlMDAxMTdjMWU2ZThlNzdhMGJmN2NhNjllMjY0ZmNjOTZjMWY3NWNhNjc3NTU0ZTlhZWZkMDZjZTk3Y2U1ZjBlZGFjZDUwZWY4YWY5NjUzZWMzNjUwZGM3ODY5M2E0ODNjYjk2ODYwMTU1NjVlYTk2ZmQwYzM2YzEzZDUxYWYzMjBmYjhjYTkwMDgwMmFlOTRmZGJjZDU2MGUKKzQ0ODowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZgorNDY0OjFiMzBhNmYwZjgyNzVmMTg2ZDdkYzI2ODY3OTQ0MTEyNDJjZDU1Mzg5YTM1YzJhOGYwZDI3NjEzOGI5YzFiYmQyZTEyYzE1MmRlZjBiY2JkYzMyM2JkM2UzYjQzZmFiMjljYmI2N2Y1ZmZkZjc0NTBhY2JkOGM0ODQ0ZTE3YjE5NmQ2OGYwY2E2YzAwNzViZjA2YjE1NjE0MzI0MzU2ODdhOTk4NjU4ZDYyZDJmOTk0NWFiOWQyYTJiOWNmZDdkNGY2N2JiZjRjNTM2ZWE1ODlmYWE3YTQzOGUzY2IwYzAwNmEyYmJmMmY5MGMxMzk3OTNjNmNiNDFiZTE4YjQ5NDg4NDFhMmQzMWNmZjk2YjI1YWQwZjEzNzc1NjNhNGFjYjI4ZjY0ZWZhMDA2ODM0YzMzMzVlNjA0ZDk0ODczZTdiOGVhYjU4M2Y4N2M1ZjRlMDk2YmIyN2YxYzFhZjQ1ZWI5MDY5NTNhY2ZkNzU1OGM5NzgwMzI2MjQzNTVmYjI0MjFhNjM2YWM2NDMzZTc0NTliNjFiMDcwNmRhYzJmNGJiY2FmMTg3MjdkZWExZjYxMDBkMzRlZWVkMzFkMmVhMjY3MmY5ZGZjODUzZTQwODczNmIxY2MwM2E2NDg1NDk2YjZjZmNjYzZmMzQ4MWIyY2QwNWY1NTY5YmIzNjQ1Njk3MGQwMjg5YWVlOGMwNDQyY2I4NWIwNjU5ZWZlOTg3MmQ1ZTdlZWUwMjE4ZDlkYTY4NGVkMGYxMWM0ODliNDlmNWI5NzRkMWEzOTdiYjMxZTE1YTk1NTZkYzE0NDcwMThhNGNiNDBmMWUxM2RiNjQzYTg3NjllNGJlNzhlMjJmMzU0MzkwNTYzYTdhNzMzNDQ0NWFkYzVlNzBhZDI2NjIzZDI0ODcyMWEwZTNiODM1NGU1MjZmNTczZjhhMjkyZTdkNTY4ZTYzZmEzOGI0OGUwYTRjZTc0MzFlODkwZWQxOWIzZjgyNGNlZGM4NGEwNTBkNGQyYTc4MThlZTI2YjhlYTgwNDcwMGFjODQwZWI0YmQzYTRjMWNjOTY1NTM4MGQxM2E4NmE2OWYwM2Y2NDJlN2IyMzM3ZDIxMTE2YWE3NTEwNzYxNzA0MDk4YmRlMGNkNjEzNmNmNDc4NThhMjZlNGExMTY0OTkyMGZjMmNiMjFhNTFmMmY5MzMwMDk1ZDlkZTA2YjVkNzJiOTNhNjdhNTlhZTNmYmFhNDY1MmI4MmMKKzQ2NDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmCis0ODA6ODE0MGI1MjlmNDU1ZDcwYWZjOWVlNjAxOGEyZTU5YTFhZTA2MGNjYzE4OTA4ZjNiMGVlOWU4ZWZjYmQzZjAxMjQxMjMyNTJjNWE2MjQwMWIzYzMwYWUyODQzZjQ1NjVmMTlkNmY0YWYxODZkYzM1Y2UxMWZjOGQwZDIzYmRlNjdhYzEzM2RlYTEzOGE1YzI3NzEyMzgxZjE0OGYxNzU2MjI4ZTBhZTA2YTA3OTVlOGZhM2U4NDM3Zjg3YTZmMzRkYjNlZGQ1YTY3OWQ4YjkzNDQyZTkxMjljY2IzYmJkMmU3OWQ0ZTAxZDU3Y2FlZWIwODViNWNmMjQyMDAxNTBiZmE3NjA0N2I4NTBlOTY4MThmYWFiZDc2OGFjNWUyZGZlMjEwODQ2MDA4YmQ3NmQ5NTYzNTJiY2M1NjAwZmE3N2MwNDRlYzU4MmMxN2I4YmFjYmVmOTA3NWU5Zjk5YTJmNThmYmY4ZjEwMjgyNTc4NmI2Nzg1NDI4ZjRhYzE1NzU2YzcxOTBiYTgyMmNlNWMwYzU3MTk0MGJmNzdhMjI0NzRmOGViNjY5MjQ2OWEzZmFmNjk2OTQzMDFkNWMxNGQ5MmQ5OTk1ZDIwYWZlMzhiOWU1OGFhNmMwYmI1OWRmYWJkYjJhZWJiMGU3YjExYmQyZWJhMWNmYTA1ZGVkNDZjZjFkZDFjYjE3NGRjNzZmZjY3ODRkMDZmNjA2MmZiNThhNzc2MDI4NGUwNTFjYzFjZTExNDQ2NDNkOTAyODgxZjFhNDM1MTMwZDNhNWQ3YjI0NDJmYzAzZGI5ODk2ZDZkNTUyYWZjMTRiZTM4MjYzYzYzYjI0NjU5ZmZmNmUxMTViNzk1YWExZTFkNjQxNWU2NzYzN2IwYmMwOTVkZTlkYzRkNDY0YjljYzAwZGM0N2NiYjU1YjNiNzNmM2FjMDNhOGFiOTMzYmU4MTk4NmU5NzM5Yzc5MTY5ZTUxYmI5MGIxNjY0MzIwMTkzZGYyMzY4Njk3YWZjOWUwMmI5ZDljYTA5ZDdlODcxMDUzNWY1MTJjMTdmZjI0ZTNiZmFmZWMyMzNmNzk5OTk5ZDhiZTBiYzhmNDYwZmVhNzlkODQ1OWJhMTdkNGVmZWY2NGNmZDkwNjI0ODY0ZmI1YjIyMGJjM2I3N2QyMWEzZGIxMGZiNjI2Y2Q4NTM5MjQ1Mzk4YjAwOGM5MzIwNTI1NGE2MGM3M2Y5YzE5ZjBlZDRmNDE1MjMxMWFiMTc0Mzc2MmQ4NTliMjlhZjc4MDdmYWZhODE1ZmU5Cis0ODA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmCis0OTY6NTY5ZTdmYTFjM2ZiODZmMmY4OGIyNmRlMGZiYmU3MzMyOTAwZWYyODQ2OTZkM2IwNDgwMGIwZDgxZDA5ZWFmZmVjZTA5MDA2M2M0NzJhMTgwZjIzN2IyZDRlNTFiMmJlM2YyOWMzNjFmYWQ5NTc4OWVmNWYxZmJiMDcwNTkxMzNlZDc0YzNjYzU0NDAzMjAyMWQ5ODg5NGJlMzIwMmFmNmM3N2U0M2Y1NTc1NWFmZTMxYWM1YjllNWQ3M2QxYWE4YWQwNTlhNGVmYjlmYTEwZjc2ZDg4YWQwYmQ3OTJjOTZmODA0MjU0NTY2ZDRjODY5NDkwMjdmZmY5NmE1ZDA1YzY3M2VlY2I1MjQzNjczN2QzMjkyOTg5MjJlYmQ0NWQ3Nzc4OTEwNGM2YjA4ODVlNzQyZTQ1YzRkMmZkMjgzNzY4Mzc3YzA5YTk5MjViMzk4NDgyOGQxYTRmYzliYzJiYzI1NmIyOGEyYWZmMzFhMWVhZDMxOTg5NzQ0MWZjY2M0YjhmM2YyYzgyZTVjNjRjZDgyMTExZGUxNDZjZGY3NjUyYTgxNDcwNzZkODI4ZjFjNTBiNjdlMmQwNjBkZWVjYjliZDJiODRhOGJhMTNmMGE2NWZlYTc5YTBmNDdhZjc0ZDNmMDMyMDdhMTkxZTNhNWM5MDg3OTk0ODQ2Y2YxNzYwNjNjMTk2Yjc3MjcxYzdlODU2MGFiMjgwODRmZDFlMzk0ZDljNDNiMDdkZWFiNDBjNDhjMDVlZWNmYzViYTQyZWM2ZDM2NzI0ZWIzMGZmYTVlOTkwNDMxOGMxMjQyYjBiMTEzY2YwYzdhMTY4ZGE5MTk3YWJjMmEwODNmMzcxYzUyNmI0YWZkZmUxZjE0MjRiMjkwZmIyYmNjZjQ4YTQyNmM4ZjMyMTY2M2M3NjdlMzcwOGYzN2ZkYTU2OTY4ZjBiNWU3ODdiNjdkMzY2ODI4YTNjYzE2MjY2MjY4ZDkyYzhhZmRjZWQzNTY0NjNkY2FmZjBlZjU2OGM4NzY1M2EzMDhjMTJiNjk2NDkyMzVmN2IyZWIzOTFmNmM1NGRmMWU5NjQ1MTQxOWJmNDEyZDJjYTBmNmQzNGVjOTJlMDRiN2JjNjE4Y2NiZmY0NDMzZTY4N2RkMTQ3YzViM2ZkY2Y0NzA1MDc4YWRmNWQ3ZTM3MGVlOTkyZTAyMTMyOWJlZDI4MWQwYzA4NjkzMGEzNjYxNTQxZDY3ZDRhZjE4OGQ4ODJkZGQwMjBjZGI3YmQwYzY1NzQzZmY0MWI2ZmM3ZmQ3NTIzN2UwMmU3ZDZkZDgwODNhZmI1NDQwODA2MjBjNDEKKzQ5NjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZgorNTEyOjk4MjFiMzQ0OTg2OWYyY2IwZWYwYTI0ZWNiZmY5YjMzYTczYjNjZDU0YmRlNjNkMzQzYzQyNmEzNmM2OGQxZDE2NmMxM2QwMmNhNGQ2NWNmNzhlOTUzMzYxYTRkMmE0MDM1ZmNhZGU5ZjNkMzVkMGFlMWNmZjViODVmMWZlNWM5ZjNhOWRiOWRhYjZjMTBiOGVlNzU0Mjk0NGM4NDgxNWNhOTkwYmY0YmNkNzA2MmE4MDEzYmY4NTJmZjNiNzgxZjYwZTI5ZWI5MTk2ZjMxYjBlOWNkNTY2YjdjOTA2YjhkOTMwYzRkNGY0MTA3OTNjMWZkZjdjOGM4ZWQ5MTM0NjljMjUwNmNjZmExYzAyOWYzODNhOWVlZTVhOTVmMThmZmViMWYyNTA4NGM2MmQ2YzlmYWIxZDY3MjEzZWZjMWZmMDhmMmEzM2EyMGVhYmI1MjBkNjk5NzgwM2ZmZTM4MmVjMmYxODc5NDY1YzhiMTY2YjA0NWU4ZWY2ZmMyN2M4MTgyZDg5Njk0MTkyOTFmYTU2NDFhZmI0NWJhMTYwMGY1MTJhNjEyZTdkZmNhNGY3MWNkNjNjNWZhZTUwYTUzZmIzMDU2NTBlMzgwNTQyOGJmYjY2ODk4MTNlMzQyNDI1YWM2ZDVkMTNjOTU3NWI2MjliOTQzMGNiYjIxYmZjNDFjMDI2ZmEzZjhmY2Q5Njc3YmY5YmI3Y2MxNGM0NDc3MDZhNDU1ZTJkNWZjOTBhODBlZTYzNWZiYWE1ODllMmY1MGQzNWQxYTFkNWRlZDc3YmQ5NzBhMWZlMzJmOTJmY2NhZTgzMWM4ZTU0MGM1Y2ZiYWQyMTYyZGQwNjgzMTYwZjBkNjE0ZmVmOTMzMjA3YjRlY2I1MTQ2NWVjMDA2M2FiMzEyNDNjOWEyM2EwN2NmMDk1MmI4MWViMDJlNjI4YjllNTNlZDBjMjdkNzIwZjY1YmU4ZjM4Yjk2MGMwMjg2YjhkYzU4YWExMTkwNWYzZDNjNjk0ZDM2NGFjMDk5N2U2YjJlMzg4NmExYTExYjM1N2VmMGI3NWNhZGJmNzdhY2YwMTViNGNmNmJjZTUwOGY0YzI3ZjAxMDQ4ZDJmNGQ4MTFlMzllZTg1MDFkNGZiNmQ2OWZiYjYxNTlhNmJhNTY2MjllNTRlNzk4ZTg3MmJlMzNjMTkxNzUwMTY4YWY3YTQ3ZGZlZmQ5ODljNjVmNmIyZWY4MDY0YWVmODNlMmU5MDJmNjhhYTllMTBhN2Q2YWM0YTI2ODBkZDA5MTNhYWQ2MmI1ZGJiZTJmNTFiNDZiZjY0Yzk1MGNhZWUzYjY2ZjZlNzg1N2E2NGQ5Y2NkNDUxOGQ5NTVmMjRhMjM4MTk2MTUKKzUxMjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmCis1Mjg6ZjAyNjA0OTYzZDlkYzQ3MzgyZDJiODM1NDk0Yjg1OTFkZWVlZTQzN2MzOGQ0ZDIzZTY0M2VmM2QzZDNkM2Q4N2E2YWMzNDc1NjY3YTc0OWVlODRjYWMwNTVhYTQ3YjUzMWViMjJkNThjZmRjZGIzOTVmY2NkOWUzNGU4OGVjOGRkNmQ0YmRmZjk0MGUzMjE4OTliNzAwNTcyYmFkYjVlNDQ2NzVmN2I0MjVhOWMxYzE5NjlkZjY4NGEyNWVlMDk3NGM4YTlkNWU4MDFiNWNkNzA5NzZhNmM1YWYyNzkzN2M3ODRmNGY4ZDFjODZhZTFjMjY1YzVjYjM4ZWExZWUxOGJjYTkzZmY2MDE5ZjE5MjdlYmUyMDM1MTRiZjIwNTQ4YzdlZmMxM2NkOTFmYzI5MmUyYzlhYjlmYzAxNGQ4MzcxZDg1YTJlZmFlMTA4YjJhZmI4YmJhZmFiNzVlNzM2MWM5OTkyNWExOWQ4M2YzZDdmYTUxYzAyNzRhN2E5Nzk2YWVlNzQ1MWU3ODM5NzZlNjc5ZGI5N2JhYWRjNGFlY2JjOWQxMjBlMDE3MTk1OTJlMDA3MTk1ZGNiN2I0MjQzOWM1NDAzY2NkZGUwZWQwYWQyMWE3YzVhMjc5ODkxOWFiZTgxZmY3MmEyYmFhMDMzMDAyZmUyNTA3MGUxNGYzNDE3ZTcwNzY4NDdlOTBkMjFjYTlhN2ZhODJiNDVmNjJkMjM0MGJjMmFhNzI5NjE2YzgzYmJiZjJhNjUwNWY4NjBjZWNhODM3YzQ3OWVlYWQzYjE4ZjUwZjg4YTYzZjk1ODJlNTE3YjRiZjUxNzAzZTQyYzNmNDczZjkwMTcwMmQzZWI0ZGMyNTA5NzE2OWEyZmE5NTcyOWYyOTUyMDBlMTNkMDU1NjdlNTEzMjI2OGIzOTM5MjUwYjhiZWMxNzBhOTBiZjg0MmM4ZjJiNjgwZmI3ZGQ2YmI2M2JjYzFhZGUxNTE5NDQwMzBjMGE1OGIyNzhkNzAwZTM0NjBlOWQ5YTc0NTNmMDY5OGRlNmZlNGIzMTA0ZjA0OGQwZDNjMmJmZDZkNzFjODZkODQ2MGI5NTU2OGRmOGE0OTNmNmU3N2UxZDY0YjE1ODMyOWJlYzZlYzEyNmEyNGExZDNjZWMzYmViMjc0OWMwZDJmMmQxYzlkMDM3MDhkMGYwYTRmYWY4MWFiMGNjMzFlMzFkYWRiYTZlN2Y0NTNmMzU5NzhkNDliZDAyNmMxNDUxODhiMDQyZGE5ODc5NWQ4ODQyNTZmYjdiMjVmNWQ2ZThlZjQyYzkyN2JiMzljOTIxZDFlNjM0YmM5NDUzOTA3Njk4NmFmYzU5NzNlOThiYmQwZTQ2NmIyYjdlNGNmYzc4MzFmYjBkNGRhNzBhYjMxZGQ5ZTE1ODRkCis1Mjg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmCis1NDQ6YWI1NTMwNzAxMTQ5NjkwYTlmMzE1N2I5NzE4ZmIzOTJkMmQyYzM4ZTU3YjU4OGM2NTJhOWFmODU4MDc1MGVmMmRhOWFjN2YyODQ0MmExYTNhY2MyZGRjMDZlMGNjYTE1YTZhZDhjNWEyNTNjMGNiYjMwN2U3ZDg5ZWNkNmE5ZDVlNzJjNzZmMjU4OWUxMTcwNjcxM2JkMGNjNGJmNTI0ZmI1ZWYzYzQxMGViODhlNTJlYzBlNTJkODIyZjZmZTE0ZDc0NGEwOWVjMTEwMTcxYWYyNGNlMjdhOGYxMTY2ODgwOTJkN2E3MTIzYzJhZTE0NGZlZjAxZjI3Nzg3NmU4NWJmMGJmNzc0MzUwYzkyYzdiZmVlNTk3N2Q3MWY1MmEwZDM5NTAwM2FkZWNkZGNkOTJjZTZlM2E2YzczYjA3Nzg2ZGI4MjkzOTY0NzliMTBiOTI5MzhjN2I3ODhiODk3Njk1Zjc0YjYxYmVjNzM4NTI2YzAyODY1YjE1ZGRiOGQ2YTkyNzg0MGZhYmFjMGZjMmNjYmNhODE1YWI1ODY4OWViNzNhZGZiMDhkNjE0OGQ5YTk4ZThhNTM4OGFhNjUwMjQ1OGViZjAyNTkyMTc4NTI3NjgxYTEyYWZhY2IwZTBlMWI4NjEzNDdkY2EzNzRlYjM4ZjMxZDg2NzYxYjVkOTMzZjE4MmNmYjNhYTQ4Y2RjZjE3ZjA4Y2I5NTYzYWI4OTI4ZTY0NzJmZGY0MzE0MzQ1NGY2NmI2MjZkNGU2OWIxZWEwNjk4YTQ1NzEzODdlOTlmZDRlZTE2ZmFmODI2YzNhNWMxMTEwNTIyMjM2MzQ1OTQ4YzU5NGMyMGUzYTYxZTUzMGRlZTI5MWI3OWI3Y2QwZTJiMGZlN2QwMTgwYmExMTYyYmM0YjNiMWIzMjgwZGNhODFmZDVhOWNhOGEyMjdmNzdjZWY4OTg5NmU1YzY2NGE3NWI3ODdmNDVlOTY5MzE0Nzc3NmNhOGVjOGVkOTljZWQzOTkyMGI4MTNhZTllMWU5MzIxNGQ4Y2ZlNWMxNjhlYzVmMDdmY2EwOTJmNjM2OGZkOTUyZDBkNDhhNDk2MDBmYzBiMzkwNTQ4NjE0MGJlMWZkYmYxNDJkMGNjOGRhNDQ2ZDJlZDRiMWI0MmYwOWYwOWQzY2NjYjk1YjUwZWJiZmVmZjYwYTFmNWJjNDRhOTE2MWVjM2JlYmI5NDUwNGI3MGZlZjFjMzYwMzVhODlhODY2ZmI5NmIxMmYxMjJkMmU1ZWU1ZmU4NWIzNzEyMjNmOTU2NjRiNzczNzc4NGMwY2VjZWE5ODBmYTcxMWNjMjYzNDQ2YmU0OGMwN2U2ZGEyMjNjNGVjODU2MDA0Zjk5YjBiMTk1MTgwMTg3YWE3M2FkMzMxOGI3YjIzYzkwMDI1OTBkNmI0MmZjNTdlOWIwODkxZTcwNDA2Mzg3ZWQKKzU0NDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZgorNTYwOmRlZTRkNzc1MGYwODcwYmNkMTZmYWZmNGQ2NWE1NTkzZjVkODZmMzJhNmFkN2E1MTlkNmIyMzMzZTUyMmRjY2FkZmFiNzg5MGQwMmE2NDk5ZDY0ODczMDJhZWRkZjljNTJjOTI5NDg2ZmZiNDRiOWVhOTQwOWE5NDBkNDQ4NmEzNzliMGVkMDRlMDA0MjFmNmU0M2U3MzkzZjc1OTYzZTY4NDIyZWJjYjJiODdlY2EyMTFmNjcxZGQ3MTNkNTlhNjAzNDU3NmE0ZmViMzU2ZWZmNjdmMzMwODFmNzg4OWM2ODRmOTcxYTIyYmU2OGFkYWNlYjM1ZDI0ZDE5NDdkN2Y1YTVjMDNmNjZmMzE1MmRjM2JkNzBmNTllMTcyODc5ZjUwZGE5MDM4YTExNTk4NmFkYTEyNzcwMTQ5NThiMmIxOWQ4YTE1OGMwOTdjMzIxMmVhYjZjNmMwZTk3OTQ4YWUxNWYxNDZhMjQ1YmRhMjQ5NWE1YTg2MGRhMGRlYTMyYjc3OTRmNzdhYTRiYzkxMjY4MDc2NjQ5MjU1ZmIxMzhhNGVkODMxZTY1OWExYWI5NzYxZTM3YmMxMzgzOWQxZjQxOWQ3Y2VjYmIxMmJmYTY3YzUzZmRlOTU3ZWY1ZjVjZGY0MzE1NzUxN2Y4MDIxZTg5ZWI0NmRmNDc2MmNkYjk5MmE5Mjg1YzM2YjYzNjE1NjFkYzQ2OWMyZTliNWJiZjc5ZmRjODc3OTYyNzk3MWU2ZDZhNzRlNDBmYjE5NjE5MzNmMTgyYTFiMjcwOTEwZDc2MDRhNjgwZDViZmMyZTVmNjZiNmU0MDk4YTBiMTNkNGM5YjkyM2JiNTY3MTMwMTJiYjYzYjdhNWNkMWY5ZjFhN2I0MmE0ZTI4Mjc4ZTU3NjZhM2U0ODRkYTA4YTc1MzhmYjFiMjdhMTVmN2VlZmRiNWZlMjhjZjYyOTdkODFjZTdjNDY0YjZmNzM3Mzc4M2M3ZDM0NDMzNGJlZWQ3MTNlMzI1ZTE0MjliZDdiZmRkMTYxMGVmYTU1MWYwYzE2YTZlZWU1Yjc4N2Y5NzNhMDExMDc1NGJiNjgxZGU4ZDE3ODMwOTk2ZTk5M2EzNjBlMTU4NWIxMmVhODcyMGZkYjMyMjdmMTkzYTE5NjNmMGFmYTdkNTllMzAzYzI3YzcwZDM3MzkyZmNkYWVmZDViODVkNTJjMmJiYjdmMTliMzE0NmMyMTY1ZTM1YmRhM2I2YzIzZjE2ZTQ2OTI4MWUxMGJkMzUxYTUzM2VkYzM3MDM4OGEwN2U2M2YwMmIwN2RiODU2OWI4NzYwYjdjMDkxNTI5OTA3ODkzMTMzNjg1YWVjMWNhYmJiOGUwNjc1MmY5MDQ5MGVkNDlmZTRjZjVkNTgwYzAwMDdlYTdlOTAyYTcxOTIzMDI5MjM3ZmJjZjk2NTg1OWFiYjJkMTRmNmM4OTU0ODAxN2VlZWQ2ZDBkNTYxNGQxMzFiNjUxMmM3NGI0MDcKKzU2MDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmCis1NzY6YTFkMzY2NTNmZWQ1ZjVkNDBkMWRkMDg3M2EwN2I4MmU2NzNjNjNmMzBmNmQ3Yzg5NWVjNmVlYzdmYjFlOWZjZTFmM2VjYzQxMDMyYzk0YjNmZWZhNGZlOThmNjZiYWEzNTM5MzljNzk2YmUzMGNjMTY2OGQxOTVlYWY1Yzg1NTZjMWEwMGM0ZGMwZDZhYjY1OTE5YTFkNzI5NTAyMzFjODk2OWM1YjAyYjdmMjJiNzBjYzAzZmNlYWEzOWE1YWRjYTBjOWJhMWNmZDliZmJiZWY1ZDRkYmU3NGQzNTk2NjU5NjU4Y2M1YWExNzA5ZTRkNjA0Njk2MDAzMjQ1MTQ1MTdlOTBkMjAzYWE3ZWI0NDYxMmU1ODg3MGUzYWNlYzNiOGM5NjlmNDdmOTBjMjE0MjEyOGEyYTQ3YWMzZDMyNDdjNjdmY2IwNTFjODJmM2JjZmM5OGRjNWZkZjViZWY0MDdlMzY5ZDAyZjIzZDY5MGY2MmNjNWU0MWFlYjIyOThiZjJjOTcxYTY2NzQ0YmRhZWI5ODMyNjUwZWRjMjVkMDlmYmQxMzE0YTVkODQ0NzdkN2U1NTJiODFiM2M1NzMxYjQyMGVhYjRkNjc5YmI4NGU3NjVmZmM1YmY5YjRkMTlkZjk2YjIyMzQyZWMwOWQ4MDhkNTA5ZmU4YzRkMGQ0MGMzYWI5YjFkNDAwNDBiNDQ0MzU1NWQ5Y2U5YWEwNGUyMTY1NjdmMDVlZTI4NmM4MTFjOWRhYTZjMWRhYjE5OGJjZTgxZTAzZDE3MTMwNWYxNDIzNjI2MTMyMjEwZjAxNDNhNTE0ZGFhOTI2ZWRiZmNlOWEyMzRiMzEwMDU5MDE5NmM0MjRmZmZlNzM4ZDAxMzdmYmEwNTMyYTdiOWI0ZGMxNjJiOWI0MDZmYTA2ODQwZTQ5YjBiOWNhZDNlZjdkNzFhYTc2N2I4YjJmYmY5NzgwZjEzNjlkNmM1YjM0MzYxZjQwM2EzNTE2Y2ViMmZhMGE4OWJmMTgyMTU3NDQzOWRjZjQyZmIxMzI4NDE1ZTM2M2Q5YTMwNmEzZjcyMGUyM2ViNTA0MTE5OWVkY2ZhMTBiODY1YTlmNWEzMjAwOTkwNjUxMjIwMmJiNGVkNTMyNjE2Yjk1NmQwMzA4YTBkNzEzYzZhZGYyMGRjMDNkYTdjOWIyOWM5ZDQwOWIyZmJlM2M3ZjMwMzc2YmFjZThhMzE1NmZjYjM4NGE2MmI5M2M1MDU2MTc3NmZjNmNmMTZkZWQ4ZTk2OGIyNzM5MWFmMmI3NjdhYzg5MGI1N2ZkYmI3ZDNhM2ZjZGVlNTQ2N2JhZGM3YzBkOGNlNTlhMTcxMjlhMzY3MmMzNzI1OTg3NGI4NTIwMjkwMmIxMWEzMjYxY2U3YTE2YjNmODMwZDM2YTE3M2E4ZGQzNjIzZGI1ZjQ1YzIzM2M2NDU2YjhhMmQwZmRhZGIxNjM1NmU1YzM3YWZlYjdmNDczY2I0YTU1ZjM5YjlmZmIwZTRmZDk2OTUyYjc1ZWRiNWM3ZjQ2NDgyNTBlCis1NzY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmCis1OTI6NDIzMWVmYjFmZTA3ZGFmOWVmMWE2OTEzNzc2OWNjZTA3MzFhYWM5YWVmMjdjZmFlNWI2MDA5NGU4ZTg1NTBjYzViODNjMzFlZmVlOTA3ZjVhYTlmYzUxZmJmZmU3ODVkN2Q3MGVkMGI5M2U5MThiNGQ3NzFjN2IyMmRkNzJiM2Q3OGU3ZWVkYWJhOTY4OWVhZmQ1ZDQ0MDg5N2EzMzlhMmZkODE0NjUxMTY2Zjc0NjM2NTE4YWZmZDUzZDk2Y2U5YjZiMjcyN2NmM2I4N2MxYTdlNWFkN2NmODM5YjI0NGJiMjU2MWZiMzk1NWQ4NDgxMzFlZmE5MzdjYzhmNjFmYTg4MjA0OTZiNzc5NDk4ZWNiM2EzZWExY2I1NzNkNTVjMTFiY2ZlMWYyMWNhOTUxMTAwMTJiZTVmMzVlZTJkMjI0Y2MyODQwNjJiMjdiNWVmODVhYmU5MzNmOGJjNWYxYWNiNDBiMmY0MmIyNGRiNGRkZGFhYWUzM2I2NzY1MzE0NWEyYzIwZWMwYjMwOGNiN2YyZTFhNDExMDAzMzc3NmNkY2EzMjExNWEyMDIyYjM0MjdkNzNkMWUzODk1YzliNmYzMzdjNmJhN2VmZmZjNjNiZmRlNTBiMmM0M2NiNjc0MTY1MGE0ZWM2YTc0MjAxOWM2NTU4MWE2ZDQ1ZjhkNjJmNjJkM2RhMTYxMjExZTQxNGViNmFmOTg5NDM4MzYxNWI0ZGYzZDFhYzVkNWQ4NzhiYTcyMDg3YWUwMzUzMDAxM2IyMWQ1NjEzMDc4MmFjZmUwYTk2MDU0NjYwODVhOGM4YjhkYjk2ODI3ZWE0MDM5YTc3YjFkN2I5NWFjYTI1MTY3ZDM3ZTZkNmNhODg4MGRhMDg1ODhlYzdjNjEzZjA2ZDI0ZjY5YzNlOGJjMWYwYjliOGJmNTg5YjcwMTA2NzFhOTczN2Y1N2ViNTllNzY1MjNiOWRmMGE5NGVkYmI4NWE1YWQ5MWE3YmM1OGFjMGRmODZlNmZhNjhiMzZlYWM0ODViNDk3YTE3MGJmZGQ3OThlMTAzMjM3NjkwNmQwYjc3ZGZlOTMzNWZlNDdhZTQxNDJkZmU5ZGE5YjNkOTQ2YWYyMjA3MTVkZmE3YWRjYjBjNzc4OWU0NTY2ZmI5YWNhZDUxM2MwNTRkODU5ZWYzMDljZWMyYTE5NmE1NDA3OTAyYWU5MjlhYWI4MjZjZGQwNTZmNzBhODk1N2U3ZTAwMWE2MzUyMmU1Nzk5ODZmNTQyMjk3ZmUwNzIyNmM5NDZlODMyNTU0Y2I0ZDhhMGY1Nzk4OTFhYmQ1NGI3ZWQxMjI0N2VkODgwNTc0ZWI2MmY4MjNiNDJjY2EzNDE4ZmQwM2I5ZWZiZDZlNDkwZTkyZGNjYTI0MDljMWU1NTMwYjlhMDI1MjlmZWYwMjExNGY5NmJjMGVlNzczOTUwN2IyMmU0ODUxMDIyMWUyMThjMGJhZDUyNWRlYzZhMmRhODFiODM0MTM0ZWJmMGJiYWQ0NjM4ZDZlM2Q3ODFkYjMzMzU4ODMyNTZkMTk2NGJjZmQzNzM5MWU4NGQxMjhjNWM3ZmQKKzU5MjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZgorNjA4OjdjZmYzMWVlYWEyMzgwMGQ3MTQ3ZTg3NDZhZDRlMmIyZTA0MWE2ODgwNDc4NmY1MTUzOWQxOWMwNDBjNDUyOWQyYzhmM2E5ZWI5MTc1MDVlYWY5ZmEwOWM4YWU2ZTBkOGQ4ZjVjMzQxZTRmMzVmMGIwZjliNGFkOTlkNzk5NmMxNDBhYmU4YWRjYjgxYjZjOTY0NTlmNjJiN2UyNGU1ODA2MTRmNjMyMGI5ZDlhMmY3OTFiN2MyYWE5ZGUwMmYwNDUwODE5NDExZTgwY2Q2MmQ2N2FiNTZmMjA3NDQxZjgyM2U4YTQwYmI4OWY0MWZiYmU5NWUyNjM1OWY3MzhlYzJjN2U0MThhY2Q1YzA1NGMxODYzMWQ1NzNhZWMzNDY5MTU5NzlkOGVkYTdlZjI4N2I5NjA1M2U2YjlhZDFlYTY4MzYyNGZkMDJiM2FlNmVjZjBkYjM0MmE3ZTVjNDZiNGIzOWY1ZmIxNmE1MjIzNzY4OTk3N2MxZjJkMzEwZmE3ZTk0MGI5YTdjNmUyMGJlYjllN2E4YzA3MjdmMGM3NDYxZGNiNmZlZTczYjQ0NDQ4MjI3NzYzNDVkN2RiMDYwYzdmZjc2MWUyMjQ2MjUwYjJkN2E0OGU0ZWJkMWYwODRmYWU2OTA2YzMxMjBmNTliNzQwYWM2YmZkYTcwYWM2ZTExNjhkNDU3MmNhMjkxMmY2ODkxZDMzYTEyOGU0MzliZGE4MTY2OTFlNTE5YmVmMDE2NjBhODBkZjVkNmU3MTA4Yjc3ODk5NTBlZTUyM2I5YjJhYzhkOTk4ZGNkMjc2YWQwOWM0NzkyNjVmYzk2NzkwMDgxNzRjYWMxOGFiOGJhMzhmMGVhMzM4NGYzZTYyM2RhZjFmYTcwODFkMDQyMjAzYTQ3NzdlNWEyNDU1NDBiZmIxY2RhODg0NDVmMDU2ZDQ2NjgyNTZlNzE5MzUyYTRjZDlkMDJjYzNmMGEzYmYyNDE1M2FlY2EzM2VkMGRmNGJhNzNkNTQ1M2E0MGU3OWE0YTFmZjQ2MmI2YzliM2YzYTEyOWJlMmQyN2YxZWUzMWI1Njc1YWQ0ZDljMWE0NTY3YzU3ZDAzOWJhZGMxOTY3NmE2YTAyOTg4MWM2YzMwNjE2YThkMzJiNmFmODNjNmEzZmE0MTJhNmEzODNhZjFmNmNkMzgzNjZjMTQ3NTY3MGRjMTVhOTQwNmEyMmUzM2NhMmUxNDliYjcxNDFiOGUzOWYxZTQzN2ExM2NiMGVhMjdhOWY3M2Y3ZjAxYTAyY2ViOGVmNmE3MGRlOGEzM2U2OGM2ZjU0OTUwNThhMGI1YWY5MzNiYmNkYTk0NTFlOTNmNmU4ODc3OTM4ZWM2NzcyOGQ0OGZjZTQwOGU4MDMzNTE5MjhlYTA1ZjJkMGQ1M2VhZDA4OGVhYTg0YzJlYzE1OGFjOWMwMzZiYTYwMjM5OWQ1NDJiNjg3ZThlMGM4MGY3ZWE2NDJiMDlhYmI2MTc5OGU1NGM1NDg4NmM4OGVlY2E2MjdhODAxMjI1NGJkZWNkNzYzYzkwNmU0ZGM3YzMxMjQ5ODMwMjc4ZGM0YWM2YTA4Y2IyMmViMmFjYTJjYzFiZDU0ZGEwNjM3NmU3NDExNDkKKzYwODowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmCis2MjQ6ZDQ5YWNkM2EzOWViZjUwMDJkZTZhN2U0MzVjZGRiYzVkZjFlZTcwMGQ0MWM0ZjhhZTE0NTg4MmYwMDVhYTE0OWVkYmI4MTUwNjA1Njc1NWJjNjYwMjA4Yjc5Y2UyMDkyN2QxN2Y4MjQ2Njg5MTc0ZTIyYzllNWRjMjI1ZDg2OTI0ZGU0YWIxMDczZDZmOTc2MjkzMWVjZjAwMmM5MTQ5ZDA1YzcxNWIwNWQ3YjU2ZGQwYzJkNzE1YWVmMzYxMDg0MDczZDU1YjEyNmE5ZTM0MzkwZjQ5Y2Y2NmZhMWRlYWJlOWMxMTkxNDc4NjU5YmU1NTA5NDYyYjJiZjVjMGM2NDkwYzRhOTdhYTkzNDM0MDNiNTA1NmRlMjA5YWZlMjRhZDI3N2U2OGJmZTE5YzExZTRiOTlkNzBiZDdmMWYwYWJjZGQ4MGVjNTUyMzkyYjRlNWIzODVjMjVlOTcwM2M5OTJhMzQwOTI3ZmUxMjcxZGNhZTExZmM0NGExMDYwYjc3YmJiNDJmZThmYmU5MmNlZTczZmI2MjMxZTBjNjY3NDdjNWRjZDBlNDA3OTU4NzA3NzQ1ZDdhOTY5NjA1YzUzMDhjYTg1ODY0MTg2M2M4NTQ2MDM5YmJmNzhlNTQxNzhkYzM0NDUyODVmNmM0Y2ZhMTI2NGVjNDRlNzY5NDZiMTZjN2QxZmI0MDM3MGJiNzY4MWNjNWJkMDhmMWYzMjU1MTdjMDc2YjgzYTBmYmM5ZGQ4MmNjNmI0YTVmZTE0NWRmMWQyMDY5MzQzMzNmMDQ5NDBiZjQwM2Y2YTBhZTZiZjJkYWNkOWQyNDBmNzNkMjBhZTZhYTI0YmY2YjhhZTkxOGJkYWZmMjYxNWViNmZlMmRlMTk3NDIwZTA4NWRlZDgyOWEyYmNkMTk0MDQzZDJjN2Y0ZGEzMWFjYjA0YTg0MTIzZWU3NWNkYjYxMTYxODY2N2I2YWRjYzM2NzdmMGM1MjAzY2ZiOWIxOGQ2OTk0ZTFhM2IwNWIwMWY5NzQ3MWMzNzRmYWNkMmEzODBjODc3MGYxYmFlYjA5YTBkOWI0NWFiNGUzMmRlZDhhZTUyOTJjMzA3YThmODMzNTI3NTdkYmI3OTdjOGE3ZGJhYzZkMmYyYzU0YmY4NjA1NWUwOGNjNTlkYjgyYzA4M2QyYTRlZTE2YzU3MTI3ZDMzNWRjMDdhODk1Y2VlY2NjOGE4YzI2ODg3M2NhZDViM2IzZjkzMThlNWUxYjQ2ZjFlNjAzNTk2YWJlZDIzMzJlNzljYzhkOTgzNWUwZDY3YjliYzljMzE5MjY3MWE4MTJiYjgwZDNkMDlhOTUxMTBkZDQxOTFiYmY3NmMwZWI2NjY1MzI2Yzc1M2RmYTkwNDdkZWRmYjkxYmY2MjU4ZTU3NWMwMzA1YTQ2YjhmMjc4NDdmNzQwMjBmZDVjYjYzMDZiMzJmNTI2Mjg2ZDJmNjlkM2MxZjdjNzcwNzFjZTYyMmI4MDlmZjk3MDZlZWMxNTZhYzNjNmIzMWRjM2ZjMTEyYzZmYmZlZTdlNDBhODZhMWJiNjM0ZGQyZjYyY2YzZTdiOTg4NWZlNmEyNGRiODIwNGUxNDI0YmNiOTk2ZjUzY2E1YTVmYjgyMzI2M2U1NjRjYzA4ZDAxOTRlZjM5NTAwYzgxNTY4Cis2MjQ6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmCis2NDA6MzRhYTc2MjBkZDY0MjE1NWE3MWVmNWY2NGRiYjZlMjI2NzgwYzg2Nzc0ZDk4OTJkN2NmYzJmMTE4NzZkMDVhNGU1MWNmNzFkMDE0NzkxMTllZTM1YmE2OTBkZWJiYTI4N2EwYThhMmE1Zjk4NGVhY2Y2NjIzZGI0MWNjNWY4ZjgwMjhjYWJiYjEzNzdkMDEwZWZmY2I4Y2RmYWQxYTlmNTgzZTJiODM1Nzc2MGViZTY4ZTRkODcyNzg0NGZmNTUyNzc3MTNkMjdlMWM5ODI5MGI0ZDgzY2RmNzFhNTc3ZGUxMzhkYWVjOWRiZTAzZmE3NjM3ZTVhNDJjMzlmY2U2NTQwZjkyMWMyMjQ4YzI4Y2VhNjc4N2YyM2ZjODA0NmZiNmVmZDliM2ExZmZjM2ZjMzM1ZjEzMGJjMGI0Y2NhMzM3ZGNkOGJhMDUwZDhkODdiYzhkYTdjMGUyODY1MDM1MjZlNDYzODVjODVhNmM4YmQzNmVhODAzZjNiZmY1ZDM3ZGMyOWRkMzk0MjlhODRjNmYzNWU4M2EzMTkyZGIxNWEzYmVjZTFmYTc2NDgwMDJlYmY4ZmViNWExNTg4NTk4MzFmMTA5NDZjOTRhODM0ZWJlMzkyMmE3MWJiNDI0ZTY4MWExOGZiZDdmZWIyN2NiZjg4OTQ0M2Y2YWQxYTk0YTBlNDhlZjNjZTYzNzhmMTIzYWNkNDFhYmY3OTYyMTY2M2E3NWU1ZjE0ZGFjZDBlNTkwZmQ5Y2I5ZjUwZGFmZjlmOWYxMDk5NTk0NzRjOTg0MWQ5ZmJmYzUzODk0N2RjOTgyMjFkZjA1MDczMjA4NGY2NzJkYWY4YWU1MTdmYzliNTk2MTdjNTY2N2M5NDZmMzgzN2EyMWExYzYwNzA3YzhmMDg2ZDI3ZTg1NmRmNjI0YmQ3OTcyYWE5MTQ5ZDJkNTg4ZGNmNGNkYjY2Yjc4YjI1NzM4N2QyODk4NWU5ZTUxODYzMWFhMWI0YzllMjcyZWVjNzBlZTliMmI1OGU5ODk4M2FhMTQ0NjFiYjZhNDY4YzY5NzY2MjBmZjc2ODU1NTcwYWM3YTc4OTQxOTlkZTEyNDBlYmFiYzhkNWRkNmFhMjYxYmZlMDlkOGJmNzExZjIxNzU5NzdkMjQxZTVhMzJiYjk5ZjQ0ODZhN2UwMjNlNWM1ODdlYjk1MmFlOTA4YmY0ODEyNWE3NGVkOGE2NzVlODAxMTUxYmVmOGIyMjZkMTBjZDFjYjA5ODE2OTdiNjdmZGE4MDY0Mzg1YjM4NjcyMzIwNzExMjMxMjg2MTljMDVmNjRmZGFiODZmYTY5MDNjMjY1MTY3NGZjMjI1ODU1MzE3ZjdiYzQ3YTAwMThkYjcwZGFkOTFiMDgxNjRiZWYwYTJkZTgyZTYyZDY1OTJiNDJkOGUzMDNhZWEyOTc0ZGRhY2VjMjBlZmE5Y2ViZjk5ZWQyM2E5MzU4MjM4OGJiNzVlYTdiYjkzZDI0NDcwNzliODk2ODY0NDc0N2FiMzJiM2FjMTBmNjQ0NWQ1ODVlYjMwMTFlMWRjMTJmYTY1ODYzZTYxNmMwZTQ0ZmIzNmE5Nzg4NTJhMTBlOTEzYWJhNDIzOWNlMzY5ZWExMzU4ZjMyMTMwYWFjMTdiZTEzYWY1Y2NiMzFlNDA0ZmJiOTE2YTJjYTkwMmI2Yzg0YzJiN2IzNjk3NDc0NTRkYjQ4NDQKKzY0MDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZgorNjU2OmY3ZWQwZTZlMGVmN2Q1ZmExZDIzZjg5NWRiNTM5YWQxNGUwMjQ5MDJmMzBkODk5ZGQ1OTJhNjRhNGEwNDRiMTkxZjU0NWM3MjczNGIyZWNjNzBhMWE3NTJkN2U1NWFjYjJmMjg1MDNlM2U5ZTA2NTY5ZmFlYjFiZWMyYjZlN2Y0YjkwNjRhZWFlZjQxYmNmYTA5N2JhM2NjNDE2NTA1ZGVlN2UyODQwMTI4Y2IxYWJlZjNlNDEwNmJlOWFkZDUxM2MzZDIyNjQ2MjExZGU2ZGQ2ZmE3YzdlMmE0MGEyYWM3MGIzNzI0ZDFlNTg3NWM1OWFkMDA0ZDgyYzJkM2ZkYTA2ZDlmNWRhZGE0MzQ1ZDJmOTQ1ZjBhN2MzMDM2YmEyOTBiNGRmZWQ2OTE2ODgxNDBiOWFmMWI4MjI3NGJhODQ0YTNkMDNiODY1NTZiNjdiYWJkODU2ZTZjODEyYTRjMjUyMWNlNjI5NTk2ZjI4MjY3ZTdkM2NiN2ZlMzBiZDFkNjkzOTI3YjRjODVmZDUwNDQ1YTFjNDc1M2VjY2U3NTAzNTk5NmYzODY4NDY4NTIxMWU1YjQzZWE1ZDMyZTU0YzVkYjI4NmE3MGM1NzM2ODFkMzg2NDgwYTQ5OTQ4ODUwMmJlMWY1MWJmMjA1YWIzZmZiYzYxYTg2NzY1ODM1ZDc0OGU2ZTJhODE0MTAzODllYzk4ZWVlYjJiY2IyYzE2Y2Q5ZDM1MTRlNTQyMDIxZWQxYmQ5YTQxYjM3NzVjZWUwYWY0MTBjNmUzYTI5ZGIzOWFiOWE4OTEzZDdiNzJjZWVkZWU2ZjA2YmNkMTcxNzg5NzRkOTNhMDM3ZmYzMDNhYzhhNThiNTA3ODcwNjdhY2U5ZWQxNWQxMjQxNzk2NDIzMDcxMmNmMTU0ZDg4MTk2OGFjZTBjZWM2NDcyMTM3MDg2NDcxNDczOTY3MDQ0MWZjNDIxMTg1YzJmYTU3YTJhMGJmOWJjNDNhMWU0Y2I3OGMwOTY0YWUwNjc4OWFmMzZjY2E4ZjdmODUzNjRjNmQ0YmUyOGZkN2YyNzUwNTBiMGUzYjg4YjNhNDY3MzljYjVhYjJiZDZkMzAxYzAzZGZhZTgzOGIzMTM3ZDA4NWZmOGJjZGM1OTNiOGY3OTBkNmMzYjU2YzhjNDkwMWFiMjNlNWZlNGY1ZmJlOWI2Y2NlYjRiZWIwNmU4YmRmMWQ2ZThkZjk4YjZlNGIzYzk2ZjI1NTU0MzFmMWU2MzRlOGI3Y2Q3OTE5ZDQ4OTE4OGM3OTJiODliNTM4ZTRmZDgzMzRmYTI4YmQ0NWJmY2ZhOWRkOTc5NmNlMDg0OWY5OWI0YzFjOTE1ZjczZWMwZTBkNTk4NTlmMzEwMDg5MmY5YzlmNTc5M2U1ZDBlOTA4NTQ2ZWFhZWI4YmY0YTg2MjkzODZiMWIyOGViOTRkNGIwM2RlZGZmN2IxMDFhMjJmMjE5YTk4OTI4NWNkNjU3ZmNmZDNiNWVlZWE4MTUxZTMxYWIxMWUzOGJhZDMzYmM0MGU1MTlhODQ1MGI1OTI5Nzc5YWE5MGZiMGMyOGZmZDQ1ZGY5MjljOTYyZmFhMmEzNDJjNWQ2YzcxNzBhZjcyMTMwMTllOTJkODQ3NThlNDFhNDU0NWRjZWQ3MDVhMjFiNmM4NTdlNGEyYWE2MTc2ZTIxOTMzNjI2ZjM2M2FjNzU4YjU2NjI3ODAxNmU3MDg4NzQxY2IzNzc2ZWJlMDUzMGUyNmZkYTYKKzY1NjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmCis2NzI6YzMyNGNjMzcwYTNhYzY5YmNkODMxMmEwOTFiMDBkZWEwN2RlMGI1ZjNkNDMzNWVmNjhiNTk2OTI2ZmFkMDA1ZGY0MDM4MjA4MDNhODA5MzRmODdkMGFlMDJiYzVlZjljMjVjYWYxNjJkNWIwNjM4ZDBjZTYxYjc5YmMwZTAxMDVkM2MyZGYyOTAxNWRlZTMwZmExMjNiZTRjNWNhOWU0ZWQ0ZjkzODhiYWIyMmUyYjc2MDJhN2E3NjIwNmEzMTFkNWJiMWY2MDllZjYwYjc3NzIyNzMyNmVmZTE3YTY0OGYzYjZmZWJlM2M2NGU4MTYwMDcwZDViOGY1ZjgxYTU4MjBhZjdiNjk0ODYwNTFlNjU3Nzk0ODFlN2VkZDRhMDMyNmI3MmQ5MjkyYmZhNWM1NTMzODRmNjZjMThhYzU3M2U4NDhlMWU2OWQ5Mjg4Y2I1MmFiN2JiYTk4Y2FkYzZiZThhNzFmNWNiNmVmMjNiYWFmY2E2NGU5MWUwYjQ1MWYyZmIzMjQ3OTY1M2E0ZjU0ZTc5MGRkN2JhNjI1NzEzYTJkM2ZjOGQwYzU0ZDJkYWRhOTliZDRlNzhlODE5ZWEwZGFiMjU4NmZhZDU1M2RjNGQ4N2U4ZjQ1Yzg1ZDFlZmIwZjlkN2E4ZGE1NzE4NGEyZGFhYWFkMmQxNzRjOTEyZTc5OTk3MjY5ZjVlNWExYTljMTBmNjQ0ZTIyODA5NTZmNDgzNmU4ZmVlYTliMzk1NTdmN2E5MjhiYmM2NjQxZmM2MWI2MTNhZmVmZTA0ZDM1ZmViNjBmZTMzZDAzZWQ3NzJmZGE3NzhmYThjNmZiYzU2OGEzY2U1MTZkMWQ3YTczMWJiNGNkMzQyOGNhYWViMmZiNzJmYmQzZTMyMGI4NjhkZmZjMDc5NGEwNzQ5YzdmZjQyNjk5YzA3ZGJjNTc2ZDZlNTIxMDVjZWIxNjQ3ODY4MzgxOGU2MjA3YmJkMDJiMjY4YzQ1NDk2ZTc4NDFkZjJiYjQ5ZmFjYTJlNDVhYTZjYzVmNTBlOGM4NDVmZTE5ZmFmNmU0ZDc5Y2E4NGQxNDM3NTI5YmU2OWFiMzJlZTk3YzIxZTAwMDI0MjYwOThiOWFiNmMwNDNmM2ZjYTAzMzc5ZDNkMDQ3NzAxYzQzMTI3ZmZjNWQ0OTU0MzQzNWMzYzIxZmM5YmNmNzk4ZGRlMjBiNzY0MDQwMDYxZjg5MjkzZDlmMmNmNzkzZTZlMmFmZTQ0M2I0MjMxNjhhOGZhOWJjMDQ4NGJkZWM3OTQ5ZTZhNGJlNjhhN2YxYWZlOGU2MjU2YjU1YTQ5ODI3ZjE4MDU0YTNjMDlkZDNiYzhjNzY3NmU4NmIxNzg2ZTA0ZDI3OWVlNjFmYWE4MDVkOWU1NzRlMTdkOGEwZDM2NmYxMjc3ODRjYWQ1NTNmZDAzOGUyMzdmNmM1ZThmYjJjOTQ4MTdiYjc2Y2Y5NTRlYjUxOTVlZGUxZmY1OTc2OTAyMzliZTZlMGY2Y2VhYzgxMDdhYzRiNWM4NDNlNGMyZWRhZGM3NzU0YTU1ZWM2NGE1OWM3ZDg4MTIyYThhMzUzYmY4Yjc1YzU2ZWQxYWVjYjZkMzQ1NGJjMzUyMDg4Y2U1NzBiZDA2NmFmZDI0MDJlOGRhMzNkNGVjMWQ2NzBhMDYwMzAxNjVmYmQxZjI1NDA3ZWVlNTViNTU0ODQ4ZDA5MjNmNzdiOWEyNjNhZjc1ZjgzYjViZjcwMmRjNzMzNjg2ZDljZGNkOTc3ZGEzNmQzMjE4NDRlYzFlNWZiZDM4YzNkYjExCis2NzI6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmCis2ODg6ZDRmMDk1Zjk4YzZmNmQ1ZTUzNjY2OGVmNjcwMTRiMWNmYWFlODQxMDM3N2Y2NzUwNWMxZmJhYzhmMWQ1YTliMDhlMTE3MzQ4ODAzYzlkYzFhMDZmYWEwNTUyN2Q2Yzk5NjI2MTFhYTgwYTAyN2JhOWFiOTBmNGJkYTY1ZjRjYTcwZGZjMDAwOGIxODIyOWI0YzdlNWI4OTcwZmVhYzRmNWYwYjIwMTJmN2FjZGUyZGQ4MzVkY2M5NDE3NWVkOTdjYTY5MWY2NmJhMWU4NmU4NmRiMmUxYjU0NmQyNGI0NDE2NjA2MTMyN2U1ZTg3MjgyOWUxNjkzNjcxYzQyZmVhZDk5MjFiZmM5YTEwZWIxNmRhYzAyYWI3MjVlZDQ4YjM0YzE1MzcxNmM4OTdiYTkxZTFkNTVkNTNlNjk1NGJkY2IyNjUzZjQ5YTViZGQ2ZjI1YjJiYTEwOWVlMGY5Y2NmZmRkZTM4ZTdiYjViNmJiMjNlZTRhYTA2MmUzMTQ4ZmY1ZTExZmNhOGE0ODRiZTI5ODQ5YWFmYzQxZGQ4ZDIzYzZkMDUxZjU4YTk5ODcxN2E5NmMzMmFlZjg5N2Y4MGY1MTQzYThkOTE0MDk2NTU0NDkyNjU0MGY2YTlmMzM3NjJhOTdhY2UyYTEyNzgzOWMxOTNhYTY0M2Q5ZTcyNzc4NTRmMzYyZTQxNDliMzk2ODhhZjE2NzY3ZjIwY2IzMzQwZGY4YTYxYTFjODUwZDFjNzlkNTQwODc2Mjk4NTM0MWZhNjJmMjg2M2ZmNjUwY2JmMTY3NmY2ZTI0Nzk4N2UzMTc2OTFkYzhiNzc2NDdkYjZkMjZlOWRkZDUzOTIzNTA4MzQzZjE0MDRlMTZlMmUxM2RhNGRjMWJmNTFjOWMyYWQyZTYwNGQ2ODQzZjJhNTA2YWIzMmRjODkzYzlmNmUzOTI5MTdkMDRiNGIzZjE4ZTdjZDBlNjBkMTcwOTg3YTJhNDc5NTcwYmRmYzRhOTMzNTc5YTE5ZGFlYTYyOGUzOTY2ZGY1OTI4NTc3NWRhOGVkMWVmMWM2MDg4OGM3ZjY1ZjhjY2FhMjFmZTQxOTZkNjM4ZmY1YWI5ZTA5NDhiMmI3ZDZlY2JlOThmMzhhMjJiZjljZmFjMTRkNWEyNzdjMTZiNmM0YjQzOTk5YzA5MmQwZmNkMGI2ZjRkNGJkMGI3Y2JlMDVkMDNkZGFjMGUyZThjYzcwZDg2MjdhOTdlMmZmZTBmN2Q3ZDVlODJhMWE1OWZhMTkwYmY3OTg1MzFkZTNjMTMwYTkyY2ZlNzM3ZjNkNDFhZTY3ZmY5MDQwZWE4NmJhZTY0ZjAwMzU3NjU1NzczMjZlNTk1ZDA4ZmE5MGI2NDkwYTg5NjBjZjYzNmJlMjZmMjFjZjE1Zjk2Mjg1NTRlMGM1NTEzMjI3NGE3YWNmNmNiNzM4YWQ1MzVlODcyZTU5MWRhYTYwMmIxN2M2NGYyOTY5NTBiMmY2OTc4ZjVlZGIxMTA2M2Q1ZDgzODQxOGU2YWE5NjBmZDA5ZjcxMzQyNmFjNGQ1MjJmYzNlYmUxYTQ0MGMwNGRlNzM5OGU5ZDc4N2E1MjA5ZDU3MjBlMTc5NDY1NDNhMDI1MTkyMWQxZTYxY2Q1MWExYjcxZDgzY2Q0MGE0YjE5MGZmNTg2NjhhOTBkMjY0NTc2ZWU2NzUxMTBlMTdhYWRiNzY1ZDRlOGJkZWE1ZDZmOGJiODdkNTU4Y2VhZWMzM2Y4MWZhY2ZlMGIyY2M3OGIzNzMzNWI5MWFhNmNiN2Y0ZDc0OTMwMmRmNzNlZTllMDFhOTM2Yzc4YjJiMWE4YTNkMmU5NDliNDgKKzY4ODowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZgorNzA0OjUyYWE4ODg4NWM4MTg5MDcyZWQ2ZmJhNzk3MmI5MmIzMjU0NGMxZmZhZTY0MWNkNzcwNDk4N2Q1NjYxMzM4ZDVhODZmNDU1NDBhYmQ4ZmE5YjM2ZGYyYTc0YWMwZTdmZGUxOGE5Yjg2M2U2ODlhYzZjNTBlYzgxY2RlYTRmZjc0ZWJiYTliNGE1YmY0MDE0NzllM2M3YjRjNDQ0NjE2ZjFiMzg1ZTBiMzM1YzI2YjllYzg5ZWYxMGZhMmY1ZTZlN2IxM2M3YzRlZjliODhiYjliYTEwYTg3MTU4ODZkNmIwZTU5OGRkNWEyZThiNWFiOThmNmY1YTY4NTViZGEyNDFiZWViMGZiZjUzODY5MjU0YTM5YzI1MDM5NWI3NWVlOGM2Y2RlNmU5MTFmOWQxMTBjMTk3NTllZTkzZTkwZjc0MWI0NjIwYjAwOGM5YzU0Y2JhZjEwZDljZDM5ODU1ZjY0OTNhNjEyZTlmZGFmODcwOTU1MmM0ZjM2ZWFlNjgzMWVkYmEwYmJkZWM1Y2RlNTE5M2UwY2EyNGM3YWZkY2Q2NmVjNmQzZDk0ZmYyZmIxZDBhOWI3MWRhNGYwZDY2MzhmYTkyNGY3ODBiM2NkNmMyNzE2ODVkMjNkNjAxOGJkN2U4N2E1NjVhYzljZmRhMDJjNWQwZmRhNjBiMmMwNzZmZmFlNmFhOTRmNzNhNTg1MjZjNmI3ZTFjMDgzODRjYjBhYTY2MGM2YThiOTM5ZjdkN2FjN2NhNTdiN2MxOGI5YmU3ZTQ5NmZhMGI5NDc3MWE4OTE4YTU3YTNmYTVkYzAzY2E1YjNmNDdiOGNkOTljZTk3ZDlkMDFjMjdjZDk3MDUwNjAyMjM4ZWM3ZmFjODcyYzFlOWIyODBkZDU1MWFlNTk3MzRlZTkzNWY0YzEyNTdlMDY3ZjVkZTJiNmYyZmY1MzJjYjVmNDVlMjI4YTZhOTYxZDIxMDc4MzU4NzRhYTMwN2Q3ZDllNDk1ZWVmYzdjYzEwMzk3NDVhNDc4YTYxZWZmNjAwODM2ODk4MjhmMjI1MzA0YmMzYTIyNTI0YTZmZjM4NDllZjI2MGM4NDQ1ODg4NGM5YjAxMWI1NjYwOTg4ZGUwZThlZjQ3Y2VkOWNiNWNlMzFiNjg0YzIyMTU2Y2EwZWMxYzYwYzJiMDlkNDg3ZTU2NzJlNWE3YmE5OGExYTRjOGQwMzkwNDIwMTkwYmYyYTNkNGQ1MTkxZjE2NGIyNDgyOTdiZWM5OGU2NTY3NDI3NzA4NDllOWFiYzIyMTU2YThhMjE0YzQ2NGViY2RjYzBkYjBhNmI3N2FkMjk5ODdiNmZmYTIzY2YxMjgxYTUzMTZjMmRiMWU4YTcxMmFjZTg3ZDYwMjNmMTI1MmNjZGRhNTE3MjJkYmQ0N2I3NThkZDEyYzQ0YzRjMzU2Y2QwMDVkNDJlMWE3ZjFiYmZhNWI0YjU3YTBmZWRiYmRjZTZlMGNlMGZjNjlkOTI0MTdhZWNiOGU3ZDdjNTkzYTFkMWU3NGU1ODI3MzA3MmRhN2U0YmNlNGY0YmQ5NGEwM2YxZGQ4N2QzYTcwODkwNzlhZTZjYWE4MGE4MzUxMDlkOTg0YjE5YWEzMGYzZTUwZGI0ZmM5MWVhOTMxODI0MThhYjUwMGE0NGY1MjFmOGViZjdlMjAyMzg4ZGE0OTQ3MmU3NDQyZmE0MDdiYzY2MDRiOGMwOTU0YTQwZjljNTQzYTU1YTQzNmEyZWFjOThkZDQ1NDc1NTEzNzYwMjAyMTEzMGE5ZTEzY2M1MTA3YTlmMjNmYmY5ZDFkMTQ0OGE2MGQwOWZiYWViNzQ3MmZmM2QyMjdkZjcwOTY0Y2JiZjliYjBhMzU3ODBjZjc5MTdlNTQKKzcwNDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmCis3MjA6MTdkOGFjMTgxZWIwM2E5OTM2OGRjNmNiNGE4ZTNiNmVkM2I4ZWJmYTJhYzZlMGY5ODgyNDNiOTYwNjYwMzEyNjE4MjdjMzk2NDI5NWMzM2EyMGU0NWVjNDUyOTUwOWU4ZGZiNzU0YzY5ZTU5ODhlN2I2N2E3MzczNjU5ODAxODRlOTM1ZmM4ZmU1MWI4ZTViOTUxNGUyYjYxMjgzODcyMzIwZTc1YTQzYWFmOTJiYjlhYzQ0ZGMwNzc0MDY4ZDNiZTRhMTQ5NzYxNmQ1ODY3MzIxZTAzYWQ5ZTQ0MDU0NWI4MmE0OGJmNWExODU3MDFmOTY4M2NlMjkxNzU3ZTM5OGU5ZjRkZWM5ODE4MjQ5M2Q5NzdkYmY1NzUyOWM4OGU2Yzg4YmE5YzkyY2Q2YzVhZjY2OGQ5ZDM3Yzk5ZDg1Y2QxMWU1OGRjZDZiMTU5ZGNkMWM2OTljMzAyZGY5NWZjOWU2MGI2NTFiZWQwZTU3MWVlNmRiOGU3MTFkMGJjN2M2OWU1MjcwNmJlNWExODFmZTIxM2IyOGM3MGQyZWM5MmQ0NTA1NmUyOWZmMjMxNDM2N2MxNjk1NzM3ZTczZTc1YjdiZTQwOGNiMzI4N2NkY2E4YjU5MmY4M2ZiMDM4NzBlYTg4MzQzMzMxYzNiMDJmMGQ5MTU1MmQ2NzNkNDFjMjk1N2JlMTQzYmQ5ZGFlNjRlZWQ2YzcxYWM4ZDRhOGY2MjcxMTI3MjBiMWM1Yjk1YzI1NTViY2M0ZmU4NzI3ZmRiNjUwZjNkYjgwYTljMThiYjhmZGY4ODVlZmEyY2ZlYjRiNTZhMWYxZTc4YmM2NzBjNDRmYmNmNDlmODRkYWFhMWI5YjFjOTQzZGUyMDY4MzY0Njc0YjUxYTM4OWRjZWQ4NjNjOGI0OTUwYmJmMWU3MDZiOWQ1MTMyMzE5Njk3ZGEwZjU3MTRlMDM4MGQ4ZDc0MTFlNjUwZGY3OGYyZTg3NWMyMTc4MTA1Zjg2ZGQwYjdmZjQ5Zjk4YmM2MTExNWU2MjMxZjAxOTU0YzNjNzM5NTdkOGYyNjQ2OWI5YjEyMjMyYWVlYzFhNTkyZmIxZmVlNjM4ZTAyYzFhYzhjNzk1YTk4NjczNGU4OTZlNzllYmI1MTBkOTk1NmU2ZmRjMjQyMWRkMzA0YzdmYTExZGI4MmRjMDVmMDUzZDdmYjBiOWI3N2MzNjgzNzkyNDVjMmViYzNmZjk1NzM1NDg5ODVlZWFkMzY0ZjY1ZDc3MzdjODQ0NDRiMDIwYjY4NzViMGM4NDVjYWY5ZTUyMTUwMDE0M2Y3MzJjZjEzZGQ0OTNhN2ZjYWQzMzI5OWNlYzZlZjUwYTA4OGExYmE2YWE0MmI5ZmExYmNiYWU2MDY4ZGViZjVhMDc1MTc4NWZmNjQ2YmY3OTQ1NDI0MmY3ODRiNzBiNmIzNmY4YzdmYTEyNDY5ZmFlYTY1ZGNmMmZiOGFiNzU0ODg5M2M3MjVjMTM5NTE0YzBhMzE3ZGNjNmFhNzYyNDFjYjc2MjMwZTlkYWViYTI4NTNkM2FlZWJkMDI5MDEwMzhjNTNjMDg3NjlhYmY1ZDM3Mzg3NTBjNmYyODU0MDcxNzEzZWE1MTM4MzhkNGVmZGVhMjNmMTNjZTE5NGFiM2UzYWRjYjVlNjY1MDQ3MTRjYTA4NDE5OGM0ZmFjMWVkNTllMGUxMTIwMzAxNDJhYWU0NmY4OTc3MmEyNDQwNTU1OTkwZDY1OWJhYzVjMDVjNGJkNmY3YmU1MmRlMzg5Y2I1ODFmN2EzODE3NTk3NDllMTAzZmMxODRlZjg4MGJmNmQxNzBiZWViNWM5MzFhYzAyZWNmYTkyMzIxMDEzZGE0NDZkODlkNmFiNTY0ZGE2ZDc4NjVjZGE1MDY3N2NlNWQzNTJjYTkzYmRmNzAyNzM2Cis3MjA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmCis3MzY6N2QyNWViMjIyMzY2NjZjMTU3NDc0OGYwZmQ2MzFjODY5NGQ1NzNkZjY2ZTE2YmRlODc0OTFlZmFiYTgzYjM2ZDM4OWZmMTBmZWRmM2E4ZmU0Njg5ZDU3ODI2ZjQ3YzVlMGViNDcxMTlmOGY2ZTYxYzU4OTYwMjc2MmE2YzNhN2MzYmU5ODBiOWEyNzFmNzIxNDgzYWRhMzA4ODdlNWRkNmQ3NWQ5MDY1MTFiNmNmNDIyZDQxYWE3YWRmMWQxMjU0ZmUyOTlhYTVmYWExYmU0Yjk1ZTYzZjIzNWUyNmZlMTBkY2I2MGExODlhZTQxNTAxNmM1NDg0OTg5YTdkMzJmNTE0OTRkOWFjMjhjODE4MjJlYjI3NjBlYTczNGRhMjMyMGYwODNkM2MyYTcwOGI0YTY4NTY5MDczYjExZTYzNDk3N2IyYWFhMDUzYjA4YzRlZjFjMTFiZjkyZDRjZDlkYWM3ZWNkOTEzYmRjNGNlNzBhNWM5ZjBkNTU5Y2ZkOThjY2ExMmM0M2M4MTAyYTljODkzNDk3MDJjMTczZGVmZWY4MjIyYjQ4NmMyZmI2M2UyYjBlYTliMWExMDM1NTBjYWQ4NzE5ODgzZjM0OWM5YjIxYzEzNWRmMWNiODRkM2Y1ZWNlNGYxNTNkYmI2NjFhYmFlZDMwNTc0YzUzZWI3OTIyYTcyNzM3YTkyZDRiYWJhMDA4YmRmOTgzYTU2YmQ1ODc4OTI0MmY0MTc2ZTNjNjUwMzFkYzJhNDE4YjMyYTdmZjUzZjQ1NTdjZGEzNDU4M2I3MDcxMGM2ZmVlYzQyMDkzODA4NzcyOGY5NjkyYzIxZWRmMDBjNmE4Y2I2NDg3ZDhmNTFkZWRlNzU4ODM1Y2I3MTZiMzgzZGJlOTBmZGQ5MDQ3ODY4N2IxZGE0NTkwNWYwY2U1ZjBjYzI3NjVjMDczN2RhOTgxMGM3ZWJjNjk4YmQyZjAwZDBlOTA1ZmQ4NmJkZjliYWM1YWM3Y2U0YWY5MGNmODcyNDIzNTZmZGJmM2JhMGNmMTllODJkYWYyMWQyMjYxMzYzZThiMzAxODdlZGQ5YjEzMzlmOGY0OGFmYzg4ODBmNzFjMDZiZDU5ZmY3OTA2ZTI4NDdjNTEyOWFjMjBkMmU2ODYyMmIzNGViMjk2NTdmZTk0OWFiNDk1MzIzMmVmYWM1ZWI4M2VmYzAxMGFhZGEwNTlhNTA3M2Q4ZGFkMTAwMzdmZDU4NmFjOTNkYzU0MTdjOTE2MDczNzY1ZDdlMWVhY2IzZGQwNzZmMjI4MDlkMDZkZDZiMGM5MGJkNzc2MDE1YThkNzY5ZWU4MmU5OTYzYzYxNTMwMzBhODQ1MTMxYzljZThmODY0MmRlZTRmYzg3OGM3ZDcyN2FiMzk4MmM4YzMzOTQ0ODIxMjRhMzJmZjEyNjg0OTkxZmIyMTE0ZjcyNTZlYjM0MjEyNzMxMjk5MDVhYmM4N2RlOWIyN2EzNDAwOTQ0MGY4ZDQ1MzdjOGU2ZGYxMTIwOWI3Mjg5Yjg0YWNlNmY1ZDYzNjc3ZmRhMzE4YzhmNTVmNjUzNWMyNzBiYzBhMzliOWExZDA1ZjQ1OWRiMzE2NDE1MDIxY2Q5MGE0NzZlMTBhMzQyNDk5Yjg4MTgxYzJlNTk4NTkwMmY3NjE2NTQzODBjNTljYWZhOTBjMGNhMDU2YzA1OGRhYWRhMmRlMThmZTY4NjBhNGE1YmQ4NjBiYjUwYjM0ODQxOGY2NjgyNjZkNzM1NTFkMzhjNzcxMjY2ZWRmMTQ2NmRkNTI5ODlmMzU1MWY0NWUzMDc1ZDliYmI4Yzk1ZDhjOGJkMGYwNjI1MzRiY2EzNzBjMGRkYWZlYjA4YzUxNzgxMTI2Yjc4NWExNzZlOTQxMGIwNTRmNjZiNTg0YzRkYTA3Nzc5NzBhMTQxNTk4YWRiMTgyNmQ2ZjUwMzhkYTZmMjVmMDEzZmJmYTcKKzczNjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZgorNzUyOjBjMmFjZTZkNDIyN2IwMzE0YzhjOWIzOWMyMDkwNTQxNzU5ZjQwZjlkNWQwNTIzYjI1ZjA4MTQzNmI5OTgyYmQ4YjJmZDdkYjUwYjZlNmU4Y2Y1ZWQ4Mjg4NTRmNTQ5YzZkNmY3Yjc2ODM3MmU3M2RiZjdjODM0NzU5YjBmMDFkM2ExZWNmYmI2ZDE5YjNhY2U4NWNiNjQzZTdkNjlhOWFmN2Q1OTE2MDhmMjY2Y2IzNDcyOThlYjM3NTZkYTViOTIxODhjNmQ5ZTFkYWIzMWNlZTY2NmI1ZGQwNmIzMDc3YTIxYmJkMTQ0NzlhMzU3MDFiYjVhMjFmODA0MTdhNDljZjM2MzMzYjRkYTFhN2ExODcxNDI0Y2Y2YzNiOTBhMDUzMGM5NzQ2ZDc1OTc3YjU4NWQ2YTYyMWQwODE2MWEzNjk1ZTU2YjU2OTE4NGY4YmM3YjI2NTE5NTA1NDIyZjIyMGE0ZjJlMjBkNWI1ZGFmYmUyNGEwODExYjY3NWQwZDVjODVlMjE4MGJhMTk0NDkwZjlhYzc1ODAwNmYyMzg4NmFiY2U5ZTA2ZDQyYjhiNzUxOWViMmM3N2YyYTA1NDVmZDdiMzZmZjBmMTU1NDRiMTVjZTEwMGFjN2E5NmNjZGE1YjBhOWQ3YjY1N2Y5MzQwN2M4NmE5YzU4ZTA4YWE5YWQxM2ZlYzQwNjAxZDlmN2M3OTIyNWVmOGI4YjQwMjlmNGQ0NzBkNjA2YjNlMzBhY2Q0NjNkY2RiNDVjNTBhOGIxZGNhNjA2M2Q1NmZkYmQwNTMyNmE3NWU2YTE2ZThiNmZiNDFjMzAzMGI4YjBlNjEzNjk0ZThiODc3NjYyYTMzNjFjOTVmMDUzNDU5OWZiZmM5YTYyM2ZhZThhMTE5ZTk4Y2I4MDY4YTkxMWNjYTdjNGVkYzEwNWQ2NWI1Mzk1ZDllYzNiNzVjZjczZmE0YjM3MWUzMzE5ZjI0MWYwNjBiODRjOTc2MDQwMzM5NTkxM2FiZGQ3NGJiNzVmYmU0NjkzMjMyYTg1M2FjZTE0ODI0OGYyMThlNWUwYzE3NWJhODIxOTZmZDI2ZjRjNDc4MDE0ZWMwOGU1YmM0N2I1OTliNmY0MjQ4MzY2ODkyNWQ3ZTQ1ZWViNTkwMjZhMjU4OWQ3NmRkMmE2YmRjMjNjMjkyMTYyMzU1OTM4ZjRmNzQ0MGZmNWViYTY1Yzk0NmFkYjkwMGYxZGRlMDVhODViMGQ4MmE4NGEyYWU5NTg1Njk1Y2JjY2U4NWE4OGQ5OWM1ZjRmZmY4ZTE1M2Q5NDdiOTczNzY2YzkxMjBiNWQxZmUyZDZlM2VhOWZhZDRjZDczMmUzYWE4NjlkMGE3MjFjMTg4ZmRlYWQ3NmQ5OGQzN2E0Njk2YmQ5NjhlMjNmMDY5NTA2YzUyNWY0NjM2MmFjZDIyMmU4NDVjZjRjMDY2NWU2MzY5YzRjYTA4MjJlYjg5ZDM3MTFiMDcwMTcyNDg1ZDg0NDdkMjAzZjgwY2M4MmExNzQ5NDVjMDk0ZjVlOTY1OWZjN2UzMDY5Yzg4NDhlZmViZWYwOWRkMzQ5NWIwNmQxMGE2NTlhYmJiMzYzYjc4YTc5YmQ4YmMyZGUxYmVlY2VlOTc5ZDJiM2I1MDRhMDU0YzY2YTk4MzkzYWIwNTQ5MzExMzM3ZmMxMjFmMzcyOGU2ZTg4MjFiZTQ5ODIwNzU1ZmY1NzhiMzc2MzY0M2RkN2YzYjU0YjRiYTY5NDYwOTAxNzg0OWMwYmRhNjQyYTQ5ZTRhODViOGVlZDY3Y2Q5ZGFmZjEwYzk4MDg2OWQ4ZTFlZGY5NTQ3NmU3OWM1NDc1MTEwZDE2Y2FkM2MyNzFiNDJkNDgwOWM2NThjMmEwY2JiYzUzOTRmYzgzZGM0MTZkMjU1ZjgxNDMwMWI4NzExYjkxNjA1ZTczYjc0NGRiOWVkY2I4N2ZjNmIxNGNjYThmZmUxNGQwMDcxOWIwMGM0ZjhmNTNiNGU4MjVhY2Q2YjkKKzc1MjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmCis3Njg6YTk2YzY5YzNiZjJhNGJmZTY3YmM1NTNjNjAyOGJiNWY0MmVlNDE3OGY4N2FlZTc1MzVhYWRhODI0YjcyNzE2YTQwYWYzYmI1YmYwMzlmNmNlZTVlNDUyNGM0MjRiMTVkY2NkMWFlMDI5ODFhYjM4MmE2MDcwZmM3MzlkOGZkNTY2NmUwOTdkZGY0MGIwMTQyYTlmZmNmMDY5NDQ1Y2Y1MGRiOGMwODA4N2Q1YTc4NDIxZjUyNjkyMmU3ZTc5YmMyYTE0OWU1ODUwNzU3MjBjNTFiZTM0MWQwODNlOWRjZDUxYWFhNmFlYjY5ZmIwODM0NmU1ODI2OWNkODk1YWMwYmMyZmIzMjkxZjc0YTZkNzExNTUxNTBiNWJiY2VlNTJhZGEwZDA4ZmU2ZTRhZmQyZDdlNWJjN2M0ZTE4ODQ2ZWRmMmJlOTM5YmM0NjgxNWI2OGNlZDQ1MzIxMzZiZmZkZDg5MGE4MzM5M2Y3NTY1M2JkOTgzZjFjZTUyYWI2OTliNzVkMGI3YzMyOTNlMzk4YzM4MDQ4ZTc3OGY0MmFhOTg4YjUxZmJhMTBiNmFhMzc5Y2MxYWJkMTIyOTFlYjExYTkxMGY5MjdkMTNiN2E3NGI3MjVjMjdkYjhjOWY0NDk5ZjNkM2IwZDI1ZjJkODczODI4MGI3M2ViYjI5NzkwYWRhNmU5NWZmNzkzM2ExODllMzQ1MzJlMzEyNDAyN2U5ZmNjYWJmMjNlYzY0NjliNDI1YzYyYmE0ZTBjZDY4MTc3YzU1NWFmMGU0OWJjM2Q0OGY0YjhjNDMzMjhiNTdiZGQ0N2NjMmMxYTg3ZGY3NzY0ZTI1ZDQ5Mzk1YzZmMzUzYTY2YjQyZjQxZTNiZDFiYzlmNmJhODQ3MjQ5OTBkMTk3OGIzNGQ3NDBlMGJiODRhOGRkNDZlZGIyNDUyNTljZWEzN2FhMWY0NmNiOGZlNTQ4MDJiNjVjOTg5ODZmZTlkYzYxYTAzYWVjNDkzZWNjMmIyNjM2ODJkNTg1Y2JmNDE2MmQ2YTlhN2RhNzY2MGZiZTM3YTJlODljZjFkNGRhYzM4MjExY2YzY2RjMDU1NDY3NmUxOGMxYTQzZTkzZTkwYzk2OWRhN2MxZTUyNjUyMzhkNTVjOWNiYjE1NjNiMDdhNzc1MzVhZTE0Yjg5NWM1YjAyMGYzYmRkN2NiZWEyNzJmNzllNWE0MmUyMzAyNWNiMjVhZWYzMGE3ZTBjZDQzZDAxZDkzZjZkYWUzNmM1Y2NjNTJkMTZlOWFiYmJiNjU5MjhlMGViOTdkODNjMTg0YThlMTgxYzlkODQzMGYzZDE5OGRjMDI0ZDc1N2ViY2E0ZGQyZjAxMTg2M2FmODkzZDRiMjVhNDM0ZTMwNGY2ZGI1YjVkNDZlMTkzZmQ4MzQwNGJkOTcyMTZjMzE0YjljZGY1OWI2OGViMzI3Mjc4OTQ3MmYwZTBmMDc3ZTk4ZmNmNTNhOTk3OWZkMDhhZTMzOTU5OGQ1N2EwZTU5YzBiZmI3YzY4OThjMDQyNjM0ZWU3ZTMyZjg4OWViMDdmNWIxN2I1NjhjMDA3YmE1NWQwNWNiMzNmNTU0YmVjNmY3ZGZkZjE2NWY0OWI2NTlkM2UzYWY4NTlmY2IzMDI0ZjY2MTBiNWRiNmIxNzZmMjUwZTgzOGZlNGJhOGMyMWNjNWVhMjQ3Mjg1MTg1MzcwMmNiYTViYTk5YjE3ZGYwYTQ3YWUzZmEwZWNiMzYwOTljMjJkZjY3ODJmOGQ0NWQ5MTBlYmIyYWE3MDFjNjBhZjBkNTVkYTUxNjU5ZGEzYmQ2MDU0YWZlNTQxMzAzNjUzMjc0MWFlYjgwODkzMmQxMGE0ZTVhZjMyZWU5YjI4YjZjMzlhNWM5MTM3MWE1OGRlOGM0MjIwZjhjNjViMDQ1OGU3NjRkZWE4NDdiMDdiZTc4YzQxNjEwZTAyNTg4ZjYwNDczMzcwMTI1NWIyNmE1ZTljYTU3MmMxNmYzMmJiOTIxMTVjMDc4YmQ3NmNmMjcwYWNhMWE1NmIyODNmYjlhNjdmMmY4Cis3Njg6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmCis3ODQ6MjEyNzg3NzBhYzkzZTk4YjBkN2E0YTVhMmZjNzAxNGU4Y2ViYmE5N2I1NzVjNDVkYzNiZWI5ZWRkN2U4YTA3NDQ4NjM5YmMyODVjOWU3YTk4MDE0ZDJiNDBjMmNkMzNhYzZmMTRkMThhZDFmZmE1ZDEyZGFlNDU0NTI3Y2E4ZDRhODMyZTI3ZTBjOTRkNmI4NzBmNzdlM2MxMWNmNTRiY2Q4YThlNDlhMmVkYzZjZThlMTliZWE2MWM3YmI1ZWY0Zjc1MzQyZDNmMmRjNWU2OTRkZjU3NWNhNzc4YzAyNDZkYTM2Njk1NTNlYjU4YzdkYTAwNmU0ZmFhOWY1OGQ1MzBkYTE2NmEwNTFjYzRiYjFjYTcwMDkyYmM1OGEwN2ZjMGNmNjY4NTU4ZTI4NDcxZjZmODNiYjI2NjdlNmIxMzFhNGVjNzZjMjkxYTAyN2I3YTU2M2RjYjM3M2FlMWRlMTUyYzE3ODY1ZTI1NDY5OWY1YTg4NjYyNjIxY2JiZmFlODkyMzA5Y2MyZjA2ZWNhOGMyYTYyNzVjN2E2NTI3N2I2MzI2NmIzNmE4ZWFlYjMxYTNiNzZlMGNhYzAxYjE1NWViMGU3OTk4YzMwZjNjN2NiOTU1NmNkZjE0OTYxMDhmYmM2NTkyYzJlZjdhM2JkNTdhNTU5Y2U5ZDlmOGRkMzBlMzllMjIzYTgwOTA5MTljMzAyYTZkNzAzNjAwZWMwNTNmNTA1MTc4ZTgzYWY5NzI1OWE1ZWZmMWIyMjJjZWFjYzc0YmE2YWMzZTQ2MDk3YmI2MmNkZjhjZWQ2YjAyN2M2OGU2MGY3NmMyMjJhNjk1NzI4NDkxMmViY2JiZGI3NDU4NWMwM2U4ODY3YmVhNjlkZTZiZGQ2ODU2Njg3M2U3NDNlYWUwODU3NDQ4YjAzYjE5MTg5MGU3OTE1MjllNGUyMTQ5Zjg4MTMwYWI5MTJiYmViYTI3ZWNkNzVhZTQ0ZDY1NTRlMzNiY2NhODBlOTE2MWIyODUzMjk2OTRkZDI0NmQwYjE0NmQ4YTg5MThlZjY4YmE1ZGQ0OWFlYTIyYWRlYTAwYjRkZDAxNjdiOWE0YTRiNWYxOGZhNjg0YmVjN2M3ZjYyOGVhNzgzMmVlNmZlYTE2YjIwYWMzMDNmZWM3YThkZjFiYjM5ZGQ4NDQ4ZDE5MmMxOWU2ODZmOTBmYmM3NDkzODk4YTgwMWYwZjIzMTYwMzU5MmNhYTVmYzVlNTYyYjczN2Y4MmI4OWRlNDllZTVmMmNmN2VjNWJlNjFhZDhiMTQ1ZGEwZjlkZDJmYTBlNmJjNmEwZGMxNzYxM2M0OGY1ZTFjYTI2MGQzNWZiOWM4MDdlMjQ0ZGRhMzM3MmQ2MWYwZjU5ODhiNGYyY2RmNzAzZmU1MDdjZDkzMmVhMGQwODMzNDgxZDJiY2EyZGZkYmFkNGFiNTBlZmQwOGUyZTYzYTI5ZWFmMWU0MTU1ZDZiYzgwZjFhNjY1YzQyMzdjZjQwZDMzMWFjMWQ1MmYyOTY2N2M5NTgxZDVhNjZiN2I2YzYyOTk1NjU1M2FlZDQ3ZGRlNzBlZjM0OTJiZTZiNGE5NzI4ZjU3NDY5ZGIxZDNlODMwYTY3MTk1MzNkNzU3ZjY5YjZmNDAwYzdmNjYzNmVlNjk5ZjBkYzA2MjczZDcwYjQwMzM1NzkyYWFiZGY4MTAxOTUyZjllYWNjZDQwZGVkNWNiOTExYmQzZTU1ZDY5OGI3YWU0OTM3YTYxOWRiYjY3YzdiMDJmZGY2N2E5NzI1M2QwZTBlM2FiMGE5ZTI0YmRlMjA0NmJhODJhNjliN2UxYmYzMmJhYjJmYmJiYzJiMDI2ODBlMWMyYjA4YzEwOTliNjYxZjViZGIyZWJjNThmZDM5ZTgyYzVkNGJhMTk5ZWZjZDczZjhhMTg0M2ZlYTljODRjMDgzYWVlNDU2YWE4MTFjOWQ2MDcyYWFjOTg2OGQ2MWYzYmNjYzQwYzdiMWEzYWE0NzAyOTZjNGVlNzUyNWZmMjk4NTQ0ODRhMDU0ODVjMzI3MTg2Mzk0ZGNhYjBhOWI2ZmVhOGEwMGJkZmM1YWQ2NjdiODVjNjYKKzc4NDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZgorODAwOjA5YTAxMTNhNzhjZjA5YTRhN2U4Y2E1MTliNjMwMDRkNjJmNTBkODRjOTU3MGU3NDMxZTRhOWRjMWU3ZjliMjk0MzM3NGZjM2E4Mzk2MWVmZDliNDNjNjk2N2Q5ZDM2NTVkYWQyYTFlZGM3MGI5NDhjM2ZmMTA2MjFhYTYwZDY3MzlkYTBiYjc1ZDQzNGY0NmUyNTE5NjNiZTkwMTIxYzgwMmViMDJiNzg1NjBhMGZhNTdlYjBmOGI3NTkyY2FmMmE5MTkyOGM4NzQ1NzNkYTliODU5Yzg1YzNiODJiOTNiZDQyN2EyZTFhOThlYThmZDUzMzdkYTczZjQ1NjA0MWEwMWY4MjRiYzNkMTA0MmYzZGNmNzNmOWM4ODA5YWVkZmFiY2M5ODIwODdlZmExOTUzYmM5NWQzYjMzYTQ2Mjc2OTU4MzliYWRiMmVmNWI3MDM1M2UxZWMyOTkyYjA3MDg5Yzc0N2RkNDYxNGRlMWIxZjI3M2U4YTIyYTUwMDJiODdkN2RkMmI5MmY3YzljNWZhM2IyYzMzZTRlMDI3ZTZiZDkzY2E1MDcyZGU4ZjkxOGJkNDllZjNhODE5MTAzMGU4M2YxMDRkZGJkY2MwZTRmOTg3ODMzOTdjNGUxZDJjNmZlMDA5YzRmMmIwMDQyZTFjMTZkYmRiYjM1ZjY4OWRmZjllNzkzNDk2YWMzM2Y2Yzk2ZjcwNzQwYTJiZGIxODY4OGZkOWI5YjI4NjVjYmQ0MzQ0YzJhNTRkZGMwMzNhODNlZjNkMTM0ZDVjOGVlNzg1Zjk2OTdkYmUyOGRlNmZhMDM0Y2FmZjc4OTE5YjMyYWY2MmU3Y2FlOTBjYjViNzA5ZTA3YTZjYTg0NDk1OWZkNWUwMTVkYWVkM2Q4Y2VlNTYwYzFkYzk1ZGQ1YTRlMWIzMGMwMzU2OWZlM2Q5MjYyMDc4Y2JjNDhjMjk0YWMwNjAzMzI1YmRlN2NiYjlkZWY2YTRkODI4ZWFhZjY4MDU5ZWFhMjdiNTBlZGZlODM1NDVmYzdkMmUwMDhjMDQ2YjkxMjcxOWZjN2Q3MjYyMmZkNzNiMDc0NGVhNGUwMjMyMDZmNTQ3OTdlN2IzNmJlZTE0YTRmNjY5MjI2MzQ5ZDZjYzJiNTU1MGY0NTQzYmJiZTc2ZTQzYjE3NDZmNTJjZWMyY2Q3MzU3MjM1MzhhMzRjOWFiNTRkYjJlZGQyMmU2YjE2M2E0YzVkYmU3Y2VhOTAwYjZmMWNkYjhiZTdmZjI1ZDNmMThmMmVlYzc5MjlhNGRkM2Q0NzVkNmU1MjZjODY0NDQzMDEwNmQwMmZmZWIzMDBkNGRiYjE5ZjFmODA2Yzc1MGYxODM4NjYzYmE3MGRlZjI3ZWQyMGYxNjUxNTMwOGNlOTQyZmExYWQyZTg1MTZmNWRmMzc3NTEzMzlmNmE5YTU4MzVlOGU4NDhjMjU3ZDI1ZjgwNmM1ZDVlMDU2MmVmMmM5NmE1NDFhOGNkYTU5NTBkMTA3YzIzZmJmZDY5NDdkNjgyNTZmY2JhMDA5ODU5MWI2YjU3NDE4OTE5YzIzZDBiYTM3YjIzNjg2NjlmZTI3MDFjNGQ1OGI2MjliZTI2NjFiNWYyN2QyYjNkZTc1ZmJkMjc0YzJkNjI2MzUwZWU2ZGE3ODYxZTVkMDMzZmQxOTA1ZGEwYzFjNzJkZGZlYmU5MmFmMmU2YTZjNzg4MWY2YTk4YzRiNjIwNTc0NzhkNDE3M2M2YWM4ZDMxYTUwZWYwMWZlZDIxMTc3YmVhOTdjYmYzODJiZmQwYWQxZTVmYjViNGE5MzFmNjJkZDI5NDhjM2EyYjk0ZWE1YjRmZjU1ZTgwMTg3YWQ0NTNjNWI4YzQzMDQ5NDY1MWYwOWFjYjc2NGI4YzQ0ZDQ3MzA1ZWUyMmRjMTI4OTM3NzQ4MWNkZmQyYTg2NjRjYzc2NGIwOTgyYWMyOTIzYTQ4NWRiNGU4ZjdhZDM1Y2QwODgyMGY1YmY4NTRkYzUwODlhMDc3YWE5MmEyZjE3NWMzZjE3NzFiMTQxMDJjNTJiYjI3MjA2MTlmZmE5OGViZDk0ZmYxNWVkNjJiOGQyNGY5ZTAyZGQ4YjhmNDU0ZTBkOGM3NGYxMzNkZjUxMmNkYmJhZTcKKzgwMDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmCis4MTY6MzU2MzQzOWUzOWUxMGE3NGE4NGIyMDRjN2UzYWE4ODY5NTUxNGMyYzJiNDU3NTA1ODk5OWIwYjJhY2Y3MjIxZWJjMGVmYWZjYTIzZmVlNmRmZWM5NjQwYTY3MTFkMWM1ZmM5MDNjOTlkZjU5NmY0M2M4ZGRiOTE5MTE2YzNhMzAxYThmNTI2ZDg3Yjk0YjQxYzY3NDA5MzUyN2RiNjhhZWI2M2QxNzA1MDE1ZDRjNWYxNDA5OWUyNTg3OTFjZWVhNWJiZDEzNjlhZTYzMmNmYTQyZjVjNmQ4NTUyMGE1YjhlM2JmOTY5MWFjNDFiYmI3NTY5ZDQ0YWI3YWY4NGVmZjYwZjYzM2ZjMmJlMTYwMTc3OGRkYjRmODQ4MWY5NDBkZGQ4NDMyZDFhYTg5OGQyODQxYWVlYTkyZGQ0YWUzYjgzYTJlNzM2NDU0YThlNzc5ZWU3YjI3Nzc4ZmM4MGIzNWEyYzIzZDg3ZTRiOWUzZGIyMWNkNTQ5ZmI0NmZkOGQzN2E4ODNkNGQyMTBjYzQzMzZkZDJhYmEwNTAxZGIzYzdlYzUzYzVmY2UyMDhiNjdiMjM2Y2UzYTQ0NmMwMzY4NzJmZmU0MjUxZDQ1NWE0NDRjMDBjNjI2NzJiMTAwZGUzZTQwMTE4MTE1YjgyYWQyYzUxNmMzMGU0OWViZjJjM2U4YjE2ZTFlZDU3NWUxYzZjMjAwYzk1YTE0ODJkODlmNzY5ZjE0YTJhZDExODc3Y2FkYjNjZDhkOGFjMGUyNmRlNjM4Mjk1YTRkMTlkOTAwZDBlYzZmMjRkOTcwMzVlNjFkYzhmNGE1MDI2MjY5ZTIwNWJhMWIzYmRlMWM0MzFkNTZkZTRkZmUwZGNiOTc5MDE4ZWJiMGUwNzVmYzcxMmJmMDExNGUzNzg4YTdjZGM3YmE5M2FkZTUzYTBlMDhkZWUyNjVhZThlZDFkNjM0NWNjMmQ1ZmE5MzFjNTNlMTRkZmNmM2JjNjFjNDgwM2IzZTg2YjcwMmNkYTUzZWZlMGY2ZjBjOWMyZTFkYzZlNzU0NzM2YTI3NmRhYmQ0NjIxN2I5OGJhMTA2M2E3YjA0MWQ4ZDI2ODVkOWIzNmZkYjQ0MWQzYTIzYzYwYWY2NDhhZDUwNGU4YzAwMzAxZWRhNWI2NTY5NmNkZTIwNmQ1NDlmY2Q5ODIyNzQ1YWFiMzA3OWQxMTY5MDU2NTIwNTI5OTNlMjhiODllMDFhNTNkYjdhZDNhYjQ3NTZiMzNhMDI0OTMwYTJiOGU0ZmQzOWRmZmY5MTllOGEzZmY2OWQxZjA5NDUzZTBlOTY2MmI5YTg2ZTk5NTZiNjVjYzFlMGFkMzNlYmZkZGYxOWQxM2NjOWUyYWFmOGU2ZDJjNDE2OTc1YWI1NmY2YjJlMzhjM2JjMDBiMzE2NDNlOTA2MmRkMThhMzk4ODhlYmFjYzI4NGFlNzNiNmI5YWFjNmU2YjQxZTRmYzRhYTJmMGEzYzhhNWM4OWU0MDI3OGVjMDY0OTE4N2U4YTI3YjYyNDBmOGI2OGI2N2M4NGRjMDg1Y2JkZWFhYTBlOThiMThjOTc3ODVlODkyNGQ2YjE1ODk5NDk2YzEwNzkzNjhkZmNlNzhiNGUxMzIxY2I1YjIyM2ViZjk2MzIzMWRkYTc5YTljM2IyYzZmNGM4NGM4YjhmNjQyMGY0NzRlZWFjNzU0ZWFkZGQ4YzJiNDAzYjVlYzJiYTliZjEzM2RhNjMxOWUyYTlhMzM4MTNiOTRkYjJkNGRhZGNlMGMyODQzYTMyZWEwNmY3NWZhOWU3Mzc1MmMxNzlkODAxNGRlZjUwYjEwMmUyMDE4ZjNlNDZkMDAzNzM2NjBhMmJlYjdhYmJjMWM3M2QzNTJkOGUxNjNhMGY2Y2ZkYmJiZWI4MjYzNGJlYTM5OTJlZmMyYmM0MDJhODM4M2RmOTFmN2ZiMmZmMGI3ZTViODdiYTkwYWU3NmY5MjBjNzAyOGNiZDc3ZmJmYmNiNmZlYjFjYmI4NjU2ZTAyNzEyMjMwMzRlZGNjNzExYTM3YTVlM2QwZWEzZmI0MzgzYTVjMjY1NGJhYzE1Y2U0ZmQ5N2NhYTA1NTI2NzNhN2I3NDA5ZWQyMDllYTQ3ZTEzOTk1NDY3NTczZGQ4ZGEyMjQ1YTVkNTMyMjNjYmYzYTE2NDVhMGRlCis4MTY6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmCis4MzI6NWQwNjk3MWUxYjM5OTljNjFiOGMyYWQyZjZjNjljZGMxYzA3ZjVkYzczNmRhYTc4ODM4YzY4MTI3NTY0YmM4OTI1YmE2MDBlODkyYzA0MDQ1NjY3NDQ4YzliZTYxMDFkYmNjOTliMjhkOGZkODA5ZDMxYzJjMGYyYTBjZTllZTQzMDc1NDU4ODcwM2ViN2VkNjVkZmQyNGYzMTY3MTAyNjc4ODVkZDZjYmFjZTdkNjYzNmQzYWM3ZTRkNjU0YjdmYmE5NTRmMmI0ZGM1MTY0ZjIxZTZjY2MzY2ZmYjlmNDMwZTNiNjczYTdjNjQwODhhZGM4ZTg0MWVlM2QxZDgzYjQ3NTgwODk5MjU4ODY2MGU4NzU2ZjQzODA2NWY5YTkzYjNkZTJlM2VlMGE1MjI5ZGYxN2M4MzBkNGMxYTFlM2Q3MmU4MjllYjhkNzdmY2E2YjRjYWJkZjE2ZDBkZDAwODYyYTA4ZDg5OTA2MmI5ZTIwMWIzOGRjMGY3NTVmMDg2NThhODVhZDgzY2Q1ZGNmYjI4OWNkMmVkM2UyYzVlNGYyZmMxMDk3ZDU3NDhlNmU1YmU4OGRmMzdmNTg2OTZkNjk2NzM0MDhiMjFiOGVlMWZhYmJjNjMzMzIwNTNjMjA2ZTU0MjA5YWVmZjAyYmYyYzdhYTM5NjM0NzkxYzVkNDRiOWVmMmZlMTE3ZGM5ODM1ZGQwZmVmMWUxOGRkZGZiMDNiYThmMTgxOTk4M2ZjN2JiZDkxNzZlNjYzYmZlMjkxYzBiNjU1YjY0ZDZkNTIwOTAxODA2YTQ0YzY3MGUxNmJkYjU1MWJkZTMxNDIxMmVhMzA2ZjQ0MGNjM2MxYWU1ZmUxOGRmZjRkNThjNTk1ZmJjZjJhYmVlNTgyMzQ0ZjMzNGVhZjdjMGQwNmZhYTM5YzZmZjkyMTk2Nzc2NzVjODU3MjU0NjQ0MDYwZjMxMTdjZGM5ZTk1NzRjNGFmMTNkMmI5MTEwM2Y5MmZlOGFhNjY4NzQ2ODBiZTBlMzFmNTJmN2RmNzIyNTIzMDY4ZTUxMjBjNjA2MWI1MGE4NDU5OWMyOWZhMzM0MDNjMTg1M2UzOTNiN2Y5NzFjZDk0NjMzYjk4MDhlOWIyYjQ4N2QyZjgxOGRhYjgwMzk5ZDc0ZGM0MGQ2YTVhOWY5ZjBhZTg2ZTZiM2E0MDQwMTA3NTViNmQ5MWIyODNiZjk2ZWRkYWFjNGY2Y2Q5MThkMzdlMTM4MTNiMWI5ZDVmYzU2ZDlmNmM2YjcwNGU4NDVlNDQzZjJjN2ZmMTUxOTdiZjNhZDg3ODBhNTNhNDVkZmQ0MzRjZWM2MWQ2ZmRiMTQ4ZDMwMDFmNmQ0ZDFkYTExYjI0NDBjZGE3Y2ZjNGVjYjhhNGRkYTM3NjQ3YjYzOGVlZDY5ZDE1MjkyZDRhZjQ4OWJjNzIwN2ZjNTYyNjI3YTJiYzQ3ZjMwYTE3MjNhMTliOTU2YTY3NDdiYmU1ZmVmMTNmYjgzOTgwNzMwNTk5YWRmMWM4Yzc5ZjNlYjhmOGJkMTZmODg3MmUzZDAxMWQyNDk2N2Q1YjRkZjUzMDU4YmY2ZDg1MGVhMzUyODIzY2FkMTlhMGIxZTYwYzBjMjQzMGI4OTk1MzBhNTkzZDAyNzIxYjEwMTVjZDMzNDM1NjI5MWFjNDhiYjM0Yjg0MGM4ZWIyZWFhODQ5MGUzMWYwZmJiNDBjNDA1Y2FkMGE0YTdhYmIxOTY5YTQ3ODFkNDViMzlkZGY0NzA3MTk5MDljZjg1M2NlMDg1NGU0ZWE3NDJiZWUyNDM0YzQ5YzgyY2JlYzRmNGZmZDZkNDE3NzUxYWNmMDRjN2FhM2NmODA2YTMzZGJmZGJkNGI2MjI5NDVlYjY1ZWFhNjk4ZTJlZDZlNjQ4ZTA2OGJiNmVlOTE3ZDcyZjdlMWYwYzUwYTk2YjlmMTM5OTI1ZWNhY2YwN2Q1ODIzNzcyZjc5ZWY1YTBiYmUzZWE1MDMwYjQ4YTZkNDVhOTZjY2U5MTEyY2E0NTYzMmM1ODYyOWRjNzc2NTQwMmQxODBiN2FkM2I4OGU3MmU1OTM5OGUwMjU2ZWQ0MDZiNWFlNThmYjkxZDcyNjMwNjRiNzg2NjdlMzdmMWJhZTM4ZDQ1NjVkOTAwMDVkMjljMmRkYTRkODQyMWY0NjY3MWE4M2U2ZDQ1N2Y0ODQzYjFjM2E0MDQ2OGZiOTIyNzFmMWIwODU2MjkKKzgzMjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZgorODQ4Ojc0MjVjNTA2ZTM0YzFmN2Y0MTM1MWU2YTgzNmQ3MTJlMzA4ZmVlOGU5YjA3YjBlYTQzZmU3YzkxYWZmOGI5ZDJmZjM2N2EwZTc0MjdkMDZjYTEzMWUzOTZhZDdkOGJlZTRkOTI4NDlkZWIzZmJlZDlkM2I0YzY5NTUzYTg1YjUzN2IxMGY2NzFmYjViYjE4ZTJjMGI4MWNmM2Q4YzQyNTExZGI2ZjcwY2Y4MzM5NDYyZDE5ZTBmMTc4NzJiYTAyNjRlYmY0Y2EzNGU4N2FiMmU2MzNlNjNmODhmOGZjNjliZThiZWQ5NjM4ZjVlOGEzM2I0ZmY0YjUwNDA4YzViNjQwNTA1MDY5ZTg2MmQzZjQzZWYzZWQ1ZmM2OTFiOWUyMDc2YzM3OGMzMmEzZDkyNjY4ZDE2OWFhNDRiZTZhZDQyNTk2MDE1MjhmYmNlYTVmYTVkNDhmYmE0OWY4MzBmNjA4NDQ4MWI5MjBlOWI5YzYwYmZiMWQzNmM5MmY4YmZiYTFjZDAzZjc1ZDc3YzFlMjBhZjMyNDU3ZDY0YTE0OGJkMDUwOWZjMjViOWU1MDczOTE4MzM0NmExZTcwMTJkOWRlYzhlOWY3ZjgzYTQ4YTc0NWU0ODM4ODljMjBmYzg4OTc0Y2IyY2ZlYTVhMjcxYTNhNDgxNTVlMjNkMmYyN2ZmMGI5Y2Y5MmRmMGJmZTY3YWYyZTA5NDgzNTUyMDZmMmEyOGI2ZTk4NGEyMTFkNmUyZDlkNGI0ZGMxZGJlY2NlYjI2Y2ZiOGQ2MWJkZDQzOWZhNzkwOGM4Mzc3ZTc1ZTNlZjM4Y2FhZTg2YjQ5OTc4ZDI4NzQ2M2QxMzk0NTlkYTYyNWY4MGU1ZjkwYjRiMjEwMDk1YjI5ZWY5ZWI1NDc0NGY5YzBlMWI0MDlkMzEwNWI1NTgzYzA3NzRhZjhhMWE0OTY1NTk1MjdiMGQ2MTgxZmI1MzlhMWVhNTc5OWU1ZTdiMzYyNjQwMjQ5ODM4MDNmYTFjMjJkNWY5ZmI2OWRkYWFiZTNiODZiNjdmMWExZTI4YWM0ZjU0YmNlNTA5NWM2MmMzNGNmNDRlYjliNGM3ZGFjZTM0ZWZiZjc5YmMwNjRmYWU1Y2FjMDFhM2YyZmYwZjE3NWFhNDRiMDIwN2IyOWU0NDA0ZjA1OGI2MzNmOTk0ZDZmYTJkODczMDJiMDQ1NGRlZWQ5MzA1YjljNmE1ZGNhNDQxM2RlZWQ2MWIzZDBjMTNjMjNiNjljMjkxYTUxOTc4NDJkY2UwYjc4NzM2MTQ0MGI5YjhmNjg3Mjg0Y2M5MjNmZDNjNTBjMWJlMjkwOTI3Mzg2Yjc1N2Y5YWFlYjMxOGE4NzgyOTZjOTVhMjQzYWZmZWNmNTM4N2I2ZDJiY2Y3ZjY4ZjQwN2RjYjJiNzc1MjYyYWNjMDQ2MGU1MTZkODRmM2E0NmZhYzRmM2EyYjZmNDEzZDU3YTllODY1YTAxZDljZmIxMzk1NzQyZDA1Y2Q5OTMyMTY5ZGU0Y2ExZDI0MmU2YTFjZjVjNmIyMzAwMzFjZWIwYTFiZmMwOWZkMzUyMDUyOGYxMTEwOWJlZDE1ZmY5ZmIwMTFiMTNkOTU2YjM0YzA2ZTdjZTVmMjg2OTNmOGE0YWI5M2RmNmYxMWU2OTQ1YjU2ZDMyYmVhNmFiNDc1NGJlOGM5NTFhYmY3NDgzM2M5MWUzNjJiNTBlZmQyNmEwNzg3YjA5YzVjY2Q5Mzg2ZDc5YzdjMmM2ZWIyZGEyMGU4NzMxMDhjMTZhNzY1OGY4Yjc2NWZjZGI2NDgwMDcxYTBiODYyNGZiMGNhNWVlMDgxYmMyNDA3NTg2YWE2YmY1YjI4NWRhNmMxMDA3MGEwNjhlMWRhZWQ0NTAyZmFkZTNlZTVhZWY3MzNmZmY1OTBkOTA2Y2IwYWVlMDkwNjFmYzgwMzNkZmJiNmY4ZTUyZDk4MjIzMzIwYzE3YWU2YWM4NmUxZWJmYWMzYmViNzU4YjgwZDA4MThhMDJkMzM1NTQ0YzM3MmY3MGZiN2E2MDI2NjhhYjE2M2VjMGI5ZWM1ZDAwY2Y2MzdlZDFhYTRlNmQ4ZTc2NjY4ZDdjYTc1YTQxOGE3MWY1N2M5MDY3OWFmNDgzNzU4Y2JmNTk0MDI3MmE5MDFlYWYxY2E5YWE3MzM1YzZjY2MxMzk5YzhkN2Y4MjllYjdiYzkwMTFjOWJjNzE5MjBkNWQ4MGVmYmVhOTFhMmY4ZDk0YjMzODk0NzhhODEyOTNlNzE5M2IKKzg0ODowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmCis4NjQ6NzY0YjkyZmQ2MWU5OTI0OWI2ZmIwODViMDJjM2IyMDRkY2EyODU4YWFjMWI0MTlkOWFlMTZkYzdlOTI3YWE1YmE0OTcxYTFhNGViYmM1NDIzNmE4NmY0MzcyMDQzMTYyZGRjNGI5YzM1ZjRlZTQzYTFjYmEzZjA5MDQ3MGU4MGY1ZGQxYWFhZDU3OGM1MThkYTNmYTVmZWM3OGQ0NjRlNzRiMmFjZGU4NGU1NjQxYjEwNzQ4NjgzNTZjZjFhZmVkMTQyNzFlYWY3MDVlYmRiOTQyMzRlNGM5YjAwYjRmODhmY2I0MDliMjA2NmVjODJmOTU0ZGVmMjNhMTUzYjk1MjMxZDAzYmI0YTFjOGZkZTE5MTg3Yjk5NzU1NTAyNmUxOTU0MjQyN2Y3NTdmZDcyODM3MTZiYzBlOGQwYTRlNzhjODg2MWU3ZjQ5NzMzZTg5ZDI4MTc5NTA4YmI1YmYxZDAzZDhjY2VjMzQyMjVmZTViZjI2ODAzNDU2ZjUyMTBiNGEwMDk1NzBkNTY4M2E4M2MwZjhmZjQ4MGI0YTRmNDU0ZWRjYzJjY2U4YWJjMTEyZmRhMjc1OTVlYmE4ZjNhMTAxNTk3ZGQyYzJkNTNiMDczODE2YWZmNjU0YzM1ZGU3NjliNjM5NjQyOWJiOWExYjQzOTVkMDgyMjk5NjhlNTc2NjY4MzIzNTZmNDNkNjFiOTEzMmQ3NTJlOTgzOTY1OWQyODZkZDc1NjY3ZWIzMjBlOTBiMGU2MzUyZTA4MzRmYjdiMThjNjU4Y2E1NDcyYWMwOTA5ZTAxOGY3ZjQ5NTNhZmZkMzUyOTE1NGFkODgzZDJlOTFkNTZjNDFlZjg1YWI3YTQ5YTQ5YWFjMTE2ZDAwNTFkOGUwZjRlMDkxYWQ2ZjVhYzQyNzNlNWU1NmQ4ZGNiM2VlMGU2ZTc1OWViMmE3ZjU0ZDcxZjIwYjdkMDI1MDA1NmM2ZWIwMmI4YTA1ZDgxMmY0NDljZjQ3ZWQxOTExOTYxNTZiMmUwNjEwOTgyMDVhOWVhYjNmZTUxMGMzNjkxYjQzOTgzNWRiYjYyNzA1NTUzZjBlZGQ2ZmU2NDNmYjU0YTI3M2FiM2I3YmNiMzdiOWE0NmE2ZDViNTA4ZjBhNDI2NzljZjExZWQ0MDU3Yzg3OTI4MDE4ZDcyMjIyYjE0YTM4YTFkMWUxNzQ0ZWI3OWJhN2Q3MjcxNDAzYjFmZTNlZTM5ZDc2ZDk0NjY1YTMxM2Y1OTMyNzk1Y2Y2NmZhMDhhNWIwZTYxY2Q2YjMyNjQ4YzYyOGVjMGVmMDA3OWNhNzRjYjg0YmE5NjYyN2UzNDk4OTI2MzZmMDc4Mzk3NmQxNmUxYWVhYTIxYmQyMGI4YjBjNjQyZmM3M2NhYTFlNWQ5MmZhMWI0MTJmOTRlZDNlMDhlMjE3NTVkNjA4ZjVlNjJlMzg3MjY3ODVkYWY3MzMwNmMwODJhNWFjMTM2OTBhODI0NjViYWJkZjhmMTU0ZjAwOTY3MzY3ODAxMzY4NTZjODZjNWM2M2Q5NTE3MmRiYWM4NjQ3NjI3NTM4NzY1OGUyOGY2MTJhY2JmMGFjOWQ0NGRiYjAxNWQzMzljYzA1NTE3ZjVhMGMwYmM3YzdlNzc0OGI5MWRmODdiNmY4ZDQ4YjhhODkyMWE3ZDg3MzdkYTMyNDc2NzM5MDg0NmI3MGVmNGY1YWE4MWExZGY4ZTE2YzFlZmZiZmQ4NjEwZmQ1ZjgxNWFlNDJhYWU1MjExODFiNzE2ZjQyYTI0ZTYwMWViYjliOTUzNThhNzdhODBlZDJlN2RhOGI1NGFiOTM1OWY5ZjE1Yzk2MjhlZWMwMGIzOGNjMjEzNGE2NzFmMTFhZTdiYzk2ZGE1OWRhNzNlZjI3ODMzODcxNmRkODVhNjdiYmI1MDdiMDYwMGYyNjE4NmRlYzhjNmFiNGU1YTY4YjMxYzBkMDUwMWM2OWE0OTY0NjQ0ZGMwZTRmNjExYjYwM2I0YWNjYzI5NWM3YmU3ZDYzNzI4NzFhNWJjYzViZTc4ZTZmNTM2ODljNTBhMjBmMGNjMWI0Y2FkZTVjM2MzZjQ2NTMzN2ZlN2NhMzIwZWFiOWYyZTZiNGZiODE4OTdmMmZiZGQ3OWYyYWY1NjQxYzQxZjhlZmIxYzZiZDc4MjljMjk1OTk0NmE3NjcxYWQ0ZTYyOTE2Mzc4ZWUyMjBjOTM1NmQ1NDIwNWQ4OGQwZjMyZjEyOGJiODA4MjRmMmY4ODUwNmM1OTBlYjRmYWY4ZmNjOWNmMjhhZmJkMzkxZWNjZTZiYzUzOGE1YjY2Cis4NjQ6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmCis4ODA6MjljMmYzYjJjNmJkZDEyMDljNzZmYjZiNDgzYTBmZWE1YjI2OWRkY2UzNmNhOTAwMDhjZjJjYzUyY2MxZTNiMzgyZjNmZTQ0NTUyMzk5N2MxMzE4ZjUwMDE0Y2UwMDBkZTM2NWRiYWFiOTMwYzRhOGFkMDc0M2JhNGY4YzlmYjQ1NDBjNWJhMTI5NmNmZjU3OWE2NGI5NjRlZmQzZjYyZTQ4MTk0NGE1YzQ3NWFmMzVjNTEzOTQzODNjODBmZDVjZjM3ZWI5NjllOTdmNTNhZmNkYjRhMjkxNDQ3MzUyM2E2MWU4MjM5ZmQ4ZTQ0MWNiYjAyOGMyM2I5YTgzN2ZkMDU4MjQ5NzJmZDllMmNmOTI4NzZkMmRjOTM2NDFlMzUwMGY1MmJlMzNjYTVmNjQ2YzgwMTNjMDRhMjU2YTcxYmJiNGNhM2U0YzhmZmJhNjExM2UzNGZmMjQyM2VlNWM2MjM5MDJiNDdmMmExZDhmNTFiZjVmMGIzM2QzYzhkOTQ4ODU5YzlhMDc4NzEwMWUxMjZkYzhlNWUyYjViYWI2ZjEyNTYwNWY3YjFhM2VkODVlMTQ4NGJiNjM4MGJiMDFiNDRkM2IxOGRiNzhkOTA0ZmI5ZjIzOTIyMjkyNjg5MzMxNGQ4NTU5MWM1OTcwZjJjMjg3ZGM3ODgyN2MzODk1Mzg1YzMwNmE2ZGZlMDUwMDBmN2YwMWJjYWJjMGU3ZWExNGVkZjAxOWYyMGMwMWYzNzMyZTRiZWJlZjM5NTgzNGQwNjk1ODJmNjg1MTU3ZjkzZTc5MjRmY2IwZmE0ODk4NjYyZmQ2NzE0NGY1YjViZDA3ZjhhZTYwZDgyMGE0MzA1MTUxYTI5ZTkzMDY3NjI5MTRiNTc5YTUyZWExYjhkNmIwNmU1MGUwMzlhNmIyMTQ4ZGQwNjNjMzc4MWRiMGNlMmMwZTQ2ZjA1NGY0MTMyOWI1N2MwN2U1ZjU3MTM1NmEyOTU4NzkwNWJlOTQ3Y2VhN2NiMzhhMWExOTBhMmNkZjQ0MzUxNGUwOWZiNDI5YTVlOGM1NmE4Nzc0ZWMyMzQ0ZWRmZWJjNGFhNDA4ODcyNWU3MDgzYjlkMDkwOGY1YjBmYmI3MTg3NmRmZDhmYTY5YTBjMWVhNWNhYzcwNmM2MDYzYzdlYzlhMmNlOTg2ZThlYmU1ZjNjZmFiOWE3YmM2MzY2NjZiNjI3ZDUzMzhkNDhiYWU0NTAxNmM2Yzk4NzQ4Zjg1MjU1NGZmZjQ3YjBiNDZmNGQyOTUxZGY5NDIyZjgzOWFkYTViMTBhYTVjNDcxZjM1OWFlMWU0NjJhODM5YmFkNzlhZjI2MzIyODkzNTMzYmExMTlmZTVmYWQxNmQyY2FiYmJjMDcyMTBkMmNiNmVhYjgxNWE0YTc0ZThhYTYwMzMyZGE0NWE4ZWViMzc5MTYzNjVjZjQ0MzVhYTViNWRmMzY4NmIyOTljODQ2YmQzMzQxMmI3Zjg1MzVlNDcwMDc0YTk0NDA3MDJkOWY5OGJmOWRmY2JhZWM3YzM1NmQ4YzYxMDc3MjM1ZGZkYjY2ZTM0OTM3MjRlOTNiZTc4YzVjMTE0YzllNzk5NjczM2YxYzZjNjE4ZDk2MGI3NzkyNjNjMTQ3M2I3YzBlYjY4MzFiZGJjY2NjYWU4OGEyODdhYjkwOTZmNTAwM2EyOGY5ZDkwMjYzNjY1NTQxNzc5NTRhYjM0YWM5NDBlMzNkMTRlMmM2MWM3NDYyOGZkNjE3ZGJiNGJkMDM3YzU3NjNlZGZjNTI0M2YxYzdjZDk4YmVkOTcxOGU4NTYwYzFlZGU0N2M1YjMyMDFmYzQ3YTJlZDU1MDc2OTc2MzNmZTM0YmZjYjllNDA4Mjc5ODkzNzhhODVmM2U0YzQ3NmYyYjFjMjEwY2QwOTQwNzAzNjM3YWI3Mjg2MTRlOThmNjAzYTQ2Y2Y1ZTgzMGFjNjQ0Yzg0OGE1ZTIzMzM0OWM1ZDUxNzhjNjdmNTEyNjFkMWQ3Y2E0YWEzNmUyOTNlZjc3MWI2MWJiODEzMDNiNDU0NmYxZDZjN2I4NGQ5ZTFkNDcxMjE5OTBjM2E3YjgxOWQ1MzE5NWI3ZWNlN2JjNmJiNTE3OTQ4Y2M0NDc3ODIwMGE3YTUzYjA4M2IxZGUxMzNlOGZiZjFlNTFkYTljZjQ5Y2ZiZDA0NzczNjU0MTQ5YmRiZDY3OWVkNzJhY2FiMjZmMzAxZDg5NWIxYmQ4YzA0NWZlYzk2NzY4YmE0OTAyMWZlMzgwZWM2OGFkMWQxNDNmMjZiOGQyZTg3M2ZjODI5NWJiYTc5OWM5NTNkOGI5ZTA4NTdkZjJmZWE3OTBmMGQ3NTM0MzIKKzg4MDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZgorODk2OmIzODA3ODQ0ZGJiMzAzNjVlNmY0MGY1NmU3YjFmMDc1ZDUwNzYyZjEyYzY0ZDdhN2FmZGFhN2RhOWI5ZWI4MGU5MGJkMjYzYTU5NzdmOWNlMmZjNzYxNjI3ZmU0NDc3ODBmNTlmZDZmNDUyYzA2ODhmNWFjZTQ1MWM5ZDU4MzExMTUyMzU1OGIwMDdlMTdkYjYxMTk2MWE2OTU2ZTdkNzc4Yzc0Mzg0ZjQyN2ViNTRhYzIzMjEwNDFlMWJhYTcwMTE5YzgxOTc4YTc1MTM5MmI0ZjQ5NzA0ZjE0YzlmZGQ3ZjQyM2I3YzBjOWI2ZjhlODljMjU5OTlkN2VmMDA4ZjUzOTc5NjhlMjZhNzY5YmMxNzJiNTA5NzRmNjk4OGQ2ZDkyY2Y3ODM2MzRjNzljZjgwNGQ1OWM4ZTkyMjVhMTdlN2M2ZmU0MjE3OWY1MjIzOWNjYjFiODY1YzhkNGVkNWVjOGJkN2JkNjNmOGNjMWEwNWQ2ZDY1MmYyNjg0MTkzN2Y3OTRiMmMwYzhjNDkwM2UwYjg5MzViMTg2ODM2Mzc5OGRhOTgzNTQxODA3ZGViZjk5OTZiYjZjZDVmNjE5NzRlMDY5NTNjM2I3MmVjNzBjNmI1YzY5MTgxZTI3NDUwMzNiM2Q3YWFiZjQwZDg0ODQ1YWE2YTMzYmRlZGNkNjM4M2Y3YTE5NTA2ZTY1Y2ExOGEzODc3Nzc2OGIxZTIyOWExM2RhNWMwNTRhNTg1ZDFlZDgzZDdhNzgzOWI3ODBkYjY2M2I2MzQxMzJkOTBmZDFjMzk0MWYwOTUyODJjNzYwYjIxODg5NDM4YWNiNDdhZTAyYjljMmYzMDU4ZjEzMTg2YjE2Y2Y5YzM3NDU0NWM4MDQ4MDdjZTJkZGY1OTBlMDM4NjMzNjE5YjUwYmYyYjc4YTU1ZjZjMDg0ODM1NjNkMjY3YWU4NDkyNGY4YjFiNmE5NDU3MmU3ODJjNGY4NjYwNTQ0NmQwNjUwNTU2ZWM1ZmZjZGNiOTJiMzNhOWM5ODNiMmU0MzYwZjk4ODdkYjgzMTJmZjJlZmFjZTNmZDkyYTJiOGJmMDM0YmM3MjBlYzgzMjI1MmE1ZWI5ZDgxNzMyY2EzMWE5MjY5NTViYTAxZTJmMjg2OTk5MTNhNDk2MWEyNmFjZWVlMzgyZTNjYTc0MmYxYjlmZTNmNTNmNzFmZjEyZjNiZjEyZDllZTdlMGYwZGU2ZWUwODk1NjhkYTA1MTE1NjI4MTNlZGFlZjYwZjQyOWJlYjc2NjI2ODE0ZDQwODU0ZGM5MWZkZjZjMjc4MzE0MDcxMTMwNzRjMTY2MWZlZWQwMWM3YTIyMmMyYzQ2OGM2ZjQyMDdmNjI1ZDBhMDllNWE0YWQwN2YxMjM4OGNmY2U3MmM0YjA1YmExZDZjMDdjM2M2MGM3Yzc0NDUwOTc3N2I3ZTZmZWIwODVhMzNiYWQyZGY1NTM4YjQ2ODM5NzZkMzIwOGJlNTdjMjE3ZWI1ZGU0YTViNTg0NGU0ZWU4NzczODFlYmYwOGY5NzViNDdlZDFkMTdiYTJjNTQxMTQ2ODAyNjU4YTE0NjQxMzc2YzEzNDU5NzY0ZTAxOGQ3ZTYzMjBmNTJjNmNkMmM3ODA0ZDc4ZDFiNzRlODYwZTEzNGIzNjYyOGI0MjNiYzBhYjhlNDViN2RiMWNkMWY0NjA5YWI5Mzg3OGMwNWVhMDcwY2YyZDU5OThjZGJiOGRiZDg3ZjEyMjZiMjQwMjliNTM0NzFmNjg0Mzk2MDFlMDRiNjU4ZjQyNjlmZmU1OGIwNzAyNTFiMjg2NDI5OGFkZmM2YmUwYTNkZjZkMWM5NGFkMjVhYzI3YWVmYTBjZWRkMTQ3M2U5YTM4MDg4NzdlMWZhNjVmNjQxMWY4MmM2N2Y0MmM5NGM2NTVmM2UyZTkyMTVjY2IwODJkMTcxZmVjY2M2ZWEwNjg4ZDI5MDUxZDZhODBlYmQzNjM4MjEzMTkzM2Q1ZDlmOTUzOGMzNWE0ODk0NDZmYzhiYjI3NDhkZmFmMjMyZDUxYmQ0OTg2YzNkZDVkZjI0Mjc2OTZmZGU4NzYxYzY5NWMxMmQwZDI5MTA5OWUzOGM3YWJmMGNmMmUyNWZkOTUyM2Y4ZGQwZWYyMjZkMjNjZjY5ZjIzZGIxNWU0NmJiYzMwY2M2NTJhYjcxNDBmM2VkNGNhZjM5ZDI2ZGYzNWQ2NjI4Y2QzOWJmZDQ0OTNkNTM1NTMzYTYxYmZlMjEwZGM5MjllOGE2ZjUwZGI1ZjAyMjIzNTVlZDJiYTNmNmU5NDVlYzg2Yzc0MDY0OGJjZWY0Yzk1NzZjMzI3ZjljYjNjYTUyNjEyYzViNzJkOGY0YjE1MjgwNWU2Y2JmODM1OTMxNTNlYTBmMGIKKzg5NjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmCis5MTI6YjY5MDk0OGU2ZmJiNmQ1MDY1ZTFmMTQzYmQ4NDEzYTE4ZjE3NjJhZTQzMDFjOTQ2N2YzMWJiNzVmYzczY2FkOWVmNDRhNmY1ZDIyZDk4MTNkMDY4YjU1NWJiNDk0OWZhYTAwNzU2OGM4NmY2MzY2M2ExNGRmOWQzNmM0MGUzMjk0MzVhYzViYWE2NTY3OTZlOWI5MmJhMjYyNDdhMjY2YTlkNmNlZjQ2MThlYzFmYWZiNzMwZmRiNWU0MTc1MDNhMWJkMDYxY2NkYTJmOTNiY2FiNmM4ZDBiMWUxMWQ5ZjI5NzgxYzJhZTM2MTc3NGI4MmIwYjA5N2JlNGE2YzA0OTRkZmRlZTMxZDk3NTkxYzIyNDIyYTA5NDE4MDgyZDFjMzY4OWZkOGI3MjgyOGVhMTczMDUzMTY2NWNhNzI2NGU3NWFlZDNiNGYyMjg0NWNiODEzYmM1MjVkODc3ZGZlNjE2Mjc4ZTIwNDE1MDVjOGJjYzBiM2Q1MmJjOGVmNzMzNWVmNjU1NzMzZjI2MzQxM2Y1NDkzY2Q2NWQyMzNjM2YwZTI3Njg4MWRjYjEzYjI3NzYwYjI2OTQzNzU1MDJkOWRlNDQ3NTAxZGNiZGIzODBlOGZiM2Q1NTRmYTJjYzc3MWEzOGVmOTI3Y2ZkNGNjMzg3OWU0OTdlODYwMDZmNGFhM2IwZTliYTNkZTY4NDRjYmRiMGU2M2UwNGQ4M2JiMTI0Y2NiZWI5MWFhYmI0YzZkZjU2N2ZmNGM0MzAyYTllOGVkMTNjNTkzMmUxYzhhYjAzZDNkMGQ2YzZlNDcxNWE2NDFlODJkMTVmMDhkZTU1YTgxOGI4MmM0MzdhYzAzOTYxNjQ5OWRhMmMzYWZjOWM1MGU4NWU3YWYyMzgwMTUxNjk2MWQyZjQ0NjBmZjQyNWIxMDIyOGM0MjU5NGU3OGUwNWE2OGYyMzhiZTM5NTdkMTVlMmJhM2EyMjc0OTlmZjMwNTY0ZjdjMmExMWJhMDBmZTA1NTA1ZDA2NjQ0NjJlMzAxNzM4ZjM3YjU5YmJiNDNiZjQ0ZTNhZmM0MWU3ODkyMTFiOTcwMDU4OThmOGVkYjE4MjMxYWZjMjZlZjk4OTY1ZGY5ZTM4YTIzMDZjMTRiODJiZDk5NTE4NGJjYzEwNzhiMzZjZGNiYTQ3Njk4MGE1MDI1MjQ0N2E0ZjJhNTkyNWUzMTFhMmYyMTA2N2I4MGIzNTAzMWQ2NzdiZjM1NjBkNWQ1NDM1YzExMzFkMGViOTg2M2VlZGMwNjA5NWMwYWU4YTRlNmIxM2U5ZmVmYWQzYTljOWIzNWJkNmFkYmM0ZGIwNGFkYTc3ZTNhZjU1MTgxY2IxN2FmZjVhZWY4NjFiZDA1ZDdlYWQxZjQyNTU0YTViYWMzNmNkNWIyYjg5Y2MxMGNmMmIwOTA3MmQxM2U1MTc0MTEyMzVmZjBhMzQ4ODk0ZGYzZGM4ZDM3YTE4MjhhNWZmNWRkMzFjOWQwNDIwNWJhMGNiOThhNTEzOTQzNTllMjAyZGJkZmRhMzMyMTg1Y2NjZWQ4MWY0NTFlN2E3Yjc5NTc2YmUwYmQ1YWI1NzFjODJjNTc2M2ZjYTBjYTY2NTI3ZGQ5ZjUyNGM4NWRkMDZmNTIyZDg1ZGU4NDZjMTExZWNlNTcwZDEwNzJkZWNlNzU4NTNkNzJkOGQyYjc2Njc3YjUzODc3Yjk1ODY0NzM3OTVjZTlkN2I1OWU2MTIwMjNmZDA4YTE2M2QyODk3YjM1NDgwYjRmM2UyZDRkYWEwOTJkYWYzMjEwMzE4NzhlNTQzMjE5NzEzM2FlNmE3NjNlMzM2ZTU3MGY2ZTA0MjhlYTZhMjUwMWFlZTE2MGIzYjllYTJlMGNhYTEwMTkyN2I5M2VkYzZkY2Y5MmNjMzhjNDY4ODk4OWVkZTMxMmZiYTNhZTM1Y2NiODA1NmVlZjU3NjY4ZGQ0NmYyZjBlZDliYTJkMzVhZDQ1MGNhYTk0NWJhZjM0YjhmMjU0YTNlMGFmYmMzYmRkMzc4NjlmMTM3NDU2MjJmMzBjMzVmMzgwZDYyOTkwYmI1YzQwYTBkY2JmNmUxM2VjMGNmYjU2OWMyNTgxZWU2OGUxNmQxY2RjYWRmNzdhMTVkMTY2YzU5YjdmMTU0YWFhZWE0YmQ0Mjg3YzMxZjI2ODMwMTNmYWNiNTNiZmM2OTk5OGQ1ZDM1YTU4YzRjZDkwYTNhYTNhMDQ5ZTA2Y2M2M2E2ZDcxODFhMmMzODgxN2JlOWM0NzIxZTM0NjY2NzU1N2JkOGQwNzZjMTIyNDM5MmQwMzlhZTI0MzcyNGRjNDk1ZmUyZWMzZjJiZTA2MTA3YmI5MTQ3NWYyM2JkZDcwYjkxZjg2YzVmNDI3MTE1MDkyMjJmMjk3ODNmZjA2NmVhNDNjZmIyOTMzZmYzMjdiYTgzOTE4Cis5MTI6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmCis5Mjg6YmM1ZGYzNjRhZGQ4YzhiODRiM2NkNDQyZjBjYzA5ZDJhYzA5MmFiMjVhODFjNmM1N2E1YTEzZjYyZDlmZWE0M2MwZmJmMzE0ZDcxZTA1YzRlYjAxMTU4YWVhMTkzMDllZmI0YTVmMzJkZTVmMzExZGI0M2Y1NjhiNmVjOWQ1NDM4MzczOGNlNDAyZWI2NmExNjEyOWM0YWIxNGYwMWJhODFiYmE5OWNlYWU4M2IxZTEyNmY4OTEyNWRiY2E4OWJlMTc4YzIzYTVhMWE4Y2RiMjg3MzY5MzIxYjk1OTg2YWVlYzAyYzc0YTYzZmMzMmQ3MzY0ZTJlNDkzODJkNDQwMTU2YmUyNDI4YTMwODJjMTRkZDQ4MjM3NGE4ZWRlMmIzNzU2YTQ5NzI1YWU3ZTMxNDhlOGNkZmYxNWU4ZjJjODI4N2QzZmQ3OTMzZTg4YjFjMjQzOWM2YjhhMDE0N2QxNGM0YmNmMzlhNzE4Y2UzOGYyZDQyMTA4MjgyZmU2ZmYyMzY5NTdmZTUzOTYzNjJlYjBlMGRmZDUzZTI1ZDdiMzhlMTRkZTQ1ZmY0NTFmMWI1NmVjMDVlNWQxYTc0ZDNhZWY1ZjJjMGFjZDQ2NjJiNTAxMGFmMjY2ZmQ2NTNmM2Q5OWVhNmUwYTUzODY1NWYxNzA5ZTIyMTM5MmE3YzQ1MGNkZGE2YWRlYmJkMGYxM2ZkM2ViODU1MjBhN2I4YjVlZDA3OTI2YTA5Yjc2M2M2MDc1ZmU2MzQzZDJmZGE0ODgwNWQ5MzQ1YTNiZmY0NDJiNjA3ZTdkMTQxN2VmMDQ0ZDgyZjMyZTRmYzJmODM3MGZjMzZlZWU4NDg1NGM2M2Q0YjQ4NjlhNWIxNDg3NGYwM2JhZDI4YjFmZDkyMjhmMmViNjQ4YWU1NjI3NjM1ODJkZmUxOThkMWE4MTdiYTQyZTJkOWU3Nzg1Y2Q1NGNjOTM0MDQ1YWM5OTg1YzlhZTNkNWI1NGRjNjFmZmU5OTY0NmE3ZjA0MWE1YTQyNGVmOTA5ZDY4YjFkOGMwNDI5NTJmNzA1MzNkOGFlODVlNjc3ZDIwNTU0NTY2ZGZmMTA5N2Q3MDc4MGRhODBmNWU2MDYxY2EyN2NmZWQ5MzY1YzUxYTJkYjc3NWJlMmUxNDVmZWYxNGIyY2Y5YmY2NzExMTBiZTY1M2YwNzgxZWU4ZDJiNzdmNDBlN2Q1MmY2OTI4YWE2ZTNmNmRiYjQ0NjJiMDcwN2FmYjM1NGIyZDg4ZjFmNmUwYTlhNjg3YzYzZTJiMDI3NWU5MzA5OTMwOTU2ZTMxMGUzNzkzNWM4YjE0MmFmNzg2YmZhZWY5OWVmNDc4NmIwMzQ3YzIyMzhkOGM0NjhhNzc3MjRiOTYzYjliZDA0Yjg1NzY2YmYzNThiNDQ4MzVhNzY1ZWYxMDVhNGY3MTM1MmYwMGQ1M2FlYWQ2Yjk4Nzk5YzM2ZGJhNGY3M2Y2ZmZmZjg4MGZmZWFiYmI0YzdiYzk3YjYxZDNjOGNkYjc1NzQ1OWY3MGE4MDBlNjg5ODBmMTIwYzFjNWU5YzRmZDg3ZDZiOGQ3OTdiZjM0NzQ3NDRlNDJkNTA3NWE5MDNkN2VjMjQ4NDFiNmQzMTdkMGUyNjZlOTZiN2ZlNDBjMWM2NWU5MGI2NWFlNjQ3NmZiZjRkYjVhZmEyMGQ5MzBlYTAwYTVmZjExNzc2NmYzMDA0OTdiNjRlZGZmMTBmYmZjZGIyYTViMzg5YzZhZDRmMWE0ZGM3MzM4YjZhYWI2NmYzYjFjOTE0YjY0Yzk4MDU3MmZiODU4ZWViMjM2NDAwMTI3MWY3YjNkOTIzMGZhZWY2MzQ0NTU3NTMxMjM3NjZmMTRiY2QwNTY3OTA1YTEyMTAwOWRmZGQ2NjQ4YjM3YTQwMTJjNWM1MzRmYTA5N2Y5ZTVlMDQzYTRkYzE4ZTkyNDEzMWNiYTMyY2JlOTFiZWVlZTFkYmU4YmU5NWE5MWUzZGJjYjNlYWNkYWMxYzZhZTkxNGNmNTBkZjY5MTNmOGRlYzNiMTdiNjUzNmRmMWZjZjI3NmIyNDFmOGUzY2EzNGVlMzdmOTE4MmVjN2JlYjM5NjVmODA5NzgwMjI2YzE5ZGE4NjlhNDJhZWIwY2EwZjc1ZDZjOGU2MWNjNTI0MWI0OGQxZDA4OTZkYjIxZmY2ZGMyNDI2MDRlY2IwMDNkNmRmZDNkMDRmZjliM2VmMTI2MmM1YzhhMzllZTUyNWU2NDI1NzcwMTlkNjljNWMyZDBiZTU4NzJiODVmZGFiNjg3NjliYzU1NjU4YTU1M2QxNDQ4OTE4MTI0Mjg0ZWUxYTMyOTYxZjBjNmU0ZWY5N2FkMWMxOWE1ZjdlNzVlMjU0ZjgzNzU2MGIzYzI1YzMxYzc3NDI0OGQxZTQ4YTVmN2VmZmNmOTZhYmY5Nzc0ZGNlYzEzZTczMmJmYmUwYTgxMmNlMmE0YTliNGEwOGJmODBmYzAKKzkyODowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZgorOTQ0OjYyZTdhMmVmMWVjMGVlNDg2YjFkZThjMmQxMDIzMmViYzA2MTUyNTJmNDhkYzMzYjc3MDBiNjRjMjYyODQ5MDk4NjYwYTg5ZDg3NzQ3ZDc5NzBhMDI5YzE1ZmJmYzk4MGRjMmY3ODBjY2YxZjNjMzUyODNlY2RjNjkwNDEyZGViYjM0NjZkYTQ0NGRjYzU2NThiMDI1YmJjMzRmZGVlMWJkZDYwNTgwNjRiNDJhZTkyZmEyMjhmNTc2MzM3ZTJjYjAxYmQwNjJlNWY4YTM1M2IwMjc4ODFlNWI5NWFhMTUzMTI4YTNhMzA5MmE0ZGNhYTYzOTVjNTljYWRmY2ZjNDRmY2IzNjhjMTgwOWNkOGYxODgxN2M4OTIwZTAyZjE4Y2E3YmRkOWJkNDQxZjRkN2E1YmEzZTM4MDFjYTFhYjE2YjE2NzQyYTc3ZDQ1OTA1NWI3ZmM3NTVlNzRlNTI1ZThkMjFhMWJkYzYxMDVjNzI2ZDVhZWM5NTk1Y2JjM2IyZWM5NTY0MzczOWM0OTY3OGUxNzcxNjVjMTVhNWY3MjUyMDIwZTQ4MjI1YmQ1YjYxYzBhMzAyMWU0ODExZWU2ZDE0YTVhM2NiYTM1N2Y0MjlkNTU5M2E1NWE1OGU2YjEzY2IxMDVjOTQzNDA0OWIxZTg2NDMyOTI2ZWZkZGVjZmNhMDYzZTE1MDJlY2YzMzkxNWUwMGU3ZTRhMDNkZGRmZDY0ZGRlZWM1YWViMThhNGM2ZGQwNTQ0OTVmZTA1ZTBiZjgzZDRkOGZkZGJhZjExNzk5ZmZmNTRmZGFmZDU1NjJkMGYwYWJmMWYzYmZkNjc4MTM0MjViOTU2OGMwNWNiNzBiYWU0YzFiYmQ4ODhkM2Q1ZDc5MzIyMTI3ZGVhZTg5MDAzZjg1N2I2NmQyZTYyM2VhYTdjYTI4ZTc1MDEyYzY2OWQyOGE0MzhmMWI0N2Q3MWRjMDM1MzlmMjczOTY5MDE3ZjAzM2NiNDAzN2JlZDI5M2UyMjdmYzNkNzQ1YjI2NzI3YmZmZGIzMTM3MTNhZDA4ZGU3NTFiZDkxMzVlOGYyZTQ2M2ExZDhiOGI4YjJmZmRiMDIzY2M1YWY0NDk3YjBlOGRmZDE5ZWNiMjk2ODRhMTVlNTE2N2Q5YmJjMGJjZjY3NGEwYzliYjQ1NGM2ZTMxYzgxNjA1Nzc2YWY0YjY0MGZmMzVkN2EwMTFlZDU2NThkZjZiNzE1N2FjZDhmODdmYTUwNTE5NWI1NTI0ZjMyODNmNGM0ZThiZmZlYjdhZjY2Y2RjMjMzZjFhZjFkOWI4MWM2MzYwMWViNTg2M2RlNmQyZDdjYTg5MjIwN2MyMGFlNjA3OGRkMzQ3ZjljMTQ2NGQ5MmYzOWY1NWI3YTYyY2FhMjkxM2JlYThlODg5M2Y3NmU5MmZjMTQwOGI0Zjc2NDEyZmY1YmFmMDRkNjI3NjYyODJjMjM1ODhlYWU0OTkwOGM4NTZlZDRlZWNlNGVkZTU3ZGNhOWU3NDVjZjQ4MzhmZDNjN2FlZjZhODU3YTlkOTgyNmRiNWI1NzE5MjhjYTFkNjE0NDY3MjI1ZGViNTEwZjRhYTI0OTU1YTAwNzU1YzY0ZTQ5ZDMxODM3MTVhMzRmN2FiMjA2OWU2ZmE4NjRlNWNlZmNjNzA2NjMzZDQ1NDNkNDQ4ZWM3YTE4Nzc5Y2RhOGU2MTE2YmRkNDEyMGMwYTFmNjUzMTYxYWRiYTRjMWFiY2EzODhhZTZmNDBjOTZkODUzNzkzZTVhZWY0NjljYTNjNTdmNTdmMTljMDlmMmVlY2FkNmFjMGJiNjg3ZmJiMGM3MWE5MzJmZGQ4MDQ4M2I4NTc1OWJhNjYxZDNhOTc0N2M1MTMxY2RmY2Q3YzFiNDZhYjcxOWEwZmQyZjBhN2MxYjQxZmEwNDMxNzdkNTE4N2YxY2ZlOWY4NzBhMzZkN2U3MWYwODBhMjg2YWVjMGEyYzY3NzFlNjI5OTQ0NTUxZjM2OTJmZTkxYmViNTljM2ZmZjk1NDcwZGM0MmFkMDc3MjYwZjBmMjA5MTJjMzk0ZTJlMDRiYWFjMjM2M2QzZTA1NmQ1ODlkNzYzYjU5NjM2NDJkZWNkM2ZmNWUzNDUzNzc1NzRlMjRiODc0MDVjYTcxNzllMmQ2YTI3ODA4OWNmODlkZmU3MjZhMzYzOWU0ODIwYmE0OGNmMjY0NzE3MzQzZGZhN2UwYjgyYTM5MjhmY2NhOThmM2UxMTI5ODM3ZjJiZmJkNzMyNjY0NTgzMzU0ZTcxYWMxMTUwMDlmM2U4YTk0OTk2OTRhZjAyZWRlZjlkMjVjOTUyOTFmMjA2YmQ5MzFhNWQ0MzIyN2UxZDBmYTFkZThjZTA2Zjg4ZmMzM2U3MGVjYmUxYjE3YzViNDNhNzE2MjExZjZhMjZiMWZiMjhhNDMxZjNjMmVkNmIxMDZhZGE1MWFkZDIzZTRlYjY5MGEyM2E5MWQyZGIzNTVjODgwYzQ0MTM5MGQwNmE5ZGU2MDIyZTQ5OWMKKzk0NDowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmCis5NjA6Yjg2MTZkMGE4M2M5YWFlOWYxYWM4YmE1MzhjNDNlYWUzZjU4NjE4NDM3ODdhZWM4YjExODlkN2MzMmUwNzJkNzlmZTFmMDhmZTAyOTE3NDBlZjA1OGQ1M2U1MmMwOGY0MWNmY2E3YjhkOGVlZDQ0MDRhMjRkYWI2ODE2MDAzODI4YzA4M2Y1NzE1MmNiY2VmYTQxMWQyMTMyMTFlODI4ZWZlZjE2NjljYmVjOTZmYmZmMmY2OTFhZTc4YWViYjVkZGNjZjg3Njg0Y2YwOGQxYzI0M2VhN2IzYzZiYWMxYjExZWJlMDJmZjdlMWMzNDJlODI1NjcwYWU3Yjg4YmNmMzFjMzg1MGY5NGRjNTQwZTZiYjliZTRlZDhmZDA4MTEzNzk5YzUzOWViOTdjMTM0MmEyMzQ0OGNlYTlkODFhMTg4OTc0ZDQ3YjZiY2E3YzM3ZGQxOWI0MTM3NDZmN2ZlYjJlNDllMWY3YTYxYTNlNjUxNmI0YmQ0OWEyYjAyYTczYzI3YmJjZDk1YjI2MmU1Nzk4NjkwNWVlYTc4YTc1NzliMGEwMWE5ODI2OTI2NGE1ZmQyZjEyOTdjZmY1ZDEwOWM0MDE0YzA3YmIzYTk4ZGU2YmE0NDkwZGJhZjgxZWQ4YzYyYTY5NDJkNzI5NTgxNWY5N2ZhYzYxOGIzNTMzZThjM2QxZmZiN2YwNDcwMDRhZDE4Y2YwMjc4ZDNkMGNjMDQ2ZjY3ZTY0OTE0ZWFlMjk1ODkzODFhYjliMTQ3ODFjNGNmODAxNTc5ZDAxYzVkNTQ3MjgxNmE2ODI2OTgyZDVhNjI2Y2E0ZDQ0MDRhMTBiYjg4MmIzNDA4M2I0ZDJhMWJlNzU2ZGVkMzQ2YzIzMDA3MDVjMjdkNTE3Y2QyYmI2MDdhN2UyYzJmMWIyMDlhM2MwYWU0ZGZmZmYxZGU5OGY3ZTY0ODQ4YWQ4NjUzNTQ5MTllYzVlZmE1MTdjYWIxNWI1ZjEwOWQyMjY0ZmU5OGIwMTliMDE2NjVkNWU0YTczZTk4YWZhMTg5Njk5Y2VjZTc4YjJlYzk3OTI1Y2U5OWUyYTJlMTk1ODU4Zjc0ODdhMTk5ZDU1ZWI4ZmY5YTY5YjExY2Y5NThiNWQ1MjJhMjNjMGJkMzBlNjA5MmUxOTFjYTRhZTcwMmQyMWNhM2ZiMDgyM2M1N2RlNjUzYTkzZDc5NDJjNzczMWFlN2E1MzBjNzRmY2MxOGYwNjRmNTNmYTUwN2NjMTM2MDg2MjVkNzIzY2UzOWJmOTM3YTk2OWM2OGYyMGM0YjhhYWJhMzg2OWUxMmRmZTRmZTg4N2Q3Y2RlYzdkMGM2ZWZhOWJmYTExYTk0OWNlZWE1ZTE2YzM1M2VhNGYzYzgzNDE2MWQzY2Y5OTFhNzNkNzUwZTMyZWE3NWNiZjE1Njc0YTQ4ODAyOGM0OTY3NTY5NTM0Y2YxN2Y1ODdiNWNkZTEzZDBlMzk2MTRjNDYxNTBkNDg1NzI1MjJmYmQxZGM0ZjRlNzY3MWI0MGI5YTljMmJmZmE0MDA4NDc5MTIxMWRkOWU0ZmRhMjVhYTU0N2NhMjdkNmY2ODU2OWUxY2VlMTMzM2I2ZmEzZWJmNzkzN2FhNjc2NWEzNDIxYTNiZmFmYmI2MDVmOTVlYjViYWM3N2RmOTUzMGE2YTc1Zjg3Yzg0NjNlZjE3MzMxNjczMTZiNDMzOWFiOGU0MWQzZmQ3ZGQ1MThhZTdjMjhjMDQzZmE4MDI5MjRiODU0YWQwMWU2YjJlNzE2NmUzZjE5NjZiZDM1Mjk0M2E3OTRiNmY0NzUyYmViODEyMjEwMzkxM2EwZjFhODhkMmYzY2Q4YTIxMGE1NGE4MWI5OTFiM2Y1NjZiOTEyZmMwM2QxMzNjNGZjNTU1MzdiZDBjOTA5NTY3OGY3NTU4YjQwMDUwMDA2MGYwMWMxNzliYjllOTk4MzYxYTZjNGMxNDBiZTg4MDcwYmRhZDc5ZDQwOTg0NTc5Y2Y2NjNkYjllNWRlM2QyOTI3NGYxODk3ZDRkNTc2YWMzYjU5MzM0M2U2ZDYxOGUwNzQ3NjY0NDI5ZTdjMDg3Y2UxZWVhYzRlNWFhYjgyN2UyNGYyMWVjOGExYmVhOWMwZGE5YzQxODU5YWQyYjA5ZTljZmJkYjg4ZjQyNmM2NmJiNWRjZmFjMzNhYWU0NDk3NmI4YzU2N2ZlY2QwZWMwNTQ5NjEyZDc0ZjE5MzJhNTcxNjQ5MTk4YzczNmE2MDJhYmYwMmJkZjQ4YmRkMWZiNzY3N2U5YWJhMGRhYjA3YjhhZmE5NzNlMWJkNTBlYjk5NzdmNmQ0Nzc5YzI0YWUwODVlY2U2MTZkY2FjM2EwYzhkNjkyM2FlZDlkYzI1NmU0OGEwOGRkMzMzNjllNmJiOWQ2MTlhMzQxMGNhNTc2NmI2Y2FjYjFjY2UxZmU1ZGQyMTE5YmVjYTRhZjAyODg5NzIxYjBlMjhiM2NlMmMxNGE3NDZhODQxNTVjZDY2NDA4YmNkYzlkNjJmYzc5OTllZWQ4NmQxMTM4YWE0YmRiNWU4NjM5YWMyNDkyCis5NjA6MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmCis5NzY6ZmU4YTkyNGY2YjQ3M2U0MjUyZTgzMDYyMzg2NDZiMzgzY2I2Y2M2YWRlYjZjNDcyMzE0YjFjMjFiMGQ2NTFlMjg2NGU4NzVkNGY1YzQ3YjljOGI3NDQ5M2IxNTNmNjc5NWZkMDI2NWU5MDIyZjkzZWQzNjNlOWU0NDM5ZTIzM2Y0Mjk4ZDg1OTYyMGViMjY5NjYzYTMwOTRlZjg3YTY1Yjg1NjhlOGY2NDZiYjdhOTRhOWJmYjY2NmM0MTY0ODY0OTJiYzE0NzgzY2MxZDMyYTZkZWY4NmFhY2Q0ZmIzZTgwODc4NWY3OTZjZGIzYzY3MzMzZDE0ZGM2MTFiMDQzYWQ4ZDVkYmQ5ZWJhZDFiMThmM2YyNDNiYzY3ZDQ1NzgwNzc4NzJkZTgxZjY2MGQwMWE5YTBkMjg5ZDI0ZDIyNGVlMzM4NTJiYTg5OGRhNjhiNzQ2MTJmNzE0MGQzMTUxZjZkMWRjYzQzMDRiMTY3N2E0NmY2MjM1ODlkM2ExY2NmNjE0MzRkZmMyM2QwZmMyZTMxY2IxMThiYTRkMDI1NTBiMDA1N2EyNjFlNzM2ZDhjZGZhYzFmMzMzNzNkMmVlOTMyYmI2YzA3ZDM0MjBmNWMxNzkxZmFhYjRlNjFhZTE3Zjg1N2Q3MTZiOTNmZjU4Mzg4M2E4MzRlNmQ4NzhkYjk4ZmI5ZjJhYmQwYjE2NDFhOGYzOTA0NDA2ZDUzNmM0ODBmMWM2YmU3ODA4M2I3NDVmMWQ4Y2IxMDM3MDA5MTFhNGM4ZDViOWI4ZjVhMWRjNWRjZjVjYmIwMjFlZDlmMDM1ZmZiYTYyZjJiYjFlYTUyNGU0ZmQ5OTlhYTIyNjk4MDYzMzg1M2ZmMjBiNGI3MDk0ZjNlOGZlNTkxM2I3YmQzNjI1OWJiNTMxZWMxYTRhNDEzMzZhODU1Y2Q4ZDg3MTI0ODBiMzgwYWYzZTY2ZjhlYWUxM2I5NjRmY2E5YjFlMTU5M2VjYjkwNGNkNmI4ZTFkYWZmMjI5NmMyNjg5NTRiYjZiYWYxMjExZTM1MjgwYzNkMDExNTM3NDA1NWUwZGRhOGE0ODQ4NmY0NWQxMjM2YzA0ZDNlM2QyNGY0YWVkOTQ4YmQ1NDY3ZGYyNDY4OTI5ODQwYmEwYWYxNDg3ZTk2Zjg4ODM4NDZmYjAyYTZhMjBjZGIzZmZkZDI4MGE1MzRjMGY0ZDg4NzQzNjk0YjhhYmQ3MWIyNGFkNGRjYjdjYTc1NjNmMDE5NzE4MTViNzg1YjRkMjljOTE5OTQ3NzZiOGE0ZmFjOWRhMGY5ZmM3NjQ4OGQ4MDE2YmNiNzdkOTI3MTI1YmQ4NmYyMTI3Yjg1ZGJhZTUyYjA3MTIzNTg5MDhhNzVmNTQ1YzgzZWY4MWNlMzRhNWY5MzE1MDRhYjc1YjBkMWFhMTI4MTRmMTc2ZWNlYzc1OWU5Y2M4ZTIxYjJlOTJhM2UyZTZmY2NhNTZmOGUwYzY0MjNlMWE5M2U0Yzg1NjMxNmQ3YTZhMmNiOWFjNDQwMDUzOGNlY2FhOWFjNzg2OGNlOTlkZTlhNTBkYzdiNWJiNzcwN2M5NTlhYjAyOTE3MDhlODMzOTViZDE0MjIyNTI2MWVhMjIyYjllZjU4NjE0ZjUyMDg4NDhkZWUyYzk3YmFhODZhYjNlMzkwNjU4ODAzZTA0ODM5NjhkNmYyYTA2N2ZiYWViYTMxMTk4MzA2NmI5MDMyZjk5Y2RiZmI0ZDc2NzcyOWJmN2Q5MTQ4MzQ1NzI0NDYyZmI4NjgyOTdlNmIzMjVmMjg5ZjAwYmMxNTExMTBmODlkNWVhNzU4ZTk0ODRlYjI2YmEzZWFlYWI3MTU2MzA4NzQwYWM0OTk0MTRiNWQ3NWQwN2ZkZWM3ODg0M2JhMjYxYThjNThkMDM2MDk2NjhmYmY1NWQ0YWQyZWVkNWIwZWE0ZWNhODA1ZDYzMzU0MWJjZDZlOTMwMjAwMDNjNmFkMmNmMzYwYjAzYzcxYzMyNjczY2IzNDEzMGY3NjM0ZjhlYWE0NTlmYThiY2I1NmY0NDc2NzM4YjQ5YWE5Yzc1Njk2NzJmMGE3ZTU4ODc0ZThkMmI3ODM3MzE1MGZhZWEwNDY0OGMwODg3M2FmZDI3NTMwYjA0Zjk4ODJmOTkyMTMwNmZkZGVhNzdhMTg2NjA1MzkwZjQwZGU4MWVmZTVjZGI0OGQ2YTI1ZWZiYWM2ZjZiYWRmZTdlMmE3ZWVhN2QyMDQxNTFmZWJkYWQ1Njg3YzIyOGYyMmNhNGZlZDhiNDU2Y2Q1YTdlZWFkYjc1MGZmMjljZmY3NTAxNmQ4ZTVhNDM5YjczNWFhOTU4NjI0NDMwMGY2Zjc4MTY0YjEwZjI3Y2YzMTFlNDZjZTg2ZTRhMzg3Y2NmNzJlMjc3ZWM2ZWZmNzFlYTYyZTc4M2JiZGYyMGE0ZjIzNGQ1NGMwZTNkOGMyNGQxZmMzYzlmMjdiYjVjMTYwZDkyY2ZkNGI1ZTc4OWEwZjU0MzM1ZjdiMTZiNzIyNjg3N2ZmMTQyZTdhMzk2ZjA4NzQyMmM0MWVhMTQyNGM3Yjg5ZjdiMDVhYzVmMTZiMTVlYmYzN2FlODcxOGI1MTFiNzIKKzk3NjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZgorOTkyOmFmNzU1YTdmZDIxNjU5OGJjZmVjMGQxMzk4OTIxZjg3YWQ4ZjlhNGFhNDQxOGE1YmZjY2YwMGJjOWE3MTBhMDY2OWVhMmNiMTdjYWU5OWFkOWE4N2I3MzEyMzY4NDdiZDY0MmEzNTk4YzdlNTkwZTAxMzVkMGFhZTE0NGQyODhmYTE0MjZhYjZjNTBiYmU3MGEyN2I3MmM3OTNkY2ZkZGQxMTgzNzNlMjJhZThmNjgwYjBlOGIxMGEzY2RhOGEzMzRhMGZhYTM4OWY1NmI3ODA3YzA1ZDZjZWZhOTU2MGIwNDY3YzFhZDEwZDI5ZjgzYTVjMDdkNmM2OWU4OTE3YTRhYTQ1MjBjZjQyYzcxNTZjY2YxMTQ3ODFlZTgwYmYyZjE1NThmZDllZmRjOWY5ZWYzNjliMjE5Y2E4MTA2NDA4ZDI0YjZiYmY4NTE4MTZlOGUwYzk4OTYxNWZiMmQ0YzA4NTQwNzJhYjM3NThmZmEyMmM2OTE4NWQ1ZmY2OTIwY2I2MmZiZjc4NmIwNTQzNTM5NDAwODFhNTVmZDgxOTc5YjczZjU4MDhhOWNkMjliOGQzZTRjNzVhNjIyNTYxMzc1ZTk1ZDUwYzJmZmQ2MWJjOTY3YjEyOTVjNzBkOGM4MTYzYzgwY2VhNmQ2OTgyZjlhNzJkYjA5NDk1NDE0YTk5MjQ3YjI0YmJiNjQ1MTFkZGFkZGI4ZmFlNDU1ODE2ZDdjMTI4ODA0NDIwMDFlOGQwNTg4MTgwZWQ2OWE5YTg0ZTk3NWI5MzY1OTM4OWM5ODY2NTNlOGJiZWU0MzMyYjc0OGVlNDBkOGUxYjU1NmQwNWRhOGEzYWExMzQ4OTcyMDM2ZmIyNjU3ZjI5ZDA0NGNhMGVkNGQ4ZWE0MDMwYTFiMjNkMGU5NzM5NTg4MDZkOGRjODA2NDMwZGVhYmI2NGQ1YmQ3NWRiY2YyNjQxYTZkMmNlOTJmMjk3YTg1OThjN2FhYjQzNmMxNDg1MDc0ZjI0NGI2MDlhY2E0NzAxNTFlOGYzZDU0MTAyZjBkNDI5MGJhNWI3NzIyNzU4YTM2M2M4NzNmYmM4OGU0M2FmYjI0MzdmNzllYmQzODk5MGY3MjIzOGJiODY1MjYxYmQ0MzRmOWRhNThjMGE1NDA0ODQ5NGYwNzQ2Yjk2OTBhNjk1MTAzNjFhMDJkOTM0YjE0ZmYwNTg5MzUzODI4ZDM3NTc0MTIzNmYxYjQ1NDk3ZDhhZmMxYjQ3OTc3OWU0ZjcyNGVkYWUyMGUyNjA5NzY0ZmI5NjEzMzA1ZDM3MGYxNmFmZTQ1MmJlMjg5ZjU5NTk0MTk4MWI0NTFiNDE4MGM3YjRiNjU4NDNjMmQ5OWE3NWU0MzMyZjFhYjgzZjhlZjIyODI3Zjk0YzZlY2ZmNmIzZWMxMzYwMzNkNDgzOWUzNTE4ZTFmNzZkNzM0OTEwNTU2YmNjYzAzOTRiZjYxOWUyMDlkOTIyNzU4NjJlYmNjMTlkOGJlNGE2OGJhNTJiNmVmMDVkYjljZTQ5Nzg1M2JkYjMxNzY0YTM1MWQyZDZiOTFlMGYxNjgwYjg0ZDE1NGU3ZjM0MDRiOTdhMGU5NjQzMTg4ZTI3MjY4ZTczZjA3NDBlOWFjM2M0NDYxYzliZTA2MTk3MGE3YjRhNzdkYjViYWIzODQ1MGI0ZmQwYWYyNzRmYThjNDI4M2IyZTk1Nzc2YzYzZDAyMzk5MWM4YjAyZGExYWZmMTIyZWI5ZTY2MWJjYjEyMzlkNjdlNTE2NTAwY2U2MjZlMjAwMGVmOTc2N2U3NTg0M2M1ZTkwNjc5YmVlZTlhYWMzMzI4ZGVmYzg5ZGNjNWRhMmI3ZGJiNzZhYjFkZDZkODRhYzIyZjdlMDVkOWU1MTViODI3ODI0NDgyYzExNWQ3MTgwY2MxYjkzNzhmZTBlYWZiZTM0YjU0NWZhNTJiM2ZiOWE5YmRjZTFlNDFhODBiMmY5MTE3NDdmNmJkYjI3OWIxNDBjZjEyNTA3ZmQzM2VmOWVhZGNhZmM3ZWE1ZGMxMDdhM2ZmNjc0NWEzMGMxMmQ4ZGVkODI0NTgwYWFhMjc0ZTQ5NDk1ZjAxNzQzNTk3OTk0MGMzYTAwMzViZTc3ZjI5ZTA5OWY0NGUxZWU4MmIwMGExMzcyOWIyYjkwYWRkYzU0OWQ2Nzk5YzM4ODYzMGNlN2M0MjY5MWI4ODgzODBjY2RmNWNmN2E3MDFjY2RjM2YzNDIyYTY3N2RjN2Y3ODkxMTQwYzdmYmI1MDkzNjI2MzQ5MDY2YTc3MjBhNGM2OTZlYzU5MGZiNzRhNWNhN2Y2YjY3NzQ4MTFhZjMzZWVkNzgxOThkNWI4ZGUyMzcxYTlhYTc2OGI3ODljYzBjYTFjMzgxY2Y0YjcwMTA0MjA0ZmJhNzBiMTQwYTg3ZTYwOTNmMTViMDI2MjVjN2I5MGFjMjE1YzNiMzE4YzJlZmM4NWM1ZTliYWEwNmI1MmU0MjZlMmQzMjA3YjYzOGYyOGFmMjgxNGQ4YmM2ZGQyOTIwNGUxZDQ1ODIzZTZiY2ExMTRhY2MzOWJhZTkyOTNiYjRiMjkyYmRkZGM0NTc1MDJiNmRjYTlhN2E4MGJhNDVmNTI4YTIyMzRhMTY2OTI0ZDYyYjA5Y2JiYWIxNGYKKzk5MjowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmCisxMDA4OjQyNWIwYTM1NDNiMDQ3NTc0ZDYzZjM1MTNjMmZjMzMwNDM3MDY3ZWE5ZTE0YzI0NDg3ZTBmZWQwYTVlNWNhOGMxZTkyZDhjNTAxNWU0ZDI1ZmI2YmI5ZTdhMTZiNmYwZmQ1NDc4MmY4NDQ5OWVhOTQ0ZWYwMWIwNTA1M2MwMDRjNzMwYzVlMjI5NTIzYmQ3ZTAxN2RhYmI0OTQ4N2Y0YWE2ZDkzZTU4MGQ3ZDVkNmYwNTMxNmYzOWEyZjNmYmFlZDk1YjYxNWE4M2IzOWE0MTA2ZGJmMTI3ZTlkMWExMzRjZDY1NzgwY2Q5NTA3NzIzZTg3NmZmODJhNjNkOTZjMTZhNTBlYzA0MTJmOTc3YjAzOGUwZWZhZTJmY2MxMjAzZGEzZWE0ZmViMDI5YTViZTJiZmQ1MDJlNThkMWY3NTNmZWZkNDliZDNjNjdlZDBkNzlkOTk2MThlZmJhZmFkZWYwYjQ3MzI3ODAzZWEwOTkyNDdmOGZiMTdmN2FjOGNjN2NhMzdhMzJmNWQxZWUyN2Y2MzdkYjM2ZDNjMTcxYWY1NTQ5ZjU1NGI0Yjk0MjJmOGJmYWQ2NDRlZjlkYmQ0N2ZjODY4Y2U0YmE5MzQyODg4ZWJjOGM2OTcyODkwMjU2NWYxYjUyMDUyOGZjNzNkYzJiY2Q3ZDUxNmQwYTRmZjllZWU5NTA2OWY0ODdjODEwZWZjMzhiZGE1NDkzM2Y0MWVmNjliM2EzOWYyOGExOWFmYWY3NThhNWFiZjE3M2Y3NTQ0ZGVhOTA1OTZhYzllYWY2MTk0ZjI2ZjQ0NGFkNmYwZmVhZjljNmNmMTgyN2EzNWVhYjllNGE0NGY3YmNmYTA4NWRhZmQ4M2Y1YTJmZjY2YjczZjU4ZTc0MTVkOTA2MzEyNzQ5NDI3YWM1NjI1YmM3MGY3YjU4ZGM3OGYyYjAxNTNjODNmMmQyNTAzZDY3MGI5ZGE4MmRmMWFlN2ZmNTY3ZjgwNDY0ZjFhN2E3ZmZjMmU2OWNjYmQ1MDdmZGNlOTE3MTQ2OTE1ODI4MDBhMDc2OTQ5Njk1MzZkODZmMWFjYWE0YmY0NTE3ZmNmYjYzMWYwODczMmE5MjM0ZTE3MTU0YWQ4MDdkMDMwOGFjYTM5N2ZkYjY0OGRjNDkxNjRjZmFlYzIyMmY2YTkxMWM0ZGVlZmE3OTA3MzhhYWE3YTVjOTRmMTY2ODQ0MWMyMGJmYmY3ZTFhNzJmOWY0NWI3ZTYyZTg3MjE0MTk0YzliNGU5YTRlNjg3MDJmOTFkNzk3MDc2YzkyNjhkZmYyZmIxYmQ4NGI0YmZhYjNhZjkyYmM3ZmJmMjE2MTBiZTg4MTliZGVlNDJjYjQwNTE1Njc2YzRkODI1NjFhNDFkOTMwYjM0NzkwYTZmNzQ0ZDA1YzU5OTI1NmJiYzk0YWRlY2E5YmU0NjJlZTI0ZmNlNjMzZWFjMjM5ZmYwZDE0MjNhNTFjNDc1ZjRhNTFjYTUxYzU3MDI5Mzk4ODExM2M2NGI5MjFiNzQ5NmU1YTlmMDAxMzU3OGJiMjA2ODE5NTc0ZWU0ZmM4MDA2N2NlMzNkZjUzNmE4YTdmYjZiNTRiMTZiNzE5YzU0NzI1N2NmYWJlZWQwMGMxOGViMTIwZTAxOWMwOWU3ZDI3NWZlYWU0MDc2YTE5NTcwMzVlMDVmOTY0OWRkOTNiZWMzZTU2YTlhYWJkYWViYmU5YmM1M2FmNjM3MDA0ZjM1ZjAyOWU3NWI0NGE0MDk4OTg4NWM3OTEzNTc0ZmJlMDQwYmEwNTk1MjQwNDRmMDBkYTNmMjlkMGY2ZWFiNzFiODUwOGM1NjkzYTg0MDFmZDBiZDBkNDMxMmQwMThiOWIyNmNkMjYzM2VlNDc3NTg1YWZmYjVhMmJlNzNmMTU2Mjg1YmQ5MzkwNWEyMjdmNjc5NDEzOGUxOGVjYzBmZWRjOTgxNGJhODA2YzBiYjIwODc2NTNlMDIyOTVhYTEzODA3OTA4ZDk2OGQ2OTY2YzdlYzIxYzkzNmM4NzdiOGJhNmE3NmYyZGMzNjdkZDFiNTM4YzAwNDVkMjExZWE4MWQyODZhOGFmYTE0N2VhYmVhNDI4MDJmZTAxODkxMDEyYTE3NjY1NTFhYmNkYmZmZGFiODE5MWI2MzBjNmE5OGJhOTFjZDlkZWU2NDcwOTE4MzhjZjMxNDU0ZmE3Yzg3NzQxOGZiMTBiMTllZjkwNTQwOGM0N2JhMTExNTM5NGZiZDVhZjVjZTM2MmIxZjg4ODEyNDA0M2E1ZmQzZmM3OGEwNDFmZDcyNDAzOTZkNjFkMmZlM2ZjZWVhMzc0ODgwNjViMjNkOWI3NzQ1Y2M0NmIxNzY5YWFkOTM2ZGVkMTZhNGZiNzNiOTgyZDI0OTU5ZWEwZWMzOGY2ZDA2NzNiMWU0MjcyZjBkYTAxNTEyY2NhN2QyZTE0YmYyNDgxYzVmY2IzN2NiYWUzNWE5NWZhNDE3YjE4YjExNzM0MTNhMGQ2Y2ExZTU0OGJjZGMwOWIwNzA2NTZiOThiMGQ2YTA1ZmFjOThjOTg2Y2NhZDljNmJiZDE3ODgxNDEyYWRjZWY3ZDA0MTU1MGM3NTNmMjYzMjBhNmUyOTZhYzAwNTliYTFiOTEwMTViY2U0YTczYTc3NDlhM2RjMDJlZmFiOTY2ODUwM2QyMGY0OTJkNzhiZTQ4MQorMTAwODowMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWZmMGYxZjJmM2Y0ZjVmNmY3ZjhmOWZhZmJmY2ZkZmVmZjAwMDEwMjAzMDQwNTA2MDcwODA5MGEwYjBjMGQwZTBmMTAxMTEyMTMxNDE1MTYxNzE4MTkxYTFiMWMxZDFlMWYyMDIxMjIyMzI0MjUyNjI3MjgyOTJhMmIyYzJkMmUyZjMwMzEzMjMzMzQzNTM2MzczODM5M2EzYjNjM2QzZTNmNDA0MTQyNDM0NDQ1NDY0NzQ4NDk0YTRiNGM0ZDRlNGY1MDUxNTI1MzU0NTU1NjU3NTg1OTVhNWI1YzVkNWU1ZjYwNjE2MjYzNjQ2NTY2Njc2ODY5NmE2YjZjNmQ2ZTZmNzA3MTcyNzM3NDc1NzY3Nzc4Nzk3YTdiN2M3ZDdlN2Y4MDgxODI4Mzg0ODU4Njg3ODg4OThhOGI4YzhkOGU4ZjkwOTE5MjkzOTQ5NTk2OTc5ODk5OWE5YjljOWQ5ZTlmYTBhMWEyYTNhNGE1YTZhN2E4YTlhYWFiYWNhZGFlYWZiMGIxYjJiM2I0YjViNmI3YjhiOWJhYmJiY2JkYmViZmMwYzFjMmMzYzRjNWM2YzdjOGM5Y2FjYmNjY2RjZWNmZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkYWRiZGNkZGRlZGZlMGUxZTJlM2U0ZTVlNmU3ZThlOWVhZWJlY2VkZWVlZmYwZjFmMmYzZjRmNWY2ZjdmOGY5ZmFmYmZjZmRmZWZmMDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOTFhMWIxYzFkMWUxZjIwMjEyMjIzMjQyNTI2MjcyODI5MmEyYjJjMmQyZTJmMzAzMTMyMzMzNDM1MzYzNzM4MzkzYTNiM2MzZDNlM2Y0MDQxNDI0MzQ0NDU0NjQ3NDg0OTRhNGI0YzRkNGU0ZjUwNTE1MjUzNTQ1NTU2NTc1ODU5NWE1YjVjNWQ1ZTVmNjA2MTYyNjM2NDY1NjY2NzY4Njk2YTZiNmM2ZDZlNmY3MDcxNzI3Mzc0NzU3Njc3Nzg3OTdhN2I3YzdkN2U3ZjgwODE4MjgzODQ4NTg2ODc4ODg5OGE4YjhjOGQ4ZThmOTA5MTkyOTM5NDk1OTY5Nzk4OTk5YTliOWM5ZDllOWZhMGExYTJhM2E0YTVhNmE3YThhOWFhYWJhY2FkYWVhZmIwYjFiMmIzYjRiNWI2YjdiOGI5YmFiYmJjYmRiZWJmYzBjMWMyYzNjNGM1YzZjN2M4YzljYWNiY2NjZGNlY2ZkMGQxZDJkM2Q0ZDVkNmQ3ZDhkOWRhZGJkY2RkZGVkZmUwZTFlMmUzZTRlNWU2ZTdlOGU5ZWFlYmVjZWRlZWVmZjBmMWYyZjNmNGY1ZjZmN2Y4ZjlmYWZiZmNmZGZlZmYwMDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5MWExYjFjMWQxZTFmMjAyMTIyMjMyNDI1MjYyNzI4MjkyYTJiMmMyZDJlMmYzMDMxMzIzMzM0MzUzNjM3MzgzOTNhM2IzYzNkM2UzZjQwNDE0MjQzNDQ0NTQ2NDc0ODQ5NGE0YjRjNGQ0ZTRmNTA1MTUyNTM1NDU1NTY1NzU4NTk1YTViNWM1ZDVlNWY2MDYxNjI2MzY0NjU2NjY3Njg2OTZhNmI2YzZkNmU2ZjcwNzE3MjczNzQ3NTc2Nzc3ODc5N2E3YjdjN2Q3ZTdmODA4MTgyODM4NDg1ODY4Nzg4ODk4YThiOGM4ZDhlOGY5MDkxOTI5Mzk0OTU5Njk3OTg5OTlhOWI5YzlkOWU5ZmEwYTFhMmEzYTRhNWE2YTdhOGE5YWFhYmFjYWRhZWFmYjBiMWIyYjNiNGI1YjZiN2I4YjliYWJiYmNiZGJlYmZjMGMxYzJjM2M0YzVjNmM3YzhjOWNhY2JjY2NkY2VjZmQwZDFkMmQzZDRkNWQ2ZDdkOGQ5ZGFkYmRjZGRkZWRmZTBlMWUyZTNlNGU1ZTZlN2U4ZTllYWViZWNlZGVlZWYKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L25vdGVzL29jYl90di50eHQgYi9saWJ0b21jcnlwdC9ub3Rlcy9vY2JfdHYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MjkyMjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9ub3Rlcy9vY2JfdHYudHh0CkBAIC0wLDAgKzEsNDYxIEBACitPQ0IgVGVzdCBWZWN0b3JzLiAgVXNlcyB0aGUgMDAwMTAyMDMuLi5OTi0xIHBhdHRlcm4gZm9yIG5vbmNlL3BsYWludGV4dC9rZXkuICBUaGUgb3V0cHV0cworYXJlIG9mIHRoZSBmb3JtIGNpcGhlcnRleHQsdGFnIGZvciBhIGdpdmVuIE5OLiAgVGhlIGtleSBmb3Igc3RlcCBOPjEgaXMgdGhlIHRhZyBvZiB0aGUgcHJldmlvdXMKK3N0ZXAgcmVwZWF0ZWQgc3VmZmljaWVudGx5LiAgVGhlIG5vbmNlIGlzIGZpeGVkIHRocm91Z2hvdXQuCisKK09DQi1hZXMgKDE2IGJ5dGUga2V5KQorICAwOiAsIDA0QURBNDVFOTQ3QkM1QjZFMDBGNEM4QjgwNTM5MDJECisgIDE6IDA3LCA5ODczNTRDMDYyQ0Q2MjUxQ0FBNkQ5MzI4MEVGRTlCRQorICAyOiAxQ0I3LCBCOUYxNjIwRUE4Mzc0RTFDMkQwNTExMDg3OEQ5MzA2OQorICAzOiBCOThDNTksIDM3OTNGQjczN0MyREZCMjlFNzNERDFBRDhCOEY3MUM3CisgIDQ6IDg5NzhGMjQwLCA1RTI1MzE2RUQxM0QzMzAwRjJFQzEyRDcxOEEwQkE4RQorICA1OiBDQjREMjYxNTk0LCBFREEyNTJBMUE1QzdEMEE0QUI0NjIwRjc3MTQ0NkREMworICA2OiAzMEQ2QjY2ODhENTksIDY4NDAzN0RFMDc4MzJDNkZDMzhDQTQyQkRGMkE3RDUzCisgIDc6IEQwNTgzRjk3NDFCRkE0LCAzREY1M0RGRjczNDMxQzAyNDU5ODJGNEVFRUFENDMyRgorICA4OiBFRTNCOTU5NkNCRUZGNTIwLCBEMjgzRDFCOUQ5OTA3MzlFQTA1RjRCQUUyRTk2QkU0RQorICA5OiA2NTcwRkMyNUU2MTAzQUMxMjUsIDkwRDNGMUZBNjU5NUI3NzU3NDlGQUU3QjAwQThFNUIxCisgMTA6IEY1Njc1MEM5OEMzNzBERkRDNEEwLCAxOTM4OUE2ODc1RkFCNDMyQjcyRDY0QkNERDZCRDI2QworIDExOiAzMzQ0QUU2RDk1Mjg2MDNDQzFFNEUxLCA4N0FCNkZCQzdGOTE5MTI1QTdEQjBEMTdEMTkwNTZCOAorIDEyOiBGM0Q5RDgxNkE3MjdEM0U2NzMzMEM3NzksIDA3QUMwRjM4NDFERkNGRUM1OEE1QUFDMjIyNzA1MzhDCisgMTM6IDk3NjY1MUU2M0FCQzNCMjc2Nzk5QkMxRkU0LCBFRTYwM0E4QzY2MDk5QUQ2RkY4NjY3QjNGMzRBQkYyOQorIDE0OiBBNDhFM0FCQzMxMzM2QzZCNzE3QTk2MTcwQTlCLCBBOUQxQjk3M0Q4NEQzMTI1RjVGOUQ3OTIzQkEwQThGRgorIDE1OiBGNjBFOUIyQTkxMUZBRkIwMDgwRkFBM0VDREVFNDIsIDQ5MDJGOEFFQjc2ODVGN0IyNTVFQ0M0NUI1QjdEM0Q0CisgMTY6IDA4NTVERTQ4ODk0MDE0NEFGMThDNjVBOTk2NkREQjY2LCBBNjZCM0U3QTc1RDM5NDI3M0FDMTk2RkZEMDYyRjlERAorIDE3OiAxNzJEQzE3NDBGNzVBQjJBMjdCMkI4MDg5NTk2MUE2OUFCLCBENjk4NkJCOTVGN0U0MTM3NDMwQ0FDNjdGNzczNjIzQgorIDE4OiBBNDE0MjM0RENDQzYxQjY1QTc5QjdDNjE4QTZCOTFBQ0E0MTAsIDZDRTMyRTU1RTE1OEJDM0U1MUU5NDExNkE2MTVGM0EyCisgMTk6IDE2QTFCMTZCQzBGNjNENjMxNzk5MDFGMUNCQzc3MkQ2MTJDMTAyLCA1NDAwN0VGOTgyMkUwRTRBNEY5NTM4Mzg1NzdDNzZGQQorIDIwOiA1Mzk3ODhFQkY4NUMxNUIzQTYzODAxN0I0MDU0RDcxMzE1QkZGMjVGLCA5QjI1MTEzMjJFMTZDRUNENTNFMzI0MUYzRDUxRUI5NworIDIxOiA3RTc0NTk1QTNEQ0ZFMUVBMkM5MUI2NzczODc2NTQ2M0Q1MEEyMjkyNEEsIEFDOUM5QjUyNjI1MUMxNkYxMTJFNzY5RjlGQkU3NEU0CisgMjI6IEEyQjYxNzkyMTAyQjJFNDRGMURDMEU0OEI0MDQ3MkNFODgzNzMwNTA0RkVCLCA3NjQ1MkE0OUMyNTI0NDA0QzhBNEIwOThENjM5MEY5OAorIDIzOiBGNTgxNzRCQzA2QTAyMkFCN0Q4MTk5MUU5MzQ2RjVFNEIwQUVDNTM1RDkzNDczLCA0N0Y5NjM3NEJDMDk0QkIyQzFBNUQxRDI5MTgwNjkxMgorIDI0OiBBM0E3NzEzODk1RDE3OEE4NUQ5MDkyRUE2MTM4MzIzREMyRkY5MDkwRDdGMDFBQzUsIDM4MTQyMDhGQTcwMDlBMjkzNEY5QTE3MkQwMjk2NjdECisgMjU6IDM4NTUyNURBRjk5NDlEQ0RFQjIyRjc1MThBRjk2NDM4RTQwRjdEOTQ5MzM3MDZBOUYyLCAxMjQ5RjNERjUwMDg0QTZEMUE3NkFBMzUwRkQ4NUIwQgorIDI2OiA2ODM4RTIwN0Q5OEE1QkY4RDhFNDE0NTRDRjUxNjYzRDhGOEI3NkZEMjYwOTJENDVEMUQ5LCAzMDE3MjNEMEY0OUJGOENGMzc4MjgzNDBCODk0Njg5QworIDI3OiA3MzY0MTNDMDI1QTU0OUNCMjU1MEU5MzEzOURGRDVEQzNDRTI0MUMyOTZDOUZFNjQxRkY1MjAsIEJFMDcyNTk5NjNGMjUxNzQzQTg1REY1MUVCMUI0N0ZCCisgMjg6IDdGMkNEMjYzNjdBODg1QkQ5RTJCNTE1RDRFODcxMjcyQUMxQkVBMUM2NTBCNTMwRTU2MTZCMkQzLCBFRUIzN0U4NDUxNTk3RTVBNTNDQjQ5MDcyRURBOTM0NgorIDI5OiA2OEYyM0RDREVGMjIzQjYwQjQ2RTNENzI0QTkzQkVFRjhCMTEwRDQzOTRDOTkwQUMzRDBFMzRFMUI2LCA5QTYwMzQ0OTgyRjg1MkVGRTAyQ0JFOUNCQkFCNjBGMQorIDMwOiA2NkM1REUzRUIyNzEzOTk4M0Q0OEJFRDgxRDBFNUZDRTZCQTFBQjQwMkMzNTcwNjJGRTk4OUQzMUM2OUMsIEJBRkEwQTc5OTdBNTI5MDM5RjBDRTg1MjhFNjcwNDE1CisgMzE6IEQzQjkwMDlDMUE5MzBFRTI4OEM2MUIwQjE1QzdFOTJDQjczNDg0QzM0NTU5NERDNUEzRjM3NzE0Nzk4MURCLCAxRURBQUNGN0YxRjNBQzdFQTYxM0Y5NERBNERFRjkzMAorIDMyOiBGNzgxOERGMTVGRTZGQkM0MkEyOEZERTFENTVBMkMwN0VDOEQ4MkFBMEU3QTY4MERCRDNDRjI2QzEzNDQ4RjlCLCA2N0ZFQjM0NDEwODAwOEE4ODA2N0U5MkIyMTA3NjZENQorCitPQ0ItYmxvd2Zpc2ggKDggYnl0ZSBrZXkpCisgIDA6ICwgMDdCNzc1MjA0N0Y5RTBBRQorICAxOiBDRSwgN0Q2OTAxN0M0MkIwNjIwNAorICAyOiAxRDZGLCA0REZENEJENTg0MzkwNjJGCisgIDM6IDMwQTAxMSwgREI0OUQ5ODg3OThGODg0MgorICA0OiBCNzFDODk1MSwgQUEzMjYxNTg0QjBDMjBGRAorICA1OiAwNkY4OTk1N0RBLCA4OEJGQTgwRDM2NDI3RjY0CisgIDY6IDQ1QkM0Q0U1RkFCRCwgNENBRjcxMTM2RUQxNjZBNworICA3OiBBNzQwNUYxMjREMDI5NiwgNUQ4OTkzQ0U2NEZGRjBFNworICA4OiBFQ0FCRUZEOUU2NTc0RTRELCBCNjkzNDk2NzNDRjg2RTQxCisgIDk6IEY3RDI2QTdFODJBMzRBQ0M3MSwgQUZGREVFODQzQUJFQTY4QQorIDEwOiBFMjI1QzVGMEZBMUQ2NDlGODFBMywgMDNBQzFENURGMTMyM0VGOAorIDExOiA1ODcyMkZCRkI4NkMyNjk3MDYxMjE3LCBDRTczMUQ4MEU2MzU1NzEwCisgMTI6IEU1NzdFQjhGQTcwMjI1QzVBMThEMzFEQywgMkYwOEIxNDBGMEQzQTI1NQorIDEzOiA5MjE1NEE5NENEN0Q0MkVCQURCNkNGRUUxNCwgREM5NDkxNzBFODREM0NBMgorIDE0OiA1QTNDMDg3NDRGRDg1Q0EyNjJENTFBQzZDRDI1LCBFODNDRTQ1NTQ3NDAzQkFECisgMTU6IDhCMkU0OTgwQUJBMTBBMjA1NzNBNDAyRDg5QUQxMiwgRTNEOTc4NjExREQ4MzFEMAorIDE2OiAzRURDNEEwRkE5NUJEOEY5NDRCQ0U0RjI1MkI2NDcwQywgODdCNTRCQkVBODZBNUI1QworCitPQ0IteHRlYSAoMTYgYnl0ZSBrZXkpCisgIDA6ICwgNTY3MjJFQ0ZFNkVEMTMwMAorICAxOiBDQSwgREY1MzQ3OTMzM0RCODZBQQorICAyOiA5NTI5LCBEMEI1QTg1OTEwNkZDQzlCCisgIDM6IEREQkFCMiwgM0IzMUZGREE1N0NGNTFDOAorICA0OiAyMkVCN0RENCwgMkJCMzREMDRGRkY4MTBDQgorICA1OiAxMDg2OTM3NjFBLCA3QUZGNkY1MjU3NEEwMTlBCisgIDY6IDM5MUZCN0M2MUU3NiwgNjE2QzVFNjYyOTdGMkNDRQorICA3OiAzRTIyRTRBNEEwQkQxMywgRTg0QzM4NUFCRTI1QzhEOAorICA4OiA5NEZBMTFENTI0M0VFMzRGLCA4RjAxN0RFOTYwNDlEMEY5CisgIDk6IERBREI2QjVEMjcwNDkyNDBBNywgQ0E2OUUxNDA0N0M2QkJBNworIDEwOiBGNzlDOEVBODNDNjlERTkxNERBQywgMUVGMDQyREE2ODEwNkM2NAorIDExOiBDNUI2RTA0QUI4Qjk0OTFFNkE5OUY4LCAxNDM1MTU3NzlBNTVDOTcyCisgMTI6IDMzRjQ5M0FCN0FFNjJEQURBMzhDNUIyNCwgNTMxQkY3Nzk5QTc3ODYyMAorIDEzOiA2REFBNjZCRjAyRTY2REY4QzBCNkMxQ0MyNCwgNkNERjcyNzg2QzVFQzc2MQorIDE0OiA0OTQwRTIyRjA4M0EwRjNFQzAxQjNENDY4OTI4LCAxODVFRTlDRDJENzUyMUFCCisgMTU6IDVEMTAwQkY1NTcwODE0N0E5NTM3QzdEQjZFNDJBNiwgNzg5ODRDNjgyMTI0RTkwNAorIDE2OiA3NDQwMzM1MzJEREIzNzJCQTRBRkFERUExOTU5MjUxRSwgNDM4RUI5RjZCOTM5ODQ0QworCitPQ0ItcmM1ICg4IGJ5dGUga2V5KQorICAwOiAsIEU3NDYyQzNDMEM5NUE3M0UKKyAgMTogQzUsIDgzQ0IwMEU3ODA5MzcyNTkKKyAgMjogMTUzMywgMDIyRkY3MDU2NkUwQkE4NworICAzOiA1NzU0M0IsIEFDNEVGMTVGQzgzQkRGMkQKKyAgNDogMDFFNDQ3NEIsIEJEODE3QzA2QUMyMTQxRTAKKyAgNTogNENEN0U4NTBFRSwgN0JCNkIzQkRBNTM3MzQyMgorICA2OiA0ODlDMENEMTUwMkEsIDIzREQ0NDA2Rjg3RUIxNjQKKyAgNzogMENCQUFFMDhFMDdFRkYsIDkyNTY5Qzk1OEI3MjI0MTMKKyAgODogMDczNjEyRjI4M0Y4QTZFNCwgMUREOTc4RDAxQ0U4RDFERgorICA5OiBDREU2NzZCMUEzQUM5OEIwMEUsIEMwMzNGMDk5RTI2MjA2NjgKKyAxMDogQUQzQkM4OEVFRURBNDBBODM2ODUsIDM2REE0NEUxM0MwQzhBNEQKKyAxMTogQ0E2MEU4QjkxOEY3M0U5OTk4NjAyMSwgNDU2MzRDQTBFNDNFNEIxMworIDEyOiAzQjNDRjgyMTU3RUNFQUNBRDg2NThFRjUsIEU2ODFGNTc2MTYxNDZDQzcKKyAxMzogRUJDMUE3MDY4MzQ2RUMxQjdFQjgxNUE3REMsIDJDODA2RDJBOTA5Q0NBRjEKKyAxNDogOTdDREIzRUY4Mjc2RjFFN0Q2QjY2NzdEQTJEQiwgNTNGMDBCOUEyRTQzREUwOAorIDE1OiA0NDE2OUIzRURBRDk1MDZDNTFBNkRBMDU1RUY5QzIsIDVCQjZERDk5NjEzMDg5NkIKKyAxNjogMzVFQzI5MDY1QjFGQzY0MDAxNUIwRjc3OUU3QTM1OEEsIDg2N0VCRDBFODY4MjNGMDkKKworT0NCLXJjNiAoMTYgYnl0ZSBrZXkpCisgIDA6ICwgMjdCOUUzRjU0NEI4RjU2N0VFQkY5OEVENUZENTVDNzYKKyAgMTogOTIsIDIxOUZEMkQ3NEQ3RTNGMjFBQTZDMkE1MDdDMEE1NDZCCisgIDI6IEJFQ0YsIDk2QTY1NkExNkZCM0M0NTc5RTY5NTVENTkyQUVDQUUxCisgIDM6IDREREUwOSwgN0QxODgyODc5QjVENkZEOEMxNTE1MDJCRDhBQjIyMEEKKyAgNDogMEQ2QjRGQ0MsIEUwMUZCRDFFQ0EyQTZBOERDNjY5N0EwNkFCMTJCREIwCisgIDU6IEU1RTE5Qzk3M0IsIEU1QTg2QUFERjJGMzMzRDVERURDRTQxMDY4OENDNkE0CisgIDY6IDkwQkE3RDJBNjk2NSwgODA1MjNBMkNBQjJBN0JCMkU5MEIxMjFERTgwRjQ2QTkKKyAgNzogNkZFMjU4MTQ4RUM4RDAsIEI3MjU0QjExMjc2QTc3QzVGOTlGRTVFQzkxRDgxRjU3CisgIDg6IEQ4ODcwODAwOTVERjg4MTcsIEYzRkI5MzgwNjhBMDFFRjg5REUwRjEyMjZDNTQ0MzYyCisgIDk6IEQ5ODIzMzEzMjg5RDU5NzYxNCwgQTU0Nzc2NEVGMjBCRDRCNEIzMDM4ODJCNjRGQUYyQzUKKyAxMDogRkY2ODk0MjExMkNGMDE3MDFFODYsIDk0RjM4NjBENDQzODQyOEVFMjk2Q0VBQ0IzRUI2N0Y1CisgMTE6IEZGRDM5MEQzRTBCNjRGNjREMzE5MkYsIDk5RDJFNDI0QzY3RUJBQ0NENEUyRUI5QTBDREI4Q0RECisgMTI6IDMxNjIyMzU3NDhCRERFQ0M4NEZDOEM5NCwgQkRENDAwQTU4QUY1OTEwMEE3MzFERDVCNDM4NjQ0NEUKKyAxMzogRDJBMEVDOEIxRjIwNjcyMjg5RjcyMzZDNTYsIEIyNDVDRjQyNjQ0QkRBQzVGMDc3MTQzQUYyQTU3QkE3CisgMTQ6IDgzMDkyOUIyODUwRTIyRjZDMUJBMjAyNzI0OEMsIEI2QjUyMkY3RDZCQTNDRkZBOTJEMDkzQjM4MzU0MkZFCisgMTU6IDJBNUZDQ0NDRjQzRjg0NUFBNzc3NTBEM0JDNkIxRSwgNTNBMEEwODgyQzc4NDQ2MzY5MDA1MDk5MjE2NjFGQ0EKKyAxNjogODQ4MDIzNDc5NkY5RUFDMzEzMTQwQ0UwMTRCMDI2NUMsIDA2NTZDQThEODUxQjUzRkQ1QzFBQUMzMDNCMjY0RTQzCisgMTc6IEYwMTFBNjdDMjJGMTZBNDJDRUE1RTQ5M0NCNzY2OTY0QUEsIDgzMEI4MTU4QjdBOTYyMjRBNTNGQjdGM0EwOENEMTI4CisgMTg6IEY3NjI3NEE3MzBBNjA4QzJBQjM3NDk3QTA0OUMzNjk5ODgyRSwgNERDNERENERGMzlEMEU2OEQ2MTY5RjlEQzdGNEE2RDUKKyAxOTogN0IzOEREMjM3REU1NTJBNzJFNDM2OUE4MUMzMEFGRUE1RTUwNjMsIDAxQTYyQ0JEMzAxNTM3MDJBNUIyOUZCMkExNjgzODk5CisgMjA6IDU4RUI4NjZGMUZDQjA2MEFDQzgyMUQ3NzZBQUM0QUQ5RTg3QzMyNkEsIDI1QUZCOEZDNDg2MDVFMTM5NkVBODQ3MUY1NUMxMjk0CisgMjE6IEEyNUYyQzBGQUQ2NkIzNTgwNjI3NDk4RUM2NkM5OTRCNDlDNTQ0NTkxMSwgMDE4MkE5NTFEOUEzREE1MzY3NTYxMkRFOEVFRDFGQjkKKyAyMjogODgxMzk3N0YwOTJGMDdGMjUxQTE0OTdDODk4OTY3RjNGOThGNUNCODc4Q0IsIDgwQkMzNTNFMzEwODgwQTgzREQ0REU0RkU5NkFCNkYwCisgMjM6IDUyREM4Qjc2RjVBNkY3OEQ1MUZCN0RCNTEwNDhFMjY2MzU2MzMzNUVDODc2QTUsIERDMzY4OUFBMDc5QzA0QzE5RDgzNjQ2QjI3MkY5REVDCisgMjQ6IDk2NTQzN0QzRkRGOTE3ODRCNjNDNzNDOENEMDAxQkQ5MzcyMTY3OTYzREYzNkI4OSwgOUZGODRFMjg0NUUzQzFFM0U2NzExRDE2NDZCMThGMjEKKyAyNTogQURENDBGNjc0QkQ1NkZGQzhGOUI0MDQ3RkFBRDI0NzFGMEE0OEY0NTQ0Qzg5NEY4MDYsIDlENjg0Rjc0Rjk3MzRGMUM0OTdFMzNEOTZBMjdFMDBDCisgMjY6IDdCMDQ5QjY4ODgzOUJDNjI3ODUwODIzOTdERUM3QUE5NEI4MzdEMDk0QUVDQTRCMTQ1NzEsIEVFNzExREYxQzE1QjVDOUUzNkI2RTM4QjZGNzE1MkQyCisgMjc6IERENDY4MUY5QzQ5OEEzQ0Y2OUE5QUM4NzZFMDJCRDlDREM0RkIxRjY3OThGNzcyMDEzQjYyRCwgQzVBNTA2NzZFRkFBMkE1NkNCREJFNTVDRkVEMzA1MEQKKyAyODogNDcxQjVFODlBMTMzN0U3NUU4OEFGQkFBQ0ExQzAxMTc5MEYxNjU3NDI1NDgzMjI5RTU1QzM0RUUsIDIwRjczRjJBQzQ1MkZGRUE0MjNCRTJFQkRGMzNDRkExCisgMjk6IDcxODEyQzgzREUzNERCMzI5QzhEQ0Q5ODg5MEFGQjFGNzcxOUU4OTBEQUU1Q0VCN0FDOTY2OENBRDAsIDZGQUEwM0UxMEM2RkI2N0Q0MjVDNjgzQzZEODVGRDc2CisgMzA6IDRCQzJEQjMzNzg2Q0ZEMjlCNUNBNUI4MDQ0NTQxNjk5MDYxMzhFOTBFMjlFN0JFOTE5Nzk3MTAyN0FGNywgNzUwNTNDNDMzRUY1NTcyQTcwQzU4RUVDOTZGNTZDNTMKKyAzMTogNUUzQTBBQjQxMjY0QUI2NTM2NTQ1OEVEM0I3RTZBMjU4MjdFNTAwNzVBOUUzNDdGMTYyMkVEMDcyM0UyMjksIEM4RjFFQ0QxOUFENUZDOTcwQ0YwRDMxQkY0NkIwRjJCCisgMzI6IDJFNDhERUU0QjM3OUNENTlGNTM2N0QxN0RDMzk3QzFCRkQ1M0I4QzRDRTQ2QTgyMDI1MTg2MTQwNzYxNzRFQjYsIEVGQ0U3NThFQ0NCNkJFODc1RDE2QjdFMDNBNDk4RDMxCisKK09DQi1zYWZlcisgKDE2IGJ5dGUga2V5KQorICAwOiAsIDg4NjE4REVGOThGRTU4OEUyMzEwN0U5QTVEODlDMjZCCisgIDE6IDM5LCAyQjAxQjIwMkU3NTFGOTU3RTMzMUVDRDFDRURFMzQ1NgorICAyOiAxM0NCLCAxNzA3MUU1QUZENUQ4Q0U5NTNBNzNGNDk0MTJCRThDNAorICAzOiBEQzQ0MjgsIDRCMEIxODgxQzI1NDBGRjkyRTdERTYzQzQ3OUE3NzUwCisgIDQ6IDEyMDM4MkIwLCAwQkIxMUQ1N0I1QkQ5RDg0NkNGMzEwMzNDRDRDQ0I5MgorICA1OiA5N0YzMzJGOTVCLCAzMzVFMDQyNEQwQTgyMEY2MERCQjk2OEI4QjVBQTA1NworICA2OiAzQzdBQUU3MjAzN0IsIEM4MDM0QzJDNzZDMUNDRDdDMUIzRjM2REQ4OTA3RTFECisgIDc6IDhBOTlFNEExQjg5QjZELCAwNkE4MTY1REZBREYxRUE1QUJEODlFNTc0NDIyREY3RgorICA4OiA2NzY1ODcwNjVGMDM0MkI4LCA5M0FERTYzOTk0REYyMTg5MDc5MjM0REMyMDRCRjkyQgorICA5OiA4RUMzOTRDQkM2ODc3QjI0NUEsIDFBODlGMEFCMEI0NEJDNzA4RUJEOURFNDg5RTJFRUI4CisgMTA6IDVGQjUzNjZFNUNBRTREQjcyNDExLCA1Q0E1ODgxQTU4MDVENTNBQ0E0OTA0QTVFRUMwMTU1MAorIDExOiA3MkExOTk0MDI4RjA5RUQ2QTRFNDVDLCAwRkZDMDA1Mjk5NkNFNDVERjRBMjhGN0E2RTlDRkVBNgorIDEyOiAxRDVFRjIwRjUyQTlCNzIzODZEMUE2MDEsIEE2OTdERjExNzk2MjhERTExMjBENUU4RDlGMzlEQTZFCisgMTM6IDc5QkQwMDJBQTU5RDc0RjEyNUFEOUUzMkRFLCAyRjAyQ0I2RjcwQkY1N0JCQTBERjEwMERFNTAzRjYzMworIDE0OiA0NDJDNkY5MDE2REY0QzA5MDA1NjI1ODc1NkE5LCA1OEM2RkQzMTgwQjlCNzQ0NTlENzBCNTY4NEJFM0Y0QworIDE1OiA0RkM1NTQzRDlBODkyQjQ0RUQwNEVFOEIyNUUyMzIsIEI4Qjg1OEIzRDNFQjRCMjZFODY3RTQyOUY4OEE1NkI0CisgMTY6IEYwNkU3NTAzMTY3QzIyMTBBQjMzMjI1OUJBRkQ2QUI0LCA3M0NFMjU4OUQxREYzNENBM0RDMkIxNENDOUZBNjI3NgorIDE3OiBCQ0NDMjYwQkQ0ODIzQjY0MDkwRkIzM0U2ODE2RjlDMzMwLCA4MUFCQkRDODNCMjU0NDkwNzg0MEZFQjVBRjQ0NzlFQworIDE4OiA0NTBDMTEwNUI3NkY5NjBEMUE1RjMzRDdGOUQzN0RBRTIwQzMsIEM0MUREQzg5ODBFODhFMzk4NkQ5Qzg0ODU3QkJFMUU3CisgMTk6IEM5RjM2RUYzQTk5MEUwNTU0RURCNTlFNjc4OEY4RTlCRjFEQkM3LCA5MERENTQzRTE0OEQ5QTBCNzlBOEIzNzZDNTUwOUUwOQorIDIwOiAzNjY2RkVFQTk4QTRGQzQzNEVEQjc1MTdFN0ZDRUUyMzIwQzY5QkNCLCA5OUYxMUIzNjBEREIzQTE1QzQyMTEwODMxQ0NCRjIxQworIDIxOiAxMjZGMzlDMTlEMUUwQjg3RjExODBGNjU4OUE3NTcxMkI2NjIwOUUyQ0UsIEI0RDI2OEZCOEVGNUMwNDhDQTlBMzUzMzdENTc4MjhBCisgMjI6IEMxQjZEMTRFRThCNkQwQTY1M0JGQ0MyOTVENUY5NEU2QkNBMDlFMTgxRDhBLCA0QjQ4ODNCNjE0RDVDQzQxMkI1M0VENDIwM0VBOTNCNworIDIzOiBEMUYyQTEwRjFBOURBQjczOEM2MUNEMEVGNjZGRTVGNkQxREE5NURDNjcxMTI4LCAzRjFFRkRBNTVFRkVGMUEwQjI0NzA4RTEzMkJDNEQyNQorIDI0OiA5RDQ1NzIxNkM1ODRGNDNEQkExREQ1NUM1NDgyMkE4QjZBODZEMjJEQkZGQTE0RDQsIDUzNDAyOTcwQjEyOEU5OEE1RjBENjI0NzZBMzhGOTU5CisgMjU6IDAxMjgyODYxNEI1RDY3QzlBMUVFMjRBMUVCQ0QzMjJGRTlDOEJFMEMzRjIwQTUzNzE0LCAyQkZGMjg4RDkwREJEQzYzODA4NEY4MEYzRjdBQURGMworIDI2OiBCMTkwNEFFQ0Y1OTlGNkM3NDU1NzQ3NUU0MDlFNzVFNjQ2MjcxREVERUM3QTgzMDI2MERCLCBCRjExOUJEQkRBMjc3NzNFMDM4QjcwNjdEMkIwRUVDRAorIDI3OiBFRDgzMTc3MUM0MzQ2RkMxOTQzNTM1NEFFMjlGN0E5NDM2RDZFOEQ0RDQyQ0ZGMjYyMDdEQkQsIEMzRjAyOUZDOEFFNjkwRTg0RkJEMEVGODA2QjgwMUYzCisgMjg6IEUwNTFCOTU4NjAxMjIzRkVDRUFERjkzMkEyNzdCQ0YxOEMyNTAyNUFFNERBNzkxMTU1Qjg1MDM1LCBFQjc1RTU2QkU3ODU2RjFCNUVEM0QxMjVDMDkyRDM4QQorIDI5OiBBQjM0NDk1MzdDNUUyMjEyNUJDMzJENDgzRjc0QzNBM0RCREJENTIzMjgzOUE4NUQzMDBGNjVCNEZELCA4NTFCMEZCQUJEMDgwRjc4M0JERTRGNDdBRENENkQ3NgorIDMwOiA0RTY4NTUwODM3MTMwNjUyNzk1QThDOUQ2ODUzMDcxN0QyQjBBQTVBMTdGM0FFRjkyRkZCNTAyRTQ2QUMsIDEwRTIyMjcwNjUyN0E2NEU3NTdFREU0QjlFRkMwOURECisgMzE6IEMyRDcwMzNEQTdBMTg1N0Q3OTQ5N0VBNkM2NDc3OUVCOTY5MDQ2Q0NFRTZDNzRFNjU5MkZFRTZFN0M5NEM0LCAyMDE1Njc0RUNBODBBQzlCNjdBRTg1NEUxOEE3RDU2RQorIDMyOiAyRjNGMDM3NEREQzI0QUUyMUYwMkQ0REE3NEQ0NkM3MUYwQ0QyMjY5QTY4RjMyRjdGQUEwQkFCNjRBQThFOUJDLCA3MzdDOEJBMTY3N0E4Q0U5N0Q0MkZCQjA3NTMwRUU5OQorCitPQ0ItdHdvZmlzaCAoMTYgYnl0ZSBrZXkpCisgIDA6ICwgMkNEOEVGMjJFNTQ1N0M3RkU0MDE2QjBGQjgyRkQyMDQKKyAgMTogNjQsIEVCN0JCNjBFNDkzMkMwRTk3QTdBNTkwNkJEMDQ0QUNGCisgIDI6IDNBNTksIEUzRDIwMjQyNDE2NjYzNjlCQjU0MkVEMDk2RjIwQzcxCisgIDM6IDY3QzAzOCwgN0U2RjFFQjNGMjA4OEY2NDE2QkI2NzVEQ0FDMEQ0ODQKKyAgNDogQkIzNkJGMDIsIEJERUVFRjA3RUJCN0E1MEE1MjAxQzhBMkQ3MkMwMDM2CisgIDU6IDZGMDZDMEUyOTMsIEM2MzU1NzY4MUQ4NEFDQ0ZGQkZFRTg3RDgyRUYxRDNDCisgIDY6IDIwMTVGOTRDQzVBQSwgRUYxREVBRDQxMzREMkExQTQ3QTIwRjI2RkFBMzU1NEQKKyAgNzogQTVGOENERDA3OTY0QjAsIDY3MkI3NEQ4OEM4QUE3NTY3QzZBQzRBODk2RTBGNkQxCisgIDg6IDVFRkM5RDhDM0I5RTdGM0YsIERCOTE2MEM1M0FENDI5RDRDMjJCQzBFMkU2QzUwOUM1CisgIDk6IEI2MkNCODBGNzU1OTRCQzU0RiwgMjAwMjBBNzk4RkY1OUYwNDcyRTc1MEM3OTZCNUNDOTQKKyAxMDogOTcwOTgzQjBGODg5NzYwRUVFRjAsIDM2MEFFNDNDRUJDQzI3NzU1NTQ4RDQ5ODRDRUVBMTBDCisgMTE6IDc1QzNBOENDQjMwQTk0Q0Q1N0QxRjgsIDc5ODIwRjNCMTYyNUUyMTZCNUJDMUQxQTIyQjE5OEY5CisgMTI6IDAzM0RBNDFDQ0JGRTNDNjg5NzIzMEZDRSwgQ0ZFM0VERDExNjI3MjcwQ0Q2MzkxNjUwOEIwNThCN0EKKyAxMzogMTUzNTgwMzJGMzAwNDNBNjZGNDlEM0Y3NkEsIDk4QjgwNTZBNzk5MUQ1RUY0OThFN0MwOURBQzdCMjVECisgMTQ6IDcxRkJBN0Q2QzJDOERDNEEwRTI3NzM3NjZGMjYsIDIyQkEwRUNFRjE5NTMyNTU0MzM1RDhGMUExQzdERUZDCisgMTU6IEJENzYxQ0Q5MkM2RjlGQjY1MUIzODU1NUNERkRDNywgOEUzQzdFMUQ4QzQ3MDJCODVDNkZDRDA0MTg0NzM5RTQKKyAxNjogRUI2RDMxMEUyQjdGODRDMjQ4NzJFQzQ4QkZBQTZCRDcsIDEyREU1NDhEOTgyQTEyMjcxNkNFREY1QjVEMjE3NkQ5CisgMTc6IDhEREY2Q0UyNUE2N0I0MDlEM0ZCNDJBMjVDM0FBN0E4NDIsIDNFOUZBMkM2QzY1MzQxQThFMTEwMUMxNUUxQkJEOTM2CisgMTg6IDU1NjNERkMyOUI3NTBGQkM2NDdFNDI3QzU0ODBCNjU4NDZEQiwgOTA4ODFDNjgyMDkwMUJENDFGN0IzQzJERjUyOUI4QTkKKyAxOTogOTMzNDNDMUU5NjI0MzIxQzJBMEExNTVCQThCNEU2NkZEOTJCRTIsIDcxQTY0MUREQ0Q0OTgyNUUxMDg4MEQ1NEJFRjMwRTkxCisgMjA6IEMyNTZCQ0EwQ0YwQUNDRUVDMUFBNEI5MzcyQUYyN0QyQzNDNjVBRkMsIDkxRDQ1QzREQTQ5QkJBRDE4MDlBMTFGNDA0MUM3RDA5CisgMjE6IDNERTY5RkRCNzJDOTM1MThBM0UzMTdGN0IyNkM0MjVFRTNERDQyREE3RSwgODVFMzdCM0U4RUMzQUY0NzZEQjc4MTlENzM5RDA3RDUKKyAyMjogNjc2QUM3ODg1QzdDOEZCRTk4NjIyNDJGQ0NDNDZDMTgxNDQwRUU0OUFFNTksIEJDREI0MkI1M0FDNEZEREY5QzNCRjg4NDlBQjk2RUVDCisgMjM6IEQ3MUI5OEI4OEY0NkNDNDdEOTBCQjkzMTU2NENERjAxNTdGMEFCQ0I1RTY5NTQsIDI4OUNENTc5OUQ5RTQ5RjM2RDcwRjY3NzI2QTU5NjEwCisgMjQ6IDY2OUMxNkRCOURDMTc1MjAwQzA4NDc2ODMyMTU1REFBNTJGMUY4OTY5REYzQjc5QSwgODM1QjIxMEVCQkU1QzlEMzRDMkUwNTJFMTg0M0MxRjgKKyAyNTogMkYzOTM0NkUxNEEzNEJCRUQwNDkxOTI5Q0Q5RjFGQjNDRUM0MTJDMjVBQjcwMzM3MkEsIERDNEI0MkU4QkE2NzZCQTEwMEI4N0JFRTMyOEM1MjI5CisgMjY6IDFGRDBGOEJEMEFDOTVFOTE4ODE2MzVFQjBDRjBFNEZCMDk5Q0JCMjE0Q0U1NTY0MjJFMkQsIDg5OENFQjNDQThGQ0E1NjVDRTVCMDFFRjkzMkZEMzkxCisgMjc6IDdGQkQzMkIzRDg4QjdFMDAyQkE2MDU1NTg1QjVEMEUxQ0M2NDgzMTVBODFDRkVDQTM2M0NDOCwgODA0ODIwQjFFMzgxM0QyNDQxNjRGNzc4QjlDMkE4QzgKKyAyODogODc3QTVGMzM2QTFEMzNBQjk0NzUxQTMzRTI4NUMyMTY2NkYwRDhGMTAzQUMxMTg3RkMyMDUzNzIsIEFGOUYwQUMxNjVFQUZDRUU4QzJBODMxNjA4RjE2NkI0CisgMjk6IEVDQ0EyOTc3MDVCMDM5NUU3MUI5RTQyNjMzNDNENDg2QjI5MjA3REExODhDMkYxQkE2MjZFREJGNDYsIEEwNURDODczNDA2QjIzNkU0RERCQzAzOERDNEQyNjI3CisgMzA6IEZGM0JEOEQ0RTExMDhFOThGQkFFMkUyOEJDMTI4MTlDRDc5NTZCQzQ5MUMwQjNBMjkxRkJFRTczOTU5OSwgNjhERkU1ODQ3M0JBMjgxOEEyMzA5NUQxRDZFQzA2NUMKKyAzMTogRjE3NTIzMDYwNjA0MEFEQUNFQkFGRTRENThCQkQxNDBCMkQ0NUU4QkY3RTVDOTA0NTEwQjU4RTRCNTNEM0YsIERBRjU3OUUxQTEyNDgxRDM5RjREQ0ZCN0MyODc5NEIxCisgMzI6IDI2MTM4OEQ0OTFFRjFDQjkyQzI2MUZEOUI5MUNBRDVCOTU0NDBERTBBNzQ3MTQ0RUI4Njk3Njk5RjYwMDgwMUQsIDc0OTA1NkVCRUFGNEYyMENEODc0NkFBOEM4ODQ2QzQ3CisKK09DQi1zYWZlci1rNjQgKDggYnl0ZSBrZXkpCisgIDA6ICwgMEVERDJBMUFCNjkyQUE3QQorICAxOiAzRSwgMzA2RjgxNEYzQzJDMTA5RQorICAyOiAwNTkzLCAwNjNEMTlCNzM0QzM0NzE1CisgIDM6IENBNzJDNiwgREY2REFBRkFEOTFCRTY5NworICA0OiAwODkyNEFFRSwgMTUwOTVGQTQ5RTc4OTQ4MworICA1OiAzNTk5MDhBNkNELCAxNkNCN0YwNzQxQkE0MDkxCisgIDY6IDk3RjNCRDgyMENGNCwgQTU5REIxNUI2N0I5NUVFOAorICA3OiAwQTI2NzIwMUFDMDM5RSwgQjRGRkMzMURCQ0Q4Mjg0QQorICA4OiA5RjZBQ0Q5NzA1QzlFQ0M1LCA2QjQxQTkzOEYwQjFDQUVCCisgIDk6IEYzNTVENUE5MzdERDE1ODJDMiwgOUQxRjkzMkU1MjFDQjk1NQorIDEwOiBFRDM5NzU4Q0FGODlFNzkzMkU0OCwgMzk4RUY1MTcwMTVGMTE4RgorIDExOiBEOEFDRjE5MzYzQTBFMEFEQzkzMjFCLCBGOThCMkEzMDIxNzc2NkFBCisgMTI6IEY4RjU0QTgyMDJCMEYyODFFRDYxMEYzMywgMzZFRjdGQTRBMjBFMDRCNworIDEzOiAwRjg2NzdERjY0QjU5ODJEQjZFMjI5OTE0MCwgNERFRDJEQTgwNjgzNEM4MQorIDE0OiAwQzM1N0E5REMzMjFDOTNCMzg3Mjg4MTUwM0IwLCA3ODE0RDFDMEM2QTg5MDBBCisgMTU6IDEwQjZCMUEyNjFDMzAxNUExODExMEFEMjAwQTdCNiwgOUE4MTRENkQyQkFEODUwQworIDE2OiBBQTlFQTlEMUJBNzgxOEMwRDJFQkYyMzc4MUE1NDY3RCwgMjM2QTI0RkM5ODgyNjcwMgorCitPQ0Itc2FmZXItc2s2NCAoOCBieXRlIGtleSkKKyAgMDogLCA3NkYxNkJEQ0U1NUIzRTIzCisgIDE6IDYzLCBGMzRCMEI0NzFGNkY4Rjc1CisgIDI6IDg2NTEsIEQ3RUZFMTc5NDNEMzUxOTMKKyAgMzogRDQ1NTA0LCAyNjMyMjRFNTBFN0U5RTc1CisgIDQ6IDU3QjQxNEMzLCBBNTUzRDZDQUJDQTBGMjg1CisgIDU6IDQ5NzZFM0IzMDMsIEFDNUU5OTY5RjczOUVCRDkKKyAgNjogRjEwQUI4RUI5NEUwLCA4MzAxRkZFNjg4NDhENDZECisgIDc6IDZFOTU0NTkzQUM0MjdELCBDMUNGOTNCQkMwRjkyNjQ0CisgIDg6IEY0OEY0NDQ0MUI4OThDMEYsIDY5OEZGQUVEMUE5NUU4RTQKKyAgOTogMURDNjAxNTZENjI3ODJFM0QwLCA2QUZGMERDQzY1RDRDOTMzCisgMTA6IDcxOTIwQURDODk5N0NCOEIzQTcyLCAxQzEwMUM2QTI3Q0ZCQkJECisgMTE6IDg5MEVENzQ5MkVEOTE0QUMyMDM5MUIsIEY2NkRDRDYyMDVEOTQ1QzYKKyAxMjogMUI5RkFCODRBODc0OEJBQzE4N0M3MzkzLCBCNDUwNzU3RkNBRkFBRDUyCisgMTM6IEI0Qzg5RTFCQjI4MERCQzI2NUU0M0FDRTE1LCBBRTZCQjNEMkU2QTM3MUZGCisgMTQ6IDI0QjBDMjg5NDRCREYyMjA0OEUyRTg2NjQ0RjUsIDg0RTkzRTIxOTFDRUYxN0EKKyAxNTogOEYyRDU2OTRENTVFRTIzNTE2OEFBQTczNTk0M0FGLCA1MTQyNTJBRUYyRjJBMkQ5CisgMTY6IDU2OEI3RTMxRkZEQTcyNjcxOEU0MDM5N0NGQzhEQ0M2LCAzQzgwQkE3RkNBOUU0MTlFCisKK09DQi1zYWZlci1rMTI4ICgxNiBieXRlIGtleSkKKyAgMDogLCA0OTE5RjY4RjZCQzQ0QUJDCisgIDE6IDY1LCBDNjc4NUY3QkU0REU1NEQzCisgIDI6IEUxQjAsIEMxOTdDOTNCNjNGNTgzNTUKKyAgMzogQkI3MjQ3LCBERkUwOTJFRjgxODQ0NDNCCisgIDQ6IDM4QzJEMDIyLCA5NDNGRDk5OTIyN0M1NTk2CisgIDU6IEQ3MUU0RkQwRUQsIDUxMDQwRkU5QTAxRUE5MDEKKyAgNjogQzRCMjExRUFEQzJBLCAzMjk0MjlCRTMzNjZGMjJGCisgIDc6IDQyNkRFQjNGQzNBNEJDLCBDRjFDOTc2RjZBMTlDRTg4CisgIDg6IEE2RjgxM0MwOUNFODQ4MDAsIDk4RDlGRjQyN0IzQkQ1NzEKKyAgOTogNEQxQTk5NDhGRDE1NzgxNEI0LCA1QTM4OUZBRUVCODVCOEM2CisgMTA6IEVDM0VBMTQyQzNGMDdGNUE5RUVCLCAzMUUyNkUxM0YwMzJBNDhGCisgMTE6IEE3NUZCMTQzNjVEMTUzM0NEM0ZCRTcsIDhFRjAxQUNDNTY4QzA1OTEKKyAxMjogODkxNTgyQjU4NTNERDU0NkZGM0VBMDcxLCBFMDEzQ0ZGRTQzMjE5QzIxCisgMTM6IDU0Q0E4NDhDNDlEQ0RFRTA3Njc4MEYyMUY0LCAyOThFRkM3QjRENkI2Q0ZFCisgMTQ6IEVBNzYxMUM2OUE2MEYxQTJFRjcxRDZBNzc2MkQsIDdEOUFBNTFDRkNFQzgxMDEKKyAxNTogQjJEMUEyMTFCQzUyNEI5NjVBMDg0QkI0QjIxNzEwLCA3QjJBQzBFRUI1MjE2ODkyCisgMTY6IDVFODFGMUJGQTI3MEU4MDRBNDg4QzlCRkFCNzU4MTFELCBBNjdGNjI3Q0UxRTM3ODUxCisKK09DQi1zYWZlci1zazEyOCAoMTYgYnl0ZSBrZXkpCisgIDA6ICwgRTUyM0M2REJCM0NBMTc4RAorICAxOiA1RSwgQjFDQjdFQkU1NzgwREY5OAorICAyOiBGNEQ4LCA4MDM2MjM1RjJCRTdBODE3CisgIDM6IDRGRTI2OCwgMTIzMzIwMzk0RUFDMjRGNgorICA0OiBBNUJBMDJCNCwgQjgyNzZCNUUwMjdENDVEQQorICA1OiAxNTcxODU5Q0NDLCAyOTQwNkM1RjJERjJDRkM0CisgIDY6IENBMUU0NzQ0N0I5NSwgNUQ0RkFGOEZENTM0MTc5MQorICA3OiA4NzEwREIzNzAyMkQ5NiwgRTEwMDQwRkVBOUFFQTlDMgorICA4OiAyMDU5OTBEQzlBMzREQTNDLCBBRTI1Q0I0OUFBN0E2OTdCCisgIDk6IDc1N0FGQ0IzMTkxREM4MTFDMywgQUE4Q0FEQTg2MzhENjExOAorIDEwOiA2OTk0RjhDMTUzNTIyMzYxQkI5MiwgMUJDRUUwOUU5MjhFQjE4QgorIDExOiBBODZGQTBDREQwNTFCQjYwQUY1QUE4LCA1MEEzOEY4RTk4ODkzNTRECisgMTI6IDhEM0ZEM0VCN0ZGMjI2OUFBQ0ZEMjRCQSwgQ0I1MUNGODRDRUZDNDVGMAorIDEzOiAwM0QyQTMxMzkyNUQ5NDkwRkM1NTQ3Rjk1RiwgQTFGRjlENzJFMTFDNDIwQgorIDE0OiBENzdDMEYwRjYwMEZFOTJGMTRGNDc5RkE0NTdDLCAxRUJFMUI0Qjk2ODVFREZBCisgMTU6IDBDQUYwQThCRUI4NjRFMjYwNThDN0RGOEVCQTBFQiwgMUIxNTNEREFFODA3NTYxRgorIDE2OiAxMTNEMTI3MTZERkUwNTk2QTJGMzBDODc1RUM2QkEwRSwgQzYxRjVBQzAyNDUxNTRBNgorCitPQ0ItcmMyICg4IGJ5dGUga2V5KQorICAwOiAsIDFBMDczRjI1RkY1NjkwQkUKKyAgMTogRjQsIDNEMzIyMUU5MkU0MEY2MzQKKyAgMjogMkM3NiwgQzIyQzIwQjcyMzFBMERCOQorICAzOiBDNjQ3Q0IsIDNFNjM0OEQ5OTYzOTk2MjkKKyAgNDogMjAyMTg5MUEsIDhFRjc2QjI0RTlENTVGREEKKyAgNTogMTk2NkNCQ0JCRiwgMzEwRDI0MDI0RDU3M0U4RAorICA2OiA0MkMxNUFDOUFBRjAsIDIxN0U4M0MwQ0RFNEYwNzcKKyAgNzogQUI3MEYzRjczREYwQjYsIDE2QUIyNjc5RDk2QTU5MUIKKyAgODogQjdDN0REODQ1RDdFNzZERCwgRjMzMDY1RUE1MzE1NDVDQQorICA5OiA0NjhDQzE2QTM3Q0Y2M0VBNzMsIDg4ODc5NzMzRjcwQUUzRDMKKyAxMDogNEY3NjlFMjVBNzM0NkUyMkE5MzIsIDI2RTFBOTJGRURFRTA1OTcKKyAxMTogMzA0QThCNTNCMUNEMjRDNkMyN0MxNywgNDhCNDZFOUYwOTFCMEIyRQorIDEyOiA0RTNERjg2N0ZFRkYwQjhFMDZENUZBNzAsIDUzQkI0OEJGQjhBQjQ3NTAKKyAxMzogMkJBQjNGMEE4QzM4QTNCRDNDNDlEQkJBNUEsIDUyMzAzQ0FEQ0JCNkQzMTIKKyAxNDogM0QwNEEyOTkyNDU4OUFBRUY5M0EyOTAwM0VFNywgMTIwRUY5MzY0QjgzNzQ4RgorIDE1OiA0ODYxMjdBODBFNEVDNTk5QzQ2MTQ1MUNGMUQ3OUIsIDIyNDVENTE1OTlDQUQ2MjkKKyAxNjogQUY4RkIzRkQyREIzNDNGMUFGRjU2NEZDQkVBNTg3ODUsIDgwNUJGNDQxRTY2MEIwQjAKKworT0NCLWRlcyAoOCBieXRlIGtleSkKKyAgMDogLCA4QTY1QkQ3REU1NDA4MkFECisgIDE6IEE4LCAzQTgzODk3Q0M4RUM3Q0Y2CisgIDI6IDkyNTYsIERDNjZDMzlDN0REODdEOTMKKyAgMzogQzE0NUEwLCA0NTk2N0YzNzY0RjYyRjQ4CisgIDQ6IENEMzE0QkFCLCBFRjM4QjAyMTMyNTlDM0Q0CisgIDU6IDcwNzQwMTQ3NDEsIDY3NDhGNEJBRjA2REQ3QkQKKyAgNjogOUE4NzRDQUUwMUYxLCBFMzgyREI3MjM1NjI0MTA0CisgIDc6IERGQTBEODZEQzRDQTg0LCA2MjdBQkI0MzJFNTA0NTVFCisgIDg6IDY4NUMyQjJDQkREOEQxNDQsIEQxNjYwODJFMDg1MDYzQkEKKyAgOTogNTM1MTVEQUFDN0Y3QjhDRTFELCA2NjgwQjZDMjZFMUIwOTk0CisgMTA6IDJCMzk2NzgxMkJGNDE1NUE4RDM2LCBBRkVEN0YzOEFGRUZDNTQzCisgMTE6IEY0RTVBQzNDQzU5MTNCOEE3RjM1RkIsIDYxODFERDNDNDZBNkMyNEYKKyAxMjogRjNFQzg5QUQ0MjM1Mjg3RDUzNzE1QTgxLCAxMkNDMzU0ODMzRkU1QkQ4CisgMTM6IDY2RDU1NEFDMkNBODVDMDc5RjA1MUI4NDU5LCAwOTdGMzEwODhDRkJBMjM5CisgMTQ6IDg3NDYwNjFDMjZENzI3NzFBNzU4Njk0OUEzRTQsIDZDRUYzNTY1RDBFNDVDNkIKKyAxNTogRkIzQkNDNjUwQjI5RjQxODkzMEE0NjdFQTRGQjczLCA2NEQxMjcyM0UxMDBGMDhCCisgMTY6IERFMUMyN0U5QjNDMzkxQUY1REY0MDMyOTFGMkMwODRBLCA2QkFERTQ2MzhBRTQ2QkUyCisKK09DQi0zZGVzICgyNCBieXRlIGtleSkKKyAgMDogLCA5Q0I3MDc0RjkzQ0QzN0RECisgIDE6IDRELCA1MTU0MUE4MzhBMTU0RTBCCisgIDI6IDVDNzcsIDYwRTg2RjJGMUY0QzZGOTYKKyAgMzogQjNEMkYwLCA3RDc0QTlFNkEwNjE0NTdECisgIDQ6IEIzNTU2MDc1LCBFQUY3QTg5QTA3NDUzNDYwCisgIDU6IDFCNjFDRTcyMzAsIEY5MEQxODYyMEUxQUI4NzcKKyAgNjogMzk4N0ZFQzhEMEQ3LCBCNUVGMDRERUUyRTUyOEY5CisgIDc6IEVCRDBBN0VCRUVGRjNCLCBBNzJDQTI0REQ3N0E1RERBCisgIDg6IDQyOUZCMzhEREFCRjc2RDQsIEQwNTc4NDg0QzM3MjI3QzgKKyAgOTogRjhERjI4QkY1QzRDRDI4QjFCLCA1RTdDNERDOEU2OTRFM0I0CisgMTA6IDJCRjQzNkJCRTA2M0Y3RTgzMEMyLCA4RDkxOTYzN0M5NzNDNzFCCisgMTE6IEVEMjE2NTZDODg3ODMxOUYxQjdEMjksIDg4MTMyODBDMTI3N0RGMjYKKyAxMjogRjQ1RjkwOTgwRDM4RURGNUQwRkVDOTI2LCBGOTYxOTM0MUUyNzNBMzFGCisgMTM6IDUyRjJEM0NBQ0MyOTRCMTQxQjM1RDczQkJGLCA3QkJDM0YxQTBEMzhGNjFGCisgMTQ6IDJFNkRBMEZCNTU5NjJGNzlCOEU4OTBFOEREOEQsIDgwNjA3OTlEQ0FCODAyRTQKKyAxNTogRDZGOUE2QjI0MjAxNzRDNDk5RjlGRTkxMTc4Nzg0LCBEM0FBRjk2OUVEMkY3MjE1CisgMTY6IDRGMUNGMjg1Qjg3NDhDNEY4RjREMjAxQzA2QjM0M0NBLCAyMDNBMjY5MkMwNzdGMUI1CisKK09DQi1jYXN0NSAoOCBieXRlIGtleSkKKyAgMDogLCA3N0U4MDAyMjM2MDIxNjg3CisgIDE6IDUyLCBENTdERjEwMzdCNkE3OTlECisgIDI6IDMxQzksIDdFNzgxNzU5QjA1N0Q2OTUKKyAgMzogNUM4MzI0LCA1Njk2NUQ2Q0IyQzk3QzBDCisgIDQ6IDE3RDk5MDk5LCA3QzUyQjVEMDk0NzVGNUQzCisgIDU6IDQwMDA4MkM0NzUsIDNDQTVDREI5QjRBMEZBRTkKKyAgNjogNERGMEU0MDAwQzI0LCBEQ0ZFRTJDMzM4NEY5NzMxCisgIDc6IDEwMDA0QzNDRTMyMjU1LCAwQTY4MzJGOTg1RjYxNjU4CisgIDg6IEZGQTZFQTc2QjM0Njg5M0MsIDYyMDI2OTNCMTUzMjU0RDYKKyAgOTogRTk2Mzc4Qzk0RDI0NkFCNTFDLCA1QjI1OUZFQjcxNUI5MTU5CisgMTA6IEE5QkVEMkQ1OUE5MkQzRDk0MThBLCAxRTdFMDY2QzA5OEEwMjNECisgMTE6IDRFRjE0NEI3RDQ2MjJCQUQ0REM4NDAsIDVEQUIyQzFEMERGNTZCMDgKKyAxMjogNkRCQ0RGNTZFNTdDRTQ3REQzRDBDRjQ0LCAyQTI0RjJBMjI0MzY4RjU1CisgMTM6IDQzMjQxQTBBRDkzMzYzNUQ3QzhFQUQ0N0RDLCA4NkI0QjVBQzIyMTc3RjE5CisgMTQ6IDkyMEQ2QkRCRTA3M0YzQzc1MDUyNDIwQzg4M0QsIDEwOTQzREJCMjNCRDg5NEQKKyAxNTogQjJDNzVERjAyNDI2OTgzM0IwMzlDQUIxOUVDODY1LCA4NEI3REJCNDI1RTQ1ODU1CisgMTY6IDZBOTQyNEI2QTg3M0JCNzE1NUMwMURDODdFMjNFQzUyLCA4MkM1MDQ3NjU1OTUyQjAxCisKK09DQi1ub2VrZW9uICgxNiBieXRlIGtleSkKKyAgMDogLCA3Mjc1MUU3NDNEMEI3QTA3RUZCMjM0NDRGMTQ5MkREQworICAxOiA2MSwgNDFCREU5NDc4QTQ3QjJCNjEyQTIzNzUyQjVBNDI5MTUKKyAgMjogRjRFQiwgOTBFRjU0MkQ4OUY4NjdDREZCMUEwODA3RjhBQTNDQzYKKyAgMzogRjVBNTlCLCAxQkVEODczQjYxMzA5NjU0NkQ0QzIwMTM0N0NDMzg1OAorICA0OiBGNDU0NjEwQiwgRkI0MDM1RjI4QUE3NTIyMUY1OTk2NjhBQkJFMjE3ODIKKyAgNTogMzgyRkM5MzJGMSwgQjQwMjcwRTIwODRFOERDRUIxNEM2NjAzRDA4MEQ3QzIKKyAgNjogMThGOTIxNDQxMTE5LCA0N0YxRjg4OUIzMDcyOTgxNTA3NTBFODFFOTRBQjM2MAorICA3OiBFRjAxQzcwQzlEMTgxMCwgQUUwNDM5REJCMzgyNUYyN0NGODQ2QjQzRTRDM0FBODAKKyAgODogODk4NjNFRENBRDQ3MUMzQSwgRjRFOEFGNzNCRkM0Q0I3OUFFQ0JCQjM3NzREQUY4QzIKKyAgOTogQTZGNDk0MDkyRTA2NkE3MEY2LCBGNzNEM0IwNDc1MkI3RDkxMzQyMEMxN0U2NTZDN0Y4NgorIDEwOiAzNDI0NTk2ODJFMEE4RDUzQUY0RiwgNjFFN0NGMTRFOTg3OEUwNzI2QzY0QjFFOENBMDhCRkYKKyAxMTogNjVFNTIwRDVBOTk4MjVERTI0NDFEMSwgN0EyQUE3NDBENzg2RUI3MDE1QzYxQjMxOTU5RTU1RDkKKyAxMjogMkY5NkQwQkI3MkUzN0RBMjAyNDEwMzAyLCAxQTMxMzI0MjUyN0ZCNTIyMjg5MDk0QjlBRkRCNUY3QgorIDEzOiAzRThGOEExRkNFRTNGODY2RUMyOTEyOEJBMCwgQjgwNjVEQTJEQUJGMDQxMjlFNUFFMjhFQ0MxMUExNUIKKyAxNDogQzJDMTU5NzZEM0MyNDk5QUNCOTQ1NDg3ODEzMSwgMzcyQ0FENDg2RTEwNDA5OEVCMUFBNzhBMjkyMkExQkUKKyAxNTogMUYxMkNBREFCQUVFODBFNDQ4QjdFRENCNDJGOEZFLCA4NkEzOERFNTM2Mzc4N0Y1NUIxNjQ2MkM2ODRFMDhEQworIDE2OiAzQjlBQkIzMzA0RTc1QkY1QjYzRTdGNUI1QTNGMzk4MCwgMUZCRDZCOTNFNDU3Qjk3NzlFMkQxMkQ3ODMwMUVGQTkKKyAxNzogREMwQ0Q4MDVFNDM2NzVBNDMxNzQ1MkUzNzhBRDQ4QUM0QywgNDBBRTRBRkE0QjNFNTgwRUZEQjRBRDBBRjVCQzRFNEEKKyAxODogRTlERDUyRUE3MjY0QzZDN0JCQTM5Qjc2MUI2RTg3QjY1Njg3LCA0MDYxREQ2NUQ1RTdGRkZFOEQzRDQyNjE0OTRENEY4QworIDE5OiA4MEE5NzM1Q0ExMTc1MDcyODIzODI4MTIzNDEzQ0NFNzcyRDUyMSwgRDMzNzhBMTJFNzlDNDlBMzczNzhERjUyN0E0NjBBQjIKKyAyMDogMDlBRDQ5NUFGRkJGN0NCODg0MTI2MkU3RTVFODk1Mjg3OEQ0MzkxQSwgQzI1RDdBOThDNkYyNjBCNUZCQ0EzQjhCNUY3RjMzQzEKKyAyMTogMzkyNTYxNTcwN0NDNDBDMzUxRDRBNDk3OTQ3Nzg1NDVCQzFGNjgzMTc1LCA5NzYyMjQzN0E3MjA4MzgzQTRBOEQyNzZENTU1MTg3NgorIDIyOiA1QkIwRDQxRUNEN0JEMkNGMEIxMkE5MzMyNTVEOTVBM0ZFMzVFNEM4OTZCQiwgNEI4QUQ4NEVFQTMxNTY3NjVBNDZBQzE5QzY4QjZGODgKKyAyMzogMUVFNzFGRTIzQ0JGRDU2ODNBQjFCMzkxRkMxMkI0RTU5NTJFNEU2QUEzRDE4OSwgQjBGRDc1OTk2RjI4RTA3MUVCNkM4NkJENzEwMkJBQTUKKyAyNDogMEFBM0Q4Qzk4QUFERUVFMTg2N0IxM0IwMTdERDI2M0JEMTZFOTYwREE2NEZEMDcxLCA1MjA0NzgwOTYzQTYyQzJGNEY3QjM1NTVCRkY3MzgzNgorIDI1OiAzQTg4QjZGMkFFMzIxQjIyNkRBOTBCOThFMDRBNkExNTg5NDExQkVEQkU5OTQ2MzJENSwgNTYzOEFGMDRFQUNGMUVCOTg2QUMwNzAyQjQzNzNBMjIKKyAyNjogQzI3MzE2NjFBQzYzNEE0REMwMzQ1RjA0MERBN0FFRTUwN0EzQjlEMDE5QjU5NTg1NDNCQSwgNEM2N0QzRkUzN0FCRUU5MjhCM0JCODEyRTczNDY4MjMKKyAyNzogRDNFNzY1MUFBNkRBMDM1RDA1RDU5OUVGQjgwNkU4RkQ0NTE3NzIyNDU5M0I1OTc0NzU4NDE5LCA1ODE0RTg0MjU4RTFCOUJENTZBMTg4QUFFNkYyNTEzOAorIDI4OiAxNzgxOEU3MTAyQjhDMTIzMjMwQzVENjRGMThCRTk0QzMxNTlCODVDOEY3QjY0QTdENDcxMkNEQSwgRkFBOTA1QjU4N0E5M0RDRjYwMEJBODU4OUE5ODU0MzIKKyAyOTogQkNBNDMzNUM2QzI5RDk3ODAzMkMyMTYxMTREMzlDMDFDNkYxNjFCRjY5RDVBMUNFNTVGQkE4QzU3NSwgQkUyNDQyNEExNjJFNDNBMTk3NTVFMkVGRDI3NERCRUQKKyAzMDogMjRDMzNDRUUwMjJGOEE2MzNERTlERkQwMDlGNTM1QjUyQkNGNjRGMzkwRDIzNzVFNUJFRDY1QjcwRDA4LCAxMzhGMjFENTRCNkI3RTM0NjI4Mzk3RENERTBEMzNCRgorIDMxOiA4MzhGRTk1MEM4MTY1QURCQkQ2QjYxRTk3MzJGOUE3MjdDQTdBRTc0Mzc2OTgxMzgyRjBDNTMxQzMzMTkxNSwgMDc0MkU3NjlDQ0JBMkQxQ0FDN0NBRDRFMEYwMTI4MTAKKyAzMjogNTdDRDc3OERBRDQ3NzI3MTc5NEZCRjc2MzY2MkQ5N0Y4QTEwQjE3RDcwQTY5RkRDQjk3NEZGRTY3RTU1ODUxOSwgOTQyQzdEMUMyMDBDMzg0NTc0OEY4MTMxREY3MUFFMjYKKworT0NCLXNraXBqYWNrICgxMCBieXRlIGtleSkKKyAgMDogLCA5MEVBQUI1MTMxQUVCNDNCCisgIDE6IDJGLCA2Mjc0QjgyMDYzMzE0MDA2CisgIDI6IERBRjYsIDZBNkJDQ0U4NEZENEVGMDIKKyAgMzogNUMyQTg4LCBDODNENTRDNTYyQTYyODUyCisgIDQ6IEI2RThGQjVFLCBDNDQ0NTlFRjQxQzhGMjk2CisgIDU6IDZDMDg4OEMxMTksIDI2OURENzY1N0JEMDIyNUYKKyAgNjogMUZEOUFEN0VDQ0MzLCAzQ0EwOTBGNDZCMTA3ODM5CisgIDc6IDFFREJGRjhBRTQ1OEEzLCA0NDAzODBCRjk3NDUxMzJCCisgIDg6IDA0REJFQ0MxRjMxRjlGOTYsIDI2NTM2MjBBNDg3N0IwRTYKKyAgOTogOTA4QUU1NjQ4QUY5ODhBODk2LCAwMDE4MEZGMzNDMUREMjQ5CisgMTA6IDUzRTYzRTBDMjk3QzFGQzc4NTlCLCAzNjYxNjIwOTUwNEM0MjMwCisgMTE6IDQwN0JFMTYxNDQxODdCNEJFQkQzQTMsIDQ3NTRCN0RENERCMjkyN0IKKyAxMjogOTk2MUQ4N0NGRURERjlDQzIyRjJDODA2LCA1OTQ3RkM0MUU2QjlDRUM5CisgMTM6IDlGNTI1NDk2MkU0RDIxMEVEOEFDMzAxMjUyLCA5N0EzOTJCRUFGOUIzQjA0CisgMTQ6IDM3OUZEQTc2RUNDRkRBQUMxMEY2N0ZCRjYyNEMsIDFEODk1QUJEOTMyQkQ1RUMKKyAxNTogMUQ1QTdBRDU1NkZGMzA3ODI4NEJCMjFBNTM2REFBLCAwMUZBRTJGNDkzNkVEOUQyCisgMTY6IDRCOEI3MTM5NjkyNDg4MENCMzNFQTZFQzY1OTNGOTY5LCBBMEY0QjFCRTNCOUI0Q0NFCisKK09DQi1hbnViaXMgKDE2IGJ5dGUga2V5KQorICAwOiAsIEQyMkFDRjg4MEIyOTdEQjA1MTNERkFGMEQyREY1N0Q5CisgIDE6IDU5LCAyMTBBMTc5NDY5RDY1NjhBQjk0NzBDNzYwNDE1NTc0RQorICAyOiBBRkE1LCAxMjIzRjlDRDE2MEFCRTJGMjU3MTY0QzZFNTUzM0M4NworICAzOiA5NjlCRUMsIEE1N0VDNzY3NTQzQ0EyQURCQTRGNUE3NDIzRUNBNzhBCisgIDQ6IENGOEIzMUYxLCAxM0I1QkY5Q0Q4N0NFMTVDRTY5NkYzQUYxQjA4MjY1MAorICA1OiA5QjIyREYzODUyLCA0OTM3RkREQTBBRkREQTA0Q0NENTNDQ0JCMEE4Mjc0NQorICA2OiBFMTE3MTlCMkYwRjgsIDY4NDc5MzFEQkYwMjIzRjVDRUY2NkFFM0Y0REZDRjlCCisgIDc6IDVBODVFMEY2REQyMjY2LCBBMUEwQUY0NUE2OEE2ODFDQzM5NjYxNUZFMUUxREZCNQorICA4OiA3RjJERkNDNjVFRDg2OTc2LCAxMzYxNEEzQzZFMEUwODYxMUQ4REY4RUU1QjdENzg4RgorICA5OiAxREFGMTBERkEzRjFENTNFNTAsIDY3MzYzMkI2REQ1NTNCQUU5MEU5RTZDQzhDREUwRkE1CisgMTA6IEFGNzRGRDk2NzFGOUMwQTk4NzlDLCBCOEI0REQ0NDhGRTk2NzIwNzIyN0I4NEU0MjEyNkQ5MAorIDExOiA0OTQyMUNFRDExNjdBODgyRTI2Mjk3LCAyMUM4OTUxQTE3NjFFNEJEMTNCQzg1Q0JEMTREMzBCRAorIDEyOiBCQzBCQzc3OUI4M0YwN0QzMENCMzQwREEsIEZBQUJEMjVFMTRGRkQ4RDQ2OEFENjYxNjAyMUY2MDRDCisgMTM6IDg0M0Q3RTAwRjk0RTYxQUU5NTBCOUFBMTkxLCAwODkzM0VENUZCRENBRjcyRjc4ODM5M0NENTQyMkQwRgorIDE0OiAyOTZGMTVDMzgzQzUxMUMzNjI1OEY1MjhFMzMxLCA4QkZGQURGNTY1NUMxODY0MDU3RDY5QTY3MDZEMTczOQorIDE1OiBFMzFEMkU4MEIyREJBNEZCRkFGNTJEQjA1MTM4MzgsIEM0Q0QzNjgyMUVDNjMxQ0NCRjFGMjU4RUU5OTMxMjg4CisgMTY6IDg3RjMxOUZFOUE0OEUyRDA4N0VERjk1NTYzODk2RUU1LCA1MTc5NjA0ODhFNUExMThEMTUwQTE1NzNFNzZDMjkwQQorIDE3OiA5NjMyQjdEQzE3NDBCQkUwQTdBRUVGRDBGNTM1QjVBRThBLCAwQzI0RDA5NTA4NzM2MjFEMzE5QTkyODg2MkQzQTZBQworIDE4OiAzNTk0MzFFRDRCM0FDNTM3MjM4Q0FDMkY4NjEyNjk3MkQ0MDMsIDRBMENFRDJGNEJGQTMzNTVDMTdENkM1REY5RkFCRkFBCisgMTk6IEUxNUI1MDE3MkVFOERBOUM1NTJENDQ4QTVBNDhCRUVBQTJGMTFELCA4MTY2QjJBMkQzQTA3NDVEMTA1NUY5RjUwM0ZENkMwMworIDIwOiA3NTg0MkREQzBENUUzQkQ4MDIyNUU0QkZCRDEyOTg0MjEyNDREN0VGLCBCQjk1N0JCMjU4MkI2N0I2Mzk3OEJDRkQ3QTk0OUVERAorIDIxOiAzREQ2OTE2MjcxNkQ1RjNFMDk2RTYxNDk5MUNBRDdFRDhFMDFGOTI2QjgsIDQwQTk1NEYzMUY1QjBBMkM1REQyMjBBQ0VEOEQyQjNFCisgMjI6IDhBNDlBQzE0RjU5NTkzRDUzOTlBMTBGOTM0NkUyRkQzNkY0N0Y2NEVENDE5LCA0MzI0RDQwOENFN0Y4NjM3MDQ5NUFGMTRGQkQxQTg1OQorIDIzOiA2QUE4RkEzNTNCQ0FBQjQyNjIyMTFENzVGMTNEMjdCRTE3MzUyNkI4QkMzQ0ZDLCBCQTNBMjdENzlFQzhFQ0JDNUE3OENCOUZEMDk1Qjc2NgorIDI0OiBCOTE4MTkyQkI3MkNGRUY5ODAyOThFRUU1NzA0NjAzNTZBNEJBMTc1NTU3NkZFQUEsIEVCMzQxRUNFMEEwNzBFNzY5RjQ5ODYwMEVFNEVCRjc3CisgMjU6IEJFRkFFMEI3N0U0MkEyRkQxODk1OEQ5RTQzMjAyRThBMzM4NTYyQUZGODMxNzQ2MUIwLCA0NDRDMUQ2QkRDMDI2QTAxMDEyQkIyQ0VFQUQ4OUMyQworIDI2OiAwN0U4NkQ0OUNGRkU2RkIwOEZERjQ0NTg0MDMzQUYzMjE0NDcwMDNEOEFEMzg2MkMwMEM5LCBEQTkzNTVBNzlCMjI0RUY2NjJEQTY1RjE5QkU0OTRBNworIDI3OiA5MTFCQjIyM0FDNkY2RTU0MDgyRkJGRURFQzMwMEQ3M0ZDQUY3MTVDQ0EzNTk0OTIxMkIzNzIsIDM0OTYxNjBBNDZBMjFEQ0RCNUE0QzE3OUYxNTlEODYwCisgMjg6IEFCQjU2M0ZDODAzNzE1RjU5QUEzNTQ2MEU5ODQ3MEUyRTk0RTQyNzA0NTVBQ0VCRjQyOTc2NDFCLCA4OTlDRkUxOTQ2QTA2MERFNjIwODc5QjhBNzQ2NDcxOAorIDI5OiA0N0Q5OEU4M0I1ODQ5Q0RFMTlCMTRBQkNGOUVBNkNBOTY4NEFCNDlBM0FCMzZCRDE0RjMyOEQ4MDhDLCA2RDc2Q0Q1RUZGNkQ0QUQzQjY3QTU2REYxRUI0MkUwNQorIDMwOiBDOEJGMEI3MUE5NTg4NEZGQjkzRDY0QzU3RTMyN0E0NzU0RUM1QTFFRTI2NjMyQ0Y4RTBCNkIyNkNCREUsIDJCM0JFNzg1MjYzQjFBNDAwRTU4OTMyNzNBRkQwOUFFCisgMzE6IDk4MDRENjY4Q0YyRDc1Q0E1OEM5NjcxRjY1NjMwRTMzOTA5MjY5Qjk1MTFBRjkxMTlCRTg4RUJCMzVGMDBDLCAzRERBMDI4QjFBMjMzOUNBODE3REM4RDkzNzFFMEZGOAorIDMyOiBGNkUwMzhBODJBMDlCQ0QyMEJBQUM3OTI2QjIyOTZCNzhGOUNCQTlERDEyQzQ5N0M0N0VBMDhEQkNEOENFQTNBLCBBMjAzRkMxRTY4RTIxQTUyRTcyMjI0ODkxQUMxMEVFMgorCitPQ0Ita2hhemFkICgxNiBieXRlIGtleSkKKyAgMDogLCBCREVERkY3QUEwMDcwMDYzCisgIDE6IDAwLCA2N0U5NTE1ODJENjZFRDkzCisgIDI6IDVGRUQsIDA5REM4QUVBRDcwNjczREUKKyAgMzogMjZBN0NDLCBDRTE0MzZDRTFFMzdENEIwCisgIDQ6IDNEMkJEMDYzLCA1NzRDMjQzOTVGMzE1MTFBCisgIDU6IDU5N0YxQUZDQjEsIDZGQkJFODIwQzZGMjZDREIKKyAgNjogMjAyREFFNDQyREY2LCA1OENBNkU1NzA2Qzk4NTJECisgIDc6IDdDMjBFREExOEU5NDQ0LCBBQUJGMERBMjUyQTFCQUFECisgIDg6IERFQzAyQkY3NkRGRDVCNzcsIEEwQTk3NDQ2QjgwRUFDQjYKKyAgOTogNUQ3QTQyRjczODQzRjkyMDBFLCBBMURENjAzMzcyRDEyNENCCisgMTA6IDBENDcxMEU0NTRDMTlCNjgzNjlFLCBDQzc4RTlEN0VBQTZBMzlGCisgMTE6IDEyNjY5NDE5MUJGMDlBMjlEQ0Y0MEUsIDc2QzlCODRGQTNFODkxM0YKKyAxMjogQTk0RUJCODZCRDMyNUI0RkExOTQyRkE1LCA2MTNERTMxMkRCMTY2NkY3CisgMTM6IDRGOTQ2MjM4NjQ2OUVBMEVGREMxQkZBRkU5LCA1MjQ3MjQ0RkQ0QkJBQTZGCisgMTQ6IDRFQjc5NERGQ0YzODIzQkRDMzhGQTVFRjNCMjMsIDBDMTIwMTdCNUUwNTgzOTgKKyAxNTogRDg3MDQ3OTc4MENDNUIzQjEzQTdBMzkwMjlBNTZGLCAwMDNEM0ZDRDMxRDQ5N0I1CisgMTY6IEE0N0JGMTIxOEFDODZBNjBGNjAwMkNFMDA0QUY1RTUwLCBCNEVDMjcwOTFENURDRDU4CisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L25vdGVzL29tYWNfdHYudHh0IGIvbGlidG9tY3J5cHQvbm90ZXMvb21hY190di50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZkOGRhNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L25vdGVzL29tYWNfdHYudHh0CkBAIC0wLDAgKzEsNDYxIEBACitPTUFDIFRlc3RzLiAgSW4gdGhlc2UgdGVzdHMgbWVzc2FnZXMgb2YgTiBieXRlcyBsb25nICgwMCwwMSwwMiwuLi4sTk4tMSkgYXJlIE9NQUMnZWQuICBUaGUgaW5pdGlhbCBrZXkgaXMKK29mIHRoZSBzYW1lIGZvcm1hdCAobGVuZ3RoIHNwZWNpZmllZCBwZXIgY2lwaGVyKS4gIFRoZSBPTUFDIGtleSBpbiBzdGVwIE4rMSBpcyB0aGUgT01BQyBvdXRwdXQgb2YKK3N0ZXAgTiAocmVwZWF0ZWQgYXMgcmVxdWlyZWQgdG8gZmlsbCB0aGUgYXJyYXkpLgorCitPTUFDLWFlcyAoMTYgYnl0ZSBrZXkpCisgIDA6IDk3REQ2RTVBODgyQ0JENTY0QzM5QUU3RDFDNUEzMUFBCisgIDE6IEY2OTM0NkVFQjlBNzY1NTMxNzJGQzIwRTlEQjE4QzYzCisgIDI6IDk5NkIxNzIwMkUyRURFQkQ2M0Y0MTRERDVFODRGM0FGCisgIDM6IEQwMEQ3REE5NjdBMjg3MzU4OUE3NDk2NTAzQjNEQkFCCisgIDQ6IEI0M0MyNEMwQTgyREFBMTJEMzI4Mzk1QzJBQkQ3Q0FFCisgIDU6IDlCOTAyQjY2NjNCNUZFREM2RjlEQ0U3NEIzNUI5MUYyCisgIDY6IDA2QTk2NzhDNjVEN0NFMjI1RTA4MkVDQTMxNzg4MzM1CisgIDc6IDdENjc4NjZDREIzMTNERjY1REVEMTEzREIwMkQ2MzYyCisgIDg6IDI1OUUyOENGM0U1NzhBQzQ3QTIxQTc3QkE5RUE4MjYxCisgIDk6IDMyRjIzQzhGOTNFQTMwMUM2RDNGRTA4NDBDQThEQjRCCisgMTA6IEMyQjA2Mzg4QUQ2RjhDNDNEMTlGRTRGNkE4RUQyMUFFCisgMTE6IEZBODYyMjQ4NURCMkY2MkY4NEZGNDZFNTMyQTFBMTQxCisgMTI6IEYzMTJEOUIyRTYyNzI1NzhGNDA2QjY2Qzc5RjMwQTBFCisgMTM6IDdBNURFMDZCMkJGQjc1QURBNjY1RTk2RjY4MEFDMDk4CisgMTQ6IEMzQjAwMzgwRjBCRDhFMkY1QzlERDk5NDVFMEYzNkVFCisgMTU6IERERDg3OTc0QTVGQjJFN0E0NTE0MjQxRTk0NTI2QjVCCisgMTY6IEFEMjRGQzQ3QTBGRUE4NEM1NDY5NkRFOTk3QTk0RjRCCisgMTc6IDc1Mzg3MTNEOEFBMkFFMzcyNjMwN0VGRjA4N0JCRjVFCisgMTg6IDc2MTlBNTJCNEMzNEE5ODQ0MDgxMkY1RjI4RjhEQzRGCisgMTk6IDdFNzk3Qjg4NDY1NTQ4ODg2MjJDQzVFNDAwQjJGQTQ0CisgMjA6IDYxRThERDNFMDkxNDVGNTY1N0RCNEI4RjdCRDJEN0Q4CisgMjE6IEZEQUUyQTNGRTYwRERGMTg3MUMyNjEzQTI5M0FCNkYxCisgMjI6IEExODZENkVGRDEwREZGRDJDMDg4NDgwQjBBNzg0MTg1CisgMjM6IDMxMTlEMzM3ODY1NjE4Q0RBNTVDMDZGQjk5MjQyN0NGCisgMjQ6IDQxM0UzRUFEN0UzRjE2OUEzN0M0OUY5Q0E5MkUyMzVFCisgMjU6IDM3QTU1QUYyMjM3M0I5QTFFMkY4MzY4QjJGQjk5MkNBCisgMjY6IDQ5NDFGNjA0QzQwRUVFRTFBMTZDRkUwNzNDMTJEMUZFCisgMjc6IDNFOEY0QTA4NzZCRjEyQTJEQ0E4NzE1N0YxNURDODg0CisgMjg6IDVERkFFMjkyRDhFRUIxM0Q4RkU1NzI1RTVEMTY5NzQyCisgMjk6IDU5MTYwNDU1RTBDMEIzNUQ5NTBCQTY3Qzc3RjlGQjA1CisgMzA6IDVBQzBENzM2QTA2QTdERDE0NkIxMzdBREVFNzhFRTA2CisgMzE6IDBDQTExNzhGMjhCOTUzMDQ1RUU3NkUyRTc2MDAzNkNBCisgMzI6IDAyNTYxNjIxNUY4NzBEMUVGODM4QUQxRDJBRTBDNjQ5CisKK09NQUMtYmxvd2Zpc2ggKDggYnl0ZSBrZXkpCisgIDA6IDJDRkI1REU0NTFGRkU4Q0MKKyAgMTogQTVBQzMzOURCNDREMDIwQworICAyOiBBM0NFMENGNjIyNDk0NDRECisgIDM6IDMwNzZCNzEyOUNFM0Y2QTEKKyAgNDogOUUwOTFBNjM3RERGNzBFMworICA1OiAyNzUxOTlBQjIwQTVGMDlDCisgIDY6IENERURBOEQxNkE0MDFFNjIKKyAgNzogRkM5ODA1MTZDRjVDOUUzMAorICA4OiA2NTlEMEIzMUQyMUI2MjJCCisgIDk6IDgzMDY4NDdCNUU3MkUwMTgKKyAxMDogN0FEMDI5QkJGMUQyOTE5RgorIDExOiAxMzMxODE0MjVDNjgwOEM5CisgMTI6IEZDNUFDNjBFMzY3RjQxM0EKKyAxMzogRTBERjhCQ0NGMEFEMDFEOQorIDE0OiBBQzUwMTUzOThGQTY0QTg1CisgMTU6IDFGMDY4RjIyQUZGRUNFRTEKKyAxNjogOEU2ODMxRDUzNzA2NzhFRgorCitPTUFDLXh0ZWEgKDE2IGJ5dGUga2V5KQorICAwOiA0QTBCNjE2MDYwMkU2QzY5CisgIDE6IDFCNzk3RDVFMTQyMzdGMjEKKyAgMjogOTM4MzAwQzgzQjk5RDBBQworICAzOiBGOTg5Qjk5QjNERTU2M0M2CisgIDQ6IEY2NURFQTJBNkFENDVEMUUKKyAgNTogMURCMzI5RjAyMzlFMTYyRQorICA2OiBDMEMxNDhDNEVFOEI0RTFGCisgIDc6IEQ4MkIzODdENURGRkUxRkIKKyAgODogMUQwMjdBNDQ5Mzg5OERGMgorICA5OiAxOTYzNjlGNkIwQUY5NzFBCisgMTA6IDJBMzdBMjY1NTE5MUQxMEEKKyAxMTogQkQ1MTRCRTMyNzE4RUI0QQorIDEyOiBCNERCQzk3OEY4RUU3NEVECisgMTM6IDhBQ0NBRDM1QzNENDM2QUUKKyAxNDogNzNBQkRDMTk1NjYzMEM5QgorIDE1OiA3MzQxMEQzRDE2OTM3M0NFCisgMTY6IDIzRDc5N0IzQzc5MTkzNzQKKworT01BQy1yYzUgKDggYnl0ZSBrZXkpCisgIDA6IEUzNzRFNDA1NjJDM0NCMjMKKyAgMTogQjQ2RDgzRjY5MjMzRTIzNgorICAyOiA3Q0I3MkIxRDMzNUYwNEIwCisgIDM6IDk0NDU3Q0JDOTdCMzEzMjgKKyAgNDogNTQzRDBFREZDRENEN0M3NgorICA1OiA1MTY0RUZBODQxMkVBQTVECisgIDY6IDEzQ0EwNzE3RUY5NUY5QTcKKyAgNzogMkFBNDlBN0FBNzcxOTcwMAorICA4OiBDOUU3QzU2MTI1QzNEOTBGCisgIDk6IDJCRTNFMTVGRTU4NjQ4QUEKKyAxMDogNzdEMEI5MDM3MkQ2RDBGRAorIDExOiAxNzQwOEY2MkVDRDYyRjU3CisgMTI6IDc4NjRFRkZBNTlEQzA1OUIKKyAxMzogMzIxMkU3NkUyNUU1REVBOAorIDE0OiBFMjQyNEMwODNDREU1QTZBCisgMTU6IERFODZGRkRCREE2NUQxMzgKKyAxNjogODU0ODJDMjRENjFCODk1MAorCitPTUFDLXJjNiAoMTYgYnl0ZSBrZXkpCisgIDA6IEUxMDNCRDhCQTQ3QjdDMUMwMTBFMTU2MTcxMkU2NzIyCisgIDE6IEU1MUFFRUNGRUQzQUY0MDQ0M0IzQTFDMDExNDA3NzM2CisgIDI6IEZBNjUwNkM1QUJFMDMzODFCMDQ1RDI4RDFEODI4OTY2CisgIDM6IEZBQzQyMzdGRkU3NzcyRTIyOTlEM0Q5ODNCQjEzMERECisgIDQ6IDNBN0UyNEQ0MTEyMUE1RDRGOTZGQ0VDRjBDMkE0QTEwCisgIDU6IEFBNDQyOTFFNTUwMEMxQzhFMUExNENCNTZFNEY5NzlBCisgIDY6IDRCOEZEQTZEQTZCMzI2NkUzOTExMUY0MDNDMzE3NTRFCisgIDc6IDRERjVGMUExQzhFQkM3RjU2RDBEMTJFRUI2M0ZGNTg1CisgIDg6IDQ2QTZEREU0MTkzNTVFREUxNEQzMTA0NUZDQTFCQTM1CisgIDk6IDcxNzU2RDREM0RGNTk1NzhCN0Y5M0ZENEI1QzA4MTg3CisgMTA6IEFEQTI5MkExOUY4NjM2QTAzQThCQzU4QzI2RDY1QjBECisgMTE6IDcwMzE5MERBRjE3RjhEMDhBNjdBMTFGREYwQzJBNjIyCisgMTI6IEQyQjk0Q0FEMUFGQzVDRDAxMjU3NTk2NEQxNDI1QkU2CisgMTM6IDQ1RkQwMDY5RkNBNkY3MkUyM0U0REI0MUFBNTQzMDkxCisgMTQ6IDM2RjY1MjYwMEY1QzlGMjI2NzIxNDAwQTcxOTlFMkJBCisgMTU6IEU4Q0M2Mzg5RUNGOEVGMURCQjkwQTBGRDA1MUI3NTcwCisgMTY6IDgxMjU0NDZCOTc1REJEQTc0MkE5MDMzNDBENkI5NkM3CisgMTc6IDAwQjU1RTQzOTlFQjkzMEU1OTJGNTA3Rjg5NkJGM0RDCisgMTg6IDMzRTU4RjQyQTQ3Qzk1NDNBODUxRDZDQTkzMjRGRUUwCisgMTk6IDlGMjhGREVBM0VDN0Y1MTUxMjhGNUQwQzBFQjY4NEM1CisgMjA6IEFDMURBRjZDMDFBQTI4QkNDMEE4MTkxODlGQTk0OUQ3CisgMjE6IEQwNTMyQjVGNTRBMTc5NDQ0RDA1MkE0RDJBRDZFNEY5CisgMjI6IDU4QjgwQTY2NTQ5NDA0QzdCOUY2NEQ1QUUzRjc5OEFCCisgMjM6IEQwRDZENTg2NDc3RjkyMzExRERGNjY3RTA3NDlEMzM4CisgMjQ6IDBERkMwRkFBNjdGRjExNDM5OENFOTREMDY4OEFFMTQ2CisgMjU6IEUxNjNCOEMwMENGNUNDOUZBMjNBQ0FDRDYyQjUzRDY0CisgMjY6IEFDRTkyNzA0NTZBRjlCRDM4OEJBNzJFOTg4MjVDRkU4CisgMjc6IDQzMDJFRUQ5QkFBMTlDN0EyOTY1ODVFMjNBMDY2QTQ0CisgMjg6IEIzRUVBQkVGQUIyNUM3NDc4NDE5MjY1NTY0NzE1Mzg3CisgMjk6IDlGMDYzMEFERTlDNzRBQjI5ODFENjNGM0I2OUU4NUJGCisgMzA6IDEyMTVBOTQ0NkEyNzVDQ0UyNzE0Rjk0RjNDMjEzQkI3CisgMzE6IEFGNDNEN0Y3NDhERTBFMzQ1OERCOTcwQkFDMzdFOThECisgMzI6IEJGODcxQUM5RTg5MkNFMERDRDdDOEM3QURERDg1NEM2CisKK09NQUMtc2FmZXIrICgxNiBieXRlIGtleSkKKyAgMDogQTJDOEM3RkVBNTUyOUQwMUMzRkY0RTkzNTlFRjc0RjQKKyAgMTogRUFCODcwMjExMThGRjI0RkU3OUI2OUFCQ0NCMTRBOEYKKyAgMjogNzg5NTY2RjQ2N0JBQTY4RjRDQzNDNEI2MTkwMUQ2RDQKKyAgMzogMzY5RjQxRUVBRjdENjI4RjlFMEQ3N0JFNDNCRkMxRDIKKyAgNDogREM0NkEyMEUxRjM2RjQ1MDA2RUQ1QjQzQkVDMjBEQTYKKyAgNTogOEYxNTBDRTM0RjU3QkJBMkU2Q0UzNDMxQjc4RTRBQ0QKKyAgNjogNjFDRDE1NDQ3OEJFMjBGMzNCMjZDRDhGQzU4MDkxQTUKKyAgNzogNEU2REFBNTc1Q0YyOEYxRjQ4QjI1NjI2MkI3RDU1OEMKKyAgODogRDIxRkE0RjE4NTk1NzFEQjkxRTkyNzY3QzU0ODdBQTIKKyAgOTogRTNEMDA5REM3RTcxRkJCQjAzMEI4RkYwQjU0NEEyQzkKKyAxMDogMDk0QzIzNkVBNDhBQkY3REJBRTVBODhBQTNERTA3RDcKKyAxMTogMDBDNDAxOTk2RjgyMjQzNTk1NjY2NjBBQzFDRURBQTEKKyAxMjogRDU4MEVDNjBGNzEyNTU4RDg3NUYwMTY0M0Q5NjY1M0YKKyAxMzogODQ4MjI5ODAyN0M3QjRENTk2OTc4N0ExREIxQjFGMkYKKyAxNDogQUI3MjZBRTNEQTk1Q0IyNDJFNjNFRjg3NkE0QkM0NDYKKyAxNTogRDY2OEVENDkxOTAwM0Y1RTQ1NTkwNjYzRkFFRDQxREEKKyAxNjogRTRDRkZEN0UwRTdCMTc2ODY3QzM4NjAwMTg0OUZENkYKKyAxNzogMzdCM0M2REVGQzU1NzM4NzkwMDZEMTVGOTgyQTM5N0MKKyAxODogMEFCODg0N0VFNkE0MUEwRTk2MDA4MEVGMEQxQkYxQzUKKyAxOTogMkM5NEZDQTJBNjg1RjI3NkE2NUVEMjg2QUUxMkZEOUYKKyAyMDogMjMzODMwMzIwMzJEN0I1MTY1QTMxRUNBMTU2REJEMjMKKyAyMTogRTFFRUNGQjNENjcxREY2OTRGRkIwNUFFNDMwNUFENEMKKyAyMjogQTBGNkNBOTlCOTZDRDFFREQwNEM1MjgyOEM4QTRENzQKKyAyMzogMTJENkI3MDUzNDE3QUYzRTQwN0VGRDZFRTFDQzM4RkUKKyAyNDogQTU2NkQxQzM5QUU3QTFBMEE3N0Q1QTFGNTZDNUZBQUIKKyAyNTogODFDOUZBRUNFQUVBMzI2MTQwQUZDRDU2OTY2OEY2NjkKKyAyNjogNkEwMEJGMUQwREM4OTM4NjgzNzhFNDM0N0NCNEExQjkKKyAyNzogOTg4NDI5NTZEQkU3QUZCMUJGNDlDNDY0OTdCRDU0QzcKKyAyODogODhFRkNENUExNjQ0Qjc1QkIwQjNGNUREMzM4ODQ5Q0UKKyAyOTogNzdFQzYyQzI3OEM2MTE2M0IxQkVDNTk1QTExRjA0N0EKKyAzMDogMTQ3NDI0RTgxN0RDNjk0MTNDQzY1N0UwQ0IyOTJGN0YKKyAzMTogQTI5NDZDQkI5MTA3NDNFRjYyRDhBM0M3MzkxQjlCOUIKKyAzMjogMDBFRURBNTU1MjBCOEE1Qjg4Qjc2NDg3RTgwRUI2RTEKKworT01BQy10d29maXNoICgxNiBieXRlIGtleSkKKyAgMDogMDE1OEVCMzY1RkNDRkREOTRFQkE2QkU0MkI2NjU5QzQKKyAgMTogMTdEQTU4MDkxN0QxNDdEMTBDQjczREI2ODAwQjBFNTkKKyAgMjogM0YxODVDQzE1RUYzMzI4RDNFMDc1NjY1MzA4QzA3QzgKKyAgMzogNTcxMkE5N0FDQzlEMDhGRTlEMjA4N0QwQ0ExNkIwQUQKKyAgNDogOTA0MjVBOENDMUMwMjZEREQ4OTZGQzIxMzFBRjY1NEIKKyAgNTogMzBBNDNENEZFQUU3MUY1Mzk2MzA4QzE2REEwODFCNEEKKyAgNjogNjgzOUZFRjYwNTcwNEQ0OUYxQTM3OUE5RTk1OTVFNkYKKyAgNzogNTZBOEYwNkRGRUU1NDM5NzFCMzUxQjA3NDMwRTIwMjYKKyAgODogMzZERDBFNEI1NUM1MzE0RjlGMjc1M0Q3RUI2RjA4NDkKKyAgOTogOEUzMTkyNDlBM0NENDU2NDYwRjQxMEY1MThGOENFREIKKyAxMDogNDYzOTc4QkUyQTA2M0MyMkU3MURDNzE1MjA3MjM1MTcKKyAxMTogMUI3MzVFNDVGRDNERjYzNkUwQTYxMDRENEEyRTlDQjgKKyAxMjogNjI4QTgyMjEzMTQ4QUQ5NzkxMTUzRDVBQUZCRERGREMKKyAxMzogMjFBRkRGMDhBMzZBREI2NjU5QjY1NkM4RUEwODAwRTUKKyAxNDogRTVDM0U1ODgwM0REQkUxNzRFMEQ0QzJCODE3MUFFRjAKKyAxNTogRkM2OTgxRjJCNDM1OUJBMDU5ODhENjE4MjJDMEZBODgKKyAxNjogN0IwMzQ5OEZBRkIwNEE2NTQyMjQ4ODUyMjI1RjlEQUUKKyAxNzogOUIxNzNFOTFFNTlBOTQwMTg2RTU3QkI4NjdCODMwN0IKKyAxODogNDcwQkYyRUU2MTRDODQyM0FBM0ZERjMyM0YxQzEwM0UKKyAxOTogNkU2NjRBRkRGRDgzMDY1NDdCQkVEQTAzNkQyNjdCNzkKKyAyMDogRjYxQUVDMTE0NEMzREQ2NDYxNjlFMTYwNzM3MDBBQzYKKyAyMTogQUU1MDNCMTM5NzA3QUZBNDk0RjdGMkRFOTMzRUU4MUEKKyAyMjogQTBBOEJERDRFRDBEQ0FFNEE4RTFEQ0VFNTYzNjhGRjAKKyAyMzogNDYwQjgyMDc5MzBEQTQzNEFFNkFGRUNDMzA1RDlBMjYKKyAyNDogN0YwM0Y4QzdCQTUzNjVDQzY1Rjc4NjRBNDI2OTNCQzgKKyAyNTogMzE0NDg4NDlENjE5MDQ4NDE5MkYyOUEyMjE3MDAwMTEKKyAyNjogQkRBOTQxMDE5Qzc1NTUxRDg1OEY3MEZCMTM2MkVCMjMKKyAyNzogMjg4MENCM0U2MjQ0N0FFOEVBQ0E3NkMxNzk3MUJCMTgKKyAyODogRkM4RDcxMEZBMzk5MEI1NjM1N0U2MUMyQTMwMkVCODQKKyAyOTogNzkzQ0QxNTM0OEQ3REZGMzAxQzQ3QkM2RTYyMzVFMjIKKyAzMDogNkZCMENFNjlBMTVBM0I2QTkzMzMyNEE0ODAwNzdEMzUKKyAzMTogQzI0RkNBNURENEFFMERGMkJGRjE3MzY0RDE3RDY3NDMKKyAzMjogREM2NzM4MDgwNDc4QUY5QUY3Q0E4MzMyOTUwMzFFMDYKKworT01BQy1zYWZlci1rNjQgKDggYnl0ZSBrZXkpCisgIDA6IDcyNkZFMkRENDBBNDM5MjQKKyAgMTogMkExMzhCNjVFQjM1MjYyMQorICAyOiA5NTg4QTFCNTNFMjk2MTZDCisgIDM6IEMwMjVERUZERTFBNTk4NTAKKyAgNDogNzNEMDYyRjFCNkQ4RTAwMworICA1OiA5NDQ1OThBMkZDOEEyRDc2CisgIDY6IEIxNzZDMjVEOENBRkZDOTgKKyAgNzogMTRGMDUwMTRERTZBMDkwQQorICA4OiBBN0I5ODQ3QjJDRTIyRDBGCisgIDk6IEZDRDcxMzEwQ0JBQTNBNjIKKyAxMDogQkZGMDBDRTVENEEyMDMzMQorIDExOiBCRUUxMkEyMTcxMzMzRUQ1CisgMTI6IDMzM0ZEODQ5QkVCNEE2NEEKKyAxMzogRDA0OEVDN0U5M0I5MDQzNQorIDE0OiBGMDQ5NjAzNTY2ODlDRkVGCisgMTU6IDlFNjNEOTc0NEJGMUI2MUEKKyAxNjogN0M3NDQ5ODJGMzJGODg4OQorCitPTUFDLXNhZmVyLXNrNjQgKDggYnl0ZSBrZXkpCisgIDA6IEU5NjcxMUJBMzdENTM3NDMKKyAgMTogN0RDRkYyNkEwMzUwOUZFMQorICAyOiAwQTIwRUYxOUM4RUU5QkYyCisgIDM6IEZFMjg4Mzc0OEE2OTYzQ0YKKyAgNDogNTU3MDYwMTk1QjgyMEExOAorICA1OiA3NzFBNzkzMUZCQkU1QzBGCisgIDY6IDZCREJDRTVGOTZDRjkxRDgKKyAgNzogRjNCOTI0Q0NFODcyNDU5NQorICA4OiBFQzcxOTEyODZEODNDMkMzCisgIDk6IDk0RjU1QjE5QkI3QThBQzEKKyAxMDogMjE4OUY0RjJCMDZBOENBNAorIDExOiA5OTg1M0RBRUJDQTMzQTQ2CisgMTI6IDY2RUFDMzdBMDMzODAyRDcKKyAxMzogODQ1RDdBQTg2NkY4QThBRAorIDE0OiAzM0E4NzRERkVDQUMyMkFDCisgMTU6IDYzREQ5RjdBN0YzNjgzREYKKyAxNjogRUFDMjc3RDk1MTY3NkM0NAorCitPTUFDLXNhZmVyLWsxMjggKDE2IGJ5dGUga2V5KQorICAwOiA4MDM3Qjg5QUYxOTNGMTI5CisgIDE6IEZGMjMxNEU4N0JBNkFGRTEKKyAgMjogQzMyNDNERjg5NkI2MUQ4NQorICAzOiAwRjYxQzcxNUNFODIxQUI4CisgIDQ6IEVCRkRDNkE5Q0ZEMkY1QTQKKyAgNTogQUI2NDk3RDdBRjJDN0ZGRgorICA2OiBDOTIwQ0VFQjdDMTgxOUMyCisgIDc6IDNFMTg2OTUxQjU0NUE3RTUKKyAgODogNUVBMzZBOTNDOTRBRjRBQworICA5OiA2QTJDNTlGQUUzMzcwOUJFCisgMTA6IEJGMUJBRkFGOUZDMzlDMTkKKyAxMTogNjlFQjZFRjA0NjY3N0I3QworIDEyOiBDRERDRUU2QjIwNDUzMDk0CisgMTM6IEEzODMzQkQzRkVENjg5NUMKKyAxNDogQjZDMDVFNTFGMDFFMDQ5QgorIDE1OiA5MEEyRDBFQUI3MzlEMzlCCisgMTY6IDA3QkY2MDdBMTYxRDBBNjYKKworT01BQy1zYWZlci1zazEyOCAoMTYgYnl0ZSBrZXkpCisgIDA6IDVFOEIxMzdBMzk0NkE1NTcKKyAgMTogMDIyOEZBNjZCMTNGM0M3RQorICAyOiBBNkY5QkJBRkYwNTBEQ0RECisgIDM6IEY3NTg4MEY2ODRBNzk2Q0UKKyAgNDogRTBBRUZCOEUzMjA0MEVCRAorICA1OiA5RjY1RDY1OEI4NkQzMTBGCisgIDY6IDNGQTUyODA0RkI0NkNDQUEKKyAgNzogMkY2RDEyRDE5OUZDRDJGQgorICA4OiBDQjU2QUY2MEFGQjREMkJCCisgIDk6IDhFNkYwRkY2RkREMjYyRkQKKyAxMDogNDkwMjQ1QkUzQ0NDRURFMgorIDExOiBFRkQzMTlBRTQ2QzczMDA1CisgMTI6IDQzRTAwRTU0NUM4NDg5OTUKKyAxMzogMTA0NDRCNDFFQ0ExNUVCRQorIDE0OiA1MjE3NzVDMzg5RDVCRTcxCisgMTU6IDlCNjgzRUY4QjA5N0ZFQkEKKyAxNjogM0M1RDc0NkVFRDA5NTMwQQorCitPTUFDLXJjMiAoOCBieXRlIGtleSkKKyAgMDogRjAwMUZFOUJCQzNBOTdCMAorICAxOiA4RjhEQzlDOTUyODk3RkJECisgIDI6IEVDODJFQUQxOTVBQUMzOEMKKyAgMzogNTNERDUyMjY5QjE5RTlBNAorICA0OiA5Qjg2RjY0QkY3MkEwNjQ3CisgIDU6IDY2NEE4OEEyOUYyODk4QzYKKyAgNjogQUZFQzNGNzFDMTQxNTY2NgorICA3OiA5QkExRjJDMUEyRTc2NUY5CisgIDg6IDQwMkExMjEyMDkwOEI0MzYKKyAgOTogMDNFQ0NENEM2QUY0NDE0NAorIDEwOiBFOENBMzUyOUI1RDlENkZDCisgMTE6IDk1MUVFMTA3NzlDQzU4NUQKKyAxMjogQjkwODNDQTg4RTdFODE5QgorIDEzOiBBRkZCOUU4ODREQUNDNUI3CisgMTQ6IEU5NDJFOEJDMjQxMzQzRDYKKyAxNTogOUIxOTA0ODkwOTEzNDRGQgorIDE2OiA5MzMwQTlFMDU1NTRBMTVBCisKK09NQUMtZGVzICg4IGJ5dGUga2V5KQorICAwOiBDOTA4NUU5OUQ3NERGMDFECisgIDE6IEZBQzg0RjBFRkJFRjg2MzAKKyAgMjogQzM3QzVGRUNFNjcxQ0YxNgorICAzOiA0NUIyQ0JFRTg3MDFBNUIxCisgIDQ6IDUzNjY1RTFGMDI0RUIwMDEKKyAgNTogMzU3MTIzQ0VERkM5RkY2MQorICA2OiBCRDJDRkQzM0ZCMUY4MzJCCisgIDc6IDFBQUE5RDhDOTEyMEJEQkYKKyAgODogRUI5RjU4OUFFOUQ0RTc4RgorICA5OiBDOEY5RDJBQ0U2OTE5MjJECisgMTA6IDgxRUQ2RjM2MTFEREMwRkQKKyAxMTogMjk2NUFCRUFDNDY4MzlFRQorIDEyOiAyMjA4QjFFMDk1RjdBRTJFCisgMTM6IEMwNDE0RkU0MTgwMDExM0UKKyAxNDogNjUzQTI0MTE5Q0Y0M0Q5NworIDE1OiA3RkI3Q0UwODYyOTU4QjM3CisgMTY6IDU1MDk3ODE2QjEwQzU0OUIKKworT01BQy0zZGVzICgyNCBieXRlIGtleSkKKyAgMDogN0YwN0E5RUE4RUNFREY5RQorICAxOiA0RTJBNjUyRUI1RkJGNUY4CisgIDI6IDRGODRFMzc3OUFDQ0I5RjUKKyAgMzogNzEzNEFCMzQ2MzExNURDNgorICA0OiA4MjMyN0JFOEVBMkQ3RTBCCisgIDU6IDI0OTUwQjlDMTREODdDRDkKKyAgNjogQjI1QTA5N0JCN0UwRTE4QQorICA3OiBFRDUxQkFFNTVFRDkyNUU3CisgIDg6IDU2Qjc5RTc2NDQ1NTY5NzUKKyAgOTogQTY1QkQ5OEU0RDRFMzFFMgorIDEwOiAxMTE0NUJCNTE1MTQ0ODJECisgMTE6IDM5NzQ4Njc4N0U2NzZCQTYKKyAxMjogQkQxRjZERUJBRjZEOUFFRgorIDEzOiA1Q0MzOTIxRjdEQjgxNUNGCisgMTQ6IEIwQzBFNjBEQTVGNzI3RjMKKyAxNTogRjg2MzdBRUVGRjEwRjQ3MAorIDE2OiAwRUExOTUzMUQ0MjcwNkVBCisKK09NQUMtY2FzdDUgKDggYnl0ZSBrZXkpCisgIDA6IDc0MTNEQ0RCOUYwQzMxMDAKKyAgMTogNDIzNzk5RURGMTQ3MkI3OQorICAyOiAwMzg1NkYwQ0I0RjExNjA2CisgIDM6IEYxNTJBRTYzNjA4MTNERTAKKyAgNDogODUzOTk4QkQ5ODBBRDE0NgorICA1OiBBRTZDM0Q2NjdEQjhCNDE0CisgIDY6IEI1QTQ5ODZBMzRCREUyMEYKKyAgNzogRTVBQkU1Qjk3OTc5ODk0MgorICA4OiBCRUU4REZFRDQ1NTVGNDA1CisgIDk6IDZCNTMzOUU5NTJBRjYxQkUKKyAxMDogNUU4NjdDRjM0RDlDMTE0OQorIDExOiBGOUM1NUNCM0JDNjU1RTA4CisgMTI6IEVBMDlBMjkyOUFDN0Q5MTUKKyAxMzogQ0U4RUIwRTQzNzBFMTkzMworIDE0OiA3NDlBNDI0QjJBQTkxQjk4CisgMTU6IDhEREE5M0MyQjgxNEQ1RDEKKyAxNjogRThCMEIyMTlENENCNjk5QgorCitPTUFDLW5vZWtlb24gKDE2IGJ5dGUga2V5KQorICAwOiBFQzYxNjQ3QjI4MUM0N0MxQjQzRjk4MTUwNjRCRjk1MworICAxOiBCMTAwQjFCNkNEOTZEQ0VEOEY0N0E3N0U3MDY3MEE5MgorICAyOiBBOTZDREUzQzQ4ODMxQTZCMEE1QURGRUNBNjM5OUJEQgorICAzOiAxNEU3NUU3Q0FEODQwMjA4ODM0OTE4QjI5QTVENDQzMAorICA0OiA5NTc3MDgzNzEzQUU2RTQ0RUVDOTg3Qzc3QzkzQzA3MgorICA1OiAyQTczOEMwMjg0MUU0NjEyMzhDMDJGNUNGQzhFNjZBNgorICA2OiBBOTAxMzI3RTQ1MUJFMEQyRDlERUM4M0RFRUE5QTAyMgorICA3OiA1RUQ3RUUxQkUwNEE2NEE2ODlEMTVGNjk3MEE4MjFBNgorICA4OiBCQTA1M0UyNEZDRkQwMkM3MzFBOENGQ0ExOUVFNjZBMAorICA5OiA1NzEzOUNBOEM5MTA3MjU1NUIyOUY4NUExOUUyQzg0RAorIDEwOiA0NTg1RUFDN0VGQjg0ODY5RkQ5NkVFN0E1RkREMzUwQgorIDExOiA2MkFGNkM0MTVDQTczRTU0RTgyRUEzMDYyNTRDMUJERQorIDEyOiA3NTMwNEY5NzI0QkQzNjRGODQzNzFFRTE1NEY1MjEwRQorIDEzOiA3RkU1REJDRUU4MjY3NjA0MzQ3NDVENDE3NDUzMTgyQgorIDE0OiBFQzk4REEyQTU4MEU5MTMxMjE4RDFDREU4MzU0MjNENAorIDE1OiA2MzFCRDlFQUZEMUFFNDQ1RjJDMUMzNUUyQjQ0MTZFRAorIDE2OiBDQTJEOTAyQTFEODMzODhGRTM1QkFCN0MyOUYzNTlCQQorIDE3OiAwREJGMEFGN0ZDQkVFRTIxRkI2MTU5QzBBMkZGQ0Q0QworIDE4OiBCRDdDRDJDNDkyNDEwMzJEQTMzQjE5NzVFRTJFRTk4MgorIDE5OiBCMzBCMDkwRUU4NjI2RDc3RDMxMEVEQjk1NzU1MkQ0NgorIDIwOiA2NEY2MDhBQzU3MDdDMzgxQUM2ODc4QUEzODM0NTE0NAorIDIxOiAyODUxM0NBNzc5NUIyM0EwMkIzN0RDMzczMjQxM0QyMworIDIyOiA5RjQ0MDcwMDA5NDUxNzg0N0U5RTAxM0M4OTE1QzQzMworIDIzOiA4Q0E0ODNGMzEzRDIwQkZFN0UwQzA4OURBQTQxNDVCRAorIDI0OiBGQTQ0ODcyNzQzRTIwRTVFMEEwNjlCM0M0NTc4REI1MAorIDI1OiBGNkRFOEZGQkVDRDUyQ0MxRjIxM0NEOUU0MDZERjNCQworIDI2OiBCOTcwMkI3RTg0NjczNUEzRENDMDcyNDI1NUY4OEZFQworIDI3OiBBMUREQUZFRDJCMTczMkM3QkE4OUMyRjE5NEFGMDM5RQorIDI4OiAyNTQ5QzVGMEUzMEY4RjQwMDI0MzFEMkMwOTg4MDVCOAorIDI5OiA1MkUzODM2MTgxQkY1QzlCMDlBNTA3RDUzMzBDRDE0RgorIDMwOiAwMUM1NURDQkNDRkQ5RDdBNEQyN0JERTJBODlBQThFRgorIDMxOiAzQ0Y3MjFBMENGMDA2NzAyQ0RBOTFGMkZGM0U0RDVFMworIDMyOiA2RDI2NEI5MDY1QkU5OEMxNzBFNjhFOUQyQTRERTg2RQorCitPTUFDLXNraXBqYWNrICgxMCBieXRlIGtleSkKKyAgMDogODRFREZBNzY5MDQwNjAzQworICAxOiA3REE1OEE0Q0JENjQyNjI3CisgIDI6IDExOEY2MDExNUNGQzgyMjkKKyAgMzogQTdGNzM0NkQzNERCMkYwRQorICA0OiAzNTYxNUNDRDUyNkNENTdGCisgIDU6IERFNDcxNjAxQTM2NjA4NDQKKyAgNjogMTVGQ0NFNkQ2RDg4M0QxRgorICA3OiBDNkY2OTQ4NjEyMzMxNTFCCisgIDg6IDNCNzYyQjM5N0YxNkU4MDcKKyAgOTogOTc2QzZBQjU5RkIzQUIxMgorIDEwOiA2ODEwNzkxRjJDNTk1OTYxCisgMTE6IDdGQTM0NzgyODY5MTdGMTcKKyAxMjogNzNERUU0NEE1MUM2QjYxMAorIDEzOiA4OUVFOEIyNTNCMUFDRTgxCisgMTQ6IENERjI1ODZBNTZDOEEwQjUKKyAxNTogRUQ5MUY5OERBOThGNDJDNAorIDE2OiBEOEQwRkE1Q0U5NkIwOEJGCisKK09NQUMtYW51YmlzICgxNiBieXRlIGtleSkKKyAgMDogRTY3MjYxN0NBQTFFNjQxQzBFN0I0QjRDQzQ3ODc0NTUKKyAgMTogQzBDMTZFOEZENjM5MDdDMDhBOEFCQkI3QjczMzc2RDMKKyAgMjogMjNGOTdDRUQ1NDkzOTM2MTgzMDM5NjIyNEE3QkREOTEKKyAgMzogN0ZEODdERUE5RjA1RTA3MjEyRERGNjEyOTJEOUUxM0QKKyAgNDogOTI5QTExQTREMDk5MUE2NDQ2QjEwNTE5MjZBNjA0OEQKKyAgNTogNEVCNzRGMUNDMDE1MEQ4NjEyNkJDNkZFMUZDODI1M0QKKyAgNjogMzNDMkMzQzA3MkQwNUJCNkQ1NEY4NzU3OUMyM0IxMTYKKyAgNzogREUzNTAxODFDOUU5MEE3OTg3OTgxM0E2MDlCRTc3RTIKKyAgODogREI1MTlFQjlFRjBFMTU0RDlEMjQ4NzM0RkQzRDM3MjQKKyAgOTogNEY3RjJFNkQzRkM3MkJBOTRGRTI0RUMwQUJCRjRFNjYKKyAxMDogRDY0NjM4OURCQ0VFREQ1OUVCQjZFOEYwOUM0MjI5MzAKKyAxMTogODU0NzY1OEFFMUNFNkE4QjhEMDEwQTFFMUZFQTdBRjQKKyAxMjogQzlCRTJCN0YzNjMwRUZERkJEM0FFQTZBMTA4Qzg2RUEKKyAxMzogMjkwNDE3QzU3MDk2QjhCOUExQkEzQzIwRkQ5MTI4NUIKKyAxNDogOUFGNjBFOTk2OTJDNUY5MTFDQkY5NjlBNkUxMURDMTQKKyAxNTogQ0RBNDMzQkU1OEM5OEU0OUVCQThBNzEwOEU1MERFMkIKKyAxNjogNzQzMEQwRUU2MzFBNDY1OTM1MUI4QTQ0ODlBNzhENDYKKyAxNzogRENDNzRDMEZEMDQxNTc2OEZFMDAyMjVDQTE0QjdEQzIKKyAxODogMENGMjQzMkIxQjQ2NUYyQThDNUZBQ0FBRjJGRUY2MTkKKyAxOTogREEwMjA2ODBDNjRFOTNBRTVGQ0EzRDcxNDY2RDAxQzEKKyAyMDogQjlDMzNBODZFNkVEOUZDQ0RDRDk3MzM4MkREMUI2QTMKKyAyMTogNjYzMTIzNkI5RjJGODEwREQ0RDk3RTYwNDZGNDFBRjIKKyAyMjogMDMxMkMzMjJGNEQ2MzRDRjRGQkMwQzI2MjRFM0U5RjIKKyAyMzogMTExRTNFOUY4RkJEQzFFNDM2NDYyMjcyM0YxQ0I1MjQKKyAyNDogNkQyNjA4RDdBQUYyNDNENTIxOUUxNDUxMzg5NUJGRjYKKyAyNTogNjgzQkQwMUI0M0NCQzA0MzBBMDA3QUNCQUIzNTdEQzkKKyAyNjogMDFCOEZDNjVDNTZCMEYxQTVCRkVCRURDQ0Y2NzQ4RDkKKyAyNzogNEQ2Mjk4RDYzQTgwRDU1NDkxNjk3QTZERDhFMzY5NEMKKyAyODogNkYwMjA1RTRFMDgzQ0FCMDA3NDdENzIzMzAwNTEwREYKKyAyOTogNTE4M0JBRUVGMDVFOTQwMkE5MzVFQjlBRkYwQUEyQTkKKyAzMDogMUU2NzNCRkFENDk0NDY0M0E3NDBDNTlEOTZBNTkyNUMKKyAzMTogOTQwRkI0MDAwRTM0RUVFNzhFOERCNDAyRTRBNzY1MDIKKyAzMjogODdCMEM0OEYzRDE1NUFEODVEMDUwMkQ5NEE0NTcyREUKKworT01BQy1raGF6YWQgKDE2IGJ5dGUga2V5KQorICAwOiA0RUJFRkE0NjA0OTk0MjRGCisgIDE6IDk3QUVFQUQ1MUU1NDFEMTYKKyAgMjogMjlBMzUyMTI5MTBDOTU5NQorICAzOiBBQkQxNTc3RDYyMjA3NEVBCisgIDQ6IDcwQTUzN0RFMTRERDc2NUMKKyAgNTogMjQwQTE5MDE2REU5OUM1MQorICA2OiA0RDQyQzEwQTlGODAzMTc3CisgIDc6IEY0NjRCQzNFMERCNUE5MDkKKyAgODogMUM2NUEwMUE3QzA4REFDNworICA5OiBFNDlBMTQyOEMyMzBDMjA5CisgMTA6IDE2REQwRkVCN0E2NTA1QjgKKyAxMTogMkREREIzRTM1QTA1QzIyMAorIDEyOiBFQzg4OTEwQzc5OUFDNkNDCisgMTM6IEIyQTY1QzlFRjM5QkVDOEEKKyAxNDogRjBEMjM2NkJBOTFERkZENQorIDE1OiBCQ0FCNjIzQ0FCN0FBQTIzCisgMTY6IDlCQ0VBQjg1NzU5NkU0NzgKKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvbm90ZXMvcG1hY190di50eHQgYi9saWJ0b21jcnlwdC9ub3Rlcy9wbWFjX3R2LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGExOTAwCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvbm90ZXMvcG1hY190di50eHQKQEAgLTAsMCArMSw0NjEgQEAKK1BNQUMgVGVzdHMuICBJbiB0aGVzZSB0ZXN0cyBtZXNzYWdlcyBvZiBOIGJ5dGVzIGxvbmcgKDAwLDAxLDAyLC4uLixOTi0xKSBhcmUgT01BQydlZC4gIFRoZSBpbml0aWFsIGtleSBpcworb2YgdGhlIHNhbWUgZm9ybWF0IChsZW5ndGggc3BlY2lmaWVkIHBlciBjaXBoZXIpLiAgVGhlIE9NQUMga2V5IGluIHN0ZXAgTisxIGlzIHRoZSBPTUFDIG91dHB1dCBvZgorc3RlcCBOIChyZXBlYXRlZCBhcyByZXF1aXJlZCB0byBmaWxsIHRoZSBhcnJheSkuCisKK1BNQUMtYWVzICgxNiBieXRlIGtleSkKKyAgMDogNDM5OTU3MkNENkVBNTM0MUI4RDM1ODc2QTcwOThBRjcKKyAgMTogNTgwRjdBQTRBQTQ1ODU3Qzc5QkEyRkI4OTIyMjg4OTMKKyAgMjogMjREMkQxREJBQkRCMjVGOUYyRDM5MUJCNjFGNDIwNEEKKyAgMzogMDgzQkY5NUUzMTBCNDJBODk3NTFCQzhFNjVBQkE4QjUKKyAgNDogNjlCRUI5MjY4Q0Q3RkQzRDdBQjgyMEJEN0UyMjY5NTUKKyAgNTogRkQ3MUIwRTY0N0FEQjRCQjNGNTg3RTgyQjhCMzQwMUEKKyAgNjogMDdFQTQ2MjcxMDgxODQwNzM3Q0VCMUFDOUU1RTIyRTMKKyAgNzogRkZBMTJBRDlBOUZEQjVFRTEyNjA4NEY4MkIzODFCMTAKKyAgODogOEExMUFGMzAxQUFGRUFDOEE3NTk4NEVEMTZCQjMyOTIKKyAgOTogMzY4QkRDM0Y0MjIwRTg5QjU0QzVGOUQwOUZGQjhGMzQKKyAxMDogOEI2REJGRjc3NkZENTI2MTQ3RDFDNDY1NTYyNjM3NEYKKyAxMTogQzUzOEMwOUZDMTBERjM4MjE3Q0Q4RTc5OUQ4RDFEQzkKKyAxMjogRkMxMjY0QTIwNTFERUY3MzMzOTQzMkVBMzk0NDNDRkQKKyAxMzogOEFGMzdFRDJGQjJFOEUzMEU5QzRCNzVDMUYxMzYzRTEKKyAxNDogNDI5NTU0MUZDNjJGNjc3NDA2OEI4MTk0Q0M5RDlBNDYKKyAxNTogQ0ZBRjREOEVBMDlCQjM0MkYwNzEzMTM0NERCMEFBNTIKKyAxNjogQjZDQkQ2RTk1OTU5QjJBOEUyMkRFMDdFMzhCNjREOEQKKyAxNzogMzEyNEU0MkRFMzI3M0IwRjQ4MDZGQjcyQTUwRjNFNTQKKyAxODogMjUyRDQ5NDAzNTA5QjYxOEFCM0E2QTFEOTlGOUU5RkEKKyAxOTogOUNEQTc1NTk0Q0I2OTZFQjE5QzAyMkREQTczMjRDMTAKKyAyMDogMzNCQjhBRTQzQjdCQzE3OUU4NUYxNTdGQTE5NjA3RDAKKyAyMTogMTJGRTkxQkNGMkYyODc1Mzc5REM2NzFDNkYxQjQwM0UKKyAyMjogNDE2QTNFNTE5RDFFNDA2QzkyRjhCQjBEREJCQkI2QkYKKyAyMzogNkY5OERDQ0Q1QThENjBERUFGNjEyQUNDRUREN0U0NjUKKyAyNDogRkZDRTc2MDQ2MDlCMkMzQzA1MDkyMTg1NEM2MzhCN0UKKyAyNTogREQyQkIxMEFBMDdBNUVDOEQzMjZCQjdCRjhENDA3RjQKKyAyNjogNDY4QkZFNjY5RkNERjM1NEU0Rjk3NjhGRTFFQUY4RjYKKyAyNzogMDE3MjREMkYyQzYxRUI0RjM4MDg1MjIxODIxMkU4OTIKKyAyODogMkQ5MEVDNjU4RjU3MTM4NTA1NTk4QzY1OUM1MzlBM0UKKyAyOTogNjMwMUVBQTBFMTUwMEZGRUI4Njc1Mjc0NEVGRkYyM0QKKyAzMDogM0NDQjE3NzQ4NjM3NzYxNjA1NkQ4MzVGNkY4NTdGN0MKKyAzMTogQkZCM0M3NzU1QzFGNDU0M0I1MTZFQjg2MTBDQjIxOUYKKyAzMjogRDVDNTA1ODQ3RDdDRkZEOENFRDg0OEY2Q0I2MTMxMDUKKworUE1BQy1ibG93ZmlzaCAoOCBieXRlIGtleSkKKyAgMDogM0I3RTRFRkU5MkZBNDZBRgorICAxOiA3NDY4NDAwMTdDMzhDODkyCisgIDI6IDNCNkE5MkM3MzE0NjVCNjQKKyAgMzogRDg5RDNCMDUxNDNCNjcwNAorICA0OiA0M0Y3MEQ1NEI4MDhCN0NFCisgIDU6IDg0RTQwNjNBQjMyRjA0NkMKKyAgNjogQTdFNzhDRDVDQ0QyMzgwNQorICA3OiBBNzhGQjA4MzQ3NUZFRjEwCisgIDg6IEQ0RjZDMjZCNTM4NkJBMjUKKyAgOTogMTg0NzY4QTA3OTg1M0M5MAorIDEwOiAwNzAyRTZDODE0MEM1RDNCCisgMTE6IDc4NkQ5NDU2NUFBMERGNEIKKyAxMjogRjZEMzZEM0EyRjRGQjJDMQorIDEzOiA3QkIzQTA1OTJFMDJCMzkxCisgMTQ6IDVCNTc1Qzc3QTQ3MDk0NkIKKyAxNTogNjg2REFENjMzQjVBOENDMworIDE2OiBCREZFMEM3RjAyNTRCQUQ1CisKK1BNQUMteHRlYSAoMTYgYnl0ZSBrZXkpCisgIDA6IEE3RUY2QkI2NjcyMTZEREEKKyAgMTogQjAzOUU1MzgxMkM0QUJEQworICAyOiA4N0QyRjhFQTVGQjY4NjRECisgIDM6IEY4NUUzRjRDMUQ5RjVFRkMKKyAgNDogNEVCNzQ5RDk4MkZCNUZFMgorICA1OiAwQkZBMEYxNzIwMjc0NDFBCisgIDY6IEZGODJEMDFGMzZBNkVDOTEKKyAgNzogM0JDMkFBMjAyOEVCQkQ3QQorICA4OiAxNUFBMDNBOTdBOTcxRTJBCisgIDk6IEM5NzQ2OTFGNUQ2NkI4MzUKKyAxMDogNEZDN0FBOEYzOTlBNzlFRAorIDExOiAyNjMzREE5RTk0NjczQkFFCisgMTI6IDgyQTlGRDQ4QzVCNjA5MDIKKyAxMzogMzFCRjZEQTlFRTBDRTdFNAorIDE0OiAyNkIyNTM4NjAxQjc2MjBFCisgMTU6IEQxMDNGM0MwQjQ1NzlCRTUKKyAxNjogMDMxMzQ2QkEyMENEODdCQworCitQTUFDLXJjNSAoOCBieXRlIGtleSkKKyAgMDogQzZCNDhGOERFQzYzMUY3QworICAxOiBGN0FBNjJDMzk5NzJDMzU4CisgIDI6IDBFMjZFQzEwNUQ5OUY0MTcKKyAgMzogN0QzQzk0Mjc5OEYyMEI4QworICA0OiA0MTVDREE1M0UxREUzODg4CisgIDU6IEEzMTRCQTVCQ0E5QTY3QUMKKyAgNjogMDJBNUQwMEEzRTM3MTMyNgorICA3OiBFMjEwRjBBNTk3QTYzOUU1CisgIDg6IEQ0QTE1RUVEODcyQjc4QTIKKyAgOTogQUM1Rjk5ODg2MTIzRjdEQworIDEwOiA2OUFFQjI0NzhCNThGRkRGCisgMTE6IDhBQjE2N0RGQzlFRjc4NTQKKyAxMjogOTQ1Nzg2QTEzNkI5OEUwNworIDEzOiBGMzgyMkFCNDY2MjdDQUI1CisgMTQ6IDIzODMzNzkzQzNBODNEQTkKKyAxNTogNzBFNkFCOUU2NzM0RTVBNgorIDE2OiAwNzA1QzMxMkE0QkI2RURFCisKK1BNQUMtcmM2ICgxNiBieXRlIGtleSkKKyAgMDogQzc3MTVBMTcwMTI0MDFERTI0OERDOTQ0REVFQkQ1NTEKKyAgMTogNUI4MDRDNkNDREY5N0JCMjg4MTFDOUVEMjRGRTYxNTcKKyAgMjogNzUyODM3OEMwNTJGNDM0NjI1M0NCMERGQTNEMjUxQzcKKyAgMzogNkRBODZFRTBCMjg2MDY4NjFCMUE5NTRENzQyOUE5M0MKKyAgNDogQjRERkY4NEMyNTkzN0ZCNTBFRTc5RDQwMzczMjMxNjAKKyAgNTogQTYwRkQ5QkU1RTFGRjY3RUM5NzM0Nzc2Qzg3ODEwOTYKKyAgNjogODFEM0Y4RURDMEExOTdERDM3MzlFQUU2NDhGMzg1ODAKKyAgNzogOEJBRjQ3RjAyMTIwRTg5ODkxNkQ2NzhEQkQwQzE2NDEKKyAgODogN0E5RUVDOTZGMTBCN0NGNTU3QjYxRUYzNUJCNTVCMDgKKyAgOTogQjg4QzExMjIxMDE0RjhBRTA0OEU1NkM0MjdERjRBNDYKKyAxMDogNEJCQThFRUQ4OUYzNTc4NjFBMjY1MDA2ODE2RDlCMDQKKyAxMTogODQ5N0MxRDU1MDEwQTY1RUQ4QzM2ODhCNzVBN0NBQkYKKyAxMjogOTVFMTcyMEMwNkEzNzNDQUQxQTIyRjQzMkYyNkJDQ0EKKyAxMzogQTE3NUZCNzMyNjkyODMxRTk2QUZCNTg3QkM0OUUxOEMKKyAxNDogNTRFQkMwNEZDRkQ5MDMwMjkwN0JGNzdDNEQ4QUM3N0MKKyAxNTogRUE5RjEzRUU1NTQ4Q0RGNzcxQzM1NDUyN0NEREEwOUIKKyAxNjogNEVEQkNGRDBFMkU2QjMyMTUzMEVCMzFCM0U4QzJGRTQKKyAxNzogRjQxMjMwNEMxQTVCOTAwNUNDM0I3OTAwQTU5N0RGQjUKKyAxODogM0I5MjQ3QzEyQkIyNURGMDQ4QkY1NTQxRTkxRTFBNzgKKyAxOTogMzk2MjY0ODg2MzVEMEE2MjI0Q0QyM0MxM0IyNUFFOEUKKyAyMDogNDAzMDVGNUMyRkNFRjM0RTc2NEUzM0VGNjM1QTNEQzUKKyAyMTogRjg0NDk5ODA0MDg2MDMzRTg1NjMzQTFFRjk5MDg2MTcKKyAyMjogQzREMjYzQ0RDN0UwOTY5QjhBQzZGQTlBRDlENjVDQjgKKyAyMzogNjEzN0RDODQwRTYxRUE2QTI4OEQwMTdFRkI5NjQ2RkMKKyAyNDogODYxOTk2MDQyOEVCMjlCMUQ1MzkwRjQwMTczQzE1MkYKKyAyNTogRjA0NjQ1MDlEMEZCREJFQ0VDOURGQzU3QTgyMDAxNkQKKyAyNjogNjMwRUVEMjNFODcwNTkwNTFFNTY0MTk0ODMxQkFFRjYKKyAyNzogNEI3OTJCNDEyNDU4REM5NDExRjI4MUQ1REQzQThERjYKKyAyODogRjIzNDlGQTQ0MThCQzg5ODUzNzA2QjM1QTlGODg3QkEKKyAyOTogRkVBQzQxRDQ4QUVBQjA5NTU3NDVEQzJCRTFFMDI0RDUKKyAzMDogQTY3QTEzNUI0RTYwNDNDQjdDOUNBRkJGQTI1RDE4MjgKKyAzMTogRUMxMkM5NTc0QkRFNUIwMDAxRUUzODk1QjUzNzE2RTIKKyAzMjogNDQ5MDNDNTczN0VFNkIwOEZEN0Q3QTM5MzdDQzg0MEQKKworUE1BQy1zYWZlcisgKDE2IGJ5dGUga2V5KQorICAwOiBFODYwM0M3OEY5MzI0RTlEMjk0REExM0MxQzZFNkU5QgorICAxOiAzRjExNzhERkMyQTEwNTY3RDRCQ0M4MTdEMzVEMUUxNgorICAyOiAyN0ZFMDFGOTBFMDkyMzdCNEI4ODg3NDYxOTk5MDhFRQorICAzOiA0RjUxNzJFM0Q4QTU4Q0Q3NzVDRDQ4MEQ4NUU3MDgzNQorICA0OiA3NEJFRDc1RUZBQUIzRThBQTAwMjdENjczMDMxODUyMQorICA1OiA1NEIwMDNBQjBCRTI5QjdDNjlGN0M3NDk0RTRFOTYyMworICA2OiA4QTJEQUQ5Njc3NDdBRUEyNDY3MDE0MUI1MjQ5NEUyRgorICA3OiA2OUVCMDU0QTI0RUU4MTRFMUZCN0U3ODM5NTMzOTc4MQorICA4OiBFNTlDMkQxNkI3NkI3MDBEQzYyMDkzRjBBN0Y3MTZDQworICA5OiBBQjIyN0Q2MzAzMDA3RkQyMDAxRDBCNkE5RTJCRkVCNworIDEwOiBBRTEwNzExN0Q5NDU3QTExNjZDNkRGRDI3QTgxOUI0NAorIDExOiBGODRERTU1MUI0ODBDRUQzNTA0NTg4NTFCQUUyMDU0MQorIDEyOiBCMEVCNTEwM0U3NTU5Qjk2N0QwNkEwODE2NjU0MjFFMAorIDEzOiBDREIxNEYzQUQxMTcwQ0U4QzYwOTE5NDdCRTg5REU3QgorIDE0OiAyNEZBMkY0NzY0MDcwOTQxNTJENTI4RkNGMTI0RTQzOAorIDE1OiA0NDAxNDRCMzFFQzA5QkQ4NzkxQkZFMDJFMjRFQTE3MAorIDE2OiA2OTdEMjY4QTQ2RThCMzNDRUMwQkFCOENBRjQzRjUyRAorIDE3OiA1ODdDQkRFNzYwODQ0OUJEMTYyMTg0MDIwRkJGQ0M4RAorIDE4OiAzRUE5OTlDMjE2OUNDNjU3MzU3MzdGNTBGQ0Q3OTU2QgorIDE5OiBDNkQ2OTI2OThDRDhCRUVCRjIzODdDNkEzNUEyNjFCMAorIDIwOiA0NkRBQjNBRDNDNEUyRUY3MTJGQUMzOEY4NDZDNjNFMQorIDIxOiA3MjYxRTY4QjUzMEQxMEREQzlBRDRDOUFCNUQ5NTY5MworIDIyOiA0RDBCQTU3NzNFOTg4QzJCN0IyMzAyQkJBMEE5RDM2OAorIDIzOiA4NjE3MTU0NjI2MzYyNzM2Njk4NjEzMTUxRDFGRDAzQQorIDI0OiAyM0NGMjVGNjhCMjgxRTIxNzc3REM0MDlGRTNCNzc0QQorIDI1OiBDQTYyNjk1NkM5N0RDNDIwN0Q5NjhBOENDODU5NDBCOAorIDI2OiAyNEMzOUJFMTYwQkRCQjc1MzUxM0Y5NDlDMjM4MDE0RQorIDI3OiA4M0NENjVDMDEwRkI2OUE3N0VFREVBMDIyQTY1MDUzMAorIDI4OiAxQTcyREM4NDM4QjkyNzQ2NDEyNUMwREZFQUNERTc1RAorIDI5OiA1NDYwNTQ5MzZBMkNCNUJGQkI1RTI1RkZEMDdDOUI1MQorIDMwOiAwRUI4MUEyNjhGMUJCOTE5OTdDQjk4MDlEN0Y5RjJBRAorIDMxOiA3RDA4QjRERTk2MENBREM0ODNENTU3NDVCQjRCMkMxNworIDMyOiBGRDQ1MDYxRDM3OEEzMUQwMTg2NTk4QjA4OEY2MjYxQgorCitQTUFDLXR3b2Zpc2ggKDE2IGJ5dGUga2V5KQorICAwOiBEMkQ0MEYwNzhDRURDMUEzMzAyNzlDQjcxQjBGRjEyQgorICAxOiBEMUMxRTgwRkQ1RjM4MjEyQzM1MjdEQTM3OTdEQTcxRAorICAyOiAwNzExMThBNUE4N0Y2MzdENjI3RTI3Q0I1ODFBRDU4QworICAzOiBDOENGQTE2NkE5QjMwMEY3MjA1OTAzODJDRTUwM0I5NAorICA0OiAzOTY1MzQyQzVBNkFDNUY3QjBBNDBEQzNCODlFRDRFQgorICA1OiA2ODMwQUI4OTY5Nzk2NjgyQzM3MDVFMzY4QjJCREY3NAorICA2OiBGRjREQ0M0RDE2QjcxQUZFRUE0MDVEMDA5N0FENkI4OQorICA3OiBBREI3Nzc2MEIwNzlDMDEwODg5Rjc5QUEwMjE5MEQ3MAorICA4OiA1RjJGQ0Q2QUEyQTIyQ0VFQ0FBNDY3MUVFMDQwM0I4OAorICA5OiA3MERENkQzOTYzMzA5MDRBMEEwM0UxOTA0NkY0QzBCRgorIDEwOiA4QTJDOUQ4OEZBMDMwMzEyMzI3NUM3MDQ0NDVBN0Y0NworIDExOiBCQTBCMkY2RDAyOURDRDcyNTY2ODIxQUI4ODRBODQyNworIDEyOiBDOERGNDVGRjEzRDdBMkU0Q0ZFMTU0NjI3OTE3MjMwMAorIDEzOiA1MTI2NTlBRDQwREMyQjlEMzFEMjk5QTFCMDBCM0RBRAorIDE0OiBBOEEwRTk5RDJFMjMxMTgwOTQ5RkM0REZCNEI3OUVENAorIDE1OiBDQTE2MUFGQjJCQzdEODkxQUFFMjY4RDE2Nzg5N0VGMgorIDE2OiBENkMxOUJCREZGQzU4MjI2NjNCNjA0QjFGODM2RDhCRAorIDE3OiA0QkYxMTVGNDA5QTQxQTI2RTg5QzhENzU4QkJGNUY2OAorIDE4OiAwMkUzMTk2RDg4OEQ1QThERTgxOERCQ0JBRDZFNkRDNworIDE5OiA5OTVDOURENjk4RUM3MTFBNzNCRDQxQ0FBRThFQjYzMworIDIwOiBBMDMxODU3RkFEQzhDOEFGRUFCRjE0RUY2NjNBNzEyRAorIDIxOiAxMjQ2OTVDOUE4MTMyNjE4QjEwRTk4MDBBNEVGQUNDNQorIDIyOiA5OTdFNUU0MTc5ODY0OEI4Q0UwQzM5OEVGOTEzNUEyQworIDIzOiA0MkM5MjE1NEI3MUZCNEUxMzNGOEY1QjJBMjAwN0FCMgorIDI0OiA5NDVEQzU2ODE4OEQwMzZBQzkxMDUxQTExQUM5MkJCRgorIDI1OiBENUE4NjBDQzRDMzA4N0U5RjQ5ODhCMjVEMUY3RkFBRQorIDI2OiA2Q0Q2QUJGOEVERjMxMDI2NTlBRkZCRTQ3NkUyQ0JFOAorIDI3OiA0NUVDRDBDMzcwOTE0MTRFMjgxNTNBQTVBRkEzRTBCMgorIDI4OiBDQkE2RkUyOTZEREUzNkZFNjg5QzY1NjY3RjY3QTAzOAorIDI5OiBDNDAyMjI4MTYzM0YyRkM0Mzg2MjU1NDBCMkVFNEVCOAorIDMwOiA4NjRFMjcwNDVGOUNDNzlCNTM3N0ZERjgwQTYxOTlDRgorIDMxOiAwRDA2RjJGQUVDNUFBNDA0QTQwODdBQUVCQzREQkIzNgorIDMyOiAwRjM5NkZFOUUzRDlENzREMTdFQjdBMEJGNjAzQUI1MQorCitQTUFDLXNhZmVyLWs2NCAoOCBieXRlIGtleSkKKyAgMDogMkU0OTc5MkM3OEMxREE1MgorICAxOiA3QTUxMzZGNEZFNjE3QzU3CisgIDI6IDZGQzg1NzVGNkYzRDc4RUMKKyAgMzogN0MwMzczQ0FFQUFBNjQwQgorICA0OiA5RDQ2OUU3RkY2QzM1RDMxCisgIDU6IDc3NTVENjJERDdEODgxMTIKKyAgNjogQUREOUU3ODU1QTk1OEM5RgorICA3OiA3NTJEMjlCQTgxNTBGMThFCisgIDg6IDA5NTQ2NDlBOTk1OTYxMDQKKyAgOTogMDVENEQ3NUE5RkFFMjMzRAorIDEwOiAxQUFEQUZEN0I0QjI1MERBCisgMTE6IEU3QThGMzFFRDc0REEzMkIKKyAxMjogMUE3NERGNjFCREI5REY5NAorIDEzOiBDMzhBNjdCMTk1NUM0RTBECisgMTQ6IEVCQURBQTQ0NzQ2QURGMTYKKyAxNTogQzBCRkJCMDkyQ0U4MUQ4RQorIDE2OiA5ODQ5NzU2NTdGM0ZGMkIwCisKK1BNQUMtc2FmZXItc2s2NCAoOCBieXRlIGtleSkKKyAgMDogRTg5MTdFMTYyOUU3NDAzRQorICAxOiBBRTgwNjFBNUU0MTJBNjQ3CisgIDI6IEM5Njk3NzFDRTVBOUIwQzYKKyAgMzogNzgxNTlDMDFEMEEzQTVDQgorICA0OiAxREQ0MzgyQThGQzgxOTIxCisgIDU6IDQwODY4ODBGRDg2M0MwNDgKKyAgNjogQTUyMEI0NTYwMEEzRkExRAorICA3OiAwRjBBQjUxMThENzUwNkM0CisgIDg6IDIyRTMxNUYyREQwM0JDQzYKKyAgOTogNUVDQjU1NjFFRTM3MjAxNgorIDEwOiA0NDZBOUIyQkNCMzY3QUQ2CisgMTE6IEIyMTA3RkUyRUI0MTFBRTkKKyAxMjogNUE1MzlCNjJGQjU4OTNERgorIDEzOiBGNDRFRTFFQjMyNzhDMkJBCisgMTQ6IDI5M0ZFQTU2RDFGNkVBODEKKyAxNTogRjM4RjYxNEQyQjVGODFDNAorIDE2OiBBQjIzRjdGOEY0QzEyQTdFCisKK1BNQUMtc2FmZXItazEyOCAoMTYgYnl0ZSBrZXkpCisgIDA6IDdFMEJERTExRUM4MkZERTYKKyAgMTogODk0MkZCMDE3QTEzNTUyMAorICAyOiAwQjA3M0U2RDBGMDM3QTAyCisgIDM6IERCRjg4NDM5RDY3MUVENEYKKyAgNDogQjg5NDI3RUQxMTIxMDY5QQorICA1OiBBQTg1NzNEQUM2NkQyMzE1CisgIDY6IDEyREEzMTQ0QkVGMTNGRjIKKyAgNzogRUY4MDQxM0NCQTI4MUIzQQorICA4OiBERkE3MTE0RDg1MDVFRUJECisgIDk6IEFFNTM2MDdGM0U2RjRBNTQKKyAxMDogM0YyQzkzOTVDRkI5Rjc4RgorIDExOiA2N0VCN0M1RjAyNzYwQUVECisgMTI6IDNFRjRDQkI0QUI1QjhEMUYKKyAxMzogODNCNjNBRkE3ODc5NUE5MgorIDE0OiA1REU0MDA5NTE3NjY5OTJBCisgMTU6IEFBODc5MUE0NTIzN0NGODMKKyAxNjogNzc0M0IxODcwNEIwMzdDRgorCitQTUFDLXNhZmVyLXNrMTI4ICgxNiBieXRlIGtleSkKKyAgMDogOEYxNTk3RkZDRjZGQjdDMQorICAxOiBBRkY4QkQ4RkY5RjM4ODhBCisgIDI6IDY1Rjg5RDgyODY5RDhCNDIKKyAgMzogQ0JFMUYwNjQ3NkIyRDVCRAorICA0OiA0ODc4RDQ3RkRGRUNFMjNFCisgIDU6IDQ3NTFBOUU2RDYxQUIyQTIKKyAgNjogMDAzQUMxNjJBRUQ0REVEOAorICA3OiAxRjYxN0E1NTU1MDkyQzIyCisgIDg6IDA4OEVFMEMzNUI2MDcxNTMKKyAgOTogRjg0MEI0ODUwODZGOTkwOAorIDEwOiBCQTk5RTBGQjVEN0QwOTc2CisgMTE6IEYwNEFGNkRDNEJBRjY4ODcKKyAxMjogNURCQkU0MEFGMkY2N0U0RQorIDEzOiA3RjUyQTkzRTg3RTI5QzlECisgMTQ6IDdCMjZBMTRBNEJENUI3MDkKKyAxNTogQzM0RjI2RTA4QzY0RjI2QgorIDE2OiAyOTFBNDFENDc5RUMxRDJBCisKK1BNQUMtcmMyICg4IGJ5dGUga2V5KQorICAwOiBFNUFGODBGQUM0NTgwNDQ0CisgIDE6IDZBMTVENjIxMUVCNEZGOTkKKyAgMjogRERCOTVFOTQ4NkM0QjAzNAorICAzOiA5NzY0NzYxREMyQUFENUMwCisgIDQ6IDFCMUNEMkU3OTlENDRCNEYKKyAgNTogNEY4MEZFMzIyNTZDRjJFQworICA2OiA3QjcwQ0YzMUM4MUNEMzg0CisgIDc6IDlCQzEwREQ5MzMyQ0YzQkIKKyAgODogNjI4MTg5ODAxODc5RkREOAorICA5OiA1RkMxN0M1NTVFMkFFMjhCCisgMTA6IEUyMEU2ODMyN0FCRUFDMzIKKyAxMTogNUQzNzVDQTU5RTdFMkE3QworIDEyOiBBOUY0Q0ZDNjg0MTEzMTYxCisgMTM6IDNBMEUwNjk5NDBEREQxM0MKKyAxNDogRUFDMjVCNjM1MTk0MTY3NAorIDE1OiBDQjhCNUNGODg1RDgzOENGCisgMTY6IERDQkNEREZDMDZEM0RCOUEKKworUE1BQy1kZXMgKDggYnl0ZSBrZXkpCisgIDA6IDA4NkEyQTdDRkMwOEUyOEUKKyAgMTogRjY2QTFGQjc1QUYxOEVDOQorICAyOiBCNTg1NjFERTJCRUI5NkRGCisgIDM6IDlDNTA4NTZGNTcxQjMxNjcKKyAgNDogNkNDNjQ1QkYzRkIwMDc1NAorICA1OiAwRTRCRUU2MkIyOTcyQzVBCisgIDY6IEQyMjE1RTQ1MTY0OUYxMUYKKyAgNzogRTgzRERDNjFEMTJGMzk5NQorICA4OiAxNTVCMjBCREE4OTlEMkNGCisgIDk6IDI1NjcwNzE5NzMwNTJCMUQKKyAxMDogREI5QzIwMjM3QTJEODU3NQorIDExOiBEQUY0MDQxRTU2NzRBNDhDCisgMTI6IDU1MkRCN0E2MjdFOEVDQzQKKyAxMzogMUU4QjdGODIzNDg4REVDMAorIDE0OiA4NEFBMTU3MTM3OTNCMjVECisgMTU6IEZDRTIyRTZDQUQ1MjhCNDkKKyAxNjogOTkzODg0RkI5QjNGQjYyMAorCitQTUFDLTNkZXMgKDI0IGJ5dGUga2V5KQorICAwOiBFNDJDQ0JDOUM5NDU3REY2CisgIDE6IEZFNzY2Rjc5MzA1NTc3MDgKKyAgMjogQjkwMTFFOEFGN0NEMUUxNgorICAzOiA1QUUzOEIwMzdCRUE4NTBCCisgIDQ6IEE2QjJDNTg2RTE4NzUxMTYKKyAgNTogQkY4QkE0RjFENTNBNDQ3MworICA2OiAzRUI0QTA3OUU0RTM5QUQ1CisgIDc6IDgwMjkzMDE4QUMzNkVEQkYKKyAgODogQ0MzRjVGNjJDMkNFRTkzQworICA5OiBFRTZBQTI0Q0UzOUJFODIxCisgMTA6IDQ4N0E2RUFGOTE1OTY2RUEKKyAxMTogRDk0QUQ2MzkzREY0NEYwMAorIDEyOiBGNEJGQ0NDODE4QjRFMjBECisgMTM6IDJCRTlCQzU3NDEyNTkxQUEKKyAxNDogN0Y3Q0M4RDg3RjJDREFCNworIDE1OiBCMTNCRkQwN0U3QTIwMkNCCisgMTY6IDU4QTY5MzEzMzVCNEIyQzIKKworUE1BQy1jYXN0NSAoOCBieXRlIGtleSkKKyAgMDogMDY1NEYyRjRCQzFGNzQ3MAorICAxOiAzRjcyNUIxNjJBMUM4RTZCCisgIDI6IEJDRkJEQzY4MEEyMEYzNzkKKyAgMzogMDI3OTIyNzA1QkNBQ0RFRQorICA0OiA0NEUyRjRCRTU5Nzc0QkE0CisgIDU6IDNBQkQxQUZDOEVFMjkxRjcKKyAgNjogRDk2MzQ3RTcxNzkyMUU5NgorICA3OiA5NjI1NzI5OUZDRTU1QkM2CisgIDg6IEMyQzFEQTE3NkVFOTgxNzAKKyAgOTogRkQ0MTVDMTIyRTYwNDU4OQorIDEwOiBEQ0JDQTIyOEQ0NUFFREE0CisgMTE6IDc4MDFGQkNGQUFCOURGNzUKKyAxMjogRDM4Q0IzODU3NDQ3NEI3RgorIDEzOiBGNUM1QTIzRkYzRTgwRjM3CisgMTQ6IDgzRkE0REFENTVEMDkyRjUKKyAxNTogQkRDMEEyN0VFMENCMTY1NworIDE2OiA4N0Q5MDdDQUNBODBBMTM4CisKK1BNQUMtbm9la2VvbiAoMTYgYnl0ZSBrZXkpCisgIDA6IEExRTRDODRCNTk1ODcyNjU1N0RGMDg1NUIzN0FBNTUxCisgIDE6IDVERTIwMjk5Q0E5MTlEMzM2NUI0OTNEM0Q0ODk1RjkyCisgIDI6IEFGN0U3MEMzMzY1NzFBODU3RjYyQTE4NjQ5RURCMTk3CisgIDM6IEM1RjU1Q0ZFMUFBMTE5QzM1MkI2NDI1MkFEMjQ2Q0JECisgIDQ6IEZFRjY4QTBDRTA4RThCQTMxNUI3M0I2MkY4NjE4MjRGCisgIDU6IDgzMjFDMjk1OERFNDkwM0RDMTJDNDJBODg0NUVDQzIwCisgIDY6IDM3MDQ2NkQxMzI0QUVDRjFGNUI0MkUwRTAxMzgxNjEzCisgIDc6IDVDQjkwMDE5MEY1Q0FDQkFDRkU1RUFCMENDMjg5RDg3CisgIDg6IEExM0MwNDNFNkNBQUExRTM0NjAxQTkzQzQ5NzQ0NkE0CisgIDk6IDg2NUUxMTYyMkE0Q0M4QTlFMTQwOEUwMEY1NkM0NTQzCisgMTA6IDlEQzQyQzI2ODY4Mzc0NjQ5QkQxN0Q2OUQwMjVDQTFCCisgMTE6IDM3RDMzQzExQjQzM0M5MURBMDk5MjVDQTlFODY3NTdBCisgMTI6IDEzNzNENzY5QzI3MEU3MTM3Qzk1M0FDMEY4RjM3OTQxCisgMTM6IDdFODFERUM1ODMzNDhCMUUyRjYyNjdFQ0Y4MkNCOTk0CisgMTQ6IDUwNUI2MzI5MzM4NTU2NTE4RkYzNjRDQUE3MzBGNUU4CisgMTU6IDBDMDg1QUVFQjMxNTk2OEIwQkRFOTA0RThCQkM2RkQwCisgMTY6IDVGRUQ2MzI1OTM2NEJFN0U1MTMzRkYwNTA3REQyRDRDCisgMTc6IEY3RUU1QzgwQTk5QUFFQURCNDlFN0NDNjlCRkZGNjc5CisgMTg6IDQzODhGQTVFNzYzQTY0MTEzMDk0MEVCNzA1QkVGRDA4CisgMTk6IDFCQzMxQ0E3OUVCRTE2NzRDRUJFMDFCQzk5ODgyNjdCCisgMjA6IEJFODg5NjE2MzdFRkZFMkQ2OTA1RDEwNEZFREQ1MUE0CisgMjE6IDlDMzQxMDA0RkIyMkFGQ0M0OTYwOTRFMzIwN0NBNzYxCisgMjI6IEI5REFBMzYyMEUzOEZGQzdDNUQ1RTdEMkQ4RkUzREU0CisgMjM6IEEzOEQyRTU3MUYwMzcwNjFCNDQwMEYxMTMxRkRCREVBCisgMjQ6IDYxREI3MUFFNzdBNkVCNDdGMkU5RTE0RThDQkYyRjRCCisgMjU6IDk5MDNBMDcyMjc0Q0MwNDhFRjJDNTE0OTMyNjZEOUVECisgMjY6IDFFQkVBNDIxREQwODg1OUMxN0RERjM5QjIwQTgyMTAyCisgMjc6IEY0MjU4NTg2MThFMUE4NkY0OTEyRTQ3MTRFRkI5RTc1CisgMjg6IDNCM0Q0RUEwN0Y3RkU2RERGREQwMkQ2MjRBQ0RGQzlGCisgMjk6IENFRUUyNTY1OTFENzAxNTE0RUIxN0RGNzNCMDhBOTcwCisgMzA6IDVDQzU2RDVENDYxMjBDNTMwQTIzQjZDNTExQzY4NUZDCisgMzE6IDY4RTQ4NENFMThCRTI4RUFERDBCQkYyMzI5MUI4MjM3CisgMzI6IEFCRDU4QTlDREY4QUE2ODE2OEExQTQwMjA3NENGNTIwCisKK1BNQUMtc2tpcGphY2sgKDEwIGJ5dGUga2V5KQorICAwOiA5Q0Q5NEI3NUJDNDNCNjQ3CisgIDE6IEIwNjlBQ0I4MkIxMkJDN0IKKyAgMjogNkRENDBFNzFFQjAzRTMxMQorICAzOiA3NENCRUQ2MUQ3N0RCQTdECisgIDQ6IEREMUI3RTBEMTgxNTM3RkUKKyAgNTogQUNCNUI5NkZBMEFEMTc4NgorICA2OiBCMzRFMDFFQjI1NjdEMzgxCisgIDc6IDk2MjNEQUFERTU3Qjk1NDkKKyAgODogOEJBMzg0QkFCQjc5ODM0NAorICA5OiBCMTQ3QUE5RDVDNUM2N0NGCisgMTA6IDAwMzNDNTIwRjRDNjc1MjMKKyAxMTogNDJEQUMxODRCRUFCQzNFNQorIDEyOiA0MjgwMjkzMTEwMDRBRUJCCisgMTM6IEFDMkJCMUMwRjBFRDY0OUIKKyAxNDogRjdDQUE5QTNCRjc0OUMxQQorIDE1OiAyQzVCRDQ3NUFBQzQ0Qzc3CisgMTY6IEZFQjg5MkRBNjZEMzFBODQKKworUE1BQy1hbnViaXMgKDE2IGJ5dGUga2V5KQorICAwOiBERjMzRUU1NDFGRkVFNkE5N0ZFM0ExRjcyRjdBMzhGQworICAxOiAwQUIyODY3NUFDMzkyM0M2REQ5RjVBOEUxRTI5MjhEMAorICAyOiAyREFCRjc1RDY0MDNFMUUxQ0ZBQjNFNjg2OUZCMTA4OAorICAzOiA5NTgzNUQ0OUUwOTc0MDE4MEI3OUUzOTRGQzJBQTc0NAorICA0OiBGMzY0RDZEQzJDMjA3OEE1MTlFNUJBRUZFODU4QUZDQQorICA1OiBEQTRDNjZBNDgwNUZDOTFGQUJBRUNDMEQzQUVBRDg1MAorICA2OiA0ODc2NjBGQURDQUM3QjMyNkM0OTJBQTA1MUExREY0OQorICA3OiBCRjA3ODM1QUExQTU0OEZBNzMxMjUwOUFGMzVDRTNGMworICA4OiAzQ0U4QThCMUYzMjRBNzAwOTIzQUMwQjgzMEQ1M0Q5OQorICA5OiAzQzU0RDk5QUFDRkFCMjZFMzRGQzFCMEI2QkI5RUIyMgorIDEwOiAwQTU1OUY5RDEwN0VENzZGRDE5MjI3RkREMDc1MkI4QQorIDExOiBCRkQ5RTc0QURDNDBCOUM3NDQ2RkREMDk1NThGQTU4NAorIDEyOiBGMTEzMEY2NjNCQzBGQTNCMTA2NjEyOUUwRDE5MTBFOQorIDEzOiA1MzVFQUQ3ODZGMEQyMTFERTdBQTc4RjNDQjQ4MDgwMworIDE0OiBDREY1ODU1RjAwQTRDMzEwRDk1QjI2NzUxQjAxQTI4QgorIDE1OiBFRjY2ODZFOTk5RDVBOUMzNUE5NkQyNUJCOURCQkY1NworIDE2OiBFNzk1NzMzQUEwQUFGMTZEOEY3QUIxQThFOUM1NUU1NAorIDE3OiBFMDNDQTg1NzI3RDVDRjA2RjU2QkI2NDY1QkIzRTVDNQorIDE4OiA2RUREREI2RDIyOTJFRkY1ODRFMzgyRTFCQUNEMUE0OQorIDE5OiA3QjdGRTBEODgyMTgzNkMxQUE5NTU3ODA3MUZGMkZEMgorIDIwOiA1RjhDQzU2ODMzODQwMDc0NkI2MUE5Mjg2QjdDRjI2MgorIDIxOiAzMkRFRTVBMTFFOUVEQjA0QkRGOTExODM3Q0UwRkE0RAorIDIyOiBGMUE5OTkxNEYxM0IxN0FCRjM4M0YzNjE1N0ZFQjE3MAorIDIzOiA5OUY1NDE2NDdGMzgyMzkwMDQzQ0FFNTMzMkUzMTE0RAorIDI0OiAzNEM1RUJCODU2OTNBMTk3OUY4Q0ZERjhCNDMxQTVCQgorIDI1OiAxQkE3MjY2NTY4RjFFN0I0QTc3QTg2OUQzMDIxQUMwRgorIDI2OiAwRkM2NzVDOTlDMjRFODU5RjhDRTcxNEU4NkJGNTI4OQorIDI3OiBDQkZBQjIxRjVBQkM0NzM1NkE0M0JFRDgwNkQ4NzNDMAorIDI4OiA5NjU5QUIxQTREMzM0QjYyMjYyOTcyMUY5OEVFQ0UzQQorIDI5OiA2NDRDOEJFRTQxRjAzQkRFNzY1MkIwM0NBRUEzMUUzNworIDMwOiA1QjM0NDdBRkFEOTM0QjREMUU0OTEwQThERkQ1ODhFNworIDMxOiBCRkY0MDMzNDJFOEQ1MEQwNDQ3NjI3QUVBMkY1NkIyMworIDMyOiAxOUY0NjhGMEZCMDUxODREMDBGQUJENDBBMThEQjdCMgorCitQTUFDLWtoYXphZCAoMTYgYnl0ZSBrZXkpCisgIDA6IEY0MENFRjJFMzkyQkVBRUIKKyAgMTogQzZFMDg2QkQxQ0ZBMDk5MgorICAyOiA1MTNGMjg1MTU4M0FENjlBCisgIDM6IDA3Mjc5RDU3Njk1RDc4RkYKKyAgNDogMDUxRTk0RkU0Q0M4NDdCNgorICA1OiA1RTlBQUE1OTg5RDVDOTUxCisgIDY6IDMxMEQ1RDc0MDE0MzM2OUEKKyAgNzogOUJCMUVBOEVDRDRBRjM0QgorICA4OiBDRjg4NjgwMEFGMDUyNkM4CisgIDk6IDBCMDNFMkM5NDcyOUU2NDMKKyAxMDogNDI4MTVCMzA4QTkwMEVDNworIDExOiA5QTM4QTU4QzQzOEQyNkRECisgMTI6IDA0NEJGRjY4RkQyQkZGNzYKKyAxMzogN0Y1QUJCREMyOTg1MjcyOQorIDE0OiBGODFBN0Q2RjdCNzg4QTVECisgMTU6IDkzMDk4REE4QTE4MEFBMzUKKyAxNjogQkFDRTJGNERBOEE4OUUzMgorCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9ub3Rlcy90ZWNoMDAwMS50eHQgYi9saWJ0b21jcnlwdC9ub3Rlcy90ZWNoMDAwMS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGFmN2U1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L25vdGVzL3RlY2gwMDAxLnR4dApAQCAtMCwwICsxLDczIEBACitUZWNoIE5vdGUgMDAwMQorSG93IHRvIEdhdGhlciBFbnRyb3B5IG9uIEVtYmVkZGVkIFN5c3RlbXMKK1RvbSBTdCBEZW5pcworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCitUaGlzIHRlY2ggbm90ZSBleHBsYWlucyBhIHJlbGF0aXZlbHkgc2ltcGxlIHdheSB0byBnYXRoZXIgZW50cm9weSBmb3IgYSBQUk5HIChZYXJyb3cgaW4gdGhpcyBjYXNlKSBpbiBlbWJlZGRlZCBzeXN0ZW1zCit3aGVyZSB0aGVyZSBhcmUgZmV3IHNvdXJjZXMgb2YgZW50cm9weSBvciBwaHlzaWNhbCBzb3VyY2VzLgorCitXaGVuIHRyeWluZyB0byBzZXR1cCBhIHNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBhIGZyZXNoIHNvdXJjZSBvZiByYW5kb20gZGF0YSAoZW50cm9weSkgaXMgcmVxdWlyZWQgdG8gZW5zdXJlIHRoZQorZGV0ZXJtaW5pc3RpYyBzdGF0ZSBvZiB0aGUgUFJORyBpcyBub3Qga25vd24gb3IgcHJlZGV0ZXJtaW5lZCB3aXRoIHJlc3BlY3QgdG8gYW4gYXR0YWNrZXIuCisKK0F0IHRoZSB2ZXJ5IGxlYXN0IHRoZSBzeXN0ZW0gcmVxdWlyZXMgb25lIHRpbWVyIGFuZCBvbmUgc291cmNlIG9mIHVuLXRpbWVkIGludGVycnVwdHMuICBieSAidW4tdGltZWQiIEkgbWVhbiBpbnRlcnJ1cHRzCit0aGF0IGRvIG5vdCBvY2N1ciBhdCByZWd1bGFyIGludGVydmFscyBbZS5nLiBqb3lwYWQva2V5cGFkIGlucHV0LCBuZXR3b3JrIHBhY2tldHMsIGV0Yy4uLl0uCisKK0ZpcnN0IHdlIHNoYWxsIGJlZ2luIGJ5IHRha2luZyBhbiBvdmVydmlldyBvZiBob3cgdGhlIFlhcnJvdyBQUk5HIHdvcmtzIHdpdGhpbiBsaWJ0b21jcnlwdC4gIEF0IHRoZSBoZWFydCBvZiBhbGwKK1BSTkdzIGlzIHRoZSAicHJuZ19zdGF0ZSIgZGF0YSB0eXBlLiAgVGhpcyBpcyBhIHVuaW9uIG9mIHN0cnVjdHVyZXMgdGhhdCBob2xkIHRoZSBQUk5HIHN0YXRlIGZvciB0aGUgdmFyaW91cyBwcm5ncy4gIFRoZSAKK2ZpcnN0IHRoaW5nIHdlIHJlcXVpcmUgaXMgYSBzdGF0ZS4uLiAKKworICAgcHJuZ19zdGF0ZSBteVBybmc7CisKK05leHQgd2UgbXVzdCBpbml0aWFsaXplIHRoZSBzdGF0ZSBvbmNlIHRvIGdldCB0aGUgYmFsbCByb2xsaW5nCisKKyAgIGlmICh5YXJyb3dfc3RhcnQoJm15UHJuZykgIT0gQ1JZUFRfT0spIHsKKyAgICAgIC8vIGVycm9yIHNob3VsZCBuZXZlciBoYXBwZW4hCisgICB9CisKK0F0IHRoaXMgcG9pbnQgdGhlIFBSTkcgaXMgcmVhZHkgdG8gYWNjZXB0IGZyZXNoIGVudHJvcHkgd2hpY2ggaXMgYWRkZWQgd2l0aAorCisgICBpbnQgeWFycm93X2FkZF9lbnRyb3B5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIHBybmdfc3RhdGUgKnBybmcpCisKK1RoaXMgZnVuY3Rpb24gaXMgKipOT1QqKiB0aHJlYWQgc2FmZSB3aGljaCB3aWxsIGNvbWUgdW5kZXIgY29uc2lkZXJhdGlvbiBsYXRlci4gIFRvIGFkZCBlbnRyb3B5IHRvIG91ciBQUk5HIHdlIG11c3QgCitjYWxsIHRoaXMgZnVuY3Rpb24gd2l0aCBmcmVzaCBkYXRhIGFzIGl0cyBzYW1wbGVkLiAgTGV0cyBzYXkgd2UgaGF2ZSBhIHRpbWVyIGNvdW50ZXIgY2FsbGVkICJ1VGltZXIiIHdoaWNoIGlzIGEgMzItYml0IAorbG9uZyBhbmQgc2F5IGEgMzItYml0IGpveVBhZCBzdGF0ZSBjYWxsZWQgInVQYWQiLiAgQW4gZXhhbXBsZSBpbnRlcnJ1cHQgaGFuZGxlciB3b3VsZCBsb29rIGxpa2UKKworICAgdm9pZCBqb3lwYWRfaW50ZXJydXB0KC4uLikgeworICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmWzhdOworCisgICAgICAgU1RPUkUzMkwodVRpbWVyLCBidWYpOworICAgICAgIFNUT1JFMzJMKHVQYWQsIGJ1Zis0KQorICAgICAgIGlmICh5YXJyb3dfYWRkX2VudHJvcHkoYnVmLCA4LCAmbXlQcm5nKSAhPSBDUllQVF9PSykgeworICAgICAgICAgIC8vIHRoaXMgc2hvdWxkIG5ldmVyIG9jY3VyIGVpdGhlciB1bmxlc3MgeW91IGRpZG4ndCBjYWxsIHlhcnJvd19zdGFydAorICAgICAgIH0KKyAKKyAgICAgICAvLyBoYW5kbGUgaW50ZXJydXB0CisgICB9CisKK0luIHRoaXMgc25pcHBldCB0aGUgdGltZXIgY291bnQgYW5kIHN0YXRlIG9mIHRoZSBqb3lwYWQgYXJlIGFkZGVkIHRvZ2V0aGVyIGludG8gdGhlIGVudHJvcHkgcG9vbC4gIFRoZSB0aW1lciBpcyBpbXBvcnRhbnQKK2JlY2F1c2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBqb3lwYWQgaXQgaXMgYSBnb29kIHNvdXJjZSBvZiBlbnRyb3B5IChvbiBpdHMgb3duIGl0cyBub3QpLiAgRm9yIGV4YW1wbGUsIHRoZSBwcm9iYWJpbGl0eSBvZgordGhlIHVzZXIgcHVzaGluZyB0aGUgdXAgYXJyb3cgaXMgZmFpcmx5IGhpZ2gsIGJ1dCBhdCBhIHNwZWNpZmljIHRpbWUgaXMgbm90LgorCitUaGlzIG1ldGhvZCBkb2Vzbid0IGdhdGhlciBhbG90IG9mIGVudHJvcHkgYW5kIGhhcyB0byBiZSB1c2VkIHRvIGZvciBxdWl0ZSBhIHdoaWxlLiAgT25lIHdheSB0byBzcGVlZCBpdCB1cCBpcyB0byB0YXAKK211bHRpcGxlIHNvdXJjZXMuICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgYWRhcHRlciBhbmQgb3RoZXIgc291cmNlcyBvZiBldmVudHMgKGtleWJvYXJkLCBtb3VzZSwgZXRjLi4uKSB0cmFwcGluZyB0aGVpcgorZGF0YSBpcyBpZGVhbCBhcyB3ZWxsLiAgSXRzIGltcG9ydGFudCB0byBnYXRoZXIgdGhlIHRpbWVyIGFsb25nIHdpdGggdGhlIGV2ZW50IGRhdGEuCisKK0FzIG1lbnRpb25lZCB0aGUgInlhcnJvd19hZGRfZW50cm9weSgpIiBmdW5jdGlvbiBpcyBub3QgdGhyZWFkIHNhZmUuICBJZiB5b3VyIHN5c3RlbSBhbGxvd3MgaW50ZXJydXB0IGhhbmRsZXJzIHRvIGJlIAoraW50ZXJydXB0ZWQgdGhlbXNlbHZlcyB0aGVuIHlvdSBjb3VsZCBoYXZlIHRyb3VibGUuICBPbmUgc2ltcGxlIHdheSBpcyB0byBkZXRlY3Qgd2hlbiBhbiBpbnRlcnJ1cHQgaXMgaW4gcHJvZ3Jlc3MgYW5kCitzaW1wbHkgbm90IGFkZCBlbnRyb3B5IGR1cmluZyB0aGUgY2FsbCAoanVtcCBvdmVyIHRoZSB5YXJyb3dfYWRkX2VudHJvcHkoKSBjYWxsKQorCitPbmNlIHlvdSBmZWVsIHRoYXQgdGhlcmUgaGFzIGJlZW4gZW5vdWdoIGVudHJvcHkgYWRkZWQgdG8gdGhlIHBvb2wgdGhlbiB3aXRoaW4gYSBzaW5nbGUgdGhyZWFkIHlvdSBjYW4gY2FsbAorCisgICAgaW50IHlhcnJvd19yZWFkeShwcm5nX3N0YXRlICpwcm5nKQorCitOb3cgdGhlIFBSTkcgaXMgcmVhZHkgdG8gcmVhZCB2aWEgdGhlIAorCisgICAgdW5zaWduZWQgbG9uZyB5YXJyb3dfcmVhZCh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCBwcm5nX3N0YXRlICpwcm5nKQorCitJdCBpcyBhIHZlcnkgZ29vZCBpZGVhIHRoYXQgb25jZSB5b3UgY2FsbCB0aGUgeWFycm93X3JlYWR5KCkgZnVuY3Rpb24gdGhhdCB5b3Ugc3RvcCBoYXJ2ZXN0aW5nIGVudHJvcHkgaW4geW91ciBpbnRlcnJ1cHQKK2Z1bmN0aW9ucy4gIFRoaXMgd2lsbCBmcmVlIHVwIGFsb3Qgb2YgQ1BVIHRpbWUuICBBbHNvIG9uZSBtb3JlIGZpbmFsIG5vdGUuICBUaGUgeWFycm93X3JlYWQoKSBmdW5jdGlvbiBpcyBub3QgdGhyZWFkCitzYWZlIGVpdGhlci4gIFRoaXMgbWVhbnMgaWYgeW91IGhhdmUgbXVsdGlwbGUgdGhyZWFkcyBvciBwcm9jZXNzZXMgdGhhdCByZWFkIGZyb20gaXQgeW91IHdpbGwgaGF2ZSB0byBhZGQgeW91ciBvd24gc2VtYXBob3JlcworYXJvdW5kIGNhbGxzIHRvIGl0LgorCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9ub3Rlcy90ZWNoMDAwMi50eHQgYi9saWJ0b21jcnlwdC9ub3Rlcy90ZWNoMDAwMi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk5OTBlMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L25vdGVzL3RlY2gwMDAyLnR4dApAQCAtMCwwICsxLDUyIEBACitUZWNoIE5vdGUgMDAwMgorSG93IHRvIGF2b2lkIG5vbi1pbnRydXNpdmUgdGltaW5nIGF0dGFja3Mgd2l0aCBvbmxpbmUgY29tcHV0YXRpb25zCitUb20gU3QgRGVuaXMKKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworQSB0aW1pbmcgYXR0YWNrIGlzIHdoZW4gYW4gYXR0YWNrZXIgY2FuIG9ic2VydmUgYSBzaWRlIGNoYW5uZWwgb2YgdGhlIGRldmljZSAoaW4gdGhpcyBjYXNlIHRpbWUpLiAgSW4gdGhpcyB0ZWNoIG5vdGUKK3dlIGNvbnNpZGVyIG9ubHkgbm9uLWludHJ1c2l2ZSB0aW1pbmcgYXR0YWNrcyB3aXRoIHJlc3BlY3QgdG8gb25saW5lIGNvbXB1dGF0aW9ucy4gIFRoYXQgaXMgYW4gYXR0YWNrZXIgY2FuCitkZXRlcm1pbmUgd2hlbiBhIGNvbXB1dGF0aW9uIChzdWNoIGFzIGEgcHVibGljIGtleSBlbmNyeXB0aW9uKSBiZWdpbnMgYW5kIGVuZHMgYnV0IGNhbm5vdCBvYnNlcnZlIHRoZSBkZXZpY2UgCitkaXJlY3RseS4gIFRoaXMgaXMgc3BlY2lmaWNhbGx5IGltcG9ydGFudCBmb3IgYXBwbGljYXRpb25zIHdoaWNoIHRyYW5zbWl0IGRhdGEgdmlhIGEgcHVibGljIG5ldHdvcmsuCisKK0NvbnNpZGVyIGEgRGlmZmllLUhlbGxtYW4gZW5jcnlwdGlvbiB3aGljaCByZXF1aXJlcyB0aGUgc2VuZGVyIHRvIG1ha2UgdXAgYSBwdWJsaWMga2V5ICJ5ID0gZ154IG1vZCBwIi4gIExpYnRvbWNyeXB0Cit1c2VzIHRoZSBNUEkgYmlnbnVtIGxpYnJhcnkgdG8gcGVyZm9ybSB0aGUgb3BlcmF0aW9uLiAgVGhlIHRpbWUgaXQgdGFrZXMgdG8gY29tcHV0ZSB5IGlzIGNvbnRyb2xsZWQgYnkgdGhlIG51bWJlcgorb2YgMSBiaXRzIGluIHRoZSBleHBvbmVudCAneCcuICBUbyBhIGxhcmdlIGV4dGVudCB0aGVyZSB3aWxsIGJlIHRoZSBzYW1lIG51bWJlciBvZiBzcXVhcmluZyBvcGVyYXRpb25zLiAgIjEiIGJpdHMgaW4KK3RoZSBleHBvbmVudCByZXF1aXJlIHRoZSBzZW5kZXIgdG8gcGVyZm9ybSBhIG11bHRpcGxpY2F0aW9uLiAgVGhpcyBtZWFucyB0byBhIGNlcnRhaW4gZXh0ZW50IGFuIGF0dGFja2VyIGNhbiAKK2RldGVybWluZSBub3Qgb25seSB0aGUgbWFnbml0dWRlIG9mICd4JyBidXQgdGhlIG51bWJlciBvZiBvbmUgYml0cy4gIFdpdGggdGhpcyBpbmZvcm1hdGlvbiB0aGUgYXR0YWNrZXIgY2Fubm90IGRpcmVjdGx5CitsZWFybiB0aGUga2V5IHVzZWQuICBIb3dldmVyLCBnb29kIGNyeXB0b2dyYXBoeSBtYW5kYXRlcyB0aGUgY2xvc2Ugc2NydXRpbnkgb2YgYW55IHByYWN0aWNhbCBzaWRlIGNoYW5uZWwuCisKK1NpbWlsYXIgbG9naWMgYXBwbGllcyB0byB0aGUgb3RoZXIgdmFyaW91cyByb3V0aW5lcy4gIEZvcnR1bmF0ZWx5IGZvciB0aGlzIGNhc2UgdGhlcmUgaXMgYSBzaW1wbGUgc29sdXRpb24uICBGaXJzdCwgCitkZXRlcm1pbmUgdGhlIG1heGltdW0gdGltZSB0aGUgcGFydGljdWxhciBvcGVyYXRpb24gY2FuIHJlcXVpcmUuICBGb3IgaW5zdGFuY2UsIG9uIGFuIEF0aGxvbiAxLjUzR2h6IFhQIHByb2Nlc3NvciBhCitESC03NjggZW5jcnlwdGlvbiByZXF1aXJlcyByb3VnaGx5IDUwIG1pbGxpc2Vjb25kcy4gIFRha2UgdGhhdCB0aW1lIGFuZCByb3VuZCBpdCB1cC4gIE5vdyBwbGFjZSBhIGRlbGF5IGFmdGVyIHRoZSBjYWxsLgorCitGb3IgZXhhbXBsZSwgCisKK3ZvaWQgZGVtbyh2b2lkKSB7CisgICBjbG9ja190IHQxOworCisgICAvLyBnZXQgaW5pdGlhbCBjbG9jaworICAgdDEgPSBjbG9jaygpOworICAgCisgICAvLyBzb21lIFBLIGZ1bmN0aW9uCisgICAKKyAgIC8vIG5vdyBkZWxheSAKKyAgIHdoaWxlIChjbG9jaygpIDwgKHQxICsgMTAwKSk7CisgICAKKyAgIC8vIHRyYW5zbWl0IGRhdGEuLi4KKyAgIAorfQorCitUaGlzIGNvZGUgaGFzIHRoZSBlZmZlY3Qgb2YgdGFraW5nIGF0IGxlYXN0IDEwMCBtcyBhbHdheXMuICBJbiBlZmZlY3Qgc29tZW9uZSBhbmFseXppbmcgdGhlIHRyYWZmaWMgd2lsbCBzZWUgdGhhdCB0aGUKK29wZXJhdGlvbnMgYWx3YXlzIHRha2UgYSBmaXhlZCBhbW91bnQgb2YgdGltZS4gIFNpbmNlIG5vIHR3byBwbGF0Zm9ybXMgYXJlIHRoZSBzYW1lIHRoaXMgdHlwZSBvZiBmaXggaGFzIG5vdCBiZWVuIAoraW5jb3Jwb3JhdGVkIGludG8gbGlidG9tY3J5cHQgKG5vciBpcyBpdCBkZXNpcmVkIGZvciBtYW55IHBsYXRmb3JtcykuICBUaGlzIHJlcXVpcmVzIG9uIHRoZSBkZXZlbG9wZXJzIHBhcnQgdG8gcHJvZmlsZQordGhlIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBkZWxheXMgcmVxdWlyZWQuCisKK05vdGUgdGhhdCB0aGlzICJxdWljayIgZml4IGhhcyBubyBlZmZlY3QgYWdhaW5zdCBhbiBpbnRydXNpdmUgYXR0YWNrZXIuICBGb3IgZXhhbXBsZSwgcG93ZXIgY29uc3VtcHRpb24gd2lsbCBkcm9wCitzaWduaWZpY2FudGx5IGluIHRoZSBsb29wIGFmdGVyIHRoZSBvcGVyYXRpb24uICBIb3dldmVyLCB0aGlzIHR5cGUgb2YgZml4IGlzIG1vcmUgaW1wb3J0YW50IHRvIHNlY3VyZSB0aGUgdXNlciBvZiB0aGUgCithcHBsaWNhdGlvbi9kZXZpY2UuICBGb3IgZXhhbXBsZSwgYSB1c2VyIHBsYWNpbmcgYW4gb3JkZXIgb25saW5lIHdvbid0IHRyeSB0byBjaGVhdCB0aGVtc2VsdmVzIGJ5IGNyYWNraW5nIG9wZW4gdGhlaXIKK2RldmljZSBhbmQgcGVyZm9ybWluZyBzaWRlLWNoYW5uZWwgY3J5cHRhbmFseXNpcy4gIEFuIGF0dGFja2VyIG92ZXIgYSBuZXR3b3JrIG1pZ2h0IHRyeSB0byB1c2UgdGhlIHRpbWluZyBpbmZvcm1hdGlvbgorYWdhaW5zdCB0aGUgdXNlci4KKworCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9ub3Rlcy90ZWNoMDAwMy50eHQgYi9saWJ0b21jcnlwdC9ub3Rlcy90ZWNoMDAwMy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEyMTg2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L25vdGVzL3RlY2gwMDAzLnR4dApAQCAtMCwwICsxLDUyIEBACitUZWNoIE5vdGUgMDAwMworTWluaW1pemluZyBNZW1vcnkgVXNhZ2UKK1RvbSBTdCBEZW5pcworCitJbnRyb2R1Y3Rpb24KKy0tLS0tLS0tLS0tLQorCitGb3IgdGhlIG1vc3QgcGFydCB0aGUgbGlicmFyeSBjYW4gZ2V0IGJ5IHdpdGggYXJvdW5kIDIwS0Igb2Ygc3RhY2sgYW5kIGFib3V0IDMyS0Igb2YgaGVhcCBldmVuIGlmIHlvdSB1c2UgdGhlCitwdWJsaWMga2V5IGZ1bmN0aW9ucy4gIElmIGFsbCB5b3UgcGxhbiBvbiB1c2luZyBhcmUgdGhlIGhhc2hlcyBhbmQgY2lwaGVycyB0aGFuIG9ubHkgYWJvdXQgMUtCIG9mIHN0YWNrIGlzIHJlcXVpcmVkCithbmQgbm8gaGVhcC4KKworVG8gc2F2ZSBzcGFjZSBhbGwgb2YgdGhlIHN5bW1ldHJpYyBrZXkgc2NoZWR1bGVkIGtleXMgYXJlIHN0b3JlZCBpbiBhIHVuaW9uIGNhbGxlZCAic3ltbWV0cmljX2tleSIuICBUaGlzIG1lYW5zIHRoZSAKK3NpemUgb2YgYSBzeW1tZXRyaWNfa2V5IGlzIHRoZSBzaXplIG9mIHRoZSBsYXJnZXN0IHNjaGVkdWxlZCBrZXkuICBCeSByZW1vdmluZyB0aGUgY2lwaGVycyB5b3UgZG9uJ3QgdXNlIGZyb20KK3RoZSBidWlsZCB5b3UgY2FuIG1pbmltaXplIHRoZSBzaXplIG9mIHRoaXMgc3RydWN0dXJlLiAgRm9yIGluc3RhbmNlLCBieSByZW1vdmluZyBib3RoIFR3b2Zpc2ggYW5kIEJsb3dmaXNoIHRoZQorc2l6ZSByZWR1Y2VzIHRvIDc2OCBieXRlcyBmcm9tIHRoZSA0LDI1NiBieXRlcyBpdCB3b3VsZCBoYXZlIGJlZW4gKG9uIGEgMzItYml0IHBsYXRmb3JtKS4gIE9yIGlmIHlvdSByZW1vdmUKK0Jsb3dmaXNoIGFuZCB1c2UgVHdvZmlzaCB3aXRoIFRXT0ZJU0hfU01BTEwgZGVmaW5lZCBpdHMgc3RpbGwgNzY4IGJ5dGVzLiAgRXZlbiBhdCBpdHMgbGFyZ2VzdCB0aGUgc3RydWN0dXJlIGlzIG9ubHkgCis0S0Igd2hpY2ggaXMgbm9ybWFsbHkgbm90IGEgcHJvYmxlbSBmb3IgYW55IHBsYXRmb3JtLiAgCisKKworQ2lwaGVyIE5hbWUgfCBTaXplIG9mIHNjaGVkdWxlZCBrZXkgKGJ5dGVzKSB8CistLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKK1R3b2Zpc2ggICAgIHwgNCwyNTYgICAgICAgICAgICAgICAgICAgICAgICAgfAorQmxvd2Zpc2ggICAgfCA0LDE2OCAgICAgICAgICAgICAgICAgICAgICAgICB8CiszREVTICAgICAgICB8IDc2OCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK1NBRkVSKyAgICAgIHwgNTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorU2VycGVudCAgICAgfCA1MjggICAgICAgICAgICAgICAgICAgICAgICAgICB8CitSaWpuZGFlbCAgICB8IDUxNiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK1hURUEgICAgICAgIHwgMjU2ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorUkMyICAgICAgICAgfCAyNTYgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitERVMgICAgICAgICB8IDI1NiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK1NBRkVSIFsjXSAgIHwgMjE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorUkM1ICAgICAgICAgfCAyMDQgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitUd29maXNoIFsqXSB8IDE5MyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK1JDNiAgICAgICAgIHwgMTc2ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorQ0FTVDUgICAgICAgfCAxMzIgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitOb2VrZW9uICAgICB8IDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK1NraXBqYWNrICAgIHwgMTAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vCitNZW1vcnkgdXNlZCBwZXIgY2lwaGVyIG9uIGEgMzItYml0IHBsYXRmb3JtLgorCitbKl0gRm9yIFR3b2Zpc2ggd2l0aCBUV09GSVNIX1NNQUxMIGRlZmluZWQKK1sjXSBGb3IgYWxsIDY0LWJpdCBTQUZFUiBjaXBoZXJzLgorCitOb2VrZW9uIGlzIGEgZmFpcmx5IGZhc3QgY2lwaGVyIGFuZCB1c2VzIHZlcnkgbGl0dGxlIG1lbW9yeS4gIElkZWFsbHkgaW4gbG93LXJhbSBwbGF0Zm9ybXMgYWxsIG90aGVyIGNpcGhlcnMgc2hvdWxkIGJlCitsZWZ0IHVuZGVmaW5lZCBhbmQgTm9la2VvbiBzaG91bGQgcmVtYWluLiAgV2hpbGUgTm9la2VvbiBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBhIHNlY3VyZSBibG9jayBjaXBoZXIgKGl0IGlzIGluc2VjdXJlCithcyBhIGhhc2gpIENBU1Q1IGlzIHBlcmhhcHMgYSAicnVubmVyLXVwIiBjaG9pY2UuICBDQVNUNSBoYXMgYmVlbiBhcm91bmQgbG9uZ2VyIChpdCBpcyBhbHNvIGtub3duIGFzIENBU1QtMTI4KSBhbmQgaXMgCitmYWlybHkgZmFzdCBhcyB3ZWxsLgorCitZb3UgY2FuIGVhc2lseSBhY2NvbXBsaXNoIHRoaXMgdmlhIHRoZSAiY29uZmlnLnBsIiBzY3JpcHQuIFNpbXBseSBhbnN3ZXIgIm4iIHRvIGFsbCBvZiB0aGUgY2lwaGVycyBleGNlcHQgdGhlIG9uZSB5b3Ugd2FudAorYW5kIHRoZW4gcmVidWlsZCB0aGUgbGlicmFyeS4gIFtvciB5b3UgY2FuIGhhbmQgZWRpdCBteWNyeXB0X2N1c3RvbS5oXQorCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L25vdGVzL3RlY2gwMDA0LnR4dCBiL2xpYnRvbWNyeXB0L25vdGVzL3RlY2gwMDA0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWNkMzc4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvbm90ZXMvdGVjaDAwMDQudHh0CkBAIC0wLDAgKzEsOTEgQEAKK1RlY2ggTm90ZSAwMDA0CitVc2luZyBZYXJyb3csIEZvcnR1bmEgYW5kIFNPQkVSLTEyOAorVG9tIFN0IERlbmlzCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK1RoaXMgdGVjaCBub3RlIGV4cGxhaW5zIGhvdyB0byB1c2UgdGhyZWUgb2YgdGhlIG1vcmUgdXNlZnVsIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvcnMgYW5kIHRoZWlyIAorb3duIGxpdHRsZSAiaXNzdWVzIi4gIFdoaWxlIGFsbCBvZiB0aGUgUFJOR3MgaGF2ZSB0aGUgc2FtZSBBUEkgYW5kIGFyZSByb3VnaGx5IHVzZWQgaW4gdGhlIHNhbWUgCittYW5uZXIgdGhlaXIgZWZmZWN0aXZlbmVzcyByZWFsbHkgZGVwZW5kcyBvbiB0aGUgdXNlciBrbm93aW5nIGhvdyB0aGV5IHdvcmsuCisKKworWWFycm93CistLS0tLS0KKworWWFycm93IGlzIGJ5IGZhciB0aGUgc2ltcGxlc3Qgb2YgdGhlIFBSTkdzLiAgSXQgZ2F0aGVycyBiaXRzIG9mIGVudHJvcHkgYnkgaGFzaGluZyB0aGUgcG9vbCBzdGF0ZQorcGx1cyB0aGUgYWRkaXRpb25hbCBiaXRzIHN0b3JpbmcgdGhlIG1lc3NhZ2UgZGlnZXN0IGJhY2sgaW4gdGhlIHBvb2wuICBFLmcuCisKK3Bvb2wgPSBoYXNoKHBvb2wgfHwgbmV3Yml0cykKKworU2ltcGx5IGR1bXAgYml0cyBpbnRvIHRoZSBQUk5HIHZpYSB5YXJyb3dfYWRkX2VudHJvcHkoKSBhbmQgY2FsbCB5YXJyb3dfcmVhZHkoKSB3aGVuIHlvdSB3YW50IHRvIAorcHV0IHRoZW0gdG8gdXNlLiAgVGhpcyBQUk5HIHdoaWxlIHNpbXBsZSBpcyBub3QgZW50aXJlbHkgc2FmZS4gIEFuIGF0dGFja2VyIHdobyBsZWFybnMgdGhlIHN0YXRlCitvZiB0aGUgcG9vbCBhbmQgY2FuIGNvbnRyb2wgZnV0dXJlIGV2ZW50cyBjYW4gY29udHJvbCB0aGUgUFJORy4gIFRoaXMgcmVxdWlyZXMgYW4gYWN0aXZlIGF0dGFja2VyIGJ1dCAKK2lzbid0IGVudGlyZSBpbXBvc3NpYmxlLgorCitUaGUgcG9vbCBpcyB0aGVuIHVzZWQgYXMgYSBrZXkgZm9yIGEgY2lwaGVyIHRoYXQgaXMgdXNlZCBpbiBDVFIgbW9kZS4gIAorCitZYXJyb3cgaXMgbW9zdGx5IG1lYW50IGZvciBzaG9ydC10ZXJtIHByb2dyYW1zIFtlLmcuIGxpa2UgZmlsZSB1dGlsc10uICBUaGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24KK2lzIG5vdCBtZWFudCBmb3IgbG9uZy10ZXJtIHVzYWdlLgorCitGb3J0dW5hCistLS0tLS0tCisKK0ZvcnR1bmEgd2FzIGRlc2lnbmVkIGJ5IE5pZWxzIEZlcmd1c3NvbiBhbmQgQnJ1Y2UgU2NobmVpZXIgW0JydWNlIGlzIGFsc28gdGhlIGd1eSB3aG8gaW52ZW50ZWQgWWFycm93XS4gIEl0CitvcGVyYXRlcyBvbiBhIG1vcmUgZGVmZW5zaXZlIGxldmVsIHRoYW4gWWFycm93LiAgSW5zdGVhZCBvZiAxIGVudHJvcHkgcG9vbCBpdCBoYXMgMzIgYW5kIHRoZSBuZXcgZW50cm9weSAKK2lzIHNwcmVhZCBbcm91bmQgcm9iaW5dIGluIGFsbCBvZiB0aGUgcG9vbHMuIAorCitUaGF0IGlzLCBlYWNoIGNhbGwgdG8gZm9ydHVuYV9hZGRfZW50cm9weSgpIHB1dHMgdGhlIGJpdHMgaW4gdGhlIG5leHQgW2luIHRoZSBzZXF1ZW5lY2VdIHBvb2wgb2YgZW50cm9weS4gIAorRWZmZWN0aXZlIGJpdHMgYXJlIGFkZGVkIHRvIHRoZSBwb29sIGJ5IHNlbmRpbmcgdGhlbSB0aHJvdWdoIGEgaGFzaCBbYnV0IG5vdCB0ZXJtaW5hdGluZyB0aGUgaGFzaF0uICAKKworSGVyZSdzIHRoZSBtYWluIGNhdGNoIHRob3VnaC4gIFdoZW4gdGhlIFBSTkcgbXVzdCBiZSByZXNlZWRlZCBbc28gdGhhdCB5b3UgY2FuIGV4dHJhY3QgYml0cyBmcm9tIGl0XSBvbmx5CitjZXJ0YWluIHBvb2xzIGFyZSB1c2VkLiAgTW9yZSBwcmVjaXNlbHkgdGhlIGkndGggcG9vbCBpcyB1c2VkIGV2ZXJ5IDIqKmkndGggcmVzZWVkaW5nLiAgRm9yIGV4YW1wbGUsIHBvb2xbMF0KK2lzIGFsd2F5cyB1c2VkLiAgcG9vbFsxXSBpcyB1c2VkIGV2ZXJ5IHNlY29uZCByZXNlZWRpbmcsIHBvb2xbMl0gZXZlcnkgZm91cnRoLgorCitUaGUgcG9vbHMgYXJlIGhhc2hlZCB0b2dldGhlciBhbG9uZyB3aXRoIHRoZSBjdXJyZW50IGtleSBhbmQgdGhlIHJlc3VsdCBpcyB0aGUgbmV3IGtleSBmb3IgYSBjaXBoZXIgd2hpY2gKK29wZXJhdGVzIGluIENUUiBtb2RlIFttb3JlIGFib3V0IHRoYXQgaW4gYSBzZWNdLgorCitOb3cgdGhpcyBtYXkgc2VlbSBvZGQgYXQgZmlyc3QgaG93ZXZlciB0aGVyZSBpcyBhIGdvb2QgcmVhc29uIGJlaGluZCBpdC4gIEFuIGF0dGFja2VyIHdobyBsZWFybnMgcG9vbFswXSB3b24ndAorc3RyaWN0bHkga25vdyB0aGUgb3RoZXIgcG9vbHMuICBTbyB0aGUgcmVjb3ZlcnkgcmF0ZSBvZiBpcyBub3QgMC4gIEluIGZhY3QgcG9vbFswXSBjYW4gYmUgY29tcGxldGVseSAKK2NvbXByb21pc2VkIGFuZCB0aGUgUFJORyB3aWxsIHN0aWxsIGV2ZW50dWFsbHkgcmVjb3Zlci4gIFRoZSB2YWx1ZSBGT1JUVU5BX1dEIGlzIHRoZSAiV2F0Y2hEb2ciIGNvdW50ZXIuCitFdmVyeSBGT1JUVU5BX1dEIGNhbGxzIHRvIGZvcnR1bmFfcmVhZCB3aWxsIGludm9rZSB0aGUgcmVzZWVkIG9wZXJhdGlvbi4gIEJ5IGRlZmF1bHQgdGhpcyBpcyBzZXQgdG8gMTAgd2hpY2ggCittZWFucyBhZnRlciAxMCBjYWxscyB0aGUgUFJORyB3aWxsIHJlc2VlZCBpdHNlbGYuICAKKworVGhlIHBvb2xzIGFyZSBjb21iaW5lZCB3aXRoIHRoZSBydW5uaW5nIGNpcGhlciBrZXkgWzI1NiBiaXRzXSBzbyB0aGF0IGEgY2lwaGVyIGluIENUUiBtb2RlIGNhbiBwcm9kdWNlIAordGhlIHN0cmVhbS4gIFVubGlrZSBZYXJyb3cgdGhlIGNpcGhlciBpcyByZS1rZXllZCBhZnRlciBldmVyeSBjYWxsIHRvIGZvcnR1bmFfcmVhZCgpIFtzbyBvbmUgYmlnIGNhbGwgCit3b3VsZCBiZSBmYXN0ZXIgdGhhbiBtYW55IHNtYWxsZXIgY2FsbHNdLiAgVGhpcyBwcmV2ZW50cyB0b28gbXVjaCBkYXRhIGJlaW5nIGVuY3J5cHRlZCB1bmRlciB0aGUgc2FtZQora2V5IFthbmQgbWl0aWdhdGVzIGEgZmxhdyBpbiBDVFIgbW9kZSB0aGF0IHRoZSBzYW1lIGJsb2NrIGNhbid0IGJlIGVtaXR0ZWQgdHdpY2UgdW5kZXIgdGhlIHNhbWUga2V5XS4KKworRm9ydHVuYSBpcyByZWFsbHkgbWVhbnQgZm9yIGEga2VybmVsLWxldmVsIFBSTkcuICBUaGUgbW9yZSBzb3VyY2VzIFthbmQgb2Z0ZW5dIHlvdSBmZWVkIGludG8gaXQgdGhlIAoraGVhbHRoaWVyIGl0IHdpbGwgYmUuICBJdCdzIGFsc28gbWVhbnQgdG8gYmUgdXNlZCBmb3IgbG9uZyB0ZXJtIHB1cnBvc2VzLiAgU2luY2UgaXQgY2FuIHJlY292ZXIgZnJvbQorY29tcHJvbWlzZXMgaXQgaXMgaGFyZGVyIHRvIGNvbnRyb2wgaXQuICAKKworU09CRVItMTI4CistLS0tLS0KKworU09CRVItMTI4IGlzIGFjdHVhbGx5IGEgc3RyZWFtIGNpcGhlciBidXQgbGlrZSBtb3N0IGNpcGhlcnMgY2FuIGVhc2lseSBiZSBtb2RlbGxlZCBpbiB0aGUgY29udGV4dCBvZiBhIFBSTkcuCitUaGlzIFBSTkcgaXMgZXh0cmVtZWx5IGZhc3QgWzQgY3ljbGVzL2J5dGUgb24gYSBQNF0gYW5kIHdhcyBkZXNpZ25lZCBieSBhIHdlbGwga25vd24gY3J5cHRvZ3JhcGhlciBbR3JlZyBSb3NlXS4KKworU09CRVItMTI4IGRvZXNuJ3QgcmVhbGx5ICJhY3QiIGxpa2UgdGhlIG90aGVyIHR3byBQUk5Hcy4gIEl0J3MgbWVhbnQgdG8gYmUgc2VlZGVkIG9uY2UgYW5kIHRoZW4gcmVhZCBhcyAKK3JlcXVpcmVkLiAgSW4gc3VjaCBhIHNlbnNlIGl0IGlzbid0IGEgInN5c3RlbSBQUk5HIiBidXQgdXNlZnVsIHNob3J0IHRlcm0gcHVycG9zZXMuICBJbiBwYXJ0aWN1bGFyCit0aGUgc29iZXIxMjhfcmVhZCgpIGZ1bmN0aW9uIGFjdHVhbGx5IFhPUnMgYWdhaW5zdCB0aGUgaW5wdXQgYnVmZmVyIHlvdSBzcGVjaWZ5LiAgVGhpcyBhbGxvd3MgdGhlIAorcmVhZCgpIGZ1bmN0aW9uIHRvIGJlIHVzZWQgYXMgYW4gImVuY3J5cHQiIGZ1bmN0aW9uIGFzIHdlbGwuICAKKworWW91IGNhbiBvbmx5IGtleSBTT0JFUi0xMjggb25jZSBbYnkgY2FsbGluZyBzb2JlcjEyOF9hZGRfZW50cm9weSgpXS4gIE9uY2UgaXQgaXQgaXMga2V5ZWQgc3Vic2VxdWVudAorY2FsbHMgdG8gYWRkX2VudHJvcHkoKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSAicmUtSVYiIG9wZXJhdGlvbi4gIENoYW5naW5nIHRoZSBJViBhbGxvd3MgeW91IHRvIHVzZSBzYW1lCitpbml0aWFsIGtleSBhbmQgbm90IHByb2R1Y2UgdGhlIHNhbWUgb3V0cHV0IHN0cmVhbS4gIEl0IGFsc28gbGV0cyB5b3UgZGlmZmVyZW50aWF0ZSBwYWNrZXRzLiAgRS5nLiBlYWNoCitwYWNrZXQgaGFzIGl0J3Mgb3duIElWLgorCitBbGwgaW5wdXRzIHRvIHNvYmVyMTI4X2FkZF9lbnRyb3B5KCkgbXVzdCBoYXZlIGEgbGVuZ3RoIHRoYXQgaXMgYSBtdWx0aXBsZSBvZiBmb3VyLgorCitPdmVyYWxsCistLS0tLS0tCisKK1NpbmNlIFNPQkVSLTEyOCBpcyAqbXVjaCogZmFzdGVyIHRoYW4gdGhlIG90aGVyIHR3byBQUk5HcyBhIGdvb2Qgc2V0dXAgd291bGQgYmUgdG8gdXNlIEZvcnR1bmEgYXMgeW91ciAKK3N5c3RlbS13aWRlIFBSTkcgYW5kIHVzZSBTT0JFUi0xMjggW2tleSdlZCBmcm9tIEZvcnR1bmFdIGZvciBlbmNyeXB0aW5nIHN0cmVhbXMgb3IgYXMgYSBQUk5HIGZvciAKK3NpbXVsYXRpb25zLgorCitZYXJyb3cgaXMgc3RpbGwgYSBnb29kIGNhbmRpZGF0ZSBidXQgb25seSBmb3IgInNob3J0IGxpdmVkIiBwcm9ncmFtcy4gIEhvd2V2ZXIsIHNpbmNlIEZvcnR1bmEgaXMgZmFzdGVyCitbYnkgYWJvdXQgMTAgY3ljbGVzL2J5dGUgb24gYSBQNF0gSSdkIHVzZSBGb3J0dW5hIGFueXdheXMuLi4KKworVG9tClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvbm90ZXMvdGVjaDAwMDUudHh0IGIvbGlidG9tY3J5cHQvbm90ZXMvdGVjaDAwMDUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMTBhNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9ub3Rlcy90ZWNoMDAwNS50eHQKQEAgLTAsMCArMSwyMCBAQAorVGVjaCBOb3RlIDAwMDUKK01pbmltaXppbmcgQ29kZSBTcGFjZQorVG9tIFN0IERlbmlzCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK1R3ZWFraW5nLi4uCisKK1lvdSBjYW4gZGlzYWJsZSB3aG9sZSBjbGFzc2VzIG9mIGFsZ29yaXRobXMgb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBMVENfTk9fKiBkZWZpbmVzLiAgRnJvbSB0aGVyZSB5b3UgY2FuIG1hbnVhbGx5IHR1cm4gb24gd2hhdCB5b3Ugd2FudCB0byBlbmFibGUuICAKKworVGhlIGZvbGxvd2luZyBidWlsZCB3aXRoIEdDQyAzLjQuNCBvbiBhbiBBTUQ2NCBib3ggZ2V0cyB5b3UgQUVTLCBDVFIgbW9kZSwgU0hBLTI1NiwgSE1BQywgWWFycm93LCBmdWxsIFJTQSBQS0NTICMxLCBQS0NTICM1IGFuZCBBU04uMSBERVIgaW4gCityb3VnaGx5IDQwS0Igb2YgY29kZSAoNDlLQiBvbiB0aGUgQVJNdjQpIChib3RoIGV4Y2x1ZGluZyB0aGUgbWF0aCBsaWJyYXJ5KS4KKworQ0ZMQUdTPSItRExUQ19OT19DSVBIRVJTIC1ETFRDX05PX0hBU0hFUyAtRExUQ19OT19QUk5HUyAtRExUQ19OT19NQUNTIC1ETFRDX05PX01PREVTIC1ETFRDX05PX1BLIC1EUklKTkRBRUwgLURMVENfQ1RSX01PREUgLURTSEEyNTYgXAorLURMVENfSE1BQyAtRFlBUlJPVyAtRE1SU0EgLURNUEkgLURURk1fREVTQyAtREFSR1RZUEU9MyAtT3MgLURMVENfU01BTExfQ09ERSAtZm9taXQtZnJhbWUtcG9pbnRlciIgbWFrZSBJR05PUkVfU1BFRUQ9MQorCitPYnZpb3VzbHkgdGhpcyB3b24ndCBnZXQgeW91IHBlcmZvcm1hbmNlIGJ1dCBpZiB5b3UgbmVlZCB0byBwYWNrIGEgY3J5cHRvIGxpYiBpbiBhIGRldmljZSB3aXRoIGxpbWl0ZWQgbWVhbnMgaXQncyBtb3JlIHRoYW4gZW5vdWdoLi4uCisKK05lYXRvIGVoPwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvbm90ZXMvdGVjaDAwMDYudHh0IGIvbGlidG9tY3J5cHQvbm90ZXMvdGVjaDAwMDYudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYmU4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9ub3Rlcy90ZWNoMDAwNi50eHQKQEAgLTAsMCArMSw5MSBAQAorVGVjaCBOb3RlIDAwMDYKK1BLIFN0YW5kYXJkcyBDb21wbGlhbmNlCitUb20gU3QgRGVuaXMKKworUlNBCistLS0tCisKK1BLQ1MgIzEgY29tcGxpYW5jZS4KKworS2V5IEZvcm1hdDogIFJTQVB1YmxpY0tleSBhbmQgUlNBUHJpdmF0ZUtleSBhcyBwZXIgUEtDUyAjMSB2Mi4xCitFbmNyeXB0aW9uOiAgT0FFUCBhcyBwZXIgUEtDUyAjMQorU2lnbmF0dXJlIDogIFBTUyAgYXMgcGVyIFBLQ1MgIzEKKworRFNBCistLS0tCisKK1RoZSBOSVNUIERTQSBhbGdvcml0aG0KKworS2V5IEZvcm1hdDogIEhvbWVCcmV3IFtzZWUgYmVsb3ddCitTaWduYXR1cmUgOiAgQU5TSSBYOS42MiBmb3JtYXQgW3NlZSBiZWxvd10uCisKK0tleXMgYXJlIHN0b3JlZCBhcyAKKworRFNBUHVibGljS2V5IDo6PSBTRVFVRU5DRSB7CisgICAgcHVibGljRmxhZ3MgICAgQklUIFNUUklORygxKSwgLS0gbXVzdCBiZSAwCisgICAgZyAgICAgICAgICAgICAgSU5URUdFUiAgICAgICwgLS0gYmFzZSBnZW5lcmF0b3IsIGNoZWNrIHRoYXQgZ15xIG1vZCBwID09IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBhbmQgdGhhdCAxIDwgZyA8IHAgLSAxCisgICAgcCAgICAgICAgICAgICAgSU5URUdFUiAgICAgICwgLS0gcHJpbWUgbW9kdWx1cyAKKyAgICBxICAgICAgICAgICAgICBJTlRFR0VSICAgICAgLCAtLSBvcmRlciBvZiBzdWItZ3JvdXAgKG11c3QgYmUgcHJpbWUpCisgICAgeSAgICAgICAgICAgICAgSU5URUdFUiAgICAgICwgLS0gcHVibGljIGtleSwgc3BlY2lmaWNhbGx5LCBnXnggbW9kIHAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGNoZWNrIHRoYXQgeV5xIG1vZCBwID09IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBhbmQgdGhhdCAxIDwgeSA8IHAgLSAxCit9CisKK0RTQVByaXZhdGVLZXkgOjo9IFNFUVVFTkNFIHsKKyAgICBwdWJsaWNGbGFncyAgICBCSVQgU1RSSU5HKDEpLCAtLSBtdXN0IGJlIDEKKyAgICBnICAgICAgICAgICAgICBJTlRFR0VSICAgICAgLCAtLSBiYXNlIGdlbmVyYXRvciwgY2hlY2sgdGhhdCBnXnEgbW9kIHAgPT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGFuZCB0aGF0IDEgPCBnIDwgcCAtIDEKKyAgICBwICAgICAgICAgICAgICBJTlRFR0VSICAgICAgLCAtLSBwcmltZSBtb2R1bHVzIAorICAgIHEgICAgICAgICAgICAgIElOVEVHRVIgICAgICAsIC0tIG9yZGVyIG9mIHN1Yi1ncm91cCAobXVzdCBiZSBwcmltZSkKKyAgICB5ICAgICAgICAgICAgICBJTlRFR0VSICAgICAgLCAtLSBwdWJsaWMga2V5LCBzcGVjaWZpY2FsbHksIGdeeCBtb2QgcCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gY2hlY2sgdGhhdCB5XnEgbW9kIHAgPT0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGFuZCB0aGF0IDEgPCB5IDwgcCAtIDEKKyAgICB4ICAgICAgICAgICAgICBJTlRFR0VSICAgICAgICAtLSBwcml2YXRlIGtleQorfQorCitTaWduYXR1cmVzIGFyZSBzdG9yZWQgYXMgCisKK0RTQVNpZ25hdHVyZSA6Oj0gU0VRVUVOQ0UgeworICAgIHIsIHMgICAgICAgICAgIElOVEVHRVIgICAgICAgIC0tIHNpZ25hdHVyZSBwYXJhbWV0ZXJzCit9CisKK0VDQworLS0tLQorCitUaGUgQU5TSSBYOS42MiBhbmQgWDkuNjMgYWxnb3JpdGhtcyBbcGFydGlhbF0uICBTdXBwb3J0cyBhbGwgTklTVCBHRihwKSBjdXJ2ZXMuCisKK0tleSBGb3JtYXQgICA6ICBIb21lYnJldyBbc2VlIGJlbG93LCBvbmx5IEdGKHApIE5JU1QgY3VydmVzIHN1cHBvcnRlZF0KK1NpZ25hdHVyZSAgICA6ICBYOS42MiBjb21wbGlhbnQKK0VuY3J5cHRpb24gICA6ICBIb21lYnJldyBbYmFzZWQgb24gWDkuNjMsIGRpZmZlcnMgaW4gdGhhdCB0aGUgcHVibGljIHBvaW50IGlzIHN0b3JlZCBhcyBhbiBFQ0NQdWJsaWNLZXldCitTaGFyZWQgU2VjcmV0OiAgWDkuNjMgY29tcGxpYW50CisKK0VDQ1B1YmxpY0tleSA6Oj0gU0VRVUVOQ0UgeworICAgIGZsYWdzICAgICAgIEJJVCBTVFJJTkcoMSksIC0tIHB1YmxpYy9wcml2YXRlIGZsYWcgKGFsd2F5cyB6ZXJvKSwgCisgICAga2V5U2l6ZSAgICAgSU5URUdFUiwgICAgICAgLS0gQ3VydmUgc2l6ZSAoaW4gYml0cykgZGl2aWRlZCBieSBlaWdodCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBhbmQgcm91bmRlZCBkb3duLCBlLmcuIDUyMSA9PiA2NQorICAgIHB1YmtleS54ICAgIElOVEVHRVIsICAgICAgIC0tIFRoZSBYIGNvLW9yZGluYXRlIG9mIHRoZSBwdWJsaWMga2V5IHBvaW50CisgICAgcHVia2V5LnkgICAgSU5URUdFUiwgICAgICAgLS0gVGhlIFkgY28tb3JkaW5hdGUgb2YgdGhlIHB1YmxpYyBrZXkgcG9pbnQKK30KKworRUNDUHJpdmF0ZUtleSA6Oj0gU0VRVUVOQ0UgeworICAgIGZsYWdzICAgICAgIEJJVCBTVFJJTkcoMSksIC0tIHB1YmxpYy9wcml2YXRlIGZsYWcgKGFsd2F5cyBvbmUpLCAKKyAgICBrZXlTaXplICAgICBJTlRFR0VSLCAgICAgICAtLSBDdXJ2ZSBzaXplIChpbiBiaXRzKSBkaXZpZGVkIGJ5IGVpZ2h0IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGFuZCByb3VuZGVkIGRvd24sIGUuZy4gNTIxID0+IDY1CisgICAgcHVia2V5LnggICAgSU5URUdFUiwgICAgICAgLS0gVGhlIFggY28tb3JkaW5hdGUgb2YgdGhlIHB1YmxpYyBrZXkgcG9pbnQKKyAgICBwdWJrZXkueSAgICBJTlRFR0VSLCAgICAgICAtLSBUaGUgWSBjby1vcmRpbmF0ZSBvZiB0aGUgcHVibGljIGtleSBwb2ludAorICAgIHNlY3JldC5rICAgIElOVEVHRVIsICAgICAgIC0tIFRoZSBzZWNyZXQga2V5IHNjYWxhcgorfQorCitUaGUgZW5jcnlwdGlvbiB3b3JrcyBieSBmaW5kaW5nIHRoZSBYOS42MyBzaGFyZWQgc2VjcmV0IGFuZCBoYXNoaW5nIGl0LiAgVGhlIGhhc2ggaXMgdGhlbiBzaW1wbHkgWE9SJ2VkIGFnYWluc3QgdGhlIG1lc3NhZ2UgW3doaWNoIG11c3QgYmUgYXQgbW9zdCB0aGUgc2l6ZQorb2YgdGhlIGhhc2ggZGlnZXN0XS4gIFRoZSBmb3JtYXQgb2YgdGhlIGVuY3J5cHRlZCB0ZXh0IGlzIGFzIGZvbGxvd3MKKworRUNDRW5jcnlwdGVkIDo6PSBTRVFVRU5DRSB7CisgICAgaGFzaE9JRCAgICAgT0JKRUNUIElERU5USUZJRVIsICAgLS0gVGhlIE9JRCBvZiB0aGUgaGFzaCB1c2VkCisgICAgcHVia2V5ICAgICAgT0NURVQgU1RSSU5HICAgICAsICAgLS0gRW5jYXBzdWxhdGlvbiBvZiBhIHJhbmRvbSBFQ0NQdWJsaWNLZXkKKyAgICBza2V5ICAgICAgICBPQ1RFVCBTVFJJTkcgICAgICAgICAtLSBUaGUgZW5jcnlwdGVkIHRleHQgKHdoaWNoIHRoZSBoYXNoIHdhcyBYT1InZWQgYWdhaW5zdCkKK30KKworJSAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9ub3Rlcy90ZWNoMDAwNi50eHQsdiAkICAgCislICRSZXZpc2lvbjogMS4yICQgICAKKyUgJERhdGU6IDIwMDUvMDYvMTggMDI6MjY6MjcgJCAKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L25vdGVzL3RlY2gwMDA3LnR4dCBiL2xpYnRvbWNyeXB0L25vdGVzL3RlY2gwMDA3LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDliZDQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvbm90ZXMvdGVjaDAwMDcudHh0CkBAIC0wLDAgKzEsNSBAQAorVGVjaCBOb3RlICM3CitRdWljayBidWlsZGluZyBmb3IgdGVzdGluZyB3aXRoIExUTQorCitFWFRSQUxJQlM9LWx0b21tYXRoIENGTEFHUz0iLWczIC1ETFRDX05PX0FTTSAtRFVTRV9MVE0gLURMVE1fREVTQyIgbWFrZSAtajMgSUdOT1JFX1NQRUVEPTEgdGVzdAorCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9wYXJzZW5hbWVzLnBsIGIvbGlidG9tY3J5cHQvcGFyc2VuYW1lcy5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjFmMDM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvcGFyc2VuYW1lcy5wbApAQCAtMCwwICsxLDI2IEBACisjIS91c3IvYmluL3BlcmwKKyMKKyMgU3BsaXRzIHRoZSBsaXN0IG9mIGZpbGVzIGFuZCBvdXRwdXRzIGZvciBtYWtlZmlsZSB0eXBlIGZpbGVzIAorIyB3cmFwcGVkIGF0IDgwIGNoYXJzIAorIyAKKyMgVG9tIFN0IERlbmlzCitAYSA9IHNwbGl0KCIgIiwgJEFSR1ZbMV0pOworJGIgPSAiJEFSR1ZbMF09IjsKKyRsZW4gPSBsZW5ndGgoJGIpOworcHJpbnQgJGI7Citmb3JlYWNoIG15ICRvYmogKEBhKSB7CisgICAkbGVuID0gJGxlbiArIGxlbmd0aCgkb2JqKTsKKyAgICRvYmogPX4gcy9cKi9cJC87CisgICBpZiAoJGxlbiA+IDEwMCkgeworICAgICAgcHJpbnRmICJcXFxuIjsKKyAgICAgICRsZW4gPSBsZW5ndGgoJG9iaik7CisgICB9CisgICBwcmludCAiJG9iaiAiOworfQoraWYgKCRBUkdWWzBdIGVxICJIRUFERVJTIikgeyBwcmludCAidGVzdHByb2YvdG9tY3J5cHRfdGVzdC5oIjsgfQorCitwcmludCAiXG5cbiI7CisKKyMgJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvcGFyc2VuYW1lcy5wbCx2ICQgICAKKyMgJFJldmlzaW9uOiAxLjMgJCAgIAorIyAkRGF0ZTogMjAwNS8wNS8wNSAxNDo0OToyNyAkIApkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvcnVuLnNoIGIvbGlidG9tY3J5cHQvcnVuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkOTgyZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9ydW4uc2gKQEAgLTAsMCArMSwzNSBAQAorIyEvYmluL2Jhc2gKK2Jhc2ggYnVpbGQuc2ggIiAkMSIgIiQyIC1PMiIgIiQzIElHTk9SRV9TUEVFRD0xIiAiJDQiICIkNSIKK2lmIFsgLWEgdGVzdG9rLnR4dCBdICYmIFsgLWYgdGVzdG9rLnR4dCBdOyB0aGVuCisgICBlY2hvCitlbHNlCisJZWNobworCWVjaG8gIlRlc3QgZmFpbGVkIgorCWV4aXQgMQorZmkKKworcm0gLWYgdGVzdG9rLnR4dAorYmFzaCBidWlsZC5zaCAiICQxIiAiJDIgLU9zIiAiICQzIElHTk9SRV9TUEVFRD0xIExUQ19TTUFMTD0xIiAiJDQiICIkNSIKK2lmIFsgLWEgdGVzdG9rLnR4dCBdICYmIFsgLWYgdGVzdG9rLnR4dCBdOyB0aGVuCisgICBlY2hvCitlbHNlCisJZWNobworCWVjaG8gIlRlc3QgZmFpbGVkIgorCWV4aXQgMQorZmkKKworcm0gLWYgdGVzdG9rLnR4dAorYmFzaCBidWlsZC5zaCAiICQxIiAiICQyIiAiICQzICIgIiQ0IiAiJDUiCitpZiBbIC1hIHRlc3Rvay50eHQgXSAmJiBbIC1mIHRlc3Rvay50eHQgXTsgdGhlbgorICAgZWNobworZWxzZQorCWVjaG8KKwllY2hvICJUZXN0IGZhaWxlZCIKKwlleGl0IDEKK2ZpCisKK2V4aXQgMAorCisjICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3J1bi5zaCx2ICQgICAKKyMgJFJldmlzaW9uOiAxLjE1ICQgICAKKyMgJERhdGU6IDIwMDUvMDcvMjMgMTQ6MTg6MzEgJCAKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2Flcy9hZXMuYyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2Flcy9hZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDc5OGU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvYWVzL2Flcy5jCkBAIC0wLDAgKzEsNzYyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBBRVMgaW1wbGVtZW50YXRpb24gYnkgVG9tIFN0IERlbmlzCisgKgorICogRGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIHNvdXJjZSBjb2RlIGJ5CisgCistLS0gIAorICAqIHJpam5kYWVsLWFsZy1mc3QuYworICAqCisgICogQHZlcnNpb24gMy4wIChEZWNlbWJlciAyMDAwKQorICAqCisgICogT3B0aW1pc2VkIEFOU0kgQyBjb2RlIGZvciB0aGUgUmlqbmRhZWwgY2lwaGVyIChub3cgQUVTKQorICAqCisgICogQGF1dGhvciBWaW5jZW50IFJpam1lbiA8dmluY2VudC5yaWptZW5AZXNhdC5rdWxldXZlbi5hYy5iZT4KKyAgKiBAYXV0aG9yIEFudG9vbiBCb3NzZWxhZXJzIDxhbnRvb24uYm9zc2VsYWVyc0Blc2F0Lmt1bGV1dmVuLmFjLmJlPgorICAqIEBhdXRob3IgUGF1bG8gQmFycmV0byA8cGF1bG8uYmFycmV0b0B0ZXJyYS5jb20uYnI+CistLS0KKyAqLworLyoqCisgIEBmaWxlIGFlcy5jCisgIEltcGxlbWVudGF0aW9uIG9mIEFFUworKi8gICAKKworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBSSUpOREFFTAorCisjaWZuZGVmIEVOQ1JZUFRfT05MWSAKKworI2RlZmluZSBTRVRVUCAgICByaWpuZGFlbF9zZXR1cAorI2RlZmluZSBFQ0JfRU5DICByaWpuZGFlbF9lY2JfZW5jcnlwdAorI2RlZmluZSBFQ0JfREVDICByaWpuZGFlbF9lY2JfZGVjcnlwdAorI2RlZmluZSBFQ0JfRE9ORSByaWpuZGFlbF9kb25lCisjZGVmaW5lIEVDQl9URVNUIHJpam5kYWVsX3Rlc3QKKyNkZWZpbmUgRUNCX0tTICAgcmlqbmRhZWxfa2V5c2l6ZQorCisjaWYgMAorY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciByaWpuZGFlbF9kZXNjID0KK3sKKyAgICAicmlqbmRhZWwiLAorICAgIDYsCisgICAgMTYsIDMyLCAxNiwgMTAsCisgICAgU0VUVVAsIEVDQl9FTkMsIEVDQl9ERUMsIEVDQl9URVNULCBFQ0JfRE9ORSwgRUNCX0tTLAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKK307CisjZW5kaWYKKworY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBhZXNfZGVzYyA9Cit7CisgICAgImFlcyIsCisgICAgNiwKKyAgICAxNiwgMzIsIDE2LCAxMCwKKyAgICBTRVRVUCwgRUNCX0VOQywgRUNCX0RFQywgRUNCX1RFU1QsIEVDQl9ET05FLCBFQ0JfS1MsCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfTsKKworI2Vsc2UKKworI2RlZmluZSBTRVRVUCAgICByaWpuZGFlbF9lbmNfc2V0dXAKKyNkZWZpbmUgRUNCX0VOQyAgcmlqbmRhZWxfZW5jX2VjYl9lbmNyeXB0CisjZGVmaW5lIEVDQl9LUyAgIHJpam5kYWVsX2VuY19rZXlzaXplCisjZGVmaW5lIEVDQl9ET05FIHJpam5kYWVsX2VuY19kb25lCisKK2NvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgcmlqbmRhZWxfZW5jX2Rlc2MgPQoreworICAgICJyaWpuZGFlbCIsCisgICAgNiwKKyAgICAxNiwgMzIsIDE2LCAxMCwKKyAgICBTRVRVUCwgRUNCX0VOQywgTlVMTCwgTlVMTCwgRUNCX0RPTkUsIEVDQl9LUywKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9OworCitjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIGFlc19lbmNfZGVzYyA9Cit7CisgICAgImFlcyIsCisgICAgNiwKKyAgICAxNiwgMzIsIDE2LCAxMCwKKyAgICBTRVRVUCwgRUNCX0VOQywgTlVMTCwgTlVMTCwgRUNCX0RPTkUsIEVDQl9LUywKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9OworCisjZW5kaWYKKworI2luY2x1ZGUgImFlc190YWIuYyIKKworc3RhdGljIHVsb25nMzIgc2V0dXBfbWl4KHVsb25nMzIgdGVtcCkKK3sKKyAgIHJldHVybiAoVGU0XzNbYnl0ZSh0ZW1wLCAyKV0pIF4KKyAgICAgICAgICAoVGU0XzJbYnl0ZSh0ZW1wLCAxKV0pIF4KKyAgICAgICAgICAoVGU0XzFbYnl0ZSh0ZW1wLCAwKV0pIF4KKyAgICAgICAgICAoVGU0XzBbYnl0ZSh0ZW1wLCAzKV0pOworfQorCisjaWZuZGVmIEVOQ1JZUFRfT05MWQorI2lmZGVmIExUQ19TTUFMTF9DT0RFCitzdGF0aWMgdWxvbmczMiBzZXR1cF9taXgyKHVsb25nMzIgdGVtcCkKK3sKKyAgIHJldHVybiBUZDAoMjU1ICYgVGU0W2J5dGUodGVtcCwgMyldKSBeCisgICAgICAgICAgVGQxKDI1NSAmIFRlNFtieXRlKHRlbXAsIDIpXSkgXgorICAgICAgICAgIFRkMigyNTUgJiBUZTRbYnl0ZSh0ZW1wLCAxKV0pIF4KKyAgICAgICAgICBUZDMoMjU1ICYgVGU0W2J5dGUodGVtcCwgMCldKTsKK30KKyNlbmRpZgorI2VuZGlmCisKKyAvKioKKyAgICBJbml0aWFsaXplIHRoZSBBRVMgKFJpam5kYWVsKSBibG9jayBjaXBoZXIKKyAgICBAcGFyYW0ga2V5IFRoZSBzeW1tZXRyaWMga2V5IHlvdSB3aXNoIHRvIHBhc3MKKyAgICBAcGFyYW0ga2V5bGVuIFRoZSBrZXkgbGVuZ3RoIGluIGJ5dGVzCisgICAgQHBhcmFtIG51bV9yb3VuZHMgVGhlIG51bWJlciBvZiByb3VuZHMgZGVzaXJlZCAoMCBmb3IgZGVmYXVsdCkKKyAgICBAcGFyYW0gc2tleSBUaGUga2V5IGluIGFzIHNjaGVkdWxlZCBieSB0aGlzIGZ1bmN0aW9uLgorICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgU0VUVVAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgICBpbnQgaSwgajsKKyAgICB1bG9uZzMyIHRlbXAsICpyazsKKyNpZm5kZWYgRU5DUllQVF9PTkxZCisgICAgdWxvbmczMiAqcnJrOworI2VuZGlmICAgIAorICAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisgIAorICAgIGlmIChrZXlsZW4gIT0gMTYgJiYga2V5bGVuICE9IDI0ICYmIGtleWxlbiAhPSAzMikgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICAgfQorICAgIAorICAgIGlmIChudW1fcm91bmRzICE9IDAgJiYgbnVtX3JvdW5kcyAhPSAoMTAgKyAoKGtleWxlbi84KS0yKSoyKSkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1JPVU5EUzsKKyAgICB9CisgICAgCisgICAgc2tleS0+cmlqbmRhZWwuTnIgPSAxMCArICgoa2V5bGVuLzgpLTIpKjI7CisgICAgICAgIAorICAgIC8qIHNldHVwIHRoZSBmb3J3YXJkIGtleSAqLworICAgIGkgICAgICAgICAgICAgICAgID0gMDsKKyAgICByayAgICAgICAgICAgICAgICA9IHNrZXktPnJpam5kYWVsLmVLOworICAgIExPQUQzMkgocmtbMF0sIGtleSAgICAgKTsKKyAgICBMT0FEMzJIKHJrWzFdLCBrZXkgKyAgNCk7CisgICAgTE9BRDMySChya1syXSwga2V5ICsgIDgpOworICAgIExPQUQzMkgocmtbM10sIGtleSArIDEyKTsKKyAgICBpZiAoa2V5bGVuID09IDE2KSB7CisgICAgICAgIGogPSA0NDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdGVtcCAgPSBya1szXTsKKyAgICAgICAgICAgIHJrWzRdID0gcmtbMF0gXiBzZXR1cF9taXgodGVtcCkgXiByY29uW2ldOworICAgICAgICAgICAgcmtbNV0gPSBya1sxXSBeIHJrWzRdOworICAgICAgICAgICAgcmtbNl0gPSBya1syXSBeIHJrWzVdOworICAgICAgICAgICAgcmtbN10gPSBya1szXSBeIHJrWzZdOworICAgICAgICAgICAgaWYgKCsraSA9PSAxMCkgeworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByayArPSA0OworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChrZXlsZW4gPT0gMjQpIHsKKyAgICAgICAgaiA9IDUyOyAgIAorICAgICAgICBMT0FEMzJIKHJrWzRdLCBrZXkgKyAxNik7CisgICAgICAgIExPQUQzMkgocmtbNV0sIGtleSArIDIwKTsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAjaWZkZWYgX01TQ19WRVIKKyAgICAgICAgICAgIHRlbXAgPSBza2V5LT5yaWpuZGFlbC5lS1tyayAtIHNrZXktPnJpam5kYWVsLmVLICsgNV07IAorICAgICAgICAjZWxzZQorICAgICAgICAgICAgdGVtcCA9IHJrWzVdOworICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIHJrWyA2XSA9IHJrWyAwXSBeIHNldHVwX21peCh0ZW1wKSBeIHJjb25baV07CisgICAgICAgICAgICBya1sgN10gPSBya1sgMV0gXiBya1sgNl07CisgICAgICAgICAgICBya1sgOF0gPSBya1sgMl0gXiBya1sgN107CisgICAgICAgICAgICBya1sgOV0gPSBya1sgM10gXiBya1sgOF07CisgICAgICAgICAgICBpZiAoKytpID09IDgpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJrWzEwXSA9IHJrWyA0XSBeIHJrWyA5XTsKKyAgICAgICAgICAgIHJrWzExXSA9IHJrWyA1XSBeIHJrWzEwXTsKKyAgICAgICAgICAgIHJrICs9IDY7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGtleWxlbiA9PSAzMikgeworICAgICAgICBqID0gNjA7CisgICAgICAgIExPQUQzMkgocmtbNF0sIGtleSArIDE2KTsKKyAgICAgICAgTE9BRDMySChya1s1XSwga2V5ICsgMjApOworICAgICAgICBMT0FEMzJIKHJrWzZdLCBrZXkgKyAyNCk7CisgICAgICAgIExPQUQzMkgocmtbN10sIGtleSArIDI4KTsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAjaWZkZWYgX01TQ19WRVIKKyAgICAgICAgICAgIHRlbXAgPSBza2V5LT5yaWpuZGFlbC5lS1tyayAtIHNrZXktPnJpam5kYWVsLmVLICsgN107IAorICAgICAgICAjZWxzZQorICAgICAgICAgICAgdGVtcCA9IHJrWzddOworICAgICAgICAjZW5kaWYKKyAgICAgICAgICAgIHJrWyA4XSA9IHJrWyAwXSBeIHNldHVwX21peCh0ZW1wKSBeIHJjb25baV07CisgICAgICAgICAgICBya1sgOV0gPSBya1sgMV0gXiBya1sgOF07CisgICAgICAgICAgICBya1sxMF0gPSBya1sgMl0gXiBya1sgOV07CisgICAgICAgICAgICBya1sxMV0gPSBya1sgM10gXiBya1sxMF07CisgICAgICAgICAgICBpZiAoKytpID09IDcpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRlbXAgPSBya1sxMV07CisgICAgICAgICAgICBya1sxMl0gPSBya1sgNF0gXiBzZXR1cF9taXgoUk9SYyh0ZW1wLCA4KSk7CisgICAgICAgICAgICBya1sxM10gPSBya1sgNV0gXiBya1sxMl07CisgICAgICAgICAgICBya1sxNF0gPSBya1sgNl0gXiBya1sxM107CisgICAgICAgICAgICBya1sxNV0gPSBya1sgN10gXiBya1sxNF07CisgICAgICAgICAgICByayArPSA4OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAvKiB0aGlzIGNhbid0IGhhcHBlbiAqLworICAgICAgIHJldHVybiBDUllQVF9FUlJPUjsKKyAgICB9CisKKyNpZm5kZWYgRU5DUllQVF9PTkxZICAgIAorICAgIC8qIHNldHVwIHRoZSBpbnZlcnNlIGtleSBub3cgKi8KKyAgICByayAgID0gc2tleS0+cmlqbmRhZWwuZEs7CisgICAgcnJrICA9IHNrZXktPnJpam5kYWVsLmVLICsgaiAtIDQ7IAorICAgIAorICAgIC8qIGFwcGx5IHRoZSBpbnZlcnNlIE1peENvbHVtbiB0cmFuc2Zvcm0gdG8gYWxsIHJvdW5kIGtleXMgYnV0IHRoZSBmaXJzdCBhbmQgdGhlIGxhc3Q6ICovCisgICAgLyogY29weSBmaXJzdCAqLworICAgICpyaysrID0gKnJyaysrOworICAgICpyaysrID0gKnJyaysrOworICAgICpyaysrID0gKnJyaysrOworICAgICpyayAgID0gKnJyazsKKyAgICByayAtPSAzOyBycmsgLT0gMzsKKyAgICAKKyAgICBmb3IgKGkgPSAxOyBpIDwgc2tleS0+cmlqbmRhZWwuTnI7IGkrKykgeworICAgICAgICBycmsgLT0gNDsKKyAgICAgICAgcmsgICs9IDQ7CisgICAgI2lmZGVmIExUQ19TTUFMTF9DT0RFICAgICAgICAKKyAgICAgICAgdGVtcCA9IHJya1swXTsKKyAgICAgICAgcmtbMF0gPSBzZXR1cF9taXgyKHRlbXApOworICAgICAgICB0ZW1wID0gcnJrWzFdOworICAgICAgICBya1sxXSA9IHNldHVwX21peDIodGVtcCk7CisgICAgICAgIHRlbXAgPSBycmtbMl07CisgICAgICAgIHJrWzJdID0gc2V0dXBfbWl4Mih0ZW1wKTsKKyAgICAgICAgdGVtcCA9IHJya1szXTsKKyAgICAgICAgcmtbM10gPSBzZXR1cF9taXgyKHRlbXApOworICAgICAjZWxzZQorICAgICAgICB0ZW1wID0gcnJrWzBdOworICAgICAgICBya1swXSA9CisgICAgICAgICAgICBUa3MwW2J5dGUodGVtcCwgMyldIF4KKyAgICAgICAgICAgIFRrczFbYnl0ZSh0ZW1wLCAyKV0gXgorICAgICAgICAgICAgVGtzMltieXRlKHRlbXAsIDEpXSBeCisgICAgICAgICAgICBUa3MzW2J5dGUodGVtcCwgMCldOworICAgICAgICB0ZW1wID0gcnJrWzFdOworICAgICAgICBya1sxXSA9CisgICAgICAgICAgICBUa3MwW2J5dGUodGVtcCwgMyldIF4KKyAgICAgICAgICAgIFRrczFbYnl0ZSh0ZW1wLCAyKV0gXgorICAgICAgICAgICAgVGtzMltieXRlKHRlbXAsIDEpXSBeCisgICAgICAgICAgICBUa3MzW2J5dGUodGVtcCwgMCldOworICAgICAgICB0ZW1wID0gcnJrWzJdOworICAgICAgICBya1syXSA9CisgICAgICAgICAgICBUa3MwW2J5dGUodGVtcCwgMyldIF4KKyAgICAgICAgICAgIFRrczFbYnl0ZSh0ZW1wLCAyKV0gXgorICAgICAgICAgICAgVGtzMltieXRlKHRlbXAsIDEpXSBeCisgICAgICAgICAgICBUa3MzW2J5dGUodGVtcCwgMCldOworICAgICAgICB0ZW1wID0gcnJrWzNdOworICAgICAgICBya1szXSA9CisgICAgICAgICAgICBUa3MwW2J5dGUodGVtcCwgMyldIF4KKyAgICAgICAgICAgIFRrczFbYnl0ZSh0ZW1wLCAyKV0gXgorICAgICAgICAgICAgVGtzMltieXRlKHRlbXAsIDEpXSBeCisgICAgICAgICAgICBUa3MzW2J5dGUodGVtcCwgMCldOworICAgICAgI2VuZGlmICAgICAgICAgICAgCisgICAgIAorICAgIH0KKworICAgIC8qIGNvcHkgbGFzdCAqLworICAgIHJyayAtPSA0OworICAgIHJrICArPSA0OworICAgICpyaysrID0gKnJyaysrOworICAgICpyaysrID0gKnJyaysrOworICAgICpyaysrID0gKnJyaysrOworICAgICpyayAgID0gKnJyazsKKyNlbmRpZiAvKiBFTkNSWVBUX09OTFkgKi8KKworICAgIHJldHVybiBDUllQVF9PSzsgICAKK30KKworLyoqCisgIEVuY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIEFFUworICBAcGFyYW0gcHQgVGhlIGlucHV0IHBsYWludGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBjdCBUaGUgb3V0cHV0IGNpcGhlcnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IF9yaWpuZGFlbF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpIAorI2Vsc2UKK2ludCBFQ0JfRU5DKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbmRpZgoreworICAgIHVsb25nMzIgczAsIHMxLCBzMiwgczMsIHQwLCB0MSwgdDIsIHQzLCAqcms7CisgICAgaW50IE5yLCByOworICAgCisgICAgTFRDX0FSR0NISyhwdCAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGN0ICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKyAgICAKKyAgICBOciA9IHNrZXktPnJpam5kYWVsLk5yOworICAgIHJrID0gc2tleS0+cmlqbmRhZWwuZUs7CisgICAgCisgICAgLyoKKyAgICAgKiBtYXAgYnl0ZSBhcnJheSBibG9jayB0byBjaXBoZXIgc3RhdGUKKyAgICAgKiBhbmQgYWRkIGluaXRpYWwgcm91bmQga2V5OgorICAgICAqLworICAgIExPQUQzMkgoczAsIHB0ICAgICAgKTsgczAgXj0gcmtbMF07CisgICAgTE9BRDMySChzMSwgcHQgICsgIDQpOyBzMSBePSBya1sxXTsKKyAgICBMT0FEMzJIKHMyLCBwdCAgKyAgOCk7IHMyIF49IHJrWzJdOworICAgIExPQUQzMkgoczMsIHB0ICArIDEyKTsgczMgXj0gcmtbM107CisKKyNpZmRlZiBMVENfU01BTExfQ09ERQorCisgICAgZm9yIChyID0gMDsgOyByKyspIHsKKyAgICAgICAgcmsgKz0gNDsKKyAgICAgICAgdDAgPQorICAgICAgICAgICAgVGUwKGJ5dGUoczAsIDMpKSBeCisgICAgICAgICAgICBUZTEoYnl0ZShzMSwgMikpIF4KKyAgICAgICAgICAgIFRlMihieXRlKHMyLCAxKSkgXgorICAgICAgICAgICAgVGUzKGJ5dGUoczMsIDApKSBeCisgICAgICAgICAgICBya1swXTsKKyAgICAgICAgdDEgPQorICAgICAgICAgICAgVGUwKGJ5dGUoczEsIDMpKSBeCisgICAgICAgICAgICBUZTEoYnl0ZShzMiwgMikpIF4KKyAgICAgICAgICAgIFRlMihieXRlKHMzLCAxKSkgXgorICAgICAgICAgICAgVGUzKGJ5dGUoczAsIDApKSBeCisgICAgICAgICAgICBya1sxXTsKKyAgICAgICAgdDIgPQorICAgICAgICAgICAgVGUwKGJ5dGUoczIsIDMpKSBeCisgICAgICAgICAgICBUZTEoYnl0ZShzMywgMikpIF4KKyAgICAgICAgICAgIFRlMihieXRlKHMwLCAxKSkgXgorICAgICAgICAgICAgVGUzKGJ5dGUoczEsIDApKSBeCisgICAgICAgICAgICBya1syXTsKKyAgICAgICAgdDMgPQorICAgICAgICAgICAgVGUwKGJ5dGUoczMsIDMpKSBeCisgICAgICAgICAgICBUZTEoYnl0ZShzMCwgMikpIF4KKyAgICAgICAgICAgIFRlMihieXRlKHMxLCAxKSkgXgorICAgICAgICAgICAgVGUzKGJ5dGUoczIsIDApKSBeCisgICAgICAgICAgICBya1szXTsKKyAgICAgICAgaWYgKHIgPT0gTnItMikgeyAKKyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgczAgPSB0MDsgczEgPSB0MTsgczIgPSB0MjsgczMgPSB0MzsKKyAgICB9CisgICAgcmsgKz0gNDsKKworI2Vsc2UKKworICAgIC8qCisgICAgICogTnIgLSAxIGZ1bGwgcm91bmRzOgorICAgICAqLworICAgIHIgPSBOciA+PiAxOworICAgIGZvciAoOzspIHsKKyAgICAgICAgdDAgPQorICAgICAgICAgICAgVGUwKGJ5dGUoczAsIDMpKSBeCisgICAgICAgICAgICBUZTEoYnl0ZShzMSwgMikpIF4KKyAgICAgICAgICAgIFRlMihieXRlKHMyLCAxKSkgXgorICAgICAgICAgICAgVGUzKGJ5dGUoczMsIDApKSBeCisgICAgICAgICAgICBya1s0XTsKKyAgICAgICAgdDEgPQorICAgICAgICAgICAgVGUwKGJ5dGUoczEsIDMpKSBeCisgICAgICAgICAgICBUZTEoYnl0ZShzMiwgMikpIF4KKyAgICAgICAgICAgIFRlMihieXRlKHMzLCAxKSkgXgorICAgICAgICAgICAgVGUzKGJ5dGUoczAsIDApKSBeCisgICAgICAgICAgICBya1s1XTsKKyAgICAgICAgdDIgPQorICAgICAgICAgICAgVGUwKGJ5dGUoczIsIDMpKSBeCisgICAgICAgICAgICBUZTEoYnl0ZShzMywgMikpIF4KKyAgICAgICAgICAgIFRlMihieXRlKHMwLCAxKSkgXgorICAgICAgICAgICAgVGUzKGJ5dGUoczEsIDApKSBeCisgICAgICAgICAgICBya1s2XTsKKyAgICAgICAgdDMgPQorICAgICAgICAgICAgVGUwKGJ5dGUoczMsIDMpKSBeCisgICAgICAgICAgICBUZTEoYnl0ZShzMCwgMikpIF4KKyAgICAgICAgICAgIFRlMihieXRlKHMxLCAxKSkgXgorICAgICAgICAgICAgVGUzKGJ5dGUoczIsIDApKSBeCisgICAgICAgICAgICBya1s3XTsKKworICAgICAgICByayArPSA4OworICAgICAgICBpZiAoLS1yID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgczAgPQorICAgICAgICAgICAgVGUwKGJ5dGUodDAsIDMpKSBeCisgICAgICAgICAgICBUZTEoYnl0ZSh0MSwgMikpIF4KKyAgICAgICAgICAgIFRlMihieXRlKHQyLCAxKSkgXgorICAgICAgICAgICAgVGUzKGJ5dGUodDMsIDApKSBeCisgICAgICAgICAgICBya1swXTsKKyAgICAgICAgczEgPQorICAgICAgICAgICAgVGUwKGJ5dGUodDEsIDMpKSBeCisgICAgICAgICAgICBUZTEoYnl0ZSh0MiwgMikpIF4KKyAgICAgICAgICAgIFRlMihieXRlKHQzLCAxKSkgXgorICAgICAgICAgICAgVGUzKGJ5dGUodDAsIDApKSBeCisgICAgICAgICAgICBya1sxXTsKKyAgICAgICAgczIgPQorICAgICAgICAgICAgVGUwKGJ5dGUodDIsIDMpKSBeCisgICAgICAgICAgICBUZTEoYnl0ZSh0MywgMikpIF4KKyAgICAgICAgICAgIFRlMihieXRlKHQwLCAxKSkgXgorICAgICAgICAgICAgVGUzKGJ5dGUodDEsIDApKSBeCisgICAgICAgICAgICBya1syXTsKKyAgICAgICAgczMgPQorICAgICAgICAgICAgVGUwKGJ5dGUodDMsIDMpKSBeCisgICAgICAgICAgICBUZTEoYnl0ZSh0MCwgMikpIF4KKyAgICAgICAgICAgIFRlMihieXRlKHQxLCAxKSkgXgorICAgICAgICAgICAgVGUzKGJ5dGUodDIsIDApKSBeCisgICAgICAgICAgICBya1szXTsKKyAgICB9CisKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBhcHBseSBsYXN0IHJvdW5kIGFuZAorICAgICAqIG1hcCBjaXBoZXIgc3RhdGUgdG8gYnl0ZSBhcnJheSBibG9jazoKKyAgICAgKi8KKyAgICBzMCA9CisgICAgICAgIChUZTRfM1tieXRlKHQwLCAzKV0pIF4KKyAgICAgICAgKFRlNF8yW2J5dGUodDEsIDIpXSkgXgorICAgICAgICAoVGU0XzFbYnl0ZSh0MiwgMSldKSBeCisgICAgICAgIChUZTRfMFtieXRlKHQzLCAwKV0pIF4KKyAgICAgICAgcmtbMF07CisgICAgU1RPUkUzMkgoczAsIGN0KTsKKyAgICBzMSA9CisgICAgICAgIChUZTRfM1tieXRlKHQxLCAzKV0pIF4KKyAgICAgICAgKFRlNF8yW2J5dGUodDIsIDIpXSkgXgorICAgICAgICAoVGU0XzFbYnl0ZSh0MywgMSldKSBeCisgICAgICAgIChUZTRfMFtieXRlKHQwLCAwKV0pIF4KKyAgICAgICAgcmtbMV07CisgICAgU1RPUkUzMkgoczEsIGN0KzQpOworICAgIHMyID0KKyAgICAgICAgKFRlNF8zW2J5dGUodDIsIDMpXSkgXgorICAgICAgICAoVGU0XzJbYnl0ZSh0MywgMildKSBeCisgICAgICAgIChUZTRfMVtieXRlKHQwLCAxKV0pIF4KKyAgICAgICAgKFRlNF8wW2J5dGUodDEsIDApXSkgXgorICAgICAgICBya1syXTsKKyAgICBTVE9SRTMySChzMiwgY3QrOCk7CisgICAgczMgPQorICAgICAgICAoVGU0XzNbYnl0ZSh0MywgMyldKSBeCisgICAgICAgIChUZTRfMltieXRlKHQwLCAyKV0pIF4KKyAgICAgICAgKFRlNF8xW2J5dGUodDEsIDEpXSkgXgorICAgICAgICAoVGU0XzBbYnl0ZSh0MiwgMCldKSBeIAorICAgICAgICBya1szXTsKKyAgICBTVE9SRTMySChzMywgY3QrMTIpOworCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitpbnQgRUNCX0VOQyhjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpIAoreworICAgaW50IGVyciA9IF9yaWpuZGFlbF9lY2JfZW5jcnlwdChwdCwgY3QsIHNrZXkpOworICAgYnVybl9zdGFjayhzaXplb2YodW5zaWduZWQgbG9uZykqOCArIHNpemVvZih1bnNpZ25lZCBsb25nKikgKyBzaXplb2YoaW50KSoyKTsKKyAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworI2lmbmRlZiBFTkNSWVBUX09OTFkgCisKKy8qKgorICBEZWNyeXB0cyBhIGJsb2NrIG9mIHRleHQgd2l0aCBBRVMKKyAgQHBhcmFtIGN0IFRoZSBpbnB1dCBjaXBoZXJ0ZXh0ICgxNiBieXRlcykKKyAgQHBhcmFtIHB0IFRoZSBvdXRwdXQgcGxhaW50ZXh0ICgxNiBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQgCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyBpbnQgX3Jpam5kYWVsX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkgCisjZWxzZQoraW50IEVDQl9ERUMoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2VuZGlmCit7CisgICAgdWxvbmczMiBzMCwgczEsIHMyLCBzMywgdDAsIHQxLCB0MiwgdDMsICpyazsKKyAgICBpbnQgTnIsIHI7CisKKyAgICBMVENfQVJHQ0hLKHB0ICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoY3QgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworICAgIAorICAgIE5yID0gc2tleS0+cmlqbmRhZWwuTnI7CisgICAgcmsgPSBza2V5LT5yaWpuZGFlbC5kSzsKKworICAgIC8qCisgICAgICogbWFwIGJ5dGUgYXJyYXkgYmxvY2sgdG8gY2lwaGVyIHN0YXRlCisgICAgICogYW5kIGFkZCBpbml0aWFsIHJvdW5kIGtleToKKyAgICAgKi8KKyAgICBMT0FEMzJIKHMwLCBjdCAgICAgICk7IHMwIF49IHJrWzBdOworICAgIExPQUQzMkgoczEsIGN0ICArICA0KTsgczEgXj0gcmtbMV07CisgICAgTE9BRDMySChzMiwgY3QgICsgIDgpOyBzMiBePSBya1syXTsKKyAgICBMT0FEMzJIKHMzLCBjdCAgKyAxMik7IHMzIF49IHJrWzNdOworCisjaWZkZWYgTFRDX1NNQUxMX0NPREUKKyAgICBmb3IgKHIgPSAwOyA7IHIrKykgeworICAgICAgICByayArPSA0OworICAgICAgICB0MCA9CisgICAgICAgICAgICBUZDAoYnl0ZShzMCwgMykpIF4KKyAgICAgICAgICAgIFRkMShieXRlKHMzLCAyKSkgXgorICAgICAgICAgICAgVGQyKGJ5dGUoczIsIDEpKSBeCisgICAgICAgICAgICBUZDMoYnl0ZShzMSwgMCkpIF4KKyAgICAgICAgICAgIHJrWzBdOworICAgICAgICB0MSA9CisgICAgICAgICAgICBUZDAoYnl0ZShzMSwgMykpIF4KKyAgICAgICAgICAgIFRkMShieXRlKHMwLCAyKSkgXgorICAgICAgICAgICAgVGQyKGJ5dGUoczMsIDEpKSBeCisgICAgICAgICAgICBUZDMoYnl0ZShzMiwgMCkpIF4KKyAgICAgICAgICAgIHJrWzFdOworICAgICAgICB0MiA9CisgICAgICAgICAgICBUZDAoYnl0ZShzMiwgMykpIF4KKyAgICAgICAgICAgIFRkMShieXRlKHMxLCAyKSkgXgorICAgICAgICAgICAgVGQyKGJ5dGUoczAsIDEpKSBeCisgICAgICAgICAgICBUZDMoYnl0ZShzMywgMCkpIF4KKyAgICAgICAgICAgIHJrWzJdOworICAgICAgICB0MyA9CisgICAgICAgICAgICBUZDAoYnl0ZShzMywgMykpIF4KKyAgICAgICAgICAgIFRkMShieXRlKHMyLCAyKSkgXgorICAgICAgICAgICAgVGQyKGJ5dGUoczEsIDEpKSBeCisgICAgICAgICAgICBUZDMoYnl0ZShzMCwgMCkpIF4KKyAgICAgICAgICAgIHJrWzNdOworICAgICAgICBpZiAociA9PSBOci0yKSB7CisgICAgICAgICAgIGJyZWFrOyAKKyAgICAgICAgfQorICAgICAgICBzMCA9IHQwOyBzMSA9IHQxOyBzMiA9IHQyOyBzMyA9IHQzOworICAgIH0KKyAgICByayArPSA0OworCisjZWxzZSAgICAgICAKKworICAgIC8qCisgICAgICogTnIgLSAxIGZ1bGwgcm91bmRzOgorICAgICAqLworICAgIHIgPSBOciA+PiAxOworICAgIGZvciAoOzspIHsKKworICAgICAgICB0MCA9CisgICAgICAgICAgICBUZDAoYnl0ZShzMCwgMykpIF4KKyAgICAgICAgICAgIFRkMShieXRlKHMzLCAyKSkgXgorICAgICAgICAgICAgVGQyKGJ5dGUoczIsIDEpKSBeCisgICAgICAgICAgICBUZDMoYnl0ZShzMSwgMCkpIF4KKyAgICAgICAgICAgIHJrWzRdOworICAgICAgICB0MSA9CisgICAgICAgICAgICBUZDAoYnl0ZShzMSwgMykpIF4KKyAgICAgICAgICAgIFRkMShieXRlKHMwLCAyKSkgXgorICAgICAgICAgICAgVGQyKGJ5dGUoczMsIDEpKSBeCisgICAgICAgICAgICBUZDMoYnl0ZShzMiwgMCkpIF4KKyAgICAgICAgICAgIHJrWzVdOworICAgICAgICB0MiA9CisgICAgICAgICAgICBUZDAoYnl0ZShzMiwgMykpIF4KKyAgICAgICAgICAgIFRkMShieXRlKHMxLCAyKSkgXgorICAgICAgICAgICAgVGQyKGJ5dGUoczAsIDEpKSBeCisgICAgICAgICAgICBUZDMoYnl0ZShzMywgMCkpIF4KKyAgICAgICAgICAgIHJrWzZdOworICAgICAgICB0MyA9CisgICAgICAgICAgICBUZDAoYnl0ZShzMywgMykpIF4KKyAgICAgICAgICAgIFRkMShieXRlKHMyLCAyKSkgXgorICAgICAgICAgICAgVGQyKGJ5dGUoczEsIDEpKSBeCisgICAgICAgICAgICBUZDMoYnl0ZShzMCwgMCkpIF4KKyAgICAgICAgICAgIHJrWzddOworCisgICAgICAgIHJrICs9IDg7CisgICAgICAgIGlmICgtLXIgPT0gMCkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworCisgICAgICAgIHMwID0KKyAgICAgICAgICAgIFRkMChieXRlKHQwLCAzKSkgXgorICAgICAgICAgICAgVGQxKGJ5dGUodDMsIDIpKSBeCisgICAgICAgICAgICBUZDIoYnl0ZSh0MiwgMSkpIF4KKyAgICAgICAgICAgIFRkMyhieXRlKHQxLCAwKSkgXgorICAgICAgICAgICAgcmtbMF07CisgICAgICAgIHMxID0KKyAgICAgICAgICAgIFRkMChieXRlKHQxLCAzKSkgXgorICAgICAgICAgICAgVGQxKGJ5dGUodDAsIDIpKSBeCisgICAgICAgICAgICBUZDIoYnl0ZSh0MywgMSkpIF4KKyAgICAgICAgICAgIFRkMyhieXRlKHQyLCAwKSkgXgorICAgICAgICAgICAgcmtbMV07CisgICAgICAgIHMyID0KKyAgICAgICAgICAgIFRkMChieXRlKHQyLCAzKSkgXgorICAgICAgICAgICAgVGQxKGJ5dGUodDEsIDIpKSBeCisgICAgICAgICAgICBUZDIoYnl0ZSh0MCwgMSkpIF4KKyAgICAgICAgICAgIFRkMyhieXRlKHQzLCAwKSkgXgorICAgICAgICAgICAgcmtbMl07CisgICAgICAgIHMzID0KKyAgICAgICAgICAgIFRkMChieXRlKHQzLCAzKSkgXgorICAgICAgICAgICAgVGQxKGJ5dGUodDIsIDIpKSBeCisgICAgICAgICAgICBUZDIoYnl0ZSh0MSwgMSkpIF4KKyAgICAgICAgICAgIFRkMyhieXRlKHQwLCAwKSkgXgorICAgICAgICAgICAgcmtbM107CisgICAgfQorI2VuZGlmCisKKyAgICAvKgorICAgICAqIGFwcGx5IGxhc3Qgcm91bmQgYW5kCisgICAgICogbWFwIGNpcGhlciBzdGF0ZSB0byBieXRlIGFycmF5IGJsb2NrOgorICAgICAqLworICAgIHMwID0KKyAgICAgICAgKFRkNFtieXRlKHQwLCAzKV0gJiAweGZmMDAwMDAwKSBeCisgICAgICAgIChUZDRbYnl0ZSh0MywgMildICYgMHgwMGZmMDAwMCkgXgorICAgICAgICAoVGQ0W2J5dGUodDIsIDEpXSAmIDB4MDAwMGZmMDApIF4KKyAgICAgICAgKFRkNFtieXRlKHQxLCAwKV0gJiAweDAwMDAwMGZmKSBeCisgICAgICAgIHJrWzBdOworICAgIFNUT1JFMzJIKHMwLCBwdCk7CisgICAgczEgPQorICAgICAgICAoVGQ0W2J5dGUodDEsIDMpXSAmIDB4ZmYwMDAwMDApIF4KKyAgICAgICAgKFRkNFtieXRlKHQwLCAyKV0gJiAweDAwZmYwMDAwKSBeCisgICAgICAgIChUZDRbYnl0ZSh0MywgMSldICYgMHgwMDAwZmYwMCkgXgorICAgICAgICAoVGQ0W2J5dGUodDIsIDApXSAmIDB4MDAwMDAwZmYpIF4KKyAgICAgICAgcmtbMV07CisgICAgU1RPUkUzMkgoczEsIHB0KzQpOworICAgIHMyID0KKyAgICAgICAgKFRkNFtieXRlKHQyLCAzKV0gJiAweGZmMDAwMDAwKSBeCisgICAgICAgIChUZDRbYnl0ZSh0MSwgMildICYgMHgwMGZmMDAwMCkgXgorICAgICAgICAoVGQ0W2J5dGUodDAsIDEpXSAmIDB4MDAwMGZmMDApIF4KKyAgICAgICAgKFRkNFtieXRlKHQzLCAwKV0gJiAweDAwMDAwMGZmKSBeCisgICAgICAgIHJrWzJdOworICAgIFNUT1JFMzJIKHMyLCBwdCs4KTsKKyAgICBzMyA9CisgICAgICAgIChUZDRbYnl0ZSh0MywgMyldICYgMHhmZjAwMDAwMCkgXgorICAgICAgICAoVGQ0W2J5dGUodDIsIDIpXSAmIDB4MDBmZjAwMDApIF4KKyAgICAgICAgKFRkNFtieXRlKHQxLCAxKV0gJiAweDAwMDBmZjAwKSBeCisgICAgICAgIChUZDRbYnl0ZSh0MCwgMCldICYgMHgwMDAwMDBmZikgXgorICAgICAgICBya1szXTsKKyAgICBTVE9SRTMySChzMywgcHQrMTIpOworCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK2ludCBFQ0JfREVDKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkgCit7CisgICBpbnQgZXJyID0gX3Jpam5kYWVsX2VjYl9kZWNyeXB0KGN0LCBwdCwgc2tleSk7CisgICBidXJuX3N0YWNrKHNpemVvZih1bnNpZ25lZCBsb25nKSo4ICsgc2l6ZW9mKHVuc2lnbmVkIGxvbmcqKSArIHNpemVvZihpbnQpKjIpOworICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKioKKyAgUGVyZm9ybXMgYSBzZWxmLXRlc3Qgb2YgdGhlIEFFUyBibG9jayBjaXBoZXIKKyAgQHJldHVybiBDUllQVF9PSyBpZiBmdW5jdGlvbmFsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0IGhhcyBiZWVuIGRpc2FibGVkCisqLworaW50IEVDQl9URVNUKHZvaWQpCit7CisgI2lmbmRlZiBMVENfVEVTVAorICAgIHJldHVybiBDUllQVF9OT1A7CisgI2Vsc2UgICAgCisgaW50IGVycjsKKyBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgaW50IGtleWxlbjsKKyAgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdLCBwdFsxNl0sIGN0WzE2XTsKKyB9IHRlc3RzW10gPSB7CisgICAgeyAxNiwKKyAgICAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgCisgICAgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwgCisgICAgICB7IDB4MDAsIDB4MTEsIDB4MjIsIDB4MzMsIDB4NDQsIDB4NTUsIDB4NjYsIDB4NzcsCisgICAgICAgIDB4ODgsIDB4OTksIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4ZWUsIDB4ZmYgfSwKKyAgICAgIHsgMHg2OSwgMHhjNCwgMHhlMCwgMHhkOCwgMHg2YSwgMHg3YiwgMHgwNCwgMHgzMCwgCisgICAgICAgIDB4ZDgsIDB4Y2QsIDB4YjcsIDB4ODAsIDB4NzAsIDB4YjQsIDB4YzUsIDB4NWEgfQorICAgIH0sIHsgCisgICAgICAyNCwKKyAgICAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgCisgICAgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisgICAgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcgfSwKKyAgICAgIHsgMHgwMCwgMHgxMSwgMHgyMiwgMHgzMywgMHg0NCwgMHg1NSwgMHg2NiwgMHg3NywKKyAgICAgICAgMHg4OCwgMHg5OSwgMHhhYSwgMHhiYiwgMHhjYywgMHhkZCwgMHhlZSwgMHhmZiB9LAorICAgICAgeyAweGRkLCAweGE5LCAweDdjLCAweGE0LCAweDg2LCAweDRjLCAweGRmLCAweGUwLCAKKyAgICAgICAgMHg2ZSwgMHhhZiwgMHg3MCwgMHhhMCwgMHhlYywgMHgwZCwgMHg3MSwgMHg5MSB9CisgICAgfSwgeworICAgICAgMzIsCisgICAgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAorICAgICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAorICAgICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAKKyAgICAgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiB9LAorICAgICAgeyAweDAwLCAweDExLCAweDIyLCAweDMzLCAweDQ0LCAweDU1LCAweDY2LCAweDc3LAorICAgICAgICAweDg4LCAweDk5LCAweGFhLCAweGJiLCAweGNjLCAweGRkLCAweGVlLCAweGZmIH0sCisgICAgICB7IDB4OGUsIDB4YTIsIDB4YjcsIDB4Y2EsIDB4NTEsIDB4NjcsIDB4NDUsIDB4YmYsIAorICAgICAgICAweGVhLCAweGZjLCAweDQ5LCAweDkwLCAweDRiLCAweDQ5LCAweDYwLCAweDg5IH0KKyAgICB9CisgfTsKKyAKKyBzeW1tZXRyaWNfa2V5IGtleTsKKyB1bnNpZ25lZCBjaGFyIHRtcFsyXVsxNl07CisgaW50IGksIHk7CisgCisgZm9yIChpID0gMDsgaSA8IChpbnQpKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IGkrKykgeworICAgIHplcm9tZW0oJmtleSwgc2l6ZW9mKGtleSkpOworICAgIGlmICgoZXJyID0gcmlqbmRhZWxfc2V0dXAodGVzdHNbaV0ua2V5LCB0ZXN0c1tpXS5rZXlsZW4sIDAsICZrZXkpKSAhPSBDUllQVF9PSykgeyAKKyAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgCisgICAgcmlqbmRhZWxfZWNiX2VuY3J5cHQodGVzdHNbaV0ucHQsIHRtcFswXSwgJmtleSk7CisgICAgcmlqbmRhZWxfZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMV0sICZrZXkpOworICAgIGlmIChYTUVNQ01QKHRtcFswXSwgdGVzdHNbaV0uY3QsIDE2KSB8fCBYTUVNQ01QKHRtcFsxXSwgdGVzdHNbaV0ucHQsIDE2KSkgeyAKKyNpZiAwCisgICAgICAgcHJpbnRmKCJcblxuVGVzdCAlZCBmYWlsZWRcbiIsIGkpOworICAgICAgIGlmIChYTUVNQ01QKHRtcFswXSwgdGVzdHNbaV0uY3QsIDE2KSkgeworICAgICAgICAgIHByaW50ZigiQ1Q6ICIpOworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgICAgICAgICAgcHJpbnRmKCIlMDJ4ICIsIHRtcFswXVtpXSk7CisgICAgICAgICAgfQorICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICB9IGVsc2UgeworICAgICAgICAgIHByaW50ZigiUFQ6ICIpOworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgICAgICAgICAgcHJpbnRmKCIlMDJ4ICIsIHRtcFsxXVtpXSk7CisgICAgICAgICAgfQorICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICB9CisjZW5kaWYgICAgICAgCisgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgfQorCisgICAgICAvKiBub3cgc2VlIGlmIHdlIGNhbiBlbmNyeXB0IGFsbCB6ZXJvIGJ5dGVzIDEwMDAgdGltZXMsIGRlY3J5cHQgYW5kIGNvbWUgYmFjayB3aGVyZSB3ZSBzdGFydGVkICovCisgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgdG1wWzBdW3ldID0gMDsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwOyB5KyspIHJpam5kYWVsX2VjYl9lbmNyeXB0KHRtcFswXSwgdG1wWzBdLCAma2V5KTsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwOyB5KyspIHJpam5kYWVsX2VjYl9kZWNyeXB0KHRtcFswXSwgdG1wWzBdLCAma2V5KTsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSBpZiAodG1wWzBdW3ldICE9IDApIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgfSAgICAgICAKKyByZXR1cm4gQ1JZUFRfT0s7CisgI2VuZGlmCit9CisKKyNlbmRpZiAvKiBFTkNSWVBUX09OTFkgKi8KKworCisvKiogVGVybWluYXRlIHRoZSBjb250ZXh0IAorICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkKKyovCit2b2lkIEVDQl9ET05FKHN5bW1ldHJpY19rZXkgKnNrZXkpCit7Cit9CisKKworLyoqCisgIEdldHMgc3VpdGFibGUga2V5IHNpemUKKyAgQHBhcmFtIGtleXNpemUgW2luL291dF0gVGhlIGxlbmd0aCBvZiB0aGUgcmVjb21tZW5kZWQga2V5IChpbiBieXRlcykuICBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgdGhlIHN1aXRhYmxlIHNpemUgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICBAcmV0dXJuIENSWVBUX09LIGlmIHRoZSBpbnB1dCBrZXkgc2l6ZSBpcyBhY2NlcHRhYmxlLgorKi8KK2ludCBFQ0JfS1MoaW50ICprZXlzaXplKQoreworICAgTFRDX0FSR0NISyhrZXlzaXplICE9IE5VTEwpOworCisgICBpZiAoKmtleXNpemUgPCAxNikKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICBpZiAoKmtleXNpemUgPCAyNCkgeworICAgICAgKmtleXNpemUgPSAxNjsKKyAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgIH0gZWxzZSBpZiAoKmtleXNpemUgPCAzMikgeworICAgICAgKmtleXNpemUgPSAyNDsKKyAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgIH0gZWxzZSB7CisgICAgICAqa2V5c2l6ZSA9IDMyOworICAgICAgcmV0dXJuIENSWVBUX09LOworICAgfQorfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9hZXMvYWVzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTQgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjM6MDE6MDYgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvYWVzL2Flc190YWIuYyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2Flcy9hZXNfdGFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmOTczMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2Flcy9hZXNfdGFiLmMKQEAgLTAsMCArMSwxMDI4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworLyogVGhlIHByZWNvbXB1dGVkIHRhYmxlcyBmb3IgQUVTICovCisvKgorVGUwW3hdID0gUyBbeF0uWzAyLCAwMSwgMDEsIDAzXTsKK1RlMVt4XSA9IFMgW3hdLlswMywgMDIsIDAxLCAwMV07CitUZTJbeF0gPSBTIFt4XS5bMDEsIDAzLCAwMiwgMDFdOworVGUzW3hdID0gUyBbeF0uWzAxLCAwMSwgMDMsIDAyXTsKK1RlNFt4XSA9IFMgW3hdLlswMSwgMDEsIDAxLCAwMV07CisKK1RkMFt4XSA9IFNpW3hdLlswZSwgMDksIDBkLCAwYl07CitUZDFbeF0gPSBTaVt4XS5bMGIsIDBlLCAwOSwgMGRdOworVGQyW3hdID0gU2lbeF0uWzBkLCAwYiwgMGUsIDA5XTsKK1RkM1t4XSA9IFNpW3hdLlswOSwgMGQsIDBiLCAwZV07CitUZDRbeF0gPSBTaVt4XS5bMDEsIDAxLCAwMSwgMDFdOworKi8KKworLyoqCisgIEBmaWxlIGFlc190YWIuYworICBBRVMgdGFibGVzCisqLyAgCitzdGF0aWMgY29uc3QgdWxvbmczMiBURTBbMjU2XSA9IHsKKyAgICAweGM2NjM2M2E1VUwsIDB4Zjg3YzdjODRVTCwgMHhlZTc3Nzc5OVVMLCAweGY2N2I3YjhkVUwsCisgICAgMHhmZmYyZjIwZFVMLCAweGQ2NmI2YmJkVUwsIDB4ZGU2ZjZmYjFVTCwgMHg5MWM1YzU1NFVMLAorICAgIDB4NjAzMDMwNTBVTCwgMHgwMjAxMDEwM1VMLCAweGNlNjc2N2E5VUwsIDB4NTYyYjJiN2RVTCwKKyAgICAweGU3ZmVmZTE5VUwsIDB4YjVkN2Q3NjJVTCwgMHg0ZGFiYWJlNlVMLCAweGVjNzY3NjlhVUwsCisgICAgMHg4ZmNhY2E0NVVMLCAweDFmODI4MjlkVUwsIDB4ODljOWM5NDBVTCwgMHhmYTdkN2Q4N1VMLAorICAgIDB4ZWZmYWZhMTVVTCwgMHhiMjU5NTllYlVMLCAweDhlNDc0N2M5VUwsIDB4ZmJmMGYwMGJVTCwKKyAgICAweDQxYWRhZGVjVUwsIDB4YjNkNGQ0NjdVTCwgMHg1ZmEyYTJmZFVMLCAweDQ1YWZhZmVhVUwsCisgICAgMHgyMzljOWNiZlVMLCAweDUzYTRhNGY3VUwsIDB4ZTQ3MjcyOTZVTCwgMHg5YmMwYzA1YlVMLAorICAgIDB4NzViN2I3YzJVTCwgMHhlMWZkZmQxY1VMLCAweDNkOTM5M2FlVUwsIDB4NGMyNjI2NmFVTCwKKyAgICAweDZjMzYzNjVhVUwsIDB4N2UzZjNmNDFVTCwgMHhmNWY3ZjcwMlVMLCAweDgzY2NjYzRmVUwsCisgICAgMHg2ODM0MzQ1Y1VMLCAweDUxYTVhNWY0VUwsIDB4ZDFlNWU1MzRVTCwgMHhmOWYxZjEwOFVMLAorICAgIDB4ZTI3MTcxOTNVTCwgMHhhYmQ4ZDg3M1VMLCAweDYyMzEzMTUzVUwsIDB4MmExNTE1M2ZVTCwKKyAgICAweDA4MDQwNDBjVUwsIDB4OTVjN2M3NTJVTCwgMHg0NjIzMjM2NVVMLCAweDlkYzNjMzVlVUwsCisgICAgMHgzMDE4MTgyOFVMLCAweDM3OTY5NmExVUwsIDB4MGEwNTA1MGZVTCwgMHgyZjlhOWFiNVVMLAorICAgIDB4MGUwNzA3MDlVTCwgMHgyNDEyMTIzNlVMLCAweDFiODA4MDliVUwsIDB4ZGZlMmUyM2RVTCwKKyAgICAweGNkZWJlYjI2VUwsIDB4NGUyNzI3NjlVTCwgMHg3ZmIyYjJjZFVMLCAweGVhNzU3NTlmVUwsCisgICAgMHgxMjA5MDkxYlVMLCAweDFkODM4MzllVUwsIDB4NTgyYzJjNzRVTCwgMHgzNDFhMWEyZVVMLAorICAgIDB4MzYxYjFiMmRVTCwgMHhkYzZlNmViMlVMLCAweGI0NWE1YWVlVUwsIDB4NWJhMGEwZmJVTCwKKyAgICAweGE0NTI1MmY2VUwsIDB4NzYzYjNiNGRVTCwgMHhiN2Q2ZDY2MVVMLCAweDdkYjNiM2NlVUwsCisgICAgMHg1MjI5Mjk3YlVMLCAweGRkZTNlMzNlVUwsIDB4NWUyZjJmNzFVTCwgMHgxMzg0ODQ5N1VMLAorICAgIDB4YTY1MzUzZjVVTCwgMHhiOWQxZDE2OFVMLCAweDAwMDAwMDAwVUwsIDB4YzFlZGVkMmNVTCwKKyAgICAweDQwMjAyMDYwVUwsIDB4ZTNmY2ZjMWZVTCwgMHg3OWIxYjFjOFVMLCAweGI2NWI1YmVkVUwsCisgICAgMHhkNDZhNmFiZVVMLCAweDhkY2JjYjQ2VUwsIDB4NjdiZWJlZDlVTCwgMHg3MjM5Mzk0YlVMLAorICAgIDB4OTQ0YTRhZGVVTCwgMHg5ODRjNGNkNFVMLCAweGIwNTg1OGU4VUwsIDB4ODVjZmNmNGFVTCwKKyAgICAweGJiZDBkMDZiVUwsIDB4YzVlZmVmMmFVTCwgMHg0ZmFhYWFlNVVMLCAweGVkZmJmYjE2VUwsCisgICAgMHg4NjQzNDNjNVVMLCAweDlhNGQ0ZGQ3VUwsIDB4NjYzMzMzNTVVTCwgMHgxMTg1ODU5NFVMLAorICAgIDB4OGE0NTQ1Y2ZVTCwgMHhlOWY5ZjkxMFVMLCAweDA0MDIwMjA2VUwsIDB4ZmU3ZjdmODFVTCwKKyAgICAweGEwNTA1MGYwVUwsIDB4NzgzYzNjNDRVTCwgMHgyNTlmOWZiYVVMLCAweDRiYThhOGUzVUwsCisgICAgMHhhMjUxNTFmM1VMLCAweDVkYTNhM2ZlVUwsIDB4ODA0MDQwYzBVTCwgMHgwNThmOGY4YVVMLAorICAgIDB4M2Y5MjkyYWRVTCwgMHgyMTlkOWRiY1VMLCAweDcwMzgzODQ4VUwsIDB4ZjFmNWY1MDRVTCwKKyAgICAweDYzYmNiY2RmVUwsIDB4NzdiNmI2YzFVTCwgMHhhZmRhZGE3NVVMLCAweDQyMjEyMTYzVUwsCisgICAgMHgyMDEwMTAzMFVMLCAweGU1ZmZmZjFhVUwsIDB4ZmRmM2YzMGVVTCwgMHhiZmQyZDI2ZFVMLAorICAgIDB4ODFjZGNkNGNVTCwgMHgxODBjMGMxNFVMLCAweDI2MTMxMzM1VUwsIDB4YzNlY2VjMmZVTCwKKyAgICAweGJlNWY1ZmUxVUwsIDB4MzU5Nzk3YTJVTCwgMHg4ODQ0NDRjY1VMLCAweDJlMTcxNzM5VUwsCisgICAgMHg5M2M0YzQ1N1VMLCAweDU1YTdhN2YyVUwsIDB4ZmM3ZTdlODJVTCwgMHg3YTNkM2Q0N1VMLAorICAgIDB4Yzg2NDY0YWNVTCwgMHhiYTVkNWRlN1VMLCAweDMyMTkxOTJiVUwsIDB4ZTY3MzczOTVVTCwKKyAgICAweGMwNjA2MGEwVUwsIDB4MTk4MTgxOThVTCwgMHg5ZTRmNGZkMVVMLCAweGEzZGNkYzdmVUwsCisgICAgMHg0NDIyMjI2NlVMLCAweDU0MmEyYTdlVUwsIDB4M2I5MDkwYWJVTCwgMHgwYjg4ODg4M1VMLAorICAgIDB4OGM0NjQ2Y2FVTCwgMHhjN2VlZWUyOVVMLCAweDZiYjhiOGQzVUwsIDB4MjgxNDE0M2NVTCwKKyAgICAweGE3ZGVkZTc5VUwsIDB4YmM1ZTVlZTJVTCwgMHgxNjBiMGIxZFVMLCAweGFkZGJkYjc2VUwsCisgICAgMHhkYmUwZTAzYlVMLCAweDY0MzIzMjU2VUwsIDB4NzQzYTNhNGVVTCwgMHgxNDBhMGExZVVMLAorICAgIDB4OTI0OTQ5ZGJVTCwgMHgwYzA2MDYwYVVMLCAweDQ4MjQyNDZjVUwsIDB4Yjg1YzVjZTRVTCwKKyAgICAweDlmYzJjMjVkVUwsIDB4YmRkM2QzNmVVTCwgMHg0M2FjYWNlZlVMLCAweGM0NjI2MmE2VUwsCisgICAgMHgzOTkxOTFhOFVMLCAweDMxOTU5NWE0VUwsIDB4ZDNlNGU0MzdVTCwgMHhmMjc5Nzk4YlVMLAorICAgIDB4ZDVlN2U3MzJVTCwgMHg4YmM4Yzg0M1VMLCAweDZlMzczNzU5VUwsIDB4ZGE2ZDZkYjdVTCwKKyAgICAweDAxOGQ4ZDhjVUwsIDB4YjFkNWQ1NjRVTCwgMHg5YzRlNGVkMlVMLCAweDQ5YTlhOWUwVUwsCisgICAgMHhkODZjNmNiNFVMLCAweGFjNTY1NmZhVUwsIDB4ZjNmNGY0MDdVTCwgMHhjZmVhZWEyNVVMLAorICAgIDB4Y2E2NTY1YWZVTCwgMHhmNDdhN2E4ZVVMLCAweDQ3YWVhZWU5VUwsIDB4MTAwODA4MThVTCwKKyAgICAweDZmYmFiYWQ1VUwsIDB4ZjA3ODc4ODhVTCwgMHg0YTI1MjU2ZlVMLCAweDVjMmUyZTcyVUwsCisgICAgMHgzODFjMWMyNFVMLCAweDU3YTZhNmYxVUwsIDB4NzNiNGI0YzdVTCwgMHg5N2M2YzY1MVVMLAorICAgIDB4Y2JlOGU4MjNVTCwgMHhhMWRkZGQ3Y1VMLCAweGU4NzQ3NDljVUwsIDB4M2UxZjFmMjFVTCwKKyAgICAweDk2NGI0YmRkVUwsIDB4NjFiZGJkZGNVTCwgMHgwZDhiOGI4NlVMLCAweDBmOGE4YTg1VUwsCisgICAgMHhlMDcwNzA5MFVMLCAweDdjM2UzZTQyVUwsIDB4NzFiNWI1YzRVTCwgMHhjYzY2NjZhYVVMLAorICAgIDB4OTA0ODQ4ZDhVTCwgMHgwNjAzMDMwNVVMLCAweGY3ZjZmNjAxVUwsIDB4MWMwZTBlMTJVTCwKKyAgICAweGMyNjE2MWEzVUwsIDB4NmEzNTM1NWZVTCwgMHhhZTU3NTdmOVVMLCAweDY5YjliOWQwVUwsCisgICAgMHgxNzg2ODY5MVVMLCAweDk5YzFjMTU4VUwsIDB4M2ExZDFkMjdVTCwgMHgyNzllOWViOVVMLAorICAgIDB4ZDllMWUxMzhVTCwgMHhlYmY4ZjgxM1VMLCAweDJiOTg5OGIzVUwsIDB4MjIxMTExMzNVTCwKKyAgICAweGQyNjk2OWJiVUwsIDB4YTlkOWQ5NzBVTCwgMHgwNzhlOGU4OVVMLCAweDMzOTQ5NGE3VUwsCisgICAgMHgyZDliOWJiNlVMLCAweDNjMWUxZTIyVUwsIDB4MTU4Nzg3OTJVTCwgMHhjOWU5ZTkyMFVMLAorICAgIDB4ODdjZWNlNDlVTCwgMHhhYTU1NTVmZlVMLCAweDUwMjgyODc4VUwsIDB4YTVkZmRmN2FVTCwKKyAgICAweDAzOGM4YzhmVUwsIDB4NTlhMWExZjhVTCwgMHgwOTg5ODk4MFVMLCAweDFhMGQwZDE3VUwsCisgICAgMHg2NWJmYmZkYVVMLCAweGQ3ZTZlNjMxVUwsIDB4ODQ0MjQyYzZVTCwgMHhkMDY4NjhiOFVMLAorICAgIDB4ODI0MTQxYzNVTCwgMHgyOTk5OTliMFVMLCAweDVhMmQyZDc3VUwsIDB4MWUwZjBmMTFVTCwKKyAgICAweDdiYjBiMGNiVUwsIDB4YTg1NDU0ZmNVTCwgMHg2ZGJiYmJkNlVMLCAweDJjMTYxNjNhVUwsCit9OworCisjaWZuZGVmIFBFTElfVEFCCitzdGF0aWMgY29uc3QgdWxvbmczMiBUZTRbMjU2XSA9IHsKKyAgICAweDYzNjM2MzYzVUwsIDB4N2M3YzdjN2NVTCwgMHg3Nzc3Nzc3N1VMLCAweDdiN2I3YjdiVUwsCisgICAgMHhmMmYyZjJmMlVMLCAweDZiNmI2YjZiVUwsIDB4NmY2ZjZmNmZVTCwgMHhjNWM1YzVjNVVMLAorICAgIDB4MzAzMDMwMzBVTCwgMHgwMTAxMDEwMVVMLCAweDY3Njc2NzY3VUwsIDB4MmIyYjJiMmJVTCwKKyAgICAweGZlZmVmZWZlVUwsIDB4ZDdkN2Q3ZDdVTCwgMHhhYmFiYWJhYlVMLCAweDc2NzY3Njc2VUwsCisgICAgMHhjYWNhY2FjYVVMLCAweDgyODI4MjgyVUwsIDB4YzljOWM5YzlVTCwgMHg3ZDdkN2Q3ZFVMLAorICAgIDB4ZmFmYWZhZmFVTCwgMHg1OTU5NTk1OVVMLCAweDQ3NDc0NzQ3VUwsIDB4ZjBmMGYwZjBVTCwKKyAgICAweGFkYWRhZGFkVUwsIDB4ZDRkNGQ0ZDRVTCwgMHhhMmEyYTJhMlVMLCAweGFmYWZhZmFmVUwsCisgICAgMHg5YzljOWM5Y1VMLCAweGE0YTRhNGE0VUwsIDB4NzI3MjcyNzJVTCwgMHhjMGMwYzBjMFVMLAorICAgIDB4YjdiN2I3YjdVTCwgMHhmZGZkZmRmZFVMLCAweDkzOTM5MzkzVUwsIDB4MjYyNjI2MjZVTCwKKyAgICAweDM2MzYzNjM2VUwsIDB4M2YzZjNmM2ZVTCwgMHhmN2Y3ZjdmN1VMLCAweGNjY2NjY2NjVUwsCisgICAgMHgzNDM0MzQzNFVMLCAweGE1YTVhNWE1VUwsIDB4ZTVlNWU1ZTVVTCwgMHhmMWYxZjFmMVVMLAorICAgIDB4NzE3MTcxNzFVTCwgMHhkOGQ4ZDhkOFVMLCAweDMxMzEzMTMxVUwsIDB4MTUxNTE1MTVVTCwKKyAgICAweDA0MDQwNDA0VUwsIDB4YzdjN2M3YzdVTCwgMHgyMzIzMjMyM1VMLCAweGMzYzNjM2MzVUwsCisgICAgMHgxODE4MTgxOFVMLCAweDk2OTY5Njk2VUwsIDB4MDUwNTA1MDVVTCwgMHg5YTlhOWE5YVVMLAorICAgIDB4MDcwNzA3MDdVTCwgMHgxMjEyMTIxMlVMLCAweDgwODA4MDgwVUwsIDB4ZTJlMmUyZTJVTCwKKyAgICAweGViZWJlYmViVUwsIDB4MjcyNzI3MjdVTCwgMHhiMmIyYjJiMlVMLCAweDc1NzU3NTc1VUwsCisgICAgMHgwOTA5MDkwOVVMLCAweDgzODM4MzgzVUwsIDB4MmMyYzJjMmNVTCwgMHgxYTFhMWExYVVMLAorICAgIDB4MWIxYjFiMWJVTCwgMHg2ZTZlNmU2ZVVMLCAweDVhNWE1YTVhVUwsIDB4YTBhMGEwYTBVTCwKKyAgICAweDUyNTI1MjUyVUwsIDB4M2IzYjNiM2JVTCwgMHhkNmQ2ZDZkNlVMLCAweGIzYjNiM2IzVUwsCisgICAgMHgyOTI5MjkyOVVMLCAweGUzZTNlM2UzVUwsIDB4MmYyZjJmMmZVTCwgMHg4NDg0ODQ4NFVMLAorICAgIDB4NTM1MzUzNTNVTCwgMHhkMWQxZDFkMVVMLCAweDAwMDAwMDAwVUwsIDB4ZWRlZGVkZWRVTCwKKyAgICAweDIwMjAyMDIwVUwsIDB4ZmNmY2ZjZmNVTCwgMHhiMWIxYjFiMVVMLCAweDViNWI1YjViVUwsCisgICAgMHg2YTZhNmE2YVVMLCAweGNiY2JjYmNiVUwsIDB4YmViZWJlYmVVTCwgMHgzOTM5MzkzOVVMLAorICAgIDB4NGE0YTRhNGFVTCwgMHg0YzRjNGM0Y1VMLCAweDU4NTg1ODU4VUwsIDB4Y2ZjZmNmY2ZVTCwKKyAgICAweGQwZDBkMGQwVUwsIDB4ZWZlZmVmZWZVTCwgMHhhYWFhYWFhYVVMLCAweGZiZmJmYmZiVUwsCisgICAgMHg0MzQzNDM0M1VMLCAweDRkNGQ0ZDRkVUwsIDB4MzMzMzMzMzNVTCwgMHg4NTg1ODU4NVVMLAorICAgIDB4NDU0NTQ1NDVVTCwgMHhmOWY5ZjlmOVVMLCAweDAyMDIwMjAyVUwsIDB4N2Y3ZjdmN2ZVTCwKKyAgICAweDUwNTA1MDUwVUwsIDB4M2MzYzNjM2NVTCwgMHg5ZjlmOWY5ZlVMLCAweGE4YThhOGE4VUwsCisgICAgMHg1MTUxNTE1MVVMLCAweGEzYTNhM2EzVUwsIDB4NDA0MDQwNDBVTCwgMHg4ZjhmOGY4ZlVMLAorICAgIDB4OTI5MjkyOTJVTCwgMHg5ZDlkOWQ5ZFVMLCAweDM4MzgzODM4VUwsIDB4ZjVmNWY1ZjVVTCwKKyAgICAweGJjYmNiY2JjVUwsIDB4YjZiNmI2YjZVTCwgMHhkYWRhZGFkYVVMLCAweDIxMjEyMTIxVUwsCisgICAgMHgxMDEwMTAxMFVMLCAweGZmZmZmZmZmVUwsIDB4ZjNmM2YzZjNVTCwgMHhkMmQyZDJkMlVMLAorICAgIDB4Y2RjZGNkY2RVTCwgMHgwYzBjMGMwY1VMLCAweDEzMTMxMzEzVUwsIDB4ZWNlY2VjZWNVTCwKKyAgICAweDVmNWY1ZjVmVUwsIDB4OTc5Nzk3OTdVTCwgMHg0NDQ0NDQ0NFVMLCAweDE3MTcxNzE3VUwsCisgICAgMHhjNGM0YzRjNFVMLCAweGE3YTdhN2E3VUwsIDB4N2U3ZTdlN2VVTCwgMHgzZDNkM2QzZFVMLAorICAgIDB4NjQ2NDY0NjRVTCwgMHg1ZDVkNWQ1ZFVMLCAweDE5MTkxOTE5VUwsIDB4NzM3MzczNzNVTCwKKyAgICAweDYwNjA2MDYwVUwsIDB4ODE4MTgxODFVTCwgMHg0ZjRmNGY0ZlVMLCAweGRjZGNkY2RjVUwsCisgICAgMHgyMjIyMjIyMlVMLCAweDJhMmEyYTJhVUwsIDB4OTA5MDkwOTBVTCwgMHg4ODg4ODg4OFVMLAorICAgIDB4NDY0NjQ2NDZVTCwgMHhlZWVlZWVlZVVMLCAweGI4YjhiOGI4VUwsIDB4MTQxNDE0MTRVTCwKKyAgICAweGRlZGVkZWRlVUwsIDB4NWU1ZTVlNWVVTCwgMHgwYjBiMGIwYlVMLCAweGRiZGJkYmRiVUwsCisgICAgMHhlMGUwZTBlMFVMLCAweDMyMzIzMjMyVUwsIDB4M2EzYTNhM2FVTCwgMHgwYTBhMGEwYVVMLAorICAgIDB4NDk0OTQ5NDlVTCwgMHgwNjA2MDYwNlVMLCAweDI0MjQyNDI0VUwsIDB4NWM1YzVjNWNVTCwKKyAgICAweGMyYzJjMmMyVUwsIDB4ZDNkM2QzZDNVTCwgMHhhY2FjYWNhY1VMLCAweDYyNjI2MjYyVUwsCisgICAgMHg5MTkxOTE5MVVMLCAweDk1OTU5NTk1VUwsIDB4ZTRlNGU0ZTRVTCwgMHg3OTc5Nzk3OVVMLAorICAgIDB4ZTdlN2U3ZTdVTCwgMHhjOGM4YzhjOFVMLCAweDM3MzczNzM3VUwsIDB4NmQ2ZDZkNmRVTCwKKyAgICAweDhkOGQ4ZDhkVUwsIDB4ZDVkNWQ1ZDVVTCwgMHg0ZTRlNGU0ZVVMLCAweGE5YTlhOWE5VUwsCisgICAgMHg2YzZjNmM2Y1VMLCAweDU2NTY1NjU2VUwsIDB4ZjRmNGY0ZjRVTCwgMHhlYWVhZWFlYVVMLAorICAgIDB4NjU2NTY1NjVVTCwgMHg3YTdhN2E3YVVMLCAweGFlYWVhZWFlVUwsIDB4MDgwODA4MDhVTCwKKyAgICAweGJhYmFiYWJhVUwsIDB4Nzg3ODc4NzhVTCwgMHgyNTI1MjUyNVVMLCAweDJlMmUyZTJlVUwsCisgICAgMHgxYzFjMWMxY1VMLCAweGE2YTZhNmE2VUwsIDB4YjRiNGI0YjRVTCwgMHhjNmM2YzZjNlVMLAorICAgIDB4ZThlOGU4ZThVTCwgMHhkZGRkZGRkZFVMLCAweDc0NzQ3NDc0VUwsIDB4MWYxZjFmMWZVTCwKKyAgICAweDRiNGI0YjRiVUwsIDB4YmRiZGJkYmRVTCwgMHg4YjhiOGI4YlVMLCAweDhhOGE4YThhVUwsCisgICAgMHg3MDcwNzA3MFVMLCAweDNlM2UzZTNlVUwsIDB4YjViNWI1YjVVTCwgMHg2NjY2NjY2NlVMLAorICAgIDB4NDg0ODQ4NDhVTCwgMHgwMzAzMDMwM1VMLCAweGY2ZjZmNmY2VUwsIDB4MGUwZTBlMGVVTCwKKyAgICAweDYxNjE2MTYxVUwsIDB4MzUzNTM1MzVVTCwgMHg1NzU3NTc1N1VMLCAweGI5YjliOWI5VUwsCisgICAgMHg4Njg2ODY4NlVMLCAweGMxYzFjMWMxVUwsIDB4MWQxZDFkMWRVTCwgMHg5ZTllOWU5ZVVMLAorICAgIDB4ZTFlMWUxZTFVTCwgMHhmOGY4ZjhmOFVMLCAweDk4OTg5ODk4VUwsIDB4MTExMTExMTFVTCwKKyAgICAweDY5Njk2OTY5VUwsIDB4ZDlkOWQ5ZDlVTCwgMHg4ZThlOGU4ZVVMLCAweDk0OTQ5NDk0VUwsCisgICAgMHg5YjliOWI5YlVMLCAweDFlMWUxZTFlVUwsIDB4ODc4Nzg3ODdVTCwgMHhlOWU5ZTllOVVMLAorICAgIDB4Y2VjZWNlY2VVTCwgMHg1NTU1NTU1NVVMLCAweDI4MjgyODI4VUwsIDB4ZGZkZmRmZGZVTCwKKyAgICAweDhjOGM4YzhjVUwsIDB4YTFhMWExYTFVTCwgMHg4OTg5ODk4OVVMLCAweDBkMGQwZDBkVUwsCisgICAgMHhiZmJmYmZiZlVMLCAweGU2ZTZlNmU2VUwsIDB4NDI0MjQyNDJVTCwgMHg2ODY4Njg2OFVMLAorICAgIDB4NDE0MTQxNDFVTCwgMHg5OTk5OTk5OVVMLCAweDJkMmQyZDJkVUwsIDB4MGYwZjBmMGZVTCwKKyAgICAweGIwYjBiMGIwVUwsIDB4NTQ1NDU0NTRVTCwgMHhiYmJiYmJiYlVMLCAweDE2MTYxNjE2VUwsCit9OworI2VuZGlmCisKKyNpZm5kZWYgRU5DUllQVF9PTkxZCisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFREMFsyNTZdID0geworICAgIDB4NTFmNGE3NTBVTCwgMHg3ZTQxNjU1M1VMLCAweDFhMTdhNGMzVUwsIDB4M2EyNzVlOTZVTCwKKyAgICAweDNiYWI2YmNiVUwsIDB4MWY5ZDQ1ZjFVTCwgMHhhY2ZhNThhYlVMLCAweDRiZTMwMzkzVUwsCisgICAgMHgyMDMwZmE1NVVMLCAweGFkNzY2ZGY2VUwsIDB4ODhjYzc2OTFVTCwgMHhmNTAyNGMyNVVMLAorICAgIDB4NGZlNWQ3ZmNVTCwgMHhjNTJhY2JkN1VMLCAweDI2MzU0NDgwVUwsIDB4YjU2MmEzOGZVTCwKKyAgICAweGRlYjE1YTQ5VUwsIDB4MjViYTFiNjdVTCwgMHg0NWVhMGU5OFVMLCAweDVkZmVjMGUxVUwsCisgICAgMHhjMzJmNzUwMlVMLCAweDgxNGNmMDEyVUwsIDB4OGQ0Njk3YTNVTCwgMHg2YmQzZjljNlVMLAorICAgIDB4MDM4ZjVmZTdVTCwgMHgxNTkyOWM5NVVMLCAweGJmNmQ3YWViVUwsIDB4OTU1MjU5ZGFVTCwKKyAgICAweGQ0YmU4MzJkVUwsIDB4NTg3NDIxZDNVTCwgMHg0OWUwNjkyOVVMLCAweDhlYzljODQ0VUwsCisgICAgMHg3NWMyODk2YVVMLCAweGY0OGU3OTc4VUwsIDB4OTk1ODNlNmJVTCwgMHgyN2I5NzFkZFVMLAorICAgIDB4YmVlMTRmYjZVTCwgMHhmMDg4YWQxN1VMLCAweGM5MjBhYzY2VUwsIDB4N2RjZTNhYjRVTCwKKyAgICAweDYzZGY0YTE4VUwsIDB4ZTUxYTMxODJVTCwgMHg5NzUxMzM2MFVMLCAweDYyNTM3ZjQ1VUwsCisgICAgMHhiMTY0NzdlMFVMLCAweGJiNmJhZTg0VUwsIDB4ZmU4MWEwMWNVTCwgMHhmOTA4MmI5NFVMLAorICAgIDB4NzA0ODY4NThVTCwgMHg4ZjQ1ZmQxOVVMLCAweDk0ZGU2Yzg3VUwsIDB4NTI3YmY4YjdVTCwKKyAgICAweGFiNzNkMzIzVUwsIDB4NzI0YjAyZTJVTCwgMHhlMzFmOGY1N1VMLCAweDY2NTVhYjJhVUwsCisgICAgMHhiMmViMjgwN1VMLCAweDJmYjVjMjAzVUwsIDB4ODZjNTdiOWFVTCwgMHhkMzM3MDhhNVVMLAorICAgIDB4MzAyODg3ZjJVTCwgMHgyM2JmYTViMlVMLCAweDAyMDM2YWJhVUwsIDB4ZWQxNjgyNWNVTCwKKyAgICAweDhhY2YxYzJiVUwsIDB4YTc3OWI0OTJVTCwgMHhmMzA3ZjJmMFVMLCAweDRlNjllMmExVUwsCisgICAgMHg2NWRhZjRjZFVMLCAweDA2MDViZWQ1VUwsIDB4ZDEzNDYyMWZVTCwgMHhjNGE2ZmU4YVVMLAorICAgIDB4MzQyZTUzOWRVTCwgMHhhMmYzNTVhMFVMLCAweDA1OGFlMTMyVUwsIDB4YTRmNmViNzVVTCwKKyAgICAweDBiODNlYzM5VUwsIDB4NDA2MGVmYWFVTCwgMHg1ZTcxOWYwNlVMLCAweGJkNmUxMDUxVUwsCisgICAgMHgzZTIxOGFmOVVMLCAweDk2ZGQwNjNkVUwsIDB4ZGQzZTA1YWVVTCwgMHg0ZGU2YmQ0NlVMLAorICAgIDB4OTE1NDhkYjVVTCwgMHg3MWM0NWQwNVVMLCAweDA0MDZkNDZmVUwsIDB4NjA1MDE1ZmZVTCwKKyAgICAweDE5OThmYjI0VUwsIDB4ZDZiZGU5OTdVTCwgMHg4OTQwNDNjY1VMLCAweDY3ZDk5ZTc3VUwsCisgICAgMHhiMGU4NDJiZFVMLCAweDA3ODk4Yjg4VUwsIDB4ZTcxOTViMzhVTCwgMHg3OWM4ZWVkYlVMLAorICAgIDB4YTE3YzBhNDdVTCwgMHg3YzQyMGZlOVVMLCAweGY4ODQxZWM5VUwsIDB4MDAwMDAwMDBVTCwKKyAgICAweDA5ODA4NjgzVUwsIDB4MzIyYmVkNDhVTCwgMHgxZTExNzBhY1VMLCAweDZjNWE3MjRlVUwsCisgICAgMHhmZDBlZmZmYlVMLCAweDBmODUzODU2VUwsIDB4M2RhZWQ1MWVVTCwgMHgzNjJkMzkyN1VMLAorICAgIDB4MGEwZmQ5NjRVTCwgMHg2ODVjYTYyMVVMLCAweDliNWI1NGQxVUwsIDB4MjQzNjJlM2FVTCwKKyAgICAweDBjMGE2N2IxVUwsIDB4OTM1N2U3MGZVTCwgMHhiNGVlOTZkMlVMLCAweDFiOWI5MTllVUwsCisgICAgMHg4MGMwYzU0ZlVMLCAweDYxZGMyMGEyVUwsIDB4NWE3NzRiNjlVTCwgMHgxYzEyMWExNlVMLAorICAgIDB4ZTI5M2JhMGFVTCwgMHhjMGEwMmFlNVVMLCAweDNjMjJlMDQzVUwsIDB4MTIxYjE3MWRVTCwKKyAgICAweDBlMDkwZDBiVUwsIDB4ZjI4YmM3YWRVTCwgMHgyZGI2YThiOVVMLCAweDE0MWVhOWM4VUwsCisgICAgMHg1N2YxMTk4NVVMLCAweGFmNzUwNzRjVUwsIDB4ZWU5OWRkYmJVTCwgMHhhMzdmNjBmZFVMLAorICAgIDB4ZjcwMTI2OWZVTCwgMHg1YzcyZjViY1VMLCAweDQ0NjYzYmM1VUwsIDB4NWJmYjdlMzRVTCwKKyAgICAweDhiNDMyOTc2VUwsIDB4Y2IyM2M2ZGNVTCwgMHhiNmVkZmM2OFVMLCAweGI4ZTRmMTYzVUwsCisgICAgMHhkNzMxZGNjYVVMLCAweDQyNjM4NTEwVUwsIDB4MTM5NzIyNDBVTCwgMHg4NGM2MTEyMFVMLAorICAgIDB4ODU0YTI0N2RVTCwgMHhkMmJiM2RmOFVMLCAweGFlZjkzMjExVUwsIDB4YzcyOWExNmRVTCwKKyAgICAweDFkOWUyZjRiVUwsIDB4ZGNiMjMwZjNVTCwgMHgwZDg2NTJlY1VMLCAweDc3YzFlM2QwVUwsCisgICAgMHgyYmIzMTY2Y1VMLCAweGE5NzBiOTk5VUwsIDB4MTE5NDQ4ZmFVTCwgMHg0N2U5NjQyMlVMLAorICAgIDB4YThmYzhjYzRVTCwgMHhhMGYwM2YxYVVMLCAweDU2N2QyY2Q4VUwsIDB4MjIzMzkwZWZVTCwKKyAgICAweDg3NDk0ZWM3VUwsIDB4ZDkzOGQxYzFVTCwgMHg4Y2NhYTJmZVVMLCAweDk4ZDQwYjM2VUwsCisgICAgMHhhNmY1ODFjZlVMLCAweGE1N2FkZTI4VUwsIDB4ZGFiNzhlMjZVTCwgMHgzZmFkYmZhNFVMLAorICAgIDB4MmMzYTlkZTRVTCwgMHg1MDc4OTIwZFVMLCAweDZhNWZjYzliVUwsIDB4NTQ3ZTQ2NjJVTCwKKyAgICAweGY2OGQxM2MyVUwsIDB4OTBkOGI4ZThVTCwgMHgyZTM5Zjc1ZVVMLCAweDgyYzNhZmY1VUwsCisgICAgMHg5ZjVkODBiZVVMLCAweDY5ZDA5MzdjVUwsIDB4NmZkNTJkYTlVTCwgMHhjZjI1MTJiM1VMLAorICAgIDB4YzhhYzk5M2JVTCwgMHgxMDE4N2RhN1VMLCAweGU4OWM2MzZlVUwsIDB4ZGIzYmJiN2JVTCwKKyAgICAweGNkMjY3ODA5VUwsIDB4NmU1OTE4ZjRVTCwgMHhlYzlhYjcwMVVMLCAweDgzNGY5YWE4VUwsCisgICAgMHhlNjk1NmU2NVVMLCAweGFhZmZlNjdlVUwsIDB4MjFiY2NmMDhVTCwgMHhlZjE1ZThlNlVMLAorICAgIDB4YmFlNzliZDlVTCwgMHg0YTZmMzZjZVVMLCAweGVhOWYwOWQ0VUwsIDB4MjliMDdjZDZVTCwKKyAgICAweDMxYTRiMmFmVUwsIDB4MmEzZjIzMzFVTCwgMHhjNmE1OTQzMFVMLCAweDM1YTI2NmMwVUwsCisgICAgMHg3NDRlYmMzN1VMLCAweGZjODJjYWE2VUwsIDB4ZTA5MGQwYjBVTCwgMHgzM2E3ZDgxNVVMLAorICAgIDB4ZjEwNDk4NGFVTCwgMHg0MWVjZGFmN1VMLCAweDdmY2Q1MDBlVUwsIDB4MTc5MWY2MmZVTCwKKyAgICAweDc2NGRkNjhkVUwsIDB4NDNlZmIwNGRVTCwgMHhjY2FhNGQ1NFVMLCAweGU0OTYwNGRmVUwsCisgICAgMHg5ZWQxYjVlM1VMLCAweDRjNmE4ODFiVUwsIDB4YzEyYzFmYjhVTCwgMHg0NjY1NTE3ZlVMLAorICAgIDB4OWQ1ZWVhMDRVTCwgMHgwMThjMzU1ZFVMLCAweGZhODc3NDczVUwsIDB4ZmIwYjQxMmVVTCwKKyAgICAweGIzNjcxZDVhVUwsIDB4OTJkYmQyNTJVTCwgMHhlOTEwNTYzM1VMLCAweDZkZDY0NzEzVUwsCisgICAgMHg5YWQ3NjE4Y1VMLCAweDM3YTEwYzdhVUwsIDB4NTlmODE0OGVVTCwgMHhlYjEzM2M4OVVMLAorICAgIDB4Y2VhOTI3ZWVVTCwgMHhiNzYxYzkzNVVMLCAweGUxMWNlNWVkVUwsIDB4N2E0N2IxM2NVTCwKKyAgICAweDljZDJkZjU5VUwsIDB4NTVmMjczM2ZVTCwgMHgxODE0Y2U3OVVMLCAweDczYzczN2JmVUwsCisgICAgMHg1M2Y3Y2RlYVVMLCAweDVmZmRhYTViVUwsIDB4ZGYzZDZmMTRVTCwgMHg3ODQ0ZGI4NlVMLAorICAgIDB4Y2FhZmYzODFVTCwgMHhiOTY4YzQzZVVMLCAweDM4MjQzNDJjVUwsIDB4YzJhMzQwNWZVTCwKKyAgICAweDE2MWRjMzcyVUwsIDB4YmNlMjI1MGNVTCwgMHgyODNjNDk4YlVMLCAweGZmMGQ5NTQxVUwsCisgICAgMHgzOWE4MDE3MVVMLCAweDA4MGNiM2RlVUwsIDB4ZDhiNGU0OWNVTCwgMHg2NDU2YzE5MFVMLAorICAgIDB4N2JjYjg0NjFVTCwgMHhkNTMyYjY3MFVMLCAweDQ4NmM1Yzc0VUwsIDB4ZDBiODU3NDJVTCwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFRkNFsyNTZdID0geworICAgIDB4NTI1MjUyNTJVTCwgMHgwOTA5MDkwOVVMLCAweDZhNmE2YTZhVUwsIDB4ZDVkNWQ1ZDVVTCwKKyAgICAweDMwMzAzMDMwVUwsIDB4MzYzNjM2MzZVTCwgMHhhNWE1YTVhNVVMLCAweDM4MzgzODM4VUwsCisgICAgMHhiZmJmYmZiZlVMLCAweDQwNDA0MDQwVUwsIDB4YTNhM2EzYTNVTCwgMHg5ZTllOWU5ZVVMLAorICAgIDB4ODE4MTgxODFVTCwgMHhmM2YzZjNmM1VMLCAweGQ3ZDdkN2Q3VUwsIDB4ZmJmYmZiZmJVTCwKKyAgICAweDdjN2M3YzdjVUwsIDB4ZTNlM2UzZTNVTCwgMHgzOTM5MzkzOVVMLCAweDgyODI4MjgyVUwsCisgICAgMHg5YjliOWI5YlVMLCAweDJmMmYyZjJmVUwsIDB4ZmZmZmZmZmZVTCwgMHg4Nzg3ODc4N1VMLAorICAgIDB4MzQzNDM0MzRVTCwgMHg4ZThlOGU4ZVVMLCAweDQzNDM0MzQzVUwsIDB4NDQ0NDQ0NDRVTCwKKyAgICAweGM0YzRjNGM0VUwsIDB4ZGVkZWRlZGVVTCwgMHhlOWU5ZTllOVVMLCAweGNiY2JjYmNiVUwsCisgICAgMHg1NDU0NTQ1NFVMLCAweDdiN2I3YjdiVUwsIDB4OTQ5NDk0OTRVTCwgMHgzMjMyMzIzMlVMLAorICAgIDB4YTZhNmE2YTZVTCwgMHhjMmMyYzJjMlVMLCAweDIzMjMyMzIzVUwsIDB4M2QzZDNkM2RVTCwKKyAgICAweGVlZWVlZWVlVUwsIDB4NGM0YzRjNGNVTCwgMHg5NTk1OTU5NVVMLCAweDBiMGIwYjBiVUwsCisgICAgMHg0MjQyNDI0MlVMLCAweGZhZmFmYWZhVUwsIDB4YzNjM2MzYzNVTCwgMHg0ZTRlNGU0ZVVMLAorICAgIDB4MDgwODA4MDhVTCwgMHgyZTJlMmUyZVVMLCAweGExYTFhMWExVUwsIDB4NjY2NjY2NjZVTCwKKyAgICAweDI4MjgyODI4VUwsIDB4ZDlkOWQ5ZDlVTCwgMHgyNDI0MjQyNFVMLCAweGIyYjJiMmIyVUwsCisgICAgMHg3Njc2NzY3NlVMLCAweDViNWI1YjViVUwsIDB4YTJhMmEyYTJVTCwgMHg0OTQ5NDk0OVVMLAorICAgIDB4NmQ2ZDZkNmRVTCwgMHg4YjhiOGI4YlVMLCAweGQxZDFkMWQxVUwsIDB4MjUyNTI1MjVVTCwKKyAgICAweDcyNzI3MjcyVUwsIDB4ZjhmOGY4ZjhVTCwgMHhmNmY2ZjZmNlVMLCAweDY0NjQ2NDY0VUwsCisgICAgMHg4Njg2ODY4NlVMLCAweDY4Njg2ODY4VUwsIDB4OTg5ODk4OThVTCwgMHgxNjE2MTYxNlVMLAorICAgIDB4ZDRkNGQ0ZDRVTCwgMHhhNGE0YTRhNFVMLCAweDVjNWM1YzVjVUwsIDB4Y2NjY2NjY2NVTCwKKyAgICAweDVkNWQ1ZDVkVUwsIDB4NjU2NTY1NjVVTCwgMHhiNmI2YjZiNlVMLCAweDkyOTI5MjkyVUwsCisgICAgMHg2YzZjNmM2Y1VMLCAweDcwNzA3MDcwVUwsIDB4NDg0ODQ4NDhVTCwgMHg1MDUwNTA1MFVMLAorICAgIDB4ZmRmZGZkZmRVTCwgMHhlZGVkZWRlZFVMLCAweGI5YjliOWI5VUwsIDB4ZGFkYWRhZGFVTCwKKyAgICAweDVlNWU1ZTVlVUwsIDB4MTUxNTE1MTVVTCwgMHg0NjQ2NDY0NlVMLCAweDU3NTc1NzU3VUwsCisgICAgMHhhN2E3YTdhN1VMLCAweDhkOGQ4ZDhkVUwsIDB4OWQ5ZDlkOWRVTCwgMHg4NDg0ODQ4NFVMLAorICAgIDB4OTA5MDkwOTBVTCwgMHhkOGQ4ZDhkOFVMLCAweGFiYWJhYmFiVUwsIDB4MDAwMDAwMDBVTCwKKyAgICAweDhjOGM4YzhjVUwsIDB4YmNiY2JjYmNVTCwgMHhkM2QzZDNkM1VMLCAweDBhMGEwYTBhVUwsCisgICAgMHhmN2Y3ZjdmN1VMLCAweGU0ZTRlNGU0VUwsIDB4NTg1ODU4NThVTCwgMHgwNTA1MDUwNVVMLAorICAgIDB4YjhiOGI4YjhVTCwgMHhiM2IzYjNiM1VMLCAweDQ1NDU0NTQ1VUwsIDB4MDYwNjA2MDZVTCwKKyAgICAweGQwZDBkMGQwVUwsIDB4MmMyYzJjMmNVTCwgMHgxZTFlMWUxZVVMLCAweDhmOGY4ZjhmVUwsCisgICAgMHhjYWNhY2FjYVVMLCAweDNmM2YzZjNmVUwsIDB4MGYwZjBmMGZVTCwgMHgwMjAyMDIwMlVMLAorICAgIDB4YzFjMWMxYzFVTCwgMHhhZmFmYWZhZlVMLCAweGJkYmRiZGJkVUwsIDB4MDMwMzAzMDNVTCwKKyAgICAweDAxMDEwMTAxVUwsIDB4MTMxMzEzMTNVTCwgMHg4YThhOGE4YVVMLCAweDZiNmI2YjZiVUwsCisgICAgMHgzYTNhM2EzYVVMLCAweDkxOTE5MTkxVUwsIDB4MTExMTExMTFVTCwgMHg0MTQxNDE0MVVMLAorICAgIDB4NGY0ZjRmNGZVTCwgMHg2NzY3Njc2N1VMLCAweGRjZGNkY2RjVUwsIDB4ZWFlYWVhZWFVTCwKKyAgICAweDk3OTc5Nzk3VUwsIDB4ZjJmMmYyZjJVTCwgMHhjZmNmY2ZjZlVMLCAweGNlY2VjZWNlVUwsCisgICAgMHhmMGYwZjBmMFVMLCAweGI0YjRiNGI0VUwsIDB4ZTZlNmU2ZTZVTCwgMHg3MzczNzM3M1VMLAorICAgIDB4OTY5Njk2OTZVTCwgMHhhY2FjYWNhY1VMLCAweDc0NzQ3NDc0VUwsIDB4MjIyMjIyMjJVTCwKKyAgICAweGU3ZTdlN2U3VUwsIDB4YWRhZGFkYWRVTCwgMHgzNTM1MzUzNVVMLCAweDg1ODU4NTg1VUwsCisgICAgMHhlMmUyZTJlMlVMLCAweGY5ZjlmOWY5VUwsIDB4MzczNzM3MzdVTCwgMHhlOGU4ZThlOFVMLAorICAgIDB4MWMxYzFjMWNVTCwgMHg3NTc1NzU3NVVMLCAweGRmZGZkZmRmVUwsIDB4NmU2ZTZlNmVVTCwKKyAgICAweDQ3NDc0NzQ3VUwsIDB4ZjFmMWYxZjFVTCwgMHgxYTFhMWExYVVMLCAweDcxNzE3MTcxVUwsCisgICAgMHgxZDFkMWQxZFVMLCAweDI5MjkyOTI5VUwsIDB4YzVjNWM1YzVVTCwgMHg4OTg5ODk4OVVMLAorICAgIDB4NmY2ZjZmNmZVTCwgMHhiN2I3YjdiN1VMLCAweDYyNjI2MjYyVUwsIDB4MGUwZTBlMGVVTCwKKyAgICAweGFhYWFhYWFhVUwsIDB4MTgxODE4MThVTCwgMHhiZWJlYmViZVVMLCAweDFiMWIxYjFiVUwsCisgICAgMHhmY2ZjZmNmY1VMLCAweDU2NTY1NjU2VUwsIDB4M2UzZTNlM2VVTCwgMHg0YjRiNGI0YlVMLAorICAgIDB4YzZjNmM2YzZVTCwgMHhkMmQyZDJkMlVMLCAweDc5Nzk3OTc5VUwsIDB4MjAyMDIwMjBVTCwKKyAgICAweDlhOWE5YTlhVUwsIDB4ZGJkYmRiZGJVTCwgMHhjMGMwYzBjMFVMLCAweGZlZmVmZWZlVUwsCisgICAgMHg3ODc4Nzg3OFVMLCAweGNkY2RjZGNkVUwsIDB4NWE1YTVhNWFVTCwgMHhmNGY0ZjRmNFVMLAorICAgIDB4MWYxZjFmMWZVTCwgMHhkZGRkZGRkZFVMLCAweGE4YThhOGE4VUwsIDB4MzMzMzMzMzNVTCwKKyAgICAweDg4ODg4ODg4VUwsIDB4MDcwNzA3MDdVTCwgMHhjN2M3YzdjN1VMLCAweDMxMzEzMTMxVUwsCisgICAgMHhiMWIxYjFiMVVMLCAweDEyMTIxMjEyVUwsIDB4MTAxMDEwMTBVTCwgMHg1OTU5NTk1OVVMLAorICAgIDB4MjcyNzI3MjdVTCwgMHg4MDgwODA4MFVMLCAweGVjZWNlY2VjVUwsIDB4NWY1ZjVmNWZVTCwKKyAgICAweDYwNjA2MDYwVUwsIDB4NTE1MTUxNTFVTCwgMHg3ZjdmN2Y3ZlVMLCAweGE5YTlhOWE5VUwsCisgICAgMHgxOTE5MTkxOVVMLCAweGI1YjViNWI1VUwsIDB4NGE0YTRhNGFVTCwgMHgwZDBkMGQwZFVMLAorICAgIDB4MmQyZDJkMmRVTCwgMHhlNWU1ZTVlNVVMLCAweDdhN2E3YTdhVUwsIDB4OWY5ZjlmOWZVTCwKKyAgICAweDkzOTM5MzkzVUwsIDB4YzljOWM5YzlVTCwgMHg5YzljOWM5Y1VMLCAweGVmZWZlZmVmVUwsCisgICAgMHhhMGEwYTBhMFVMLCAweGUwZTBlMGUwVUwsIDB4M2IzYjNiM2JVTCwgMHg0ZDRkNGQ0ZFVMLAorICAgIDB4YWVhZWFlYWVVTCwgMHgyYTJhMmEyYVVMLCAweGY1ZjVmNWY1VUwsIDB4YjBiMGIwYjBVTCwKKyAgICAweGM4YzhjOGM4VUwsIDB4ZWJlYmViZWJVTCwgMHhiYmJiYmJiYlVMLCAweDNjM2MzYzNjVUwsCisgICAgMHg4MzgzODM4M1VMLCAweDUzNTM1MzUzVUwsIDB4OTk5OTk5OTlVTCwgMHg2MTYxNjE2MVVMLAorICAgIDB4MTcxNzE3MTdVTCwgMHgyYjJiMmIyYlVMLCAweDA0MDQwNDA0VUwsIDB4N2U3ZTdlN2VVTCwKKyAgICAweGJhYmFiYWJhVUwsIDB4Nzc3Nzc3NzdVTCwgMHhkNmQ2ZDZkNlVMLCAweDI2MjYyNjI2VUwsCisgICAgMHhlMWUxZTFlMVVMLCAweDY5Njk2OTY5VUwsIDB4MTQxNDE0MTRVTCwgMHg2MzYzNjM2M1VMLAorICAgIDB4NTU1NTU1NTVVTCwgMHgyMTIxMjEyMVVMLCAweDBjMGMwYzBjVUwsIDB4N2Q3ZDdkN2RVTCwKK307CisKKyNlbmRpZiAvKiBFTkNSWVBUX09OTFkgKi8KKworI2lmZGVmIExUQ19TTUFMTF9DT0RFCisKKyNkZWZpbmUgVGUwKHgpIFRFMFt4XQorI2RlZmluZSBUZTEoeCkgUk9SYyhURTBbeF0sIDgpCisjZGVmaW5lIFRlMih4KSBST1JjKFRFMFt4XSwgMTYpCisjZGVmaW5lIFRlMyh4KSBST1JjKFRFMFt4XSwgMjQpCisKKyNkZWZpbmUgVGQwKHgpIFREMFt4XQorI2RlZmluZSBUZDEoeCkgUk9SYyhURDBbeF0sIDgpCisjZGVmaW5lIFRkMih4KSBST1JjKFREMFt4XSwgMTYpCisjZGVmaW5lIFRkMyh4KSBST1JjKFREMFt4XSwgMjQpCisKKyNkZWZpbmUgVGU0XzAgMHgwMDAwMDBGRiAmIFRlNAorI2RlZmluZSBUZTRfMSAweDAwMDBGRjAwICYgVGU0CisjZGVmaW5lIFRlNF8yIDB4MDBGRjAwMDAgJiBUZTQKKyNkZWZpbmUgVGU0XzMgMHhGRjAwMDAwMCAmIFRlNAorCisjZWxzZQorCisjZGVmaW5lIFRlMCh4KSBURTBbeF0KKyNkZWZpbmUgVGUxKHgpIFRFMVt4XQorI2RlZmluZSBUZTIoeCkgVEUyW3hdCisjZGVmaW5lIFRlMyh4KSBURTNbeF0KKworI2RlZmluZSBUZDAoeCkgVEQwW3hdCisjZGVmaW5lIFRkMSh4KSBURDFbeF0KKyNkZWZpbmUgVGQyKHgpIFREMlt4XQorI2RlZmluZSBUZDMoeCkgVEQzW3hdCisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFRFMVsyNTZdID0geworICAgIDB4YTVjNjYzNjNVTCwgMHg4NGY4N2M3Y1VMLCAweDk5ZWU3Nzc3VUwsIDB4OGRmNjdiN2JVTCwKKyAgICAweDBkZmZmMmYyVUwsIDB4YmRkNjZiNmJVTCwgMHhiMWRlNmY2ZlVMLCAweDU0OTFjNWM1VUwsCisgICAgMHg1MDYwMzAzMFVMLCAweDAzMDIwMTAxVUwsIDB4YTljZTY3NjdVTCwgMHg3ZDU2MmIyYlVMLAorICAgIDB4MTllN2ZlZmVVTCwgMHg2MmI1ZDdkN1VMLCAweGU2NGRhYmFiVUwsIDB4OWFlYzc2NzZVTCwKKyAgICAweDQ1OGZjYWNhVUwsIDB4OWQxZjgyODJVTCwgMHg0MDg5YzljOVVMLCAweDg3ZmE3ZDdkVUwsCisgICAgMHgxNWVmZmFmYVVMLCAweGViYjI1OTU5VUwsIDB4Yzk4ZTQ3NDdVTCwgMHgwYmZiZjBmMFVMLAorICAgIDB4ZWM0MWFkYWRVTCwgMHg2N2IzZDRkNFVMLCAweGZkNWZhMmEyVUwsIDB4ZWE0NWFmYWZVTCwKKyAgICAweGJmMjM5YzljVUwsIDB4Zjc1M2E0YTRVTCwgMHg5NmU0NzI3MlVMLCAweDViOWJjMGMwVUwsCisgICAgMHhjMjc1YjdiN1VMLCAweDFjZTFmZGZkVUwsIDB4YWUzZDkzOTNVTCwgMHg2YTRjMjYyNlVMLAorICAgIDB4NWE2YzM2MzZVTCwgMHg0MTdlM2YzZlVMLCAweDAyZjVmN2Y3VUwsIDB4NGY4M2NjY2NVTCwKKyAgICAweDVjNjgzNDM0VUwsIDB4ZjQ1MWE1YTVVTCwgMHgzNGQxZTVlNVVMLCAweDA4ZjlmMWYxVUwsCisgICAgMHg5M2UyNzE3MVVMLCAweDczYWJkOGQ4VUwsIDB4NTM2MjMxMzFVTCwgMHgzZjJhMTUxNVVMLAorICAgIDB4MGMwODA0MDRVTCwgMHg1Mjk1YzdjN1VMLCAweDY1NDYyMzIzVUwsIDB4NWU5ZGMzYzNVTCwKKyAgICAweDI4MzAxODE4VUwsIDB4YTEzNzk2OTZVTCwgMHgwZjBhMDUwNVVMLCAweGI1MmY5YTlhVUwsCisgICAgMHgwOTBlMDcwN1VMLCAweDM2MjQxMjEyVUwsIDB4OWIxYjgwODBVTCwgMHgzZGRmZTJlMlVMLAorICAgIDB4MjZjZGViZWJVTCwgMHg2OTRlMjcyN1VMLCAweGNkN2ZiMmIyVUwsIDB4OWZlYTc1NzVVTCwKKyAgICAweDFiMTIwOTA5VUwsIDB4OWUxZDgzODNVTCwgMHg3NDU4MmMyY1VMLCAweDJlMzQxYTFhVUwsCisgICAgMHgyZDM2MWIxYlVMLCAweGIyZGM2ZTZlVUwsIDB4ZWViNDVhNWFVTCwgMHhmYjViYTBhMFVMLAorICAgIDB4ZjZhNDUyNTJVTCwgMHg0ZDc2M2IzYlVMLCAweDYxYjdkNmQ2VUwsIDB4Y2U3ZGIzYjNVTCwKKyAgICAweDdiNTIyOTI5VUwsIDB4M2VkZGUzZTNVTCwgMHg3MTVlMmYyZlVMLCAweDk3MTM4NDg0VUwsCisgICAgMHhmNWE2NTM1M1VMLCAweDY4YjlkMWQxVUwsIDB4MDAwMDAwMDBVTCwgMHgyY2MxZWRlZFVMLAorICAgIDB4NjA0MDIwMjBVTCwgMHgxZmUzZmNmY1VMLCAweGM4NzliMWIxVUwsIDB4ZWRiNjViNWJVTCwKKyAgICAweGJlZDQ2YTZhVUwsIDB4NDY4ZGNiY2JVTCwgMHhkOTY3YmViZVVMLCAweDRiNzIzOTM5VUwsCisgICAgMHhkZTk0NGE0YVVMLCAweGQ0OTg0YzRjVUwsIDB4ZThiMDU4NThVTCwgMHg0YTg1Y2ZjZlVMLAorICAgIDB4NmJiYmQwZDBVTCwgMHgyYWM1ZWZlZlVMLCAweGU1NGZhYWFhVUwsIDB4MTZlZGZiZmJVTCwKKyAgICAweGM1ODY0MzQzVUwsIDB4ZDc5YTRkNGRVTCwgMHg1NTY2MzMzM1VMLCAweDk0MTE4NTg1VUwsCisgICAgMHhjZjhhNDU0NVVMLCAweDEwZTlmOWY5VUwsIDB4MDYwNDAyMDJVTCwgMHg4MWZlN2Y3ZlVMLAorICAgIDB4ZjBhMDUwNTBVTCwgMHg0NDc4M2MzY1VMLCAweGJhMjU5ZjlmVUwsIDB4ZTM0YmE4YThVTCwKKyAgICAweGYzYTI1MTUxVUwsIDB4ZmU1ZGEzYTNVTCwgMHhjMDgwNDA0MFVMLCAweDhhMDU4ZjhmVUwsCisgICAgMHhhZDNmOTI5MlVMLCAweGJjMjE5ZDlkVUwsIDB4NDg3MDM4MzhVTCwgMHgwNGYxZjVmNVVMLAorICAgIDB4ZGY2M2JjYmNVTCwgMHhjMTc3YjZiNlVMLCAweDc1YWZkYWRhVUwsIDB4NjM0MjIxMjFVTCwKKyAgICAweDMwMjAxMDEwVUwsIDB4MWFlNWZmZmZVTCwgMHgwZWZkZjNmM1VMLCAweDZkYmZkMmQyVUwsCisgICAgMHg0YzgxY2RjZFVMLCAweDE0MTgwYzBjVUwsIDB4MzUyNjEzMTNVTCwgMHgyZmMzZWNlY1VMLAorICAgIDB4ZTFiZTVmNWZVTCwgMHhhMjM1OTc5N1VMLCAweGNjODg0NDQ0VUwsIDB4MzkyZTE3MTdVTCwKKyAgICAweDU3OTNjNGM0VUwsIDB4ZjI1NWE3YTdVTCwgMHg4MmZjN2U3ZVVMLCAweDQ3N2EzZDNkVUwsCisgICAgMHhhY2M4NjQ2NFVMLCAweGU3YmE1ZDVkVUwsIDB4MmIzMjE5MTlVTCwgMHg5NWU2NzM3M1VMLAorICAgIDB4YTBjMDYwNjBVTCwgMHg5ODE5ODE4MVVMLCAweGQxOWU0ZjRmVUwsIDB4N2ZhM2RjZGNVTCwKKyAgICAweDY2NDQyMjIyVUwsIDB4N2U1NDJhMmFVTCwgMHhhYjNiOTA5MFVMLCAweDgzMGI4ODg4VUwsCisgICAgMHhjYThjNDY0NlVMLCAweDI5YzdlZWVlVUwsIDB4ZDM2YmI4YjhVTCwgMHgzYzI4MTQxNFVMLAorICAgIDB4NzlhN2RlZGVVTCwgMHhlMmJjNWU1ZVVMLCAweDFkMTYwYjBiVUwsIDB4NzZhZGRiZGJVTCwKKyAgICAweDNiZGJlMGUwVUwsIDB4NTY2NDMyMzJVTCwgMHg0ZTc0M2EzYVVMLCAweDFlMTQwYTBhVUwsCisgICAgMHhkYjkyNDk0OVVMLCAweDBhMGMwNjA2VUwsIDB4NmM0ODI0MjRVTCwgMHhlNGI4NWM1Y1VMLAorICAgIDB4NWQ5ZmMyYzJVTCwgMHg2ZWJkZDNkM1VMLCAweGVmNDNhY2FjVUwsIDB4YTZjNDYyNjJVTCwKKyAgICAweGE4Mzk5MTkxVUwsIDB4YTQzMTk1OTVVTCwgMHgzN2QzZTRlNFVMLCAweDhiZjI3OTc5VUwsCisgICAgMHgzMmQ1ZTdlN1VMLCAweDQzOGJjOGM4VUwsIDB4NTk2ZTM3MzdVTCwgMHhiN2RhNmQ2ZFVMLAorICAgIDB4OGMwMThkOGRVTCwgMHg2NGIxZDVkNVVMLCAweGQyOWM0ZTRlVUwsIDB4ZTA0OWE5YTlVTCwKKyAgICAweGI0ZDg2YzZjVUwsIDB4ZmFhYzU2NTZVTCwgMHgwN2YzZjRmNFVMLCAweDI1Y2ZlYWVhVUwsCisgICAgMHhhZmNhNjU2NVVMLCAweDhlZjQ3YTdhVUwsIDB4ZTk0N2FlYWVVTCwgMHgxODEwMDgwOFVMLAorICAgIDB4ZDU2ZmJhYmFVTCwgMHg4OGYwNzg3OFVMLCAweDZmNGEyNTI1VUwsIDB4NzI1YzJlMmVVTCwKKyAgICAweDI0MzgxYzFjVUwsIDB4ZjE1N2E2YTZVTCwgMHhjNzczYjRiNFVMLCAweDUxOTdjNmM2VUwsCisgICAgMHgyM2NiZThlOFVMLCAweDdjYTFkZGRkVUwsIDB4OWNlODc0NzRVTCwgMHgyMTNlMWYxZlVMLAorICAgIDB4ZGQ5NjRiNGJVTCwgMHhkYzYxYmRiZFVMLCAweDg2MGQ4YjhiVUwsIDB4ODUwZjhhOGFVTCwKKyAgICAweDkwZTA3MDcwVUwsIDB4NDI3YzNlM2VVTCwgMHhjNDcxYjViNVVMLCAweGFhY2M2NjY2VUwsCisgICAgMHhkODkwNDg0OFVMLCAweDA1MDYwMzAzVUwsIDB4MDFmN2Y2ZjZVTCwgMHgxMjFjMGUwZVVMLAorICAgIDB4YTNjMjYxNjFVTCwgMHg1ZjZhMzUzNVVMLCAweGY5YWU1NzU3VUwsIDB4ZDA2OWI5YjlVTCwKKyAgICAweDkxMTc4Njg2VUwsIDB4NTg5OWMxYzFVTCwgMHgyNzNhMWQxZFVMLCAweGI5Mjc5ZTllVUwsCisgICAgMHgzOGQ5ZTFlMVVMLCAweDEzZWJmOGY4VUwsIDB4YjMyYjk4OThVTCwgMHgzMzIyMTExMVVMLAorICAgIDB4YmJkMjY5NjlVTCwgMHg3MGE5ZDlkOVVMLCAweDg5MDc4ZThlVUwsIDB4YTczMzk0OTRVTCwKKyAgICAweGI2MmQ5YjliVUwsIDB4MjIzYzFlMWVVTCwgMHg5MjE1ODc4N1VMLCAweDIwYzllOWU5VUwsCisgICAgMHg0OTg3Y2VjZVVMLCAweGZmYWE1NTU1VUwsIDB4Nzg1MDI4MjhVTCwgMHg3YWE1ZGZkZlVMLAorICAgIDB4OGYwMzhjOGNVTCwgMHhmODU5YTFhMVVMLCAweDgwMDk4OTg5VUwsIDB4MTcxYTBkMGRVTCwKKyAgICAweGRhNjViZmJmVUwsIDB4MzFkN2U2ZTZVTCwgMHhjNjg0NDI0MlVMLCAweGI4ZDA2ODY4VUwsCisgICAgMHhjMzgyNDE0MVVMLCAweGIwMjk5OTk5VUwsIDB4Nzc1YTJkMmRVTCwgMHgxMTFlMGYwZlVMLAorICAgIDB4Y2I3YmIwYjBVTCwgMHhmY2E4NTQ1NFVMLCAweGQ2NmRiYmJiVUwsIDB4M2EyYzE2MTZVTCwKK307CitzdGF0aWMgY29uc3QgdWxvbmczMiBURTJbMjU2XSA9IHsKKyAgICAweDYzYTVjNjYzVUwsIDB4N2M4NGY4N2NVTCwgMHg3Nzk5ZWU3N1VMLCAweDdiOGRmNjdiVUwsCisgICAgMHhmMjBkZmZmMlVMLCAweDZiYmRkNjZiVUwsIDB4NmZiMWRlNmZVTCwgMHhjNTU0OTFjNVVMLAorICAgIDB4MzA1MDYwMzBVTCwgMHgwMTAzMDIwMVVMLCAweDY3YTljZTY3VUwsIDB4MmI3ZDU2MmJVTCwKKyAgICAweGZlMTllN2ZlVUwsIDB4ZDc2MmI1ZDdVTCwgMHhhYmU2NGRhYlVMLCAweDc2OWFlYzc2VUwsCisgICAgMHhjYTQ1OGZjYVVMLCAweDgyOWQxZjgyVUwsIDB4Yzk0MDg5YzlVTCwgMHg3ZDg3ZmE3ZFVMLAorICAgIDB4ZmExNWVmZmFVTCwgMHg1OWViYjI1OVVMLCAweDQ3Yzk4ZTQ3VUwsIDB4ZjAwYmZiZjBVTCwKKyAgICAweGFkZWM0MWFkVUwsIDB4ZDQ2N2IzZDRVTCwgMHhhMmZkNWZhMlVMLCAweGFmZWE0NWFmVUwsCisgICAgMHg5Y2JmMjM5Y1VMLCAweGE0Zjc1M2E0VUwsIDB4NzI5NmU0NzJVTCwgMHhjMDViOWJjMFVMLAorICAgIDB4YjdjMjc1YjdVTCwgMHhmZDFjZTFmZFVMLCAweDkzYWUzZDkzVUwsIDB4MjY2YTRjMjZVTCwKKyAgICAweDM2NWE2YzM2VUwsIDB4M2Y0MTdlM2ZVTCwgMHhmNzAyZjVmN1VMLCAweGNjNGY4M2NjVUwsCisgICAgMHgzNDVjNjgzNFVMLCAweGE1ZjQ1MWE1VUwsIDB4ZTUzNGQxZTVVTCwgMHhmMTA4ZjlmMVVMLAorICAgIDB4NzE5M2UyNzFVTCwgMHhkODczYWJkOFVMLCAweDMxNTM2MjMxVUwsIDB4MTUzZjJhMTVVTCwKKyAgICAweDA0MGMwODA0VUwsIDB4Yzc1Mjk1YzdVTCwgMHgyMzY1NDYyM1VMLCAweGMzNWU5ZGMzVUwsCisgICAgMHgxODI4MzAxOFVMLCAweDk2YTEzNzk2VUwsIDB4MDUwZjBhMDVVTCwgMHg5YWI1MmY5YVVMLAorICAgIDB4MDcwOTBlMDdVTCwgMHgxMjM2MjQxMlVMLCAweDgwOWIxYjgwVUwsIDB4ZTIzZGRmZTJVTCwKKyAgICAweGViMjZjZGViVUwsIDB4Mjc2OTRlMjdVTCwgMHhiMmNkN2ZiMlVMLCAweDc1OWZlYTc1VUwsCisgICAgMHgwOTFiMTIwOVVMLCAweDgzOWUxZDgzVUwsIDB4MmM3NDU4MmNVTCwgMHgxYTJlMzQxYVVMLAorICAgIDB4MWIyZDM2MWJVTCwgMHg2ZWIyZGM2ZVVMLCAweDVhZWViNDVhVUwsIDB4YTBmYjViYTBVTCwKKyAgICAweDUyZjZhNDUyVUwsIDB4M2I0ZDc2M2JVTCwgMHhkNjYxYjdkNlVMLCAweGIzY2U3ZGIzVUwsCisgICAgMHgyOTdiNTIyOVVMLCAweGUzM2VkZGUzVUwsIDB4MmY3MTVlMmZVTCwgMHg4NDk3MTM4NFVMLAorICAgIDB4NTNmNWE2NTNVTCwgMHhkMTY4YjlkMVVMLCAweDAwMDAwMDAwVUwsIDB4ZWQyY2MxZWRVTCwKKyAgICAweDIwNjA0MDIwVUwsIDB4ZmMxZmUzZmNVTCwgMHhiMWM4NzliMVVMLCAweDViZWRiNjViVUwsCisgICAgMHg2YWJlZDQ2YVVMLCAweGNiNDY4ZGNiVUwsIDB4YmVkOTY3YmVVTCwgMHgzOTRiNzIzOVVMLAorICAgIDB4NGFkZTk0NGFVTCwgMHg0Y2Q0OTg0Y1VMLCAweDU4ZThiMDU4VUwsIDB4Y2Y0YTg1Y2ZVTCwKKyAgICAweGQwNmJiYmQwVUwsIDB4ZWYyYWM1ZWZVTCwgMHhhYWU1NGZhYVVMLCAweGZiMTZlZGZiVUwsCisgICAgMHg0M2M1ODY0M1VMLCAweDRkZDc5YTRkVUwsIDB4MzM1NTY2MzNVTCwgMHg4NTk0MTE4NVVMLAorICAgIDB4NDVjZjhhNDVVTCwgMHhmOTEwZTlmOVVMLCAweDAyMDYwNDAyVUwsIDB4N2Y4MWZlN2ZVTCwKKyAgICAweDUwZjBhMDUwVUwsIDB4M2M0NDc4M2NVTCwgMHg5ZmJhMjU5ZlVMLCAweGE4ZTM0YmE4VUwsCisgICAgMHg1MWYzYTI1MVVMLCAweGEzZmU1ZGEzVUwsIDB4NDBjMDgwNDBVTCwgMHg4ZjhhMDU4ZlVMLAorICAgIDB4OTJhZDNmOTJVTCwgMHg5ZGJjMjE5ZFVMLCAweDM4NDg3MDM4VUwsIDB4ZjUwNGYxZjVVTCwKKyAgICAweGJjZGY2M2JjVUwsIDB4YjZjMTc3YjZVTCwgMHhkYTc1YWZkYVVMLCAweDIxNjM0MjIxVUwsCisgICAgMHgxMDMwMjAxMFVMLCAweGZmMWFlNWZmVUwsIDB4ZjMwZWZkZjNVTCwgMHhkMjZkYmZkMlVMLAorICAgIDB4Y2Q0YzgxY2RVTCwgMHgwYzE0MTgwY1VMLCAweDEzMzUyNjEzVUwsIDB4ZWMyZmMzZWNVTCwKKyAgICAweDVmZTFiZTVmVUwsIDB4OTdhMjM1OTdVTCwgMHg0NGNjODg0NFVMLCAweDE3MzkyZTE3VUwsCisgICAgMHhjNDU3OTNjNFVMLCAweGE3ZjI1NWE3VUwsIDB4N2U4MmZjN2VVTCwgMHgzZDQ3N2EzZFVMLAorICAgIDB4NjRhY2M4NjRVTCwgMHg1ZGU3YmE1ZFVMLCAweDE5MmIzMjE5VUwsIDB4NzM5NWU2NzNVTCwKKyAgICAweDYwYTBjMDYwVUwsIDB4ODE5ODE5ODFVTCwgMHg0ZmQxOWU0ZlVMLCAweGRjN2ZhM2RjVUwsCisgICAgMHgyMjY2NDQyMlVMLCAweDJhN2U1NDJhVUwsIDB4OTBhYjNiOTBVTCwgMHg4ODgzMGI4OFVMLAorICAgIDB4NDZjYThjNDZVTCwgMHhlZTI5YzdlZVVMLCAweGI4ZDM2YmI4VUwsIDB4MTQzYzI4MTRVTCwKKyAgICAweGRlNzlhN2RlVUwsIDB4NWVlMmJjNWVVTCwgMHgwYjFkMTYwYlVMLCAweGRiNzZhZGRiVUwsCisgICAgMHhlMDNiZGJlMFVMLCAweDMyNTY2NDMyVUwsIDB4M2E0ZTc0M2FVTCwgMHgwYTFlMTQwYVVMLAorICAgIDB4NDlkYjkyNDlVTCwgMHgwNjBhMGMwNlVMLCAweDI0NmM0ODI0VUwsIDB4NWNlNGI4NWNVTCwKKyAgICAweGMyNWQ5ZmMyVUwsIDB4ZDM2ZWJkZDNVTCwgMHhhY2VmNDNhY1VMLCAweDYyYTZjNDYyVUwsCisgICAgMHg5MWE4Mzk5MVVMLCAweDk1YTQzMTk1VUwsIDB4ZTQzN2QzZTRVTCwgMHg3OThiZjI3OVVMLAorICAgIDB4ZTczMmQ1ZTdVTCwgMHhjODQzOGJjOFVMLCAweDM3NTk2ZTM3VUwsIDB4NmRiN2RhNmRVTCwKKyAgICAweDhkOGMwMThkVUwsIDB4ZDU2NGIxZDVVTCwgMHg0ZWQyOWM0ZVVMLCAweGE5ZTA0OWE5VUwsCisgICAgMHg2Y2I0ZDg2Y1VMLCAweDU2ZmFhYzU2VUwsIDB4ZjQwN2YzZjRVTCwgMHhlYTI1Y2ZlYVVMLAorICAgIDB4NjVhZmNhNjVVTCwgMHg3YThlZjQ3YVVMLCAweGFlZTk0N2FlVUwsIDB4MDgxODEwMDhVTCwKKyAgICAweGJhZDU2ZmJhVUwsIDB4Nzg4OGYwNzhVTCwgMHgyNTZmNGEyNVVMLCAweDJlNzI1YzJlVUwsCisgICAgMHgxYzI0MzgxY1VMLCAweGE2ZjE1N2E2VUwsIDB4YjRjNzczYjRVTCwgMHhjNjUxOTdjNlVMLAorICAgIDB4ZTgyM2NiZThVTCwgMHhkZDdjYTFkZFVMLCAweDc0OWNlODc0VUwsIDB4MWYyMTNlMWZVTCwKKyAgICAweDRiZGQ5NjRiVUwsIDB4YmRkYzYxYmRVTCwgMHg4Yjg2MGQ4YlVMLCAweDhhODUwZjhhVUwsCisgICAgMHg3MDkwZTA3MFVMLCAweDNlNDI3YzNlVUwsIDB4YjVjNDcxYjVVTCwgMHg2NmFhY2M2NlVMLAorICAgIDB4NDhkODkwNDhVTCwgMHgwMzA1MDYwM1VMLCAweGY2MDFmN2Y2VUwsIDB4MGUxMjFjMGVVTCwKKyAgICAweDYxYTNjMjYxVUwsIDB4MzU1ZjZhMzVVTCwgMHg1N2Y5YWU1N1VMLCAweGI5ZDA2OWI5VUwsCisgICAgMHg4NjkxMTc4NlVMLCAweGMxNTg5OWMxVUwsIDB4MWQyNzNhMWRVTCwgMHg5ZWI5Mjc5ZVVMLAorICAgIDB4ZTEzOGQ5ZTFVTCwgMHhmODEzZWJmOFVMLCAweDk4YjMyYjk4VUwsIDB4MTEzMzIyMTFVTCwKKyAgICAweDY5YmJkMjY5VUwsIDB4ZDk3MGE5ZDlVTCwgMHg4ZTg5MDc4ZVVMLCAweDk0YTczMzk0VUwsCisgICAgMHg5YmI2MmQ5YlVMLCAweDFlMjIzYzFlVUwsIDB4ODc5MjE1ODdVTCwgMHhlOTIwYzllOVVMLAorICAgIDB4Y2U0OTg3Y2VVTCwgMHg1NWZmYWE1NVVMLCAweDI4Nzg1MDI4VUwsIDB4ZGY3YWE1ZGZVTCwKKyAgICAweDhjOGYwMzhjVUwsIDB4YTFmODU5YTFVTCwgMHg4OTgwMDk4OVVMLCAweDBkMTcxYTBkVUwsCisgICAgMHhiZmRhNjViZlVMLCAweGU2MzFkN2U2VUwsIDB4NDJjNjg0NDJVTCwgMHg2OGI4ZDA2OFVMLAorICAgIDB4NDFjMzgyNDFVTCwgMHg5OWIwMjk5OVVMLCAweDJkNzc1YTJkVUwsIDB4MGYxMTFlMGZVTCwKKyAgICAweGIwY2I3YmIwVUwsIDB4NTRmY2E4NTRVTCwgMHhiYmQ2NmRiYlVMLCAweDE2M2EyYzE2VUwsCit9Oworc3RhdGljIGNvbnN0IHVsb25nMzIgVEUzWzI1Nl0gPSB7CisKKyAgICAweDYzNjNhNWM2VUwsIDB4N2M3Yzg0ZjhVTCwgMHg3Nzc3OTllZVVMLCAweDdiN2I4ZGY2VUwsCisgICAgMHhmMmYyMGRmZlVMLCAweDZiNmJiZGQ2VUwsIDB4NmY2ZmIxZGVVTCwgMHhjNWM1NTQ5MVVMLAorICAgIDB4MzAzMDUwNjBVTCwgMHgwMTAxMDMwMlVMLCAweDY3NjdhOWNlVUwsIDB4MmIyYjdkNTZVTCwKKyAgICAweGZlZmUxOWU3VUwsIDB4ZDdkNzYyYjVVTCwgMHhhYmFiZTY0ZFVMLCAweDc2NzY5YWVjVUwsCisgICAgMHhjYWNhNDU4ZlVMLCAweDgyODI5ZDFmVUwsIDB4YzljOTQwODlVTCwgMHg3ZDdkODdmYVVMLAorICAgIDB4ZmFmYTE1ZWZVTCwgMHg1OTU5ZWJiMlVMLCAweDQ3NDdjOThlVUwsIDB4ZjBmMDBiZmJVTCwKKyAgICAweGFkYWRlYzQxVUwsIDB4ZDRkNDY3YjNVTCwgMHhhMmEyZmQ1ZlVMLCAweGFmYWZlYTQ1VUwsCisgICAgMHg5YzljYmYyM1VMLCAweGE0YTRmNzUzVUwsIDB4NzI3Mjk2ZTRVTCwgMHhjMGMwNWI5YlVMLAorICAgIDB4YjdiN2MyNzVVTCwgMHhmZGZkMWNlMVVMLCAweDkzOTNhZTNkVUwsIDB4MjYyNjZhNGNVTCwKKyAgICAweDM2MzY1YTZjVUwsIDB4M2YzZjQxN2VVTCwgMHhmN2Y3MDJmNVVMLCAweGNjY2M0ZjgzVUwsCisgICAgMHgzNDM0NWM2OFVMLCAweGE1YTVmNDUxVUwsIDB4ZTVlNTM0ZDFVTCwgMHhmMWYxMDhmOVVMLAorICAgIDB4NzE3MTkzZTJVTCwgMHhkOGQ4NzNhYlVMLCAweDMxMzE1MzYyVUwsIDB4MTUxNTNmMmFVTCwKKyAgICAweDA0MDQwYzA4VUwsIDB4YzdjNzUyOTVVTCwgMHgyMzIzNjU0NlVMLCAweGMzYzM1ZTlkVUwsCisgICAgMHgxODE4MjgzMFVMLCAweDk2OTZhMTM3VUwsIDB4MDUwNTBmMGFVTCwgMHg5YTlhYjUyZlVMLAorICAgIDB4MDcwNzA5MGVVTCwgMHgxMjEyMzYyNFVMLCAweDgwODA5YjFiVUwsIDB4ZTJlMjNkZGZVTCwKKyAgICAweGViZWIyNmNkVUwsIDB4MjcyNzY5NGVVTCwgMHhiMmIyY2Q3ZlVMLCAweDc1NzU5ZmVhVUwsCisgICAgMHgwOTA5MWIxMlVMLCAweDgzODM5ZTFkVUwsIDB4MmMyYzc0NThVTCwgMHgxYTFhMmUzNFVMLAorICAgIDB4MWIxYjJkMzZVTCwgMHg2ZTZlYjJkY1VMLCAweDVhNWFlZWI0VUwsIDB4YTBhMGZiNWJVTCwKKyAgICAweDUyNTJmNmE0VUwsIDB4M2IzYjRkNzZVTCwgMHhkNmQ2NjFiN1VMLCAweGIzYjNjZTdkVUwsCisgICAgMHgyOTI5N2I1MlVMLCAweGUzZTMzZWRkVUwsIDB4MmYyZjcxNWVVTCwgMHg4NDg0OTcxM1VMLAorICAgIDB4NTM1M2Y1YTZVTCwgMHhkMWQxNjhiOVVMLCAweDAwMDAwMDAwVUwsIDB4ZWRlZDJjYzFVTCwKKyAgICAweDIwMjA2MDQwVUwsIDB4ZmNmYzFmZTNVTCwgMHhiMWIxYzg3OVVMLCAweDViNWJlZGI2VUwsCisgICAgMHg2YTZhYmVkNFVMLCAweGNiY2I0NjhkVUwsIDB4YmViZWQ5NjdVTCwgMHgzOTM5NGI3MlVMLAorICAgIDB4NGE0YWRlOTRVTCwgMHg0YzRjZDQ5OFVMLCAweDU4NThlOGIwVUwsIDB4Y2ZjZjRhODVVTCwKKyAgICAweGQwZDA2YmJiVUwsIDB4ZWZlZjJhYzVVTCwgMHhhYWFhZTU0ZlVMLCAweGZiZmIxNmVkVUwsCisgICAgMHg0MzQzYzU4NlVMLCAweDRkNGRkNzlhVUwsIDB4MzMzMzU1NjZVTCwgMHg4NTg1OTQxMVVMLAorICAgIDB4NDU0NWNmOGFVTCwgMHhmOWY5MTBlOVVMLCAweDAyMDIwNjA0VUwsIDB4N2Y3ZjgxZmVVTCwKKyAgICAweDUwNTBmMGEwVUwsIDB4M2MzYzQ0NzhVTCwgMHg5ZjlmYmEyNVVMLCAweGE4YThlMzRiVUwsCisgICAgMHg1MTUxZjNhMlVMLCAweGEzYTNmZTVkVUwsIDB4NDA0MGMwODBVTCwgMHg4ZjhmOGEwNVVMLAorICAgIDB4OTI5MmFkM2ZVTCwgMHg5ZDlkYmMyMVVMLCAweDM4Mzg0ODcwVUwsIDB4ZjVmNTA0ZjFVTCwKKyAgICAweGJjYmNkZjYzVUwsIDB4YjZiNmMxNzdVTCwgMHhkYWRhNzVhZlVMLCAweDIxMjE2MzQyVUwsCisgICAgMHgxMDEwMzAyMFVMLCAweGZmZmYxYWU1VUwsIDB4ZjNmMzBlZmRVTCwgMHhkMmQyNmRiZlVMLAorICAgIDB4Y2RjZDRjODFVTCwgMHgwYzBjMTQxOFVMLCAweDEzMTMzNTI2VUwsIDB4ZWNlYzJmYzNVTCwKKyAgICAweDVmNWZlMWJlVUwsIDB4OTc5N2EyMzVVTCwgMHg0NDQ0Y2M4OFVMLCAweDE3MTczOTJlVUwsCisgICAgMHhjNGM0NTc5M1VMLCAweGE3YTdmMjU1VUwsIDB4N2U3ZTgyZmNVTCwgMHgzZDNkNDc3YVVMLAorICAgIDB4NjQ2NGFjYzhVTCwgMHg1ZDVkZTdiYVVMLCAweDE5MTkyYjMyVUwsIDB4NzM3Mzk1ZTZVTCwKKyAgICAweDYwNjBhMGMwVUwsIDB4ODE4MTk4MTlVTCwgMHg0ZjRmZDE5ZVVMLCAweGRjZGM3ZmEzVUwsCisgICAgMHgyMjIyNjY0NFVMLCAweDJhMmE3ZTU0VUwsIDB4OTA5MGFiM2JVTCwgMHg4ODg4ODMwYlVMLAorICAgIDB4NDY0NmNhOGNVTCwgMHhlZWVlMjljN1VMLCAweGI4YjhkMzZiVUwsIDB4MTQxNDNjMjhVTCwKKyAgICAweGRlZGU3OWE3VUwsIDB4NWU1ZWUyYmNVTCwgMHgwYjBiMWQxNlVMLCAweGRiZGI3NmFkVUwsCisgICAgMHhlMGUwM2JkYlVMLCAweDMyMzI1NjY0VUwsIDB4M2EzYTRlNzRVTCwgMHgwYTBhMWUxNFVMLAorICAgIDB4NDk0OWRiOTJVTCwgMHgwNjA2MGEwY1VMLCAweDI0MjQ2YzQ4VUwsIDB4NWM1Y2U0YjhVTCwKKyAgICAweGMyYzI1ZDlmVUwsIDB4ZDNkMzZlYmRVTCwgMHhhY2FjZWY0M1VMLCAweDYyNjJhNmM0VUwsCisgICAgMHg5MTkxYTgzOVVMLCAweDk1OTVhNDMxVUwsIDB4ZTRlNDM3ZDNVTCwgMHg3OTc5OGJmMlVMLAorICAgIDB4ZTdlNzMyZDVVTCwgMHhjOGM4NDM4YlVMLCAweDM3Mzc1OTZlVUwsIDB4NmQ2ZGI3ZGFVTCwKKyAgICAweDhkOGQ4YzAxVUwsIDB4ZDVkNTY0YjFVTCwgMHg0ZTRlZDI5Y1VMLCAweGE5YTllMDQ5VUwsCisgICAgMHg2YzZjYjRkOFVMLCAweDU2NTZmYWFjVUwsIDB4ZjRmNDA3ZjNVTCwgMHhlYWVhMjVjZlVMLAorICAgIDB4NjU2NWFmY2FVTCwgMHg3YTdhOGVmNFVMLCAweGFlYWVlOTQ3VUwsIDB4MDgwODE4MTBVTCwKKyAgICAweGJhYmFkNTZmVUwsIDB4Nzg3ODg4ZjBVTCwgMHgyNTI1NmY0YVVMLCAweDJlMmU3MjVjVUwsCisgICAgMHgxYzFjMjQzOFVMLCAweGE2YTZmMTU3VUwsIDB4YjRiNGM3NzNVTCwgMHhjNmM2NTE5N1VMLAorICAgIDB4ZThlODIzY2JVTCwgMHhkZGRkN2NhMVVMLCAweDc0NzQ5Y2U4VUwsIDB4MWYxZjIxM2VVTCwKKyAgICAweDRiNGJkZDk2VUwsIDB4YmRiZGRjNjFVTCwgMHg4YjhiODYwZFVMLCAweDhhOGE4NTBmVUwsCisgICAgMHg3MDcwOTBlMFVMLCAweDNlM2U0MjdjVUwsIDB4YjViNWM0NzFVTCwgMHg2NjY2YWFjY1VMLAorICAgIDB4NDg0OGQ4OTBVTCwgMHgwMzAzMDUwNlVMLCAweGY2ZjYwMWY3VUwsIDB4MGUwZTEyMWNVTCwKKyAgICAweDYxNjFhM2MyVUwsIDB4MzUzNTVmNmFVTCwgMHg1NzU3ZjlhZVVMLCAweGI5YjlkMDY5VUwsCisgICAgMHg4Njg2OTExN1VMLCAweGMxYzE1ODk5VUwsIDB4MWQxZDI3M2FVTCwgMHg5ZTllYjkyN1VMLAorICAgIDB4ZTFlMTM4ZDlVTCwgMHhmOGY4MTNlYlVMLCAweDk4OThiMzJiVUwsIDB4MTExMTMzMjJVTCwKKyAgICAweDY5NjliYmQyVUwsIDB4ZDlkOTcwYTlVTCwgMHg4ZThlODkwN1VMLCAweDk0OTRhNzMzVUwsCisgICAgMHg5YjliYjYyZFVMLCAweDFlMWUyMjNjVUwsIDB4ODc4NzkyMTVVTCwgMHhlOWU5MjBjOVVMLAorICAgIDB4Y2VjZTQ5ODdVTCwgMHg1NTU1ZmZhYVVMLCAweDI4Mjg3ODUwVUwsIDB4ZGZkZjdhYTVVTCwKKyAgICAweDhjOGM4ZjAzVUwsIDB4YTFhMWY4NTlVTCwgMHg4OTg5ODAwOVVMLCAweDBkMGQxNzFhVUwsCisgICAgMHhiZmJmZGE2NVVMLCAweGU2ZTYzMWQ3VUwsIDB4NDI0MmM2ODRVTCwgMHg2ODY4YjhkMFVMLAorICAgIDB4NDE0MWMzODJVTCwgMHg5OTk5YjAyOVVMLCAweDJkMmQ3NzVhVUwsIDB4MGYwZjExMWVVTCwKKyAgICAweGIwYjBjYjdiVUwsIDB4NTQ1NGZjYThVTCwgMHhiYmJiZDY2ZFVMLCAweDE2MTYzYTJjVUwsCit9OworCisjaWZuZGVmIFBFTElfVEFCCitzdGF0aWMgY29uc3QgdWxvbmczMiBUZTRfMFtdID0geworMHgwMDAwMDA2M1VMLCAweDAwMDAwMDdjVUwsIDB4MDAwMDAwNzdVTCwgMHgwMDAwMDA3YlVMLCAweDAwMDAwMGYyVUwsIDB4MDAwMDAwNmJVTCwgMHgwMDAwMDA2ZlVMLCAweDAwMDAwMGM1VUwsIAorMHgwMDAwMDAzMFVMLCAweDAwMDAwMDAxVUwsIDB4MDAwMDAwNjdVTCwgMHgwMDAwMDAyYlVMLCAweDAwMDAwMGZlVUwsIDB4MDAwMDAwZDdVTCwgMHgwMDAwMDBhYlVMLCAweDAwMDAwMDc2VUwsIAorMHgwMDAwMDBjYVVMLCAweDAwMDAwMDgyVUwsIDB4MDAwMDAwYzlVTCwgMHgwMDAwMDA3ZFVMLCAweDAwMDAwMGZhVUwsIDB4MDAwMDAwNTlVTCwgMHgwMDAwMDA0N1VMLCAweDAwMDAwMGYwVUwsIAorMHgwMDAwMDBhZFVMLCAweDAwMDAwMGQ0VUwsIDB4MDAwMDAwYTJVTCwgMHgwMDAwMDBhZlVMLCAweDAwMDAwMDljVUwsIDB4MDAwMDAwYTRVTCwgMHgwMDAwMDA3MlVMLCAweDAwMDAwMGMwVUwsIAorMHgwMDAwMDBiN1VMLCAweDAwMDAwMGZkVUwsIDB4MDAwMDAwOTNVTCwgMHgwMDAwMDAyNlVMLCAweDAwMDAwMDM2VUwsIDB4MDAwMDAwM2ZVTCwgMHgwMDAwMDBmN1VMLCAweDAwMDAwMGNjVUwsIAorMHgwMDAwMDAzNFVMLCAweDAwMDAwMGE1VUwsIDB4MDAwMDAwZTVVTCwgMHgwMDAwMDBmMVVMLCAweDAwMDAwMDcxVUwsIDB4MDAwMDAwZDhVTCwgMHgwMDAwMDAzMVVMLCAweDAwMDAwMDE1VUwsIAorMHgwMDAwMDAwNFVMLCAweDAwMDAwMGM3VUwsIDB4MDAwMDAwMjNVTCwgMHgwMDAwMDBjM1VMLCAweDAwMDAwMDE4VUwsIDB4MDAwMDAwOTZVTCwgMHgwMDAwMDAwNVVMLCAweDAwMDAwMDlhVUwsIAorMHgwMDAwMDAwN1VMLCAweDAwMDAwMDEyVUwsIDB4MDAwMDAwODBVTCwgMHgwMDAwMDBlMlVMLCAweDAwMDAwMGViVUwsIDB4MDAwMDAwMjdVTCwgMHgwMDAwMDBiMlVMLCAweDAwMDAwMDc1VUwsIAorMHgwMDAwMDAwOVVMLCAweDAwMDAwMDgzVUwsIDB4MDAwMDAwMmNVTCwgMHgwMDAwMDAxYVVMLCAweDAwMDAwMDFiVUwsIDB4MDAwMDAwNmVVTCwgMHgwMDAwMDA1YVVMLCAweDAwMDAwMGEwVUwsIAorMHgwMDAwMDA1MlVMLCAweDAwMDAwMDNiVUwsIDB4MDAwMDAwZDZVTCwgMHgwMDAwMDBiM1VMLCAweDAwMDAwMDI5VUwsIDB4MDAwMDAwZTNVTCwgMHgwMDAwMDAyZlVMLCAweDAwMDAwMDg0VUwsIAorMHgwMDAwMDA1M1VMLCAweDAwMDAwMGQxVUwsIDB4MDAwMDAwMDBVTCwgMHgwMDAwMDBlZFVMLCAweDAwMDAwMDIwVUwsIDB4MDAwMDAwZmNVTCwgMHgwMDAwMDBiMVVMLCAweDAwMDAwMDViVUwsIAorMHgwMDAwMDA2YVVMLCAweDAwMDAwMGNiVUwsIDB4MDAwMDAwYmVVTCwgMHgwMDAwMDAzOVVMLCAweDAwMDAwMDRhVUwsIDB4MDAwMDAwNGNVTCwgMHgwMDAwMDA1OFVMLCAweDAwMDAwMGNmVUwsIAorMHgwMDAwMDBkMFVMLCAweDAwMDAwMGVmVUwsIDB4MDAwMDAwYWFVTCwgMHgwMDAwMDBmYlVMLCAweDAwMDAwMDQzVUwsIDB4MDAwMDAwNGRVTCwgMHgwMDAwMDAzM1VMLCAweDAwMDAwMDg1VUwsIAorMHgwMDAwMDA0NVVMLCAweDAwMDAwMGY5VUwsIDB4MDAwMDAwMDJVTCwgMHgwMDAwMDA3ZlVMLCAweDAwMDAwMDUwVUwsIDB4MDAwMDAwM2NVTCwgMHgwMDAwMDA5ZlVMLCAweDAwMDAwMGE4VUwsIAorMHgwMDAwMDA1MVVMLCAweDAwMDAwMGEzVUwsIDB4MDAwMDAwNDBVTCwgMHgwMDAwMDA4ZlVMLCAweDAwMDAwMDkyVUwsIDB4MDAwMDAwOWRVTCwgMHgwMDAwMDAzOFVMLCAweDAwMDAwMGY1VUwsIAorMHgwMDAwMDBiY1VMLCAweDAwMDAwMGI2VUwsIDB4MDAwMDAwZGFVTCwgMHgwMDAwMDAyMVVMLCAweDAwMDAwMDEwVUwsIDB4MDAwMDAwZmZVTCwgMHgwMDAwMDBmM1VMLCAweDAwMDAwMGQyVUwsIAorMHgwMDAwMDBjZFVMLCAweDAwMDAwMDBjVUwsIDB4MDAwMDAwMTNVTCwgMHgwMDAwMDBlY1VMLCAweDAwMDAwMDVmVUwsIDB4MDAwMDAwOTdVTCwgMHgwMDAwMDA0NFVMLCAweDAwMDAwMDE3VUwsIAorMHgwMDAwMDBjNFVMLCAweDAwMDAwMGE3VUwsIDB4MDAwMDAwN2VVTCwgMHgwMDAwMDAzZFVMLCAweDAwMDAwMDY0VUwsIDB4MDAwMDAwNWRVTCwgMHgwMDAwMDAxOVVMLCAweDAwMDAwMDczVUwsIAorMHgwMDAwMDA2MFVMLCAweDAwMDAwMDgxVUwsIDB4MDAwMDAwNGZVTCwgMHgwMDAwMDBkY1VMLCAweDAwMDAwMDIyVUwsIDB4MDAwMDAwMmFVTCwgMHgwMDAwMDA5MFVMLCAweDAwMDAwMDg4VUwsIAorMHgwMDAwMDA0NlVMLCAweDAwMDAwMGVlVUwsIDB4MDAwMDAwYjhVTCwgMHgwMDAwMDAxNFVMLCAweDAwMDAwMGRlVUwsIDB4MDAwMDAwNWVVTCwgMHgwMDAwMDAwYlVMLCAweDAwMDAwMGRiVUwsIAorMHgwMDAwMDBlMFVMLCAweDAwMDAwMDMyVUwsIDB4MDAwMDAwM2FVTCwgMHgwMDAwMDAwYVVMLCAweDAwMDAwMDQ5VUwsIDB4MDAwMDAwMDZVTCwgMHgwMDAwMDAyNFVMLCAweDAwMDAwMDVjVUwsIAorMHgwMDAwMDBjMlVMLCAweDAwMDAwMGQzVUwsIDB4MDAwMDAwYWNVTCwgMHgwMDAwMDA2MlVMLCAweDAwMDAwMDkxVUwsIDB4MDAwMDAwOTVVTCwgMHgwMDAwMDBlNFVMLCAweDAwMDAwMDc5VUwsIAorMHgwMDAwMDBlN1VMLCAweDAwMDAwMGM4VUwsIDB4MDAwMDAwMzdVTCwgMHgwMDAwMDA2ZFVMLCAweDAwMDAwMDhkVUwsIDB4MDAwMDAwZDVVTCwgMHgwMDAwMDA0ZVVMLCAweDAwMDAwMGE5VUwsIAorMHgwMDAwMDA2Y1VMLCAweDAwMDAwMDU2VUwsIDB4MDAwMDAwZjRVTCwgMHgwMDAwMDBlYVVMLCAweDAwMDAwMDY1VUwsIDB4MDAwMDAwN2FVTCwgMHgwMDAwMDBhZVVMLCAweDAwMDAwMDA4VUwsIAorMHgwMDAwMDBiYVVMLCAweDAwMDAwMDc4VUwsIDB4MDAwMDAwMjVVTCwgMHgwMDAwMDAyZVVMLCAweDAwMDAwMDFjVUwsIDB4MDAwMDAwYTZVTCwgMHgwMDAwMDBiNFVMLCAweDAwMDAwMGM2VUwsIAorMHgwMDAwMDBlOFVMLCAweDAwMDAwMGRkVUwsIDB4MDAwMDAwNzRVTCwgMHgwMDAwMDAxZlVMLCAweDAwMDAwMDRiVUwsIDB4MDAwMDAwYmRVTCwgMHgwMDAwMDA4YlVMLCAweDAwMDAwMDhhVUwsIAorMHgwMDAwMDA3MFVMLCAweDAwMDAwMDNlVUwsIDB4MDAwMDAwYjVVTCwgMHgwMDAwMDA2NlVMLCAweDAwMDAwMDQ4VUwsIDB4MDAwMDAwMDNVTCwgMHgwMDAwMDBmNlVMLCAweDAwMDAwMDBlVUwsIAorMHgwMDAwMDA2MVVMLCAweDAwMDAwMDM1VUwsIDB4MDAwMDAwNTdVTCwgMHgwMDAwMDBiOVVMLCAweDAwMDAwMDg2VUwsIDB4MDAwMDAwYzFVTCwgMHgwMDAwMDAxZFVMLCAweDAwMDAwMDllVUwsIAorMHgwMDAwMDBlMVVMLCAweDAwMDAwMGY4VUwsIDB4MDAwMDAwOThVTCwgMHgwMDAwMDAxMVVMLCAweDAwMDAwMDY5VUwsIDB4MDAwMDAwZDlVTCwgMHgwMDAwMDA4ZVVMLCAweDAwMDAwMDk0VUwsIAorMHgwMDAwMDA5YlVMLCAweDAwMDAwMDFlVUwsIDB4MDAwMDAwODdVTCwgMHgwMDAwMDBlOVVMLCAweDAwMDAwMGNlVUwsIDB4MDAwMDAwNTVVTCwgMHgwMDAwMDAyOFVMLCAweDAwMDAwMGRmVUwsIAorMHgwMDAwMDA4Y1VMLCAweDAwMDAwMGExVUwsIDB4MDAwMDAwODlVTCwgMHgwMDAwMDAwZFVMLCAweDAwMDAwMGJmVUwsIDB4MDAwMDAwZTZVTCwgMHgwMDAwMDA0MlVMLCAweDAwMDAwMDY4VUwsIAorMHgwMDAwMDA0MVVMLCAweDAwMDAwMDk5VUwsIDB4MDAwMDAwMmRVTCwgMHgwMDAwMDAwZlVMLCAweDAwMDAwMGIwVUwsIDB4MDAwMDAwNTRVTCwgMHgwMDAwMDBiYlVMLCAweDAwMDAwMDE2VUwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFRlNF8xW10gPSB7CisweDAwMDA2MzAwVUwsIDB4MDAwMDdjMDBVTCwgMHgwMDAwNzcwMFVMLCAweDAwMDA3YjAwVUwsIDB4MDAwMGYyMDBVTCwgMHgwMDAwNmIwMFVMLCAweDAwMDA2ZjAwVUwsIDB4MDAwMGM1MDBVTCwgCisweDAwMDAzMDAwVUwsIDB4MDAwMDAxMDBVTCwgMHgwMDAwNjcwMFVMLCAweDAwMDAyYjAwVUwsIDB4MDAwMGZlMDBVTCwgMHgwMDAwZDcwMFVMLCAweDAwMDBhYjAwVUwsIDB4MDAwMDc2MDBVTCwgCisweDAwMDBjYTAwVUwsIDB4MDAwMDgyMDBVTCwgMHgwMDAwYzkwMFVMLCAweDAwMDA3ZDAwVUwsIDB4MDAwMGZhMDBVTCwgMHgwMDAwNTkwMFVMLCAweDAwMDA0NzAwVUwsIDB4MDAwMGYwMDBVTCwgCisweDAwMDBhZDAwVUwsIDB4MDAwMGQ0MDBVTCwgMHgwMDAwYTIwMFVMLCAweDAwMDBhZjAwVUwsIDB4MDAwMDljMDBVTCwgMHgwMDAwYTQwMFVMLCAweDAwMDA3MjAwVUwsIDB4MDAwMGMwMDBVTCwgCisweDAwMDBiNzAwVUwsIDB4MDAwMGZkMDBVTCwgMHgwMDAwOTMwMFVMLCAweDAwMDAyNjAwVUwsIDB4MDAwMDM2MDBVTCwgMHgwMDAwM2YwMFVMLCAweDAwMDBmNzAwVUwsIDB4MDAwMGNjMDBVTCwgCisweDAwMDAzNDAwVUwsIDB4MDAwMGE1MDBVTCwgMHgwMDAwZTUwMFVMLCAweDAwMDBmMTAwVUwsIDB4MDAwMDcxMDBVTCwgMHgwMDAwZDgwMFVMLCAweDAwMDAzMTAwVUwsIDB4MDAwMDE1MDBVTCwgCisweDAwMDAwNDAwVUwsIDB4MDAwMGM3MDBVTCwgMHgwMDAwMjMwMFVMLCAweDAwMDBjMzAwVUwsIDB4MDAwMDE4MDBVTCwgMHgwMDAwOTYwMFVMLCAweDAwMDAwNTAwVUwsIDB4MDAwMDlhMDBVTCwgCisweDAwMDAwNzAwVUwsIDB4MDAwMDEyMDBVTCwgMHgwMDAwODAwMFVMLCAweDAwMDBlMjAwVUwsIDB4MDAwMGViMDBVTCwgMHgwMDAwMjcwMFVMLCAweDAwMDBiMjAwVUwsIDB4MDAwMDc1MDBVTCwgCisweDAwMDAwOTAwVUwsIDB4MDAwMDgzMDBVTCwgMHgwMDAwMmMwMFVMLCAweDAwMDAxYTAwVUwsIDB4MDAwMDFiMDBVTCwgMHgwMDAwNmUwMFVMLCAweDAwMDA1YTAwVUwsIDB4MDAwMGEwMDBVTCwgCisweDAwMDA1MjAwVUwsIDB4MDAwMDNiMDBVTCwgMHgwMDAwZDYwMFVMLCAweDAwMDBiMzAwVUwsIDB4MDAwMDI5MDBVTCwgMHgwMDAwZTMwMFVMLCAweDAwMDAyZjAwVUwsIDB4MDAwMDg0MDBVTCwgCisweDAwMDA1MzAwVUwsIDB4MDAwMGQxMDBVTCwgMHgwMDAwMDAwMFVMLCAweDAwMDBlZDAwVUwsIDB4MDAwMDIwMDBVTCwgMHgwMDAwZmMwMFVMLCAweDAwMDBiMTAwVUwsIDB4MDAwMDViMDBVTCwgCisweDAwMDA2YTAwVUwsIDB4MDAwMGNiMDBVTCwgMHgwMDAwYmUwMFVMLCAweDAwMDAzOTAwVUwsIDB4MDAwMDRhMDBVTCwgMHgwMDAwNGMwMFVMLCAweDAwMDA1ODAwVUwsIDB4MDAwMGNmMDBVTCwgCisweDAwMDBkMDAwVUwsIDB4MDAwMGVmMDBVTCwgMHgwMDAwYWEwMFVMLCAweDAwMDBmYjAwVUwsIDB4MDAwMDQzMDBVTCwgMHgwMDAwNGQwMFVMLCAweDAwMDAzMzAwVUwsIDB4MDAwMDg1MDBVTCwgCisweDAwMDA0NTAwVUwsIDB4MDAwMGY5MDBVTCwgMHgwMDAwMDIwMFVMLCAweDAwMDA3ZjAwVUwsIDB4MDAwMDUwMDBVTCwgMHgwMDAwM2MwMFVMLCAweDAwMDA5ZjAwVUwsIDB4MDAwMGE4MDBVTCwgCisweDAwMDA1MTAwVUwsIDB4MDAwMGEzMDBVTCwgMHgwMDAwNDAwMFVMLCAweDAwMDA4ZjAwVUwsIDB4MDAwMDkyMDBVTCwgMHgwMDAwOWQwMFVMLCAweDAwMDAzODAwVUwsIDB4MDAwMGY1MDBVTCwgCisweDAwMDBiYzAwVUwsIDB4MDAwMGI2MDBVTCwgMHgwMDAwZGEwMFVMLCAweDAwMDAyMTAwVUwsIDB4MDAwMDEwMDBVTCwgMHgwMDAwZmYwMFVMLCAweDAwMDBmMzAwVUwsIDB4MDAwMGQyMDBVTCwgCisweDAwMDBjZDAwVUwsIDB4MDAwMDBjMDBVTCwgMHgwMDAwMTMwMFVMLCAweDAwMDBlYzAwVUwsIDB4MDAwMDVmMDBVTCwgMHgwMDAwOTcwMFVMLCAweDAwMDA0NDAwVUwsIDB4MDAwMDE3MDBVTCwgCisweDAwMDBjNDAwVUwsIDB4MDAwMGE3MDBVTCwgMHgwMDAwN2UwMFVMLCAweDAwMDAzZDAwVUwsIDB4MDAwMDY0MDBVTCwgMHgwMDAwNWQwMFVMLCAweDAwMDAxOTAwVUwsIDB4MDAwMDczMDBVTCwgCisweDAwMDA2MDAwVUwsIDB4MDAwMDgxMDBVTCwgMHgwMDAwNGYwMFVMLCAweDAwMDBkYzAwVUwsIDB4MDAwMDIyMDBVTCwgMHgwMDAwMmEwMFVMLCAweDAwMDA5MDAwVUwsIDB4MDAwMDg4MDBVTCwgCisweDAwMDA0NjAwVUwsIDB4MDAwMGVlMDBVTCwgMHgwMDAwYjgwMFVMLCAweDAwMDAxNDAwVUwsIDB4MDAwMGRlMDBVTCwgMHgwMDAwNWUwMFVMLCAweDAwMDAwYjAwVUwsIDB4MDAwMGRiMDBVTCwgCisweDAwMDBlMDAwVUwsIDB4MDAwMDMyMDBVTCwgMHgwMDAwM2EwMFVMLCAweDAwMDAwYTAwVUwsIDB4MDAwMDQ5MDBVTCwgMHgwMDAwMDYwMFVMLCAweDAwMDAyNDAwVUwsIDB4MDAwMDVjMDBVTCwgCisweDAwMDBjMjAwVUwsIDB4MDAwMGQzMDBVTCwgMHgwMDAwYWMwMFVMLCAweDAwMDA2MjAwVUwsIDB4MDAwMDkxMDBVTCwgMHgwMDAwOTUwMFVMLCAweDAwMDBlNDAwVUwsIDB4MDAwMDc5MDBVTCwgCisweDAwMDBlNzAwVUwsIDB4MDAwMGM4MDBVTCwgMHgwMDAwMzcwMFVMLCAweDAwMDA2ZDAwVUwsIDB4MDAwMDhkMDBVTCwgMHgwMDAwZDUwMFVMLCAweDAwMDA0ZTAwVUwsIDB4MDAwMGE5MDBVTCwgCisweDAwMDA2YzAwVUwsIDB4MDAwMDU2MDBVTCwgMHgwMDAwZjQwMFVMLCAweDAwMDBlYTAwVUwsIDB4MDAwMDY1MDBVTCwgMHgwMDAwN2EwMFVMLCAweDAwMDBhZTAwVUwsIDB4MDAwMDA4MDBVTCwgCisweDAwMDBiYTAwVUwsIDB4MDAwMDc4MDBVTCwgMHgwMDAwMjUwMFVMLCAweDAwMDAyZTAwVUwsIDB4MDAwMDFjMDBVTCwgMHgwMDAwYTYwMFVMLCAweDAwMDBiNDAwVUwsIDB4MDAwMGM2MDBVTCwgCisweDAwMDBlODAwVUwsIDB4MDAwMGRkMDBVTCwgMHgwMDAwNzQwMFVMLCAweDAwMDAxZjAwVUwsIDB4MDAwMDRiMDBVTCwgMHgwMDAwYmQwMFVMLCAweDAwMDA4YjAwVUwsIDB4MDAwMDhhMDBVTCwgCisweDAwMDA3MDAwVUwsIDB4MDAwMDNlMDBVTCwgMHgwMDAwYjUwMFVMLCAweDAwMDA2NjAwVUwsIDB4MDAwMDQ4MDBVTCwgMHgwMDAwMDMwMFVMLCAweDAwMDBmNjAwVUwsIDB4MDAwMDBlMDBVTCwgCisweDAwMDA2MTAwVUwsIDB4MDAwMDM1MDBVTCwgMHgwMDAwNTcwMFVMLCAweDAwMDBiOTAwVUwsIDB4MDAwMDg2MDBVTCwgMHgwMDAwYzEwMFVMLCAweDAwMDAxZDAwVUwsIDB4MDAwMDllMDBVTCwgCisweDAwMDBlMTAwVUwsIDB4MDAwMGY4MDBVTCwgMHgwMDAwOTgwMFVMLCAweDAwMDAxMTAwVUwsIDB4MDAwMDY5MDBVTCwgMHgwMDAwZDkwMFVMLCAweDAwMDA4ZTAwVUwsIDB4MDAwMDk0MDBVTCwgCisweDAwMDA5YjAwVUwsIDB4MDAwMDFlMDBVTCwgMHgwMDAwODcwMFVMLCAweDAwMDBlOTAwVUwsIDB4MDAwMGNlMDBVTCwgMHgwMDAwNTUwMFVMLCAweDAwMDAyODAwVUwsIDB4MDAwMGRmMDBVTCwgCisweDAwMDA4YzAwVUwsIDB4MDAwMGExMDBVTCwgMHgwMDAwODkwMFVMLCAweDAwMDAwZDAwVUwsIDB4MDAwMGJmMDBVTCwgMHgwMDAwZTYwMFVMLCAweDAwMDA0MjAwVUwsIDB4MDAwMDY4MDBVTCwgCisweDAwMDA0MTAwVUwsIDB4MDAwMDk5MDBVTCwgMHgwMDAwMmQwMFVMLCAweDAwMDAwZjAwVUwsIDB4MDAwMGIwMDBVTCwgMHgwMDAwNTQwMFVMLCAweDAwMDBiYjAwVUwsIDB4MDAwMDE2MDBVTAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgVGU0XzJbXSA9IHsKKzB4MDA2MzAwMDBVTCwgMHgwMDdjMDAwMFVMLCAweDAwNzcwMDAwVUwsIDB4MDA3YjAwMDBVTCwgMHgwMGYyMDAwMFVMLCAweDAwNmIwMDAwVUwsIDB4MDA2ZjAwMDBVTCwgMHgwMGM1MDAwMFVMLCAKKzB4MDAzMDAwMDBVTCwgMHgwMDAxMDAwMFVMLCAweDAwNjcwMDAwVUwsIDB4MDAyYjAwMDBVTCwgMHgwMGZlMDAwMFVMLCAweDAwZDcwMDAwVUwsIDB4MDBhYjAwMDBVTCwgMHgwMDc2MDAwMFVMLCAKKzB4MDBjYTAwMDBVTCwgMHgwMDgyMDAwMFVMLCAweDAwYzkwMDAwVUwsIDB4MDA3ZDAwMDBVTCwgMHgwMGZhMDAwMFVMLCAweDAwNTkwMDAwVUwsIDB4MDA0NzAwMDBVTCwgMHgwMGYwMDAwMFVMLCAKKzB4MDBhZDAwMDBVTCwgMHgwMGQ0MDAwMFVMLCAweDAwYTIwMDAwVUwsIDB4MDBhZjAwMDBVTCwgMHgwMDljMDAwMFVMLCAweDAwYTQwMDAwVUwsIDB4MDA3MjAwMDBVTCwgMHgwMGMwMDAwMFVMLCAKKzB4MDBiNzAwMDBVTCwgMHgwMGZkMDAwMFVMLCAweDAwOTMwMDAwVUwsIDB4MDAyNjAwMDBVTCwgMHgwMDM2MDAwMFVMLCAweDAwM2YwMDAwVUwsIDB4MDBmNzAwMDBVTCwgMHgwMGNjMDAwMFVMLCAKKzB4MDAzNDAwMDBVTCwgMHgwMGE1MDAwMFVMLCAweDAwZTUwMDAwVUwsIDB4MDBmMTAwMDBVTCwgMHgwMDcxMDAwMFVMLCAweDAwZDgwMDAwVUwsIDB4MDAzMTAwMDBVTCwgMHgwMDE1MDAwMFVMLCAKKzB4MDAwNDAwMDBVTCwgMHgwMGM3MDAwMFVMLCAweDAwMjMwMDAwVUwsIDB4MDBjMzAwMDBVTCwgMHgwMDE4MDAwMFVMLCAweDAwOTYwMDAwVUwsIDB4MDAwNTAwMDBVTCwgMHgwMDlhMDAwMFVMLCAKKzB4MDAwNzAwMDBVTCwgMHgwMDEyMDAwMFVMLCAweDAwODAwMDAwVUwsIDB4MDBlMjAwMDBVTCwgMHgwMGViMDAwMFVMLCAweDAwMjcwMDAwVUwsIDB4MDBiMjAwMDBVTCwgMHgwMDc1MDAwMFVMLCAKKzB4MDAwOTAwMDBVTCwgMHgwMDgzMDAwMFVMLCAweDAwMmMwMDAwVUwsIDB4MDAxYTAwMDBVTCwgMHgwMDFiMDAwMFVMLCAweDAwNmUwMDAwVUwsIDB4MDA1YTAwMDBVTCwgMHgwMGEwMDAwMFVMLCAKKzB4MDA1MjAwMDBVTCwgMHgwMDNiMDAwMFVMLCAweDAwZDYwMDAwVUwsIDB4MDBiMzAwMDBVTCwgMHgwMDI5MDAwMFVMLCAweDAwZTMwMDAwVUwsIDB4MDAyZjAwMDBVTCwgMHgwMDg0MDAwMFVMLCAKKzB4MDA1MzAwMDBVTCwgMHgwMGQxMDAwMFVMLCAweDAwMDAwMDAwVUwsIDB4MDBlZDAwMDBVTCwgMHgwMDIwMDAwMFVMLCAweDAwZmMwMDAwVUwsIDB4MDBiMTAwMDBVTCwgMHgwMDViMDAwMFVMLCAKKzB4MDA2YTAwMDBVTCwgMHgwMGNiMDAwMFVMLCAweDAwYmUwMDAwVUwsIDB4MDAzOTAwMDBVTCwgMHgwMDRhMDAwMFVMLCAweDAwNGMwMDAwVUwsIDB4MDA1ODAwMDBVTCwgMHgwMGNmMDAwMFVMLCAKKzB4MDBkMDAwMDBVTCwgMHgwMGVmMDAwMFVMLCAweDAwYWEwMDAwVUwsIDB4MDBmYjAwMDBVTCwgMHgwMDQzMDAwMFVMLCAweDAwNGQwMDAwVUwsIDB4MDAzMzAwMDBVTCwgMHgwMDg1MDAwMFVMLCAKKzB4MDA0NTAwMDBVTCwgMHgwMGY5MDAwMFVMLCAweDAwMDIwMDAwVUwsIDB4MDA3ZjAwMDBVTCwgMHgwMDUwMDAwMFVMLCAweDAwM2MwMDAwVUwsIDB4MDA5ZjAwMDBVTCwgMHgwMGE4MDAwMFVMLCAKKzB4MDA1MTAwMDBVTCwgMHgwMGEzMDAwMFVMLCAweDAwNDAwMDAwVUwsIDB4MDA4ZjAwMDBVTCwgMHgwMDkyMDAwMFVMLCAweDAwOWQwMDAwVUwsIDB4MDAzODAwMDBVTCwgMHgwMGY1MDAwMFVMLCAKKzB4MDBiYzAwMDBVTCwgMHgwMGI2MDAwMFVMLCAweDAwZGEwMDAwVUwsIDB4MDAyMTAwMDBVTCwgMHgwMDEwMDAwMFVMLCAweDAwZmYwMDAwVUwsIDB4MDBmMzAwMDBVTCwgMHgwMGQyMDAwMFVMLCAKKzB4MDBjZDAwMDBVTCwgMHgwMDBjMDAwMFVMLCAweDAwMTMwMDAwVUwsIDB4MDBlYzAwMDBVTCwgMHgwMDVmMDAwMFVMLCAweDAwOTcwMDAwVUwsIDB4MDA0NDAwMDBVTCwgMHgwMDE3MDAwMFVMLCAKKzB4MDBjNDAwMDBVTCwgMHgwMGE3MDAwMFVMLCAweDAwN2UwMDAwVUwsIDB4MDAzZDAwMDBVTCwgMHgwMDY0MDAwMFVMLCAweDAwNWQwMDAwVUwsIDB4MDAxOTAwMDBVTCwgMHgwMDczMDAwMFVMLCAKKzB4MDA2MDAwMDBVTCwgMHgwMDgxMDAwMFVMLCAweDAwNGYwMDAwVUwsIDB4MDBkYzAwMDBVTCwgMHgwMDIyMDAwMFVMLCAweDAwMmEwMDAwVUwsIDB4MDA5MDAwMDBVTCwgMHgwMDg4MDAwMFVMLCAKKzB4MDA0NjAwMDBVTCwgMHgwMGVlMDAwMFVMLCAweDAwYjgwMDAwVUwsIDB4MDAxNDAwMDBVTCwgMHgwMGRlMDAwMFVMLCAweDAwNWUwMDAwVUwsIDB4MDAwYjAwMDBVTCwgMHgwMGRiMDAwMFVMLCAKKzB4MDBlMDAwMDBVTCwgMHgwMDMyMDAwMFVMLCAweDAwM2EwMDAwVUwsIDB4MDAwYTAwMDBVTCwgMHgwMDQ5MDAwMFVMLCAweDAwMDYwMDAwVUwsIDB4MDAyNDAwMDBVTCwgMHgwMDVjMDAwMFVMLCAKKzB4MDBjMjAwMDBVTCwgMHgwMGQzMDAwMFVMLCAweDAwYWMwMDAwVUwsIDB4MDA2MjAwMDBVTCwgMHgwMDkxMDAwMFVMLCAweDAwOTUwMDAwVUwsIDB4MDBlNDAwMDBVTCwgMHgwMDc5MDAwMFVMLCAKKzB4MDBlNzAwMDBVTCwgMHgwMGM4MDAwMFVMLCAweDAwMzcwMDAwVUwsIDB4MDA2ZDAwMDBVTCwgMHgwMDhkMDAwMFVMLCAweDAwZDUwMDAwVUwsIDB4MDA0ZTAwMDBVTCwgMHgwMGE5MDAwMFVMLCAKKzB4MDA2YzAwMDBVTCwgMHgwMDU2MDAwMFVMLCAweDAwZjQwMDAwVUwsIDB4MDBlYTAwMDBVTCwgMHgwMDY1MDAwMFVMLCAweDAwN2EwMDAwVUwsIDB4MDBhZTAwMDBVTCwgMHgwMDA4MDAwMFVMLCAKKzB4MDBiYTAwMDBVTCwgMHgwMDc4MDAwMFVMLCAweDAwMjUwMDAwVUwsIDB4MDAyZTAwMDBVTCwgMHgwMDFjMDAwMFVMLCAweDAwYTYwMDAwVUwsIDB4MDBiNDAwMDBVTCwgMHgwMGM2MDAwMFVMLCAKKzB4MDBlODAwMDBVTCwgMHgwMGRkMDAwMFVMLCAweDAwNzQwMDAwVUwsIDB4MDAxZjAwMDBVTCwgMHgwMDRiMDAwMFVMLCAweDAwYmQwMDAwVUwsIDB4MDA4YjAwMDBVTCwgMHgwMDhhMDAwMFVMLCAKKzB4MDA3MDAwMDBVTCwgMHgwMDNlMDAwMFVMLCAweDAwYjUwMDAwVUwsIDB4MDA2NjAwMDBVTCwgMHgwMDQ4MDAwMFVMLCAweDAwMDMwMDAwVUwsIDB4MDBmNjAwMDBVTCwgMHgwMDBlMDAwMFVMLCAKKzB4MDA2MTAwMDBVTCwgMHgwMDM1MDAwMFVMLCAweDAwNTcwMDAwVUwsIDB4MDBiOTAwMDBVTCwgMHgwMDg2MDAwMFVMLCAweDAwYzEwMDAwVUwsIDB4MDAxZDAwMDBVTCwgMHgwMDllMDAwMFVMLCAKKzB4MDBlMTAwMDBVTCwgMHgwMGY4MDAwMFVMLCAweDAwOTgwMDAwVUwsIDB4MDAxMTAwMDBVTCwgMHgwMDY5MDAwMFVMLCAweDAwZDkwMDAwVUwsIDB4MDA4ZTAwMDBVTCwgMHgwMDk0MDAwMFVMLCAKKzB4MDA5YjAwMDBVTCwgMHgwMDFlMDAwMFVMLCAweDAwODcwMDAwVUwsIDB4MDBlOTAwMDBVTCwgMHgwMGNlMDAwMFVMLCAweDAwNTUwMDAwVUwsIDB4MDAyODAwMDBVTCwgMHgwMGRmMDAwMFVMLCAKKzB4MDA4YzAwMDBVTCwgMHgwMGExMDAwMFVMLCAweDAwODkwMDAwVUwsIDB4MDAwZDAwMDBVTCwgMHgwMGJmMDAwMFVMLCAweDAwZTYwMDAwVUwsIDB4MDA0MjAwMDBVTCwgMHgwMDY4MDAwMFVMLCAKKzB4MDA0MTAwMDBVTCwgMHgwMDk5MDAwMFVMLCAweDAwMmQwMDAwVUwsIDB4MDAwZjAwMDBVTCwgMHgwMGIwMDAwMFVMLCAweDAwNTQwMDAwVUwsIDB4MDBiYjAwMDBVTCwgMHgwMDE2MDAwMFVMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBUZTRfM1tdID0geworMHg2MzAwMDAwMFVMLCAweDdjMDAwMDAwVUwsIDB4NzcwMDAwMDBVTCwgMHg3YjAwMDAwMFVMLCAweGYyMDAwMDAwVUwsIDB4NmIwMDAwMDBVTCwgMHg2ZjAwMDAwMFVMLCAweGM1MDAwMDAwVUwsIAorMHgzMDAwMDAwMFVMLCAweDAxMDAwMDAwVUwsIDB4NjcwMDAwMDBVTCwgMHgyYjAwMDAwMFVMLCAweGZlMDAwMDAwVUwsIDB4ZDcwMDAwMDBVTCwgMHhhYjAwMDAwMFVMLCAweDc2MDAwMDAwVUwsIAorMHhjYTAwMDAwMFVMLCAweDgyMDAwMDAwVUwsIDB4YzkwMDAwMDBVTCwgMHg3ZDAwMDAwMFVMLCAweGZhMDAwMDAwVUwsIDB4NTkwMDAwMDBVTCwgMHg0NzAwMDAwMFVMLCAweGYwMDAwMDAwVUwsIAorMHhhZDAwMDAwMFVMLCAweGQ0MDAwMDAwVUwsIDB4YTIwMDAwMDBVTCwgMHhhZjAwMDAwMFVMLCAweDljMDAwMDAwVUwsIDB4YTQwMDAwMDBVTCwgMHg3MjAwMDAwMFVMLCAweGMwMDAwMDAwVUwsIAorMHhiNzAwMDAwMFVMLCAweGZkMDAwMDAwVUwsIDB4OTMwMDAwMDBVTCwgMHgyNjAwMDAwMFVMLCAweDM2MDAwMDAwVUwsIDB4M2YwMDAwMDBVTCwgMHhmNzAwMDAwMFVMLCAweGNjMDAwMDAwVUwsIAorMHgzNDAwMDAwMFVMLCAweGE1MDAwMDAwVUwsIDB4ZTUwMDAwMDBVTCwgMHhmMTAwMDAwMFVMLCAweDcxMDAwMDAwVUwsIDB4ZDgwMDAwMDBVTCwgMHgzMTAwMDAwMFVMLCAweDE1MDAwMDAwVUwsIAorMHgwNDAwMDAwMFVMLCAweGM3MDAwMDAwVUwsIDB4MjMwMDAwMDBVTCwgMHhjMzAwMDAwMFVMLCAweDE4MDAwMDAwVUwsIDB4OTYwMDAwMDBVTCwgMHgwNTAwMDAwMFVMLCAweDlhMDAwMDAwVUwsIAorMHgwNzAwMDAwMFVMLCAweDEyMDAwMDAwVUwsIDB4ODAwMDAwMDBVTCwgMHhlMjAwMDAwMFVMLCAweGViMDAwMDAwVUwsIDB4MjcwMDAwMDBVTCwgMHhiMjAwMDAwMFVMLCAweDc1MDAwMDAwVUwsIAorMHgwOTAwMDAwMFVMLCAweDgzMDAwMDAwVUwsIDB4MmMwMDAwMDBVTCwgMHgxYTAwMDAwMFVMLCAweDFiMDAwMDAwVUwsIDB4NmUwMDAwMDBVTCwgMHg1YTAwMDAwMFVMLCAweGEwMDAwMDAwVUwsIAorMHg1MjAwMDAwMFVMLCAweDNiMDAwMDAwVUwsIDB4ZDYwMDAwMDBVTCwgMHhiMzAwMDAwMFVMLCAweDI5MDAwMDAwVUwsIDB4ZTMwMDAwMDBVTCwgMHgyZjAwMDAwMFVMLCAweDg0MDAwMDAwVUwsIAorMHg1MzAwMDAwMFVMLCAweGQxMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCwgMHhlZDAwMDAwMFVMLCAweDIwMDAwMDAwVUwsIDB4ZmMwMDAwMDBVTCwgMHhiMTAwMDAwMFVMLCAweDViMDAwMDAwVUwsIAorMHg2YTAwMDAwMFVMLCAweGNiMDAwMDAwVUwsIDB4YmUwMDAwMDBVTCwgMHgzOTAwMDAwMFVMLCAweDRhMDAwMDAwVUwsIDB4NGMwMDAwMDBVTCwgMHg1ODAwMDAwMFVMLCAweGNmMDAwMDAwVUwsIAorMHhkMDAwMDAwMFVMLCAweGVmMDAwMDAwVUwsIDB4YWEwMDAwMDBVTCwgMHhmYjAwMDAwMFVMLCAweDQzMDAwMDAwVUwsIDB4NGQwMDAwMDBVTCwgMHgzMzAwMDAwMFVMLCAweDg1MDAwMDAwVUwsIAorMHg0NTAwMDAwMFVMLCAweGY5MDAwMDAwVUwsIDB4MDIwMDAwMDBVTCwgMHg3ZjAwMDAwMFVMLCAweDUwMDAwMDAwVUwsIDB4M2MwMDAwMDBVTCwgMHg5ZjAwMDAwMFVMLCAweGE4MDAwMDAwVUwsIAorMHg1MTAwMDAwMFVMLCAweGEzMDAwMDAwVUwsIDB4NDAwMDAwMDBVTCwgMHg4ZjAwMDAwMFVMLCAweDkyMDAwMDAwVUwsIDB4OWQwMDAwMDBVTCwgMHgzODAwMDAwMFVMLCAweGY1MDAwMDAwVUwsIAorMHhiYzAwMDAwMFVMLCAweGI2MDAwMDAwVUwsIDB4ZGEwMDAwMDBVTCwgMHgyMTAwMDAwMFVMLCAweDEwMDAwMDAwVUwsIDB4ZmYwMDAwMDBVTCwgMHhmMzAwMDAwMFVMLCAweGQyMDAwMDAwVUwsIAorMHhjZDAwMDAwMFVMLCAweDBjMDAwMDAwVUwsIDB4MTMwMDAwMDBVTCwgMHhlYzAwMDAwMFVMLCAweDVmMDAwMDAwVUwsIDB4OTcwMDAwMDBVTCwgMHg0NDAwMDAwMFVMLCAweDE3MDAwMDAwVUwsIAorMHhjNDAwMDAwMFVMLCAweGE3MDAwMDAwVUwsIDB4N2UwMDAwMDBVTCwgMHgzZDAwMDAwMFVMLCAweDY0MDAwMDAwVUwsIDB4NWQwMDAwMDBVTCwgMHgxOTAwMDAwMFVMLCAweDczMDAwMDAwVUwsIAorMHg2MDAwMDAwMFVMLCAweDgxMDAwMDAwVUwsIDB4NGYwMDAwMDBVTCwgMHhkYzAwMDAwMFVMLCAweDIyMDAwMDAwVUwsIDB4MmEwMDAwMDBVTCwgMHg5MDAwMDAwMFVMLCAweDg4MDAwMDAwVUwsIAorMHg0NjAwMDAwMFVMLCAweGVlMDAwMDAwVUwsIDB4YjgwMDAwMDBVTCwgMHgxNDAwMDAwMFVMLCAweGRlMDAwMDAwVUwsIDB4NWUwMDAwMDBVTCwgMHgwYjAwMDAwMFVMLCAweGRiMDAwMDAwVUwsIAorMHhlMDAwMDAwMFVMLCAweDMyMDAwMDAwVUwsIDB4M2EwMDAwMDBVTCwgMHgwYTAwMDAwMFVMLCAweDQ5MDAwMDAwVUwsIDB4MDYwMDAwMDBVTCwgMHgyNDAwMDAwMFVMLCAweDVjMDAwMDAwVUwsIAorMHhjMjAwMDAwMFVMLCAweGQzMDAwMDAwVUwsIDB4YWMwMDAwMDBVTCwgMHg2MjAwMDAwMFVMLCAweDkxMDAwMDAwVUwsIDB4OTUwMDAwMDBVTCwgMHhlNDAwMDAwMFVMLCAweDc5MDAwMDAwVUwsIAorMHhlNzAwMDAwMFVMLCAweGM4MDAwMDAwVUwsIDB4MzcwMDAwMDBVTCwgMHg2ZDAwMDAwMFVMLCAweDhkMDAwMDAwVUwsIDB4ZDUwMDAwMDBVTCwgMHg0ZTAwMDAwMFVMLCAweGE5MDAwMDAwVUwsIAorMHg2YzAwMDAwMFVMLCAweDU2MDAwMDAwVUwsIDB4ZjQwMDAwMDBVTCwgMHhlYTAwMDAwMFVMLCAweDY1MDAwMDAwVUwsIDB4N2EwMDAwMDBVTCwgMHhhZTAwMDAwMFVMLCAweDA4MDAwMDAwVUwsIAorMHhiYTAwMDAwMFVMLCAweDc4MDAwMDAwVUwsIDB4MjUwMDAwMDBVTCwgMHgyZTAwMDAwMFVMLCAweDFjMDAwMDAwVUwsIDB4YTYwMDAwMDBVTCwgMHhiNDAwMDAwMFVMLCAweGM2MDAwMDAwVUwsIAorMHhlODAwMDAwMFVMLCAweGRkMDAwMDAwVUwsIDB4NzQwMDAwMDBVTCwgMHgxZjAwMDAwMFVMLCAweDRiMDAwMDAwVUwsIDB4YmQwMDAwMDBVTCwgMHg4YjAwMDAwMFVMLCAweDhhMDAwMDAwVUwsIAorMHg3MDAwMDAwMFVMLCAweDNlMDAwMDAwVUwsIDB4YjUwMDAwMDBVTCwgMHg2NjAwMDAwMFVMLCAweDQ4MDAwMDAwVUwsIDB4MDMwMDAwMDBVTCwgMHhmNjAwMDAwMFVMLCAweDBlMDAwMDAwVUwsIAorMHg2MTAwMDAwMFVMLCAweDM1MDAwMDAwVUwsIDB4NTcwMDAwMDBVTCwgMHhiOTAwMDAwMFVMLCAweDg2MDAwMDAwVUwsIDB4YzEwMDAwMDBVTCwgMHgxZDAwMDAwMFVMLCAweDllMDAwMDAwVUwsIAorMHhlMTAwMDAwMFVMLCAweGY4MDAwMDAwVUwsIDB4OTgwMDAwMDBVTCwgMHgxMTAwMDAwMFVMLCAweDY5MDAwMDAwVUwsIDB4ZDkwMDAwMDBVTCwgMHg4ZTAwMDAwMFVMLCAweDk0MDAwMDAwVUwsIAorMHg5YjAwMDAwMFVMLCAweDFlMDAwMDAwVUwsIDB4ODcwMDAwMDBVTCwgMHhlOTAwMDAwMFVMLCAweGNlMDAwMDAwVUwsIDB4NTUwMDAwMDBVTCwgMHgyODAwMDAwMFVMLCAweGRmMDAwMDAwVUwsIAorMHg4YzAwMDAwMFVMLCAweGExMDAwMDAwVUwsIDB4ODkwMDAwMDBVTCwgMHgwZDAwMDAwMFVMLCAweGJmMDAwMDAwVUwsIDB4ZTYwMDAwMDBVTCwgMHg0MjAwMDAwMFVMLCAweDY4MDAwMDAwVUwsIAorMHg0MTAwMDAwMFVMLCAweDk5MDAwMDAwVUwsIDB4MmQwMDAwMDBVTCwgMHgwZjAwMDAwMFVMLCAweGIwMDAwMDAwVUwsIDB4NTQwMDAwMDBVTCwgMHhiYjAwMDAwMFVMLCAweDE2MDAwMDAwVUwKK307CisjZW5kaWYgLyogcGVsaW1hYyAqLworCisjaWZuZGVmIEVOQ1JZUFRfT05MWQorCitzdGF0aWMgY29uc3QgdWxvbmczMiBURDFbMjU2XSA9IHsKKyAgICAweDUwNTFmNGE3VUwsIDB4NTM3ZTQxNjVVTCwgMHhjMzFhMTdhNFVMLCAweDk2M2EyNzVlVUwsCisgICAgMHhjYjNiYWI2YlVMLCAweGYxMWY5ZDQ1VUwsIDB4YWJhY2ZhNThVTCwgMHg5MzRiZTMwM1VMLAorICAgIDB4NTUyMDMwZmFVTCwgMHhmNmFkNzY2ZFVMLCAweDkxODhjYzc2VUwsIDB4MjVmNTAyNGNVTCwKKyAgICAweGZjNGZlNWQ3VUwsIDB4ZDdjNTJhY2JVTCwgMHg4MDI2MzU0NFVMLCAweDhmYjU2MmEzVUwsCisgICAgMHg0OWRlYjE1YVVMLCAweDY3MjViYTFiVUwsIDB4OTg0NWVhMGVVTCwgMHhlMTVkZmVjMFVMLAorICAgIDB4MDJjMzJmNzVVTCwgMHgxMjgxNGNmMFVMLCAweGEzOGQ0Njk3VUwsIDB4YzY2YmQzZjlVTCwKKyAgICAweGU3MDM4ZjVmVUwsIDB4OTUxNTkyOWNVTCwgMHhlYmJmNmQ3YVVMLCAweGRhOTU1MjU5VUwsCisgICAgMHgyZGQ0YmU4M1VMLCAweGQzNTg3NDIxVUwsIDB4Mjk0OWUwNjlVTCwgMHg0NDhlYzljOFVMLAorICAgIDB4NmE3NWMyODlVTCwgMHg3OGY0OGU3OVVMLCAweDZiOTk1ODNlVUwsIDB4ZGQyN2I5NzFVTCwKKyAgICAweGI2YmVlMTRmVUwsIDB4MTdmMDg4YWRVTCwgMHg2NmM5MjBhY1VMLCAweGI0N2RjZTNhVUwsCisgICAgMHgxODYzZGY0YVVMLCAweDgyZTUxYTMxVUwsIDB4NjA5NzUxMzNVTCwgMHg0NTYyNTM3ZlVMLAorICAgIDB4ZTBiMTY0NzdVTCwgMHg4NGJiNmJhZVVMLCAweDFjZmU4MWEwVUwsIDB4OTRmOTA4MmJVTCwKKyAgICAweDU4NzA0ODY4VUwsIDB4MTk4ZjQ1ZmRVTCwgMHg4Nzk0ZGU2Y1VMLCAweGI3NTI3YmY4VUwsCisgICAgMHgyM2FiNzNkM1VMLCAweGUyNzI0YjAyVUwsIDB4NTdlMzFmOGZVTCwgMHgyYTY2NTVhYlVMLAorICAgIDB4MDdiMmViMjhVTCwgMHgwMzJmYjVjMlVMLCAweDlhODZjNTdiVUwsIDB4YTVkMzM3MDhVTCwKKyAgICAweGYyMzAyODg3VUwsIDB4YjIyM2JmYTVVTCwgMHhiYTAyMDM2YVVMLCAweDVjZWQxNjgyVUwsCisgICAgMHgyYjhhY2YxY1VMLCAweDkyYTc3OWI0VUwsIDB4ZjBmMzA3ZjJVTCwgMHhhMTRlNjllMlVMLAorICAgIDB4Y2Q2NWRhZjRVTCwgMHhkNTA2MDViZVVMLCAweDFmZDEzNDYyVUwsIDB4OGFjNGE2ZmVVTCwKKyAgICAweDlkMzQyZTUzVUwsIDB4YTBhMmYzNTVVTCwgMHgzMjA1OGFlMVVMLCAweDc1YTRmNmViVUwsCisgICAgMHgzOTBiODNlY1VMLCAweGFhNDA2MGVmVUwsIDB4MDY1ZTcxOWZVTCwgMHg1MWJkNmUxMFVMLAorICAgIDB4ZjkzZTIxOGFVTCwgMHgzZDk2ZGQwNlVMLCAweGFlZGQzZTA1VUwsIDB4NDY0ZGU2YmRVTCwKKyAgICAweGI1OTE1NDhkVUwsIDB4MDU3MWM0NWRVTCwgMHg2ZjA0MDZkNFVMLCAweGZmNjA1MDE1VUwsCisgICAgMHgyNDE5OThmYlVMLCAweDk3ZDZiZGU5VUwsIDB4Y2M4OTQwNDNVTCwgMHg3NzY3ZDk5ZVVMLAorICAgIDB4YmRiMGU4NDJVTCwgMHg4ODA3ODk4YlVMLCAweDM4ZTcxOTViVUwsIDB4ZGI3OWM4ZWVVTCwKKyAgICAweDQ3YTE3YzBhVUwsIDB4ZTk3YzQyMGZVTCwgMHhjOWY4ODQxZVVMLCAweDAwMDAwMDAwVUwsCisgICAgMHg4MzA5ODA4NlVMLCAweDQ4MzIyYmVkVUwsIDB4YWMxZTExNzBVTCwgMHg0ZTZjNWE3MlVMLAorICAgIDB4ZmJmZDBlZmZVTCwgMHg1NjBmODUzOFVMLCAweDFlM2RhZWQ1VUwsIDB4MjczNjJkMzlVTCwKKyAgICAweDY0MGEwZmQ5VUwsIDB4MjE2ODVjYTZVTCwgMHhkMTliNWI1NFVMLCAweDNhMjQzNjJlVUwsCisgICAgMHhiMTBjMGE2N1VMLCAweDBmOTM1N2U3VUwsIDB4ZDJiNGVlOTZVTCwgMHg5ZTFiOWI5MVVMLAorICAgIDB4NGY4MGMwYzVVTCwgMHhhMjYxZGMyMFVMLCAweDY5NWE3NzRiVUwsIDB4MTYxYzEyMWFVTCwKKyAgICAweDBhZTI5M2JhVUwsIDB4ZTVjMGEwMmFVTCwgMHg0MzNjMjJlMFVMLCAweDFkMTIxYjE3VUwsCisgICAgMHgwYjBlMDkwZFVMLCAweGFkZjI4YmM3VUwsIDB4YjkyZGI2YThVTCwgMHhjODE0MWVhOVVMLAorICAgIDB4ODU1N2YxMTlVTCwgMHg0Y2FmNzUwN1VMLCAweGJiZWU5OWRkVUwsIDB4ZmRhMzdmNjBVTCwKKyAgICAweDlmZjcwMTI2VUwsIDB4YmM1YzcyZjVVTCwgMHhjNTQ0NjYzYlVMLCAweDM0NWJmYjdlVUwsCisgICAgMHg3NjhiNDMyOVVMLCAweGRjY2IyM2M2VUwsIDB4NjhiNmVkZmNVTCwgMHg2M2I4ZTRmMVVMLAorICAgIDB4Y2FkNzMxZGNVTCwgMHgxMDQyNjM4NVVMLCAweDQwMTM5NzIyVUwsIDB4MjA4NGM2MTFVTCwKKyAgICAweDdkODU0YTI0VUwsIDB4ZjhkMmJiM2RVTCwgMHgxMWFlZjkzMlVMLCAweDZkYzcyOWExVUwsCisgICAgMHg0YjFkOWUyZlVMLCAweGYzZGNiMjMwVUwsIDB4ZWMwZDg2NTJVTCwgMHhkMDc3YzFlM1VMLAorICAgIDB4NmMyYmIzMTZVTCwgMHg5OWE5NzBiOVVMLCAweGZhMTE5NDQ4VUwsIDB4MjI0N2U5NjRVTCwKKyAgICAweGM0YThmYzhjVUwsIDB4MWFhMGYwM2ZVTCwgMHhkODU2N2QyY1VMLCAweGVmMjIzMzkwVUwsCisgICAgMHhjNzg3NDk0ZVVMLCAweGMxZDkzOGQxVUwsIDB4ZmU4Y2NhYTJVTCwgMHgzNjk4ZDQwYlVMLAorICAgIDB4Y2ZhNmY1ODFVTCwgMHgyOGE1N2FkZVVMLCAweDI2ZGFiNzhlVUwsIDB4YTQzZmFkYmZVTCwKKyAgICAweGU0MmMzYTlkVUwsIDB4MGQ1MDc4OTJVTCwgMHg5YjZhNWZjY1VMLCAweDYyNTQ3ZTQ2VUwsCisgICAgMHhjMmY2OGQxM1VMLCAweGU4OTBkOGI4VUwsIDB4NWUyZTM5ZjdVTCwgMHhmNTgyYzNhZlVMLAorICAgIDB4YmU5ZjVkODBVTCwgMHg3YzY5ZDA5M1VMLCAweGE5NmZkNTJkVUwsIDB4YjNjZjI1MTJVTCwKKyAgICAweDNiYzhhYzk5VUwsIDB4YTcxMDE4N2RVTCwgMHg2ZWU4OWM2M1VMLCAweDdiZGIzYmJiVUwsCisgICAgMHgwOWNkMjY3OFVMLCAweGY0NmU1OTE4VUwsIDB4MDFlYzlhYjdVTCwgMHhhODgzNGY5YVVMLAorICAgIDB4NjVlNjk1NmVVTCwgMHg3ZWFhZmZlNlVMLCAweDA4MjFiY2NmVUwsIDB4ZTZlZjE1ZThVTCwKKyAgICAweGQ5YmFlNzliVUwsIDB4Y2U0YTZmMzZVTCwgMHhkNGVhOWYwOVVMLCAweGQ2MjliMDdjVUwsCisgICAgMHhhZjMxYTRiMlVMLCAweDMxMmEzZjIzVUwsIDB4MzBjNmE1OTRVTCwgMHhjMDM1YTI2NlVMLAorICAgIDB4Mzc3NDRlYmNVTCwgMHhhNmZjODJjYVVMLCAweGIwZTA5MGQwVUwsIDB4MTUzM2E3ZDhVTCwKKyAgICAweDRhZjEwNDk4VUwsIDB4Zjc0MWVjZGFVTCwgMHgwZTdmY2Q1MFVMLCAweDJmMTc5MWY2VUwsCisgICAgMHg4ZDc2NGRkNlVMLCAweDRkNDNlZmIwVUwsIDB4NTRjY2FhNGRVTCwgMHhkZmU0OTYwNFVMLAorICAgIDB4ZTM5ZWQxYjVVTCwgMHgxYjRjNmE4OFVMLCAweGI4YzEyYzFmVUwsIDB4N2Y0NjY1NTFVTCwKKyAgICAweDA0OWQ1ZWVhVUwsIDB4NWQwMThjMzVVTCwgMHg3M2ZhODc3NFVMLCAweDJlZmIwYjQxVUwsCisgICAgMHg1YWIzNjcxZFVMLCAweDUyOTJkYmQyVUwsIDB4MzNlOTEwNTZVTCwgMHgxMzZkZDY0N1VMLAorICAgIDB4OGM5YWQ3NjFVTCwgMHg3YTM3YTEwY1VMLCAweDhlNTlmODE0VUwsIDB4ODllYjEzM2NVTCwKKyAgICAweGVlY2VhOTI3VUwsIDB4MzViNzYxYzlVTCwgMHhlZGUxMWNlNVVMLCAweDNjN2E0N2IxVUwsCisgICAgMHg1OTljZDJkZlVMLCAweDNmNTVmMjczVUwsIDB4NzkxODE0Y2VVTCwgMHhiZjczYzczN1VMLAorICAgIDB4ZWE1M2Y3Y2RVTCwgMHg1YjVmZmRhYVVMLCAweDE0ZGYzZDZmVUwsIDB4ODY3ODQ0ZGJVTCwKKyAgICAweDgxY2FhZmYzVUwsIDB4M2ViOTY4YzRVTCwgMHgyYzM4MjQzNFVMLCAweDVmYzJhMzQwVUwsCisgICAgMHg3MjE2MWRjM1VMLCAweDBjYmNlMjI1VUwsIDB4OGIyODNjNDlVTCwgMHg0MWZmMGQ5NVVMLAorICAgIDB4NzEzOWE4MDFVTCwgMHhkZTA4MGNiM1VMLCAweDljZDhiNGU0VUwsIDB4OTA2NDU2YzFVTCwKKyAgICAweDYxN2JjYjg0VUwsIDB4NzBkNTMyYjZVTCwgMHg3NDQ4NmM1Y1VMLCAweDQyZDBiODU3VUwsCit9Oworc3RhdGljIGNvbnN0IHVsb25nMzIgVEQyWzI1Nl0gPSB7CisgICAgMHhhNzUwNTFmNFVMLCAweDY1NTM3ZTQxVUwsIDB4YTRjMzFhMTdVTCwgMHg1ZTk2M2EyN1VMLAorICAgIDB4NmJjYjNiYWJVTCwgMHg0NWYxMWY5ZFVMLCAweDU4YWJhY2ZhVUwsIDB4MDM5MzRiZTNVTCwKKyAgICAweGZhNTUyMDMwVUwsIDB4NmRmNmFkNzZVTCwgMHg3NjkxODhjY1VMLCAweDRjMjVmNTAyVUwsCisgICAgMHhkN2ZjNGZlNVVMLCAweGNiZDdjNTJhVUwsIDB4NDQ4MDI2MzVVTCwgMHhhMzhmYjU2MlVMLAorICAgIDB4NWE0OWRlYjFVTCwgMHgxYjY3MjViYVVMLCAweDBlOTg0NWVhVUwsIDB4YzBlMTVkZmVVTCwKKyAgICAweDc1MDJjMzJmVUwsIDB4ZjAxMjgxNGNVTCwgMHg5N2EzOGQ0NlVMLCAweGY5YzY2YmQzVUwsCisgICAgMHg1ZmU3MDM4ZlVMLCAweDljOTUxNTkyVUwsIDB4N2FlYmJmNmRVTCwgMHg1OWRhOTU1MlVMLAorICAgIDB4ODMyZGQ0YmVVTCwgMHgyMWQzNTg3NFVMLCAweDY5Mjk0OWUwVUwsIDB4Yzg0NDhlYzlVTCwKKyAgICAweDg5NmE3NWMyVUwsIDB4Nzk3OGY0OGVVTCwgMHgzZTZiOTk1OFVMLCAweDcxZGQyN2I5VUwsCisgICAgMHg0ZmI2YmVlMVVMLCAweGFkMTdmMDg4VUwsIDB4YWM2NmM5MjBVTCwgMHgzYWI0N2RjZVVMLAorICAgIDB4NGExODYzZGZVTCwgMHgzMTgyZTUxYVVMLCAweDMzNjA5NzUxVUwsIDB4N2Y0NTYyNTNVTCwKKyAgICAweDc3ZTBiMTY0VUwsIDB4YWU4NGJiNmJVTCwgMHhhMDFjZmU4MVVMLCAweDJiOTRmOTA4VUwsCisgICAgMHg2ODU4NzA0OFVMLCAweGZkMTk4ZjQ1VUwsIDB4NmM4Nzk0ZGVVTCwgMHhmOGI3NTI3YlVMLAorICAgIDB4ZDMyM2FiNzNVTCwgMHgwMmUyNzI0YlVMLCAweDhmNTdlMzFmVUwsIDB4YWIyYTY2NTVVTCwKKyAgICAweDI4MDdiMmViVUwsIDB4YzIwMzJmYjVVTCwgMHg3YjlhODZjNVVMLCAweDA4YTVkMzM3VUwsCisgICAgMHg4N2YyMzAyOFVMLCAweGE1YjIyM2JmVUwsIDB4NmFiYTAyMDNVTCwgMHg4MjVjZWQxNlVMLAorICAgIDB4MWMyYjhhY2ZVTCwgMHhiNDkyYTc3OVVMLCAweGYyZjBmMzA3VUwsIDB4ZTJhMTRlNjlVTCwKKyAgICAweGY0Y2Q2NWRhVUwsIDB4YmVkNTA2MDVVTCwgMHg2MjFmZDEzNFVMLCAweGZlOGFjNGE2VUwsCisgICAgMHg1MzlkMzQyZVVMLCAweDU1YTBhMmYzVUwsIDB4ZTEzMjA1OGFVTCwgMHhlYjc1YTRmNlVMLAorICAgIDB4ZWMzOTBiODNVTCwgMHhlZmFhNDA2MFVMLCAweDlmMDY1ZTcxVUwsIDB4MTA1MWJkNmVVTCwKKyAgICAweDhhZjkzZTIxVUwsIDB4MDYzZDk2ZGRVTCwgMHgwNWFlZGQzZVVMLCAweGJkNDY0ZGU2VUwsCisgICAgMHg4ZGI1OTE1NFVMLCAweDVkMDU3MWM0VUwsIDB4ZDQ2ZjA0MDZVTCwgMHgxNWZmNjA1MFVMLAorICAgIDB4ZmIyNDE5OThVTCwgMHhlOTk3ZDZiZFVMLCAweDQzY2M4OTQwVUwsIDB4OWU3NzY3ZDlVTCwKKyAgICAweDQyYmRiMGU4VUwsIDB4OGI4ODA3ODlVTCwgMHg1YjM4ZTcxOVVMLCAweGVlZGI3OWM4VUwsCisgICAgMHgwYTQ3YTE3Y1VMLCAweDBmZTk3YzQyVUwsIDB4MWVjOWY4ODRVTCwgMHgwMDAwMDAwMFVMLAorICAgIDB4ODY4MzA5ODBVTCwgMHhlZDQ4MzIyYlVMLCAweDcwYWMxZTExVUwsIDB4NzI0ZTZjNWFVTCwKKyAgICAweGZmZmJmZDBlVUwsIDB4Mzg1NjBmODVVTCwgMHhkNTFlM2RhZVVMLCAweDM5MjczNjJkVUwsCisgICAgMHhkOTY0MGEwZlVMLCAweGE2MjE2ODVjVUwsIDB4NTRkMTliNWJVTCwgMHgyZTNhMjQzNlVMLAorICAgIDB4NjdiMTBjMGFVTCwgMHhlNzBmOTM1N1VMLCAweDk2ZDJiNGVlVUwsIDB4OTE5ZTFiOWJVTCwKKyAgICAweGM1NGY4MGMwVUwsIDB4MjBhMjYxZGNVTCwgMHg0YjY5NWE3N1VMLCAweDFhMTYxYzEyVUwsCisgICAgMHhiYTBhZTI5M1VMLCAweDJhZTVjMGEwVUwsIDB4ZTA0MzNjMjJVTCwgMHgxNzFkMTIxYlVMLAorICAgIDB4MGQwYjBlMDlVTCwgMHhjN2FkZjI4YlVMLCAweGE4YjkyZGI2VUwsIDB4YTljODE0MWVVTCwKKyAgICAweDE5ODU1N2YxVUwsIDB4MDc0Y2FmNzVVTCwgMHhkZGJiZWU5OVVMLCAweDYwZmRhMzdmVUwsCisgICAgMHgyNjlmZjcwMVVMLCAweGY1YmM1YzcyVUwsIDB4M2JjNTQ0NjZVTCwgMHg3ZTM0NWJmYlVMLAorICAgIDB4Mjk3NjhiNDNVTCwgMHhjNmRjY2IyM1VMLCAweGZjNjhiNmVkVUwsIDB4ZjE2M2I4ZTRVTCwKKyAgICAweGRjY2FkNzMxVUwsIDB4ODUxMDQyNjNVTCwgMHgyMjQwMTM5N1VMLCAweDExMjA4NGM2VUwsCisgICAgMHgyNDdkODU0YVVMLCAweDNkZjhkMmJiVUwsIDB4MzIxMWFlZjlVTCwgMHhhMTZkYzcyOVVMLAorICAgIDB4MmY0YjFkOWVVTCwgMHgzMGYzZGNiMlVMLCAweDUyZWMwZDg2VUwsIDB4ZTNkMDc3YzFVTCwKKyAgICAweDE2NmMyYmIzVUwsIDB4Yjk5OWE5NzBVTCwgMHg0OGZhMTE5NFVMLCAweDY0MjI0N2U5VUwsCisgICAgMHg4Y2M0YThmY1VMLCAweDNmMWFhMGYwVUwsIDB4MmNkODU2N2RVTCwgMHg5MGVmMjIzM1VMLAorICAgIDB4NGVjNzg3NDlVTCwgMHhkMWMxZDkzOFVMLCAweGEyZmU4Y2NhVUwsIDB4MGIzNjk4ZDRVTCwKKyAgICAweDgxY2ZhNmY1VUwsIDB4ZGUyOGE1N2FVTCwgMHg4ZTI2ZGFiN1VMLCAweGJmYTQzZmFkVUwsCisgICAgMHg5ZGU0MmMzYVVMLCAweDkyMGQ1MDc4VUwsIDB4Y2M5YjZhNWZVTCwgMHg0NjYyNTQ3ZVVMLAorICAgIDB4MTNjMmY2OGRVTCwgMHhiOGU4OTBkOFVMLCAweGY3NWUyZTM5VUwsIDB4YWZmNTgyYzNVTCwKKyAgICAweDgwYmU5ZjVkVUwsIDB4OTM3YzY5ZDBVTCwgMHgyZGE5NmZkNVVMLCAweDEyYjNjZjI1VUwsCisgICAgMHg5OTNiYzhhY1VMLCAweDdkYTcxMDE4VUwsIDB4NjM2ZWU4OWNVTCwgMHhiYjdiZGIzYlVMLAorICAgIDB4NzgwOWNkMjZVTCwgMHgxOGY0NmU1OVVMLCAweGI3MDFlYzlhVUwsIDB4OWFhODgzNGZVTCwKKyAgICAweDZlNjVlNjk1VUwsIDB4ZTY3ZWFhZmZVTCwgMHhjZjA4MjFiY1VMLCAweGU4ZTZlZjE1VUwsCisgICAgMHg5YmQ5YmFlN1VMLCAweDM2Y2U0YTZmVUwsIDB4MDlkNGVhOWZVTCwgMHg3Y2Q2MjliMFVMLAorICAgIDB4YjJhZjMxYTRVTCwgMHgyMzMxMmEzZlVMLCAweDk0MzBjNmE1VUwsIDB4NjZjMDM1YTJVTCwKKyAgICAweGJjMzc3NDRlVUwsIDB4Y2FhNmZjODJVTCwgMHhkMGIwZTA5MFVMLCAweGQ4MTUzM2E3VUwsCisgICAgMHg5ODRhZjEwNFVMLCAweGRhZjc0MWVjVUwsIDB4NTAwZTdmY2RVTCwgMHhmNjJmMTc5MVVMLAorICAgIDB4ZDY4ZDc2NGRVTCwgMHhiMDRkNDNlZlVMLCAweDRkNTRjY2FhVUwsIDB4MDRkZmU0OTZVTCwKKyAgICAweGI1ZTM5ZWQxVUwsIDB4ODgxYjRjNmFVTCwgMHgxZmI4YzEyY1VMLCAweDUxN2Y0NjY1VUwsCisgICAgMHhlYTA0OWQ1ZVVMLCAweDM1NWQwMThjVUwsIDB4NzQ3M2ZhODdVTCwgMHg0MTJlZmIwYlVMLAorICAgIDB4MWQ1YWIzNjdVTCwgMHhkMjUyOTJkYlVMLCAweDU2MzNlOTEwVUwsIDB4NDcxMzZkZDZVTCwKKyAgICAweDYxOGM5YWQ3VUwsIDB4MGM3YTM3YTFVTCwgMHgxNDhlNTlmOFVMLCAweDNjODllYjEzVUwsCisgICAgMHgyN2VlY2VhOVVMLCAweGM5MzViNzYxVUwsIDB4ZTVlZGUxMWNVTCwgMHhiMTNjN2E0N1VMLAorICAgIDB4ZGY1OTljZDJVTCwgMHg3MzNmNTVmMlVMLCAweGNlNzkxODE0VUwsIDB4MzdiZjczYzdVTCwKKyAgICAweGNkZWE1M2Y3VUwsIDB4YWE1YjVmZmRVTCwgMHg2ZjE0ZGYzZFVMLCAweGRiODY3ODQ0VUwsCisgICAgMHhmMzgxY2FhZlVMLCAweGM0M2ViOTY4VUwsIDB4MzQyYzM4MjRVTCwgMHg0MDVmYzJhM1VMLAorICAgIDB4YzM3MjE2MWRVTCwgMHgyNTBjYmNlMlVMLCAweDQ5OGIyODNjVUwsIDB4OTU0MWZmMGRVTCwKKyAgICAweDAxNzEzOWE4VUwsIDB4YjNkZTA4MGNVTCwgMHhlNDljZDhiNFVMLCAweGMxOTA2NDU2VUwsCisgICAgMHg4NDYxN2JjYlVMLCAweGI2NzBkNTMyVUwsIDB4NWM3NDQ4NmNVTCwgMHg1NzQyZDBiOFVMLAorfTsKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFREM1syNTZdID0geworICAgIDB4ZjRhNzUwNTFVTCwgMHg0MTY1NTM3ZVVMLCAweDE3YTRjMzFhVUwsIDB4Mjc1ZTk2M2FVTCwKKyAgICAweGFiNmJjYjNiVUwsIDB4OWQ0NWYxMWZVTCwgMHhmYTU4YWJhY1VMLCAweGUzMDM5MzRiVUwsCisgICAgMHgzMGZhNTUyMFVMLCAweDc2NmRmNmFkVUwsIDB4Y2M3NjkxODhVTCwgMHgwMjRjMjVmNVVMLAorICAgIDB4ZTVkN2ZjNGZVTCwgMHgyYWNiZDdjNVVMLCAweDM1NDQ4MDI2VUwsIDB4NjJhMzhmYjVVTCwKKyAgICAweGIxNWE0OWRlVUwsIDB4YmExYjY3MjVVTCwgMHhlYTBlOTg0NVVMLCAweGZlYzBlMTVkVUwsCisgICAgMHgyZjc1MDJjM1VMLCAweDRjZjAxMjgxVUwsIDB4NDY5N2EzOGRVTCwgMHhkM2Y5YzY2YlVMLAorICAgIDB4OGY1ZmU3MDNVTCwgMHg5MjljOTUxNVVMLCAweDZkN2FlYmJmVUwsIDB4NTI1OWRhOTVVTCwKKyAgICAweGJlODMyZGQ0VUwsIDB4NzQyMWQzNThVTCwgMHhlMDY5Mjk0OVVMLCAweGM5Yzg0NDhlVUwsCisgICAgMHhjMjg5NmE3NVVMLCAweDhlNzk3OGY0VUwsIDB4NTgzZTZiOTlVTCwgMHhiOTcxZGQyN1VMLAorICAgIDB4ZTE0ZmI2YmVVTCwgMHg4OGFkMTdmMFVMLCAweDIwYWM2NmM5VUwsIDB4Y2UzYWI0N2RVTCwKKyAgICAweGRmNGExODYzVUwsIDB4MWEzMTgyZTVVTCwgMHg1MTMzNjA5N1VMLCAweDUzN2Y0NTYyVUwsCisgICAgMHg2NDc3ZTBiMVVMLCAweDZiYWU4NGJiVUwsIDB4ODFhMDFjZmVVTCwgMHgwODJiOTRmOVVMLAorICAgIDB4NDg2ODU4NzBVTCwgMHg0NWZkMTk4ZlVMLCAweGRlNmM4Nzk0VUwsIDB4N2JmOGI3NTJVTCwKKyAgICAweDczZDMyM2FiVUwsIDB4NGIwMmUyNzJVTCwgMHgxZjhmNTdlM1VMLCAweDU1YWIyYTY2VUwsCisgICAgMHhlYjI4MDdiMlVMLCAweGI1YzIwMzJmVUwsIDB4YzU3YjlhODZVTCwgMHgzNzA4YTVkM1VMLAorICAgIDB4Mjg4N2YyMzBVTCwgMHhiZmE1YjIyM1VMLCAweDAzNmFiYTAyVUwsIDB4MTY4MjVjZWRVTCwKKyAgICAweGNmMWMyYjhhVUwsIDB4NzliNDkyYTdVTCwgMHgwN2YyZjBmM1VMLCAweDY5ZTJhMTRlVUwsCisgICAgMHhkYWY0Y2Q2NVVMLCAweDA1YmVkNTA2VUwsIDB4MzQ2MjFmZDFVTCwgMHhhNmZlOGFjNFVMLAorICAgIDB4MmU1MzlkMzRVTCwgMHhmMzU1YTBhMlVMLCAweDhhZTEzMjA1VUwsIDB4ZjZlYjc1YTRVTCwKKyAgICAweDgzZWMzOTBiVUwsIDB4NjBlZmFhNDBVTCwgMHg3MTlmMDY1ZVVMLCAweDZlMTA1MWJkVUwsCisgICAgMHgyMThhZjkzZVVMLCAweGRkMDYzZDk2VUwsIDB4M2UwNWFlZGRVTCwgMHhlNmJkNDY0ZFVMLAorICAgIDB4NTQ4ZGI1OTFVTCwgMHhjNDVkMDU3MVVMLCAweDA2ZDQ2ZjA0VUwsIDB4NTAxNWZmNjBVTCwKKyAgICAweDk4ZmIyNDE5VUwsIDB4YmRlOTk3ZDZVTCwgMHg0MDQzY2M4OVVMLCAweGQ5OWU3NzY3VUwsCisgICAgMHhlODQyYmRiMFVMLCAweDg5OGI4ODA3VUwsIDB4MTk1YjM4ZTdVTCwgMHhjOGVlZGI3OVVMLAorICAgIDB4N2MwYTQ3YTFVTCwgMHg0MjBmZTk3Y1VMLCAweDg0MWVjOWY4VUwsIDB4MDAwMDAwMDBVTCwKKyAgICAweDgwODY4MzA5VUwsIDB4MmJlZDQ4MzJVTCwgMHgxMTcwYWMxZVVMLCAweDVhNzI0ZTZjVUwsCisgICAgMHgwZWZmZmJmZFVMLCAweDg1Mzg1NjBmVUwsIDB4YWVkNTFlM2RVTCwgMHgyZDM5MjczNlVMLAorICAgIDB4MGZkOTY0MGFVTCwgMHg1Y2E2MjE2OFVMLCAweDViNTRkMTliVUwsIDB4MzYyZTNhMjRVTCwKKyAgICAweDBhNjdiMTBjVUwsIDB4NTdlNzBmOTNVTCwgMHhlZTk2ZDJiNFVMLCAweDliOTE5ZTFiVUwsCisgICAgMHhjMGM1NGY4MFVMLCAweGRjMjBhMjYxVUwsIDB4Nzc0YjY5NWFVTCwgMHgxMjFhMTYxY1VMLAorICAgIDB4OTNiYTBhZTJVTCwgMHhhMDJhZTVjMFVMLCAweDIyZTA0MzNjVUwsIDB4MWIxNzFkMTJVTCwKKyAgICAweDA5MGQwYjBlVUwsIDB4OGJjN2FkZjJVTCwgMHhiNmE4YjkyZFVMLCAweDFlYTljODE0VUwsCisgICAgMHhmMTE5ODU1N1VMLCAweDc1MDc0Y2FmVUwsIDB4OTlkZGJiZWVVTCwgMHg3ZjYwZmRhM1VMLAorICAgIDB4MDEyNjlmZjdVTCwgMHg3MmY1YmM1Y1VMLCAweDY2M2JjNTQ0VUwsIDB4ZmI3ZTM0NWJVTCwKKyAgICAweDQzMjk3NjhiVUwsIDB4MjNjNmRjY2JVTCwgMHhlZGZjNjhiNlVMLCAweGU0ZjE2M2I4VUwsCisgICAgMHgzMWRjY2FkN1VMLCAweDYzODUxMDQyVUwsIDB4OTcyMjQwMTNVTCwgMHhjNjExMjA4NFVMLAorICAgIDB4NGEyNDdkODVVTCwgMHhiYjNkZjhkMlVMLCAweGY5MzIxMWFlVUwsIDB4MjlhMTZkYzdVTCwKKyAgICAweDllMmY0YjFkVUwsIDB4YjIzMGYzZGNVTCwgMHg4NjUyZWMwZFVMLCAweGMxZTNkMDc3VUwsCisgICAgMHhiMzE2NmMyYlVMLCAweDcwYjk5OWE5VUwsIDB4OTQ0OGZhMTFVTCwgMHhlOTY0MjI0N1VMLAorICAgIDB4ZmM4Y2M0YThVTCwgMHhmMDNmMWFhMFVMLCAweDdkMmNkODU2VUwsIDB4MzM5MGVmMjJVTCwKKyAgICAweDQ5NGVjNzg3VUwsIDB4MzhkMWMxZDlVTCwgMHhjYWEyZmU4Y1VMLCAweGQ0MGIzNjk4VUwsCisgICAgMHhmNTgxY2ZhNlVMLCAweDdhZGUyOGE1VUwsIDB4Yjc4ZTI2ZGFVTCwgMHhhZGJmYTQzZlVMLAorICAgIDB4M2E5ZGU0MmNVTCwgMHg3ODkyMGQ1MFVMLCAweDVmY2M5YjZhVUwsIDB4N2U0NjYyNTRVTCwKKyAgICAweDhkMTNjMmY2VUwsIDB4ZDhiOGU4OTBVTCwgMHgzOWY3NWUyZVVMLCAweGMzYWZmNTgyVUwsCisgICAgMHg1ZDgwYmU5ZlVMLCAweGQwOTM3YzY5VUwsIDB4ZDUyZGE5NmZVTCwgMHgyNTEyYjNjZlVMLAorICAgIDB4YWM5OTNiYzhVTCwgMHgxODdkYTcxMFVMLCAweDljNjM2ZWU4VUwsIDB4M2JiYjdiZGJVTCwKKyAgICAweDI2NzgwOWNkVUwsIDB4NTkxOGY0NmVVTCwgMHg5YWI3MDFlY1VMLCAweDRmOWFhODgzVUwsCisgICAgMHg5NTZlNjVlNlVMLCAweGZmZTY3ZWFhVUwsIDB4YmNjZjA4MjFVTCwgMHgxNWU4ZTZlZlVMLAorICAgIDB4ZTc5YmQ5YmFVTCwgMHg2ZjM2Y2U0YVVMLCAweDlmMDlkNGVhVUwsIDB4YjA3Y2Q2MjlVTCwKKyAgICAweGE0YjJhZjMxVUwsIDB4M2YyMzMxMmFVTCwgMHhhNTk0MzBjNlVMLCAweGEyNjZjMDM1VUwsCisgICAgMHg0ZWJjMzc3NFVMLCAweDgyY2FhNmZjVUwsIDB4OTBkMGIwZTBVTCwgMHhhN2Q4MTUzM1VMLAorICAgIDB4MDQ5ODRhZjFVTCwgMHhlY2RhZjc0MVVMLCAweGNkNTAwZTdmVUwsIDB4OTFmNjJmMTdVTCwKKyAgICAweDRkZDY4ZDc2VUwsIDB4ZWZiMDRkNDNVTCwgMHhhYTRkNTRjY1VMLCAweDk2MDRkZmU0VUwsCisgICAgMHhkMWI1ZTM5ZVVMLCAweDZhODgxYjRjVUwsIDB4MmMxZmI4YzFVTCwgMHg2NTUxN2Y0NlVMLAorICAgIDB4NWVlYTA0OWRVTCwgMHg4YzM1NWQwMVVMLCAweDg3NzQ3M2ZhVUwsIDB4MGI0MTJlZmJVTCwKKyAgICAweDY3MWQ1YWIzVUwsIDB4ZGJkMjUyOTJVTCwgMHgxMDU2MzNlOVVMLCAweGQ2NDcxMzZkVUwsCisgICAgMHhkNzYxOGM5YVVMLCAweGExMGM3YTM3VUwsIDB4ZjgxNDhlNTlVTCwgMHgxMzNjODllYlVMLAorICAgIDB4YTkyN2VlY2VVTCwgMHg2MWM5MzViN1VMLCAweDFjZTVlZGUxVUwsIDB4NDdiMTNjN2FVTCwKKyAgICAweGQyZGY1OTljVUwsIDB4ZjI3MzNmNTVVTCwgMHgxNGNlNzkxOFVMLCAweGM3MzdiZjczVUwsCisgICAgMHhmN2NkZWE1M1VMLCAweGZkYWE1YjVmVUwsIDB4M2Q2ZjE0ZGZVTCwgMHg0NGRiODY3OFVMLAorICAgIDB4YWZmMzgxY2FVTCwgMHg2OGM0M2ViOVVMLCAweDI0MzQyYzM4VUwsIDB4YTM0MDVmYzJVTCwKKyAgICAweDFkYzM3MjE2VUwsIDB4ZTIyNTBjYmNVTCwgMHgzYzQ5OGIyOFVMLCAweDBkOTU0MWZmVUwsCisgICAgMHhhODAxNzEzOVVMLCAweDBjYjNkZTA4VUwsIDB4YjRlNDljZDhVTCwgMHg1NmMxOTA2NFVMLAorICAgIDB4Y2I4NDYxN2JVTCwgMHgzMmI2NzBkNVVMLCAweDZjNWM3NDQ4VUwsIDB4Yjg1NzQyZDBVTCwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFRrczBbXSA9IHsKKzB4MDAwMDAwMDBVTCwgMHgwZTA5MGQwYlVMLCAweDFjMTIxYTE2VUwsIDB4MTIxYjE3MWRVTCwgMHgzODI0MzQyY1VMLCAweDM2MmQzOTI3VUwsIDB4MjQzNjJlM2FVTCwgMHgyYTNmMjMzMVVMLCAKKzB4NzA0ODY4NThVTCwgMHg3ZTQxNjU1M1VMLCAweDZjNWE3MjRlVUwsIDB4NjI1MzdmNDVVTCwgMHg0ODZjNWM3NFVMLCAweDQ2NjU1MTdmVUwsIDB4NTQ3ZTQ2NjJVTCwgMHg1YTc3NGI2OVVMLCAKKzB4ZTA5MGQwYjBVTCwgMHhlZTk5ZGRiYlVMLCAweGZjODJjYWE2VUwsIDB4ZjI4YmM3YWRVTCwgMHhkOGI0ZTQ5Y1VMLCAweGQ2YmRlOTk3VUwsIDB4YzRhNmZlOGFVTCwgMHhjYWFmZjM4MVVMLCAKKzB4OTBkOGI4ZThVTCwgMHg5ZWQxYjVlM1VMLCAweDhjY2FhMmZlVUwsIDB4ODJjM2FmZjVVTCwgMHhhOGZjOGNjNFVMLCAweGE2ZjU4MWNmVUwsIDB4YjRlZTk2ZDJVTCwgMHhiYWU3OWJkOVVMLCAKKzB4ZGIzYmJiN2JVTCwgMHhkNTMyYjY3MFVMLCAweGM3MjlhMTZkVUwsIDB4YzkyMGFjNjZVTCwgMHhlMzFmOGY1N1VMLCAweGVkMTY4MjVjVUwsIDB4ZmYwZDk1NDFVTCwgMHhmMTA0OTg0YVVMLCAKKzB4YWI3M2QzMjNVTCwgMHhhNTdhZGUyOFVMLCAweGI3NjFjOTM1VUwsIDB4Yjk2OGM0M2VVTCwgMHg5MzU3ZTcwZlVMLCAweDlkNWVlYTA0VUwsIDB4OGY0NWZkMTlVTCwgMHg4MTRjZjAxMlVMLCAKKzB4M2JhYjZiY2JVTCwgMHgzNWEyNjZjMFVMLCAweDI3Yjk3MWRkVUwsIDB4MjliMDdjZDZVTCwgMHgwMzhmNWZlN1VMLCAweDBkODY1MmVjVUwsIDB4MWY5ZDQ1ZjFVTCwgMHgxMTk0NDhmYVVMLCAKKzB4NGJlMzAzOTNVTCwgMHg0NWVhMGU5OFVMLCAweDU3ZjExOTg1VUwsIDB4NTlmODE0OGVVTCwgMHg3M2M3MzdiZlVMLCAweDdkY2UzYWI0VUwsIDB4NmZkNTJkYTlVTCwgMHg2MWRjMjBhMlVMLCAKKzB4YWQ3NjZkZjZVTCwgMHhhMzdmNjBmZFVMLCAweGIxNjQ3N2UwVUwsIDB4YmY2ZDdhZWJVTCwgMHg5NTUyNTlkYVVMLCAweDliNWI1NGQxVUwsIDB4ODk0MDQzY2NVTCwgMHg4NzQ5NGVjN1VMLCAKKzB4ZGQzZTA1YWVVTCwgMHhkMzM3MDhhNVVMLCAweGMxMmMxZmI4VUwsIDB4Y2YyNTEyYjNVTCwgMHhlNTFhMzE4MlVMLCAweGViMTMzYzg5VUwsIDB4ZjkwODJiOTRVTCwgMHhmNzAxMjY5ZlVMLCAKKzB4NGRlNmJkNDZVTCwgMHg0M2VmYjA0ZFVMLCAweDUxZjRhNzUwVUwsIDB4NWZmZGFhNWJVTCwgMHg3NWMyODk2YVVMLCAweDdiY2I4NDYxVUwsIDB4NjlkMDkzN2NVTCwgMHg2N2Q5OWU3N1VMLCAKKzB4M2RhZWQ1MWVVTCwgMHgzM2E3ZDgxNVVMLCAweDIxYmNjZjA4VUwsIDB4MmZiNWMyMDNVTCwgMHgwNThhZTEzMlVMLCAweDBiODNlYzM5VUwsIDB4MTk5OGZiMjRVTCwgMHgxNzkxZjYyZlVMLCAKKzB4NzY0ZGQ2OGRVTCwgMHg3ODQ0ZGI4NlVMLCAweDZhNWZjYzliVUwsIDB4NjQ1NmMxOTBVTCwgMHg0ZTY5ZTJhMVVMLCAweDQwNjBlZmFhVUwsIDB4NTI3YmY4YjdVTCwgMHg1YzcyZjViY1VMLCAKKzB4MDYwNWJlZDVVTCwgMHgwODBjYjNkZVVMLCAweDFhMTdhNGMzVUwsIDB4MTQxZWE5YzhVTCwgMHgzZTIxOGFmOVVMLCAweDMwMjg4N2YyVUwsIDB4MjIzMzkwZWZVTCwgMHgyYzNhOWRlNFVMLCAKKzB4OTZkZDA2M2RVTCwgMHg5OGQ0MGIzNlVMLCAweDhhY2YxYzJiVUwsIDB4ODRjNjExMjBVTCwgMHhhZWY5MzIxMVVMLCAweGEwZjAzZjFhVUwsIDB4YjJlYjI4MDdVTCwgMHhiY2UyMjUwY1VMLCAKKzB4ZTY5NTZlNjVVTCwgMHhlODljNjM2ZVVMLCAweGZhODc3NDczVUwsIDB4ZjQ4ZTc5NzhVTCwgMHhkZWIxNWE0OVVMLCAweGQwYjg1NzQyVUwsIDB4YzJhMzQwNWZVTCwgMHhjY2FhNGQ1NFVMLCAKKzB4NDFlY2RhZjdVTCwgMHg0ZmU1ZDdmY1VMLCAweDVkZmVjMGUxVUwsIDB4NTNmN2NkZWFVTCwgMHg3OWM4ZWVkYlVMLCAweDc3YzFlM2QwVUwsIDB4NjVkYWY0Y2RVTCwgMHg2YmQzZjljNlVMLCAKKzB4MzFhNGIyYWZVTCwgMHgzZmFkYmZhNFVMLCAweDJkYjZhOGI5VUwsIDB4MjNiZmE1YjJVTCwgMHgwOTgwODY4M1VMLCAweDA3ODk4Yjg4VUwsIDB4MTU5MjljOTVVTCwgMHgxYjliOTE5ZVVMLCAKKzB4YTE3YzBhNDdVTCwgMHhhZjc1MDc0Y1VMLCAweGJkNmUxMDUxVUwsIDB4YjM2NzFkNWFVTCwgMHg5OTU4M2U2YlVMLCAweDk3NTEzMzYwVUwsIDB4ODU0YTI0N2RVTCwgMHg4YjQzMjk3NlVMLCAKKzB4ZDEzNDYyMWZVTCwgMHhkZjNkNmYxNFVMLCAweGNkMjY3ODA5VUwsIDB4YzMyZjc1MDJVTCwgMHhlOTEwNTYzM1VMLCAweGU3MTk1YjM4VUwsIDB4ZjUwMjRjMjVVTCwgMHhmYjBiNDEyZVVMLCAKKzB4OWFkNzYxOGNVTCwgMHg5NGRlNmM4N1VMLCAweDg2YzU3YjlhVUwsIDB4ODhjYzc2OTFVTCwgMHhhMmYzNTVhMFVMLCAweGFjZmE1OGFiVUwsIDB4YmVlMTRmYjZVTCwgMHhiMGU4NDJiZFVMLCAKKzB4ZWE5ZjA5ZDRVTCwgMHhlNDk2MDRkZlVMLCAweGY2OGQxM2MyVUwsIDB4Zjg4NDFlYzlVTCwgMHhkMmJiM2RmOFVMLCAweGRjYjIzMGYzVUwsIDB4Y2VhOTI3ZWVVTCwgMHhjMGEwMmFlNVVMLCAKKzB4N2E0N2IxM2NVTCwgMHg3NDRlYmMzN1VMLCAweDY2NTVhYjJhVUwsIDB4Njg1Y2E2MjFVTCwgMHg0MjYzODUxMFVMLCAweDRjNmE4ODFiVUwsIDB4NWU3MTlmMDZVTCwgMHg1MDc4OTIwZFVMLCAKKzB4MGEwZmQ5NjRVTCwgMHgwNDA2ZDQ2ZlVMLCAweDE2MWRjMzcyVUwsIDB4MTgxNGNlNzlVTCwgMHgzMjJiZWQ0OFVMLCAweDNjMjJlMDQzVUwsIDB4MmUzOWY3NWVVTCwgMHgyMDMwZmE1NVVMLCAKKzB4ZWM5YWI3MDFVTCwgMHhlMjkzYmEwYVVMLCAweGYwODhhZDE3VUwsIDB4ZmU4MWEwMWNVTCwgMHhkNGJlODMyZFVMLCAweGRhYjc4ZTI2VUwsIDB4YzhhYzk5M2JVTCwgMHhjNmE1OTQzMFVMLCAKKzB4OWNkMmRmNTlVTCwgMHg5MmRiZDI1MlVMLCAweDgwYzBjNTRmVUwsIDB4OGVjOWM4NDRVTCwgMHhhNGY2ZWI3NVVMLCAweGFhZmZlNjdlVUwsIDB4YjhlNGYxNjNVTCwgMHhiNmVkZmM2OFVMLCAKKzB4MGMwYTY3YjFVTCwgMHgwMjAzNmFiYVVMLCAweDEwMTg3ZGE3VUwsIDB4MWUxMTcwYWNVTCwgMHgzNDJlNTM5ZFVMLCAweDNhMjc1ZTk2VUwsIDB4MjgzYzQ5OGJVTCwgMHgyNjM1NDQ4MFVMLCAKKzB4N2M0MjBmZTlVTCwgMHg3MjRiMDJlMlVMLCAweDYwNTAxNWZmVUwsIDB4NmU1OTE4ZjRVTCwgMHg0NDY2M2JjNVVMLCAweDRhNmYzNmNlVUwsIDB4NTg3NDIxZDNVTCwgMHg1NjdkMmNkOFVMLCAKKzB4MzdhMTBjN2FVTCwgMHgzOWE4MDE3MVVMLCAweDJiYjMxNjZjVUwsIDB4MjViYTFiNjdVTCwgMHgwZjg1Mzg1NlVMLCAweDAxOGMzNTVkVUwsIDB4MTM5NzIyNDBVTCwgMHgxZDllMmY0YlVMLCAKKzB4NDdlOTY0MjJVTCwgMHg0OWUwNjkyOVVMLCAweDViZmI3ZTM0VUwsIDB4NTVmMjczM2ZVTCwgMHg3ZmNkNTAwZVVMLCAweDcxYzQ1ZDA1VUwsIDB4NjNkZjRhMThVTCwgMHg2ZGQ2NDcxM1VMLCAKKzB4ZDczMWRjY2FVTCwgMHhkOTM4ZDFjMVVMLCAweGNiMjNjNmRjVUwsIDB4YzUyYWNiZDdVTCwgMHhlZjE1ZThlNlVMLCAweGUxMWNlNWVkVUwsIDB4ZjMwN2YyZjBVTCwgMHhmZDBlZmZmYlVMLCAKKzB4YTc3OWI0OTJVTCwgMHhhOTcwYjk5OVVMLCAweGJiNmJhZTg0VUwsIDB4YjU2MmEzOGZVTCwgMHg5ZjVkODBiZVVMLCAweDkxNTQ4ZGI1VUwsIDB4ODM0ZjlhYThVTCwgMHg4ZDQ2OTdhM1VMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBUa3MxW10gPSB7CisweDAwMDAwMDAwVUwsIDB4MGIwZTA5MGRVTCwgMHgxNjFjMTIxYVVMLCAweDFkMTIxYjE3VUwsIDB4MmMzODI0MzRVTCwgMHgyNzM2MmQzOVVMLCAweDNhMjQzNjJlVUwsIDB4MzEyYTNmMjNVTCwgCisweDU4NzA0ODY4VUwsIDB4NTM3ZTQxNjVVTCwgMHg0ZTZjNWE3MlVMLCAweDQ1NjI1MzdmVUwsIDB4NzQ0ODZjNWNVTCwgMHg3ZjQ2NjU1MVVMLCAweDYyNTQ3ZTQ2VUwsIDB4Njk1YTc3NGJVTCwgCisweGIwZTA5MGQwVUwsIDB4YmJlZTk5ZGRVTCwgMHhhNmZjODJjYVVMLCAweGFkZjI4YmM3VUwsIDB4OWNkOGI0ZTRVTCwgMHg5N2Q2YmRlOVVMLCAweDhhYzRhNmZlVUwsIDB4ODFjYWFmZjNVTCwgCisweGU4OTBkOGI4VUwsIDB4ZTM5ZWQxYjVVTCwgMHhmZThjY2FhMlVMLCAweGY1ODJjM2FmVUwsIDB4YzRhOGZjOGNVTCwgMHhjZmE2ZjU4MVVMLCAweGQyYjRlZTk2VUwsIDB4ZDliYWU3OWJVTCwgCisweDdiZGIzYmJiVUwsIDB4NzBkNTMyYjZVTCwgMHg2ZGM3MjlhMVVMLCAweDY2YzkyMGFjVUwsIDB4NTdlMzFmOGZVTCwgMHg1Y2VkMTY4MlVMLCAweDQxZmYwZDk1VUwsIDB4NGFmMTA0OThVTCwgCisweDIzYWI3M2QzVUwsIDB4MjhhNTdhZGVVTCwgMHgzNWI3NjFjOVVMLCAweDNlYjk2OGM0VUwsIDB4MGY5MzU3ZTdVTCwgMHgwNDlkNWVlYVVMLCAweDE5OGY0NWZkVUwsIDB4MTI4MTRjZjBVTCwgCisweGNiM2JhYjZiVUwsIDB4YzAzNWEyNjZVTCwgMHhkZDI3Yjk3MVVMLCAweGQ2MjliMDdjVUwsIDB4ZTcwMzhmNWZVTCwgMHhlYzBkODY1MlVMLCAweGYxMWY5ZDQ1VUwsIDB4ZmExMTk0NDhVTCwgCisweDkzNGJlMzAzVUwsIDB4OTg0NWVhMGVVTCwgMHg4NTU3ZjExOVVMLCAweDhlNTlmODE0VUwsIDB4YmY3M2M3MzdVTCwgMHhiNDdkY2UzYVVMLCAweGE5NmZkNTJkVUwsIDB4YTI2MWRjMjBVTCwgCisweGY2YWQ3NjZkVUwsIDB4ZmRhMzdmNjBVTCwgMHhlMGIxNjQ3N1VMLCAweGViYmY2ZDdhVUwsIDB4ZGE5NTUyNTlVTCwgMHhkMTliNWI1NFVMLCAweGNjODk0MDQzVUwsIDB4Yzc4NzQ5NGVVTCwgCisweGFlZGQzZTA1VUwsIDB4YTVkMzM3MDhVTCwgMHhiOGMxMmMxZlVMLCAweGIzY2YyNTEyVUwsIDB4ODJlNTFhMzFVTCwgMHg4OWViMTMzY1VMLCAweDk0ZjkwODJiVUwsIDB4OWZmNzAxMjZVTCwgCisweDQ2NGRlNmJkVUwsIDB4NGQ0M2VmYjBVTCwgMHg1MDUxZjRhN1VMLCAweDViNWZmZGFhVUwsIDB4NmE3NWMyODlVTCwgMHg2MTdiY2I4NFVMLCAweDdjNjlkMDkzVUwsIDB4Nzc2N2Q5OWVVTCwgCisweDFlM2RhZWQ1VUwsIDB4MTUzM2E3ZDhVTCwgMHgwODIxYmNjZlVMLCAweDAzMmZiNWMyVUwsIDB4MzIwNThhZTFVTCwgMHgzOTBiODNlY1VMLCAweDI0MTk5OGZiVUwsIDB4MmYxNzkxZjZVTCwgCisweDhkNzY0ZGQ2VUwsIDB4ODY3ODQ0ZGJVTCwgMHg5YjZhNWZjY1VMLCAweDkwNjQ1NmMxVUwsIDB4YTE0ZTY5ZTJVTCwgMHhhYTQwNjBlZlVMLCAweGI3NTI3YmY4VUwsIDB4YmM1YzcyZjVVTCwgCisweGQ1MDYwNWJlVUwsIDB4ZGUwODBjYjNVTCwgMHhjMzFhMTdhNFVMLCAweGM4MTQxZWE5VUwsIDB4ZjkzZTIxOGFVTCwgMHhmMjMwMjg4N1VMLCAweGVmMjIzMzkwVUwsIDB4ZTQyYzNhOWRVTCwgCisweDNkOTZkZDA2VUwsIDB4MzY5OGQ0MGJVTCwgMHgyYjhhY2YxY1VMLCAweDIwODRjNjExVUwsIDB4MTFhZWY5MzJVTCwgMHgxYWEwZjAzZlVMLCAweDA3YjJlYjI4VUwsIDB4MGNiY2UyMjVVTCwgCisweDY1ZTY5NTZlVUwsIDB4NmVlODljNjNVTCwgMHg3M2ZhODc3NFVMLCAweDc4ZjQ4ZTc5VUwsIDB4NDlkZWIxNWFVTCwgMHg0MmQwYjg1N1VMLCAweDVmYzJhMzQwVUwsIDB4NTRjY2FhNGRVTCwgCisweGY3NDFlY2RhVUwsIDB4ZmM0ZmU1ZDdVTCwgMHhlMTVkZmVjMFVMLCAweGVhNTNmN2NkVUwsIDB4ZGI3OWM4ZWVVTCwgMHhkMDc3YzFlM1VMLCAweGNkNjVkYWY0VUwsIDB4YzY2YmQzZjlVTCwgCisweGFmMzFhNGIyVUwsIDB4YTQzZmFkYmZVTCwgMHhiOTJkYjZhOFVMLCAweGIyMjNiZmE1VUwsIDB4ODMwOTgwODZVTCwgMHg4ODA3ODk4YlVMLCAweDk1MTU5MjljVUwsIDB4OWUxYjliOTFVTCwgCisweDQ3YTE3YzBhVUwsIDB4NGNhZjc1MDdVTCwgMHg1MWJkNmUxMFVMLCAweDVhYjM2NzFkVUwsIDB4NmI5OTU4M2VVTCwgMHg2MDk3NTEzM1VMLCAweDdkODU0YTI0VUwsIDB4NzY4YjQzMjlVTCwgCisweDFmZDEzNDYyVUwsIDB4MTRkZjNkNmZVTCwgMHgwOWNkMjY3OFVMLCAweDAyYzMyZjc1VUwsIDB4MzNlOTEwNTZVTCwgMHgzOGU3MTk1YlVMLCAweDI1ZjUwMjRjVUwsIDB4MmVmYjBiNDFVTCwgCisweDhjOWFkNzYxVUwsIDB4ODc5NGRlNmNVTCwgMHg5YTg2YzU3YlVMLCAweDkxODhjYzc2VUwsIDB4YTBhMmYzNTVVTCwgMHhhYmFjZmE1OFVMLCAweGI2YmVlMTRmVUwsIDB4YmRiMGU4NDJVTCwgCisweGQ0ZWE5ZjA5VUwsIDB4ZGZlNDk2MDRVTCwgMHhjMmY2OGQxM1VMLCAweGM5Zjg4NDFlVUwsIDB4ZjhkMmJiM2RVTCwgMHhmM2RjYjIzMFVMLCAweGVlY2VhOTI3VUwsIDB4ZTVjMGEwMmFVTCwgCisweDNjN2E0N2IxVUwsIDB4Mzc3NDRlYmNVTCwgMHgyYTY2NTVhYlVMLCAweDIxNjg1Y2E2VUwsIDB4MTA0MjYzODVVTCwgMHgxYjRjNmE4OFVMLCAweDA2NWU3MTlmVUwsIDB4MGQ1MDc4OTJVTCwgCisweDY0MGEwZmQ5VUwsIDB4NmYwNDA2ZDRVTCwgMHg3MjE2MWRjM1VMLCAweDc5MTgxNGNlVUwsIDB4NDgzMjJiZWRVTCwgMHg0MzNjMjJlMFVMLCAweDVlMmUzOWY3VUwsIDB4NTUyMDMwZmFVTCwgCisweDAxZWM5YWI3VUwsIDB4MGFlMjkzYmFVTCwgMHgxN2YwODhhZFVMLCAweDFjZmU4MWEwVUwsIDB4MmRkNGJlODNVTCwgMHgyNmRhYjc4ZVVMLCAweDNiYzhhYzk5VUwsIDB4MzBjNmE1OTRVTCwgCisweDU5OWNkMmRmVUwsIDB4NTI5MmRiZDJVTCwgMHg0ZjgwYzBjNVVMLCAweDQ0OGVjOWM4VUwsIDB4NzVhNGY2ZWJVTCwgMHg3ZWFhZmZlNlVMLCAweDYzYjhlNGYxVUwsIDB4NjhiNmVkZmNVTCwgCisweGIxMGMwYTY3VUwsIDB4YmEwMjAzNmFVTCwgMHhhNzEwMTg3ZFVMLCAweGFjMWUxMTcwVUwsIDB4OWQzNDJlNTNVTCwgMHg5NjNhMjc1ZVVMLCAweDhiMjgzYzQ5VUwsIDB4ODAyNjM1NDRVTCwgCisweGU5N2M0MjBmVUwsIDB4ZTI3MjRiMDJVTCwgMHhmZjYwNTAxNVVMLCAweGY0NmU1OTE4VUwsIDB4YzU0NDY2M2JVTCwgMHhjZTRhNmYzNlVMLCAweGQzNTg3NDIxVUwsIDB4ZDg1NjdkMmNVTCwgCisweDdhMzdhMTBjVUwsIDB4NzEzOWE4MDFVTCwgMHg2YzJiYjMxNlVMLCAweDY3MjViYTFiVUwsIDB4NTYwZjg1MzhVTCwgMHg1ZDAxOGMzNVVMLCAweDQwMTM5NzIyVUwsIDB4NGIxZDllMmZVTCwgCisweDIyNDdlOTY0VUwsIDB4Mjk0OWUwNjlVTCwgMHgzNDViZmI3ZVVMLCAweDNmNTVmMjczVUwsIDB4MGU3ZmNkNTBVTCwgMHgwNTcxYzQ1ZFVMLCAweDE4NjNkZjRhVUwsIDB4MTM2ZGQ2NDdVTCwgCisweGNhZDczMWRjVUwsIDB4YzFkOTM4ZDFVTCwgMHhkY2NiMjNjNlVMLCAweGQ3YzUyYWNiVUwsIDB4ZTZlZjE1ZThVTCwgMHhlZGUxMWNlNVVMLCAweGYwZjMwN2YyVUwsIDB4ZmJmZDBlZmZVTCwgCisweDkyYTc3OWI0VUwsIDB4OTlhOTcwYjlVTCwgMHg4NGJiNmJhZVVMLCAweDhmYjU2MmEzVUwsIDB4YmU5ZjVkODBVTCwgMHhiNTkxNTQ4ZFVMLCAweGE4ODM0ZjlhVUwsIDB4YTM4ZDQ2OTdVTAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgVGtzMltdID0geworMHgwMDAwMDAwMFVMLCAweDBkMGIwZTA5VUwsIDB4MWExNjFjMTJVTCwgMHgxNzFkMTIxYlVMLCAweDM0MmMzODI0VUwsIDB4MzkyNzM2MmRVTCwgMHgyZTNhMjQzNlVMLCAweDIzMzEyYTNmVUwsIAorMHg2ODU4NzA0OFVMLCAweDY1NTM3ZTQxVUwsIDB4NzI0ZTZjNWFVTCwgMHg3ZjQ1NjI1M1VMLCAweDVjNzQ0ODZjVUwsIDB4NTE3ZjQ2NjVVTCwgMHg0NjYyNTQ3ZVVMLCAweDRiNjk1YTc3VUwsIAorMHhkMGIwZTA5MFVMLCAweGRkYmJlZTk5VUwsIDB4Y2FhNmZjODJVTCwgMHhjN2FkZjI4YlVMLCAweGU0OWNkOGI0VUwsIDB4ZTk5N2Q2YmRVTCwgMHhmZThhYzRhNlVMLCAweGYzODFjYWFmVUwsIAorMHhiOGU4OTBkOFVMLCAweGI1ZTM5ZWQxVUwsIDB4YTJmZThjY2FVTCwgMHhhZmY1ODJjM1VMLCAweDhjYzRhOGZjVUwsIDB4ODFjZmE2ZjVVTCwgMHg5NmQyYjRlZVVMLCAweDliZDliYWU3VUwsIAorMHhiYjdiZGIzYlVMLCAweGI2NzBkNTMyVUwsIDB4YTE2ZGM3MjlVTCwgMHhhYzY2YzkyMFVMLCAweDhmNTdlMzFmVUwsIDB4ODI1Y2VkMTZVTCwgMHg5NTQxZmYwZFVMLCAweDk4NGFmMTA0VUwsIAorMHhkMzIzYWI3M1VMLCAweGRlMjhhNTdhVUwsIDB4YzkzNWI3NjFVTCwgMHhjNDNlYjk2OFVMLCAweGU3MGY5MzU3VUwsIDB4ZWEwNDlkNWVVTCwgMHhmZDE5OGY0NVVMLCAweGYwMTI4MTRjVUwsIAorMHg2YmNiM2JhYlVMLCAweDY2YzAzNWEyVUwsIDB4NzFkZDI3YjlVTCwgMHg3Y2Q2MjliMFVMLCAweDVmZTcwMzhmVUwsIDB4NTJlYzBkODZVTCwgMHg0NWYxMWY5ZFVMLCAweDQ4ZmExMTk0VUwsIAorMHgwMzkzNGJlM1VMLCAweDBlOTg0NWVhVUwsIDB4MTk4NTU3ZjFVTCwgMHgxNDhlNTlmOFVMLCAweDM3YmY3M2M3VUwsIDB4M2FiNDdkY2VVTCwgMHgyZGE5NmZkNVVMLCAweDIwYTI2MWRjVUwsIAorMHg2ZGY2YWQ3NlVMLCAweDYwZmRhMzdmVUwsIDB4NzdlMGIxNjRVTCwgMHg3YWViYmY2ZFVMLCAweDU5ZGE5NTUyVUwsIDB4NTRkMTliNWJVTCwgMHg0M2NjODk0MFVMLCAweDRlYzc4NzQ5VUwsIAorMHgwNWFlZGQzZVVMLCAweDA4YTVkMzM3VUwsIDB4MWZiOGMxMmNVTCwgMHgxMmIzY2YyNVVMLCAweDMxODJlNTFhVUwsIDB4M2M4OWViMTNVTCwgMHgyYjk0ZjkwOFVMLCAweDI2OWZmNzAxVUwsIAorMHhiZDQ2NGRlNlVMLCAweGIwNGQ0M2VmVUwsIDB4YTc1MDUxZjRVTCwgMHhhYTViNWZmZFVMLCAweDg5NmE3NWMyVUwsIDB4ODQ2MTdiY2JVTCwgMHg5MzdjNjlkMFVMLCAweDllNzc2N2Q5VUwsIAorMHhkNTFlM2RhZVVMLCAweGQ4MTUzM2E3VUwsIDB4Y2YwODIxYmNVTCwgMHhjMjAzMmZiNVVMLCAweGUxMzIwNThhVUwsIDB4ZWMzOTBiODNVTCwgMHhmYjI0MTk5OFVMLCAweGY2MmYxNzkxVUwsIAorMHhkNjhkNzY0ZFVMLCAweGRiODY3ODQ0VUwsIDB4Y2M5YjZhNWZVTCwgMHhjMTkwNjQ1NlVMLCAweGUyYTE0ZTY5VUwsIDB4ZWZhYTQwNjBVTCwgMHhmOGI3NTI3YlVMLCAweGY1YmM1YzcyVUwsIAorMHhiZWQ1MDYwNVVMLCAweGIzZGUwODBjVUwsIDB4YTRjMzFhMTdVTCwgMHhhOWM4MTQxZVVMLCAweDhhZjkzZTIxVUwsIDB4ODdmMjMwMjhVTCwgMHg5MGVmMjIzM1VMLCAweDlkZTQyYzNhVUwsIAorMHgwNjNkOTZkZFVMLCAweDBiMzY5OGQ0VUwsIDB4MWMyYjhhY2ZVTCwgMHgxMTIwODRjNlVMLCAweDMyMTFhZWY5VUwsIDB4M2YxYWEwZjBVTCwgMHgyODA3YjJlYlVMLCAweDI1MGNiY2UyVUwsIAorMHg2ZTY1ZTY5NVVMLCAweDYzNmVlODljVUwsIDB4NzQ3M2ZhODdVTCwgMHg3OTc4ZjQ4ZVVMLCAweDVhNDlkZWIxVUwsIDB4NTc0MmQwYjhVTCwgMHg0MDVmYzJhM1VMLCAweDRkNTRjY2FhVUwsIAorMHhkYWY3NDFlY1VMLCAweGQ3ZmM0ZmU1VUwsIDB4YzBlMTVkZmVVTCwgMHhjZGVhNTNmN1VMLCAweGVlZGI3OWM4VUwsIDB4ZTNkMDc3YzFVTCwgMHhmNGNkNjVkYVVMLCAweGY5YzY2YmQzVUwsIAorMHhiMmFmMzFhNFVMLCAweGJmYTQzZmFkVUwsIDB4YThiOTJkYjZVTCwgMHhhNWIyMjNiZlVMLCAweDg2ODMwOTgwVUwsIDB4OGI4ODA3ODlVTCwgMHg5Yzk1MTU5MlVMLCAweDkxOWUxYjliVUwsIAorMHgwYTQ3YTE3Y1VMLCAweDA3NGNhZjc1VUwsIDB4MTA1MWJkNmVVTCwgMHgxZDVhYjM2N1VMLCAweDNlNmI5OTU4VUwsIDB4MzM2MDk3NTFVTCwgMHgyNDdkODU0YVVMLCAweDI5NzY4YjQzVUwsIAorMHg2MjFmZDEzNFVMLCAweDZmMTRkZjNkVUwsIDB4NzgwOWNkMjZVTCwgMHg3NTAyYzMyZlVMLCAweDU2MzNlOTEwVUwsIDB4NWIzOGU3MTlVTCwgMHg0YzI1ZjUwMlVMLCAweDQxMmVmYjBiVUwsIAorMHg2MThjOWFkN1VMLCAweDZjODc5NGRlVUwsIDB4N2I5YTg2YzVVTCwgMHg3NjkxODhjY1VMLCAweDU1YTBhMmYzVUwsIDB4NThhYmFjZmFVTCwgMHg0ZmI2YmVlMVVMLCAweDQyYmRiMGU4VUwsIAorMHgwOWQ0ZWE5ZlVMLCAweDA0ZGZlNDk2VUwsIDB4MTNjMmY2OGRVTCwgMHgxZWM5Zjg4NFVMLCAweDNkZjhkMmJiVUwsIDB4MzBmM2RjYjJVTCwgMHgyN2VlY2VhOVVMLCAweDJhZTVjMGEwVUwsIAorMHhiMTNjN2E0N1VMLCAweGJjMzc3NDRlVUwsIDB4YWIyYTY2NTVVTCwgMHhhNjIxNjg1Y1VMLCAweDg1MTA0MjYzVUwsIDB4ODgxYjRjNmFVTCwgMHg5ZjA2NWU3MVVMLCAweDkyMGQ1MDc4VUwsIAorMHhkOTY0MGEwZlVMLCAweGQ0NmYwNDA2VUwsIDB4YzM3MjE2MWRVTCwgMHhjZTc5MTgxNFVMLCAweGVkNDgzMjJiVUwsIDB4ZTA0MzNjMjJVTCwgMHhmNzVlMmUzOVVMLCAweGZhNTUyMDMwVUwsIAorMHhiNzAxZWM5YVVMLCAweGJhMGFlMjkzVUwsIDB4YWQxN2YwODhVTCwgMHhhMDFjZmU4MVVMLCAweDgzMmRkNGJlVUwsIDB4OGUyNmRhYjdVTCwgMHg5OTNiYzhhY1VMLCAweDk0MzBjNmE1VUwsIAorMHhkZjU5OWNkMlVMLCAweGQyNTI5MmRiVUwsIDB4YzU0ZjgwYzBVTCwgMHhjODQ0OGVjOVVMLCAweGViNzVhNGY2VUwsIDB4ZTY3ZWFhZmZVTCwgMHhmMTYzYjhlNFVMLCAweGZjNjhiNmVkVUwsIAorMHg2N2IxMGMwYVVMLCAweDZhYmEwMjAzVUwsIDB4N2RhNzEwMThVTCwgMHg3MGFjMWUxMVVMLCAweDUzOWQzNDJlVUwsIDB4NWU5NjNhMjdVTCwgMHg0OThiMjgzY1VMLCAweDQ0ODAyNjM1VUwsIAorMHgwZmU5N2M0MlVMLCAweDAyZTI3MjRiVUwsIDB4MTVmZjYwNTBVTCwgMHgxOGY0NmU1OVVMLCAweDNiYzU0NDY2VUwsIDB4MzZjZTRhNmZVTCwgMHgyMWQzNTg3NFVMLCAweDJjZDg1NjdkVUwsIAorMHgwYzdhMzdhMVVMLCAweDAxNzEzOWE4VUwsIDB4MTY2YzJiYjNVTCwgMHgxYjY3MjViYVVMLCAweDM4NTYwZjg1VUwsIDB4MzU1ZDAxOGNVTCwgMHgyMjQwMTM5N1VMLCAweDJmNGIxZDllVUwsIAorMHg2NDIyNDdlOVVMLCAweDY5Mjk0OWUwVUwsIDB4N2UzNDViZmJVTCwgMHg3MzNmNTVmMlVMLCAweDUwMGU3ZmNkVUwsIDB4NWQwNTcxYzRVTCwgMHg0YTE4NjNkZlVMLCAweDQ3MTM2ZGQ2VUwsIAorMHhkY2NhZDczMVVMLCAweGQxYzFkOTM4VUwsIDB4YzZkY2NiMjNVTCwgMHhjYmQ3YzUyYVVMLCAweGU4ZTZlZjE1VUwsIDB4ZTVlZGUxMWNVTCwgMHhmMmYwZjMwN1VMLCAweGZmZmJmZDBlVUwsIAorMHhiNDkyYTc3OVVMLCAweGI5OTlhOTcwVUwsIDB4YWU4NGJiNmJVTCwgMHhhMzhmYjU2MlVMLCAweDgwYmU5ZjVkVUwsIDB4OGRiNTkxNTRVTCwgMHg5YWE4ODM0ZlVMLCAweDk3YTM4ZDQ2VUwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFRrczNbXSA9IHsKKzB4MDAwMDAwMDBVTCwgMHgwOTBkMGIwZVVMLCAweDEyMWExNjFjVUwsIDB4MWIxNzFkMTJVTCwgMHgyNDM0MmMzOFVMLCAweDJkMzkyNzM2VUwsIDB4MzYyZTNhMjRVTCwgMHgzZjIzMzEyYVVMLCAKKzB4NDg2ODU4NzBVTCwgMHg0MTY1NTM3ZVVMLCAweDVhNzI0ZTZjVUwsIDB4NTM3ZjQ1NjJVTCwgMHg2YzVjNzQ0OFVMLCAweDY1NTE3ZjQ2VUwsIDB4N2U0NjYyNTRVTCwgMHg3NzRiNjk1YVVMLCAKKzB4OTBkMGIwZTBVTCwgMHg5OWRkYmJlZVVMLCAweDgyY2FhNmZjVUwsIDB4OGJjN2FkZjJVTCwgMHhiNGU0OWNkOFVMLCAweGJkZTk5N2Q2VUwsIDB4YTZmZThhYzRVTCwgMHhhZmYzODFjYVVMLCAKKzB4ZDhiOGU4OTBVTCwgMHhkMWI1ZTM5ZVVMLCAweGNhYTJmZThjVUwsIDB4YzNhZmY1ODJVTCwgMHhmYzhjYzRhOFVMLCAweGY1ODFjZmE2VUwsIDB4ZWU5NmQyYjRVTCwgMHhlNzliZDliYVVMLCAKKzB4M2JiYjdiZGJVTCwgMHgzMmI2NzBkNVVMLCAweDI5YTE2ZGM3VUwsIDB4MjBhYzY2YzlVTCwgMHgxZjhmNTdlM1VMLCAweDE2ODI1Y2VkVUwsIDB4MGQ5NTQxZmZVTCwgMHgwNDk4NGFmMVVMLCAKKzB4NzNkMzIzYWJVTCwgMHg3YWRlMjhhNVVMLCAweDYxYzkzNWI3VUwsIDB4NjhjNDNlYjlVTCwgMHg1N2U3MGY5M1VMLCAweDVlZWEwNDlkVUwsIDB4NDVmZDE5OGZVTCwgMHg0Y2YwMTI4MVVMLCAKKzB4YWI2YmNiM2JVTCwgMHhhMjY2YzAzNVVMLCAweGI5NzFkZDI3VUwsIDB4YjA3Y2Q2MjlVTCwgMHg4ZjVmZTcwM1VMLCAweDg2NTJlYzBkVUwsIDB4OWQ0NWYxMWZVTCwgMHg5NDQ4ZmExMVVMLCAKKzB4ZTMwMzkzNGJVTCwgMHhlYTBlOTg0NVVMLCAweGYxMTk4NTU3VUwsIDB4ZjgxNDhlNTlVTCwgMHhjNzM3YmY3M1VMLCAweGNlM2FiNDdkVUwsIDB4ZDUyZGE5NmZVTCwgMHhkYzIwYTI2MVVMLCAKKzB4NzY2ZGY2YWRVTCwgMHg3ZjYwZmRhM1VMLCAweDY0NzdlMGIxVUwsIDB4NmQ3YWViYmZVTCwgMHg1MjU5ZGE5NVVMLCAweDViNTRkMTliVUwsIDB4NDA0M2NjODlVTCwgMHg0OTRlYzc4N1VMLCAKKzB4M2UwNWFlZGRVTCwgMHgzNzA4YTVkM1VMLCAweDJjMWZiOGMxVUwsIDB4MjUxMmIzY2ZVTCwgMHgxYTMxODJlNVVMLCAweDEzM2M4OWViVUwsIDB4MDgyYjk0ZjlVTCwgMHgwMTI2OWZmN1VMLCAKKzB4ZTZiZDQ2NGRVTCwgMHhlZmIwNGQ0M1VMLCAweGY0YTc1MDUxVUwsIDB4ZmRhYTViNWZVTCwgMHhjMjg5NmE3NVVMLCAweGNiODQ2MTdiVUwsIDB4ZDA5MzdjNjlVTCwgMHhkOTllNzc2N1VMLCAKKzB4YWVkNTFlM2RVTCwgMHhhN2Q4MTUzM1VMLCAweGJjY2YwODIxVUwsIDB4YjVjMjAzMmZVTCwgMHg4YWUxMzIwNVVMLCAweDgzZWMzOTBiVUwsIDB4OThmYjI0MTlVTCwgMHg5MWY2MmYxN1VMLCAKKzB4NGRkNjhkNzZVTCwgMHg0NGRiODY3OFVMLCAweDVmY2M5YjZhVUwsIDB4NTZjMTkwNjRVTCwgMHg2OWUyYTE0ZVVMLCAweDYwZWZhYTQwVUwsIDB4N2JmOGI3NTJVTCwgMHg3MmY1YmM1Y1VMLCAKKzB4MDViZWQ1MDZVTCwgMHgwY2IzZGUwOFVMLCAweDE3YTRjMzFhVUwsIDB4MWVhOWM4MTRVTCwgMHgyMThhZjkzZVVMLCAweDI4ODdmMjMwVUwsIDB4MzM5MGVmMjJVTCwgMHgzYTlkZTQyY1VMLCAKKzB4ZGQwNjNkOTZVTCwgMHhkNDBiMzY5OFVMLCAweGNmMWMyYjhhVUwsIDB4YzYxMTIwODRVTCwgMHhmOTMyMTFhZVVMLCAweGYwM2YxYWEwVUwsIDB4ZWIyODA3YjJVTCwgMHhlMjI1MGNiY1VMLCAKKzB4OTU2ZTY1ZTZVTCwgMHg5YzYzNmVlOFVMLCAweDg3NzQ3M2ZhVUwsIDB4OGU3OTc4ZjRVTCwgMHhiMTVhNDlkZVVMLCAweGI4NTc0MmQwVUwsIDB4YTM0MDVmYzJVTCwgMHhhYTRkNTRjY1VMLCAKKzB4ZWNkYWY3NDFVTCwgMHhlNWQ3ZmM0ZlVMLCAweGZlYzBlMTVkVUwsIDB4ZjdjZGVhNTNVTCwgMHhjOGVlZGI3OVVMLCAweGMxZTNkMDc3VUwsIDB4ZGFmNGNkNjVVTCwgMHhkM2Y5YzY2YlVMLCAKKzB4YTRiMmFmMzFVTCwgMHhhZGJmYTQzZlVMLCAweGI2YThiOTJkVUwsIDB4YmZhNWIyMjNVTCwgMHg4MDg2ODMwOVVMLCAweDg5OGI4ODA3VUwsIDB4OTI5Yzk1MTVVTCwgMHg5YjkxOWUxYlVMLCAKKzB4N2MwYTQ3YTFVTCwgMHg3NTA3NGNhZlVMLCAweDZlMTA1MWJkVUwsIDB4NjcxZDVhYjNVTCwgMHg1ODNlNmI5OVVMLCAweDUxMzM2MDk3VUwsIDB4NGEyNDdkODVVTCwgMHg0MzI5NzY4YlVMLCAKKzB4MzQ2MjFmZDFVTCwgMHgzZDZmMTRkZlVMLCAweDI2NzgwOWNkVUwsIDB4MmY3NTAyYzNVTCwgMHgxMDU2MzNlOVVMLCAweDE5NWIzOGU3VUwsIDB4MDI0YzI1ZjVVTCwgMHgwYjQxMmVmYlVMLCAKKzB4ZDc2MThjOWFVTCwgMHhkZTZjODc5NFVMLCAweGM1N2I5YTg2VUwsIDB4Y2M3NjkxODhVTCwgMHhmMzU1YTBhMlVMLCAweGZhNThhYmFjVUwsIDB4ZTE0ZmI2YmVVTCwgMHhlODQyYmRiMFVMLCAKKzB4OWYwOWQ0ZWFVTCwgMHg5NjA0ZGZlNFVMLCAweDhkMTNjMmY2VUwsIDB4ODQxZWM5ZjhVTCwgMHhiYjNkZjhkMlVMLCAweGIyMzBmM2RjVUwsIDB4YTkyN2VlY2VVTCwgMHhhMDJhZTVjMFVMLCAKKzB4NDdiMTNjN2FVTCwgMHg0ZWJjMzc3NFVMLCAweDU1YWIyYTY2VUwsIDB4NWNhNjIxNjhVTCwgMHg2Mzg1MTA0MlVMLCAweDZhODgxYjRjVUwsIDB4NzE5ZjA2NWVVTCwgMHg3ODkyMGQ1MFVMLCAKKzB4MGZkOTY0MGFVTCwgMHgwNmQ0NmYwNFVMLCAweDFkYzM3MjE2VUwsIDB4MTRjZTc5MThVTCwgMHgyYmVkNDgzMlVMLCAweDIyZTA0MzNjVUwsIDB4MzlmNzVlMmVVTCwgMHgzMGZhNTUyMFVMLCAKKzB4OWFiNzAxZWNVTCwgMHg5M2JhMGFlMlVMLCAweDg4YWQxN2YwVUwsIDB4ODFhMDFjZmVVTCwgMHhiZTgzMmRkNFVMLCAweGI3OGUyNmRhVUwsIDB4YWM5OTNiYzhVTCwgMHhhNTk0MzBjNlVMLCAKKzB4ZDJkZjU5OWNVTCwgMHhkYmQyNTI5MlVMLCAweGMwYzU0ZjgwVUwsIDB4YzljODQ0OGVVTCwgMHhmNmViNzVhNFVMLCAweGZmZTY3ZWFhVUwsIDB4ZTRmMTYzYjhVTCwgMHhlZGZjNjhiNlVMLCAKKzB4MGE2N2IxMGNVTCwgMHgwMzZhYmEwMlVMLCAweDE4N2RhNzEwVUwsIDB4MTE3MGFjMWVVTCwgMHgyZTUzOWQzNFVMLCAweDI3NWU5NjNhVUwsIDB4M2M0OThiMjhVTCwgMHgzNTQ0ODAyNlVMLCAKKzB4NDIwZmU5N2NVTCwgMHg0YjAyZTI3MlVMLCAweDUwMTVmZjYwVUwsIDB4NTkxOGY0NmVVTCwgMHg2NjNiYzU0NFVMLCAweDZmMzZjZTRhVUwsIDB4NzQyMWQzNThVTCwgMHg3ZDJjZDg1NlVMLCAKKzB4YTEwYzdhMzdVTCwgMHhhODAxNzEzOVVMLCAweGIzMTY2YzJiVUwsIDB4YmExYjY3MjVVTCwgMHg4NTM4NTYwZlVMLCAweDhjMzU1ZDAxVUwsIDB4OTcyMjQwMTNVTCwgMHg5ZTJmNGIxZFVMLCAKKzB4ZTk2NDIyNDdVTCwgMHhlMDY5Mjk0OVVMLCAweGZiN2UzNDViVUwsIDB4ZjI3MzNmNTVVTCwgMHhjZDUwMGU3ZlVMLCAweGM0NWQwNTcxVUwsIDB4ZGY0YTE4NjNVTCwgMHhkNjQ3MTM2ZFVMLCAKKzB4MzFkY2NhZDdVTCwgMHgzOGQxYzFkOVVMLCAweDIzYzZkY2NiVUwsIDB4MmFjYmQ3YzVVTCwgMHgxNWU4ZTZlZlVMLCAweDFjZTVlZGUxVUwsIDB4MDdmMmYwZjNVTCwgMHgwZWZmZmJmZFVMLCAKKzB4NzliNDkyYTdVTCwgMHg3MGI5OTlhOVVMLCAweDZiYWU4NGJiVUwsIDB4NjJhMzhmYjVVTCwgMHg1ZDgwYmU5ZlVMLCAweDU0OGRiNTkxVUwsIDB4NGY5YWE4ODNVTCwgMHg0Njk3YTM4ZFVMCit9OworCisjZW5kaWYgLyogRU5DUllQVF9PTkxZICovCisKKyNlbmRpZiAvKiBTTUFMTCBDT0RFICovCisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIHJjb25bXSA9IHsKKyAgICAweDAxMDAwMDAwVUwsIDB4MDIwMDAwMDBVTCwgMHgwNDAwMDAwMFVMLCAweDA4MDAwMDAwVUwsCisgICAgMHgxMDAwMDAwMFVMLCAweDIwMDAwMDAwVUwsIDB4NDAwMDAwMDBVTCwgMHg4MDAwMDAwMFVMLAorICAgIDB4MUIwMDAwMDBVTCwgMHgzNjAwMDAwMFVMLCAvKiBmb3IgMTI4LWJpdCBibG9ja3MsIFJpam5kYWVsIG5ldmVyIHVzZXMgbW9yZSB0aGFuIDEwIHJjb24gdmFsdWVzICovCit9OworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9hZXMvYWVzX3RhYi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDQvMDIgMTM6MTk6MDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvYW51YmlzLmMgYi9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9hbnViaXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTA3MjJjCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvYW51YmlzLmMKQEAgLTAsMCArMSwxNTU4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKioKKyAgQGZpbGUgYW51YmlzLmMKKyAgQW51YmlzIGltcGxlbWVudGF0aW9uIGRlcml2ZWQgZnJvbSBwdWJsaWMgZG9tYWluIHNvdXJjZQorICBBdXRob3JzOiBQYXVsbyBTLkwuTS4gQmFycmV0byBhbmQgVmluY2VudCBSaWptZW4uCisqLworCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIEFOVUJJUworCitjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIGFudWJpc19kZXNjID0geworICAgImFudWJpcyIsCisgICAxOSwKKyAgIDE2LCA0MCwgMTYsIDEyLAorICAgJmFudWJpc19zZXR1cCwKKyAgICZhbnViaXNfZWNiX2VuY3J5cHQsCisgICAmYW51YmlzX2VjYl9kZWNyeXB0LAorICAgJmFudWJpc190ZXN0LAorICAgJmFudWJpc19kb25lLAorICAgJmFudWJpc19rZXlzaXplLAorICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfTsKKworI2RlZmluZSBNSU5fTiAgICAgICAgICAgNCAKKyNkZWZpbmUgTUFYX04gICAgICAgICAgIDEwIAorI2RlZmluZSBNSU5fUk9VTkRTICAgICAgKDggKyBNSU5fTikgCisjZGVmaW5lIE1BWF9ST1VORFMgICAgICAoOCArIE1BWF9OKSAKKyNkZWZpbmUgTUlOX0tFWVNJWkVCICAgICg0Kk1JTl9OKSAKKyNkZWZpbmUgTUFYX0tFWVNJWkVCICAgICg0Kk1BWF9OKSAKKyNkZWZpbmUgQkxPQ0tTSVpFICAgICAgIDEyOCAKKyNkZWZpbmUgQkxPQ0tTSVpFQiAgICAgIChCTE9DS1NJWkUvOCkgCisKKworLyoKKyAqIFRob3VnaCBBbnViaXMgaXMgZW5kaWFubmVzcy1uZXV0cmFsLCB0aGUgZW5jcnlwdGlvbiB0YWJsZXMgYXJlIGxpc3RlZAorICogaW4gQklHLUVORElBTiBmb3JtYXQsIHdoaWNoIGlzIGFkb3B0ZWQgdGhyb3VnaG91dCB0aGlzIGltcGxlbWVudGF0aW9uCisgKiAoYnV0IGxpdHRsZS1lbmRpYW4gbm90YXRpb24gd291bGQgYmUgZXF1YWxseSBzdWl0YWJsZSBpZiBjb25zaXN0ZW50bHkKKyAqIGVtcGxveWVkKS4KKyAqLworI2lmIGRlZmluZWQoQU5VQklTX1RXRUFLKQorCitzdGF0aWMgY29uc3QgdWxvbmczMiBUMFsyNTZdID0geworICAgIDB4YmE2OWQyYmJVLCAweDU0YTg0ZGU1VSwgMHgyZjVlYmNlMlUsIDB4NzRlOGNkMjVVLAorICAgIDB4NTNhNjUxZjdVLCAweGQzYmI2YmQwVSwgMHhkMmI5NmZkNlUsIDB4NGQ5YTI5YjNVLAorICAgIDB4NTBhMDVkZmRVLCAweGFjNDU4YWNmVSwgMHg4ZDA3MGUwOVUsIDB4YmY2M2M2YTVVLAorICAgIDB4NzBlMGRkM2RVLCAweDUyYTQ1NWYxVSwgMHg5YTI5NTI3YlUsIDB4NGM5ODJkYjVVLAorICAgIDB4ZWFjOThmNDZVLCAweGQ1Yjc3M2M0VSwgMHg5NzMzNjY1NVUsIDB4ZDFiZjYzZGNVLAorICAgIDB4MzM2NmNjYWFVLCAweDUxYTI1OWZiVSwgMHg1YmI2NzFjN1UsIDB4YTY1MWEyZjNVLAorICAgIDB4ZGVhMTVmZmVVLCAweDQ4OTAzZGFkVSwgMHhhODRkOWFkN1UsIDB4OTkyZjVlNzFVLAorICAgIDB4ZGJhYjRiZTBVLCAweDMyNjRjOGFjVSwgMHhiNzczZTY5NVUsIDB4ZmNlNWQ3MzJVLAorICAgIDB4ZTNkYmFiNzBVLCAweDllMjE0MjYzVSwgMHg5MTNmN2U0MVUsIDB4OWIyYjU2N2RVLAorICAgIDB4ZTJkOWFmNzZVLCAweGJiNmJkNmJkVSwgMHg0MTgyMTk5YlUsIDB4NmVkY2E1NzlVLAorICAgIDB4YTU1N2FlZjlVLCAweGNiOGIwYjgwVSwgMHg2YmQ2YjE2N1UsIDB4OTUzNzZlNTlVLAorICAgIDB4YTE1ZmJlZTFVLCAweGYzZmJlYjEwVSwgMHhiMTdmZmU4MVUsIDB4MDIwNDA4MGNVLAorICAgIDB4Y2M4NTE3OTJVLCAweGM0OTUzN2EyVSwgMHgxZDNhNzQ0ZVUsIDB4MTQyODUwNzhVLAorICAgIDB4YzM5YjJiYjBVLCAweDYzYzY5MTU3VSwgMHhkYWE5NGZlNlUsIDB4NWRiYTY5ZDNVLAorICAgIDB4NWZiZTYxZGZVLCAweGRjYTU1N2YyVSwgMHg3ZGZhZTkxM1UsIDB4Y2Q4NzEzOTRVLAorICAgIDB4N2ZmZWUxMWZVLCAweDVhYjQ3NWMxVSwgMHg2Y2Q4YWQ3NVUsIDB4NWNiODZkZDVVLAorICAgIDB4ZjdmM2ZiMDhVLCAweDI2NGM5OGQ0VSwgMHhmZmUzZGIzOFUsIDB4ZWRjNzkzNTRVLAorICAgIDB4ZThjZDg3NGFVLCAweDlkMjc0ZTY5VSwgMHg2ZmRlYTE3ZlUsIDB4OGUwMTAyMDNVLAorICAgIDB4MTkzMjY0NTZVLCAweGEwNWRiYWU3VSwgMHhmMGZkZTcxYVUsIDB4ODkwZjFlMTFVLAorICAgIDB4MGYxZTNjMjJVLCAweDA3MGUxYzEyVSwgMHhhZjQzODZjNVUsIDB4ZmJlYmNiMjBVLAorICAgIDB4MDgxMDIwMzBVLCAweDE1MmE1NDdlVSwgMHgwZDFhMzQyZVUsIDB4MDQwODEwMThVLAorICAgIDB4MDEwMjA0MDZVLCAweDY0Yzg4ZDQ1VSwgMHhkZmEzNWJmOFUsIDB4NzZlY2M1MjlVLAorICAgIDB4NzlmMmY5MGJVLCAweGRkYTc1M2Y0VSwgMHgzZDdhZjQ4ZVUsIDB4MTYyYzU4NzRVLAorICAgIDB4M2Y3ZWZjODJVLCAweDM3NmVkY2IyVSwgMHg2ZGRhYTk3M1UsIDB4Mzg3MGUwOTBVLAorICAgIDB4Yjk2ZmRlYjFVLCAweDczZTZkMTM3VSwgMHhlOWNmODM0Y1UsIDB4MzU2YWQ0YmVVLAorICAgIDB4NTVhYTQ5ZTNVLCAweDcxZTJkOTNiVSwgMHg3YmY2ZjEwN1UsIDB4OGMwNTBhMGZVLAorICAgIDB4NzJlNGQ1MzFVLCAweDg4MGQxYTE3VSwgMHhmNmYxZmYwZVUsIDB4MmE1NGE4ZmNVLAorICAgIDB4M2U3Y2Y4ODRVLCAweDVlYmM2NWQ5VSwgMHgyNzRlOWNkMlUsIDB4NDY4YzA1ODlVLAorICAgIDB4MGMxODMwMjhVLCAweDY1Y2E4OTQzVSwgMHg2OGQwYmQ2ZFUsIDB4NjFjMjk5NWJVLAorICAgIDB4MDMwNjBjMGFVLCAweGMxOWYyM2JjVSwgMHg1N2FlNDFlZlUsIDB4ZDZiMTdmY2VVLAorICAgIDB4ZDlhZjQzZWNVLCAweDU4YjA3ZGNkVSwgMHhkOGFkNDdlYVUsIDB4NjZjYzg1NDlVLAorICAgIDB4ZDdiMzdiYzhVLCAweDNhNzRlODljVSwgMHhjODhkMDc4YVUsIDB4M2M3OGYwODhVLAorICAgIDB4ZmFlOWNmMjZVLCAweDk2MzE2MjUzVSwgMHhhNzUzYTZmNVUsIDB4OTgyZDVhNzdVLAorICAgIDB4ZWNjNTk3NTJVLCAweGI4NmRkYWI3VSwgMHhjNzkzM2JhOFUsIDB4YWU0MTgyYzNVLAorICAgIDB4NjlkMmI5NmJVLCAweDRiOTYzMWE3VSwgMHhhYjRiOTZkZFUsIDB4YTk0ZjllZDFVLAorICAgIDB4NjdjZTgxNGZVLCAweDBhMTQyODNjVSwgMHg0NzhlMDE4ZlUsIDB4ZjJmOWVmMTZVLAorICAgIDB4YjU3N2VlOTlVLCAweDIyNDQ4OGNjVSwgMHhlNWQ3YjM2NFUsIDB4ZWVjMTlmNWVVLAorICAgIDB4YmU2MWMyYTNVLCAweDJiNTZhY2ZhVSwgMHg4MTFmM2UyMVUsIDB4MTIyNDQ4NmNVLAorICAgIDB4ODMxYjM2MmRVLCAweDFiMzY2YzVhVSwgMHgwZTFjMzgyNFUsIDB4MjM0NjhjY2FVLAorICAgIDB4ZjVmN2YzMDRVLCAweDQ1OGEwOTgzVSwgMHgyMTQyODRjNlUsIDB4Y2U4MTFmOWVVLAorICAgIDB4NDk5MjM5YWJVLCAweDJjNThiMGU4VSwgMHhmOWVmYzMyY1UsIDB4ZTZkMWJmNmVVLAorICAgIDB4YjY3MWUyOTNVLCAweDI4NTBhMGYwVSwgMHgxNzJlNWM3MlUsIDB4ODIxOTMyMmJVLAorICAgIDB4MWEzNDY4NWNVLCAweDhiMGIxNjFkVSwgMHhmZWUxZGYzZVUsIDB4OGEwOTEyMWJVLAorICAgIDB4MDkxMjI0MzZVLCAweGM5OGYwMzhjVSwgMHg4NzEzMjYzNVUsIDB4NGU5YzI1YjlVLAorICAgIDB4ZTFkZmEzN2NVLCAweDJlNWNiOGU0VSwgMHhlNGQ1Yjc2MlUsIDB4ZTBkZGE3N2FVLAorICAgIDB4ZWJjYjhiNDBVLCAweDkwM2Q3YTQ3VSwgMHhhNDU1YWFmZlUsIDB4MWUzYzc4NDRVLAorICAgIDB4ODUxNzJlMzlVLCAweDYwYzA5ZDVkVSwgMHgwMDAwMDAwMFUsIDB4MjU0YTk0ZGVVLAorICAgIDB4ZjRmNWY3MDJVLCAweGYxZmZlMzFjVSwgMHg5NDM1NmE1ZlUsIDB4MGIxNjJjM2FVLAorICAgIDB4ZTdkM2JiNjhVLCAweDc1ZWFjOTIzVSwgMHhlZmMzOWI1OFUsIDB4MzQ2OGQwYjhVLAorICAgIDB4MzE2MmM0YTZVLCAweGQ0YjU3N2MyVSwgMHhkMGJkNjdkYVUsIDB4ODYxMTIyMzNVLAorICAgIDB4N2VmY2U1MTlVLCAweGFkNDc4ZWM5VSwgMHhmZGU3ZDMzNFUsIDB4Mjk1MmE0ZjZVLAorICAgIDB4MzA2MGMwYTBVLCAweDNiNzZlYzlhVSwgMHg5ZjIzNDY2NVUsIDB4ZjhlZGM3MmFVLAorICAgIDB4YzY5MTNmYWVVLCAweDEzMjY0YzZhVSwgMHgwNjBjMTgxNFUsIDB4MDUwYTE0MWVVLAorICAgIDB4YzU5NzMzYTRVLCAweDExMjI0NDY2VSwgMHg3N2VlYzEyZlUsIDB4N2NmOGVkMTVVLAorICAgIDB4N2FmNGY1MDFVLCAweDc4ZjBmZDBkVSwgMHgzNjZjZDhiNFUsIDB4MWMzODcwNDhVLAorICAgIDB4Mzk3MmU0OTZVLCAweDU5YjI3OWNiVSwgMHgxODMwNjA1MFUsIDB4NTZhYzQ1ZTlVLAorICAgIDB4YjM3YmY2OGRVLCAweGIwN2RmYTg3VSwgMHgyNDQ4OTBkOFUsIDB4MjA0MDgwYzBVLAorICAgIDB4YjI3OWYyOGJVLCAweDkyMzk3MjRiVSwgMHhhMzViYjZlZFUsIDB4YzA5ZDI3YmFVLAorICAgIDB4NDQ4ODBkODVVLCAweDYyYzQ5NTUxVSwgMHgxMDIwNDA2MFUsIDB4YjQ3NWVhOWZVLAorICAgIDB4ODQxNTJhM2ZVLCAweDQzODYxMTk3VSwgMHg5MzNiNzY0ZFUsIDB4YzI5OTJmYjZVLAorICAgIDB4NGE5NDM1YTFVLCAweGJkNjdjZWE5VSwgMHg4ZjAzMDYwNVUsIDB4MmQ1YWI0ZWVVLAorICAgIDB4YmM2NWNhYWZVLCAweDljMjU0YTZmVSwgMHg2YWQ0YjU2MVUsIDB4NDA4MDFkOWRVLAorICAgIDB4Y2Y4MzFiOThVLCAweGEyNTliMmViVSwgMHg4MDFkM2EyN1UsIDB4NGY5ZTIxYmZVLAorICAgIDB4MWYzZTdjNDJVLCAweGNhODkwZjg2VSwgMHhhYTQ5OTJkYlUsIDB4NDI4NDE1OTFVLAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgVDFbMjU2XSA9IHsKKyAgICAweDY5YmFiYmQyVSwgMHhhODU0ZTU0ZFUsIDB4NWUyZmUyYmNVLCAweGU4NzQyNWNkVSwKKyAgICAweGE2NTNmNzUxVSwgMHhiYmQzZDA2YlUsIDB4YjlkMmQ2NmZVLCAweDlhNGRiMzI5VSwKKyAgICAweGEwNTBmZDVkVSwgMHg0NWFjY2Y4YVUsIDB4MDc4ZDA5MGVVLCAweDYzYmZhNWM2VSwKKyAgICAweGUwNzAzZGRkVSwgMHhhNDUyZjE1NVUsIDB4Mjk5YTdiNTJVLCAweDk4NGNiNTJkVSwKKyAgICAweGM5ZWE0NjhmVSwgMHhiN2Q1YzQ3M1UsIDB4MzM5NzU1NjZVLCAweGJmZDFkYzYzVSwKKyAgICAweDY2MzNhYWNjVSwgMHhhMjUxZmI1OVUsIDB4YjY1YmM3NzFVLCAweDUxYTZmM2EyVSwKKyAgICAweGExZGVmZTVmVSwgMHg5MDQ4YWQzZFUsIDB4NGRhOGQ3OWFVLCAweDJmOTk3MTVlVSwKKyAgICAweGFiZGJlMDRiVSwgMHg2NDMyYWNjOFUsIDB4NzNiNzk1ZTZVLCAweGU1ZmMzMmQ3VSwKKyAgICAweGRiZTM3MGFiVSwgMHgyMTllNjM0MlUsIDB4M2Y5MTQxN2VVLCAweDJiOWI3ZDU2VSwKKyAgICAweGQ5ZTI3NmFmVSwgMHg2YmJiYmRkNlUsIDB4ODI0MTliMTlVLCAweGRjNmU3OWE1VSwKKyAgICAweDU3YTVmOWFlVSwgMHg4YmNiODAwYlUsIDB4ZDY2YjY3YjFVLCAweDM3OTU1OTZlVSwKKyAgICAweDVmYTFlMWJlVSwgMHhmYmYzMTBlYlUsIDB4N2ZiMTgxZmVVLCAweDA0MDIwYzA4VSwKKyAgICAweDg1Y2M5MjE3VSwgMHg5NWM0YTIzN1UsIDB4M2ExZDRlNzRVLCAweDI4MTQ3ODUwVSwKKyAgICAweDliYzNiMDJiVSwgMHhjNjYzNTc5MVUsIDB4YTlkYWU2NGZVLCAweGJhNWRkMzY5VSwKKyAgICAweGJlNWZkZjYxVSwgMHhhNWRjZjI1N1UsIDB4ZmE3ZDEzZTlVLCAweDg3Y2Q5NDEzVSwKKyAgICAweGZlN2YxZmUxVSwgMHhiNDVhYzE3NVUsIDB4ZDg2Yzc1YWRVLCAweGI4NWNkNTZkVSwKKyAgICAweGYzZjcwOGZiVSwgMHg0YzI2ZDQ5OFUsIDB4ZTNmZjM4ZGJVLCAweGM3ZWQ1NDkzVSwKKyAgICAweGNkZTg0YTg3VSwgMHgyNzlkNjk0ZVUsIDB4ZGU2ZjdmYTFVLCAweDAxOGUwMzAyVSwKKyAgICAweDMyMTk1NjY0VSwgMHg1ZGEwZTdiYVUsIDB4ZmRmMDFhZTdVLCAweDBmODkxMTFlVSwKKyAgICAweDFlMGYyMjNjVSwgMHgwZTA3MTIxY1UsIDB4NDNhZmM1ODZVLCAweGViZmIyMGNiVSwKKyAgICAweDEwMDgzMDIwVSwgMHgyYTE1N2U1NFUsIDB4MWEwZDJlMzRVLCAweDA4MDQxODEwVSwKKyAgICAweDAyMDEwNjA0VSwgMHhjODY0NDU4ZFUsIDB4YTNkZmY4NWJVLCAweGVjNzYyOWM1VSwKKyAgICAweGYyNzkwYmY5VSwgMHhhN2RkZjQ1M1UsIDB4N2EzZDhlZjRVLCAweDJjMTY3NDU4VSwKKyAgICAweDdlM2Y4MmZjVSwgMHg2ZTM3YjJkY1UsIDB4ZGE2ZDczYTlVLCAweDcwMzg5MGUwVSwKKyAgICAweDZmYjliMWRlVSwgMHhlNjczMzdkMVUsIDB4Y2ZlOTRjODNVLCAweDZhMzViZWQ0VSwKKyAgICAweGFhNTVlMzQ5VSwgMHhlMjcxM2JkOVUsIDB4ZjY3YjA3ZjFVLCAweDA1OGMwZjBhVSwKKyAgICAweGU0NzIzMWQ1VSwgMHgwZDg4MTcxYVUsIDB4ZjFmNjBlZmZVLCAweDU0MmFmY2E4VSwKKyAgICAweDdjM2U4NGY4VSwgMHhiYzVlZDk2NVUsIDB4NGUyN2QyOWNVLCAweDhjNDY4OTA1VSwKKyAgICAweDE4MGMyODMwVSwgMHhjYTY1NDM4OVUsIDB4ZDA2ODZkYmRVLCAweGMyNjE1Yjk5VSwKKyAgICAweDA2MDMwYTBjVSwgMHg5ZmMxYmMyM1UsIDB4YWU1N2VmNDFVLCAweGIxZDZjZTdmVSwKKyAgICAweGFmZDllYzQzVSwgMHhiMDU4Y2Q3ZFUsIDB4YWRkOGVhNDdVLCAweGNjNjY0OTg1VSwKKyAgICAweGIzZDdjODdiVSwgMHg3NDNhOWNlOFUsIDB4OGRjODhhMDdVLCAweDc4M2M4OGYwVSwKKyAgICAweGU5ZmEyNmNmVSwgMHgzMTk2NTM2MlUsIDB4NTNhN2Y1YTZVLCAweDJkOTg3NzVhVSwKKyAgICAweGM1ZWM1Mjk3VSwgMHg2ZGI4YjdkYVUsIDB4OTNjN2E4M2JVLCAweDQxYWVjMzgyVSwKKyAgICAweGQyNjk2YmI5VSwgMHg5NjRiYTczMVUsIDB4NGJhYmRkOTZVLCAweDRmYTlkMTllVSwKKyAgICAweGNlNjc0ZjgxVSwgMHgxNDBhM2MyOFUsIDB4OGU0NzhmMDFVLCAweGY5ZjIxNmVmVSwKKyAgICAweDc3YjU5OWVlVSwgMHg0NDIyY2M4OFUsIDB4ZDdlNTY0YjNVLCAweGMxZWU1ZTlmVSwKKyAgICAweDYxYmVhM2MyVSwgMHg1NjJiZmFhY1UsIDB4MWY4MTIxM2VVLCAweDI0MTI2YzQ4VSwKKyAgICAweDFiODMyZDM2VSwgMHgzNjFiNWE2Y1UsIDB4MWMwZTI0MzhVLCAweDQ2MjNjYThjVSwKKyAgICAweGY3ZjUwNGYzVSwgMHg4YTQ1ODMwOVUsIDB4NDIyMWM2ODRVLCAweDgxY2U5ZTFmVSwKKyAgICAweDkyNDlhYjM5VSwgMHg1ODJjZThiMFUsIDB4ZWZmOTJjYzNVLCAweGQxZTY2ZWJmVSwKKyAgICAweDcxYjY5M2UyVSwgMHg1MDI4ZjBhMFUsIDB4MmUxNzcyNWNVLCAweDE5ODIyYjMyVSwKKyAgICAweDM0MWE1YzY4VSwgMHgwYjhiMWQxNlUsIDB4ZTFmZTNlZGZVLCAweDA5OGExYjEyVSwKKyAgICAweDEyMDkzNjI0VSwgMHg4ZmM5OGMwM1UsIDB4MTM4NzM1MjZVLCAweDljNGViOTI1VSwKKyAgICAweGRmZTE3Y2EzVSwgMHg1YzJlZTRiOFUsIDB4ZDVlNDYyYjdVLCAweGRkZTA3YWE3VSwKKyAgICAweGNiZWI0MDhiVSwgMHgzZDkwNDc3YVUsIDB4NTVhNGZmYWFVLCAweDNjMWU0NDc4VSwKKyAgICAweDE3ODUzOTJlVSwgMHhjMDYwNWQ5ZFUsIDB4MDAwMDAwMDBVLCAweDRhMjVkZTk0VSwKKyAgICAweGY1ZjQwMmY3VSwgMHhmZmYxMWNlM1UsIDB4MzU5NDVmNmFVLCAweDE2MGIzYTJjVSwKKyAgICAweGQzZTc2OGJiVSwgMHhlYTc1MjNjOVUsIDB4YzNlZjU4OWJVLCAweDY4MzRiOGQwVSwKKyAgICAweDYyMzFhNmM0VSwgMHhiNWQ0YzI3N1UsIDB4YmRkMGRhNjdVLCAweDExODYzMzIyVSwKKyAgICAweGZjN2UxOWU1VSwgMHg0N2FkYzk4ZVUsIDB4ZTdmZDM0ZDNVLCAweDUyMjlmNmE0VSwKKyAgICAweDYwMzBhMGMwVSwgMHg3NjNiOWFlY1UsIDB4MjM5ZjY1NDZVLCAweGVkZjgyYWM3VSwKKyAgICAweDkxYzZhZTNmVSwgMHgyNjEzNmE0Y1UsIDB4MGMwNjE0MThVLCAweDBhMDUxZTE0VSwKKyAgICAweDk3YzVhNDMzVSwgMHgyMjExNjY0NFUsIDB4ZWU3NzJmYzFVLCAweGY4N2MxNWVkVSwKKyAgICAweGY0N2EwMWY1VSwgMHhmMDc4MGRmZFUsIDB4NmMzNmI0ZDhVLCAweDM4MWM0ODcwVSwKKyAgICAweDcyMzk5NmU0VSwgMHhiMjU5Y2I3OVUsIDB4MzAxODUwNjBVLCAweGFjNTZlOTQ1VSwKKyAgICAweDdiYjM4ZGY2VSwgMHg3ZGIwODdmYVUsIDB4NDgyNGQ4OTBVLCAweDQwMjBjMDgwVSwKKyAgICAweDc5YjI4YmYyVSwgMHgzOTkyNGI3MlUsIDB4NWJhM2VkYjZVLCAweDlkYzBiYTI3VSwKKyAgICAweDg4NDQ4NTBkVSwgMHhjNDYyNTE5NVUsIDB4MjAxMDYwNDBVLCAweDc1YjQ5ZmVhVSwKKyAgICAweDE1ODQzZjJhVSwgMHg4NjQzOTcxMVUsIDB4M2I5MzRkNzZVLCAweDk5YzJiNjJmVSwKKyAgICAweDk0NGFhMTM1VSwgMHg2N2JkYTljZVUsIDB4MDM4ZjA1MDZVLCAweDVhMmRlZWI0VSwKKyAgICAweDY1YmNhZmNhVSwgMHgyNTljNmY0YVUsIDB4ZDQ2YTYxYjVVLCAweDgwNDA5ZDFkVSwKKyAgICAweDgzY2Y5ODFiVSwgMHg1OWEyZWJiMlUsIDB4MWQ4MDI3M2FVLCAweDllNGZiZjIxVSwKKyAgICAweDNlMWY0MjdjVSwgMHg4OWNhODYwZlUsIDB4NDlhYWRiOTJVLCAweDg0NDI5MTE1VSwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFQyWzI1Nl0gPSB7CisgICAgMHhkMmJiYmE2OVUsIDB4NGRlNTU0YThVLCAweGJjZTIyZjVlVSwgMHhjZDI1NzRlOFUsCisgICAgMHg1MWY3NTNhNlUsIDB4NmJkMGQzYmJVLCAweDZmZDZkMmI5VSwgMHgyOWIzNGQ5YVUsCisgICAgMHg1ZGZkNTBhMFUsIDB4OGFjZmFjNDVVLCAweDBlMDk4ZDA3VSwgMHhjNmE1YmY2M1UsCisgICAgMHhkZDNkNzBlMFUsIDB4NTVmMTUyYTRVLCAweDUyN2I5YTI5VSwgMHgyZGI1NGM5OFUsCisgICAgMHg4ZjQ2ZWFjOVUsIDB4NzNjNGQ1YjdVLCAweDY2NTU5NzMzVSwgMHg2M2RjZDFiZlUsCisgICAgMHhjY2FhMzM2NlUsIDB4NTlmYjUxYTJVLCAweDcxYzc1YmI2VSwgMHhhMmYzYTY1MVUsCisgICAgMHg1ZmZlZGVhMVUsIDB4M2RhZDQ4OTBVLCAweDlhZDdhODRkVSwgMHg1ZTcxOTkyZlUsCisgICAgMHg0YmUwZGJhYlUsIDB4YzhhYzMyNjRVLCAweGU2OTViNzczVSwgMHhkNzMyZmNlNVUsCisgICAgMHhhYjcwZTNkYlUsIDB4NDI2MzllMjFVLCAweDdlNDE5MTNmVSwgMHg1NjdkOWIyYlUsCisgICAgMHhhZjc2ZTJkOVUsIDB4ZDZiZGJiNmJVLCAweDE5OWI0MTgyVSwgMHhhNTc5NmVkY1UsCisgICAgMHhhZWY5YTU1N1UsIDB4MGI4MGNiOGJVLCAweGIxNjc2YmQ2VSwgMHg2ZTU5OTUzN1UsCisgICAgMHhiZWUxYTE1ZlUsIDB4ZWIxMGYzZmJVLCAweGZlODFiMTdmVSwgMHgwODBjMDIwNFUsCisgICAgMHgxNzkyY2M4NVUsIDB4MzdhMmM0OTVVLCAweDc0NGUxZDNhVSwgMHg1MDc4MTQyOFUsCisgICAgMHgyYmIwYzM5YlUsIDB4OTE1NzYzYzZVLCAweDRmZTZkYWE5VSwgMHg2OWQzNWRiYVUsCisgICAgMHg2MWRmNWZiZVUsIDB4NTdmMmRjYTVVLCAweGU5MTM3ZGZhVSwgMHgxMzk0Y2Q4N1UsCisgICAgMHhlMTFmN2ZmZVUsIDB4NzVjMTVhYjRVLCAweGFkNzU2Y2Q4VSwgMHg2ZGQ1NWNiOFUsCisgICAgMHhmYjA4ZjdmM1UsIDB4OThkNDI2NGNVLCAweGRiMzhmZmUzVSwgMHg5MzU0ZWRjN1UsCisgICAgMHg4NzRhZThjZFUsIDB4NGU2OTlkMjdVLCAweGExN2Y2ZmRlVSwgMHgwMjAzOGUwMVUsCisgICAgMHg2NDU2MTkzMlUsIDB4YmFlN2EwNWRVLCAweGU3MWFmMGZkVSwgMHgxZTExODkwZlUsCisgICAgMHgzYzIyMGYxZVUsIDB4MWMxMjA3MGVVLCAweDg2YzVhZjQzVSwgMHhjYjIwZmJlYlUsCisgICAgMHgyMDMwMDgxMFUsIDB4NTQ3ZTE1MmFVLCAweDM0MmUwZDFhVSwgMHgxMDE4MDQwOFUsCisgICAgMHgwNDA2MDEwMlUsIDB4OGQ0NTY0YzhVLCAweDViZjhkZmEzVSwgMHhjNTI5NzZlY1UsCisgICAgMHhmOTBiNzlmMlUsIDB4NTNmNGRkYTdVLCAweGY0OGUzZDdhVSwgMHg1ODc0MTYyY1UsCisgICAgMHhmYzgyM2Y3ZVUsIDB4ZGNiMjM3NmVVLCAweGE5NzM2ZGRhVSwgMHhlMDkwMzg3MFUsCisgICAgMHhkZWIxYjk2ZlUsIDB4ZDEzNzczZTZVLCAweDgzNGNlOWNmVSwgMHhkNGJlMzU2YVUsCisgICAgMHg0OWUzNTVhYVUsIDB4ZDkzYjcxZTJVLCAweGYxMDc3YmY2VSwgMHgwYTBmOGMwNVUsCisgICAgMHhkNTMxNzJlNFUsIDB4MWExNzg4MGRVLCAweGZmMGVmNmYxVSwgMHhhOGZjMmE1NFUsCisgICAgMHhmODg0M2U3Y1UsIDB4NjVkOTVlYmNVLCAweDljZDIyNzRlVSwgMHgwNTg5NDY4Y1UsCisgICAgMHgzMDI4MGMxOFUsIDB4ODk0MzY1Y2FVLCAweGJkNmQ2OGQwVSwgMHg5OTViNjFjMlUsCisgICAgMHgwYzBhMDMwNlUsIDB4MjNiY2MxOWZVLCAweDQxZWY1N2FlVSwgMHg3ZmNlZDZiMVUsCisgICAgMHg0M2VjZDlhZlUsIDB4N2RjZDU4YjBVLCAweDQ3ZWFkOGFkVSwgMHg4NTQ5NjZjY1UsCisgICAgMHg3YmM4ZDdiM1UsIDB4ZTg5YzNhNzRVLCAweDA3OGFjODhkVSwgMHhmMDg4M2M3OFUsCisgICAgMHhjZjI2ZmFlOVUsIDB4NjI1Mzk2MzFVLCAweGE2ZjVhNzUzVSwgMHg1YTc3OTgyZFUsCisgICAgMHg5NzUyZWNjNVUsIDB4ZGFiN2I4NmRVLCAweDNiYThjNzkzVSwgMHg4MmMzYWU0MVUsCisgICAgMHhiOTZiNjlkMlUsIDB4MzFhNzRiOTZVLCAweDk2ZGRhYjRiVSwgMHg5ZWQxYTk0ZlUsCisgICAgMHg4MTRmNjdjZVUsIDB4MjgzYzBhMTRVLCAweDAxOGY0NzhlVSwgMHhlZjE2ZjJmOVUsCisgICAgMHhlZTk5YjU3N1UsIDB4ODhjYzIyNDRVLCAweGIzNjRlNWQ3VSwgMHg5ZjVlZWVjMVUsCisgICAgMHhjMmEzYmU2MVUsIDB4YWNmYTJiNTZVLCAweDNlMjE4MTFmVSwgMHg0ODZjMTIyNFUsCisgICAgMHgzNjJkODMxYlUsIDB4NmM1YTFiMzZVLCAweDM4MjQwZTFjVSwgMHg4Y2NhMjM0NlUsCisgICAgMHhmMzA0ZjVmN1UsIDB4MDk4MzQ1OGFVLCAweDg0YzYyMTQyVSwgMHgxZjllY2U4MVUsCisgICAgMHgzOWFiNDk5MlUsIDB4YjBlODJjNThVLCAweGMzMmNmOWVmVSwgMHhiZjZlZTZkMVUsCisgICAgMHhlMjkzYjY3MVUsIDB4YTBmMDI4NTBVLCAweDVjNzIxNzJlVSwgMHgzMjJiODIxOVUsCisgICAgMHg2ODVjMWEzNFUsIDB4MTYxZDhiMGJVLCAweGRmM2VmZWUxVSwgMHgxMjFiOGEwOVUsCisgICAgMHgyNDM2MDkxMlUsIDB4MDM4Y2M5OGZVLCAweDI2MzU4NzEzVSwgMHgyNWI5NGU5Y1UsCisgICAgMHhhMzdjZTFkZlUsIDB4YjhlNDJlNWNVLCAweGI3NjJlNGQ1VSwgMHhhNzdhZTBkZFUsCisgICAgMHg4YjQwZWJjYlUsIDB4N2E0NzkwM2RVLCAweGFhZmZhNDU1VSwgMHg3ODQ0MWUzY1UsCisgICAgMHgyZTM5ODUxN1UsIDB4OWQ1ZDYwYzBVLCAweDAwMDAwMDAwVSwgMHg5NGRlMjU0YVUsCisgICAgMHhmNzAyZjRmNVUsIDB4ZTMxY2YxZmZVLCAweDZhNWY5NDM1VSwgMHgyYzNhMGIxNlUsCisgICAgMHhiYjY4ZTdkM1UsIDB4YzkyMzc1ZWFVLCAweDliNThlZmMzVSwgMHhkMGI4MzQ2OFUsCisgICAgMHhjNGE2MzE2MlUsIDB4NzdjMmQ0YjVVLCAweDY3ZGFkMGJkVSwgMHgyMjMzODYxMVUsCisgICAgMHhlNTE5N2VmY1UsIDB4OGVjOWFkNDdVLCAweGQzMzRmZGU3VSwgMHhhNGY2Mjk1MlUsCisgICAgMHhjMGEwMzA2MFUsIDB4ZWM5YTNiNzZVLCAweDQ2NjU5ZjIzVSwgMHhjNzJhZjhlZFUsCisgICAgMHgzZmFlYzY5MVUsIDB4NGM2YTEzMjZVLCAweDE4MTQwNjBjVSwgMHgxNDFlMDUwYVUsCisgICAgMHgzM2E0YzU5N1UsIDB4NDQ2NjExMjJVLCAweGMxMmY3N2VlVSwgMHhlZDE1N2NmOFUsCisgICAgMHhmNTAxN2FmNFUsIDB4ZmQwZDc4ZjBVLCAweGQ4YjQzNjZjVSwgMHg3MDQ4MWMzOFUsCisgICAgMHhlNDk2Mzk3MlUsIDB4NzljYjU5YjJVLCAweDYwNTAxODMwVSwgMHg0NWU5NTZhY1UsCisgICAgMHhmNjhkYjM3YlUsIDB4ZmE4N2IwN2RVLCAweDkwZDgyNDQ4VSwgMHg4MGMwMjA0MFUsCisgICAgMHhmMjhiYjI3OVUsIDB4NzI0YjkyMzlVLCAweGI2ZWRhMzViVSwgMHgyN2JhYzA5ZFUsCisgICAgMHgwZDg1NDQ4OFUsIDB4OTU1MTYyYzRVLCAweDQwNjAxMDIwVSwgMHhlYTlmYjQ3NVUsCisgICAgMHgyYTNmODQxNVUsIDB4MTE5NzQzODZVLCAweDc2NGQ5MzNiVSwgMHgyZmI2YzI5OVUsCisgICAgMHgzNWExNGE5NFUsIDB4Y2VhOWJkNjdVLCAweDA2MDU4ZjAzVSwgMHhiNGVlMmQ1YVUsCisgICAgMHhjYWFmYmM2NVUsIDB4NGE2ZjljMjVVLCAweGI1NjE2YWQ0VSwgMHgxZDlkNDA4MFUsCisgICAgMHgxYjk4Y2Y4M1UsIDB4YjJlYmEyNTlVLCAweDNhMjc4MDFkVSwgMHgyMWJmNGY5ZVUsCisgICAgMHg3YzQyMWYzZVUsIDB4MGY4NmNhODlVLCAweDkyZGJhYTQ5VSwgMHgxNTkxNDI4NFUsCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBUM1syNTZdID0geworICAgIDB4YmJkMjY5YmFVLCAweGU1NGRhODU0VSwgMHhlMmJjNWUyZlUsIDB4MjVjZGU4NzRVLAorICAgIDB4Zjc1MWE2NTNVLCAweGQwNmJiYmQzVSwgMHhkNjZmYjlkMlUsIDB4YjMyOTlhNGRVLAorICAgIDB4ZmQ1ZGEwNTBVLCAweGNmOGE0NWFjVSwgMHgwOTBlMDc4ZFUsIDB4YTVjNjYzYmZVLAorICAgIDB4M2RkZGUwNzBVLCAweGYxNTVhNDUyVSwgMHg3YjUyMjk5YVUsIDB4YjUyZDk4NGNVLAorICAgIDB4NDY4ZmM5ZWFVLCAweGM0NzNiN2Q1VSwgMHg1NTY2MzM5N1UsIDB4ZGM2M2JmZDFVLAorICAgIDB4YWFjYzY2MzNVLCAweGZiNTlhMjUxVSwgMHhjNzcxYjY1YlUsIDB4ZjNhMjUxYTZVLAorICAgIDB4ZmU1ZmExZGVVLCAweGFkM2Q5MDQ4VSwgMHhkNzlhNGRhOFUsIDB4NzE1ZTJmOTlVLAorICAgIDB4ZTA0YmFiZGJVLCAweGFjYzg2NDMyVSwgMHg5NWU2NzNiN1UsIDB4MzJkN2U1ZmNVLAorICAgIDB4NzBhYmRiZTNVLCAweDYzNDIyMTllVSwgMHg0MTdlM2Y5MVUsIDB4N2Q1NjJiOWJVLAorICAgIDB4NzZhZmQ5ZTJVLCAweGJkZDY2YmJiVSwgMHg5YjE5ODI0MVUsIDB4NzlhNWRjNmVVLAorICAgIDB4ZjlhZTU3YTVVLCAweDgwMGI4YmNiVSwgMHg2N2IxZDY2YlUsIDB4NTk2ZTM3OTVVLAorICAgIDB4ZTFiZTVmYTFVLCAweDEwZWJmYmYzVSwgMHg4MWZlN2ZiMVUsIDB4MGMwODA0MDJVLAorICAgIDB4OTIxNzg1Y2NVLCAweGEyMzc5NWM0VSwgMHg0ZTc0M2ExZFUsIDB4Nzg1MDI4MTRVLAorICAgIDB4YjAyYjliYzNVLCAweDU3OTFjNjYzVSwgMHhlNjRmYTlkYVUsIDB4ZDM2OWJhNWRVLAorICAgIDB4ZGY2MWJlNWZVLCAweGYyNTdhNWRjVSwgMHgxM2U5ZmE3ZFUsIDB4OTQxMzg3Y2RVLAorICAgIDB4MWZlMWZlN2ZVLCAweGMxNzViNDVhVSwgMHg3NWFkZDg2Y1UsIDB4ZDU2ZGI4NWNVLAorICAgIDB4MDhmYmYzZjdVLCAweGQ0OTg0YzI2VSwgMHgzOGRiZTNmZlUsIDB4NTQ5M2M3ZWRVLAorICAgIDB4NGE4N2NkZThVLCAweDY5NGUyNzlkVSwgMHg3ZmExZGU2ZlUsIDB4MDMwMjAxOGVVLAorICAgIDB4NTY2NDMyMTlVLCAweGU3YmE1ZGEwVSwgMHgxYWU3ZmRmMFUsIDB4MTExZTBmODlVLAorICAgIDB4MjIzYzFlMGZVLCAweDEyMWMwZTA3VSwgMHhjNTg2NDNhZlUsIDB4MjBjYmViZmJVLAorICAgIDB4MzAyMDEwMDhVLCAweDdlNTQyYTE1VSwgMHgyZTM0MWEwZFUsIDB4MTgxMDA4MDRVLAorICAgIDB4MDYwNDAyMDFVLCAweDQ1OGRjODY0VSwgMHhmODViYTNkZlUsIDB4MjljNWVjNzZVLAorICAgIDB4MGJmOWYyNzlVLCAweGY0NTNhN2RkVSwgMHg4ZWY0N2EzZFUsIDB4NzQ1ODJjMTZVLAorICAgIDB4ODJmYzdlM2ZVLCAweGIyZGM2ZTM3VSwgMHg3M2E5ZGE2ZFUsIDB4OTBlMDcwMzhVLAorICAgIDB4YjFkZTZmYjlVLCAweDM3ZDFlNjczVSwgMHg0YzgzY2ZlOVUsIDB4YmVkNDZhMzVVLAorICAgIDB4ZTM0OWFhNTVVLCAweDNiZDllMjcxVSwgMHgwN2YxZjY3YlUsIDB4MGYwYTA1OGNVLAorICAgIDB4MzFkNWU0NzJVLCAweDE3MWEwZDg4VSwgMHgwZWZmZjFmNlUsIDB4ZmNhODU0MmFVLAorICAgIDB4ODRmODdjM2VVLCAweGQ5NjViYzVlVSwgMHhkMjljNGUyN1UsIDB4ODkwNThjNDZVLAorICAgIDB4MjgzMDE4MGNVLCAweDQzODljYTY1VSwgMHg2ZGJkZDA2OFUsIDB4NWI5OWMyNjFVLAorICAgIDB4MGEwYzA2MDNVLCAweGJjMjM5ZmMxVSwgMHhlZjQxYWU1N1UsIDB4Y2U3ZmIxZDZVLAorICAgIDB4ZWM0M2FmZDlVLCAweGNkN2RiMDU4VSwgMHhlYTQ3YWRkOFUsIDB4NDk4NWNjNjZVLAorICAgIDB4Yzg3YmIzZDdVLCAweDljZTg3NDNhVSwgMHg4YTA3OGRjOFUsIDB4ODhmMDc4M2NVLAorICAgIDB4MjZjZmU5ZmFVLCAweDUzNjIzMTk2VSwgMHhmNWE2NTNhN1UsIDB4Nzc1YTJkOThVLAorICAgIDB4NTI5N2M1ZWNVLCAweGI3ZGE2ZGI4VSwgMHhhODNiOTNjN1UsIDB4YzM4MjQxYWVVLAorICAgIDB4NmJiOWQyNjlVLCAweGE3MzE5NjRiVSwgMHhkZDk2NGJhYlUsIDB4ZDE5ZTRmYTlVLAorICAgIDB4NGY4MWNlNjdVLCAweDNjMjgxNDBhVSwgMHg4ZjAxOGU0N1UsIDB4MTZlZmY5ZjJVLAorICAgIDB4OTllZTc3YjVVLCAweGNjODg0NDIyVSwgMHg2NGIzZDdlNVUsIDB4NWU5ZmMxZWVVLAorICAgIDB4YTNjMjYxYmVVLCAweGZhYWM1NjJiVSwgMHgyMTNlMWY4MVUsIDB4NmM0ODI0MTJVLAorICAgIDB4MmQzNjFiODNVLCAweDVhNmMzNjFiVSwgMHgyNDM4MWMwZVUsIDB4Y2E4YzQ2MjNVLAorICAgIDB4MDRmM2Y3ZjVVLCAweDgzMDk4YTQ1VSwgMHhjNjg0NDIyMVUsIDB4OWUxZjgxY2VVLAorICAgIDB4YWIzOTkyNDlVLCAweGU4YjA1ODJjVSwgMHgyY2MzZWZmOVUsIDB4NmViZmQxZTZVLAorICAgIDB4OTNlMjcxYjZVLCAweGYwYTA1MDI4VSwgMHg3MjVjMmUxN1UsIDB4MmIzMjE5ODJVLAorICAgIDB4NWM2ODM0MWFVLCAweDFkMTYwYjhiVSwgMHgzZWRmZTFmZVUsIDB4MWIxMjA5OGFVLAorICAgIDB4MzYyNDEyMDlVLCAweDhjMDM4ZmM5VSwgMHgzNTI2MTM4N1UsIDB4YjkyNTljNGVVLAorICAgIDB4N2NhM2RmZTFVLCAweGU0Yjg1YzJlVSwgMHg2MmI3ZDVlNFUsIDB4N2FhN2RkZTBVLAorICAgIDB4NDA4YmNiZWJVLCAweDQ3N2EzZDkwVSwgMHhmZmFhNTVhNFUsIDB4NDQ3ODNjMWVVLAorICAgIDB4MzkyZTE3ODVVLCAweDVkOWRjMDYwVSwgMHgwMDAwMDAwMFUsIDB4ZGU5NDRhMjVVLAorICAgIDB4MDJmN2Y1ZjRVLCAweDFjZTNmZmYxVSwgMHg1ZjZhMzU5NFUsIDB4M2EyYzE2MGJVLAorICAgIDB4NjhiYmQzZTdVLCAweDIzYzllYTc1VSwgMHg1ODliYzNlZlUsIDB4YjhkMDY4MzRVLAorICAgIDB4YTZjNDYyMzFVLCAweGMyNzdiNWQ0VSwgMHhkYTY3YmRkMFUsIDB4MzMyMjExODZVLAorICAgIDB4MTllNWZjN2VVLCAweGM5OGU0N2FkVSwgMHgzNGQzZTdmZFUsIDB4ZjZhNDUyMjlVLAorICAgIDB4YTBjMDYwMzBVLCAweDlhZWM3NjNiVSwgMHg2NTQ2MjM5ZlUsIDB4MmFjN2VkZjhVLAorICAgIDB4YWUzZjkxYzZVLCAweDZhNGMyNjEzVSwgMHgxNDE4MGMwNlUsIDB4MWUxNDBhMDVVLAorICAgIDB4YTQzMzk3YzVVLCAweDY2NDQyMjExVSwgMHgyZmMxZWU3N1UsIDB4MTVlZGY4N2NVLAorICAgIDB4MDFmNWY0N2FVLCAweDBkZmRmMDc4VSwgMHhiNGQ4NmMzNlUsIDB4NDg3MDM4MWNVLAorICAgIDB4OTZlNDcyMzlVLCAweGNiNzliMjU5VSwgMHg1MDYwMzAxOFUsIDB4ZTk0NWFjNTZVLAorICAgIDB4OGRmNjdiYjNVLCAweDg3ZmE3ZGIwVSwgMHhkODkwNDgyNFUsIDB4YzA4MDQwMjBVLAorICAgIDB4OGJmMjc5YjJVLCAweDRiNzIzOTkyVSwgMHhlZGI2NWJhM1UsIDB4YmEyNzlkYzBVLAorICAgIDB4ODUwZDg4NDRVLCAweDUxOTVjNDYyVSwgMHg2MDQwMjAxMFUsIDB4OWZlYTc1YjRVLAorICAgIDB4M2YyYTE1ODRVLCAweDk3MTE4NjQzVSwgMHg0ZDc2M2I5M1UsIDB4YjYyZjk5YzJVLAorICAgIDB4YTEzNTk0NGFVLCAweGE5Y2U2N2JkVSwgMHgwNTA2MDM4ZlUsIDB4ZWViNDVhMmRVLAorICAgIDB4YWZjYTY1YmNVLCAweDZmNGEyNTljVSwgMHg2MWI1ZDQ2YVUsIDB4OWQxZDgwNDBVLAorICAgIDB4OTgxYjgzY2ZVLCAweGViYjI1OWEyVSwgMHgyNzNhMWQ4MFUsIDB4YmYyMTllNGZVLAorICAgIDB4NDI3YzNlMWZVLCAweDg2MGY4OWNhVSwgMHhkYjkyNDlhYVUsIDB4OTExNTg0NDJVLAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgVDRbMjU2XSA9IHsKKyAgICAweGJhYmFiYWJhVSwgMHg1NDU0NTQ1NFUsIDB4MmYyZjJmMmZVLCAweDc0NzQ3NDc0VSwKKyAgICAweDUzNTM1MzUzVSwgMHhkM2QzZDNkM1UsIDB4ZDJkMmQyZDJVLCAweDRkNGQ0ZDRkVSwKKyAgICAweDUwNTA1MDUwVSwgMHhhY2FjYWNhY1UsIDB4OGQ4ZDhkOGRVLCAweGJmYmZiZmJmVSwKKyAgICAweDcwNzA3MDcwVSwgMHg1MjUyNTI1MlUsIDB4OWE5YTlhOWFVLCAweDRjNGM0YzRjVSwKKyAgICAweGVhZWFlYWVhVSwgMHhkNWQ1ZDVkNVUsIDB4OTc5Nzk3OTdVLCAweGQxZDFkMWQxVSwKKyAgICAweDMzMzMzMzMzVSwgMHg1MTUxNTE1MVUsIDB4NWI1YjViNWJVLCAweGE2YTZhNmE2VSwKKyAgICAweGRlZGVkZWRlVSwgMHg0ODQ4NDg0OFUsIDB4YThhOGE4YThVLCAweDk5OTk5OTk5VSwKKyAgICAweGRiZGJkYmRiVSwgMHgzMjMyMzIzMlUsIDB4YjdiN2I3YjdVLCAweGZjZmNmY2ZjVSwKKyAgICAweGUzZTNlM2UzVSwgMHg5ZTllOWU5ZVUsIDB4OTE5MTkxOTFVLCAweDliOWI5YjliVSwKKyAgICAweGUyZTJlMmUyVSwgMHhiYmJiYmJiYlUsIDB4NDE0MTQxNDFVLCAweDZlNmU2ZTZlVSwKKyAgICAweGE1YTVhNWE1VSwgMHhjYmNiY2JjYlUsIDB4NmI2YjZiNmJVLCAweDk1OTU5NTk1VSwKKyAgICAweGExYTFhMWExVSwgMHhmM2YzZjNmM1UsIDB4YjFiMWIxYjFVLCAweDAyMDIwMjAyVSwKKyAgICAweGNjY2NjY2NjVSwgMHhjNGM0YzRjNFUsIDB4MWQxZDFkMWRVLCAweDE0MTQxNDE0VSwKKyAgICAweGMzYzNjM2MzVSwgMHg2MzYzNjM2M1UsIDB4ZGFkYWRhZGFVLCAweDVkNWQ1ZDVkVSwKKyAgICAweDVmNWY1ZjVmVSwgMHhkY2RjZGNkY1UsIDB4N2Q3ZDdkN2RVLCAweGNkY2RjZGNkVSwKKyAgICAweDdmN2Y3ZjdmVSwgMHg1YTVhNWE1YVUsIDB4NmM2YzZjNmNVLCAweDVjNWM1YzVjVSwKKyAgICAweGY3ZjdmN2Y3VSwgMHgyNjI2MjYyNlUsIDB4ZmZmZmZmZmZVLCAweGVkZWRlZGVkVSwKKyAgICAweGU4ZThlOGU4VSwgMHg5ZDlkOWQ5ZFUsIDB4NmY2ZjZmNmZVLCAweDhlOGU4ZThlVSwKKyAgICAweDE5MTkxOTE5VSwgMHhhMGEwYTBhMFUsIDB4ZjBmMGYwZjBVLCAweDg5ODk4OTg5VSwKKyAgICAweDBmMGYwZjBmVSwgMHgwNzA3MDcwN1UsIDB4YWZhZmFmYWZVLCAweGZiZmJmYmZiVSwKKyAgICAweDA4MDgwODA4VSwgMHgxNTE1MTUxNVUsIDB4MGQwZDBkMGRVLCAweDA0MDQwNDA0VSwKKyAgICAweDAxMDEwMTAxVSwgMHg2NDY0NjQ2NFUsIDB4ZGZkZmRmZGZVLCAweDc2NzY3Njc2VSwKKyAgICAweDc5Nzk3OTc5VSwgMHhkZGRkZGRkZFUsIDB4M2QzZDNkM2RVLCAweDE2MTYxNjE2VSwKKyAgICAweDNmM2YzZjNmVSwgMHgzNzM3MzczN1UsIDB4NmQ2ZDZkNmRVLCAweDM4MzgzODM4VSwKKyAgICAweGI5YjliOWI5VSwgMHg3MzczNzM3M1UsIDB4ZTllOWU5ZTlVLCAweDM1MzUzNTM1VSwKKyAgICAweDU1NTU1NTU1VSwgMHg3MTcxNzE3MVUsIDB4N2I3YjdiN2JVLCAweDhjOGM4YzhjVSwKKyAgICAweDcyNzI3MjcyVSwgMHg4ODg4ODg4OFUsIDB4ZjZmNmY2ZjZVLCAweDJhMmEyYTJhVSwKKyAgICAweDNlM2UzZTNlVSwgMHg1ZTVlNWU1ZVUsIDB4MjcyNzI3MjdVLCAweDQ2NDY0NjQ2VSwKKyAgICAweDBjMGMwYzBjVSwgMHg2NTY1NjU2NVUsIDB4Njg2ODY4NjhVLCAweDYxNjE2MTYxVSwKKyAgICAweDAzMDMwMzAzVSwgMHhjMWMxYzFjMVUsIDB4NTc1NzU3NTdVLCAweGQ2ZDZkNmQ2VSwKKyAgICAweGQ5ZDlkOWQ5VSwgMHg1ODU4NTg1OFUsIDB4ZDhkOGQ4ZDhVLCAweDY2NjY2NjY2VSwKKyAgICAweGQ3ZDdkN2Q3VSwgMHgzYTNhM2EzYVUsIDB4YzhjOGM4YzhVLCAweDNjM2MzYzNjVSwKKyAgICAweGZhZmFmYWZhVSwgMHg5Njk2OTY5NlUsIDB4YTdhN2E3YTdVLCAweDk4OTg5ODk4VSwKKyAgICAweGVjZWNlY2VjVSwgMHhiOGI4YjhiOFUsIDB4YzdjN2M3YzdVLCAweGFlYWVhZWFlVSwKKyAgICAweDY5Njk2OTY5VSwgMHg0YjRiNGI0YlUsIDB4YWJhYmFiYWJVLCAweGE5YTlhOWE5VSwKKyAgICAweDY3Njc2NzY3VSwgMHgwYTBhMGEwYVUsIDB4NDc0NzQ3NDdVLCAweGYyZjJmMmYyVSwKKyAgICAweGI1YjViNWI1VSwgMHgyMjIyMjIyMlUsIDB4ZTVlNWU1ZTVVLCAweGVlZWVlZWVlVSwKKyAgICAweGJlYmViZWJlVSwgMHgyYjJiMmIyYlUsIDB4ODE4MTgxODFVLCAweDEyMTIxMjEyVSwKKyAgICAweDgzODM4MzgzVSwgMHgxYjFiMWIxYlUsIDB4MGUwZTBlMGVVLCAweDIzMjMyMzIzVSwKKyAgICAweGY1ZjVmNWY1VSwgMHg0NTQ1NDU0NVUsIDB4MjEyMTIxMjFVLCAweGNlY2VjZWNlVSwKKyAgICAweDQ5NDk0OTQ5VSwgMHgyYzJjMmMyY1UsIDB4ZjlmOWY5ZjlVLCAweGU2ZTZlNmU2VSwKKyAgICAweGI2YjZiNmI2VSwgMHgyODI4MjgyOFUsIDB4MTcxNzE3MTdVLCAweDgyODI4MjgyVSwKKyAgICAweDFhMWExYTFhVSwgMHg4YjhiOGI4YlUsIDB4ZmVmZWZlZmVVLCAweDhhOGE4YThhVSwKKyAgICAweDA5MDkwOTA5VSwgMHhjOWM5YzljOVUsIDB4ODc4Nzg3ODdVLCAweDRlNGU0ZTRlVSwKKyAgICAweGUxZTFlMWUxVSwgMHgyZTJlMmUyZVUsIDB4ZTRlNGU0ZTRVLCAweGUwZTBlMGUwVSwKKyAgICAweGViZWJlYmViVSwgMHg5MDkwOTA5MFUsIDB4YTRhNGE0YTRVLCAweDFlMWUxZTFlVSwKKyAgICAweDg1ODU4NTg1VSwgMHg2MDYwNjA2MFUsIDB4MDAwMDAwMDBVLCAweDI1MjUyNTI1VSwKKyAgICAweGY0ZjRmNGY0VSwgMHhmMWYxZjFmMVUsIDB4OTQ5NDk0OTRVLCAweDBiMGIwYjBiVSwKKyAgICAweGU3ZTdlN2U3VSwgMHg3NTc1NzU3NVUsIDB4ZWZlZmVmZWZVLCAweDM0MzQzNDM0VSwKKyAgICAweDMxMzEzMTMxVSwgMHhkNGQ0ZDRkNFUsIDB4ZDBkMGQwZDBVLCAweDg2ODY4Njg2VSwKKyAgICAweDdlN2U3ZTdlVSwgMHhhZGFkYWRhZFUsIDB4ZmRmZGZkZmRVLCAweDI5MjkyOTI5VSwKKyAgICAweDMwMzAzMDMwVSwgMHgzYjNiM2IzYlUsIDB4OWY5ZjlmOWZVLCAweGY4ZjhmOGY4VSwKKyAgICAweGM2YzZjNmM2VSwgMHgxMzEzMTMxM1UsIDB4MDYwNjA2MDZVLCAweDA1MDUwNTA1VSwKKyAgICAweGM1YzVjNWM1VSwgMHgxMTExMTExMVUsIDB4Nzc3Nzc3NzdVLCAweDdjN2M3YzdjVSwKKyAgICAweDdhN2E3YTdhVSwgMHg3ODc4Nzg3OFUsIDB4MzYzNjM2MzZVLCAweDFjMWMxYzFjVSwKKyAgICAweDM5MzkzOTM5VSwgMHg1OTU5NTk1OVUsIDB4MTgxODE4MThVLCAweDU2NTY1NjU2VSwKKyAgICAweGIzYjNiM2IzVSwgMHhiMGIwYjBiMFUsIDB4MjQyNDI0MjRVLCAweDIwMjAyMDIwVSwKKyAgICAweGIyYjJiMmIyVSwgMHg5MjkyOTI5MlUsIDB4YTNhM2EzYTNVLCAweGMwYzBjMGMwVSwKKyAgICAweDQ0NDQ0NDQ0VSwgMHg2MjYyNjI2MlUsIDB4MTAxMDEwMTBVLCAweGI0YjRiNGI0VSwKKyAgICAweDg0ODQ4NDg0VSwgMHg0MzQzNDM0M1UsIDB4OTM5MzkzOTNVLCAweGMyYzJjMmMyVSwKKyAgICAweDRhNGE0YTRhVSwgMHhiZGJkYmRiZFUsIDB4OGY4ZjhmOGZVLCAweDJkMmQyZDJkVSwKKyAgICAweGJjYmNiY2JjVSwgMHg5YzljOWM5Y1UsIDB4NmE2YTZhNmFVLCAweDQwNDA0MDQwVSwKKyAgICAweGNmY2ZjZmNmVSwgMHhhMmEyYTJhMlUsIDB4ODA4MDgwODBVLCAweDRmNGY0ZjRmVSwKKyAgICAweDFmMWYxZjFmVSwgMHhjYWNhY2FjYVUsIDB4YWFhYWFhYWFVLCAweDQyNDI0MjQyVSwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFQ1WzI1Nl0gPSB7CisgICAgMHgwMDAwMDAwMFUsIDB4MDEwMjA2MDhVLCAweDAyMDQwYzEwVSwgMHgwMzA2MGExOFUsCisgICAgMHgwNDA4MTgyMFUsIDB4MDUwYTFlMjhVLCAweDA2MGMxNDMwVSwgMHgwNzBlMTIzOFUsCisgICAgMHgwODEwMzA0MFUsIDB4MDkxMjM2NDhVLCAweDBhMTQzYzUwVSwgMHgwYjE2M2E1OFUsCisgICAgMHgwYzE4Mjg2MFUsIDB4MGQxYTJlNjhVLCAweDBlMWMyNDcwVSwgMHgwZjFlMjI3OFUsCisgICAgMHgxMDIwNjA4MFUsIDB4MTEyMjY2ODhVLCAweDEyMjQ2YzkwVSwgMHgxMzI2NmE5OFUsCisgICAgMHgxNDI4NzhhMFUsIDB4MTUyYTdlYThVLCAweDE2MmM3NGIwVSwgMHgxNzJlNzJiOFUsCisgICAgMHgxODMwNTBjMFUsIDB4MTkzMjU2YzhVLCAweDFhMzQ1Y2QwVSwgMHgxYjM2NWFkOFUsCisgICAgMHgxYzM4NDhlMFUsIDB4MWQzYTRlZThVLCAweDFlM2M0NGYwVSwgMHgxZjNlNDJmOFUsCisgICAgMHgyMDQwYzAxZFUsIDB4MjE0MmM2MTVVLCAweDIyNDRjYzBkVSwgMHgyMzQ2Y2EwNVUsCisgICAgMHgyNDQ4ZDgzZFUsIDB4MjU0YWRlMzVVLCAweDI2NGNkNDJkVSwgMHgyNzRlZDIyNVUsCisgICAgMHgyODUwZjA1ZFUsIDB4Mjk1MmY2NTVVLCAweDJhNTRmYzRkVSwgMHgyYjU2ZmE0NVUsCisgICAgMHgyYzU4ZTg3ZFUsIDB4MmQ1YWVlNzVVLCAweDJlNWNlNDZkVSwgMHgyZjVlZTI2NVUsCisgICAgMHgzMDYwYTA5ZFUsIDB4MzE2MmE2OTVVLCAweDMyNjRhYzhkVSwgMHgzMzY2YWE4NVUsCisgICAgMHgzNDY4YjhiZFUsIDB4MzU2YWJlYjVVLCAweDM2NmNiNGFkVSwgMHgzNzZlYjJhNVUsCisgICAgMHgzODcwOTBkZFUsIDB4Mzk3Mjk2ZDVVLCAweDNhNzQ5Y2NkVSwgMHgzYjc2OWFjNVUsCisgICAgMHgzYzc4ODhmZFUsIDB4M2Q3YThlZjVVLCAweDNlN2M4NGVkVSwgMHgzZjdlODJlNVUsCisgICAgMHg0MDgwOWQzYVUsIDB4NDE4MjliMzJVLCAweDQyODQ5MTJhVSwgMHg0Mzg2OTcyMlUsCisgICAgMHg0NDg4ODUxYVUsIDB4NDU4YTgzMTJVLCAweDQ2OGM4OTBhVSwgMHg0NzhlOGYwMlUsCisgICAgMHg0ODkwYWQ3YVUsIDB4NDk5MmFiNzJVLCAweDRhOTRhMTZhVSwgMHg0Yjk2YTc2MlUsCisgICAgMHg0Yzk4YjU1YVUsIDB4NGQ5YWIzNTJVLCAweDRlOWNiOTRhVSwgMHg0ZjllYmY0MlUsCisgICAgMHg1MGEwZmRiYVUsIDB4NTFhMmZiYjJVLCAweDUyYTRmMWFhVSwgMHg1M2E2ZjdhMlUsCisgICAgMHg1NGE4ZTU5YVUsIDB4NTVhYWUzOTJVLCAweDU2YWNlOThhVSwgMHg1N2FlZWY4MlUsCisgICAgMHg1OGIwY2RmYVUsIDB4NTliMmNiZjJVLCAweDVhYjRjMWVhVSwgMHg1YmI2YzdlMlUsCisgICAgMHg1Y2I4ZDVkYVUsIDB4NWRiYWQzZDJVLCAweDVlYmNkOWNhVSwgMHg1ZmJlZGZjMlUsCisgICAgMHg2MGMwNWQyN1UsIDB4NjFjMjViMmZVLCAweDYyYzQ1MTM3VSwgMHg2M2M2NTczZlUsCisgICAgMHg2NGM4NDUwN1UsIDB4NjVjYTQzMGZVLCAweDY2Y2M0OTE3VSwgMHg2N2NlNGYxZlUsCisgICAgMHg2OGQwNmQ2N1UsIDB4NjlkMjZiNmZVLCAweDZhZDQ2MTc3VSwgMHg2YmQ2Njc3ZlUsCisgICAgMHg2Y2Q4NzU0N1UsIDB4NmRkYTczNGZVLCAweDZlZGM3OTU3VSwgMHg2ZmRlN2Y1ZlUsCisgICAgMHg3MGUwM2RhN1UsIDB4NzFlMjNiYWZVLCAweDcyZTQzMWI3VSwgMHg3M2U2MzdiZlUsCisgICAgMHg3NGU4MjU4N1UsIDB4NzVlYTIzOGZVLCAweDc2ZWMyOTk3VSwgMHg3N2VlMmY5ZlUsCisgICAgMHg3OGYwMGRlN1UsIDB4NzlmMjBiZWZVLCAweDdhZjQwMWY3VSwgMHg3YmY2MDdmZlUsCisgICAgMHg3Y2Y4MTVjN1UsIDB4N2RmYTEzY2ZVLCAweDdlZmMxOWQ3VSwgMHg3ZmZlMWZkZlUsCisgICAgMHg4MDFkMjc3NFUsIDB4ODExZjIxN2NVLCAweDgyMTkyYjY0VSwgMHg4MzFiMmQ2Y1UsCisgICAgMHg4NDE1M2Y1NFUsIDB4ODUxNzM5NWNVLCAweDg2MTEzMzQ0VSwgMHg4NzEzMzU0Y1UsCisgICAgMHg4ODBkMTczNFUsIDB4ODkwZjExM2NVLCAweDhhMDkxYjI0VSwgMHg4YjBiMWQyY1UsCisgICAgMHg4YzA1MGYxNFUsIDB4OGQwNzA5MWNVLCAweDhlMDEwMzA0VSwgMHg4ZjAzMDUwY1UsCisgICAgMHg5MDNkNDdmNFUsIDB4OTEzZjQxZmNVLCAweDkyMzk0YmU0VSwgMHg5MzNiNGRlY1UsCisgICAgMHg5NDM1NWZkNFUsIDB4OTUzNzU5ZGNVLCAweDk2MzE1M2M0VSwgMHg5NzMzNTVjY1UsCisgICAgMHg5ODJkNzdiNFUsIDB4OTkyZjcxYmNVLCAweDlhMjk3YmE0VSwgMHg5YjJiN2RhY1UsCisgICAgMHg5YzI1NmY5NFUsIDB4OWQyNzY5OWNVLCAweDllMjE2Mzg0VSwgMHg5ZjIzNjU4Y1UsCisgICAgMHhhMDVkZTc2OVUsIDB4YTE1ZmUxNjFVLCAweGEyNTllYjc5VSwgMHhhMzViZWQ3MVUsCisgICAgMHhhNDU1ZmY0OVUsIDB4YTU1N2Y5NDFVLCAweGE2NTFmMzU5VSwgMHhhNzUzZjU1MVUsCisgICAgMHhhODRkZDcyOVUsIDB4YTk0ZmQxMjFVLCAweGFhNDlkYjM5VSwgMHhhYjRiZGQzMVUsCisgICAgMHhhYzQ1Y2YwOVUsIDB4YWQ0N2M5MDFVLCAweGFlNDFjMzE5VSwgMHhhZjQzYzUxMVUsCisgICAgMHhiMDdkODdlOVUsIDB4YjE3ZjgxZTFVLCAweGIyNzk4YmY5VSwgMHhiMzdiOGRmMVUsCisgICAgMHhiNDc1OWZjOVUsIDB4YjU3Nzk5YzFVLCAweGI2NzE5M2Q5VSwgMHhiNzczOTVkMVUsCisgICAgMHhiODZkYjdhOVUsIDB4Yjk2ZmIxYTFVLCAweGJhNjliYmI5VSwgMHhiYjZiYmRiMVUsCisgICAgMHhiYzY1YWY4OVUsIDB4YmQ2N2E5ODFVLCAweGJlNjFhMzk5VSwgMHhiZjYzYTU5MVUsCisgICAgMHhjMDlkYmE0ZVUsIDB4YzE5ZmJjNDZVLCAweGMyOTliNjVlVSwgMHhjMzliYjA1NlUsCisgICAgMHhjNDk1YTI2ZVUsIDB4YzU5N2E0NjZVLCAweGM2OTFhZTdlVSwgMHhjNzkzYTg3NlUsCisgICAgMHhjODhkOGEwZVUsIDB4Yzk4ZjhjMDZVLCAweGNhODk4NjFlVSwgMHhjYjhiODAxNlUsCisgICAgMHhjYzg1OTIyZVUsIDB4Y2Q4Nzk0MjZVLCAweGNlODE5ZTNlVSwgMHhjZjgzOTgzNlUsCisgICAgMHhkMGJkZGFjZVUsIDB4ZDFiZmRjYzZVLCAweGQyYjlkNmRlVSwgMHhkM2JiZDBkNlUsCisgICAgMHhkNGI1YzJlZVUsIDB4ZDViN2M0ZTZVLCAweGQ2YjFjZWZlVSwgMHhkN2IzYzhmNlUsCisgICAgMHhkOGFkZWE4ZVUsIDB4ZDlhZmVjODZVLCAweGRhYTllNjllVSwgMHhkYmFiZTA5NlUsCisgICAgMHhkY2E1ZjJhZVUsIDB4ZGRhN2Y0YTZVLCAweGRlYTFmZWJlVSwgMHhkZmEzZjhiNlUsCisgICAgMHhlMGRkN2E1M1UsIDB4ZTFkZjdjNWJVLCAweGUyZDk3NjQzVSwgMHhlM2RiNzA0YlUsCisgICAgMHhlNGQ1NjI3M1UsIDB4ZTVkNzY0N2JVLCAweGU2ZDE2ZTYzVSwgMHhlN2QzNjg2YlUsCisgICAgMHhlOGNkNGExM1UsIDB4ZTljZjRjMWJVLCAweGVhYzk0NjAzVSwgMHhlYmNiNDAwYlUsCisgICAgMHhlY2M1NTIzM1UsIDB4ZWRjNzU0M2JVLCAweGVlYzE1ZTIzVSwgMHhlZmMzNTgyYlUsCisgICAgMHhmMGZkMWFkM1UsIDB4ZjFmZjFjZGJVLCAweGYyZjkxNmMzVSwgMHhmM2ZiMTBjYlUsCisgICAgMHhmNGY1MDJmM1UsIDB4ZjVmNzA0ZmJVLCAweGY2ZjEwZWUzVSwgMHhmN2YzMDhlYlUsCisgICAgMHhmOGVkMmE5M1UsIDB4ZjllZjJjOWJVLCAweGZhZTkyNjgzVSwgMHhmYmViMjA4YlUsCisgICAgMHhmY2U1MzJiM1UsIDB4ZmRlNzM0YmJVLCAweGZlZTEzZWEzVSwgMHhmZmUzMzhhYlUsCit9OworCisvKioKKyAqIFRoZSByb3VuZCBjb25zdGFudHMuCisgKi8KK3N0YXRpYyBjb25zdCB1bG9uZzMyIHJjW10gPSB7CisgICAgMHhiYTU0MmY3NFUsIDB4NTNkM2QyNGRVLCAweDUwYWM4ZGJmVSwgMHg3MDUyOWE0Y1UsCisgICAgMHhlYWQ1OTdkMVUsIDB4MzM1MTViYTZVLCAweGRlNDhhODk5VSwgMHhkYjMyYjdmY1UsCisgICAgMHhlMzllOTE5YlUsIDB4ZTJiYjQxNmVVLCAweGE1Y2I2Yjk1VSwgMHhhMWYzYjEwMlUsCisgICAgMHhjY2M0MWQxNFUsIDB4YzM2M2RhNWRVLCAweDVmZGM3ZGNkVSwgMHg3ZjVhNmM1Y1UsCisgICAgMHhmNzI2ZmZlZFUsIDB4ZTg5ZDZmOGVVLCAweDE5YTBmMDg5VSwKK307CisKKworCisjZWxzZQorCisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFQwWzI1Nl0gPSB7CisgICAgMHhhNzUzYTZmNVUsIDB4ZDNiYjZiZDBVLCAweGU2ZDFiZjZlVSwgMHg3MWUyZDkzYlUsCisgICAgMHhkMGJkNjdkYVUsIDB4YWM0NThhY2ZVLCAweDRkOWEyOWIzVSwgMHg3OWYyZjkwYlUsCisgICAgMHgzYTc0ZTg5Y1UsIDB4Yzk4ZjAzOGNVLCAweDkxM2Y3ZTQxVSwgMHhmY2U1ZDczMlUsCisgICAgMHgxZTNjNzg0NFUsIDB4NDc4ZTAxOGZVLCAweDU0YTg0ZGU1VSwgMHhiZDY3Y2VhOVUsCisgICAgMHg4YzA1MGEwZlUsIDB4YTU1N2FlZjlVLCAweDdhZjRmNTAxVSwgMHhmYmViY2IyMFUsCisgICAgMHg2M2M2OTE1N1UsIDB4Yjg2ZGRhYjdVLCAweGRkYTc1M2Y0VSwgMHhkNGI1NzdjMlUsCisgICAgMHhlNWQ3YjM2NFUsIDB4YjM3YmY2OGRVLCAweGM1OTczM2E0VSwgMHhiZTYxYzJhM1UsCisgICAgMHhhOTRmOWVkMVUsIDB4ODgwZDFhMTdVLCAweDBjMTgzMDI4VSwgMHhhMjU5YjJlYlUsCisgICAgMHgzOTcyZTQ5NlUsIDB4ZGZhMzViZjhVLCAweDI5NTJhNGY2VSwgMHhkYWE5NGZlNlUsCisgICAgMHgyYjU2YWNmYVUsIDB4YTg0ZDlhZDdVLCAweGNiOGIwYjgwVSwgMHg0Yzk4MmRiNVUsCisgICAgMHg0Yjk2MzFhN1UsIDB4MjI0NDg4Y2NVLCAweGFhNDk5MmRiVSwgMHgyNDQ4OTBkOFUsCisgICAgMHg0MTgyMTk5YlUsIDB4NzBlMGRkM2RVLCAweGE2NTFhMmYzVSwgMHhmOWVmYzMyY1UsCisgICAgMHg1YWI0NzVjMVUsIDB4ZTJkOWFmNzZVLCAweGIwN2RmYTg3VSwgMHgzNjZjZDhiNFUsCisgICAgMHg3ZGZhZTkxM1UsIDB4ZTRkNWI3NjJVLCAweDMzNjZjY2FhVSwgMHhmZmUzZGIzOFUsCisgICAgMHg2MGMwOWQ1ZFUsIDB4MjA0MDgwYzBVLCAweDA4MTAyMDMwVSwgMHg4YjBiMTYxZFUsCisgICAgMHg1ZWJjNjVkOVUsIDB4YWI0Yjk2ZGRVLCAweDdmZmVlMTFmVSwgMHg3OGYwZmQwZFUsCisgICAgMHg3Y2Y4ZWQxNVUsIDB4MmM1OGIwZThVLCAweDU3YWU0MWVmVSwgMHhkMmI5NmZkNlUsCisgICAgMHhkY2E1NTdmMlUsIDB4NmRkYWE5NzNVLCAweDdlZmNlNTE5VSwgMHgwZDFhMzQyZVUsCisgICAgMHg1M2E2NTFmN1UsIDB4OTQzNTZhNWZVLCAweGMzOWIyYmIwVSwgMHgyODUwYTBmMFUsCisgICAgMHgyNzRlOWNkMlUsIDB4MDYwYzE4MTRVLCAweDVmYmU2MWRmVSwgMHhhZDQ3OGVjOVUsCisgICAgMHg2N2NlODE0ZlUsIDB4NWNiODZkZDVVLCAweDU1YWE0OWUzVSwgMHg0ODkwM2RhZFUsCisgICAgMHgwZTFjMzgyNFUsIDB4NTJhNDU1ZjFVLCAweGVhYzk4ZjQ2VSwgMHg0Mjg0MTU5MVUsCisgICAgMHg1YmI2NzFjN1UsIDB4NWRiYTY5ZDNVLCAweDMwNjBjMGEwVSwgMHg1OGIwN2RjZFUsCisgICAgMHg1MWEyNTlmYlUsIDB4NTliMjc5Y2JVLCAweDNjNzhmMDg4VSwgMHg0ZTljMjViOVUsCisgICAgMHgzODcwZTA5MFUsIDB4OGEwOTEyMWJVLCAweDcyZTRkNTMxVSwgMHgxNDI4NTA3OFUsCisgICAgMHhlN2QzYmI2OFUsIDB4YzY5MTNmYWVVLCAweGRlYTE1ZmZlVSwgMHg1MGEwNWRmZFUsCisgICAgMHg4ZTAxMDIwM1UsIDB4OTIzOTcyNGJVLCAweGQxYmY2M2RjVSwgMHg3N2VlYzEyZlUsCisgICAgMHg5MzNiNzY0ZFUsIDB4NDU4YTA5ODNVLCAweDlhMjk1MjdiVSwgMHhjZTgxMWY5ZVUsCisgICAgMHgyZDVhYjRlZVUsIDB4MDMwNjBjMGFVLCAweDYyYzQ5NTUxVSwgMHhiNjcxZTI5M1UsCisgICAgMHhiOTZmZGViMVUsIDB4YmY2M2M2YTVVLCAweDk2MzE2MjUzVSwgMHg2YmQ2YjE2N1UsCisgICAgMHgzZjdlZmM4MlUsIDB4MDcwZTFjMTJVLCAweDEyMjQ0ODZjVSwgMHhhZTQxODJjM1UsCisgICAgMHg0MDgwMWQ5ZFUsIDB4MzQ2OGQwYjhVLCAweDQ2OGMwNTg5VSwgMHgzZTdjZjg4NFUsCisgICAgMHhkYmFiNGJlMFUsIDB4Y2Y4MzFiOThVLCAweGVjYzU5NzUyVSwgMHhjYzg1MTc5MlUsCisgICAgMHhjMTlmMjNiY1UsIDB4YTE1ZmJlZTFVLCAweGMwOWQyN2JhVSwgMHhkNmIxN2ZjZVUsCisgICAgMHgxZDNhNzQ0ZVUsIDB4ZjRmNWY3MDJVLCAweDYxYzI5OTViVSwgMHgzYjc2ZWM5YVUsCisgICAgMHgxMDIwNDA2MFUsIDB4ZDhhZDQ3ZWFVLCAweDY4ZDBiZDZkVSwgMHhhMDVkYmFlN1UsCisgICAgMHhiMTdmZmU4MVUsIDB4MGExNDI4M2NVLCAweDY5ZDJiOTZiVSwgMHg2Y2Q4YWQ3NVUsCisgICAgMHg0OTkyMzlhYlUsIDB4ZmFlOWNmMjZVLCAweDc2ZWNjNTI5VSwgMHhjNDk1MzdhMlUsCisgICAgMHg5ZTIxNDI2M1UsIDB4OWIyYjU2N2RVLCAweDZlZGNhNTc5VSwgMHg5OTJmNWU3MVUsCisgICAgMHhjMjk5MmZiNlUsIDB4Yjc3M2U2OTVVLCAweDk4MmQ1YTc3VSwgMHhiYzY1Y2FhZlUsCisgICAgMHg4ZjAzMDYwNVUsIDB4ODUxNzJlMzlVLCAweDFmM2U3YzQyVSwgMHhiNDc1ZWE5ZlUsCisgICAgMHhmOGVkYzcyYVUsIDB4MTEyMjQ0NjZVLCAweDJlNWNiOGU0VSwgMHgwMDAwMDAwMFUsCisgICAgMHgyNTRhOTRkZVUsIDB4MWMzODcwNDhVLCAweDJhNTRhOGZjVSwgMHgzZDdhZjQ4ZVUsCisgICAgMHgwNTBhMTQxZVUsIDB4NGY5ZTIxYmZVLCAweDdiZjZmMTA3VSwgMHhiMjc5ZjI4YlUsCisgICAgMHgzMjY0YzhhY1UsIDB4OTAzZDdhNDdVLCAweGFmNDM4NmM1VSwgMHgxOTMyNjQ1NlUsCisgICAgMHhhMzViYjZlZFUsIDB4ZjdmM2ZiMDhVLCAweDczZTZkMTM3VSwgMHg5ZDI3NGU2OVUsCisgICAgMHgxNTJhNTQ3ZVUsIDB4NzRlOGNkMjVVLCAweGVlYzE5ZjVlVSwgMHhjYTg5MGY4NlUsCisgICAgMHg5ZjIzNDY2NVUsIDB4MGYxZTNjMjJVLCAweDFiMzY2YzVhVSwgMHg3NWVhYzkyM1UsCisgICAgMHg4NjExMjIzM1UsIDB4ODQxNTJhM2ZVLCAweDljMjU0YTZmVSwgMHg0YTk0MzVhMVUsCisgICAgMHg5NzMzNjY1NVUsIDB4MWEzNDY4NWNVLCAweDY1Y2E4OTQzVSwgMHhmNmYxZmYwZVUsCisgICAgMHhlZGM3OTM1NFUsIDB4MDkxMjI0MzZVLCAweGJiNmJkNmJkVSwgMHgyNjRjOThkNFUsCisgICAgMHg4MzFiMzYyZFUsIDB4ZWJjYjhiNDBVLCAweDZmZGVhMTdmVSwgMHg4MTFmM2UyMVUsCisgICAgMHgwNDA4MTAxOFUsIDB4NmFkNGI1NjFVLCAweDQzODYxMTk3VSwgMHgwMTAyMDQwNlUsCisgICAgMHgxNzJlNWM3MlUsIDB4ZTFkZmEzN2NVLCAweDg3MTMyNjM1VSwgMHhmNWY3ZjMwNFUsCisgICAgMHg4ZDA3MGUwOVUsIDB4ZTNkYmFiNzBVLCAweDIzNDY4Y2NhVSwgMHg4MDFkM2EyN1UsCisgICAgMHg0NDg4MGQ4NVUsIDB4MTYyYzU4NzRVLCAweDY2Y2M4NTQ5VSwgMHgyMTQyODRjNlUsCisgICAgMHhmZWUxZGYzZVUsIDB4ZDViNzczYzRVLCAweDMxNjJjNGE2VSwgMHhkOWFmNDNlY1UsCisgICAgMHgzNTZhZDRiZVUsIDB4MTgzMDYwNTBVLCAweDAyMDQwODBjVSwgMHg2NGM4OGQ0NVUsCisgICAgMHhmMmY5ZWYxNlUsIDB4ZjFmZmUzMWNVLCAweDU2YWM0NWU5VSwgMHhjZDg3MTM5NFUsCisgICAgMHg4MjE5MzIyYlUsIDB4Yzg4ZDA3OGFVLCAweGJhNjlkMmJiVSwgMHhmMGZkZTcxYVUsCisgICAgMHhlZmMzOWI1OFUsIDB4ZTljZjgzNGNVLCAweGU4Y2Q4NzRhVSwgMHhmZGU3ZDMzNFUsCisgICAgMHg4OTBmMWUxMVUsIDB4ZDdiMzdiYzhVLCAweGM3OTMzYmE4VSwgMHhiNTc3ZWU5OVUsCisgICAgMHhhNDU1YWFmZlUsIDB4MmY1ZWJjZTJVLCAweDk1Mzc2ZTU5VSwgMHgxMzI2NGM2YVUsCisgICAgMHgwYjE2MmMzYVUsIDB4ZjNmYmViMTBVLCAweGUwZGRhNzdhVSwgMHgzNzZlZGNiMlUsCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBUMVsyNTZdID0geworICAgIDB4NTNhN2Y1YTZVLCAweGJiZDNkMDZiVSwgMHhkMWU2NmViZlUsIDB4ZTI3MTNiZDlVLAorICAgIDB4YmRkMGRhNjdVLCAweDQ1YWNjZjhhVSwgMHg5YTRkYjMyOVUsIDB4ZjI3OTBiZjlVLAorICAgIDB4NzQzYTljZThVLCAweDhmYzk4YzAzVSwgMHgzZjkxNDE3ZVUsIDB4ZTVmYzMyZDdVLAorICAgIDB4M2MxZTQ0NzhVLCAweDhlNDc4ZjAxVSwgMHhhODU0ZTU0ZFUsIDB4NjdiZGE5Y2VVLAorICAgIDB4MDU4YzBmMGFVLCAweDU3YTVmOWFlVSwgMHhmNDdhMDFmNVUsIDB4ZWJmYjIwY2JVLAorICAgIDB4YzY2MzU3OTFVLCAweDZkYjhiN2RhVSwgMHhhN2RkZjQ1M1UsIDB4YjVkNGMyNzdVLAorICAgIDB4ZDdlNTY0YjNVLCAweDdiYjM4ZGY2VSwgMHg5N2M1YTQzM1UsIDB4NjFiZWEzYzJVLAorICAgIDB4NGZhOWQxOWVVLCAweDBkODgxNzFhVSwgMHgxODBjMjgzMFUsIDB4NTlhMmViYjJVLAorICAgIDB4NzIzOTk2ZTRVLCAweGEzZGZmODViVSwgMHg1MjI5ZjZhNFUsIDB4YTlkYWU2NGZVLAorICAgIDB4NTYyYmZhYWNVLCAweDRkYThkNzlhVSwgMHg4YmNiODAwYlUsIDB4OTg0Y2I1MmRVLAorICAgIDB4OTY0YmE3MzFVLCAweDQ0MjJjYzg4VSwgMHg0OWFhZGI5MlUsIDB4NDgyNGQ4OTBVLAorICAgIDB4ODI0MTliMTlVLCAweGUwNzAzZGRkVSwgMHg1MWE2ZjNhMlUsIDB4ZWZmOTJjYzNVLAorICAgIDB4YjQ1YWMxNzVVLCAweGQ5ZTI3NmFmVSwgMHg3ZGIwODdmYVUsIDB4NmMzNmI0ZDhVLAorICAgIDB4ZmE3ZDEzZTlVLCAweGQ1ZTQ2MmI3VSwgMHg2NjMzYWFjY1UsIDB4ZTNmZjM4ZGJVLAorICAgIDB4YzA2MDVkOWRVLCAweDQwMjBjMDgwVSwgMHgxMDA4MzAyMFUsIDB4MGI4YjFkMTZVLAorICAgIDB4YmM1ZWQ5NjVVLCAweDRiYWJkZDk2VSwgMHhmZTdmMWZlMVUsIDB4ZjA3ODBkZmRVLAorICAgIDB4Zjg3YzE1ZWRVLCAweDU4MmNlOGIwVSwgMHhhZTU3ZWY0MVUsIDB4YjlkMmQ2NmZVLAorICAgIDB4YTVkY2YyNTdVLCAweGRhNmQ3M2E5VSwgMHhmYzdlMTllNVUsIDB4MWEwZDJlMzRVLAorICAgIDB4YTY1M2Y3NTFVLCAweDM1OTQ1ZjZhVSwgMHg5YmMzYjAyYlUsIDB4NTAyOGYwYTBVLAorICAgIDB4NGUyN2QyOWNVLCAweDBjMDYxNDE4VSwgMHhiZTVmZGY2MVUsIDB4NDdhZGM5OGVVLAorICAgIDB4Y2U2NzRmODFVLCAweGI4NWNkNTZkVSwgMHhhYTU1ZTM0OVUsIDB4OTA0OGFkM2RVLAorICAgIDB4MWMwZTI0MzhVLCAweGE0NTJmMTU1VSwgMHhjOWVhNDY4ZlUsIDB4ODQ0MjkxMTVVLAorICAgIDB4YjY1YmM3NzFVLCAweGJhNWRkMzY5VSwgMHg2MDMwYTBjMFUsIDB4YjA1OGNkN2RVLAorICAgIDB4YTI1MWZiNTlVLCAweGIyNTljYjc5VSwgMHg3ODNjODhmMFUsIDB4OWM0ZWI5MjVVLAorICAgIDB4NzAzODkwZTBVLCAweDA5OGExYjEyVSwgMHhlNDcyMzFkNVUsIDB4MjgxNDc4NTBVLAorICAgIDB4ZDNlNzY4YmJVLCAweDkxYzZhZTNmVSwgMHhhMWRlZmU1ZlUsIDB4YTA1MGZkNWRVLAorICAgIDB4MDE4ZTAzMDJVLCAweDM5OTI0YjcyVSwgMHhiZmQxZGM2M1UsIDB4ZWU3NzJmYzFVLAorICAgIDB4M2I5MzRkNzZVLCAweDhhNDU4MzA5VSwgMHgyOTlhN2I1MlUsIDB4ODFjZTllMWZVLAorICAgIDB4NWEyZGVlYjRVLCAweDA2MDMwYTBjVSwgMHhjNDYyNTE5NVUsIDB4NzFiNjkzZTJVLAorICAgIDB4NmZiOWIxZGVVLCAweDYzYmZhNWM2VSwgMHgzMTk2NTM2MlUsIDB4ZDY2YjY3YjFVLAorICAgIDB4N2UzZjgyZmNVLCAweDBlMDcxMjFjVSwgMHgyNDEyNmM0OFUsIDB4NDFhZWMzODJVLAorICAgIDB4ODA0MDlkMWRVLCAweDY4MzRiOGQwVSwgMHg4YzQ2ODkwNVUsIDB4N2MzZTg0ZjhVLAorICAgIDB4YWJkYmUwNGJVLCAweDgzY2Y5ODFiVSwgMHhjNWVjNTI5N1UsIDB4ODVjYzkyMTdVLAorICAgIDB4OWZjMWJjMjNVLCAweDVmYTFlMWJlVSwgMHg5ZGMwYmEyN1UsIDB4YjFkNmNlN2ZVLAorICAgIDB4M2ExZDRlNzRVLCAweGY1ZjQwMmY3VSwgMHhjMjYxNWI5OVUsIDB4NzYzYjlhZWNVLAorICAgIDB4MjAxMDYwNDBVLCAweGFkZDhlYTQ3VSwgMHhkMDY4NmRiZFUsIDB4NWRhMGU3YmFVLAorICAgIDB4N2ZiMTgxZmVVLCAweDE0MGEzYzI4VSwgMHhkMjY5NmJiOVUsIDB4ZDg2Yzc1YWRVLAorICAgIDB4OTI0OWFiMzlVLCAweGU5ZmEyNmNmVSwgMHhlYzc2MjljNVUsIDB4OTVjNGEyMzdVLAorICAgIDB4MjE5ZTYzNDJVLCAweDJiOWI3ZDU2VSwgMHhkYzZlNzlhNVUsIDB4MmY5OTcxNWVVLAorICAgIDB4OTljMmI2MmZVLCAweDczYjc5NWU2VSwgMHgyZDk4Nzc1YVUsIDB4NjViY2FmY2FVLAorICAgIDB4MDM4ZjA1MDZVLCAweDE3ODUzOTJlVSwgMHgzZTFmNDI3Y1UsIDB4NzViNDlmZWFVLAorICAgIDB4ZWRmODJhYzdVLCAweDIyMTE2NjQ0VSwgMHg1YzJlZTRiOFUsIDB4MDAwMDAwMDBVLAorICAgIDB4NGEyNWRlOTRVLCAweDM4MWM0ODcwVSwgMHg1NDJhZmNhOFUsIDB4N2EzZDhlZjRVLAorICAgIDB4MGEwNTFlMTRVLCAweDllNGZiZjIxVSwgMHhmNjdiMDdmMVUsIDB4NzliMjhiZjJVLAorICAgIDB4NjQzMmFjYzhVLCAweDNkOTA0NzdhVSwgMHg0M2FmYzU4NlUsIDB4MzIxOTU2NjRVLAorICAgIDB4NWJhM2VkYjZVLCAweGYzZjcwOGZiVSwgMHhlNjczMzdkMVUsIDB4Mjc5ZDY5NGVVLAorICAgIDB4MmExNTdlNTRVLCAweGU4NzQyNWNkVSwgMHhjMWVlNWU5ZlUsIDB4ODljYTg2MGZVLAorICAgIDB4MjM5ZjY1NDZVLCAweDFlMGYyMjNjVSwgMHgzNjFiNWE2Y1UsIDB4ZWE3NTIzYzlVLAorICAgIDB4MTE4NjMzMjJVLCAweDE1ODQzZjJhVSwgMHgyNTljNmY0YVUsIDB4OTQ0YWExMzVVLAorICAgIDB4MzM5NzU1NjZVLCAweDM0MWE1YzY4VSwgMHhjYTY1NDM4OVUsIDB4ZjFmNjBlZmZVLAorICAgIDB4YzdlZDU0OTNVLCAweDEyMDkzNjI0VSwgMHg2YmJiYmRkNlUsIDB4NGMyNmQ0OThVLAorICAgIDB4MWI4MzJkMzZVLCAweGNiZWI0MDhiVSwgMHhkZTZmN2ZhMVUsIDB4MWY4MTIxM2VVLAorICAgIDB4MDgwNDE4MTBVLCAweGQ0NmE2MWI1VSwgMHg4NjQzOTcxMVUsIDB4MDIwMTA2MDRVLAorICAgIDB4MmUxNzcyNWNVLCAweGRmZTE3Y2EzVSwgMHgxMzg3MzUyNlUsIDB4ZjdmNTA0ZjNVLAorICAgIDB4MDc4ZDA5MGVVLCAweGRiZTM3MGFiVSwgMHg0NjIzY2E4Y1UsIDB4MWQ4MDI3M2FVLAorICAgIDB4ODg0NDg1MGRVLCAweDJjMTY3NDU4VSwgMHhjYzY2NDk4NVUsIDB4NDIyMWM2ODRVLAorICAgIDB4ZTFmZTNlZGZVLCAweGI3ZDVjNDczVSwgMHg2MjMxYTZjNFUsIDB4YWZkOWVjNDNVLAorICAgIDB4NmEzNWJlZDRVLCAweDMwMTg1MDYwVSwgMHgwNDAyMGMwOFUsIDB4Yzg2NDQ1OGRVLAorICAgIDB4ZjlmMjE2ZWZVLCAweGZmZjExY2UzVSwgMHhhYzU2ZTk0NVUsIDB4ODdjZDk0MTNVLAorICAgIDB4MTk4MjJiMzJVLCAweDhkYzg4YTA3VSwgMHg2OWJhYmJkMlUsIDB4ZmRmMDFhZTdVLAorICAgIDB4YzNlZjU4OWJVLCAweGNmZTk0YzgzVSwgMHhjZGU4NGE4N1UsIDB4ZTdmZDM0ZDNVLAorICAgIDB4MGY4OTExMWVVLCAweGIzZDdjODdiVSwgMHg5M2M3YTgzYlUsIDB4NzdiNTk5ZWVVLAorICAgIDB4NTVhNGZmYWFVLCAweDVlMmZlMmJjVSwgMHgzNzk1NTk2ZVUsIDB4MjYxMzZhNGNVLAorICAgIDB4MTYwYjNhMmNVLCAweGZiZjMxMGViVSwgMHhkZGUwN2FhN1UsIDB4NmUzN2IyZGNVLAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgVDJbMjU2XSA9IHsKKyAgICAweGE2ZjVhNzUzVSwgMHg2YmQwZDNiYlUsIDB4YmY2ZWU2ZDFVLCAweGQ5M2I3MWUyVSwKKyAgICAweDY3ZGFkMGJkVSwgMHg4YWNmYWM0NVUsIDB4MjliMzRkOWFVLCAweGY5MGI3OWYyVSwKKyAgICAweGU4OWMzYTc0VSwgMHgwMzhjYzk4ZlUsIDB4N2U0MTkxM2ZVLCAweGQ3MzJmY2U1VSwKKyAgICAweDc4NDQxZTNjVSwgMHgwMThmNDc4ZVUsIDB4NGRlNTU0YThVLCAweGNlYTliZDY3VSwKKyAgICAweDBhMGY4YzA1VSwgMHhhZWY5YTU1N1UsIDB4ZjUwMTdhZjRVLCAweGNiMjBmYmViVSwKKyAgICAweDkxNTc2M2M2VSwgMHhkYWI3Yjg2ZFUsIDB4NTNmNGRkYTdVLCAweDc3YzJkNGI1VSwKKyAgICAweGIzNjRlNWQ3VSwgMHhmNjhkYjM3YlUsIDB4MzNhNGM1OTdVLCAweGMyYTNiZTYxVSwKKyAgICAweDllZDFhOTRmVSwgMHgxYTE3ODgwZFUsIDB4MzAyODBjMThVLCAweGIyZWJhMjU5VSwKKyAgICAweGU0OTYzOTcyVSwgMHg1YmY4ZGZhM1UsIDB4YTRmNjI5NTJVLCAweDRmZTZkYWE5VSwKKyAgICAweGFjZmEyYjU2VSwgMHg5YWQ3YTg0ZFUsIDB4MGI4MGNiOGJVLCAweDJkYjU0Yzk4VSwKKyAgICAweDMxYTc0Yjk2VSwgMHg4OGNjMjI0NFUsIDB4OTJkYmFhNDlVLCAweDkwZDgyNDQ4VSwKKyAgICAweDE5OWI0MTgyVSwgMHhkZDNkNzBlMFUsIDB4YTJmM2E2NTFVLCAweGMzMmNmOWVmVSwKKyAgICAweDc1YzE1YWI0VSwgMHhhZjc2ZTJkOVUsIDB4ZmE4N2IwN2RVLCAweGQ4YjQzNjZjVSwKKyAgICAweGU5MTM3ZGZhVSwgMHhiNzYyZTRkNVUsIDB4Y2NhYTMzNjZVLCAweGRiMzhmZmUzVSwKKyAgICAweDlkNWQ2MGMwVSwgMHg4MGMwMjA0MFUsIDB4MjAzMDA4MTBVLCAweDE2MWQ4YjBiVSwKKyAgICAweDY1ZDk1ZWJjVSwgMHg5NmRkYWI0YlUsIDB4ZTExZjdmZmVVLCAweGZkMGQ3OGYwVSwKKyAgICAweGVkMTU3Y2Y4VSwgMHhiMGU4MmM1OFUsIDB4NDFlZjU3YWVVLCAweDZmZDZkMmI5VSwKKyAgICAweDU3ZjJkY2E1VSwgMHhhOTczNmRkYVUsIDB4ZTUxOTdlZmNVLCAweDM0MmUwZDFhVSwKKyAgICAweDUxZjc1M2E2VSwgMHg2YTVmOTQzNVUsIDB4MmJiMGMzOWJVLCAweGEwZjAyODUwVSwKKyAgICAweDljZDIyNzRlVSwgMHgxODE0MDYwY1UsIDB4NjFkZjVmYmVVLCAweDhlYzlhZDQ3VSwKKyAgICAweDgxNGY2N2NlVSwgMHg2ZGQ1NWNiOFUsIDB4NDllMzU1YWFVLCAweDNkYWQ0ODkwVSwKKyAgICAweDM4MjQwZTFjVSwgMHg1NWYxNTJhNFUsIDB4OGY0NmVhYzlVLCAweDE1OTE0Mjg0VSwKKyAgICAweDcxYzc1YmI2VSwgMHg2OWQzNWRiYVUsIDB4YzBhMDMwNjBVLCAweDdkY2Q1OGIwVSwKKyAgICAweDU5ZmI1MWEyVSwgMHg3OWNiNTliMlUsIDB4ZjA4ODNjNzhVLCAweDI1Yjk0ZTljVSwKKyAgICAweGUwOTAzODcwVSwgMHgxMjFiOGEwOVUsIDB4ZDUzMTcyZTRVLCAweDUwNzgxNDI4VSwKKyAgICAweGJiNjhlN2QzVSwgMHgzZmFlYzY5MVUsIDB4NWZmZWRlYTFVLCAweDVkZmQ1MGEwVSwKKyAgICAweDAyMDM4ZTAxVSwgMHg3MjRiOTIzOVUsIDB4NjNkY2QxYmZVLCAweGMxMmY3N2VlVSwKKyAgICAweDc2NGQ5MzNiVSwgMHgwOTgzNDU4YVUsIDB4NTI3YjlhMjlVLCAweDFmOWVjZTgxVSwKKyAgICAweGI0ZWUyZDVhVSwgMHgwYzBhMDMwNlUsIDB4OTU1MTYyYzRVLCAweGUyOTNiNjcxVSwKKyAgICAweGRlYjFiOTZmVSwgMHhjNmE1YmY2M1UsIDB4NjI1Mzk2MzFVLCAweGIxNjc2YmQ2VSwKKyAgICAweGZjODIzZjdlVSwgMHgxYzEyMDcwZVUsIDB4NDg2YzEyMjRVLCAweDgyYzNhZTQxVSwKKyAgICAweDFkOWQ0MDgwVSwgMHhkMGI4MzQ2OFUsIDB4MDU4OTQ2OGNVLCAweGY4ODQzZTdjVSwKKyAgICAweDRiZTBkYmFiVSwgMHgxYjk4Y2Y4M1UsIDB4OTc1MmVjYzVVLCAweDE3OTJjYzg1VSwKKyAgICAweDIzYmNjMTlmVSwgMHhiZWUxYTE1ZlUsIDB4MjdiYWMwOWRVLCAweDdmY2VkNmIxVSwKKyAgICAweDc0NGUxZDNhVSwgMHhmNzAyZjRmNVUsIDB4OTk1YjYxYzJVLCAweGVjOWEzYjc2VSwKKyAgICAweDQwNjAxMDIwVSwgMHg0N2VhZDhhZFUsIDB4YmQ2ZDY4ZDBVLCAweGJhZTdhMDVkVSwKKyAgICAweGZlODFiMTdmVSwgMHgyODNjMGExNFUsIDB4Yjk2YjY5ZDJVLCAweGFkNzU2Y2Q4VSwKKyAgICAweDM5YWI0OTkyVSwgMHhjZjI2ZmFlOVUsIDB4YzUyOTc2ZWNVLCAweDM3YTJjNDk1VSwKKyAgICAweDQyNjM5ZTIxVSwgMHg1NjdkOWIyYlUsIDB4YTU3OTZlZGNVLCAweDVlNzE5OTJmVSwKKyAgICAweDJmYjZjMjk5VSwgMHhlNjk1Yjc3M1UsIDB4NWE3Nzk4MmRVLCAweGNhYWZiYzY1VSwKKyAgICAweDA2MDU4ZjAzVSwgMHgyZTM5ODUxN1UsIDB4N2M0MjFmM2VVLCAweGVhOWZiNDc1VSwKKyAgICAweGM3MmFmOGVkVSwgMHg0NDY2MTEyMlUsIDB4YjhlNDJlNWNVLCAweDAwMDAwMDAwVSwKKyAgICAweDk0ZGUyNTRhVSwgMHg3MDQ4MWMzOFUsIDB4YThmYzJhNTRVLCAweGY0OGUzZDdhVSwKKyAgICAweDE0MWUwNTBhVSwgMHgyMWJmNGY5ZVUsIDB4ZjEwNzdiZjZVLCAweGYyOGJiMjc5VSwKKyAgICAweGM4YWMzMjY0VSwgMHg3YTQ3OTAzZFUsIDB4ODZjNWFmNDNVLCAweDY0NTYxOTMyVSwKKyAgICAweGI2ZWRhMzViVSwgMHhmYjA4ZjdmM1UsIDB4ZDEzNzczZTZVLCAweDRlNjk5ZDI3VSwKKyAgICAweDU0N2UxNTJhVSwgMHhjZDI1NzRlOFUsIDB4OWY1ZWVlYzFVLCAweDBmODZjYTg5VSwKKyAgICAweDQ2NjU5ZjIzVSwgMHgzYzIyMGYxZVUsIDB4NmM1YTFiMzZVLCAweGM5MjM3NWVhVSwKKyAgICAweDIyMzM4NjExVSwgMHgyYTNmODQxNVUsIDB4NGE2ZjljMjVVLCAweDM1YTE0YTk0VSwKKyAgICAweDY2NTU5NzMzVSwgMHg2ODVjMWEzNFUsIDB4ODk0MzY1Y2FVLCAweGZmMGVmNmYxVSwKKyAgICAweDkzNTRlZGM3VSwgMHgyNDM2MDkxMlUsIDB4ZDZiZGJiNmJVLCAweDk4ZDQyNjRjVSwKKyAgICAweDM2MmQ4MzFiVSwgMHg4YjQwZWJjYlUsIDB4YTE3ZjZmZGVVLCAweDNlMjE4MTFmVSwKKyAgICAweDEwMTgwNDA4VSwgMHhiNTYxNmFkNFUsIDB4MTE5NzQzODZVLCAweDA0MDYwMTAyVSwKKyAgICAweDVjNzIxNzJlVSwgMHhhMzdjZTFkZlUsIDB4MjYzNTg3MTNVLCAweGYzMDRmNWY3VSwKKyAgICAweDBlMDk4ZDA3VSwgMHhhYjcwZTNkYlUsIDB4OGNjYTIzNDZVLCAweDNhMjc4MDFkVSwKKyAgICAweDBkODU0NDg4VSwgMHg1ODc0MTYyY1UsIDB4ODU0OTY2Y2NVLCAweDg0YzYyMTQyVSwKKyAgICAweGRmM2VmZWUxVSwgMHg3M2M0ZDViN1UsIDB4YzRhNjMxNjJVLCAweDQzZWNkOWFmVSwKKyAgICAweGQ0YmUzNTZhVSwgMHg2MDUwMTgzMFUsIDB4MDgwYzAyMDRVLCAweDhkNDU2NGM4VSwKKyAgICAweGVmMTZmMmY5VSwgMHhlMzFjZjFmZlUsIDB4NDVlOTU2YWNVLCAweDEzOTRjZDg3VSwKKyAgICAweDMyMmI4MjE5VSwgMHgwNzhhYzg4ZFUsIDB4ZDJiYmJhNjlVLCAweGU3MWFmMGZkVSwKKyAgICAweDliNThlZmMzVSwgMHg4MzRjZTljZlUsIDB4ODc0YWU4Y2RVLCAweGQzMzRmZGU3VSwKKyAgICAweDFlMTE4OTBmVSwgMHg3YmM4ZDdiM1UsIDB4M2JhOGM3OTNVLCAweGVlOTliNTc3VSwKKyAgICAweGFhZmZhNDU1VSwgMHhiY2UyMmY1ZVUsIDB4NmU1OTk1MzdVLCAweDRjNmExMzI2VSwKKyAgICAweDJjM2EwYjE2VSwgMHhlYjEwZjNmYlUsIDB4YTc3YWUwZGRVLCAweGRjYjIzNzZlVSwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFQzWzI1Nl0gPSB7CisgICAgMHhmNWE2NTNhN1UsIDB4ZDA2YmJiZDNVLCAweDZlYmZkMWU2VSwgMHgzYmQ5ZTI3MVUsCisgICAgMHhkYTY3YmRkMFUsIDB4Y2Y4YTQ1YWNVLCAweGIzMjk5YTRkVSwgMHgwYmY5ZjI3OVUsCisgICAgMHg5Y2U4NzQzYVUsIDB4OGMwMzhmYzlVLCAweDQxN2UzZjkxVSwgMHgzMmQ3ZTVmY1UsCisgICAgMHg0NDc4M2MxZVUsIDB4OGYwMThlNDdVLCAweGU1NGRhODU0VSwgMHhhOWNlNjdiZFUsCisgICAgMHgwZjBhMDU4Y1UsIDB4ZjlhZTU3YTVVLCAweDAxZjVmNDdhVSwgMHgyMGNiZWJmYlUsCisgICAgMHg1NzkxYzY2M1UsIDB4YjdkYTZkYjhVLCAweGY0NTNhN2RkVSwgMHhjMjc3YjVkNFUsCisgICAgMHg2NGIzZDdlNVUsIDB4OGRmNjdiYjNVLCAweGE0MzM5N2M1VSwgMHhhM2MyNjFiZVUsCisgICAgMHhkMTllNGZhOVUsIDB4MTcxYTBkODhVLCAweDI4MzAxODBjVSwgMHhlYmIyNTlhMlUsCisgICAgMHg5NmU0NzIzOVUsIDB4Zjg1YmEzZGZVLCAweGY2YTQ1MjI5VSwgMHhlNjRmYTlkYVUsCisgICAgMHhmYWFjNTYyYlUsIDB4ZDc5YTRkYThVLCAweDgwMGI4YmNiVSwgMHhiNTJkOTg0Y1UsCisgICAgMHhhNzMxOTY0YlUsIDB4Y2M4ODQ0MjJVLCAweGRiOTI0OWFhVSwgMHhkODkwNDgyNFUsCisgICAgMHg5YjE5ODI0MVUsIDB4M2RkZGUwNzBVLCAweGYzYTI1MWE2VSwgMHgyY2MzZWZmOVUsCisgICAgMHhjMTc1YjQ1YVUsIDB4NzZhZmQ5ZTJVLCAweDg3ZmE3ZGIwVSwgMHhiNGQ4NmMzNlUsCisgICAgMHgxM2U5ZmE3ZFUsIDB4NjJiN2Q1ZTRVLCAweGFhY2M2NjMzVSwgMHgzOGRiZTNmZlUsCisgICAgMHg1ZDlkYzA2MFUsIDB4YzA4MDQwMjBVLCAweDMwMjAxMDA4VSwgMHgxZDE2MGI4YlUsCisgICAgMHhkOTY1YmM1ZVUsIDB4ZGQ5NjRiYWJVLCAweDFmZTFmZTdmVSwgMHgwZGZkZjA3OFUsCisgICAgMHgxNWVkZjg3Y1UsIDB4ZThiMDU4MmNVLCAweGVmNDFhZTU3VSwgMHhkNjZmYjlkMlUsCisgICAgMHhmMjU3YTVkY1UsIDB4NzNhOWRhNmRVLCAweDE5ZTVmYzdlVSwgMHgyZTM0MWEwZFUsCisgICAgMHhmNzUxYTY1M1UsIDB4NWY2YTM1OTRVLCAweGIwMmI5YmMzVSwgMHhmMGEwNTAyOFUsCisgICAgMHhkMjljNGUyN1UsIDB4MTQxODBjMDZVLCAweGRmNjFiZTVmVSwgMHhjOThlNDdhZFUsCisgICAgMHg0ZjgxY2U2N1UsIDB4ZDU2ZGI4NWNVLCAweGUzNDlhYTU1VSwgMHhhZDNkOTA0OFUsCisgICAgMHgyNDM4MWMwZVUsIDB4ZjE1NWE0NTJVLCAweDQ2OGZjOWVhVSwgMHg5MTE1ODQ0MlUsCisgICAgMHhjNzcxYjY1YlUsIDB4ZDM2OWJhNWRVLCAweGEwYzA2MDMwVSwgMHhjZDdkYjA1OFUsCisgICAgMHhmYjU5YTI1MVUsIDB4Y2I3OWIyNTlVLCAweDg4ZjA3ODNjVSwgMHhiOTI1OWM0ZVUsCisgICAgMHg5MGUwNzAzOFUsIDB4MWIxMjA5OGFVLCAweDMxZDVlNDcyVSwgMHg3ODUwMjgxNFUsCisgICAgMHg2OGJiZDNlN1UsIDB4YWUzZjkxYzZVLCAweGZlNWZhMWRlVSwgMHhmZDVkYTA1MFUsCisgICAgMHgwMzAyMDE4ZVUsIDB4NGI3MjM5OTJVLCAweGRjNjNiZmQxVSwgMHgyZmMxZWU3N1UsCisgICAgMHg0ZDc2M2I5M1UsIDB4ODMwOThhNDVVLCAweDdiNTIyOTlhVSwgMHg5ZTFmODFjZVUsCisgICAgMHhlZWI0NWEyZFUsIDB4MGEwYzA2MDNVLCAweDUxOTVjNDYyVSwgMHg5M2UyNzFiNlUsCisgICAgMHhiMWRlNmZiOVUsIDB4YTVjNjYzYmZVLCAweDUzNjIzMTk2VSwgMHg2N2IxZDY2YlUsCisgICAgMHg4MmZjN2UzZlUsIDB4MTIxYzBlMDdVLCAweDZjNDgyNDEyVSwgMHhjMzgyNDFhZVUsCisgICAgMHg5ZDFkODA0MFUsIDB4YjhkMDY4MzRVLCAweDg5MDU4YzQ2VSwgMHg4NGY4N2MzZVUsCisgICAgMHhlMDRiYWJkYlUsIDB4OTgxYjgzY2ZVLCAweDUyOTdjNWVjVSwgMHg5MjE3ODVjY1UsCisgICAgMHhiYzIzOWZjMVUsIDB4ZTFiZTVmYTFVLCAweGJhMjc5ZGMwVSwgMHhjZTdmYjFkNlUsCisgICAgMHg0ZTc0M2ExZFUsIDB4MDJmN2Y1ZjRVLCAweDViOTljMjYxVSwgMHg5YWVjNzYzYlUsCisgICAgMHg2MDQwMjAxMFUsIDB4ZWE0N2FkZDhVLCAweDZkYmRkMDY4VSwgMHhlN2JhNWRhMFUsCisgICAgMHg4MWZlN2ZiMVUsIDB4M2MyODE0MGFVLCAweDZiYjlkMjY5VSwgMHg3NWFkZDg2Y1UsCisgICAgMHhhYjM5OTI0OVUsIDB4MjZjZmU5ZmFVLCAweDI5YzVlYzc2VSwgMHhhMjM3OTVjNFUsCisgICAgMHg2MzQyMjE5ZVUsIDB4N2Q1NjJiOWJVLCAweDc5YTVkYzZlVSwgMHg3MTVlMmY5OVUsCisgICAgMHhiNjJmOTljMlUsIDB4OTVlNjczYjdVLCAweDc3NWEyZDk4VSwgMHhhZmNhNjViY1UsCisgICAgMHgwNTA2MDM4ZlUsIDB4MzkyZTE3ODVVLCAweDQyN2MzZTFmVSwgMHg5ZmVhNzViNFUsCisgICAgMHgyYWM3ZWRmOFUsIDB4NjY0NDIyMTFVLCAweGU0Yjg1YzJlVSwgMHgwMDAwMDAwMFUsCisgICAgMHhkZTk0NGEyNVUsIDB4NDg3MDM4MWNVLCAweGZjYTg1NDJhVSwgMHg4ZWY0N2EzZFUsCisgICAgMHgxZTE0MGEwNVUsIDB4YmYyMTllNGZVLCAweDA3ZjFmNjdiVSwgMHg4YmYyNzliMlUsCisgICAgMHhhY2M4NjQzMlUsIDB4NDc3YTNkOTBVLCAweGM1ODY0M2FmVSwgMHg1NjY0MzIxOVUsCisgICAgMHhlZGI2NWJhM1UsIDB4MDhmYmYzZjdVLCAweDM3ZDFlNjczVSwgMHg2OTRlMjc5ZFUsCisgICAgMHg3ZTU0MmExNVUsIDB4MjVjZGU4NzRVLCAweDVlOWZjMWVlVSwgMHg4NjBmODljYVUsCisgICAgMHg2NTQ2MjM5ZlUsIDB4MjIzYzFlMGZVLCAweDVhNmMzNjFiVSwgMHgyM2M5ZWE3NVUsCisgICAgMHgzMzIyMTE4NlUsIDB4M2YyYTE1ODRVLCAweDZmNGEyNTljVSwgMHhhMTM1OTQ0YVUsCisgICAgMHg1NTY2MzM5N1UsIDB4NWM2ODM0MWFVLCAweDQzODljYTY1VSwgMHgwZWZmZjFmNlUsCisgICAgMHg1NDkzYzdlZFUsIDB4MzYyNDEyMDlVLCAweGJkZDY2YmJiVSwgMHhkNDk4NGMyNlUsCisgICAgMHgyZDM2MWI4M1UsIDB4NDA4YmNiZWJVLCAweDdmYTFkZTZmVSwgMHgyMTNlMWY4MVUsCisgICAgMHgxODEwMDgwNFUsIDB4NjFiNWQ0NmFVLCAweDk3MTE4NjQzVSwgMHgwNjA0MDIwMVUsCisgICAgMHg3MjVjMmUxN1UsIDB4N2NhM2RmZTFVLCAweDM1MjYxMzg3VSwgMHgwNGYzZjdmNVUsCisgICAgMHgwOTBlMDc4ZFUsIDB4NzBhYmRiZTNVLCAweGNhOGM0NjIzVSwgMHgyNzNhMWQ4MFUsCisgICAgMHg4NTBkODg0NFUsIDB4NzQ1ODJjMTZVLCAweDQ5ODVjYzY2VSwgMHhjNjg0NDIyMVUsCisgICAgMHgzZWRmZTFmZVUsIDB4YzQ3M2I3ZDVVLCAweGE2YzQ2MjMxVSwgMHhlYzQzYWZkOVUsCisgICAgMHhiZWQ0NmEzNVUsIDB4NTA2MDMwMThVLCAweDBjMDgwNDAyVSwgMHg0NThkYzg2NFUsCisgICAgMHgxNmVmZjlmMlUsIDB4MWNlM2ZmZjFVLCAweGU5NDVhYzU2VSwgMHg5NDEzODdjZFUsCisgICAgMHgyYjMyMTk4MlUsIDB4OGEwNzhkYzhVLCAweGJiZDI2OWJhVSwgMHgxYWU3ZmRmMFUsCisgICAgMHg1ODliYzNlZlUsIDB4NGM4M2NmZTlVLCAweDRhODdjZGU4VSwgMHgzNGQzZTdmZFUsCisgICAgMHgxMTFlMGY4OVUsIDB4Yzg3YmIzZDdVLCAweGE4M2I5M2M3VSwgMHg5OWVlNzdiNVUsCisgICAgMHhmZmFhNTVhNFUsIDB4ZTJiYzVlMmZVLCAweDU5NmUzNzk1VSwgMHg2YTRjMjYxM1UsCisgICAgMHgzYTJjMTYwYlUsIDB4MTBlYmZiZjNVLCAweDdhYTdkZGUwVSwgMHhiMmRjNmUzN1UsCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBUNFsyNTZdID0geworICAgIDB4YTdhN2E3YTdVLCAweGQzZDNkM2QzVSwgMHhlNmU2ZTZlNlUsIDB4NzE3MTcxNzFVLAorICAgIDB4ZDBkMGQwZDBVLCAweGFjYWNhY2FjVSwgMHg0ZDRkNGQ0ZFUsIDB4Nzk3OTc5NzlVLAorICAgIDB4M2EzYTNhM2FVLCAweGM5YzljOWM5VSwgMHg5MTkxOTE5MVUsIDB4ZmNmY2ZjZmNVLAorICAgIDB4MWUxZTFlMWVVLCAweDQ3NDc0NzQ3VSwgMHg1NDU0NTQ1NFUsIDB4YmRiZGJkYmRVLAorICAgIDB4OGM4YzhjOGNVLCAweGE1YTVhNWE1VSwgMHg3YTdhN2E3YVUsIDB4ZmJmYmZiZmJVLAorICAgIDB4NjM2MzYzNjNVLCAweGI4YjhiOGI4VSwgMHhkZGRkZGRkZFUsIDB4ZDRkNGQ0ZDRVLAorICAgIDB4ZTVlNWU1ZTVVLCAweGIzYjNiM2IzVSwgMHhjNWM1YzVjNVUsIDB4YmViZWJlYmVVLAorICAgIDB4YTlhOWE5YTlVLCAweDg4ODg4ODg4VSwgMHgwYzBjMGMwY1UsIDB4YTJhMmEyYTJVLAorICAgIDB4MzkzOTM5MzlVLCAweGRmZGZkZmRmVSwgMHgyOTI5MjkyOVUsIDB4ZGFkYWRhZGFVLAorICAgIDB4MmIyYjJiMmJVLCAweGE4YThhOGE4VSwgMHhjYmNiY2JjYlUsIDB4NGM0YzRjNGNVLAorICAgIDB4NGI0YjRiNGJVLCAweDIyMjIyMjIyVSwgMHhhYWFhYWFhYVUsIDB4MjQyNDI0MjRVLAorICAgIDB4NDE0MTQxNDFVLCAweDcwNzA3MDcwVSwgMHhhNmE2YTZhNlUsIDB4ZjlmOWY5ZjlVLAorICAgIDB4NWE1YTVhNWFVLCAweGUyZTJlMmUyVSwgMHhiMGIwYjBiMFUsIDB4MzYzNjM2MzZVLAorICAgIDB4N2Q3ZDdkN2RVLCAweGU0ZTRlNGU0VSwgMHgzMzMzMzMzM1UsIDB4ZmZmZmZmZmZVLAorICAgIDB4NjA2MDYwNjBVLCAweDIwMjAyMDIwVSwgMHgwODA4MDgwOFUsIDB4OGI4YjhiOGJVLAorICAgIDB4NWU1ZTVlNWVVLCAweGFiYWJhYmFiVSwgMHg3ZjdmN2Y3ZlUsIDB4Nzg3ODc4NzhVLAorICAgIDB4N2M3YzdjN2NVLCAweDJjMmMyYzJjVSwgMHg1NzU3NTc1N1UsIDB4ZDJkMmQyZDJVLAorICAgIDB4ZGNkY2RjZGNVLCAweDZkNmQ2ZDZkVSwgMHg3ZTdlN2U3ZVUsIDB4MGQwZDBkMGRVLAorICAgIDB4NTM1MzUzNTNVLCAweDk0OTQ5NDk0VSwgMHhjM2MzYzNjM1UsIDB4MjgyODI4MjhVLAorICAgIDB4MjcyNzI3MjdVLCAweDA2MDYwNjA2VSwgMHg1ZjVmNWY1ZlUsIDB4YWRhZGFkYWRVLAorICAgIDB4Njc2NzY3NjdVLCAweDVjNWM1YzVjVSwgMHg1NTU1NTU1NVUsIDB4NDg0ODQ4NDhVLAorICAgIDB4MGUwZTBlMGVVLCAweDUyNTI1MjUyVSwgMHhlYWVhZWFlYVUsIDB4NDI0MjQyNDJVLAorICAgIDB4NWI1YjViNWJVLCAweDVkNWQ1ZDVkVSwgMHgzMDMwMzAzMFUsIDB4NTg1ODU4NThVLAorICAgIDB4NTE1MTUxNTFVLCAweDU5NTk1OTU5VSwgMHgzYzNjM2MzY1UsIDB4NGU0ZTRlNGVVLAorICAgIDB4MzgzODM4MzhVLCAweDhhOGE4YThhVSwgMHg3MjcyNzI3MlUsIDB4MTQxNDE0MTRVLAorICAgIDB4ZTdlN2U3ZTdVLCAweGM2YzZjNmM2VSwgMHhkZWRlZGVkZVUsIDB4NTA1MDUwNTBVLAorICAgIDB4OGU4ZThlOGVVLCAweDkyOTI5MjkyVSwgMHhkMWQxZDFkMVUsIDB4Nzc3Nzc3NzdVLAorICAgIDB4OTM5MzkzOTNVLCAweDQ1NDU0NTQ1VSwgMHg5YTlhOWE5YVUsIDB4Y2VjZWNlY2VVLAorICAgIDB4MmQyZDJkMmRVLCAweDAzMDMwMzAzVSwgMHg2MjYyNjI2MlUsIDB4YjZiNmI2YjZVLAorICAgIDB4YjliOWI5YjlVLCAweGJmYmZiZmJmVSwgMHg5Njk2OTY5NlUsIDB4NmI2YjZiNmJVLAorICAgIDB4M2YzZjNmM2ZVLCAweDA3MDcwNzA3VSwgMHgxMjEyMTIxMlUsIDB4YWVhZWFlYWVVLAorICAgIDB4NDA0MDQwNDBVLCAweDM0MzQzNDM0VSwgMHg0NjQ2NDY0NlUsIDB4M2UzZTNlM2VVLAorICAgIDB4ZGJkYmRiZGJVLCAweGNmY2ZjZmNmVSwgMHhlY2VjZWNlY1UsIDB4Y2NjY2NjY2NVLAorICAgIDB4YzFjMWMxYzFVLCAweGExYTFhMWExVSwgMHhjMGMwYzBjMFUsIDB4ZDZkNmQ2ZDZVLAorICAgIDB4MWQxZDFkMWRVLCAweGY0ZjRmNGY0VSwgMHg2MTYxNjE2MVUsIDB4M2IzYjNiM2JVLAorICAgIDB4MTAxMDEwMTBVLCAweGQ4ZDhkOGQ4VSwgMHg2ODY4Njg2OFUsIDB4YTBhMGEwYTBVLAorICAgIDB4YjFiMWIxYjFVLCAweDBhMGEwYTBhVSwgMHg2OTY5Njk2OVUsIDB4NmM2YzZjNmNVLAorICAgIDB4NDk0OTQ5NDlVLCAweGZhZmFmYWZhVSwgMHg3Njc2NzY3NlUsIDB4YzRjNGM0YzRVLAorICAgIDB4OWU5ZTllOWVVLCAweDliOWI5YjliVSwgMHg2ZTZlNmU2ZVUsIDB4OTk5OTk5OTlVLAorICAgIDB4YzJjMmMyYzJVLCAweGI3YjdiN2I3VSwgMHg5ODk4OTg5OFUsIDB4YmNiY2JjYmNVLAorICAgIDB4OGY4ZjhmOGZVLCAweDg1ODU4NTg1VSwgMHgxZjFmMWYxZlUsIDB4YjRiNGI0YjRVLAorICAgIDB4ZjhmOGY4ZjhVLCAweDExMTExMTExVSwgMHgyZTJlMmUyZVUsIDB4MDAwMDAwMDBVLAorICAgIDB4MjUyNTI1MjVVLCAweDFjMWMxYzFjVSwgMHgyYTJhMmEyYVUsIDB4M2QzZDNkM2RVLAorICAgIDB4MDUwNTA1MDVVLCAweDRmNGY0ZjRmVSwgMHg3YjdiN2I3YlUsIDB4YjJiMmIyYjJVLAorICAgIDB4MzIzMjMyMzJVLCAweDkwOTA5MDkwVSwgMHhhZmFmYWZhZlUsIDB4MTkxOTE5MTlVLAorICAgIDB4YTNhM2EzYTNVLCAweGY3ZjdmN2Y3VSwgMHg3MzczNzM3M1UsIDB4OWQ5ZDlkOWRVLAorICAgIDB4MTUxNTE1MTVVLCAweDc0NzQ3NDc0VSwgMHhlZWVlZWVlZVUsIDB4Y2FjYWNhY2FVLAorICAgIDB4OWY5ZjlmOWZVLCAweDBmMGYwZjBmVSwgMHgxYjFiMWIxYlUsIDB4NzU3NTc1NzVVLAorICAgIDB4ODY4Njg2ODZVLCAweDg0ODQ4NDg0VSwgMHg5YzljOWM5Y1UsIDB4NGE0YTRhNGFVLAorICAgIDB4OTc5Nzk3OTdVLCAweDFhMWExYTFhVSwgMHg2NTY1NjU2NVUsIDB4ZjZmNmY2ZjZVLAorICAgIDB4ZWRlZGVkZWRVLCAweDA5MDkwOTA5VSwgMHhiYmJiYmJiYlUsIDB4MjYyNjI2MjZVLAorICAgIDB4ODM4MzgzODNVLCAweGViZWJlYmViVSwgMHg2ZjZmNmY2ZlUsIDB4ODE4MTgxODFVLAorICAgIDB4MDQwNDA0MDRVLCAweDZhNmE2YTZhVSwgMHg0MzQzNDM0M1UsIDB4MDEwMTAxMDFVLAorICAgIDB4MTcxNzE3MTdVLCAweGUxZTFlMWUxVSwgMHg4Nzg3ODc4N1UsIDB4ZjVmNWY1ZjVVLAorICAgIDB4OGQ4ZDhkOGRVLCAweGUzZTNlM2UzVSwgMHgyMzIzMjMyM1UsIDB4ODA4MDgwODBVLAorICAgIDB4NDQ0NDQ0NDRVLCAweDE2MTYxNjE2VSwgMHg2NjY2NjY2NlUsIDB4MjEyMTIxMjFVLAorICAgIDB4ZmVmZWZlZmVVLCAweGQ1ZDVkNWQ1VSwgMHgzMTMxMzEzMVUsIDB4ZDlkOWQ5ZDlVLAorICAgIDB4MzUzNTM1MzVVLCAweDE4MTgxODE4VSwgMHgwMjAyMDIwMlUsIDB4NjQ2NDY0NjRVLAorICAgIDB4ZjJmMmYyZjJVLCAweGYxZjFmMWYxVSwgMHg1NjU2NTY1NlUsIDB4Y2RjZGNkY2RVLAorICAgIDB4ODI4MjgyODJVLCAweGM4YzhjOGM4VSwgMHhiYWJhYmFiYVUsIDB4ZjBmMGYwZjBVLAorICAgIDB4ZWZlZmVmZWZVLCAweGU5ZTllOWU5VSwgMHhlOGU4ZThlOFUsIDB4ZmRmZGZkZmRVLAorICAgIDB4ODk4OTg5ODlVLCAweGQ3ZDdkN2Q3VSwgMHhjN2M3YzdjN1UsIDB4YjViNWI1YjVVLAorICAgIDB4YTRhNGE0YTRVLCAweDJmMmYyZjJmVSwgMHg5NTk1OTU5NVUsIDB4MTMxMzEzMTNVLAorICAgIDB4MGIwYjBiMGJVLCAweGYzZjNmM2YzVSwgMHhlMGUwZTBlMFUsIDB4MzczNzM3MzdVLAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgVDVbMjU2XSA9IHsKKyAgICAweDAwMDAwMDAwVSwgMHgwMTAyMDYwOFUsIDB4MDIwNDBjMTBVLCAweDAzMDYwYTE4VSwKKyAgICAweDA0MDgxODIwVSwgMHgwNTBhMWUyOFUsIDB4MDYwYzE0MzBVLCAweDA3MGUxMjM4VSwKKyAgICAweDA4MTAzMDQwVSwgMHgwOTEyMzY0OFUsIDB4MGExNDNjNTBVLCAweDBiMTYzYTU4VSwKKyAgICAweDBjMTgyODYwVSwgMHgwZDFhMmU2OFUsIDB4MGUxYzI0NzBVLCAweDBmMWUyMjc4VSwKKyAgICAweDEwMjA2MDgwVSwgMHgxMTIyNjY4OFUsIDB4MTIyNDZjOTBVLCAweDEzMjY2YTk4VSwKKyAgICAweDE0Mjg3OGEwVSwgMHgxNTJhN2VhOFUsIDB4MTYyYzc0YjBVLCAweDE3MmU3MmI4VSwKKyAgICAweDE4MzA1MGMwVSwgMHgxOTMyNTZjOFUsIDB4MWEzNDVjZDBVLCAweDFiMzY1YWQ4VSwKKyAgICAweDFjMzg0OGUwVSwgMHgxZDNhNGVlOFUsIDB4MWUzYzQ0ZjBVLCAweDFmM2U0MmY4VSwKKyAgICAweDIwNDBjMDFkVSwgMHgyMTQyYzYxNVUsIDB4MjI0NGNjMGRVLCAweDIzNDZjYTA1VSwKKyAgICAweDI0NDhkODNkVSwgMHgyNTRhZGUzNVUsIDB4MjY0Y2Q0MmRVLCAweDI3NGVkMjI1VSwKKyAgICAweDI4NTBmMDVkVSwgMHgyOTUyZjY1NVUsIDB4MmE1NGZjNGRVLCAweDJiNTZmYTQ1VSwKKyAgICAweDJjNThlODdkVSwgMHgyZDVhZWU3NVUsIDB4MmU1Y2U0NmRVLCAweDJmNWVlMjY1VSwKKyAgICAweDMwNjBhMDlkVSwgMHgzMTYyYTY5NVUsIDB4MzI2NGFjOGRVLCAweDMzNjZhYTg1VSwKKyAgICAweDM0NjhiOGJkVSwgMHgzNTZhYmViNVUsIDB4MzY2Y2I0YWRVLCAweDM3NmViMmE1VSwKKyAgICAweDM4NzA5MGRkVSwgMHgzOTcyOTZkNVUsIDB4M2E3NDljY2RVLCAweDNiNzY5YWM1VSwKKyAgICAweDNjNzg4OGZkVSwgMHgzZDdhOGVmNVUsIDB4M2U3Yzg0ZWRVLCAweDNmN2U4MmU1VSwKKyAgICAweDQwODA5ZDNhVSwgMHg0MTgyOWIzMlUsIDB4NDI4NDkxMmFVLCAweDQzODY5NzIyVSwKKyAgICAweDQ0ODg4NTFhVSwgMHg0NThhODMxMlUsIDB4NDY4Yzg5MGFVLCAweDQ3OGU4ZjAyVSwKKyAgICAweDQ4OTBhZDdhVSwgMHg0OTkyYWI3MlUsIDB4NGE5NGExNmFVLCAweDRiOTZhNzYyVSwKKyAgICAweDRjOThiNTVhVSwgMHg0ZDlhYjM1MlUsIDB4NGU5Y2I5NGFVLCAweDRmOWViZjQyVSwKKyAgICAweDUwYTBmZGJhVSwgMHg1MWEyZmJiMlUsIDB4NTJhNGYxYWFVLCAweDUzYTZmN2EyVSwKKyAgICAweDU0YThlNTlhVSwgMHg1NWFhZTM5MlUsIDB4NTZhY2U5OGFVLCAweDU3YWVlZjgyVSwKKyAgICAweDU4YjBjZGZhVSwgMHg1OWIyY2JmMlUsIDB4NWFiNGMxZWFVLCAweDViYjZjN2UyVSwKKyAgICAweDVjYjhkNWRhVSwgMHg1ZGJhZDNkMlUsIDB4NWViY2Q5Y2FVLCAweDVmYmVkZmMyVSwKKyAgICAweDYwYzA1ZDI3VSwgMHg2MWMyNWIyZlUsIDB4NjJjNDUxMzdVLCAweDYzYzY1NzNmVSwKKyAgICAweDY0Yzg0NTA3VSwgMHg2NWNhNDMwZlUsIDB4NjZjYzQ5MTdVLCAweDY3Y2U0ZjFmVSwKKyAgICAweDY4ZDA2ZDY3VSwgMHg2OWQyNmI2ZlUsIDB4NmFkNDYxNzdVLCAweDZiZDY2NzdmVSwKKyAgICAweDZjZDg3NTQ3VSwgMHg2ZGRhNzM0ZlUsIDB4NmVkYzc5NTdVLCAweDZmZGU3ZjVmVSwKKyAgICAweDcwZTAzZGE3VSwgMHg3MWUyM2JhZlUsIDB4NzJlNDMxYjdVLCAweDczZTYzN2JmVSwKKyAgICAweDc0ZTgyNTg3VSwgMHg3NWVhMjM4ZlUsIDB4NzZlYzI5OTdVLCAweDc3ZWUyZjlmVSwKKyAgICAweDc4ZjAwZGU3VSwgMHg3OWYyMGJlZlUsIDB4N2FmNDAxZjdVLCAweDdiZjYwN2ZmVSwKKyAgICAweDdjZjgxNWM3VSwgMHg3ZGZhMTNjZlUsIDB4N2VmYzE5ZDdVLCAweDdmZmUxZmRmVSwKKyAgICAweDgwMWQyNzc0VSwgMHg4MTFmMjE3Y1UsIDB4ODIxOTJiNjRVLCAweDgzMWIyZDZjVSwKKyAgICAweDg0MTUzZjU0VSwgMHg4NTE3Mzk1Y1UsIDB4ODYxMTMzNDRVLCAweDg3MTMzNTRjVSwKKyAgICAweDg4MGQxNzM0VSwgMHg4OTBmMTEzY1UsIDB4OGEwOTFiMjRVLCAweDhiMGIxZDJjVSwKKyAgICAweDhjMDUwZjE0VSwgMHg4ZDA3MDkxY1UsIDB4OGUwMTAzMDRVLCAweDhmMDMwNTBjVSwKKyAgICAweDkwM2Q0N2Y0VSwgMHg5MTNmNDFmY1UsIDB4OTIzOTRiZTRVLCAweDkzM2I0ZGVjVSwKKyAgICAweDk0MzU1ZmQ0VSwgMHg5NTM3NTlkY1UsIDB4OTYzMTUzYzRVLCAweDk3MzM1NWNjVSwKKyAgICAweDk4MmQ3N2I0VSwgMHg5OTJmNzFiY1UsIDB4OWEyOTdiYTRVLCAweDliMmI3ZGFjVSwKKyAgICAweDljMjU2Zjk0VSwgMHg5ZDI3Njk5Y1UsIDB4OWUyMTYzODRVLCAweDlmMjM2NThjVSwKKyAgICAweGEwNWRlNzY5VSwgMHhhMTVmZTE2MVUsIDB4YTI1OWViNzlVLCAweGEzNWJlZDcxVSwKKyAgICAweGE0NTVmZjQ5VSwgMHhhNTU3Zjk0MVUsIDB4YTY1MWYzNTlVLCAweGE3NTNmNTUxVSwKKyAgICAweGE4NGRkNzI5VSwgMHhhOTRmZDEyMVUsIDB4YWE0OWRiMzlVLCAweGFiNGJkZDMxVSwKKyAgICAweGFjNDVjZjA5VSwgMHhhZDQ3YzkwMVUsIDB4YWU0MWMzMTlVLCAweGFmNDNjNTExVSwKKyAgICAweGIwN2Q4N2U5VSwgMHhiMTdmODFlMVUsIDB4YjI3OThiZjlVLCAweGIzN2I4ZGYxVSwKKyAgICAweGI0NzU5ZmM5VSwgMHhiNTc3OTljMVUsIDB4YjY3MTkzZDlVLCAweGI3NzM5NWQxVSwKKyAgICAweGI4NmRiN2E5VSwgMHhiOTZmYjFhMVUsIDB4YmE2OWJiYjlVLCAweGJiNmJiZGIxVSwKKyAgICAweGJjNjVhZjg5VSwgMHhiZDY3YTk4MVUsIDB4YmU2MWEzOTlVLCAweGJmNjNhNTkxVSwKKyAgICAweGMwOWRiYTRlVSwgMHhjMTlmYmM0NlUsIDB4YzI5OWI2NWVVLCAweGMzOWJiMDU2VSwKKyAgICAweGM0OTVhMjZlVSwgMHhjNTk3YTQ2NlUsIDB4YzY5MWFlN2VVLCAweGM3OTNhODc2VSwKKyAgICAweGM4OGQ4YTBlVSwgMHhjOThmOGMwNlUsIDB4Y2E4OTg2MWVVLCAweGNiOGI4MDE2VSwKKyAgICAweGNjODU5MjJlVSwgMHhjZDg3OTQyNlUsIDB4Y2U4MTllM2VVLCAweGNmODM5ODM2VSwKKyAgICAweGQwYmRkYWNlVSwgMHhkMWJmZGNjNlUsIDB4ZDJiOWQ2ZGVVLCAweGQzYmJkMGQ2VSwKKyAgICAweGQ0YjVjMmVlVSwgMHhkNWI3YzRlNlUsIDB4ZDZiMWNlZmVVLCAweGQ3YjNjOGY2VSwKKyAgICAweGQ4YWRlYThlVSwgMHhkOWFmZWM4NlUsIDB4ZGFhOWU2OWVVLCAweGRiYWJlMDk2VSwKKyAgICAweGRjYTVmMmFlVSwgMHhkZGE3ZjRhNlUsIDB4ZGVhMWZlYmVVLCAweGRmYTNmOGI2VSwKKyAgICAweGUwZGQ3YTUzVSwgMHhlMWRmN2M1YlUsIDB4ZTJkOTc2NDNVLCAweGUzZGI3MDRiVSwKKyAgICAweGU0ZDU2MjczVSwgMHhlNWQ3NjQ3YlUsIDB4ZTZkMTZlNjNVLCAweGU3ZDM2ODZiVSwKKyAgICAweGU4Y2Q0YTEzVSwgMHhlOWNmNGMxYlUsIDB4ZWFjOTQ2MDNVLCAweGViY2I0MDBiVSwKKyAgICAweGVjYzU1MjMzVSwgMHhlZGM3NTQzYlUsIDB4ZWVjMTVlMjNVLCAweGVmYzM1ODJiVSwKKyAgICAweGYwZmQxYWQzVSwgMHhmMWZmMWNkYlUsIDB4ZjJmOTE2YzNVLCAweGYzZmIxMGNiVSwKKyAgICAweGY0ZjUwMmYzVSwgMHhmNWY3MDRmYlUsIDB4ZjZmMTBlZTNVLCAweGY3ZjMwOGViVSwKKyAgICAweGY4ZWQyYTkzVSwgMHhmOWVmMmM5YlUsIDB4ZmFlOTI2ODNVLCAweGZiZWIyMDhiVSwKKyAgICAweGZjZTUzMmIzVSwgMHhmZGU3MzRiYlUsIDB4ZmVlMTNlYTNVLCAweGZmZTMzOGFiVSwKK307CisKKy8qKgorICogVGhlIHJvdW5kIGNvbnN0YW50cy4KKyAqLworc3RhdGljIGNvbnN0IHVsb25nMzIgcmNbXSA9IHsKKyAgIDB4YTdkM2U2NzFVLCAweGQwYWM0ZDc5VSwgMHgzYWM5OTFmY1UsIDB4MWU0NzU0YmRVLAorICAgMHg4Y2E1N2FmYlUsIDB4NjNiOGRkZDRVLCAweGU1YjNjNWJlVSwgMHhhOTg4MGNhMlUsCisgICAweDM5ZGYyOWRhVSwgMHgyYmE4Y2I0Y1UsIDB4NGIyMmFhMjRVLCAweDQxNzBhNmY5VSwKKyAgIDB4NWFlMmIwMzZVLCAweDdkZTQzM2ZmVSwgMHg2MDIwMDg4YlUsIDB4NWVhYjdmNzhVLAorICAgMHg3YzJjNTdkMlUsIDB4ZGM2ZDdlMGRVLCAweDUzOTRjMzI4VSwKK307CisKKyNlbmRpZgorCisgLyoqCisgICAgSW5pdGlhbGl6ZSB0aGUgQW51YmlzIGJsb2NrIGNpcGhlcgorICAgIEBwYXJhbSBrZXkgVGhlIHN5bW1ldHJpYyBrZXkgeW91IHdpc2ggdG8gcGFzcworICAgIEBwYXJhbSBrZXlsZW4gVGhlIGtleSBsZW5ndGggaW4gYnl0ZXMKKyAgICBAcGFyYW0gbnVtX3JvdW5kcyBUaGUgbnVtYmVyIG9mIHJvdW5kcyBkZXNpcmVkICgwIGZvciBkZWZhdWx0KQorICAgIEBwYXJhbSBza2V5IFRoZSBrZXkgaW4gYXMgc2NoZWR1bGVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgKi8KKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyBpbnQgX2FudWJpc19zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2Vsc2UKK2ludCAgYW51YmlzX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZW5kaWYKK3sKKyAgIGludCBOLCBSLCBpLCBwb3MsIHI7CisgICB1bG9uZzMyIGthcHBhW01BWF9OXTsKKyAgIHVsb25nMzIgaW50ZXJbTUFYX05dOworICAgdWxvbmczMiB2LCBLMCwgSzEsIEsyLCBLMzsKKworICAgTFRDX0FSR0NISyhrZXkgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworCisgICAvKiBWYWxpZCBzaXplcyAoaW4gYnl0ZXMpIGFyZSAxNiwgMjAsIDI0LCAyOCwgMzIsIDM2LCBhbmQgNDAuICovCisgICBpZiAoKGtleWxlbiAmIDMpIHx8IChrZXlsZW4gPCAxNikgfHwgKGtleWxlbiA+IDQwKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0KKyAgIHNrZXktPmFudWJpcy5rZXlCaXRzID0ga2V5bGVuKjg7CisKKyAgIC8qCisgICAgKiBkZXRlcm1pbmUgdGhlIE4gbGVuZ3RoIHBhcmFtZXRlcjoKKyAgICAqIChOLkIuIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUga2V5IGxlbmd0aCBpcyB2YWxpZCEpCisgICAgKi8KKyAgIE4gPSBza2V5LT5hbnViaXMua2V5Qml0cyA+PiA1OworCisgICAvKgorICAgICogZGV0ZXJtaW5lIG51bWJlciBvZiByb3VuZHMgZnJvbSBrZXkgc2l6ZToKKyAgICAqLworICAgc2tleS0+YW51YmlzLlIgPSBSID0gOCArIE47CisKKyAgIGlmIChudW1fcm91bmRzICE9IDAgJiYgbnVtX3JvdW5kcyAhPSBza2V5LT5hbnViaXMuUikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgfQorCisgICAgLyoKKyAgICAqIG1hcCBjaXBoZXIga2V5IHRvIGluaXRpYWwga2V5IHN0YXRlIChtdSk6CisgICAgKi8KKyAgICBmb3IgKGkgPSAwLCBwb3MgPSAwOyBpIDwgTjsgaSsrLCBwb3MgKz0gNCkgeworICAgICAga2FwcGFbaV0gPQorICAgICAgICAgKGtleVtwb3MgICAgXSA8PCAyNCkgXgorICAgICAgICAgKGtleVtwb3MgKyAxXSA8PCAxNikgXgorICAgICAgICAgKGtleVtwb3MgKyAyXSA8PCAgOCkgXgorICAgICAgICAgKGtleVtwb3MgKyAzXSAgICAgICk7CisgICAgfQorCisgICAvKgorICAgICogZ2VuZXJhdGUgUiArIDEgcm91bmQga2V5czoKKyAgICAqLworICAgZm9yIChyID0gMDsgciA8PSBSOyByKyspIHsKKyAgICAgIC8qCisgICAgICAgKiBnZW5lcmF0ZSByLXRoIHJvdW5kIGtleSBLXnI6CisgICAgICAgKi8KKyAgICAgIEswID0gVDRbKGthcHBhW04gLSAxXSA+PiAyNCkgJiAweGZmXTsKKyAgICAgIEsxID0gVDRbKGthcHBhW04gLSAxXSA+PiAxNikgJiAweGZmXTsKKyAgICAgIEsyID0gVDRbKGthcHBhW04gLSAxXSA+PiAgOCkgJiAweGZmXTsKKyAgICAgIEszID0gVDRbKGthcHBhW04gLSAxXSAgICAgICkgJiAweGZmXTsKKyAgICAgIGZvciAoaSA9IE4gLSAyOyBpID49IDA7IGktLSkgeworICAgICAgICAgSzAgPSBUNFsoa2FwcGFbaV0gPj4gMjQpICAmIDB4ZmZdIF4KKyAgICAgICAgICAgIChUNVsoSzAgPj4gMjQpICYgMHhmZl0gJiAweGZmMDAwMDAwVSkgXgorICAgICAgICAgICAgKFQ1WyhLMCA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDBVKSBeCisgICAgICAgICAgICAoVDVbKEswID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMFUpIF4KKyAgICAgICAgICAgIChUNVsoSzAgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmVSk7CisgICAgICAgICBLMSA9IFQ0WyhrYXBwYVtpXSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICAoVDVbKEsxID4+IDI0KSAmIDB4ZmZdICYgMHhmZjAwMDAwMFUpIF4KKyAgICAgICAgICAgIChUNVsoSzEgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwVSkgXgorICAgICAgICAgICAgKFQ1WyhLMSA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDBVKSBeCisgICAgICAgICAgICAoVDVbKEsxICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwMDBmZlUpOworICAgICAgICAgSzIgPSBUNFsoa2FwcGFbaV0gPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgKFQ1WyhLMiA+PiAyNCkgJiAweGZmXSAmIDB4ZmYwMDAwMDBVKSBeCisgICAgICAgICAgICAoVDVbKEsyID4+IDE2KSAmIDB4ZmZdICYgMHgwMGZmMDAwMFUpIF4KKyAgICAgICAgICAgIChUNVsoSzIgPj4gIDgpICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXgorICAgICAgICAgICAgKFQ1WyhLMiAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmZVKTsKKyAgICAgICAgIEszID0gVDRbKGthcHBhW2ldICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIChUNVsoSzMgPj4gMjQpICYgMHhmZl0gJiAweGZmMDAwMDAwVSkgXgorICAgICAgICAgICAgKFQ1WyhLMyA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDBVKSBeCisgICAgICAgICAgICAoVDVbKEszID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMFUpIF4KKyAgICAgICAgICAgIChUNVsoSzMgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmVSk7CisgICAgICB9CisgICAgICAvKgorICAgICAgLS0gdGhpcyBpcyB0aGUgY29kZSB0byB1c2Ugd2l0aCB0aGUgbGFyZ2UgVSB0YWJsZXM6CisgICAgICBLMCA9IEsxID0gSzIgPSBLMyA9IDA7CisgICAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKSB7CisgICAgICAgICBLMCBePSBVW2ldWyhrYXBwYVtpXSA+PiAyNCkgJiAweGZmXTsKKyAgICAgICAgIEsxIF49IFVbaV1bKGthcHBhW2ldID4+IDE2KSAmIDB4ZmZdOworICAgICAgICAgSzIgXj0gVVtpXVsoa2FwcGFbaV0gPj4gIDgpICYgMHhmZl07CisgICAgICAgICBLMyBePSBVW2ldWyhrYXBwYVtpXSAgICAgICkgJiAweGZmXTsKKyAgICAgIH0KKyAgICAgICovCisgICAgICBza2V5LT5hbnViaXMucm91bmRLZXlFbmNbcl1bMF0gPSBLMDsKKyAgICAgIHNrZXktPmFudWJpcy5yb3VuZEtleUVuY1tyXVsxXSA9IEsxOworICAgICAgc2tleS0+YW51YmlzLnJvdW5kS2V5RW5jW3JdWzJdID0gSzI7CisgICAgICBza2V5LT5hbnViaXMucm91bmRLZXlFbmNbcl1bM10gPSBLMzsKKworICAgICAgLyoKKyAgICAgICAqIGNvbXB1dGUga2FwcGFee3IrMX0gZnJvbSBrYXBwYV5yOgorICAgICAgICovCisgICAgICBpZiAociA9PSBSKSB7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspIHsKKyAgICAgICAgIGludCBqID0gaTsKKyAgICAgICAgIGludGVyW2ldICA9IFQwWyhrYXBwYVtqLS1dID4+IDI0KSAmIDB4ZmZdOyBpZiAoaiA8IDApIGogPSBOIC0gMTsKKyAgICAgICAgIGludGVyW2ldIF49IFQxWyhrYXBwYVtqLS1dID4+IDE2KSAmIDB4ZmZdOyBpZiAoaiA8IDApIGogPSBOIC0gMTsKKyAgICAgICAgIGludGVyW2ldIF49IFQyWyhrYXBwYVtqLS1dID4+ICA4KSAmIDB4ZmZdOyBpZiAoaiA8IDApIGogPSBOIC0gMTsKKyAgICAgICAgIGludGVyW2ldIF49IFQzWyhrYXBwYVtqICBdICAgICAgKSAmIDB4ZmZdOworICAgICAgfQorICAgICAga2FwcGFbMF0gPSBpbnRlclswXSBeIHJjW3JdOworICAgICAgZm9yIChpID0gMTsgaSA8IE47IGkrKykgeworICAgICAgICAga2FwcGFbaV0gPSBpbnRlcltpXTsKKyAgICAgIH0KKyAgIH0KKworICAgLyoKKyAgICAqIGdlbmVyYXRlIGludmVyc2Uga2V5IHNjaGVkdWxlOiBLJ14wID0gS15SLCBLJ15SID0gS14wLCBLJ15yID0gdGhldGEoS157Ui1yfSk6CisgICAgKi8KKyAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgIHNrZXktPmFudWJpcy5yb3VuZEtleURlY1swXVtpXSA9IHNrZXktPmFudWJpcy5yb3VuZEtleUVuY1tSXVtpXTsKKyAgICAgIHNrZXktPmFudWJpcy5yb3VuZEtleURlY1tSXVtpXSA9IHNrZXktPmFudWJpcy5yb3VuZEtleUVuY1swXVtpXTsKKyAgIH0KKyAgIGZvciAociA9IDE7IHIgPCBSOyByKyspIHsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgIHYgPSBza2V5LT5hbnViaXMucm91bmRLZXlFbmNbUiAtIHJdW2ldOworICAgICAgICAgc2tleS0+YW51YmlzLnJvdW5kS2V5RGVjW3JdW2ldID0KKyAgICAgICAgICAgIFQwW1Q0Wyh2ID4+IDI0KSAmIDB4ZmZdICYgMHhmZl0gXgorICAgICAgICAgICAgVDFbVDRbKHYgPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICAgICBUMltUNFsodiA+PiAgOCkgJiAweGZmXSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFQzW1Q0Wyh2ICAgICAgKSAmIDB4ZmZdICYgMHhmZl07CisgICAgICB9CisgICB9CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworaW50ICBhbnViaXNfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgaW50IGVycjsKKyAgZXJyID0gX2FudWJpc19zZXR1cChrZXksIGtleWxlbiwgbnVtX3JvdW5kcywgc2tleSk7CisgIGJ1cm5fc3RhY2soc2l6ZW9mKGludCkgKiA1ICsgc2l6ZW9mKHVsb25nMzIpICogKE1BWF9OICsgTUFYX04gKyA1KSk7CisgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKyAgCisKK3N0YXRpYyB2b2lkIGFudWJpc19jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwbGFpbnRleHQsIHVuc2lnbmVkIGNoYXIgKmNpcGhlcnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWxvbmczMiByb3VuZEtleVsxOCArIDFdWzRdLCBpbnQgUikgeworICAgaW50IGksIHBvcywgcjsKKyAgIHVsb25nMzIgc3RhdGVbNF07CisgICB1bG9uZzMyIGludGVyWzRdOworCisgICAgLyoKKyAgICAqIG1hcCBwbGFpbnRleHQgYmxvY2sgdG8gY2lwaGVyIHN0YXRlIChtdSkKKyAgICAqIGFuZCBhZGQgaW5pdGlhbCByb3VuZCBrZXkgKHNpZ21hW0teMF0pOgorICAgICovCisgICAgZm9yIChpID0gMCwgcG9zID0gMDsgaSA8IDQ7IGkrKywgcG9zICs9IDQpIHsKKyAgICAgIHN0YXRlW2ldID0KKyAgICAgICAgIChwbGFpbnRleHRbcG9zICAgIF0gPDwgMjQpIF4KKyAgICAgICAgIChwbGFpbnRleHRbcG9zICsgMV0gPDwgMTYpIF4KKyAgICAgICAgIChwbGFpbnRleHRbcG9zICsgMl0gPDwgIDgpIF4KKyAgICAgICAgIChwbGFpbnRleHRbcG9zICsgM10gICAgICApIF4KKyAgICAgICAgIHJvdW5kS2V5WzBdW2ldOworICAgIH0KKworICAgIC8qCisgICAgICogUiAtIDEgZnVsbCByb3VuZHM6CisgICAgICovCisgICAgZm9yIChyID0gMTsgciA8IFI7IHIrKykgeworICAgICAgaW50ZXJbMF0gPQorICAgICAgICAgVDBbKHN0YXRlWzBdID4+IDI0KSAmIDB4ZmZdIF4KKyAgICAgICAgIFQxWyhzdGF0ZVsxXSA+PiAyNCkgJiAweGZmXSBeCisgICAgICAgICBUMlsoc3RhdGVbMl0gPj4gMjQpICYgMHhmZl0gXgorICAgICAgICAgVDNbKHN0YXRlWzNdID4+IDI0KSAmIDB4ZmZdIF4KKyAgICAgICAgIHJvdW5kS2V5W3JdWzBdOworICAgICAgaW50ZXJbMV0gPQorICAgICAgICAgVDBbKHN0YXRlWzBdID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgIFQxWyhzdGF0ZVsxXSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICBUMlsoc3RhdGVbMl0gPj4gMTYpICYgMHhmZl0gXgorICAgICAgICAgVDNbKHN0YXRlWzNdID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgIHJvdW5kS2V5W3JdWzFdOworICAgICAgaW50ZXJbMl0gPQorICAgICAgICAgVDBbKHN0YXRlWzBdID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgIFQxWyhzdGF0ZVsxXSA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICBUMlsoc3RhdGVbMl0gPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgVDNbKHN0YXRlWzNdID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgIHJvdW5kS2V5W3JdWzJdOworICAgICAgaW50ZXJbM10gPQorICAgICAgICAgVDBbKHN0YXRlWzBdICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgIFQxWyhzdGF0ZVsxXSAgICAgICkgJiAweGZmXSBeCisgICAgICAgICBUMlsoc3RhdGVbMl0gICAgICApICYgMHhmZl0gXgorICAgICAgICAgVDNbKHN0YXRlWzNdICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgIHJvdW5kS2V5W3JdWzNdOworICAgICAgc3RhdGVbMF0gPSBpbnRlclswXTsKKyAgICAgIHN0YXRlWzFdID0gaW50ZXJbMV07CisgICAgICBzdGF0ZVsyXSA9IGludGVyWzJdOworICAgICAgc3RhdGVbM10gPSBpbnRlclszXTsKKyAgICB9CisKKyAgICAvKgorICAgICogbGFzdCByb3VuZDoKKyAgICAqLworICAgaW50ZXJbMF0gPQorICAgICAgKFQwWyhzdGF0ZVswXSA+PiAyNCkgJiAweGZmXSAmIDB4ZmYwMDAwMDBVKSBeCisgICAgICAoVDFbKHN0YXRlWzFdID4+IDI0KSAmIDB4ZmZdICYgMHgwMGZmMDAwMFUpIF4KKyAgICAgIChUMlsoc3RhdGVbMl0gPj4gMjQpICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXgorICAgICAgKFQzWyhzdGF0ZVszXSA+PiAyNCkgJiAweGZmXSAmIDB4MDAwMDAwZmZVKSBeCisgICAgICByb3VuZEtleVtSXVswXTsKKyAgIGludGVyWzFdID0KKyAgICAgIChUMFsoc3RhdGVbMF0gPj4gMTYpICYgMHhmZl0gJiAweGZmMDAwMDAwVSkgXgorICAgICAgKFQxWyhzdGF0ZVsxXSA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDBVKSBeCisgICAgICAoVDJbKHN0YXRlWzJdID4+IDE2KSAmIDB4ZmZdICYgMHgwMDAwZmYwMFUpIF4KKyAgICAgIChUM1soc3RhdGVbM10gPj4gMTYpICYgMHhmZl0gJiAweDAwMDAwMGZmVSkgXgorICAgICAgcm91bmRLZXlbUl1bMV07CisgICBpbnRlclsyXSA9CisgICAgICAoVDBbKHN0YXRlWzBdID4+ICA4KSAmIDB4ZmZdICYgMHhmZjAwMDAwMFUpIF4KKyAgICAgIChUMVsoc3RhdGVbMV0gPj4gIDgpICYgMHhmZl0gJiAweDAwZmYwMDAwVSkgXgorICAgICAgKFQyWyhzdGF0ZVsyXSA+PiAgOCkgJiAweGZmXSAmIDB4MDAwMGZmMDBVKSBeCisgICAgICAoVDNbKHN0YXRlWzNdID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwMDBmZlUpIF4KKyAgICAgIHJvdW5kS2V5W1JdWzJdOworICAgaW50ZXJbM10gPQorICAgICAgKFQwWyhzdGF0ZVswXSAgICAgICkgJiAweGZmXSAmIDB4ZmYwMDAwMDBVKSBeCisgICAgICAoVDFbKHN0YXRlWzFdICAgICAgKSAmIDB4ZmZdICYgMHgwMGZmMDAwMFUpIF4KKyAgICAgIChUMlsoc3RhdGVbMl0gICAgICApICYgMHhmZl0gJiAweDAwMDBmZjAwVSkgXgorICAgICAgKFQzWyhzdGF0ZVszXSAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmZVKSBeCisgICAgICByb3VuZEtleVtSXVszXTsKKworICAgLyoKKyAgICAqIG1hcCBjaXBoZXIgc3RhdGUgdG8gY2lwaGVydGV4dCBibG9jayAobXVeey0xfSk6CisgICAgKi8KKyAgICBmb3IgKGkgPSAwLCBwb3MgPSAwOyBpIDwgNDsgaSsrLCBwb3MgKz0gNCkgeworICAgICAgICB1bG9uZzMyIHcgPSBpbnRlcltpXTsKKyAgICAgICAgY2lwaGVydGV4dFtwb3MgICAgXSA9ICh1bnNpZ25lZCBjaGFyKSh3ID4+IDI0KTsKKyAgICAgICAgY2lwaGVydGV4dFtwb3MgKyAxXSA9ICh1bnNpZ25lZCBjaGFyKSh3ID4+IDE2KTsKKyAgICAgICAgY2lwaGVydGV4dFtwb3MgKyAyXSA9ICh1bnNpZ25lZCBjaGFyKSh3ID4+ICA4KTsKKyAgICAgICAgY2lwaGVydGV4dFtwb3MgKyAzXSA9ICh1bnNpZ25lZCBjaGFyKSh3ICAgICAgKTsKKyAgICB9Cit9CisKKy8qKgorICBFbmNyeXB0cyBhIGJsb2NrIG9mIHRleHQgd2l0aCBBbnViaXMKKyAgQHBhcmFtIHB0IFRoZSBpbnB1dCBwbGFpbnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gY3QgVGhlIG91dHB1dCBjaXBoZXJ0ZXh0ICgxNiBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGFudWJpc19lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisgICBhbnViaXNfY3J5cHQocHQsIGN0LCBza2V5LT5hbnViaXMucm91bmRLZXlFbmMsIHNrZXktPmFudWJpcy5SKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIERlY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIEFudWJpcworICBAcGFyYW0gY3QgVGhlIGlucHV0IGNpcGhlcnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gcHQgVGhlIG91dHB1dCBwbGFpbnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZCAKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGFudWJpc19lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisgICBhbnViaXNfY3J5cHQoY3QsIHB0LCBza2V5LT5hbnViaXMucm91bmRLZXlEZWMsIHNrZXktPmFudWJpcy5SKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIFBlcmZvcm1zIGEgc2VsZi10ZXN0IG9mIHRoZSBBbnViaXMgYmxvY2sgY2lwaGVyCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgZnVuY3Rpb25hbCwgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdCBoYXMgYmVlbiBkaXNhYmxlZAorKi8KK2ludCBhbnViaXNfdGVzdCh2b2lkKQoreworI2lmICFkZWZpbmVkKExUQ19URVNUKQorICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCB0ZXN0IHsKKyAgICAgaW50IGtleWxlbjsKKyAgICAgdW5zaWduZWQgY2hhciBwdFsxNl0sIGN0WzE2XSwga2V5WzQwXTsKKyAgfSB0ZXN0c1tdID0geworI2lmbmRlZiBBTlVCSVNfVFdFQUsKKyAgLyoqKiogT1JJR0lOQUwgQU5VQklTICoqKiovCisgIC8qIDEyOCBiaXQga2V5cyAqLworeworICAgMTYsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHhGMCwgMHg2OCwgMHg2MCwgMHhGQywgMHg2NywgMHgzMCwgMHhFOCwgMHgxOCwgCisgICAgIDB4RjEsIDB4MzIsIDB4QzcsIDB4OEEsIDB4RjQsIDB4MTMsIDB4MkEsIDB4RkUgfSwKKyAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9Cit9LCB7CisgICAxNiwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweEE4LCAweDY2LCAweDg0LCAweDgwLCAweDA3LCAweDc0LCAweDVDLCAweDg5LCAKKyAgICAgMHhGQywgMHg1RSwgMHhCNSwgMHhCQSwgMHhENCwgMHhGRSwgMHgzMiwgMHg2RCB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK30sCisKKyAgIC8qIDE2MC1iaXQga2V5cyAqLworeworICAgMjAsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHhCRCwgMHg1RSwgMHgzMiwgMHhCRSwgMHg1MSwgMHg2NywgMHhBOCwgMHhFMiwKKyAgICAgMHg3MiwgMHhENywgMHg5NSwgMHgwRiwgMHg4MywgMHhDNiwgMHg4QywgMHgzMSB9LAorICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK30sIHsKKyAgIDIwLAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4NEMsIDB4MUYsIDB4ODYsIDB4MkUsIDB4MTEsIDB4RUIsIDB4Q0UsIDB4RUIsCisgICAgIDB4RkUsIDB4QjksIDB4NzMsIDB4QzksIDB4REYsIDB4RUYsIDB4N0EsIDB4REIgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9Cit9LAorCisgIC8qIDE5Mi1iaXQga2V5cyAqLworeworICAgMjQsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHgxNywgMHhBQywgMHg1NywgMHg0NCwgMHg5RCwgMHg1OSwgMHg2MSwgMHg2NiwgCisgICAgIDB4RDAsIDB4QzcsIDB4OUUsIDB4MDQsIDB4N0MsIDB4QzcsIDB4NTgsIDB4RjAgfSwKKyAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9Cit9LCB7CisgICAyNCwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDcxLCAweDUyLCAweEI0LCAweEVCLCAweDFELCAweEFBLCAweDM2LCAweEZELCAKKyAgICAgMHg1NywgMHgxNCwgMHg1RiwgMHg1NywgMHgwNCwgMHg5RiwgMHg3MCwgMHg3NCB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK30sCisKKyAgLyogMjI0LWJpdCBrZXlzICovCit7CisgICAyOCwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweEEyLCAweEYwLCAweEE2LCAweEI5LCAweDE3LCAweDkzLCAweDJBLCAweDNCLCAKKyAgICAgMHhFRiwgMHgwOCwgMHhFOCwgMHg3QSwgMHg1OCwgMHhENiwgMHhGOCwgMHg1MyB9LAorICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK30sIHsKKyAgIDI4LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4RjAsIDB4Q0EsIDB4RkMsIDB4NzgsIDB4OEIsIDB4NEIsIDB4NEUsIDB4NTMsIAorICAgICAweDhCLCAweEM0LCAweDMyLCAweDZBLCAweEY1LCAweEI5LCAweDFCLCAweDVGIH0sCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQorfSwKKworICAvKiAyNTYtYml0IGtleXMgKi8KK3sKKyAgIDMyLAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4RTAsIDB4ODYsIDB4QUMsIDB4NDUsIDB4NkIsIDB4M0MsIDB4RTUsIDB4MTMsIAorICAgICAweEVELCAweEY1LCAweERGLCAweERELCAweEQ2LCAweDNCLCAweDcxLCAweDkzIH0sCisgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgMzIsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHg1MCwgMHgwMSwgMHhCOSwgMHhGNSwgMHgyMSwgMHhDMSwgMHhDMSwgMHgyOSwgCisgICAgIDB4MDAsIDB4RDUsIDB4RUMsIDB4OTgsIDB4MkIsIDB4OUUsIDB4RTgsIDB4MjEgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9Cit9LAorCisgIC8qIDI4OC1iaXQga2V5cyAqLworeworICAgMzYsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHhFOCwgMHhGNCwgMHhBRiwgMHgyQiwgMHgyMSwgMHhBMCwgMHg4NywgMHg5QiwgCisgICAgIDB4NDEsIDB4OTUsIDB4QjksIDB4NzEsIDB4NzUsIDB4NzksIDB4MDQsIDB4N0MgfSwKKyAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9Cit9LCB7CisgICAzNiwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweEU2LCAweEE2LCAweEE1LCAweEJDLCAweDhCLCAweDYzLCAweDZGLCAweEUyLCAKKyAgICAgMHhCRCwgMHhBNywgMHhBNywgMHg1MywgMHhBQiwgMHg0MCwgMHgyMiwgMHhFMCB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK30sCisKKyAgLyogMzIwLWJpdCBrZXlzICovCit7CisgICA0MCwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDE3LCAweDA0LCAweEQ3LCAweDJDLCAweEM2LCAweDg1LCAweDc2LCAweDAyLCAKKyAgICAgMHg0QiwgMHhDQywgMHgzOSwgMHg4MCwgMHhEOCwgMHgyMiwgMHhFQSwgMHhBNCB9LAorICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK30sIHsKKyAgIDQwLAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4N0EsIDB4NDEsIDB4RTYsIDB4N0QsIDB4NEYsIDB4RDgsIDB4NjQsIDB4RjAsIAorICAgICAweDQ0LCAweEE4LCAweDNDLCAweDczLCAweDgxLCAweDdFLCAweDUzLCAweEQ4IH0sCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQorfQorI2Vsc2UKKyAgLyoqKiogVHdlYWtlZCBBTlVCSVMgKioqKi8KKyAgLyogMTI4IGJpdCBrZXlzICovCit7CisgICAxNiwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweEI4LCAweDM1LCAweEJELCAweEMzLCAweDM0LCAweDgyLCAweDlELCAweDgzLAorICAgICAweDcxLCAweEJGLCAweEEzLCAweDcxLCAweEU0LCAweEIzLCAweEM0LCAweEZEIH0sCisgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgMTYsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHhFNiwgMHgxNCwgMHgxRSwgMHhBRiwgMHhFQiwgMHhFMCwgMHg1OSwgMHgzQywKKyAgICAgMHg0OCwgMHhFMSwgMHhDRCwgMHhGMiwgMHgxQiwgMHhCQSwgMHhBMSwgMHg4OSB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0KK30sCisKKyAgIC8qIDE2MC1iaXQga2V5cyAqLworeworICAgMjAsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHg5NywgMHg1OSwgMHg3OSwgMHg0QiwgMHg1QywgMHhBMCwgMHg3MCwgMHg3MywKKyAgICAgMHgyNCwgMHhFRiwgMHhCMywgMHg1OCwgMHg2NywgMHhDQSwgMHhENCwgMHhCMyB9LAorICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK30sIHsKKyAgIDIwLAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4QjgsIDB4MEQsIDB4RkIsIDB4OUIsIDB4RTQsIDB4QTEsIDB4NTgsIDB4ODcsCisgICAgIDB4QjMsIDB4NzYsIDB4RDUsIDB4MDIsIDB4MTgsIDB4OTUsIDB4QzEsIDB4MkUgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9Cit9LAorCisgIC8qIDE5Mi1iaXQga2V5cyAqLworeworICAgMjQsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHg3RCwgMHg2MiwgMHgzQiwgMHg1MiwgMHhDNywgMHg0QywgMHg2NCwgMHhEOCwKKyAgICAgMHhFQiwgMHhDNywgMHgyRCwgMHg1NywgMHg5NywgMHg4NSwgMHg0MywgMHg4RiB9LAorICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK30sIHsKKyAgIDI0LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4QjEsIDB4MEEsIDB4NTksIDB4REQsIDB4NUQsIDB4NUQsIDB4OEQsIDB4NjcsCisgICAgIDB4RUMsIDB4RUUsIDB4NEEsIDB4QzQsIDB4QkUsIDB4NEYsIDB4QTgsIDB4NEYgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9Cit9LAorCisgIC8qIDIyNC1iaXQga2V5cyAqLworeworICAgMjgsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHg2OCwgMHg5RSwgMHgwNSwgMHg5NCwgMHg2QSwgMHg5NCwgMHg0MywgMHg4RiwKKyAgICAgMHhFNywgMHg4RSwgMHgzNywgMHgzRCwgMHgyNCwgMHg5NywgMHg5MiwgMHhGNSB9LAorICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK30sIHsKKyAgIDI4LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4REQsIDB4QjcsIDB4QjAsIDB4QjQsIDB4RTksIDB4QjQsIDB4OUIsIDB4OUMsCisgICAgIDB4MzgsIDB4MjAsIDB4MjUsIDB4MEIsIDB4NDcsIDB4QzIsIDB4MUYsIDB4ODkgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9Cit9LAorCisgIC8qIDI1Ni1iaXQga2V5cyAqLworeworICAgMzIsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHg5NiwgMHgwMCwgMHhGMCwgMHg3NiwgMHg5MSwgMHg2OSwgMHgyOSwgMHg4NywKKyAgICAgMHhGNSwgMHhFNSwgMHg5NywgMHhEQiwgMHhEQiwgMHhBRiwgMHgxQiwgMHgwQSB9LAorICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK30sIHsKKyAgIDMyLAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4NjksIDB4OUMsIDB4QUYsIDB4REQsIDB4OTQsIDB4QzcsIDB4QkMsIDB4NjAsCisgICAgIDB4NDQsIDB4RkUsIDB4MDIsIDB4MDUsIDB4OEEsIDB4NkUsIDB4RUYsIDB4QkQgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9Cit9LAorCisgIC8qIDI4OC1iaXQga2V5cyAqLworeworICAgMzYsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHgwRiwgMHhDNywgMHhBMiwgMHhDMCwgMHgxMSwgMHgxNywgMHhBQywgMHg0MywKKyAgICAgMHg1MiwgMHg1RSwgMHhERiwgMHg2QywgMHhGMywgMHg5NiwgMHgzMywgMHg2QyB9LAorICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK30sIHsKKyAgIDM2LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4QUQsIDB4MDgsIDB4NEYsIDB4RUQsIDB4NTUsIDB4QTYsIDB4OTQsIDB4M0UsCisgICAgIDB4N0UsIDB4NUUsIDB4RUQsIDB4MDUsIDB4QTEsIDB4OUQsIDB4NDEsIDB4QjQgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9Cit9LAorCisgIC8qIDMyMC1iaXQga2V5cyAqLworeworICAgNDAsCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHhGRSwgMHhFMiwgMHgwRSwgMHgyQSwgMHg5RCwgMHhDNSwgMHg4MywgMHhCQSwKKyAgICAgMHhBMywgMHhBNiwgMHhENiwgMHhBNiwgMHhGMiwgMHhFOCwgMHgwNiwgMHhBNSB9LAorICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KK30sIHsKKyAgIDQwLAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4ODYsIDB4M0QsIDB4Q0MsIDB4NEEsIDB4NjAsIDB4MzQsIDB4OUMsIDB4MjgsCisgICAgIDB4QTcsIDB4REEsIDB4QTQsIDB4M0IsIDB4MEEsIDB4RDcsIDB4RkQsIDB4QzcgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9Cit9CisjZW5kaWYKK307CisgICBpbnQgeCwgeTsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzJdWzE2XTsKKyAgIHN5bW1ldHJpY19rZXkgc2tleTsKKworICAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgeworICAgICAgIGFudWJpc19zZXR1cCh0ZXN0c1t4XS5rZXksIHRlc3RzW3hdLmtleWxlbiwgMCwgJnNrZXkpOworICAgICAgIGFudWJpc19lY2JfZW5jcnlwdCh0ZXN0c1t4XS5wdCwgYnVmWzBdLCAmc2tleSk7CisgICAgICAgYW51YmlzX2VjYl9kZWNyeXB0KGJ1ZlswXSwgYnVmWzFdLCAmc2tleSk7CisgICAgICAgaWYgKFhNRU1DTVAoYnVmWzBdLCB0ZXN0c1t4XS5jdCwgMTYpIHx8IFhNRU1DTVAoYnVmWzFdLCB0ZXN0c1t4XS5wdCwgMTYpKSB7CisgICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICB9CisKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwMDsgeSsrKSBhbnViaXNfZWNiX2VuY3J5cHQoYnVmWzBdLCBidWZbMF0sICZza2V5KTsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwMDsgeSsrKSBhbnViaXNfZWNiX2RlY3J5cHQoYnVmWzBdLCBidWZbMF0sICZza2V5KTsKKyAgICAgICBpZiAoWE1FTUNNUChidWZbMF0sIHRlc3RzW3hdLmN0LCAxNikpIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgIH0KKworICAgfQorICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKy8qKiBUZXJtaW5hdGUgdGhlIGNvbnRleHQgCisgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorKi8KK3ZvaWQgYW51YmlzX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSkKK3sKK30KKworLyoqCisgIEdldHMgc3VpdGFibGUga2V5IHNpemUKKyAgQHBhcmFtIGtleXNpemUgW2luL291dF0gVGhlIGxlbmd0aCBvZiB0aGUgcmVjb21tZW5kZWQga2V5IChpbiBieXRlcykuICBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgdGhlIHN1aXRhYmxlIHNpemUgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICBAcmV0dXJuIENSWVBUX09LIGlmIHRoZSBpbnB1dCBrZXkgc2l6ZSBpcyBhY2NlcHRhYmxlLgorKi8KK2ludCBhbnViaXNfa2V5c2l6ZShpbnQgKmtleXNpemUpCit7CisgICBMVENfQVJHQ0hLKGtleXNpemUgIT0gTlVMTCk7CisgICBpZiAoKmtleXNpemUgPj0gNDApIHsKKyAgICAgICprZXlzaXplID0gNDA7CisgICB9IGVsc2UgaWYgKCprZXlzaXplID49IDM2KSB7CisgICAgICAqa2V5c2l6ZSA9IDM2OworICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+PSAzMikgeworICAgICAgKmtleXNpemUgPSAzMjsKKyAgIH0gZWxzZSBpZiAoKmtleXNpemUgPj0gMjgpIHsKKyAgICAgICprZXlzaXplID0gMjg7CisgICB9IGVsc2UgaWYgKCprZXlzaXplID49IDI0KSB7CisgICAgICAqa2V5c2l6ZSA9IDI0OworICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+PSAyMCkgeworICAgICAgKmtleXNpemUgPSAyMDsKKyAgIH0gZWxzZSBpZiAoKmtleXNpemUgPj0gMTYpIHsKKyAgICAgICprZXlzaXplID0gMTY7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvYW51YmlzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMTUgMTI6NDE6MjggJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvYmxvd2Zpc2guYyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2Jsb3dmaXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4OTQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2Jsb3dmaXNoLmMKQEAgLTAsMCArMSw1OTQgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisvKioKKyAgQGZpbGUgYmxvd2Zpc2guYworICBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgQmxvd2Zpc2ggYmxvY2sgY2lwaGVyLCBUb20gU3QgRGVuaXMKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIEJMT1dGSVNICisKK2NvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgYmxvd2Zpc2hfZGVzYyA9Cit7CisgICAgImJsb3dmaXNoIiwKKyAgICAwLAorICAgIDgsIDU2LCA4LCAxNiwKKyAgICAmYmxvd2Zpc2hfc2V0dXAsCisgICAgJmJsb3dmaXNoX2VjYl9lbmNyeXB0LAorICAgICZibG93ZmlzaF9lY2JfZGVjcnlwdCwKKyAgICAmYmxvd2Zpc2hfdGVzdCwKKyAgICAmYmxvd2Zpc2hfZG9uZSwKKyAgICAmYmxvd2Zpc2hfa2V5c2l6ZSwKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBPUklHX1BbMTYgKyAyXSA9IHsKKyAgICAgICAgMHgyNDNGNkE4OFVMLCAweDg1QTMwOEQzVUwsIDB4MTMxOThBMkVVTCwgMHgwMzcwNzM0NFVMLAorICAgICAgICAweEE0MDkzODIyVUwsIDB4Mjk5RjMxRDBVTCwgMHgwODJFRkE5OFVMLCAweEVDNEU2Qzg5VUwsCisgICAgICAgIDB4NDUyODIxRTZVTCwgMHgzOEQwMTM3N1VMLCAweEJFNTQ2NkNGVUwsIDB4MzRFOTBDNkNVTCwKKyAgICAgICAgMHhDMEFDMjlCN1VMLCAweEM5N0M1MEREVUwsIDB4M0Y4NEQ1QjVVTCwgMHhCNTQ3MDkxN1VMLAorICAgICAgICAweDkyMTZENUQ5VUwsIDB4ODk3OUZCMUJVTAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgT1JJR19TWzRdWzI1Nl0gPSB7CisgICAgeyAgIDB4RDEzMTBCQTZVTCwgMHg5OERGQjVBQ1VMLCAweDJGRkQ3MkRCVUwsIDB4RDAxQURGQjdVTCwKKyAgICAgICAgMHhCOEUxQUZFRFVMLCAweDZBMjY3RTk2VUwsIDB4QkE3QzkwNDVVTCwgMHhGMTJDN0Y5OVVMLAorICAgICAgICAweDI0QTE5OTQ3VUwsIDB4QjM5MTZDRjdVTCwgMHgwODAxRjJFMlVMLCAweDg1OEVGQzE2VUwsCisgICAgICAgIDB4NjM2OTIwRDhVTCwgMHg3MTU3NEU2OVVMLCAweEE0NThGRUEzVUwsIDB4RjQ5MzNEN0VVTCwKKyAgICAgICAgMHgwRDk1NzQ4RlVMLCAweDcyOEVCNjU4VUwsIDB4NzE4QkNENThVTCwgMHg4MjE1NEFFRVVMLAorICAgICAgICAweDdCNTRBNDFEVUwsIDB4QzI1QTU5QjVVTCwgMHg5QzMwRDUzOVVMLCAweDJBRjI2MDEzVUwsCisgICAgICAgIDB4QzVEMUIwMjNVTCwgMHgyODYwODVGMFVMLCAweENBNDE3OTE4VUwsIDB4QjhEQjM4RUZVTCwKKyAgICAgICAgMHg4RTc5RENCMFVMLCAweDYwM0ExODBFVUwsIDB4NkM5RTBFOEJVTCwgMHhCMDFFOEEzRVVMLAorICAgICAgICAweEQ3MTU3N0MxVUwsIDB4QkQzMTRCMjdVTCwgMHg3OEFGMkZEQVVMLCAweDU1NjA1QzYwVUwsCisgICAgICAgIDB4RTY1NTI1RjNVTCwgMHhBQTU1QUI5NFVMLCAweDU3NDg5ODYyVUwsIDB4NjNFODE0NDBVTCwKKyAgICAgICAgMHg1NUNBMzk2QVVMLCAweDJBQUIxMEI2VUwsIDB4QjRDQzVDMzRVTCwgMHgxMTQxRThDRVVMLAorICAgICAgICAweEExNTQ4NkFGVUwsIDB4N0M3MkU5OTNVTCwgMHhCM0VFMTQxMVVMLCAweDYzNkZCQzJBVUwsCisgICAgICAgIDB4MkJBOUM1NURVTCwgMHg3NDE4MzFGNlVMLCAweENFNUMzRTE2VUwsIDB4OUI4NzkzMUVVTCwKKyAgICAgICAgMHhBRkQ2QkEzM1VMLCAweDZDMjRDRjVDVUwsIDB4N0EzMjUzODFVTCwgMHgyODk1ODY3N1VMLAorICAgICAgICAweDNCOEY0ODk4VUwsIDB4NkI0QkI5QUZVTCwgMHhDNEJGRTgxQlVMLCAweDY2MjgyMTkzVUwsCisgICAgICAgIDB4NjFEODA5Q0NVTCwgMHhGQjIxQTk5MVVMLCAweDQ4N0NBQzYwVUwsIDB4NURFQzgwMzJVTCwKKyAgICAgICAgMHhFRjg0NUQ1RFVMLCAweEU5ODU3NUIxVUwsIDB4REMyNjIzMDJVTCwgMHhFQjY1MUI4OFVMLAorICAgICAgICAweDIzODkzRTgxVUwsIDB4RDM5NkFDQzVVTCwgMHgwRjZENkZGM1VMLCAweDgzRjQ0MjM5VUwsCisgICAgICAgIDB4MkUwQjQ0ODJVTCwgMHhBNDg0MjAwNFVMLCAweDY5QzhGMDRBVUwsIDB4OUUxRjlCNUVVTCwKKyAgICAgICAgMHgyMUM2Njg0MlVMLCAweEY2RTk2QzlBVUwsIDB4NjcwQzlDNjFVTCwgMHhBQkQzODhGMFVMLAorICAgICAgICAweDZBNTFBMEQyVUwsIDB4RDg1NDJGNjhVTCwgMHg5NjBGQTcyOFVMLCAweEFCNTEzM0EzVUwsCisgICAgICAgIDB4NkVFRjBCNkNVTCwgMHgxMzdBM0JFNFVMLCAweEJBM0JGMDUwVUwsIDB4N0VGQjJBOThVTCwKKyAgICAgICAgMHhBMUYxNjUxRFVMLCAweDM5QUYwMTc2VUwsIDB4NjZDQTU5M0VVTCwgMHg4MjQzMEU4OFVMLAorICAgICAgICAweDhDRUU4NjE5VUwsIDB4NDU2RjlGQjRVTCwgMHg3RDg0QTVDM1VMLCAweDNCOEI1RUJFVUwsCisgICAgICAgIDB4RTA2Rjc1RDhVTCwgMHg4NUMxMjA3M1VMLCAweDQwMUE0NDlGVUwsIDB4NTZDMTZBQTZVTCwKKyAgICAgICAgMHg0RUQzQUE2MlVMLCAweDM2M0Y3NzA2VUwsIDB4MUJGRURGNzJVTCwgMHg0MjlCMDIzRFVMLAorICAgICAgICAweDM3RDBENzI0VUwsIDB4RDAwQTEyNDhVTCwgMHhEQjBGRUFEM1VMLCAweDQ5RjFDMDlCVUwsCisgICAgICAgIDB4MDc1MzcyQzlVTCwgMHg4MDk5MUI3QlVMLCAweDI1RDQ3OUQ4VUwsIDB4RjZFOERFRjdVTCwKKyAgICAgICAgMHhFM0ZFNTAxQVVMLCAweEI2Nzk0QzNCVUwsIDB4OTc2Q0UwQkRVTCwgMHgwNEMwMDZCQVVMLAorICAgICAgICAweEMxQTk0RkI2VUwsIDB4NDA5RjYwQzRVTCwgMHg1RTVDOUVDMlVMLCAweDE5NkEyNDYzVUwsCisgICAgICAgIDB4NjhGQjZGQUZVTCwgMHgzRTZDNTNCNVVMLCAweDEzMzlCMkVCVUwsIDB4M0I1MkVDNkZVTCwKKyAgICAgICAgMHg2REZDNTExRlVMLCAweDlCMzA5NTJDVUwsIDB4Q0M4MTQ1NDRVTCwgMHhBRjVFQkQwOVVMLAorICAgICAgICAweEJFRTNEMDA0VUwsIDB4REUzMzRBRkRVTCwgMHg2NjBGMjgwN1VMLCAweDE5MkU0QkIzVUwsCisgICAgICAgIDB4QzBDQkE4NTdVTCwgMHg0NUM4NzQwRlVMLCAweEQyMEI1RjM5VUwsIDB4QjlEM0ZCREJVTCwKKyAgICAgICAgMHg1NTc5QzBCRFVMLCAweDFBNjAzMjBBVUwsIDB4RDZBMTAwQzZVTCwgMHg0MDJDNzI3OVVMLAorICAgICAgICAweDY3OUYyNUZFVUwsIDB4RkIxRkEzQ0NVTCwgMHg4RUE1RTlGOFVMLCAweERCMzIyMkY4VUwsCisgICAgICAgIDB4M0M3NTE2REZVTCwgMHhGRDYxNkIxNVVMLCAweDJGNTAxRUM4VUwsIDB4QUQwNTUyQUJVTCwKKyAgICAgICAgMHgzMjNEQjVGQVVMLCAweEZEMjM4NzYwVUwsIDB4NTMzMTdCNDhVTCwgMHgzRTAwREY4MlVMLAorICAgICAgICAweDlFNUM1N0JCVUwsIDB4Q0E2RjhDQTBVTCwgMHgxQTg3NTYyRVVMLCAweERGMTc2OURCVUwsCisgICAgICAgIDB4RDU0MkE4RjZVTCwgMHgyODdFRkZDM1VMLCAweEFDNjczMkM2VUwsIDB4OEM0RjU1NzNVTCwKKyAgICAgICAgMHg2OTVCMjdCMFVMLCAweEJCQ0E1OEM4VUwsIDB4RTFGRkEzNURVTCwgMHhCOEYwMTFBMFVMLAorICAgICAgICAweDEwRkEzRDk4VUwsIDB4RkQyMTgzQjhVTCwgMHg0QUZDQjU2Q1VMLCAweDJERDFEMzVCVUwsCisgICAgICAgIDB4OUE1M0U0NzlVTCwgMHhCNkY4NDU2NVVMLCAweEQyOEU0OUJDVUwsIDB4NEJGQjk3OTBVTCwKKyAgICAgICAgMHhFMURERjJEQVVMLCAweEE0Q0I3RTMzVUwsIDB4NjJGQjEzNDFVTCwgMHhDRUU0QzZFOFVMLAorICAgICAgICAweEVGMjBDQURBVUwsIDB4MzY3NzRDMDFVTCwgMHhEMDdFOUVGRVVMLCAweDJCRjExRkI0VUwsCisgICAgICAgIDB4OTVEQkRBNERVTCwgMHhBRTkwOTE5OFVMLCAweEVBQUQ4RTcxVUwsIDB4NkI5M0Q1QTBVTCwKKyAgICAgICAgMHhEMDhFRDFEMFVMLCAweEFGQzcyNUUwVUwsIDB4OEUzQzVCMkZVTCwgMHg4RTc1OTRCN1VMLAorICAgICAgICAweDhGRjZFMkZCVUwsIDB4RjIxMjJCNjRVTCwgMHg4ODg4QjgxMlVMLCAweDkwMERGMDFDVUwsCisgICAgICAgIDB4NEZBRDVFQTBVTCwgMHg2ODhGQzMxQ1VMLCAweEQxQ0ZGMTkxVUwsIDB4QjNBOEMxQURVTCwKKyAgICAgICAgMHgyRjJGMjIxOFVMLCAweEJFMEUxNzc3VUwsIDB4RUE3NTJERkVVTCwgMHg4QjAyMUZBMVVMLAorICAgICAgICAweEU1QTBDQzBGVUwsIDB4QjU2Rjc0RThVTCwgMHgxOEFDRjNENlVMLCAweENFODlFMjk5VUwsCisgICAgICAgIDB4QjRBODRGRTBVTCwgMHhGRDEzRTBCN1VMLCAweDdDQzQzQjgxVUwsIDB4RDJBREE4RDlVTCwKKyAgICAgICAgMHgxNjVGQTI2NlVMLCAweDgwOTU3NzA1VUwsIDB4OTNDQzczMTRVTCwgMHgyMTFBMTQ3N1VMLAorICAgICAgICAweEU2QUQyMDY1VUwsIDB4NzdCNUZBODZVTCwgMHhDNzU0NDJGNVVMLCAweEZCOUQzNUNGVUwsCisgICAgICAgIDB4RUJDREFGMENVTCwgMHg3QjNFODlBMFVMLCAweEQ2NDExQkQzVUwsIDB4QUUxRTdFNDlVTCwKKyAgICAgICAgMHgwMDI1MEUyRFVMLCAweDIwNzFCMzVFVUwsIDB4MjI2ODAwQkJVTCwgMHg1N0I4RTBBRlVMLAorICAgICAgICAweDI0NjQzNjlCVUwsIDB4RjAwOUI5MUVVTCwgMHg1NTYzOTExRFVMLCAweDU5REZBNkFBVUwsCisgICAgICAgIDB4NzhDMTQzODlVTCwgMHhEOTVBNTM3RlVMLCAweDIwN0Q1QkEyVUwsIDB4MDJFNUI5QzVVTCwKKyAgICAgICAgMHg4MzI2MDM3NlVMLCAweDYyOTVDRkE5VUwsIDB4MTFDODE5NjhVTCwgMHg0RTczNEE0MVVMLAorICAgICAgICAweEIzNDcyRENBVUwsIDB4N0IxNEE5NEFVTCwgMHgxQjUxMDA1MlVMLCAweDlBNTMyOTE1VUwsCisgICAgICAgIDB4RDYwRjU3M0ZVTCwgMHhCQzlCQzZFNFVMLCAweDJCNjBBNDc2VUwsIDB4ODFFNjc0MDBVTCwKKyAgICAgICAgMHgwOEJBNkZCNVVMLCAweDU3MUJFOTFGVUwsIDB4RjI5NkVDNkJVTCwgMHgyQTBERDkxNVVMLAorICAgICAgICAweEI2NjM2NTIxVUwsIDB4RTdCOUY5QjZVTCwgMHhGRjM0MDUyRVVMLCAweEM1ODU1NjY0VUwsCisgICAgICAgIDB4NTNCMDJENURVTCwgMHhBOTlGOEZBMVVMLCAweDA4QkE0Nzk5VUwsIDB4NkU4NTA3NkFVTCAgIH0sCisgICAgeyAgIDB4NEI3QTcwRTlVTCwgMHhCNUIzMjk0NFVMLCAweERCNzUwOTJFVUwsIDB4QzQxOTI2MjNVTCwKKyAgICAgICAgMHhBRDZFQTZCMFVMLCAweDQ5QTdERjdEVUwsIDB4OUNFRTYwQjhVTCwgMHg4RkVEQjI2NlVMLAorICAgICAgICAweEVDQUE4QzcxVUwsIDB4Njk5QTE3RkZVTCwgMHg1NjY0NTI2Q1VMLCAweEMyQjE5RUUxVUwsCisgICAgICAgIDB4MTkzNjAyQTVVTCwgMHg3NTA5NEMyOVVMLCAweEEwNTkxMzQwVUwsIDB4RTQxODNBM0VVTCwKKyAgICAgICAgMHgzRjU0OTg5QVVMLCAweDVCNDI5RDY1VUwsIDB4NkI4RkU0RDZVTCwgMHg5OUY3M0ZENlVMLAorICAgICAgICAweEExRDI5QzA3VUwsIDB4RUZFODMwRjVVTCwgMHg0RDJEMzhFNlVMLCAweEYwMjU1REMxVUwsCisgICAgICAgIDB4NENERDIwODZVTCwgMHg4NDcwRUIyNlVMLCAweDYzODJFOUM2VUwsIDB4MDIxRUNDNUVVTCwKKyAgICAgICAgMHgwOTY4NkIzRlVMLCAweDNFQkFFRkM5VUwsIDB4M0M5NzE4MTRVTCwgMHg2QjZBNzBBMVVMLAorICAgICAgICAweDY4N0YzNTg0VUwsIDB4NTJBMEUyODZVTCwgMHhCNzlDNTMwNVVMLCAweEFBNTAwNzM3VUwsCisgICAgICAgIDB4M0UwNzg0MUNVTCwgMHg3RkRFQUU1Q1VMLCAweDhFN0Q0NEVDVUwsIDB4NTcxNkYyQjhVTCwKKyAgICAgICAgMHhCMDNBREEzN1VMLCAweEYwNTAwQzBEVUwsIDB4RjAxQzFGMDRVTCwgMHgwMjAwQjNGRlVMLAorICAgICAgICAweEFFMENGNTFBVUwsIDB4M0NCNTc0QjJVTCwgMHgyNTgzN0E1OFVMLCAweERDMDkyMUJEVUwsCisgICAgICAgIDB4RDE5MTEzRjlVTCwgMHg3Q0E5MkZGNlVMLCAweDk0MzI0NzczVUwsIDB4MjJGNTQ3MDFVTCwKKyAgICAgICAgMHgzQUU1RTU4MVVMLCAweDM3QzJEQURDVUwsIDB4QzhCNTc2MzRVTCwgMHg5QUYzRERBN1VMLAorICAgICAgICAweEE5NDQ2MTQ2VUwsIDB4MEZEMDAzMEVVTCwgMHhFQ0M4QzczRVVMLCAweEE0NzUxRTQxVUwsCisgICAgICAgIDB4RTIzOENEOTlVTCwgMHgzQkVBMEUyRlVMLCAweDMyODBCQkExVUwsIDB4MTgzRUIzMzFVTCwKKyAgICAgICAgMHg0RTU0OEIzOFVMLCAweDRGNkRCOTA4VUwsIDB4NkY0MjBEMDNVTCwgMHhGNjBBMDRCRlVMLAorICAgICAgICAweDJDQjgxMjkwVUwsIDB4MjQ5NzdDNzlVTCwgMHg1Njc5QjA3MlVMLCAweEJDQUY4OUFGVUwsCisgICAgICAgIDB4REU5QTc3MUZVTCwgMHhEOTkzMDgxMFVMLCAweEIzOEJBRTEyVUwsIDB4RENDRjNGMkVVTCwKKyAgICAgICAgMHg1NTEyNzIxRlVMLCAweDJFNkI3MTI0VUwsIDB4NTAxQURERTZVTCwgMHg5Rjg0Q0Q4N1VMLAorICAgICAgICAweDdBNTg0NzE4VUwsIDB4NzQwOERBMTdVTCwgMHhCQzlGOUFCQ1VMLCAweEU5NEI3RDhDVUwsCisgICAgICAgIDB4RUM3QUVDM0FVTCwgMHhEQjg1MURGQVVMLCAweDYzMDk0MzY2VUwsIDB4QzQ2NEMzRDJVTCwKKyAgICAgICAgMHhFRjFDMTg0N1VMLCAweDMyMTVEOTA4VUwsIDB4REQ0MzNCMzdVTCwgMHgyNEMyQkExNlVMLAorICAgICAgICAweDEyQTE0RDQzVUwsIDB4MkE2NUM0NTFVTCwgMHg1MDk0MDAwMlVMLCAweDEzM0FFNEREVUwsCisgICAgICAgIDB4NzFERkY4OUVVTCwgMHgxMDMxNEU1NVVMLCAweDgxQUM3N0Q2VUwsIDB4NUYxMTE5OUJVTCwKKyAgICAgICAgMHgwNDM1NTZGMVVMLCAweEQ3QTNDNzZCVUwsIDB4M0MxMTE4M0JVTCwgMHg1OTI0QTUwOVVMLAorICAgICAgICAweEYyOEZFNkVEVUwsIDB4OTdGMUZCRkFVTCwgMHg5RUJBQkYyQ1VMLCAweDFFMTUzQzZFVUwsCisgICAgICAgIDB4ODZFMzQ1NzBVTCwgMHhFQUU5NkZCMVVMLCAweDg2MEU1RTBBVUwsIDB4NUEzRTJBQjNVTCwKKyAgICAgICAgMHg3NzFGRTcxQ1VMLCAweDRFM0QwNkZBVUwsIDB4Mjk2NURDQjlVTCwgMHg5OUU3MUQwRlVMLAorICAgICAgICAweDgwM0U4OUQ2VUwsIDB4NTI2NkM4MjVVTCwgMHgyRTRDQzk3OFVMLCAweDlDMTBCMzZBVUwsCisgICAgICAgIDB4QzYxNTBFQkFVTCwgMHg5NEUyRUE3OFVMLCAweEE1RkMzQzUzVUwsIDB4MUUwQTJERjRVTCwKKyAgICAgICAgMHhGMkY3NEVBN1VMLCAweDM2MUQyQjNEVUwsIDB4MTkzOTI2MEZVTCwgMHgxOUMyNzk2MFVMLAorICAgICAgICAweDUyMjNBNzA4VUwsIDB4RjcxMzEyQjZVTCwgMHhFQkFERkU2RVVMLCAweEVBQzMxRjY2VUwsCisgICAgICAgIDB4RTNCQzQ1OTVVTCwgMHhBNjdCQzg4M1VMLCAweEIxN0YzN0QxVUwsIDB4MDE4Q0ZGMjhVTCwKKyAgICAgICAgMHhDMzMyRERFRlVMLCAweEJFNkM1QUE1VUwsIDB4NjU1ODIxODVVTCwgMHg2OEFCOTgwMlVMLAorICAgICAgICAweEVFQ0VBNTBGVUwsIDB4REIyRjk1M0JVTCwgMHgyQUVGN0RBRFVMLCAweDVCNkUyRjg0VUwsCisgICAgICAgIDB4MTUyMUI2MjhVTCwgMHgyOTA3NjE3MFVMLCAweEVDREQ0Nzc1VUwsIDB4NjE5RjE1MTBVTCwKKyAgICAgICAgMHgxM0NDQTgzMFVMLCAweEVCNjFCRDk2VUwsIDB4MDMzNEZFMUVVTCwgMHhBQTAzNjNDRlVMLAorICAgICAgICAweEI1NzM1QzkwVUwsIDB4NEM3MEEyMzlVTCwgMHhENTlFOUUwQlVMLCAweENCQUFERTE0VUwsCisgICAgICAgIDB4RUVDQzg2QkNVTCwgMHg2MDYyMkNBN1VMLCAweDlDQUI1Q0FCVUwsIDB4QjJGMzg0NkVVTCwKKyAgICAgICAgMHg2NDhCMUVBRlVMLCAweDE5QkRGMENBVUwsIDB4QTAyMzY5QjlVTCwgMHg2NTVBQkI1MFVMLAorICAgICAgICAweDQwNjg1QTMyVUwsIDB4M0MyQUI0QjNVTCwgMHgzMTlFRTlENVVMLCAweEMwMjFCOEY3VUwsCisgICAgICAgIDB4OUI1NDBCMTlVTCwgMHg4NzVGQTA5OVVMLCAweDk1Rjc5OTdFVUwsIDB4NjIzRDdEQThVTCwKKyAgICAgICAgMHhGODM3ODg5QVVMLCAweDk3RTMyRDc3VUwsIDB4MTFFRDkzNUZVTCwgMHgxNjY4MTI4MVVMLAorICAgICAgICAweDBFMzU4ODI5VUwsIDB4QzdFNjFGRDZVTCwgMHg5NkRFREZBMVVMLCAweDc4NThCQTk5VUwsCisgICAgICAgIDB4NTdGNTg0QTVVTCwgMHgxQjIyNzI2M1VMLCAweDlCODNDM0ZGVUwsIDB4MUFDMjQ2OTZVTCwKKyAgICAgICAgMHhDREIzMEFFQlVMLCAweDUzMkUzMDU0VUwsIDB4OEZEOTQ4RTRVTCwgMHg2REJDMzEyOFVMLAorICAgICAgICAweDU4RUJGMkVGVUwsIDB4MzRDNkZGRUFVTCwgMHhGRTI4RUQ2MVVMLCAweEVFN0MzQzczVUwsCisgICAgICAgIDB4NUQ0QTE0RDlVTCwgMHhFODY0QjdFM1VMLCAweDQyMTA1RDE0VUwsIDB4MjAzRTEzRTBVTCwKKyAgICAgICAgMHg0NUVFRTJCNlVMLCAweEEzQUFBQkVBVUwsIDB4REI2QzRGMTVVTCwgMHhGQUNCNEZEMFVMLAorICAgICAgICAweEM3NDJGNDQyVUwsIDB4RUY2QUJCQjVVTCwgMHg2NTRGM0IxRFVMLCAweDQxQ0QyMTA1VUwsCisgICAgICAgIDB4RDgxRTc5OUVVTCwgMHg4Njg1NERDN1VMLCAweEU0NEI0NzZBVUwsIDB4M0Q4MTYyNTBVTCwKKyAgICAgICAgMHhDRjYyQTFGMlVMLCAweDVCOEQyNjQ2VUwsIDB4RkM4ODgzQTBVTCwgMHhDMUM3QjZBM1VMLAorICAgICAgICAweDdGMTUyNEMzVUwsIDB4NjlDQjc0OTJVTCwgMHg0Nzg0OEEwQlVMLCAweDU2OTJCMjg1VUwsCisgICAgICAgIDB4MDk1QkJGMDBVTCwgMHhBRDE5NDg5RFVMLCAweDE0NjJCMTc0VUwsIDB4MjM4MjBFMDBVTCwKKyAgICAgICAgMHg1ODQyOEQyQVVMLCAweDBDNTVGNUVBVUwsIDB4MURBREY0M0VVTCwgMHgyMzNGNzA2MVVMLAorICAgICAgICAweDMzNzJGMDkyVUwsIDB4OEQ5MzdFNDFVTCwgMHhENjVGRUNGMVVMLCAweDZDMjIzQkRCVUwsCisgICAgICAgIDB4N0NERTM3NTlVTCwgMHhDQkVFNzQ2MFVMLCAweDQwODVGMkE3VUwsIDB4Q0U3NzMyNkVVTCwKKyAgICAgICAgMHhBNjA3ODA4NFVMLCAweDE5Rjg1MDlFVUwsIDB4RThFRkQ4NTVVTCwgMHg2MUQ5OTczNVVMLAorICAgICAgICAweEE5NjlBN0FBVUwsIDB4QzUwQzA2QzJVTCwgMHg1QTA0QUJGQ1VMLCAweDgwMEJDQURDVUwsCisgICAgICAgIDB4OUU0NDdBMkVVTCwgMHhDMzQ1MzQ4NFVMLCAweEZERDU2NzA1VUwsIDB4MEUxRTlFQzlVTCwKKyAgICAgICAgMHhEQjczREJEM1VMLCAweDEwNTU4OENEVUwsIDB4Njc1RkRBNzlVTCwgMHhFMzY3NDM0MFVMLAorICAgICAgICAweEM1QzQzNDY1VUwsIDB4NzEzRTM4RDhVTCwgMHgzRDI4Rjg5RVVMLCAweEYxNkRGRjIwVUwsCisgICAgICAgIDB4MTUzRTIxRTdVTCwgMHg4RkIwM0Q0QVVMLCAweEU2RTM5RjJCVUwsIDB4REI4M0FERjdVTCAgIH0sCisgICAgeyAgIDB4RTkzRDVBNjhVTCwgMHg5NDgxNDBGN1VMLCAweEY2NEMyNjFDVUwsIDB4OTQ2OTI5MzRVTCwKKyAgICAgICAgMHg0MTE1MjBGN1VMLCAweDc2MDJENEY3VUwsIDB4QkNGNDZCMkVVTCwgMHhENEEyMDA2OFVMLAorICAgICAgICAweEQ0MDgyNDcxVUwsIDB4MzMyMEY0NkFVTCwgMHg0M0I3RDRCN1VMLCAweDUwMDA2MUFGVUwsCisgICAgICAgIDB4MUUzOUY2MkVVTCwgMHg5NzI0NDU0NlVMLCAweDE0MjE0Rjc0VUwsIDB4QkY4Qjg4NDBVTCwKKyAgICAgICAgMHg0RDk1RkMxRFVMLCAweDk2QjU5MUFGVUwsIDB4NzBGNERERDNVTCwgMHg2NkEwMkY0NVVMLAorICAgICAgICAweEJGQkMwOUVDVUwsIDB4MDNCRDk3ODVVTCwgMHg3RkFDNkREMFVMLCAweDMxQ0I4NTA0VUwsCisgICAgICAgIDB4OTZFQjI3QjNVTCwgMHg1NUZEMzk0MVVMLCAweERBMjU0N0U2VUwsIDB4QUJDQTBBOUFVTCwKKyAgICAgICAgMHgyODUwNzgyNVVMLCAweDUzMDQyOUY0VUwsIDB4MEEyQzg2REFVTCwgMHhFOUI2NkRGQlVMLAorICAgICAgICAweDY4REMxNDYyVUwsIDB4RDc0ODY5MDBVTCwgMHg2ODBFQzBBNFVMLCAweDI3QTE4REVFVUwsCisgICAgICAgIDB4NEYzRkZFQTJVTCwgMHhFODg3QUQ4Q1VMLCAweEI1OENFMDA2VUwsIDB4N0FGNEQ2QjZVTCwKKyAgICAgICAgMHhBQUNFMUU3Q1VMLCAweEQzMzc1RkVDVUwsIDB4Q0U3OEEzOTlVTCwgMHg0MDZCMkE0MlVMLAorICAgICAgICAweDIwRkU5RTM1VUwsIDB4RDlGMzg1QjlVTCwgMHhFRTM5RDdBQlVMLCAweDNCMTI0RThCVUwsCisgICAgICAgIDB4MURDOUZBRjdVTCwgMHg0QjZEMTg1NlVMLCAweDI2QTM2NjMxVUwsIDB4RUFFMzk3QjJVTCwKKyAgICAgICAgMHgzQTZFRkE3NFVMLCAweERENUI0MzMyVUwsIDB4Njg0MUU3RjdVTCwgMHhDQTc4MjBGQlVMLAorICAgICAgICAweEZCMEFGNTRFVUwsIDB4RDhGRUIzOTdVTCwgMHg0NTQwNTZBQ1VMLCAweEJBNDg5NTI3VUwsCisgICAgICAgIDB4NTU1MzNBM0FVTCwgMHgyMDgzOEQ4N1VMLCAweEZFNkJBOUI3VUwsIDB4RDA5Njk1NEJVTCwKKyAgICAgICAgMHg1NUE4NjdCQ1VMLCAweEExMTU5QTU4VUwsIDB4Q0NBOTI5NjNVTCwgMHg5OUUxREIzM1VMLAorICAgICAgICAweEE2MkE0QTU2VUwsIDB4M0YzMTI1RjlVTCwgMHg1RUY0N0UxQ1VMLCAweDkwMjkzMTdDVUwsCisgICAgICAgIDB4RkRGOEU4MDJVTCwgMHgwNDI3MkY3MFVMLCAweDgwQkIxNTVDVUwsIDB4MDUyODJDRTNVTCwKKyAgICAgICAgMHg5NUMxMTU0OFVMLCAweEU0QzY2RDIyVUwsIDB4NDhDMTEzM0ZVTCwgMHhDNzBGODZEQ1VMLAorICAgICAgICAweDA3RjlDOUVFVUwsIDB4NDEwNDFGMEZVTCwgMHg0MDQ3NzlBNFVMLCAweDVEODg2RTE3VUwsCisgICAgICAgIDB4MzI1RjUxRUJVTCwgMHhENTlCQzBEMVVMLCAweEYyQkNDMThGVUwsIDB4NDExMTM1NjRVTCwKKyAgICAgICAgMHgyNTdCNzgzNFVMLCAweDYwMkE5QzYwVUwsIDB4REZGOEU4QTNVTCwgMHgxRjYzNkMxQlVMLAorICAgICAgICAweDBFMTJCNEMyVUwsIDB4MDJFMTMyOUVVTCwgMHhBRjY2NEZEMVVMLCAweENBRDE4MTE1VUwsCisgICAgICAgIDB4NkIyMzk1RTBVTCwgMHgzMzNFOTJFMVVMLCAweDNCMjQwQjYyVUwsIDB4RUVCRUI5MjJVTCwKKyAgICAgICAgMHg4NUIyQTIwRVVMLCAweEU2QkEwRDk5VUwsIDB4REU3MjBDOENVTCwgMHgyREEyRjcyOFVMLAorICAgICAgICAweEQwMTI3ODQ1VUwsIDB4OTVCNzk0RkRVTCwgMHg2NDdEMDg2MlVMLCAweEU3Q0NGNUYwVUwsCisgICAgICAgIDB4NTQ0OUEzNkZVTCwgMHg4NzdENDhGQVVMLCAweEMzOURGRDI3VUwsIDB4RjMzRThEMUVVTCwKKyAgICAgICAgMHgwQTQ3NjM0MVVMLCAweDk5MkVGRjc0VUwsIDB4M0E2RjZFQUJVTCwgMHhGNEY4RkQzN1VMLAorICAgICAgICAweEE4MTJEQzYwVUwsIDB4QTFFQkRERjhVTCwgMHg5OTFCRTE0Q1VMLCAweERCNkU2QjBEVUwsCisgICAgICAgIDB4QzY3QjU1MTBVTCwgMHg2RDY3MkMzN1VMLCAweDI3NjVENDNCVUwsIDB4RENEMEU4MDRVTCwKKyAgICAgICAgMHhGMTI5MERDN1VMLCAweENDMDBGRkEzVUwsIDB4QjUzOTBGOTJVTCwgMHg2OTBGRUQwQlVMLAorICAgICAgICAweDY2N0I5RkZCVUwsIDB4Q0VEQjdEOUNVTCwgMHhBMDkxQ0YwQlVMLCAweEQ5MTU1RUEzVUwsCisgICAgICAgIDB4QkIxMzJGODhVTCwgMHg1MTVCQUQyNFVMLCAweDdCOTQ3OUJGVUwsIDB4NzYzQkQ2RUJVTCwKKyAgICAgICAgMHgzNzM5MkVCM1VMLCAweENDMTE1OTc5VUwsIDB4ODAyNkUyOTdVTCwgMHhGNDJFMzEyRFVMLAorICAgICAgICAweDY4NDJBREE3VUwsIDB4QzY2QTJCM0JVTCwgMHgxMjc1NENDQ1VMLCAweDc4MkVGMTFDVUwsCisgICAgICAgIDB4NkExMjQyMzdVTCwgMHhCNzkyNTFFN1VMLCAweDA2QTFCQkU2VUwsIDB4NEJGQjYzNTBVTCwKKyAgICAgICAgMHgxQTZCMTAxOFVMLCAweDExQ0FFREZBVUwsIDB4M0QyNUJERDhVTCwgMHhFMkUxQzNDOVVMLAorICAgICAgICAweDQ0NDIxNjU5VUwsIDB4MEExMjEzODZVTCwgMHhEOTBDRUM2RVVMLCAweEQ1QUJFQTJBVUwsCisgICAgICAgIDB4NjRBRjY3NEVVTCwgMHhEQTg2QTg1RlVMLCAweEJFQkZFOTg4VUwsIDB4NjRFNEMzRkVVTCwKKyAgICAgICAgMHg5REJDODA1N1VMLCAweEYwRjdDMDg2VUwsIDB4NjA3ODdCRjhVTCwgMHg2MDAzNjA0RFVMLAorICAgICAgICAweEQxRkQ4MzQ2VUwsIDB4RjYzODFGQjBVTCwgMHg3NzQ1QUUwNFVMLCAweEQ3MzZGQ0NDVUwsCisgICAgICAgIDB4ODM0MjZCMzNVTCwgMHhGMDFFQUI3MVVMLCAweEIwODA0MTg3VUwsIDB4M0MwMDVFNUZVTCwKKyAgICAgICAgMHg3N0EwNTdCRVVMLCAweEJERThBRTI0VUwsIDB4NTU0NjQyOTlVTCwgMHhCRjU4MkU2MVVMLAorICAgICAgICAweDRFNThGNDhGVUwsIDB4RjJEREZEQTJVTCwgMHhGNDc0RUYzOFVMLCAweDg3ODlCREMyVUwsCisgICAgICAgIDB4NTM2NkY5QzNVTCwgMHhDOEIzOEU3NFVMLCAweEI0NzVGMjU1VUwsIDB4NDZGQ0Q5QjlVTCwKKyAgICAgICAgMHg3QUVCMjY2MVVMLCAweDhCMURERjg0VUwsIDB4ODQ2QTBFNzlVTCwgMHg5MTVGOTVFMlVMLAorICAgICAgICAweDQ2NkU1OThFVUwsIDB4MjBCNDU3NzBVTCwgMHg4Q0Q1NTU5MVVMLCAweEM5MDJERTRDVUwsCisgICAgICAgIDB4QjkwQkFDRTFVTCwgMHhCQjgyMDVEMFVMLCAweDExQTg2MjQ4VUwsIDB4NzU3NEE5OUVVTCwKKyAgICAgICAgMHhCNzdGMTlCNlVMLCAweEUwQTlEQzA5VUwsIDB4NjYyRDA5QTFVTCwgMHhDNDMyNDYzM1VMLAorICAgICAgICAweEU4NUExRjAyVUwsIDB4MDlGMEJFOENVTCwgMHg0QTk5QTAyNVVMLCAweDFENkVGRTEwVUwsCisgICAgICAgIDB4MUFCOTNEMURVTCwgMHgwQkE1QTRERlVMLCAweEExODZGMjBGVUwsIDB4Mjg2OEYxNjlVTCwKKyAgICAgICAgMHhEQ0I3REE4M1VMLCAweDU3MzkwNkZFVUwsIDB4QTFFMkNFOUJVTCwgMHg0RkNEN0Y1MlVMLAorICAgICAgICAweDUwMTE1RTAxVUwsIDB4QTcwNjgzRkFVTCwgMHhBMDAyQjVDNFVMLCAweDBERTZEMDI3VUwsCisgICAgICAgIDB4OUFGODhDMjdVTCwgMHg3NzNGODY0MVVMLCAweEMzNjA0QzA2VUwsIDB4NjFBODA2QjVVTCwKKyAgICAgICAgMHhGMDE3N0EyOFVMLCAweEMwRjU4NkUwVUwsIDB4MDA2MDU4QUFVTCwgMHgzMERDN0Q2MlVMLAorICAgICAgICAweDExRTY5RUQ3VUwsIDB4MjMzOEVBNjNVTCwgMHg1M0MyREQ5NFVMLCAweEMyQzIxNjM0VUwsCisgICAgICAgIDB4QkJDQkVFNTZVTCwgMHg5MEJDQjZERVVMLCAweEVCRkM3REExVUwsIDB4Q0U1OTFENzZVTCwKKyAgICAgICAgMHg2RjA1RTQwOVVMLCAweDRCN0MwMTg4VUwsIDB4Mzk3MjBBM0RVTCwgMHg3QzkyN0MyNFVMLAorICAgICAgICAweDg2RTM3MjVGVUwsIDB4NzI0RDlEQjlVTCwgMHgxQUMxNUJCNFVMLCAweEQzOUVCOEZDVUwsCisgICAgICAgIDB4RUQ1NDU1NzhVTCwgMHgwOEZDQTVCNVVMLCAweEQ4M0Q3Q0QzVUwsIDB4NERBRDBGQzRVTCwKKyAgICAgICAgMHgxRTUwRUY1RVVMLCAweEIxNjFFNkY4VUwsIDB4QTI4NTE0RDlVTCwgMHg2QzUxMTMzQ1VMLAorICAgICAgICAweDZGRDVDN0U3VUwsIDB4NTZFMTRFQzRVTCwgMHgzNjJBQkZDRVVMLCAweEREQzZDODM3VUwsCisgICAgICAgIDB4RDc5QTMyMzRVTCwgMHg5MjYzODIxMlVMLCAweDY3MEVGQThFVUwsIDB4NDA2MDAwRTBVTCAgfSwKKyAgICB7ICAgMHgzQTM5Q0UzN1VMLCAweEQzRkFGNUNGVUwsIDB4QUJDMjc3MzdVTCwgMHg1QUM1MkQxQlVMLAorICAgICAgICAweDVDQjA2NzlFVUwsIDB4NEZBMzM3NDJVTCwgMHhEMzgyMjc0MFVMLCAweDk5QkM5QkJFVUwsCisgICAgICAgIDB4RDUxMThFOURVTCwgMHhCRjBGNzMxNVVMLCAweEQ2MkQxQzdFVUwsIDB4QzcwMEM0N0JVTCwKKyAgICAgICAgMHhCNzhDMUI2QlVMLCAweDIxQTE5MDQ1VUwsIDB4QjI2RUIxQkVVTCwgMHg2QTM2NkVCNFVMLAorICAgICAgICAweDU3NDhBQjJGVUwsIDB4QkM5NDZFNzlVTCwgMHhDNkEzNzZEMlVMLCAweDY1NDlDMkM4VUwsCisgICAgICAgIDB4NTMwRkY4RUVVTCwgMHg0NjhEREU3RFVMLCAweEQ1NzMwQTFEVUwsIDB4NENEMDREQzZVTCwKKyAgICAgICAgMHgyOTM5QkJEQlVMLCAweEE5QkE0NjUwVUwsIDB4QUM5NTI2RThVTCwgMHhCRTVFRTMwNFVMLAorICAgICAgICAweEExRkFENUYwVUwsIDB4NkEyRDUxOUFVTCwgMHg2M0VGOENFMlVMLCAweDlBODZFRTIyVUwsCisgICAgICAgIDB4QzA4OUMyQjhVTCwgMHg0MzI0MkVGNlVMLCAweEE1MUUwM0FBVUwsIDB4OUNGMkQwQTRVTCwKKyAgICAgICAgMHg4M0MwNjFCQVVMLCAweDlCRTk2QTREVUwsIDB4OEZFNTE1NTBVTCwgMHhCQTY0NUJENlVMLAorICAgICAgICAweDI4MjZBMkY5VUwsIDB4QTczQTNBRTFVTCwgMHg0QkE5OTU4NlVMLCAweEVGNTU2MkU5VUwsCisgICAgICAgIDB4QzcyRkVGRDNVTCwgMHhGNzUyRjdEQVVMLCAweDNGMDQ2RjY5VUwsIDB4NzdGQTBBNTlVTCwKKyAgICAgICAgMHg4MEU0QTkxNVVMLCAweDg3QjA4NjAxVUwsIDB4OUIwOUU2QURVTCwgMHgzQjNFRTU5M1VMLAorICAgICAgICAweEU5OTBGRDVBVUwsIDB4OUUzNEQ3OTdVTCwgMHgyQ0YwQjdEOVVMLCAweDAyMkI4QjUxVUwsCisgICAgICAgIDB4OTZENUFDM0FVTCwgMHgwMTdEQTY3RFVMLCAweEQxQ0YzRUQ2VUwsIDB4N0M3RDJEMjhVTCwKKyAgICAgICAgMHgxRjlGMjVDRlVMLCAweEFERjJCODlCVUwsIDB4NUFENkI0NzJVTCwgMHg1QTg4RjU0Q1VMLAorICAgICAgICAweEUwMjlBQzcxVUwsIDB4RTAxOUE1RTZVTCwgMHg0N0IwQUNGRFVMLCAweEVEOTNGQTlCVUwsCisgICAgICAgIDB4RThEM0M0OERVTCwgMHgyODNCNTdDQ1VMLCAweEY4RDU2NjI5VUwsIDB4NzkxMzJFMjhVTCwKKyAgICAgICAgMHg3ODVGMDE5MVVMLCAweEVENzU2MDU1VUwsIDB4Rjc5NjBFNDRVTCwgMHhFM0QzNUU4Q1VMLAorICAgICAgICAweDE1MDU2REQ0VUwsIDB4ODhGNDZEQkFVTCwgMHgwM0ExNjEyNVVMLCAweDA1NjRGMEJEVUwsCisgICAgICAgIDB4QzNFQjlFMTVVTCwgMHgzQzkwNTdBMlVMLCAweDk3MjcxQUVDVUwsIDB4QTkzQTA3MkFVTCwKKyAgICAgICAgMHgxQjNGNkQ5QlVMLCAweDFFNjMyMUY1VUwsIDB4RjU5QzY2RkJVTCwgMHgyNkRDRjMxOVVMLAorICAgICAgICAweDc1MzNEOTI4VUwsIDB4QjE1NUZERjVVTCwgMHgwMzU2MzQ4MlVMLCAweDhBQkEzQ0JCVUwsCisgICAgICAgIDB4Mjg1MTc3MTFVTCwgMHhDMjBBRDlGOFVMLCAweEFCQ0M1MTY3VUwsIDB4Q0NBRDkyNUZVTCwKKyAgICAgICAgMHg0REU4MTc1MVVMLCAweDM4MzBEQzhFVUwsIDB4Mzc5RDU4NjJVTCwgMHg5MzIwRjk5MVVMLAorICAgICAgICAweEVBN0E5MEMyVUwsIDB4RkIzRTdCQ0VVTCwgMHg1MTIxQ0U2NFVMLCAweDc3NEZCRTMyVUwsCisgICAgICAgIDB4QThCNkUzN0VVTCwgMHhDMzI5M0Q0NlVMLCAweDQ4REU1MzY5VUwsIDB4NjQxM0U2ODBVTCwKKyAgICAgICAgMHhBMkFFMDgxMFVMLCAweERENkRCMjI0VUwsIDB4Njk4NTJERkRVTCwgMHgwOTA3MjE2NlVMLAorICAgICAgICAweEIzOUE0NjBBVUwsIDB4NjQ0NUMwRERVTCwgMHg1ODZDREVDRlVMLCAweDFDMjBDOEFFVUwsCisgICAgICAgIDB4NUJCRUY3RERVTCwgMHgxQjU4OEQ0MFVMLCAweENDRDIwMTdGVUwsIDB4NkJCNEUzQkJVTCwKKyAgICAgICAgMHhEREEyNkE3RVVMLCAweDNBNTlGRjQ1VUwsIDB4M0UzNTBBNDRVTCwgMHhCQ0I0Q0RENVVMLAorICAgICAgICAweDcyRUFDRUE4VUwsIDB4RkE2NDg0QkJVTCwgMHg4RDY2MTJBRVVMLCAweEJGM0M2RjQ3VUwsCisgICAgICAgIDB4RDI5QkU0NjNVTCwgMHg1NDJGNUQ5RVVMLCAweEFFQzI3NzFCVUwsIDB4RjY0RTYzNzBVTCwKKyAgICAgICAgMHg3NDBFMEQ4RFVMLCAweEU3NUIxMzU3VUwsIDB4Rjg3MjE2NzFVTCwgMHhBRjUzN0Q1RFVMLAorICAgICAgICAweDQwNDBDQjA4VUwsIDB4NEVCNEUyQ0NVTCwgMHgzNEQyNDY2QVVMLCAweDAxMTVBRjg0VUwsCisgICAgICAgIDB4RTFCMDA0MjhVTCwgMHg5NTk4M0ExRFVMLCAweDA2Qjg5RkI0VUwsIDB4Q0U2RUEwNDhVTCwKKyAgICAgICAgMHg2RjNGM0I4MlVMLCAweDM1MjBBQjgyVUwsIDB4MDExQTFENEJVTCwgMHgyNzcyMjdGOFVMLAorICAgICAgICAweDYxMTU2MEIxVUwsIDB4RTc5MzNGRENVTCwgMHhCQjNBNzkyQlVMLCAweDM0NDUyNUJEVUwsCisgICAgICAgIDB4QTA4ODM5RTFVTCwgMHg1MUNFNzk0QlVMLCAweDJGMzJDOUI3VUwsIDB4QTAxRkJBQzlVTCwKKyAgICAgICAgMHhFMDFDQzg3RVVMLCAweEJDQzdEMUY2VUwsIDB4Q0YwMTExQzNVTCwgMHhBMUU4QUFDN1VMLAorICAgICAgICAweDFBOTA4NzQ5VUwsIDB4RDQ0RkJEOUFVTCwgMHhEMERBREVDQlVMLCAweEQ1MEFEQTM4VUwsCisgICAgICAgIDB4MDMzOUMzMkFVTCwgMHhDNjkxMzY2N1VMLCAweDhERjkzMTdDVUwsIDB4RTBCMTJCNEZVTCwKKyAgICAgICAgMHhGNzlFNTlCN1VMLCAweDQzRjVCQjNBVUwsIDB4RjJENTE5RkZVTCwgMHgyN0Q5NDU5Q1VMLAorICAgICAgICAweEJGOTcyMjJDVUwsIDB4MTVFNkZDMkFVTCwgMHgwRjkxRkM3MVVMLCAweDlCOTQxNTI1VUwsCisgICAgICAgIDB4RkFFNTkzNjFVTCwgMHhDRUI2OUNFQlVMLCAweEMyQTg2NDU5VUwsIDB4MTJCQUE4RDFVTCwKKyAgICAgICAgMHhCNkMxMDc1RVVMLCAweEUzMDU2QTBDVUwsIDB4MTBEMjUwNjVVTCwgMHhDQjAzQTQ0MlVMLAorICAgICAgICAweEUwRUM2RTBFVUwsIDB4MTY5OERCM0JVTCwgMHg0Qzk4QTBCRVVMLCAweDMyNzhFOTY0VUwsCisgICAgICAgIDB4OUYxRjk1MzJVTCwgMHhFMEQzOTJERlVMLCAweEQzQTAzNDJCVUwsIDB4ODk3MUYyMUVVTCwKKyAgICAgICAgMHgxQjBBNzQ0MVVMLCAweDRCQTMzNDhDVUwsIDB4QzVCRTcxMjBVTCwgMHhDMzc2MzJEOFVMLAorICAgICAgICAweERGMzU5RjhEVUwsIDB4OUI5OTJGMkVVTCwgMHhFNjBCNkY0N1VMLCAweDBGRTNGMTFEVUwsCisgICAgICAgIDB4RTU0Q0RBNTRVTCwgMHgxRURBRDg5MVVMLCAweENFNjI3OUNGVUwsIDB4Q0QzRTdFNkZVTCwKKyAgICAgICAgMHgxNjE4QjE2NlVMLCAweEZEMkMxRDA1VUwsIDB4ODQ4RkQyQzVVTCwgMHhGNkZCMjI5OVVMLAorICAgICAgICAweEY1MjNGMzU3VUwsIDB4QTYzMjc2MjNVTCwgMHg5M0E4MzUzMVVMLCAweDU2Q0NDRDAyVUwsCisgICAgICAgIDB4QUNGMDgxNjJVTCwgMHg1QTc1RUJCNVVMLCAweDZFMTYzNjk3VUwsIDB4ODhEMjczQ0NVTCwKKyAgICAgICAgMHhERTk2NjI5MlVMLCAweDgxQjk0OUQwVUwsIDB4NEM1MDkwMUJVTCwgMHg3MUM2NTYxNFVMLAorICAgICAgICAweEU2QzZDN0JEVUwsIDB4MzI3QTE0MEFVTCwgMHg0NUUxRDAwNlVMLCAweEMzRjI3QjlBVUwsCisgICAgICAgIDB4QzlBQTUzRkRVTCwgMHg2MkE4MEYwMFVMLCAweEJCMjVCRkUyVUwsIDB4MzVCREQyRjZVTCwKKyAgICAgICAgMHg3MTEyNjkwNVVMLCAweEIyMDQwMjIyVUwsIDB4QjZDQkNGN0NVTCwgMHhDRDc2OUMyQlVMLAorICAgICAgICAweDUzMTEzRUMwVUwsIDB4MTY0MEUzRDNVTCwgMHgzOEFCQkQ2MFVMLCAweDI1NDdBREYwVUwsCisgICAgICAgIDB4QkEzODIwOUNVTCwgMHhGNzQ2Q0U3NlVMLCAweDc3QUZBMUM1VUwsIDB4MjA3NTYwNjBVTCwKKyAgICAgICAgMHg4NUNCRkU0RVVMLCAweDhBRTg4REQ4VUwsIDB4N0FBQUY5QjBVTCwgMHg0Q0Y5QUE3RVVMLAorICAgICAgICAweDE5NDhDMjVDVUwsIDB4MDJGQjhBOENVTCwgMHgwMUMzNkFFNFVMLCAweEQ2RUJFMUY5VUwsCisgICAgICAgIDB4OTBENEY4NjlVTCwgMHhBNjVDREVBMFVMLCAweDNGMDkyNTJEVUwsIDB4QzIwOEU2OUZVTCwKKyAgICAgICAgMHhCNzRFNjEzMlVMLCAweENFNzdFMjVCVUwsIDB4NTc4RkRGRTNVTCwgMHgzQUMzNzJFNlVMICB9Cit9OworCisgLyoqCisgICAgSW5pdGlhbGl6ZSB0aGUgQmxvd2Zpc2ggYmxvY2sgY2lwaGVyCisgICAgQHBhcmFtIGtleSBUaGUgc3ltbWV0cmljIGtleSB5b3Ugd2lzaCB0byBwYXNzCisgICAgQHBhcmFtIGtleWxlbiBUaGUga2V5IGxlbmd0aCBpbiBieXRlcworICAgIEBwYXJhbSBudW1fcm91bmRzIFRoZSBudW1iZXIgb2Ygcm91bmRzIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICAgQHBhcmFtIHNrZXkgVGhlIGtleSBpbiBhcyBzY2hlZHVsZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IGJsb3dmaXNoX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsCisgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIHVsb25nMzIgeCwgeSwgeiwgQTsKKyAgIHVuc2lnbmVkIGNoYXIgQls4XTsKKworICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgIC8qIGNoZWNrIGtleSBsZW5ndGggKi8KKyAgIGlmIChrZXlsZW4gPCA4IHx8IGtleWxlbiA+IDU2KSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgfQorCisgICAvKiBjaGVjayByb3VuZHMgKi8KKyAgIGlmIChudW1fcm91bmRzICE9IDAgJiYgbnVtX3JvdW5kcyAhPSAxNikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgfSAgIAorCisgICAvKiBsb2FkIGluIGtleSBieXRlcyAoU3VwcGxpZWQgYnkgRGF2aWQgSG9wd29vZCkgKi8KKyAgIGZvciAoeCA9IHkgPSAwOyB4IDwgMTg7IHgrKykgeworICAgICAgIEEgPSAwOworICAgICAgIGZvciAoeiA9IDA7IHogPCA0OyB6KyspIHsKKyAgICAgICAgICAgQSA9IChBIDw8IDgpIHwgKCh1bG9uZzMyKWtleVt5KytdICYgMjU1KTsKKyAgICAgICAgICAgaWYgKHkgPT0gKHVsb25nMzIpa2V5bGVuKSB7IAorICAgICAgICAgICAgICB5ID0gMDsgCisgICAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgc2tleS0+Ymxvd2Zpc2guS1t4XSA9IE9SSUdfUFt4XSBeIEE7CisgICB9CisKKyAgIC8qIGNvcHkgc2JveGVzICovCisgICBmb3IgKHggPSAwOyB4IDwgNDsgeCsrKSB7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDI1NjsgeSsrKSB7CisgICAgICAgICAgIHNrZXktPmJsb3dmaXNoLlNbeF1beV0gPSBPUklHX1NbeF1beV07CisgICAgICAgfQorICAgfQorCisgICAvKiBlbmNyeXB0IEsgYXJyYXkgKi8KKyAgIGZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKKyAgICAgICBCW3hdID0gMDsKKyAgIH0KKyAgIAorICAgZm9yICh4ID0gMDsgeCA8IDE4OyB4ICs9IDIpIHsKKyAgICAgICAvKiBlbmNyeXB0IGl0ICovCisgICAgICAgYmxvd2Zpc2hfZWNiX2VuY3J5cHQoQiwgQiwgc2tleSk7CisgICAgICAgLyogY29weSBpdCAqLworICAgICAgIExPQUQzMkgoc2tleS0+Ymxvd2Zpc2guS1t4XSwgJkJbMF0pOworICAgICAgIExPQUQzMkgoc2tleS0+Ymxvd2Zpc2guS1t4KzFdLCAmQls0XSk7CisgICB9CisKKyAgIC8qIGVuY3J5cHQgUyBhcnJheSAqLworICAgZm9yICh4ID0gMDsgeCA8IDQ7IHgrKykgeworICAgICAgIGZvciAoeSA9IDA7IHkgPCAyNTY7IHkgKz0gMikgeworICAgICAgICAgIC8qIGVuY3J5cHQgaXQgKi8KKyAgICAgICAgICBibG93ZmlzaF9lY2JfZW5jcnlwdChCLCBCLCBza2V5KTsKKyAgICAgICAgICAvKiBjb3B5IGl0ICovCisgICAgICAgICAgTE9BRDMySChza2V5LT5ibG93ZmlzaC5TW3hdW3ldLCAmQlswXSk7CisgICAgICAgICAgTE9BRDMySChza2V5LT5ibG93ZmlzaC5TW3hdW3krMV0sICZCWzRdKTsKKyAgICAgICB9CisgICB9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0oQiwgc2l6ZW9mKEIpKTsKKyNlbmRpZgorCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZm5kZWYgX19HTlVDX18KKyNkZWZpbmUgRih4KSAoKFMxW2J5dGUoeCwzKV0gKyBTMltieXRlKHgsMildKSBeIFMzW2J5dGUoeCwxKV0pICsgUzRbYnl0ZSh4LDApXQorI2Vsc2UKKyNkZWZpbmUgRih4KSAoKHNrZXktPmJsb3dmaXNoLlNbMF1bYnl0ZSh4LDMpXSArIHNrZXktPmJsb3dmaXNoLlNbMV1bYnl0ZSh4LDIpXSkgXiBza2V5LT5ibG93ZmlzaC5TWzJdW2J5dGUoeCwxKV0pICsgc2tleS0+Ymxvd2Zpc2guU1szXVtieXRlKHgsMCldCisjZW5kaWYKKworLyoqCisgIEVuY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIEJsb3dmaXNoCisgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQorICBAcGFyYW0gY3QgVGhlIG91dHB1dCBjaXBoZXJ0ZXh0ICg4IGJ5dGVzKQorICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IF9ibG93ZmlzaF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZWxzZQoraW50IGJsb3dmaXNoX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbmRpZgoreworICAgdWxvbmczMiBMLCBSOworICAgaW50IHI7CisjaWZuZGVmIF9fR05VQ19fCisgICB1bG9uZzMyICpTMSwgKlMyLCAqUzMsICpTNDsKKyNlbmRpZgorCisgICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoY3QgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyNpZm5kZWYgX19HTlVDX18KKyAgICBTMSA9IHNrZXktPmJsb3dmaXNoLlNbMF07CisgICAgUzIgPSBza2V5LT5ibG93ZmlzaC5TWzFdOworICAgIFMzID0gc2tleS0+Ymxvd2Zpc2guU1syXTsKKyAgICBTNCA9IHNrZXktPmJsb3dmaXNoLlNbM107CisjZW5kaWYKKworICAgLyogbG9hZCBpdCAqLworICAgTE9BRDMySChMLCAmcHRbMF0pOworICAgTE9BRDMySChSLCAmcHRbNF0pOworCisgICAvKiBkbyAxNiByb3VuZHMgKi8KKyAgIGZvciAociA9IDA7IHIgPCAxNjsgKSB7CisgICAgICBMIF49IHNrZXktPmJsb3dmaXNoLktbcisrXTsgIFIgXj0gRihMKTsKKyAgICAgIFIgXj0gc2tleS0+Ymxvd2Zpc2guS1tyKytdOyAgTCBePSBGKFIpOworICAgICAgTCBePSBza2V5LT5ibG93ZmlzaC5LW3IrK107ICBSIF49IEYoTCk7CisgICAgICBSIF49IHNrZXktPmJsb3dmaXNoLktbcisrXTsgIEwgXj0gRihSKTsKKyAgIH0KKworICAgLyogbGFzdCBrZXlpbmcgKi8KKyAgIFIgXj0gc2tleS0+Ymxvd2Zpc2guS1sxN107CisgICBMIF49IHNrZXktPmJsb3dmaXNoLktbMTZdOworCisgICAvKiBzdG9yZSAqLworICAgU1RPUkUzMkgoUiwgJmN0WzBdKTsKKyAgIFNUT1JFMzJIKEwsICZjdFs0XSk7CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworaW50IGJsb3dmaXNoX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgICBpbnQgZXJyID0gX2Jsb3dmaXNoX2VjYl9lbmNyeXB0KHB0LCBjdCwgc2tleSk7CisgICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiAyICsgc2l6ZW9mKGludCkpOworICAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyoqCisgIERlY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIEJsb3dmaXNoCisgIEBwYXJhbSBjdCBUaGUgaW5wdXQgY2lwaGVydGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIHB0IFRoZSBvdXRwdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQorICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZCAKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfYmxvd2Zpc2hfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2Vsc2UKK2ludCBibG93ZmlzaF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZW5kaWYKK3sKKyAgIHVsb25nMzIgTCwgUjsKKyAgIGludCByOworI2lmbmRlZiBfX0dOVUNfXworICAgdWxvbmczMiAqUzEsICpTMiwgKlMzLCAqUzQ7CisjZW5kaWYKKworICAgIExUQ19BUkdDSEsocHQgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworICAgIAorI2lmbmRlZiBfX0dOVUNfXworICAgIFMxID0gc2tleS0+Ymxvd2Zpc2guU1swXTsKKyAgICBTMiA9IHNrZXktPmJsb3dmaXNoLlNbMV07CisgICAgUzMgPSBza2V5LT5ibG93ZmlzaC5TWzJdOworICAgIFM0ID0gc2tleS0+Ymxvd2Zpc2guU1szXTsKKyNlbmRpZgorCisgICAvKiBsb2FkIGl0ICovCisgICBMT0FEMzJIKFIsICZjdFswXSk7CisgICBMT0FEMzJIKEwsICZjdFs0XSk7CisKKyAgIC8qIHVuZG8gbGFzdCBrZXlpbmcgKi8KKyAgIFIgXj0gc2tleS0+Ymxvd2Zpc2guS1sxN107CisgICBMIF49IHNrZXktPmJsb3dmaXNoLktbMTZdOworCisgICAvKiBkbyAxNiByb3VuZHMgKi8KKyAgIGZvciAociA9IDE1OyByID4gMDsgKSB7CisgICAgICBMIF49IEYoUik7IFIgXj0gc2tleS0+Ymxvd2Zpc2guS1tyLS1dOworICAgICAgUiBePSBGKEwpOyBMIF49IHNrZXktPmJsb3dmaXNoLktbci0tXTsKKyAgICAgIEwgXj0gRihSKTsgUiBePSBza2V5LT5ibG93ZmlzaC5LW3ItLV07CisgICAgICBSIF49IEYoTCk7IEwgXj0gc2tleS0+Ymxvd2Zpc2guS1tyLS1dOworICAgfQorCisgICAvKiBzdG9yZSAqLworICAgU1RPUkUzMkgoTCwgJnB0WzBdKTsKKyAgIFNUT1JFMzJIKFIsICZwdFs0XSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK2ludCBibG93ZmlzaF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICAgaW50IGVyciA9IF9ibG93ZmlzaF9lY2JfZGVjcnlwdChjdCwgcHQsIHNrZXkpOworICAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIpICogMiArIHNpemVvZihpbnQpKTsKKyAgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKworLyoqCisgIFBlcmZvcm1zIGEgc2VsZi10ZXN0IG9mIHRoZSBCbG93ZmlzaCBibG9jayBjaXBoZXIKKyAgQHJldHVybiBDUllQVF9PSyBpZiBmdW5jdGlvbmFsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0IGhhcyBiZWVuIGRpc2FibGVkCisqLworaW50IGJsb3dmaXNoX3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZSAgICAKKyAgIGludCBlcnI7CisgICBzeW1tZXRyaWNfa2V5IGtleTsKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5WzhdLCBwdFs4XSwgY3RbOF07CisgICB9IHRlc3RzW10gPSB7CisgICAgICAgeworICAgICAgICAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorICAgICAgICAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorICAgICAgICAgICB7IDB4NEUsIDB4RjksIDB4OTcsIDB4NDUsIDB4NjEsIDB4OTgsIDB4REQsIDB4Nzh9CisgICAgICAgfSwKKyAgICAgICB7CisgICAgICAgICAgIHsgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0sCisgICAgICAgICAgIHsgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRiwgMHhGRn0sCisgICAgICAgICAgIHsgMHg1MSwgMHg4NiwgMHg2RiwgMHhENSwgMHhCOCwgMHg1RSwgMHhDQiwgMHg4QX0KKyAgICAgICB9LAorICAgICAgIHsKKyAgICAgICAgICAgeyAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKyAgICAgICAgICAgeyAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxfSwKKyAgICAgICAgICAgeyAweDdELCAweDg1LCAweDZGLCAweDlBLCAweDYxLCAweDMwLCAweDYzLCAweEYyfQorICAgICAgIH0KKyAgIH07CisgICB1bnNpZ25lZCBjaGFyIHRtcFsyXVs4XTsKKyAgIGludCB4LCB5OworCisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKSAvIHNpemVvZih0ZXN0c1swXSkpOyB4KyspIHsKKyAgICAgIC8qIHNldHVwIGtleSAqLworICAgICAgaWYgKChlcnIgPSBibG93ZmlzaF9zZXR1cCh0ZXN0c1t4XS5rZXksIDgsIDE2LCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisKKyAgICAgIC8qIGVuY3J5cHQgYW5kIGRlY3J5cHQgKi8KKyAgICAgIGJsb3dmaXNoX2VjYl9lbmNyeXB0KHRlc3RzW3hdLnB0LCB0bXBbMF0sICZrZXkpOworICAgICAgYmxvd2Zpc2hfZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMV0sICZrZXkpOworCisgICAgICAvKiBjb21wYXJlICovCisgICAgICBpZiAoKFhNRU1DTVAodG1wWzBdLCB0ZXN0c1t4XS5jdCwgOCkgIT0gMCkgfHwgKFhNRU1DTVAodG1wWzFdLCB0ZXN0c1t4XS5wdCwgOCkgIT0gMCkpIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICB9CisKKyAgICAgIC8qIG5vdyBzZWUgaWYgd2UgY2FuIGVuY3J5cHQgYWxsIHplcm8gYnl0ZXMgMTAwMCB0aW1lcywgZGVjcnlwdCBhbmQgY29tZSBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQgKi8KKyAgICAgIGZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHRtcFswXVt5XSA9IDA7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwMDsgeSsrKSBibG93ZmlzaF9lY2JfZW5jcnlwdCh0bXBbMF0sIHRtcFswXSwgJmtleSk7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwMDsgeSsrKSBibG93ZmlzaF9lY2JfZGVjcnlwdCh0bXBbMF0sIHRtcFswXSwgJmtleSk7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSBpZiAodG1wWzBdW3ldICE9IDApIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7CisgI2VuZGlmCit9CisKKy8qKiBUZXJtaW5hdGUgdGhlIGNvbnRleHQgCisgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorKi8KK3ZvaWQgYmxvd2Zpc2hfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KQoreworfQorCisvKioKKyAgR2V0cyBzdWl0YWJsZSBrZXkgc2l6ZQorICBAcGFyYW0ga2V5c2l6ZSBbaW4vb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSByZWNvbW1lbmRlZCBrZXkgKGluIGJ5dGVzKS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSB0aGUgc3VpdGFibGUgc2l6ZSBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgdGhlIGlucHV0IGtleSBzaXplIGlzIGFjY2VwdGFibGUuCisqLworaW50IGJsb3dmaXNoX2tleXNpemUoaW50ICprZXlzaXplKQoreworICAgTFRDX0FSR0NISyhrZXlzaXplICE9IE5VTEwpOworCisgICBpZiAoKmtleXNpemUgPCA4KSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+IDU2KSB7CisgICAgICAqa2V5c2l6ZSA9IDU2OworICAgfQorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9ibG93ZmlzaC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2Nhc3Q1LmMgYi9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9jYXN0NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYTM5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9jYXN0NS5jCkBAIC0wLDAgKzEsNzIwIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworIAorIC8qKiAKKyAgIEBmaWxlIGNhc3Q1LmMKKyAgIEltcGxlbWVudGF0aW9uIG9mIENBU1Q1IChSRkMgMjE0NCkgYnkgVG9tIFN0IERlbmlzIAorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIENBU1Q1CisKK2NvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgY2FzdDVfZGVzYyA9IHsKKyAgICJjYXN0NSIsCisgICAxNSwKKyAgIDUsIDE2LCA4LCAxNiwKKyAgICZjYXN0NV9zZXR1cCwKKyAgICZjYXN0NV9lY2JfZW5jcnlwdCwKKyAgICZjYXN0NV9lY2JfZGVjcnlwdCwKKyAgICZjYXN0NV90ZXN0LAorICAgJmNhc3Q1X2RvbmUsCisgICAmY2FzdDVfa2V5c2l6ZSwKKyAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFMxWzI1Nl0gPSB7CisweDMwZmI0MGQ0VUwsIDB4OWZhMGZmMGJVTCwgMHg2YmVjY2QyZlVMLCAweDNmMjU4YzdhVUwsIDB4MWUyMTNmMmZVTCwgMHg5YzAwNGRkM1VMLCAKKzB4NjAwM2U1NDBVTCwgMHhjZjlmYzk0OVVMLCAweGJmZDRhZjI3VUwsIDB4ODhiYmJkYjVVTCwgMHhlMjAzNDA5MFVMLCAweDk4ZDA5Njc1VUwsIAorMHg2ZTYzYTBlMFVMLCAweDE1YzM2MWQyVUwsIDB4YzJlNzY2MWRVTCwgMHgyMmQ0ZmY4ZVVMLCAweDI4NjgzYjZmVUwsIDB4YzA3ZmQwNTlVTCwgCisweGZmMjM3OWM4VUwsIDB4Nzc1ZjUwZTJVTCwgMHg0M2MzNDBkM1VMLCAweGRmMmY4NjU2VUwsIDB4ODg3Y2E0MWFVTCwgMHhhMmQyYmQyZFVMLCAKKzB4YTFjOWUwZDZVTCwgMHgzNDZjNDgxOVVMLCAweDYxYjc2ZDg3VUwsIDB4MjI1NDBmMmZVTCwgMHgyYWJlMzJlMVVMLCAweGFhNTQxNjZiVUwsIAorMHgyMjU2OGUzYVVMLCAweGEyZDM0MWQwVUwsIDB4NjZkYjQwYzhVTCwgMHhhNzg0MzkyZlVMLCAweDAwNGRmZjJmVUwsIDB4MmRiOWQyZGVVTCwgCisweDk3OTQzZmFjVUwsIDB4NGE5N2MxZDhVTCwgMHg1Mjc2NDRiN1VMLCAweGI1ZjQzN2E3VUwsIDB4YjgyY2JhZWZVTCwgMHhkNzUxZDE1OVVMLCAKKzB4NmZmN2YwZWRVTCwgMHg1YTA5N2ExZlVMLCAweDgyN2I2OGQwVUwsIDB4OTBlY2Y1MmVVTCwgMHgyMmIwYzA1NFVMLCAweGJjOGU1OTM1VUwsIAorMHg0YjZkMmY3ZlVMLCAweDUwYmI2NGEyVUwsIDB4ZDI2NjQ5MTBVTCwgMHhiZWU1ODEyZFVMLCAweGI3MzMyMjkwVUwsIDB4ZTkzYjE1OWZVTCwgCisweGI0OGVlNDExVUwsIDB4NGJmZjM0NWRVTCwgMHhmZDQ1YzI0MFVMLCAweGFkMzE5NzNmVUwsIDB4YzRmNmQwMmVVTCwgMHg1NWZjODE2NVVMLCAKKzB4ZDViMWNhYWRVTCwgMHhhMWFjMmRhZVVMLCAweGEyZDRiNzZkVUwsIDB4YzE5YjBjNTBVTCwgMHg4ODIyNDBmMlVMLCAweDBjNmU0ZjM4VUwsIAorMHhhNGU0YmZkN1VMLCAweDRmNWJhMjcyVUwsIDB4NTY0YzFkMmZVTCwgMHhjNTljNTMxOVVMLCAweGI5NDllMzU0VUwsIDB4YjA0NjY5ZmVVTCwgCisweGIxYjZhYjhhVUwsIDB4YzcxMzU4ZGRVTCwgMHg2Mzg1YzU0NVVMLCAweDExMGY5MzVkVUwsIDB4NTc1MzhhZDVVTCwgMHg2YTM5MDQ5M1VMLCAKKzB4ZTYzZDM3ZTBVTCwgMHgyYTU0ZjZiM1VMLCAweDNhNzg3ZDVmVUwsIDB4NjI3NmEwYjVVTCwgMHgxOWE2ZmNkZlVMLCAweDdhNDIyMDZhVUwsIAorMHgyOWY5ZDRkNVVMLCAweGY2MWIxODkxVUwsIDB4YmI3MjI3NWVVTCwgMHhhYTUwODE2N1VMLCAweDM4OTAxMDkxVUwsIDB4YzZiNTA1ZWJVTCwgCisweDg0YzdjYjhjVUwsIDB4MmFkNzVhMGZVTCwgMHg4NzRhMTQyN1VMLCAweGEyZDE5MzZiVUwsIDB4MmFkMjg2YWZVTCwgMHhhYTU2ZDI5MVVMLCAKKzB4ZDc4OTQzNjBVTCwgMHg0MjVjNzUwZFVMLCAweDkzYjM5ZTI2VUwsIDB4MTg3MTg0YzlVTCwgMHg2YzAwYjMyZFVMLCAweDczZTJiYjE0VUwsIAorMHhhMGJlYmMzY1VMLCAweDU0NjIzNzc5VUwsIDB4NjQ0NTllYWJVTCwgMHgzZjMyOGI4MlVMLCAweDc3MThjZjgyVUwsIDB4NTlhMmNlYTZVTCwgCisweDA0ZWUwMDJlVUwsIDB4ODlmZTc4ZTZVTCwgMHgzZmFiMDk1MFVMLCAweDMyNWZmNmMyVUwsIDB4ODEzODNmMDVVTCwgMHg2OTYzYzVjOFVMLCAKKzB4NzZjYjVhZDZVTCwgMHhkNDk5NzRjOVVMLCAweGNhMTgwZGNmVUwsIDB4MzgwNzgyZDVVTCwgMHhjN2ZhNWNmNlVMLCAweDhhYzMxNTExVUwsIAorMHgzNWU3OWUxM1VMLCAweDQ3ZGE5MWQwVUwsIDB4ZjQwZjkwODZVTCwgMHhhN2UyNDE5ZVVMLCAweDMxMzY2MjQxVUwsIDB4MDUxZWY0OTVVTCwgCisweGFhNTczYjA0VUwsIDB4NGE4MDVkOGRVTCwgMHg1NDgzMDBkMFVMLCAweDAwMzIyYTNjVUwsIDB4YmY2NGNkZGZVTCwgMHhiYTU3YTY4ZVVMLCAKKzB4NzVjNjM3MmJVTCwgMHg1MGFmZDM0MVVMLCAweGE3YzEzMjc1VUwsIDB4OTE1YTBiZjVVTCwgMHg2YjU0YmZhYlVMLCAweDJiMGIxNDI2VUwsIAorMHhhYjRjYzlkN1VMLCAweDQ0OWNjZDgyVUwsIDB4ZjdmYmYyNjVVTCwgMHhhYjg1YzVmM1VMLCAweDFiNTVkYjk0VUwsIDB4YWFkNGUzMjRVTCwgCisweGNmYTRiZDNmVUwsIDB4MmRlYWEzZTJVTCwgMHg5ZTIwNGQwMlVMLCAweGM4YmQyNWFjVUwsIDB4ZWFkZjU1YjNVTCwgMHhkNWJkOWU5OFVMLCAKKzB4ZTMxMjMxYjJVTCwgMHgyYWQ1YWQ2Y1VMLCAweDk1NDMyOWRlVUwsIDB4YWRiZTQ1MjhVTCwgMHhkODcxMGY2OVVMLCAweGFhNTFjOTBmVUwsIAorMHhhYTc4NmJmNlVMLCAweDIyNTEzZjFlVUwsIDB4YWE1MWE3OWJVTCwgMHgyYWQzNDRjY1VMLCAweDdiNWE0MWYwVUwsIDB4ZDM3Y2ZiYWRVTCwgCisweDFiMDY5NTA1VUwsIDB4NDFlY2U0OTFVTCwgMHhiNGMzMzJlNlVMLCAweDAzMjI2OGQ0VUwsIDB4Yzk2MDBhY2NVTCwgMHhjZTM4N2U2ZFVMLCAKKzB4YmY2YmIxNmNVTCwgMHg2YTcwZmI3OFVMLCAweDBkMDNkOWM5VUwsIDB4ZDRkZjM5ZGVVTCwgMHhlMDEwNjNkYVVMLCAweDQ3MzZmNDY0VUwsIAorMHg1YWQzMjhkOFVMLCAweGIzNDdjYzk2VUwsIDB4NzViYjBmYzNVTCwgMHg5ODUxMWJmYlVMLCAweDRmZmJjYzM1VUwsIDB4YjU4YmNmNmFVTCwgCisweGUxMWYwYWJjVUwsIDB4YmZjNWZlNGFVTCwgMHhhNzBhZWMxMFVMLCAweGFjMzk1NzBhVUwsIDB4M2YwNDQ0MmZVTCwgMHg2MTg4YjE1M1VMLCAKKzB4ZTAzOTdhMmVVTCwgMHg1NzI3Y2I3OVVMLCAweDljZWI0MThmVUwsIDB4MWNhY2Q2OGRVTCwgMHgyYWQzN2M5NlVMLCAweDAxNzVjYjlkVUwsIAorMHhjNjlkZmYwOVVMLCAweGM3NWI2NWYwVUwsIDB4ZDlkYjQwZDhVTCwgMHhlYzBlNzc3OVVMLCAweDQ3NDRlYWQ0VUwsIDB4YjExYzMyNzRVTCwgCisweGRkMjRjYjllVUwsIDB4N2UxYzU0YmRVTCwgMHhmMDExNDRmOVVMLCAweGQyMjQwZWIxVUwsIDB4OTY3NWIzZmRVTCwgMHhhM2FjMzc1NVVMLCAKKzB4ZDQ3YzI3YWZVTCwgMHg1MWM4NWY0ZFVMLCAweDU2OTA3NTk2VUwsIDB4YTViYjE1ZTZVTCwgMHg1ODAzMDRmMFVMLCAweGNhMDQyY2YxVUwsIAorMHgwMTFhMzdlYVVMLCAweDhkYmZhYWRiVUwsIDB4MzViYTNlNGFVTCwgMHgzNTI2ZmZhMFVMLCAweGMzN2I0ZDA5VUwsIDB4YmMzMDZlZDlVTCwgCisweDk4YTUyNjY2VUwsIDB4NTY0OGY3MjVVTCwgMHhmZjVlNTY5ZFVMLCAweDBjZWQ2M2QwVUwsIDB4N2M2M2IyY2ZVTCwgMHg3MDBiNDVlMVVMLCAKKzB4ZDVlYTUwZjFVTCwgMHg4NWE5Mjg3MlVMLCAweGFmMWZiZGE3VUwsIDB4ZDQyMzQ4NzBVTCwgMHhhNzg3MGJmM1VMLCAweDJkM2I0ZDc5VUwsIAorMHg0MmUwNDE5OFVMLCAweDBjZDBlZGU3VUwsIDB4MjY0NzBkYjhVTCwgMHhmODgxODE0Y1VMLCAweDQ3NGQ2YWQ3VUwsIDB4N2MwYzVlNWNVTCwgCisweGQxMjMxOTU5VUwsIDB4MzgxYjcyOThVTCwgMHhmNWQyZjRkYlVMLCAweGFiODM4NjUzVUwsIDB4NmUyZjFlMjNVTCwgMHg4MzcxOWM5ZVVMLCAKKzB4YmQ5MWUwNDZVTCwgMHg5YTU2NDU2ZVVMLCAweGRjMzkyMDBjVUwsIDB4MjBjOGM1NzFVTCwgMHg5NjJiZGExY1VMLCAweGUxZTY5NmZmVUwsIAorMHhiMTQxYWIwOFVMLCAweDdjY2E4OWI5VUwsIDB4MWE2OWU3ODNVTCwgMHgwMmNjNDg0M1VMLCAweGEyZjdjNTc5VUwsIDB4NDI5ZWY0N2RVTCwgCisweDQyN2IxNjljVUwsIDB4NWFjOWYwNDlVTCwgMHhkZDhmMGYwMFVMLCAweDVjODE2NWJmVUx9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTMlsyNTZdID0geworMHgxZjIwMTA5NFVMLCAweGVmMGJhNzViVUwsIDB4NjllM2NmN2VVTCwgMHgzOTNmNDM4MFVMLCAweGZlNjFjZjdhVUwsIDB4ZWVjNTIwN2FVTCwgCisweDU1ODg5Yzk0VUwsIDB4NzJmYzA2NTFVTCwgMHhhZGE3ZWY3OVVMLCAweDRlMWQ3MjM1VUwsIDB4ZDU1YTYzY2VVTCwgMHhkZTA0MzZiYVVMLCAKKzB4OTljNDMwZWZVTCwgMHg1ZjBjMDc5NFVMLCAweDE4ZGNkYjdkVUwsIDB4YTFkNmVmZjNVTCwgMHhhMGI1MmY3YlVMLCAweDU5ZTgzNjA1VUwsIAorMHhlZTE1YjA5NFVMLCAweGU5ZmZkOTA5VUwsIDB4ZGM0NDAwODZVTCwgMHhlZjk0NDQ1OVVMLCAweGJhODNjY2IzVUwsIDB4ZTBjM2NkZmJVTCwgCisweGQxZGE0MTgxVUwsIDB4M2IwOTJhYjFVTCwgMHhmOTk3ZjFjMVVMLCAweGE1ZTZjZjdiVUwsIDB4MDE0MjBkZGJVTCwgMHhlNGU3ZWY1YlVMLCAKKzB4MjVhMWZmNDFVTCwgMHhlMTgwZjgwNlVMLCAweDFmYzQxMDgwVUwsIDB4MTc5YmVlN2FVTCwgMHhkMzdhYzZhOVVMLCAweGZlNTgzMGE0VUwsIAorMHg5OGRlOGI3ZlVMLCAweDc3ZTgzZjRlVUwsIDB4Nzk5MjkyNjlVTCwgMHgyNGZhOWY3YlVMLCAweGUxMTNjODViVUwsIDB4YWNjNDAwODNVTCwgCisweGQ3NTAzNTI1VUwsIDB4ZjdlYTYxNWZVTCwgMHg2MjE0MzE1NFVMLCAweDBkNTU0YjYzVUwsIDB4NWQ2ODExMjFVTCwgMHhjODY2YzM1OVVMLCAKKzB4M2Q2M2NmNzNVTCwgMHhjZWUyMzRjMFVMLCAweGQ0ZDg3ZTg3VUwsIDB4NWM2NzJiMjFVTCwgMHgwNzFmNjE4MVVMLCAweDM5Zjc2MjdmVUwsIAorMHgzNjFlMzA4NFVMLCAweGU0ZWI1NzNiVUwsIDB4NjAyZjY0YTRVTCwgMHhkNjNhY2Q5Y1VMLCAweDFiYmM0NjM1VUwsIDB4OWU4MTAzMmRVTCwgCisweDI3MDFmNTBjVUwsIDB4OTk4NDdhYjRVTCwgMHhhMGUzZGY3OVVMLCAweGJhNmNmMzhjVUwsIDB4MTA4NDMwOTRVTCwgMHgyNTM3YTk1ZVVMLCAKKzB4ZjQ2ZjZmZmVVTCwgMHhhMWZmM2IxZlVMLCAweDIwOGNmYjZhVUwsIDB4OGY0NThjNzRVTCwgMHhkOWUwYTIyN1VMLCAweDRlYzczYTM0VUwsIAorMHhmYzg4NGY2OVVMLCAweDNlNGRlOGRmVUwsIDB4ZWYwZTAwODhVTCwgMHgzNTU5NjQ4ZFVMLCAweDhhNDUzODhjVUwsIDB4MWQ4MDQzNjZVTCwgCisweDcyMWQ5YmZkVUwsIDB4YTU4Njg0YmJVTCwgMHhlODI1NjMzM1VMLCAweDg0NGU4MjEyVUwsIDB4MTI4ZDgwOThVTCwgMHhmZWQzM2ZiNFVMLCAKKzB4Y2UyODBhZTFVTCwgMHgyN2UxOWJhNVVMLCAweGQ1YTZjMjUyVUwsIDB4ZTQ5NzU0YmRVTCwgMHhjNWQ2NTVkZFVMLCAweGViNjY3MDY0VUwsIAorMHg3Nzg0MGI0ZFVMLCAweGExYjZhODAxVUwsIDB4ODRkYjI2YTlVTCwgMHhlMGI1NjcxNFVMLCAweDIxZjA0M2I3VUwsIDB4ZTVkMDU4NjBVTCwgCisweDU0ZjAzMDg0VUwsIDB4MDY2ZmY0NzJVTCwgMHhhMzFhYTE1M1VMLCAweGRhZGM0NzU1VUwsIDB4YjU2MjVkYmZVTCwgMHg2ODU2MWJlNlVMLCAKKzB4ODNjYTZiOTRVTCwgMHgyZDZlZDIzYlVMLCAweGVjY2YwMWRiVUwsIDB4YTZkM2QwYmFVTCwgMHhiNjgwM2Q1Y1VMLCAweGFmNzdhNzA5VUwsIAorMHgzM2I0YTM0Y1VMLCAweDM5N2JjOGQ2VUwsIDB4NWVlMjJiOTVVTCwgMHg1ZjBlNTMwNFVMLCAweDgxZWQ2ZjYxVUwsIDB4MjBlNzQzNjRVTCwgCisweGI0NWUxMzc4VUwsIDB4ZGUxODYzOWJVTCwgMHg4ODFjYTEyMlVMLCAweGI5NjcyNmQxVUwsIDB4ODA0OWE3ZThVTCwgMHgyMmI3ZGE3YlVMLCAKKzB4NWU1NTJkMjVVTCwgMHg1MjcyZDIzN1VMLCAweDc5ZDI5NTFjVUwsIDB4YzYwZDg5NGNVTCwgMHg0ODhjYjQwMlVMLCAweDFiYTRmZTViVUwsIAorMHhhNGIwOWY2YlVMLCAweDFjYTgxNWNmVUwsIDB4YTIwYzMwMDVVTCwgMHg4ODcxZGY2M1VMLCAweGI5ZGUyZmNiVUwsIDB4MGNjNmM5ZTlVTCwgCisweDBiZWVmZjUzVUwsIDB4ZTMyMTQ1MTdVTCwgMHhiNDU0MjgzNVVMLCAweDlmNjMyOTNjVUwsIDB4ZWU0MWU3MjlVTCwgMHg2ZTFkMmQ3Y1VMLCAKKzB4NTAwNDUyODZVTCwgMHgxZTY2ODVmM1VMLCAweGYzMzQwMWM2VUwsIDB4MzBhMjJjOTVVTCwgMHgzMWE3MDg1MFVMLCAweDYwOTMwZjEzVUwsIAorMHg3M2Y5ODQxN1VMLCAweGExMjY5ODU5VUwsIDB4ZWM2NDVjNDRVTCwgMHg1MmM4NzdhOVVMLCAweGNkZmYzM2E2VUwsIDB4YTAyYjE3NDFVTCwgCisweDdjYmFkOWEyVUwsIDB4MjE4MDAzNmZVTCwgMHg1MGQ5OWMwOFVMLCAweGNiM2Y0ODYxVUwsIDB4YzI2YmQ3NjVVTCwgMHg2NGEzZjZhYlVMLCAKKzB4ODAzNDI2NzZVTCwgMHgyNWE3NWU3YlVMLCAweGU0ZTZkMWZjVUwsIDB4MjBjNzEwZTZVTCwgMHhjZGYwYjY4MFVMLCAweDE3ODQ0ZDNiVUwsIAorMHgzMWVlZjg0ZFVMLCAweDdlMDgyNGU0VUwsIDB4MmNjYjQ5ZWJVTCwgMHg4NDZhM2JhZVVMLCAweDhmZjc3ODg4VUwsIDB4ZWU1ZDYwZjZVTCwgCisweDdhZjc1NjczVUwsIDB4MmZkZDVjZGJVTCwgMHhhMTE2MzFjMVVMLCAweDMwZjY2ZjQzVUwsIDB4YjNmYWVjNTRVTCwgMHgxNTdmZDdmYVVMLCAKKzB4ZWY4NTc5Y2NVTCwgMHhkMTUyZGU1OFVMLCAweGRiMmZmZDVlVUwsIDB4OGYzMmNlMTlVTCwgMHgzMDZhZjk3YVVMLCAweDAyZjAzZWY4VUwsIAorMHg5OTMxOWFkNVVMLCAweGMyNDJmYTBmVUwsIDB4YTdlM2ViYjBVTCwgMHhjNjhlNDkwNlVMLCAweGI4ZGEyMzBjVUwsIDB4ODA4MjMwMjhVTCwgCisweGRjZGVmM2M4VUwsIDB4ZDM1ZmIxNzFVTCwgMHgwODhhMWJjOFVMLCAweGJlYzBjNTYwVUwsIDB4NjFhM2M5ZThVTCwgMHhiY2E4ZjU0ZFVMLCAKKzB4YzcyZmVmZmFVTCwgMHgyMjgyMmU5OVVMLCAweDgyYzU3MGI0VUwsIDB4ZDhkOTRlODlVTCwgMHg4YjFjMzRiY1VMLCAweDMwMWUxNmU2VUwsIAorMHgyNzNiZTk3OVVMLCAweGIwZmZlYWE2VUwsIDB4NjFkOWI4YzZVTCwgMHgwMGIyNDg2OVVMLCAweGI3ZmZjZTNmVUwsIDB4MDhkYzI4M2JVTCwgCisweDQzZGFmNjVhVUwsIDB4ZjdlMTk3OThVTCwgMHg3NjE5YjcyZlVMLCAweDhmMWM5YmE0VUwsIDB4ZGM4NjM3YTBVTCwgMHgxNmE3ZDNiMVVMLCAKKzB4OWZjMzkzYjdVTCwgMHhhNzEzNmVlYlVMLCAweGM2YmNjNjNlVUwsIDB4MWE1MTM3NDJVTCwgMHhlZjY4MjhiY1VMLCAweDUyMDM2NWQ2VUwsIAorMHgyZDZhNzdhYlVMLCAweDM1MjdlZDRiVUwsIDB4ODIxZmQyMTZVTCwgMHgwOTVjNmUyZVVMLCAweGRiOTJmMmZiVUwsIDB4NWVlYTI5Y2JVTCwgCisweDE0NTg5MmY1VUwsIDB4OTE1ODRmN2ZVTCwgMHg1NDgzNjk3YlVMLCAweDI2NjdhOGNjVUwsIDB4ODUxOTYwNDhVTCwgMHg4YzRiYWNlYVVMLCAKKzB4ODMzODYwZDRVTCwgMHgwZDIzZTBmOVVMLCAweDZjMzg3ZThhVUwsIDB4MGFlNmQyNDlVTCwgMHhiMjg0NjAwY1VMLCAweGQ4MzU3MzFkVUwsIAorMHhkY2IxYzY0N1VMLCAweGFjNGM1NmVhVUwsIDB4M2ViZDgxYjNVTCwgMHgyMzBlYWJiMFVMLCAweDY0MzhiYzg3VUwsIDB4ZjBiNWIxZmFVTCwgCisweDhmNWVhMmIzVUwsIDB4ZmMxODQ2NDJVTCwgMHgwYTAzNmI3YVVMLCAweDRmYjA4OWJkVUwsIDB4NjQ5ZGE1ODlVTCwgMHhhMzQ1NDE1ZVVMLCAKKzB4NWMwMzgzMjNVTCwgMHgzZTVkM2JiOVVMLCAweDQzZDc5NTcyVUwsIDB4N2U2ZGQwN2NVTCwgMHgwNmRmZGYxZVVMLCAweDZjNmNjNGVmVUwsIAorMHg3MTYwYTUzOVVMLCAweDczYmZiZTcwVUwsIDB4ODM4Nzc2MDVVTCwgMHg0NTIzZWNmMVVMfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgUzNbMjU2XSA9IHsKKzB4OGRlZmMyNDBVTCwgMHgyNWZhNWQ5ZlVMLCAweGViOTAzZGJmVUwsIDB4ZTgxMGM5MDdVTCwgMHg0NzYwN2ZmZlVMLCAweDM2OWZlNDRiVUwsIAorMHg4YzFmYzY0NFVMLCAweGFlY2VjYTkwVUwsIDB4YmViMWY5YmZVTCwgMHhlZWZiY2FlYVVMLCAweGU4Y2YxOTUwVUwsIDB4NTFkZjA3YWVVTCwgCisweDkyMGU4ODA2VUwsIDB4ZjBhZDA1NDhVTCwgMHhlMTNjOGQ4M1VMLCAweDkyNzAxMGQ1VUwsIDB4MTExMDdkOWZVTCwgMHgwNzY0N2RiOVVMLCAKKzB4YjJlM2U0ZDRVTCwgMHgzZDRmMjg1ZVVMLCAweGI5YWZhODIwVUwsIDB4ZmFkZTgyZTBVTCwgMHhhMDY3MjY4YlVMLCAweDgyNzI3OTJlVUwsIAorMHg1NTNmYjJjMFVMLCAweDQ4OWFlMjJiVUwsIDB4ZDRlZjk3OTRVTCwgMHgxMjVlM2ZiY1VMLCAweDIxZmZmY2VlVUwsIDB4ODI1YjFiZmRVTCwgCisweDkyNTVjNWVkVUwsIDB4MTI1N2EyNDBVTCwgMHg0ZTFhODMwMlVMLCAweGJhZTA3ZmZmVUwsIDB4NTI4MjQ2ZTdVTCwgMHg4ZTU3MTQwZVVMLCAKKzB4MzM3M2Y3YmZVTCwgMHg4YzlmODE4OFVMLCAweGE2ZmM0ZWU4VUwsIDB4Yzk4MmI1YTVVTCwgMHhhOGMwMWRiN1VMLCAweDU3OWZjMjY0VUwsIAorMHg2NzA5NGYzMVVMLCAweGYyYmQzZjVmVUwsIDB4NDBmZmY3YzFVTCwgMHgxZmI3OGRmY1VMLCAweDhlNmJkMmMxVUwsIDB4NDM3YmU1OWJVTCwgCisweDk5YjAzZGJmVUwsIDB4YjVkYmM2NGJVTCwgMHg2MzhkYzBlNlVMLCAweDU1ODE5ZDk5VUwsIDB4YTE5N2M4MWNVTCwgMHg0YTAxMmQ2ZVVMLCAKKzB4YzU4ODRhMjhVTCwgMHhjY2MzNmY3MVVMLCAweGI4NDNjMjEzVUwsIDB4NmMwNzQzZjFVTCwgMHg4MzA5ODkzY1VMLCAweDBmZWRkZDVmVUwsIAorMHgyZjdmZTg1MFVMLCAweGQ3YzA3ZjdlVUwsIDB4MDI1MDdmYmZVTCwgMHg1YWZiOWEwNFVMLCAweGE3NDdkMmQwVUwsIDB4MTY1MTE5MmVVTCwgCisweGFmNzBiZjNlVUwsIDB4NThjMzEzODBVTCwgMHg1Zjk4MzAyZVVMLCAweDcyN2NjM2M0VUwsIDB4MGEwZmI0MDJVTCwgMHgwZjdmZWY4MlVMLCAKKzB4OGM5NmZkYWRVTCwgMHg1ZDJjMmFhZVVMLCAweDhlZTk5YTQ5VUwsIDB4NTBkYTg4YjhVTCwgMHg4NDI3ZjRhMFVMLCAweDFlYWM1NzkwVUwsIAorMHg3OTZmYjQ0OVVMLCAweDgyNTJkYzE1VUwsIDB4ZWZiZDdkOWJVTCwgMHhhNjcyNTk3ZFVMLCAweGFkYTg0MGQ4VUwsIDB4NDVmNTQ1MDRVTCwgCisweGZhNWQ3NDAzVUwsIDB4ZTgzZWMzMDVVTCwgMHg0ZjkxNzUxYVVMLCAweDkyNTY2OWMyVUwsIDB4MjNlZmU5NDFVTCwgMHhhOTAzZjEyZVVMLCAKKzB4NjAyNzBkZjJVTCwgMHgwMjc2ZTRiNlVMLCAweDk0ZmQ2NTc0VUwsIDB4OTI3OTg1YjJVTCwgMHg4Mjc2ZGJjYlVMLCAweDAyNzc4MTc2VUwsIAorMHhmOGFmOTE4ZFVMLCAweDRlNDhmNzllVUwsIDB4OGY2MTZkZGZVTCwgMHhlMjlkODQwZVVMLCAweDg0MmY3ZDgzVUwsIDB4MzQwY2U1YzhVTCwgCisweDk2YmJiNjgyVUwsIDB4OTNiNGIxNDhVTCwgMHhlZjMwM2NhYlVMLCAweDk4NGZhZjI4VUwsIDB4Nzc5ZmFmOWJVTCwgMHg5MmRjNTYwZFVMLCAKKzB4MjI0ZDFlMjBVTCwgMHg4NDM3YWE4OFVMLCAweDdkMjlkYzk2VUwsIDB4Mjc1NmQzZGNVTCwgMHg4YjkwN2NlZVVMLCAweGI1MWZkMjQwVUwsIAorMHhlN2MwN2NlM1VMLCAweGU1NjZiNGExVUwsIDB4YzNlOTYxNWVVTCwgMHgzY2Y4MjA5ZFVMLCAweDYwOTRkMWUzVUwsIDB4Y2Q5Y2EzNDFVTCwgCisweDVjNzY0NjBlVUwsIDB4MDBlYTk4M2JVTCwgMHhkNGQ2Nzg4MVVMLCAweGZkNDc1NzJjVUwsIDB4Zjc2Y2VkZDlVTCwgMHhiZGE4MjI5Y1VMLCAKKzB4MTI3ZGFkYWFVTCwgMHg0MzhhMDc0ZVVMLCAweDFmOTdjMDkwVUwsIDB4MDgxYmRiOGFVTCwgMHg5M2EwN2ViZVVMLCAweGI5MzhjYTE1VUwsIAorMHg5N2IwM2NmZlVMLCAweDNkYzJjMGY4VUwsIDB4OGQxYWIyZWNVTCwgMHg2NDM4MGU1MVVMLCAweDY4Y2M3YmZiVUwsIDB4ZDkwZjI3ODhVTCwgCisweDEyNDkwMTgxVUwsIDB4NWRlNWZmZDRVTCwgMHhkZDdlZjg2YVVMLCAweDc2YTJlMjE0VUwsIDB4YjlhNDAzNjhVTCwgMHg5MjVkOTU4ZlVMLCAKKzB4NGIzOWZmZmFVTCwgMHhiYTM5YWVlOVVMLCAweGE0ZmZkMzBiVUwsIDB4ZmFmNzkzM2JVTCwgMHg2ZDQ5ODYyM1VMLCAweDE5M2NiY2ZhVUwsIAorMHgyNzYyNzU0NVVMLCAweDgyNWNmNDdhVUwsIDB4NjFiZDhiYTBVTCwgMHhkMTFlNDJkMVVMLCAweGNlYWQwNGY0VUwsIDB4MTI3ZWEzOTJVTCwgCisweDEwNDI4ZGI3VUwsIDB4ODI3MmE5NzJVTCwgMHg5MjcwYzRhOFVMLCAweDEyN2RlNTBiVUwsIDB4Mjg1YmExYzhVTCwgMHgzYzYyZjQ0ZlVMLCAKKzB4MzVjMGVhYTVVTCwgMHhlODA1ZDIzMVVMLCAweDQyODkyOWZiVUwsIDB4YjRmY2RmODJVTCwgMHg0ZmI2NmE1M1VMLCAweDBlN2RjMTViVUwsIAorMHgxZjA4MWZhYlVMLCAweDEwODYxOGFlVUwsIDB4ZmNmZDA4NmRVTCwgMHhmOWZmMjg4OVVMLCAweDY5NGJjYzExVUwsIDB4MjM2YTVjYWVVTCwgCisweDEyZGVjYTRkVUwsIDB4MmMzZjhjYzVVTCwgMHhkMmQwMmRmZVVMLCAweGY4ZWY1ODk2VUwsIDB4ZTRjZjUyZGFVTCwgMHg5NTE1NWI2N1VMLCAKKzB4NDk0YTQ4OGNVTCwgMHhiOWI2YTgwY1VMLCAweDVjOGY4MmJjVUwsIDB4ODlkMzZiNDVVTCwgMHgzYTYwOTQzN1VMLCAweGVjMDBjOWE5VUwsIAorMHg0NDcxNTI1M1VMLCAweDBhODc0YjQ5VUwsIDB4ZDc3M2JjNDBVTCwgMHg3YzM0NjcxY1VMLCAweDAyNzE3ZWY2VUwsIDB4NGZlYjU1MzZVTCwgCisweGEyZDAyZmZmVUwsIDB4ZDJiZjYwYzRVTCwgMHhkNDNmMDNjMFVMLCAweDUwYjRlZjZkVUwsIDB4MDc0NzhjZDFVTCwgMHgwMDZlMTg4OFVMLCAKKzB4YTJlNTNmNTVVTCwgMHhiOWU2ZDRiY1VMLCAweGEyMDQ4MDE2VUwsIDB4OTc1NzM4MzNVTCwgMHhkNzIwN2Q2N1VMLCAweGRlMGY4ZjNkVUwsIAorMHg3MmY4N2IzM1VMLCAweGFiY2M0ZjMzVUwsIDB4NzY4OGM1NWRVTCwgMHg3YjAwYTZiMFVMLCAweDk0N2IwMDAxVUwsIDB4NTcwMDc1ZDJVTCwgCisweGY5YmI4OGY4VUwsIDB4ODk0MjAxOWVVTCwgMHg0MjY0YTVmZlVMLCAweDg1NjMwMmUwVUwsIDB4NzJkYmQ5MmJVTCwgMHhlZTk3MWI2OVVMLCAKKzB4NmVhMjJmZGVVTCwgMHg1ZjA4YWUyYlVMLCAweGFmN2E2MTZkVUwsIDB4ZTVjOTg3NjdVTCwgMHhjZjFmZWJkMlVMLCAweDYxZWZjOGMyVUwsIAorMHhmMWFjMjU3MVVMLCAweGNjODIzOWMyVUwsIDB4NjcyMTRjYjhVTCwgMHhiMWU1ODNkMVVMLCAweGI3ZGMzZTYyVUwsIDB4N2YxMGJkY2VVTCwgCisweGY5MGE1YzM4VUwsIDB4MGZmMDQ0M2RVTCwgMHg2MDZlNmRjNlVMLCAweDYwNTQzYTQ5VUwsIDB4NTcyN2MxNDhVTCwgMHgyYmU5OGExZFVMLCAKKzB4OGFiNDE3MzhVTCwgMHgyMGUxYmUyNFVMLCAweGFmOTZkYTBmVUwsIDB4Njg0NTg0MjVVTCwgMHg5OTgzM2JlNVVMLCAweDYwMGQ0NTdkVUwsIAorMHgyODJmOTM1MFVMLCAweDgzMzRiMzYyVUwsIDB4ZDkxZDExMjBVTCwgMHgyYjZkOGRhMFVMLCAweDY0MmIxZTMxVUwsIDB4OWMzMDVhMDBVTCwgCisweDUyYmNlNjg4VUwsIDB4MWIwMzU4OGFVTCwgMHhmN2JhZWZkNVVMLCAweDQxNDJlZDljVUwsIDB4YTQzMTVjMTFVTCwgMHg4MzMyM2VjNVVMLCAKKzB4ZGZlZjQ2MzZVTCwgMHhhMTMzYzUwMVVMLCAweGU5ZDM1MzFjVUwsIDB4ZWUzNTM3ODNVTH07CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFM0WzI1Nl0gPSB7CisweDlkYjMwNDIwVUwsIDB4MWZiNmU5ZGVVTCwgMHhhN2JlN2JlZlVMLCAweGQyNzNhMjk4VUwsIDB4NGE0ZjdiZGJVTCwgMHg2NGFkOGM1N1VMLCAKKzB4ODU1MTA0NDNVTCwgMHhmYTAyMGVkMVVMLCAweDdlMjg3YWZmVUwsIDB4ZTYwZmI2NjNVTCwgMHgwOTVmMzVhMVVMLCAweDc5ZWJmMTIwVUwsIAorMHhmZDA1OWQ0M1VMLCAweDY0OTdiN2IxVUwsIDB4ZjM2NDFmNjNVTCwgMHgyNDFlNGFkZlVMLCAweDI4MTQ3ZjVmVUwsIDB4NGZhMmI4Y2RVTCwgCisweGM5NDMwMDQwVUwsIDB4MGNjMzIyMjBVTCwgMHhmZGQzMGIzMFVMLCAweGMwYTUzNzRmVUwsIDB4MWQyZDAwZDlVTCwgMHgyNDE0N2IxNVVMLCAKKzB4ZWU0ZDExMWFVTCwgMHgwZmNhNTE2N1VMLCAweDcxZmY5MDRjVUwsIDB4MmQxOTVmZmVVTCwgMHgxYTA1NjQ1ZlVMLCAweDBjMTNmZWZlVUwsIAorMHgwODFiMDhjYVVMLCAweDA1MTcwMTIxVUwsIDB4ODA1MzAxMDBVTCwgMHhlODNlNWVmZVVMLCAweGFjOWFmNGY4VUwsIDB4N2ZlNzI3MDFVTCwgCisweGQyYjhlZTVmVUwsIDB4MDZkZjQyNjFVTCwgMHhiYjllOWI4YVVMLCAweDcyOTNlYTI1VUwsIDB4Y2U4NGZmZGZVTCwgMHhmNTcxODgwMVVMLCAKKzB4M2RkNjRiMDRVTCwgMHhhMjZmMjYzYlVMLCAweDdlZDQ4NDAwVUwsIDB4NTQ3ZWViZTZVTCwgMHg0NDZkNGNhMFVMLCAweDZjZjNkNmY1VUwsIAorMHgyNjQ5YWJkZlVMLCAweGFlYTBjN2Y1VUwsIDB4MzYzMzhjYzFVTCwgMHg1MDNmN2U5M1VMLCAweGQzNzcyMDYxVUwsIDB4MTFiNjM4ZTFVTCwgCisweDcyNTAwZTAzVUwsIDB4ZjgwZWIyYmJVTCwgMHhhYmUwNTAyZVVMLCAweGVjOGQ3N2RlVUwsIDB4NTc5NzFlODFVTCwgMHhlMTRmNjc0NlVMLCAKKzB4YzkzMzU0MDBVTCwgMHg2OTIwMzE4ZlVMLCAweDA4MWRiYjk5VUwsIDB4ZmZjMzA0YTVVTCwgMHg0ZDM1MTgwNVVMLCAweDdmM2Q1Y2UzVUwsIAorMHhhNmM4NjZjNlVMLCAweDVkNWJjY2E5VUwsIDB4ZGFlYzZmZWFVTCwgMHg5ZjkyNmY5MVVMLCAweDlmNDYyMjJmVUwsIDB4Mzk5MTQ2N2RVTCwgCisweGE1YmY2ZDhlVUwsIDB4MTE0M2M0NGZVTCwgMHg0Mzk1ODMwMlVMLCAweGQwMjE0ZWViVUwsIDB4MDIyMDgzYjhVTCwgMHgzZmI2MTgwY1VMLCAKKzB4MThmODkzMWVVTCwgMHgyODE2NThlNlVMLCAweDI2NDg2ZTNlVUwsIDB4OGJkNzhhNzBVTCwgMHg3NDc3ZTRjMVVMLCAweGI1MDZlMDdjVUwsIAorMHhmMzJkMGEyNVVMLCAweDc5MDk4YjAyVUwsIDB4ZTRlYWJiODFVTCwgMHgyODEyM2IyM1VMLCAweDY5ZGVhZDM4VUwsIDB4MTU3NGNhMTZVTCwgCisweGRmODcxYjYyVUwsIDB4MjExYzQwYjdVTCwgMHhhNTFhOWVmOVVMLCAweDAwMTQzNzdiVUwsIDB4MDQxZThhYzhVTCwgMHgwOTExNDAwM1VMLCAKKzB4YmQ1OWU0ZDJVTCwgMHhlM2QxNTZkNVVMLCAweDRmZTg3NmQ1VUwsIDB4MmY5MWEzNDBVTCwgMHg1NTdiZThkZVVMLCAweDAwZWFlNGE3VUwsIAorMHgwY2U1YzJlY1VMLCAweDRkYjRiYmE2VUwsIDB4ZTc1NmJkZmZVTCwgMHhkZDMzNjlhY1VMLCAweGVjMTdiMDM1VUwsIDB4MDY1NzIzMjdVTCwgCisweDk5YWZjOGIwVUwsIDB4NTZjOGMzOTFVTCwgMHg2YjY1ODExY1VMLCAweDVlMTQ2MTE5VUwsIDB4NmU4NWNiNzVVTCwgMHhiZTA3YzAwMlVMLCAKKzB4YzIzMjU1NzdVTCwgMHg4OTNmZjRlY1VMLCAweDViYmZjOTJkVUwsIDB4ZDBlYzNiMjVVTCwgMHhiNzgwMWFiN1VMLCAweDhkNmQzYjI0VUwsIAorMHgyMGM3NjNlZlVMLCAweGMzNjZhNWZjVUwsIDB4OWMzODI4ODBVTCwgMHgwYWNlMzIwNVVMLCAweGFhYzk1NDhhVUwsIDB4ZWNhMWQ3YzdVTCwgCisweDA0MWFmYTMyVUwsIDB4MWQxNjYyNWFVTCwgMHg2NzAxOTAyY1VMLCAweDliNzU3YTU0VUwsIDB4MzFkNDc3ZjdVTCwgMHg5MTI2YjAzMVVMLCAKKzB4MzZjYzZmZGJVTCwgMHhjNzBiOGI0NlVMLCAweGQ5ZTY2YTQ4VUwsIDB4NTZlNTVhNzlVTCwgMHgwMjZhNGNlYlVMLCAweDUyNDM3ZWZmVUwsIAorMHgyZjhmNzZiNFVMLCAweDBkZjk4MGE1VUwsIDB4ODY3NGNkZTNVTCwgMHhlZGRhMDRlYlVMLCAweDE3YTliZTA0VUwsIDB4MmMxOGY0ZGZVTCwgCisweGI3NzQ3ZjlkVUwsIDB4YWIyYWY3YjRVTCwgMHhlZmMzNGQyMFVMLCAweDJlMDk2YjdjVUwsIDB4MTc0MWEyNTRVTCwgMHhlNWI2YTAzNVVMLCAKKzB4MjEzZDQyZjZVTCwgMHgyYzFjN2MyNlVMLCAweDYxYzJmNTBmVUwsIDB4NjU1MmRhZjlVTCwgMHhkMmMyMzFmOFVMLCAweDI1MTMwZjY5VUwsIAorMHhkODE2N2ZhMlVMLCAweDA0MThmMmM4VUwsIDB4MDAxYTk2YTZVTCwgMHgwZDE1MjZhYlVMLCAweDYzMzE1YzIxVUwsIDB4NWUwYTcyZWNVTCwgCisweDQ5YmFmZWZkVUwsIDB4MTg3OTA4ZDlVTCwgMHg4ZDBkYmQ4NlVMLCAweDMxMTE3MGE3VUwsIDB4M2U5YjY0MGNVTCwgMHhjYzNlMTBkN1VMLCAKKzB4ZDVjYWQzYjZVTCwgMHgwY2FlYzM4OFVMLCAweGY3MzAwMWUxVUwsIDB4NmM3MjhhZmZVTCwgMHg3MWVhZTJhMVVMLCAweDFmOWFmMzZlVUwsIAorMHhjZmNiZDEyZlVMLCAweGMxZGU4NDE3VUwsIDB4YWMwN2JlNmJVTCwgMHhjYjQ0YTFkOFVMLCAweDhiOWIwZjU2VUwsIDB4MDEzOTg4YzNVTCwgCisweGIxYzUyZmNhVUwsIDB4YjRiZTMxY2RVTCwgMHhkODc4MjgwNlVMLCAweDEyYTNhNGUyVUwsIDB4NmY3ZGU1MzJVTCwgMHg1OGZkN2ViNlVMLCAKKzB4ZDAxZWU5MDBVTCwgMHgyNGFkZmZjMlVMLCAweGY0OTkwZmM1VUwsIDB4OTcxMWFhYzVVTCwgMHgwMDFkN2I5NVVMLCAweDgyZTVlN2QyVUwsIAorMHgxMDk4NzNmNlVMLCAweDAwNjEzMDk2VUwsIDB4YzMyZDk1MjFVTCwgMHhhZGExMjFmZlVMLCAweDI5OTA4NDE1VUwsIDB4N2ZiYjk3N2ZVTCwgCisweGFmOWViM2RiVUwsIDB4MjljOWVkMmFVTCwgMHg1Y2UyYTQ2NVVMLCAweGE3MzBmMzJjVUwsIDB4ZDBhYTNmZThVTCwgMHg4YTVjYzA5MVVMLCAKKzB4ZDQ5ZTJjZTdVTCwgMHgwY2U0NTRhOVVMLCAweGQ2MGFjZDg2VUwsIDB4MDE1ZjE5MTlVTCwgMHg3NzA3OTEwM1VMLCAweGRlYTAzYWY2VUwsIAorMHg3OGE4NTY1ZVVMLCAweGRlZTM1NmRmVUwsIDB4MjFmMDVjYmVVTCwgMHg4Yjc1ZTM4N1VMLCAweGIzYzUwNjUxVUwsIDB4YjhhNWMzZWZVTCwgCisweGQ4ZWViNmQyVUwsIDB4ZTUyM2JlNzdVTCwgMHhjMjE1NDUyOVVMLCAweDJmNjllZmRmVUwsIDB4YWZlNjdhZmJVTCwgMHhmNDcwYzRiMlVMLCAKKzB4ZjNlMGViNWJVTCwgMHhkNmNjOTg3NlVMLCAweDM5ZTQ0NjBjVUwsIDB4MWZkYTg1MzhVTCwgMHgxOTg3ODMyZlVMLCAweGNhMDA3MzY3VUwsIAorMHhhOTkxNDRmOFVMLCAweDI5NmIyOTllVUwsIDB4NDkyZmMyOTVVTCwgMHg5MjY2YmVhYlVMLCAweGI1Njc2ZTY5VUwsIDB4OWJkM2RkZGFVTCwgCisweGRmN2UwNTJmVUwsIDB4ZGIyNTcwMWNVTCwgMHgxYjVlNTFlZVVMLCAweGY2NTMyNGU2VUwsIDB4NmFmY2UzNmNVTCwgMHgwMzE2Y2MwNFVMLCAKKzB4ODY0NDIxM2VVTCwgMHhiN2RjNTlkMFVMLCAweDc5NjUyOTFmVUwsIDB4Y2NkNmZkNDNVTCwgMHg0MTgyMzk3OVVMLCAweDkzMmJjZGY2VUwsIAorMHhiNjU3YzM0ZFVMLCAweDRlZGZkMjgyVUwsIDB4N2FlNTI5MGNVTCwgMHgzY2I5NTM2YlVMLCAweDg1MWUyMGZlVUwsIDB4OTgzMzU1N2VVTCwgCisweDEzZWNmMGIwVUwsIDB4ZDNmZmIzNzJVTCwgMHgzZjg1YzVjMVVMLCAweDBhZWY3ZWQyVUx9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTNVsyNTZdID0geworMHg3ZWM5MGMwNFVMLCAweDJjNmU3NGI5VUwsIDB4OWIwZTY2ZGZVTCwgMHhhNjMzNzkxMVVMLCAweGI4NmE3ZmZmVUwsIDB4MWRkMzU4ZjVVTCwgCisweDQ0ZGQ5ZDQ0VUwsIDB4MTczMTE2N2ZVTCwgMHgwOGZiZjFmYVVMLCAweGU3ZjUxMWNjVUwsIDB4ZDIwNTFiMDBVTCwgMHg3MzVhYmEwMFVMLCAKKzB4MmFiNzIyZDhVTCwgMHgzODYzODFjYlVMLCAweGFjZjYyNDNhVUwsIDB4NjliZWZkN2FVTCwgMHhlNmEyZTc3ZlVMLCAweGYwYzcyMGNkVUwsIAorMHhjNDQ5NDgxNlVMLCAweGNjZjVjMTgwVUwsIDB4Mzg4NTE2NDBVTCwgMHgxNWIwYTg0OFVMLCAweGU2OGIxOGNiVUwsIDB4NGNhYWRlZmZVTCwgCisweDVmNDgwYTAxVUwsIDB4MDQxMmIyYWFVTCwgMHgyNTk4MTRmY1VMLCAweDQxZDBlZmUyVUwsIDB4NGU0MGI0OGRVTCwgMHgyNDhlYjZmYlVMLCAKKzB4OGRiYTFjZmVVTCwgMHg0MWE5OWIwMlVMLCAweDFhNTUwYTA0VUwsIDB4YmE4ZjY1Y2JVTCwgMHg3MjUxZjRlN1VMLCAweDk1YTUxNzI1VUwsIAorMHhjMTA2ZWNkN1VMLCAweDk3YTU5ODBhVUwsIDB4YzUzOWI5YWFVTCwgMHg0ZDc5ZmU2YVVMLCAweGYyZjNmNzYzVUwsIDB4NjhhZjgwNDBVTCwgCisweGVkMGM5ZTU2VUwsIDB4MTFiNDk1OGJVTCwgMHhlMWViNWE4OFVMLCAweDg3MDllNmIwVUwsIDB4ZDdlMDcxNTZVTCwgMHg0ZTI5ZmVhN1VMLCAKKzB4NjM2NmU1MmRVTCwgMHgwMmQxYzAwMFVMLCAweGM0YWM4ZTA1VUwsIDB4OTM3N2Y1NzFVTCwgMHgwYzA1MzcyYVVMLCAweDU3ODUzNWYyVUwsIAorMHgyMjYxYmUwMlVMLCAweGQ2NDJhMGM5VUwsIDB4ZGYxM2EyODBVTCwgMHg3NGI1NWJkMlVMLCAweDY4MjE5OWMwVUwsIDB4ZDQyMWU1ZWNVTCwgCisweDUzZmIzY2U4VUwsIDB4YzhhZGVkYjNVTCwgMHgyOGE4N2ZjOVVMLCAweDNkOTU5OTgxVUwsIDB4NWMxZmY5MDBVTCwgMHhmZTM4ZDM5OVVMLCAKKzB4MGM0ZWZmMGJVTCwgMHgwNjI0MDdlYVVMLCAweGFhMmY0ZmIxVUwsIDB4NGZiOTY5NzZVTCwgMHg5MGM3OTUwNVVMLCAweGIwYThhNzc0VUwsIAorMHhlZjU1YTFmZlVMLCAweGU1OWNhMmMyVUwsIDB4YTZiNjJkMjdVTCwgMHhlNjZhNDI2M1VMLCAweGRmNjUwMDFmVUwsIDB4MGVjNTA5NjZVTCwgCisweGRmZGQ1NWJjVUwsIDB4MjlkZTA2NTVVTCwgMHg5MTFlNzM5YVVMLCAweDE3YWY4OTc1VUwsIDB4MzJjNzkxMWNVTCwgMHg4OWY4OTQ2OFVMLCAKKzB4MGQwMWU5ODBVTCwgMHg1MjQ3NTVmNFVMLCAweDAzYjYzY2M5VUwsIDB4MGNjODQ0YjJVTCwgMHhiY2YzZjBhYVVMLCAweDg3YWMzNmU5VUwsIAorMHhlNTNhNzQyNlVMLCAweDAxYjNkODJiVUwsIDB4MWE5ZTc0NDlVTCwgMHg2NGVlMmQ3ZVVMLCAweGNkZGJiMWRhVUwsIDB4MDFjOTQ5MTBVTCwgCisweGI4NjhiZjgwVUwsIDB4MGQyNmYzZmRVTCwgMHg5MzQyZWRlN1VMLCAweDA0YTVjMjg0VUwsIDB4NjM2NzM3YjZVTCwgMHg1MGY1YjYxNlVMLCAKKzB4ZjI0NzY2ZTNVTCwgMHg4ZWNhMzZjMVVMLCAweDEzNmUwNWRiVUwsIDB4ZmVmMTgzOTFVTCwgMHhmYjg4N2EzN1VMLCAweGQ2ZTdmN2Q0VUwsIAorMHhjN2ZiN2RjOVVMLCAweDMwNjNmY2RmVUwsIDB4YjZmNTg5ZGVVTCwgMHhlYzI5NDFkYVVMLCAweDI2ZTQ2Njk1VUwsIDB4Yjc1NjY0MTlVTCwgCisweGY2NTRlZmM1VUwsIDB4ZDA4ZDU4YjdVTCwgMHg0ODkyNTQwMVVMLCAweGMxYmFjYjdmVUwsIDB4ZTVmZjU1MGZVTCwgMHhiNjA4MzA0OVVMLCAKKzB4NWJiNWQwZThVTCwgMHg4N2Q3MmU1YVVMLCAweGFiNmE2ZWUxVUwsIDB4MjIzYTY2Y2VVTCwgMHhjNjJiZjNjZFVMLCAweDllMDg4NWY5VUwsIAorMHg2OGNiM2U0N1VMLCAweDA4NmMwMTBmVUwsIDB4YTIxZGU4MjBVTCwgMHhkMThiNjlkZVVMLCAweGYzZjY1Nzc3VUwsIDB4ZmEwMmMzZjZVTCwgCisweDQwN2VkYWMzVUwsIDB4Y2JiM2Q1NTBVTCwgMHgxNzkzMDg0ZFVMLCAweGIwZDcwZWJhVUwsIDB4MGFiMzc4ZDVVTCwgMHhkOTUxZmIwY1VMLCAKKzB4ZGVkN2RhNTZVTCwgMHg0MTI0YmJlNFVMLCAweDk0Y2EwYjU2VUwsIDB4MGY1NzU1ZDFVTCwgMHhlMGUxZTU2ZVVMLCAweDYxODRiNWJlVUwsIAorMHg1ODBhMjQ5ZlVMLCAweDk0Zjc0YmMwVUwsIDB4ZTMyNzg4OGVVTCwgMHg5ZjdiNTU2MVVMLCAweGMzZGMwMjgwVUwsIDB4MDU2ODc3MTVVTCwgCisweDY0NmM2YmQ3VUwsIDB4NDQ5MDRkYjNVTCwgMHg2NmI0ZjBhM1VMLCAweGMwZjE2NDhhVUwsIDB4Njk3ZWQ1YWZVTCwgMHg0OWU5MmZmNlVMLCAKKzB4MzA5ZTM3NGZVTCwgMHgyY2I2MzU2YVVMLCAweDg1ODA4NTczVUwsIDB4NDk5MWY4NDBVTCwgMHg3NmYwYWUwMlVMLCAweDA4M2JlODRkVUwsIAorMHgyODQyMWM5YVVMLCAweDQ0NDg5NDA2VUwsIDB4NzM2ZTRjYjhVTCwgMHhjMTA5MjkxMFVMLCAweDhiYzk1ZmM2VUwsIDB4N2Q4NjljZjRVTCwgCisweDEzNGY2MTZmVUwsIDB4MmU3NzExOGRVTCwgMHhiMzFiMmJlMVVMLCAweGFhOTBiNDcyVUwsIDB4M2NhNWQ3MTdVTCwgMHg3ZDE2MWJiYVVMLCAKKzB4OWNhZDkwMTBVTCwgMHhhZjQ2MmJhMlVMLCAweDlmZTQ1OWQyVUwsIDB4NDVkMzQ1NTlVTCwgMHhkOWYyZGExM1VMLCAweGRiYzY1NDg3VUwsIAorMHhmM2U0Zjk0ZVVMLCAweDE3NmQ0ODZmVUwsIDB4MDk3YzEzZWFVTCwgMHg2MzFkYTVjN1VMLCAweDQ0NWY3MzgyVUwsIDB4MTc1NjgzZjRVTCwgCisweGNkYzY2YTk3VUwsIDB4NzBiZTAyODhVTCwgMHhiM2NkY2Y3MlVMLCAweDZlNWRkMmYzVUwsIDB4MjA5MzYwNzlVTCwgMHg0NTliODBhNVVMLCAKKzB4YmU2MGUyZGJVTCwgMHhhOWMyMzEwMVVMLCAweGViYTUzMTVjVUwsIDB4MjI0ZTQyZjJVTCwgMHgxYzVjMTU3MlVMLCAweGY2NzIxYjJjVUwsIAorMHgxYWQyZmZmM1VMLCAweDhjMjU0MDRlVUwsIDB4MzI0ZWQ3MmZVTCwgMHg0MDY3YjdmZFVMLCAweDA1MjMxMzhlVUwsIDB4NWNhM2JjNzhVTCwgCisweGRjMGZkNjZlVUwsIDB4NzU5MjIyODNVTCwgMHg3ODRkNmIxN1VMLCAweDU4ZWJiMTZlVUwsIDB4NDQwOTRmODVVTCwgMHgzZjQ4MWQ4N1VMLCAKKzB4ZmNmZWFlN2JVTCwgMHg3N2I1ZmY3NlVMLCAweDhjMjMwMmJmVUwsIDB4YWFmNDc1NTZVTCwgMHg1ZjQ2YjAyYVVMLCAweDJiMDkyODAxVUwsIAorMHgzZDM4ZjVmN1VMLCAweDBjYTgxZjM2VUwsIDB4NTJhZjRhOGFVTCwgMHg2NmQ1ZTdjMFVMLCAweGRmM2IwODc0VUwsIDB4OTUwNTUxMTBVTCwgCisweDFiNWFkN2E4VUwsIDB4ZjYxZWQ1YWRVTCwgMHg2Y2Y2ZTQ3OVVMLCAweDIwNzU4MTg0VUwsIDB4ZDBjZWZhNjVVTCwgMHg4OGY3YmU1OFVMLCAKKzB4NGEwNDY4MjZVTCwgMHgwZmY2ZjhmM1VMLCAweGEwOWM3ZjcwVUwsIDB4NTM0NmFiYTBVTCwgMHg1Y2U5NmMyOFVMLCAweGUxNzZlZGEzVUwsIAorMHg2YmFjMzA3ZlVMLCAweDM3NjgyOWQyVUwsIDB4ODUzNjBmYTlVTCwgMHgxN2UzZmUyYVVMLCAweDI0Yjc5NzY3VUwsIDB4ZjVhOTZiMjBVTCwgCisweGQ2Y2QyNTk1VUwsIDB4NjhmZjFlYmZVTCwgMHg3NTU1NDQyY1VMLCAweGYxOWYwNmJlVUwsIDB4ZjllMDY1OWFVTCwgMHhlZWI5NDkxZFVMLCAKKzB4MzQwMTA3MThVTCwgMHhiYjMwY2FiOFVMLCAweGU4MjJmZTE1VUwsIDB4ODg1NzA5ODNVTCwgMHg3NTBlNjI0OVVMLCAweGRhNjI3ZTU1VUwsIAorMHg1ZTc2ZmZhOFVMLCAweGIxNTM0NTQ2VUwsIDB4NmQ0N2RlMDhVTCwgMHhlZmU5ZTdkNFVMfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgUzZbMjU2XSA9IHsKKzB4ZjZmYThmOWRVTCwgMHgyY2FjNmNlMVVMLCAweDRjYTM0ODY3VUwsIDB4ZTIzMzdmN2NVTCwgMHg5NWRiMDhlN1VMLCAweDAxNjg0M2I0VUwsIAorMHhlY2VkNWNiY1VMLCAweDMyNTU1M2FjVUwsIDB4YmY5ZjA5NjBVTCwgMHhkZmExZTJlZFVMLCAweDgzZjA1NzlkVUwsIDB4NjNlZDg2YjlVTCwgCisweDFhYjZhNmI4VUwsIDB4ZGU1ZWJlMzlVTCwgMHhmMzhmZjczMlVMLCAweDg5ODliMTM4VUwsIDB4MzNmMTQ5NjFVTCwgMHhjMDE5MzdiZFVMLCAKKzB4ZjUwNmM2ZGFVTCwgMHhlNDYyNWU3ZVVMLCAweGEzMDhlYTk5VUwsIDB4NGUyM2UzM2NVTCwgMHg3OWNiZDdjY1VMLCAweDQ4YTE0MzY3VUwsIAorMHhhMzE0OTYxOVVMLCAweGZlYzk0YmQ1VUwsIDB4YTExNDE3NGFVTCwgMHhlYWEwMTg2NlVMLCAweGEwODRkYjJkVUwsIDB4MDlhODQ4NmZVTCwgCisweGE4ODg2MTRhVUwsIDB4MjkwMGFmOThVTCwgMHgwMTY2NTk5MVVMLCAweGUxOTkyODYzVUwsIDB4YzhmMzBjNjBVTCwgMHgyZTc4ZWYzY1VMLCAKKzB4ZDBkNTE5MzJVTCwgMHhjZjBmZWMxNFVMLCAweGY3Y2EwN2QyVUwsIDB4ZDBhODIwNzJVTCwgMHhmZDQxMTk3ZVVMLCAweDkzMDVhNmIwVUwsIAorMHhlODZiZTNkYVVMLCAweDc0YmVkM2NkVUwsIDB4MzcyZGE1M2NVTCwgMHg0YzdmNDQ0OFVMLCAweGRhYjVkNDQwVUwsIDB4NmRiYTBlYzNVTCwgCisweDA4MzkxOWE3VUwsIDB4OWZiYWVlZDlVTCwgMHg0OWRiY2ZiMFVMLCAweDRlNjcwYzUzVUwsIDB4NWMzZDljMDFVTCwgMHg2NGJkYjk0MVVMLCAKKzB4MmMwZTYzNmFVTCwgMHhiYTdkZDljZFVMLCAweGVhNmY3Mzg4VUwsIDB4ZTcwYmM3NjJVTCwgMHgzNWYyOWFkYlVMLCAweDVjNGNkZDhkVUwsIAorMHhmMGQ0OGQ4Y1VMLCAweGI4ODE1M2UyVUwsIDB4MDhhMTk4NjZVTCwgMHgxYWUyZWFjOFVMLCAweDI4NGNhZjg5VUwsIDB4YWE5MjgyMjNVTCwgCisweDkzMzRiZTUzVUwsIDB4M2IzYTIxYmZVTCwgMHgxNjQzNGJlM1VMLCAweDlhZWEzOTA2VUwsIDB4ZWZlOGMzNmVVTCwgMHhmODkwY2RkOVVMLCAKKzB4ODAyMjZkYWVVTCwgMHhjMzQwYTRhM1VMLCAweGRmN2U5YzA5VUwsIDB4YTY5NGE4MDdVTCwgMHg1YjdjNWVjY1VMLCAweDIyMWRiM2E2VUwsIAorMHg5YTY5YTAyZlVMLCAweDY4ODE4YTU0VUwsIDB4Y2ViMjI5NmZVTCwgMHg1M2MwODQzYVVMLCAweGZlODkzNjU1VUwsIDB4MjViZmU2OGFVTCwgCisweGI0NjI4YWJjVUwsIDB4Y2YyMjJlYmZVTCwgMHgyNWFjNmY0OFVMLCAweGE5YTk5Mzg3VUwsIDB4NTNiZGRiNjVVTCwgMHhlNzZmZmJlN1VMLCAKKzB4ZTk2N2ZkNzhVTCwgMHgwYmE5MzU2M1VMLCAweDhlMzQyYmMxVUwsIDB4ZThhMTFiZTlVTCwgMHg0OTgwNzQwZFVMLCAweGM4MDg3ZGZjVUwsIAorMHg4ZGU0YmY5OVVMLCAweGExMTEwMWEwVUwsIDB4N2ZkMzc5NzVVTCwgMHhkYTVhMjZjMFVMLCAweGU4MWY5OTRmVUwsIDB4OTUyOGNkODlVTCwgCisweGZkMzM5ZmVkVUwsIDB4Yjg3ODM0YmZVTCwgMHg1ZjA0NDU2ZFVMLCAweDIyMjU4Njk4VUwsIDB4YzljNGM4M2JVTCwgMHgyZGMxNTZiZVVMLCAKKzB4NGY2MjhkYWFVTCwgMHg1N2Y1NWVjNVVMLCAweGUyMjIwYWJlVUwsIDB4ZDI5MTZlYmZVTCwgMHg0ZWM3NWI5NVVMLCAweDI0ZjJjM2MwVUwsIAorMHg0MmQxNWQ5OVVMLCAweGNkMGQ3ZmEwVUwsIDB4N2I2ZTI3ZmZVTCwgMHhhOGRjOGFmMFVMLCAweDczNDVjMTA2VUwsIDB4ZjQxZTIzMmZVTCwgCisweDM1MTYyMzg2VUwsIDB4ZTZlYTg5MjZVTCwgMHgzMzMzYjA5NFVMLCAweDE1N2VjNmYyVUwsIDB4MzcyYjc0YWZVTCwgMHg2OTI1NzNlNFVMLCAKKzB4ZTlhOWQ4NDhVTCwgMHhmMzE2MDI4OVVMLCAweDNhNjJlZjFkVUwsIDB4YTc4N2UyMzhVTCwgMHhmM2E1ZjY3NlVMLCAweDc0MzY0ODUzVUwsIAorMHgyMDk1MTA2M1VMLCAweDQ1NzY2OThkVUwsIDB4YjZmYWQ0MDdVTCwgMHg1OTJhZjk1MFVMLCAweDM2ZjczNTIzVUwsIDB4NGNmYjZlODdVTCwgCisweDdkYTRjZWMwVUwsIDB4NmMxNTJkYWFVTCwgMHhjYjAzOTZhOFVMLCAweGM1MGRmZTVkVUwsIDB4ZmNkNzA3YWJVTCwgMHgwOTIxYzQyZlVMLCAKKzB4ODlkZmYwYmJVTCwgMHg1ZmUyYmU3OFVMLCAweDQ0OGY0ZjMzVUwsIDB4NzU0NjEzYzlVTCwgMHgyYjA1ZDA4ZFVMLCAweDQ4YjlkNTg1VUwsIAorMHhkYzA0OTQ0MVVMLCAweGM4MDk4ZjliVUwsIDB4N2RlZGU3ODZVTCwgMHhjMzlhMzM3M1VMLCAweDQyNDEwMDA1VUwsIDB4NmEwOTE3NTFVTCwgCisweDBlZjNjOGE2VUwsIDB4ODkwMDcyZDZVTCwgMHgyODIwNzY4MlVMLCAweGE5YTlmN2JlVUwsIDB4YmYzMjY3OWRVTCwgMHhkNDViNWI3NVVMLCAKKzB4YjM1M2ZkMDBVTCwgMHhjYmIwZTM1OFVMLCAweDgzMGYyMjBhVUwsIDB4MWY4ZmIyMTRVTCwgMHhkMzcyY2YwOFVMLCAweGNjM2M0YTEzVUwsIAorMHg4Y2Y2MzE2NlVMLCAweDA2MWM4N2JlVUwsIDB4ODhjOThmODhVTCwgMHg2MDYyZTM5N1VMLCAweDQ3Y2Y4ZTdhVUwsIDB4YjZjODUyODNVTCwgCisweDNjYzJhY2ZiVUwsIDB4M2ZjMDY5NzZVTCwgMHg0ZThmMDI1MlVMLCAweDY0ZDgzMTRkVUwsIDB4ZGEzODcwZTNVTCwgMHgxZTY2NTQ1OVVMLCAKKzB4YzEwOTA4ZjBVTCwgMHg1MTMwMjFhNVVMLCAweDZjNWI2OGI3VUwsIDB4ODIyZjhhYTBVTCwgMHgzMDA3Y2QzZVVMLCAweDc0NzE5ZWVmVUwsIAorMHhkYzg3MjY4MVVMLCAweDA3MzM0MGQ0VUwsIDB4N2U0MzJmZDlVTCwgMHgwYzVlYzI0MVVMLCAweDg4MDkyODZjVUwsIDB4ZjU5MmQ4OTFVTCwgCisweDA4YTkzMGY2VUwsIDB4OTU3ZWYzMDVVTCwgMHhiN2ZiZmZiZFVMLCAweGMyNjZlOTZmVUwsIDB4NmZlNGFjOThVTCwgMHhiMTczZWNjMFVMLCAKKzB4YmM2MGI0MmFVTCwgMHg5NTM0OThkYVVMLCAweGZiYTFhZTEyVUwsIDB4MmQ0YmQ3MzZVTCwgMHgwZjI1ZmFhYlVMLCAweGE0ZjNmY2ViVUwsIAorMHhlMjk2OTEyM1VMLCAweDI1N2YwYzNkVUwsIDB4OTM0OGFmNDlVTCwgMHgzNjE0MDBiY1VMLCAweGU4ODE2ZjRhVUwsIDB4MzgxNGYyMDBVTCwgCisweGEzZjk0MDQzVUwsIDB4OWM3YTU0YzJVTCwgMHhiYzcwNGY1N1VMLCAweGRhNDFlN2Y5VUwsIDB4YzI1YWQzM2FVTCwgMHg1NGY0YTA4NFVMLCAKKzB4YjE3ZjU1MDVVTCwgMHg1OTM1N2NiZVVMLCAweGVkYmQxNWM4VUwsIDB4N2Y5N2M1YWJVTCwgMHhiYTVhYzdiNVVMLCAweGI2ZjZkZWFmVUwsIAorMHgzYTQ3OWMzYVVMLCAweDUzMDJkYTI1VUwsIDB4NjUzZDdlNmFVTCwgMHg1NDI2OGQ0OVVMLCAweDUxYTQ3N2VhVUwsIDB4NTAxN2Q1NWJVTCwgCisweGQ3ZDI1ZDg4VUwsIDB4NDQxMzZjNzZVTCwgMHgwNDA0YThjOFVMLCAweGI4ZTVhMTIxVUwsIDB4YjgxYTkyOGFVTCwgMHg2MGVkNTg2OVVMLCAKKzB4OTdjNTViOTZVTCwgMHhlYWVjOTkxYlVMLCAweDI5OTM1OTEzVUwsIDB4MDFmZGI3ZjFVTCwgMHgwODhlOGRmYVVMLCAweDlhYjZmNmY1VUwsIAorMHgzYjRjYmY5ZlVMLCAweDRhNWRlM2FiVUwsIDB4ZTYwNTFkMzVVTCwgMHhhMGUxZDg1NVVMLCAweGQzNmI0Y2YxVUwsIDB4ZjU0NGVkZWJVTCwgCisweGIwZTkzNTI0VUwsIDB4YmViYjhmYmRVTCwgMHhhMmQ3NjJjZlVMLCAweDQ5YzkyZjU0VUwsIDB4MzhiNWYzMzFVTCwgMHg3MTI4YTQ1NFVMLCAKKzB4NDgzOTI5MDVVTCwgMHhhNjViMWRiOFVMLCAweDg1MWM5N2JkVUwsIDB4ZDY3NWNmMmZVTH07CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFM3WzI1Nl0gPSB7CisweDg1ZTA0MDE5VUwsIDB4MzMyYmY1NjdVTCwgMHg2NjJkYmZmZlVMLCAweGNmYzY1NjkzVUwsIDB4MmE4ZDdmNmZVTCwgMHhhYjliYzkxMlVMLCAKKzB4ZGU2MDA4YTFVTCwgMHgyMDI4ZGExZlVMLCAweDAyMjdiY2U3VUwsIDB4NGQ2NDI5MTZVTCwgMHgxOGZhYzMwMFVMLCAweDUwZjE4YjgyVUwsIAorMHgyY2IyY2IxMVVMLCAweGIyMzJlNzVjVUwsIDB4NGIzNjk1ZjJVTCwgMHhiMjg3MDdkZVVMLCAweGEwNWZiY2Y2VUwsIDB4Y2Q0MTgxZTlVTCwgCisweGUxNTAyMTBjVUwsIDB4ZTI0ZWYxYmRVTCwgMHhiMTY4YzM4MVVMLCAweGZkZTRlNzg5VUwsIDB4NWM3OWIwZDhVTCwgMHgxZThiZmQ0M1VMLCAKKzB4NGQ0OTUwMDFVTCwgMHgzOGJlNDM0MVVMLCAweDkxM2NlZTFkVUwsIDB4OTJhNzljM2ZVTCwgMHgwODk3NjZiZVVMLCAweGJhZWVhZGY0VUwsIAorMHgxMjg2YmVjZlVMLCAweGI2ZWFjYjE5VUwsIDB4MjY2MGMyMDBVTCwgMHg3NTY1YmRlNFVMLCAweDY0MjQxZjdhVUwsIDB4ODI0OGRjYTlVTCwgCisweGMzYjNhZDY2VUwsIDB4MjgxMzYwODZVTCwgMHgwYmQ4ZGZhOFVMLCAweDM1NmQxY2YyVUwsIDB4MTA3Nzg5YmVVTCwgMHhiM2IyZTljZVVMLCAKKzB4MDUwMmFhOGZVTCwgMHgwYmMwMzUxZVVMLCAweDE2NmJmNTJhVUwsIDB4ZWIxMmZmODJVTCwgMHhlMzQ4NjkxMVVMLCAweGQzNGQ3NTE2VUwsIAorMHg0ZTdiM2FmZlVMLCAweDVmNDM2NzFiVUwsIDB4OWNmNmUwMzdVTCwgMHg0OTgxYWM4M1VMLCAweDMzNDI2NmNlVUwsIDB4OGM5MzQxYjdVTCwgCisweGQwZDg1NGMwVUwsIDB4Y2IzYTZjODhVTCwgMHg0N2JjMjgyOVVMLCAweDQ3MjViYTM3VUwsIDB4YTY2YWQyMmJVTCwgMHg3YWQ2MWYxZVVMLCAKKzB4MGM1Y2JhZmFVTCwgMHg0NDM3ZjEwN1VMLCAweGI2ZTc5OTYyVUwsIDB4NDJkMmQ4MTZVTCwgMHgwYTk2MTI4OFVMLCAweGUxYTVjMDZlVUwsIAorMHgxMzc0OWU2N1VMLCAweDcyZmMwODFhVUwsIDB4YjFkMTM5ZjdVTCwgMHhmOTU4Mzc0NVVMLCAweGNmMTlkZjU4VUwsIDB4YmVjM2Y3NTZVTCwgCisweGMwNmViYTMwVUwsIDB4MDcyMTFiMjRVTCwgMHg0NWMyODgyOVVMLCAweGM5NWUzMTdmVUwsIDB4YmM4ZWM1MTFVTCwgMHgzOGJjNDZlOVVMLCAKKzB4YzZlNmZhMTRVTCwgMHhiYWU4NTg0YVVMLCAweGFkNGViYzQ2VUwsIDB4NDY4ZjUwOGJVTCwgMHg3ODI5NDM1ZlVMLCAweGYxMjQxODNiVUwsIAorMHg4MjFkYmE5ZlVMLCAweGFmZjYwZmY0VUwsIDB4ZWEyYzRlNmRVTCwgMHgxNmUzOTI2NFVMLCAweDkyNTQ0YThiVUwsIDB4MDA5YjRmYzNVTCwgCisweGFiYTY4Y2VkVUwsIDB4OWFjOTZmNzhVTCwgMHgwNmE1Yjc5YVVMLCAweGIyODU2ZTZlVUwsIDB4MWFlYzNjYTlVTCwgMHhiZTgzODY4OFVMLCAKKzB4MGUwODA0ZTlVTCwgMHg1NWYxYmU1NlVMLCAweGU3ZTUzNjNiVUwsIDB4YjNhMWYyNWRVTCwgMHhmN2RlYmI4NVVMLCAweDYxZmUwMzNjVUwsIAorMHgxNjc0NjIzM1VMLCAweDNjMDM0YzI4VUwsIDB4ZGE2ZDBjNzRVTCwgMHg3OWFhYzU2Y1VMLCAweDNjZTRlMWFkVUwsIDB4NTFmMGM4MDJVTCwgCisweDk4ZjhmMzVhVUwsIDB4MTYyNmE0OWZVTCwgMHhlZWQ4MmIyOVVMLCAweDFkMzgyZmUzVUwsIDB4MGM0ZmI5OWFVTCwgMHhiYjMyNTc3OFVMLCAKKzB4M2VjNmQ5N2JVTCwgMHg2ZTc3YTZhOVVMLCAweGNiNjU4YjVjVUwsIDB4ZDQ1MjMwYzdVTCwgMHgyYmQxNDA4YlVMLCAweDYwYzAzZWI3VUwsIAorMHhiOTA2OGQ3OFVMLCAweGEzMzc1NGY0VUwsIDB4ZjQzMGM4N2RVTCwgMHhjOGE3MTMwMlVMLCAweGI5NmQ4YzMyVUwsIDB4ZWJkNGU3YmVVTCwgCisweGJlOGI5ZDJkVUwsIDB4Nzk3OWZiMDZVTCwgMHhlNzIyNTMwOFVMLCAweDhiNzVjZjc3VUwsIDB4MTFlZjhkYTRVTCwgMHhlMDgzYzg1OFVMLCAKKzB4OGQ2Yjc4NmZVTCwgMHg1YTYzMTdhNlVMLCAweGZhNWNmN2EwVUwsIDB4NWRkYTAwMzNVTCwgMHhmMjhlYmZiMFVMLCAweGY1YjljMzEwVUwsIAorMHhhMGVhYzI4MFVMLCAweDA4Yjk3NjdhVUwsIDB4YTNkOWQyYjBVTCwgMHg3OWQzNDIxN1VMLCAweDAyMWE3MThkVUwsIDB4OWFjNjMzNmFVTCwgCisweDI3MTFmZDYwVUwsIDB4NDM4MDUwZTNVTCwgMHgwNjk5MDhhOFVMLCAweDNkN2ZlZGM0VUwsIDB4ODI2ZDJiZWZVTCwgMHg0ZWViODQ3NlVMLCAKKzB4NDg4ZGNmMjVVTCwgMHgzNmM5ZDU2NlVMLCAweDI4ZTc0ZTQxVUwsIDB4YzI2MTBhY2FVTCwgMHgzZDQ5YTljZlVMLCAweGJhZTNiOWRmVUwsIAorMHhiNjVmOGRlNlVMLCAweDkyYWVhZjY0VUwsIDB4M2FjN2Q1ZTZVTCwgMHg5ZWE4MDUwOVVMLCAweGYyMmIwMTdkVUwsIDB4YTQxNzNmNzBVTCwgCisweGRkMWUxNmMzVUwsIDB4MTVlMGQ3ZjlVTCwgMHg1MGIxYjg4N1VMLCAweDJiOWY0ZmQ1VUwsIDB4NjI1YWJhODJVTCwgMHg2YTAxNzk2MlVMLCAKKzB4MmVjMDFiOWNVTCwgMHgxNTQ4OGFhOVVMLCAweGQ3MTZlNzQwVUwsIDB4NDAwNTVhMmNVTCwgMHg5M2QyOWEyMlVMLCAweGUzMmRiZjlhVUwsIAorMHgwNTg3NDViOVVMLCAweDM0NTNkYzFlVUwsIDB4ZDY5OTI5NmVVTCwgMHg0OTZjZmY2ZlVMLCAweDFjOWY0OTg2VUwsIDB4ZGZlMmVkMDdVTCwgCisweGI4NzI0MmQxVUwsIDB4MTlkZTdlYWVVTCwgMHgwNTNlNTYxYVVMLCAweDE1YWQ2ZjhjVUwsIDB4NjY2MjZjMWNVTCwgMHg3MTU0YzI0Y1VMLCAKKzB4ZWEwODJiMmFVTCwgMHg5M2ViMjkzOVVMLCAweDE3ZGNiMGYwVUwsIDB4NThkNGYyYWVVTCwgMHg5ZWEyOTRmYlVMLCAweDUyY2Y1NjRjVUwsIAorMHg5ODgzZmU2NlVMLCAweDJlYzQwNTgxVUwsIDB4NzYzOTUzYzNVTCwgMHgwMWQ2NjkyZVVMLCAweGQzYTBjMTA4VUwsIDB4YTFlNzE2MGVVTCwgCisweGU0ZjJkZmE2VUwsIDB4NjkzZWQyODVVTCwgMHg3NDkwNDY5OFVMLCAweDRjMmIwZWRkVUwsIDB4NGY3NTc2NTZVTCwgMHg1ZDM5MzM3OFVMLCAKKzB4YTEzMjIzNGZVTCwgMHgzZDMyMWM1ZFVMLCAweGMzZjVlMTk0VUwsIDB4NGIyNjkzMDFVTCwgMHhjNzlmMDIyZlVMLCAweDNjOTk3ZTdlVUwsIAorMHg1ZTRmOTUwNFVMLCAweDNmZmFmYmJkVUwsIDB4NzZmN2FkMGVVTCwgMHgyOTY2OTNmNFVMLCAweDNkMWZjZTZmVUwsIDB4YzYxZTQ1YmVVTCwgCisweGQzYjVhYjM0VUwsIDB4ZjcyYmY5YjdVTCwgMHgxYjA0MzRjMFVMLCAweDRlNzJiNTY3VUwsIDB4NTU5MmEzM2RVTCwgMHhiNTIyOTMwMVVMLCAKKzB4Y2ZkMmE4N2ZVTCwgMHg2MGFlYjc2N1VMLCAweDE4MTQzODZiVUwsIDB4MzBiY2MzM2RVTCwgMHgzOGEwYzA3ZFVMLCAweGZkMTYwNmYyVUwsIAorMHhjMzYzNTE5YlVMLCAweDU4OWRkMzkwVUwsIDB4NTQ3OWY4ZTZVTCwgMHgxY2I4ZDY0N1VMLCAweDk3ZmQ2MWE5VUwsIDB4ZWE3NzU5ZjRVTCwgCisweDJkNTc1MzlkVUwsIDB4NTY5YTU4Y2ZVTCwgMHhlODRlNjNhZFVMLCAweDQ2MmUxYjc4VUwsIDB4NjU4MGY4N2VVTCwgMHhmMzgxNzkxNFVMLCAKKzB4OTFkYTU1ZjRVTCwgMHg0MGEyMzBmM1VMLCAweGQxOTg4ZjM1VUwsIDB4YjZlMzE4ZDJVTCwgMHgzZmZhNTBiY1VMLCAweDNkNDBmMDIxVUwsIAorMHhjM2MwYmRhZVVMLCAweDQ5NThjMjRjVUwsIDB4NTE4ZjM2YjJVTCwgMHg4NGIxZDM3MFVMLCAweDBmZWRjZTgzVUwsIDB4ODc4ZGRhZGFVTCwgCisweGYyYTI3OWM3VUwsIDB4OTRlMDFiZThVTCwgMHg5MDcxNmY0YlVMLCAweDk1NGI4YWEzVUx9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTOFsyNTZdID0geworMHhlMjE2MzAwZFVMLCAweGJiZGRmZmZjVUwsIDB4YTdlYmRhYmRVTCwgMHgzNTY0ODA5NVVMLCAweDc3ODlmOGI3VUwsIDB4ZTZjMTEyMWJVTCwgCisweDBlMjQxNjAwVUwsIDB4MDUyY2U4YjVVTCwgMHgxMWE5Y2ZiMFVMLCAweGU1OTUyZjExVUwsIDB4ZWNlNzk5MGFVTCwgMHg5Mzg2ZDE3NFVMLCAKKzB4MmE0MjkzMWNVTCwgMHg3NmUzODExMVVMLCAweGIxMmRlZjNhVUwsIDB4MzdkZGRkZmNVTCwgMHhkZTlhZGViMVVMLCAweDBhMGNjMzJjVUwsIAorMHhiZTE5NzAyOVVMLCAweDg0YTAwOTQwVUwsIDB4YmIyNDNhMGZVTCwgMHhiNGQxMzdjZlVMLCAweGI0NGU3OWYwVUwsIDB4MDQ5ZWVkZmRVTCwgCisweDBiMTVhMTVkVUwsIDB4NDgwZDMxNjhVTCwgMHg4YmJiZGU1YVVMLCAweDY2OWRlZDQyVUwsIDB4YzdlY2U4MzFVTCwgMHgzZjhmOTVlN1VMLCAKKzB4NzJkZjE5MWJVTCwgMHg3NTgwMzMwZFVMLCAweDk0MDc0MjUxVUwsIDB4NWM3ZGNkZmFVTCwgMHhhYmJlNmQ2M1VMLCAweGFhNDAyMTY0VUwsIAorMHhiMzAxZDQwYVVMLCAweDAyZTdkMWNhVUwsIDB4NTM1NzFkYWVVTCwgMHg3YTMxODJhMlVMLCAweDEyYThkZGVjVUwsIDB4ZmRhYTMzNWRVTCwgCisweDE3NmY0M2U4VUwsIDB4NzFmYjQ2ZDRVTCwgMHgzODEyOTAyMlVMLCAweGNlOTQ5YWQ0VUwsIDB4Yjg0NzY5YWRVTCwgMHg5NjViZDg2MlVMLCAKKzB4ODJmM2QwNTVVTCwgMHg2NmZiOTc2N1VMLCAweDE1YjgwYjRlVUwsIDB4MWQ1YjQ3YTBVTCwgMHg0Y2ZkZTA2ZlVMLCAweGMyOGVjNGI4VUwsIAorMHg1N2U4NzI2ZVVMLCAweDY0N2E3OGZjVUwsIDB4OTk4NjVkNDRVTCwgMHg2MDhiZDU5M1VMLCAweDZjMjAwZTAzVUwsIDB4MzlkYzVmZjZVTCwgCisweDVkMGIwMGEzVUwsIDB4YWU2M2FmZjJVTCwgMHg3ZThiZDYzMlVMLCAweDcwMTA4YzBjVUwsIDB4YmJkMzUwNDlVTCwgMHgyOTk4ZGYwNFVMLCAKKzB4OTgwY2Y0MmFVTCwgMHg5YjZkZjQ5MVVMLCAweDllN2VkZDUzVUwsIDB4MDY5MTg1NDhVTCwgMHg1OGNiN2UwN1VMLCAweDNiNzRlZjJlVUwsIAorMHg1MjJmZmZiMVVMLCAweGQyNDcwOGNjVUwsIDB4MWM3ZTI3Y2RVTCwgMHhhNGViMjE1YlVMLCAweDNjZjFkMmUyVUwsIDB4MTliNDdhMzhVTCwgCisweDQyNGY3NjE4VUwsIDB4MzU4NTYwMzlVTCwgMHg5ZDE3ZGVlN1VMLCAweDI3ZWIzNWU2VUwsIDB4YzlhZmY2N2JVTCwgMHgzNmJhZjViOFVMLCAKKzB4MDljNDY3Y2RVTCwgMHhjMTg5MTBiMVVMLCAweGUxMWRiZjdiVUwsIDB4MDZjZDFhZjhVTCwgMHg3MTcwYzYwOFVMLCAweDJkNWUzMzU0VUwsIAorMHhkNGRlNDk1YVVMLCAweDY0YzZkMDA2VUwsIDB4YmNjMGM2MmNVTCwgMHgzZGQwMGRiM1VMLCAweDcwOGY4ZjM0VUwsIDB4NzdkNTFiNDJVTCwgCisweDI2NGY2MjBmVUwsIDB4MjRiOGQyYmZVTCwgMHgxNWMxYjc5ZVVMLCAweDQ2YTUyNTY0VUwsIDB4ZjhkN2U1NGVVTCwgMHgzZTM3ODE2MFVMLCAKKzB4Nzg5NWNkYTVVTCwgMHg4NTljMTVhNVVMLCAweGU2NDU5Nzg4VUwsIDB4YzM3YmM3NWZVTCwgMHhkYjA3YmEwY1VMLCAweDA2NzZhM2FiVUwsIAorMHg3ZjIyOWIxZVVMLCAweDMxODQyZTdiVUwsIDB4MjQyNTlmZDdVTCwgMHhmOGJlZjQ3MlVMLCAweDgzNWZmY2I4VUwsIDB4NmRmNGMxZjJVTCwgCisweDk2ZjViMTk1VUwsIDB4ZmQwYWYwZmNVTCwgMHhiMGZlMTM0Y1VMLCAweGUyNTA2ZDNkVUwsIDB4NGY5YjEyZWFVTCwgMHhmMjE1ZjIyNVVMLCAKKzB4YTIyMzczNmZVTCwgMHg5ZmI0YzQyOFVMLCAweDI1ZDA0OTc5VUwsIDB4MzRjNzEzZjhVTCwgMHhjNDYxODE4N1VMLCAweGVhN2E2ZTk4VUwsIAorMHg3Y2QxNmVmY1VMLCAweDE0MzY4NzZjVUwsIDB4ZjE1NDQxMDdVTCwgMHhiZWRlZWUxNFVMLCAweDU2ZTlhZjI3VUwsIDB4YTA0YWE0NDFVTCwgCisweDNjZjdjODk5VUwsIDB4OTJlY2JhZTZVTCwgMHhkZDY3MDE2ZFVMLCAweDE1MTY4MmViVUwsIDB4YTg0MmVlZGZVTCwgMHhmZGJhNjBiNFVMLCAKKzB4ZjE5MDdiNzVVTCwgMHgyMGUzMDMwZlVMLCAweDI0ZDhjMjllVUwsIDB4ZTEzOTY3M2JVTCwgMHhlZmE2M2ZiOFVMLCAweDcxODczMDU0VUwsIAorMHhiNmYyY2YzYlVMLCAweDlmMzI2NDQyVUwsIDB4Y2IxNWE0Y2NVTCwgMHhiMDFhNDUwNFVMLCAweGYxZTQ3ZDhkVUwsIDB4ODQ0YTFiZTVVTCwgCisweGJhZTdkZmRjVUwsIDB4NDJjYmRhNzBVTCwgMHhjZDdkYWUwYVVMLCAweDU3ZTg1YjdhVUwsIDB4ZDUzZjVhZjZVTCwgMHgyMGNmNGQ4Y1VMLCAKKzB4Y2VhNGQ0MjhVTCwgMHg3OWQxMzBhNFVMLCAweDM0ODZlYmZiVUwsIDB4MzNkM2NkZGNVTCwgMHg3Nzg1M2I1M1VMLCAweDM3ZWZmY2I1VUwsIAorMHhjNTA2ODc3OFVMLCAweGU1ODBiM2U2VUwsIDB4NGU2OGI4ZjRVTCwgMHhjNWM4YjM3ZVVMLCAweDBkODA5ZWEyVUwsIDB4Mzk4ZmViN2NVTCwgCisweDEzMmE0Zjk0VUwsIDB4NDNiNzk1MGVVTCwgMHgyZmVlN2QxY1VMLCAweDIyMzYxM2JkVUwsIDB4ZGQwNmNhYTJVTCwgMHgzN2RmOTMyYlVMLCAKKzB4YzQyNDgyODlVTCwgMHhhY2YzZWJjM1VMLCAweDU3MTVmNmI3VUwsIDB4ZWYzNDc4ZGRVTCwgMHhmMjY3NjE2ZlVMLCAweGMxNDhjYmU0VUwsIAorMHg5MDUyODE1ZVVMLCAweDVlNDEwZmFiVUwsIDB4YjQ4YTI0NjVVTCwgMHgyZWRhN2ZhNFVMLCAweGU4N2I0MGU0VUwsIDB4ZTk4ZWEwODRVTCwgCisweDU4ODllOWUxVUwsIDB4ZWZkMzkwZmNVTCwgMHhkZDA3ZDM1YlVMLCAweGRiNDg1Njk0VUwsIDB4MzhkN2U1YjJVTCwgMHg1NzcyMDEwMVVMLCAKKzB4NzMwZWRlYmNVTCwgMHg1YjY0MzExM1VMLCAweDk0OTE3ZTRmVUwsIDB4NTAzYzJmYmFVTCwgMHg2NDZmMTI4MlVMLCAweDc1MjNkMjRhVUwsIAorMHhlMDc3OTY5NVVMLCAweGY5YzE3YThmVUwsIDB4N2E1YjIxMjFVTCwgMHhkMTg3Yjg5NlVMLCAweDI5MjYzYTRkVUwsIDB4YmE1MTBjZGZVTCwgCisweDgxZjQ3YzlmVUwsIDB4YWQxMTYzZWRVTCwgMHhlYTdiNTk2NVVMLCAweDFhMDA3MjZlVUwsIDB4MTE0MDMwOTJVTCwgMHgwMGRhNmQ3N1VMLCAKKzB4NGEwY2RkNjFVTCwgMHhhZDFmNDYwM1VMLCAweDYwNWJkZmIwVUwsIDB4OWVlZGMzNjRVTCwgMHgyMmViZTZhOFVMLCAweGNlZTdkMjhhVUwsIAorMHhhMGU3MzZhMFVMLCAweDU1NjRhNmI5VUwsIDB4MTA4NTMyMDlVTCwgMHhjN2ViOGYzN1VMLCAweDJkZTcwNWNhVUwsIDB4ODk1MTU3MGZVTCwgCisweGRmMDk4MjJiVUwsIDB4YmQ2OTFhNmNVTCwgMHhhYTEyZTRmMlVMLCAweDg3NDUxYzBmVUwsIDB4ZTBmNmEyN2FVTCwgMHgzYWRhNDgxOVVMLCAKKzB4NGNmMTc2NGZVTCwgMHgwZDc3MWMyYlVMLCAweDY3Y2RiMTU2VUwsIDB4MzUwZDgzODRVTCwgMHg1OTM4ZmEwZlVMLCAweDQyMzk5ZWYzVUwsIAorMHgzNjk5N2IwN1VMLCAweDBlODQwOTNkVUwsIDB4NGFhOTNlNjFVTCwgMHg4MzYwZDg3YlVMLCAweDFmYTk4YjBjVUwsIDB4MTE0OTM4MmNVTCwgCisweGU5NzYyNWE1VUwsIDB4MDYxNGQxYjdVTCwgMHgwZTI1MjQ0YlVMLCAweDBjNzY4MzQ3VUwsIDB4NTg5ZThkODJVTCwgMHgwZDIwNTlkMVVMLCAKKzB4YTQ2NmJiMWVVTCwgMHhmOGRhMGE4MlVMLCAweDA0ZjE5MTMwVUwsIDB4YmE2ZTRlYzBVTCwgMHg5OTI2NTE2NFVMLCAweDFlZTcyMzBkVUwsIAorMHg1MGIyYWQ4MFVMLCAweGVhZWU2ODAxVUwsIDB4OGRiMmEyODNVTCwgMHhlYThiZjU5ZVVMfTsKKworLyogcmV0dXJucyB0aGUgaSd0aCBieXRlIG9mIGEgdmFyaWFibGUgKi8KKyNpZmRlZiBfTVNDX1ZFUgorICAgI2RlZmluZSBHQih4LCBpKSAoKHVuc2lnbmVkIGNoYXIpKCh4WygxNS1pKT4+Ml0pPj4odW5zaWduZWQpKDgqKCgxNS1pKSYzKSkpKQorI2Vsc2UgICAKKyAgICNkZWZpbmUgR0IoeCwgaSkgKCgoeFsoMTUtaSk+PjJdKT4+KHVuc2lnbmVkKSg4KigoMTUtaSkmMykpKSYyNTUpCisjZW5kaWYgICAKKworIC8qKgorICAgIEluaXRpYWxpemUgdGhlIENBU1Q1IGJsb2NrIGNpcGhlcgorICAgIEBwYXJhbSBrZXkgVGhlIHN5bW1ldHJpYyBrZXkgeW91IHdpc2ggdG8gcGFzcworICAgIEBwYXJhbSBrZXlsZW4gVGhlIGtleSBsZW5ndGggaW4gYnl0ZXMKKyAgICBAcGFyYW0gbnVtX3JvdW5kcyBUaGUgbnVtYmVyIG9mIHJvdW5kcyBkZXNpcmVkICgwIGZvciBkZWZhdWx0KQorICAgIEBwYXJhbSBza2V5IFRoZSBrZXkgaW4gYXMgc2NoZWR1bGVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgKi8KKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyBpbnQgX2Nhc3Q1X3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZWxzZQoraW50IGNhc3Q1X3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZW5kaWYKK3sKKyAgIHVsb25nMzIgeFs0XSwgels0XTsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzE2XTsKKyAgIGludCB5LCBpOworCisgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKworICAgaWYgKG51bV9yb3VuZHMgIT0gMTIgJiYgbnVtX3JvdW5kcyAhPSAxNiAmJiBudW1fcm91bmRzICE9IDApIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1JPVU5EUzsgCisgICB9CisgCisgICBpZiAobnVtX3JvdW5kcyA9PSAxMiAmJiBrZXlsZW4gPiAxMCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgfQorCisgICBpZiAoa2V5bGVuIDwgNSB8fCBrZXlsZW4gPiAxNikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0KKworICAgLyogZXh0ZW5kIHRoZSBrZXkgYXMgcmVxdWlyZWQgKi8KKyAgIHplcm9tZW0oYnVmLCBzaXplb2YoYnVmKSk7CisgICBYTUVNQ1BZKGJ1Ziwga2V5LCAoc2l6ZV90KWtleWxlbik7CisKKyAgIC8qIGxvYWQgYW5kIHN0YXJ0IHRoZSBhd2Z1bCBsb29raW5nIG5ldHdvcmsgKi8KKyAgIGZvciAoeSA9IDA7IHkgPCA0OyB5KyspIHsKKyAgICAgICBMT0FEMzJIKHhbMy15XSxidWYrNCp5KTsKKyAgIH0KKworICAgZm9yIChpID0geSA9IDA7IHkgPCAyOyB5KyspIHsKKyAgICAgICAgelszXSA9IHhbM10gXiBTNVtHQih4LCAweEQpXSBeIFM2W0dCKHgsIDB4RildIF4gUzdbR0IoeCwgMHhDKV0gXiBTOFtHQih4LCAweEUpXSBeIFM3W0dCKHgsIDB4OCldOworICAgICAgICB6WzJdID0geFsxXSBeIFM1W0dCKHosIDB4MCldIF4gUzZbR0IoeiwgMHgyKV0gXiBTN1tHQih6LCAweDEpXSBeIFM4W0dCKHosIDB4MyldIF4gUzhbR0IoeCwgMHhBKV07CisgICAgICAgIHpbMV0gPSB4WzBdIF4gUzVbR0IoeiwgMHg3KV0gXiBTNltHQih6LCAweDYpXSBeIFM3W0dCKHosIDB4NSldIF4gUzhbR0IoeiwgMHg0KV0gXiBTNVtHQih4LCAweDkpXTsKKyAgICAgICAgelswXSA9IHhbMl0gXiBTNVtHQih6LCAweEEpXSBeIFM2W0dCKHosIDB4OSldIF4gUzdbR0IoeiwgMHhiKV0gXiBTOFtHQih6LCAweDgpXSBeIFM2W0dCKHgsIDB4QildOworICAgICAgICBza2V5LT5jYXN0NS5LW2krK10gPSBTNVtHQih6LCAweDgpXSBeIFM2W0dCKHosIDB4OSldIF4gUzdbR0IoeiwgMHg3KV0gXiBTOFtHQih6LCAweDYpXSBeIFM1W0dCKHosIDB4MildOworICAgICAgICBza2V5LT5jYXN0NS5LW2krK10gPSBTNVtHQih6LCAweEEpXSBeIFM2W0dCKHosIDB4QildIF4gUzdbR0IoeiwgMHg1KV0gXiBTOFtHQih6LCAweDQpXSBeIFM2W0dCKHosIDB4NildOworICAgICAgICBza2V5LT5jYXN0NS5LW2krK10gPSBTNVtHQih6LCAweEMpXSBeIFM2W0dCKHosIDB4ZCldIF4gUzdbR0IoeiwgMHgzKV0gXiBTOFtHQih6LCAweDIpXSBeIFM3W0dCKHosIDB4OSldOworICAgICAgICBza2V5LT5jYXN0NS5LW2krK10gPSBTNVtHQih6LCAweEUpXSBeIFM2W0dCKHosIDB4RildIF4gUzdbR0IoeiwgMHgxKV0gXiBTOFtHQih6LCAweDApXSBeIFM4W0dCKHosIDB4YyldOworCisgICAgICAgIHhbM10gPSB6WzFdIF4gUzVbR0IoeiwgMHg1KV0gXiBTNltHQih6LCAweDcpXSBeIFM3W0dCKHosIDB4NCldIF4gUzhbR0IoeiwgMHg2KV0gXiBTN1tHQih6LCAweDApXTsKKyAgICAgICAgeFsyXSA9IHpbM10gXiBTNVtHQih4LCAweDApXSBeIFM2W0dCKHgsIDB4MildIF4gUzdbR0IoeCwgMHgxKV0gXiBTOFtHQih4LCAweDMpXSBeIFM4W0dCKHosIDB4MildOworICAgICAgICB4WzFdID0gelsyXSBeIFM1W0dCKHgsIDB4NyldIF4gUzZbR0IoeCwgMHg2KV0gXiBTN1tHQih4LCAweDUpXSBeIFM4W0dCKHgsIDB4NCldIF4gUzVbR0IoeiwgMHgxKV07CisgICAgICAgIHhbMF0gPSB6WzBdIF4gUzVbR0IoeCwgMHhBKV0gXiBTNltHQih4LCAweDkpXSBeIFM3W0dCKHgsIDB4YildIF4gUzhbR0IoeCwgMHg4KV0gXiBTNltHQih6LCAweDMpXTsKKyAgICAgICAgc2tleS0+Y2FzdDUuS1tpKytdID0gUzVbR0IoeCwgMHgzKV0gXiBTNltHQih4LCAweDIpXSBeIFM3W0dCKHgsIDB4YyldIF4gUzhbR0IoeCwgMHhkKV0gXiBTNVtHQih4LCAweDgpXTsKKyAgICAgICAgc2tleS0+Y2FzdDUuS1tpKytdID0gUzVbR0IoeCwgMHgxKV0gXiBTNltHQih4LCAweDApXSBeIFM3W0dCKHgsIDB4ZSldIF4gUzhbR0IoeCwgMHhmKV0gXiBTNltHQih4LCAweGQpXTsKKyAgICAgICAgc2tleS0+Y2FzdDUuS1tpKytdID0gUzVbR0IoeCwgMHg3KV0gXiBTNltHQih4LCAweDYpXSBeIFM3W0dCKHgsIDB4OCldIF4gUzhbR0IoeCwgMHg5KV0gXiBTN1tHQih4LCAweDMpXTsKKyAgICAgICAgc2tleS0+Y2FzdDUuS1tpKytdID0gUzVbR0IoeCwgMHg1KV0gXiBTNltHQih4LCAweDQpXSBeIFM3W0dCKHgsIDB4YSldIF4gUzhbR0IoeCwgMHhiKV0gXiBTOFtHQih4LCAweDcpXTsKKworICAgICAgICAvKiBzZWNvbmQgaGFsZiAqLworICAgICAgICB6WzNdID0geFszXSBeIFM1W0dCKHgsIDB4RCldIF4gUzZbR0IoeCwgMHhGKV0gXiBTN1tHQih4LCAweEMpXSBeIFM4W0dCKHgsIDB4RSldIF4gUzdbR0IoeCwgMHg4KV07CisgICAgICAgIHpbMl0gPSB4WzFdIF4gUzVbR0IoeiwgMHgwKV0gXiBTNltHQih6LCAweDIpXSBeIFM3W0dCKHosIDB4MSldIF4gUzhbR0IoeiwgMHgzKV0gXiBTOFtHQih4LCAweEEpXTsKKyAgICAgICAgelsxXSA9IHhbMF0gXiBTNVtHQih6LCAweDcpXSBeIFM2W0dCKHosIDB4NildIF4gUzdbR0IoeiwgMHg1KV0gXiBTOFtHQih6LCAweDQpXSBeIFM1W0dCKHgsIDB4OSldOworICAgICAgICB6WzBdID0geFsyXSBeIFM1W0dCKHosIDB4QSldIF4gUzZbR0IoeiwgMHg5KV0gXiBTN1tHQih6LCAweGIpXSBeIFM4W0dCKHosIDB4OCldIF4gUzZbR0IoeCwgMHhCKV07CisgICAgICAgIHNrZXktPmNhc3Q1LktbaSsrXSA9IFM1W0dCKHosIDB4MyldIF4gUzZbR0IoeiwgMHgyKV0gXiBTN1tHQih6LCAweGMpXSBeIFM4W0dCKHosIDB4ZCldIF4gUzVbR0IoeiwgMHg5KV07CisgICAgICAgIHNrZXktPmNhc3Q1LktbaSsrXSA9IFM1W0dCKHosIDB4MSldIF4gUzZbR0IoeiwgMHgwKV0gXiBTN1tHQih6LCAweGUpXSBeIFM4W0dCKHosIDB4ZildIF4gUzZbR0IoeiwgMHhjKV07CisgICAgICAgIHNrZXktPmNhc3Q1LktbaSsrXSA9IFM1W0dCKHosIDB4NyldIF4gUzZbR0IoeiwgMHg2KV0gXiBTN1tHQih6LCAweDgpXSBeIFM4W0dCKHosIDB4OSldIF4gUzdbR0IoeiwgMHgyKV07CisgICAgICAgIHNrZXktPmNhc3Q1LktbaSsrXSA9IFM1W0dCKHosIDB4NSldIF4gUzZbR0IoeiwgMHg0KV0gXiBTN1tHQih6LCAweGEpXSBeIFM4W0dCKHosIDB4YildIF4gUzhbR0IoeiwgMHg2KV07CisKKyAgICAgICAgeFszXSA9IHpbMV0gXiBTNVtHQih6LCAweDUpXSBeIFM2W0dCKHosIDB4NyldIF4gUzdbR0IoeiwgMHg0KV0gXiBTOFtHQih6LCAweDYpXSBeIFM3W0dCKHosIDB4MCldOworICAgICAgICB4WzJdID0gelszXSBeIFM1W0dCKHgsIDB4MCldIF4gUzZbR0IoeCwgMHgyKV0gXiBTN1tHQih4LCAweDEpXSBeIFM4W0dCKHgsIDB4MyldIF4gUzhbR0IoeiwgMHgyKV07CisgICAgICAgIHhbMV0gPSB6WzJdIF4gUzVbR0IoeCwgMHg3KV0gXiBTNltHQih4LCAweDYpXSBeIFM3W0dCKHgsIDB4NSldIF4gUzhbR0IoeCwgMHg0KV0gXiBTNVtHQih6LCAweDEpXTsKKyAgICAgICAgeFswXSA9IHpbMF0gXiBTNVtHQih4LCAweEEpXSBeIFM2W0dCKHgsIDB4OSldIF4gUzdbR0IoeCwgMHhiKV0gXiBTOFtHQih4LCAweDgpXSBeIFM2W0dCKHosIDB4MyldOworICAgICAgICBza2V5LT5jYXN0NS5LW2krK10gPSBTNVtHQih4LCAweDgpXSBeIFM2W0dCKHgsIDB4OSldIF4gUzdbR0IoeCwgMHg3KV0gXiBTOFtHQih4LCAweDYpXSBeIFM1W0dCKHgsIDB4MyldOworICAgICAgICBza2V5LT5jYXN0NS5LW2krK10gPSBTNVtHQih4LCAweGEpXSBeIFM2W0dCKHgsIDB4YildIF4gUzdbR0IoeCwgMHg1KV0gXiBTOFtHQih4LCAweDQpXSBeIFM2W0dCKHgsIDB4NyldOworICAgICAgICBza2V5LT5jYXN0NS5LW2krK10gPSBTNVtHQih4LCAweGMpXSBeIFM2W0dCKHgsIDB4ZCldIF4gUzdbR0IoeCwgMHgzKV0gXiBTOFtHQih4LCAweDIpXSBeIFM3W0dCKHgsIDB4OCldOworICAgICAgICBza2V5LT5jYXN0NS5LW2krK10gPSBTNVtHQih4LCAweGUpXSBeIFM2W0dCKHgsIDB4ZildIF4gUzdbR0IoeCwgMHgxKV0gXiBTOFtHQih4LCAweDApXSBeIFM4W0dCKHgsIDB4ZCldOworICAgfQorCisgICBza2V5LT5jYXN0NS5rZXlsZW4gPSBrZXlsZW47CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0oYnVmLCBzaXplb2YoYnVmKSk7CisgICB6ZXJvbWVtKHgsIHNpemVvZih4KSk7CisgICB6ZXJvbWVtKHosIHNpemVvZih6KSk7CisjZW5kaWYgIAorCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK2ludCBjYXN0NV9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgaW50IHo7CisgICB6ID0gX2Nhc3Q1X3NldHVwKGtleSwga2V5bGVuLCBudW1fcm91bmRzLCBza2V5KTsKKyAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIpKjggKyAxNiArIHNpemVvZihpbnQpKjIpOworICAgcmV0dXJuIHo7Cit9CisjZW5kaWYKKworI2lmZGVmIF9NU0NfVkVSCisgICAjZGVmaW5lIElOTElORSBfX2lubGluZQorI2Vsc2UKKyAgICNkZWZpbmUgSU5MSU5FIAorI2VuZGlmICAgCisgICAKK0lOTElORSBzdGF0aWMgdWxvbmczMiBGSSh1bG9uZzMyIFIsIHVsb25nMzIgS20sIHVsb25nMzIgS3IpCit7CisgICB1bG9uZzMyIEk7CisgICBJID0gKEttICsgUik7CisgICBJID0gUk9MKEksIEtyKTsKKyAgIHJldHVybiAoKFMxW2J5dGUoSSwgMyldIF4gUzJbYnl0ZShJLDIpXSkgLSBTM1tieXRlKEksMSldKSArIFM0W2J5dGUoSSwwKV07Cit9CisgICAKK0lOTElORSBzdGF0aWMgdWxvbmczMiBGSUkodWxvbmczMiBSLCB1bG9uZzMyIEttLCB1bG9uZzMyIEtyKQoreworICAgdWxvbmczMiBJOworICAgSSA9IChLbSBeIFIpOworICAgSSA9IFJPTChJLCBLcik7CisgICByZXR1cm4gKChTMVtieXRlKEksIDMpXSAtIFMyW2J5dGUoSSwyKV0pICsgUzNbYnl0ZShJLDEpXSkgXiBTNFtieXRlKEksMCldOworfQorCitJTkxJTkUgc3RhdGljIHVsb25nMzIgRklJSSh1bG9uZzMyIFIsIHVsb25nMzIgS20sIHVsb25nMzIgS3IpCit7CisgICB1bG9uZzMyIEk7CisgICBJID0gKEttIC0gUik7CisgICBJID0gUk9MKEksIEtyKTsKKyAgIHJldHVybiAoKFMxW2J5dGUoSSwgMyldICsgUzJbYnl0ZShJLDIpXSkgXiBTM1tieXRlKEksMSldKSAtIFM0W2J5dGUoSSwwKV07Cit9CisKKy8qKgorICBFbmNyeXB0cyBhIGJsb2NrIG9mIHRleHQgd2l0aCBDQVNUNQorICBAcGFyYW0gcHQgVGhlIGlucHV0IHBsYWludGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyovCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IF9jYXN0NV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZWxzZQoraW50IGNhc3Q1X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbmRpZgoreworICAgdWxvbmczMiBSLCBMOworCisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgIExPQUQzMkgoTCwmcHRbMF0pOyAKKyAgIExPQUQzMkgoUiwmcHRbNF0pOworICAgTCBePSBGSShSLCBza2V5LT5jYXN0NS5LWzBdLCBza2V5LT5jYXN0NS5LWzE2XSk7CisgICBSIF49IEZJSShMLCBza2V5LT5jYXN0NS5LWzFdLCBza2V5LT5jYXN0NS5LWzE3XSk7CisgICBMIF49IEZJSUkoUiwgc2tleS0+Y2FzdDUuS1syXSwgc2tleS0+Y2FzdDUuS1sxOF0pOworICAgUiBePSBGSShMLCBza2V5LT5jYXN0NS5LWzNdLCBza2V5LT5jYXN0NS5LWzE5XSk7CisgICBMIF49IEZJSShSLCBza2V5LT5jYXN0NS5LWzRdLCBza2V5LT5jYXN0NS5LWzIwXSk7CisgICBSIF49IEZJSUkoTCwgc2tleS0+Y2FzdDUuS1s1XSwgc2tleS0+Y2FzdDUuS1syMV0pOworICAgTCBePSBGSShSLCBza2V5LT5jYXN0NS5LWzZdLCBza2V5LT5jYXN0NS5LWzIyXSk7CisgICBSIF49IEZJSShMLCBza2V5LT5jYXN0NS5LWzddLCBza2V5LT5jYXN0NS5LWzIzXSk7CisgICBMIF49IEZJSUkoUiwgc2tleS0+Y2FzdDUuS1s4XSwgc2tleS0+Y2FzdDUuS1syNF0pOworICAgUiBePSBGSShMLCBza2V5LT5jYXN0NS5LWzldLCBza2V5LT5jYXN0NS5LWzI1XSk7CisgICBMIF49IEZJSShSLCBza2V5LT5jYXN0NS5LWzEwXSwgc2tleS0+Y2FzdDUuS1syNl0pOworICAgUiBePSBGSUlJKEwsIHNrZXktPmNhc3Q1LktbMTFdLCBza2V5LT5jYXN0NS5LWzI3XSk7CisgICBpZiAoc2tleS0+Y2FzdDUua2V5bGVuID4gMTApIHsKKyAgICAgIEwgXj0gRkkoUiwgc2tleS0+Y2FzdDUuS1sxMl0sIHNrZXktPmNhc3Q1LktbMjhdKTsKKyAgICAgIFIgXj0gRklJKEwsIHNrZXktPmNhc3Q1LktbMTNdLCBza2V5LT5jYXN0NS5LWzI5XSk7CisgICAgICBMIF49IEZJSUkoUiwgc2tleS0+Y2FzdDUuS1sxNF0sIHNrZXktPmNhc3Q1LktbMzBdKTsKKyAgICAgIFIgXj0gRkkoTCwgc2tleS0+Y2FzdDUuS1sxNV0sIHNrZXktPmNhc3Q1LktbMzFdKTsKKyAgIH0KKyAgIFNUT1JFMzJIKFIsJmN0WzBdKTsKKyAgIFNUT1JFMzJIKEwsJmN0WzRdKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitpbnQgY2FzdDVfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgaW50IGVyciA9X2Nhc3Q1X2VjYl9lbmNyeXB0KHB0LGN0LHNrZXkpOworICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikqMyk7CisgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qKgorICBEZWNyeXB0cyBhIGJsb2NrIG9mIHRleHQgd2l0aCBDQVNUNQorICBAcGFyYW0gY3QgVGhlIGlucHV0IGNpcGhlcnRleHQgKDggYnl0ZXMpCisgIEBwYXJhbSBwdCBUaGUgb3V0cHV0IHBsYWludGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQgCisqLworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfY2FzdDVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2Vsc2UKK2ludCBjYXN0NV9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZW5kaWYKK3sKKyAgIHVsb25nMzIgUiwgTDsKKworICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworCisgICBMT0FEMzJIKFIsJmN0WzBdKTsgCisgICBMT0FEMzJIKEwsJmN0WzRdKTsKKyAgIGlmIChza2V5LT5jYXN0NS5rZXlsZW4gPiAxMCkgeworICAgICAgUiBePSBGSShMLCBza2V5LT5jYXN0NS5LWzE1XSwgc2tleS0+Y2FzdDUuS1szMV0pOworICAgICAgTCBePSBGSUlJKFIsIHNrZXktPmNhc3Q1LktbMTRdLCBza2V5LT5jYXN0NS5LWzMwXSk7CisgICAgICBSIF49IEZJSShMLCBza2V5LT5jYXN0NS5LWzEzXSwgc2tleS0+Y2FzdDUuS1syOV0pOworICAgICAgTCBePSBGSShSLCBza2V5LT5jYXN0NS5LWzEyXSwgc2tleS0+Y2FzdDUuS1syOF0pOworICAgfQorICAgUiBePSBGSUlJKEwsIHNrZXktPmNhc3Q1LktbMTFdLCBza2V5LT5jYXN0NS5LWzI3XSk7CisgICBMIF49IEZJSShSLCBza2V5LT5jYXN0NS5LWzEwXSwgc2tleS0+Y2FzdDUuS1syNl0pOworICAgUiBePSBGSShMLCBza2V5LT5jYXN0NS5LWzldLCBza2V5LT5jYXN0NS5LWzI1XSk7CisgICBMIF49IEZJSUkoUiwgc2tleS0+Y2FzdDUuS1s4XSwgc2tleS0+Y2FzdDUuS1syNF0pOworICAgUiBePSBGSUkoTCwgc2tleS0+Y2FzdDUuS1s3XSwgc2tleS0+Y2FzdDUuS1syM10pOworICAgTCBePSBGSShSLCBza2V5LT5jYXN0NS5LWzZdLCBza2V5LT5jYXN0NS5LWzIyXSk7CisgICBSIF49IEZJSUkoTCwgc2tleS0+Y2FzdDUuS1s1XSwgc2tleS0+Y2FzdDUuS1syMV0pOworICAgTCBePSBGSUkoUiwgc2tleS0+Y2FzdDUuS1s0XSwgc2tleS0+Y2FzdDUuS1syMF0pOworICAgUiBePSBGSShMLCBza2V5LT5jYXN0NS5LWzNdLCBza2V5LT5jYXN0NS5LWzE5XSk7CisgICBMIF49IEZJSUkoUiwgc2tleS0+Y2FzdDUuS1syXSwgc2tleS0+Y2FzdDUuS1sxOF0pOworICAgUiBePSBGSUkoTCwgc2tleS0+Y2FzdDUuS1sxXSwgc2tleS0+Y2FzdDUuS1sxN10pOworICAgTCBePSBGSShSLCBza2V5LT5jYXN0NS5LWzBdLCBza2V5LT5jYXN0NS5LWzE2XSk7CisgICBTVE9SRTMySChMLCZwdFswXSk7CisgICBTVE9SRTMySChSLCZwdFs0XSk7CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworaW50IGNhc3Q1X2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIGludCBlcnIgPSBfY2FzdDVfZWNiX2RlY3J5cHQoY3QscHQsc2tleSk7CisgICBidXJuX3N0YWNrKHNpemVvZih1bG9uZzMyKSozKTsKKyAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyoqCisgIFBlcmZvcm1zIGEgc2VsZi10ZXN0IG9mIHRoZSBDQVNUNSBibG9jayBjaXBoZXIKKyAgQHJldHVybiBDUllQVF9PSyBpZiBmdW5jdGlvbmFsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0IGhhcyBiZWVuIGRpc2FibGVkCisqLworaW50IGNhc3Q1X3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZSAgICAKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgIGludCBrZXlsZW47CisgICAgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdOworICAgICAgIHVuc2lnbmVkIGNoYXIgcHRbOF07CisgICAgICAgdW5zaWduZWQgY2hhciBjdFs4XTsKKyAgIH0gdGVzdHNbXSA9IHsKKyAgICAgeyAxNiwKKyAgICAgICB7MHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHgxMiwgMHgzNCwgMHg1NiwgMHg3OCwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHgzNCwgMHg1NiwgMHg3OCwgMHg5QX0sCisgICAgICAgezB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4QUIsIDB4Q0QsIDB4RUZ9LAorICAgICAgIHsweDIzLCAweDhCLCAweDRGLCAweEU1LCAweDg0LCAweDdFLCAweDQ0LCAweEIyfQorICAgICB9LAorICAgICB7IDEwLAorICAgICAgIHsweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDEyLCAweDM0LCAweDU2LCAweDc4LCAweDIzLCAweDQ1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfSwKKyAgICAgICB7MHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhBQiwgMHhDRCwgMHhFRn0sCisgICAgICAgezB4RUIsIDB4NkEsIDB4NzEsIDB4MUEsIDB4MkMsIDB4MDIsIDB4MjcsIDB4MUJ9LAorICAgICB9LAorICAgICB7IDUsCisgICAgICAgezB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9LAorICAgICAgIHsweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweEFCLCAweENELCAweEVGfSwKKyAgICAgICB7MHg3QSwgMHhDOCwgMHgxNiwgMHhEMSwgMHg2RSwgMHg5QiwgMHgzMCwgMHgyRX0KKyAgICAgfQorICAgfTsKKyAgIGludCBpLCB5LCBlcnI7CisgICBzeW1tZXRyaWNfa2V5IGtleTsKKyAgIHVuc2lnbmVkIGNoYXIgdG1wWzJdWzhdOworCisgICBmb3IgKGkgPSAwOyBpIDwgKGludCkoc2l6ZW9mKHRlc3RzKSAvIHNpemVvZih0ZXN0c1swXSkpOyBpKyspIHsKKyAgICAgICBpZiAoKGVyciA9IGNhc3Q1X3NldHVwKHRlc3RzW2ldLmtleSwgdGVzdHNbaV0ua2V5bGVuLCAwLCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgIH0KKyAgICAgICBjYXN0NV9lY2JfZW5jcnlwdCh0ZXN0c1tpXS5wdCwgdG1wWzBdLCAma2V5KTsKKyAgICAgICBjYXN0NV9lY2JfZGVjcnlwdCh0bXBbMF0sIHRtcFsxXSwgJmtleSk7CisgICAgICAgaWYgKChYTUVNQ01QKHRtcFswXSwgdGVzdHNbaV0uY3QsIDgpICE9IDApIHx8IChYTUVNQ01QKHRtcFsxXSwgdGVzdHNbaV0ucHQsIDgpICE9IDApKSB7CisgICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICB9CisgICAgICAvKiBub3cgc2VlIGlmIHdlIGNhbiBlbmNyeXB0IGFsbCB6ZXJvIGJ5dGVzIDEwMDAgdGltZXMsIGRlY3J5cHQgYW5kIGNvbWUgYmFjayB3aGVyZSB3ZSBzdGFydGVkICovCisgICAgICBmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSB0bXBbMF1beV0gPSAwOworICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykgY2FzdDVfZWNiX2VuY3J5cHQodG1wWzBdLCB0bXBbMF0sICZrZXkpOworICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykgY2FzdDVfZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMF0sICZrZXkpOworICAgICAgZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgaWYgKHRtcFswXVt5XSAhPSAwKSByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgCisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7CisgI2VuZGlmCit9CisKKy8qKiBUZXJtaW5hdGUgdGhlIGNvbnRleHQgCisgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorKi8KK3ZvaWQgY2FzdDVfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KQoreworfQorCisvKioKKyAgR2V0cyBzdWl0YWJsZSBrZXkgc2l6ZQorICBAcGFyYW0ga2V5c2l6ZSBbaW4vb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSByZWNvbW1lbmRlZCBrZXkgKGluIGJ5dGVzKS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSB0aGUgc3VpdGFibGUgc2l6ZSBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgdGhlIGlucHV0IGtleSBzaXplIGlzIGFjY2VwdGFibGUuCisqLworaW50IGNhc3Q1X2tleXNpemUoaW50ICprZXlzaXplKQoreworICAgTFRDX0FSR0NISyhrZXlzaXplICE9IE5VTEwpOworICAgaWYgKCprZXlzaXplIDwgNSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0gZWxzZSBpZiAoKmtleXNpemUgPiAxNikgeworICAgICAgKmtleXNpemUgPSAxNjsKKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKK30gCisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9jYXN0NS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2Rlcy5jIGIvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvZGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUwNWIxNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2Rlcy5jCkBAIC0wLDAgKzEsMTkxNCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKiogCisgIEBmaWxlIGRlcy5jCisgIERFUyBjb2RlIHN1Ym1pdHRlZCBieSBEb2JlcyBWYW5kZXJtZWVyIAorKi8KKworI2lmZGVmIERFUworCisjZGVmaW5lIEVOMCAwIAorI2RlZmluZSBERTEgMQorCisjaWYgMAorY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBkZXNfZGVzYyA9Cit7CisgICAgImRlcyIsCisgICAgMTMsCisgICAgOCwgOCwgOCwgMTYsCisgICAgJmRlc19zZXR1cCwKKyAgICAmZGVzX2VjYl9lbmNyeXB0LAorICAgICZkZXNfZWNiX2RlY3J5cHQsCisgICAgJmRlc190ZXN0LAorICAgICZkZXNfZG9uZSwKKyAgICAmZGVzX2tleXNpemUsCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfTsKKyNlbmRpZgorCitjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIGRlczNfZGVzYyA9Cit7CisgICAgIjNkZXMiLAorICAgIDE0LAorICAgIDI0LCAyNCwgOCwgMTYsCisgICAgJmRlczNfc2V0dXAsCisgICAgJmRlczNfZWNiX2VuY3J5cHQsCisgICAgJmRlczNfZWNiX2RlY3J5cHQsCisgICAgJmRlczNfdGVzdCwKKyAgICAmZGVzM19kb25lLAorICAgICZkZXMzX2tleXNpemUsCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgYnl0ZWJpdFs4XSA9Cit7CisgICAgMDIwMCwgMDEwMCwgMDQwLCAwMjAsIDAxMCwgMDQsIDAyLCAwMSAKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIGJpZ2J5dGVbMjRdID0KK3sKKyAgICAweDgwMDAwMFVMLCAgMHg0MDAwMDBVTCwgIDB4MjAwMDAwVUwsICAweDEwMDAwMFVMLAorICAgIDB4ODAwMDBVTCwgICAweDQwMDAwVUwsICAgMHgyMDAwMFVMLCAgIDB4MTAwMDBVTCwKKyAgICAweDgwMDBVTCwgICAgMHg0MDAwVUwsICAgIDB4MjAwMFVMLCAgICAweDEwMDBVTCwKKyAgICAweDgwMFVMLCAgICAgMHg0MDBVTCwgICAgIDB4MjAwVUwsICAgICAweDEwMFVMLAorICAgIDB4ODBVTCwgICAgICAweDQwVUwsICAgICAgMHgyMFVMLCAgICAgIDB4MTBVTCwKKyAgICAweDhVTCwgICAgICAgMHg0VUwsICAgICAgIDB4MlVMLCAgICAgICAweDFMIAorfTsKKworLyogVXNlIHRoZSBrZXkgc2NoZWR1bGUgc3BlY2lmaWMgaW4gdGhlIHN0YW5kYXJkIChBTlNJIFgzLjkyLTE5ODEpICovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBjMVs1Nl0gPSB7CisgICAgNTYsIDQ4LCA0MCwgMzIsIDI0LCAxNiwgIDgsICAwLCA1NywgNDksIDQxLCAzMywgMjUsIDE3LCAgCisgICAgIDksICAxLCA1OCwgNTAsIDQyLCAzNCwgMjYsIDE4LCAxMCwgIDIsIDU5LCA1MSwgNDMsIDM1LCAKKyAgICA2MiwgNTQsIDQ2LCAzOCwgMzAsIDIyLCAxNCwgIDYsIDYxLCA1MywgNDUsIDM3LCAyOSwgMjEsCisgICAgMTMsICA1LCA2MCwgNTIsIDQ0LCAzNiwgMjgsIDIwLCAxMiwgIDQsIDI3LCAxOSwgMTEsICAzIAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgdG90cm90WzE2XSA9IHsKKyAgICAxLCAgIDIsICA0LCAgNiwKKyAgICA4LCAgMTAsIDEyLCAxNCwgCisgICAgMTUsIDE3LCAxOSwgMjEsIAorICAgIDIzLCAyNSwgMjcsIDI4Cit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBwYzJbNDhdID0geworICAgIDEzLCAxNiwgMTAsIDIzLCAgMCwgIDQsICAgICAgMiwgMjcsIDE0LCAgNSwgMjAsICA5LAorICAgIDIyLCAxOCwgMTEsICAzLCAyNSwgIDcsICAgICAxNSwgIDYsIDI2LCAxOSwgMTIsICAxLAorICAgIDQwLCA1MSwgMzAsIDM2LCA0NiwgNTQsICAgICAyOSwgMzksIDUwLCA0NCwgMzIsIDQ3LAorICAgIDQzLCA0OCwgMzgsIDU1LCAzMywgNTIsICAgICA0NSwgNDEsIDQ5LCAzNSwgMjgsIDMxCit9OworCisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFNQMVs2NF0gPQoreworICAgIDB4MDEwMTA0MDBVTCwgMHgwMDAwMDAwMFVMLCAweDAwMDEwMDAwVUwsIDB4MDEwMTA0MDRVTCwKKyAgICAweDAxMDEwMDA0VUwsIDB4MDAwMTA0MDRVTCwgMHgwMDAwMDAwNFVMLCAweDAwMDEwMDAwVUwsCisgICAgMHgwMDAwMDQwMFVMLCAweDAxMDEwNDAwVUwsIDB4MDEwMTA0MDRVTCwgMHgwMDAwMDQwMFVMLAorICAgIDB4MDEwMDA0MDRVTCwgMHgwMTAxMDAwNFVMLCAweDAxMDAwMDAwVUwsIDB4MDAwMDAwMDRVTCwKKyAgICAweDAwMDAwNDA0VUwsIDB4MDEwMDA0MDBVTCwgMHgwMTAwMDQwMFVMLCAweDAwMDEwNDAwVUwsCisgICAgMHgwMDAxMDQwMFVMLCAweDAxMDEwMDAwVUwsIDB4MDEwMTAwMDBVTCwgMHgwMTAwMDQwNFVMLAorICAgIDB4MDAwMTAwMDRVTCwgMHgwMTAwMDAwNFVMLCAweDAxMDAwMDA0VUwsIDB4MDAwMTAwMDRVTCwKKyAgICAweDAwMDAwMDAwVUwsIDB4MDAwMDA0MDRVTCwgMHgwMDAxMDQwNFVMLCAweDAxMDAwMDAwVUwsCisgICAgMHgwMDAxMDAwMFVMLCAweDAxMDEwNDA0VUwsIDB4MDAwMDAwMDRVTCwgMHgwMTAxMDAwMFVMLAorICAgIDB4MDEwMTA0MDBVTCwgMHgwMTAwMDAwMFVMLCAweDAxMDAwMDAwVUwsIDB4MDAwMDA0MDBVTCwKKyAgICAweDAxMDEwMDA0VUwsIDB4MDAwMTAwMDBVTCwgMHgwMDAxMDQwMFVMLCAweDAxMDAwMDA0VUwsCisgICAgMHgwMDAwMDQwMFVMLCAweDAwMDAwMDA0VUwsIDB4MDEwMDA0MDRVTCwgMHgwMDAxMDQwNFVMLAorICAgIDB4MDEwMTA0MDRVTCwgMHgwMDAxMDAwNFVMLCAweDAxMDEwMDAwVUwsIDB4MDEwMDA0MDRVTCwKKyAgICAweDAxMDAwMDA0VUwsIDB4MDAwMDA0MDRVTCwgMHgwMDAxMDQwNFVMLCAweDAxMDEwNDAwVUwsCisgICAgMHgwMDAwMDQwNFVMLCAweDAxMDAwNDAwVUwsIDB4MDEwMDA0MDBVTCwgMHgwMDAwMDAwMFVMLAorICAgIDB4MDAwMTAwMDRVTCwgMHgwMDAxMDQwMFVMLCAweDAwMDAwMDAwVUwsIDB4MDEwMTAwMDRVTAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgU1AyWzY0XSA9Cit7CisgICAgMHg4MDEwODAyMFVMLCAweDgwMDA4MDAwVUwsIDB4MDAwMDgwMDBVTCwgMHgwMDEwODAyMFVMLAorICAgIDB4MDAxMDAwMDBVTCwgMHgwMDAwMDAyMFVMLCAweDgwMTAwMDIwVUwsIDB4ODAwMDgwMjBVTCwKKyAgICAweDgwMDAwMDIwVUwsIDB4ODAxMDgwMjBVTCwgMHg4MDEwODAwMFVMLCAweDgwMDAwMDAwVUwsCisgICAgMHg4MDAwODAwMFVMLCAweDAwMTAwMDAwVUwsIDB4MDAwMDAwMjBVTCwgMHg4MDEwMDAyMFVMLAorICAgIDB4MDAxMDgwMDBVTCwgMHgwMDEwMDAyMFVMLCAweDgwMDA4MDIwVUwsIDB4MDAwMDAwMDBVTCwKKyAgICAweDgwMDAwMDAwVUwsIDB4MDAwMDgwMDBVTCwgMHgwMDEwODAyMFVMLCAweDgwMTAwMDAwVUwsCisgICAgMHgwMDEwMDAyMFVMLCAweDgwMDAwMDIwVUwsIDB4MDAwMDAwMDBVTCwgMHgwMDEwODAwMFVMLAorICAgIDB4MDAwMDgwMjBVTCwgMHg4MDEwODAwMFVMLCAweDgwMTAwMDAwVUwsIDB4MDAwMDgwMjBVTCwKKyAgICAweDAwMDAwMDAwVUwsIDB4MDAxMDgwMjBVTCwgMHg4MDEwMDAyMFVMLCAweDAwMTAwMDAwVUwsCisgICAgMHg4MDAwODAyMFVMLCAweDgwMTAwMDAwVUwsIDB4ODAxMDgwMDBVTCwgMHgwMDAwODAwMFVMLAorICAgIDB4ODAxMDAwMDBVTCwgMHg4MDAwODAwMFVMLCAweDAwMDAwMDIwVUwsIDB4ODAxMDgwMjBVTCwKKyAgICAweDAwMTA4MDIwVUwsIDB4MDAwMDAwMjBVTCwgMHgwMDAwODAwMFVMLCAweDgwMDAwMDAwVUwsCisgICAgMHgwMDAwODAyMFVMLCAweDgwMTA4MDAwVUwsIDB4MDAxMDAwMDBVTCwgMHg4MDAwMDAyMFVMLAorICAgIDB4MDAxMDAwMjBVTCwgMHg4MDAwODAyMFVMLCAweDgwMDAwMDIwVUwsIDB4MDAxMDAwMjBVTCwKKyAgICAweDAwMTA4MDAwVUwsIDB4MDAwMDAwMDBVTCwgMHg4MDAwODAwMFVMLCAweDAwMDA4MDIwVUwsCisgICAgMHg4MDAwMDAwMFVMLCAweDgwMTAwMDIwVUwsIDB4ODAxMDgwMjBVTCwgMHgwMDEwODAwMFVMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTUDNbNjRdID0KK3sKKyAgICAweDAwMDAwMjA4VUwsIDB4MDgwMjAyMDBVTCwgMHgwMDAwMDAwMFVMLCAweDA4MDIwMDA4VUwsCisgICAgMHgwODAwMDIwMFVMLCAweDAwMDAwMDAwVUwsIDB4MDAwMjAyMDhVTCwgMHgwODAwMDIwMFVMLAorICAgIDB4MDAwMjAwMDhVTCwgMHgwODAwMDAwOFVMLCAweDA4MDAwMDA4VUwsIDB4MDAwMjAwMDBVTCwKKyAgICAweDA4MDIwMjA4VUwsIDB4MDAwMjAwMDhVTCwgMHgwODAyMDAwMFVMLCAweDAwMDAwMjA4VUwsCisgICAgMHgwODAwMDAwMFVMLCAweDAwMDAwMDA4VUwsIDB4MDgwMjAyMDBVTCwgMHgwMDAwMDIwMFVMLAorICAgIDB4MDAwMjAyMDBVTCwgMHgwODAyMDAwMFVMLCAweDA4MDIwMDA4VUwsIDB4MDAwMjAyMDhVTCwKKyAgICAweDA4MDAwMjA4VUwsIDB4MDAwMjAyMDBVTCwgMHgwMDAyMDAwMFVMLCAweDA4MDAwMjA4VUwsCisgICAgMHgwMDAwMDAwOFVMLCAweDA4MDIwMjA4VUwsIDB4MDAwMDAyMDBVTCwgMHgwODAwMDAwMFVMLAorICAgIDB4MDgwMjAyMDBVTCwgMHgwODAwMDAwMFVMLCAweDAwMDIwMDA4VUwsIDB4MDAwMDAyMDhVTCwKKyAgICAweDAwMDIwMDAwVUwsIDB4MDgwMjAyMDBVTCwgMHgwODAwMDIwMFVMLCAweDAwMDAwMDAwVUwsCisgICAgMHgwMDAwMDIwMFVMLCAweDAwMDIwMDA4VUwsIDB4MDgwMjAyMDhVTCwgMHgwODAwMDIwMFVMLAorICAgIDB4MDgwMDAwMDhVTCwgMHgwMDAwMDIwMFVMLCAweDAwMDAwMDAwVUwsIDB4MDgwMjAwMDhVTCwKKyAgICAweDA4MDAwMjA4VUwsIDB4MDAwMjAwMDBVTCwgMHgwODAwMDAwMFVMLCAweDA4MDIwMjA4VUwsCisgICAgMHgwMDAwMDAwOFVMLCAweDAwMDIwMjA4VUwsIDB4MDAwMjAyMDBVTCwgMHgwODAwMDAwOFVMLAorICAgIDB4MDgwMjAwMDBVTCwgMHgwODAwMDIwOFVMLCAweDAwMDAwMjA4VUwsIDB4MDgwMjAwMDBVTCwKKyAgICAweDAwMDIwMjA4VUwsIDB4MDAwMDAwMDhVTCwgMHgwODAyMDAwOFVMLCAweDAwMDIwMjAwVUwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFNQNFs2NF0gPQoreworICAgIDB4MDA4MDIwMDFVTCwgMHgwMDAwMjA4MVVMLCAweDAwMDAyMDgxVUwsIDB4MDAwMDAwODBVTCwKKyAgICAweDAwODAyMDgwVUwsIDB4MDA4MDAwODFVTCwgMHgwMDgwMDAwMVVMLCAweDAwMDAyMDAxVUwsCisgICAgMHgwMDAwMDAwMFVMLCAweDAwODAyMDAwVUwsIDB4MDA4MDIwMDBVTCwgMHgwMDgwMjA4MVVMLAorICAgIDB4MDAwMDAwODFVTCwgMHgwMDAwMDAwMFVMLCAweDAwODAwMDgwVUwsIDB4MDA4MDAwMDFVTCwKKyAgICAweDAwMDAwMDAxVUwsIDB4MDAwMDIwMDBVTCwgMHgwMDgwMDAwMFVMLCAweDAwODAyMDAxVUwsCisgICAgMHgwMDAwMDA4MFVMLCAweDAwODAwMDAwVUwsIDB4MDAwMDIwMDFVTCwgMHgwMDAwMjA4MFVMLAorICAgIDB4MDA4MDAwODFVTCwgMHgwMDAwMDAwMVVMLCAweDAwMDAyMDgwVUwsIDB4MDA4MDAwODBVTCwKKyAgICAweDAwMDAyMDAwVUwsIDB4MDA4MDIwODBVTCwgMHgwMDgwMjA4MVVMLCAweDAwMDAwMDgxVUwsCisgICAgMHgwMDgwMDA4MFVMLCAweDAwODAwMDAxVUwsIDB4MDA4MDIwMDBVTCwgMHgwMDgwMjA4MVVMLAorICAgIDB4MDAwMDAwODFVTCwgMHgwMDAwMDAwMFVMLCAweDAwMDAwMDAwVUwsIDB4MDA4MDIwMDBVTCwKKyAgICAweDAwMDAyMDgwVUwsIDB4MDA4MDAwODBVTCwgMHgwMDgwMDA4MVVMLCAweDAwMDAwMDAxVUwsCisgICAgMHgwMDgwMjAwMVVMLCAweDAwMDAyMDgxVUwsIDB4MDAwMDIwODFVTCwgMHgwMDAwMDA4MFVMLAorICAgIDB4MDA4MDIwODFVTCwgMHgwMDAwMDA4MVVMLCAweDAwMDAwMDAxVUwsIDB4MDAwMDIwMDBVTCwKKyAgICAweDAwODAwMDAxVUwsIDB4MDAwMDIwMDFVTCwgMHgwMDgwMjA4MFVMLCAweDAwODAwMDgxVUwsCisgICAgMHgwMDAwMjAwMVVMLCAweDAwMDAyMDgwVUwsIDB4MDA4MDAwMDBVTCwgMHgwMDgwMjAwMVVMLAorICAgIDB4MDAwMDAwODBVTCwgMHgwMDgwMDAwMFVMLCAweDAwMDAyMDAwVUwsIDB4MDA4MDIwODBVTAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgU1A1WzY0XSA9Cit7CisgICAgMHgwMDAwMDEwMFVMLCAweDAyMDgwMTAwVUwsIDB4MDIwODAwMDBVTCwgMHg0MjAwMDEwMFVMLAorICAgIDB4MDAwODAwMDBVTCwgMHgwMDAwMDEwMFVMLCAweDQwMDAwMDAwVUwsIDB4MDIwODAwMDBVTCwKKyAgICAweDQwMDgwMTAwVUwsIDB4MDAwODAwMDBVTCwgMHgwMjAwMDEwMFVMLCAweDQwMDgwMTAwVUwsCisgICAgMHg0MjAwMDEwMFVMLCAweDQyMDgwMDAwVUwsIDB4MDAwODAxMDBVTCwgMHg0MDAwMDAwMFVMLAorICAgIDB4MDIwMDAwMDBVTCwgMHg0MDA4MDAwMFVMLCAweDQwMDgwMDAwVUwsIDB4MDAwMDAwMDBVTCwKKyAgICAweDQwMDAwMTAwVUwsIDB4NDIwODAxMDBVTCwgMHg0MjA4MDEwMFVMLCAweDAyMDAwMTAwVUwsCisgICAgMHg0MjA4MDAwMFVMLCAweDQwMDAwMTAwVUwsIDB4MDAwMDAwMDBVTCwgMHg0MjAwMDAwMFVMLAorICAgIDB4MDIwODAxMDBVTCwgMHgwMjAwMDAwMFVMLCAweDQyMDAwMDAwVUwsIDB4MDAwODAxMDBVTCwKKyAgICAweDAwMDgwMDAwVUwsIDB4NDIwMDAxMDBVTCwgMHgwMDAwMDEwMFVMLCAweDAyMDAwMDAwVUwsCisgICAgMHg0MDAwMDAwMFVMLCAweDAyMDgwMDAwVUwsIDB4NDIwMDAxMDBVTCwgMHg0MDA4MDEwMFVMLAorICAgIDB4MDIwMDAxMDBVTCwgMHg0MDAwMDAwMFVMLCAweDQyMDgwMDAwVUwsIDB4MDIwODAxMDBVTCwKKyAgICAweDQwMDgwMTAwVUwsIDB4MDAwMDAxMDBVTCwgMHgwMjAwMDAwMFVMLCAweDQyMDgwMDAwVUwsCisgICAgMHg0MjA4MDEwMFVMLCAweDAwMDgwMTAwVUwsIDB4NDIwMDAwMDBVTCwgMHg0MjA4MDEwMFVMLAorICAgIDB4MDIwODAwMDBVTCwgMHgwMDAwMDAwMFVMLCAweDQwMDgwMDAwVUwsIDB4NDIwMDAwMDBVTCwKKyAgICAweDAwMDgwMTAwVUwsIDB4MDIwMDAxMDBVTCwgMHg0MDAwMDEwMFVMLCAweDAwMDgwMDAwVUwsCisgICAgMHgwMDAwMDAwMFVMLCAweDQwMDgwMDAwVUwsIDB4MDIwODAxMDBVTCwgMHg0MDAwMDEwMFVMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTUDZbNjRdID0KK3sKKyAgICAweDIwMDAwMDEwVUwsIDB4MjA0MDAwMDBVTCwgMHgwMDAwNDAwMFVMLCAweDIwNDA0MDEwVUwsCisgICAgMHgyMDQwMDAwMFVMLCAweDAwMDAwMDEwVUwsIDB4MjA0MDQwMTBVTCwgMHgwMDQwMDAwMFVMLAorICAgIDB4MjAwMDQwMDBVTCwgMHgwMDQwNDAxMFVMLCAweDAwNDAwMDAwVUwsIDB4MjAwMDAwMTBVTCwKKyAgICAweDAwNDAwMDEwVUwsIDB4MjAwMDQwMDBVTCwgMHgyMDAwMDAwMFVMLCAweDAwMDA0MDEwVUwsCisgICAgMHgwMDAwMDAwMFVMLCAweDAwNDAwMDEwVUwsIDB4MjAwMDQwMTBVTCwgMHgwMDAwNDAwMFVMLAorICAgIDB4MDA0MDQwMDBVTCwgMHgyMDAwNDAxMFVMLCAweDAwMDAwMDEwVUwsIDB4MjA0MDAwMTBVTCwKKyAgICAweDIwNDAwMDEwVUwsIDB4MDAwMDAwMDBVTCwgMHgwMDQwNDAxMFVMLCAweDIwNDA0MDAwVUwsCisgICAgMHgwMDAwNDAxMFVMLCAweDAwNDA0MDAwVUwsIDB4MjA0MDQwMDBVTCwgMHgyMDAwMDAwMFVMLAorICAgIDB4MjAwMDQwMDBVTCwgMHgwMDAwMDAxMFVMLCAweDIwNDAwMDEwVUwsIDB4MDA0MDQwMDBVTCwKKyAgICAweDIwNDA0MDEwVUwsIDB4MDA0MDAwMDBVTCwgMHgwMDAwNDAxMFVMLCAweDIwMDAwMDEwVUwsCisgICAgMHgwMDQwMDAwMFVMLCAweDIwMDA0MDAwVUwsIDB4MjAwMDAwMDBVTCwgMHgwMDAwNDAxMFVMLAorICAgIDB4MjAwMDAwMTBVTCwgMHgyMDQwNDAxMFVMLCAweDAwNDA0MDAwVUwsIDB4MjA0MDAwMDBVTCwKKyAgICAweDAwNDA0MDEwVUwsIDB4MjA0MDQwMDBVTCwgMHgwMDAwMDAwMFVMLCAweDIwNDAwMDEwVUwsCisgICAgMHgwMDAwMDAxMFVMLCAweDAwMDA0MDAwVUwsIDB4MjA0MDAwMDBVTCwgMHgwMDQwNDAxMFVMLAorICAgIDB4MDAwMDQwMDBVTCwgMHgwMDQwMDAxMFVMLCAweDIwMDA0MDEwVUwsIDB4MDAwMDAwMDBVTCwKKyAgICAweDIwNDA0MDAwVUwsIDB4MjAwMDAwMDBVTCwgMHgwMDQwMDAxMFVMLCAweDIwMDA0MDEwVUwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIFNQN1s2NF0gPQoreworICAgIDB4MDAyMDAwMDBVTCwgMHgwNDIwMDAwMlVMLCAweDA0MDAwODAyVUwsIDB4MDAwMDAwMDBVTCwKKyAgICAweDAwMDAwODAwVUwsIDB4MDQwMDA4MDJVTCwgMHgwMDIwMDgwMlVMLCAweDA0MjAwODAwVUwsCisgICAgMHgwNDIwMDgwMlVMLCAweDAwMjAwMDAwVUwsIDB4MDAwMDAwMDBVTCwgMHgwNDAwMDAwMlVMLAorICAgIDB4MDAwMDAwMDJVTCwgMHgwNDAwMDAwMFVMLCAweDA0MjAwMDAyVUwsIDB4MDAwMDA4MDJVTCwKKyAgICAweDA0MDAwODAwVUwsIDB4MDAyMDA4MDJVTCwgMHgwMDIwMDAwMlVMLCAweDA0MDAwODAwVUwsCisgICAgMHgwNDAwMDAwMlVMLCAweDA0MjAwMDAwVUwsIDB4MDQyMDA4MDBVTCwgMHgwMDIwMDAwMlVMLAorICAgIDB4MDQyMDAwMDBVTCwgMHgwMDAwMDgwMFVMLCAweDAwMDAwODAyVUwsIDB4MDQyMDA4MDJVTCwKKyAgICAweDAwMjAwODAwVUwsIDB4MDAwMDAwMDJVTCwgMHgwNDAwMDAwMFVMLCAweDAwMjAwODAwVUwsCisgICAgMHgwNDAwMDAwMFVMLCAweDAwMjAwODAwVUwsIDB4MDAyMDAwMDBVTCwgMHgwNDAwMDgwMlVMLAorICAgIDB4MDQwMDA4MDJVTCwgMHgwNDIwMDAwMlVMLCAweDA0MjAwMDAyVUwsIDB4MDAwMDAwMDJVTCwKKyAgICAweDAwMjAwMDAyVUwsIDB4MDQwMDAwMDBVTCwgMHgwNDAwMDgwMFVMLCAweDAwMjAwMDAwVUwsCisgICAgMHgwNDIwMDgwMFVMLCAweDAwMDAwODAyVUwsIDB4MDAyMDA4MDJVTCwgMHgwNDIwMDgwMFVMLAorICAgIDB4MDAwMDA4MDJVTCwgMHgwNDAwMDAwMlVMLCAweDA0MjAwODAyVUwsIDB4MDQyMDAwMDBVTCwKKyAgICAweDAwMjAwODAwVUwsIDB4MDAwMDAwMDBVTCwgMHgwMDAwMDAwMlVMLCAweDA0MjAwODAyVUwsCisgICAgMHgwMDAwMDAwMFVMLCAweDAwMjAwODAyVUwsIDB4MDQyMDAwMDBVTCwgMHgwMDAwMDgwMFVMLAorICAgIDB4MDQwMDAwMDJVTCwgMHgwNDAwMDgwMFVMLCAweDAwMDAwODAwVUwsIDB4MDAyMDAwMDJVTAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgU1A4WzY0XSA9Cit7CisgICAgMHgxMDAwMTA0MFVMLCAweDAwMDAxMDAwVUwsIDB4MDAwNDAwMDBVTCwgMHgxMDA0MTA0MFVMLAorICAgIDB4MTAwMDAwMDBVTCwgMHgxMDAwMTA0MFVMLCAweDAwMDAwMDQwVUwsIDB4MTAwMDAwMDBVTCwKKyAgICAweDAwMDQwMDQwVUwsIDB4MTAwNDAwMDBVTCwgMHgxMDA0MTA0MFVMLCAweDAwMDQxMDAwVUwsCisgICAgMHgxMDA0MTAwMFVMLCAweDAwMDQxMDQwVUwsIDB4MDAwMDEwMDBVTCwgMHgwMDAwMDA0MFVMLAorICAgIDB4MTAwNDAwMDBVTCwgMHgxMDAwMDA0MFVMLCAweDEwMDAxMDAwVUwsIDB4MDAwMDEwNDBVTCwKKyAgICAweDAwMDQxMDAwVUwsIDB4MDAwNDAwNDBVTCwgMHgxMDA0MDA0MFVMLCAweDEwMDQxMDAwVUwsCisgICAgMHgwMDAwMTA0MFVMLCAweDAwMDAwMDAwVUwsIDB4MDAwMDAwMDBVTCwgMHgxMDA0MDA0MFVMLAorICAgIDB4MTAwMDAwNDBVTCwgMHgxMDAwMTAwMFVMLCAweDAwMDQxMDQwVUwsIDB4MDAwNDAwMDBVTCwKKyAgICAweDAwMDQxMDQwVUwsIDB4MDAwNDAwMDBVTCwgMHgxMDA0MTAwMFVMLCAweDAwMDAxMDAwVUwsCisgICAgMHgwMDAwMDA0MFVMLCAweDEwMDQwMDQwVUwsIDB4MDAwMDEwMDBVTCwgMHgwMDA0MTA0MFVMLAorICAgIDB4MTAwMDEwMDBVTCwgMHgwMDAwMDA0MFVMLCAweDEwMDAwMDQwVUwsIDB4MTAwNDAwMDBVTCwKKyAgICAweDEwMDQwMDQwVUwsIDB4MTAwMDAwMDBVTCwgMHgwMDA0MDAwMFVMLCAweDEwMDAxMDQwVUwsCisgICAgMHgwMDAwMDAwMFVMLCAweDEwMDQxMDQwVUwsIDB4MDAwNDAwNDBVTCwgMHgxMDAwMDA0MFVMLAorICAgIDB4MTAwNDAwMDBVTCwgMHgxMDAwMTAwMFVMLCAweDEwMDAxMDQwVUwsIDB4MDAwMDAwMDBVTCwKKyAgICAweDEwMDQxMDQwVUwsIDB4MDAwNDEwMDBVTCwgMHgwMDA0MTAwMFVMLCAweDAwMDAxMDQwVUwsCisgICAgMHgwMDAwMTA0MFVMLCAweDAwMDQwMDQwVUwsIDB4MTAwMDAwMDBVTCwgMHgxMDA0MTAwMFVMCit9OworCisjaWZuZGVmIExUQ19TTUFMTF9DT0RFCisKK3N0YXRpYyBjb25zdCB1bG9uZzY0IGRlc19pcFs4XVsyNTZdID0geworCit7IENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDEwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAxMCksIENPTlNUNjQoMHgwMDAwMDAxMDAwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAxMDEwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDEwMDAwMDAwMDAxMCksIENPTlNUNjQoMHgwMDAwMTAxMDAwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDEwMDAwMDEwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMTAxMCksIENPTlNUNjQoMHgwMDAwMDAxMDAwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDAwMDAxMDEwMDAwMDEwMDApLCBDT05TVDY0KDB4MDAwMDEwMDAwMDAwMTAxMCksIENPTlNUNjQoMHgwMDAwMTAxMDAwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMTAwMDEwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAxMDAwMDAwMDAwMDAxMCksIENPTlNUNjQoMHgwMDEwMDAxMDAwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMTAxMDEwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAxMDEwMDAwMDAwMDAxMCksIENPTlNUNjQoMHgwMDEwMTAxMDAwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDAwMTAwMDEwMDAwMDEwMDApLCBDT05TVDY0KDB4MDAxMDAwMDAwMDAwMTAxMCksIENPTlNUNjQoMHgwMDEwMDAxMDAwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDAwMTAxMDEwMDAwMDEwMDApLCBDT05TVDY0KDB4MDAxMDEwMDAwMDAwMTAxMCksIENPTlNUNjQoMHgwMDEwMTAxMDAwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDEwMDAxMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDEwMDAxMCksIENPTlNUNjQoMHgwMDAwMDAxMDAwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDAwMDAxMDEwMDAxMDAwMDApLCBDT05TVDY0KDB4MDAwMDEwMDAwMDEwMDAxMCksIENPTlNUNjQoMHgwMDAwMTAxMDAwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDEwMDAxMDEwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDEwMTAxMCksIENPTlNUNjQoMHgwMDAwMDAxMDAwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDAwMDAxMDEwMDAxMDEwMDApLCBDT05TVDY0KDB4MDAwMDEwMDAwMDEwMTAxMCksIENPTlNUNjQoMHgwMDAwMTAxMDAwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDAwMTAwMDEwMDAxMDAwMDApLCBDT05TVDY0KDB4MDAxMDAwMDAwMDEwMDAxMCksIENPTlNUNjQoMHgwMDEwMDAxMDAwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDAwMTAxMDEwMDAxMDAwMDApLCBDT05TVDY0KDB4MDAxMDEwMDAwMDEwMDAxMCksIENPTlNUNjQoMHgwMDEwMTAxMDAwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDAwMTAwMDEwMDAxMDEwMDApLCBDT05TVDY0KDB4MDAxMDAwMDAwMDEwMTAxMCksIENPTlNUNjQoMHgwMDEwMDAxMDAwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDAwMTAxMDEwMDAxMDEwMDApLCBDT05TVDY0KDB4MDAxMDEwMDAwMDEwMTAxMCksIENPTlNUNjQoMHgwMDEwMTAxMDAwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDEwMDAwMDEwMDAwMDAwMDApLCBDT05TVDY0KDB4MTAwMDAwMDAwMDAwMDAxMCksIENPTlNUNjQoMHgxMDAwMDAxMDAwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDEwMDAxMDEwMDAwMDAwMDApLCBDT05TVDY0KDB4MTAwMDEwMDAwMDAwMDAxMCksIENPTlNUNjQoMHgxMDAwMTAxMDAwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDEwMDAwMDEwMDAwMDEwMDApLCBDT05TVDY0KDB4MTAwMDAwMDAwMDAwMTAxMCksIENPTlNUNjQoMHgxMDAwMDAxMDAwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDEwMDAxMDEwMDAwMDEwMDApLCBDT05TVDY0KDB4MTAwMDEwMDAwMDAwMTAxMCksIENPTlNUNjQoMHgxMDAwMTAxMDAwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDEwMTAwMDEwMDAwMDAwMDApLCBDT05TVDY0KDB4MTAxMDAwMDAwMDAwMDAxMCksIENPTlNUNjQoMHgxMDEwMDAxMDAwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDEwMTAxMDEwMDAwMDAwMDApLCBDT05TVDY0KDB4MTAxMDEwMDAwMDAwMDAxMCksIENPTlNUNjQoMHgxMDEwMTAxMDAwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDEwMTAwMDEwMDAwMDEwMDApLCBDT05TVDY0KDB4MTAxMDAwMDAwMDAwMTAxMCksIENPTlNUNjQoMHgxMDEwMDAxMDAwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDEwMTAxMDEwMDAwMDEwMDApLCBDT05TVDY0KDB4MTAxMDEwMDAwMDAwMTAxMCksIENPTlNUNjQoMHgxMDEwMTAxMDAwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDEwMDAwMDEwMDAxMDAwMDApLCBDT05TVDY0KDB4MTAwMDAwMDAwMDEwMDAxMCksIENPTlNUNjQoMHgxMDAwMDAxMDAwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDEwMDAxMDEwMDAxMDAwMDApLCBDT05TVDY0KDB4MTAwMDEwMDAwMDEwMDAxMCksIENPTlNUNjQoMHgxMDAwMTAxMDAwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDEwMDAwMDEwMDAxMDEwMDApLCBDT05TVDY0KDB4MTAwMDAwMDAwMDEwMTAxMCksIENPTlNUNjQoMHgxMDAwMDAxMDAwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDEwMDAxMDEwMDAxMDEwMDApLCBDT05TVDY0KDB4MTAwMDEwMDAwMDEwMTAxMCksIENPTlNUNjQoMHgxMDAwMTAxMDAwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDEwMTAwMDEwMDAxMDAwMDApLCBDT05TVDY0KDB4MTAxMDAwMDAwMDEwMDAxMCksIENPTlNUNjQoMHgxMDEwMDAxMDAwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDEwMTAxMDEwMDAxMDAwMDApLCBDT05TVDY0KDB4MTAxMDEwMDAwMDEwMDAxMCksIENPTlNUNjQoMHgxMDEwMTAxMDAwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDEwMTAwMDEwMDAxMDEwMDApLCBDT05TVDY0KDB4MTAxMDAwMDAwMDEwMTAxMCksIENPTlNUNjQoMHgxMDEwMDAxMDAwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDEwMTAxMDEwMDAxMDEwMDApLCBDT05TVDY0KDB4MTAxMDEwMDAwMDEwMTAxMCksIENPTlNUNjQoMHgxMDEwMTAxMDAwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDEwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDEwMTAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgwMDAwMDAxMDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDEwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAxMDEwMTAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDEwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgwMDAwMTAxMDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDEwMDAxMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDEwMTAwMDEwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgwMDAwMDAxMDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDEwMDAxMDAwKSwgQ09OU1Q2NCgweDAwMDAxMDEwMTAwMDEwMDApLCBDT05TVDY0KDB4MDAwMDEwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgwMDAwMTAxMDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDEwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMTAwMDEwMTAwMDAwMDApLCBDT05TVDY0KDB4MDAxMDAwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgwMDEwMDAxMDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDEwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMTAxMDEwMTAwMDAwMDApLCBDT05TVDY0KDB4MDAxMDEwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgwMDEwMTAxMDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDEwMDAxMDAwKSwgQ09OU1Q2NCgweDAwMTAwMDEwMTAwMDEwMDApLCBDT05TVDY0KDB4MDAxMDAwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgwMDEwMDAxMDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDEwMDAxMDAwKSwgQ09OU1Q2NCgweDAwMTAxMDEwMTAwMDEwMDApLCBDT05TVDY0KDB4MDAxMDEwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgwMDEwMTAxMDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDEwMTAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDEwMTAxMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgwMDAwMDAxMDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDEwMTAwMDAwKSwgQ09OU1Q2NCgweDAwMDAxMDEwMTAxMDAwMDApLCBDT05TVDY0KDB4MDAwMDEwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgwMDAwMTAxMDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDEwMTAxMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDEwMTAxMDEwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgwMDAwMDAxMDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDEwMTAxMDAwKSwgQ09OU1Q2NCgweDAwMDAxMDEwMTAxMDEwMDApLCBDT05TVDY0KDB4MDAwMDEwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgwMDAwMTAxMDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDEwMTAwMDAwKSwgQ09OU1Q2NCgweDAwMTAwMDEwMTAxMDAwMDApLCBDT05TVDY0KDB4MDAxMDAwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgwMDEwMDAxMDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDEwMTAwMDAwKSwgQ09OU1Q2NCgweDAwMTAxMDEwMTAxMDAwMDApLCBDT05TVDY0KDB4MDAxMDEwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgwMDEwMTAxMDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDEwMTAxMDAwKSwgQ09OU1Q2NCgweDAwMTAwMDEwMTAxMDEwMDApLCBDT05TVDY0KDB4MDAxMDAwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgwMDEwMDAxMDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDEwMTAxMDAwKSwgQ09OU1Q2NCgweDAwMTAxMDEwMTAxMDEwMDApLCBDT05TVDY0KDB4MDAxMDEwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgwMDEwMTAxMDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDEwMDAwMDAwKSwgQ09OU1Q2NCgweDEwMDAwMDEwMTAwMDAwMDApLCBDT05TVDY0KDB4MTAwMDAwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgxMDAwMDAxMDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDEwMDAwMDAwKSwgQ09OU1Q2NCgweDEwMDAxMDEwMTAwMDAwMDApLCBDT05TVDY0KDB4MTAwMDEwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgxMDAwMTAxMDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDEwMDAxMDAwKSwgQ09OU1Q2NCgweDEwMDAwMDEwMTAwMDEwMDApLCBDT05TVDY0KDB4MTAwMDAwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgxMDAwMDAxMDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDEwMDAxMDAwKSwgQ09OU1Q2NCgweDEwMDAxMDEwMTAwMDEwMDApLCBDT05TVDY0KDB4MTAwMDEwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgxMDAwMTAxMDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDEwMDAwMDAwKSwgQ09OU1Q2NCgweDEwMTAwMDEwMTAwMDAwMDApLCBDT05TVDY0KDB4MTAxMDAwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgxMDEwMDAxMDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDEwMDAwMDAwKSwgQ09OU1Q2NCgweDEwMTAxMDEwMTAwMDAwMDApLCBDT05TVDY0KDB4MTAxMDEwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgxMDEwMTAxMDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDEwMDAxMDAwKSwgQ09OU1Q2NCgweDEwMTAwMDEwMTAwMDEwMDApLCBDT05TVDY0KDB4MTAxMDAwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgxMDEwMDAxMDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDEwMDAxMDAwKSwgQ09OU1Q2NCgweDEwMTAxMDEwMTAwMDEwMDApLCBDT05TVDY0KDB4MTAxMDEwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgxMDEwMTAxMDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDEwMTAwMDAwKSwgQ09OU1Q2NCgweDEwMDAwMDEwMTAxMDAwMDApLCBDT05TVDY0KDB4MTAwMDAwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgxMDAwMDAxMDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDEwMTAwMDAwKSwgQ09OU1Q2NCgweDEwMDAxMDEwMTAxMDAwMDApLCBDT05TVDY0KDB4MTAwMDEwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgxMDAwMTAxMDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDEwMTAxMDAwKSwgQ09OU1Q2NCgweDEwMDAwMDEwMTAxMDEwMDApLCBDT05TVDY0KDB4MTAwMDAwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgxMDAwMDAxMDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDEwMTAxMDAwKSwgQ09OU1Q2NCgweDEwMDAxMDEwMTAxMDEwMDApLCBDT05TVDY0KDB4MTAwMDEwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgxMDAwMTAxMDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDEwMTAwMDAwKSwgQ09OU1Q2NCgweDEwMTAwMDEwMTAxMDAwMDApLCBDT05TVDY0KDB4MTAxMDAwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgxMDEwMDAxMDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDEwMTAwMDAwKSwgQ09OU1Q2NCgweDEwMTAxMDEwMTAxMDAwMDApLCBDT05TVDY0KDB4MTAxMDEwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgxMDEwMTAxMDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDEwMTAxMDAwKSwgQ09OU1Q2NCgweDEwMTAwMDEwMTAxMDEwMDApLCBDT05TVDY0KDB4MTAxMDAwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgxMDEwMDAxMDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDEwMTAxMDAwKSwgQ09OU1Q2NCgweDEwMTAxMDEwMTAxMDEwMDApLCBDT05TVDY0KDB4MTAxMDEwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgxMDEwMTAxMDEwMTAxMDEwKQorICB9LCAKK3sgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDgwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDA4KSwgQ09OU1Q2NCgweDAwMDAwMDA4MDAwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDA4MDgwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDgwMDAwMDAwMDA4KSwgQ09OU1Q2NCgweDAwMDAwODA4MDAwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDAwMDAwMDgwMDAwMDgwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwODA4KSwgQ09OU1Q2NCgweDAwMDAwMDA4MDAwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDAwMDA4MDgwMDAwMDgwMCksIENPTlNUNjQoMHgwMDAwMDgwMDAwMDAwODA4KSwgQ09OU1Q2NCgweDAwMDAwODA4MDAwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwODAwMDgwMDAwMDAwMCksIENPTlNUNjQoMHgwMDA4MDAwMDAwMDAwMDA4KSwgQ09OU1Q2NCgweDAwMDgwMDA4MDAwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwODA4MDgwMDAwMDAwMCksIENPTlNUNjQoMHgwMDA4MDgwMDAwMDAwMDA4KSwgQ09OU1Q2NCgweDAwMDgwODA4MDAwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDAwODAwMDgwMDAwMDgwMCksIENPTlNUNjQoMHgwMDA4MDAwMDAwMDAwODA4KSwgQ09OU1Q2NCgweDAwMDgwMDA4MDAwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDAwODA4MDgwMDAwMDgwMCksIENPTlNUNjQoMHgwMDA4MDgwMDAwMDAwODA4KSwgQ09OU1Q2NCgweDAwMDgwODA4MDAwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwODAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDgwMDA4MDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDgwMDA4KSwgQ09OU1Q2NCgweDAwMDAwMDA4MDAwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDAwODAwMDApLCBDT05TVDY0KDB4MDAwMDA4MDgwMDA4MDAwMCksIENPTlNUNjQoMHgwMDAwMDgwMDAwMDgwMDA4KSwgQ09OU1Q2NCgweDAwMDAwODA4MDAwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwODA4MDApLCBDT05TVDY0KDB4MDAwMDAwMDgwMDA4MDgwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDgwODA4KSwgQ09OU1Q2NCgweDAwMDAwMDA4MDAwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDAwODA4MDApLCBDT05TVDY0KDB4MDAwMDA4MDgwMDA4MDgwMCksIENPTlNUNjQoMHgwMDAwMDgwMDAwMDgwODA4KSwgQ09OU1Q2NCgweDAwMDAwODA4MDAwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDAwODAwMDApLCBDT05TVDY0KDB4MDAwODAwMDgwMDA4MDAwMCksIENPTlNUNjQoMHgwMDA4MDAwMDAwMDgwMDA4KSwgQ09OU1Q2NCgweDAwMDgwMDA4MDAwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDAwODAwMDApLCBDT05TVDY0KDB4MDAwODA4MDgwMDA4MDAwMCksIENPTlNUNjQoMHgwMDA4MDgwMDAwMDgwMDA4KSwgQ09OU1Q2NCgweDAwMDgwODA4MDAwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDAwODA4MDApLCBDT05TVDY0KDB4MDAwODAwMDgwMDA4MDgwMCksIENPTlNUNjQoMHgwMDA4MDAwMDAwMDgwODA4KSwgQ09OU1Q2NCgweDAwMDgwMDA4MDAwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDAwODA4MDApLCBDT05TVDY0KDB4MDAwODA4MDgwMDA4MDgwMCksIENPTlNUNjQoMHgwMDA4MDgwMDAwMDgwODA4KSwgQ09OU1Q2NCgweDAwMDgwODA4MDAwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDgwMDAwMDgwMDAwMDAwMCksIENPTlNUNjQoMHgwODAwMDAwMDAwMDAwMDA4KSwgQ09OU1Q2NCgweDA4MDAwMDA4MDAwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDgwMDA4MDgwMDAwMDAwMCksIENPTlNUNjQoMHgwODAwMDgwMDAwMDAwMDA4KSwgQ09OU1Q2NCgweDA4MDAwODA4MDAwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDgwMDAwMDgwMDAwMDgwMCksIENPTlNUNjQoMHgwODAwMDAwMDAwMDAwODA4KSwgQ09OU1Q2NCgweDA4MDAwMDA4MDAwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDgwMDA4MDgwMDAwMDgwMCksIENPTlNUNjQoMHgwODAwMDgwMDAwMDAwODA4KSwgQ09OU1Q2NCgweDA4MDAwODA4MDAwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDgwODAwMDgwMDAwMDAwMCksIENPTlNUNjQoMHgwODA4MDAwMDAwMDAwMDA4KSwgQ09OU1Q2NCgweDA4MDgwMDA4MDAwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDgwODA4MDgwMDAwMDAwMCksIENPTlNUNjQoMHgwODA4MDgwMDAwMDAwMDA4KSwgQ09OU1Q2NCgweDA4MDgwODA4MDAwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDgwODAwMDgwMDAwMDgwMCksIENPTlNUNjQoMHgwODA4MDAwMDAwMDAwODA4KSwgQ09OU1Q2NCgweDA4MDgwMDA4MDAwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDgwODA4MDgwMDAwMDgwMCksIENPTlNUNjQoMHgwODA4MDgwMDAwMDAwODA4KSwgQ09OU1Q2NCgweDA4MDgwODA4MDAwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDAwODAwMDApLCBDT05TVDY0KDB4MDgwMDAwMDgwMDA4MDAwMCksIENPTlNUNjQoMHgwODAwMDAwMDAwMDgwMDA4KSwgQ09OU1Q2NCgweDA4MDAwMDA4MDAwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDAwODAwMDApLCBDT05TVDY0KDB4MDgwMDA4MDgwMDA4MDAwMCksIENPTlNUNjQoMHgwODAwMDgwMDAwMDgwMDA4KSwgQ09OU1Q2NCgweDA4MDAwODA4MDAwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDAwODA4MDApLCBDT05TVDY0KDB4MDgwMDAwMDgwMDA4MDgwMCksIENPTlNUNjQoMHgwODAwMDAwMDAwMDgwODA4KSwgQ09OU1Q2NCgweDA4MDAwMDA4MDAwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDAwODA4MDApLCBDT05TVDY0KDB4MDgwMDA4MDgwMDA4MDgwMCksIENPTlNUNjQoMHgwODAwMDgwMDAwMDgwODA4KSwgQ09OU1Q2NCgweDA4MDAwODA4MDAwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDAwODAwMDApLCBDT05TVDY0KDB4MDgwODAwMDgwMDA4MDAwMCksIENPTlNUNjQoMHgwODA4MDAwMDAwMDgwMDA4KSwgQ09OU1Q2NCgweDA4MDgwMDA4MDAwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDAwODAwMDApLCBDT05TVDY0KDB4MDgwODA4MDgwMDA4MDAwMCksIENPTlNUNjQoMHgwODA4MDgwMDAwMDgwMDA4KSwgQ09OU1Q2NCgweDA4MDgwODA4MDAwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDAwODA4MDApLCBDT05TVDY0KDB4MDgwODAwMDgwMDA4MDgwMCksIENPTlNUNjQoMHgwODA4MDAwMDAwMDgwODA4KSwgQ09OU1Q2NCgweDA4MDgwMDA4MDAwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDAwODA4MDApLCBDT05TVDY0KDB4MDgwODA4MDgwMDA4MDgwMCksIENPTlNUNjQoMHgwODA4MDgwMDAwMDgwODA4KSwgQ09OU1Q2NCgweDA4MDgwODA4MDAwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDgwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDgwODAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDAwMDAwMDA4MDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDgwMDAwMDApLCBDT05TVDY0KDB4MDAwMDA4MDgwODAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDgwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDAwMDAwODA4MDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDgwMDA4MDApLCBDT05TVDY0KDB4MDAwMDAwMDgwODAwMDgwMCksIENPTlNUNjQoMHgwMDAwMDAwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDAwMDAwMDA4MDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDgwMDA4MDApLCBDT05TVDY0KDB4MDAwMDA4MDgwODAwMDgwMCksIENPTlNUNjQoMHgwMDAwMDgwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDAwMDAwODA4MDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDgwMDAwMDApLCBDT05TVDY0KDB4MDAwODAwMDgwODAwMDAwMCksIENPTlNUNjQoMHgwMDA4MDAwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDAwMDgwMDA4MDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDgwMDAwMDApLCBDT05TVDY0KDB4MDAwODA4MDgwODAwMDAwMCksIENPTlNUNjQoMHgwMDA4MDgwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDAwMDgwODA4MDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDgwMDA4MDApLCBDT05TVDY0KDB4MDAwODAwMDgwODAwMDgwMCksIENPTlNUNjQoMHgwMDA4MDAwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDAwMDgwMDA4MDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDgwMDA4MDApLCBDT05TVDY0KDB4MDAwODA4MDgwODAwMDgwMCksIENPTlNUNjQoMHgwMDA4MDgwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDAwMDgwODA4MDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDgwODAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDgwODA4MDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDAwMDAwMDA4MDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDgwODAwMDApLCBDT05TVDY0KDB4MDAwMDA4MDgwODA4MDAwMCksIENPTlNUNjQoMHgwMDAwMDgwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDAwMDAwODA4MDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDgwODA4MDApLCBDT05TVDY0KDB4MDAwMDAwMDgwODA4MDgwMCksIENPTlNUNjQoMHgwMDAwMDAwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDAwMDAwMDA4MDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDgwODA4MDApLCBDT05TVDY0KDB4MDAwMDA4MDgwODA4MDgwMCksIENPTlNUNjQoMHgwMDAwMDgwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDAwMDAwODA4MDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDgwODAwMDApLCBDT05TVDY0KDB4MDAwODAwMDgwODA4MDAwMCksIENPTlNUNjQoMHgwMDA4MDAwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDAwMDgwMDA4MDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDgwODAwMDApLCBDT05TVDY0KDB4MDAwODA4MDgwODA4MDAwMCksIENPTlNUNjQoMHgwMDA4MDgwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDAwMDgwODA4MDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDgwODA4MDApLCBDT05TVDY0KDB4MDAwODAwMDgwODA4MDgwMCksIENPTlNUNjQoMHgwMDA4MDAwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDAwMDgwMDA4MDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDgwODA4MDApLCBDT05TVDY0KDB4MDAwODA4MDgwODA4MDgwMCksIENPTlNUNjQoMHgwMDA4MDgwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDAwMDgwODA4MDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDgwMDAwMDApLCBDT05TVDY0KDB4MDgwMDAwMDgwODAwMDAwMCksIENPTlNUNjQoMHgwODAwMDAwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDA4MDAwMDA4MDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDgwMDAwMDApLCBDT05TVDY0KDB4MDgwMDA4MDgwODAwMDAwMCksIENPTlNUNjQoMHgwODAwMDgwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDA4MDAwODA4MDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDgwMDA4MDApLCBDT05TVDY0KDB4MDgwMDAwMDgwODAwMDgwMCksIENPTlNUNjQoMHgwODAwMDAwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDA4MDAwMDA4MDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDgwMDA4MDApLCBDT05TVDY0KDB4MDgwMDA4MDgwODAwMDgwMCksIENPTlNUNjQoMHgwODAwMDgwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDA4MDAwODA4MDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDgwMDAwMDApLCBDT05TVDY0KDB4MDgwODAwMDgwODAwMDAwMCksIENPTlNUNjQoMHgwODA4MDAwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDA4MDgwMDA4MDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDgwMDAwMDApLCBDT05TVDY0KDB4MDgwODA4MDgwODAwMDAwMCksIENPTlNUNjQoMHgwODA4MDgwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDA4MDgwODA4MDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDgwMDA4MDApLCBDT05TVDY0KDB4MDgwODAwMDgwODAwMDgwMCksIENPTlNUNjQoMHgwODA4MDAwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDA4MDgwMDA4MDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDgwMDA4MDApLCBDT05TVDY0KDB4MDgwODA4MDgwODAwMDgwMCksIENPTlNUNjQoMHgwODA4MDgwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDA4MDgwODA4MDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDgwODAwMDApLCBDT05TVDY0KDB4MDgwMDAwMDgwODA4MDAwMCksIENPTlNUNjQoMHgwODAwMDAwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDA4MDAwMDA4MDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDgwODAwMDApLCBDT05TVDY0KDB4MDgwMDA4MDgwODA4MDAwMCksIENPTlNUNjQoMHgwODAwMDgwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDA4MDAwODA4MDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDgwODA4MDApLCBDT05TVDY0KDB4MDgwMDAwMDgwODA4MDgwMCksIENPTlNUNjQoMHgwODAwMDAwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDA4MDAwMDA4MDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDgwODA4MDApLCBDT05TVDY0KDB4MDgwMDA4MDgwODA4MDgwMCksIENPTlNUNjQoMHgwODAwMDgwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDA4MDAwODA4MDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDgwODAwMDApLCBDT05TVDY0KDB4MDgwODAwMDgwODA4MDAwMCksIENPTlNUNjQoMHgwODA4MDAwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDA4MDgwMDA4MDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDgwODAwMDApLCBDT05TVDY0KDB4MDgwODA4MDgwODA4MDAwMCksIENPTlNUNjQoMHgwODA4MDgwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDA4MDgwODA4MDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDgwODA4MDApLCBDT05TVDY0KDB4MDgwODAwMDgwODA4MDgwMCksIENPTlNUNjQoMHgwODA4MDAwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDA4MDgwMDA4MDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDgwODA4MDApLCBDT05TVDY0KDB4MDgwODA4MDgwODA4MDgwMCksIENPTlNUNjQoMHgwODA4MDgwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDA4MDgwODA4MDgwODA4MDgpCisgIH0sIAoreyBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwNDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwMDQpLCBDT05TVDY0KDB4MDAwMDAwMDQwMDAwMDAwNCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDQwNDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwNDAwMDAwMDAwMDQpLCBDT05TVDY0KDB4MDAwMDA0MDQwMDAwMDAwNCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDQwMCksIENPTlNUNjQoMHgwMDAwMDAwNDAwMDAwNDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDA0MDQpLCBDT05TVDY0KDB4MDAwMDAwMDQwMDAwMDQwNCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwMDAwMDQwMCksIENPTlNUNjQoMHgwMDAwMDQwNDAwMDAwNDAwKSwgQ09OU1Q2NCgweDAwMDAwNDAwMDAwMDA0MDQpLCBDT05TVDY0KDB4MDAwMDA0MDQwMDAwMDQwNCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDA0MDAwNDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDQwMDAwMDAwMDAwMDQpLCBDT05TVDY0KDB4MDAwNDAwMDQwMDAwMDAwNCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDA0MDQwNDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDQwNDAwMDAwMDAwMDQpLCBDT05TVDY0KDB4MDAwNDA0MDQwMDAwMDAwNCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwMDAwMDQwMCksIENPTlNUNjQoMHgwMDA0MDAwNDAwMDAwNDAwKSwgQ09OU1Q2NCgweDAwMDQwMDAwMDAwMDA0MDQpLCBDT05TVDY0KDB4MDAwNDAwMDQwMDAwMDQwNCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwMDAwMDQwMCksIENPTlNUNjQoMHgwMDA0MDQwNDAwMDAwNDAwKSwgQ09OU1Q2NCgweDAwMDQwNDAwMDAwMDA0MDQpLCBDT05TVDY0KDB4MDAwNDA0MDQwMDAwMDQwNCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDA0MDAwMCksIENPTlNUNjQoMHgwMDAwMDAwNDAwMDQwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDAwNDAwMDQpLCBDT05TVDY0KDB4MDAwMDAwMDQwMDA0MDAwNCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwMDA0MDAwMCksIENPTlNUNjQoMHgwMDAwMDQwNDAwMDQwMDAwKSwgQ09OU1Q2NCgweDAwMDAwNDAwMDAwNDAwMDQpLCBDT05TVDY0KDB4MDAwMDA0MDQwMDA0MDAwNCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDA0MDQwMCksIENPTlNUNjQoMHgwMDAwMDAwNDAwMDQwNDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDAwNDA0MDQpLCBDT05TVDY0KDB4MDAwMDAwMDQwMDA0MDQwNCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwMDA0MDQwMCksIENPTlNUNjQoMHgwMDAwMDQwNDAwMDQwNDAwKSwgQ09OU1Q2NCgweDAwMDAwNDAwMDAwNDA0MDQpLCBDT05TVDY0KDB4MDAwMDA0MDQwMDA0MDQwNCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwMDA0MDAwMCksIENPTlNUNjQoMHgwMDA0MDAwNDAwMDQwMDAwKSwgQ09OU1Q2NCgweDAwMDQwMDAwMDAwNDAwMDQpLCBDT05TVDY0KDB4MDAwNDAwMDQwMDA0MDAwNCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwMDA0MDAwMCksIENPTlNUNjQoMHgwMDA0MDQwNDAwMDQwMDAwKSwgQ09OU1Q2NCgweDAwMDQwNDAwMDAwNDAwMDQpLCBDT05TVDY0KDB4MDAwNDA0MDQwMDA0MDAwNCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwMDA0MDQwMCksIENPTlNUNjQoMHgwMDA0MDAwNDAwMDQwNDAwKSwgQ09OU1Q2NCgweDAwMDQwMDAwMDAwNDA0MDQpLCBDT05TVDY0KDB4MDAwNDAwMDQwMDA0MDQwNCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwMDA0MDQwMCksIENPTlNUNjQoMHgwMDA0MDQwNDAwMDQwNDAwKSwgQ09OU1Q2NCgweDAwMDQwNDAwMDAwNDA0MDQpLCBDT05TVDY0KDB4MDAwNDA0MDQwMDA0MDQwNCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwNDAwMDAwNDAwMDAwMDAwKSwgQ09OU1Q2NCgweDA0MDAwMDAwMDAwMDAwMDQpLCBDT05TVDY0KDB4MDQwMDAwMDQwMDAwMDAwNCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwMDAwMDAwMCksIENPTlNUNjQoMHgwNDAwMDQwNDAwMDAwMDAwKSwgQ09OU1Q2NCgweDA0MDAwNDAwMDAwMDAwMDQpLCBDT05TVDY0KDB4MDQwMDA0MDQwMDAwMDAwNCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwMDAwMDQwMCksIENPTlNUNjQoMHgwNDAwMDAwNDAwMDAwNDAwKSwgQ09OU1Q2NCgweDA0MDAwMDAwMDAwMDA0MDQpLCBDT05TVDY0KDB4MDQwMDAwMDQwMDAwMDQwNCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwMDAwMDQwMCksIENPTlNUNjQoMHgwNDAwMDQwNDAwMDAwNDAwKSwgQ09OU1Q2NCgweDA0MDAwNDAwMDAwMDA0MDQpLCBDT05TVDY0KDB4MDQwMDA0MDQwMDAwMDQwNCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwNDA0MDAwNDAwMDAwMDAwKSwgQ09OU1Q2NCgweDA0MDQwMDAwMDAwMDAwMDQpLCBDT05TVDY0KDB4MDQwNDAwMDQwMDAwMDAwNCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwMDAwMDAwMCksIENPTlNUNjQoMHgwNDA0MDQwNDAwMDAwMDAwKSwgQ09OU1Q2NCgweDA0MDQwNDAwMDAwMDAwMDQpLCBDT05TVDY0KDB4MDQwNDA0MDQwMDAwMDAwNCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwMDAwMDQwMCksIENPTlNUNjQoMHgwNDA0MDAwNDAwMDAwNDAwKSwgQ09OU1Q2NCgweDA0MDQwMDAwMDAwMDA0MDQpLCBDT05TVDY0KDB4MDQwNDAwMDQwMDAwMDQwNCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwMDAwMDQwMCksIENPTlNUNjQoMHgwNDA0MDQwNDAwMDAwNDAwKSwgQ09OU1Q2NCgweDA0MDQwNDAwMDAwMDA0MDQpLCBDT05TVDY0KDB4MDQwNDA0MDQwMDAwMDQwNCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwMDA0MDAwMCksIENPTlNUNjQoMHgwNDAwMDAwNDAwMDQwMDAwKSwgQ09OU1Q2NCgweDA0MDAwMDAwMDAwNDAwMDQpLCBDT05TVDY0KDB4MDQwMDAwMDQwMDA0MDAwNCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwMDA0MDAwMCksIENPTlNUNjQoMHgwNDAwMDQwNDAwMDQwMDAwKSwgQ09OU1Q2NCgweDA0MDAwNDAwMDAwNDAwMDQpLCBDT05TVDY0KDB4MDQwMDA0MDQwMDA0MDAwNCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwMDA0MDQwMCksIENPTlNUNjQoMHgwNDAwMDAwNDAwMDQwNDAwKSwgQ09OU1Q2NCgweDA0MDAwMDAwMDAwNDA0MDQpLCBDT05TVDY0KDB4MDQwMDAwMDQwMDA0MDQwNCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwMDA0MDQwMCksIENPTlNUNjQoMHgwNDAwMDQwNDAwMDQwNDAwKSwgQ09OU1Q2NCgweDA0MDAwNDAwMDAwNDA0MDQpLCBDT05TVDY0KDB4MDQwMDA0MDQwMDA0MDQwNCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwMDA0MDAwMCksIENPTlNUNjQoMHgwNDA0MDAwNDAwMDQwMDAwKSwgQ09OU1Q2NCgweDA0MDQwMDAwMDAwNDAwMDQpLCBDT05TVDY0KDB4MDQwNDAwMDQwMDA0MDAwNCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwMDA0MDAwMCksIENPTlNUNjQoMHgwNDA0MDQwNDAwMDQwMDAwKSwgQ09OU1Q2NCgweDA0MDQwNDAwMDAwNDAwMDQpLCBDT05TVDY0KDB4MDQwNDA0MDQwMDA0MDAwNCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwMDA0MDQwMCksIENPTlNUNjQoMHgwNDA0MDAwNDAwMDQwNDAwKSwgQ09OU1Q2NCgweDA0MDQwMDAwMDAwNDA0MDQpLCBDT05TVDY0KDB4MDQwNDAwMDQwMDA0MDQwNCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwMDA0MDQwMCksIENPTlNUNjQoMHgwNDA0MDQwNDAwMDQwNDAwKSwgQ09OU1Q2NCgweDA0MDQwNDAwMDAwNDA0MDQpLCBDT05TVDY0KDB4MDQwNDA0MDQwMDA0MDQwNCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwNDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwNDA0MDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDAwMDAwMDQwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwNDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDQwNDA0MDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwNDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDAwMDA0MDQwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwNDAwMDQwMCksIENPTlNUNjQoMHgwMDAwMDAwNDA0MDAwNDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDAwMDAwMDQwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwNDAwMDQwMCksIENPTlNUNjQoMHgwMDAwMDQwNDA0MDAwNDAwKSwgQ09OU1Q2NCgweDAwMDAwNDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDAwMDA0MDQwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwNDAwMDAwMCksIENPTlNUNjQoMHgwMDA0MDAwNDA0MDAwMDAwKSwgQ09OU1Q2NCgweDAwMDQwMDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDAwNDAwMDQwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwNDAwMDAwMCksIENPTlNUNjQoMHgwMDA0MDQwNDA0MDAwMDAwKSwgQ09OU1Q2NCgweDAwMDQwNDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDAwNDA0MDQwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwNDAwMDQwMCksIENPTlNUNjQoMHgwMDA0MDAwNDA0MDAwNDAwKSwgQ09OU1Q2NCgweDAwMDQwMDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDAwNDAwMDQwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwNDAwMDQwMCksIENPTlNUNjQoMHgwMDA0MDQwNDA0MDAwNDAwKSwgQ09OU1Q2NCgweDAwMDQwNDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDAwNDA0MDQwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwNDA0MDAwMCksIENPTlNUNjQoMHgwMDAwMDAwNDA0MDQwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDAwMDAwMDQwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwNDA0MDAwMCksIENPTlNUNjQoMHgwMDAwMDQwNDA0MDQwMDAwKSwgQ09OU1Q2NCgweDAwMDAwNDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDAwMDA0MDQwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwNDA0MDQwMCksIENPTlNUNjQoMHgwMDAwMDAwNDA0MDQwNDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDAwMDAwMDQwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwNDA0MDQwMCksIENPTlNUNjQoMHgwMDAwMDQwNDA0MDQwNDAwKSwgQ09OU1Q2NCgweDAwMDAwNDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDAwMDA0MDQwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwNDA0MDAwMCksIENPTlNUNjQoMHgwMDA0MDAwNDA0MDQwMDAwKSwgQ09OU1Q2NCgweDAwMDQwMDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDAwNDAwMDQwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwNDA0MDAwMCksIENPTlNUNjQoMHgwMDA0MDQwNDA0MDQwMDAwKSwgQ09OU1Q2NCgweDAwMDQwNDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDAwNDA0MDQwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwNDA0MDQwMCksIENPTlNUNjQoMHgwMDA0MDAwNDA0MDQwNDAwKSwgQ09OU1Q2NCgweDAwMDQwMDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDAwNDAwMDQwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwNDA0MDQwMCksIENPTlNUNjQoMHgwMDA0MDQwNDA0MDQwNDAwKSwgQ09OU1Q2NCgweDAwMDQwNDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDAwNDA0MDQwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwNDAwMDAwMCksIENPTlNUNjQoMHgwNDAwMDAwNDA0MDAwMDAwKSwgQ09OU1Q2NCgweDA0MDAwMDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDQwMDAwMDQwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwNDAwMDAwMCksIENPTlNUNjQoMHgwNDAwMDQwNDA0MDAwMDAwKSwgQ09OU1Q2NCgweDA0MDAwNDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDQwMDA0MDQwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwNDAwMDQwMCksIENPTlNUNjQoMHgwNDAwMDAwNDA0MDAwNDAwKSwgQ09OU1Q2NCgweDA0MDAwMDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDQwMDAwMDQwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwNDAwMDQwMCksIENPTlNUNjQoMHgwNDAwMDQwNDA0MDAwNDAwKSwgQ09OU1Q2NCgweDA0MDAwNDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDQwMDA0MDQwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwNDAwMDAwMCksIENPTlNUNjQoMHgwNDA0MDAwNDA0MDAwMDAwKSwgQ09OU1Q2NCgweDA0MDQwMDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDQwNDAwMDQwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwNDAwMDAwMCksIENPTlNUNjQoMHgwNDA0MDQwNDA0MDAwMDAwKSwgQ09OU1Q2NCgweDA0MDQwNDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDQwNDA0MDQwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwNDAwMDQwMCksIENPTlNUNjQoMHgwNDA0MDAwNDA0MDAwNDAwKSwgQ09OU1Q2NCgweDA0MDQwMDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDQwNDAwMDQwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwNDAwMDQwMCksIENPTlNUNjQoMHgwNDA0MDQwNDA0MDAwNDAwKSwgQ09OU1Q2NCgweDA0MDQwNDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDQwNDA0MDQwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwNDA0MDAwMCksIENPTlNUNjQoMHgwNDAwMDAwNDA0MDQwMDAwKSwgQ09OU1Q2NCgweDA0MDAwMDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDQwMDAwMDQwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwNDA0MDAwMCksIENPTlNUNjQoMHgwNDAwMDQwNDA0MDQwMDAwKSwgQ09OU1Q2NCgweDA0MDAwNDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDQwMDA0MDQwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwNDA0MDQwMCksIENPTlNUNjQoMHgwNDAwMDAwNDA0MDQwNDAwKSwgQ09OU1Q2NCgweDA0MDAwMDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDQwMDAwMDQwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwNDA0MDQwMCksIENPTlNUNjQoMHgwNDAwMDQwNDA0MDQwNDAwKSwgQ09OU1Q2NCgweDA0MDAwNDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDQwMDA0MDQwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwNDA0MDAwMCksIENPTlNUNjQoMHgwNDA0MDAwNDA0MDQwMDAwKSwgQ09OU1Q2NCgweDA0MDQwMDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDQwNDAwMDQwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwNDA0MDAwMCksIENPTlNUNjQoMHgwNDA0MDQwNDA0MDQwMDAwKSwgQ09OU1Q2NCgweDA0MDQwNDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDQwNDA0MDQwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwNDA0MDQwMCksIENPTlNUNjQoMHgwNDA0MDAwNDA0MDQwNDAwKSwgQ09OU1Q2NCgweDA0MDQwMDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDQwNDAwMDQwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwNDA0MDQwMCksIENPTlNUNjQoMHgwNDA0MDQwNDA0MDQwNDAwKSwgQ09OU1Q2NCgweDA0MDQwNDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDQwNDA0MDQwNDA0MDQwNCkKKyAgfSwgCit7IENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAyMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMiksIENPTlNUNjQoMHgwMDAwMDAwMjAwMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMjAyMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAyMDAwMDAwMDAwMiksIENPTlNUNjQoMHgwMDAwMDIwMjAwMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAwMDAwMDAyMDAwMDAyMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDIwMiksIENPTlNUNjQoMHgwMDAwMDAwMjAwMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAwMDAwMjAyMDAwMDAyMDApLCBDT05TVDY0KDB4MDAwMDAyMDAwMDAwMDIwMiksIENPTlNUNjQoMHgwMDAwMDIwMjAwMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDIwMDAyMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMjAwMDAwMDAwMDAwMiksIENPTlNUNjQoMHgwMDAyMDAwMjAwMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDIwMjAyMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMjAyMDAwMDAwMDAwMiksIENPTlNUNjQoMHgwMDAyMDIwMjAwMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAwMDIwMDAyMDAwMDAyMDApLCBDT05TVDY0KDB4MDAwMjAwMDAwMDAwMDIwMiksIENPTlNUNjQoMHgwMDAyMDAwMjAwMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAwMDIwMjAyMDAwMDAyMDApLCBDT05TVDY0KDB4MDAwMjAyMDAwMDAwMDIwMiksIENPTlNUNjQoMHgwMDAyMDIwMjAwMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAyMDAwMjAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAyMDAwMiksIENPTlNUNjQoMHgwMDAwMDAwMjAwMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMjAyMDAwMjAwMDApLCBDT05TVDY0KDB4MDAwMDAyMDAwMDAyMDAwMiksIENPTlNUNjQoMHgwMDAwMDIwMjAwMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAwMDAwMDAyMDAwMjAyMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAyMDIwMiksIENPTlNUNjQoMHgwMDAwMDAwMjAwMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAwMDAwMjAyMDAwMjAyMDApLCBDT05TVDY0KDB4MDAwMDAyMDAwMDAyMDIwMiksIENPTlNUNjQoMHgwMDAwMDIwMjAwMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAwMDIwMDAyMDAwMjAwMDApLCBDT05TVDY0KDB4MDAwMjAwMDAwMDAyMDAwMiksIENPTlNUNjQoMHgwMDAyMDAwMjAwMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAwMDIwMjAyMDAwMjAwMDApLCBDT05TVDY0KDB4MDAwMjAyMDAwMDAyMDAwMiksIENPTlNUNjQoMHgwMDAyMDIwMjAwMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAwMDIwMDAyMDAwMjAyMDApLCBDT05TVDY0KDB4MDAwMjAwMDAwMDAyMDIwMiksIENPTlNUNjQoMHgwMDAyMDAwMjAwMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAwMDIwMjAyMDAwMjAyMDApLCBDT05TVDY0KDB4MDAwMjAyMDAwMDAyMDIwMiksIENPTlNUNjQoMHgwMDAyMDIwMjAwMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAyMDAwMDAyMDAwMDAwMDApLCBDT05TVDY0KDB4MDIwMDAwMDAwMDAwMDAwMiksIENPTlNUNjQoMHgwMjAwMDAwMjAwMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAyMDAwMjAyMDAwMDAwMDApLCBDT05TVDY0KDB4MDIwMDAyMDAwMDAwMDAwMiksIENPTlNUNjQoMHgwMjAwMDIwMjAwMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAyMDAwMDAyMDAwMDAyMDApLCBDT05TVDY0KDB4MDIwMDAwMDAwMDAwMDIwMiksIENPTlNUNjQoMHgwMjAwMDAwMjAwMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAyMDAwMjAyMDAwMDAyMDApLCBDT05TVDY0KDB4MDIwMDAyMDAwMDAwMDIwMiksIENPTlNUNjQoMHgwMjAwMDIwMjAwMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAyMDIwMDAyMDAwMDAwMDApLCBDT05TVDY0KDB4MDIwMjAwMDAwMDAwMDAwMiksIENPTlNUNjQoMHgwMjAyMDAwMjAwMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAyMDIwMjAyMDAwMDAwMDApLCBDT05TVDY0KDB4MDIwMjAyMDAwMDAwMDAwMiksIENPTlNUNjQoMHgwMjAyMDIwMjAwMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAyMDIwMDAyMDAwMDAyMDApLCBDT05TVDY0KDB4MDIwMjAwMDAwMDAwMDIwMiksIENPTlNUNjQoMHgwMjAyMDAwMjAwMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAyMDIwMjAyMDAwMDAyMDApLCBDT05TVDY0KDB4MDIwMjAyMDAwMDAwMDIwMiksIENPTlNUNjQoMHgwMjAyMDIwMjAwMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAyMDAwMDAyMDAwMjAwMDApLCBDT05TVDY0KDB4MDIwMDAwMDAwMDAyMDAwMiksIENPTlNUNjQoMHgwMjAwMDAwMjAwMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAyMDAwMjAyMDAwMjAwMDApLCBDT05TVDY0KDB4MDIwMDAyMDAwMDAyMDAwMiksIENPTlNUNjQoMHgwMjAwMDIwMjAwMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAyMDAwMDAyMDAwMjAyMDApLCBDT05TVDY0KDB4MDIwMDAwMDAwMDAyMDIwMiksIENPTlNUNjQoMHgwMjAwMDAwMjAwMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAyMDAwMjAyMDAwMjAyMDApLCBDT05TVDY0KDB4MDIwMDAyMDAwMDAyMDIwMiksIENPTlNUNjQoMHgwMjAwMDIwMjAwMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAyMDIwMDAyMDAwMjAwMDApLCBDT05TVDY0KDB4MDIwMjAwMDAwMDAyMDAwMiksIENPTlNUNjQoMHgwMjAyMDAwMjAwMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAyMDIwMjAyMDAwMjAwMDApLCBDT05TVDY0KDB4MDIwMjAyMDAwMDAyMDAwMiksIENPTlNUNjQoMHgwMjAyMDIwMjAwMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAyMDIwMDAyMDAwMjAyMDApLCBDT05TVDY0KDB4MDIwMjAwMDAwMDAyMDIwMiksIENPTlNUNjQoMHgwMjAyMDAwMjAwMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAyMDIwMjAyMDAwMjAyMDApLCBDT05TVDY0KDB4MDIwMjAyMDAwMDAyMDIwMiksIENPTlNUNjQoMHgwMjAyMDIwMjAwMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAyMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAyMDIwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMDAwMDAwMjAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAyMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMjAyMDIwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAyMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMDAwMDIwMjAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAyMDAwMjAwKSwgQ09OU1Q2NCgweDAwMDAwMDAyMDIwMDAyMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMDAwMDAwMjAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAyMDAwMjAwKSwgQ09OU1Q2NCgweDAwMDAwMjAyMDIwMDAyMDApLCBDT05TVDY0KDB4MDAwMDAyMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMDAwMDIwMjAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAyMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDIwMDAyMDIwMDAwMDApLCBDT05TVDY0KDB4MDAwMjAwMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMDAyMDAwMjAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAyMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDIwMjAyMDIwMDAwMDApLCBDT05TVDY0KDB4MDAwMjAyMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMDAyMDIwMjAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAyMDAwMjAwKSwgQ09OU1Q2NCgweDAwMDIwMDAyMDIwMDAyMDApLCBDT05TVDY0KDB4MDAwMjAwMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMDAyMDAwMjAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAyMDAwMjAwKSwgQ09OU1Q2NCgweDAwMDIwMjAyMDIwMDAyMDApLCBDT05TVDY0KDB4MDAwMjAyMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMDAyMDIwMjAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAyMDIwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAyMDIwMjAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMDAwMDAwMjAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAyMDIwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMjAyMDIwMjAwMDApLCBDT05TVDY0KDB4MDAwMDAyMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMDAwMDIwMjAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAyMDIwMjAwKSwgQ09OU1Q2NCgweDAwMDAwMDAyMDIwMjAyMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMDAwMDAwMjAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAyMDIwMjAwKSwgQ09OU1Q2NCgweDAwMDAwMjAyMDIwMjAyMDApLCBDT05TVDY0KDB4MDAwMDAyMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMDAwMDIwMjAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAyMDIwMDAwKSwgQ09OU1Q2NCgweDAwMDIwMDAyMDIwMjAwMDApLCBDT05TVDY0KDB4MDAwMjAwMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMDAyMDAwMjAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAyMDIwMDAwKSwgQ09OU1Q2NCgweDAwMDIwMjAyMDIwMjAwMDApLCBDT05TVDY0KDB4MDAwMjAyMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMDAyMDIwMjAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAyMDIwMjAwKSwgQ09OU1Q2NCgweDAwMDIwMDAyMDIwMjAyMDApLCBDT05TVDY0KDB4MDAwMjAwMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMDAyMDAwMjAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAyMDIwMjAwKSwgQ09OU1Q2NCgweDAwMDIwMjAyMDIwMjAyMDApLCBDT05TVDY0KDB4MDAwMjAyMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMDAyMDIwMjAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAyMDAwMDAwKSwgQ09OU1Q2NCgweDAyMDAwMDAyMDIwMDAwMDApLCBDT05TVDY0KDB4MDIwMDAwMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMjAwMDAwMjAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAyMDAwMDAwKSwgQ09OU1Q2NCgweDAyMDAwMjAyMDIwMDAwMDApLCBDT05TVDY0KDB4MDIwMDAyMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMjAwMDIwMjAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAyMDAwMjAwKSwgQ09OU1Q2NCgweDAyMDAwMDAyMDIwMDAyMDApLCBDT05TVDY0KDB4MDIwMDAwMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMjAwMDAwMjAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAyMDAwMjAwKSwgQ09OU1Q2NCgweDAyMDAwMjAyMDIwMDAyMDApLCBDT05TVDY0KDB4MDIwMDAyMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMjAwMDIwMjAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAyMDAwMDAwKSwgQ09OU1Q2NCgweDAyMDIwMDAyMDIwMDAwMDApLCBDT05TVDY0KDB4MDIwMjAwMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMjAyMDAwMjAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAyMDAwMDAwKSwgQ09OU1Q2NCgweDAyMDIwMjAyMDIwMDAwMDApLCBDT05TVDY0KDB4MDIwMjAyMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMjAyMDIwMjAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAyMDAwMjAwKSwgQ09OU1Q2NCgweDAyMDIwMDAyMDIwMDAyMDApLCBDT05TVDY0KDB4MDIwMjAwMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMjAyMDAwMjAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAyMDAwMjAwKSwgQ09OU1Q2NCgweDAyMDIwMjAyMDIwMDAyMDApLCBDT05TVDY0KDB4MDIwMjAyMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMjAyMDIwMjAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAyMDIwMDAwKSwgQ09OU1Q2NCgweDAyMDAwMDAyMDIwMjAwMDApLCBDT05TVDY0KDB4MDIwMDAwMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMjAwMDAwMjAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAyMDIwMDAwKSwgQ09OU1Q2NCgweDAyMDAwMjAyMDIwMjAwMDApLCBDT05TVDY0KDB4MDIwMDAyMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMjAwMDIwMjAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAyMDIwMjAwKSwgQ09OU1Q2NCgweDAyMDAwMDAyMDIwMjAyMDApLCBDT05TVDY0KDB4MDIwMDAwMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMjAwMDAwMjAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAyMDIwMjAwKSwgQ09OU1Q2NCgweDAyMDAwMjAyMDIwMjAyMDApLCBDT05TVDY0KDB4MDIwMDAyMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMjAwMDIwMjAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAyMDIwMDAwKSwgQ09OU1Q2NCgweDAyMDIwMDAyMDIwMjAwMDApLCBDT05TVDY0KDB4MDIwMjAwMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMjAyMDAwMjAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAyMDIwMDAwKSwgQ09OU1Q2NCgweDAyMDIwMjAyMDIwMjAwMDApLCBDT05TVDY0KDB4MDIwMjAyMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMjAyMDIwMjAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAyMDIwMjAwKSwgQ09OU1Q2NCgweDAyMDIwMDAyMDIwMjAyMDApLCBDT05TVDY0KDB4MDIwMjAwMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMjAyMDAwMjAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAyMDIwMjAwKSwgQ09OU1Q2NCgweDAyMDIwMjAyMDIwMjAyMDApLCBDT05TVDY0KDB4MDIwMjAyMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMjAyMDIwMjAyMDIwMjAyKQorICB9LCAKK3sgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAxMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMTAwKSwgQ09OU1Q2NCgweDAwMDAwMTAwMDAwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMTAxMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAxMDAwMDAwMDAwMTAwKSwgQ09OU1Q2NCgweDAwMDEwMTAwMDAwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMTAwMDApLCBDT05TVDY0KDB4MDAwMDAxMDAwMDAxMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDEwMTAwKSwgQ09OU1Q2NCgweDAwMDAwMTAwMDAwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDAwMTAwMDApLCBDT05TVDY0KDB4MDAwMTAxMDAwMDAxMDAwMCksIENPTlNUNjQoMHgwMDAxMDAwMDAwMDEwMTAwKSwgQ09OU1Q2NCgweDAwMDEwMTAwMDAwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDEwMDAxMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMTAwMDAwMDAwMDAwMTAwKSwgQ09OU1Q2NCgweDAxMDAwMTAwMDAwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDEwMTAxMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMTAxMDAwMDAwMDAwMTAwKSwgQ09OU1Q2NCgweDAxMDEwMTAwMDAwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDAwMTAwMDApLCBDT05TVDY0KDB4MDEwMDAxMDAwMDAxMDAwMCksIENPTlNUNjQoMHgwMTAwMDAwMDAwMDEwMTAwKSwgQ09OU1Q2NCgweDAxMDAwMTAwMDAwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDAwMTAwMDApLCBDT05TVDY0KDB4MDEwMTAxMDAwMDAxMDAwMCksIENPTlNUNjQoMHgwMTAxMDAwMDAwMDEwMTAwKSwgQ09OU1Q2NCgweDAxMDEwMTAwMDAwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDEwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAxMDAwMTAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAxMDAwMTAwKSwgQ09OU1Q2NCgweDAwMDAwMTAwMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDEwMDAwMDApLCBDT05TVDY0KDB4MDAwMTAxMDAwMTAwMDAwMCksIENPTlNUNjQoMHgwMDAxMDAwMDAxMDAwMTAwKSwgQ09OU1Q2NCgweDAwMDEwMTAwMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDEwMTAwMDApLCBDT05TVDY0KDB4MDAwMDAxMDAwMTAxMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAxMDEwMTAwKSwgQ09OU1Q2NCgweDAwMDAwMTAwMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDEwMTAwMDApLCBDT05TVDY0KDB4MDAwMTAxMDAwMTAxMDAwMCksIENPTlNUNjQoMHgwMDAxMDAwMDAxMDEwMTAwKSwgQ09OU1Q2NCgweDAwMDEwMTAwMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDEwMDAwMDApLCBDT05TVDY0KDB4MDEwMDAxMDAwMTAwMDAwMCksIENPTlNUNjQoMHgwMTAwMDAwMDAxMDAwMTAwKSwgQ09OU1Q2NCgweDAxMDAwMTAwMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDEwMDAwMDApLCBDT05TVDY0KDB4MDEwMTAxMDAwMTAwMDAwMCksIENPTlNUNjQoMHgwMTAxMDAwMDAxMDAwMTAwKSwgQ09OU1Q2NCgweDAxMDEwMTAwMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDEwMTAwMDApLCBDT05TVDY0KDB4MDEwMDAxMDAwMTAxMDAwMCksIENPTlNUNjQoMHgwMTAwMDAwMDAxMDEwMTAwKSwgQ09OU1Q2NCgweDAxMDAwMTAwMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDEwMTAwMDApLCBDT05TVDY0KDB4MDEwMTAxMDAwMTAxMDAwMCksIENPTlNUNjQoMHgwMTAxMDAwMDAxMDEwMTAwKSwgQ09OU1Q2NCgweDAxMDEwMTAwMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAxMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAxMDEwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMTAwMDAwMTAwKSwgQ09OU1Q2NCgweDAwMDAwMTAxMDAwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAxMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMTAxMDEwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAxMDAwMTAwMDAwMTAwKSwgQ09OU1Q2NCgweDAwMDEwMTAxMDAwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAxMDAwMTAwMDApLCBDT05TVDY0KDB4MDAwMDAxMDEwMDAxMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMTAwMDEwMTAwKSwgQ09OU1Q2NCgweDAwMDAwMTAxMDAwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAxMDAwMTAwMDApLCBDT05TVDY0KDB4MDAwMTAxMDEwMDAxMDAwMCksIENPTlNUNjQoMHgwMDAxMDAwMTAwMDEwMTAwKSwgQ09OU1Q2NCgweDAwMDEwMTAxMDAwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAxMDAwMDAwMDApLCBDT05TVDY0KDB4MDEwMDAxMDEwMDAwMDAwMCksIENPTlNUNjQoMHgwMTAwMDAwMTAwMDAwMTAwKSwgQ09OU1Q2NCgweDAxMDAwMTAxMDAwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAxMDAwMDAwMDApLCBDT05TVDY0KDB4MDEwMTAxMDEwMDAwMDAwMCksIENPTlNUNjQoMHgwMTAxMDAwMTAwMDAwMTAwKSwgQ09OU1Q2NCgweDAxMDEwMTAxMDAwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAxMDAwMTAwMDApLCBDT05TVDY0KDB4MDEwMDAxMDEwMDAxMDAwMCksIENPTlNUNjQoMHgwMTAwMDAwMTAwMDEwMTAwKSwgQ09OU1Q2NCgweDAxMDAwMTAxMDAwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAxMDAwMTAwMDApLCBDT05TVDY0KDB4MDEwMTAxMDEwMDAxMDAwMCksIENPTlNUNjQoMHgwMTAxMDAwMTAwMDEwMTAwKSwgQ09OU1Q2NCgweDAxMDEwMTAxMDAwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAxMDEwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAxMDEwMTAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMTAxMDAwMTAwKSwgQ09OU1Q2NCgweDAwMDAwMTAxMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAxMDEwMDAwMDApLCBDT05TVDY0KDB4MDAwMTAxMDEwMTAwMDAwMCksIENPTlNUNjQoMHgwMDAxMDAwMTAxMDAwMTAwKSwgQ09OU1Q2NCgweDAwMDEwMTAxMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAxMDEwMTAwMDApLCBDT05TVDY0KDB4MDAwMDAxMDEwMTAxMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMTAxMDEwMTAwKSwgQ09OU1Q2NCgweDAwMDAwMTAxMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAxMDEwMTAwMDApLCBDT05TVDY0KDB4MDAwMTAxMDEwMTAxMDAwMCksIENPTlNUNjQoMHgwMDAxMDAwMTAxMDEwMTAwKSwgQ09OU1Q2NCgweDAwMDEwMTAxMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAxMDEwMDAwMDApLCBDT05TVDY0KDB4MDEwMDAxMDEwMTAwMDAwMCksIENPTlNUNjQoMHgwMTAwMDAwMTAxMDAwMTAwKSwgQ09OU1Q2NCgweDAxMDAwMTAxMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAxMDEwMDAwMDApLCBDT05TVDY0KDB4MDEwMTAxMDEwMTAwMDAwMCksIENPTlNUNjQoMHgwMTAxMDAwMTAxMDAwMTAwKSwgQ09OU1Q2NCgweDAxMDEwMTAxMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAxMDEwMTAwMDApLCBDT05TVDY0KDB4MDEwMDAxMDEwMTAxMDAwMCksIENPTlNUNjQoMHgwMTAwMDAwMTAxMDEwMTAwKSwgQ09OU1Q2NCgweDAxMDAwMTAxMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAxMDEwMTAwMDApLCBDT05TVDY0KDB4MDEwMTAxMDEwMTAxMDAwMCksIENPTlNUNjQoMHgwMTAxMDAwMTAxMDEwMTAwKSwgQ09OU1Q2NCgweDAxMDEwMTAxMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwMDEpLCBDT05TVDY0KDB4MDAwMDAxMDAwMDAwMDAwMSksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMTAxKSwgQ09OU1Q2NCgweDAwMDAwMTAwMDAwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDAwMDAwMDEpLCBDT05TVDY0KDB4MDAwMTAxMDAwMDAwMDAwMSksIENPTlNUNjQoMHgwMDAxMDAwMDAwMDAwMTAxKSwgQ09OU1Q2NCgweDAwMDEwMTAwMDAwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMTAwMDEpLCBDT05TVDY0KDB4MDAwMDAxMDAwMDAxMDAwMSksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDEwMTAxKSwgQ09OU1Q2NCgweDAwMDAwMTAwMDAwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDAwMTAwMDEpLCBDT05TVDY0KDB4MDAwMTAxMDAwMDAxMDAwMSksIENPTlNUNjQoMHgwMDAxMDAwMDAwMDEwMTAxKSwgQ09OU1Q2NCgweDAwMDEwMTAwMDAwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDAwMDAwMDEpLCBDT05TVDY0KDB4MDEwMDAxMDAwMDAwMDAwMSksIENPTlNUNjQoMHgwMTAwMDAwMDAwMDAwMTAxKSwgQ09OU1Q2NCgweDAxMDAwMTAwMDAwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDAwMDAwMDEpLCBDT05TVDY0KDB4MDEwMTAxMDAwMDAwMDAwMSksIENPTlNUNjQoMHgwMTAxMDAwMDAwMDAwMTAxKSwgQ09OU1Q2NCgweDAxMDEwMTAwMDAwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDAwMTAwMDEpLCBDT05TVDY0KDB4MDEwMDAxMDAwMDAxMDAwMSksIENPTlNUNjQoMHgwMTAwMDAwMDAwMDEwMTAxKSwgQ09OU1Q2NCgweDAxMDAwMTAwMDAwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDAwMTAwMDEpLCBDT05TVDY0KDB4MDEwMTAxMDAwMDAxMDAwMSksIENPTlNUNjQoMHgwMTAxMDAwMDAwMDEwMTAxKSwgQ09OU1Q2NCgweDAxMDEwMTAwMDAwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDEwMDAwMDEpLCBDT05TVDY0KDB4MDAwMDAxMDAwMTAwMDAwMSksIENPTlNUNjQoMHgwMDAwMDAwMDAxMDAwMTAxKSwgQ09OU1Q2NCgweDAwMDAwMTAwMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDEwMDAwMDEpLCBDT05TVDY0KDB4MDAwMTAxMDAwMTAwMDAwMSksIENPTlNUNjQoMHgwMDAxMDAwMDAxMDAwMTAxKSwgQ09OU1Q2NCgweDAwMDEwMTAwMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDEwMTAwMDEpLCBDT05TVDY0KDB4MDAwMDAxMDAwMTAxMDAwMSksIENPTlNUNjQoMHgwMDAwMDAwMDAxMDEwMTAxKSwgQ09OU1Q2NCgweDAwMDAwMTAwMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDEwMTAwMDEpLCBDT05TVDY0KDB4MDAwMTAxMDAwMTAxMDAwMSksIENPTlNUNjQoMHgwMDAxMDAwMDAxMDEwMTAxKSwgQ09OU1Q2NCgweDAwMDEwMTAwMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDEwMDAwMDEpLCBDT05TVDY0KDB4MDEwMDAxMDAwMTAwMDAwMSksIENPTlNUNjQoMHgwMTAwMDAwMDAxMDAwMTAxKSwgQ09OU1Q2NCgweDAxMDAwMTAwMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDEwMDAwMDEpLCBDT05TVDY0KDB4MDEwMTAxMDAwMTAwMDAwMSksIENPTlNUNjQoMHgwMTAxMDAwMDAxMDAwMTAxKSwgQ09OU1Q2NCgweDAxMDEwMTAwMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDEwMTAwMDEpLCBDT05TVDY0KDB4MDEwMDAxMDAwMTAxMDAwMSksIENPTlNUNjQoMHgwMTAwMDAwMDAxMDEwMTAxKSwgQ09OU1Q2NCgweDAxMDAwMTAwMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDEwMTAwMDEpLCBDT05TVDY0KDB4MDEwMTAxMDAwMTAxMDAwMSksIENPTlNUNjQoMHgwMTAxMDAwMDAxMDEwMTAxKSwgQ09OU1Q2NCgweDAxMDEwMTAwMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAxMDAwMDAwMDEpLCBDT05TVDY0KDB4MDAwMDAxMDEwMDAwMDAwMSksIENPTlNUNjQoMHgwMDAwMDAwMTAwMDAwMTAxKSwgQ09OU1Q2NCgweDAwMDAwMTAxMDAwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAxMDAwMDAwMDEpLCBDT05TVDY0KDB4MDAwMTAxMDEwMDAwMDAwMSksIENPTlNUNjQoMHgwMDAxMDAwMTAwMDAwMTAxKSwgQ09OU1Q2NCgweDAwMDEwMTAxMDAwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAxMDAwMTAwMDEpLCBDT05TVDY0KDB4MDAwMDAxMDEwMDAxMDAwMSksIENPTlNUNjQoMHgwMDAwMDAwMTAwMDEwMTAxKSwgQ09OU1Q2NCgweDAwMDAwMTAxMDAwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAxMDAwMTAwMDEpLCBDT05TVDY0KDB4MDAwMTAxMDEwMDAxMDAwMSksIENPTlNUNjQoMHgwMDAxMDAwMTAwMDEwMTAxKSwgQ09OU1Q2NCgweDAwMDEwMTAxMDAwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAxMDAwMDAwMDEpLCBDT05TVDY0KDB4MDEwMDAxMDEwMDAwMDAwMSksIENPTlNUNjQoMHgwMTAwMDAwMTAwMDAwMTAxKSwgQ09OU1Q2NCgweDAxMDAwMTAxMDAwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAxMDAwMDAwMDEpLCBDT05TVDY0KDB4MDEwMTAxMDEwMDAwMDAwMSksIENPTlNUNjQoMHgwMTAxMDAwMTAwMDAwMTAxKSwgQ09OU1Q2NCgweDAxMDEwMTAxMDAwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAxMDAwMTAwMDEpLCBDT05TVDY0KDB4MDEwMDAxMDEwMDAxMDAwMSksIENPTlNUNjQoMHgwMTAwMDAwMTAwMDEwMTAxKSwgQ09OU1Q2NCgweDAxMDAwMTAxMDAwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAxMDAwMTAwMDEpLCBDT05TVDY0KDB4MDEwMTAxMDEwMDAxMDAwMSksIENPTlNUNjQoMHgwMTAxMDAwMTAwMDEwMTAxKSwgQ09OU1Q2NCgweDAxMDEwMTAxMDAwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAxMDEwMDAwMDEpLCBDT05TVDY0KDB4MDAwMDAxMDEwMTAwMDAwMSksIENPTlNUNjQoMHgwMDAwMDAwMTAxMDAwMTAxKSwgQ09OU1Q2NCgweDAwMDAwMTAxMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAxMDEwMDAwMDEpLCBDT05TVDY0KDB4MDAwMTAxMDEwMTAwMDAwMSksIENPTlNUNjQoMHgwMDAxMDAwMTAxMDAwMTAxKSwgQ09OU1Q2NCgweDAwMDEwMTAxMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAxMDEwMTAwMDEpLCBDT05TVDY0KDB4MDAwMDAxMDEwMTAxMDAwMSksIENPTlNUNjQoMHgwMDAwMDAwMTAxMDEwMTAxKSwgQ09OU1Q2NCgweDAwMDAwMTAxMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAxMDEwMTAwMDEpLCBDT05TVDY0KDB4MDAwMTAxMDEwMTAxMDAwMSksIENPTlNUNjQoMHgwMDAxMDAwMTAxMDEwMTAxKSwgQ09OU1Q2NCgweDAwMDEwMTAxMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAxMDEwMDAwMDEpLCBDT05TVDY0KDB4MDEwMDAxMDEwMTAwMDAwMSksIENPTlNUNjQoMHgwMTAwMDAwMTAxMDAwMTAxKSwgQ09OU1Q2NCgweDAxMDAwMTAxMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAxMDEwMDAwMDEpLCBDT05TVDY0KDB4MDEwMTAxMDEwMTAwMDAwMSksIENPTlNUNjQoMHgwMTAxMDAwMTAxMDAwMTAxKSwgQ09OU1Q2NCgweDAxMDEwMTAxMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAxMDEwMTAwMDEpLCBDT05TVDY0KDB4MDEwMDAxMDEwMTAxMDAwMSksIENPTlNUNjQoMHgwMTAwMDAwMTAxMDEwMTAxKSwgQ09OU1Q2NCgweDAxMDAwMTAxMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAxMDEwMTAwMDEpLCBDT05TVDY0KDB4MDEwMTAxMDEwMTAxMDAwMSksIENPTlNUNjQoMHgwMTAxMDAwMTAxMDEwMTAxKSwgQ09OU1Q2NCgweDAxMDEwMTAxMDEwMTAxMDEpCisgIH0sIAoreyBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDA4MDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwODApLCBDT05TVDY0KDB4MDAwMDAwODAwMDAwMDA4MCksIAorICBDT05TVDY0KDB4MDAwMDgwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwODA4MDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDA4MDAwMDAwMDAwODApLCBDT05TVDY0KDB4MDAwMDgwODAwMDAwMDA4MCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDAwODAwMCksIENPTlNUNjQoMHgwMDAwMDA4MDAwMDA4MDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDgwODApLCBDT05TVDY0KDB4MDAwMDAwODAwMDAwODA4MCksIAorICBDT05TVDY0KDB4MDAwMDgwMDAwMDAwODAwMCksIENPTlNUNjQoMHgwMDAwODA4MDAwMDA4MDAwKSwgQ09OU1Q2NCgweDAwMDA4MDAwMDAwMDgwODApLCBDT05TVDY0KDB4MDAwMDgwODAwMDAwODA4MCksIAorICBDT05TVDY0KDB4MDA4MDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDgwMDA4MDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwODAwMDAwMDAwMDAwODApLCBDT05TVDY0KDB4MDA4MDAwODAwMDAwMDA4MCksIAorICBDT05TVDY0KDB4MDA4MDgwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDgwODA4MDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwODA4MDAwMDAwMDAwODApLCBDT05TVDY0KDB4MDA4MDgwODAwMDAwMDA4MCksIAorICBDT05TVDY0KDB4MDA4MDAwMDAwMDAwODAwMCksIENPTlNUNjQoMHgwMDgwMDA4MDAwMDA4MDAwKSwgQ09OU1Q2NCgweDAwODAwMDAwMDAwMDgwODApLCBDT05TVDY0KDB4MDA4MDAwODAwMDAwODA4MCksIAorICBDT05TVDY0KDB4MDA4MDgwMDAwMDAwODAwMCksIENPTlNUNjQoMHgwMDgwODA4MDAwMDA4MDAwKSwgQ09OU1Q2NCgweDAwODA4MDAwMDAwMDgwODApLCBDT05TVDY0KDB4MDA4MDgwODAwMDAwODA4MCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDgwMDAwMCksIENPTlNUNjQoMHgwMDAwMDA4MDAwODAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDA4MDAwODApLCBDT05TVDY0KDB4MDAwMDAwODAwMDgwMDA4MCksIAorICBDT05TVDY0KDB4MDAwMDgwMDAwMDgwMDAwMCksIENPTlNUNjQoMHgwMDAwODA4MDAwODAwMDAwKSwgQ09OU1Q2NCgweDAwMDA4MDAwMDA4MDAwODApLCBDT05TVDY0KDB4MDAwMDgwODAwMDgwMDA4MCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDgwODAwMCksIENPTlNUNjQoMHgwMDAwMDA4MDAwODA4MDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDA4MDgwODApLCBDT05TVDY0KDB4MDAwMDAwODAwMDgwODA4MCksIAorICBDT05TVDY0KDB4MDAwMDgwMDAwMDgwODAwMCksIENPTlNUNjQoMHgwMDAwODA4MDAwODA4MDAwKSwgQ09OU1Q2NCgweDAwMDA4MDAwMDA4MDgwODApLCBDT05TVDY0KDB4MDAwMDgwODAwMDgwODA4MCksIAorICBDT05TVDY0KDB4MDA4MDAwMDAwMDgwMDAwMCksIENPTlNUNjQoMHgwMDgwMDA4MDAwODAwMDAwKSwgQ09OU1Q2NCgweDAwODAwMDAwMDA4MDAwODApLCBDT05TVDY0KDB4MDA4MDAwODAwMDgwMDA4MCksIAorICBDT05TVDY0KDB4MDA4MDgwMDAwMDgwMDAwMCksIENPTlNUNjQoMHgwMDgwODA4MDAwODAwMDAwKSwgQ09OU1Q2NCgweDAwODA4MDAwMDA4MDAwODApLCBDT05TVDY0KDB4MDA4MDgwODAwMDgwMDA4MCksIAorICBDT05TVDY0KDB4MDA4MDAwMDAwMDgwODAwMCksIENPTlNUNjQoMHgwMDgwMDA4MDAwODA4MDAwKSwgQ09OU1Q2NCgweDAwODAwMDAwMDA4MDgwODApLCBDT05TVDY0KDB4MDA4MDAwODAwMDgwODA4MCksIAorICBDT05TVDY0KDB4MDA4MDgwMDAwMDgwODAwMCksIENPTlNUNjQoMHgwMDgwODA4MDAwODA4MDAwKSwgQ09OU1Q2NCgweDAwODA4MDAwMDA4MDgwODApLCBDT05TVDY0KDB4MDA4MDgwODAwMDgwODA4MCksIAorICBDT05TVDY0KDB4ODAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHg4MDAwMDA4MDAwMDAwMDAwKSwgQ09OU1Q2NCgweDgwMDAwMDAwMDAwMDAwODApLCBDT05TVDY0KDB4ODAwMDAwODAwMDAwMDA4MCksIAorICBDT05TVDY0KDB4ODAwMDgwMDAwMDAwMDAwMCksIENPTlNUNjQoMHg4MDAwODA4MDAwMDAwMDAwKSwgQ09OU1Q2NCgweDgwMDA4MDAwMDAwMDAwODApLCBDT05TVDY0KDB4ODAwMDgwODAwMDAwMDA4MCksIAorICBDT05TVDY0KDB4ODAwMDAwMDAwMDAwODAwMCksIENPTlNUNjQoMHg4MDAwMDA4MDAwMDA4MDAwKSwgQ09OU1Q2NCgweDgwMDAwMDAwMDAwMDgwODApLCBDT05TVDY0KDB4ODAwMDAwODAwMDAwODA4MCksIAorICBDT05TVDY0KDB4ODAwMDgwMDAwMDAwODAwMCksIENPTlNUNjQoMHg4MDAwODA4MDAwMDA4MDAwKSwgQ09OU1Q2NCgweDgwMDA4MDAwMDAwMDgwODApLCBDT05TVDY0KDB4ODAwMDgwODAwMDAwODA4MCksIAorICBDT05TVDY0KDB4ODA4MDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHg4MDgwMDA4MDAwMDAwMDAwKSwgQ09OU1Q2NCgweDgwODAwMDAwMDAwMDAwODApLCBDT05TVDY0KDB4ODA4MDAwODAwMDAwMDA4MCksIAorICBDT05TVDY0KDB4ODA4MDgwMDAwMDAwMDAwMCksIENPTlNUNjQoMHg4MDgwODA4MDAwMDAwMDAwKSwgQ09OU1Q2NCgweDgwODA4MDAwMDAwMDAwODApLCBDT05TVDY0KDB4ODA4MDgwODAwMDAwMDA4MCksIAorICBDT05TVDY0KDB4ODA4MDAwMDAwMDAwODAwMCksIENPTlNUNjQoMHg4MDgwMDA4MDAwMDA4MDAwKSwgQ09OU1Q2NCgweDgwODAwMDAwMDAwMDgwODApLCBDT05TVDY0KDB4ODA4MDAwODAwMDAwODA4MCksIAorICBDT05TVDY0KDB4ODA4MDgwMDAwMDAwODAwMCksIENPTlNUNjQoMHg4MDgwODA4MDAwMDA4MDAwKSwgQ09OU1Q2NCgweDgwODA4MDAwMDAwMDgwODApLCBDT05TVDY0KDB4ODA4MDgwODAwMDAwODA4MCksIAorICBDT05TVDY0KDB4ODAwMDAwMDAwMDgwMDAwMCksIENPTlNUNjQoMHg4MDAwMDA4MDAwODAwMDAwKSwgQ09OU1Q2NCgweDgwMDAwMDAwMDA4MDAwODApLCBDT05TVDY0KDB4ODAwMDAwODAwMDgwMDA4MCksIAorICBDT05TVDY0KDB4ODAwMDgwMDAwMDgwMDAwMCksIENPTlNUNjQoMHg4MDAwODA4MDAwODAwMDAwKSwgQ09OU1Q2NCgweDgwMDA4MDAwMDA4MDAwODApLCBDT05TVDY0KDB4ODAwMDgwODAwMDgwMDA4MCksIAorICBDT05TVDY0KDB4ODAwMDAwMDAwMDgwODAwMCksIENPTlNUNjQoMHg4MDAwMDA4MDAwODA4MDAwKSwgQ09OU1Q2NCgweDgwMDAwMDAwMDA4MDgwODApLCBDT05TVDY0KDB4ODAwMDAwODAwMDgwODA4MCksIAorICBDT05TVDY0KDB4ODAwMDgwMDAwMDgwODAwMCksIENPTlNUNjQoMHg4MDAwODA4MDAwODA4MDAwKSwgQ09OU1Q2NCgweDgwMDA4MDAwMDA4MDgwODApLCBDT05TVDY0KDB4ODAwMDgwODAwMDgwODA4MCksIAorICBDT05TVDY0KDB4ODA4MDAwMDAwMDgwMDAwMCksIENPTlNUNjQoMHg4MDgwMDA4MDAwODAwMDAwKSwgQ09OU1Q2NCgweDgwODAwMDAwMDA4MDAwODApLCBDT05TVDY0KDB4ODA4MDAwODAwMDgwMDA4MCksIAorICBDT05TVDY0KDB4ODA4MDgwMDAwMDgwMDAwMCksIENPTlNUNjQoMHg4MDgwODA4MDAwODAwMDAwKSwgQ09OU1Q2NCgweDgwODA4MDAwMDA4MDAwODApLCBDT05TVDY0KDB4ODA4MDgwODAwMDgwMDA4MCksIAorICBDT05TVDY0KDB4ODA4MDAwMDAwMDgwODAwMCksIENPTlNUNjQoMHg4MDgwMDA4MDAwODA4MDAwKSwgQ09OU1Q2NCgweDgwODAwMDAwMDA4MDgwODApLCBDT05TVDY0KDB4ODA4MDAwODAwMDgwODA4MCksIAorICBDT05TVDY0KDB4ODA4MDgwMDAwMDgwODAwMCksIENPTlNUNjQoMHg4MDgwODA4MDAwODA4MDAwKSwgQ09OU1Q2NCgweDgwODA4MDAwMDA4MDgwODApLCBDT05TVDY0KDB4ODA4MDgwODAwMDgwODA4MCksIAorICBDT05TVDY0KDB4MDAwMDAwMDA4MDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDA4MDgwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwODAwMDAwODApLCBDT05TVDY0KDB4MDAwMDAwODA4MDAwMDA4MCksIAorICBDT05TVDY0KDB4MDAwMDgwMDA4MDAwMDAwMCksIENPTlNUNjQoMHgwMDAwODA4MDgwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDA4MDAwODAwMDAwODApLCBDT05TVDY0KDB4MDAwMDgwODA4MDAwMDA4MCksIAorICBDT05TVDY0KDB4MDAwMDAwMDA4MDAwODAwMCksIENPTlNUNjQoMHgwMDAwMDA4MDgwMDA4MDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwODAwMDgwODApLCBDT05TVDY0KDB4MDAwMDAwODA4MDAwODA4MCksIAorICBDT05TVDY0KDB4MDAwMDgwMDA4MDAwODAwMCksIENPTlNUNjQoMHgwMDAwODA4MDgwMDA4MDAwKSwgQ09OU1Q2NCgweDAwMDA4MDAwODAwMDgwODApLCBDT05TVDY0KDB4MDAwMDgwODA4MDAwODA4MCksIAorICBDT05TVDY0KDB4MDA4MDAwMDA4MDAwMDAwMCksIENPTlNUNjQoMHgwMDgwMDA4MDgwMDAwMDAwKSwgQ09OU1Q2NCgweDAwODAwMDAwODAwMDAwODApLCBDT05TVDY0KDB4MDA4MDAwODA4MDAwMDA4MCksIAorICBDT05TVDY0KDB4MDA4MDgwMDA4MDAwMDAwMCksIENPTlNUNjQoMHgwMDgwODA4MDgwMDAwMDAwKSwgQ09OU1Q2NCgweDAwODA4MDAwODAwMDAwODApLCBDT05TVDY0KDB4MDA4MDgwODA4MDAwMDA4MCksIAorICBDT05TVDY0KDB4MDA4MDAwMDA4MDAwODAwMCksIENPTlNUNjQoMHgwMDgwMDA4MDgwMDA4MDAwKSwgQ09OU1Q2NCgweDAwODAwMDAwODAwMDgwODApLCBDT05TVDY0KDB4MDA4MDAwODA4MDAwODA4MCksIAorICBDT05TVDY0KDB4MDA4MDgwMDA4MDAwODAwMCksIENPTlNUNjQoMHgwMDgwODA4MDgwMDA4MDAwKSwgQ09OU1Q2NCgweDAwODA4MDAwODAwMDgwODApLCBDT05TVDY0KDB4MDA4MDgwODA4MDAwODA4MCksIAorICBDT05TVDY0KDB4MDAwMDAwMDA4MDgwMDAwMCksIENPTlNUNjQoMHgwMDAwMDA4MDgwODAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwODA4MDAwODApLCBDT05TVDY0KDB4MDAwMDAwODA4MDgwMDA4MCksIAorICBDT05TVDY0KDB4MDAwMDgwMDA4MDgwMDAwMCksIENPTlNUNjQoMHgwMDAwODA4MDgwODAwMDAwKSwgQ09OU1Q2NCgweDAwMDA4MDAwODA4MDAwODApLCBDT05TVDY0KDB4MDAwMDgwODA4MDgwMDA4MCksIAorICBDT05TVDY0KDB4MDAwMDAwMDA4MDgwODAwMCksIENPTlNUNjQoMHgwMDAwMDA4MDgwODA4MDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwODA4MDgwODApLCBDT05TVDY0KDB4MDAwMDAwODA4MDgwODA4MCksIAorICBDT05TVDY0KDB4MDAwMDgwMDA4MDgwODAwMCksIENPTlNUNjQoMHgwMDAwODA4MDgwODA4MDAwKSwgQ09OU1Q2NCgweDAwMDA4MDAwODA4MDgwODApLCBDT05TVDY0KDB4MDAwMDgwODA4MDgwODA4MCksIAorICBDT05TVDY0KDB4MDA4MDAwMDA4MDgwMDAwMCksIENPTlNUNjQoMHgwMDgwMDA4MDgwODAwMDAwKSwgQ09OU1Q2NCgweDAwODAwMDAwODA4MDAwODApLCBDT05TVDY0KDB4MDA4MDAwODA4MDgwMDA4MCksIAorICBDT05TVDY0KDB4MDA4MDgwMDA4MDgwMDAwMCksIENPTlNUNjQoMHgwMDgwODA4MDgwODAwMDAwKSwgQ09OU1Q2NCgweDAwODA4MDAwODA4MDAwODApLCBDT05TVDY0KDB4MDA4MDgwODA4MDgwMDA4MCksIAorICBDT05TVDY0KDB4MDA4MDAwMDA4MDgwODAwMCksIENPTlNUNjQoMHgwMDgwMDA4MDgwODA4MDAwKSwgQ09OU1Q2NCgweDAwODAwMDAwODA4MDgwODApLCBDT05TVDY0KDB4MDA4MDAwODA4MDgwODA4MCksIAorICBDT05TVDY0KDB4MDA4MDgwMDA4MDgwODAwMCksIENPTlNUNjQoMHgwMDgwODA4MDgwODA4MDAwKSwgQ09OU1Q2NCgweDAwODA4MDAwODA4MDgwODApLCBDT05TVDY0KDB4MDA4MDgwODA4MDgwODA4MCksIAorICBDT05TVDY0KDB4ODAwMDAwMDA4MDAwMDAwMCksIENPTlNUNjQoMHg4MDAwMDA4MDgwMDAwMDAwKSwgQ09OU1Q2NCgweDgwMDAwMDAwODAwMDAwODApLCBDT05TVDY0KDB4ODAwMDAwODA4MDAwMDA4MCksIAorICBDT05TVDY0KDB4ODAwMDgwMDA4MDAwMDAwMCksIENPTlNUNjQoMHg4MDAwODA4MDgwMDAwMDAwKSwgQ09OU1Q2NCgweDgwMDA4MDAwODAwMDAwODApLCBDT05TVDY0KDB4ODAwMDgwODA4MDAwMDA4MCksIAorICBDT05TVDY0KDB4ODAwMDAwMDA4MDAwODAwMCksIENPTlNUNjQoMHg4MDAwMDA4MDgwMDA4MDAwKSwgQ09OU1Q2NCgweDgwMDAwMDAwODAwMDgwODApLCBDT05TVDY0KDB4ODAwMDAwODA4MDAwODA4MCksIAorICBDT05TVDY0KDB4ODAwMDgwMDA4MDAwODAwMCksIENPTlNUNjQoMHg4MDAwODA4MDgwMDA4MDAwKSwgQ09OU1Q2NCgweDgwMDA4MDAwODAwMDgwODApLCBDT05TVDY0KDB4ODAwMDgwODA4MDAwODA4MCksIAorICBDT05TVDY0KDB4ODA4MDAwMDA4MDAwMDAwMCksIENPTlNUNjQoMHg4MDgwMDA4MDgwMDAwMDAwKSwgQ09OU1Q2NCgweDgwODAwMDAwODAwMDAwODApLCBDT05TVDY0KDB4ODA4MDAwODA4MDAwMDA4MCksIAorICBDT05TVDY0KDB4ODA4MDgwMDA4MDAwMDAwMCksIENPTlNUNjQoMHg4MDgwODA4MDgwMDAwMDAwKSwgQ09OU1Q2NCgweDgwODA4MDAwODAwMDAwODApLCBDT05TVDY0KDB4ODA4MDgwODA4MDAwMDA4MCksIAorICBDT05TVDY0KDB4ODA4MDAwMDA4MDAwODAwMCksIENPTlNUNjQoMHg4MDgwMDA4MDgwMDA4MDAwKSwgQ09OU1Q2NCgweDgwODAwMDAwODAwMDgwODApLCBDT05TVDY0KDB4ODA4MDAwODA4MDAwODA4MCksIAorICBDT05TVDY0KDB4ODA4MDgwMDA4MDAwODAwMCksIENPTlNUNjQoMHg4MDgwODA4MDgwMDA4MDAwKSwgQ09OU1Q2NCgweDgwODA4MDAwODAwMDgwODApLCBDT05TVDY0KDB4ODA4MDgwODA4MDAwODA4MCksIAorICBDT05TVDY0KDB4ODAwMDAwMDA4MDgwMDAwMCksIENPTlNUNjQoMHg4MDAwMDA4MDgwODAwMDAwKSwgQ09OU1Q2NCgweDgwMDAwMDAwODA4MDAwODApLCBDT05TVDY0KDB4ODAwMDAwODA4MDgwMDA4MCksIAorICBDT05TVDY0KDB4ODAwMDgwMDA4MDgwMDAwMCksIENPTlNUNjQoMHg4MDAwODA4MDgwODAwMDAwKSwgQ09OU1Q2NCgweDgwMDA4MDAwODA4MDAwODApLCBDT05TVDY0KDB4ODAwMDgwODA4MDgwMDA4MCksIAorICBDT05TVDY0KDB4ODAwMDAwMDA4MDgwODAwMCksIENPTlNUNjQoMHg4MDAwMDA4MDgwODA4MDAwKSwgQ09OU1Q2NCgweDgwMDAwMDAwODA4MDgwODApLCBDT05TVDY0KDB4ODAwMDAwODA4MDgwODA4MCksIAorICBDT05TVDY0KDB4ODAwMDgwMDA4MDgwODAwMCksIENPTlNUNjQoMHg4MDAwODA4MDgwODA4MDAwKSwgQ09OU1Q2NCgweDgwMDA4MDAwODA4MDgwODApLCBDT05TVDY0KDB4ODAwMDgwODA4MDgwODA4MCksIAorICBDT05TVDY0KDB4ODA4MDAwMDA4MDgwMDAwMCksIENPTlNUNjQoMHg4MDgwMDA4MDgwODAwMDAwKSwgQ09OU1Q2NCgweDgwODAwMDAwODA4MDAwODApLCBDT05TVDY0KDB4ODA4MDAwODA4MDgwMDA4MCksIAorICBDT05TVDY0KDB4ODA4MDgwMDA4MDgwMDAwMCksIENPTlNUNjQoMHg4MDgwODA4MDgwODAwMDAwKSwgQ09OU1Q2NCgweDgwODA4MDAwODA4MDAwODApLCBDT05TVDY0KDB4ODA4MDgwODA4MDgwMDA4MCksIAorICBDT05TVDY0KDB4ODA4MDAwMDA4MDgwODAwMCksIENPTlNUNjQoMHg4MDgwMDA4MDgwODA4MDAwKSwgQ09OU1Q2NCgweDgwODAwMDAwODA4MDgwODApLCBDT05TVDY0KDB4ODA4MDAwODA4MDgwODA4MCksIAorICBDT05TVDY0KDB4ODA4MDgwMDA4MDgwODAwMCksIENPTlNUNjQoMHg4MDgwODA4MDgwODA4MDAwKSwgQ09OU1Q2NCgweDgwODA4MDAwODA4MDgwODApLCBDT05TVDY0KDB4ODA4MDgwODA4MDgwODA4MCkKKyAgfSwgCit7IENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDQwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDA0MCksIENPTlNUNjQoMHgwMDAwMDA0MDAwMDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDAwNDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDA0MDQwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDQwMDAwMDAwMDA0MCksIENPTlNUNjQoMHgwMDAwNDA0MDAwMDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDA0MDAwKSwgQ09OU1Q2NCgweDAwMDAwMDQwMDAwMDQwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwNDA0MCksIENPTlNUNjQoMHgwMDAwMDA0MDAwMDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDAwNDAwMDAwMDA0MDAwKSwgQ09OU1Q2NCgweDAwMDA0MDQwMDAwMDQwMDApLCBDT05TVDY0KDB4MDAwMDQwMDAwMDAwNDA0MCksIENPTlNUNjQoMHgwMDAwNDA0MDAwMDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDQwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwNDAwMDQwMDAwMDAwMDApLCBDT05TVDY0KDB4MDA0MDAwMDAwMDAwMDA0MCksIENPTlNUNjQoMHgwMDQwMDA0MDAwMDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDQwNDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwNDA0MDQwMDAwMDAwMDApLCBDT05TVDY0KDB4MDA0MDQwMDAwMDAwMDA0MCksIENPTlNUNjQoMHgwMDQwNDA0MDAwMDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDQwMDAwMDAwMDA0MDAwKSwgQ09OU1Q2NCgweDAwNDAwMDQwMDAwMDQwMDApLCBDT05TVDY0KDB4MDA0MDAwMDAwMDAwNDA0MCksIENPTlNUNjQoMHgwMDQwMDA0MDAwMDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDQwNDAwMDAwMDA0MDAwKSwgQ09OU1Q2NCgweDAwNDA0MDQwMDAwMDQwMDApLCBDT05TVDY0KDB4MDA0MDQwMDAwMDAwNDA0MCksIENPTlNUNjQoMHgwMDQwNDA0MDAwMDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwNDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDQwMDA0MDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDQwMDA0MCksIENPTlNUNjQoMHgwMDAwMDA0MDAwNDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDAwNDAwMDAwNDAwMDAwKSwgQ09OU1Q2NCgweDAwMDA0MDQwMDA0MDAwMDApLCBDT05TVDY0KDB4MDAwMDQwMDAwMDQwMDA0MCksIENPTlNUNjQoMHgwMDAwNDA0MDAwNDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwNDA0MDAwKSwgQ09OU1Q2NCgweDAwMDAwMDQwMDA0MDQwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDQwNDA0MCksIENPTlNUNjQoMHgwMDAwMDA0MDAwNDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDAwNDAwMDAwNDA0MDAwKSwgQ09OU1Q2NCgweDAwMDA0MDQwMDA0MDQwMDApLCBDT05TVDY0KDB4MDAwMDQwMDAwMDQwNDA0MCksIENPTlNUNjQoMHgwMDAwNDA0MDAwNDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDQwMDAwMDAwNDAwMDAwKSwgQ09OU1Q2NCgweDAwNDAwMDQwMDA0MDAwMDApLCBDT05TVDY0KDB4MDA0MDAwMDAwMDQwMDA0MCksIENPTlNUNjQoMHgwMDQwMDA0MDAwNDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDQwNDAwMDAwNDAwMDAwKSwgQ09OU1Q2NCgweDAwNDA0MDQwMDA0MDAwMDApLCBDT05TVDY0KDB4MDA0MDQwMDAwMDQwMDA0MCksIENPTlNUNjQoMHgwMDQwNDA0MDAwNDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDQwMDAwMDAwNDA0MDAwKSwgQ09OU1Q2NCgweDAwNDAwMDQwMDA0MDQwMDApLCBDT05TVDY0KDB4MDA0MDAwMDAwMDQwNDA0MCksIENPTlNUNjQoMHgwMDQwMDA0MDAwNDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDQwNDAwMDAwNDA0MDAwKSwgQ09OU1Q2NCgweDAwNDA0MDQwMDA0MDQwMDApLCBDT05TVDY0KDB4MDA0MDQwMDAwMDQwNDA0MCksIENPTlNUNjQoMHgwMDQwNDA0MDAwNDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDQwMDAwMDQwMDAwMDAwMDApLCBDT05TVDY0KDB4NDAwMDAwMDAwMDAwMDA0MCksIENPTlNUNjQoMHg0MDAwMDA0MDAwMDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDAwNDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDQwMDA0MDQwMDAwMDAwMDApLCBDT05TVDY0KDB4NDAwMDQwMDAwMDAwMDA0MCksIENPTlNUNjQoMHg0MDAwNDA0MDAwMDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDAwMDAwMDAwMDA0MDAwKSwgQ09OU1Q2NCgweDQwMDAwMDQwMDAwMDQwMDApLCBDT05TVDY0KDB4NDAwMDAwMDAwMDAwNDA0MCksIENPTlNUNjQoMHg0MDAwMDA0MDAwMDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDAwNDAwMDAwMDA0MDAwKSwgQ09OU1Q2NCgweDQwMDA0MDQwMDAwMDQwMDApLCBDT05TVDY0KDB4NDAwMDQwMDAwMDAwNDA0MCksIENPTlNUNjQoMHg0MDAwNDA0MDAwMDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDQwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDQwNDAwMDQwMDAwMDAwMDApLCBDT05TVDY0KDB4NDA0MDAwMDAwMDAwMDA0MCksIENPTlNUNjQoMHg0MDQwMDA0MDAwMDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDQwNDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDQwNDA0MDQwMDAwMDAwMDApLCBDT05TVDY0KDB4NDA0MDQwMDAwMDAwMDA0MCksIENPTlNUNjQoMHg0MDQwNDA0MDAwMDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDQwMDAwMDAwMDA0MDAwKSwgQ09OU1Q2NCgweDQwNDAwMDQwMDAwMDQwMDApLCBDT05TVDY0KDB4NDA0MDAwMDAwMDAwNDA0MCksIENPTlNUNjQoMHg0MDQwMDA0MDAwMDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDQwNDAwMDAwMDA0MDAwKSwgQ09OU1Q2NCgweDQwNDA0MDQwMDAwMDQwMDApLCBDT05TVDY0KDB4NDA0MDQwMDAwMDAwNDA0MCksIENPTlNUNjQoMHg0MDQwNDA0MDAwMDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDAwMDAwMDAwNDAwMDAwKSwgQ09OU1Q2NCgweDQwMDAwMDQwMDA0MDAwMDApLCBDT05TVDY0KDB4NDAwMDAwMDAwMDQwMDA0MCksIENPTlNUNjQoMHg0MDAwMDA0MDAwNDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDAwNDAwMDAwNDAwMDAwKSwgQ09OU1Q2NCgweDQwMDA0MDQwMDA0MDAwMDApLCBDT05TVDY0KDB4NDAwMDQwMDAwMDQwMDA0MCksIENPTlNUNjQoMHg0MDAwNDA0MDAwNDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDAwMDAwMDAwNDA0MDAwKSwgQ09OU1Q2NCgweDQwMDAwMDQwMDA0MDQwMDApLCBDT05TVDY0KDB4NDAwMDAwMDAwMDQwNDA0MCksIENPTlNUNjQoMHg0MDAwMDA0MDAwNDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDAwNDAwMDAwNDA0MDAwKSwgQ09OU1Q2NCgweDQwMDA0MDQwMDA0MDQwMDApLCBDT05TVDY0KDB4NDAwMDQwMDAwMDQwNDA0MCksIENPTlNUNjQoMHg0MDAwNDA0MDAwNDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDQwMDAwMDAwNDAwMDAwKSwgQ09OU1Q2NCgweDQwNDAwMDQwMDA0MDAwMDApLCBDT05TVDY0KDB4NDA0MDAwMDAwMDQwMDA0MCksIENPTlNUNjQoMHg0MDQwMDA0MDAwNDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDQwNDAwMDAwNDAwMDAwKSwgQ09OU1Q2NCgweDQwNDA0MDQwMDA0MDAwMDApLCBDT05TVDY0KDB4NDA0MDQwMDAwMDQwMDA0MCksIENPTlNUNjQoMHg0MDQwNDA0MDAwNDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDQwMDAwMDAwNDA0MDAwKSwgQ09OU1Q2NCgweDQwNDAwMDQwMDA0MDQwMDApLCBDT05TVDY0KDB4NDA0MDAwMDAwMDQwNDA0MCksIENPTlNUNjQoMHg0MDQwMDA0MDAwNDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDQwNDAwMDAwNDA0MDAwKSwgQ09OU1Q2NCgweDQwNDA0MDQwMDA0MDQwMDApLCBDT05TVDY0KDB4NDA0MDQwMDAwMDQwNDA0MCksIENPTlNUNjQoMHg0MDQwNDA0MDAwNDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDQwNDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDA0MDAwMDA0MCksIENPTlNUNjQoMHgwMDAwMDA0MDQwMDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDAwNDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDA0MDQwNDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDQwMDA0MDAwMDA0MCksIENPTlNUNjQoMHgwMDAwNDA0MDQwMDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDAwMDAwMDQwNDAwMDQwMDApLCBDT05TVDY0KDB4MDAwMDAwMDA0MDAwNDA0MCksIENPTlNUNjQoMHgwMDAwMDA0MDQwMDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDAwNDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDAwMDA0MDQwNDAwMDQwMDApLCBDT05TVDY0KDB4MDAwMDQwMDA0MDAwNDA0MCksIENPTlNUNjQoMHgwMDAwNDA0MDQwMDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDQwMDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDAwNDAwMDQwNDAwMDAwMDApLCBDT05TVDY0KDB4MDA0MDAwMDA0MDAwMDA0MCksIENPTlNUNjQoMHgwMDQwMDA0MDQwMDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDQwNDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDAwNDA0MDQwNDAwMDAwMDApLCBDT05TVDY0KDB4MDA0MDQwMDA0MDAwMDA0MCksIENPTlNUNjQoMHgwMDQwNDA0MDQwMDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDQwMDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDAwNDAwMDQwNDAwMDQwMDApLCBDT05TVDY0KDB4MDA0MDAwMDA0MDAwNDA0MCksIENPTlNUNjQoMHgwMDQwMDA0MDQwMDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDQwNDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDAwNDA0MDQwNDAwMDQwMDApLCBDT05TVDY0KDB4MDA0MDQwMDA0MDAwNDA0MCksIENPTlNUNjQoMHgwMDQwNDA0MDQwMDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDQwNDA0MDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDA0MDQwMDA0MCksIENPTlNUNjQoMHgwMDAwMDA0MDQwNDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDAwNDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDAwMDA0MDQwNDA0MDAwMDApLCBDT05TVDY0KDB4MDAwMDQwMDA0MDQwMDA0MCksIENPTlNUNjQoMHgwMDAwNDA0MDQwNDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDAwMDAwMDQwNDA0MDQwMDApLCBDT05TVDY0KDB4MDAwMDAwMDA0MDQwNDA0MCksIENPTlNUNjQoMHgwMDAwMDA0MDQwNDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDAwNDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDAwMDA0MDQwNDA0MDQwMDApLCBDT05TVDY0KDB4MDAwMDQwMDA0MDQwNDA0MCksIENPTlNUNjQoMHgwMDAwNDA0MDQwNDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDQwMDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDAwNDAwMDQwNDA0MDAwMDApLCBDT05TVDY0KDB4MDA0MDAwMDA0MDQwMDA0MCksIENPTlNUNjQoMHgwMDQwMDA0MDQwNDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDQwNDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDAwNDA0MDQwNDA0MDAwMDApLCBDT05TVDY0KDB4MDA0MDQwMDA0MDQwMDA0MCksIENPTlNUNjQoMHgwMDQwNDA0MDQwNDAwMDQwKSwgCisgIENPTlNUNjQoMHgwMDQwMDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDAwNDAwMDQwNDA0MDQwMDApLCBDT05TVDY0KDB4MDA0MDAwMDA0MDQwNDA0MCksIENPTlNUNjQoMHgwMDQwMDA0MDQwNDA0MDQwKSwgCisgIENPTlNUNjQoMHgwMDQwNDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDAwNDA0MDQwNDA0MDQwMDApLCBDT05TVDY0KDB4MDA0MDQwMDA0MDQwNDA0MCksIENPTlNUNjQoMHgwMDQwNDA0MDQwNDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDAwMDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDQwMDAwMDQwNDAwMDAwMDApLCBDT05TVDY0KDB4NDAwMDAwMDA0MDAwMDA0MCksIENPTlNUNjQoMHg0MDAwMDA0MDQwMDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDAwNDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDQwMDA0MDQwNDAwMDAwMDApLCBDT05TVDY0KDB4NDAwMDQwMDA0MDAwMDA0MCksIENPTlNUNjQoMHg0MDAwNDA0MDQwMDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDAwMDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDQwMDAwMDQwNDAwMDQwMDApLCBDT05TVDY0KDB4NDAwMDAwMDA0MDAwNDA0MCksIENPTlNUNjQoMHg0MDAwMDA0MDQwMDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDAwNDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDQwMDA0MDQwNDAwMDQwMDApLCBDT05TVDY0KDB4NDAwMDQwMDA0MDAwNDA0MCksIENPTlNUNjQoMHg0MDAwNDA0MDQwMDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDQwMDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDQwNDAwMDQwNDAwMDAwMDApLCBDT05TVDY0KDB4NDA0MDAwMDA0MDAwMDA0MCksIENPTlNUNjQoMHg0MDQwMDA0MDQwMDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDQwNDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDQwNDA0MDQwNDAwMDAwMDApLCBDT05TVDY0KDB4NDA0MDQwMDA0MDAwMDA0MCksIENPTlNUNjQoMHg0MDQwNDA0MDQwMDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDQwMDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDQwNDAwMDQwNDAwMDQwMDApLCBDT05TVDY0KDB4NDA0MDAwMDA0MDAwNDA0MCksIENPTlNUNjQoMHg0MDQwMDA0MDQwMDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDQwNDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDQwNDA0MDQwNDAwMDQwMDApLCBDT05TVDY0KDB4NDA0MDQwMDA0MDAwNDA0MCksIENPTlNUNjQoMHg0MDQwNDA0MDQwMDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDAwMDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDQwMDAwMDQwNDA0MDAwMDApLCBDT05TVDY0KDB4NDAwMDAwMDA0MDQwMDA0MCksIENPTlNUNjQoMHg0MDAwMDA0MDQwNDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDAwNDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDQwMDA0MDQwNDA0MDAwMDApLCBDT05TVDY0KDB4NDAwMDQwMDA0MDQwMDA0MCksIENPTlNUNjQoMHg0MDAwNDA0MDQwNDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDAwMDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDQwMDAwMDQwNDA0MDQwMDApLCBDT05TVDY0KDB4NDAwMDAwMDA0MDQwNDA0MCksIENPTlNUNjQoMHg0MDAwMDA0MDQwNDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDAwNDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDQwMDA0MDQwNDA0MDQwMDApLCBDT05TVDY0KDB4NDAwMDQwMDA0MDQwNDA0MCksIENPTlNUNjQoMHg0MDAwNDA0MDQwNDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDQwMDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDQwNDAwMDQwNDA0MDAwMDApLCBDT05TVDY0KDB4NDA0MDAwMDA0MDQwMDA0MCksIENPTlNUNjQoMHg0MDQwMDA0MDQwNDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDQwNDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDQwNDA0MDQwNDA0MDAwMDApLCBDT05TVDY0KDB4NDA0MDQwMDA0MDQwMDA0MCksIENPTlNUNjQoMHg0MDQwNDA0MDQwNDAwMDQwKSwgCisgIENPTlNUNjQoMHg0MDQwMDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDQwNDAwMDQwNDA0MDQwMDApLCBDT05TVDY0KDB4NDA0MDAwMDA0MDQwNDA0MCksIENPTlNUNjQoMHg0MDQwMDA0MDQwNDA0MDQwKSwgCisgIENPTlNUNjQoMHg0MDQwNDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDQwNDA0MDQwNDA0MDQwMDApLCBDT05TVDY0KDB4NDA0MDQwMDA0MDQwNDA0MCksIENPTlNUNjQoMHg0MDQwNDA0MDQwNDA0MDQwKQorICB9LCAKK3sgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMjAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDIwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMDAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAyMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDIwMjAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMjAwMDAwMDAwMDIwKSwgQ09OU1Q2NCgweDAwMDAyMDIwMDAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDIwMDApLCBDT05TVDY0KDB4MDAwMDAwMjAwMDAwMjAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAyMDIwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMDAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAyMDAwMDAwMDIwMDApLCBDT05TVDY0KDB4MDAwMDIwMjAwMDAwMjAwMCksIENPTlNUNjQoMHgwMDAwMjAwMDAwMDAyMDIwKSwgQ09OU1Q2NCgweDAwMDAyMDIwMDAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAyMDAwMjAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDIwMDAwMDAwMDAwMDIwKSwgQ09OU1Q2NCgweDAwMjAwMDIwMDAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAyMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAyMDIwMjAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDIwMjAwMDAwMDAwMDIwKSwgQ09OU1Q2NCgweDAwMjAyMDIwMDAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAwMDAwMDAwMDIwMDApLCBDT05TVDY0KDB4MDAyMDAwMjAwMDAwMjAwMCksIENPTlNUNjQoMHgwMDIwMDAwMDAwMDAyMDIwKSwgQ09OU1Q2NCgweDAwMjAwMDIwMDAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAyMDAwMDAwMDIwMDApLCBDT05TVDY0KDB4MDAyMDIwMjAwMDAwMjAwMCksIENPTlNUNjQoMHgwMDIwMjAwMDAwMDAyMDIwKSwgQ09OU1Q2NCgweDAwMjAyMDIwMDAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAyMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMjAwMDIwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAwMjAwMDIwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMDAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAyMDAwMDAyMDAwMDApLCBDT05TVDY0KDB4MDAwMDIwMjAwMDIwMDAwMCksIENPTlNUNjQoMHgwMDAwMjAwMDAwMjAwMDIwKSwgQ09OU1Q2NCgweDAwMDAyMDIwMDAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAyMDIwMDApLCBDT05TVDY0KDB4MDAwMDAwMjAwMDIwMjAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAwMjAyMDIwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMDAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAyMDAwMDAyMDIwMDApLCBDT05TVDY0KDB4MDAwMDIwMjAwMDIwMjAwMCksIENPTlNUNjQoMHgwMDAwMjAwMDAwMjAyMDIwKSwgQ09OU1Q2NCgweDAwMDAyMDIwMDAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAwMDAwMDAyMDAwMDApLCBDT05TVDY0KDB4MDAyMDAwMjAwMDIwMDAwMCksIENPTlNUNjQoMHgwMDIwMDAwMDAwMjAwMDIwKSwgQ09OU1Q2NCgweDAwMjAwMDIwMDAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAyMDAwMDAyMDAwMDApLCBDT05TVDY0KDB4MDAyMDIwMjAwMDIwMDAwMCksIENPTlNUNjQoMHgwMDIwMjAwMDAwMjAwMDIwKSwgQ09OU1Q2NCgweDAwMjAyMDIwMDAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAwMDAwMDAyMDIwMDApLCBDT05TVDY0KDB4MDAyMDAwMjAwMDIwMjAwMCksIENPTlNUNjQoMHgwMDIwMDAwMDAwMjAyMDIwKSwgQ09OU1Q2NCgweDAwMjAwMDIwMDAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAyMDAwMDAyMDIwMDApLCBDT05TVDY0KDB4MDAyMDIwMjAwMDIwMjAwMCksIENPTlNUNjQoMHgwMDIwMjAwMDAwMjAyMDIwKSwgQ09OU1Q2NCgweDAwMjAyMDIwMDAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MjAwMDAwMjAwMDAwMDAwMCksIENPTlNUNjQoMHgyMDAwMDAwMDAwMDAwMDIwKSwgQ09OU1Q2NCgweDIwMDAwMDIwMDAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAyMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MjAwMDIwMjAwMDAwMDAwMCksIENPTlNUNjQoMHgyMDAwMjAwMDAwMDAwMDIwKSwgQ09OU1Q2NCgweDIwMDAyMDIwMDAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAwMDAwMDAwMDIwMDApLCBDT05TVDY0KDB4MjAwMDAwMjAwMDAwMjAwMCksIENPTlNUNjQoMHgyMDAwMDAwMDAwMDAyMDIwKSwgQ09OU1Q2NCgweDIwMDAwMDIwMDAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAyMDAwMDAwMDIwMDApLCBDT05TVDY0KDB4MjAwMDIwMjAwMDAwMjAwMCksIENPTlNUNjQoMHgyMDAwMjAwMDAwMDAyMDIwKSwgQ09OU1Q2NCgweDIwMDAyMDIwMDAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MjAyMDAwMjAwMDAwMDAwMCksIENPTlNUNjQoMHgyMDIwMDAwMDAwMDAwMDIwKSwgQ09OU1Q2NCgweDIwMjAwMDIwMDAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAyMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MjAyMDIwMjAwMDAwMDAwMCksIENPTlNUNjQoMHgyMDIwMjAwMDAwMDAwMDIwKSwgQ09OU1Q2NCgweDIwMjAyMDIwMDAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAwMDAwMDAwMDIwMDApLCBDT05TVDY0KDB4MjAyMDAwMjAwMDAwMjAwMCksIENPTlNUNjQoMHgyMDIwMDAwMDAwMDAyMDIwKSwgQ09OU1Q2NCgweDIwMjAwMDIwMDAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAyMDAwMDAwMDIwMDApLCBDT05TVDY0KDB4MjAyMDIwMjAwMDAwMjAwMCksIENPTlNUNjQoMHgyMDIwMjAwMDAwMDAyMDIwKSwgQ09OU1Q2NCgweDIwMjAyMDIwMDAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAwMDAwMDAyMDAwMDApLCBDT05TVDY0KDB4MjAwMDAwMjAwMDIwMDAwMCksIENPTlNUNjQoMHgyMDAwMDAwMDAwMjAwMDIwKSwgQ09OU1Q2NCgweDIwMDAwMDIwMDAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAyMDAwMDAyMDAwMDApLCBDT05TVDY0KDB4MjAwMDIwMjAwMDIwMDAwMCksIENPTlNUNjQoMHgyMDAwMjAwMDAwMjAwMDIwKSwgQ09OU1Q2NCgweDIwMDAyMDIwMDAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAwMDAwMDAyMDIwMDApLCBDT05TVDY0KDB4MjAwMDAwMjAwMDIwMjAwMCksIENPTlNUNjQoMHgyMDAwMDAwMDAwMjAyMDIwKSwgQ09OU1Q2NCgweDIwMDAwMDIwMDAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAyMDAwMDAyMDIwMDApLCBDT05TVDY0KDB4MjAwMDIwMjAwMDIwMjAwMCksIENPTlNUNjQoMHgyMDAwMjAwMDAwMjAyMDIwKSwgQ09OU1Q2NCgweDIwMDAyMDIwMDAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAwMDAwMDAyMDAwMDApLCBDT05TVDY0KDB4MjAyMDAwMjAwMDIwMDAwMCksIENPTlNUNjQoMHgyMDIwMDAwMDAwMjAwMDIwKSwgQ09OU1Q2NCgweDIwMjAwMDIwMDAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAyMDAwMDAyMDAwMDApLCBDT05TVDY0KDB4MjAyMDIwMjAwMDIwMDAwMCksIENPTlNUNjQoMHgyMDIwMjAwMDAwMjAwMDIwKSwgQ09OU1Q2NCgweDIwMjAyMDIwMDAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAwMDAwMDAyMDIwMDApLCBDT05TVDY0KDB4MjAyMDAwMjAwMDIwMjAwMCksIENPTlNUNjQoMHgyMDIwMDAwMDAwMjAyMDIwKSwgQ09OU1Q2NCgweDIwMjAwMDIwMDAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAyMDAwMDAyMDIwMDApLCBDT05TVDY0KDB4MjAyMDIwMjAwMDIwMjAwMCksIENPTlNUNjQoMHgyMDIwMjAwMDAwMjAyMDIwKSwgQ09OU1Q2NCgweDIwMjAyMDIwMDAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMjAyMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDIwMDAwMDIwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMjAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAyMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDIwMjAyMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMjAwMDIwMDAwMDIwKSwgQ09OU1Q2NCgweDAwMDAyMDIwMjAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MDAwMDAwMjAyMDAwMjAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDIwMDAyMDIwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMjAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAyMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MDAwMDIwMjAyMDAwMjAwMCksIENPTlNUNjQoMHgwMDAwMjAwMDIwMDAyMDIwKSwgQ09OU1Q2NCgweDAwMDAyMDIwMjAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAwMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MDAyMDAwMjAyMDAwMDAwMCksIENPTlNUNjQoMHgwMDIwMDAwMDIwMDAwMDIwKSwgQ09OU1Q2NCgweDAwMjAwMDIwMjAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAyMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MDAyMDIwMjAyMDAwMDAwMCksIENPTlNUNjQoMHgwMDIwMjAwMDIwMDAwMDIwKSwgQ09OU1Q2NCgweDAwMjAyMDIwMjAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAwMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MDAyMDAwMjAyMDAwMjAwMCksIENPTlNUNjQoMHgwMDIwMDAwMDIwMDAyMDIwKSwgQ09OU1Q2NCgweDAwMjAwMDIwMjAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAyMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MDAyMDIwMjAyMDAwMjAwMCksIENPTlNUNjQoMHgwMDIwMjAwMDIwMDAyMDIwKSwgQ09OU1Q2NCgweDAwMjAyMDIwMjAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMjAyMDIwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDIwMjAwMDIwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMjAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAyMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MDAwMDIwMjAyMDIwMDAwMCksIENPTlNUNjQoMHgwMDAwMjAwMDIwMjAwMDIwKSwgQ09OU1Q2NCgweDAwMDAyMDIwMjAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MDAwMDAwMjAyMDIwMjAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDIwMjAyMDIwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMjAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMDAyMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MDAwMDIwMjAyMDIwMjAwMCksIENPTlNUNjQoMHgwMDAwMjAwMDIwMjAyMDIwKSwgQ09OU1Q2NCgweDAwMDAyMDIwMjAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAwMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MDAyMDAwMjAyMDIwMDAwMCksIENPTlNUNjQoMHgwMDIwMDAwMDIwMjAwMDIwKSwgQ09OU1Q2NCgweDAwMjAwMDIwMjAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAyMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MDAyMDIwMjAyMDIwMDAwMCksIENPTlNUNjQoMHgwMDIwMjAwMDIwMjAwMDIwKSwgQ09OU1Q2NCgweDAwMjAyMDIwMjAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAwMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MDAyMDAwMjAyMDIwMjAwMCksIENPTlNUNjQoMHgwMDIwMDAwMDIwMjAyMDIwKSwgQ09OU1Q2NCgweDAwMjAwMDIwMjAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDAwMjAyMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MDAyMDIwMjAyMDIwMjAwMCksIENPTlNUNjQoMHgwMDIwMjAwMDIwMjAyMDIwKSwgQ09OU1Q2NCgweDAwMjAyMDIwMjAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAwMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MjAwMDAwMjAyMDAwMDAwMCksIENPTlNUNjQoMHgyMDAwMDAwMDIwMDAwMDIwKSwgQ09OU1Q2NCgweDIwMDAwMDIwMjAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAyMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MjAwMDIwMjAyMDAwMDAwMCksIENPTlNUNjQoMHgyMDAwMjAwMDIwMDAwMDIwKSwgQ09OU1Q2NCgweDIwMDAyMDIwMjAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAwMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MjAwMDAwMjAyMDAwMjAwMCksIENPTlNUNjQoMHgyMDAwMDAwMDIwMDAyMDIwKSwgQ09OU1Q2NCgweDIwMDAwMDIwMjAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAyMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MjAwMDIwMjAyMDAwMjAwMCksIENPTlNUNjQoMHgyMDAwMjAwMDIwMDAyMDIwKSwgQ09OU1Q2NCgweDIwMDAyMDIwMjAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAwMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MjAyMDAwMjAyMDAwMDAwMCksIENPTlNUNjQoMHgyMDIwMDAwMDIwMDAwMDIwKSwgQ09OU1Q2NCgweDIwMjAwMDIwMjAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAyMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MjAyMDIwMjAyMDAwMDAwMCksIENPTlNUNjQoMHgyMDIwMjAwMDIwMDAwMDIwKSwgQ09OU1Q2NCgweDIwMjAyMDIwMjAwMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAwMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MjAyMDAwMjAyMDAwMjAwMCksIENPTlNUNjQoMHgyMDIwMDAwMDIwMDAyMDIwKSwgQ09OU1Q2NCgweDIwMjAwMDIwMjAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAyMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MjAyMDIwMjAyMDAwMjAwMCksIENPTlNUNjQoMHgyMDIwMjAwMDIwMDAyMDIwKSwgQ09OU1Q2NCgweDIwMjAyMDIwMjAwMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAwMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MjAwMDAwMjAyMDIwMDAwMCksIENPTlNUNjQoMHgyMDAwMDAwMDIwMjAwMDIwKSwgQ09OU1Q2NCgweDIwMDAwMDIwMjAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAyMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MjAwMDIwMjAyMDIwMDAwMCksIENPTlNUNjQoMHgyMDAwMjAwMDIwMjAwMDIwKSwgQ09OU1Q2NCgweDIwMDAyMDIwMjAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAwMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MjAwMDAwMjAyMDIwMjAwMCksIENPTlNUNjQoMHgyMDAwMDAwMDIwMjAyMDIwKSwgQ09OU1Q2NCgweDIwMDAwMDIwMjAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMDAyMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MjAwMDIwMjAyMDIwMjAwMCksIENPTlNUNjQoMHgyMDAwMjAwMDIwMjAyMDIwKSwgQ09OU1Q2NCgweDIwMDAyMDIwMjAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAwMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MjAyMDAwMjAyMDIwMDAwMCksIENPTlNUNjQoMHgyMDIwMDAwMDIwMjAwMDIwKSwgQ09OU1Q2NCgweDIwMjAwMDIwMjAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAyMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MjAyMDIwMjAyMDIwMDAwMCksIENPTlNUNjQoMHgyMDIwMjAwMDIwMjAwMDIwKSwgQ09OU1Q2NCgweDIwMjAyMDIwMjAyMDAwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAwMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MjAyMDAwMjAyMDIwMjAwMCksIENPTlNUNjQoMHgyMDIwMDAwMDIwMjAyMDIwKSwgQ09OU1Q2NCgweDIwMjAwMDIwMjAyMDIwMjApLCAKKyAgQ09OU1Q2NCgweDIwMjAyMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MjAyMDIwMjAyMDIwMjAwMCksIENPTlNUNjQoMHgyMDIwMjAwMDIwMjAyMDIwKSwgQ09OU1Q2NCgweDIwMjAyMDIwMjAyMDIwMjApCisgIH19OworICAKK3N0YXRpYyBjb25zdCB1bG9uZzY0IGRlc19mcFs4XVsyNTZdID0geworCit7IENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDgwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMjAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDA4MDAyMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDgwMDAwMjAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMjAyMDAwMCksIENPTlNUNjQoMHgwMDAwMDA4MDAyMDIwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAwMDAwMDgwMDAwMDAyMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMjAwMDIwMCksIENPTlNUNjQoMHgwMDAwMDA4MDAyMDAwMjAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAwMDAwMDgwMDAwMjAyMDApLCBDT05TVDY0KDB4MDAwMDAwMDAwMjAyMDIwMCksIENPTlNUNjQoMHgwMDAwMDA4MDAyMDIwMjAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDAyKSwgQ09OU1Q2NCgweDAwMDAwMDgwMDAwMDAwMDIpLCBDT05TVDY0KDB4MDAwMDAwMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMDAwMDA4MDAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDIwMDAyKSwgQ09OU1Q2NCgweDAwMDAwMDgwMDAwMjAwMDIpLCBDT05TVDY0KDB4MDAwMDAwMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMDAwMDA4MDAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMjAyKSwgQ09OU1Q2NCgweDAwMDAwMDgwMDAwMDAyMDIpLCBDT05TVDY0KDB4MDAwMDAwMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMDAwMDA4MDAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDIwMjAyKSwgQ09OU1Q2NCgweDAwMDAwMDgwMDAwMjAyMDIpLCBDT05TVDY0KDB4MDAwMDAwMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMDAwMDA4MDAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAyMDAwMDgwMDAwMDAwMDApLCBDT05TVDY0KDB4MDIwMDAwMDAwMjAwMDAwMCksIENPTlNUNjQoMHgwMjAwMDA4MDAyMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAyMDAwMDgwMDAwMjAwMDApLCBDT05TVDY0KDB4MDIwMDAwMDAwMjAyMDAwMCksIENPTlNUNjQoMHgwMjAwMDA4MDAyMDIwMDAwKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAyMDAwMDgwMDAwMDAyMDApLCBDT05TVDY0KDB4MDIwMDAwMDAwMjAwMDIwMCksIENPTlNUNjQoMHgwMjAwMDA4MDAyMDAwMjAwKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAyMDAwMDgwMDAwMjAyMDApLCBDT05TVDY0KDB4MDIwMDAwMDAwMjAyMDIwMCksIENPTlNUNjQoMHgwMjAwMDA4MDAyMDIwMjAwKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAwMDAwMDAyKSwgQ09OU1Q2NCgweDAyMDAwMDgwMDAwMDAwMDIpLCBDT05TVDY0KDB4MDIwMDAwMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMjAwMDA4MDAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAwMDIwMDAyKSwgQ09OU1Q2NCgweDAyMDAwMDgwMDAwMjAwMDIpLCBDT05TVDY0KDB4MDIwMDAwMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMjAwMDA4MDAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAwMDAwMjAyKSwgQ09OU1Q2NCgweDAyMDAwMDgwMDAwMDAyMDIpLCBDT05TVDY0KDB4MDIwMDAwMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMjAwMDA4MDAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDAwMDAwMDIwMjAyKSwgQ09OU1Q2NCgweDAyMDAwMDgwMDAwMjAyMDIpLCBDT05TVDY0KDB4MDIwMDAwMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMjAwMDA4MDAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDIwMDgwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMjAwMDAwMjAwMDAwMCksIENPTlNUNjQoMHgwMDAyMDA4MDAyMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAwMDIwMDgwMDAwMjAwMDApLCBDT05TVDY0KDB4MDAwMjAwMDAwMjAyMDAwMCksIENPTlNUNjQoMHgwMDAyMDA4MDAyMDIwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAwMDIwMDgwMDAwMDAyMDApLCBDT05TVDY0KDB4MDAwMjAwMDAwMjAwMDIwMCksIENPTlNUNjQoMHgwMDAyMDA4MDAyMDAwMjAwKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAwMDIwMDgwMDAwMjAyMDApLCBDT05TVDY0KDB4MDAwMjAwMDAwMjAyMDIwMCksIENPTlNUNjQoMHgwMDAyMDA4MDAyMDIwMjAwKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAwMDAwMDAyKSwgQ09OU1Q2NCgweDAwMDIwMDgwMDAwMDAwMDIpLCBDT05TVDY0KDB4MDAwMjAwMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMDAyMDA4MDAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAwMDIwMDAyKSwgQ09OU1Q2NCgweDAwMDIwMDgwMDAwMjAwMDIpLCBDT05TVDY0KDB4MDAwMjAwMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMDAyMDA4MDAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAwMDAwMjAyKSwgQ09OU1Q2NCgweDAwMDIwMDgwMDAwMDAyMDIpLCBDT05TVDY0KDB4MDAwMjAwMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMDAyMDA4MDAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDAwMDAwMDIwMjAyKSwgQ09OU1Q2NCgweDAwMDIwMDgwMDAwMjAyMDIpLCBDT05TVDY0KDB4MDAwMjAwMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMDAyMDA4MDAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAyMDIwMDgwMDAwMDAwMDApLCBDT05TVDY0KDB4MDIwMjAwMDAwMjAwMDAwMCksIENPTlNUNjQoMHgwMjAyMDA4MDAyMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAyMDIwMDgwMDAwMjAwMDApLCBDT05TVDY0KDB4MDIwMjAwMDAwMjAyMDAwMCksIENPTlNUNjQoMHgwMjAyMDA4MDAyMDIwMDAwKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAyMDIwMDgwMDAwMDAyMDApLCBDT05TVDY0KDB4MDIwMjAwMDAwMjAwMDIwMCksIENPTlNUNjQoMHgwMjAyMDA4MDAyMDAwMjAwKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAyMDIwMDgwMDAwMjAyMDApLCBDT05TVDY0KDB4MDIwMjAwMDAwMjAyMDIwMCksIENPTlNUNjQoMHgwMjAyMDA4MDAyMDIwMjAwKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAwMDAwMDAyKSwgQ09OU1Q2NCgweDAyMDIwMDgwMDAwMDAwMDIpLCBDT05TVDY0KDB4MDIwMjAwMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMjAyMDA4MDAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAwMDIwMDAyKSwgQ09OU1Q2NCgweDAyMDIwMDgwMDAwMjAwMDIpLCBDT05TVDY0KDB4MDIwMjAwMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMjAyMDA4MDAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAwMDAwMjAyKSwgQ09OU1Q2NCgweDAyMDIwMDgwMDAwMDAyMDIpLCBDT05TVDY0KDB4MDIwMjAwMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMjAyMDA4MDAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDAwMDAwMDIwMjAyKSwgQ09OU1Q2NCgweDAyMDIwMDgwMDAwMjAyMDIpLCBDT05TVDY0KDB4MDIwMjAwMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMjAyMDA4MDAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMjgwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAyMDAwMjAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDI4MDAyMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMjgwMDAwMjAwMDApLCBDT05TVDY0KDB4MDAwMDAyMDAwMjAyMDAwMCksIENPTlNUNjQoMHgwMDAwMDI4MDAyMDIwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAwMDAwMjgwMDAwMDAyMDApLCBDT05TVDY0KDB4MDAwMDAyMDAwMjAwMDIwMCksIENPTlNUNjQoMHgwMDAwMDI4MDAyMDAwMjAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAwMDAwMjgwMDAwMjAyMDApLCBDT05TVDY0KDB4MDAwMDAyMDAwMjAyMDIwMCksIENPTlNUNjQoMHgwMDAwMDI4MDAyMDIwMjAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAwMDAwMDAyKSwgQ09OU1Q2NCgweDAwMDAwMjgwMDAwMDAwMDIpLCBDT05TVDY0KDB4MDAwMDAyMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMDAwMDI4MDAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAwMDIwMDAyKSwgQ09OU1Q2NCgweDAwMDAwMjgwMDAwMjAwMDIpLCBDT05TVDY0KDB4MDAwMDAyMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMDAwMDI4MDAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAwMDAwMjAyKSwgQ09OU1Q2NCgweDAwMDAwMjgwMDAwMDAyMDIpLCBDT05TVDY0KDB4MDAwMDAyMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMDAwMDI4MDAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAwMDIwMDAwMDIwMjAyKSwgQ09OU1Q2NCgweDAwMDAwMjgwMDAwMjAyMDIpLCBDT05TVDY0KDB4MDAwMDAyMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMDAwMDI4MDAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAyMDAwMjgwMDAwMDAwMDApLCBDT05TVDY0KDB4MDIwMDAyMDAwMjAwMDAwMCksIENPTlNUNjQoMHgwMjAwMDI4MDAyMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAyMDAwMjgwMDAwMjAwMDApLCBDT05TVDY0KDB4MDIwMDAyMDAwMjAyMDAwMCksIENPTlNUNjQoMHgwMjAwMDI4MDAyMDIwMDAwKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAyMDAwMjgwMDAwMDAyMDApLCBDT05TVDY0KDB4MDIwMDAyMDAwMjAwMDIwMCksIENPTlNUNjQoMHgwMjAwMDI4MDAyMDAwMjAwKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAyMDAwMjgwMDAwMjAyMDApLCBDT05TVDY0KDB4MDIwMDAyMDAwMjAyMDIwMCksIENPTlNUNjQoMHgwMjAwMDI4MDAyMDIwMjAwKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAwMDAwMDAyKSwgQ09OU1Q2NCgweDAyMDAwMjgwMDAwMDAwMDIpLCBDT05TVDY0KDB4MDIwMDAyMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMjAwMDI4MDAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAwMDIwMDAyKSwgQ09OU1Q2NCgweDAyMDAwMjgwMDAwMjAwMDIpLCBDT05TVDY0KDB4MDIwMDAyMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMjAwMDI4MDAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAwMDAwMjAyKSwgQ09OU1Q2NCgweDAyMDAwMjgwMDAwMDAyMDIpLCBDT05TVDY0KDB4MDIwMDAyMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMjAwMDI4MDAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAwMDIwMDAwMDIwMjAyKSwgQ09OU1Q2NCgweDAyMDAwMjgwMDAwMjAyMDIpLCBDT05TVDY0KDB4MDIwMDAyMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMjAwMDI4MDAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDIwMjgwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMjAyMDAwMjAwMDAwMCksIENPTlNUNjQoMHgwMDAyMDI4MDAyMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAwMDIwMjgwMDAwMjAwMDApLCBDT05TVDY0KDB4MDAwMjAyMDAwMjAyMDAwMCksIENPTlNUNjQoMHgwMDAyMDI4MDAyMDIwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAwMDIwMjgwMDAwMDAyMDApLCBDT05TVDY0KDB4MDAwMjAyMDAwMjAwMDIwMCksIENPTlNUNjQoMHgwMDAyMDI4MDAyMDAwMjAwKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAwMDIwMjgwMDAwMjAyMDApLCBDT05TVDY0KDB4MDAwMjAyMDAwMjAyMDIwMCksIENPTlNUNjQoMHgwMDAyMDI4MDAyMDIwMjAwKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAwMDAwMDAyKSwgQ09OU1Q2NCgweDAwMDIwMjgwMDAwMDAwMDIpLCBDT05TVDY0KDB4MDAwMjAyMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMDAyMDI4MDAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAwMDIwMDAyKSwgQ09OU1Q2NCgweDAwMDIwMjgwMDAwMjAwMDIpLCBDT05TVDY0KDB4MDAwMjAyMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMDAyMDI4MDAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAwMDAwMjAyKSwgQ09OU1Q2NCgweDAwMDIwMjgwMDAwMDAyMDIpLCBDT05TVDY0KDB4MDAwMjAyMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMDAyMDI4MDAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMDAyMDIwMDAwMDIwMjAyKSwgQ09OU1Q2NCgweDAwMDIwMjgwMDAwMjAyMDIpLCBDT05TVDY0KDB4MDAwMjAyMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMDAyMDI4MDAyMDIwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAyMDIwMjgwMDAwMDAwMDApLCBDT05TVDY0KDB4MDIwMjAyMDAwMjAwMDAwMCksIENPTlNUNjQoMHgwMjAyMDI4MDAyMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAwMDIwMDAwKSwgQ09OU1Q2NCgweDAyMDIwMjgwMDAwMjAwMDApLCBDT05TVDY0KDB4MDIwMjAyMDAwMjAyMDAwMCksIENPTlNUNjQoMHgwMjAyMDI4MDAyMDIwMDAwKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAwMDAwMjAwKSwgQ09OU1Q2NCgweDAyMDIwMjgwMDAwMDAyMDApLCBDT05TVDY0KDB4MDIwMjAyMDAwMjAwMDIwMCksIENPTlNUNjQoMHgwMjAyMDI4MDAyMDAwMjAwKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAwMDIwMjAwKSwgQ09OU1Q2NCgweDAyMDIwMjgwMDAwMjAyMDApLCBDT05TVDY0KDB4MDIwMjAyMDAwMjAyMDIwMCksIENPTlNUNjQoMHgwMjAyMDI4MDAyMDIwMjAwKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAwMDAwMDAyKSwgQ09OU1Q2NCgweDAyMDIwMjgwMDAwMDAwMDIpLCBDT05TVDY0KDB4MDIwMjAyMDAwMjAwMDAwMiksIENPTlNUNjQoMHgwMjAyMDI4MDAyMDAwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAwMDIwMDAyKSwgQ09OU1Q2NCgweDAyMDIwMjgwMDAwMjAwMDIpLCBDT05TVDY0KDB4MDIwMjAyMDAwMjAyMDAwMiksIENPTlNUNjQoMHgwMjAyMDI4MDAyMDIwMDAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAwMDAwMjAyKSwgQ09OU1Q2NCgweDAyMDIwMjgwMDAwMDAyMDIpLCBDT05TVDY0KDB4MDIwMjAyMDAwMjAwMDIwMiksIENPTlNUNjQoMHgwMjAyMDI4MDAyMDAwMjAyKSwgCisgIENPTlNUNjQoMHgwMjAyMDIwMDAwMDIwMjAyKSwgQ09OU1Q2NCgweDAyMDIwMjgwMDAwMjAyMDIpLCBDT05TVDY0KDB4MDIwMjAyMDAwMjAyMDIwMiksIENPTlNUNjQoMHgwMjAyMDI4MDAyMDIwMjAyKQorICB9LCAKK3sgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDIwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDA4MDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAyMDgwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwODAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDIwMDA4MDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDA4MDgwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAyMDgwODAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDAwMDAwMDIwMDAwMDgwMCksIENPTlNUNjQoMHgwMDAwMDAwMDA4MDAwODAwKSwgQ09OU1Q2NCgweDAwMDAwMDAyMDgwMDA4MDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwODA4MDApLCBDT05TVDY0KDB4MDAwMDAwMDIwMDA4MDgwMCksIENPTlNUNjQoMHgwMDAwMDAwMDA4MDgwODAwKSwgQ09OU1Q2NCgweDAwMDAwMDAyMDgwODA4MDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwMDgpLCBDT05TVDY0KDB4MDAwMDAwMDIwMDAwMDAwOCksIENPTlNUNjQoMHgwMDAwMDAwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDAwMDAwMDAyMDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwODAwMDgpLCBDT05TVDY0KDB4MDAwMDAwMDIwMDA4MDAwOCksIENPTlNUNjQoMHgwMDAwMDAwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDAwMDAwMDAyMDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDA4MDgpLCBDT05TVDY0KDB4MDAwMDAwMDIwMDAwMDgwOCksIENPTlNUNjQoMHgwMDAwMDAwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDAwMDAwMDAyMDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwODA4MDgpLCBDT05TVDY0KDB4MDAwMDAwMDIwMDA4MDgwOCksIENPTlNUNjQoMHgwMDAwMDAwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDAwMDAwMDAyMDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDgwMDAwMDIwMDAwMDAwMCksIENPTlNUNjQoMHgwODAwMDAwMDA4MDAwMDAwKSwgQ09OU1Q2NCgweDA4MDAwMDAyMDgwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDAwODAwMDApLCBDT05TVDY0KDB4MDgwMDAwMDIwMDA4MDAwMCksIENPTlNUNjQoMHgwODAwMDAwMDA4MDgwMDAwKSwgQ09OU1Q2NCgweDA4MDAwMDAyMDgwODAwMDApLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDgwMDAwMDIwMDAwMDgwMCksIENPTlNUNjQoMHgwODAwMDAwMDA4MDAwODAwKSwgQ09OU1Q2NCgweDA4MDAwMDAyMDgwMDA4MDApLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDAwODA4MDApLCBDT05TVDY0KDB4MDgwMDAwMDIwMDA4MDgwMCksIENPTlNUNjQoMHgwODAwMDAwMDA4MDgwODAwKSwgQ09OU1Q2NCgweDA4MDAwMDAyMDgwODA4MDApLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDAwMDAwMDgpLCBDT05TVDY0KDB4MDgwMDAwMDIwMDAwMDAwOCksIENPTlNUNjQoMHgwODAwMDAwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDA4MDAwMDAyMDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDAwODAwMDgpLCBDT05TVDY0KDB4MDgwMDAwMDIwMDA4MDAwOCksIENPTlNUNjQoMHgwODAwMDAwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDA4MDAwMDAyMDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDAwMDA4MDgpLCBDT05TVDY0KDB4MDgwMDAwMDIwMDAwMDgwOCksIENPTlNUNjQoMHgwODAwMDAwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDA4MDAwMDAyMDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwMDAwMDAwODA4MDgpLCBDT05TVDY0KDB4MDgwMDAwMDIwMDA4MDgwOCksIENPTlNUNjQoMHgwODAwMDAwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDA4MDAwMDAyMDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwODAwMDIwMDAwMDAwMCksIENPTlNUNjQoMHgwMDA4MDAwMDA4MDAwMDAwKSwgQ09OU1Q2NCgweDAwMDgwMDAyMDgwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDAwODAwMDApLCBDT05TVDY0KDB4MDAwODAwMDIwMDA4MDAwMCksIENPTlNUNjQoMHgwMDA4MDAwMDA4MDgwMDAwKSwgQ09OU1Q2NCgweDAwMDgwMDAyMDgwODAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDAwODAwMDIwMDAwMDgwMCksIENPTlNUNjQoMHgwMDA4MDAwMDA4MDAwODAwKSwgQ09OU1Q2NCgweDAwMDgwMDAyMDgwMDA4MDApLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDAwODA4MDApLCBDT05TVDY0KDB4MDAwODAwMDIwMDA4MDgwMCksIENPTlNUNjQoMHgwMDA4MDAwMDA4MDgwODAwKSwgQ09OU1Q2NCgweDAwMDgwMDAyMDgwODA4MDApLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDAwMDAwMDgpLCBDT05TVDY0KDB4MDAwODAwMDIwMDAwMDAwOCksIENPTlNUNjQoMHgwMDA4MDAwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDAwMDgwMDAyMDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDAwODAwMDgpLCBDT05TVDY0KDB4MDAwODAwMDIwMDA4MDAwOCksIENPTlNUNjQoMHgwMDA4MDAwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDAwMDgwMDAyMDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDAwMDA4MDgpLCBDT05TVDY0KDB4MDAwODAwMDIwMDAwMDgwOCksIENPTlNUNjQoMHgwMDA4MDAwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDAwMDgwMDAyMDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwMDAwMDAwODA4MDgpLCBDT05TVDY0KDB4MDAwODAwMDIwMDA4MDgwOCksIENPTlNUNjQoMHgwMDA4MDAwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDAwMDgwMDAyMDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDgwODAwMDIwMDAwMDAwMCksIENPTlNUNjQoMHgwODA4MDAwMDA4MDAwMDAwKSwgQ09OU1Q2NCgweDA4MDgwMDAyMDgwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDAwODAwMDApLCBDT05TVDY0KDB4MDgwODAwMDIwMDA4MDAwMCksIENPTlNUNjQoMHgwODA4MDAwMDA4MDgwMDAwKSwgQ09OU1Q2NCgweDA4MDgwMDAyMDgwODAwMDApLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDgwODAwMDIwMDAwMDgwMCksIENPTlNUNjQoMHgwODA4MDAwMDA4MDAwODAwKSwgQ09OU1Q2NCgweDA4MDgwMDAyMDgwMDA4MDApLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDAwODA4MDApLCBDT05TVDY0KDB4MDgwODAwMDIwMDA4MDgwMCksIENPTlNUNjQoMHgwODA4MDAwMDA4MDgwODAwKSwgQ09OU1Q2NCgweDA4MDgwMDAyMDgwODA4MDApLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDAwMDAwMDgpLCBDT05TVDY0KDB4MDgwODAwMDIwMDAwMDAwOCksIENPTlNUNjQoMHgwODA4MDAwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDA4MDgwMDAyMDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDAwODAwMDgpLCBDT05TVDY0KDB4MDgwODAwMDIwMDA4MDAwOCksIENPTlNUNjQoMHgwODA4MDAwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDA4MDgwMDAyMDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDAwMDA4MDgpLCBDT05TVDY0KDB4MDgwODAwMDIwMDAwMDgwOCksIENPTlNUNjQoMHgwODA4MDAwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDA4MDgwMDAyMDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwMDAwMDAwODA4MDgpLCBDT05TVDY0KDB4MDgwODAwMDIwMDA4MDgwOCksIENPTlNUNjQoMHgwODA4MDAwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDA4MDgwMDAyMDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDA4MDIwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDgwMDA4MDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwODAyMDgwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDAwODAwMDApLCBDT05TVDY0KDB4MDAwMDA4MDIwMDA4MDAwMCksIENPTlNUNjQoMHgwMDAwMDgwMDA4MDgwMDAwKSwgQ09OU1Q2NCgweDAwMDAwODAyMDgwODAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDAwMDA4MDIwMDAwMDgwMCksIENPTlNUNjQoMHgwMDAwMDgwMDA4MDAwODAwKSwgQ09OU1Q2NCgweDAwMDAwODAyMDgwMDA4MDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDAwODA4MDApLCBDT05TVDY0KDB4MDAwMDA4MDIwMDA4MDgwMCksIENPTlNUNjQoMHgwMDAwMDgwMDA4MDgwODAwKSwgQ09OU1Q2NCgweDAwMDAwODAyMDgwODA4MDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDAwMDAwMDgpLCBDT05TVDY0KDB4MDAwMDA4MDIwMDAwMDAwOCksIENPTlNUNjQoMHgwMDAwMDgwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDAwMDAwODAyMDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDAwODAwMDgpLCBDT05TVDY0KDB4MDAwMDA4MDIwMDA4MDAwOCksIENPTlNUNjQoMHgwMDAwMDgwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDAwMDAwODAyMDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDAwMDA4MDgpLCBDT05TVDY0KDB4MDAwMDA4MDIwMDAwMDgwOCksIENPTlNUNjQoMHgwMDAwMDgwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDAwMDAwODAyMDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDAwODAwMDAwODA4MDgpLCBDT05TVDY0KDB4MDAwMDA4MDIwMDA4MDgwOCksIENPTlNUNjQoMHgwMDAwMDgwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDAwMDAwODAyMDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDgwMDA4MDIwMDAwMDAwMCksIENPTlNUNjQoMHgwODAwMDgwMDA4MDAwMDAwKSwgQ09OU1Q2NCgweDA4MDAwODAyMDgwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDAwODAwMDApLCBDT05TVDY0KDB4MDgwMDA4MDIwMDA4MDAwMCksIENPTlNUNjQoMHgwODAwMDgwMDA4MDgwMDAwKSwgQ09OU1Q2NCgweDA4MDAwODAyMDgwODAwMDApLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDgwMDA4MDIwMDAwMDgwMCksIENPTlNUNjQoMHgwODAwMDgwMDA4MDAwODAwKSwgQ09OU1Q2NCgweDA4MDAwODAyMDgwMDA4MDApLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDAwODA4MDApLCBDT05TVDY0KDB4MDgwMDA4MDIwMDA4MDgwMCksIENPTlNUNjQoMHgwODAwMDgwMDA4MDgwODAwKSwgQ09OU1Q2NCgweDA4MDAwODAyMDgwODA4MDApLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDAwMDAwMDgpLCBDT05TVDY0KDB4MDgwMDA4MDIwMDAwMDAwOCksIENPTlNUNjQoMHgwODAwMDgwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDA4MDAwODAyMDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDAwODAwMDgpLCBDT05TVDY0KDB4MDgwMDA4MDIwMDA4MDAwOCksIENPTlNUNjQoMHgwODAwMDgwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDA4MDAwODAyMDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDAwMDA4MDgpLCBDT05TVDY0KDB4MDgwMDA4MDIwMDAwMDgwOCksIENPTlNUNjQoMHgwODAwMDgwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDA4MDAwODAyMDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDAwODAwMDAwODA4MDgpLCBDT05TVDY0KDB4MDgwMDA4MDIwMDA4MDgwOCksIENPTlNUNjQoMHgwODAwMDgwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDA4MDAwODAyMDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwODA4MDIwMDAwMDAwMCksIENPTlNUNjQoMHgwMDA4MDgwMDA4MDAwMDAwKSwgQ09OU1Q2NCgweDAwMDgwODAyMDgwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDAwODAwMDApLCBDT05TVDY0KDB4MDAwODA4MDIwMDA4MDAwMCksIENPTlNUNjQoMHgwMDA4MDgwMDA4MDgwMDAwKSwgQ09OU1Q2NCgweDAwMDgwODAyMDgwODAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDAwODA4MDIwMDAwMDgwMCksIENPTlNUNjQoMHgwMDA4MDgwMDA4MDAwODAwKSwgQ09OU1Q2NCgweDAwMDgwODAyMDgwMDA4MDApLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDAwODA4MDApLCBDT05TVDY0KDB4MDAwODA4MDIwMDA4MDgwMCksIENPTlNUNjQoMHgwMDA4MDgwMDA4MDgwODAwKSwgQ09OU1Q2NCgweDAwMDgwODAyMDgwODA4MDApLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDAwMDAwMDgpLCBDT05TVDY0KDB4MDAwODA4MDIwMDAwMDAwOCksIENPTlNUNjQoMHgwMDA4MDgwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDAwMDgwODAyMDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDAwODAwMDgpLCBDT05TVDY0KDB4MDAwODA4MDIwMDA4MDAwOCksIENPTlNUNjQoMHgwMDA4MDgwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDAwMDgwODAyMDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDAwMDA4MDgpLCBDT05TVDY0KDB4MDAwODA4MDIwMDAwMDgwOCksIENPTlNUNjQoMHgwMDA4MDgwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDAwMDgwODAyMDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDAwMDgwODAwMDAwODA4MDgpLCBDT05TVDY0KDB4MDAwODA4MDIwMDA4MDgwOCksIENPTlNUNjQoMHgwMDA4MDgwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDAwMDgwODAyMDgwODA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDgwODA4MDIwMDAwMDAwMCksIENPTlNUNjQoMHgwODA4MDgwMDA4MDAwMDAwKSwgQ09OU1Q2NCgweDA4MDgwODAyMDgwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDAwODAwMDApLCBDT05TVDY0KDB4MDgwODA4MDIwMDA4MDAwMCksIENPTlNUNjQoMHgwODA4MDgwMDA4MDgwMDAwKSwgQ09OU1Q2NCgweDA4MDgwODAyMDgwODAwMDApLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDAwMDA4MDApLCBDT05TVDY0KDB4MDgwODA4MDIwMDAwMDgwMCksIENPTlNUNjQoMHgwODA4MDgwMDA4MDAwODAwKSwgQ09OU1Q2NCgweDA4MDgwODAyMDgwMDA4MDApLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDAwODA4MDApLCBDT05TVDY0KDB4MDgwODA4MDIwMDA4MDgwMCksIENPTlNUNjQoMHgwODA4MDgwMDA4MDgwODAwKSwgQ09OU1Q2NCgweDA4MDgwODAyMDgwODA4MDApLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDAwMDAwMDgpLCBDT05TVDY0KDB4MDgwODA4MDIwMDAwMDAwOCksIENPTlNUNjQoMHgwODA4MDgwMDA4MDAwMDA4KSwgQ09OU1Q2NCgweDA4MDgwODAyMDgwMDAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDAwODAwMDgpLCBDT05TVDY0KDB4MDgwODA4MDIwMDA4MDAwOCksIENPTlNUNjQoMHgwODA4MDgwMDA4MDgwMDA4KSwgQ09OU1Q2NCgweDA4MDgwODAyMDgwODAwMDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDAwMDA4MDgpLCBDT05TVDY0KDB4MDgwODA4MDIwMDAwMDgwOCksIENPTlNUNjQoMHgwODA4MDgwMDA4MDAwODA4KSwgQ09OU1Q2NCgweDA4MDgwODAyMDgwMDA4MDgpLCAKKyAgQ09OU1Q2NCgweDA4MDgwODAwMDAwODA4MDgpLCBDT05TVDY0KDB4MDgwODA4MDIwMDA4MDgwOCksIENPTlNUNjQoMHgwODA4MDgwMDA4MDgwODA4KSwgQ09OU1Q2NCgweDA4MDgwODAyMDgwODA4MDgpCisgIH0sIAoreyBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwODAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDgyMDAwMDAwMCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDIwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwODAwMjAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDgyMDIwMDAwMCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMjAwMCksIENPTlNUNjQoMHgwMDAwMDAwODAwMDAyMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MDAwMDAwMDgyMDAwMjAwMCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDIwMjAwMCksIENPTlNUNjQoMHgwMDAwMDAwODAwMjAyMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MDAwMDAwMDgyMDIwMjAwMCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAyMCksIENPTlNUNjQoMHgwMDAwMDAwODAwMDAwMDIwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMjAwMDAwMjApLCBDT05TVDY0KDB4MDAwMDAwMDgyMDAwMDAyMCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDIwMDAyMCksIENPTlNUNjQoMHgwMDAwMDAwODAwMjAwMDIwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMjAyMDAwMjApLCBDT05TVDY0KDB4MDAwMDAwMDgyMDIwMDAyMCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMjAyMCksIENPTlNUNjQoMHgwMDAwMDAwODAwMDAyMDIwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMjAwMDIwMjApLCBDT05TVDY0KDB4MDAwMDAwMDgyMDAwMjAyMCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDIwMjAyMCksIENPTlNUNjQoMHgwMDAwMDAwODAwMjAyMDIwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMjAyMDIwMjApLCBDT05TVDY0KDB4MDAwMDAwMDgyMDIwMjAyMCksIAorICBDT05TVDY0KDB4MjAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgyMDAwMDAwODAwMDAwMDAwKSwgQ09OU1Q2NCgweDIwMDAwMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MjAwMDAwMDgyMDAwMDAwMCksIAorICBDT05TVDY0KDB4MjAwMDAwMDAwMDIwMDAwMCksIENPTlNUNjQoMHgyMDAwMDAwODAwMjAwMDAwKSwgQ09OU1Q2NCgweDIwMDAwMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MjAwMDAwMDgyMDIwMDAwMCksIAorICBDT05TVDY0KDB4MjAwMDAwMDAwMDAwMjAwMCksIENPTlNUNjQoMHgyMDAwMDAwODAwMDAyMDAwKSwgQ09OU1Q2NCgweDIwMDAwMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MjAwMDAwMDgyMDAwMjAwMCksIAorICBDT05TVDY0KDB4MjAwMDAwMDAwMDIwMjAwMCksIENPTlNUNjQoMHgyMDAwMDAwODAwMjAyMDAwKSwgQ09OU1Q2NCgweDIwMDAwMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MjAwMDAwMDgyMDIwMjAwMCksIAorICBDT05TVDY0KDB4MjAwMDAwMDAwMDAwMDAyMCksIENPTlNUNjQoMHgyMDAwMDAwODAwMDAwMDIwKSwgQ09OU1Q2NCgweDIwMDAwMDAwMjAwMDAwMjApLCBDT05TVDY0KDB4MjAwMDAwMDgyMDAwMDAyMCksIAorICBDT05TVDY0KDB4MjAwMDAwMDAwMDIwMDAyMCksIENPTlNUNjQoMHgyMDAwMDAwODAwMjAwMDIwKSwgQ09OU1Q2NCgweDIwMDAwMDAwMjAyMDAwMjApLCBDT05TVDY0KDB4MjAwMDAwMDgyMDIwMDAyMCksIAorICBDT05TVDY0KDB4MjAwMDAwMDAwMDAwMjAyMCksIENPTlNUNjQoMHgyMDAwMDAwODAwMDAyMDIwKSwgQ09OU1Q2NCgweDIwMDAwMDAwMjAwMDIwMjApLCBDT05TVDY0KDB4MjAwMDAwMDgyMDAwMjAyMCksIAorICBDT05TVDY0KDB4MjAwMDAwMDAwMDIwMjAyMCksIENPTlNUNjQoMHgyMDAwMDAwODAwMjAyMDIwKSwgQ09OU1Q2NCgweDIwMDAwMDAwMjAyMDIwMjApLCBDT05TVDY0KDB4MjAwMDAwMDgyMDIwMjAyMCksIAorICBDT05TVDY0KDB4MDAyMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDIwMDAwODAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMjAwMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MDAyMDAwMDgyMDAwMDAwMCksIAorICBDT05TVDY0KDB4MDAyMDAwMDAwMDIwMDAwMCksIENPTlNUNjQoMHgwMDIwMDAwODAwMjAwMDAwKSwgQ09OU1Q2NCgweDAwMjAwMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MDAyMDAwMDgyMDIwMDAwMCksIAorICBDT05TVDY0KDB4MDAyMDAwMDAwMDAwMjAwMCksIENPTlNUNjQoMHgwMDIwMDAwODAwMDAyMDAwKSwgQ09OU1Q2NCgweDAwMjAwMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MDAyMDAwMDgyMDAwMjAwMCksIAorICBDT05TVDY0KDB4MDAyMDAwMDAwMDIwMjAwMCksIENPTlNUNjQoMHgwMDIwMDAwODAwMjAyMDAwKSwgQ09OU1Q2NCgweDAwMjAwMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MDAyMDAwMDgyMDIwMjAwMCksIAorICBDT05TVDY0KDB4MDAyMDAwMDAwMDAwMDAyMCksIENPTlNUNjQoMHgwMDIwMDAwODAwMDAwMDIwKSwgQ09OU1Q2NCgweDAwMjAwMDAwMjAwMDAwMjApLCBDT05TVDY0KDB4MDAyMDAwMDgyMDAwMDAyMCksIAorICBDT05TVDY0KDB4MDAyMDAwMDAwMDIwMDAyMCksIENPTlNUNjQoMHgwMDIwMDAwODAwMjAwMDIwKSwgQ09OU1Q2NCgweDAwMjAwMDAwMjAyMDAwMjApLCBDT05TVDY0KDB4MDAyMDAwMDgyMDIwMDAyMCksIAorICBDT05TVDY0KDB4MDAyMDAwMDAwMDAwMjAyMCksIENPTlNUNjQoMHgwMDIwMDAwODAwMDAyMDIwKSwgQ09OU1Q2NCgweDAwMjAwMDAwMjAwMDIwMjApLCBDT05TVDY0KDB4MDAyMDAwMDgyMDAwMjAyMCksIAorICBDT05TVDY0KDB4MDAyMDAwMDAwMDIwMjAyMCksIENPTlNUNjQoMHgwMDIwMDAwODAwMjAyMDIwKSwgQ09OU1Q2NCgweDAwMjAwMDAwMjAyMDIwMjApLCBDT05TVDY0KDB4MDAyMDAwMDgyMDIwMjAyMCksIAorICBDT05TVDY0KDB4MjAyMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgyMDIwMDAwODAwMDAwMDAwKSwgQ09OU1Q2NCgweDIwMjAwMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MjAyMDAwMDgyMDAwMDAwMCksIAorICBDT05TVDY0KDB4MjAyMDAwMDAwMDIwMDAwMCksIENPTlNUNjQoMHgyMDIwMDAwODAwMjAwMDAwKSwgQ09OU1Q2NCgweDIwMjAwMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MjAyMDAwMDgyMDIwMDAwMCksIAorICBDT05TVDY0KDB4MjAyMDAwMDAwMDAwMjAwMCksIENPTlNUNjQoMHgyMDIwMDAwODAwMDAyMDAwKSwgQ09OU1Q2NCgweDIwMjAwMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MjAyMDAwMDgyMDAwMjAwMCksIAorICBDT05TVDY0KDB4MjAyMDAwMDAwMDIwMjAwMCksIENPTlNUNjQoMHgyMDIwMDAwODAwMjAyMDAwKSwgQ09OU1Q2NCgweDIwMjAwMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MjAyMDAwMDgyMDIwMjAwMCksIAorICBDT05TVDY0KDB4MjAyMDAwMDAwMDAwMDAyMCksIENPTlNUNjQoMHgyMDIwMDAwODAwMDAwMDIwKSwgQ09OU1Q2NCgweDIwMjAwMDAwMjAwMDAwMjApLCBDT05TVDY0KDB4MjAyMDAwMDgyMDAwMDAyMCksIAorICBDT05TVDY0KDB4MjAyMDAwMDAwMDIwMDAyMCksIENPTlNUNjQoMHgyMDIwMDAwODAwMjAwMDIwKSwgQ09OU1Q2NCgweDIwMjAwMDAwMjAyMDAwMjApLCBDT05TVDY0KDB4MjAyMDAwMDgyMDIwMDAyMCksIAorICBDT05TVDY0KDB4MjAyMDAwMDAwMDAwMjAyMCksIENPTlNUNjQoMHgyMDIwMDAwODAwMDAyMDIwKSwgQ09OU1Q2NCgweDIwMjAwMDAwMjAwMDIwMjApLCBDT05TVDY0KDB4MjAyMDAwMDgyMDAwMjAyMCksIAorICBDT05TVDY0KDB4MjAyMDAwMDAwMDIwMjAyMCksIENPTlNUNjQoMHgyMDIwMDAwODAwMjAyMDIwKSwgQ09OU1Q2NCgweDIwMjAwMDAwMjAyMDIwMjApLCBDT05TVDY0KDB4MjAyMDAwMDgyMDIwMjAyMCksIAorICBDT05TVDY0KDB4MDAwMDIwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMjAwODAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAyMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDIwMDgyMDAwMDAwMCksIAorICBDT05TVDY0KDB4MDAwMDIwMDAwMDIwMDAwMCksIENPTlNUNjQoMHgwMDAwMjAwODAwMjAwMDAwKSwgQ09OU1Q2NCgweDAwMDAyMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MDAwMDIwMDgyMDIwMDAwMCksIAorICBDT05TVDY0KDB4MDAwMDIwMDAwMDAwMjAwMCksIENPTlNUNjQoMHgwMDAwMjAwODAwMDAyMDAwKSwgQ09OU1Q2NCgweDAwMDAyMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MDAwMDIwMDgyMDAwMjAwMCksIAorICBDT05TVDY0KDB4MDAwMDIwMDAwMDIwMjAwMCksIENPTlNUNjQoMHgwMDAwMjAwODAwMjAyMDAwKSwgQ09OU1Q2NCgweDAwMDAyMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MDAwMDIwMDgyMDIwMjAwMCksIAorICBDT05TVDY0KDB4MDAwMDIwMDAwMDAwMDAyMCksIENPTlNUNjQoMHgwMDAwMjAwODAwMDAwMDIwKSwgQ09OU1Q2NCgweDAwMDAyMDAwMjAwMDAwMjApLCBDT05TVDY0KDB4MDAwMDIwMDgyMDAwMDAyMCksIAorICBDT05TVDY0KDB4MDAwMDIwMDAwMDIwMDAyMCksIENPTlNUNjQoMHgwMDAwMjAwODAwMjAwMDIwKSwgQ09OU1Q2NCgweDAwMDAyMDAwMjAyMDAwMjApLCBDT05TVDY0KDB4MDAwMDIwMDgyMDIwMDAyMCksIAorICBDT05TVDY0KDB4MDAwMDIwMDAwMDAwMjAyMCksIENPTlNUNjQoMHgwMDAwMjAwODAwMDAyMDIwKSwgQ09OU1Q2NCgweDAwMDAyMDAwMjAwMDIwMjApLCBDT05TVDY0KDB4MDAwMDIwMDgyMDAwMjAyMCksIAorICBDT05TVDY0KDB4MDAwMDIwMDAwMDIwMjAyMCksIENPTlNUNjQoMHgwMDAwMjAwODAwMjAyMDIwKSwgQ09OU1Q2NCgweDAwMDAyMDAwMjAyMDIwMjApLCBDT05TVDY0KDB4MDAwMDIwMDgyMDIwMjAyMCksIAorICBDT05TVDY0KDB4MjAwMDIwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgyMDAwMjAwODAwMDAwMDAwKSwgQ09OU1Q2NCgweDIwMDAyMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MjAwMDIwMDgyMDAwMDAwMCksIAorICBDT05TVDY0KDB4MjAwMDIwMDAwMDIwMDAwMCksIENPTlNUNjQoMHgyMDAwMjAwODAwMjAwMDAwKSwgQ09OU1Q2NCgweDIwMDAyMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MjAwMDIwMDgyMDIwMDAwMCksIAorICBDT05TVDY0KDB4MjAwMDIwMDAwMDAwMjAwMCksIENPTlNUNjQoMHgyMDAwMjAwODAwMDAyMDAwKSwgQ09OU1Q2NCgweDIwMDAyMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MjAwMDIwMDgyMDAwMjAwMCksIAorICBDT05TVDY0KDB4MjAwMDIwMDAwMDIwMjAwMCksIENPTlNUNjQoMHgyMDAwMjAwODAwMjAyMDAwKSwgQ09OU1Q2NCgweDIwMDAyMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MjAwMDIwMDgyMDIwMjAwMCksIAorICBDT05TVDY0KDB4MjAwMDIwMDAwMDAwMDAyMCksIENPTlNUNjQoMHgyMDAwMjAwODAwMDAwMDIwKSwgQ09OU1Q2NCgweDIwMDAyMDAwMjAwMDAwMjApLCBDT05TVDY0KDB4MjAwMDIwMDgyMDAwMDAyMCksIAorICBDT05TVDY0KDB4MjAwMDIwMDAwMDIwMDAyMCksIENPTlNUNjQoMHgyMDAwMjAwODAwMjAwMDIwKSwgQ09OU1Q2NCgweDIwMDAyMDAwMjAyMDAwMjApLCBDT05TVDY0KDB4MjAwMDIwMDgyMDIwMDAyMCksIAorICBDT05TVDY0KDB4MjAwMDIwMDAwMDAwMjAyMCksIENPTlNUNjQoMHgyMDAwMjAwODAwMDAyMDIwKSwgQ09OU1Q2NCgweDIwMDAyMDAwMjAwMDIwMjApLCBDT05TVDY0KDB4MjAwMDIwMDgyMDAwMjAyMCksIAorICBDT05TVDY0KDB4MjAwMDIwMDAwMDIwMjAyMCksIENPTlNUNjQoMHgyMDAwMjAwODAwMjAyMDIwKSwgQ09OU1Q2NCgweDIwMDAyMDAwMjAyMDIwMjApLCBDT05TVDY0KDB4MjAwMDIwMDgyMDIwMjAyMCksIAorICBDT05TVDY0KDB4MDAyMDIwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDIwMjAwODAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMjAyMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MDAyMDIwMDgyMDAwMDAwMCksIAorICBDT05TVDY0KDB4MDAyMDIwMDAwMDIwMDAwMCksIENPTlNUNjQoMHgwMDIwMjAwODAwMjAwMDAwKSwgQ09OU1Q2NCgweDAwMjAyMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MDAyMDIwMDgyMDIwMDAwMCksIAorICBDT05TVDY0KDB4MDAyMDIwMDAwMDAwMjAwMCksIENPTlNUNjQoMHgwMDIwMjAwODAwMDAyMDAwKSwgQ09OU1Q2NCgweDAwMjAyMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MDAyMDIwMDgyMDAwMjAwMCksIAorICBDT05TVDY0KDB4MDAyMDIwMDAwMDIwMjAwMCksIENPTlNUNjQoMHgwMDIwMjAwODAwMjAyMDAwKSwgQ09OU1Q2NCgweDAwMjAyMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MDAyMDIwMDgyMDIwMjAwMCksIAorICBDT05TVDY0KDB4MDAyMDIwMDAwMDAwMDAyMCksIENPTlNUNjQoMHgwMDIwMjAwODAwMDAwMDIwKSwgQ09OU1Q2NCgweDAwMjAyMDAwMjAwMDAwMjApLCBDT05TVDY0KDB4MDAyMDIwMDgyMDAwMDAyMCksIAorICBDT05TVDY0KDB4MDAyMDIwMDAwMDIwMDAyMCksIENPTlNUNjQoMHgwMDIwMjAwODAwMjAwMDIwKSwgQ09OU1Q2NCgweDAwMjAyMDAwMjAyMDAwMjApLCBDT05TVDY0KDB4MDAyMDIwMDgyMDIwMDAyMCksIAorICBDT05TVDY0KDB4MDAyMDIwMDAwMDAwMjAyMCksIENPTlNUNjQoMHgwMDIwMjAwODAwMDAyMDIwKSwgQ09OU1Q2NCgweDAwMjAyMDAwMjAwMDIwMjApLCBDT05TVDY0KDB4MDAyMDIwMDgyMDAwMjAyMCksIAorICBDT05TVDY0KDB4MDAyMDIwMDAwMDIwMjAyMCksIENPTlNUNjQoMHgwMDIwMjAwODAwMjAyMDIwKSwgQ09OU1Q2NCgweDAwMjAyMDAwMjAyMDIwMjApLCBDT05TVDY0KDB4MDAyMDIwMDgyMDIwMjAyMCksIAorICBDT05TVDY0KDB4MjAyMDIwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgyMDIwMjAwODAwMDAwMDAwKSwgQ09OU1Q2NCgweDIwMjAyMDAwMjAwMDAwMDApLCBDT05TVDY0KDB4MjAyMDIwMDgyMDAwMDAwMCksIAorICBDT05TVDY0KDB4MjAyMDIwMDAwMDIwMDAwMCksIENPTlNUNjQoMHgyMDIwMjAwODAwMjAwMDAwKSwgQ09OU1Q2NCgweDIwMjAyMDAwMjAyMDAwMDApLCBDT05TVDY0KDB4MjAyMDIwMDgyMDIwMDAwMCksIAorICBDT05TVDY0KDB4MjAyMDIwMDAwMDAwMjAwMCksIENPTlNUNjQoMHgyMDIwMjAwODAwMDAyMDAwKSwgQ09OU1Q2NCgweDIwMjAyMDAwMjAwMDIwMDApLCBDT05TVDY0KDB4MjAyMDIwMDgyMDAwMjAwMCksIAorICBDT05TVDY0KDB4MjAyMDIwMDAwMDIwMjAwMCksIENPTlNUNjQoMHgyMDIwMjAwODAwMjAyMDAwKSwgQ09OU1Q2NCgweDIwMjAyMDAwMjAyMDIwMDApLCBDT05TVDY0KDB4MjAyMDIwMDgyMDIwMjAwMCksIAorICBDT05TVDY0KDB4MjAyMDIwMDAwMDAwMDAyMCksIENPTlNUNjQoMHgyMDIwMjAwODAwMDAwMDIwKSwgQ09OU1Q2NCgweDIwMjAyMDAwMjAwMDAwMjApLCBDT05TVDY0KDB4MjAyMDIwMDgyMDAwMDAyMCksIAorICBDT05TVDY0KDB4MjAyMDIwMDAwMDIwMDAyMCksIENPTlNUNjQoMHgyMDIwMjAwODAwMjAwMDIwKSwgQ09OU1Q2NCgweDIwMjAyMDAwMjAyMDAwMjApLCBDT05TVDY0KDB4MjAyMDIwMDgyMDIwMDAyMCksIAorICBDT05TVDY0KDB4MjAyMDIwMDAwMDAwMjAyMCksIENPTlNUNjQoMHgyMDIwMjAwODAwMDAyMDIwKSwgQ09OU1Q2NCgweDIwMjAyMDAwMjAwMDIwMjApLCBDT05TVDY0KDB4MjAyMDIwMDgyMDAwMjAyMCksIAorICBDT05TVDY0KDB4MjAyMDIwMDAwMDIwMjAyMCksIENPTlNUNjQoMHgyMDIwMjAwODAwMjAyMDIwKSwgQ09OU1Q2NCgweDIwMjAyMDAwMjAyMDIwMjApLCBDT05TVDY0KDB4MjAyMDIwMDgyMDIwMjAyMCkKKyAgfSwgCit7IENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDA4MDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAyMDgwMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwODAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMDA4MDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDA4MDgwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAyMDgwODAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDA4MDAwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMDAwMDgwMDApLCBDT05TVDY0KDB4MDAwMDAwMDA4MDAwODAwMCksIENPTlNUNjQoMHgwMDAwMDAyMDgwMDA4MDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwODA4MDAwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMDA4MDgwMDApLCBDT05TVDY0KDB4MDAwMDAwMDA4MDgwODAwMCksIENPTlNUNjQoMHgwMDAwMDAyMDgwODA4MDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDgwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMDAwMDAwODApLCBDT05TVDY0KDB4MDAwMDAwMDA4MDAwMDA4MCksIENPTlNUNjQoMHgwMDAwMDAyMDgwMDAwMDgwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwODAwMDgwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMDA4MDAwODApLCBDT05TVDY0KDB4MDAwMDAwMDA4MDgwMDA4MCksIENPTlNUNjQoMHgwMDAwMDAyMDgwODAwMDgwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDA4MDgwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMDAwMDgwODApLCBDT05TVDY0KDB4MDAwMDAwMDA4MDAwODA4MCksIENPTlNUNjQoMHgwMDAwMDAyMDgwMDA4MDgwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwODA4MDgwKSwgQ09OU1Q2NCgweDAwMDAwMDIwMDA4MDgwODApLCBDT05TVDY0KDB4MDAwMDAwMDA4MDgwODA4MCksIENPTlNUNjQoMHgwMDAwMDAyMDgwODA4MDgwKSwgCisgIENPTlNUNjQoMHg4MDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDgwMDAwMDIwMDAwMDAwMDApLCBDT05TVDY0KDB4ODAwMDAwMDA4MDAwMDAwMCksIENPTlNUNjQoMHg4MDAwMDAyMDgwMDAwMDAwKSwgCisgIENPTlNUNjQoMHg4MDAwMDAwMDAwODAwMDAwKSwgQ09OU1Q2NCgweDgwMDAwMDIwMDA4MDAwMDApLCBDT05TVDY0KDB4ODAwMDAwMDA4MDgwMDAwMCksIENPTlNUNjQoMHg4MDAwMDAyMDgwODAwMDAwKSwgCisgIENPTlNUNjQoMHg4MDAwMDAwMDAwMDA4MDAwKSwgQ09OU1Q2NCgweDgwMDAwMDIwMDAwMDgwMDApLCBDT05TVDY0KDB4ODAwMDAwMDA4MDAwODAwMCksIENPTlNUNjQoMHg4MDAwMDAyMDgwMDA4MDAwKSwgCisgIENPTlNUNjQoMHg4MDAwMDAwMDAwODA4MDAwKSwgQ09OU1Q2NCgweDgwMDAwMDIwMDA4MDgwMDApLCBDT05TVDY0KDB4ODAwMDAwMDA4MDgwODAwMCksIENPTlNUNjQoMHg4MDAwMDAyMDgwODA4MDAwKSwgCisgIENPTlNUNjQoMHg4MDAwMDAwMDAwMDAwMDgwKSwgQ09OU1Q2NCgweDgwMDAwMDIwMDAwMDAwODApLCBDT05TVDY0KDB4ODAwMDAwMDA4MDAwMDA4MCksIENPTlNUNjQoMHg4MDAwMDAyMDgwMDAwMDgwKSwgCisgIENPTlNUNjQoMHg4MDAwMDAwMDAwODAwMDgwKSwgQ09OU1Q2NCgweDgwMDAwMDIwMDA4MDAwODApLCBDT05TVDY0KDB4ODAwMDAwMDA4MDgwMDA4MCksIENPTlNUNjQoMHg4MDAwMDAyMDgwODAwMDgwKSwgCisgIENPTlNUNjQoMHg4MDAwMDAwMDAwMDA4MDgwKSwgQ09OU1Q2NCgweDgwMDAwMDIwMDAwMDgwODApLCBDT05TVDY0KDB4ODAwMDAwMDA4MDAwODA4MCksIENPTlNUNjQoMHg4MDAwMDAyMDgwMDA4MDgwKSwgCisgIENPTlNUNjQoMHg4MDAwMDAwMDAwODA4MDgwKSwgQ09OU1Q2NCgweDgwMDAwMDIwMDA4MDgwODApLCBDT05TVDY0KDB4ODAwMDAwMDA4MDgwODA4MCksIENPTlNUNjQoMHg4MDAwMDAyMDgwODA4MDgwKSwgCisgIENPTlNUNjQoMHgwMDgwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwODAwMDIwMDAwMDAwMDApLCBDT05TVDY0KDB4MDA4MDAwMDA4MDAwMDAwMCksIENPTlNUNjQoMHgwMDgwMDAyMDgwMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDgwMDAwMDAwODAwMDAwKSwgQ09OU1Q2NCgweDAwODAwMDIwMDA4MDAwMDApLCBDT05TVDY0KDB4MDA4MDAwMDA4MDgwMDAwMCksIENPTlNUNjQoMHgwMDgwMDAyMDgwODAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDgwMDAwMDAwMDA4MDAwKSwgQ09OU1Q2NCgweDAwODAwMDIwMDAwMDgwMDApLCBDT05TVDY0KDB4MDA4MDAwMDA4MDAwODAwMCksIENPTlNUNjQoMHgwMDgwMDAyMDgwMDA4MDAwKSwgCisgIENPTlNUNjQoMHgwMDgwMDAwMDAwODA4MDAwKSwgQ09OU1Q2NCgweDAwODAwMDIwMDA4MDgwMDApLCBDT05TVDY0KDB4MDA4MDAwMDA4MDgwODAwMCksIENPTlNUNjQoMHgwMDgwMDAyMDgwODA4MDAwKSwgCisgIENPTlNUNjQoMHgwMDgwMDAwMDAwMDAwMDgwKSwgQ09OU1Q2NCgweDAwODAwMDIwMDAwMDAwODApLCBDT05TVDY0KDB4MDA4MDAwMDA4MDAwMDA4MCksIENPTlNUNjQoMHgwMDgwMDAyMDgwMDAwMDgwKSwgCisgIENPTlNUNjQoMHgwMDgwMDAwMDAwODAwMDgwKSwgQ09OU1Q2NCgweDAwODAwMDIwMDA4MDAwODApLCBDT05TVDY0KDB4MDA4MDAwMDA4MDgwMDA4MCksIENPTlNUNjQoMHgwMDgwMDAyMDgwODAwMDgwKSwgCisgIENPTlNUNjQoMHgwMDgwMDAwMDAwMDA4MDgwKSwgQ09OU1Q2NCgweDAwODAwMDIwMDAwMDgwODApLCBDT05TVDY0KDB4MDA4MDAwMDA4MDAwODA4MCksIENPTlNUNjQoMHgwMDgwMDAyMDgwMDA4MDgwKSwgCisgIENPTlNUNjQoMHgwMDgwMDAwMDAwODA4MDgwKSwgQ09OU1Q2NCgweDAwODAwMDIwMDA4MDgwODApLCBDT05TVDY0KDB4MDA4MDAwMDA4MDgwODA4MCksIENPTlNUNjQoMHgwMDgwMDAyMDgwODA4MDgwKSwgCisgIENPTlNUNjQoMHg4MDgwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDgwODAwMDIwMDAwMDAwMDApLCBDT05TVDY0KDB4ODA4MDAwMDA4MDAwMDAwMCksIENPTlNUNjQoMHg4MDgwMDAyMDgwMDAwMDAwKSwgCisgIENPTlNUNjQoMHg4MDgwMDAwMDAwODAwMDAwKSwgQ09OU1Q2NCgweDgwODAwMDIwMDA4MDAwMDApLCBDT05TVDY0KDB4ODA4MDAwMDA4MDgwMDAwMCksIENPTlNUNjQoMHg4MDgwMDAyMDgwODAwMDAwKSwgCisgIENPTlNUNjQoMHg4MDgwMDAwMDAwMDA4MDAwKSwgQ09OU1Q2NCgweDgwODAwMDIwMDAwMDgwMDApLCBDT05TVDY0KDB4ODA4MDAwMDA4MDAwODAwMCksIENPTlNUNjQoMHg4MDgwMDAyMDgwMDA4MDAwKSwgCisgIENPTlNUNjQoMHg4MDgwMDAwMDAwODA4MDAwKSwgQ09OU1Q2NCgweDgwODAwMDIwMDA4MDgwMDApLCBDT05TVDY0KDB4ODA4MDAwMDA4MDgwODAwMCksIENPTlNUNjQoMHg4MDgwMDAyMDgwODA4MDAwKSwgCisgIENPTlNUNjQoMHg4MDgwMDAwMDAwMDAwMDgwKSwgQ09OU1Q2NCgweDgwODAwMDIwMDAwMDAwODApLCBDT05TVDY0KDB4ODA4MDAwMDA4MDAwMDA4MCksIENPTlNUNjQoMHg4MDgwMDAyMDgwMDAwMDgwKSwgCisgIENPTlNUNjQoMHg4MDgwMDAwMDAwODAwMDgwKSwgQ09OU1Q2NCgweDgwODAwMDIwMDA4MDAwODApLCBDT05TVDY0KDB4ODA4MDAwMDA4MDgwMDA4MCksIENPTlNUNjQoMHg4MDgwMDAyMDgwODAwMDgwKSwgCisgIENPTlNUNjQoMHg4MDgwMDAwMDAwMDA4MDgwKSwgQ09OU1Q2NCgweDgwODAwMDIwMDAwMDgwODApLCBDT05TVDY0KDB4ODA4MDAwMDA4MDAwODA4MCksIENPTlNUNjQoMHg4MDgwMDAyMDgwMDA4MDgwKSwgCisgIENPTlNUNjQoMHg4MDgwMDAwMDAwODA4MDgwKSwgQ09OU1Q2NCgweDgwODAwMDIwMDA4MDgwODApLCBDT05TVDY0KDB4ODA4MDAwMDA4MDgwODA4MCksIENPTlNUNjQoMHg4MDgwMDAyMDgwODA4MDgwKSwgCisgIENPTlNUNjQoMHgwMDAwODAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDA4MDIwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDgwMDA4MDAwMDAwMCksIENPTlNUNjQoMHgwMDAwODAyMDgwMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwODAwMDAwODAwMDAwKSwgQ09OU1Q2NCgweDAwMDA4MDIwMDA4MDAwMDApLCBDT05TVDY0KDB4MDAwMDgwMDA4MDgwMDAwMCksIENPTlNUNjQoMHgwMDAwODAyMDgwODAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwODAwMDAwMDA4MDAwKSwgQ09OU1Q2NCgweDAwMDA4MDIwMDAwMDgwMDApLCBDT05TVDY0KDB4MDAwMDgwMDA4MDAwODAwMCksIENPTlNUNjQoMHgwMDAwODAyMDgwMDA4MDAwKSwgCisgIENPTlNUNjQoMHgwMDAwODAwMDAwODA4MDAwKSwgQ09OU1Q2NCgweDAwMDA4MDIwMDA4MDgwMDApLCBDT05TVDY0KDB4MDAwMDgwMDA4MDgwODAwMCksIENPTlNUNjQoMHgwMDAwODAyMDgwODA4MDAwKSwgCisgIENPTlNUNjQoMHgwMDAwODAwMDAwMDAwMDgwKSwgQ09OU1Q2NCgweDAwMDA4MDIwMDAwMDAwODApLCBDT05TVDY0KDB4MDAwMDgwMDA4MDAwMDA4MCksIENPTlNUNjQoMHgwMDAwODAyMDgwMDAwMDgwKSwgCisgIENPTlNUNjQoMHgwMDAwODAwMDAwODAwMDgwKSwgQ09OU1Q2NCgweDAwMDA4MDIwMDA4MDAwODApLCBDT05TVDY0KDB4MDAwMDgwMDA4MDgwMDA4MCksIENPTlNUNjQoMHgwMDAwODAyMDgwODAwMDgwKSwgCisgIENPTlNUNjQoMHgwMDAwODAwMDAwMDA4MDgwKSwgQ09OU1Q2NCgweDAwMDA4MDIwMDAwMDgwODApLCBDT05TVDY0KDB4MDAwMDgwMDA4MDAwODA4MCksIENPTlNUNjQoMHgwMDAwODAyMDgwMDA4MDgwKSwgCisgIENPTlNUNjQoMHgwMDAwODAwMDAwODA4MDgwKSwgQ09OU1Q2NCgweDAwMDA4MDIwMDA4MDgwODApLCBDT05TVDY0KDB4MDAwMDgwMDA4MDgwODA4MCksIENPTlNUNjQoMHgwMDAwODAyMDgwODA4MDgwKSwgCisgIENPTlNUNjQoMHg4MDAwODAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDgwMDA4MDIwMDAwMDAwMDApLCBDT05TVDY0KDB4ODAwMDgwMDA4MDAwMDAwMCksIENPTlNUNjQoMHg4MDAwODAyMDgwMDAwMDAwKSwgCisgIENPTlNUNjQoMHg4MDAwODAwMDAwODAwMDAwKSwgQ09OU1Q2NCgweDgwMDA4MDIwMDA4MDAwMDApLCBDT05TVDY0KDB4ODAwMDgwMDA4MDgwMDAwMCksIENPTlNUNjQoMHg4MDAwODAyMDgwODAwMDAwKSwgCisgIENPTlNUNjQoMHg4MDAwODAwMDAwMDA4MDAwKSwgQ09OU1Q2NCgweDgwMDA4MDIwMDAwMDgwMDApLCBDT05TVDY0KDB4ODAwMDgwMDA4MDAwODAwMCksIENPTlNUNjQoMHg4MDAwODAyMDgwMDA4MDAwKSwgCisgIENPTlNUNjQoMHg4MDAwODAwMDAwODA4MDAwKSwgQ09OU1Q2NCgweDgwMDA4MDIwMDA4MDgwMDApLCBDT05TVDY0KDB4ODAwMDgwMDA4MDgwODAwMCksIENPTlNUNjQoMHg4MDAwODAyMDgwODA4MDAwKSwgCisgIENPTlNUNjQoMHg4MDAwODAwMDAwMDAwMDgwKSwgQ09OU1Q2NCgweDgwMDA4MDIwMDAwMDAwODApLCBDT05TVDY0KDB4ODAwMDgwMDA4MDAwMDA4MCksIENPTlNUNjQoMHg4MDAwODAyMDgwMDAwMDgwKSwgCisgIENPTlNUNjQoMHg4MDAwODAwMDAwODAwMDgwKSwgQ09OU1Q2NCgweDgwMDA4MDIwMDA4MDAwODApLCBDT05TVDY0KDB4ODAwMDgwMDA4MDgwMDA4MCksIENPTlNUNjQoMHg4MDAwODAyMDgwODAwMDgwKSwgCisgIENPTlNUNjQoMHg4MDAwODAwMDAwMDA4MDgwKSwgQ09OU1Q2NCgweDgwMDA4MDIwMDAwMDgwODApLCBDT05TVDY0KDB4ODAwMDgwMDA4MDAwODA4MCksIENPTlNUNjQoMHg4MDAwODAyMDgwMDA4MDgwKSwgCisgIENPTlNUNjQoMHg4MDAwODAwMDAwODA4MDgwKSwgQ09OU1Q2NCgweDgwMDA4MDIwMDA4MDgwODApLCBDT05TVDY0KDB4ODAwMDgwMDA4MDgwODA4MCksIENPTlNUNjQoMHg4MDAwODAyMDgwODA4MDgwKSwgCisgIENPTlNUNjQoMHgwMDgwODAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwODA4MDIwMDAwMDAwMDApLCBDT05TVDY0KDB4MDA4MDgwMDA4MDAwMDAwMCksIENPTlNUNjQoMHgwMDgwODAyMDgwMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDgwODAwMDAwODAwMDAwKSwgQ09OU1Q2NCgweDAwODA4MDIwMDA4MDAwMDApLCBDT05TVDY0KDB4MDA4MDgwMDA4MDgwMDAwMCksIENPTlNUNjQoMHgwMDgwODAyMDgwODAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDgwODAwMDAwMDA4MDAwKSwgQ09OU1Q2NCgweDAwODA4MDIwMDAwMDgwMDApLCBDT05TVDY0KDB4MDA4MDgwMDA4MDAwODAwMCksIENPTlNUNjQoMHgwMDgwODAyMDgwMDA4MDAwKSwgCisgIENPTlNUNjQoMHgwMDgwODAwMDAwODA4MDAwKSwgQ09OU1Q2NCgweDAwODA4MDIwMDA4MDgwMDApLCBDT05TVDY0KDB4MDA4MDgwMDA4MDgwODAwMCksIENPTlNUNjQoMHgwMDgwODAyMDgwODA4MDAwKSwgCisgIENPTlNUNjQoMHgwMDgwODAwMDAwMDAwMDgwKSwgQ09OU1Q2NCgweDAwODA4MDIwMDAwMDAwODApLCBDT05TVDY0KDB4MDA4MDgwMDA4MDAwMDA4MCksIENPTlNUNjQoMHgwMDgwODAyMDgwMDAwMDgwKSwgCisgIENPTlNUNjQoMHgwMDgwODAwMDAwODAwMDgwKSwgQ09OU1Q2NCgweDAwODA4MDIwMDA4MDAwODApLCBDT05TVDY0KDB4MDA4MDgwMDA4MDgwMDA4MCksIENPTlNUNjQoMHgwMDgwODAyMDgwODAwMDgwKSwgCisgIENPTlNUNjQoMHgwMDgwODAwMDAwMDA4MDgwKSwgQ09OU1Q2NCgweDAwODA4MDIwMDAwMDgwODApLCBDT05TVDY0KDB4MDA4MDgwMDA4MDAwODA4MCksIENPTlNUNjQoMHgwMDgwODAyMDgwMDA4MDgwKSwgCisgIENPTlNUNjQoMHgwMDgwODAwMDAwODA4MDgwKSwgQ09OU1Q2NCgweDAwODA4MDIwMDA4MDgwODApLCBDT05TVDY0KDB4MDA4MDgwMDA4MDgwODA4MCksIENPTlNUNjQoMHgwMDgwODAyMDgwODA4MDgwKSwgCisgIENPTlNUNjQoMHg4MDgwODAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDgwODA4MDIwMDAwMDAwMDApLCBDT05TVDY0KDB4ODA4MDgwMDA4MDAwMDAwMCksIENPTlNUNjQoMHg4MDgwODAyMDgwMDAwMDAwKSwgCisgIENPTlNUNjQoMHg4MDgwODAwMDAwODAwMDAwKSwgQ09OU1Q2NCgweDgwODA4MDIwMDA4MDAwMDApLCBDT05TVDY0KDB4ODA4MDgwMDA4MDgwMDAwMCksIENPTlNUNjQoMHg4MDgwODAyMDgwODAwMDAwKSwgCisgIENPTlNUNjQoMHg4MDgwODAwMDAwMDA4MDAwKSwgQ09OU1Q2NCgweDgwODA4MDIwMDAwMDgwMDApLCBDT05TVDY0KDB4ODA4MDgwMDA4MDAwODAwMCksIENPTlNUNjQoMHg4MDgwODAyMDgwMDA4MDAwKSwgCisgIENPTlNUNjQoMHg4MDgwODAwMDAwODA4MDAwKSwgQ09OU1Q2NCgweDgwODA4MDIwMDA4MDgwMDApLCBDT05TVDY0KDB4ODA4MDgwMDA4MDgwODAwMCksIENPTlNUNjQoMHg4MDgwODAyMDgwODA4MDAwKSwgCisgIENPTlNUNjQoMHg4MDgwODAwMDAwMDAwMDgwKSwgQ09OU1Q2NCgweDgwODA4MDIwMDAwMDAwODApLCBDT05TVDY0KDB4ODA4MDgwMDA4MDAwMDA4MCksIENPTlNUNjQoMHg4MDgwODAyMDgwMDAwMDgwKSwgCisgIENPTlNUNjQoMHg4MDgwODAwMDAwODAwMDgwKSwgQ09OU1Q2NCgweDgwODA4MDIwMDA4MDAwODApLCBDT05TVDY0KDB4ODA4MDgwMDA4MDgwMDA4MCksIENPTlNUNjQoMHg4MDgwODAyMDgwODAwMDgwKSwgCisgIENPTlNUNjQoMHg4MDgwODAwMDAwMDA4MDgwKSwgQ09OU1Q2NCgweDgwODA4MDIwMDAwMDgwODApLCBDT05TVDY0KDB4ODA4MDgwMDA4MDAwODA4MCksIENPTlNUNjQoMHg4MDgwODAyMDgwMDA4MDgwKSwgCisgIENPTlNUNjQoMHg4MDgwODAwMDAwODA4MDgwKSwgQ09OU1Q2NCgweDgwODA4MDIwMDA4MDgwODApLCBDT05TVDY0KDB4ODA4MDgwMDA4MDgwODA4MCksIENPTlNUNjQoMHg4MDgwODAyMDgwODA4MDgwKQorICB9LCAKK3sgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwNDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAxMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDQwMDEwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMTAwMDApLCBDT05TVDY0KDB4MDAwMDAwNDAwMDAxMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAxMDEwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDQwMDEwMTAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAxMDApLCBDT05TVDY0KDB4MDAwMDAwNDAwMDAwMDEwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAxMDAwMTAwKSwgQ09OU1Q2NCgweDAwMDAwMDQwMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMTAxMDApLCBDT05TVDY0KDB4MDAwMDAwNDAwMDAxMDEwMCksIENPTlNUNjQoMHgwMDAwMDAwMDAxMDEwMTAwKSwgQ09OU1Q2NCgweDAwMDAwMDQwMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwMDEpLCBDT05TVDY0KDB4MDAwMDAwNDAwMDAwMDAwMSksIENPTlNUNjQoMHgwMDAwMDAwMDAxMDAwMDAxKSwgQ09OU1Q2NCgweDAwMDAwMDQwMDEwMDAwMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMTAwMDEpLCBDT05TVDY0KDB4MDAwMDAwNDAwMDAxMDAwMSksIENPTlNUNjQoMHgwMDAwMDAwMDAxMDEwMDAxKSwgQ09OU1Q2NCgweDAwMDAwMDQwMDEwMTAwMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAxMDEpLCBDT05TVDY0KDB4MDAwMDAwNDAwMDAwMDEwMSksIENPTlNUNjQoMHgwMDAwMDAwMDAxMDAwMTAxKSwgQ09OU1Q2NCgweDAwMDAwMDQwMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMTAxMDEpLCBDT05TVDY0KDB4MDAwMDAwNDAwMDAxMDEwMSksIENPTlNUNjQoMHgwMDAwMDAwMDAxMDEwMTAxKSwgQ09OU1Q2NCgweDAwMDAwMDQwMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDEwMDAwNDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMTAwMDAwMDAxMDAwMDAwKSwgQ09OU1Q2NCgweDAxMDAwMDQwMDEwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDAwMTAwMDApLCBDT05TVDY0KDB4MDEwMDAwNDAwMDAxMDAwMCksIENPTlNUNjQoMHgwMTAwMDAwMDAxMDEwMDAwKSwgQ09OU1Q2NCgweDAxMDAwMDQwMDEwMTAwMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDAwMDAxMDApLCBDT05TVDY0KDB4MDEwMDAwNDAwMDAwMDEwMCksIENPTlNUNjQoMHgwMTAwMDAwMDAxMDAwMTAwKSwgQ09OU1Q2NCgweDAxMDAwMDQwMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDAwMTAxMDApLCBDT05TVDY0KDB4MDEwMDAwNDAwMDAxMDEwMCksIENPTlNUNjQoMHgwMTAwMDAwMDAxMDEwMTAwKSwgQ09OU1Q2NCgweDAxMDAwMDQwMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDAwMDAwMDEpLCBDT05TVDY0KDB4MDEwMDAwNDAwMDAwMDAwMSksIENPTlNUNjQoMHgwMTAwMDAwMDAxMDAwMDAxKSwgQ09OU1Q2NCgweDAxMDAwMDQwMDEwMDAwMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDAwMTAwMDEpLCBDT05TVDY0KDB4MDEwMDAwNDAwMDAxMDAwMSksIENPTlNUNjQoMHgwMTAwMDAwMDAxMDEwMDAxKSwgQ09OU1Q2NCgweDAxMDAwMDQwMDEwMTAwMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDAwMDAxMDEpLCBDT05TVDY0KDB4MDEwMDAwNDAwMDAwMDEwMSksIENPTlNUNjQoMHgwMTAwMDAwMDAxMDAwMTAxKSwgQ09OU1Q2NCgweDAxMDAwMDQwMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMDAwMDAwMTAxMDEpLCBDT05TVDY0KDB4MDEwMDAwNDAwMDAxMDEwMSksIENPTlNUNjQoMHgwMTAwMDAwMDAxMDEwMTAxKSwgQ09OU1Q2NCgweDAxMDAwMDQwMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMTAwNDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAxMDAwMDAxMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDEwMDQwMDEwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDAwMTAwMDApLCBDT05TVDY0KDB4MDAwMTAwNDAwMDAxMDAwMCksIENPTlNUNjQoMHgwMDAxMDAwMDAxMDEwMDAwKSwgQ09OU1Q2NCgweDAwMDEwMDQwMDEwMTAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDAwMDAxMDApLCBDT05TVDY0KDB4MDAwMTAwNDAwMDAwMDEwMCksIENPTlNUNjQoMHgwMDAxMDAwMDAxMDAwMTAwKSwgQ09OU1Q2NCgweDAwMDEwMDQwMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDAwMTAxMDApLCBDT05TVDY0KDB4MDAwMTAwNDAwMDAxMDEwMCksIENPTlNUNjQoMHgwMDAxMDAwMDAxMDEwMTAwKSwgQ09OU1Q2NCgweDAwMDEwMDQwMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDAwMDAwMDEpLCBDT05TVDY0KDB4MDAwMTAwNDAwMDAwMDAwMSksIENPTlNUNjQoMHgwMDAxMDAwMDAxMDAwMDAxKSwgQ09OU1Q2NCgweDAwMDEwMDQwMDEwMDAwMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDAwMTAwMDEpLCBDT05TVDY0KDB4MDAwMTAwNDAwMDAxMDAwMSksIENPTlNUNjQoMHgwMDAxMDAwMDAxMDEwMDAxKSwgQ09OU1Q2NCgweDAwMDEwMDQwMDEwMTAwMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDAwMDAxMDEpLCBDT05TVDY0KDB4MDAwMTAwNDAwMDAwMDEwMSksIENPTlNUNjQoMHgwMDAxMDAwMDAxMDAwMTAxKSwgQ09OU1Q2NCgweDAwMDEwMDQwMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMDAwMDAwMTAxMDEpLCBDT05TVDY0KDB4MDAwMTAwNDAwMDAxMDEwMSksIENPTlNUNjQoMHgwMDAxMDAwMDAxMDEwMTAxKSwgQ09OU1Q2NCgweDAwMDEwMDQwMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDEwMTAwNDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMTAxMDAwMDAxMDAwMDAwKSwgQ09OU1Q2NCgweDAxMDEwMDQwMDEwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDAwMTAwMDApLCBDT05TVDY0KDB4MDEwMTAwNDAwMDAxMDAwMCksIENPTlNUNjQoMHgwMTAxMDAwMDAxMDEwMDAwKSwgQ09OU1Q2NCgweDAxMDEwMDQwMDEwMTAwMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDAwMDAxMDApLCBDT05TVDY0KDB4MDEwMTAwNDAwMDAwMDEwMCksIENPTlNUNjQoMHgwMTAxMDAwMDAxMDAwMTAwKSwgQ09OU1Q2NCgweDAxMDEwMDQwMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDAwMTAxMDApLCBDT05TVDY0KDB4MDEwMTAwNDAwMDAxMDEwMCksIENPTlNUNjQoMHgwMTAxMDAwMDAxMDEwMTAwKSwgQ09OU1Q2NCgweDAxMDEwMDQwMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDAwMDAwMDEpLCBDT05TVDY0KDB4MDEwMTAwNDAwMDAwMDAwMSksIENPTlNUNjQoMHgwMTAxMDAwMDAxMDAwMDAxKSwgQ09OU1Q2NCgweDAxMDEwMDQwMDEwMDAwMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDAwMTAwMDEpLCBDT05TVDY0KDB4MDEwMTAwNDAwMDAxMDAwMSksIENPTlNUNjQoMHgwMTAxMDAwMDAxMDEwMDAxKSwgQ09OU1Q2NCgweDAxMDEwMDQwMDEwMTAwMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDAwMDAxMDEpLCBDT05TVDY0KDB4MDEwMTAwNDAwMDAwMDEwMSksIENPTlNUNjQoMHgwMTAxMDAwMDAxMDAwMTAxKSwgQ09OU1Q2NCgweDAxMDEwMDQwMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMDAwMDAwMTAxMDEpLCBDT05TVDY0KDB4MDEwMTAwNDAwMDAxMDEwMSksIENPTlNUNjQoMHgwMTAxMDAwMDAxMDEwMTAxKSwgQ09OU1Q2NCgweDAxMDEwMDQwMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMTAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAxNDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDEwMDAxMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMTQwMDEwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMTAwMDAwMTAwMDApLCBDT05TVDY0KDB4MDAwMDAxNDAwMDAxMDAwMCksIENPTlNUNjQoMHgwMDAwMDEwMDAxMDEwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMTQwMDEwMTAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMTAwMDAwMDAxMDApLCBDT05TVDY0KDB4MDAwMDAxNDAwMDAwMDEwMCksIENPTlNUNjQoMHgwMDAwMDEwMDAxMDAwMTAwKSwgQ09OU1Q2NCgweDAwMDAwMTQwMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMTAwMDAwMTAxMDApLCBDT05TVDY0KDB4MDAwMDAxNDAwMDAxMDEwMCksIENPTlNUNjQoMHgwMDAwMDEwMDAxMDEwMTAwKSwgQ09OU1Q2NCgweDAwMDAwMTQwMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMTAwMDAwMDAwMDEpLCBDT05TVDY0KDB4MDAwMDAxNDAwMDAwMDAwMSksIENPTlNUNjQoMHgwMDAwMDEwMDAxMDAwMDAxKSwgQ09OU1Q2NCgweDAwMDAwMTQwMDEwMDAwMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMTAwMDAwMTAwMDEpLCBDT05TVDY0KDB4MDAwMDAxNDAwMDAxMDAwMSksIENPTlNUNjQoMHgwMDAwMDEwMDAxMDEwMDAxKSwgQ09OU1Q2NCgweDAwMDAwMTQwMDEwMTAwMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMTAwMDAwMDAxMDEpLCBDT05TVDY0KDB4MDAwMDAxNDAwMDAwMDEwMSksIENPTlNUNjQoMHgwMDAwMDEwMDAxMDAwMTAxKSwgQ09OU1Q2NCgweDAwMDAwMTQwMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDAwMTAwMDAwMTAxMDEpLCBDT05TVDY0KDB4MDAwMDAxNDAwMDAxMDEwMSksIENPTlNUNjQoMHgwMDAwMDEwMDAxMDEwMTAxKSwgQ09OU1Q2NCgweDAwMDAwMTQwMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMTAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDEwMDAxNDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMTAwMDEwMDAxMDAwMDAwKSwgQ09OU1Q2NCgweDAxMDAwMTQwMDEwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMTAwMDAwMTAwMDApLCBDT05TVDY0KDB4MDEwMDAxNDAwMDAxMDAwMCksIENPTlNUNjQoMHgwMTAwMDEwMDAxMDEwMDAwKSwgQ09OU1Q2NCgweDAxMDAwMTQwMDEwMTAwMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMTAwMDAwMDAxMDApLCBDT05TVDY0KDB4MDEwMDAxNDAwMDAwMDEwMCksIENPTlNUNjQoMHgwMTAwMDEwMDAxMDAwMTAwKSwgQ09OU1Q2NCgweDAxMDAwMTQwMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMTAwMDAwMTAxMDApLCBDT05TVDY0KDB4MDEwMDAxNDAwMDAxMDEwMCksIENPTlNUNjQoMHgwMTAwMDEwMDAxMDEwMTAwKSwgQ09OU1Q2NCgweDAxMDAwMTQwMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDAwMTAwMDAwMDAwMDEpLCBDT05TVDY0KDB4MDEwMDAxNDAwMDAwMDAwMSksIENPTlNUNjQoMHgwMTAwMDEwMDAxMDAwMDAxKSwgQ09OU1Q2NCgweDAxMDAwMTQwMDEwMDAwMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMTAwMDAwMTAwMDEpLCBDT05TVDY0KDB4MDEwMDAxNDAwMDAxMDAwMSksIENPTlNUNjQoMHgwMTAwMDEwMDAxMDEwMDAxKSwgQ09OU1Q2NCgweDAxMDAwMTQwMDEwMTAwMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMTAwMDAwMDAxMDEpLCBDT05TVDY0KDB4MDEwMDAxNDAwMDAwMDEwMSksIENPTlNUNjQoMHgwMTAwMDEwMDAxMDAwMTAxKSwgQ09OU1Q2NCgweDAxMDAwMTQwMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDAwMTAwMDAwMTAxMDEpLCBDT05TVDY0KDB4MDEwMDAxNDAwMDAxMDEwMSksIENPTlNUNjQoMHgwMTAwMDEwMDAxMDEwMTAxKSwgQ09OU1Q2NCgweDAxMDAwMTQwMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMTAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMTAxNDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAxMDEwMDAxMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDEwMTQwMDEwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMTAwMDAwMTAwMDApLCBDT05TVDY0KDB4MDAwMTAxNDAwMDAxMDAwMCksIENPTlNUNjQoMHgwMDAxMDEwMDAxMDEwMDAwKSwgQ09OU1Q2NCgweDAwMDEwMTQwMDEwMTAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMTAwMDAwMDAxMDApLCBDT05TVDY0KDB4MDAwMTAxNDAwMDAwMDEwMCksIENPTlNUNjQoMHgwMDAxMDEwMDAxMDAwMTAwKSwgQ09OU1Q2NCgweDAwMDEwMTQwMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMTAwMDAwMTAxMDApLCBDT05TVDY0KDB4MDAwMTAxNDAwMDAxMDEwMCksIENPTlNUNjQoMHgwMDAxMDEwMDAxMDEwMTAwKSwgQ09OU1Q2NCgweDAwMDEwMTQwMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAwMDEwMTAwMDAwMDAwMDEpLCBDT05TVDY0KDB4MDAwMTAxNDAwMDAwMDAwMSksIENPTlNUNjQoMHgwMDAxMDEwMDAxMDAwMDAxKSwgQ09OU1Q2NCgweDAwMDEwMTQwMDEwMDAwMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMTAwMDAwMTAwMDEpLCBDT05TVDY0KDB4MDAwMTAxNDAwMDAxMDAwMSksIENPTlNUNjQoMHgwMDAxMDEwMDAxMDEwMDAxKSwgQ09OU1Q2NCgweDAwMDEwMTQwMDEwMTAwMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMTAwMDAwMDAxMDEpLCBDT05TVDY0KDB4MDAwMTAxNDAwMDAwMDEwMSksIENPTlNUNjQoMHgwMDAxMDEwMDAxMDAwMTAxKSwgQ09OU1Q2NCgweDAwMDEwMTQwMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAwMDEwMTAwMDAwMTAxMDEpLCBDT05TVDY0KDB4MDAwMTAxNDAwMDAxMDEwMSksIENPTlNUNjQoMHgwMDAxMDEwMDAxMDEwMTAxKSwgQ09OU1Q2NCgweDAwMDEwMTQwMDEwMTAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMTAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDEwMTAxNDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMTAxMDEwMDAxMDAwMDAwKSwgQ09OU1Q2NCgweDAxMDEwMTQwMDEwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMTAwMDAwMTAwMDApLCBDT05TVDY0KDB4MDEwMTAxNDAwMDAxMDAwMCksIENPTlNUNjQoMHgwMTAxMDEwMDAxMDEwMDAwKSwgQ09OU1Q2NCgweDAxMDEwMTQwMDEwMTAwMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMTAwMDAwMDAxMDApLCBDT05TVDY0KDB4MDEwMTAxNDAwMDAwMDEwMCksIENPTlNUNjQoMHgwMTAxMDEwMDAxMDAwMTAwKSwgQ09OU1Q2NCgweDAxMDEwMTQwMDEwMDAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMTAwMDAwMTAxMDApLCBDT05TVDY0KDB4MDEwMTAxNDAwMDAxMDEwMCksIENPTlNUNjQoMHgwMTAxMDEwMDAxMDEwMTAwKSwgQ09OU1Q2NCgweDAxMDEwMTQwMDEwMTAxMDApLCAKKyAgQ09OU1Q2NCgweDAxMDEwMTAwMDAwMDAwMDEpLCBDT05TVDY0KDB4MDEwMTAxNDAwMDAwMDAwMSksIENPTlNUNjQoMHgwMTAxMDEwMDAxMDAwMDAxKSwgQ09OU1Q2NCgweDAxMDEwMTQwMDEwMDAwMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMTAwMDAwMTAwMDEpLCBDT05TVDY0KDB4MDEwMTAxNDAwMDAxMDAwMSksIENPTlNUNjQoMHgwMTAxMDEwMDAxMDEwMDAxKSwgQ09OU1Q2NCgweDAxMDEwMTQwMDEwMTAwMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMTAwMDAwMDAxMDEpLCBDT05TVDY0KDB4MDEwMTAxNDAwMDAwMDEwMSksIENPTlNUNjQoMHgwMTAxMDEwMDAxMDAwMTAxKSwgQ09OU1Q2NCgweDAxMDEwMTQwMDEwMDAxMDEpLCAKKyAgQ09OU1Q2NCgweDAxMDEwMTAwMDAwMTAxMDEpLCBDT05TVDY0KDB4MDEwMTAxNDAwMDAxMDEwMSksIENPTlNUNjQoMHgwMTAxMDEwMDAxMDEwMTAxKSwgQ09OU1Q2NCgweDAxMDEwMTQwMDEwMTAxMDEpCisgIH0sIAoreyBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMTAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDQwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDEwNDAwMDAwMCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDA0MDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMTAwMDQwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDQwNDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDEwNDA0MDAwMCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDQwMCksIENPTlNUNjQoMHgwMDAwMDAwMTAwMDAwNDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDQwMDA0MDApLCBDT05TVDY0KDB4MDAwMDAwMDEwNDAwMDQwMCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDA0MDQwMCksIENPTlNUNjQoMHgwMDAwMDAwMTAwMDQwNDAwKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDQwNDA0MDApLCBDT05TVDY0KDB4MDAwMDAwMDEwNDA0MDQwMCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwNCksIENPTlNUNjQoMHgwMDAwMDAwMTAwMDAwMDA0KSwgQ09OU1Q2NCgweDAwMDAwMDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDAwMDAwMDEwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDA0MDAwNCksIENPTlNUNjQoMHgwMDAwMDAwMTAwMDQwMDA0KSwgQ09OU1Q2NCgweDAwMDAwMDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDAwMDAwMDEwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDQwNCksIENPTlNUNjQoMHgwMDAwMDAwMTAwMDAwNDA0KSwgQ09OU1Q2NCgweDAwMDAwMDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDAwMDAwMDEwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDAwMDAwMDAwMDA0MDQwNCksIENPTlNUNjQoMHgwMDAwMDAwMTAwMDQwNDA0KSwgQ09OU1Q2NCgweDAwMDAwMDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDAwMDAwMDEwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwNDAwMDAwMTAwMDAwMDAwKSwgQ09OU1Q2NCgweDA0MDAwMDAwMDQwMDAwMDApLCBDT05TVDY0KDB4MDQwMDAwMDEwNDAwMDAwMCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwMDA0MDAwMCksIENPTlNUNjQoMHgwNDAwMDAwMTAwMDQwMDAwKSwgQ09OU1Q2NCgweDA0MDAwMDAwMDQwNDAwMDApLCBDT05TVDY0KDB4MDQwMDAwMDEwNDA0MDAwMCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwMDAwMDQwMCksIENPTlNUNjQoMHgwNDAwMDAwMTAwMDAwNDAwKSwgQ09OU1Q2NCgweDA0MDAwMDAwMDQwMDA0MDApLCBDT05TVDY0KDB4MDQwMDAwMDEwNDAwMDQwMCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwMDA0MDQwMCksIENPTlNUNjQoMHgwNDAwMDAwMTAwMDQwNDAwKSwgQ09OU1Q2NCgweDA0MDAwMDAwMDQwNDA0MDApLCBDT05TVDY0KDB4MDQwMDAwMDEwNDA0MDQwMCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwMDAwMDAwNCksIENPTlNUNjQoMHgwNDAwMDAwMTAwMDAwMDA0KSwgQ09OU1Q2NCgweDA0MDAwMDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDQwMDAwMDEwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwMDA0MDAwNCksIENPTlNUNjQoMHgwNDAwMDAwMTAwMDQwMDA0KSwgQ09OU1Q2NCgweDA0MDAwMDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDQwMDAwMDEwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwMDAwMDQwNCksIENPTlNUNjQoMHgwNDAwMDAwMTAwMDAwNDA0KSwgQ09OU1Q2NCgweDA0MDAwMDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDQwMDAwMDEwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDQwMDAwMDAwMDA0MDQwNCksIENPTlNUNjQoMHgwNDAwMDAwMTAwMDQwNDA0KSwgQ09OU1Q2NCgweDA0MDAwMDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDQwMDAwMDEwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDA0MDAwMTAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDQwMDAwMDQwMDAwMDApLCBDT05TVDY0KDB4MDAwNDAwMDEwNDAwMDAwMCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwMDA0MDAwMCksIENPTlNUNjQoMHgwMDA0MDAwMTAwMDQwMDAwKSwgQ09OU1Q2NCgweDAwMDQwMDAwMDQwNDAwMDApLCBDT05TVDY0KDB4MDAwNDAwMDEwNDA0MDAwMCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwMDAwMDQwMCksIENPTlNUNjQoMHgwMDA0MDAwMTAwMDAwNDAwKSwgQ09OU1Q2NCgweDAwMDQwMDAwMDQwMDA0MDApLCBDT05TVDY0KDB4MDAwNDAwMDEwNDAwMDQwMCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwMDA0MDQwMCksIENPTlNUNjQoMHgwMDA0MDAwMTAwMDQwNDAwKSwgQ09OU1Q2NCgweDAwMDQwMDAwMDQwNDA0MDApLCBDT05TVDY0KDB4MDAwNDAwMDEwNDA0MDQwMCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwMDAwMDAwNCksIENPTlNUNjQoMHgwMDA0MDAwMTAwMDAwMDA0KSwgQ09OU1Q2NCgweDAwMDQwMDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDAwNDAwMDEwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwMDA0MDAwNCksIENPTlNUNjQoMHgwMDA0MDAwMTAwMDQwMDA0KSwgQ09OU1Q2NCgweDAwMDQwMDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDAwNDAwMDEwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwMDAwMDQwNCksIENPTlNUNjQoMHgwMDA0MDAwMTAwMDAwNDA0KSwgQ09OU1Q2NCgweDAwMDQwMDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDAwNDAwMDEwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDAwNDAwMDAwMDA0MDQwNCksIENPTlNUNjQoMHgwMDA0MDAwMTAwMDQwNDA0KSwgQ09OU1Q2NCgweDAwMDQwMDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDAwNDAwMDEwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgwNDA0MDAwMTAwMDAwMDAwKSwgQ09OU1Q2NCgweDA0MDQwMDAwMDQwMDAwMDApLCBDT05TVDY0KDB4MDQwNDAwMDEwNDAwMDAwMCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwMDA0MDAwMCksIENPTlNUNjQoMHgwNDA0MDAwMTAwMDQwMDAwKSwgQ09OU1Q2NCgweDA0MDQwMDAwMDQwNDAwMDApLCBDT05TVDY0KDB4MDQwNDAwMDEwNDA0MDAwMCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwMDAwMDQwMCksIENPTlNUNjQoMHgwNDA0MDAwMTAwMDAwNDAwKSwgQ09OU1Q2NCgweDA0MDQwMDAwMDQwMDA0MDApLCBDT05TVDY0KDB4MDQwNDAwMDEwNDAwMDQwMCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwMDA0MDQwMCksIENPTlNUNjQoMHgwNDA0MDAwMTAwMDQwNDAwKSwgQ09OU1Q2NCgweDA0MDQwMDAwMDQwNDA0MDApLCBDT05TVDY0KDB4MDQwNDAwMDEwNDA0MDQwMCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwMDAwMDAwNCksIENPTlNUNjQoMHgwNDA0MDAwMTAwMDAwMDA0KSwgQ09OU1Q2NCgweDA0MDQwMDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDQwNDAwMDEwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwMDA0MDAwNCksIENPTlNUNjQoMHgwNDA0MDAwMTAwMDQwMDA0KSwgQ09OU1Q2NCgweDA0MDQwMDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDQwNDAwMDEwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwMDAwMDQwNCksIENPTlNUNjQoMHgwNDA0MDAwMTAwMDAwNDA0KSwgQ09OU1Q2NCgweDA0MDQwMDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDQwNDAwMDEwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDQwNDAwMDAwMDA0MDQwNCksIENPTlNUNjQoMHgwNDA0MDAwMTAwMDQwNDA0KSwgQ09OU1Q2NCgweDA0MDQwMDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDQwNDAwMDEwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDQwMTAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwNDAwMDQwMDAwMDApLCBDT05TVDY0KDB4MDAwMDA0MDEwNDAwMDAwMCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwMDA0MDAwMCksIENPTlNUNjQoMHgwMDAwMDQwMTAwMDQwMDAwKSwgQ09OU1Q2NCgweDAwMDAwNDAwMDQwNDAwMDApLCBDT05TVDY0KDB4MDAwMDA0MDEwNDA0MDAwMCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwMDAwMDQwMCksIENPTlNUNjQoMHgwMDAwMDQwMTAwMDAwNDAwKSwgQ09OU1Q2NCgweDAwMDAwNDAwMDQwMDA0MDApLCBDT05TVDY0KDB4MDAwMDA0MDEwNDAwMDQwMCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwMDA0MDQwMCksIENPTlNUNjQoMHgwMDAwMDQwMTAwMDQwNDAwKSwgQ09OU1Q2NCgweDAwMDAwNDAwMDQwNDA0MDApLCBDT05TVDY0KDB4MDAwMDA0MDEwNDA0MDQwMCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwMDAwMDAwNCksIENPTlNUNjQoMHgwMDAwMDQwMTAwMDAwMDA0KSwgQ09OU1Q2NCgweDAwMDAwNDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDAwMDA0MDEwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwMDA0MDAwNCksIENPTlNUNjQoMHgwMDAwMDQwMTAwMDQwMDA0KSwgQ09OU1Q2NCgweDAwMDAwNDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDAwMDA0MDEwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwMDAwMDQwNCksIENPTlNUNjQoMHgwMDAwMDQwMTAwMDAwNDA0KSwgQ09OU1Q2NCgweDAwMDAwNDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDAwMDA0MDEwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDAwMDA0MDAwMDA0MDQwNCksIENPTlNUNjQoMHgwMDAwMDQwMTAwMDQwNDA0KSwgQ09OU1Q2NCgweDAwMDAwNDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDAwMDA0MDEwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwMDAwMDAwMCksIENPTlNUNjQoMHgwNDAwMDQwMTAwMDAwMDAwKSwgQ09OU1Q2NCgweDA0MDAwNDAwMDQwMDAwMDApLCBDT05TVDY0KDB4MDQwMDA0MDEwNDAwMDAwMCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwMDA0MDAwMCksIENPTlNUNjQoMHgwNDAwMDQwMTAwMDQwMDAwKSwgQ09OU1Q2NCgweDA0MDAwNDAwMDQwNDAwMDApLCBDT05TVDY0KDB4MDQwMDA0MDEwNDA0MDAwMCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwMDAwMDQwMCksIENPTlNUNjQoMHgwNDAwMDQwMTAwMDAwNDAwKSwgQ09OU1Q2NCgweDA0MDAwNDAwMDQwMDA0MDApLCBDT05TVDY0KDB4MDQwMDA0MDEwNDAwMDQwMCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwMDA0MDQwMCksIENPTlNUNjQoMHgwNDAwMDQwMTAwMDQwNDAwKSwgQ09OU1Q2NCgweDA0MDAwNDAwMDQwNDA0MDApLCBDT05TVDY0KDB4MDQwMDA0MDEwNDA0MDQwMCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwMDAwMDAwNCksIENPTlNUNjQoMHgwNDAwMDQwMTAwMDAwMDA0KSwgQ09OU1Q2NCgweDA0MDAwNDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDQwMDA0MDEwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwMDA0MDAwNCksIENPTlNUNjQoMHgwNDAwMDQwMTAwMDQwMDA0KSwgQ09OU1Q2NCgweDA0MDAwNDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDQwMDA0MDEwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwMDAwMDQwNCksIENPTlNUNjQoMHgwNDAwMDQwMTAwMDAwNDA0KSwgQ09OU1Q2NCgweDA0MDAwNDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDQwMDA0MDEwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDQwMDA0MDAwMDA0MDQwNCksIENPTlNUNjQoMHgwNDAwMDQwMTAwMDQwNDA0KSwgQ09OU1Q2NCgweDA0MDAwNDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDQwMDA0MDEwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDA0MDQwMTAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDQwNDAwMDQwMDAwMDApLCBDT05TVDY0KDB4MDAwNDA0MDEwNDAwMDAwMCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwMDA0MDAwMCksIENPTlNUNjQoMHgwMDA0MDQwMTAwMDQwMDAwKSwgQ09OU1Q2NCgweDAwMDQwNDAwMDQwNDAwMDApLCBDT05TVDY0KDB4MDAwNDA0MDEwNDA0MDAwMCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwMDAwMDQwMCksIENPTlNUNjQoMHgwMDA0MDQwMTAwMDAwNDAwKSwgQ09OU1Q2NCgweDAwMDQwNDAwMDQwMDA0MDApLCBDT05TVDY0KDB4MDAwNDA0MDEwNDAwMDQwMCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwMDA0MDQwMCksIENPTlNUNjQoMHgwMDA0MDQwMTAwMDQwNDAwKSwgQ09OU1Q2NCgweDAwMDQwNDAwMDQwNDA0MDApLCBDT05TVDY0KDB4MDAwNDA0MDEwNDA0MDQwMCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwMDAwMDAwNCksIENPTlNUNjQoMHgwMDA0MDQwMTAwMDAwMDA0KSwgQ09OU1Q2NCgweDAwMDQwNDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDAwNDA0MDEwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwMDA0MDAwNCksIENPTlNUNjQoMHgwMDA0MDQwMTAwMDQwMDA0KSwgQ09OU1Q2NCgweDAwMDQwNDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDAwNDA0MDEwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwMDAwMDQwNCksIENPTlNUNjQoMHgwMDA0MDQwMTAwMDAwNDA0KSwgQ09OU1Q2NCgweDAwMDQwNDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDAwNDA0MDEwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDAwNDA0MDAwMDA0MDQwNCksIENPTlNUNjQoMHgwMDA0MDQwMTAwMDQwNDA0KSwgQ09OU1Q2NCgweDAwMDQwNDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDAwNDA0MDEwNDA0MDQwNCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwMDAwMDAwMCksIENPTlNUNjQoMHgwNDA0MDQwMTAwMDAwMDAwKSwgQ09OU1Q2NCgweDA0MDQwNDAwMDQwMDAwMDApLCBDT05TVDY0KDB4MDQwNDA0MDEwNDAwMDAwMCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwMDA0MDAwMCksIENPTlNUNjQoMHgwNDA0MDQwMTAwMDQwMDAwKSwgQ09OU1Q2NCgweDA0MDQwNDAwMDQwNDAwMDApLCBDT05TVDY0KDB4MDQwNDA0MDEwNDA0MDAwMCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwMDAwMDQwMCksIENPTlNUNjQoMHgwNDA0MDQwMTAwMDAwNDAwKSwgQ09OU1Q2NCgweDA0MDQwNDAwMDQwMDA0MDApLCBDT05TVDY0KDB4MDQwNDA0MDEwNDAwMDQwMCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwMDA0MDQwMCksIENPTlNUNjQoMHgwNDA0MDQwMTAwMDQwNDAwKSwgQ09OU1Q2NCgweDA0MDQwNDAwMDQwNDA0MDApLCBDT05TVDY0KDB4MDQwNDA0MDEwNDA0MDQwMCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwMDAwMDAwNCksIENPTlNUNjQoMHgwNDA0MDQwMTAwMDAwMDA0KSwgQ09OU1Q2NCgweDA0MDQwNDAwMDQwMDAwMDQpLCBDT05TVDY0KDB4MDQwNDA0MDEwNDAwMDAwNCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwMDA0MDAwNCksIENPTlNUNjQoMHgwNDA0MDQwMTAwMDQwMDA0KSwgQ09OU1Q2NCgweDA0MDQwNDAwMDQwNDAwMDQpLCBDT05TVDY0KDB4MDQwNDA0MDEwNDA0MDAwNCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwMDAwMDQwNCksIENPTlNUNjQoMHgwNDA0MDQwMTAwMDAwNDA0KSwgQ09OU1Q2NCgweDA0MDQwNDAwMDQwMDA0MDQpLCBDT05TVDY0KDB4MDQwNDA0MDEwNDAwMDQwNCksIAorICBDT05TVDY0KDB4MDQwNDA0MDAwMDA0MDQwNCksIENPTlNUNjQoMHgwNDA0MDQwMTAwMDQwNDA0KSwgQ09OU1Q2NCgweDA0MDQwNDAwMDQwNDA0MDQpLCBDT05TVDY0KDB4MDQwNDA0MDEwNDA0MDQwNCkKKyAgfSwgCit7IENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDA0MDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAxMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwNDEwMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDA0MDAxMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAxMDEwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwNDEwMTAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDA0MDAwMDEwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAxMDAwMTAwMCksIENPTlNUNjQoMHgwMDAwMDAwNDEwMDAxMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDA0MDAxMDEwMDApLCBDT05TVDY0KDB4MDAwMDAwMDAxMDEwMTAwMCksIENPTlNUNjQoMHgwMDAwMDAwNDEwMTAxMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDEwKSwgQ09OU1Q2NCgweDAwMDAwMDA0MDAwMDAwMTApLCBDT05TVDY0KDB4MDAwMDAwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgwMDAwMDAwNDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMTAwMDEwKSwgQ09OU1Q2NCgweDAwMDAwMDA0MDAxMDAwMTApLCBDT05TVDY0KDB4MDAwMDAwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgwMDAwMDAwNDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAxMDEwKSwgQ09OU1Q2NCgweDAwMDAwMDA0MDAwMDEwMTApLCBDT05TVDY0KDB4MDAwMDAwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgwMDAwMDAwNDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMDAwMDAwMTAxMDEwKSwgQ09OU1Q2NCgweDAwMDAwMDA0MDAxMDEwMTApLCBDT05TVDY0KDB4MDAwMDAwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgwMDAwMDAwNDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDEwMDAwMDA0MDAwMDAwMDApLCBDT05TVDY0KDB4MTAwMDAwMDAxMDAwMDAwMCksIENPTlNUNjQoMHgxMDAwMDAwNDEwMDAwMDAwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDEwMDAwMDA0MDAxMDAwMDApLCBDT05TVDY0KDB4MTAwMDAwMDAxMDEwMDAwMCksIENPTlNUNjQoMHgxMDAwMDAwNDEwMTAwMDAwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDEwMDAwMDA0MDAwMDEwMDApLCBDT05TVDY0KDB4MTAwMDAwMDAxMDAwMTAwMCksIENPTlNUNjQoMHgxMDAwMDAwNDEwMDAxMDAwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDEwMDAwMDA0MDAxMDEwMDApLCBDT05TVDY0KDB4MTAwMDAwMDAxMDEwMTAwMCksIENPTlNUNjQoMHgxMDAwMDAwNDEwMTAxMDAwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDAwMDAwMDEwKSwgQ09OU1Q2NCgweDEwMDAwMDA0MDAwMDAwMTApLCBDT05TVDY0KDB4MTAwMDAwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgxMDAwMDAwNDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDAwMTAwMDEwKSwgQ09OU1Q2NCgweDEwMDAwMDA0MDAxMDAwMTApLCBDT05TVDY0KDB4MTAwMDAwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgxMDAwMDAwNDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDAwMDAxMDEwKSwgQ09OU1Q2NCgweDEwMDAwMDA0MDAwMDEwMTApLCBDT05TVDY0KDB4MTAwMDAwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgxMDAwMDAwNDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMDAwMDAwMTAxMDEwKSwgQ09OU1Q2NCgweDEwMDAwMDA0MDAxMDEwMTApLCBDT05TVDY0KDB4MTAwMDAwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgxMDAwMDAwNDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMTAwMDA0MDAwMDAwMDApLCBDT05TVDY0KDB4MDAxMDAwMDAxMDAwMDAwMCksIENPTlNUNjQoMHgwMDEwMDAwNDEwMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDAwMTAwMDA0MDAxMDAwMDApLCBDT05TVDY0KDB4MDAxMDAwMDAxMDEwMDAwMCksIENPTlNUNjQoMHgwMDEwMDAwNDEwMTAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDAwMTAwMDA0MDAwMDEwMDApLCBDT05TVDY0KDB4MDAxMDAwMDAxMDAwMTAwMCksIENPTlNUNjQoMHgwMDEwMDAwNDEwMDAxMDAwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDAwMTAwMDA0MDAxMDEwMDApLCBDT05TVDY0KDB4MDAxMDAwMDAxMDEwMTAwMCksIENPTlNUNjQoMHgwMDEwMDAwNDEwMTAxMDAwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDAwMDAwMDEwKSwgQ09OU1Q2NCgweDAwMTAwMDA0MDAwMDAwMTApLCBDT05TVDY0KDB4MDAxMDAwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgwMDEwMDAwNDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDAwMTAwMDEwKSwgQ09OU1Q2NCgweDAwMTAwMDA0MDAxMDAwMTApLCBDT05TVDY0KDB4MDAxMDAwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgwMDEwMDAwNDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDAwMDAxMDEwKSwgQ09OU1Q2NCgweDAwMTAwMDA0MDAwMDEwMTApLCBDT05TVDY0KDB4MDAxMDAwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgwMDEwMDAwNDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMDAwMDAwMTAxMDEwKSwgQ09OU1Q2NCgweDAwMTAwMDA0MDAxMDEwMTApLCBDT05TVDY0KDB4MDAxMDAwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgwMDEwMDAwNDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDEwMTAwMDA0MDAwMDAwMDApLCBDT05TVDY0KDB4MTAxMDAwMDAxMDAwMDAwMCksIENPTlNUNjQoMHgxMDEwMDAwNDEwMDAwMDAwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDEwMTAwMDA0MDAxMDAwMDApLCBDT05TVDY0KDB4MTAxMDAwMDAxMDEwMDAwMCksIENPTlNUNjQoMHgxMDEwMDAwNDEwMTAwMDAwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDEwMTAwMDA0MDAwMDEwMDApLCBDT05TVDY0KDB4MTAxMDAwMDAxMDAwMTAwMCksIENPTlNUNjQoMHgxMDEwMDAwNDEwMDAxMDAwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDEwMTAwMDA0MDAxMDEwMDApLCBDT05TVDY0KDB4MTAxMDAwMDAxMDEwMTAwMCksIENPTlNUNjQoMHgxMDEwMDAwNDEwMTAxMDAwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDAwMDAwMDEwKSwgQ09OU1Q2NCgweDEwMTAwMDA0MDAwMDAwMTApLCBDT05TVDY0KDB4MTAxMDAwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgxMDEwMDAwNDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDAwMTAwMDEwKSwgQ09OU1Q2NCgweDEwMTAwMDA0MDAxMDAwMTApLCBDT05TVDY0KDB4MTAxMDAwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgxMDEwMDAwNDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDAwMDAxMDEwKSwgQ09OU1Q2NCgweDEwMTAwMDA0MDAwMDEwMTApLCBDT05TVDY0KDB4MTAxMDAwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgxMDEwMDAwNDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMDAwMDAwMTAxMDEwKSwgQ09OU1Q2NCgweDEwMTAwMDA0MDAxMDEwMTApLCBDT05TVDY0KDB4MTAxMDAwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgxMDEwMDAwNDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAxMDA0MDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDEwMDAxMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMTAwNDEwMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDAwMDAxMDA0MDAxMDAwMDApLCBDT05TVDY0KDB4MDAwMDEwMDAxMDEwMDAwMCksIENPTlNUNjQoMHgwMDAwMTAwNDEwMTAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDAwMDAxMDA0MDAwMDEwMDApLCBDT05TVDY0KDB4MDAwMDEwMDAxMDAwMTAwMCksIENPTlNUNjQoMHgwMDAwMTAwNDEwMDAxMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDAwMDAxMDA0MDAxMDEwMDApLCBDT05TVDY0KDB4MDAwMDEwMDAxMDEwMTAwMCksIENPTlNUNjQoMHgwMDAwMTAwNDEwMTAxMDAwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDAwMDAwMDEwKSwgQ09OU1Q2NCgweDAwMDAxMDA0MDAwMDAwMTApLCBDT05TVDY0KDB4MDAwMDEwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgwMDAwMTAwNDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDAwMTAwMDEwKSwgQ09OU1Q2NCgweDAwMDAxMDA0MDAxMDAwMTApLCBDT05TVDY0KDB4MDAwMDEwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgwMDAwMTAwNDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDAwMDAxMDEwKSwgQ09OU1Q2NCgweDAwMDAxMDA0MDAwMDEwMTApLCBDT05TVDY0KDB4MDAwMDEwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgwMDAwMTAwNDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDAwMTAwMDAwMTAxMDEwKSwgQ09OU1Q2NCgweDAwMDAxMDA0MDAxMDEwMTApLCBDT05TVDY0KDB4MDAwMDEwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgwMDAwMTAwNDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDEwMDAxMDA0MDAwMDAwMDApLCBDT05TVDY0KDB4MTAwMDEwMDAxMDAwMDAwMCksIENPTlNUNjQoMHgxMDAwMTAwNDEwMDAwMDAwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDEwMDAxMDA0MDAxMDAwMDApLCBDT05TVDY0KDB4MTAwMDEwMDAxMDEwMDAwMCksIENPTlNUNjQoMHgxMDAwMTAwNDEwMTAwMDAwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDEwMDAxMDA0MDAwMDEwMDApLCBDT05TVDY0KDB4MTAwMDEwMDAxMDAwMTAwMCksIENPTlNUNjQoMHgxMDAwMTAwNDEwMDAxMDAwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDEwMDAxMDA0MDAxMDEwMDApLCBDT05TVDY0KDB4MTAwMDEwMDAxMDEwMTAwMCksIENPTlNUNjQoMHgxMDAwMTAwNDEwMTAxMDAwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDAwMDAwMDEwKSwgQ09OU1Q2NCgweDEwMDAxMDA0MDAwMDAwMTApLCBDT05TVDY0KDB4MTAwMDEwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgxMDAwMTAwNDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDAwMTAwMDEwKSwgQ09OU1Q2NCgweDEwMDAxMDA0MDAxMDAwMTApLCBDT05TVDY0KDB4MTAwMDEwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgxMDAwMTAwNDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDAwMDAxMDEwKSwgQ09OU1Q2NCgweDEwMDAxMDA0MDAwMDEwMTApLCBDT05TVDY0KDB4MTAwMDEwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgxMDAwMTAwNDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDAwMTAwMDAwMTAxMDEwKSwgQ09OU1Q2NCgweDEwMDAxMDA0MDAxMDEwMTApLCBDT05TVDY0KDB4MTAwMDEwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgxMDAwMTAwNDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMTAxMDA0MDAwMDAwMDApLCBDT05TVDY0KDB4MDAxMDEwMDAxMDAwMDAwMCksIENPTlNUNjQoMHgwMDEwMTAwNDEwMDAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDAwMTAxMDA0MDAxMDAwMDApLCBDT05TVDY0KDB4MDAxMDEwMDAxMDEwMDAwMCksIENPTlNUNjQoMHgwMDEwMTAwNDEwMTAwMDAwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDAwMTAxMDA0MDAwMDEwMDApLCBDT05TVDY0KDB4MDAxMDEwMDAxMDAwMTAwMCksIENPTlNUNjQoMHgwMDEwMTAwNDEwMDAxMDAwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDAwMTAxMDA0MDAxMDEwMDApLCBDT05TVDY0KDB4MDAxMDEwMDAxMDEwMTAwMCksIENPTlNUNjQoMHgwMDEwMTAwNDEwMTAxMDAwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDAwMDAwMDEwKSwgQ09OU1Q2NCgweDAwMTAxMDA0MDAwMDAwMTApLCBDT05TVDY0KDB4MDAxMDEwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgwMDEwMTAwNDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDAwMTAwMDEwKSwgQ09OU1Q2NCgweDAwMTAxMDA0MDAxMDAwMTApLCBDT05TVDY0KDB4MDAxMDEwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgwMDEwMTAwNDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDAwMDAxMDEwKSwgQ09OU1Q2NCgweDAwMTAxMDA0MDAwMDEwMTApLCBDT05TVDY0KDB4MDAxMDEwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgwMDEwMTAwNDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgwMDEwMTAwMDAwMTAxMDEwKSwgQ09OU1Q2NCgweDAwMTAxMDA0MDAxMDEwMTApLCBDT05TVDY0KDB4MDAxMDEwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgwMDEwMTAwNDEwMTAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDEwMTAxMDA0MDAwMDAwMDApLCBDT05TVDY0KDB4MTAxMDEwMDAxMDAwMDAwMCksIENPTlNUNjQoMHgxMDEwMTAwNDEwMDAwMDAwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDAwMTAwMDAwKSwgQ09OU1Q2NCgweDEwMTAxMDA0MDAxMDAwMDApLCBDT05TVDY0KDB4MTAxMDEwMDAxMDEwMDAwMCksIENPTlNUNjQoMHgxMDEwMTAwNDEwMTAwMDAwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDAwMDAxMDAwKSwgQ09OU1Q2NCgweDEwMTAxMDA0MDAwMDEwMDApLCBDT05TVDY0KDB4MTAxMDEwMDAxMDAwMTAwMCksIENPTlNUNjQoMHgxMDEwMTAwNDEwMDAxMDAwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDAwMTAxMDAwKSwgQ09OU1Q2NCgweDEwMTAxMDA0MDAxMDEwMDApLCBDT05TVDY0KDB4MTAxMDEwMDAxMDEwMTAwMCksIENPTlNUNjQoMHgxMDEwMTAwNDEwMTAxMDAwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDAwMDAwMDEwKSwgQ09OU1Q2NCgweDEwMTAxMDA0MDAwMDAwMTApLCBDT05TVDY0KDB4MTAxMDEwMDAxMDAwMDAxMCksIENPTlNUNjQoMHgxMDEwMTAwNDEwMDAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDAwMTAwMDEwKSwgQ09OU1Q2NCgweDEwMTAxMDA0MDAxMDAwMTApLCBDT05TVDY0KDB4MTAxMDEwMDAxMDEwMDAxMCksIENPTlNUNjQoMHgxMDEwMTAwNDEwMTAwMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDAwMDAxMDEwKSwgQ09OU1Q2NCgweDEwMTAxMDA0MDAwMDEwMTApLCBDT05TVDY0KDB4MTAxMDEwMDAxMDAwMTAxMCksIENPTlNUNjQoMHgxMDEwMTAwNDEwMDAxMDEwKSwgCisgIENPTlNUNjQoMHgxMDEwMTAwMDAwMTAxMDEwKSwgQ09OU1Q2NCgweDEwMTAxMDA0MDAxMDEwMTApLCBDT05TVDY0KDB4MTAxMDEwMDAxMDEwMTAxMCksIENPTlNUNjQoMHgxMDEwMTAwNDEwMTAxMDEwKQorICB9LCAKK3sgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMTAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDEwNDAwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDA0MDAwMDApLCBDT05TVDY0KDB4MDAwMDAwMTAwMDQwMDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDAwMDAwMDEwNDA0MDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDQwMDApLCBDT05TVDY0KDB4MDAwMDAwMTAwMDAwNDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDAwMDAwMDEwNDAwMDQwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDA0MDQwMDApLCBDT05TVDY0KDB4MDAwMDAwMTAwMDQwNDAwMCksIENPTlNUNjQoMHgwMDAwMDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDAwMDAwMDEwNDA0MDQwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwNDApLCBDT05TVDY0KDB4MDAwMDAwMTAwMDAwMDA0MCksIENPTlNUNjQoMHgwMDAwMDAwMDQwMDAwMDQwKSwgQ09OU1Q2NCgweDAwMDAwMDEwNDAwMDAwNDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDA0MDAwNDApLCBDT05TVDY0KDB4MDAwMDAwMTAwMDQwMDA0MCksIENPTlNUNjQoMHgwMDAwMDAwMDQwNDAwMDQwKSwgQ09OU1Q2NCgweDAwMDAwMDEwNDA0MDAwNDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDQwNDApLCBDT05TVDY0KDB4MDAwMDAwMTAwMDAwNDA0MCksIENPTlNUNjQoMHgwMDAwMDAwMDQwMDA0MDQwKSwgQ09OU1Q2NCgweDAwMDAwMDEwNDAwMDQwNDApLCAKKyAgQ09OU1Q2NCgweDAwMDAwMDAwMDA0MDQwNDApLCBDT05TVDY0KDB4MDAwMDAwMTAwMDQwNDA0MCksIENPTlNUNjQoMHgwMDAwMDAwMDQwNDA0MDQwKSwgQ09OU1Q2NCgweDAwMDAwMDEwNDA0MDQwNDApLCAKKyAgQ09OU1Q2NCgweDQwMDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4NDAwMDAwMTAwMDAwMDAwMCksIENPTlNUNjQoMHg0MDAwMDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDQwMDAwMDEwNDAwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDQwMDAwMDAwMDA0MDAwMDApLCBDT05TVDY0KDB4NDAwMDAwMTAwMDQwMDAwMCksIENPTlNUNjQoMHg0MDAwMDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDQwMDAwMDEwNDA0MDAwMDApLCAKKyAgQ09OU1Q2NCgweDQwMDAwMDAwMDAwMDQwMDApLCBDT05TVDY0KDB4NDAwMDAwMTAwMDAwNDAwMCksIENPTlNUNjQoMHg0MDAwMDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDQwMDAwMDEwNDAwMDQwMDApLCAKKyAgQ09OU1Q2NCgweDQwMDAwMDAwMDA0MDQwMDApLCBDT05TVDY0KDB4NDAwMDAwMTAwMDQwNDAwMCksIENPTlNUNjQoMHg0MDAwMDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDQwMDAwMDEwNDA0MDQwMDApLCAKKyAgQ09OU1Q2NCgweDQwMDAwMDAwMDAwMDAwNDApLCBDT05TVDY0KDB4NDAwMDAwMTAwMDAwMDA0MCksIENPTlNUNjQoMHg0MDAwMDAwMDQwMDAwMDQwKSwgQ09OU1Q2NCgweDQwMDAwMDEwNDAwMDAwNDApLCAKKyAgQ09OU1Q2NCgweDQwMDAwMDAwMDA0MDAwNDApLCBDT05TVDY0KDB4NDAwMDAwMTAwMDQwMDA0MCksIENPTlNUNjQoMHg0MDAwMDAwMDQwNDAwMDQwKSwgQ09OU1Q2NCgweDQwMDAwMDEwNDA0MDAwNDApLCAKKyAgQ09OU1Q2NCgweDQwMDAwMDAwMDAwMDQwNDApLCBDT05TVDY0KDB4NDAwMDAwMTAwMDAwNDA0MCksIENPTlNUNjQoMHg0MDAwMDAwMDQwMDA0MDQwKSwgQ09OU1Q2NCgweDQwMDAwMDEwNDAwMDQwNDApLCAKKyAgQ09OU1Q2NCgweDQwMDAwMDAwMDA0MDQwNDApLCBDT05TVDY0KDB4NDAwMDAwMTAwMDQwNDA0MCksIENPTlNUNjQoMHg0MDAwMDAwMDQwNDA0MDQwKSwgQ09OU1Q2NCgweDQwMDAwMDEwNDA0MDQwNDApLCAKKyAgQ09OU1Q2NCgweDAwNDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDA0MDAwMTAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDQwMDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDAwNDAwMDEwNDAwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwNDAwMDAwMDA0MDAwMDApLCBDT05TVDY0KDB4MDA0MDAwMTAwMDQwMDAwMCksIENPTlNUNjQoMHgwMDQwMDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDAwNDAwMDEwNDA0MDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwNDAwMDAwMDAwMDQwMDApLCBDT05TVDY0KDB4MDA0MDAwMTAwMDAwNDAwMCksIENPTlNUNjQoMHgwMDQwMDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDAwNDAwMDEwNDAwMDQwMDApLCAKKyAgQ09OU1Q2NCgweDAwNDAwMDAwMDA0MDQwMDApLCBDT05TVDY0KDB4MDA0MDAwMTAwMDQwNDAwMCksIENPTlNUNjQoMHgwMDQwMDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDAwNDAwMDEwNDA0MDQwMDApLCAKKyAgQ09OU1Q2NCgweDAwNDAwMDAwMDAwMDAwNDApLCBDT05TVDY0KDB4MDA0MDAwMTAwMDAwMDA0MCksIENPTlNUNjQoMHgwMDQwMDAwMDQwMDAwMDQwKSwgQ09OU1Q2NCgweDAwNDAwMDEwNDAwMDAwNDApLCAKKyAgQ09OU1Q2NCgweDAwNDAwMDAwMDA0MDAwNDApLCBDT05TVDY0KDB4MDA0MDAwMTAwMDQwMDA0MCksIENPTlNUNjQoMHgwMDQwMDAwMDQwNDAwMDQwKSwgQ09OU1Q2NCgweDAwNDAwMDEwNDA0MDAwNDApLCAKKyAgQ09OU1Q2NCgweDAwNDAwMDAwMDAwMDQwNDApLCBDT05TVDY0KDB4MDA0MDAwMTAwMDAwNDA0MCksIENPTlNUNjQoMHgwMDQwMDAwMDQwMDA0MDQwKSwgQ09OU1Q2NCgweDAwNDAwMDEwNDAwMDQwNDApLCAKKyAgQ09OU1Q2NCgweDAwNDAwMDAwMDA0MDQwNDApLCBDT05TVDY0KDB4MDA0MDAwMTAwMDQwNDA0MCksIENPTlNUNjQoMHgwMDQwMDAwMDQwNDA0MDQwKSwgQ09OU1Q2NCgweDAwNDAwMDEwNDA0MDQwNDApLCAKKyAgQ09OU1Q2NCgweDQwNDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4NDA0MDAwMTAwMDAwMDAwMCksIENPTlNUNjQoMHg0MDQwMDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDQwNDAwMDEwNDAwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDQwNDAwMDAwMDA0MDAwMDApLCBDT05TVDY0KDB4NDA0MDAwMTAwMDQwMDAwMCksIENPTlNUNjQoMHg0MDQwMDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDQwNDAwMDEwNDA0MDAwMDApLCAKKyAgQ09OU1Q2NCgweDQwNDAwMDAwMDAwMDQwMDApLCBDT05TVDY0KDB4NDA0MDAwMTAwMDAwNDAwMCksIENPTlNUNjQoMHg0MDQwMDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDQwNDAwMDEwNDAwMDQwMDApLCAKKyAgQ09OU1Q2NCgweDQwNDAwMDAwMDA0MDQwMDApLCBDT05TVDY0KDB4NDA0MDAwMTAwMDQwNDAwMCksIENPTlNUNjQoMHg0MDQwMDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDQwNDAwMDEwNDA0MDQwMDApLCAKKyAgQ09OU1Q2NCgweDQwNDAwMDAwMDAwMDAwNDApLCBDT05TVDY0KDB4NDA0MDAwMTAwMDAwMDA0MCksIENPTlNUNjQoMHg0MDQwMDAwMDQwMDAwMDQwKSwgQ09OU1Q2NCgweDQwNDAwMDEwNDAwMDAwNDApLCAKKyAgQ09OU1Q2NCgweDQwNDAwMDAwMDA0MDAwNDApLCBDT05TVDY0KDB4NDA0MDAwMTAwMDQwMDA0MCksIENPTlNUNjQoMHg0MDQwMDAwMDQwNDAwMDQwKSwgQ09OU1Q2NCgweDQwNDAwMDEwNDA0MDAwNDApLCAKKyAgQ09OU1Q2NCgweDQwNDAwMDAwMDAwMDQwNDApLCBDT05TVDY0KDB4NDA0MDAwMTAwMDAwNDA0MCksIENPTlNUNjQoMHg0MDQwMDAwMDQwMDA0MDQwKSwgQ09OU1Q2NCgweDQwNDAwMDEwNDAwMDQwNDApLCAKKyAgQ09OU1Q2NCgweDQwNDAwMDAwMDA0MDQwNDApLCBDT05TVDY0KDB4NDA0MDAwMTAwMDQwNDA0MCksIENPTlNUNjQoMHg0MDQwMDAwMDQwNDA0MDQwKSwgQ09OU1Q2NCgweDQwNDAwMDEwNDA0MDQwNDApLCAKKyAgQ09OU1Q2NCgweDAwMDA0MDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDAwMDQwMTAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDAwNDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDAwMDA0MDEwNDAwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDA0MDAwMDA0MDAwMDApLCBDT05TVDY0KDB4MDAwMDQwMTAwMDQwMDAwMCksIENPTlNUNjQoMHgwMDAwNDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDAwMDA0MDEwNDA0MDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDA0MDAwMDAwMDQwMDApLCBDT05TVDY0KDB4MDAwMDQwMTAwMDAwNDAwMCksIENPTlNUNjQoMHgwMDAwNDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDAwMDA0MDEwNDAwMDQwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDA0MDAwMDA0MDQwMDApLCBDT05TVDY0KDB4MDAwMDQwMTAwMDQwNDAwMCksIENPTlNUNjQoMHgwMDAwNDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDAwMDA0MDEwNDA0MDQwMDApLCAKKyAgQ09OU1Q2NCgweDAwMDA0MDAwMDAwMDAwNDApLCBDT05TVDY0KDB4MDAwMDQwMTAwMDAwMDA0MCksIENPTlNUNjQoMHgwMDAwNDAwMDQwMDAwMDQwKSwgQ09OU1Q2NCgweDAwMDA0MDEwNDAwMDAwNDApLCAKKyAgQ09OU1Q2NCgweDAwMDA0MDAwMDA0MDAwNDApLCBDT05TVDY0KDB4MDAwMDQwMTAwMDQwMDA0MCksIENPTlNUNjQoMHgwMDAwNDAwMDQwNDAwMDQwKSwgQ09OU1Q2NCgweDAwMDA0MDEwNDA0MDAwNDApLCAKKyAgQ09OU1Q2NCgweDAwMDA0MDAwMDAwMDQwNDApLCBDT05TVDY0KDB4MDAwMDQwMTAwMDAwNDA0MCksIENPTlNUNjQoMHgwMDAwNDAwMDQwMDA0MDQwKSwgQ09OU1Q2NCgweDAwMDA0MDEwNDAwMDQwNDApLCAKKyAgQ09OU1Q2NCgweDAwMDA0MDAwMDA0MDQwNDApLCBDT05TVDY0KDB4MDAwMDQwMTAwMDQwNDA0MCksIENPTlNUNjQoMHgwMDAwNDAwMDQwNDA0MDQwKSwgQ09OU1Q2NCgweDAwMDA0MDEwNDA0MDQwNDApLCAKKyAgQ09OU1Q2NCgweDQwMDA0MDAwMDAwMDAwMDApLCBDT05TVDY0KDB4NDAwMDQwMTAwMDAwMDAwMCksIENPTlNUNjQoMHg0MDAwNDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDQwMDA0MDEwNDAwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDQwMDA0MDAwMDA0MDAwMDApLCBDT05TVDY0KDB4NDAwMDQwMTAwMDQwMDAwMCksIENPTlNUNjQoMHg0MDAwNDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDQwMDA0MDEwNDA0MDAwMDApLCAKKyAgQ09OU1Q2NCgweDQwMDA0MDAwMDAwMDQwMDApLCBDT05TVDY0KDB4NDAwMDQwMTAwMDAwNDAwMCksIENPTlNUNjQoMHg0MDAwNDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDQwMDA0MDEwNDAwMDQwMDApLCAKKyAgQ09OU1Q2NCgweDQwMDA0MDAwMDA0MDQwMDApLCBDT05TVDY0KDB4NDAwMDQwMTAwMDQwNDAwMCksIENPTlNUNjQoMHg0MDAwNDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDQwMDA0MDEwNDA0MDQwMDApLCAKKyAgQ09OU1Q2NCgweDQwMDA0MDAwMDAwMDAwNDApLCBDT05TVDY0KDB4NDAwMDQwMTAwMDAwMDA0MCksIENPTlNUNjQoMHg0MDAwNDAwMDQwMDAwMDQwKSwgQ09OU1Q2NCgweDQwMDA0MDEwNDAwMDAwNDApLCAKKyAgQ09OU1Q2NCgweDQwMDA0MDAwMDA0MDAwNDApLCBDT05TVDY0KDB4NDAwMDQwMTAwMDQwMDA0MCksIENPTlNUNjQoMHg0MDAwNDAwMDQwNDAwMDQwKSwgQ09OU1Q2NCgweDQwMDA0MDEwNDA0MDAwNDApLCAKKyAgQ09OU1Q2NCgweDQwMDA0MDAwMDAwMDQwNDApLCBDT05TVDY0KDB4NDAwMDQwMTAwMDAwNDA0MCksIENPTlNUNjQoMHg0MDAwNDAwMDQwMDA0MDQwKSwgQ09OU1Q2NCgweDQwMDA0MDEwNDAwMDQwNDApLCAKKyAgQ09OU1Q2NCgweDQwMDA0MDAwMDA0MDQwNDApLCBDT05TVDY0KDB4NDAwMDQwMTAwMDQwNDA0MCksIENPTlNUNjQoMHg0MDAwNDAwMDQwNDA0MDQwKSwgQ09OU1Q2NCgweDQwMDA0MDEwNDA0MDQwNDApLCAKKyAgQ09OU1Q2NCgweDAwNDA0MDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MDA0MDQwMTAwMDAwMDAwMCksIENPTlNUNjQoMHgwMDQwNDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDAwNDA0MDEwNDAwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwNDA0MDAwMDA0MDAwMDApLCBDT05TVDY0KDB4MDA0MDQwMTAwMDQwMDAwMCksIENPTlNUNjQoMHgwMDQwNDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDAwNDA0MDEwNDA0MDAwMDApLCAKKyAgQ09OU1Q2NCgweDAwNDA0MDAwMDAwMDQwMDApLCBDT05TVDY0KDB4MDA0MDQwMTAwMDAwNDAwMCksIENPTlNUNjQoMHgwMDQwNDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDAwNDA0MDEwNDAwMDQwMDApLCAKKyAgQ09OU1Q2NCgweDAwNDA0MDAwMDA0MDQwMDApLCBDT05TVDY0KDB4MDA0MDQwMTAwMDQwNDAwMCksIENPTlNUNjQoMHgwMDQwNDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDAwNDA0MDEwNDA0MDQwMDApLCAKKyAgQ09OU1Q2NCgweDAwNDA0MDAwMDAwMDAwNDApLCBDT05TVDY0KDB4MDA0MDQwMTAwMDAwMDA0MCksIENPTlNUNjQoMHgwMDQwNDAwMDQwMDAwMDQwKSwgQ09OU1Q2NCgweDAwNDA0MDEwNDAwMDAwNDApLCAKKyAgQ09OU1Q2NCgweDAwNDA0MDAwMDA0MDAwNDApLCBDT05TVDY0KDB4MDA0MDQwMTAwMDQwMDA0MCksIENPTlNUNjQoMHgwMDQwNDAwMDQwNDAwMDQwKSwgQ09OU1Q2NCgweDAwNDA0MDEwNDA0MDAwNDApLCAKKyAgQ09OU1Q2NCgweDAwNDA0MDAwMDAwMDQwNDApLCBDT05TVDY0KDB4MDA0MDQwMTAwMDAwNDA0MCksIENPTlNUNjQoMHgwMDQwNDAwMDQwMDA0MDQwKSwgQ09OU1Q2NCgweDAwNDA0MDEwNDAwMDQwNDApLCAKKyAgQ09OU1Q2NCgweDAwNDA0MDAwMDA0MDQwNDApLCBDT05TVDY0KDB4MDA0MDQwMTAwMDQwNDA0MCksIENPTlNUNjQoMHgwMDQwNDAwMDQwNDA0MDQwKSwgQ09OU1Q2NCgweDAwNDA0MDEwNDA0MDQwNDApLCAKKyAgQ09OU1Q2NCgweDQwNDA0MDAwMDAwMDAwMDApLCBDT05TVDY0KDB4NDA0MDQwMTAwMDAwMDAwMCksIENPTlNUNjQoMHg0MDQwNDAwMDQwMDAwMDAwKSwgQ09OU1Q2NCgweDQwNDA0MDEwNDAwMDAwMDApLCAKKyAgQ09OU1Q2NCgweDQwNDA0MDAwMDA0MDAwMDApLCBDT05TVDY0KDB4NDA0MDQwMTAwMDQwMDAwMCksIENPTlNUNjQoMHg0MDQwNDAwMDQwNDAwMDAwKSwgQ09OU1Q2NCgweDQwNDA0MDEwNDA0MDAwMDApLCAKKyAgQ09OU1Q2NCgweDQwNDA0MDAwMDAwMDQwMDApLCBDT05TVDY0KDB4NDA0MDQwMTAwMDAwNDAwMCksIENPTlNUNjQoMHg0MDQwNDAwMDQwMDA0MDAwKSwgQ09OU1Q2NCgweDQwNDA0MDEwNDAwMDQwMDApLCAKKyAgQ09OU1Q2NCgweDQwNDA0MDAwMDA0MDQwMDApLCBDT05TVDY0KDB4NDA0MDQwMTAwMDQwNDAwMCksIENPTlNUNjQoMHg0MDQwNDAwMDQwNDA0MDAwKSwgQ09OU1Q2NCgweDQwNDA0MDEwNDA0MDQwMDApLCAKKyAgQ09OU1Q2NCgweDQwNDA0MDAwMDAwMDAwNDApLCBDT05TVDY0KDB4NDA0MDQwMTAwMDAwMDA0MCksIENPTlNUNjQoMHg0MDQwNDAwMDQwMDAwMDQwKSwgQ09OU1Q2NCgweDQwNDA0MDEwNDAwMDAwNDApLCAKKyAgQ09OU1Q2NCgweDQwNDA0MDAwMDA0MDAwNDApLCBDT05TVDY0KDB4NDA0MDQwMTAwMDQwMDA0MCksIENPTlNUNjQoMHg0MDQwNDAwMDQwNDAwMDQwKSwgQ09OU1Q2NCgweDQwNDA0MDEwNDA0MDAwNDApLCAKKyAgQ09OU1Q2NCgweDQwNDA0MDAwMDAwMDQwNDApLCBDT05TVDY0KDB4NDA0MDQwMTAwMDAwNDA0MCksIENPTlNUNjQoMHg0MDQwNDAwMDQwMDA0MDQwKSwgQ09OU1Q2NCgweDQwNDA0MDEwNDAwMDQwNDApLCAKKyAgQ09OU1Q2NCgweDQwNDA0MDAwMDA0MDQwNDApLCBDT05TVDY0KDB4NDA0MDQwMTAwMDQwNDA0MCksIENPTlNUNjQoMHg0MDQwNDAwMDQwNDA0MDQwKSwgQ09OU1Q2NCgweDQwNDA0MDEwNDA0MDQwNDApCisgIH19OworICAKKyNlbmRpZgorCisKK3N0YXRpYyB2b2lkIGNvb2tleShjb25zdCB1bG9uZzMyICpyYXcxLCB1bG9uZzMyICprZXlvdXQpOworCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgdm9pZCBfZGVza2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2hvcnQgZWRmLCB1bG9uZzMyICprZXlvdXQpCisjZWxzZQorc3RhdGljIHZvaWQgZGVza2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2hvcnQgZWRmLCB1bG9uZzMyICprZXlvdXQpCisjZW5kaWYKK3sKKyAgICB1bG9uZzMyIGksIGosIGwsIG0sIG4sIGtuWzMyXTsKKyAgICB1bnNpZ25lZCBjaGFyIHBjMW1bNTZdLCBwY3JbNTZdOworCisgICAgZm9yIChqPTA7IGogPCA1NjsgaisrKSB7CisgICAgICAgIGwgPSAodWxvbmczMilwYzFbal07CisgICAgICAgIG0gPSBsICYgNzsKKyAgICAgICAgcGMxbVtqXSA9ICh1bnNpZ25lZCBjaGFyKSgoa2V5W2wgPj4gM1VdICYgYnl0ZWJpdFttXSkgPT0gYnl0ZWJpdFttXSA/IDEgOiAwKTsKKyAgICB9CisKKyAgICBmb3IgKGk9MDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICAgaWYgKGVkZiA9PSBERTEpIHsKKyAgICAgICAgICAgbSA9ICgxNSAtIGkpIDw8IDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIG0gPSBpIDw8IDE7CisgICAgICAgIH0KKyAgICAgICAgbiA9IG0gKyAxOworICAgICAgICBrblttXSA9IGtuW25dID0gMEw7CisgICAgICAgIGZvciAoaj0wOyBqIDwgMjg7IGorKykgeworICAgICAgICAgICAgbCA9IGogKyAodWxvbmczMil0b3Ryb3RbaV07CisgICAgICAgICAgICBpZiAobCA8IDI4KSB7CisgICAgICAgICAgICAgICBwY3Jbal0gPSBwYzFtW2xdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgIHBjcltqXSA9IHBjMW1bbCAtIDI4XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKC8qaiA9IDI4Ki87IGogPCA1NjsgaisrKSB7CisgICAgICAgICAgICBsID0gaiArICh1bG9uZzMyKXRvdHJvdFtpXTsKKyAgICAgICAgICAgIGlmIChsIDwgNTYpIHsKKyAgICAgICAgICAgICAgIHBjcltqXSA9IHBjMW1bbF07CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgcGNyW2pdID0gcGMxbVtsIC0gMjhdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaj0wOyBqIDwgMjQ7IGorKykgIHsKKyAgICAgICAgICAgIGlmICgoaW50KXBjclsoaW50KXBjMltqXV0gIT0gMCkgeworICAgICAgICAgICAgICAga25bbV0gfD0gYmlnYnl0ZVtqXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgoaW50KXBjclsoaW50KXBjMltqKzI0XV0gIT0gMCkgeworICAgICAgICAgICAgICAga25bbl0gfD0gYmlnYnl0ZVtqXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvb2tleShrbiwga2V5b3V0KTsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIHZvaWQgZGVza2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgc2hvcnQgZWRmLCB1bG9uZzMyICprZXlvdXQpCit7CisgICBfZGVza2V5KGtleSwgZWRmLCBrZXlvdXQpOworICAgYnVybl9zdGFjayhzaXplb2YoaW50KSo1ICsgc2l6ZW9mKHVsb25nMzIpKjMyICsgc2l6ZW9mKHVuc2lnbmVkIGNoYXIpKjExMik7Cit9CisjZW5kaWYKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIHZvaWQgX2Nvb2tleShjb25zdCB1bG9uZzMyICpyYXcxLCB1bG9uZzMyICprZXlvdXQpCisjZWxzZQorc3RhdGljIHZvaWQgY29va2V5KGNvbnN0IHVsb25nMzIgKnJhdzEsIHVsb25nMzIgKmtleW91dCkKKyNlbmRpZgoreworICAgIHVsb25nMzIgKmNvb2s7CisgICAgY29uc3QgdWxvbmczMiAqcmF3MDsKKyAgICB1bG9uZzMyIGRvdWdoWzMyXTsKKyAgICBpbnQgaTsKKworICAgIGNvb2sgPSBkb3VnaDsKKyAgICBmb3IoaT0wOyBpIDwgMTY7IGkrKywgcmF3MSsrKQorICAgIHsKKyAgICAgICAgcmF3MCA9IHJhdzErKzsKKyAgICAgICAgKmNvb2sgICAgPSAoKnJhdzAgJiAweDAwZmMwMDAwTCkgPDwgNjsKKyAgICAgICAgKmNvb2sgICB8PSAoKnJhdzAgJiAweDAwMDAwZmMwTCkgPDwgMTA7CisgICAgICAgICpjb29rICAgfD0gKCpyYXcxICYgMHgwMGZjMDAwMEwpID4+IDEwOworICAgICAgICAqY29vaysrIHw9ICgqcmF3MSAmIDB4MDAwMDBmYzBMKSA+PiA2OworICAgICAgICAqY29vayAgICA9ICgqcmF3MCAmIDB4MDAwM2YwMDBMKSA8PCAxMjsKKyAgICAgICAgKmNvb2sgICB8PSAoKnJhdzAgJiAweDAwMDAwMDNmTCkgPDwgMTY7CisgICAgICAgICpjb29rICAgfD0gKCpyYXcxICYgMHgwMDAzZjAwMEwpID4+IDQ7CisgICAgICAgICpjb29rKysgfD0gKCpyYXcxICYgMHgwMDAwMDAzZkwpOworICAgIH0KKworICAgIFhNRU1DUFkoa2V5b3V0LCBkb3VnaCwgc2l6ZW9mIGRvdWdoKTsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIHZvaWQgY29va2V5KGNvbnN0IHVsb25nMzIgKnJhdzEsIHVsb25nMzIgKmtleW91dCkKK3sKKyAgIF9jb29rZXkocmF3MSwga2V5b3V0KTsKKyAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIgKikgKiAyICsgc2l6ZW9mKHVsb25nMzIpKjMyICsgc2l6ZW9mKGludCkpOworfQorI2VuZGlmCisKKyNpZm5kZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgdm9pZCBkZXNmdW5jKHVsb25nMzIgKmJsb2NrLCBjb25zdCB1bG9uZzMyICprZXlzKQorI2Vsc2UKK3N0YXRpYyB2b2lkIF9kZXNmdW5jKHVsb25nMzIgKmJsb2NrLCBjb25zdCB1bG9uZzMyICprZXlzKQorI2VuZGlmCit7CisgICAgdWxvbmczMiB3b3JrLCByaWdodCwgbGVmdHQ7CisgICAgaW50IGN1cl9yb3VuZDsKKworICAgIGxlZnR0ID0gYmxvY2tbMF07CisgICAgcmlnaHQgPSBibG9ja1sxXTsKKworI2lmZGVmIExUQ19TTUFMTF9DT0RFCisgICAgd29yayA9ICgobGVmdHQgPj4gNCkgIF4gcmlnaHQpICYgMHgwZjBmMGYwZkw7CisgICAgcmlnaHQgXj0gd29yazsKKyAgICBsZWZ0dCBePSAod29yayA8PCA0KTsKKworICAgIHdvcmsgPSAoKGxlZnR0ID4+IDE2KSBeIHJpZ2h0KSAmIDB4MDAwMGZmZmZMOworICAgIHJpZ2h0IF49IHdvcms7CisgICAgbGVmdHQgXj0gKHdvcmsgPDwgMTYpOworCisgICAgd29yayA9ICgocmlnaHQgPj4gMikgIF4gbGVmdHQpICYgMHgzMzMzMzMzM0w7CisgICAgbGVmdHQgXj0gd29yazsKKyAgICByaWdodCBePSAod29yayA8PCAyKTsKKworICAgIHdvcmsgPSAoKHJpZ2h0ID4+IDgpICBeIGxlZnR0KSAmIDB4MDBmZjAwZmZMOworICAgIGxlZnR0IF49IHdvcms7CisgICAgcmlnaHQgXj0gKHdvcmsgPDwgOCk7CisKKyAgICByaWdodCA9IFJPTGMocmlnaHQsIDEpOworICAgIHdvcmsgPSAobGVmdHQgXiByaWdodCkgJiAweGFhYWFhYWFhTDsKKyAgICAKKyAgICBsZWZ0dCBePSB3b3JrOworICAgIHJpZ2h0IF49IHdvcms7CisgICAgbGVmdHQgPSBST0xjKGxlZnR0LCAxKTsKKyNlbHNlIAorICAgeworICAgICAgdWxvbmc2NCB0bXA7CisgICAgICB0bXAgPSBkZXNfaXBbMF1bYnl0ZShsZWZ0dCwgMCldIF4KKyAgICAgICAgICAgIGRlc19pcFsxXVtieXRlKGxlZnR0LCAxKV0gXgorICAgICAgICAgICAgZGVzX2lwWzJdW2J5dGUobGVmdHQsIDIpXSBeCisgICAgICAgICAgICBkZXNfaXBbM11bYnl0ZShsZWZ0dCwgMyldIF4KKyAgICAgICAgICAgIGRlc19pcFs0XVtieXRlKHJpZ2h0LCAwKV0gXgorICAgICAgICAgICAgZGVzX2lwWzVdW2J5dGUocmlnaHQsIDEpXSBeCisgICAgICAgICAgICBkZXNfaXBbNl1bYnl0ZShyaWdodCwgMildIF4KKyAgICAgICAgICAgIGRlc19pcFs3XVtieXRlKHJpZ2h0LCAzKV07CisgICAgICBsZWZ0dCA9ICh1bG9uZzMyKSh0bXAgPj4gMzIpOworICAgICAgcmlnaHQgPSAodWxvbmczMikodG1wICYgMHhGRkZGRkZGRlVMKTsKKyAgIH0KKyNlbmRpZgorCisgICAgZm9yIChjdXJfcm91bmQgPSAwOyBjdXJfcm91bmQgPCA4OyBjdXJfcm91bmQrKykgeworICAgICAgICB3b3JrICA9IFJPUmMocmlnaHQsIDQpIF4gKmtleXMrKzsKKyAgICAgICAgbGVmdHQgXj0gU1A3W3dvcmsgICAgICAgICYgMHgzZkxdCisgICAgICAgICAgICAgIF4gU1A1Wyh3b3JrID4+ICA4KSAmIDB4M2ZMXQorICAgICAgICAgICAgICBeIFNQM1sod29yayA+PiAxNikgJiAweDNmTF0KKyAgICAgICAgICAgICAgXiBTUDFbKHdvcmsgPj4gMjQpICYgMHgzZkxdOworICAgICAgICB3b3JrICA9IHJpZ2h0IF4gKmtleXMrKzsKKyAgICAgICAgbGVmdHQgXj0gU1A4WyB3b3JrICAgICAgICAmIDB4M2ZMXQorICAgICAgICAgICAgICBeICBTUDZbKHdvcmsgPj4gIDgpICYgMHgzZkxdCisgICAgICAgICAgICAgIF4gIFNQNFsod29yayA+PiAxNikgJiAweDNmTF0KKyAgICAgICAgICAgICAgXiAgU1AyWyh3b3JrID4+IDI0KSAmIDB4M2ZMXTsKKworICAgICAgICB3b3JrID0gUk9SYyhsZWZ0dCwgNCkgXiAqa2V5cysrOworICAgICAgICByaWdodCBePSBTUDdbIHdvcmsgICAgICAgICYgMHgzZkxdCisgICAgICAgICAgICAgIF4gIFNQNVsod29yayA+PiAgOCkgJiAweDNmTF0KKyAgICAgICAgICAgICAgXiAgU1AzWyh3b3JrID4+IDE2KSAmIDB4M2ZMXQorICAgICAgICAgICAgICBeICBTUDFbKHdvcmsgPj4gMjQpICYgMHgzZkxdOworICAgICAgICB3b3JrICA9IGxlZnR0IF4gKmtleXMrKzsKKyAgICAgICAgcmlnaHQgXj0gU1A4WyB3b3JrICAgICAgICAmIDB4M2ZMXQorICAgICAgICAgICAgICBeICBTUDZbKHdvcmsgPj4gIDgpICYgMHgzZkxdCisgICAgICAgICAgICAgIF4gIFNQNFsod29yayA+PiAxNikgJiAweDNmTF0KKyAgICAgICAgICAgICAgXiAgU1AyWyh3b3JrID4+IDI0KSAmIDB4M2ZMXTsKKyAgICB9CisKKyNpZmRlZiBMVENfU01BTExfQ09ERSAgICAKKyAgICByaWdodCA9IFJPUmMocmlnaHQsIDEpOworICAgIHdvcmsgPSAobGVmdHQgXiByaWdodCkgJiAweGFhYWFhYWFhTDsKKyAgICBsZWZ0dCBePSB3b3JrOworICAgIHJpZ2h0IF49IHdvcms7CisgICAgbGVmdHQgPSBST1JjKGxlZnR0LCAxKTsKKyAgICB3b3JrID0gKChsZWZ0dCA+PiA4KSBeIHJpZ2h0KSAmIDB4MDBmZjAwZmZMOworICAgIHJpZ2h0IF49IHdvcms7CisgICAgbGVmdHQgXj0gKHdvcmsgPDwgOCk7CisgICAgLyogLS0gKi8KKyAgICB3b3JrID0gKChsZWZ0dCA+PiAyKSBeIHJpZ2h0KSAmIDB4MzMzMzMzMzNMOworICAgIHJpZ2h0IF49IHdvcms7CisgICAgbGVmdHQgXj0gKHdvcmsgPDwgMik7CisgICAgd29yayA9ICgocmlnaHQgPj4gMTYpIF4gbGVmdHQpICYgMHgwMDAwZmZmZkw7CisgICAgbGVmdHQgXj0gd29yazsKKyAgICByaWdodCBePSAod29yayA8PCAxNik7CisgICAgd29yayA9ICgocmlnaHQgPj4gNCkgXiBsZWZ0dCkgJiAweDBmMGYwZjBmTDsKKyAgICBsZWZ0dCBePSB3b3JrOworICAgIHJpZ2h0IF49ICh3b3JrIDw8IDQpOworI2Vsc2UgCisgICB7CisgICAgICB1bG9uZzY0IHRtcDsKKyAgICAgIHRtcCA9IGRlc19mcFswXVtieXRlKGxlZnR0LCAwKV0gXgorICAgICAgICAgICAgZGVzX2ZwWzFdW2J5dGUobGVmdHQsIDEpXSBeCisgICAgICAgICAgICBkZXNfZnBbMl1bYnl0ZShsZWZ0dCwgMildIF4KKyAgICAgICAgICAgIGRlc19mcFszXVtieXRlKGxlZnR0LCAzKV0gXgorICAgICAgICAgICAgZGVzX2ZwWzRdW2J5dGUocmlnaHQsIDApXSBeCisgICAgICAgICAgICBkZXNfZnBbNV1bYnl0ZShyaWdodCwgMSldIF4KKyAgICAgICAgICAgIGRlc19mcFs2XVtieXRlKHJpZ2h0LCAyKV0gXgorICAgICAgICAgICAgZGVzX2ZwWzddW2J5dGUocmlnaHQsIDMpXTsKKyAgICAgIGxlZnR0ID0gKHVsb25nMzIpKHRtcCA+PiAzMik7CisgICAgICByaWdodCA9ICh1bG9uZzMyKSh0bXAgJiAweEZGRkZGRkZGVUwpOworICAgfQorI2VuZGlmCisgICAgCisgICAgYmxvY2tbMF0gPSByaWdodDsKKyAgICBibG9ja1sxXSA9IGxlZnR0OworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgdm9pZCBkZXNmdW5jKHVsb25nMzIgKmJsb2NrLCBjb25zdCB1bG9uZzMyICprZXlzKQoreworICAgX2Rlc2Z1bmMoYmxvY2ssIGtleXMpOworICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiA0ICsgc2l6ZW9mKGludCkpOworfQorI2VuZGlmCisKKyNpZiAwCisgLyoqCisgICAgSW5pdGlhbGl6ZSB0aGUgREVTIGJsb2NrIGNpcGhlcgorICAgIEBwYXJhbSBrZXkgVGhlIHN5bW1ldHJpYyBrZXkgeW91IHdpc2ggdG8gcGFzcworICAgIEBwYXJhbSBrZXlsZW4gVGhlIGtleSBsZW5ndGggaW4gYnl0ZXMKKyAgICBAcGFyYW0gbnVtX3JvdW5kcyBUaGUgbnVtYmVyIG9mIHJvdW5kcyBkZXNpcmVkICgwIGZvciBkZWZhdWx0KQorICAgIEBwYXJhbSBza2V5IFRoZSBrZXkgaW4gYXMgc2NoZWR1bGVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBkZXNfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgICBpZiAobnVtX3JvdW5kcyAhPSAwICYmIG51bV9yb3VuZHMgIT0gMTYpIHsKKyAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgIH0KKworICAgIGlmIChrZXlsZW4gIT0gOCkgeworICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgIH0KKworICAgIGRlc2tleShrZXksIEVOMCwgc2tleS0+ZGVzLmVrKTsKKyAgICBkZXNrZXkoa2V5LCBERTEsIHNrZXktPmRlcy5kayk7CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisjZW5kaWYKKworIC8qKgorICAgIEluaXRpYWxpemUgdGhlIDNERVMtRURFIGJsb2NrIGNpcGhlcgorICAgIEBwYXJhbSBrZXkgVGhlIHN5bW1ldHJpYyBrZXkgeW91IHdpc2ggdG8gcGFzcworICAgIEBwYXJhbSBrZXlsZW4gVGhlIGtleSBsZW5ndGggaW4gYnl0ZXMKKyAgICBAcGFyYW0gbnVtX3JvdW5kcyBUaGUgbnVtYmVyIG9mIHJvdW5kcyBkZXNpcmVkICgwIGZvciBkZWZhdWx0KQorICAgIEBwYXJhbSBza2V5IFRoZSBrZXkgaW4gYXMgc2NoZWR1bGVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBkZXMzX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworCisgICAgaWYobnVtX3JvdW5kcyAhPSAwICYmIG51bV9yb3VuZHMgIT0gMTYpIHsKKyAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgIH0KKworICAgIGlmIChrZXlsZW4gIT0gMjQpIHsKKyAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgICB9CisKKyAgICBkZXNrZXkoa2V5LCAgICBFTjAsIHNrZXktPmRlczMuZWtbMF0pOworICAgIGRlc2tleShrZXkrOCwgIERFMSwgc2tleS0+ZGVzMy5la1sxXSk7CisgICAgZGVza2V5KGtleSsxNiwgRU4wLCBza2V5LT5kZXMzLmVrWzJdKTsKKworICAgIGRlc2tleShrZXksICAgIERFMSwgc2tleS0+ZGVzMy5ka1syXSk7CisgICAgZGVza2V5KGtleSs4LCAgRU4wLCBza2V5LT5kZXMzLmRrWzFdKTsKKyAgICBkZXNrZXkoa2V5KzE2LCBERTEsIHNrZXktPmRlczMuZGtbMF0pOworCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWYgMAorLyoqCisgIEVuY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIERFUworICBAcGFyYW0gcHQgVGhlIGlucHV0IHBsYWludGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlc19lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICAgdWxvbmczMiB3b3JrWzJdOworICAgIExUQ19BUkdDSEsocHQgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworICAgIExPQUQzMkgod29ya1swXSwgcHQrMCk7CisgICAgTE9BRDMySCh3b3JrWzFdLCBwdCs0KTsKKyAgICBkZXNmdW5jKHdvcmssIHNrZXktPmRlcy5layk7CisgICAgU1RPUkUzMkgod29ya1swXSxjdCswKTsKKyAgICBTVE9SRTMySCh3b3JrWzFdLGN0KzQpOworICAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIERlY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIERFUworICBAcGFyYW0gY3QgVGhlIGlucHV0IGNpcGhlcnRleHQgKDggYnl0ZXMpCisgIEBwYXJhbSBwdCBUaGUgb3V0cHV0IHBsYWludGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQgCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXNfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgIHVsb25nMzIgd29ya1syXTsKKyAgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhjdCAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKyAgICBMT0FEMzJIKHdvcmtbMF0sIGN0KzApOworICAgIExPQUQzMkgod29ya1sxXSwgY3QrNCk7CisgICAgZGVzZnVuYyh3b3JrLCBza2V5LT5kZXMuZGspOworICAgIFNUT1JFMzJIKHdvcmtbMF0scHQrMCk7CisgICAgU1RPUkUzMkgod29ya1sxXSxwdCs0KTsgIAorICAgIHJldHVybiBDUllQVF9PSzsKK30KKyNlbmRpZgorCisvKioKKyAgRW5jcnlwdHMgYSBibG9jayBvZiB0ZXh0IHdpdGggM0RFUy1FREUKKyAgQHBhcmFtIHB0IFRoZSBpbnB1dCBwbGFpbnRleHQgKDggYnl0ZXMpCisgIEBwYXJhbSBjdCBUaGUgb3V0cHV0IGNpcGhlcnRleHQgKDggYnl0ZXMpCisgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXMzX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgICB1bG9uZzMyIHdvcmtbMl07CisgICAgCisgICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoY3QgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisgICAgTE9BRDMySCh3b3JrWzBdLCBwdCswKTsKKyAgICBMT0FEMzJIKHdvcmtbMV0sIHB0KzQpOworICAgIGRlc2Z1bmMod29yaywgc2tleS0+ZGVzMy5la1swXSk7CisgICAgZGVzZnVuYyh3b3JrLCBza2V5LT5kZXMzLmVrWzFdKTsKKyAgICBkZXNmdW5jKHdvcmssIHNrZXktPmRlczMuZWtbMl0pOworICAgIFNUT1JFMzJIKHdvcmtbMF0sY3QrMCk7CisgICAgU1RPUkUzMkgod29ya1sxXSxjdCs0KTsKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBEZWNyeXB0cyBhIGJsb2NrIG9mIHRleHQgd2l0aCAzREVTLUVERQorICBAcGFyYW0gY3QgVGhlIGlucHV0IGNpcGhlcnRleHQgKDggYnl0ZXMpCisgIEBwYXJhbSBwdCBUaGUgb3V0cHV0IHBsYWludGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQgCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXMzX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgICB1bG9uZzMyIHdvcmtbMl07CisgICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoY3QgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisgICAgTE9BRDMySCh3b3JrWzBdLCBjdCswKTsKKyAgICBMT0FEMzJIKHdvcmtbMV0sIGN0KzQpOworICAgIGRlc2Z1bmMod29yaywgc2tleS0+ZGVzMy5ka1swXSk7CisgICAgZGVzZnVuYyh3b3JrLCBza2V5LT5kZXMzLmRrWzFdKTsKKyAgICBkZXNmdW5jKHdvcmssIHNrZXktPmRlczMuZGtbMl0pOworICAgIFNUT1JFMzJIKHdvcmtbMF0scHQrMCk7CisgICAgU1RPUkUzMkgod29ya1sxXSxwdCs0KTsKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZiAwCisvKioKKyAgUGVyZm9ybXMgYSBzZWxmLXRlc3Qgb2YgdGhlIERFUyBibG9jayBjaXBoZXIKKyAgQHJldHVybiBDUllQVF9PSyBpZiBmdW5jdGlvbmFsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0IGhhcyBiZWVuIGRpc2FibGVkCisqLworaW50IGRlc190ZXN0KHZvaWQpCit7CisgI2lmbmRlZiBMVENfVEVTVAorICAgIHJldHVybiBDUllQVF9OT1A7CisgI2Vsc2UgICAgCisgICAgaW50IGVycjsKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IGRlc190ZXN0X2Nhc2UgeworICAgICAgICBpbnQgbnVtLCBtb2RlOyAvKiBtb2RlIDEgPSBlbmNyeXB0ICovCisgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5WzhdLCB0eHRbOF0sIG91dFs4XTsKKyAgICB9IGNhc2VzW10gPSB7CisgICAgICAgIHsgMSwgMSwgICAgIHsgMHgxMCwgMHgzMSwgMHg2RSwgMHgwMiwgMHg4QywgMHg4RiwgMHgzQiwgMHg0QSB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweDgyLCAweERDLCAweEJBLCAweEZCLCAweERFLCAweEFCLCAweDY2LCAweDAyIH0gfSwKKyAgICAgICAgeyAyLCAxLCAgICAgeyAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxIH0sCisgICAgICAgICAgICAgICAgICAgIHsgMHg5NSwgMHhGOCwgMHhBNSwgMHhFNSwgMHhERCwgMHgzMSwgMHhEOSwgMHgwMCB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAorICAgICAgICB7IDMsIDEsICAgICB7IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweERELCAweDdGLCAweDEyLCAweDFDLCAweEE1LCAweDAxLCAweDU2LCAweDE5IH0sCisgICAgICAgICAgICAgICAgICAgIHsgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9IH0sCisgICAgICAgIHsgNCwgMSwgICAgIHsgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4MkUsIDB4ODYsIDB4NTMsIDB4MTAsIDB4NEYsIDB4MzgsIDB4MzQsIDB4RUEgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0gfSwKKyAgICAgICAgeyA1LCAxLCAgICAgeyAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxIH0sCisgICAgICAgICAgICAgICAgICAgIHsgMHg0QiwgMHhEMywgMHg4OCwgMHhGRiwgMHg2QywgMHhEOCwgMHgxRCwgMHg0RiB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAorICAgICAgICB7IDYsIDEsICAgICB7IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweDIwLCAweEI5LCAweEU3LCAweDY3LCAweEIyLCAweEZCLCAweDE0LCAweDU2IH0sCisgICAgICAgICAgICAgICAgICAgIHsgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9IH0sCisgICAgICAgIHsgNywgMSwgICAgIHsgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4NTUsIDB4NTcsIDB4OTMsIDB4ODAsIDB4RDcsIDB4NzEsIDB4MzgsIDB4RUYgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0gfSwKKyAgICAgICAgeyA4LCAxLCAgICAgeyAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxIH0sCisgICAgICAgICAgICAgICAgICAgIHsgMHg2QywgMHhDNSwgMHhERSwgMHhGQSwgMHhBRiwgMHgwNCwgMHg1MSwgMHgyRiB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAorICAgICAgICB7IDksIDEsICAgICB7IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweDBELCAweDlGLCAweDI3LCAweDlCLCAweEE1LCAweEQ4LCAweDcyLCAweDYwIH0sIAorICAgICAgICAgICAgICAgICAgICB7IDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAorICAgICAgICB7MTAsIDEsICAgICB7IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweEQ5LCAweDAzLCAweDFCLCAweDAyLCAweDcxLCAweEJELCAweDVBLCAweDBBIH0sCisgICAgICAgICAgICAgICAgICAgIHsgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9IH0sCisKKyAgICAgICAgeyAxLCAwLCAgICAgeyAweDEwLCAweDMxLCAweDZFLCAweDAyLCAweDhDLCAweDhGLCAweDNCLCAweDRBIH0sCisgICAgICAgICAgICAgICAgICAgIHsgMHg4MiwgMHhEQywgMHhCQSwgMHhGQiwgMHhERSwgMHhBQiwgMHg2NiwgMHgwMiB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAorICAgICAgICB7IDIsIDAsICAgICB7IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICAgICAgICAgICAgICAgICAgIHsgMHg5NSwgMHhGOCwgMHhBNSwgMHhFNSwgMHhERCwgMHgzMSwgMHhEOSwgMHgwMCB9IH0sCisgICAgICAgIHsgMywgMCwgICAgIHsgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweERELCAweDdGLCAweDEyLCAweDFDLCAweEE1LCAweDAxLCAweDU2LCAweDE5IH0gfSwKKyAgICAgICAgeyA0LCAwLCAgICAgeyAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxIH0sCisgICAgICAgICAgICAgICAgICAgIHsgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4MkUsIDB4ODYsIDB4NTMsIDB4MTAsIDB4NEYsIDB4MzgsIDB4MzQsIDB4RUEgfSB9LAorICAgICAgICB7IDUsIDAsICAgICB7IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICAgICAgICAgICAgICAgICAgIHsgMHg0QiwgMHhEMywgMHg4OCwgMHhGRiwgMHg2QywgMHhEOCwgMHgxRCwgMHg0RiB9IH0sCisgICAgICAgIHsgNiwgMCwgICAgIHsgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweDIwLCAweEI5LCAweEU3LCAweDY3LCAweEIyLCAweEZCLCAweDE0LCAweDU2IH0gfSwKKyAgICAgICAgeyA3LCAwLCAgICAgeyAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxLCAweDAxIH0sCisgICAgICAgICAgICAgICAgICAgIHsgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4NTUsIDB4NTcsIDB4OTMsIDB4ODAsIDB4RDcsIDB4NzEsIDB4MzgsIDB4RUYgfSB9LAorICAgICAgICB7IDgsIDAsICAgICB7IDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICAgICAgICAgICAgICAgICAgIHsgMHg2QywgMHhDNSwgMHhERSwgMHhGQSwgMHhBRiwgMHgwNCwgMHg1MSwgMHgyRiB9IH0sCisgICAgICAgIHsgOSwgMCwgICAgIHsgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweDBELCAweDlGLCAweDI3LCAweDlCLCAweEE1LCAweEQ4LCAweDcyLCAweDYwIH0gfSwgCisgICAgICAgIHsxMCwgMCwgICAgIHsgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSB9LAorICAgICAgICAgICAgICAgICAgICB7IDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAweEQ5LCAweDAzLCAweDFCLCAweDAyLCAweDcxLCAweEJELCAweDVBLCAweDBBIH0gfQorCisgICAgICAgIC8qKiogbW9yZSB0ZXN0IGNhc2VzIHlvdSBjb3VsZCBhZGQgaWYgeW91IGFyZSBub3QgY29udmluY2VkICh0aGUgYWJvdmUgdGVzdCBjYXNlcyBhcmVuJ3QgcmVhbGx5IHRvbyBnb29kKToKKworICAgICAgICAgICAgICAgIGtleSAgICAgICAgICAgICAgcGxhaW50ZXh0ICAgICAgICBjaXBoZXJ0ZXh0CisgICAgICAgICAgICAgICAgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDhDQTY0REU5QzFCMTIzQTcKKyAgICAgICAgICAgICAgICBGRkZGRkZGRkZGRkZGRkZGIEZGRkZGRkZGRkZGRkZGRkYgNzM1OUIyMTYzRTRFREM1OAorICAgICAgICAgICAgICAgIDMwMDAwMDAwMDAwMDAwMDAgMTAwMDAwMDAwMDAwMDAwMSA5NThFNkU2MjdBMDU1NTdCCisgICAgICAgICAgICAgICAgMTExMTExMTExMTExMTExMSAxMTExMTExMTExMTExMTExIEY0MDM3OUFCOUUwRUM1MzMKKyAgICAgICAgICAgICAgICAwMTIzNDU2Nzg5QUJDREVGIDExMTExMTExMTExMTExMTEgMTc2NjhERkM3MjkyNTMyRAorICAgICAgICAgICAgICAgIDExMTExMTExMTExMTExMTEgMDEyMzQ1Njc4OUFCQ0RFRiA4QTVBRTFGODFBQjhGMkRECisgICAgICAgICAgICAgICAgMDAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDhDQTY0REU5QzFCMTIzQTcKKyAgICAgICAgICAgICAgICBGRURDQkE5ODc2NTQzMjEwIDAxMjM0NTY3ODlBQkNERUYgRUQzOUQ5NTBGQTc0QkNDNAorICAgICAgICAgICAgICAgIDdDQTExMDQ1NEExQTZFNTcgMDFBMUQ2RDAzOTc3Njc0MiA2OTBGNUIwRDlBMjY5MzlCCisgICAgICAgICAgICAgICAgMDEzMUQ5NjE5REMxMzc2RSA1Q0Q1NENBODNERUY1N0RBIDdBMzg5RDEwMzU0QkQyNzEKKyAgICAgICAgICAgICAgICAwN0ExMTMzRTRBMEIyNjg2IDAyNDhENDM4MDZGNjcxNzIgODY4RUJCNTFDQUI0NTk5QQorICAgICAgICAgICAgICAgIDM4NDk2NzRDMjYwMjMxOUUgNTE0NTRCNTgyRERGNDQwQSA3MTc4ODc2RTAxRjE5QjJBCisgICAgICAgICAgICAgICAgMDRCOTE1QkE0M0ZFQjVCNiA0MkZENDQzMDU5NTc3RkEyIEFGMzdGQjQyMUY4QzQwOTUKKyAgICAgICAgICAgICAgICAwMTEzQjk3MEZEMzRGMkNFIDA1OUI1RTA4NTFDRjE0M0EgODZBNTYwRjEwRUM2RDg1QgorICAgICAgICAgICAgICAgIDAxNzBGMTc1NDY4RkI1RTYgMDc1NkQ4RTA3NzQ3NjFEMiAwQ0QzREEwMjAwMjFEQzA5CisgICAgICAgICAgICAgICAgNDMyOTdGQUQzOEUzNzNGRSA3NjI1MTRCODI5QkY0ODZBIEVBNjc2QjJDQjdEQjJCN0EKKyAgICAgICAgICAgICAgICAwN0E3MTM3MDQ1REEyQTE2IDNCREQxMTkwNDkzNzI4MDIgREZENjRBODE1Q0FGMUEwRgorICAgICAgICAgICAgICAgIDA0Njg5MTA0QzJGRDNCMkYgMjY5NTVGNjgzNUFGNjA5QSA1QzUxM0M5QzQ4ODZDMDg4CisgICAgICAgICAgICAgICAgMzdEMDZCQjUxNkNCNzU0NiAxNjRENUU0MDRGMjc1MjMyIDBBMkFFRUFFM0ZGNEFCNzcKKyAgICAgICAgICAgICAgICAxRjA4MjYwRDFBQzI0NjVFIDZCMDU2RTE4NzU5RjVDQ0EgRUYxQkYwM0U1REZBNTc1QQorICAgICAgICAgICAgICAgIDU4NDAyMzY0MUFCQTYxNzYgMDA0QkQ2RUYwOTE3NjA2MiA4OEJGMERCNkQ3MERFRTU2CisgICAgICAgICAgICAgICAgMDI1ODE2MTY0NjI5QjAwNyA0ODBEMzkwMDZFRTc2MkYyIEExRjk5MTU1NDEwMjBCNTYKKyAgICAgICAgICAgICAgICA0OTc5M0VCQzc5QjMyNThGIDQzNzU0MEM4Njk4RjNDRkEgNkZCRjFDQUZDRkZEMDU1NgorICAgICAgICAgICAgICAgIDRGQjA1RTE1MTVBQjczQTcgMDcyRDQzQTA3NzA3NTI5MiAyRjIyRTQ5QkFCN0NBMUFDCisgICAgICAgICAgICAgICAgNDlFOTVENkQ0Q0EyMjlCRiAwMkZFNTU3NzgxMTdGMTJBIDVBNkI2MTJDQzI2Q0NFNEEKKyAgICAgICAgICAgICAgICAwMTgzMTBEQzQwOUIyNkQ2IDFEOUQ1QzUwMThGNzI4QzIgNUY0QzAzOEVEMTJCMkU0MQorICAgICAgICAgICAgICAgIDFDNTg3RjFDMTM5MjRGRUYgMzA1NTMyMjg2RDZGMjk1QSA2M0ZBQzBEMDM0RDlGNzkzCisgICAgICAgICAgICAgICAgMDEwMTAxMDEwMTAxMDEwMSAwMTIzNDU2Nzg5QUJDREVGIDYxN0IzQTBDRThGMDcxMDAKKyAgICAgICAgICAgICAgICAxRjFGMUYxRjBFMEUwRTBFIDAxMjM0NTY3ODlBQkNERUYgREI5NTg2MDVGOEM4QzYwNgorICAgICAgICAgICAgICAgIEUwRkVFMEZFRjFGRUYxRkUgMDEyMzQ1Njc4OUFCQ0RFRiBFREJGRDFDNjZDMjlDQ0M3CisgICAgICAgICAgICAgICAgMDAwMDAwMDAwMDAwMDAwMCBGRkZGRkZGRkZGRkZGRkZGIDM1NTU1MEIyMTUwRTI0NTEKKyAgICAgICAgICAgICAgICBGRkZGRkZGRkZGRkZGRkZGIDAwMDAwMDAwMDAwMDAwMDAgQ0FBQUFGNERFQUYxREJBRQorICAgICAgICAgICAgICAgIDAxMjM0NTY3ODlBQkNERUYgMDAwMDAwMDAwMDAwMDAwMCBENUQ0NEZGNzIwNjgzRDBECisgICAgICAgICAgICAgICAgRkVEQ0JBOTg3NjU0MzIxMCBGRkZGRkZGRkZGRkZGRkZGIDJBMkJCMDA4REY5N0MyRjIKKworICAgICAgICAgICAgaHR0cDovL3d3dy5lY3Muc290b24uYWMudWsvfnBydzk5ci9lejQzOC92ZWN0b3JzLnR4dAorICAgICAgICAqKiovCisgICAgfTsKKyAgICBpbnQgaSwgeTsKKyAgICB1bnNpZ25lZCBjaGFyIHRtcFs4XTsKKyAgICBzeW1tZXRyaWNfa2V5IGRlczsKKworICAgIGZvcihpPTA7IGkgPCAoaW50KShzaXplb2YoY2FzZXMpL3NpemVvZihjYXNlc1swXSkpOyBpKyspCisgICAgeworICAgICAgICBpZiAoKGVyciA9IGRlc19zZXR1cChjYXNlc1tpXS5rZXksIDgsIDAsICZkZXMpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgICAgIGlmIChjYXNlc1tpXS5tb2RlICE9IDApIHsgCisgICAgICAgICAgIGRlc19lY2JfZW5jcnlwdChjYXNlc1tpXS50eHQsIHRtcCwgJmRlcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIGRlc19lY2JfZGVjcnlwdChjYXNlc1tpXS50eHQsIHRtcCwgJmRlcyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoWE1FTUNNUChjYXNlc1tpXS5vdXQsIHRtcCwgc2l6ZW9mKHRtcCkpICE9IDApIHsKKyAgICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICAgfQorCisgICAgICAvKiBub3cgc2VlIGlmIHdlIGNhbiBlbmNyeXB0IGFsbCB6ZXJvIGJ5dGVzIDEwMDAgdGltZXMsIGRlY3J5cHQgYW5kIGNvbWUgYmFjayB3aGVyZSB3ZSBzdGFydGVkICovCisgICAgICBmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSB0bXBbeV0gPSAwOworICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykgZGVzX2VjYl9lbmNyeXB0KHRtcCwgdG1wLCAmZGVzKTsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwOyB5KyspIGRlc19lY2JfZGVjcnlwdCh0bXAsIHRtcCwgJmRlcyk7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSBpZiAodG1wW3ldICE9IDApIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7Cit9CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7CisgICNlbmRpZgorfQorI2VuZGlmCisKK2ludCBkZXMzX3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZSAgICAKKyAgIHVuc2lnbmVkIGNoYXIga2V5WzI0XSwgcHRbOF0sIGN0WzhdLCB0bXBbOF07CisgICBzeW1tZXRyaWNfa2V5IHNrZXk7CisgICBpbnQgeCwgZXJyOworCisgICBpZiAoKGVyciA9IGRlc190ZXN0KCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CisgICAgICAgcHRbeF0gPSB4OworICAgfQorICAgCisgICBmb3IgKHggPSAwOyB4IDwgMjQ7IHgrKykgeworICAgICAgIGtleVt4XSA9IHg7CisgICB9CisKKyAgIGlmICgoZXJyID0gZGVzM19zZXR1cChrZXksIDI0LCAwLCAmc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgCisgICBkZXMzX2VjYl9lbmNyeXB0KHB0LCBjdCwgJnNrZXkpOworICAgZGVzM19lY2JfZGVjcnlwdChjdCwgdG1wLCAmc2tleSk7CisgICAKKyAgIGlmIChYTUVNQ01QKHB0LCB0bXAsIDgpICE9IDApIHsKKyAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICB9CisgICAKKyAgIHJldHVybiBDUllQVF9PSzsKKyAjZW5kaWYKK30KKworI2lmIDAKKy8qKiBUZXJtaW5hdGUgdGhlIGNvbnRleHQgCisgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorKi8KK3ZvaWQgZGVzX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSkKK3sKK30KKyNlbmRpZgorCisvKiogVGVybWluYXRlIHRoZSBjb250ZXh0IAorICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkKKyovCit2b2lkIGRlczNfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KQoreworfQorCisKKyNpZiAwCisvKioKKyAgR2V0cyBzdWl0YWJsZSBrZXkgc2l6ZQorICBAcGFyYW0ga2V5c2l6ZSBbaW4vb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSByZWNvbW1lbmRlZCBrZXkgKGluIGJ5dGVzKS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSB0aGUgc3VpdGFibGUgc2l6ZSBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgdGhlIGlucHV0IGtleSBzaXplIGlzIGFjY2VwdGFibGUuCisqLworaW50IGRlc19rZXlzaXplKGludCAqa2V5c2l6ZSkKK3sKKyAgICBMVENfQVJHQ0hLKGtleXNpemUgIT0gTlVMTCk7CisgICAgaWYoKmtleXNpemUgPCA4KSB7CisgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICAgfQorICAgICprZXlzaXplID0gODsKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisjZW5kaWYKKworLyoqCisgIEdldHMgc3VpdGFibGUga2V5IHNpemUKKyAgQHBhcmFtIGtleXNpemUgW2luL291dF0gVGhlIGxlbmd0aCBvZiB0aGUgcmVjb21tZW5kZWQga2V5IChpbiBieXRlcykuICBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgdGhlIHN1aXRhYmxlIHNpemUgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICBAcmV0dXJuIENSWVBUX09LIGlmIHRoZSBpbnB1dCBrZXkgc2l6ZSBpcyBhY2NlcHRhYmxlLgorKi8KK2ludCBkZXMzX2tleXNpemUoaW50ICprZXlzaXplKQoreworICAgIExUQ19BUkdDSEsoa2V5c2l6ZSAhPSBOVUxMKTsKKyAgICBpZigqa2V5c2l6ZSA8IDI0KSB7CisgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICAgfQorICAgICprZXlzaXplID0gMjQ7CisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9kZXMuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOCAyMzowMTowNiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9rYXN1bWkuYyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2thc3VtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMDc1YjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9rYXN1bWkuYwpAQCAtMCwwICsxLDMxOCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqCisgIEBmaWxlIGthc3VtaS5jCisgIEltcGxlbWVudGF0aW9uIG9mIHRoZSAzR1BQIEthc3VtaSBibG9jayBjaXBoZXIKKyAgRGVyaXZlZCBmcm9tIHRoZSAzR1BQIHN0YW5kYXJkIHNvdXJjZSBjb2RlCisqLworCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIExUQ19LQVNVTUkKKwordHlwZWRlZiB1bnNpZ25lZCB1MTY7CisKKyNkZWZpbmUgUk9MMTYoeCwgeSkgKCgoKHgpPDwoeSkpIHwgKCh4KT4+KDE2LSh5KSkpKSAmIDB4RkZGRikKKworY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBrYXN1bWlfZGVzYyA9IHsKKyAgICJrYXN1bWkiLAorICAgMjEsCisgICAxNiwgMTYsIDgsIDgsCisgICAma2FzdW1pX3NldHVwLAorICAgJmthc3VtaV9lY2JfZW5jcnlwdCwKKyAgICZrYXN1bWlfZWNiX2RlY3J5cHQsCisgICAma2FzdW1pX3Rlc3QsCisgICAma2FzdW1pX2RvbmUsCisgICAma2FzdW1pX2tleXNpemUsCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9OworCitzdGF0aWMgdTE2IEZJKCB1MTYgaW4sIHUxNiBzdWJrZXkgKQoreworICAgdTE2IG5pbmUsIHNldmVuOworICAgc3RhdGljIGNvbnN0IHUxNiBTN1sxMjhdID0geworICAgICAgNTQsIDUwLCA2MiwgNTYsIDIyLCAzNCwgOTQsIDk2LCAzOCwgNiwgNjMsIDkzLCAyLCAxOCwxMjMsIDMzLAorICAgICAgNTUsMTEzLCAzOSwxMTQsIDIxLCA2NywgNjUsIDEyLCA0NywgNzMsIDQ2LCAyNywgMjUsMTExLDEyNCwgODEsCisgICAgICA1MywgOSwxMjEsIDc5LCA1MiwgNjAsIDU4LCA0OCwxMDEsMTI3LCA0MCwxMjAsMTA0LCA3MCwgNzEsIDQzLAorICAgICAgMjAsMTIyLCA3MiwgNjEsIDIzLDEwOSwgMTMsMTAwLCA3NywgMSwgMTYsIDcsIDgyLCAxMCwxMDUsIDk4LAorICAgICAgMTE3LDExNiwgNzYsIDExLCA4OSwxMDYsIDAsMTI1LDExOCwgOTksIDg2LCA2OSwgMzAsIDU3LDEyNiwgODcsCisgICAgICAxMTIsIDUxLCAxNywgNSwgOTUsIDE0LCA5MCwgODQsIDkxLCA4LCAzNSwxMDMsIDMyLCA5NywgMjgsIDY2LAorICAgICAgMTAyLCAzMSwgMjYsIDQ1LCA3NSwgNCwgODUsIDkyLCAzNywgNzQsIDgwLCA0OSwgNjgsIDI5LDExNSwgNDQsCisgICAgICA2NCwxMDcsMTA4LCAyNCwxMTAsIDgzLCAzNiwgNzgsIDQyLCAxOSwgMTUsIDQxLCA4OCwxMTksIDU5LCAzIH07CisgIHN0YXRpYyBjb25zdCB1MTYgUzlbNTEyXSA9IHsKKyAgICAgIDE2NywyMzksMTYxLDM3OSwzOTEsMzM0LCA5LDMzOCwgMzgsMjI2LCA0OCwzNTgsNDUyLDM4NSwgOTAsMzk3LAorICAgICAgMTgzLDI1MywxNDcsMzMxLDQxNSwzNDAsIDUxLDM2MiwzMDYsNTAwLDI2MiwgODIsMjE2LDE1OSwzNTYsMTc3LAorICAgICAgMTc1LDI0MSw0ODksIDM3LDIwNiwgMTcsIDAsMzMzLCA0NCwyNTQsMzc4LCA1OCwxNDMsMjIwLCA4MSw0MDAsCisgICAgICAgOTUsIDMsMzE1LDI0NSwgNTQsMjM1LDIxOCw0MDUsNDcyLDI2NCwxNzIsNDk0LDM3MSwyOTAsMzk5LCA3NiwKKyAgICAgIDE2NSwxOTcsMzk1LDEyMSwyNTcsNDgwLDQyMywyMTIsMjQwLCAyOCw0NjIsMTc2LDQwNiw1MDcsMjg4LDIyMywKKyAgICAgIDUwMSw0MDcsMjQ5LDI2NSwgODksMTg2LDIyMSw0MjgsMTY0LCA3NCw0NDAsMTk2LDQ1OCw0MjEsMzUwLDE2MywKKyAgICAgIDIzMiwxNTgsMTM0LDM1NCwgMTMsMjUwLDQ5MSwxNDIsMTkxLCA2OSwxOTMsNDI1LDE1MiwyMjcsMzY2LDEzNSwKKyAgICAgIDM0NCwzMDAsMjc2LDI0Miw0MzcsMzIwLDExMywyNzgsIDExLDI0MywgODcsMzE3LCAzNiwgOTMsNDk2LCAyNywKKyAgICAgIDQ4Nyw0NDYsNDgyLCA0MSwgNjgsMTU2LDQ1NywxMzEsMzI2LDQwMywzMzksIDIwLCAzOSwxMTUsNDQyLDEyNCwKKyAgICAgIDQ3NSwzODQsNTA4LCA1MywxMTIsMTcwLDQ3OSwxNTEsMTI2LDE2OSwgNzMsMjY4LDI3OSwzMjEsMTY4LDM2NCwKKyAgICAgIDM2MywyOTIsIDQ2LDQ5OSwzOTMsMzI3LDMyNCwgMjQsNDU2LDI2NywxNTcsNDYwLDQ4OCw0MjYsMzA5LDIyOSwKKyAgICAgIDQzOSw1MDYsMjA4LDI3MSwzNDksNDAxLDQzNCwyMzYsIDE2LDIwOSwzNTksIDUyLCA1NiwxMjAsMTk5LDI3NywKKyAgICAgIDQ2NSw0MTYsMjUyLDI4NywyNDYsIDYsIDgzLDMwNSw0MjAsMzQ1LDE1Myw1MDIsIDY1LCA2MSwyNDQsMjgyLAorICAgICAgMTczLDIyMiw0MTgsIDY3LDM4NiwzNjgsMjYxLDEwMSw0NzYsMjkxLDE5NSw0MzAsIDQ5LCA3OSwxNjYsMzMwLAorICAgICAgMjgwLDM4MywzNzMsMTI4LDM4Miw0MDgsMTU1LDQ5NSwzNjcsMzg4LDI3NCwxMDcsNDU5LDQxNywgNjIsNDU0LAorICAgICAgMTMyLDIyNSwyMDMsMzE2LDIzNCwgMTQsMzAxLCA5MSw1MDMsMjg2LDQyNCwyMTEsMzQ3LDMwNywxNDAsMzc0LAorICAgICAgIDM1LDEwMywxMjUsNDI3LCAxOSwyMTQsNDUzLDE0Niw0OTgsMzE0LDQ0NCwyMzAsMjU2LDMyOSwxOTgsMjg1LAorICAgICAgIDUwLDExNiwgNzgsNDEwLCAxMCwyMDUsNTEwLDE3MSwyMzEsIDQ1LDEzOSw0NjcsIDI5LCA4Niw1MDUsIDMyLAorICAgICAgIDcyLCAyNiwzNDIsMTUwLDMxMyw0OTAsNDMxLDIzOCw0MTEsMzI1LDE0OSw0NzMsIDQwLDExOSwxNzQsMzU1LAorICAgICAgMTg1LDIzMywzODksIDcxLDQ0OCwyNzMsMzcyLCA1NSwxMTAsMTc4LDMyMiwgMTIsNDY5LDM5MiwzNjksMTkwLAorICAgICAgICAxLDEwOSwzNzUsMTM3LDE4MSwgODgsIDc1LDMwOCwyNjAsNDg0LCA5OCwyNzIsMzcwLDI3NSw0MTIsMTExLAorICAgICAgMzM2LDMxOCwgNCw1MDQsNDkyLDI1OSwzMDQsIDc3LDMzNyw0MzUsIDIxLDM1NywzMDMsMzMyLDQ4MywgMTgsCisgICAgICAgNDcsIDg1LCAyNSw0OTcsNDc0LDI4OSwxMDAsMjY5LDI5Niw0NzgsMjcwLDEwNiwgMzEsMTA0LDQzMywgODQsCisgICAgICA0MTQsNDg2LDM5NCwgOTYsIDk5LDE1NCw1MTEsMTQ4LDQxMywzNjEsNDA5LDI1NSwxNjIsMjE1LDMwMiwyMDEsCisgICAgICAyNjYsMzUxLDM0MywxNDQsNDQxLDM2NSwxMDgsMjk4LDI1MSwgMzQsMTgyLDUwOSwxMzgsMjEwLDMzNSwxMzMsCisgICAgICAzMTEsMzUyLDMyOCwxNDEsMzk2LDM0NiwxMjMsMzE5LDQ1MCwyODEsNDI5LDIyOCw0NDMsNDgxLCA5Miw0MDQsCisgICAgICA0ODUsNDIyLDI0OCwyOTcsIDIzLDIxMywxMzAsNDY2LCAyMiwyMTcsMjgzLCA3MCwyOTQsMzYwLDQxOSwxMjcsCisgICAgICAzMTIsMzc3LCA3LDQ2OCwxOTQsIDIsMTE3LDI5NSw0NjMsMjU4LDIyNCw0NDcsMjQ3LDE4NywgODAsMzk4LAorICAgICAgMjg0LDM1MywxMDUsMzkwLDI5OSw0NzEsNDcwLDE4NCwgNTcsMjAwLDM0OCwgNjMsMjA0LDE4OCwgMzMsNDUxLAorICAgICAgIDk3LCAzMCwzMTAsMjE5LCA5NCwxNjAsMTI5LDQ5MywgNjQsMTc5LDI2MywxMDIsMTg5LDIwNywxMTQsNDAyLAorICAgICAgNDM4LDQ3NywzODcsMTIyLDE5MiwgNDIsMzgxLCA1LDE0NSwxMTgsMTgwLDQ0OSwyOTMsMzIzLDEzNiwzODAsCisgICAgICAgNDMsIDY2LCA2MCw0NTUsMzQxLDQ0NSwyMDIsNDMyLCA4LDIzNywgMTUsMzc2LDQzNiw0NjQsIDU5LDQ2MX07CisKKyAgLyogVGhlIHNpeHRlZW4gYml0IGlucHV0IGlzIHNwbGl0IGludG8gdHdvIHVuZXF1YWwgaGFsdmVzLCAqCisgICAqIG5pbmUgYml0cyBhbmQgc2V2ZW4gYml0cyAtIGFzIGlzIHRoZSBzdWJrZXkgICAgICAgICAgICAqLworCisgIG5pbmUgID0gKHUxNikoaW4+PjcpJjB4MUZGOworICBzZXZlbiA9ICh1MTYpKGluJjB4N0YpOworCisgIC8qIE5vdyBydW4gdGhlIHZhcmlvdXMgb3BlcmF0aW9ucyAqLworICBuaW5lICAgPSAodTE2KShTOVtuaW5lXSBeIHNldmVuKTsKKyAgc2V2ZW4gID0gKHUxNikoUzdbc2V2ZW5dIF4gKG5pbmUgJiAweDdGKSk7CisgIHNldmVuIF49IChzdWJrZXk+PjkpOworICBuaW5lICBePSAoc3Via2V5JjB4MUZGKTsKKyAgbmluZSAgID0gKHUxNikoUzlbbmluZV0gXiBzZXZlbik7CisgIHNldmVuICA9ICh1MTYpKFM3W3NldmVuXSBeIChuaW5lICYgMHg3RikpOworICByZXR1cm4gKHUxNikoc2V2ZW48PDkpICsgbmluZTsKK30KKworc3RhdGljIHVsb25nMzIgRk8oIHVsb25nMzIgaW4sIGludCByb3VuZF9ubywgc3ltbWV0cmljX2tleSAqa2V5KQoreworICAgdTE2IGxlZnQsIHJpZ2h0OworCisgIC8qIFNwbGl0IHRoZSBpbnB1dCBpbnRvIHR3byAxNi1iaXQgd29yZHMgKi8KKyAgbGVmdCA9ICh1MTYpKGluPj4xNik7CisgIHJpZ2h0ID0gKHUxNikgaW4mMHhGRkZGOworCisgIC8qIE5vdyBhcHBseSB0aGUgc2FtZSBiYXNpYyB0cmFuc2Zvcm1hdGlvbiB0aHJlZSB0aW1lcyAqLworICBsZWZ0IF49IGtleS0+a2FzdW1pLktPaTFbcm91bmRfbm9dOworICBsZWZ0ID0gRkkoIGxlZnQsIGtleS0+a2FzdW1pLktJaTFbcm91bmRfbm9dICk7CisgIGxlZnQgXj0gcmlnaHQ7CisKKyAgcmlnaHQgXj0ga2V5LT5rYXN1bWkuS09pMltyb3VuZF9ub107CisgIHJpZ2h0ID0gRkkoIHJpZ2h0LCBrZXktPmthc3VtaS5LSWkyW3JvdW5kX25vXSApOworICByaWdodCBePSBsZWZ0OworCisgIGxlZnQgXj0ga2V5LT5rYXN1bWkuS09pM1tyb3VuZF9ub107CisgIGxlZnQgPSBGSSggbGVmdCwga2V5LT5rYXN1bWkuS0lpM1tyb3VuZF9ub10gKTsKKyAgbGVmdCBePSByaWdodDsKKworICByZXR1cm4gKCgodWxvbmczMilyaWdodCk8PDE2KStsZWZ0OworfQorCitzdGF0aWMgdWxvbmczMiBGTCggdWxvbmczMiBpbiwgaW50IHJvdW5kX25vLCBzeW1tZXRyaWNfa2V5ICprZXkgKQoreworICAgIHUxNiBsLCByLCBhLCBiOworICAgIC8qIHNwbGl0IG91dCB0aGUgbGVmdCBhbmQgcmlnaHQgaGFsdmVzICovCisgICAgbCA9ICh1MTYpKGluPj4xNik7CisgICAgciA9ICh1MTYpKGluKSYweEZGRkY7CisgICAgLyogZG8gdGhlIEZMKCkgb3BlcmF0aW9ucyAgICAgICAgICAgKi8KKyAgICBhID0gKHUxNikgKGwgJiBrZXktPmthc3VtaS5LTGkxW3JvdW5kX25vXSk7CisgICAgciBePSBST0wxNihhLDEpOworICAgIGIgPSAodTE2KShyIHwga2V5LT5rYXN1bWkuS0xpMltyb3VuZF9ub10pOworICAgIGwgXj0gUk9MMTYoYiwxKTsKKyAgICAvKiBwdXQgdGhlIHR3byBoYWx2ZXMgYmFjayB0b2dldGhlciAqLworCisgICAgcmV0dXJuICgoKHVsb25nMzIpbCk8PDE2KSArIHI7Cit9CisKK2ludCBrYXN1bWlfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgIHVsb25nMzIgbGVmdCwgcmlnaHQsIHRlbXA7CisgICAgaW50IG47CisKKyAgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhjdCAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKworICAgIExPQUQzMkgobGVmdCwgcHQpOworICAgIExPQUQzMkgocmlnaHQsIHB0KzQpOworCisgICAgZm9yIChuID0gMDsgbiA8PSA3OyApIHsgICAgIAorICAgICAgICB0ZW1wID0gRkwobGVmdCwgIG4sICAgc2tleSk7CisgICAgICAgIHRlbXAgPSBGTyh0ZW1wLCAgbisrLCBza2V5KTsKKyAgICAgICAgcmlnaHQgXj0gdGVtcDsKKyAgICAgICAgdGVtcCA9IEZPKHJpZ2h0LCBuLCAgIHNrZXkpOworICAgICAgICB0ZW1wID0gRkwodGVtcCwgIG4rKywgc2tleSk7CisgICAgICAgIGxlZnQgXj0gdGVtcDsKKyAgICB9CisKKyAgICBTVE9SRTMySChsZWZ0LCBjdCk7CisgICAgU1RPUkUzMkgocmlnaHQsIGN0KzQpOworCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCitpbnQga2FzdW1pX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgICB1bG9uZzMyIGxlZnQsIHJpZ2h0LCB0ZW1wOworICAgIGludCBuOworCisgICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoY3QgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgICBMT0FEMzJIKGxlZnQsIGN0KTsKKyAgICBMT0FEMzJIKHJpZ2h0LCBjdCs0KTsKKworICAgIGZvciAobiA9IDc7IG4gPj0gMDsgKSB7CisgICAgICAgIHRlbXAgPSBGTyhyaWdodCwgbiwgICBza2V5KTsKKyAgICAgICAgdGVtcCA9IEZMKHRlbXAsICBuLS0sIHNrZXkpOworICAgICAgICBsZWZ0IF49IHRlbXA7CisgICAgICAgIHRlbXAgPSBGTChsZWZ0LCAgbiwgICBza2V5KTsKKyAgICAgICAgdGVtcCA9IEZPKHRlbXAsICBuLS0sIHNrZXkpOworICAgICAgICByaWdodCBePSB0ZW1wOworICAgIH0KKworICAgIFNUT1JFMzJIKGxlZnQsIHB0KTsKKyAgICBTVE9SRTMySChyaWdodCwgcHQrNCk7CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKK2ludCBrYXN1bWlfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdTE2IENbOF0gPSB7IDB4MDEyMywweDQ1NjcsMHg4OUFCLDB4Q0RFRiwgMHhGRURDLDB4QkE5OCwweDc2NTQsMHgzMjEwIH07CisgICAgdTE2IHVrZXlbOF0sIEtwcmltZVs4XTsKKyAgICBpbnQgbjsKKworICAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgICBpZiAoa2V5bGVuICE9IDE2KSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgICB9CisKKyAgICBpZiAobnVtX3JvdW5kcyAhPSAwICYmIG51bV9yb3VuZHMgIT0gOCkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1JPVU5EUzsKKyAgICB9CisKKyAgICAvKiBTdGFydCBieSBlbnN1cmluZyB0aGUgc3Via2V5cyBhcmUgZW5kaWFuIGNvcnJlY3Qgb24gYSAxNi1iaXQgYmFzaXMgKi8KKyAgICBmb3IgKG4gPSAwOyBuIDwgODsgbisrICkgeworICAgICAgICB1a2V5W25dID0gKCgodTE2KWtleVsyKm5dKSA8PCA4KSB8IGtleVsyKm4rMV07CisgICAgfQorCisgICAgLyogTm93IGJ1aWxkIHRoZSBLJ1tdIGtleXMgKi8KKyAgICBmb3IgKG4gPSAwOyBuIDwgODsgbisrKSB7CisgICAgICAgIEtwcmltZVtuXSA9IHVrZXlbbl0gXiBDW25dOworICAgIH0KKworICAgIC8qIEZpbmFsbHkgY29uc3RydWN0IHRoZSB2YXJpb3VzIHN1YiBrZXlzICovCisgICAgZm9yKG4gPSAwOyBuIDwgODsgbisrKSB7CisgICAgICAgIHNrZXktPmthc3VtaS5LTGkxW25dID0gUk9MMTYodWtleVtuXSwxKTsKKyAgICAgICAgc2tleS0+a2FzdW1pLktMaTJbbl0gPSBLcHJpbWVbKG4rMikmMHg3XTsKKyAgICAgICAgc2tleS0+a2FzdW1pLktPaTFbbl0gPSBST0wxNih1a2V5WyhuKzEpJjB4N10sNSk7CisgICAgICAgIHNrZXktPmthc3VtaS5LT2kyW25dID0gUk9MMTYodWtleVsobis1KSYweDddLDgpOworICAgICAgICBza2V5LT5rYXN1bWkuS09pM1tuXSA9IFJPTDE2KHVrZXlbKG4rNikmMHg3XSwxMyk7CisgICAgICAgIHNrZXktPmthc3VtaS5LSWkxW25dID0gS3ByaW1lWyhuKzQpJjB4N107CisgICAgICAgIHNrZXktPmthc3VtaS5LSWkyW25dID0gS3ByaW1lWyhuKzMpJjB4N107CisgICAgICAgIHNrZXktPmthc3VtaS5LSWkzW25dID0gS3ByaW1lWyhuKzcpJjB4N107CisgICAgfQorCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCit2b2lkIGthc3VtaV9kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpCit7Cit9CisKK2ludCBrYXN1bWlfa2V5c2l6ZShpbnQgKmtleXNpemUpCit7CisgICBMVENfQVJHQ0hLKGtleXNpemUgIT0gTlVMTCk7CisgICBpZiAoKmtleXNpemUgPj0gMTYpIHsKKyAgICAgICprZXlzaXplID0gMTY7CisgICAgICByZXR1cm4gQ1JZUFRfT0s7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0KK30KKworaW50IGthc3VtaV90ZXN0KHZvaWQpCit7CisjaWZuZGVmIExUQ19URVNUCisgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdLCBwdFs4XSwgY3RbOF07CisgICB9IHRlc3RzW10gPSB7CisKK3sKKyAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4NEIsIDB4NTgsIDB4QTcsIDB4NzEsIDB4QUYsIDB4QzcsIDB4RTUsIDB4RTggfQorfSwKKworeworICAgeyAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHg3RSwgMHhFRiwgMHgxMSwgMHgzQywgMHg5NSwgMHhCQiwgMHg1QSwgMHg3NyB9Cit9LAorCit7CisgICB7IDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDVGLCAweDE0LCAweDA2LCAweDg2LCAweEQ3LCAweEFELCAweDVBLCAweDM5IH0sCit9LAorCit7CisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgeyAweDJFLCAweDE0LCAweDkxLCAweENGLCAweDcwLCAweEFBLCAweDQ2LCAweDVEIH0KK30sCisKK3sKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4QjUsIDB4NDUsIDB4ODYsIDB4RjQsIDB4QUIsIDB4OUEsIDB4RTUsIDB4NDYgfQorfSwKKworfTsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzJdWzhdOworICAgc3ltbWV0cmljX2tleSBrZXk7CisgICBpbnQgZXJyLCB4OworCisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKS9zaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAgaWYgKChlcnIgPSBrYXN1bWlfc2V0dXAodGVzdHNbeF0ua2V5LCAxNiwgMCwgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICB9CisgICAgICAgaWYgKChlcnIgPSBrYXN1bWlfZWNiX2VuY3J5cHQodGVzdHNbeF0ucHQsIGJ1ZlswXSwgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICB9CisgICAgICAgaWYgKChlcnIgPSBrYXN1bWlfZWNiX2RlY3J5cHQodGVzdHNbeF0uY3QsIGJ1ZlsxXSwgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICB9CisgICAgICAgaWYgKFhNRU1DTVAodGVzdHNbeF0ucHQsIGJ1ZlsxXSwgOCkgfHwgWE1FTUNNUCh0ZXN0c1t4XS5jdCwgYnVmWzBdLCA4KSkgeworICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgfQorICAgfQorICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9rYXN1bWkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA5IDAzOjA1OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2toYXphZC5jIGIvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMva2hhemFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5MDk1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2toYXphZC5jCkBAIC0wLDAgKzEsODU1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBraGF6YWQuYworICBLaGF6YWQgaW1wbGVtZW50YXRpb24gZGVyaXZlZCBmcm9tIHB1YmxpYyBkb21haW4gc291cmNlCisgIEF1dGhvcnM6IFBhdWxvIFMuTC5NLiBCYXJyZXRvIGFuZCBWaW5jZW50IFJpam1lbi4KKyovCisKKyNpZmRlZiBLSEFaQUQKKworY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBraGF6YWRfZGVzYyA9IHsKKyAgICJraGF6YWQiLAorICAgMTgsCisgICAxNiwgMTYsIDgsIDgsCisgICAma2hhemFkX3NldHVwLAorICAgJmtoYXphZF9lY2JfZW5jcnlwdCwKKyAgICZraGF6YWRfZWNiX2RlY3J5cHQsCisgICAma2hhemFkX3Rlc3QsCisgICAma2hhemFkX2RvbmUsCisgICAma2hhemFkX2tleXNpemUsCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9OworCisjZGVmaW5lIFIgICAgICA4IAorI2RlZmluZSBLRVlTSVpFICAgICAgMTI4IAorI2RlZmluZSBLRVlTSVpFQiAgIChLRVlTSVpFLzgpIAorI2RlZmluZSBCTE9DS1NJWkUgICA2NCAKKyNkZWZpbmUgQkxPQ0tTSVpFQiAgIChCTE9DS1NJWkUvOCkgCisKK3N0YXRpYyBjb25zdCB1bG9uZzY0IFQwWzI1Nl0gPSB7CisgICAgQ09OU1Q2NCgweGJhZDNkMjY4YmJiOTZhMDEpLCBDT05TVDY0KDB4NTRmYzRkMTllNTlhNjZiMSksIENPTlNUNjQoMHgyZjcxYmM5M2UyNjUxNGNkKSwgQ09OU1Q2NCgweDc0OWNjZGI5MjU4NzFiNTEpLAorICAgIENPTlNUNjQoMHg1M2Y1NTEwMmY3YTI1N2E0KSwgQ09OU1Q2NCgweGQzNjg2YmI4ZDBkNmJlMDMpLCBDT05TVDY0KDB4ZDI2YjZmYmRkNmRlYjUwNCksIENPTlNUNjQoMHg0ZGQ3Mjk2NGIzNTI4NWZlKSwKKyAgICBDT05TVDY0KDB4NTBmMDVkMGRmZGJhNGFhZCksIENPTlNUNjQoMHhhY2U5OGEyNmNmMDllMDYzKSwgQ09OU1Q2NCgweDhkOGEwZTgzMDkxYzk2ODQpLCBDT05TVDY0KDB4YmZkY2M2NzlhNTkxNGQxYSksCisgICAgQ09OU1Q2NCgweDcwOTBkZGFkM2RhNzM3NGQpLCBDT05TVDY0KDB4NTJmNjU1MDdmMWFhNWNhMyksIENPTlNUNjQoMHg5YWIzNTJjODdiYTQxN2UxKSwgQ09OU1Q2NCgweDRjZDQyZDYxYjU1YThlZjkpLAorICAgIENPTlNUNjQoMHhlYTIzOGY2NTQ2MDMyMGFjKSwgQ09OU1Q2NCgweGQ1NjI3M2E2YzRlNjg0MTEpLCBDT05TVDY0KDB4OTdhNDY2ZjE1NWNjNjhjMiksIENPTlNUNjQoMHhkMTZlNjNiMmRjYzZhODBkKSwKKyAgICBDT05TVDY0KDB4MzM1NWNjZmZhYTg1ZDA5OSksIENPTlNUNjQoMHg1MWYzNTkwOGZiYjI0MWFhKSwgQ09OU1Q2NCgweDViZWQ3MTJhYzdlMjBmOWMpLCBDT05TVDY0KDB4YTZmN2EyMDRmMzU5YWU1NSksCisgICAgQ09OU1Q2NCgweGRlN2Y1ZjgxZmViZWMxMjApLCBDT05TVDY0KDB4NDhkODNkNzVhZDdhYTJlNSksIENPTlNUNjQoMHhhOGU1OWEzMmQ3MjljYzdmKSwgQ09OU1Q2NCgweDk5YjY1ZWM3NzFiYzBhZTgpLAorICAgIENPTlNUNjQoMHhkYjcwNGI5MGUwOTZlNjNiKSwgQ09OU1Q2NCgweDMyNTZjOGZhYWM4ZGRiOWUpLCBDT05TVDY0KDB4YjdjNGU2NTE5NWQxMTUyMiksIENPTlNUNjQoMHhmYzE5ZDcyYjMyYjNhYWNlKSwKKyAgICBDT05TVDY0KDB4ZTMzOGFiNDg3MDRiNzM5MyksIENPTlNUNjQoMHg5ZWJmNDJkYzYzODQzYmZkKSwgQ09OU1Q2NCgweDkxYWU3ZWVmNDFmYzUyZDApLCBDT05TVDY0KDB4OWJiMDU2Y2Q3ZGFjMWNlNiksCisgICAgQ09OU1Q2NCgweGUyM2JhZjRkNzY0Mzc4OTQpLCBDT05TVDY0KDB4YmJkMGQ2NmRiZGIxNjEwNiksIENPTlNUNjQoMHg0MWMzMTk1ODliMzJmMWRhKSwgQ09OU1Q2NCgweDZlYjJhNWNiNzk1N2U1MTcpLAorICAgIENPTlNUNjQoMHhhNWYyYWUwYmY5NDFiMzVjKSwgQ09OU1Q2NCgweGNiNDAwYmMwODAxNjU2NGIpLCBDT05TVDY0KDB4NmJiZGIxZGE2NzdmYzIwYyksIENPTlNUNjQoMHg5NWEyNmVmYjU5ZGM3ZWNjKSwKKyAgICBDT05TVDY0KDB4YTFmZWJlMWZlMTYxOWY0MCksIENPTlNUNjQoMHhmMzA4ZWIxODEwY2JjM2UzKSwgQ09OU1Q2NCgweGIxY2VmZTRmODFlMTJmMzApLCBDT05TVDY0KDB4MDIwNjA4MGEwYzEwMTYwZSksCisgICAgQ09OU1Q2NCgweGNjNDkxN2RiOTIyZTY3NWUpLCBDT05TVDY0KDB4YzQ1MTM3ZjNhMjZlM2Y2NiksIENPTlNUNjQoMHgxZDI3NzQ2OTRlZThjZjUzKSwgQ09OU1Q2NCgweDE0M2M1MDQ0NzhhMDljNmMpLAorICAgIENPTlNUNjQoMHhjMzU4MmJlOGIwNTYwZTczKSwgQ09OU1Q2NCgweDYzYTU5MWYyNTczZjlhMzQpLCBDT05TVDY0KDB4ZGE3MzRmOTVlNjllZWQzYyksIENPTlNUNjQoMHg1ZGU3NjkzNGQzZDIzNThlKSwKKyAgICBDT05TVDY0KDB4NWZlMTYxM2VkZmMyMjM4MCksIENPTlNUNjQoMHhkYzc5NTc4YmYyYWVkNzJlKSwgQ09OU1Q2NCgweDdkODdlOTk0MTNjZjQ4NmUpLCBDT05TVDY0KDB4Y2Q0YTEzZGU5NDI2NmM1OSksCisgICAgQ09OU1Q2NCgweDdmODFlMTllMWZkZjVlNjApLCBDT05TVDY0KDB4NWFlZTc1MmZjMWVhMDQ5YiksIENPTlNUNjQoMHg2Y2I0YWRjMTc1NDdmMzE5KSwgQ09OU1Q2NCgweDVjZTQ2ZDMxZDVkYTNlODkpLAorICAgIENPTlNUNjQoMHhmNzA0ZmIwYzA4ZWJlZmZmKSwgQ09OU1Q2NCgweDI2NmE5OGJlZDQyZDQ3ZjIpLCBDT05TVDY0KDB4ZmYxY2RiMjQzOGFiYjdjNyksIENPTlNUNjQoMHhlZDJhOTM3ZTU0M2IxMWI5KSwKKyAgICBDT05TVDY0KDB4ZTgyNTg3NmY0YTEzMzZhMiksIENPTlNUNjQoMHg5ZGJhNGVkMzY5OWMyNmY0KSwgQ09OU1Q2NCgweDZmYjFhMWNlN2Y1ZmVlMTApLCBDT05TVDY0KDB4OGU4ZjAyOGMwMzA0OGI4ZCksCisgICAgQ09OU1Q2NCgweDE5MmI2NDdkNTZjOGUzNGYpLCBDT05TVDY0KDB4YTBmZGJhMWFlNzY5OTQ0NyksIENPTlNUNjQoMHhmMDBkZTcxNzFhZDNkZWVhKSwgQ09OU1Q2NCgweDg5ODYxZTk3MTEzY2JhOTgpLAorICAgIENPTlNUNjQoMHgwZjExM2MzMzIyNzg2OTJkKSwgQ09OU1Q2NCgweDA3MDkxYzFiMTIzODMxMTUpLCBDT05TVDY0KDB4YWZlYzg2MjljNTExZmQ2YSksIENPTlNUNjQoMHhmYjEwY2IzMDIwOGI5YmRiKSwKKyAgICBDT05TVDY0KDB4MDgxODIwMjgzMDQwNTgzOCksIENPTlNUNjQoMHgxNTNmNTQ0MTdlYTg5NzZiKSwgQ09OU1Q2NCgweDBkMTczNDM5MmU2ODdmMjMpLCBDT05TVDY0KDB4MDQwYzEwMTQxODIwMmMxYyksCisgICAgQ09OU1Q2NCgweDAxMDMwNDA1MDYwODBiMDcpLCBDT05TVDY0KDB4NjRhYzhkZTk0NTA3YWIyMSksIENPTlNUNjQoMHhkZjdjNWI4NGY4YjZjYTI3KSwgQ09OU1Q2NCgweDc2OWFjNWIzMjk5NzBkNWYpLAorICAgIENPTlNUNjQoMHg3OThiZjk4MDBiZWY2NDcyKSwgQ09OU1Q2NCgweGRkN2E1MzhlZjRhNmRjMjkpLCBDT05TVDY0KDB4M2Q0N2Y0Yzk4ZWY1YjJiMyksIENPTlNUNjQoMHgxNjNhNTg0ZTc0YjA4YTYyKSwKKyAgICBDT05TVDY0KDB4M2Y0MWZjYzM4MmU1YTRiZCksIENPTlNUNjQoMHgzNzU5ZGNlYmIyYTVmYzg1KSwgQ09OU1Q2NCgweDZkYjdhOWM0NzM0ZmY4MWUpLCBDT05TVDY0KDB4Mzg0OGUwZDg5MGRkOTVhOCksCisgICAgQ09OU1Q2NCgweGI5ZDZkZTY3YjFhMTc3MDgpLCBDT05TVDY0KDB4NzM5NWQxYTIzN2JmMmE0NCksIENPTlNUNjQoMHhlOTI2ODM2YTRjMWIzZGE1KSwgQ09OU1Q2NCgweDM1NWZkNGUxYmViNWVhOGIpLAorICAgIENPTlNUNjQoMHg1NWZmNDkxY2UzOTI2ZGI2KSwgQ09OU1Q2NCgweDcxOTNkOWE4M2JhZjNjNGEpLCBDT05TVDY0KDB4N2I4ZGYxOGEwN2ZmNzI3YyksIENPTlNUNjQoMHg4Yzg5MGE4NjBmMTQ5ZDgzKSwKKyAgICBDT05TVDY0KDB4NzI5NmQ1YTczMWI3MjE0MyksIENPTlNUNjQoMHg4ODg1MWE5MjE3MzRiMTlmKSwgQ09OU1Q2NCgweGY2MDdmZjA5MGVlM2U0ZjgpLCBDT05TVDY0KDB4MmE3ZWE4ODJmYzRkMzNkNiksCisgICAgQ09OU1Q2NCgweDNlNDJmOGM2ODRlZGFmYmEpLCBDT05TVDY0KDB4NWVlMjY1M2JkOWNhMjg4NyksIENPTlNUNjQoMHgyNzY5OWNiYmQyMjU0Y2Y1KSwgQ09OU1Q2NCgweDQ2Y2EwNTQzODkwYWMwY2YpLAorICAgIENPTlNUNjQoMHgwYzE0MzAzYzI4NjA3NDI0KSwgQ09OU1Q2NCgweDY1YWY4OWVjNDMwZmEwMjYpLCBDT05TVDY0KDB4NjhiOGJkZDU2ZDY3ZGYwNSksIENPTlNUNjQoMHg2MWEzOTlmODViMmY4YzNhKSwKKyAgICBDT05TVDY0KDB4MDMwNTBjMGYwYTE4MWQwOSksIENPTlNUNjQoMHhjMTVlMjNlMmJjNDYxODdkKSwgQ09OU1Q2NCgweDU3Zjk0MTE2ZWY4MjdiYjgpLCBDT05TVDY0KDB4ZDY2NzdmYTljZWZlOTkxOCksCisgICAgQ09OU1Q2NCgweGQ5NzY0MzlhZWM4NmYwMzUpLCBDT05TVDY0KDB4NThlODdkMjVjZGZhMTI5NSksIENPTlNUNjQoMHhkODc1NDc5ZmVhOGVmYjMyKSwgQ09OU1Q2NCgweDY2YWE4NWUzNDkxN2JkMmYpLAorICAgIENPTlNUNjQoMHhkNzY0N2JhY2M4ZjY5MjFmKSwgQ09OU1Q2NCgweDNhNGVlOGQyOWNjZDgzYTYpLCBDT05TVDY0KDB4Yzg0NTA3Y2Y4YTBlNGI0MiksIENPTlNUNjQoMHgzYzQ0ZjBjYzg4ZmRiOWI0KSwKKyAgICBDT05TVDY0KDB4ZmExM2NmMzUyNjgzOTBkYyksIENPTlNUNjQoMHg5NmE3NjJmNDUzYzQ2M2M1KSwgQ09OU1Q2NCgweGE3ZjRhNjAxZjU1MWE1NTIpLCBDT05TVDY0KDB4OThiNTVhYzI3N2I0MDFlZiksCisgICAgQ09OU1Q2NCgweGVjMjk5NzdiNTIzMzFhYmUpLCBDT05TVDY0KDB4YjhkNWRhNjJiN2E5N2MwZiksIENPTlNUNjQoMHhjNzU0M2JmY2E4NzYyMjZmKSwgQ09OU1Q2NCgweGFlZWY4MjJjYzMxOWY2NmQpLAorICAgIENPTlNUNjQoMHg2OWJiYjlkMDZiNmZkNDAyKSwgQ09OU1Q2NCgweDRiZGQzMTdhYTc2MmJmZWMpLCBDT05TVDY0KDB4YWJlMDk2M2RkZDMxZDE3NiksIENPTlNUNjQoMHhhOWU2OWUzN2QxMjFjNzc4KSwKKyAgICBDT05TVDY0KDB4NjdhOTgxZTY0ZjFmYjYyOCksIENPTlNUNjQoMHgwYTFlMjgyMjNjNTA0ZTM2KSwgQ09OU1Q2NCgweDQ3YzkwMTQ2OGYwMmNiYzgpLCBDT05TVDY0KDB4ZjIwYmVmMWQxNmMzYzhlNCksCisgICAgQ09OU1Q2NCgweGI1YzJlZTViOTljMTAzMmMpLCBDT05TVDY0KDB4MjI2Njg4YWFjYzBkNmJlZSksIENPTlNUNjQoMHhlNTMyYjM1NjY0N2I0OTgxKSwgQ09OU1Q2NCgweGVlMmY5ZjcxNWUyMzBjYjApLAorICAgIENPTlNUNjQoMHhiZWRmYzI3Y2EzOTk0NjFkKSwgQ09OU1Q2NCgweDJiN2RhYzg3ZmE0NTM4ZDEpLCBDT05TVDY0KDB4ODE5ZTNlYmYyMTdjZTJhMCksIENPTlNUNjQoMHgxMjM2NDg1YTZjOTBhNjdlKSwKKyAgICBDT05TVDY0KDB4ODM5ODM2YjUyZDZjZjRhZSksIENPTlNUNjQoMHgxYjJkNmM3NzVhZDhmNTQxKSwgQ09OU1Q2NCgweDBlMTIzODM2MjQ3MDYyMmEpLCBDT05TVDY0KDB4MjM2NThjYWZjYTA1NjBlOSksCisgICAgQ09OU1Q2NCgweGY1MDJmMzA2MDRmYmY5ZjEpLCBDT05TVDY0KDB4NDVjZjA5NGM4MzEyZGRjNiksIENPTlNUNjQoMHgyMTYzODRhNWM2MTU3NmU3KSwgQ09OU1Q2NCgweGNlNGYxZmQxOWUzZTcxNTApLAorICAgIENPTlNUNjQoMHg0OWRiMzk3MGFiNzJhOWUyKSwgQ09OU1Q2NCgweDJjNzRiMDljZTg3ZDA5YzQpLCBDT05TVDY0KDB4ZjkxNmMzM2EyYzliOGRkNSksIENPTlNUNjQoMHhlNjM3YmY1OTZlNjM1NDg4KSwKKyAgICBDT05TVDY0KDB4YjZjN2UyNTQ5M2Q5MWUyNSksIENPTlNUNjQoMHgyODc4YTA4OGYwNWQyNWQ4KSwgQ09OU1Q2NCgweDE3Mzk1YzRiNzJiODgxNjUpLCBDT05TVDY0KDB4ODI5YjMyYjAyYjY0ZmZhOSksCisgICAgQ09OU1Q2NCgweDFhMmU2ODcyNWNkMGZlNDYpLCBDT05TVDY0KDB4OGI4MDE2OWQxZDJjYWM5NiksIENPTlNUNjQoMHhmZTFmZGYyMTNlYTNiY2MwKSwgQ09OU1Q2NCgweDhhODMxMjk4MWIyNGE3OTEpLAorICAgIENPTlNUNjQoMHgwOTFiMjQyZDM2NDg1MzNmKSwgQ09OU1Q2NCgweGM5NDYwM2NhOGMwNjQwNDUpLCBDT05TVDY0KDB4ODc5NDI2YTEzNTRjZDhiMiksIENPTlNUNjQoMHg0ZWQyMjU2YmI5NGE5OGY3KSwKKyAgICBDT05TVDY0KDB4ZTEzZWEzNDI3YzViNjU5ZCksIENPTlNUNjQoMHgyZTcyYjg5NmU0NmQxZmNhKSwgQ09OU1Q2NCgweGU0MzFiNzUzNjI3MzQyODYpLCBDT05TVDY0KDB4ZTAzZGE3NDc3YTUzNmU5YSksCisgICAgQ09OU1Q2NCgweGViMjA4YjYwNDAwYjJiYWIpLCBDT05TVDY0KDB4OTBhZDdhZWE0N2Y0NTlkNyksIENPTlNUNjQoMHhhNGYxYWEwZWZmNDliODViKSwgQ09OU1Q2NCgweDFlMjI3ODY2NDRmMGQyNWEpLAorICAgIENPTlNUNjQoMHg4NTkyMmVhYjM5NWNjZWJjKSwgQ09OU1Q2NCgweDYwYTA5ZGZkNWQyNzg3M2QpLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgyNTZmOTRiMWRlMzU1YWZiKSwKKyAgICBDT05TVDY0KDB4ZjQwMWY3MDMwMmYzZjJmNiksIENPTlNUNjQoMHhmMTBlZTMxMjFjZGJkNWVkKSwgQ09OU1Q2NCgweDk0YTE2YWZlNWZkNDc1Y2IpLCBDT05TVDY0KDB4MGIxZDJjMjczYTU4NDUzMSksCisgICAgQ09OU1Q2NCgweGU3MzRiYjVjNjg2YjVmOGYpLCBDT05TVDY0KDB4NzU5ZmM5YmMyMzhmMTA1NiksIENPTlNUNjQoMHhlZjJjOWI3NDU4MmIwN2I3KSwgQ09OU1Q2NCgweDM0NWNkMGU0YjhiZGUxOGMpLAorICAgIENPTlNUNjQoMHgzMTUzYzRmNWE2OTVjNjk3KSwgQ09OU1Q2NCgweGQ0NjE3N2EzYzJlZThmMTYpLCBDT05TVDY0KDB4ZDA2ZDY3YjdkYWNlYTMwYSksIENPTlNUNjQoMHg4Njk3MjJhNDMzNDRkM2I1KSwKKyAgICBDT05TVDY0KDB4N2U4MmU1OWIxOWQ3NTU2NyksIENPTlNUNjQoMHhhZGVhOGUyM2M5MDFlYjY0KSwgQ09OU1Q2NCgweGZkMWFkMzJlMzRiYmExYzkpLCBDT05TVDY0KDB4Mjk3YmE0OGRmNjU1MmVkZiksCisgICAgQ09OU1Q2NCgweDMwNTBjMGYwYTA5ZGNkOTApLCBDT05TVDY0KDB4M2I0ZGVjZDc5YWM1ODhhMSksIENPTlNUNjQoMHg5ZmJjNDZkOTY1OGMzMGZhKSwgQ09OU1Q2NCgweGY4MTVjNzNmMmE5Mzg2ZDIpLAorICAgIENPTlNUNjQoMHhjNjU3M2ZmOWFlN2UyOTY4KSwgQ09OU1Q2NCgweDEzMzU0YzVmNmE5OGFkNzkpLCBDT05TVDY0KDB4MDYwYTE4MWUxNDMwM2ExMiksIENPTlNUNjQoMHgwNTBmMTQxMTFlMjgyNzFiKSwKKyAgICBDT05TVDY0KDB4YzU1MjMzZjZhNDY2MzQ2MSksIENPTlNUNjQoMHgxMTMzNDQ1NTY2ODhiYjc3KSwgQ09OU1Q2NCgweDc3OTljMWI2MmY5ZjA2NTgpLCBDT05TVDY0KDB4N2M4NGVkOTExNWM3NDM2OSksCisgICAgQ09OU1Q2NCgweDdhOGVmNThmMDFmNzc5N2IpLCBDT05TVDY0KDB4Nzg4OGZkODUwZGU3NmY3NSksIENPTlNUNjQoMHgzNjVhZDhlZWI0YWRmNzgyKSwgQ09OU1Q2NCgweDFjMjQ3MDZjNDhlMGM0NTQpLAorICAgIENPTlNUNjQoMHgzOTRiZTRkZDk2ZDU5ZWFmKSwgQ09OU1Q2NCgweDU5ZWI3OTIwY2JmMjE5OTIpLCBDT05TVDY0KDB4MTgyODYwNzg1MGMwZTg0OCksIENPTlNUNjQoMHg1NmZhNDUxM2U5OGE3MGJmKSwKKyAgICBDT05TVDY0KDB4YjNjOGY2NDU4ZGYxMzkzZSksIENPTlNUNjQoMHhiMGNkZmE0YTg3ZTkyNDM3KSwgQ09OU1Q2NCgweDI0NmM5MGI0ZDgzZDUxZmMpLCBDT05TVDY0KDB4MjA2MDgwYTBjMDFkN2RlMCksCisgICAgQ09OU1Q2NCgweGIyY2JmMjQwOGJmOTMyMzkpLCBDT05TVDY0KDB4OTJhYjcyZTA0YmU0NGZkOSksIENPTlNUNjQoMHhhM2Y4YjYxNWVkNzE4OTRlKSwgQ09OU1Q2NCgweGMwNWQyN2U3YmE0ZTEzN2EpLAorICAgIENPTlNUNjQoMHg0NGNjMGQ0OTg1MWFkNmMxKSwgQ09OU1Q2NCgweDYyYTY5NWY3NTEzNzkxMzMpLCBDT05TVDY0KDB4MTAzMDQwNTA2MDgwYjA3MCksIENPTlNUNjQoMHhiNGMxZWE1ZTlmYzkwODJiKSwKKyAgICBDT05TVDY0KDB4ODQ5MTJhYWUzZjU0YzViYiksIENPTlNUNjQoMHg0M2M1MTE1Mjk3MjJlN2Q0KSwgQ09OU1Q2NCgweDkzYTg3NmU1NGRlYzQ0ZGUpLCBDT05TVDY0KDB4YzI1YjJmZWRiNjVlMDU3NCksCisgICAgQ09OU1Q2NCgweDRhZGUzNTdmYTE2YWI0ZWIpLCBDT05TVDY0KDB4YmRkYWNlNzNhOTgxNWIxNCksIENPTlNUNjQoMHg4ZjhjMDY4OTA1MGM4MDhhKSwgQ09OU1Q2NCgweDJkNzdiNDk5ZWU3NTAyYzMpLAorICAgIENPTlNUNjQoMHhiY2Q5Y2E3NmFmODk1MDEzKSwgQ09OU1Q2NCgweDljYjk0YWQ2NmY5NDJkZjMpLCBDT05TVDY0KDB4NmFiZWI1ZGY2MTc3YzkwYiksIENPTlNUNjQoMHg0MGMwMWQ1ZDlkM2FmYWRkKSwKKyAgICBDT05TVDY0KDB4Y2Y0YzFiZDQ5ODM2N2E1NyksIENPTlNUNjQoMHhhMmZiYjIxMGViNzk4MjQ5KSwgQ09OU1Q2NCgweDgwOWQzYWJhMjc3NGU5YTcpLCBDT05TVDY0KDB4NGZkMTIxNmViZjQyOTNmMCksCisgICAgQ09OU1Q2NCgweDFmMjE3YzYzNDJmOGQ5NWQpLCBDT05TVDY0KDB4Y2E0MzBmYzU4NjFlNWQ0YyksIENPTlNUNjQoMHhhYWUzOTIzOGRiMzlkYTcxKSwgQ09OU1Q2NCgweDQyYzYxNTU3OTEyYWVjZDMpLAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nNjQgVDFbMjU2XSA9IHsKKyAgICBDT05TVDY0KDB4ZDNiYTY4ZDJiOWJiMDE2YSksIENPTlNUNjQoMHhmYzU0MTk0ZDlhZTViMTY2KSwgQ09OU1Q2NCgweDcxMmY5M2JjNjVlMmNkMTQpLCBDT05TVDY0KDB4OWM3NGI5Y2Q4NzI1NTExYiksCisgICAgQ09OU1Q2NCgweGY1NTMwMjUxYTJmN2E0NTcpLCBDT05TVDY0KDB4NjhkM2I4NmJkNmQwMDNiZSksIENPTlNUNjQoMHg2YmQyYmQ2ZmRlZDYwNGI1KSwgQ09OU1Q2NCgweGQ3NGQ2NDI5NTJiM2ZlODUpLAorICAgIENPTlNUNjQoMHhmMDUwMGQ1ZGJhZmRhZDRhKSwgQ09OU1Q2NCgweGU5YWMyNjhhMDljZjYzZTApLCBDT05TVDY0KDB4OGE4ZDgzMGUxYzA5ODQ5NiksIENPTlNUNjQoMHhkY2JmNzljNjkxYTUxYTRkKSwKKyAgICBDT05TVDY0KDB4OTA3MGFkZGRhNzNkNGQzNyksIENPTlNUNjQoMHhmNjUyMDc1NWFhZjFhMzVjKSwgQ09OU1Q2NCgweGIzOWFjODUyYTQ3YmUxMTcpLCBDT05TVDY0KDB4ZDQ0YzYxMmQ1YWI1Zjk4ZSksCisgICAgQ09OU1Q2NCgweDIzZWE2NThmMDM0NmFjMjApLCBDT05TVDY0KDB4NjJkNWE2NzNlNmM0MTE4NCksIENPTlNUNjQoMHhhNDk3ZjE2NmNjNTVjMjY4KSwgQ09OU1Q2NCgweDZlZDFiMjYzYzZkYzBkYTgpLAorICAgIENPTlNUNjQoMHg1NTMzZmZjYzg1YWE5OWQwKSwgQ09OU1Q2NCgweGYzNTEwODU5YjJmYmFhNDEpLCBDT05TVDY0KDB4ZWQ1YjJhNzFlMmM3OWMwZiksIENPTlNUNjQoMHhmN2E2MDRhMjU5ZjM1NWFlKSwKKyAgICBDT05TVDY0KDB4N2ZkZTgxNWZiZWZlMjBjMSksIENPTlNUNjQoMHhkODQ4NzUzZDdhYWRlNWEyKSwgQ09OU1Q2NCgweGU1YTgzMjlhMjlkNzdmY2MpLCBDT05TVDY0KDB4YjY5OWM3NWViYzcxZTgwYSksCisgICAgQ09OU1Q2NCgweDcwZGI5MDRiOTZlMDNiZTYpLCBDT05TVDY0KDB4NTYzMmZhYzg4ZGFjOWVkYiksIENPTlNUNjQoMHhjNGI3NTFlNmQxOTUyMjE1KSwgQ09OU1Q2NCgweDE5ZmMyYmQ3YjMzMmNlYWEpLAorICAgIENPTlNUNjQoMHgzOGUzNDhhYjRiNzA5MzczKSwgQ09OU1Q2NCgweGJmOWVkYzQyODQ2M2ZkM2IpLCBDT05TVDY0KDB4YWU5MWVmN2VmYzQxZDA1MiksIENPTlNUNjQoMHhiMDliY2Q1NmFjN2RlNjFjKSwKKyAgICBDT05TVDY0KDB4M2JlMjRkYWY0Mzc2OTQ3OCksIENPTlNUNjQoMHhkMGJiNmRkNmIxYmQwNjYxKSwgQ09OU1Q2NCgweGMzNDE1ODE5MzI5YmRhZjEpLCBDT05TVDY0KDB4YjI2ZWNiYTU1Nzc5MTdlNSksCisgICAgQ09OU1Q2NCgweGYyYTUwYmFlNDFmOTVjYjMpLCBDT05TVDY0KDB4NDBjYmMwMGIxNjgwNGI1NiksIENPTlNUNjQoMHhiZDZiZGFiMTdmNjcwY2MyKSwgQ09OU1Q2NCgweGEyOTVmYjZlZGM1OWNjN2UpLAorICAgIENPTlNUNjQoMHhmZWExMWZiZTYxZTE0MDlmKSwgQ09OU1Q2NCgweDA4ZjMxOGViY2IxMGUzYzMpLCBDT05TVDY0KDB4Y2ViMTRmZmVlMTgxMzAyZiksIENPTlNUNjQoMHgwNjAyMGEwODEwMGMwZTE2KSwKKyAgICBDT05TVDY0KDB4NDljY2RiMTcyZTkyNWU2NyksIENPTlNUNjQoMHg1MWM0ZjMzNzZlYTI2NjNmKSwgQ09OU1Q2NCgweDI3MWQ2OTc0ZTg0ZTUzY2YpLCBDT05TVDY0KDB4M2MxNDQ0NTBhMDc4NmM5YyksCisgICAgQ09OU1Q2NCgweDU4YzNlODJiNTZiMDczMGUpLCBDT05TVDY0KDB4YTU2M2YyOTEzZjU3MzQ5YSksIENPTlNUNjQoMHg3M2RhOTU0ZjllZTYzY2VkKSwgQ09OU1Q2NCgweGU3NWQzNDY5ZDJkMzhlMzUpLAorICAgIENPTlNUNjQoMHhlMTVmM2U2MWMyZGY4MDIzKSwgQ09OU1Q2NCgweDc5ZGM4YjU3YWVmMjJlZDcpLCBDT05TVDY0KDB4ODc3ZDk0ZTljZjEzNmU0OCksIENPTlNUNjQoMHg0YWNkZGUxMzI2OTQ1OTZjKSwKKyAgICBDT05TVDY0KDB4ODE3ZjllZTFkZjFmNjA1ZSksIENPTlNUNjQoMHhlZTVhMmY3NWVhYzE5YjA0KSwgQ09OU1Q2NCgweGI0NmNjMWFkNDc3NTE5ZjMpLCBDT05TVDY0KDB4ZTQ1YzMxNmRkYWQ1ODkzZSksCisgICAgQ09OU1Q2NCgweDA0ZjcwY2ZiZWIwOGZmZWYpLCBDT05TVDY0KDB4NmEyNmJlOTgyZGQ0ZjI0NyksIENPTlNUNjQoMHgxY2ZmMjRkYmFiMzhjN2I3KSwgQ09OU1Q2NCgweDJhZWQ3ZTkzM2I1NGI5MTEpLAorICAgIENPTlNUNjQoMHgyNWU4NmY4NzEzNGFhMjM2KSwgQ09OU1Q2NCgweGJhOWRkMzRlOWM2OWY0MjYpLCBDT05TVDY0KDB4YjE2ZmNlYTE1ZjdmMTBlZSksIENPTlNUNjQoMHg4ZjhlOGMwMjA0MDM4ZDhiKSwKKyAgICBDT05TVDY0KDB4MmIxOTdkNjRjODU2NGZlMyksIENPTlNUNjQoMHhmZGEwMWFiYTY5ZTc0Nzk0KSwgQ09OU1Q2NCgweDBkZjAxN2U3ZDMxYWVhZGUpLCBDT05TVDY0KDB4ODY4OTk3MWUzYzExOThiYSksCisgICAgQ09OU1Q2NCgweDExMGYzMzNjNzgyMjJkNjkpLCBDT05TVDY0KDB4MDkwNzFiMWMzODEyMTUzMSksIENPTlNUNjQoMHhlY2FmMjk4NjExYzU2YWZkKSwgQ09OU1Q2NCgweDEwZmIzMGNiOGIyMGRiOWIpLAorICAgIENPTlNUNjQoMHgxODA4MjgyMDQwMzAzODU4KSwgQ09OU1Q2NCgweDNmMTU0MTU0YTg3ZTZiOTcpLCBDT05TVDY0KDB4MTcwZDM5MzQ2ODJlMjM3ZiksIENPTlNUNjQoMHgwYzA0MTQxMDIwMTgxYzJjKSwKKyAgICBDT05TVDY0KDB4MDMwMTA1MDQwODA2MDcwYiksIENPTlNUNjQoMHhhYzY0ZTk4ZDA3NDUyMWFiKSwgQ09OU1Q2NCgweDdjZGY4NDViYjZmODI3Y2EpLCBDT05TVDY0KDB4OWE3NmIzYzU5NzI5NWYwZCksCisgICAgQ09OU1Q2NCgweDhiNzk4MGY5ZWYwYjcyNjQpLCBDT05TVDY0KDB4N2FkZDhlNTNhNmY0MjlkYyksIENPTlNUNjQoMHg0NzNkYzlmNGY1OGViM2IyKSwgQ09OU1Q2NCgweDNhMTY0ZTU4YjA3NDYyOGEpLAorICAgIENPTlNUNjQoMHg0MTNmYzNmY2U1ODJiZGE0KSwgQ09OU1Q2NCgweDU5MzdlYmRjYTViMjg1ZmMpLCBDT05TVDY0KDB4Yjc2ZGM0YTk0ZjczMWVmOCksIENPTlNUNjQoMHg0ODM4ZDhlMGRkOTBhODk1KSwKKyAgICBDT05TVDY0KDB4ZDZiOTY3ZGVhMWIxMDg3NyksIENPTlNUNjQoMHg5NTczYTJkMWJmMzc0NDJhKSwgQ09OU1Q2NCgweDI2ZTk2YTgzMWI0Y2E1M2QpLCBDT05TVDY0KDB4NWYzNWUxZDRiNWJlOGJlYSksCisgICAgQ09OU1Q2NCgweGZmNTUxYzQ5OTJlM2I2NmQpLCBDT05TVDY0KDB4OTM3MWE4ZDlhZjNiNGEzYyksIENPTlNUNjQoMHg4ZDdiOGFmMWZmMDc3YzcyKSwgQ09OU1Q2NCgweDg5OGM4NjBhMTQwZjgzOWQpLAorICAgIENPTlNUNjQoMHg5NjcyYTdkNWI3MzE0MzIxKSwgQ09OU1Q2NCgweDg1ODg5MjFhMzQxNzlmYjEpLCBDT05TVDY0KDB4MDdmNjA5ZmZlMzBlZjhlNCksIENPTlNUNjQoMHg3ZTJhODJhODRkZmNkNjMzKSwKKyAgICBDT05TVDY0KDB4NDIzZWM2ZjhlZDg0YmFhZiksIENPTlNUNjQoMHhlMjVlM2I2NWNhZDk4NzI4KSwgQ09OU1Q2NCgweDY5MjdiYjljMjVkMmY1NGMpLCBDT05TVDY0KDB4Y2E0NjQzMDUwYTg5Y2ZjMCksCisgICAgQ09OU1Q2NCgweDE0MGMzYzMwNjAyODI0NzQpLCBDT05TVDY0KDB4YWY2NWVjODkwZjQzMjZhMCksIENPTlNUNjQoMHhiODY4ZDViZDY3NmQwNWRmKSwgQ09OU1Q2NCgweGEzNjFmODk5MmY1YjNhOGMpLAorICAgIENPTlNUNjQoMHgwNTAzMGYwYzE4MGEwOTFkKSwgQ09OU1Q2NCgweDVlYzFlMjIzNDZiYzdkMTgpLCBDT05TVDY0KDB4Zjk1NzE2NDE4MmVmYjg3YiksIENPTlNUNjQoMHg2N2Q2YTk3ZmZlY2UxODk5KSwKKyAgICBDT05TVDY0KDB4NzZkOTlhNDM4NmVjMzVmMCksIENPTlNUNjQoMHhlODU4MjU3ZGZhY2Q5NTEyKSwgQ09OU1Q2NCgweDc1ZDg5ZjQ3OGVlYTMyZmIpLCBDT05TVDY0KDB4YWE2NmUzODUxNzQ5MmZiZCksCisgICAgQ09OU1Q2NCgweDY0ZDdhYzdiZjZjODFmOTIpLCBDT05TVDY0KDB4NGUzYWQyZThjZDljYTY4MyksIENPTlNUNjQoMHg0NWM4Y2YwNzBlOGE0MjRiKSwgQ09OU1Q2NCgweDQ0M2NjY2YwZmQ4OGI0YjkpLAorICAgIENPTlNUNjQoMHgxM2ZhMzVjZjgzMjZkYzkwKSwgQ09OU1Q2NCgweGE3OTZmNDYyYzQ1M2M1NjMpLCBDT05TVDY0KDB4ZjRhNzAxYTY1MWY1NTJhNSksIENPTlNUNjQoMHhiNTk4YzI1YWI0NzdlZjAxKSwKKyAgICBDT05TVDY0KDB4MjllYzdiOTczMzUyYmUxYSksIENPTlNUNjQoMHhkNWI4NjJkYWE5YjcwZjdjKSwgQ09OU1Q2NCgweDU0YzdmYzNiNzZhODZmMjIpLCBDT05TVDY0KDB4ZWZhZTJjODIxOWMzNmRmNiksCisgICAgQ09OU1Q2NCgweGJiNjlkMGI5NmY2YjAyZDQpLCBDT05TVDY0KDB4ZGQ0YjdhMzE2MmE3ZWNiZiksIENPTlNUNjQoMHhlMGFiM2Q5NjMxZGQ3NmQxKSwgQ09OU1Q2NCgweGU2YTkzNzllMjFkMTc4YzcpLAorICAgIENPTlNUNjQoMHhhOTY3ZTY4MTFmNGYyOGI2KSwgQ09OU1Q2NCgweDFlMGEyMjI4NTAzYzM2NGUpLCBDT05TVDY0KDB4Yzk0NzQ2MDEwMjhmYzhjYiksIENPTlNUNjQoMHgwYmYyMWRlZmMzMTZlNGM4KSwKKyAgICBDT05TVDY0KDB4YzJiNTViZWVjMTk5MmMwMyksIENPTlNUNjQoMHg2NjIyYWE4ODBkY2NlZTZiKSwgQ09OU1Q2NCgweDMyZTU1NmIzN2I2NDgxNDkpLCBDT05TVDY0KDB4MmZlZTcxOWYyMzVlYjAwYyksCisgICAgQ09OU1Q2NCgweGRmYmU3Y2MyOTlhMzFkNDYpLCBDT05TVDY0KDB4N2QyYjg3YWM0NWZhZDEzOCksIENPTlNUNjQoMHg5ZTgxYmYzZTdjMjFhMGUyKSwgQ09OU1Q2NCgweDM2MTI1YTQ4OTA2YzdlYTYpLAorICAgIENPTlNUNjQoMHg5ODgzYjUzNjZjMmRhZWY0KSwgQ09OU1Q2NCgweDJkMWI3NzZjZDg1YTQxZjUpLCBDT05TVDY0KDB4MTIwZTM2Mzg3MDI0MmE2MiksIENPTlNUNjQoMHg2NTIzYWY4YzA1Y2FlOTYwKSwKKyAgICBDT05TVDY0KDB4MDJmNTA2ZjNmYjA0ZjFmOSksIENPTlNUNjQoMHhjZjQ1NGMwOTEyODNjNmRkKSwgQ09OU1Q2NCgweDYzMjFhNTg0MTVjNmU3NzYpLCBDT05TVDY0KDB4NGZjZWQxMWYzZTllNTA3MSksCisgICAgQ09OU1Q2NCgweGRiNDk3MDM5NzJhYmUyYTkpLCBDT05TVDY0KDB4NzQyYzljYjA3ZGU4YzQwOSksIENPTlNUNjQoMHgxNmY5M2FjMzliMmNkNThkKSwgQ09OU1Q2NCgweDM3ZTY1OWJmNjM2ZTg4NTQpLAorICAgIENPTlNUNjQoMHhjN2I2NTRlMmQ5OTMyNTFlKSwgQ09OU1Q2NCgweDc4Mjg4OGEwNWRmMGQ4MjUpLCBDT05TVDY0KDB4MzkxNzRiNWNiODcyNjU4MSksIENPTlNUNjQoMHg5YjgyYjAzMjY0MmJhOWZmKSwKKyAgICBDT05TVDY0KDB4MmUxYTcyNjhkMDVjNDZmZSksIENPTlNUNjQoMHg4MDhiOWQxNjJjMWQ5NmFjKSwgQ09OU1Q2NCgweDFmZmUyMWRmYTMzZWMwYmMpLCBDT05TVDY0KDB4ODM4YTk4MTIyNDFiOTFhNyksCisgICAgQ09OU1Q2NCgweDFiMDkyZDI0NDgzNjNmNTMpLCBDT05TVDY0KDB4NDZjOWNhMDMwNjhjNDU0MCksIENPTlNUNjQoMHg5NDg3YTEyNjRjMzViMmQ4KSwgQ09OU1Q2NCgweGQyNGU2YjI1NGFiOWY3OTgpLAorICAgIENPTlNUNjQoMHgzZWUxNDJhMzViN2M5ZDY1KSwgQ09OU1Q2NCgweDcyMmU5NmI4NmRlNGNhMWYpLCBDT05TVDY0KDB4MzFlNDUzYjc3MzYyODY0MiksIENPTlNUNjQoMHgzZGUwNDdhNzUzN2E5YTZlKSwKKyAgICBDT05TVDY0KDB4MjBlYjYwOGIwYjQwYWIyYiksIENPTlNUNjQoMHhhZDkwZWE3YWY0NDdkNzU5KSwgQ09OU1Q2NCgweGYxYTQwZWFhNDlmZjViYjgpLCBDT05TVDY0KDB4MjIxZTY2NzhmMDQ0NWFkMiksCisgICAgQ09OU1Q2NCgweDkyODVhYjJlNWMzOWJjY2UpLCBDT05TVDY0KDB4YTA2MGZkOWQyNzVkM2Q4NyksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweDZmMjViMTk0MzVkZWZiNWEpLAorICAgIENPTlNUNjQoMHgwMWY0MDNmN2YzMDJmNmYyKSwgQ09OU1Q2NCgweDBlZjExMmUzZGIxY2VkZDUpLCBDT05TVDY0KDB4YTE5NGZlNmFkNDVmY2I3NSksIENPTlNUNjQoMHgxZDBiMjcyYzU4M2EzMTQ1KSwKKyAgICBDT05TVDY0KDB4MzRlNzVjYmI2YjY4OGY1ZiksIENPTlNUNjQoMHg5Zjc1YmNjOThmMjM1NjEwKSwgQ09OU1Q2NCgweDJjZWY3NDliMmI1OGI3MDcpLCBDT05TVDY0KDB4NWMzNGU0ZDBiZGI4OGNlMSksCisgICAgQ09OU1Q2NCgweDUzMzFmNWM0OTVhNjk3YzYpLCBDT05TVDY0KDB4NjFkNGEzNzdlZWMyMTY4ZiksIENPTlNUNjQoMHg2ZGQwYjc2N2NlZGEwYWEzKSwgQ09OU1Q2NCgweDk3ODZhNDIyNDQzM2I1ZDMpLAorICAgIENPTlNUNjQoMHg4MjdlOWJlNWQ3MTk2NzU1KSwgQ09OU1Q2NCgweGVhYWQyMzhlMDFjOTY0ZWIpLCBDT05TVDY0KDB4MWFmZDJlZDNiYjM0YzlhMSksIENPTlNUNjQoMHg3YjI5OGRhNDU1ZjZkZjJlKSwKKyAgICBDT05TVDY0KDB4NTAzMGYwYzA5ZGEwOTBjZCksIENPTlNUNjQoMHg0ZDNiZDdlY2M1OWFhMTg4KSwgQ09OU1Q2NCgweGJjOWZkOTQ2OGM2NWZhMzApLCBDT05TVDY0KDB4MTVmODNmYzc5MzJhZDI4NiksCisgICAgQ09OU1Q2NCgweDU3YzZmOTNmN2VhZTY4MjkpLCBDT05TVDY0KDB4MzUxMzVmNGM5ODZhNzlhZCksIENPTlNUNjQoMHgwYTA2MWUxODMwMTQxMjNhKSwgQ09OU1Q2NCgweDBmMDUxMTE0MjgxZTFiMjcpLAorICAgIENPTlNUNjQoMHg1MmM1ZjYzMzY2YTQ2MTM0KSwgQ09OU1Q2NCgweDMzMTE1NTQ0ODg2Njc3YmIpLCBDT05TVDY0KDB4OTk3N2I2YzE5ZjJmNTgwNiksIENPTlNUNjQoMHg4NDdjOTFlZGM3MTU2OTQzKSwKKyAgICBDT05TVDY0KDB4OGU3YThmZjVmNzAxN2I3OSksIENPTlNUNjQoMHg4ODc4ODVmZGU3MGQ3NTZmKSwgQ09OU1Q2NCgweDVhMzZlZWQ4YWRiNDgyZjcpLCBDT05TVDY0KDB4MjQxYzZjNzBlMDQ4NTRjNCksCisgICAgQ09OU1Q2NCgweDRiMzlkZGU0ZDU5NmFmOWUpLCBDT05TVDY0KDB4ZWI1OTIwNzlmMmNiOTIxOSksIENPTlNUNjQoMHgyODE4Nzg2MGMwNTA0OGU4KSwgQ09OU1Q2NCgweGZhNTYxMzQ1OGFlOWJmNzApLAorICAgIENPTlNUNjQoMHhjOGIzNDVmNmYxOGQzZTM5KSwgQ09OU1Q2NCgweGNkYjA0YWZhZTk4NzM3MjQpLCBDT05TVDY0KDB4NmMyNGI0OTAzZGQ4ZmM1MSksIENPTlNUNjQoMHg2MDIwYTA4MDFkYzBlMDdkKSwKKyAgICBDT05TVDY0KDB4Y2JiMjQwZjJmOThiMzkzMiksIENPTlNUNjQoMHhhYjkyZTA3MmU0NGJkOTRmKSwgQ09OU1Q2NCgweGY4YTMxNWI2NzFlZDRlODkpLCBDT05TVDY0KDB4NWRjMGU3Mjc0ZWJhN2ExMyksCisgICAgQ09OU1Q2NCgweGNjNDQ0OTBkMWE4NWMxZDYpLCBDT05TVDY0KDB4YTY2MmY3OTUzNzUxMzM5MSksIENPTlNUNjQoMHgzMDEwNTA0MDgwNjA3MGIwKSwgQ09OU1Q2NCgweGMxYjQ1ZWVhYzk5ZjJiMDgpLAorICAgIENPTlNUNjQoMHg5MTg0YWUyYTU0M2ZiYmM1KSwgQ09OU1Q2NCgweGM1NDM1MjExMjI5N2Q0ZTcpLCBDT05TVDY0KDB4YTg5M2U1NzZlYzRkZGU0NCksIENPTlNUNjQoMHg1YmMyZWQyZjVlYjY3NDA1KSwKKyAgICBDT05TVDY0KDB4ZGU0YTdmMzU2YWExZWJiNCksIENPTlNUNjQoMHhkYWJkNzNjZTgxYTkxNDViKSwgQ09OU1Q2NCgweDhjOGY4OTA2MGMwNThhODApLCBDT05TVDY0KDB4NzcyZDk5YjQ3NWVlYzMwMiksCisgICAgQ09OU1Q2NCgweGQ5YmM3NmNhODlhZjEzNTApLCBDT05TVDY0KDB4Yjk5Y2Q2NGE5NDZmZjMyZCksIENPTlNUNjQoMHhiZTZhZGZiNTc3NjEwYmM5KSwgQ09OU1Q2NCgweGMwNDA1ZDFkM2E5ZGRkZmEpLAorICAgIENPTlNUNjQoMHg0Y2NmZDQxYjM2OTg1NzdhKSwgQ09OU1Q2NCgweGZiYTIxMGIyNzllYjQ5ODIpLCBDT05TVDY0KDB4OWQ4MGJhM2E3NDI3YTdlOSksIENPTlNUNjQoMHhkMTRmNmUyMTQyYmZmMDkzKSwKKyAgICBDT05TVDY0KDB4MjExZjYzN2NmODQyNWRkOSksIENPTlNUNjQoMHg0M2NhYzUwZjFlODY0YzVkKSwgQ09OU1Q2NCgweGUzYWEzODkyMzlkYjcxZGEpLCBDT05TVDY0KDB4YzY0MjU3MTUyYTkxZDNlYyksCit9OworCitzdGF0aWMgY29uc3QgdWxvbmc2NCBUMlsyNTZdID0geworICAgIENPTlNUNjQoMHhkMjY4YmFkMzZhMDFiYmI5KSwgQ09OU1Q2NCgweDRkMTk1NGZjNjZiMWU1OWEpLCBDT05TVDY0KDB4YmM5MzJmNzExNGNkZTI2NSksIENPTlNUNjQoMHhjZGI5NzQ5YzFiNTEyNTg3KSwKKyAgICBDT05TVDY0KDB4NTEwMjUzZjU1N2E0ZjdhMiksIENPTlNUNjQoMHg2YmI4ZDM2OGJlMDNkMGQ2KSwgQ09OU1Q2NCgweDZmYmRkMjZiYjUwNGQ2ZGUpLCBDT05TVDY0KDB4Mjk2NDRkZDc4NWZlYjM1MiksCisgICAgQ09OU1Q2NCgweDVkMGQ1MGYwNGFhZGZkYmEpLCBDT05TVDY0KDB4OGEyNmFjZTllMDYzY2YwOSksIENPTlNUNjQoMHgwZTgzOGQ4YTk2ODQwOTFjKSwgQ09OU1Q2NCgweGM2NzliZmRjNGQxYWE1OTEpLAorICAgIENPTlNUNjQoMHhkZGFkNzA5MDM3NGQzZGE3KSwgQ09OU1Q2NCgweDU1MDc1MmY2NWNhM2YxYWEpLCBDT05TVDY0KDB4NTJjODlhYjMxN2UxN2JhNCksIENPTlNUNjQoMHgyZDYxNGNkNDhlZjliNTVhKSwKKyAgICBDT05TVDY0KDB4OGY2NWVhMjMyMGFjNDYwMyksIENPTlNUNjQoMHg3M2E2ZDU2Mjg0MTFjNGU2KSwgQ09OU1Q2NCgweDY2ZjE5N2E0NjhjMjU1Y2MpLCBDT05TVDY0KDB4NjNiMmQxNmVhODBkZGNjNiksCisgICAgQ09OU1Q2NCgweGNjZmYzMzU1ZDA5OWFhODUpLCBDT05TVDY0KDB4NTkwODUxZjM0MWFhZmJiMiksIENPTlNUNjQoMHg3MTJhNWJlZDBmOWNjN2UyKSwgQ09OU1Q2NCgweGEyMDRhNmY3YWU1NWYzNTkpLAorICAgIENPTlNUNjQoMHg1ZjgxZGU3ZmMxMjBmZWJlKSwgQ09OU1Q2NCgweDNkNzU0OGQ4YTJlNWFkN2EpLCBDT05TVDY0KDB4OWEzMmE4ZTVjYzdmZDcyOSksIENPTlNUNjQoMHg1ZWM3OTliNjBhZTg3MWJjKSwKKyAgICBDT05TVDY0KDB4NGI5MGRiNzBlNjNiZTA5NiksIENPTlNUNjQoMHhjOGZhMzI1NmRiOWVhYzhkKSwgQ09OU1Q2NCgweGU2NTFiN2M0MTUyMjk1ZDEpLCBDT05TVDY0KDB4ZDcyYmZjMTlhYWNlMzJiMyksCisgICAgQ09OU1Q2NCgweGFiNDhlMzM4NzM5MzcwNGIpLCBDT05TVDY0KDB4NDJkYzllYmYzYmZkNjM4NCksIENPTlNUNjQoMHg3ZWVmOTFhZTUyZDA0MWZjKSwgQ09OU1Q2NCgweDU2Y2Q5YmIwMWNlNjdkYWMpLAorICAgIENPTlNUNjQoMHhhZjRkZTIzYjc4OTQ3NjQzKSwgQ09OU1Q2NCgweGQ2NmRiYmQwNjEwNmJkYjEpLCBDT05TVDY0KDB4MTk1ODQxYzNmMWRhOWIzMiksIENPTlNUNjQoMHhhNWNiNmViMmU1MTc3OTU3KSwKKyAgICBDT05TVDY0KDB4YWUwYmE1ZjJiMzVjZjk0MSksIENPTlNUNjQoMHgwYmMwY2I0MDU2NGI4MDE2KSwgQ09OU1Q2NCgweGIxZGE2YmJkYzIwYzY3N2YpLCBDT05TVDY0KDB4NmVmYjk1YTI3ZWNjNTlkYyksCisgICAgQ09OU1Q2NCgweGJlMWZhMWZlOWY0MGUxNjEpLCBDT05TVDY0KDB4ZWIxOGYzMDhjM2UzMTBjYiksIENPTlNUNjQoMHhmZTRmYjFjZTJmMzA4MWUxKSwgQ09OU1Q2NCgweDA4MGEwMjA2MTYwZTBjMTApLAorICAgIENPTlNUNjQoMHgxN2RiY2M0OTY3NWU5MjJlKSwgQ09OU1Q2NCgweDM3ZjNjNDUxM2Y2NmEyNmUpLCBDT05TVDY0KDB4NzQ2OTFkMjdjZjUzNGVlOCksIENPTlNUNjQoMHg1MDQ0MTQzYzljNmM3OGEwKSwKKyAgICBDT05TVDY0KDB4MmJlOGMzNTgwZTczYjA1NiksIENPTlNUNjQoMHg5MWYyNjNhNTlhMzQ1NzNmKSwgQ09OU1Q2NCgweDRmOTVkYTczZWQzY2U2OWUpLCBDT05TVDY0KDB4NjkzNDVkZTczNThlZDNkMiksCisgICAgQ09OU1Q2NCgweDYxM2U1ZmUxMjM4MGRmYzIpLCBDT05TVDY0KDB4NTc4YmRjNzlkNzJlZjJhZSksIENPTlNUNjQoMHhlOTk0N2Q4NzQ4NmUxM2NmKSwgQ09OU1Q2NCgweDEzZGVjZDRhNmM1OTk0MjYpLAorICAgIENPTlNUNjQoMHhlMTllN2Y4MTVlNjAxZmRmKSwgQ09OU1Q2NCgweDc1MmY1YWVlMDQ5YmMxZWEpLCBDT05TVDY0KDB4YWRjMTZjYjRmMzE5NzU0NyksIENPTlNUNjQoMHg2ZDMxNWNlNDNlODlkNWRhKSwKKyAgICBDT05TVDY0KDB4ZmIwY2Y3MDRlZmZmMDhlYiksIENPTlNUNjQoMHg5OGJlMjY2YTQ3ZjJkNDJkKSwgQ09OU1Q2NCgweGRiMjRmZjFjYjdjNzM4YWIpLCBDT05TVDY0KDB4OTM3ZWVkMmExMWI5NTQzYiksCisgICAgQ09OU1Q2NCgweDg3NmZlODI1MzZhMjRhMTMpLCBDT05TVDY0KDB4NGVkMzlkYmEyNmY0Njk5YyksIENPTlNUNjQoMHhhMWNlNmZiMWVlMTA3ZjVmKSwgQ09OU1Q2NCgweDAyOGM4ZThmOGI4ZDAzMDQpLAorICAgIENPTlNUNjQoMHg2NDdkMTkyYmUzNGY1NmM4KSwgQ09OU1Q2NCgweGJhMWFhMGZkOTQ0N2U3NjkpLCBDT05TVDY0KDB4ZTcxN2YwMGRkZWVhMWFkMyksIENPTlNUNjQoMHgxZTk3ODk4NmJhOTgxMTNjKSwKKyAgICBDT05TVDY0KDB4M2MzMzBmMTE2OTJkMjI3OCksIENPTlNUNjQoMHgxYzFiMDcwOTMxMTUxMjM4KSwgQ09OU1Q2NCgweDg2MjlhZmVjZmQ2YWM1MTEpLCBDT05TVDY0KDB4Y2IzMGZiMTA5YmRiMjA4YiksCisgICAgQ09OU1Q2NCgweDIwMjgwODE4NTgzODMwNDApLCBDT05TVDY0KDB4NTQ0MTE1M2Y5NzZiN2VhOCksIENPTlNUNjQoMHgzNDM5MGQxNzdmMjMyZTY4KSwgQ09OU1Q2NCgweDEwMTQwNDBjMmMxYzE4MjApLAorICAgIENPTlNUNjQoMHgwNDA1MDEwMzBiMDcwNjA4KSwgQ09OU1Q2NCgweDhkZTk2NGFjYWIyMTQ1MDcpLCBDT05TVDY0KDB4NWI4NGRmN2NjYTI3ZjhiNiksIENPTlNUNjQoMHhjNWIzNzY5YTBkNWYyOTk3KSwKKyAgICBDT05TVDY0KDB4Zjk4MDc5OGI2NDcyMGJlZiksIENPTlNUNjQoMHg1MzhlZGQ3YWRjMjlmNGE2KSwgQ09OU1Q2NCgweGY0YzkzZDQ3YjJiMzhlZjUpLCBDT05TVDY0KDB4NTg0ZTE2M2E4YTYyNzRiMCksCisgICAgQ09OU1Q2NCgweGZjYzMzZjQxYTRiZDgyZTUpLCBDT05TVDY0KDB4ZGNlYjM3NTlmYzg1YjJhNSksIENPTlNUNjQoMHhhOWM0NmRiN2Y4MWU3MzRmKSwgQ09OU1Q2NCgweGUwZDgzODQ4OTVhODkwZGQpLAorICAgIENPTlNUNjQoMHhkZTY3YjlkNjc3MDhiMWExKSwgQ09OU1Q2NCgweGQxYTI3Mzk1MmE0NDM3YmYpLCBDT05TVDY0KDB4ODM2YWU5MjYzZGE1NGMxYiksIENPTlNUNjQoMHhkNGUxMzU1ZmVhOGJiZWI1KSwKKyAgICBDT05TVDY0KDB4NDkxYzU1ZmY2ZGI2ZTM5MiksIENPTlNUNjQoMHhkOWE4NzE5MzNjNGEzYmFmKSwgQ09OU1Q2NCgweGYxOGE3YjhkNzI3YzA3ZmYpLCBDT05TVDY0KDB4MGE4NjhjODk5ZDgzMGYxNCksCisgICAgQ09OU1Q2NCgweGQ1YTc3Mjk2MjE0MzMxYjcpLCBDT05TVDY0KDB4MWE5Mjg4ODViMTlmMTczNCksIENPTlNUNjQoMHhmZjA5ZjYwN2U0ZjgwZWUzKSwgQ09OU1Q2NCgweGE4ODIyYTdlMzNkNmZjNGQpLAorICAgIENPTlNUNjQoMHhmOGM2M2U0MmFmYmE4NGVkKSwgQ09OU1Q2NCgweDY1M2I1ZWUyMjg4N2Q5Y2EpLCBDT05TVDY0KDB4OWNiYjI3Njk0Y2Y1ZDIyNSksIENPTlNUNjQoMHgwNTQzNDZjYWMwY2Y4OTBhKSwKKyAgICBDT05TVDY0KDB4MzAzYzBjMTQ3NDI0Mjg2MCksIENPTlNUNjQoMHg4OWVjNjVhZmEwMjY0MzBmKSwgQ09OU1Q2NCgweGJkZDU2OGI4ZGYwNTZkNjcpLCBDT05TVDY0KDB4OTlmODYxYTM4YzNhNWIyZiksCisgICAgQ09OU1Q2NCgweDBjMGYwMzA1MWQwOTBhMTgpLCBDT05TVDY0KDB4MjNlMmMxNWUxODdkYmM0NiksIENPTlNUNjQoMHg0MTE2NTdmOTdiYjhlZjgyKSwgQ09OU1Q2NCgweDdmYTlkNjY3OTkxOGNlZmUpLAorICAgIENPTlNUNjQoMHg0MzlhZDk3NmYwMzVlYzg2KSwgQ09OU1Q2NCgweDdkMjU1OGU4MTI5NWNkZmEpLCBDT05TVDY0KDB4NDc5ZmQ4NzVmYjMyZWE4ZSksIENPTlNUNjQoMHg4NWUzNjZhYWJkMmY0OTE3KSwKKyAgICBDT05TVDY0KDB4N2JhY2Q3NjQ5MjFmYzhmNiksIENPTlNUNjQoMHhlOGQyM2E0ZTgzYTY5Y2NkKSwgQ09OU1Q2NCgweDA3Y2ZjODQ1NGI0MjhhMGUpLCBDT05TVDY0KDB4ZjBjYzNjNDRiOWI0ODhmZCksCisgICAgQ09OU1Q2NCgweGNmMzVmYTEzOTBkYzI2ODMpLCBDT05TVDY0KDB4NjJmNDk2YTc2M2M1NTNjNCksIENPTlNUNjQoMHhhNjAxYTdmNGE1NTJmNTUxKSwgQ09OU1Q2NCgweDVhYzI5OGI1MDFlZjc3YjQpLAorICAgIENPTlNUNjQoMHg5NzdiZWMyOTFhYmU1MjMzKSwgQ09OU1Q2NCgweGRhNjJiOGQ1N2MwZmI3YTkpLCBDT05TVDY0KDB4M2JmY2M3NTQyMjZmYTg3NiksIENPTlNUNjQoMHg4MjJjYWVlZmY2NmRjMzE5KSwKKyAgICBDT05TVDY0KDB4YjlkMDY5YmJkNDAyNmI2ZiksIENPTlNUNjQoMHgzMTdhNGJkZGJmZWNhNzYyKSwgQ09OU1Q2NCgweDk2M2RhYmUwZDE3NmRkMzEpLCBDT05TVDY0KDB4OWUzN2E5ZTZjNzc4ZDEyMSksCisgICAgQ09OU1Q2NCgweDgxZTY2N2E5YjYyODRmMWYpLCBDT05TVDY0KDB4MjgyMjBhMWU0ZTM2M2M1MCksIENPTlNUNjQoMHgwMTQ2NDdjOWNiYzg4ZjAyKSwgQ09OU1Q2NCgweGVmMWRmMjBiYzhlNDE2YzMpLAorICAgIENPTlNUNjQoMHhlZTViYjVjMjAzMmM5OWMxKSwgQ09OU1Q2NCgweDg4YWEyMjY2NmJlZWNjMGQpLCBDT05TVDY0KDB4YjM1NmU1MzI0OTgxNjQ3YiksIENPTlNUNjQoMHg5ZjcxZWUyZjBjYjA1ZTIzKSwKKyAgICBDT05TVDY0KDB4YzI3Y2JlZGY0NjFkYTM5OSksIENPTlNUNjQoMHhhYzg3MmI3ZDM4ZDFmYTQ1KSwgQ09OU1Q2NCgweDNlYmY4MTllZTJhMDIxN2MpLCBDT05TVDY0KDB4NDg1YTEyMzZhNjdlNmM5MCksCisgICAgQ09OU1Q2NCgweDM2YjU4Mzk4ZjRhZTJkNmMpLCBDT05TVDY0KDB4NmM3NzFiMmRmNTQxNWFkOCksIENPTlNUNjQoMHgzODM2MGUxMjYyMmEyNDcwKSwgQ09OU1Q2NCgweDhjYWYyMzY1NjBlOWNhMDUpLAorICAgIENPTlNUNjQoMHhmMzA2ZjUwMmY5ZjEwNGZiKSwgQ09OU1Q2NCgweDA5NGM0NWNmZGRjNjgzMTIpLCBDT05TVDY0KDB4ODRhNTIxNjM3NmU3YzYxNSksIENPTlNUNjQoMHgxZmQxY2U0ZjcxNTA5ZTNlKSwKKyAgICBDT05TVDY0KDB4Mzk3MDQ5ZGJhOWUyYWI3MiksIENPTlNUNjQoMHhiMDljMmM3NDA5YzRlODdkKSwgQ09OU1Q2NCgweGMzM2FmOTE2OGRkNTJjOWIpLCBDT05TVDY0KDB4YmY1OWU2Mzc1NDg4NmU2MyksCisgICAgQ09OU1Q2NCgweGUyNTRiNmM3MWUyNTkzZDkpLCBDT05TVDY0KDB4YTA4ODI4NzgyNWQ4ZjA1ZCksIENPTlNUNjQoMHg1YzRiMTczOTgxNjU3MmI4KSwgQ09OU1Q2NCgweDMyYjA4MjliZmZhOTJiNjQpLAorICAgIENPTlNUNjQoMHg2ODcyMWEyZWZlNDY1Y2QwKSwgQ09OU1Q2NCgweDE2OWQ4YjgwYWM5NjFkMmMpLCBDT05TVDY0KDB4ZGYyMWZlMWZiY2MwM2VhMyksIENPTlNUNjQoMHgxMjk4OGE4M2E3OTExYjI0KSwKKyAgICBDT05TVDY0KDB4MjQyZDA5MWI1MzNmMzY0OCksIENPTlNUNjQoMHgwM2NhYzk0NjQwNDU4YzA2KSwgQ09OU1Q2NCgweDI2YTE4Nzk0ZDhiMjM1NGMpLCBDT05TVDY0KDB4MjU2YjRlZDI5OGY3Yjk0YSksCisgICAgQ09OU1Q2NCgweGEzNDJlMTNlNjU5ZDdjNWIpLCBDT05TVDY0KDB4Yjg5NjJlNzIxZmNhZTQ2ZCksIENPTlNUNjQoMHhiNzUzZTQzMTQyODY2MjczKSwgQ09OU1Q2NCgweGE3NDdlMDNkNmU5YTdhNTMpLAorICAgIENPTlNUNjQoMHg4YjYwZWIyMDJiYWI0MDBiKSwgQ09OU1Q2NCgweDdhZWE5MGFkNTlkNzQ3ZjQpLCBDT05TVDY0KDB4YWEwZWE0ZjFiODViZmY0OSksIENPTlNUNjQoMHg3ODY2MWUyMmQyNWE0NGYwKSwKKyAgICBDT05TVDY0KDB4MmVhYjg1OTJjZWJjMzk1YyksIENPTlNUNjQoMHg5ZGZkNjBhMDg3M2Q1ZDI3KSwgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4OTRiMTI1NmY1YWZiZGUzNSksCisgICAgQ09OU1Q2NCgweGY3MDNmNDAxZjJmNjAyZjMpLCBDT05TVDY0KDB4ZTMxMmYxMGVkNWVkMWNkYiksIENPTlNUNjQoMHg2YWZlOTRhMTc1Y2I1ZmQ0KSwgQ09OU1Q2NCgweDJjMjcwYjFkNDUzMTNhNTgpLAorICAgIENPTlNUNjQoMHhiYjVjZTczNDVmOGY2ODZiKSwgQ09OU1Q2NCgweGM5YmM3NTlmMTA1NjIzOGYpLCBDT05TVDY0KDB4OWI3NGVmMmMwN2I3NTgyYiksIENPTlNUNjQoMHhkMGU0MzQ1Y2UxOGNiOGJkKSwKKyAgICBDT05TVDY0KDB4YzRmNTMxNTNjNjk3YTY5NSksIENPTlNUNjQoMHg3N2EzZDQ2MThmMTZjMmVlKSwgQ09OU1Q2NCgweDY3YjdkMDZkYTMwYWRhY2UpLCBDT05TVDY0KDB4MjJhNDg2OTdkM2I1MzM0NCksCisgICAgQ09OU1Q2NCgweGU1OWI3ZTgyNTU2NzE5ZDcpLCBDT05TVDY0KDB4OGUyM2FkZWFlYjY0YzkwMSksIENPTlNUNjQoMHhkMzJlZmQxYWExYzkzNGJiKSwgQ09OU1Q2NCgweGE0OGQyOTdiMmVkZmY2NTUpLAorICAgIENPTlNUNjQoMHhjMGYwMzA1MGNkOTBhMDlkKSwgQ09OU1Q2NCgweGVjZDczYjRkODhhMTlhYzUpLCBDT05TVDY0KDB4NDZkOTlmYmMzMGZhNjU4YyksIENPTlNUNjQoMHhjNzNmZjgxNTg2ZDIyYTkzKSwKKyAgICBDT05TVDY0KDB4M2ZmOWM2NTcyOTY4YWU3ZSksIENPTlNUNjQoMHg0YzVmMTMzNWFkNzk2YTk4KSwgQ09OU1Q2NCgweDE4MWUwNjBhM2ExMjE0MzApLCBDT05TVDY0KDB4MTQxMTA1MGYyNzFiMWUyOCksCisgICAgQ09OU1Q2NCgweDMzZjZjNTUyMzQ2MWE0NjYpLCBDT05TVDY0KDB4NDQ1NTExMzNiYjc3NjY4OCksIENPTlNUNjQoMHhjMWI2Nzc5OTA2NTgyZjlmKSwgQ09OU1Q2NCgweGVkOTE3Yzg0NDM2OTE1YzcpLAorICAgIENPTlNUNjQoMHhmNThmN2E4ZTc5N2IwMWY3KSwgQ09OU1Q2NCgweGZkODU3ODg4NmY3NTBkZTcpLCBDT05TVDY0KDB4ZDhlZTM2NWFmNzgyYjRhZCksIENPTlNUNjQoMHg3MDZjMWMyNGM0NTQ0OGUwKSwKKyAgICBDT05TVDY0KDB4ZTRkZDM5NGI5ZWFmOTZkNSksIENPTlNUNjQoMHg3OTIwNTllYjE5OTJjYmYyKSwgQ09OU1Q2NCgweDYwNzgxODI4ZTg0ODUwYzApLCBDT05TVDY0KDB4NDUxMzU2ZmE3MGJmZTk4YSksCisgICAgQ09OU1Q2NCgweGY2NDViM2M4MzkzZThkZjEpLCBDT05TVDY0KDB4ZmE0YWIwY2QyNDM3ODdlOSksIENPTlNUNjQoMHg5MGI0MjQ2YzUxZmNkODNkKSwgQ09OU1Q2NCgweDgwYTAyMDYwN2RlMGMwMWQpLAorICAgIENPTlNUNjQoMHhmMjQwYjJjYjMyMzk4YmY5KSwgQ09OU1Q2NCgweDcyZTA5MmFiNGZkOTRiZTQpLCBDT05TVDY0KDB4YjYxNWEzZjg4OTRlZWQ3MSksIENPTlNUNjQoMHgyN2U3YzA1ZDEzN2FiYTRlKSwKKyAgICBDT05TVDY0KDB4MGQ0OTQ0Y2NkNmMxODUxYSksIENPTlNUNjQoMHg5NWY3NjJhNjkxMzM1MTM3KSwgQ09OU1Q2NCgweDQwNTAxMDMwYjA3MDYwODApLCBDT05TVDY0KDB4ZWE1ZWI0YzEwODJiOWZjOSksCisgICAgQ09OU1Q2NCgweDJhYWU4NDkxYzViYjNmNTQpLCBDT05TVDY0KDB4MTE1MjQzYzVlN2Q0OTcyMiksIENPTlNUNjQoMHg3NmU1OTNhODQ0ZGU0ZGVjKSwgQ09OU1Q2NCgweDJmZWRjMjViMDU3NGI2NWUpLAorICAgIENPTlNUNjQoMHgzNTdmNGFkZWI0ZWJhMTZhKSwgQ09OU1Q2NCgweGNlNzNiZGRhNWIxNGE5ODEpLCBDT05TVDY0KDB4MDY4OThmOGM4MDhhMDUwYyksIENPTlNUNjQoMHhiNDk5MmQ3NzAyYzNlZTc1KSwKKyAgICBDT05TVDY0KDB4Y2E3NmJjZDk1MDEzYWY4OSksIENPTlNUNjQoMHg0YWQ2OWNiOTJkZjM2Zjk0KSwgQ09OU1Q2NCgweGI1ZGY2YWJlYzkwYjYxNzcpLCBDT05TVDY0KDB4MWQ1ZDQwYzBmYWRkOWQzYSksCisgICAgQ09OU1Q2NCgweDFiZDRjZjRjN2E1Nzk4MzYpLCBDT05TVDY0KDB4YjIxMGEyZmI4MjQ5ZWI3OSksIENPTlNUNjQoMHgzYWJhODA5ZGU5YTcyNzc0KSwgQ09OU1Q2NCgweDIxNmU0ZmQxOTNmMGJmNDIpLAorICAgIENPTlNUNjQoMHg3YzYzMWYyMWQ5NWQ0MmY4KSwgQ09OU1Q2NCgweDBmYzVjYTQzNWQ0Yzg2MWUpLCBDT05TVDY0KDB4OTIzOGFhZTNkYTcxZGIzOSksIENPTlNUNjQoMHgxNTU3NDJjNmVjZDM5MTJhKSwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzY0IFQzWzI1Nl0gPSB7CisgICAgQ09OU1Q2NCgweDY4ZDJkM2JhMDE2YWI5YmIpLCBDT05TVDY0KDB4MTk0ZGZjNTRiMTY2OWFlNSksIENPTlNUNjQoMHg5M2JjNzEyZmNkMTQ2NWUyKSwgQ09OU1Q2NCgweGI5Y2Q5Yzc0NTExYjg3MjUpLAorICAgIENPTlNUNjQoMHgwMjUxZjU1M2E0NTdhMmY3KSwgQ09OU1Q2NCgweGI4NmI2OGQzMDNiZWQ2ZDApLCBDT05TVDY0KDB4YmQ2ZjZiZDIwNGI1ZGVkNiksIENPTlNUNjQoMHg2NDI5ZDc0ZGZlODU1MmIzKSwKKyAgICBDT05TVDY0KDB4MGQ1ZGYwNTBhZDRhYmFmZCksIENPTlNUNjQoMHgyNjhhZTlhYzYzZTAwOWNmKSwgQ09OU1Q2NCgweDgzMGU4YThkODQ5NjFjMDkpLCBDT05TVDY0KDB4NzljNmRjYmYxYTRkOTFhNSksCisgICAgQ09OU1Q2NCgweGFkZGQ5MDcwNGQzN2E3M2QpLCBDT05TVDY0KDB4MDc1NWY2NTJhMzVjYWFmMSksIENPTlNUNjQoMHhjODUyYjM5YWUxMTdhNDdiKSwgQ09OU1Q2NCgweDYxMmRkNDRjZjk4ZTVhYjUpLAorICAgIENPTlNUNjQoMHg2NThmMjNlYWFjMjAwMzQ2KSwgQ09OU1Q2NCgweGE2NzM2MmQ1MTE4NGU2YzQpLCBDT05TVDY0KDB4ZjE2NmE0OTdjMjY4Y2M1NSksIENPTlNUNjQoMHhiMjYzNmVkMTBkYThjNmRjKSwKKyAgICBDT05TVDY0KDB4ZmZjYzU1MzM5OWQwODVhYSksIENPTlNUNjQoMHgwODU5ZjM1MWFhNDFiMmZiKSwgQ09OU1Q2NCgweDJhNzFlZDViOWMwZmUyYzcpLCBDT05TVDY0KDB4MDRhMmY3YTY1NWFlNTlmMyksCisgICAgQ09OU1Q2NCgweDgxNWY3ZmRlMjBjMWJlZmUpLCBDT05TVDY0KDB4NzUzZGQ4NDhlNWEyN2FhZCksIENPTlNUNjQoMHgzMjlhZTVhODdmY2MyOWQ3KSwgQ09OU1Q2NCgweGM3NWViNjk5ZTgwYWJjNzEpLAorICAgIENPTlNUNjQoMHg5MDRiNzBkYjNiZTY5NmUwKSwgQ09OU1Q2NCgweGZhYzg1NjMyOWVkYjhkYWMpLCBDT05TVDY0KDB4NTFlNmM0YjcyMjE1ZDE5NSksIENPTlNUNjQoMHgyYmQ3MTlmY2NlYWFiMzMyKSwKKyAgICBDT05TVDY0KDB4NDhhYjM4ZTM5MzczNGI3MCksIENPTlNUNjQoMHhkYzQyYmY5ZWZkM2I4NDYzKSwgQ09OU1Q2NCgweGVmN2VhZTkxZDA1MmZjNDEpLCBDT05TVDY0KDB4Y2Q1NmIwOWJlNjFjYWM3ZCksCisgICAgQ09OU1Q2NCgweDRkYWYzYmUyOTQ3ODQzNzYpLCBDT05TVDY0KDB4NmRkNmQwYmIwNjYxYjFiZCksIENPTlNUNjQoMHg1ODE5YzM0MWRhZjEzMjliKSwgQ09OU1Q2NCgweGNiYTViMjZlMTdlNTU3NzkpLAorICAgIENPTlNUNjQoMHgwYmFlZjJhNTVjYjM0MWY5KSwgQ09OU1Q2NCgweGMwMGI0MGNiNGI1NjE2ODApLCBDT05TVDY0KDB4ZGFiMWJkNmIwY2MyN2Y2NyksIENPTlNUNjQoMHhmYjZlYTI5NWNjN2VkYzU5KSwKKyAgICBDT05TVDY0KDB4MWZiZWZlYTE0MDlmNjFlMSksIENPTlNUNjQoMHgxOGViMDhmM2UzYzNjYjEwKSwgQ09OU1Q2NCgweDRmZmVjZWIxMzAyZmUxODEpLCBDT05TVDY0KDB4MGEwODA2MDIwZTE2MTAwYyksCisgICAgQ09OU1Q2NCgweGRiMTc0OWNjNWU2NzJlOTIpLCBDT05TVDY0KDB4ZjMzNzUxYzQ2NjNmNmVhMiksIENPTlNUNjQoMHg2OTc0MjcxZDUzY2ZlODRlKSwgQ09OU1Q2NCgweDQ0NTAzYzE0NmM5Y2EwNzgpLAorICAgIENPTlNUNjQoMHhlODJiNThjMzczMGU1NmIwKSwgQ09OU1Q2NCgweGYyOTFhNTYzMzQ5YTNmNTcpLCBDT05TVDY0KDB4OTU0ZjczZGEzY2VkOWVlNiksIENPTlNUNjQoMHgzNDY5ZTc1ZDhlMzVkMmQzKSwKKyAgICBDT05TVDY0KDB4M2U2MWUxNWY4MDIzYzJkZiksIENPTlNUNjQoMHg4YjU3NzlkYzJlZDdhZWYyKSwgQ09OU1Q2NCgweDk0ZTk4NzdkNmU0OGNmMTMpLCBDT05TVDY0KDB4ZGUxMzRhY2Q1OTZjMjY5NCksCisgICAgQ09OU1Q2NCgweDllZTE4MTdmNjA1ZWRmMWYpLCBDT05TVDY0KDB4MmY3NWVlNWE5YjA0ZWFjMSksIENPTlNUNjQoMHhjMWFkYjQ2YzE5ZjM0Nzc1KSwgQ09OU1Q2NCgweDMxNmRlNDVjODkzZWRhZDUpLAorICAgIENPTlNUNjQoMHgwY2ZiMDRmN2ZmZWZlYjA4KSwgQ09OU1Q2NCgweGJlOTg2YTI2ZjI0NzJkZDQpLCBDT05TVDY0KDB4MjRkYjFjZmZjN2I3YWIzOCksIENPTlNUNjQoMHg3ZTkzMmFlZGI5MTEzYjU0KSwKKyAgICBDT05TVDY0KDB4NmY4NzI1ZThhMjM2MTM0YSksIENPTlNUNjQoMHhkMzRlYmE5ZGY0MjY5YzY5KSwgQ09OU1Q2NCgweGNlYTFiMTZmMTBlZTVmN2YpLCBDT05TVDY0KDB4OGMwMjhmOGU4ZDhiMDQwMyksCisgICAgQ09OU1Q2NCgweDdkNjQyYjE5NGZlM2M4NTYpLCBDT05TVDY0KDB4MWFiYWZkYTA0Nzk0NjllNyksIENPTlNUNjQoMHgxN2U3MGRmMGVhZGVkMzFhKSwgQ09OU1Q2NCgweDk3MWU4Njg5OThiYTNjMTEpLAorICAgIENPTlNUNjQoMHgzMzNjMTEwZjJkNjk3ODIyKSwgQ09OU1Q2NCgweDFiMWMwOTA3MTUzMTM4MTIpLCBDT05TVDY0KDB4Mjk4NmVjYWY2YWZkMTFjNSksIENPTlNUNjQoMHgzMGNiMTBmYmRiOWI4YjIwKSwKKyAgICBDT05TVDY0KDB4MjgyMDE4MDgzODU4NDAzMCksIENPTlNUNjQoMHg0MTU0M2YxNTZiOTdhODdlKSwgQ09OU1Q2NCgweDM5MzQxNzBkMjM3ZjY4MmUpLCBDT05TVDY0KDB4MTQxMDBjMDQxYzJjMjAxOCksCisgICAgQ09OU1Q2NCgweDA1MDQwMzAxMDcwYjA4MDYpLCBDT05TVDY0KDB4ZTk4ZGFjNjQyMWFiMDc0NSksIENPTlNUNjQoMHg4NDViN2NkZjI3Y2FiNmY4KSwgQ09OU1Q2NCgweGIzYzU5YTc2NWYwZDk3MjkpLAorICAgIENPTlNUNjQoMHg4MGY5OGI3OTcyNjRlZjBiKSwgQ09OU1Q2NCgweDhlNTM3YWRkMjlkY2E2ZjQpLCBDT05TVDY0KDB4YzlmNDQ3M2RiM2IyZjU4ZSksIENPTlNUNjQoMHg0ZTU4M2ExNjYyOGFiMDc0KSwKKyAgICBDT05TVDY0KDB4YzNmYzQxM2ZiZGE0ZTU4MiksIENPTlNUNjQoMHhlYmRjNTkzNzg1ZmNhNWIyKSwgQ09OU1Q2NCgweGM0YTliNzZkMWVmODRmNzMpLCBDT05TVDY0KDB4ZDhlMDQ4MzhhODk1ZGQ5MCksCisgICAgQ09OU1Q2NCgweDY3ZGVkNmI5MDg3N2ExYjEpLCBDT05TVDY0KDB4YTJkMTk1NzM0NDJhYmYzNyksIENPTlNUNjQoMHg2YTgzMjZlOWE1M2QxYjRjKSwgQ09OU1Q2NCgweGUxZDQ1ZjM1OGJlYWI1YmUpLAorICAgIENPTlNUNjQoMHgxYzQ5ZmY1NWI2NmQ5MmUzKSwgQ09OU1Q2NCgweGE4ZDk5MzcxNGEzY2FmM2IpLCBDT05TVDY0KDB4OGFmMThkN2I3YzcyZmYwNyksIENPTlNUNjQoMHg4NjBhODk4YzgzOWQxNDBmKSwKKyAgICBDT05TVDY0KDB4YTdkNTk2NzI0MzIxYjczMSksIENPTlNUNjQoMHg5MjFhODU4ODlmYjEzNDE3KSwgQ09OU1Q2NCgweDA5ZmYwN2Y2ZjhlNGUzMGUpLCBDT05TVDY0KDB4ODJhODdlMmFkNjMzNGRmYyksCisgICAgQ09OU1Q2NCgweGM2Zjg0MjNlYmFhZmVkODQpLCBDT05TVDY0KDB4M2I2NWUyNWU4NzI4Y2FkOSksIENPTlNUNjQoMHhiYjljNjkyN2Y1NGMyNWQyKSwgQ09OU1Q2NCgweDQzMDVjYTQ2Y2ZjMDBhODkpLAorICAgIENPTlNUNjQoMHgzYzMwMTQwYzI0NzQ2MDI4KSwgQ09OU1Q2NCgweGVjODlhZjY1MjZhMDBmNDMpLCBDT05TVDY0KDB4ZDViZGI4NjgwNWRmNjc2ZCksIENPTlNUNjQoMHhmODk5YTM2MTNhOGMyZjViKSwKKyAgICBDT05TVDY0KDB4MGYwYzA1MDMwOTFkMTgwYSksIENPTlNUNjQoMHhlMjIzNWVjMTdkMTg0NmJjKSwgQ09OU1Q2NCgweDE2NDFmOTU3Yjg3YjgyZWYpLCBDT05TVDY0KDB4YTk3ZjY3ZDYxODk5ZmVjZSksCisgICAgQ09OU1Q2NCgweDlhNDM3NmQ5MzVmMDg2ZWMpLCBDT05TVDY0KDB4MjU3ZGU4NTg5NTEyZmFjZCksIENPTlNUNjQoMHg5ZjQ3NzVkODMyZmI4ZWVhKSwgQ09OU1Q2NCgweGUzODVhYTY2MmZiZDE3NDkpLAorICAgIENPTlNUNjQoMHhhYzdiNjRkNzFmOTJmNmM4KSwgQ09OU1Q2NCgweGQyZTg0ZTNhYTY4M2NkOWMpLCBDT05TVDY0KDB4Y2YwNzQ1Yzg0MjRiMGU4YSksIENPTlNUNjQoMHhjY2YwNDQzY2I0YjlmZDg4KSwKKyAgICBDT05TVDY0KDB4MzVjZjEzZmFkYzkwODMyNiksIENPTlNUNjQoMHhmNDYyYTc5NmM1NjNjNDUzKSwgQ09OU1Q2NCgweDAxYTZmNGE3NTJhNTUxZjUpLCBDT05TVDY0KDB4YzI1YWI1OThlZjAxYjQ3NyksCisgICAgQ09OU1Q2NCgweDdiOTcyOWVjYmUxYTMzNTIpLCBDT05TVDY0KDB4NjJkYWQ1YjgwZjdjYTliNyksIENPTlNUNjQoMHhmYzNiNTRjNzZmMjI3NmE4KSwgQ09OU1Q2NCgweDJjODJlZmFlNmRmNjE5YzMpLAorICAgIENPTlNUNjQoMHhkMGI5YmI2OTAyZDQ2ZjZiKSwgQ09OU1Q2NCgweDdhMzFkZDRiZWNiZjYyYTcpLCBDT05TVDY0KDB4M2Q5NmUwYWI3NmQxMzFkZCksIENPTlNUNjQoMHgzNzllZTZhOTc4YzcyMWQxKSwKKyAgICBDT05TVDY0KDB4ZTY4MWE5NjcyOGI2MWY0ZiksIENPTlNUNjQoMHgyMjI4MWUwYTM2NGU1MDNjKSwgQ09OU1Q2NCgweDQ2MDFjOTQ3YzhjYjAyOGYpLCBDT05TVDY0KDB4MWRlZjBiZjJlNGM4YzMxNiksCisgICAgQ09OU1Q2NCgweDViZWVjMmI1MmMwM2MxOTkpLCBDT05TVDY0KDB4YWE4ODY2MjJlZTZiMGRjYyksIENPTlNUNjQoMHg1NmIzMzJlNTgxNDk3YjY0KSwgQ09OU1Q2NCgweDcxOWYyZmVlYjAwYzIzNWUpLAorICAgIENPTlNUNjQoMHg3Y2MyZGZiZTFkNDY5OWEzKSwgQ09OU1Q2NCgweDg3YWM3ZDJiZDEzODQ1ZmEpLCBDT05TVDY0KDB4YmYzZTllODFhMGUyN2MyMSksIENPTlNUNjQoMHg1YTQ4MzYxMjdlYTY5MDZjKSwKKyAgICBDT05TVDY0KDB4YjUzNjk4ODNhZWY0NmMyZCksIENPTlNUNjQoMHg3NzZjMmQxYjQxZjVkODVhKSwgQ09OU1Q2NCgweDM2MzgxMjBlMmE2MjcwMjQpLCBDT05TVDY0KDB4YWY4YzY1MjNlOTYwMDVjYSksCisgICAgQ09OU1Q2NCgweDA2ZjMwMmY1ZjFmOWZiMDQpLCBDT05TVDY0KDB4NGMwOWNmNDVjNmRkMTI4MyksIENPTlNUNjQoMHhhNTg0NjMyMWU3NzYxNWM2KSwgQ09OU1Q2NCgweGQxMWY0ZmNlNTA3MTNlOWUpLAorICAgIENPTlNUNjQoMHg3MDM5ZGI0OWUyYTk3MmFiKSwgQ09OU1Q2NCgweDljYjA3NDJjYzQwOTdkZTgpLCBDT05TVDY0KDB4M2FjMzE2ZjlkNThkOWIyYyksIENPTlNUNjQoMHg1OWJmMzdlNjg4NTQ2MzZlKSwKKyAgICBDT05TVDY0KDB4NTRlMmM3YjYyNTFlZDk5MyksIENPTlNUNjQoMHg4OGEwNzgyOGQ4MjU1ZGYwKSwgQ09OU1Q2NCgweDRiNWMzOTE3NjU4MWI4NzIpLCBDT05TVDY0KDB4YjAzMjliODJhOWZmNjQyYiksCisgICAgQ09OU1Q2NCgweDcyNjgyZTFhNDZmZWQwNWMpLCBDT05TVDY0KDB4OWQxNjgwOGI5NmFjMmMxZCksIENPTlNUNjQoMHgyMWRmMWZmZWMwYmNhMzNlKSwgQ09OU1Q2NCgweDk4MTI4MzhhOTFhNzI0MWIpLAorICAgIENPTlNUNjQoMHgyZDI0MWIwOTNmNTM0ODM2KSwgQ09OU1Q2NCgweGNhMDM0NmM5NDU0MDA2OGMpLCBDT05TVDY0KDB4YTEyNjk0ODdiMmQ4NGMzNSksIENPTlNUNjQoMHg2YjI1ZDI0ZWY3OTg0YWI5KSwKKyAgICBDT05TVDY0KDB4NDJhMzNlZTE5ZDY1NWI3YyksIENPTlNUNjQoMHg5NmI4NzIyZWNhMWY2ZGU0KSwgQ09OU1Q2NCgweDUzYjczMWU0ODY0MjczNjIpLCBDT05TVDY0KDB4NDdhNzNkZTA5YTZlNTM3YSksCisgICAgQ09OU1Q2NCgweDYwOGIyMGViYWIyYjBiNDApLCBDT05TVDY0KDB4ZWE3YWFkOTBkNzU5ZjQ0NyksIENPTlNUNjQoMHgwZWFhZjFhNDViYjg0OWZmKSwgQ09OU1Q2NCgweDY2NzgyMjFlNWFkMmYwNDQpLAorICAgIENPTlNUNjQoMHhhYjJlOTI4NWJjY2U1YzM5KSwgQ09OU1Q2NCgweGZkOWRhMDYwM2Q4NzI3NWQpLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHhiMTk0NmYyNWZiNWEzNWRlKSwKKyAgICBDT05TVDY0KDB4MDNmNzAxZjRmNmYyZjMwMiksIENPTlNUNjQoMHgxMmUzMGVmMWVkZDVkYjFjKSwgQ09OU1Q2NCgweGZlNmFhMTk0Y2I3NWQ0NWYpLCBDT05TVDY0KDB4MjcyYzFkMGIzMTQ1NTgzYSksCisgICAgQ09OU1Q2NCgweDVjYmIzNGU3OGY1ZjZiNjgpLCBDT05TVDY0KDB4YmNjOTlmNzU1NjEwOGYyMyksIENPTlNUNjQoMHg3NDliMmNlZmI3MDcyYjU4KSwgQ09OU1Q2NCgweGU0ZDA1YzM0OGNlMWJkYjgpLAorICAgIENPTlNUNjQoMHhmNWM0NTMzMTk3YzY5NWE2KSwgQ09OU1Q2NCgweGEzNzc2MWQ0MTY4ZmVlYzIpLCBDT05TVDY0KDB4Yjc2NzZkZDAwYWEzY2VkYSksIENPTlNUNjQoMHhhNDIyOTc4NmI1ZDM0NDMzKSwKKyAgICBDT05TVDY0KDB4OWJlNTgyN2U2NzU1ZDcxOSksIENPTlNUNjQoMHgyMzhlZWFhZDY0ZWIwMWM5KSwgQ09OU1Q2NCgweDJlZDMxYWZkYzlhMWJiMzQpLCBDT05TVDY0KDB4OGRhNDdiMjlkZjJlNTVmNiksCisgICAgQ09OU1Q2NCgweGYwYzA1MDMwOTBjZDlkYTApLCBDT05TVDY0KDB4ZDdlYzRkM2JhMTg4YzU5YSksIENPTlNUNjQoMHhkOTQ2YmM5ZmZhMzA4YzY1KSwgQ09OU1Q2NCgweDNmYzcxNWY4ZDI4NjkzMmEpLAorICAgIENPTlNUNjQoMHhmOTNmNTdjNjY4Mjk3ZWFlKSwgQ09OU1Q2NCgweDVmNGMzNTEzNzlhZDk4NmEpLCBDT05TVDY0KDB4MWUxODBhMDYxMjNhMzAxNCksIENPTlNUNjQoMHgxMTE0MGYwNTFiMjcyODFlKSwKKyAgICBDT05TVDY0KDB4ZjYzMzUyYzU2MTM0NjZhNCksIENPTlNUNjQoMHg1NTQ0MzMxMTc3YmI4ODY2KSwgQ09OU1Q2NCgweGI2YzE5OTc3NTgwNjlmMmYpLCBDT05TVDY0KDB4OTFlZDg0N2M2OTQzYzcxNSksCisgICAgQ09OU1Q2NCgweDhmZjU4ZTdhN2I3OWY3MDEpLCBDT05TVDY0KDB4ODVmZDg4Nzg3NTZmZTcwZCksIENPTlNUNjQoMHhlZWQ4NWEzNjgyZjdhZGI0KSwgQ09OU1Q2NCgweDZjNzAyNDFjNTRjNGUwNDgpLAorICAgIENPTlNUNjQoMHhkZGU0NGIzOWFmOWVkNTk2KSwgQ09OU1Q2NCgweDIwNzllYjU5OTIxOWYyY2IpLCBDT05TVDY0KDB4Nzg2MDI4MTg0OGU4YzA1MCksIENPTlNUNjQoMHgxMzQ1ZmE1NmJmNzA4YWU5KSwKKyAgICBDT05TVDY0KDB4NDVmNmM4YjMzZTM5ZjE4ZCksIENPTlNUNjQoMHg0YWZhY2RiMDM3MjRlOTg3KSwgQ09OU1Q2NCgweGI0OTA2YzI0ZmM1MTNkZDgpLCBDT05TVDY0KDB4YTA4MDYwMjBlMDdkMWRjMCksCisgICAgQ09OU1Q2NCgweDQwZjJjYmIyMzkzMmY5OGIpLCBDT05TVDY0KDB4ZTA3MmFiOTJkOTRmZTQ0YiksIENPTlNUNjQoMHgxNWI2ZjhhMzRlODk3MWVkKSwgQ09OU1Q2NCgweGU3Mjc1ZGMwN2ExMzRlYmEpLAorICAgIENPTlNUNjQoMHg0OTBkY2M0NGMxZDYxYTg1KSwgQ09OU1Q2NCgweGY3OTVhNjYyMzM5MTM3NTEpLCBDT05TVDY0KDB4NTA0MDMwMTA3MGIwODA2MCksIENPTlNUNjQoMHg1ZWVhYzFiNDJiMDhjOTlmKSwKKyAgICBDT05TVDY0KDB4YWUyYTkxODRiYmM1NTQzZiksIENPTlNUNjQoMHg1MjExYzU0M2Q0ZTcyMjk3KSwgQ09OU1Q2NCgweGU1NzZhODkzZGU0NGVjNGQpLCBDT05TVDY0KDB4ZWQyZjViYzI3NDA1NWViNiksCisgICAgQ09OU1Q2NCgweDdmMzVkZTRhZWJiNDZhYTEpLCBDT05TVDY0KDB4NzNjZWRhYmQxNDViODFhOSksIENPTlNUNjQoMHg4OTA2OGM4ZjhhODAwYzA1KSwgQ09OU1Q2NCgweDk5YjQ3NzJkYzMwMjc1ZWUpLAorICAgIENPTlNUNjQoMHg3NmNhZDliYzEzNTA4OWFmKSwgQ09OU1Q2NCgweGQ2NGFiOTljZjMyZDk0NmYpLCBDT05TVDY0KDB4ZGZiNWJlNmEwYmM5Nzc2MSksIENPTlNUNjQoMHg1ZDFkYzA0MGRkZmEzYTlkKSwKKyAgICBDT05TVDY0KDB4ZDQxYjRjY2Y1NzdhMzY5OCksIENPTlNUNjQoMHgxMGIyZmJhMjQ5ODI3OWViKSwgQ09OU1Q2NCgweGJhM2E5ZDgwYTdlOTc0MjcpLCBDT05TVDY0KDB4NmUyMWQxNGZmMDkzNDJiZiksCisgICAgQ09OU1Q2NCgweDYzN2MyMTFmNWRkOWY4NDIpLCBDT05TVDY0KDB4YzUwZjQzY2E0YzVkMWU4NiksIENPTlNUNjQoMHgzODkyZTNhYTcxZGEzOWRiKSwgQ09OU1Q2NCgweDU3MTVjNjQyZDNlYzJhOTEpLAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nNjQgVDRbMjU2XSA9IHsKKyAgICBDT05TVDY0KDB4YmJiOTZhMDFiYWQzZDI2OCksIENPTlNUNjQoMHhlNTlhNjZiMTU0ZmM0ZDE5KSwgQ09OU1Q2NCgweGUyNjUxNGNkMmY3MWJjOTMpLCBDT05TVDY0KDB4MjU4NzFiNTE3NDljY2RiOSksCisgICAgQ09OU1Q2NCgweGY3YTI1N2E0NTNmNTUxMDIpLCBDT05TVDY0KDB4ZDBkNmJlMDNkMzY4NmJiOCksIENPTlNUNjQoMHhkNmRlYjUwNGQyNmI2ZmJkKSwgQ09OU1Q2NCgweGIzNTI4NWZlNGRkNzI5NjQpLAorICAgIENPTlNUNjQoMHhmZGJhNGFhZDUwZjA1ZDBkKSwgQ09OU1Q2NCgweGNmMDllMDYzYWNlOThhMjYpLCBDT05TVDY0KDB4MDkxYzk2ODQ4ZDhhMGU4MyksIENPTlNUNjQoMHhhNTkxNGQxYWJmZGNjNjc5KSwKKyAgICBDT05TVDY0KDB4M2RhNzM3NGQ3MDkwZGRhZCksIENPTlNUNjQoMHhmMWFhNWNhMzUyZjY1NTA3KSwgQ09OU1Q2NCgweDdiYTQxN2UxOWFiMzUyYzgpLCBDT05TVDY0KDB4YjU1YThlZjk0Y2Q0MmQ2MSksCisgICAgQ09OU1Q2NCgweDQ2MDMyMGFjZWEyMzhmNjUpLCBDT05TVDY0KDB4YzRlNjg0MTFkNTYyNzNhNiksIENPTlNUNjQoMHg1NWNjNjhjMjk3YTQ2NmYxKSwgQ09OU1Q2NCgweGRjYzZhODBkZDE2ZTYzYjIpLAorICAgIENPTlNUNjQoMHhhYTg1ZDA5OTMzNTVjY2ZmKSwgQ09OU1Q2NCgweGZiYjI0MWFhNTFmMzU5MDgpLCBDT05TVDY0KDB4YzdlMjBmOWM1YmVkNzEyYSksIENPTlNUNjQoMHhmMzU5YWU1NWE2ZjdhMjA0KSwKKyAgICBDT05TVDY0KDB4ZmViZWMxMjBkZTdmNWY4MSksIENPTlNUNjQoMHhhZDdhYTJlNTQ4ZDgzZDc1KSwgQ09OU1Q2NCgweGQ3MjljYzdmYThlNTlhMzIpLCBDT05TVDY0KDB4NzFiYzBhZTg5OWI2NWVjNyksCisgICAgQ09OU1Q2NCgweGUwOTZlNjNiZGI3MDRiOTApLCBDT05TVDY0KDB4YWM4ZGRiOWUzMjU2YzhmYSksIENPTlNUNjQoMHg5NWQxMTUyMmI3YzRlNjUxKSwgQ09OU1Q2NCgweDMyYjNhYWNlZmMxOWQ3MmIpLAorICAgIENPTlNUNjQoMHg3MDRiNzM5M2UzMzhhYjQ4KSwgQ09OU1Q2NCgweDYzODQzYmZkOWViZjQyZGMpLCBDT05TVDY0KDB4NDFmYzUyZDA5MWFlN2VlZiksIENPTlNUNjQoMHg3ZGFjMWNlNjliYjA1NmNkKSwKKyAgICBDT05TVDY0KDB4NzY0Mzc4OTRlMjNiYWY0ZCksIENPTlNUNjQoMHhiZGIxNjEwNmJiZDBkNjZkKSwgQ09OU1Q2NCgweDliMzJmMWRhNDFjMzE5NTgpLCBDT05TVDY0KDB4Nzk1N2U1MTc2ZWIyYTVjYiksCisgICAgQ09OU1Q2NCgweGY5NDFiMzVjYTVmMmFlMGIpLCBDT05TVDY0KDB4ODAxNjU2NGJjYjQwMGJjMCksIENPTlNUNjQoMHg2NzdmYzIwYzZiYmRiMWRhKSwgQ09OU1Q2NCgweDU5ZGM3ZWNjOTVhMjZlZmIpLAorICAgIENPTlNUNjQoMHhlMTYxOWY0MGExZmViZTFmKSwgQ09OU1Q2NCgweDEwY2JjM2UzZjMwOGViMTgpLCBDT05TVDY0KDB4ODFlMTJmMzBiMWNlZmU0ZiksIENPTlNUNjQoMHgwYzEwMTYwZTAyMDYwODBhKSwKKyAgICBDT05TVDY0KDB4OTIyZTY3NWVjYzQ5MTdkYiksIENPTlNUNjQoMHhhMjZlM2Y2NmM0NTEzN2YzKSwgQ09OU1Q2NCgweDRlZThjZjUzMWQyNzc0NjkpLCBDT05TVDY0KDB4NzhhMDljNmMxNDNjNTA0NCksCisgICAgQ09OU1Q2NCgweGIwNTYwZTczYzM1ODJiZTgpLCBDT05TVDY0KDB4NTczZjlhMzQ2M2E1OTFmMiksIENPTlNUNjQoMHhlNjllZWQzY2RhNzM0Zjk1KSwgQ09OU1Q2NCgweGQzZDIzNThlNWRlNzY5MzQpLAorICAgIENPTlNUNjQoMHhkZmMyMjM4MDVmZTE2MTNlKSwgQ09OU1Q2NCgweGYyYWVkNzJlZGM3OTU3OGIpLCBDT05TVDY0KDB4MTNjZjQ4NmU3ZDg3ZTk5NCksIENPTlNUNjQoMHg5NDI2NmM1OWNkNGExM2RlKSwKKyAgICBDT05TVDY0KDB4MWZkZjVlNjA3ZjgxZTE5ZSksIENPTlNUNjQoMHhjMWVhMDQ5YjVhZWU3NTJmKSwgQ09OU1Q2NCgweDc1NDdmMzE5NmNiNGFkYzEpLCBDT05TVDY0KDB4ZDVkYTNlODk1Y2U0NmQzMSksCisgICAgQ09OU1Q2NCgweDA4ZWJlZmZmZjcwNGZiMGMpLCBDT05TVDY0KDB4ZDQyZDQ3ZjIyNjZhOThiZSksIENPTlNUNjQoMHgzOGFiYjdjN2ZmMWNkYjI0KSwgQ09OU1Q2NCgweDU0M2IxMWI5ZWQyYTkzN2UpLAorICAgIENPTlNUNjQoMHg0YTEzMzZhMmU4MjU4NzZmKSwgQ09OU1Q2NCgweDY5OWMyNmY0OWRiYTRlZDMpLCBDT05TVDY0KDB4N2Y1ZmVlMTA2ZmIxYTFjZSksIENPTlNUNjQoMHgwMzA0OGI4ZDhlOGYwMjhjKSwKKyAgICBDT05TVDY0KDB4NTZjOGUzNGYxOTJiNjQ3ZCksIENPTlNUNjQoMHhlNzY5OTQ0N2EwZmRiYTFhKSwgQ09OU1Q2NCgweDFhZDNkZWVhZjAwZGU3MTcpLCBDT05TVDY0KDB4MTEzY2JhOTg4OTg2MWU5NyksCisgICAgQ09OU1Q2NCgweDIyNzg2OTJkMGYxMTNjMzMpLCBDT05TVDY0KDB4MTIzODMxMTUwNzA5MWMxYiksIENPTlNUNjQoMHhjNTExZmQ2YWFmZWM4NjI5KSwgQ09OU1Q2NCgweDIwOGI5YmRiZmIxMGNiMzApLAorICAgIENPTlNUNjQoMHgzMDQwNTgzODA4MTgyMDI4KSwgQ09OU1Q2NCgweDdlYTg5NzZiMTUzZjU0NDEpLCBDT05TVDY0KDB4MmU2ODdmMjMwZDE3MzQzOSksIENPTlNUNjQoMHgxODIwMmMxYzA0MGMxMDE0KSwKKyAgICBDT05TVDY0KDB4MDYwODBiMDcwMTAzMDQwNSksIENPTlNUNjQoMHg0NTA3YWIyMTY0YWM4ZGU5KSwgQ09OU1Q2NCgweGY4YjZjYTI3ZGY3YzViODQpLCBDT05TVDY0KDB4Mjk5NzBkNWY3NjlhYzViMyksCisgICAgQ09OU1Q2NCgweDBiZWY2NDcyNzk4YmY5ODApLCBDT05TVDY0KDB4ZjRhNmRjMjlkZDdhNTM4ZSksIENPTlNUNjQoMHg4ZWY1YjJiMzNkNDdmNGM5KSwgQ09OU1Q2NCgweDc0YjA4YTYyMTYzYTU4NGUpLAorICAgIENPTlNUNjQoMHg4MmU1YTRiZDNmNDFmY2MzKSwgQ09OU1Q2NCgweGIyYTVmYzg1Mzc1OWRjZWIpLCBDT05TVDY0KDB4NzM0ZmY4MWU2ZGI3YTljNCksIENPTlNUNjQoMHg5MGRkOTVhODM4NDhlMGQ4KSwKKyAgICBDT05TVDY0KDB4YjFhMTc3MDhiOWQ2ZGU2NyksIENPTlNUNjQoMHgzN2JmMmE0NDczOTVkMWEyKSwgQ09OU1Q2NCgweDRjMWIzZGE1ZTkyNjgzNmEpLCBDT05TVDY0KDB4YmViNWVhOGIzNTVmZDRlMSksCisgICAgQ09OU1Q2NCgweGUzOTI2ZGI2NTVmZjQ5MWMpLCBDT05TVDY0KDB4M2JhZjNjNGE3MTkzZDlhOCksIENPTlNUNjQoMHgwN2ZmNzI3YzdiOGRmMThhKSwgQ09OU1Q2NCgweDBmMTQ5ZDgzOGM4OTBhODYpLAorICAgIENPTlNUNjQoMHgzMWI3MjE0MzcyOTZkNWE3KSwgQ09OU1Q2NCgweDE3MzRiMTlmODg4NTFhOTIpLCBDT05TVDY0KDB4MGVlM2U0ZjhmNjA3ZmYwOSksIENPTlNUNjQoMHhmYzRkMzNkNjJhN2VhODgyKSwKKyAgICBDT05TVDY0KDB4ODRlZGFmYmEzZTQyZjhjNiksIENPTlNUNjQoMHhkOWNhMjg4NzVlZTI2NTNiKSwgQ09OU1Q2NCgweGQyMjU0Y2Y1Mjc2OTljYmIpLCBDT05TVDY0KDB4ODkwYWMwY2Y0NmNhMDU0MyksCisgICAgQ09OU1Q2NCgweDI4NjA3NDI0MGMxNDMwM2MpLCBDT05TVDY0KDB4NDMwZmEwMjY2NWFmODllYyksIENPTlNUNjQoMHg2ZDY3ZGYwNTY4YjhiZGQ1KSwgQ09OU1Q2NCgweDViMmY4YzNhNjFhMzk5ZjgpLAorICAgIENPTlNUNjQoMHgwYTE4MWQwOTAzMDUwYzBmKSwgQ09OU1Q2NCgweGJjNDYxODdkYzE1ZTIzZTIpLCBDT05TVDY0KDB4ZWY4MjdiYjg1N2Y5NDExNiksIENPTlNUNjQoMHhjZWZlOTkxOGQ2Njc3ZmE5KSwKKyAgICBDT05TVDY0KDB4ZWM4NmYwMzVkOTc2NDM5YSksIENPTlNUNjQoMHhjZGZhMTI5NTU4ZTg3ZDI1KSwgQ09OU1Q2NCgweGVhOGVmYjMyZDg3NTQ3OWYpLCBDT05TVDY0KDB4NDkxN2JkMmY2NmFhODVlMyksCisgICAgQ09OU1Q2NCgweGM4ZjY5MjFmZDc2NDdiYWMpLCBDT05TVDY0KDB4OWNjZDgzYTYzYTRlZThkMiksIENPTlNUNjQoMHg4YTBlNGI0MmM4NDUwN2NmKSwgQ09OU1Q2NCgweDg4ZmRiOWI0M2M0NGYwY2MpLAorICAgIENPTlNUNjQoMHgyNjgzOTBkY2ZhMTNjZjM1KSwgQ09OU1Q2NCgweDUzYzQ2M2M1OTZhNzYyZjQpLCBDT05TVDY0KDB4ZjU1MWE1NTJhN2Y0YTYwMSksIENPTlNUNjQoMHg3N2I0MDFlZjk4YjU1YWMyKSwKKyAgICBDT05TVDY0KDB4NTIzMzFhYmVlYzI5OTc3YiksIENPTlNUNjQoMHhiN2E5N2MwZmI4ZDVkYTYyKSwgQ09OU1Q2NCgweGE4NzYyMjZmYzc1NDNiZmMpLCBDT05TVDY0KDB4YzMxOWY2NmRhZWVmODIyYyksCisgICAgQ09OU1Q2NCgweDZiNmZkNDAyNjliYmI5ZDApLCBDT05TVDY0KDB4YTc2MmJmZWM0YmRkMzE3YSksIENPTlNUNjQoMHhkZDMxZDE3NmFiZTA5NjNkKSwgQ09OU1Q2NCgweGQxMjFjNzc4YTllNjllMzcpLAorICAgIENPTlNUNjQoMHg0ZjFmYjYyODY3YTk4MWU2KSwgQ09OU1Q2NCgweDNjNTA0ZTM2MGExZTI4MjIpLCBDT05TVDY0KDB4OGYwMmNiYzg0N2M5MDE0NiksIENPTlNUNjQoMHgxNmMzYzhlNGYyMGJlZjFkKSwKKyAgICBDT05TVDY0KDB4OTljMTAzMmNiNWMyZWU1YiksIENPTlNUNjQoMHhjYzBkNmJlZTIyNjY4OGFhKSwgQ09OU1Q2NCgweDY0N2I0OTgxZTUzMmIzNTYpLCBDT05TVDY0KDB4NWUyMzBjYjBlZTJmOWY3MSksCisgICAgQ09OU1Q2NCgweGEzOTk0NjFkYmVkZmMyN2MpLCBDT05TVDY0KDB4ZmE0NTM4ZDEyYjdkYWM4NyksIENPTlNUNjQoMHgyMTdjZTJhMDgxOWUzZWJmKSwgQ09OU1Q2NCgweDZjOTBhNjdlMTIzNjQ4NWEpLAorICAgIENPTlNUNjQoMHgyZDZjZjRhZTgzOTgzNmI1KSwgQ09OU1Q2NCgweDVhZDhmNTQxMWIyZDZjNzcpLCBDT05TVDY0KDB4MjQ3MDYyMmEwZTEyMzgzNiksIENPTlNUNjQoMHhjYTA1NjBlOTIzNjU4Y2FmKSwKKyAgICBDT05TVDY0KDB4MDRmYmY5ZjFmNTAyZjMwNiksIENPTlNUNjQoMHg4MzEyZGRjNjQ1Y2YwOTRjKSwgQ09OU1Q2NCgweGM2MTU3NmU3MjE2Mzg0YTUpLCBDT05TVDY0KDB4OWUzZTcxNTBjZTRmMWZkMSksCisgICAgQ09OU1Q2NCgweGFiNzJhOWUyNDlkYjM5NzApLCBDT05TVDY0KDB4ZTg3ZDA5YzQyYzc0YjA5YyksIENPTlNUNjQoMHgyYzliOGRkNWY5MTZjMzNhKSwgQ09OU1Q2NCgweDZlNjM1NDg4ZTYzN2JmNTkpLAorICAgIENPTlNUNjQoMHg5M2Q5MWUyNWI2YzdlMjU0KSwgQ09OU1Q2NCgweGYwNWQyNWQ4Mjg3OGEwODgpLCBDT05TVDY0KDB4NzJiODgxNjUxNzM5NWM0YiksIENPTlNUNjQoMHgyYjY0ZmZhOTgyOWIzMmIwKSwKKyAgICBDT05TVDY0KDB4NWNkMGZlNDYxYTJlNjg3MiksIENPTlNUNjQoMHgxZDJjYWM5NjhiODAxNjlkKSwgQ09OU1Q2NCgweDNlYTNiY2MwZmUxZmRmMjEpLCBDT05TVDY0KDB4MWIyNGE3OTE4YTgzMTI5OCksCisgICAgQ09OU1Q2NCgweDM2NDg1MzNmMDkxYjI0MmQpLCBDT05TVDY0KDB4OGMwNjQwNDVjOTQ2MDNjYSksIENPTlNUNjQoMHgzNTRjZDhiMjg3OTQyNmExKSwgQ09OU1Q2NCgweGI5NGE5OGY3NGVkMjI1NmIpLAorICAgIENPTlNUNjQoMHg3YzViNjU5ZGUxM2VhMzQyKSwgQ09OU1Q2NCgweGU0NmQxZmNhMmU3MmI4OTYpLCBDT05TVDY0KDB4NjI3MzQyODZlNDMxYjc1MyksIENPTlNUNjQoMHg3YTUzNmU5YWUwM2RhNzQ3KSwKKyAgICBDT05TVDY0KDB4NDAwYjJiYWJlYjIwOGI2MCksIENPTlNUNjQoMHg0N2Y0NTlkNzkwYWQ3YWVhKSwgQ09OU1Q2NCgweGZmNDliODViYTRmMWFhMGUpLCBDT05TVDY0KDB4NDRmMGQyNWExZTIyNzg2NiksCisgICAgQ09OU1Q2NCgweDM5NWNjZWJjODU5MjJlYWIpLCBDT05TVDY0KDB4NWQyNzg3M2Q2MGEwOWRmZCksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweGRlMzU1YWZiMjU2Zjk0YjEpLAorICAgIENPTlNUNjQoMHgwMmYzZjJmNmY0MDFmNzAzKSwgQ09OU1Q2NCgweDFjZGJkNWVkZjEwZWUzMTIpLCBDT05TVDY0KDB4NWZkNDc1Y2I5NGExNmFmZSksIENPTlNUNjQoMHgzYTU4NDUzMTBiMWQyYzI3KSwKKyAgICBDT05TVDY0KDB4Njg2YjVmOGZlNzM0YmI1YyksIENPTlNUNjQoMHgyMzhmMTA1Njc1OWZjOWJjKSwgQ09OU1Q2NCgweDU4MmIwN2I3ZWYyYzliNzQpLCBDT05TVDY0KDB4YjhiZGUxOGMzNDVjZDBlNCksCisgICAgQ09OU1Q2NCgweGE2OTVjNjk3MzE1M2M0ZjUpLCBDT05TVDY0KDB4YzJlZThmMTZkNDYxNzdhMyksIENPTlNUNjQoMHhkYWNlYTMwYWQwNmQ2N2I3KSwgQ09OU1Q2NCgweDMzNDRkM2I1ODY5NzIyYTQpLAorICAgIENPTlNUNjQoMHgxOWQ3NTU2NzdlODJlNTliKSwgQ09OU1Q2NCgweGM5MDFlYjY0YWRlYThlMjMpLCBDT05TVDY0KDB4MzRiYmExYzlmZDFhZDMyZSksIENPTlNUNjQoMHhmNjU1MmVkZjI5N2JhNDhkKSwKKyAgICBDT05TVDY0KDB4YTA5ZGNkOTAzMDUwYzBmMCksIENPTlNUNjQoMHg5YWM1ODhhMTNiNGRlY2Q3KSwgQ09OU1Q2NCgweDY1OGMzMGZhOWZiYzQ2ZDkpLCBDT05TVDY0KDB4MmE5Mzg2ZDJmODE1YzczZiksCisgICAgQ09OU1Q2NCgweGFlN2UyOTY4YzY1NzNmZjkpLCBDT05TVDY0KDB4NmE5OGFkNzkxMzM1NGM1ZiksIENPTlNUNjQoMHgxNDMwM2ExMjA2MGExODFlKSwgQ09OU1Q2NCgweDFlMjgyNzFiMDUwZjE0MTEpLAorICAgIENPTlNUNjQoMHhhNDY2MzQ2MWM1NTIzM2Y2KSwgQ09OU1Q2NCgweDY2ODhiYjc3MTEzMzQ0NTUpLCBDT05TVDY0KDB4MmY5ZjA2NTg3Nzk5YzFiNiksIENPTlNUNjQoMHgxNWM3NDM2OTdjODRlZDkxKSwKKyAgICBDT05TVDY0KDB4MDFmNzc5N2I3YThlZjU4ZiksIENPTlNUNjQoMHgwZGU3NmY3NTc4ODhmZDg1KSwgQ09OU1Q2NCgweGI0YWRmNzgyMzY1YWQ4ZWUpLCBDT05TVDY0KDB4NDhlMGM0NTQxYzI0NzA2YyksCisgICAgQ09OU1Q2NCgweDk2ZDU5ZWFmMzk0YmU0ZGQpLCBDT05TVDY0KDB4Y2JmMjE5OTI1OWViNzkyMCksIENPTlNUNjQoMHg1MGMwZTg0ODE4Mjg2MDc4KSwgQ09OU1Q2NCgweGU5OGE3MGJmNTZmYTQ1MTMpLAorICAgIENPTlNUNjQoMHg4ZGYxMzkzZWIzYzhmNjQ1KSwgQ09OU1Q2NCgweDg3ZTkyNDM3YjBjZGZhNGEpLCBDT05TVDY0KDB4ZDgzZDUxZmMyNDZjOTBiNCksIENPTlNUNjQoMHhjMDFkN2RlMDIwNjA4MGEwKSwKKyAgICBDT05TVDY0KDB4OGJmOTMyMzliMmNiZjI0MCksIENPTlNUNjQoMHg0YmU0NGZkOTkyYWI3MmUwKSwgQ09OU1Q2NCgweGVkNzE4OTRlYTNmOGI2MTUpLCBDT05TVDY0KDB4YmE0ZTEzN2FjMDVkMjdlNyksCisgICAgQ09OU1Q2NCgweDg1MWFkNmMxNDRjYzBkNDkpLCBDT05TVDY0KDB4NTEzNzkxMzM2MmE2OTVmNyksIENPTlNUNjQoMHg2MDgwYjA3MDEwMzA0MDUwKSwgQ09OU1Q2NCgweDlmYzkwODJiYjRjMWVhNWUpLAorICAgIENPTlNUNjQoMHgzZjU0YzViYjg0OTEyYWFlKSwgQ09OU1Q2NCgweDk3MjJlN2Q0NDNjNTExNTIpLCBDT05TVDY0KDB4NGRlYzQ0ZGU5M2E4NzZlNSksIENPTlNUNjQoMHhiNjVlMDU3NGMyNWIyZmVkKSwKKyAgICBDT05TVDY0KDB4YTE2YWI0ZWI0YWRlMzU3ZiksIENPTlNUNjQoMHhhOTgxNWIxNGJkZGFjZTczKSwgQ09OU1Q2NCgweDA1MGM4MDhhOGY4YzA2ODkpLCBDT05TVDY0KDB4ZWU3NTAyYzMyZDc3YjQ5OSksCisgICAgQ09OU1Q2NCgweGFmODk1MDEzYmNkOWNhNzYpLCBDT05TVDY0KDB4NmY5NDJkZjM5Y2I5NGFkNiksIENPTlNUNjQoMHg2MTc3YzkwYjZhYmViNWRmKSwgQ09OU1Q2NCgweDlkM2FmYWRkNDBjMDFkNWQpLAorICAgIENPTlNUNjQoMHg5ODM2N2E1N2NmNGMxYmQ0KSwgQ09OU1Q2NCgweGViNzk4MjQ5YTJmYmIyMTApLCBDT05TVDY0KDB4Mjc3NGU5YTc4MDlkM2FiYSksIENPTlNUNjQoMHhiZjQyOTNmMDRmZDEyMTZlKSwKKyAgICBDT05TVDY0KDB4NDJmOGQ5NWQxZjIxN2M2MyksIENPTlNUNjQoMHg4NjFlNWQ0Y2NhNDMwZmM1KSwgQ09OU1Q2NCgweGRiMzlkYTcxYWFlMzkyMzgpLCBDT05TVDY0KDB4OTEyYWVjZDM0MmM2MTU1NyksCit9OworCitzdGF0aWMgY29uc3QgdWxvbmc2NCBUNVsyNTZdID0geworICAgIENPTlNUNjQoMHhiOWJiMDE2YWQzYmE2OGQyKSwgQ09OU1Q2NCgweDlhZTViMTY2ZmM1NDE5NGQpLCBDT05TVDY0KDB4NjVlMmNkMTQ3MTJmOTNiYyksIENPTlNUNjQoMHg4NzI1NTExYjljNzRiOWNkKSwKKyAgICBDT05TVDY0KDB4YTJmN2E0NTdmNTUzMDI1MSksIENPTlNUNjQoMHhkNmQwMDNiZTY4ZDNiODZiKSwgQ09OU1Q2NCgweGRlZDYwNGI1NmJkMmJkNmYpLCBDT05TVDY0KDB4NTJiM2ZlODVkNzRkNjQyOSksCisgICAgQ09OU1Q2NCgweGJhZmRhZDRhZjA1MDBkNWQpLCBDT05TVDY0KDB4MDljZjYzZTBlOWFjMjY4YSksIENPTlNUNjQoMHgxYzA5ODQ5NjhhOGQ4MzBlKSwgQ09OU1Q2NCgweDkxYTUxYTRkZGNiZjc5YzYpLAorICAgIENPTlNUNjQoMHhhNzNkNGQzNzkwNzBhZGRkKSwgQ09OU1Q2NCgweGFhZjFhMzVjZjY1MjA3NTUpLCBDT05TVDY0KDB4YTQ3YmUxMTdiMzlhYzg1MiksIENPTlNUNjQoMHg1YWI1Zjk4ZWQ0NGM2MTJkKSwKKyAgICBDT05TVDY0KDB4MDM0NmFjMjAyM2VhNjU4ZiksIENPTlNUNjQoMHhlNmM0MTE4NDYyZDVhNjczKSwgQ09OU1Q2NCgweGNjNTVjMjY4YTQ5N2YxNjYpLCBDT05TVDY0KDB4YzZkYzBkYTg2ZWQxYjI2MyksCisgICAgQ09OU1Q2NCgweDg1YWE5OWQwNTUzM2ZmY2MpLCBDT05TVDY0KDB4YjJmYmFhNDFmMzUxMDg1OSksIENPTlNUNjQoMHhlMmM3OWMwZmVkNWIyYTcxKSwgQ09OU1Q2NCgweDU5ZjM1NWFlZjdhNjA0YTIpLAorICAgIENPTlNUNjQoMHhiZWZlMjBjMTdmZGU4MTVmKSwgQ09OU1Q2NCgweDdhYWRlNWEyZDg0ODc1M2QpLCBDT05TVDY0KDB4MjlkNzdmY2NlNWE4MzI5YSksIENPTlNUNjQoMHhiYzcxZTgwYWI2OTljNzVlKSwKKyAgICBDT05TVDY0KDB4OTZlMDNiZTY3MGRiOTA0YiksIENPTlNUNjQoMHg4ZGFjOWVkYjU2MzJmYWM4KSwgQ09OU1Q2NCgweGQxOTUyMjE1YzRiNzUxZTYpLCBDT05TVDY0KDB4YjMzMmNlYWExOWZjMmJkNyksCisgICAgQ09OU1Q2NCgweDRiNzA5MzczMzhlMzQ4YWIpLCBDT05TVDY0KDB4ODQ2M2ZkM2JiZjllZGM0MiksIENPTlNUNjQoMHhmYzQxZDA1MmFlOTFlZjdlKSwgQ09OU1Q2NCgweGFjN2RlNjFjYjA5YmNkNTYpLAorICAgIENPTlNUNjQoMHg0Mzc2OTQ3ODNiZTI0ZGFmKSwgQ09OU1Q2NCgweGIxYmQwNjYxZDBiYjZkZDYpLCBDT05TVDY0KDB4MzI5YmRhZjFjMzQxNTgxOSksIENPTlNUNjQoMHg1Nzc5MTdlNWIyNmVjYmE1KSwKKyAgICBDT05TVDY0KDB4NDFmOTVjYjNmMmE1MGJhZSksIENPTlNUNjQoMHgxNjgwNGI1NjQwY2JjMDBiKSwgQ09OU1Q2NCgweDdmNjcwY2MyYmQ2YmRhYjEpLCBDT05TVDY0KDB4ZGM1OWNjN2VhMjk1ZmI2ZSksCisgICAgQ09OU1Q2NCgweDYxZTE0MDlmZmVhMTFmYmUpLCBDT05TVDY0KDB4Y2IxMGUzYzMwOGYzMThlYiksIENPTlNUNjQoMHhlMTgxMzAyZmNlYjE0ZmZlKSwgQ09OU1Q2NCgweDEwMGMwZTE2MDYwMjBhMDgpLAorICAgIENPTlNUNjQoMHgyZTkyNWU2NzQ5Y2NkYjE3KSwgQ09OU1Q2NCgweDZlYTI2NjNmNTFjNGYzMzcpLCBDT05TVDY0KDB4ZTg0ZTUzY2YyNzFkNjk3NCksIENPTlNUNjQoMHhhMDc4NmM5YzNjMTQ0NDUwKSwKKyAgICBDT05TVDY0KDB4NTZiMDczMGU1OGMzZTgyYiksIENPTlNUNjQoMHgzZjU3MzQ5YWE1NjNmMjkxKSwgQ09OU1Q2NCgweDllZTYzY2VkNzNkYTk1NGYpLCBDT05TVDY0KDB4ZDJkMzhlMzVlNzVkMzQ2OSksCisgICAgQ09OU1Q2NCgweGMyZGY4MDIzZTE1ZjNlNjEpLCBDT05TVDY0KDB4YWVmMjJlZDc3OWRjOGI1NyksIENPTlNUNjQoMHhjZjEzNmU0ODg3N2Q5NGU5KSwgQ09OU1Q2NCgweDI2OTQ1OTZjNGFjZGRlMTMpLAorICAgIENPTlNUNjQoMHhkZjFmNjA1ZTgxN2Y5ZWUxKSwgQ09OU1Q2NCgweGVhYzE5YjA0ZWU1YTJmNzUpLCBDT05TVDY0KDB4NDc3NTE5ZjNiNDZjYzFhZCksIENPTlNUNjQoMHhkYWQ1ODkzZWU0NWMzMTZkKSwKKyAgICBDT05TVDY0KDB4ZWIwOGZmZWYwNGY3MGNmYiksIENPTlNUNjQoMHgyZGQ0ZjI0NzZhMjZiZTk4KSwgQ09OU1Q2NCgweGFiMzhjN2I3MWNmZjI0ZGIpLCBDT05TVDY0KDB4M2I1NGI5MTEyYWVkN2U5MyksCisgICAgQ09OU1Q2NCgweDEzNGFhMjM2MjVlODZmODcpLCBDT05TVDY0KDB4OWM2OWY0MjZiYTlkZDM0ZSksIENPTlNUNjQoMHg1ZjdmMTBlZWIxNmZjZWExKSwgQ09OU1Q2NCgweDA0MDM4ZDhiOGY4ZThjMDIpLAorICAgIENPTlNUNjQoMHhjODU2NGZlMzJiMTk3ZDY0KSwgQ09OU1Q2NCgweDY5ZTc0Nzk0ZmRhMDFhYmEpLCBDT05TVDY0KDB4ZDMxYWVhZGUwZGYwMTdlNyksIENPTlNUNjQoMHgzYzExOThiYTg2ODk5NzFlKSwKKyAgICBDT05TVDY0KDB4NzgyMjJkNjkxMTBmMzMzYyksIENPTlNUNjQoMHgzODEyMTUzMTA5MDcxYjFjKSwgQ09OU1Q2NCgweDExYzU2YWZkZWNhZjI5ODYpLCBDT05TVDY0KDB4OGIyMGRiOWIxMGZiMzBjYiksCisgICAgQ09OU1Q2NCgweDQwMzAzODU4MTgwODI4MjApLCBDT05TVDY0KDB4YTg3ZTZiOTczZjE1NDE1NCksIENPTlNUNjQoMHg2ODJlMjM3ZjE3MGQzOTM0KSwgQ09OU1Q2NCgweDIwMTgxYzJjMGMwNDE0MTApLAorICAgIENPTlNUNjQoMHgwODA2MDcwYjAzMDEwNTA0KSwgQ09OU1Q2NCgweDA3NDUyMWFiYWM2NGU5OGQpLCBDT05TVDY0KDB4YjZmODI3Y2E3Y2RmODQ1YiksIENPTlNUNjQoMHg5NzI5NWYwZDlhNzZiM2M1KSwKKyAgICBDT05TVDY0KDB4ZWYwYjcyNjQ4Yjc5ODBmOSksIENPTlNUNjQoMHhhNmY0MjlkYzdhZGQ4ZTUzKSwgQ09OU1Q2NCgweGY1OGViM2IyNDczZGM5ZjQpLCBDT05TVDY0KDB4YjA3NDYyOGEzYTE2NGU1OCksCisgICAgQ09OU1Q2NCgweGU1ODJiZGE0NDEzZmMzZmMpLCBDT05TVDY0KDB4YTViMjg1ZmM1OTM3ZWJkYyksIENPTlNUNjQoMHg0ZjczMWVmOGI3NmRjNGE5KSwgQ09OU1Q2NCgweGRkOTBhODk1NDgzOGQ4ZTApLAorICAgIENPTlNUNjQoMHhhMWIxMDg3N2Q2Yjk2N2RlKSwgQ09OU1Q2NCgweGJmMzc0NDJhOTU3M2EyZDEpLCBDT05TVDY0KDB4MWI0Y2E1M2QyNmU5NmE4MyksIENPTlNUNjQoMHhiNWJlOGJlYTVmMzVlMWQ0KSwKKyAgICBDT05TVDY0KDB4OTJlM2I2NmRmZjU1MWM0OSksIENPTlNUNjQoMHhhZjNiNGEzYzkzNzFhOGQ5KSwgQ09OU1Q2NCgweGZmMDc3YzcyOGQ3YjhhZjEpLCBDT05TVDY0KDB4MTQwZjgzOWQ4OThjODYwYSksCisgICAgQ09OU1Q2NCgweGI3MzE0MzIxOTY3MmE3ZDUpLCBDT05TVDY0KDB4MzQxNzlmYjE4NTg4OTIxYSksIENPTlNUNjQoMHhlMzBlZjhlNDA3ZjYwOWZmKSwgQ09OU1Q2NCgweDRkZmNkNjMzN2UyYTgyYTgpLAorICAgIENPTlNUNjQoMHhlZDg0YmFhZjQyM2VjNmY4KSwgQ09OU1Q2NCgweGNhZDk4NzI4ZTI1ZTNiNjUpLCBDT05TVDY0KDB4MjVkMmY1NGM2OTI3YmI5YyksIENPTlNUNjQoMHgwYTg5Y2ZjMGNhNDY0MzA1KSwKKyAgICBDT05TVDY0KDB4NjAyODI0NzQxNDBjM2MzMCksIENPTlNUNjQoMHgwZjQzMjZhMGFmNjVlYzg5KSwgQ09OU1Q2NCgweDY3NmQwNWRmYjg2OGQ1YmQpLCBDT05TVDY0KDB4MmY1YjNhOGNhMzYxZjg5OSksCisgICAgQ09OU1Q2NCgweDE4MGEwOTFkMDUwMzBmMGMpLCBDT05TVDY0KDB4NDZiYzdkMTg1ZWMxZTIyMyksIENPTlNUNjQoMHg4MmVmYjg3YmY5NTcxNjQxKSwgQ09OU1Q2NCgweGZlY2UxODk5NjdkNmE5N2YpLAorICAgIENPTlNUNjQoMHg4NmVjMzVmMDc2ZDk5YTQzKSwgQ09OU1Q2NCgweGZhY2Q5NTEyZTg1ODI1N2QpLCBDT05TVDY0KDB4OGVlYTMyZmI3NWQ4OWY0NyksIENPTlNUNjQoMHgxNzQ5MmZiZGFhNjZlMzg1KSwKKyAgICBDT05TVDY0KDB4ZjZjODFmOTI2NGQ3YWM3YiksIENPTlNUNjQoMHhjZDljYTY4MzRlM2FkMmU4KSwgQ09OU1Q2NCgweDBlOGE0MjRiNDVjOGNmMDcpLCBDT05TVDY0KDB4ZmQ4OGI0Yjk0NDNjY2NmMCksCisgICAgQ09OU1Q2NCgweDgzMjZkYzkwMTNmYTM1Y2YpLCBDT05TVDY0KDB4YzQ1M2M1NjNhNzk2ZjQ2MiksIENPTlNUNjQoMHg1MWY1NTJhNWY0YTcwMWE2KSwgQ09OU1Q2NCgweGI0NzdlZjAxYjU5OGMyNWEpLAorICAgIENPTlNUNjQoMHgzMzUyYmUxYTI5ZWM3Yjk3KSwgQ09OU1Q2NCgweGE5YjcwZjdjZDViODYyZGEpLCBDT05TVDY0KDB4NzZhODZmMjI1NGM3ZmMzYiksIENPTlNUNjQoMHgxOWMzNmRmNmVmYWUyYzgyKSwKKyAgICBDT05TVDY0KDB4NmY2YjAyZDRiYjY5ZDBiOSksIENPTlNUNjQoMHg2MmE3ZWNiZmRkNGI3YTMxKSwgQ09OU1Q2NCgweDMxZGQ3NmQxZTBhYjNkOTYpLCBDT05TVDY0KDB4MjFkMTc4YzdlNmE5Mzc5ZSksCisgICAgQ09OU1Q2NCgweDFmNGYyOGI2YTk2N2U2ODEpLCBDT05TVDY0KDB4NTAzYzM2NGUxZTBhMjIyOCksIENPTlNUNjQoMHgwMjhmYzhjYmM5NDc0NjAxKSwgQ09OU1Q2NCgweGMzMTZlNGM4MGJmMjFkZWYpLAorICAgIENPTlNUNjQoMHhjMTk5MmMwM2MyYjU1YmVlKSwgQ09OU1Q2NCgweDBkY2NlZTZiNjYyMmFhODgpLCBDT05TVDY0KDB4N2I2NDgxNDkzMmU1NTZiMyksIENPTlNUNjQoMHgyMzVlYjAwYzJmZWU3MTlmKSwKKyAgICBDT05TVDY0KDB4OTlhMzFkNDZkZmJlN2NjMiksIENPTlNUNjQoMHg0NWZhZDEzODdkMmI4N2FjKSwgQ09OU1Q2NCgweDdjMjFhMGUyOWU4MWJmM2UpLCBDT05TVDY0KDB4OTA2YzdlYTYzNjEyNWE0OCksCisgICAgQ09OU1Q2NCgweDZjMmRhZWY0OTg4M2I1MzYpLCBDT05TVDY0KDB4ZDg1YTQxZjUyZDFiNzc2YyksIENPTlNUNjQoMHg3MDI0MmE2MjEyMGUzNjM4KSwgQ09OU1Q2NCgweDA1Y2FlOTYwNjUyM2FmOGMpLAorICAgIENPTlNUNjQoMHhmYjA0ZjFmOTAyZjUwNmYzKSwgQ09OU1Q2NCgweDEyODNjNmRkY2Y0NTRjMDkpLCBDT05TVDY0KDB4MTVjNmU3NzY2MzIxYTU4NCksIENPTlNUNjQoMHgzZTllNTA3MTRmY2VkMTFmKSwKKyAgICBDT05TVDY0KDB4NzJhYmUyYTlkYjQ5NzAzOSksIENPTlNUNjQoMHg3ZGU4YzQwOTc0MmM5Y2IwKSwgQ09OU1Q2NCgweDliMmNkNThkMTZmOTNhYzMpLCBDT05TVDY0KDB4NjM2ZTg4NTQzN2U2NTliZiksCisgICAgQ09OU1Q2NCgweGQ5OTMyNTFlYzdiNjU0ZTIpLCBDT05TVDY0KDB4NWRmMGQ4MjU3ODI4ODhhMCksIENPTlNUNjQoMHhiODcyNjU4MTM5MTc0YjVjKSwgQ09OU1Q2NCgweDY0MmJhOWZmOWI4MmIwMzIpLAorICAgIENPTlNUNjQoMHhkMDVjNDZmZTJlMWE3MjY4KSwgQ09OU1Q2NCgweDJjMWQ5NmFjODA4YjlkMTYpLCBDT05TVDY0KDB4YTMzZWMwYmMxZmZlMjFkZiksIENPTlNUNjQoMHgyNDFiOTFhNzgzOGE5ODEyKSwKKyAgICBDT05TVDY0KDB4NDgzNjNmNTMxYjA5MmQyNCksIENPTlNUNjQoMHgwNjhjNDU0MDQ2YzljYTAzKSwgQ09OU1Q2NCgweDRjMzViMmQ4OTQ4N2ExMjYpLCBDT05TVDY0KDB4NGFiOWY3OThkMjRlNmIyNSksCisgICAgQ09OU1Q2NCgweDViN2M5ZDY1M2VlMTQyYTMpLCBDT05TVDY0KDB4NmRlNGNhMWY3MjJlOTZiOCksIENPTlNUNjQoMHg3MzYyODY0MjMxZTQ1M2I3KSwgQ09OU1Q2NCgweDUzN2E5YTZlM2RlMDQ3YTcpLAorICAgIENPTlNUNjQoMHgwYjQwYWIyYjIwZWI2MDhiKSwgQ09OU1Q2NCgweGY0NDdkNzU5YWQ5MGVhN2EpLCBDT05TVDY0KDB4NDlmZjViYjhmMWE0MGVhYSksIENPTlNUNjQoMHhmMDQ0NWFkMjIyMWU2Njc4KSwKKyAgICBDT05TVDY0KDB4NWMzOWJjY2U5Mjg1YWIyZSksIENPTlNUNjQoMHgyNzVkM2Q4N2EwNjBmZDlkKSwgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMDAwMDApLCBDT05TVDY0KDB4MzVkZWZiNWE2ZjI1YjE5NCksCisgICAgQ09OU1Q2NCgweGYzMDJmNmYyMDFmNDAzZjcpLCBDT05TVDY0KDB4ZGIxY2VkZDUwZWYxMTJlMyksIENPTlNUNjQoMHhkNDVmY2I3NWExOTRmZTZhKSwgQ09OU1Q2NCgweDU4M2EzMTQ1MWQwYjI3MmMpLAorICAgIENPTlNUNjQoMHg2YjY4OGY1ZjM0ZTc1Y2JiKSwgQ09OU1Q2NCgweDhmMjM1NjEwOWY3NWJjYzkpLCBDT05TVDY0KDB4MmI1OGI3MDcyY2VmNzQ5YiksIENPTlNUNjQoMHhiZGI4OGNlMTVjMzRlNGQwKSwKKyAgICBDT05TVDY0KDB4OTVhNjk3YzY1MzMxZjVjNCksIENPTlNUNjQoMHhlZWMyMTY4ZjYxZDRhMzc3KSwgQ09OU1Q2NCgweGNlZGEwYWEzNmRkMGI3NjcpLCBDT05TVDY0KDB4NDQzM2I1ZDM5Nzg2YTQyMiksCisgICAgQ09OU1Q2NCgweGQ3MTk2NzU1ODI3ZTliZTUpLCBDT05TVDY0KDB4MDFjOTY0ZWJlYWFkMjM4ZSksIENPTlNUNjQoMHhiYjM0YzlhMTFhZmQyZWQzKSwgQ09OU1Q2NCgweDU1ZjZkZjJlN2IyOThkYTQpLAorICAgIENPTlNUNjQoMHg5ZGEwOTBjZDUwMzBmMGMwKSwgQ09OU1Q2NCgweGM1OWFhMTg4NGQzYmQ3ZWMpLCBDT05TVDY0KDB4OGM2NWZhMzBiYzlmZDk0NiksIENPTlNUNjQoMHg5MzJhZDI4NjE1ZjgzZmM3KSwKKyAgICBDT05TVDY0KDB4N2VhZTY4Mjk1N2M2ZjkzZiksIENPTlNUNjQoMHg5ODZhNzlhZDM1MTM1ZjRjKSwgQ09OU1Q2NCgweDMwMTQxMjNhMGEwNjFlMTgpLCBDT05TVDY0KDB4MjgxZTFiMjcwZjA1MTExNCksCisgICAgQ09OU1Q2NCgweDY2YTQ2MTM0NTJjNWY2MzMpLCBDT05TVDY0KDB4ODg2Njc3YmIzMzExNTU0NCksIENPTlNUNjQoMHg5ZjJmNTgwNjk5NzdiNmMxKSwgQ09OU1Q2NCgweGM3MTU2OTQzODQ3YzkxZWQpLAorICAgIENPTlNUNjQoMHhmNzAxN2I3OThlN2E4ZmY1KSwgQ09OU1Q2NCgweGU3MGQ3NTZmODg3ODg1ZmQpLCBDT05TVDY0KDB4YWRiNDgyZjc1YTM2ZWVkOCksIENPTlNUNjQoMHhlMDQ4NTRjNDI0MWM2YzcwKSwKKyAgICBDT05TVDY0KDB4ZDU5NmFmOWU0YjM5ZGRlNCksIENPTlNUNjQoMHhmMmNiOTIxOWViNTkyMDc5KSwgQ09OU1Q2NCgweGMwNTA0OGU4MjgxODc4NjApLCBDT05TVDY0KDB4OGFlOWJmNzBmYTU2MTM0NSksCisgICAgQ09OU1Q2NCgweGYxOGQzZTM5YzhiMzQ1ZjYpLCBDT05TVDY0KDB4ZTk4NzM3MjRjZGIwNGFmYSksIENPTlNUNjQoMHgzZGQ4ZmM1MTZjMjRiNDkwKSwgQ09OU1Q2NCgweDFkYzBlMDdkNjAyMGEwODApLAorICAgIENPTlNUNjQoMHhmOThiMzkzMmNiYjI0MGYyKSwgQ09OU1Q2NCgweGU0NGJkOTRmYWI5MmUwNzIpLCBDT05TVDY0KDB4NzFlZDRlODlmOGEzMTViNiksIENPTlNUNjQoMHg0ZWJhN2ExMzVkYzBlNzI3KSwKKyAgICBDT05TVDY0KDB4MWE4NWMxZDZjYzQ0NDkwZCksIENPTlNUNjQoMHgzNzUxMzM5MWE2NjJmNzk1KSwgQ09OU1Q2NCgweDgwNjA3MGIwMzAxMDUwNDApLCBDT05TVDY0KDB4Yzk5ZjJiMDhjMWI0NWVlYSksCisgICAgQ09OU1Q2NCgweDU0M2ZiYmM1OTE4NGFlMmEpLCBDT05TVDY0KDB4MjI5N2Q0ZTdjNTQzNTIxMSksIENPTlNUNjQoMHhlYzRkZGU0NGE4OTNlNTc2KSwgQ09OU1Q2NCgweDVlYjY3NDA1NWJjMmVkMmYpLAorICAgIENPTlNUNjQoMHg2YWExZWJiNGRlNGE3ZjM1KSwgQ09OU1Q2NCgweDgxYTkxNDViZGFiZDczY2UpLCBDT05TVDY0KDB4MGMwNThhODA4YzhmODkwNiksIENPTlNUNjQoMHg3NWVlYzMwMjc3MmQ5OWI0KSwKKyAgICBDT05TVDY0KDB4ODlhZjEzNTBkOWJjNzZjYSksIENPTlNUNjQoMHg5NDZmZjMyZGI5OWNkNjRhKSwgQ09OU1Q2NCgweDc3NjEwYmM5YmU2YWRmYjUpLCBDT05TVDY0KDB4M2E5ZGRkZmFjMDQwNWQxZCksCisgICAgQ09OU1Q2NCgweDM2OTg1NzdhNGNjZmQ0MWIpLCBDT05TVDY0KDB4NzllYjQ5ODJmYmEyMTBiMiksIENPTlNUNjQoMHg3NDI3YTdlOTlkODBiYTNhKSwgQ09OU1Q2NCgweDQyYmZmMDkzZDE0ZjZlMjEpLAorICAgIENPTlNUNjQoMHhmODQyNWRkOTIxMWY2MzdjKSwgQ09OU1Q2NCgweDFlODY0YzVkNDNjYWM1MGYpLCBDT05TVDY0KDB4MzlkYjcxZGFlM2FhMzg5MiksIENPTlNUNjQoMHgyYTkxZDNlY2M2NDI1NzE1KSwKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzY0IFQ2WzI1Nl0gPSB7CisgICAgQ09OU1Q2NCgweDZhMDFiYmI5ZDI2OGJhZDMpLCBDT05TVDY0KDB4NjZiMWU1OWE0ZDE5NTRmYyksIENPTlNUNjQoMHgxNGNkZTI2NWJjOTMyZjcxKSwgQ09OU1Q2NCgweDFiNTEyNTg3Y2RiOTc0OWMpLAorICAgIENPTlNUNjQoMHg1N2E0ZjdhMjUxMDI1M2Y1KSwgQ09OU1Q2NCgweGJlMDNkMGQ2NmJiOGQzNjgpLCBDT05TVDY0KDB4YjUwNGQ2ZGU2ZmJkZDI2YiksIENPTlNUNjQoMHg4NWZlYjM1MjI5NjQ0ZGQ3KSwKKyAgICBDT05TVDY0KDB4NGFhZGZkYmE1ZDBkNTBmMCksIENPTlNUNjQoMHhlMDYzY2YwOThhMjZhY2U5KSwgQ09OU1Q2NCgweDk2ODQwOTFjMGU4MzhkOGEpLCBDT05TVDY0KDB4NGQxYWE1OTFjNjc5YmZkYyksCisgICAgQ09OU1Q2NCgweDM3NGQzZGE3ZGRhZDcwOTApLCBDT05TVDY0KDB4NWNhM2YxYWE1NTA3NTJmNiksIENPTlNUNjQoMHgxN2UxN2JhNDUyYzg5YWIzKSwgQ09OU1Q2NCgweDhlZjliNTVhMmQ2MTRjZDQpLAorICAgIENPTlNUNjQoMHgyMGFjNDYwMzhmNjVlYTIzKSwgQ09OU1Q2NCgweDg0MTFjNGU2NzNhNmQ1NjIpLCBDT05TVDY0KDB4NjhjMjU1Y2M2NmYxOTdhNCksIENPTlNUNjQoMHhhODBkZGNjNjYzYjJkMTZlKSwKKyAgICBDT05TVDY0KDB4ZDA5OWFhODVjY2ZmMzM1NSksIENPTlNUNjQoMHg0MWFhZmJiMjU5MDg1MWYzKSwgQ09OU1Q2NCgweDBmOWNjN2UyNzEyYTViZWQpLCBDT05TVDY0KDB4YWU1NWYzNTlhMjA0YTZmNyksCisgICAgQ09OU1Q2NCgweGMxMjBmZWJlNWY4MWRlN2YpLCBDT05TVDY0KDB4YTJlNWFkN2EzZDc1NDhkOCksIENPTlNUNjQoMHhjYzdmZDcyOTlhMzJhOGU1KSwgQ09OU1Q2NCgweDBhZTg3MWJjNWVjNzk5YjYpLAorICAgIENPTlNUNjQoMHhlNjNiZTA5NjRiOTBkYjcwKSwgQ09OU1Q2NCgweGRiOWVhYzhkYzhmYTMyNTYpLCBDT05TVDY0KDB4MTUyMjk1ZDFlNjUxYjdjNCksIENPTlNUNjQoMHhhYWNlMzJiM2Q3MmJmYzE5KSwKKyAgICBDT05TVDY0KDB4NzM5MzcwNGJhYjQ4ZTMzOCksIENPTlNUNjQoMHgzYmZkNjM4NDQyZGM5ZWJmKSwgQ09OU1Q2NCgweDUyZDA0MWZjN2VlZjkxYWUpLCBDT05TVDY0KDB4MWNlNjdkYWM1NmNkOWJiMCksCisgICAgQ09OU1Q2NCgweDc4OTQ3NjQzYWY0ZGUyM2IpLCBDT05TVDY0KDB4NjEwNmJkYjFkNjZkYmJkMCksIENPTlNUNjQoMHhmMWRhOWIzMjE5NTg0MWMzKSwgQ09OU1Q2NCgweGU1MTc3OTU3YTVjYjZlYjIpLAorICAgIENPTlNUNjQoMHhiMzVjZjk0MWFlMGJhNWYyKSwgQ09OU1Q2NCgweDU2NGI4MDE2MGJjMGNiNDApLCBDT05TVDY0KDB4YzIwYzY3N2ZiMWRhNmJiZCksIENPTlNUNjQoMHg3ZWNjNTlkYzZlZmI5NWEyKSwKKyAgICBDT05TVDY0KDB4OWY0MGUxNjFiZTFmYTFmZSksIENPTlNUNjQoMHhjM2UzMTBjYmViMThmMzA4KSwgQ09OU1Q2NCgweDJmMzA4MWUxZmU0ZmIxY2UpLCBDT05TVDY0KDB4MTYwZTBjMTAwODBhMDIwNiksCisgICAgQ09OU1Q2NCgweDY3NWU5MjJlMTdkYmNjNDkpLCBDT05TVDY0KDB4M2Y2NmEyNmUzN2YzYzQ1MSksIENPTlNUNjQoMHhjZjUzNGVlODc0NjkxZDI3KSwgQ09OU1Q2NCgweDljNmM3OGEwNTA0NDE0M2MpLAorICAgIENPTlNUNjQoMHgwZTczYjA1NjJiZThjMzU4KSwgQ09OU1Q2NCgweDlhMzQ1NzNmOTFmMjYzYTUpLCBDT05TVDY0KDB4ZWQzY2U2OWU0Zjk1ZGE3MyksIENPTlNUNjQoMHgzNThlZDNkMjY5MzQ1ZGU3KSwKKyAgICBDT05TVDY0KDB4MjM4MGRmYzI2MTNlNWZlMSksIENPTlNUNjQoMHhkNzJlZjJhZTU3OGJkYzc5KSwgQ09OU1Q2NCgweDQ4NmUxM2NmZTk5NDdkODcpLCBDT05TVDY0KDB4NmM1OTk0MjYxM2RlY2Q0YSksCisgICAgQ09OU1Q2NCgweDVlNjAxZmRmZTE5ZTdmODEpLCBDT05TVDY0KDB4MDQ5YmMxZWE3NTJmNWFlZSksIENPTlNUNjQoMHhmMzE5NzU0N2FkYzE2Y2I0KSwgQ09OU1Q2NCgweDNlODlkNWRhNmQzMTVjZTQpLAorICAgIENPTlNUNjQoMHhlZmZmMDhlYmZiMGNmNzA0KSwgQ09OU1Q2NCgweDQ3ZjJkNDJkOThiZTI2NmEpLCBDT05TVDY0KDB4YjdjNzM4YWJkYjI0ZmYxYyksIENPTlNUNjQoMHgxMWI5NTQzYjkzN2VlZDJhKSwKKyAgICBDT05TVDY0KDB4MzZhMjRhMTM4NzZmZTgyNSksIENPTlNUNjQoMHgyNmY0Njk5YzRlZDM5ZGJhKSwgQ09OU1Q2NCgweGVlMTA3ZjVmYTFjZTZmYjEpLCBDT05TVDY0KDB4OGI4ZDAzMDQwMjhjOGU4ZiksCisgICAgQ09OU1Q2NCgweGUzNGY1NmM4NjQ3ZDE5MmIpLCBDT05TVDY0KDB4OTQ0N2U3NjliYTFhYTBmZCksIENPTlNUNjQoMHhkZWVhMWFkM2U3MTdmMDBkKSwgQ09OU1Q2NCgweGJhOTgxMTNjMWU5Nzg5ODYpLAorICAgIENPTlNUNjQoMHg2OTJkMjI3ODNjMzMwZjExKSwgQ09OU1Q2NCgweDMxMTUxMjM4MWMxYjA3MDkpLCBDT05TVDY0KDB4ZmQ2YWM1MTE4NjI5YWZlYyksIENPTlNUNjQoMHg5YmRiMjA4YmNiMzBmYjEwKSwKKyAgICBDT05TVDY0KDB4NTgzODMwNDAyMDI4MDgxOCksIENPTlNUNjQoMHg5NzZiN2VhODU0NDExNTNmKSwgQ09OU1Q2NCgweDdmMjMyZTY4MzQzOTBkMTcpLCBDT05TVDY0KDB4MmMxYzE4MjAxMDE0MDQwYyksCisgICAgQ09OU1Q2NCgweDBiMDcwNjA4MDQwNTAxMDMpLCBDT05TVDY0KDB4YWIyMTQ1MDc4ZGU5NjRhYyksIENPTlNUNjQoMHhjYTI3ZjhiNjViODRkZjdjKSwgQ09OU1Q2NCgweDBkNWYyOTk3YzViMzc2OWEpLAorICAgIENPTlNUNjQoMHg2NDcyMGJlZmY5ODA3OThiKSwgQ09OU1Q2NCgweGRjMjlmNGE2NTM4ZWRkN2EpLCBDT05TVDY0KDB4YjJiMzhlZjVmNGM5M2Q0NyksIENPTlNUNjQoMHg4YTYyNzRiMDU4NGUxNjNhKSwKKyAgICBDT05TVDY0KDB4YTRiZDgyZTVmY2MzM2Y0MSksIENPTlNUNjQoMHhmYzg1YjJhNWRjZWIzNzU5KSwgQ09OU1Q2NCgweGY4MWU3MzRmYTljNDZkYjcpLCBDT05TVDY0KDB4OTVhODkwZGRlMGQ4Mzg0OCksCisgICAgQ09OU1Q2NCgweDc3MDhiMWExZGU2N2I5ZDYpLCBDT05TVDY0KDB4MmE0NDM3YmZkMWEyNzM5NSksIENPTlNUNjQoMHgzZGE1NGMxYjgzNmFlOTI2KSwgQ09OU1Q2NCgweGVhOGJiZWI1ZDRlMTM1NWYpLAorICAgIENPTlNUNjQoMHg2ZGI2ZTM5MjQ5MWM1NWZmKSwgQ09OU1Q2NCgweDNjNGEzYmFmZDlhODcxOTMpLCBDT05TVDY0KDB4NzI3YzA3ZmZmMThhN2I4ZCksIENPTlNUNjQoMHg5ZDgzMGYxNDBhODY4Yzg5KSwKKyAgICBDT05TVDY0KDB4MjE0MzMxYjdkNWE3NzI5NiksIENPTlNUNjQoMHhiMTlmMTczNDFhOTI4ODg1KSwgQ09OU1Q2NCgweGU0ZjgwZWUzZmYwOWY2MDcpLCBDT05TVDY0KDB4MzNkNmZjNGRhODgyMmE3ZSksCisgICAgQ09OU1Q2NCgweGFmYmE4NGVkZjhjNjNlNDIpLCBDT05TVDY0KDB4Mjg4N2Q5Y2E2NTNiNWVlMiksIENPTlNUNjQoMHg0Y2Y1ZDIyNTljYmIyNzY5KSwgQ09OU1Q2NCgweGMwY2Y4OTBhMDU0MzQ2Y2EpLAorICAgIENPTlNUNjQoMHg3NDI0Mjg2MDMwM2MwYzE0KSwgQ09OU1Q2NCgweGEwMjY0MzBmODllYzY1YWYpLCBDT05TVDY0KDB4ZGYwNTZkNjdiZGQ1NjhiOCksIENPTlNUNjQoMHg4YzNhNWIyZjk5Zjg2MWEzKSwKKyAgICBDT05TVDY0KDB4MWQwOTBhMTgwYzBmMDMwNSksIENPTlNUNjQoMHgxODdkYmM0NjIzZTJjMTVlKSwgQ09OU1Q2NCgweDdiYjhlZjgyNDExNjU3ZjkpLCBDT05TVDY0KDB4OTkxOGNlZmU3ZmE5ZDY2NyksCisgICAgQ09OU1Q2NCgweGYwMzVlYzg2NDM5YWQ5NzYpLCBDT05TVDY0KDB4MTI5NWNkZmE3ZDI1NThlOCksIENPTlNUNjQoMHhmYjMyZWE4ZTQ3OWZkODc1KSwgQ09OU1Q2NCgweGJkMmY0OTE3ODVlMzY2YWEpLAorICAgIENPTlNUNjQoMHg5MjFmYzhmNjdiYWNkNzY0KSwgQ09OU1Q2NCgweDgzYTY5Y2NkZThkMjNhNGUpLCBDT05TVDY0KDB4NGI0MjhhMGUwN2NmYzg0NSksIENPTlNUNjQoMHhiOWI0ODhmZGYwY2MzYzQ0KSwKKyAgICBDT05TVDY0KDB4OTBkYzI2ODNjZjM1ZmExMyksIENPTlNUNjQoMHg2M2M1NTNjNDYyZjQ5NmE3KSwgQ09OU1Q2NCgweGE1NTJmNTUxYTYwMWE3ZjQpLCBDT05TVDY0KDB4MDFlZjc3YjQ1YWMyOThiNSksCisgICAgQ09OU1Q2NCgweDFhYmU1MjMzOTc3YmVjMjkpLCBDT05TVDY0KDB4N2MwZmI3YTlkYTYyYjhkNSksIENPTlNUNjQoMHgyMjZmYTg3NjNiZmNjNzU0KSwgQ09OU1Q2NCgweGY2NmRjMzE5ODIyY2FlZWYpLAorICAgIENPTlNUNjQoMHhkNDAyNmI2ZmI5ZDA2OWJiKSwgQ09OU1Q2NCgweGJmZWNhNzYyMzE3YTRiZGQpLCBDT05TVDY0KDB4ZDE3NmRkMzE5NjNkYWJlMCksIENPTlNUNjQoMHhjNzc4ZDEyMTllMzdhOWU2KSwKKyAgICBDT05TVDY0KDB4YjYyODRmMWY4MWU2NjdhOSksIENPTlNUNjQoMHg0ZTM2M2M1MDI4MjIwYTFlKSwgQ09OU1Q2NCgweGNiYzg4ZjAyMDE0NjQ3YzkpLCBDT05TVDY0KDB4YzhlNDE2YzNlZjFkZjIwYiksCisgICAgQ09OU1Q2NCgweDAzMmM5OWMxZWU1YmI1YzIpLCBDT05TVDY0KDB4NmJlZWNjMGQ4OGFhMjI2NiksIENPTlNUNjQoMHg0OTgxNjQ3YmIzNTZlNTMyKSwgQ09OU1Q2NCgweDBjYjA1ZTIzOWY3MWVlMmYpLAorICAgIENPTlNUNjQoMHg0NjFkYTM5OWMyN2NiZWRmKSwgQ09OU1Q2NCgweDM4ZDFmYTQ1YWM4NzJiN2QpLCBDT05TVDY0KDB4ZTJhMDIxN2MzZWJmODE5ZSksIENPTlNUNjQoMHhhNjdlNmM5MDQ4NWExMjM2KSwKKyAgICBDT05TVDY0KDB4ZjRhZTJkNmMzNmI1ODM5OCksIENPTlNUNjQoMHhmNTQxNWFkODZjNzcxYjJkKSwgQ09OU1Q2NCgweDYyMmEyNDcwMzgzNjBlMTIpLCBDT05TVDY0KDB4NjBlOWNhMDU4Y2FmMjM2NSksCisgICAgQ09OU1Q2NCgweGY5ZjEwNGZiZjMwNmY1MDIpLCBDT05TVDY0KDB4ZGRjNjgzMTIwOTRjNDVjZiksIENPTlNUNjQoMHg3NmU3YzYxNTg0YTUyMTYzKSwgQ09OU1Q2NCgweDcxNTA5ZTNlMWZkMWNlNGYpLAorICAgIENPTlNUNjQoMHhhOWUyYWI3MjM5NzA0OWRiKSwgQ09OU1Q2NCgweDA5YzRlODdkYjA5YzJjNzQpLCBDT05TVDY0KDB4OGRkNTJjOWJjMzNhZjkxNiksIENPTlNUNjQoMHg1NDg4NmU2M2JmNTllNjM3KSwKKyAgICBDT05TVDY0KDB4MWUyNTkzZDllMjU0YjZjNyksIENPTlNUNjQoMHgyNWQ4ZjA1ZGEwODgyODc4KSwgQ09OU1Q2NCgweDgxNjU3MmI4NWM0YjE3MzkpLCBDT05TVDY0KDB4ZmZhOTJiNjQzMmIwODI5YiksCisgICAgQ09OU1Q2NCgweGZlNDY1Y2QwNjg3MjFhMmUpLCBDT05TVDY0KDB4YWM5NjFkMmMxNjlkOGI4MCksIENPTlNUNjQoMHhiY2MwM2VhM2RmMjFmZTFmKSwgQ09OU1Q2NCgweGE3OTExYjI0MTI5ODhhODMpLAorICAgIENPTlNUNjQoMHg1MzNmMzY0ODI0MmQwOTFiKSwgQ09OU1Q2NCgweDQwNDU4YzA2MDNjYWM5NDYpLCBDT05TVDY0KDB4ZDhiMjM1NGMyNmExODc5NCksIENPTlNUNjQoMHg5OGY3Yjk0YTI1NmI0ZWQyKSwKKyAgICBDT05TVDY0KDB4NjU5ZDdjNWJhMzQyZTEzZSksIENPTlNUNjQoMHgxZmNhZTQ2ZGI4OTYyZTcyKSwgQ09OU1Q2NCgweDQyODY2MjczYjc1M2U0MzEpLCBDT05TVDY0KDB4NmU5YTdhNTNhNzQ3ZTAzZCksCisgICAgQ09OU1Q2NCgweDJiYWI0MDBiOGI2MGViMjApLCBDT05TVDY0KDB4NTlkNzQ3ZjQ3YWVhOTBhZCksIENPTlNUNjQoMHhiODViZmY0OWFhMGVhNGYxKSwgQ09OU1Q2NCgweGQyNWE0NGYwNzg2NjFlMjIpLAorICAgIENPTlNUNjQoMHhjZWJjMzk1YzJlYWI4NTkyKSwgQ09OU1Q2NCgweDg3M2Q1ZDI3OWRmZDYwYTApLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHg1YWZiZGUzNTk0YjEyNTZmKSwKKyAgICBDT05TVDY0KDB4ZjJmNjAyZjNmNzAzZjQwMSksIENPTlNUNjQoMHhkNWVkMWNkYmUzMTJmMTBlKSwgQ09OU1Q2NCgweDc1Y2I1ZmQ0NmFmZTk0YTEpLCBDT05TVDY0KDB4NDUzMTNhNTgyYzI3MGIxZCksCisgICAgQ09OU1Q2NCgweDVmOGY2ODZiYmI1Y2U3MzQpLCBDT05TVDY0KDB4MTA1NjIzOGZjOWJjNzU5ZiksIENPTlNUNjQoMHgwN2I3NTgyYjliNzRlZjJjKSwgQ09OU1Q2NCgweGUxOGNiOGJkZDBlNDM0NWMpLAorICAgIENPTlNUNjQoMHhjNjk3YTY5NWM0ZjUzMTUzKSwgQ09OU1Q2NCgweDhmMTZjMmVlNzdhM2Q0NjEpLCBDT05TVDY0KDB4YTMwYWRhY2U2N2I3ZDA2ZCksIENPTlNUNjQoMHhkM2I1MzM0NDIyYTQ4Njk3KSwKKyAgICBDT05TVDY0KDB4NTU2NzE5ZDdlNTliN2U4MiksIENPTlNUNjQoMHhlYjY0YzkwMThlMjNhZGVhKSwgQ09OU1Q2NCgweGExYzkzNGJiZDMyZWZkMWEpLCBDT05TVDY0KDB4MmVkZmY2NTVhNDhkMjk3YiksCisgICAgQ09OU1Q2NCgweGNkOTBhMDlkYzBmMDMwNTApLCBDT05TVDY0KDB4ODhhMTlhYzVlY2Q3M2I0ZCksIENPTlNUNjQoMHgzMGZhNjU4YzQ2ZDk5ZmJjKSwgQ09OU1Q2NCgweDg2ZDIyYTkzYzczZmY4MTUpLAorICAgIENPTlNUNjQoMHgyOTY4YWU3ZTNmZjljNjU3KSwgQ09OU1Q2NCgweGFkNzk2YTk4NGM1ZjEzMzUpLCBDT05TVDY0KDB4M2ExMjE0MzAxODFlMDYwYSksIENPTlNUNjQoMHgyNzFiMWUyODE0MTEwNTBmKSwKKyAgICBDT05TVDY0KDB4MzQ2MWE0NjYzM2Y2YzU1MiksIENPTlNUNjQoMHhiYjc3NjY4ODQ0NTUxMTMzKSwgQ09OU1Q2NCgweDA2NTgyZjlmYzFiNjc3OTkpLCBDT05TVDY0KDB4NDM2OTE1YzdlZDkxN2M4NCksCisgICAgQ09OU1Q2NCgweDc5N2IwMWY3ZjU4ZjdhOGUpLCBDT05TVDY0KDB4NmY3NTBkZTdmZDg1Nzg4OCksIENPTlNUNjQoMHhmNzgyYjRhZGQ4ZWUzNjVhKSwgQ09OU1Q2NCgweGM0NTQ0OGUwNzA2YzFjMjQpLAorICAgIENPTlNUNjQoMHg5ZWFmOTZkNWU0ZGQzOTRiKSwgQ09OU1Q2NCgweDE5OTJjYmYyNzkyMDU5ZWIpLCBDT05TVDY0KDB4ZTg0ODUwYzA2MDc4MTgyOCksIENPTlNUNjQoMHg3MGJmZTk4YTQ1MTM1NmZhKSwKKyAgICBDT05TVDY0KDB4MzkzZThkZjFmNjQ1YjNjOCksIENPTlNUNjQoMHgyNDM3ODdlOWZhNGFiMGNkKSwgQ09OU1Q2NCgweDUxZmNkODNkOTBiNDI0NmMpLCBDT05TVDY0KDB4N2RlMGMwMWQ4MGEwMjA2MCksCisgICAgQ09OU1Q2NCgweDMyMzk4YmY5ZjI0MGIyY2IpLCBDT05TVDY0KDB4NGZkOTRiZTQ3MmUwOTJhYiksIENPTlNUNjQoMHg4OTRlZWQ3MWI2MTVhM2Y4KSwgQ09OU1Q2NCgweDEzN2FiYTRlMjdlN2MwNWQpLAorICAgIENPTlNUNjQoMHhkNmMxODUxYTBkNDk0NGNjKSwgQ09OU1Q2NCgweDkxMzM1MTM3OTVmNzYyYTYpLCBDT05TVDY0KDB4YjA3MDYwODA0MDUwMTAzMCksIENPTlNUNjQoMHgwODJiOWZjOWVhNWViNGMxKSwKKyAgICBDT05TVDY0KDB4YzViYjNmNTQyYWFlODQ5MSksIENPTlNUNjQoMHhlN2Q0OTcyMjExNTI0M2M1KSwgQ09OU1Q2NCgweDQ0ZGU0ZGVjNzZlNTkzYTgpLCBDT05TVDY0KDB4MDU3NGI2NWUyZmVkYzI1YiksCisgICAgQ09OU1Q2NCgweGI0ZWJhMTZhMzU3ZjRhZGUpLCBDT05TVDY0KDB4NWIxNGE5ODFjZTczYmRkYSksIENPTlNUNjQoMHg4MDhhMDUwYzA2ODk4ZjhjKSwgQ09OU1Q2NCgweDAyYzNlZTc1YjQ5OTJkNzcpLAorICAgIENPTlNUNjQoMHg1MDEzYWY4OWNhNzZiY2Q5KSwgQ09OU1Q2NCgweDJkZjM2Zjk0NGFkNjljYjkpLCBDT05TVDY0KDB4YzkwYjYxNzdiNWRmNmFiZSksIENPTlNUNjQoMHhmYWRkOWQzYTFkNWQ0MGMwKSwKKyAgICBDT05TVDY0KDB4N2E1Nzk4MzYxYmQ0Y2Y0YyksIENPTlNUNjQoMHg4MjQ5ZWI3OWIyMTBhMmZiKSwgQ09OU1Q2NCgweGU5YTcyNzc0M2FiYTgwOWQpLCBDT05TVDY0KDB4OTNmMGJmNDIyMTZlNGZkMSksCisgICAgQ09OU1Q2NCgweGQ5NWQ0MmY4N2M2MzFmMjEpLCBDT05TVDY0KDB4NWQ0Yzg2MWUwZmM1Y2E0MyksIENPTlNUNjQoMHhkYTcxZGIzOTkyMzhhYWUzKSwgQ09OU1Q2NCgweGVjZDM5MTJhMTU1NzQyYzYpLAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nNjQgVDdbMjU2XSA9IHsKKyAgICBDT05TVDY0KDB4MDE2YWI5YmI2OGQyZDNiYSksIENPTlNUNjQoMHhiMTY2OWFlNTE5NGRmYzU0KSwgQ09OU1Q2NCgweGNkMTQ2NWUyOTNiYzcxMmYpLCBDT05TVDY0KDB4NTExYjg3MjViOWNkOWM3NCksCisgICAgQ09OU1Q2NCgweGE0NTdhMmY3MDI1MWY1NTMpLCBDT05TVDY0KDB4MDNiZWQ2ZDBiODZiNjhkMyksIENPTlNUNjQoMHgwNGI1ZGVkNmJkNmY2YmQyKSwgQ09OU1Q2NCgweGZlODU1MmIzNjQyOWQ3NGQpLAorICAgIENPTlNUNjQoMHhhZDRhYmFmZDBkNWRmMDUwKSwgQ09OU1Q2NCgweDYzZTAwOWNmMjY4YWU5YWMpLCBDT05TVDY0KDB4ODQ5NjFjMDk4MzBlOGE4ZCksIENPTlNUNjQoMHgxYTRkOTFhNTc5YzZkY2JmKSwKKyAgICBDT05TVDY0KDB4NGQzN2E3M2RhZGRkOTA3MCksIENPTlNUNjQoMHhhMzVjYWFmMTA3NTVmNjUyKSwgQ09OU1Q2NCgweGUxMTdhNDdiYzg1MmIzOWEpLCBDT05TVDY0KDB4Zjk4ZTVhYjU2MTJkZDQ0YyksCisgICAgQ09OU1Q2NCgweGFjMjAwMzQ2NjU4ZjIzZWEpLCBDT05TVDY0KDB4MTE4NGU2YzRhNjczNjJkNSksIENPTlNUNjQoMHhjMjY4Y2M1NWYxNjZhNDk3KSwgQ09OU1Q2NCgweDBkYThjNmRjYjI2MzZlZDEpLAorICAgIENPTlNUNjQoMHg5OWQwODVhYWZmY2M1NTMzKSwgQ09OU1Q2NCgweGFhNDFiMmZiMDg1OWYzNTEpLCBDT05TVDY0KDB4OWMwZmUyYzcyYTcxZWQ1YiksIENPTlNUNjQoMHg1NWFlNTlmMzA0YTJmN2E2KSwKKyAgICBDT05TVDY0KDB4MjBjMWJlZmU4MTVmN2ZkZSksIENPTlNUNjQoMHhlNWEyN2FhZDc1M2RkODQ4KSwgQ09OU1Q2NCgweDdmY2MyOWQ3MzI5YWU1YTgpLCBDT05TVDY0KDB4ZTgwYWJjNzFjNzVlYjY5OSksCisgICAgQ09OU1Q2NCgweDNiZTY5NmUwOTA0YjcwZGIpLCBDT05TVDY0KDB4OWVkYjhkYWNmYWM4NTYzMiksIENPTlNUNjQoMHgyMjE1ZDE5NTUxZTZjNGI3KSwgQ09OU1Q2NCgweGNlYWFiMzMyMmJkNzE5ZmMpLAorICAgIENPTlNUNjQoMHg5MzczNGI3MDQ4YWIzOGUzKSwgQ09OU1Q2NCgweGZkM2I4NDYzZGM0MmJmOWUpLCBDT05TVDY0KDB4ZDA1MmZjNDFlZjdlYWU5MSksIENPTlNUNjQoMHhlNjFjYWM3ZGNkNTZiMDliKSwKKyAgICBDT05TVDY0KDB4OTQ3ODQzNzY0ZGFmM2JlMiksIENPTlNUNjQoMHgwNjYxYjFiZDZkZDZkMGJiKSwgQ09OU1Q2NCgweGRhZjEzMjliNTgxOWMzNDEpLCBDT05TVDY0KDB4MTdlNTU3NzljYmE1YjI2ZSksCisgICAgQ09OU1Q2NCgweDVjYjM0MWY5MGJhZWYyYTUpLCBDT05TVDY0KDB4NGI1NjE2ODBjMDBiNDBjYiksIENPTlNUNjQoMHgwY2MyN2Y2N2RhYjFiZDZiKSwgQ09OU1Q2NCgweGNjN2VkYzU5ZmI2ZWEyOTUpLAorICAgIENPTlNUNjQoMHg0MDlmNjFlMTFmYmVmZWExKSwgQ09OU1Q2NCgweGUzYzNjYjEwMThlYjA4ZjMpLCBDT05TVDY0KDB4MzAyZmUxODE0ZmZlY2ViMSksIENPTlNUNjQoMHgwZTE2MTAwYzBhMDgwNjAyKSwKKyAgICBDT05TVDY0KDB4NWU2NzJlOTJkYjE3NDljYyksIENPTlNUNjQoMHg2NjNmNmVhMmYzMzc1MWM0KSwgQ09OU1Q2NCgweDUzY2ZlODRlNjk3NDI3MWQpLCBDT05TVDY0KDB4NmM5Y2EwNzg0NDUwM2MxNCksCisgICAgQ09OU1Q2NCgweDczMGU1NmIwZTgyYjU4YzMpLCBDT05TVDY0KDB4MzQ5YTNmNTdmMjkxYTU2MyksIENPTlNUNjQoMHgzY2VkOWVlNjk1NGY3M2RhKSwgQ09OU1Q2NCgweDhlMzVkMmQzMzQ2OWU3NWQpLAorICAgIENPTlNUNjQoMHg4MDIzYzJkZjNlNjFlMTVmKSwgQ09OU1Q2NCgweDJlZDdhZWYyOGI1Nzc5ZGMpLCBDT05TVDY0KDB4NmU0OGNmMTM5NGU5ODc3ZCksIENPTlNUNjQoMHg1OTZjMjY5NGRlMTM0YWNkKSwKKyAgICBDT05TVDY0KDB4NjA1ZWRmMWY5ZWUxODE3ZiksIENPTlNUNjQoMHg5YjA0ZWFjMTJmNzVlZTVhKSwgQ09OU1Q2NCgweDE5ZjM0Nzc1YzFhZGI0NmMpLCBDT05TVDY0KDB4ODkzZWRhZDUzMTZkZTQ1YyksCisgICAgQ09OU1Q2NCgweGZmZWZlYjA4MGNmYjA0ZjcpLCBDT05TVDY0KDB4ZjI0NzJkZDRiZTk4NmEyNiksIENPTlNUNjQoMHhjN2I3YWIzODI0ZGIxY2ZmKSwgQ09OU1Q2NCgweGI5MTEzYjU0N2U5MzJhZWQpLAorICAgIENPTlNUNjQoMHhhMjM2MTM0YTZmODcyNWU4KSwgQ09OU1Q2NCgweGY0MjY5YzY5ZDM0ZWJhOWQpLCBDT05TVDY0KDB4MTBlZTVmN2ZjZWExYjE2ZiksIENPTlNUNjQoMHg4ZDhiMDQwMzhjMDI4ZjhlKSwKKyAgICBDT05TVDY0KDB4NGZlM2M4NTY3ZDY0MmIxOSksIENPTlNUNjQoMHg0Nzk0NjllNzFhYmFmZGEwKSwgQ09OU1Q2NCgweGVhZGVkMzFhMTdlNzBkZjApLCBDT05TVDY0KDB4OThiYTNjMTE5NzFlODY4OSksCisgICAgQ09OU1Q2NCgweDJkNjk3ODIyMzMzYzExMGYpLCBDT05TVDY0KDB4MTUzMTM4MTIxYjFjMDkwNyksIENPTlNUNjQoMHg2YWZkMTFjNTI5ODZlY2FmKSwgQ09OU1Q2NCgweGRiOWI4YjIwMzBjYjEwZmIpLAorICAgIENPTlNUNjQoMHgzODU4NDAzMDI4MjAxODA4KSwgQ09OU1Q2NCgweDZiOTdhODdlNDE1NDNmMTUpLCBDT05TVDY0KDB4MjM3ZjY4MmUzOTM0MTcwZCksIENPTlNUNjQoMHgxYzJjMjAxODE0MTAwYzA0KSwKKyAgICBDT05TVDY0KDB4MDcwYjA4MDYwNTA0MDMwMSksIENPTlNUNjQoMHgyMWFiMDc0NWU5OGRhYzY0KSwgQ09OU1Q2NCgweDI3Y2FiNmY4ODQ1YjdjZGYpLCBDT05TVDY0KDB4NWYwZDk3MjliM2M1OWE3NiksCisgICAgQ09OU1Q2NCgweDcyNjRlZjBiODBmOThiNzkpLCBDT05TVDY0KDB4MjlkY2E2ZjQ4ZTUzN2FkZCksIENPTlNUNjQoMHhiM2IyZjU4ZWM5ZjQ0NzNkKSwgQ09OU1Q2NCgweDYyOGFiMDc0NGU1ODNhMTYpLAorICAgIENPTlNUNjQoMHhiZGE0ZTU4MmMzZmM0MTNmKSwgQ09OU1Q2NCgweDg1ZmNhNWIyZWJkYzU5MzcpLCBDT05TVDY0KDB4MWVmODRmNzNjNGE5Yjc2ZCksIENPTlNUNjQoMHhhODk1ZGQ5MGQ4ZTA0ODM4KSwKKyAgICBDT05TVDY0KDB4MDg3N2ExYjE2N2RlZDZiOSksIENPTlNUNjQoMHg0NDJhYmYzN2EyZDE5NTczKSwgQ09OU1Q2NCgweGE1M2QxYjRjNmE4MzI2ZTkpLCBDT05TVDY0KDB4OGJlYWI1YmVlMWQ0NWYzNSksCisgICAgQ09OU1Q2NCgweGI2NmQ5MmUzMWM0OWZmNTUpLCBDT05TVDY0KDB4NGEzY2FmM2JhOGQ5OTM3MSksIENPTlNUNjQoMHg3YzcyZmYwNzhhZjE4ZDdiKSwgQ09OU1Q2NCgweDgzOWQxNDBmODYwYTg5OGMpLAorICAgIENPTlNUNjQoMHg0MzIxYjczMWE3ZDU5NjcyKSwgQ09OU1Q2NCgweDlmYjEzNDE3OTIxYTg1ODgpLCBDT05TVDY0KDB4ZjhlNGUzMGUwOWZmMDdmNiksIENPTlNUNjQoMHhkNjMzNGRmYzgyYTg3ZTJhKSwKKyAgICBDT05TVDY0KDB4YmFhZmVkODRjNmY4NDIzZSksIENPTlNUNjQoMHg4NzI4Y2FkOTNiNjVlMjVlKSwgQ09OU1Q2NCgweGY1NGMyNWQyYmI5YzY5MjcpLCBDT05TVDY0KDB4Y2ZjMDBhODk0MzA1Y2E0NiksCisgICAgQ09OU1Q2NCgweDI0NzQ2MDI4M2MzMDE0MGMpLCBDT05TVDY0KDB4MjZhMDBmNDNlYzg5YWY2NSksIENPTlNUNjQoMHgwNWRmNjc2ZGQ1YmRiODY4KSwgQ09OU1Q2NCgweDNhOGMyZjViZjg5OWEzNjEpLAorICAgIENPTlNUNjQoMHgwOTFkMTgwYTBmMGMwNTAzKSwgQ09OU1Q2NCgweDdkMTg0NmJjZTIyMzVlYzEpLCBDT05TVDY0KDB4Yjg3YjgyZWYxNjQxZjk1NyksIENPTlNUNjQoMHgxODk5ZmVjZWE5N2Y2N2Q2KSwKKyAgICBDT05TVDY0KDB4MzVmMDg2ZWM5YTQzNzZkOSksIENPTlNUNjQoMHg5NTEyZmFjZDI1N2RlODU4KSwgQ09OU1Q2NCgweDMyZmI4ZWVhOWY0Nzc1ZDgpLCBDT05TVDY0KDB4MmZiZDE3NDllMzg1YWE2NiksCisgICAgQ09OU1Q2NCgweDFmOTJmNmM4YWM3YjY0ZDcpLCBDT05TVDY0KDB4YTY4M2NkOWNkMmU4NGUzYSksIENPTlNUNjQoMHg0MjRiMGU4YWNmMDc0NWM4KSwgQ09OU1Q2NCgweGI0YjlmZDg4Y2NmMDQ0M2MpLAorICAgIENPTlNUNjQoMHhkYzkwODMyNjM1Y2YxM2ZhKSwgQ09OU1Q2NCgweGM1NjNjNDUzZjQ2MmE3OTYpLCBDT05TVDY0KDB4NTJhNTUxZjUwMWE2ZjRhNyksIENPTlNUNjQoMHhlZjAxYjQ3N2MyNWFiNTk4KSwKKyAgICBDT05TVDY0KDB4YmUxYTMzNTI3Yjk3MjllYyksIENPTlNUNjQoMHgwZjdjYTliNzYyZGFkNWI4KSwgQ09OU1Q2NCgweDZmMjI3NmE4ZmMzYjU0YzcpLCBDT05TVDY0KDB4NmRmNjE5YzMyYzgyZWZhZSksCisgICAgQ09OU1Q2NCgweDAyZDQ2ZjZiZDBiOWJiNjkpLCBDT05TVDY0KDB4ZWNiZjYyYTc3YTMxZGQ0YiksIENPTlNUNjQoMHg3NmQxMzFkZDNkOTZlMGFiKSwgQ09OU1Q2NCgweDc4YzcyMWQxMzc5ZWU2YTkpLAorICAgIENPTlNUNjQoMHgyOGI2MWY0ZmU2ODFhOTY3KSwgQ09OU1Q2NCgweDM2NGU1MDNjMjIyODFlMGEpLCBDT05TVDY0KDB4YzhjYjAyOGY0NjAxYzk0NyksIENPTlNUNjQoMHhlNGM4YzMxNjFkZWYwYmYyKSwKKyAgICBDT05TVDY0KDB4MmMwM2MxOTk1YmVlYzJiNSksIENPTlNUNjQoMHhlZTZiMGRjY2FhODg2NjIyKSwgQ09OU1Q2NCgweDgxNDk3YjY0NTZiMzMyZTUpLCBDT05TVDY0KDB4YjAwYzIzNWU3MTlmMmZlZSksCisgICAgQ09OU1Q2NCgweDFkNDY5OWEzN2NjMmRmYmUpLCBDT05TVDY0KDB4ZDEzODQ1ZmE4N2FjN2QyYiksIENPTlNUNjQoMHhhMGUyN2MyMWJmM2U5ZTgxKSwgQ09OU1Q2NCgweDdlYTY5MDZjNWE0ODM2MTIpLAorICAgIENPTlNUNjQoMHhhZWY0NmMyZGI1MzY5ODgzKSwgQ09OU1Q2NCgweDQxZjVkODVhNzc2YzJkMWIpLCBDT05TVDY0KDB4MmE2MjcwMjQzNjM4MTIwZSksIENPTlNUNjQoMHhlOTYwMDVjYWFmOGM2NTIzKSwKKyAgICBDT05TVDY0KDB4ZjFmOWZiMDQwNmYzMDJmNSksIENPTlNUNjQoMHhjNmRkMTI4MzRjMDljZjQ1KSwgQ09OU1Q2NCgweGU3NzYxNWM2YTU4NDYzMjEpLCBDT05TVDY0KDB4NTA3MTNlOWVkMTFmNGZjZSksCisgICAgQ09OU1Q2NCgweGUyYTk3MmFiNzAzOWRiNDkpLCBDT05TVDY0KDB4YzQwOTdkZTg5Y2IwNzQyYyksIENPTlNUNjQoMHhkNThkOWIyYzNhYzMxNmY5KSwgQ09OU1Q2NCgweDg4NTQ2MzZlNTliZjM3ZTYpLAorICAgIENPTlNUNjQoMHgyNTFlZDk5MzU0ZTJjN2I2KSwgQ09OU1Q2NCgweGQ4MjU1ZGYwODhhMDc4MjgpLCBDT05TVDY0KDB4NjU4MWI4NzI0YjVjMzkxNyksIENPTlNUNjQoMHhhOWZmNjQyYmIwMzI5YjgyKSwKKyAgICBDT05TVDY0KDB4NDZmZWQwNWM3MjY4MmUxYSksIENPTlNUNjQoMHg5NmFjMmMxZDlkMTY4MDhiKSwgQ09OU1Q2NCgweGMwYmNhMzNlMjFkZjFmZmUpLCBDT05TVDY0KDB4OTFhNzI0MWI5ODEyODM4YSksCisgICAgQ09OU1Q2NCgweDNmNTM0ODM2MmQyNDFiMDkpLCBDT05TVDY0KDB4NDU0MDA2OGNjYTAzNDZjOSksIENPTlNUNjQoMHhiMmQ4NGMzNWExMjY5NDg3KSwgQ09OU1Q2NCgweGY3OTg0YWI5NmIyNWQyNGUpLAorICAgIENPTlNUNjQoMHg5ZDY1NWI3YzQyYTMzZWUxKSwgQ09OU1Q2NCgweGNhMWY2ZGU0OTZiODcyMmUpLCBDT05TVDY0KDB4ODY0MjczNjI1M2I3MzFlNCksIENPTlNUNjQoMHg5YTZlNTM3YTQ3YTczZGUwKSwKKyAgICBDT05TVDY0KDB4YWIyYjBiNDA2MDhiMjBlYiksIENPTlNUNjQoMHhkNzU5ZjQ0N2VhN2FhZDkwKSwgQ09OU1Q2NCgweDViYjg0OWZmMGVhYWYxYTQpLCBDT05TVDY0KDB4NWFkMmYwNDQ2Njc4MjIxZSksCisgICAgQ09OU1Q2NCgweGJjY2U1YzM5YWIyZTkyODUpLCBDT05TVDY0KDB4M2Q4NzI3NWRmZDlkYTA2MCksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweGZiNWEzNWRlYjE5NDZmMjUpLAorICAgIENPTlNUNjQoMHhmNmYyZjMwMjAzZjcwMWY0KSwgQ09OU1Q2NCgweGVkZDVkYjFjMTJlMzBlZjEpLCBDT05TVDY0KDB4Y2I3NWQ0NWZmZTZhYTE5NCksIENPTlNUNjQoMHgzMTQ1NTgzYTI3MmMxZDBiKSwKKyAgICBDT05TVDY0KDB4OGY1ZjZiNjg1Y2JiMzRlNyksIENPTlNUNjQoMHg1NjEwOGYyM2JjYzk5Zjc1KSwgQ09OU1Q2NCgweGI3MDcyYjU4NzQ5YjJjZWYpLCBDT05TVDY0KDB4OGNlMWJkYjhlNGQwNWMzNCksCisgICAgQ09OU1Q2NCgweDk3YzY5NWE2ZjVjNDUzMzEpLCBDT05TVDY0KDB4MTY4ZmVlYzJhMzc3NjFkNCksIENPTlNUNjQoMHgwYWEzY2VkYWI3Njc2ZGQwKSwgQ09OU1Q2NCgweGI1ZDM0NDMzYTQyMjk3ODYpLAorICAgIENPTlNUNjQoMHg2NzU1ZDcxOTliZTU4MjdlKSwgQ09OU1Q2NCgweDY0ZWIwMWM5MjM4ZWVhYWQpLCBDT05TVDY0KDB4YzlhMWJiMzQyZWQzMWFmZCksIENPTlNUNjQoMHhkZjJlNTVmNjhkYTQ3YjI5KSwKKyAgICBDT05TVDY0KDB4OTBjZDlkYTBmMGMwNTAzMCksIENPTlNUNjQoMHhhMTg4YzU5YWQ3ZWM0ZDNiKSwgQ09OU1Q2NCgweGZhMzA4YzY1ZDk0NmJjOWYpLCBDT05TVDY0KDB4ZDI4NjkzMmEzZmM3MTVmOCksCisgICAgQ09OU1Q2NCgweDY4Mjk3ZWFlZjkzZjU3YzYpLCBDT05TVDY0KDB4NzlhZDk4NmE1ZjRjMzUxMyksIENPTlNUNjQoMHgxMjNhMzAxNDFlMTgwYTA2KSwgQ09OU1Q2NCgweDFiMjcyODFlMTExNDBmMDUpLAorICAgIENPTlNUNjQoMHg2MTM0NjZhNGY2MzM1MmM1KSwgQ09OU1Q2NCgweDc3YmI4ODY2NTU0NDMzMTEpLCBDT05TVDY0KDB4NTgwNjlmMmZiNmMxOTk3NyksIENPTlNUNjQoMHg2OTQzYzcxNTkxZWQ4NDdjKSwKKyAgICBDT05TVDY0KDB4N2I3OWY3MDE4ZmY1OGU3YSksIENPTlNUNjQoMHg3NTZmZTcwZDg1ZmQ4ODc4KSwgQ09OU1Q2NCgweDgyZjdhZGI0ZWVkODVhMzYpLCBDT05TVDY0KDB4NTRjNGUwNDg2YzcwMjQxYyksCisgICAgQ09OU1Q2NCgweGFmOWVkNTk2ZGRlNDRiMzkpLCBDT05TVDY0KDB4OTIxOWYyY2IyMDc5ZWI1OSksIENPTlNUNjQoMHg0OGU4YzA1MDc4NjAyODE4KSwgQ09OU1Q2NCgweGJmNzA4YWU5MTM0NWZhNTYpLAorICAgIENPTlNUNjQoMHgzZTM5ZjE4ZDQ1ZjZjOGIzKSwgQ09OU1Q2NCgweDM3MjRlOTg3NGFmYWNkYjApLCBDT05TVDY0KDB4ZmM1MTNkZDhiNDkwNmMyNCksIENPTlNUNjQoMHhlMDdkMWRjMGEwODA2MDIwKSwKKyAgICBDT05TVDY0KDB4MzkzMmY5OGI0MGYyY2JiMiksIENPTlNUNjQoMHhkOTRmZTQ0YmUwNzJhYjkyKSwgQ09OU1Q2NCgweDRlODk3MWVkMTViNmY4YTMpLCBDT05TVDY0KDB4N2ExMzRlYmFlNzI3NWRjMCksCisgICAgQ09OU1Q2NCgweGMxZDYxYTg1NDkwZGNjNDQpLCBDT05TVDY0KDB4MzM5MTM3NTFmNzk1YTY2MiksIENPTlNUNjQoMHg3MGIwODA2MDUwNDAzMDEwKSwgQ09OU1Q2NCgweDJiMDhjOTlmNWVlYWMxYjQpLAorICAgIENPTlNUNjQoMHhiYmM1NTQzZmFlMmE5MTg0KSwgQ09OU1Q2NCgweGQ0ZTcyMjk3NTIxMWM1NDMpLCBDT05TVDY0KDB4ZGU0NGVjNGRlNTc2YTg5MyksIENPTlNUNjQoMHg3NDA1NWViNmVkMmY1YmMyKSwKKyAgICBDT05TVDY0KDB4ZWJiNDZhYTE3ZjM1ZGU0YSksIENPTlNUNjQoMHgxNDViODFhOTczY2VkYWJkKSwgQ09OU1Q2NCgweDhhODAwYzA1ODkwNjhjOGYpLCBDT05TVDY0KDB4YzMwMjc1ZWU5OWI0NzcyZCksCisgICAgQ09OU1Q2NCgweDEzNTA4OWFmNzZjYWQ5YmMpLCBDT05TVDY0KDB4ZjMyZDk0NmZkNjRhYjk5YyksIENPTlNUNjQoMHgwYmM5Nzc2MWRmYjViZTZhKSwgQ09OU1Q2NCgweGRkZmEzYTlkNWQxZGMwNDApLAorICAgIENPTlNUNjQoMHg1NzdhMzY5OGQ0MWI0Y2NmKSwgQ09OU1Q2NCgweDQ5ODI3OWViMTBiMmZiYTIpLCBDT05TVDY0KDB4YTdlOTc0MjdiYTNhOWQ4MCksIENPTlNUNjQoMHhmMDkzNDJiZjZlMjFkMTRmKSwKKyAgICBDT05TVDY0KDB4NWRkOWY4NDI2MzdjMjExZiksIENPTlNUNjQoMHg0YzVkMWU4NmM1MGY0M2NhKSwgQ09OU1Q2NCgweDcxZGEzOWRiMzg5MmUzYWEpLCBDT05TVDY0KDB4ZDNlYzJhOTE1NzE1YzY0MiksCit9OworCitzdGF0aWMgY29uc3QgdWxvbmc2NCBjW1IgKyAxXSA9IHsKKyAgICBDT05TVDY0KDB4YmE1NDJmNzQ1M2QzZDI0ZCksCisgICAgQ09OU1Q2NCgweDUwYWM4ZGJmNzA1MjlhNGMpLAorICAgIENPTlNUNjQoMHhlYWQ1OTdkMTMzNTE1YmE2KSwKKyAgICBDT05TVDY0KDB4ZGU0OGE4OTlkYjMyYjdmYyksCisgICAgQ09OU1Q2NCgweGUzOWU5MTliZTJiYjQxNmUpLAorICAgIENPTlNUNjQoMHhhNWNiNmI5NWExZjNiMTAyKSwKKyAgICBDT05TVDY0KDB4Y2NjNDFkMTRjMzYzZGE1ZCksCisgICAgQ09OU1Q2NCgweDVmZGM3ZGNkN2Y1YTZjNWMpLAorICAgIENPTlNUNjQoMHhmNzI2ZmZlZGU4OWQ2ZjhlKSwKK307CisKKyAvKioKKyAgICBJbml0aWFsaXplIHRoZSBLaGF6YWQgYmxvY2sgY2lwaGVyCisgICAgQHBhcmFtIGtleSBUaGUgc3ltbWV0cmljIGtleSB5b3Ugd2lzaCB0byBwYXNzCisgICAgQHBhcmFtIGtleWxlbiBUaGUga2V5IGxlbmd0aCBpbiBieXRlcworICAgIEBwYXJhbSBudW1fcm91bmRzIFRoZSBudW1iZXIgb2Ygcm91bmRzIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICAgQHBhcmFtIHNrZXkgVGhlIGtleSBpbiBhcyBzY2hlZHVsZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IGtoYXphZF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgaW50ICAgICAgICAgICAgICAgcjsKKyAgIGNvbnN0IHVsb25nNjQgICAgKlM7CisgICB1bG9uZzY0ICAgICAgICAgICBLMiwgSzE7CisKKyAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKyAgIGlmIChrZXlsZW4gIT0gMTYpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICB9CisgICBpZiAobnVtX3JvdW5kcyAhPSA4ICYmIG51bV9yb3VuZHMgIT0gMCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgfQorCisgICAvKiB1c2UgN3RoIHRhYmxlICovCisgICBTID0gVDc7CisKKyAgICAvKgorICAgICogbWFwIHVuc2lnbmVkIGNoYXIgYXJyYXkgY2lwaGVyIGtleSB0byBpbml0aWFsIGtleSBzdGF0ZSAobXUpOgorICAgICovCisgICBLMiA9CisgICAgICAoKHVsb25nNjQpa2V5WyAwXSA8PCA1NikgXgorICAgICAgKCh1bG9uZzY0KWtleVsgMV0gPDwgNDgpIF4KKyAgICAgICgodWxvbmc2NClrZXlbIDJdIDw8IDQwKSBeCisgICAgICAoKHVsb25nNjQpa2V5WyAzXSA8PCAzMikgXgorICAgICAgKCh1bG9uZzY0KWtleVsgNF0gPDwgMjQpIF4KKyAgICAgICgodWxvbmc2NClrZXlbIDVdIDw8IDE2KSBeCisgICAgICAoKHVsb25nNjQpa2V5WyA2XSA8PCAgOCkgXgorICAgICAgKCh1bG9uZzY0KWtleVsgN10gICAgICApOworICAgSzEgPQorICAgICAgKCh1bG9uZzY0KWtleVsgOF0gPDwgNTYpIF4KKyAgICAgICgodWxvbmc2NClrZXlbIDldIDw8IDQ4KSBeCisgICAgICAoKHVsb25nNjQpa2V5WzEwXSA8PCA0MCkgXgorICAgICAgKCh1bG9uZzY0KWtleVsxMV0gPDwgMzIpIF4KKyAgICAgICgodWxvbmc2NClrZXlbMTJdIDw8IDI0KSBeCisgICAgICAoKHVsb25nNjQpa2V5WzEzXSA8PCAxNikgXgorICAgICAgKCh1bG9uZzY0KWtleVsxNF0gPDwgIDgpIF4KKyAgICAgICgodWxvbmc2NClrZXlbMTVdICAgICAgKTsKKworICAgLyoKKyAgICAqIGNvbXB1dGUgdGhlIHJvdW5kIGtleXM6CisgICAgKi8KKyAgIGZvciAociA9IDA7IHIgPD0gUjsgcisrKSB7CisgICAgICAvKgorICAgICAgICogS1tyXSA9IHJobyhjW3JdLCBLMSkgXiBLMjsKKyAgICAgICAqLworICAgICAgc2tleS0+a2hhemFkLnJvdW5kS2V5RW5jW3JdID0KKyAgICAgICAgIFQwWyhpbnQpKEsxID4+IDU2KSAgICAgICBdIF4KKyAgICAgICAgIFQxWyhpbnQpKEsxID4+IDQ4KSAmIDB4ZmZdIF4KKyAgICAgICAgIFQyWyhpbnQpKEsxID4+IDQwKSAmIDB4ZmZdIF4KKyAgICAgICAgIFQzWyhpbnQpKEsxID4+IDMyKSAmIDB4ZmZdIF4KKyAgICAgICAgIFQ0WyhpbnQpKEsxID4+IDI0KSAmIDB4ZmZdIF4KKyAgICAgICAgIFQ1WyhpbnQpKEsxID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgIFQ2WyhpbnQpKEsxID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgIFQ3WyhpbnQpKEsxICAgICAgKSAmIDB4ZmZdIF4KKyAgICAgICAgIGNbcl0gXiBLMjsKKyAgICAgIEsyID0gSzE7IEsxID0gc2tleS0+a2hhemFkLnJvdW5kS2V5RW5jW3JdOworICAgfQorICAgLyoKKyAgICAqIGNvbXB1dGUgdGhlIGludmVyc2Uga2V5IHNjaGVkdWxlOgorICAgICogSydeMCA9IEteUiwgSydeUiA9IEteMCwgSydeciA9IHRoZXRhKEtee1Itcn0pCisgICAgKi8KKyAgIHNrZXktPmtoYXphZC5yb3VuZEtleURlY1swXSA9IHNrZXktPmtoYXphZC5yb3VuZEtleUVuY1tSXTsKKyAgIGZvciAociA9IDE7IHIgPCBSOyByKyspIHsKKyAgICAgIEsxID0gc2tleS0+a2hhemFkLnJvdW5kS2V5RW5jW1IgLSByXTsKKyAgICAgIHNrZXktPmtoYXphZC5yb3VuZEtleURlY1tyXSA9CisgICAgICAgICBUMFsoaW50KVNbKGludCkoSzEgPj4gNTYpICAgICAgIF0gJiAweGZmXSBeCisgICAgICAgICBUMVsoaW50KVNbKGludCkoSzEgPj4gNDgpICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICBUMlsoaW50KVNbKGludCkoSzEgPj4gNDApICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICBUM1soaW50KVNbKGludCkoSzEgPj4gMzIpICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICBUNFsoaW50KVNbKGludCkoSzEgPj4gMjQpICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICBUNVsoaW50KVNbKGludCkoSzEgPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICBUNlsoaW50KVNbKGludCkoSzEgPj4gIDgpICYgMHhmZl0gJiAweGZmXSBeCisgICAgICAgICBUN1soaW50KVNbKGludCkoSzEgICAgICApICYgMHhmZl0gJiAweGZmXTsKKyAgIH0KKyAgIHNrZXktPmtoYXphZC5yb3VuZEtleURlY1tSXSA9IHNrZXktPmtoYXphZC5yb3VuZEtleUVuY1swXTsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCitzdGF0aWMgdm9pZCBraGF6YWRfY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcGxhaW50ZXh0LCB1bnNpZ25lZCBjaGFyICpjaXBoZXJ0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVsb25nNjQgICAgICAgKnJvdW5kS2V5KSB7CisgICBpbnQgICAgIHI7CisgICB1bG9uZzY0IHN0YXRlOworICAgIC8qCisgICAgKiBtYXAgcGxhaW50ZXh0IGJsb2NrIHRvIGNpcGhlciBzdGF0ZSAobXUpCisgICAgKiBhbmQgYWRkIGluaXRpYWwgcm91bmQga2V5IChzaWdtYVtLXjBdKToKKyAgICAqLworICAgc3RhdGUgPQorICAgICAgKCh1bG9uZzY0KXBsYWludGV4dFswXSA8PCA1NikgXgorICAgICAgKCh1bG9uZzY0KXBsYWludGV4dFsxXSA8PCA0OCkgXgorICAgICAgKCh1bG9uZzY0KXBsYWludGV4dFsyXSA8PCA0MCkgXgorICAgICAgKCh1bG9uZzY0KXBsYWludGV4dFszXSA8PCAzMikgXgorICAgICAgKCh1bG9uZzY0KXBsYWludGV4dFs0XSA8PCAyNCkgXgorICAgICAgKCh1bG9uZzY0KXBsYWludGV4dFs1XSA8PCAxNikgXgorICAgICAgKCh1bG9uZzY0KXBsYWludGV4dFs2XSA8PCAgOCkgXgorICAgICAgKCh1bG9uZzY0KXBsYWludGV4dFs3XSAgICAgICkgXgorICAgICAgcm91bmRLZXlbMF07CisKKyAgICAvKgorICAgICogUiAtIDEgZnVsbCByb3VuZHM6CisgICAgKi8KKyAgICBmb3IgKHIgPSAxOyByIDwgUjsgcisrKSB7CisgICAgICBzdGF0ZSA9CisgICAgICAgICBUMFsoaW50KShzdGF0ZSA+PiA1NikgICAgICAgXSBeCisgICAgICAgICBUMVsoaW50KShzdGF0ZSA+PiA0OCkgJiAweGZmXSBeCisgICAgICAgICBUMlsoaW50KShzdGF0ZSA+PiA0MCkgJiAweGZmXSBeCisgICAgICAgICBUM1soaW50KShzdGF0ZSA+PiAzMikgJiAweGZmXSBeCisgICAgICAgICBUNFsoaW50KShzdGF0ZSA+PiAyNCkgJiAweGZmXSBeCisgICAgICAgICBUNVsoaW50KShzdGF0ZSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICBUNlsoaW50KShzdGF0ZSA+PiAgOCkgJiAweGZmXSBeCisgICAgICAgICBUN1soaW50KShzdGF0ZSAgICAgICkgJiAweGZmXSBeCisgICAgICAgICByb3VuZEtleVtyXTsKKyAgICB9CisKKyAgICAvKgorICAgICogbGFzdCByb3VuZDoKKyAgICAqLworICAgc3RhdGUgPQorICAgICAgKFQwWyhpbnQpKHN0YXRlID4+IDU2KSAgICAgICBdICYgQ09OU1Q2NCgweGZmMDAwMDAwMDAwMDAwMDApKSBeCisgICAgICAoVDFbKGludCkoc3RhdGUgPj4gNDgpICYgMHhmZl0gJiBDT05TVDY0KDB4MDBmZjAwMDAwMDAwMDAwMCkpIF4KKyAgICAgIChUMlsoaW50KShzdGF0ZSA+PiA0MCkgJiAweGZmXSAmIENPTlNUNjQoMHgwMDAwZmYwMDAwMDAwMDAwKSkgXgorICAgICAgKFQzWyhpbnQpKHN0YXRlID4+IDMyKSAmIDB4ZmZdICYgQ09OU1Q2NCgweDAwMDAwMGZmMDAwMDAwMDApKSBeCisgICAgICAoVDRbKGludCkoc3RhdGUgPj4gMjQpICYgMHhmZl0gJiBDT05TVDY0KDB4MDAwMDAwMDBmZjAwMDAwMCkpIF4KKyAgICAgIChUNVsoaW50KShzdGF0ZSA+PiAxNikgJiAweGZmXSAmIENPTlNUNjQoMHgwMDAwMDAwMDAwZmYwMDAwKSkgXgorICAgICAgKFQ2WyhpbnQpKHN0YXRlID4+ICA4KSAmIDB4ZmZdICYgQ09OU1Q2NCgweDAwMDAwMDAwMDAwMGZmMDApKSBeCisgICAgICAoVDdbKGludCkoc3RhdGUgICAgICApICYgMHhmZl0gJiBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDBmZikpIF4KKyAgICAgIHJvdW5kS2V5W1JdOworCisgICAvKgorICAgICogbWFwIGNpcGhlciBzdGF0ZSB0byBjaXBoZXJ0ZXh0IGJsb2NrIChtdV57LTF9KToKKyAgICAqLworICAgY2lwaGVydGV4dFswXSA9ICh1bnNpZ25lZCBjaGFyKShzdGF0ZSA+PiA1Nik7CisgICBjaXBoZXJ0ZXh0WzFdID0gKHVuc2lnbmVkIGNoYXIpKHN0YXRlID4+IDQ4KTsKKyAgIGNpcGhlcnRleHRbMl0gPSAodW5zaWduZWQgY2hhcikoc3RhdGUgPj4gNDApOworICAgY2lwaGVydGV4dFszXSA9ICh1bnNpZ25lZCBjaGFyKShzdGF0ZSA+PiAzMik7CisgICBjaXBoZXJ0ZXh0WzRdID0gKHVuc2lnbmVkIGNoYXIpKHN0YXRlID4+IDI0KTsKKyAgIGNpcGhlcnRleHRbNV0gPSAodW5zaWduZWQgY2hhcikoc3RhdGUgPj4gMTYpOworICAgY2lwaGVydGV4dFs2XSA9ICh1bnNpZ25lZCBjaGFyKShzdGF0ZSA+PiAgOCk7CisgICBjaXBoZXJ0ZXh0WzddID0gKHVuc2lnbmVkIGNoYXIpKHN0YXRlICAgICAgKTsKK30KKworLyoqCisgIEVuY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIEtoYXphZAorICBAcGFyYW0gcHQgVGhlIGlucHV0IHBsYWludGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGtoYXphZF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisgICBraGF6YWRfY3J5cHQocHQsIGN0LCBza2V5LT5raGF6YWQucm91bmRLZXlFbmMpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgRGVjcnlwdHMgYSBibG9jayBvZiB0ZXh0IHdpdGggS2hhemFkCisgIEBwYXJhbSBjdCBUaGUgaW5wdXQgY2lwaGVydGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIHB0IFRoZSBvdXRwdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQorICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZCAKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGtoYXphZF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisgICBraGF6YWRfY3J5cHQoY3QsIHB0LCBza2V5LT5raGF6YWQucm91bmRLZXlEZWMpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgUGVyZm9ybXMgYSBzZWxmLXRlc3Qgb2YgdGhlIEtoYXphZCBibG9jayBjaXBoZXIKKyAgQHJldHVybiBDUllQVF9PSyBpZiBmdW5jdGlvbmFsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0IGhhcyBiZWVuIGRpc2FibGVkCisqLworaW50IGtoYXphZF90ZXN0KHZvaWQpCit7CisjaWZuZGVmIExUQ19URVNUCisgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3QgeworICAgICB1bnNpZ25lZCBjaGFyIHB0WzhdLCBjdFs4XSwga2V5WzE2XTsKKyAgfSB0ZXN0c1tdID0geworeworICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4NDksIDB4QTQsIDB4Q0UsIDB4MzIsIDB4QUMsIDB4MTksIDB4MEUsIDB4M0YgfSwKKyAgIHsgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4NjQsIDB4NUQsIDB4NzcsIDB4M0UsIDB4NDAsIDB4QUIsIDB4REQsIDB4NTMgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfQorfSwgeworICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICB7IDB4OUUsIDB4MzksIDB4OTgsIDB4NjQsIDB4RjcsIDB4OEUsIDB4Q0EsIDB4MDIgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfSwgeworICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0sCisgICB7IDB4QTksIDB4REYsIDB4M0QsIDB4MkMsIDB4NjQsIDB4RDMsIDB4RUEsIDB4MjggfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfQorfQorfTsKKyAgIGludCB4LCB5OworICAgdW5zaWduZWQgY2hhciBidWZbMl1bOF07CisgICBzeW1tZXRyaWNfa2V5IHNrZXk7CisKKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSkpOyB4KyspIHsKKyAgICAgICBraGF6YWRfc2V0dXAodGVzdHNbeF0ua2V5LCAxNiwgMCwgJnNrZXkpOworICAgICAgIGtoYXphZF9lY2JfZW5jcnlwdCh0ZXN0c1t4XS5wdCwgYnVmWzBdLCAmc2tleSk7CisgICAgICAga2hhemFkX2VjYl9kZWNyeXB0KGJ1ZlswXSwgYnVmWzFdLCAmc2tleSk7CisgICAgICAgaWYgKFhNRU1DTVAoYnVmWzBdLCB0ZXN0c1t4XS5jdCwgOCkgfHwgWE1FTUNNUChidWZbMV0sIHRlc3RzW3hdLnB0LCA4KSkgeworICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgfQorCisgICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykga2hhemFkX2VjYl9lbmNyeXB0KGJ1ZlswXSwgYnVmWzBdLCAmc2tleSk7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykga2hhemFkX2VjYl9kZWNyeXB0KGJ1ZlswXSwgYnVmWzBdLCAmc2tleSk7CisgICAgICAgaWYgKFhNRU1DTVAoYnVmWzBdLCB0ZXN0c1t4XS5jdCwgOCkpIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgIH0KKworICAgfQorICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKy8qKiBUZXJtaW5hdGUgdGhlIGNvbnRleHQgCisgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorKi8KK3ZvaWQga2hhemFkX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSkKK3sKK30KKworLyoqCisgIEdldHMgc3VpdGFibGUga2V5IHNpemUKKyAgQHBhcmFtIGtleXNpemUgW2luL291dF0gVGhlIGxlbmd0aCBvZiB0aGUgcmVjb21tZW5kZWQga2V5IChpbiBieXRlcykuICBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgdGhlIHN1aXRhYmxlIHNpemUgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICBAcmV0dXJuIENSWVBUX09LIGlmIHRoZSBpbnB1dCBrZXkgc2l6ZSBpcyBhY2NlcHRhYmxlLgorKi8KK2ludCBraGF6YWRfa2V5c2l6ZShpbnQgKmtleXNpemUpCit7CisgICBMVENfQVJHQ0hLKGtleXNpemUgIT0gTlVMTCk7CisgICBpZiAoKmtleXNpemUgPj0gMTYpIHsKKyAgICAgICprZXlzaXplID0gMTY7CisgICAgICByZXR1cm4gQ1JZUFRfT0s7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0KK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2toYXphZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL2tzZWVkLmMgYi9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9rc2VlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyODFhYzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9rc2VlZC5jCkBAIC0wLDAgKzEsMzc2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKioKKyAgQGZpbGUga3NlZWQuYworICBzZWVkIGltcGxlbWVudGF0aW9uIG9mIFNFRUQgZGVyaXZlZCBmcm9tIFJGQzQyNjkKKyAgVG9tIFN0IERlbmlzCisqLworCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIEtTRUVECisKK2NvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3Iga3NlZWRfZGVzYyA9IHsKKyAgICJzZWVkIiwKKyAgIDIwLAorICAgMTYsIDE2LCAxNiwgMTYsCisgICAma3NlZWRfc2V0dXAsCisgICAma3NlZWRfZWNiX2VuY3J5cHQsCisgICAma3NlZWRfZWNiX2RlY3J5cHQsCisgICAma3NlZWRfdGVzdCwKKyAgICZrc2VlZF9kb25lLAorICAgJmtzZWVkX2tleXNpemUsCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTUzBbMjU2XSA9IHsKKzB4Mjk4OUExQThVTCwweDA1ODU4MTg0VUwsMHgxNkM2RDJENFVMLDB4MTNDM0QzRDBVTCwweDE0NDQ1MDU0VUwsMHgxRDBEMTExQ1VMLDB4MkM4Q0EwQUNVTCwweDI1MDUyMTI0VUwsCisweDFENEQ1MTVDVUwsMHgwMzQzNDM0MFVMLDB4MTgwODEwMThVTCwweDFFMEUxMjFDVUwsMHgxMTQxNTE1MFVMLDB4M0NDQ0YwRkNVTCwweDBBQ0FDMkM4VUwsMHgyMzQzNjM2MFVMLAorMHgyODA4MjAyOFVMLDB4MDQ0NDQwNDRVTCwweDIwMDAyMDIwVUwsMHgxRDhEOTE5Q1VMLDB4MjBDMEUwRTBVTCwweDIyQzJFMkUwVUwsMHgwOEM4QzBDOFVMLDB4MTcwNzEzMTRVTCwKKzB4MjU4NUExQTRVTCwweDBGOEY4MzhDVUwsMHgwMzAzMDMwMFVMLDB4M0I0QjczNzhVTCwweDNCOEJCM0I4VUwsMHgxMzAzMTMxMFVMLDB4MTJDMkQyRDBVTCwweDJFQ0VFMkVDVUwsCisweDMwNDA3MDcwVUwsMHgwQzhDODA4Q1VMLDB4M0YwRjMzM0NVTCwweDI4ODhBMEE4VUwsMHgzMjAyMzIzMFVMLDB4MURDREQxRENVTCwweDM2QzZGMkY0VUwsMHgzNDQ0NzA3NFVMLAorMHgyQ0NDRTBFQ1VMLDB4MTU4NTkxOTRVTCwweDBCMEIwMzA4VUwsMHgxNzQ3NTM1NFVMLDB4MUM0QzUwNUNVTCwweDFCNEI1MzU4VUwsMHgzRDhEQjFCQ1VMLDB4MDEwMTAxMDBVTCwKKzB4MjQwNDIwMjRVTCwweDFDMEMxMDFDVUwsMHgzMzQzNzM3MFVMLDB4MTg4ODkwOThVTCwweDEwMDAxMDEwVUwsMHgwQ0NDQzBDQ1VMLDB4MzJDMkYyRjBVTCwweDE5QzlEMUQ4VUwsCisweDJDMEMyMDJDVUwsMHgyN0M3RTNFNFVMLDB4MzI0MjcyNzBVTCwweDAzODM4MzgwVUwsMHgxQjhCOTM5OFVMLDB4MTFDMUQxRDBVTCwweDA2ODY4Mjg0VUwsMHgwOUM5QzFDOFVMLAorMHgyMDQwNjA2MFVMLDB4MTA0MDUwNTBVTCwweDIzODNBM0EwVUwsMHgyQkNCRTNFOFVMLDB4MEQwRDAxMENVTCwweDM2ODZCMkI0VUwsMHgxRThFOTI5Q1VMLDB4MEY0RjQzNENVTCwKKzB4Mzc4N0IzQjRVTCwweDFBNEE1MjU4VUwsMHgwNkM2QzJDNFVMLDB4Mzg0ODcwNzhVTCwweDI2ODZBMkE0VUwsMHgxMjAyMTIxMFVMLDB4MkY4RkEzQUNVTCwweDE1QzVEMUQ0VUwsCisweDIxNDE2MTYwVUwsMHgwM0MzQzNDMFVMLDB4MzQ4NEIwQjRVTCwweDAxNDE0MTQwVUwsMHgxMjQyNTI1MFVMLDB4M0Q0RDcxN0NVTCwweDBEOEQ4MThDVUwsMHgwODA4MDAwOFVMLAorMHgxRjBGMTMxQ1VMLDB4MTk4OTkxOThVTCwweDAwMDAwMDAwVUwsMHgxOTA5MTExOFVMLDB4MDQwNDAwMDRVTCwweDEzNDM1MzUwVUwsMHgzN0M3RjNGNFVMLDB4MjFDMUUxRTBVTCwKKzB4M0RDREYxRkNVTCwweDM2NDY3Mjc0VUwsMHgyRjBGMjMyQ1VMLDB4MjcwNzIzMjRVTCwweDMwODBCMEIwVUwsMHgwQjhCODM4OFVMLDB4MEUwRTAyMENVTCwweDJCOEJBM0E4VUwsCisweDIyODJBMkEwVUwsMHgyRTRFNjI2Q1VMLDB4MTM4MzkzOTBVTCwweDBENEQ0MTRDVUwsMHgyOTQ5NjE2OFVMLDB4M0M0QzcwN0NVTCwweDA5MDkwMTA4VUwsMHgwQTBBMDIwOFVMLAorMHgzRjhGQjNCQ1VMLDB4MkZDRkUzRUNVTCwweDMzQzNGM0YwVUwsMHgwNUM1QzFDNFVMLDB4MDc4NzgzODRVTCwweDE0MDQxMDE0VUwsMHgzRUNFRjJGQ1VMLDB4MjQ0NDYwNjRVTCwKKzB4MUVDRUQyRENVTCwweDJFMEUyMjJDVUwsMHgwQjRCNDM0OFVMLDB4MUEwQTEyMThVTCwweDA2MDYwMjA0VUwsMHgyMTAxMjEyMFVMLDB4MkI0QjYzNjhVTCwweDI2NDY2MjY0VUwsCisweDAyMDIwMjAwVUwsMHgzNUM1RjFGNFVMLDB4MTI4MjkyOTBVTCwweDBBOEE4Mjg4VUwsMHgwQzBDMDAwQ1VMLDB4MzM4M0IzQjBVTCwweDNFNEU3MjdDVUwsMHgxMEMwRDBEMFVMLAorMHgzQTRBNzI3OFVMLDB4MDc0NzQzNDRVTCwweDE2ODY5Mjk0VUwsMHgyNUM1RTFFNFVMLDB4MjYwNjIyMjRVTCwweDAwODA4MDgwVUwsMHgyRDhEQTFBQ1VMLDB4MUZDRkQzRENVTCwKKzB4MjE4MUExQTBVTCwweDMwMDAzMDMwVUwsMHgzNzA3MzMzNFVMLDB4MkU4RUEyQUNVTCwweDM2MDYzMjM0VUwsMHgxNTA1MTExNFVMLDB4MjIwMjIyMjBVTCwweDM4MDgzMDM4VUwsCisweDM0QzRGMEY0VUwsMHgyNzg3QTNBNFVMLDB4MDU0NTQxNDRVTCwweDBDNEM0MDRDVUwsMHgwMTgxODE4MFVMLDB4MjlDOUUxRThVTCwweDA0ODQ4MDg0VUwsMHgxNzg3OTM5NFVMLAorMHgzNTA1MzEzNFVMLDB4MEJDQkMzQzhVTCwweDBFQ0VDMkNDVUwsMHgzQzBDMzAzQ1VMLDB4MzE0MTcxNzBVTCwweDExMDExMTEwVUwsMHgwN0M3QzNDNFVMLDB4MDk4OTgxODhVTCwKKzB4MzU0NTcxNzRVTCwweDNCQ0JGM0Y4VUwsMHgxQUNBRDJEOFVMLDB4MzhDOEYwRjhVTCwweDE0ODQ5MDk0VUwsMHgxOTQ5NTE1OFVMLDB4MDI4MjgyODBVTCwweDA0QzRDMEM0VUwsCisweDNGQ0ZGM0ZDVUwsMHgwOTQ5NDE0OFVMLDB4MzkwOTMxMzhVTCwweDI3NDc2MzY0VUwsMHgwMEMwQzBDMFVMLDB4MEZDRkMzQ0NVTCwweDE3QzdEM0Q0VUwsMHgzODg4QjBCOFVMLAorMHgwRjBGMDMwQ1VMLDB4MEU4RTgyOENVTCwweDAyNDI0MjQwVUwsMHgyMzAzMjMyMFVMLDB4MTE4MTkxOTBVTCwweDJDNEM2MDZDVUwsMHgxQkNCRDNEOFVMLDB4MjQ4NEEwQTRVTCwKKzB4MzQwNDMwMzRVTCwweDMxQzFGMUYwVUwsMHgwODQ4NDA0OFVMLDB4MDJDMkMyQzBVTCwweDJGNEY2MzZDVUwsMHgzRDBEMzEzQ1VMLDB4MkQwRDIxMkNVTCwweDAwNDA0MDQwVUwsCisweDNFOEVCMkJDVUwsMHgzRTBFMzIzQ1VMLDB4M0M4Q0IwQkNVTCwweDAxQzFDMUMwVUwsMHgyQThBQTJBOFVMLDB4M0E4QUIyQjhVTCwweDBFNEU0MjRDVUwsMHgxNTQ1NTE1NFVMLAorMHgzQjBCMzMzOFVMLDB4MUNDQ0QwRENVTCwweDI4NDg2MDY4VUwsMHgzRjRGNzM3Q1VMLDB4MUM4QzkwOUNVTCwweDE4QzhEMEQ4VUwsMHgwQTRBNDI0OFVMLDB4MTY0NjUyNTRVTCwKKzB4Mzc0NzczNzRVTCwweDIwODBBMEEwVUwsMHgyRENERTFFQ1VMLDB4MDY0NjQyNDRVTCwweDM1ODVCMUI0VUwsMHgyQjBCMjMyOFVMLDB4MjU0NTYxNjRVTCwweDNBQ0FGMkY4VUwsCisweDIzQzNFM0UwVUwsMHgzOTg5QjFCOFVMLDB4MzE4MUIxQjBVTCwweDFGOEY5MzlDVUwsMHgxRTRFNTI1Q1VMLDB4MzlDOUYxRjhVTCwweDI2QzZFMkU0VUwsMHgzMjgyQjJCMFVMLAorMHgzMTAxMzEzMFVMLDB4MkFDQUUyRThVTCwweDJENEQ2MTZDVUwsMHgxRjRGNTM1Q1VMLDB4MjRDNEUwRTRVTCwweDMwQzBGMEYwVUwsMHgwRENEQzFDQ1VMLDB4MDg4ODgwODhVTCwKKzB4MTYwNjEyMTRVTCwweDNBMEEzMjM4VUwsMHgxODQ4NTA1OFVMLDB4MTRDNEQwRDRVTCwweDIyNDI2MjYwVUwsMHgyOTA5MjEyOFVMLDB4MDcwNzAzMDRVTCwweDMzMDMzMzMwVUwsCisweDI4QzhFMEU4VUwsMHgxQjBCMTMxOFVMLDB4MDUwNTAxMDRVTCwweDM5NDk3MTc4VUwsMHgxMDgwOTA5MFVMLDB4MkE0QTYyNjhVTCwweDJBMEEyMjI4VUwsMHgxQThBOTI5OFVMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTUzFbMjU2XSA9IHsKKzB4MzgzODA4MzBVTCwweEU4MjhDOEUwVUwsMHgyQzJEMEQyMVVMLDB4QTQyNjg2QTJVTCwweENDMEZDRkMzVUwsMHhEQzFFQ0VEMlVMLDB4QjAzMzgzQjNVTCwweEI4Mzg4OEIwVUwsCisweEFDMkY4RkEzVUwsMHg2MDIwNDA2MFVMLDB4NTQxNTQ1NTFVTCwweEM0MDdDN0MzVUwsMHg0NDA0NDQ0MFVMLDB4NkMyRjRGNjNVTCwweDY4MkI0QjYzVUwsMHg1ODFCNEI1M1VMLAorMHhDMDAzQzNDM1VMLDB4NjAyMjQyNjJVTCwweDMwMzMwMzMzVUwsMHhCNDM1ODVCMVVMLDB4MjgyOTA5MjFVTCwweEEwMjA4MEEwVUwsMHhFMDIyQzJFMlVMLDB4QTQyNzg3QTNVTCwKKzB4RDAxM0MzRDNVTCwweDkwMTE4MTkxVUwsMHgxMDExMDExMVVMLDB4MDQwNjA2MDJVTCwweDFDMUMwQzEwVUwsMHhCQzNDOENCMFVMLDB4MzQzNjA2MzJVTCwweDQ4MEI0QjQzVUwsCisweEVDMkZDRkUzVUwsMHg4ODA4ODg4MFVMLDB4NkMyQzRDNjBVTCwweEE4Mjg4OEEwVUwsMHgxNDE3MDcxM1VMLDB4QzQwNEM0QzBVTCwweDE0MTYwNjEyVUwsMHhGNDM0QzRGMFVMLAorMHhDMDAyQzJDMlVMLDB4NDQwNTQ1NDFVTCwweEUwMjFDMUUxVUwsMHhENDE2QzZEMlVMLDB4M0MzRjBGMzNVTCwweDNDM0QwRDMxVUwsMHg4QzBFOEU4MlVMLDB4OTgxODg4OTBVTCwKKzB4MjgyODA4MjBVTCwweDRDMEU0RTQyVUwsMHhGNDM2QzZGMlVMLDB4M0MzRTBFMzJVTCwweEE0MjU4NUExVUwsMHhGODM5QzlGMVVMLDB4MEMwRDBEMDFVTCwweERDMUZDRkQzVUwsCisweEQ4MThDOEQwVUwsMHgyODJCMEIyM1VMLDB4NjQyNjQ2NjJVTCwweDc4M0E0QTcyVUwsMHgyNDI3MDcyM1VMLDB4MkMyRjBGMjNVTCwweEYwMzFDMUYxVUwsMHg3MDMyNDI3MlVMLAorMHg0MDAyNDI0MlVMLDB4RDQxNEM0RDBVTCwweDQwMDE0MTQxVUwsMHhDMDAwQzBDMFVMLDB4NzAzMzQzNzNVTCwweDY0Mjc0NzYzVUwsMHhBQzJDOENBMFVMLDB4ODgwQjhCODNVTCwKKzB4RjQzN0M3RjNVTCwweEFDMkQ4REExVUwsMHg4MDAwODA4MFVMLDB4MUMxRjBGMTNVTCwweEM4MEFDQUMyVUwsMHgyQzJDMEMyMFVMLDB4QTgyQThBQTJVTCwweDM0MzQwNDMwVUwsCisweEQwMTJDMkQyVUwsMHgwODBCMEIwM1VMLDB4RUMyRUNFRTJVTCwweEU4MjlDOUUxVUwsMHg1QzFENEQ1MVVMLDB4OTQxNDg0OTBVTCwweDE4MTgwODEwVUwsMHhGODM4QzhGMFVMLAorMHg1NDE3NDc1M1VMLDB4QUMyRThFQTJVTCwweDA4MDgwODAwVUwsMHhDNDA1QzVDMVVMLDB4MTAxMzAzMTNVTCwweENDMERDREMxVUwsMHg4NDA2ODY4MlVMLDB4QjgzOTg5QjFVTCwKKzB4RkMzRkNGRjNVTCwweDdDM0Q0RDcxVUwsMHhDMDAxQzFDMVVMLDB4MzAzMTAxMzFVTCwweEY0MzVDNUYxVUwsMHg4ODBBOEE4MlVMLDB4NjgyQTRBNjJVTCwweEIwMzE4MUIxVUwsCisweEQwMTFDMUQxVUwsMHgyMDIwMDAyMFVMLDB4RDQxN0M3RDNVTCwweDAwMDIwMjAyVUwsMHgyMDIyMDIyMlVMLDB4MDQwNDA0MDBVTCwweDY4Mjg0ODYwVUwsMHg3MDMxNDE3MVVMLAorMHgwNDA3MDcwM1VMLDB4RDgxQkNCRDNVTCwweDlDMUQ4RDkxVUwsMHg5ODE5ODk5MVVMLDB4NjAyMTQxNjFVTCwweEJDM0U4RUIyVUwsMHhFNDI2QzZFMlVMLDB4NTgxOTQ5NTFVTCwKKzB4REMxRENERDFVTCwweDUwMTE0MTUxVUwsMHg5MDEwODA5MFVMLDB4REMxQ0NDRDBVTCwweDk4MUE4QTkyVUwsMHhBMDIzODNBM1VMLDB4QTgyQjhCQTNVTCwweEQwMTBDMEQwVUwsCisweDgwMDE4MTgxVUwsMHgwQzBGMEYwM1VMLDB4NDQwNzQ3NDNVTCwweDE4MUEwQTEyVUwsMHhFMDIzQzNFM1VMLDB4RUMyQ0NDRTBVTCwweDhDMEQ4RDgxVUwsMHhCQzNGOEZCM1VMLAorMHg5NDE2ODY5MlVMLDB4NzgzQjRCNzNVTCwweDVDMUM0QzUwVUwsMHhBMDIyODJBMlVMLDB4QTAyMTgxQTFVTCwweDYwMjM0MzYzVUwsMHgyMDIzMDMyM1VMLDB4NEMwRDRENDFVTCwKKzB4QzgwOEM4QzBVTCwweDlDMUU4RTkyVUwsMHg5QzFDOEM5MFVMLDB4MzgzQTBBMzJVTCwweDBDMEMwQzAwVUwsMHgyQzJFMEUyMlVMLDB4QjgzQThBQjJVTCwweDZDMkU0RTYyVUwsCisweDlDMUY4RjkzVUwsMHg1ODFBNEE1MlVMLDB4RjAzMkMyRjJVTCwweDkwMTI4MjkyVUwsMHhGMDMzQzNGM1VMLDB4NDgwOTQ5NDFVTCwweDc4Mzg0ODcwVUwsMHhDQzBDQ0NDMFVMLAorMHgxNDE1MDUxMVVMLDB4RjgzQkNCRjNVTCwweDcwMzA0MDcwVUwsMHg3NDM1NDU3MVVMLDB4N0MzRjRGNzNVTCwweDM0MzUwNTMxVUwsMHgxMDEwMDAxMFVMLDB4MDAwMzAzMDNVTCwKKzB4NjQyNDQ0NjBVTCwweDZDMkQ0RDYxVUwsMHhDNDA2QzZDMlVMLDB4NzQzNDQ0NzBVTCwweEQ0MTVDNUQxVUwsMHhCNDM0ODRCMFVMLDB4RTgyQUNBRTJVTCwweDA4MDkwOTAxVUwsCisweDc0MzY0NjcyVUwsMHgxODE5MDkxMVVMLDB4RkMzRUNFRjJVTCwweDQwMDA0MDQwVUwsMHgxMDEyMDIxMlVMLDB4RTAyMEMwRTBVTCwweEJDM0Q4REIxVUwsMHgwNDA1MDUwMVVMLAorMHhGODNBQ0FGMlVMLDB4MDAwMTAxMDFVTCwweEYwMzBDMEYwVUwsMHgyODJBMEEyMlVMLDB4NUMxRTRFNTJVTCwweEE4Mjk4OUExVUwsMHg1NDE2NDY1MlVMLDB4NDAwMzQzNDNVTCwKKzB4ODQwNTg1ODFVTCwweDE0MTQwNDEwVUwsMHg4ODA5ODk4MVVMLDB4OTgxQjhCOTNVTCwweEIwMzA4MEIwVUwsMHhFNDI1QzVFMVVMLDB4NDgwODQ4NDBVTCwweDc4Mzk0OTcxVUwsCisweDk0MTc4NzkzVUwsMHhGQzNDQ0NGMFVMLDB4MUMxRTBFMTJVTCwweDgwMDI4MjgyVUwsMHgyMDIxMDEyMVVMLDB4OEMwQzhDODBVTCwweDE4MUIwQjEzVUwsMHg1QzFGNEY1M1VMLAorMHg3NDM3NDc3M1VMLDB4NTQxNDQ0NTBVTCwweEIwMzI4MkIyVUwsMHgxQzFEMEQxMVVMLDB4MjQyNTA1MjFVTCwweDRDMEY0RjQzVUwsMHgwMDAwMDAwMFVMLDB4NDQwNjQ2NDJVTCwKKzB4RUMyRENERTFVTCwweDU4MTg0ODUwVUwsMHg1MDEyNDI1MlVMLDB4RTgyQkNCRTNVTCwweDdDM0U0RTcyVUwsMHhEODFBQ0FEMlVMLDB4QzgwOUM5QzFVTCwweEZDM0RDREYxVUwsCisweDMwMzAwMDMwVUwsMHg5NDE1ODU5MVVMLDB4NjQyNTQ1NjFVTCwweDNDM0MwQzMwVUwsMHhCNDM2ODZCMlVMLDB4RTQyNEM0RTBVTCwweEI4M0I4QkIzVUwsMHg3QzNDNEM3MFVMLAorMHgwQzBFMEUwMlVMLDB4NTAxMDQwNTBVTCwweDM4MzkwOTMxVUwsMHgyNDI2MDYyMlVMLDB4MzAzMjAyMzJVTCwweDg0MDQ4NDgwVUwsMHg2ODI5NDk2MVVMLDB4OTAxMzgzOTNVTCwKKzB4MzQzNzA3MzNVTCwweEU0MjdDN0UzVUwsMHgyNDI0MDQyMFVMLDB4QTQyNDg0QTBVTCwweEM4MEJDQkMzVUwsMHg1MDEzNDM1M1VMLDB4MDgwQTBBMDJVTCwweDg0MDc4NzgzVUwsCisweEQ4MTlDOUQxVUwsMHg0QzBDNEM0MFVMLDB4ODAwMzgzODNVTCwweDhDMEY4RjgzVUwsMHhDQzBFQ0VDMlVMLDB4MzgzQjBCMzNVTCwweDQ4MEE0QTQyVUwsMHhCNDM3ODdCM1VMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTUzJbMjU2XSA9IHsKKzB4QTFBODI5ODlVTCwweDgxODQwNTg1VUwsMHhEMkQ0MTZDNlVMLDB4RDNEMDEzQzNVTCwweDUwNTQxNDQ0VUwsMHgxMTFDMUQwRFVMLDB4QTBBQzJDOENVTCwweDIxMjQyNTA1VUwsCisweDUxNUMxRDREVUwsMHg0MzQwMDM0M1VMLDB4MTAxODE4MDhVTCwweDEyMUMxRTBFVUwsMHg1MTUwMTE0MVVMLDB4RjBGQzNDQ0NVTCwweEMyQzgwQUNBVUwsMHg2MzYwMjM0M1VMLAorMHgyMDI4MjgwOFVMLDB4NDA0NDA0NDRVTCwweDIwMjAyMDAwVUwsMHg5MTlDMUQ4RFVMLDB4RTBFMDIwQzBVTCwweEUyRTAyMkMyVUwsMHhDMEM4MDhDOFVMLDB4MTMxNDE3MDdVTCwKKzB4QTFBNDI1ODVVTCwweDgzOEMwRjhGVUwsMHgwMzAwMDMwM1VMLDB4NzM3ODNCNEJVTCwweEIzQjgzQjhCVUwsMHgxMzEwMTMwM1VMLDB4RDJEMDEyQzJVTCwweEUyRUMyRUNFVUwsCisweDcwNzAzMDQwVUwsMHg4MDhDMEM4Q1VMLDB4MzMzQzNGMEZVTCwweEEwQTgyODg4VUwsMHgzMjMwMzIwMlVMLDB4RDFEQzFEQ0RVTCwweEYyRjQzNkM2VUwsMHg3MDc0MzQ0NFVMLAorMHhFMEVDMkNDQ1VMLDB4OTE5NDE1ODVVTCwweDAzMDgwQjBCVUwsMHg1MzU0MTc0N1VMLDB4NTA1QzFDNENVTCwweDUzNTgxQjRCVUwsMHhCMUJDM0Q4RFVMLDB4MDEwMDAxMDFVTCwKKzB4MjAyNDI0MDRVTCwweDEwMUMxQzBDVUwsMHg3MzcwMzM0M1VMLDB4OTA5ODE4ODhVTCwweDEwMTAxMDAwVUwsMHhDMENDMENDQ1VMLDB4RjJGMDMyQzJVTCwweEQxRDgxOUM5VUwsCisweDIwMkMyQzBDVUwsMHhFM0U0MjdDN1VMLDB4NzI3MDMyNDJVTCwweDgzODAwMzgzVUwsMHg5Mzk4MUI4QlVMLDB4RDFEMDExQzFVTCwweDgyODQwNjg2VUwsMHhDMUM4MDlDOVVMLAorMHg2MDYwMjA0MFVMLDB4NTA1MDEwNDBVTCwweEEzQTAyMzgzVUwsMHhFM0U4MkJDQlVMLDB4MDEwQzBEMERVTCwweEIyQjQzNjg2VUwsMHg5MjlDMUU4RVVMLDB4NDM0QzBGNEZVTCwKKzB4QjNCNDM3ODdVTCwweDUyNTgxQTRBVUwsMHhDMkM0MDZDNlVMLDB4NzA3ODM4NDhVTCwweEEyQTQyNjg2VUwsMHgxMjEwMTIwMlVMLDB4QTNBQzJGOEZVTCwweEQxRDQxNUM1VUwsCisweDYxNjAyMTQxVUwsMHhDM0MwMDNDM1VMLDB4QjBCNDM0ODRVTCwweDQxNDAwMTQxVUwsMHg1MjUwMTI0MlVMLDB4NzE3QzNENERVTCwweDgxOEMwRDhEVUwsMHgwMDA4MDgwOFVMLAorMHgxMzFDMUYwRlVMLDB4OTE5ODE5ODlVTCwweDAwMDAwMDAwVUwsMHgxMTE4MTkwOVVMLDB4MDAwNDA0MDRVTCwweDUzNTAxMzQzVUwsMHhGM0Y0MzdDN1VMLDB4RTFFMDIxQzFVTCwKKzB4RjFGQzNEQ0RVTCwweDcyNzQzNjQ2VUwsMHgyMzJDMkYwRlVMLDB4MjMyNDI3MDdVTCwweEIwQjAzMDgwVUwsMHg4Mzg4MEI4QlVMLDB4MDIwQzBFMEVVTCwweEEzQTgyQjhCVUwsCisweEEyQTAyMjgyVUwsMHg2MjZDMkU0RVVMLDB4OTM5MDEzODNVTCwweDQxNEMwRDREVUwsMHg2MTY4Mjk0OVVMLDB4NzA3QzNDNENVTCwweDAxMDgwOTA5VUwsMHgwMjA4MEEwQVVMLAorMHhCM0JDM0Y4RlVMLDB4RTNFQzJGQ0ZVTCwweEYzRjAzM0MzVUwsMHhDMUM0MDVDNVVMLDB4ODM4NDA3ODdVTCwweDEwMTQxNDA0VUwsMHhGMkZDM0VDRVVMLDB4NjA2NDI0NDRVTCwKKzB4RDJEQzFFQ0VVTCwweDIyMkMyRTBFVUwsMHg0MzQ4MEI0QlVMLDB4MTIxODFBMEFVTCwweDAyMDQwNjA2VUwsMHgyMTIwMjEwMVVMLDB4NjM2ODJCNEJVTCwweDYyNjQyNjQ2VUwsCisweDAyMDAwMjAyVUwsMHhGMUY0MzVDNVVMLDB4OTI5MDEyODJVTCwweDgyODgwQThBVUwsMHgwMDBDMEMwQ1VMLDB4QjNCMDMzODNVTCwweDcyN0MzRTRFVUwsMHhEMEQwMTBDMFVMLAorMHg3Mjc4M0E0QVVMLDB4NDM0NDA3NDdVTCwweDkyOTQxNjg2VUwsMHhFMUU0MjVDNVVMLDB4MjIyNDI2MDZVTCwweDgwODAwMDgwVUwsMHhBMUFDMkQ4RFVMLDB4RDNEQzFGQ0ZVTCwKKzB4QTFBMDIxODFVTCwweDMwMzAzMDAwVUwsMHgzMzM0MzcwN1VMLDB4QTJBQzJFOEVVTCwweDMyMzQzNjA2VUwsMHgxMTE0MTUwNVVMLDB4MjIyMDIyMDJVTCwweDMwMzgzODA4VUwsCisweEYwRjQzNEM0VUwsMHhBM0E0Mjc4N1VMLDB4NDE0NDA1NDVVTCwweDQwNEMwQzRDVUwsMHg4MTgwMDE4MVVMLDB4RTFFODI5QzlVTCwweDgwODQwNDg0VUwsMHg5Mzk0MTc4N1VMLAorMHgzMTM0MzUwNVVMLDB4QzNDODBCQ0JVTCwweEMyQ0MwRUNFVUwsMHgzMDNDM0MwQ1VMLDB4NzE3MDMxNDFVTCwweDExMTAxMTAxVUwsMHhDM0M0MDdDN1VMLDB4ODE4ODA5ODlVTCwKKzB4NzE3NDM1NDVVTCwweEYzRjgzQkNCVUwsMHhEMkQ4MUFDQVVMLDB4RjBGODM4QzhVTCwweDkwOTQxNDg0VUwsMHg1MTU4MTk0OVVMLDB4ODI4MDAyODJVTCwweEMwQzQwNEM0VUwsCisweEYzRkMzRkNGVUwsMHg0MTQ4MDk0OVVMLDB4MzEzODM5MDlVTCwweDYzNjQyNzQ3VUwsMHhDMEMwMDBDMFVMLDB4QzNDQzBGQ0ZVTCwweEQzRDQxN0M3VUwsMHhCMEI4Mzg4OFVMLAorMHgwMzBDMEYwRlVMLDB4ODI4QzBFOEVVTCwweDQyNDAwMjQyVUwsMHgyMzIwMjMwM1VMLDB4OTE5MDExODFVTCwweDYwNkMyQzRDVUwsMHhEM0Q4MUJDQlVMLDB4QTBBNDI0ODRVTCwKKzB4MzAzNDM0MDRVTCwweEYxRjAzMUMxVUwsMHg0MDQ4MDg0OFVMLDB4QzJDMDAyQzJVTCwweDYzNkMyRjRGVUwsMHgzMTNDM0QwRFVMLDB4MjEyQzJEMERVTCwweDQwNDAwMDQwVUwsCisweEIyQkMzRThFVUwsMHgzMjNDM0UwRVVMLDB4QjBCQzNDOENVTCwweEMxQzAwMUMxVUwsMHhBMkE4MkE4QVVMLDB4QjJCODNBOEFVTCwweDQyNEMwRTRFVUwsMHg1MTU0MTU0NVVMLAorMHgzMzM4M0IwQlVMLDB4RDBEQzFDQ0NVTCwweDYwNjgyODQ4VUwsMHg3MzdDM0Y0RlVMLDB4OTA5QzFDOENVTCwweEQwRDgxOEM4VUwsMHg0MjQ4MEE0QVVMLDB4NTI1NDE2NDZVTCwKKzB4NzM3NDM3NDdVTCwweEEwQTAyMDgwVUwsMHhFMUVDMkRDRFVMLDB4NDI0NDA2NDZVTCwweEIxQjQzNTg1VUwsMHgyMzI4MkIwQlVMLDB4NjE2NDI1NDVVTCwweEYyRjgzQUNBVUwsCisweEUzRTAyM0MzVUwsMHhCMUI4Mzk4OVVMLDB4QjFCMDMxODFVTCwweDkzOUMxRjhGVUwsMHg1MjVDMUU0RVVMLDB4RjFGODM5QzlVTCwweEUyRTQyNkM2VUwsMHhCMkIwMzI4MlVMLAorMHgzMTMwMzEwMVVMLDB4RTJFODJBQ0FVTCwweDYxNkMyRDREVUwsMHg1MzVDMUY0RlVMLDB4RTBFNDI0QzRVTCwweEYwRjAzMEMwVUwsMHhDMUNDMERDRFVMLDB4ODA4ODA4ODhVTCwKKzB4MTIxNDE2MDZVTCwweDMyMzgzQTBBVUwsMHg1MDU4MTg0OFVMLDB4RDBENDE0QzRVTCwweDYyNjAyMjQyVUwsMHgyMTI4MjkwOVVMLDB4MDMwNDA3MDdVTCwweDMzMzAzMzAzVUwsCisweEUwRTgyOEM4VUwsMHgxMzE4MUIwQlVMLDB4MDEwNDA1MDVVTCwweDcxNzgzOTQ5VUwsMHg5MDkwMTA4MFVMLDB4NjI2ODJBNEFVTCwweDIyMjgyQTBBVUwsMHg5Mjk4MUE4QVVMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBTUzNbMjU2XSA9IHsKKzB4MDgzMDM4MzhVTCwweEM4RTBFODI4VUwsMHgwRDIxMkMyRFVMLDB4ODZBMkE0MjZVTCwweENGQzNDQzBGVUwsMHhDRUQyREMxRVVMLDB4ODNCM0IwMzNVTCwweDg4QjBCODM4VUwsCisweDhGQTNBQzJGVUwsMHg0MDYwNjAyMFVMLDB4NDU1MTU0MTVVTCwweEM3QzNDNDA3VUwsMHg0NDQwNDQwNFVMLDB4NEY2MzZDMkZVTCwweDRCNjM2ODJCVUwsMHg0QjUzNTgxQlVMLAorMHhDM0MzQzAwM1VMLDB4NDI2MjYwMjJVTCwweDAzMzMzMDMzVUwsMHg4NUIxQjQzNVVMLDB4MDkyMTI4MjlVTCwweDgwQTBBMDIwVUwsMHhDMkUyRTAyMlVMLDB4ODdBM0E0MjdVTCwKKzB4QzNEM0QwMTNVTCwweDgxOTE5MDExVUwsMHgwMTExMTAxMVVMLDB4MDYwMjA0MDZVTCwweDBDMTAxQzFDVUwsMHg4Q0IwQkMzQ1VMLDB4MDYzMjM0MzZVTCwweDRCNDM0ODBCVUwsCisweENGRTNFQzJGVUwsMHg4ODgwODgwOFVMLDB4NEM2MDZDMkNVTCwweDg4QTBBODI4VUwsMHgwNzEzMTQxN1VMLDB4QzRDMEM0MDRVTCwweDA2MTIxNDE2VUwsMHhDNEYwRjQzNFVMLAorMHhDMkMyQzAwMlVMLDB4NDU0MTQ0MDVVTCwweEMxRTFFMDIxVUwsMHhDNkQyRDQxNlVMLDB4MEYzMzNDM0ZVTCwweDBEMzEzQzNEVUwsMHg4RTgyOEMwRVVMLDB4ODg5MDk4MThVTCwKKzB4MDgyMDI4MjhVTCwweDRFNDI0QzBFVUwsMHhDNkYyRjQzNlVMLDB4MEUzMjNDM0VVTCwweDg1QTFBNDI1VUwsMHhDOUYxRjgzOVVMLDB4MEQwMTBDMERVTCwweENGRDNEQzFGVUwsCisweEM4RDBEODE4VUwsMHgwQjIzMjgyQlVMLDB4NDY2MjY0MjZVTCwweDRBNzI3ODNBVUwsMHgwNzIzMjQyN1VMLDB4MEYyMzJDMkZVTCwweEMxRjFGMDMxVUwsMHg0MjcyNzAzMlVMLAorMHg0MjQyNDAwMlVMLDB4QzREMEQ0MTRVTCwweDQxNDE0MDAxVUwsMHhDMEMwQzAwMFVMLDB4NDM3MzcwMzNVTCwweDQ3NjM2NDI3VUwsMHg4Q0EwQUMyQ1VMLDB4OEI4Mzg4MEJVTCwKKzB4QzdGM0Y0MzdVTCwweDhEQTFBQzJEVUwsMHg4MDgwODAwMFVMLDB4MEYxMzFDMUZVTCwweENBQzJDODBBVUwsMHgwQzIwMkMyQ1VMLDB4OEFBMkE4MkFVTCwweDA0MzAzNDM0VUwsCisweEMyRDJEMDEyVUwsMHgwQjAzMDgwQlVMLDB4Q0VFMkVDMkVVTCwweEM5RTFFODI5VUwsMHg0RDUxNUMxRFVMLDB4ODQ5MDk0MTRVTCwweDA4MTAxODE4VUwsMHhDOEYwRjgzOFVMLAorMHg0NzUzNTQxN1VMLDB4OEVBMkFDMkVVTCwweDA4MDAwODA4VUwsMHhDNUMxQzQwNVVMLDB4MDMxMzEwMTNVTCwweENEQzFDQzBEVUwsMHg4NjgyODQwNlVMLDB4ODlCMUI4MzlVTCwKKzB4Q0ZGM0ZDM0ZVTCwweDRENzE3QzNEVUwsMHhDMUMxQzAwMVVMLDB4MDEzMTMwMzFVTCwweEM1RjFGNDM1VUwsMHg4QTgyODgwQVVMLDB4NEE2MjY4MkFVTCwweDgxQjFCMDMxVUwsCisweEMxRDFEMDExVUwsMHgwMDIwMjAyMFVMLDB4QzdEM0Q0MTdVTCwweDAyMDIwMDAyVUwsMHgwMjIyMjAyMlVMLDB4MDQwMDA0MDRVTCwweDQ4NjA2ODI4VUwsMHg0MTcxNzAzMVVMLAorMHgwNzAzMDQwN1VMLDB4Q0JEM0Q4MUJVTCwweDhEOTE5QzFEVUwsMHg4OTkxOTgxOVVMLDB4NDE2MTYwMjFVTCwweDhFQjJCQzNFVUwsMHhDNkUyRTQyNlVMLDB4NDk1MTU4MTlVTCwKKzB4Q0REMURDMURVTCwweDQxNTE1MDExVUwsMHg4MDkwOTAxMFVMLDB4Q0NEMERDMUNVTCwweDhBOTI5ODFBVUwsMHg4M0EzQTAyM1VMLDB4OEJBM0E4MkJVTCwweEMwRDBEMDEwVUwsCisweDgxODE4MDAxVUwsMHgwRjAzMEMwRlVMLDB4NDc0MzQ0MDdVTCwweDBBMTIxODFBVUwsMHhDM0UzRTAyM1VMLDB4Q0NFMEVDMkNVTCwweDhEODE4QzBEVUwsMHg4RkIzQkMzRlVMLAorMHg4NjkyOTQxNlVMLDB4NEI3Mzc4M0JVTCwweDRDNTA1QzFDVUwsMHg4MkEyQTAyMlVMLDB4ODFBMUEwMjFVTCwweDQzNjM2MDIzVUwsMHgwMzIzMjAyM1VMLDB4NEQ0MTRDMERVTCwKKzB4QzhDMEM4MDhVTCwweDhFOTI5QzFFVUwsMHg4QzkwOUMxQ1VMLDB4MEEzMjM4M0FVTCwweDBDMDAwQzBDVUwsMHgwRTIyMkMyRVVMLDB4OEFCMkI4M0FVTCwweDRFNjI2QzJFVUwsCisweDhGOTM5QzFGVUwsMHg0QTUyNTgxQVVMLDB4QzJGMkYwMzJVTCwweDgyOTI5MDEyVUwsMHhDM0YzRjAzM1VMLDB4NDk0MTQ4MDlVTCwweDQ4NzA3ODM4VUwsMHhDQ0MwQ0MwQ1VMLAorMHgwNTExMTQxNVVMLDB4Q0JGM0Y4M0JVTCwweDQwNzA3MDMwVUwsMHg0NTcxNzQzNVVMLDB4NEY3MzdDM0ZVTCwweDA1MzEzNDM1VUwsMHgwMDEwMTAxMFVMLDB4MDMwMzAwMDNVTCwKKzB4NDQ2MDY0MjRVTCwweDRENjE2QzJEVUwsMHhDNkMyQzQwNlVMLDB4NDQ3MDc0MzRVTCwweEM1RDFENDE1VUwsMHg4NEIwQjQzNFVMLDB4Q0FFMkU4MkFVTCwweDA5MDEwODA5VUwsCisweDQ2NzI3NDM2VUwsMHgwOTExMTgxOVVMLDB4Q0VGMkZDM0VVTCwweDQwNDA0MDAwVUwsMHgwMjEyMTAxMlVMLDB4QzBFMEUwMjBVTCwweDhEQjFCQzNEVUwsMHgwNTAxMDQwNVVMLAorMHhDQUYyRjgzQVVMLDB4MDEwMTAwMDFVTCwweEMwRjBGMDMwVUwsMHgwQTIyMjgyQVVMLDB4NEU1MjVDMUVVTCwweDg5QTFBODI5VUwsMHg0NjUyNTQxNlVMLDB4NDM0MzQwMDNVTCwKKzB4ODU4MTg0MDVVTCwweDA0MTAxNDE0VUwsMHg4OTgxODgwOVVMLDB4OEI5Mzk4MUJVTCwweDgwQjBCMDMwVUwsMHhDNUUxRTQyNVVMLDB4NDg0MDQ4MDhVTCwweDQ5NzE3ODM5VUwsCisweDg3OTM5NDE3VUwsMHhDQ0YwRkMzQ1VMLDB4MEUxMjFDMUVVTCwweDgyODI4MDAyVUwsMHgwMTIxMjAyMVVMLDB4OEM4MDhDMENVTCwweDBCMTMxODFCVUwsMHg0RjUzNUMxRlVMLAorMHg0NzczNzQzN1VMLDB4NDQ1MDU0MTRVTCwweDgyQjJCMDMyVUwsMHgwRDExMUMxRFVMLDB4MDUyMTI0MjVVTCwweDRGNDM0QzBGVUwsMHgwMDAwMDAwMFVMLDB4NDY0MjQ0MDZVTCwKKzB4Q0RFMUVDMkRVTCwweDQ4NTA1ODE4VUwsMHg0MjUyNTAxMlVMLDB4Q0JFM0U4MkJVTCwweDRFNzI3QzNFVUwsMHhDQUQyRDgxQVVMLDB4QzlDMUM4MDlVTCwweENERjFGQzNEVUwsCisweDAwMzAzMDMwVUwsMHg4NTkxOTQxNVVMLDB4NDU2MTY0MjVVTCwweDBDMzAzQzNDVUwsMHg4NkIyQjQzNlVMLDB4QzRFMEU0MjRVTCwweDhCQjNCODNCVUwsMHg0QzcwN0MzQ1VMLAorMHgwRTAyMEMwRVVMLDB4NDA1MDUwMTBVTCwweDA5MzEzODM5VUwsMHgwNjIyMjQyNlVMLDB4MDIzMjMwMzJVTCwweDg0ODA4NDA0VUwsMHg0OTYxNjgyOVVMLDB4ODM5MzkwMTNVTCwKKzB4MDczMzM0MzdVTCwweEM3RTNFNDI3VUwsMHgwNDIwMjQyNFVMLDB4ODRBMEE0MjRVTCwweENCQzNDODBCVUwsMHg0MzUzNTAxM1VMLDB4MEEwMjA4MEFVTCwweDg3ODM4NDA3VUwsCisweEM5RDFEODE5VUwsMHg0QzQwNEMwQ1VMLDB4ODM4MzgwMDNVTCwweDhGODM4QzBGVUwsMHhDRUMyQ0MwRVVMLDB4MEIzMzM4M0JVTCwweDRBNDI0ODBBVUwsMHg4N0IzQjQzN1VMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBLQ2lbMTZdID0geworMHg5RTM3NzlCOSwweDNDNkVGMzczLAorMHg3OERERTZFNiwweEYxQkJDRENDLAorMHhFMzc3OUI5OSwweEM2RUYzNzMzLAorMHg4RERFNkU2NywweDFCQkNEQ0NGLAorMHgzNzc5Qjk5RSwweDZFRjM3MzNDLAorMHhEREU2RTY3OCwweEJCQ0RDQ0YxLAorMHg3NzlCOTlFMywweEVGMzczM0M2LAorMHhERTZFNjc4RCwweEJDRENDRjFCCit9OworCisjZGVmaW5lIEcoeCkgKFNTM1soKHgpPj4yNCkmMjU1XSBeIFNTMlsoKHgpPj4xNikmMjU1XSBeIFNTMVsoKHgpPj44KSYyNTVdIF4gU1MwWyh4KSYyNTVdKQorCisjZGVmaW5lIEYoTDEsIEwyLCBSMSwgUjIsIEsxLCBLMikgXAorICAgVDIgPSBHKChSMSBeIEsxKSBeIChSMiBeIEsyKSk7IFwKKyAgIFQgPSBHKCBHKFQyICsgKFIxIF4gSzEpKSArIFQyKTsgXAorICAgTDIgXj0gVDsgXAorICAgTDEgXj0gKFQgKyBHKFQyICsgKFIxIF4gSzEpKSk7IFwKKworIC8qKgorICAgIEluaXRpYWxpemUgdGhlIFNFRUQgYmxvY2sgY2lwaGVyCisgICAgQHBhcmFtIGtleSBUaGUgc3ltbWV0cmljIGtleSB5b3Ugd2lzaCB0byBwYXNzCisgICAgQHBhcmFtIGtleWxlbiBUaGUga2V5IGxlbmd0aCBpbiBieXRlcworICAgIEBwYXJhbSBudW1fcm91bmRzIFRoZSBudW1iZXIgb2Ygcm91bmRzIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICAgQHBhcmFtIHNrZXkgVGhlIGtleSBpbiBhcyBzY2hlZHVsZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IGtzZWVkX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICAgaW50ICAgICBpOworICAgIHVsb25nMzIgdG1wLCBrMSwgazIsIGszLCBrNDsKKworICAgIGlmIChrZXlsZW4gIT0gMTYpIHsKKyAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgIH0KKyAgIAorICAgIGlmIChudW1fcm91bmRzICE9IDE2ICYmIG51bV9yb3VuZHMgIT0gMCkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1JPVU5EUzsKKyAgICB9CisKKyAgICAvKiBsb2FkIGtleSAqLworICAgIExPQUQzMkgoazEsIGtleSk7CisgICAgTE9BRDMySChrMiwga2V5KzQpOworICAgIExPQUQzMkgoazMsIGtleSs4KTsKKyAgICBMT0FEMzJIKGs0LCBrZXkrMTIpOworCisgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICBza2V5LT5rc2VlZC5LWzIqaSswXSA9IEcoazEgKyBrMyAtIEtDaVtpXSk7CisgICAgICAgc2tleS0+a3NlZWQuS1syKmkrMV0gPSBHKGsyIC0gazQgKyBLQ2lbaV0pOworICAgICAgIGlmIChpJjEpIHsKKyAgICAgICAgICB0bXAgPSBrMzsKKyAgICAgICAgICBrMyA9ICgoazMgPDwgOCkgfCAoazQgPj4gMjQpKSAmIDB4RkZGRkZGRkY7CisgICAgICAgICAgazQgPSAoKGs0IDw8IDgpIHwgKHRtcCA+PiAyNCkpICYgMHhGRkZGRkZGRjsKKyAgICAgICB9IGVsc2UgeworICAgICAgICAgIHRtcCA9IGsxOworICAgICAgICAgIGsxID0gKChrMSA+PiA4KSB8IChrMiA8PCAyNCkpICYgMHhGRkZGRkZGRjsKKyAgICAgICAgICBrMiA9ICgoazIgPj4gOCkgfCAodG1wIDw8IDI0KSkgJiAweEZGRkZGRkZGOworICAgICAgfQorICAgICAgLyogcmV2ZXJzZSBrZXlzIGZvciBkZWNyeXB0ICovCisgICAgICBza2V5LT5rc2VlZC5kS1syKigxNS1pKSswXSA9IHNrZXktPmtzZWVkLktbMippKzBdOworICAgICAgc2tleS0+a3NlZWQuZEtbMiooMTUtaSkrMV0gPSBza2V5LT5rc2VlZC5LWzIqaSsxXTsKKyAgICB9CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKK3N0YXRpYyB2b2lkIHJvdW5kcyh1bG9uZzMyICpQLCB1bG9uZzMyICpLKQoreworICAgdWxvbmczMiBULCBUMjsKKyAgIGludCAgICAgaTsKKyAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAyKSB7CisgICAgIEYoUFswXSwgUFsxXSwgUFsyXSwgUFszXSwgS1swXSwgS1sxXSk7CisgICAgIEYoUFsyXSwgUFszXSwgUFswXSwgUFsxXSwgS1syXSwgS1szXSk7CisgICAgIEsgKz0gNDsKKyAgIH0KK30KKworLyoqCisgIEVuY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIFNFRUQKKyAgQHBhcmFtIHB0IFRoZSBpbnB1dCBwbGFpbnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gY3QgVGhlIG91dHB1dCBjaXBoZXJ0ZXh0ICgxNiBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGtzZWVkX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIHVsb25nMzIgUFs0XTsKKyAgIExPQUQzMkgoUFswXSwgcHQpOworICAgTE9BRDMySChQWzFdLCBwdCs0KTsKKyAgIExPQUQzMkgoUFsyXSwgcHQrOCk7CisgICBMT0FEMzJIKFBbM10sIHB0KzEyKTsKKyAgIHJvdW5kcyhQLCBza2V5LT5rc2VlZC5LKTsKKyAgIFNUT1JFMzJIKFBbMl0sIGN0KTsKKyAgIFNUT1JFMzJIKFBbM10sIGN0KzQpOworICAgU1RPUkUzMkgoUFswXSwgY3QrOCk7CisgICBTVE9SRTMySChQWzFdLCBjdCsxMik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBEZWNyeXB0cyBhIGJsb2NrIG9mIHRleHQgd2l0aCBTRUVECisgIEBwYXJhbSBjdCBUaGUgaW5wdXQgY2lwaGVydGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBwdCBUaGUgb3V0cHV0IHBsYWludGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkIAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQga3NlZWRfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgdWxvbmczMiBQWzRdOworICAgTE9BRDMySChQWzBdLCBjdCk7CisgICBMT0FEMzJIKFBbMV0sIGN0KzQpOworICAgTE9BRDMySChQWzJdLCBjdCs4KTsKKyAgIExPQUQzMkgoUFszXSwgY3QrMTIpOworICAgcm91bmRzKFAsIHNrZXktPmtzZWVkLmRLKTsKKyAgIFNUT1JFMzJIKFBbMl0sIHB0KTsKKyAgIFNUT1JFMzJIKFBbM10sIHB0KzQpOworICAgU1RPUkUzMkgoUFswXSwgcHQrOCk7CisgICBTVE9SRTMySChQWzFdLCBwdCsxMik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKiBUZXJtaW5hdGUgdGhlIGNvbnRleHQgCisgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorKi8KK3ZvaWQga3NlZWRfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KQoreworfQorCisvKioKKyAgUGVyZm9ybXMgYSBzZWxmLXRlc3Qgb2YgdGhlIFNFRUQgYmxvY2sgY2lwaGVyCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgZnVuY3Rpb25hbCwgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdCBoYXMgYmVlbiBkaXNhYmxlZAorKi8KK2ludCBrc2VlZF90ZXN0KHZvaWQpCit7CisjaWYgIWRlZmluZWQoTFRDX1RFU1QpCisgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICBzdGF0aWMgY29uc3Qgc3RydWN0IHRlc3QgeworICAgICB1bnNpZ25lZCBjaGFyIHB0WzE2XSwgY3RbMTZdLCBrZXlbMTZdOworICB9IHRlc3RzW10gPSB7CisKK3sKKyAgeyAweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOCwweDA5LDB4MEEsMHgwQiwweDBDLDB4MEQsMHgwRSwweDBGIH0sCisgIHsgMHg1RSwweEJBLDB4QzYsMHhFMCwweDA1LDB4NEUsMHgxNiwweDY4LDB4MTksMHhBRiwweEYxLDB4Q0MsMHg2RCwweDM0LDB4NkMsMHhEQiB9LAorICB7IDAgfSwKK30sCisKK3sKKyAgeyAwIH0sCisgIHsgMHhDMSwweDFGLDB4MjIsMHhGMiwweDAxLDB4NDAsMHg1MCwweDUwLDB4ODQsMHg0OCwweDM1LDB4OTcsMHhFNCwweDM3LDB4MEYsMHg0MyB9LAorICB7IDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEYgfSwKK30sCisKK3sKKyAgeyAweDgzLDB4QTIsMHhGOCwweEEyLDB4ODgsMHg2NCwweDFGLDB4QjksMHhBNCwweEU5LDB4QTUsMHhDQywweDJGLDB4MTMsMHgxQywweDdEIH0sCisgIHsgMHhFRSwweDU0LDB4RDEsMHgzRSwweEJDLDB4QUUsMHg3MCwweDZELDB4MjIsMHg2QiwweEMzLDB4MTQsMHgyQywweEQ0LDB4MEQsMHg0QSB9LAorICB7IDB4NDcsMHgwNiwweDQ4LDB4MDgsMHg1MSwweEU2LDB4MUIsMHhFOCwweDVELDB4NzQsMHhCRiwweEIzLDB4RkQsMHg5NSwweDYxLDB4ODUgfSwKK30sCisKK3sKKyAgeyAweEI0LDB4MUUsMHg2QiwweEUyLDB4RUIsMHhBOCwweDRBLDB4MTQsMHg4RSwweDJFLDB4RUQsMHg4NCwweDU5LDB4M0MsMHg1RSwweEM3IH0sCisgIHsgMHg5QiwweDlCLDB4N0IsMHhGQywweEQxLDB4ODEsMHgzQywweEI5LDB4NUQsMHgwQiwweDM2LDB4MTgsMHhGNCwweDBGLDB4NTEsMHgyMiB9LAorICB7IDB4MjgsMHhEQiwweEMzLDB4QkMsMHg0OSwweEZGLDB4RDgsMHg3RCwweENGLDB4QTUsMHgwOSwweEIxLDB4MUQsMHg0MiwweDJCLDB4RTcgfSwKK30KK307CisgICBpbnQgeDsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzJdWzE2XTsKKyAgIHN5bW1ldHJpY19rZXkgc2tleTsKKworICAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgeworICAgICAgIGtzZWVkX3NldHVwKHRlc3RzW3hdLmtleSwgMTYsIDAsICZza2V5KTsKKyAgICAgICBrc2VlZF9lY2JfZW5jcnlwdCh0ZXN0c1t4XS5wdCwgYnVmWzBdLCAmc2tleSk7CisgICAgICAga3NlZWRfZWNiX2RlY3J5cHQoYnVmWzBdLCBidWZbMV0sICZza2V5KTsKKyAgICAgICBpZiAoWE1FTUNNUChidWZbMF0sIHRlc3RzW3hdLmN0LCAxNikgfHwgWE1FTUNNUChidWZbMV0sIHRlc3RzW3hdLnB0LCAxNikpIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZgorfQorCisvKioKKyAgR2V0cyBzdWl0YWJsZSBrZXkgc2l6ZQorICBAcGFyYW0ga2V5c2l6ZSBbaW4vb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSByZWNvbW1lbmRlZCBrZXkgKGluIGJ5dGVzKS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSB0aGUgc3VpdGFibGUgc2l6ZSBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgdGhlIGlucHV0IGtleSBzaXplIGlzIGFjY2VwdGFibGUuCisqLworaW50IGtzZWVkX2tleXNpemUoaW50ICprZXlzaXplKQoreworICAgTFRDX0FSR0NISyhrZXlzaXplICE9IE5VTEwpOworICAgaWYgKCprZXlzaXplID49IDE2KSB7CisgICAgICAqa2V5c2l6ZSA9IDE2OworICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9rc2VlZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjM6MDE6MDYgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvbm9la2Vvbi5jIGIvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvbm9la2Vvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NjdmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9ub2VrZW9uLmMKQEAgLTAsMCArMSwzMDMgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisvKioKKyAgIEBmaWxlIG5vZWtlb24uYworICAgSW1wbGVtZW50YXRpb24gb2YgdGhlIE5vZWtlb24gYmxvY2sgY2lwaGVyIGJ5IFRvbSBTdCBEZW5pcyAKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIE5PRUtFT04KKworY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBub2VrZW9uX2Rlc2MgPQoreworICAgICJub2VrZW9uIiwKKyAgICAxNiwKKyAgICAxNiwgMTYsIDE2LCAxNiwKKyAgICAmbm9la2Vvbl9zZXR1cCwKKyAgICAmbm9la2Vvbl9lY2JfZW5jcnlwdCwKKyAgICAmbm9la2Vvbl9lY2JfZGVjcnlwdCwKKyAgICAmbm9la2Vvbl90ZXN0LAorICAgICZub2VrZW9uX2RvbmUsCisgICAgJm5vZWtlb25fa2V5c2l6ZSwKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9OworCitzdGF0aWMgY29uc3QgdWxvbmczMiBSQ1tdID0geworICAgMHgwMDAwMDA4MFVMLCAweDAwMDAwMDFiVUwsIDB4MDAwMDAwMzZVTCwgMHgwMDAwMDA2Y1VMLAorICAgMHgwMDAwMDBkOFVMLCAweDAwMDAwMGFiVUwsIDB4MDAwMDAwNGRVTCwgMHgwMDAwMDA5YVVMLAorICAgMHgwMDAwMDAyZlVMLCAweDAwMDAwMDVlVUwsIDB4MDAwMDAwYmNVTCwgMHgwMDAwMDA2M1VMLAorICAgMHgwMDAwMDBjNlVMLCAweDAwMDAwMDk3VUwsIDB4MDAwMDAwMzVVTCwgMHgwMDAwMDA2YVVMLAorICAgMHgwMDAwMDBkNFVMIAorfTsKKworI2RlZmluZSBrVEhFVEEoYSwgYiwgYywgZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcCA9IGFeYzsgdGVtcCA9IHRlbXAgXiBST0xjKHRlbXAsIDgpIF4gUk9SYyh0ZW1wLCA4KTsgXAorICAgIGIgXj0gdGVtcDsgZCBePSB0ZW1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdGVtcCA9IGJeZDsgdGVtcCA9IHRlbXAgXiBST0xjKHRlbXAsIDgpIF4gUk9SYyh0ZW1wLCA4KTsgXAorICAgIGEgXj0gdGVtcDsgYyBePSB0ZW1wOworCisjZGVmaW5lIFRIRVRBKGssIGEsIGIsIGMsIGQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZW1wID0gYV5jOyB0ZW1wID0gdGVtcCBeIFJPTGModGVtcCwgOCkgXiBST1JjKHRlbXAsIDgpOyBcCisgICAgYiBePSB0ZW1wIF4ga1sxXTsgZCBePSB0ZW1wIF4ga1szXTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0ZW1wID0gYl5kOyB0ZW1wID0gdGVtcCBeIFJPTGModGVtcCwgOCkgXiBST1JjKHRlbXAsIDgpOyBcCisgICAgYSBePSB0ZW1wIF4ga1swXTsgYyBePSB0ZW1wIF4ga1syXTsKKyAgICAKKyNkZWZpbmUgR0FNTUEoYSwgYiwgYywgZCkgICAgIFwKKyAgICBiIF49IH4oZHxjKTsgICAgICAgICAgICAgIFwKKyAgICBhIF49IGMmYjsgICAgICAgICAgICAgICAgIFwKKyAgICB0ZW1wID0gZDsgZCA9IGE7IGEgPSB0ZW1wO1wKKyAgICBjIF49IGEgXiBiIF4gZDsgICAgICAgICAgIFwKKyAgICBiIF49IH4oZHxjKTsgICAgICAgICAgICAgIFwKKyAgICBhIF49IGMmYjsKKyAgICAKKyNkZWZpbmUgUEkxKGEsIGIsIGMsIGQpIFwKKyAgICBhID0gUk9MYyhhLCAxKTsgYyA9IFJPTGMoYywgNSk7IGQgPSBST0xjKGQsIDIpOworICAgIAorI2RlZmluZSBQSTIoYSwgYiwgYywgZCkgXAorICAgIGEgPSBST1JjKGEsIDEpOyBjID0gUk9SYyhjLCA1KTsgZCA9IFJPUmMoZCwgMik7CisgICAgCisgLyoqCisgICAgSW5pdGlhbGl6ZSB0aGUgTm9la2VvbiBibG9jayBjaXBoZXIKKyAgICBAcGFyYW0ga2V5IFRoZSBzeW1tZXRyaWMga2V5IHlvdSB3aXNoIHRvIHBhc3MKKyAgICBAcGFyYW0ga2V5bGVuIFRoZSBrZXkgbGVuZ3RoIGluIGJ5dGVzCisgICAgQHBhcmFtIG51bV9yb3VuZHMgVGhlIG51bWJlciBvZiByb3VuZHMgZGVzaXJlZCAoMCBmb3IgZGVmYXVsdCkKKyAgICBAcGFyYW0gc2tleSBUaGUga2V5IGluIGFzIHNjaGVkdWxlZCBieSB0aGlzIGZ1bmN0aW9uLgorICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgbm9la2Vvbl9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgdWxvbmczMiB0ZW1wOworICAgCisgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKyAgIAorICAgaWYgKGtleWxlbiAhPSAxNikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0KKyAgIAorICAgaWYgKG51bV9yb3VuZHMgIT0gMTYgJiYgbnVtX3JvdW5kcyAhPSAwKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9ST1VORFM7CisgICB9CisgICAKKyAgIExPQUQzMkgoc2tleS0+bm9la2Vvbi5LWzBdLCZrZXlbMF0pOworICAgTE9BRDMySChza2V5LT5ub2VrZW9uLktbMV0sJmtleVs0XSk7CisgICBMT0FEMzJIKHNrZXktPm5vZWtlb24uS1syXSwma2V5WzhdKTsKKyAgIExPQUQzMkgoc2tleS0+bm9la2Vvbi5LWzNdLCZrZXlbMTJdKTsKKyAgIAorICAgTE9BRDMySChza2V5LT5ub2VrZW9uLmRLWzBdLCZrZXlbMF0pOworICAgTE9BRDMySChza2V5LT5ub2VrZW9uLmRLWzFdLCZrZXlbNF0pOworICAgTE9BRDMySChza2V5LT5ub2VrZW9uLmRLWzJdLCZrZXlbOF0pOworICAgTE9BRDMySChza2V5LT5ub2VrZW9uLmRLWzNdLCZrZXlbMTJdKTsKKworICAga1RIRVRBKHNrZXktPm5vZWtlb24uZEtbMF0sIHNrZXktPm5vZWtlb24uZEtbMV0sIHNrZXktPm5vZWtlb24uZEtbMl0sIHNrZXktPm5vZWtlb24uZEtbM10pOworCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBFbmNyeXB0cyBhIGJsb2NrIG9mIHRleHQgd2l0aCBOb2VrZW9uCisgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICgxNiBieXRlcykKKyAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyBpbnQgX25vZWtlb25fZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2Vsc2UKK2ludCBub2VrZW9uX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbmRpZgoreworICAgdWxvbmczMiBhLGIsYyxkLHRlbXA7CisgICBpbnQgcjsKKworICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAgICE9IE5VTEwpOworICAgCisgICBMT0FEMzJIKGEsJnB0WzBdKTsgTE9BRDMySChiLCZwdFs0XSk7CisgICBMT0FEMzJIKGMsJnB0WzhdKTsgTE9BRDMySChkLCZwdFsxMl0pOworICAgCisjZGVmaW5lIFJPVU5EKGkpIFwKKyAgICAgICBhIF49IFJDW2ldOyBcCisgICAgICAgVEhFVEEoc2tleS0+bm9la2Vvbi5LLCBhLGIsYyxkKTsgXAorICAgICAgIFBJMShhLGIsYyxkKTsgXAorICAgICAgIEdBTU1BKGEsYixjLGQpOyBcCisgICAgICAgUEkyKGEsYixjLGQpOworCisgICBmb3IgKHIgPSAwOyByIDwgMTY7ICsrcikgeworICAgICAgIFJPVU5EKHIpOworICAgfQorCisjdW5kZWYgUk9VTkQKKworICAgYSBePSBSQ1sxNl07CisgICBUSEVUQShza2V5LT5ub2VrZW9uLkssIGEsIGIsIGMsIGQpOworICAgCisgICBTVE9SRTMySChhLCZjdFswXSk7IFNUT1JFMzJIKGIsJmN0WzRdKTsKKyAgIFNUT1JFMzJIKGMsJmN0WzhdKTsgU1RPUkUzMkgoZCwmY3RbMTJdKTsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitpbnQgbm9la2Vvbl9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICBpbnQgZXJyID0gX25vZWtlb25fZWNiX2VuY3J5cHQocHQsIGN0LCBza2V5KTsKKyAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIpICogNSArIHNpemVvZihpbnQpKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKyNlbmRpZgorCisvKioKKyAgRGVjcnlwdHMgYSBibG9jayBvZiB0ZXh0IHdpdGggTm9la2VvbgorICBAcGFyYW0gY3QgVGhlIGlucHV0IGNpcGhlcnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gcHQgVGhlIG91dHB1dCBwbGFpbnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZCAKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfbm9la2Vvbl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZWxzZQoraW50IG5vZWtlb25fZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2VuZGlmCit7CisgICB1bG9uZzMyIGEsYixjLGQsIHRlbXA7CisgICBpbnQgcjsKKworICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAgICE9IE5VTEwpOworICAgCisgICBMT0FEMzJIKGEsJmN0WzBdKTsgTE9BRDMySChiLCZjdFs0XSk7CisgICBMT0FEMzJIKGMsJmN0WzhdKTsgTE9BRDMySChkLCZjdFsxMl0pOworICAgCisKKyNkZWZpbmUgUk9VTkQoaSkgXAorICAgICAgIFRIRVRBKHNrZXktPm5vZWtlb24uZEssIGEsYixjLGQpOyBcCisgICAgICAgYSBePSBSQ1tpXTsgXAorICAgICAgIFBJMShhLGIsYyxkKTsgXAorICAgICAgIEdBTU1BKGEsYixjLGQpOyBcCisgICAgICAgUEkyKGEsYixjLGQpOyAKKworICAgZm9yIChyID0gMTY7IHIgPiAwOyAtLXIpIHsKKyAgICAgICBST1VORChyKTsKKyAgIH0KKworI3VuZGVmIFJPVU5ECisKKyAgIFRIRVRBKHNrZXktPm5vZWtlb24uZEssIGEsYixjLGQpOworICAgYSBePSBSQ1swXTsKKyAgIFNUT1JFMzJIKGEsJnB0WzBdKTsgU1RPUkUzMkgoYiwgJnB0WzRdKTsKKyAgIFNUT1JFMzJIKGMsJnB0WzhdKTsgU1RPUkUzMkgoZCwgJnB0WzEyXSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK2ludCBub2VrZW9uX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIGludCBlcnIgPSBfbm9la2Vvbl9lY2JfZGVjcnlwdChjdCwgcHQsIHNrZXkpOworICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiA1ICsgc2l6ZW9mKGludCkpOworICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKioKKyAgUGVyZm9ybXMgYSBzZWxmLXRlc3Qgb2YgdGhlIE5vZWtlb24gYmxvY2sgY2lwaGVyCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgZnVuY3Rpb25hbCwgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdCBoYXMgYmVlbiBkaXNhYmxlZAorKi8KK2ludCBub2VrZW9uX3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZQorIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICBpbnQga2V5bGVuOworICAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl0sIHB0WzE2XSwgY3RbMTZdOworIH0gdGVzdHNbXSA9IHsKKyAgIHsKKyAgICAgIDE2LAorICAgICAgeyAwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1IH0sCisgICAgICB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUgfSwKKyAgICAgIHsgMHgxOCwgMHhhNiwgMHhlYywgMHhlNSwgMHgyOCwgMHhhYSwgMHg3OSwgMHg3MywKKyAgICAgICAgMHgyOCwgMHhiMiwgMHhjMCwgMHg5MSwgMHhhMCwgMHgyZiwgMHg1NCwgMHhjNX0KKyAgIH0KKyB9OworIHN5bW1ldHJpY19rZXkga2V5OworIHVuc2lnbmVkIGNoYXIgdG1wWzJdWzE2XTsKKyBpbnQgZXJyLCBpLCB5OworIAorIGZvciAoaSA9IDA7IGkgPCAoaW50KShzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSkpOyBpKyspIHsKKyAgICB6ZXJvbWVtKCZrZXksIHNpemVvZihrZXkpKTsKKyAgICBpZiAoKGVyciA9IG5vZWtlb25fc2V0dXAodGVzdHNbaV0ua2V5LCB0ZXN0c1tpXS5rZXlsZW4sIDAsICZrZXkpKSAhPSBDUllQVF9PSykgeyAKKyAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgCisgICAgbm9la2Vvbl9lY2JfZW5jcnlwdCh0ZXN0c1tpXS5wdCwgdG1wWzBdLCAma2V5KTsKKyAgICBub2VrZW9uX2VjYl9kZWNyeXB0KHRtcFswXSwgdG1wWzFdLCAma2V5KTsKKyAgICBpZiAoWE1FTUNNUCh0bXBbMF0sIHRlc3RzW2ldLmN0LCAxNikgfHwgWE1FTUNNUCh0bXBbMV0sIHRlc3RzW2ldLnB0LCAxNikpIHsgCisjaWYgMAorICAgICAgIHByaW50ZigiXG5cblRlc3QgJWQgZmFpbGVkXG4iLCBpKTsKKyAgICAgICBpZiAoWE1FTUNNUCh0bXBbMF0sIHRlc3RzW2ldLmN0LCAxNikpIHsKKyAgICAgICAgICBwcmludGYoIkNUOiAiKTsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgICAgICAgICAgIHByaW50ZigiJTAyeCAiLCB0bXBbMF1baV0pOworICAgICAgICAgIH0KKyAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBwcmludGYoIlBUOiAiKTsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgICAgICAgICAgIHByaW50ZigiJTAyeCAiLCB0bXBbMV1baV0pOworICAgICAgICAgIH0KKyAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgfQorI2VuZGlmICAgICAgIAorICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgIH0KKworICAgICAgLyogbm93IHNlZSBpZiB3ZSBjYW4gZW5jcnlwdCBhbGwgemVybyBieXRlcyAxMDAwIHRpbWVzLCBkZWNyeXB0IGFuZCBjb21lIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCAqLworICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHRtcFswXVt5XSA9IDA7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwMDsgeSsrKSBub2VrZW9uX2VjYl9lbmNyeXB0KHRtcFswXSwgdG1wWzBdLCAma2V5KTsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwOyB5KyspIG5vZWtlb25fZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMF0sICZrZXkpOworICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIGlmICh0bXBbMF1beV0gIT0gMCkgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyB9ICAgICAgIAorIHJldHVybiBDUllQVF9PSzsKKyAjZW5kaWYKK30KKworLyoqIFRlcm1pbmF0ZSB0aGUgY29udGV4dCAKKyAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5CisqLwordm9pZCBub2VrZW9uX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSkKK3sKK30KKworLyoqCisgIEdldHMgc3VpdGFibGUga2V5IHNpemUKKyAgQHBhcmFtIGtleXNpemUgW2luL291dF0gVGhlIGxlbmd0aCBvZiB0aGUgcmVjb21tZW5kZWQga2V5IChpbiBieXRlcykuICBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgdGhlIHN1aXRhYmxlIHNpemUgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICBAcmV0dXJuIENSWVBUX09LIGlmIHRoZSBpbnB1dCBrZXkgc2l6ZSBpcyBhY2NlcHRhYmxlLgorKi8KK2ludCBub2VrZW9uX2tleXNpemUoaW50ICprZXlzaXplKQoreworICAgTFRDX0FSR0NISyhrZXlzaXplICE9IE5VTEwpOworICAgaWYgKCprZXlzaXplIDwgMTYpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICB9IGVsc2UgeworICAgICAgKmtleXNpemUgPSAxNjsKKyAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgIH0KK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvbm9la2Vvbi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3JjMi5jIGIvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvcmMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU2MmNkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3JjMi5jCkBAIC0wLDAgKzEsMzYyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCisqIFRvIGNvbW1lbW9yYXRlIHRoZSAxOTk2IFJTQSBEYXRhIFNlY3VyaXR5IENvbmZlcmVuY2UsIHRoZSBmb2xsb3dpbmcgICoKKyogY29kZSBpcyByZWxlYXNlZCBpbnRvIHRoZSBwdWJsaWMgZG9tYWluIGJ5IGl0cyBhdXRob3IuICBQcm9zdCEgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIFRoaXMgY2lwaGVyIHVzZXMgMTYtYml0IHdvcmRzIGFuZCBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXJpbmcuICAgICAgICoKKyogSSB3b25kZXIgd2hpY2ggcHJvY2Vzc29yIGl0IHdhcyBvcHRpbWl6ZWQgZm9yPyAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIFRoYW5rcyB0byBDb2RlVmlldywgU29mdEljZSwgYW5kIEQ4NiBmb3IgaGVscGluZyBicmluZyB0aGlzIGNvZGUgdG8gICoKKyogdGhlIHB1YmxpYy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8dG9tY3J5cHQuaD4KKworLyoqCisgIEBmaWxlIHJjMi5jCisgIEltcGxlbWVudGF0aW9uIG9mIFJDMgorKi8gIAorCisjaWZkZWYgUkMyCisKK2NvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgcmMyX2Rlc2MgPSB7CisgICAicmMyIiwKKyAgIDEyLCA4LCAxMjgsIDgsIDE2LAorICAgJnJjMl9zZXR1cCwKKyAgICZyYzJfZWNiX2VuY3J5cHQsCisgICAmcmMyX2VjYl9kZWNyeXB0LAorICAgJnJjMl90ZXN0LAorICAgJnJjMl9kb25lLAorICAgJnJjMl9rZXlzaXplLAorICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfTsKKworLyogMjU2LWVudHJ5IHBlcm11dGF0aW9uIHRhYmxlLCBwcm9iYWJseSBkZXJpdmVkIHNvbWVob3cgZnJvbSBwaSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcGVybXV0ZVsyNTZdID0geworICAgICAgICAyMTcsMTIwLDI0OSwxOTYsIDI1LDIyMSwxODEsMjM3LCA0MCwyMzMsMjUzLDEyMSwgNzQsMTYwLDIxNiwxNTcsCisgICAgICAgIDE5OCwxMjYsIDU1LDEzMSwgNDMsMTE4LCA4MywxNDIsIDk4LCA3NiwxMDAsMTM2LCA2OCwxMzksMjUxLDE2MiwKKyAgICAgICAgIDIzLDE1NCwgODksMjQ1LDEzNSwxNzksIDc5LCAxOSwgOTcsIDY5LDEwOSwxNDEsICA5LDEyOSwxMjUsIDUwLAorICAgICAgICAxODksMTQzLCA2NCwyMzUsMTM0LDE4MywxMjMsIDExLDI0MCwxNDksIDMzLCAzNCwgOTIsMTA3LCA3OCwxMzAsCisgICAgICAgICA4NCwyMTQsMTAxLDE0NywyMDYsIDk2LDE3OCwgMjgsMTE1LCA4NiwxOTIsIDIwLDE2NywxNDAsMjQxLDIyMCwKKyAgICAgICAgIDE4LDExNywyMDIsIDMxLCA1OSwxOTAsMjI4LDIwOSwgNjYsIDYxLDIxMiwgNDgsMTYzLCA2MCwxODIsIDM4LAorICAgICAgICAxMTEsMTkxLCAxNCwyMTgsIDcwLDEwNSwgIDcsIDg3LCAzOSwyNDIsIDI5LDE1NSwxODgsMTQ4LCA2NywgIDMsCisgICAgICAgIDI0OCwgMTcsMTk5LDI0NiwxNDQsMjM5LCA2MiwyMzEsICA2LDE5NSwyMTMsIDQ3LDIwMCwxMDIsIDMwLDIxNSwKKyAgICAgICAgICA4LDIzMiwyMzQsMjIyLDEyOCwgODIsMjM4LDI0NywxMzIsMTcwLDExNCwxNzIsIDUzLCA3NywxMDYsIDQyLAorICAgICAgICAxNTAsIDI2LDIxMCwxMTMsIDkwLCAyMSwgNzMsMTE2LCA3NSwxNTksMjA4LCA5NCwgIDQsIDI0LDE2NCwyMzYsCisgICAgICAgIDE5NCwyMjQsIDY1LDExMCwgMTUsIDgxLDIwMywyMDQsIDM2LDE0NSwxNzUsIDgwLDE2MSwyNDQsMTEyLCA1NywKKyAgICAgICAgMTUzLDEyNCwgNTgsMTMzLCAzNSwxODQsMTgwLDEyMiwyNTIsICAyLCA1NCwgOTEsIDM3LCA4NSwxNTEsIDQ5LAorICAgICAgICAgNDUsIDkzLDI1MCwxNTIsMjI3LDEzOCwxNDYsMTc0LCAgNSwyMjMsIDQxLCAxNiwxMDMsMTA4LDE4NiwyMDEsCisgICAgICAgIDIxMSwgIDAsMjMwLDIwNywyMjUsMTU4LDE2OCwgNDQsIDk5LCAyMiwgIDEsIDYzLCA4OCwyMjYsMTM3LDE2OSwKKyAgICAgICAgIDEzLCA1NiwgNTIsIDI3LDE3MSwgNTEsMjU1LDE3NiwxODcsIDcyLCAxMiwgOTUsMTg1LDE3NywyMDUsIDQ2LAorICAgICAgICAxOTcsMjQzLDIxOSwgNzEsMjI5LDE2NSwxNTYsMTE5LCAxMCwxNjYsIDMyLDEwNCwyNTQsMTI3LDE5MywxNzMKK307CisKKyAvKioKKyAgICBJbml0aWFsaXplIHRoZSBSQzIgYmxvY2sgY2lwaGVyCisgICAgQHBhcmFtIGtleSBUaGUgc3ltbWV0cmljIGtleSB5b3Ugd2lzaCB0byBwYXNzCisgICAgQHBhcmFtIGtleWxlbiBUaGUga2V5IGxlbmd0aCBpbiBieXRlcworICAgIEBwYXJhbSBudW1fcm91bmRzIFRoZSBudW1iZXIgb2Ygcm91bmRzIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICAgQHBhcmFtIHNrZXkgVGhlIGtleSBpbiBhcyBzY2hlZHVsZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IHJjMl9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgdW5zaWduZWQgKnhrZXkgPSBza2V5LT5yYzIueGtleTsKKyAgIHVuc2lnbmVkIGNoYXIgdG1wWzEyOF07CisgICB1bnNpZ25lZCBUOCwgVE07CisgICBpbnQgaSwgYml0czsKKworICAgTFRDX0FSR0NISyhrZXkgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworCisgICBpZiAoa2V5bGVuIDwgOCB8fCBrZXlsZW4gPiAxMjgpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICB9CisKKyAgIGlmIChudW1fcm91bmRzICE9IDAgJiYgbnVtX3JvdW5kcyAhPSAxNikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgfQorCisgICBmb3IgKGkgPSAwOyBpIDwga2V5bGVuOyBpKyspIHsKKyAgICAgICB0bXBbaV0gPSBrZXlbaV0gJiAyNTU7CisgICB9CisKKyAgICAvKiBQaGFzZSAxOiBFeHBhbmQgaW5wdXQga2V5IHRvIDEyOCBieXRlcyAqLworICAgIGlmIChrZXlsZW4gPCAxMjgpIHsKKyAgICAgICAgZm9yIChpID0ga2V5bGVuOyBpIDwgMTI4OyBpKyspIHsKKyAgICAgICAgICAgIHRtcFtpXSA9IHBlcm11dGVbKHRtcFtpIC0gMV0gKyB0bXBbaSAtIGtleWxlbl0pICYgMjU1XTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKiBQaGFzZSAyIC0gcmVkdWNlIGVmZmVjdGl2ZSBrZXkgc2l6ZSB0byAiYml0cyIgKi8KKyAgICBiaXRzID0ga2V5bGVuPDwzOworICAgIFQ4ICAgPSAodW5zaWduZWQpKGJpdHMrNyk+PjM7CisgICAgVE0gICA9ICgyNTUgPj4gKHVuc2lnbmVkKSg3ICYgLWJpdHMpKTsKKyAgICB0bXBbMTI4IC0gVDhdID0gcGVybXV0ZVt0bXBbMTI4IC0gVDhdICYgVE1dOworICAgIGZvciAoaSA9IDEyNyAtIFQ4OyBpID49IDA7IGktLSkgeworICAgICAgICB0bXBbaV0gPSBwZXJtdXRlW3RtcFtpICsgMV0gXiB0bXBbaSArIFQ4XV07CisgICAgfQorCisgICAgLyogUGhhc2UgMyAtIGNvcHkgdG8geGtleSBpbiBsaXR0bGUtZW5kaWFuIG9yZGVyICovCisgICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKKyAgICAgICAgeGtleVtpXSA9ICAodW5zaWduZWQpdG1wWzIqaV0gKyAoKHVuc2lnbmVkKXRtcFsyKmkrMV0gPDwgOCk7CisgICAgfSAgICAgICAgCisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgICB6ZXJvbWVtKHRtcCwgc2l6ZW9mKHRtcCkpOworI2VuZGlmCisgICAgCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyogRW5jcnlwdCBhbiA4LWJ5dGUgYmxvY2sgb2YgcGxhaW50ZXh0IHVzaW5nIHRoZSBnaXZlbiBrZXkuICAgICAgICAgICAgKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgRW5jcnlwdHMgYSBibG9jayBvZiB0ZXh0IHdpdGggUkMyCisgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQorICBAcGFyYW0gY3QgVGhlIG91dHB1dCBjaXBoZXJ0ZXh0ICg4IGJ5dGVzKQorICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IF9yYzJfZWNiX2VuY3J5cHQoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZWxzZQoraW50IHJjMl9lY2JfZW5jcnlwdCggY29uc3QgdW5zaWduZWQgY2hhciAqcHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbmRpZgoreworICAgIHVuc2lnbmVkICp4a2V5OworICAgIHVuc2lnbmVkIHg3NiwgeDU0LCB4MzIsIHgxMCwgaTsKKworICAgIExUQ19BUkdDSEsocHQgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoY3QgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhza2V5ICAgIT0gTlVMTCk7CisKKyAgICB4a2V5ID0gc2tleS0+cmMyLnhrZXk7CisKKyAgICB4NzYgPSAoKHVuc2lnbmVkKXB0WzddIDw8IDgpICsgKHVuc2lnbmVkKXB0WzZdOworICAgIHg1NCA9ICgodW5zaWduZWQpcHRbNV0gPDwgOCkgKyAodW5zaWduZWQpcHRbNF07CisgICAgeDMyID0gKCh1bnNpZ25lZClwdFszXSA8PCA4KSArICh1bnNpZ25lZClwdFsyXTsKKyAgICB4MTAgPSAoKHVuc2lnbmVkKXB0WzFdIDw8IDgpICsgKHVuc2lnbmVkKXB0WzBdOworCisgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKKyAgICAgICAgeDEwID0gKHgxMCArICh4MzIgJiB+eDc2KSArICh4NTQgJiB4NzYpICsgeGtleVs0KmkrMF0pICYgMHhGRkZGOworICAgICAgICB4MTAgPSAoKHgxMCA8PCAxKSB8ICh4MTAgPj4gMTUpKTsKKworICAgICAgICB4MzIgPSAoeDMyICsgKHg1NCAmIH54MTApICsgKHg3NiAmIHgxMCkgKyB4a2V5WzQqaSsxXSkgJiAweEZGRkY7CisgICAgICAgIHgzMiA9ICgoeDMyIDw8IDIpIHwgKHgzMiA+PiAxNCkpOworCisgICAgICAgIHg1NCA9ICh4NTQgKyAoeDc2ICYgfngzMikgKyAoeDEwICYgeDMyKSArIHhrZXlbNCppKzJdKSAmIDB4RkZGRjsKKyAgICAgICAgeDU0ID0gKCh4NTQgPDwgMykgfCAoeDU0ID4+IDEzKSk7CisKKyAgICAgICAgeDc2ID0gKHg3NiArICh4MTAgJiB+eDU0KSArICh4MzIgJiB4NTQpICsgeGtleVs0KmkrM10pICYgMHhGRkZGOworICAgICAgICB4NzYgPSAoKHg3NiA8PCA1KSB8ICh4NzYgPj4gMTEpKTsKKworICAgICAgICBpZiAoaSA9PSA0IHx8IGkgPT0gMTApIHsKKyAgICAgICAgICAgIHgxMCA9ICh4MTAgKyB4a2V5W3g3NiAmIDYzXSkgJiAweEZGRkY7CisgICAgICAgICAgICB4MzIgPSAoeDMyICsgeGtleVt4MTAgJiA2M10pICYgMHhGRkZGOworICAgICAgICAgICAgeDU0ID0gKHg1NCArIHhrZXlbeDMyICYgNjNdKSAmIDB4RkZGRjsKKyAgICAgICAgICAgIHg3NiA9ICh4NzYgKyB4a2V5W3g1NCAmIDYzXSkgJiAweEZGRkY7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjdFswXSA9ICh1bnNpZ25lZCBjaGFyKXgxMDsKKyAgICBjdFsxXSA9ICh1bnNpZ25lZCBjaGFyKSh4MTAgPj4gOCk7CisgICAgY3RbMl0gPSAodW5zaWduZWQgY2hhcil4MzI7CisgICAgY3RbM10gPSAodW5zaWduZWQgY2hhcikoeDMyID4+IDgpOworICAgIGN0WzRdID0gKHVuc2lnbmVkIGNoYXIpeDU0OworICAgIGN0WzVdID0gKHVuc2lnbmVkIGNoYXIpKHg1NCA+PiA4KTsKKyAgICBjdFs2XSA9ICh1bnNpZ25lZCBjaGFyKXg3NjsKKyAgICBjdFs3XSA9ICh1bnNpZ25lZCBjaGFyKSh4NzYgPj4gOCk7CisgCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitpbnQgcmMyX2VjYl9lbmNyeXB0KCBjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgIGludCBlcnIgPSBfcmMyX2VjYl9lbmNyeXB0KHB0LCBjdCwgc2tleSk7CisgICAgYnVybl9zdGFjayhzaXplb2YodW5zaWduZWQgKikgKyBzaXplb2YodW5zaWduZWQpICogNSk7CisgICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKKyogRGVjcnlwdCBhbiA4LWJ5dGUgYmxvY2sgb2YgY2lwaGVydGV4dCB1c2luZyB0aGUgZ2l2ZW4ga2V5LiAgICAgICAgICAgKgorXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgRGVjcnlwdHMgYSBibG9jayBvZiB0ZXh0IHdpdGggUkMyCisgIEBwYXJhbSBjdCBUaGUgaW5wdXQgY2lwaGVydGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIHB0IFRoZSBvdXRwdXQgcGxhaW50ZXh0ICg4IGJ5dGVzKQorICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZCAKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfcmMyX2VjYl9kZWNyeXB0KCBjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2Vsc2UKK2ludCByYzJfZWNiX2RlY3J5cHQoIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZW5kaWYKK3sKKyAgICB1bnNpZ25lZCB4NzYsIHg1NCwgeDMyLCB4MTA7CisgICAgdW5zaWduZWQgKnhrZXk7CisgICAgaW50IGk7CisKKyAgICBMVENfQVJHQ0hLKHB0ICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGN0ICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoc2tleSAgICE9IE5VTEwpOworCisgICAgeGtleSA9IHNrZXktPnJjMi54a2V5OworCisgICAgeDc2ID0gKCh1bnNpZ25lZCljdFs3XSA8PCA4KSArICh1bnNpZ25lZCljdFs2XTsKKyAgICB4NTQgPSAoKHVuc2lnbmVkKWN0WzVdIDw8IDgpICsgKHVuc2lnbmVkKWN0WzRdOworICAgIHgzMiA9ICgodW5zaWduZWQpY3RbM10gPDwgOCkgKyAodW5zaWduZWQpY3RbMl07CisgICAgeDEwID0gKCh1bnNpZ25lZCljdFsxXSA8PCA4KSArICh1bnNpZ25lZCljdFswXTsKKworICAgIGZvciAoaSA9IDE1OyBpID49IDA7IGktLSkgeworICAgICAgICBpZiAoaSA9PSA0IHx8IGkgPT0gMTApIHsKKyAgICAgICAgICAgIHg3NiA9ICh4NzYgLSB4a2V5W3g1NCAmIDYzXSkgJiAweEZGRkY7CisgICAgICAgICAgICB4NTQgPSAoeDU0IC0geGtleVt4MzIgJiA2M10pICYgMHhGRkZGOworICAgICAgICAgICAgeDMyID0gKHgzMiAtIHhrZXlbeDEwICYgNjNdKSAmIDB4RkZGRjsKKyAgICAgICAgICAgIHgxMCA9ICh4MTAgLSB4a2V5W3g3NiAmIDYzXSkgJiAweEZGRkY7CisgICAgICAgIH0KKworICAgICAgICB4NzYgPSAoKHg3NiA8PCAxMSkgfCAoeDc2ID4+IDUpKTsKKyAgICAgICAgeDc2ID0gKHg3NiAtICgoeDEwICYgfng1NCkgKyAoeDMyICYgeDU0KSArIHhrZXlbNCppKzNdKSkgJiAweEZGRkY7CisKKyAgICAgICAgeDU0ID0gKCh4NTQgPDwgMTMpIHwgKHg1NCA+PiAzKSk7CisgICAgICAgIHg1NCA9ICh4NTQgLSAoKHg3NiAmIH54MzIpICsgKHgxMCAmIHgzMikgKyB4a2V5WzQqaSsyXSkpICYgMHhGRkZGOworCisgICAgICAgIHgzMiA9ICgoeDMyIDw8IDE0KSB8ICh4MzIgPj4gMikpOworICAgICAgICB4MzIgPSAoeDMyIC0gKCh4NTQgJiB+eDEwKSArICh4NzYgJiB4MTApICsgeGtleVs0KmkrMV0pKSAmIDB4RkZGRjsKKworICAgICAgICB4MTAgPSAoKHgxMCA8PCAxNSkgfCAoeDEwID4+IDEpKTsKKyAgICAgICAgeDEwID0gKHgxMCAtICgoeDMyICYgfng3NikgKyAoeDU0ICYgeDc2KSArIHhrZXlbNCppKzBdKSkgJiAweEZGRkY7CisgICAgfQorCisgICAgcHRbMF0gPSAodW5zaWduZWQgY2hhcil4MTA7CisgICAgcHRbMV0gPSAodW5zaWduZWQgY2hhcikoeDEwID4+IDgpOworICAgIHB0WzJdID0gKHVuc2lnbmVkIGNoYXIpeDMyOworICAgIHB0WzNdID0gKHVuc2lnbmVkIGNoYXIpKHgzMiA+PiA4KTsKKyAgICBwdFs0XSA9ICh1bnNpZ25lZCBjaGFyKXg1NDsKKyAgICBwdFs1XSA9ICh1bnNpZ25lZCBjaGFyKSh4NTQgPj4gOCk7CisgICAgcHRbNl0gPSAodW5zaWduZWQgY2hhcil4NzY7CisgICAgcHRbN10gPSAodW5zaWduZWQgY2hhcikoeDc2ID4+IDgpOworCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitpbnQgcmMyX2VjYl9kZWNyeXB0KCBjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgIGludCBlcnIgPSBfcmMyX2VjYl9kZWNyeXB0KGN0LCBwdCwgc2tleSk7CisgICAgYnVybl9zdGFjayhzaXplb2YodW5zaWduZWQgKikgKyBzaXplb2YodW5zaWduZWQpICogNCArIHNpemVvZihpbnQpKTsKKyAgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qKgorICBQZXJmb3JtcyBhIHNlbGYtdGVzdCBvZiB0aGUgUkMyIGJsb2NrIGNpcGhlcgorICBAcmV0dXJuIENSWVBUX09LIGlmIGZ1bmN0aW9uYWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3QgaGFzIGJlZW4gZGlzYWJsZWQKKyovCitpbnQgcmMyX3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZSAgICAKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICBpbnQga2V5bGVuOworICAgICAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl0sIHB0WzhdLCBjdFs4XTsKKyAgIH0gdGVzdHNbXSA9IHsKKworICAgeyA4LAorICAgICB7IDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgICB7IDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSwKKyAgICAgeyAweDMwLCAweDY0LCAweDllLCAweGRmLCAweDliLCAweGU3LCAweGQyLCAweGMyIH0KKworICAgfSwKKyAgIHsgMTYsCisgICAgIHsgMHg4OCwgMHhiYywgMHhhOSwgMHgwZSwgMHg5MCwgMHg4NywgMHg1YSwgMHg3ZiwKKyAgICAgICAweDBmLCAweDc5LCAweGMzLCAweDg0LCAweDYyLCAweDdiLCAweGFmLCAweGIyIH0sCisgICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgICB7IDB4MjIsIDB4NjksIDB4NTUsIDB4MmEsIDB4YjAsIDB4ZjgsIDB4NWMsIDB4YTYgfQorICAgfQorICB9OworICAgIGludCB4LCB5LCBlcnI7CisgICAgc3ltbWV0cmljX2tleSBza2V5OworICAgIHVuc2lnbmVkIGNoYXIgdG1wWzJdWzhdOworCisgICAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZih0ZXN0cykgLyBzaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAgIHplcm9tZW0odG1wLCBzaXplb2YodG1wKSk7CisgICAgICAgIGlmICgoZXJyID0gcmMyX3NldHVwKHRlc3RzW3hdLmtleSwgdGVzdHNbeF0ua2V5bGVuLCAwLCAmc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJjMl9lY2JfZW5jcnlwdCh0ZXN0c1t4XS5wdCwgdG1wWzBdLCAmc2tleSk7CisgICAgICAgIHJjMl9lY2JfZGVjcnlwdCh0bXBbMF0sIHRtcFsxXSwgJnNrZXkpOworICAgICAgICAKKyAgICAgICAgaWYgKFhNRU1DTVAodG1wWzBdLCB0ZXN0c1t4XS5jdCwgOCkgIT0gMCB8fCBYTUVNQ01QKHRtcFsxXSwgdGVzdHNbeF0ucHQsIDgpICE9IDApIHsKKyAgICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICAgfQorCisgICAgICAvKiBub3cgc2VlIGlmIHdlIGNhbiBlbmNyeXB0IGFsbCB6ZXJvIGJ5dGVzIDEwMDAgdGltZXMsIGRlY3J5cHQgYW5kIGNvbWUgYmFjayB3aGVyZSB3ZSBzdGFydGVkICovCisgICAgICBmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSB0bXBbMF1beV0gPSAwOworICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykgcmMyX2VjYl9lbmNyeXB0KHRtcFswXSwgdG1wWzBdLCAmc2tleSk7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwMDsgeSsrKSByYzJfZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMF0sICZza2V5KTsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCA4OyB5KyspIGlmICh0bXBbMF1beV0gIT0gMCkgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICB9CisgICAgcmV0dXJuIENSWVBUX09LOworICAgI2VuZGlmCit9CisKKy8qKiBUZXJtaW5hdGUgdGhlIGNvbnRleHQgCisgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorKi8KK3ZvaWQgcmMyX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSkKK3sKK30KKworLyoqCisgIEdldHMgc3VpdGFibGUga2V5IHNpemUKKyAgQHBhcmFtIGtleXNpemUgW2luL291dF0gVGhlIGxlbmd0aCBvZiB0aGUgcmVjb21tZW5kZWQga2V5IChpbiBieXRlcykuICBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgdGhlIHN1aXRhYmxlIHNpemUgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICBAcmV0dXJuIENSWVBUX09LIGlmIHRoZSBpbnB1dCBrZXkgc2l6ZSBpcyBhY2NlcHRhYmxlLgorKi8KK2ludCByYzJfa2V5c2l6ZShpbnQgKmtleXNpemUpCit7CisgICBMVENfQVJHQ0hLKGtleXNpemUgIT0gTlVMTCk7CisgICBpZiAoKmtleXNpemUgPCA4KSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0gZWxzZSBpZiAoKmtleXNpemUgPiAxMjgpIHsKKyAgICAgICAqa2V5c2l6ZSA9IDEyODsKKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKworCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3JjMi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3JjNS5jIGIvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvcmM1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ1ZmRiOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3JjNS5jCkBAIC0wLDAgKzEsMzIyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKioKKyAgIEBmaWxlIHJjNS5jCisgICBSQzUgY29kZSBieSBUb20gU3QgRGVuaXMgCisqLworCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIFJDNQorCitjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIHJjNV9kZXNjID0KK3sKKyAgICAicmM1IiwKKyAgICAyLAorICAgIDgsIDEyOCwgOCwgMTIsCisgICAgJnJjNV9zZXR1cCwKKyAgICAmcmM1X2VjYl9lbmNyeXB0LAorICAgICZyYzVfZWNiX2RlY3J5cHQsCisgICAgJnJjNV90ZXN0LAorICAgICZyYzVfZG9uZSwKKyAgICAmcmM1X2tleXNpemUsCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgc3RhYls1MF0gPSB7CisweGI3ZTE1MTYzVUwsIDB4NTYxOGNiMWNVTCwgMHhmNDUwNDRkNVVMLCAweDkyODdiZThlVUwsIDB4MzBiZjM4NDdVTCwgMHhjZWY2YjIwMFVMLCAweDZkMmUyYmI5VUwsIDB4MGI2NWE1NzJVTCwKKzB4YTk5ZDFmMmJVTCwgMHg0N2Q0OThlNFVMLCAweGU2MGMxMjlkVUwsIDB4ODQ0MzhjNTZVTCwgMHgyMjdiMDYwZlVMLCAweGMwYjI3ZmM4VUwsIDB4NWVlOWY5ODFVTCwgMHhmZDIxNzMzYVVMLAorMHg5YjU4ZWNmM1VMLCAweDM5OTA2NmFjVUwsIDB4ZDdjN2UwNjVVTCwgMHg3NWZmNWExZVVMLCAweDE0MzZkM2Q3VUwsIDB4YjI2ZTRkOTBVTCwgMHg1MGE1Yzc0OVVMLCAweGVlZGQ0MTAyVUwsCisweDhkMTRiYWJiVUwsIDB4MmI0YzM0NzRVTCwgMHhjOTgzYWUyZFVMLCAweDY3YmIyN2U2VUwsIDB4MDVmMmExOWZVTCwgMHhhNDJhMWI1OFVMLCAweDQyNjE5NTExVUwsIDB4ZTA5OTBlY2FVTCwKKzB4N2VkMDg4ODNVTCwgMHgxZDA4MDIzY1VMLCAweGJiM2Y3YmY1VUwsIDB4NTk3NmY1YWVVTCwgMHhmN2FlNmY2N1VMLCAweDk1ZTVlOTIwVUwsIDB4MzQxZDYyZDlVTCwgMHhkMjU0ZGM5MlVMLAorMHg3MDhjNTY0YlVMLCAweDBlYzNkMDA0VUwsIDB4YWNmYjQ5YmRVTCwgMHg0YjMyYzM3NlVMLCAweGU5NmEzZDJmVUwsIDB4ODdhMWI2ZThVTCwgMHgyNWQ5MzBhMVVMLCAweGM0MTBhYTVhVUwsCisweDYyNDgyNDEzVUwsIDB4MDA3ZjlkY2NVTAorfTsKKworIC8qKgorICAgIEluaXRpYWxpemUgdGhlIFJDNSBibG9jayBjaXBoZXIKKyAgICBAcGFyYW0ga2V5IFRoZSBzeW1tZXRyaWMga2V5IHlvdSB3aXNoIHRvIHBhc3MKKyAgICBAcGFyYW0ga2V5bGVuIFRoZSBrZXkgbGVuZ3RoIGluIGJ5dGVzCisgICAgQHBhcmFtIG51bV9yb3VuZHMgVGhlIG51bWJlciBvZiByb3VuZHMgZGVzaXJlZCAoMCBmb3IgZGVmYXVsdCkKKyAgICBAcGFyYW0gc2tleSBUaGUga2V5IGluIGFzIHNjaGVkdWxlZCBieSB0aGlzIGZ1bmN0aW9uLgorICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICovCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IF9yYzVfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbHNlCitpbnQgcmM1X3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZW5kaWYKK3sKKyAgICB1bG9uZzMyIExbNjRdLCAqUywgQSwgQiwgaSwgaiwgdiwgcywgdCwgbDsKKworICAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGtleSAgIT0gTlVMTCk7CisgICAgCisgICAgLyogdGVzdCBwYXJhbWV0ZXJzICovCisgICAgaWYgKG51bV9yb3VuZHMgPT0gMCkgeyAKKyAgICAgICBudW1fcm91bmRzID0gcmM1X2Rlc2MuZGVmYXVsdF9yb3VuZHM7CisgICAgfQorCisgICAgaWYgKG51bV9yb3VuZHMgPCAxMiB8fCBudW1fcm91bmRzID4gMjQpIHsgCisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgIH0KKworICAgIC8qIGtleSBtdXN0IGJlIGJldHdlZW4gNjQgYW5kIDEwMjQgYml0cyAqLworICAgIGlmIChrZXlsZW4gPCA4IHx8IGtleWxlbiA+IDEyOCkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICAgfQorICAgIAorICAgIHNrZXktPnJjNS5yb3VuZHMgPSBudW1fcm91bmRzOworICAgIFMgPSBza2V5LT5yYzUuSzsKKworICAgIC8qIGNvcHkgdGhlIGtleSBpbnRvIHRoZSBMIGFycmF5ICovCisgICAgZm9yIChBID0gaSA9IGogPSAwOyBpIDwgKHVsb25nMzIpa2V5bGVuOyApIHsgCisgICAgICAgIEEgPSAoQSA8PCA4KSB8ICgodWxvbmczMikoa2V5W2krK10gJiAyNTUpKTsKKyAgICAgICAgaWYgKChpICYgMykgPT0gMCkgeworICAgICAgICAgICBMW2orK10gPSBCU1dBUChBKTsKKyAgICAgICAgICAgQSA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoKGtleWxlbiAmIDMpICE9IDApIHsgCisgICAgICAgQSA8PD0gKHVsb25nMzIpKCg4ICogKDQgLSAoa2V5bGVuJjMpKSkpOyAKKyAgICAgICBMW2orK10gPSBCU1dBUChBKTsKKyAgICB9CisKKyAgICAvKiBzZXR1cCB0aGUgUyBhcnJheSAqLworICAgIHQgPSAodWxvbmczMikoMiAqIChudW1fcm91bmRzICsgMSkpOworICAgIFhNRU1DUFkoUywgc3RhYiwgdCAqIHNpemVvZigqUykpOworCisgICAgLyogbWl4IGJ1ZmZlciAqLworICAgIHMgPSAzICogTUFYKHQsIGopOworICAgIGwgPSBqOworICAgIGZvciAoQSA9IEIgPSBpID0gaiA9IHYgPSAwOyB2IDwgczsgdisrKSB7IAorICAgICAgICBBID0gU1tpXSA9IFJPTGMoU1tpXSArIEEgKyBCLCAzKTsKKyAgICAgICAgQiA9IExbal0gPSBST0woTFtqXSArIEEgKyBCLCAoQStCKSk7CisgICAgICAgIGlmICgrK2kgPT0gdCkgeyBpID0gMDsgfQorICAgICAgICBpZiAoKytqID09IGwpIHsgaiA9IDA7IH0KKyAgICB9CisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitpbnQgcmM1X3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICBpbnQgeDsKKyAgIHggPSBfcmM1X3NldHVwKGtleSwga2V5bGVuLCBudW1fcm91bmRzLCBza2V5KTsKKyAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIpICogMTIyICsgc2l6ZW9mKGludCkpOworICAgcmV0dXJuIHg7Cit9CisjZW5kaWYKKworLyoqCisgIEVuY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIFJDNQorICBAcGFyYW0gcHQgVGhlIGlucHV0IHBsYWludGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfcmM1X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbHNlCitpbnQgcmM1X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbmRpZgoreworICAgdWxvbmczMiBBLCBCLCAqSzsKKyAgIGludCByOworICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAgICE9IE5VTEwpOworCisgICBMT0FEMzJMKEEsICZwdFswXSk7CisgICBMT0FEMzJMKEIsICZwdFs0XSk7CisgICBBICs9IHNrZXktPnJjNS5LWzBdOworICAgQiArPSBza2V5LT5yYzUuS1sxXTsKKyAgIEsgID0gc2tleS0+cmM1LksgKyAyOworICAgCisgICBpZiAoKHNrZXktPnJjNS5yb3VuZHMgJiAxKSA9PSAwKSB7CisgICAgICBmb3IgKHIgPSAwOyByIDwgc2tleS0+cmM1LnJvdW5kczsgciArPSAyKSB7CisgICAgICAgICAgQSA9IFJPTChBIF4gQiwgQikgKyBLWzBdOworICAgICAgICAgIEIgPSBST0woQiBeIEEsIEEpICsgS1sxXTsKKyAgICAgICAgICBBID0gUk9MKEEgXiBCLCBCKSArIEtbMl07CisgICAgICAgICAgQiA9IFJPTChCIF4gQSwgQSkgKyBLWzNdOworICAgICAgICAgIEsgKz0gNDsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBmb3IgKHIgPSAwOyByIDwgc2tleS0+cmM1LnJvdW5kczsgcisrKSB7CisgICAgICAgICAgQSA9IFJPTChBIF4gQiwgQikgKyBLWzBdOworICAgICAgICAgIEIgPSBST0woQiBeIEEsIEEpICsgS1sxXTsKKyAgICAgICAgICBLICs9IDI7CisgICAgICB9CisgICB9CisgICBTVE9SRTMyTChBLCAmY3RbMF0pOworICAgU1RPUkUzMkwoQiwgJmN0WzRdKTsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitpbnQgcmM1X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIGludCBlcnIgPSBfcmM1X2VjYl9lbmNyeXB0KHB0LCBjdCwgc2tleSk7CisgICBidXJuX3N0YWNrKHNpemVvZih1bG9uZzMyKSAqIDIgKyBzaXplb2YoaW50KSk7CisgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qKgorICBEZWNyeXB0cyBhIGJsb2NrIG9mIHRleHQgd2l0aCBSQzUKKyAgQHBhcmFtIGN0IFRoZSBpbnB1dCBjaXBoZXJ0ZXh0ICg4IGJ5dGVzKQorICBAcGFyYW0gcHQgVGhlIG91dHB1dCBwbGFpbnRleHQgKDggYnl0ZXMpCisgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkIAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IF9yYzVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2Vsc2UKK2ludCByYzVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2VuZGlmCit7CisgICB1bG9uZzMyIEEsIEIsICpLOworICAgaW50IHI7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisKKyAgIExPQUQzMkwoQSwgJmN0WzBdKTsKKyAgIExPQUQzMkwoQiwgJmN0WzRdKTsKKyAgIEsgPSBza2V5LT5yYzUuSyArIChza2V5LT5yYzUucm91bmRzIDw8IDEpOworICAgCisgICBpZiAoKHNrZXktPnJjNS5yb3VuZHMgJiAxKSA9PSAwKSB7CisgICAgICAgSyAtPSAyOworICAgICAgIGZvciAociA9IHNrZXktPnJjNS5yb3VuZHMgLSAxOyByID49IDA7IHIgLT0gMikgeworICAgICAgICAgIEIgPSBST1IoQiAtIEtbM10sIEEpIF4gQTsKKyAgICAgICAgICBBID0gUk9SKEEgLSBLWzJdLCBCKSBeIEI7CisgICAgICAgICAgQiA9IFJPUihCIC0gS1sxXSwgQSkgXiBBOworICAgICAgICAgIEEgPSBST1IoQSAtIEtbMF0sIEIpIF4gQjsKKyAgICAgICAgICBLIC09IDQ7CisgICAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBmb3IgKHIgPSBza2V5LT5yYzUucm91bmRzIC0gMTsgciA+PSAwOyByLS0pIHsKKyAgICAgICAgICBCID0gUk9SKEIgLSBLWzFdLCBBKSBeIEE7CisgICAgICAgICAgQSA9IFJPUihBIC0gS1swXSwgQikgXiBCOworICAgICAgICAgIEsgLT0gMjsKKyAgICAgIH0KKyAgIH0KKyAgIEEgLT0gc2tleS0+cmM1LktbMF07CisgICBCIC09IHNrZXktPnJjNS5LWzFdOworICAgU1RPUkUzMkwoQSwgJnB0WzBdKTsKKyAgIFNUT1JFMzJMKEIsICZwdFs0XSk7CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworaW50IHJjNV9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICBpbnQgZXJyID0gX3JjNV9lY2JfZGVjcnlwdChjdCwgcHQsIHNrZXkpOworICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiAyICsgc2l6ZW9mKGludCkpOworICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKioKKyAgUGVyZm9ybXMgYSBzZWxmLXRlc3Qgb2YgdGhlIFJDNSBibG9jayBjaXBoZXIKKyAgQHJldHVybiBDUllQVF9PSyBpZiBmdW5jdGlvbmFsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0IGhhcyBiZWVuIGRpc2FibGVkCisqLworaW50IHJjNV90ZXN0KHZvaWQpCit7CisgI2lmbmRlZiBMVENfVEVTVAorICAgIHJldHVybiBDUllQVF9OT1A7CisgI2Vsc2UgICAgCisgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl0sIHB0WzhdLCBjdFs4XTsKKyAgIH0gdGVzdHNbXSA9IHsKKyAgIHsKKyAgICAgICB7IDB4OTEsIDB4NWYsIDB4NDYsIDB4MTksIDB4YmUsIDB4NDEsIDB4YjIsIDB4NTEsCisgICAgICAgICAweDYzLCAweDU1LCAweGE1LCAweDAxLCAweDEwLCAweGE5LCAweGNlLCAweDkxIH0sCisgICAgICAgeyAweDIxLCAweGE1LCAweGRiLCAweGVlLCAweDE1LCAweDRiLCAweDhmLCAweDZkIH0sCisgICAgICAgeyAweGY3LCAweGMwLCAweDEzLCAweGFjLCAweDViLCAweDJiLCAweDg5LCAweDUyIH0KKyAgIH0sCisgICB7CisgICAgICAgeyAweDc4LCAweDMzLCAweDQ4LCAweGU3LCAweDVhLCAweGViLCAweDBmLCAweDJmLAorICAgICAgICAgMHhkNywgMHhiMSwgMHg2OSwgMHhiYiwgMHg4ZCwgMHhjMSwgMHg2NywgMHg4NyB9LAorICAgICAgIHsgMHhGNywgMHhDMCwgMHgxMywgMHhBQywgMHg1QiwgMHgyQiwgMHg4OSwgMHg1MiB9LAorICAgICAgIHsgMHgyRiwgMHg0MiwgMHhCMywgMHhCNywgMHgwMywgMHg2OSwgMHhGQywgMHg5MiB9CisgICB9LAorICAgeworICAgICAgIHsgMHhEQywgMHg0OSwgMHhkYiwgMHgxMywgMHg3NSwgMHhhNSwgMHg1OCwgMHg0ZiwKKyAgICAgICAgIDB4NjQsIDB4ODUsIDB4YjQsIDB4MTMsIDB4YjUsIDB4ZjEsIDB4MmIsIDB4YWYgfSwKKyAgICAgICB7IDB4MkYsIDB4NDIsIDB4QjMsIDB4QjcsIDB4MDMsIDB4NjksIDB4RkMsIDB4OTIgfSwKKyAgICAgICB7IDB4NjUsIDB4YzEsIDB4NzgsIDB4YjIsIDB4ODQsIDB4ZDEsIDB4OTcsIDB4Y2MgfQorICAgfQorICAgfTsKKyAgIHVuc2lnbmVkIGNoYXIgdG1wWzJdWzhdOworICAgaW50IHgsIHksIGVycjsKKyAgIHN5bW1ldHJpY19rZXkga2V5OworCisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKSAvIHNpemVvZih0ZXN0c1swXSkpOyB4KyspIHsKKyAgICAgIC8qIHNldHVwIGtleSAqLworICAgICAgaWYgKChlcnIgPSByYzVfc2V0dXAodGVzdHNbeF0ua2V5LCAxNiwgMTIsICZrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKworICAgICAgLyogZW5jcnlwdCBhbmQgZGVjcnlwdCAqLworICAgICAgcmM1X2VjYl9lbmNyeXB0KHRlc3RzW3hdLnB0LCB0bXBbMF0sICZrZXkpOworICAgICAgcmM1X2VjYl9kZWNyeXB0KHRtcFswXSwgdG1wWzFdLCAma2V5KTsKKworICAgICAgLyogY29tcGFyZSAqLworICAgICAgaWYgKFhNRU1DTVAodG1wWzBdLCB0ZXN0c1t4XS5jdCwgOCkgIT0gMCB8fCBYTUVNQ01QKHRtcFsxXSwgdGVzdHNbeF0ucHQsIDgpICE9IDApIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICB9CisKKyAgICAgIC8qIG5vdyBzZWUgaWYgd2UgY2FuIGVuY3J5cHQgYWxsIHplcm8gYnl0ZXMgMTAwMCB0aW1lcywgZGVjcnlwdCBhbmQgY29tZSBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQgKi8KKyAgICAgIGZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHRtcFswXVt5XSA9IDA7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwMDsgeSsrKSByYzVfZWNiX2VuY3J5cHQodG1wWzBdLCB0bXBbMF0sICZrZXkpOworICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykgcmM1X2VjYl9kZWNyeXB0KHRtcFswXSwgdG1wWzBdLCAma2V5KTsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCA4OyB5KyspIGlmICh0bXBbMF1beV0gIT0gMCkgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKKyAgI2VuZGlmCit9CisKKy8qKiBUZXJtaW5hdGUgdGhlIGNvbnRleHQgCisgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorKi8KK3ZvaWQgcmM1X2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSkKK3sKK30KKworLyoqCisgIEdldHMgc3VpdGFibGUga2V5IHNpemUKKyAgQHBhcmFtIGtleXNpemUgW2luL291dF0gVGhlIGxlbmd0aCBvZiB0aGUgcmVjb21tZW5kZWQga2V5IChpbiBieXRlcykuICBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgdGhlIHN1aXRhYmxlIHNpemUgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICBAcmV0dXJuIENSWVBUX09LIGlmIHRoZSBpbnB1dCBrZXkgc2l6ZSBpcyBhY2NlcHRhYmxlLgorKi8KK2ludCByYzVfa2V5c2l6ZShpbnQgKmtleXNpemUpCit7CisgICBMVENfQVJHQ0hLKGtleXNpemUgIT0gTlVMTCk7CisgICBpZiAoKmtleXNpemUgPCA4KSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+IDEyOCkgeworICAgICAgKmtleXNpemUgPSAxMjg7CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9yYzUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOCAyMzowMTowNiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9yYzYuYyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3JjNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZmEwMzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9yYzYuYwpAQCAtMCwwICsxLDM0OCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqCisgICBAZmlsZSByYzYuYworICAgUkM2IGNvZGUgYnkgVG9tIFN0IERlbmlzIAorKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgUkM2CisKK2NvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgcmM2X2Rlc2MgPQoreworICAgICJyYzYiLAorICAgIDMsCisgICAgOCwgMTI4LCAxNiwgMjAsCisgICAgJnJjNl9zZXR1cCwKKyAgICAmcmM2X2VjYl9lbmNyeXB0LAorICAgICZyYzZfZWNiX2RlY3J5cHQsCisgICAgJnJjNl90ZXN0LAorICAgICZyYzZfZG9uZSwKKyAgICAmcmM2X2tleXNpemUsCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgc3RhYls0NF0gPSB7CisweGI3ZTE1MTYzVUwsIDB4NTYxOGNiMWNVTCwgMHhmNDUwNDRkNVVMLCAweDkyODdiZThlVUwsIDB4MzBiZjM4NDdVTCwgMHhjZWY2YjIwMFVMLCAweDZkMmUyYmI5VUwsIDB4MGI2NWE1NzJVTCwKKzB4YTk5ZDFmMmJVTCwgMHg0N2Q0OThlNFVMLCAweGU2MGMxMjlkVUwsIDB4ODQ0MzhjNTZVTCwgMHgyMjdiMDYwZlVMLCAweGMwYjI3ZmM4VUwsIDB4NWVlOWY5ODFVTCwgMHhmZDIxNzMzYVVMLAorMHg5YjU4ZWNmM1VMLCAweDM5OTA2NmFjVUwsIDB4ZDdjN2UwNjVVTCwgMHg3NWZmNWExZVVMLCAweDE0MzZkM2Q3VUwsIDB4YjI2ZTRkOTBVTCwgMHg1MGE1Yzc0OVVMLCAweGVlZGQ0MTAyVUwsCisweDhkMTRiYWJiVUwsIDB4MmI0YzM0NzRVTCwgMHhjOTgzYWUyZFVMLCAweDY3YmIyN2U2VUwsIDB4MDVmMmExOWZVTCwgMHhhNDJhMWI1OFVMLCAweDQyNjE5NTExVUwsIDB4ZTA5OTBlY2FVTCwKKzB4N2VkMDg4ODNVTCwgMHgxZDA4MDIzY1VMLCAweGJiM2Y3YmY1VUwsIDB4NTk3NmY1YWVVTCwgMHhmN2FlNmY2N1VMLCAweDk1ZTVlOTIwVUwsIDB4MzQxZDYyZDlVTCwgMHhkMjU0ZGM5MlVMLAorMHg3MDhjNTY0YlVMLCAweDBlYzNkMDA0VUwsIDB4YWNmYjQ5YmRVTCwgMHg0YjMyYzM3NlVMIH07CisKKyAvKioKKyAgICBJbml0aWFsaXplIHRoZSBSQzYgYmxvY2sgY2lwaGVyCisgICAgQHBhcmFtIGtleSBUaGUgc3ltbWV0cmljIGtleSB5b3Ugd2lzaCB0byBwYXNzCisgICAgQHBhcmFtIGtleWxlbiBUaGUga2V5IGxlbmd0aCBpbiBieXRlcworICAgIEBwYXJhbSBudW1fcm91bmRzIFRoZSBudW1iZXIgb2Ygcm91bmRzIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICAgQHBhcmFtIHNrZXkgVGhlIGtleSBpbiBhcyBzY2hlZHVsZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAqLworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfcmM2X3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZWxzZQoraW50IHJjNl9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2VuZGlmCit7CisgICAgdWxvbmczMiBMWzY0XSwgU1s1MF0sIEEsIEIsIGksIGosIHYsIHMsIGw7CisKKyAgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgICAvKiB0ZXN0IHBhcmFtZXRlcnMgKi8KKyAgICBpZiAobnVtX3JvdW5kcyAhPSAwICYmIG51bV9yb3VuZHMgIT0gMjApIHsgCisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgIH0KKworICAgIC8qIGtleSBtdXN0IGJlIGJldHdlZW4gNjQgYW5kIDEwMjQgYml0cyAqLworICAgIGlmIChrZXlsZW4gPCA4IHx8IGtleWxlbiA+IDEyOCkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICAgfQorCisgICAgLyogY29weSB0aGUga2V5IGludG8gdGhlIEwgYXJyYXkgKi8KKyAgICBmb3IgKEEgPSBpID0gaiA9IDA7IGkgPCAodWxvbmczMilrZXlsZW47ICkgeyAKKyAgICAgICAgQSA9IChBIDw8IDgpIHwgKCh1bG9uZzMyKShrZXlbaSsrXSAmIDI1NSkpOworICAgICAgICBpZiAoIShpICYgMykpIHsKKyAgICAgICAgICAgTFtqKytdID0gQlNXQVAoQSk7CisgICAgICAgICAgIEEgPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgLyogaGFuZGxlIG9kZCBzaXplZCBrZXlzICovCisgICAgaWYgKGtleWxlbiAmIDMpIHsgCisgICAgICAgQSA8PD0gKDggKiAoNCAtIChrZXlsZW4mMykpKTsgCisgICAgICAgTFtqKytdID0gQlNXQVAoQSk7IAorICAgIH0KKworICAgIC8qIHNldHVwIHRoZSBTIGFycmF5ICovCisgICAgWE1FTUNQWShTLCBzdGFiLCA0NCAqIHNpemVvZihzdGFiWzBdKSk7CisKKyAgICAvKiBtaXggYnVmZmVyICovCisgICAgcyA9IDMgKiBNQVgoNDQsIGopOworICAgIGwgPSBqOworICAgIGZvciAoQSA9IEIgPSBpID0gaiA9IHYgPSAwOyB2IDwgczsgdisrKSB7IAorICAgICAgICBBID0gU1tpXSA9IFJPTGMoU1tpXSArIEEgKyBCLCAzKTsKKyAgICAgICAgQiA9IExbal0gPSBST0woTFtqXSArIEEgKyBCLCAoQStCKSk7CisgICAgICAgIGlmICgrK2kgPT0gNDQpIHsgaSA9IDA7IH0KKyAgICAgICAgaWYgKCsraiA9PSBsKSAgeyBqID0gMDsgfQorICAgIH0KKyAgICAKKyAgICAvKiBjb3B5IHRvIGtleSAqLworICAgIGZvciAoaSA9IDA7IGkgPCA0NDsgaSsrKSB7IAorICAgICAgICBza2V5LT5yYzYuS1tpXSA9IFNbaV07CisgICAgfQorICAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworaW50IHJjNl9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgaW50IHg7CisgICB4ID0gX3JjNl9zZXR1cChrZXksIGtleWxlbiwgbnVtX3JvdW5kcywgc2tleSk7CisgICBidXJuX3N0YWNrKHNpemVvZih1bG9uZzMyKSAqIDEyMik7CisgICByZXR1cm4geDsKK30KKyNlbmRpZgorCisvKioKKyAgRW5jcnlwdHMgYSBibG9jayBvZiB0ZXh0IHdpdGggUkM2CisgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICgxNiBieXRlcykKKyAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkCisqLworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfcmM2X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbHNlCitpbnQgcmM2X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbmRpZgoreworICAgdWxvbmczMiBhLGIsYyxkLHQsdSwgKks7CisgICBpbnQgcjsKKyAgIAorICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAgICE9IE5VTEwpOworICAgTE9BRDMyTChhLCZwdFswXSk7TE9BRDMyTChiLCZwdFs0XSk7TE9BRDMyTChjLCZwdFs4XSk7TE9BRDMyTChkLCZwdFsxMl0pOworCisgICBiICs9IHNrZXktPnJjNi5LWzBdOworICAgZCArPSBza2V5LT5yYzYuS1sxXTsKKworI2RlZmluZSBSTkQoYSxiLGMsZCkgXAorICAgICAgIHQgPSAoYiAqIChiICsgYiArIDEpKTsgdCA9IFJPTGModCwgNSk7IFwKKyAgICAgICB1ID0gKGQgKiAoZCArIGQgKyAxKSk7IHUgPSBST0xjKHUsIDUpOyBcCisgICAgICAgYSA9IFJPTChhXnQsdSkgKyBLWzBdOyAgICAgICAgICAgICAgICBcCisgICAgICAgYyA9IFJPTChjXnUsdCkgKyBLWzFdOyBLICs9IDI7ICAgCisgICAgCisgICBLID0gc2tleS0+cmM2LksgKyAyOworICAgZm9yIChyID0gMDsgciA8IDIwOyByICs9IDQpIHsKKyAgICAgICBSTkQoYSxiLGMsZCk7CisgICAgICAgUk5EKGIsYyxkLGEpOworICAgICAgIFJORChjLGQsYSxiKTsKKyAgICAgICBSTkQoZCxhLGIsYyk7CisgICB9CisgICAKKyN1bmRlZiBSTkQKKworICAgYSArPSBza2V5LT5yYzYuS1s0Ml07CisgICBjICs9IHNrZXktPnJjNi5LWzQzXTsKKyAgIFNUT1JFMzJMKGEsJmN0WzBdKTtTVE9SRTMyTChiLCZjdFs0XSk7U1RPUkUzMkwoYywmY3RbOF0pO1NUT1JFMzJMKGQsJmN0WzEyXSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK2ludCByYzZfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgaW50IGVyciA9IF9yYzZfZWNiX2VuY3J5cHQocHQsIGN0LCBza2V5KTsKKyAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIpICogNiArIHNpemVvZihpbnQpKTsKKyAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyoqCisgIERlY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIFJDNgorICBAcGFyYW0gY3QgVGhlIGlucHV0IGNpcGhlcnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gcHQgVGhlIG91dHB1dCBwbGFpbnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZCAKKyovCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IF9yYzZfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2Vsc2UKK2ludCByYzZfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2VuZGlmCit7CisgICB1bG9uZzMyIGEsYixjLGQsdCx1LCAqSzsKKyAgIGludCByOworCisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICAKKyAgIExPQUQzMkwoYSwmY3RbMF0pO0xPQUQzMkwoYiwmY3RbNF0pO0xPQUQzMkwoYywmY3RbOF0pO0xPQUQzMkwoZCwmY3RbMTJdKTsKKyAgIGEgLT0gc2tleS0+cmM2LktbNDJdOworICAgYyAtPSBza2V5LT5yYzYuS1s0M107CisgICAKKyNkZWZpbmUgUk5EKGEsYixjLGQpIFwKKyAgICAgICB0ID0gKGIgKiAoYiArIGIgKyAxKSk7IHQgPSBST0xjKHQsIDUpOyBcCisgICAgICAgdSA9IChkICogKGQgKyBkICsgMSkpOyB1ID0gUk9MYyh1LCA1KTsgXAorICAgICAgIGMgPSBST1IoYyAtIEtbMV0sIHQpIF4gdTsgXAorICAgICAgIGEgPSBST1IoYSAtIEtbMF0sIHUpIF4gdDsgSyAtPSAyOworICAgCisgICBLID0gc2tleS0+cmM2LksgKyA0MDsKKyAgIAorICAgZm9yIChyID0gMDsgciA8IDIwOyByICs9IDQpIHsKKyAgICAgICBSTkQoZCxhLGIsYyk7CisgICAgICAgUk5EKGMsZCxhLGIpOworICAgICAgIFJORChiLGMsZCxhKTsKKyAgICAgICBSTkQoYSxiLGMsZCk7CisgICB9CisgICAKKyN1bmRlZiBSTkQKKworICAgYiAtPSBza2V5LT5yYzYuS1swXTsKKyAgIGQgLT0gc2tleS0+cmM2LktbMV07CisgICBTVE9SRTMyTChhLCZwdFswXSk7U1RPUkUzMkwoYiwmcHRbNF0pO1NUT1JFMzJMKGMsJnB0WzhdKTtTVE9SRTMyTChkLCZwdFsxMl0pOworCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK2ludCByYzZfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgaW50IGVyciA9IF9yYzZfZWNiX2RlY3J5cHQoY3QsIHB0LCBza2V5KTsKKyAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIpICogNiArIHNpemVvZihpbnQpKTsKKyAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyoqCisgIFBlcmZvcm1zIGEgc2VsZi10ZXN0IG9mIHRoZSBSQzYgYmxvY2sgY2lwaGVyCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgZnVuY3Rpb25hbCwgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdCBoYXMgYmVlbiBkaXNhYmxlZAorKi8KK2ludCByYzZfdGVzdCh2b2lkKQoreworICNpZm5kZWYgTFRDX1RFU1QKKyAgICByZXR1cm4gQ1JZUFRfTk9QOworICNlbHNlICAgIAorICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgaW50IGtleWxlbjsKKyAgICAgICB1bnNpZ25lZCBjaGFyIGtleVszMl0sIHB0WzE2XSwgY3RbMTZdOworICAgfSB0ZXN0c1tdID0geworICAgeworICAgICAgIDE2LAorICAgICAgIHsgMHgwMSwgMHgyMywgMHg0NSwgMHg2NywgMHg4OSwgMHhhYiwgMHhjZCwgMHhlZiwKKyAgICAgICAgIDB4MDEsIDB4MTIsIDB4MjMsIDB4MzQsIDB4NDUsIDB4NTYsIDB4NjcsIDB4NzgsCisgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAgICAgIHsgMHgwMiwgMHgxMywgMHgyNCwgMHgzNSwgMHg0NiwgMHg1NywgMHg2OCwgMHg3OSwKKyAgICAgICAgIDB4OGEsIDB4OWIsIDB4YWMsIDB4YmQsIDB4Y2UsIDB4ZGYsIDB4ZTAsIDB4ZjEgfSwKKyAgICAgICB7IDB4NTIsIDB4NGUsIDB4MTksIDB4MmYsIDB4NDcsIDB4MTUsIDB4YzYsIDB4MjMsCisgICAgICAgICAweDFmLCAweDUxLCAweGY2LCAweDM2LCAweDdlLCAweGE0LCAweDNmLCAweDE4IH0KKyAgIH0sCisgICB7CisgICAgICAgMjQsCisgICAgICAgeyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmLAorICAgICAgICAgMHgwMSwgMHgxMiwgMHgyMywgMHgzNCwgMHg0NSwgMHg1NiwgMHg2NywgMHg3OCwKKyAgICAgICAgIDB4ODksIDB4OWEsIDB4YWIsIDB4YmMsIDB4Y2QsIDB4ZGUsIDB4ZWYsIDB4ZjAsCisgICAgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgICAgICAgeyAweDAyLCAweDEzLCAweDI0LCAweDM1LCAweDQ2LCAweDU3LCAweDY4LCAweDc5LAorICAgICAgICAgMHg4YSwgMHg5YiwgMHhhYywgMHhiZCwgMHhjZSwgMHhkZiwgMHhlMCwgMHhmMSB9LAorICAgICAgIHsgMHg2OCwgMHg4MywgMHgyOSwgMHhkMCwgMHgxOSwgMHhlNSwgMHgwNSwgMHgwNCwKKyAgICAgICAgIDB4MWUsIDB4NTIsIDB4ZTksIDB4MmEsIDB4ZjksIDB4NTIsIDB4OTEsIDB4ZDQgfQorICAgfSwKKyAgIHsKKyAgICAgICAzMiwKKyAgICAgICB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsCisgICAgICAgICAweDAxLCAweDEyLCAweDIzLCAweDM0LCAweDQ1LCAweDU2LCAweDY3LCAweDc4LAorICAgICAgICAgMHg4OSwgMHg5YSwgMHhhYiwgMHhiYywgMHhjZCwgMHhkZSwgMHhlZiwgMHhmMCwKKyAgICAgICAgIDB4MTAsIDB4MzIsIDB4NTQsIDB4NzYsIDB4OTgsIDB4YmEsIDB4ZGMsIDB4ZmUgfSwKKyAgICAgICB7IDB4MDIsIDB4MTMsIDB4MjQsIDB4MzUsIDB4NDYsIDB4NTcsIDB4NjgsIDB4NzksCisgICAgICAgICAweDhhLCAweDliLCAweGFjLCAweGJkLCAweGNlLCAweGRmLCAweGUwLCAweGYxIH0sCisgICAgICAgeyAweGM4LCAweDI0LCAweDE4LCAweDE2LCAweGYwLCAweGQ3LCAweGU0LCAweDg5LAorICAgICAgICAgMHgyMCwgMHhhZCwgMHgxNiwgMHhhMSwgMHg2NywgMHg0ZSwgMHg1ZCwgMHg0OCB9CisgICB9CisgICB9OworICAgdW5zaWduZWQgY2hhciB0bXBbMl1bMTZdOworICAgaW50IHgsIHksIGVycjsKKyAgIHN5bW1ldHJpY19rZXkga2V5OworCisgICBmb3IgKHggID0gMDsgeCA8IChpbnQpKHNpemVvZih0ZXN0cykgLyBzaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAvKiBzZXR1cCBrZXkgKi8KKyAgICAgIGlmICgoZXJyID0gcmM2X3NldHVwKHRlc3RzW3hdLmtleSwgdGVzdHNbeF0ua2V5bGVuLCAwLCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisKKyAgICAgIC8qIGVuY3J5cHQgYW5kIGRlY3J5cHQgKi8KKyAgICAgIHJjNl9lY2JfZW5jcnlwdCh0ZXN0c1t4XS5wdCwgdG1wWzBdLCAma2V5KTsKKyAgICAgIHJjNl9lY2JfZGVjcnlwdCh0bXBbMF0sIHRtcFsxXSwgJmtleSk7CisKKyAgICAgIC8qIGNvbXBhcmUgKi8KKyAgICAgIGlmIChYTUVNQ01QKHRtcFswXSwgdGVzdHNbeF0uY3QsIDE2KSB8fCBYTUVNQ01QKHRtcFsxXSwgdGVzdHNbeF0ucHQsIDE2KSkgeworI2lmIDAKKyAgICAgICAgIHByaW50ZigiXG5cbkZhaWxlZCB0ZXN0ICVkXG4iLCB4KTsKKyAgICAgICAgIGlmIChYTUVNQ01QKHRtcFswXSwgdGVzdHNbeF0uY3QsIDE2KSkgeworICAgICAgICAgICAgcHJpbnRmKCJDaXBoZXJ0ZXh0OiAgIik7CisgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgcHJpbnRmKCIlMDJ4ICIsIHRtcFswXVt5XSk7CisgICAgICAgICAgICBwcmludGYoIlxuRXhwZWN0ZWQgIDogICIpOworICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHByaW50ZigiJTAyeCAiLCB0ZXN0c1t4XS5jdFt5XSk7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICB9CisgICAgICAgICBpZiAoWE1FTUNNUCh0bXBbMV0sIHRlc3RzW3hdLnB0LCAxNikpIHsKKyAgICAgICAgICAgIHByaW50ZigiUGxhaW50ZXh0OiAgIik7CisgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgcHJpbnRmKCIlMDJ4ICIsIHRtcFswXVt5XSk7CisgICAgICAgICAgICBwcmludGYoIlxuRXhwZWN0ZWQgOiAgIik7CisgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgcHJpbnRmKCIlMDJ4ICIsIHRlc3RzW3hdLnB0W3ldKTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgIH0KKworICAgICAgLyogbm93IHNlZSBpZiB3ZSBjYW4gZW5jcnlwdCBhbGwgemVybyBieXRlcyAxMDAwIHRpbWVzLCBkZWNyeXB0IGFuZCBjb21lIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCAqLworICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHRtcFswXVt5XSA9IDA7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwMDsgeSsrKSByYzZfZWNiX2VuY3J5cHQodG1wWzBdLCB0bXBbMF0sICZrZXkpOworICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykgcmM2X2VjYl9kZWNyeXB0KHRtcFswXSwgdG1wWzBdLCAma2V5KTsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSBpZiAodG1wWzBdW3ldICE9IDApIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7CisgICNlbmRpZgorfQorCisvKiogVGVybWluYXRlIHRoZSBjb250ZXh0IAorICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkKKyovCit2b2lkIHJjNl9kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpCit7Cit9CisKKy8qKgorICBHZXRzIHN1aXRhYmxlIGtleSBzaXplCisgIEBwYXJhbSBrZXlzaXplIFtpbi9vdXRdIFRoZSBsZW5ndGggb2YgdGhlIHJlY29tbWVuZGVkIGtleSAoaW4gYnl0ZXMpLiAgVGhpcyBmdW5jdGlvbiB3aWxsIHN0b3JlIHRoZSBzdWl0YWJsZSBzaXplIGJhY2sgaW4gdGhpcyB2YXJpYWJsZS4KKyAgQHJldHVybiBDUllQVF9PSyBpZiB0aGUgaW5wdXQga2V5IHNpemUgaXMgYWNjZXB0YWJsZS4KKyovCitpbnQgcmM2X2tleXNpemUoaW50ICprZXlzaXplKQoreworICAgTFRDX0FSR0NISyhrZXlzaXplICE9IE5VTEwpOworICAgaWYgKCprZXlzaXplIDwgOCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0gZWxzZSBpZiAoKmtleXNpemUgPiAxMjgpIHsKKyAgICAgICprZXlzaXplID0gMTI4OworICAgfQorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYgLypSQzYqLworCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvcmM2LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTIgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjM6MDE6MDYgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXIuYyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZkYWYzNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVyLmMKQEAgLTAsMCArMSw0OTEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqCisqIEZJTEU6ICAgICAgICAgICBzYWZlci5jCisqCisqIERFU0NSSVBUSU9OOiAgICBibG9jay1jaXBoZXIgYWxnb3JpdGhtIFNBRkVSIChTZWN1cmUgQW5kIEZhc3QgRW5jcnlwdGlvbgorKiAgICAgICAgICAgICAgICAgUm91dGluZSkgaW4gaXRzIGZvdXIgdmVyc2lvbnM6IFNBRkVSIEstNjQsIFNBRkVSIEstMTI4LAorKiAgICAgICAgICAgICAgICAgU0FGRVIgU0stNjQgYW5kIFNBRkVSIFNLLTEyOC4KKyoKKyogQVVUSE9SOiAgICAgICAgIFJpY2hhcmQgRGUgTW9saW5lciAoZGVtb2xpbmVyQGlzaS5lZS5ldGh6LmNoKQorKiAgICAgICAgICAgICAgICAgU2lnbmFsIGFuZCBJbmZvcm1hdGlvbiBQcm9jZXNzaW5nIExhYm9yYXRvcnkKKyogICAgICAgICAgICAgICAgIFN3aXNzIEZlZGVyYWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKyogICAgICAgICAgICAgICAgIENILTgwOTIgWnVlcmljaCwgU3dpdHplcmxhbmQKKyoKKyogREFURTogICAgICAgICAgIFNlcHRlbWJlciA5LCAxOTk1CisqCisqIENIQU5HRSBISVNUT1JZOgorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPHRvbWNyeXB0Lmg+CisKKyNpZmRlZiBTQUZFUgorCitjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIAorICAgc2FmZXJfazY0X2Rlc2MgPSB7CisgICAic2FmZXItazY0IiwgCisgICA4LCA4LCA4LCA4LCBTQUZFUl9LNjRfREVGQVVMVF9OT0ZfUk9VTkRTLAorICAgJnNhZmVyX2s2NF9zZXR1cCwKKyAgICZzYWZlcl9lY2JfZW5jcnlwdCwKKyAgICZzYWZlcl9lY2JfZGVjcnlwdCwKKyAgICZzYWZlcl9rNjRfdGVzdCwKKyAgICZzYWZlcl9kb25lLAorICAgJnNhZmVyXzY0X2tleXNpemUsCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgICB9LAorCisgICBzYWZlcl9zazY0X2Rlc2MgPSB7CisgICAic2FmZXItc2s2NCIsCisgICA5LCA4LCA4LCA4LCBTQUZFUl9TSzY0X0RFRkFVTFRfTk9GX1JPVU5EUywKKyAgICZzYWZlcl9zazY0X3NldHVwLAorICAgJnNhZmVyX2VjYl9lbmNyeXB0LAorICAgJnNhZmVyX2VjYl9kZWNyeXB0LAorICAgJnNhZmVyX3NrNjRfdGVzdCwKKyAgICZzYWZlcl9kb25lLAorICAgJnNhZmVyXzY0X2tleXNpemUsCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisgICB9LAorCisgICBzYWZlcl9rMTI4X2Rlc2MgPSB7CisgICAic2FmZXItazEyOCIsCisgICAxMCwgMTYsIDE2LCA4LCBTQUZFUl9LMTI4X0RFRkFVTFRfTk9GX1JPVU5EUywKKyAgICZzYWZlcl9rMTI4X3NldHVwLAorICAgJnNhZmVyX2VjYl9lbmNyeXB0LAorICAgJnNhZmVyX2VjYl9kZWNyeXB0LAorICAgJnNhZmVyX3NrMTI4X3Rlc3QsCisgICAmc2FmZXJfZG9uZSwKKyAgICZzYWZlcl8xMjhfa2V5c2l6ZSwKKyAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKyAgIH0sCisKKyAgIHNhZmVyX3NrMTI4X2Rlc2MgPSB7CisgICAic2FmZXItc2sxMjgiLAorICAgMTEsIDE2LCAxNiwgOCwgU0FGRVJfU0sxMjhfREVGQVVMVF9OT0ZfUk9VTkRTLAorICAgJnNhZmVyX3NrMTI4X3NldHVwLAorICAgJnNhZmVyX2VjYl9lbmNyeXB0LAorICAgJnNhZmVyX2VjYl9kZWNyeXB0LAorICAgJnNhZmVyX3NrMTI4X3Rlc3QsCisgICAmc2FmZXJfZG9uZSwKKyAgICZzYWZlcl8xMjhfa2V5c2l6ZSwKKyAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKKyAgIH07CisKKy8qKioqKioqKioqKioqKioqKioqIENvbnN0YW50cyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAjZGVmaW5lIFRBQl9MRU4gICAgICAyNTYgICovCisKKy8qKioqKioqKioqKioqKioqKioqIEFzc2VydGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqIE1hY3JvcyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFJPTDgoeCwgbikgICAoKHVuc2lnbmVkIGNoYXIpKCh1bnNpZ25lZCBpbnQpKHgpIDw8IChuKVwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KHVuc2lnbmVkIGludCkoKHgpICYgMHhGRikgPj4gKDggLSAobikpKSkKKyNkZWZpbmUgRVhQKHgpICAgICAgIHNhZmVyX2Vib3hbKHgpICYgMHhGRl0KKyNkZWZpbmUgTE9HKHgpICAgICAgIHNhZmVyX2xib3hbKHgpICYgMHhGRl0KKyNkZWZpbmUgUEhUKHgsIHkpICAgIHsgeSArPSB4OyB4ICs9IHk7IH0KKyNkZWZpbmUgSVBIVCh4LCB5KSAgIHsgeCAtPSB5OyB5IC09IHg7IH0KKworLyoqKioqKioqKioqKioqKioqKiogVHlwZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2V4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIHNhZmVyX2Vib3hbXSwgc2FmZXJfbGJveFtdOworCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgdm9pZCBfU2FmZXJfRXhwYW5kX1VzZXJrZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcmtleV8xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcmtleV8yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5vZl9yb3VuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyZW5ndGhlbmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZXJfa2V5X3Qga2V5KQorI2Vsc2UKK3N0YXRpYyB2b2lkIFNhZmVyX0V4cGFuZF9Vc2Vya2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJrZXlfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJrZXlfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBub2Zfcm91bmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0cmVuZ3RoZW5lZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhZmVyX2tleV90IGtleSkKKyNlbmRpZgoreyAgIHVuc2lnbmVkIGludCBpLCBqLCBrOworICAgIHVuc2lnbmVkIGNoYXIga2FbU0FGRVJfQkxPQ0tfTEVOICsgMV07CisgICAgdW5zaWduZWQgY2hhciBrYltTQUZFUl9CTE9DS19MRU4gKyAxXTsKKworICAgIGlmIChTQUZFUl9NQVhfTk9GX1JPVU5EUyA8IG5vZl9yb3VuZHMpCisgICAgICAgIG5vZl9yb3VuZHMgPSBTQUZFUl9NQVhfTk9GX1JPVU5EUzsKKyAgICAqa2V5KysgPSAodW5zaWduZWQgY2hhcilub2Zfcm91bmRzOworICAgIGthW1NBRkVSX0JMT0NLX0xFTl0gPSAodW5zaWduZWQgY2hhcikwOworICAgIGtiW1NBRkVSX0JMT0NLX0xFTl0gPSAodW5zaWduZWQgY2hhcikwOworICAgIGsgPSAwOworICAgIGZvciAoaiA9IDA7IGogPCBTQUZFUl9CTE9DS19MRU47IGorKykgeworICAgICAgICBrYVtqXSA9IFJPTDgodXNlcmtleV8xW2pdLCA1KTsKKyAgICAgICAga2FbU0FGRVJfQkxPQ0tfTEVOXSBePSBrYVtqXTsKKyAgICAgICAga2Jbal0gPSAqa2V5KysgPSB1c2Vya2V5XzJbal07CisgICAgICAgIGtiW1NBRkVSX0JMT0NLX0xFTl0gXj0ga2Jbal07CisgICAgfQorICAgIGZvciAoaSA9IDE7IGkgPD0gbm9mX3JvdW5kczsgaSsrKSB7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBTQUZFUl9CTE9DS19MRU4gKyAxOyBqKyspIHsKKyAgICAgICAgICAgIGthW2pdID0gUk9MOChrYVtqXSwgNik7CisgICAgICAgICAgICBrYltqXSA9IFJPTDgoa2Jbal0sIDYpOworICAgICAgICB9CisgICAgICAgIGlmIChzdHJlbmd0aGVuZWQpIHsKKyAgICAgICAgICAgayA9IDIgKiBpIC0gMTsKKyAgICAgICAgICAgd2hpbGUgKGsgPj0gKFNBRkVSX0JMT0NLX0xFTiArIDEpKSB7IGsgLT0gU0FGRVJfQkxPQ0tfTEVOICsgMTsgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBTQUZFUl9CTE9DS19MRU47IGorKykgeworICAgICAgICAgICAgaWYgKHN0cmVuZ3RoZW5lZCkgeworICAgICAgICAgICAgICAgICprZXkrKyA9IChrYVtrXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNhZmVyX2Vib3hbKGludClzYWZlcl9lYm94WyhpbnQpKCgxOCAqIGkgKyBqICsgMSkmMHhGRildXSkgJiAweEZGOworICAgICAgICAgICAgICAgIGlmICgrK2sgPT0gKFNBRkVSX0JMT0NLX0xFTiArIDEpKSB7IGsgPSAwOyB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICprZXkrKyA9IChrYVtqXSArIHNhZmVyX2Vib3hbKGludClzYWZlcl9lYm94WyhpbnQpKCgxOCAqIGkgKyBqICsgMSkmMHhGRildXSkgJiAweEZGOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzdHJlbmd0aGVuZWQpIHsKKyAgICAgICAgICAgayA9IDIgKiBpOworICAgICAgICAgICB3aGlsZSAoayA+PSAoU0FGRVJfQkxPQ0tfTEVOICsgMSkpIHsgayAtPSBTQUZFUl9CTE9DS19MRU4gKyAxOyB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChqID0gMDsgaiA8IFNBRkVSX0JMT0NLX0xFTjsgaisrKSB7CisgICAgICAgICAgICBpZiAoc3RyZW5ndGhlbmVkKSB7CisgICAgICAgICAgICAgICAgKmtleSsrID0gKGtiW2tdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc2FmZXJfZWJveFsoaW50KXNhZmVyX2Vib3hbKGludCkoKDE4ICogaSArIGogKyAxMCkmMHhGRildXSkgJiAweEZGOworICAgICAgICAgICAgICAgIGlmICgrK2sgPT0gKFNBRkVSX0JMT0NLX0xFTiArIDEpKSB7IGsgPSAwOyB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICprZXkrKyA9IChrYltqXSArIHNhZmVyX2Vib3hbKGludClzYWZlcl9lYm94WyhpbnQpKCgxOCAqIGkgKyBqICsgMTApJjB4RkYpXV0pICYgMHhGRjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgICB6ZXJvbWVtKGthLCBzaXplb2Yoa2EpKTsKKyAgICB6ZXJvbWVtKGtiLCBzaXplb2Yoa2IpKTsKKyNlbmRpZgorfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgdm9pZCBTYWZlcl9FeHBhbmRfVXNlcmtleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2Vya2V5XzEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp1c2Vya2V5XzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbm9mX3JvdW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJlbmd0aGVuZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWZlcl9rZXlfdCBrZXkpCit7CisgICBfU2FmZXJfRXhwYW5kX1VzZXJrZXkodXNlcmtleV8xLCB1c2Vya2V5XzIsIG5vZl9yb3VuZHMsIHN0cmVuZ3RoZW5lZCwga2V5KTsKKyAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogKDIgKiAoU0FGRVJfQkxPQ0tfTEVOICsgMSkpICsgc2l6ZW9mKHVuc2lnbmVkIGludCkqMik7Cit9CisjZW5kaWYKKworaW50IHNhZmVyX2s2NF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKworICAgaWYgKG51bXJvdW5kcyAhPSAwICYmIChudW1yb3VuZHMgPCA2IHx8IG51bXJvdW5kcyA+IFNBRkVSX01BWF9OT0ZfUk9VTkRTKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgfQorCisgICBpZiAoa2V5bGVuICE9IDgpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICB9CisKKyAgIFNhZmVyX0V4cGFuZF9Vc2Vya2V5KGtleSwga2V5LCAodW5zaWduZWQgaW50KShudW1yb3VuZHMgIT0gMCA/bnVtcm91bmRzOlNBRkVSX0s2NF9ERUZBVUxUX05PRl9ST1VORFMpLCAwLCBza2V5LT5zYWZlci5rZXkpOworICAgcmV0dXJuIENSWVBUX09LOworfQorICAgCitpbnQgc2FmZXJfc2s2NF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKworICAgaWYgKG51bXJvdW5kcyAhPSAwICYmIChudW1yb3VuZHMgPCA2IHx8IG51bXJvdW5kcyA+IFNBRkVSX01BWF9OT0ZfUk9VTkRTKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgfQorCisgICBpZiAoa2V5bGVuICE9IDgpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICB9CisKKyAgIFNhZmVyX0V4cGFuZF9Vc2Vya2V5KGtleSwga2V5LCAodW5zaWduZWQgaW50KShudW1yb3VuZHMgIT0gMCA/bnVtcm91bmRzOlNBRkVSX1NLNjRfREVGQVVMVF9OT0ZfUk9VTkRTKSwgMSwgc2tleS0+c2FmZXIua2V5KTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworaW50IHNhZmVyX2sxMjhfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgIGlmIChudW1yb3VuZHMgIT0gMCAmJiAobnVtcm91bmRzIDwgNiB8fCBudW1yb3VuZHMgPiBTQUZFUl9NQVhfTk9GX1JPVU5EUykpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1JPVU5EUzsKKyAgIH0KKworICAgaWYgKGtleWxlbiAhPSAxNikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0KKworICAgU2FmZXJfRXhwYW5kX1VzZXJrZXkoa2V5LCBrZXkrOCwgKHVuc2lnbmVkIGludCkobnVtcm91bmRzICE9IDAgP251bXJvdW5kczpTQUZFUl9LMTI4X0RFRkFVTFRfTk9GX1JPVU5EUyksIDAsIHNrZXktPnNhZmVyLmtleSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKK2ludCBzYWZlcl9zazEyOF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKworICAgaWYgKG51bXJvdW5kcyAhPSAwICYmIChudW1yb3VuZHMgPCA2IHx8IG51bXJvdW5kcyA+IFNBRkVSX01BWF9OT0ZfUk9VTkRTKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgfQorCisgICBpZiAoa2V5bGVuICE9IDE2KSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgfQorCisgICBTYWZlcl9FeHBhbmRfVXNlcmtleShrZXksIGtleSs4LCAodW5zaWduZWQgaW50KShudW1yb3VuZHMgIT0gMD9udW1yb3VuZHM6U0FGRVJfU0sxMjhfREVGQVVMVF9OT0ZfUk9VTkRTKSwgMSwgc2tleS0+c2FmZXIua2V5KTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfc2FmZXJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqYmxvY2tfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJsb2NrX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbHNlCitpbnQgc2FmZXJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqYmxvY2tfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJsb2NrX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbmRpZgoreyAgIHVuc2lnbmVkIGNoYXIgYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgdDsKKyAgICB1bnNpZ25lZCBpbnQgcm91bmQ7CisgICAgdW5zaWduZWQgY2hhciAqa2V5OworCisgICAgTFRDX0FSR0NISyhibG9ja19pbiAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGJsb2NrX291dCAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgICBrZXkgPSBza2V5LT5zYWZlci5rZXk7CisgICAgYSA9IGJsb2NrX2luWzBdOyBiID0gYmxvY2tfaW5bMV07IGMgPSBibG9ja19pblsyXTsgZCA9IGJsb2NrX2luWzNdOworICAgIGUgPSBibG9ja19pbls0XTsgZiA9IGJsb2NrX2luWzVdOyBnID0gYmxvY2tfaW5bNl07IGggPSBibG9ja19pbls3XTsKKyAgICBpZiAoU0FGRVJfTUFYX05PRl9ST1VORFMgPCAocm91bmQgPSAqa2V5KSkgcm91bmQgPSBTQUZFUl9NQVhfTk9GX1JPVU5EUzsKKyAgICB3aGlsZShyb3VuZC0tID4gMCkKKyAgICB7CisgICAgICAgIGEgXj0gKisra2V5OyBiICs9ICorK2tleTsgYyArPSAqKytrZXk7IGQgXj0gKisra2V5OworICAgICAgICBlIF49ICorK2tleTsgZiArPSAqKytrZXk7IGcgKz0gKisra2V5OyBoIF49ICorK2tleTsKKyAgICAgICAgYSA9IEVYUChhKSArICorK2tleTsgYiA9IExPRyhiKSBeICorK2tleTsKKyAgICAgICAgYyA9IExPRyhjKSBeICorK2tleTsgZCA9IEVYUChkKSArICorK2tleTsKKyAgICAgICAgZSA9IEVYUChlKSArICorK2tleTsgZiA9IExPRyhmKSBeICorK2tleTsKKyAgICAgICAgZyA9IExPRyhnKSBeICorK2tleTsgaCA9IEVYUChoKSArICorK2tleTsKKyAgICAgICAgUEhUKGEsIGIpOyBQSFQoYywgZCk7IFBIVChlLCBmKTsgUEhUKGcsIGgpOworICAgICAgICBQSFQoYSwgYyk7IFBIVChlLCBnKTsgUEhUKGIsIGQpOyBQSFQoZiwgaCk7CisgICAgICAgIFBIVChhLCBlKTsgUEhUKGIsIGYpOyBQSFQoYywgZyk7IFBIVChkLCBoKTsKKyAgICAgICAgdCA9IGI7IGIgPSBlOyBlID0gYzsgYyA9IHQ7IHQgPSBkOyBkID0gZjsgZiA9IGc7IGcgPSB0OworICAgIH0KKyAgICBhIF49ICorK2tleTsgYiArPSAqKytrZXk7IGMgKz0gKisra2V5OyBkIF49ICorK2tleTsKKyAgICBlIF49ICorK2tleTsgZiArPSAqKytrZXk7IGcgKz0gKisra2V5OyBoIF49ICorK2tleTsKKyAgICBibG9ja19vdXRbMF0gPSBhICYgMHhGRjsgYmxvY2tfb3V0WzFdID0gYiAmIDB4RkY7CisgICAgYmxvY2tfb3V0WzJdID0gYyAmIDB4RkY7IGJsb2NrX291dFszXSA9IGQgJiAweEZGOworICAgIGJsb2NrX291dFs0XSA9IGUgJiAweEZGOyBibG9ja19vdXRbNV0gPSBmICYgMHhGRjsKKyAgICBibG9ja19vdXRbNl0gPSBnICYgMHhGRjsgYmxvY2tfb3V0WzddID0gaCAmIDB4RkY7CisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitpbnQgc2FmZXJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqYmxvY2tfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJsb2NrX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgICBpbnQgZXJyID0gX3NhZmVyX2VjYl9lbmNyeXB0KGJsb2NrX2luLCBibG9ja19vdXQsIHNrZXkpOworICAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogOSArIHNpemVvZih1bnNpZ25lZCBpbnQpICsgc2l6ZW9mKHVuc2lnbmVkIGNoYXIgKikpOworICAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfc2FmZXJfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqYmxvY2tfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJsb2NrX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbHNlCitpbnQgc2FmZXJfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqYmxvY2tfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJsb2NrX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbmRpZgoreyAgIHVuc2lnbmVkIGNoYXIgYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgdDsKKyAgICB1bnNpZ25lZCBpbnQgcm91bmQ7CisgICAgdW5zaWduZWQgY2hhciAqa2V5OworCisgICAgTFRDX0FSR0NISyhibG9ja19pbiAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGJsb2NrX291dCAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgICBrZXkgPSBza2V5LT5zYWZlci5rZXk7CisgICAgYSA9IGJsb2NrX2luWzBdOyBiID0gYmxvY2tfaW5bMV07IGMgPSBibG9ja19pblsyXTsgZCA9IGJsb2NrX2luWzNdOworICAgIGUgPSBibG9ja19pbls0XTsgZiA9IGJsb2NrX2luWzVdOyBnID0gYmxvY2tfaW5bNl07IGggPSBibG9ja19pbls3XTsKKyAgICBpZiAoU0FGRVJfTUFYX05PRl9ST1VORFMgPCAocm91bmQgPSAqa2V5KSkgcm91bmQgPSBTQUZFUl9NQVhfTk9GX1JPVU5EUzsKKyAgICBrZXkgKz0gU0FGRVJfQkxPQ0tfTEVOICogKDEgKyAyICogcm91bmQpOworICAgIGggXj0gKmtleTsgZyAtPSAqLS1rZXk7IGYgLT0gKi0ta2V5OyBlIF49ICotLWtleTsKKyAgICBkIF49ICotLWtleTsgYyAtPSAqLS1rZXk7IGIgLT0gKi0ta2V5OyBhIF49ICotLWtleTsKKyAgICB3aGlsZSAocm91bmQtLSkKKyAgICB7CisgICAgICAgIHQgPSBlOyBlID0gYjsgYiA9IGM7IGMgPSB0OyB0ID0gZjsgZiA9IGQ7IGQgPSBnOyBnID0gdDsKKyAgICAgICAgSVBIVChhLCBlKTsgSVBIVChiLCBmKTsgSVBIVChjLCBnKTsgSVBIVChkLCBoKTsKKyAgICAgICAgSVBIVChhLCBjKTsgSVBIVChlLCBnKTsgSVBIVChiLCBkKTsgSVBIVChmLCBoKTsKKyAgICAgICAgSVBIVChhLCBiKTsgSVBIVChjLCBkKTsgSVBIVChlLCBmKTsgSVBIVChnLCBoKTsKKyAgICAgICAgaCAtPSAqLS1rZXk7IGcgXj0gKi0ta2V5OyBmIF49ICotLWtleTsgZSAtPSAqLS1rZXk7CisgICAgICAgIGQgLT0gKi0ta2V5OyBjIF49ICotLWtleTsgYiBePSAqLS1rZXk7IGEgLT0gKi0ta2V5OworICAgICAgICBoID0gTE9HKGgpIF4gKi0ta2V5OyBnID0gRVhQKGcpIC0gKi0ta2V5OworICAgICAgICBmID0gRVhQKGYpIC0gKi0ta2V5OyBlID0gTE9HKGUpIF4gKi0ta2V5OworICAgICAgICBkID0gTE9HKGQpIF4gKi0ta2V5OyBjID0gRVhQKGMpIC0gKi0ta2V5OworICAgICAgICBiID0gRVhQKGIpIC0gKi0ta2V5OyBhID0gTE9HKGEpIF4gKi0ta2V5OworICAgIH0KKyAgICBibG9ja19vdXRbMF0gPSBhICYgMHhGRjsgYmxvY2tfb3V0WzFdID0gYiAmIDB4RkY7CisgICAgYmxvY2tfb3V0WzJdID0gYyAmIDB4RkY7IGJsb2NrX291dFszXSA9IGQgJiAweEZGOworICAgIGJsb2NrX291dFs0XSA9IGUgJiAweEZGOyBibG9ja19vdXRbNV0gPSBmICYgMHhGRjsKKyAgICBibG9ja19vdXRbNl0gPSBnICYgMHhGRjsgYmxvY2tfb3V0WzddID0gaCAmIDB4RkY7CisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitpbnQgc2FmZXJfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqYmxvY2tfaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJsb2NrX291dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgICBpbnQgZXJyID0gX3NhZmVyX2VjYl9kZWNyeXB0KGJsb2NrX2luLCBibG9ja19vdXQsIHNrZXkpOworICAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICogOSArIHNpemVvZih1bnNpZ25lZCBpbnQpICsgc2l6ZW9mKHVuc2lnbmVkIGNoYXIgKikpOworICAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworaW50IHNhZmVyXzY0X2tleXNpemUoaW50ICprZXlzaXplKQoreworICAgTFRDX0FSR0NISyhrZXlzaXplICE9IE5VTEwpOworICAgaWYgKCprZXlzaXplIDwgOCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0gZWxzZSB7CisgICAgICAqa2V5c2l6ZSA9IDg7CisgICAgICByZXR1cm4gQ1JZUFRfT0s7CisgICB9Cit9CisKK2ludCBzYWZlcl8xMjhfa2V5c2l6ZShpbnQgKmtleXNpemUpCit7CisgICBMVENfQVJHQ0hLKGtleXNpemUgIT0gTlVMTCk7CisgICBpZiAoKmtleXNpemUgPCAxNikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0gZWxzZSB7CisgICAgICAqa2V5c2l6ZSA9IDE2OworICAgICAgcmV0dXJuIENSWVBUX09LOworICAgfQorfQorCitpbnQgc2FmZXJfazY0X3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZSAgICAKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGs2NF9wdFtdICA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazY0X2tleVtdID0geyA4LCA3LCA2LCA1LCA0LCAzLCAyLCAxIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrNjRfY3RbXSAgPSB7IDIwMCwgMjQyLCAxNTYsIDIyMSwgMTM1LCAxMjAsIDYyLCAyMTcgfTsKKworICAgc3ltbWV0cmljX2tleSBza2V5OworICAgdW5zaWduZWQgY2hhciBidWZbMl1bOF07CisgICBpbnQgZXJyOworCisgICAvKiB0ZXN0IEs2NCAqLworICAgaWYgKChlcnIgPSBzYWZlcl9rNjRfc2V0dXAoazY0X2tleSwgOCwgNiwgJnNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIHNhZmVyX2VjYl9lbmNyeXB0KGs2NF9wdCwgYnVmWzBdLCAmc2tleSk7CisgICBzYWZlcl9lY2JfZGVjcnlwdChidWZbMF0sIGJ1ZlsxXSwgJnNrZXkpOworCisgICBpZiAoWE1FTUNNUChidWZbMF0sIGs2NF9jdCwgOCkgIT0gMCB8fCBYTUVNQ01QKGJ1ZlsxXSwgazY0X3B0LCA4KSAhPSAwKSB7CisgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgfQorCisgICByZXR1cm4gQ1JZUFRfT0s7CisgI2VuZGlmCit9CisKKworaW50IHNhZmVyX3NrNjRfdGVzdCh2b2lkKQoreworICNpZm5kZWYgTFRDX1RFU1QKKyAgICByZXR1cm4gQ1JZUFRfTk9QOworICNlbHNlICAgIAorICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2s2NF9wdFtdICA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2s2NF9rZXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2s2NF9jdFtdICA9IHsgOTUsIDIwNiwgMTU1LCAxNjIsIDUsIDEzMiwgNTYsIDE5OSB9OworCisgICBzeW1tZXRyaWNfa2V5IHNrZXk7CisgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyXVs4XTsKKyAgIGludCBlcnIsIHk7CisKKyAgIC8qIHRlc3QgU0s2NCAqLworICAgaWYgKChlcnIgPSBzYWZlcl9zazY0X3NldHVwKHNrNjRfa2V5LCA4LCA2LCAmc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBzYWZlcl9lY2JfZW5jcnlwdChzazY0X3B0LCBidWZbMF0sICZza2V5KTsKKyAgIHNhZmVyX2VjYl9kZWNyeXB0KGJ1ZlswXSwgYnVmWzFdLCAmc2tleSk7CisKKyAgIGlmIChYTUVNQ01QKGJ1ZlswXSwgc2s2NF9jdCwgOCkgIT0gMCB8fCBYTUVNQ01QKGJ1ZlsxXSwgc2s2NF9wdCwgOCkgIT0gMCkgeworICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgIH0KKworICAgICAgLyogbm93IHNlZSBpZiB3ZSBjYW4gZW5jcnlwdCBhbGwgemVybyBieXRlcyAxMDAwIHRpbWVzLCBkZWNyeXB0IGFuZCBjb21lIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCAqLworICAgICAgZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgYnVmWzBdW3ldID0gMDsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwOyB5KyspIHNhZmVyX2VjYl9lbmNyeXB0KGJ1ZlswXSwgYnVmWzBdLCAmc2tleSk7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwMDsgeSsrKSBzYWZlcl9lY2JfZGVjcnlwdChidWZbMF0sIGJ1ZlswXSwgJnNrZXkpOworICAgICAgZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgaWYgKGJ1ZlswXVt5XSAhPSAwKSByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworCisgICByZXR1cm4gQ1JZUFRfT0s7CisgICNlbmRpZgorfQorCisvKiogVGVybWluYXRlIHRoZSBjb250ZXh0IAorICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkKKyovCit2b2lkIHNhZmVyX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSkKK3sKK30KKworaW50IHNhZmVyX3NrMTI4X3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZSAgICAKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNrMTI4X3B0W10gID0geyAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzazEyOF9rZXlbXSA9IHsgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzazEyOF9jdFtdICA9IHsgMjU1LCAxMjAsIDE3LCAyMjgsIDE3OSwgMTY3LCA0NiwgMTEzIH07CisKKyAgIHN5bW1ldHJpY19rZXkgc2tleTsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzJdWzhdOworICAgaW50IGVyciwgeTsKKworICAgLyogdGVzdCBTSzEyOCAqLworICAgaWYgKChlcnIgPSBzYWZlcl9zazEyOF9zZXR1cChzazEyOF9rZXksIDE2LCAwLCAmc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgc2FmZXJfZWNiX2VuY3J5cHQoc2sxMjhfcHQsIGJ1ZlswXSwgJnNrZXkpOworICAgc2FmZXJfZWNiX2RlY3J5cHQoYnVmWzBdLCBidWZbMV0sICZza2V5KTsKKworICAgaWYgKFhNRU1DTVAoYnVmWzBdLCBzazEyOF9jdCwgOCkgIT0gMCB8fCBYTUVNQ01QKGJ1ZlsxXSwgc2sxMjhfcHQsIDgpICE9IDApIHsKKyAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICB9CisKKyAgICAgIC8qIG5vdyBzZWUgaWYgd2UgY2FuIGVuY3J5cHQgYWxsIHplcm8gYnl0ZXMgMTAwMCB0aW1lcywgZGVjcnlwdCBhbmQgY29tZSBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQgKi8KKyAgICAgIGZvciAoeSA9IDA7IHkgPCA4OyB5KyspIGJ1ZlswXVt5XSA9IDA7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwMDsgeSsrKSBzYWZlcl9lY2JfZW5jcnlwdChidWZbMF0sIGJ1ZlswXSwgJnNrZXkpOworICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykgc2FmZXJfZWNiX2RlY3J5cHQoYnVmWzBdLCBidWZbMF0sICZza2V5KTsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCA4OyB5KyspIGlmIChidWZbMF1beV0gIT0gMCkgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgcmV0dXJuIENSWVBUX09LOworICNlbmRpZgorfQorCisjZW5kaWYKKworCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOCAyMzowMTowNiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9zYWZlci9zYWZlcl90YWIuYyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVyX3RhYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NDI3NjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9zYWZlci9zYWZlcl90YWIuYwpAQCAtMCwwICsxLDY4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKioKKyAgQGZpbGUgc2FmZXJfdGFiLmMKKyAgVGFibGVzIGZvciBTQUZFUiBibG9jayBjaXBoZXJzCisqLyAKKyAKKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWYgZGVmaW5lZChTQUZFUlApIHx8IGRlZmluZWQoU0FGRVIpCisKKy8qIFRoaXMgaXMgdGhlIGJveCBkZWZpbmVkIGJ5IGVib3hbeF0gPSA0NV54IG1vZCAyNTcuICAKKyAqIEl0cyBhc3N1bWVkIHRoYXQgdGhlIHZhbHVlICIyNTYiIGNvcnJlc3BvbmRzIHRvIHplcm8uICovCitjb25zdCB1bnNpZ25lZCBjaGFyIHNhZmVyX2Vib3hbMjU2XSA9IHsKKyAgMSwgIDQ1LCAyMjYsIDE0NywgMTkwLCAgNjksICAyMSwgMTc0LCAxMjAsICAgMywgMTM1LCAxNjQsIDE4NCwgIDU2LCAyMDcsICA2MywgCisgIDgsIDEwMywgICA5LCAxNDgsIDIzNSwgIDM4LCAxNjgsIDEwNywgMTg5LCAgMjQsICA1MiwgIDI3LCAxODcsIDE5MSwgMTE0LCAyNDcsIAorIDY0LCAgNTMsICA3MiwgMTU2LCAgODEsICA0NywgIDU5LCAgODUsIDIyNywgMTkyLCAxNTksIDIxNiwgMjExLCAyNDMsIDE0MSwgMTc3LCAKKzI1NSwgMTY3LCAgNjIsIDIyMCwgMTM0LCAxMTksIDIxNSwgMTY2LCAgMTcsIDI1MSwgMjQ0LCAxODYsIDE0NiwgMTQ1LCAxMDAsIDEzMSwgCisyNDEsICA1MSwgMjM5LCAyMTgsICA0NCwgMTgxLCAxNzgsICA0MywgMTM2LCAyMDksIDE1MywgMjAzLCAxNDAsIDEzMiwgIDI5LCAgMjAsIAorMTI5LCAxNTEsIDExMywgMjAyLCAgOTUsIDE2MywgMTM5LCAgODcsICA2MCwgMTMwLCAxOTYsICA4MiwgIDkyLCAgMjgsIDIzMiwgMTYwLCAKKyAgNCwgMTgwLCAxMzMsICA3NCwgMjQ2LCAgMTksICA4NCwgMTgyLCAyMjMsICAxMiwgIDI2LCAxNDIsIDIyMiwgMjI0LCAgNTcsIDI1MiwgCisgMzIsIDE1NSwgIDM2LCAgNzgsIDE2OSwgMTUyLCAxNTgsIDE3MSwgMjQyLCAgOTYsIDIwOCwgMTA4LCAyMzQsIDI1MCwgMTk5LCAyMTcsIAorICAwLCAyMTIsICAzMSwgMTEwLCAgNjcsIDE4OCwgMjM2LCAgODMsIDEzNywgMjU0LCAxMjIsICA5MywgIDczLCAyMDEsICA1MCwgMTk0LCAKKzI0OSwgMTU0LCAyNDgsIDEwOSwgIDIyLCAyMTksICA4OSwgMTUwLCAgNjgsIDIzMywgMjA1LCAyMzAsICA3MCwgIDY2LCAxNDMsICAxMCwgCisxOTMsIDIwNCwgMTg1LCAxMDEsIDE3NiwgMjEwLCAxOTgsIDE3MiwgIDMwLCAgNjUsICA5OCwgIDQxLCAgNDYsICAxNCwgMTE2LCAgODAsIAorICAyLCAgOTAsIDE5NSwgIDM3LCAxMjMsIDEzOCwgIDQyLCAgOTEsIDI0MCwgICA2LCAgMTMsICA3MSwgMTExLCAxMTIsIDE1NywgMTI2LCAKKyAxNiwgMjA2LCAgMTgsICAzOSwgMjEzLCAgNzYsICA3OSwgMjE0LCAxMjEsICA0OCwgMTA0LCAgNTQsIDExNywgMTI1LCAyMjgsIDIzNywgCisxMjgsIDEwNiwgMTQ0LCAgNTUsIDE2MiwgIDk0LCAxMTgsIDE3MCwgMTk3LCAxMjcsICA2MSwgMTc1LCAxNjUsIDIyOSwgIDI1LCAgOTcsIAorMjUzLCAgNzcsIDEyNCwgMTgzLCAgMTEsIDIzOCwgMTczLCAgNzUsICAzNCwgMjQ1LCAyMzEsIDExNSwgIDM1LCAgMzMsIDIwMCwgICA1LCAKKzIyNSwgMTAyLCAyMjEsIDE3OSwgIDg4LCAxMDUsICA5OSwgIDg2LCAgMTUsIDE2MSwgIDQ5LCAxNDksICAyMywgICA3LCAgNTgsICA0MAorfTsKKworLyogVGhpcyBpcyB0aGUgaW52ZXJzZSBvZiBlYm94IG9yIHRoZSBiYXNlIDQ1IGxvZ2FyaXRobSAqLworY29uc3QgdW5zaWduZWQgY2hhciBzYWZlcl9sYm94WzI1Nl0gPSB7CisxMjgsICAgMCwgMTc2LCAgIDksICA5NiwgMjM5LCAxODUsIDI1MywgIDE2LCAgMTgsIDE1OSwgMjI4LCAxMDUsIDE4NiwgMTczLCAyNDgsCisxOTIsICA1NiwgMTk0LCAxMDEsICA3OSwgICA2LCAxNDgsIDI1MiwgIDI1LCAyMjIsIDEwNiwgIDI3LCAgOTMsICA3OCwgMTY4LCAxMzAsCisxMTIsIDIzNywgMjMyLCAyMzYsIDExNCwgMTc5LCAgMjEsIDE5NSwgMjU1LCAxNzEsIDE4MiwgIDcxLCAgNjgsICAgMSwgMTcyLCAgMzcsIAorMjAxLCAyNTAsIDE0MiwgIDY1LCAgMjYsICAzMywgMjAzLCAyMTEsICAxMywgMTEwLCAyNTQsICAzOCwgIDg4LCAyMTgsICA1MCwgIDE1LCAKKyAzMiwgMTY5LCAxNTcsIDEzMiwgMTUyLCAgIDUsIDE1NiwgMTg3LCAgMzQsIDE0MCwgIDk5LCAyMzEsIDE5NywgMjI1LCAxMTUsIDE5OCwgCisxNzUsICAzNiwgIDkxLCAxMzUsIDEwMiwgIDM5LCAyNDcsICA4NywgMjQ0LCAxNTAsIDE3NywgMTgzLCAgOTIsIDEzOSwgMjEzLCAgODQsIAorMTIxLCAyMjMsIDE3MCwgMjQ2LCAgNjIsIDE2MywgMjQxLCAgMTcsIDIwMiwgMjQ1LCAyMDksICAyMywgMTIzLCAxNDcsIDEzMSwgMTg4LCAKKzE4OSwgIDgyLCAgMzAsIDIzNSwgMTc0LCAyMDQsIDIxNCwgIDUzLCAgIDgsIDIwMCwgMTM4LCAxODAsIDIyNiwgMjA1LCAxOTEsIDIxNywKKzIwOCwgIDgwLCAgODksICA2MywgIDc3LCAgOTgsICA1MiwgIDEwLCAgNzIsIDEzNiwgMTgxLCAgODYsICA3NiwgIDQ2LCAxMDcsIDE1OCwgCisyMTAsICA2MSwgIDYwLCAgIDMsICAxOSwgMjUxLCAxNTEsICA4MSwgMTE3LCAgNzQsIDE0NSwgMTEzLCAgMzUsIDE5MCwgMTE4LCAgNDIsIAorIDk1LCAyNDksIDIxMiwgIDg1LCAgMTEsIDIyMCwgIDU1LCAgNDksICAyMiwgMTE2LCAyMTUsIDExOSwgMTY3LCAyMzAsICAgNywgMjE5LAorMTY0LCAgNDcsICA3MCwgMjQzLCAgOTcsICA2OSwgMTAzLCAyMjcsICAxMiwgMTYyLCAgNTksICAyOCwgMTMzLCAgMjQsICAgNCwgIDI5LCAKKyA0MSwgMTYwLCAxNDMsIDE3OCwgIDkwLCAyMTYsIDE2NiwgMTI2LCAyMzgsIDE0MSwgIDgzLCAgNzUsIDE2MSwgMTU0LCAxOTMsICAxNCwgCisxMjIsICA3MywgMTY1LCAgNDQsIDEyOSwgMTk2LCAxOTksICA1NCwgIDQzLCAxMjcsICA2NywgMTQ5LCAgNTEsIDI0MiwgMTA4LCAxMDQsIAorMTA5LCAyNDAsICAgMiwgIDQwLCAyMDYsIDIyMSwgMTU1LCAyMzQsICA5NCwgMTUzLCAxMjQsICAyMCwgMTM0LCAyMDcsIDIyOSwgIDY2LCAKKzE4NCwgIDY0LCAxMjAsICA0NSwgIDU4LCAyMzMsIDEwMCwgIDMxLCAxNDYsIDE0NCwgMTI1LCAgNTcsIDExMSwgMjI0LCAxMzcsICA0OAorfTsKKworI2VuZGlmCisKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9zYWZlci9zYWZlcl90YWIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVycC5jIGIvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvc2FmZXIvc2FmZXJwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZmNGVlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3NhZmVyL3NhZmVycC5jCkBAIC0wLDAgKzEsNTU5IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiogCisgICBAZmlsZSBzYWZlcnAuYworICAgU0FGRVIrIEltcGxlbWVudGF0aW9uIGJ5IFRvbSBTdCBEZW5pcyAKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIFNBRkVSUAorCitjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIHNhZmVycF9kZXNjID0KK3sKKyAgICAic2FmZXIrIiwKKyAgICA0LAorICAgIDE2LCAzMiwgMTYsIDgsCisgICAgJnNhZmVycF9zZXR1cCwKKyAgICAmc2FmZXJwX2VjYl9lbmNyeXB0LAorICAgICZzYWZlcnBfZWNiX2RlY3J5cHQsCisgICAgJnNhZmVycF90ZXN0LAorICAgICZzYWZlcnBfZG9uZSwKKyAgICAmc2FmZXJwX2tleXNpemUsCisgICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfTsKKworLyogUk9VTkQoYixpKSAKKyAqCisgKiBUaGlzIGlzIG9uZSBmb3J3YXJkIGtleSBhcHBsaWNhdGlvbi4gIE5vdGUgdGhlIGJhc2ljIGZvcm0gaXMgCisgKiBrZXkgYWRkaXRpb24sIHN1YnN0aXR1dGlvbiwga2V5IGFkZGl0aW9uLiAgVGhlIHNhZmVyX2Vib3ggYW5kIHNhZmVyX2xib3ggCisgKiBhcmUgdGhlIGV4cG9uZW50aWF0aW9uIGJveCBhbmQgbG9nYXJpdGhtIGJveGVzIHJlc3BlY3RpdmVseS4gIAorICogVGhlIHZhbHVlIG9mICdpJyBpcyB0aGUgY3VycmVudCByb3VuZCBudW1iZXIgd2hpY2ggYWxsb3dzIHRoaXMgCisgKiBmdW5jdGlvbiB0byBiZSB1bnJvbGxlZCBtYXNzaXZlbHkuICBNb3N0IG9mIFNBRkVSKydzIHNwZWVkIAorICogY29tZXMgZnJvbSBub3QgaGF2aW5nIHRvIGNvbXB1dGUgaW5kaXJlY3QgYWNjZXNzZXMgaW50byB0aGUgCisgKiBhcnJheSBvZiAxNiBieXRlcyBiWzAuLjE1XSB3aGljaCBpcyB0aGUgYmxvY2sgb2YgZGF0YQorKi8KKworZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FmZXJfZWJveFtdLCBzYWZlcl9sYm94W107CisKKyNkZWZpbmUgUk9VTkQoYiwgaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYlswXSAgPSAoc2FmZXJfZWJveFsoYlswXSBeIHNrZXktPnNhZmVycC5LW2ldWzBdKSAmIDI1NV0gKyBza2V5LT5zYWZlcnAuS1tpKzFdWzBdKSAmIDI1NTsgICAgXAorICAgIGJbMV0gID0gc2FmZXJfbGJveFsoYlsxXSArIHNrZXktPnNhZmVycC5LW2ldWzFdKSAmIDI1NV0gXiBza2V5LT5zYWZlcnAuS1tpKzFdWzFdOyAgICAgICAgICAgIFwKKyAgICBiWzJdICA9IHNhZmVyX2xib3hbKGJbMl0gKyBza2V5LT5zYWZlcnAuS1tpXVsyXSkgJiAyNTVdIF4gc2tleS0+c2FmZXJwLktbaSsxXVsyXTsgICAgICAgICAgICBcCisgICAgYlszXSAgPSAoc2FmZXJfZWJveFsoYlszXSBeIHNrZXktPnNhZmVycC5LW2ldWzNdKSAmIDI1NV0gKyBza2V5LT5zYWZlcnAuS1tpKzFdWzNdKSAmIDI1NTsgICAgXAorICAgIGJbNF0gID0gKHNhZmVyX2Vib3hbKGJbNF0gXiBza2V5LT5zYWZlcnAuS1tpXVs0XSkgJiAyNTVdICsgc2tleS0+c2FmZXJwLktbaSsxXVs0XSkgJiAyNTU7ICAgIFwKKyAgICBiWzVdICA9IHNhZmVyX2xib3hbKGJbNV0gKyBza2V5LT5zYWZlcnAuS1tpXVs1XSkgJiAyNTVdIF4gc2tleS0+c2FmZXJwLktbaSsxXVs1XTsgICAgICAgICAgICBcCisgICAgYls2XSAgPSBzYWZlcl9sYm94WyhiWzZdICsgc2tleS0+c2FmZXJwLktbaV1bNl0pICYgMjU1XSBeIHNrZXktPnNhZmVycC5LW2krMV1bNl07ICAgICAgICAgICAgXAorICAgIGJbN10gID0gKHNhZmVyX2Vib3hbKGJbN10gXiBza2V5LT5zYWZlcnAuS1tpXVs3XSkgJiAyNTVdICsgc2tleS0+c2FmZXJwLktbaSsxXVs3XSkgJiAyNTU7ICAgIFwKKyAgICBiWzhdICA9IChzYWZlcl9lYm94WyhiWzhdIF4gc2tleS0+c2FmZXJwLktbaV1bOF0pICYgMjU1XSArIHNrZXktPnNhZmVycC5LW2krMV1bOF0pICYgMjU1OyAgICBcCisgICAgYls5XSAgPSBzYWZlcl9sYm94WyhiWzldICsgc2tleS0+c2FmZXJwLktbaV1bOV0pICYgMjU1XSBeIHNrZXktPnNhZmVycC5LW2krMV1bOV07ICAgICAgICAgICAgXAorICAgIGJbMTBdID0gc2FmZXJfbGJveFsoYlsxMF0gKyBza2V5LT5zYWZlcnAuS1tpXVsxMF0pICYgMjU1XSBeIHNrZXktPnNhZmVycC5LW2krMV1bMTBdOyAgICAgICAgIFwKKyAgICBiWzExXSA9IChzYWZlcl9lYm94WyhiWzExXSBeIHNrZXktPnNhZmVycC5LW2ldWzExXSkgJiAyNTVdICsgc2tleS0+c2FmZXJwLktbaSsxXVsxMV0pICYgMjU1OyBcCisgICAgYlsxMl0gPSAoc2FmZXJfZWJveFsoYlsxMl0gXiBza2V5LT5zYWZlcnAuS1tpXVsxMl0pICYgMjU1XSArIHNrZXktPnNhZmVycC5LW2krMV1bMTJdKSAmIDI1NTsgXAorICAgIGJbMTNdID0gc2FmZXJfbGJveFsoYlsxM10gKyBza2V5LT5zYWZlcnAuS1tpXVsxM10pICYgMjU1XSBeIHNrZXktPnNhZmVycC5LW2krMV1bMTNdOyAgICAgICAgIFwKKyAgICBiWzE0XSA9IHNhZmVyX2xib3hbKGJbMTRdICsgc2tleS0+c2FmZXJwLktbaV1bMTRdKSAmIDI1NV0gXiBza2V5LT5zYWZlcnAuS1tpKzFdWzE0XTsgICAgICAgICBcCisgICAgYlsxNV0gPSAoc2FmZXJfZWJveFsoYlsxNV0gXiBza2V5LT5zYWZlcnAuS1tpXVsxNV0pICYgMjU1XSArIHNrZXktPnNhZmVycC5LW2krMV1bMTVdKSAmIDI1NTsgICAgICAgIAorCisvKiBUaGlzIGlzIG9uZSBpbnZlcnNlIGtleSBhcHBsaWNhdGlvbiAqLworI2RlZmluZSBpUk9VTkQoYiwgaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBiWzBdICA9IHNhZmVyX2xib3hbKGJbMF0gLSBza2V5LT5zYWZlcnAuS1tpKzFdWzBdKSAmIDI1NV0gXiBza2V5LT5zYWZlcnAuS1tpXVswXTsgICAgICAgICAgICBcCisgICAgYlsxXSAgPSAoc2FmZXJfZWJveFsoYlsxXSBeIHNrZXktPnNhZmVycC5LW2krMV1bMV0pICYgMjU1XSAtIHNrZXktPnNhZmVycC5LW2ldWzFdKSAmIDI1NTsgICAgXAorICAgIGJbMl0gID0gKHNhZmVyX2Vib3hbKGJbMl0gXiBza2V5LT5zYWZlcnAuS1tpKzFdWzJdKSAmIDI1NV0gLSBza2V5LT5zYWZlcnAuS1tpXVsyXSkgJiAyNTU7ICAgIFwKKyAgICBiWzNdICA9IHNhZmVyX2xib3hbKGJbM10gLSBza2V5LT5zYWZlcnAuS1tpKzFdWzNdKSAmIDI1NV0gXiBza2V5LT5zYWZlcnAuS1tpXVszXTsgICAgICAgICAgICBcCisgICAgYls0XSAgPSBzYWZlcl9sYm94WyhiWzRdIC0gc2tleS0+c2FmZXJwLktbaSsxXVs0XSkgJiAyNTVdIF4gc2tleS0+c2FmZXJwLktbaV1bNF07ICAgICAgICAgICAgXAorICAgIGJbNV0gID0gKHNhZmVyX2Vib3hbKGJbNV0gXiBza2V5LT5zYWZlcnAuS1tpKzFdWzVdKSAmIDI1NV0gLSBza2V5LT5zYWZlcnAuS1tpXVs1XSkgJiAyNTU7ICAgIFwKKyAgICBiWzZdICA9IChzYWZlcl9lYm94WyhiWzZdIF4gc2tleS0+c2FmZXJwLktbaSsxXVs2XSkgJiAyNTVdIC0gc2tleS0+c2FmZXJwLktbaV1bNl0pICYgMjU1OyAgICBcCisgICAgYls3XSAgPSBzYWZlcl9sYm94WyhiWzddIC0gc2tleS0+c2FmZXJwLktbaSsxXVs3XSkgJiAyNTVdIF4gc2tleS0+c2FmZXJwLktbaV1bN107ICAgICAgICAgICAgXAorICAgIGJbOF0gID0gc2FmZXJfbGJveFsoYls4XSAtIHNrZXktPnNhZmVycC5LW2krMV1bOF0pICYgMjU1XSBeIHNrZXktPnNhZmVycC5LW2ldWzhdOyAgICAgICAgICAgIFwKKyAgICBiWzldICA9IChzYWZlcl9lYm94WyhiWzldIF4gc2tleS0+c2FmZXJwLktbaSsxXVs5XSkgJiAyNTVdIC0gc2tleS0+c2FmZXJwLktbaV1bOV0pICYgMjU1OyAgICBcCisgICAgYlsxMF0gPSAoc2FmZXJfZWJveFsoYlsxMF0gXiBza2V5LT5zYWZlcnAuS1tpKzFdWzEwXSkgJiAyNTVdIC0gc2tleS0+c2FmZXJwLktbaV1bMTBdKSAmIDI1NTsgXAorICAgIGJbMTFdID0gc2FmZXJfbGJveFsoYlsxMV0gLSBza2V5LT5zYWZlcnAuS1tpKzFdWzExXSkgJiAyNTVdIF4gc2tleS0+c2FmZXJwLktbaV1bMTFdOyAgICAgICAgIFwKKyAgICBiWzEyXSA9IHNhZmVyX2xib3hbKGJbMTJdIC0gc2tleS0+c2FmZXJwLktbaSsxXVsxMl0pICYgMjU1XSBeIHNrZXktPnNhZmVycC5LW2ldWzEyXTsgICAgICAgICBcCisgICAgYlsxM10gPSAoc2FmZXJfZWJveFsoYlsxM10gXiBza2V5LT5zYWZlcnAuS1tpKzFdWzEzXSkgJiAyNTVdIC0gc2tleS0+c2FmZXJwLktbaV1bMTNdKSAmIDI1NTsgXAorICAgIGJbMTRdID0gKHNhZmVyX2Vib3hbKGJbMTRdIF4gc2tleS0+c2FmZXJwLktbaSsxXVsxNF0pICYgMjU1XSAtIHNrZXktPnNhZmVycC5LW2ldWzE0XSkgJiAyNTU7IFwKKyAgICBiWzE1XSA9IHNhZmVyX2xib3hbKGJbMTVdIC0gc2tleS0+c2FmZXJwLktbaSsxXVsxNV0pICYgMjU1XSBeIHNrZXktPnNhZmVycC5LW2ldWzE1XTsKKworLyogVGhpcyBpcyBhIGZvcndhcmQgc2luZ2xlIGxheWVyIFBIVCB0cmFuc2Zvcm0uICAqLworI2RlZmluZSBQSFQoYikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBiWzBdICA9IChiWzBdICsgKGJbMV0gPSAoYlswXSArIGJbMV0pICYgMjU1KSkgJiAyNTU7ICAgICBcCisgICAgYlsyXSAgPSAoYlsyXSArIChiWzNdID0gKGJbM10gKyBiWzJdKSAmIDI1NSkpICYgMjU1OyAgICAgXAorICAgIGJbNF0gID0gKGJbNF0gKyAoYls1XSA9IChiWzVdICsgYls0XSkgJiAyNTUpKSAmIDI1NTsgICAgIFwKKyAgICBiWzZdICA9IChiWzZdICsgKGJbN10gPSAoYls3XSArIGJbNl0pICYgMjU1KSkgJiAyNTU7ICAgICBcCisgICAgYls4XSAgPSAoYls4XSArIChiWzldID0gKGJbOV0gKyBiWzhdKSAmIDI1NSkpICYgMjU1OyAgICAgXAorICAgIGJbMTBdID0gKGJbMTBdICsgKGJbMTFdID0gKGJbMTFdICsgYlsxMF0pICYgMjU1KSkgJiAyNTU7IFwKKyAgICBiWzEyXSA9IChiWzEyXSArIChiWzEzXSA9IChiWzEzXSArIGJbMTJdKSAmIDI1NSkpICYgMjU1OyBcCisgICAgYlsxNF0gPSAoYlsxNF0gKyAoYlsxNV0gPSAoYlsxNV0gKyBiWzE0XSkgJiAyNTUpKSAmIDI1NTsgICAgCisKKy8qIFRoaXMgaXMgYW4gaW52ZXJzZSBzaW5nbGUgbGF5ZXIgUEhUIHRyYW5zZm9ybSAqLworI2RlZmluZSBpUEhUKGIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYlsxNV0gPSAoYlsxNV0gLSAoYlsxNF0gPSAoYlsxNF0gLSBiWzE1XSkgJiAyNTUpKSAmIDI1NTsgIFwKKyAgICBiWzEzXSA9IChiWzEzXSAtIChiWzEyXSA9IChiWzEyXSAtIGJbMTNdKSAmIDI1NSkpICYgMjU1OyAgXAorICAgIGJbMTFdID0gKGJbMTFdIC0gKGJbMTBdID0gKGJbMTBdIC0gYlsxMV0pICYgMjU1KSkgJiAyNTU7ICBcCisgICAgYls5XSAgPSAoYls5XSAtIChiWzhdID0gKGJbOF0gLSBiWzldKSAmIDI1NSkpICYgMjU1OyAgICAgIFwKKyAgICBiWzddICA9IChiWzddIC0gKGJbNl0gPSAoYls2XSAtIGJbN10pICYgMjU1KSkgJiAyNTU7ICAgICAgXAorICAgIGJbNV0gID0gKGJbNV0gLSAoYls0XSA9IChiWzRdIC0gYls1XSkgJiAyNTUpKSAmIDI1NTsgICAgICBcCisgICAgYlszXSAgPSAoYlszXSAtIChiWzJdID0gKGJbMl0gLSBiWzNdKSAmIDI1NSkpICYgMjU1OyAgICAgIFwKKyAgICBiWzFdICA9IChiWzFdIC0gKGJbMF0gPSAoYlswXSAtIGJbMV0pICYgMjU1KSkgJiAyNTU7ICAgICAgXAorCisvKiBUaGlzIGlzIHRoZSAiQXJtZW5pYW4iIFNodWZmbGUuICBJdCB0YWtlcyB0aGUgaW5wdXQgZnJvbSBiIGFuZCBzdG9yZXMgaXQgaW4gYjIgKi8KKyNkZWZpbmUgU0hVRihiLCBiMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGIyWzBdID0gYls4XTsgYjJbMV0gPSBiWzExXTsgYjJbMl0gPSBiWzEyXTsgYjJbM10gPSBiWzE1XTsgICBcCisgICAgYjJbNF0gPSBiWzJdOyBiMls1XSA9IGJbMV07IGIyWzZdID0gYls2XTsgYjJbN10gPSBiWzVdOyAgICAgIFwKKyAgICBiMls4XSA9IGJbMTBdOyBiMls5XSA9IGJbOV07IGIyWzEwXSA9IGJbMTRdOyBiMlsxMV0gPSBiWzEzXTsgXAorICAgIGIyWzEyXSA9IGJbMF07IGIyWzEzXSA9IGJbN107IGIyWzE0XSA9IGJbNF07IGIyWzE1XSA9IGJbM107CisKKy8qIFRoaXMgaXMgdGhlIGludmVyc2Ugc2h1ZmZsZS4gIEl0IHRha2VzIGZyb20gYiBhbmQgZ2l2ZXMgdG8gYjIgKi8KKyNkZWZpbmUgaVNIVUYoYiwgYjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgYjJbMF0gPSBiWzEyXTsgYjJbMV0gPSBiWzVdOyBiMlsyXSA9IGJbNF07IGIyWzNdID0gYlsxNV07ICAgICAgXAorICAgIGIyWzRdID0gYlsxNF07IGIyWzVdID0gYls3XTsgYjJbNl0gPSBiWzZdOyBiMls3XSA9IGJbMTNdOyAgICAgIFwKKyAgICBiMls4XSA9IGJbMF07IGIyWzldID0gYls5XTsgYjJbMTBdID0gYls4XTsgYjJbMTFdID0gYlsxXTsgICAgICBcCisgICAgYjJbMTJdID0gYlsyXTsgYjJbMTNdID0gYlsxMV07IGIyWzE0XSA9IGJbMTBdOyBiMlsxNV0gPSBiWzNdOworCisvKiBUaGUgY29tcGxldGUgZm9yd2FyZCBMaW5lYXIgVHJhbnNmb3JtIGxheWVyLiAgCisgKiBOb3RlIHRoYXQgYWx0ZXJuYXRpbmcgdXNhZ2Ugb2YgYiBhbmQgYjIuICAKKyAqIEVhY2ggcm91bmQgb2YgTFQgc3RhcnRzIGluICdiJyBhbmQgZW5kcyBpbiAnYjInLiAgCisgKi8KKyNkZWZpbmUgTFQoYiwgYjIpICAgICAgICAgICAgIFwKKyAgICBQSFQoYik7ICBTSFVGKGIsIGIyKTsgICAgIFwKKyAgICBQSFQoYjIpOyBTSFVGKGIyLCBiKTsgICAgIFwKKyAgICBQSFQoYik7ICBTSFVGKGIsIGIyKTsgICAgIFwKKyAgICBQSFQoYjIpOyAKKworLyogVGhpcyBpcyB0aGUgaW52ZXJzZSBsaW5lYXIgdHJhbnNmb3JtIGxheWVyLiAgKi8KKyNkZWZpbmUgaUxUKGIsIGIyKSAgICAgICAgICAgIFwKKyAgICBpUEhUKGIpOyAgICAgICAgICAgICAgICAgIFwKKyAgICBpU0hVRihiLCBiMik7IGlQSFQoYjIpOyAgIFwKKyAgICBpU0hVRihiMiwgYik7IGlQSFQoYik7ICAgIFwKKyAgICBpU0hVRihiLCBiMik7IGlQSFQoYjIpOworICAgIAorI2lmZGVmIExUQ19TTUFMTF9DT0RFICAgIAorCitzdGF0aWMgdm9pZCBfcm91bmQodW5zaWduZWQgY2hhciAqYiwgaW50IGksIHN5bW1ldHJpY19rZXkgKnNrZXkpIAoreworICAgUk9VTkQoYiwgaSk7Cit9CisKK3N0YXRpYyB2b2lkIF9pcm91bmQodW5zaWduZWQgY2hhciAqYiwgaW50IGksIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICBpUk9VTkQoYiwgaSk7Cit9CisKK3N0YXRpYyB2b2lkIF9sdCh1bnNpZ25lZCBjaGFyICpiLCB1bnNpZ25lZCBjaGFyICpiMikKK3sKKyAgIExUKGIsIGIyKTsKK30KKworc3RhdGljIHZvaWQgX2lsdCh1bnNpZ25lZCBjaGFyICpiLCB1bnNpZ25lZCBjaGFyICpiMikKK3sKKyAgIGlMVChiLCBiMik7Cit9ICAgCisKKyN1bmRlZiBST1VORAorI2RlZmluZSBST1VORChiLCBpKSBfcm91bmQoYiwgaSwgc2tleSkKKworI3VuZGVmIGlST1VORAorI2RlZmluZSBpUk9VTkQoYiwgaSkgX2lyb3VuZChiLCBpLCBza2V5KQorCisjdW5kZWYgTFQKKyNkZWZpbmUgTFQoYiwgYjIpIF9sdChiLCBiMikKKworI3VuZGVmIGlMVAorI2RlZmluZSBpTFQoYiwgYjIpIF9pbHQoYiwgYjIpCisKKyNlbmRpZgorCisvKiBUaGVzZSBhcmUgdGhlIDMzLCAxMjgtYml0IGJpYXMgd29yZHMgZm9yIHRoZSBrZXkgc2NoZWR1bGUgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhZmVyX2JpYXNbMzNdWzE2XSA9IHsKK3sgIDcwLCAxNTEsIDE3NywgMTg2LCAxNjMsIDE4MywgIDE2LCAgMTAsIDE5NywgIDU1LCAxNzksIDIwMSwgIDkwLCAgNDAsIDE3MiwgMTAwfSwKK3sgMjM2LCAxNzEsIDE3MCwgMTk4LCAxMDMsIDE0OSwgIDg4LCAgMTMsIDI0OCwgMTU0LCAyNDYsIDExMCwgMTAyLCAyMjAsICAgNSwgIDYxfSwKK3sgMTM4LCAxOTUsIDIxNiwgMTM3LCAxMDYsIDIzMywgIDU0LCAgNzMsICA2NywgMTkxLCAyMzUsIDIxMiwgMTUwLCAxNTUsIDEwNCwgMTYwfSwKK3sgIDkzLCAgODcsIDE0NiwgIDMxLCAyMTMsIDExMywgIDkyLCAxODcsICAzNCwgMTkzLCAxOTAsIDEyMywgMTg4LCAxNTMsICA5OSwgMTQ4fSwKK3sgIDQyLCAgOTcsIDE4NCwgIDUyLCAgNTAsICAyNSwgMjUzLCAyNTEsICAyMywgIDY0LCAyMzAsICA4MSwgIDI5LCAgNjUsICA2OCwgMTQzfSwKK3sgMjIxLCAgIDQsIDEyOCwgMjIyLCAyMzEsICA0OSwgMjE0LCAxMjcsICAgMSwgMTYyLCAyNDcsICA1NywgMjE4LCAxMTEsICAzNSwgMjAyfSwKK3sgIDU4LCAyMDgsICAyOCwgMjA5LCAgNDgsICA2MiwgIDE4LCAxNjEsIDIwNSwgIDE1LCAyMjQsIDE2OCwgMTc1LCAxMzAsICA4OSwgIDQ0fSwKK3sgMTI1LCAxNzMsIDE3OCwgMjM5LCAxOTQsIDEzNSwgMjA2LCAxMTcsICAgNiwgIDE5LCAgIDIsIDE0NCwgIDc5LCAgNDYsIDExNCwgIDUxfSwKK3sgMTkyLCAxNDEsIDIwNywgMTY5LCAxMjksIDIyNiwgMTk2LCAgMzksICA0NywgMTA4LCAxMjIsIDE1OSwgIDgyLCAyMjUsICAyMSwgIDU2fSwKK3sgMjUyLCAgMzIsICA2NiwgMTk5LCAgIDgsIDIyOCwgICA5LCAgODUsICA5NCwgMTQwLCAgMjAsIDExOCwgIDk2LCAyNTUsIDIyMywgMjE1fSwKK3sgMjUwLCAgMTEsICAzMywgICAwLCAgMjYsIDI0OSwgMTY2LCAxODUsIDIzMiwgMTU4LCAgOTgsICA3NiwgMjE3LCAxNDUsICA4MCwgMjEwfSwKK3sgIDI0LCAxODAsICAgNywgMTMyLCAyMzQsICA5MSwgMTY0LCAyMDAsICAxNCwgMjAzLCAgNzIsIDEwNSwgIDc1LCAgNzgsIDE1NiwgIDUzfSwKK3sgIDY5LCAgNzcsICA4NCwgMjI5LCAgMzcsICA2MCwgIDEyLCAgNzQsIDEzOSwgIDYzLCAyMDQsIDE2NywgMjE5LCAxMDcsIDE3NCwgMjQ0fSwKK3sgIDQ1LCAyNDMsIDEyNCwgMTA5LCAxNTcsIDE4MSwgIDM4LCAxMTYsIDI0MiwgMTQ3LCAgODMsIDE3NiwgMjQwLCAgMTcsIDIzNywgMTMxfSwKK3sgMTgyLCAgIDMsICAyMiwgMTE1LCAgNTksICAzMCwgMTQyLCAxMTIsIDE4OSwgMTM0LCAgMjcsICA3MSwgMTI2LCAgMzYsICA4NiwgMjQxfSwKK3sgMTM2LCAgNzAsIDE1MSwgMTc3LCAxODYsIDE2MywgMTgzLCAgMTYsICAxMCwgMTk3LCAgNTUsIDE3OSwgMjAxLCAgOTAsICA0MCwgMTcyfSwKK3sgMjIwLCAxMzQsIDExOSwgMjE1LCAxNjYsICAxNywgMjUxLCAyNDQsIDE4NiwgMTQ2LCAxNDUsIDEwMCwgMTMxLCAyNDEsICA1MSwgMjM5fSwKK3sgIDQ0LCAxODEsIDE3OCwgIDQzLCAxMzYsIDIwOSwgMTUzLCAyMDMsIDE0MCwgMTMyLCAgMjksICAyMCwgMTI5LCAxNTEsIDExMywgMjAyfSwKK3sgMTYzLCAxMzksICA4NywgIDYwLCAxMzAsIDE5NiwgIDgyLCAgOTIsICAyOCwgMjMyLCAxNjAsICAgNCwgMTgwLCAxMzMsICA3NCwgMjQ2fSwKK3sgIDg0LCAxODIsIDIyMywgIDEyLCAgMjYsIDE0MiwgMjIyLCAyMjQsICA1NywgMjUyLCAgMzIsIDE1NSwgIDM2LCAgNzgsIDE2OSwgMTUyfSwKK3sgMTcxLCAyNDIsICA5NiwgMjA4LCAxMDgsIDIzNCwgMjUwLCAxOTksIDIxNywgICAwLCAyMTIsICAzMSwgMTEwLCAgNjcsIDE4OCwgMjM2fSwKK3sgMTM3LCAyNTQsIDEyMiwgIDkzLCAgNzMsIDIwMSwgIDUwLCAxOTQsIDI0OSwgMTU0LCAyNDgsIDEwOSwgIDIyLCAyMTksICA4OSwgMTUwfSwKK3sgMjMzLCAyMDUsIDIzMCwgIDcwLCAgNjYsIDE0MywgIDEwLCAxOTMsIDIwNCwgMTg1LCAxMDEsIDE3NiwgMjEwLCAxOTgsIDE3MiwgIDMwfSwKK3sgIDk4LCAgNDEsICA0NiwgIDE0LCAxMTYsICA4MCwgICAyLCAgOTAsIDE5NSwgIDM3LCAxMjMsIDEzOCwgIDQyLCAgOTEsIDI0MCwgICA2fSwKK3sgIDcxLCAxMTEsIDExMiwgMTU3LCAxMjYsICAxNiwgMjA2LCAgMTgsICAzOSwgMjEzLCAgNzYsICA3OSwgMjE0LCAxMjEsICA0OCwgMTA0fSwKK3sgMTE3LCAxMjUsIDIyOCwgMjM3LCAxMjgsIDEwNiwgMTQ0LCAgNTUsIDE2MiwgIDk0LCAxMTgsIDE3MCwgMTk3LCAxMjcsICA2MSwgMTc1fSwKK3sgMjI5LCAgMjUsICA5NywgMjUzLCAgNzcsIDEyNCwgMTgzLCAgMTEsIDIzOCwgMTczLCAgNzUsICAzNCwgMjQ1LCAyMzEsIDExNSwgIDM1fSwKK3sgMjAwLCAgIDUsIDIyNSwgMTAyLCAyMjEsIDE3OSwgIDg4LCAxMDUsICA5OSwgIDg2LCAgMTUsIDE2MSwgIDQ5LCAxNDksICAyMywgICA3fSwKK3sgIDQwLCAgIDEsICA0NSwgMjI2LCAxNDcsIDE5MCwgIDY5LCAgMjEsIDE3NCwgMTIwLCAgIDMsIDEzNSwgMTY0LCAxODQsICA1NiwgMjA3fSwKK3sgICA4LCAxMDMsICAgOSwgMTQ4LCAyMzUsICAzOCwgMTY4LCAxMDcsIDE4OSwgIDI0LCAgNTIsICAyNywgMTg3LCAxOTEsIDExNCwgMjQ3fSwKK3sgIDUzLCAgNzIsIDE1NiwgIDgxLCAgNDcsICA1OSwgIDg1LCAyMjcsIDE5MiwgMTU5LCAyMTYsIDIxMSwgMjQzLCAxNDEsIDE3NywgMjU1fSwKK3sgIDYyLCAyMjAsIDEzNCwgMTE5LCAyMTUsIDE2NiwgIDE3LCAyNTEsIDI0NCwgMTg2LCAxNDYsIDE0NSwgMTAwLCAxMzEsIDI0MSwgIDUxfX07CisKKyAvKioKKyAgICBJbml0aWFsaXplIHRoZSBTQUZFUisgYmxvY2sgY2lwaGVyCisgICAgQHBhcmFtIGtleSBUaGUgc3ltbWV0cmljIGtleSB5b3Ugd2lzaCB0byBwYXNzCisgICAgQHBhcmFtIGtleWxlbiBUaGUga2V5IGxlbmd0aCBpbiBieXRlcworICAgIEBwYXJhbSBudW1fcm91bmRzIFRoZSBudW1iZXIgb2Ygcm91bmRzIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICAgQHBhcmFtIHNrZXkgVGhlIGtleSBpbiBhcyBzY2hlZHVsZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAqLworaW50IHNhZmVycF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgdW5zaWduZWQgeCwgeSwgejsKKyAgIHVuc2lnbmVkIGNoYXIgdFszM107CisgICBzdGF0aWMgY29uc3QgaW50IHJvdW5kc1szXSA9IHsgOCwgMTIsIDE2IH07CisKKyAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKworICAgLyogY2hlY2sgYXJndW1lbnRzICovCisgICBpZiAoa2V5bGVuICE9IDE2ICYmIGtleWxlbiAhPSAyNCAmJiBrZXlsZW4gIT0gMzIpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICB9CisKKyAgIC8qIElzIHRoZSBudW1iZXIgb2Ygcm91bmRzIHZhbGlkPyAgRWl0aGVyIHVzZSB6ZXJvIGZvciBkZWZhdWx0IG9yCisgICAgKiA4LDEyLDE2IHJvdW5kcyBmb3IgMTYsMjQsMzIgYnl0ZSBrZXlzIAorICAgICovCisgICBpZiAobnVtX3JvdW5kcyAhPSAwICYmIG51bV9yb3VuZHMgIT0gcm91bmRzWyhrZXlsZW4vOCktMl0pIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1JPVU5EUzsKKyAgIH0KKworICAgLyogMTI4IGJpdCBrZXkgdmVyc2lvbiAqLworICAgaWYgKGtleWxlbiA9PSAxNikgeworICAgICAgIC8qIGNvcHkga2V5IGludG8gdCAqLworICAgICAgIGZvciAoeCA9IHkgPSAwOyB4IDwgMTY7IHgrKykgeyAKKyAgICAgICAgICAgdFt4XSA9IGtleVt4XTsgCisgICAgICAgICAgIHkgXj0ga2V5W3hdOyAKKyAgICAgICB9CisgICAgICAgdFsxNl0gPSB5OworCisgICAgICAgLyogbWFrZSByb3VuZCBrZXlzICovCisgICAgICAgZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsKKyAgICAgICAgICAgc2tleS0+c2FmZXJwLktbMF1beF0gPSB0W3hdOworICAgICAgIH0KKworICAgICAgIC8qIG1ha2UgdGhlIDE2IG90aGVyIGtleXMgYXMgYSB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgZmlyc3Qga2V5ICovCisgICAgICAgZm9yICh4ID0gMTsgeCA8IDE3OyB4KyspIHsKKyAgICAgICAgICAgLyogcm90YXRlIDMgYml0cyBlYWNoICovCisgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNzsgeSsrKSB7CisgICAgICAgICAgICAgICB0W3ldID0gKCh0W3ldPDwzKXwodFt5XT4+NSkpICYgMjU1OworICAgICAgICAgICB9CisKKyAgICAgICAgICAgLyogc2VsZWN0IGFuZCBhZGQgKi8KKyAgICAgICAgICAgeiA9IHg7CisgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7CisgICAgICAgICAgICAgICBza2V5LT5zYWZlcnAuS1t4XVt5XSA9ICh0W3pdICsgc2FmZXJfYmlhc1t4LTFdW3ldKSAmIDI1NTsKKyAgICAgICAgICAgICAgIGlmICgrK3ogPT0gMTcpIHsgeiA9IDA7IH0KKyAgICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICBza2V5LT5zYWZlcnAucm91bmRzID0gODsKKyAgIH0gZWxzZSBpZiAoa2V5bGVuID09IDI0KSB7CisgICAgICAgLyogY29weSBrZXkgaW50byB0ICovCisgICAgICAgZm9yICh4ID0geSA9IDA7IHggPCAyNDsgeCsrKSB7IAorICAgICAgICAgICB0W3hdID0ga2V5W3hdOyAKKyAgICAgICAgICAgeSBePSBrZXlbeF07IAorICAgICAgIH0KKyAgICAgICB0WzI0XSA9IHk7CisKKyAgICAgICAvKiBtYWtlIHJvdW5kIGtleXMgKi8KKyAgICAgICBmb3IgKHggPSAwOyB4IDwgMTY7IHgrKykgeworICAgICAgICAgICBza2V5LT5zYWZlcnAuS1swXVt4XSA9IHRbeF07CisgICAgICAgfQorCisgICAgICAgZm9yICh4ID0gMTsgeCA8IDI1OyB4KyspIHsKKyAgICAgICAgICAgLyogcm90YXRlIDMgYml0cyBlYWNoICovCisgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAyNTsgeSsrKSB7CisgICAgICAgICAgICAgICB0W3ldID0gKCh0W3ldPDwzKXwodFt5XT4+NSkpICYgMjU1OworICAgICAgICAgICB9CisKKyAgICAgICAgICAgLyogc2VsZWN0IGFuZCBhZGQgKi8KKyAgICAgICAgICAgeiA9IHg7CisgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7IAorICAgICAgICAgICAgICAgc2tleS0+c2FmZXJwLktbeF1beV0gPSAodFt6XSArIHNhZmVyX2JpYXNbeC0xXVt5XSkgJiAyNTU7CisgICAgICAgICAgICAgICBpZiAoKyt6ID09IDI1KSB7IHogPSAwOyB9CisgICAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgc2tleS0+c2FmZXJwLnJvdW5kcyA9IDEyOworICAgfSBlbHNlIHsKKyAgICAgICAvKiBjb3B5IGtleSBpbnRvIHQgKi8KKyAgICAgICBmb3IgKHggPSB5ID0gMDsgeCA8IDMyOyB4KyspIHsgCisgICAgICAgICAgIHRbeF0gPSBrZXlbeF07IAorICAgICAgICAgICB5IF49IGtleVt4XTsgCisgICAgICAgfQorICAgICAgIHRbMzJdID0geTsKKworICAgICAgIC8qIG1ha2Ugcm91bmQga2V5cyAqLworICAgICAgIGZvciAoeCA9IDA7IHggPCAxNjsgeCsrKSB7IAorICAgICAgICAgICBza2V5LT5zYWZlcnAuS1swXVt4XSA9IHRbeF07CisgICAgICAgfQorCisgICAgICAgZm9yICh4ID0gMTsgeCA8IDMzOyB4KyspIHsKKyAgICAgICAgICAgLyogcm90YXRlIDMgYml0cyBlYWNoICovCisgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAzMzsgeSsrKSB7CisgICAgICAgICAgICAgICB0W3ldID0gKCh0W3ldPDwzKXwodFt5XT4+NSkpICYgMjU1OworICAgICAgICAgICB9CisgICAgICAgICAgIAorICAgICAgICAgICAvKiBzZWxlY3QgYW5kIGFkZCAqLworICAgICAgICAgICB6ID0geDsKKyAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHsKKyAgICAgICAgICAgICAgIHNrZXktPnNhZmVycC5LW3hdW3ldID0gKHRbel0gKyBzYWZlcl9iaWFzW3gtMV1beV0pICYgMjU1OworICAgICAgICAgICAgICAgaWYgKCsreiA9PSAzMykgeyB6ID0gMDsgfQorICAgICAgICAgICB9CisgICAgICAgfQorICAgICAgIHNrZXktPnNhZmVycC5yb3VuZHMgPSAxNjsKKyAgIH0KKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0odCwgc2l6ZW9mKHQpKTsKKyNlbmRpZgorICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgRW5jcnlwdHMgYSBibG9jayBvZiB0ZXh0IHdpdGggU0FGRVIrCisgIEBwYXJhbSBwdCBUaGUgaW5wdXQgcGxhaW50ZXh0ICgxNiBieXRlcykKKyAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBzYWZlcnBfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgdW5zaWduZWQgY2hhciBiWzE2XTsKKyAgIGludCB4OworCisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgIC8qIGRvIGVpZ2h0IHJvdW5kcyAqLworICAgZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsKKyAgICAgICBiW3hdID0gcHRbeF07CisgICB9CisgICBST1VORChiLCAgMCk7ICBMVChiLCBjdCk7CisgICBST1VORChjdCwgMik7ICBMVChjdCwgYik7CisgICBST1VORChiLCAgNCk7ICBMVChiLCBjdCk7CisgICBST1VORChjdCwgNik7ICBMVChjdCwgYik7CisgICBST1VORChiLCAgOCk7ICBMVChiLCBjdCk7CisgICBST1VORChjdCwgMTApOyBMVChjdCwgYik7CisgICBST1VORChiLCAgMTIpOyBMVChiLCBjdCk7CisgICBST1VORChjdCwgMTQpOyBMVChjdCwgYik7CisgICAvKiAxOTItYml0IGtleT8gKi8KKyAgIGlmIChza2V5LT5zYWZlcnAucm91bmRzID4gOCkgeworICAgICAgUk9VTkQoYiwgMTYpOyAgTFQoYiwgY3QpOworICAgICAgUk9VTkQoY3QsIDE4KTsgTFQoY3QsIGIpOworICAgICAgUk9VTkQoYiwgMjApOyAgTFQoYiwgY3QpOworICAgICAgUk9VTkQoY3QsIDIyKTsgTFQoY3QsIGIpOworICAgfQorICAgLyogMjU2LWJpdCBrZXk/ICovCisgICBpZiAoc2tleS0+c2FmZXJwLnJvdW5kcyA+IDEyKSB7CisgICAgICBST1VORChiLCAyNCk7ICBMVChiLCBjdCk7CisgICAgICBST1VORChjdCwgMjYpOyBMVChjdCwgYik7CisgICAgICBST1VORChiLCAyOCk7ICBMVChiLCBjdCk7CisgICAgICBST1VORChjdCwgMzApOyBMVChjdCwgYik7CisgICB9CisgICBjdFswXSA9IGJbMF0gXiBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWzBdOworICAgY3RbMV0gPSAoYlsxXSArIHNrZXktPnNhZmVycC5LW3NrZXktPnNhZmVycC5yb3VuZHMqMl1bMV0pICYgMjU1OworICAgY3RbMl0gPSAoYlsyXSArIHNrZXktPnNhZmVycC5LW3NrZXktPnNhZmVycC5yb3VuZHMqMl1bMl0pICYgMjU1OworICAgY3RbM10gPSBiWzNdIF4gc2tleS0+c2FmZXJwLktbc2tleS0+c2FmZXJwLnJvdW5kcyoyXVszXTsKKyAgIGN0WzRdID0gYls0XSBeIHNrZXktPnNhZmVycC5LW3NrZXktPnNhZmVycC5yb3VuZHMqMl1bNF07CisgICBjdFs1XSA9IChiWzVdICsgc2tleS0+c2FmZXJwLktbc2tleS0+c2FmZXJwLnJvdW5kcyoyXVs1XSkgJiAyNTU7CisgICBjdFs2XSA9IChiWzZdICsgc2tleS0+c2FmZXJwLktbc2tleS0+c2FmZXJwLnJvdW5kcyoyXVs2XSkgJiAyNTU7CisgICBjdFs3XSA9IGJbN10gXiBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWzddOworICAgY3RbOF0gPSBiWzhdIF4gc2tleS0+c2FmZXJwLktbc2tleS0+c2FmZXJwLnJvdW5kcyoyXVs4XTsKKyAgIGN0WzldID0gKGJbOV0gKyBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWzldKSAmIDI1NTsKKyAgIGN0WzEwXSA9IChiWzEwXSArIHNrZXktPnNhZmVycC5LW3NrZXktPnNhZmVycC5yb3VuZHMqMl1bMTBdKSAmIDI1NTsKKyAgIGN0WzExXSA9IGJbMTFdIF4gc2tleS0+c2FmZXJwLktbc2tleS0+c2FmZXJwLnJvdW5kcyoyXVsxMV07CisgICBjdFsxMl0gPSBiWzEyXSBeIHNrZXktPnNhZmVycC5LW3NrZXktPnNhZmVycC5yb3VuZHMqMl1bMTJdOworICAgY3RbMTNdID0gKGJbMTNdICsgc2tleS0+c2FmZXJwLktbc2tleS0+c2FmZXJwLnJvdW5kcyoyXVsxM10pICYgMjU1OworICAgY3RbMTRdID0gKGJbMTRdICsgc2tleS0+c2FmZXJwLktbc2tleS0+c2FmZXJwLnJvdW5kcyoyXVsxNF0pICYgMjU1OworICAgY3RbMTVdID0gYlsxNV0gXiBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWzE1XTsKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0oYiwgc2l6ZW9mKGIpKTsKKyNlbmRpZgorICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgRGVjcnlwdHMgYSBibG9jayBvZiB0ZXh0IHdpdGggU0FGRVIrCisgIEBwYXJhbSBjdCBUaGUgaW5wdXQgY2lwaGVydGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBwdCBUaGUgb3V0cHV0IHBsYWludGV4dCAoMTYgYnl0ZXMpCisgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkIAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgc2FmZXJwX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIHVuc2lnbmVkIGNoYXIgYlsxNl07CisgICBpbnQgeDsKKworICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworCisgICAvKiBkbyBlaWdodCByb3VuZHMgKi8KKyAgIGJbMF0gPSBjdFswXSBeIHNrZXktPnNhZmVycC5LW3NrZXktPnNhZmVycC5yb3VuZHMqMl1bMF07CisgICBiWzFdID0gKGN0WzFdIC0gc2tleS0+c2FmZXJwLktbc2tleS0+c2FmZXJwLnJvdW5kcyoyXVsxXSkgJiAyNTU7CisgICBiWzJdID0gKGN0WzJdIC0gc2tleS0+c2FmZXJwLktbc2tleS0+c2FmZXJwLnJvdW5kcyoyXVsyXSkgJiAyNTU7CisgICBiWzNdID0gY3RbM10gXiBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWzNdOworICAgYls0XSA9IGN0WzRdIF4gc2tleS0+c2FmZXJwLktbc2tleS0+c2FmZXJwLnJvdW5kcyoyXVs0XTsKKyAgIGJbNV0gPSAoY3RbNV0gLSBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWzVdKSAmIDI1NTsKKyAgIGJbNl0gPSAoY3RbNl0gLSBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWzZdKSAmIDI1NTsKKyAgIGJbN10gPSBjdFs3XSBeIHNrZXktPnNhZmVycC5LW3NrZXktPnNhZmVycC5yb3VuZHMqMl1bN107CisgICBiWzhdID0gY3RbOF0gXiBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWzhdOworICAgYls5XSA9IChjdFs5XSAtIHNrZXktPnNhZmVycC5LW3NrZXktPnNhZmVycC5yb3VuZHMqMl1bOV0pICYgMjU1OworICAgYlsxMF0gPSAoY3RbMTBdIC0gc2tleS0+c2FmZXJwLktbc2tleS0+c2FmZXJwLnJvdW5kcyoyXVsxMF0pICYgMjU1OworICAgYlsxMV0gPSBjdFsxMV0gXiBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWzExXTsKKyAgIGJbMTJdID0gY3RbMTJdIF4gc2tleS0+c2FmZXJwLktbc2tleS0+c2FmZXJwLnJvdW5kcyoyXVsxMl07CisgICBiWzEzXSA9IChjdFsxM10gLSBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWzEzXSkgJiAyNTU7CisgICBiWzE0XSA9IChjdFsxNF0gLSBza2V5LT5zYWZlcnAuS1tza2V5LT5zYWZlcnAucm91bmRzKjJdWzE0XSkgJiAyNTU7CisgICBiWzE1XSA9IGN0WzE1XSBeIHNrZXktPnNhZmVycC5LW3NrZXktPnNhZmVycC5yb3VuZHMqMl1bMTVdOworICAgLyogMjU2LWJpdCBrZXk/ICovCisgICBpZiAoc2tleS0+c2FmZXJwLnJvdW5kcyA+IDEyKSB7CisgICAgICBpTFQoYiwgcHQpOyBpUk9VTkQocHQsIDMwKTsKKyAgICAgIGlMVChwdCwgYik7IGlST1VORChiLCAyOCk7CisgICAgICBpTFQoYiwgcHQpOyBpUk9VTkQocHQsIDI2KTsKKyAgICAgIGlMVChwdCwgYik7IGlST1VORChiLCAyNCk7CisgICB9CisgICAvKiAxOTItYml0IGtleT8gKi8KKyAgIGlmIChza2V5LT5zYWZlcnAucm91bmRzID4gOCkgeworICAgICAgaUxUKGIsIHB0KTsgaVJPVU5EKHB0LCAyMik7CisgICAgICBpTFQocHQsIGIpOyBpUk9VTkQoYiwgMjApOworICAgICAgaUxUKGIsIHB0KTsgaVJPVU5EKHB0LCAxOCk7CisgICAgICBpTFQocHQsIGIpOyBpUk9VTkQoYiwgMTYpOworICAgfQorICAgaUxUKGIsIHB0KTsgaVJPVU5EKHB0LCAxNCk7CisgICBpTFQocHQsIGIpOyBpUk9VTkQoYiwgMTIpOworICAgaUxUKGIsIHB0KTsgaVJPVU5EKHB0LDEwKTsKKyAgIGlMVChwdCwgYik7IGlST1VORChiLCA4KTsKKyAgIGlMVChiLCBwdCk7IGlST1VORChwdCw2KTsKKyAgIGlMVChwdCwgYik7IGlST1VORChiLCA0KTsKKyAgIGlMVChiLCBwdCk7IGlST1VORChwdCwyKTsKKyAgIGlMVChwdCwgYik7IGlST1VORChiLCAwKTsKKyAgIGZvciAoeCA9IDA7IHggPCAxNjsgeCsrKSB7CisgICAgICAgcHRbeF0gPSBiW3hdOworICAgfQorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShiLCBzaXplb2YoYikpOworI2VuZGlmCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBQZXJmb3JtcyBhIHNlbGYtdGVzdCBvZiB0aGUgU0FGRVIrIGJsb2NrIGNpcGhlcgorICBAcmV0dXJuIENSWVBUX09LIGlmIGZ1bmN0aW9uYWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3QgaGFzIGJlZW4gZGlzYWJsZWQKKyovCitpbnQgc2FmZXJwX3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZSAgICAKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgIGludCBrZXlsZW47CisgICAgICAgdW5zaWduZWQgY2hhciBrZXlbMzJdLCBwdFsxNl0sIGN0WzE2XTsKKyAgIH0gdGVzdHNbXSA9IHsKKyAgICAgICB7CisgICAgICAgICAgIDE2LAorICAgICAgICAgICB7IDQxLCAzNSwgMTkwLCAxMzIsIDIyNSwgMTA4LCAyMTQsIDE3NCwgCisgICAgICAgICAgICAgODIsIDE0NCwgNzMsIDI0MSwgMjQxLCAxODcsIDIzMywgMjM1IH0sCisgICAgICAgICAgIHsgMTc5LCAxNjYsIDIxOSwgNjAsIDEzNSwgMTIsIDYyLCAxNTMsIAorICAgICAgICAgICAgIDM2LCA5NCwgMTMsIDI4LCA2LCAxODMsIDcxLCAyMjIgfSwKKyAgICAgICAgICAgeyAyMjQsIDMxLCAxODIsIDEwLCAxMiwgMjU1LCA4NCwgNzAsIAorICAgICAgICAgICAgIDEyNywgMTMsIDg5LCAyNDksIDksIDU3LCAxNjUsIDIyMCB9CisgICAgICAgfSwgeworICAgICAgICAgICAyNCwKKyAgICAgICAgICAgeyA3MiwgMjExLCAxNDMsIDExNywgMjMwLCAyMTcsIDI5LCA0MiwgCisgICAgICAgICAgICAgMjI5LCAxOTIsIDI0NywgNDMsIDEyMCwgMTI5LCAxMzUsIDY4LCAKKyAgICAgICAgICAgICAxNCwgOTUsIDgwLCAwLCAyMTIsIDk3LCAxNDEsIDE5MCB9LAorICAgICAgICAgICB7IDEyMywgNSwgMjEsIDcsIDU5LCA1MSwgMTMwLCAzMSwgCisgICAgICAgICAgICAgMjQsIDExMiwgMTQ2LCAyMTgsIDEwMCwgODQsIDIwNiwgMTc3IH0sCisgICAgICAgICAgIHsgOTIsIDEzNiwgNCwgNjMsIDU3LCA5NSwgMTAwLCAwLCAKKyAgICAgICAgICAgICAxNTAsIDEzMCwgMTMwLCAxNiwgMTkzLCAxMTEsIDIxOSwgMTMzIH0KKyAgICAgICB9LCB7CisgICAgICAgICAgIDMyLAorICAgICAgICAgICB7IDI0MywgMTY4LCAxNDEsIDI1NCwgMTkwLCAyNDIsIDIzNSwgMTEzLCAKKyAgICAgICAgICAgICAyNTUsIDE2MCwgMjA4LCA1OSwgMTE3LCA2LCAxNDAsIDEyNiwKKyAgICAgICAgICAgICAxMzUsIDEyMCwgMTE1LCA3NywgMjA4LCAxOTAsIDEzMCwgMTkwLCAKKyAgICAgICAgICAgICAyMTksIDE5NCwgNzAsIDY1LCA0MywgMTQwLCAyNTAsIDQ4IH0sCisgICAgICAgICAgIHsgMTI3LCAxMTIsIDI0MCwgMTY3LCA4NCwgMTM0LCA1MCwgMTQ5LCAKKyAgICAgICAgICAgICAxNzAsIDkxLCAxMDQsIDE5LCAxMSwgMjMwLCAyNTIsIDI0NSB9LAorICAgICAgICAgICB7IDg4LCAxMSwgMjUsIDM2LCAxNzIsIDIyOSwgMjAyLCAyMTMsIAorICAgICAgICAgICAgIDE3MCwgNjUsIDEwNSwgMTUzLCAyMjAsIDEwNCwgMTUzLCAxMzggfQorICAgICAgIH0KKyAgICB9OyAgICAgICAKKworICAgdW5zaWduZWQgY2hhciB0bXBbMl1bMTZdOworICAgc3ltbWV0cmljX2tleSBza2V5OworICAgaW50IGVyciwgaSwgeTsKKworICAgZm9yIChpID0gMDsgaSA8IChpbnQpKHNpemVvZih0ZXN0cykgLyBzaXplb2YodGVzdHNbMF0pKTsgaSsrKSB7CisgICAgICBpZiAoKGVyciA9IHNhZmVycF9zZXR1cCh0ZXN0c1tpXS5rZXksIHRlc3RzW2ldLmtleWxlbiwgMCwgJnNrZXkpKSAhPSBDUllQVF9PSykgIHsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgICAgICBzYWZlcnBfZWNiX2VuY3J5cHQodGVzdHNbaV0ucHQsIHRtcFswXSwgJnNrZXkpOworICAgICAgc2FmZXJwX2VjYl9kZWNyeXB0KHRtcFswXSwgdG1wWzFdLCAmc2tleSk7CisKKyAgICAgIC8qIGNvbXBhcmUgKi8KKyAgICAgIGlmIChYTUVNQ01QKHRtcFswXSwgdGVzdHNbaV0uY3QsIDE2KSB8fCBYTUVNQ01QKHRtcFsxXSwgdGVzdHNbaV0ucHQsIDE2KSkgeyAKKyAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICB9CisKKyAgICAgIC8qIG5vdyBzZWUgaWYgd2UgY2FuIGVuY3J5cHQgYWxsIHplcm8gYnl0ZXMgMTAwMCB0aW1lcywgZGVjcnlwdCBhbmQgY29tZSBiYWNrIHdoZXJlIHdlIHN0YXJ0ZWQgKi8KKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB0bXBbMF1beV0gPSAwOworICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykgc2FmZXJwX2VjYl9lbmNyeXB0KHRtcFswXSwgdG1wWzBdLCAmc2tleSk7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwMDsgeSsrKSBzYWZlcnBfZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMF0sICZza2V5KTsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSBpZiAodG1wWzBdW3ldICE9IDApIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICB9CisKKyAgIHJldHVybiBDUllQVF9PSzsKKyAjZW5kaWYKK30KKworLyoqIFRlcm1pbmF0ZSB0aGUgY29udGV4dCAKKyAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5CisqLwordm9pZCBzYWZlcnBfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KQoreworfQorCisvKioKKyAgR2V0cyBzdWl0YWJsZSBrZXkgc2l6ZQorICBAcGFyYW0ga2V5c2l6ZSBbaW4vb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSByZWNvbW1lbmRlZCBrZXkgKGluIGJ5dGVzKS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSB0aGUgc3VpdGFibGUgc2l6ZSBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgdGhlIGlucHV0IGtleSBzaXplIGlzIGFjY2VwdGFibGUuCisqLworaW50IHNhZmVycF9rZXlzaXplKGludCAqa2V5c2l6ZSkKK3sKKyAgIExUQ19BUkdDSEsoa2V5c2l6ZSAhPSBOVUxMKTsKKyAgIAorICAgaWYgKCprZXlzaXplIDwgMTYpCisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgaWYgKCprZXlzaXplIDwgMjQpIHsKKyAgICAgICprZXlzaXplID0gMTY7CisgICB9IGVsc2UgaWYgKCprZXlzaXplIDwgMzIpIHsKKyAgICAgICprZXlzaXplID0gMjQ7CisgICB9IGVsc2UgeworICAgICAgKmtleXNpemUgPSAzMjsKKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9zYWZlci9zYWZlcnAuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOCAyMzowMTowNiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy9za2lwamFjay5jIGIvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvc2tpcGphY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTBiNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvc2tpcGphY2suYwpAQCAtMCwwICsxLDM0MyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqCisgIEBmaWxlIHNraXBqYWNrLmMKKyAgU2tpcGphY2sgSW1wbGVtZW50YXRpb24gYnkgVG9tIFN0IERlbmlzCisqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBTS0lQSkFDSworCitjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIHNraXBqYWNrX2Rlc2MgPQoreworICAgICJza2lwamFjayIsCisgICAgMTcsCisgICAgMTAsIDEwLCA4LCAzMiwKKyAgICAmc2tpcGphY2tfc2V0dXAsCisgICAgJnNraXBqYWNrX2VjYl9lbmNyeXB0LAorICAgICZza2lwamFja19lY2JfZGVjcnlwdCwKKyAgICAmc2tpcGphY2tfdGVzdCwKKyAgICAmc2tpcGphY2tfZG9uZSwKKyAgICAmc2tpcGphY2tfa2V5c2l6ZSwKKyAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzYm94WzI1Nl0gPSB7CisgICAweGEzLDB4ZDcsMHgwOSwweDgzLDB4ZjgsMHg0OCwweGY2LDB4ZjQsMHhiMywweDIxLDB4MTUsMHg3OCwweDk5LDB4YjEsMHhhZiwweGY5LAorICAgMHhlNywweDJkLDB4NGQsMHg4YSwweGNlLDB4NGMsMHhjYSwweDJlLDB4NTIsMHg5NSwweGQ5LDB4MWUsMHg0ZSwweDM4LDB4NDQsMHgyOCwKKyAgIDB4MGEsMHhkZiwweDAyLDB4YTAsMHgxNywweGYxLDB4NjAsMHg2OCwweDEyLDB4YjcsMHg3YSwweGMzLDB4ZTksMHhmYSwweDNkLDB4NTMsCisgICAweDk2LDB4ODQsMHg2YiwweGJhLDB4ZjIsMHg2MywweDlhLDB4MTksMHg3YywweGFlLDB4ZTUsMHhmNSwweGY3LDB4MTYsMHg2YSwweGEyLAorICAgMHgzOSwweGI2LDB4N2IsMHgwZiwweGMxLDB4OTMsMHg4MSwweDFiLDB4ZWUsMHhiNCwweDFhLDB4ZWEsMHhkMCwweDkxLDB4MmYsMHhiOCwKKyAgIDB4NTUsMHhiOSwweGRhLDB4ODUsMHgzZiwweDQxLDB4YmYsMHhlMCwweDVhLDB4NTgsMHg4MCwweDVmLDB4NjYsMHgwYiwweGQ4LDB4OTAsCisgICAweDM1LDB4ZDUsMHhjMCwweGE3LDB4MzMsMHgwNiwweDY1LDB4NjksMHg0NSwweDAwLDB4OTQsMHg1NiwweDZkLDB4OTgsMHg5YiwweDc2LAorICAgMHg5NywweGZjLDB4YjIsMHhjMiwweGIwLDB4ZmUsMHhkYiwweDIwLDB4ZTEsMHhlYiwweGQ2LDB4ZTQsMHhkZCwweDQ3LDB4NGEsMHgxZCwKKyAgIDB4NDIsMHhlZCwweDllLDB4NmUsMHg0OSwweDNjLDB4Y2QsMHg0MywweDI3LDB4ZDIsMHgwNywweGQ0LDB4ZGUsMHhjNywweDY3LDB4MTgsCisgICAweDg5LDB4Y2IsMHgzMCwweDFmLDB4OGQsMHhjNiwweDhmLDB4YWEsMHhjOCwweDc0LDB4ZGMsMHhjOSwweDVkLDB4NWMsMHgzMSwweGE0LAorICAgMHg3MCwweDg4LDB4NjEsMHgyYywweDlmLDB4MGQsMHgyYiwweDg3LDB4NTAsMHg4MiwweDU0LDB4NjQsMHgyNiwweDdkLDB4MDMsMHg0MCwKKyAgIDB4MzQsMHg0YiwweDFjLDB4NzMsMHhkMSwweGM0LDB4ZmQsMHgzYiwweGNjLDB4ZmIsMHg3ZiwweGFiLDB4ZTYsMHgzZSwweDViLDB4YTUsCisgICAweGFkLDB4MDQsMHgyMywweDljLDB4MTQsMHg1MSwweDIyLDB4ZjAsMHgyOSwweDc5LDB4NzEsMHg3ZSwweGZmLDB4OGMsMHgwZSwweGUyLAorICAgMHgwYywweGVmLDB4YmMsMHg3MiwweDc1LDB4NmYsMHgzNywweGExLDB4ZWMsMHhkMywweDhlLDB4NjIsMHg4YiwweDg2LDB4MTAsMHhlOCwKKyAgIDB4MDgsMHg3NywweDExLDB4YmUsMHg5MiwweDRmLDB4MjQsMHhjNSwweDMyLDB4MzYsMHg5ZCwweGNmLDB4ZjMsMHhhNiwweGJiLDB4YWMsCisgICAweDVlLDB4NmMsMHhhOSwweDEzLDB4NTcsMHgyNSwweGI1LDB4ZTMsMHhiZCwweGE4LDB4M2EsMHgwMSwweDA1LDB4NTksMHgyYSwweDQ2Cit9OworCisvKiBzaW1wbGUgeCArIDEgKG1vZCAxMCkgaW4gb25lIHN0ZXAuICovCitzdGF0aWMgY29uc3QgaW50IGtleXN0ZXBbXSA9ICB7IDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDAgfTsKKworLyogc2ltcGxlIHggLSAxIChtb2QgMTApIGluIG9uZSBzdGVwICovCitzdGF0aWMgY29uc3QgaW50IGlrZXlzdGVwW10gPSB7IDksIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDggfTsKKworIC8qKgorICAgIEluaXRpYWxpemUgdGhlIFNraXBqYWNrIGJsb2NrIGNpcGhlcgorICAgIEBwYXJhbSBrZXkgVGhlIHN5bW1ldHJpYyBrZXkgeW91IHdpc2ggdG8gcGFzcworICAgIEBwYXJhbSBrZXlsZW4gVGhlIGtleSBsZW5ndGggaW4gYnl0ZXMKKyAgICBAcGFyYW0gbnVtX3JvdW5kcyBUaGUgbnVtYmVyIG9mIHJvdW5kcyBkZXNpcmVkICgwIGZvciBkZWZhdWx0KQorICAgIEBwYXJhbSBza2V5IFRoZSBrZXkgaW4gYXMgc2NoZWR1bGVkIGJ5IHRoaXMgZnVuY3Rpb24uCisgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgKi8KK2ludCBza2lwamFja19zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgaW50IHg7CisKKyAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKworICAgaWYgKGtleWxlbiAhPSAxMCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0KKworICAgaWYgKG51bV9yb3VuZHMgIT0gMzIgJiYgbnVtX3JvdW5kcyAhPSAwKSB7IAorICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUk9VTkRTOworICAgfQorCisgICAvKiBtYWtlIHN1cmUgdGhlIGtleSBpcyBpbiByYW5nZSBmb3IgcGxhdGZvcm1zIHdoZXJlIENIQVJfQklUICE9IDggKi8KKyAgIGZvciAoeCA9IDA7IHggPCAxMDsgeCsrKSB7CisgICAgICAgc2tleS0+c2tpcGphY2sua2V5W3hdID0ga2V5W3hdICYgMjU1OworICAgfQorCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNkZWZpbmUgUlVMRV9BIFwKKyAgIHRtcCA9IGdfZnVuYyh3MSwgJmtwLCBza2V5LT5za2lwamFjay5rZXkpOyAgICAgIFwKKyAgIHcxICA9IHRtcCBeIHc0IF4geDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgdzQgID0gdzM7IHczID0gdzI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB3MiAgPSB0bXA7CisKKyNkZWZpbmUgUlVMRV9CIFwKKyAgIHRtcCAgPSBnX2Z1bmModzEsICZrcCwgc2tleS0+c2tpcGphY2sua2V5KTsgICAgIFwKKyAgIHRtcDEgPSB3NDsgdzQgID0gdzM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgdzMgICA9IHcxIF4gdzIgXiB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB3MSAgID0gdG1wMTsgdzIgPSB0bXA7CisKKyNkZWZpbmUgUlVMRV9BMSBcCisgICB0bXAgPSB3MSBeIHcyIF4geDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHcxICA9IGlnX2Z1bmModzIsICZrcCwgc2tleS0+c2tpcGphY2sua2V5KTsgICAgIFwKKyAgIHcyICA9IHczOyB3MyA9IHc0OyB3NCA9IHRtcDsKKworI2RlZmluZSBSVUxFX0IxIFwKKyAgIHRtcCA9IGlnX2Z1bmModzIsICZrcCwgc2tleS0+c2tpcGphY2sua2V5KTsgICAgIFwKKyAgIHcyICA9IHRtcCBeIHczIF4geDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgdzMgID0gdzQ7IHc0ID0gdzE7IHcxID0gdG1wOworCitzdGF0aWMgdW5zaWduZWQgZ19mdW5jKHVuc2lnbmVkIHcsIGludCAqa3AsIHVuc2lnbmVkIGNoYXIgKmtleSkKK3sKKyAgIHVuc2lnbmVkIGNoYXIgZzEsZzI7CisKKyAgIGcxID0gKHcgPj4gOCkgJiAyNTU7IGcyID0gdyAmIDI1NTsKKyAgIGcxIF49IHNib3hbZzJea2V5WyprcF1dOyAqa3AgPSBrZXlzdGVwWyprcF07CisgICBnMiBePSBzYm94W2cxXmtleVsqa3BdXTsgKmtwID0ga2V5c3RlcFsqa3BdOworICAgZzEgXj0gc2JveFtnMl5rZXlbKmtwXV07ICprcCA9IGtleXN0ZXBbKmtwXTsKKyAgIGcyIF49IHNib3hbZzFea2V5WyprcF1dOyAqa3AgPSBrZXlzdGVwWyprcF07CisgICByZXR1cm4gKCh1bnNpZ25lZClnMTw8OCl8KHVuc2lnbmVkKWcyOworfQorCitzdGF0aWMgdW5zaWduZWQgaWdfZnVuYyh1bnNpZ25lZCB3LCBpbnQgKmtwLCB1bnNpZ25lZCBjaGFyICprZXkpCit7CisgICB1bnNpZ25lZCBjaGFyIGcxLGcyOworCisgICBnMSA9ICh3ID4+IDgpICYgMjU1OyBnMiA9IHcgJiAyNTU7CisgICAqa3AgPSBpa2V5c3RlcFsqa3BdOyBnMiBePSBzYm94W2cxXmtleVsqa3BdXTsKKyAgICprcCA9IGlrZXlzdGVwWyprcF07IGcxIF49IHNib3hbZzJea2V5WyprcF1dOworICAgKmtwID0gaWtleXN0ZXBbKmtwXTsgZzIgXj0gc2JveFtnMV5rZXlbKmtwXV07CisgICAqa3AgPSBpa2V5c3RlcFsqa3BdOyBnMSBePSBzYm94W2cyXmtleVsqa3BdXTsKKyAgIHJldHVybiAoKHVuc2lnbmVkKWcxPDw4KXwodW5zaWduZWQpZzI7Cit9CisKKy8qKgorICBFbmNyeXB0cyBhIGJsb2NrIG9mIHRleHQgd2l0aCBTa2lwamFjaworICBAcGFyYW0gcHQgVGhlIGlucHV0IHBsYWludGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIGN0IFRoZSBvdXRwdXQgY2lwaGVydGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfc2tpcGphY2tfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2Vsc2UKK2ludCBza2lwamFja19lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZW5kaWYKK3sKKyAgIHVuc2lnbmVkIHcxLHcyLHczLHc0LHRtcCx0bXAxOworICAgaW50IHgsIGtwOworCisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgIC8qIGxvYWQgYmxvY2sgKi8KKyAgIHcxID0gKCh1bnNpZ25lZClwdFswXTw8OCl8cHRbMV07CisgICB3MiA9ICgodW5zaWduZWQpcHRbMl08PDgpfHB0WzNdOworICAgdzMgPSAoKHVuc2lnbmVkKXB0WzRdPDw4KXxwdFs1XTsKKyAgIHc0ID0gKCh1bnNpZ25lZClwdFs2XTw8OCl8cHRbN107CisKKyAgIC8qIDggcm91bmRzIG9mIFJVTEUgQSAqLworICAgZm9yICh4ID0gMSwga3AgPSAwOyB4IDwgOTsgeCsrKSB7CisgICAgICAgUlVMRV9BOworICAgfQorCisgICAvKiA4IHJvdW5kcyBvZiBSVUxFIEIgKi8KKyAgIGZvciAoOyB4IDwgMTc7IHgrKykgeworICAgICAgIFJVTEVfQjsKKyAgIH0KKworICAgLyogOCByb3VuZHMgb2YgUlVMRSBBICovCisgICBmb3IgKDsgeCA8IDI1OyB4KyspIHsKKyAgICAgICBSVUxFX0E7CisgICB9CisKKyAgIC8qIDggcm91bmRzIG9mIFJVTEUgQiAqLworICAgZm9yICg7IHggPCAzMzsgeCsrKSB7CisgICAgICAgUlVMRV9COworICAgfQorCisgICAvKiBzdG9yZSBibG9jayAqLworICAgY3RbMF0gPSAodzE+PjgpJjI1NTsgY3RbMV0gPSB3MSYyNTU7CisgICBjdFsyXSA9ICh3Mj4+OCkmMjU1OyBjdFszXSA9IHcyJjI1NTsKKyAgIGN0WzRdID0gKHczPj44KSYyNTU7IGN0WzVdID0gdzMmMjU1OworICAgY3RbNl0gPSAodzQ+PjgpJjI1NTsgY3RbN10gPSB3NCYyNTU7CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworaW50IHNraXBqYWNrX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIGludCBlcnIgPSBfc2tpcGphY2tfZWNiX2VuY3J5cHQocHQsIGN0LCBza2V5KTsKKyAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVuc2lnbmVkKSAqIDggKyBzaXplb2YoaW50KSAqIDIpOworICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKioKKyAgRGVjcnlwdHMgYSBibG9jayBvZiB0ZXh0IHdpdGggU2tpcGphY2sKKyAgQHBhcmFtIGN0IFRoZSBpbnB1dCBjaXBoZXJ0ZXh0ICg4IGJ5dGVzKQorICBAcGFyYW0gcHQgVGhlIG91dHB1dCBwbGFpbnRleHQgKDggYnl0ZXMpCisgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkIAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IF9za2lwamFja19lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZWxzZQoraW50IHNraXBqYWNrX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbmRpZgoreworICAgdW5zaWduZWQgdzEsdzIsdzMsdzQsdG1wOworICAgaW50IHgsIGtwOworCisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgIC8qIGxvYWQgYmxvY2sgKi8KKyAgIHcxID0gKCh1bnNpZ25lZCljdFswXTw8OCl8Y3RbMV07CisgICB3MiA9ICgodW5zaWduZWQpY3RbMl08PDgpfGN0WzNdOworICAgdzMgPSAoKHVuc2lnbmVkKWN0WzRdPDw4KXxjdFs1XTsKKyAgIHc0ID0gKCh1bnNpZ25lZCljdFs2XTw8OCl8Y3RbN107CisKKyAgIC8qIDggcm91bmRzIG9mIFJVTEUgQl4tMSAKKworICAgICAgTm90ZSB0aGUgdmFsdWUgImtwID0gOCIgY29tZXMgZnJvbSAia3AgPSAoMzIgKiA0KSBtb2QgMTAiIHdoZXJlIDMyKjQgaXMgMTI4IHdoaWNoIG1vZCAxMCBpcyA4CisgICAgKi8KKyAgIGZvciAoeCA9IDMyLCBrcCA9IDg7IHggPiAyNDsgeC0tKSB7CisgICAgICAgUlVMRV9CMTsKKyAgIH0KKworICAgLyogOCByb3VuZHMgb2YgUlVMRSBBXi0xICovCisgICBmb3IgKDsgeCA+IDE2OyB4LS0pIHsKKyAgICAgICBSVUxFX0ExOworICAgfQorCisKKyAgIC8qIDggcm91bmRzIG9mIFJVTEUgQl4tMSAqLworICAgZm9yICg7IHggPiA4OyB4LS0pIHsKKyAgICAgICBSVUxFX0IxOworICAgfQorCisgICAvKiA4IHJvdW5kcyBvZiBSVUxFIEFeLTEgKi8KKyAgIGZvciAoOyB4ID4gMDsgeC0tKSB7CisgICAgICAgUlVMRV9BMTsKKyAgIH0KKworICAgLyogc3RvcmUgYmxvY2sgKi8KKyAgIHB0WzBdID0gKHcxPj44KSYyNTU7IHB0WzFdID0gdzEmMjU1OworICAgcHRbMl0gPSAodzI+PjgpJjI1NTsgcHRbM10gPSB3MiYyNTU7CisgICBwdFs0XSA9ICh3Mz4+OCkmMjU1OyBwdFs1XSA9IHczJjI1NTsKKyAgIHB0WzZdID0gKHc0Pj44KSYyNTU7IHB0WzddID0gdzQmMjU1OworCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK2ludCBza2lwamFja19lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICBpbnQgZXJyID0gX3NraXBqYWNrX2VjYl9kZWNyeXB0KGN0LCBwdCwgc2tleSk7CisgICBidXJuX3N0YWNrKHNpemVvZih1bnNpZ25lZCkgKiA3ICsgc2l6ZW9mKGludCkgKiAyKTsKKyAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyoqCisgIFBlcmZvcm1zIGEgc2VsZi10ZXN0IG9mIHRoZSBTa2lwamFjayBibG9jayBjaXBoZXIKKyAgQHJldHVybiBDUllQVF9PSyBpZiBmdW5jdGlvbmFsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0IGhhcyBiZWVuIGRpc2FibGVkCisqLworaW50IHNraXBqYWNrX3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZSAgICAKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgIHVuc2lnbmVkIGNoYXIga2V5WzEwXSwgcHRbOF0sIGN0WzhdOworICAgfSB0ZXN0c1tdID0geworICAgeworICAgICAgIHsgMHgwMCwgMHg5OSwgMHg4OCwgMHg3NywgMHg2NiwgMHg1NSwgMHg0NCwgMHgzMywgMHgyMiwgMHgxMSB9LAorICAgICAgIHsgMHgzMywgMHgyMiwgMHgxMSwgMHgwMCwgMHhkZCwgMHhjYywgMHhiYiwgMHhhYSB9LAorICAgICAgIHsgMHgyNSwgMHg4NywgMHhjYSwgMHhlMiwgMHg3YSwgMHgxMiwgMHhkMywgMHgwMCB9CisgICB9CisgICB9OworICAgdW5zaWduZWQgY2hhciBidWZbMl1bOF07CisgICBpbnQgeCwgeSwgZXJyOworICAgc3ltbWV0cmljX2tleSBrZXk7CisKKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YodGVzdHMpIC8gc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgeworICAgICAgLyogc2V0dXAga2V5ICovCisgICAgICBpZiAoKGVyciA9IHNraXBqYWNrX3NldHVwKHRlc3RzW3hdLmtleSwgMTAsIDAsICZrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKworICAgICAgLyogZW5jcnlwdCBhbmQgZGVjcnlwdCAqLworICAgICAgc2tpcGphY2tfZWNiX2VuY3J5cHQodGVzdHNbeF0ucHQsIGJ1ZlswXSwgJmtleSk7CisgICAgICBza2lwamFja19lY2JfZGVjcnlwdChidWZbMF0sIGJ1ZlsxXSwgJmtleSk7CisKKyAgICAgIC8qIGNvbXBhcmUgKi8KKyAgICAgIGlmIChYTUVNQ01QKGJ1ZlswXSwgdGVzdHNbeF0uY3QsIDgpICE9IDAgfHwgWE1FTUNNUChidWZbMV0sIHRlc3RzW3hdLnB0LCA4KSAhPSAwKSB7CisgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgfQorCisgICAgICAvKiBub3cgc2VlIGlmIHdlIGNhbiBlbmNyeXB0IGFsbCB6ZXJvIGJ5dGVzIDEwMDAgdGltZXMsIGRlY3J5cHQgYW5kIGNvbWUgYmFjayB3aGVyZSB3ZSBzdGFydGVkICovCisgICAgICBmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSBidWZbMF1beV0gPSAwOworICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykgc2tpcGphY2tfZWNiX2VuY3J5cHQoYnVmWzBdLCBidWZbMF0sICZrZXkpOworICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDA7IHkrKykgc2tpcGphY2tfZWNiX2RlY3J5cHQoYnVmWzBdLCBidWZbMF0sICZrZXkpOworICAgICAgZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgaWYgKGJ1ZlswXVt5XSAhPSAwKSByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgfQorCisgICByZXR1cm4gQ1JZUFRfT0s7CisgICNlbmRpZgorfQorCisvKiogVGVybWluYXRlIHRoZSBjb250ZXh0IAorICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkKKyovCit2b2lkIHNraXBqYWNrX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSkKK3sKK30KKworLyoqCisgIEdldHMgc3VpdGFibGUga2V5IHNpemUKKyAgQHBhcmFtIGtleXNpemUgW2luL291dF0gVGhlIGxlbmd0aCBvZiB0aGUgcmVjb21tZW5kZWQga2V5IChpbiBieXRlcykuICBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgdGhlIHN1aXRhYmxlIHNpemUgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICBAcmV0dXJuIENSWVBUX09LIGlmIHRoZSBpbnB1dCBrZXkgc2l6ZSBpcyBhY2NlcHRhYmxlLgorKi8KK2ludCBza2lwamFja19rZXlzaXplKGludCAqa2V5c2l6ZSkKK3sKKyAgIExUQ19BUkdDSEsoa2V5c2l6ZSAhPSBOVUxMKTsKKyAgIGlmICgqa2V5c2l6ZSA8IDEwKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA+IDEwKSB7CisgICAgICAqa2V5c2l6ZSA9IDEwOworICAgfQorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvc2tpcGphY2suYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOCAyMzowMTowNiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2guYyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllNmQwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2guYwpAQCAtMCwwICsxLDcxOCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworIC8qKiAKKyAgIEBmaWxlIHR3b2Zpc2guYworICAgSW1wbGVtZW50YXRpb24gb2YgVHdvZmlzaCBieSBUb20gU3QgRGVuaXMgCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgVFdPRklTSAorCisvKiBmaXJzdCBUV09GSVNIX0FMTF9UQUJMRVMgbXVzdCBlbnN1cmUgVFdPRklTSF9UQUJMRVMgaXMgZGVmaW5lZCAqLworI2lmZGVmIFRXT0ZJU0hfQUxMX1RBQkxFUworI2lmbmRlZiBUV09GSVNIX1RBQkxFUworI2RlZmluZSBUV09GSVNIX1RBQkxFUworI2VuZGlmCisjZW5kaWYKKworY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciB0d29maXNoX2Rlc2MgPQoreworICAgICJ0d29maXNoIiwKKyAgICA3LAorICAgIDE2LCAzMiwgMTYsIDE2LAorICAgICZ0d29maXNoX3NldHVwLAorICAgICZ0d29maXNoX2VjYl9lbmNyeXB0LAorICAgICZ0d29maXNoX2VjYl9kZWNyeXB0LAorICAgICZ0d29maXNoX3Rlc3QsCisgICAgJnR3b2Zpc2hfZG9uZSwKKyAgICAmdHdvZmlzaF9rZXlzaXplLAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKK307CisKKy8qIHRoZSB0d28gcG9seW5vbWlhbHMgKi8KKyNkZWZpbmUgTURTX1BPTFkgICAgICAgICAgMHgxNjkKKyNkZWZpbmUgUlNfUE9MWSAgICAgICAgICAgMHgxNEQKKworLyogVGhlIDR4NCBNRFMgTGluZWFyIFRyYW5zZm9ybSAqLworI2lmIDAKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIE1EU1s0XVs0XSA9IHsKKyAgICB7IDB4MDEsIDB4RUYsIDB4NUIsIDB4NUIgfSwKKyAgICB7IDB4NUIsIDB4RUYsIDB4RUYsIDB4MDEgfSwKKyAgICB7IDB4RUYsIDB4NUIsIDB4MDEsIDB4RUYgfSwKKyAgICB7IDB4RUYsIDB4MDEsIDB4RUYsIDB4NUIgfQorfTsKKyNlbmRpZgorCisvKiBUaGUgNHg4IFJTIExpbmVhciBUcmFuc2Zvcm0gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFJTWzRdWzhdID0geworICAgIHsgMHgwMSwgMHhBNCwgMHg1NSwgMHg4NywgMHg1QSwgMHg1OCwgMHhEQiwgMHg5RSB9LAorICAgIHsgMHhBNCwgMHg1NiwgMHg4MiwgMHhGMywgMFgxRSwgMFhDNiwgMFg2OCwgMFhFNSB9LAorICAgIHsgMFgwMiwgMFhBMSwgMFhGQywgMFhDMSwgMFg0NywgMFhBRSwgMFgzRCwgMFgxOSB9LAorICAgIHsgMFhBNCwgMFg1NSwgMFg4NywgMFg1QSwgMFg1OCwgMFhEQiwgMFg5RSwgMFgwMyB9Cit9OworCisvKiBzYm94IHVzYWdlIG9yZGVyaW5ncyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcW9yZFs0XVs1XSA9IHsKKyAgIHsgMSwgMSwgMCwgMCwgMSB9LAorICAgeyAwLCAxLCAxLCAwLCAwIH0sCisgICB7IDAsIDAsIDAsIDEsIDEgfSwKKyAgIHsgMSwgMCwgMSwgMSwgMCB9Cit9OworCisjaWZkZWYgVFdPRklTSF9UQUJMRVMKKworI2luY2x1ZGUgInR3b2Zpc2hfdGFiLmMiCisKKyNkZWZpbmUgc2JveChpLCB4KSAoKHVsb25nMzIpU0JPWFtpXVsoeCkmMjU1XSkKKworI2Vsc2UKKworLyogVGhlIFEtYm94IHRhYmxlcyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcWJveFsyXVs0XVsxNl0gPSB7Cit7CisgICB7IDB4OCwgMHgxLCAweDcsIDB4RCwgMHg2LCAweEYsIDB4MywgMHgyLCAweDAsIDB4QiwgMHg1LCAweDksIDB4RSwgMHhDLCAweEEsIDB4NCB9LAorICAgeyAweEUsIDBYQywgMFhCLCAwWDgsIDBYMSwgMFgyLCAwWDMsIDBYNSwgMFhGLCAwWDQsIDBYQSwgMFg2LCAwWDcsIDBYMCwgMFg5LCAwWEQgfSwKKyAgIHsgMFhCLCAwWEEsIDBYNSwgMFhFLCAwWDYsIDBYRCwgMFg5LCAwWDAsIDBYQywgMFg4LCAwWEYsIDBYMywgMFgyLCAwWDQsIDBYNywgMFgxIH0sCisgICB7IDBYRCwgMFg3LCAwWEYsIDBYNCwgMFgxLCAwWDIsIDBYNiwgMFhFLCAwWDksIDBYQiwgMFgzLCAwWDAsIDBYOCwgMFg1LCAwWEMsIDBYQSB9Cit9LAoreworICAgeyAwWDIsIDBYOCwgMFhCLCAwWEQsIDBYRiwgMFg3LCAwWDYsIDBYRSwgMFgzLCAwWDEsIDBYOSwgMFg0LCAwWDAsIDBYQSwgMFhDLCAwWDUgfSwKKyAgIHsgMFgxLCAwWEUsIDBYMiwgMFhCLCAwWDQsIDBYQywgMFgzLCAwWDcsIDBYNiwgMFhELCAwWEEsIDBYNSwgMFhGLCAwWDksIDBYMCwgMFg4IH0sCisgICB7IDBYNCwgMFhDLCAwWDcsIDBYNSwgMFgxLCAwWDYsIDBYOSwgMFhBLCAwWDAsIDBYRSwgMFhELCAwWDgsIDBYMiwgMFhCLCAwWDMsIDBYRiB9LAorICAgeyAweEIsIDBYOSwgMFg1LCAwWDEsIDBYQywgMFgzLCAwWEQsIDBYRSwgMFg2LCAwWDQsIDBYNywgMFhGLCAwWDIsIDBYMCwgMFg4LCAwWEEgfQorfQorfTsKKworLyogY29tcHV0ZXMgU19pW3hdICovCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgdWxvbmczMiBfc2JveChpbnQgaSwgdWxvbmczMiB4KQorI2Vsc2UKK3N0YXRpYyB1bG9uZzMyIHNib3goaW50IGksIHVsb25nMzIgeCkKKyNlbmRpZgoreworICAgdW5zaWduZWQgY2hhciBhMCxiMCxhMSxiMSxhMixiMixhMyxiMyxhNCxiNCx5OworCisgICAvKiBhMCxiMCA9IFt4LzE2XSwgeCBtb2QgMTYgKi8KKyAgIGEwID0gKHVuc2lnbmVkIGNoYXIpKCh4Pj40KSYxNSk7CisgICBiMCA9ICh1bnNpZ25lZCBjaGFyKSgoeCkmMTUpOworCisgICAvKiBhMSA9IGEwIF4gYjAgKi8KKyAgIGExID0gYTAgXiBiMDsKKworICAgLyogYjEgPSBhMCBeIFJPUihiMCwgMSkgXiA4YTAgKi8KKyAgIGIxID0gKGEwIF4gKChiMDw8Myl8KGIwPj4xKSkgXiAoYTA8PDMpKSAmIDE1OworCisgICAvKiBhMixiMiA9IHQwW2ExXSwgdDFbYjFdICovCisgICBhMiA9IHFib3hbaV1bMF1bKGludClhMV07CisgICBiMiA9IHFib3hbaV1bMV1bKGludCliMV07CisKKyAgIC8qIGEzID0gYTIgXiBiMiAqLworICAgYTMgPSBhMiBeIGIyOworCisgICAvKiBiMyA9IGEyIF4gUk9SKGIyLCAxKSBeIDhhMiAqLworICAgYjMgPSAoYTIgXiAoKGIyPDwzKXwoYjI+PjEpKSBeIChhMjw8MykpICYgMTU7CisKKyAgIC8qIGE0LGI0ID0gdDJbYTNdLCB0M1tiM10gKi8KKyAgIGE0ID0gcWJveFtpXVsyXVsoaW50KWEzXTsKKyAgIGI0ID0gcWJveFtpXVszXVsoaW50KWIzXTsKKworICAgLyogeSA9IDE2YjQgKyBhNCAqLworICAgeSA9IChiNCA8PCA0KSArIGE0OworCisgICAvKiByZXR1cm4gcmVzdWx0ICovCisgICByZXR1cm4gKHVsb25nMzIpeTsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIHVsb25nMzIgc2JveChpbnQgaSwgdWxvbmczMiB4KQoreworICAgdWxvbmczMiB5OworICAgeSA9IF9zYm94KGksIHgpOworICAgYnVybl9zdGFjayhzaXplb2YodW5zaWduZWQgY2hhcikgKiAxMSk7CisgICByZXR1cm4geTsKK30KKyNlbmRpZiAvKiBMVENfQ0xFQU5fU1RBQ0sgKi8KKworI2VuZGlmIC8qIFRXT0ZJU0hfVEFCTEVTICovCisKKy8qIGNvbXB1dGVzIGFiIG1vZCBwICovCitzdGF0aWMgdWxvbmczMiBnZl9tdWx0KHVsb25nMzIgYSwgdWxvbmczMiBiLCB1bG9uZzMyIHApCit7CisgICB1bG9uZzMyIHJlc3VsdCwgQlsyXSwgUFsyXTsKKworICAgUFsxXSA9IHA7CisgICBCWzFdID0gYjsKKyAgIHJlc3VsdCA9IFBbMF0gPSBCWzBdID0gMDsKKworICAgLyogdW5yb2xsZWQgYnJhbmNobGVzcyBHRiBtdWx0aXBsaWVyICovCisgICByZXN1bHQgXj0gQlthJjFdOyBhID4+PSAxOyAgQlsxXSA9IFBbQlsxXT4+N10gXiAoQlsxXSA8PCAxKTsgCisgICByZXN1bHQgXj0gQlthJjFdOyBhID4+PSAxOyAgQlsxXSA9IFBbQlsxXT4+N10gXiAoQlsxXSA8PCAxKTsgCisgICByZXN1bHQgXj0gQlthJjFdOyBhID4+PSAxOyAgQlsxXSA9IFBbQlsxXT4+N10gXiAoQlsxXSA8PCAxKTsgCisgICByZXN1bHQgXj0gQlthJjFdOyBhID4+PSAxOyAgQlsxXSA9IFBbQlsxXT4+N10gXiAoQlsxXSA8PCAxKTsgCisgICByZXN1bHQgXj0gQlthJjFdOyBhID4+PSAxOyAgQlsxXSA9IFBbQlsxXT4+N10gXiAoQlsxXSA8PCAxKTsgCisgICByZXN1bHQgXj0gQlthJjFdOyBhID4+PSAxOyAgQlsxXSA9IFBbQlsxXT4+N10gXiAoQlsxXSA8PCAxKTsgCisgICByZXN1bHQgXj0gQlthJjFdOyBhID4+PSAxOyAgQlsxXSA9IFBbQlsxXT4+N10gXiAoQlsxXSA8PCAxKTsgCisgICByZXN1bHQgXj0gQlthJjFdOyAKKworICAgcmV0dXJuIHJlc3VsdDsKK30KKworLyogY29tcHV0ZXMgW3kwIHkxIHkyIHkzXSA9IE1EUyAuIFt4MF0gKi8KKyNpZm5kZWYgVFdPRklTSF9UQUJMRVMKK3N0YXRpYyB1bG9uZzMyIG1kc19jb2x1bW5fbXVsdCh1bnNpZ25lZCBjaGFyIGluLCBpbnQgY29sKQoreworICAgdWxvbmczMiB4MDEsIHg1QiwgeEVGOworCisgICB4MDEgPSBpbjsKKyAgIHg1QiA9IGdmX211bHQoaW4sIDB4NUIsIE1EU19QT0xZKTsKKyAgIHhFRiA9IGdmX211bHQoaW4sIDB4RUYsIE1EU19QT0xZKTsKKworICAgc3dpdGNoIChjb2wpIHsKKyAgICAgICBjYXNlIDA6CisgICAgICAgICAgcmV0dXJuICh4MDEgPDwgMCApIHwKKyAgICAgICAgICAgICAgICAgKHg1QiA8PCA4ICkgfAorICAgICAgICAgICAgICAgICAoeEVGIDw8IDE2KSB8CisgICAgICAgICAgICAgICAgICh4RUYgPDwgMjQpOworICAgICAgIGNhc2UgMToKKyAgICAgICAgICByZXR1cm4gKHhFRiA8PCAwICkgfAorICAgICAgICAgICAgICAgICAoeEVGIDw8IDggKSB8CisgICAgICAgICAgICAgICAgICh4NUIgPDwgMTYpIHwKKyAgICAgICAgICAgICAgICAgKHgwMSA8PCAyNCk7CisgICAgICAgY2FzZSAyOgorICAgICAgICAgIHJldHVybiAoeDVCIDw8IDAgKSB8CisgICAgICAgICAgICAgICAgICh4RUYgPDwgOCApIHwKKyAgICAgICAgICAgICAgICAgKHgwMSA8PCAxNikgfAorICAgICAgICAgICAgICAgICAoeEVGIDw8IDI0KTsKKyAgICAgICBjYXNlIDM6CisgICAgICAgICAgcmV0dXJuICh4NUIgPDwgMCApIHwKKyAgICAgICAgICAgICAgICAgKHgwMSA8PCA4ICkgfAorICAgICAgICAgICAgICAgICAoeEVGIDw8IDE2KSB8CisgICAgICAgICAgICAgICAgICh4NUIgPDwgMjQpOworICAgfQorICAgLyogYXZvaWQgd2FybmluZ3MsIHdlJ2QgbmV2ZXIgZ2V0IGhlcmUgbm9ybWFsbHkgYnV0IGp1c3QgdG8gY2FsbSBjb21waWxlciB3YXJuaW5ncy4uLiAqLworICAgcmV0dXJuIDA7Cit9CisKKyNlbHNlIC8qICFUV09GSVNIX1RBQkxFUyAqLworCisjZGVmaW5lIG1kc19jb2x1bW5fbXVsdCh4LCBpKSBtZHNfdGFiW2ldW3hdCisKKyNlbmRpZiAvKiBUV09GSVNIX1RBQkxFUyAqLworCisvKiBDb21wdXRlcyBbeTAgeTEgeTIgeTNdID0gTURTIC4gW3gwIHgxIHgyIHgzXSAqLworc3RhdGljIHZvaWQgbWRzX211bHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKyAgaW50IHg7CisgIHVsb25nMzIgdG1wOworICBmb3IgKHRtcCA9IHggPSAwOyB4IDwgNDsgeCsrKSB7CisgICAgICB0bXAgXj0gbWRzX2NvbHVtbl9tdWx0KGluW3hdLCB4KTsKKyAgfQorICBTVE9SRTMyTCh0bXAsIG91dCk7Cit9CisKKyNpZmRlZiBUV09GSVNIX0FMTF9UQUJMRVMKKy8qIGNvbXB1dGVzIFt5MCB5MSB5MiB5M10gPSBSUyAuIFt4MCB4MSB4MiB4MyB4NCB4NSB4NiB4N10gKi8KK3N0YXRpYyB2b2lkIHJzX211bHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKyAgIHVsb25nMzIgdG1wOworICAgdG1wID0gcnNfdGFiMFtpblswXV0gXiByc190YWIxW2luWzFdXSBeIHJzX3RhYjJbaW5bMl1dIF4gcnNfdGFiM1tpblszXV0gXgorICAgICAgICAgcnNfdGFiNFtpbls0XV0gXiByc190YWI1W2luWzVdXSBeIHJzX3RhYjZbaW5bNl1dIF4gcnNfdGFiN1tpbls3XV07CisgICBTVE9SRTMyTCh0bXAsIG91dCk7Cit9CisKKyNlbHNlIC8qICFUV09GSVNIX0FMTF9UQUJMRVMgKi8KKworLyogY29tcHV0ZXMgW3kwIHkxIHkyIHkzXSA9IFJTIC4gW3gwIHgxIHgyIHgzIHg0IHg1IHg2IHg3XSAqLworc3RhdGljIHZvaWQgcnNfbXVsdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0KQoreworICBpbnQgeCwgeTsKKyAgZm9yICh4ID0gMDsgeCA8IDQ7IHgrKykgeworICAgICAgb3V0W3hdID0gMDsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHsKKyAgICAgICAgICBvdXRbeF0gXj0gZ2ZfbXVsdChpblt5XSwgUlNbeF1beV0sIFJTX1BPTFkpOworICAgICAgfQorICB9Cit9CisKKyNlbmRpZgorCisvKiBjb21wdXRlcyBoKHgpICovCitzdGF0aWMgdm9pZCBoX2Z1bmMoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgY2hhciAqTSwgaW50IGssIGludCBvZmZzZXQpCit7CisgIGludCB4OworICB1bnNpZ25lZCBjaGFyIHlbNF07CisgIGZvciAoeCA9IDA7IHggPCA0OyB4KyspIHsKKyAgICAgIHlbeF0gPSBpblt4XTsKKyB9CisgIHN3aXRjaCAoaykgeworICAgICBjYXNlIDQ6CisgICAgICAgICAgICB5WzBdID0gKHVuc2lnbmVkIGNoYXIpKHNib3goMSwgKHVsb25nMzIpeVswXSkgXiBNWzQgKiAoNiArIG9mZnNldCkgKyAwXSk7CisgICAgICAgICAgICB5WzFdID0gKHVuc2lnbmVkIGNoYXIpKHNib3goMCwgKHVsb25nMzIpeVsxXSkgXiBNWzQgKiAoNiArIG9mZnNldCkgKyAxXSk7CisgICAgICAgICAgICB5WzJdID0gKHVuc2lnbmVkIGNoYXIpKHNib3goMCwgKHVsb25nMzIpeVsyXSkgXiBNWzQgKiAoNiArIG9mZnNldCkgKyAyXSk7CisgICAgICAgICAgICB5WzNdID0gKHVuc2lnbmVkIGNoYXIpKHNib3goMSwgKHVsb25nMzIpeVszXSkgXiBNWzQgKiAoNiArIG9mZnNldCkgKyAzXSk7CisgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHlbMF0gPSAodW5zaWduZWQgY2hhcikoc2JveCgxLCAodWxvbmczMil5WzBdKSBeIE1bNCAqICg0ICsgb2Zmc2V0KSArIDBdKTsKKyAgICAgICAgICAgIHlbMV0gPSAodW5zaWduZWQgY2hhcikoc2JveCgxLCAodWxvbmczMil5WzFdKSBeIE1bNCAqICg0ICsgb2Zmc2V0KSArIDFdKTsKKyAgICAgICAgICAgIHlbMl0gPSAodW5zaWduZWQgY2hhcikoc2JveCgwLCAodWxvbmczMil5WzJdKSBeIE1bNCAqICg0ICsgb2Zmc2V0KSArIDJdKTsKKyAgICAgICAgICAgIHlbM10gPSAodW5zaWduZWQgY2hhcikoc2JveCgwLCAodWxvbmczMil5WzNdKSBeIE1bNCAqICg0ICsgb2Zmc2V0KSArIDNdKTsKKyAgICAgY2FzZSAyOgorICAgICAgICAgICAgeVswXSA9ICh1bnNpZ25lZCBjaGFyKShzYm94KDEsIHNib3goMCwgc2JveCgwLCAodWxvbmczMil5WzBdKSBeIE1bNCAqICgyICsgb2Zmc2V0KSArIDBdKSBeIE1bNCAqICgwICsgb2Zmc2V0KSArIDBdKSk7CisgICAgICAgICAgICB5WzFdID0gKHVuc2lnbmVkIGNoYXIpKHNib3goMCwgc2JveCgwLCBzYm94KDEsICh1bG9uZzMyKXlbMV0pIF4gTVs0ICogKDIgKyBvZmZzZXQpICsgMV0pIF4gTVs0ICogKDAgKyBvZmZzZXQpICsgMV0pKTsKKyAgICAgICAgICAgIHlbMl0gPSAodW5zaWduZWQgY2hhcikoc2JveCgxLCBzYm94KDEsIHNib3goMCwgKHVsb25nMzIpeVsyXSkgXiBNWzQgKiAoMiArIG9mZnNldCkgKyAyXSkgXiBNWzQgKiAoMCArIG9mZnNldCkgKyAyXSkpOworICAgICAgICAgICAgeVszXSA9ICh1bnNpZ25lZCBjaGFyKShzYm94KDAsIHNib3goMSwgc2JveCgxLCAodWxvbmczMil5WzNdKSBeIE1bNCAqICgyICsgb2Zmc2V0KSArIDNdKSBeIE1bNCAqICgwICsgb2Zmc2V0KSArIDNdKSk7CisgIH0KKyAgbWRzX211bHQoeSwgb3V0KTsKK30KKworI2lmbmRlZiBUV09GSVNIX1NNQUxMCisKKy8qIGZvciBHQ0Mgd2UgZG9uJ3QgdXNlIHBvaW50ZXIgYWxpYXNlcyAqLworI2lmIGRlZmluZWQoX19HTlVDX18pCisgICAgI2RlZmluZSBTMSBza2V5LT50d29maXNoLlNbMF0KKyAgICAjZGVmaW5lIFMyIHNrZXktPnR3b2Zpc2guU1sxXQorICAgICNkZWZpbmUgUzMgc2tleS0+dHdvZmlzaC5TWzJdCisgICAgI2RlZmluZSBTNCBza2V5LT50d29maXNoLlNbM10KKyNlbmRpZgorCisvKiB0aGUgRyBmdW5jdGlvbiAqLworI2RlZmluZSBnX2Z1bmMoeCwgZHVtKSAgKFMxW2J5dGUoeCwwKV0gXiBTMltieXRlKHgsMSldIF4gUzNbYnl0ZSh4LDIpXSBeIFM0W2J5dGUoeCwzKV0pCisjZGVmaW5lIGcxX2Z1bmMoeCwgZHVtKSAoUzJbYnl0ZSh4LDApXSBeIFMzW2J5dGUoeCwxKV0gXiBTNFtieXRlKHgsMildIF4gUzFbYnl0ZSh4LDMpXSkKKworI2Vsc2UKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIHVsb25nMzIgX2dfZnVuYyh1bG9uZzMyIHgsIHN5bW1ldHJpY19rZXkgKmtleSkKKyNlbHNlCitzdGF0aWMgdWxvbmczMiBnX2Z1bmModWxvbmczMiB4LCBzeW1tZXRyaWNfa2V5ICprZXkpCisjZW5kaWYKK3sKKyAgIHVuc2lnbmVkIGNoYXIgZywgaSwgeSwgejsKKyAgIHVsb25nMzIgcmVzOworCisgICByZXMgPSAwOworICAgZm9yICh5ID0gMDsgeSA8IDQ7IHkrKykgeworICAgICAgIHogPSBrZXktPnR3b2Zpc2guc3RhcnQ7CisKKyAgICAgICAvKiBkbyB1bmtleWVkIHN1YnN0aXR1dGlvbiAqLworICAgICAgIGcgPSBzYm94KHFvcmRbeV1beisrXSwgKHggPj4gKDgqeSkpICYgMjU1KTsKKworICAgICAgIC8qIGZpcnN0IHN1YmtleSAqLworICAgICAgIGkgPSAwOworCisgICAgICAgLyogZG8ga2V5IG1peGluZytzYm94IHVudGlsIHo9PTUgKi8KKyAgICAgICB3aGlsZSAoeiAhPSA1KSB7CisgICAgICAgICAgZyA9IGcgXiBrZXktPnR3b2Zpc2guU1s0KmkrKyArIHldOworICAgICAgICAgIGcgPSBzYm94KHFvcmRbeV1beisrXSwgZyk7CisgICAgICAgfQorCisgICAgICAgLyogbXVsdGlwbHkgZyBieSBhIGNvbHVtbiBvZiB0aGUgTURTICovCisgICAgICAgcmVzIF49IG1kc19jb2x1bW5fbXVsdChnLCB5KTsKKyAgIH0KKyAgIHJldHVybiByZXM7Cit9CisKKyNkZWZpbmUgZzFfZnVuYyh4LCBrZXkpIGdfZnVuYyhST0xjKHgsIDgpLCBrZXkpCisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyB1bG9uZzMyIGdfZnVuYyh1bG9uZzMyIHgsIHN5bW1ldHJpY19rZXkgKmtleSkKK3sKKyAgICB1bG9uZzMyIHk7CisgICAgeSA9IF9nX2Z1bmMoeCwga2V5KTsKKyAgICBidXJuX3N0YWNrKHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDQgKyBzaXplb2YodWxvbmczMikpOworICAgIHJldHVybiB5OworfQorI2VuZGlmIC8qIExUQ19DTEVBTl9TVEFDSyAqLworCisjZW5kaWYgLyogVFdPRklTSF9TTUFMTCAqLworCisgLyoqCisgICAgSW5pdGlhbGl6ZSB0aGUgVHdvZmlzaCBibG9jayBjaXBoZXIKKyAgICBAcGFyYW0ga2V5IFRoZSBzeW1tZXRyaWMga2V5IHlvdSB3aXNoIHRvIHBhc3MKKyAgICBAcGFyYW0ga2V5bGVuIFRoZSBrZXkgbGVuZ3RoIGluIGJ5dGVzCisgICAgQHBhcmFtIG51bV9yb3VuZHMgVGhlIG51bWJlciBvZiByb3VuZHMgZGVzaXJlZCAoMCBmb3IgZGVmYXVsdCkKKyAgICBAcGFyYW0gc2tleSBUaGUga2V5IGluIGFzIHNjaGVkdWxlZCBieSB0aGlzIGZ1bmN0aW9uLgorICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICovCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IF90d29maXNoX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZWxzZQoraW50IHR3b2Zpc2hfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSkKKyNlbmRpZgoreworI2lmbmRlZiBUV09GSVNIX1NNQUxMCisgICB1bnNpZ25lZCBjaGFyIFNbNCo0XSwgdG1weDAsIHRtcHgxOworI2VuZGlmCisgICBpbnQgaywgeCwgeTsKKyAgIHVuc2lnbmVkIGNoYXIgdG1wWzRdLCB0bXAyWzRdLCBNWzgqNF07CisgICB1bG9uZzMyIEEsIEI7CisKKyAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2tleSAhPSBOVUxMKTsKKworICAgLyogaW52YWxpZCBhcmd1bWVudHM/ICovCisgICBpZiAobnVtX3JvdW5kcyAhPSAxNiAmJiBudW1fcm91bmRzICE9IDApIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1JPVU5EUzsKKyAgIH0KKworICAgaWYgKGtleWxlbiAhPSAxNiAmJiBrZXlsZW4gIT0gMjQgJiYga2V5bGVuICE9IDMyKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgfQorCisgICAvKiBrID0ga2V5c2l6ZS82NCBbYnV0IHNpbmNlIG91ciBrZXlzaXplIGlzIGluIGJ5dGVzLi4uXSAqLworICAgayA9IGtleWxlbiAvIDg7CisKKyAgIC8qIGNvcHkgdGhlIGtleSBpbnRvIE0gKi8KKyAgIGZvciAoeCA9IDA7IHggPCBrZXlsZW47IHgrKykgeworICAgICAgIE1beF0gPSBrZXlbeF0gJiAyNTU7CisgICB9CisKKyAgIC8qIGNyZWF0ZSB0aGUgU1suLl0gd29yZHMgKi8KKyNpZm5kZWYgVFdPRklTSF9TTUFMTAorICAgZm9yICh4ID0gMDsgeCA8IGs7IHgrKykgeworICAgICAgIHJzX211bHQoTSsoeCo4KSwgUysoeCo0KSk7CisgICB9CisjZWxzZQorICAgZm9yICh4ID0gMDsgeCA8IGs7IHgrKykgeworICAgICAgIHJzX211bHQoTSsoeCo4KSwgc2tleS0+dHdvZmlzaC5TKyh4KjQpKTsKKyAgIH0KKyNlbmRpZgorCisgICAvKiBtYWtlIHN1YmtleXMgKi8KKyAgIGZvciAoeCA9IDA7IHggPCAyMDsgeCsrKSB7CisgICAgICAgLyogQSA9IGgocCAqIDJ4LCBNZSkgKi8KKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgNDsgeSsrKSB7CisgICAgICAgICAgIHRtcFt5XSA9IHgreDsKKyAgICAgICB9CisgICAgICAgaF9mdW5jKHRtcCwgdG1wMiwgTSwgaywgMCk7CisgICAgICAgTE9BRDMyTChBLCB0bXAyKTsKKworICAgICAgIC8qIEIgPSBST0woaChwICogKDJ4ICsgMSksIE1vKSwgOCkgKi8KKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgNDsgeSsrKSB7CisgICAgICAgICAgIHRtcFt5XSA9ICh1bnNpZ25lZCBjaGFyKSh4K3grMSk7CisgICAgICAgfQorICAgICAgIGhfZnVuYyh0bXAsIHRtcDIsIE0sIGssIDEpOworICAgICAgIExPQUQzMkwoQiwgdG1wMik7CisgICAgICAgQiA9IFJPTGMoQiwgOCk7CisKKyAgICAgICAvKiBLWzJpXSAgID0gQSArIEIgKi8KKyAgICAgICBza2V5LT50d29maXNoLktbeCt4XSA9IChBICsgQikgJiAweEZGRkZGRkZGVUw7CisKKyAgICAgICAvKiBLWzJpKzFdID0gKEEgKyAyQikgPDw8IDkgKi8KKyAgICAgICBza2V5LT50d29maXNoLktbeCt4KzFdID0gUk9MYyhCICsgQiArIEEsIDkpOworICAgfQorCisjaWZuZGVmIFRXT0ZJU0hfU01BTEwKKyAgIC8qIG1ha2UgdGhlIHNib3hlcyAobGFyZ2UgcmFtIHZhcmlhbnQpICovCisgICBpZiAoayA9PSAyKSB7CisgICAgICAgIGZvciAoeCA9IDA7IHggPCAyNTY7IHgrKykgeworICAgICAgICAgICB0bXB4MCA9ICh1bnNpZ25lZCBjaGFyKXNib3goMCwgeCk7CisgICAgICAgICAgIHRtcHgxID0gKHVuc2lnbmVkIGNoYXIpc2JveCgxLCB4KTsKKyAgICAgICAgICAgc2tleS0+dHdvZmlzaC5TWzBdW3hdID0gbWRzX2NvbHVtbl9tdWx0KHNib3goMSwgKHNib3goMCwgdG1weDAgXiBTWzBdKSBeIFNbNF0pKSwwKTsKKyAgICAgICAgICAgc2tleS0+dHdvZmlzaC5TWzFdW3hdID0gbWRzX2NvbHVtbl9tdWx0KHNib3goMCwgKHNib3goMCwgdG1weDEgXiBTWzFdKSBeIFNbNV0pKSwxKTsKKyAgICAgICAgICAgc2tleS0+dHdvZmlzaC5TWzJdW3hdID0gbWRzX2NvbHVtbl9tdWx0KHNib3goMSwgKHNib3goMSwgdG1weDAgXiBTWzJdKSBeIFNbNl0pKSwyKTsKKyAgICAgICAgICAgc2tleS0+dHdvZmlzaC5TWzNdW3hdID0gbWRzX2NvbHVtbl9tdWx0KHNib3goMCwgKHNib3goMSwgdG1weDEgXiBTWzNdKSBeIFNbN10pKSwzKTsKKyAgICAgICAgfQorICAgfSBlbHNlIGlmIChrID09IDMpIHsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IDI1NjsgeCsrKSB7CisgICAgICAgICAgIHRtcHgwID0gKHVuc2lnbmVkIGNoYXIpc2JveCgwLCB4KTsKKyAgICAgICAgICAgdG1weDEgPSAodW5zaWduZWQgY2hhcilzYm94KDEsIHgpOworICAgICAgICAgICBza2V5LT50d29maXNoLlNbMF1beF0gPSBtZHNfY29sdW1uX211bHQoc2JveCgxLCAoc2JveCgwLCBzYm94KDAsIHRtcHgxIF4gU1swXSkgXiBTWzRdKSBeIFNbOF0pKSwwKTsKKyAgICAgICAgICAgc2tleS0+dHdvZmlzaC5TWzFdW3hdID0gbWRzX2NvbHVtbl9tdWx0KHNib3goMCwgKHNib3goMCwgc2JveCgxLCB0bXB4MSBeIFNbMV0pIF4gU1s1XSkgXiBTWzldKSksMSk7CisgICAgICAgICAgIHNrZXktPnR3b2Zpc2guU1syXVt4XSA9IG1kc19jb2x1bW5fbXVsdChzYm94KDEsIChzYm94KDEsIHNib3goMCwgdG1weDAgXiBTWzJdKSBeIFNbNl0pIF4gU1sxMF0pKSwyKTsKKyAgICAgICAgICAgc2tleS0+dHdvZmlzaC5TWzNdW3hdID0gbWRzX2NvbHVtbl9tdWx0KHNib3goMCwgKHNib3goMSwgc2JveCgxLCB0bXB4MCBeIFNbM10pIF4gU1s3XSkgXiBTWzExXSkpLDMpOworICAgICAgICB9CisgICB9IGVsc2UgeworICAgICAgICBmb3IgKHggPSAwOyB4IDwgMjU2OyB4KyspIHsKKyAgICAgICAgICAgdG1weDAgPSAodW5zaWduZWQgY2hhcilzYm94KDAsIHgpOworICAgICAgICAgICB0bXB4MSA9ICh1bnNpZ25lZCBjaGFyKXNib3goMSwgeCk7CisgICAgICAgICAgIHNrZXktPnR3b2Zpc2guU1swXVt4XSA9IG1kc19jb2x1bW5fbXVsdChzYm94KDEsIChzYm94KDAsIHNib3goMCwgc2JveCgxLCB0bXB4MSBeIFNbMF0pIF4gU1s0XSkgXiBTWzhdKSBeIFNbMTJdKSksMCk7CisgICAgICAgICAgIHNrZXktPnR3b2Zpc2guU1sxXVt4XSA9IG1kc19jb2x1bW5fbXVsdChzYm94KDAsIChzYm94KDAsIHNib3goMSwgc2JveCgxLCB0bXB4MCBeIFNbMV0pIF4gU1s1XSkgXiBTWzldKSBeIFNbMTNdKSksMSk7CisgICAgICAgICAgIHNrZXktPnR3b2Zpc2guU1syXVt4XSA9IG1kc19jb2x1bW5fbXVsdChzYm94KDEsIChzYm94KDEsIHNib3goMCwgc2JveCgwLCB0bXB4MCBeIFNbMl0pIF4gU1s2XSkgXiBTWzEwXSkgXiBTWzE0XSkpLDIpOworICAgICAgICAgICBza2V5LT50d29maXNoLlNbM11beF0gPSBtZHNfY29sdW1uX211bHQoc2JveCgwLCAoc2JveCgxLCBzYm94KDEsIHNib3goMCwgdG1weDEgXiBTWzNdKSBeIFNbN10pIF4gU1sxMV0pIF4gU1sxNV0pKSwzKTsKKyAgICAgICAgfQorICAgfQorI2Vsc2UKKyAgIC8qIHdoZXJlIHRvIHN0YXJ0IGluIHRoZSBzYm94IGxheWVycyAqLworICAgLyogc21hbGwgcmFtIHZhcmlhbnQgKi8KKyAgIHN3aXRjaCAoaykgeworICAgICAgICAgY2FzZSA0IDogc2tleS0+dHdvZmlzaC5zdGFydCA9IDA7IGJyZWFrOworICAgICAgICAgY2FzZSAzIDogc2tleS0+dHdvZmlzaC5zdGFydCA9IDE7IGJyZWFrOyAKKyAgICAgICAgIGRlZmF1bHQ6IHNrZXktPnR3b2Zpc2guc3RhcnQgPSAyOyBicmVhazsKKyAgIH0KKyNlbmRpZgorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitpbnQgdHdvZmlzaF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgaW50IHg7CisgICB4ID0gX3R3b2Zpc2hfc2V0dXAoa2V5LCBrZXlsZW4sIG51bV9yb3VuZHMsIHNrZXkpOworICAgYnVybl9zdGFjayhzaXplb2YoaW50KSAqIDcgKyBzaXplb2YodW5zaWduZWQgY2hhcikgKiA1NiArIHNpemVvZih1bG9uZzMyKSAqIDIpOworICAgcmV0dXJuIHg7Cit9CisjZW5kaWYKKworLyoqCisgIEVuY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIFR3b2Zpc2gKKyAgQHBhcmFtIHB0IFRoZSBpbnB1dCBwbGFpbnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gY3QgVGhlIG91dHB1dCBjaXBoZXJ0ZXh0ICgxNiBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfdHdvZmlzaF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZWxzZQoraW50IHR3b2Zpc2hfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2VuZGlmCit7CisgICAgdWxvbmczMiBhLGIsYyxkLHRhLHRiLHRjLHRkLHQxLHQyLCAqazsKKyAgICBpbnQgcjsKKyNpZiAhZGVmaW5lZChUV09GSVNIX1NNQUxMKSAmJiAhZGVmaW5lZChfX0dOVUNfXykKKyAgICB1bG9uZzMyICpTMSwgKlMyLCAqUzMsICpTNDsKKyNlbmRpZiAgICAKKworICAgIExUQ19BUkdDSEsocHQgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworICAgIAorI2lmICFkZWZpbmVkKFRXT0ZJU0hfU01BTEwpICYmICFkZWZpbmVkKF9fR05VQ19fKQorICAgIFMxID0gc2tleS0+dHdvZmlzaC5TWzBdOworICAgIFMyID0gc2tleS0+dHdvZmlzaC5TWzFdOworICAgIFMzID0gc2tleS0+dHdvZmlzaC5TWzJdOworICAgIFM0ID0gc2tleS0+dHdvZmlzaC5TWzNdOworI2VuZGlmICAgIAorCisgICAgTE9BRDMyTChhLCZwdFswXSk7IExPQUQzMkwoYiwmcHRbNF0pOworICAgIExPQUQzMkwoYywmcHRbOF0pOyBMT0FEMzJMKGQsJnB0WzEyXSk7CisgICAgYSBePSBza2V5LT50d29maXNoLktbMF07CisgICAgYiBePSBza2V5LT50d29maXNoLktbMV07CisgICAgYyBePSBza2V5LT50d29maXNoLktbMl07CisgICAgZCBePSBza2V5LT50d29maXNoLktbM107CisgICAgCisgICAgayAgPSBza2V5LT50d29maXNoLksgKyA4OworICAgIGZvciAociA9IDg7IHIgIT0gMDsgLS1yKSB7CisgICAgICAgIHQyID0gZzFfZnVuYyhiLCBza2V5KTsKKyAgICAgICAgdDEgPSBnX2Z1bmMoYSwgc2tleSkgKyB0MjsKKyAgICAgICAgYyAgPSBST1JjKGMgXiAodDEgKyBrWzBdKSwgMSk7CisgICAgICAgIGQgID0gUk9MYyhkLCAxKSBeICh0MiArIHQxICsga1sxXSk7CisgICAgICAgIAorICAgICAgICB0MiA9IGcxX2Z1bmMoZCwgc2tleSk7CisgICAgICAgIHQxID0gZ19mdW5jKGMsIHNrZXkpICsgdDI7CisgICAgICAgIGEgID0gUk9SYyhhIF4gKHQxICsga1syXSksIDEpOworICAgICAgICBiICA9IFJPTGMoYiwgMSkgXiAodDIgKyB0MSArIGtbM10pOworICAgICAgICBrICs9IDQ7CisgICB9CisKKyAgICAvKiBvdXRwdXQgd2l0aCAidW5kbyBsYXN0IHN3YXAiICovCisgICAgdGEgPSBjIF4gc2tleS0+dHdvZmlzaC5LWzRdOworICAgIHRiID0gZCBeIHNrZXktPnR3b2Zpc2guS1s1XTsKKyAgICB0YyA9IGEgXiBza2V5LT50d29maXNoLktbNl07CisgICAgdGQgPSBiIF4gc2tleS0+dHdvZmlzaC5LWzddOworCisgICAgLyogc3RvcmUgb3V0cHV0ICovCisgICAgU1RPUkUzMkwodGEsJmN0WzBdKTsgU1RPUkUzMkwodGIsJmN0WzRdKTsKKyAgICBTVE9SRTMyTCh0YywmY3RbOF0pOyBTVE9SRTMyTCh0ZCwmY3RbMTJdKTsKKworICAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworaW50IHR3b2Zpc2hfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQoreworICAgaW50IGVyciA9IF90d29maXNoX2VjYl9lbmNyeXB0KHB0LCBjdCwgc2tleSk7CisgICBidXJuX3N0YWNrKHNpemVvZih1bG9uZzMyKSAqIDEwICsgc2l6ZW9mKGludCkpOworICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKioKKyAgRGVjcnlwdHMgYSBibG9jayBvZiB0ZXh0IHdpdGggVHdvZmlzaAorICBAcGFyYW0gY3QgVGhlIGlucHV0IGNpcGhlcnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gcHQgVGhlIG91dHB1dCBwbGFpbnRleHQgKDE2IGJ5dGVzKQorICBAcGFyYW0gc2tleSBUaGUga2V5IGFzIHNjaGVkdWxlZCAKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfdHdvZmlzaF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpCisjZWxzZQoraW50IHR3b2Zpc2hfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KQorI2VuZGlmCit7CisgICAgdWxvbmczMiBhLGIsYyxkLHRhLHRiLHRjLHRkLHQxLHQyLCAqazsKKyAgICBpbnQgcjsKKyNpZiAhZGVmaW5lZChUV09GSVNIX1NNQUxMKSAmJiAhZGVmaW5lZChfX0dOVUNfXykKKyAgICB1bG9uZzMyICpTMSwgKlMyLCAqUzMsICpTNDsKKyNlbmRpZiAgICAKKworICAgIExUQ19BUkdDSEsocHQgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhza2V5ICE9IE5VTEwpOworICAgIAorI2lmICFkZWZpbmVkKFRXT0ZJU0hfU01BTEwpICYmICFkZWZpbmVkKF9fR05VQ19fKQorICAgIFMxID0gc2tleS0+dHdvZmlzaC5TWzBdOworICAgIFMyID0gc2tleS0+dHdvZmlzaC5TWzFdOworICAgIFMzID0gc2tleS0+dHdvZmlzaC5TWzJdOworICAgIFM0ID0gc2tleS0+dHdvZmlzaC5TWzNdOworI2VuZGlmICAgIAorCisgICAgLyogbG9hZCBpbnB1dCAqLworICAgIExPQUQzMkwodGEsJmN0WzBdKTsgTE9BRDMyTCh0YiwmY3RbNF0pOworICAgIExPQUQzMkwodGMsJmN0WzhdKTsgTE9BRDMyTCh0ZCwmY3RbMTJdKTsKKworICAgIC8qIHVuZG8gdW5kbyBmaW5hbCBzd2FwICovCisgICAgYSA9IHRjIF4gc2tleS0+dHdvZmlzaC5LWzZdOworICAgIGIgPSB0ZCBeIHNrZXktPnR3b2Zpc2guS1s3XTsKKyAgICBjID0gdGEgXiBza2V5LT50d29maXNoLktbNF07CisgICAgZCA9IHRiIF4gc2tleS0+dHdvZmlzaC5LWzVdOworCisgICAgayA9IHNrZXktPnR3b2Zpc2guSyArIDM2OworICAgIGZvciAociA9IDg7IHIgIT0gMDsgLS1yKSB7CisgICAgICAgIHQyID0gZzFfZnVuYyhkLCBza2V5KTsKKyAgICAgICAgdDEgPSBnX2Z1bmMoYywgc2tleSkgKyB0MjsKKyAgICAgICAgYSA9IFJPTGMoYSwgMSkgXiAodDEgKyBrWzJdKTsKKyAgICAgICAgYiA9IFJPUmMoYiBeICh0MiArIHQxICsga1szXSksIDEpOworCisgICAgICAgIHQyID0gZzFfZnVuYyhiLCBza2V5KTsKKyAgICAgICAgdDEgPSBnX2Z1bmMoYSwgc2tleSkgKyB0MjsKKyAgICAgICAgYyA9IFJPTGMoYywgMSkgXiAodDEgKyBrWzBdKTsKKyAgICAgICAgZCA9IFJPUmMoZCBeICh0MiArICB0MSArIGtbMV0pLCAxKTsKKyAgICAgICAgayAtPSA0OworICAgIH0KKworICAgIC8qIHByZS13aGl0ZSAqLworICAgIGEgXj0gc2tleS0+dHdvZmlzaC5LWzBdOworICAgIGIgXj0gc2tleS0+dHdvZmlzaC5LWzFdOworICAgIGMgXj0gc2tleS0+dHdvZmlzaC5LWzJdOworICAgIGQgXj0gc2tleS0+dHdvZmlzaC5LWzNdOworICAgIAorICAgIC8qIHN0b3JlICovCisgICAgU1RPUkUzMkwoYSwgJnB0WzBdKTsgU1RPUkUzMkwoYiwgJnB0WzRdKTsKKyAgICBTVE9SRTMyTChjLCAmcHRbOF0pOyBTVE9SRTMyTChkLCAmcHRbMTJdKTsKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK2ludCB0d29maXNoX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIGludCBlcnIgPV90d29maXNoX2VjYl9kZWNyeXB0KGN0LCBwdCwgc2tleSk7CisgICBidXJuX3N0YWNrKHNpemVvZih1bG9uZzMyKSAqIDEwICsgc2l6ZW9mKGludCkpOworICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKioKKyAgUGVyZm9ybXMgYSBzZWxmLXRlc3Qgb2YgdGhlIFR3b2Zpc2ggYmxvY2sgY2lwaGVyCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgZnVuY3Rpb25hbCwgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdCBoYXMgYmVlbiBkaXNhYmxlZAorKi8KK2ludCB0d29maXNoX3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZSAgICAKKyBzdGF0aWMgY29uc3Qgc3RydWN0IHsgCisgICAgIGludCBrZXlsZW47CisgICAgIHVuc2lnbmVkIGNoYXIga2V5WzMyXSwgcHRbMTZdLCBjdFsxNl07CisgfSB0ZXN0c1tdID0geworICAgeyAxNiwKKyAgICAgeyAweDlGLCAweDU4LCAweDlGLCAweDVDLCAweEY2LCAweDEyLCAweDJDLCAweDMyLAorICAgICAgIDB4QjYsIDB4QkYsIDB4RUMsIDB4MkYsIDB4MkEsIDB4RTgsIDB4QzMsIDB4NUEgfSwKKyAgICAgeyAweEQ0LCAweDkxLCAweERCLCAweDE2LCAweEU3LCAweEIxLCAweEMzLCAweDlFLAorICAgICAgIDB4ODYsIDB4Q0IsIDB4MDgsIDB4NkIsIDB4NzgsIDB4OUYsIDB4NTQsIDB4MTkgfSwKKyAgICAgeyAweDAxLCAweDlGLCAweDk4LCAweDA5LCAweERFLCAweDE3LCAweDExLCAweDg1LAorICAgICAgIDB4OEYsIDB4QUEsIDB4QzMsIDB4QTMsIDB4QkEsIDB4MjAsIDB4RkIsIDB4QzMgfQorICAgfSwgeworICAgICAyNCwKKyAgICAgeyAweDg4LCAweEIyLCAweEIyLCAweDcwLCAweDZCLCAweDEwLCAweDVFLCAweDM2LAorICAgICAgIDB4QjQsIDB4NDYsIDB4QkIsIDB4NkQsIDB4NzMsIDB4MUEsIDB4MUUsIDB4ODgsCisgICAgICAgMHhFRiwgMHhBNywgMHgxRiwgMHg3OCwgMHg4OSwgMHg2NSwgMHhCRCwgMHg0NCB9LAorICAgICB7IDB4MzksIDB4REEsIDB4NjksIDB4RDYsIDB4QkEsIDB4NDksIDB4OTcsIDB4RDUsCisgICAgICAgMHg4NSwgMHhCNiwgMHhEQywgMHgwNywgMHgzQywgMHhBMywgMHg0MSwgMHhCMiB9LAorICAgICB7IDB4MTgsIDB4MkIsIDB4MDIsIDB4RDgsIDB4MTQsIDB4OTcsIDB4RUEsIDB4NDUsCisgICAgICAgMHhGOSwgMHhEQSwgMHhBQywgMHhEQywgMHgyOSwgMHgxOSwgMHgzQSwgMHg2NSB9CisgICB9LCB7IAorICAgICAzMiwKKyAgICAgeyAweEQ0LCAweDNCLCAweEI3LCAweDU1LCAweDZFLCAweEEzLCAweDJFLCAweDQ2LAorICAgICAgIDB4RjIsIDB4QTIsIDB4ODIsIDB4QjcsIDB4RDQsIDB4NUIsIDB4NEUsIDB4MEQsCisgICAgICAgMHg1NywgMHhGRiwgMHg3MywgMHg5RCwgMHg0RCwgMHhDOSwgMHgyQywgMHgxQiwKKyAgICAgICAweEQ3LCAweEZDLCAweDAxLCAweDcwLCAweDBDLCAweEM4LCAweDIxLCAweDZGIH0sCisgICAgIHsgMHg5MCwgMHhBRiwgMHhFOSwgMHgxQiwgMHhCMiwgMHg4OCwgMHg1NCwgMHg0RiwKKyAgICAgICAweDJDLCAweDMyLCAweERDLCAweDIzLCAweDlCLCAweDI2LCAweDM1LCAweEU2IH0sCisgICAgIHsgMHg2QywgMHhCNCwgMHg1NiwgMHgxQywgMHg0MCwgMHhCRiwgMHgwQSwgMHg5NywKKyAgICAgICAweDA1LCAweDkzLCAweDFDLCAweEI2LCAweEQ0LCAweDA4LCAweEU3LCAweEZBIH0KKyAgIH0KK307CisKKworIHN5bW1ldHJpY19rZXkga2V5OworIHVuc2lnbmVkIGNoYXIgdG1wWzJdWzE2XTsKKyBpbnQgZXJyLCBpLCB5OworIAorIGZvciAoaSA9IDA7IGkgPCAoaW50KShzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSkpOyBpKyspIHsKKyAgICBpZiAoKGVyciA9IHR3b2Zpc2hfc2V0dXAodGVzdHNbaV0ua2V5LCB0ZXN0c1tpXS5rZXlsZW4sIDAsICZrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICAgIHR3b2Zpc2hfZWNiX2VuY3J5cHQodGVzdHNbaV0ucHQsIHRtcFswXSwgJmtleSk7CisgICAgdHdvZmlzaF9lY2JfZGVjcnlwdCh0bXBbMF0sIHRtcFsxXSwgJmtleSk7CisgICAgaWYgKFhNRU1DTVAodG1wWzBdLCB0ZXN0c1tpXS5jdCwgMTYpICE9IDAgfHwgWE1FTUNNUCh0bXBbMV0sIHRlc3RzW2ldLnB0LCAxNikgIT0gMCkgeworI2lmIDAKKyAgICAgICBwcmludGYoIlR3b2Zpc2ggZmFpbGVkIHRlc3QgJWQsICVkLCAlZFxuIiwgaSwgWE1FTUNNUCh0bXBbMF0sIHRlc3RzW2ldLmN0LCAxNiksIFhNRU1DTVAodG1wWzFdLCB0ZXN0c1tpXS5wdCwgMTYpKTsKKyNlbmRpZgorICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgfQorICAgICAgLyogbm93IHNlZSBpZiB3ZSBjYW4gZW5jcnlwdCBhbGwgemVybyBieXRlcyAxMDAwIHRpbWVzLCBkZWNyeXB0IGFuZCBjb21lIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCAqLworICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHRtcFswXVt5XSA9IDA7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgMTAwMDsgeSsrKSB0d29maXNoX2VjYl9lbmNyeXB0KHRtcFswXSwgdG1wWzBdLCAma2V5KTsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwOyB5KyspIHR3b2Zpc2hfZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMF0sICZrZXkpOworICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIGlmICh0bXBbMF1beV0gIT0gMCkgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyB9ICAgIAorIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZiAKK30KKworLyoqIFRlcm1pbmF0ZSB0aGUgY29udGV4dCAKKyAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5CisqLwordm9pZCB0d29maXNoX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSkKK3sKK30KKworLyoqCisgIEdldHMgc3VpdGFibGUga2V5IHNpemUKKyAgQHBhcmFtIGtleXNpemUgW2luL291dF0gVGhlIGxlbmd0aCBvZiB0aGUgcmVjb21tZW5kZWQga2V5IChpbiBieXRlcykuICBUaGlzIGZ1bmN0aW9uIHdpbGwgc3RvcmUgdGhlIHN1aXRhYmxlIHNpemUgYmFjayBpbiB0aGlzIHZhcmlhYmxlLgorICBAcmV0dXJuIENSWVBUX09LIGlmIHRoZSBpbnB1dCBrZXkgc2l6ZSBpcyBhY2NlcHRhYmxlLgorKi8KK2ludCB0d29maXNoX2tleXNpemUoaW50ICprZXlzaXplKQoreworICAgTFRDX0FSR0NISyhrZXlzaXplKTsKKyAgIGlmICgqa2V5c2l6ZSA8IDE2KQorICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIGlmICgqa2V5c2l6ZSA8IDI0KSB7CisgICAgICAqa2V5c2l6ZSA9IDE2OworICAgICAgcmV0dXJuIENSWVBUX09LOworICAgfSBlbHNlIGlmICgqa2V5c2l6ZSA8IDMyKSB7CisgICAgICAqa2V5c2l6ZSA9IDI0OworICAgICAgcmV0dXJuIENSWVBUX09LOworICAgfSBlbHNlIHsKKyAgICAgICprZXlzaXplID0gMzI7CisgICAgICByZXR1cm4gQ1JZUFRfT0s7CisgICB9Cit9CisKKyNlbmRpZgorCisKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2guYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMTozNDowMyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2hfdGFiLmMgYi9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy90d29maXNoL3R3b2Zpc2hfdGFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhMzczZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9jaXBoZXJzL3R3b2Zpc2gvdHdvZmlzaF90YWIuYwpAQCAtMCwwICsxLDQ5NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworIC8qKgorICAgIEBmaWxlIHR3b2Zpc2hfdGFiLmMKKyAgICBUd29maXNoIHRhYmxlcywgVG9tIFN0IERlbmlzCisgKi8KKyNpZmRlZiBUV09GSVNIX1RBQkxFUworCisvKiBwcmUgZ2VuZXJhdGVkIDh4OCB0YWJsZXMgZnJvbSB0aGUgZm91ciA0eDRzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBTQk9YWzJdWzI1Nl0gPSB7Cit7CisgMHhhOSwgMHg2NywgMHhiMywgMHhlOCwgMHgwNCwgMHhmZCwgMHhhMywgMHg3NiwgMHg5YSwgMHg5MiwgCisgMHg4MCwgMHg3OCwgMHhlNCwgMHhkZCwgMHhkMSwgMHgzOCwgMHgwZCwgMHhjNiwgMHgzNSwgMHg5OCwgCisgMHgxOCwgMHhmNywgMHhlYywgMHg2YywgMHg0MywgMHg3NSwgMHgzNywgMHgyNiwgMHhmYSwgMHgxMywgCisgMHg5NCwgMHg0OCwgMHhmMiwgMHhkMCwgMHg4YiwgMHgzMCwgMHg4NCwgMHg1NCwgMHhkZiwgMHgyMywgCisgMHgxOSwgMHg1YiwgMHgzZCwgMHg1OSwgMHhmMywgMHhhZSwgMHhhMiwgMHg4MiwgMHg2MywgMHgwMSwgCisgMHg4MywgMHgyZSwgMHhkOSwgMHg1MSwgMHg5YiwgMHg3YywgMHhhNiwgMHhlYiwgMHhhNSwgMHhiZSwgCisgMHgxNiwgMHgwYywgMHhlMywgMHg2MSwgMHhjMCwgMHg4YywgMHgzYSwgMHhmNSwgMHg3MywgMHgyYywgCisgMHgyNSwgMHgwYiwgMHhiYiwgMHg0ZSwgMHg4OSwgMHg2YiwgMHg1MywgMHg2YSwgMHhiNCwgMHhmMSwgCisgMHhlMSwgMHhlNiwgMHhiZCwgMHg0NSwgMHhlMiwgMHhmNCwgMHhiNiwgMHg2NiwgMHhjYywgMHg5NSwKKyAweDAzLCAweDU2LCAweGQ0LCAweDFjLCAweDFlLCAweGQ3LCAweGZiLCAweGMzLCAweDhlLCAweGI1LCAKKyAweGU5LCAweGNmLCAweGJmLCAweGJhLCAweGVhLCAweDc3LCAweDM5LCAweGFmLCAweDMzLCAweGM5LCAKKyAweDYyLCAweDcxLCAweDgxLCAweDc5LCAweDA5LCAweGFkLCAweDI0LCAweGNkLCAweGY5LCAweGQ4LCAKKyAweGU1LCAweGM1LCAweGI5LCAweDRkLCAweDQ0LCAweDA4LCAweDg2LCAweGU3LCAweGExLCAweDFkLCAKKyAweGFhLCAweGVkLCAweDA2LCAweDcwLCAweGIyLCAweGQyLCAweDQxLCAweDdiLCAweGEwLCAweDExLCAKKyAweDMxLCAweGMyLCAweDI3LCAweDkwLCAweDIwLCAweGY2LCAweDYwLCAweGZmLCAweDk2LCAweDVjLAorIDB4YjEsIDB4YWIsIDB4OWUsIDB4OWMsIDB4NTIsIDB4MWIsIDB4NWYsIDB4OTMsIDB4MGEsIDB4ZWYsIAorIDB4OTEsIDB4ODUsIDB4NDksIDB4ZWUsIDB4MmQsIDB4NGYsIDB4OGYsIDB4M2IsIDB4NDcsIDB4ODcsIAorIDB4NmQsIDB4NDYsIDB4ZDYsIDB4M2UsIDB4NjksIDB4NjQsIDB4MmEsIDB4Y2UsIDB4Y2IsIDB4MmYsIAorIDB4ZmMsIDB4OTcsIDB4MDUsIDB4N2EsIDB4YWMsIDB4N2YsIDB4ZDUsIDB4MWEsIDB4NGIsIDB4MGUsIAorIDB4YTcsIDB4NWEsIDB4MjgsIDB4MTQsIDB4M2YsIDB4MjksIDB4ODgsIDB4M2MsIDB4NGMsIDB4MDIsIAorIDB4YjgsIDB4ZGEsIDB4YjAsIDB4MTcsIDB4NTUsIDB4MWYsIDB4OGEsIDB4N2QsIDB4NTcsIDB4YzcsIAorIDB4OGQsIDB4NzQsIDB4YjcsIDB4YzQsIDB4OWYsIDB4NzIsIDB4N2UsIDB4MTUsIDB4MjIsIDB4MTIsIAorIDB4NTgsIDB4MDcsIDB4OTksIDB4MzQsIDB4NmUsIDB4NTAsIDB4ZGUsIDB4NjgsIDB4NjUsIDB4YmMsIAorIDB4ZGIsIDB4ZjgsIDB4YzgsIDB4YTgsIDB4MmIsIDB4NDAsIDB4ZGMsIDB4ZmUsIDB4MzIsIDB4YTQsIAorIDB4Y2EsIDB4MTAsIDB4MjEsIDB4ZjAsIDB4ZDMsIDB4NWQsIDB4MGYsIDB4MDAsIDB4NmYsIDB4OWQsIAorIDB4MzYsIDB4NDIsIDB4NGEsIDB4NWUsIDB4YzEsIDB4ZTB9LAoreworIDB4NzUsIDB4ZjMsIDB4YzYsIDB4ZjQsIDB4ZGIsIDB4N2IsIDB4ZmIsIDB4YzgsIDB4NGEsIDB4ZDMsIAorIDB4ZTYsIDB4NmIsIDB4NDUsIDB4N2QsIDB4ZTgsIDB4NGIsIDB4ZDYsIDB4MzIsIDB4ZDgsIDB4ZmQsCisgMHgzNywgMHg3MSwgMHhmMSwgMHhlMSwgMHgzMCwgMHgwZiwgMHhmOCwgMHgxYiwgMHg4NywgMHhmYSwKKyAweDA2LCAweDNmLCAweDVlLCAweGJhLCAweGFlLCAweDViLCAweDhhLCAweDAwLCAweGJjLCAweDlkLAorIDB4NmQsIDB4YzEsIDB4YjEsIDB4MGUsIDB4ODAsIDB4NWQsIDB4ZDIsIDB4ZDUsIDB4YTAsIDB4ODQsIAorIDB4MDcsIDB4MTQsIDB4YjUsIDB4OTAsIDB4MmMsIDB4YTMsIDB4YjIsIDB4NzMsIDB4NGMsIDB4NTQsIAorIDB4OTIsIDB4NzQsIDB4MzYsIDB4NTEsIDB4MzgsIDB4YjAsIDB4YmQsIDB4NWEsIDB4ZmMsIDB4NjAsIAorIDB4NjIsIDB4OTYsIDB4NmMsIDB4NDIsIDB4ZjcsIDB4MTAsIDB4N2MsIDB4MjgsIDB4MjcsIDB4OGMsIAorIDB4MTMsIDB4OTUsIDB4OWMsIDB4YzcsIDB4MjQsIDB4NDYsIDB4M2IsIDB4NzAsIDB4Y2EsIDB4ZTMsIAorIDB4ODUsIDB4Y2IsIDB4MTEsIDB4ZDAsIDB4OTMsIDB4YjgsIDB4YTYsIDB4ODMsIDB4MjAsIDB4ZmYsCisgMHg5ZiwgMHg3NywgMHhjMywgMHhjYywgMHgwMywgMHg2ZiwgMHgwOCwgMHhiZiwgMHg0MCwgMHhlNywgCisgMHgyYiwgMHhlMiwgMHg3OSwgMHgwYywgMHhhYSwgMHg4MiwgMHg0MSwgMHgzYSwgMHhlYSwgMHhiOSwgCisgMHhlNCwgMHg5YSwgMHhhNCwgMHg5NywgMHg3ZSwgMHhkYSwgMHg3YSwgMHgxNywgMHg2NiwgMHg5NCwgCisgMHhhMSwgMHgxZCwgMHgzZCwgMHhmMCwgMHhkZSwgMHhiMywgMHgwYiwgMHg3MiwgMHhhNywgMHgxYywgCisgMHhlZiwgMHhkMSwgMHg1MywgMHgzZSwgMHg4ZiwgMHgzMywgMHgyNiwgMHg1ZiwgMHhlYywgMHg3NiwgCisgMHgyYSwgMHg0OSwgMHg4MSwgMHg4OCwgMHhlZSwgMHgyMSwgMHhjNCwgMHgxYSwgMHhlYiwgMHhkOSwgCisgMHhjNSwgMHgzOSwgMHg5OSwgMHhjZCwgMHhhZCwgMHgzMSwgMHg4YiwgMHgwMSwgMHgxOCwgMHgyMywgCisgMHhkZCwgMHgxZiwgMHg0ZSwgMHgyZCwgMHhmOSwgMHg0OCwgMHg0ZiwgMHhmMiwgMHg2NSwgMHg4ZSwgCisgMHg3OCwgMHg1YywgMHg1OCwgMHgxOSwgMHg4ZCwgMHhlNSwgMHg5OCwgMHg1NywgMHg2NywgMHg3ZiwgCisgMHgwNSwgMHg2NCwgMHhhZiwgMHg2MywgMHhiNiwgMHhmZSwgMHhmNSwgMHhiNywgMHgzYywgMHhhNSwgCisgMHhjZSwgMHhlOSwgMHg2OCwgMHg0NCwgMHhlMCwgMHg0ZCwgMHg0MywgMHg2OSwgMHgyOSwgMHgyZSwgCisgMHhhYywgMHgxNSwgMHg1OSwgMHhhOCwgMHgwYSwgMHg5ZSwgMHg2ZSwgMHg0NywgMHhkZiwgMHgzNCwgCisgMHgzNSwgMHg2YSwgMHhjZiwgMHhkYywgMHgyMiwgMHhjOSwgMHhjMCwgMHg5YiwgMHg4OSwgMHhkNCwgCisgMHhlZCwgMHhhYiwgMHgxMiwgMHhhMiwgMHgwZCwgMHg1MiwgMHhiYiwgMHgwMiwgMHgyZiwgMHhhOSwgCisgMHhkNywgMHg2MSwgMHgxZSwgMHhiNCwgMHg1MCwgMHgwNCwgMHhmNiwgMHhjMiwgMHgxNiwgMHgyNSwgCisgMHg4NiwgMHg1NiwgMHg1NSwgMHgwOSwgMHhiZSwgMHg5MX0KK307CisKKy8qIHRoZSA0eDQgTURTIGluIGEgbmljZXIgZm9ybWF0ICovCitzdGF0aWMgY29uc3QgdWxvbmczMiBtZHNfdGFiWzRdWzI1Nl0gPSB7Cit7CisweDAwMDAwMDAwVUwsIDB4ZWZlZjViMDFVTCwgMHhiN2I3YjYwMlVMLCAweDU4NThlZDAzVUwsIDB4MDcwNzA1MDRVTCwgMHhlOGU4NWUwNVVMLCAweGIwYjBiMzA2VUwsIDB4NWY1ZmU4MDdVTCwgCisweDBlMGUwYTA4VUwsIDB4ZTFlMTUxMDlVTCwgMHhiOWI5YmMwYVVMLCAweDU2NTZlNzBiVUwsIDB4MDkwOTBmMGNVTCwgMHhlNmU2NTQwZFVMLCAweGJlYmViOTBlVUwsIDB4NTE1MWUyMGZVTCwgCisweDFjMWMxNDEwVUwsIDB4ZjNmMzRmMTFVTCwgMHhhYmFiYTIxMlVMLCAweDQ0NDRmOTEzVUwsIDB4MWIxYjExMTRVTCwgMHhmNGY0NGExNVVMLCAweGFjYWNhNzE2VUwsIDB4NDM0M2ZjMTdVTCwgCisweDEyMTIxZTE4VUwsIDB4ZmRmZDQ1MTlVTCwgMHhhNWE1YTgxYVVMLCAweDRhNGFmMzFiVUwsIDB4MTUxNTFiMWNVTCwgMHhmYWZhNDAxZFVMLCAweGEyYTJhZDFlVUwsIDB4NGQ0ZGY2MWZVTCwgCisweDM4MzgyODIwVUwsIDB4ZDdkNzczMjFVTCwgMHg4ZjhmOWUyMlVMLCAweDYwNjBjNTIzVUwsIDB4M2YzZjJkMjRVTCwgMHhkMGQwNzYyNVVMLCAweDg4ODg5YjI2VUwsIDB4Njc2N2MwMjdVTCwgCisweDM2MzYyMjI4VUwsIDB4ZDlkOTc5MjlVTCwgMHg4MTgxOTQyYVVMLCAweDZlNmVjZjJiVUwsIDB4MzEzMTI3MmNVTCwgMHhkZWRlN2MyZFVMLCAweDg2ODY5MTJlVUwsIDB4Njk2OWNhMmZVTCwgCisweDI0MjQzYzMwVUwsIDB4Y2JjYjY3MzFVTCwgMHg5MzkzOGEzMlVMLCAweDdjN2NkMTMzVUwsIDB4MjMyMzM5MzRVTCwgMHhjY2NjNjIzNVVMLCAweDk0OTQ4ZjM2VUwsIDB4N2I3YmQ0MzdVTCwgCisweDJhMmEzNjM4VUwsIDB4YzVjNTZkMzlVTCwgMHg5ZDlkODAzYVVMLCAweDcyNzJkYjNiVUwsIDB4MmQyZDMzM2NVTCwgMHhjMmMyNjgzZFVMLCAweDlhOWE4NTNlVUwsIDB4NzU3NWRlM2ZVTCwgCisweDcwNzA1MDQwVUwsIDB4OWY5ZjBiNDFVTCwgMHhjN2M3ZTY0MlVMLCAweDI4MjhiZDQzVUwsIDB4Nzc3NzU1NDRVTCwgMHg5ODk4MGU0NVVMLCAweGMwYzBlMzQ2VUwsIDB4MmYyZmI4NDdVTCwKKzB4N2U3ZTVhNDhVTCwgMHg5MTkxMDE0OVVMLCAweGM5YzllYzRhVUwsIDB4MjYyNmI3NGJVTCwgMHg3OTc5NWY0Y1VMLCAweDk2OTYwNDRkVUwsIDB4Y2VjZWU5NGVVTCwgMHgyMTIxYjI0ZlVMLCAKKzB4NmM2YzQ0NTBVTCwgMHg4MzgzMWY1MVVMLCAweGRiZGJmMjUyVUwsIDB4MzQzNGE5NTNVTCwgMHg2YjZiNDE1NFVMLCAweDg0ODQxYTU1VUwsIDB4ZGNkY2Y3NTZVTCwgMHgzMzMzYWM1N1VMLCAKKzB4NjI2MjRlNThVTCwgMHg4ZDhkMTU1OVVMLCAweGQ1ZDVmODVhVUwsIDB4M2EzYWEzNWJVTCwgMHg2NTY1NGI1Y1VMLCAweDhhOGExMDVkVUwsIDB4ZDJkMmZkNWVVTCwgMHgzZDNkYTY1ZlVMLCAKKzB4NDg0ODc4NjBVTCwgMHhhN2E3MjM2MVVMLCAweGZmZmZjZTYyVUwsIDB4MTAxMDk1NjNVTCwgMHg0ZjRmN2Q2NFVMLCAweGEwYTAyNjY1VUwsIDB4ZjhmOGNiNjZVTCwgMHgxNzE3OTA2N1VMLCAKKzB4NDY0NjcyNjhVTCwgMHhhOWE5Mjk2OVVMLCAweGYxZjFjNDZhVUwsIDB4MWUxZTlmNmJVTCwgMHg0MTQxNzc2Y1VMLCAweGFlYWUyYzZkVUwsIDB4ZjZmNmMxNmVVTCwgMHgxOTE5OWE2ZlVMLAorMHg1NDU0NmM3MFVMLCAweGJiYmIzNzcxVUwsIDB4ZTNlM2RhNzJVTCwgMHgwYzBjODE3M1VMLCAweDUzNTM2OTc0VUwsIDB4YmNiYzMyNzVVTCwgMHhlNGU0ZGY3NlVMLCAweDBiMGI4NDc3VUwsIAorMHg1YTVhNjY3OFVMLCAweGI1YjUzZDc5VUwsIDB4ZWRlZGQwN2FVTCwgMHgwMjAyOGI3YlVMLCAweDVkNWQ2MzdjVUwsIDB4YjJiMjM4N2RVTCwgMHhlYWVhZDU3ZVVMLCAweDA1MDU4ZTdmVUwsIAorMHhlMGUwYTA4MFVMLCAweDBmMGZmYjgxVUwsIDB4NTc1NzE2ODJVTCwgMHhiOGI4NGQ4M1VMLCAweGU3ZTdhNTg0VUwsIDB4MDgwOGZlODVVTCwgMHg1MDUwMTM4NlVMLCAweGJmYmY0ODg3VUwsIAorMHhlZWVlYWE4OFVMLCAweDAxMDFmMTg5VUwsIDB4NTk1OTFjOGFVTCwgMHhiNmI2NDc4YlVMLCAweGU5ZTlhZjhjVUwsIDB4MDYwNmY0OGRVTCwgMHg1ZTVlMTk4ZVVMLCAweGIxYjE0MjhmVUwsIAorMHhmY2ZjYjQ5MFVMLCAweDEzMTNlZjkxVUwsIDB4NGI0YjAyOTJVTCwgMHhhNGE0NTk5M1VMLCAweGZiZmJiMTk0VUwsIDB4MTQxNGVhOTVVTCwgMHg0YzRjMDc5NlVMLCAweGEzYTM1Yzk3VUwsIAorMHhmMmYyYmU5OFVMLCAweDFkMWRlNTk5VUwsIDB4NDU0NTA4OWFVTCwgMHhhYWFhNTM5YlVMLCAweGY1ZjViYjljVUwsIDB4MWExYWUwOWRVTCwgMHg0MjQyMGQ5ZVVMLCAweGFkYWQ1NjlmVUwsIAorMHhkOGQ4ODhhMFVMLCAweDM3MzdkM2ExVUwsIDB4NmY2ZjNlYTJVTCwgMHg4MDgwNjVhM1VMLCAweGRmZGY4ZGE0VUwsIDB4MzAzMGQ2YTVVTCwgMHg2ODY4M2JhNlVMLCAweDg3ODc2MGE3VUwsIAorMHhkNmQ2ODJhOFVMLCAweDM5MzlkOWE5VUwsIDB4NjE2MTM0YWFVTCwgMHg4ZThlNmZhYlVMLCAweGQxZDE4N2FjVUwsIDB4M2UzZWRjYWRVTCwgMHg2NjY2MzFhZVVMLCAweDg5ODk2YWFmVUwsIAorMHhjNGM0OWNiMFVMLCAweDJiMmJjN2IxVUwsIDB4NzM3MzJhYjJVTCwgMHg5YzljNzFiM1VMLCAweGMzYzM5OWI0VUwsIDB4MmMyY2MyYjVVTCwgMHg3NDc0MmZiNlVMLCAweDliOWI3NGI3VUwsIAorMHhjYWNhOTZiOFVMLCAweDI1MjVjZGI5VUwsIDB4N2Q3ZDIwYmFVTCwgMHg5MjkyN2JiYlVMLCAweGNkY2Q5M2JjVUwsIDB4MjIyMmM4YmRVTCwgMHg3YTdhMjViZVVMLCAweDk1OTU3ZWJmVUwsIAorMHg5MDkwZjBjMFVMLCAweDdmN2ZhYmMxVUwsIDB4MjcyNzQ2YzJVTCwgMHhjOGM4MWRjM1VMLCAweDk3OTdmNWM0VUwsIDB4Nzg3OGFlYzVVTCwgMHgyMDIwNDNjNlVMLCAweGNmY2YxOGM3VUwsIAorMHg5ZTllZmFjOFVMLCAweDcxNzFhMWM5VUwsIDB4MjkyOTRjY2FVTCwgMHhjNmM2MTdjYlVMLCAweDk5OTlmZmNjVUwsIDB4NzY3NmE0Y2RVTCwgMHgyZTJlNDljZVVMLCAweGMxYzExMmNmVUwsIAorMHg4YzhjZTRkMFVMLCAweDYzNjNiZmQxVUwsIDB4M2IzYjUyZDJVTCwgMHhkNGQ0MDlkM1VMLCAweDhiOGJlMWQ0VUwsIDB4NjQ2NGJhZDVVTCwgMHgzYzNjNTdkNlVMLCAweGQzZDMwY2Q3VUwsIAorMHg4MjgyZWVkOFVMLCAweDZkNmRiNWQ5VUwsIDB4MzUzNTU4ZGFVTCwgMHhkYWRhMDNkYlVMLCAweDg1ODVlYmRjVUwsIDB4NmE2YWIwZGRVTCwgMHgzMjMyNWRkZVVMLCAweGRkZGQwNmRmVUwsIAorMHhhOGE4ZDhlMFVMLCAweDQ3NDc4M2UxVUwsIDB4MWYxZjZlZTJVTCwgMHhmMGYwMzVlM1VMLCAweGFmYWZkZGU0VUwsIDB4NDA0MDg2ZTVVTCwgMHgxODE4NmJlNlVMLCAweGY3ZjczMGU3VUwsCisweGE2YTZkMmU4VUwsIDB4NDk0OTg5ZTlVTCwgMHgxMTExNjRlYVVMLCAweGZlZmUzZmViVUwsIDB4YTFhMWQ3ZWNVTCwgMHg0ZTRlOGNlZFVMLCAweDE2MTY2MWVlVUwsIDB4ZjlmOTNhZWZVTCwKKzB4YjRiNGNjZjBVTCwgMHg1YjViOTdmMVVMLCAweDAzMDM3YWYyVUwsIDB4ZWNlYzIxZjNVTCwgMHhiM2IzYzlmNFVMLCAweDVjNWM5MmY1VUwsIDB4MDQwNDdmZjZVTCwgMHhlYmViMjRmN1VMLCAKKzB4YmFiYWM2ZjhVTCwgMHg1NTU1OWRmOVVMLCAweDBkMGQ3MGZhVUwsIDB4ZTJlMjJiZmJVTCwgMHhiZGJkYzNmY1VMLCAweDUyNTI5OGZkVUwsIDB4MGEwYTc1ZmVVTCwgMHhlNWU1MmVmZlVMCit9LCAKK3sKKzB4MDAwMDAwMDBVTCwgMHgwMTViZWZlZlVMLCAweDAyYjZiN2I3VUwsIDB4MDNlZDU4NThVTCwgMHgwNDA1MDcwN1VMLCAweDA1NWVlOGU4VUwsIDB4MDZiM2IwYjBVTCwgMHgwN2U4NWY1ZlVMLCAKKzB4MDgwYTBlMGVVTCwgMHgwOTUxZTFlMVVMLCAweDBhYmNiOWI5VUwsIDB4MGJlNzU2NTZVTCwgMHgwYzBmMDkwOVVMLCAweDBkNTRlNmU2VUwsIDB4MGViOWJlYmVVTCwgMHgwZmUyNTE1MVVMLCAKKzB4MTAxNDFjMWNVTCwgMHgxMTRmZjNmM1VMLCAweDEyYTJhYmFiVUwsIDB4MTNmOTQ0NDRVTCwgMHgxNDExMWIxYlVMLCAweDE1NGFmNGY0VUwsIDB4MTZhN2FjYWNVTCwgMHgxN2ZjNDM0M1VMLCAKKzB4MTgxZTEyMTJVTCwgMHgxOTQ1ZmRmZFVMLCAweDFhYThhNWE1VUwsIDB4MWJmMzRhNGFVTCwgMHgxYzFiMTUxNVVMLCAweDFkNDBmYWZhVUwsIDB4MWVhZGEyYTJVTCwgMHgxZmY2NGQ0ZFVMLCAKKzB4MjAyODM4MzhVTCwgMHgyMTczZDdkN1VMLCAweDIyOWU4ZjhmVUwsIDB4MjNjNTYwNjBVTCwgMHgyNDJkM2YzZlVMLCAweDI1NzZkMGQwVUwsIDB4MjY5Yjg4ODhVTCwgMHgyN2MwNjc2N1VMLCAKKzB4MjgyMjM2MzZVTCwgMHgyOTc5ZDlkOVVMLCAweDJhOTQ4MTgxVUwsIDB4MmJjZjZlNmVVTCwgMHgyYzI3MzEzMVVMLCAweDJkN2NkZWRlVUwsIDB4MmU5MTg2ODZVTCwgMHgyZmNhNjk2OVVMLCAKKzB4MzAzYzI0MjRVTCwgMHgzMTY3Y2JjYlVMLCAweDMyOGE5MzkzVUwsIDB4MzNkMTdjN2NVTCwgMHgzNDM5MjMyM1VMLCAweDM1NjJjY2NjVUwsIDB4MzY4Zjk0OTRVTCwgMHgzN2Q0N2I3YlVMLCAKKzB4MzgzNjJhMmFVTCwgMHgzOTZkYzVjNVVMLCAweDNhODA5ZDlkVUwsIDB4M2JkYjcyNzJVTCwgMHgzYzMzMmQyZFVMLCAweDNkNjhjMmMyVUwsIDB4M2U4NTlhOWFVTCwgMHgzZmRlNzU3NVVMLCAKKzB4NDA1MDcwNzBVTCwgMHg0MTBiOWY5ZlVMLCAweDQyZTZjN2M3VUwsIDB4NDNiZDI4MjhVTCwgMHg0NDU1Nzc3N1VMLCAweDQ1MGU5ODk4VUwsIDB4NDZlM2MwYzBVTCwgMHg0N2I4MmYyZlVMLCAKKzB4NDg1YTdlN2VVTCwgMHg0OTAxOTE5MVVMLCAweDRhZWNjOWM5VUwsIDB4NGJiNzI2MjZVTCwgMHg0YzVmNzk3OVVMLCAweDRkMDQ5Njk2VUwsIDB4NGVlOWNlY2VVTCwgMHg0ZmIyMjEyMVVMLCAKKzB4NTA0NDZjNmNVTCwgMHg1MTFmODM4M1VMLCAweDUyZjJkYmRiVUwsIDB4NTNhOTM0MzRVTCwgMHg1NDQxNmI2YlVMLCAweDU1MWE4NDg0VUwsIDB4NTZmN2RjZGNVTCwgMHg1N2FjMzMzM1VMLCAKKzB4NTg0ZTYyNjJVTCwgMHg1OTE1OGQ4ZFVMLCAweDVhZjhkNWQ1VUwsIDB4NWJhMzNhM2FVTCwgMHg1YzRiNjU2NVVMLCAweDVkMTA4YThhVUwsIDB4NWVmZGQyZDJVTCwgMHg1ZmE2M2QzZFVMLAorMHg2MDc4NDg0OFVMLCAweDYxMjNhN2E3VUwsIDB4NjJjZWZmZmZVTCwgMHg2Mzk1MTAxMFVMLCAweDY0N2Q0ZjRmVUwsIDB4NjUyNmEwYTBVTCwgMHg2NmNiZjhmOFVMLCAweDY3OTAxNzE3VUwsIAorMHg2ODcyNDY0NlVMLCAweDY5MjlhOWE5VUwsIDB4NmFjNGYxZjFVTCwgMHg2YjlmMWUxZVVMLCAweDZjNzc0MTQxVUwsIDB4NmQyY2FlYWVVTCwgMHg2ZWMxZjZmNlVMLCAweDZmOWExOTE5VUwsIAorMHg3MDZjNTQ1NFVMLCAweDcxMzdiYmJiVUwsIDB4NzJkYWUzZTNVTCwgMHg3MzgxMGMwY1VMLCAweDc0Njk1MzUzVUwsIDB4NzUzMmJjYmNVTCwgMHg3NmRmZTRlNFVMLCAweDc3ODQwYjBiVUwsIAorMHg3ODY2NWE1YVVMLCAweDc5M2RiNWI1VUwsIDB4N2FkMGVkZWRVTCwgMHg3YjhiMDIwMlVMLCAweDdjNjM1ZDVkVUwsIDB4N2QzOGIyYjJVTCwgMHg3ZWQ1ZWFlYVVMLCAweDdmOGUwNTA1VUwsIAorMHg4MGEwZTBlMFVMLCAweDgxZmIwZjBmVUwsIDB4ODIxNjU3NTdVTCwgMHg4MzRkYjhiOFVMLCAweDg0YTVlN2U3VUwsIDB4ODVmZTA4MDhVTCwgMHg4NjEzNTA1MFVMLCAweDg3NDhiZmJmVUwsIAorMHg4OGFhZWVlZVVMLCAweDg5ZjEwMTAxVUwsIDB4OGExYzU5NTlVTCwgMHg4YjQ3YjZiNlVMLCAweDhjYWZlOWU5VUwsIDB4OGRmNDA2MDZVTCwgMHg4ZTE5NWU1ZVVMLCAweDhmNDJiMWIxVUwsIAorMHg5MGI0ZmNmY1VMLCAweDkxZWYxMzEzVUwsIDB4OTIwMjRiNGJVTCwgMHg5MzU5YTRhNFVMLCAweDk0YjFmYmZiVUwsIDB4OTVlYTE0MTRVTCwgMHg5NjA3NGM0Y1VMLCAweDk3NWNhM2EzVUwsIAorMHg5OGJlZjJmMlVMLCAweDk5ZTUxZDFkVUwsIDB4OWEwODQ1NDVVTCwgMHg5YjUzYWFhYVVMLCAweDljYmJmNWY1VUwsIDB4OWRlMDFhMWFVTCwgMHg5ZTBkNDI0MlVMLCAweDlmNTZhZGFkVUwsCisweGEwODhkOGQ4VUwsIDB4YTFkMzM3MzdVTCwgMHhhMjNlNmY2ZlVMLCAweGEzNjU4MDgwVUwsIDB4YTQ4ZGRmZGZVTCwgMHhhNWQ2MzAzMFVMLCAweGE2M2I2ODY4VUwsIDB4YTc2MDg3ODdVTCwgCisweGE4ODJkNmQ2VUwsIDB4YTlkOTM5MzlVTCwgMHhhYTM0NjE2MVVMLCAweGFiNmY4ZThlVUwsIDB4YWM4N2QxZDFVTCwgMHhhZGRjM2UzZVVMLCAweGFlMzE2NjY2VUwsIDB4YWY2YTg5ODlVTCwgCisweGIwOWNjNGM0VUwsIDB4YjFjNzJiMmJVTCwgMHhiMjJhNzM3M1VMLCAweGIzNzE5YzljVUwsIDB4YjQ5OWMzYzNVTCwgMHhiNWMyMmMyY1VMLCAweGI2MmY3NDc0VUwsIDB4Yjc3NDliOWJVTCwgCisweGI4OTZjYWNhVUwsIDB4YjljZDI1MjVVTCwgMHhiYTIwN2Q3ZFVMLCAweGJiN2I5MjkyVUwsIDB4YmM5M2NkY2RVTCwgMHhiZGM4MjIyMlVMLCAweGJlMjU3YTdhVUwsIDB4YmY3ZTk1OTVVTCwgCisweGMwZjA5MDkwVUwsIDB4YzFhYjdmN2ZVTCwgMHhjMjQ2MjcyN1VMLCAweGMzMWRjOGM4VUwsIDB4YzRmNTk3OTdVTCwgMHhjNWFlNzg3OFVMLCAweGM2NDMyMDIwVUwsIDB4YzcxOGNmY2ZVTCwgCisweGM4ZmE5ZTllVUwsIDB4YzlhMTcxNzFVTCwgMHhjYTRjMjkyOVVMLCAweGNiMTdjNmM2VUwsIDB4Y2NmZjk5OTlVTCwgMHhjZGE0NzY3NlVMLCAweGNlNDkyZTJlVUwsIDB4Y2YxMmMxYzFVTCwgCisweGQwZTQ4YzhjVUwsIDB4ZDFiZjYzNjNVTCwgMHhkMjUyM2IzYlVMLCAweGQzMDlkNGQ0VUwsIDB4ZDRlMThiOGJVTCwgMHhkNWJhNjQ2NFVMLCAweGQ2NTczYzNjVUwsIDB4ZDcwY2QzZDNVTCwgCisweGQ4ZWU4MjgyVUwsIDB4ZDliNTZkNmRVTCwgMHhkYTU4MzUzNVVMLCAweGRiMDNkYWRhVUwsIDB4ZGNlYjg1ODVVTCwgMHhkZGIwNmE2YVVMLCAweGRlNWQzMjMyVUwsIDB4ZGYwNmRkZGRVTCwgCisweGUwZDhhOGE4VUwsIDB4ZTE4MzQ3NDdVTCwgMHhlMjZlMWYxZlVMLCAweGUzMzVmMGYwVUwsIDB4ZTRkZGFmYWZVTCwgMHhlNTg2NDA0MFVMLCAweGU2NmIxODE4VUwsIDB4ZTczMGY3ZjdVTCwgCisweGU4ZDJhNmE2VUwsIDB4ZTk4OTQ5NDlVTCwgMHhlYTY0MTExMVVMLCAweGViM2ZmZWZlVUwsIDB4ZWNkN2ExYTFVTCwgMHhlZDhjNGU0ZVVMLCAweGVlNjExNjE2VUwsIDB4ZWYzYWY5ZjlVTCwgCisweGYwY2NiNGI0VUwsIDB4ZjE5NzViNWJVTCwgMHhmMjdhMDMwM1VMLCAweGYzMjFlY2VjVUwsIDB4ZjRjOWIzYjNVTCwgMHhmNTkyNWM1Y1VMLCAweGY2N2YwNDA0VUwsIDB4ZjcyNGViZWJVTCwgCisweGY4YzZiYWJhVUwsIDB4Zjk5ZDU1NTVVTCwgMHhmYTcwMGQwZFVMLCAweGZiMmJlMmUyVUwsIDB4ZmNjM2JkYmRVTCwgMHhmZDk4NTI1MlVMLCAweGZlNzUwYTBhVUwsIDB4ZmYyZWU1ZTVVTAorfSwgCit7CisweDAwMDAwMDAwVUwsIDB4ZWYwMWVmNWJVTCwgMHhiNzAyYjdiNlVMLCAweDU4MDM1OGVkVUwsIDB4MDcwNDA3MDVVTCwgMHhlODA1ZTg1ZVVMLCAweGIwMDZiMGIzVUwsIDB4NWYwNzVmZThVTCwgCisweDBlMDgwZTBhVUwsIDB4ZTEwOWUxNTFVTCwgMHhiOTBhYjliY1VMLCAweDU2MGI1NmU3VUwsIDB4MDkwYzA5MGZVTCwgMHhlNjBkZTY1NFVMLCAweGJlMGViZWI5VUwsIDB4NTEwZjUxZTJVTCwKKzB4MWMxMDFjMTRVTCwgMHhmMzExZjM0ZlVMLCAweGFiMTJhYmEyVUwsIDB4NDQxMzQ0ZjlVTCwgMHgxYjE0MWIxMVVMLCAweGY0MTVmNDRhVUwsIDB4YWMxNmFjYTdVTCwgMHg0MzE3NDNmY1VMLCAKKzB4MTIxODEyMWVVTCwgMHhmZDE5ZmQ0NVVMLCAweGE1MWFhNWE4VUwsIDB4NGExYjRhZjNVTCwgMHgxNTFjMTUxYlVMLCAweGZhMWRmYTQwVUwsIDB4YTIxZWEyYWRVTCwgMHg0ZDFmNGRmNlVMLCAKKzB4MzgyMDM4MjhVTCwgMHhkNzIxZDc3M1VMLCAweDhmMjI4ZjllVUwsIDB4NjAyMzYwYzVVTCwgMHgzZjI0M2YyZFVMLCAweGQwMjVkMDc2VUwsIDB4ODgyNjg4OWJVTCwgMHg2NzI3NjdjMFVMLCAKKzB4MzYyODM2MjJVTCwgMHhkOTI5ZDk3OVVMLCAweDgxMmE4MTk0VUwsIDB4NmUyYjZlY2ZVTCwgMHgzMTJjMzEyN1VMLCAweGRlMmRkZTdjVUwsIDB4ODYyZTg2OTFVTCwgMHg2OTJmNjljYVVMLCAKKzB4MjQzMDI0M2NVTCwgMHhjYjMxY2I2N1VMLCAweDkzMzI5MzhhVUwsIDB4N2MzMzdjZDFVTCwgMHgyMzM0MjMzOVVMLCAweGNjMzVjYzYyVUwsIDB4OTQzNjk0OGZVTCwgMHg3YjM3N2JkNFVMLCAKKzB4MmEzODJhMzZVTCwgMHhjNTM5YzU2ZFVMLCAweDlkM2E5ZDgwVUwsIDB4NzIzYjcyZGJVTCwgMHgyZDNjMmQzM1VMLCAweGMyM2RjMjY4VUwsIDB4OWEzZTlhODVVTCwgMHg3NTNmNzVkZVVMLAorMHg3MDQwNzA1MFVMLCAweDlmNDE5ZjBiVUwsIDB4Yzc0MmM3ZTZVTCwgMHgyODQzMjhiZFVMLCAweDc3NDQ3NzU1VUwsIDB4OTg0NTk4MGVVTCwgMHhjMDQ2YzBlM1VMLCAweDJmNDcyZmI4VUwsIAorMHg3ZTQ4N2U1YVVMLCAweDkxNDk5MTAxVUwsIDB4Yzk0YWM5ZWNVTCwgMHgyNjRiMjZiN1VMLCAweDc5NGM3OTVmVUwsIDB4OTY0ZDk2MDRVTCwgMHhjZTRlY2VlOVVMLCAweDIxNGYyMWIyVUwsIAorMHg2YzUwNmM0NFVMLCAweDgzNTE4MzFmVUwsIDB4ZGI1MmRiZjJVTCwgMHgzNDUzMzRhOVVMLCAweDZiNTQ2YjQxVUwsIDB4ODQ1NTg0MWFVTCwgMHhkYzU2ZGNmN1VMLCAweDMzNTczM2FjVUwsCisweDYyNTg2MjRlVUwsIDB4OGQ1OThkMTVVTCwgMHhkNTVhZDVmOFVMLCAweDNhNWIzYWEzVUwsIDB4NjU1YzY1NGJVTCwgMHg4YTVkOGExMFVMLCAweGQyNWVkMmZkVUwsIDB4M2Q1ZjNkYTZVTCwgCisweDQ4NjA0ODc4VUwsIDB4YTc2MWE3MjNVTCwgMHhmZjYyZmZjZVVMLCAweDEwNjMxMDk1VUwsIDB4NGY2NDRmN2RVTCwgMHhhMDY1YTAyNlVMLCAweGY4NjZmOGNiVUwsIDB4MTc2NzE3OTBVTCwgCisweDQ2Njg0NjcyVUwsIDB4YTk2OWE5MjlVTCwgMHhmMTZhZjFjNFVMLCAweDFlNmIxZTlmVUwsIDB4NDE2YzQxNzdVTCwgMHhhZTZkYWUyY1VMLCAweGY2NmVmNmMxVUwsIDB4MTk2ZjE5OWFVTCwgCisweDU0NzA1NDZjVUwsIDB4YmI3MWJiMzdVTCwgMHhlMzcyZTNkYVVMLCAweDBjNzMwYzgxVUwsIDB4NTM3NDUzNjlVTCwgMHhiYzc1YmMzMlVMLCAweGU0NzZlNGRmVUwsIDB4MGI3NzBiODRVTCwKKzB4NWE3ODVhNjZVTCwgMHhiNTc5YjUzZFVMLCAweGVkN2FlZGQwVUwsIDB4MDI3YjAyOGJVTCwgMHg1ZDdjNWQ2M1VMLCAweGIyN2RiMjM4VUwsIDB4ZWE3ZWVhZDVVTCwgMHgwNTdmMDU4ZVVMLCAKKzB4ZTA4MGUwYTBVTCwgMHgwZjgxMGZmYlVMLCAweDU3ODI1NzE2VUwsIDB4Yjg4M2I4NGRVTCwgMHhlNzg0ZTdhNVVMLCAweDA4ODUwOGZlVUwsIDB4NTA4NjUwMTNVTCwgMHhiZjg3YmY0OFVMLAorMHhlZTg4ZWVhYVVMLCAweDAxODkwMWYxVUwsIDB4NTk4YTU5MWNVTCwgMHhiNjhiYjY0N1VMLCAweGU5OGNlOWFmVUwsIDB4MDY4ZDA2ZjRVTCwgMHg1ZThlNWUxOVVMLCAweGIxOGZiMTQyVUwsCisweGZjOTBmY2I0VUwsIDB4MTM5MTEzZWZVTCwgMHg0YjkyNGIwMlVMLCAweGE0OTNhNDU5VUwsIDB4ZmI5NGZiYjFVTCwgMHgxNDk1MTRlYVVMLCAweDRjOTY0YzA3VUwsIDB4YTM5N2EzNWNVTCwgCisweGYyOThmMmJlVUwsIDB4MWQ5OTFkZTVVTCwgMHg0NTlhNDUwOFVMLCAweGFhOWJhYTUzVUwsIDB4ZjU5Y2Y1YmJVTCwgMHgxYTlkMWFlMFVMLCAweDQyOWU0MjBkVUwsIDB4YWQ5ZmFkNTZVTCwgCisweGQ4YTBkODg4VUwsIDB4MzdhMTM3ZDNVTCwgMHg2ZmEyNmYzZVVMLCAweDgwYTM4MDY1VUwsIDB4ZGZhNGRmOGRVTCwgMHgzMGE1MzBkNlVMLCAweDY4YTY2ODNiVUwsIDB4ODdhNzg3NjBVTCwgCisweGQ2YThkNjgyVUwsIDB4MzlhOTM5ZDlVTCwgMHg2MWFhNjEzNFVMLCAweDhlYWI4ZTZmVUwsIDB4ZDFhY2QxODdVTCwgMHgzZWFkM2VkY1VMLCAweDY2YWU2NjMxVUwsIDB4ODlhZjg5NmFVTCwgCisweGM0YjBjNDljVUwsIDB4MmJiMTJiYzdVTCwgMHg3M2IyNzMyYVVMLCAweDljYjM5YzcxVUwsIDB4YzNiNGMzOTlVTCwgMHgyY2I1MmNjMlVMLCAweDc0YjY3NDJmVUwsIDB4OWJiNzliNzRVTCwgCisweGNhYjhjYTk2VUwsIDB4MjViOTI1Y2RVTCwgMHg3ZGJhN2QyMFVMLCAweDkyYmI5MjdiVUwsIDB4Y2RiY2NkOTNVTCwgMHgyMmJkMjJjOFVMLCAweDdhYmU3YTI1VUwsIDB4OTViZjk1N2VVTCwgCisweDkwYzA5MGYwVUwsIDB4N2ZjMTdmYWJVTCwgMHgyN2MyMjc0NlVMLCAweGM4YzNjODFkVUwsIDB4OTdjNDk3ZjVVTCwgMHg3OGM1NzhhZVVMLCAweDIwYzYyMDQzVUwsIDB4Y2ZjN2NmMThVTCwgCisweDllYzg5ZWZhVUwsIDB4NzFjOTcxYTFVTCwgMHgyOWNhMjk0Y1VMLCAweGM2Y2JjNjE3VUwsIDB4OTljYzk5ZmZVTCwgMHg3NmNkNzZhNFVMLCAweDJlY2UyZTQ5VUwsIDB4YzFjZmMxMTJVTCwgCisweDhjZDA4Y2U0VUwsIDB4NjNkMTYzYmZVTCwgMHgzYmQyM2I1MlVMLCAweGQ0ZDNkNDA5VUwsIDB4OGJkNDhiZTFVTCwgMHg2NGQ1NjRiYVVMLCAweDNjZDYzYzU3VUwsIDB4ZDNkN2QzMGNVTCwgCisweDgyZDg4MmVlVUwsIDB4NmRkOTZkYjVVTCwgMHgzNWRhMzU1OFVMLCAweGRhZGJkYTAzVUwsIDB4ODVkYzg1ZWJVTCwgMHg2YWRkNmFiMFVMLCAweDMyZGUzMjVkVUwsIDB4ZGRkZmRkMDZVTCwgCisweGE4ZTBhOGQ4VUwsIDB4NDdlMTQ3ODNVTCwgMHgxZmUyMWY2ZVVMLCAweGYwZTNmMDM1VUwsIDB4YWZlNGFmZGRVTCwgMHg0MGU1NDA4NlVMLCAweDE4ZTYxODZiVUwsIDB4ZjdlN2Y3MzBVTCwgCisweGE2ZThhNmQyVUwsIDB4NDllOTQ5ODlVTCwgMHgxMWVhMTE2NFVMLCAweGZlZWJmZTNmVUwsIDB4YTFlY2ExZDdVTCwgMHg0ZWVkNGU4Y1VMLCAweDE2ZWUxNjYxVUwsIDB4ZjllZmY5M2FVTCwgCisweGI0ZjBiNGNjVUwsIDB4NWJmMTViOTdVTCwgMHgwM2YyMDM3YVVMLCAweGVjZjNlYzIxVUwsIDB4YjNmNGIzYzlVTCwgMHg1Y2Y1NWM5MlVMLCAweDA0ZjYwNDdmVUwsIDB4ZWJmN2ViMjRVTCwgCisweGJhZjhiYWM2VUwsIDB4NTVmOTU1OWRVTCwgMHgwZGZhMGQ3MFVMLCAweGUyZmJlMjJiVUwsIDB4YmRmY2JkYzNVTCwgMHg1MmZkNTI5OFVMLCAweDBhZmUwYTc1VUwsIDB4ZTVmZmU1MmVVTAorfSwgCit7CisweDAwMDAwMDAwVUwsIDB4NWJlZjAxNWJVTCwgMHhiNmI3MDJiNlVMLCAweGVkNTgwM2VkVUwsIDB4MDUwNzA0MDVVTCwgMHg1ZWU4MDU1ZVVMLCAweGIzYjAwNmIzVUwsIDB4ZTg1ZjA3ZThVTCwgCisweDBhMGUwODBhVUwsIDB4NTFlMTA5NTFVTCwgMHhiY2I5MGFiY1VMLCAweGU3NTYwYmU3VUwsIDB4MGYwOTBjMGZVTCwgMHg1NGU2MGQ1NFVMLCAweGI5YmUwZWI5VUwsIDB4ZTI1MTBmZTJVTCwgCisweDE0MWMxMDE0VUwsIDB4NGZmMzExNGZVTCwgMHhhMmFiMTJhMlVMLCAweGY5NDQxM2Y5VUwsIDB4MTExYjE0MTFVTCwgMHg0YWY0MTU0YVVMLCAweGE3YWMxNmE3VUwsIDB4ZmM0MzE3ZmNVTCwgCisweDFlMTIxODFlVUwsIDB4NDVmZDE5NDVVTCwgMHhhOGE1MWFhOFVMLCAweGYzNGExYmYzVUwsIDB4MWIxNTFjMWJVTCwgMHg0MGZhMWQ0MFVMLCAweGFkYTIxZWFkVUwsIDB4ZjY0ZDFmZjZVTCwgCisweDI4MzgyMDI4VUwsIDB4NzNkNzIxNzNVTCwgMHg5ZThmMjI5ZVVMLCAweGM1NjAyM2M1VUwsIDB4MmQzZjI0MmRVTCwgMHg3NmQwMjU3NlVMLCAweDliODgyNjliVUwsIDB4YzA2NzI3YzBVTCwgCisweDIyMzYyODIyVUwsIDB4NzlkOTI5NzlVTCwgMHg5NDgxMmE5NFVMLCAweGNmNmUyYmNmVUwsIDB4MjczMTJjMjdVTCwgMHg3Y2RlMmQ3Y1VMLCAweDkxODYyZTkxVUwsIDB4Y2E2OTJmY2FVTCwgCisweDNjMjQzMDNjVUwsIDB4NjdjYjMxNjdVTCwgMHg4YTkzMzI4YVVMLCAweGQxN2MzM2QxVUwsIDB4MzkyMzM0MzlVTCwgMHg2MmNjMzU2MlVMLCAweDhmOTQzNjhmVUwsIDB4ZDQ3YjM3ZDRVTCwgCisweDM2MmEzODM2VUwsIDB4NmRjNTM5NmRVTCwgMHg4MDlkM2E4MFVMLCAweGRiNzIzYmRiVUwsIDB4MzMyZDNjMzNVTCwgMHg2OGMyM2Q2OFVMLCAweDg1OWEzZTg1VUwsIDB4ZGU3NTNmZGVVTCwKKzB4NTA3MDQwNTBVTCwgMHgwYjlmNDEwYlVMLCAweGU2Yzc0MmU2VUwsIDB4YmQyODQzYmRVTCwgMHg1NTc3NDQ1NVVMLCAweDBlOTg0NTBlVUwsIDB4ZTNjMDQ2ZTNVTCwgMHhiODJmNDdiOFVMLCAKKzB4NWE3ZTQ4NWFVTCwgMHgwMTkxNDkwMVVMLCAweGVjYzk0YWVjVUwsIDB4YjcyNjRiYjdVTCwgMHg1Zjc5NGM1ZlVMLCAweDA0OTY0ZDA0VUwsIDB4ZTljZTRlZTlVTCwgMHhiMjIxNGZiMlVMLCAKKzB4NDQ2YzUwNDRVTCwgMHgxZjgzNTExZlVMLCAweGYyZGI1MmYyVUwsIDB4YTkzNDUzYTlVTCwgMHg0MTZiNTQ0MVVMLCAweDFhODQ1NTFhVUwsIDB4ZjdkYzU2ZjdVTCwgMHhhYzMzNTdhY1VMLCAKKzB4NGU2MjU4NGVVTCwgMHgxNThkNTkxNVVMLCAweGY4ZDU1YWY4VUwsIDB4YTMzYTViYTNVTCwgMHg0YjY1NWM0YlVMLCAweDEwOGE1ZDEwVUwsIDB4ZmRkMjVlZmRVTCwgMHhhNjNkNWZhNlVMLCAKKzB4Nzg0ODYwNzhVTCwgMHgyM2E3NjEyM1VMLCAweGNlZmY2MmNlVUwsIDB4OTUxMDYzOTVVTCwgMHg3ZDRmNjQ3ZFVMLCAweDI2YTA2NTI2VUwsIDB4Y2JmODY2Y2JVTCwgMHg5MDE3Njc5MFVMLCAKKzB4NzI0NjY4NzJVTCwgMHgyOWE5NjkyOVVMLCAweGM0ZjE2YWM0VUwsIDB4OWYxZTZiOWZVTCwgMHg3NzQxNmM3N1VMLCAweDJjYWU2ZDJjVUwsIDB4YzFmNjZlYzFVTCwgMHg5YTE5NmY5YVVMLCAKKzB4NmM1NDcwNmNVTCwgMHgzN2JiNzEzN1VMLCAweGRhZTM3MmRhVUwsIDB4ODEwYzczODFVTCwgMHg2OTUzNzQ2OVVMLCAweDMyYmM3NTMyVUwsIDB4ZGZlNDc2ZGZVTCwgMHg4NDBiNzc4NFVMLCAKKzB4NjY1YTc4NjZVTCwgMHgzZGI1NzkzZFVMLCAweGQwZWQ3YWQwVUwsIDB4OGIwMjdiOGJVTCwgMHg2MzVkN2M2M1VMLCAweDM4YjI3ZDM4VUwsIDB4ZDVlYTdlZDVVTCwgMHg4ZTA1N2Y4ZVVMLCAKKzB4YTBlMDgwYTBVTCwgMHhmYjBmODFmYlVMLCAweDE2NTc4MjE2VUwsIDB4NGRiODgzNGRVTCwgMHhhNWU3ODRhNVVMLCAweGZlMDg4NWZlVUwsIDB4MTM1MDg2MTNVTCwgMHg0OGJmODc0OFVMLCAKKzB4YWFlZTg4YWFVTCwgMHhmMTAxODlmMVVMLCAweDFjNTk4YTFjVUwsIDB4NDdiNjhiNDdVTCwgMHhhZmU5OGNhZlVMLCAweGY0MDY4ZGY0VUwsIDB4MTk1ZThlMTlVTCwgMHg0MmIxOGY0MlVMLAorMHhiNGZjOTBiNFVMLCAweGVmMTM5MWVmVUwsIDB4MDI0YjkyMDJVTCwgMHg1OWE0OTM1OVVMLCAweGIxZmI5NGIxVUwsIDB4ZWExNDk1ZWFVTCwgMHgwNzRjOTYwN1VMLCAweDVjYTM5NzVjVUwsIAorMHhiZWYyOThiZVVMLCAweGU1MWQ5OWU1VUwsIDB4MDg0NTlhMDhVTCwgMHg1M2FhOWI1M1VMLCAweGJiZjU5Y2JiVUwsIDB4ZTAxYTlkZTBVTCwgMHgwZDQyOWUwZFVMLCAweDU2YWQ5ZjU2VUwsIAorMHg4OGQ4YTA4OFVMLCAweGQzMzdhMWQzVUwsIDB4M2U2ZmEyM2VVTCwgMHg2NTgwYTM2NVVMLCAweDhkZGZhNDhkVUwsIDB4ZDYzMGE1ZDZVTCwgMHgzYjY4YTYzYlVMLCAweDYwODdhNzYwVUwsIAorMHg4MmQ2YTg4MlVMLCAweGQ5MzlhOWQ5VUwsIDB4MzQ2MWFhMzRVTCwgMHg2ZjhlYWI2ZlVMLCAweDg3ZDFhYzg3VUwsIDB4ZGMzZWFkZGNVTCwgMHgzMTY2YWUzMVVMLCAweDZhODlhZjZhVUwsIAorMHg5Y2M0YjA5Y1VMLCAweGM3MmJiMWM3VUwsIDB4MmE3M2IyMmFVTCwgMHg3MTljYjM3MVVMLCAweDk5YzNiNDk5VUwsIDB4YzIyY2I1YzJVTCwgMHgyZjc0YjYyZlVMLCAweDc0OWJiNzc0VUwsIAorMHg5NmNhYjg5NlVMLCAweGNkMjViOWNkVUwsIDB4MjA3ZGJhMjBVTCwgMHg3YjkyYmI3YlVMLCAweDkzY2RiYzkzVUwsIDB4YzgyMmJkYzhVTCwgMHgyNTdhYmUyNVVMLCAweDdlOTViZjdlVUwsCisweGYwOTBjMGYwVUwsIDB4YWI3ZmMxYWJVTCwgMHg0NjI3YzI0NlVMLCAweDFkYzhjMzFkVUwsIDB4ZjU5N2M0ZjVVTCwgMHhhZTc4YzVhZVVMLCAweDQzMjBjNjQzVUwsIDB4MThjZmM3MThVTCwgCisweGZhOWVjOGZhVUwsIDB4YTE3MWM5YTFVTCwgMHg0YzI5Y2E0Y1VMLCAweDE3YzZjYjE3VUwsIDB4ZmY5OWNjZmZVTCwgMHhhNDc2Y2RhNFVMLCAweDQ5MmVjZTQ5VUwsIDB4MTJjMWNmMTJVTCwgCisweGU0OGNkMGU0VUwsIDB4YmY2M2QxYmZVTCwgMHg1MjNiZDI1MlVMLCAweDA5ZDRkMzA5VUwsIDB4ZTE4YmQ0ZTFVTCwgMHhiYTY0ZDViYVVMLCAweDU3M2NkNjU3VUwsIDB4MGNkM2Q3MGNVTCwgCisweGVlODJkOGVlVUwsIDB4YjU2ZGQ5YjVVTCwgMHg1ODM1ZGE1OFVMLCAweDAzZGFkYjAzVUwsIDB4ZWI4NWRjZWJVTCwgMHhiMDZhZGRiMFVMLCAweDVkMzJkZTVkVUwsIDB4MDZkZGRmMDZVTCwgCisweGQ4YThlMGQ4VUwsIDB4ODM0N2UxODNVTCwgMHg2ZTFmZTI2ZVVMLCAweDM1ZjBlMzM1VUwsIDB4ZGRhZmU0ZGRVTCwgMHg4NjQwZTU4NlVMLCAweDZiMThlNjZiVUwsIDB4MzBmN2U3MzBVTCwgCisweGQyYTZlOGQyVUwsIDB4ODk0OWU5ODlVTCwgMHg2NDExZWE2NFVMLCAweDNmZmVlYjNmVUwsIDB4ZDdhMWVjZDdVTCwgMHg4YzRlZWQ4Y1VMLCAweDYxMTZlZTYxVUwsIDB4M2FmOWVmM2FVTCwKKzB4Y2NiNGYwY2NVTCwgMHg5NzViZjE5N1VMLCAweDdhMDNmMjdhVUwsIDB4MjFlY2YzMjFVTCwgMHhjOWIzZjRjOVVMLCAweDkyNWNmNTkyVUwsIDB4N2YwNGY2N2ZVTCwgMHgyNGViZjcyNFVMLCAKKzB4YzZiYWY4YzZVTCwgMHg5ZDU1Zjk5ZFVMLCAweDcwMGRmYTcwVUwsIDB4MmJlMmZiMmJVTCwgMHhjM2JkZmNjM1VMLCAweDk4NTJmZDk4VUwsIDB4NzUwYWZlNzVVTCwgMHgyZWU1ZmYyZVVMCit9fTsKKworI2lmZGVmIFRXT0ZJU0hfQUxMX1RBQkxFUworCisvKiB0aGUgNHg4IFJTIHRyYW5zZm9ybSAqLworc3RhdGljIGNvbnN0IHVsb25nMzIgcnNfdGFiMFsyNTZdID0geworMHgwMDAwMDAwMExVLCAweGE0MDJhNDAxTFUsIDB4MDUwNDA1MDJMVSwgMHhhMTA2YTEwM0xVLCAweDBhMDgwYTA0TFUsIDB4YWUwYWFlMDVMVSwgMHgwZjBjMGYwNkxVLCAweGFiMGVhYjA3TFUsIAorMHgxNDEwMTQwOExVLCAweGIwMTJiMDA5TFUsIDB4MTExNDExMGFMVSwgMHhiNTE2YjUwYkxVLCAweDFlMTgxZTBjTFUsIDB4YmExYWJhMGRMVSwgMHgxYjFjMWIwZUxVLCAweGJmMWViZjBmTFUsIAorMHgyODIwMjgxMExVLCAweDhjMjI4YzExTFUsIDB4MmQyNDJkMTJMVSwgMHg4OTI2ODkxM0xVLCAweDIyMjgyMjE0TFUsIDB4ODYyYTg2MTVMVSwgMHgyNzJjMjcxNkxVLCAweDgzMmU4MzE3TFUsIAorMHgzYzMwM2MxOExVLCAweDk4MzI5ODE5TFUsIDB4MzkzNDM5MWFMVSwgMHg5ZDM2OWQxYkxVLCAweDM2MzgzNjFjTFUsIDB4OTIzYTkyMWRMVSwgMHgzMzNjMzMxZUxVLCAweDk3M2U5NzFmTFUsIAorMHg1MDQwNTAyMExVLCAweGY0NDJmNDIxTFUsIDB4NTU0NDU1MjJMVSwgMHhmMTQ2ZjEyM0xVLCAweDVhNDg1YTI0TFUsIDB4ZmU0YWZlMjVMVSwgMHg1ZjRjNWYyNkxVLCAweGZiNGVmYjI3TFUsIAorMHg0NDUwNDQyOExVLCAweGUwNTJlMDI5TFUsIDB4NDE1NDQxMmFMVSwgMHhlNTU2ZTUyYkxVLCAweDRlNTg0ZTJjTFUsIDB4ZWE1YWVhMmRMVSwgMHg0YjVjNGIyZUxVLCAweGVmNWVlZjJmTFUsIAorMHg3ODYwNzgzMExVLCAweGRjNjJkYzMxTFUsIDB4N2Q2NDdkMzJMVSwgMHhkOTY2ZDkzM0xVLCAweDcyNjg3MjM0TFUsIDB4ZDY2YWQ2MzVMVSwgMHg3NzZjNzczNkxVLCAweGQzNmVkMzM3TFUsIAorMHg2YzcwNmMzOExVLCAweGM4NzJjODM5TFUsIDB4Njk3NDY5M2FMVSwgMHhjZDc2Y2QzYkxVLCAweDY2Nzg2NjNjTFUsIDB4YzI3YWMyM2RMVSwgMHg2MzdjNjMzZUxVLCAweGM3N2VjNzNmTFUsIAorMHhhMDgwYTA0MExVLCAweDA0ODIwNDQxTFUsIDB4YTU4NGE1NDJMVSwgMHgwMTg2MDE0M0xVLCAweGFhODhhYTQ0TFUsIDB4MGU4YTBlNDVMVSwgMHhhZjhjYWY0NkxVLCAweDBiOGUwYjQ3TFUsIAorMHhiNDkwYjQ0OExVLCAweDEwOTIxMDQ5TFUsIDB4YjE5NGIxNGFMVSwgMHgxNTk2MTU0YkxVLCAweGJlOThiZTRjTFUsIDB4MWE5YTFhNGRMVSwgMHhiYjljYmI0ZUxVLCAweDFmOWUxZjRmTFUsIAorMHg4OGEwODg1MExVLCAweDJjYTIyYzUxTFUsIDB4OGRhNDhkNTJMVSwgMHgyOWE2Mjk1M0xVLCAweDgyYTg4MjU0TFUsIDB4MjZhYTI2NTVMVSwgMHg4N2FjODc1NkxVLCAweDIzYWUyMzU3TFUsIAorMHg5Y2IwOWM1OExVLCAweDM4YjIzODU5TFUsIDB4OTliNDk5NWFMVSwgMHgzZGI2M2Q1YkxVLCAweDk2Yjg5NjVjTFUsIDB4MzJiYTMyNWRMVSwgMHg5M2JjOTM1ZUxVLCAweDM3YmUzNzVmTFUsIAorMHhmMGMwZjA2MExVLCAweDU0YzI1NDYxTFUsIDB4ZjVjNGY1NjJMVSwgMHg1MWM2NTE2M0xVLCAweGZhYzhmYTY0TFUsIDB4NWVjYTVlNjVMVSwgMHhmZmNjZmY2NkxVLCAweDViY2U1YjY3TFUsIAorMHhlNGQwZTQ2OExVLCAweDQwZDI0MDY5TFUsIDB4ZTFkNGUxNmFMVSwgMHg0NWQ2NDU2YkxVLCAweGVlZDhlZTZjTFUsIDB4NGFkYTRhNmRMVSwgMHhlYmRjZWI2ZUxVLCAweDRmZGU0ZjZmTFUsIAorMHhkOGUwZDg3MExVLCAweDdjZTI3YzcxTFUsIDB4ZGRlNGRkNzJMVSwgMHg3OWU2Nzk3M0xVLCAweGQyZThkMjc0TFUsIDB4NzZlYTc2NzVMVSwgMHhkN2VjZDc3NkxVLCAweDczZWU3Mzc3TFUsIAorMHhjY2YwY2M3OExVLCAweDY4ZjI2ODc5TFUsIDB4YzlmNGM5N2FMVSwgMHg2ZGY2NmQ3YkxVLCAweGM2ZjhjNjdjTFUsIDB4NjJmYTYyN2RMVSwgMHhjM2ZjYzM3ZUxVLCAweDY3ZmU2NzdmTFUsIAorMHgwZDRkMGQ4MExVLCAweGE5NGZhOTgxTFUsIDB4MDg0OTA4ODJMVSwgMHhhYzRiYWM4M0xVLCAweDA3NDUwNzg0TFUsIDB4YTM0N2EzODVMVSwgMHgwMjQxMDI4NkxVLCAweGE2NDNhNjg3TFUsIAorMHgxOTVkMTk4OExVLCAweGJkNWZiZDg5TFUsIDB4MWM1OTFjOGFMVSwgMHhiODViYjg4YkxVLCAweDEzNTUxMzhjTFUsIDB4Yjc1N2I3OGRMVSwgMHgxNjUxMTY4ZUxVLCAweGIyNTNiMjhmTFUsIAorMHgyNTZkMjU5MExVLCAweDgxNmY4MTkxTFUsIDB4MjA2OTIwOTJMVSwgMHg4NDZiODQ5M0xVLCAweDJmNjUyZjk0TFUsIDB4OGI2NzhiOTVMVSwgMHgyYTYxMmE5NkxVLCAweDhlNjM4ZTk3TFUsIAorMHgzMTdkMzE5OExVLCAweDk1N2Y5NTk5TFUsIDB4MzQ3OTM0OWFMVSwgMHg5MDdiOTA5YkxVLCAweDNiNzUzYjljTFUsIDB4OWY3NzlmOWRMVSwgMHgzZTcxM2U5ZUxVLCAweDlhNzM5YTlmTFUsIAorMHg1ZDBkNWRhMExVLCAweGY5MGZmOWExTFUsIDB4NTgwOTU4YTJMVSwgMHhmYzBiZmNhM0xVLCAweDU3MDU1N2E0TFUsIDB4ZjMwN2YzYTVMVSwgMHg1MjAxNTJhNkxVLCAweGY2MDNmNmE3TFUsIAorMHg0OTFkNDlhOExVLCAweGVkMWZlZGE5TFUsIDB4NGMxOTRjYWFMVSwgMHhlODFiZThhYkxVLCAweDQzMTU0M2FjTFUsIDB4ZTcxN2U3YWRMVSwgMHg0NjExNDZhZUxVLCAweGUyMTNlMmFmTFUsIAorMHg3NTJkNzViMExVLCAweGQxMmZkMWIxTFUsIDB4NzAyOTcwYjJMVSwgMHhkNDJiZDRiM0xVLCAweDdmMjU3ZmI0TFUsIDB4ZGIyN2RiYjVMVSwgMHg3YTIxN2FiNkxVLCAweGRlMjNkZWI3TFUsIAorMHg2MTNkNjFiOExVLCAweGM1M2ZjNWI5TFUsIDB4NjQzOTY0YmFMVSwgMHhjMDNiYzBiYkxVLCAweDZiMzU2YmJjTFUsIDB4Y2YzN2NmYmRMVSwgMHg2ZTMxNmViZUxVLCAweGNhMzNjYWJmTFUsIAorMHhhZGNkYWRjMExVLCAweDA5Y2YwOWMxTFUsIDB4YThjOWE4YzJMVSwgMHgwY2NiMGNjM0xVLCAweGE3YzVhN2M0TFUsIDB4MDNjNzAzYzVMVSwgMHhhMmMxYTJjNkxVLCAweDA2YzMwNmM3TFUsIAorMHhiOWRkYjljOExVLCAweDFkZGYxZGM5TFUsIDB4YmNkOWJjY2FMVSwgMHgxOGRiMThjYkxVLCAweGIzZDViM2NjTFUsIDB4MTdkNzE3Y2RMVSwgMHhiNmQxYjZjZUxVLCAweDEyZDMxMmNmTFUsIAorMHg4NWVkODVkMExVLCAweDIxZWYyMWQxTFUsIDB4ODBlOTgwZDJMVSwgMHgyNGViMjRkM0xVLCAweDhmZTU4ZmQ0TFUsIDB4MmJlNzJiZDVMVSwgMHg4YWUxOGFkNkxVLCAweDJlZTMyZWQ3TFUsIAorMHg5MWZkOTFkOExVLCAweDM1ZmYzNWQ5TFUsIDB4OTRmOTk0ZGFMVSwgMHgzMGZiMzBkYkxVLCAweDliZjU5YmRjTFUsIDB4M2ZmNzNmZGRMVSwgMHg5ZWYxOWVkZUxVLCAweDNhZjMzYWRmTFUsIAorMHhmZDhkZmRlMExVLCAweDU5OGY1OWUxTFUsIDB4Zjg4OWY4ZTJMVSwgMHg1YzhiNWNlM0xVLCAweGY3ODVmN2U0TFUsIDB4NTM4NzUzZTVMVSwgMHhmMjgxZjJlNkxVLCAweDU2ODM1NmU3TFUsIAorMHhlOTlkZTllOExVLCAweDRkOWY0ZGU5TFUsIDB4ZWM5OWVjZWFMVSwgMHg0ODliNDhlYkxVLCAweGUzOTVlM2VjTFUsIDB4NDc5NzQ3ZWRMVSwgMHhlNjkxZTZlZUxVLCAweDQyOTM0MmVmTFUsIAorMHhkNWFkZDVmMExVLCAweDcxYWY3MWYxTFUsIDB4ZDBhOWQwZjJMVSwgMHg3NGFiNzRmM0xVLCAweGRmYTVkZmY0TFUsIDB4N2JhNzdiZjVMVSwgMHhkYWExZGFmNkxVLCAweDdlYTM3ZWY3TFUsIAorMHhjMWJkYzFmOExVLCAweDY1YmY2NWY5TFUsIDB4YzRiOWM0ZmFMVSwgMHg2MGJiNjBmYkxVLCAweGNiYjVjYmZjTFUsIDB4NmZiNzZmZmRMVSwgMHhjZWIxY2VmZUxVLCAweDZhYjM2YWZmTFUgfTsgCisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIHJzX3RhYjFbMjU2XSA9IHsKKzB4MDAwMDAwMDBMVSwgMHg1NWExNTZhNExVLCAweGFhMGZhYzA1TFUsIDB4ZmZhZWZhYTFMVSwgMHgxOTFlMTUwYUxVLCAweDRjYmY0M2FlTFUsIDB4YjMxMWI5MGZMVSwgMHhlNmIwZWZhYkxVLCAKKzB4MzIzYzJhMTRMVSwgMHg2NzlkN2NiMExVLCAweDk4MzM4NjExTFUsIDB4Y2Q5MmQwYjVMVSwgMHgyYjIyM2YxZUxVLCAweDdlODM2OWJhTFUsIDB4ODEyZDkzMWJMVSwgMHhkNDhjYzViZkxVLCAKKzB4NjQ3ODU0MjhMVSwgMHgzMWQ5MDI4Y0xVLCAweGNlNzdmODJkTFUsIDB4OWJkNmFlODlMVSwgMHg3ZDY2NDEyMkxVLCAweDI4YzcxNzg2TFUsIDB4ZDc2OWVkMjdMVSwgMHg4MmM4YmI4M0xVLCAKKzB4NTY0NDdlM2NMVSwgMHgwM2U1Mjg5OExVLCAweGZjNGJkMjM5TFUsIDB4YTllYTg0OWRMVSwgMHg0ZjVhNmIzNkxVLCAweDFhZmIzZDkyTFUsIDB4ZTU1NWM3MzNMVSwgMHhiMGY0OTE5N0xVLCAKKzB4YzhmMGE4NTBMVSwgMHg5ZDUxZmVmNExVLCAweDYyZmYwNDU1TFUsIDB4Mzc1ZTUyZjFMVSwgMHhkMWVlYmQ1YUxVLCAweDg0NGZlYmZlTFUsIDB4N2JlMTExNWZMVSwgMHgyZTQwNDdmYkxVLCAKKzB4ZmFjYzgyNDRMVSwgMHhhZjZkZDRlMExVLCAweDUwYzMyZTQxTFUsIDB4MDU2Mjc4ZTVMVSwgMHhlM2QyOTc0ZUxVLCAweGI2NzNjMWVhTFUsIDB4NDlkZDNiNGJMVSwgMHgxYzdjNmRlZkxVLCAKKzB4YWM4OGZjNzhMVSwgMHhmOTI5YWFkY0xVLCAweDA2ODc1MDdkTFUsIDB4NTMyNjA2ZDlMVSwgMHhiNTk2ZTk3MkxVLCAweGUwMzdiZmQ2TFUsIDB4MWY5OTQ1NzdMVSwgMHg0YTM4MTNkM0xVLCAKKzB4OWViNGQ2NmNMVSwgMHhjYjE1ODBjOExVLCAweDM0YmI3YTY5TFUsIDB4NjExYTJjY2RMVSwgMHg4N2FhYzM2NkxVLCAweGQyMGI5NWMyTFUsIDB4MmRhNTZmNjNMVSwgMHg3ODA0MzljN0xVLCAKKzB4ZGRhZDFkYTBMVSwgMHg4ODBjNGIwNExVLCAweDc3YTJiMWE1TFUsIDB4MjIwM2U3MDFMVSwgMHhjNGIzMDhhYUxVLCAweDkxMTI1ZTBlTFUsIDB4NmViY2E0YWZMVSwgMHgzYjFkZjIwYkxVLCAKKzB4ZWY5MTM3YjRMVSwgMHhiYTMwNjExMExVLCAweDQ1OWU5YmIxTFUsIDB4MTAzZmNkMTVMVSwgMHhmNjhmMjJiZUxVLCAweGEzMmU3NDFhTFUsIDB4NWM4MDhlYmJMVSwgMHgwOTIxZDgxZkxVLCAKKzB4YjlkNTQ5ODhMVSwgMHhlYzc0MWYyY0xVLCAweDEzZGFlNThkTFUsIDB4NDY3YmIzMjlMVSwgMHhhMGNiNWM4MkxVLCAweGY1NmEwYTI2TFUsIDB4MGFjNGYwODdMVSwgMHg1ZjY1YTYyM0xVLCAKKzB4OGJlOTYzOWNMVSwgMHhkZTQ4MzUzOExVLCAweDIxZTZjZjk5TFUsIDB4NzQ0Nzk5M2RMVSwgMHg5MmY3NzY5NkxVLCAweGM3NTYyMDMyTFUsIDB4MzhmOGRhOTNMVSwgMHg2ZDU5OGMzN0xVLCAKKzB4MTU1ZGI1ZjBMVSwgMHg0MGZjZTM1NExVLCAweGJmNTIxOWY1TFUsIDB4ZWFmMzRmNTFMVSwgMHgwYzQzYTBmYUxVLCAweDU5ZTJmNjVlTFUsIDB4YTY0YzBjZmZMVSwgMHhmM2VkNWE1YkxVLCAKKzB4Mjc2MTlmZTRMVSwgMHg3MmMwYzk0MExVLCAweDhkNmUzM2UxTFUsIDB4ZDhjZjY1NDVMVSwgMHgzZTdmOGFlZUxVLCAweDZiZGVkYzRhTFUsIDB4OTQ3MDI2ZWJMVSwgMHhjMWQxNzA0ZkxVLCAKKzB4NzEyNWUxZDhMVSwgMHgyNDg0Yjc3Y0xVLCAweGRiMmE0ZGRkTFUsIDB4OGU4YjFiNzlMVSwgMHg2ODNiZjRkMkxVLCAweDNkOWFhMjc2TFUsIDB4YzIzNDU4ZDdMVSwgMHg5Nzk1MGU3M0xVLCAKKzB4NDMxOWNiY2NMVSwgMHgxNmI4OWQ2OExVLCAweGU5MTY2N2M5TFUsIDB4YmNiNzMxNmRMVSwgMHg1YTA3ZGVjNkxVLCAweDBmYTY4ODYyTFUsIDB4ZjAwODcyYzNMVSwgMHhhNWE5MjQ2N0xVLAorMHhmNzE3M2EwZExVLCAweGEyYjY2Y2E5TFUsIDB4NWQxODk2MDhMVSwgMHgwOGI5YzBhY0xVLCAweGVlMDkyZjA3TFUsIDB4YmJhODc5YTNMVSwgMHg0NDA2ODMwMkxVLCAweDExYTdkNWE2TFUsIAorMHhjNTJiMTAxOUxVLCAweDkwOGE0NmJkTFUsIDB4NmYyNGJjMWNMVSwgMHgzYTg1ZWFiOExVLCAweGRjMzUwNTEzTFUsIDB4ODk5NDUzYjdMVSwgMHg3NjNhYTkxNkxVLCAweDIzOWJmZmIyTFUsIAorMHg5MzZmNmUyNUxVLCAweGM2Y2UzODgxTFUsIDB4Mzk2MGMyMjBMVSwgMHg2Y2MxOTQ4NExVLCAweDhhNzE3YjJmTFUsIDB4ZGZkMDJkOGJMVSwgMHgyMDdlZDcyYUxVLCAweDc1ZGY4MThlTFUsIAorMHhhMTUzNDQzMUxVLCAweGY0ZjIxMjk1TFUsIDB4MGI1Y2U4MzRMVSwgMHg1ZWZkYmU5MExVLCAweGI4NGQ1MTNiTFUsIDB4ZWRlYzA3OWZMVSwgMHgxMjQyZmQzZUxVLCAweDQ3ZTNhYjlhTFUsCisweDNmZTc5MjVkTFUsIDB4NmE0NmM0ZjlMVSwgMHg5NWU4M2U1OExVLCAweGMwNDk2OGZjTFUsIDB4MjZmOTg3NTdMVSwgMHg3MzU4ZDFmM0xVLCAweDhjZjYyYjUyTFUsIDB4ZDk1NzdkZjZMVSwgCisweDBkZGJiODQ5TFUsIDB4NTg3YWVlZWRMVSwgMHhhN2Q0MTQ0Y0xVLCAweGYyNzU0MmU4TFUsIDB4MTRjNWFkNDNMVSwgMHg0MTY0ZmJlN0xVLCAweGJlY2EwMTQ2TFUsIDB4ZWI2YjU3ZTJMVSwKKzB4NWI5ZmM2NzVMVSwgMHgwZTNlOTBkMUxVLCAweGYxOTA2YTcwTFUsIDB4YTQzMTNjZDRMVSwgMHg0MjgxZDM3ZkxVLCAweDE3MjA4NWRiTFUsIDB4ZTg4ZTdmN2FMVSwgMHhiZDJmMjlkZUxVLCAKKzB4NjlhM2VjNjFMVSwgMHgzYzAyYmFjNUxVLCAweGMzYWM0MDY0TFUsIDB4OTYwZDE2YzBMVSwgMHg3MGJkZjk2YkxVLCAweDI1MWNhZmNmTFUsIDB4ZGFiMjU1NmVMVSwgMHg4ZjEzMDNjYUxVLCAKKzB4MmFiYTI3YWRMVSwgMHg3ZjFiNzEwOUxVLCAweDgwYjU4YmE4TFUsIDB4ZDUxNGRkMGNMVSwgMHgzM2E0MzJhN0xVLCAweDY2MDU2NDAzTFUsIDB4OTlhYjllYTJMVSwgMHhjYzBhYzgwNkxVLCAKKzB4MTg4NjBkYjlMVSwgMHg0ZDI3NWIxZExVLCAweGIyODlhMWJjTFUsIDB4ZTcyOGY3MThMVSwgMHgwMTk4MThiM0xVLCAweDU0Mzk0ZTE3TFUsIDB4YWI5N2I0YjZMVSwgMHhmZTM2ZTIxMkxVLCAKKzB4NGVjMjczODVMVSwgMHgxYjYzMjUyMUxVLCAweGU0Y2RkZjgwTFUsIDB4YjE2Yzg5MjRMVSwgMHg1N2RjNjY4ZkxVLCAweDAyN2QzMDJiTFUsIDB4ZmRkM2NhOGFMVSwgMHhhODcyOWMyZUxVLCAKKzB4N2NmZTU5OTFMVSwgMHgyOTVmMGYzNUxVLCAweGQ2ZjFmNTk0TFUsIDB4ODM1MGEzMzBMVSwgMHg2NWUwNGM5YkxVLCAweDMwNDExYTNmTFUsIDB4Y2ZlZmUwOWVMVSwgMHg5YTRlYjYzYUxVLCAKKzB4ZTI0YThmZmRMVSwgMHhiN2ViZDk1OUxVLCAweDQ4NDUyM2Y4TFUsIDB4MWRlNDc1NWNMVSwgMHhmYjU0OWFmN0xVLCAweGFlZjVjYzUzTFUsIDB4NTE1YjM2ZjJMVSwgMHgwNGZhNjA1NkxVLCAKKzB4ZDA3NmE1ZTlMVSwgMHg4NWQ3ZjM0ZExVLCAweDdhNzkwOWVjTFUsIDB4MmZkODVmNDhMVSwgMHhjOTY4YjBlM0xVLCAweDljYzllNjQ3TFUsIDB4NjM2NzFjZTZMVSwgMHgzNmM2NGE0MkxVLCAKKzB4ODYzMmRiZDVMVSwgMHhkMzkzOGQ3MUxVLCAweDJjM2Q3N2QwTFUsIDB4Nzk5YzIxNzRMVSwgMHg5ZjJjY2VkZkxVLCAweGNhOGQ5ODdiTFUsIDB4MzUyMzYyZGFMVSwgMHg2MDgyMzQ3ZUxVLCAKKzB4YjQwZWYxYzFMVSwgMHhlMWFmYTc2NUxVLCAweDFlMDE1ZGM0TFUsIDB4NGJhMDBiNjBMVSwgMHhhZDEwZTRjYkxVLCAweGY4YjFiMjZmTFUsIDB4MDcxZjQ4Y2VMVSwgMHg1MmJlMWU2YUxVIH07IAorCitzdGF0aWMgY29uc3QgdWxvbmczMiByc190YWIyWzI1Nl0gPSB7CisweDAwMDAwMDAwTFUsIDB4ODdmYzgyNTVMVSwgMHg0M2I1NDlhYUxVLCAweGM0NDljYmZmTFUsIDB4ODYyNzkyMTlMVSwgMHgwMWRiMTA0Y0xVLCAweGM1OTJkYmIzTFUsIDB4NDI2ZTU5ZTZMVSwgCisweDQxNGU2OTMyTFUsIDB4YzZiMmViNjdMVSwgMHgwMmZiMjA5OExVLCAweDg1MDdhMmNkTFUsIDB4Yzc2OWZiMmJMVSwgMHg0MDk1Nzk3ZUxVLCAweDg0ZGNiMjgxTFUsIDB4MDMyMDMwZDRMVSwgCisweDgyOWNkMjY0TFUsIDB4MDU2MDUwMzFMVSwgMHhjMTI5OWJjZUxVLCAweDQ2ZDUxOTliTFUsIDB4MDRiYjQwN2RMVSwgMHg4MzQ3YzIyOExVLCAweDQ3MGUwOWQ3TFUsIDB4YzBmMjhiODJMVSwgCisweGMzZDJiYjU2TFUsIDB4NDQyZTM5MDNMVSwgMHg4MDY3ZjJmY0xVLCAweDA3OWI3MGE5TFUsIDB4NDVmNTI5NGZMVSwgMHhjMjA5YWIxYUxVLCAweDA2NDA2MGU1TFUsIDB4ODFiY2UyYjBMVSwgCisweDQ5NzVlOWM4TFUsIDB4Y2U4OTZiOWRMVSwgMHgwYWMwYTA2MkxVLCAweDhkM2MyMjM3TFUsIDB4Y2Y1MjdiZDFMVSwgMHg0OGFlZjk4NExVLCAweDhjZTczMjdiTFUsIDB4MGIxYmIwMmVMVSwgCisweDA4M2I4MGZhTFUsIDB4OGZjNzAyYWZMVSwgMHg0YjhlYzk1MExVLCAweGNjNzI0YjA1TFUsIDB4OGUxYzEyZTNMVSwgMHgwOWUwOTBiNkxVLCAweGNkYTk1YjQ5TFUsIDB4NGE1NWQ5MWNMVSwgCisweGNiZTkzYmFjTFUsIDB4NGMxNWI5ZjlMVSwgMHg4ODVjNzIwNkxVLCAweDBmYTBmMDUzTFUsIDB4NGRjZWE5YjVMVSwgMHhjYTMyMmJlMExVLCAweDBlN2JlMDFmTFUsIDB4ODk4NzYyNGFMVSwgCisweDhhYTc1MjllTFUsIDB4MGQ1YmQwY2JMVSwgMHhjOTEyMWIzNExVLCAweDRlZWU5OTYxTFUsIDB4MGM4MGMwODdMVSwgMHg4YjdjNDJkMkxVLCAweDRmMzU4OTJkTFUsIDB4YzhjOTBiNzhMVSwgCisweDkyZWE5ZmRkTFUsIDB4MTUxNjFkODhMVSwgMHhkMTVmZDY3N0xVLCAweDU2YTM1NDIyTFUsIDB4MTRjZDBkYzRMVSwgMHg5MzMxOGY5MUxVLCAweDU3Nzg0NDZlTFUsIDB4ZDA4NGM2M2JMVSwgCisweGQzYTRmNmVmTFUsIDB4NTQ1ODc0YmFMVSwgMHg5MDExYmY0NUxVLCAweDE3ZWQzZDEwTFUsIDB4NTU4MzY0ZjZMVSwgMHhkMjdmZTZhM0xVLCAweDE2MzYyZDVjTFUsIDB4OTFjYWFmMDlMVSwgCisweDEwNzY0ZGI5TFUsIDB4OTc4YWNmZWNMVSwgMHg1M2MzMDQxM0xVLCAweGQ0M2Y4NjQ2TFUsIDB4OTY1MWRmYTBMVSwgMHgxMWFkNWRmNUxVLCAweGQ1ZTQ5NjBhTFUsIDB4NTIxODE0NWZMVSwgCisweDUxMzgyNDhiTFUsIDB4ZDZjNGE2ZGVMVSwgMHgxMjhkNmQyMUxVLCAweDk1NzFlZjc0TFUsIDB4ZDcxZmI2OTJMVSwgMHg1MGUzMzRjN0xVLCAweDk0YWFmZjM4TFUsIDB4MTM1NjdkNmRMVSwgCisweGRiOWY3NjE1TFUsIDB4NWM2M2Y0NDBMVSwgMHg5ODJhM2ZiZkxVLCAweDFmZDZiZGVhTFUsIDB4NWRiOGU0MGNMVSwgMHhkYTQ0NjY1OUxVLCAweDFlMGRhZGE2TFUsIDB4OTlmMTJmZjNMVSwgCisweDlhZDExZjI3TFUsIDB4MWQyZDlkNzJMVSwgMHhkOTY0NTY4ZExVLCAweDVlOThkNGQ4TFUsIDB4MWNmNjhkM2VMVSwgMHg5YjBhMGY2YkxVLCAweDVmNDNjNDk0TFUsIDB4ZDhiZjQ2YzFMVSwgCisweDU5MDNhNDcxTFUsIDB4ZGVmZjI2MjRMVSwgMHgxYWI2ZWRkYkxVLCAweDlkNGE2ZjhlTFUsIDB4ZGYyNDM2NjhMVSwgMHg1OGQ4YjQzZExVLCAweDljOTE3ZmMyTFUsIDB4MWI2ZGZkOTdMVSwgCisweDE4NGRjZDQzTFUsIDB4OWZiMTRmMTZMVSwgMHg1YmY4ODRlOUxVLCAweGRjMDQwNmJjTFUsIDB4OWU2YTVmNWFMVSwgMHgxOTk2ZGQwZkxVLCAweGRkZGYxNmYwTFUsIDB4NWEyMzk0YTVMVSwgCisweDY5OTk3M2Y3TFUsIDB4ZWU2NWYxYTJMVSwgMHgyYTJjM2E1ZExVLCAweGFkZDBiODA4TFUsIDB4ZWZiZWUxZWVMVSwgMHg2ODQyNjNiYkxVLCAweGFjMGJhODQ0TFUsIDB4MmJmNzJhMTFMVSwgCisweDI4ZDcxYWM1TFUsIDB4YWYyYjk4OTBMVSwgMHg2YjYyNTM2ZkxVLCAweGVjOWVkMTNhTFUsIDB4YWVmMDg4ZGNMVSwgMHgyOTBjMGE4OUxVLCAweGVkNDVjMTc2TFUsIDB4NmFiOTQzMjNMVSwgCisweGViMDVhMTkzTFUsIDB4NmNmOTIzYzZMVSwgMHhhOGIwZTgzOUxVLCAweDJmNGM2YTZjTFUsIDB4NmQyMjMzOGFMVSwgMHhlYWRlYjFkZkxVLCAweDJlOTc3YTIwTFUsIDB4YTk2YmY4NzVMVSwgCisweGFhNGJjOGExTFUsIDB4MmRiNzRhZjRMVSwgMHhlOWZlODEwYkxVLCAweDZlMDIwMzVlTFUsIDB4MmM2YzVhYjhMVSwgMHhhYjkwZDhlZExVLCAweDZmZDkxMzEyTFUsIDB4ZTgyNTkxNDdMVSwgCisweDIwZWM5YTNmTFUsIDB4YTcxMDE4NmFMVSwgMHg2MzU5ZDM5NUxVLCAweGU0YTU1MWMwTFUsIDB4YTZjYjA4MjZMVSwgMHgyMTM3OGE3M0xVLCAweGU1N2U0MThjTFUsIDB4NjI4MmMzZDlMVSwgCisweDYxYTJmMzBkTFUsIDB4ZTY1ZTcxNThMVSwgMHgyMjE3YmFhN0xVLCAweGE1ZWIzOGYyTFUsIDB4ZTc4NTYxMTRMVSwgMHg2MDc5ZTM0MUxVLCAweGE0MzAyOGJlTFUsIDB4MjNjY2FhZWJMVSwgCisweGEyNzA0ODViTFUsIDB4MjU4Y2NhMGVMVSwgMHhlMWM1MDFmMUxVLCAweDY2Mzk4M2E0TFUsIDB4MjQ1N2RhNDJMVSwgMHhhM2FiNTgxN0xVLCAweDY3ZTI5M2U4TFUsIDB4ZTAxZTExYmRMVSwgCisweGUzM2UyMTY5TFUsIDB4NjRjMmEzM2NMVSwgMHhhMDhiNjhjM0xVLCAweDI3NzdlYTk2TFUsIDB4NjUxOWIzNzBMVSwgMHhlMmU1MzEyNUxVLCAweDI2YWNmYWRhTFUsIDB4YTE1MDc4OGZMVSwgCisweGZiNzNlYzJhTFUsIDB4N2M4ZjZlN2ZMVSwgMHhiOGM2YTU4MExVLCAweDNmM2EyN2Q1TFUsIDB4N2Q1NDdlMzNMVSwgMHhmYWE4ZmM2NkxVLCAweDNlZTEzNzk5TFUsIDB4YjkxZGI1Y2NMVSwgCisweGJhM2Q4NTE4TFUsIDB4M2RjMTA3NGRMVSwgMHhmOTg4Y2NiMkxVLCAweDdlNzQ0ZWU3TFUsIDB4M2MxYTE3MDFMVSwgMHhiYmU2OTU1NExVLCAweDdmYWY1ZWFiTFUsIDB4Zjg1M2RjZmVMVSwgCisweDc5ZWYzZTRlTFUsIDB4ZmUxM2JjMWJMVSwgMHgzYTVhNzdlNExVLCAweGJkYTZmNWIxTFUsIDB4ZmZjOGFjNTdMVSwgMHg3ODM0MmUwMkxVLCAweGJjN2RlNWZkTFUsIDB4M2I4MTY3YThMVSwgCisweDM4YTE1NzdjTFUsIDB4YmY1ZGQ1MjlMVSwgMHg3YjE0MWVkNkxVLCAweGZjZTg5YzgzTFUsIDB4YmU4NmM1NjVMVSwgMHgzOTdhNDczMExVLCAweGZkMzM4Y2NmTFUsIDB4N2FjZjBlOWFMVSwgCisweGIyMDYwNWUyTFUsIDB4MzVmYTg3YjdMVSwgMHhmMWIzNGM0OExVLCAweDc2NGZjZTFkTFUsIDB4MzQyMTk3ZmJMVSwgMHhiM2RkMTVhZUxVLCAweDc3OTRkZTUxTFUsIDB4ZjA2ODVjMDRMVSwgCisweGYzNDg2Y2QwTFUsIDB4NzRiNGVlODVMVSwgMHhiMGZkMjU3YUxVLCAweDM3MDFhNzJmTFUsIDB4NzU2ZmZlYzlMVSwgMHhmMjkzN2M5Y0xVLCAweDM2ZGFiNzYzTFUsIDB4YjEyNjM1MzZMVSwgCisweDMwOWFkNzg2TFUsIDB4Yjc2NjU1ZDNMVSwgMHg3MzJmOWUyY0xVLCAweGY0ZDMxYzc5TFUsIDB4YjZiZDQ1OWZMVSwgMHgzMTQxYzdjYUxVLCAweGY1MDgwYzM1TFUsIDB4NzJmNDhlNjBMVSwgCisweDcxZDRiZWI0TFUsIDB4ZjYyODNjZTFMVSwgMHgzMjYxZjcxZUxVLCAweGI1OWQ3NTRiTFUsIDB4ZjdmMzJjYWRMVSwgMHg3MDBmYWVmOExVLCAweGI0NDY2NTA3TFUsIDB4MzNiYWU3NTJMVSB9OyAKKworc3RhdGljIGNvbnN0IHVsb25nMzIgcnNfdGFiM1syNTZdID0geworMHgwMDAwMDAwMExVLCAweDVhYzFmMzg3TFUsIDB4YjRjZmFiNDNMVSwgMHhlZTBlNThjNExVLCAweDI1ZDMxYjg2TFUsIDB4N2YxMmU4MDFMVSwgMHg5MTFjYjBjNUxVLCAweGNiZGQ0MzQyTFUsIAorMHg0YWViMzY0MUxVLCAweDEwMmFjNWM2TFUsIDB4ZmUyNDlkMDJMVSwgMHhhNGU1NmU4NUxVLCAweDZmMzgyZGM3TFUsIDB4MzVmOWRlNDBMVSwgMHhkYmY3ODY4NExVLCAweDgxMzY3NTAzTFUsIAorMHg5NDliNmM4MkxVLCAweGNlNWE5ZjA1TFUsIDB4MjA1NGM3YzFMVSwgMHg3YTk1MzQ0NkxVLCAweGIxNDg3NzA0TFUsIDB4ZWI4OTg0ODNMVSwgMHgwNTg3ZGM0N0xVLCAweDVmNDYyZmMwTFUsIAorMHhkZTcwNWFjM0xVLCAweDg0YjFhOTQ0TFUsIDB4NmFiZmYxODBMVSwgMHgzMDdlMDIwN0xVLCAweGZiYTM0MTQ1TFUsIDB4YTE2MmIyYzJMVSwgMHg0ZjZjZWEwNkxVLCAweDE1YWQxOTgxTFUsCisweDY1N2JkODQ5TFUsIDB4M2ZiYTJiY2VMVSwgMHhkMWI0NzMwYUxVLCAweDhiNzU4MDhkTFUsIDB4NDBhOGMzY2ZMVSwgMHgxYTY5MzA0OExVLCAweGY0Njc2ODhjTFUsIDB4YWVhNjliMGJMVSwgCisweDJmOTBlZTA4TFUsIDB4NzU1MTFkOGZMVSwgMHg5YjVmNDU0YkxVLCAweGMxOWViNmNjTFUsIDB4MGE0M2Y1OGVMVSwgMHg1MDgyMDYwOUxVLCAweGJlOGM1ZWNkTFUsIDB4ZTQ0ZGFkNGFMVSwgCisweGYxZTBiNGNiTFUsIDB4YWIyMTQ3NGNMVSwgMHg0NTJmMWY4OExVLCAweDFmZWVlYzBmTFUsIDB4ZDQzM2FmNGRMVSwgMHg4ZWYyNWNjYUxVLCAweDYwZmMwNDBlTFUsIDB4M2EzZGY3ODlMVSwgCisweGJiMGI4MjhhTFUsIDB4ZTFjYTcxMGRMVSwgMHgwZmM0MjljOUxVLCAweDU1MDVkYTRlTFUsIDB4OWVkODk5MGNMVSwgMHhjNDE5NmE4YkxVLCAweDJhMTczMjRmTFUsIDB4NzBkNmMxYzhMVSwgCisweGNhZjZmZDkyTFUsIDB4OTAzNzBlMTVMVSwgMHg3ZTM5NTZkMUxVLCAweDI0ZjhhNTU2TFUsIDB4ZWYyNWU2MTRMVSwgMHhiNWU0MTU5M0xVLCAweDViZWE0ZDU3TFUsIDB4MDEyYmJlZDBMVSwgCisweDgwMWRjYmQzTFUsIDB4ZGFkYzM4NTRMVSwgMHgzNGQyNjA5MExVLCAweDZlMTM5MzE3TFUsIDB4YTVjZWQwNTVMVSwgMHhmZjBmMjNkMkxVLCAweDExMDE3YjE2TFUsIDB4NGJjMDg4OTFMVSwKKzB4NWU2ZDkxMTBMVSwgMHgwNGFjNjI5N0xVLCAweGVhYTIzYTUzTFUsIDB4YjA2M2M5ZDRMVSwgMHg3YmJlOGE5NkxVLCAweDIxN2Y3OTExTFUsIDB4Y2Y3MTIxZDVMVSwgMHg5NWIwZDI1MkxVLCAKKzB4MTQ4NmE3NTFMVSwgMHg0ZTQ3NTRkNkxVLCAweGEwNDkwYzEyTFUsIDB4ZmE4OGZmOTVMVSwgMHgzMTU1YmNkN0xVLCAweDZiOTQ0ZjUwTFUsIDB4ODU5YTE3OTRMVSwgMHhkZjViZTQxM0xVLCAKKzB4YWY4ZDI1ZGJMVSwgMHhmNTRjZDY1Y0xVLCAweDFiNDI4ZTk4TFUsIDB4NDE4MzdkMWZMVSwgMHg4YTVlM2U1ZExVLCAweGQwOWZjZGRhTFUsIDB4M2U5MTk1MWVMVSwgMHg2NDUwNjY5OUxVLAorMHhlNTY2MTM5YUxVLCAweGJmYTdlMDFkTFUsIDB4NTFhOWI4ZDlMVSwgMHgwYjY4NGI1ZUxVLCAweGMwYjUwODFjTFUsIDB4OWE3NGZiOWJMVSwgMHg3NDdhYTM1ZkxVLCAweDJlYmI1MGQ4TFUsIAorMHgzYjE2NDk1OUxVLCAweDYxZDdiYWRlTFUsIDB4OGZkOWUyMWFMVSwgMHhkNTE4MTE5ZExVLCAweDFlYzU1MmRmTFUsIDB4NDQwNGExNThMVSwgMHhhYTBhZjk5Y0xVLCAweGYwY2IwYTFiTFUsIAorMHg3MWZkN2YxOExVLCAweDJiM2M4YzlmTFUsIDB4YzUzMmQ0NWJMVSwgMHg5ZmYzMjdkY0xVLCAweDU0MmU2NDllTFUsIDB4MGVlZjk3MTlMVSwgMHhlMGUxY2ZkZExVLCAweGJhMjAzYzVhTFUsIAorMHhkOWExYjc2OUxVLCAweDgzNjA0NGVlTFUsIDB4NmQ2ZTFjMmFMVSwgMHgzN2FmZWZhZExVLCAweGZjNzJhY2VmTFUsIDB4YTZiMzVmNjhMVSwgMHg0OGJkMDdhY0xVLCAweDEyN2NmNDJiTFUsIAorMHg5MzRhODEyOExVLCAweGM5OGI3MmFmTFUsIDB4Mjc4NTJhNmJMVSwgMHg3ZDQ0ZDllY0xVLCAweGI2OTk5YWFlTFUsIDB4ZWM1ODY5MjlMVSwgMHgwMjU2MzFlZExVLCAweDU4OTdjMjZhTFUsIAorMHg0ZDNhZGJlYkxVLCAweDE3ZmIyODZjTFUsIDB4ZjlmNTcwYThMVSwgMHhhMzM0ODMyZkxVLCAweDY4ZTljMDZkTFUsIDB4MzIyODMzZWFMVSwgMHhkYzI2NmIyZUxVLCAweDg2ZTc5OGE5TFUsIAorMHgwN2QxZWRhYUxVLCAweDVkMTAxZTJkTFUsIDB4YjMxZTQ2ZTlMVSwgMHhlOWRmYjU2ZUxVLCAweDIyMDJmNjJjTFUsIDB4NzhjMzA1YWJMVSwgMHg5NmNkNWQ2ZkxVLCAweGNjMGNhZWU4TFUsIAorMHhiY2RhNmYyMExVLCAweGU2MWI5Y2E3TFUsIDB4MDgxNWM0NjNMVSwgMHg1MmQ0MzdlNExVLCAweDk5MDk3NGE2TFUsIDB4YzNjODg3MjFMVSwgMHgyZGM2ZGZlNUxVLCAweDc3MDcyYzYyTFUsIAorMHhmNjMxNTk2MUxVLCAweGFjZjBhYWU2TFUsIDB4NDJmZWYyMjJMVSwgMHgxODNmMDFhNUxVLCAweGQzZTI0MmU3TFUsIDB4ODkyM2IxNjBMVSwgMHg2NzJkZTlhNExVLCAweDNkZWMxYTIzTFUsIAorMHgyODQxMDNhMkxVLCAweDcyODBmMDI1TFUsIDB4OWM4ZWE4ZTFMVSwgMHhjNjRmNWI2NkxVLCAweDBkOTIxODI0TFUsIDB4NTc1M2ViYTNMVSwgMHhiOTVkYjM2N0xVLCAweGUzOWM0MGUwTFUsIAorMHg2MmFhMzVlM0xVLCAweDM4NmJjNjY0TFUsIDB4ZDY2NTllYTBMVSwgMHg4Y2E0NmQyN0xVLCAweDQ3NzkyZTY1TFUsIDB4MWRiOGRkZTJMVSwgMHhmM2I2ODUyNkxVLCAweGE5Nzc3NmExTFUsIAorMHgxMzU3NGFmYkxVLCAweDQ5OTZiOTdjTFUsIDB4YTc5OGUxYjhMVSwgMHhmZDU5MTIzZkxVLCAweDM2ODQ1MTdkTFUsIDB4NmM0NWEyZmFMVSwgMHg4MjRiZmEzZUxVLCAweGQ4OGEwOWI5TFUsIAorMHg1OWJjN2NiYUxVLCAweDAzN2Q4ZjNkTFUsIDB4ZWQ3M2Q3ZjlMVSwgMHhiN2IyMjQ3ZUxVLCAweDdjNmY2NzNjTFUsIDB4MjZhZTk0YmJMVSwgMHhjOGEwY2M3ZkxVLCAweDkyNjEzZmY4TFUsIAorMHg4N2NjMjY3OUxVLCAweGRkMGRkNWZlTFUsIDB4MzMwMzhkM2FMVSwgMHg2OWMyN2ViZExVLCAweGEyMWYzZGZmTFUsIDB4ZjhkZWNlNzhMVSwgMHgxNmQwOTZiY0xVLCAweDRjMTE2NTNiTFUsIAorMHhjZDI3MTAzOExVLCAweDk3ZTZlM2JmTFUsIDB4NzllOGJiN2JMVSwgMHgyMzI5NDhmY0xVLCAweGU4ZjQwYmJlTFUsIDB4YjIzNWY4MzlMVSwgMHg1YzNiYTBmZExVLCAweDA2ZmE1MzdhTFUsIAorMHg3NjJjOTJiMkxVLCAweDJjZWQ2MTM1TFUsIDB4YzJlMzM5ZjFMVSwgMHg5ODIyY2E3NkxVLCAweDUzZmY4OTM0TFUsIDB4MDkzZTdhYjNMVSwgMHhlNzMwMjI3N0xVLCAweGJkZjFkMWYwTFUsIAorMHgzY2M3YTRmM0xVLCAweDY2MDY1Nzc0TFUsIDB4ODgwODBmYjBMVSwgMHhkMmM5ZmMzN0xVLCAweDE5MTRiZjc1TFUsIDB4NDNkNTRjZjJMVSwgMHhhZGRiMTQzNkxVLCAweGY3MWFlN2IxTFUsIAorMHhlMmI3ZmUzMExVLCAweGI4NzYwZGI3TFUsIDB4NTY3ODU1NzNMVSwgMHgwY2I5YTZmNExVLCAweGM3NjRlNWI2TFUsIDB4OWRhNTE2MzFMVSwgMHg3M2FiNGVmNUxVLCAweDI5NmFiZDcyTFUsIAorMHhhODVjYzg3MUxVLCAweGYyOWQzYmY2TFUsIDB4MWM5MzYzMzJMVSwgMHg0NjUyOTBiNUxVLCAweDhkOGZkM2Y3TFUsIDB4ZDc0ZTIwNzBMVSwgMHgzOTQwNzhiNExVLCAweDYzODE4YjMzTFUgfTsgCisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIHJzX3RhYjRbMjU2XSA9IHsKKzB4MDAwMDAwMDBMVSwgMHg1ODQ3MWU1YUxVLCAweGIwOGUzY2I0TFUsIDB4ZThjOTIyZWVMVSwgMHgyZDUxNzgyNUxVLCAweDc1MTY2NjdmTFUsIDB4OWRkZjQ0OTFMVSwgMHhjNTk4NWFjYkxVLCAKKzB4NWFhMmYwNGFMVSwgMHgwMmU1ZWUxMExVLCAweGVhMmNjY2ZlTFUsIDB4YjI2YmQyYTRMVSwgMHg3N2YzODg2ZkxVLCAweDJmYjQ5NjM1TFUsIDB4Yzc3ZGI0ZGJMVSwgMHg5ZjNhYWE4MUxVLCAKKzB4YjQwOWFkOTRMVSwgMHhlYzRlYjNjZUxVLCAweDA0ODc5MTIwTFUsIDB4NWNjMDhmN2FMVSwgMHg5OTU4ZDViMUxVLCAweGMxMWZjYmViTFUsIDB4MjlkNmU5MDVMVSwgMHg3MTkxZjc1ZkxVLCAKKzB4ZWVhYjVkZGVMVSwgMHhiNmVjNDM4NExVLCAweDVlMjU2MTZhTFUsIDB4MDY2MjdmMzBMVSwgMHhjM2ZhMjVmYkxVLCAweDliYmQzYmExTFUsIDB4NzM3NDE5NGZMVSwgMHgyYjMzMDcxNUxVLCAKKzB4MjUxMjE3NjVMVSwgMHg3ZDU1MDkzZkxVLCAweDk1OWMyYmQxTFUsIDB4Y2RkYjM1OGJMVSwgMHgwODQzNmY0MExVLCAweDUwMDQ3MTFhTFUsIDB4YjhjZDUzZjRMVSwgMHhlMDhhNGRhZUxVLCAKKzB4N2ZiMGU3MmZMVSwgMHgyN2Y3Zjk3NUxVLCAweGNmM2VkYjliTFUsIDB4OTc3OWM1YzFMVSwgMHg1MmUxOWYwYUxVLCAweDBhYTY4MTUwTFUsIDB4ZTI2ZmEzYmVMVSwgMHhiYTI4YmRlNExVLCAKKzB4OTExYmJhZjFMVSwgMHhjOTVjYTRhYkxVLCAweDIxOTU4NjQ1TFUsIDB4NzlkMjk4MWZMVSwgMHhiYzRhYzJkNExVLCAweGU0MGRkYzhlTFUsIDB4MGNjNGZlNjBMVSwgMHg1NDgzZTAzYUxVLCAKKzB4Y2JiOTRhYmJMVSwgMHg5M2ZlNTRlMUxVLCAweDdiMzc3NjBmTFUsIDB4MjM3MDY4NTVMVSwgMHhlNmU4MzI5ZUxVLCAweGJlYWYyY2M0TFUsIDB4NTY2NjBlMmFMVSwgMHgwZTIxMTA3MExVLCAKKzB4NGEyNDJlY2FMVSwgMHgxMjYzMzA5MExVLCAweGZhYWExMjdlTFUsIDB4YTJlZDBjMjRMVSwgMHg2Nzc1NTZlZkxVLCAweDNmMzI0OGI1TFUsIDB4ZDdmYjZhNWJMVSwgMHg4ZmJjNzQwMUxVLCAKKzB4MTA4NmRlODBMVSwgMHg0OGMxYzBkYUxVLCAweGEwMDhlMjM0TFUsIDB4Zjg0ZmZjNmVMVSwgMHgzZGQ3YTZhNUxVLCAweDY1OTBiOGZmTFUsIDB4OGQ1OTlhMTFMVSwgMHhkNTFlODQ0YkxVLCAKKzB4ZmUyZDgzNWVMVSwgMHhhNjZhOWQwNExVLCAweDRlYTNiZmVhTFUsIDB4MTZlNGExYjBMVSwgMHhkMzdjZmI3YkxVLCAweDhiM2JlNTIxTFUsIDB4NjNmMmM3Y2ZMVSwgMHgzYmI1ZDk5NUxVLCAKKzB4YTQ4ZjczMTRMVSwgMHhmY2M4NmQ0ZUxVLCAweDE0MDE0ZmEwTFUsIDB4NGM0NjUxZmFMVSwgMHg4OWRlMGIzMUxVLCAweGQxOTkxNTZiTFUsIDB4Mzk1MDM3ODVMVSwgMHg2MTE3MjlkZkxVLCAKKzB4NmYzNjM5YWZMVSwgMHgzNzcxMjdmNUxVLCAweGRmYjgwNTFiTFUsIDB4ODdmZjFiNDFMVSwgMHg0MjY3NDE4YUxVLCAweDFhMjA1ZmQwTFUsIDB4ZjJlOTdkM2VMVSwgMHhhYWFlNjM2NExVLCAKKzB4MzU5NGM5ZTVMVSwgMHg2ZGQzZDdiZkxVLCAweDg1MWFmNTUxTFUsIDB4ZGQ1ZGViMGJMVSwgMHgxOGM1YjFjMExVLCAweDQwODJhZjlhTFUsIDB4YTg0YjhkNzRMVSwgMHhmMDBjOTMyZUxVLCAKKzB4ZGIzZjk0M2JMVSwgMHg4Mzc4OGE2MUxVLCAweDZiYjFhODhmTFUsIDB4MzNmNmI2ZDVMVSwgMHhmNjZlZWMxZUxVLCAweGFlMjlmMjQ0TFUsIDB4NDZlMGQwYWFMVSwgMHgxZWE3Y2VmMExVLCAKKzB4ODE5ZDY0NzFMVSwgMHhkOWRhN2EyYkxVLCAweDMxMTM1OGM1TFUsIDB4Njk1NDQ2OWZMVSwgMHhhY2NjMWM1NExVLCAweGY0OGIwMjBlTFUsIDB4MWM0MjIwZTBMVSwgMHg0NDA1M2ViYUxVLCAKKzB4OTQ0ODVjZDlMVSwgMHhjYzBmNDI4M0xVLCAweDI0YzY2MDZkTFUsIDB4N2M4MTdlMzdMVSwgMHhiOTE5MjRmY0xVLCAweGUxNWUzYWE2TFUsIDB4MDk5NzE4NDhMVSwgMHg1MWQwMDYxMkxVLCAKKzB4Y2VlYWFjOTNMVSwgMHg5NmFkYjJjOUxVLCAweDdlNjQ5MDI3TFUsIDB4MjYyMzhlN2RMVSwgMHhlM2JiZDRiNkxVLCAweGJiZmNjYWVjTFUsIDB4NTMzNWU4MDJMVSwgMHgwYjcyZjY1OExVLCAKKzB4MjA0MWYxNGRMVSwgMHg3ODA2ZWYxN0xVLCAweDkwY2ZjZGY5TFUsIDB4Yzg4OGQzYTNMVSwgMHgwZDEwODk2OExVLCAweDU1NTc5NzMyTFUsIDB4YmQ5ZWI1ZGNMVSwgMHhlNWQ5YWI4NkxVLCAKKzB4N2FlMzAxMDdMVSwgMHgyMmE0MWY1ZExVLCAweGNhNmQzZGIzTFUsIDB4OTIyYTIzZTlMVSwgMHg1N2IyNzkyMkxVLCAweDBmZjU2Nzc4TFUsIDB4ZTczYzQ1OTZMVSwgMHhiZjdiNWJjY0xVLCAKKzB4YjE1YTRiYmNMVSwgMHhlOTFkNTVlNkxVLCAweDAxZDQ3NzA4TFUsIDB4NTk5MzY5NTJMVSwgMHg5YzBiMzM5OUxVLCAweGM0NGMyZGMzTFUsIDB4MmM4NTBmMmRMVSwgMHg3NGMyMTE3N0xVLCAKKzB4ZWJmOGJiZjZMVSwgMHhiM2JmYTVhY0xVLCAweDViNzY4NzQyTFUsIDB4MDMzMTk5MThMVSwgMHhjNmE5YzNkM0xVLCAweDllZWVkZDg5TFUsIDB4NzYyN2ZmNjdMVSwgMHgyZTYwZTEzZExVLCAKKzB4MDU1M2U2MjhMVSwgMHg1ZDE0Zjg3MkxVLCAweGI1ZGRkYTljTFUsIDB4ZWQ5YWM0YzZMVSwgMHgyODAyOWUwZExVLCAweDcwNDU4MDU3TFUsIDB4OTg4Y2EyYjlMVSwgMHhjMGNiYmNlM0xVLCAKKzB4NWZmMTE2NjJMVSwgMHgwN2I2MDgzOExVLCAweGVmN2YyYWQ2TFUsIDB4YjczODM0OGNMVSwgMHg3MmEwNmU0N0xVLCAweDJhZTc3MDFkTFUsIDB4YzIyZTUyZjNMVSwgMHg5YTY5NGNhOUxVLCAKKzB4ZGU2YzcyMTNMVSwgMHg4NjJiNmM0OUxVLCAweDZlZTI0ZWE3TFUsIDB4MzZhNTUwZmRMVSwgMHhmMzNkMGEzNkxVLCAweGFiN2ExNDZjTFUsIDB4NDNiMzM2ODJMVSwgMHgxYmY0MjhkOExVLCAKKzB4ODRjZTgyNTlMVSwgMHhkYzg5OWMwM0xVLCAweDM0NDBiZWVkTFUsIDB4NmMwN2EwYjdMVSwgMHhhOTlmZmE3Y0xVLCAweGYxZDhlNDI2TFUsIDB4MTkxMWM2YzhMVSwgMHg0MTU2ZDg5MkxVLAorMHg2YTY1ZGY4N0xVLCAweDMyMjJjMWRkTFUsIDB4ZGFlYmUzMzNMVSwgMHg4MmFjZmQ2OUxVLCAweDQ3MzRhN2EyTFUsIDB4MWY3M2I5ZjhMVSwgMHhmN2JhOWIxNkxVLCAweGFmZmQ4NTRjTFUsIAorMHgzMGM3MmZjZExVLCAweDY4ODAzMTk3TFUsIDB4ODA0OTEzNzlMVSwgMHhkODBlMGQyM0xVLCAweDFkOTY1N2U4TFUsIDB4NDVkMTQ5YjJMVSwgMHhhZDE4NmI1Y0xVLCAweGY1NWY3NTA2TFUsIAorMHhmYjdlNjU3NkxVLCAweGEzMzk3YjJjTFUsIDB4NGJmMDU5YzJMVSwgMHgxM2I3NDc5OExVLCAweGQ2MmYxZDUzTFUsIDB4OGU2ODAzMDlMVSwgMHg2NmExMjFlN0xVLCAweDNlZTYzZmJkTFUsIAorMHhhMWRjOTUzY0xVLCAweGY5OWI4YjY2TFUsIDB4MTE1MmE5ODhMVSwgMHg0OTE1YjdkMkxVLCAweDhjOGRlZDE5TFUsIDB4ZDRjYWYzNDNMVSwgMHgzYzAzZDFhZExVLCAweDY0NDRjZmY3TFUsIAorMHg0Zjc3YzhlMkxVLCAweDE3MzBkNmI4TFUsIDB4ZmZmOWY0NTZMVSwgMHhhN2JlZWEwY0xVLCAweDYyMjZiMGM3TFUsIDB4M2E2MWFlOWRMVSwgMHhkMmE4OGM3M0xVLCAweDhhZWY5MjI5TFUsIAorMHgxNWQ1MzhhOExVLCAweDRkOTIyNmYyTFUsIDB4YTU1YjA0MWNMVSwgMHhmZDFjMWE0NkxVLCAweDM4ODQ0MDhkTFUsIDB4NjBjMzVlZDdMVSwgMHg4ODBhN2MzOUxVLCAweGQwNGQ2MjYzTFUgfTsKKworc3RhdGljIGNvbnN0IHVsb25nMzIgcnNfdGFiNVsyNTZdID0geworMHgwMDAwMDAwMExVLCAweGRiYWVjNjU4TFUsIDB4ZmIxMWMxYjBMVSwgMHgyMGJmMDdlOExVLCAweGJiMjJjZjJkTFUsIDB4NjA4YzA5NzVMVSwgMHg0MDMzMGU5ZExVLCAweDliOWRjOGM1TFUsIAorMHgzYjQ0ZDM1YUxVLCAweGUwZWExNTAyTFUsIDB4YzA1NTEyZWFMVSwgMHgxYmZiZDRiMkxVLCAweDgwNjYxYzc3TFUsIDB4NWJjOGRhMmZMVSwgMHg3Yjc3ZGRjN0xVLCAweGEwZDkxYjlmTFUsIAorMHg3Njg4ZWJiNExVLCAweGFkMjYyZGVjTFUsIDB4OGQ5OTJhMDRMVSwgMHg1NjM3ZWM1Y0xVLCAweGNkYWEyNDk5TFUsIDB4MTYwNGUyYzFMVSwgMHgzNmJiZTUyOUxVLCAweGVkMTUyMzcxTFUsIAorMHg0ZGNjMzhlZUxVLCAweDk2NjJmZWI2TFUsIDB4YjZkZGY5NWVMVSwgMHg2ZDczM2YwNkxVLCAweGY2ZWVmN2MzTFUsIDB4MmQ0MDMxOWJMVSwgMHgwZGZmMzY3M0xVLCAweGQ2NTFmMDJiTFUsIAorMHhlYzVkOWIyNUxVLCAweDM3ZjM1ZDdkTFUsIDB4MTc0YzVhOTVMVSwgMHhjY2UyOWNjZExVLCAweDU3N2Y1NDA4TFUsIDB4OGNkMTkyNTBMVSwgMHhhYzZlOTViOExVLCAweDc3YzA1M2UwTFUsIAorMHhkNzE5NDg3ZkxVLCAweDBjYjc4ZTI3TFUsIDB4MmMwODg5Y2ZMVSwgMHhmN2E2NGY5N0xVLCAweDZjM2I4NzUyTFUsIDB4Yjc5NTQxMGFMVSwgMHg5NzJhNDZlMkxVLCAweDRjODQ4MGJhTFUsIAorMHg5YWQ1NzA5MUxVLCAweDQxN2JiNmM5TFUsIDB4NjFjNGIxMjFMVSwgMHhiYTZhNzc3OUxVLCAweDIxZjdiZmJjTFUsIDB4ZmE1OTc5ZTRMVSwgMHhkYWU2N2UwY0xVLCAweDAxNDhiODU0TFUsIAorMHhhMTkxYTNjYkxVLCAweDdhM2Y2NTkzTFUsIDB4NWE4MDYyN2JMVSwgMHg4MTJlYTQyM0xVLCAweDFhYjM2Y2U2TFUsIDB4YzExZGFhYmVMVSwgMHhlMWEyYWQ1NkxVLCAweDNhMGM2YjBlTFUsIAorMHg5NWJhN2I0YUxVLCAweDRlMTRiZDEyTFUsIDB4NmVhYmJhZmFMVSwgMHhiNTA1N2NhMkxVLCAweDJlOThiNDY3TFUsIDB4ZjUzNjcyM2ZMVSwgMHhkNTg5NzVkN0xVLCAweDBlMjdiMzhmTFUsIAorMHhhZWZlYTgxMExVLCAweDc1NTA2ZTQ4TFUsIDB4NTVlZjY5YTBMVSwgMHg4ZTQxYWZmOExVLCAweDE1ZGM2NzNkTFUsIDB4Y2U3MmExNjVMVSwgMHhlZWNkYTY4ZExVLCAweDM1NjM2MGQ1TFUsIAorMHhlMzMyOTBmZUxVLCAweDM4OWM1NmE2TFUsIDB4MTgyMzUxNGVMVSwgMHhjMzhkOTcxNkxVLCAweDU4MTA1ZmQzTFUsIDB4ODNiZTk5OGJMVSwgMHhhMzAxOWU2M0xVLCAweDc4YWY1ODNiTFUsIAorMHhkODc2NDNhNExVLCAweDAzZDg4NWZjTFUsIDB4MjM2NzgyMTRMVSwgMHhmOGM5NDQ0Y0xVLCAweDYzNTQ4Yzg5TFUsIDB4YjhmYTRhZDFMVSwgMHg5ODQ1NGQzOUxVLCAweDQzZWI4YjYxTFUsIAorMHg3OWU3ZTA2ZkxVLCAweGEyNDkyNjM3TFUsIDB4ODJmNjIxZGZMVSwgMHg1OTU4ZTc4N0xVLCAweGMyYzUyZjQyTFUsIDB4MTk2YmU5MWFMVSwgMHgzOWQ0ZWVmMkxVLCAweGUyN2EyOGFhTFUsIAorMHg0MmEzMzMzNUxVLCAweDk5MGRmNTZkTFUsIDB4YjliMmYyODVMVSwgMHg2MjFjMzRkZExVLCAweGY5ODFmYzE4TFUsIDB4MjIyZjNhNDBMVSwgMHgwMjkwM2RhOExVLCAweGQ5M2VmYmYwTFUsIAorMHgwZjZmMGJkYkxVLCAweGQ0YzFjZDgzTFUsIDB4ZjQ3ZWNhNmJMVSwgMHgyZmQwMGMzM0xVLCAweGI0NGRjNGY2TFUsIDB4NmZlMzAyYWVMVSwgMHg0ZjVjMDU0NkxVLCAweDk0ZjJjMzFlTFUsIAorMHgzNDJiZDg4MUxVLCAweGVmODUxZWQ5TFUsIDB4Y2YzYTE5MzFMVSwgMHgxNDk0ZGY2OUxVLCAweDhmMDkxN2FjTFUsIDB4NTRhN2QxZjRMVSwgMHg3NDE4ZDYxY0xVLCAweGFmYjYxMDQ0TFUsIAorMHg2NzM5ZjY5NExVLCAweGJjOTczMGNjTFUsIDB4OWMyODM3MjRMVSwgMHg0Nzg2ZjE3Y0xVLCAweGRjMWIzOWI5TFUsIDB4MDdiNWZmZTFMVSwgMHgyNzBhZjgwOUxVLCAweGZjYTQzZTUxTFUsIAorMHg1YzdkMjVjZUxVLCAweDg3ZDNlMzk2TFUsIDB4YTc2Y2U0N2VMVSwgMHg3Y2MyMjIyNkxVLCAweGU3NWZlYWUzTFUsIDB4M2NmMTJjYmJMVSwgMHgxYzRlMmI1M0xVLCAweGM3ZTBlZDBiTFUsIAorMHgxMWIxMWQyMExVLCAweGNhMWZkYjc4TFUsIDB4ZWFhMGRjOTBMVSwgMHgzMTBlMWFjOExVLCAweGFhOTNkMjBkTFUsIDB4NzEzZDE0NTVMVSwgMHg1MTgyMTNiZExVLCAweDhhMmNkNWU1TFUsIAorMHgyYWY1Y2U3YUxVLCAweGYxNWIwODIyTFUsIDB4ZDFlNDBmY2FMVSwgMHgwYTRhYzk5MkxVLCAweDkxZDcwMTU3TFUsIDB4NGE3OWM3MGZMVSwgMHg2YWM2YzBlN0xVLCAweGIxNjgwNmJmTFUsIAorMHg4YjY0NmRiMUxVLCAweDUwY2FhYmU5TFUsIDB4NzA3NWFjMDFMVSwgMHhhYmRiNmE1OUxVLCAweDMwNDZhMjljTFUsIDB4ZWJlODY0YzRMVSwgMHhjYjU3NjMyY0xVLCAweDEwZjlhNTc0TFUsIAorMHhiMDIwYmVlYkxVLCAweDZiOGU3OGIzTFUsIDB4NGIzMTdmNWJMVSwgMHg5MDlmYjkwM0xVLCAweDBiMDI3MWM2TFUsIDB4ZDBhY2I3OWVMVSwgMHhmMDEzYjA3NkxVLCAweDJiYmQ3NjJlTFUsIAorMHhmZGVjODYwNUxVLCAweDI2NDI0MDVkTFUsIDB4MDZmZDQ3YjVMVSwgMHhkZDUzODFlZExVLCAweDQ2Y2U0OTI4TFUsIDB4OWQ2MDhmNzBMVSwgMHhiZGRmODg5OExVLCAweDY2NzE0ZWMwTFUsIAorMHhjNmE4NTU1ZkxVLCAweDFkMDY5MzA3TFUsIDB4M2RiOTk0ZWZMVSwgMHhlNjE3NTJiN0xVLCAweDdkOGE5YTcyTFUsIDB4YTYyNDVjMmFMVSwgMHg4NjliNWJjMkxVLCAweDVkMzU5ZDlhTFUsIAorMHhmMjgzOGRkZUxVLCAweDI5MmQ0Yjg2TFUsIDB4MDk5MjRjNmVMVSwgMHhkMjNjOGEzNkxVLCAweDQ5YTE0MmYzTFUsIDB4OTIwZjg0YWJMVSwgMHhiMmIwODM0M0xVLCAweDY5MWU0NTFiTFUsIAorMHhjOWM3NWU4NExVLCAweDEyNjk5OGRjTFUsIDB4MzJkNjlmMzRMVSwgMHhlOTc4NTk2Y0xVLCAweDcyZTU5MWE5TFUsIDB4YTk0YjU3ZjFMVSwgMHg4OWY0NTAxOUxVLCAweDUyNWE5NjQxTFUsIAorMHg4NDBiNjY2YUxVLCAweDVmYTVhMDMyTFUsIDB4N2YxYWE3ZGFMVSwgMHhhNGI0NjE4MkxVLCAweDNmMjlhOTQ3TFUsIDB4ZTQ4NzZmMWZMVSwgMHhjNDM4NjhmN0xVLCAweDFmOTZhZWFmTFUsIAorMHhiZjRmYjUzMExVLCAweDY0ZTE3MzY4TFUsIDB4NDQ1ZTc0ODBMVSwgMHg5ZmYwYjJkOExVLCAweDA0NmQ3YTFkTFUsIDB4ZGZjM2JjNDVMVSwgMHhmZjdjYmJhZExVLCAweDI0ZDI3ZGY1TFUsIAorMHgxZWRlMTZmYkxVLCAweGM1NzBkMGEzTFUsIDB4ZTVjZmQ3NGJMVSwgMHgzZTYxMTExM0xVLCAweGE1ZmNkOWQ2TFUsIDB4N2U1MjFmOGVMVSwgMHg1ZWVkMTg2NkxVLCAweDg1NDNkZTNlTFUsIAorMHgyNTlhYzVhMUxVLCAweGZlMzQwM2Y5TFUsIDB4ZGU4YjA0MTFMVSwgMHgwNTI1YzI0OUxVLCAweDllYjgwYThjTFUsIDB4NDUxNmNjZDRMVSwgMHg2NWE5Y2IzY0xVLCAweGJlMDcwZDY0TFUsIAorMHg2ODU2ZmQ0ZkxVLCAweGIzZjgzYjE3TFUsIDB4OTM0NzNjZmZMVSwgMHg0OGU5ZmFhN0xVLCAweGQzNzQzMjYyTFUsIDB4MDhkYWY0M2FMVSwgMHgyODY1ZjNkMkxVLCAweGYzY2IzNThhTFUsIAorMHg1MzEyMmUxNUxVLCAweDg4YmNlODRkTFUsIDB4YTgwM2VmYTVMVSwgMHg3M2FkMjlmZExVLCAweGU4MzBlMTM4TFUsIDB4MzM5ZTI3NjBMVSwgMHgxMzIxMjA4OExVLCAweGM4OGZlNmQwTFUgfTsgCisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIHJzX3RhYjZbMjU2XSA9IHsKKzB4MDAwMDAwMDBMVSwgMHg5ZTNkNjhkYkxVLCAweDcxN2FkMGZiTFUsIDB4ZWY0N2I4MjBMVSwgMHhlMmY0ZWRiYkxVLCAweDdjYzk4NTYwTFUsIDB4OTM4ZTNkNDBMVSwgMHgwZGIzNTU5YkxVLCAKKzB4ODlhNTk3M2JMVSwgMHgxNzk4ZmZlMExVLCAweGY4ZGY0N2MwTFUsIDB4NjZlMjJmMWJMVSwgMHg2YjUxN2E4MExVLCAweGY1NmMxMjViTFUsIDB4MWEyYmFhN2JMVSwgMHg4NDE2YzJhMExVLCAKKzB4NWYwNzYzNzZMVSwgMHhjMTNhMGJhZExVLCAweDJlN2RiMzhkTFUsIDB4YjA0MGRiNTZMVSwgMHhiZGYzOGVjZExVLCAweDIzY2VlNjE2TFUsIDB4Y2M4OTVlMzZMVSwgMHg1MmI0MzZlZExVLCAKKzB4ZDZhMmY0NGRMVSwgMHg0ODlmOWM5NkxVLCAweGE3ZDgyNGI2TFUsIDB4MzllNTRjNmRMVSwgMHgzNDU2MTlmNkxVLCAweGFhNmI3MTJkTFUsIDB4NDUyY2M5MGRMVSwgMHhkYjExYTFkNkxVLCAKKzB4YmUwZWM2ZWNMVSwgMHgyMDMzYWUzN0xVLCAweGNmNzQxNjE3TFUsIDB4NTE0OTdlY2NMVSwgMHg1Y2ZhMmI1N0xVLCAweGMyYzc0MzhjTFUsIDB4MmQ4MGZiYWNMVSwgMHhiM2JkOTM3N0xVLCAKKzB4MzdhYjUxZDdMVSwgMHhhOTk2MzkwY0xVLCAweDQ2ZDE4MTJjTFUsIDB4ZDhlY2U5ZjdMVSwgMHhkNTVmYmM2Y0xVLCAweDRiNjJkNGI3TFUsIDB4YTQyNTZjOTdMVSwgMHgzYTE4MDQ0Y0xVLCAKKzB4ZTEwOWE1OWFMVSwgMHg3ZjM0Y2Q0MUxVLCAweDkwNzM3NTYxTFUsIDB4MGU0ZTFkYmFMVSwgMHgwM2ZkNDgyMUxVLCAweDlkYzAyMGZhTFUsIDB4NzI4Nzk4ZGFMVSwgMHhlY2JhZjAwMUxVLCAKKzB4NjhhYzMyYTFMVSwgMHhmNjkxNWE3YUxVLCAweDE5ZDZlMjVhTFUsIDB4ODdlYjhhODFMVSwgMHg4YTU4ZGYxYUxVLCAweDE0NjViN2MxTFUsIDB4ZmIyMjBmZTFMVSwgMHg2NTFmNjczYUxVLCAKKzB4MzExY2MxOTVMVSwgMHhhZjIxYTk0ZUxVLCAweDQwNjYxMTZlTFUsIDB4ZGU1Yjc5YjVMVSwgMHhkM2U4MmMyZUxVLCAweDRkZDU0NGY1TFUsIDB4YTI5MmZjZDVMVSwgMHgzY2FmOTQwZUxVLCAKKzB4YjhiOTU2YWVMVSwgMHgyNjg0M2U3NUxVLCAweGM5YzM4NjU1TFUsIDB4NTdmZWVlOGVMVSwgMHg1YTRkYmIxNUxVLCAweGM0NzBkM2NlTFUsIDB4MmIzNzZiZWVMVSwgMHhiNTBhMDMzNUxVLCAKKzB4NmUxYmEyZTNMVSwgMHhmMDI2Y2EzOExVLCAweDFmNjE3MjE4TFUsIDB4ODE1YzFhYzNMVSwgMHg4Y2VmNGY1OExVLCAweDEyZDIyNzgzTFUsIDB4ZmQ5NTlmYTNMVSwgMHg2M2E4Zjc3OExVLCAKKzB4ZTdiZTM1ZDhMVSwgMHg3OTgzNWQwM0xVLCAweDk2YzRlNTIzTFUsIDB4MDhmOThkZjhMVSwgMHgwNTRhZDg2M0xVLCAweDliNzdiMGI4TFUsIDB4NzQzMDA4OThMVSwgMHhlYTBkNjA0M0xVLCAKKzB4OGYxMjA3NzlMVSwgMHgxMTJmNmZhMkxVLCAweGZlNjhkNzgyTFUsIDB4NjA1NWJmNTlMVSwgMHg2ZGU2ZWFjMkxVLCAweGYzZGI4MjE5TFUsIDB4MWM5YzNhMzlMVSwgMHg4MmExNTJlMkxVLCAKKzB4MDZiNzkwNDJMVSwgMHg5ODhhZjg5OUxVLCAweDc3Y2Q0MGI5TFUsIDB4ZTlmMDI4NjJMVSwgMHhlNDQzN2RmOUxVLCAweDdhN2UxNTIyTFUsIDB4OTUzOWFkMDJMVSwgMHgwYjA0YzVkOUxVLAorMHhkMDE1NjQwZkxVLCAweDRlMjgwY2Q0TFUsIDB4YTE2ZmI0ZjRMVSwgMHgzZjUyZGMyZkxVLCAweDMyZTE4OWI0TFUsIDB4YWNkY2UxNmZMVSwgMHg0MzliNTk0ZkxVLCAweGRkYTYzMTk0TFUsIAorMHg1OWIwZjMzNExVLCAweGM3OGQ5YmVmTFUsIDB4MjhjYTIzY2ZMVSwgMHhiNmY3NGIxNExVLCAweGJiNDQxZThmTFUsIDB4MjU3OTc2NTRMVSwgMHhjYTNlY2U3NExVLCAweDU0MDNhNmFmTFUsIAorMHg2MjM4Y2Y2N0xVLCAweGZjMDVhN2JjTFUsIDB4MTM0MjFmOWNMVSwgMHg4ZDdmNzc0N0xVLCAweDgwY2MyMmRjTFUsIDB4MWVmMTRhMDdMVSwgMHhmMWI2ZjIyN0xVLCAweDZmOGI5YWZjTFUsIAorMHhlYjlkNTg1Y0xVLCAweDc1YTAzMDg3TFUsIDB4OWFlNzg4YTdMVSwgMHgwNGRhZTA3Y0xVLCAweDA5NjliNWU3TFUsIDB4OTc1NGRkM2NMVSwgMHg3ODEzNjUxY0xVLCAweGU2MmUwZGM3TFUsIAorMHgzZDNmYWMxMUxVLCAweGEzMDJjNGNhTFUsIDB4NGM0NTdjZWFMVSwgMHhkMjc4MTQzMUxVLCAweGRmY2I0MWFhTFUsIDB4NDFmNjI5NzFMVSwgMHhhZWIxOTE1MUxVLCAweDMwOGNmOThhTFUsIAorMHhiNDlhM2IyYUxVLCAweDJhYTc1M2YxTFUsIDB4YzVlMGViZDFMVSwgMHg1YmRkODMwYUxVLCAweDU2NmVkNjkxTFUsIDB4Yzg1M2JlNGFMVSwgMHgyNzE0MDY2YUxVLCAweGI5Mjk2ZWIxTFUsCisweGRjMzYwOThiTFUsIDB4NDIwYjYxNTBMVSwgMHhhZDRjZDk3MExVLCAweDMzNzFiMWFiTFUsIDB4M2VjMmU0MzBMVSwgMHhhMGZmOGNlYkxVLCAweDRmYjgzNGNiTFUsIDB4ZDE4NTVjMTBMVSwgCisweDU1OTM5ZWIwTFUsIDB4Y2JhZWY2NmJMVSwgMHgyNGU5NGU0YkxVLCAweGJhZDQyNjkwTFUsIDB4Yjc2NzczMGJMVSwgMHgyOTVhMWJkMExVLCAweGM2MWRhM2YwTFUsIDB4NTgyMGNiMmJMVSwgCisweDgzMzE2YWZkTFUsIDB4MWQwYzAyMjZMVSwgMHhmMjRiYmEwNkxVLCAweDZjNzZkMmRkTFUsIDB4NjFjNTg3NDZMVSwgMHhmZmY4ZWY5ZExVLCAweDEwYmY1N2JkTFUsIDB4OGU4MjNmNjZMVSwgCisweDBhOTRmZGM2TFUsIDB4OTRhOTk1MWRMVSwgMHg3YmVlMmQzZExVLCAweGU1ZDM0NWU2TFUsIDB4ZTg2MDEwN2RMVSwgMHg3NjVkNzhhNkxVLCAweDk5MWFjMDg2TFUsIDB4MDcyN2E4NWRMVSwgCisweDUzMjQwZWYyTFUsIDB4Y2QxOTY2MjlMVSwgMHgyMjVlZGUwOUxVLCAweGJjNjNiNmQyTFUsIDB4YjFkMGUzNDlMVSwgMHgyZmVkOGI5MkxVLCAweGMwYWEzM2IyTFUsIDB4NWU5NzViNjlMVSwgCisweGRhODE5OWM5TFUsIDB4NDRiY2YxMTJMVSwgMHhhYmZiNDkzMkxVLCAweDM1YzYyMWU5TFUsIDB4Mzg3NTc0NzJMVSwgMHhhNjQ4MWNhOUxVLCAweDQ5MGZhNDg5TFUsIDB4ZDczMmNjNTJMVSwgCisweDBjMjM2ZDg0TFUsIDB4OTIxZTA1NWZMVSwgMHg3ZDU5YmQ3ZkxVLCAweGUzNjRkNWE0TFUsIDB4ZWVkNzgwM2ZMVSwgMHg3MGVhZThlNExVLCAweDlmYWQ1MGM0TFUsIDB4MDE5MDM4MWZMVSwgCisweDg1ODZmYWJmTFUsIDB4MWJiYjkyNjRMVSwgMHhmNGZjMmE0NExVLCAweDZhYzE0MjlmTFUsIDB4Njc3MjE3MDRMVSwgMHhmOTRmN2ZkZkxVLCAweDE2MDhjN2ZmTFUsIDB4ODgzNWFmMjRMVSwgCisweGVkMmFjODFlTFUsIDB4NzMxN2EwYzVMVSwgMHg5YzUwMThlNUxVLCAweDAyNmQ3MDNlTFUsIDB4MGZkZTI1YTVMVSwgMHg5MWUzNGQ3ZUxVLCAweDdlYTRmNTVlTFUsIDB4ZTA5OTlkODVMVSwgCisweDY0OGY1ZjI1TFUsIDB4ZmFiMjM3ZmVMVSwgMHgxNWY1OGZkZUxVLCAweDhiYzhlNzA1TFUsIDB4ODY3YmIyOWVMVSwgMHgxODQ2ZGE0NUxVLCAweGY3MDE2MjY1TFUsIDB4NjkzYzBhYmVMVSwgCisweGIyMmRhYjY4TFUsIDB4MmMxMGMzYjNMVSwgMHhjMzU3N2I5M0xVLCAweDVkNmExMzQ4TFUsIDB4NTBkOTQ2ZDNMVSwgMHhjZWU0MmUwOExVLCAweDIxYTM5NjI4TFUsIDB4YmY5ZWZlZjNMVSwgCisweDNiODgzYzUzTFUsIDB4YTViNTU0ODhMVSwgMHg0YWYyZWNhOExVLCAweGQ0Y2Y4NDczTFUsIDB4ZDk3Y2QxZThMVSwgMHg0NzQxYjkzM0xVLCAweGE4MDYwMTEzTFUsIDB4MzYzYjY5YzhMVSB9OyAKKworc3RhdGljIGNvbnN0IHVsb25nMzIgcnNfdGFiN1syNTZdID0geworMHgwMDAwMDAwMExVLCAweDAzMTllNTllTFUsIDB4MDYzMjg3NzFMVSwgMHgwNTJiNjJlZkxVLCAweDBjNjQ0M2UyTFUsIDB4MGY3ZGE2N2NMVSwgMHgwYTU2YzQ5M0xVLCAweDA5NGYyMTBkTFUsIAorMHgxOGM4ODY4OUxVLCAweDFiZDE2MzE3TFUsIDB4MWVmYTAxZjhMVSwgMHgxZGUzZTQ2NkxVLCAweDE0YWNjNTZiTFUsIDB4MTdiNTIwZjVMVSwgMHgxMjllNDIxYUxVLCAweDExODdhNzg0TFUsIAorMHgzMGRkNDE1ZkxVLCAweDMzYzRhNGMxTFUsIDB4MzZlZmM2MmVMVSwgMHgzNWY2MjNiMExVLCAweDNjYjkwMmJkTFUsIDB4M2ZhMGU3MjNMVSwgMHgzYThiODVjY0xVLCAweDM5OTI2MDUyTFUsIAorMHgyODE1YzdkNkxVLCAweDJiMGMyMjQ4TFUsIDB4MmUyNzQwYTdMVSwgMHgyZDNlYTUzOUxVLCAweDI0NzE4NDM0TFUsIDB4Mjc2ODYxYWFMVSwgMHgyMjQzMDM0NUxVLCAweDIxNWFlNmRiTFUsIAorMHg2MGY3ODJiZUxVLCAweDYzZWU2NzIwTFUsIDB4NjZjNTA1Y2ZMVSwgMHg2NWRjZTA1MUxVLCAweDZjOTNjMTVjTFUsIDB4NmY4YTI0YzJMVSwgMHg2YWExNDYyZExVLCAweDY5YjhhM2IzTFUsIAorMHg3ODNmMDQzN0xVLCAweDdiMjZlMWE5TFUsIDB4N2UwZDgzNDZMVSwgMHg3ZDE0NjZkOExVLCAweDc0NWI0N2Q1TFUsIDB4Nzc0MmEyNGJMVSwgMHg3MjY5YzBhNExVLCAweDcxNzAyNTNhTFUsIAorMHg1MDJhYzNlMUxVLCAweDUzMzMyNjdmTFUsIDB4NTYxODQ0OTBMVSwgMHg1NTAxYTEwZUxVLCAweDVjNGU4MDAzTFUsIDB4NWY1NzY1OWRMVSwgMHg1YTdjMDc3MkxVLCAweDU5NjVlMmVjTFUsIAorMHg0OGUyNDU2OExVLCAweDRiZmJhMGY2TFUsIDB4NGVkMGMyMTlMVSwgMHg0ZGM5Mjc4N0xVLCAweDQ0ODYwNjhhTFUsIDB4NDc5ZmUzMTRMVSwgMHg0MmI0ODFmYkxVLCAweDQxYWQ2NDY1TFUsIAorMHhjMGEzNDkzMUxVLCAweGMzYmFhY2FmTFUsIDB4YzY5MWNlNDBMVSwgMHhjNTg4MmJkZUxVLCAweGNjYzcwYWQzTFUsIDB4Y2ZkZWVmNGRMVSwgMHhjYWY1OGRhMkxVLCAweGM5ZWM2ODNjTFUsIAorMHhkODZiY2ZiOExVLCAweGRiNzIyYTI2TFUsIDB4ZGU1OTQ4YzlMVSwgMHhkZDQwYWQ1N0xVLCAweGQ0MGY4YzVhTFUsIDB4ZDcxNjY5YzRMVSwgMHhkMjNkMGIyYkxVLCAweGQxMjRlZWI1TFUsIAorMHhmMDdlMDg2ZUxVLCAweGYzNjdlZGYwTFUsIDB4ZjY0YzhmMWZMVSwgMHhmNTU1NmE4MUxVLCAweGZjMWE0YjhjTFUsIDB4ZmYwM2FlMTJMVSwgMHhmYTI4Y2NmZExVLCAweGY5MzEyOTYzTFUsIAorMHhlOGI2OGVlN0xVLCAweGViYWY2Yjc5TFUsIDB4ZWU4NDA5OTZMVSwgMHhlZDlkZWMwOExVLCAweGU0ZDJjZDA1TFUsIDB4ZTdjYjI4OWJMVSwgMHhlMmUwNGE3NExVLCAweGUxZjlhZmVhTFUsIAorMHhhMDU0Y2I4ZkxVLCAweGEzNGQyZTExTFUsIDB4YTY2NjRjZmVMVSwgMHhhNTdmYTk2MExVLCAweGFjMzA4ODZkTFUsIDB4YWYyOTZkZjNMVSwgMHhhYTAyMGYxY0xVLCAweGE5MWJlYTgyTFUsIAorMHhiODljNGQwNkxVLCAweGJiODVhODk4TFUsIDB4YmVhZWNhNzdMVSwgMHhiZGI3MmZlOUxVLCAweGI0ZjgwZWU0TFUsIDB4YjdlMWViN2FMVSwgMHhiMmNhODk5NUxVLCAweGIxZDM2YzBiTFUsIAorMHg5MDg5OGFkMExVLCAweDkzOTA2ZjRlTFUsIDB4OTZiYjBkYTFMVSwgMHg5NWEyZTgzZkxVLCAweDljZWRjOTMyTFUsIDB4OWZmNDJjYWNMVSwgMHg5YWRmNGU0M0xVLCAweDk5YzZhYmRkTFUsIAorMHg4ODQxMGM1OUxVLCAweDhiNThlOWM3TFUsIDB4OGU3MzhiMjhMVSwgMHg4ZDZhNmViNkxVLCAweDg0MjU0ZmJiTFUsIDB4ODczY2FhMjVMVSwgMHg4MjE3YzhjYUxVLCAweDgxMGUyZDU0TFUsIAorMHhjZDBiOTI2MkxVLCAweGNlMTI3N2ZjTFUsIDB4Y2IzOTE1MTNMVSwgMHhjODIwZjA4ZExVLCAweGMxNmZkMTgwTFUsIDB4YzI3NjM0MWVMVSwgMHhjNzVkNTZmMUxVLCAweGM0NDRiMzZmTFUsIAorMHhkNWMzMTRlYkxVLCAweGQ2ZGFmMTc1TFUsIDB4ZDNmMTkzOWFMVSwgMHhkMGU4NzYwNExVLCAweGQ5YTc1NzA5TFUsIDB4ZGFiZWIyOTdMVSwgMHhkZjk1ZDA3OExVLCAweGRjOGMzNWU2TFUsIAorMHhmZGQ2ZDMzZExVLCAweGZlY2YzNmEzTFUsIDB4ZmJlNDU0NGNMVSwgMHhmOGZkYjFkMkxVLCAweGYxYjI5MGRmTFUsIDB4ZjJhYjc1NDFMVSwgMHhmNzgwMTdhZUxVLCAweGY0OTlmMjMwTFUsIAorMHhlNTFlNTViNExVLCAweGU2MDdiMDJhTFUsIDB4ZTMyY2QyYzVMVSwgMHhlMDM1Mzc1YkxVLCAweGU5N2ExNjU2TFUsIDB4ZWE2M2YzYzhMVSwgMHhlZjQ4OTEyN0xVLCAweGVjNTE3NGI5TFUsIAorMHhhZGZjMTBkY0xVLCAweGFlZTVmNTQyTFUsIDB4YWJjZTk3YWRMVSwgMHhhOGQ3NzIzM0xVLCAweGExOTg1MzNlTFUsIDB4YTI4MWI2YTBMVSwgMHhhN2FhZDQ0ZkxVLCAweGE0YjMzMWQxTFUsIAorMHhiNTM0OTY1NUxVLCAweGI2MmQ3M2NiTFUsIDB4YjMwNjExMjRMVSwgMHhiMDFmZjRiYUxVLCAweGI5NTBkNWI3TFUsIDB4YmE0OTMwMjlMVSwgMHhiZjYyNTJjNkxVLCAweGJjN2JiNzU4TFUsIAorMHg5ZDIxNTE4M0xVLCAweDllMzhiNDFkTFUsIDB4OWIxM2Q2ZjJMVSwgMHg5ODBhMzM2Y0xVLCAweDkxNDUxMjYxTFUsIDB4OTI1Y2Y3ZmZMVSwgMHg5Nzc3OTUxMExVLCAweDk0NmU3MDhlTFUsIAorMHg4NWU5ZDcwYUxVLCAweDg2ZjAzMjk0TFUsIDB4ODNkYjUwN2JMVSwgMHg4MGMyYjVlNUxVLCAweDg5OGQ5NGU4TFUsIDB4OGE5NDcxNzZMVSwgMHg4ZmJmMTM5OUxVLCAweDhjYTZmNjA3TFUsIAorMHgwZGE4ZGI1M0xVLCAweDBlYjEzZWNkTFUsIDB4MGI5YTVjMjJMVSwgMHgwODgzYjliY0xVLCAweDAxY2M5OGIxTFUsIDB4MDJkNTdkMmZMVSwgMHgwN2ZlMWZjMExVLCAweDA0ZTdmYTVlTFUsIAorMHgxNTYwNWRkYUxVLCAweDE2NzliODQ0TFUsIDB4MTM1MmRhYWJMVSwgMHgxMDRiM2YzNUxVLCAweDE5MDQxZTM4TFUsIDB4MWExZGZiYTZMVSwgMHgxZjM2OTk0OUxVLCAweDFjMmY3Y2Q3TFUsIAorMHgzZDc1OWEwY0xVLCAweDNlNmM3ZjkyTFUsIDB4M2I0NzFkN2RMVSwgMHgzODVlZjhlM0xVLCAweDMxMTFkOWVlTFUsIDB4MzIwODNjNzBMVSwgMHgzNzIzNWU5ZkxVLCAweDM0M2FiYjAxTFUsIAorMHgyNWJkMWM4NUxVLCAweDI2YTRmOTFiTFUsIDB4MjM4ZjliZjRMVSwgMHgyMDk2N2U2YUxVLCAweDI5ZDk1ZjY3TFUsIDB4MmFjMGJhZjlMVSwgMHgyZmViZDgxNkxVLCAweDJjZjIzZDg4TFUsIAorMHg2ZDVmNTllZExVLCAweDZlNDZiYzczTFUsIDB4NmI2ZGRlOWNMVSwgMHg2ODc0M2IwMkxVLCAweDYxM2IxYTBmTFUsIDB4NjIyMmZmOTFMVSwgMHg2NzA5OWQ3ZUxVLCAweDY0MTA3OGUwTFUsIAorMHg3NTk3ZGY2NExVLCAweDc2OGUzYWZhTFUsIDB4NzNhNTU4MTVMVSwgMHg3MGJjYmQ4YkxVLCAweDc5ZjM5Yzg2TFUsIDB4N2FlYTc5MThMVSwgMHg3ZmMxMWJmN0xVLCAweDdjZDhmZTY5TFUsIAorMHg1ZDgyMThiMkxVLCAweDVlOWJmZDJjTFUsIDB4NWJiMDlmYzNMVSwgMHg1OGE5N2E1ZExVLCAweDUxZTY1YjUwTFUsIDB4NTJmZmJlY2VMVSwgMHg1N2Q0ZGMyMUxVLCAweDU0Y2QzOWJmTFUsIAorMHg0NTRhOWUzYkxVLCAweDQ2NTM3YmE1TFUsIDB4NDM3ODE5NGFMVSwgMHg0MDYxZmNkNExVLCAweDQ5MmVkZGQ5TFUsIDB4NGEzNzM4NDdMVSwgMHg0ZjFjNWFhOExVLCAweDRjMDViZjM2TFUgfTsKKworI2VuZGlmIC8qIFRXT0ZJU0hfQUxMX1RBQkxFUyAqLworCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMvdHdvZmlzaC90d29maXNoX3RhYi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMveHRlYS5jIGIvbGlidG9tY3J5cHQvc3JjL2NpcGhlcnMveHRlYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNzM0MDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy94dGVhLmMKQEAgLTAsMCArMSwyMTEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qKgorICBAZmlsZSB4dGVhLmMKKyAgSW1wbGVtZW50YXRpb24gb2YgWFRFQSwgVG9tIFN0IERlbmlzCisqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBYVEVBCisKK2NvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgeHRlYV9kZXNjID0KK3sKKyAgICAieHRlYSIsCisgICAgMSwKKyAgICAxNiwgMTYsIDgsIDMyLAorICAgICZ4dGVhX3NldHVwLAorICAgICZ4dGVhX2VjYl9lbmNyeXB0LAorICAgICZ4dGVhX2VjYl9kZWNyeXB0LAorICAgICZ4dGVhX3Rlc3QsCisgICAgJnh0ZWFfZG9uZSwKKyAgICAmeHRlYV9rZXlzaXplLAorICAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwKK307CisKK2ludCB4dGVhX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpCit7CisgICB1bnNpZ25lZCBsb25nIHgsIHN1bSwgS1s0XTsKKyAgIAorICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgIC8qIGNoZWNrIGFyZ3VtZW50cyAqLworICAgaWYgKGtleWxlbiAhPSAxNikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0KKworICAgaWYgKG51bV9yb3VuZHMgIT0gMCAmJiBudW1fcm91bmRzICE9IDMyKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9ST1VORFM7CisgICB9CisKKyAgIC8qIGxvYWQga2V5ICovCisgICBMT0FEMzJMKEtbMF0sIGtleSswKTsKKyAgIExPQUQzMkwoS1sxXSwga2V5KzQpOworICAgTE9BRDMyTChLWzJdLCBrZXkrOCk7CisgICBMT0FEMzJMKEtbM10sIGtleSsxMik7CisgICAKKyAgIGZvciAoeCA9IHN1bSA9IDA7IHggPCAzMjsgeCsrKSB7CisgICAgICAgc2tleS0+eHRlYS5BW3hdID0gKHN1bSArIEtbc3VtJjNdKSAmIDB4RkZGRkZGRkZVTDsKKyAgICAgICBzdW0gPSAoc3VtICsgMHg5RTM3NzlCOVVMKSAmIDB4RkZGRkZGRkZVTDsKKyAgICAgICBza2V5LT54dGVhLkJbeF0gPSAoc3VtICsgS1soc3VtPj4xMSkmM10pICYgMHhGRkZGRkZGRlVMOworICAgfQorICAgCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKCZLLCBzaXplb2YoSykpOworI2VuZGlmICAgCisgICAKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIEVuY3J5cHRzIGEgYmxvY2sgb2YgdGV4dCB3aXRoIFhURUEKKyAgQHBhcmFtIHB0IFRoZSBpbnB1dCBwbGFpbnRleHQgKDggYnl0ZXMpCisgIEBwYXJhbSBjdCBUaGUgb3V0cHV0IGNpcGhlcnRleHQgKDggYnl0ZXMpCisgIEBwYXJhbSBza2V5IFRoZSBrZXkgYXMgc2NoZWR1bGVkCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCB4dGVhX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeSwgejsKKyAgIGludCByOworCisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgIExPQUQzMkwoeSwgJnB0WzBdKTsKKyAgIExPQUQzMkwoeiwgJnB0WzRdKTsKKyAgIGZvciAociA9IDA7IHIgPCAzMjsgciArPSA0KSB7CisgICAgICAgeSA9ICh5ICsgKCgoKHo8PDQpXih6Pj41KSkgKyB6KSBeIHNrZXktPnh0ZWEuQVtyXSkpICYgMHhGRkZGRkZGRlVMOworICAgICAgIHogPSAoeiArICgoKCh5PDw0KV4oeT4+NSkpICsgeSkgXiBza2V5LT54dGVhLkJbcl0pKSAmIDB4RkZGRkZGRkZVTDsKKworICAgICAgIHkgPSAoeSArICgoKCh6PDw0KV4oej4+NSkpICsgeikgXiBza2V5LT54dGVhLkFbcisxXSkpICYgMHhGRkZGRkZGRlVMOworICAgICAgIHogPSAoeiArICgoKCh5PDw0KV4oeT4+NSkpICsgeSkgXiBza2V5LT54dGVhLkJbcisxXSkpICYgMHhGRkZGRkZGRlVMOworCisgICAgICAgeSA9ICh5ICsgKCgoKHo8PDQpXih6Pj41KSkgKyB6KSBeIHNrZXktPnh0ZWEuQVtyKzJdKSkgJiAweEZGRkZGRkZGVUw7CisgICAgICAgeiA9ICh6ICsgKCgoKHk8PDQpXih5Pj41KSkgKyB5KSBeIHNrZXktPnh0ZWEuQltyKzJdKSkgJiAweEZGRkZGRkZGVUw7CisKKyAgICAgICB5ID0gKHkgKyAoKCgoejw8NCleKHo+PjUpKSArIHopIF4gc2tleS0+eHRlYS5BW3IrM10pKSAmIDB4RkZGRkZGRkZVTDsKKyAgICAgICB6ID0gKHogKyAoKCgoeTw8NCleKHk+PjUpKSArIHkpIF4gc2tleS0+eHRlYS5CW3IrM10pKSAmIDB4RkZGRkZGRkZVTDsKKyAgIH0KKyAgIFNUT1JFMzJMKHksICZjdFswXSk7CisgICBTVE9SRTMyTCh6LCAmY3RbNF0pOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgRGVjcnlwdHMgYSBibG9jayBvZiB0ZXh0IHdpdGggWFRFQQorICBAcGFyYW0gY3QgVGhlIGlucHV0IGNpcGhlcnRleHQgKDggYnl0ZXMpCisgIEBwYXJhbSBwdCBUaGUgb3V0cHV0IHBsYWludGV4dCAoOCBieXRlcykKKyAgQHBhcmFtIHNrZXkgVGhlIGtleSBhcyBzY2hlZHVsZWQgCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCB4dGVhX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSkKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeSwgejsKKyAgIGludCByOworCisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHNrZXkgIT0gTlVMTCk7CisKKyAgIExPQUQzMkwoeSwgJmN0WzBdKTsKKyAgIExPQUQzMkwoeiwgJmN0WzRdKTsKKyAgIGZvciAociA9IDMxOyByID49IDA7IHIgLT0gNCkgeworICAgICAgIHogPSAoeiAtICgoKCh5PDw0KV4oeT4+NSkpICsgeSkgXiBza2V5LT54dGVhLkJbcl0pKSAmIDB4RkZGRkZGRkZVTDsKKyAgICAgICB5ID0gKHkgLSAoKCgoejw8NCleKHo+PjUpKSArIHopIF4gc2tleS0+eHRlYS5BW3JdKSkgJiAweEZGRkZGRkZGVUw7CisKKyAgICAgICB6ID0gKHogLSAoKCgoeTw8NCleKHk+PjUpKSArIHkpIF4gc2tleS0+eHRlYS5CW3ItMV0pKSAmIDB4RkZGRkZGRkZVTDsKKyAgICAgICB5ID0gKHkgLSAoKCgoejw8NCleKHo+PjUpKSArIHopIF4gc2tleS0+eHRlYS5BW3ItMV0pKSAmIDB4RkZGRkZGRkZVTDsKKworICAgICAgIHogPSAoeiAtICgoKCh5PDw0KV4oeT4+NSkpICsgeSkgXiBza2V5LT54dGVhLkJbci0yXSkpICYgMHhGRkZGRkZGRlVMOworICAgICAgIHkgPSAoeSAtICgoKCh6PDw0KV4oej4+NSkpICsgeikgXiBza2V5LT54dGVhLkFbci0yXSkpICYgMHhGRkZGRkZGRlVMOworCisgICAgICAgeiA9ICh6IC0gKCgoKHk8PDQpXih5Pj41KSkgKyB5KSBeIHNrZXktPnh0ZWEuQltyLTNdKSkgJiAweEZGRkZGRkZGVUw7CisgICAgICAgeSA9ICh5IC0gKCgoKHo8PDQpXih6Pj41KSkgKyB6KSBeIHNrZXktPnh0ZWEuQVtyLTNdKSkgJiAweEZGRkZGRkZGVUw7CisgICB9CisgICBTVE9SRTMyTCh5LCAmcHRbMF0pOworICAgU1RPUkUzMkwoeiwgJnB0WzRdKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIFBlcmZvcm1zIGEgc2VsZi10ZXN0IG9mIHRoZSBYVEVBIGJsb2NrIGNpcGhlcgorICBAcmV0dXJuIENSWVBUX09LIGlmIGZ1bmN0aW9uYWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3QgaGFzIGJlZW4gZGlzYWJsZWQKKyovCitpbnQgeHRlYV90ZXN0KHZvaWQpCit7CisgI2lmbmRlZiBMVENfVEVTVAorICAgIHJldHVybiBDUllQVF9OT1A7CisgI2Vsc2UgICAgCisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdID0gCisgICAgICB7IDB4NzgsIDB4NTYsIDB4MzQsIDB4MTIsIDB4ZjAsIDB4Y2QsIDB4Y2IsIDB4OWEsCisgICAgICAgIDB4NDgsIDB4MzcsIDB4MjYsIDB4MTUsIDB4YzAsIDB4YmYsIDB4YWUsIDB4OWQgfTsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHB0WzhdID0gCisgICAgICB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDggfTsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGN0WzhdID0gCisgICAgICB7IDB4NzUsIDB4ZDcsIDB4YzUsIDB4YmYsIDB4Y2YsIDB4NTgsIDB4YzksIDB4M2YgfTsKKyAgIHVuc2lnbmVkIGNoYXIgdG1wWzJdWzhdOworICAgc3ltbWV0cmljX2tleSBza2V5OworICAgaW50IGVyciwgeTsKKworICAgaWYgKChlcnIgPSB4dGVhX3NldHVwKGtleSwgMTYsIDAsICZza2V5KSkgIT0gQ1JZUFRfT0spICB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgeHRlYV9lY2JfZW5jcnlwdChwdCwgdG1wWzBdLCAmc2tleSk7CisgICB4dGVhX2VjYl9kZWNyeXB0KHRtcFswXSwgdG1wWzFdLCAmc2tleSk7CisKKyAgIGlmIChYTUVNQ01QKHRtcFswXSwgY3QsIDgpICE9IDAgfHwgWE1FTUNNUCh0bXBbMV0sIHB0LCA4KSAhPSAwKSB7IAorICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgIH0KKworICAgICAgLyogbm93IHNlZSBpZiB3ZSBjYW4gZW5jcnlwdCBhbGwgemVybyBieXRlcyAxMDAwIHRpbWVzLCBkZWNyeXB0IGFuZCBjb21lIGJhY2sgd2hlcmUgd2Ugc3RhcnRlZCAqLworICAgICAgZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgdG1wWzBdW3ldID0gMDsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwOyB5KyspIHh0ZWFfZWNiX2VuY3J5cHQodG1wWzBdLCB0bXBbMF0sICZza2V5KTsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwOyB5KyspIHh0ZWFfZWNiX2RlY3J5cHQodG1wWzBdLCB0bXBbMF0sICZza2V5KTsKKyAgICAgIGZvciAoeSA9IDA7IHkgPCA4OyB5KyspIGlmICh0bXBbMF1beV0gIT0gMCkgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKworICAgcmV0dXJuIENSWVBUX09LOworICNlbmRpZgorfQorCisvKiogVGVybWluYXRlIHRoZSBjb250ZXh0IAorICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkKKyovCit2b2lkIHh0ZWFfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KQoreworfQorCisvKioKKyAgR2V0cyBzdWl0YWJsZSBrZXkgc2l6ZQorICBAcGFyYW0ga2V5c2l6ZSBbaW4vb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSByZWNvbW1lbmRlZCBrZXkgKGluIGJ5dGVzKS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBzdG9yZSB0aGUgc3VpdGFibGUgc2l6ZSBiYWNrIGluIHRoaXMgdmFyaWFibGUuCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgdGhlIGlucHV0IGtleSBzaXplIGlzIGFjY2VwdGFibGUuCisqLworaW50IHh0ZWFfa2V5c2l6ZShpbnQgKmtleXNpemUpCit7CisgICBMVENfQVJHQ0hLKGtleXNpemUgIT0gTlVMTCk7CisgICBpZiAoKmtleXNpemUgPCAxNikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsgCisgICB9CisgICAqa2V5c2l6ZSA9IDE2OworICAgcmV0dXJuIENSWVBUX09LOworfQorCisKKyNlbmRpZgorCisKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvY2lwaGVycy94dGVhLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTIgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjM6MDE6MDYgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvY2NtL2NjbV9tZW1vcnkuYyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2NjbS9jY21fbWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVlZWUxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2NjbS9jY21fbWVtb3J5LmMKQEAgLTAsMCArMSwzNTEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGNjbV9tZW1vcnkuYworICBDQ00gc3VwcG9ydCwgcHJvY2VzcyBhIGJsb2NrIG9mIG1lbW9yeSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgQ0NNX01PREUKKworLyoqCisgICBDQ00gZW5jcnlwdC9kZWNyeXB0IGFuZCBwcm9kdWNlIGFuIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHBhcmFtIGNpcGhlciAgICAgVGhlIGluZGV4IG9mIHRoZSBjaXBoZXIgZGVzaXJlZAorICAgQHBhcmFtIGtleSAgICAgICAgVGhlIHNlY3JldCBrZXkgdG8gdXNlCisgICBAcGFyYW0ga2V5bGVuICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQga2V5IChvY3RldHMpCisgICBAcGFyYW0gdXNrZXkgICAgICBBIHByZXZpb3VzbHkgc2NoZWR1bGVkIGtleSBbb3B0aW9uYWwgY2FuIGJlIE5VTExdCisgICBAcGFyYW0gbm9uY2UgICAgICBUaGUgc2Vzc2lvbiBub25jZSBbdXNlIG9uY2VdCisgICBAcGFyYW0gbm9uY2VsZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBub25jZQorICAgQHBhcmFtIGhlYWRlciAgICAgVGhlIGhlYWRlciBmb3IgdGhlIHNlc3Npb24KKyAgIEBwYXJhbSBoZWFkZXJsZW4gIFRoZSBsZW5ndGggb2YgdGhlIGhlYWRlciAob2N0ZXRzKQorICAgQHBhcmFtIHB0ICAgICAgICAgW291dF0gVGhlIHBsYWludGV4dAorICAgQHBhcmFtIHB0bGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IChvY3RldHMpCisgICBAcGFyYW0gY3QgICAgICAgICBbb3V0XSBUaGUgY2lwaGVydGV4dAorICAgQHBhcmFtIHRhZyAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIHRhZworICAgQHBhcmFtIHRhZ2xlbiAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgICBAcGFyYW0gZGlyZWN0aW9uICBFbmNyeXB0IG9yIERlY3J5cHQgZGlyZWN0aW9uICgwIG9yIDEpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgY2NtX21lbW9yeShpbnQgY2lwaGVyLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgc3ltbWV0cmljX2tleSAgICAgICAqdXNrZXksCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsICAgICB1bnNpZ25lZCBsb25nIHB0bGVuLAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgICAgdW5zaWduZWQgbG9uZyAqdGFnbGVuLAorICAgICAgICAgICAgICAgICAgICBpbnQgIGRpcmVjdGlvbikKK3sKKyAgIHVuc2lnbmVkIGNoYXIgIFBBRFsxNl0sIGN0clsxNl0sIENUUlBBRFsxNl0sIGI7CisgICBzeW1tZXRyaWNfa2V5ICpza2V5OworICAgaW50ICAgICAgICAgICAgZXJyOworICAgdW5zaWduZWQgbG9uZyAgbGVuLCBMLCB4LCB5LCB6LCBDVFJsZW47CisKKyAgIGlmICh1c2tleSA9PSBOVUxMKSB7CisgICAgICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKyAgIH0KKyAgIExUQ19BUkdDSEsobm9uY2UgICE9IE5VTEwpOworICAgaWYgKGhlYWRlcmxlbiA+IDApIHsKKyAgICAgIExUQ19BUkdDSEsoaGVhZGVyICE9IE5VTEwpOworICAgfQorICAgTFRDX0FSR0NISyhwdCAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsodGFnICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyh0YWdsZW4gIT0gTlVMTCk7CisKKyNpZmRlZiBMVENfRkFTVAorICAgaWYgKDE2ICUgc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisjZW5kaWYKKworICAgLyogY2hlY2sgY2lwaGVyIGlucHV0ICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChjaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aCAhPSAxNikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQ0lQSEVSOworICAgfQorCisgICAvKiBtYWtlIHN1cmUgdGhlIHRhZ2xlbiBpcyBldmVuIGFuZCA8PSAxNiAqLworICAgKnRhZ2xlbiAmPSB+MTsKKyAgIGlmICgqdGFnbGVuID4gMTYpIHsKKyAgICAgICp0YWdsZW4gPSAxNjsKKyAgIH0KKworICAgLyogY2FuJ3QgdXNlIDwgNCAqLworICAgaWYgKCp0YWdsZW4gPCA0KSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIGlzIHRoZXJlIGFuIGFjY2VsZXJhdG9yPyAqLworICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYWNjZWxfY2NtX21lbW9yeSAhPSBOVUxMKSB7CisgICAgICAgcmV0dXJuIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYWNjZWxfY2NtX21lbW9yeSgKKyAgICAgICAgICAga2V5LCAgICBrZXlsZW4sCisgICAgICAgICAgIHVza2V5LAorICAgICAgICAgICBub25jZSwgIG5vbmNlbGVuLAorICAgICAgICAgICBoZWFkZXIsIGhlYWRlcmxlbiwKKyAgICAgICAgICAgcHQsICAgICBwdGxlbiwKKyAgICAgICAgICAgY3QsIAorICAgICAgICAgICB0YWcsICAgIHRhZ2xlbiwKKyAgICAgICAgICAgZGlyZWN0aW9uKTsKKyAgIH0KKworICAgLyogbGV0J3MgZ2V0IHRoZSBMIHZhbHVlICovCisgICBsZW4gPSBwdGxlbjsKKyAgIEwgICA9IDA7CisgICB3aGlsZSAobGVuKSB7CisgICAgICArK0w7CisgICAgICBsZW4gPj49IDg7CisgICB9CisgICBpZiAoTCA8PSAxKSB7CisgICAgICBMID0gMjsKKyAgIH0KKworICAgLyogaW5jcmVhc2UgTCB0byBtYXRjaCB0aGUgbm9uY2UgbGVuICovCisgICBub25jZWxlbiA9IChub25jZWxlbiA+IDEzKSA/IDEzIDogbm9uY2VsZW47CisgICBpZiAoKDE1IC0gbm9uY2VsZW4pID4gTCkgeworICAgICAgTCA9IDE1IC0gbm9uY2VsZW47CisgICB9CisKKyAgIC8qIGRlY3JlYXNlIG5vbmNlbGVuIHRvIG1hdGNoIEwgKi8KKyAgIGlmICgobm9uY2VsZW4gKyBMKSA+IDE1KSB7CisgICAgICBub25jZWxlbiA9IDE1IC0gTDsKKyAgIH0KKworICAgLyogYWxsb2NhdGUgbWVtIGZvciB0aGUgc3ltbWV0cmljIGtleSAqLworICAgaWYgKHVza2V5ID09IE5VTEwpIHsKKyAgICAgIHNrZXkgPSBYTUFMTE9DKHNpemVvZigqc2tleSkpOworICAgICAgaWYgKHNrZXkgPT0gTlVMTCkgeworICAgICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgICAgIH0KKworICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgY2lwaGVyICovCisgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uc2V0dXAoa2V5LCBrZXlsZW4sIDAsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgWEZSRUUoc2tleSk7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgfSBlbHNlIHsKKyAgICAgIHNrZXkgPSB1c2tleTsKKyAgIH0KKworICAgLyogZm9ybSBCXzAgPT0gZmxhZ3MgfCBOb25jZSBOIHwgbChtKSAqLworICAgeCA9IDA7CisgICBQQURbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSgoKGhlYWRlcmxlbiA+IDApID8gKDE8PDYpIDogMCkgfAorICAgICAgICAgICAgKCgoKnRhZ2xlbiAtIDIpPj4xKTw8MykgICAgICAgIHwKKyAgICAgICAgICAgIChMLTEpKTsKKworICAgLyogbm9uY2UgKi8KKyAgIGZvciAoeSA9IDA7IHkgPCAoMTYgLSAoTCArIDEpKTsgeSsrKSB7CisgICAgICAgUEFEW3grK10gPSBub25jZVt5XTsKKyAgIH0KKworICAgLyogc3RvcmUgbGVuICovCisgICBsZW4gPSBwdGxlbjsKKworICAgLyogc2hpZnQgbGVuIHNvIHRoZSB1cHBlciBieXRlcyBvZiBsZW4gYXJlIHRoZSBjb250ZW50cyBvZiB0aGUgbGVuZ3RoICovCisgICBmb3IgKHkgPSBMOyB5IDwgNDsgeSsrKSB7CisgICAgICAgbGVuIDw8PSA4OworICAgfQorCisgICAvKiBzdG9yZSBsKG0pIChvbmx5IHN0b3JlIDMyLWJpdHMpICovCisgICBmb3IgKHkgPSAwOyBMID4gNCAmJiAoTC15KT40OyB5KyspIHsKKyAgICAgICBQQURbeCsrXSA9IDA7CisgICB9CisgICBmb3IgKDsgeSA8IEw7IHkrKykgeworICAgICAgIFBBRFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKChsZW4gPj4gMjQpICYgMjU1KTsKKyAgICAgICBsZW4gPDw9IDg7CisgICB9CisKKyAgIC8qIGVuY3J5cHQgUEFEICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQoUEFELCBQQUQsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gZXJyb3I7CisgICB9CisKKyAgIC8qIGhhbmRsZSBoZWFkZXIgKi8KKyAgIGlmIChoZWFkZXJsZW4gPiAwKSB7CisgICAgICB4ID0gMDsKKyAgICAgIAorICAgICAgLyogc3RvcmUgbGVuZ3RoICovCisgICAgICBpZiAoaGVhZGVybGVuIDwgKCgxVUw8PDE2KSAtICgxVUw8PDgpKSkgeworICAgICAgICAgUEFEW3grK10gXj0gKGhlYWRlcmxlbj4+OCkgJiAyNTU7CisgICAgICAgICBQQURbeCsrXSBePSBoZWFkZXJsZW4gJiAyNTU7CisgICAgICB9IGVsc2UgeworICAgICAgICAgUEFEW3grK10gXj0gMHhGRjsKKyAgICAgICAgIFBBRFt4KytdIF49IDB4RkU7CisgICAgICAgICBQQURbeCsrXSBePSAoaGVhZGVybGVuPj4yNCkgJiAyNTU7CisgICAgICAgICBQQURbeCsrXSBePSAoaGVhZGVybGVuPj4xNikgJiAyNTU7CisgICAgICAgICBQQURbeCsrXSBePSAoaGVhZGVybGVuPj44KSAmIDI1NTsKKyAgICAgICAgIFBBRFt4KytdIF49IGhlYWRlcmxlbiAmIDI1NTsKKyAgICAgIH0KKworICAgICAgLyogbm93IGFkZCB0aGUgZGF0YSAqLworICAgICAgZm9yICh5ID0gMDsgeSA8IGhlYWRlcmxlbjsgeSsrKSB7CisgICAgICAgICAgaWYgKHggPT0gMTYpIHsKKyAgICAgICAgICAgICAvKiBmdWxsIGJsb2NrIHNvIGxldCdzIGVuY3J5cHQgaXQgKi8KKyAgICAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQoUEFELCBQQUQsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIHggPSAwOworICAgICAgICAgIH0KKyAgICAgICAgICBQQURbeCsrXSBePSBoZWFkZXJbeV07CisgICAgICB9CisKKyAgICAgIC8qIHJlbWFpbmRlcj8gKi8KKyAgICAgIGlmICh4ICE9IDApIHsKKyAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChQQUQsIFBBRCwgc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgfQorICAgICAgfQorICAgfQorCisgICAvKiBzZXR1cCB0aGUgY3RyIGNvdW50ZXIgKi8KKyAgIHggPSAwOworCisgICAvKiBmbGFncyAqLworICAgY3RyW3grK10gPSAodW5zaWduZWQgY2hhcilMLTE7CisgCisgICAvKiBub25jZSAqLworICAgZm9yICh5ID0gMDsgeSA8ICgxNiAtIChMKzEpKTsgKyt5KSB7CisgICAgICBjdHJbeCsrXSA9IG5vbmNlW3ldOworICAgfQorICAgLyogb2Zmc2V0ICovCisgICB3aGlsZSAoeCA8IDE2KSB7CisgICAgICBjdHJbeCsrXSA9IDA7CisgICB9CisKKyAgIHggICAgICA9IDA7CisgICBDVFJsZW4gPSAxNjsKKworICAgLyogbm93IGhhbmRsZSB0aGUgUFQgKi8KKyAgIGlmIChwdGxlbiA+IDApIHsKKyAgICAgIHkgPSAwOworI2lmZGVmIExUQ19GQVNUCisgICAgICBpZiAocHRsZW4gJiB+MTUpICB7CisgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBDQ01fRU5DUllQVCkgeworICAgICAgICAgICAgIGZvciAoOyB5IDwgKHB0bGVuICYgfjE1KTsgeSArPSAxNikgeworICAgICAgICAgICAgICAgIC8qIGluY3JlbWVudCB0aGUgY3RyPyAqLworICAgICAgICAgICAgICAgIGZvciAoeiA9IDE1OyB6ID4gMTUtTDsgei0tKSB7CisgICAgICAgICAgICAgICAgICAgIGN0clt6XSA9IChjdHJbel0gKyAxKSAmIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN0clt6XSkgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChjdHIsIENUUlBBRCwgc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvKiB4b3IgdGhlIFBUIGFnYWluc3QgdGhlIHBhZCBmaXJzdCAqLworICAgICAgICAgICAgICAgIGZvciAoeiA9IDA7IHogPCAxNjsgeiArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCZQQURbel0pKSAgXj0gKigoTFRDX0ZBU1RfVFlQRSopKCZwdFt5K3pdKSk7CisgICAgICAgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgmY3RbeSt6XSkpID0gKigoTFRDX0ZBU1RfVFlQRSopKCZwdFt5K3pdKSkgXiAqKChMVENfRkFTVF9UWVBFKikoJkNUUlBBRFt6XSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQoUEFELCBQQUQsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgZm9yICg7IHkgPCAocHRsZW4gJiB+MTUpOyB5ICs9IDE2KSB7CisgICAgICAgICAgICAgICAgLyogaW5jcmVtZW50IHRoZSBjdHI/ICovCisgICAgICAgICAgICAgICAgZm9yICh6ID0gMTU7IHogPiAxNS1MOyB6LS0pIHsKKyAgICAgICAgICAgICAgICAgICAgY3RyW3pdID0gKGN0clt6XSArIDEpICYgMjU1OworICAgICAgICAgICAgICAgICAgICBpZiAoY3RyW3pdKSBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KGN0ciwgQ1RSUEFELCBza2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIHhvciB0aGUgUFQgYWdhaW5zdCB0aGUgcGFkIGxhc3QgKi8KKyAgICAgICAgICAgICAgICBmb3IgKHogPSAwOyB6IDwgMTY7IHogKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgmcHRbeSt6XSkpID0gKigoTFRDX0ZBU1RfVFlQRSopKCZjdFt5K3pdKSkgXiAqKChMVENfRkFTVF9UWVBFKikoJkNUUlBBRFt6XSkpOworICAgICAgICAgICAgICAgICAgICAqKChMVENfRkFTVF9UWVBFKikoJlBBRFt6XSkpICBePSAqKChMVENfRkFTVF9UWVBFKikoJnB0W3krel0pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KFBBRCwgUEFELCBza2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgIH0KKyNlbmRpZgorCisgICAgICBmb3IgKDsgeSA8IHB0bGVuOyB5KyspIHsKKyAgICAgICAgICAvKiBpbmNyZW1lbnQgdGhlIGN0cj8gKi8KKyAgICAgICAgICBpZiAoQ1RSbGVuID09IDE2KSB7CisgICAgICAgICAgICAgZm9yICh6ID0gMTU7IHogPiAxNS1MOyB6LS0pIHsKKyAgICAgICAgICAgICAgICAgY3RyW3pdID0gKGN0clt6XSArIDEpICYgMjU1OworICAgICAgICAgICAgICAgICBpZiAoY3RyW3pdKSBicmVhazsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KGN0ciwgQ1RSUEFELCBza2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBDVFJsZW4gPSAwOworICAgICAgICAgIH0KKworICAgICAgICAgIC8qIGlmIHdlIGVuY3J5cHQgd2UgYWRkIHRoZSBieXRlcyB0byB0aGUgTUFDIGZpcnN0ICovCisgICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBDQ01fRU5DUllQVCkgeworICAgICAgICAgICAgIGIgICAgID0gcHRbeV07CisgICAgICAgICAgICAgY3RbeV0gPSBiIF4gQ1RSUEFEW0NUUmxlbisrXTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIGIgICAgID0gY3RbeV0gXiBDVFJQQURbQ1RSbGVuKytdOworICAgICAgICAgICAgIHB0W3ldID0gYjsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoeCA9PSAxNikgeworICAgICAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChQQUQsIFBBRCwgc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgeCA9IDA7CisgICAgICAgICAgfQorICAgICAgICAgIFBBRFt4KytdIF49IGI7CisgICAgICB9CisgICAgICAgICAgICAgCisgICAgICBpZiAoeCAhPSAwKSB7CisgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQoUEFELCBQQUQsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKworICAgLyogc2V0dXAgQ1RSIGZvciB0aGUgVEFHICh6ZXJvIHRoZSBjb3VudCkgKi8KKyAgIGZvciAoeSA9IDE1OyB5ID4gMTUgLSBMOyB5LS0pIHsKKyAgICAgIGN0clt5XSA9IDB4MDA7CisgICB9CisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZWNiX2VuY3J5cHQoY3RyLCBDVFJQQUQsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBlcnJvcjsKKyAgIH0KKworICAgaWYgKHNrZXkgIT0gdXNrZXkpIHsKKyAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZG9uZShza2V5KTsKKyAgIH0KKworICAgLyogc3RvcmUgdGhlIFRBRyAqLworICAgZm9yICh4ID0gMDsgeCA8IDE2ICYmIHggPCAqdGFnbGVuOyB4KyspIHsKKyAgICAgICB0YWdbeF0gPSBQQURbeF0gXiBDVFJQQURbeF07CisgICB9CisgICAqdGFnbGVuID0geDsKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShza2V5LCAgIHNpemVvZigqc2tleSkpOworICAgemVyb21lbShQQUQsICAgIHNpemVvZihQQUQpKTsKKyAgIHplcm9tZW0oQ1RSUEFELCBzaXplb2YoQ1RSUEFEKSk7CisjZW5kaWYKK2Vycm9yOgorICAgaWYgKHNrZXkgIT0gdXNrZXkpIHsKKyAgICAgIFhGUkVFKHNrZXkpOworICAgfQorCisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvY2NtL2NjbV9tZW1vcnkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMTozNDowMyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9jY20vY2NtX3Rlc3QuYyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2NjbS9jY21fdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNDViZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9jY20vY2NtX3Rlc3QuYwpAQCAtMCwwICsxLDE4MCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgY2NtX3Rlc3QuYworICBDQ00gc3VwcG9ydCwgcHJvY2VzcyBhIGJsb2NrIG9mIG1lbW9yeSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgQ0NNX01PREUKKworaW50IGNjbV90ZXN0KHZvaWQpCit7CisjaWZuZGVmIExUQ19URVNUCisgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XTsKKyAgICAgICB1bnNpZ25lZCBjaGFyIG5vbmNlWzE2XTsKKyAgICAgICBpbnQgICAgICAgICAgIG5vbmNlbGVuOworICAgICAgIHVuc2lnbmVkIGNoYXIgaGVhZGVyWzY0XTsKKyAgICAgICBpbnQgICAgICAgICAgIGhlYWRlcmxlbjsKKyAgICAgICB1bnNpZ25lZCBjaGFyIHB0WzY0XTsKKyAgICAgICBpbnQgICAgICAgICAgIHB0bGVuOworICAgICAgIHVuc2lnbmVkIGNoYXIgY3RbNjRdOworICAgICAgIHVuc2lnbmVkIGNoYXIgdGFnWzE2XTsKKyAgICAgICBpbnQgICAgICAgICAgIHRhZ2xlbjsKKyAgIH0gdGVzdHNbXSA9IHsKKworLyogMTMgYnl0ZSBub25jZSwgOCBieXRlIGF1dGgsIDIzIGJ5dGUgcHQgKi8KK3sKKyAgIHsgMHhDMCwgMHhDMSwgMHhDMiwgMHhDMywgMHhDNCwgMHhDNSwgMHhDNiwgMHhDNywgCisgICAgIDB4QzgsIDB4QzksIDB4Q0EsIDB4Q0IsIDB4Q0MsIDB4Q0QsIDB4Q0UsIDB4Q0YgfSwKKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMiwgMHgwMSwgMHgwMCwgMHhBMCwgCisgICAgIDB4QTEsIDB4QTIsIDB4QTMsIDB4QTQsIDB4QTUgfSwKKyAgIDEzLAorICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3IH0sCisgICA4LAorICAgeyAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAweDE4LCAweDE5LCAweDFBLCAweDFCLCAweDFDLCAweDFELCAweDFFIH0sCisgICAyMywKKyAgIHsgMHg1OCwgMHg4QywgMHg5NywgMHg5QSwgMHg2MSwgMHhDNiwgMHg2MywgMHhEMiwKKyAgICAgMHhGMCwgMHg2NiwgMHhEMCwgMHhDMiwgMHhDMCwgMHhGOSwgMHg4OSwgMHg4MCwKKyAgICAgMHg2RCwgMHg1RiwgMHg2QiwgMHg2MSwgMHhEQSwgMHhDMywgMHg4NCB9LAorICAgeyAweDE3LCAweGU4LCAweGQxLCAweDJjLCAweGZkLCAweGY5LCAweDI2LCAweGUwIH0sCisgICA4Cit9LAorCisvKiAxMyBieXRlIG5vbmNlLCAxMiBieXRlIGhlYWRlciwgMTkgYnl0ZSBwdCAqLworeworICAgeyAweEMwLCAweEMxLCAweEMyLCAweEMzLCAweEM0LCAweEM1LCAweEM2LCAweEM3LCAKKyAgICAgMHhDOCwgMHhDOSwgMHhDQSwgMHhDQiwgMHhDQywgMHhDRCwgMHhDRSwgMHhDRiB9LAorICAgeyAweDAwLCAweDAwLCAweDAwLCAweDA2LCAweDA1LCAweDA0LCAweDAzLCAweEEwLCAKKyAgICAgMHhBMSwgMHhBMiwgMHhBMywgMHhBNCwgMHhBNSB9LAorICAgMTMsCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIgfSwKKyAgIDEyLAorICAgeyAweDBDLCAweDBELCAweDBFLCAweDBGLCAweDEwLCAweDExLCAweDEyLCAweDEzLCAKKyAgICAgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQiwgCisgICAgIDB4MUMsIDB4MUQsIDB4MUUgfSwKKyAgIDE5LAorICAgeyAweEEyLCAweDhDLCAweDY4LCAweDY1LCAweDkzLCAweDlBLCAweDlBLCAweDc5LCAKKyAgICAgMHhGQSwgMHhBQSwgMHg1QywgMHg0QywgMHgyQSwgMHg5RCwgMHg0QSwgMHg5MSwgCisgICAgIDB4Q0QsIDB4QUMsIDB4OEMgfSwKKyAgIHsgMHg5NiwgMHhDOCwgMHg2MSwgMHhCOSwgMHhDOSwgMHhFNiwgMHgxRSwgMHhGMSB9LAorICAgOAorfSwKKworLyogc3VwcGxpZWQgYnkgQnJpYW4gR2xhZG1hbiAqLworeworICAgeyAweDQwLCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAKKyAgICAgMHg0OCwgMHg0OSwgMHg0YSwgMHg0YiwgMHg0YywgMHg0ZCwgMHg0ZSwgMHg0ZiB9LAorICAgeyAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2ICB9LAorICAgNywKKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNyB9LAorICAgOCwKKyAgIHsgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMyB9LAorICAgNCwKKyAgIHsgMHg3MSwgMHg2MiwgMHgwMSwgMHg1YiB9LAorICAgeyAweDRkLCAweGFjLCAweDI1LCAweDVkIH0sCisgICA0Cit9LAorCit7CisgICB7IDB4YzksIDB4N2MsIDB4MWYsIDB4NjcsIDB4Y2UsIDB4MzcsIDB4MTEsIDB4ODUsIAorICAgICAweDUxLCAweDRhLCAweDhhLCAweDE5LCAweGYyLCAweGJkLCAweGQ1LCAweDJmIH0sCisgICB7IDB4MDAsIDB4NTAsIDB4MzAsIDB4ZjEsIDB4ODQsIDB4NDQsIDB4MDgsIDB4YjUsIAorICAgICAweDAzLCAweDk3LCAweDc2LCAweGU3LCAweDBjIH0sCisgICAxMywKKyAgIHsgMHgwOCwgMHg0MCwgMHgwZiwgMHhkMiwgMHhlMSwgMHgyOCwgMHhhNSwgMHg3YywgCisgICAgIDB4NTAsIDB4MzAsIDB4ZjEsIDB4ODQsIDB4NDQsIDB4MDgsIDB4YWIsIDB4YWUsIAorICAgICAweGE1LCAweGI4LCAweGZjLCAweGJhLCAweDAwLCAweDAwIH0sCisgICAyMiwKKyAgIHsgMHhmOCwgMHhiYSwgMHgxYSwgMHg1NSwgMHhkMCwgMHgyZiwgMHg4NSwgMHhhZSwgCisgICAgIDB4OTYsIDB4N2IsIDB4YjYsIDB4MmYsIDB4YjYsIDB4Y2QsIDB4YTgsIDB4ZWIsIAorICAgICAweDdlLCAweDc4LCAweGEwLCAweDUwIH0sCisgICAyMCwKKyAgIHsgMHhmMywgMHhkMCwgMHhhMiwgMHhmZSwgMHg5YSwgMHgzZCwgMHhiZiwgMHgyMywgCisgICAgIDB4NDIsIDB4YTYsIDB4NDMsIDB4ZTQsIDB4MzIsIDB4NDYsIDB4ZTgsIDB4MGMsIAorICAgICAweDNjLCAweDA0LCAweGQwLCAweDE5IH0sCisgICB7IDB4NzgsIDB4NDUsIDB4Y2UsIDB4MGIsIDB4MTYsIDB4ZjksIDB4NzYsIDB4MjMgfSwKKyAgIDgKK30sCisKK307CisgIHVuc2lnbmVkIGxvbmcgdGFnbGVuLCB4OworICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF0sIGJ1ZjJbNjRdLCB0YWcyWzE2XSwgdGFnWzE2XTsKKyAgaW50ICAgICAgICAgICBlcnIsIGlkeDsKKyAgc3ltbWV0cmljX2tleSBza2V5OworCisgIGlkeCA9IGZpbmRfY2lwaGVyKCJhZXMiKTsKKyAgaWYgKGlkeCA9PSAtMSkgeworICAgICBpZHggPSBmaW5kX2NpcGhlcigicmlqbmRhZWwiKTsKKyAgICAgaWYgKGlkeCA9PSAtMSkgeworICAgICAgICByZXR1cm4gQ1JZUFRfTk9QOworICAgICB9CisgIH0KKworICBmb3IgKHggPSAwOyB4IDwgKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgeworICAgICAgdGFnbGVuID0gdGVzdHNbeF0udGFnbGVuOworICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltpZHhdLnNldHVwKHRlc3RzW3hdLmtleSwgMTYsIDAsICZza2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmICgoZXJyID0gY2NtX21lbW9yeShpZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNbeF0ua2V5LCAxNiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c1t4XS5ub25jZSwgdGVzdHNbeF0ubm9uY2VsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNbeF0uaGVhZGVyLCB0ZXN0c1t4XS5oZWFkZXJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIqKXRlc3RzW3hdLnB0LCB0ZXN0c1t4XS5wdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnLCAmdGFnbGVuLCAwKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisKKyAgICAgIGlmIChYTUVNQ01QKGJ1ZiwgdGVzdHNbeF0uY3QsIHRlc3RzW3hdLnB0bGVuKSkgeworICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgIH0KKyAgICAgIGlmIChYTUVNQ01QKHRhZywgdGVzdHNbeF0udGFnLCB0ZXN0c1t4XS50YWdsZW4pKSB7CisgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgfQorCisgICAgICBpZiAoKGVyciA9IGNjbV9tZW1vcnkoaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzW3hdLmtleSwgMTYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c1t4XS5ub25jZSwgdGVzdHNbeF0ubm9uY2VsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHNbeF0uaGVhZGVyLCB0ZXN0c1t4XS5oZWFkZXJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmMiwgdGVzdHNbeF0ucHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzIsICZ0YWdsZW4sIDEgICApKSAhPSBDUllQVF9PSykgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKworICAgICAgaWYgKFhNRU1DTVAoYnVmMiwgdGVzdHNbeF0ucHQsIHRlc3RzW3hdLnB0bGVuKSkgeworICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgIH0KKyAgICAgIGlmIChYTUVNQ01QKHRhZzIsIHRlc3RzW3hdLnRhZywgdGVzdHNbeF0udGFnbGVuKSkgeworICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgIH0KKyAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2lkeF0uZG9uZSgmc2tleSk7CisgIH0KKyAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9jY20vY2NtX3Rlc3QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzIxIDAwOjE4OjIzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2VheC9lYXhfYWRkaGVhZGVyLmMgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2FkZGhlYWRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMDU0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2FkZGhlYWRlci5jCkBAIC0wLDAgKzEsMzggQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisvKiogCisgICAgQGZpbGUgZWF4X2FkZGhlYWRlci5jCisgICAgRUFYIGltcGxlbWVudGF0aW9uLCBhZGQgbWV0YS1kYXRhLCBieSBUb20gU3QgRGVuaXMgCisqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBFQVhfTU9ERQorCisvKiogCisgICAgYWRkIGhlYWRlciAobWV0YWRhdGEpIHRvIHRoZSBzdHJlYW0gCisgICAgQHBhcmFtIGVheCAgICBUaGUgY3VycmVudCBFQVggc3RhdGUKKyAgICBAcGFyYW0gaGVhZGVyIFRoZSBoZWFkZXIgKG1ldGEtZGF0YSkgZGF0YSB5b3Ugd2lzaCB0byBhZGQgdG8gdGhlIHN0YXRlCisgICAgQHBhcmFtIGxlbmd0aCBUaGUgbGVuZ3RoIG9mIHRoZSBoZWFkZXIgZGF0YQorICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBlYXhfYWRkaGVhZGVyKGVheF9zdGF0ZSAqZWF4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkZXIsIAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgpCit7CisgICBMVENfQVJHQ0hLKGVheCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoaGVhZGVyICE9IE5VTEwpOworICAgcmV0dXJuIG9tYWNfcHJvY2VzcygmZWF4LT5oZWFkZXJvbWFjLCBoZWFkZXIsIGxlbmd0aCk7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2FkZGhlYWRlci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4L2VheF9kZWNyeXB0LmMgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmE2NmFiCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4L2VheF9kZWNyeXB0LmMKQEAgLTAsMCArMSw1MCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqIAorICAgIEBmaWxlIGVheF9kZWNyeXB0LmMKKyAgICBFQVggaW1wbGVtZW50YXRpb24sIGRlY3J5cHQgYmxvY2ssIGJ5IFRvbSBTdCBEZW5pcworKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgRUFYX01PREUKKworLyoqICAKKyAgIERlY3J5cHQgZGF0YSB3aXRoIHRoZSBFQVggcHJvdG9jb2wKKyAgIEBwYXJhbSBlYXggICAgIFRoZSBFQVggc3RhdGUKKyAgIEBwYXJhbSBjdCAgICAgIFRoZSBjaXBoZXJ0ZXh0CisgICBAcGFyYW0gcHQgICAgICBbb3V0XSBUaGUgcGxhaW50ZXh0CisgICBAcGFyYW0gbGVuZ3RoICBUaGUgbGVuZ3RoIChvY3RldHMpIG9mIHRoZSBjaXBoZXJ0ZXh0CisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZWF4X2RlY3J5cHQoZWF4X3N0YXRlICplYXgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsZW5ndGgpCit7CisgICBpbnQgZXJyOworICAgCisgICBMVENfQVJHQ0hLKGVheCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsocHQgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAgIT0gTlVMTCk7CisKKyAgIC8qIG9tYWMgY2lwaGVydGV4dCAqLworICAgaWYgKChlcnIgPSBvbWFjX3Byb2Nlc3MoJmVheC0+Y3RvbWFjLCBjdCwgbGVuZ3RoKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIGRlY3J5cHQgICovCisgICByZXR1cm4gY3RyX2RlY3J5cHQoY3QsIHB0LCBsZW5ndGgsICZlYXgtPmN0cik7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2VheC9lYXhfZGVjcnlwdF92ZXJpZnlfbWVtb3J5LmMgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5M2RkZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5jCkBAIC0wLDAgKzEsMTA4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKioKKyAgICBAZmlsZSBlYXhfZGVjcnlwdF92ZXJpZnlfbWVtb3J5LmMKKyAgICBFQVggaW1wbGVtZW50YXRpb24sIGRlY3J5cHQgYmxvY2sgb2YgbWVtb3J5LCBieSBUb20gU3QgRGVuaXMKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIEVBWF9NT0RFCisKKy8qKgorICAgRGVjcnlwdCBhIGJsb2NrIG9mIG1lbW9yeSBhbmQgdmVyaWZ5IHRoZSBwcm92aWRlZCBNQUMgdGFnIHdpdGggRUFYCisgICBAcGFyYW0gY2lwaGVyICAgICBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBkZXNpcmVkCisgICBAcGFyYW0ga2V5ICAgICAgICBUaGUgc2VjcmV0IGtleQorICAgQHBhcmFtIGtleWxlbiAgICAgVGhlIGxlbmd0aCBvZiB0aGUga2V5IChvY3RldHMpCisgICBAcGFyYW0gbm9uY2UgICAgICBUaGUgbm9uY2UgZGF0YSAodXNlIG9uY2UpIGZvciB0aGUgc2Vzc2lvbgorICAgQHBhcmFtIG5vbmNlbGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgbm9uY2UgZGF0YS4KKyAgIEBwYXJhbSBoZWFkZXIgICAgIFRoZSBzZXNzaW9uIGhlYWRlciBkYXRhCisgICBAcGFyYW0gaGVhZGVybGVuICBUaGUgbGVuZ3RoIG9mIHRoZSBoZWFkZXIgKG9jdGV0cykKKyAgIEBwYXJhbSBjdCAgICAgICAgIFRoZSBjaXBoZXJ0ZXh0CisgICBAcGFyYW0gY3RsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBjaXBoZXJ0ZXh0IChvY3RldHMpCisgICBAcGFyYW0gcHQgICAgICAgICBbb3V0XSBUaGUgcGxhaW50ZXh0CisgICBAcGFyYW0gdGFnICAgICAgICBUaGUgYXV0aGVudGljYXRpb24gdGFnIHByb3ZpZGVkIGJ5IHRoZSBlbmNvZGVyCisgICBAcGFyYW0gdGFnbGVuICAgICBbaW4vb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSB0YWcgKG9jdGV0cykKKyAgIEBwYXJhbSBzdGF0ICAgICAgIFtvdXRdIFRoZSByZXN1bHQgb2YgdGhlIGRlY3J5cHRpb24gKDE9PXZhbGlkIHRhZywgMD09aW52YWxpZCkKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCByZWdhcmRsZXNzIG9mIHRoZSByZXN1bHRpbmcgdGFnIGNvbXBhcmlzb24KKyovCitpbnQgZWF4X2RlY3J5cHRfdmVyaWZ5X21lbW9yeShpbnQgY2lwaGVyLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3QsICAgICB1bnNpZ25lZCBsb25nIGN0bGVuLAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgICAgdW5zaWduZWQgbG9uZyB0YWdsZW4sCisgICAgICAgICAgaW50ICAgICAgICAgICAqc3RhdCkKK3sKKyAgIGludCAgICAgICAgICAgIGVycjsKKyAgIGVheF9zdGF0ZSAgICAgKmVheDsKKyAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKyAgIHVuc2lnbmVkIGxvbmcgIGJ1ZmxlbjsKKworICAgTFRDX0FSR0NISyhzdGF0ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwdCAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyh0YWcgICE9IE5VTEwpOworCisgICAvKiBkZWZhdWx0IHRvIHplcm8gKi8KKyAgICpzdGF0ID0gMDsKKworICAgLyogYWxsb2NhdGUgcmFtICovCisgICBidWYgPSBYTUFMTE9DKHRhZ2xlbik7CisgICBlYXggPSBYTUFMTE9DKHNpemVvZigqZWF4KSk7CisgICBpZiAoZWF4ID09IE5VTEwgfHwgYnVmID09IE5VTEwpIHsKKyAgICAgIGlmIChlYXggIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUoZWF4KTsKKyAgICAgIH0KKyAgICAgIGlmIChidWYgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUoYnVmKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIGlmICgoZXJyID0gZWF4X2luaXQoZWF4LCBjaXBoZXIsIGtleSwga2V5bGVuLCBub25jZSwgbm9uY2VsZW4sIGhlYWRlciwgaGVhZGVybGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgaWYgKChlcnIgPSBlYXhfZGVjcnlwdChlYXgsIGN0LCBwdCwgY3RsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorIAorICAgYnVmbGVuID0gdGFnbGVuOworICAgaWYgKChlcnIgPSBlYXhfZG9uZShlYXgsIGJ1ZiwgJmJ1ZmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIGNvbXBhcmUgdGFncyAqLworICAgaWYgKGJ1ZmxlbiA+PSB0YWdsZW4gJiYgWE1FTUNNUChidWYsIHRhZywgdGFnbGVuKSA9PSAwKSB7CisgICAgICAqc3RhdCA9IDE7CisgICB9CisgICAKKyAgIGVyciA9IENSWVBUX09LOworTEJMX0VSUjoKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0oYnVmLCB0YWdsZW4pOworICAgemVyb21lbShlYXgsIHNpemVvZigqZWF4KSk7CisjZW5kaWYKKworICAgWEZSRUUoZWF4KTsKKyAgIFhGUkVFKGJ1Zik7CisKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2RlY3J5cHRfdmVyaWZ5X21lbW9yeS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6Mjg6MTcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4L2VheF9kb25lLmMgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2RvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTAyOTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4L2VheF9kb25lLmMKQEAgLTAsMCArMSw5NCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqCisgICBAZmlsZSBlYXhfZG9uZS5jCisgICBFQVggaW1wbGVtZW50YXRpb24sIHRlcm1pbmF0ZSBzZXNzaW9uLCBieSBUb20gU3QgRGVuaXMKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIEVBWF9NT0RFCisKKy8qKgorICAgVGVybWluYXRlIGFuIEVBWCBzZXNzaW9uIGFuZCBnZXQgdGhlIHRhZy4KKyAgIEBwYXJhbSBlYXggICAgICAgVGhlIEVBWCBzdGF0ZQorICAgQHBhcmFtIHRhZyAgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHBhcmFtIHRhZ2xlbiAgICBbaW4vb3V0XSBUaGUgbWF4IGxlbmd0aCBhbmQgcmVzdWx0aW5nIGxlbmd0aCBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZWF4X2RvbmUoZWF4X3N0YXRlICplYXgsIHVuc2lnbmVkIGNoYXIgKnRhZywgdW5zaWduZWQgbG9uZyAqdGFnbGVuKQoreworICAgaW50ICAgICAgICAgICBlcnI7CisgICB1bnNpZ25lZCBjaGFyICpoZWFkZXJtYWMsICpjdG1hYzsKKyAgIHVuc2lnbmVkIGxvbmcgeCwgbGVuOworCisgICBMVENfQVJHQ0hLKGVheCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsodGFnICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyh0YWdsZW4gIT0gTlVMTCk7CisKKyAgIC8qIGFsbG9jYXRlIHJhbSAqLworICAgaGVhZGVybWFjID0gWE1BTExPQyhNQVhCTE9DS1NJWkUpOworICAgY3RtYWMgICAgID0gWE1BTExPQyhNQVhCTE9DS1NJWkUpOworCisgICBpZiAoaGVhZGVybWFjID09IE5VTEwgfHwgY3RtYWMgPT0gTlVMTCkgeworICAgICAgaWYgKGhlYWRlcm1hYyAhPSBOVUxMKSB7CisgICAgICAgICBYRlJFRShoZWFkZXJtYWMpOworICAgICAgfQorICAgICAgaWYgKGN0bWFjICE9IE5VTEwpIHsKKyAgICAgICAgIFhGUkVFKGN0bWFjKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIC8qIGZpbmlzaCBjdG9tYWMgKi8KKyAgIGxlbiA9IE1BWEJMT0NLU0laRTsKKyAgIGlmICgoZXJyID0gb21hY19kb25lKCZlYXgtPmN0b21hYywgY3RtYWMsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOyAKKyAgIH0KKworICAgLyogZmluaXNoIGhlYWRlcm9tYWMgKi8KKworICAgLyogbm90ZSB3ZSBzcGVjaWZpY2FsbHkgZG9uJ3QgcmVzZXQgbGVuIHNvIHRoZSB0d28gbGVucyBhcmUgbWluaW1hbCAqLworCisgICBpZiAoKGVyciA9IG9tYWNfZG9uZSgmZWF4LT5oZWFkZXJvbWFjLCBoZWFkZXJtYWMsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOyAKKyAgIH0KKworICAgLyogdGVybWluYXRlIHRoZSBDVFIgY2hhaW4gKi8KKyAgIGlmICgoZXJyID0gY3RyX2RvbmUoJmVheC0+Y3RyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogY29tcHV0ZSBOIHhvciBIIHhvciBDICovCisgICBmb3IgKHggPSAwOyB4IDwgbGVuICYmIHggPCAqdGFnbGVuOyB4KyspIHsKKyAgICAgICB0YWdbeF0gPSBlYXgtPk5beF0gXiBoZWFkZXJtYWNbeF0gXiBjdG1hY1t4XTsKKyAgIH0KKyAgICp0YWdsZW4gPSB4OworCisgICBlcnIgPSBDUllQVF9PSzsKK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGN0bWFjLCAgICAgTUFYQkxPQ0tTSVpFKTsKKyAgIHplcm9tZW0oaGVhZGVybWFjLCBNQVhCTE9DS1NJWkUpOworICAgemVyb21lbShlYXgsICAgICAgIHNpemVvZigqZWF4KSk7CisjZW5kaWYKKworICAgWEZSRUUoY3RtYWMpOworICAgWEZSRUUoaGVhZGVybWFjKTsKKworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2VheC9lYXhfZG9uZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4L2VheF9lbmNyeXB0LmMgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzhiYzNkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4L2VheF9lbmNyeXB0LmMKQEAgLTAsMCArMSw1MSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqCisgICBAZmlsZSBlYXhfZW5jcnlwdC5jCisgICBFQVggaW1wbGVtZW50YXRpb24sIGVuY3J5cHQgYmxvY2sgYnkgVG9tIFN0IERlbmlzIAorKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgRUFYX01PREUKKworLyoqCisgICBFbmNyeXB0IHdpdGggRUFYIGEgYmxvY2sgb2YgZGF0YS4KKyAgIEBwYXJhbSBlYXggICAgICAgIFRoZSBFQVggc3RhdGUKKyAgIEBwYXJhbSBwdCAgICAgICAgIFRoZSBwbGFpbnRleHQgdG8gZW5jcnlwdAorICAgQHBhcmFtIGN0ICAgICAgICAgW291dF0gVGhlIGNpcGhlcnRleHQgYXMgZW5jcnlwdGVkCisgICBAcGFyYW0gbGVuZ3RoICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgKG9jdGV0cykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBlYXhfZW5jcnlwdChlYXhfc3RhdGUgKmVheCwgY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxlbmd0aCkKK3sKKyAgIGludCBlcnI7CisgICAKKyAgIExUQ19BUkdDSEsoZWF4ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwdCAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAhPSBOVUxMKTsKKworICAgLyogZW5jcnlwdCAqLworICAgaWYgKChlcnIgPSBjdHJfZW5jcnlwdChwdCwgY3QsIGxlbmd0aCwgJmVheC0+Y3RyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIG9tYWMgY2lwaGVydGV4dCAqLworICAgcmV0dXJuIG9tYWNfcHJvY2VzcygmZWF4LT5jdG9tYWMsIGN0LCBsZW5ndGgpOworfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2VheC9lYXhfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5LmMgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZTUyZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5jCkBAIC0wLDAgKzEsODIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qKgorICBAZmlsZSBlYXhfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5LmMKKyAgRUFYIGltcGxlbWVudGF0aW9uLCBlbmNyeXB0IGEgYmxvY2sgb2YgbWVtb3J5LCBieSBUb20gU3QgRGVuaXMKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIEVBWF9NT0RFCisKKy8qKgorICAgRUFYIGVuY3J5cHQgYW5kIHByb2R1Y2UgYW4gYXV0aGVudGljYXRpb24gdGFnCisgICBAcGFyYW0gY2lwaGVyICAgICBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBkZXNpcmVkCisgICBAcGFyYW0ga2V5ICAgICAgICBUaGUgc2VjcmV0IGtleSB0byB1c2UKKyAgIEBwYXJhbSBrZXlsZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEBwYXJhbSBub25jZSAgICAgIFRoZSBzZXNzaW9uIG5vbmNlIFt1c2Ugb25jZV0KKyAgIEBwYXJhbSBub25jZWxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIG5vbmNlCisgICBAcGFyYW0gaGVhZGVyICAgICBUaGUgaGVhZGVyIGZvciB0aGUgc2Vzc2lvbgorICAgQHBhcmFtIGhlYWRlcmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgaGVhZGVyIChvY3RldHMpCisgICBAcGFyYW0gcHQgICAgICAgICBUaGUgcGxhaW50ZXh0CisgICBAcGFyYW0gcHRsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgKG9jdGV0cykKKyAgIEBwYXJhbSBjdCAgICAgICAgIFtvdXRdIFRoZSBjaXBoZXJ0ZXh0CisgICBAcGFyYW0gdGFnICAgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gdGFnCisgICBAcGFyYW0gdGFnbGVuICAgICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBlYXhfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5KGludCBjaXBoZXIsCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgIHVuc2lnbmVkIGxvbmcgbm9uY2VsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGVhZGVyLCB1bnNpZ25lZCBsb25nIGhlYWRlcmxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgICAgIHVuc2lnbmVkIGxvbmcgcHRsZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCAgICB1bnNpZ25lZCBsb25nICp0YWdsZW4pCit7CisgICBpbnQgZXJyOworICAgZWF4X3N0YXRlICplYXg7CisKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwdCAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsodGFnICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyh0YWdsZW4gIT0gTlVMTCk7CisKKyAgIGVheCA9IFhNQUxMT0Moc2l6ZW9mKCplYXgpKTsKKworICAgaWYgKChlcnIgPSBlYXhfaW5pdChlYXgsIGNpcGhlciwga2V5LCBrZXlsZW4sIG5vbmNlLCBub25jZWxlbiwgaGVhZGVyLCBoZWFkZXJsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOyAKKyAgIH0KKworICAgaWYgKChlcnIgPSBlYXhfZW5jcnlwdChlYXgsIHB0LCBjdCwgcHRsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOyAKKyAgIH0KKyAKKyAgIGlmICgoZXJyID0gZWF4X2RvbmUoZWF4LCB0YWcsIHRhZ2xlbikpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7IAorICAgfQorCisgICBlcnIgPSBDUllQVF9PSzsKK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGVheCwgc2l6ZW9mKCplYXgpKTsKKyNlbmRpZgorCisgICBYRlJFRShlYXgpOworCisgICByZXR1cm4gZXJyOyAgIAorfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4L2VheF9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2VheC9lYXhfaW5pdC5jIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4L2VheF9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1MTJiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2VheC9lYXhfaW5pdC5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiogCisgICBAZmlsZSBlYXhfaW5pdC5jCisgICBFQVggaW1wbGVtZW50YXRpb24sIGluaXRpYWxpemVkIEVBWCBzdGF0ZSwgYnkgVG9tIFN0IERlbmlzIAorKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgRUFYX01PREUKKworLyoqIAorICAgSW5pdGlhbGl6ZWQgYW4gRUFYIHN0YXRlCisgICBAcGFyYW0gZWF4ICAgICAgIFtvdXRdIFRoZSBFQVggc3RhdGUgdG8gaW5pdGlhbGl6ZQorICAgQHBhcmFtIGNpcGhlciAgICBUaGUgaW5kZXggb2YgdGhlIGRlc2lyZWQgY2lwaGVyCisgICBAcGFyYW0ga2V5ICAgICAgIFRoZSBzZWNyZXQga2V5CisgICBAcGFyYW0ga2V5bGVuICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEBwYXJhbSBub25jZSAgICAgVGhlIHVzZS1vbmNlIG5vbmNlIGZvciB0aGUgc2Vzc2lvbgorICAgQHBhcmFtIG5vbmNlbGVuICBUaGUgbGVuZ3RoIG9mIHRoZSBub25jZSAob2N0ZXRzKQorICAgQHBhcmFtIGhlYWRlciAgICBUaGUgaGVhZGVyIGZvciB0aGUgRUFYIHN0YXRlCisgICBAcGFyYW0gaGVhZGVybGVuIFRoZSBoZWFkZXIgbGVuZ3RoIChvY3RldHMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZWF4X2luaXQoZWF4X3N0YXRlICplYXgsIGludCBjaXBoZXIsIAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4pCit7CisgICB1bnNpZ25lZCBjaGFyICpidWY7CisgICBpbnQgICAgICAgICAgIGVyciwgYmxrbGVuOworICAgb21hY19zdGF0ZSAgICAqb21hYzsKKyAgIHVuc2lnbmVkIGxvbmcgbGVuOworCisKKyAgIExUQ19BUkdDSEsoZWF4ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhub25jZSAhPSBOVUxMKTsKKyAgIGlmIChoZWFkZXJsZW4gPiAwKSB7CisgICAgICBMVENfQVJHQ0hLKGhlYWRlciAhPSBOVUxMKTsKKyAgIH0KKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBibGtsZW4gPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aDsKKworICAgLyogYWxsb2NhdGUgcmFtICovCisgICBidWYgID0gWE1BTExPQyhNQVhCTE9DS1NJWkUpOworICAgb21hYyA9IFhNQUxMT0Moc2l6ZW9mKCpvbWFjKSk7CisKKyAgIGlmIChidWYgPT0gTlVMTCB8fCBvbWFjID09IE5VTEwpIHsKKyAgICAgIGlmIChidWYgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUoYnVmKTsKKyAgICAgIH0KKyAgICAgIGlmIChvbWFjICE9IE5VTEwpIHsKKyAgICAgICAgIFhGUkVFKG9tYWMpOworICAgICAgfQorICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogTiA9IE9NQUNfMEsobm9uY2UpICovCisgICB6ZXJvbWVtKGJ1ZiwgTUFYQkxPQ0tTSVpFKTsKKyAgIGlmICgoZXJyID0gb21hY19pbml0KG9tYWMsIGNpcGhlciwga2V5LCBrZXlsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOyAKKyAgIH0KKworICAgLyogb21hYyB0aGUgWzBdX24gKi8KKyAgIGlmICgoZXJyID0gb21hY19wcm9jZXNzKG9tYWMsIGJ1ZiwgYmxrbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsgCisgICB9CisgICAvKiBvbWFjIHRoZSBub25jZSAqLworICAgaWYgKChlcnIgPSBvbWFjX3Byb2Nlc3Mob21hYywgbm9uY2UsIG5vbmNlbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsgCisgICB9CisgICAvKiBzdG9yZSByZXN1bHQgKi8KKyAgIGxlbiA9IHNpemVvZihlYXgtPk4pOworICAgaWYgKChlcnIgPSBvbWFjX2RvbmUob21hYywgZWF4LT5OLCAmbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsgCisgICB9CisKKyAgIC8qIEggPSBPTUFDXzFLKGhlYWRlcikgKi8KKyAgIHplcm9tZW0oYnVmLCBNQVhCTE9DS1NJWkUpOworICAgYnVmW2Jsa2xlbiAtIDFdID0gMTsKKworICAgaWYgKChlcnIgPSBvbWFjX2luaXQoJmVheC0+aGVhZGVyb21hYywgY2lwaGVyLCBrZXksIGtleWxlbikpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7IAorICAgfQorCisgICAvKiBvbWFjIHRoZSBbMV1fbiAqLworICAgaWYgKChlcnIgPSBvbWFjX3Byb2Nlc3MoJmVheC0+aGVhZGVyb21hYywgYnVmLCBibGtsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOyAKKyAgIH0KKyAgIC8qIG9tYWMgdGhlIGhlYWRlciAqLworICAgaWYgKGhlYWRlcmxlbiAhPSAwKSB7CisgICAgICBpZiAoKGVyciA9IG9tYWNfcHJvY2VzcygmZWF4LT5oZWFkZXJvbWFjLCBoZWFkZXIsIGhlYWRlcmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgZ290byBMQkxfRVJSOyAKKyAgICAgIH0KKyAgIH0KKworICAgLyogbm90ZSB3ZSBkb24ndCBmaW5pc2ggdGhlIGhlYWRlcm9tYWMsIHRoaXMgYWxsb3dzIHVzIHRvIGFkZCBtb3JlIGhlYWRlciBsYXRlciAqLworCisgICAvKiBzZXR1cCB0aGUgQ1RSIG1vZGUgKi8KKyAgIGlmICgoZXJyID0gY3RyX3N0YXJ0KGNpcGhlciwgZWF4LT5OLCBrZXksIGtleWxlbiwgMCwgQ1RSX0NPVU5URVJfQklHX0VORElBTiwgJmVheC0+Y3RyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsgCisgICB9CisKKyAgIC8qIHNldHVwIHRoZSBPTUFDIGZvciB0aGUgY2lwaGVydGV4dCAqLworICAgaWYgKChlcnIgPSBvbWFjX2luaXQoJmVheC0+Y3RvbWFjLCBjaXBoZXIsIGtleSwga2V5bGVuKSkgIT0gQ1JZUFRfT0spIHsgCisgICAgICBnb3RvIExCTF9FUlI7IAorICAgfQorCisgICAvKiBvbWFjIFsyXV9uICovCisgICB6ZXJvbWVtKGJ1ZiwgTUFYQkxPQ0tTSVpFKTsKKyAgIGJ1ZltibGtsZW4tMV0gPSAyOworICAgaWYgKChlcnIgPSBvbWFjX3Byb2Nlc3MoJmVheC0+Y3RvbWFjLCBidWYsIGJsa2xlbikpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7IAorICAgfQorCisgICBlcnIgPSBDUllQVF9PSzsKK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGJ1ZiwgIE1BWEJMT0NLU0laRSk7CisgICB6ZXJvbWVtKG9tYWMsIHNpemVvZigqb21hYykpOworI2VuZGlmCisKKyAgIFhGUkVFKG9tYWMpOworICAgWEZSRUUoYnVmKTsKKworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmIAorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9lYXgvZWF4X2luaXQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2VheC9lYXhfdGVzdC5jIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4L2VheF90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1NDI3MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2VheC9lYXhfdGVzdC5jCkBAIC0wLDAgKzEsMjgyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiogCisgICAgQGZpbGUgZWF4X3Rlc3QuYworICAgIEVBWCBpbXBsZW1lbnRhdGlvbiwgc2VsZi10ZXN0LCBieSBUb20gU3QgRGVuaXMKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIEVBWF9NT0RFCisKKy8qKgorICAgVGVzdCB0aGUgRUFYIGltcGxlbWVudGF0aW9uCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3RpbmcgaGFzIGJlZW4gZGlzYWJsZWQKKyovCitpbnQgZWF4X3Rlc3Qodm9pZCkKK3sKKyNpZm5kZWYgTFRDX1RFU1QKKyAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgaW50ICAgICAgICAgICAgICAga2V5bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgbm9uY2VsZW4sIAorICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgbXNnbGVuOworCisgICAgICAgdW5zaWduZWQgY2hhciAgICAgICAga2V5W01BWEJMT0NLU0laRV0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBub25jZVtNQVhCTE9DS1NJWkVdLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJbTUFYQkxPQ0tTSVpFXSwgCisgICAgICAgICAgICAgICAgICAgICAgcGxhaW50ZXh0W01BWEJMT0NLU0laRV0sCisgICAgICAgICAgICAgICAgICAgICBjaXBoZXJ0ZXh0W01BWEJMT0NLU0laRV0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ1tNQVhCTE9DS1NJWkVdOworICAgfSB0ZXN0c1tdID0geworCisvKiBOVUxMIG1lc3NhZ2UgKi8KK3sKKyAgIDE2LCAwLCAwLCAwLAorICAgLyoga2V5ICovCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKyAgIC8qIG5vbmNlICovCisgICB7IDAgfSwKKyAgIC8qIGhlYWRlciAqLworICAgeyAwIH0sCisgICAvKiBwbGFpbnRleHQgKi8KKyAgIHsgMCB9LAorICAgLyogY2lwaGVydGV4dCAqLworICAgeyAwIH0sCisgICAvKiB0YWcgKi8KKyAgIHsgMHg5YSwgMHhkMCwgMHg3ZSwgMHg3ZCwgMHhiZiwgMHhmMywgMHgwMSwgMHhmNSwKKyAgICAgMHgwNSwgMHhkZSwgMHg1OSwgMHg2YiwgMHg5NiwgMHgxNSwgMHhkZiwgMHhmZiB9Cit9LAorCisvKiB0ZXN0IHdpdGggbm9uY2UgKi8KK3sKKyAgIDE2LCAxNiwgMCwgMCwKKyAgIC8qIGtleSAqLworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisgICAvKiBub25jZSAqLworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisgICAvKiBoZWFkZXIgKi8KKyAgIHsgMCB9LAorICAgLyogcGxhaW50ZXh0ICovCisgICB7IDAgfSwKKyAgIC8qIGNpcGhlcnRleHQgKi8KKyAgIHsgMCB9LAorICAgLyogdGFnICovCisgICB7IDB4MWMsIDB4ZTEsIDB4MGQsIDB4M2UsIDB4ZmYsIDB4ZDQsIDB4Y2EsIDB4ZGIsCisgICAgIDB4ZTIsIDB4ZTQsIDB4NGIsIDB4NTgsIDB4ZDYsIDB4MGEsIDB4YjksIDB4ZWMgfQorfSwKKworLyogdGVzdCB3aXRoIGhlYWRlciBbbm8gbm9uY2VdICAqLworeworICAgMTYsIDAsIDE2LCAwLAorICAgLyoga2V5ICovCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKyAgIC8qIG5vbmNlICovCisgICB7IDAgfSwKKyAgIC8qIGhlYWRlciAqLworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisgICAvKiBwbGFpbnRleHQgKi8KKyAgIHsgMCB9LAorICAgLyogY2lwaGVydGV4dCAqLworICAgeyAwIH0sCisgICAvKiB0YWcgKi8KKyAgIHsgMHgzYSwgMHg2OSwgMHg4ZiwgMHg3YSwgMHgyNywgMHgwZSwgMHg1MSwgMHhiMCwKKyAgICAgMHhmNiwgMHg1YiwgMHgzZCwgMHgzZSwgMHg0NywgMHgxOSwgMHgzYywgMHhmZiB9Cit9LAorCisvKiB0ZXN0IHdpdGggaGVhZGVyICsgbm9uY2UgKyBwbGFpbnRleHQgKi8KK3sKKyAgIDE2LCAxNiwgMTYsIDMyLAorICAgLyoga2V5ICovCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKyAgIC8qIG5vbmNlICovCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwgIAorICAgLyogaGVhZGVyICovCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKyAgIC8qIHBsYWludGV4dCAqLworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAorICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmIH0sCisgICAvKiBjaXBoZXJ0ZXh0ICovCisgICB7IDB4MjksIDB4ZDgsIDB4NzgsIDB4ZDEsIDB4YTMsIDB4YmUsIDB4ODUsIDB4N2IsCisgICAgIDB4NmYsIDB4YjgsIDB4YzgsIDB4ZWEsIDB4NTksIDB4NTAsIDB4YTcsIDB4NzgsCisgICAgIDB4MzMsIDB4MWYsIDB4YmYsIDB4MmMsIDB4Y2YsIDB4MzMsIDB4OTgsIDB4NmYsCisgICAgIDB4MzUsIDB4ZTgsIDB4Y2YsIDB4MTIsIDB4MWQsIDB4Y2IsIDB4MzAsIDB4YmMgfSwKKyAgIC8qIHRhZyAqLworICAgeyAweDRmLCAweGJlLCAweDAzLCAweDM4LCAweGJlLCAweDFjLCAweDhjLCAweDdlLAorICAgICAweDFkLCAweDdhLCAweGU3LCAweGU0LCAweDViLCAweDkyLCAweGM1LCAweDg3IH0KK30sCisKKy8qIHRlc3Qgd2l0aCBoZWFkZXIgKyBub25jZSArIHBsYWludGV4dCBbbm90IGV2ZW4gc2l6ZXMhXSAqLworeworICAgMTYsIDE1LCAxNCwgMjksCisgICAvKiBrZXkgKi8KKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorICAgLyogbm9uY2UgKi8KKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSB9LCAgCisgICAvKiBoZWFkZXIgKi8KKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCB9LAorICAgLyogcGxhaW50ZXh0ICovCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisgICAgIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMgfSwKKyAgIC8qIGNpcGhlcnRleHQgKi8KKyAgIHsgMHhkZCwgMHgyNSwgMHhjNywgMHg1NCwgMHhjNSwgMHhiMSwgMHg3YywgMHg1OSwKKyAgICAgMHgyOCwgMHhiNiwgMHg5YiwgMHg3MywgMHgxNSwgMHg1ZiwgMHg3YiwgMHhiOCwKKyAgICAgMHg4OCwgMHg4ZiwgMHhhZiwgMHgzNywgMHgwOSwgMHgxYSwgMHhkOSwgMHgyYywKKyAgICAgMHg4YSwgMHgyNCwgMHhkYiwgMHg4NiwgMHg4YiB9LAorICAgLyogdGFnICovCisgICB7IDB4MGQsIDB4MWEsIDB4MTQsIDB4ZTUsIDB4MjIsIDB4MjQsIDB4ZmYsIDB4ZDIsCisgICAgIDB4M2EsIDB4MDUsIDB4ZmEsIDB4MDIsIDB4Y2QsIDB4ZWYsIDB4NTIsIDB4ZGEgfQorfSwKKworLyogVmVjdG9ycyBmcm9tIEJyaWFuIEdsYWRtYW4gKi8KKworeworICAgMTYsIDE2LCA4LCAwLAorICAgLyoga2V5ICovCisgICB7IDB4MjMsIDB4MzksIDB4NTIsIDB4ZGUsIDB4ZTQsIDB4ZDUsIDB4ZWQsIDB4NWYsCisgICAgIDB4OWIsIDB4OWMsIDB4NmQsIDB4NmYsIDB4ZjgsIDB4MGYsIDB4ZjQsIDB4NzggfSwKKyAgIC8qIG5vbmNlICovCisgICB7IDB4NjIsIDB4ZWMsIDB4NjcsIDB4ZjksIDB4YzMsIDB4YTQsIDB4YTQsIDB4MDcsCisgICAgIDB4ZmMsIDB4YjIsIDB4YTgsIDB4YzQsIDB4OTAsIDB4MzEsIDB4YTgsIDB4YjMgfSwKKyAgIC8qIGhlYWRlciAqLworICAgeyAweDZiLCAweGZiLCAweDkxLCAweDRmLCAweGQwLCAweDdlLCAweGFlLCAweDZiIH0sCisgICAvKiBQVCAqLworICAgeyAweDAwIH0sCisgICAvKiBDVCAqLworICAgeyAweDAwIH0sCisgICAvKiB0YWcgKi8KKyAgIHsgMHhlMCwgMHgzNywgMHg4MywgMHgwZSwgMHg4MywgMHg4OSwgMHhmMiwgMHg3YiwKKyAgICAgMHgwMiwgMHg1YSwgMHgyZCwgMHg2NSwgMHgyNywgMHhlNywgMHg5ZCwgMHgwMSB9Cit9LAorCit7CisgICAxNiwgMTYsIDgsIDIsCisgICAvKiBrZXkgKi8gCisgICB7IDB4OTEsIDB4OTQsIDB4NWQsIDB4M2YsIDB4NGQsIDB4Y2IsIDB4ZWUsIDB4MGIsCisgICAgIDB4ZjQsIDB4NWUsIDB4ZjUsIDB4MjIsIDB4NTUsIDB4ZjAsIDB4OTUsIDB4YTQgfSwKKyAgIC8qIG5vbmNlICovCisgICB7IDB4YmUsIDB4Y2EsIDB4ZjAsIDB4NDMsIDB4YjAsIDB4YTIsIDB4M2QsIDB4ODQsCisgICAgIDB4MzEsIDB4OTQsIDB4YmEsIDB4OTcsIDB4MmMsIDB4NjYsIDB4ZGUsIDB4YmQgfSwKKyAgIC8qIGhlYWRlciAqLworICAgeyAweGZhLCAweDNiLCAweGZkLCAweDQ4LCAweDA2LCAweGViLCAweDUzLCAweGZhIH0sCisgICAvKiBQVCAqLworICAgeyAweGY3LCAweGZiIH0sCisgICAvKiBDVCAqLworICAgeyAweDE5LCAweGRkIH0sCisgICAvKiB0YWcgKi8KKyAgIHsgMHg1YywgMHg0YywgMHg5MywgMHgzMSwgMHgwNCwgMHg5ZCwgMHgwYiwgMHhkYSwKKyAgICAgMHhiMCwgMHgyNywgMHg3NCwgMHgwOCwgMHhmNiwgMHg3OSwgMHg2NywgMHhlNSB9Cit9LAorCit7CisgICAxNiwgMTYsIDgsIDUsCisgICAvKiBrZXkgKi8KKyAgIHsgMHgwMSwgMHhmNywgMHg0YSwgMHhkNiwgMHg0MCwgMHg3NywgMHhmMiwgMHhlNywKKyAgICAgMHgwNCwgMHhjMCwgMHhmNiwgMHgwYSwgMHhkYSwgMHgzZCwgMHhkNSwgMHgyMyB9LAorICAgLyogbm9uY2UgKi8KKyAgIHsgMHg3MCwgMHhjMywgMHhkYiwgMHg0ZiwgMHgwZCwgMHgyNiwgMHgzNiwgMHg4NCwKKyAgICAgMHgwMCwgMHhhMSwgMHgwZSwgMHhkMCwgMHg1ZCwgMHgyYiwgMHhmZiwgMHg1ZSB9LAorICAgLyogaGVhZGVyICovCisgICB7IDB4MjMsIDB4NGEsIDB4MzQsIDB4NjMsIDB4YzEsIDB4MjYsIDB4NGEsIDB4YzYgfSwKKyAgIC8qIFBUICovCisgICB7IDB4MWEsIDB4NDcsIDB4Y2IsIDB4NDksIDB4MzMgfSwKKyAgIC8qIENUICovCisgICB7IDB4ZDgsIDB4NTEsIDB4ZDUsIDB4YmEsIDB4ZTAgfSwKKyAgIC8qIFRhZyAqLworICAgeyAweDNhLCAweDU5LCAweGYyLCAweDM4LCAweGEyLCAweDNlLCAweDM5LCAweDE5LAorICAgICAweDlkLCAweGM5LCAweDI2LCAweDY2LCAweDI2LCAweGM0LCAweDBmLCAweDgwIH0KK30gICAKKworfTsKKyAgIGludCBlcnIsIHgsIGlkeCwgcmVzOworICAgdW5zaWduZWQgbG9uZyBsZW47CisgICB1bnNpZ25lZCBjaGFyIG91dGN0W01BWEJMT0NLU0laRV0sIG91dHRhZ1tNQVhCTE9DS1NJWkVdOworCisgICAgLyogQUVTIGNhbiBiZSB1bmRlciByaWpuZGFlbCBvciBhZXMuLi4gdHJ5IHRvIGZpbmQgaXQgKi8gCisgICAgaWYgKChpZHggPSBmaW5kX2NpcGhlcigiYWVzIikpID09IC0xKSB7CisgICAgICAgaWYgKChpZHggPSBmaW5kX2NpcGhlcigicmlqbmRhZWwiKSkgPT0gLTEpIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfTk9QOworICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKS9zaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAgIGxlbiA9IHNpemVvZihvdXR0YWcpOworICAgICAgICBpZiAoKGVyciA9IGVheF9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkoaWR4LCB0ZXN0c1t4XS5rZXksIHRlc3RzW3hdLmtleWxlbiwKKyAgICAgICAgICAgIHRlc3RzW3hdLm5vbmNlLCB0ZXN0c1t4XS5ub25jZWxlbiwgdGVzdHNbeF0uaGVhZGVyLCB0ZXN0c1t4XS5oZWFkZXJsZW4sCisgICAgICAgICAgICB0ZXN0c1t4XS5wbGFpbnRleHQsIHRlc3RzW3hdLm1zZ2xlbiwgb3V0Y3QsIG91dHRhZywgJmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFhNRU1DTVAob3V0Y3QsIHRlc3RzW3hdLmNpcGhlcnRleHQsIHRlc3RzW3hdLm1zZ2xlbikgfHwgWE1FTUNNUChvdXR0YWcsIHRlc3RzW3hdLnRhZywgbGVuKSkgeworI2lmIDAKKyAgICAgICAgICAgdW5zaWduZWQgbG9uZyB5OworICAgICAgICAgICBwcmludGYoIlxuXG5GYWlsdXJlOiBcbkNUOlxuIik7CisgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAodW5zaWduZWQgbG9uZyl0ZXN0c1t4XS5tc2dsZW47ICkgeworICAgICAgICAgICAgICAgcHJpbnRmKCIweCUwMngiLCBvdXRjdFt5XSk7CisgICAgICAgICAgICAgICBpZiAoeSA8ICh1bnNpZ25lZCBsb25nKSh0ZXN0c1t4XS5tc2dsZW4tMSkpIHByaW50ZigiLCAiKTsKKyAgICAgICAgICAgICAgIGlmICghKCsreSAlIDgpKSBwcmludGYoIlxuIik7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgcHJpbnRmKCJcblRBRzpcbiIpOworICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgbGVuOyApIHsKKyAgICAgICAgICAgICAgIHByaW50ZigiMHglMDJ4Iiwgb3V0dGFnW3ldKTsKKyAgICAgICAgICAgICAgIGlmICh5IDwgbGVuLTEpIHByaW50ZigiLCAiKTsKKyAgICAgICAgICAgICAgIGlmICghKCsreSAlIDgpKSBwcmludGYoIlxuIik7CisgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgICB9CisKKyAgICAgICAgLyogdGVzdCBkZWNyeXB0ICovCisgICAgICAgIGlmICgoZXJyID0gZWF4X2RlY3J5cHRfdmVyaWZ5X21lbW9yeShpZHgsIHRlc3RzW3hdLmtleSwgdGVzdHNbeF0ua2V5bGVuLAorICAgICAgICAgICAgIHRlc3RzW3hdLm5vbmNlLCB0ZXN0c1t4XS5ub25jZWxlbiwgdGVzdHNbeF0uaGVhZGVyLCB0ZXN0c1t4XS5oZWFkZXJsZW4sCisgICAgICAgICAgICAgb3V0Y3QsIHRlc3RzW3hdLm1zZ2xlbiwgb3V0Y3QsIG91dHRhZywgbGVuLCAmcmVzKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChyZXMgIT0gMSkgfHwgWE1FTUNNUChvdXRjdCwgdGVzdHNbeF0ucGxhaW50ZXh0LCB0ZXN0c1t4XS5tc2dsZW4pKSB7CisjaWYgMAorICAgICAgICAgICB1bnNpZ25lZCBsb25nIHk7CisgICAgICAgICAgIHByaW50ZigiXG5cbkZhaWx1cmUgKHJlcyA9PSAlZCk6IFxuUFQ6XG4iLCByZXMpOworICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgKHVuc2lnbmVkIGxvbmcpdGVzdHNbeF0ubXNnbGVuOyApIHsKKyAgICAgICAgICAgICAgIHByaW50ZigiMHglMDJ4Iiwgb3V0Y3RbeV0pOworICAgICAgICAgICAgICAgaWYgKHkgPCAodW5zaWduZWQgbG9uZykodGVzdHNbeF0ubXNnbGVuLTEpKSBwcmludGYoIiwgIik7CisgICAgICAgICAgICAgICBpZiAoISgrK3kgJSA4KSkgcHJpbnRmKCJcbiIpOworICAgICAgICAgICB9CisgICAgICAgICAgIHByaW50ZigiXG5cbiIpOworI2VuZGlmCisgICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgIH0KKworICAgICB9CisgICAgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZiAvKiBMVENfVEVTVCAqLworfQorCisjZW5kaWYgLyogRUFYX01PREUgKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZWF4L2VheF90ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX2FkZF9hYWQuYyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fYWRkX2FhZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMzdjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX2FkZF9hYWQuYwpAQCAtMCwwICsxLDEyNCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqCisgICBAZmlsZSBnY21fYWRkX2FhZC5jCisgICBHQ00gaW1wbGVtZW50YXRpb24sIEFkZCBBQUQgZGF0YSB0byB0aGUgc3RyZWFtLCBieSBUb20gU3QgRGVuaXMKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIEdDTV9NT0RFCisKKy8qKgorICBBZGQgQUFEIHRvIHRoZSBHQ00gc3RhdGUKKyAgQHBhcmFtIGdjbSAgICAgICBUaGUgR0NNIHN0YXRlCisgIEBwYXJhbSBhZGF0YSAgICAgVGhlIGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YSB0byBhZGQgdG8gdGhlIEdDTSBzdGF0ZQorICBAcGFyYW0gYWRhdGFsZW4gIFRoZSBsZW5ndGggb2YgdGhlIEFBRCBkYXRhLgorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAqLworaW50IGdjbV9hZGRfYWFkKGdjbV9zdGF0ZSAqZ2NtLAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYWRhdGEsICB1bnNpZ25lZCBsb25nIGFkYXRhbGVuKQoreworICAgdW5zaWduZWQgbG9uZyB4OworICAgaW50ICAgICAgICAgICBlcnI7CisjaWZkZWYgTFRDX0ZBU1QKKyAgIHVuc2lnbmVkIGxvbmcgeTsKKyNlbmRpZgorCisgICBMVENfQVJHQ0hLKGdjbSAgICAhPSBOVUxMKTsKKyAgIGlmIChhZGF0YWxlbiA+IDApIHsKKyAgICAgIExUQ19BUkdDSEsoYWRhdGEgICE9IE5VTEwpOworICAgfQorCisgICBpZiAoZ2NtLT5idWZsZW4gPiAxNiB8fCBnY20tPmJ1ZmxlbiA8IDApIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoZ2NtLT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogaW4gSVYgbW9kZT8gKi8KKyAgIGlmIChnY20tPm1vZGUgPT0gR0NNX01PREVfSVYpIHsKKyAgICAgIC8qIGxldCdzIHByb2Nlc3MgdGhlIElWICovCisgICAgICBpZiAoZ2NtLT5pdm1vZGUgfHwgZ2NtLT5idWZsZW4gIT0gMTIpIHsKKyAgICAgICAgIGZvciAoeCA9IDA7IHggPCAodW5zaWduZWQgbG9uZylnY20tPmJ1ZmxlbjsgeCsrKSB7CisgICAgICAgICAgICAgZ2NtLT5YW3hdIF49IGdjbS0+YnVmW3hdOworICAgICAgICAgfQorICAgICAgICAgaWYgKGdjbS0+YnVmbGVuKSB7CisgICAgICAgICAgICBnY20tPnRvdGxlbiArPSBnY20tPmJ1ZmxlbiAqIENPTlNUNjQoOCk7CisgICAgICAgICAgICBnY21fbXVsdF9oKGdjbSwgZ2NtLT5YKTsKKyAgICAgICAgIH0KKworICAgICAgICAgLyogbWl4IGluIHRoZSBsZW5ndGggKi8KKyAgICAgICAgIHplcm9tZW0oZ2NtLT5idWYsIDgpOworICAgICAgICAgU1RPUkU2NEgoZ2NtLT50b3RsZW4sIGdjbS0+YnVmKzgpOworICAgICAgICAgZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsKKyAgICAgICAgICAgICBnY20tPlhbeF0gXj0gZ2NtLT5idWZbeF07CisgICAgICAgICB9CisgICAgICAgICBnY21fbXVsdF9oKGdjbSwgZ2NtLT5YKTsKKworICAgICAgICAgLyogY29weSBjb3VudGVyIG91dCAqLyAKKyAgICAgICAgIFhNRU1DUFkoZ2NtLT5ZLCBnY20tPlgsIDE2KTsKKyAgICAgICAgIHplcm9tZW0oZ2NtLT5YLCAxNik7CisgICAgICB9IGVsc2UgeworICAgICAgICAgWE1FTUNQWShnY20tPlksIGdjbS0+YnVmLCAxMik7CisgICAgICAgICBnY20tPllbMTJdID0gMDsKKyAgICAgICAgIGdjbS0+WVsxM10gPSAwOworICAgICAgICAgZ2NtLT5ZWzE0XSA9IDA7CisgICAgICAgICBnY20tPllbMTVdID0gMTsKKyAgICAgIH0KKyAgICAgIFhNRU1DUFkoZ2NtLT5ZXzAsIGdjbS0+WSwgMTYpOworICAgICAgemVyb21lbShnY20tPmJ1ZiwgMTYpOworICAgICAgZ2NtLT5idWZsZW4gPSAwOworICAgICAgZ2NtLT50b3RsZW4gPSAwOworICAgICAgZ2NtLT5tb2RlICAgPSBHQ01fTU9ERV9BQUQ7CisgICB9CisKKyAgIGlmIChnY20tPm1vZGUgIT0gR0NNX01PREVfQUFEIHx8IGdjbS0+YnVmbGVuID49IDE2KSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIHggPSAwOworI2lmZGVmIExUQ19GQVNUCisgICBpZiAoZ2NtLT5idWZsZW4gPT0gMCkgeworICAgICAgZm9yICh4ID0gMDsgeCA8IChhZGF0YWxlbiAmIH4xNSk7IHggKz0gMTYpIHsKKyAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkgKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgmZ2NtLT5YW3ldKSkgXj0gKigoTFRDX0ZBU1RfVFlQRSopKCZhZGF0YVt4ICsgeV0pKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZ2NtX211bHRfaChnY20sIGdjbS0+WCk7CisgICAgICAgICAgZ2NtLT50b3RsZW4gKz0gMTI4OworICAgICAgfQorICAgICAgYWRhdGEgKz0geDsKKyAgIH0KKyNlbmRpZgorCisKKyAgIC8qIHN0YXJ0IGFkZGluZyBBQUQgZGF0YSB0byB0aGUgc3RhdGUgKi8KKyAgIGZvciAoOyB4IDwgYWRhdGFsZW47IHgrKykgeworICAgICAgIGdjbS0+WFtnY20tPmJ1ZmxlbisrXSBePSAqYWRhdGErKzsKKworICAgICAgIGlmIChnY20tPmJ1ZmxlbiA9PSAxNikgeworICAgICAgICAgLyogR0YgbXVsdCBpdCAqLworICAgICAgICAgZ2NtX211bHRfaChnY20sIGdjbS0+WCk7CisgICAgICAgICBnY20tPmJ1ZmxlbiA9IDA7CisgICAgICAgICBnY20tPnRvdGxlbiArPSAxMjg7CisgICAgICB9CisgICB9CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKyNlbmRpZgorICAgCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fYWRkX2FhZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjE2ICQgKi8KKy8qICREYXRlOiAyMDA2LzA5LzIzIDE5OjI0OjIxICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fYWRkX2l2LmMgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX2FkZF9pdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTMxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX2FkZF9pdi5jCkBAIC0wLDAgKzEsOTQgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qKgorICAgQGZpbGUgZ2NtX2FkZF9pdi5jCisgICBHQ00gaW1wbGVtZW50YXRpb24sIGFkZCBJViBkYXRhIHRvIHRoZSBzdGF0ZSwgYnkgVG9tIFN0IERlbmlzCisqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBHQ01fTU9ERQorCisvKioKKyAgQWRkIElWIGRhdGEgdG8gdGhlIEdDTSBzdGF0ZQorICBAcGFyYW0gZ2NtICAgIFRoZSBHQ00gc3RhdGUKKyAgQHBhcmFtIElWICAgICBUaGUgaW5pdGlhbCB2YWx1ZSBkYXRhIHRvIGFkZAorICBAcGFyYW0gSVZsZW4gIFRoZSBsZW5ndGggb2YgdGhlIElWCisgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICovCitpbnQgZ2NtX2FkZF9pdihnY21fc3RhdGUgKmdjbSwgCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgICAgIHVuc2lnbmVkIGxvbmcgSVZsZW4pCit7CisgICB1bnNpZ25lZCBsb25nIHgsIHk7CisgICBpbnQgICAgICAgICAgIGVycjsKKworICAgTFRDX0FSR0NISyhnY20gIT0gTlVMTCk7CisgICBpZiAoSVZsZW4gPiAwKSB7CisgICAgICBMVENfQVJHQ0hLKElWICAhPSBOVUxMKTsKKyAgIH0KKworICAgLyogbXVzdCBiZSBpbiBJViBtb2RlICovCisgICBpZiAoZ2NtLT5tb2RlICE9IEdDTV9NT0RFX0lWKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisgCisgICBpZiAoZ2NtLT5idWZsZW4gPj0gMTYgfHwgZ2NtLT5idWZsZW4gPCAwKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGdjbS0+Y2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKworICAgLyogdHJpcCB0aGUgaXZtb2RlIGZsYWcgKi8KKyAgIGlmIChJVmxlbiArIGdjbS0+YnVmbGVuID4gMTIpIHsKKyAgICAgIGdjbS0+aXZtb2RlIHw9IDE7CisgICB9CisKKyAgIHggPSAwOworI2lmZGVmIExUQ19GQVNUCisgICBpZiAoZ2NtLT5idWZsZW4gPT0gMCkgeworICAgICAgZm9yICh4ID0gMDsgeCA8IChJVmxlbiAmIH4xNSk7IHggKz0gMTYpIHsKKyAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkgKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgmZ2NtLT5YW3ldKSkgXj0gKigoTFRDX0ZBU1RfVFlQRSopKCZJVlt4ICsgeV0pKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZ2NtX211bHRfaChnY20sIGdjbS0+WCk7CisgICAgICAgICAgZ2NtLT50b3RsZW4gKz0gMTI4OworICAgICAgfQorICAgICAgSVYgKz0geDsKKyAgIH0KKyNlbmRpZgorCisgICAvKiBzdGFydCBhZGRpbmcgSVYgZGF0YSB0byB0aGUgc3RhdGUgKi8KKyAgIGZvciAoOyB4IDwgSVZsZW47IHgrKykgeworICAgICAgIGdjbS0+YnVmW2djbS0+YnVmbGVuKytdID0gKklWKys7CisKKyAgICAgICBpZiAoZ2NtLT5idWZsZW4gPT0gMTYpIHsKKyAgICAgICAgIC8qIEdGIG11bHQgaXQgKi8KKyAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7CisgICAgICAgICAgICAgZ2NtLT5YW3ldIF49IGdjbS0+YnVmW3ldOworICAgICAgICAgfQorICAgICAgICAgZ2NtX211bHRfaChnY20sIGdjbS0+WCk7CisgICAgICAgICBnY20tPmJ1ZmxlbiA9IDA7CisgICAgICAgICBnY20tPnRvdGxlbiArPSAxMjg7CisgICAgICB9CisgICB9CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisgICAKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9hZGRfaXYuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fZG9uZS5jIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9kb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNiZDA5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fZG9uZS5jCkBAIC0wLDAgKzEsODMgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qKgorICAgQGZpbGUgZ2NtX2RvbmUuYworICAgR0NNIGltcGxlbWVudGF0aW9uLCBUZXJtaW5hdGUgdGhlIHN0cmVhbSwgYnkgVG9tIFN0IERlbmlzCisqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBHQ01fTU9ERQorCisvKioKKyAgVGVybWluYXRlIGEgR0NNIHN0cmVhbQorICBAcGFyYW0gZ2NtICAgICBUaGUgR0NNIHN0YXRlCisgIEBwYXJhbSB0YWcgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIE1BQyB0YWcKKyAgQHBhcmFtIHRhZ2xlbiAgW2luL291dF0gIFRoZSBsZW5ndGggb2YgdGhlIE1BQyB0YWcKKyAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgKi8KK2ludCBnY21fZG9uZShnY21fc3RhdGUgKmdjbSwgCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsICAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeDsKKyAgIGludCBlcnI7CisKKyAgIExUQ19BUkdDSEsoZ2NtICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsodGFnICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsodGFnbGVuICAhPSBOVUxMKTsKKworICAgaWYgKGdjbS0+YnVmbGVuID4gMTYgfHwgZ2NtLT5idWZsZW4gPCAwKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGdjbS0+Y2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKworICAgaWYgKGdjbS0+bW9kZSAhPSBHQ01fTU9ERV9URVhUKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIGhhbmRsZSByZW1haW5pbmcgY2lwaGVydGV4dCAqLworICAgaWYgKGdjbS0+YnVmbGVuKSB7CisgICAgICBnY20tPnB0dG90bGVuICs9IGdjbS0+YnVmbGVuICogQ09OU1Q2NCg4KTsKKyAgICAgIGdjbV9tdWx0X2goZ2NtLCBnY20tPlgpOworICAgfQorCisgICAvKiBsZW5ndGggKi8KKyAgIFNUT1JFNjRIKGdjbS0+dG90bGVuLCBnY20tPmJ1Zik7CisgICBTVE9SRTY0SChnY20tPnB0dG90bGVuLCBnY20tPmJ1Zis4KTsKKyAgIGZvciAoeCA9IDA7IHggPCAxNjsgeCsrKSB7CisgICAgICAgZ2NtLT5YW3hdIF49IGdjbS0+YnVmW3hdOworICAgfQorICAgZ2NtX211bHRfaChnY20sIGdjbS0+WCk7CisKKyAgIC8qIGVuY3J5cHQgb3JpZ2luYWwgY291bnRlciAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltnY20tPmNpcGhlcl0uZWNiX2VuY3J5cHQoZ2NtLT5ZXzAsIGdjbS0+YnVmLCAmZ2NtLT5LKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBmb3IgKHggPSAwOyB4IDwgMTYgJiYgeCA8ICp0YWdsZW47IHgrKykgeworICAgICAgIHRhZ1t4XSA9IGdjbS0+YnVmW3hdIF4gZ2NtLT5YW3hdOworICAgfQorICAgKnRhZ2xlbiA9IHg7CisKKyAgIGNpcGhlcl9kZXNjcmlwdG9yW2djbS0+Y2lwaGVyXS5kb25lKCZnY20tPkspOworCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fZG9uZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9nZl9tdWx0LmMgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX2dmX211bHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmU4MmRkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9nZl9tdWx0LmMKQEAgLTAsMCArMSwyMjEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qKgorICAgQGZpbGUgZ2NtX2dmX211bHQuYworICAgR0NNIGltcGxlbWVudGF0aW9uLCBkbyB0aGUgR0YgbXVsdCwgYnkgVG9tIFN0IERlbmlzCisqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZiBkZWZpbmVkKEdDTV9UQUJMRVMpIHx8IGRlZmluZWQoTFJXX1RBQkxFUykgfHwgKChkZWZpbmVkKEdDTV9NT0RFKSB8fCBkZWZpbmVkKEdDTV9NT0RFKSkgJiYgZGVmaW5lZChMVENfRkFTVCkpCisKKy8qIHRoaXMgaXMgeCoyXjEyOCBtb2QgcCh4KSAuLi4gdGhlIHJlc3VsdHMgYXJlIDE2IGJ5dGVzIGVhY2ggc3RvcmVkIGluIGEgcGFja2VkIGZvcm1hdC4gIFNpbmNlIG9ubHkgdGhlIAorICogbG93ZXIgMTYgYml0cyBhcmUgbm90IHplcm8nZWQgSSByZW1vdmVkIHRoZSB1cHBlciAxNCBieXRlcyAqLworY29uc3QgdW5zaWduZWQgY2hhciBnY21fc2hpZnRfdGFibGVbMjU2KjJdID0geworMHgwMCwgMHgwMCwgMHgwMSwgMHhjMiwgMHgwMywgMHg4NCwgMHgwMiwgMHg0NiwgMHgwNywgMHgwOCwgMHgwNiwgMHhjYSwgMHgwNCwgMHg4YywgMHgwNSwgMHg0ZSwKKzB4MGUsIDB4MTAsIDB4MGYsIDB4ZDIsIDB4MGQsIDB4OTQsIDB4MGMsIDB4NTYsIDB4MDksIDB4MTgsIDB4MDgsIDB4ZGEsIDB4MGEsIDB4OWMsIDB4MGIsIDB4NWUsCisweDFjLCAweDIwLCAweDFkLCAweGUyLCAweDFmLCAweGE0LCAweDFlLCAweDY2LCAweDFiLCAweDI4LCAweDFhLCAweGVhLCAweDE4LCAweGFjLCAweDE5LCAweDZlLAorMHgxMiwgMHgzMCwgMHgxMywgMHhmMiwgMHgxMSwgMHhiNCwgMHgxMCwgMHg3NiwgMHgxNSwgMHgzOCwgMHgxNCwgMHhmYSwgMHgxNiwgMHhiYywgMHgxNywgMHg3ZSwKKzB4MzgsIDB4NDAsIDB4MzksIDB4ODIsIDB4M2IsIDB4YzQsIDB4M2EsIDB4MDYsIDB4M2YsIDB4NDgsIDB4M2UsIDB4OGEsIDB4M2MsIDB4Y2MsIDB4M2QsIDB4MGUsCisweDM2LCAweDUwLCAweDM3LCAweDkyLCAweDM1LCAweGQ0LCAweDM0LCAweDE2LCAweDMxLCAweDU4LCAweDMwLCAweDlhLCAweDMyLCAweGRjLCAweDMzLCAweDFlLAorMHgyNCwgMHg2MCwgMHgyNSwgMHhhMiwgMHgyNywgMHhlNCwgMHgyNiwgMHgyNiwgMHgyMywgMHg2OCwgMHgyMiwgMHhhYSwgMHgyMCwgMHhlYywgMHgyMSwgMHgyZSwKKzB4MmEsIDB4NzAsIDB4MmIsIDB4YjIsIDB4MjksIDB4ZjQsIDB4MjgsIDB4MzYsIDB4MmQsIDB4NzgsIDB4MmMsIDB4YmEsIDB4MmUsIDB4ZmMsIDB4MmYsIDB4M2UsCisweDcwLCAweDgwLCAweDcxLCAweDQyLCAweDczLCAweDA0LCAweDcyLCAweGM2LCAweDc3LCAweDg4LCAweDc2LCAweDRhLCAweDc0LCAweDBjLCAweDc1LCAweGNlLAorMHg3ZSwgMHg5MCwgMHg3ZiwgMHg1MiwgMHg3ZCwgMHgxNCwgMHg3YywgMHhkNiwgMHg3OSwgMHg5OCwgMHg3OCwgMHg1YSwgMHg3YSwgMHgxYywgMHg3YiwgMHhkZSwKKzB4NmMsIDB4YTAsIDB4NmQsIDB4NjIsIDB4NmYsIDB4MjQsIDB4NmUsIDB4ZTYsIDB4NmIsIDB4YTgsIDB4NmEsIDB4NmEsIDB4NjgsIDB4MmMsIDB4NjksIDB4ZWUsCisweDYyLCAweGIwLCAweDYzLCAweDcyLCAweDYxLCAweDM0LCAweDYwLCAweGY2LCAweDY1LCAweGI4LCAweDY0LCAweDdhLCAweDY2LCAweDNjLCAweDY3LCAweGZlLAorMHg0OCwgMHhjMCwgMHg0OSwgMHgwMiwgMHg0YiwgMHg0NCwgMHg0YSwgMHg4NiwgMHg0ZiwgMHhjOCwgMHg0ZSwgMHgwYSwgMHg0YywgMHg0YywgMHg0ZCwgMHg4ZSwKKzB4NDYsIDB4ZDAsIDB4NDcsIDB4MTIsIDB4NDUsIDB4NTQsIDB4NDQsIDB4OTYsIDB4NDEsIDB4ZDgsIDB4NDAsIDB4MWEsIDB4NDIsIDB4NWMsIDB4NDMsIDB4OWUsCisweDU0LCAweGUwLCAweDU1LCAweDIyLCAweDU3LCAweDY0LCAweDU2LCAweGE2LCAweDUzLCAweGU4LCAweDUyLCAweDJhLCAweDUwLCAweDZjLCAweDUxLCAweGFlLAorMHg1YSwgMHhmMCwgMHg1YiwgMHgzMiwgMHg1OSwgMHg3NCwgMHg1OCwgMHhiNiwgMHg1ZCwgMHhmOCwgMHg1YywgMHgzYSwgMHg1ZSwgMHg3YywgMHg1ZiwgMHhiZSwKKzB4ZTEsIDB4MDAsIDB4ZTAsIDB4YzIsIDB4ZTIsIDB4ODQsIDB4ZTMsIDB4NDYsIDB4ZTYsIDB4MDgsIDB4ZTcsIDB4Y2EsIDB4ZTUsIDB4OGMsIDB4ZTQsIDB4NGUsCisweGVmLCAweDEwLCAweGVlLCAweGQyLCAweGVjLCAweDk0LCAweGVkLCAweDU2LCAweGU4LCAweDE4LCAweGU5LCAweGRhLCAweGViLCAweDljLCAweGVhLCAweDVlLAorMHhmZCwgMHgyMCwgMHhmYywgMHhlMiwgMHhmZSwgMHhhNCwgMHhmZiwgMHg2NiwgMHhmYSwgMHgyOCwgMHhmYiwgMHhlYSwgMHhmOSwgMHhhYywgMHhmOCwgMHg2ZSwKKzB4ZjMsIDB4MzAsIDB4ZjIsIDB4ZjIsIDB4ZjAsIDB4YjQsIDB4ZjEsIDB4NzYsIDB4ZjQsIDB4MzgsIDB4ZjUsIDB4ZmEsIDB4ZjcsIDB4YmMsIDB4ZjYsIDB4N2UsCisweGQ5LCAweDQwLCAweGQ4LCAweDgyLCAweGRhLCAweGM0LCAweGRiLCAweDA2LCAweGRlLCAweDQ4LCAweGRmLCAweDhhLCAweGRkLCAweGNjLCAweGRjLCAweDBlLAorMHhkNywgMHg1MCwgMHhkNiwgMHg5MiwgMHhkNCwgMHhkNCwgMHhkNSwgMHgxNiwgMHhkMCwgMHg1OCwgMHhkMSwgMHg5YSwgMHhkMywgMHhkYywgMHhkMiwgMHgxZSwKKzB4YzUsIDB4NjAsIDB4YzQsIDB4YTIsIDB4YzYsIDB4ZTQsIDB4YzcsIDB4MjYsIDB4YzIsIDB4NjgsIDB4YzMsIDB4YWEsIDB4YzEsIDB4ZWMsIDB4YzAsIDB4MmUsCisweGNiLCAweDcwLCAweGNhLCAweGIyLCAweGM4LCAweGY0LCAweGM5LCAweDM2LCAweGNjLCAweDc4LCAweGNkLCAweGJhLCAweGNmLCAweGZjLCAweGNlLCAweDNlLAorMHg5MSwgMHg4MCwgMHg5MCwgMHg0MiwgMHg5MiwgMHgwNCwgMHg5MywgMHhjNiwgMHg5NiwgMHg4OCwgMHg5NywgMHg0YSwgMHg5NSwgMHgwYywgMHg5NCwgMHhjZSwKKzB4OWYsIDB4OTAsIDB4OWUsIDB4NTIsIDB4OWMsIDB4MTQsIDB4OWQsIDB4ZDYsIDB4OTgsIDB4OTgsIDB4OTksIDB4NWEsIDB4OWIsIDB4MWMsIDB4OWEsIDB4ZGUsCisweDhkLCAweGEwLCAweDhjLCAweDYyLCAweDhlLCAweDI0LCAweDhmLCAweGU2LCAweDhhLCAweGE4LCAweDhiLCAweDZhLCAweDg5LCAweDJjLCAweDg4LCAweGVlLAorMHg4MywgMHhiMCwgMHg4MiwgMHg3MiwgMHg4MCwgMHgzNCwgMHg4MSwgMHhmNiwgMHg4NCwgMHhiOCwgMHg4NSwgMHg3YSwgMHg4NywgMHgzYywgMHg4NiwgMHhmZSwKKzB4YTksIDB4YzAsIDB4YTgsIDB4MDIsIDB4YWEsIDB4NDQsIDB4YWIsIDB4ODYsIDB4YWUsIDB4YzgsIDB4YWYsIDB4MGEsIDB4YWQsIDB4NGMsIDB4YWMsIDB4OGUsCisweGE3LCAweGQwLCAweGE2LCAweDEyLCAweGE0LCAweDU0LCAweGE1LCAweDk2LCAweGEwLCAweGQ4LCAweGExLCAweDFhLCAweGEzLCAweDVjLCAweGEyLCAweDllLAorMHhiNSwgMHhlMCwgMHhiNCwgMHgyMiwgMHhiNiwgMHg2NCwgMHhiNywgMHhhNiwgMHhiMiwgMHhlOCwgMHhiMywgMHgyYSwgMHhiMSwgMHg2YywgMHhiMCwgMHhhZSwKKzB4YmIsIDB4ZjAsIDB4YmEsIDB4MzIsIDB4YjgsIDB4NzQsIDB4YjksIDB4YjYsIDB4YmMsIDB4ZjgsIDB4YmQsIDB4M2EsIDB4YmYsIDB4N2MsIDB4YmUsIDB4YmUgfTsKKworI2VuZGlmCisKKworI2lmIGRlZmluZWQoR0NNX01PREUpIHx8IGRlZmluZWQoTFJXX01PREUpCisKKyNpZm5kZWYgTFRDX0ZBU1QKKy8qIHJpZ2h0IHNoaWZ0ICovCitzdGF0aWMgdm9pZCBnY21fcmlnaHRzaGlmdCh1bnNpZ25lZCBjaGFyICphKQoreworICAgaW50IHg7CisgICBmb3IgKHggPSAxNTsgeCA+IDA7IHgtLSkgeworICAgICAgIGFbeF0gPSAoYVt4XT4+MSkgfCAoKGFbeC0xXTw8NykmMHg4MCk7CisgICB9CisgICBhWzBdID4+PSAxOworfQorCisvKiBjID0gYiphICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtYXNrW10gPSB7IDB4ODAsIDB4NDAsIDB4MjAsIDB4MTAsIDB4MDgsIDB4MDQsIDB4MDIsIDB4MDEgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBvbHlbXSA9IHsgMHgwMCwgMHhFMSB9OworCisgICAgIAorLyoqCisgIEdDTSBHRiBtdWx0aXBsaWVyIChpbnRlcm5hbCB1c2Ugb25seSkgIGJpdHNlcmlhbAorICBAcGFyYW0gYSAgIEZpcnN0IHZhbHVlCisgIEBwYXJhbSBiICAgU2Vjb25kIHZhbHVlCisgIEBwYXJhbSBjICAgRGVzdGluYXRpb24gZm9yIGEgKiBiCisgKi8gIAordm9pZCBnY21fZ2ZfbXVsdChjb25zdCB1bnNpZ25lZCBjaGFyICphLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiLCB1bnNpZ25lZCBjaGFyICpjKQoreworICAgdW5zaWduZWQgY2hhciBaWzE2XSwgVlsxNl07CisgICB1bnNpZ25lZCB4LCB5LCB6OworCisgICB6ZXJvbWVtKFosIDE2KTsKKyAgIFhNRU1DUFkoViwgYSwgMTYpOworICAgZm9yICh4ID0gMDsgeCA8IDEyODsgeCsrKSB7CisgICAgICAgaWYgKGJbeD4+M10gJiBtYXNrW3gmN10pIHsKKyAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgeworICAgICAgICAgICAgICBaW3ldIF49IFZbeV07IAorICAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgeiAgICAgPSBWWzE1XSAmIDB4MDE7CisgICAgICAgZ2NtX3JpZ2h0c2hpZnQoVik7CisgICAgICAgVlswXSBePSBwb2x5W3pdOworICAgfQorICAgWE1FTUNQWShjLCBaLCAxNik7Cit9CisKKyNlbHNlCisKKy8qIG1hcCBub3JtYWwgbnVtYmVycyB0byAiaWVlZSIgd2F5IC4uLiBlLmcuIGJpdCByZXZlcnNlZCAqLworI2RlZmluZSBNKHgpICggKCh4JjgpPj4zKSB8ICgoeCY0KT4+MSkgfCAoKHgmMik8PDEpIHwgKCh4JjEpPDwzKSApCisKKyNkZWZpbmUgQlBEIChzaXplb2YoTFRDX0ZBU1RfVFlQRSkgKiA4KQorI2RlZmluZSBXUFYgKDEgKyAoMTYgLyBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpKQorCisvKioKKyAgR0NNIEdGIG11bHRpcGxpZXIgKGludGVybmFsIHVzZSBvbmx5KSAgd29yZCBvcmllbnRlZAorICBAcGFyYW0gYSAgIEZpcnN0IHZhbHVlCisgIEBwYXJhbSBiICAgU2Vjb25kIHZhbHVlCisgIEBwYXJhbSBjICAgRGVzdGluYXRpb24gZm9yIGEgKiBiCisgKi8gIAordm9pZCBnY21fZ2ZfbXVsdChjb25zdCB1bnNpZ25lZCBjaGFyICphLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiLCB1bnNpZ25lZCBjaGFyICpjKQoreworICAgaW50IGksIGosIGssIHU7CisgICBMVENfRkFTVF9UWVBFIEJbMTZdW1dQVl0sIHRtcFszMiAvIHNpemVvZihMVENfRkFTVF9UWVBFKV0sIHBCWzE2IC8gc2l6ZW9mKExUQ19GQVNUX1RZUEUpXSwgenosIHo7CisgICB1bnNpZ25lZCBjaGFyIHBUbXBbMzJdOworCisgICAvKiBjcmVhdGUgc2ltcGxlIHRhYmxlcyAqLworICAgemVyb21lbShCWzBdLCAgICAgICBzaXplb2YoQlswXSkpOworICAgemVyb21lbShCW00oMSldLCAgICBzaXplb2YoQltNKDEpXSkpOworCisjaWZkZWYgRU5ESUFOXzMyQklUV09SRAorICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgIExPQUQzMkgoQltNKDEpXVtpXSwgYSArIChpPDwyKSk7CisgICAgICAgTE9BRDMyTChwQltpXSwgICAgICBiICsgKGk8PDIpKTsKKyAgIH0KKyNlbHNlIAorICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgIExPQUQ2NEgoQltNKDEpXVtpXSwgYSArIChpPDwzKSk7CisgICAgICAgTE9BRDY0TChwQltpXSwgICAgICBiICsgKGk8PDMpKTsKKyAgIH0KKyNlbmRpZgorCisgICAvKiBub3cgY3JlYXRlIDIsIDQgYW5kIDggKi8KKyAgIEJbTSgyKV1bMF0gPSBCW00oMSldWzBdID4+IDE7CisgICBCW00oNCldWzBdID0gQltNKDEpXVswXSA+PiAyOworICAgQltNKDgpXVswXSA9IEJbTSgxKV1bMF0gPj4gMzsKKyAgIGZvciAoaSA9IDE7IGkgPCAoaW50KVdQVjsgaSsrKSB7CisgICAgICBCW00oMildW2ldID0gKEJbTSgxKV1baS0xXSA8PCAoQlBELTEpKSB8IChCW00oMSldW2ldID4+IDEpOworICAgICAgQltNKDQpXVtpXSA9IChCW00oMSldW2ktMV0gPDwgKEJQRC0yKSkgfCAoQltNKDEpXVtpXSA+PiAyKTsKKyAgICAgIEJbTSg4KV1baV0gPSAoQltNKDEpXVtpLTFdIDw8IChCUEQtMykpIHwgKEJbTSgxKV1baV0gPj4gMyk7CisgICB9CisKKyAgIC8qICBub3cgYWxsIHZhbHVlcyB3aXRoIHR3byBiaXRzIHdoaWNoIGFyZSAzLCA1LCA2LCA5LCAxMCwgMTIgKi8KKyAgIGZvciAoaSA9IDA7IGkgPCAoaW50KVdQVjsgaSsrKSB7CisgICAgICBCW00oMyldW2ldICA9IEJbTSgxKV1baV0gXiBCW00oMildW2ldOworICAgICAgQltNKDUpXVtpXSAgPSBCW00oMSldW2ldIF4gQltNKDQpXVtpXTsKKyAgICAgIEJbTSg2KV1baV0gID0gQltNKDIpXVtpXSBeIEJbTSg0KV1baV07CisgICAgICBCW00oOSldW2ldICA9IEJbTSgxKV1baV0gXiBCW00oOCldW2ldOworICAgICAgQltNKDEwKV1baV0gPSBCW00oMildW2ldIF4gQltNKDgpXVtpXTsKKyAgICAgIEJbTSgxMildW2ldID0gQltNKDgpXVtpXSBeIEJbTSg0KV1baV07CisgICAKKyAgIC8qICBub3cgYWxsIDMgYml0IHZhbHVlcyBhbmQgdGhlIG9ubHkgNCBiaXQgdmFsdWU6IDcsIDExLCAxMywgMTQsIDE1ICovCisgICAgICBCW00oNyldW2ldICA9IEJbTSgzKV1baV0gXiBCW00oNCldW2ldOworICAgICAgQltNKDExKV1baV0gPSBCW00oMyldW2ldIF4gQltNKDgpXVtpXTsKKyAgICAgIEJbTSgxMyldW2ldID0gQltNKDEpXVtpXSBeIEJbTSgxMildW2ldOworICAgICAgQltNKDE0KV1baV0gPSBCW00oNildW2ldIF4gQltNKDgpXVtpXTsKKyAgICAgIEJbTSgxNSldW2ldID0gQltNKDcpXVtpXSBeIEJbTSg4KV1baV07CisgICB9CisKKyAgIHplcm9tZW0odG1wLCBzaXplb2YodG1wKSk7CisKKyAgIC8qIGNvbXB1dGUgcHJvZHVjdCBmb3VyIGJpdHMgb2YgZWFjaCB3b3JkIGF0IGEgdGltZSAqLworICAgLyogZm9yIGVhY2ggbmliYmxlICovCisgICBmb3IgKGkgPSAoQlBELzQpLTE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgLyogZm9yIGVhY2ggd29yZCAqLworICAgICAgIGZvciAoaiA9IDA7IGogPCAoaW50KShXUFYtMSk7IGorKykgeworICAgICAgICAvKiBncmFiIHRoZSA0IGJpdHMgcmVjYWxsIHRoZSBuaWJibGVzIGFyZSBiYWNrd2FyZHMgc28gaXQncyBhIHNoaWZ0IGJ5IChpXjEpKjQgKi8KKyAgICAgICAgICAgdSA9IChwQltqXSA+PiAoKGleMSk8PDIpKSAmIDE1OworCisgICAgICAgIC8qIGFkZCBvZmZzZXQgYnkgdGhlIHdvcmQgY291bnQgdGhlIHRhYmxlIGxvb2tlZCB1cCB2YWx1ZSB0byB0aGUgcmVzdWx0ICovCisgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCAoaW50KVdQVjsgaysrKSB7CisgICAgICAgICAgICAgICB0bXBbaytqXSBePSBCW3VdW2tdOworICAgICAgICAgICB9CisgICAgICAgfQorICAgICAvKiBzaGlmdCByZXN1bHQgdXAgYnkgNCBiaXRzICovCisgICAgICAgaWYgKGkgIT0gMCkgeworICAgICAgICAgIGZvciAoeiA9IGogPSAwOyBqIDwgKGludCkoMzIgLyBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpOyBqKyspIHsKKyAgICAgICAgICAgICAgenogPSB0bXBbal0gPDwgKEJQRC00KTsKKyAgICAgICAgICAgICAgdG1wW2pdID0gKHRtcFtqXSA+PiA0KSB8IHo7CisgICAgICAgICAgICAgIHogPSB6ejsKKyAgICAgICAgICB9CisgICAgICAgfQorICAgfQorCisgICAvKiBzdG9yZSBwcm9kdWN0ICovCisjaWZkZWYgRU5ESUFOXzMyQklUV09SRAorICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgIFNUT1JFMzJIKHRtcFtpXSwgcFRtcCArIChpPDwyKSk7CisgICB9CisjZWxzZSAKKyAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICBTVE9SRTY0SCh0bXBbaV0sIHBUbXAgKyAoaTw8MykpOworICAgfQorI2VuZGlmCisKKyAgIC8qIHJlZHVjZSBieSB0YWtpbmcgbW9zdCBzaWduaWZpY2FudCBieXRlIGFuZCBhZGRpbmcgdGhlIGFwcHJvcHJpYXRlIHR3byBieXRlIHNlcXVlbmNlIDE2IGJ5dGVzIGRvd24gKi8KKyAgIGZvciAoaSA9IDMxOyBpID49IDE2OyBpLS0pIHsKKyAgICAgICBwVG1wW2ktMTZdIF49IGdjbV9zaGlmdF90YWJsZVsoKHVuc2lnbmVkKXBUbXBbaV08PDEpXTsKKyAgICAgICBwVG1wW2ktMTVdIF49IGdjbV9zaGlmdF90YWJsZVsoKHVuc2lnbmVkKXBUbXBbaV08PDEpKzFdOworICAgfQorCisgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgICAgIGNbaV0gPSBwVG1wW2ldOworICAgfQorCit9CisKKyNlbmRpZgorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9nZl9tdWx0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLworIApkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9pbml0LmMgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGY3YTVhCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9pbml0LmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qKgorICAgQGZpbGUgZ2NtX2luaXQuYworICAgR0NNIGltcGxlbWVudGF0aW9uLCBpbml0aWFsaXplIHN0YXRlLCBieSBUb20gU3QgRGVuaXMKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIEdDTV9NT0RFCisKKy8qKgorICBJbml0aWFsaXplIGEgR0NNIHN0YXRlCisgIEBwYXJhbSBnY20gICAgIFRoZSBHQ00gc3RhdGUgdG8gaW5pdGlhbGl6ZQorICBAcGFyYW0gY2lwaGVyICBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciB0byB1c2UKKyAgQHBhcmFtIGtleSAgICAgVGhlIHNlY3JldCBrZXkKKyAgQHBhcmFtIGtleWxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleQorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAqLworaW50IGdjbV9pbml0KGdjbV9zdGF0ZSAqZ2NtLCBpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICBpbnQga2V5bGVuKQoreworICAgaW50ICAgICAgICAgICBlcnI7CisgICB1bnNpZ25lZCBjaGFyIEJbMTZdOworI2lmZGVmIEdDTV9UQUJMRVMKKyAgIGludCAgICAgICAgICAgeCwgeSwgeiwgdDsKKyNlbmRpZgorCisgICBMVENfQVJHQ0hLKGdjbSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICE9IE5VTEwpOworCisjaWZkZWYgTFRDX0ZBU1QKKyAgIGlmICgxNiAlIHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorI2VuZGlmCisKKyAgIC8qIGlzIGNpcGhlciB2YWxpZD8gKi8KKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoICE9IDE2KSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9DSVBIRVI7CisgICB9CisKKyAgIC8qIHNjaGVkdWxlIGtleSAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLnNldHVwKGtleSwga2V5bGVuLCAwLCAmZ2NtLT5LKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIEggPSBFKDApICovCisgICB6ZXJvbWVtKEIsIDE2KTsKKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChCLCBnY20tPkgsICZnY20tPkspKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogc2V0dXAgc3RhdGUgKi8KKyAgIHplcm9tZW0oZ2NtLT5idWYsIHNpemVvZihnY20tPmJ1ZikpOworICAgemVyb21lbShnY20tPlgsICAgc2l6ZW9mKGdjbS0+WCkpOworICAgZ2NtLT5jaXBoZXIgICA9IGNpcGhlcjsKKyAgIGdjbS0+bW9kZSAgICAgPSBHQ01fTU9ERV9JVjsKKyAgIGdjbS0+aXZtb2RlICAgPSAwOworICAgZ2NtLT5idWZsZW4gICA9IDA7CisgICBnY20tPnRvdGxlbiAgID0gMDsKKyAgIGdjbS0+cHR0b3RsZW4gPSAwOworCisjaWZkZWYgR0NNX1RBQkxFUworICAgLyogc2V0dXAgdGFibGVzICovCisKKyAgIC8qIGdlbmVyYXRlIHRoZSBmaXJzdCB0YWJsZSBhcyBpdCBoYXMgbm8gc2hpZnRpbmcgKGZyb20gd2hpY2ggd2UgbWFrZSB0aGUgb3RoZXIgdGFibGVzKSAqLworICAgemVyb21lbShCLCAxNik7CisgICBmb3IgKHkgPSAwOyB5IDwgMjU2OyB5KyspIHsKKyAgICAgICAgQlswXSA9IHk7CisgICAgICAgIGdjbV9nZl9tdWx0KGdjbS0+SCwgQiwgJmdjbS0+UENbMF1beV1bMF0pOworICAgfQorCisgICAvKiBub3cgZ2VuZXJhdGUgdGhlIHJlc3Qgb2YgdGhlIHRhYmxlcyBiYXNlZCB0aGUgcHJldmlvdXMgdGFibGUgKi8KKyAgIGZvciAoeCA9IDE7IHggPCAxNjsgeCsrKSB7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgMjU2OyB5KyspIHsKKyAgICAgICAgIC8qIG5vdyBzaGlmdCBpdCByaWdodCBieSA4IGJpdHMgKi8KKyAgICAgICAgIHQgPSBnY20tPlBDW3gtMV1beV1bMTVdOworICAgICAgICAgZm9yICh6ID0gMTU7IHogPiAwOyB6LS0pIHsKKyAgICAgICAgICAgICBnY20tPlBDW3hdW3ldW3pdID0gZ2NtLT5QQ1t4LTFdW3ldW3otMV07CisgICAgICAgICB9CisgICAgICAgICBnY20tPlBDW3hdW3ldWzBdID0gZ2NtX3NoaWZ0X3RhYmxlW3Q8PDFdOworICAgICAgICAgZ2NtLT5QQ1t4XVt5XVsxXSBePSBnY21fc2hpZnRfdGFibGVbKHQ8PDEpKzFdOworICAgICB9CisgIH0KKworI2VuZGlmCisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21faW5pdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjE4ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fbWVtb3J5LmMgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX21lbW9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZWMwMTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX21lbW9yeS5jCkBAIC0wLDAgKzEsMTA5IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKioKKyAgIEBmaWxlIGdjbV9tZW1vcnkuYworICAgR0NNIGltcGxlbWVudGF0aW9uLCBwcm9jZXNzIGEgcGFja2V0LCBieSBUb20gU3QgRGVuaXMKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIEdDTV9NT0RFCisKKy8qKgorICBQcm9jZXNzIGFuIGVudGlyZSBHQ00gcGFja2V0IGluIG9uZSBjYWxsLgorICBAcGFyYW0gY2lwaGVyICAgICAgICAgICAgSW5kZXggb2YgY2lwaGVyIHRvIHVzZQorICBAcGFyYW0ga2V5ICAgICAgICAgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgQHBhcmFtIGtleWxlbiAgICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkKKyAgQHBhcmFtIElWICAgICAgICAgICAgICAgIFRoZSBpbml0aWFsIHZlY3RvciAKKyAgQHBhcmFtIElWbGVuICAgICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGluaXRpYWwgdmVjdG9yCisgIEBwYXJhbSBhZGF0YSAgICAgICAgICAgICBUaGUgYWRkaXRpb25hbCBhdXRoZW50aWNhdGlvbiBkYXRhIChoZWFkZXIpCisgIEBwYXJhbSBhZGF0YWxlbiAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBhZGF0YQorICBAcGFyYW0gcHQgICAgICAgICAgICAgICAgVGhlIHBsYWludGV4dAorICBAcGFyYW0gcHRsZW4gICAgICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IChjaXBoZXJ0ZXh0IGxlbmd0aCBpcyB0aGUgc2FtZSkKKyAgQHBhcmFtIGN0ICAgICAgICAgICAgICAgIFRoZSBjaXBoZXJ0ZXh0CisgIEBwYXJhbSB0YWcgICAgICAgICAgICAgICBbb3V0XSBUaGUgTUFDIHRhZworICBAcGFyYW0gdGFnbGVuICAgICAgICAgICAgW2luL291dF0gVGhlIE1BQyB0YWcgbGVuZ3RoCisgIEBwYXJhbSBkaXJlY3Rpb24gICAgICAgICBFbmNyeXB0IG9yIERlY3J5cHQgbW9kZSAoR0NNX0VOQ1JZUFQgb3IgR0NNX0RFQ1JZUFQpCisgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICovCitpbnQgZ2NtX21lbW9yeSggICAgICBpbnQgICAgICAgICAgIGNpcGhlciwKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgICAgIHVuc2lnbmVkIGxvbmcgSVZsZW4sCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGF0YSwgIHVuc2lnbmVkIGxvbmcgYWRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwgICAgIHVuc2lnbmVkIGxvbmcgcHRsZW4sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsICAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZGlyZWN0aW9uKQoreworICAgIHZvaWQgICAgICAqb3JpZzsKKyAgICBnY21fc3RhdGUgKmdjbTsKKyAgICBpbnQgICAgICAgIGVycjsKKworICAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgCisgICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYWNjZWxfZ2NtX21lbW9yeSAhPSBOVUxMKSB7CisgICAgICAgcmV0dXJuIAorICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5hY2NlbF9nY21fbWVtb3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5LCAgIGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJViwgICAgSVZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhdGEsIGFkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCAgICBwdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWcsICAgdGFnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbik7CisgICAgfQorCisKKworI2lmbmRlZiBHQ01fVEFCTEVTX1NTRTIKKyAgICBvcmlnID0gZ2NtID0gWE1BTExPQyhzaXplb2YoKmdjbSkpOworI2Vsc2UKKyAgICBvcmlnID0gZ2NtID0gWE1BTExPQyhzaXplb2YoKmdjbSkgKyAxNik7CisjZW5kaWYKKyAgICBpZiAoZ2NtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgICB9CisKKyAgIC8qIEZvcmNlIEdDTSB0byBiZSBvbiBhIG11bHRpcGxlIG9mIDE2IHNvIHdlIGNhbiB1c2UgMTI4LWJpdCBhbGlnbmVkIG9wZXJhdGlvbnMKKyAgICAqIG5vdGUgdGhhdCB3ZSBvbmx5IG1vZGlmeSBnY20gYW5kIGtlZXAgb3JpZyBpbnRhY3QuICBUaGlzIGNvZGUgaXMgbm90IHBvcnRhYmxlCisgICAgKiBidXQgYWdhaW4gaXQncyBvbmx5IGZvciBTU0UyIGFueXdheXMsIHNvIHdobyBjYXJlcz8KKyAgICAqLworI2lmZGVmIEdDTV9UQUJMRVNfU1NFMgorICAgaWYgKCh1bnNpZ25lZCBsb25nKWdjbSAmIDE1KSB7CisgICAgICBnY20gPSAoZ2NtX3N0YXRlICopKCh1bnNpZ25lZCBsb25nKWdjbSArICgxNiAtICgodW5zaWduZWQgbG9uZylnY20gJiAxNSkpKTsKKyAgIH0KKyNlbmRpZgorCisgICAgaWYgKChlcnIgPSBnY21faW5pdChnY20sIGNpcGhlciwga2V5LCBrZXlsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTFRDX0VSUjsKKyAgICB9CisgICAgaWYgKChlcnIgPSBnY21fYWRkX2l2KGdjbSwgSVYsIElWbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBnb3RvIExUQ19FUlI7CisgICAgfQorICAgIGlmICgoZXJyID0gZ2NtX2FkZF9hYWQoZ2NtLCBhZGF0YSwgYWRhdGFsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTFRDX0VSUjsKKyAgICB9CisgICAgaWYgKChlcnIgPSBnY21fcHJvY2VzcyhnY20sIHB0LCBwdGxlbiwgY3QsIGRpcmVjdGlvbikpICE9IENSWVBUX09LKSB7CisgICAgICAgZ290byBMVENfRVJSOworICAgIH0KKyAgICBlcnIgPSBnY21fZG9uZShnY20sIHRhZywgdGFnbGVuKTsKK0xUQ19FUlI6CisgICAgWEZSRUUob3JpZyk7CisgICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fbWVtb3J5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMjMgJCAqLworLyogJERhdGU6IDIwMDYvMDkvMDcgMTA6MDA6NTcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9tdWx0X2guYyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fbXVsdF9oLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5MWUwMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fbXVsdF9oLmMKQEAgLTAsMCArMSw1OCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqCisgICBAZmlsZSBnY21fbXVsdF9oLmMKKyAgIEdDTSBpbXBsZW1lbnRhdGlvbiwgZG8gdGhlIEdGIG11bHQsIGJ5IFRvbSBTdCBEZW5pcworKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWYgZGVmaW5lZChHQ01fTU9ERSkKKy8qKgorICBHQ00gbXVsdGlwbHkgYnkgSAorICBAcGFyYW0gZ2NtICAgVGhlIEdDTSBzdGF0ZSB3aGljaCBob2xkcyB0aGUgSCB2YWx1ZQorICBAcGFyYW0gSSAgICAgVGhlIHZhbHVlIHRvIG11bHRpcGx5IEggYnkKKyAqLwordm9pZCBnY21fbXVsdF9oKGdjbV9zdGF0ZSAqZ2NtLCB1bnNpZ25lZCBjaGFyICpJKQoreworICAgdW5zaWduZWQgY2hhciBUWzE2XTsKKyNpZmRlZiBHQ01fVEFCTEVTCisgICBpbnQgeCwgeTsKKyNpZmRlZiBHQ01fVEFCTEVTX1NTRTIKKyAgIGFzbSgibW92ZHFhICglMCksJSV4bW0wIjo6InIiKCZnY20tPlBDWzBdW0lbMF1dWzBdKSk7CisgICBmb3IgKHggPSAxOyB4IDwgMTY7IHgrKykgeworICAgICAgYXNtKCJweG9yICglMCksJSV4bW0wIjo6InIiKCZnY20tPlBDW3hdW0lbeF1dWzBdKSk7CisgICB9CisgICBhc20oIm1vdmRxYSAlJXhtbTAsKCUwKSI6OiJyIigmVCkpOworI2Vsc2UKKyAgIFhNRU1DUFkoVCwgJmdjbS0+UENbMF1bSVswXV1bMF0sIDE2KTsKKyAgIGZvciAoeCA9IDE7IHggPCAxNjsgeCsrKSB7CisjaWZkZWYgTFRDX0ZBU1QKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkgKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUgKikoVCArIHkpKSBePSAqKChMVENfRkFTVF9UWVBFICopKCZnY20tPlBDW3hdW0lbeF1dW3ldKSk7CisgICAgICAgfQorI2Vsc2UKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgeworICAgICAgICAgICBUW3ldIF49IGdjbS0+UENbeF1bSVt4XV1beV07CisgICAgICAgfQorI2VuZGlmIC8qIExUQ19GQVNUICovCisgICB9CisjZW5kaWYgLyogR0NNX1RBQkxFU19TU0UyICovCisjZWxzZSAgICAgCisgICBnY21fZ2ZfbXVsdChnY20tPkgsIEksIFQpOyAKKyNlbmRpZgorICAgWE1FTUNQWShJLCBULCAxNik7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9tdWx0X2guYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzA4LzIzIDIwOjQwOjIzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fcHJvY2Vzcy5jIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9wcm9jZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkMjFkMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fcHJvY2Vzcy5jCkBAIC0wLDAgKzEsMTUyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKioKKyAgIEBmaWxlIGdjbV9wcm9jZXNzLmMKKyAgIEdDTSBpbXBsZW1lbnRhdGlvbiwgcHJvY2VzcyBtZXNzYWdlIGRhdGEsIGJ5IFRvbSBTdCBEZW5pcworKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgR0NNX01PREUKKworLyoqIAorICBQcm9jZXNzIHBsYWludGV4dC9jaXBoZXJ0ZXh0IHRocm91Z2ggR0NNCisgIEBwYXJhbSBnY20gICAgICAgVGhlIEdDTSBzdGF0ZSAKKyAgQHBhcmFtIHB0ICAgICAgICBUaGUgcGxhaW50ZXh0CisgIEBwYXJhbSBwdGxlbiAgICAgVGhlIHBsYWludGV4dCBsZW5ndGggKGNpcGhlcnRleHQgbGVuZ3RoIGlzIHRoZSBzYW1lKQorICBAcGFyYW0gY3QgICAgICAgIFRoZSBjaXBoZXJ0ZXh0CisgIEBwYXJhbSBkaXJlY3Rpb24gRW5jcnlwdCBvciBEZWNyeXB0IG1vZGUgKEdDTV9FTkNSWVBUIG9yIEdDTV9ERUNSWVBUKQorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAqLworaW50IGdjbV9wcm9jZXNzKGdjbV9zdGF0ZSAqZ2NtLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsICAgICB1bnNpZ25lZCBsb25nIHB0bGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsCisgICAgICAgICAgICAgICAgICAgICBpbnQgZGlyZWN0aW9uKQoreworICAgdW5zaWduZWQgbG9uZyB4OworICAgaW50ICAgICAgICAgICB5LCBlcnI7CisgICB1bnNpZ25lZCBjaGFyIGI7CisKKyAgIExUQ19BUkdDSEsoZ2NtICE9IE5VTEwpOworICAgaWYgKHB0bGVuID4gMCkgeworICAgICAgTFRDX0FSR0NISyhwdCAgIT0gTlVMTCk7CisgICAgICBMVENfQVJHQ0hLKGN0ICAhPSBOVUxMKTsKKyAgIH0KKworICAgaWYgKGdjbS0+YnVmbGVuID4gMTYgfHwgZ2NtLT5idWZsZW4gPCAwKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisgCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChnY20tPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBpbiBBQUQgbW9kZT8gKi8KKyAgIGlmIChnY20tPm1vZGUgPT0gR0NNX01PREVfQUFEKSB7CisgICAgICAvKiBsZXQncyBwcm9jZXNzIHRoZSBBQUQgKi8KKyAgICAgIGlmIChnY20tPmJ1ZmxlbikgeworICAgICAgICAgZ2NtLT50b3RsZW4gKz0gZ2NtLT5idWZsZW4gKiBDT05TVDY0KDgpOworICAgICAgICAgZ2NtX211bHRfaChnY20sIGdjbS0+WCk7CisgICAgICB9CisKKyAgICAgIC8qIGluY3JlbWVudCBjb3VudGVyICovCisgICAgICBmb3IgKHkgPSAxNTsgeSA+PSAxMjsgeS0tKSB7CisgICAgICAgICAgaWYgKCsrZ2NtLT5ZW3ldICYgMjU1KSB7IGJyZWFrOyB9CisgICAgICB9CisgICAgICAvKiBlbmNyeXB0IHRoZSBjb3VudGVyICovCisgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2djbS0+Y2lwaGVyXS5lY2JfZW5jcnlwdChnY20tPlksIGdjbS0+YnVmLCAmZ2NtLT5LKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisKKyAgICAgIGdjbS0+YnVmbGVuID0gMDsKKyAgICAgIGdjbS0+bW9kZSAgID0gR0NNX01PREVfVEVYVDsKKyAgIH0KKworICAgaWYgKGdjbS0+bW9kZSAhPSBHQ01fTU9ERV9URVhUKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIHggPSAwOworI2lmZGVmIExUQ19GQVNUCisgICBpZiAoZ2NtLT5idWZsZW4gPT0gMCkgeworICAgICAgaWYgKGRpcmVjdGlvbiA9PSBHQ01fRU5DUllQVCkgeyAKKyAgICAgICAgIGZvciAoeCA9IDA7IHggPCAocHRsZW4gJiB+MTUpOyB4ICs9IDE2KSB7CisgICAgICAgICAgICAgLyogY3RyIGVuY3J5cHQgKi8KKyAgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkgKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgmY3RbeCArIHldKSkgPSAqKChMVENfRkFTVF9UWVBFKikoJnB0W3greV0pKSBeICooKExUQ19GQVNUX1RZUEUqKSgmZ2NtLT5idWZbeV0pKTsKKyAgICAgICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCZnY20tPlhbeV0pKSBePSAqKChMVENfRkFTVF9UWVBFKikoJmN0W3greV0pKTsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgLyogR01BQyBpdCAqLworICAgICAgICAgICAgIGdjbS0+cHR0b3RsZW4gKz0gMTI4OworICAgICAgICAgICAgIGdjbV9tdWx0X2goZ2NtLCBnY20tPlgpOworICAgICAgICAgICAgIC8qIGluY3JlbWVudCBjb3VudGVyICovCisgICAgICAgICAgICAgZm9yICh5ID0gMTU7IHkgPj0gMTI7IHktLSkgeworICAgICAgICAgICAgICAgICBpZiAoKytnY20tPllbeV0gJiAyNTUpIHsgYnJlYWs7IH0KKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltnY20tPmNpcGhlcl0uZWNiX2VuY3J5cHQoZ2NtLT5ZLCBnY20tPmJ1ZiwgJmdjbS0+SykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgZm9yICh4ID0gMDsgeCA8IChwdGxlbiAmIH4xNSk7IHggKz0gMTYpIHsKKyAgICAgICAgICAgICAvKiBjdHIgZW5jcnlwdCAqLworICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCZnY20tPlhbeV0pKSBePSAqKChMVENfRkFTVF9UWVBFKikoJmN0W3greV0pKTsKKyAgICAgICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCZwdFt4ICsgeV0pKSA9ICooKExUQ19GQVNUX1RZUEUqKSgmY3RbeCt5XSkpIF4gKigoTFRDX0ZBU1RfVFlQRSopKCZnY20tPmJ1Zlt5XSkpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAvKiBHTUFDIGl0ICovCisgICAgICAgICAgICAgZ2NtLT5wdHRvdGxlbiArPSAxMjg7CisgICAgICAgICAgICAgZ2NtX211bHRfaChnY20sIGdjbS0+WCk7CisgICAgICAgICAgICAgLyogaW5jcmVtZW50IGNvdW50ZXIgKi8KKyAgICAgICAgICAgICBmb3IgKHkgPSAxNTsgeSA+PSAxMjsgeS0tKSB7CisgICAgICAgICAgICAgICAgIGlmICgrK2djbS0+WVt5XSAmIDI1NSkgeyBicmVhazsgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2djbS0+Y2lwaGVyXS5lY2JfZW5jcnlwdChnY20tPlksIGdjbS0+YnVmLCAmZ2NtLT5LKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgfQorICAgfQorI2VuZGlmICAgICAgICAKKworICAgLyogcHJvY2VzcyB0ZXh0ICovCisgICBmb3IgKDsgeCA8IHB0bGVuOyB4KyspIHsKKyAgICAgICBpZiAoZ2NtLT5idWZsZW4gPT0gMTYpIHsKKyAgICAgICAgICBnY20tPnB0dG90bGVuICs9IDEyODsKKyAgICAgICAgICBnY21fbXVsdF9oKGdjbSwgZ2NtLT5YKTsKKyAgICAgICAgICAKKyAgICAgICAgICAvKiBpbmNyZW1lbnQgY291bnRlciAqLworICAgICAgICAgIGZvciAoeSA9IDE1OyB5ID49IDEyOyB5LS0pIHsKKyAgICAgICAgICAgICAgaWYgKCsrZ2NtLT5ZW3ldICYgMjU1KSB7IGJyZWFrOyB9CisgICAgICAgICAgfQorICAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbZ2NtLT5jaXBoZXJdLmVjYl9lbmNyeXB0KGdjbS0+WSwgZ2NtLT5idWYsICZnY20tPkspKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorICAgICAgICAgIGdjbS0+YnVmbGVuID0gMDsKKyAgICAgICB9CisKKyAgICAgICBpZiAoZGlyZWN0aW9uID09IEdDTV9FTkNSWVBUKSB7CisgICAgICAgICAgYiA9IGN0W3hdID0gcHRbeF0gXiBnY20tPmJ1ZltnY20tPmJ1Zmxlbl07IAorICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgYiA9IGN0W3hdOworICAgICAgICAgIHB0W3hdID0gY3RbeF0gXiBnY20tPmJ1ZltnY20tPmJ1Zmxlbl07CisgICAgICAgfQorICAgICAgIGdjbS0+WFtnY20tPmJ1ZmxlbisrXSBePSBiOyAgICAgICAgICAKKyAgIH0KKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9wcm9jZXNzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTQgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMTkgMTk6MzM6MzYgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9yZXNldC5jIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvZ2NtL2djbV9yZXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YTg1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX3Jlc2V0LmMKQEAgLTAsMCArMSw0NCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqCisgICBAZmlsZSBnY21fcmVzZXQuYworICAgR0NNIGltcGxlbWVudGF0aW9uLCByZXNldCBhIHVzZWQgc3RhdGUgc28gaXQgY2FuIGFjY2VwdCBJViBkYXRhLCBieSBUb20gU3QgRGVuaXMKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIEdDTV9NT0RFCisKKy8qKgorICBSZXNldCBhIEdDTSBzdGF0ZSB0byBhcyBpZiB5b3UganVzdCBjYWxsZWQgZ2NtX2luaXQoKS4gIFRoaXMgc2F2ZXMgdGhlIGluaXRpYWxpemF0aW9uIHRpbWUuCisgIEBwYXJhbSBnY20gICBUaGUgR0NNIHN0YXRlIHRvIHJlc2V0CisgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCBnY21fcmVzZXQoZ2NtX3N0YXRlICpnY20pCit7CisgICBMVENfQVJHQ0hLKGdjbSAhPSBOVUxMKTsKKworICAgemVyb21lbShnY20tPmJ1Ziwgc2l6ZW9mKGdjbS0+YnVmKSk7CisgICB6ZXJvbWVtKGdjbS0+WCwgICBzaXplb2YoZ2NtLT5YKSk7CisgICBnY20tPm1vZGUgICAgID0gR0NNX01PREVfSVY7CisgICBnY20tPml2bW9kZSAgID0gMDsKKyAgIGdjbS0+YnVmbGVuICAgPSAwOworICAgZ2NtLT50b3RsZW4gICA9IDA7CisgICBnY20tPnB0dG90bGVuID0gMDsKKyAgCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX3Jlc2V0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX3Rlc3QuYyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL2djbS9nY21fdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODUzOWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX3Rlc3QuYwpAQCAtMCwwICsxLDQxMyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqCisgICBAZmlsZSBnY21fdGVzdC5jCisgICBHQ00gaW1wbGVtZW50YXRpb24sIHRlc3RpbmcsIGJ5IFRvbSBTdCBEZW5pcworKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgR0NNX01PREUKKworLyoqIAorICBUZXN0IHRoZSBHQ00gY29kZQorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAqLworaW50IGdjbV90ZXN0KHZvaWQpCit7CisjaWZuZGVmIExUQ19URVNUCisgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgIHVuc2lnbmVkIGNoYXIgS1szMl07CisgICAgICAgaW50ICAgICAgICAgICBrZXlsZW47CisgICAgICAgdW5zaWduZWQgY2hhciBQWzEyOF07CisgICAgICAgdW5zaWduZWQgbG9uZyBwdGxlbjsKKyAgICAgICB1bnNpZ25lZCBjaGFyIEFbMTI4XTsKKyAgICAgICB1bnNpZ25lZCBsb25nIGFsZW47CisgICAgICAgdW5zaWduZWQgY2hhciBJVlsxMjhdOworICAgICAgIHVuc2lnbmVkIGxvbmcgSVZsZW47CisgICAgICAgdW5zaWduZWQgY2hhciBDWzEyOF07CisgICAgICAgdW5zaWduZWQgY2hhciBUWzE2XTsKKyAgIH0gdGVzdHNbXSA9IHsKKworLyogdGVzdCBjYXNlICMxICovCit7CisgIC8qIGtleSAqLworICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICAxNiwKKworICAvKiBwbGFpbnRleHQgKi8KKyAgeyAwIH0sCisgIDAsCisKKyAgLyogQUFEIGRhdGEgKi8KKyAgeyAwIH0sCisgIDAsCisKKyAgLyogSVYgKi8KKyAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgMTIsCisKKyAgLyogY2lwaGVydGV4dCAgKi8KKyAgeyAwIH0sCisKKyAgLyogdGFnICovCisgIHsgMHg1OCwgMHhlMiwgMHhmYywgMHhjZSwgMHhmYSwgMHg3ZSwgMHgzMCwgMHg2MSwKKyAgICAweDM2LCAweDdmLCAweDFkLCAweDU3LCAweGE0LCAweGU3LCAweDQ1LCAweDVhIH0KK30sCisKKy8qIHRlc3QgY2FzZSAjMiAqLworeworICAvKiBrZXkgKi8KKyAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgMTYsCisKKyAgLyogUFQgKi8KKyAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgMTYsCisKKyAgLyogQURBVEEgKi8KKyAgeyAwIH0sCisgIDAsCisKKyAgLyogSVYgKi8KKyAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgMTIsCisKKyAgLyogQ1QgKi8KKyAgeyAweDAzLCAweDg4LCAweGRhLCAweGNlLCAweDYwLCAweGI2LCAweGEzLCAweDkyLAorICAgIDB4ZjMsIDB4MjgsIDB4YzIsIDB4YjksIDB4NzEsIDB4YjIsIDB4ZmUsIDB4NzggfSwKKworICAvKiBUQUcgKi8KKyAgeyAweGFiLCAweDZlLCAweDQ3LCAweGQ0LCAweDJjLCAweGVjLCAweDEzLCAweGJkLAorICAgIDB4ZjUsIDB4M2EsIDB4NjcsIDB4YjIsIDB4MTIsIDB4NTcsIDB4YmQsIDB4ZGYgfQorfSwKKworLyogdGVzdCBjYXNlICMzICovCit7CisgICAvKiBrZXkgKi8KKyAgIHsgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywgCisgICAgIDB4NmQsIDB4NmEsIDB4OGYsIDB4OTQsIDB4NjcsIDB4MzAsIDB4ODMsIDB4MDgsIH0sCisgICAxNiwKKworICAgLyogUFQgKi8KKyAgIHsgMHhkOSwgMHgzMSwgMHgzMiwgMHgyNSwgMHhmOCwgMHg4NCwgMHgwNiwgMHhlNSwgCisgICAgIDB4YTUsIDB4NTksIDB4MDksIDB4YzUsIDB4YWYsIDB4ZjUsIDB4MjYsIDB4OWEsIAorICAgICAweDg2LCAweGE3LCAweGE5LCAweDUzLCAweDE1LCAweDM0LCAweGY3LCAweGRhLCAKKyAgICAgMHgyZSwgMHg0YywgMHgzMCwgMHgzZCwgMHg4YSwgMHgzMSwgMHg4YSwgMHg3MiwgCisgICAgIDB4MWMsIDB4M2MsIDB4MGMsIDB4OTUsIDB4OTUsIDB4NjgsIDB4MDksIDB4NTMsIAorICAgICAweDJmLCAweGNmLCAweDBlLCAweDI0LCAweDQ5LCAweGE2LCAweGI1LCAweDI1LCAKKyAgICAgMHhiMSwgMHg2YSwgMHhlZCwgMHhmNSwgMHhhYSwgMHgwZCwgMHhlNiwgMHg1NywgCisgICAgIDB4YmEsIDB4NjMsIDB4N2IsIDB4MzksIDB4MWEsIDB4YWYsIDB4ZDIsIDB4NTUsIH0sCisgIDY0LAorCisgIC8qIEFEQVRBICovCisgIHsgMCB9LAorICAwLAorCisgIC8qIElWICovCisgIHsgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhmYSwgMHhjZSwgMHhkYiwgMHhhZCwgCisgICAgMHhkZSwgMHhjYSwgMHhmOCwgMHg4OCwgIH0sCisgIDEyLAorIAorICAvKiBDVCAqLworICB7IDB4NDIsIDB4ODMsIDB4MWUsIDB4YzIsIDB4MjEsIDB4NzcsIDB4NzQsIDB4MjQsIAorICAgIDB4NGIsIDB4NzIsIDB4MjEsIDB4YjcsIDB4ODQsIDB4ZDAsIDB4ZDQsIDB4OWMsIAorICAgIDB4ZTMsIDB4YWEsIDB4MjEsIDB4MmYsIDB4MmMsIDB4MDIsIDB4YTQsIDB4ZTAsIAorICAgIDB4MzUsIDB4YzEsIDB4N2UsIDB4MjMsIDB4MjksIDB4YWMsIDB4YTEsIDB4MmUsIAorICAgIDB4MjEsIDB4ZDUsIDB4MTQsIDB4YjIsIDB4NTQsIDB4NjYsIDB4OTMsIDB4MWMsIAorICAgIDB4N2QsIDB4OGYsIDB4NmEsIDB4NWEsIDB4YWMsIDB4ODQsIDB4YWEsIDB4MDUsIAorICAgIDB4MWIsIDB4YTMsIDB4MGIsIDB4MzksIDB4NmEsIDB4MGEsIDB4YWMsIDB4OTcsIAorICAgIDB4M2QsIDB4NTgsIDB4ZTAsIDB4OTEsIDB4NDcsIDB4M2YsIDB4NTksIDB4ODUsIH0sCisKKyAgLyogVEFHICovCisgIHsgMHg0ZCwgMHg1YywgMHgyYSwgMHhmMywgMHgyNywgMHhjZCwgMHg2NCwgMHhhNiwgCisgICAgMHgyYywgMHhmMywgMHg1YSwgMHhiZCwgMHgyYiwgMHhhNiwgMHhmYSwgMHhiNCwgfQorfSwKKworLyogdGVzdCBjYXNlICM0ICovCit7CisgICAvKiBrZXkgKi8KKyAgIHsgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywgCisgICAgIDB4NmQsIDB4NmEsIDB4OGYsIDB4OTQsIDB4NjcsIDB4MzAsIDB4ODMsIDB4MDgsIH0sCisgICAxNiwKKworICAgLyogUFQgKi8KKyAgIHsgMHhkOSwgMHgzMSwgMHgzMiwgMHgyNSwgMHhmOCwgMHg4NCwgMHgwNiwgMHhlNSwgCisgICAgIDB4YTUsIDB4NTksIDB4MDksIDB4YzUsIDB4YWYsIDB4ZjUsIDB4MjYsIDB4OWEsIAorICAgICAweDg2LCAweGE3LCAweGE5LCAweDUzLCAweDE1LCAweDM0LCAweGY3LCAweGRhLCAKKyAgICAgMHgyZSwgMHg0YywgMHgzMCwgMHgzZCwgMHg4YSwgMHgzMSwgMHg4YSwgMHg3MiwgCisgICAgIDB4MWMsIDB4M2MsIDB4MGMsIDB4OTUsIDB4OTUsIDB4NjgsIDB4MDksIDB4NTMsIAorICAgICAweDJmLCAweGNmLCAweDBlLCAweDI0LCAweDQ5LCAweGE2LCAweGI1LCAweDI1LCAKKyAgICAgMHhiMSwgMHg2YSwgMHhlZCwgMHhmNSwgMHhhYSwgMHgwZCwgMHhlNiwgMHg1NywgCisgICAgIDB4YmEsIDB4NjMsIDB4N2IsIDB4MzksICB9LAorICAgNjAsCisKKyAgIC8qIEFEQVRBICovCisgICB7IDB4ZmUsIDB4ZWQsIDB4ZmEsIDB4Y2UsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIAorICAgICAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAKKyAgICAgMHhhYiwgMHhhZCwgMHhkYSwgMHhkMiwgIH0sCisgICAyMCwKKworICAgLyogSVYgKi8KKyAgIHsgMHhjYSwgMHhmZSwgMHhiYSwgMHhiZSwgMHhmYSwgMHhjZSwgMHhkYiwgMHhhZCwgCisgICAgIDB4ZGUsIDB4Y2EsIDB4ZjgsIDB4ODgsICB9LAorICAgMTIsCisKKyAgIC8qIENUICovCisgICB7IDB4NDIsIDB4ODMsIDB4MWUsIDB4YzIsIDB4MjEsIDB4NzcsIDB4NzQsIDB4MjQsIAorICAgICAweDRiLCAweDcyLCAweDIxLCAweGI3LCAweDg0LCAweGQwLCAweGQ0LCAweDljLCAKKyAgICAgMHhlMywgMHhhYSwgMHgyMSwgMHgyZiwgMHgyYywgMHgwMiwgMHhhNCwgMHhlMCwgCisgICAgIDB4MzUsIDB4YzEsIDB4N2UsIDB4MjMsIDB4MjksIDB4YWMsIDB4YTEsIDB4MmUsIAorICAgICAweDIxLCAweGQ1LCAweDE0LCAweGIyLCAweDU0LCAweDY2LCAweDkzLCAweDFjLCAKKyAgICAgMHg3ZCwgMHg4ZiwgMHg2YSwgMHg1YSwgMHhhYywgMHg4NCwgMHhhYSwgMHgwNSwgCisgICAgIDB4MWIsIDB4YTMsIDB4MGIsIDB4MzksIDB4NmEsIDB4MGEsIDB4YWMsIDB4OTcsIAorICAgICAweDNkLCAweDU4LCAweGUwLCAweDkxLCAgfSwKKworICAgLyogVEFHICovCisgICB7IDB4NWIsIDB4YzksIDB4NGYsIDB4YmMsIDB4MzIsIDB4MjEsIDB4YTUsIDB4ZGIsIAorICAgICAweDk0LCAweGZhLCAweGU5LCAweDVhLCAweGU3LCAweDEyLCAweDFhLCAweDQ3LCB9CisKK30sCisKKy8qIHRlc3QgY2FzZSAjNSAqLworeworICAgLyoga2V5ICovCisgICB7IDB4ZmUsIDB4ZmYsIDB4ZTksIDB4OTIsIDB4ODYsIDB4NjUsIDB4NzMsIDB4MWMsIAorICAgICAweDZkLCAweDZhLCAweDhmLCAweDk0LCAweDY3LCAweDMwLCAweDgzLCAweDA4LCB9LAorICAgMTYsCisKKyAgIC8qIFBUICovCisgICB7IDB4ZDksIDB4MzEsIDB4MzIsIDB4MjUsIDB4ZjgsIDB4ODQsIDB4MDYsIDB4ZTUsIAorICAgICAweGE1LCAweDU5LCAweDA5LCAweGM1LCAweGFmLCAweGY1LCAweDI2LCAweDlhLCAKKyAgICAgMHg4NiwgMHhhNywgMHhhOSwgMHg1MywgMHgxNSwgMHgzNCwgMHhmNywgMHhkYSwgCisgICAgIDB4MmUsIDB4NGMsIDB4MzAsIDB4M2QsIDB4OGEsIDB4MzEsIDB4OGEsIDB4NzIsIAorICAgICAweDFjLCAweDNjLCAweDBjLCAweDk1LCAweDk1LCAweDY4LCAweDA5LCAweDUzLCAKKyAgICAgMHgyZiwgMHhjZiwgMHgwZSwgMHgyNCwgMHg0OSwgMHhhNiwgMHhiNSwgMHgyNSwgCisgICAgIDB4YjEsIDB4NmEsIDB4ZWQsIDB4ZjUsIDB4YWEsIDB4MGQsIDB4ZTYsIDB4NTcsIAorICAgICAweGJhLCAweDYzLCAweDdiLCAweDM5LCAgfSwKKyAgIDYwLAorCisgICAvKiBBREFUQSAqLworICAgeyAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAKKyAgICAgMHhmZSwgMHhlZCwgMHhmYSwgMHhjZSwgMHhkZSwgMHhhZCwgMHhiZSwgMHhlZiwgCisgICAgIDB4YWIsIDB4YWQsIDB4ZGEsIDB4ZDIsICB9LAorICAgMjAsCisKKyAgIC8qIElWICovCisgICB7IDB4Y2EsIDB4ZmUsIDB4YmEsIDB4YmUsIDB4ZmEsIDB4Y2UsIDB4ZGIsIDB4YWQsIH0sCisgICA4LAorCisgICAvKiBDVCAqLworICAgeyAweDYxLCAweDM1LCAweDNiLCAweDRjLCAweDI4LCAweDA2LCAweDkzLCAweDRhLCAKKyAgICAgMHg3NywgMHg3ZiwgMHhmNSwgMHgxZiwgMHhhMiwgMHgyYSwgMHg0NywgMHg1NSwgCisgICAgIDB4NjksIDB4OWIsIDB4MmEsIDB4NzEsIDB4NGYsIDB4Y2QsIDB4YzYsIDB4ZjgsIAorICAgICAweDM3LCAweDY2LCAweGU1LCAweGY5LCAweDdiLCAweDZjLCAweDc0LCAweDIzLCAKKyAgICAgMHg3MywgMHg4MCwgMHg2OSwgMHgwMCwgMHhlNCwgMHg5ZiwgMHgyNCwgMHhiMiwgCisgICAgIDB4MmIsIDB4MDksIDB4NzUsIDB4NDQsIDB4ZDQsIDB4ODksIDB4NmIsIDB4NDIsIAorICAgICAweDQ5LCAweDg5LCAweGI1LCAweGUxLCAweGViLCAweGFjLCAweDBmLCAweDA3LCAKKyAgICAgMHhjMiwgMHgzZiwgMHg0NSwgMHg5OCwgIH0sCisKKyAgIC8qIFRBRyAqLworICAgeyAweDM2LCAweDEyLCAweGQyLCAweGU3LCAweDllLCAweDNiLCAweDA3LCAweDg1LCAKKyAgICAgMHg1NiwgMHgxYiwgMHhlMSwgMHg0YSwgMHhhYywgMHhhMiwgMHhmYywgMHhjYiwgfQorfSwKKworLyogdGVzdCBjYXNlICM2ICovCit7CisgICAvKiBrZXkgKi8KKyAgIHsgMHhmZSwgMHhmZiwgMHhlOSwgMHg5MiwgMHg4NiwgMHg2NSwgMHg3MywgMHgxYywgCisgICAgIDB4NmQsIDB4NmEsIDB4OGYsIDB4OTQsIDB4NjcsIDB4MzAsIDB4ODMsIDB4MDgsIH0sCisgICAxNiwKKworICAgLyogUFQgKi8KKyAgIHsgMHhkOSwgMHgzMSwgMHgzMiwgMHgyNSwgMHhmOCwgMHg4NCwgMHgwNiwgMHhlNSwgCisgICAgIDB4YTUsIDB4NTksIDB4MDksIDB4YzUsIDB4YWYsIDB4ZjUsIDB4MjYsIDB4OWEsIAorICAgICAweDg2LCAweGE3LCAweGE5LCAweDUzLCAweDE1LCAweDM0LCAweGY3LCAweGRhLCAKKyAgICAgMHgyZSwgMHg0YywgMHgzMCwgMHgzZCwgMHg4YSwgMHgzMSwgMHg4YSwgMHg3MiwgCisgICAgIDB4MWMsIDB4M2MsIDB4MGMsIDB4OTUsIDB4OTUsIDB4NjgsIDB4MDksIDB4NTMsIAorICAgICAweDJmLCAweGNmLCAweDBlLCAweDI0LCAweDQ5LCAweGE2LCAweGI1LCAweDI1LCAKKyAgICAgMHhiMSwgMHg2YSwgMHhlZCwgMHhmNSwgMHhhYSwgMHgwZCwgMHhlNiwgMHg1NywgCisgICAgIDB4YmEsIDB4NjMsIDB4N2IsIDB4MzksICB9LAorICAgNjAsCisKKyAgIC8qIEFEQVRBICovCisgICB7IDB4ZmUsIDB4ZWQsIDB4ZmEsIDB4Y2UsIDB4ZGUsIDB4YWQsIDB4YmUsIDB4ZWYsIAorICAgICAweGZlLCAweGVkLCAweGZhLCAweGNlLCAweGRlLCAweGFkLCAweGJlLCAweGVmLCAKKyAgICAgMHhhYiwgMHhhZCwgMHhkYSwgMHhkMiwgIH0sCisgICAyMCwKKworICAgLyogSVYgKi8KKyAgIHsgMHg5MywgMHgxMywgMHgyMiwgMHg1ZCwgMHhmOCwgMHg4NCwgMHgwNiwgMHhlNSwgCisgICAgIDB4NTUsIDB4OTAsIDB4OWMsIDB4NWEsIDB4ZmYsIDB4NTIsIDB4NjksIDB4YWEsIAorICAgICAweDZhLCAweDdhLCAweDk1LCAweDM4LCAweDUzLCAweDRmLCAweDdkLCAweGExLCAKKyAgICAgMHhlNCwgMHhjMywgMHgwMywgMHhkMiwgMHhhMywgMHgxOCwgMHhhNywgMHgyOCwgCisgICAgIDB4YzMsIDB4YzAsIDB4YzksIDB4NTEsIDB4NTYsIDB4ODAsIDB4OTUsIDB4MzksIAorICAgICAweGZjLCAweGYwLCAweGUyLCAweDQyLCAweDlhLCAweDZiLCAweDUyLCAweDU0LCAKKyAgICAgMHgxNiwgMHhhZSwgMHhkYiwgMHhmNSwgMHhhMCwgMHhkZSwgMHg2YSwgMHg1NywgCisgICAgIDB4YTYsIDB4MzcsIDB4YjMsIDB4OWIsICB9LAorICAgNjAsCisKKyAgIC8qIENUICovCisgICB7IDB4OGMsIDB4ZTIsIDB4NDksIDB4OTgsIDB4NjIsIDB4NTYsIDB4MTUsIDB4YjYsIAorICAgICAweDAzLCAweGEwLCAweDMzLCAweGFjLCAweGExLCAweDNmLCAweGI4LCAweDk0LCAKKyAgICAgMHhiZSwgMHg5MSwgMHgxMiwgMHhhNSwgMHhjMywgMHhhMiwgMHgxMSwgMHhhOCwgCisgICAgIDB4YmEsIDB4MjYsIDB4MmEsIDB4M2MsIDB4Y2EsIDB4N2UsIDB4MmMsIDB4YTcsIAorICAgICAweDAxLCAweGU0LCAweGE5LCAweGE0LCAweGZiLCAweGE0LCAweDNjLCAweDkwLCAKKyAgICAgMHhjYywgMHhkYywgMHhiMiwgMHg4MSwgMHhkNCwgMHg4YywgMHg3YywgMHg2ZiwgCisgICAgIDB4ZDYsIDB4MjgsIDB4NzUsIDB4ZDIsIDB4YWMsIDB4YTQsIDB4MTcsIDB4MDMsIAorICAgICAweDRjLCAweDM0LCAweGFlLCAweGU1LCAgfSwKKworICAgLyogVEFHICovCisgICB7IDB4NjEsIDB4OWMsIDB4YzUsIDB4YWUsIDB4ZmYsIDB4ZmUsIDB4MGIsIDB4ZmEsIAorICAgICAweDQ2LCAweDJhLCAweGY0LCAweDNjLCAweDE2LCAweDk5LCAweGQwLCAweDUwLCB9Cit9LAorCisvKiB0ZXN0IGNhc2UgIzQ2IGZyb20gQkcgKGNhdGNoZXMgdGhlIExUQyBidWcgb2YgdjEuMTUpICovCit7CisgICAvKiBrZXkgKi8KKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKKyAgIDE2LAorCisgICAvKiBQVCAqLworICAgeyAweGEyLCAweGFhLCAweGIzLCAweGFkLCAweDhiLCAweDE3LCAweGFjLCAweGRkLCAKKyAgICAgMHhhMiwgMHg4OCwgMHg0MiwgMHg2YywgMHhkNywgMHhjNCwgMHgyOSwgMHhiNywgCisgICAgIDB4Y2EsIDB4ODYsIDB4YjcsIDB4YWMsIDB4YTAsIDB4NTgsIDB4MDksIDB4YzcsIAorICAgICAweDBjLCAweGU4LCAweDJkLCAweGIyLCAweDU3LCAweDExLCAweGNiLCAweDUzLAorICAgICAweDAyLCAweGViLCAweDI3LCAweDQzLCAweGIwLCAweDM2LCAweGYzLCAweGQ3LCAKKyAgICAgMHg1MCwgMHhkNiwgMHhjZiwgMHgwZCwgMHhjMCwgMHhhYywgMHhiOSwgMHgyOSwgCisgICAgIDB4NTAsIDB4ZDUsIDB4NDYsIDB4ZGIsIDB4MzAsIDB4OGYsIDB4OTMsIDB4YjQsIAorICAgICAweGZmLCAweDI0LCAweDRhLCAweGZhLCAweDlkLCAweGM3LCAweDJiLCAweGNkLAorICAgICAweDc1LCAweDhkLCAweDJjIH0sCisgICA2NywKKworICAgLyogQURBVEEgKi8KKyAgIHsgMHg2OCwgMHg4ZSwgMHgxYSwgMHhhOSwgMHg4NCwgMHhkZSwgMHg5MiwgMHg2ZCwgCisgICAgIDB4YzcsIDB4YjQsIDB4YzQsIDB4N2YsIDB4NDQgfSwKKyAgIDEzLCAgIAorCisgICAvKiBJViAqLworICAgeyAweGI3LCAweDIxLCAweDM4LCAweGI1LCAweGEwLCAweDVmLCAweGY1LCAweDA3LCAKKyAgICAgMHgwZSwgMHg4YywgMHhkOSwgMHg0MSwgMHg4MywgMHhmNywgMHg2MSwgMHhkOCB9LAorICAgMTYsCisKKyAgIC8qIENUICovCisgICB7IDB4Y2IsIDB4YzgsIDB4ZDIsIDB4ZjEsIDB4NTQsIDB4ODEsIDB4YTQsIDB4Y2MsIAorICAgICAweDdkLCAweGQxLCAweGUxLCAweDlhLCAweGFhLCAweDgzLCAweGRlLCAweDU2LCAKKyAgICAgMHg3OCwgMHg0OCwgMHgzZSwgMHhjMywgMHg1OSwgMHhhZSwgMHg3ZCwgMHhlYywgCisgICAgIDB4MmEsIDB4YjgsIDB4ZDUsIDB4MzQsIDB4ZTAsIDB4OTAsIDB4NmYsIDB4NGIsCisgICAgIDB4NDYsIDB4NjMsIDB4ZmEsIDB4ZmYsIDB4NTgsIDB4YTgsIDB4YjIsIDB4ZDcsIAorICAgICAweDMzLCAweGI4LCAweDQ1LCAweGVlLCAweGY3LCAweGM5LCAweGIzLCAweDMxLCAKKyAgICAgMHhlOSwgMHhlMSwgMHgwZSwgMHhiMiwgMHg2MSwgMHgyYywgMHg5OSwgMHg1ZiwgCisgICAgIDB4ZWIsIDB4MWEsIDB4YzEsIDB4NWEsIDB4NjIsIDB4ODYsIDB4Y2MsIDB4ZTgsCisgICAgIDB4YjIsIDB4OTcsIDB4YTggfSwKKworICAgLyogVEFHICovCisgICB7IDB4OGQsIDB4MmQsIDB4MmEsIDB4OTMsIDB4NzIsIDB4NjIsIDB4NmYsIDB4NmIsIAorICAgICAweGVlLCAweDg1LCAweDgwLCAweDI3LCAweDZhLCAweDYzLCAweDY2LCAweGJmIH0KK30KKworLyogcmVzdCBvZiB0ZXN0IGNhc2VzIGFyZSB0aGUgc2FtZSBleGNlcHQgQUVTIGtleSBzaXplIGNoYW5nZXMuLi4gaWdub3JlZC4uLiAqLworfTsKKyAgIGludCAgICAgICAgICAgaWR4LCBlcnI7CisgICB1bnNpZ25lZCBsb25nIHgsIHk7CisgICB1bnNpZ25lZCBjaGFyIG91dFsyXVsxMjhdLCBUWzJdWzE2XTsKKworICAgLyogZmluZCBhZXMgKi8KKyAgIGlkeCA9IGZpbmRfY2lwaGVyKCJhZXMiKTsKKyAgIGlmIChpZHggPT0gLTEpIHsKKyAgICAgIGlkeCA9IGZpbmRfY2lwaGVyKCJyaWpuZGFlbCIpOworICAgICAgaWYgKGlkeCA9PSAtMSkgeworICAgICAgICAgcmV0dXJuIENSWVBUX05PUDsKKyAgICAgIH0KKyAgIH0KKworICAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgeworICAgICAgIHkgPSBzaXplb2YoVFswXSk7CisgICAgICAgaWYgKChlcnIgPSBnY21fbWVtb3J5KGlkeCwgdGVzdHNbeF0uSywgdGVzdHNbeF0ua2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c1t4XS5JViwgdGVzdHNbeF0uSVZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzW3hdLkEsIHRlc3RzW3hdLmFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKil0ZXN0c1t4XS5QLCB0ZXN0c1t4XS5wdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0WzBdLCBUWzBdLCAmeSwgR0NNX0VOQ1JZUFQpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgfQorCisgICAgICAgaWYgKFhNRU1DTVAob3V0WzBdLCB0ZXN0c1t4XS5DLCB0ZXN0c1t4XS5wdGxlbikpIHsKKyNpZiAwCisgICAgICAgICAgcHJpbnRmKCJcbkNpcGhlcnRleHQgd3JvbmcgJWx1XG4iLCB4KTsKKyAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgdGVzdHNbeF0ucHRsZW47IHkrKykgeworICAgICAgICAgICAgICBwcmludGYoIiUwMngiLCBvdXRbMF1beV0gJiAyNTUpOworICAgICAgICAgIH0KKyAgICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgIH0KKworICAgICAgIGlmIChYTUVNQ01QKFRbMF0sIHRlc3RzW3hdLlQsIDE2KSkgeworI2lmIDAKKyAgICAgICAgICBwcmludGYoIlxuVGFnIG9uIHBsYWludGV4dCB3cm9uZyAlbHVcbiIsIHgpOworICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7CisgICAgICAgICAgICAgIHByaW50ZigiJTAyeCIsIFRbMF1beV0gJiAyNTUpOworICAgICAgICAgIH0KKyAgICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgIH0KKworICAgICAgIHkgPSBzaXplb2YoVFsxXSk7CisgICAgICAgaWYgKChlcnIgPSBnY21fbWVtb3J5KGlkeCwgdGVzdHNbeF0uSywgdGVzdHNbeF0ua2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0c1t4XS5JViwgdGVzdHNbeF0uSVZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzW3hdLkEsIHRlc3RzW3hdLmFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dFsxXSwgdGVzdHNbeF0ucHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dFswXSwgVFsxXSwgJnksIEdDTV9ERUNSWVBUKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgIH0KKworICAgICAgIGlmIChYTUVNQ01QKG91dFsxXSwgdGVzdHNbeF0uUCwgdGVzdHNbeF0ucHRsZW4pKSB7CisjaWYgMAorICAgICAgICAgIHByaW50ZigiXG5wbGFpbnRleHQgd3JvbmcgJWx1XG4iLCB4KTsKKyAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgdGVzdHNbeF0ucHRsZW47IHkrKykgeworICAgICAgICAgICAgICBwcmludGYoIiUwMngiLCBvdXRbMF1beV0gJiAyNTUpOworICAgICAgICAgIH0KKyAgICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgIH0KKworICAgICAgIGlmIChYTUVNQ01QKFRbMV0sIHRlc3RzW3hdLlQsIDE2KSkgeworI2lmIDAKKyAgICAgICAgICBwcmludGYoIlxuVGFnIG9uIGNpcGhlcnRleHQgd3JvbmcgJWx1XG4iLCB4KTsKKyAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkrKykgeworICAgICAgICAgICAgICBwcmludGYoIiUwMngiLCBUWzFdW3ldICYgMjU1KTsKKyAgICAgICAgICB9CisgICAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICB9CisKKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZgorfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9nY20vZ2NtX3Rlc3QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yMCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wMyAxNzoyNTo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHQuYyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZjM4MjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RlY3J5cHQuYwpAQCAtMCwwICsxLDc5IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKioKKyAgIEBmaWxlIG9jYl9kZWNyeXB0LmMKKyAgIE9DQiBpbXBsZW1lbnRhdGlvbiwgZGVjcnlwdCBkYXRhLCBieSBUb20gU3QgRGVuaXMgCisqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBPQ0JfTU9ERQorCisvKioKKyAgRGVjcnlwdCBhIGJsb2NrIHdpdGggT0NCLgorICBAcGFyYW0gb2NiICAgIFRoZSBPQ0Igc3RhdGUKKyAgQHBhcmFtIGN0ICAgICBUaGUgY2lwaGVydGV4dCAobGVuZ3RoIG9mIHRoZSBibG9jayBzaXplIG9mIHRoZSBibG9jayBjaXBoZXIpCisgIEBwYXJhbSBwdCAgICAgW291dF0gVGhlIHBsYWludGV4dCAobGVuZ3RoIG9mIGN0KQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgb2NiX2RlY3J5cHQob2NiX3N0YXRlICpvY2IsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCkKK3sKKyAgIHVuc2lnbmVkIGNoYXIgWltNQVhCTE9DS1NJWkVdLCB0bXBbTUFYQkxPQ0tTSVpFXTsKKyAgIGludCBlcnIsIHg7CisKKyAgIExUQ19BUkdDSEsob2NiICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwdCAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAhPSBOVUxMKTsKKworICAgLyogY2hlY2sgaWYgdmFsaWQgY2lwaGVyICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChvY2ItPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgTFRDX0FSR0NISyhjaXBoZXJfZGVzY3JpcHRvcltvY2ItPmNpcGhlcl0uZWNiX2RlY3J5cHQgIT0gTlVMTCk7CisgICAKKyAgIC8qIGNoZWNrIGxlbmd0aCAqLworICAgaWYgKG9jYi0+YmxvY2tfbGVuICE9IGNpcGhlcl9kZXNjcmlwdG9yW29jYi0+Y2lwaGVyXS5ibG9ja19sZW5ndGgpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgLyogR2V0IFpbaV0gdmFsdWUgKi8KKyAgIG9jYl9zaGlmdF94b3Iob2NiLCBaKTsKKworICAgLyogeG9yIGN0IGluLCBlbmNyeXB0LCB4b3IgWiBvdXQgKi8KKyAgIGZvciAoeCA9IDA7IHggPCBvY2ItPmJsb2NrX2xlbjsgeCsrKSB7CisgICAgICAgdG1wW3hdID0gY3RbeF0gXiBaW3hdOworICAgfQorICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltvY2ItPmNpcGhlcl0uZWNiX2RlY3J5cHQodG1wLCBwdCwgJm9jYi0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBmb3IgKHggPSAwOyB4IDwgb2NiLT5ibG9ja19sZW47IHgrKykgeworICAgICAgIHB0W3hdIF49IFpbeF07CisgICB9CisKKyAgIC8qIGNvbXB1dGUgY2hlY2tzdW0gKi8KKyAgIGZvciAoeCA9IDA7IHggPCBvY2ItPmJsb2NrX2xlbjsgeCsrKSB7CisgICAgICAgb2NiLT5jaGVja3N1bVt4XSBePSBwdFt4XTsKKyAgIH0KKworCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKFosIHNpemVvZihaKSk7CisgICB6ZXJvbWVtKHRtcCwgc2l6ZW9mKHRtcCkpOworI2VuZGlmCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkuYyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdF92ZXJpZnlfbWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdiODg0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdF92ZXJpZnlfbWVtb3J5LmMKQEAgLTAsMCArMSw4NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqIAorICBAZmlsZSBvY2JfZGVjcnlwdF92ZXJpZnlfbWVtb3J5LmMKKyAgT0NCIGltcGxlbWVudGF0aW9uLCBoZWxwZXIgdG8gZGVjcnlwdCBibG9jayBvZiBtZW1vcnksIGJ5IFRvbSBTdCBEZW5pcyAKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIE9DQl9NT0RFCisKKy8qKgorICAgRGVjcnlwdCBhbmQgY29tcGFyZSB0aGUgdGFnIHdpdGggT0NCLgorICAgQHBhcmFtIGNpcGhlciAgICAgVGhlIGluZGV4IG9mIHRoZSBjaXBoZXIgZGVzaXJlZAorICAgQHBhcmFtIGtleSAgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgIEBwYXJhbSBrZXlsZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEBwYXJhbSBub25jZSAgICAgIFRoZSBzZXNzaW9uIG5vbmNlIChsZW5ndGggb2YgdGhlIGJsb2NrIHNpemUgb2YgdGhlIGJsb2NrIGNpcGhlcikKKyAgIEBwYXJhbSBjdCAgICAgICAgIFRoZSBjaXBoZXJ0ZXh0CisgICBAcGFyYW0gY3RsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBjaXBoZXJ0ZXh0IChvY3RldHMpCisgICBAcGFyYW0gcHQgICAgICAgICBbb3V0XSBUaGUgcGxhaW50ZXh0CisgICBAcGFyYW0gdGFnICAgICAgICBUaGUgdGFnIHRvIGNvbXBhcmUgYWdhaW5zdAorICAgQHBhcmFtIHRhZ2xlbiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgdGFnIChvY3RldHMpCisgICBAcGFyYW0gc3RhdCAgICAgICBbb3V0XSBUaGUgcmVzdWx0IG9mIHRoZSB0YWcgY29tcGFyaXNvbiAoMT09dmFsaWQsIDA9PWludmFsaWQpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwgcmVnYXJkbGVzcyBvZiB0aGUgdGFnIGNvbXBhcmlzb24KKyovCitpbnQgb2NiX2RlY3J5cHRfdmVyaWZ5X21lbW9yeShpbnQgY2lwaGVyLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgICAgIHVuc2lnbmVkIGxvbmcgY3RsZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGFnLCAgICB1bnNpZ25lZCBsb25nIHRhZ2xlbiwKKyAgICAgICAgICBpbnQgICAgICAgICAgICpzdGF0KQoreworICAgaW50IGVycjsKKyAgIG9jYl9zdGF0ZSAqb2NiOworCisgICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobm9uY2UgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwdCAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsodGFnICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhzdGF0ICAgICE9IE5VTEwpOworCisgICAvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KKyAgIG9jYiA9IFhNQUxMT0Moc2l6ZW9mKG9jYl9zdGF0ZSkpOworICAgaWYgKG9jYiA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICBpZiAoKGVyciA9IG9jYl9pbml0KG9jYiwgY2lwaGVyLCBrZXksIGtleWxlbiwgbm9uY2UpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOyAKKyAgIH0KKworICAgd2hpbGUgKGN0bGVuID4gKHVuc2lnbmVkIGxvbmcpb2NiLT5ibG9ja19sZW4pIHsKKyAgICAgICAgaWYgKChlcnIgPSBvY2JfZGVjcnlwdChvY2IsIGN0LCBwdCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBnb3RvIExCTF9FUlI7IAorICAgICAgICB9CisgICAgICAgIGN0bGVuICAgLT0gb2NiLT5ibG9ja19sZW47CisgICAgICAgIHB0ICAgICAgKz0gb2NiLT5ibG9ja19sZW47CisgICAgICAgIGN0ICAgICAgKz0gb2NiLT5ibG9ja19sZW47CisgICB9CisKKyAgIGVyciA9IG9jYl9kb25lX2RlY3J5cHQob2NiLCBjdCwgY3RsZW4sIHB0LCB0YWcsIHRhZ2xlbiwgc3RhdCk7CitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShvY2IsIHNpemVvZihvY2Jfc3RhdGUpKTsKKyNlbmRpZgorIAorICAgWEZSRUUob2NiKTsKKworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfZGVjcnlwdF92ZXJpZnlfbWVtb3J5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZGVjcnlwdC5jIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2RlY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTNhZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2RlY3J5cHQuYwpAQCAtMCwwICsxLDgwIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiogCisgICBAZmlsZSBvY2JfZG9uZV9kZWNyeXB0LmMKKyAgIE9DQiBpbXBsZW1lbnRhdGlvbiwgdGVybWluYXRlIGRlY3J5cHRpb24sIGJ5IFRvbSBTdCBEZW5pcworKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgT0NCX01PREUKKworLyoqCisgICBUZXJtaW5hdGUgYSBkZWNyeXB0aW5nIE9DQiBzdGF0ZQorICAgQHBhcmFtIG9jYiAgICBUaGUgT0NCIHN0YXRlCisgICBAcGFyYW0gY3QgICAgIFRoZSBjaXBoZXJ0ZXh0IChpZiBhbnkpCisgICBAcGFyYW0gY3RsZW4gIFRoZSBsZW5ndGggb2YgdGhlIGNpcGhlcnRleHQgKG9jdGV0cykKKyAgIEBwYXJhbSBwdCAgICAgW291dF0gVGhlIHBsYWludGV4dAorICAgQHBhcmFtIHRhZyAgICBUaGUgYXV0aGVudGljYXRpb24gdGFnICh0byBjb21wYXJlIGFnYWluc3QpCisgICBAcGFyYW0gdGFnbGVuIFRoZSBsZW5ndGggb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBwcm92aWRlZAorICAgQHBhcmFtIHN0YXQgICAgW291dF0gVGhlIHJlc3VsdCBvZiB0aGUgdGFnIGNvbXBhcmlzb24KKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgdGhlIHByb2Nlc3Mgd2FzIHN1Y2Nlc3NmdWwgcmVnYXJkbGVzcyBpZiB0aGUgdGFnIGlzIHZhbGlkCisqLworaW50IG9jYl9kb25lX2RlY3J5cHQob2NiX3N0YXRlICpvY2IsIAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3QsICB1bnNpZ25lZCBsb25nIGN0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsIAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGFnLCB1bnNpZ25lZCBsb25nIHRhZ2xlbiwgaW50ICpzdGF0KQoreworICAgaW50IGVycjsKKyAgIHVuc2lnbmVkIGNoYXIgKnRhZ2J1ZjsKKyAgIHVuc2lnbmVkIGxvbmcgdGFnYnVmbGVuOworCisgICBMVENfQVJHQ0hLKG9jYiAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHB0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHRhZyAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHN0YXQgIT0gTlVMTCk7CisKKyAgIC8qIGRlZmF1bHQgdG8gZmFpbGVkICovCisgICAqc3RhdCA9IDA7CisKKyAgIC8qIGFsbG9jYXRlIG1lbW9yeSAqLworICAgdGFnYnVmID0gWE1BTExPQyhNQVhCTE9DS1NJWkUpOworICAgaWYgKHRhZ2J1ZiA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICB0YWdidWZsZW4gPSBNQVhCTE9DS1NJWkU7CisgICBpZiAoKGVyciA9IHNfb2NiX2RvbmUob2NiLCBjdCwgY3RsZW4sIHB0LCB0YWdidWYsICZ0YWdidWZsZW4sIDEpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICBpZiAodGFnbGVuIDw9IHRhZ2J1ZmxlbiAmJiBYTUVNQ01QKHRhZ2J1ZiwgdGFnLCB0YWdsZW4pID09IDApIHsKKyAgICAgICpzdGF0ID0gMTsKKyAgIH0KKworICAgZXJyID0gQ1JZUFRfT0s7CitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbSh0YWdidWYsIE1BWEJMT0NLU0laRSk7CisjZW5kaWYKKworICAgWEZSRUUodGFnYnVmKTsKKworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2RlY3J5cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfZG9uZV9lbmNyeXB0LmMgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZW5jcnlwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NDhkODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX2RvbmVfZW5jcnlwdC5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qKiAKKyAgIEBmaWxlIG9jYl9kb25lX2VuY3J5cHQuYworICAgT0NCIGltcGxlbWVudGF0aW9uLCB0ZXJtaW5hdGUgZW5jcnlwdGlvbiwgYnkgVG9tIFN0IERlbmlzCisqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBPQ0JfTU9ERQorCisvKiogCisgICBUZXJtaW5hdGUgYW4gZW5jcnlwdGlvbiBPQ0Igc3RhdGUKKyAgIEBwYXJhbSBvY2IgICAgICAgVGhlIE9DQiBzdGF0ZQorICAgQHBhcmFtIHB0ICAgICAgICBSZW1haW5pbmcgcGxhaW50ZXh0IChpZiBhbnkpCisgICBAcGFyYW0gcHRsZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIHBsYWludGV4dCAob2N0ZXRzKQorICAgQHBhcmFtIGN0ICAgICAgICBbb3V0XSBUaGUgY2lwaGVydGV4dCAoaWYgYW55KQorICAgQHBhcmFtIHRhZyAgICAgICBbb3V0XSBUaGUgdGFnIGZvciB0aGUgT0NCIHN0cmVhbQorICAgQHBhcmFtIHRhZ2xlbiAgICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSB0YWcKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBvY2JfZG9uZV9lbmNyeXB0KG9jYl9zdGF0ZSAqb2NiLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgbG9uZyBwdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICp0YWcsIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbikKK3sKKyAgIExUQ19BUkdDSEsob2NiICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwdCAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsodGFnICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyh0YWdsZW4gIT0gTlVMTCk7CisgICByZXR1cm4gc19vY2JfZG9uZShvY2IsIHB0LCBwdGxlbiwgY3QsIHRhZywgdGFnbGVuLCAwKTsKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9kb25lX2VuY3J5cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfZW5jcnlwdC5jIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0OTkxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfZW5jcnlwdC5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qKiAKKyAgIEBmaWxlIG9jYl9lbmNyeXB0LmMKKyAgIE9DQiBpbXBsZW1lbnRhdGlvbiwgZW5jcnlwdCBkYXRhLCBieSBUb20gU3QgRGVuaXMKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIE9DQl9NT0RFCisKKy8qKgorICAgRW5jcnlwdCBhIGJsb2NrIG9mIGRhdGEgd2l0aCBPQ0IuCisgICBAcGFyYW0gb2NiICAgICBUaGUgT0NCIHN0YXRlCisgICBAcGFyYW0gcHQgICAgICBUaGUgcGxhaW50ZXh0IChsZW5ndGggb2YgdGhlIGJsb2NrIHNpemUgb2YgdGhlIGJsb2NrIGNpcGhlcikKKyAgIEBwYXJhbSBjdCAgICAgIFtvdXRdIFRoZSBjaXBoZXJ0ZXh0IChzYW1lIHNpemUgYXMgdGhlIHB0KQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IG9jYl9lbmNyeXB0KG9jYl9zdGF0ZSAqb2NiLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QpCit7CisgICB1bnNpZ25lZCBjaGFyIFpbTUFYQkxPQ0tTSVpFXSwgdG1wW01BWEJMT0NLU0laRV07CisgICBpbnQgZXJyLCB4OworCisgICBMVENfQVJHQ0hLKG9jYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsocHQgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAgIT0gTlVMTCk7CisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChvY2ItPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaWYgKG9jYi0+YmxvY2tfbGVuICE9IGNpcGhlcl9kZXNjcmlwdG9yW29jYi0+Y2lwaGVyXS5ibG9ja19sZW5ndGgpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgLyogY29tcHV0ZSBjaGVja3N1bSAqLworICAgZm9yICh4ID0gMDsgeCA8IG9jYi0+YmxvY2tfbGVuOyB4KyspIHsKKyAgICAgICBvY2ItPmNoZWNrc3VtW3hdIF49IHB0W3hdOworICAgfQorCisgICAvKiBHZXQgWltpXSB2YWx1ZSAqLworICAgb2NiX3NoaWZ0X3hvcihvY2IsIFopOworCisgICAvKiB4b3IgcHQgaW4sIGVuY3J5cHQsIHhvciBaIG91dCAqLworICAgZm9yICh4ID0gMDsgeCA8IG9jYi0+YmxvY2tfbGVuOyB4KyspIHsKKyAgICAgICB0bXBbeF0gPSBwdFt4XSBeIFpbeF07CisgICB9CisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW29jYi0+Y2lwaGVyXS5lY2JfZW5jcnlwdCh0bXAsIGN0LCAmb2NiLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGZvciAoeCA9IDA7IHggPCBvY2ItPmJsb2NrX2xlbjsgeCsrKSB7CisgICAgICAgY3RbeF0gXj0gWlt4XTsKKyAgIH0KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShaLCBzaXplb2YoWikpOworICAgemVyb21lbSh0bXAsIHNpemVvZih0bXApKTsKKyNlbmRpZgorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeS5jIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTg5NzVlCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkuYwpAQCAtMCwwICsxLDg0IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiogCisgIEBmaWxlIG9jYl9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkuYworICBPQ0IgaW1wbGVtZW50YXRpb24sIGVuY3J5cHQgYmxvY2sgb2YgbWVtb3J5LCBieSBUb20gU3QgRGVuaXMKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIE9DQl9NT0RFCisKKy8qKgorICAgRW5jcnlwdCBhbmQgZ2VuZXJhdGUgYW4gYXV0aGVudGljYXRpb24gY29kZSBmb3IgYSBidWZmZXIgb2YgbWVtb3J5CisgICBAcGFyYW0gY2lwaGVyICAgICBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBkZXNpcmVkCisgICBAcGFyYW0ga2V5ICAgICAgICBUaGUgc2VjcmV0IGtleQorICAgQHBhcmFtIGtleWxlbiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgQHBhcmFtIG5vbmNlICAgICAgVGhlIHNlc3Npb24gbm9uY2UgKGxlbmd0aCBvZiB0aGUgYmxvY2sgY2lwaGVycyBibG9jayBzaXplKQorICAgQHBhcmFtIHB0ICAgICAgICAgVGhlIHBsYWludGV4dAorICAgQHBhcmFtIHB0bGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IChvY3RldHMpCisgICBAcGFyYW0gY3QgICAgICAgICBbb3V0XSBUaGUgY2lwaGVydGV4dAorICAgQHBhcmFtIHRhZyAgICAgICAgW291dF0gVGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHBhcmFtIHRhZ2xlbiAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeShpbnQgY2lwaGVyLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgICAgIHVuc2lnbmVkIGxvbmcgcHRsZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqdGFnLCAgICB1bnNpZ25lZCBsb25nICp0YWdsZW4pCit7CisgICBpbnQgZXJyOworICAgb2NiX3N0YXRlICpvY2I7CisKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhub25jZSAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHB0ICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3QgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyh0YWcgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHRhZ2xlbiAhPSBOVUxMKTsKKworICAgLyogYWxsb2NhdGUgcmFtICovCisgICBvY2IgPSBYTUFMTE9DKHNpemVvZihvY2Jfc3RhdGUpKTsKKyAgIGlmIChvY2IgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgaWYgKChlcnIgPSBvY2JfaW5pdChvY2IsIGNpcGhlciwga2V5LCBrZXlsZW4sIG5vbmNlKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgd2hpbGUgKHB0bGVuID4gKHVuc2lnbmVkIGxvbmcpb2NiLT5ibG9ja19sZW4pIHsKKyAgICAgICAgaWYgKChlcnIgPSBvY2JfZW5jcnlwdChvY2IsIHB0LCBjdCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgfQorICAgICAgICBwdGxlbiAgIC09IG9jYi0+YmxvY2tfbGVuOworICAgICAgICBwdCAgICAgICs9IG9jYi0+YmxvY2tfbGVuOworICAgICAgICBjdCAgICAgICs9IG9jYi0+YmxvY2tfbGVuOworICAgfQorCisgICBlcnIgPSBvY2JfZG9uZV9lbmNyeXB0KG9jYiwgcHQsIHB0bGVuLCBjdCwgdGFnLCB0YWdsZW4pOworTEJMX0VSUjoKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0ob2NiLCBzaXplb2Yob2NiX3N0YXRlKSk7CisjZW5kaWYKKworICAgWEZSRUUob2NiKTsKKworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX2luaXQuYyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNmFmODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX2luaXQuYwpAQCAtMCwwICsxLDEzNyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqCisgICBAZmlsZSBvY2JfaW5pdC5jCisgICBPQ0IgaW1wbGVtZW50YXRpb24sIGluaXRpYWxpemUgc3RhdGUsIGJ5IFRvbSBTdCBEZW5pcworKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgT0NCX01PREUKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgaW50ICAgICAgICAgICBsZW47CisgICAgdW5zaWduZWQgY2hhciBwb2x5X2RpdltNQVhCTE9DS1NJWkVdLCAKKyAgICAgICAgICAgICAgICAgIHBvbHlfbXVsW01BWEJMT0NLU0laRV07Cit9IHBvbHlzW10gPSB7Cit7CisgICAgOCwKKyAgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MEQgfSwKKyAgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MUIgfQorfSwgeworICAgIDE2LCAKKyAgICB7IDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDQzIH0sCisgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NyB9Cit9Cit9OworCisvKioKKyAgSW5pdGlhbGl6ZSBhbiBPQ0IgY29udGV4dC4KKyAgQHBhcmFtIG9jYiAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBPQ0Igc3RhdGUKKyAgQHBhcmFtIGNpcGhlciAgVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGNpcGhlcgorICBAcGFyYW0ga2V5ICAgICBUaGUgc2VjcmV0IGtleQorICBAcGFyYW0ga2V5bGVuICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQga2V5IChvY3RldHMpCisgIEBwYXJhbSBub25jZSAgIFRoZSBzZXNzaW9uIG5vbmNlIChsZW5ndGggb2YgdGhlIGJsb2NrIHNpemUgb2YgdGhlIGNpcGhlcikKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IG9jYl9pbml0KG9jYl9zdGF0ZSAqb2NiLCBpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLCBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSkKK3sKKyAgIGludCBwb2x5LCB4LCB5LCBtLCBlcnI7CisKKyAgIExUQ19BUkdDSEsob2NiICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhub25jZSAhPSBOVUxMKTsKKworICAgLyogdmFsaWQgY2lwaGVyPyAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIGRldGVybWluZSB3aGljaCBwb2x5cyB0byB1c2UgKi8KKyAgIG9jYi0+YmxvY2tfbGVuID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5ibG9ja19sZW5ndGg7CisgICBmb3IgKHBvbHkgPSAwOyBwb2x5IDwgKGludCkoc2l6ZW9mKHBvbHlzKS9zaXplb2YocG9seXNbMF0pKTsgcG9seSsrKSB7CisgICAgICAgaWYgKHBvbHlzW3BvbHldLmxlbiA9PSBvY2ItPmJsb2NrX2xlbikgeyAKKyAgICAgICAgICBicmVhazsKKyAgICAgICB9CisgICB9CisgICBpZiAocG9seXNbcG9seV0ubGVuICE9IG9jYi0+YmxvY2tfbGVuKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9ICAgCisKKyAgIC8qIHNjaGVkdWxlIHRoZSBrZXkgKi8KKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5zZXR1cChrZXksIGtleWxlbiwgMCwgJm9jYi0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgCisgICAvKiBmaW5kIEwgPSBFWzBdICovCisgICB6ZXJvbWVtKG9jYi0+TCwgb2NiLT5ibG9ja19sZW4pOworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KG9jYi0+TCwgb2NiLT5MLCAmb2NiLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogZmluZCBSID0gRVtOIHhvciBMXSAqLworICAgZm9yICh4ID0gMDsgeCA8IG9jYi0+YmxvY2tfbGVuOyB4KyspIHsKKyAgICAgICBvY2ItPlJbeF0gPSBvY2ItPkxbeF0gXiBub25jZVt4XTsKKyAgIH0KKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5lY2JfZW5jcnlwdChvY2ItPlIsIG9jYi0+UiwgJm9jYi0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIGZpbmQgTHNbaV0gPSBMIDw8IGkgZm9yIGkgPT0gMC4uMzEgKi8KKyAgIFhNRU1DUFkob2NiLT5Mc1swXSwgb2NiLT5MLCBvY2ItPmJsb2NrX2xlbik7CisgICBmb3IgKHggPSAxOyB4IDwgMzI7IHgrKykgeworICAgICAgIG0gPSBvY2ItPkxzW3gtMV1bMF0gPj4gNzsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgb2NiLT5ibG9ja19sZW4tMTsgeSsrKSB7CisgICAgICAgICAgIG9jYi0+THNbeF1beV0gPSAoKG9jYi0+THNbeC0xXVt5XSA8PCAxKSB8IChvY2ItPkxzW3gtMV1beSsxXSA+PiA3KSkgJiAyNTU7CisgICAgICAgfQorICAgICAgIG9jYi0+THNbeF1bb2NiLT5ibG9ja19sZW4tMV0gPSAob2NiLT5Mc1t4LTFdW29jYi0+YmxvY2tfbGVuLTFdIDw8IDEpICYgMjU1OworCisgICAgICAgaWYgKG0gPT0gMSkgeworICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBvY2ItPmJsb2NrX2xlbjsgeSsrKSB7CisgICAgICAgICAgICAgIG9jYi0+THNbeF1beV0gXj0gcG9seXNbcG9seV0ucG9seV9tdWxbeV07CisgICAgICAgICAgfQorICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBmaW5kIExyID0gTCAvIHggKi8KKyAgICBtID0gb2NiLT5MW29jYi0+YmxvY2tfbGVuLTFdICYgMTsKKworICAgIC8qIHNoaWZ0IHJpZ2h0ICovCisgICAgZm9yICh4ID0gb2NiLT5ibG9ja19sZW4gLSAxOyB4ID4gMDsgeC0tKSB7CisgICAgICAgIG9jYi0+THJbeF0gPSAoKG9jYi0+TFt4XSA+PiAxKSB8IChvY2ItPkxbeC0xXSA8PCA3KSkgJiAyNTU7CisgICAgfQorICAgIG9jYi0+THJbMF0gPSBvY2ItPkxbMF0gPj4gMTsKKworICAgIGlmIChtID09IDEpIHsKKyAgICAgICBmb3IgKHggPSAwOyB4IDwgb2NiLT5ibG9ja19sZW47IHgrKykgeworICAgICAgICAgICBvY2ItPkxyW3hdIF49IHBvbHlzW3BvbHldLnBvbHlfZGl2W3hdOworICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBzZXQgTGksIGNoZWNrc3VtICovCisgICAgemVyb21lbShvY2ItPkxpLCAgICAgICBvY2ItPmJsb2NrX2xlbik7CisgICAgemVyb21lbShvY2ItPmNoZWNrc3VtLCBvY2ItPmJsb2NrX2xlbik7CisKKyAgICAvKiBzZXQgb3RoZXIgcGFyYW1zICovCisgICAgb2NiLT5ibG9ja19pbmRleCA9IDE7CisgICAgb2NiLT5jaXBoZXIgICAgICA9IGNpcGhlcjsKKworICAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfaW5pdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9udHouYyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfbnR6LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODEwMGVjMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2JfbnR6LmMKQEAgLTAsMCArMSw0MiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqCisgICBAZmlsZSBvY2JfbnR6LmMKKyAgIE9DQiBpbXBsZW1lbnRhdGlvbiwgaW50ZXJuYWwgZnVuY3Rpb24sIGJ5IFRvbSBTdCBEZW5pcworKi8KKworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBPQ0JfTU9ERQorCisvKioKKyAgIFJldHVybnMgdGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm8gYml0cyBbZnJvbSBsc2IgdXBdCisgICBAcGFyYW0geCAgVGhlIDMyLWJpdCB2YWx1ZSB0byBvYnNlcnZlCisgICBAcmV0dXJuICAgVGhlIG51bWJlciBvZiBiaXRzIFtmcm9tIHRoZSBsc2IgdXBdIHRoYXQgYXJlIHplcm8KKyovCitpbnQgb2NiX250eih1bnNpZ25lZCBsb25nIHgpCit7CisgICBpbnQgYzsKKyAgIHggJj0gMHhGRkZGRkZGRlVMOworICAgYyA9IDA7CisgICB3aGlsZSAoKHggJiAxKSA9PSAwKSB7CisgICAgICArK2M7CisgICAgICB4ID4+PSAxOworICAgfQorICAgcmV0dXJuIGM7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX250ei5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl9zaGlmdF94b3IuYyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2Jfc2hpZnRfeG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVhNDNlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9lbmNhdXRoL29jYi9vY2Jfc2hpZnRfeG9yLmMKQEAgLTAsMCArMSwzOSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqIAorICAgQGZpbGUgb2NiX3NoaWZ0X3hvci5jCisgICBPQ0IgaW1wbGVtZW50YXRpb24sIGludGVybmFsIGZ1bmN0aW9uLCBieSBUb20gU3QgRGVuaXMKKyovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIE9DQl9NT0RFCisKKy8qKgorICAgQ29tcHV0ZSB0aGUgc2hpZnQveG9yIGZvciBPQ0IgKGludGVybmFsIGZ1bmN0aW9uKQorICAgQHBhcmFtIG9jYiAgVGhlIE9DQiBzdGF0ZSAKKyAgIEBwYXJhbSBaICAgIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgc2hpZnQKKyovCit2b2lkIG9jYl9zaGlmdF94b3Iob2NiX3N0YXRlICpvY2IsIHVuc2lnbmVkIGNoYXIgKlopCit7CisgICBpbnQgeCwgeTsKKyAgIHkgPSBvY2JfbnR6KG9jYi0+YmxvY2tfaW5kZXgrKyk7CisgICBmb3IgKHggPSAwOyB4IDwgb2NiLT5ibG9ja19sZW47IHgrKykgeworICAgICAgIG9jYi0+TGlbeF0gXj0gb2NiLT5Mc1t5XVt4XTsKKyAgICAgICBaW3hdICAgICAgICA9IG9jYi0+TGlbeF0gXiBvY2ItPlJbeF07CisgICB9Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX3NoaWZ0X3hvci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl90ZXN0LmMgYi9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivb2NiX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDdlZDc4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl90ZXN0LmMKQEAgLTAsMCArMSwyMzcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qKiAKKyAgIEBmaWxlIG9jYl90ZXN0LmMKKyAgIE9DQiBpbXBsZW1lbnRhdGlvbiwgc2VsZi10ZXN0IGJ5IFRvbSBTdCBEZW5pcworKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgT0NCX01PREUKKworLyoqIAorICBUZXN0IHRoZSBPQ0IgcHJvdG9jb2wKKyAgQHJldHVybiAgIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgb2NiX3Rlc3Qodm9pZCkKK3sKKyNpZm5kZWYgTFRDX1RFU1QKKyAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgICBpbnQgcHRsZW47CisgICAgICAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl0sIG5vbmNlWzE2XSwgcHRbMzRdLCBjdFszNF0sIHRhZ1sxNl07CisgICB9IHRlc3RzW10gPSB7CisKKyAgIC8qIE9DQi1BRVMtMTI4LTBCICovCit7CisgICAwLAorICAgLyoga2V5ICovCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKyAgIC8qIG5vbmNlICovCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSwKKyAgIC8qIHB0ICovCisgICB7IDAgfSwKKyAgIC8qIGN0ICovCisgICB7IDAgfSwKKyAgIC8qIHRhZyAqLworICAgeyAweDE1LCAweGQzLCAweDdkLCAweGQ3LCAweGM4LCAweDkwLCAweGQ1LCAweGQ2LAorICAgICAweGFjLCAweGFiLCAweDkyLCAweDdiLCAweGMwLCAweGRjLCAweDYwLCAweGVlIH0sCit9LAorCisKKyAgIC8qIE9DQi1BRVMtMTI4LTNCICovCit7CisgICAzLCAKKyAgIC8qIGtleSAqLworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisgICAvKiBub25jZSAqLworICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0sCisgICAvKiBwdCAqLworICAgeyAweDAwLCAweDAxLCAweDAyIH0sCisgICAvKiBjdCAqLworICAgeyAweGZjLCAweGQzLCAweDdkIH0sCisgICAvKiB0YWcgKi8KKyAgIHsgMHgwMiwgMHgyNSwgMHg0NywgMHgzOSwgMHhhNSwgMHhlMywgMHg1NiwgMHg1YSwKKyAgICAgMHhlMiwgMHhkYywgMHhkNiwgMHgyYywgMHg2NSwgMHg5NywgMHg0NiwgMHhiYSB9LAorfSwKKworICAgLyogT0NCLUFFUy0xMjgtMTZCICovCit7CisgICAxNiwgCisgICAvKiBrZXkgKi8KKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorICAgLyogbm9uY2UgKi8KKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9LAorICAgLyogcHQgKi8KKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorICAgLyogY3QgKi8KKyAgIHsgMHgzNywgMHhkZiwgMHg4YywgMHhlMSwgMHg1YiwgMHg0OCwgMHg5YiwgMHhmMywKKyAgICAgMHgxZCwgMHgwZiwgMHhjNCwgMHg0ZCwgMHhhMSwgMHhmYSwgMHhmNiwgMHhkNiB9LAorICAgLyogdGFnICovCisgICB7IDB4ZGYsIDB4YjcsIDB4NjMsIDB4ZWIsIDB4ZGIsIDB4NWYsIDB4MGUsIDB4NzEsCisgICAgIDB4OWMsIDB4N2IsIDB4NDEsIDB4NjEsIDB4ODAsIDB4ODAsIDB4MDQsIDB4ZGYgfSwKK30sCisKKyAgIC8qIE9DQi1BRVMtMTI4LTIwQiAgKi8KK3sKKyAgIDIwLCAKKyAgIC8qIGtleSAqLworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisgICAvKiBub25jZSAqLworICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxIH0sCisgICAvKiBwdCAqLworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAKKyAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMyB9LAorICAgLyogY3QgKi8KKyAgIHsgMHgwMSwgMHhhMCwgMHg3NSwgMHhmMCwgMHhkOCwgMHgxNSwgMHhiMSwgMHhhNCwKKyAgICAgMHhlOSwgMHhjOCwgMHg4MSwgMHhhMSwgMHhiYywgMHhmZiwgMHhjMywgMHhlYiwKKyAgICAgMHg3MCwgMHgwMywgMHhlYiwgMHg1NX0sCisgICAvKiB0YWcgKi8KKyAgIHsgMHg3NSwgMHgzMCwgMHg4NCwgMHgxNCwgMHg0ZSwgMHhiNiwgMHgzYiwgMHg3NywKKyAgICAgMHgwYiwgMHgwNiwgMHgzYywgMHgyZSwgMHgyMywgMHhjZCwgMHhhMCwgMHhiYiB9LAorfSwKKworICAgLyogT0NCLUFFUy0xMjgtMzJCICAqLworeworICAgMzIsIAorICAgLyoga2V5ICovCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKyAgIC8qIG5vbmNlICovCisgICB7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEgfSwKKyAgIC8qIHB0ICovCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIAorICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmIH0sCisgICAvKiBjdCAqLworICAgeyAweDAxLCAweGEwLCAweDc1LCAweGYwLCAweGQ4LCAweDE1LCAweGIxLCAweGE0LAorICAgICAweGU5LCAweGM4LCAweDgxLCAweGExLCAweGJjLCAweGZmLCAweGMzLCAweGViLAorICAgICAweDRhLCAweGZjLCAweGJiLCAweDdmLCAweGVkLCAweGMwLCAweDhjLCAweGE4LAorICAgICAweDY1LCAweDRjLCAweDZkLCAweDMwLCAweDRkLCAweDE2LCAweDEyLCAweGZhIH0sCisKKyAgIC8qIHRhZyAqLworICAgeyAweGMxLCAweDRjLCAweGJmLCAweDJjLCAweDFhLCAweDFmLCAweDFjLCAweDNjLAorICAgICAweDEzLCAweDdlLCAweGFkLCAweGVhLCAweDFmLCAweDJmLCAweDJmLCAweGNmIH0sCit9LAorCisgICAvKiBPQ0ItQUVTLTEyOC0zNEIgICovCit7CisgICAzNCwgCisgICAvKiBrZXkgKi8KKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorICAgLyogbm9uY2UgKi8KKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSB9LAorICAgLyogcHQgKi8KKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwgCisgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisgICAgIDB4MTgsIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsCisgICAgIDB4MjAsIDB4MjEgfSwKKyAgIC8qIGN0ICovCisgICB7IDB4MDEsIDB4YTAsIDB4NzUsIDB4ZjAsIDB4ZDgsIDB4MTUsIDB4YjEsIDB4YTQsCisgICAgIDB4ZTksIDB4YzgsIDB4ODEsIDB4YTEsIDB4YmMsIDB4ZmYsIDB4YzMsIDB4ZWIsCisgICAgIDB4ZDQsIDB4OTAsIDB4M2QsIDB4ZDAsIDB4MDIsIDB4NWIsIDB4YTQsIDB4YWEsCisgICAgIDB4ODMsIDB4N2MsIDB4NzQsIDB4ZjEsIDB4MjEsIDB4YjAsIDB4MjYsIDB4MGYsCisgICAgIDB4YTksIDB4NWQgfSwKKworICAgLyogdGFnICovCisgICB7IDB4Y2YsIDB4ODMsIDB4NDEsIDB4YmIsIDB4MTAsIDB4ODIsIDB4MGMsIDB4Y2YsCisgICAgIDB4MTQsIDB4YmQsIDB4ZWMsIDB4NTYsIDB4YjgsIDB4ZDcsIDB4ZDYsIDB4YWIgfSwKK30sCisKK307CisKKyAgIGludCBlcnIsIHgsIGlkeCwgcmVzOworICAgdW5zaWduZWQgbG9uZyBsZW47CisgICB1bnNpZ25lZCBjaGFyIG91dGN0W01BWEJMT0NLU0laRV0sIG91dHRhZ1tNQVhCTE9DS1NJWkVdOworCisgICAgLyogQUVTIGNhbiBiZSB1bmRlciByaWpuZGFlbCBvciBhZXMuLi4gdHJ5IHRvIGZpbmQgaXQgKi8gCisgICAgaWYgKChpZHggPSBmaW5kX2NpcGhlcigiYWVzIikpID09IC0xKSB7CisgICAgICAgaWYgKChpZHggPSBmaW5kX2NpcGhlcigicmlqbmRhZWwiKSkgPT0gLTEpIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfTk9QOworICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKS9zaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAgIGxlbiA9IHNpemVvZihvdXR0YWcpOworICAgICAgICBpZiAoKGVyciA9IG9jYl9lbmNyeXB0X2F1dGhlbnRpY2F0ZV9tZW1vcnkoaWR4LCB0ZXN0c1t4XS5rZXksIDE2LAorICAgICAgICAgICAgIHRlc3RzW3hdLm5vbmNlLCB0ZXN0c1t4XS5wdCwgdGVzdHNbeF0ucHRsZW4sIG91dGN0LCBvdXR0YWcsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoWE1FTUNNUChvdXR0YWcsIHRlc3RzW3hdLnRhZywgbGVuKSB8fCBYTUVNQ01QKG91dGN0LCB0ZXN0c1t4XS5jdCwgdGVzdHNbeF0ucHRsZW4pKSB7CisjaWYgMAorICAgICAgICAgICB1bnNpZ25lZCBsb25nIHk7CisgICAgICAgICAgIHByaW50ZigiXG5cbkZhaWx1cmU6IFxuQ1Q6XG4iKTsKKyAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8ICh1bnNpZ25lZCBsb25nKXRlc3RzW3hdLnB0bGVuOyApIHsKKyAgICAgICAgICAgICAgIHByaW50ZigiMHglMDJ4Iiwgb3V0Y3RbeV0pOworICAgICAgICAgICAgICAgaWYgKHkgPCAodW5zaWduZWQgbG9uZykodGVzdHNbeF0ucHRsZW4tMSkpIHByaW50ZigiLCAiKTsKKyAgICAgICAgICAgICAgIGlmICghKCsreSAlIDgpKSBwcmludGYoIlxuIik7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgcHJpbnRmKCJcblRBRzpcbiIpOworICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgbGVuOyApIHsKKyAgICAgICAgICAgICAgIHByaW50ZigiMHglMDJ4Iiwgb3V0dGFnW3ldKTsKKyAgICAgICAgICAgICAgIGlmICh5IDwgbGVuLTEpIHByaW50ZigiLCAiKTsKKyAgICAgICAgICAgICAgIGlmICghKCsreSAlIDgpKSBwcmludGYoIlxuIik7CisgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoKGVyciA9IG9jYl9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkoaWR4LCB0ZXN0c1t4XS5rZXksIDE2LCB0ZXN0c1t4XS5ub25jZSwgb3V0Y3QsIHRlc3RzW3hdLnB0bGVuLAorICAgICAgICAgICAgIG91dGN0LCB0ZXN0c1t4XS50YWcsIGxlbiwgJnJlcykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChyZXMgIT0gMSkgfHwgWE1FTUNNUCh0ZXN0c1t4XS5wdCwgb3V0Y3QsIHRlc3RzW3hdLnB0bGVuKSkgeworI2lmIDAKKyAgICAgICAgICAgdW5zaWduZWQgbG9uZyB5OworICAgICAgICAgICBwcmludGYoIlxuXG5GYWlsdXJlLWRlY3J5cHQ6IFxuUFQ6XG4iKTsKKyAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8ICh1bnNpZ25lZCBsb25nKXRlc3RzW3hdLnB0bGVuOyApIHsKKyAgICAgICAgICAgICAgIHByaW50ZigiMHglMDJ4Iiwgb3V0Y3RbeV0pOworICAgICAgICAgICAgICAgaWYgKHkgPCAodW5zaWduZWQgbG9uZykodGVzdHNbeF0ucHRsZW4tMSkpIHByaW50ZigiLCAiKTsKKyAgICAgICAgICAgICAgIGlmICghKCsreSAlIDgpKSBwcmludGYoIlxuIik7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgcHJpbnRmKCJcbnJlcyA9ICVkXG5cbiIsIHJlcyk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gQ1JZUFRfT0s7CisjZW5kaWYgLyogTFRDX1RFU1QgKi8KK30KKworI2VuZGlmIC8qIE9DQl9NT0RFICovCisKKworLyogc29tZSBjb21tZW50cworCisgICAtLSBpdCdzIGhhcmQgdG8gc2VlaworICAgLS0gaGFyZCB0byBzdHJlYW0gW3lvdSBjYW4ndCBlbWl0IGNpcGhlcnRleHQgdW50aWwgZnVsbCBibG9ja10KKyAgIC0tIFRoZSBzZXR1cCBpcyBzb21ld2hhdCBjb21wbGljYXRlZC4uLgorKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL29jYl90ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivc19vY2JfZG9uZS5jIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL3Nfb2NiX2RvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njg4YTQyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2VuY2F1dGgvb2NiL3Nfb2NiX2RvbmUuYwpAQCAtMCwwICsxLDE0OCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqIAorICAgQGZpbGUgc19vY2JfZG9uZS5jCisgICBPQ0IgaW1wbGVtZW50YXRpb24sIGludGVybmFsIGhlbHBlciwgYnkgVG9tIFN0IERlbmlzCisqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBPQ0JfTU9ERQorCisvKiBTaW5jZSB0aGUgbGFzdCBibG9jayBpcyBlbmNyeXB0ZWQgaW4gQ1RSIG1vZGUgdGhlIHNhbWUgY29kZSBjYW4KKyAqIGJlIHVzZWQgdG8gZmluaXNoIGEgZGVjcnlwdCBvciBlbmNyeXB0IHN0cmVhbS4gIFRoZSBvbmx5IGRpZmZlcmVuY2UKKyAqIGlzIHdlIFhPUiB0aGUgZmluYWwgY2lwaGVydGV4dCBpbnRvIHRoZSBjaGVja3N1bSBzbyB3ZSBoYXZlIHRvIHhvciBpdAorICogYmVmb3JlIHdlIENUUiBbZGVjcnlwdF0gb3IgYWZ0ZXIgW2VuY3J5cHRdCisgKgorICogdGhlIG5hbWVzIHB0L3B0bGVuL2N0IHJlYWxseSBqdXN0IG1lYW4gaW4vaW5sZW4vb3V0IGJ1dCB0aGlzIGlzIHRoZSB3YXkgSSB3cm90ZSBpdC4uLiAKKyAqLworCisvKioKKyAgIFNoYXJlZCBjb2RlIHRvIGZpbmlzaCBhbiBPQ0Igc3RyZWFtCisgICBAcGFyYW0gb2NiICAgIFRoZSBPQ0Igc3RhdGUKKyAgIEBwYXJhbSBwdCAgICAgVGhlIHJlbWFpbmluZyBwbGFpbnRleHQgW29yIGlucHV0XQorICAgQHBhcmFtIHB0bGVuICBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCAob2N0ZXRzKQorICAgQHBhcmFtIGN0ICAgICBbb3V0XSBUaGUgb3V0cHV0IGJ1ZmZlcgorICAgQHBhcmFtIHRhZyAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAgIEBwYXJhbSB0YWdsZW4gW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgICBAcGFyYW0gbW9kZSAgIFRoZSBtb2RlIHdlIGFyZSB0ZXJtaW5hdGluZywgMD09ZW5jcnlwdCwgMT09ZGVjcnlwdAorICAgQHJldHVybiAgICAgICBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHNfb2NiX2RvbmUob2NiX3N0YXRlICpvY2IsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBsb25nIHB0bGVuLAorICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnRhZywgdW5zaWduZWQgbG9uZyAqdGFnbGVuLCBpbnQgbW9kZSkKKworeworICAgdW5zaWduZWQgY2hhciAqWiwgKlksICpYOworICAgaW50IGVyciwgeDsKKworICAgTFRDX0FSR0NISyhvY2IgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHB0ICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3QgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyh0YWcgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHRhZ2xlbiAhPSBOVUxMKTsKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKG9jYi0+Y2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBpZiAob2NiLT5ibG9ja19sZW4gIT0gY2lwaGVyX2Rlc2NyaXB0b3Jbb2NiLT5jaXBoZXJdLmJsb2NrX2xlbmd0aCB8fAorICAgICAgIChpbnQpcHRsZW4gPiBvY2ItPmJsb2NrX2xlbiB8fCAoaW50KXB0bGVuIDwgMCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICAvKiBhbGxvY2F0ZSByYW0gKi8KKyAgIFogPSBYTUFMTE9DKE1BWEJMT0NLU0laRSk7CisgICBZID0gWE1BTExPQyhNQVhCTE9DS1NJWkUpOworICAgWCA9IFhNQUxMT0MoTUFYQkxPQ0tTSVpFKTsKKyAgIGlmIChYID09IE5VTEwgfHwgWSA9PSBOVUxMIHx8IFogPT0gTlVMTCkgeworICAgICAgaWYgKFggIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUoWCk7CisgICAgICB9CisgICAgICBpZiAoWSAhPSBOVUxMKSB7CisgICAgICAgICBYRlJFRShZKTsKKyAgICAgIH0KKyAgICAgIGlmIChaICE9IE5VTEwpIHsKKyAgICAgICAgIFhGUkVFKFopOworICAgICAgfQorICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogY29tcHV0ZSBYW21dID0gbGVuKHB0W21dKSBYT1IgTHIgWE9SIFpbbV0gKi8KKyAgIG9jYl9zaGlmdF94b3Iob2NiLCBYKTsgCisgICBYTUVNQ1BZKFosIFgsIG9jYi0+YmxvY2tfbGVuKTsKKworICAgWFtvY2ItPmJsb2NrX2xlbi0xXSBePSAocHRsZW4qOCkmMjU1OworICAgWFtvY2ItPmJsb2NrX2xlbi0yXSBePSAoKHB0bGVuKjgpPj44KSYyNTU7CisgICBmb3IgKHggPSAwOyB4IDwgb2NiLT5ibG9ja19sZW47IHgrKykgeworICAgICAgIFhbeF0gXj0gb2NiLT5Mclt4XTsgCisgICB9CisKKyAgIC8qIFlbbV0gPSBFKFhbbV0pKSAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltvY2ItPmNpcGhlcl0uZWNiX2VuY3J5cHQoWCwgWSwgJm9jYi0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gZXJyb3I7CisgICB9CisKKyAgIGlmIChtb2RlID09IDEpIHsKKyAgICAgIC8qIGRlY3J5cHQgbW9kZSwgc28gbGV0J3MgeG9yIGl0IGZpcnN0ICovCisgICAgICAvKiB4b3IgQ1ttXSBpbnRvIGNoZWNrc3VtICovCisgICAgICBmb3IgKHggPSAwOyB4IDwgKGludClwdGxlbjsgeCsrKSB7CisgICAgICAgICBvY2ItPmNoZWNrc3VtW3hdIF49IGN0W3hdOworICAgICAgfSAgCisgICB9CisKKyAgIC8qIENbbV0gPSBQW21dIHhvciBZW21dICovCisgICBmb3IgKHggPSAwOyB4IDwgKGludClwdGxlbjsgeCsrKSB7CisgICAgICAgY3RbeF0gPSBwdFt4XSBeIFlbeF07CisgICB9CisKKyAgIGlmIChtb2RlID09IDApIHsKKyAgICAgIC8qIGVuY3J5cHQgbW9kZSAqLyAgICAKKyAgICAgIC8qIHhvciBDW21dIGludG8gY2hlY2tzdW0gKi8KKyAgICAgIGZvciAoeCA9IDA7IHggPCAoaW50KXB0bGVuOyB4KyspIHsKKyAgICAgICAgICBvY2ItPmNoZWNrc3VtW3hdIF49IGN0W3hdOworICAgICAgfQorICAgfQorCisgICAvKiB4b3IgWVttXSBhbmQgWlttXSBpbnRvIGNoZWNrc3VtICovCisgICBmb3IgKHggPSAwOyB4IDwgb2NiLT5ibG9ja19sZW47IHgrKykgeworICAgICAgIG9jYi0+Y2hlY2tzdW1beF0gXj0gWVt4XSBeIFpbeF07CisgICB9CisgICAKKyAgIC8qIGVuY3J5cHQgY2hlY2tzdW0sIGVyLi4uIHRhZyEhICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW29jYi0+Y2lwaGVyXS5lY2JfZW5jcnlwdChvY2ItPmNoZWNrc3VtLCBYLCAmb2NiLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBlcnJvcjsKKyAgIH0KKyAgIGNpcGhlcl9kZXNjcmlwdG9yW29jYi0+Y2lwaGVyXS5kb25lKCZvY2ItPmtleSk7CisKKyAgIC8qIG5vdyBzdG9yZSBpdCAqLworICAgZm9yICh4ID0gMDsgeCA8IG9jYi0+YmxvY2tfbGVuICYmIHggPCAoaW50KSp0YWdsZW47IHgrKykgeworICAgICAgIHRhZ1t4XSA9IFhbeF07CisgICB9CisgICAqdGFnbGVuID0geDsKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShYLCBNQVhCTE9DS1NJWkUpOworICAgemVyb21lbShZLCBNQVhCTE9DS1NJWkUpOworICAgemVyb21lbShaLCBNQVhCTE9DS1NJWkUpOworICAgemVyb21lbShvY2IsIHNpemVvZigqb2NiKSk7CisjZW5kaWYKK2Vycm9yOiAgIAorICAgWEZSRUUoWCk7CisgICBYRlJFRShZKTsKKyAgIFhGUkVFKFopOworCisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvZW5jYXV0aC9vY2Ivc19vY2JfZG9uZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9jaGMvY2hjLmMgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL2NoYy9jaGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjg2MjcwCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9jaGMvY2hjLmMKQEAgLTAsMCArMSwyOTggQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgY2hjLmMKKyAgQ0hDIHN1cHBvcnQuIChUb20gU3QgRGVuaXMpCisqLworCisjaWZkZWYgQ0hDX0hBU0gKKworI2RlZmluZSBVTkRFRkVEX0hBU0ggIC0xNworCisvKiBjaGMgc2V0dGluZ3MgKi8KK3N0YXRpYyBpbnQgICAgICAgICAgICBjaXBoZXJfaWR4PVVOREVGRURfSEFTSCwgICAgICAgIC8qIHdoaWNoIGNpcGhlciAqLworICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcl9ibG9ja3NpemU7ICAgICAgICAgICAgICAgLyogYmxvY2tzaXplIG9mIGNpcGhlciAqLworCisKK2NvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIGNoY19kZXNjID0geworICAgImNoY19oYXNoIiwgMTIsIDAsIDAsIHsgMCB9LCAwLAorICAgJmNoY19pbml0LAorICAgJmNoY19wcm9jZXNzLAorICAgJmNoY19kb25lLAorICAgJmNoY190ZXN0LAorICAgTlVMTAorfTsKKworLyoqCisgIEluaXRpYWxpemUgdGhlIENIQyBzdGF0ZSB3aXRoIGEgZ2l2ZW4gY2lwaGVyIAorICBAcGFyYW0gY2lwaGVyICBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciB5b3Ugd2lzaCB0byBiaW5kIAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgY2hjX3JlZ2lzdGVyKGludCBjaXBoZXIpCit7CisgICBpbnQgZXJyLCBrbCwgaWR4OworCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChjaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogd2lsbCBpdCBiZSB2YWxpZD8gKi8KKyAgIGtsID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5ibG9ja19sZW5ndGg7CisKKyAgIC8qIG11c3QgYmUgPjY0IGJpdCBibG9jayAqLworICAgaWYgKGtsIDw9IDgpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0NJUEhFUjsKKyAgIH0KKworICAgLyogY2FuIHdlIHVzZSB0aGUgaWRlYWwga2V5c2l6ZT8gKi8KKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5rZXlzaXplKCZrbCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgLyogd2UgcmVxdWlyZSB0aGF0IGtleSBzaXplID09IGJsb2NrIHNpemUgYmUgYSB2YWxpZCBjaG9pY2UgKi8KKyAgIGlmIChrbCAhPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQ0lQSEVSOworICAgfQorCisgICAvKiBkZXRlcm1pbmUgaWYgY2hjX2hhc2ggaGFzIGJlZW4gcmVnaXN0ZXJfaGFzaCdlZCBhbHJlYWR5ICovCisgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQoaWR4ID0gZmluZF9oYXNoKCJjaGNfaGFzaCIpKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIHN0b3JlIGludG8gZGVzY3JpcHRvciAqLworICAgaGFzaF9kZXNjcmlwdG9yW2lkeF0uaGFzaHNpemUgID0gCisgICBoYXNoX2Rlc2NyaXB0b3JbaWR4XS5ibG9ja3NpemUgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aDsKKworICAgLyogc3RvcmUgdGhlIGlkeCBhbmQgYmxvY2sgc2l6ZSAqLworICAgY2lwaGVyX2lkeCAgICAgICA9IGNpcGhlcjsKKyAgIGNpcGhlcl9ibG9ja3NpemUgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aDsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgICBJbml0aWFsaXplIHRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gbWQgICBUaGUgaGFzaCBzdGF0ZSB5b3Ugd2lzaCB0byBpbml0aWFsaXplCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgY2hjX2luaXQoaGFzaF9zdGF0ZSAqbWQpCit7CisgICBzeW1tZXRyaWNfa2V5ICprZXk7CisgICB1bnNpZ25lZCBjaGFyICBidWZbTUFYQkxPQ0tTSVpFXTsKKyAgIGludCAgICAgICAgICAgIGVycjsKKyAKKyAgIExUQ19BUkdDSEsobWQgIT0gTlVMTCk7CisKKyAgIC8qIGlzIHRoZSBjaXBoZXIgdmFsaWQ/ICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChjaXBoZXJfaWR4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGlmIChjaXBoZXJfYmxvY2tzaXplICE9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl9pZHhdLmJsb2NrX2xlbmd0aCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQ0lQSEVSOworICAgfQorCisgICBpZiAoKGtleSA9IFhNQUxMT0Moc2l6ZW9mKCprZXkpKSkgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogemVybyBrZXkgYW5kIHdoYXQgbm90ICovICAgCisgICB6ZXJvbWVtKGJ1ZiwgY2lwaGVyX2Jsb2Nrc2l6ZSk7CisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl9pZHhdLnNldHVwKGJ1ZiwgY2lwaGVyX2Jsb2Nrc2l6ZSwgMCwga2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIFhGUkVFKGtleSk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBlbmNyeXB0IHplcm8gYmxvY2sgKi8KKyAgIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl9pZHhdLmVjYl9lbmNyeXB0KGJ1ZiwgbWQtPmNoYy5zdGF0ZSwga2V5KTsKKworICAgLyogemVybyBvdGhlciBtZW1iZXJzICovCisgICBtZC0+Y2hjLmxlbmd0aCA9IDA7CisgICBtZC0+Y2hjLmN1cmxlbiA9IDA7CisgICB6ZXJvbWVtKG1kLT5jaGMuYnVmLCBzaXplb2YobWQtPmNoYy5idWYpKTsKKyAgIFhGUkVFKGtleSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIAorICAga2V5ICAgIDw9IHN0YXRlCisgICBUMCxUMSAgPD0gYmxvY2sKKyAgIFQwICAgICA8PSBlbmNyeXB0IFQwCisgICBzdGF0ZSAgPD0gc3RhdGUgeG9yIFQwIHhvciBUMQorKi8KK3N0YXRpYyBpbnQgY2hjX2NvbXByZXNzKGhhc2hfc3RhdGUgKm1kLCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisgICB1bnNpZ25lZCBjaGFyICBUWzJdW01BWEJMT0NLU0laRV07CisgICBzeW1tZXRyaWNfa2V5ICprZXk7CisgICBpbnQgICAgICAgICAgICBlcnIsIHg7CisKKyAgIGlmICgoa2V5ID0gWE1BTExPQyhzaXplb2YoKmtleSkpKSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJfaWR4XS5zZXR1cChtZC0+Y2hjLnN0YXRlLCBjaXBoZXJfYmxvY2tzaXplLCAwLCBrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgWEZSRUUoa2V5KTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBYTUVNQ1BZKFRbMV0sIGJ1ZiwgY2lwaGVyX2Jsb2Nrc2l6ZSk7CisgICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJfaWR4XS5lY2JfZW5jcnlwdChidWYsIFRbMF0sIGtleSk7CisgICBmb3IgKHggPSAwOyB4IDwgY2lwaGVyX2Jsb2Nrc2l6ZTsgeCsrKSB7CisgICAgICAgbWQtPmNoYy5zdGF0ZVt4XSBePSBUWzBdW3hdIF4gVFsxXVt4XTsKKyAgIH0KKyAgIFhGUkVFKGtleSk7CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKFQsIHNpemVvZihUKSk7CisgICB6ZXJvbWVtKCZrZXksIHNpemVvZihrZXkpKTsKKyNlbmRpZgorICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBmdW5jdGlvbiBmb3IgcHJvY2Vzc2luZyBibG9ja3MgKi8KK2ludCBfY2hjX3Byb2Nlc3MoaGFzaF9zdGF0ZSAqIG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuKTsKK0hBU0hfUFJPQ0VTUyhfY2hjX3Byb2Nlc3MsIGNoY19jb21wcmVzcywgY2hjLCAodW5zaWduZWQgbG9uZyljaXBoZXJfYmxvY2tzaXplKQorCisvKioKKyAgIFByb2Nlc3MgYSBibG9jayBvZiBtZW1vcnkgdGhvdWdoIHRoZSBoYXNoCisgICBAcGFyYW0gbWQgICBUaGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIGluICAgVGhlIGRhdGEgdG8gaGFzaAorICAgQHBhcmFtIGlubGVuICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIChvY3RldHMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgY2hjX3Byb2Nlc3MoaGFzaF9zdGF0ZSAqIG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbikKK3sKKyAgIGludCBlcnI7CisKKyAgIExUQ19BUkdDSEsobWQgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoaW4gICE9IE5VTEwpOworCisgICAvKiBpcyB0aGUgY2lwaGVyIHZhbGlkPyAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2lwaGVyX2lkeCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaWYgKGNpcGhlcl9ibG9ja3NpemUgIT0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyX2lkeF0uYmxvY2tfbGVuZ3RoKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9DSVBIRVI7CisgICB9CisKKyAgIHJldHVybiBfY2hjX3Byb2Nlc3MobWQsIGluLCBpbmxlbik7Cit9CisKKy8qKgorICAgVGVybWluYXRlIHRoZSBoYXNoIHRvIGdldCB0aGUgZGlnZXN0CisgICBAcGFyYW0gbWQgICBUaGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIG91dCBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGhhc2ggKGxlbmd0aCBvZiB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgYmxvY2sgY2lwaGVyKQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGNoY19kb25lKGhhc2hfc3RhdGUgKm1kLCB1bnNpZ25lZCBjaGFyICpvdXQpCit7CisgICAgaW50IGVycjsKKworICAgIExUQ19BUkdDSEsobWQgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dCAgIT0gTlVMTCk7CisKKyAgICAvKiBpcyB0aGUgY2lwaGVyIHZhbGlkPyAqLworICAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNpcGhlcl9pZHgpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICAgIGlmIChjaXBoZXJfYmxvY2tzaXplICE9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl9pZHhdLmJsb2NrX2xlbmd0aCkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0NJUEhFUjsKKyAgICB9CisKKyAgICBpZiAobWQtPmNoYy5jdXJsZW4gPj0gc2l6ZW9mKG1kLT5jaGMuYnVmKSkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgICB9CisKKyAgICAvKiBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlICovCisgICAgbWQtPmNoYy5sZW5ndGggKz0gbWQtPmNoYy5jdXJsZW4gKiA4OworCisgICAgLyogYXBwZW5kIHRoZSAnMScgYml0ICovCisgICAgbWQtPmNoYy5idWZbbWQtPmNoYy5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikweDgwOworCisgICAgLyogaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgYWJvdmUgbC04IGJ5dGVzIHdlIGFwcGVuZCB6ZXJvcworICAgICAqIHRoZW4gY29tcHJlc3MuICBUaGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gcGFkZGluZyB6ZXJvcyBhbmQgbGVuZ3RoCisgICAgICogZW5jb2RpbmcgbGlrZSBub3JtYWwuCisgICAgICovCisgICAgaWYgKG1kLT5jaGMuY3VybGVuID4gKHVuc2lnbmVkIGxvbmcpKGNpcGhlcl9ibG9ja3NpemUgLSA4KSkgeworICAgICAgICB3aGlsZSAobWQtPmNoYy5jdXJsZW4gPCAodW5zaWduZWQgbG9uZyljaXBoZXJfYmxvY2tzaXplKSB7CisgICAgICAgICAgICBtZC0+Y2hjLmJ1ZlttZC0+Y2hjLmN1cmxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKTA7CisgICAgICAgIH0KKyAgICAgICAgY2hjX2NvbXByZXNzKG1kLCBtZC0+Y2hjLmJ1Zik7CisgICAgICAgIG1kLT5jaGMuY3VybGVuID0gMDsKKyAgICB9CisKKyAgICAvKiBwYWQgdXB0byBsLTggYnl0ZXMgb2YgemVyb2VzICovCisgICAgd2hpbGUgKG1kLT5jaGMuY3VybGVuIDwgKHVuc2lnbmVkIGxvbmcpKGNpcGhlcl9ibG9ja3NpemUgLSA4KSkgeworICAgICAgICBtZC0+Y2hjLmJ1ZlttZC0+Y2hjLmN1cmxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKTA7CisgICAgfQorCisgICAgLyogc3RvcmUgbGVuZ3RoICovCisgICAgU1RPUkU2NEwobWQtPmNoYy5sZW5ndGgsIG1kLT5jaGMuYnVmKyhjaXBoZXJfYmxvY2tzaXplLTgpKTsKKyAgICBjaGNfY29tcHJlc3MobWQsIG1kLT5jaGMuYnVmKTsKKworICAgIC8qIGNvcHkgb3V0cHV0ICovCisgICAgWE1FTUNQWShvdXQsIG1kLT5jaGMuc3RhdGUsIGNpcGhlcl9ibG9ja3NpemUpOworCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICAgemVyb21lbShtZCwgc2l6ZW9mKGhhc2hfc3RhdGUpKTsKKyNlbmRpZgorICAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIFNlbGYtdGVzdCB0aGUgaGFzaAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3RzIGhhdmUgYmVlbiBkaXNhYmxlZAorKi8gIAoraW50IGNoY190ZXN0KHZvaWQpCit7CisgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgIHVuc2lnbmVkIGNoYXIgKm1zZywKKyAgICAgICAgICAgICAgICAgICAgIG1kW01BWEJMT0NLU0laRV07CisgICAgICBpbnQgICAgICAgICAgICBsZW47CisgICB9IHRlc3RzW10gPSB7Cit7CisgICAodW5zaWduZWQgY2hhciAqKSJoZWxsbyB3b3JsZCIsCisgICB7IDB4Y2YsIDB4NTcsIDB4OWQsIDB4YzMsIDB4MGEsIDB4MGUsIDB4ZWEsIDB4NjEsIAorICAgICAweDBkLCAweDU0LCAweDQ3LCAweGM0LCAweDNjLCAweDA2LCAweGY1LCAweDRlIH0sCisgICAxNgorfQorfTsKKyAgIGludCB4LCBvbGRoYXNoaWR4LCBpZHg7CisgICB1bnNpZ25lZCBjaGFyIG91dFtNQVhCTE9DS1NJWkVdOworICAgaGFzaF9zdGF0ZSBtZDsKKworICAgLyogQUVTIGNhbiBiZSB1bmRlciByaWpuZGFlbCBvciBhZXMuLi4gdHJ5IHRvIGZpbmQgaXQgKi8KKyAgIGlmICgoaWR4ID0gZmluZF9jaXBoZXIoImFlcyIpKSA9PSAtMSkgeworICAgICAgaWYgKChpZHggPSBmaW5kX2NpcGhlcigicmlqbmRhZWwiKSkgPT0gLTEpIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9OT1A7CisgICAgICB9CisgICB9CisgICBvbGRoYXNoaWR4ID0gY2lwaGVyX2lkeDsKKyAgIGNoY19yZWdpc3RlcihpZHgpOworCisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKS9zaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAgY2hjX2luaXQoJm1kKTsKKyAgICAgICBjaGNfcHJvY2VzcygmbWQsIHRlc3RzW3hdLm1zZywgc3RybGVuKChjaGFyICopdGVzdHNbeF0ubXNnKSk7CisgICAgICAgY2hjX2RvbmUoJm1kLCBvdXQpOworICAgICAgIGlmIChYTUVNQ01QKG91dCwgdGVzdHNbeF0ubWQsIHRlc3RzW3hdLmxlbikpIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgIH0KKyAgIH0KKyAgIGlmIChvbGRoYXNoaWR4ICE9IFVOREVGRURfSEFTSCkgeworICAgICAgY2hjX3JlZ2lzdGVyKG9sZGhhc2hpZHgpOworICAgfQorCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL2NoYy9jaGMuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZS5jIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyMDI1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZS5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqIAorICBAZmlsZSBoYXNoX2ZpbGUuYworICBIYXNoIGEgZmlsZSwgVG9tIFN0IERlbmlzCisqLworCisvKioKKyAgQHBhcmFtIGhhc2ggICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggZGVzaXJlZAorICBAcGFyYW0gZm5hbWUgIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHlvdSB3aXNoIHRvIGhhc2gKKyAgQHBhcmFtIG91dCAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGRpZ2VzdAorICBAcGFyYW0gb3V0bGVuIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIG1lc3NhZ2UgZGlnZXN0CisgIEByZXN1bHQgQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBoYXNoX2ZpbGUoaW50IGhhc2gsIGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyNpZmRlZiBMVENfTk9fRklMRQorICAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgIEZJTEUgKmluOworICAgIGludCBlcnI7CisgICAgTFRDX0FSR0NISyhmbmFtZSAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQoaGFzaCkpICE9IENSWVBUX09LKSB7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgaW4gPSBmb3BlbihmbmFtZSwgInJiIik7CisgICAgaWYgKGluID09IE5VTEwpIHsgCisgICAgICAgcmV0dXJuIENSWVBUX0ZJTEVfTk9URk9VTkQ7CisgICAgfQorCisgICAgZXJyID0gaGFzaF9maWxlaGFuZGxlKGhhc2gsIGluLCBvdXQsIG91dGxlbik7CisgICAgaWYgKGZjbG9zZShpbikgIT0gMCkgeworICAgICAgIHJldHVybiBDUllQVF9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyOworI2VuZGlmCit9CisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9maWxlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX2ZpbGVoYW5kbGUuYyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfZmlsZWhhbmRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMmNiZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX2ZpbGVoYW5kbGUuYwpAQCAtMCwwICsxLDcxIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgaGFzaF9maWxlaGFuZGxlLmMKKyAgIEhhc2ggb3BlbiBmaWxlcywgVG9tIFN0IERlbmlzCisqLworCisvKiogCisgIEhhc2ggZGF0YSBmcm9tIGFuIG9wZW4gZmlsZSBoYW5kbGUuICAKKyAgQHBhcmFtIGhhc2ggICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggeW91IHdhbnQgdG8gdXNlCisgIEBwYXJhbSBpbiAgICAgVGhlIEZJTEUqIGhhbmRsZSBvZiB0aGUgZmlsZSB5b3Ugd2FudCB0byBoYXNoCisgIEBwYXJhbSBvdXQgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBkaWdlc3QKKyAgQHBhcmFtIG91dGxlbiBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBkaWdlc3QKKyAgQHJlc3VsdCBDUllQVF9PSyBpZiBzdWNjZXNzZnVsICAgCisqLworaW50IGhhc2hfZmlsZWhhbmRsZShpbnQgaGFzaCwgRklMRSAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworI2lmZGVmIExUQ19OT19GSUxFCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyNlbHNlCisgICAgaGFzaF9zdGF0ZSBtZDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls1MTJdOworICAgIHNpemVfdCB4OworICAgIGludCBlcnI7CisKKyAgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKworICAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBpZiAoKm91dGxlbiA8IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZSkgeworICAgICAgICpvdXRsZW4gPSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uaGFzaHNpemU7CisgICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgICB9CisgICAgaWYgKChlcnIgPSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uaW5pdCgmbWQpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgKm91dGxlbiA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZTsKKyAgICBkbyB7CisgICAgICAgIHggPSBmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBpbik7CisgICAgICAgIGlmICgoZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hdLnByb2Nlc3MoJm1kLCBidWYsIHgpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisgICAgfSB3aGlsZSAoeCA9PSBzaXplb2YoYnVmKSk7CisgICAgZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hdLmRvbmUoJm1kLCBvdXQpOworCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICAgemVyb21lbShidWYsIHNpemVvZihidWYpKTsKKyNlbmRpZgorICAgIHJldHVybiBlcnI7CisjZW5kaWYKK30KKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX2ZpbGVoYW5kbGUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIxOjUzOjQxICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5LmMgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZjlmYTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeS5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGhhc2hfbWVtb3J5LmMKKyAgSGFzaCBtZW1vcnkgaGVscGVyLCBUb20gU3QgRGVuaXMKKyovCisKKy8qKgorICBIYXNoIGEgYmxvY2sgb2YgbWVtb3J5IGFuZCBzdG9yZSB0aGUgZGlnZXN0LgorICBAcGFyYW0gaGFzaCAgIFRoZSBpbmRleCBvZiB0aGUgaGFzaCB5b3Ugd2lzaCB0byB1c2UKKyAgQHBhcmFtIGluICAgICBUaGUgZGF0YSB5b3Ugd2lzaCB0byBoYXNoCisgIEBwYXJhbSBpbmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBoYXNoIChvY3RldHMpCisgIEBwYXJhbSBvdXQgICAgW291dF0gV2hlcmUgdG8gc3RvcmUgdGhlIGRpZ2VzdAorICBAcGFyYW0gb3V0bGVuIFtpbi9vdXRdIE1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgZGlnZXN0CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBoYXNoX21lbW9yeShpbnQgaGFzaCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgIGhhc2hfc3RhdGUgKm1kOworICAgIGludCBlcnI7CisKKyAgICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICBpZiAoKm91dGxlbiA8IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZSkgeworICAgICAgICpvdXRsZW4gPSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uaGFzaHNpemU7CisgICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgICB9CisKKyAgICBtZCA9IFhNQUxMT0Moc2l6ZW9mKGhhc2hfc3RhdGUpKTsKKyAgICBpZiAobWQgPT0gTlVMTCkgeworICAgICAgIHJldHVybiBDUllQVF9NRU07CisgICAgfQorCisgICAgaWYgKChlcnIgPSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uaW5pdChtZCkpICE9IENSWVBUX09LKSB7CisgICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5wcm9jZXNzKG1kLCBpbiwgaW5sZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisgICAgZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hdLmRvbmUobWQsIG91dCk7CisgICAgKm91dGxlbiA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZTsKK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICAgemVyb21lbShtZCwgc2l6ZW9mKGhhc2hfc3RhdGUpKTsKKyNlbmRpZgorICAgIFhGUkVFKG1kKTsKKworICAgIHJldHVybiBlcnI7Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8xNiAyMTo1Mzo0MSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL2hlbHBlci9oYXNoX21lbW9yeV9tdWx0aS5jIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9tZW1vcnlfbXVsdGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWYyZDBjCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9oZWxwZXIvaGFzaF9tZW1vcnlfbXVsdGkuYwpAQCAtMCwwICsxLDg3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisvKioKKyAgQGZpbGUgaGFzaF9tZW1vcnlfbXVsdGkuYworICBIYXNoIChtdWx0aXBsZSBidWZmZXJzKSBtZW1vcnkgaGVscGVyLCBUb20gU3QgRGVuaXMKKyovCisKKy8qKgorICBIYXNoIG11bHRpcGxlIChub24tYWRqYWNlbnQpIGJsb2NrcyBvZiBtZW1vcnkgYXQgb25jZS4gIAorICBAcGFyYW0gaGFzaCAgIFRoZSBpbmRleCBvZiB0aGUgaGFzaCB5b3Ugd2lzaCB0byB1c2UKKyAgQHBhcmFtIG91dCAgICBbb3V0XSBXaGVyZSB0byBzdG9yZSB0aGUgZGlnZXN0CisgIEBwYXJhbSBvdXRsZW4gW2luL291dF0gTWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBkaWdlc3QKKyAgQHBhcmFtIGluICAgICBUaGUgZGF0YSB5b3Ugd2lzaCB0byBoYXNoCisgIEBwYXJhbSBpbmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBoYXNoIChvY3RldHMpCisgIEBwYXJhbSAuLi4gICAgdHVwbGVzIG9mIChkYXRhLGxlbikgcGFpcnMgdG8gaGFzaCwgdGVybWluYXRlZCB3aXRoIGEgKE5VTEwseCkgKHg9ZG9uJ3QgY2FyZSkKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLyAgCitpbnQgaGFzaF9tZW1vcnlfbXVsdGkoaW50IGhhc2gsIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCAuLi4pCit7CisgICAgaGFzaF9zdGF0ZSAgICAgICAgICAqbWQ7CisgICAgaW50ICAgICAgICAgICAgICAgICAgZXJyOworICAgIHZhX2xpc3QgICAgICAgICAgICAgIGFyZ3M7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3VycHRyOworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgIGN1cmxlbjsKKworICAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworCisgICAgaWYgKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2gpKSAhPSBDUllQVF9PSykgeworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGlmICgqb3V0bGVuIDwgaGFzaF9kZXNjcmlwdG9yW2hhc2hdLmhhc2hzaXplKSB7CisgICAgICAgKm91dGxlbiA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZTsKKyAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgIH0KKworICAgIG1kID0gWE1BTExPQyhzaXplb2YoaGFzaF9zdGF0ZSkpOworICAgIGlmIChtZCA9PSBOVUxMKSB7CisgICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgICB9CisKKyAgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5pbml0KG1kKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorCisgICAgdmFfc3RhcnQoYXJncywgaW5sZW4pOworICAgIGN1cnB0ciA9IGluOyAKKyAgICBjdXJsZW4gPSBpbmxlbjsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgLyogcHJvY2VzcyBidWYgKi8KKyAgICAgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5wcm9jZXNzKG1kLCBjdXJwdHIsIGN1cmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgIH0KKyAgICAgICAvKiBzdGVwIHRvIG5leHQgKi8KKyAgICAgICBjdXJwdHIgPSB2YV9hcmcoYXJncywgY29uc3QgdW5zaWduZWQgY2hhciopOworICAgICAgIGlmIChjdXJwdHIgPT0gTlVMTCkgeworICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKyAgICAgICBjdXJsZW4gPSB2YV9hcmcoYXJncywgdW5zaWduZWQgbG9uZyk7CisgICAgfQorICAgIGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5kb25lKG1kLCBvdXQpOworICAgICpvdXRsZW4gPSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uaGFzaHNpemU7CitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIHplcm9tZW0obWQsIHNpemVvZihoYXNoX3N0YXRlKSk7CisjZW5kaWYKKyAgICBYRlJFRShtZCk7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIHJldHVybiBlcnI7Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvaGVscGVyL2hhc2hfbWVtb3J5X211bHRpLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8xNiAyMTo1Mzo0MSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL21kMi5jIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9tZDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTE3MjEzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9tZDIuYwpAQCAtMCwwICsxLDI1MSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBwYXJhbSBtZDIuYworICAgTUQyIChSRkMgMTMxOSkgaGFzaCBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbiBieSBUb20gU3QgRGVuaXMgCisqLworCisjaWZkZWYgTUQyCisKK2NvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIG1kMl9kZXNjID0KK3sKKyAgICAibWQyIiwKKyAgICA3LAorICAgIDE2LAorICAgIDE2LAorCisgICAgLyogT0lEICovCisgICB7IDEsIDIsIDg0MCwgMTEzNTQ5LCAyLCAyLCAgfSwKKyAgIDYsCisKKyAgICAmbWQyX2luaXQsCisgICAgJm1kMl9wcm9jZXNzLAorICAgICZtZDJfZG9uZSwKKyAgICAmbWQyX3Rlc3QsCisgICAgTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgUElfU1VCU1RbMjU2XSA9IHsKKyAgNDEsIDQ2LCA2NywgMjAxLCAxNjIsIDIxNiwgMTI0LCAxLCA2MSwgNTQsIDg0LCAxNjEsIDIzNiwgMjQwLCA2LAorICAxOSwgOTgsIDE2NywgNSwgMjQzLCAxOTIsIDE5OSwgMTE1LCAxNDAsIDE1MiwgMTQ3LCA0MywgMjE3LCAxODgsCisgIDc2LCAxMzAsIDIwMiwgMzAsIDE1NSwgODcsIDYwLCAyNTMsIDIxMiwgMjI0LCAyMiwgMTAzLCA2NiwgMTExLCAyNCwKKyAgMTM4LCAyMywgMjI5LCAxOCwgMTkwLCA3OCwgMTk2LCAyMTQsIDIxOCwgMTU4LCAyMjIsIDczLCAxNjAsIDI1MSwKKyAgMjQ1LCAxNDIsIDE4NywgNDcsIDIzOCwgMTIyLCAxNjksIDEwNCwgMTIxLCAxNDUsIDIxLCAxNzgsIDcsIDYzLAorICAxNDgsIDE5NCwgMTYsIDEzNywgMTEsIDM0LCA5NSwgMzMsIDEyOCwgMTI3LCA5MywgMTU0LCA5MCwgMTQ0LCA1MCwKKyAgMzksIDUzLCA2MiwgMjA0LCAyMzEsIDE5MSwgMjQ3LCAxNTEsIDMsIDI1NSwgMjUsIDQ4LCAxNzksIDcyLCAxNjUsCisgIDE4MSwgMjA5LCAyMTUsIDk0LCAxNDYsIDQyLCAxNzIsIDg2LCAxNzAsIDE5OCwgNzksIDE4NCwgNTYsIDIxMCwKKyAgMTUwLCAxNjQsIDEyNSwgMTgyLCAxMTgsIDI1MiwgMTA3LCAyMjYsIDE1NiwgMTE2LCA0LCAyNDEsIDY5LCAxNTcsCisgIDExMiwgODksIDEwMCwgMTEzLCAxMzUsIDMyLCAxMzQsIDkxLCAyMDcsIDEwMSwgMjMwLCA0NSwgMTY4LCAyLCAyNywKKyAgOTYsIDM3LCAxNzMsIDE3NCwgMTc2LCAxODUsIDI0NiwgMjgsIDcwLCA5NywgMTA1LCA1MiwgNjQsIDEyNiwgMTUsCisgIDg1LCA3MSwgMTYzLCAzNSwgMjIxLCA4MSwgMTc1LCA1OCwgMTk1LCA5MiwgMjQ5LCAyMDYsIDE4NiwgMTk3LAorICAyMzQsIDM4LCA0NCwgODMsIDEzLCAxMTAsIDEzMywgNDAsIDEzMiwgOSwgMjExLCAyMjMsIDIwNSwgMjQ0LCA2NSwKKyAgMTI5LCA3NywgODIsIDEwNiwgMjIwLCA1NSwgMjAwLCAxMDgsIDE5MywgMTcxLCAyNTAsIDM2LCAyMjUsIDEyMywKKyAgOCwgMTIsIDE4OSwgMTc3LCA3NCwgMTIwLCAxMzYsIDE0OSwgMTM5LCAyMjcsIDk5LCAyMzIsIDEwOSwgMjMzLAorICAyMDMsIDIxMywgMjU0LCA1OSwgMCwgMjksIDU3LCAyNDIsIDIzOSwgMTgzLCAxNCwgMTAyLCA4OCwgMjA4LCAyMjgsCisgIDE2NiwgMTE5LCAxMTQsIDI0OCwgMjM1LCAxMTcsIDc1LCAxMCwgNDksIDY4LCA4MCwgMTgwLCAxNDMsIDIzNywKKyAgMzEsIDI2LCAyMTksIDE1MywgMTQxLCA1MSwgMTU5LCAxNywgMTMxLCAyMAorfTsKKworLyogYWRkcyAxNiBieXRlcyB0byB0aGUgY2hlY2tzdW0gKi8KK3N0YXRpYyB2b2lkIG1kMl91cGRhdGVfY2hrc3VtKGhhc2hfc3RhdGUgKm1kKQoreworICAgaW50IGo7CisgICB1bnNpZ25lZCBjaGFyIEw7CisgICBMID0gbWQtPm1kMi5jaGtzdW1bMTVdOworICAgZm9yIChqID0gMDsgaiA8IDE2OyBqKyspIHsKKworLyogY2F1dGlvbiwgdGhlIFJGQyBzYXlzIGl0cyAiQ1tqXSA9IFNbTVtpKjE2K2pdIHhvciBMXSIgYnV0IHRoZSByZWZlcmVuY2Ugc291cmNlIGNvZGUgW2FuZCB0ZXN0IHZlY3RvcnNdIHNheSAKKyAgIG90aGVyd2lzZS4KKyovCisgICAgICAgTCA9IChtZC0+bWQyLmNoa3N1bVtqXSBePSBQSV9TVUJTVFsoaW50KShtZC0+bWQyLmJ1ZltqXSBeIEwpXSAmIDI1NSk7CisgICB9Cit9CisKK3N0YXRpYyB2b2lkIG1kMl9jb21wcmVzcyhoYXNoX3N0YXRlICptZCkKK3sKKyAgIGludCBqLCBrOworICAgdW5zaWduZWQgY2hhciB0OworICAgCisgICAvKiBjb3B5IGJsb2NrICovCisgICBmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgeworICAgICAgIG1kLT5tZDIuWFsxNitqXSA9IG1kLT5tZDIuYnVmW2pdOworICAgICAgIG1kLT5tZDIuWFszMitqXSA9IG1kLT5tZDIuWFtqXSBeIG1kLT5tZDIuWFsxNitqXTsKKyAgIH0KKworICAgdCA9ICh1bnNpZ25lZCBjaGFyKTA7CisKKyAgIC8qIGRvIDE4IHJvdW5kcyAqLworICAgZm9yIChqID0gMDsgaiA8IDE4OyBqKyspIHsKKyAgICAgICBmb3IgKGsgPSAwOyBrIDwgNDg7IGsrKykgeworICAgICAgICAgICB0ID0gKG1kLT5tZDIuWFtrXSBePSBQSV9TVUJTVFsoaW50KSh0ICYgMjU1KV0pOworICAgICAgIH0KKyAgICAgICB0ID0gKHQgKyAodW5zaWduZWQgY2hhcilqKSAmIDI1NTsKKyAgIH0KK30KKworLyoqCisgICBJbml0aWFsaXplIHRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gbWQgICBUaGUgaGFzaCBzdGF0ZSB5b3Ugd2lzaCB0byBpbml0aWFsaXplCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgbWQyX2luaXQoaGFzaF9zdGF0ZSAqbWQpCit7CisgICBMVENfQVJHQ0hLKG1kICE9IE5VTEwpOworCisgICAvKiBNRDIgdXNlcyBhIHplcm8nZWQgc3RhdGUuLi4gKi8KKyAgIHplcm9tZW0obWQtPm1kMi5YLCBzaXplb2YobWQtPm1kMi5YKSk7CisgICB6ZXJvbWVtKG1kLT5tZDIuY2hrc3VtLCBzaXplb2YobWQtPm1kMi5jaGtzdW0pKTsKKyAgIHplcm9tZW0obWQtPm1kMi5idWYsIHNpemVvZihtZC0+bWQyLmJ1ZikpOworICAgbWQtPm1kMi5jdXJsZW4gPSAwOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgIFByb2Nlc3MgYSBibG9jayBvZiBtZW1vcnkgdGhvdWdoIHRoZSBoYXNoCisgICBAcGFyYW0gbWQgICAgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gaW4gICAgIFRoZSBkYXRhIHRvIGhhc2gKKyAgIEBwYXJhbSBpbmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAob2N0ZXRzKQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IG1kMl9wcm9jZXNzKGhhc2hfc3RhdGUgKm1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbikKK3sKKyAgICB1bnNpZ25lZCBsb25nIG47CisgICAgTFRDX0FSR0NISyhtZCAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGluICE9IE5VTEwpOworICAgIGlmIChtZC0+IG1kMiAuY3VybGVuID4gc2l6ZW9mKG1kLT4gbWQyIC5idWYpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICB3aGlsZSAoaW5sZW4gPiAwKSB7CisgICAgICAgIG4gPSBNSU4oaW5sZW4sICgxNiAtIG1kLT5tZDIuY3VybGVuKSk7CisgICAgICAgIFhNRU1DUFkobWQtPm1kMi5idWYgKyBtZC0+bWQyLmN1cmxlbiwgaW4sIChzaXplX3Qpbik7CisgICAgICAgIG1kLT5tZDIuY3VybGVuICs9IG47CisgICAgICAgIGluICAgICAgICAgICAgICs9IG47CisgICAgICAgIGlubGVuICAgICAgICAgIC09IG47CisKKyAgICAgICAgLyogaXMgMTYgYnl0ZXMgZnVsbD8gKi8KKyAgICAgICAgaWYgKG1kLT5tZDIuY3VybGVuID09IDE2KSB7CisgICAgICAgICAgICBtZDJfY29tcHJlc3MobWQpOworICAgICAgICAgICAgbWQyX3VwZGF0ZV9jaGtzdW0obWQpOworICAgICAgICAgICAgbWQtPm1kMi5jdXJsZW4gPSAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgICBUZXJtaW5hdGUgdGhlIGhhc2ggdG8gZ2V0IHRoZSBkaWdlc3QKKyAgIEBwYXJhbSBtZCAgVGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBvdXQgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBoYXNoICgxNiBieXRlcykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBtZDJfZG9uZShoYXNoX3N0YXRlICogbWQsIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGksIGs7CisKKyAgICBMVENfQVJHQ0hLKG1kICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dCAhPSBOVUxMKTsKKworICAgIGlmIChtZC0+bWQyLmN1cmxlbiA+PSBzaXplb2YobWQtPm1kMi5idWYpKSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgIH0KKworCisgICAgLyogcGFkIHRoZSBtZXNzYWdlICovCisgICAgayA9IDE2IC0gbWQtPm1kMi5jdXJsZW47CisgICAgZm9yIChpID0gbWQtPm1kMi5jdXJsZW47IGkgPCAxNjsgaSsrKSB7CisgICAgICAgIG1kLT5tZDIuYnVmW2ldID0gKHVuc2lnbmVkIGNoYXIpazsKKyAgICB9CisKKyAgICAvKiBoYXNoIGFuZCB1cGRhdGUgKi8KKyAgICBtZDJfY29tcHJlc3MobWQpOworICAgIG1kMl91cGRhdGVfY2hrc3VtKG1kKTsKKworICAgIC8qIGhhc2ggY2hlY2tzdW0gKi8KKyAgICBYTUVNQ1BZKG1kLT5tZDIuYnVmLCBtZC0+bWQyLmNoa3N1bSwgMTYpOworICAgIG1kMl9jb21wcmVzcyhtZCk7CisKKyAgICAvKiBvdXRwdXQgaXMgbG93ZXIgMTYgYnl0ZXMgb2YgWCAqLworICAgIFhNRU1DUFkob3V0LCBtZC0+bWQyLlgsIDE2KTsKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIHplcm9tZW0obWQsIHNpemVvZihoYXNoX3N0YXRlKSk7CisjZW5kaWYKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBTZWxmLXRlc3QgdGhlIGhhc2gKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQKKyovICAKK2ludCBtZDJfdGVzdCh2b2lkKQoreworICNpZm5kZWYgTFRDX1RFU1QKKyAgICByZXR1cm4gQ1JZUFRfTk9QOworICNlbHNlICAgIAorICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgIGNoYXIgKm1zZzsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtZFsxNl07CisgICB9IHRlc3RzW10gPSB7CisgICAgICB7ICIiLAorICAgICAgICB7MHg4MywweDUwLDB4ZTUsMHhhMywweGUyLDB4NGMsMHgxNSwweDNkLAorICAgICAgICAgMHhmMiwweDI3LDB4NWMsMHg5ZiwweDgwLDB4NjksMHgyNywweDczCisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7ICJhIiwKKyAgICAgICAgezB4MzIsMHhlYywweDAxLDB4ZWMsMHg0YSwweDZkLDB4YWMsMHg3MiwKKyAgICAgICAgIDB4YzAsMHhhYiwweDk2LDB4ZmIsMHgzNCwweGMwLDB4YjUsMHhkMQorICAgICAgICB9CisgICAgICB9LAorICAgICAgeyAibWVzc2FnZSBkaWdlc3QiLAorICAgICAgICB7MHhhYiwweDRmLDB4NDksMHg2YiwweGZiLDB4MmEsMHg1MywweDBiLAorICAgICAgICAgMHgyMSwweDlmLDB4ZjMsMHgzMCwweDMxLDB4ZmUsMHgwNiwweGIwCisgICAgICAgIH0KKyAgICAgIH0sCisgICAgICB7ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsCisgICAgICAgIHsweDRlLDB4OGQsMHhkZiwweGYzLDB4NjUsMHgwMiwweDkyLDB4YWIsCisgICAgICAgICAweDVhLDB4NDEsMHgwOCwweGMzLDB4YWEsMHg0NywweDk0LDB4MGIKKyAgICAgICAgfQorICAgICAgfSwKKyAgICAgIHsgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IiwKKyAgICAgICAgezB4ZGEsMHgzMywweGRlLDB4ZjIsMHhhNCwweDJkLDB4ZjEsMHgzOSwKKyAgICAgICAgIDB4NzUsMHgzNSwweDI4LDB4NDYsMHhjMywweDAzLDB4MzgsMHhjZAorICAgICAgICB9CisgICAgICB9LAorICAgICAgeyAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAiLAorICAgICAgICB7MHhkNSwweDk3LDB4NmYsMHg3OSwweGQ4LDB4M2QsMHgzYSwweDBkLAorICAgICAgICAgMHhjOSwweDgwLDB4NmMsMHgzYywweDY2LDB4ZjMsMHhlZiwweGQ4CisgICAgICAgIH0KKyAgICAgIH0KKyAgIH07CisgICBpbnQgaTsKKyAgIGhhc2hfc3RhdGUgbWQ7CisgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl07CisKKyAgIGZvciAoaSA9IDA7IGkgPCAoaW50KShzaXplb2YodGVzdHMpIC8gc2l6ZW9mKHRlc3RzWzBdKSk7IGkrKykgeworICAgICAgIG1kMl9pbml0KCZtZCk7CisgICAgICAgbWQyX3Byb2Nlc3MoJm1kLCAodW5zaWduZWQgY2hhciopdGVzdHNbaV0ubXNnLCAodW5zaWduZWQgbG9uZylzdHJsZW4odGVzdHNbaV0ubXNnKSk7CisgICAgICAgbWQyX2RvbmUoJm1kLCBidWYpOworICAgICAgIGlmIChYTUVNQ01QKGJ1ZiwgdGVzdHNbaV0ubWQsIDE2KSAhPSAwKSB7CisgICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICB9CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7ICAgICAgICAKKyAgI2VuZGlmCit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvbWQyLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL21kNC5jIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9tZDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjY0NWVmCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9tZDQuYwpAQCAtMCwwICsxLDMwNyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBwYXJhbSBtZDQuYworICAgU3VibWl0dGVkIGJ5IERvYmVzIFZhbmRlcm1lZXIgIChkb2Jlc0BzbWFydHQuY29tKSAKKyovCisKKyNpZmRlZiBNRDQKKworY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3IgbWQ0X2Rlc2MgPQoreworICAgICJtZDQiLAorICAgIDYsCisgICAgMTYsCisgICAgNjQsCisgCisgICAgLyogT0lEICovCisgICB7IDEsIDIsIDg0MCwgMTEzNTQ5LCAyLCA0LCAgfSwKKyAgIDYsCisKKyAgICAmbWQ0X2luaXQsCisgICAgJm1kNF9wcm9jZXNzLAorICAgICZtZDRfZG9uZSwKKyAgICAmbWQ0X3Rlc3QsCisgICAgTlVMTAorfTsKKworI2RlZmluZSBTMTEgMworI2RlZmluZSBTMTIgNworI2RlZmluZSBTMTMgMTEKKyNkZWZpbmUgUzE0IDE5CisjZGVmaW5lIFMyMSAzCisjZGVmaW5lIFMyMiA1CisjZGVmaW5lIFMyMyA5CisjZGVmaW5lIFMyNCAxMworI2RlZmluZSBTMzEgMworI2RlZmluZSBTMzIgOQorI2RlZmluZSBTMzMgMTEKKyNkZWZpbmUgUzM0IDE1CisKKy8qIEYsIEcgYW5kIEggYXJlIGJhc2ljIE1ENCBmdW5jdGlvbnMuICovCisjZGVmaW5lIEYoeCwgeSwgeikgKHogXiAoeCAmICh5IF4geikpKQorI2RlZmluZSBHKHgsIHksIHopICgoeCAmIHkpIHwgKHogJiAoeCB8IHkpKSkKKyNkZWZpbmUgSCh4LCB5LCB6KSAoKHgpIF4gKHkpIF4gKHopKQorCisvKiBST1RBVEVfTEVGVCByb3RhdGVzIHggbGVmdCBuIGJpdHMuICovCisjZGVmaW5lIFJPVEFURV9MRUZUKHgsIG4pIFJPTGMoeCwgbikKKworLyogRkYsIEdHIGFuZCBISCBhcmUgdHJhbnNmb3JtYXRpb25zIGZvciByb3VuZHMgMSwgMiBhbmQgMyAqLyAKKy8qIFJvdGF0aW9uIGlzIHNlcGFyYXRlIGZyb20gYWRkaXRpb24gdG8gcHJldmVudCByZWNvbXB1dGF0aW9uICovIAorCisjZGVmaW5lIEZGKGEsIGIsIGMsIGQsIHgsIHMpIHsgXAorICAgIChhKSArPSBGICgoYiksIChjKSwgKGQpKSArICh4KTsgXAorICAgIChhKSA9IFJPVEFURV9MRUZUICgoYSksIChzKSk7IFwKKyAgfQorI2RlZmluZSBHRyhhLCBiLCBjLCBkLCB4LCBzKSB7IFwKKyAgICAoYSkgKz0gRyAoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDVhODI3OTk5VUw7IFwKKyAgICAoYSkgPSBST1RBVEVfTEVGVCAoKGEpLCAocykpOyBcCisgIH0KKyNkZWZpbmUgSEgoYSwgYiwgYywgZCwgeCwgcykgeyBcCisgICAgKGEpICs9IEggKChiKSwgKGMpLCAoZCkpICsgKHgpICsgMHg2ZWQ5ZWJhMVVMOyBcCisgICAgKGEpID0gUk9UQVRFX0xFRlQgKChhKSwgKHMpKTsgXAorICB9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyBpbnQgX21kNF9jb21wcmVzcyhoYXNoX3N0YXRlICptZCwgdW5zaWduZWQgY2hhciAqYnVmKQorI2Vsc2UKK3N0YXRpYyBpbnQgIG1kNF9jb21wcmVzcyhoYXNoX3N0YXRlICptZCwgdW5zaWduZWQgY2hhciAqYnVmKQorI2VuZGlmCit7CisgICAgdWxvbmczMiB4WzE2XSwgYSwgYiwgYywgZDsKKyAgICBpbnQgaTsKKworICAgIC8qIGNvcHkgc3RhdGUgKi8KKyAgICBhID0gbWQtPm1kNC5zdGF0ZVswXTsKKyAgICBiID0gbWQtPm1kNC5zdGF0ZVsxXTsKKyAgICBjID0gbWQtPm1kNC5zdGF0ZVsyXTsKKyAgICBkID0gbWQtPm1kNC5zdGF0ZVszXTsKKworICAgIC8qIGNvcHkgdGhlIHN0YXRlIGludG8gNTEyLWJpdHMgaW50byBXWzAuLjE1XSAqLworICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgICAgIExPQUQzMkwoeFtpXSwgYnVmICsgKDQqaSkpOworICAgIH0KKyAKKyAgICAvKiBSb3VuZCAxICovIAorICAgIEZGIChhLCBiLCBjLCBkLCB4WyAwXSwgUzExKTsgLyogMSAqLyAKKyAgICBGRiAoZCwgYSwgYiwgYywgeFsgMV0sIFMxMik7IC8qIDIgKi8gCisgICAgRkYgKGMsIGQsIGEsIGIsIHhbIDJdLCBTMTMpOyAvKiAzICovIAorICAgIEZGIChiLCBjLCBkLCBhLCB4WyAzXSwgUzE0KTsgLyogNCAqLyAKKyAgICBGRiAoYSwgYiwgYywgZCwgeFsgNF0sIFMxMSk7IC8qIDUgKi8gCisgICAgRkYgKGQsIGEsIGIsIGMsIHhbIDVdLCBTMTIpOyAvKiA2ICovIAorICAgIEZGIChjLCBkLCBhLCBiLCB4WyA2XSwgUzEzKTsgLyogNyAqLyAKKyAgICBGRiAoYiwgYywgZCwgYSwgeFsgN10sIFMxNCk7IC8qIDggKi8gCisgICAgRkYgKGEsIGIsIGMsIGQsIHhbIDhdLCBTMTEpOyAvKiA5ICovIAorICAgIEZGIChkLCBhLCBiLCBjLCB4WyA5XSwgUzEyKTsgLyogMTAgKi8KKyAgICBGRiAoYywgZCwgYSwgYiwgeFsxMF0sIFMxMyk7IC8qIDExICovIAorICAgIEZGIChiLCBjLCBkLCBhLCB4WzExXSwgUzE0KTsgLyogMTIgKi8KKyAgICBGRiAoYSwgYiwgYywgZCwgeFsxMl0sIFMxMSk7IC8qIDEzICovCisgICAgRkYgKGQsIGEsIGIsIGMsIHhbMTNdLCBTMTIpOyAvKiAxNCAqLyAKKyAgICBGRiAoYywgZCwgYSwgYiwgeFsxNF0sIFMxMyk7IC8qIDE1ICovIAorICAgIEZGIChiLCBjLCBkLCBhLCB4WzE1XSwgUzE0KTsgLyogMTYgKi8gCisgICAgCisgICAgLyogUm91bmQgMiAqLyAKKyAgICBHRyAoYSwgYiwgYywgZCwgeFsgMF0sIFMyMSk7IC8qIDE3ICovIAorICAgIEdHIChkLCBhLCBiLCBjLCB4WyA0XSwgUzIyKTsgLyogMTggKi8gCisgICAgR0cgKGMsIGQsIGEsIGIsIHhbIDhdLCBTMjMpOyAvKiAxOSAqLyAKKyAgICBHRyAoYiwgYywgZCwgYSwgeFsxMl0sIFMyNCk7IC8qIDIwICovIAorICAgIEdHIChhLCBiLCBjLCBkLCB4WyAxXSwgUzIxKTsgLyogMjEgKi8gCisgICAgR0cgKGQsIGEsIGIsIGMsIHhbIDVdLCBTMjIpOyAvKiAyMiAqLyAKKyAgICBHRyAoYywgZCwgYSwgYiwgeFsgOV0sIFMyMyk7IC8qIDIzICovIAorICAgIEdHIChiLCBjLCBkLCBhLCB4WzEzXSwgUzI0KTsgLyogMjQgKi8gCisgICAgR0cgKGEsIGIsIGMsIGQsIHhbIDJdLCBTMjEpOyAvKiAyNSAqLyAKKyAgICBHRyAoZCwgYSwgYiwgYywgeFsgNl0sIFMyMik7IC8qIDI2ICovIAorICAgIEdHIChjLCBkLCBhLCBiLCB4WzEwXSwgUzIzKTsgLyogMjcgKi8gCisgICAgR0cgKGIsIGMsIGQsIGEsIHhbMTRdLCBTMjQpOyAvKiAyOCAqLyAKKyAgICBHRyAoYSwgYiwgYywgZCwgeFsgM10sIFMyMSk7IC8qIDI5ICovIAorICAgIEdHIChkLCBhLCBiLCBjLCB4WyA3XSwgUzIyKTsgLyogMzAgKi8gCisgICAgR0cgKGMsIGQsIGEsIGIsIHhbMTFdLCBTMjMpOyAvKiAzMSAqLyAKKyAgICBHRyAoYiwgYywgZCwgYSwgeFsxNV0sIFMyNCk7IC8qIDMyICovIAorICAgIAorICAgIC8qIFJvdW5kIDMgKi8KKyAgICBISCAoYSwgYiwgYywgZCwgeFsgMF0sIFMzMSk7IC8qIDMzICovIAorICAgIEhIIChkLCBhLCBiLCBjLCB4WyA4XSwgUzMyKTsgLyogMzQgKi8gCisgICAgSEggKGMsIGQsIGEsIGIsIHhbIDRdLCBTMzMpOyAvKiAzNSAqLyAKKyAgICBISCAoYiwgYywgZCwgYSwgeFsxMl0sIFMzNCk7IC8qIDM2ICovIAorICAgIEhIIChhLCBiLCBjLCBkLCB4WyAyXSwgUzMxKTsgLyogMzcgKi8gCisgICAgSEggKGQsIGEsIGIsIGMsIHhbMTBdLCBTMzIpOyAvKiAzOCAqLyAKKyAgICBISCAoYywgZCwgYSwgYiwgeFsgNl0sIFMzMyk7IC8qIDM5ICovIAorICAgIEhIIChiLCBjLCBkLCBhLCB4WzE0XSwgUzM0KTsgLyogNDAgKi8gCisgICAgSEggKGEsIGIsIGMsIGQsIHhbIDFdLCBTMzEpOyAvKiA0MSAqLyAKKyAgICBISCAoZCwgYSwgYiwgYywgeFsgOV0sIFMzMik7IC8qIDQyICovIAorICAgIEhIIChjLCBkLCBhLCBiLCB4WyA1XSwgUzMzKTsgLyogNDMgKi8gCisgICAgSEggKGIsIGMsIGQsIGEsIHhbMTNdLCBTMzQpOyAvKiA0NCAqLyAKKyAgICBISCAoYSwgYiwgYywgZCwgeFsgM10sIFMzMSk7IC8qIDQ1ICovIAorICAgIEhIIChkLCBhLCBiLCBjLCB4WzExXSwgUzMyKTsgLyogNDYgKi8gCisgICAgSEggKGMsIGQsIGEsIGIsIHhbIDddLCBTMzMpOyAvKiA0NyAqLyAKKyAgICBISCAoYiwgYywgZCwgYSwgeFsxNV0sIFMzNCk7IC8qIDQ4ICovIAorICAgIAorCisgICAgLyogVXBkYXRlIG91ciBzdGF0ZSAqLworICAgIG1kLT5tZDQuc3RhdGVbMF0gPSBtZC0+bWQ0LnN0YXRlWzBdICsgYTsKKyAgICBtZC0+bWQ0LnN0YXRlWzFdID0gbWQtPm1kNC5zdGF0ZVsxXSArIGI7CisgICAgbWQtPm1kNC5zdGF0ZVsyXSA9IG1kLT5tZDQuc3RhdGVbMl0gKyBjOworICAgIG1kLT5tZDQuc3RhdGVbM10gPSBtZC0+bWQ0LnN0YXRlWzNdICsgZDsKKworICAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBtZDRfY29tcHJlc3MoaGFzaF9zdGF0ZSAqbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKyAgIGludCBlcnI7CisgICBlcnIgPSBfbWQ0X2NvbXByZXNzKG1kLCBidWYpOworICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiAyMCArIHNpemVvZihpbnQpKTsKKyAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyoqCisgICBJbml0aWFsaXplIHRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gbWQgICBUaGUgaGFzaCBzdGF0ZSB5b3Ugd2lzaCB0byBpbml0aWFsaXplCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgbWQ0X2luaXQoaGFzaF9zdGF0ZSAqIG1kKQoreworICAgTFRDX0FSR0NISyhtZCAhPSBOVUxMKTsKKyAgIG1kLT5tZDQuc3RhdGVbMF0gPSAweDY3NDUyMzAxVUw7CisgICBtZC0+bWQ0LnN0YXRlWzFdID0gMHhlZmNkYWI4OVVMOworICAgbWQtPm1kNC5zdGF0ZVsyXSA9IDB4OThiYWRjZmVVTDsKKyAgIG1kLT5tZDQuc3RhdGVbM10gPSAweDEwMzI1NDc2VUw7CisgICBtZC0+bWQ0Lmxlbmd0aCAgPSAwOworICAgbWQtPm1kNC5jdXJsZW4gID0gMDsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgICBQcm9jZXNzIGEgYmxvY2sgb2YgbWVtb3J5IHRob3VnaCB0aGUgaGFzaAorICAgQHBhcmFtIG1kICAgICBUaGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIGluICAgICBUaGUgZGF0YSB0byBoYXNoCisgICBAcGFyYW0gaW5sZW4gIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKG9jdGV0cykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK0hBU0hfUFJPQ0VTUyhtZDRfcHJvY2VzcywgbWQ0X2NvbXByZXNzLCBtZDQsIDY0KQorCisvKioKKyAgIFRlcm1pbmF0ZSB0aGUgaGFzaCB0byBnZXQgdGhlIGRpZ2VzdAorICAgQHBhcmFtIG1kICBUaGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIG91dCBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGhhc2ggKDE2IGJ5dGVzKQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IG1kNF9kb25lKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqb3V0KQoreworICAgIGludCBpOworCisgICAgTFRDX0FSR0NISyhtZCAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhvdXQgIT0gTlVMTCk7CisKKyAgICBpZiAobWQtPm1kNC5jdXJsZW4gPj0gc2l6ZW9mKG1kLT5tZDQuYnVmKSkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgICB9CisKKyAgICAvKiBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlICovCisgICAgbWQtPm1kNC5sZW5ndGggKz0gbWQtPm1kNC5jdXJsZW4gKiA4OworCisgICAgLyogYXBwZW5kIHRoZSAnMScgYml0ICovCisgICAgbWQtPm1kNC5idWZbbWQtPm1kNC5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikweDgwOworCisgICAgLyogaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgYWJvdmUgNTYgYnl0ZXMgd2UgYXBwZW5kIHplcm9zCisgICAgICogdGhlbiBjb21wcmVzcy4gIFRoZW4gd2UgY2FuIGZhbGwgYmFjayB0byBwYWRkaW5nIHplcm9zIGFuZCBsZW5ndGgKKyAgICAgKiBlbmNvZGluZyBsaWtlIG5vcm1hbC4KKyAgICAgKi8KKyAgICBpZiAobWQtPm1kNC5jdXJsZW4gPiA1NikgeworICAgICAgICB3aGlsZSAobWQtPm1kNC5jdXJsZW4gPCA2NCkgeworICAgICAgICAgICAgbWQtPm1kNC5idWZbbWQtPm1kNC5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikwOworICAgICAgICB9CisgICAgICAgIG1kNF9jb21wcmVzcyhtZCwgbWQtPm1kNC5idWYpOworICAgICAgICBtZC0+bWQ0LmN1cmxlbiA9IDA7CisgICAgfQorCisgICAgLyogcGFkIHVwdG8gNTYgYnl0ZXMgb2YgemVyb2VzICovCisgICAgd2hpbGUgKG1kLT5tZDQuY3VybGVuIDwgNTYpIHsKKyAgICAgICAgbWQtPm1kNC5idWZbbWQtPm1kNC5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikwOworICAgIH0KKworICAgIC8qIHN0b3JlIGxlbmd0aCAqLworICAgIFNUT1JFNjRMKG1kLT5tZDQubGVuZ3RoLCBtZC0+bWQ0LmJ1Zis1Nik7CisgICAgbWQ0X2NvbXByZXNzKG1kLCBtZC0+bWQ0LmJ1Zik7CisKKyAgICAvKiBjb3B5IG91dHB1dCAqLworICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKyAgICAgICAgU1RPUkUzMkwobWQtPm1kNC5zdGF0ZVtpXSwgb3V0Kyg0KmkpKTsKKyAgICB9CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICAgemVyb21lbShtZCwgc2l6ZW9mKGhhc2hfc3RhdGUpKTsKKyNlbmRpZiAKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBTZWxmLXRlc3QgdGhlIGhhc2gKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQKKyovICAKK2ludCBtZDRfdGVzdCh2b2lkKQoreworICNpZm5kZWYgTFRDX1RFU1QKKyAgICByZXR1cm4gQ1JZUFRfTk9QOworICNlbHNlICAgIAorICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWQ0X3Rlc3RfY2FzZSB7CisgICAgICAgIGNoYXIgKmlucHV0OworICAgICAgICB1bnNpZ25lZCBjaGFyIGRpZ2VzdFsxNl07CisgICAgfSBjYXNlc1tdID0geworICAgICAgICB7ICIiLCAKKyAgICAgICAgICB7MHgzMSwgMHhkNiwgMHhjZiwgMHhlMCwgMHhkMSwgMHg2YSwgMHhlOSwgMHgzMSwKKyAgICAgICAgICAgMHhiNywgMHgzYywgMHg1OSwgMHhkNywgMHhlMCwgMHhjMCwgMHg4OSwgMHhjMH0gfSwKKyAgICAgICAgeyAiYSIsCisgICAgICAgICAgezB4YmQsIDB4ZTUsIDB4MmMsIDB4YjMsIDB4MWQsIDB4ZTMsIDB4M2UsIDB4NDYsCisgICAgICAgICAgIDB4MjQsIDB4NWUsIDB4MDUsIDB4ZmIsIDB4ZGIsIDB4ZDYsIDB4ZmIsIDB4MjR9IH0sCisgICAgICAgIHsgImFiYyIsCisgICAgICAgICAgezB4YTQsIDB4NDgsIDB4MDEsIDB4N2EsIDB4YWYsIDB4MjEsIDB4ZDgsIDB4NTIsIAorICAgICAgICAgICAweDVmLCAweGMxLCAweDBhLCAweGU4LCAweDdhLCAweGE2LCAweDcyLCAweDlkfSB9LAorICAgICAgICB7ICJtZXNzYWdlIGRpZ2VzdCIsIAorICAgICAgICAgIHsweGQ5LCAweDEzLCAweDBhLCAweDgxLCAweDY0LCAweDU0LCAweDlmLCAweGU4LCAKKyAgICAgICAgICAgMHgxOCwgMHg4NywgMHg0OCwgMHgwNiwgMHhlMSwgMHhjNywgMHgwMSwgMHg0Yn0gfSwKKyAgICAgICAgeyAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLCAKKyAgICAgICAgICB7MHhkNywgMHg5ZSwgMHgxYywgMHgzMCwgMHg4YSwgMHhhNSwgMHhiYiwgMHhjZCwgCisgICAgICAgICAgIDB4ZWUsIDB4YTgsIDB4ZWQsIDB4NjMsIDB4ZGYsIDB4NDEsIDB4MmQsIDB4YTl9IH0sCisgICAgICAgIHsgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5IiwgCisgICAgICAgICAgezB4MDQsIDB4M2YsIDB4ODUsIDB4ODIsIDB4ZjIsIDB4NDEsIDB4ZGIsIDB4MzUsIAorICAgICAgICAgICAweDFjLCAweGU2LCAweDI3LCAweGUxLCAweDUzLCAweGU3LCAweGYwLCAweGU0fSB9LAorICAgICAgICB7ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsIAorICAgICAgICAgIHsweGUzLCAweDNiLCAweDRkLCAweGRjLCAweDljLCAweDM4LCAweGYyLCAweDE5LCAKKyAgICAgICAgICAgMHg5YywgMHgzZSwgMHg3YiwgMHgxNiwgMHg0ZiwgMHhjYywgMHgwNSwgMHgzNn0gfSwKKyAgICB9OworICAgIGludCBpOworICAgIGhhc2hfc3RhdGUgbWQ7CisgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbMTZdOworCisgICAgZm9yKGkgPSAwOyBpIDwgKGludCkoc2l6ZW9mKGNhc2VzKSAvIHNpemVvZihjYXNlc1swXSkpOyBpKyspIHsKKyAgICAgICAgbWQ0X2luaXQoJm1kKTsKKyAgICAgICAgbWQ0X3Byb2Nlc3MoJm1kLCAodW5zaWduZWQgY2hhciAqKWNhc2VzW2ldLmlucHV0LCAodW5zaWduZWQgbG9uZylzdHJsZW4oY2FzZXNbaV0uaW5wdXQpKTsKKyAgICAgICAgbWQ0X2RvbmUoJm1kLCBkaWdlc3QpOworICAgICAgICBpZiAoWE1FTUNNUChkaWdlc3QsIGNhc2VzW2ldLmRpZ2VzdCwgMTYpICE9IDApIHsKKyAgICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICAgfQorCisgICAgfQorICAgIHJldHVybiBDUllQVF9PSzsKKyAgI2VuZGlmCit9CisKKyNlbmRpZgorCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9tZDQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvbWQ1LmMgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL21kNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2Mjc0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL21kNS5jCkBAIC0wLDAgKzEsMzY4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKworLyoqCisgIEBmaWxlIG1kNS5jCisgIE1ENSBoYXNoIGZ1bmN0aW9uIGJ5IFRvbSBTdCBEZW5pcyAKKyovCisKKyNpZmRlZiBNRDUKKworY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3IgbWQ1X2Rlc2MgPQoreworICAgICJtZDUiLAorICAgIDMsCisgICAgMTYsCisgICAgNjQsCisKKyAgICAvKiBPSUQgKi8KKyAgIHsgMSwgMiwgODQwLCAxMTM1NDksIDIsIDUsICB9LAorICAgNiwKKworICAgICZtZDVfaW5pdCwKKyAgICAmbWQ1X3Byb2Nlc3MsCisgICAgJm1kNV9kb25lLAorICAgICZtZDVfdGVzdCwKKyAgICBOVUxMCit9OworCisjZGVmaW5lIEYoeCx5LHopICAoeiBeICh4ICYgKHkgXiB6KSkpCisjZGVmaW5lIEcoeCx5LHopICAoeSBeICh6ICYgKHkgXiB4KSkpCisjZGVmaW5lIEgoeCx5LHopICAoeF55XnopCisjZGVmaW5lIEkoeCx5LHopICAoeV4oeHwofnopKSkKKworI2lmZGVmIExUQ19TTUFMTF9DT0RFCisKKyNkZWZpbmUgRkYoYSxiLGMsZCxNLHMsdCkgXAorICAgIGEgPSAoYSArIEYoYixjLGQpICsgTSArIHQpOyBhID0gUk9MKGEsIHMpICsgYjsKKworI2RlZmluZSBHRyhhLGIsYyxkLE0scyx0KSBcCisgICAgYSA9IChhICsgRyhiLGMsZCkgKyBNICsgdCk7IGEgPSBST0woYSwgcykgKyBiOworCisjZGVmaW5lIEhIKGEsYixjLGQsTSxzLHQpIFwKKyAgICBhID0gKGEgKyBIKGIsYyxkKSArIE0gKyB0KTsgYSA9IFJPTChhLCBzKSArIGI7CisKKyNkZWZpbmUgSUkoYSxiLGMsZCxNLHMsdCkgXAorICAgIGEgPSAoYSArIEkoYixjLGQpICsgTSArIHQpOyBhID0gUk9MKGEsIHMpICsgYjsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgV29yZGVyWzY0XSA9IHsKKyAgIDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsCisgICAxLDYsMTEsMCw1LDEwLDE1LDQsOSwxNCwzLDgsMTMsMiw3LDEyLAorICAgNSw4LDExLDE0LDEsNCw3LDEwLDEzLDAsMyw2LDksMTIsMTUsMiwKKyAgIDAsNywxNCw1LDEyLDMsMTAsMSw4LDE1LDYsMTMsNCwxMSwyLDkKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIFJvcmRlcls2NF0gPSB7CisgICA3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLAorICAgNSw5LDE0LDIwLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLAorICAgNCwxMSwxNiwyMyw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNCwxMSwxNiwyMywKKyAgIDYsMTAsMTUsMjEsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjEKK307CisKK3N0YXRpYyBjb25zdCB1bG9uZzMyIEtvcmRlcls2NF0gPSB7CisweGQ3NmFhNDc4VUwsIDB4ZThjN2I3NTZVTCwgMHgyNDIwNzBkYlVMLCAweGMxYmRjZWVlVUwsIDB4ZjU3YzBmYWZVTCwgMHg0Nzg3YzYyYVVMLCAweGE4MzA0NjEzVUwsIDB4ZmQ0Njk1MDFVTCwKKzB4Njk4MDk4ZDhVTCwgMHg4YjQ0ZjdhZlVMLCAweGZmZmY1YmIxVUwsIDB4ODk1Y2Q3YmVVTCwgMHg2YjkwMTEyMlVMLCAweGZkOTg3MTkzVUwsIDB4YTY3OTQzOGVVTCwgMHg0OWI0MDgyMVVMLAorMHhmNjFlMjU2MlVMLCAweGMwNDBiMzQwVUwsIDB4MjY1ZTVhNTFVTCwgMHhlOWI2YzdhYVVMLCAweGQ2MmYxMDVkVUwsIDB4MDI0NDE0NTNVTCwgMHhkOGExZTY4MVVMLCAweGU3ZDNmYmM4VUwsCisweDIxZTFjZGU2VUwsIDB4YzMzNzA3ZDZVTCwgMHhmNGQ1MGQ4N1VMLCAweDQ1NWExNGVkVUwsIDB4YTllM2U5MDVVTCwgMHhmY2VmYTNmOFVMLCAweDY3NmYwMmQ5VUwsIDB4OGQyYTRjOGFVTCwKKzB4ZmZmYTM5NDJVTCwgMHg4NzcxZjY4MVVMLCAweDZkOWQ2MTIyVUwsIDB4ZmRlNTM4MGNVTCwgMHhhNGJlZWE0NFVMLCAweDRiZGVjZmE5VUwsIDB4ZjZiYjRiNjBVTCwgMHhiZWJmYmM3MFVMLAorMHgyODliN2VjNlVMLCAweGVhYTEyN2ZhVUwsIDB4ZDRlZjMwODVVTCwgMHgwNDg4MWQwNVVMLCAweGQ5ZDRkMDM5VUwsIDB4ZTZkYjk5ZTVVTCwgMHgxZmEyN2NmOFVMLCAweGM0YWM1NjY1VUwsCisweGY0MjkyMjQ0VUwsIDB4NDMyYWZmOTdVTCwgMHhhYjk0MjNhN1VMLCAweGZjOTNhMDM5VUwsIDB4NjU1YjU5YzNVTCwgMHg4ZjBjY2M5MlVMLCAweGZmZWZmNDdkVUwsIDB4ODU4NDVkZDFVTCwKKzB4NmZhODdlNGZVTCwgMHhmZTJjZTZlMFVMLCAweGEzMDE0MzE0VUwsIDB4NGUwODExYTFVTCwgMHhmNzUzN2U4MlVMLCAweGJkM2FmMjM1VUwsIDB4MmFkN2QyYmJVTCwgMHhlYjg2ZDM5MVVMCit9OworCisjZWxzZQorCisjZGVmaW5lIEZGKGEsYixjLGQsTSxzLHQpIFwKKyAgICBhID0gKGEgKyBGKGIsYyxkKSArIE0gKyB0KTsgYSA9IFJPTGMoYSwgcykgKyBiOworCisjZGVmaW5lIEdHKGEsYixjLGQsTSxzLHQpIFwKKyAgICBhID0gKGEgKyBHKGIsYyxkKSArIE0gKyB0KTsgYSA9IFJPTGMoYSwgcykgKyBiOworCisjZGVmaW5lIEhIKGEsYixjLGQsTSxzLHQpIFwKKyAgICBhID0gKGEgKyBIKGIsYyxkKSArIE0gKyB0KTsgYSA9IFJPTGMoYSwgcykgKyBiOworCisjZGVmaW5lIElJKGEsYixjLGQsTSxzLHQpIFwKKyAgICBhID0gKGEgKyBJKGIsYyxkKSArIE0gKyB0KTsgYSA9IFJPTGMoYSwgcykgKyBiOworCisKKyNlbmRpZiAgIAorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IF9tZDVfY29tcHJlc3MoaGFzaF9zdGF0ZSAqbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKKyNlbHNlCitzdGF0aWMgaW50ICBtZDVfY29tcHJlc3MoaGFzaF9zdGF0ZSAqbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKKyNlbmRpZgoreworICAgIHVsb25nMzIgaSwgV1sxNl0sIGEsIGIsIGMsIGQ7CisjaWZkZWYgTFRDX1NNQUxMX0NPREUKKyAgICB1bG9uZzMyIHQ7CisjZW5kaWYKKworICAgIC8qIGNvcHkgdGhlIHN0YXRlIGludG8gNTEyLWJpdHMgaW50byBXWzAuLjE1XSAqLworICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgICAgIExPQUQzMkwoV1tpXSwgYnVmICsgKDQqaSkpOworICAgIH0KKyAKKyAgICAvKiBjb3B5IHN0YXRlICovCisgICAgYSA9IG1kLT5tZDUuc3RhdGVbMF07CisgICAgYiA9IG1kLT5tZDUuc3RhdGVbMV07CisgICAgYyA9IG1kLT5tZDUuc3RhdGVbMl07CisgICAgZCA9IG1kLT5tZDUuc3RhdGVbM107CisKKyNpZmRlZiBMVENfU01BTExfQ09ERQorICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgKytpKSB7CisgICAgICAgIEZGKGEsYixjLGQsV1tXb3JkZXJbaV1dLFJvcmRlcltpXSxLb3JkZXJbaV0pOworICAgICAgICB0ID0gZDsgZCA9IGM7IGMgPSBiOyBiID0gYTsgYSA9IHQ7CisgICAgfQorCisgICAgZm9yICg7IGkgPCAzMjsgKytpKSB7CisgICAgICAgIEdHKGEsYixjLGQsV1tXb3JkZXJbaV1dLFJvcmRlcltpXSxLb3JkZXJbaV0pOworICAgICAgICB0ID0gZDsgZCA9IGM7IGMgPSBiOyBiID0gYTsgYSA9IHQ7CisgICAgfQorCisgICAgZm9yICg7IGkgPCA0ODsgKytpKSB7CisgICAgICAgIEhIKGEsYixjLGQsV1tXb3JkZXJbaV1dLFJvcmRlcltpXSxLb3JkZXJbaV0pOworICAgICAgICB0ID0gZDsgZCA9IGM7IGMgPSBiOyBiID0gYTsgYSA9IHQ7CisgICAgfQorCisgICAgZm9yICg7IGkgPCA2NDsgKytpKSB7CisgICAgICAgIElJKGEsYixjLGQsV1tXb3JkZXJbaV1dLFJvcmRlcltpXSxLb3JkZXJbaV0pOworICAgICAgICB0ID0gZDsgZCA9IGM7IGMgPSBiOyBiID0gYTsgYSA9IHQ7CisgICAgfQorCisjZWxzZQorICAgIEZGKGEsYixjLGQsV1swXSw3LDB4ZDc2YWE0NzhVTCkKKyAgICBGRihkLGEsYixjLFdbMV0sMTIsMHhlOGM3Yjc1NlVMKQorICAgIEZGKGMsZCxhLGIsV1syXSwxNywweDI0MjA3MGRiVUwpCisgICAgRkYoYixjLGQsYSxXWzNdLDIyLDB4YzFiZGNlZWVVTCkKKyAgICBGRihhLGIsYyxkLFdbNF0sNywweGY1N2MwZmFmVUwpCisgICAgRkYoZCxhLGIsYyxXWzVdLDEyLDB4NDc4N2M2MmFVTCkKKyAgICBGRihjLGQsYSxiLFdbNl0sMTcsMHhhODMwNDYxM1VMKQorICAgIEZGKGIsYyxkLGEsV1s3XSwyMiwweGZkNDY5NTAxVUwpCisgICAgRkYoYSxiLGMsZCxXWzhdLDcsMHg2OTgwOThkOFVMKQorICAgIEZGKGQsYSxiLGMsV1s5XSwxMiwweDhiNDRmN2FmVUwpCisgICAgRkYoYyxkLGEsYixXWzEwXSwxNywweGZmZmY1YmIxVUwpCisgICAgRkYoYixjLGQsYSxXWzExXSwyMiwweDg5NWNkN2JlVUwpCisgICAgRkYoYSxiLGMsZCxXWzEyXSw3LDB4NmI5MDExMjJVTCkKKyAgICBGRihkLGEsYixjLFdbMTNdLDEyLDB4ZmQ5ODcxOTNVTCkKKyAgICBGRihjLGQsYSxiLFdbMTRdLDE3LDB4YTY3OTQzOGVVTCkKKyAgICBGRihiLGMsZCxhLFdbMTVdLDIyLDB4NDliNDA4MjFVTCkKKyAgICBHRyhhLGIsYyxkLFdbMV0sNSwweGY2MWUyNTYyVUwpCisgICAgR0coZCxhLGIsYyxXWzZdLDksMHhjMDQwYjM0MFVMKQorICAgIEdHKGMsZCxhLGIsV1sxMV0sMTQsMHgyNjVlNWE1MVVMKQorICAgIEdHKGIsYyxkLGEsV1swXSwyMCwweGU5YjZjN2FhVUwpCisgICAgR0coYSxiLGMsZCxXWzVdLDUsMHhkNjJmMTA1ZFVMKQorICAgIEdHKGQsYSxiLGMsV1sxMF0sOSwweDAyNDQxNDUzVUwpCisgICAgR0coYyxkLGEsYixXWzE1XSwxNCwweGQ4YTFlNjgxVUwpCisgICAgR0coYixjLGQsYSxXWzRdLDIwLDB4ZTdkM2ZiYzhVTCkKKyAgICBHRyhhLGIsYyxkLFdbOV0sNSwweDIxZTFjZGU2VUwpCisgICAgR0coZCxhLGIsYyxXWzE0XSw5LDB4YzMzNzA3ZDZVTCkKKyAgICBHRyhjLGQsYSxiLFdbM10sMTQsMHhmNGQ1MGQ4N1VMKQorICAgIEdHKGIsYyxkLGEsV1s4XSwyMCwweDQ1NWExNGVkVUwpCisgICAgR0coYSxiLGMsZCxXWzEzXSw1LDB4YTllM2U5MDVVTCkKKyAgICBHRyhkLGEsYixjLFdbMl0sOSwweGZjZWZhM2Y4VUwpCisgICAgR0coYyxkLGEsYixXWzddLDE0LDB4Njc2ZjAyZDlVTCkKKyAgICBHRyhiLGMsZCxhLFdbMTJdLDIwLDB4OGQyYTRjOGFVTCkKKyAgICBISChhLGIsYyxkLFdbNV0sNCwweGZmZmEzOTQyVUwpCisgICAgSEgoZCxhLGIsYyxXWzhdLDExLDB4ODc3MWY2ODFVTCkKKyAgICBISChjLGQsYSxiLFdbMTFdLDE2LDB4NmQ5ZDYxMjJVTCkKKyAgICBISChiLGMsZCxhLFdbMTRdLDIzLDB4ZmRlNTM4MGNVTCkKKyAgICBISChhLGIsYyxkLFdbMV0sNCwweGE0YmVlYTQ0VUwpCisgICAgSEgoZCxhLGIsYyxXWzRdLDExLDB4NGJkZWNmYTlVTCkKKyAgICBISChjLGQsYSxiLFdbN10sMTYsMHhmNmJiNGI2MFVMKQorICAgIEhIKGIsYyxkLGEsV1sxMF0sMjMsMHhiZWJmYmM3MFVMKQorICAgIEhIKGEsYixjLGQsV1sxM10sNCwweDI4OWI3ZWM2VUwpCisgICAgSEgoZCxhLGIsYyxXWzBdLDExLDB4ZWFhMTI3ZmFVTCkKKyAgICBISChjLGQsYSxiLFdbM10sMTYsMHhkNGVmMzA4NVVMKQorICAgIEhIKGIsYyxkLGEsV1s2XSwyMywweDA0ODgxZDA1VUwpCisgICAgSEgoYSxiLGMsZCxXWzldLDQsMHhkOWQ0ZDAzOVVMKQorICAgIEhIKGQsYSxiLGMsV1sxMl0sMTEsMHhlNmRiOTllNVVMKQorICAgIEhIKGMsZCxhLGIsV1sxNV0sMTYsMHgxZmEyN2NmOFVMKQorICAgIEhIKGIsYyxkLGEsV1syXSwyMywweGM0YWM1NjY1VUwpCisgICAgSUkoYSxiLGMsZCxXWzBdLDYsMHhmNDI5MjI0NFVMKQorICAgIElJKGQsYSxiLGMsV1s3XSwxMCwweDQzMmFmZjk3VUwpCisgICAgSUkoYyxkLGEsYixXWzE0XSwxNSwweGFiOTQyM2E3VUwpCisgICAgSUkoYixjLGQsYSxXWzVdLDIxLDB4ZmM5M2EwMzlVTCkKKyAgICBJSShhLGIsYyxkLFdbMTJdLDYsMHg2NTViNTljM1VMKQorICAgIElJKGQsYSxiLGMsV1szXSwxMCwweDhmMGNjYzkyVUwpCisgICAgSUkoYyxkLGEsYixXWzEwXSwxNSwweGZmZWZmNDdkVUwpCisgICAgSUkoYixjLGQsYSxXWzFdLDIxLDB4ODU4NDVkZDFVTCkKKyAgICBJSShhLGIsYyxkLFdbOF0sNiwweDZmYTg3ZTRmVUwpCisgICAgSUkoZCxhLGIsYyxXWzE1XSwxMCwweGZlMmNlNmUwVUwpCisgICAgSUkoYyxkLGEsYixXWzZdLDE1LDB4YTMwMTQzMTRVTCkKKyAgICBJSShiLGMsZCxhLFdbMTNdLDIxLDB4NGUwODExYTFVTCkKKyAgICBJSShhLGIsYyxkLFdbNF0sNiwweGY3NTM3ZTgyVUwpCisgICAgSUkoZCxhLGIsYyxXWzExXSwxMCwweGJkM2FmMjM1VUwpCisgICAgSUkoYyxkLGEsYixXWzJdLDE1LDB4MmFkN2QyYmJVTCkKKyAgICBJSShiLGMsZCxhLFdbOV0sMjEsMHhlYjg2ZDM5MVVMKQorI2VuZGlmCisKKyAgICBtZC0+bWQ1LnN0YXRlWzBdID0gbWQtPm1kNS5zdGF0ZVswXSArIGE7CisgICAgbWQtPm1kNS5zdGF0ZVsxXSA9IG1kLT5tZDUuc3RhdGVbMV0gKyBiOworICAgIG1kLT5tZDUuc3RhdGVbMl0gPSBtZC0+bWQ1LnN0YXRlWzJdICsgYzsKKyAgICBtZC0+bWQ1LnN0YXRlWzNdID0gbWQtPm1kNS5zdGF0ZVszXSArIGQ7CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyBpbnQgbWQ1X2NvbXByZXNzKGhhc2hfc3RhdGUgKm1kLCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisgICBpbnQgZXJyOworICAgZXJyID0gX21kNV9jb21wcmVzcyhtZCwgYnVmKTsKKyAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIpICogMjEpOworICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKioKKyAgIEluaXRpYWxpemUgdGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBtZCAgIFRoZSBoYXNoIHN0YXRlIHlvdSB3aXNoIHRvIGluaXRpYWxpemUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBtZDVfaW5pdChoYXNoX3N0YXRlICogbWQpCit7CisgICBMVENfQVJHQ0hLKG1kICE9IE5VTEwpOworICAgbWQtPm1kNS5zdGF0ZVswXSA9IDB4Njc0NTIzMDFVTDsKKyAgIG1kLT5tZDUuc3RhdGVbMV0gPSAweGVmY2RhYjg5VUw7CisgICBtZC0+bWQ1LnN0YXRlWzJdID0gMHg5OGJhZGNmZVVMOworICAgbWQtPm1kNS5zdGF0ZVszXSA9IDB4MTAzMjU0NzZVTDsKKyAgIG1kLT5tZDUuY3VybGVuID0gMDsKKyAgIG1kLT5tZDUubGVuZ3RoID0gMDsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgICBQcm9jZXNzIGEgYmxvY2sgb2YgbWVtb3J5IHRob3VnaCB0aGUgaGFzaAorICAgQHBhcmFtIG1kICAgICBUaGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIGluICAgICBUaGUgZGF0YSB0byBoYXNoCisgICBAcGFyYW0gaW5sZW4gIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKG9jdGV0cykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK0hBU0hfUFJPQ0VTUyhtZDVfcHJvY2VzcywgbWQ1X2NvbXByZXNzLCBtZDUsIDY0KQorCisvKioKKyAgIFRlcm1pbmF0ZSB0aGUgaGFzaCB0byBnZXQgdGhlIGRpZ2VzdAorICAgQHBhcmFtIG1kICBUaGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIG91dCBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGhhc2ggKDE2IGJ5dGVzKQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IG1kNV9kb25lKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqb3V0KQoreworICAgIGludCBpOworCisgICAgTFRDX0FSR0NISyhtZCAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhvdXQgIT0gTlVMTCk7CisKKyAgICBpZiAobWQtPm1kNS5jdXJsZW4gPj0gc2l6ZW9mKG1kLT5tZDUuYnVmKSkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgICB9CisKKworICAgIC8qIGluY3JlYXNlIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgKi8KKyAgICBtZC0+bWQ1Lmxlbmd0aCArPSBtZC0+bWQ1LmN1cmxlbiAqIDg7CisKKyAgICAvKiBhcHBlbmQgdGhlICcxJyBiaXQgKi8KKyAgICBtZC0+bWQ1LmJ1ZlttZC0+bWQ1LmN1cmxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKTB4ODA7CisKKyAgICAvKiBpZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSBhYm92ZSA1NiBieXRlcyB3ZSBhcHBlbmQgemVyb3MKKyAgICAgKiB0aGVuIGNvbXByZXNzLiAgVGhlbiB3ZSBjYW4gZmFsbCBiYWNrIHRvIHBhZGRpbmcgemVyb3MgYW5kIGxlbmd0aAorICAgICAqIGVuY29kaW5nIGxpa2Ugbm9ybWFsLgorICAgICAqLworICAgIGlmIChtZC0+bWQ1LmN1cmxlbiA+IDU2KSB7CisgICAgICAgIHdoaWxlIChtZC0+bWQ1LmN1cmxlbiA8IDY0KSB7CisgICAgICAgICAgICBtZC0+bWQ1LmJ1ZlttZC0+bWQ1LmN1cmxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKTA7CisgICAgICAgIH0KKyAgICAgICAgbWQ1X2NvbXByZXNzKG1kLCBtZC0+bWQ1LmJ1Zik7CisgICAgICAgIG1kLT5tZDUuY3VybGVuID0gMDsKKyAgICB9CisKKyAgICAvKiBwYWQgdXB0byA1NiBieXRlcyBvZiB6ZXJvZXMgKi8KKyAgICB3aGlsZSAobWQtPm1kNS5jdXJsZW4gPCA1NikgeworICAgICAgICBtZC0+bWQ1LmJ1ZlttZC0+bWQ1LmN1cmxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKTA7CisgICAgfQorCisgICAgLyogc3RvcmUgbGVuZ3RoICovCisgICAgU1RPUkU2NEwobWQtPm1kNS5sZW5ndGgsIG1kLT5tZDUuYnVmKzU2KTsKKyAgICBtZDVfY29tcHJlc3MobWQsIG1kLT5tZDUuYnVmKTsKKworICAgIC8qIGNvcHkgb3V0cHV0ICovCisgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworICAgICAgICBTVE9SRTMyTChtZC0+bWQ1LnN0YXRlW2ldLCBvdXQrKDQqaSkpOworICAgIH0KKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgICB6ZXJvbWVtKG1kLCBzaXplb2YoaGFzaF9zdGF0ZSkpOworI2VuZGlmCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgU2VsZi10ZXN0IHRoZSBoYXNoCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdHMgaGF2ZSBiZWVuIGRpc2FibGVkCisqLyAgCitpbnQgIG1kNV90ZXN0KHZvaWQpCit7CisgI2lmbmRlZiBMVENfVEVTVAorICAgIHJldHVybiBDUllQVF9OT1A7CisgI2Vsc2UgICAgCisgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgY2hhciAqbXNnOworICAgICAgdW5zaWduZWQgY2hhciBoYXNoWzE2XTsKKyAgfSB0ZXN0c1tdID0geworICAgIHsgIiIsCisgICAgICB7IDB4ZDQsIDB4MWQsIDB4OGMsIDB4ZDksIDB4OGYsIDB4MDAsIDB4YjIsIDB4MDQsIAorICAgICAgICAweGU5LCAweDgwLCAweDA5LCAweDk4LCAweGVjLCAweGY4LCAweDQyLCAweDdlIH0gfSwKKyAgICB7ICJhIiwKKyAgICAgIHsweDBjLCAweGMxLCAweDc1LCAweGI5LCAweGMwLCAweGYxLCAweGI2LCAweGE4LCAKKyAgICAgICAweDMxLCAweGMzLCAweDk5LCAweGUyLCAweDY5LCAweDc3LCAweDI2LCAweDYxIH0gfSwKKyAgICB7ICJhYmMiLAorICAgICAgeyAweDkwLCAweDAxLCAweDUwLCAweDk4LCAweDNjLCAweGQyLCAweDRmLCAweGIwLCAKKyAgICAgICAgMHhkNiwgMHg5NiwgMHgzZiwgMHg3ZCwgMHgyOCwgMHhlMSwgMHg3ZiwgMHg3MiB9IH0sCisgICAgeyAibWVzc2FnZSBkaWdlc3QiLCAKKyAgICAgIHsgMHhmOSwgMHg2YiwgMHg2OSwgMHg3ZCwgMHg3YywgMHhiNywgMHg5MywgMHg4ZCwgCisgICAgICAgIDB4NTIsIDB4NWEsIDB4MmYsIDB4MzEsIDB4YWEsIDB4ZjEsIDB4NjEsIDB4ZDAgfSB9LCAKKyAgICB7ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsCisgICAgICB7IDB4YzMsIDB4ZmMsIDB4ZDMsIDB4ZDcsIDB4NjEsIDB4OTIsIDB4ZTQsIDB4MDAsIAorICAgICAgICAweDdkLCAweGZiLCAweDQ5LCAweDZjLCAweGNhLCAweDY3LCAweGUxLCAweDNiIH0gfSwKKyAgICB7ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIsCisgICAgICB7IDB4ZDEsIDB4NzQsIDB4YWIsIDB4OTgsIDB4ZDIsIDB4NzcsIDB4ZDksIDB4ZjUsIAorICAgICAgICAweGE1LCAweDYxLCAweDFjLCAweDJjLCAweDlmLCAweDQxLCAweDlkLCAweDlmIH0gfSwKKyAgICB7ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MCIsCisgICAgICB7IDB4NTcsIDB4ZWQsIDB4ZjQsIDB4YTIsIDB4MmIsIDB4ZTMsIDB4YzksIDB4NTUsIAorICAgICAgICAweGFjLCAweDQ5LCAweGRhLCAweDJlLCAweDIxLCAweDA3LCAweGI2LCAweDdhIH0gfSwgCisgICAgeyBOVUxMLCB7IDAgfSB9CisgIH07CisKKyAgaW50IGk7CisgIHVuc2lnbmVkIGNoYXIgdG1wWzE2XTsKKyAgaGFzaF9zdGF0ZSBtZDsKKworICBmb3IgKGkgPSAwOyB0ZXN0c1tpXS5tc2cgIT0gTlVMTDsgaSsrKSB7CisgICAgICBtZDVfaW5pdCgmbWQpOworICAgICAgbWQ1X3Byb2Nlc3MoJm1kLCAodW5zaWduZWQgY2hhciAqKXRlc3RzW2ldLm1zZywgKHVuc2lnbmVkIGxvbmcpc3RybGVuKHRlc3RzW2ldLm1zZykpOworICAgICAgbWQ1X2RvbmUoJm1kLCB0bXApOworICAgICAgaWYgKFhNRU1DTVAodG1wLCB0ZXN0c1tpXS5oYXNoLCAxNikgIT0gMCkgeworICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgIH0KKyAgfQorICByZXR1cm4gQ1JZUFRfT0s7CisgI2VuZGlmCit9CisKKyNlbmRpZgorCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9tZDUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvcm1kMTI4LmMgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3JtZDEyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyOTQ2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3JtZDEyOC5jCkBAIC0wLDAgKzEsNDEwIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQHBhcmFtIHJtZDEyOC5jCisgICBSTUQxMjggSGFzaCBmdW5jdGlvbgorKi8gICAKKworLyogSW1wbGVtZW50YXRpb24gb2YgUklQRU1ELTEyOCBiYXNlZCBvbiB0aGUgc291cmNlIGJ5IEFudG9vbiBCb3NzZWxhZXJzLCBFU0FULUNPU0lDCisgKgorICogVGhpcyBzb3VyY2UgaGFzIGJlZW4gcmFkaWNhbGx5IG92ZXJoYXVsZWQgdG8gYmUgcG9ydGFibGUgYW5kIHdvcmsgd2l0aGluCisgKiB0aGUgTGliVG9tQ3J5cHQgQVBJIGJ5IFRvbSBTdCBEZW5pcworICovCisKKyNpZmRlZiBSSVBFTUQxMjgKKworY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3Igcm1kMTI4X2Rlc2MgPQoreworICAgICJybWQxMjgiLAorICAgIDgsCisgICAgMTYsCisgICAgNjQsCisKKyAgICAvKiBPSUQgKi8KKyAgIHsgMSwgMCwgMTAxMTgsIDMsIDAsIDUwIH0sCisgICA2LAorCisgICAgJnJtZDEyOF9pbml0LAorICAgICZybWQxMjhfcHJvY2VzcywKKyAgICAmcm1kMTI4X2RvbmUsCisgICAgJnJtZDEyOF90ZXN0LAorICAgIE5VTEwKK307CisKKy8qIHRoZSBmb3VyIGJhc2ljIGZ1bmN0aW9ucyBGKCksIEcoKSBhbmQgSCgpICovCisjZGVmaW5lIEYoeCwgeSwgeikgICAgICAgICgoeCkgXiAoeSkgXiAoeikpIAorI2RlZmluZSBHKHgsIHksIHopICAgICAgICAoKCh4KSAmICh5KSkgfCAofih4KSAmICh6KSkpIAorI2RlZmluZSBIKHgsIHksIHopICAgICAgICAoKCh4KSB8IH4oeSkpIF4gKHopKQorI2RlZmluZSBJKHgsIHksIHopICAgICAgICAoKCh4KSAmICh6KSkgfCAoKHkpICYgfih6KSkpIAorICAKKy8qIHRoZSBlaWdodCBiYXNpYyBvcGVyYXRpb25zIEZGKCkgdGhyb3VnaCBJSUkoKSAqLworI2RlZmluZSBGRihhLCBiLCBjLCBkLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEYoKGIpLCAoYyksIChkKSkgKyAoeCk7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSk7CisKKyNkZWZpbmUgR0coYSwgYiwgYywgZCwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBHKChiKSwgKGMpLCAoZCkpICsgKHgpICsgMHg1YTgyNzk5OVVMO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpOworCisjZGVmaW5lIEhIKGEsIGIsIGMsIGQsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gSCgoYiksIChjKSwgKGQpKSArICh4KSArIDB4NmVkOWViYTFVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKTsKKworI2RlZmluZSBJSShhLCBiLCBjLCBkLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEkoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDhmMWJiY2RjVUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSk7CisKKyNkZWZpbmUgRkZGKGEsIGIsIGMsIGQsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gRigoYiksIChjKSwgKGQpKSArICh4KTtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKTsKKworI2RlZmluZSBHR0coYSwgYiwgYywgZCwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBHKChiKSwgKGMpLCAoZCkpICsgKHgpICsgMHg2ZDcwM2VmM1VMO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpOworCisjZGVmaW5lIEhISChhLCBiLCBjLCBkLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEgoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDVjNGRkMTI0VUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSk7CisKKyNkZWZpbmUgSUlJKGEsIGIsIGMsIGQsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gSSgoYiksIChjKSwgKGQpKSArICh4KSArIDB4NTBhMjhiZTZVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKTsKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfcm1kMTI4X2NvbXByZXNzKGhhc2hfc3RhdGUgKm1kLCB1bnNpZ25lZCBjaGFyICpidWYpCisjZWxzZQorc3RhdGljIGludCAgcm1kMTI4X2NvbXByZXNzKGhhc2hfc3RhdGUgKm1kLCB1bnNpZ25lZCBjaGFyICpidWYpCisjZW5kaWYKK3sKKyAgIHVsb25nMzIgYWEsYmIsY2MsZGQsYWFhLGJiYixjY2MsZGRkLFhbMTZdOworICAgaW50IGk7CisgICAKKyAgIC8qIGxvYWQgd29yZHMgWCAqLworICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspeworICAgICAgTE9BRDMyTChYW2ldLCBidWYgKyAoNCAqIGkpKTsKKyAgIH0KKworICAgLyogbG9hZCBzdGF0ZSAqLworICAgYWEgPSBhYWEgPSBtZC0+cm1kMTI4LnN0YXRlWzBdOworICAgYmIgPSBiYmIgPSBtZC0+cm1kMTI4LnN0YXRlWzFdOworICAgY2MgPSBjY2MgPSBtZC0+cm1kMTI4LnN0YXRlWzJdOworICAgZGQgPSBkZGQgPSBtZC0+cm1kMTI4LnN0YXRlWzNdOworCisgICAvKiByb3VuZCAxICovCisgICBGRihhYSwgYmIsIGNjLCBkZCwgWFsgMF0sIDExKTsKKyAgIEZGKGRkLCBhYSwgYmIsIGNjLCBYWyAxXSwgMTQpOworICAgRkYoY2MsIGRkLCBhYSwgYmIsIFhbIDJdLCAxNSk7CisgICBGRihiYiwgY2MsIGRkLCBhYSwgWFsgM10sIDEyKTsKKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBYWyA0XSwgIDUpOworICAgRkYoZGQsIGFhLCBiYiwgY2MsIFhbIDVdLCAgOCk7CisgICBGRihjYywgZGQsIGFhLCBiYiwgWFsgNl0sICA3KTsKKyAgIEZGKGJiLCBjYywgZGQsIGFhLCBYWyA3XSwgIDkpOworICAgRkYoYWEsIGJiLCBjYywgZGQsIFhbIDhdLCAxMSk7CisgICBGRihkZCwgYWEsIGJiLCBjYywgWFsgOV0sIDEzKTsKKyAgIEZGKGNjLCBkZCwgYWEsIGJiLCBYWzEwXSwgMTQpOworICAgRkYoYmIsIGNjLCBkZCwgYWEsIFhbMTFdLCAxNSk7CisgICBGRihhYSwgYmIsIGNjLCBkZCwgWFsxMl0sICA2KTsKKyAgIEZGKGRkLCBhYSwgYmIsIGNjLCBYWzEzXSwgIDcpOworICAgRkYoY2MsIGRkLCBhYSwgYmIsIFhbMTRdLCAgOSk7CisgICBGRihiYiwgY2MsIGRkLCBhYSwgWFsxNV0sICA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAvKiByb3VuZCAyICovCisgICBHRyhhYSwgYmIsIGNjLCBkZCwgWFsgN10sICA3KTsKKyAgIEdHKGRkLCBhYSwgYmIsIGNjLCBYWyA0XSwgIDYpOworICAgR0coY2MsIGRkLCBhYSwgYmIsIFhbMTNdLCAgOCk7CisgICBHRyhiYiwgY2MsIGRkLCBhYSwgWFsgMV0sIDEzKTsKKyAgIEdHKGFhLCBiYiwgY2MsIGRkLCBYWzEwXSwgMTEpOworICAgR0coZGQsIGFhLCBiYiwgY2MsIFhbIDZdLCAgOSk7CisgICBHRyhjYywgZGQsIGFhLCBiYiwgWFsxNV0sICA3KTsKKyAgIEdHKGJiLCBjYywgZGQsIGFhLCBYWyAzXSwgMTUpOworICAgR0coYWEsIGJiLCBjYywgZGQsIFhbMTJdLCAgNyk7CisgICBHRyhkZCwgYWEsIGJiLCBjYywgWFsgMF0sIDEyKTsKKyAgIEdHKGNjLCBkZCwgYWEsIGJiLCBYWyA5XSwgMTUpOworICAgR0coYmIsIGNjLCBkZCwgYWEsIFhbIDVdLCAgOSk7CisgICBHRyhhYSwgYmIsIGNjLCBkZCwgWFsgMl0sIDExKTsKKyAgIEdHKGRkLCBhYSwgYmIsIGNjLCBYWzE0XSwgIDcpOworICAgR0coY2MsIGRkLCBhYSwgYmIsIFhbMTFdLCAxMyk7CisgICBHRyhiYiwgY2MsIGRkLCBhYSwgWFsgOF0sIDEyKTsKKworICAgLyogcm91bmQgMyAqLworICAgSEgoYWEsIGJiLCBjYywgZGQsIFhbIDNdLCAxMSk7CisgICBISChkZCwgYWEsIGJiLCBjYywgWFsxMF0sIDEzKTsKKyAgIEhIKGNjLCBkZCwgYWEsIGJiLCBYWzE0XSwgIDYpOworICAgSEgoYmIsIGNjLCBkZCwgYWEsIFhbIDRdLCAgNyk7CisgICBISChhYSwgYmIsIGNjLCBkZCwgWFsgOV0sIDE0KTsKKyAgIEhIKGRkLCBhYSwgYmIsIGNjLCBYWzE1XSwgIDkpOworICAgSEgoY2MsIGRkLCBhYSwgYmIsIFhbIDhdLCAxMyk7CisgICBISChiYiwgY2MsIGRkLCBhYSwgWFsgMV0sIDE1KTsKKyAgIEhIKGFhLCBiYiwgY2MsIGRkLCBYWyAyXSwgMTQpOworICAgSEgoZGQsIGFhLCBiYiwgY2MsIFhbIDddLCAgOCk7CisgICBISChjYywgZGQsIGFhLCBiYiwgWFsgMF0sIDEzKTsKKyAgIEhIKGJiLCBjYywgZGQsIGFhLCBYWyA2XSwgIDYpOworICAgSEgoYWEsIGJiLCBjYywgZGQsIFhbMTNdLCAgNSk7CisgICBISChkZCwgYWEsIGJiLCBjYywgWFsxMV0sIDEyKTsKKyAgIEhIKGNjLCBkZCwgYWEsIGJiLCBYWyA1XSwgIDcpOworICAgSEgoYmIsIGNjLCBkZCwgYWEsIFhbMTJdLCAgNSk7CisKKyAgIC8qIHJvdW5kIDQgKi8KKyAgIElJKGFhLCBiYiwgY2MsIGRkLCBYWyAxXSwgMTEpOworICAgSUkoZGQsIGFhLCBiYiwgY2MsIFhbIDldLCAxMik7CisgICBJSShjYywgZGQsIGFhLCBiYiwgWFsxMV0sIDE0KTsKKyAgIElJKGJiLCBjYywgZGQsIGFhLCBYWzEwXSwgMTUpOworICAgSUkoYWEsIGJiLCBjYywgZGQsIFhbIDBdLCAxNCk7CisgICBJSShkZCwgYWEsIGJiLCBjYywgWFsgOF0sIDE1KTsKKyAgIElJKGNjLCBkZCwgYWEsIGJiLCBYWzEyXSwgIDkpOworICAgSUkoYmIsIGNjLCBkZCwgYWEsIFhbIDRdLCAgOCk7CisgICBJSShhYSwgYmIsIGNjLCBkZCwgWFsxM10sICA5KTsKKyAgIElJKGRkLCBhYSwgYmIsIGNjLCBYWyAzXSwgMTQpOworICAgSUkoY2MsIGRkLCBhYSwgYmIsIFhbIDddLCAgNSk7CisgICBJSShiYiwgY2MsIGRkLCBhYSwgWFsxNV0sICA2KTsKKyAgIElJKGFhLCBiYiwgY2MsIGRkLCBYWzE0XSwgIDgpOworICAgSUkoZGQsIGFhLCBiYiwgY2MsIFhbIDVdLCAgNik7CisgICBJSShjYywgZGQsIGFhLCBiYiwgWFsgNl0sICA1KTsKKyAgIElJKGJiLCBjYywgZGQsIGFhLCBYWyAyXSwgMTIpOworCisgICAvKiBwYXJhbGxlbCByb3VuZCAxICovCisgICBJSUkoYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA1XSwgIDgpOyAKKyAgIElJSShkZGQsIGFhYSwgYmJiLCBjY2MsIFhbMTRdLCAgOSk7CisgICBJSUkoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyA3XSwgIDkpOworICAgSUlJKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsgMF0sIDExKTsKKyAgIElJSShhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDldLCAxMyk7CisgICBJSUkoZGRkLCBhYWEsIGJiYiwgY2NjLCBYWyAyXSwgMTUpOworICAgSUlJKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsxMV0sIDE1KTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBhYWEsIFhbIDRdLCAgNSk7CisgICBJSUkoYWFhLCBiYmIsIGNjYywgZGRkLCBYWzEzXSwgIDcpOworICAgSUlJKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsgNl0sICA3KTsKKyAgIElJSShjY2MsIGRkZCwgYWFhLCBiYmIsIFhbMTVdLCAgOCk7CisgICBJSUkoYmJiLCBjY2MsIGRkZCwgYWFhLCBYWyA4XSwgMTEpOworICAgSUlJKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgMV0sIDE0KTsKKyAgIElJSShkZGQsIGFhYSwgYmJiLCBjY2MsIFhbMTBdLCAxNCk7CisgICBJSUkoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyAzXSwgMTIpOworICAgSUlJKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsxMl0sICA2KTsKKworICAgLyogcGFyYWxsZWwgcm91bmQgMiAqLworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgNl0sICA5KTsKKyAgIEhISChkZGQsIGFhYSwgYmJiLCBjY2MsIFhbMTFdLCAxMyk7CisgICBISEgoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyAzXSwgMTUpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsgN10sICA3KTsKKyAgIEhISChhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDBdLCAxMik7CisgICBISEgoZGRkLCBhYWEsIGJiYiwgY2NjLCBYWzEzXSwgIDgpOworICAgSEhIKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsgNV0sICA5KTsKKyAgIEhISChiYmIsIGNjYywgZGRkLCBhYWEsIFhbMTBdLCAxMSk7CisgICBISEgoYWFhLCBiYmIsIGNjYywgZGRkLCBYWzE0XSwgIDcpOworICAgSEhIKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsxNV0sICA3KTsKKyAgIEhISChjY2MsIGRkZCwgYWFhLCBiYmIsIFhbIDhdLCAxMik7CisgICBISEgoYmJiLCBjY2MsIGRkZCwgYWFhLCBYWzEyXSwgIDcpOworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgNF0sICA2KTsKKyAgIEhISChkZGQsIGFhYSwgYmJiLCBjY2MsIFhbIDldLCAxNSk7CisgICBISEgoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyAxXSwgMTMpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsgMl0sIDExKTsKKworICAgLyogcGFyYWxsZWwgcm91bmQgMyAqLyAgIAorICAgR0dHKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsxNV0sICA5KTsKKyAgIEdHRyhkZGQsIGFhYSwgYmJiLCBjY2MsIFhbIDVdLCAgNyk7CisgICBHR0coY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyAxXSwgMTUpOworICAgR0dHKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsgM10sIDExKTsKKyAgIEdHRyhhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDddLCAgOCk7CisgICBHR0coZGRkLCBhYWEsIGJiYiwgY2NjLCBYWzE0XSwgIDYpOworICAgR0dHKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsgNl0sICA2KTsKKyAgIEdHRyhiYmIsIGNjYywgZGRkLCBhYWEsIFhbIDldLCAxNCk7CisgICBHR0coYWFhLCBiYmIsIGNjYywgZGRkLCBYWzExXSwgMTIpOworICAgR0dHKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsgOF0sIDEzKTsKKyAgIEdHRyhjY2MsIGRkZCwgYWFhLCBiYmIsIFhbMTJdLCAgNSk7CisgICBHR0coYmJiLCBjY2MsIGRkZCwgYWFhLCBYWyAyXSwgMTQpOworICAgR0dHKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsxMF0sIDEzKTsKKyAgIEdHRyhkZGQsIGFhYSwgYmJiLCBjY2MsIFhbIDBdLCAxMyk7CisgICBHR0coY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyA0XSwgIDcpOworICAgR0dHKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsxM10sICA1KTsKKworICAgLyogcGFyYWxsZWwgcm91bmQgNCAqLworICAgRkZGKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgOF0sIDE1KTsKKyAgIEZGRihkZGQsIGFhYSwgYmJiLCBjY2MsIFhbIDZdLCAgNSk7CisgICBGRkYoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyA0XSwgIDgpOworICAgRkZGKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsgMV0sIDExKTsKKyAgIEZGRihhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDNdLCAxNCk7CisgICBGRkYoZGRkLCBhYWEsIGJiYiwgY2NjLCBYWzExXSwgMTQpOworICAgRkZGKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsxNV0sICA2KTsKKyAgIEZGRihiYmIsIGNjYywgZGRkLCBhYWEsIFhbIDBdLCAxNCk7CisgICBGRkYoYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA1XSwgIDYpOworICAgRkZGKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsxMl0sICA5KTsKKyAgIEZGRihjY2MsIGRkZCwgYWFhLCBiYmIsIFhbIDJdLCAxMik7CisgICBGRkYoYmJiLCBjY2MsIGRkZCwgYWFhLCBYWzEzXSwgIDkpOworICAgRkZGKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgOV0sIDEyKTsKKyAgIEZGRihkZGQsIGFhYSwgYmJiLCBjY2MsIFhbIDddLCAgNSk7CisgICBGRkYoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWzEwXSwgMTUpOworICAgRkZGKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsxNF0sICA4KTsKKworICAgLyogY29tYmluZSByZXN1bHRzICovCisgICBkZGQgKz0gY2MgKyBtZC0+cm1kMTI4LnN0YXRlWzFdOyAgICAgICAgICAgICAgIC8qIGZpbmFsIHJlc3VsdCBmb3IgTURidWZbMF0gKi8KKyAgIG1kLT5ybWQxMjguc3RhdGVbMV0gPSBtZC0+cm1kMTI4LnN0YXRlWzJdICsgZGQgKyBhYWE7CisgICBtZC0+cm1kMTI4LnN0YXRlWzJdID0gbWQtPnJtZDEyOC5zdGF0ZVszXSArIGFhICsgYmJiOworICAgbWQtPnJtZDEyOC5zdGF0ZVszXSA9IG1kLT5ybWQxMjguc3RhdGVbMF0gKyBiYiArIGNjYzsKKyAgIG1kLT5ybWQxMjguc3RhdGVbMF0gPSBkZGQ7CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBybWQxMjhfY29tcHJlc3MoaGFzaF9zdGF0ZSAqbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKyAgIGludCBlcnI7CisgICBlcnIgPSBfcm1kMTI4X2NvbXByZXNzKG1kLCBidWYpOworICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiAyNCArIHNpemVvZihpbnQpKTsKKyAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyoqCisgICBJbml0aWFsaXplIHRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gbWQgICBUaGUgaGFzaCBzdGF0ZSB5b3Ugd2lzaCB0byBpbml0aWFsaXplCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgcm1kMTI4X2luaXQoaGFzaF9zdGF0ZSAqIG1kKQoreworICAgTFRDX0FSR0NISyhtZCAhPSBOVUxMKTsKKyAgIG1kLT5ybWQxMjguc3RhdGVbMF0gPSAweDY3NDUyMzAxVUw7CisgICBtZC0+cm1kMTI4LnN0YXRlWzFdID0gMHhlZmNkYWI4OVVMOworICAgbWQtPnJtZDEyOC5zdGF0ZVsyXSA9IDB4OThiYWRjZmVVTDsKKyAgIG1kLT5ybWQxMjguc3RhdGVbM10gPSAweDEwMzI1NDc2VUw7CisgICBtZC0+cm1kMTI4LmN1cmxlbiAgID0gMDsKKyAgIG1kLT5ybWQxMjgubGVuZ3RoICAgPSAwOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgIFByb2Nlc3MgYSBibG9jayBvZiBtZW1vcnkgdGhvdWdoIHRoZSBoYXNoCisgICBAcGFyYW0gbWQgICAgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gaW4gICAgIFRoZSBkYXRhIHRvIGhhc2gKKyAgIEBwYXJhbSBpbmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAob2N0ZXRzKQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworSEFTSF9QUk9DRVNTKHJtZDEyOF9wcm9jZXNzLCBybWQxMjhfY29tcHJlc3MsIHJtZDEyOCwgNjQpCisKKy8qKgorICAgVGVybWluYXRlIHRoZSBoYXNoIHRvIGdldCB0aGUgZGlnZXN0CisgICBAcGFyYW0gbWQgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gb3V0IFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgaGFzaCAoMTYgYnl0ZXMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgcm1kMTI4X2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpvdXQpCit7CisgICAgaW50IGk7CisKKyAgICBMVENfQVJHQ0hLKG1kICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dCAhPSBOVUxMKTsKKworICAgIGlmIChtZC0+cm1kMTI4LmN1cmxlbiA+PSBzaXplb2YobWQtPnJtZDEyOC5idWYpKSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgIH0KKworCisgICAgLyogaW5jcmVhc2UgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSAqLworICAgIG1kLT5ybWQxMjgubGVuZ3RoICs9IG1kLT5ybWQxMjguY3VybGVuICogODsKKworICAgIC8qIGFwcGVuZCB0aGUgJzEnIGJpdCAqLworICAgIG1kLT5ybWQxMjguYnVmW21kLT5ybWQxMjguY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMHg4MDsKKworICAgIC8qIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IGFib3ZlIDU2IGJ5dGVzIHdlIGFwcGVuZCB6ZXJvcworICAgICAqIHRoZW4gY29tcHJlc3MuICBUaGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gcGFkZGluZyB6ZXJvcyBhbmQgbGVuZ3RoCisgICAgICogZW5jb2RpbmcgbGlrZSBub3JtYWwuCisgICAgICovCisgICAgaWYgKG1kLT5ybWQxMjguY3VybGVuID4gNTYpIHsKKyAgICAgICAgd2hpbGUgKG1kLT5ybWQxMjguY3VybGVuIDwgNjQpIHsKKyAgICAgICAgICAgIG1kLT5ybWQxMjguYnVmW21kLT5ybWQxMjguY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMDsKKyAgICAgICAgfQorICAgICAgICBybWQxMjhfY29tcHJlc3MobWQsIG1kLT5ybWQxMjguYnVmKTsKKyAgICAgICAgbWQtPnJtZDEyOC5jdXJsZW4gPSAwOworICAgIH0KKworICAgIC8qIHBhZCB1cHRvIDU2IGJ5dGVzIG9mIHplcm9lcyAqLworICAgIHdoaWxlIChtZC0+cm1kMTI4LmN1cmxlbiA8IDU2KSB7CisgICAgICAgIG1kLT5ybWQxMjguYnVmW21kLT5ybWQxMjguY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMDsKKyAgICB9CisKKyAgICAvKiBzdG9yZSBsZW5ndGggKi8KKyAgICBTVE9SRTY0TChtZC0+cm1kMTI4Lmxlbmd0aCwgbWQtPnJtZDEyOC5idWYrNTYpOworICAgIHJtZDEyOF9jb21wcmVzcyhtZCwgbWQtPnJtZDEyOC5idWYpOworCisgICAgLyogY29weSBvdXRwdXQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgIFNUT1JFMzJMKG1kLT5ybWQxMjguc3RhdGVbaV0sIG91dCsoNCppKSk7CisgICAgfQorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIHplcm9tZW0obWQsIHNpemVvZihoYXNoX3N0YXRlKSk7CisjZW5kaWYKKyAgIHJldHVybiBDUllQVF9PSzsgIAorfQorCisvKioKKyAgU2VsZi10ZXN0IHRoZSBoYXNoCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdHMgaGF2ZSBiZWVuIGRpc2FibGVkCisqLyAgCitpbnQgcm1kMTI4X3Rlc3Qodm9pZCkKK3sKKyNpZm5kZWYgTFRDX1RFU1QKKyAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgIGNoYXIgKm1zZzsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtZFsxNl07CisgICB9IHRlc3RzW10gPSB7CisgICB7ICIiLAorICAgICB7IDB4Y2QsIDB4ZjIsIDB4NjIsIDB4MTMsIDB4YTEsIDB4NTAsIDB4ZGMsIDB4M2UsCisgICAgICAgMHhjYiwgMHg2MSwgMHgwZiwgMHgxOCwgMHhmNiwgMHhiMywgMHg4YiwgMHg0NiB9CisgICB9LAorICAgeyAiYSIsCisgICAgIHsgMHg4NiwgMHhiZSwgMHg3YSwgMHhmYSwgMHgzMywgMHg5ZCwgMHgwZiwgMHhjNywKKyAgICAgICAweGNmLCAweGM3LCAweDg1LCAweGU3LCAweDJmLCAweDU3LCAweDhkLCAweDMzIH0KKyAgIH0sCisgICB7ICJhYmMiLAorICAgICB7IDB4YzEsIDB4NGEsIDB4MTIsIDB4MTksIDB4OWMsIDB4NjYsIDB4ZTQsIDB4YmEsCisgICAgICAgMHg4NCwgMHg2MywgMHg2YiwgMHgwZiwgMHg2OSwgMHgxNCwgMHg0YywgMHg3NyB9CisgICB9LAorICAgeyAibWVzc2FnZSBkaWdlc3QiLAorICAgICB7IDB4OWUsIDB4MzIsIDB4N2IsIDB4M2QsIDB4NmUsIDB4NTIsIDB4MzAsIDB4NjIsCisgICAgICAgMHhhZiwgMHhjMSwgMHgxMywgMHgyZCwgMHg3ZCwgMHhmOSwgMHhkMSwgMHhiOCB9CisgICB9LAorICAgeyAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLAorICAgICB7IDB4ZmQsIDB4MmEsIDB4YTYsIDB4MDcsIDB4ZjcsIDB4MWQsIDB4YzgsIDB4ZjUsCisgICAgICAgMHgxMCwgMHg3MSwgMHg0OSwgMHgyMiwgMHhiMywgMHg3MSwgMHg4MywgMHg0ZSB9CisgICB9LAorICAgeyAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkiLAorICAgICB7IDB4ZDEsIDB4ZTksIDB4NTksIDB4ZWIsIDB4MTcsIDB4OWMsIDB4OTEsIDB4MWYsCisgICAgICAgMHhhZSwgMHhhNCwgMHg2MiwgMHg0YywgMHg2MCwgMHhjNSwgMHhjNywgMHgwMiB9CisgICB9CisgICB9OworICAgaW50IHg7CisgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxNl07CisgICBoYXNoX3N0YXRlIG1kOworCisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKS9zaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAgcm1kMTI4X2luaXQoJm1kKTsKKyAgICAgICBybWQxMjhfcHJvY2VzcygmbWQsICh1bnNpZ25lZCBjaGFyICopdGVzdHNbeF0ubXNnLCBzdHJsZW4odGVzdHNbeF0ubXNnKSk7CisgICAgICAgcm1kMTI4X2RvbmUoJm1kLCBidWYpOworICAgICAgIGlmIChYTUVNQ01QKGJ1ZiwgdGVzdHNbeF0ubWQsIDE2KSAhPSAwKSB7CisgICAgICAgI2lmIDAKKyAgICAgICAgICBwcmludGYoIkZhaWxlZCB0ZXN0ICVkXG4iLCB4KTsKKyAgICAgICAjZW5kaWYKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZgorfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3JtZDEyOC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6Mjg6MTcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9ybWQxNjAuYyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvcm1kMTYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjMDkwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvcm1kMTYwLmMKQEAgLTAsMCArMSw0NjkgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBybWQxNjAuYworICAgUk1EMTYwIGhhc2ggZnVuY3Rpb24KKyovICAgCisKKy8qIEltcGxlbWVudGF0aW9uIG9mIFJJUEVNRC0xNjAgYmFzZWQgb24gdGhlIHNvdXJjZSBieSBBbnRvb24gQm9zc2VsYWVycywgRVNBVC1DT1NJQworICoKKyAqIFRoaXMgc291cmNlIGhhcyBiZWVuIHJhZGljYWxseSBvdmVyaGF1bGVkIHRvIGJlIHBvcnRhYmxlIGFuZCB3b3JrIHdpdGhpbgorICogdGhlIExpYlRvbUNyeXB0IEFQSSBieSBUb20gU3QgRGVuaXMKKyAqLworCisjaWZkZWYgUklQRU1EMTYwCisKK2NvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIHJtZDE2MF9kZXNjID0KK3sKKyAgICAicm1kMTYwIiwKKyAgICA5LAorICAgIDIwLAorICAgIDY0LAorCisgICAgLyogT0lEICovCisgICB7IDEsIDMsIDM2LCAzLCAyLCAxLCAgfSwKKyAgIDYsCisKKyAgICAmcm1kMTYwX2luaXQsCisgICAgJnJtZDE2MF9wcm9jZXNzLAorICAgICZybWQxNjBfZG9uZSwKKyAgICAmcm1kMTYwX3Rlc3QsCisgICAgTlVMTAorfTsKKworLyogdGhlIGZpdmUgYmFzaWMgZnVuY3Rpb25zIEYoKSwgRygpIGFuZCBIKCkgKi8KKyNkZWZpbmUgRih4LCB5LCB6KSAgICAgICAgKCh4KSBeICh5KSBeICh6KSkgCisjZGVmaW5lIEcoeCwgeSwgeikgICAgICAgICgoKHgpICYgKHkpKSB8ICh+KHgpICYgKHopKSkgCisjZGVmaW5lIEgoeCwgeSwgeikgICAgICAgICgoKHgpIHwgfih5KSkgXiAoeikpCisjZGVmaW5lIEkoeCwgeSwgeikgICAgICAgICgoKHgpICYgKHopKSB8ICgoeSkgJiB+KHopKSkgCisjZGVmaW5lIEooeCwgeSwgeikgICAgICAgICgoeCkgXiAoKHkpIHwgfih6KSkpCisgIAorLyogdGhlIHRlbiBiYXNpYyBvcGVyYXRpb25zIEZGKCkgdGhyb3VnaCBJSUkoKSAqLworI2RlZmluZSBGRihhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEYoKGIpLCAoYyksIChkKSkgKyAoeCk7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBHRyhhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEcoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDVhODI3OTk5VUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBISChhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEgoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDZlZDllYmExVUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBJSShhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEkoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDhmMWJiY2RjVUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBKSihhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEooKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweGE5NTNmZDRlVUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBGRkYoYSwgYiwgYywgZCwgZSwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBGKChiKSwgKGMpLCAoZCkpICsgKHgpO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpICsgKGUpO1wKKyAgICAgIChjKSA9IFJPTGMoKGMpLCAxMCk7CisKKyNkZWZpbmUgR0dHKGEsIGIsIGMsIGQsIGUsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gRygoYiksIChjKSwgKGQpKSArICh4KSArIDB4N2E2ZDc2ZTlVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKSArIChlKTtcCisgICAgICAoYykgPSBST0xjKChjKSwgMTApOworCisjZGVmaW5lIEhISChhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEgoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDZkNzAzZWYzVUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBJSUkoYSwgYiwgYywgZCwgZSwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBJKChiKSwgKGMpLCAoZCkpICsgKHgpICsgMHg1YzRkZDEyNFVMO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpICsgKGUpO1wKKyAgICAgIChjKSA9IFJPTGMoKGMpLCAxMCk7CisKKyNkZWZpbmUgSkpKKGEsIGIsIGMsIGQsIGUsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gSigoYiksIChjKSwgKGQpKSArICh4KSArIDB4NTBhMjhiZTZVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKSArIChlKTtcCisgICAgICAoYykgPSBST0xjKChjKSwgMTApOworCisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyBpbnQgX3JtZDE2MF9jb21wcmVzcyhoYXNoX3N0YXRlICptZCwgdW5zaWduZWQgY2hhciAqYnVmKQorI2Vsc2UKK3N0YXRpYyBpbnQgIHJtZDE2MF9jb21wcmVzcyhoYXNoX3N0YXRlICptZCwgdW5zaWduZWQgY2hhciAqYnVmKQorI2VuZGlmCit7CisgICB1bG9uZzMyIGFhLGJiLGNjLGRkLGVlLGFhYSxiYmIsY2NjLGRkZCxlZWUsWFsxNl07CisgICBpbnQgaTsKKworICAgLyogbG9hZCB3b3JkcyBYICovCisgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKyl7CisgICAgICBMT0FEMzJMKFhbaV0sIGJ1ZiArICg0ICogaSkpOworICAgfQorCisgICAvKiBsb2FkIHN0YXRlICovCisgICBhYSA9IGFhYSA9IG1kLT5ybWQxNjAuc3RhdGVbMF07CisgICBiYiA9IGJiYiA9IG1kLT5ybWQxNjAuc3RhdGVbMV07CisgICBjYyA9IGNjYyA9IG1kLT5ybWQxNjAuc3RhdGVbMl07CisgICBkZCA9IGRkZCA9IG1kLT5ybWQxNjAuc3RhdGVbM107CisgICBlZSA9IGVlZSA9IG1kLT5ybWQxNjAuc3RhdGVbNF07CisKKyAgIC8qIHJvdW5kIDEgKi8KKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsgMF0sIDExKTsKKyAgIEZGKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgMV0sIDE0KTsKKyAgIEZGKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgMl0sIDE1KTsKKyAgIEZGKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgM10sIDEyKTsKKyAgIEZGKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsgNF0sICA1KTsKKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsgNV0sICA4KTsKKyAgIEZGKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgNl0sICA3KTsKKyAgIEZGKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgN10sICA5KTsKKyAgIEZGKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgOF0sIDExKTsKKyAgIEZGKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsgOV0sIDEzKTsKKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsxMF0sIDE0KTsKKyAgIEZGKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsxMV0sIDE1KTsKKyAgIEZGKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsxMl0sICA2KTsKKyAgIEZGKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsxM10sICA3KTsKKyAgIEZGKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsxNF0sICA5KTsKKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsxNV0sICA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAvKiByb3VuZCAyICovCisgICBHRyhlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDddLCAgNyk7CisgICBHRyhkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDRdLCAgNik7CisgICBHRyhjYywgZGQsIGVlLCBhYSwgYmIsIFhbMTNdLCAgOCk7CisgICBHRyhiYiwgY2MsIGRkLCBlZSwgYWEsIFhbIDFdLCAxMyk7CisgICBHRyhhYSwgYmIsIGNjLCBkZCwgZWUsIFhbMTBdLCAxMSk7CisgICBHRyhlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDZdLCAgOSk7CisgICBHRyhkZCwgZWUsIGFhLCBiYiwgY2MsIFhbMTVdLCAgNyk7CisgICBHRyhjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDNdLCAxNSk7CisgICBHRyhiYiwgY2MsIGRkLCBlZSwgYWEsIFhbMTJdLCAgNyk7CisgICBHRyhhYSwgYmIsIGNjLCBkZCwgZWUsIFhbIDBdLCAxMik7CisgICBHRyhlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDldLCAxNSk7CisgICBHRyhkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDVdLCAgOSk7CisgICBHRyhjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDJdLCAxMSk7CisgICBHRyhiYiwgY2MsIGRkLCBlZSwgYWEsIFhbMTRdLCAgNyk7CisgICBHRyhhYSwgYmIsIGNjLCBkZCwgZWUsIFhbMTFdLCAxMyk7CisgICBHRyhlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDhdLCAxMik7CisKKyAgIC8qIHJvdW5kIDMgKi8KKyAgIEhIKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgM10sIDExKTsKKyAgIEhIKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsxMF0sIDEzKTsKKyAgIEhIKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsxNF0sICA2KTsKKyAgIEhIKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsgNF0sICA3KTsKKyAgIEhIKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgOV0sIDE0KTsKKyAgIEhIKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsxNV0sICA5KTsKKyAgIEhIKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgOF0sIDEzKTsKKyAgIEhIKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsgMV0sIDE1KTsKKyAgIEhIKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsgMl0sIDE0KTsKKyAgIEhIKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgN10sICA4KTsKKyAgIEhIKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgMF0sIDEzKTsKKyAgIEhIKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgNl0sICA2KTsKKyAgIEhIKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsxM10sICA1KTsKKyAgIEhIKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsxMV0sIDEyKTsKKyAgIEhIKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgNV0sICA3KTsKKyAgIEhIKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsxMl0sICA1KTsKKworICAgLyogcm91bmQgNCAqLworICAgSUkoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyAxXSwgMTEpOworICAgSUkoYmIsIGNjLCBkZCwgZWUsIGFhLCBYWyA5XSwgMTIpOworICAgSUkoYWEsIGJiLCBjYywgZGQsIGVlLCBYWzExXSwgMTQpOworICAgSUkoZWUsIGFhLCBiYiwgY2MsIGRkLCBYWzEwXSwgMTUpOworICAgSUkoZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyAwXSwgMTQpOworICAgSUkoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyA4XSwgMTUpOworICAgSUkoYmIsIGNjLCBkZCwgZWUsIGFhLCBYWzEyXSwgIDkpOworICAgSUkoYWEsIGJiLCBjYywgZGQsIGVlLCBYWyA0XSwgIDgpOworICAgSUkoZWUsIGFhLCBiYiwgY2MsIGRkLCBYWzEzXSwgIDkpOworICAgSUkoZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyAzXSwgMTQpOworICAgSUkoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyA3XSwgIDUpOworICAgSUkoYmIsIGNjLCBkZCwgZWUsIGFhLCBYWzE1XSwgIDYpOworICAgSUkoYWEsIGJiLCBjYywgZGQsIGVlLCBYWzE0XSwgIDgpOworICAgSUkoZWUsIGFhLCBiYiwgY2MsIGRkLCBYWyA1XSwgIDYpOworICAgSUkoZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyA2XSwgIDUpOworICAgSUkoY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyAyXSwgMTIpOworCisgICAvKiByb3VuZCA1ICovCisgICBKSihiYiwgY2MsIGRkLCBlZSwgYWEsIFhbIDRdLCAgOSk7CisgICBKSihhYSwgYmIsIGNjLCBkZCwgZWUsIFhbIDBdLCAxNSk7CisgICBKSihlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDVdLCAgNSk7CisgICBKSihkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDldLCAxMSk7CisgICBKSihjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDddLCAgNik7CisgICBKSihiYiwgY2MsIGRkLCBlZSwgYWEsIFhbMTJdLCAgOCk7CisgICBKSihhYSwgYmIsIGNjLCBkZCwgZWUsIFhbIDJdLCAxMyk7CisgICBKSihlZSwgYWEsIGJiLCBjYywgZGQsIFhbMTBdLCAxMik7CisgICBKSihkZCwgZWUsIGFhLCBiYiwgY2MsIFhbMTRdLCAgNSk7CisgICBKSihjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDFdLCAxMik7CisgICBKSihiYiwgY2MsIGRkLCBlZSwgYWEsIFhbIDNdLCAxMyk7CisgICBKSihhYSwgYmIsIGNjLCBkZCwgZWUsIFhbIDhdLCAxNCk7CisgICBKSihlZSwgYWEsIGJiLCBjYywgZGQsIFhbMTFdLCAxMSk7CisgICBKSihkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDZdLCAgOCk7CisgICBKSihjYywgZGQsIGVlLCBhYSwgYmIsIFhbMTVdLCAgNSk7CisgICBKSihiYiwgY2MsIGRkLCBlZSwgYWEsIFhbMTNdLCAgNik7CisKKyAgIC8qIHBhcmFsbGVsIHJvdW5kIDEgKi8KKyAgIEpKSihhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgNV0sICA4KTsKKyAgIEpKSihlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsxNF0sICA5KTsKKyAgIEpKSihkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsgN10sICA5KTsKKyAgIEpKSihjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgMF0sIDExKTsKKyAgIEpKSihiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgOV0sIDEzKTsKKyAgIEpKSihhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgMl0sIDE1KTsKKyAgIEpKSihlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsxMV0sIDE1KTsKKyAgIEpKSihkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsgNF0sICA1KTsKKyAgIEpKSihjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsxM10sICA3KTsKKyAgIEpKSihiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgNl0sICA3KTsKKyAgIEpKSihhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsxNV0sICA4KTsKKyAgIEpKSihlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgOF0sIDExKTsKKyAgIEpKSihkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsgMV0sIDE0KTsKKyAgIEpKSihjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsxMF0sIDE0KTsKKyAgIEpKSihiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgM10sIDEyKTsKKyAgIEpKSihhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsxMl0sICA2KTsKKworICAgLyogcGFyYWxsZWwgcm91bmQgMiAqLworICAgSUlJKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA2XSwgIDkpOyAKKyAgIElJSShkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsxMV0sIDEzKTsKKyAgIElJSShjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgM10sIDE1KTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgN10sICA3KTsKKyAgIElJSShhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgMF0sIDEyKTsKKyAgIElJSShlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsxM10sICA4KTsKKyAgIElJSShkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsgNV0sICA5KTsKKyAgIElJSShjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsxMF0sIDExKTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsxNF0sICA3KTsKKyAgIElJSShhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsxNV0sICA3KTsKKyAgIElJSShlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgOF0sIDEyKTsKKyAgIElJSShkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsxMl0sICA3KTsKKyAgIElJSShjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgNF0sICA2KTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgOV0sIDE1KTsKKyAgIElJSShhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgMV0sIDEzKTsKKyAgIElJSShlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgMl0sIDExKTsKKworICAgLyogcGFyYWxsZWwgcm91bmQgMyAqLworICAgSEhIKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzE1XSwgIDkpOworICAgSEhIKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyA1XSwgIDcpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWyAxXSwgMTUpOworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWyAzXSwgMTEpOworICAgSEhIKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA3XSwgIDgpOworICAgSEhIKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzE0XSwgIDYpOworICAgSEhIKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyA2XSwgIDYpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWyA5XSwgMTQpOworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWzExXSwgMTIpOworICAgSEhIKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA4XSwgMTMpOworICAgSEhIKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzEyXSwgIDUpOworICAgSEhIKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyAyXSwgMTQpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWzEwXSwgMTMpOworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWyAwXSwgMTMpOworICAgSEhIKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA0XSwgIDcpOworICAgSEhIKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzEzXSwgIDUpOworCisgICAvKiBwYXJhbGxlbCByb3VuZCA0ICovICAgCisgICBHR0coY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbIDhdLCAxNSk7CisgICBHR0coYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbIDZdLCAgNSk7CisgICBHR0coYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbIDRdLCAgOCk7CisgICBHR0coZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDFdLCAxMSk7CisgICBHR0coZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbIDNdLCAxNCk7CisgICBHR0coY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbMTFdLCAxNCk7CisgICBHR0coYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbMTVdLCAgNik7CisgICBHR0coYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbIDBdLCAxNCk7CisgICBHR0coZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDVdLCAgNik7CisgICBHR0coZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbMTJdLCAgOSk7CisgICBHR0coY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbIDJdLCAxMik7CisgICBHR0coYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbMTNdLCAgOSk7CisgICBHR0coYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbIDldLCAxMik7CisgICBHR0coZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDddLCAgNSk7CisgICBHR0coZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbMTBdLCAxNSk7CisgICBHR0coY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbMTRdLCAgOCk7CisKKyAgIC8qIHBhcmFsbGVsIHJvdW5kIDUgKi8KKyAgIEZGRihiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsxMl0gLCAgOCk7CisgICBGRkYoYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbMTVdICwgIDUpOworICAgRkZGKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWzEwXSAsIDEyKTsKKyAgIEZGRihkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsgNF0gLCAgOSk7CisgICBGRkYoY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbIDFdICwgMTIpOworICAgRkZGKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWyA1XSAsICA1KTsKKyAgIEZGRihhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgOF0gLCAxNCk7CisgICBGRkYoZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDddICwgIDYpOworICAgRkZGKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWyA2XSAsICA4KTsKKyAgIEZGRihjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgMl0gLCAxMyk7CisgICBGRkYoYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbMTNdICwgIDYpOworICAgRkZGKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWzE0XSAsICA1KTsKKyAgIEZGRihlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgMF0gLCAxNSk7CisgICBGRkYoZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbIDNdICwgMTMpOworICAgRkZGKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyA5XSAsIDExKTsKKyAgIEZGRihiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsxMV0gLCAxMSk7CisKKyAgIC8qIGNvbWJpbmUgcmVzdWx0cyAqLworICAgZGRkICs9IGNjICsgbWQtPnJtZDE2MC5zdGF0ZVsxXTsgICAgICAgICAgICAgICAvKiBmaW5hbCByZXN1bHQgZm9yIG1kLT5ybWQxNjAuc3RhdGVbMF0gKi8KKyAgIG1kLT5ybWQxNjAuc3RhdGVbMV0gPSBtZC0+cm1kMTYwLnN0YXRlWzJdICsgZGQgKyBlZWU7CisgICBtZC0+cm1kMTYwLnN0YXRlWzJdID0gbWQtPnJtZDE2MC5zdGF0ZVszXSArIGVlICsgYWFhOworICAgbWQtPnJtZDE2MC5zdGF0ZVszXSA9IG1kLT5ybWQxNjAuc3RhdGVbNF0gKyBhYSArIGJiYjsKKyAgIG1kLT5ybWQxNjAuc3RhdGVbNF0gPSBtZC0+cm1kMTYwLnN0YXRlWzBdICsgYmIgKyBjY2M7CisgICBtZC0+cm1kMTYwLnN0YXRlWzBdID0gZGRkOworCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyBpbnQgcm1kMTYwX2NvbXByZXNzKGhhc2hfc3RhdGUgKm1kLCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisgICBpbnQgZXJyOworICAgZXJyID0gX3JtZDE2MF9jb21wcmVzcyhtZCwgYnVmKTsKKyAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nMzIpICogMjYgKyBzaXplb2YoaW50KSk7CisgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qKgorICAgSW5pdGlhbGl6ZSB0aGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIG1kICAgVGhlIGhhc2ggc3RhdGUgeW91IHdpc2ggdG8gaW5pdGlhbGl6ZQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHJtZDE2MF9pbml0KGhhc2hfc3RhdGUgKiBtZCkKK3sKKyAgIExUQ19BUkdDSEsobWQgIT0gTlVMTCk7CisgICBtZC0+cm1kMTYwLnN0YXRlWzBdID0gMHg2NzQ1MjMwMVVMOworICAgbWQtPnJtZDE2MC5zdGF0ZVsxXSA9IDB4ZWZjZGFiODlVTDsKKyAgIG1kLT5ybWQxNjAuc3RhdGVbMl0gPSAweDk4YmFkY2ZlVUw7CisgICBtZC0+cm1kMTYwLnN0YXRlWzNdID0gMHgxMDMyNTQ3NlVMOworICAgbWQtPnJtZDE2MC5zdGF0ZVs0XSA9IDB4YzNkMmUxZjBVTDsKKyAgIG1kLT5ybWQxNjAuY3VybGVuICAgPSAwOworICAgbWQtPnJtZDE2MC5sZW5ndGggICA9IDA7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICAgUHJvY2VzcyBhIGJsb2NrIG9mIG1lbW9yeSB0aG91Z2ggdGhlIGhhc2gKKyAgIEBwYXJhbSBtZCAgICAgVGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBpbiAgICAgVGhlIGRhdGEgdG8gaGFzaAorICAgQHBhcmFtIGlubGVuICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIChvY3RldHMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitIQVNIX1BST0NFU1Mocm1kMTYwX3Byb2Nlc3MsIHJtZDE2MF9jb21wcmVzcywgcm1kMTYwLCA2NCkKKworLyoqCisgICBUZXJtaW5hdGUgdGhlIGhhc2ggdG8gZ2V0IHRoZSBkaWdlc3QKKyAgIEBwYXJhbSBtZCAgVGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBvdXQgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBoYXNoICgyMCBieXRlcykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBybWQxNjBfZG9uZShoYXNoX3N0YXRlICogbWQsIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKyAgICBpbnQgaTsKKworICAgIExUQ19BUkdDSEsobWQgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsob3V0ICE9IE5VTEwpOworCisgICAgaWYgKG1kLT5ybWQxNjAuY3VybGVuID49IHNpemVvZihtZC0+cm1kMTYwLmJ1ZikpIHsKKyAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgfQorCisKKyAgICAvKiBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlICovCisgICAgbWQtPnJtZDE2MC5sZW5ndGggKz0gbWQtPnJtZDE2MC5jdXJsZW4gKiA4OworCisgICAgLyogYXBwZW5kIHRoZSAnMScgYml0ICovCisgICAgbWQtPnJtZDE2MC5idWZbbWQtPnJtZDE2MC5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikweDgwOworCisgICAgLyogaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgYWJvdmUgNTYgYnl0ZXMgd2UgYXBwZW5kIHplcm9zCisgICAgICogdGhlbiBjb21wcmVzcy4gIFRoZW4gd2UgY2FuIGZhbGwgYmFjayB0byBwYWRkaW5nIHplcm9zIGFuZCBsZW5ndGgKKyAgICAgKiBlbmNvZGluZyBsaWtlIG5vcm1hbC4KKyAgICAgKi8KKyAgICBpZiAobWQtPnJtZDE2MC5jdXJsZW4gPiA1NikgeworICAgICAgICB3aGlsZSAobWQtPnJtZDE2MC5jdXJsZW4gPCA2NCkgeworICAgICAgICAgICAgbWQtPnJtZDE2MC5idWZbbWQtPnJtZDE2MC5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikwOworICAgICAgICB9CisgICAgICAgIHJtZDE2MF9jb21wcmVzcyhtZCwgbWQtPnJtZDE2MC5idWYpOworICAgICAgICBtZC0+cm1kMTYwLmN1cmxlbiA9IDA7CisgICAgfQorCisgICAgLyogcGFkIHVwdG8gNTYgYnl0ZXMgb2YgemVyb2VzICovCisgICAgd2hpbGUgKG1kLT5ybWQxNjAuY3VybGVuIDwgNTYpIHsKKyAgICAgICAgbWQtPnJtZDE2MC5idWZbbWQtPnJtZDE2MC5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikwOworICAgIH0KKworICAgIC8qIHN0b3JlIGxlbmd0aCAqLworICAgIFNUT1JFNjRMKG1kLT5ybWQxNjAubGVuZ3RoLCBtZC0+cm1kMTYwLmJ1Zis1Nik7CisgICAgcm1kMTYwX2NvbXByZXNzKG1kLCBtZC0+cm1kMTYwLmJ1Zik7CisKKyAgICAvKiBjb3B5IG91dHB1dCAqLworICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgU1RPUkUzMkwobWQtPnJtZDE2MC5zdGF0ZVtpXSwgb3V0Kyg0KmkpKTsKKyAgICB9CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICAgemVyb21lbShtZCwgc2l6ZW9mKGhhc2hfc3RhdGUpKTsKKyNlbmRpZgorICAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIFNlbGYtdGVzdCB0aGUgaGFzaAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3RzIGhhdmUgYmVlbiBkaXNhYmxlZAorKi8gIAoraW50IHJtZDE2MF90ZXN0KHZvaWQpCit7CisjaWZuZGVmIExUQ19URVNUCisgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICBjaGFyICptc2c7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbWRbMjBdOworICAgfSB0ZXN0c1tdID0geworICAgeyAiIiwKKyAgICAgeyAweDljLCAweDExLCAweDg1LCAweGE1LCAweGM1LCAweGU5LCAweGZjLCAweDU0LCAweDYxLCAweDI4LAorICAgICAgIDB4MDgsIDB4OTcsIDB4N2UsIDB4ZTgsIDB4ZjUsIDB4NDgsIDB4YjIsIDB4MjUsIDB4OGQsIDB4MzEgfQorICAgfSwKKyAgIHsgImEiLAorICAgICB7IDB4MGIsIDB4ZGMsIDB4OWQsIDB4MmQsIDB4MjUsIDB4NmIsIDB4M2UsIDB4ZTksIDB4ZGEsIDB4YWUsCisgICAgICAgMHgzNCwgMHg3YiwgMHhlNiwgMHhmNCwgMHhkYywgMHg4MywgMHg1YSwgMHg0NiwgMHg3ZiwgMHhmZSB9CisgICB9LAorICAgeyAiYWJjIiwKKyAgICAgeyAweDhlLCAweGIyLCAweDA4LCAweGY3LCAweGUwLCAweDVkLCAweDk4LCAweDdhLCAweDliLCAweDA0LAorICAgICAgIDB4NGEsIDB4OGUsIDB4OTgsIDB4YzYsIDB4YjAsIDB4ODcsIDB4ZjEsIDB4NWEsIDB4MGIsIDB4ZmMgfQorICAgfSwKKyAgIHsgIm1lc3NhZ2UgZGlnZXN0IiwKKyAgICAgeyAweDVkLCAweDA2LCAweDg5LCAweGVmLCAweDQ5LCAweGQyLCAweGZhLCAweGU1LCAweDcyLCAweGI4LAorICAgICAgIDB4ODEsIDB4YjEsIDB4MjMsIDB4YTgsIDB4NWYsIDB4ZmEsIDB4MjEsIDB4NTksIDB4NWYsIDB4MzYgfQorICAgfSwKKyAgIHsgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwKKyAgICAgeyAweGY3LCAweDFjLCAweDI3LCAweDEwLCAweDljLCAweDY5LCAweDJjLCAweDFiLCAweDU2LCAweGJiLAorICAgICAgIDB4ZGMsIDB4ZWIsIDB4NWIsIDB4OWQsIDB4MjgsIDB4NjUsIDB4YjMsIDB4NzAsIDB4OGQsIDB4YmMgfQorICAgfSwKKyAgIHsgImFiY2RiY2RlY2RlZmRlZmdlZmdoZmdoaWdoaWpoaWpraWprbGprbG1rbG1ubG1ub21ub3Bub3BxIiwKKyAgICAgeyAweDEyLCAweGEwLCAweDUzLCAweDM4LCAweDRhLCAweDljLCAweDBjLCAweDg4LCAweGU0LCAweDA1LAorICAgICAgIDB4YTAsIDB4NmMsIDB4MjcsIDB4ZGMsIDB4ZjQsIDB4OWEsIDB4ZGEsIDB4NjIsIDB4ZWIsIDB4MmIgfQorICAgfQorICAgfTsKKyAgIGludCB4OworICAgdW5zaWduZWQgY2hhciBidWZbMjBdOworICAgaGFzaF9zdGF0ZSBtZDsKKworICAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgeworICAgICAgIHJtZDE2MF9pbml0KCZtZCk7CisgICAgICAgcm1kMTYwX3Byb2Nlc3MoJm1kLCAodW5zaWduZWQgY2hhciAqKXRlc3RzW3hdLm1zZywgc3RybGVuKHRlc3RzW3hdLm1zZykpOworICAgICAgIHJtZDE2MF9kb25lKCZtZCwgYnVmKTsKKyAgICAgICBpZiAoWE1FTUNNUChidWYsIHRlc3RzW3hdLm1kLCAyMCkgIT0gMCkgeworI2lmIDAKKyAgICAgICAgICBwcmludGYoIkZhaWxlZCB0ZXN0ICVkXG4iLCB4KTsKKyNlbmRpZgorICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgfQorICAgfQorICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvcm1kMTYwLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3JtZDI1Ni5jIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9ybWQyNTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTQwZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9ybWQyNTYuYwpAQCAtMCwwICsxLDQzMSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBwYXJhbSBybWQyNTYuYworICAgUk1EMjU2IEhhc2ggZnVuY3Rpb24KKyovCisKKyNpZmRlZiBSSVBFTUQyNTYKKworY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3Igcm1kMjU2X2Rlc2MgPQoreworICAgICJybWQyNTYiLAorICAgIDgsCisgICAgMTYsCisgICAgNjQsCisKKyAgICAvKiBPSUQgKi8KKyAgIHsgMSwgMywgMzYsIDMsIDIsIDMgfSwKKyAgIDYsCisKKyAgICAmcm1kMjU2X2luaXQsCisgICAgJnJtZDI1Nl9wcm9jZXNzLAorICAgICZybWQyNTZfZG9uZSwKKyAgICAmcm1kMjU2X3Rlc3QsCisgICAgTlVMTAorfTsKKworLyogdGhlIGZvdXIgYmFzaWMgZnVuY3Rpb25zIEYoKSwgRygpIGFuZCBIKCkgKi8KKyNkZWZpbmUgRih4LCB5LCB6KSAgICAgICAgKCh4KSBeICh5KSBeICh6KSkKKyNkZWZpbmUgRyh4LCB5LCB6KSAgICAgICAgKCgoeCkgJiAoeSkpIHwgKH4oeCkgJiAoeikpKQorI2RlZmluZSBIKHgsIHksIHopICAgICAgICAoKCh4KSB8IH4oeSkpIF4gKHopKQorI2RlZmluZSBJKHgsIHksIHopICAgICAgICAoKCh4KSAmICh6KSkgfCAoKHkpICYgfih6KSkpCisKKy8qIHRoZSBlaWdodCBiYXNpYyBvcGVyYXRpb25zIEZGKCkgdGhyb3VnaCBJSUkoKSAqLworI2RlZmluZSBGRihhLCBiLCBjLCBkLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEYoKGIpLCAoYyksIChkKSkgKyAoeCk7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSk7CisKKyNkZWZpbmUgR0coYSwgYiwgYywgZCwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBHKChiKSwgKGMpLCAoZCkpICsgKHgpICsgMHg1YTgyNzk5OVVMO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpOworCisjZGVmaW5lIEhIKGEsIGIsIGMsIGQsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gSCgoYiksIChjKSwgKGQpKSArICh4KSArIDB4NmVkOWViYTFVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKTsKKworI2RlZmluZSBJSShhLCBiLCBjLCBkLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEkoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDhmMWJiY2RjVUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSk7CisKKyNkZWZpbmUgRkZGKGEsIGIsIGMsIGQsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gRigoYiksIChjKSwgKGQpKSArICh4KTtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKTsKKworI2RlZmluZSBHR0coYSwgYiwgYywgZCwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBHKChiKSwgKGMpLCAoZCkpICsgKHgpICsgMHg2ZDcwM2VmM1VMO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpOworCisjZGVmaW5lIEhISChhLCBiLCBjLCBkLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEgoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDVjNGRkMTI0VUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSk7CisKKyNkZWZpbmUgSUlJKGEsIGIsIGMsIGQsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gSSgoYiksIChjKSwgKGQpKSArICh4KSArIDB4NTBhMjhiZTZVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKTsKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfcm1kMjU2X2NvbXByZXNzKGhhc2hfc3RhdGUgKm1kLCB1bnNpZ25lZCBjaGFyICpidWYpCisjZWxzZQorc3RhdGljIGludCAgcm1kMjU2X2NvbXByZXNzKGhhc2hfc3RhdGUgKm1kLCB1bnNpZ25lZCBjaGFyICpidWYpCisjZW5kaWYKK3sKKyAgIHVsb25nMzIgYWEsYmIsY2MsZGQsYWFhLGJiYixjY2MsZGRkLHRtcCxYWzE2XTsKKyAgIGludCBpOworCisgICAvKiBsb2FkIHdvcmRzIFggKi8KKyAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKXsKKyAgICAgIExPQUQzMkwoWFtpXSwgYnVmICsgKDQgKiBpKSk7CisgICB9CisKKyAgIC8qIGxvYWQgc3RhdGUgKi8KKyAgIGFhID0gbWQtPnJtZDI1Ni5zdGF0ZVswXTsKKyAgIGJiID0gbWQtPnJtZDI1Ni5zdGF0ZVsxXTsKKyAgIGNjID0gbWQtPnJtZDI1Ni5zdGF0ZVsyXTsKKyAgIGRkID0gbWQtPnJtZDI1Ni5zdGF0ZVszXTsKKyAgIGFhYSA9IG1kLT5ybWQyNTYuc3RhdGVbNF07CisgICBiYmIgPSBtZC0+cm1kMjU2LnN0YXRlWzVdOworICAgY2NjID0gbWQtPnJtZDI1Ni5zdGF0ZVs2XTsKKyAgIGRkZCA9IG1kLT5ybWQyNTYuc3RhdGVbN107CisKKyAgIC8qIHJvdW5kIDEgKi8KKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBYWyAwXSwgMTEpOworICAgRkYoZGQsIGFhLCBiYiwgY2MsIFhbIDFdLCAxNCk7CisgICBGRihjYywgZGQsIGFhLCBiYiwgWFsgMl0sIDE1KTsKKyAgIEZGKGJiLCBjYywgZGQsIGFhLCBYWyAzXSwgMTIpOworICAgRkYoYWEsIGJiLCBjYywgZGQsIFhbIDRdLCAgNSk7CisgICBGRihkZCwgYWEsIGJiLCBjYywgWFsgNV0sICA4KTsKKyAgIEZGKGNjLCBkZCwgYWEsIGJiLCBYWyA2XSwgIDcpOworICAgRkYoYmIsIGNjLCBkZCwgYWEsIFhbIDddLCAgOSk7CisgICBGRihhYSwgYmIsIGNjLCBkZCwgWFsgOF0sIDExKTsKKyAgIEZGKGRkLCBhYSwgYmIsIGNjLCBYWyA5XSwgMTMpOworICAgRkYoY2MsIGRkLCBhYSwgYmIsIFhbMTBdLCAxNCk7CisgICBGRihiYiwgY2MsIGRkLCBhYSwgWFsxMV0sIDE1KTsKKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBYWzEyXSwgIDYpOworICAgRkYoZGQsIGFhLCBiYiwgY2MsIFhbMTNdLCAgNyk7CisgICBGRihjYywgZGQsIGFhLCBiYiwgWFsxNF0sICA5KTsKKyAgIEZGKGJiLCBjYywgZGQsIGFhLCBYWzE1XSwgIDgpOworCisgICAvKiBwYXJhbGxlbCByb3VuZCAxICovCisgICBJSUkoYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA1XSwgIDgpOworICAgSUlJKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsxNF0sICA5KTsKKyAgIElJSShjY2MsIGRkZCwgYWFhLCBiYmIsIFhbIDddLCAgOSk7CisgICBJSUkoYmJiLCBjY2MsIGRkZCwgYWFhLCBYWyAwXSwgMTEpOworICAgSUlJKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgOV0sIDEzKTsKKyAgIElJSShkZGQsIGFhYSwgYmJiLCBjY2MsIFhbIDJdLCAxNSk7CisgICBJSUkoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWzExXSwgMTUpOworICAgSUlJKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsgNF0sICA1KTsKKyAgIElJSShhYWEsIGJiYiwgY2NjLCBkZGQsIFhbMTNdLCAgNyk7CisgICBJSUkoZGRkLCBhYWEsIGJiYiwgY2NjLCBYWyA2XSwgIDcpOworICAgSUlJKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsxNV0sICA4KTsKKyAgIElJSShiYmIsIGNjYywgZGRkLCBhYWEsIFhbIDhdLCAxMSk7CisgICBJSUkoYWFhLCBiYmIsIGNjYywgZGRkLCBYWyAxXSwgMTQpOworICAgSUlJKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsxMF0sIDE0KTsKKyAgIElJSShjY2MsIGRkZCwgYWFhLCBiYmIsIFhbIDNdLCAxMik7CisgICBJSUkoYmJiLCBjY2MsIGRkZCwgYWFhLCBYWzEyXSwgIDYpOworCisgICB0bXAgPSBhYTsgYWEgPSBhYWE7IGFhYSA9IHRtcDsKKworICAgLyogcm91bmQgMiAqLworICAgR0coYWEsIGJiLCBjYywgZGQsIFhbIDddLCAgNyk7CisgICBHRyhkZCwgYWEsIGJiLCBjYywgWFsgNF0sICA2KTsKKyAgIEdHKGNjLCBkZCwgYWEsIGJiLCBYWzEzXSwgIDgpOworICAgR0coYmIsIGNjLCBkZCwgYWEsIFhbIDFdLCAxMyk7CisgICBHRyhhYSwgYmIsIGNjLCBkZCwgWFsxMF0sIDExKTsKKyAgIEdHKGRkLCBhYSwgYmIsIGNjLCBYWyA2XSwgIDkpOworICAgR0coY2MsIGRkLCBhYSwgYmIsIFhbMTVdLCAgNyk7CisgICBHRyhiYiwgY2MsIGRkLCBhYSwgWFsgM10sIDE1KTsKKyAgIEdHKGFhLCBiYiwgY2MsIGRkLCBYWzEyXSwgIDcpOworICAgR0coZGQsIGFhLCBiYiwgY2MsIFhbIDBdLCAxMik7CisgICBHRyhjYywgZGQsIGFhLCBiYiwgWFsgOV0sIDE1KTsKKyAgIEdHKGJiLCBjYywgZGQsIGFhLCBYWyA1XSwgIDkpOworICAgR0coYWEsIGJiLCBjYywgZGQsIFhbIDJdLCAxMSk7CisgICBHRyhkZCwgYWEsIGJiLCBjYywgWFsxNF0sICA3KTsKKyAgIEdHKGNjLCBkZCwgYWEsIGJiLCBYWzExXSwgMTMpOworICAgR0coYmIsIGNjLCBkZCwgYWEsIFhbIDhdLCAxMik7CisKKyAgIC8qIHBhcmFsbGVsIHJvdW5kIDIgKi8KKyAgIEhISChhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDZdLCAgOSk7CisgICBISEgoZGRkLCBhYWEsIGJiYiwgY2NjLCBYWzExXSwgMTMpOworICAgSEhIKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsgM10sIDE1KTsKKyAgIEhISChiYmIsIGNjYywgZGRkLCBhYWEsIFhbIDddLCAgNyk7CisgICBISEgoYWFhLCBiYmIsIGNjYywgZGRkLCBYWyAwXSwgMTIpOworICAgSEhIKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsxM10sICA4KTsKKyAgIEhISChjY2MsIGRkZCwgYWFhLCBiYmIsIFhbIDVdLCAgOSk7CisgICBISEgoYmJiLCBjY2MsIGRkZCwgYWFhLCBYWzEwXSwgMTEpOworICAgSEhIKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsxNF0sICA3KTsKKyAgIEhISChkZGQsIGFhYSwgYmJiLCBjY2MsIFhbMTVdLCAgNyk7CisgICBISEgoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyA4XSwgMTIpOworICAgSEhIKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsxMl0sICA3KTsKKyAgIEhISChhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDRdLCAgNik7CisgICBISEgoZGRkLCBhYWEsIGJiYiwgY2NjLCBYWyA5XSwgMTUpOworICAgSEhIKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsgMV0sIDEzKTsKKyAgIEhISChiYmIsIGNjYywgZGRkLCBhYWEsIFhbIDJdLCAxMSk7CisKKyAgIHRtcCA9IGJiOyBiYiA9IGJiYjsgYmJiID0gdG1wOworCisgICAvKiByb3VuZCAzICovCisgICBISChhYSwgYmIsIGNjLCBkZCwgWFsgM10sIDExKTsKKyAgIEhIKGRkLCBhYSwgYmIsIGNjLCBYWzEwXSwgMTMpOworICAgSEgoY2MsIGRkLCBhYSwgYmIsIFhbMTRdLCAgNik7CisgICBISChiYiwgY2MsIGRkLCBhYSwgWFsgNF0sICA3KTsKKyAgIEhIKGFhLCBiYiwgY2MsIGRkLCBYWyA5XSwgMTQpOworICAgSEgoZGQsIGFhLCBiYiwgY2MsIFhbMTVdLCAgOSk7CisgICBISChjYywgZGQsIGFhLCBiYiwgWFsgOF0sIDEzKTsKKyAgIEhIKGJiLCBjYywgZGQsIGFhLCBYWyAxXSwgMTUpOworICAgSEgoYWEsIGJiLCBjYywgZGQsIFhbIDJdLCAxNCk7CisgICBISChkZCwgYWEsIGJiLCBjYywgWFsgN10sICA4KTsKKyAgIEhIKGNjLCBkZCwgYWEsIGJiLCBYWyAwXSwgMTMpOworICAgSEgoYmIsIGNjLCBkZCwgYWEsIFhbIDZdLCAgNik7CisgICBISChhYSwgYmIsIGNjLCBkZCwgWFsxM10sICA1KTsKKyAgIEhIKGRkLCBhYSwgYmIsIGNjLCBYWzExXSwgMTIpOworICAgSEgoY2MsIGRkLCBhYSwgYmIsIFhbIDVdLCAgNyk7CisgICBISChiYiwgY2MsIGRkLCBhYSwgWFsxMl0sICA1KTsKKworICAgLyogcGFyYWxsZWwgcm91bmQgMyAqLworICAgR0dHKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsxNV0sICA5KTsKKyAgIEdHRyhkZGQsIGFhYSwgYmJiLCBjY2MsIFhbIDVdLCAgNyk7CisgICBHR0coY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyAxXSwgMTUpOworICAgR0dHKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsgM10sIDExKTsKKyAgIEdHRyhhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDddLCAgOCk7CisgICBHR0coZGRkLCBhYWEsIGJiYiwgY2NjLCBYWzE0XSwgIDYpOworICAgR0dHKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsgNl0sICA2KTsKKyAgIEdHRyhiYmIsIGNjYywgZGRkLCBhYWEsIFhbIDldLCAxNCk7CisgICBHR0coYWFhLCBiYmIsIGNjYywgZGRkLCBYWzExXSwgMTIpOworICAgR0dHKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsgOF0sIDEzKTsKKyAgIEdHRyhjY2MsIGRkZCwgYWFhLCBiYmIsIFhbMTJdLCAgNSk7CisgICBHR0coYmJiLCBjY2MsIGRkZCwgYWFhLCBYWyAyXSwgMTQpOworICAgR0dHKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsxMF0sIDEzKTsKKyAgIEdHRyhkZGQsIGFhYSwgYmJiLCBjY2MsIFhbIDBdLCAxMyk7CisgICBHR0coY2NjLCBkZGQsIGFhYSwgYmJiLCBYWyA0XSwgIDcpOworICAgR0dHKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsxM10sICA1KTsKKworICAgdG1wID0gY2M7IGNjID0gY2NjOyBjY2MgPSB0bXA7CisKKyAgIC8qIHJvdW5kIDQgKi8KKyAgIElJKGFhLCBiYiwgY2MsIGRkLCBYWyAxXSwgMTEpOworICAgSUkoZGQsIGFhLCBiYiwgY2MsIFhbIDldLCAxMik7CisgICBJSShjYywgZGQsIGFhLCBiYiwgWFsxMV0sIDE0KTsKKyAgIElJKGJiLCBjYywgZGQsIGFhLCBYWzEwXSwgMTUpOworICAgSUkoYWEsIGJiLCBjYywgZGQsIFhbIDBdLCAxNCk7CisgICBJSShkZCwgYWEsIGJiLCBjYywgWFsgOF0sIDE1KTsKKyAgIElJKGNjLCBkZCwgYWEsIGJiLCBYWzEyXSwgIDkpOworICAgSUkoYmIsIGNjLCBkZCwgYWEsIFhbIDRdLCAgOCk7CisgICBJSShhYSwgYmIsIGNjLCBkZCwgWFsxM10sICA5KTsKKyAgIElJKGRkLCBhYSwgYmIsIGNjLCBYWyAzXSwgMTQpOworICAgSUkoY2MsIGRkLCBhYSwgYmIsIFhbIDddLCAgNSk7CisgICBJSShiYiwgY2MsIGRkLCBhYSwgWFsxNV0sICA2KTsKKyAgIElJKGFhLCBiYiwgY2MsIGRkLCBYWzE0XSwgIDgpOworICAgSUkoZGQsIGFhLCBiYiwgY2MsIFhbIDVdLCAgNik7CisgICBJSShjYywgZGQsIGFhLCBiYiwgWFsgNl0sICA1KTsKKyAgIElJKGJiLCBjYywgZGQsIGFhLCBYWyAyXSwgMTIpOworCisgICAvKiBwYXJhbGxlbCByb3VuZCA0ICovCisgICBGRkYoYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA4XSwgMTUpOworICAgRkZGKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsgNl0sICA1KTsKKyAgIEZGRihjY2MsIGRkZCwgYWFhLCBiYmIsIFhbIDRdLCAgOCk7CisgICBGRkYoYmJiLCBjY2MsIGRkZCwgYWFhLCBYWyAxXSwgMTEpOworICAgRkZGKGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgM10sIDE0KTsKKyAgIEZGRihkZGQsIGFhYSwgYmJiLCBjY2MsIFhbMTFdLCAxNCk7CisgICBGRkYoY2NjLCBkZGQsIGFhYSwgYmJiLCBYWzE1XSwgIDYpOworICAgRkZGKGJiYiwgY2NjLCBkZGQsIGFhYSwgWFsgMF0sIDE0KTsKKyAgIEZGRihhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDVdLCAgNik7CisgICBGRkYoZGRkLCBhYWEsIGJiYiwgY2NjLCBYWzEyXSwgIDkpOworICAgRkZGKGNjYywgZGRkLCBhYWEsIGJiYiwgWFsgMl0sIDEyKTsKKyAgIEZGRihiYmIsIGNjYywgZGRkLCBhYWEsIFhbMTNdLCAgOSk7CisgICBGRkYoYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA5XSwgMTIpOworICAgRkZGKGRkZCwgYWFhLCBiYmIsIGNjYywgWFsgN10sICA1KTsKKyAgIEZGRihjY2MsIGRkZCwgYWFhLCBiYmIsIFhbMTBdLCAxNSk7CisgICBGRkYoYmJiLCBjY2MsIGRkZCwgYWFhLCBYWzE0XSwgIDgpOworCisgICB0bXAgPSBkZDsgZGQgPSBkZGQ7IGRkZCA9IHRtcDsKKworICAgLyogY29tYmluZSByZXN1bHRzICovCisgICBtZC0+cm1kMjU2LnN0YXRlWzBdICs9IGFhOworICAgbWQtPnJtZDI1Ni5zdGF0ZVsxXSArPSBiYjsKKyAgIG1kLT5ybWQyNTYuc3RhdGVbMl0gKz0gY2M7CisgICBtZC0+cm1kMjU2LnN0YXRlWzNdICs9IGRkOworICAgbWQtPnJtZDI1Ni5zdGF0ZVs0XSArPSBhYWE7CisgICBtZC0+cm1kMjU2LnN0YXRlWzVdICs9IGJiYjsKKyAgIG1kLT5ybWQyNTYuc3RhdGVbNl0gKz0gY2NjOworICAgbWQtPnJtZDI1Ni5zdGF0ZVs3XSArPSBkZGQ7CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBybWQyNTZfY29tcHJlc3MoaGFzaF9zdGF0ZSAqbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKyAgIGludCBlcnI7CisgICBlcnIgPSBfcm1kMjU2X2NvbXByZXNzKG1kLCBidWYpOworICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiAyNSArIHNpemVvZihpbnQpKTsKKyAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyoqCisgICBJbml0aWFsaXplIHRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gbWQgICBUaGUgaGFzaCBzdGF0ZSB5b3Ugd2lzaCB0byBpbml0aWFsaXplCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgcm1kMjU2X2luaXQoaGFzaF9zdGF0ZSAqIG1kKQoreworICAgTFRDX0FSR0NISyhtZCAhPSBOVUxMKTsKKyAgIG1kLT5ybWQyNTYuc3RhdGVbMF0gPSAweDY3NDUyMzAxVUw7CisgICBtZC0+cm1kMjU2LnN0YXRlWzFdID0gMHhlZmNkYWI4OVVMOworICAgbWQtPnJtZDI1Ni5zdGF0ZVsyXSA9IDB4OThiYWRjZmVVTDsKKyAgIG1kLT5ybWQyNTYuc3RhdGVbM10gPSAweDEwMzI1NDc2VUw7CisgICBtZC0+cm1kMjU2LnN0YXRlWzRdID0gMHg3NjU0MzIxMFVMOworICAgbWQtPnJtZDI1Ni5zdGF0ZVs1XSA9IDB4ZmVkY2JhOThVTDsKKyAgIG1kLT5ybWQyNTYuc3RhdGVbNl0gPSAweDg5YWJjZGVmVUw7CisgICBtZC0+cm1kMjU2LnN0YXRlWzddID0gMHgwMTIzNDU2N1VMOworICAgbWQtPnJtZDI1Ni5jdXJsZW4gICA9IDA7CisgICBtZC0+cm1kMjU2Lmxlbmd0aCAgID0gMDsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgICBQcm9jZXNzIGEgYmxvY2sgb2YgbWVtb3J5IHRob3VnaCB0aGUgaGFzaAorICAgQHBhcmFtIG1kICAgICBUaGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIGluICAgICBUaGUgZGF0YSB0byBoYXNoCisgICBAcGFyYW0gaW5sZW4gIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKG9jdGV0cykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK0hBU0hfUFJPQ0VTUyhybWQyNTZfcHJvY2Vzcywgcm1kMjU2X2NvbXByZXNzLCBybWQyNTYsIDY0KQorCisvKioKKyAgIFRlcm1pbmF0ZSB0aGUgaGFzaCB0byBnZXQgdGhlIGRpZ2VzdAorICAgQHBhcmFtIG1kICBUaGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIG91dCBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGhhc2ggKDE2IGJ5dGVzKQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHJtZDI1Nl9kb25lKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqb3V0KQoreworICAgIGludCBpOworCisgICAgTFRDX0FSR0NISyhtZCAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhvdXQgIT0gTlVMTCk7CisKKyAgICBpZiAobWQtPnJtZDI1Ni5jdXJsZW4gPj0gc2l6ZW9mKG1kLT5ybWQyNTYuYnVmKSkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgICB9CisKKworICAgIC8qIGluY3JlYXNlIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgKi8KKyAgICBtZC0+cm1kMjU2Lmxlbmd0aCArPSBtZC0+cm1kMjU2LmN1cmxlbiAqIDg7CisKKyAgICAvKiBhcHBlbmQgdGhlICcxJyBiaXQgKi8KKyAgICBtZC0+cm1kMjU2LmJ1ZlttZC0+cm1kMjU2LmN1cmxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKTB4ODA7CisKKyAgICAvKiBpZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSBhYm92ZSA1NiBieXRlcyB3ZSBhcHBlbmQgemVyb3MKKyAgICAgKiB0aGVuIGNvbXByZXNzLiAgVGhlbiB3ZSBjYW4gZmFsbCBiYWNrIHRvIHBhZGRpbmcgemVyb3MgYW5kIGxlbmd0aAorICAgICAqIGVuY29kaW5nIGxpa2Ugbm9ybWFsLgorICAgICAqLworICAgIGlmIChtZC0+cm1kMjU2LmN1cmxlbiA+IDU2KSB7CisgICAgICAgIHdoaWxlIChtZC0+cm1kMjU2LmN1cmxlbiA8IDY0KSB7CisgICAgICAgICAgICBtZC0+cm1kMjU2LmJ1ZlttZC0+cm1kMjU2LmN1cmxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKTA7CisgICAgICAgIH0KKyAgICAgICAgcm1kMjU2X2NvbXByZXNzKG1kLCBtZC0+cm1kMjU2LmJ1Zik7CisgICAgICAgIG1kLT5ybWQyNTYuY3VybGVuID0gMDsKKyAgICB9CisKKyAgICAvKiBwYWQgdXB0byA1NiBieXRlcyBvZiB6ZXJvZXMgKi8KKyAgICB3aGlsZSAobWQtPnJtZDI1Ni5jdXJsZW4gPCA1NikgeworICAgICAgICBtZC0+cm1kMjU2LmJ1ZlttZC0+cm1kMjU2LmN1cmxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKTA7CisgICAgfQorCisgICAgLyogc3RvcmUgbGVuZ3RoICovCisgICAgU1RPUkU2NEwobWQtPnJtZDI1Ni5sZW5ndGgsIG1kLT5ybWQyNTYuYnVmKzU2KTsKKyAgICBybWQyNTZfY29tcHJlc3MobWQsIG1kLT5ybWQyNTYuYnVmKTsKKworICAgIC8qIGNvcHkgb3V0cHV0ICovCisgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICBTVE9SRTMyTChtZC0+cm1kMjU2LnN0YXRlW2ldLCBvdXQrKDQqaSkpOworICAgIH0KKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgICB6ZXJvbWVtKG1kLCBzaXplb2YoaGFzaF9zdGF0ZSkpOworI2VuZGlmCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBTZWxmLXRlc3QgdGhlIGhhc2gKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQKKyovCitpbnQgcm1kMjU2X3Rlc3Qodm9pZCkKK3sKKyNpZm5kZWYgTFRDX1RFU1QKKyAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgIGNoYXIgKm1zZzsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtZFszMl07CisgICB9IHRlc3RzW10gPSB7CisgICB7ICIiLAorICAgICB7IDB4MDIsIDB4YmEsIDB4NGMsIDB4NGUsIDB4NWYsIDB4OGUsIDB4Y2QsIDB4MTgsCisgICAgICAgMHg3NywgMHhmYywgMHg1MiwgMHhkNiwgMHg0ZCwgMHgzMCwgMHhlMywgMHg3YSwKKyAgICAgICAweDJkLCAweDk3LCAweDc0LCAweGZiLCAweDFlLCAweDVkLCAweDAyLCAweDYzLAorICAgICAgIDB4ODAsIDB4YWUsIDB4MDEsIDB4NjgsIDB4ZTMsIDB4YzUsIDB4NTIsIDB4MmQgfQorICAgfSwKKyAgIHsgImEiLAorICAgICB7IDB4ZjksIDB4MzMsIDB4M2UsIDB4NDUsIDB4ZDgsIDB4NTcsIDB4ZjUsIDB4ZDksCisgICAgICAgMHgwYSwgMHg5MSwgMHhiYSwgMHhiNywgMHgwYSwgMHgxZSwgMHhiYSwgMHgwYywKKyAgICAgICAweGZiLCAweDFiLCAweGU0LCAweGIwLCAweDc4LCAweDNjLCAweDlhLCAweGNmLAorICAgICAgIDB4Y2QsIDB4ODgsIDB4M2EsIDB4OTEsIDB4MzQsIDB4NjksIDB4MjksIDB4MjUgfQorICAgfSwKKyAgIHsgImFiYyIsCisgICAgIHsgMHhhZiwgMHhiZCwgMHg2ZSwgMHgyMiwgMHg4YiwgMHg5ZCwgMHg4YywgMHhiYiwKKyAgICAgICAweGNlLCAweGY1LCAweGNhLCAweDJkLCAweDAzLCAweGU2LCAweGRiLCAweGExLAorICAgICAgIDB4MGEsIDB4YzAsIDB4YmMsIDB4N2QsIDB4Y2IsIDB4ZTQsIDB4NjgsIDB4MGUsCisgICAgICAgMHgxZSwgMHg0MiwgMHhkMiwgMHhlOSwgMHg3NSwgMHg0NSwgMHg5YiwgMHg2NSB9CisgICB9LAorICAgeyAibWVzc2FnZSBkaWdlc3QiLAorICAgICB7IDB4ODcsIDB4ZTksIDB4NzEsIDB4NzUsIDB4OWEsIDB4MWMsIDB4ZTQsIDB4N2EsCisgICAgICAgMHg1MSwgMHg0ZCwgMHg1YywgMHg5MSwgMHg0YywgMHgzOSwgMHgyYywgMHg5MCwKKyAgICAgICAweDE4LCAweGM3LCAweGM0LCAweDZiLCAweGMxLCAweDQ0LCAweDY1LCAweDU1LAorICAgICAgIDB4NGEsIDB4ZmMsIDB4ZGYsIDB4NTQsIDB4YTUsIDB4MDcsIDB4MGMsIDB4MGUgfQorICAgfSwKKyAgIHsgImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IiwKKyAgICAgeyAweDY0LCAweDlkLCAweDMwLCAweDM0LCAweDc1LCAweDFlLCAweGEyLCAweDE2LAorICAgICAgIDB4NzcsIDB4NmIsIDB4ZjksIDB4YTEsIDB4OGEsIDB4Y2MsIDB4ODEsIDB4YmMsCisgICAgICAgMHg3OCwgMHg5NiwgMHgxMSwgMHg4YSwgMHg1MSwgMHg5NywgMHg5NiwgMHg4NywKKyAgICAgICAweDgyLCAweGRkLCAweDFmLCAweGQ5LCAweDdkLCAweDhkLCAweDUxLCAweDMzIH0KKyAgIH0sCisgICB7ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSIsCisgICAgIHsgMHg1NywgMHg0MCwgMHhhNCwgMHgwOCwgMHhhYywgMHgxNiwgMHhiNywgMHgyMCwKKyAgICAgICAweGI4LCAweDQ0LCAweDI0LCAweGFlLCAweDkzLCAweDFjLCAweGJiLCAweDFmLAorICAgICAgIDB4ZTMsIDB4NjMsIDB4ZDEsIDB4ZDAsIDB4YmYsIDB4NDAsIDB4MTcsIDB4ZjEsCisgICAgICAgMHhhOCwgMHg5ZiwgMHg3ZSwgMHhhNiwgMHhkZSwgMHg3NywgMHhhMCwgMHhiOCB9CisgICB9CisgICB9OworICAgaW50IHg7CisgICB1bnNpZ25lZCBjaGFyIGJ1ZlszMl07CisgICBoYXNoX3N0YXRlIG1kOworCisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKS9zaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAgcm1kMjU2X2luaXQoJm1kKTsKKyAgICAgICBybWQyNTZfcHJvY2VzcygmbWQsICh1bnNpZ25lZCBjaGFyICopdGVzdHNbeF0ubXNnLCBzdHJsZW4odGVzdHNbeF0ubXNnKSk7CisgICAgICAgcm1kMjU2X2RvbmUoJm1kLCBidWYpOworICAgICAgIGlmIChYTUVNQ01QKGJ1ZiwgdGVzdHNbeF0ubWQsIDMyKSAhPSAwKSB7CisgICAgICAgI2lmIDAKKyAgICAgICAgICBwcmludGYoIkZhaWxlZCB0ZXN0ICVkXG4iLCB4KTsKKyAgICAgICAjZW5kaWYKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZgorfQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9ybWQzMjAuYyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvcm1kMzIwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTExZmNhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvcm1kMzIwLmMKQEAgLTAsMCArMSw0OTUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBybWQzMjAuYworICAgUk1EMzIwIGhhc2ggZnVuY3Rpb24KKyovCisKKyNpZmRlZiBSSVBFTUQzMjAKKworY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3Igcm1kMzIwX2Rlc2MgPQoreworICAgICJybWQzMjAiLAorICAgIDksCisgICAgMjAsCisgICAgNjQsCisKKyAgICAvKiBPSUQgKi8KKyAgIHsgMCB9LAorICAgMCwKKworICAgICZybWQzMjBfaW5pdCwKKyAgICAmcm1kMzIwX3Byb2Nlc3MsCisgICAgJnJtZDMyMF9kb25lLAorICAgICZybWQzMjBfdGVzdCwKKyAgICBOVUxMCit9OworCisvKiB0aGUgZml2ZSBiYXNpYyBmdW5jdGlvbnMgRigpLCBHKCkgYW5kIEgoKSAqLworI2RlZmluZSBGKHgsIHksIHopICAgICAgICAoKHgpIF4gKHkpIF4gKHopKQorI2RlZmluZSBHKHgsIHksIHopICAgICAgICAoKCh4KSAmICh5KSkgfCAofih4KSAmICh6KSkpCisjZGVmaW5lIEgoeCwgeSwgeikgICAgICAgICgoKHgpIHwgfih5KSkgXiAoeikpCisjZGVmaW5lIEkoeCwgeSwgeikgICAgICAgICgoKHgpICYgKHopKSB8ICgoeSkgJiB+KHopKSkKKyNkZWZpbmUgSih4LCB5LCB6KSAgICAgICAgKCh4KSBeICgoeSkgfCB+KHopKSkKKworLyogdGhlIHRlbiBiYXNpYyBvcGVyYXRpb25zIEZGKCkgdGhyb3VnaCBJSUkoKSAqLworI2RlZmluZSBGRihhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEYoKGIpLCAoYyksIChkKSkgKyAoeCk7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBHRyhhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEcoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDVhODI3OTk5VUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBISChhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEgoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDZlZDllYmExVUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBJSShhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEkoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDhmMWJiY2RjVUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBKSihhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEooKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweGE5NTNmZDRlVUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBGRkYoYSwgYiwgYywgZCwgZSwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBGKChiKSwgKGMpLCAoZCkpICsgKHgpO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpICsgKGUpO1wKKyAgICAgIChjKSA9IFJPTGMoKGMpLCAxMCk7CisKKyNkZWZpbmUgR0dHKGEsIGIsIGMsIGQsIGUsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gRygoYiksIChjKSwgKGQpKSArICh4KSArIDB4N2E2ZDc2ZTlVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKSArIChlKTtcCisgICAgICAoYykgPSBST0xjKChjKSwgMTApOworCisjZGVmaW5lIEhISChhLCBiLCBjLCBkLCBlLCB4LCBzKSAgICAgICAgXAorICAgICAgKGEpICs9IEgoKGIpLCAoYyksIChkKSkgKyAoeCkgKyAweDZkNzAzZWYzVUw7XAorICAgICAgKGEpID0gUk9MYygoYSksIChzKSkgKyAoZSk7XAorICAgICAgKGMpID0gUk9MYygoYyksIDEwKTsKKworI2RlZmluZSBJSUkoYSwgYiwgYywgZCwgZSwgeCwgcykgICAgICAgIFwKKyAgICAgIChhKSArPSBJKChiKSwgKGMpLCAoZCkpICsgKHgpICsgMHg1YzRkZDEyNFVMO1wKKyAgICAgIChhKSA9IFJPTGMoKGEpLCAocykpICsgKGUpO1wKKyAgICAgIChjKSA9IFJPTGMoKGMpLCAxMCk7CisKKyNkZWZpbmUgSkpKKGEsIGIsIGMsIGQsIGUsIHgsIHMpICAgICAgICBcCisgICAgICAoYSkgKz0gSigoYiksIChjKSwgKGQpKSArICh4KSArIDB4NTBhMjhiZTZVTDtcCisgICAgICAoYSkgPSBST0xjKChhKSwgKHMpKSArIChlKTtcCisgICAgICAoYykgPSBST0xjKChjKSwgMTApOworCisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyBpbnQgX3JtZDMyMF9jb21wcmVzcyhoYXNoX3N0YXRlICptZCwgdW5zaWduZWQgY2hhciAqYnVmKQorI2Vsc2UKK3N0YXRpYyBpbnQgIHJtZDMyMF9jb21wcmVzcyhoYXNoX3N0YXRlICptZCwgdW5zaWduZWQgY2hhciAqYnVmKQorI2VuZGlmCit7CisgICB1bG9uZzMyIGFhLGJiLGNjLGRkLGVlLGFhYSxiYmIsY2NjLGRkZCxlZWUsdG1wLFhbMTZdOworICAgaW50IGk7CisKKyAgIC8qIGxvYWQgd29yZHMgWCAqLworICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspeworICAgICAgTE9BRDMyTChYW2ldLCBidWYgKyAoNCAqIGkpKTsKKyAgIH0KKworICAgLyogbG9hZCBzdGF0ZSAqLworICAgYWEgPSBtZC0+cm1kMzIwLnN0YXRlWzBdOworICAgYmIgPSBtZC0+cm1kMzIwLnN0YXRlWzFdOworICAgY2MgPSBtZC0+cm1kMzIwLnN0YXRlWzJdOworICAgZGQgPSBtZC0+cm1kMzIwLnN0YXRlWzNdOworICAgZWUgPSBtZC0+cm1kMzIwLnN0YXRlWzRdOworICAgYWFhID0gbWQtPnJtZDMyMC5zdGF0ZVs1XTsKKyAgIGJiYiA9IG1kLT5ybWQzMjAuc3RhdGVbNl07CisgICBjY2MgPSBtZC0+cm1kMzIwLnN0YXRlWzddOworICAgZGRkID0gbWQtPnJtZDMyMC5zdGF0ZVs4XTsKKyAgIGVlZSA9IG1kLT5ybWQzMjAuc3RhdGVbOV07CisKKyAgIC8qIHJvdW5kIDEgKi8KKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsgMF0sIDExKTsKKyAgIEZGKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgMV0sIDE0KTsKKyAgIEZGKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgMl0sIDE1KTsKKyAgIEZGKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgM10sIDEyKTsKKyAgIEZGKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsgNF0sICA1KTsKKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsgNV0sICA4KTsKKyAgIEZGKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgNl0sICA3KTsKKyAgIEZGKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgN10sICA5KTsKKyAgIEZGKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgOF0sIDExKTsKKyAgIEZGKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsgOV0sIDEzKTsKKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsxMF0sIDE0KTsKKyAgIEZGKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsxMV0sIDE1KTsKKyAgIEZGKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsxMl0sICA2KTsKKyAgIEZGKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsxM10sICA3KTsKKyAgIEZGKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsxNF0sICA5KTsKKyAgIEZGKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsxNV0sICA4KTsKKworICAgLyogcGFyYWxsZWwgcm91bmQgMSAqLworICAgSkpKKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWyA1XSwgIDgpOworICAgSkpKKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWzE0XSwgIDkpOworICAgSkpKKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWyA3XSwgIDkpOworICAgSkpKKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyAwXSwgMTEpOworICAgSkpKKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWyA5XSwgMTMpOworICAgSkpKKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWyAyXSwgMTUpOworICAgSkpKKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWzExXSwgMTUpOworICAgSkpKKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWyA0XSwgIDUpOworICAgSkpKKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWzEzXSwgIDcpOworICAgSkpKKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWyA2XSwgIDcpOworICAgSkpKKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWzE1XSwgIDgpOworICAgSkpKKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA4XSwgMTEpOworICAgSkpKKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWyAxXSwgMTQpOworICAgSkpKKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWzEwXSwgMTQpOworICAgSkpKKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWyAzXSwgMTIpOworICAgSkpKKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWzEyXSwgIDYpOworCisgICB0bXAgPSBhYTsgYWEgPSBhYWE7IGFhYSA9IHRtcDsKKworICAgLyogcm91bmQgMiAqLworICAgR0coZWUsIGFhLCBiYiwgY2MsIGRkLCBYWyA3XSwgIDcpOworICAgR0coZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyA0XSwgIDYpOworICAgR0coY2MsIGRkLCBlZSwgYWEsIGJiLCBYWzEzXSwgIDgpOworICAgR0coYmIsIGNjLCBkZCwgZWUsIGFhLCBYWyAxXSwgMTMpOworICAgR0coYWEsIGJiLCBjYywgZGQsIGVlLCBYWzEwXSwgMTEpOworICAgR0coZWUsIGFhLCBiYiwgY2MsIGRkLCBYWyA2XSwgIDkpOworICAgR0coZGQsIGVlLCBhYSwgYmIsIGNjLCBYWzE1XSwgIDcpOworICAgR0coY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyAzXSwgMTUpOworICAgR0coYmIsIGNjLCBkZCwgZWUsIGFhLCBYWzEyXSwgIDcpOworICAgR0coYWEsIGJiLCBjYywgZGQsIGVlLCBYWyAwXSwgMTIpOworICAgR0coZWUsIGFhLCBiYiwgY2MsIGRkLCBYWyA5XSwgMTUpOworICAgR0coZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyA1XSwgIDkpOworICAgR0coY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyAyXSwgMTEpOworICAgR0coYmIsIGNjLCBkZCwgZWUsIGFhLCBYWzE0XSwgIDcpOworICAgR0coYWEsIGJiLCBjYywgZGQsIGVlLCBYWzExXSwgMTMpOworICAgR0coZWUsIGFhLCBiYiwgY2MsIGRkLCBYWyA4XSwgMTIpOworCisgICAvKiBwYXJhbGxlbCByb3VuZCAyICovCisgICBJSUkoZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDZdLCAgOSk7CisgICBJSUkoZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbMTFdLCAxMyk7CisgICBJSUkoY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbIDNdLCAxNSk7CisgICBJSUkoYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbIDddLCAgNyk7CisgICBJSUkoYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbIDBdLCAxMik7CisgICBJSUkoZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbMTNdLCAgOCk7CisgICBJSUkoZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbIDVdLCAgOSk7CisgICBJSUkoY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbMTBdLCAxMSk7CisgICBJSUkoYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbMTRdLCAgNyk7CisgICBJSUkoYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbMTVdLCAgNyk7CisgICBJSUkoZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDhdLCAxMik7CisgICBJSUkoZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbMTJdLCAgNyk7CisgICBJSUkoY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbIDRdLCAgNik7CisgICBJSUkoYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbIDldLCAxNSk7CisgICBJSUkoYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbIDFdLCAxMyk7CisgICBJSUkoZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDJdLCAxMSk7CisKKyAgIHRtcCA9IGJiOyBiYiA9IGJiYjsgYmJiID0gdG1wOworCisgICAvKiByb3VuZCAzICovCisgICBISChkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDNdLCAxMSk7CisgICBISChjYywgZGQsIGVlLCBhYSwgYmIsIFhbMTBdLCAxMyk7CisgICBISChiYiwgY2MsIGRkLCBlZSwgYWEsIFhbMTRdLCAgNik7CisgICBISChhYSwgYmIsIGNjLCBkZCwgZWUsIFhbIDRdLCAgNyk7CisgICBISChlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDldLCAxNCk7CisgICBISChkZCwgZWUsIGFhLCBiYiwgY2MsIFhbMTVdLCAgOSk7CisgICBISChjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDhdLCAxMyk7CisgICBISChiYiwgY2MsIGRkLCBlZSwgYWEsIFhbIDFdLCAxNSk7CisgICBISChhYSwgYmIsIGNjLCBkZCwgZWUsIFhbIDJdLCAxNCk7CisgICBISChlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDddLCAgOCk7CisgICBISChkZCwgZWUsIGFhLCBiYiwgY2MsIFhbIDBdLCAxMyk7CisgICBISChjYywgZGQsIGVlLCBhYSwgYmIsIFhbIDZdLCAgNik7CisgICBISChiYiwgY2MsIGRkLCBlZSwgYWEsIFhbMTNdLCAgNSk7CisgICBISChhYSwgYmIsIGNjLCBkZCwgZWUsIFhbMTFdLCAxMik7CisgICBISChlZSwgYWEsIGJiLCBjYywgZGQsIFhbIDVdLCAgNyk7CisgICBISChkZCwgZWUsIGFhLCBiYiwgY2MsIFhbMTJdLCAgNSk7CisKKyAgIC8qIHBhcmFsbGVsIHJvdW5kIDMgKi8KKyAgIEhISChkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsxNV0sICA5KTsKKyAgIEhISChjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgNV0sICA3KTsKKyAgIEhISChiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgMV0sIDE1KTsKKyAgIEhISChhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgM10sIDExKTsKKyAgIEhISChlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgN10sICA4KTsKKyAgIEhISChkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsxNF0sICA2KTsKKyAgIEhISChjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgNl0sICA2KTsKKyAgIEhISChiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgOV0sIDE0KTsKKyAgIEhISChhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsxMV0sIDEyKTsKKyAgIEhISChlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgOF0sIDEzKTsKKyAgIEhISChkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsxMl0sICA1KTsKKyAgIEhISChjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgMl0sIDE0KTsKKyAgIEhISChiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsxMF0sIDEzKTsKKyAgIEhISChhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsgMF0sIDEzKTsKKyAgIEhISChlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsgNF0sICA3KTsKKyAgIEhISChkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsxM10sICA1KTsKKworICAgdG1wID0gY2M7IGNjID0gY2NjOyBjY2MgPSB0bXA7CisKKyAgIC8qIHJvdW5kIDQgKi8KKyAgIElJKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgMV0sIDExKTsKKyAgIElJKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsgOV0sIDEyKTsKKyAgIElJKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsxMV0sIDE0KTsKKyAgIElJKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsxMF0sIDE1KTsKKyAgIElJKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgMF0sIDE0KTsKKyAgIElJKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgOF0sIDE1KTsKKyAgIElJKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsxMl0sICA5KTsKKyAgIElJKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsgNF0sICA4KTsKKyAgIElJKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsxM10sICA5KTsKKyAgIElJKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgM10sIDE0KTsKKyAgIElJKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgN10sICA1KTsKKyAgIElJKGJiLCBjYywgZGQsIGVlLCBhYSwgWFsxNV0sICA2KTsKKyAgIElJKGFhLCBiYiwgY2MsIGRkLCBlZSwgWFsxNF0sICA4KTsKKyAgIElJKGVlLCBhYSwgYmIsIGNjLCBkZCwgWFsgNV0sICA2KTsKKyAgIElJKGRkLCBlZSwgYWEsIGJiLCBjYywgWFsgNl0sICA1KTsKKyAgIElJKGNjLCBkZCwgZWUsIGFhLCBiYiwgWFsgMl0sIDEyKTsKKworICAgLyogcGFyYWxsZWwgcm91bmQgNCAqLworICAgR0dHKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyA4XSwgMTUpOworICAgR0dHKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWyA2XSwgIDUpOworICAgR0dHKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWyA0XSwgIDgpOworICAgR0dHKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyAxXSwgMTEpOworICAgR0dHKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWyAzXSwgMTQpOworICAgR0dHKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWzExXSwgMTQpOworICAgR0dHKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWzE1XSwgIDYpOworICAgR0dHKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWyAwXSwgMTQpOworICAgR0dHKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA1XSwgIDYpOworICAgR0dHKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzEyXSwgIDkpOworICAgR0dHKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyAyXSwgMTIpOworICAgR0dHKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWzEzXSwgIDkpOworICAgR0dHKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWyA5XSwgMTIpOworICAgR0dHKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA3XSwgIDUpOworICAgR0dHKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWzEwXSwgMTUpOworICAgR0dHKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWzE0XSwgIDgpOworCisgICB0bXAgPSBkZDsgZGQgPSBkZGQ7IGRkZCA9IHRtcDsKKworICAgLyogcm91bmQgNSAqLworICAgSkooYmIsIGNjLCBkZCwgZWUsIGFhLCBYWyA0XSwgIDkpOworICAgSkooYWEsIGJiLCBjYywgZGQsIGVlLCBYWyAwXSwgMTUpOworICAgSkooZWUsIGFhLCBiYiwgY2MsIGRkLCBYWyA1XSwgIDUpOworICAgSkooZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyA5XSwgMTEpOworICAgSkooY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyA3XSwgIDYpOworICAgSkooYmIsIGNjLCBkZCwgZWUsIGFhLCBYWzEyXSwgIDgpOworICAgSkooYWEsIGJiLCBjYywgZGQsIGVlLCBYWyAyXSwgMTMpOworICAgSkooZWUsIGFhLCBiYiwgY2MsIGRkLCBYWzEwXSwgMTIpOworICAgSkooZGQsIGVlLCBhYSwgYmIsIGNjLCBYWzE0XSwgIDUpOworICAgSkooY2MsIGRkLCBlZSwgYWEsIGJiLCBYWyAxXSwgMTIpOworICAgSkooYmIsIGNjLCBkZCwgZWUsIGFhLCBYWyAzXSwgMTMpOworICAgSkooYWEsIGJiLCBjYywgZGQsIGVlLCBYWyA4XSwgMTQpOworICAgSkooZWUsIGFhLCBiYiwgY2MsIGRkLCBYWzExXSwgMTEpOworICAgSkooZGQsIGVlLCBhYSwgYmIsIGNjLCBYWyA2XSwgIDgpOworICAgSkooY2MsIGRkLCBlZSwgYWEsIGJiLCBYWzE1XSwgIDUpOworICAgSkooYmIsIGNjLCBkZCwgZWUsIGFhLCBYWzEzXSwgIDYpOworCisgICAvKiBwYXJhbGxlbCByb3VuZCA1ICovCisgICBGRkYoYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbMTJdICwgIDgpOworICAgRkZGKGFhYSwgYmJiLCBjY2MsIGRkZCwgZWVlLCBYWzE1XSAsICA1KTsKKyAgIEZGRihlZWUsIGFhYSwgYmJiLCBjY2MsIGRkZCwgWFsxMF0gLCAxMik7CisgICBGRkYoZGRkLCBlZWUsIGFhYSwgYmJiLCBjY2MsIFhbIDRdICwgIDkpOworICAgRkZGKGNjYywgZGRkLCBlZWUsIGFhYSwgYmJiLCBYWyAxXSAsIDEyKTsKKyAgIEZGRihiYmIsIGNjYywgZGRkLCBlZWUsIGFhYSwgWFsgNV0gLCAgNSk7CisgICBGRkYoYWFhLCBiYmIsIGNjYywgZGRkLCBlZWUsIFhbIDhdICwgMTQpOworICAgRkZGKGVlZSwgYWFhLCBiYmIsIGNjYywgZGRkLCBYWyA3XSAsICA2KTsKKyAgIEZGRihkZGQsIGVlZSwgYWFhLCBiYmIsIGNjYywgWFsgNl0gLCAgOCk7CisgICBGRkYoY2NjLCBkZGQsIGVlZSwgYWFhLCBiYmIsIFhbIDJdICwgMTMpOworICAgRkZGKGJiYiwgY2NjLCBkZGQsIGVlZSwgYWFhLCBYWzEzXSAsICA2KTsKKyAgIEZGRihhYWEsIGJiYiwgY2NjLCBkZGQsIGVlZSwgWFsxNF0gLCAgNSk7CisgICBGRkYoZWVlLCBhYWEsIGJiYiwgY2NjLCBkZGQsIFhbIDBdICwgMTUpOworICAgRkZGKGRkZCwgZWVlLCBhYWEsIGJiYiwgY2NjLCBYWyAzXSAsIDEzKTsKKyAgIEZGRihjY2MsIGRkZCwgZWVlLCBhYWEsIGJiYiwgWFsgOV0gLCAxMSk7CisgICBGRkYoYmJiLCBjY2MsIGRkZCwgZWVlLCBhYWEsIFhbMTFdICwgMTEpOworCisgICB0bXAgPSBlZTsgZWUgPSBlZWU7IGVlZSA9IHRtcDsKKworICAgLyogY29tYmluZSByZXN1bHRzICovCisgICBtZC0+cm1kMzIwLnN0YXRlWzBdICs9IGFhOworICAgbWQtPnJtZDMyMC5zdGF0ZVsxXSArPSBiYjsKKyAgIG1kLT5ybWQzMjAuc3RhdGVbMl0gKz0gY2M7CisgICBtZC0+cm1kMzIwLnN0YXRlWzNdICs9IGRkOworICAgbWQtPnJtZDMyMC5zdGF0ZVs0XSArPSBlZTsKKyAgIG1kLT5ybWQzMjAuc3RhdGVbNV0gKz0gYWFhOworICAgbWQtPnJtZDMyMC5zdGF0ZVs2XSArPSBiYmI7CisgICBtZC0+cm1kMzIwLnN0YXRlWzddICs9IGNjYzsKKyAgIG1kLT5ybWQzMjAuc3RhdGVbOF0gKz0gZGRkOworICAgbWQtPnJtZDMyMC5zdGF0ZVs5XSArPSBlZWU7CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBybWQzMjBfY29tcHJlc3MoaGFzaF9zdGF0ZSAqbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKyAgIGludCBlcnI7CisgICBlcnIgPSBfcm1kMzIwX2NvbXByZXNzKG1kLCBidWYpOworICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiAyNyArIHNpemVvZihpbnQpKTsKKyAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyoqCisgICBJbml0aWFsaXplIHRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gbWQgICBUaGUgaGFzaCBzdGF0ZSB5b3Ugd2lzaCB0byBpbml0aWFsaXplCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgcm1kMzIwX2luaXQoaGFzaF9zdGF0ZSAqIG1kKQoreworICAgTFRDX0FSR0NISyhtZCAhPSBOVUxMKTsKKyAgIG1kLT5ybWQzMjAuc3RhdGVbMF0gPSAweDY3NDUyMzAxVUw7CisgICBtZC0+cm1kMzIwLnN0YXRlWzFdID0gMHhlZmNkYWI4OVVMOworICAgbWQtPnJtZDMyMC5zdGF0ZVsyXSA9IDB4OThiYWRjZmVVTDsKKyAgIG1kLT5ybWQzMjAuc3RhdGVbM10gPSAweDEwMzI1NDc2VUw7CisgICBtZC0+cm1kMzIwLnN0YXRlWzRdID0gMHhjM2QyZTFmMFVMOworICAgbWQtPnJtZDMyMC5zdGF0ZVs1XSA9IDB4NzY1NDMyMTBVTDsKKyAgIG1kLT5ybWQzMjAuc3RhdGVbNl0gPSAweGZlZGNiYTk4VUw7CisgICBtZC0+cm1kMzIwLnN0YXRlWzddID0gMHg4OWFiY2RlZlVMOworICAgbWQtPnJtZDMyMC5zdGF0ZVs4XSA9IDB4MDEyMzQ1NjdVTDsKKyAgIG1kLT5ybWQzMjAuc3RhdGVbOV0gPSAweDNjMmQxZTBmVUw7CisgICBtZC0+cm1kMzIwLmN1cmxlbiAgID0gMDsKKyAgIG1kLT5ybWQzMjAubGVuZ3RoICAgPSAwOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgIFByb2Nlc3MgYSBibG9jayBvZiBtZW1vcnkgdGhvdWdoIHRoZSBoYXNoCisgICBAcGFyYW0gbWQgICAgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gaW4gICAgIFRoZSBkYXRhIHRvIGhhc2gKKyAgIEBwYXJhbSBpbmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAob2N0ZXRzKQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworSEFTSF9QUk9DRVNTKHJtZDMyMF9wcm9jZXNzLCBybWQzMjBfY29tcHJlc3MsIHJtZDMyMCwgNjQpCisKKy8qKgorICAgVGVybWluYXRlIHRoZSBoYXNoIHRvIGdldCB0aGUgZGlnZXN0CisgICBAcGFyYW0gbWQgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gb3V0IFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgaGFzaCAoMjAgYnl0ZXMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgcm1kMzIwX2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpvdXQpCit7CisgICAgaW50IGk7CisKKyAgICBMVENfQVJHQ0hLKG1kICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dCAhPSBOVUxMKTsKKworICAgIGlmIChtZC0+cm1kMzIwLmN1cmxlbiA+PSBzaXplb2YobWQtPnJtZDMyMC5idWYpKSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgIH0KKworCisgICAgLyogaW5jcmVhc2UgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSAqLworICAgIG1kLT5ybWQzMjAubGVuZ3RoICs9IG1kLT5ybWQzMjAuY3VybGVuICogODsKKworICAgIC8qIGFwcGVuZCB0aGUgJzEnIGJpdCAqLworICAgIG1kLT5ybWQzMjAuYnVmW21kLT5ybWQzMjAuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMHg4MDsKKworICAgIC8qIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IGFib3ZlIDU2IGJ5dGVzIHdlIGFwcGVuZCB6ZXJvcworICAgICAqIHRoZW4gY29tcHJlc3MuICBUaGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gcGFkZGluZyB6ZXJvcyBhbmQgbGVuZ3RoCisgICAgICogZW5jb2RpbmcgbGlrZSBub3JtYWwuCisgICAgICovCisgICAgaWYgKG1kLT5ybWQzMjAuY3VybGVuID4gNTYpIHsKKyAgICAgICAgd2hpbGUgKG1kLT5ybWQzMjAuY3VybGVuIDwgNjQpIHsKKyAgICAgICAgICAgIG1kLT5ybWQzMjAuYnVmW21kLT5ybWQzMjAuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMDsKKyAgICAgICAgfQorICAgICAgICBybWQzMjBfY29tcHJlc3MobWQsIG1kLT5ybWQzMjAuYnVmKTsKKyAgICAgICAgbWQtPnJtZDMyMC5jdXJsZW4gPSAwOworICAgIH0KKworICAgIC8qIHBhZCB1cHRvIDU2IGJ5dGVzIG9mIHplcm9lcyAqLworICAgIHdoaWxlIChtZC0+cm1kMzIwLmN1cmxlbiA8IDU2KSB7CisgICAgICAgIG1kLT5ybWQzMjAuYnVmW21kLT5ybWQzMjAuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMDsKKyAgICB9CisKKyAgICAvKiBzdG9yZSBsZW5ndGggKi8KKyAgICBTVE9SRTY0TChtZC0+cm1kMzIwLmxlbmd0aCwgbWQtPnJtZDMyMC5idWYrNTYpOworICAgIHJtZDMyMF9jb21wcmVzcyhtZCwgbWQtPnJtZDMyMC5idWYpOworCisgICAgLyogY29weSBvdXRwdXQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworICAgICAgICBTVE9SRTMyTChtZC0+cm1kMzIwLnN0YXRlW2ldLCBvdXQrKDQqaSkpOworICAgIH0KKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgICB6ZXJvbWVtKG1kLCBzaXplb2YoaGFzaF9zdGF0ZSkpOworI2VuZGlmCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgU2VsZi10ZXN0IHRoZSBoYXNoCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdHMgaGF2ZSBiZWVuIGRpc2FibGVkCisqLworaW50IHJtZDMyMF90ZXN0KHZvaWQpCit7CisjaWZuZGVmIExUQ19URVNUCisgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgICBjaGFyICptc2c7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgbWRbNDBdOworICAgfSB0ZXN0c1tdID0geworICAgeyAiIiwKKyAgICAgeyAweDIyLCAweGQ2LCAweDVkLCAweDU2LCAweDYxLCAweDUzLCAweDZjLCAweGRjLCAweDc1LCAweGMxLAorICAgICAgIDB4ZmQsIDB4ZjUsIDB4YzYsIDB4ZGUsIDB4N2IsIDB4NDEsIDB4YjksIDB4ZjIsIDB4NzMsIDB4MjUsCisgICAgICAgMHhlYiwgMHhjNiwgMHgxZSwgMHg4NSwgMHg1NywgMHgxNywgMHg3ZCwgMHg3MCwgMHg1YSwgMHgwZSwKKyAgICAgICAweGM4LCAweDgwLCAweDE1LCAweDFjLCAweDNhLCAweDMyLCAweGEwLCAweDA4LCAweDk5LCAweGI4IH0KKyAgIH0sCisgICB7ICJhIiwKKyAgICAgeyAweGNlLCAweDc4LCAweDg1LCAweDA2LCAweDM4LCAweGY5LCAweDI2LCAweDU4LCAweGE1LCAweGE1LAorICAgICAgIDB4ODUsIDB4MDksIDB4NzUsIDB4NzksIDB4OTIsIDB4NmQsIDB4ZGEsIDB4NjYsIDB4N2EsIDB4NTcsCisgICAgICAgMHgxNiwgMHg1NiwgMHgyYywgMHhmYywgMHhmNiwgMHhmYiwgMHhlNywgMHg3ZiwgMHg2MywgMHg1NCwKKyAgICAgICAweDJmLCAweDk5LCAweGIwLCAweDQ3LCAweDA1LCAweGQ2LCAweDk3LCAweDBkLCAweGZmLCAweDVkIH0KKyAgIH0sCisgICB7ICJhYmMiLAorICAgICB7IDB4ZGUsIDB4NGMsIDB4MDEsIDB4YjMsIDB4MDUsIDB4NGYsIDB4ODksIDB4MzAsIDB4YTcsIDB4OWQsCisgICAgICAgMHgwOSwgMHhhZSwgMHg3MywgMHg4ZSwgMHg5MiwgMHgzMCwgMHgxZSwgMHg1YSwgMHgxNywgMHgwOCwKKyAgICAgICAweDViLCAweGVmLCAweGZkLCAweGMxLCAweGI4LCAweGQxLCAweDE2LCAweDcxLCAweDNlLCAweDc0LAorICAgICAgIDB4ZjgsIDB4MmYsIDB4YTksIDB4NDIsIDB4ZDYsIDB4NGMsIDB4ZGIsIDB4YzQsIDB4NjgsIDB4MmQgfQorICAgfSwKKyAgIHsgIm1lc3NhZ2UgZGlnZXN0IiwKKyAgICAgeyAweDNhLCAweDhlLCAweDI4LCAweDUwLCAweDJlLCAweGQ0LCAweDVkLCAweDQyLCAweDJmLCAweDY4LAorICAgICAgIDB4ODQsIDB4NGYsIDB4OWQsIDB4ZDMsIDB4MTYsIDB4ZTcsIDB4YjksIDB4ODUsIDB4MzMsIDB4ZmEsCisgICAgICAgMHgzZiwgMHgyYSwgMHg5MSwgMHhkMiwgMHg5ZiwgMHg4NCwgMHhkNCwgMHgyNSwgMHhjOCwgMHg4ZCwKKyAgICAgICAweDZiLCAweDRlLCAweGZmLCAweDcyLCAweDdkLCAweGY2LCAweDZhLCAweDdjLCAweDAxLCAweDk3IH0KKyAgIH0sCisgICB7ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsCisgICAgIHsgMHhjYSwgMHhiZCwgMHhiMSwgMHg4MSwgMHgwYiwgMHg5MiwgMHg0NywgMHgwYSwgMHgyMCwgMHg5MywKKyAgICAgICAweGFhLCAweDZiLCAweGNlLCAweDA1LCAweDk1LCAweDJjLCAweDI4LCAweDM0LCAweDhjLCAweGY0LAorICAgICAgIDB4M2YsIDB4ZjYsIDB4MDgsIDB4NDEsIDB4OTcsIDB4NTEsIDB4NjYsIDB4YmIsIDB4NDAsIDB4ZWQsCisgICAgICAgMHgyMywgMHg0MCwgMHgwNCwgMHhiOCwgMHg4MiwgMHg0NCwgMHg2MywgMHhlNiwgMHhiMCwgMHgwOSB9CisgICB9LAorICAgeyAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiLAorICAgICB7IDB4ZDAsIDB4MzQsIDB4YTcsIDB4OTUsIDB4MGMsIDB4ZjcsIDB4MjIsIDB4MDIsIDB4MWIsIDB4YTQsCisgICAgICAgMHhiOCwgMHg0ZCwgMHhmNywgMHg2OSwgMHhhNSwgMHhkZSwgMHgyMCwgMHg2MCwgMHhlMiwgMHg1OSwKKyAgICAgICAweGRmLCAweDRjLCAweDliLCAweGI0LCAweGE0LCAweDI2LCAweDhjLCAweDBlLCAweDkzLCAweDViLAorICAgICAgIDB4YmMsIDB4NzQsIDB4NzAsIDB4YTksIDB4NjksIDB4YzksIDB4ZDAsIDB4NzIsIDB4YTEsIDB4YWMgfQorICAgfQorICAgfTsKKyAgIGludCB4OworICAgdW5zaWduZWQgY2hhciBidWZbNDBdOworICAgaGFzaF9zdGF0ZSBtZDsKKworICAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgeworICAgICAgIHJtZDMyMF9pbml0KCZtZCk7CisgICAgICAgcm1kMzIwX3Byb2Nlc3MoJm1kLCAodW5zaWduZWQgY2hhciAqKXRlc3RzW3hdLm1zZywgc3RybGVuKHRlc3RzW3hdLm1zZykpOworICAgICAgIHJtZDMyMF9kb25lKCZtZCwgYnVmKTsKKyAgICAgICBpZiAoWE1FTUNNUChidWYsIHRlc3RzW3hdLm1kLCA0MCkgIT0gMCkgeworI2lmIDAKKyAgICAgICAgICBwcmludGYoIkZhaWxlZCB0ZXN0ICVkXG4iLCB4KTsKKyNlbmRpZgorICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgfQorICAgfQorICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3NoYTEuYyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYzY4NTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3NoYTEuYwpAQCAtMCwwICsxLDI4OCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgc2hhMS5jCisgIFNIQTEgY29kZSBieSBUb20gU3QgRGVuaXMgCisqLworCisKKyNpZmRlZiBTSEExCisKK2NvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIHNoYTFfZGVzYyA9Cit7CisgICAgInNoYTEiLAorICAgIDIsCisgICAgMjAsCisgICAgNjQsCisKKyAgICAvKiBPSUQgKi8KKyAgIHsgMSwgMywgMTQsIDMsIDIsIDI2LCAgfSwKKyAgIDYsCisKKyAgICAmc2hhMV9pbml0LAorICAgICZzaGExX3Byb2Nlc3MsCisgICAgJnNoYTFfZG9uZSwKKyAgICAmc2hhMV90ZXN0LAorICAgIE5VTEwKK307CisKKyNkZWZpbmUgRjAoeCx5LHopICAoeiBeICh4ICYgKHkgXiB6KSkpCisjZGVmaW5lIEYxKHgseSx6KSAgKHggXiB5IF4geikKKyNkZWZpbmUgRjIoeCx5LHopICAoKHggJiB5KSB8ICh6ICYgKHggfCB5KSkpCisjZGVmaW5lIEYzKHgseSx6KSAgKHggXiB5IF4geikKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfc2hhMV9jb21wcmVzcyhoYXNoX3N0YXRlICptZCwgdW5zaWduZWQgY2hhciAqYnVmKQorI2Vsc2UKK3N0YXRpYyBpbnQgIHNoYTFfY29tcHJlc3MoaGFzaF9zdGF0ZSAqbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKKyNlbmRpZgoreworICAgIHVsb25nMzIgYSxiLGMsZCxlLFdbODBdLGk7CisjaWZkZWYgTFRDX1NNQUxMX0NPREUKKyAgICB1bG9uZzMyIHQ7CisjZW5kaWYKKworICAgIC8qIGNvcHkgdGhlIHN0YXRlIGludG8gNTEyLWJpdHMgaW50byBXWzAuLjE1XSAqLworICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgICAgIExPQUQzMkgoV1tpXSwgYnVmICsgKDQqaSkpOworICAgIH0KKworICAgIC8qIGNvcHkgc3RhdGUgKi8KKyAgICBhID0gbWQtPnNoYTEuc3RhdGVbMF07CisgICAgYiA9IG1kLT5zaGExLnN0YXRlWzFdOworICAgIGMgPSBtZC0+c2hhMS5zdGF0ZVsyXTsKKyAgICBkID0gbWQtPnNoYTEuc3RhdGVbM107CisgICAgZSA9IG1kLT5zaGExLnN0YXRlWzRdOworCisgICAgLyogZXhwYW5kIGl0ICovCisgICAgZm9yIChpID0gMTY7IGkgPCA4MDsgaSsrKSB7CisgICAgICAgIFdbaV0gPSBST0woV1tpLTNdIF4gV1tpLThdIF4gV1tpLTE0XSBeIFdbaS0xNl0sIDEpOyAKKyAgICB9CisKKyAgICAvKiBjb21wcmVzcyAqLworICAgIC8qIHJvdW5kIG9uZSAqLworICAgICNkZWZpbmUgRkYwKGEsYixjLGQsZSxpKSBlID0gKFJPTGMoYSwgNSkgKyBGMChiLGMsZCkgKyBlICsgV1tpXSArIDB4NWE4Mjc5OTlVTCk7IGIgPSBST0xjKGIsIDMwKTsKKyAgICAjZGVmaW5lIEZGMShhLGIsYyxkLGUsaSkgZSA9IChST0xjKGEsIDUpICsgRjEoYixjLGQpICsgZSArIFdbaV0gKyAweDZlZDllYmExVUwpOyBiID0gUk9MYyhiLCAzMCk7CisgICAgI2RlZmluZSBGRjIoYSxiLGMsZCxlLGkpIGUgPSAoUk9MYyhhLCA1KSArIEYyKGIsYyxkKSArIGUgKyBXW2ldICsgMHg4ZjFiYmNkY1VMKTsgYiA9IFJPTGMoYiwgMzApOworICAgICNkZWZpbmUgRkYzKGEsYixjLGQsZSxpKSBlID0gKFJPTGMoYSwgNSkgKyBGMyhiLGMsZCkgKyBlICsgV1tpXSArIDB4Y2E2MmMxZDZVTCk7IGIgPSBST0xjKGIsIDMwKTsKKyAKKyNpZmRlZiBMVENfU01BTExfQ09ERQorIAorICAgIGZvciAoaSA9IDA7IGkgPCAyMDsgKSB7CisgICAgICAgRkYwKGEsYixjLGQsZSxpKyspOyB0ID0gZTsgZSA9IGQ7IGQgPSBjOyBjID0gYjsgYiA9IGE7IGEgPSB0OworICAgIH0KKworICAgIGZvciAoOyBpIDwgNDA7ICkgeworICAgICAgIEZGMShhLGIsYyxkLGUsaSsrKTsgdCA9IGU7IGUgPSBkOyBkID0gYzsgYyA9IGI7IGIgPSBhOyBhID0gdDsKKyAgICB9CisKKyAgICBmb3IgKDsgaSA8IDYwOyApIHsKKyAgICAgICBGRjIoYSxiLGMsZCxlLGkrKyk7IHQgPSBlOyBlID0gZDsgZCA9IGM7IGMgPSBiOyBiID0gYTsgYSA9IHQ7CisgICAgfQorCisgICAgZm9yICg7IGkgPCA4MDsgKSB7CisgICAgICAgRkYzKGEsYixjLGQsZSxpKyspOyB0ID0gZTsgZSA9IGQ7IGQgPSBjOyBjID0gYjsgYiA9IGE7IGEgPSB0OworICAgIH0KKworI2Vsc2UKKworICAgIGZvciAoaSA9IDA7IGkgPCAyMDsgKSB7CisgICAgICAgRkYwKGEsYixjLGQsZSxpKyspOworICAgICAgIEZGMChlLGEsYixjLGQsaSsrKTsKKyAgICAgICBGRjAoZCxlLGEsYixjLGkrKyk7CisgICAgICAgRkYwKGMsZCxlLGEsYixpKyspOworICAgICAgIEZGMChiLGMsZCxlLGEsaSsrKTsKKyAgICB9CisKKyAgICAvKiByb3VuZCB0d28gKi8KKyAgICBmb3IgKDsgaSA8IDQwOyApICB7IAorICAgICAgIEZGMShhLGIsYyxkLGUsaSsrKTsKKyAgICAgICBGRjEoZSxhLGIsYyxkLGkrKyk7CisgICAgICAgRkYxKGQsZSxhLGIsYyxpKyspOworICAgICAgIEZGMShjLGQsZSxhLGIsaSsrKTsKKyAgICAgICBGRjEoYixjLGQsZSxhLGkrKyk7CisgICAgfQorCisgICAgLyogcm91bmQgdGhyZWUgKi8KKyAgICBmb3IgKDsgaSA8IDYwOyApICB7IAorICAgICAgIEZGMihhLGIsYyxkLGUsaSsrKTsKKyAgICAgICBGRjIoZSxhLGIsYyxkLGkrKyk7CisgICAgICAgRkYyKGQsZSxhLGIsYyxpKyspOworICAgICAgIEZGMihjLGQsZSxhLGIsaSsrKTsKKyAgICAgICBGRjIoYixjLGQsZSxhLGkrKyk7CisgICAgfQorCisgICAgLyogcm91bmQgZm91ciAqLworICAgIGZvciAoOyBpIDwgODA7ICkgIHsgCisgICAgICAgRkYzKGEsYixjLGQsZSxpKyspOworICAgICAgIEZGMyhlLGEsYixjLGQsaSsrKTsKKyAgICAgICBGRjMoZCxlLGEsYixjLGkrKyk7CisgICAgICAgRkYzKGMsZCxlLGEsYixpKyspOworICAgICAgIEZGMyhiLGMsZCxlLGEsaSsrKTsKKyAgICB9CisjZW5kaWYKKworICAgICN1bmRlZiBGRjAKKyAgICAjdW5kZWYgRkYxCisgICAgI3VuZGVmIEZGMgorICAgICN1bmRlZiBGRjMKKworICAgIC8qIHN0b3JlICovCisgICAgbWQtPnNoYTEuc3RhdGVbMF0gPSBtZC0+c2hhMS5zdGF0ZVswXSArIGE7CisgICAgbWQtPnNoYTEuc3RhdGVbMV0gPSBtZC0+c2hhMS5zdGF0ZVsxXSArIGI7CisgICAgbWQtPnNoYTEuc3RhdGVbMl0gPSBtZC0+c2hhMS5zdGF0ZVsyXSArIGM7CisgICAgbWQtPnNoYTEuc3RhdGVbM10gPSBtZC0+c2hhMS5zdGF0ZVszXSArIGQ7CisgICAgbWQtPnNoYTEuc3RhdGVbNF0gPSBtZC0+c2hhMS5zdGF0ZVs0XSArIGU7CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyBpbnQgc2hhMV9jb21wcmVzcyhoYXNoX3N0YXRlICptZCwgdW5zaWduZWQgY2hhciAqYnVmKQoreworICAgaW50IGVycjsKKyAgIGVyciA9IF9zaGExX2NvbXByZXNzKG1kLCBidWYpOworICAgYnVybl9zdGFjayhzaXplb2YodWxvbmczMikgKiA4Nyk7CisgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qKgorICAgSW5pdGlhbGl6ZSB0aGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIG1kICAgVGhlIGhhc2ggc3RhdGUgeW91IHdpc2ggdG8gaW5pdGlhbGl6ZQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHNoYTFfaW5pdChoYXNoX3N0YXRlICogbWQpCit7CisgICBMVENfQVJHQ0hLKG1kICE9IE5VTEwpOworICAgbWQtPnNoYTEuc3RhdGVbMF0gPSAweDY3NDUyMzAxVUw7CisgICBtZC0+c2hhMS5zdGF0ZVsxXSA9IDB4ZWZjZGFiODlVTDsKKyAgIG1kLT5zaGExLnN0YXRlWzJdID0gMHg5OGJhZGNmZVVMOworICAgbWQtPnNoYTEuc3RhdGVbM10gPSAweDEwMzI1NDc2VUw7CisgICBtZC0+c2hhMS5zdGF0ZVs0XSA9IDB4YzNkMmUxZjBVTDsKKyAgIG1kLT5zaGExLmN1cmxlbiA9IDA7CisgICBtZC0+c2hhMS5sZW5ndGggPSAwOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgIFByb2Nlc3MgYSBibG9jayBvZiBtZW1vcnkgdGhvdWdoIHRoZSBoYXNoCisgICBAcGFyYW0gbWQgICAgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gaW4gICAgIFRoZSBkYXRhIHRvIGhhc2gKKyAgIEBwYXJhbSBpbmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAob2N0ZXRzKQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworSEFTSF9QUk9DRVNTKHNoYTFfcHJvY2Vzcywgc2hhMV9jb21wcmVzcywgc2hhMSwgNjQpCisKKy8qKgorICAgVGVybWluYXRlIHRoZSBoYXNoIHRvIGdldCB0aGUgZGlnZXN0CisgICBAcGFyYW0gbWQgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gb3V0IFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgaGFzaCAoMjAgYnl0ZXMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgc2hhMV9kb25lKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqb3V0KQoreworICAgIGludCBpOworCisgICAgTFRDX0FSR0NISyhtZCAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhvdXQgIT0gTlVMTCk7CisKKyAgICBpZiAobWQtPnNoYTEuY3VybGVuID49IHNpemVvZihtZC0+c2hhMS5idWYpKSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgIH0KKworICAgIC8qIGluY3JlYXNlIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgKi8KKyAgICBtZC0+c2hhMS5sZW5ndGggKz0gbWQtPnNoYTEuY3VybGVuICogODsKKworICAgIC8qIGFwcGVuZCB0aGUgJzEnIGJpdCAqLworICAgIG1kLT5zaGExLmJ1ZlttZC0+c2hhMS5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikweDgwOworCisgICAgLyogaWYgdGhlIGxlbmd0aCBpcyBjdXJyZW50bHkgYWJvdmUgNTYgYnl0ZXMgd2UgYXBwZW5kIHplcm9zCisgICAgICogdGhlbiBjb21wcmVzcy4gIFRoZW4gd2UgY2FuIGZhbGwgYmFjayB0byBwYWRkaW5nIHplcm9zIGFuZCBsZW5ndGgKKyAgICAgKiBlbmNvZGluZyBsaWtlIG5vcm1hbC4KKyAgICAgKi8KKyAgICBpZiAobWQtPnNoYTEuY3VybGVuID4gNTYpIHsKKyAgICAgICAgd2hpbGUgKG1kLT5zaGExLmN1cmxlbiA8IDY0KSB7CisgICAgICAgICAgICBtZC0+c2hhMS5idWZbbWQtPnNoYTEuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMDsKKyAgICAgICAgfQorICAgICAgICBzaGExX2NvbXByZXNzKG1kLCBtZC0+c2hhMS5idWYpOworICAgICAgICBtZC0+c2hhMS5jdXJsZW4gPSAwOworICAgIH0KKworICAgIC8qIHBhZCB1cHRvIDU2IGJ5dGVzIG9mIHplcm9lcyAqLworICAgIHdoaWxlIChtZC0+c2hhMS5jdXJsZW4gPCA1NikgeworICAgICAgICBtZC0+c2hhMS5idWZbbWQtPnNoYTEuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMDsKKyAgICB9CisKKyAgICAvKiBzdG9yZSBsZW5ndGggKi8KKyAgICBTVE9SRTY0SChtZC0+c2hhMS5sZW5ndGgsIG1kLT5zaGExLmJ1Zis1Nik7CisgICAgc2hhMV9jb21wcmVzcyhtZCwgbWQtPnNoYTEuYnVmKTsKKworICAgIC8qIGNvcHkgb3V0cHV0ICovCisgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworICAgICAgICBTVE9SRTMySChtZC0+c2hhMS5zdGF0ZVtpXSwgb3V0Kyg0KmkpKTsKKyAgICB9CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICAgemVyb21lbShtZCwgc2l6ZW9mKGhhc2hfc3RhdGUpKTsKKyNlbmRpZgorICAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIFNlbGYtdGVzdCB0aGUgaGFzaAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3RzIGhhdmUgYmVlbiBkaXNhYmxlZAorKi8gIAoraW50ICBzaGExX3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZSAgICAKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICBjaGFyICptc2c7CisgICAgICB1bnNpZ25lZCBjaGFyIGhhc2hbMjBdOworICB9IHRlc3RzW10gPSB7CisgICAgeyAiYWJjIiwKKyAgICAgIHsgMHhhOSwgMHg5OSwgMHgzZSwgMHgzNiwgMHg0NywgMHgwNiwgMHg4MSwgMHg2YSwKKyAgICAgICAgMHhiYSwgMHgzZSwgMHgyNSwgMHg3MSwgMHg3OCwgMHg1MCwgMHhjMiwgMHg2YywKKyAgICAgICAgMHg5YywgMHhkMCwgMHhkOCwgMHg5ZCB9CisgICAgfSwKKyAgICB7ICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCisgICAgICB7IDB4ODQsIDB4OTgsIDB4M0UsIDB4NDQsIDB4MUMsIDB4M0IsIDB4RDIsIDB4NkUsCisgICAgICAgIDB4QkEsIDB4QUUsIDB4NEEsIDB4QTEsIDB4RjksIDB4NTEsIDB4MjksIDB4RTUsCisgICAgICAgIDB4RTUsIDB4NDYsIDB4NzAsIDB4RjEgfQorICAgIH0KKyAgfTsKKworICBpbnQgaTsKKyAgdW5zaWduZWQgY2hhciB0bXBbMjBdOworICBoYXNoX3N0YXRlIG1kOworCisgIGZvciAoaSA9IDA7IGkgPCAoaW50KShzaXplb2YodGVzdHMpIC8gc2l6ZW9mKHRlc3RzWzBdKSk7ICBpKyspIHsKKyAgICAgIHNoYTFfaW5pdCgmbWQpOworICAgICAgc2hhMV9wcm9jZXNzKCZtZCwgKHVuc2lnbmVkIGNoYXIqKXRlc3RzW2ldLm1zZywgKHVuc2lnbmVkIGxvbmcpc3RybGVuKHRlc3RzW2ldLm1zZykpOworICAgICAgc2hhMV9kb25lKCZtZCwgdG1wKTsKKyAgICAgIGlmIChYTUVNQ01QKHRtcCwgdGVzdHNbaV0uaGFzaCwgMjApICE9IDApIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICB9CisgIH0KKyAgcmV0dXJuIENSWVBUX09LOworICAjZW5kaWYKK30KKworI2VuZGlmCisKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3NoYTEuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMi9zaGEyMjQuYyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMi9zaGEyMjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDg1ZDUwCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9zaGEyL3NoYTIyNC5jCkBAIC0wLDAgKzEsMTI1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworLyoqCisgICBAcGFyYW0gc2hhMjI0LmMKKyAgIFNIQS0yMjQgbmV3IE5JU1Qgc3RhbmRhcmQgYmFzZWQgb2ZmIG9mIFNIQS0yNTYgdHJ1bmNhdGVkIHRvIDIyNCBiaXRzIChUb20gU3QgRGVuaXMpCisqLworCitjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciBzaGEyMjRfZGVzYyA9Cit7CisgICAgInNoYTIyNCIsCisgICAgMTAsCisgICAgMjgsCisgICAgNjQsCisKKyAgICAvKiBPSUQgKi8KKyAgIHsgMiwgMTYsIDg0MCwgMSwgMTAxLCAzLCA0LCAyLCA0LCAgfSwKKyAgIDksCisKKyAgICAmc2hhMjI0X2luaXQsCisgICAgJnNoYTI1Nl9wcm9jZXNzLAorICAgICZzaGEyMjRfZG9uZSwKKyAgICAmc2hhMjI0X3Rlc3QsCisgICAgTlVMTAorfTsKKworLyogaW5pdCB0aGUgc2hhMjU2IGVyLi4uIHNoYTIyNCBzdGF0ZSA7LSkgKi8KKy8qKgorICAgSW5pdGlhbGl6ZSB0aGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIG1kICAgVGhlIGhhc2ggc3RhdGUgeW91IHdpc2ggdG8gaW5pdGlhbGl6ZQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHNoYTIyNF9pbml0KGhhc2hfc3RhdGUgKiBtZCkKK3sKKyAgICBMVENfQVJHQ0hLKG1kICE9IE5VTEwpOworCisgICAgbWQtPnNoYTI1Ni5jdXJsZW4gPSAwOworICAgIG1kLT5zaGEyNTYubGVuZ3RoID0gMDsKKyAgICBtZC0+c2hhMjU2LnN0YXRlWzBdID0gMHhjMTA1OWVkOFVMOworICAgIG1kLT5zaGEyNTYuc3RhdGVbMV0gPSAweDM2N2NkNTA3VUw7CisgICAgbWQtPnNoYTI1Ni5zdGF0ZVsyXSA9IDB4MzA3MGRkMTdVTDsKKyAgICBtZC0+c2hhMjU2LnN0YXRlWzNdID0gMHhmNzBlNTkzOVVMOworICAgIG1kLT5zaGEyNTYuc3RhdGVbNF0gPSAweGZmYzAwYjMxVUw7CisgICAgbWQtPnNoYTI1Ni5zdGF0ZVs1XSA9IDB4Njg1ODE1MTFVTDsKKyAgICBtZC0+c2hhMjU2LnN0YXRlWzZdID0gMHg2NGY5OGZhN1VMOworICAgIG1kLT5zaGEyNTYuc3RhdGVbN10gPSAweGJlZmE0ZmE0VUw7CisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgIFRlcm1pbmF0ZSB0aGUgaGFzaCB0byBnZXQgdGhlIGRpZ2VzdAorICAgQHBhcmFtIG1kICBUaGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIG91dCBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGhhc2ggKDI4IGJ5dGVzKQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHNoYTIyNF9kb25lKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqb3V0KQoreworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzMyXTsKKyAgICBpbnQgZXJyOworCisgICAgTFRDX0FSR0NISyhtZCAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhvdXQgIT0gTlVMTCk7CisKKyAgICBlcnIgPSBzaGEyNTZfZG9uZShtZCwgYnVmKTsKKyAgICBYTUVNQ1BZKG91dCwgYnVmLCAyOCk7CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICAgemVyb21lbShidWYsIHNpemVvZihidWYpKTsKKyNlbmRpZiAKKyAgICByZXR1cm4gZXJyOworfQorCisvKioKKyAgU2VsZi10ZXN0IHRoZSBoYXNoCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdHMgaGF2ZSBiZWVuIGRpc2FibGVkCisqLyAgCitpbnQgIHNoYTIyNF90ZXN0KHZvaWQpCit7CisgI2lmbmRlZiBMVENfVEVTVAorICAgIHJldHVybiBDUllQVF9OT1A7CisgI2Vsc2UgICAgCisgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgY2hhciAqbXNnOworICAgICAgdW5zaWduZWQgY2hhciBoYXNoWzI4XTsKKyAgfSB0ZXN0c1tdID0geworICAgIHsgImFiYyIsCisgICAgICB7IDB4MjMsIDB4MDksIDB4N2QsIDB4MjIsIDB4MzQsIDB4MDUsIDB4ZDgsCisgICAgICAgIDB4MjIsIDB4ODYsIDB4NDIsIDB4YTQsIDB4NzcsIDB4YmQsIDB4YTIsCisgICAgICAgIDB4NTUsIDB4YjMsIDB4MmEsIDB4YWQsIDB4YmMsIDB4ZTQsIDB4YmQsCisgICAgICAgIDB4YTAsIDB4YjMsIDB4ZjcsIDB4ZTMsIDB4NmMsIDB4OWQsIDB4YTcgfQorICAgIH0sCisgICAgeyAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiLAorICAgICAgeyAweDc1LCAweDM4LCAweDhiLCAweDE2LCAweDUxLCAweDI3LCAweDc2LAorICAgICAgICAweGNjLCAweDVkLCAweGJhLCAweDVkLCAweGExLCAweGZkLCAweDg5LAorICAgICAgICAweDAxLCAweDUwLCAweGIwLCAweGM2LCAweDQ1LCAweDVjLCAweGI0LAorICAgICAgICAweGY1LCAweDhiLCAweDE5LCAweDUyLCAweDUyLCAweDI1LCAweDI1IH0KKyAgICB9LAorICB9OworCisgIGludCBpOworICB1bnNpZ25lZCBjaGFyIHRtcFsyOF07CisgIGhhc2hfc3RhdGUgbWQ7CisKKyAgZm9yIChpID0gMDsgaSA8IChpbnQpKHNpemVvZih0ZXN0cykgLyBzaXplb2YodGVzdHNbMF0pKTsgaSsrKSB7CisgICAgICBzaGEyMjRfaW5pdCgmbWQpOworICAgICAgc2hhMjI0X3Byb2Nlc3MoJm1kLCAodW5zaWduZWQgY2hhciopdGVzdHNbaV0ubXNnLCAodW5zaWduZWQgbG9uZylzdHJsZW4odGVzdHNbaV0ubXNnKSk7CisgICAgICBzaGEyMjRfZG9uZSgmbWQsIHRtcCk7CisgICAgICBpZiAoWE1FTUNNUCh0bXAsIHRlc3RzW2ldLmhhc2gsIDI4KSAhPSAwKSB7CisgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgfQorICB9CisgIHJldHVybiBDUllQVF9PSzsKKyAjZW5kaWYKK30KKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3NoYTIvc2hhMjI0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3NoYTIvc2hhMjU2LmMgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3NoYTIvc2hhMjU2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI0MmNiNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMi9zaGEyNTYuYwpAQCAtMCwwICsxLDM0MCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgc2hhMjU2LmMKKyAgU0hBMjU2IGJ5IFRvbSBTdCBEZW5pcyAKKyovCisKKyNpZmRlZiBTSEEyNTYgCisKK2NvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIHNoYTI1Nl9kZXNjID0KK3sKKyAgICAic2hhMjU2IiwKKyAgICAwLAorICAgIDMyLAorICAgIDY0LAorCisgICAgLyogT0lEICovCisgICB7IDIsIDE2LCA4NDAsIDEsIDEwMSwgMywgNCwgMiwgMSwgIH0sCisgICA5LAorICAgIAorICAgICZzaGEyNTZfaW5pdCwKKyAgICAmc2hhMjU2X3Byb2Nlc3MsCisgICAgJnNoYTI1Nl9kb25lLAorICAgICZzaGEyNTZfdGVzdCwKKyAgICBOVUxMCit9OworCisjaWZkZWYgTFRDX1NNQUxMX0NPREUKKy8qIHRoZSBLIGFycmF5ICovCitzdGF0aWMgY29uc3QgdWxvbmczMiBLWzY0XSA9IHsKKyAgICAweDQyOGEyZjk4VUwsIDB4NzEzNzQ0OTFVTCwgMHhiNWMwZmJjZlVMLCAweGU5YjVkYmE1VUwsIDB4Mzk1NmMyNWJVTCwKKyAgICAweDU5ZjExMWYxVUwsIDB4OTIzZjgyYTRVTCwgMHhhYjFjNWVkNVVMLCAweGQ4MDdhYTk4VUwsIDB4MTI4MzViMDFVTCwKKyAgICAweDI0MzE4NWJlVUwsIDB4NTUwYzdkYzNVTCwgMHg3MmJlNWQ3NFVMLCAweDgwZGViMWZlVUwsIDB4OWJkYzA2YTdVTCwKKyAgICAweGMxOWJmMTc0VUwsIDB4ZTQ5YjY5YzFVTCwgMHhlZmJlNDc4NlVMLCAweDBmYzE5ZGM2VUwsIDB4MjQwY2ExY2NVTCwKKyAgICAweDJkZTkyYzZmVUwsIDB4NGE3NDg0YWFVTCwgMHg1Y2IwYTlkY1VMLCAweDc2Zjk4OGRhVUwsIDB4OTgzZTUxNTJVTCwKKyAgICAweGE4MzFjNjZkVUwsIDB4YjAwMzI3YzhVTCwgMHhiZjU5N2ZjN1VMLCAweGM2ZTAwYmYzVUwsIDB4ZDVhNzkxNDdVTCwKKyAgICAweDA2Y2E2MzUxVUwsIDB4MTQyOTI5NjdVTCwgMHgyN2I3MGE4NVVMLCAweDJlMWIyMTM4VUwsIDB4NGQyYzZkZmNVTCwKKyAgICAweDUzMzgwZDEzVUwsIDB4NjUwYTczNTRVTCwgMHg3NjZhMGFiYlVMLCAweDgxYzJjOTJlVUwsIDB4OTI3MjJjODVVTCwKKyAgICAweGEyYmZlOGExVUwsIDB4YTgxYTY2NGJVTCwgMHhjMjRiOGI3MFVMLCAweGM3NmM1MWEzVUwsIDB4ZDE5MmU4MTlVTCwKKyAgICAweGQ2OTkwNjI0VUwsIDB4ZjQwZTM1ODVVTCwgMHgxMDZhYTA3MFVMLCAweDE5YTRjMTE2VUwsIDB4MWUzNzZjMDhVTCwKKyAgICAweDI3NDg3NzRjVUwsIDB4MzRiMGJjYjVVTCwgMHgzOTFjMGNiM1VMLCAweDRlZDhhYTRhVUwsIDB4NWI5Y2NhNGZVTCwKKyAgICAweDY4MmU2ZmYzVUwsIDB4NzQ4ZjgyZWVVTCwgMHg3OGE1NjM2ZlVMLCAweDg0Yzg3ODE0VUwsIDB4OGNjNzAyMDhVTCwKKyAgICAweDkwYmVmZmZhVUwsIDB4YTQ1MDZjZWJVTCwgMHhiZWY5YTNmN1VMLCAweGM2NzE3OGYyVUwKK307CisjZW5kaWYKKworLyogVmFyaW91cyBsb2dpY2FsIGZ1bmN0aW9ucyAqLworI2RlZmluZSBDaCh4LHkseikgICAgICAgKHogXiAoeCAmICh5IF4geikpKQorI2RlZmluZSBNYWooeCx5LHopICAgICAgKCgoeCB8IHkpICYgeikgfCAoeCAmIHkpKSAKKyNkZWZpbmUgUyh4LCBuKSAgICAgICAgIFJPUmMoKHgpLChuKSkKKyNkZWZpbmUgUih4LCBuKSAgICAgICAgICgoKHgpJjB4RkZGRkZGRkZVTCk+PihuKSkKKyNkZWZpbmUgU2lnbWEwKHgpICAgICAgIChTKHgsIDIpIF4gUyh4LCAxMykgXiBTKHgsIDIyKSkKKyNkZWZpbmUgU2lnbWExKHgpICAgICAgIChTKHgsIDYpIF4gUyh4LCAxMSkgXiBTKHgsIDI1KSkKKyNkZWZpbmUgR2FtbWEwKHgpICAgICAgIChTKHgsIDcpIF4gUyh4LCAxOCkgXiBSKHgsIDMpKQorI2RlZmluZSBHYW1tYTEoeCkgICAgICAgKFMoeCwgMTcpIF4gUyh4LCAxOSkgXiBSKHgsIDEwKSkKKworLyogY29tcHJlc3MgNTEyLWJpdHMgKi8KKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyBpbnQgX3NoYTI1Nl9jb21wcmVzcyhoYXNoX3N0YXRlICogbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKKyNlbHNlCitzdGF0aWMgaW50ICBzaGEyNTZfY29tcHJlc3MoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpidWYpCisjZW5kaWYKK3sKKyAgICB1bG9uZzMyIFNbOF0sIFdbNjRdLCB0MCwgdDE7CisjaWZkZWYgTFRDX1NNQUxMX0NPREUKKyAgICB1bG9uZzMyIHQ7CisjZW5kaWYKKyAgICBpbnQgaTsKKworICAgIC8qIGNvcHkgc3RhdGUgaW50byBTICovCisgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICBTW2ldID0gbWQtPnNoYTI1Ni5zdGF0ZVtpXTsKKyAgICB9CisKKyAgICAvKiBjb3B5IHRoZSBzdGF0ZSBpbnRvIDUxMi1iaXRzIGludG8gV1swLi4xNV0gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgICAgICBMT0FEMzJIKFdbaV0sIGJ1ZiArICg0KmkpKTsKKyAgICB9CisKKyAgICAvKiBmaWxsIFdbMTYuLjYzXSAqLworICAgIGZvciAoaSA9IDE2OyBpIDwgNjQ7IGkrKykgeworICAgICAgICBXW2ldID0gR2FtbWExKFdbaSAtIDJdKSArIFdbaSAtIDddICsgR2FtbWEwKFdbaSAtIDE1XSkgKyBXW2kgLSAxNl07CisgICAgfSAgICAgICAgCisKKyAgICAvKiBDb21wcmVzcyAqLworI2lmZGVmIExUQ19TTUFMTF9DT0RFICAgCisjZGVmaW5lIFJORChhLGIsYyxkLGUsZixnLGgsaSkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB0MCA9IGggKyBTaWdtYTEoZSkgKyBDaChlLCBmLCBnKSArIEtbaV0gKyBXW2ldOyAgIFwKKyAgICAgdDEgPSBTaWdtYTAoYSkgKyBNYWooYSwgYiwgYyk7ICAgICAgICAgICAgICAgICAgICBcCisgICAgIGQgKz0gdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICBoICA9IHQwICsgdDE7CisKKyAgICAgZm9yIChpID0gMDsgaSA8IDY0OyArK2kpIHsKKyAgICAgICAgIFJORChTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10saSk7CisgICAgICAgICB0ID0gU1s3XTsgU1s3XSA9IFNbNl07IFNbNl0gPSBTWzVdOyBTWzVdID0gU1s0XTsgCisgICAgICAgICBTWzRdID0gU1szXTsgU1szXSA9IFNbMl07IFNbMl0gPSBTWzFdOyBTWzFdID0gU1swXTsgU1swXSA9IHQ7CisgICAgIH0gIAorI2Vsc2UgCisjZGVmaW5lIFJORChhLGIsYyxkLGUsZixnLGgsaSxraSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgdDAgPSBoICsgU2lnbWExKGUpICsgQ2goZSwgZiwgZykgKyBraSArIFdbaV07ICAgXAorICAgICB0MSA9IFNpZ21hMChhKSArIE1haihhLCBiLCBjKTsgICAgICAgICAgICAgICAgICBcCisgICAgIGQgKz0gdDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgaCAgPSB0MCArIHQxOworCisgICAgUk5EKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSwwLDB4NDI4YTJmOTgpOworICAgIFJORChTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sMSwweDcxMzc0NDkxKTsKKyAgICBSTkQoU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLDIsMHhiNWMwZmJjZik7CisgICAgUk5EKFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSwzLDB4ZTliNWRiYTUpOworICAgIFJORChTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sNCwweDM5NTZjMjViKTsKKyAgICBSTkQoU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLDUsMHg1OWYxMTFmMSk7CisgICAgUk5EKFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSw2LDB4OTIzZjgyYTQpOworICAgIFJORChTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sNywweGFiMWM1ZWQ1KTsKKyAgICBSTkQoU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLDgsMHhkODA3YWE5OCk7CisgICAgUk5EKFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSw5LDB4MTI4MzViMDEpOworICAgIFJORChTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sMTAsMHgyNDMxODViZSk7CisgICAgUk5EKFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSwxMSwweDU1MGM3ZGMzKTsKKyAgICBSTkQoU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLDEyLDB4NzJiZTVkNzQpOworICAgIFJORChTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sMTMsMHg4MGRlYjFmZSk7CisgICAgUk5EKFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSwxNCwweDliZGMwNmE3KTsKKyAgICBSTkQoU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLDE1LDB4YzE5YmYxNzQpOworICAgIFJORChTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sMTYsMHhlNDliNjljMSk7CisgICAgUk5EKFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSwxNywweGVmYmU0Nzg2KTsKKyAgICBSTkQoU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLDE4LDB4MGZjMTlkYzYpOworICAgIFJORChTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sMTksMHgyNDBjYTFjYyk7CisgICAgUk5EKFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSwyMCwweDJkZTkyYzZmKTsKKyAgICBSTkQoU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLDIxLDB4NGE3NDg0YWEpOworICAgIFJORChTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sMjIsMHg1Y2IwYTlkYyk7CisgICAgUk5EKFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSwyMywweDc2Zjk4OGRhKTsKKyAgICBSTkQoU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLDI0LDB4OTgzZTUxNTIpOworICAgIFJORChTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sMjUsMHhhODMxYzY2ZCk7CisgICAgUk5EKFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSwyNiwweGIwMDMyN2M4KTsKKyAgICBSTkQoU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLDI3LDB4YmY1OTdmYzcpOworICAgIFJORChTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sMjgsMHhjNmUwMGJmMyk7CisgICAgUk5EKFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSwyOSwweGQ1YTc5MTQ3KTsKKyAgICBSTkQoU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLDMwLDB4MDZjYTYzNTEpOworICAgIFJORChTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sMzEsMHgxNDI5Mjk2Nyk7CisgICAgUk5EKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSwzMiwweDI3YjcwYTg1KTsKKyAgICBSTkQoU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLDMzLDB4MmUxYjIxMzgpOworICAgIFJORChTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sMzQsMHg0ZDJjNmRmYyk7CisgICAgUk5EKFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSwzNSwweDUzMzgwZDEzKTsKKyAgICBSTkQoU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLDM2LDB4NjUwYTczNTQpOworICAgIFJORChTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sMzcsMHg3NjZhMGFiYik7CisgICAgUk5EKFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSwzOCwweDgxYzJjOTJlKTsKKyAgICBSTkQoU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLDM5LDB4OTI3MjJjODUpOworICAgIFJORChTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sNDAsMHhhMmJmZThhMSk7CisgICAgUk5EKFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSw0MSwweGE4MWE2NjRiKTsKKyAgICBSTkQoU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLDQyLDB4YzI0YjhiNzApOworICAgIFJORChTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sNDMsMHhjNzZjNTFhMyk7CisgICAgUk5EKFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSw0NCwweGQxOTJlODE5KTsKKyAgICBSTkQoU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLDQ1LDB4ZDY5OTA2MjQpOworICAgIFJORChTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sNDYsMHhmNDBlMzU4NSk7CisgICAgUk5EKFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSw0NywweDEwNmFhMDcwKTsKKyAgICBSTkQoU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLDQ4LDB4MTlhNGMxMTYpOworICAgIFJORChTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sNDksMHgxZTM3NmMwOCk7CisgICAgUk5EKFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSw1MCwweDI3NDg3NzRjKTsKKyAgICBSTkQoU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLDUxLDB4MzRiMGJjYjUpOworICAgIFJORChTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sNTIsMHgzOTFjMGNiMyk7CisgICAgUk5EKFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSw1MywweDRlZDhhYTRhKTsKKyAgICBSTkQoU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLDU0LDB4NWI5Y2NhNGYpOworICAgIFJORChTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sNTUsMHg2ODJlNmZmMyk7CisgICAgUk5EKFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSw1NiwweDc0OGY4MmVlKTsKKyAgICBSTkQoU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLDU3LDB4NzhhNTYzNmYpOworICAgIFJORChTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sNTgsMHg4NGM4NzgxNCk7CisgICAgUk5EKFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSw1OSwweDhjYzcwMjA4KTsKKyAgICBSTkQoU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLDYwLDB4OTBiZWZmZmEpOworICAgIFJORChTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sNjEsMHhhNDUwNmNlYik7CisgICAgUk5EKFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSw2MiwweGJlZjlhM2Y3KTsKKyAgICBSTkQoU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLDYzLDB4YzY3MTc4ZjIpOworCisjdW5kZWYgUk5EICAgICAKKyAgICAKKyNlbmRpZiAgICAgCisKKyAgICAvKiBmZWVkYmFjayAqLworICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgbWQtPnNoYTI1Ni5zdGF0ZVtpXSA9IG1kLT5zaGEyNTYuc3RhdGVbaV0gKyBTW2ldOworICAgIH0KKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKK3N0YXRpYyBpbnQgc2hhMjU2X2NvbXByZXNzKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqYnVmKQoreworICAgIGludCBlcnI7CisgICAgZXJyID0gX3NoYTI1Nl9jb21wcmVzcyhtZCwgYnVmKTsKKyAgICBidXJuX3N0YWNrKHNpemVvZih1bG9uZzMyKSAqIDc0KTsKKyAgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qKgorICAgSW5pdGlhbGl6ZSB0aGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIG1kICAgVGhlIGhhc2ggc3RhdGUgeW91IHdpc2ggdG8gaW5pdGlhbGl6ZQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHNoYTI1Nl9pbml0KGhhc2hfc3RhdGUgKiBtZCkKK3sKKyAgICBMVENfQVJHQ0hLKG1kICE9IE5VTEwpOworCisgICAgbWQtPnNoYTI1Ni5jdXJsZW4gPSAwOworICAgIG1kLT5zaGEyNTYubGVuZ3RoID0gMDsKKyAgICBtZC0+c2hhMjU2LnN0YXRlWzBdID0gMHg2QTA5RTY2N1VMOworICAgIG1kLT5zaGEyNTYuc3RhdGVbMV0gPSAweEJCNjdBRTg1VUw7CisgICAgbWQtPnNoYTI1Ni5zdGF0ZVsyXSA9IDB4M0M2RUYzNzJVTDsKKyAgICBtZC0+c2hhMjU2LnN0YXRlWzNdID0gMHhBNTRGRjUzQVVMOworICAgIG1kLT5zaGEyNTYuc3RhdGVbNF0gPSAweDUxMEU1MjdGVUw7CisgICAgbWQtPnNoYTI1Ni5zdGF0ZVs1XSA9IDB4OUIwNTY4OENVTDsKKyAgICBtZC0+c2hhMjU2LnN0YXRlWzZdID0gMHgxRjgzRDlBQlVMOworICAgIG1kLT5zaGEyNTYuc3RhdGVbN10gPSAweDVCRTBDRDE5VUw7CisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgIFByb2Nlc3MgYSBibG9jayBvZiBtZW1vcnkgdGhvdWdoIHRoZSBoYXNoCisgICBAcGFyYW0gbWQgICAgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gaW4gICAgIFRoZSBkYXRhIHRvIGhhc2gKKyAgIEBwYXJhbSBpbmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAob2N0ZXRzKQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworSEFTSF9QUk9DRVNTKHNoYTI1Nl9wcm9jZXNzLCBzaGEyNTZfY29tcHJlc3MsIHNoYTI1NiwgNjQpCisKKy8qKgorICAgVGVybWluYXRlIHRoZSBoYXNoIHRvIGdldCB0aGUgZGlnZXN0CisgICBAcGFyYW0gbWQgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gb3V0IFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgaGFzaCAoMzIgYnl0ZXMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgc2hhMjU2X2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpvdXQpCit7CisgICAgaW50IGk7CisKKyAgICBMVENfQVJHQ0hLKG1kICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dCAhPSBOVUxMKTsKKworICAgIGlmIChtZC0+c2hhMjU2LmN1cmxlbiA+PSBzaXplb2YobWQtPnNoYTI1Ni5idWYpKSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgIH0KKworCisgICAgLyogaW5jcmVhc2UgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSAqLworICAgIG1kLT5zaGEyNTYubGVuZ3RoICs9IG1kLT5zaGEyNTYuY3VybGVuICogODsKKworICAgIC8qIGFwcGVuZCB0aGUgJzEnIGJpdCAqLworICAgIG1kLT5zaGEyNTYuYnVmW21kLT5zaGEyNTYuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMHg4MDsKKworICAgIC8qIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IGFib3ZlIDU2IGJ5dGVzIHdlIGFwcGVuZCB6ZXJvcworICAgICAqIHRoZW4gY29tcHJlc3MuICBUaGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gcGFkZGluZyB6ZXJvcyBhbmQgbGVuZ3RoCisgICAgICogZW5jb2RpbmcgbGlrZSBub3JtYWwuCisgICAgICovCisgICAgaWYgKG1kLT5zaGEyNTYuY3VybGVuID4gNTYpIHsKKyAgICAgICAgd2hpbGUgKG1kLT5zaGEyNTYuY3VybGVuIDwgNjQpIHsKKyAgICAgICAgICAgIG1kLT5zaGEyNTYuYnVmW21kLT5zaGEyNTYuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMDsKKyAgICAgICAgfQorICAgICAgICBzaGEyNTZfY29tcHJlc3MobWQsIG1kLT5zaGEyNTYuYnVmKTsKKyAgICAgICAgbWQtPnNoYTI1Ni5jdXJsZW4gPSAwOworICAgIH0KKworICAgIC8qIHBhZCB1cHRvIDU2IGJ5dGVzIG9mIHplcm9lcyAqLworICAgIHdoaWxlIChtZC0+c2hhMjU2LmN1cmxlbiA8IDU2KSB7CisgICAgICAgIG1kLT5zaGEyNTYuYnVmW21kLT5zaGEyNTYuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMDsKKyAgICB9CisKKyAgICAvKiBzdG9yZSBsZW5ndGggKi8KKyAgICBTVE9SRTY0SChtZC0+c2hhMjU2Lmxlbmd0aCwgbWQtPnNoYTI1Ni5idWYrNTYpOworICAgIHNoYTI1Nl9jb21wcmVzcyhtZCwgbWQtPnNoYTI1Ni5idWYpOworCisgICAgLyogY29weSBvdXRwdXQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgIFNUT1JFMzJIKG1kLT5zaGEyNTYuc3RhdGVbaV0sIG91dCsoNCppKSk7CisgICAgfQorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIHplcm9tZW0obWQsIHNpemVvZihoYXNoX3N0YXRlKSk7CisjZW5kaWYKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBTZWxmLXRlc3QgdGhlIGhhc2gKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQKKyovICAKK2ludCAgc2hhMjU2X3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZSAgICAKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICBjaGFyICptc2c7CisgICAgICB1bnNpZ25lZCBjaGFyIGhhc2hbMzJdOworICB9IHRlc3RzW10gPSB7CisgICAgeyAiYWJjIiwKKyAgICAgIHsgMHhiYSwgMHg3OCwgMHgxNiwgMHhiZiwgMHg4ZiwgMHgwMSwgMHhjZiwgMHhlYSwKKyAgICAgICAgMHg0MSwgMHg0MSwgMHg0MCwgMHhkZSwgMHg1ZCwgMHhhZSwgMHgyMiwgMHgyMywKKyAgICAgICAgMHhiMCwgMHgwMywgMHg2MSwgMHhhMywgMHg5NiwgMHgxNywgMHg3YSwgMHg5YywKKyAgICAgICAgMHhiNCwgMHgxMCwgMHhmZiwgMHg2MSwgMHhmMiwgMHgwMCwgMHgxNSwgMHhhZCB9CisgICAgfSwKKyAgICB7ICJhYmNkYmNkZWNkZWZkZWZnZWZnaGZnaGlnaGlqaGlqa2lqa2xqa2xta2xtbmxtbm9tbm9wbm9wcSIsCisgICAgICB7IDB4MjQsIDB4OGQsIDB4NmEsIDB4NjEsIDB4ZDIsIDB4MDYsIDB4MzgsIDB4YjgsIAorICAgICAgICAweGU1LCAweGMwLCAweDI2LCAweDkzLCAweDBjLCAweDNlLCAweDYwLCAweDM5LAorICAgICAgICAweGEzLCAweDNjLCAweGU0LCAweDU5LCAweDY0LCAweGZmLCAweDIxLCAweDY3LCAKKyAgICAgICAgMHhmNiwgMHhlYywgMHhlZCwgMHhkNCwgMHgxOSwgMHhkYiwgMHgwNiwgMHhjMSB9CisgICAgfSwKKyAgfTsKKworICBpbnQgaTsKKyAgdW5zaWduZWQgY2hhciB0bXBbMzJdOworICBoYXNoX3N0YXRlIG1kOworCisgIGZvciAoaSA9IDA7IGkgPCAoaW50KShzaXplb2YodGVzdHMpIC8gc2l6ZW9mKHRlc3RzWzBdKSk7IGkrKykgeworICAgICAgc2hhMjU2X2luaXQoJm1kKTsKKyAgICAgIHNoYTI1Nl9wcm9jZXNzKCZtZCwgKHVuc2lnbmVkIGNoYXIqKXRlc3RzW2ldLm1zZywgKHVuc2lnbmVkIGxvbmcpc3RybGVuKHRlc3RzW2ldLm1zZykpOworICAgICAgc2hhMjU2X2RvbmUoJm1kLCB0bXApOworICAgICAgaWYgKFhNRU1DTVAodG1wLCB0ZXN0c1tpXS5oYXNoLCAzMikgIT0gMCkgeworICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgIH0KKyAgfQorICByZXR1cm4gQ1JZUFRfT0s7CisgI2VuZGlmCit9CisKKyNpZmRlZiBTSEEyMjQKKyNpbmNsdWRlICJzaGEyMjQuYyIKKyNlbmRpZgorCisjZW5kaWYKKworCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMi9zaGEyNTYuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMi9zaGEzODQuYyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMi9zaGEzODQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzc3MDljCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9zaGEyL3NoYTM4NC5jCkBAIC0wLDAgKzEsMTM1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworLyoqIAorICAgQHBhcmFtIHNoYTM4NC5jCisgICBTSEEzODQgaGFzaCBpbmNsdWRlZCBpbiBzaGE1MTIuYywgVG9tIFN0IERlbmlzCisqLworCitjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciBzaGEzODRfZGVzYyA9Cit7CisgICAgInNoYTM4NCIsCisgICAgNCwKKyAgICA0OCwKKyAgICAxMjgsCisKKyAgICAvKiBPSUQgKi8KKyAgIHsgMiwgMTYsIDg0MCwgMSwgMTAxLCAzLCA0LCAyLCAyLCAgfSwKKyAgIDksCisKKyAgICAmc2hhMzg0X2luaXQsCisgICAgJnNoYTUxMl9wcm9jZXNzLAorICAgICZzaGEzODRfZG9uZSwKKyAgICAmc2hhMzg0X3Rlc3QsCisgICAgTlVMTAorfTsKKworLyoqCisgICBJbml0aWFsaXplIHRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gbWQgICBUaGUgaGFzaCBzdGF0ZSB5b3Ugd2lzaCB0byBpbml0aWFsaXplCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgc2hhMzg0X2luaXQoaGFzaF9zdGF0ZSAqIG1kKQoreworICAgIExUQ19BUkdDSEsobWQgIT0gTlVMTCk7CisKKyAgICBtZC0+c2hhNTEyLmN1cmxlbiA9IDA7CisgICAgbWQtPnNoYTUxMi5sZW5ndGggPSAwOworICAgIG1kLT5zaGE1MTIuc3RhdGVbMF0gPSBDT05TVDY0KDB4Y2JiYjlkNWRjMTA1OWVkOCk7CisgICAgbWQtPnNoYTUxMi5zdGF0ZVsxXSA9IENPTlNUNjQoMHg2MjlhMjkyYTM2N2NkNTA3KTsKKyAgICBtZC0+c2hhNTEyLnN0YXRlWzJdID0gQ09OU1Q2NCgweDkxNTkwMTVhMzA3MGRkMTcpOworICAgIG1kLT5zaGE1MTIuc3RhdGVbM10gPSBDT05TVDY0KDB4MTUyZmVjZDhmNzBlNTkzOSk7CisgICAgbWQtPnNoYTUxMi5zdGF0ZVs0XSA9IENPTlNUNjQoMHg2NzMzMjY2N2ZmYzAwYjMxKTsKKyAgICBtZC0+c2hhNTEyLnN0YXRlWzVdID0gQ09OU1Q2NCgweDhlYjQ0YTg3Njg1ODE1MTEpOworICAgIG1kLT5zaGE1MTIuc3RhdGVbNl0gPSBDT05TVDY0KDB4ZGIwYzJlMGQ2NGY5OGZhNyk7CisgICAgbWQtPnNoYTUxMi5zdGF0ZVs3XSA9IENPTlNUNjQoMHg0N2I1NDgxZGJlZmE0ZmE0KTsKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICAgVGVybWluYXRlIHRoZSBoYXNoIHRvIGdldCB0aGUgZGlnZXN0CisgICBAcGFyYW0gbWQgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gb3V0IFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgaGFzaCAoNDggYnl0ZXMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgc2hhMzg0X2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpvdXQpCit7CisgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisKKyAgIExUQ19BUkdDSEsobWQgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgIT0gTlVMTCk7CisKKyAgICBpZiAobWQtPnNoYTUxMi5jdXJsZW4gPj0gc2l6ZW9mKG1kLT5zaGE1MTIuYnVmKSkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgICB9CisKKyAgIHNoYTUxMl9kb25lKG1kLCBidWYpOworICAgWE1FTUNQWShvdXQsIGJ1ZiwgNDgpOworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShidWYsIHNpemVvZihidWYpKTsKKyNlbmRpZgorICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgU2VsZi10ZXN0IHRoZSBoYXNoCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgQ1JZUFRfTk9QIGlmIHNlbGYtdGVzdHMgaGF2ZSBiZWVuIGRpc2FibGVkCisqLyAgCitpbnQgIHNoYTM4NF90ZXN0KHZvaWQpCit7CisgI2lmbmRlZiBMVENfVEVTVAorICAgIHJldHVybiBDUllQVF9OT1A7CisgI2Vsc2UgICAgCisgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICAgY2hhciAqbXNnOworICAgICAgdW5zaWduZWQgY2hhciBoYXNoWzQ4XTsKKyAgfSB0ZXN0c1tdID0geworICAgIHsgImFiYyIsCisgICAgICB7IDB4Y2IsIDB4MDAsIDB4NzUsIDB4M2YsIDB4NDUsIDB4YTMsIDB4NWUsIDB4OGIsCisgICAgICAgIDB4YjUsIDB4YTAsIDB4M2QsIDB4NjksIDB4OWEsIDB4YzYsIDB4NTAsIDB4MDcsCisgICAgICAgIDB4MjcsIDB4MmMsIDB4MzIsIDB4YWIsIDB4MGUsIDB4ZGUsIDB4ZDEsIDB4NjMsCisgICAgICAgIDB4MWEsIDB4OGIsIDB4NjAsIDB4NWEsIDB4NDMsIDB4ZmYsIDB4NWIsIDB4ZWQsCisgICAgICAgIDB4ODAsIDB4ODYsIDB4MDcsIDB4MmIsIDB4YTEsIDB4ZTcsIDB4Y2MsIDB4MjMsCisgICAgICAgIDB4NTgsIDB4YmEsIDB4ZWMsIDB4YTEsIDB4MzQsIDB4YzgsIDB4MjUsIDB4YTcgfQorICAgIH0sCisgICAgeyAiYWJjZGVmZ2hiY2RlZmdoaWNkZWZnaGlqZGVmZ2hpamtlZmdoaWprbGZnaGlqa2xtZ2hpamtsbW5oaWprbG1ub2lqa2xtbm9wamtsbW5vcHFrbG1ub3Bxcmxtbm9wcXJzbW5vcHFyc3Rub3BxcnN0dSIsCisgICAgICB7IDB4MDksIDB4MzMsIDB4MGMsIDB4MzMsIDB4ZjcsIDB4MTEsIDB4NDcsIDB4ZTgsCisgICAgICAgIDB4M2QsIDB4MTksIDB4MmYsIDB4YzcsIDB4ODIsIDB4Y2QsIDB4MWIsIDB4NDcsCisgICAgICAgIDB4NTMsIDB4MTEsIDB4MWIsIDB4MTcsIDB4M2IsIDB4M2IsIDB4MDUsIDB4ZDIsCisgICAgICAgIDB4MmYsIDB4YTAsIDB4ODAsIDB4ODYsIDB4ZTMsIDB4YjAsIDB4ZjcsIDB4MTIsCisgICAgICAgIDB4ZmMsIDB4YzcsIDB4YzcsIDB4MWEsIDB4NTUsIDB4N2UsIDB4MmQsIDB4YjksCisgICAgICAgIDB4NjYsIDB4YzMsIDB4ZTksIDB4ZmEsIDB4OTEsIDB4NzQsIDB4NjAsIDB4MzkgfQorICAgIH0sCisgIH07CisKKyAgaW50IGk7CisgIHVuc2lnbmVkIGNoYXIgdG1wWzQ4XTsKKyAgaGFzaF9zdGF0ZSBtZDsKKworICBmb3IgKGkgPSAwOyBpIDwgKGludCkoc2l6ZW9mKHRlc3RzKSAvIHNpemVvZih0ZXN0c1swXSkpOyBpKyspIHsKKyAgICAgIHNoYTM4NF9pbml0KCZtZCk7CisgICAgICBzaGEzODRfcHJvY2VzcygmbWQsICh1bnNpZ25lZCBjaGFyKil0ZXN0c1tpXS5tc2csICh1bnNpZ25lZCBsb25nKXN0cmxlbih0ZXN0c1tpXS5tc2cpKTsKKyAgICAgIHNoYTM4NF9kb25lKCZtZCwgdG1wKTsKKyAgICAgIGlmIChYTUVNQ01QKHRtcCwgdGVzdHNbaV0uaGFzaCwgNDgpICE9IDApIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICB9CisgIH0KKyAgcmV0dXJuIENSWVBUX09LOworICNlbmRpZgorfQorCisKKworCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9zaGEyL3NoYTM4NC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6Mjg6MTcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5jIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy9zaGEyL3NoYTUxMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Yzk1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3NoYTIvc2hhNTEyLmMKQEAgLTAsMCArMSwzMTkgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAcGFyYW0gc2hhNTEyLmMKKyAgIFNIQTUxMiBieSBUb20gU3QgRGVuaXMgCisqLworCisjaWZkZWYgU0hBNTEyCisKK2NvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIHNoYTUxMl9kZXNjID0KK3sKKyAgICAic2hhNTEyIiwKKyAgICA1LAorICAgIDY0LAorICAgIDEyOCwKKworICAgIC8qIE9JRCAqLworICAgeyAyLCAxNiwgODQwLCAxLCAxMDEsIDMsIDQsIDIsIDMsICB9LAorICAgOSwKKworICAgICZzaGE1MTJfaW5pdCwKKyAgICAmc2hhNTEyX3Byb2Nlc3MsCisgICAgJnNoYTUxMl9kb25lLAorICAgICZzaGE1MTJfdGVzdCwKKyAgICBOVUxMCit9OworCisvKiB0aGUgSyBhcnJheSAqLworc3RhdGljIGNvbnN0IHVsb25nNjQgS1s4MF0gPSB7CitDT05TVDY0KDB4NDI4YTJmOThkNzI4YWUyMiksIENPTlNUNjQoMHg3MTM3NDQ5MTIzZWY2NWNkKSwgCitDT05TVDY0KDB4YjVjMGZiY2ZlYzRkM2IyZiksIENPTlNUNjQoMHhlOWI1ZGJhNTgxODlkYmJjKSwKK0NPTlNUNjQoMHgzOTU2YzI1YmYzNDhiNTM4KSwgQ09OU1Q2NCgweDU5ZjExMWYxYjYwNWQwMTkpLCAKK0NPTlNUNjQoMHg5MjNmODJhNGFmMTk0ZjliKSwgQ09OU1Q2NCgweGFiMWM1ZWQ1ZGE2ZDgxMTgpLAorQ09OU1Q2NCgweGQ4MDdhYTk4YTMwMzAyNDIpLCBDT05TVDY0KDB4MTI4MzViMDE0NTcwNmZiZSksIAorQ09OU1Q2NCgweDI0MzE4NWJlNGVlNGIyOGMpLCBDT05TVDY0KDB4NTUwYzdkYzNkNWZmYjRlMiksCitDT05TVDY0KDB4NzJiZTVkNzRmMjdiODk2ZiksIENPTlNUNjQoMHg4MGRlYjFmZTNiMTY5NmIxKSwgCitDT05TVDY0KDB4OWJkYzA2YTcyNWM3MTIzNSksIENPTlNUNjQoMHhjMTliZjE3NGNmNjkyNjk0KSwKK0NPTlNUNjQoMHhlNDliNjljMTllZjE0YWQyKSwgQ09OU1Q2NCgweGVmYmU0Nzg2Mzg0ZjI1ZTMpLCAKK0NPTlNUNjQoMHgwZmMxOWRjNjhiOGNkNWI1KSwgQ09OU1Q2NCgweDI0MGNhMWNjNzdhYzljNjUpLAorQ09OU1Q2NCgweDJkZTkyYzZmNTkyYjAyNzUpLCBDT05TVDY0KDB4NGE3NDg0YWE2ZWE2ZTQ4MyksIAorQ09OU1Q2NCgweDVjYjBhOWRjYmQ0MWZiZDQpLCBDT05TVDY0KDB4NzZmOTg4ZGE4MzExNTNiNSksCitDT05TVDY0KDB4OTgzZTUxNTJlZTY2ZGZhYiksIENPTlNUNjQoMHhhODMxYzY2ZDJkYjQzMjEwKSwgCitDT05TVDY0KDB4YjAwMzI3Yzg5OGZiMjEzZiksIENPTlNUNjQoMHhiZjU5N2ZjN2JlZWYwZWU0KSwKK0NPTlNUNjQoMHhjNmUwMGJmMzNkYTg4ZmMyKSwgQ09OU1Q2NCgweGQ1YTc5MTQ3OTMwYWE3MjUpLCAKK0NPTlNUNjQoMHgwNmNhNjM1MWUwMDM4MjZmKSwgQ09OU1Q2NCgweDE0MjkyOTY3MGEwZTZlNzApLAorQ09OU1Q2NCgweDI3YjcwYTg1NDZkMjJmZmMpLCBDT05TVDY0KDB4MmUxYjIxMzg1YzI2YzkyNiksIAorQ09OU1Q2NCgweDRkMmM2ZGZjNWFjNDJhZWQpLCBDT05TVDY0KDB4NTMzODBkMTM5ZDk1YjNkZiksCitDT05TVDY0KDB4NjUwYTczNTQ4YmFmNjNkZSksIENPTlNUNjQoMHg3NjZhMGFiYjNjNzdiMmE4KSwgCitDT05TVDY0KDB4ODFjMmM5MmU0N2VkYWVlNiksIENPTlNUNjQoMHg5MjcyMmM4NTE0ODIzNTNiKSwKK0NPTlNUNjQoMHhhMmJmZThhMTRjZjEwMzY0KSwgQ09OU1Q2NCgweGE4MWE2NjRiYmM0MjMwMDEpLAorQ09OU1Q2NCgweGMyNGI4YjcwZDBmODk3OTEpLCBDT05TVDY0KDB4Yzc2YzUxYTMwNjU0YmUzMCksCitDT05TVDY0KDB4ZDE5MmU4MTlkNmVmNTIxOCksIENPTlNUNjQoMHhkNjk5MDYyNDU1NjVhOTEwKSwgCitDT05TVDY0KDB4ZjQwZTM1ODU1NzcxMjAyYSksIENPTlNUNjQoMHgxMDZhYTA3MDMyYmJkMWI4KSwKK0NPTlNUNjQoMHgxOWE0YzExNmI4ZDJkMGM4KSwgQ09OU1Q2NCgweDFlMzc2YzA4NTE0MWFiNTMpLCAKK0NPTlNUNjQoMHgyNzQ4Nzc0Y2RmOGVlYjk5KSwgQ09OU1Q2NCgweDM0YjBiY2I1ZTE5YjQ4YTgpLAorQ09OU1Q2NCgweDM5MWMwY2IzYzVjOTVhNjMpLCBDT05TVDY0KDB4NGVkOGFhNGFlMzQxOGFjYiksIAorQ09OU1Q2NCgweDViOWNjYTRmNzc2M2UzNzMpLCBDT05TVDY0KDB4NjgyZTZmZjNkNmIyYjhhMyksCitDT05TVDY0KDB4NzQ4ZjgyZWU1ZGVmYjJmYyksIENPTlNUNjQoMHg3OGE1NjM2ZjQzMTcyZjYwKSwgCitDT05TVDY0KDB4ODRjODc4MTRhMWYwYWI3MiksIENPTlNUNjQoMHg4Y2M3MDIwODFhNjQzOWVjKSwKK0NPTlNUNjQoMHg5MGJlZmZmYTIzNjMxZTI4KSwgQ09OU1Q2NCgweGE0NTA2Y2ViZGU4MmJkZTkpLCAKK0NPTlNUNjQoMHhiZWY5YTNmN2IyYzY3OTE1KSwgQ09OU1Q2NCgweGM2NzE3OGYyZTM3MjUzMmIpLAorQ09OU1Q2NCgweGNhMjczZWNlZWEyNjYxOWMpLCBDT05TVDY0KDB4ZDE4NmI4YzcyMWMwYzIwNyksIAorQ09OU1Q2NCgweGVhZGE3ZGQ2Y2RlMGViMWUpLCBDT05TVDY0KDB4ZjU3ZDRmN2ZlZTZlZDE3OCksCitDT05TVDY0KDB4MDZmMDY3YWE3MjE3NmZiYSksIENPTlNUNjQoMHgwYTYzN2RjNWEyYzg5OGE2KSwgCitDT05TVDY0KDB4MTEzZjk4MDRiZWY5MGRhZSksIENPTlNUNjQoMHgxYjcxMGIzNTEzMWM0NzFiKSwKK0NPTlNUNjQoMHgyOGRiNzdmNTIzMDQ3ZDg0KSwgQ09OU1Q2NCgweDMyY2FhYjdiNDBjNzI0OTMpLCAKK0NPTlNUNjQoMHgzYzllYmUwYTE1YzliZWJjKSwgQ09OU1Q2NCgweDQzMWQ2N2M0OWMxMDBkNGMpLAorQ09OU1Q2NCgweDRjYzVkNGJlY2IzZTQyYjYpLCBDT05TVDY0KDB4NTk3ZjI5OWNmYzY1N2UyYSksIAorQ09OU1Q2NCgweDVmY2I2ZmFiM2FkNmZhZWMpLCBDT05TVDY0KDB4NmM0NDE5OGM0YTQ3NTgxNykKK307CisKKy8qIFZhcmlvdXMgbG9naWNhbCBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgQ2goeCx5LHopICAgICAgICh6IF4gKHggJiAoeSBeIHopKSkKKyNkZWZpbmUgTWFqKHgseSx6KSAgICAgICgoKHggfCB5KSAmIHopIHwgKHggJiB5KSkgCisjZGVmaW5lIFMoeCwgbikgICAgICAgICBST1I2NGMoeCwgbikKKyNkZWZpbmUgUih4LCBuKSAgICAgICAgICgoKHgpJkNPTlNUNjQoMHhGRkZGRkZGRkZGRkZGRkZGKSk+PigodWxvbmc2NCluKSkKKyNkZWZpbmUgU2lnbWEwKHgpICAgICAgIChTKHgsIDI4KSBeIFMoeCwgMzQpIF4gUyh4LCAzOSkpCisjZGVmaW5lIFNpZ21hMSh4KSAgICAgICAoUyh4LCAxNCkgXiBTKHgsIDE4KSBeIFMoeCwgNDEpKQorI2RlZmluZSBHYW1tYTAoeCkgICAgICAgKFMoeCwgMSkgXiBTKHgsIDgpIF4gUih4LCA3KSkKKyNkZWZpbmUgR2FtbWExKHgpICAgICAgIChTKHgsIDE5KSBeIFMoeCwgNjEpIF4gUih4LCA2KSkKKworLyogY29tcHJlc3MgMTAyNC1iaXRzICovCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IF9zaGE1MTJfY29tcHJlc3MoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpidWYpCisjZWxzZQorc3RhdGljIGludCAgc2hhNTEyX2NvbXByZXNzKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqYnVmKQorI2VuZGlmCit7CisgICAgdWxvbmc2NCBTWzhdLCBXWzgwXSwgdDAsIHQxOworICAgIGludCBpOworCisgICAgLyogY29weSBzdGF0ZSBpbnRvIFMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgIFNbaV0gPSBtZC0+c2hhNTEyLnN0YXRlW2ldOworICAgIH0KKworICAgIC8qIGNvcHkgdGhlIHN0YXRlIGludG8gMTAyNC1iaXRzIGludG8gV1swLi4xNV0gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgICAgICBMT0FENjRIKFdbaV0sIGJ1ZiArICg4KmkpKTsKKyAgICB9CisKKyAgICAvKiBmaWxsIFdbMTYuLjc5XSAqLworICAgIGZvciAoaSA9IDE2OyBpIDwgODA7IGkrKykgeworICAgICAgICBXW2ldID0gR2FtbWExKFdbaSAtIDJdKSArIFdbaSAtIDddICsgR2FtbWEwKFdbaSAtIDE1XSkgKyBXW2kgLSAxNl07CisgICAgfSAgICAgICAgCisKKyAgICAvKiBDb21wcmVzcyAqLworI2lmZGVmIExUQ19TTUFMTF9DT0RFCisgICAgZm9yIChpID0gMDsgaSA8IDgwOyBpKyspIHsKKyAgICAgICAgdDAgPSBTWzddICsgU2lnbWExKFNbNF0pICsgQ2goU1s0XSwgU1s1XSwgU1s2XSkgKyBLW2ldICsgV1tpXTsKKyAgICAgICAgdDEgPSBTaWdtYTAoU1swXSkgKyBNYWooU1swXSwgU1sxXSwgU1syXSk7CisgICAgICAgIFNbN10gPSBTWzZdOworICAgICAgICBTWzZdID0gU1s1XTsKKyAgICAgICAgU1s1XSA9IFNbNF07CisgICAgICAgIFNbNF0gPSBTWzNdICsgdDA7CisgICAgICAgIFNbM10gPSBTWzJdOworICAgICAgICBTWzJdID0gU1sxXTsKKyAgICAgICAgU1sxXSA9IFNbMF07CisgICAgICAgIFNbMF0gPSB0MCArIHQxOworICAgIH0KKyNlbHNlCisjZGVmaW5lIFJORChhLGIsYyxkLGUsZixnLGgsaSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgdDAgPSBoICsgU2lnbWExKGUpICsgQ2goZSwgZiwgZykgKyBLW2ldICsgV1tpXTsgICBcCisgICAgIHQxID0gU2lnbWEwKGEpICsgTWFqKGEsIGIsIGMpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgZCArPSB0MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICBoICA9IHQwICsgdDE7CisKKyAgICAgZm9yIChpID0gMDsgaSA8IDgwOyBpICs9IDgpIHsKKyAgICAgICAgIFJORChTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10saSswKTsKKyAgICAgICAgIFJORChTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0saSsxKTsKKyAgICAgICAgIFJORChTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0saSsyKTsKKyAgICAgICAgIFJORChTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0saSszKTsKKyAgICAgICAgIFJORChTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0sU1sxXSxTWzJdLFNbM10saSs0KTsKKyAgICAgICAgIFJORChTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN10sU1swXSxTWzFdLFNbMl0saSs1KTsKKyAgICAgICAgIFJORChTWzJdLFNbM10sU1s0XSxTWzVdLFNbNl0sU1s3XSxTWzBdLFNbMV0saSs2KTsKKyAgICAgICAgIFJORChTWzFdLFNbMl0sU1szXSxTWzRdLFNbNV0sU1s2XSxTWzddLFNbMF0saSs3KTsKKyAgICAgfQorI2VuZGlmICAgICAKKworCisgICAgLyogZmVlZGJhY2sgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgIG1kLT5zaGE1MTIuc3RhdGVbaV0gPSBtZC0+c2hhNTEyLnN0YXRlW2ldICsgU1tpXTsKKyAgICB9CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGNvbXByZXNzIDEwMjQtYml0cyAqLworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBzaGE1MTJfY29tcHJlc3MoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisgICAgaW50IGVycjsKKyAgICBlcnIgPSBfc2hhNTEyX2NvbXByZXNzKG1kLCBidWYpOworICAgIGJ1cm5fc3RhY2soc2l6ZW9mKHVsb25nNjQpICogOTAgKyBzaXplb2YoaW50KSk7CisgICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKioKKyAgIEluaXRpYWxpemUgdGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBtZCAgIFRoZSBoYXNoIHN0YXRlIHlvdSB3aXNoIHRvIGluaXRpYWxpemUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBzaGE1MTJfaW5pdChoYXNoX3N0YXRlICogbWQpCit7CisgICAgTFRDX0FSR0NISyhtZCAhPSBOVUxMKTsKKyAgICBtZC0+c2hhNTEyLmN1cmxlbiA9IDA7CisgICAgbWQtPnNoYTUxMi5sZW5ndGggPSAwOworICAgIG1kLT5zaGE1MTIuc3RhdGVbMF0gPSBDT05TVDY0KDB4NmEwOWU2NjdmM2JjYzkwOCk7CisgICAgbWQtPnNoYTUxMi5zdGF0ZVsxXSA9IENPTlNUNjQoMHhiYjY3YWU4NTg0Y2FhNzNiKTsKKyAgICBtZC0+c2hhNTEyLnN0YXRlWzJdID0gQ09OU1Q2NCgweDNjNmVmMzcyZmU5NGY4MmIpOworICAgIG1kLT5zaGE1MTIuc3RhdGVbM10gPSBDT05TVDY0KDB4YTU0ZmY1M2E1ZjFkMzZmMSk7CisgICAgbWQtPnNoYTUxMi5zdGF0ZVs0XSA9IENPTlNUNjQoMHg1MTBlNTI3ZmFkZTY4MmQxKTsKKyAgICBtZC0+c2hhNTEyLnN0YXRlWzVdID0gQ09OU1Q2NCgweDliMDU2ODhjMmIzZTZjMWYpOworICAgIG1kLT5zaGE1MTIuc3RhdGVbNl0gPSBDT05TVDY0KDB4MWY4M2Q5YWJmYjQxYmQ2Yik7CisgICAgbWQtPnNoYTUxMi5zdGF0ZVs3XSA9IENPTlNUNjQoMHg1YmUwY2QxOTEzN2UyMTc5KTsKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICAgUHJvY2VzcyBhIGJsb2NrIG9mIG1lbW9yeSB0aG91Z2ggdGhlIGhhc2gKKyAgIEBwYXJhbSBtZCAgICAgVGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBpbiAgICAgVGhlIGRhdGEgdG8gaGFzaAorICAgQHBhcmFtIGlubGVuICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIChvY3RldHMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitIQVNIX1BST0NFU1Moc2hhNTEyX3Byb2Nlc3MsIHNoYTUxMl9jb21wcmVzcywgc2hhNTEyLCAxMjgpCisKKy8qKgorICAgVGVybWluYXRlIHRoZSBoYXNoIHRvIGdldCB0aGUgZGlnZXN0CisgICBAcGFyYW0gbWQgIFRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gb3V0IFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgaGFzaCAoNjQgYnl0ZXMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgc2hhNTEyX2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpvdXQpCit7CisgICAgaW50IGk7CisKKyAgICBMVENfQVJHQ0hLKG1kICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dCAhPSBOVUxMKTsKKworICAgIGlmIChtZC0+c2hhNTEyLmN1cmxlbiA+PSBzaXplb2YobWQtPnNoYTUxMi5idWYpKSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgIH0KKworICAgIC8qIGluY3JlYXNlIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgKi8KKyAgICBtZC0+c2hhNTEyLmxlbmd0aCArPSBtZC0+c2hhNTEyLmN1cmxlbiAqIENPTlNUNjQoOCk7CisKKyAgICAvKiBhcHBlbmQgdGhlICcxJyBiaXQgKi8KKyAgICBtZC0+c2hhNTEyLmJ1ZlttZC0+c2hhNTEyLmN1cmxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKTB4ODA7CisKKyAgICAvKiBpZiB0aGUgbGVuZ3RoIGlzIGN1cnJlbnRseSBhYm92ZSAxMTIgYnl0ZXMgd2UgYXBwZW5kIHplcm9zCisgICAgICogdGhlbiBjb21wcmVzcy4gIFRoZW4gd2UgY2FuIGZhbGwgYmFjayB0byBwYWRkaW5nIHplcm9zIGFuZCBsZW5ndGgKKyAgICAgKiBlbmNvZGluZyBsaWtlIG5vcm1hbC4KKyAgICAgKi8KKyAgICBpZiAobWQtPnNoYTUxMi5jdXJsZW4gPiAxMTIpIHsKKyAgICAgICAgd2hpbGUgKG1kLT5zaGE1MTIuY3VybGVuIDwgMTI4KSB7CisgICAgICAgICAgICBtZC0+c2hhNTEyLmJ1ZlttZC0+c2hhNTEyLmN1cmxlbisrXSA9ICh1bnNpZ25lZCBjaGFyKTA7CisgICAgICAgIH0KKyAgICAgICAgc2hhNTEyX2NvbXByZXNzKG1kLCBtZC0+c2hhNTEyLmJ1Zik7CisgICAgICAgIG1kLT5zaGE1MTIuY3VybGVuID0gMDsKKyAgICB9CisKKyAgICAvKiBwYWQgdXB0byAxMjAgYnl0ZXMgb2YgemVyb2VzIAorICAgICAqIG5vdGU6IHRoYXQgZnJvbSAxMTIgdG8gMTIwIGlzIHRoZSA2NCBNU0Igb2YgdGhlIGxlbmd0aC4gIFdlIGFzc3VtZSB0aGF0IHlvdSB3b24ndCBoYXNoCisgICAgICogPiAyXjY0IGJpdHMgb2YgZGF0YS4uLiA6LSkKKyAgICAgKi8KKyAgICB3aGlsZSAobWQtPnNoYTUxMi5jdXJsZW4gPCAxMjApIHsKKyAgICAgICAgbWQtPnNoYTUxMi5idWZbbWQtPnNoYTUxMi5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikwOworICAgIH0KKworICAgIC8qIHN0b3JlIGxlbmd0aCAqLworICAgIFNUT1JFNjRIKG1kLT5zaGE1MTIubGVuZ3RoLCBtZC0+c2hhNTEyLmJ1ZisxMjApOworICAgIHNoYTUxMl9jb21wcmVzcyhtZCwgbWQtPnNoYTUxMi5idWYpOworCisgICAgLyogY29weSBvdXRwdXQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgIFNUT1JFNjRIKG1kLT5zaGE1MTIuc3RhdGVbaV0sIG91dCsoOCppKSk7CisgICAgfQorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIHplcm9tZW0obWQsIHNpemVvZihoYXNoX3N0YXRlKSk7CisjZW5kaWYKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBTZWxmLXRlc3QgdGhlIGhhc2gKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQKKyovICAKK2ludCAgc2hhNTEyX3Rlc3Qodm9pZCkKK3sKKyAjaWZuZGVmIExUQ19URVNUCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyAjZWxzZSAgICAKKyAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICBjaGFyICptc2c7CisgICAgICB1bnNpZ25lZCBjaGFyIGhhc2hbNjRdOworICB9IHRlc3RzW10gPSB7CisgICAgeyAiYWJjIiwKKyAgICAgeyAweGRkLCAweGFmLCAweDM1LCAweGExLCAweDkzLCAweDYxLCAweDdhLCAweGJhLAorICAgICAgIDB4Y2MsIDB4NDEsIDB4NzMsIDB4NDksIDB4YWUsIDB4MjAsIDB4NDEsIDB4MzEsCisgICAgICAgMHgxMiwgMHhlNiwgMHhmYSwgMHg0ZSwgMHg4OSwgMHhhOSwgMHg3ZSwgMHhhMiwKKyAgICAgICAweDBhLCAweDllLCAweGVlLCAweGU2LCAweDRiLCAweDU1LCAweGQzLCAweDlhLAorICAgICAgIDB4MjEsIDB4OTIsIDB4OTksIDB4MmEsIDB4MjcsIDB4NGYsIDB4YzEsIDB4YTgsCisgICAgICAgMHgzNiwgMHhiYSwgMHgzYywgMHgyMywgMHhhMywgMHhmZSwgMHhlYiwgMHhiZCwKKyAgICAgICAweDQ1LCAweDRkLCAweDQ0LCAweDIzLCAweDY0LCAweDNjLCAweGU4LCAweDBlLAorICAgICAgIDB4MmEsIDB4OWEsIDB4YzksIDB4NGYsIDB4YTUsIDB4NGMsIDB4YTQsIDB4OWYgfQorICAgIH0sCisgICAgeyAiYWJjZGVmZ2hiY2RlZmdoaWNkZWZnaGlqZGVmZ2hpamtlZmdoaWprbGZnaGlqa2xtZ2hpamtsbW5oaWprbG1ub2lqa2xtbm9wamtsbW5vcHFrbG1ub3Bxcmxtbm9wcXJzbW5vcHFyc3Rub3BxcnN0dSIsCisgICAgIHsgMHg4ZSwgMHg5NSwgMHg5YiwgMHg3NSwgMHhkYSwgMHhlMywgMHgxMywgMHhkYSwKKyAgICAgICAweDhjLCAweGY0LCAweGY3LCAweDI4LCAweDE0LCAweGZjLCAweDE0LCAweDNmLAorICAgICAgIDB4OGYsIDB4NzcsIDB4NzksIDB4YzYsIDB4ZWIsIDB4OWYsIDB4N2YsIDB4YTEsCisgICAgICAgMHg3MiwgMHg5OSwgMHhhZSwgMHhhZCwgMHhiNiwgMHg4OCwgMHg5MCwgMHgxOCwKKyAgICAgICAweDUwLCAweDFkLCAweDI4LCAweDllLCAweDQ5LCAweDAwLCAweGY3LCAweGU0LAorICAgICAgIDB4MzMsIDB4MWIsIDB4OTksIDB4ZGUsIDB4YzQsIDB4YjUsIDB4NDMsIDB4M2EsCisgICAgICAgMHhjNywgMHhkMywgMHgyOSwgMHhlZSwgMHhiNiwgMHhkZCwgMHgyNiwgMHg1NCwKKyAgICAgICAweDVlLCAweDk2LCAweGU1LCAweDViLCAweDg3LCAweDRiLCAweGU5LCAweDA5IH0KKyAgICB9LAorICB9OworCisgIGludCBpOworICB1bnNpZ25lZCBjaGFyIHRtcFs2NF07CisgIGhhc2hfc3RhdGUgbWQ7CisKKyAgZm9yIChpID0gMDsgaSA8IChpbnQpKHNpemVvZih0ZXN0cykgLyBzaXplb2YodGVzdHNbMF0pKTsgaSsrKSB7CisgICAgICBzaGE1MTJfaW5pdCgmbWQpOworICAgICAgc2hhNTEyX3Byb2Nlc3MoJm1kLCAodW5zaWduZWQgY2hhciAqKXRlc3RzW2ldLm1zZywgKHVuc2lnbmVkIGxvbmcpc3RybGVuKHRlc3RzW2ldLm1zZykpOworICAgICAgc2hhNTEyX2RvbmUoJm1kLCB0bXApOworICAgICAgaWYgKFhNRU1DTVAodG1wLCB0ZXN0c1tpXS5oYXNoLCA2NCkgIT0gMCkgeworICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgIH0KKyAgfQorICByZXR1cm4gQ1JZUFRfT0s7CisgICNlbmRpZgorfQorCisjaWZkZWYgU0hBMzg0CisgICAjaW5jbHVkZSAic2hhMzg0LmMiCisjZW5kaWYKKworI2VuZGlmCisKKworCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvc2hhMi9zaGE1MTIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvdGlnZXIuYyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvdGlnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTQwNTJjCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hhc2hlcy90aWdlci5jCkBAIC0wLDAgKzEsODE0IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSB0aWdlci5jCisgICBUaWdlciBoYXNoIGZ1bmN0aW9uLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBUSUdFUgorCitjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciB0aWdlcl9kZXNjID0KK3sKKyAgICAidGlnZXIiLAorICAgIDEsCisgICAgMjQsCisgICAgNjQsCisKKyAgICAvKiBPSUQgKi8KKyAgIHsgMSwgMywgNiwgMSwgNCwgMSwgMTE1OTEsIDEyLCAyLCAgfSwKKyAgIDksCisKKyAgICAmdGlnZXJfaW5pdCwKKyAgICAmdGlnZXJfcHJvY2VzcywKKyAgICAmdGlnZXJfZG9uZSwKKyAgICAmdGlnZXJfdGVzdCwKKyAgICBOVUxMCit9OworCisjZGVmaW5lIHQxICh0YWJsZSkKKyNkZWZpbmUgdDIgKHRhYmxlKzI1NikKKyNkZWZpbmUgdDMgKHRhYmxlKzI1NioyKQorI2RlZmluZSB0NCAodGFibGUrMjU2KjMpCisKK3N0YXRpYyBjb25zdCB1bG9uZzY0IHRhYmxlWzQqMjU2XSA9IHsKKyAgICBDT05TVDY0KDB4MDJBQUIxN0NGN0U5MEM1RSkgLyogICAgMCAqLywgQ09OU1Q2NCgweEFDNDI0QjAzRTI0M0E4RUMpIC8qICAgIDEgKi8sCisgICAgQ09OU1Q2NCgweDcyQ0Q1QkUzMERENUZDRDMpIC8qICAgIDIgKi8sIENPTlNUNjQoMHg2RDAxOUI5M0Y2Rjk3RjNBKSAvKiAgICAzICovLAorICAgIENPTlNUNjQoMHhDRDk5NzhGRkQyMUY5MTkzKSAvKiAgICA0ICovLCBDT05TVDY0KDB4NzU3M0ExQzk3MDgwMjlFMikgLyogICAgNSAqLywKKyAgICBDT05TVDY0KDB4QjE2NDMyNkI5MjJBODNDMykgLyogICAgNiAqLywgQ09OU1Q2NCgweDQ2ODgzRUVFMDQ5MTU4NzApIC8qICAgIDcgKi8sCisgICAgQ09OU1Q2NCgweEVBQUNFMzA1NzEwM0VDRTYpIC8qICAgIDggKi8sIENPTlNUNjQoMHhDNTQxNjlCODA4QTM1MzVDKSAvKiAgICA5ICovLAorICAgIENPTlNUNjQoMHg0Q0U3NTQ5MThEREVDNDdDKSAvKiAgIDEwICovLCBDT05TVDY0KDB4MEFBMkY0REZEQzBERjQwQykgLyogICAxMSAqLywKKyAgICBDT05TVDY0KDB4MTBCNzZGMThBNzREQkVGQSkgLyogICAxMiAqLywgQ09OU1Q2NCgweEM2Q0NCNjIzNUFEMUFCNkEpIC8qICAgMTMgKi8sCisgICAgQ09OU1Q2NCgweDEzNzI2MTIxNTcyRkUyRkYpIC8qICAgMTQgKi8sIENPTlNUNjQoMHgxQTQ4OEM2RjE5OUQ5MjFFKSAvKiAgIDE1ICovLAorICAgIENPTlNUNjQoMHg0QkM5RjlGNERBMDAwN0NBKSAvKiAgIDE2ICovLCBDT05TVDY0KDB4MjZGNUU2RjZFODUyNDFDNykgLyogICAxNyAqLywKKyAgICBDT05TVDY0KDB4ODU5MDc5REJFQTU5NDdCNikgLyogICAxOCAqLywgQ09OU1Q2NCgweDRGMTg4NUM1Qzk5RThDOTIpIC8qICAgMTkgKi8sCisgICAgQ09OU1Q2NCgweEQ3OEU3NjFFQTk2Rjg2NEIpIC8qICAgMjAgKi8sIENPTlNUNjQoMHg4RTM2NDI4QzUyQjVDMTdEKSAvKiAgIDIxICovLAorICAgIENPTlNUNjQoMHg2OUNGNjgyNzM3MzA2M0MxKSAvKiAgIDIyICovLCBDT05TVDY0KDB4QjYwN0M5M0Q5QkI0QzU2RSkgLyogICAyMyAqLywKKyAgICBDT05TVDY0KDB4N0Q4MjBFNzYwRTc2QjVFQSkgLyogICAyNCAqLywgQ09OU1Q2NCgweDY0NUM5Q0M2RjA3RkRDNDIpIC8qICAgMjUgKi8sCisgICAgQ09OU1Q2NCgweEJGMzhBMDc4MjQzMzQyRTApIC8qICAgMjYgKi8sIENPTlNUNjQoMHg1RjZCMzQzQzlEMkU3RDA0KSAvKiAgIDI3ICovLAorICAgIENPTlNUNjQoMHhGMkMyOEFFQjYwMEIwRUM2KSAvKiAgIDI4ICovLCBDT05TVDY0KDB4NkMwRUQ4NUY3MjU0QkNBQykgLyogICAyOSAqLywKKyAgICBDT05TVDY0KDB4NzE1OTIyODFBNERCNEZFNSkgLyogICAzMCAqLywgQ09OU1Q2NCgweDE5NjdGQTY5Q0UwRkVEOUYpIC8qICAgMzEgKi8sCisgICAgQ09OU1Q2NCgweEZENTI5M0Y4Qjk2NTQ1REIpIC8qICAgMzIgKi8sIENPTlNUNjQoMHhDODc5RTlEN0YyQTc2MDBCKSAvKiAgIDMzICovLAorICAgIENPTlNUNjQoMHg4NjAyNDg5MjAxOTMxOTRFKSAvKiAgIDM0ICovLCBDT05TVDY0KDB4QTRGOTUzM0IyRDlDQzBCMykgLyogICAzNSAqLywKKyAgICBDT05TVDY0KDB4OTA1MzgzNkMxNTk1NzYxMykgLyogICAzNiAqLywgQ09OU1Q2NCgweERCNkRDRjhBRkMzNTdCRjEpIC8qICAgMzcgKi8sCisgICAgQ09OU1Q2NCgweDE4QkVFQTdBN0EzNzBGNTcpIC8qICAgMzggKi8sIENPTlNUNjQoMHgwMzcxMTdDQTUwQjk5MDY2KSAvKiAgIDM5ICovLAorICAgIENPTlNUNjQoMHg2QUIzMEE5Nzc0NDI0QTM1KSAvKiAgIDQwICovLCBDT05TVDY0KDB4RjRFOTJGMDJFMzI1MjQ5QikgLyogICA0MSAqLywKKyAgICBDT05TVDY0KDB4NzczOURCMDcwNjFDQ0FFMSkgLyogICA0MiAqLywgQ09OU1Q2NCgweEQ4RjNCNDlDRUNBNDJBMDUpIC8qICAgNDMgKi8sCisgICAgQ09OU1Q2NCgweEJENTZCRTNGNTEzODJGNzMpIC8qICAgNDQgKi8sIENPTlNUNjQoMHg0NUZBRUQ1ODQzQjBCQjI4KSAvKiAgIDQ1ICovLAorICAgIENPTlNUNjQoMHgxQzgxM0Q1QzExQkYxRjgzKSAvKiAgIDQ2ICovLCBDT05TVDY0KDB4OEFGMEU0QjZENzVGQTE2OSkgLyogICA0NyAqLywKKyAgICBDT05TVDY0KDB4MzNFRTE4QTQ4N0FEOTk5OSkgLyogICA0OCAqLywgQ09OU1Q2NCgweDNDMjZFOEVBQjFDOTQ0MTApIC8qICAgNDkgKi8sCisgICAgQ09OU1Q2NCgweEI1MTAxMDJCQzBBODIyRjkpIC8qICAgNTAgKi8sIENPTlNUNjQoMHgxNDFFRUYzMTBDRTYxMjNCKSAvKiAgIDUxICovLAorICAgIENPTlNUNjQoMHhGQzY1QjkwMDU5RERCMTU0KSAvKiAgIDUyICovLCBDT05TVDY0KDB4RTAxNTg2NDBDNUUwRTYwNykgLyogICA1MyAqLywKKyAgICBDT05TVDY0KDB4ODg0RTA3OTgyNkMzQTNDRikgLyogICA1NCAqLywgQ09OU1Q2NCgweDkzMEQwRDk1MjNDNTM1RkQpIC8qICAgNTUgKi8sCisgICAgQ09OU1Q2NCgweDM1NjM4RDc1NEU5QTJCMDApIC8qICAgNTYgKi8sIENPTlNUNjQoMHg0MDg1RkNDRjQwNDY5REQ1KSAvKiAgIDU3ICovLAorICAgIENPTlNUNjQoMHhDNEIxN0FEMjhCRTIzQTRDKSAvKiAgIDU4ICovLCBDT05TVDY0KDB4Q0FCMkYwRkM2QTNFNkEyRSkgLyogICA1OSAqLywKKyAgICBDT05TVDY0KDB4Mjg2MDk3MUE2Qjk0M0ZDRCkgLyogICA2MCAqLywgQ09OU1Q2NCgweDNEREU2RUUyMTJFMzA0NDYpIC8qICAgNjEgKi8sCisgICAgQ09OU1Q2NCgweDYyMjJGMzJBRTAxNzY1QUUpIC8qICAgNjIgKi8sIENPTlNUNjQoMHg1RDU1MEJCNTQ3ODMwOEZFKSAvKiAgIDYzICovLAorICAgIENPTlNUNjQoMHhBOUVGQTk4REEwRURBMjJBKSAvKiAgIDY0ICovLCBDT05TVDY0KDB4QzM1MUE3MTY4NkM0MERBNykgLyogICA2NSAqLywKKyAgICBDT05TVDY0KDB4MTEwNTU4NkQ5Qzg2N0M4NCkgLyogICA2NiAqLywgQ09OU1Q2NCgweERDRkZFRTg1RkRBMjI4NTMpIC8qICAgNjcgKi8sCisgICAgQ09OU1Q2NCgweENDRkJEMDI2MkM1RUVGNzYpIC8qICAgNjggKi8sIENPTlNUNjQoMHhCQUYyOTRDQjg5OTBEMjAxKSAvKiAgIDY5ICovLAorICAgIENPTlNUNjQoMHhFNjk0NjRGNTJBRkFEOTc1KSAvKiAgIDcwICovLCBDT05TVDY0KDB4OTRCMDEzQUZERjEzM0UxNCkgLyogICA3MSAqLywKKyAgICBDT05TVDY0KDB4MDZBN0QxQTMyODIzQzk1OCkgLyogICA3MiAqLywgQ09OU1Q2NCgweDZGOTVGRTUxMzBGNjExMTkpIC8qICAgNzMgKi8sCisgICAgQ09OU1Q2NCgweEQ5MkFCMzRFNDYyQzA2QzApIC8qICAgNzQgKi8sIENPTlNUNjQoMHhFRDdCREUzMzg4N0M3MUQyKSAvKiAgIDc1ICovLAorICAgIENPTlNUNjQoMHg3OTc0NkQ2RTY1MTgzOTNFKSAvKiAgIDc2ICovLCBDT05TVDY0KDB4NUJBNDE5Mzg1RDcxMzMyOSkgLyogICA3NyAqLywKKyAgICBDT05TVDY0KDB4N0MxQkE2Qjk0OEE5NzU2NCkgLyogICA3OCAqLywgQ09OU1Q2NCgweDMxOTg3QzE5N0JGREFDNjcpIC8qICAgNzkgKi8sCisgICAgQ09OU1Q2NCgweERFNkMyM0M0NEIwNTNEMDIpIC8qICAgODAgKi8sIENPTlNUNjQoMHg1ODFDNDlGRUQwMDJENjREKSAvKiAgIDgxICovLAorICAgIENPTlNUNjQoMHhERDQ3NEQ2MzM4MjYxNTcxKSAvKiAgIDgyICovLCBDT05TVDY0KDB4QUE0NTQ2QzNFNDczRDA2MikgLyogICA4MyAqLywKKyAgICBDT05TVDY0KDB4OTI4RkNFMzQ5NDU1Rjg2MCkgLyogICA4NCAqLywgQ09OU1Q2NCgweDQ4MTYxQkJBQ0FBQjk0RDkpIC8qICAgODUgKi8sCisgICAgQ09OU1Q2NCgweDYzOTEyNDMwNzcwRTZGNjgpIC8qICAgODYgKi8sIENPTlNUNjQoMHg2RUM4QTVFNjAyQzY2NDFDKSAvKiAgIDg3ICovLAorICAgIENPTlNUNjQoMHg4NzI4MjUxNTMzN0RERDJCKSAvKiAgIDg4ICovLCBDT05TVDY0KDB4MkNEQTZCNDIwMzRCNzAxQikgLyogICA4OSAqLywKKyAgICBDT05TVDY0KDB4QjAzRDM3QzE4MUNCMDk2RCkgLyogICA5MCAqLywgQ09OU1Q2NCgweEUxMDg0MzgyNjZDNzFDNkYpIC8qICAgOTEgKi8sCisgICAgQ09OU1Q2NCgweDJCMzE4MEM3RUI1MUIyNTUpIC8qICAgOTIgKi8sIENPTlNUNjQoMHhERjkyQjgyRjk2QzA4QkJDKSAvKiAgIDkzICovLAorICAgIENPTlNUNjQoMHg1QzY4QzhDMEE2MzJGM0JBKSAvKiAgIDk0ICovLCBDT05TVDY0KDB4NTUwNENDODYxQzNEMDU1NikgLyogICA5NSAqLywKKyAgICBDT05TVDY0KDB4QUJCRkE0RTU1RkIyNkI4RikgLyogICA5NiAqLywgQ09OU1Q2NCgweDQxODQ4QjBBQjNCQUNFQjQpIC8qICAgOTcgKi8sCisgICAgQ09OU1Q2NCgweEIzMzRBMjczQUE0NDVEMzIpIC8qICAgOTggKi8sIENPTlNUNjQoMHhCQ0E2OTZGMEE4NUFEODgxKSAvKiAgIDk5ICovLAorICAgIENPTlNUNjQoMHgyNEY2RUM2NUI1MjhENTZDKSAvKiAgMTAwICovLCBDT05TVDY0KDB4MENFMTUxMkU5MEY0NTI0QSkgLyogIDEwMSAqLywKKyAgICBDT05TVDY0KDB4NEU5REQ3OUQ1NTA2RDM1QSkgLyogIDEwMiAqLywgQ09OU1Q2NCgweDI1ODkwNUZBQzZDRTk3NzkpIC8qICAxMDMgKi8sCisgICAgQ09OU1Q2NCgweDIwMTkyOTVCM0UxMDlCMzMpIC8qICAxMDQgKi8sIENPTlNUNjQoMHhGOEE5NDc4QjczQTA1NENDKSAvKiAgMTA1ICovLAorICAgIENPTlNUNjQoMHgyOTI0RjJGOTM0NDE3RUIwKSAvKiAgMTA2ICovLCBDT05TVDY0KDB4Mzk5MzM1N0Q1MzZEMUJDNCkgLyogIDEwNyAqLywKKyAgICBDT05TVDY0KDB4MzhBODFBQzIxREI2RkY4QikgLyogIDEwOCAqLywgQ09OU1Q2NCgweDQ3QzRGQkYxN0Q2MDE2QkYpIC8qICAxMDkgKi8sCisgICAgQ09OU1Q2NCgweDFFMEZBQURENzY2N0UzRjUpIC8qICAxMTAgKi8sIENPTlNUNjQoMHg3QUJDRkY2MjkzOEJFQjk2KSAvKiAgMTExICovLAorICAgIENPTlNUNjQoMHhBNzhEQUQ5NDhGQzE3OUM5KSAvKiAgMTEyICovLCBDT05TVDY0KDB4OEYxRjk4QjcyOTExRTUwRCkgLyogIDExMyAqLywKKyAgICBDT05TVDY0KDB4NjFFNDhFQUUyNzEyMUE5MSkgLyogIDExNCAqLywgQ09OU1Q2NCgweDRENjJGN0FEMzE4NTk4MDgpIC8qICAxMTUgKi8sCisgICAgQ09OU1Q2NCgweEVDRUJBMzQ1RUY1Q0VBRUIpIC8qICAxMTYgKi8sIENPTlNUNjQoMHhGNUNFQjI1RUJDOTY4NENFKSAvKiAgMTE3ICovLAorICAgIENPTlNUNjQoMHhGNjMzRTIwQ0I3Rjc2MjIxKSAvKiAgMTE4ICovLCBDT05TVDY0KDB4QTMyQ0RGMDZBQjgyOTNFNCkgLyogIDExOSAqLywKKyAgICBDT05TVDY0KDB4OTg1QTIwMkNBNUVFMkNBNCkgLyogIDEyMCAqLywgQ09OU1Q2NCgweENGMEI4NDQ3Q0M4QThGQjEpIC8qICAxMjEgKi8sCisgICAgQ09OU1Q2NCgweDlGNzY1MjQ0OTc5ODU5QTMpIC8qICAxMjIgKi8sIENPTlNUNjQoMHhBOEQ1MTZCMUExMjQwMDE3KSAvKiAgMTIzICovLAorICAgIENPTlNUNjQoMHgwQkQ3QkEzRUJCNURDNzI2KSAvKiAgMTI0ICovLCBDT05TVDY0KDB4RTU0QkNBNTVCODZBREIzOSkgLyogIDEyNSAqLywKKyAgICBDT05TVDY0KDB4MUQ3QTNBRkQ2QzQ3ODA2MykgLyogIDEyNiAqLywgQ09OU1Q2NCgweDUxOUVDNjA4RTc2NjlFREQpIC8qICAxMjcgKi8sCisgICAgQ09OU1Q2NCgweDBFNTcxNUEyRDE0OUFBMjMpIC8qICAxMjggKi8sIENPTlNUNjQoMHgxNzdENDU3MTg0OEZGMTk0KSAvKiAgMTI5ICovLAorICAgIENPTlNUNjQoMHhFRUI1NUYzMjQxMDE0QzIyKSAvKiAgMTMwICovLCBDT05TVDY0KDB4MEY1RTVDQTEzQTZFMkVDMikgLyogIDEzMSAqLywKKyAgICBDT05TVDY0KDB4ODAyOTkyN0I3NUY1QzM2MSkgLyogIDEzMiAqLywgQ09OU1Q2NCgweEFEMTM5RkFCQzNENkU0MzYpIC8qICAxMzMgKi8sCisgICAgQ09OU1Q2NCgweDBENURGMUE5NENDRjQwMkYpIC8qICAxMzQgKi8sIENPTlNUNjQoMHgzRThCRDk0OEJFQTVERkM4KSAvKiAgMTM1ICovLAorICAgIENPTlNUNjQoMHhBNUEwRDM1N0JEM0ZGNzdFKSAvKiAgMTM2ICovLCBDT05TVDY0KDB4QTJEMTJFMjUxRjc0RjY0NSkgLyogIDEzNyAqLywKKyAgICBDT05TVDY0KDB4NjZGRDlFNTI1RTgxQTA4MikgLyogIDEzOCAqLywgQ09OU1Q2NCgweDJFMEM5MENFN0Y2ODdBNDkpIC8qICAxMzkgKi8sCisgICAgQ09OU1Q2NCgweEMyRThCQ0JFQkE5NzNCQzUpIC8qICAxNDAgKi8sIENPTlNUNjQoMHgwMDAwMDFCQ0U1MDk3NDVGKSAvKiAgMTQxICovLAorICAgIENPTlNUNjQoMHg0MjM3NzdCQkU2REFCM0Q2KSAvKiAgMTQyICovLCBDT05TVDY0KDB4RDE2NjFDN0VBRUYwNkVCNSkgLyogIDE0MyAqLywKKyAgICBDT05TVDY0KDB4QTE3ODFGMzU0REFBQ0ZEOCkgLyogIDE0NCAqLywgQ09OU1Q2NCgweDJEMTEyODRBMkIxNkFGRkMpIC8qICAxNDUgKi8sCisgICAgQ09OU1Q2NCgweEYxRkM0RjY3RkE4OTFEMUYpIC8qICAxNDYgKi8sIENPTlNUNjQoMHg3M0VDQzI1RENCOTIwQURBKSAvKiAgMTQ3ICovLAorICAgIENPTlNUNjQoMHhBRTYxMEMyMkMyQTEyNjUxKSAvKiAgMTQ4ICovLCBDT05TVDY0KDB4OTZFMEE4MTBEMzU2Qjc4QSkgLyogIDE0OSAqLywKKyAgICBDT05TVDY0KDB4NUE5QTM4MUYyRkU3ODcwRikgLyogIDE1MCAqLywgQ09OU1Q2NCgweEQ1QUQ2MkVERTk0RTU1MzApIC8qICAxNTEgKi8sCisgICAgQ09OU1Q2NCgweEQyMjVFNUU4MzY4RDE0MjcpIC8qICAxNTIgKi8sIENPTlNUNjQoMHg2NTk3N0I3MEM3QUY0NjMxKSAvKiAgMTUzICovLAorICAgIENPTlNUNjQoMHg5OUY4ODlCMkRFMzlENzRGKSAvKiAgMTU0ICovLCBDT05TVDY0KDB4MjMzRjMwQkY1NEUxRDE0MykgLyogIDE1NSAqLywKKyAgICBDT05TVDY0KDB4OUE5Njc1RDNEOUE2M0M5NykgLyogIDE1NiAqLywgQ09OU1Q2NCgweDU0NzA1NTRGRjMzNEY5QTgpIC8qICAxNTcgKi8sCisgICAgQ09OU1Q2NCgweDE2NkFDQjc0NEE0RjU2ODgpIC8qICAxNTggKi8sIENPTlNUNjQoMHg3MEM3NENBQUIyRTRBRUFEKSAvKiAgMTU5ICovLAorICAgIENPTlNUNjQoMHhGMEQwOTE2NDZGMjk0RDEyKSAvKiAgMTYwICovLCBDT05TVDY0KDB4NTdCODJBODk2ODQwMzFEMSkgLyogIDE2MSAqLywKKyAgICBDT05TVDY0KDB4RUZEOTVBNUE2MUJFMEI2QikgLyogIDE2MiAqLywgQ09OU1Q2NCgweDJGQkQxMkU5NjlGMkYyOUEpIC8qICAxNjMgKi8sCisgICAgQ09OU1Q2NCgweDlCRDM3MDEzRkVGRjlGRTgpIC8qICAxNjQgKi8sIENPTlNUNjQoMHgzRjlCMDQwNEQ2MDg1QTA2KSAvKiAgMTY1ICovLAorICAgIENPTlNUNjQoMHg0OTQwQzFGMzE2NkNGRTE1KSAvKiAgMTY2ICovLCBDT05TVDY0KDB4MDk1NDJDNERDREYzREVGQikgLyogIDE2NyAqLywKKyAgICBDT05TVDY0KDB4QjRDNTIxODM4NUNENUNFMykgLyogIDE2OCAqLywgQ09OU1Q2NCgweEM5MzVCN0RDNDQ2MkE2NDEpIC8qICAxNjkgKi8sCisgICAgQ09OU1Q2NCgweDM0MTdGOEE2OEVEM0I2M0YpIC8qICAxNzAgKi8sIENPTlNUNjQoMHhCODA5NTkyOTVCMjE1QjQwKSAvKiAgMTcxICovLAorICAgIENPTlNUNjQoMHhGOTlDREFFRjNCOEM4NTcyKSAvKiAgMTcyICovLCBDT05TVDY0KDB4MDE4QzA2MTRGOEZDQjk1RCkgLyogIDE3MyAqLywKKyAgICBDT05TVDY0KDB4MUIxNEFDQ0QxQTNBQ0RGMykgLyogIDE3NCAqLywgQ09OU1Q2NCgweDg0RDQ3MUYyMDBCQjczMkQpIC8qICAxNzUgKi8sCisgICAgQ09OU1Q2NCgweEMxQTMxMTBFOTVFOERBMTYpIC8qICAxNzYgKi8sIENPTlNUNjQoMHg0MzBBNzIyMEJGMUE4MkI4KSAvKiAgMTc3ICovLAorICAgIENPTlNUNjQoMHhCNzdFMDkwRDM5REYyMTBFKSAvKiAgMTc4ICovLCBDT05TVDY0KDB4NUVGNEJEOUYzQ0QwNUU5RCkgLyogIDE3OSAqLywKKyAgICBDT05TVDY0KDB4OUQ0RkY2REE3RTU3QTQ0NCkgLyogIDE4MCAqLywgQ09OU1Q2NCgweERBMUQ2MEUxODNENEE1RjgpIC8qICAxODEgKi8sCisgICAgQ09OU1Q2NCgweEIyODdDMzg0MTc5OThFNDcpIC8qICAxODIgKi8sIENPTlNUNjQoMHhGRTNFREMxMjFCQjMxODg2KSAvKiAgMTgzICovLAorICAgIENPTlNUNjQoMHhDN0ZFM0NDQzk4MENDQkVGKSAvKiAgMTg0ICovLCBDT05TVDY0KDB4RTQ2RkI1OTAxODlCRkQwMykgLyogIDE4NSAqLywKKyAgICBDT05TVDY0KDB4MzczMkZENDY5QTRDNTdEQykgLyogIDE4NiAqLywgQ09OU1Q2NCgweDdFRjcwMEEwN0NGMUFENjUpIC8qICAxODcgKi8sCisgICAgQ09OU1Q2NCgweDU5QzY0NDY4QTMxRDg4NTkpIC8qICAxODggKi8sIENPTlNUNjQoMHg3NjJGQjBCNEQ0NUI2MUY2KSAvKiAgMTg5ICovLAorICAgIENPTlNUNjQoMHgxNTVCQUVEMDk5MDQ3NzE4KSAvKiAgMTkwICovLCBDT05TVDY0KDB4Njg3NTVFNEMzRDUwQkFBNikgLyogIDE5MSAqLywKKyAgICBDT05TVDY0KDB4RTkyMTRFN0YyMkQ4QjRERikgLyogIDE5MiAqLywgQ09OU1Q2NCgweDJBRERCRjUzMkVBQzk1RjQpIC8qICAxOTMgKi8sCisgICAgQ09OU1Q2NCgweDMyQUUzOTA5QjRCRDAxMDkpIC8qICAxOTQgKi8sIENPTlNUNjQoMHg4MzRERjUzN0IwOEUzNDUwKSAvKiAgMTk1ICovLAorICAgIENPTlNUNjQoMHhGQTIwOURBODQyMjA3MjhEKSAvKiAgMTk2ICovLCBDT05TVDY0KDB4OUU2OTFEOUI5RUZFMjNGNykgLyogIDE5NyAqLywKKyAgICBDT05TVDY0KDB4MDQ0NkQyODhDNEFFOEQ3RikgLyogIDE5OCAqLywgQ09OU1Q2NCgweDdCNENDNTI0RTE2OTc4NUIpIC8qICAxOTkgKi8sCisgICAgQ09OU1Q2NCgweDIxRDg3RjAxMzVDQTEzODUpIC8qICAyMDAgKi8sIENPTlNUNjQoMHhDRUJCNDAwRjEzN0I4QUE1KSAvKiAgMjAxICovLAorICAgIENPTlNUNjQoMHgyNzJFMkI2NjU4MDc5NkJFKSAvKiAgMjAyICovLCBDT05TVDY0KDB4MzYxMjI2NDEyNUMyQjBERSkgLyogIDIwMyAqLywKKyAgICBDT05TVDY0KDB4MDU3NzAyQkRBRDFFRkJCMikgLyogIDIwNCAqLywgQ09OU1Q2NCgweEQ0QkFCQjhFQUNGODRCRTkpIC8qICAyMDUgKi8sCisgICAgQ09OU1Q2NCgweDkxNTgzMTM5NjQxQkM2N0IpIC8qICAyMDYgKi8sIENPTlNUNjQoMHg4QkRDMkRFMDgwMzZFMDI0KSAvKiAgMjA3ICovLAorICAgIENPTlNUNjQoMHg2MDNDODE1NkY0OUY2OEVEKSAvKiAgMjA4ICovLCBDT05TVDY0KDB4RjdEMjM2RjdEQkVGNTExMSkgLyogIDIwOSAqLywKKyAgICBDT05TVDY0KDB4OTcyN0M0NTk4QUQyMUU4MCkgLyogIDIxMCAqLywgQ09OU1Q2NCgweEEwOEEwODk2NjcwQTVGRDcpIC8qICAyMTEgKi8sCisgICAgQ09OU1Q2NCgweENCNEE4RjQzMDlFQkE5Q0IpIC8qICAyMTIgKi8sIENPTlNUNjQoMHg4MUFGNTY0QjBGNzAzNkExKSAvKiAgMjEzICovLAorICAgIENPTlNUNjQoMHhDMEI5OUFBNzc4MTk5QUJEKSAvKiAgMjE0ICovLCBDT05TVDY0KDB4OTU5RjFFQzgzRkM4RTk1MikgLyogIDIxNSAqLywKKyAgICBDT05TVDY0KDB4OEM1MDUwNzc3OTRBODFCOSkgLyogIDIxNiAqLywgQ09OU1Q2NCgweDNBQ0FBRjhGMDU2MzM4RjApIC8qICAyMTcgKi8sCisgICAgQ09OU1Q2NCgweDA3QjQzRjUwNjI3QTY3NzgpIC8qICAyMTggKi8sIENPTlNUNjQoMHg0QTQ0QUI0OUY1RUNDQzc3KSAvKiAgMjE5ICovLAorICAgIENPTlNUNjQoMHgzQkMzRDZFNEI2NzlFRTk4KSAvKiAgMjIwICovLCBDT05TVDY0KDB4OUNDMEQ0RDFDRjE0MTA4QykgLyogIDIyMSAqLywKKyAgICBDT05TVDY0KDB4NDQwNkMwMEIyMDZCQzhBMCkgLyogIDIyMiAqLywgQ09OU1Q2NCgweDgyQTE4ODU0QzhENzJEODkpIC8qICAyMjMgKi8sCisgICAgQ09OU1Q2NCgweDY3RTM2NkIzNUMzQzQzMkMpIC8qICAyMjQgKi8sIENPTlNUNjQoMHhCOTIzREQ2MTEwMkIzN0YyKSAvKiAgMjI1ICovLAorICAgIENPTlNUNjQoMHg1NkFCMjc3OUQ4ODQyNzFEKSAvKiAgMjI2ICovLCBDT05TVDY0KDB4QkU4M0UxQjBGRjE1MjVBRikgLyogIDIyNyAqLywKKyAgICBDT05TVDY0KDB4RkI3QzY1RDQyMTdFNDlBOSkgLyogIDIyOCAqLywgQ09OU1Q2NCgweDZCREJFMEU3NkQ0OEU3RDQpIC8qICAyMjkgKi8sCisgICAgQ09OU1Q2NCgweDA4REY4Mjg3NDVEOTE3OUUpIC8qICAyMzAgKi8sIENPTlNUNjQoMHgyMkVBNkE5QURENTNCRDM0KSAvKiAgMjMxICovLAorICAgIENPTlNUNjQoMHhFMzZFMTQxQzU2MjIyMDBBKSAvKiAgMjMyICovLCBDT05TVDY0KDB4N0Y4MDVEMUI4Q0I3NTBFRSkgLyogIDIzMyAqLywKKyAgICBDT05TVDY0KDB4QUZFNUM3QTU5RjU4RTgzNykgLyogIDIzNCAqLywgQ09OU1Q2NCgweEUyN0Y5OTZBNEZCMUMyM0MpIC8qICAyMzUgKi8sCisgICAgQ09OU1Q2NCgweEQzODY3REZCMDc3NUYwRDApIC8qICAyMzYgKi8sIENPTlNUNjQoMHhEMEU2NzNERTZFODg4OTFBKSAvKiAgMjM3ICovLAorICAgIENPTlNUNjQoMHgxMjNBRUI5RUFGQjg2QzI1KSAvKiAgMjM4ICovLCBDT05TVDY0KDB4MzBGMUQ1RDVDMTQ1Qjg5NSkgLyogIDIzOSAqLywKKyAgICBDT05TVDY0KDB4QkI0MzRBMkRFRTcyNjlFNykgLyogIDI0MCAqLywgQ09OU1Q2NCgweDc4Q0I2N0VDRjkzMUZBMzgpIC8qICAyNDEgKi8sCisgICAgQ09OU1Q2NCgweEYzM0IwMzcyMzIzQkJGOUMpIC8qICAyNDIgKi8sIENPTlNUNjQoMHg1MkQ2NjMzNkZCMjc5Qzc0KSAvKiAgMjQzICovLAorICAgIENPTlNUNjQoMHg1MDVGMzNBQzBBRkI0RUFBKSAvKiAgMjQ0ICovLCBDT05TVDY0KDB4RThBNUNEOTlBMkNDRTE4NykgLyogIDI0NSAqLywKKyAgICBDT05TVDY0KDB4NTM0OTc0ODAxRTJEMzBCQikgLyogIDI0NiAqLywgQ09OU1Q2NCgweDhEMkQ1NzExRDU4NzZEOTApIC8qICAyNDcgKi8sCisgICAgQ09OU1Q2NCgweDFGMUE0MTI4OTFCQzAzOEUpIC8qICAyNDggKi8sIENPTlNUNjQoMHhENkUyRTcxRDgyRTU2NjQ4KSAvKiAgMjQ5ICovLAorICAgIENPTlNUNjQoMHg3NDAzNkMzQTQ5NzczMkI3KSAvKiAgMjUwICovLCBDT05TVDY0KDB4ODlCNjdFRDk2MzYxRjVBQikgLyogIDI1MSAqLywKKyAgICBDT05TVDY0KDB4RkZFRDk1RDhGMUVBMDJBMikgLyogIDI1MiAqLywgQ09OU1Q2NCgweEU3MkIzQkQ2MTQ2NEQ0M0QpIC8qICAyNTMgKi8sCisgICAgQ09OU1Q2NCgweEE2MzAwRjE3MEJEQzQ4MjApIC8qICAyNTQgKi8sIENPTlNUNjQoMHhFQkMxODc2MEVENzhBNzdBKSAvKiAgMjU1ICovLAorICAgIENPTlNUNjQoMHhFNkE2QkU1QTA1QTEyMTM4KSAvKiAgMjU2ICovLCBDT05TVDY0KDB4QjVBMTIyQTVCNEY4N0M5OCkgLyogIDI1NyAqLywKKyAgICBDT05TVDY0KDB4NTYzQzYwODkxNDBCNjk5MCkgLyogIDI1OCAqLywgQ09OU1Q2NCgweDRDNDZDQjJFMzkxRjVERDUpIC8qICAyNTkgKi8sCisgICAgQ09OU1Q2NCgweEQ5MzJBRERCQzlCNzk0MzQpIC8qICAyNjAgKi8sIENPTlNUNjQoMHgwOEVBNzBFNDIwMTVBRkY1KSAvKiAgMjYxICovLAorICAgIENPTlNUNjQoMHhENzY1QTY2NzNFNDc4Q0YxKSAvKiAgMjYyICovLCBDT05TVDY0KDB4QzRGQjc1N0VBQjI3OEQ5OSkgLyogIDI2MyAqLywKKyAgICBDT05TVDY0KDB4REYxMUM2ODYyRDZFMDY5MikgLyogIDI2NCAqLywgQ09OU1Q2NCgweERERUI4NEYxMEQ3RjNCMTYpIC8qICAyNjUgKi8sCisgICAgQ09OU1Q2NCgweDZGMkVGNjA0QTY2NUVBMDQpIC8qICAyNjYgKi8sIENPTlNUNjQoMHg0QThFMEYwRkYwRTBERkIzKSAvKiAgMjY3ICovLAorICAgIENPTlNUNjQoMHhBNUVERUVGODNEQkNCQTUxKSAvKiAgMjY4ICovLCBDT05TVDY0KDB4RkM0RjBBMkEwRUE0MzcxRSkgLyogIDI2OSAqLywKKyAgICBDT05TVDY0KDB4RTgzRTFEQTg1Q0IzODQyOSkgLyogIDI3MCAqLywgQ09OU1Q2NCgweERDOEZGODgyQkExQjFDRTIpIC8qICAyNzEgKi8sCisgICAgQ09OU1Q2NCgweENENDU1MDVFODM1M0U4MEQpIC8qICAyNzIgKi8sIENPTlNUNjQoMHgxOEQxOUEwMEQ0REIwNzE3KSAvKiAgMjczICovLAorICAgIENPTlNUNjQoMHgzNEEwQ0ZFREE1RjM4MTAxKSAvKiAgMjc0ICovLCBDT05TVDY0KDB4MEJFNzdFNTE4ODg3Q0FGMikgLyogIDI3NSAqLywKKyAgICBDT05TVDY0KDB4MUUzNDE0MzhCM0M0NTEzNikgLyogIDI3NiAqLywgQ09OU1Q2NCgweEUwNTc5N0Y0OTA4OUNDRjkpIC8qICAyNzcgKi8sCisgICAgQ09OU1Q2NCgweEZGRDIzRjlERjI1OTFEMTQpIC8qICAyNzggKi8sIENPTlNUNjQoMHg1NDNEREEyMjg1OTVDNUNEKSAvKiAgMjc5ICovLAorICAgIENPTlNUNjQoMHg2NjFGODFGRDk5MDUyQTMzKSAvKiAgMjgwICovLCBDT05TVDY0KDB4ODczNkU2NDFEQjBGN0I3NikgLyogIDI4MSAqLywKKyAgICBDT05TVDY0KDB4MTUyMjc3MjU0MThFNTMwNykgLyogIDI4MiAqLywgQ09OU1Q2NCgweEUyNUY3RjQ2MTYyRUIyRkEpIC8qICAyODMgKi8sCisgICAgQ09OU1Q2NCgweDQ4QThCMjEyNkMxM0Q5RkUpIC8qICAyODQgKi8sIENPTlNUNjQoMHhBRkRDNTQxNzkyRTc2RUVBKSAvKiAgMjg1ICovLAorICAgIENPTlNUNjQoMHgwM0Q5MTJCRkM2RDE4OThGKSAvKiAgMjg2ICovLCBDT05TVDY0KDB4MzFCMUFBRkExQjgzRjUxQikgLyogIDI4NyAqLywKKyAgICBDT05TVDY0KDB4RjFBQzI3OTZFNDJBQjdEOSkgLyogIDI4OCAqLywgQ09OU1Q2NCgweDQwQTNBN0Q3RkNEMkVCQUMpIC8qICAyODkgKi8sCisgICAgQ09OU1Q2NCgweDEwNTYxMzZEMEFGQkJDQzUpIC8qICAyOTAgKi8sIENPTlNUNjQoMHg3ODg5RTFERDlBNkQwQzg1KSAvKiAgMjkxICovLAorICAgIENPTlNUNjQoMHhEMzM1MjU3ODJBNzk3NEFBKSAvKiAgMjkyICovLCBDT05TVDY0KDB4QTdFMjVEMDkwNzhBQzA5QikgLyogIDI5MyAqLywKKyAgICBDT05TVDY0KDB4QkQ0MTM4QjNFQUM2RUREMCkgLyogIDI5NCAqLywgQ09OU1Q2NCgweDkyMEFCRkJFNzFFQjlFNzApIC8qICAyOTUgKi8sCisgICAgQ09OU1Q2NCgweEEyQTVEMEY1NEZDMjYyNUMpIC8qICAyOTYgKi8sIENPTlNUNjQoMHhDMDU0RTM2QjBCMTI5MEEzKSAvKiAgMjk3ICovLAorICAgIENPTlNUNjQoMHhGNkRENTlGRjYyRkU5MzJCKSAvKiAgMjk4ICovLCBDT05TVDY0KDB4MzUzNzM1NDUxMUE4QUM3RCkgLyogIDI5OSAqLywKKyAgICBDT05TVDY0KDB4Q0E4NDVFOTE3MkZBRENENCkgLyogIDMwMCAqLywgQ09OU1Q2NCgweDg0RjgyQjYwMzI5RDIwREMpIC8qICAzMDEgKi8sCisgICAgQ09OU1Q2NCgweDc5QzYyQ0UxQ0Q2NzJGMTgpIC8qICAzMDIgKi8sIENPTlNUNjQoMHg4QjA5QTJBREQxMjQ2NDJDKSAvKiAgMzAzICovLAorICAgIENPTlNUNjQoMHhEMEMxRTk2QTE5RDlFNzI2KSAvKiAgMzA0ICovLCBDT05TVDY0KDB4NUE3ODZBOUI0QkE5NTAwQykgLyogIDMwNSAqLywKKyAgICBDT05TVDY0KDB4MEUwMjAzMzY2MzRDNDNGMykgLyogIDMwNiAqLywgQ09OU1Q2NCgweEMxN0I0NzRBRUI2NkQ4MjIpIC8qICAzMDcgKi8sCisgICAgQ09OU1Q2NCgweDZBNzMxQUUzRUM5QkFBQzIpIC8qICAzMDggKi8sIENPTlNUNjQoMHg4MjI2NjY3QUUwODQwMjU4KSAvKiAgMzA5ICovLAorICAgIENPTlNUNjQoMHg2N0Q0NTY3NjkxQ0FFQ0E1KSAvKiAgMzEwICovLCBDT05TVDY0KDB4MUQ5NDE1NUM0ODc1QURCNSkgLyogIDMxMSAqLywKKyAgICBDT05TVDY0KDB4NkQwMEZEOTg1QjgxM0ZERikgLyogIDMxMiAqLywgQ09OU1Q2NCgweDUxMjg2RUZDQjc3NENEMDYpIC8qICAzMTMgKi8sCisgICAgQ09OU1Q2NCgweDVFODgzNDQ3MUZBNzQ0QUYpIC8qICAzMTQgKi8sIENPTlNUNjQoMHhGNzJDQTBBRUU3NjFBRTJFKSAvKiAgMzE1ICovLAorICAgIENPTlNUNjQoMHhCRTQwRTRDREFFRThFMDlBKSAvKiAgMzE2ICovLCBDT05TVDY0KDB4RTk5NzBCQkI1MTE4RjY2NSkgLyogIDMxNyAqLywKKyAgICBDT05TVDY0KDB4NzI2RTRCRUIzM0RGMTk2NCkgLyogIDMxOCAqLywgQ09OU1Q2NCgweDcwM0IwMDA3MjkxOTk3NjIpIC8qICAzMTkgKi8sCisgICAgQ09OU1Q2NCgweDQ2MzFEODE2RjVFRjMwQTcpIC8qICAzMjAgKi8sIENPTlNUNjQoMHhCODgwQjVCNTE1MDRBNkJFKSAvKiAgMzIxICovLAorICAgIENPTlNUNjQoMHg2NDE3OTNDMzdFRDg0QjZDKSAvKiAgMzIyICovLCBDT05TVDY0KDB4N0IyMUVENzdGNkU5N0Q5NikgLyogIDMyMyAqLywKKyAgICBDT05TVDY0KDB4Nzc2MzA2MzEyRUY5NkI3MykgLyogIDMyNCAqLywgQ09OU1Q2NCgweEFFNTI4OTQ4RTg2RkYzRjQpIC8qICAzMjUgKi8sCisgICAgQ09OU1Q2NCgweDUzREJEN0YyODZBM0Y4RjgpIC8qICAzMjYgKi8sIENPTlNUNjQoMHgxNkNBRENFNzRDRkMxMDYzKSAvKiAgMzI3ICovLAorICAgIENPTlNUNjQoMHgwMDVDMTlCREZBNTJDNkREKSAvKiAgMzI4ICovLCBDT05TVDY0KDB4Njg4NjhGNUQ2NEQ0NkFEMykgLyogIDMyOSAqLywKKyAgICBDT05TVDY0KDB4M0E5RDUxMkNDRjFFMTg2QSkgLyogIDMzMCAqLywgQ09OU1Q2NCgweDM2N0U2MkMyMzg1NjYwQUUpIC8qICAzMzEgKi8sCisgICAgQ09OU1Q2NCgweEUzNTlFN0VBNzdEQ0IxRDcpIC8qICAzMzIgKi8sIENPTlNUNjQoMHg1MjZDMDc3Mzc0OUFCRTZFKSAvKiAgMzMzICovLAorICAgIENPTlNUNjQoMHg3MzVBRTVGOUQwOUY3MzRCKSAvKiAgMzM0ICovLCBDT05TVDY0KDB4NDkzRkM3Q0M4QTU1OEJBOCkgLyogIDMzNSAqLywKKyAgICBDT05TVDY0KDB4QjBCOUMxNTMzMDQxQUI0NSkgLyogIDMzNiAqLywgQ09OU1Q2NCgweDMyMTk1OEJBNDcwQTU5QkQpIC8qICAzMzcgKi8sCisgICAgQ09OU1Q2NCgweDg1MkRCMDBCNUY0NkMzOTMpIC8qICAzMzggKi8sIENPTlNUNjQoMHg5MTIwOUIyQkQzMzZCMEU1KSAvKiAgMzM5ICovLAorICAgIENPTlNUNjQoMHg2RTYwNEY3RDY1OUVGMTlGKSAvKiAgMzQwICovLCBDT05TVDY0KDB4Qjk5QThBRTI3ODJDQ0IyNCkgLyogIDM0MSAqLywKKyAgICBDT05TVDY0KDB4Q0NGNTJBQjZDODE0QzRDNykgLyogIDM0MiAqLywgQ09OU1Q2NCgweDQ3MjdEOUFGQkUxMTcyN0IpIC8qICAzNDMgKi8sCisgICAgQ09OU1Q2NCgweDdFOTUwRDBDMDEyMUIzNEQpIC8qICAzNDQgKi8sIENPTlNUNjQoMHg3NTZGNDM1NjcwQUQ0NzFGKSAvKiAgMzQ1ICovLAorICAgIENPTlNUNjQoMHhGNUFERDQ0MjYxNUE2ODQ5KSAvKiAgMzQ2ICovLCBDT05TVDY0KDB4NEU4N0UwOTk4MEI5OTU3QSkgLyogIDM0NyAqLywKKyAgICBDT05TVDY0KDB4MkFDRkExREY1MEFFRTM1NSkgLyogIDM0OCAqLywgQ09OU1Q2NCgweEQ4OTgyNjNBRkQyRkQ1NTYpIC8qICAzNDkgKi8sCisgICAgQ09OU1Q2NCgweEM4RjQ5MjRERDgwQzhGRDYpIC8qICAzNTAgKi8sIENPTlNUNjQoMHhDRjk5Q0EzRDc1NEExNzNBKSAvKiAgMzUxICovLAorICAgIENPTlNUNjQoMHhGRTQ3N0JBQ0FGOTFCRjNDKSAvKiAgMzUyICovLCBDT05TVDY0KDB4RUQ1MzcxRjZENjkwQzEyRCkgLyogIDM1MyAqLywKKyAgICBDT05TVDY0KDB4ODMxQTVDMjg1RTY4NzA5NCkgLyogIDM1NCAqLywgQ09OU1Q2NCgweEM1RDNDOTBBMzcwOEEwQTQpIC8qICAzNTUgKi8sCisgICAgQ09OU1Q2NCgweDBGN0Y5MDM3MTdEMDY1ODApIC8qICAzNTYgKi8sIENPTlNUNjQoMHgxOUY5QkIxM0I4RkRGMjdGKSAvKiAgMzU3ICovLAorICAgIENPTlNUNjQoMHhCMUJENkYxQjRENTAyODQzKSAvKiAgMzU4ICovLCBDT05TVDY0KDB4MUM3NjFCQTM4RkZGNDAxMikgLyogIDM1OSAqLywKKyAgICBDT05TVDY0KDB4MEQxNTMwQzRFMkUyMUYzQikgLyogIDM2MCAqLywgQ09OU1Q2NCgweDg5NDNDRTY5QTczNzJDOEEpIC8qICAzNjEgKi8sCisgICAgQ09OU1Q2NCgweEU1MTg0RTExRkVCNUNFNjYpIC8qICAzNjIgKi8sIENPTlNUNjQoMHg2MThCREI4MEJENzM2NjIxKSAvKiAgMzYzICovLAorICAgIENPTlNUNjQoMHg3RDI5QkFENjhCNTc0RDBCKSAvKiAgMzY0ICovLCBDT05TVDY0KDB4ODFCQjYxM0UyNUU2RkU1QikgLyogIDM2NSAqLywKKyAgICBDT05TVDY0KDB4MDcxQzlDMTBCQzA3OTEzRikgLyogIDM2NiAqLywgQ09OU1Q2NCgweEM3QkVFQjc5MDlBQzJEOTcpIC8qICAzNjcgKi8sCisgICAgQ09OU1Q2NCgweEMzRTU4RDM1M0JDNUQ3NTcpIC8qICAzNjggKi8sIENPTlNUNjQoMHhFQjAxNzg5MkYzOEY2MUU4KSAvKiAgMzY5ICovLAorICAgIENPTlNUNjQoMHhENEVGRkI5QzlCMUNDMjFBKSAvKiAgMzcwICovLCBDT05TVDY0KDB4OTk3MjdEMjZGNDk0RjdBQikgLyogIDM3MSAqLywKKyAgICBDT05TVDY0KDB4QTNFMDYzQTI5NTZCM0UwMykgLyogIDM3MiAqLywgQ09OU1Q2NCgweDlENEE4QjlBNEFBMDlDMzApIC8qICAzNzMgKi8sCisgICAgQ09OU1Q2NCgweDNGNkFCN0Q1MDAwOTBGQjQpIC8qICAzNzQgKi8sIENPTlNUNjQoMHg5Q0MwRjJBMDU3MjY4QUMwKSAvKiAgMzc1ICovLAorICAgIENPTlNUNjQoMHgzREVFOUQyREVEQkY0MkQxKSAvKiAgMzc2ICovLCBDT05TVDY0KDB4MzMwRjQ5Qzg3OTYwQTk3MikgLyogIDM3NyAqLywKKyAgICBDT05TVDY0KDB4QzZCMjcyMDI4NzQyMUI0MSkgLyogIDM3OCAqLywgQ09OU1Q2NCgweDBBQzU5RUMwN0MwMDM2OUMpIC8qICAzNzkgKi8sCisgICAgQ09OU1Q2NCgweEVGNEVBQzQ5Q0IzNTM0MjUpIC8qICAzODAgKi8sIENPTlNUNjQoMHhGNDUwMjQ0RUVGMDEyOUQ4KSAvKiAgMzgxICovLAorICAgIENPTlNUNjQoMHg4QUNDNDZFNUNBRjRERUI2KSAvKiAgMzgyICovLCBDT05TVDY0KDB4MkZGRUFCNjM5ODkyNjNGNykgLyogIDM4MyAqLywKKyAgICBDT05TVDY0KDB4OEY3Q0I5RkU1RDdBNDU3OCkgLyogIDM4NCAqLywgQ09OU1Q2NCgweDVCRDhGNzY0NEU2MzQ2MzUpIC8qICAzODUgKi8sCisgICAgQ09OU1Q2NCgweDQyN0E3MzE1QkYyREM5MDApIC8qICAzODYgKi8sIENPTlNUNjQoMHgxN0QwQzRBQTIxMjUyNjFDKSAvKiAgMzg3ICovLAorICAgIENPTlNUNjQoMHgzOTkyNDg2QzkzNTE4RTUwKSAvKiAgMzg4ICovLCBDT05TVDY0KDB4QjRDQkZFRTBBMkQ3RDRDMykgLyogIDM4OSAqLywKKyAgICBDT05TVDY0KDB4N0M3NUQ2MjAyQzVEREQ4RCkgLyogIDM5MCAqLywgQ09OU1Q2NCgweERCQzI5NUQ4RTM1QjZDNjEpIC8qICAzOTEgKi8sCisgICAgQ09OU1Q2NCgweDYwQjM2OUQzMDIwMzJCMTkpIC8qICAzOTIgKi8sIENPTlNUNjQoMHhDRTQyNjg1RkRDRTQ0MTMyKSAvKiAgMzkzICovLAorICAgIENPTlNUNjQoMHgwNkYzRERCOURERjY1NjEwKSAvKiAgMzk0ICovLCBDT05TVDY0KDB4OEVBNEQyMURCNUUxNDhGMCkgLyogIDM5NSAqLywKKyAgICBDT05TVDY0KDB4MjBCMEZDRTYyRkNENDk2RikgLyogIDM5NiAqLywgQ09OU1Q2NCgweDJDMUI5MTIzNThCMEVFMzEpIC8qICAzOTcgKi8sCisgICAgQ09OU1Q2NCgweEIyODMxN0I4MThGNUEzMDgpIC8qICAzOTggKi8sIENPTlNUNjQoMHhBODlDMUUxODlDQTZEMkNGKSAvKiAgMzk5ICovLAorICAgIENPTlNUNjQoMHgwQzZCMTg1NzZBQUFEQkM4KSAvKiAgNDAwICovLCBDT05TVDY0KDB4QjY1REVBQTkxMjk5RkFFMykgLyogIDQwMSAqLywKKyAgICBDT05TVDY0KDB4RkIyQjc5NEI3RjEwMjdFNykgLyogIDQwMiAqLywgQ09OU1Q2NCgweDA0RTQzMTdGNDQzQjVCRUIpIC8qICA0MDMgKi8sCisgICAgQ09OU1Q2NCgweDRCODUyRDMyNTkzOUQwQTYpIC8qICA0MDQgKi8sIENPTlNUNjQoMHhENUFFNkJFRUZCMjA3RkZDKSAvKiAgNDA1ICovLAorICAgIENPTlNUNjQoMHgzMDk2ODJCMjgxQzdEMzc0KSAvKiAgNDA2ICovLCBDT05TVDY0KDB4QkFFMzA5QTE5NEMzQjQ3NSkgLyogIDQwNyAqLywKKyAgICBDT05TVDY0KDB4OENDM0Y5N0IxM0I0OUYwNSkgLyogIDQwOCAqLywgQ09OU1Q2NCgweDk4QTk0MjJGRjgyOTM5NjcpIC8qICA0MDkgKi8sCisgICAgQ09OU1Q2NCgweDI0NEIxNkIwMTA3NkZGN0MpIC8qICA0MTAgKi8sIENPTlNUNjQoMHhGOEJGNTcxQzY2M0Q2N0VFKSAvKiAgNDExICovLAorICAgIENPTlNUNjQoMHgxRjBENjc1OEVFRTMwREExKSAvKiAgNDEyICovLCBDT05TVDY0KDB4QzlCNjExRDk3QURFQjlCNykgLyogIDQxMyAqLywKKyAgICBDT05TVDY0KDB4QjdBRkQ1ODg3QjZDNTdBMikgLyogIDQxNCAqLywgQ09OU1Q2NCgweDYyOTBBRTg0NkI5ODRGRTEpIC8qICA0MTUgKi8sCisgICAgQ09OU1Q2NCgweDk0REY0Q0RFQUNDMUE1RkQpIC8qICA0MTYgKi8sIENPTlNUNjQoMHgwNThBNUJEMUM1NDgzQUZGKSAvKiAgNDE3ICovLAorICAgIENPTlNUNjQoMHg2MzE2NkNDMTQyQkEzQzM3KSAvKiAgNDE4ICovLCBDT05TVDY0KDB4OERCODUyNkVCMkY3NkY0MCkgLyogIDQxOSAqLywKKyAgICBDT05TVDY0KDB4RTEwODgwMDM2RjBENkQ0RSkgLyogIDQyMCAqLywgQ09OU1Q2NCgweDlFMDUyM0M5OTcxRDMxMUQpIC8qICA0MjEgKi8sCisgICAgQ09OU1Q2NCgweDQ1RUMyODI0Q0M3Q0Q2OTEpIC8qICA0MjIgKi8sIENPTlNUNjQoMHg1NzVCODM1OUU2MjM4MkM5KSAvKiAgNDIzICovLAorICAgIENPTlNUNjQoMHhGQTlFNDAwREM0ODg5OTk1KSAvKiAgNDI0ICovLCBDT05TVDY0KDB4RDE4MjNFQ0I0NTcyMTU2OCkgLyogIDQyNSAqLywKKyAgICBDT05TVDY0KDB4REFGRDk4M0I4MjA2MDgyRikgLyogIDQyNiAqLywgQ09OU1Q2NCgweEFBN0QyOTA4MjM4NkE4Q0IpIC8qICA0MjcgKi8sCisgICAgQ09OU1Q2NCgweDI2OUZDRDQ0MDNCODc1ODgpIC8qICA0MjggKi8sIENPTlNUNjQoMHgxQjkxRjVGNzI4QkREMUUwKSAvKiAgNDI5ICovLAorICAgIENPTlNUNjQoMHhFNDY2OUYzOTA0MDIwMUY2KSAvKiAgNDMwICovLCBDT05TVDY0KDB4N0ExRDdDMjE4Q0YwNEFERSkgLyogIDQzMSAqLywKKyAgICBDT05TVDY0KDB4NjU2MjNDMjlENzlDRTVDRSkgLyogIDQzMiAqLywgQ09OU1Q2NCgweDIzNjg0NDkwOTZDMDBCQjEpIC8qICA0MzMgKi8sCisgICAgQ09OU1Q2NCgweEFCOUJGMTg3OURBNTAzQkEpIC8qICA0MzQgKi8sIENPTlNUNjQoMHhCQzIzRUNCMUE0NTgwNThFKSAvKiAgNDM1ICovLAorICAgIENPTlNUNjQoMHg5QTU4REYwMUJCNDAxRUNDKSAvKiAgNDM2ICovLCBDT05TVDY0KDB4QTA3MEU4NjhBODVGMTQzRCkgLyogIDQzNyAqLywKKyAgICBDT05TVDY0KDB4NEZGMTg4MzA3REYyMjM5RSkgLyogIDQzOCAqLywgQ09OU1Q2NCgweDE0RDU2NUI0MUE2NDExODMpIC8qICA0MzkgKi8sCisgICAgQ09OU1Q2NCgweEVFMTMzMzc0NTI3MDE2MDIpIC8qICA0NDAgKi8sIENPTlNUNjQoMHg5NTBFM0RDRjNGMjg1RTA5KSAvKiAgNDQxICovLAorICAgIENPTlNUNjQoMHg1OTkzMDI1NEI5QzgwOTUzKSAvKiAgNDQyICovLCBDT05TVDY0KDB4M0JGMjk5NDA4OTMwREE2RCkgLyogIDQ0MyAqLywKKyAgICBDT05TVDY0KDB4QTk1NTk0M0Y1MzY5MTM4NykgLyogIDQ0NCAqLywgQ09OU1Q2NCgweEExNUVERUNBQTlDQjg3ODQpIC8qICA0NDUgKi8sCisgICAgQ09OU1Q2NCgweDI5MTQyMTI3MzUyQkU5QTApIC8qICA0NDYgKi8sIENPTlNUNjQoMHg3NkYwMzcxRkZGNEU3QUZCKSAvKiAgNDQ3ICovLAorICAgIENPTlNUNjQoMHgwMjM5RjQ1MDI3NEYyMjI4KSAvKiAgNDQ4ICovLCBDT05TVDY0KDB4QkIwNzNBRjAxRDVFODY4QikgLyogIDQ0OSAqLywKKyAgICBDT05TVDY0KDB4QkZDODA1NzFDMTBFOTZDMSkgLyogIDQ1MCAqLywgQ09OU1Q2NCgweEQyNjcwODg1NjgyMjJFMjMpIC8qICA0NTEgKi8sCisgICAgQ09OU1Q2NCgweDk2NzFBM0Q0OEU4MEI1QjApIC8qICA0NTIgKi8sIENPTlNUNjQoMHg1NUI1RDM4QUUxOTNCQjgxKSAvKiAgNDUzICovLAorICAgIENPTlNUNjQoMHg2OTNBRTJEMEExOEIwNEI4KSAvKiAgNDU0ICovLCBDT05TVDY0KDB4NUM0OEI0RUNBREQ1MzM1RikgLyogIDQ1NSAqLywKKyAgICBDT05TVDY0KDB4RkQ3NDNCMTk0OTE2QTFDQSkgLyogIDQ1NiAqLywgQ09OU1Q2NCgweDI1NzcwMTgxMzRCRTk4QzQpIC8qICA0NTcgKi8sCisgICAgQ09OU1Q2NCgweEU3Nzk4N0U4M0M1NEE0QUQpIC8qICA0NTggKi8sIENPTlNUNjQoMHgyOEUxMTAxNERBMzNFMUI5KSAvKiAgNDU5ICovLAorICAgIENPTlNUNjQoMHgyNzBDQzU5RTIyNkFBMjEzKSAvKiAgNDYwICovLCBDT05TVDY0KDB4NzE0OTVGNzU2RDFBNUY2MCkgLyogIDQ2MSAqLywKKyAgICBDT05TVDY0KDB4OUJFODUzRkI2MEFGRUY3NykgLyogIDQ2MiAqLywgQ09OU1Q2NCgweEFEQzc4NkE3Rjc0NDNEQkYpIC8qICA0NjMgKi8sCisgICAgQ09OU1Q2NCgweDA5MDQ0NTYxNzNCMjlBODIpIC8qICA0NjQgKi8sIENPTlNUNjQoMHg1OEJDN0E2NkMyMzJCRDVFKSAvKiAgNDY1ICovLAorICAgIENPTlNUNjQoMHhGMzA2NTU4QzY3M0FDOEIyKSAvKiAgNDY2ICovLCBDT05TVDY0KDB4NDFGNjM5QzZCNkM5NzcyQSkgLyogIDQ2NyAqLywKKyAgICBDT05TVDY0KDB4MjE2REVGRTk5RkRBMzVEQSkgLyogIDQ2OCAqLywgQ09OU1Q2NCgweDExNjQwQ0M3MUM3QkU2MTUpIC8qICA0NjkgKi8sCisgICAgQ09OU1Q2NCgweDkzQzQzNjk0NTY1QzU1MjcpIC8qICA0NzAgKi8sIENPTlNUNjQoMHhFQTAzOEU2MjQ2Nzc3ODM5KSAvKiAgNDcxICovLAorICAgIENPTlNUNjQoMHhGOUFCRjNDRTVBM0UyNDY5KSAvKiAgNDcyICovLCBDT05TVDY0KDB4NzQxRTc2OEQwRkQzMTJEMikgLyogIDQ3MyAqLywKKyAgICBDT05TVDY0KDB4MDE0NEI4ODNDRUQ2NTJDNikgLyogIDQ3NCAqLywgQ09OU1Q2NCgweEMyMEI1QTVCQTMzRjg1NTIpIC8qICA0NzUgKi8sCisgICAgQ09OU1Q2NCgweDFBRTY5NjMzQzM0MzVBOUQpIC8qICA0NzYgKi8sIENPTlNUNjQoMHg5N0EyOENBNDA4OENGREVDKSAvKiAgNDc3ICovLAorICAgIENPTlNUNjQoMHg4ODI0QTQzQzFFOTZGNDIwKSAvKiAgNDc4ICovLCBDT05TVDY0KDB4Mzc2MTJGQTY2RUVFQTc0NikgLyogIDQ3OSAqLywKKyAgICBDT05TVDY0KDB4NkI0Q0IxNjVGOUNGMEU1QSkgLyogIDQ4MCAqLywgQ09OU1Q2NCgweDQzQUExQzA2QTBBQkZCNEEpIC8qICA0ODEgKi8sCisgICAgQ09OU1Q2NCgweDdGNERDMjZGRjE2Mjc5NkIpIC8qICA0ODIgKi8sIENPTlNUNjQoMHg2Q0JBQ0M4RTU0RUQ5QjBGKSAvKiAgNDgzICovLAorICAgIENPTlNUNjQoMHhBNkI3RkZFRkQyQkIyNTNFKSAvKiAgNDg0ICovLCBDT05TVDY0KDB4MkUyNUJDOTVCMEEyOUQ0RikgLyogIDQ4NSAqLywKKyAgICBDT05TVDY0KDB4ODZENkE1OEJERUYxMzg4QykgLyogIDQ4NiAqLywgQ09OU1Q2NCgweERFRDc0QUM1NzZCNkYwNTQpIC8qICA0ODcgKi8sCisgICAgQ09OU1Q2NCgweDgwMzBCREJDMkI0NTgwNUQpIC8qICA0ODggKi8sIENPTlNUNjQoMHgzQzgxQUY3MEU5NEQ5Mjg5KSAvKiAgNDg5ICovLAorICAgIENPTlNUNjQoMHgzRUZGNkREQTlFMzEwMERCKSAvKiAgNDkwICovLCBDT05TVDY0KDB4QjM4REMzOUZERkNDODg0NykgLyogIDQ5MSAqLywKKyAgICBDT05TVDY0KDB4MTIzODg1NTI4RDE3Qjg3RSkgLyogIDQ5MiAqLywgQ09OU1Q2NCgweEYyREEwRUQyNDBCMUI2NDIpIC8qICA0OTMgKi8sCisgICAgQ09OU1Q2NCgweDQ0Q0VGQURDRDU0QkY5QTkpIC8qICA0OTQgKi8sIENPTlNUNjQoMHgxMzEyMjAwRTQzM0M3RUU2KSAvKiAgNDk1ICovLAorICAgIENPTlNUNjQoMHg5RkZDQzg0RjNBNzhDNzQ4KSAvKiAgNDk2ICovLCBDT05TVDY0KDB4RjBDRDFGNzIyNDg1NzZCQikgLyogIDQ5NyAqLywKKyAgICBDT05TVDY0KDB4RUM2OTc0MDUzNjM4Q0ZFNCkgLyogIDQ5OCAqLywgQ09OU1Q2NCgweDJCQTdCNjdDMENFQzRFNEMpIC8qICA0OTkgKi8sCisgICAgQ09OU1Q2NCgweEFDMkY0REYzRTVDRTMyRUQpIC8qICA1MDAgKi8sIENPTlNUNjQoMHhDQjMzRDE0MzI2RUE0QzExKSAvKiAgNTAxICovLAorICAgIENPTlNUNjQoMHhBNEU5MDQ0Q0M3N0U1OEJDKSAvKiAgNTAyICovLCBDT05TVDY0KDB4NUY1MTMyOTNEOTM0RkNFRikgLyogIDUwMyAqLywKKyAgICBDT05TVDY0KDB4NURDOTY0NTUwNkU1NTQ0NCkgLyogIDUwNCAqLywgQ09OU1Q2NCgweDUwREU0MThGMzE3REU0MEEpIC8qICA1MDUgKi8sCisgICAgQ09OU1Q2NCgweDM4OENCMzFBNjlEREUyNTkpIC8qICA1MDYgKi8sIENPTlNUNjQoMHgyREI0QTgzNDU1ODIwQTg2KSAvKiAgNTA3ICovLAorICAgIENPTlNUNjQoMHg5MDEwQTkxRTg0NzExQUU5KSAvKiAgNTA4ICovLCBDT05TVDY0KDB4NERGN0YwQjdCMTQ5ODM3MSkgLyogIDUwOSAqLywKKyAgICBDT05TVDY0KDB4RDYyQTJFQUJDMDk3NzE3OSkgLyogIDUxMCAqLywgQ09OU1Q2NCgweDIyRkFDMDk3QUE4RDVDMEUpIC8qICA1MTEgKi8sCisgICAgQ09OU1Q2NCgweEY0OUZDQzJGRjFEQUYzOUIpIC8qICA1MTIgKi8sIENPTlNUNjQoMHg0ODdGRDVDNjZGRjI5MjgxKSAvKiAgNTEzICovLAorICAgIENPTlNUNjQoMHhFOEEzMDY2N0ZDRENBODNGKSAvKiAgNTE0ICovLCBDT05TVDY0KDB4MkM5QjRCRTNEMkZDQ0U2MykgLyogIDUxNSAqLywKKyAgICBDT05TVDY0KDB4REEzRkY3NEI5M0ZCQkJDMikgLyogIDUxNiAqLywgQ09OU1Q2NCgweDJGQTE2NUQyRkU3MEJBNjYpIC8qICA1MTcgKi8sCisgICAgQ09OU1Q2NCgweEExMDNFMjc5OTcwRTkzRDQpIC8qICA1MTggKi8sIENPTlNUNjQoMHhCRUNERUM3N0IwRTQ1RTcxKSAvKiAgNTE5ICovLAorICAgIENPTlNUNjQoMHhDRkI0MUU3MjM5ODVFNDk3KSAvKiAgNTIwICovLCBDT05TVDY0KDB4QjcwQUFBMDI1RUY3NTAxNykgLyogIDUyMSAqLywKKyAgICBDT05TVDY0KDB4RDQyMzA5RjAzODQwQjhFMCkgLyogIDUyMiAqLywgQ09OU1Q2NCgweDhFRkMxQUQwMzU4OTg1NzkpIC8qICA1MjMgKi8sCisgICAgQ09OU1Q2NCgweDk2QzY5MjBCRTJCMkFCQzUpIC8qICA1MjQgKi8sIENPTlNUNjQoMHg2NkFGNDE2MzM3NUE5MTcyKSAvKiAgNTI1ICovLAorICAgIENPTlNUNjQoMHgyMTc0QUJEQ0NBNzEyN0ZCKSAvKiAgNTI2ICovLCBDT05TVDY0KDB4QjMzQ0NFQTY0QTcyRkY0MSkgLyogIDUyNyAqLywKKyAgICBDT05TVDY0KDB4RjA0QTQ5MzMwODMwNjZBNSkgLyogIDUyOCAqLywgQ09OU1Q2NCgweDhEOTcwQUNERDcyODlBRjUpIC8qICA1MjkgKi8sCisgICAgQ09OU1Q2NCgweDhGOTZFOEUwMzFDOEMyNUUpIC8qICA1MzAgKi8sIENPTlNUNjQoMHhGM0ZFQzAyMjc2ODc1RDQ3KSAvKiAgNTMxICovLAorICAgIENPTlNUNjQoMHhFQzdCRjMxMDA1NjE5MEREKSAvKiAgNTMyICovLCBDT05TVDY0KDB4RjVBREIwQUVCQjBGMTQ5MSkgLyogIDUzMyAqLywKKyAgICBDT05TVDY0KDB4OUI1MEY4ODUwRkQ1ODg5MikgLyogIDUzNCAqLywgQ09OU1Q2NCgweDQ5NzU0ODgzNThCNzRERTgpIC8qICA1MzUgKi8sCisgICAgQ09OU1Q2NCgweEEzMzU0RkY2OTE1MzFDNjEpIC8qICA1MzYgKi8sIENPTlNUNjQoMHgwNzAyQkJFNDgxRDJDNkVFKSAvKiAgNTM3ICovLAorICAgIENPTlNUNjQoMHg4OUZCMjQwNTdERURFRDk4KSAvKiAgNTM4ICovLCBDT05TVDY0KDB4QUMzMDc1MTM4NTk2RTkwMikgLyogIDUzOSAqLywKKyAgICBDT05TVDY0KDB4MUQyRDM1ODAxNzI3NzJFRCkgLyogIDU0MCAqLywgQ09OU1Q2NCgweEVCNzM4RkMyOEU2QkMzMEQpIC8qICA1NDEgKi8sCisgICAgQ09OU1Q2NCgweDU4NTRFRjhGNjMwNDQzMjYpIC8qICA1NDIgKi8sIENPTlNUNjQoMHg5RTVDNTIzMjVBREQzQkJFKSAvKiAgNTQzICovLAorICAgIENPTlNUNjQoMHg5MEFBNTNDRjMyNUM0NjIzKSAvKiAgNTQ0ICovLCBDT05TVDY0KDB4QzFEMjRENTEzNDlERDA2NykgLyogIDU0NSAqLywKKyAgICBDT05TVDY0KDB4MjA1MUNGRUVBNjlFQTYyNCkgLyogIDU0NiAqLywgQ09OU1Q2NCgweDEzMjIwRjBBODYyRTdFNEYpIC8qICA1NDcgKi8sCisgICAgQ09OU1Q2NCgweENFMzkzOTk0MDRFMDQ4NjQpIC8qICA1NDggKi8sIENPTlNUNjQoMHhEOUM0MkNBNDcwODZGQ0I3KSAvKiAgNTQ5ICovLAorICAgIENPTlNUNjQoMHg2ODVBRDIyMzhBMDNFN0NDKSAvKiAgNTUwICovLCBDT05TVDY0KDB4MDY2NDg0QjJBQjJGRjFEQikgLyogIDU1MSAqLywKKyAgICBDT05TVDY0KDB4RkU5RDVENzBFRkJGNzlFQykgLyogIDU1MiAqLywgQ09OU1Q2NCgweDVCMTNCOUREOUM0ODE4NTQpIC8qICA1NTMgKi8sCisgICAgQ09OU1Q2NCgweDE1RjBENDc1RUQxNTA5QUQpIC8qICA1NTQgKi8sIENPTlNUNjQoMHgwQkVCQ0QwNjBFQzc5ODUxKSAvKiAgNTU1ICovLAorICAgIENPTlNUNjQoMHhENThDNjc5MTE4M0FCN0Y4KSAvKiAgNTU2ICovLCBDT05TVDY0KDB4RDExODdDNTA1MkYzRUVFNCkgLyogIDU1NyAqLywKKyAgICBDT05TVDY0KDB4Qzk1RDExOTJFNTRFODJGRikgLyogIDU1OCAqLywgQ09OU1Q2NCgweDg2RUVBMTRDQjlBQzZDQTIpIC8qICA1NTkgKi8sCisgICAgQ09OU1Q2NCgweDM0ODVCRUIxNTM2NzdENUQpIC8qICA1NjAgKi8sIENPTlNUNjQoMHhERDE5MUQ3ODFGOEM0OTJBKSAvKiAgNTYxICovLAorICAgIENPTlNUNjQoMHhGNjA4NjZCQUE3ODRFQkY5KSAvKiAgNTYyICovLCBDT05TVDY0KDB4NTE4RjY0M0JBMkQwOEM3NCkgLyogIDU2MyAqLywKKyAgICBDT05TVDY0KDB4ODg1MkU5NTZFMTA4N0MyMikgLyogIDU2NCAqLywgQ09OU1Q2NCgweEE3NjhDQjhEQzQxMEFFOEQpIC8qICA1NjUgKi8sCisgICAgQ09OU1Q2NCgweDM4MDQ3NzI2QkZFQzhFMUEpIC8qICA1NjYgKi8sIENPTlNUNjQoMHhBNjc3MzhCNENEM0I0NUFBKSAvKiAgNTY3ICovLAorICAgIENPTlNUNjQoMHhBRDE2NjkxQ0VDMERERTE5KSAvKiAgNTY4ICovLCBDT05TVDY0KDB4QzZENDMxOTM4MDQ2MkUwNykgLyogIDU2OSAqLywKKyAgICBDT05TVDY0KDB4QzVBNTg3NkQwQkE2MTkzOCkgLyogIDU3MCAqLywgQ09OU1Q2NCgweDE2QjlGQTFGQTU4RkQ4NDApIC8qICA1NzEgKi8sCisgICAgQ09OU1Q2NCgweDE4OEFCMTE3M0NBNzRGMTgpIC8qICA1NzIgKi8sIENPTlNUNjQoMHhBQkRBMkY5OEM5OUMwMjFGKSAvKiAgNTczICovLAorICAgIENPTlNUNjQoMHgzRTA1ODBBQjEzNEFFODE2KSAvKiAgNTc0ICovLCBDT05TVDY0KDB4NUYzQjA1Qjc3MzY0NUFCQikgLyogIDU3NSAqLywKKyAgICBDT05TVDY0KDB4MjUwMUEyQkU1NTc1RjJGNikgLyogIDU3NiAqLywgQ09OU1Q2NCgweDFCMkY3NDAwNEU3RThCQTkpIC8qICA1NzcgKi8sCisgICAgQ09OU1Q2NCgweDFDRDc1ODAzNzFFOEQ5NTMpIC8qICA1NzggKi8sIENPTlNUNjQoMHg3RjZFRDg5NTYyNzY0RTMwKSAvKiAgNTc5ICovLAorICAgIENPTlNUNjQoMHhCMTU5MjZGRjU5NkYwMDNEKSAvKiAgNTgwICovLCBDT05TVDY0KDB4OUY2NTI5M0RBOEM1RDZCOSkgLyogIDU4MSAqLywKKyAgICBDT05TVDY0KDB4NkVDRUYwNERENjkwRjg0QykgLyogIDU4MiAqLywgQ09OU1Q2NCgweDQ3ODIyNzVGRkYzM0FGODgpIC8qICA1ODMgKi8sCisgICAgQ09OU1Q2NCgweEU0MTQzMzA4M0Y4MjA4MDEpIC8qICA1ODQgKi8sIENPTlNUNjQoMHhGRDBERkU0MDlBMUFGOUI1KSAvKiAgNTg1ICovLAorICAgIENPTlNUNjQoMHg0MzI1QTMzNDJDREIzOTZCKSAvKiAgNTg2ICovLCBDT05TVDY0KDB4OEFFNzdFNjJCMzAxQjI1MikgLyogIDU4NyAqLywKKyAgICBDT05TVDY0KDB4QzM2RjlFOUY2NjU1NjE1QSkgLyogIDU4OCAqLywgQ09OU1Q2NCgweDg1NDU1QTJEOTJEMzJDMDkpIC8qICA1ODkgKi8sCisgICAgQ09OU1Q2NCgweEYyQzdERUE5NDk0Nzc0ODUpIC8qICA1OTAgKi8sIENPTlNUNjQoMHg2M0NGQjRDMTMzQTM5RUJBKSAvKiAgNTkxICovLAorICAgIENPTlNUNjQoMHg4M0IwNDBDQzZFQkM1NDYyKSAvKiAgNTkyICovLCBDT05TVDY0KDB4M0I5NDU0QzhGREIzMjZCMCkgLyogIDU5MyAqLywKKyAgICBDT05TVDY0KDB4NTZGNTZBOUU4N0ZGRDc4QykgLyogIDU5NCAqLywgQ09OU1Q2NCgweDJEQzI5NDBEOTlGNDJCQzYpIC8qICA1OTUgKi8sCisgICAgQ09OU1Q2NCgweDk4RjdERjA5NkIwOTZFMkQpIC8qICA1OTYgKi8sIENPTlNUNjQoMHgxOUE2RTAxRTNBRDg1MkJGKSAvKiAgNTk3ICovLAorICAgIENPTlNUNjQoMHg0MkE5OUNDQkRCRDRCNDBCKSAvKiAgNTk4ICovLCBDT05TVDY0KDB4QTU5OTk4QUY0NUU5QzU1OSkgLyogIDU5OSAqLywKKyAgICBDT05TVDY0KDB4MzY2Mjk1RTgwN0Q5MzE4NikgLyogIDYwMCAqLywgQ09OU1Q2NCgweDZCNDgxODFCRkFBMUY3NzMpIC8qICA2MDEgKi8sCisgICAgQ09OU1Q2NCgweDFGRUM1N0UyMTU3QTBBMUQpIC8qICA2MDIgKi8sIENPTlNUNjQoMHg0NjY3NDQ2QUY2MjAxQUQ1KSAvKiAgNjAzICovLAorICAgIENPTlNUNjQoMHhFNjE1RUJDQUNGQjBGMDc1KSAvKiAgNjA0ICovLCBDT05TVDY0KDB4QjhGMzFGNEY2ODI5MDc3OCkgLyogIDYwNSAqLywKKyAgICBDT05TVDY0KDB4MjI3MTNFRDZDRTIyRDExRSkgLyogIDYwNiAqLywgQ09OU1Q2NCgweDMwNTdDMUE3MkVDM0M5M0IpIC8qICA2MDcgKi8sCisgICAgQ09OU1Q2NCgweENCNDZBQ0MzN0MzRjFGMkYpIC8qICA2MDggKi8sIENPTlNUNjQoMHhEQkI4OTNGRDAyQUFGNTBFKSAvKiAgNjA5ICovLAorICAgIENPTlNUNjQoMHgzMzFGRDkyRTYwMEI5RkNGKSAvKiAgNjEwICovLCBDT05TVDY0KDB4QTQ5OEY5NjE0OEVBM0FENikgLyogIDYxMSAqLywKKyAgICBDT05TVDY0KDB4QThEODQyNkU4QjZBODNFQSkgLyogIDYxMiAqLywgQ09OU1Q2NCgweEEwODlCMjc0Qjc3MzVDREMpIC8qICA2MTMgKi8sCisgICAgQ09OU1Q2NCgweDg3RjZCMzczMUU1MjRBMTEpIC8qICA2MTQgKi8sIENPTlNUNjQoMHgxMTg4MDhFNUNCQzk2NzQ5KSAvKiAgNjE1ICovLAorICAgIENPTlNUNjQoMHg5OTA2RTRDN0IxOUJEMzk0KSAvKiAgNjE2ICovLCBDT05TVDY0KDB4QUZFRDdGN0U5QjI0QTIwQykgLyogIDYxNyAqLywKKyAgICBDT05TVDY0KDB4NjUwOUVBREVFQjM2NDRBNykgLyogIDYxOCAqLywgQ09OU1Q2NCgweDZDMUVGMUQzRThFRjBFREUpIC8qICA2MTkgKi8sCisgICAgQ09OU1Q2NCgweEI5Qzk3RDQzRTk3OThGQjQpIC8qICA2MjAgKi8sIENPTlNUNjQoMHhBMkYyRDc4NDc0MEMyOEEzKSAvKiAgNjIxICovLAorICAgIENPTlNUNjQoMHg3Qjg0OTY0NzYxOTc1NjZGKSAvKiAgNjIyICovLCBDT05TVDY0KDB4N0E1QkUzRTZCNjVGMDY5RCkgLyogIDYyMyAqLywKKyAgICBDT05TVDY0KDB4Rjk2MzMwRUQ3OEJFNkYxMCkgLyogIDYyNCAqLywgQ09OU1Q2NCgweEVFRTYwREU3N0EwNzZBMTUpIC8qICA2MjUgKi8sCisgICAgQ09OU1Q2NCgweDJCNEJFRTRBQTA4QjlCRDApIC8qICA2MjYgKi8sIENPTlNUNjQoMHg2QTU2QTYzRUM3Qjg4OTRFKSAvKiAgNjI3ICovLAorICAgIENPTlNUNjQoMHgwMjEyMTM1OUJBMzRGRUY0KSAvKiAgNjI4ICovLCBDT05TVDY0KDB4NENCRjk5RjgyODM3MDNGQykgLyogIDYyOSAqLywKKyAgICBDT05TVDY0KDB4Mzk4MDcxMzUwQ0FGMzBDOCkgLyogIDYzMCAqLywgQ09OU1Q2NCgweEQwQTc3QTg5RjAxNzY4N0EpIC8qICA2MzEgKi8sCisgICAgQ09OU1Q2NCgweEYxQzFBOUVCOUU0MjM1NjkpIC8qICA2MzIgKi8sIENPTlNUNjQoMHg4Qzc5NzYyODJERUU4MTk5KSAvKiAgNjMzICovLAorICAgIENPTlNUNjQoMHg1RDE3MzdBNUREMUY3QUJEKSAvKiAgNjM0ICovLCBDT05TVDY0KDB4NEY1MzQzM0MwOUE5RkE4MCkgLyogIDYzNSAqLywKKyAgICBDT05TVDY0KDB4RkE4QjBDNTNERjdDQTFEOSkgLyogIDYzNiAqLywgQ09OU1Q2NCgweDNGRDlEQ0JDODg2Q0NCNzcpIC8qICA2MzcgKi8sCisgICAgQ09OU1Q2NCgweEMwNDA5MTdDQTkxQjQ3MjApIC8qICA2MzggKi8sIENPTlNUNjQoMHg3REQwMDE0MkY5RDFEQ0RGKSAvKiAgNjM5ICovLAorICAgIENPTlNUNjQoMHg4NDc2RkMxRDRGMzg3QjU4KSAvKiAgNjQwICovLCBDT05TVDY0KDB4MjNGOEU3QzVGMzMxNjUwMykgLyogIDY0MSAqLywKKyAgICBDT05TVDY0KDB4MDMyQTIyNDRFN0UzNzMzOSkgLyogIDY0MiAqLywgQ09OU1Q2NCgweDVDODdBNUQ3NTBGNUE3NEIpIC8qICA2NDMgKi8sCisgICAgQ09OU1Q2NCgweDA4MkI0Q0M0MzY5ODk5MkUpIC8qICA2NDQgKi8sIENPTlNUNjQoMHhERjkxN0JFQ0I4NThGNjNDKSAvKiAgNjQ1ICovLAorICAgIENPTlNUNjQoMHgzMjcwQjhGQzVCRjg2RERBKSAvKiAgNjQ2ICovLCBDT05TVDY0KDB4MTBBRTcyQkIyOUI1REQ3NikgLyogIDY0NyAqLywKKyAgICBDT05TVDY0KDB4NTc2QUM5NEU3NzAwMzYyQikgLyogIDY0OCAqLywgQ09OU1Q2NCgweDFBRDExMkRBQzYxRUZCOEYpIC8qICA2NDkgKi8sCisgICAgQ09OU1Q2NCgweDY5MUJDMzBFQzVGQUE0MjcpIC8qICA2NTAgKi8sIENPTlNUNjQoMHhGRjI0NjMxMUNDMzI3MTQzKSAvKiAgNjUxICovLAorICAgIENPTlNUNjQoMHgzMTQyMzY4RTMwRTUzMjA2KSAvKiAgNjUyICovLCBDT05TVDY0KDB4NzEzODBFMzFFMDJDQTM5NikgLyogIDY1MyAqLywKKyAgICBDT05TVDY0KDB4OTU4RDVDOTYwQUFENzZGMSkgLyogIDY1NCAqLywgQ09OU1Q2NCgweEY4RDZGNDMwQzE2REE1MzYpIC8qICA2NTUgKi8sCisgICAgQ09OU1Q2NCgweEM4RkZEMTNGMUJFN0UxRDIpIC8qICA2NTYgKi8sIENPTlNUNjQoMHg3NTc4QUU2NjAwNEREQkUxKSAvKiAgNjU3ICovLAorICAgIENPTlNUNjQoMHgwNTgzM0YwMTA2N0JFNjQ2KSAvKiAgNjU4ICovLCBDT05TVDY0KDB4QkIzNEI1QUQzQkZFNTg2RCkgLyogIDY1OSAqLywKKyAgICBDT05TVDY0KDB4MDk1RjM0QzlBMTJCOTdGMCkgLyogIDY2MCAqLywgQ09OU1Q2NCgweDI0N0FCNjQ1MjVENjBDQTgpIC8qICA2NjEgKi8sCisgICAgQ09OU1Q2NCgweERDREJDNkYzMDE3NDc3RDEpIC8qICA2NjIgKi8sIENPTlNUNjQoMHg0QTJFMTRENERFQ0FEMjREKSAvKiAgNjYzICovLAorICAgIENPTlNUNjQoMHhCREI1RTZEOUJFMEExRUVCKSAvKiAgNjY0ICovLCBDT05TVDY0KDB4MkE3RTcwRjc3OTQzMDFBQikgLyogIDY2NSAqLywKKyAgICBDT05TVDY0KDB4REVGNDJEOEEyNzA1NDBGRCkgLyogIDY2NiAqLywgQ09OU1Q2NCgweDAxMDc4RUMwQTM0QzIyQzEpIC8qICA2NjcgKi8sCisgICAgQ09OU1Q2NCgweEU1REU1MTFBRjRDMTYzODcpIC8qICA2NjggKi8sIENPTlNUNjQoMHg3RUJCM0E1MkJEOUEzMzBBKSAvKiAgNjY5ICovLAorICAgIENPTlNUNjQoMHg3NzY5Nzg1N0FBN0Q2NDM1KSAvKiAgNjcwICovLCBDT05TVDY0KDB4MDA0RTgzMTYwM0FFNEMzMikgLyogIDY3MSAqLywKKyAgICBDT05TVDY0KDB4RTdBMjEwMjBBRDc4RTMxMikgLyogIDY3MiAqLywgQ09OU1Q2NCgweDlENDFBNzBDNkFCNDIwRjIpIC8qICA2NzMgKi8sCisgICAgQ09OU1Q2NCgweDI4RTA2QzE4RUExMTQxRTYpIC8qICA2NzQgKi8sIENPTlNUNjQoMHhEMkIyOENCRDk4NEY2QjI4KSAvKiAgNjc1ICovLAorICAgIENPTlNUNjQoMHgyNkI3NUY2QzQ0NkU5RDgzKSAvKiAgNjc2ICovLCBDT05TVDY0KDB4QkE0NzU2OEM0RDQxOEQ3RikgLyogIDY3NyAqLywKKyAgICBDT05TVDY0KDB4RDgwQkFEQkZFNjE4M0Q4RSkgLyogIDY3OCAqLywgQ09OU1Q2NCgweDBFMjA2RDdGNUYxNjYwNDQpIC8qICA2NzkgKi8sCisgICAgQ09OU1Q2NCgweEUyNThBNDM5MTFDQkNBM0UpIC8qICA2ODAgKi8sIENPTlNUNjQoMHg3MjNBMTc0NkIyMURDMEJDKSAvKiAgNjgxICovLAorICAgIENPTlNUNjQoMHhDN0NBQTg1NEY1RDdDREQzKSAvKiAgNjgyICovLCBDT05TVDY0KDB4N0NBQzMyODgzRDI2MUQ5QykgLyogIDY4MyAqLywKKyAgICBDT05TVDY0KDB4NzY5MEMyNjQyM0JBOTQyQykgLyogIDY4NCAqLywgQ09OU1Q2NCgweDE3RTU1NTI0NDc4MDQyQjgpIC8qICA2ODUgKi8sCisgICAgQ09OU1Q2NCgweEUwQkU0Nzc2NTZBMjM4OUYpIC8qICA2ODYgKi8sIENPTlNUNjQoMHg0RDI4OUI1RTY3QUIyREEwKSAvKiAgNjg3ICovLAorICAgIENPTlNUNjQoMHg0NDg2MkI5QzhGQkJGRDMxKSAvKiAgNjg4ICovLCBDT05TVDY0KDB4QjQ3Q0M4MDQ5RDE0MTM2NSkgLyogIDY4OSAqLywKKyAgICBDT05TVDY0KDB4ODIyQzFCMzYyQjkxQzc5MykgLyogIDY5MCAqLywgQ09OU1Q2NCgweDRFQjE0NjU1RkIxM0RGRDgpIC8qICA2OTEgKi8sCisgICAgQ09OU1Q2NCgweDFFQ0JCQTA3MTRFMkE5N0IpIC8qICA2OTIgKi8sIENPTlNUNjQoMHg2MTQzNDU5RDVDREU1RjE0KSAvKiAgNjkzICovLAorICAgIENPTlNUNjQoMHg1M0E4RkJGMUQ1RjBBQzg5KSAvKiAgNjk0ICovLCBDT05TVDY0KDB4OTdFQTA0RDgxQzVFNUIwMCkgLyogIDY5NSAqLywKKyAgICBDT05TVDY0KDB4NjIyMTgxQThENEZEQjNGMykgLyogIDY5NiAqLywgQ09OU1Q2NCgweEU5QkNEMzQxNTcyQTEyMDgpIC8qICA2OTcgKi8sCisgICAgQ09OU1Q2NCgweDE0MTEyNTg2NDNDQ0U1OEEpIC8qICA2OTggKi8sIENPTlNUNjQoMHg5MTQ0QzVGRUE0QzZFMEE0KSAvKiAgNjk5ICovLAorICAgIENPTlNUNjQoMHgwRDMzRDA2NTY1Q0Y2MjBGKSAvKiAgNzAwICovLCBDT05TVDY0KDB4NTRBNDhENDg5RjIxOUNBMSkgLyogIDcwMSAqLywKKyAgICBDT05TVDY0KDB4QzQzRTVFQUM2RDYzQzgyMSkgLyogIDcwMiAqLywgQ09OU1Q2NCgweEE5NzI4QjNBNzI3NzBEQUYpIC8qICA3MDMgKi8sCisgICAgQ09OU1Q2NCgweEQ3OTM0RTdCMjBERjg3RUYpIC8qICA3MDQgKi8sIENPTlNUNjQoMHhFMzU1MDNCNjFBM0U4NkU1KSAvKiAgNzA1ICovLAorICAgIENPTlNUNjQoMHhDQUUzMjFGQkM4MTlENTA0KSAvKiAgNzA2ICovLCBDT05TVDY0KDB4MTI5QTUwQjNBQzYwQkZBNikgLyogIDcwNyAqLywKKyAgICBDT05TVDY0KDB4Q0Q1RTY4RUE3RTlGQjZDMykgLyogIDcwOCAqLywgQ09OU1Q2NCgweEIwMUM5MDE5OTQ4M0IxQzcpIC8qICA3MDkgKi8sCisgICAgQ09OU1Q2NCgweDNERTkzQ0Q1QzI5NTM3NkMpIC8qICA3MTAgKi8sIENPTlNUNjQoMHhBRUQ1MkVERjJBQjlBRDEzKSAvKiAgNzExICovLAorICAgIENPTlNUNjQoMHgyRTYwRjUxMkMwQTA3ODg0KSAvKiAgNzEyICovLCBDT05TVDY0KDB4QkMzRDg2QTNFMzYyMTBDOSkgLyogIDcxMyAqLywKKyAgICBDT05TVDY0KDB4MzUyNjlEOUIxNjM5NTFDRSkgLyogIDcxNCAqLywgQ09OU1Q2NCgweDBDN0Q2RTJBRDBDREI1RkEpIC8qICA3MTUgKi8sCisgICAgQ09OU1Q2NCgweDU5RTg2Mjk3RDg3RjU3MzMpIC8qICA3MTYgKi8sIENPTlNUNjQoMHgyOThFRjIyMTg5OERCMEU3KSAvKiAgNzE3ICovLAorICAgIENPTlNUNjQoMHg1NTAwMDAyOUQxQTVBQTdFKSAvKiAgNzE4ICovLCBDT05TVDY0KDB4OEJDMDhBRTFCNTA2MUI0NSkgLyogIDcxOSAqLywKKyAgICBDT05TVDY0KDB4QzJDMzFDMkI2QzkyNzAzQSkgLyogIDcyMCAqLywgQ09OU1Q2NCgweDk0Q0M1OTZCQUYyNUVGNDIpIC8qICA3MjEgKi8sCisgICAgQ09OU1Q2NCgweDBBMUQ3M0RCMjI1NDA0NTYpIC8qICA3MjIgKi8sIENPTlNUNjQoMHgwNEI2QTBGOUQ5QzQxNzlBKSAvKiAgNzIzICovLAorICAgIENPTlNUNjQoMHhFRkZEQUZBMkFFM0QzQzYwKSAvKiAgNzI0ICovLCBDT05TVDY0KDB4RjdDODA3NUJCNDk0OTZDNCkgLyogIDcyNSAqLywKKyAgICBDT05TVDY0KDB4OUNDNUM3MTQxRDFDRDRFMykgLyogIDcyNiAqLywgQ09OU1Q2NCgweDc4QkQxNjM4MjE4RTU1MzQpIC8qICA3MjcgKi8sCisgICAgQ09OU1Q2NCgweEIyRjExNTY4Rjg1MDI0NkEpIC8qICA3MjggKi8sIENPTlNUNjQoMHhFREZBQkNGQTk1MDJCQzI5KSAvKiAgNzI5ICovLAorICAgIENPTlNUNjQoMHg3OTZDRTVGMkRBMjMwNTFCKSAvKiAgNzMwICovLCBDT05TVDY0KDB4QUFFMTI4QjBEQzkzNTM3QykgLyogIDczMSAqLywKKyAgICBDT05TVDY0KDB4M0E0OTNEQTBFRTRCMjlBRSkgLyogIDczMiAqLywgQ09OU1Q2NCgweEI1REY2QjJDNDE2ODk1RDcpIC8qICA3MzMgKi8sCisgICAgQ09OU1Q2NCgweEZDQUJCRDI1MTIyRDdGMzcpIC8qICA3MzQgKi8sIENPTlNUNjQoMHg3MDgxMEI1ODEwNURDNEIxKSAvKiAgNzM1ICovLAorICAgIENPTlNUNjQoMHhFMTBGREQzN0Y3ODgyQTkwKSAvKiAgNzM2ICovLCBDT05TVDY0KDB4NTI0RENBQjU1MThBM0Y1QykgLyogIDczNyAqLywKKyAgICBDT05TVDY0KDB4M0M5RTg1ODc4NDUxMjU1QikgLyogIDczOCAqLywgQ09OU1Q2NCgweDQwMjk4MjgxMTlCRDM0RTIpIC8qICA3MzkgKi8sCisgICAgQ09OU1Q2NCgweDc0QTA1QjZGNUQzQ0VDQ0IpIC8qICA3NDAgKi8sIENPTlNUNjQoMHhCNjEwMDIxNTQyRTEzRUNBKSAvKiAgNzQxICovLAorICAgIENPTlNUNjQoMHgwRkY5NzlEMTJGNTlFMkFDKSAvKiAgNzQyICovLCBDT05TVDY0KDB4NjAzN0RBMjdFNEY5Q0M1MCkgLyogIDc0MyAqLywKKyAgICBDT05TVDY0KDB4NUU5Mjk3NUEwREYxODQ3RCkgLyogIDc0NCAqLywgQ09OU1Q2NCgweEQ2NkRFMTkwRDNFNjIzRkUpIC8qICA3NDUgKi8sCisgICAgQ09OU1Q2NCgweDUwMzJENkI4N0I1NjgwNDgpIC8qICA3NDYgKi8sIENPTlNUNjQoMHg5QTM2QjdDRTgyMzUyMTZFKSAvKiAgNzQ3ICovLAorICAgIENPTlNUNjQoMHg4MDI3MkE3QTI0RjY0QjRBKSAvKiAgNzQ4ICovLCBDT05TVDY0KDB4OTNFRkVEOEI4QzY5MTZGNykgLyogIDc0OSAqLywKKyAgICBDT05TVDY0KDB4MzdEREJGRjQ0Q0NFMTU1NSkgLyogIDc1MCAqLywgQ09OU1Q2NCgweDRCOTVEQjVENEI5OUJEMjUpIC8qICA3NTEgKi8sCisgICAgQ09OU1Q2NCgweDkyRDNGREExNjk4MTJGQzApIC8qICA3NTIgKi8sIENPTlNUNjQoMHhGQjFBNEE5QTkwNjYwQkI2KSAvKiAgNzUzICovLAorICAgIENPTlNUNjQoMHg3MzBDMTk2OTQ2QTRCOUIyKSAvKiAgNzU0ICovLCBDT05TVDY0KDB4ODFFMjg5QUE3RjQ5REE2OCkgLyogIDc1NSAqLywKKyAgICBDT05TVDY0KDB4NjQ2NjlBMEY4M0IxQTA1RikgLyogIDc1NiAqLywgQ09OU1Q2NCgweDI3QjNGRjdEOTY0NEY0OEIpIC8qICA3NTcgKi8sCisgICAgQ09OU1Q2NCgweENDNkI2MTVDOERCNjc1QjMpIC8qICA3NTggKi8sIENPTlNUNjQoMHg2NzRGMjBCOUJDRUJCRTk1KSAvKiAgNzU5ICovLAorICAgIENPTlNUNjQoMHg2RjMxMjM4Mjc1NjU1OTgyKSAvKiAgNzYwICovLCBDT05TVDY0KDB4NUFFNDg4NzEzRTQ1Q0YwNSkgLyogIDc2MSAqLywKKyAgICBDT05TVDY0KDB4QkY2MTlGOTk1NEMyMTE1NykgLyogIDc2MiAqLywgQ09OU1Q2NCgweEVBQkFDNDYwNDBBOEVBRTkpIC8qICA3NjMgKi8sCisgICAgQ09OU1Q2NCgweDQ1NEM2RkU5RjJDMEMxQ0QpIC8qICA3NjQgKi8sIENPTlNUNjQoMHg0MTlDRjY0OTY0MTI2OTFDKSAvKiAgNzY1ICovLAorICAgIENPTlNUNjQoMHhEM0RDM0JFRjI2NUIwRjcwKSAvKiAgNzY2ICovLCBDT05TVDY0KDB4NkQwRTYwRjVDMzU3OEE5RSkgLyogIDc2NyAqLywKKyAgICBDT05TVDY0KDB4NUIwRTYwODUyNjMyM0M1NSkgLyogIDc2OCAqLywgQ09OU1Q2NCgweDFBNDZDMUE5RkExQjU5RjUpIC8qICA3NjkgKi8sCisgICAgQ09OU1Q2NCgweEE5RTI0NUExN0M0QzhGRkEpIC8qICA3NzAgKi8sIENPTlNUNjQoMHg2NUNBNTE1OURCMjk1NUQ3KSAvKiAgNzcxICovLAorICAgIENPTlNUNjQoMHgwNURCMEE3NkNFMzVBRkMyKSAvKiAgNzcyICovLCBDT05TVDY0KDB4ODFFQUM3N0VBOTExM0Q0NSkgLyogIDc3MyAqLywKKyAgICBDT05TVDY0KDB4NTI4RUY4OEFCNkFDMEEwRCkgLyogIDc3NCAqLywgQ09OU1Q2NCgweEEwOUVBMjUzNTk3QkUzRkYpIC8qICA3NzUgKi8sCisgICAgQ09OU1Q2NCgweDQzMERERkIzQUM0OENENTYpIC8qICA3NzYgKi8sIENPTlNUNjQoMHhDNEIzQTY3QUY0NUNFNDZGKSAvKiAgNzc3ICovLAorICAgIENPTlNUNjQoMHg0RUNFQ0ZEOEZCRTJEMDVFKSAvKiAgNzc4ICovLCBDT05TVDY0KDB4M0VGNTZGMTBCMzk5MzVGMCkgLyogIDc3OSAqLywKKyAgICBDT05TVDY0KDB4MEIyMkQ2ODI5Q0Q2MTlDNikgLyogIDc4MCAqLywgQ09OU1Q2NCgweDE3RkQ0NjBBNzRERjIwNjkpIC8qICA3ODEgKi8sCisgICAgQ09OU1Q2NCgweDZDRjhDQzhFODUxMEVENDApIC8qICA3ODIgKi8sIENPTlNUNjQoMHhENkM4MjRCRjNBNkVDQUE3KSAvKiAgNzgzICovLAorICAgIENPTlNUNjQoMHg2MTI0M0Q1ODFBODE3MDQ5KSAvKiAgNzg0ICovLCBDT05TVDY0KDB4MDQ4QkFDQjZCQkMxNjNBMikgLyogIDc4NSAqLywKKyAgICBDT05TVDY0KDB4RDlBMzhBQzI3RDQ0Q0MzMikgLyogIDc4NiAqLywgQ09OU1Q2NCgweDdGRERGRjVCQUFGNDEwQUIpIC8qICA3ODcgKi8sCisgICAgQ09OU1Q2NCgweEFENkQ0OTVBQTgwNDgyNEIpIC8qICA3ODggKi8sIENPTlNUNjQoMHhFMUE2QTc0RjJEOEM5Rjk0KSAvKiAgNzg5ICovLAorICAgIENPTlNUNjQoMHhENEY3ODUxMjM1REVFOEUzKSAvKiAgNzkwICovLCBDT05TVDY0KDB4RkQ0QjdGODg2NTQwRDg5MykgLyogIDc5MSAqLywKKyAgICBDT05TVDY0KDB4MjQ3QzIwMDQyQUE0QkZEQSkgLyogIDc5MiAqLywgQ09OU1Q2NCgweDA5NkVBMUM1MTdEMTMyN0MpIC8qICA3OTMgKi8sCisgICAgQ09OU1Q2NCgweEQ1Njk2NkI0MzYxQTY2ODUpIC8qICA3OTQgKi8sIENPTlNUNjQoMHgyNzdEQTVDMzEyMjEwNTdEKSAvKiAgNzk1ICovLAorICAgIENPTlNUNjQoMHg5NEQ1OTg5M0E0M0FDRkY3KSAvKiAgNzk2ICovLCBDT05TVDY0KDB4NjRGMEM1MUNDREMwMjI4MSkgLyogIDc5NyAqLywKKyAgICBDT05TVDY0KDB4M0QzM0JDQzRGRjYxODlEQikgLyogIDc5OCAqLywgQ09OU1Q2NCgweEUwMDVDQjE4NENFNjZBRjEpIC8qICA3OTkgKi8sCisgICAgQ09OU1Q2NCgweEZGNUNDRDFEMURCOTlCRUEpIC8qICA4MDAgKi8sIENPTlNUNjQoMHhCMEI4NTRBN0ZFNDI5ODBGKSAvKiAgODAxICovLAorICAgIENPTlNUNjQoMHg3QkQ0NkE2QTcxOEQ0QjlGKSAvKiAgODAyICovLCBDT05TVDY0KDB4RDEwRkE4Q0MyMkE1RkQ4QykgLyogIDgwMyAqLywKKyAgICBDT05TVDY0KDB4RDMxNDg0OTUyQkU0QkQzMSkgLyogIDgwNCAqLywgQ09OU1Q2NCgweEM3RkE5NzVGQ0IyNDM4NDcpIC8qICA4MDUgKi8sCisgICAgQ09OU1Q2NCgweDQ4ODZFRDFFNTg0NkM0MDcpIC8qICA4MDYgKi8sIENPTlNUNjQoMHgyOENEREI3OTFFQjcwQjA0KSAvKiAgODA3ICovLAorICAgIENPTlNUNjQoMHhDMkIwMEJFMkY1NzM0MTdGKSAvKiAgODA4ICovLCBDT05TVDY0KDB4NUM5NTkwNDUyMTgwRjg3NykgLyogIDgwOSAqLywKKyAgICBDT05TVDY0KDB4N0E2QkRERkZGMzcwRUIwMCkgLyogIDgxMCAqLywgQ09OU1Q2NCgweENFNTA5RTM4RDZEOUQ2QTQpIC8qICA4MTEgKi8sCisgICAgQ09OU1Q2NCgweEVCRUIwRjAwNjQ3RkE3MDIpIC8qICA4MTIgKi8sIENPTlNUNjQoMHgxRENDMDZDRjc2NjA2RjA2KSAvKiAgODEzICovLAorICAgIENPTlNUNjQoMHhFNEQ5RjI4QkEyODZGRjBBKSAvKiAgODE0ICovLCBDT05TVDY0KDB4RDg1QTMwNURDOTE4QzI2MikgLyogIDgxNSAqLywKKyAgICBDT05TVDY0KDB4NDc1QjFEODczMjIyNUY1NCkgLyogIDgxNiAqLywgQ09OU1Q2NCgweDJENEZCNTE2NjhDQ0I1RkUpIC8qICA4MTcgKi8sCisgICAgQ09OU1Q2NCgweEE2NzlCOUQ5RDcyQkJBMjApIC8qICA4MTggKi8sIENPTlNUNjQoMHg1Mzg0MUMwRDkxMkQ0M0E1KSAvKiAgODE5ICovLAorICAgIENPTlNUNjQoMHgzQjdFQUE0OEJGMTJBNEU4KSAvKiAgODIwICovLCBDT05TVDY0KDB4NzgxRTBFNDdGMjJGMURERikgLyogIDgyMSAqLywKKyAgICBDT05TVDY0KDB4RUZGMjBDRTYwQUI1MDk3MykgLyogIDgyMiAqLywgQ09OU1Q2NCgweDIwRDI2MUQxOURGRkI3NDIpIC8qICA4MjMgKi8sCisgICAgQ09OU1Q2NCgweDE2QTEyQjAzMDYyQTJFMzkpIC8qICA4MjQgKi8sIENPTlNUNjQoMHgxOTYwRUIyMjM5NjUwNDk1KSAvKiAgODI1ICovLAorICAgIENPTlNUNjQoMHgyNTFDMTZGRUQ1MEVCOEI4KSAvKiAgODI2ICovLCBDT05TVDY0KDB4OUFDMEMzMzBGODI2MDE2RSkgLyogIDgyNyAqLywKKyAgICBDT05TVDY0KDB4RUQxNTI2NjU5NTNFNzY3MSkgLyogIDgyOCAqLywgQ09OU1Q2NCgweDAyRDYzMTk0QTYzNjk1NzApIC8qICA4MjkgKi8sCisgICAgQ09OU1Q2NCgweDUwNzRGMDgzOTRCMUM5ODcpIC8qICA4MzAgKi8sIENPTlNUNjQoMHg3MEJBNTk4QzkwQjI1Q0UxKSAvKiAgODMxICovLAorICAgIENPTlNUNjQoMHg3OTRBMTU4MTBCOTc0MkY2KSAvKiAgODMyICovLCBDT05TVDY0KDB4MEQ1OTI1RTlGQ0FGOEM2QykgLyogIDgzMyAqLywKKyAgICBDT05TVDY0KDB4MzA2NzcxNkNEODY4NzQ0RSkgLyogIDgzNCAqLywgQ09OU1Q2NCgweDkxMEFCMDc3RThENzczMUIpIC8qICA4MzUgKi8sCisgICAgQ09OU1Q2NCgweDZBNjFCQkRCNUFDNDJGNjEpIC8qICA4MzYgKi8sIENPTlNUNjQoMHg5MzUxM0VGQkYwODUxNTY3KSAvKiAgODM3ICovLAorICAgIENPTlNUNjQoMHhGNDk0NzI0QjlFODNFOUQ1KSAvKiAgODM4ICovLCBDT05TVDY0KDB4RTg4N0UxOTg1QzA5NjQ4RCkgLyogIDgzOSAqLywKKyAgICBDT05TVDY0KDB4MzRCMUQzQzY3NTM3MENGRCkgLyogIDg0MCAqLywgQ09OU1Q2NCgweERDMzVFNDMzQkMwRDI1NUQpIC8qICA4NDEgKi8sCisgICAgQ09OU1Q2NCgweEQwQUFCODQyMzQxMzFCRTApIC8qICA4NDIgKi8sIENPTlNUNjQoMHgwODA0MkE1MEI0OEI3RUFGKSAvKiAgODQzICovLAorICAgIENPTlNUNjQoMHg5OTk3QzRFRTQ0QTNBQjM1KSAvKiAgODQ0ICovLCBDT05TVDY0KDB4ODI5QTdCNDkyMDE3OTlEMCkgLyogIDg0NSAqLywKKyAgICBDT05TVDY0KDB4MjYzQjgzMDdCN0M1NDQ0MSkgLyogIDg0NiAqLywgQ09OU1Q2NCgweDc1MkY5NUY0RkQ2QTZDQTYpIC8qICA4NDcgKi8sCisgICAgQ09OU1Q2NCgweDkyNzIxNzQwMkMwOEM2RTUpIC8qICA4NDggKi8sIENPTlNUNjQoMHgyQThBQjc1NEE3OTVEOUVFKSAvKiAgODQ5ICovLAorICAgIENPTlNUNjQoMHhBNDQyRjc1NTJGNzI5NDNEKSAvKiAgODUwICovLCBDT05TVDY0KDB4MkMzMTMzNEUxOTc4MTIwOCkgLyogIDg1MSAqLywKKyAgICBDT05TVDY0KDB4NEZBOThEN0NFQUVFNjI5MSkgLyogIDg1MiAqLywgQ09OU1Q2NCgweDU1QzM4NjJGNjY1REIzMDkpIC8qICA4NTMgKi8sCisgICAgQ09OU1Q2NCgweEJEMDYxMDE3NUQ1M0IxRjMpIC8qICA4NTQgKi8sIENPTlNUNjQoMHg0NkZFNkNCODQwNDEzRjI3KSAvKiAgODU1ICovLAorICAgIENPTlNUNjQoMHgzRkUwMzc5MkRGMENGQTU5KSAvKiAgODU2ICovLCBDT05TVDY0KDB4Q0ZFNzAwMzcyRUI4NUU4RikgLyogIDg1NyAqLywKKyAgICBDT05TVDY0KDB4QTdCRTI5RTdBREJDRTExOCkgLyogIDg1OCAqLywgQ09OU1Q2NCgweEU1NDRFRTVDREU4NDMxREQpIC8qICA4NTkgKi8sCisgICAgQ09OU1Q2NCgweDhBNzgxQjFCNDFGMTg3M0UpIC8qICA4NjAgKi8sIENPTlNUNjQoMHhBNUM5NEM3OEEwRDJGMEU3KSAvKiAgODYxICovLAorICAgIENPTlNUNjQoMHgzOTQxMkUyODc3QjYwNzI4KSAvKiAgODYyICovLCBDT05TVDY0KDB4QTEyNjVFRjNBRkM5QTYyQykgLyogIDg2MyAqLywKKyAgICBDT05TVDY0KDB4QkNDMjc3MEM2QTI1MDZDNSkgLyogIDg2NCAqLywgQ09OU1Q2NCgweDNBQjY2REQ1RENFMUNFMTIpIC8qICA4NjUgKi8sCisgICAgQ09OU1Q2NCgweEU2NTQ5OUQwNEE2NzVCMzcpIC8qICA4NjYgKi8sIENPTlNUNjQoMHg3RDhGNTIzNDgxQkZEMjE2KSAvKiAgODY3ICovLAorICAgIENPTlNUNjQoMHgwRjZGNjRGQ0VDMTVGMzg5KSAvKiAgODY4ICovLCBDT05TVDY0KDB4NzRFRkJFNjE4QjVCMTNDOCkgLyogIDg2OSAqLywKKyAgICBDT05TVDY0KDB4QUNEQzgyQjcxNDI3M0UxRCkgLyogIDg3MCAqLywgQ09OU1Q2NCgweERENDBCRkUwMDMxOTlEMTcpIC8qICA4NzEgKi8sCisgICAgQ09OU1Q2NCgweDM3RTk5MjU3RTdFMDYxRjgpIC8qICA4NzIgKi8sIENPTlNUNjQoMHhGQTUyNjI2OTA0Nzc1QUFBKSAvKiAgODczICovLAorICAgIENPTlNUNjQoMHg4QkJCRjYzQTQ2M0Q1NkY5KSAvKiAgODc0ICovLCBDT05TVDY0KDB4RjAwMTNGMTU0M0EyNkU2NCkgLyogIDg3NSAqLywKKyAgICBDT05TVDY0KDB4QTgzMDdFOUY4NzlFQzg5OCkgLyogIDg3NiAqLywgQ09OU1Q2NCgweENDNEMyN0E0MTUwMTc3Q0MpIC8qICA4NzcgKi8sCisgICAgQ09OU1Q2NCgweDFCNDMyRjJDQ0ExRDMzNDgpIC8qICA4NzggKi8sIENPTlNUNjQoMHhERTFEMUY4RjlGNkZBMDEzKSAvKiAgODc5ICovLAorICAgIENPTlNUNjQoMHg2MDY2MDJBMDQ3QTdEREQ2KSAvKiAgODgwICovLCBDT05TVDY0KDB4RDIzN0FCNjRDQzFDQjJDNykgLyogIDg4MSAqLywKKyAgICBDT05TVDY0KDB4OUI5MzhFNzIyNUZDRDFEMykgLyogIDg4MiAqLywgQ09OU1Q2NCgweEVDNEUwMzcwOEUwRkY0NzYpIC8qICA4ODMgKi8sCisgICAgQ09OU1Q2NCgweEZFQjJGQkRBM0QwM0MxMkQpIC8qICA4ODQgKi8sIENPTlNUNjQoMHhBRTBCQ0VEMkVFNDM4ODlBKSAvKiAgODg1ICovLAorICAgIENPTlNUNjQoMHgyMkNCODkyM0VCRkI0RjQzKSAvKiAgODg2ICovLCBDT05TVDY0KDB4NjkzNjBEMDEzQ0Y3Mzk2RCkgLyogIDg4NyAqLywKKyAgICBDT05TVDY0KDB4ODU1RTM2MDJEMkQ0RTAyMikgLyogIDg4OCAqLywgQ09OU1Q2NCgweDA3MzgwNUJBRDAxRjc4NEMpIC8qICA4ODkgKi8sCisgICAgQ09OU1Q2NCgweDMzRTE3QTEzMzg1MkY1NDYpIC8qICA4OTAgKi8sIENPTlNUNjQoMHhERjQ4NzQwNThBQzdCNjM4KSAvKiAgODkxICovLAorICAgIENPTlNUNjQoMHhCQTkyQjI5QzY3OEFBMTRBKSAvKiAgODkyICovLCBDT05TVDY0KDB4MENFODlGQzc2Q0ZBQURDRCkgLyogIDg5MyAqLywKKyAgICBDT05TVDY0KDB4NUY5RDRFMDkwODMzOUUzNCkgLyogIDg5NCAqLywgQ09OU1Q2NCgweEYxQUZFOTI5MUY1OTIzQjkpIC8qICA4OTUgKi8sCisgICAgQ09OU1Q2NCgweDZFMzQ4MEY2MEY0QTI2NUYpIC8qICA4OTYgKi8sIENPTlNUNjQoMHhFRUJGM0EyQUIyOUI4NDFDKSAvKiAgODk3ICovLAorICAgIENPTlNUNjQoMHhFMjE5MzhBODhGOTFCNEFEKSAvKiAgODk4ICovLCBDT05TVDY0KDB4NTdERkVGRjg0NUM2RDNDMykgLyogIDg5OSAqLywKKyAgICBDT05TVDY0KDB4MkYwMDZCMEJGNjJDQUFGMikgLyogIDkwMCAqLywgQ09OU1Q2NCgweDYyRjQ3OUVGNkY3NUVFNzgpIC8qICA5MDEgKi8sCisgICAgQ09OU1Q2NCgweDExQTU1QUQ0MUM4OTE2QTkpIC8qICA5MDIgKi8sIENPTlNUNjQoMHhGMjI5RDI5MDg0RkVENDUzKSAvKiAgOTAzICovLAorICAgIENPTlNUNjQoMHg0MkYxQzI3QjE2QjAwMEU2KSAvKiAgOTA0ICovLCBDT05TVDY0KDB4MkIxRjc2NzQ5ODIzQzA3NCkgLyogIDkwNSAqLywKKyAgICBDT05TVDY0KDB4NEI3NkVDQTNDMjc0NTM2MCkgLyogIDkwNiAqLywgQ09OU1Q2NCgweDhDOThGNDYzQjkxNjkxQkQpIC8qICA5MDcgKi8sCisgICAgQ09OU1Q2NCgweDE0QkNDOTNDRjFBREU2NkEpIC8qICA5MDggKi8sIENPTlNUNjQoMHg4ODg1MjEzRTZENDU4Mzk3KSAvKiAgOTA5ICovLAorICAgIENPTlNUNjQoMHg4RTE3N0RGMDI3NEQ0NzExKSAvKiAgOTEwICovLCBDT05TVDY0KDB4QjQ5QjczQjU1MDNGMjk1MSkgLyogIDkxMSAqLywKKyAgICBDT05TVDY0KDB4MTAxNjgxNjhDM0Y5NkI2QikgLyogIDkxMiAqLywgQ09OU1Q2NCgweDBFM0Q5NjNCNjNDQUIwQUUpIC8qICA5MTMgKi8sCisgICAgQ09OU1Q2NCgweDhERkM0QjU2NTVBMURCMTQpIC8qICA5MTQgKi8sIENPTlNUNjQoMHhGNzg5RjEzNTZFMTRERTVDKSAvKiAgOTE1ICovLAorICAgIENPTlNUNjQoMHg2ODNFNjhBRjRFNTFEQUMxKSAvKiAgOTE2ICovLCBDT05TVDY0KDB4QzlBODRGOUQ4RDRCMEZEOSkgLyogIDkxNyAqLywKKyAgICBDT05TVDY0KDB4MzY5MUUwM0Y1MkEwRjlEMSkgLyogIDkxOCAqLywgQ09OU1Q2NCgweDVFRDg2RTQ2RTE4NzhFODApIC8qICA5MTkgKi8sCisgICAgQ09OU1Q2NCgweDNDNzExQTBFOTlEMDcxNTApIC8qICA5MjAgKi8sIENPTlNUNjQoMHg1QTA4NjVCMjBDNEU5MzEwKSAvKiAgOTIxICovLAorICAgIENPTlNUNjQoMHg1NkZCRkMxRkU0RjA2ODJFKSAvKiAgOTIyICovLCBDT05TVDY0KDB4RUE4RDVERTMxMDVFREY5QikgLyogIDkyMyAqLywKKyAgICBDT05TVDY0KDB4NzFBQkZEQjEyMzc5MTg3QSkgLyogIDkyNCAqLywgQ09OU1Q2NCgweDJFQjk5REUxQkVFNzdCOUMpIC8qICA5MjUgKi8sCisgICAgQ09OU1Q2NCgweDIxRUNDMEVBMzNDRjQ1MjMpIC8qICA5MjYgKi8sIENPTlNUNjQoMHg1OUE0RDc1MjE4MDVDN0ExKSAvKiAgOTI3ICovLAorICAgIENPTlNUNjQoMHgzODk2RjVFQjU2QUU3QzcyKSAvKiAgOTI4ICovLCBDT05TVDY0KDB4QUE2MzhGM0RCMThGNzVEQykgLyogIDkyOSAqLywKKyAgICBDT05TVDY0KDB4OUYzOTM1OERBQkU5ODA4RSkgLyogIDkzMCAqLywgQ09OU1Q2NCgweEI3REVGQTkxQzAwQjcyQUMpIC8qICA5MzEgKi8sCisgICAgQ09OU1Q2NCgweDZCNTU0MUZENjI0OTJEOTIpIC8qICA5MzIgKi8sIENPTlNUNjQoMHg2REM2REVFOEY5MkU0RDVCKSAvKiAgOTMzICovLAorICAgIENPTlNUNjQoMHgzNTNGNTdBQkM0QkVFQTdFKSAvKiAgOTM0ICovLCBDT05TVDY0KDB4NzM1NzY5RDZEQTU2OTBDRSkgLyogIDkzNSAqLywKKyAgICBDT05TVDY0KDB4MEEyMzRBQTY0MjM5MTQ4NCkgLyogIDkzNiAqLywgQ09OU1Q2NCgweEY2Rjk1MDgwMjhGODBEOUQpIC8qICA5MzcgKi8sCisgICAgQ09OU1Q2NCgweEI4RTMxOUEyN0FCM0YyMTUpIC8qICA5MzggKi8sIENPTlNUNjQoMHgzMUFEOUMxMTUxMzQxQTREKSAvKiAgOTM5ICovLAorICAgIENPTlNUNjQoMHg3NzNDMjJBNTdCRUY1ODA1KSAvKiAgOTQwICovLCBDT05TVDY0KDB4NDVDNzU2MUEwNzk2ODYzMykgLyogIDk0MSAqLywKKyAgICBDT05TVDY0KDB4RjkxM0RBOUUyNDlEQkUzNikgLyogIDk0MiAqLywgQ09OU1Q2NCgweERBNjUyRDlCNzhBNjRDNjgpIC8qICA5NDMgKi8sCisgICAgQ09OU1Q2NCgweDRDMjdBOTdGM0JDMzM0RUYpIC8qICA5NDQgKi8sIENPTlNUNjQoMHg3NjYyMTIyMEU2NkIxN0Y0KSAvKiAgOTQ1ICovLAorICAgIENPTlNUNjQoMHg5Njc3NDM4OTlBQ0Q3RDBCKSAvKiAgOTQ2ICovLCBDT05TVDY0KDB4RjNFRTVCQ0FFMEVENjc4MikgLyogIDk0NyAqLywKKyAgICBDT05TVDY0KDB4NDA5Rjc1MzYwMEM4NzlGQykgLyogIDk0OCAqLywgQ09OU1Q2NCgweDA2RDA5QTM5QjU5MjZEQjYpIC8qICA5NDkgKi8sCisgICAgQ09OU1Q2NCgweDZGODNBRUIwMzE3QUM1ODgpIC8qICA5NTAgKi8sIENPTlNUNjQoMHgwMUU2Q0E0QTg2MzgxRjIxKSAvKiAgOTUxICovLAorICAgIENPTlNUNjQoMHg2NkZGMzQ2MkQxOUYzMDI1KSAvKiAgOTUyICovLCBDT05TVDY0KDB4NzIyMDdDMjREREZEM0JGQikgLyogIDk1MyAqLywKKyAgICBDT05TVDY0KDB4NEFGNkI2RDNFMkVDRTJFQikgLyogIDk1NCAqLywgQ09OU1Q2NCgweDlDOTk0REJFQzdFQTA4REUpIC8qICA5NTUgKi8sCisgICAgQ09OU1Q2NCgweDQ5QUNFNTk3QjA5QThCQzQpIC8qICA5NTYgKi8sIENPTlNUNjQoMHhCMzhDNDc2NkNGMDc5N0JBKSAvKiAgOTU3ICovLAorICAgIENPTlNUNjQoMHgxMzFCOTM3M0M1N0MyQTc1KSAvKiAgOTU4ICovLCBDT05TVDY0KDB4QjE4MjJDQ0U2MTkzMUU1OCkgLyogIDk1OSAqLywKKyAgICBDT05TVDY0KDB4OUQ3NTU1QjkwOUJBMUMwQykgLyogIDk2MCAqLywgQ09OU1Q2NCgweDEyN0ZBRkREOTM3RDExRDIpIC8qICA5NjEgKi8sCisgICAgQ09OU1Q2NCgweDI5REEzQkFEQzY2RDkyRTQpIC8qICA5NjIgKi8sIENPTlNUNjQoMHhBMkMxRDU3MTU0QzJFQ0JDKSAvKiAgOTYzICovLAorICAgIENPTlNUNjQoMHg1OEM1MTM0RDgyRjZGRTI0KSAvKiAgOTY0ICovLCBDT05TVDY0KDB4MUMzQUUzNTE1QjYyMjc0RikgLyogIDk2NSAqLywKKyAgICBDT05TVDY0KDB4RTkwN0M4MkUwMUNCODEyNikgLyogIDk2NiAqLywgQ09OU1Q2NCgweEY4RUQwOTE5MTNFMzdGQ0IpIC8qICA5NjcgKi8sCisgICAgQ09OU1Q2NCgweDMyNDlEOEY5QzgwMDQ2QzkpIC8qICA5NjggKi8sIENPTlNUNjQoMHg4MENGOUJFREUzODhGQjYzKSAvKiAgOTY5ICovLAorICAgIENPTlNUNjQoMHgxODgxNTM5QTExNkNGMTlFKSAvKiAgOTcwICovLCBDT05TVDY0KDB4NTEwM0YzRjc2QkQ1MjQ1NykgLyogIDk3MSAqLywKKyAgICBDT05TVDY0KDB4MTVCN0U2RjVBRTQ3RjdBOCkgLyogIDk3MiAqLywgQ09OU1Q2NCgweERCRDdDNkRFRDQ3RTlDQ0YpIC8qICA5NzMgKi8sCisgICAgQ09OU1Q2NCgweDQ0RTU1QzQxMDIyOEJCMUEpIC8qICA5NzQgKi8sIENPTlNUNjQoMHhCNjQ3RDQyNTVFREI0RTk5KSAvKiAgOTc1ICovLAorICAgIENPTlNUNjQoMHg1RDExODgyQkI4QUFGQzMwKSAvKiAgOTc2ICovLCBDT05TVDY0KDB4RjUwOThCQkIyOUQzMjEyQSkgLyogIDk3NyAqLywKKyAgICBDT05TVDY0KDB4OEZCNUVBMTRFOTAyOTZCMykgLyogIDk3OCAqLywgQ09OU1Q2NCgweDY3N0I5NDIxNTdERDAyNUEpIC8qICA5NzkgKi8sCisgICAgQ09OU1Q2NCgweEZCNThFN0MwQTM5MEFDQjUpIC8qICA5ODAgKi8sIENPTlNUNjQoMHg4OUQzNjc0QzgzQkQ0QTAxKSAvKiAgOTgxICovLAorICAgIENPTlNUNjQoMHg5RTJEQTRERjRCRjNCOTNCKSAvKiAgOTgyICovLCBDT05TVDY0KDB4RkNDNDFFMzI4Q0FCNDgyOSkgLyogIDk4MyAqLywKKyAgICBDT05TVDY0KDB4MDNGMzhDOTZCQTU4MkM1MikgLyogIDk4NCAqLywgQ09OU1Q2NCgweENBRDFCREJEN0ZEODVEQjIpIC8qICA5ODUgKi8sCisgICAgQ09OU1Q2NCgweEJCQjQ0MkMxNjA4MkFFODMpIC8qICA5ODYgKi8sIENPTlNUNjQoMHhCOTVGRTg2QkE1REE5QUIwKSAvKiAgOTg3ICovLAorICAgIENPTlNUNjQoMHhCMjJFMDQ2NzM3NzFBOTNGKSAvKiAgOTg4ICovLCBDT05TVDY0KDB4ODQ1MzU4Qzk0OTMxNTJEOCkgLyogIDk4OSAqLywKKyAgICBDT05TVDY0KDB4QkUyQTQ4ODY5N0I0NTQxRSkgLyogIDk5MCAqLywgQ09OU1Q2NCgweDk1QTJEQzJERDM4RTY5NjYpIC8qICA5OTEgKi8sCisgICAgQ09OU1Q2NCgweEMwMkMxMUFDOTIzQzg1MkIpIC8qICA5OTIgKi8sIENPTlNUNjQoMHgyMzg4QjE5OTBERjJBODdCKSAvKiAgOTkzICovLAorICAgIENPTlNUNjQoMHg3QzgwMDhGQTFCNEYzN0JFKSAvKiAgOTk0ICovLCBDT05TVDY0KDB4MUY3MEQwQzg0RDU0RTUwMykgLyogIDk5NSAqLywKKyAgICBDT05TVDY0KDB4NTQ5MEFERUM3RUNFNTdENCkgLyogIDk5NiAqLywgQ09OU1Q2NCgweDAwMkIzQzI3RDkwNjNBM0EpIC8qICA5OTcgKi8sCisgICAgQ09OU1Q2NCgweDdFQUVBMzg0ODAzMEEyQkYpIC8qICA5OTggKi8sIENPTlNUNjQoMHhDNjAyMzI2REVEMjAwM0MwKSAvKiAgOTk5ICovLAorICAgIENPTlNUNjQoMHg4M0E3Mjg3RDY5QTk0MDg2KSAvKiAxMDAwICovLCBDT05TVDY0KDB4QzU3QTVGQ0IzMEY1N0E4QSkgLyogMTAwMSAqLywKKyAgICBDT05TVDY0KDB4QjU2ODQ0RTQ3OUVCRTc3OSkgLyogMTAwMiAqLywgQ09OU1Q2NCgweEEzNzNCNDBGMDVEQ0JDRTkpIC8qIDEwMDMgKi8sCisgICAgQ09OU1Q2NCgweEQ3MUE3ODZFODg1NzBFRTIpIC8qIDEwMDQgKi8sIENPTlNUNjQoMHg4NzlDQkFDREJERThGNkEwKSAvKiAxMDA1ICovLAorICAgIENPTlNUNjQoMHg5NzZBRDFCQ0MxNjRBMzJGKSAvKiAxMDA2ICovLCBDT05TVDY0KDB4QUIyMUUyNUU5NjY2RDc4QikgLyogMTAwNyAqLywKKyAgICBDT05TVDY0KDB4OTAxMDYzQUFFNUU1QzMzQykgLyogMTAwOCAqLywgQ09OU1Q2NCgweDk4MThCMzQ0NDg2OThEOTApIC8qIDEwMDkgKi8sCisgICAgQ09OU1Q2NCgweEUzNjQ4N0FFM0UxRThBQkIpIC8qIDEwMTAgKi8sIENPTlNUNjQoMHhBRkJERjkzMTg5M0JEQ0I0KSAvKiAxMDExICovLAorICAgIENPTlNUNjQoMHg2MzQ1QTBEQzVGQkJENTE5KSAvKiAxMDEyICovLCBDT05TVDY0KDB4ODYyOEZFMjY5Qjk0NjVDQSkgLyogMTAxMyAqLywKKyAgICBDT05TVDY0KDB4MUU1RDAxNjAzRjlDNTFFQykgLyogMTAxNCAqLywgQ09OU1Q2NCgweDRERTQ0MDA2QTE1MDQ5QjcpIC8qIDEwMTUgKi8sCisgICAgQ09OU1Q2NCgweEJGNkM3MEU1Rjc3NkNCQjEpIC8qIDEwMTYgKi8sIENPTlNUNjQoMHg0MTEyMThGMkVGNTUyQkVEKSAvKiAxMDE3ICovLAorICAgIENPTlNUNjQoMHhDQjBDMDcwODcwNUEzNkEzKSAvKiAxMDE4ICovLCBDT05TVDY0KDB4RTc0RDE0NzU0Rjk4NjA0NCkgLyogMTAxOSAqLywKKyAgICBDT05TVDY0KDB4Q0Q1NkQ5NDMwRUE4MjgwRSkgLyogMTAyMCAqLywgQ09OU1Q2NCgweEMxMjU5MUQ3NTM1RjUwNjUpIC8qIDEwMjEgKi8sCisgICAgQ09OU1Q2NCgweEM4MzIyM0YxNzIwQUVGOTYpIC8qIDEwMjIgKi8sIENPTlNUNjQoMHhDM0EwMzk2RjczNjNBNTFGKSAvKiAxMDIzICovfTsKKworI2lmZGVmIF9NU0NfVkVSCisgICAjZGVmaW5lIElOTElORSBfX2lubGluZQorI2Vsc2UKKyAgICNkZWZpbmUgSU5MSU5FIAorI2VuZGlmICAgCisKKy8qIG9uZSByb3VuZCBvZiB0aGUgaGFzaCBmdW5jdGlvbiAqLworSU5MSU5FIHN0YXRpYyB2b2lkIHRpZ2VyX3JvdW5kKHVsb25nNjQgKmEsIHVsb25nNjQgKmIsIHVsb25nNjQgKmMsIHVsb25nNjQgeCwgaW50IG11bCkKK3sKKyAgICB1bG9uZzY0IHRtcDsKKyAgICB0bXAgPSAoKmMgXj0geCk7IAorICAgICAgICAgICAqYSAtPSB0MVtieXRlKHRtcCwgMCldIF4gdDJbYnl0ZSh0bXAsIDIpXSBeIHQzW2J5dGUodG1wLCA0KV0gXiB0NFtieXRlKHRtcCwgNildOyAgICAgIAorICAgIHRtcCA9ICgqYiArPSB0NFtieXRlKHRtcCwgMSldIF4gdDNbYnl0ZSh0bXAsIDMpXSBeIHQyW2J5dGUodG1wLDUpXSBeIHQxW2J5dGUodG1wLDcpXSk7IAorICAgIHN3aXRjaCAobXVsKSB7CisgICAgICAgIGNhc2UgNTogICpiID0gKHRtcCA8PCAyKSArIHRtcDsgYnJlYWs7CisgICAgICAgIGNhc2UgNzogICpiID0gKHRtcCA8PCAzKSAtIHRtcDsgYnJlYWs7CisgICAgICAgIGNhc2UgOTogICpiID0gKHRtcCA8PCAzKSArIHRtcDsgYnJlYWs7CisgICAgfQorfQorCisvKiBvbmUgY29tcGxldGUgcGFzcyAqLworc3RhdGljIHZvaWQgcGFzcyh1bG9uZzY0ICphLCB1bG9uZzY0ICpiLCB1bG9uZzY0ICpjLCB1bG9uZzY0ICp4LCBpbnQgbXVsKQoreworICAgdGlnZXJfcm91bmQoYSxiLGMseFswXSxtdWwpOyAKKyAgIHRpZ2VyX3JvdW5kKGIsYyxhLHhbMV0sbXVsKTsgCisgICB0aWdlcl9yb3VuZChjLGEsYix4WzJdLG11bCk7IAorICAgdGlnZXJfcm91bmQoYSxiLGMseFszXSxtdWwpOyAKKyAgIHRpZ2VyX3JvdW5kKGIsYyxhLHhbNF0sbXVsKTsgCisgICB0aWdlcl9yb3VuZChjLGEsYix4WzVdLG11bCk7IAorICAgdGlnZXJfcm91bmQoYSxiLGMseFs2XSxtdWwpOyAKKyAgIHRpZ2VyX3JvdW5kKGIsYyxhLHhbN10sbXVsKTsgICAgICAgICAgCit9ICAgCisKKy8qIFRoZSBrZXkgbWl4aW5nIHNjaGVkdWxlICovCitzdGF0aWMgdm9pZCBrZXlfc2NoZWR1bGUodWxvbmc2NCAqeCkgCit7CisgICAgeFswXSAtPSB4WzddIF4gQ09OU1Q2NCgweEE1QTVBNUE1QTVBNUE1QTUpOyAKKyAgICB4WzFdIF49IHhbMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHhbMl0gKz0geFsxXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgeFszXSAtPSB4WzJdIF4gKCh+eFsxXSk8PDE5KTsgICAgICAgICAgICAgICAKKyAgICB4WzRdIF49IHhbM107ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHhbNV0gKz0geFs0XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgeFs2XSAtPSB4WzVdIF4gKCh+eFs0XSk+PjIzKTsgICAgICAgICAgICAgICAKKyAgICB4WzddIF49IHhbNl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHhbMF0gKz0geFs3XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgeFsxXSAtPSB4WzBdIF4gKCh+eFs3XSk8PDE5KTsgICAgICAgICAgICAgICAKKyAgICB4WzJdIF49IHhbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHhbM10gKz0geFsyXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgeFs0XSAtPSB4WzNdIF4gKCh+eFsyXSk+PjIzKTsgICAgICAgICAgICAgICAKKyAgICB4WzVdIF49IHhbNF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHhbNl0gKz0geFs1XTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgeFs3XSAtPSB4WzZdIF4gQ09OU1Q2NCgweDAxMjM0NTY3ODlBQkNERUYpOworfSAgICAKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfdGlnZXJfY29tcHJlc3MoaGFzaF9zdGF0ZSAqbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKKyNlbHNlCitzdGF0aWMgaW50ICB0aWdlcl9jb21wcmVzcyhoYXNoX3N0YXRlICptZCwgdW5zaWduZWQgY2hhciAqYnVmKQorI2VuZGlmCit7CisgICAgdWxvbmc2NCBhLCBiLCBjLCB4WzhdOworICAgIHVuc2lnbmVkIGxvbmcgaTsKKworICAgIC8qIGxvYWQgd29yZHMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgIExPQUQ2NEwoeFtpXSwmYnVmWzgqaV0pOworICAgIH0KKyAgICBhID0gbWQtPnRpZ2VyLnN0YXRlWzBdOworICAgIGIgPSBtZC0+dGlnZXIuc3RhdGVbMV07CisgICAgYyA9IG1kLT50aWdlci5zdGF0ZVsyXTsKKworICAgIHBhc3MoJmEsJmIsJmMseCw1KTsKKyAgICBrZXlfc2NoZWR1bGUoeCk7CisgICAgcGFzcygmYywmYSwmYix4LDcpOworICAgIGtleV9zY2hlZHVsZSh4KTsKKyAgICBwYXNzKCZiLCZjLCZhLHgsOSk7CisKKyAgICAvKiBzdG9yZSBzdGF0ZSAqLworICAgIG1kLT50aWdlci5zdGF0ZVswXSA9IGEgXiBtZC0+dGlnZXIuc3RhdGVbMF07CisgICAgbWQtPnRpZ2VyLnN0YXRlWzFdID0gYiAtIG1kLT50aWdlci5zdGF0ZVsxXTsKKyAgICBtZC0+dGlnZXIuc3RhdGVbMl0gPSBjICsgbWQtPnRpZ2VyLnN0YXRlWzJdOworCisgICAgcmV0dXJuIENSWVBUX09LOworfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IHRpZ2VyX2NvbXByZXNzKGhhc2hfc3RhdGUgKm1kLCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisgICBpbnQgZXJyOworICAgZXJyID0gX3RpZ2VyX2NvbXByZXNzKG1kLCBidWYpOworICAgYnVybl9zdGFjayhzaXplb2YodWxvbmc2NCkgKiAxMSArIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qKgorICAgSW5pdGlhbGl6ZSB0aGUgaGFzaCBzdGF0ZQorICAgQHBhcmFtIG1kICAgVGhlIGhhc2ggc3RhdGUgeW91IHdpc2ggdG8gaW5pdGlhbGl6ZQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHRpZ2VyX2luaXQoaGFzaF9zdGF0ZSAqbWQpCit7CisgICAgTFRDX0FSR0NISyhtZCAhPSBOVUxMKTsKKyAgICBtZC0+dGlnZXIuc3RhdGVbMF0gPSBDT05TVDY0KDB4MDEyMzQ1Njc4OUFCQ0RFRik7CisgICAgbWQtPnRpZ2VyLnN0YXRlWzFdID0gQ09OU1Q2NCgweEZFRENCQTk4NzY1NDMyMTApOworICAgIG1kLT50aWdlci5zdGF0ZVsyXSA9IENPTlNUNjQoMHhGMDk2QTVCNEMzQjJFMTg3KTsKKyAgICBtZC0+dGlnZXIuY3VybGVuID0gMDsKKyAgICBtZC0+dGlnZXIubGVuZ3RoID0gMDsKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICAgUHJvY2VzcyBhIGJsb2NrIG9mIG1lbW9yeSB0aG91Z2ggdGhlIGhhc2gKKyAgIEBwYXJhbSBtZCAgICAgVGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBpbiAgICAgVGhlIGRhdGEgdG8gaGFzaAorICAgQHBhcmFtIGlubGVuICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIChvY3RldHMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitIQVNIX1BST0NFU1ModGlnZXJfcHJvY2VzcywgdGlnZXJfY29tcHJlc3MsIHRpZ2VyLCA2NCkKKworLyoqCisgICBUZXJtaW5hdGUgdGhlIGhhc2ggdG8gZ2V0IHRoZSBkaWdlc3QKKyAgIEBwYXJhbSBtZCAgVGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBvdXQgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBoYXNoICgyNCBieXRlcykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCB0aWdlcl9kb25lKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqb3V0KQoreworICAgIExUQ19BUkdDSEsobWQgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsob3V0ICE9IE5VTEwpOworCisgICAgaWYgKG1kLT50aWdlci5jdXJsZW4gPj0gc2l6ZW9mKG1kLT50aWdlci5idWYpKSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgIH0KKworICAgIC8qIGluY3JlYXNlIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UgKi8KKyAgICBtZC0+dGlnZXIubGVuZ3RoICs9IG1kLT50aWdlci5jdXJsZW4gKiA4OworCisgICAgLyogYXBwZW5kIHRoZSAnMScgYml0ICovCisgICAgbWQtPnRpZ2VyLmJ1ZlttZC0+dGlnZXIuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMHgwMTsKKworICAgIC8qIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IGFib3ZlIDU2IGJ5dGVzIHdlIGFwcGVuZCB6ZXJvcworICAgICAqIHRoZW4gY29tcHJlc3MuICBUaGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gcGFkZGluZyB6ZXJvcyBhbmQgbGVuZ3RoCisgICAgICogZW5jb2RpbmcgbGlrZSBub3JtYWwuICovCisgICAgaWYgKG1kLT50aWdlci5jdXJsZW4gPiA1NikgeworICAgICAgICB3aGlsZSAobWQtPnRpZ2VyLmN1cmxlbiA8IDY0KSB7CisgICAgICAgICAgICBtZC0+dGlnZXIuYnVmW21kLT50aWdlci5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikwOworICAgICAgICB9CisgICAgICAgIHRpZ2VyX2NvbXByZXNzKG1kLCBtZC0+dGlnZXIuYnVmKTsKKyAgICAgICAgbWQtPnRpZ2VyLmN1cmxlbiA9IDA7CisgICAgfQorCisgICAgLyogcGFkIHVwdG8gNTYgYnl0ZXMgb2YgemVyb2VzICovCisgICAgd2hpbGUgKG1kLT50aWdlci5jdXJsZW4gPCA1NikgeworICAgICAgICBtZC0+dGlnZXIuYnVmW21kLT50aWdlci5jdXJsZW4rK10gPSAodW5zaWduZWQgY2hhcikwOyAKKyAgICB9CisKKyAgICAvKiBzdG9yZSBsZW5ndGggKi8KKyAgICBTVE9SRTY0TChtZC0+dGlnZXIubGVuZ3RoLCBtZC0+dGlnZXIuYnVmKzU2KTsKKyAgICB0aWdlcl9jb21wcmVzcyhtZCwgbWQtPnRpZ2VyLmJ1Zik7CisKKyAgICAvKiBjb3B5IG91dHB1dCAqLworICAgIFNUT1JFNjRMKG1kLT50aWdlci5zdGF0ZVswXSwgJm91dFswXSk7CisgICAgU1RPUkU2NEwobWQtPnRpZ2VyLnN0YXRlWzFdLCAmb3V0WzhdKTsKKyAgICBTVE9SRTY0TChtZC0+dGlnZXIuc3RhdGVbMl0sICZvdXRbMTZdKTsKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgICB6ZXJvbWVtKG1kLCBzaXplb2YoaGFzaF9zdGF0ZSkpOworI2VuZGlmCisKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBTZWxmLXRlc3QgdGhlIGhhc2gKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQKKyovICAKK2ludCAgdGlnZXJfdGVzdCh2b2lkKQoreworICNpZm5kZWYgTFRDX1RFU1QKKyAgICByZXR1cm4gQ1JZUFRfTk9QOworICNlbHNlICAgIAorICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgIGNoYXIgKm1zZzsKKyAgICAgIHVuc2lnbmVkIGNoYXIgaGFzaFsyNF07CisgIH0gdGVzdHNbXSA9IHsKKyAgICB7ICIiLAorICAgICB7IDB4MzIsIDB4OTMsIDB4YWMsIDB4NjMsIDB4MGMsIDB4MTMsIDB4ZjAsIDB4MjQsCisgICAgICAgMHg1ZiwgMHg5MiwgMHhiYiwgMHhiMSwgMHg3NiwgMHg2ZSwgMHgxNiwgMHgxNiwKKyAgICAgICAweDdhLCAweDRlLCAweDU4LCAweDQ5LCAweDJkLCAweGRlLCAweDczLCAweGYzIH0KKyAgICB9LAorICAgIHsgImFiYyIsCisgICAgIHsgMHgyYSwgMHhhYiwgMHgxNCwgMHg4NCwgMHhlOCwgMHhjMSwgMHg1OCwgMHhmMiwKKyAgICAgICAweGJmLCAweGI4LCAweGM1LCAweGZmLCAweDQxLCAweGI1LCAweDdhLCAweDUyLAorICAgICAgIDB4NTEsIDB4MjksIDB4MTMsIDB4MWMsIDB4OTUsIDB4N2IsIDB4NWYsIDB4OTMgfQorICAgIH0sCisgICAgeyAiVGlnZXIiLAorICAgICB7IDB4ZGQsIDB4MDAsIDB4MjMsIDB4MDcsIDB4OTksIDB4ZjUsIDB4MDAsIDB4OWYsCisgICAgICAgMHhlYywgMHg2ZCwgMHhlYiwgMHhjOCwgMHgzOCwgMHhiYiwgMHg2YSwgMHgyNywKKyAgICAgICAweGRmLCAweDJiLCAweDlkLCAweDZmLCAweDExLCAweDBjLCAweDc5LCAweDM3IH0KKyAgICB9LAorICAgIHsgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky0iLAorICAgICB7IDB4ZjcsIDB4MWMsIDB4ODUsIDB4ODMsIDB4OTAsIDB4MmEsIDB4ZmIsIDB4ODcsCisgICAgICAgMHg5ZSwgMHhkZiwgMHhlNiwgMHgxMCwgMHhmOCwgMHgyYywgMHgwZCwgMHg0NywKKyAgICAgICAweDg2LCAweGEzLCAweGE1LCAweDM0LCAweDUwLCAweDQ0LCAweDg2LCAweGI1IH0KKyAgICB9LAorICAgIHsgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSstIiwKKyAgICAgeyAweGM1LCAweDQwLCAweDM0LCAweGU1LCAweGI0LCAweDNlLCAweGI4LCAweDAwLAorICAgICAgIDB4NTgsIDB4NDgsIDB4YTcsIDB4ZTAsIDB4YWUsIDB4NmEsIDB4YWMsIDB4NzYsCisgICAgICAgMHhlNCwgMHhmZiwgMHg1OSwgMHgwYSwgMHhlNywgMHgxNSwgMHhmZCwgMHgyNSB9CisgICAgfSwKKyAgfTsKKworICBpbnQgaTsKKyAgdW5zaWduZWQgY2hhciB0bXBbMjRdOworICBoYXNoX3N0YXRlIG1kOworCisgIGZvciAoaSA9IDA7IGkgPCAoaW50KShzaXplb2YodGVzdHMpIC8gc2l6ZW9mKHRlc3RzWzBdKSk7IGkrKykgeworICAgICAgdGlnZXJfaW5pdCgmbWQpOworICAgICAgdGlnZXJfcHJvY2VzcygmbWQsICh1bnNpZ25lZCBjaGFyICopdGVzdHNbaV0ubXNnLCAodW5zaWduZWQgbG9uZylzdHJsZW4odGVzdHNbaV0ubXNnKSk7CisgICAgICB0aWdlcl9kb25lKCZtZCwgdG1wKTsKKyAgICAgIGlmIChYTUVNQ01QKHRtcCwgdGVzdHNbaV0uaGFzaCwgMjQpICE9IDApIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgfQorICB9CisgIHJldHVybiBDUllQVF9PSzsKKyAgI2VuZGlmCit9CisKKyNlbmRpZgorCisvKgorSGFzaCBvZiAiIjoKKyAgICAgICAgMjRGMDEzMEM2M0FDOTMzMiAxNjE2NkU3NkIxQkI5MjVGIEYzNzNERTJENDk1ODRFN0EKK0hhc2ggb2YgImFiYyI6CisgICAgICAgIEYyNThDMUU4ODQxNEFCMkEgNTI3QUI1NDFGRkM1QjhCRiA5MzVGN0I5NTFDMTMyOTUxCitIYXNoIG9mICJUaWdlciI6CisgICAgICAgIDlGMDBGNTk5MDcyMzAwREQgMjc2QUJCMzhDOEVCNkRFQyAzNzc5MEMxMTZGOUQyQkRGCitIYXNoIG9mICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSstIjoKKyAgICAgICAgODdGQjJBOTA4Mzg1MUNGNyA0NzBEMkNGODEwRTZERjlFIEI1ODY0NDUwMzRBNUEzODYKK0hhc2ggb2YgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaPWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6KzAxMjM0NTY3ODkiOgorICAgICAgICA0NjdEQjgwODYzRUJDRTQ4IDhERjFDRDEyNjE2NTVERTkgNTc4OTY1NjU5NzVGOTE5NworSGFzaCBvZiAiVGlnZXIgLSBBIEZhc3QgTmV3IEhhc2ggRnVuY3Rpb24sIGJ5IFJvc3MgQW5kZXJzb24gYW5kIEVsaSBCaWhhbSI6CisgICAgICAgIDBDNDEwQTA0Mjk2ODg2OEEgMTY3MURBNUEzRkQyOUE3MiA1RUMxRTQ1N0QzQ0RCMzAzCitIYXNoIG9mICJUaWdlciAtIEEgRmFzdCBOZXcgSGFzaCBGdW5jdGlvbiwgYnkgUm9zcyBBbmRlcnNvbiBhbmQgRWxpIEJpaGFtLCBwcm9jZWVkaW5ncyBvZiBGYXN0IFNvZnR3YXJlIEVuY3J5cHRpb24gMywgQ2FtYnJpZGdlLiI6CisgICAgICAgIEVCRjU5MUQ1QUZBNjU1Q0UgN0YyMjg5NEZGODdGNTRBQyA4OUM4MTFCNkIwREEzMTkzCitIYXNoIG9mICJUaWdlciAtIEEgRmFzdCBOZXcgSGFzaCBGdW5jdGlvbiwgYnkgUm9zcyBBbmRlcnNvbiBhbmQgRWxpIEJpaGFtLCBwcm9jZWVkaW5ncyBvZiBGYXN0IFNvZnR3YXJlIEVuY3J5cHRpb24gMywgQ2FtYnJpZGdlLCAxOTk2LiI6CisgICAgICAgIDNEOUFFQjAzRDFCRDFBNjMgNTdCMjc3NERGRDZENUIyNCBERDY4MTUxRDUwMzk3NEZDCitIYXNoIG9mICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSstQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLSI6CisgICAgICAgIDAwQjgzRUI0RTUzNDQwQzUgNzZBQzZBQUVFMEE3NDg1OCAyNUZEMTVFNzBBNTlGRkU0CisqLworCisKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3RpZ2VyLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3doaXJsL3doaXJsLmMgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3doaXJsL3doaXJsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVlMzhhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvd2hpcmwvd2hpcmwuYwpAQCAtMCwwICsxLDMxNCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyoqIAorICAgQGZpbGUgd2hpcmwuYworICAgV0hJUkxQT09MICh1c2luZyB0aGVpciBuZXcgc2JveCkgaGFzaCBmdW5jdGlvbiBieSBUb20gU3QgRGVuaXMgCisqLworCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIFdISVJMUE9PTAorCitjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciB3aGlybHBvb2xfZGVzYyA9Cit7CisgICAgIndoaXJscG9vbCIsCisgICAgMTEsCisgICAgNjQsCisgICAgNjQsCisKKyAgIC8qIE9JRCAqLworICAgeyAxLCAwLCAxMDExOCwgMywgMCwgNTUgfSwKKyAgIDYsCisKKyAgICAmd2hpcmxwb29sX2luaXQsCisgICAgJndoaXJscG9vbF9wcm9jZXNzLAorICAgICZ3aGlybHBvb2xfZG9uZSwKKyAgICAmd2hpcmxwb29sX3Rlc3QsCisgICAgTlVMTAorfTsKKworLyogdGhlIHNib3hlcyAqLworI2luY2x1ZGUgIndoaXJsdGFiLmMiCisKKy8qIGdldCBhX3tpLGp9ICovCisjZGVmaW5lIEdCKGEsaSxqKSAoKGFbKGkpICYgN10gPj4gKDggKiAoaikpKSAmIDI1NSkKKworLyogc2hvcnRjdXQgbWFjcm8gdG8gcGVyZm9ybSB0aHJlZSBmdW5jdGlvbnMgYXQgb25jZSAqLworI2RlZmluZSB0aGV0YV9waV9nYW1tYShhLCBpKSAgICAgICAgICAgICBcCisgICAgU0IwKEdCKGEsIGktMCwgNykpIF4gICAgICAgICAgICAgICAgIFwKKyAgICBTQjEoR0IoYSwgaS0xLCA2KSkgXiAgICAgICAgICAgICAgICAgXAorICAgIFNCMihHQihhLCBpLTIsIDUpKSBeICAgICAgICAgICAgICAgICBcCisgICAgU0IzKEdCKGEsIGktMywgNCkpIF4gICAgICAgICAgICAgICAgIFwKKyAgICBTQjQoR0IoYSwgaS00LCAzKSkgXiAgICAgICAgICAgICAgICAgXAorICAgIFNCNShHQihhLCBpLTUsIDIpKSBeICAgICAgICAgICAgICAgICBcCisgICAgU0I2KEdCKGEsIGktNiwgMSkpIF4gICAgICAgICAgICAgICAgIFwKKyAgICBTQjcoR0IoYSwgaS03LCAwKSkKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworc3RhdGljIGludCBfd2hpcmxwb29sX2NvbXByZXNzKGhhc2hfc3RhdGUgKm1kLCB1bnNpZ25lZCBjaGFyICpidWYpCisjZWxzZQorc3RhdGljIGludCB3aGlybHBvb2xfY29tcHJlc3MoaGFzaF9zdGF0ZSAqbWQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKKyNlbmRpZgoreworICAgdWxvbmc2NCBLWzJdWzhdLCBUWzNdWzhdOworICAgaW50IHgsIHk7CisgICAKKyAgIC8qIGxvYWQgdGhlIGJsb2NrL3N0YXRlICovCisgICBmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CisgICAgICBLWzBdW3hdID0gbWQtPndoaXJscG9vbC5zdGF0ZVt4XTsKKworICAgICAgTE9BRDY0SChUWzBdW3hdLCBidWYgKyAoOCAqIHgpKTsKKyAgICAgIFRbMl1beF0gID0gVFswXVt4XTsKKyAgICAgIFRbMF1beF0gXj0gS1swXVt4XTsKKyAgIH0KKyAgCisgICAvKiBkbyByb3VuZHMgMS4uMTAgKi8KKyAgIGZvciAoeCA9IDA7IHggPCAxMDsgeCArPSAyKSB7CisgICAgICAgLyogb2RkIHJvdW5kICovCisgICAgICAgLyogYXBwbHkgbWFpbiB0cmFuc2Zvcm0gdG8gS1swXSBpbnRvIEtbMV0gKi8KKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSB7CisgICAgICAgICAgIEtbMV1beV0gPSB0aGV0YV9waV9nYW1tYShLWzBdLCB5KTsKKyAgICAgICB9CisgICAgICAgLyogeG9yIHRoZSBjb25zdGFudCAqLworICAgICAgIEtbMV1bMF0gXj0gY29udFt4XTsKKyAgICAgICAKKyAgICAgICAvKiBhcHBseSBtYWluIHRyYW5zZm9ybSB0byBUWzBdIGludG8gVFsxXSAqLworICAgICAgIGZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHsKKyAgICAgICAgICAgVFsxXVt5XSA9IHRoZXRhX3BpX2dhbW1hKFRbMF0sIHkpIF4gS1sxXVt5XTsKKyAgICAgICB9CisKKyAgICAgICAvKiBldmVuIHJvdW5kICovCisgICAgICAgLyogYXBwbHkgbWFpbiB0cmFuc2Zvcm0gdG8gS1sxXSBpbnRvIEtbMF0gKi8KKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSB7CisgICAgICAgICAgIEtbMF1beV0gPSB0aGV0YV9waV9nYW1tYShLWzFdLCB5KTsKKyAgICAgICB9CisgICAgICAgLyogeG9yIHRoZSBjb25zdGFudCAqLworICAgICAgIEtbMF1bMF0gXj0gY29udFt4KzFdOworICAgICAgIAorICAgICAgIC8qIGFwcGx5IG1haW4gdHJhbnNmb3JtIHRvIFRbMV0gaW50byBUWzBdICovCisgICAgICAgZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgeworICAgICAgICAgICBUWzBdW3ldID0gdGhldGFfcGlfZ2FtbWEoVFsxXSwgeSkgXiBLWzBdW3ldOworICAgICAgIH0KKyAgIH0KKyAgIAorICAgLyogc3RvcmUgc3RhdGUgKi8KKyAgIGZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKKyAgICAgIG1kLT53aGlybHBvb2wuc3RhdGVbeF0gXj0gVFswXVt4XSBeIFRbMl1beF07CisgICB9CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCitzdGF0aWMgaW50IHdoaXJscG9vbF9jb21wcmVzcyhoYXNoX3N0YXRlICptZCwgdW5zaWduZWQgY2hhciAqYnVmKQoreworICAgaW50IGVycjsKKyAgIGVyciA9IF93aGlybHBvb2xfY29tcHJlc3MobWQsIGJ1Zik7CisgICBidXJuX3N0YWNrKCg1ICogOCAqIHNpemVvZih1bG9uZzY0KSkgKyAoMiAqIHNpemVvZihpbnQpKSk7CisgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKworLyoqCisgICBJbml0aWFsaXplIHRoZSBoYXNoIHN0YXRlCisgICBAcGFyYW0gbWQgICBUaGUgaGFzaCBzdGF0ZSB5b3Ugd2lzaCB0byBpbml0aWFsaXplCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgd2hpcmxwb29sX2luaXQoaGFzaF9zdGF0ZSAqIG1kKQoreworICAgTFRDX0FSR0NISyhtZCAhPSBOVUxMKTsKKyAgIHplcm9tZW0oJm1kLT53aGlybHBvb2wsIHNpemVvZihtZC0+d2hpcmxwb29sKSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICAgUHJvY2VzcyBhIGJsb2NrIG9mIG1lbW9yeSB0aG91Z2ggdGhlIGhhc2gKKyAgIEBwYXJhbSBtZCAgICAgVGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBpbiAgICAgVGhlIGRhdGEgdG8gaGFzaAorICAgQHBhcmFtIGlubGVuICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIChvY3RldHMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitIQVNIX1BST0NFU1Mod2hpcmxwb29sX3Byb2Nlc3MsIHdoaXJscG9vbF9jb21wcmVzcywgd2hpcmxwb29sLCA2NCkKKworLyoqCisgICBUZXJtaW5hdGUgdGhlIGhhc2ggdG8gZ2V0IHRoZSBkaWdlc3QKKyAgIEBwYXJhbSBtZCAgVGhlIGhhc2ggc3RhdGUKKyAgIEBwYXJhbSBvdXQgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBoYXNoICg2NCBieXRlcykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCB3aGlybHBvb2xfZG9uZShoYXNoX3N0YXRlICogbWQsIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKyAgICBpbnQgaTsKKworICAgIExUQ19BUkdDSEsobWQgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsob3V0ICE9IE5VTEwpOworCisgICAgaWYgKG1kLT53aGlybHBvb2wuY3VybGVuID49IHNpemVvZihtZC0+d2hpcmxwb29sLmJ1ZikpIHsKKyAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgfQorCisgICAgLyogaW5jcmVhc2UgdGhlIGxlbmd0aCBvZiB0aGUgbWVzc2FnZSAqLworICAgIG1kLT53aGlybHBvb2wubGVuZ3RoICs9IG1kLT53aGlybHBvb2wuY3VybGVuICogODsKKworICAgIC8qIGFwcGVuZCB0aGUgJzEnIGJpdCAqLworICAgIG1kLT53aGlybHBvb2wuYnVmW21kLT53aGlybHBvb2wuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMHg4MDsKKworICAgIC8qIGlmIHRoZSBsZW5ndGggaXMgY3VycmVudGx5IGFib3ZlIDMyIGJ5dGVzIHdlIGFwcGVuZCB6ZXJvcworICAgICAqIHRoZW4gY29tcHJlc3MuICBUaGVuIHdlIGNhbiBmYWxsIGJhY2sgdG8gcGFkZGluZyB6ZXJvcyBhbmQgbGVuZ3RoCisgICAgICogZW5jb2RpbmcgbGlrZSBub3JtYWwuCisgICAgICovCisgICAgaWYgKG1kLT53aGlybHBvb2wuY3VybGVuID4gMzIpIHsKKyAgICAgICAgd2hpbGUgKG1kLT53aGlybHBvb2wuY3VybGVuIDwgNjQpIHsKKyAgICAgICAgICAgIG1kLT53aGlybHBvb2wuYnVmW21kLT53aGlybHBvb2wuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMDsKKyAgICAgICAgfQorICAgICAgICB3aGlybHBvb2xfY29tcHJlc3MobWQsIG1kLT53aGlybHBvb2wuYnVmKTsKKyAgICAgICAgbWQtPndoaXJscG9vbC5jdXJsZW4gPSAwOworICAgIH0KKworICAgIC8qIHBhZCB1cHRvIDU2IGJ5dGVzIG9mIHplcm9lcyAoc2hvdWxkIGJlIDMyIGJ1dCB3ZSBvbmx5IHN1cHBvcnQgNjQtYml0IGxlbmd0aHMpICAqLworICAgIHdoaWxlIChtZC0+d2hpcmxwb29sLmN1cmxlbiA8IDU2KSB7CisgICAgICAgIG1kLT53aGlybHBvb2wuYnVmW21kLT53aGlybHBvb2wuY3VybGVuKytdID0gKHVuc2lnbmVkIGNoYXIpMDsKKyAgICB9CisKKyAgICAvKiBzdG9yZSBsZW5ndGggKi8KKyAgICBTVE9SRTY0SChtZC0+d2hpcmxwb29sLmxlbmd0aCwgbWQtPndoaXJscG9vbC5idWYrNTYpOworICAgIHdoaXJscG9vbF9jb21wcmVzcyhtZCwgbWQtPndoaXJscG9vbC5idWYpOworCisgICAgLyogY29weSBvdXRwdXQgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgIFNUT1JFNjRIKG1kLT53aGlybHBvb2wuc3RhdGVbaV0sIG91dCsoOCppKSk7CisgICAgfQorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIHplcm9tZW0obWQsIHNpemVvZigqbWQpKTsKKyNlbmRpZgorICAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIFNlbGYtdGVzdCB0aGUgaGFzaAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3RzIGhhdmUgYmVlbiBkaXNhYmxlZAorKi8gIAoraW50ICB3aGlybHBvb2xfdGVzdCh2b2lkKQoreworICNpZm5kZWYgTFRDX1RFU1QKKyAgICByZXR1cm4gQ1JZUFRfTk9QOworICNlbHNlICAgIAorICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgIGludCBsZW47CisgICAgICB1bnNpZ25lZCBjaGFyIG1zZ1sxMjhdLCBoYXNoWzY0XTsKKyAgfSB0ZXN0c1tdID0geworICAKKyAgLyogTlVMTCBNZXNzYWdlICovCit7CisgIDAsIAorICB7IDB4MDAgfSwKKyAgeyAweDE5LCAweEZBLCAweDYxLCAweEQ3LCAweDU1LCAweDIyLCAweEE0LCAweDY2LCAweDlCLCAweDQ0LCAweEUzLCAweDlDLCAweDFELCAweDJFLCAweDE3LCAweDI2LAorICAgIDB4QzUsIDB4MzAsIDB4MjMsIDB4MjEsIDB4MzAsIDB4RDQsIDB4MDcsIDB4RjgsIDB4OUEsIDB4RkUsIDB4RTAsIDB4OTYsIDB4NDksIDB4OTcsIDB4RjcsIDB4QTcsCisgICAgMHgzRSwgMHg4MywgMHhCRSwgMHg2OSwgMHg4QiwgMHgyOCwgMHg4RiwgMHhFQiwgMHhDRiwgMHg4OCwgMHhFMywgMHhFMCwgMHgzQywgMHg0RiwgMHgwNywgMHg1NywKKyAgICAweEVBLCAweDg5LCAweDY0LCAweEU1LCAweDlCLCAweDYzLCAweEQ5LCAweDM3LCAweDA4LCAweEIxLCAweDM4LCAweENDLCAweDQyLCAweEE2LCAweDZFLCAweEIzIH0KK30sCisKKworICAgLyogNDQ4LWJpdHMgb2YgMCBiaXRzICovCit7CisKKyAgNTYsCisgIHsgMHgwMCB9LAorICB7IDB4MEIsIDB4M0YsIDB4NTMsIDB4NzgsIDB4RUIsIDB4RUQsIDB4MkIsIDB4RjQsIDB4RDcsIDB4QkUsIDB4M0MsIDB4RkQsIDB4ODEsIDB4OEMsIDB4MUIsIDB4MDMsCisgICAgMHhCNiwgMHhCQiwgMHgwMywgMHhEMywgMHg0NiwgMHg5NCwgMHg4QiwgMHgwNCwgMHhGNCwgMHhGNCwgMHgwQywgMHg3MiwgMHg2RiwgMHgwNywgMHg1OCwgMHg3MCwKKyAgICAweDJBLCAweDBGLCAweDFFLCAweDIyLCAweDU4LCAweDgwLCAweEUzLCAweDhELCAweEQ1LCAweEY2LCAweEVELCAweDZELCAweEU5LCAweEIxLCAweEU5LCAweDYxLAorICAgIDB4RTQsIDB4OUYsIDB4QzEsIDB4MzEsIDB4OEQsIDB4N0MsIDB4QjcsIDB4NDgsIDB4MjIsIDB4RjMsIDB4RDAsIDB4RTIsIDB4RTksIDB4QTcsIDB4RTcsIDB4QjAgfQorfSwKKworICAgLyogNTIwLWJpdHMgb2YgMCBiaXRzICovCit7CisgIDY1LAorICB7IDB4MDAgfSwKKyAgeyAweDg1LCAweEUxLCAweDI0LCAweEM0LCAweDQxLCAweDVCLCAweENGLCAweDQzLCAweDE5LCAweDU0LCAweDNFLCAweDNBLCAweDYzLCAweEZGLCAweDU3LCAweDFELAorICAgIDB4MDksIDB4MzUsIDB4NEMsIDB4RUUsIDB4QkUsIDB4RTEsIDB4RTMsIDB4MjUsIDB4MzAsIDB4OEMsIDB4OTAsIDB4NjksIDB4RjQsIDB4M0UsIDB4MkEsIDB4RTQsCisgICAgMHhEMCwgMHhFNSwgMHgxRCwgMHg0RSwgMHhCMSwgMHhFOCwgMHg2NCwgMHgyOCwgMHg3MCwgMHgxOSwgMHg0RSwgMHg5NSwgMHgzMCwgMHhEOCwgMHhEOCwgMHhBRiwKKyAgICAweDY1LCAweDg5LCAweEQxLCAweEJGLCAweDY5LCAweDQ5LCAweERELCAweEY5LCAweDBBLCAweDdGLCAweDEyLCAweDA4LCAweDYyLCAweDM3LCAweDk1LCAweEI5IH0KK30sCisKKyAgIC8qIDUxMi1iaXRzLCBsZWFkaW5nIHNldCAqLworeworICA2NCwKKyAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCisgIHsgMHgxMCwgMHgzRSwgMHgwMCwgMHg1NSwgMHhBOSwgMHhCMCwgMHg5MCwgMHhFMSwgMHgxQywgMHg4RiwgMHhERCwgMHhFQiwgMHhCQSwgMHgwNiwgMHhDMCwgMHg1QSwKKyAgICAweENFLCAweDhCLCAweDY0LCAweEI4LCAweDk2LCAweDEyLCAweDhGLCAweDZFLCAweEVELCAweDMwLCAweDcxLCAweEZDLCAweEYzLCAweERDLCAweDE2LCAweDk0LAorICAgIDB4NjcsIDB4NzgsIDB4RTAsIDB4NzIsIDB4MjMsIDB4MjMsIDB4M0YsIDB4RDEsIDB4ODAsIDB4RkMsIDB4NDAsIDB4Q0MsIDB4REIsIDB4ODQsIDB4MzAsIDB4QTYsCisgICAgMHg0MCwgMHhFMywgMHg3NiwgMHgzNCwgMHgyNywgMHgxRSwgMHg2NSwgMHg1QywgMHhBMSwgMHg2NywgMHg0RSwgMHhCRiwgMHhGNSwgMHgwNywgMHhGOCwgMHhDQiB9Cit9LAorCisgICAvKiA1MTItYml0cywgbGVhZGluZyBzZXQgb2Ygc2Vjb25kIGJ5dGUgKi8KK3sKKyAgNjQsCisgIHsgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorICB7IDB4MzUsIDB4N0IsIDB4NDIsIDB4RUEsIDB4NzksIDB4QkMsIDB4OTcsIDB4ODYsIDB4OTcsIDB4NUEsIDB4M0MsIDB4NDQsIDB4NzAsIDB4QUEsIDB4QjIsIDB4M0UsCisgICAgMHg2MiwgMHgyOSwgMHg3OSwgMHg3QiwgMHhBRCwgMHhCRCwgMHg1NCwgMHgzNiwgMHg1QiwgMHg1NCwgMHg5NiwgMHhFNSwgMHg1RCwgMHg5RCwgMHhENywgMHg5RiwKKyAgICAweEU5LCAweDYyLCAweDRGLCAweEI0LCAweDIyLCAweDY2LCAweDkzLCAweDBBLCAweDYyLCAweDhFLCAweEQ0LCAweERCLCAweDA4LCAweEY5LCAweERELCAweDM1LAorICAgIDB4RUYsIDB4MUIsIDB4RTEsIDB4MDQsIDB4NTMsIDB4RkMsIDB4MTgsIDB4RjQsIDB4MkMsIDB4N0YsIDB4NUUsIDB4MUYsIDB4OUIsIDB4QUUsIDB4NTUsIDB4RTAgfQorfSwKKworICAgLyogNTEyLWJpdHMsIGxlYWRpbmcgc2V0IG9mIGxhc3QgYnl0ZSAqLworeworICA2NCwKKyAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwIH0sCisgIHsgMHg4QiwgMHgzOSwgMHgwNCwgMHhERCwgMHgxOSwgMHg4MSwgMHg0MSwgMHgyNiwgMHhGRCwgMHgwMiwgMHg3NCwgMHhBQiwgMHg0OSwgMHhDNSwgMHg5NywgMHhGNiwKKyAgICAweEQ3LCAweDc1LCAweDMzLCAweDUyLCAweEEyLCAweERELCAweDkxLCAweEZELCAweDhGLCAweDlGLCAweDU0LCAweDA1LCAweDRDLCAweDU0LCAweEJGLCAweDBGLAorICAgIDB4MDYsIDB4REIsIDB4NEYsIDB4RjcsIDB4MDgsIDB4QTMsIDB4QTIsIDB4OEIsIDB4QzMsIDB4N0EsIDB4OTIsIDB4MUUsIDB4RUUsIDB4MTEsIDB4RUQsIDB4N0IsCisgICAgMHg2QSwgMHg1MywgMHg3OSwgMHgzMiwgMHhDQywgMHg1RSwgMHg5NCwgMHhFRSwgMHgxRSwgMHhBNiwgMHg1NywgMHg2MCwgMHg3RSwgMHgzNiwgMHhDOSwgMHhGNyB9Cit9LAorICAgCit9OworCisgIGludCBpOworICB1bnNpZ25lZCBjaGFyIHRtcFs2NF07CisgIGhhc2hfc3RhdGUgbWQ7CisKKyAgZm9yIChpID0gMDsgaSA8IChpbnQpKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IGkrKykgeworICAgICAgd2hpcmxwb29sX2luaXQoJm1kKTsKKyAgICAgIHdoaXJscG9vbF9wcm9jZXNzKCZtZCwgKHVuc2lnbmVkIGNoYXIgKil0ZXN0c1tpXS5tc2csIHRlc3RzW2ldLmxlbik7CisgICAgICB3aGlybHBvb2xfZG9uZSgmbWQsIHRtcCk7CisgICAgICBpZiAoWE1FTUNNUCh0bXAsIHRlc3RzW2ldLmhhc2gsIDY0KSAhPSAwKSB7CisjaWYgMCAgICAgIAorICAgICAgICAgcHJpbnRmKCJcbkZhaWxlZCB0ZXN0ICVkXG4iLCBpKTsKKyAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgKSB7CisgICAgICAgICAgICBwcmludGYoIiUwMnggIiwgdG1wW2ldKTsKKyAgICAgICAgICAgIGlmICghKCsraSAmIDE1KSkgcHJpbnRmKCJcbiIpOworICAgICAgICAgfQorI2VuZGlmICAgICAgICAgCisgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgfQorICB9CisgIHJldHVybiBDUllQVF9PSzsKKyAjZW5kaWYKK30KKworCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3doaXJsL3doaXJsLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3doaXJsL3doaXJsdGFiLmMgYi9saWJ0b21jcnlwdC9zcmMvaGFzaGVzL3doaXJsL3doaXJsdGFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzgzZDBiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9oYXNoZXMvd2hpcmwvd2hpcmx0YWIuYwpAQCAtMCwwICsxLDU4MyBAQAorLyoqCisgICBAZmlsZSB3aGlybHRhYi5jCisgICBXSElSTFBPT0wgdGFibGVzLCBUb20gU3QgRGVuaXMKKyovICAgCitzdGF0aWMgY29uc3QgdWxvbmc2NCBzYm94MFtdID0geworQ09OU1Q2NCgweDE4MTg2MDE4YzA3ODMwZDgpLCBDT05TVDY0KDB4MjMyMzhjMjMwNWFmNDYyNiksIENPTlNUNjQoMHhjNmM2M2ZjNjdlZjk5MWI4KSwgQ09OU1Q2NCgweGU4ZTg4N2U4MTM2ZmNkZmIpLCAKK0NPTlNUNjQoMHg4Nzg3MjY4NzRjYTExM2NiKSwgQ09OU1Q2NCgweGI4YjhkYWI4YTk2MjZkMTEpLCBDT05TVDY0KDB4MDEwMTA0MDEwODA1MDIwOSksIENPTlNUNjQoMHg0ZjRmMjE0ZjQyNmU5ZTBkKSwgCitDT05TVDY0KDB4MzYzNmQ4MzZhZGVlNmM5YiksIENPTlNUNjQoMHhhNmE2YTJhNjU5MDQ1MWZmKSwgQ09OU1Q2NCgweGQyZDI2ZmQyZGViZGI5MGMpLCBDT05TVDY0KDB4ZjVmNWYzZjVmYjA2ZjcwZSksIAorQ09OU1Q2NCgweDc5NzlmOTc5ZWY4MGYyOTYpLCBDT05TVDY0KDB4NmY2ZmExNmY1ZmNlZGUzMCksIENPTlNUNjQoMHg5MTkxN2U5MWZjZWYzZjZkKSwgQ09OU1Q2NCgweDUyNTI1NTUyYWEwN2E0ZjgpLCAKK0NPTlNUNjQoMHg2MDYwOWQ2MDI3ZmRjMDQ3KSwgQ09OU1Q2NCgweGJjYmNjYWJjODk3NjY1MzUpLCBDT05TVDY0KDB4OWI5YjU2OWJhY2NkMmIzNyksIENPTlNUNjQoMHg4ZThlMDI4ZTA0OGMwMThhKSwgCitDT05TVDY0KDB4YTNhM2I2YTM3MTE1NWJkMiksIENPTlNUNjQoMHgwYzBjMzAwYzYwM2MxODZjKSwgQ09OU1Q2NCgweDdiN2JmMTdiZmY4YWY2ODQpLCBDT05TVDY0KDB4MzUzNWQ0MzViNWUxNmE4MCksIAorQ09OU1Q2NCgweDFkMWQ3NDFkZTg2OTNhZjUpLCBDT05TVDY0KDB4ZTBlMGE3ZTA1MzQ3ZGRiMyksIENPTlNUNjQoMHhkN2Q3N2JkN2Y2YWNiMzIxKSwgQ09OU1Q2NCgweGMyYzIyZmMyNWVlZDk5OWMpLCAKK0NPTlNUNjQoMHgyZTJlYjgyZTZkOTY1YzQzKSwgQ09OU1Q2NCgweDRiNGIzMTRiNjI3YTk2MjkpLCBDT05TVDY0KDB4ZmVmZWRmZmVhMzIxZTE1ZCksIENPTlNUNjQoMHg1NzU3NDE1NzgyMTZhZWQ1KSwgCitDT05TVDY0KDB4MTUxNTU0MTVhODQxMmFiZCksIENPTlNUNjQoMHg3Nzc3YzE3NzlmYjZlZWU4KSwgQ09OU1Q2NCgweDM3MzdkYzM3YTVlYjZlOTIpLCBDT05TVDY0KDB4ZTVlNWIzZTU3YjU2ZDc5ZSksIAorQ09OU1Q2NCgweDlmOWY0NjlmOGNkOTIzMTMpLCBDT05TVDY0KDB4ZjBmMGU3ZjBkMzE3ZmQyMyksIENPTlNUNjQoMHg0YTRhMzU0YTZhN2Y5NDIwKSwgQ09OU1Q2NCgweGRhZGE0ZmRhOWU5NWE5NDQpLCAKK0NPTlNUNjQoMHg1ODU4N2Q1OGZhMjViMGEyKSwgQ09OU1Q2NCgweGM5YzkwM2M5MDZjYThmY2YpLCBDT05TVDY0KDB4MjkyOWE0Mjk1NThkNTI3YyksIENPTlNUNjQoMHgwYTBhMjgwYTUwMjIxNDVhKSwgCitDT05TVDY0KDB4YjFiMWZlYjFlMTRmN2Y1MCksIENPTlNUNjQoMHhhMGEwYmFhMDY5MWE1ZGM5KSwgQ09OU1Q2NCgweDZiNmJiMTZiN2ZkYWQ2MTQpLCBDT05TVDY0KDB4ODU4NTJlODU1Y2FiMTdkOSksIAorQ09OU1Q2NCgweGJkYmRjZWJkODE3MzY3M2MpLCBDT05TVDY0KDB4NWQ1ZDY5NWRkMjM0YmE4ZiksIENPTlNUNjQoMHgxMDEwNDAxMDgwNTAyMDkwKSwgQ09OU1Q2NCgweGY0ZjRmN2Y0ZjMwM2Y1MDcpLCAKK0NPTlNUNjQoMHhjYmNiMGJjYjE2YzA4YmRkKSwgQ09OU1Q2NCgweDNlM2VmODNlZWRjNjdjZDMpLCBDT05TVDY0KDB4MDUwNTE0MDUyODExMGEyZCksIENPTlNUNjQoMHg2NzY3ODE2NzFmZTZjZTc4KSwgCitDT05TVDY0KDB4ZTRlNGI3ZTQ3MzUzZDU5NyksIENPTlNUNjQoMHgyNzI3OWMyNzI1YmI0ZTAyKSwgQ09OU1Q2NCgweDQxNDExOTQxMzI1ODgyNzMpLCBDT05TVDY0KDB4OGI4YjE2OGIyYzlkMGJhNyksIAorQ09OU1Q2NCgweGE3YTdhNmE3NTEwMTUzZjYpLCBDT05TVDY0KDB4N2Q3ZGU5N2RjZjk0ZmFiMiksIENPTlNUNjQoMHg5NTk1NmU5NWRjZmIzNzQ5KSwgQ09OU1Q2NCgweGQ4ZDg0N2Q4OGU5ZmFkNTYpLCAKK0NPTlNUNjQoMHhmYmZiY2JmYjhiMzBlYjcwKSwgQ09OU1Q2NCgweGVlZWU5ZmVlMjM3MWMxY2QpLCBDT05TVDY0KDB4N2M3Y2VkN2NjNzkxZjhiYiksIENPTlNUNjQoMHg2NjY2ODU2NjE3ZTNjYzcxKSwgCitDT05TVDY0KDB4ZGRkZDUzZGRhNjhlYTc3YiksIENPTlNUNjQoMHgxNzE3NWMxN2I4NGIyZWFmKSwgQ09OU1Q2NCgweDQ3NDcwMTQ3MDI0NjhlNDUpLCBDT05TVDY0KDB4OWU5ZTQyOWU4NGRjMjExYSksIAorQ09OU1Q2NCgweGNhY2EwZmNhMWVjNTg5ZDQpLCBDT05TVDY0KDB4MmQyZGI0MmQ3NTk5NWE1OCksIENPTlNUNjQoMHhiZmJmYzZiZjkxNzk2MzJlKSwgQ09OU1Q2NCgweDA3MDcxYzA3MzgxYjBlM2YpLCAKK0NPTlNUNjQoMHhhZGFkOGVhZDAxMjM0N2FjKSwgQ09OU1Q2NCgweDVhNWE3NTVhZWEyZmI0YjApLCBDT05TVDY0KDB4ODM4MzM2ODM2Y2I1MWJlZiksIENPTlNUNjQoMHgzMzMzY2MzMzg1ZmY2NmI2KSwgCitDT05TVDY0KDB4NjM2MzkxNjMzZmYyYzY1YyksIENPTlNUNjQoMHgwMjAyMDgwMjEwMGEwNDEyKSwgQ09OU1Q2NCgweGFhYWE5MmFhMzkzODQ5OTMpLCBDT05TVDY0KDB4NzE3MWQ5NzFhZmE4ZTJkZSksIAorQ09OU1Q2NCgweGM4YzgwN2M4MGVjZjhkYzYpLCBDT05TVDY0KDB4MTkxOTY0MTljODdkMzJkMSksIENPTlNUNjQoMHg0OTQ5Mzk0OTcyNzA5MjNiKSwgQ09OU1Q2NCgweGQ5ZDk0M2Q5ODY5YWFmNWYpLCAKK0NPTlNUNjQoMHhmMmYyZWZmMmMzMWRmOTMxKSwgQ09OU1Q2NCgweGUzZTNhYmUzNGI0OGRiYTgpLCBDT05TVDY0KDB4NWI1YjcxNWJlMjJhYjZiOSksIENPTlNUNjQoMHg4ODg4MWE4ODM0OTIwZGJjKSwgCitDT05TVDY0KDB4OWE5YTUyOWFhNGM4MjkzZSksIENPTlNUNjQoMHgyNjI2OTgyNjJkYmU0YzBiKSwgQ09OU1Q2NCgweDMyMzJjODMyOGRmYTY0YmYpLCBDT05TVDY0KDB4YjBiMGZhYjBlOTRhN2Q1OSksIAorQ09OU1Q2NCgweGU5ZTk4M2U5MWI2YWNmZjIpLCBDT05TVDY0KDB4MGYwZjNjMGY3ODMzMWU3NyksIENPTlNUNjQoMHhkNWQ1NzNkNWU2YTZiNzMzKSwgQ09OU1Q2NCgweDgwODAzYTgwNzRiYTFkZjQpLCAKK0NPTlNUNjQoMHhiZWJlYzJiZTk5N2M2MTI3KSwgQ09OU1Q2NCgweGNkY2QxM2NkMjZkZTg3ZWIpLCBDT05TVDY0KDB4MzQzNGQwMzRiZGU0Njg4OSksIENPTlNUNjQoMHg0ODQ4M2Q0ODdhNzU5MDMyKSwgCitDT05TVDY0KDB4ZmZmZmRiZmZhYjI0ZTM1NCksIENPTlNUNjQoMHg3YTdhZjU3YWY3OGZmNDhkKSwgQ09OU1Q2NCgweDkwOTA3YTkwZjRlYTNkNjQpLCBDT05TVDY0KDB4NWY1ZjYxNWZjMjNlYmU5ZCksIAorQ09OU1Q2NCgweDIwMjA4MDIwMWRhMDQwM2QpLCBDT05TVDY0KDB4Njg2OGJkNjg2N2Q1ZDAwZiksIENPTlNUNjQoMHgxYTFhNjgxYWQwNzIzNGNhKSwgQ09OU1Q2NCgweGFlYWU4MmFlMTkyYzQxYjcpLCAKK0NPTlNUNjQoMHhiNGI0ZWFiNGM5NWU3NTdkKSwgQ09OU1Q2NCgweDU0NTQ0ZDU0OWExOWE4Y2UpLCBDT05TVDY0KDB4OTM5Mzc2OTNlY2U1M2I3ZiksIENPTlNUNjQoMHgyMjIyODgyMjBkYWE0NDJmKSwgCitDT05TVDY0KDB4NjQ2NDhkNjQwN2U5Yzg2MyksIENPTlNUNjQoMHhmMWYxZTNmMWRiMTJmZjJhKSwgQ09OU1Q2NCgweDczNzNkMTczYmZhMmU2Y2MpLCBDT05TVDY0KDB4MTIxMjQ4MTI5MDVhMjQ4MiksIAorQ09OU1Q2NCgweDQwNDAxZDQwM2E1ZDgwN2EpLCBDT05TVDY0KDB4MDgwODIwMDg0MDI4MTA0OCksIENPTlNUNjQoMHhjM2MzMmJjMzU2ZTg5Yjk1KSwgQ09OU1Q2NCgweGVjZWM5N2VjMzM3YmM1ZGYpLCAKK0NPTlNUNjQoMHhkYmRiNGJkYjk2OTBhYjRkKSwgQ09OU1Q2NCgweGExYTFiZWExNjExZjVmYzApLCBDT05TVDY0KDB4OGQ4ZDBlOGQxYzgzMDc5MSksIENPTlNUNjQoMHgzZDNkZjQzZGY1Yzk3YWM4KSwgCitDT05TVDY0KDB4OTc5NzY2OTdjY2YxMzM1YiksIENPTlNUNjQoMHgwMDAwMDAwMDAwMDAwMDAwKSwgQ09OU1Q2NCgweGNmY2YxYmNmMzZkNDgzZjkpLCBDT05TVDY0KDB4MmIyYmFjMmI0NTg3NTY2ZSksIAorQ09OU1Q2NCgweDc2NzZjNTc2OTdiM2VjZTEpLCBDT05TVDY0KDB4ODI4MjMyODI2NGIwMTllNiksIENPTlNUNjQoMHhkNmQ2N2ZkNmZlYTliMTI4KSwgQ09OU1Q2NCgweDFiMWI2YzFiZDg3NzM2YzMpLCAKK0NPTlNUNjQoMHhiNWI1ZWViNWMxNWI3Nzc0KSwgQ09OU1Q2NCgweGFmYWY4NmFmMTEyOTQzYmUpLCBDT05TVDY0KDB4NmE2YWI1NmE3N2RmZDQxZCksIENPTlNUNjQoMHg1MDUwNWQ1MGJhMGRhMGVhKSwgCitDT05TVDY0KDB4NDU0NTA5NDUxMjRjOGE1NyksIENPTlNUNjQoMHhmM2YzZWJmM2NiMThmYjM4KSwgQ09OU1Q2NCgweDMwMzBjMDMwOWRmMDYwYWQpLCBDT05TVDY0KDB4ZWZlZjliZWYyYjc0YzNjNCksIAorQ09OU1Q2NCgweDNmM2ZmYzNmZTVjMzdlZGEpLCBDT05TVDY0KDB4NTU1NTQ5NTU5MjFjYWFjNyksIENPTlNUNjQoMHhhMmEyYjJhMjc5MTA1OWRiKSwgQ09OU1Q2NCgweGVhZWE4ZmVhMDM2NWM5ZTkpLCAKK0NPTlNUNjQoMHg2NTY1ODk2NTBmZWNjYTZhKSwgQ09OU1Q2NCgweGJhYmFkMmJhYjk2ODY5MDMpLCBDT05TVDY0KDB4MmYyZmJjMmY2NTkzNWU0YSksIENPTlNUNjQoMHhjMGMwMjdjMDRlZTc5ZDhlKSwgCitDT05TVDY0KDB4ZGVkZTVmZGViZTgxYTE2MCksIENPTlNUNjQoMHgxYzFjNzAxY2UwNmMzOGZjKSwgQ09OU1Q2NCgweGZkZmRkM2ZkYmIyZWU3NDYpLCBDT05TVDY0KDB4NGQ0ZDI5NGQ1MjY0OWExZiksIAorQ09OU1Q2NCgweDkyOTI3MjkyZTRlMDM5NzYpLCBDT05TVDY0KDB4NzU3NWM5NzU4ZmJjZWFmYSksIENPTlNUNjQoMHgwNjA2MTgwNjMwMWUwYzM2KSwgQ09OU1Q2NCgweDhhOGExMjhhMjQ5ODA5YWUpLCAKK0NPTlNUNjQoMHhiMmIyZjJiMmY5NDA3OTRiKSwgQ09OU1Q2NCgweGU2ZTZiZmU2NjM1OWQxODUpLCBDT05TVDY0KDB4MGUwZTM4MGU3MDM2MWM3ZSksIENPTlNUNjQoMHgxZjFmN2MxZmY4NjMzZWU3KSwgCitDT05TVDY0KDB4NjI2Mjk1NjIzN2Y3YzQ1NSksIENPTlNUNjQoMHhkNGQ0NzdkNGVlYTNiNTNhKSwgQ09OU1Q2NCgweGE4YTg5YWE4MjkzMjRkODEpLCBDT05TVDY0KDB4OTY5NjYyOTZjNGY0MzE1MiksIAorQ09OU1Q2NCgweGY5ZjljM2Y5OWIzYWVmNjIpLCBDT05TVDY0KDB4YzVjNTMzYzU2NmY2OTdhMyksIENPTlNUNjQoMHgyNTI1OTQyNTM1YjE0YTEwKSwgQ09OU1Q2NCgweDU5NTk3OTU5ZjIyMGIyYWIpLCAKK0NPTlNUNjQoMHg4NDg0MmE4NDU0YWUxNWQwKSwgQ09OU1Q2NCgweDcyNzJkNTcyYjdhN2U0YzUpLCBDT05TVDY0KDB4MzkzOWU0MzlkNWRkNzJlYyksIENPTlNUNjQoMHg0YzRjMmQ0YzVhNjE5ODE2KSwgCitDT05TVDY0KDB4NWU1ZTY1NWVjYTNiYmM5NCksIENPTlNUNjQoMHg3ODc4ZmQ3OGU3ODVmMDlmKSwgQ09OU1Q2NCgweDM4MzhlMDM4ZGRkODcwZTUpLCBDT05TVDY0KDB4OGM4YzBhOGMxNDg2MDU5OCksIAorQ09OU1Q2NCgweGQxZDE2M2QxYzZiMmJmMTcpLCBDT05TVDY0KDB4YTVhNWFlYTU0MTBiNTdlNCksIENPTlNUNjQoMHhlMmUyYWZlMjQzNGRkOWExKSwgQ09OU1Q2NCgweDYxNjE5OTYxMmZmOGMyNGUpLCAKK0NPTlNUNjQoMHhiM2IzZjZiM2YxNDU3YjQyKSwgQ09OU1Q2NCgweDIxMjE4NDIxMTVhNTQyMzQpLCBDT05TVDY0KDB4OWM5YzRhOWM5NGQ2MjUwOCksIENPTlNUNjQoMHgxZTFlNzgxZWYwNjYzY2VlKSwgCitDT05TVDY0KDB4NDM0MzExNDMyMjUyODY2MSksIENPTlNUNjQoMHhjN2M3M2JjNzc2ZmM5M2IxKSwgQ09OU1Q2NCgweGZjZmNkN2ZjYjMyYmU1NGYpLCBDT05TVDY0KDB4MDQwNDEwMDQyMDE0MDgyNCksIAorQ09OU1Q2NCgweDUxNTE1OTUxYjIwOGEyZTMpLCBDT05TVDY0KDB4OTk5OTVlOTliY2M3MmYyNSksIENPTlNUNjQoMHg2ZDZkYTk2ZDRmYzRkYTIyKSwgQ09OU1Q2NCgweDBkMGQzNDBkNjgzOTFhNjUpLCAKK0NPTlNUNjQoMHhmYWZhY2ZmYTgzMzVlOTc5KSwgQ09OU1Q2NCgweGRmZGY1YmRmYjY4NGEzNjkpLCBDT05TVDY0KDB4N2U3ZWU1N2VkNzliZmNhOSksIENPTlNUNjQoMHgyNDI0OTAyNDNkYjQ0ODE5KSwgCitDT05TVDY0KDB4M2IzYmVjM2JjNWQ3NzZmZSksIENPTlNUNjQoMHhhYmFiOTZhYjMxM2Q0YjlhKSwgQ09OU1Q2NCgweGNlY2UxZmNlM2VkMTgxZjApLCBDT05TVDY0KDB4MTExMTQ0MTE4ODU1MjI5OSksIAorQ09OU1Q2NCgweDhmOGYwNjhmMGM4OTAzODMpLCBDT05TVDY0KDB4NGU0ZTI1NGU0YTZiOWMwNCksIENPTlNUNjQoMHhiN2I3ZTZiN2QxNTE3MzY2KSwgQ09OU1Q2NCgweGViZWI4YmViMGI2MGNiZTApLCAKK0NPTlNUNjQoMHgzYzNjZjAzY2ZkY2M3OGMxKSwgQ09OU1Q2NCgweDgxODEzZTgxN2NiZjFmZmQpLCBDT05TVDY0KDB4OTQ5NDZhOTRkNGZlMzU0MCksIENPTlNUNjQoMHhmN2Y3ZmJmN2ViMGNmMzFjKSwgCitDT05TVDY0KDB4YjliOWRlYjlhMTY3NmYxOCksIENPTlNUNjQoMHgxMzEzNGMxMzk4NWYyNjhiKSwgQ09OU1Q2NCgweDJjMmNiMDJjN2Q5YzU4NTEpLCBDT05TVDY0KDB4ZDNkMzZiZDNkNmI4YmIwNSksIAorQ09OU1Q2NCgweGU3ZTdiYmU3NmI1Y2QzOGMpLCBDT05TVDY0KDB4NmU2ZWE1NmU1N2NiZGMzOSksIENPTlNUNjQoMHhjNGM0MzdjNDZlZjM5NWFhKSwgQ09OU1Q2NCgweDAzMDMwYzAzMTgwZjA2MWIpLCAKK0NPTlNUNjQoMHg1NjU2NDU1NjhhMTNhY2RjKSwgQ09OU1Q2NCgweDQ0NDQwZDQ0MWE0OTg4NWUpLCBDT05TVDY0KDB4N2Y3ZmUxN2ZkZjllZmVhMCksIENPTlNUNjQoMHhhOWE5OWVhOTIxMzc0Zjg4KSwgCitDT05TVDY0KDB4MmEyYWE4MmE0ZDgyNTQ2NyksIENPTlNUNjQoMHhiYmJiZDZiYmIxNmQ2YjBhKSwgQ09OU1Q2NCgweGMxYzEyM2MxNDZlMjlmODcpLCBDT05TVDY0KDB4NTM1MzUxNTNhMjAyYTZmMSksIAorQ09OU1Q2NCgweGRjZGM1N2RjYWU4YmE1NzIpLCBDT05TVDY0KDB4MGIwYjJjMGI1ODI3MTY1MyksIENPTlNUNjQoMHg5ZDlkNGU5ZDljZDMyNzAxKSwgQ09OU1Q2NCgweDZjNmNhZDZjNDdjMWQ4MmIpLCAKK0NPTlNUNjQoMHgzMTMxYzQzMTk1ZjU2MmE0KSwgQ09OU1Q2NCgweDc0NzRjZDc0ODdiOWU4ZjMpLCBDT05TVDY0KDB4ZjZmNmZmZjZlMzA5ZjExNSksIENPTlNUNjQoMHg0NjQ2MDU0NjBhNDM4YzRjKSwgCitDT05TVDY0KDB4YWNhYzhhYWMwOTI2NDVhNSksIENPTlNUNjQoMHg4OTg5MWU4OTNjOTcwZmI1KSwgQ09OU1Q2NCgweDE0MTQ1MDE0YTA0NDI4YjQpLCBDT05TVDY0KDB4ZTFlMWEzZTE1YjQyZGZiYSksIAorQ09OU1Q2NCgweDE2MTY1ODE2YjA0ZTJjYTYpLCBDT05TVDY0KDB4M2EzYWU4M2FjZGQyNzRmNyksIENPTlNUNjQoMHg2OTY5Yjk2OTZmZDBkMjA2KSwgQ09OU1Q2NCgweDA5MDkyNDA5NDgyZDEyNDEpLCAKK0NPTlNUNjQoMHg3MDcwZGQ3MGE3YWRlMGQ3KSwgQ09OU1Q2NCgweGI2YjZlMmI2ZDk1NDcxNmYpLCBDT05TVDY0KDB4ZDBkMDY3ZDBjZWI3YmQxZSksIENPTlNUNjQoMHhlZGVkOTNlZDNiN2VjN2Q2KSwgCitDT05TVDY0KDB4Y2NjYzE3Y2MyZWRiODVlMiksIENPTlNUNjQoMHg0MjQyMTU0MjJhNTc4NDY4KSwgQ09OU1Q2NCgweDk4OTg1YTk4YjRjMjJkMmMpLCBDT05TVDY0KDB4YTRhNGFhYTQ0OTBlNTVlZCksIAorQ09OU1Q2NCgweDI4MjhhMDI4NWQ4ODUwNzUpLCBDT05TVDY0KDB4NWM1YzZkNWNkYTMxYjg4NiksIENPTlNUNjQoMHhmOGY4YzdmODkzM2ZlZDZiKSwgQ09OU1Q2NCgweDg2ODYyMjg2NDRhNDExYzIpCit9OworCisjaWZkZWYgTFRDX1NNQUxMX0NPREUKKworI2RlZmluZSBTQjAoeCkgc2JveDBbeF0KKyNkZWZpbmUgU0IxKHgpIFJPUjY0YyhzYm94MFt4XSwgOCkKKyNkZWZpbmUgU0IyKHgpIFJPUjY0YyhzYm94MFt4XSwgMTYpCisjZGVmaW5lIFNCMyh4KSBST1I2NGMoc2JveDBbeF0sIDI0KQorI2RlZmluZSBTQjQoeCkgUk9SNjRjKHNib3gwW3hdLCAzMikKKyNkZWZpbmUgU0I1KHgpIFJPUjY0YyhzYm94MFt4XSwgNDApCisjZGVmaW5lIFNCNih4KSBST1I2NGMoc2JveDBbeF0sIDQ4KQorI2RlZmluZSBTQjcoeCkgUk9SNjRjKHNib3gwW3hdLCA1NikKKworI2Vsc2UKKworI2RlZmluZSBTQjAoeCkgc2JveDBbeF0KKyNkZWZpbmUgU0IxKHgpIHNib3gxW3hdCisjZGVmaW5lIFNCMih4KSBzYm94Mlt4XQorI2RlZmluZSBTQjMoeCkgc2JveDNbeF0KKyNkZWZpbmUgU0I0KHgpIHNib3g0W3hdCisjZGVmaW5lIFNCNSh4KSBzYm94NVt4XQorI2RlZmluZSBTQjYoeCkgc2JveDZbeF0KKyNkZWZpbmUgU0I3KHgpIHNib3g3W3hdCisKKworc3RhdGljIGNvbnN0IHVsb25nNjQgc2JveDFbXSA9IHsKK0NPTlNUNjQoMHhkODE4MTg2MDE4YzA3ODMwKSwgQ09OU1Q2NCgweDI2MjMyMzhjMjMwNWFmNDYpLCBDT05TVDY0KDB4YjhjNmM2M2ZjNjdlZjk5MSksIENPTlNUNjQoMHhmYmU4ZTg4N2U4MTM2ZmNkKSwgCitDT05TVDY0KDB4Y2I4Nzg3MjY4NzRjYTExMyksIENPTlNUNjQoMHgxMWI4YjhkYWI4YTk2MjZkKSwgQ09OU1Q2NCgweDA5MDEwMTA0MDEwODA1MDIpLCBDT05TVDY0KDB4MGQ0ZjRmMjE0ZjQyNmU5ZSksIAorQ09OU1Q2NCgweDliMzYzNmQ4MzZhZGVlNmMpLCBDT05TVDY0KDB4ZmZhNmE2YTJhNjU5MDQ1MSksIENPTlNUNjQoMHgwY2QyZDI2ZmQyZGViZGI5KSwgQ09OU1Q2NCgweDBlZjVmNWYzZjVmYjA2ZjcpLCAKK0NPTlNUNjQoMHg5Njc5NzlmOTc5ZWY4MGYyKSwgQ09OU1Q2NCgweDMwNmY2ZmExNmY1ZmNlZGUpLCBDT05TVDY0KDB4NmQ5MTkxN2U5MWZjZWYzZiksIENPTlNUNjQoMHhmODUyNTI1NTUyYWEwN2E0KSwgCitDT05TVDY0KDB4NDc2MDYwOWQ2MDI3ZmRjMCksIENPTlNUNjQoMHgzNWJjYmNjYWJjODk3NjY1KSwgQ09OU1Q2NCgweDM3OWI5YjU2OWJhY2NkMmIpLCBDT05TVDY0KDB4OGE4ZThlMDI4ZTA0OGMwMSksIAorQ09OU1Q2NCgweGQyYTNhM2I2YTM3MTE1NWIpLCBDT05TVDY0KDB4NmMwYzBjMzAwYzYwM2MxOCksIENPTlNUNjQoMHg4NDdiN2JmMTdiZmY4YWY2KSwgQ09OU1Q2NCgweDgwMzUzNWQ0MzViNWUxNmEpLCAKK0NPTlNUNjQoMHhmNTFkMWQ3NDFkZTg2OTNhKSwgQ09OU1Q2NCgweGIzZTBlMGE3ZTA1MzQ3ZGQpLCBDT05TVDY0KDB4MjFkN2Q3N2JkN2Y2YWNiMyksIENPTlNUNjQoMHg5Y2MyYzIyZmMyNWVlZDk5KSwgCitDT05TVDY0KDB4NDMyZTJlYjgyZTZkOTY1YyksIENPTlNUNjQoMHgyOTRiNGIzMTRiNjI3YTk2KSwgQ09OU1Q2NCgweDVkZmVmZWRmZmVhMzIxZTEpLCBDT05TVDY0KDB4ZDU1NzU3NDE1NzgyMTZhZSksIAorQ09OU1Q2NCgweGJkMTUxNTU0MTVhODQxMmEpLCBDT05TVDY0KDB4ZTg3Nzc3YzE3NzlmYjZlZSksIENPTlNUNjQoMHg5MjM3MzdkYzM3YTVlYjZlKSwgQ09OU1Q2NCgweDllZTVlNWIzZTU3YjU2ZDcpLCAKK0NPTlNUNjQoMHgxMzlmOWY0NjlmOGNkOTIzKSwgQ09OU1Q2NCgweDIzZjBmMGU3ZjBkMzE3ZmQpLCBDT05TVDY0KDB4MjA0YTRhMzU0YTZhN2Y5NCksIENPTlNUNjQoMHg0NGRhZGE0ZmRhOWU5NWE5KSwgCitDT05TVDY0KDB4YTI1ODU4N2Q1OGZhMjViMCksIENPTlNUNjQoMHhjZmM5YzkwM2M5MDZjYThmKSwgQ09OU1Q2NCgweDdjMjkyOWE0Mjk1NThkNTIpLCBDT05TVDY0KDB4NWEwYTBhMjgwYTUwMjIxNCksIAorQ09OU1Q2NCgweDUwYjFiMWZlYjFlMTRmN2YpLCBDT05TVDY0KDB4YzlhMGEwYmFhMDY5MWE1ZCksIENPTlNUNjQoMHgxNDZiNmJiMTZiN2ZkYWQ2KSwgQ09OU1Q2NCgweGQ5ODU4NTJlODU1Y2FiMTcpLCAKK0NPTlNUNjQoMHgzY2JkYmRjZWJkODE3MzY3KSwgQ09OU1Q2NCgweDhmNWQ1ZDY5NWRkMjM0YmEpLCBDT05TVDY0KDB4OTAxMDEwNDAxMDgwNTAyMCksIENPTlNUNjQoMHgwN2Y0ZjRmN2Y0ZjMwM2Y1KSwgCitDT05TVDY0KDB4ZGRjYmNiMGJjYjE2YzA4YiksIENPTlNUNjQoMHhkMzNlM2VmODNlZWRjNjdjKSwgQ09OU1Q2NCgweDJkMDUwNTE0MDUyODExMGEpLCBDT05TVDY0KDB4Nzg2NzY3ODE2NzFmZTZjZSksIAorQ09OU1Q2NCgweDk3ZTRlNGI3ZTQ3MzUzZDUpLCBDT05TVDY0KDB4MDIyNzI3OWMyNzI1YmI0ZSksIENPTlNUNjQoMHg3MzQxNDExOTQxMzI1ODgyKSwgQ09OU1Q2NCgweGE3OGI4YjE2OGIyYzlkMGIpLCAKK0NPTlNUNjQoMHhmNmE3YTdhNmE3NTEwMTUzKSwgQ09OU1Q2NCgweGIyN2Q3ZGU5N2RjZjk0ZmEpLCBDT05TVDY0KDB4NDk5NTk1NmU5NWRjZmIzNyksIENPTlNUNjQoMHg1NmQ4ZDg0N2Q4OGU5ZmFkKSwgCitDT05TVDY0KDB4NzBmYmZiY2JmYjhiMzBlYiksIENPTlNUNjQoMHhjZGVlZWU5ZmVlMjM3MWMxKSwgQ09OU1Q2NCgweGJiN2M3Y2VkN2NjNzkxZjgpLCBDT05TVDY0KDB4NzE2NjY2ODU2NjE3ZTNjYyksIAorQ09OU1Q2NCgweDdiZGRkZDUzZGRhNjhlYTcpLCBDT05TVDY0KDB4YWYxNzE3NWMxN2I4NGIyZSksIENPTlNUNjQoMHg0NTQ3NDcwMTQ3MDI0NjhlKSwgQ09OU1Q2NCgweDFhOWU5ZTQyOWU4NGRjMjEpLCAKK0NPTlNUNjQoMHhkNGNhY2EwZmNhMWVjNTg5KSwgQ09OU1Q2NCgweDU4MmQyZGI0MmQ3NTk5NWEpLCBDT05TVDY0KDB4MmViZmJmYzZiZjkxNzk2MyksIENPTlNUNjQoMHgzZjA3MDcxYzA3MzgxYjBlKSwgCitDT05TVDY0KDB4YWNhZGFkOGVhZDAxMjM0NyksIENPTlNUNjQoMHhiMDVhNWE3NTVhZWEyZmI0KSwgQ09OU1Q2NCgweGVmODM4MzM2ODM2Y2I1MWIpLCBDT05TVDY0KDB4YjYzMzMzY2MzMzg1ZmY2NiksIAorQ09OU1Q2NCgweDVjNjM2MzkxNjMzZmYyYzYpLCBDT05TVDY0KDB4MTIwMjAyMDgwMjEwMGEwNCksIENPTlNUNjQoMHg5M2FhYWE5MmFhMzkzODQ5KSwgQ09OU1Q2NCgweGRlNzE3MWQ5NzFhZmE4ZTIpLCAKK0NPTlNUNjQoMHhjNmM4YzgwN2M4MGVjZjhkKSwgQ09OU1Q2NCgweGQxMTkxOTY0MTljODdkMzIpLCBDT05TVDY0KDB4M2I0OTQ5Mzk0OTcyNzA5MiksIENPTlNUNjQoMHg1ZmQ5ZDk0M2Q5ODY5YWFmKSwgCitDT05TVDY0KDB4MzFmMmYyZWZmMmMzMWRmOSksIENPTlNUNjQoMHhhOGUzZTNhYmUzNGI0OGRiKSwgQ09OU1Q2NCgweGI5NWI1YjcxNWJlMjJhYjYpLCBDT05TVDY0KDB4YmM4ODg4MWE4ODM0OTIwZCksIAorQ09OU1Q2NCgweDNlOWE5YTUyOWFhNGM4MjkpLCBDT05TVDY0KDB4MGIyNjI2OTgyNjJkYmU0YyksIENPTlNUNjQoMHhiZjMyMzJjODMyOGRmYTY0KSwgQ09OU1Q2NCgweDU5YjBiMGZhYjBlOTRhN2QpLCAKK0NPTlNUNjQoMHhmMmU5ZTk4M2U5MWI2YWNmKSwgQ09OU1Q2NCgweDc3MGYwZjNjMGY3ODMzMWUpLCBDT05TVDY0KDB4MzNkNWQ1NzNkNWU2YTZiNyksIENPTlNUNjQoMHhmNDgwODAzYTgwNzRiYTFkKSwgCitDT05TVDY0KDB4MjdiZWJlYzJiZTk5N2M2MSksIENPTlNUNjQoMHhlYmNkY2QxM2NkMjZkZTg3KSwgQ09OU1Q2NCgweDg5MzQzNGQwMzRiZGU0NjgpLCBDT05TVDY0KDB4MzI0ODQ4M2Q0ODdhNzU5MCksIAorQ09OU1Q2NCgweDU0ZmZmZmRiZmZhYjI0ZTMpLCBDT05TVDY0KDB4OGQ3YTdhZjU3YWY3OGZmNCksIENPTlNUNjQoMHg2NDkwOTA3YTkwZjRlYTNkKSwgQ09OU1Q2NCgweDlkNWY1ZjYxNWZjMjNlYmUpLCAKK0NPTlNUNjQoMHgzZDIwMjA4MDIwMWRhMDQwKSwgQ09OU1Q2NCgweDBmNjg2OGJkNjg2N2Q1ZDApLCBDT05TVDY0KDB4Y2ExYTFhNjgxYWQwNzIzNCksIENPTlNUNjQoMHhiN2FlYWU4MmFlMTkyYzQxKSwgCitDT05TVDY0KDB4N2RiNGI0ZWFiNGM5NWU3NSksIENPTlNUNjQoMHhjZTU0NTQ0ZDU0OWExOWE4KSwgQ09OU1Q2NCgweDdmOTM5Mzc2OTNlY2U1M2IpLCBDT05TVDY0KDB4MmYyMjIyODgyMjBkYWE0NCksIAorQ09OU1Q2NCgweDYzNjQ2NDhkNjQwN2U5YzgpLCBDT05TVDY0KDB4MmFmMWYxZTNmMWRiMTJmZiksIENPTlNUNjQoMHhjYzczNzNkMTczYmZhMmU2KSwgQ09OU1Q2NCgweDgyMTIxMjQ4MTI5MDVhMjQpLCAKK0NPTlNUNjQoMHg3YTQwNDAxZDQwM2E1ZDgwKSwgQ09OU1Q2NCgweDQ4MDgwODIwMDg0MDI4MTApLCBDT05TVDY0KDB4OTVjM2MzMmJjMzU2ZTg5YiksIENPTlNUNjQoMHhkZmVjZWM5N2VjMzM3YmM1KSwgCitDT05TVDY0KDB4NGRkYmRiNGJkYjk2OTBhYiksIENPTlNUNjQoMHhjMGExYTFiZWExNjExZjVmKSwgQ09OU1Q2NCgweDkxOGQ4ZDBlOGQxYzgzMDcpLCBDT05TVDY0KDB4YzgzZDNkZjQzZGY1Yzk3YSksIAorQ09OU1Q2NCgweDViOTc5NzY2OTdjY2YxMzMpLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHhmOWNmY2YxYmNmMzZkNDgzKSwgQ09OU1Q2NCgweDZlMmIyYmFjMmI0NTg3NTYpLCAKK0NPTlNUNjQoMHhlMTc2NzZjNTc2OTdiM2VjKSwgQ09OU1Q2NCgweGU2ODI4MjMyODI2NGIwMTkpLCBDT05TVDY0KDB4MjhkNmQ2N2ZkNmZlYTliMSksIENPTlNUNjQoMHhjMzFiMWI2YzFiZDg3NzM2KSwgCitDT05TVDY0KDB4NzRiNWI1ZWViNWMxNWI3NyksIENPTlNUNjQoMHhiZWFmYWY4NmFmMTEyOTQzKSwgQ09OU1Q2NCgweDFkNmE2YWI1NmE3N2RmZDQpLCBDT05TVDY0KDB4ZWE1MDUwNWQ1MGJhMGRhMCksIAorQ09OU1Q2NCgweDU3NDU0NTA5NDUxMjRjOGEpLCBDT05TVDY0KDB4MzhmM2YzZWJmM2NiMThmYiksIENPTlNUNjQoMHhhZDMwMzBjMDMwOWRmMDYwKSwgQ09OU1Q2NCgweGM0ZWZlZjliZWYyYjc0YzMpLCAKK0NPTlNUNjQoMHhkYTNmM2ZmYzNmZTVjMzdlKSwgQ09OU1Q2NCgweGM3NTU1NTQ5NTU5MjFjYWEpLCBDT05TVDY0KDB4ZGJhMmEyYjJhMjc5MTA1OSksIENPTlNUNjQoMHhlOWVhZWE4ZmVhMDM2NWM5KSwgCitDT05TVDY0KDB4NmE2NTY1ODk2NTBmZWNjYSksIENPTlNUNjQoMHgwM2JhYmFkMmJhYjk2ODY5KSwgQ09OU1Q2NCgweDRhMmYyZmJjMmY2NTkzNWUpLCBDT05TVDY0KDB4OGVjMGMwMjdjMDRlZTc5ZCksIAorQ09OU1Q2NCgweDYwZGVkZTVmZGViZTgxYTEpLCBDT05TVDY0KDB4ZmMxYzFjNzAxY2UwNmMzOCksIENPTlNUNjQoMHg0NmZkZmRkM2ZkYmIyZWU3KSwgQ09OU1Q2NCgweDFmNGQ0ZDI5NGQ1MjY0OWEpLCAKK0NPTlNUNjQoMHg3NjkyOTI3MjkyZTRlMDM5KSwgQ09OU1Q2NCgweGZhNzU3NWM5NzU4ZmJjZWEpLCBDT05TVDY0KDB4MzYwNjA2MTgwNjMwMWUwYyksIENPTlNUNjQoMHhhZThhOGExMjhhMjQ5ODA5KSwgCitDT05TVDY0KDB4NGJiMmIyZjJiMmY5NDA3OSksIENPTlNUNjQoMHg4NWU2ZTZiZmU2NjM1OWQxKSwgQ09OU1Q2NCgweDdlMGUwZTM4MGU3MDM2MWMpLCBDT05TVDY0KDB4ZTcxZjFmN2MxZmY4NjMzZSksIAorQ09OU1Q2NCgweDU1NjI2Mjk1NjIzN2Y3YzQpLCBDT05TVDY0KDB4M2FkNGQ0NzdkNGVlYTNiNSksIENPTlNUNjQoMHg4MWE4YTg5YWE4MjkzMjRkKSwgQ09OU1Q2NCgweDUyOTY5NjYyOTZjNGY0MzEpLCAKK0NPTlNUNjQoMHg2MmY5ZjljM2Y5OWIzYWVmKSwgQ09OU1Q2NCgweGEzYzVjNTMzYzU2NmY2OTcpLCBDT05TVDY0KDB4MTAyNTI1OTQyNTM1YjE0YSksIENPTlNUNjQoMHhhYjU5NTk3OTU5ZjIyMGIyKSwgCitDT05TVDY0KDB4ZDA4NDg0MmE4NDU0YWUxNSksIENPTlNUNjQoMHhjNTcyNzJkNTcyYjdhN2U0KSwgQ09OU1Q2NCgweGVjMzkzOWU0MzlkNWRkNzIpLCBDT05TVDY0KDB4MTY0YzRjMmQ0YzVhNjE5OCksIAorQ09OU1Q2NCgweDk0NWU1ZTY1NWVjYTNiYmMpLCBDT05TVDY0KDB4OWY3ODc4ZmQ3OGU3ODVmMCksIENPTlNUNjQoMHhlNTM4MzhlMDM4ZGRkODcwKSwgQ09OU1Q2NCgweDk4OGM4YzBhOGMxNDg2MDUpLCAKK0NPTlNUNjQoMHgxN2QxZDE2M2QxYzZiMmJmKSwgQ09OU1Q2NCgweGU0YTVhNWFlYTU0MTBiNTcpLCBDT05TVDY0KDB4YTFlMmUyYWZlMjQzNGRkOSksIENPTlNUNjQoMHg0ZTYxNjE5OTYxMmZmOGMyKSwgCitDT05TVDY0KDB4NDJiM2IzZjZiM2YxNDU3YiksIENPTlNUNjQoMHgzNDIxMjE4NDIxMTVhNTQyKSwgQ09OU1Q2NCgweDA4OWM5YzRhOWM5NGQ2MjUpLCBDT05TVDY0KDB4ZWUxZTFlNzgxZWYwNjYzYyksIAorQ09OU1Q2NCgweDYxNDM0MzExNDMyMjUyODYpLCBDT05TVDY0KDB4YjFjN2M3M2JjNzc2ZmM5MyksIENPTlNUNjQoMHg0ZmZjZmNkN2ZjYjMyYmU1KSwgQ09OU1Q2NCgweDI0MDQwNDEwMDQyMDE0MDgpLCAKK0NPTlNUNjQoMHhlMzUxNTE1OTUxYjIwOGEyKSwgQ09OU1Q2NCgweDI1OTk5OTVlOTliY2M3MmYpLCBDT05TVDY0KDB4MjI2ZDZkYTk2ZDRmYzRkYSksIENPTlNUNjQoMHg2NTBkMGQzNDBkNjgzOTFhKSwgCitDT05TVDY0KDB4NzlmYWZhY2ZmYTgzMzVlOSksIENPTlNUNjQoMHg2OWRmZGY1YmRmYjY4NGEzKSwgQ09OU1Q2NCgweGE5N2U3ZWU1N2VkNzliZmMpLCBDT05TVDY0KDB4MTkyNDI0OTAyNDNkYjQ0OCksIAorQ09OU1Q2NCgweGZlM2IzYmVjM2JjNWQ3NzYpLCBDT05TVDY0KDB4OWFhYmFiOTZhYjMxM2Q0YiksIENPTlNUNjQoMHhmMGNlY2UxZmNlM2VkMTgxKSwgQ09OU1Q2NCgweDk5MTExMTQ0MTE4ODU1MjIpLCAKK0NPTlNUNjQoMHg4MzhmOGYwNjhmMGM4OTAzKSwgQ09OU1Q2NCgweDA0NGU0ZTI1NGU0YTZiOWMpLCBDT05TVDY0KDB4NjZiN2I3ZTZiN2QxNTE3MyksIENPTlNUNjQoMHhlMGViZWI4YmViMGI2MGNiKSwgCitDT05TVDY0KDB4YzEzYzNjZjAzY2ZkY2M3OCksIENPTlNUNjQoMHhmZDgxODEzZTgxN2NiZjFmKSwgQ09OU1Q2NCgweDQwOTQ5NDZhOTRkNGZlMzUpLCBDT05TVDY0KDB4MWNmN2Y3ZmJmN2ViMGNmMyksIAorQ09OU1Q2NCgweDE4YjliOWRlYjlhMTY3NmYpLCBDT05TVDY0KDB4OGIxMzEzNGMxMzk4NWYyNiksIENPTlNUNjQoMHg1MTJjMmNiMDJjN2Q5YzU4KSwgQ09OU1Q2NCgweDA1ZDNkMzZiZDNkNmI4YmIpLCAKK0NPTlNUNjQoMHg4Y2U3ZTdiYmU3NmI1Y2QzKSwgQ09OU1Q2NCgweDM5NmU2ZWE1NmU1N2NiZGMpLCBDT05TVDY0KDB4YWFjNGM0MzdjNDZlZjM5NSksIENPTlNUNjQoMHgxYjAzMDMwYzAzMTgwZjA2KSwgCitDT05TVDY0KDB4ZGM1NjU2NDU1NjhhMTNhYyksIENPTlNUNjQoMHg1ZTQ0NDQwZDQ0MWE0OTg4KSwgQ09OU1Q2NCgweGEwN2Y3ZmUxN2ZkZjllZmUpLCBDT05TVDY0KDB4ODhhOWE5OWVhOTIxMzc0ZiksIAorQ09OU1Q2NCgweDY3MmEyYWE4MmE0ZDgyNTQpLCBDT05TVDY0KDB4MGFiYmJiZDZiYmIxNmQ2YiksIENPTlNUNjQoMHg4N2MxYzEyM2MxNDZlMjlmKSwgQ09OU1Q2NCgweGYxNTM1MzUxNTNhMjAyYTYpLCAKK0NPTlNUNjQoMHg3MmRjZGM1N2RjYWU4YmE1KSwgQ09OU1Q2NCgweDUzMGIwYjJjMGI1ODI3MTYpLCBDT05TVDY0KDB4MDE5ZDlkNGU5ZDljZDMyNyksIENPTlNUNjQoMHgyYjZjNmNhZDZjNDdjMWQ4KSwgCitDT05TVDY0KDB4YTQzMTMxYzQzMTk1ZjU2MiksIENPTlNUNjQoMHhmMzc0NzRjZDc0ODdiOWU4KSwgQ09OU1Q2NCgweDE1ZjZmNmZmZjZlMzA5ZjEpLCBDT05TVDY0KDB4NGM0NjQ2MDU0NjBhNDM4YyksIAorQ09OU1Q2NCgweGE1YWNhYzhhYWMwOTI2NDUpLCBDT05TVDY0KDB4YjU4OTg5MWU4OTNjOTcwZiksIENPTlNUNjQoMHhiNDE0MTQ1MDE0YTA0NDI4KSwgQ09OU1Q2NCgweGJhZTFlMWEzZTE1YjQyZGYpLCAKK0NPTlNUNjQoMHhhNjE2MTY1ODE2YjA0ZTJjKSwgQ09OU1Q2NCgweGY3M2EzYWU4M2FjZGQyNzQpLCBDT05TVDY0KDB4MDY2OTY5Yjk2OTZmZDBkMiksIENPTlNUNjQoMHg0MTA5MDkyNDA5NDgyZDEyKSwgCitDT05TVDY0KDB4ZDc3MDcwZGQ3MGE3YWRlMCksIENPTlNUNjQoMHg2ZmI2YjZlMmI2ZDk1NDcxKSwgQ09OU1Q2NCgweDFlZDBkMDY3ZDBjZWI3YmQpLCBDT05TVDY0KDB4ZDZlZGVkOTNlZDNiN2VjNyksIAorQ09OU1Q2NCgweGUyY2NjYzE3Y2MyZWRiODUpLCBDT05TVDY0KDB4Njg0MjQyMTU0MjJhNTc4NCksIENPTlNUNjQoMHgyYzk4OTg1YTk4YjRjMjJkKSwgQ09OU1Q2NCgweGVkYTRhNGFhYTQ0OTBlNTUpLCAKK0NPTlNUNjQoMHg3NTI4MjhhMDI4NWQ4ODUwKSwgQ09OU1Q2NCgweDg2NWM1YzZkNWNkYTMxYjgpLCBDT05TVDY0KDB4NmJmOGY4YzdmODkzM2ZlZCksIENPTlNUNjQoMHhjMjg2ODYyMjg2NDRhNDExKQorfTsKKworc3RhdGljIGNvbnN0IHVsb25nNjQgc2JveDJbXSA9IHsKK0NPTlNUNjQoMHgzMGQ4MTgxODYwMThjMDc4KSwgQ09OU1Q2NCgweDQ2MjYyMzIzOGMyMzA1YWYpLCBDT05TVDY0KDB4OTFiOGM2YzYzZmM2N2VmOSksIENPTlNUNjQoMHhjZGZiZThlODg3ZTgxMzZmKSwgCitDT05TVDY0KDB4MTNjYjg3ODcyNjg3NGNhMSksIENPTlNUNjQoMHg2ZDExYjhiOGRhYjhhOTYyKSwgQ09OU1Q2NCgweDAyMDkwMTAxMDQwMTA4MDUpLCBDT05TVDY0KDB4OWUwZDRmNGYyMTRmNDI2ZSksIAorQ09OU1Q2NCgweDZjOWIzNjM2ZDgzNmFkZWUpLCBDT05TVDY0KDB4NTFmZmE2YTZhMmE2NTkwNCksIENPTlNUNjQoMHhiOTBjZDJkMjZmZDJkZWJkKSwgQ09OU1Q2NCgweGY3MGVmNWY1ZjNmNWZiMDYpLCAKK0NPTlNUNjQoMHhmMjk2Nzk3OWY5NzllZjgwKSwgQ09OU1Q2NCgweGRlMzA2ZjZmYTE2ZjVmY2UpLCBDT05TVDY0KDB4M2Y2ZDkxOTE3ZTkxZmNlZiksIENPTlNUNjQoMHhhNGY4NTI1MjU1NTJhYTA3KSwgCitDT05TVDY0KDB4YzA0NzYwNjA5ZDYwMjdmZCksIENPTlNUNjQoMHg2NTM1YmNiY2NhYmM4OTc2KSwgQ09OU1Q2NCgweDJiMzc5YjliNTY5YmFjY2QpLCBDT05TVDY0KDB4MDE4YThlOGUwMjhlMDQ4YyksIAorQ09OU1Q2NCgweDViZDJhM2EzYjZhMzcxMTUpLCBDT05TVDY0KDB4MTg2YzBjMGMzMDBjNjAzYyksIENPTlNUNjQoMHhmNjg0N2I3YmYxN2JmZjhhKSwgQ09OU1Q2NCgweDZhODAzNTM1ZDQzNWI1ZTEpLCAKK0NPTlNUNjQoMHgzYWY1MWQxZDc0MWRlODY5KSwgQ09OU1Q2NCgweGRkYjNlMGUwYTdlMDUzNDcpLCBDT05TVDY0KDB4YjMyMWQ3ZDc3YmQ3ZjZhYyksIENPTlNUNjQoMHg5OTljYzJjMjJmYzI1ZWVkKSwgCitDT05TVDY0KDB4NWM0MzJlMmViODJlNmQ5NiksIENPTlNUNjQoMHg5NjI5NGI0YjMxNGI2MjdhKSwgQ09OU1Q2NCgweGUxNWRmZWZlZGZmZWEzMjEpLCBDT05TVDY0KDB4YWVkNTU3NTc0MTU3ODIxNiksIAorQ09OU1Q2NCgweDJhYmQxNTE1NTQxNWE4NDEpLCBDT05TVDY0KDB4ZWVlODc3NzdjMTc3OWZiNiksIENPTlNUNjQoMHg2ZTkyMzczN2RjMzdhNWViKSwgQ09OU1Q2NCgweGQ3OWVlNWU1YjNlNTdiNTYpLCAKK0NPTlNUNjQoMHgyMzEzOWY5ZjQ2OWY4Y2Q5KSwgQ09OU1Q2NCgweGZkMjNmMGYwZTdmMGQzMTcpLCBDT05TVDY0KDB4OTQyMDRhNGEzNTRhNmE3ZiksIENPTlNUNjQoMHhhOTQ0ZGFkYTRmZGE5ZTk1KSwgCitDT05TVDY0KDB4YjBhMjU4NTg3ZDU4ZmEyNSksIENPTlNUNjQoMHg4ZmNmYzljOTAzYzkwNmNhKSwgQ09OU1Q2NCgweDUyN2MyOTI5YTQyOTU1OGQpLCBDT05TVDY0KDB4MTQ1YTBhMGEyODBhNTAyMiksIAorQ09OU1Q2NCgweDdmNTBiMWIxZmViMWUxNGYpLCBDT05TVDY0KDB4NWRjOWEwYTBiYWEwNjkxYSksIENPTlNUNjQoMHhkNjE0NmI2YmIxNmI3ZmRhKSwgQ09OU1Q2NCgweDE3ZDk4NTg1MmU4NTVjYWIpLCAKK0NPTlNUNjQoMHg2NzNjYmRiZGNlYmQ4MTczKSwgQ09OU1Q2NCgweGJhOGY1ZDVkNjk1ZGQyMzQpLCBDT05TVDY0KDB4MjA5MDEwMTA0MDEwODA1MCksIENPTlNUNjQoMHhmNTA3ZjRmNGY3ZjRmMzAzKSwgCitDT05TVDY0KDB4OGJkZGNiY2IwYmNiMTZjMCksIENPTlNUNjQoMHg3Y2QzM2UzZWY4M2VlZGM2KSwgQ09OU1Q2NCgweDBhMmQwNTA1MTQwNTI4MTEpLCBDT05TVDY0KDB4Y2U3ODY3Njc4MTY3MWZlNiksIAorQ09OU1Q2NCgweGQ1OTdlNGU0YjdlNDczNTMpLCBDT05TVDY0KDB4NGUwMjI3Mjc5YzI3MjViYiksIENPTlNUNjQoMHg4MjczNDE0MTE5NDEzMjU4KSwgQ09OU1Q2NCgweDBiYTc4YjhiMTY4YjJjOWQpLCAKK0NPTlNUNjQoMHg1M2Y2YTdhN2E2YTc1MTAxKSwgQ09OU1Q2NCgweGZhYjI3ZDdkZTk3ZGNmOTQpLCBDT05TVDY0KDB4Mzc0OTk1OTU2ZTk1ZGNmYiksIENPTlNUNjQoMHhhZDU2ZDhkODQ3ZDg4ZTlmKSwgCitDT05TVDY0KDB4ZWI3MGZiZmJjYmZiOGIzMCksIENPTlNUNjQoMHhjMWNkZWVlZTlmZWUyMzcxKSwgQ09OU1Q2NCgweGY4YmI3YzdjZWQ3Y2M3OTEpLCBDT05TVDY0KDB4Y2M3MTY2NjY4NTY2MTdlMyksIAorQ09OU1Q2NCgweGE3N2JkZGRkNTNkZGE2OGUpLCBDT05TVDY0KDB4MmVhZjE3MTc1YzE3Yjg0YiksIENPTlNUNjQoMHg4ZTQ1NDc0NzAxNDcwMjQ2KSwgQ09OU1Q2NCgweDIxMWE5ZTllNDI5ZTg0ZGMpLCAKK0NPTlNUNjQoMHg4OWQ0Y2FjYTBmY2ExZWM1KSwgQ09OU1Q2NCgweDVhNTgyZDJkYjQyZDc1OTkpLCBDT05TVDY0KDB4NjMyZWJmYmZjNmJmOTE3OSksIENPTlNUNjQoMHgwZTNmMDcwNzFjMDczODFiKSwgCitDT05TVDY0KDB4NDdhY2FkYWQ4ZWFkMDEyMyksIENPTlNUNjQoMHhiNGIwNWE1YTc1NWFlYTJmKSwgQ09OU1Q2NCgweDFiZWY4MzgzMzY4MzZjYjUpLCBDT05TVDY0KDB4NjZiNjMzMzNjYzMzODVmZiksIAorQ09OU1Q2NCgweGM2NWM2MzYzOTE2MzNmZjIpLCBDT05TVDY0KDB4MDQxMjAyMDIwODAyMTAwYSksIENPTlNUNjQoMHg0OTkzYWFhYTkyYWEzOTM4KSwgQ09OU1Q2NCgweGUyZGU3MTcxZDk3MWFmYTgpLCAKK0NPTlNUNjQoMHg4ZGM2YzhjODA3YzgwZWNmKSwgQ09OU1Q2NCgweDMyZDExOTE5NjQxOWM4N2QpLCBDT05TVDY0KDB4OTIzYjQ5NDkzOTQ5NzI3MCksIENPTlNUNjQoMHhhZjVmZDlkOTQzZDk4NjlhKSwgCitDT05TVDY0KDB4ZjkzMWYyZjJlZmYyYzMxZCksIENPTlNUNjQoMHhkYmE4ZTNlM2FiZTM0YjQ4KSwgQ09OU1Q2NCgweGI2Yjk1YjViNzE1YmUyMmEpLCBDT05TVDY0KDB4MGRiYzg4ODgxYTg4MzQ5MiksIAorQ09OU1Q2NCgweDI5M2U5YTlhNTI5YWE0YzgpLCBDT05TVDY0KDB4NGMwYjI2MjY5ODI2MmRiZSksIENPTlNUNjQoMHg2NGJmMzIzMmM4MzI4ZGZhKSwgQ09OU1Q2NCgweDdkNTliMGIwZmFiMGU5NGEpLCAKK0NPTlNUNjQoMHhjZmYyZTllOTgzZTkxYjZhKSwgQ09OU1Q2NCgweDFlNzcwZjBmM2MwZjc4MzMpLCBDT05TVDY0KDB4YjczM2Q1ZDU3M2Q1ZTZhNiksIENPTlNUNjQoMHgxZGY0ODA4MDNhODA3NGJhKSwgCitDT05TVDY0KDB4NjEyN2JlYmVjMmJlOTk3YyksIENPTlNUNjQoMHg4N2ViY2RjZDEzY2QyNmRlKSwgQ09OU1Q2NCgweDY4ODkzNDM0ZDAzNGJkZTQpLCBDT05TVDY0KDB4OTAzMjQ4NDgzZDQ4N2E3NSksIAorQ09OU1Q2NCgweGUzNTRmZmZmZGJmZmFiMjQpLCBDT05TVDY0KDB4ZjQ4ZDdhN2FmNTdhZjc4ZiksIENPTlNUNjQoMHgzZDY0OTA5MDdhOTBmNGVhKSwgQ09OU1Q2NCgweGJlOWQ1ZjVmNjE1ZmMyM2UpLCAKK0NPTlNUNjQoMHg0MDNkMjAyMDgwMjAxZGEwKSwgQ09OU1Q2NCgweGQwMGY2ODY4YmQ2ODY3ZDUpLCBDT05TVDY0KDB4MzRjYTFhMWE2ODFhZDA3MiksIENPTlNUNjQoMHg0MWI3YWVhZTgyYWUxOTJjKSwgCitDT05TVDY0KDB4NzU3ZGI0YjRlYWI0Yzk1ZSksIENPTlNUNjQoMHhhOGNlNTQ1NDRkNTQ5YTE5KSwgQ09OU1Q2NCgweDNiN2Y5MzkzNzY5M2VjZTUpLCBDT05TVDY0KDB4NDQyZjIyMjI4ODIyMGRhYSksIAorQ09OU1Q2NCgweGM4NjM2NDY0OGQ2NDA3ZTkpLCBDT05TVDY0KDB4ZmYyYWYxZjFlM2YxZGIxMiksIENPTlNUNjQoMHhlNmNjNzM3M2QxNzNiZmEyKSwgQ09OU1Q2NCgweDI0ODIxMjEyNDgxMjkwNWEpLCAKK0NPTlNUNjQoMHg4MDdhNDA0MDFkNDAzYTVkKSwgQ09OU1Q2NCgweDEwNDgwODA4MjAwODQwMjgpLCBDT05TVDY0KDB4OWI5NWMzYzMyYmMzNTZlOCksIENPTlNUNjQoMHhjNWRmZWNlYzk3ZWMzMzdiKSwgCitDT05TVDY0KDB4YWI0ZGRiZGI0YmRiOTY5MCksIENPTlNUNjQoMHg1ZmMwYTFhMWJlYTE2MTFmKSwgQ09OU1Q2NCgweDA3OTE4ZDhkMGU4ZDFjODMpLCBDT05TVDY0KDB4N2FjODNkM2RmNDNkZjVjOSksIAorQ09OU1Q2NCgweDMzNWI5Nzk3NjY5N2NjZjEpLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHg4M2Y5Y2ZjZjFiY2YzNmQ0KSwgQ09OU1Q2NCgweDU2NmUyYjJiYWMyYjQ1ODcpLCAKK0NPTlNUNjQoMHhlY2UxNzY3NmM1NzY5N2IzKSwgQ09OU1Q2NCgweDE5ZTY4MjgyMzI4MjY0YjApLCBDT05TVDY0KDB4YjEyOGQ2ZDY3ZmQ2ZmVhOSksIENPTlNUNjQoMHgzNmMzMWIxYjZjMWJkODc3KSwgCitDT05TVDY0KDB4Nzc3NGI1YjVlZWI1YzE1YiksIENPTlNUNjQoMHg0M2JlYWZhZjg2YWYxMTI5KSwgQ09OU1Q2NCgweGQ0MWQ2YTZhYjU2YTc3ZGYpLCBDT05TVDY0KDB4YTBlYTUwNTA1ZDUwYmEwZCksIAorQ09OU1Q2NCgweDhhNTc0NTQ1MDk0NTEyNGMpLCBDT05TVDY0KDB4ZmIzOGYzZjNlYmYzY2IxOCksIENPTlNUNjQoMHg2MGFkMzAzMGMwMzA5ZGYwKSwgQ09OU1Q2NCgweGMzYzRlZmVmOWJlZjJiNzQpLCAKK0NPTlNUNjQoMHg3ZWRhM2YzZmZjM2ZlNWMzKSwgQ09OU1Q2NCgweGFhYzc1NTU1NDk1NTkyMWMpLCBDT05TVDY0KDB4NTlkYmEyYTJiMmEyNzkxMCksIENPTlNUNjQoMHhjOWU5ZWFlYThmZWEwMzY1KSwgCitDT05TVDY0KDB4Y2E2YTY1NjU4OTY1MGZlYyksIENPTlNUNjQoMHg2OTAzYmFiYWQyYmFiOTY4KSwgQ09OU1Q2NCgweDVlNGEyZjJmYmMyZjY1OTMpLCBDT05TVDY0KDB4OWQ4ZWMwYzAyN2MwNGVlNyksIAorQ09OU1Q2NCgweGExNjBkZWRlNWZkZWJlODEpLCBDT05TVDY0KDB4MzhmYzFjMWM3MDFjZTA2YyksIENPTlNUNjQoMHhlNzQ2ZmRmZGQzZmRiYjJlKSwgQ09OU1Q2NCgweDlhMWY0ZDRkMjk0ZDUyNjQpLCAKK0NPTlNUNjQoMHgzOTc2OTI5MjcyOTJlNGUwKSwgQ09OU1Q2NCgweGVhZmE3NTc1Yzk3NThmYmMpLCBDT05TVDY0KDB4MGMzNjA2MDYxODA2MzAxZSksIENPTlNUNjQoMHgwOWFlOGE4YTEyOGEyNDk4KSwgCitDT05TVDY0KDB4Nzk0YmIyYjJmMmIyZjk0MCksIENPTlNUNjQoMHhkMTg1ZTZlNmJmZTY2MzU5KSwgQ09OU1Q2NCgweDFjN2UwZTBlMzgwZTcwMzYpLCBDT05TVDY0KDB4M2VlNzFmMWY3YzFmZjg2MyksIAorQ09OU1Q2NCgweGM0NTU2MjYyOTU2MjM3ZjcpLCBDT05TVDY0KDB4YjUzYWQ0ZDQ3N2Q0ZWVhMyksIENPTlNUNjQoMHg0ZDgxYThhODlhYTgyOTMyKSwgQ09OU1Q2NCgweDMxNTI5Njk2NjI5NmM0ZjQpLCAKK0NPTlNUNjQoMHhlZjYyZjlmOWMzZjk5YjNhKSwgQ09OU1Q2NCgweDk3YTNjNWM1MzNjNTY2ZjYpLCBDT05TVDY0KDB4NGExMDI1MjU5NDI1MzViMSksIENPTlNUNjQoMHhiMmFiNTk1OTc5NTlmMjIwKSwgCitDT05TVDY0KDB4MTVkMDg0ODQyYTg0NTRhZSksIENPTlNUNjQoMHhlNGM1NzI3MmQ1NzJiN2E3KSwgQ09OU1Q2NCgweDcyZWMzOTM5ZTQzOWQ1ZGQpLCBDT05TVDY0KDB4OTgxNjRjNGMyZDRjNWE2MSksIAorQ09OU1Q2NCgweGJjOTQ1ZTVlNjU1ZWNhM2IpLCBDT05TVDY0KDB4ZjA5Zjc4NzhmZDc4ZTc4NSksIENPTlNUNjQoMHg3MGU1MzgzOGUwMzhkZGQ4KSwgQ09OU1Q2NCgweDA1OTg4YzhjMGE4YzE0ODYpLCAKK0NPTlNUNjQoMHhiZjE3ZDFkMTYzZDFjNmIyKSwgQ09OU1Q2NCgweDU3ZTRhNWE1YWVhNTQxMGIpLCBDT05TVDY0KDB4ZDlhMWUyZTJhZmUyNDM0ZCksIENPTlNUNjQoMHhjMjRlNjE2MTk5NjEyZmY4KSwgCitDT05TVDY0KDB4N2I0MmIzYjNmNmIzZjE0NSksIENPTlNUNjQoMHg0MjM0MjEyMTg0MjExNWE1KSwgQ09OU1Q2NCgweDI1MDg5YzljNGE5Yzk0ZDYpLCBDT05TVDY0KDB4M2NlZTFlMWU3ODFlZjA2NiksIAorQ09OU1Q2NCgweDg2NjE0MzQzMTE0MzIyNTIpLCBDT05TVDY0KDB4OTNiMWM3YzczYmM3NzZmYyksIENPTlNUNjQoMHhlNTRmZmNmY2Q3ZmNiMzJiKSwgQ09OU1Q2NCgweDA4MjQwNDA0MTAwNDIwMTQpLCAKK0NPTlNUNjQoMHhhMmUzNTE1MTU5NTFiMjA4KSwgQ09OU1Q2NCgweDJmMjU5OTk5NWU5OWJjYzcpLCBDT05TVDY0KDB4ZGEyMjZkNmRhOTZkNGZjNCksIENPTlNUNjQoMHgxYTY1MGQwZDM0MGQ2ODM5KSwgCitDT05TVDY0KDB4ZTk3OWZhZmFjZmZhODMzNSksIENPTlNUNjQoMHhhMzY5ZGZkZjViZGZiNjg0KSwgQ09OU1Q2NCgweGZjYTk3ZTdlZTU3ZWQ3OWIpLCBDT05TVDY0KDB4NDgxOTI0MjQ5MDI0M2RiNCksIAorQ09OU1Q2NCgweDc2ZmUzYjNiZWMzYmM1ZDcpLCBDT05TVDY0KDB4NGI5YWFiYWI5NmFiMzEzZCksIENPTlNUNjQoMHg4MWYwY2VjZTFmY2UzZWQxKSwgQ09OU1Q2NCgweDIyOTkxMTExNDQxMTg4NTUpLCAKK0NPTlNUNjQoMHgwMzgzOGY4ZjA2OGYwYzg5KSwgQ09OU1Q2NCgweDljMDQ0ZTRlMjU0ZTRhNmIpLCBDT05TVDY0KDB4NzM2NmI3YjdlNmI3ZDE1MSksIENPTlNUNjQoMHhjYmUwZWJlYjhiZWIwYjYwKSwgCitDT05TVDY0KDB4NzhjMTNjM2NmMDNjZmRjYyksIENPTlNUNjQoMHgxZmZkODE4MTNlODE3Y2JmKSwgQ09OU1Q2NCgweDM1NDA5NDk0NmE5NGQ0ZmUpLCBDT05TVDY0KDB4ZjMxY2Y3ZjdmYmY3ZWIwYyksIAorQ09OU1Q2NCgweDZmMThiOWI5ZGViOWExNjcpLCBDT05TVDY0KDB4MjY4YjEzMTM0YzEzOTg1ZiksIENPTlNUNjQoMHg1ODUxMmMyY2IwMmM3ZDljKSwgQ09OU1Q2NCgweGJiMDVkM2QzNmJkM2Q2YjgpLCAKK0NPTlNUNjQoMHhkMzhjZTdlN2JiZTc2YjVjKSwgQ09OU1Q2NCgweGRjMzk2ZTZlYTU2ZTU3Y2IpLCBDT05TVDY0KDB4OTVhYWM0YzQzN2M0NmVmMyksIENPTlNUNjQoMHgwNjFiMDMwMzBjMDMxODBmKSwgCitDT05TVDY0KDB4YWNkYzU2NTY0NTU2OGExMyksIENPTlNUNjQoMHg4ODVlNDQ0NDBkNDQxYTQ5KSwgQ09OU1Q2NCgweGZlYTA3ZjdmZTE3ZmRmOWUpLCBDT05TVDY0KDB4NGY4OGE5YTk5ZWE5MjEzNyksIAorQ09OU1Q2NCgweDU0NjcyYTJhYTgyYTRkODIpLCBDT05TVDY0KDB4NmIwYWJiYmJkNmJiYjE2ZCksIENPTlNUNjQoMHg5Zjg3YzFjMTIzYzE0NmUyKSwgQ09OU1Q2NCgweGE2ZjE1MzUzNTE1M2EyMDIpLCAKK0NPTlNUNjQoMHhhNTcyZGNkYzU3ZGNhZThiKSwgQ09OU1Q2NCgweDE2NTMwYjBiMmMwYjU4MjcpLCBDT05TVDY0KDB4MjcwMTlkOWQ0ZTlkOWNkMyksIENPTlNUNjQoMHhkODJiNmM2Y2FkNmM0N2MxKSwgCitDT05TVDY0KDB4NjJhNDMxMzFjNDMxOTVmNSksIENPTlNUNjQoMHhlOGYzNzQ3NGNkNzQ4N2I5KSwgQ09OU1Q2NCgweGYxMTVmNmY2ZmZmNmUzMDkpLCBDT05TVDY0KDB4OGM0YzQ2NDYwNTQ2MGE0MyksIAorQ09OU1Q2NCgweDQ1YTVhY2FjOGFhYzA5MjYpLCBDT05TVDY0KDB4MGZiNTg5ODkxZTg5M2M5NyksIENPTlNUNjQoMHgyOGI0MTQxNDUwMTRhMDQ0KSwgQ09OU1Q2NCgweGRmYmFlMWUxYTNlMTViNDIpLCAKK0NPTlNUNjQoMHgyY2E2MTYxNjU4MTZiMDRlKSwgQ09OU1Q2NCgweDc0ZjczYTNhZTgzYWNkZDIpLCBDT05TVDY0KDB4ZDIwNjY5NjliOTY5NmZkMCksIENPTlNUNjQoMHgxMjQxMDkwOTI0MDk0ODJkKSwgCitDT05TVDY0KDB4ZTBkNzcwNzBkZDcwYTdhZCksIENPTlNUNjQoMHg3MTZmYjZiNmUyYjZkOTU0KSwgQ09OU1Q2NCgweGJkMWVkMGQwNjdkMGNlYjcpLCBDT05TVDY0KDB4YzdkNmVkZWQ5M2VkM2I3ZSksIAorQ09OU1Q2NCgweDg1ZTJjY2NjMTdjYzJlZGIpLCBDT05TVDY0KDB4ODQ2ODQyNDIxNTQyMmE1NyksIENPTlNUNjQoMHgyZDJjOTg5ODVhOThiNGMyKSwgQ09OU1Q2NCgweDU1ZWRhNGE0YWFhNDQ5MGUpLCAKK0NPTlNUNjQoMHg1MDc1MjgyOGEwMjg1ZDg4KSwgQ09OU1Q2NCgweGI4ODY1YzVjNmQ1Y2RhMzEpLCBDT05TVDY0KDB4ZWQ2YmY4ZjhjN2Y4OTMzZiksIENPTlNUNjQoMHgxMWMyODY4NjIyODY0NGE0KQorfTsKKworc3RhdGljIGNvbnN0IHVsb25nNjQgc2JveDNbXSA9IHsKK0NPTlNUNjQoMHg3ODMwZDgxODE4NjAxOGMwKSwgQ09OU1Q2NCgweGFmNDYyNjIzMjM4YzIzMDUpLCBDT05TVDY0KDB4Zjk5MWI4YzZjNjNmYzY3ZSksIENPTlNUNjQoMHg2ZmNkZmJlOGU4ODdlODEzKSwgCitDT05TVDY0KDB4YTExM2NiODc4NzI2ODc0YyksIENPTlNUNjQoMHg2MjZkMTFiOGI4ZGFiOGE5KSwgQ09OU1Q2NCgweDA1MDIwOTAxMDEwNDAxMDgpLCBDT05TVDY0KDB4NmU5ZTBkNGY0ZjIxNGY0MiksIAorQ09OU1Q2NCgweGVlNmM5YjM2MzZkODM2YWQpLCBDT05TVDY0KDB4MDQ1MWZmYTZhNmEyYTY1OSksIENPTlNUNjQoMHhiZGI5MGNkMmQyNmZkMmRlKSwgQ09OU1Q2NCgweDA2ZjcwZWY1ZjVmM2Y1ZmIpLCAKK0NPTlNUNjQoMHg4MGYyOTY3OTc5Zjk3OWVmKSwgQ09OU1Q2NCgweGNlZGUzMDZmNmZhMTZmNWYpLCBDT05TVDY0KDB4ZWYzZjZkOTE5MTdlOTFmYyksIENPTlNUNjQoMHgwN2E0Zjg1MjUyNTU1MmFhKSwgCitDT05TVDY0KDB4ZmRjMDQ3NjA2MDlkNjAyNyksIENPTlNUNjQoMHg3NjY1MzViY2JjY2FiYzg5KSwgQ09OU1Q2NCgweGNkMmIzNzliOWI1NjliYWMpLCBDT05TVDY0KDB4OGMwMThhOGU4ZTAyOGUwNCksIAorQ09OU1Q2NCgweDE1NWJkMmEzYTNiNmEzNzEpLCBDT05TVDY0KDB4M2MxODZjMGMwYzMwMGM2MCksIENPTlNUNjQoMHg4YWY2ODQ3YjdiZjE3YmZmKSwgQ09OU1Q2NCgweGUxNmE4MDM1MzVkNDM1YjUpLCAKK0NPTlNUNjQoMHg2OTNhZjUxZDFkNzQxZGU4KSwgQ09OU1Q2NCgweDQ3ZGRiM2UwZTBhN2UwNTMpLCBDT05TVDY0KDB4YWNiMzIxZDdkNzdiZDdmNiksIENPTlNUNjQoMHhlZDk5OWNjMmMyMmZjMjVlKSwgCitDT05TVDY0KDB4OTY1YzQzMmUyZWI4MmU2ZCksIENPTlNUNjQoMHg3YTk2Mjk0YjRiMzE0YjYyKSwgQ09OU1Q2NCgweDIxZTE1ZGZlZmVkZmZlYTMpLCBDT05TVDY0KDB4MTZhZWQ1NTc1NzQxNTc4MiksIAorQ09OU1Q2NCgweDQxMmFiZDE1MTU1NDE1YTgpLCBDT05TVDY0KDB4YjZlZWU4Nzc3N2MxNzc5ZiksIENPTlNUNjQoMHhlYjZlOTIzNzM3ZGMzN2E1KSwgQ09OU1Q2NCgweDU2ZDc5ZWU1ZTViM2U1N2IpLCAKK0NPTlNUNjQoMHhkOTIzMTM5ZjlmNDY5ZjhjKSwgQ09OU1Q2NCgweDE3ZmQyM2YwZjBlN2YwZDMpLCBDT05TVDY0KDB4N2Y5NDIwNGE0YTM1NGE2YSksIENPTlNUNjQoMHg5NWE5NDRkYWRhNGZkYTllKSwgCitDT05TVDY0KDB4MjViMGEyNTg1ODdkNThmYSksIENPTlNUNjQoMHhjYThmY2ZjOWM5MDNjOTA2KSwgQ09OU1Q2NCgweDhkNTI3YzI5MjlhNDI5NTUpLCBDT05TVDY0KDB4MjIxNDVhMGEwYTI4MGE1MCksIAorQ09OU1Q2NCgweDRmN2Y1MGIxYjFmZWIxZTEpLCBDT05TVDY0KDB4MWE1ZGM5YTBhMGJhYTA2OSksIENPTlNUNjQoMHhkYWQ2MTQ2YjZiYjE2YjdmKSwgQ09OU1Q2NCgweGFiMTdkOTg1ODUyZTg1NWMpLCAKK0NPTlNUNjQoMHg3MzY3M2NiZGJkY2ViZDgxKSwgQ09OU1Q2NCgweDM0YmE4ZjVkNWQ2OTVkZDIpLCBDT05TVDY0KDB4NTAyMDkwMTAxMDQwMTA4MCksIENPTlNUNjQoMHgwM2Y1MDdmNGY0ZjdmNGYzKSwgCitDT05TVDY0KDB4YzA4YmRkY2JjYjBiY2IxNiksIENPTlNUNjQoMHhjNjdjZDMzZTNlZjgzZWVkKSwgQ09OU1Q2NCgweDExMGEyZDA1MDUxNDA1MjgpLCBDT05TVDY0KDB4ZTZjZTc4Njc2NzgxNjcxZiksIAorQ09OU1Q2NCgweDUzZDU5N2U0ZTRiN2U0NzMpLCBDT05TVDY0KDB4YmI0ZTAyMjcyNzljMjcyNSksIENPTlNUNjQoMHg1ODgyNzM0MTQxMTk0MTMyKSwgQ09OU1Q2NCgweDlkMGJhNzhiOGIxNjhiMmMpLCAKK0NPTlNUNjQoMHgwMTUzZjZhN2E3YTZhNzUxKSwgQ09OU1Q2NCgweDk0ZmFiMjdkN2RlOTdkY2YpLCBDT05TVDY0KDB4ZmIzNzQ5OTU5NTZlOTVkYyksIENPTlNUNjQoMHg5ZmFkNTZkOGQ4NDdkODhlKSwgCitDT05TVDY0KDB4MzBlYjcwZmJmYmNiZmI4YiksIENPTlNUNjQoMHg3MWMxY2RlZWVlOWZlZTIzKSwgQ09OU1Q2NCgweDkxZjhiYjdjN2NlZDdjYzcpLCBDT05TVDY0KDB4ZTNjYzcxNjY2Njg1NjYxNyksIAorQ09OU1Q2NCgweDhlYTc3YmRkZGQ1M2RkYTYpLCBDT05TVDY0KDB4NGIyZWFmMTcxNzVjMTdiOCksIENPTlNUNjQoMHg0NjhlNDU0NzQ3MDE0NzAyKSwgQ09OU1Q2NCgweGRjMjExYTllOWU0MjllODQpLCAKK0NPTlNUNjQoMHhjNTg5ZDRjYWNhMGZjYTFlKSwgQ09OU1Q2NCgweDk5NWE1ODJkMmRiNDJkNzUpLCBDT05TVDY0KDB4Nzk2MzJlYmZiZmM2YmY5MSksIENPTlNUNjQoMHgxYjBlM2YwNzA3MWMwNzM4KSwgCitDT05TVDY0KDB4MjM0N2FjYWRhZDhlYWQwMSksIENPTlNUNjQoMHgyZmI0YjA1YTVhNzU1YWVhKSwgQ09OU1Q2NCgweGI1MWJlZjgzODMzNjgzNmMpLCBDT05TVDY0KDB4ZmY2NmI2MzMzM2NjMzM4NSksIAorQ09OU1Q2NCgweGYyYzY1YzYzNjM5MTYzM2YpLCBDT05TVDY0KDB4MGEwNDEyMDIwMjA4MDIxMCksIENPTlNUNjQoMHgzODQ5OTNhYWFhOTJhYTM5KSwgQ09OU1Q2NCgweGE4ZTJkZTcxNzFkOTcxYWYpLCAKK0NPTlNUNjQoMHhjZjhkYzZjOGM4MDdjODBlKSwgQ09OU1Q2NCgweDdkMzJkMTE5MTk2NDE5YzgpLCBDT05TVDY0KDB4NzA5MjNiNDk0OTM5NDk3MiksIENPTlNUNjQoMHg5YWFmNWZkOWQ5NDNkOTg2KSwgCitDT05TVDY0KDB4MWRmOTMxZjJmMmVmZjJjMyksIENPTlNUNjQoMHg0OGRiYThlM2UzYWJlMzRiKSwgQ09OU1Q2NCgweDJhYjZiOTViNWI3MTViZTIpLCBDT05TVDY0KDB4OTIwZGJjODg4ODFhODgzNCksIAorQ09OU1Q2NCgweGM4MjkzZTlhOWE1MjlhYTQpLCBDT05TVDY0KDB4YmU0YzBiMjYyNjk4MjYyZCksIENPTlNUNjQoMHhmYTY0YmYzMjMyYzgzMjhkKSwgQ09OU1Q2NCgweDRhN2Q1OWIwYjBmYWIwZTkpLCAKK0NPTlNUNjQoMHg2YWNmZjJlOWU5ODNlOTFiKSwgQ09OU1Q2NCgweDMzMWU3NzBmMGYzYzBmNzgpLCBDT05TVDY0KDB4YTZiNzMzZDVkNTczZDVlNiksIENPTlNUNjQoMHhiYTFkZjQ4MDgwM2E4MDc0KSwgCitDT05TVDY0KDB4N2M2MTI3YmViZWMyYmU5OSksIENPTlNUNjQoMHhkZTg3ZWJjZGNkMTNjZDI2KSwgQ09OU1Q2NCgweGU0Njg4OTM0MzRkMDM0YmQpLCBDT05TVDY0KDB4NzU5MDMyNDg0ODNkNDg3YSksIAorQ09OU1Q2NCgweDI0ZTM1NGZmZmZkYmZmYWIpLCBDT05TVDY0KDB4OGZmNDhkN2E3YWY1N2FmNyksIENPTlNUNjQoMHhlYTNkNjQ5MDkwN2E5MGY0KSwgQ09OU1Q2NCgweDNlYmU5ZDVmNWY2MTVmYzIpLCAKK0NPTlNUNjQoMHhhMDQwM2QyMDIwODAyMDFkKSwgQ09OU1Q2NCgweGQ1ZDAwZjY4NjhiZDY4NjcpLCBDT05TVDY0KDB4NzIzNGNhMWExYTY4MWFkMCksIENPTlNUNjQoMHgyYzQxYjdhZWFlODJhZTE5KSwgCitDT05TVDY0KDB4NWU3NTdkYjRiNGVhYjRjOSksIENPTlNUNjQoMHgxOWE4Y2U1NDU0NGQ1NDlhKSwgQ09OU1Q2NCgweGU1M2I3ZjkzOTM3NjkzZWMpLCBDT05TVDY0KDB4YWE0NDJmMjIyMjg4MjIwZCksIAorQ09OU1Q2NCgweGU5Yzg2MzY0NjQ4ZDY0MDcpLCBDT05TVDY0KDB4MTJmZjJhZjFmMWUzZjFkYiksIENPTlNUNjQoMHhhMmU2Y2M3MzczZDE3M2JmKSwgQ09OU1Q2NCgweDVhMjQ4MjEyMTI0ODEyOTApLCAKK0NPTlNUNjQoMHg1ZDgwN2E0MDQwMWQ0MDNhKSwgQ09OU1Q2NCgweDI4MTA0ODA4MDgyMDA4NDApLCBDT05TVDY0KDB4ZTg5Yjk1YzNjMzJiYzM1NiksIENPTlNUNjQoMHg3YmM1ZGZlY2VjOTdlYzMzKSwgCitDT05TVDY0KDB4OTBhYjRkZGJkYjRiZGI5NiksIENPTlNUNjQoMHgxZjVmYzBhMWExYmVhMTYxKSwgQ09OU1Q2NCgweDgzMDc5MThkOGQwZThkMWMpLCBDT05TVDY0KDB4Yzk3YWM4M2QzZGY0M2RmNSksIAorQ09OU1Q2NCgweGYxMzM1Yjk3OTc2Njk3Y2MpLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHhkNDgzZjljZmNmMWJjZjM2KSwgQ09OU1Q2NCgweDg3NTY2ZTJiMmJhYzJiNDUpLCAKK0NPTlNUNjQoMHhiM2VjZTE3Njc2YzU3Njk3KSwgQ09OU1Q2NCgweGIwMTllNjgyODIzMjgyNjQpLCBDT05TVDY0KDB4YTliMTI4ZDZkNjdmZDZmZSksIENPTlNUNjQoMHg3NzM2YzMxYjFiNmMxYmQ4KSwgCitDT05TVDY0KDB4NWI3Nzc0YjViNWVlYjVjMSksIENPTlNUNjQoMHgyOTQzYmVhZmFmODZhZjExKSwgQ09OU1Q2NCgweGRmZDQxZDZhNmFiNTZhNzcpLCBDT05TVDY0KDB4MGRhMGVhNTA1MDVkNTBiYSksIAorQ09OU1Q2NCgweDRjOGE1NzQ1NDUwOTQ1MTIpLCBDT05TVDY0KDB4MThmYjM4ZjNmM2ViZjNjYiksIENPTlNUNjQoMHhmMDYwYWQzMDMwYzAzMDlkKSwgQ09OU1Q2NCgweDc0YzNjNGVmZWY5YmVmMmIpLCAKK0NPTlNUNjQoMHhjMzdlZGEzZjNmZmMzZmU1KSwgQ09OU1Q2NCgweDFjYWFjNzU1NTU0OTU1OTIpLCBDT05TVDY0KDB4MTA1OWRiYTJhMmIyYTI3OSksIENPTlNUNjQoMHg2NWM5ZTllYWVhOGZlYTAzKSwgCitDT05TVDY0KDB4ZWNjYTZhNjU2NTg5NjUwZiksIENPTlNUNjQoMHg2ODY5MDNiYWJhZDJiYWI5KSwgQ09OU1Q2NCgweDkzNWU0YTJmMmZiYzJmNjUpLCBDT05TVDY0KDB4ZTc5ZDhlYzBjMDI3YzA0ZSksIAorQ09OU1Q2NCgweDgxYTE2MGRlZGU1ZmRlYmUpLCBDT05TVDY0KDB4NmMzOGZjMWMxYzcwMWNlMCksIENPTlNUNjQoMHgyZWU3NDZmZGZkZDNmZGJiKSwgQ09OU1Q2NCgweDY0OWExZjRkNGQyOTRkNTIpLCAKK0NPTlNUNjQoMHhlMDM5NzY5MjkyNzI5MmU0KSwgQ09OU1Q2NCgweGJjZWFmYTc1NzVjOTc1OGYpLCBDT05TVDY0KDB4MWUwYzM2MDYwNjE4MDYzMCksIENPTlNUNjQoMHg5ODA5YWU4YThhMTI4YTI0KSwgCitDT05TVDY0KDB4NDA3OTRiYjJiMmYyYjJmOSksIENPTlNUNjQoMHg1OWQxODVlNmU2YmZlNjYzKSwgQ09OU1Q2NCgweDM2MWM3ZTBlMGUzODBlNzApLCBDT05TVDY0KDB4NjMzZWU3MWYxZjdjMWZmOCksIAorQ09OU1Q2NCgweGY3YzQ1NTYyNjI5NTYyMzcpLCBDT05TVDY0KDB4YTNiNTNhZDRkNDc3ZDRlZSksIENPTlNUNjQoMHgzMjRkODFhOGE4OWFhODI5KSwgQ09OU1Q2NCgweGY0MzE1Mjk2OTY2Mjk2YzQpLCAKK0NPTlNUNjQoMHgzYWVmNjJmOWY5YzNmOTliKSwgQ09OU1Q2NCgweGY2OTdhM2M1YzUzM2M1NjYpLCBDT05TVDY0KDB4YjE0YTEwMjUyNTk0MjUzNSksIENPTlNUNjQoMHgyMGIyYWI1OTU5Nzk1OWYyKSwgCitDT05TVDY0KDB4YWUxNWQwODQ4NDJhODQ1NCksIENPTlNUNjQoMHhhN2U0YzU3MjcyZDU3MmI3KSwgQ09OU1Q2NCgweGRkNzJlYzM5MzllNDM5ZDUpLCBDT05TVDY0KDB4NjE5ODE2NGM0YzJkNGM1YSksIAorQ09OU1Q2NCgweDNiYmM5NDVlNWU2NTVlY2EpLCBDT05TVDY0KDB4ODVmMDlmNzg3OGZkNzhlNyksIENPTlNUNjQoMHhkODcwZTUzODM4ZTAzOGRkKSwgQ09OU1Q2NCgweDg2MDU5ODhjOGMwYThjMTQpLCAKK0NPTlNUNjQoMHhiMmJmMTdkMWQxNjNkMWM2KSwgQ09OU1Q2NCgweDBiNTdlNGE1YTVhZWE1NDEpLCBDT05TVDY0KDB4NGRkOWExZTJlMmFmZTI0MyksIENPTlNUNjQoMHhmOGMyNGU2MTYxOTk2MTJmKSwgCitDT05TVDY0KDB4NDU3YjQyYjNiM2Y2YjNmMSksIENPTlNUNjQoMHhhNTQyMzQyMTIxODQyMTE1KSwgQ09OU1Q2NCgweGQ2MjUwODljOWM0YTljOTQpLCBDT05TVDY0KDB4NjYzY2VlMWUxZTc4MWVmMCksIAorQ09OU1Q2NCgweDUyODY2MTQzNDMxMTQzMjIpLCBDT05TVDY0KDB4ZmM5M2IxYzdjNzNiYzc3NiksIENPTlNUNjQoMHgyYmU1NGZmY2ZjZDdmY2IzKSwgQ09OU1Q2NCgweDE0MDgyNDA0MDQxMDA0MjApLCAKK0NPTlNUNjQoMHgwOGEyZTM1MTUxNTk1MWIyKSwgQ09OU1Q2NCgweGM3MmYyNTk5OTk1ZTk5YmMpLCBDT05TVDY0KDB4YzRkYTIyNmQ2ZGE5NmQ0ZiksIENPTlNUNjQoMHgzOTFhNjUwZDBkMzQwZDY4KSwgCitDT05TVDY0KDB4MzVlOTc5ZmFmYWNmZmE4MyksIENPTlNUNjQoMHg4NGEzNjlkZmRmNWJkZmI2KSwgQ09OU1Q2NCgweDliZmNhOTdlN2VlNTdlZDcpLCBDT05TVDY0KDB4YjQ0ODE5MjQyNDkwMjQzZCksIAorQ09OU1Q2NCgweGQ3NzZmZTNiM2JlYzNiYzUpLCBDT05TVDY0KDB4M2Q0YjlhYWJhYjk2YWIzMSksIENPTlNUNjQoMHhkMTgxZjBjZWNlMWZjZTNlKSwgQ09OU1Q2NCgweDU1MjI5OTExMTE0NDExODgpLCAKK0NPTlNUNjQoMHg4OTAzODM4ZjhmMDY4ZjBjKSwgQ09OU1Q2NCgweDZiOWMwNDRlNGUyNTRlNGEpLCBDT05TVDY0KDB4NTE3MzY2YjdiN2U2YjdkMSksIENPTlNUNjQoMHg2MGNiZTBlYmViOGJlYjBiKSwgCitDT05TVDY0KDB4Y2M3OGMxM2MzY2YwM2NmZCksIENPTlNUNjQoMHhiZjFmZmQ4MTgxM2U4MTdjKSwgQ09OU1Q2NCgweGZlMzU0MDk0OTQ2YTk0ZDQpLCBDT05TVDY0KDB4MGNmMzFjZjdmN2ZiZjdlYiksIAorQ09OU1Q2NCgweDY3NmYxOGI5YjlkZWI5YTEpLCBDT05TVDY0KDB4NWYyNjhiMTMxMzRjMTM5OCksIENPTlNUNjQoMHg5YzU4NTEyYzJjYjAyYzdkKSwgQ09OU1Q2NCgweGI4YmIwNWQzZDM2YmQzZDYpLCAKK0NPTlNUNjQoMHg1Y2QzOGNlN2U3YmJlNzZiKSwgQ09OU1Q2NCgweGNiZGMzOTZlNmVhNTZlNTcpLCBDT05TVDY0KDB4ZjM5NWFhYzRjNDM3YzQ2ZSksIENPTlNUNjQoMHgwZjA2MWIwMzAzMGMwMzE4KSwgCitDT05TVDY0KDB4MTNhY2RjNTY1NjQ1NTY4YSksIENPTlNUNjQoMHg0OTg4NWU0NDQ0MGQ0NDFhKSwgQ09OU1Q2NCgweDllZmVhMDdmN2ZlMTdmZGYpLCBDT05TVDY0KDB4Mzc0Zjg4YTlhOTllYTkyMSksIAorQ09OU1Q2NCgweDgyNTQ2NzJhMmFhODJhNGQpLCBDT05TVDY0KDB4NmQ2YjBhYmJiYmQ2YmJiMSksIENPTlNUNjQoMHhlMjlmODdjMWMxMjNjMTQ2KSwgQ09OU1Q2NCgweDAyYTZmMTUzNTM1MTUzYTIpLCAKK0NPTlNUNjQoMHg4YmE1NzJkY2RjNTdkY2FlKSwgQ09OU1Q2NCgweDI3MTY1MzBiMGIyYzBiNTgpLCBDT05TVDY0KDB4ZDMyNzAxOWQ5ZDRlOWQ5YyksIENPTlNUNjQoMHhjMWQ4MmI2YzZjYWQ2YzQ3KSwgCitDT05TVDY0KDB4ZjU2MmE0MzEzMWM0MzE5NSksIENPTlNUNjQoMHhiOWU4ZjM3NDc0Y2Q3NDg3KSwgQ09OU1Q2NCgweDA5ZjExNWY2ZjZmZmY2ZTMpLCBDT05TVDY0KDB4NDM4YzRjNDY0NjA1NDYwYSksIAorQ09OU1Q2NCgweDI2NDVhNWFjYWM4YWFjMDkpLCBDT05TVDY0KDB4OTcwZmI1ODk4OTFlODkzYyksIENPTlNUNjQoMHg0NDI4YjQxNDE0NTAxNGEwKSwgQ09OU1Q2NCgweDQyZGZiYWUxZTFhM2UxNWIpLCAKK0NPTlNUNjQoMHg0ZTJjYTYxNjE2NTgxNmIwKSwgQ09OU1Q2NCgweGQyNzRmNzNhM2FlODNhY2QpLCBDT05TVDY0KDB4ZDBkMjA2Njk2OWI5Njk2ZiksIENPTlNUNjQoMHgyZDEyNDEwOTA5MjQwOTQ4KSwgCitDT05TVDY0KDB4YWRlMGQ3NzA3MGRkNzBhNyksIENPTlNUNjQoMHg1NDcxNmZiNmI2ZTJiNmQ5KSwgQ09OU1Q2NCgweGI3YmQxZWQwZDA2N2QwY2UpLCBDT05TVDY0KDB4N2VjN2Q2ZWRlZDkzZWQzYiksIAorQ09OU1Q2NCgweGRiODVlMmNjY2MxN2NjMmUpLCBDT05TVDY0KDB4NTc4NDY4NDI0MjE1NDIyYSksIENPTlNUNjQoMHhjMjJkMmM5ODk4NWE5OGI0KSwgQ09OU1Q2NCgweDBlNTVlZGE0YTRhYWE0NDkpLCAKK0NPTlNUNjQoMHg4ODUwNzUyODI4YTAyODVkKSwgQ09OU1Q2NCgweDMxYjg4NjVjNWM2ZDVjZGEpLCBDT05TVDY0KDB4M2ZlZDZiZjhmOGM3Zjg5MyksIENPTlNUNjQoMHhhNDExYzI4Njg2MjI4NjQ0KQorfTsKKworc3RhdGljIGNvbnN0IHVsb25nNjQgc2JveDRbXSA9IHsKK0NPTlNUNjQoMHhjMDc4MzBkODE4MTg2MDE4KSwgQ09OU1Q2NCgweDA1YWY0NjI2MjMyMzhjMjMpLCBDT05TVDY0KDB4N2VmOTkxYjhjNmM2M2ZjNiksIENPTlNUNjQoMHgxMzZmY2RmYmU4ZTg4N2U4KSwgCitDT05TVDY0KDB4NGNhMTEzY2I4Nzg3MjY4NyksIENPTlNUNjQoMHhhOTYyNmQxMWI4YjhkYWI4KSwgQ09OU1Q2NCgweDA4MDUwMjA5MDEwMTA0MDEpLCBDT05TVDY0KDB4NDI2ZTllMGQ0ZjRmMjE0ZiksIAorQ09OU1Q2NCgweGFkZWU2YzliMzYzNmQ4MzYpLCBDT05TVDY0KDB4NTkwNDUxZmZhNmE2YTJhNiksIENPTlNUNjQoMHhkZWJkYjkwY2QyZDI2ZmQyKSwgQ09OU1Q2NCgweGZiMDZmNzBlZjVmNWYzZjUpLCAKK0NPTlNUNjQoMHhlZjgwZjI5Njc5NzlmOTc5KSwgQ09OU1Q2NCgweDVmY2VkZTMwNmY2ZmExNmYpLCBDT05TVDY0KDB4ZmNlZjNmNmQ5MTkxN2U5MSksIENPTlNUNjQoMHhhYTA3YTRmODUyNTI1NTUyKSwgCitDT05TVDY0KDB4MjdmZGMwNDc2MDYwOWQ2MCksIENPTlNUNjQoMHg4OTc2NjUzNWJjYmNjYWJjKSwgQ09OU1Q2NCgweGFjY2QyYjM3OWI5YjU2OWIpLCBDT05TVDY0KDB4MDQ4YzAxOGE4ZThlMDI4ZSksIAorQ09OU1Q2NCgweDcxMTU1YmQyYTNhM2I2YTMpLCBDT05TVDY0KDB4NjAzYzE4NmMwYzBjMzAwYyksIENPTlNUNjQoMHhmZjhhZjY4NDdiN2JmMTdiKSwgQ09OU1Q2NCgweGI1ZTE2YTgwMzUzNWQ0MzUpLCAKK0NPTlNUNjQoMHhlODY5M2FmNTFkMWQ3NDFkKSwgQ09OU1Q2NCgweDUzNDdkZGIzZTBlMGE3ZTApLCBDT05TVDY0KDB4ZjZhY2IzMjFkN2Q3N2JkNyksIENPTlNUNjQoMHg1ZWVkOTk5Y2MyYzIyZmMyKSwgCitDT05TVDY0KDB4NmQ5NjVjNDMyZTJlYjgyZSksIENPTlNUNjQoMHg2MjdhOTYyOTRiNGIzMTRiKSwgQ09OU1Q2NCgweGEzMjFlMTVkZmVmZWRmZmUpLCBDT05TVDY0KDB4ODIxNmFlZDU1NzU3NDE1NyksIAorQ09OU1Q2NCgweGE4NDEyYWJkMTUxNTU0MTUpLCBDT05TVDY0KDB4OWZiNmVlZTg3Nzc3YzE3NyksIENPTlNUNjQoMHhhNWViNmU5MjM3MzdkYzM3KSwgQ09OU1Q2NCgweDdiNTZkNzllZTVlNWIzZTUpLCAKK0NPTlNUNjQoMHg4Y2Q5MjMxMzlmOWY0NjlmKSwgQ09OU1Q2NCgweGQzMTdmZDIzZjBmMGU3ZjApLCBDT05TVDY0KDB4NmE3Zjk0MjA0YTRhMzU0YSksIENPTlNUNjQoMHg5ZTk1YTk0NGRhZGE0ZmRhKSwgCitDT05TVDY0KDB4ZmEyNWIwYTI1ODU4N2Q1OCksIENPTlNUNjQoMHgwNmNhOGZjZmM5YzkwM2M5KSwgQ09OU1Q2NCgweDU1OGQ1MjdjMjkyOWE0MjkpLCBDT05TVDY0KDB4NTAyMjE0NWEwYTBhMjgwYSksIAorQ09OU1Q2NCgweGUxNGY3ZjUwYjFiMWZlYjEpLCBDT05TVDY0KDB4NjkxYTVkYzlhMGEwYmFhMCksIENPTlNUNjQoMHg3ZmRhZDYxNDZiNmJiMTZiKSwgQ09OU1Q2NCgweDVjYWIxN2Q5ODU4NTJlODUpLCAKK0NPTlNUNjQoMHg4MTczNjczY2JkYmRjZWJkKSwgQ09OU1Q2NCgweGQyMzRiYThmNWQ1ZDY5NWQpLCBDT05TVDY0KDB4ODA1MDIwOTAxMDEwNDAxMCksIENPTlNUNjQoMHhmMzAzZjUwN2Y0ZjRmN2Y0KSwgCitDT05TVDY0KDB4MTZjMDhiZGRjYmNiMGJjYiksIENPTlNUNjQoMHhlZGM2N2NkMzNlM2VmODNlKSwgQ09OU1Q2NCgweDI4MTEwYTJkMDUwNTE0MDUpLCBDT05TVDY0KDB4MWZlNmNlNzg2NzY3ODE2NyksIAorQ09OU1Q2NCgweDczNTNkNTk3ZTRlNGI3ZTQpLCBDT05TVDY0KDB4MjViYjRlMDIyNzI3OWMyNyksIENPTlNUNjQoMHgzMjU4ODI3MzQxNDExOTQxKSwgQ09OU1Q2NCgweDJjOWQwYmE3OGI4YjE2OGIpLCAKK0NPTlNUNjQoMHg1MTAxNTNmNmE3YTdhNmE3KSwgQ09OU1Q2NCgweGNmOTRmYWIyN2Q3ZGU5N2QpLCBDT05TVDY0KDB4ZGNmYjM3NDk5NTk1NmU5NSksIENPTlNUNjQoMHg4ZTlmYWQ1NmQ4ZDg0N2Q4KSwgCitDT05TVDY0KDB4OGIzMGViNzBmYmZiY2JmYiksIENPTlNUNjQoMHgyMzcxYzFjZGVlZWU5ZmVlKSwgQ09OU1Q2NCgweGM3OTFmOGJiN2M3Y2VkN2MpLCBDT05TVDY0KDB4MTdlM2NjNzE2NjY2ODU2NiksIAorQ09OU1Q2NCgweGE2OGVhNzdiZGRkZDUzZGQpLCBDT05TVDY0KDB4Yjg0YjJlYWYxNzE3NWMxNyksIENPTlNUNjQoMHgwMjQ2OGU0NTQ3NDcwMTQ3KSwgQ09OU1Q2NCgweDg0ZGMyMTFhOWU5ZTQyOWUpLCAKK0NPTlNUNjQoMHgxZWM1ODlkNGNhY2EwZmNhKSwgQ09OU1Q2NCgweDc1OTk1YTU4MmQyZGI0MmQpLCBDT05TVDY0KDB4OTE3OTYzMmViZmJmYzZiZiksIENPTlNUNjQoMHgzODFiMGUzZjA3MDcxYzA3KSwgCitDT05TVDY0KDB4MDEyMzQ3YWNhZGFkOGVhZCksIENPTlNUNjQoMHhlYTJmYjRiMDVhNWE3NTVhKSwgQ09OU1Q2NCgweDZjYjUxYmVmODM4MzM2ODMpLCBDT05TVDY0KDB4ODVmZjY2YjYzMzMzY2MzMyksIAorQ09OU1Q2NCgweDNmZjJjNjVjNjM2MzkxNjMpLCBDT05TVDY0KDB4MTAwYTA0MTIwMjAyMDgwMiksIENPTlNUNjQoMHgzOTM4NDk5M2FhYWE5MmFhKSwgQ09OU1Q2NCgweGFmYThlMmRlNzE3MWQ5NzEpLCAKK0NPTlNUNjQoMHgwZWNmOGRjNmM4YzgwN2M4KSwgQ09OU1Q2NCgweGM4N2QzMmQxMTkxOTY0MTkpLCBDT05TVDY0KDB4NzI3MDkyM2I0OTQ5Mzk0OSksIENPTlNUNjQoMHg4NjlhYWY1ZmQ5ZDk0M2Q5KSwgCitDT05TVDY0KDB4YzMxZGY5MzFmMmYyZWZmMiksIENPTlNUNjQoMHg0YjQ4ZGJhOGUzZTNhYmUzKSwgQ09OU1Q2NCgweGUyMmFiNmI5NWI1YjcxNWIpLCBDT05TVDY0KDB4MzQ5MjBkYmM4ODg4MWE4OCksIAorQ09OU1Q2NCgweGE0YzgyOTNlOWE5YTUyOWEpLCBDT05TVDY0KDB4MmRiZTRjMGIyNjI2OTgyNiksIENPTlNUNjQoMHg4ZGZhNjRiZjMyMzJjODMyKSwgQ09OU1Q2NCgweGU5NGE3ZDU5YjBiMGZhYjApLCAKK0NPTlNUNjQoMHgxYjZhY2ZmMmU5ZTk4M2U5KSwgQ09OU1Q2NCgweDc4MzMxZTc3MGYwZjNjMGYpLCBDT05TVDY0KDB4ZTZhNmI3MzNkNWQ1NzNkNSksIENPTlNUNjQoMHg3NGJhMWRmNDgwODAzYTgwKSwgCitDT05TVDY0KDB4OTk3YzYxMjdiZWJlYzJiZSksIENPTlNUNjQoMHgyNmRlODdlYmNkY2QxM2NkKSwgQ09OU1Q2NCgweGJkZTQ2ODg5MzQzNGQwMzQpLCBDT05TVDY0KDB4N2E3NTkwMzI0ODQ4M2Q0OCksIAorQ09OU1Q2NCgweGFiMjRlMzU0ZmZmZmRiZmYpLCBDT05TVDY0KDB4Zjc4ZmY0OGQ3YTdhZjU3YSksIENPTlNUNjQoMHhmNGVhM2Q2NDkwOTA3YTkwKSwgQ09OU1Q2NCgweGMyM2ViZTlkNWY1ZjYxNWYpLCAKK0NPTlNUNjQoMHgxZGEwNDAzZDIwMjA4MDIwKSwgQ09OU1Q2NCgweDY3ZDVkMDBmNjg2OGJkNjgpLCBDT05TVDY0KDB4ZDA3MjM0Y2ExYTFhNjgxYSksIENPTlNUNjQoMHgxOTJjNDFiN2FlYWU4MmFlKSwgCitDT05TVDY0KDB4Yzk1ZTc1N2RiNGI0ZWFiNCksIENPTlNUNjQoMHg5YTE5YThjZTU0NTQ0ZDU0KSwgQ09OU1Q2NCgweGVjZTUzYjdmOTM5Mzc2OTMpLCBDT05TVDY0KDB4MGRhYTQ0MmYyMjIyODgyMiksIAorQ09OU1Q2NCgweDA3ZTljODYzNjQ2NDhkNjQpLCBDT05TVDY0KDB4ZGIxMmZmMmFmMWYxZTNmMSksIENPTlNUNjQoMHhiZmEyZTZjYzczNzNkMTczKSwgQ09OU1Q2NCgweDkwNWEyNDgyMTIxMjQ4MTIpLCAKK0NPTlNUNjQoMHgzYTVkODA3YTQwNDAxZDQwKSwgQ09OU1Q2NCgweDQwMjgxMDQ4MDgwODIwMDgpLCBDT05TVDY0KDB4NTZlODliOTVjM2MzMmJjMyksIENPTlNUNjQoMHgzMzdiYzVkZmVjZWM5N2VjKSwgCitDT05TVDY0KDB4OTY5MGFiNGRkYmRiNGJkYiksIENPTlNUNjQoMHg2MTFmNWZjMGExYTFiZWExKSwgQ09OU1Q2NCgweDFjODMwNzkxOGQ4ZDBlOGQpLCBDT05TVDY0KDB4ZjVjOTdhYzgzZDNkZjQzZCksIAorQ09OU1Q2NCgweGNjZjEzMzViOTc5NzY2OTcpLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgzNmQ0ODNmOWNmY2YxYmNmKSwgQ09OU1Q2NCgweDQ1ODc1NjZlMmIyYmFjMmIpLCAKK0NPTlNUNjQoMHg5N2IzZWNlMTc2NzZjNTc2KSwgQ09OU1Q2NCgweDY0YjAxOWU2ODI4MjMyODIpLCBDT05TVDY0KDB4ZmVhOWIxMjhkNmQ2N2ZkNiksIENPTlNUNjQoMHhkODc3MzZjMzFiMWI2YzFiKSwgCitDT05TVDY0KDB4YzE1Yjc3NzRiNWI1ZWViNSksIENPTlNUNjQoMHgxMTI5NDNiZWFmYWY4NmFmKSwgQ09OU1Q2NCgweDc3ZGZkNDFkNmE2YWI1NmEpLCBDT05TVDY0KDB4YmEwZGEwZWE1MDUwNWQ1MCksIAorQ09OU1Q2NCgweDEyNGM4YTU3NDU0NTA5NDUpLCBDT05TVDY0KDB4Y2IxOGZiMzhmM2YzZWJmMyksIENPTlNUNjQoMHg5ZGYwNjBhZDMwMzBjMDMwKSwgQ09OU1Q2NCgweDJiNzRjM2M0ZWZlZjliZWYpLCAKK0NPTlNUNjQoMHhlNWMzN2VkYTNmM2ZmYzNmKSwgQ09OU1Q2NCgweDkyMWNhYWM3NTU1NTQ5NTUpLCBDT05TVDY0KDB4NzkxMDU5ZGJhMmEyYjJhMiksIENPTlNUNjQoMHgwMzY1YzllOWVhZWE4ZmVhKSwgCitDT05TVDY0KDB4MGZlY2NhNmE2NTY1ODk2NSksIENPTlNUNjQoMHhiOTY4NjkwM2JhYmFkMmJhKSwgQ09OU1Q2NCgweDY1OTM1ZTRhMmYyZmJjMmYpLCBDT05TVDY0KDB4NGVlNzlkOGVjMGMwMjdjMCksIAorQ09OU1Q2NCgweGJlODFhMTYwZGVkZTVmZGUpLCBDT05TVDY0KDB4ZTA2YzM4ZmMxYzFjNzAxYyksIENPTlNUNjQoMHhiYjJlZTc0NmZkZmRkM2ZkKSwgQ09OU1Q2NCgweDUyNjQ5YTFmNGQ0ZDI5NGQpLCAKK0NPTlNUNjQoMHhlNGUwMzk3NjkyOTI3MjkyKSwgQ09OU1Q2NCgweDhmYmNlYWZhNzU3NWM5NzUpLCBDT05TVDY0KDB4MzAxZTBjMzYwNjA2MTgwNiksIENPTlNUNjQoMHgyNDk4MDlhZThhOGExMjhhKSwgCitDT05TVDY0KDB4Zjk0MDc5NGJiMmIyZjJiMiksIENPTlNUNjQoMHg2MzU5ZDE4NWU2ZTZiZmU2KSwgQ09OU1Q2NCgweDcwMzYxYzdlMGUwZTM4MGUpLCBDT05TVDY0KDB4Zjg2MzNlZTcxZjFmN2MxZiksIAorQ09OU1Q2NCgweDM3ZjdjNDU1NjI2Mjk1NjIpLCBDT05TVDY0KDB4ZWVhM2I1M2FkNGQ0NzdkNCksIENPTlNUNjQoMHgyOTMyNGQ4MWE4YTg5YWE4KSwgQ09OU1Q2NCgweGM0ZjQzMTUyOTY5NjYyOTYpLCAKK0NPTlNUNjQoMHg5YjNhZWY2MmY5ZjljM2Y5KSwgQ09OU1Q2NCgweDY2ZjY5N2EzYzVjNTMzYzUpLCBDT05TVDY0KDB4MzViMTRhMTAyNTI1OTQyNSksIENPTlNUNjQoMHhmMjIwYjJhYjU5NTk3OTU5KSwgCitDT05TVDY0KDB4NTRhZTE1ZDA4NDg0MmE4NCksIENPTlNUNjQoMHhiN2E3ZTRjNTcyNzJkNTcyKSwgQ09OU1Q2NCgweGQ1ZGQ3MmVjMzkzOWU0MzkpLCBDT05TVDY0KDB4NWE2MTk4MTY0YzRjMmQ0YyksIAorQ09OU1Q2NCgweGNhM2JiYzk0NWU1ZTY1NWUpLCBDT05TVDY0KDB4ZTc4NWYwOWY3ODc4ZmQ3OCksIENPTlNUNjQoMHhkZGQ4NzBlNTM4MzhlMDM4KSwgQ09OU1Q2NCgweDE0ODYwNTk4OGM4YzBhOGMpLCAKK0NPTlNUNjQoMHhjNmIyYmYxN2QxZDE2M2QxKSwgQ09OU1Q2NCgweDQxMGI1N2U0YTVhNWFlYTUpLCBDT05TVDY0KDB4NDM0ZGQ5YTFlMmUyYWZlMiksIENPTlNUNjQoMHgyZmY4YzI0ZTYxNjE5OTYxKSwgCitDT05TVDY0KDB4ZjE0NTdiNDJiM2IzZjZiMyksIENPTlNUNjQoMHgxNWE1NDIzNDIxMjE4NDIxKSwgQ09OU1Q2NCgweDk0ZDYyNTA4OWM5YzRhOWMpLCBDT05TVDY0KDB4ZjA2NjNjZWUxZTFlNzgxZSksIAorQ09OU1Q2NCgweDIyNTI4NjYxNDM0MzExNDMpLCBDT05TVDY0KDB4NzZmYzkzYjFjN2M3M2JjNyksIENPTlNUNjQoMHhiMzJiZTU0ZmZjZmNkN2ZjKSwgQ09OU1Q2NCgweDIwMTQwODI0MDQwNDEwMDQpLCAKK0NPTlNUNjQoMHhiMjA4YTJlMzUxNTE1OTUxKSwgQ09OU1Q2NCgweGJjYzcyZjI1OTk5OTVlOTkpLCBDT05TVDY0KDB4NGZjNGRhMjI2ZDZkYTk2ZCksIENPTlNUNjQoMHg2ODM5MWE2NTBkMGQzNDBkKSwgCitDT05TVDY0KDB4ODMzNWU5NzlmYWZhY2ZmYSksIENPTlNUNjQoMHhiNjg0YTM2OWRmZGY1YmRmKSwgQ09OU1Q2NCgweGQ3OWJmY2E5N2U3ZWU1N2UpLCBDT05TVDY0KDB4M2RiNDQ4MTkyNDI0OTAyNCksIAorQ09OU1Q2NCgweGM1ZDc3NmZlM2IzYmVjM2IpLCBDT05TVDY0KDB4MzEzZDRiOWFhYmFiOTZhYiksIENPTlNUNjQoMHgzZWQxODFmMGNlY2UxZmNlKSwgQ09OU1Q2NCgweDg4NTUyMjk5MTExMTQ0MTEpLCAKK0NPTlNUNjQoMHgwYzg5MDM4MzhmOGYwNjhmKSwgQ09OU1Q2NCgweDRhNmI5YzA0NGU0ZTI1NGUpLCBDT05TVDY0KDB4ZDE1MTczNjZiN2I3ZTZiNyksIENPTlNUNjQoMHgwYjYwY2JlMGViZWI4YmViKSwgCitDT05TVDY0KDB4ZmRjYzc4YzEzYzNjZjAzYyksIENPTlNUNjQoMHg3Y2JmMWZmZDgxODEzZTgxKSwgQ09OU1Q2NCgweGQ0ZmUzNTQwOTQ5NDZhOTQpLCBDT05TVDY0KDB4ZWIwY2YzMWNmN2Y3ZmJmNyksIAorQ09OU1Q2NCgweGExNjc2ZjE4YjliOWRlYjkpLCBDT05TVDY0KDB4OTg1ZjI2OGIxMzEzNGMxMyksIENPTlNUNjQoMHg3ZDljNTg1MTJjMmNiMDJjKSwgQ09OU1Q2NCgweGQ2YjhiYjA1ZDNkMzZiZDMpLCAKK0NPTlNUNjQoMHg2YjVjZDM4Y2U3ZTdiYmU3KSwgQ09OU1Q2NCgweDU3Y2JkYzM5NmU2ZWE1NmUpLCBDT05TVDY0KDB4NmVmMzk1YWFjNGM0MzdjNCksIENPTlNUNjQoMHgxODBmMDYxYjAzMDMwYzAzKSwgCitDT05TVDY0KDB4OGExM2FjZGM1NjU2NDU1NiksIENPTlNUNjQoMHgxYTQ5ODg1ZTQ0NDQwZDQ0KSwgQ09OU1Q2NCgweGRmOWVmZWEwN2Y3ZmUxN2YpLCBDT05TVDY0KDB4MjEzNzRmODhhOWE5OWVhOSksIAorQ09OU1Q2NCgweDRkODI1NDY3MmEyYWE4MmEpLCBDT05TVDY0KDB4YjE2ZDZiMGFiYmJiZDZiYiksIENPTlNUNjQoMHg0NmUyOWY4N2MxYzEyM2MxKSwgQ09OU1Q2NCgweGEyMDJhNmYxNTM1MzUxNTMpLCAKK0NPTlNUNjQoMHhhZThiYTU3MmRjZGM1N2RjKSwgQ09OU1Q2NCgweDU4MjcxNjUzMGIwYjJjMGIpLCBDT05TVDY0KDB4OWNkMzI3MDE5ZDlkNGU5ZCksIENPTlNUNjQoMHg0N2MxZDgyYjZjNmNhZDZjKSwgCitDT05TVDY0KDB4OTVmNTYyYTQzMTMxYzQzMSksIENPTlNUNjQoMHg4N2I5ZThmMzc0NzRjZDc0KSwgQ09OU1Q2NCgweGUzMDlmMTE1ZjZmNmZmZjYpLCBDT05TVDY0KDB4MGE0MzhjNGM0NjQ2MDU0NiksIAorQ09OU1Q2NCgweDA5MjY0NWE1YWNhYzhhYWMpLCBDT05TVDY0KDB4M2M5NzBmYjU4OTg5MWU4OSksIENPTlNUNjQoMHhhMDQ0MjhiNDE0MTQ1MDE0KSwgQ09OU1Q2NCgweDViNDJkZmJhZTFlMWEzZTEpLCAKK0NPTlNUNjQoMHhiMDRlMmNhNjE2MTY1ODE2KSwgQ09OU1Q2NCgweGNkZDI3NGY3M2EzYWU4M2EpLCBDT05TVDY0KDB4NmZkMGQyMDY2OTY5Yjk2OSksIENPTlNUNjQoMHg0ODJkMTI0MTA5MDkyNDA5KSwgCitDT05TVDY0KDB4YTdhZGUwZDc3MDcwZGQ3MCksIENPTlNUNjQoMHhkOTU0NzE2ZmI2YjZlMmI2KSwgQ09OU1Q2NCgweGNlYjdiZDFlZDBkMDY3ZDApLCBDT05TVDY0KDB4M2I3ZWM3ZDZlZGVkOTNlZCksIAorQ09OU1Q2NCgweDJlZGI4NWUyY2NjYzE3Y2MpLCBDT05TVDY0KDB4MmE1Nzg0Njg0MjQyMTU0MiksIENPTlNUNjQoMHhiNGMyMmQyYzk4OTg1YTk4KSwgQ09OU1Q2NCgweDQ5MGU1NWVkYTRhNGFhYTQpLCAKK0NPTlNUNjQoMHg1ZDg4NTA3NTI4MjhhMDI4KSwgQ09OU1Q2NCgweGRhMzFiODg2NWM1YzZkNWMpLCBDT05TVDY0KDB4OTMzZmVkNmJmOGY4YzdmOCksIENPTlNUNjQoMHg0NGE0MTFjMjg2ODYyMjg2KQorfTsKKworc3RhdGljIGNvbnN0IHVsb25nNjQgc2JveDVbXSA9IHsKK0NPTlNUNjQoMHgxOGMwNzgzMGQ4MTgxODYwKSwgQ09OU1Q2NCgweDIzMDVhZjQ2MjYyMzIzOGMpLCBDT05TVDY0KDB4YzY3ZWY5OTFiOGM2YzYzZiksIENPTlNUNjQoMHhlODEzNmZjZGZiZThlODg3KSwgCitDT05TVDY0KDB4ODc0Y2ExMTNjYjg3ODcyNiksIENPTlNUNjQoMHhiOGE5NjI2ZDExYjhiOGRhKSwgQ09OU1Q2NCgweDAxMDgwNTAyMDkwMTAxMDQpLCBDT05TVDY0KDB4NGY0MjZlOWUwZDRmNGYyMSksIAorQ09OU1Q2NCgweDM2YWRlZTZjOWIzNjM2ZDgpLCBDT05TVDY0KDB4YTY1OTA0NTFmZmE2YTZhMiksIENPTlNUNjQoMHhkMmRlYmRiOTBjZDJkMjZmKSwgQ09OU1Q2NCgweGY1ZmIwNmY3MGVmNWY1ZjMpLCAKK0NPTlNUNjQoMHg3OWVmODBmMjk2Nzk3OWY5KSwgQ09OU1Q2NCgweDZmNWZjZWRlMzA2ZjZmYTEpLCBDT05TVDY0KDB4OTFmY2VmM2Y2ZDkxOTE3ZSksIENPTlNUNjQoMHg1MmFhMDdhNGY4NTI1MjU1KSwgCitDT05TVDY0KDB4NjAyN2ZkYzA0NzYwNjA5ZCksIENPTlNUNjQoMHhiYzg5NzY2NTM1YmNiY2NhKSwgQ09OU1Q2NCgweDliYWNjZDJiMzc5YjliNTYpLCBDT05TVDY0KDB4OGUwNDhjMDE4YThlOGUwMiksIAorQ09OU1Q2NCgweGEzNzExNTViZDJhM2EzYjYpLCBDT05TVDY0KDB4MGM2MDNjMTg2YzBjMGMzMCksIENPTlNUNjQoMHg3YmZmOGFmNjg0N2I3YmYxKSwgQ09OU1Q2NCgweDM1YjVlMTZhODAzNTM1ZDQpLCAKK0NPTlNUNjQoMHgxZGU4NjkzYWY1MWQxZDc0KSwgQ09OU1Q2NCgweGUwNTM0N2RkYjNlMGUwYTcpLCBDT05TVDY0KDB4ZDdmNmFjYjMyMWQ3ZDc3YiksIENPTlNUNjQoMHhjMjVlZWQ5OTljYzJjMjJmKSwgCitDT05TVDY0KDB4MmU2ZDk2NWM0MzJlMmViOCksIENPTlNUNjQoMHg0YjYyN2E5NjI5NGI0YjMxKSwgQ09OU1Q2NCgweGZlYTMyMWUxNWRmZWZlZGYpLCBDT05TVDY0KDB4NTc4MjE2YWVkNTU3NTc0MSksIAorQ09OU1Q2NCgweDE1YTg0MTJhYmQxNTE1NTQpLCBDT05TVDY0KDB4Nzc5ZmI2ZWVlODc3NzdjMSksIENPTlNUNjQoMHgzN2E1ZWI2ZTkyMzczN2RjKSwgQ09OU1Q2NCgweGU1N2I1NmQ3OWVlNWU1YjMpLCAKK0NPTlNUNjQoMHg5ZjhjZDkyMzEzOWY5ZjQ2KSwgQ09OU1Q2NCgweGYwZDMxN2ZkMjNmMGYwZTcpLCBDT05TVDY0KDB4NGE2YTdmOTQyMDRhNGEzNSksIENPTlNUNjQoMHhkYTllOTVhOTQ0ZGFkYTRmKSwgCitDT05TVDY0KDB4NThmYTI1YjBhMjU4NTg3ZCksIENPTlNUNjQoMHhjOTA2Y2E4ZmNmYzljOTAzKSwgQ09OU1Q2NCgweDI5NTU4ZDUyN2MyOTI5YTQpLCBDT05TVDY0KDB4MGE1MDIyMTQ1YTBhMGEyOCksIAorQ09OU1Q2NCgweGIxZTE0ZjdmNTBiMWIxZmUpLCBDT05TVDY0KDB4YTA2OTFhNWRjOWEwYTBiYSksIENPTlNUNjQoMHg2YjdmZGFkNjE0NmI2YmIxKSwgQ09OU1Q2NCgweDg1NWNhYjE3ZDk4NTg1MmUpLCAKK0NPTlNUNjQoMHhiZDgxNzM2NzNjYmRiZGNlKSwgQ09OU1Q2NCgweDVkZDIzNGJhOGY1ZDVkNjkpLCBDT05TVDY0KDB4MTA4MDUwMjA5MDEwMTA0MCksIENPTlNUNjQoMHhmNGYzMDNmNTA3ZjRmNGY3KSwgCitDT05TVDY0KDB4Y2IxNmMwOGJkZGNiY2IwYiksIENPTlNUNjQoMHgzZWVkYzY3Y2QzM2UzZWY4KSwgQ09OU1Q2NCgweDA1MjgxMTBhMmQwNTA1MTQpLCBDT05TVDY0KDB4NjcxZmU2Y2U3ODY3Njc4MSksIAorQ09OU1Q2NCgweGU0NzM1M2Q1OTdlNGU0YjcpLCBDT05TVDY0KDB4MjcyNWJiNGUwMjI3Mjc5YyksIENPTlNUNjQoMHg0MTMyNTg4MjczNDE0MTE5KSwgQ09OU1Q2NCgweDhiMmM5ZDBiYTc4YjhiMTYpLCAKK0NPTlNUNjQoMHhhNzUxMDE1M2Y2YTdhN2E2KSwgQ09OU1Q2NCgweDdkY2Y5NGZhYjI3ZDdkZTkpLCBDT05TVDY0KDB4OTVkY2ZiMzc0OTk1OTU2ZSksIENPTlNUNjQoMHhkODhlOWZhZDU2ZDhkODQ3KSwgCitDT05TVDY0KDB4ZmI4YjMwZWI3MGZiZmJjYiksIENPTlNUNjQoMHhlZTIzNzFjMWNkZWVlZTlmKSwgQ09OU1Q2NCgweDdjYzc5MWY4YmI3YzdjZWQpLCBDT05TVDY0KDB4NjYxN2UzY2M3MTY2NjY4NSksIAorQ09OU1Q2NCgweGRkYTY4ZWE3N2JkZGRkNTMpLCBDT05TVDY0KDB4MTdiODRiMmVhZjE3MTc1YyksIENPTlNUNjQoMHg0NzAyNDY4ZTQ1NDc0NzAxKSwgQ09OU1Q2NCgweDllODRkYzIxMWE5ZTllNDIpLCAKK0NPTlNUNjQoMHhjYTFlYzU4OWQ0Y2FjYTBmKSwgQ09OU1Q2NCgweDJkNzU5OTVhNTgyZDJkYjQpLCBDT05TVDY0KDB4YmY5MTc5NjMyZWJmYmZjNiksIENPTlNUNjQoMHgwNzM4MWIwZTNmMDcwNzFjKSwgCitDT05TVDY0KDB4YWQwMTIzNDdhY2FkYWQ4ZSksIENPTlNUNjQoMHg1YWVhMmZiNGIwNWE1YTc1KSwgQ09OU1Q2NCgweDgzNmNiNTFiZWY4MzgzMzYpLCBDT05TVDY0KDB4MzM4NWZmNjZiNjMzMzNjYyksIAorQ09OU1Q2NCgweDYzM2ZmMmM2NWM2MzYzOTEpLCBDT05TVDY0KDB4MDIxMDBhMDQxMjAyMDIwOCksIENPTlNUNjQoMHhhYTM5Mzg0OTkzYWFhYTkyKSwgQ09OU1Q2NCgweDcxYWZhOGUyZGU3MTcxZDkpLCAKK0NPTlNUNjQoMHhjODBlY2Y4ZGM2YzhjODA3KSwgQ09OU1Q2NCgweDE5Yzg3ZDMyZDExOTE5NjQpLCBDT05TVDY0KDB4NDk3MjcwOTIzYjQ5NDkzOSksIENPTlNUNjQoMHhkOTg2OWFhZjVmZDlkOTQzKSwgCitDT05TVDY0KDB4ZjJjMzFkZjkzMWYyZjJlZiksIENPTlNUNjQoMHhlMzRiNDhkYmE4ZTNlM2FiKSwgQ09OU1Q2NCgweDViZTIyYWI2Yjk1YjViNzEpLCBDT05TVDY0KDB4ODgzNDkyMGRiYzg4ODgxYSksIAorQ09OU1Q2NCgweDlhYTRjODI5M2U5YTlhNTIpLCBDT05TVDY0KDB4MjYyZGJlNGMwYjI2MjY5OCksIENPTlNUNjQoMHgzMjhkZmE2NGJmMzIzMmM4KSwgQ09OU1Q2NCgweGIwZTk0YTdkNTliMGIwZmEpLCAKK0NPTlNUNjQoMHhlOTFiNmFjZmYyZTllOTgzKSwgQ09OU1Q2NCgweDBmNzgzMzFlNzcwZjBmM2MpLCBDT05TVDY0KDB4ZDVlNmE2YjczM2Q1ZDU3MyksIENPTlNUNjQoMHg4MDc0YmExZGY0ODA4MDNhKSwgCitDT05TVDY0KDB4YmU5OTdjNjEyN2JlYmVjMiksIENPTlNUNjQoMHhjZDI2ZGU4N2ViY2RjZDEzKSwgQ09OU1Q2NCgweDM0YmRlNDY4ODkzNDM0ZDApLCBDT05TVDY0KDB4NDg3YTc1OTAzMjQ4NDgzZCksIAorQ09OU1Q2NCgweGZmYWIyNGUzNTRmZmZmZGIpLCBDT05TVDY0KDB4N2FmNzhmZjQ4ZDdhN2FmNSksIENPTlNUNjQoMHg5MGY0ZWEzZDY0OTA5MDdhKSwgQ09OU1Q2NCgweDVmYzIzZWJlOWQ1ZjVmNjEpLCAKK0NPTlNUNjQoMHgyMDFkYTA0MDNkMjAyMDgwKSwgQ09OU1Q2NCgweDY4NjdkNWQwMGY2ODY4YmQpLCBDT05TVDY0KDB4MWFkMDcyMzRjYTFhMWE2OCksIENPTlNUNjQoMHhhZTE5MmM0MWI3YWVhZTgyKSwgCitDT05TVDY0KDB4YjRjOTVlNzU3ZGI0YjRlYSksIENPTlNUNjQoMHg1NDlhMTlhOGNlNTQ1NDRkKSwgQ09OU1Q2NCgweDkzZWNlNTNiN2Y5MzkzNzYpLCBDT05TVDY0KDB4MjIwZGFhNDQyZjIyMjI4OCksIAorQ09OU1Q2NCgweDY0MDdlOWM4NjM2NDY0OGQpLCBDT05TVDY0KDB4ZjFkYjEyZmYyYWYxZjFlMyksIENPTlNUNjQoMHg3M2JmYTJlNmNjNzM3M2QxKSwgQ09OU1Q2NCgweDEyOTA1YTI0ODIxMjEyNDgpLCAKK0NPTlNUNjQoMHg0MDNhNWQ4MDdhNDA0MDFkKSwgQ09OU1Q2NCgweDA4NDAyODEwNDgwODA4MjApLCBDT05TVDY0KDB4YzM1NmU4OWI5NWMzYzMyYiksIENPTlNUNjQoMHhlYzMzN2JjNWRmZWNlYzk3KSwgCitDT05TVDY0KDB4ZGI5NjkwYWI0ZGRiZGI0YiksIENPTlNUNjQoMHhhMTYxMWY1ZmMwYTFhMWJlKSwgQ09OU1Q2NCgweDhkMWM4MzA3OTE4ZDhkMGUpLCBDT05TVDY0KDB4M2RmNWM5N2FjODNkM2RmNCksIAorQ09OU1Q2NCgweDk3Y2NmMTMzNWI5Nzk3NjYpLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHhjZjM2ZDQ4M2Y5Y2ZjZjFiKSwgQ09OU1Q2NCgweDJiNDU4NzU2NmUyYjJiYWMpLCAKK0NPTlNUNjQoMHg3Njk3YjNlY2UxNzY3NmM1KSwgQ09OU1Q2NCgweDgyNjRiMDE5ZTY4MjgyMzIpLCBDT05TVDY0KDB4ZDZmZWE5YjEyOGQ2ZDY3ZiksIENPTlNUNjQoMHgxYmQ4NzczNmMzMWIxYjZjKSwgCitDT05TVDY0KDB4YjVjMTViNzc3NGI1YjVlZSksIENPTlNUNjQoMHhhZjExMjk0M2JlYWZhZjg2KSwgQ09OU1Q2NCgweDZhNzdkZmQ0MWQ2YTZhYjUpLCBDT05TVDY0KDB4NTBiYTBkYTBlYTUwNTA1ZCksIAorQ09OU1Q2NCgweDQ1MTI0YzhhNTc0NTQ1MDkpLCBDT05TVDY0KDB4ZjNjYjE4ZmIzOGYzZjNlYiksIENPTlNUNjQoMHgzMDlkZjA2MGFkMzAzMGMwKSwgQ09OU1Q2NCgweGVmMmI3NGMzYzRlZmVmOWIpLCAKK0NPTlNUNjQoMHgzZmU1YzM3ZWRhM2YzZmZjKSwgQ09OU1Q2NCgweDU1OTIxY2FhYzc1NTU1NDkpLCBDT05TVDY0KDB4YTI3OTEwNTlkYmEyYTJiMiksIENPTlNUNjQoMHhlYTAzNjVjOWU5ZWFlYThmKSwgCitDT05TVDY0KDB4NjUwZmVjY2E2YTY1NjU4OSksIENPTlNUNjQoMHhiYWI5Njg2OTAzYmFiYWQyKSwgQ09OU1Q2NCgweDJmNjU5MzVlNGEyZjJmYmMpLCBDT05TVDY0KDB4YzA0ZWU3OWQ4ZWMwYzAyNyksIAorQ09OU1Q2NCgweGRlYmU4MWExNjBkZWRlNWYpLCBDT05TVDY0KDB4MWNlMDZjMzhmYzFjMWM3MCksIENPTlNUNjQoMHhmZGJiMmVlNzQ2ZmRmZGQzKSwgQ09OU1Q2NCgweDRkNTI2NDlhMWY0ZDRkMjkpLCAKK0NPTlNUNjQoMHg5MmU0ZTAzOTc2OTI5MjcyKSwgQ09OU1Q2NCgweDc1OGZiY2VhZmE3NTc1YzkpLCBDT05TVDY0KDB4MDYzMDFlMGMzNjA2MDYxOCksIENPTlNUNjQoMHg4YTI0OTgwOWFlOGE4YTEyKSwgCitDT05TVDY0KDB4YjJmOTQwNzk0YmIyYjJmMiksIENPTlNUNjQoMHhlNjYzNTlkMTg1ZTZlNmJmKSwgQ09OU1Q2NCgweDBlNzAzNjFjN2UwZTBlMzgpLCBDT05TVDY0KDB4MWZmODYzM2VlNzFmMWY3YyksIAorQ09OU1Q2NCgweDYyMzdmN2M0NTU2MjYyOTUpLCBDT05TVDY0KDB4ZDRlZWEzYjUzYWQ0ZDQ3NyksIENPTlNUNjQoMHhhODI5MzI0ZDgxYThhODlhKSwgQ09OU1Q2NCgweDk2YzRmNDMxNTI5Njk2NjIpLCAKK0NPTlNUNjQoMHhmOTliM2FlZjYyZjlmOWMzKSwgQ09OU1Q2NCgweGM1NjZmNjk3YTNjNWM1MzMpLCBDT05TVDY0KDB4MjUzNWIxNGExMDI1MjU5NCksIENPTlNUNjQoMHg1OWYyMjBiMmFiNTk1OTc5KSwgCitDT05TVDY0KDB4ODQ1NGFlMTVkMDg0ODQyYSksIENPTlNUNjQoMHg3MmI3YTdlNGM1NzI3MmQ1KSwgQ09OU1Q2NCgweDM5ZDVkZDcyZWMzOTM5ZTQpLCBDT05TVDY0KDB4NGM1YTYxOTgxNjRjNGMyZCksIAorQ09OU1Q2NCgweDVlY2EzYmJjOTQ1ZTVlNjUpLCBDT05TVDY0KDB4NzhlNzg1ZjA5Zjc4NzhmZCksIENPTlNUNjQoMHgzOGRkZDg3MGU1MzgzOGUwKSwgQ09OU1Q2NCgweDhjMTQ4NjA1OTg4YzhjMGEpLCAKK0NPTlNUNjQoMHhkMWM2YjJiZjE3ZDFkMTYzKSwgQ09OU1Q2NCgweGE1NDEwYjU3ZTRhNWE1YWUpLCBDT05TVDY0KDB4ZTI0MzRkZDlhMWUyZTJhZiksIENPTlNUNjQoMHg2MTJmZjhjMjRlNjE2MTk5KSwgCitDT05TVDY0KDB4YjNmMTQ1N2I0MmIzYjNmNiksIENPTlNUNjQoMHgyMTE1YTU0MjM0MjEyMTg0KSwgQ09OU1Q2NCgweDljOTRkNjI1MDg5YzljNGEpLCBDT05TVDY0KDB4MWVmMDY2M2NlZTFlMWU3OCksIAorQ09OU1Q2NCgweDQzMjI1Mjg2NjE0MzQzMTEpLCBDT05TVDY0KDB4Yzc3NmZjOTNiMWM3YzczYiksIENPTlNUNjQoMHhmY2IzMmJlNTRmZmNmY2Q3KSwgQ09OU1Q2NCgweDA0MjAxNDA4MjQwNDA0MTApLCAKK0NPTlNUNjQoMHg1MWIyMDhhMmUzNTE1MTU5KSwgQ09OU1Q2NCgweDk5YmNjNzJmMjU5OTk5NWUpLCBDT05TVDY0KDB4NmQ0ZmM0ZGEyMjZkNmRhOSksIENPTlNUNjQoMHgwZDY4MzkxYTY1MGQwZDM0KSwgCitDT05TVDY0KDB4ZmE4MzM1ZTk3OWZhZmFjZiksIENPTlNUNjQoMHhkZmI2ODRhMzY5ZGZkZjViKSwgQ09OU1Q2NCgweDdlZDc5YmZjYTk3ZTdlZTUpLCBDT05TVDY0KDB4MjQzZGI0NDgxOTI0MjQ5MCksIAorQ09OU1Q2NCgweDNiYzVkNzc2ZmUzYjNiZWMpLCBDT05TVDY0KDB4YWIzMTNkNGI5YWFiYWI5NiksIENPTlNUNjQoMHhjZTNlZDE4MWYwY2VjZTFmKSwgQ09OU1Q2NCgweDExODg1NTIyOTkxMTExNDQpLCAKK0NPTlNUNjQoMHg4ZjBjODkwMzgzOGY4ZjA2KSwgQ09OU1Q2NCgweDRlNGE2YjljMDQ0ZTRlMjUpLCBDT05TVDY0KDB4YjdkMTUxNzM2NmI3YjdlNiksIENPTlNUNjQoMHhlYjBiNjBjYmUwZWJlYjhiKSwgCitDT05TVDY0KDB4M2NmZGNjNzhjMTNjM2NmMCksIENPTlNUNjQoMHg4MTdjYmYxZmZkODE4MTNlKSwgQ09OU1Q2NCgweDk0ZDRmZTM1NDA5NDk0NmEpLCBDT05TVDY0KDB4ZjdlYjBjZjMxY2Y3ZjdmYiksIAorQ09OU1Q2NCgweGI5YTE2NzZmMThiOWI5ZGUpLCBDT05TVDY0KDB4MTM5ODVmMjY4YjEzMTM0YyksIENPTlNUNjQoMHgyYzdkOWM1ODUxMmMyY2IwKSwgQ09OU1Q2NCgweGQzZDZiOGJiMDVkM2QzNmIpLCAKK0NPTlNUNjQoMHhlNzZiNWNkMzhjZTdlN2JiKSwgQ09OU1Q2NCgweDZlNTdjYmRjMzk2ZTZlYTUpLCBDT05TVDY0KDB4YzQ2ZWYzOTVhYWM0YzQzNyksIENPTlNUNjQoMHgwMzE4MGYwNjFiMDMwMzBjKSwgCitDT05TVDY0KDB4NTY4YTEzYWNkYzU2NTY0NSksIENPTlNUNjQoMHg0NDFhNDk4ODVlNDQ0NDBkKSwgQ09OU1Q2NCgweDdmZGY5ZWZlYTA3ZjdmZTEpLCBDT05TVDY0KDB4YTkyMTM3NGY4OGE5YTk5ZSksIAorQ09OU1Q2NCgweDJhNGQ4MjU0NjcyYTJhYTgpLCBDT05TVDY0KDB4YmJiMTZkNmIwYWJiYmJkNiksIENPTlNUNjQoMHhjMTQ2ZTI5Zjg3YzFjMTIzKSwgQ09OU1Q2NCgweDUzYTIwMmE2ZjE1MzUzNTEpLCAKK0NPTlNUNjQoMHhkY2FlOGJhNTcyZGNkYzU3KSwgQ09OU1Q2NCgweDBiNTgyNzE2NTMwYjBiMmMpLCBDT05TVDY0KDB4OWQ5Y2QzMjcwMTlkOWQ0ZSksIENPTlNUNjQoMHg2YzQ3YzFkODJiNmM2Y2FkKSwgCitDT05TVDY0KDB4MzE5NWY1NjJhNDMxMzFjNCksIENPTlNUNjQoMHg3NDg3YjllOGYzNzQ3NGNkKSwgQ09OU1Q2NCgweGY2ZTMwOWYxMTVmNmY2ZmYpLCBDT05TVDY0KDB4NDYwYTQzOGM0YzQ2NDYwNSksIAorQ09OU1Q2NCgweGFjMDkyNjQ1YTVhY2FjOGEpLCBDT05TVDY0KDB4ODkzYzk3MGZiNTg5ODkxZSksIENPTlNUNjQoMHgxNGEwNDQyOGI0MTQxNDUwKSwgQ09OU1Q2NCgweGUxNWI0MmRmYmFlMWUxYTMpLCAKK0NPTlNUNjQoMHgxNmIwNGUyY2E2MTYxNjU4KSwgQ09OU1Q2NCgweDNhY2RkMjc0ZjczYTNhZTgpLCBDT05TVDY0KDB4Njk2ZmQwZDIwNjY5NjliOSksIENPTlNUNjQoMHgwOTQ4MmQxMjQxMDkwOTI0KSwgCitDT05TVDY0KDB4NzBhN2FkZTBkNzcwNzBkZCksIENPTlNUNjQoMHhiNmQ5NTQ3MTZmYjZiNmUyKSwgQ09OU1Q2NCgweGQwY2ViN2JkMWVkMGQwNjcpLCBDT05TVDY0KDB4ZWQzYjdlYzdkNmVkZWQ5MyksIAorQ09OU1Q2NCgweGNjMmVkYjg1ZTJjY2NjMTcpLCBDT05TVDY0KDB4NDIyYTU3ODQ2ODQyNDIxNSksIENPTlNUNjQoMHg5OGI0YzIyZDJjOTg5ODVhKSwgQ09OU1Q2NCgweGE0NDkwZTU1ZWRhNGE0YWEpLCAKK0NPTlNUNjQoMHgyODVkODg1MDc1MjgyOGEwKSwgQ09OU1Q2NCgweDVjZGEzMWI4ODY1YzVjNmQpLCBDT05TVDY0KDB4Zjg5MzNmZWQ2YmY4ZjhjNyksIENPTlNUNjQoMHg4NjQ0YTQxMWMyODY4NjIyKQorfTsKKworc3RhdGljIGNvbnN0IHVsb25nNjQgc2JveDZbXSA9IHsKK0NPTlNUNjQoMHg2MDE4YzA3ODMwZDgxODE4KSwgQ09OU1Q2NCgweDhjMjMwNWFmNDYyNjIzMjMpLCBDT05TVDY0KDB4M2ZjNjdlZjk5MWI4YzZjNiksIENPTlNUNjQoMHg4N2U4MTM2ZmNkZmJlOGU4KSwgCitDT05TVDY0KDB4MjY4NzRjYTExM2NiODc4NyksIENPTlNUNjQoMHhkYWI4YTk2MjZkMTFiOGI4KSwgQ09OU1Q2NCgweDA0MDEwODA1MDIwOTAxMDEpLCBDT05TVDY0KDB4MjE0ZjQyNmU5ZTBkNGY0ZiksIAorQ09OU1Q2NCgweGQ4MzZhZGVlNmM5YjM2MzYpLCBDT05TVDY0KDB4YTJhNjU5MDQ1MWZmYTZhNiksIENPTlNUNjQoMHg2ZmQyZGViZGI5MGNkMmQyKSwgQ09OU1Q2NCgweGYzZjVmYjA2ZjcwZWY1ZjUpLCAKK0NPTlNUNjQoMHhmOTc5ZWY4MGYyOTY3OTc5KSwgQ09OU1Q2NCgweGExNmY1ZmNlZGUzMDZmNmYpLCBDT05TVDY0KDB4N2U5MWZjZWYzZjZkOTE5MSksIENPTlNUNjQoMHg1NTUyYWEwN2E0Zjg1MjUyKSwgCitDT05TVDY0KDB4OWQ2MDI3ZmRjMDQ3NjA2MCksIENPTlNUNjQoMHhjYWJjODk3NjY1MzViY2JjKSwgQ09OU1Q2NCgweDU2OWJhY2NkMmIzNzliOWIpLCBDT05TVDY0KDB4MDI4ZTA0OGMwMThhOGU4ZSksIAorQ09OU1Q2NCgweGI2YTM3MTE1NWJkMmEzYTMpLCBDT05TVDY0KDB4MzAwYzYwM2MxODZjMGMwYyksIENPTlNUNjQoMHhmMTdiZmY4YWY2ODQ3YjdiKSwgQ09OU1Q2NCgweGQ0MzViNWUxNmE4MDM1MzUpLCAKK0NPTlNUNjQoMHg3NDFkZTg2OTNhZjUxZDFkKSwgQ09OU1Q2NCgweGE3ZTA1MzQ3ZGRiM2UwZTApLCBDT05TVDY0KDB4N2JkN2Y2YWNiMzIxZDdkNyksIENPTlNUNjQoMHgyZmMyNWVlZDk5OWNjMmMyKSwgCitDT05TVDY0KDB4YjgyZTZkOTY1YzQzMmUyZSksIENPTlNUNjQoMHgzMTRiNjI3YTk2Mjk0YjRiKSwgQ09OU1Q2NCgweGRmZmVhMzIxZTE1ZGZlZmUpLCBDT05TVDY0KDB4NDE1NzgyMTZhZWQ1NTc1NyksIAorQ09OU1Q2NCgweDU0MTVhODQxMmFiZDE1MTUpLCBDT05TVDY0KDB4YzE3NzlmYjZlZWU4Nzc3NyksIENPTlNUNjQoMHhkYzM3YTVlYjZlOTIzNzM3KSwgQ09OU1Q2NCgweGIzZTU3YjU2ZDc5ZWU1ZTUpLCAKK0NPTlNUNjQoMHg0NjlmOGNkOTIzMTM5ZjlmKSwgQ09OU1Q2NCgweGU3ZjBkMzE3ZmQyM2YwZjApLCBDT05TVDY0KDB4MzU0YTZhN2Y5NDIwNGE0YSksIENPTlNUNjQoMHg0ZmRhOWU5NWE5NDRkYWRhKSwgCitDT05TVDY0KDB4N2Q1OGZhMjViMGEyNTg1OCksIENPTlNUNjQoMHgwM2M5MDZjYThmY2ZjOWM5KSwgQ09OU1Q2NCgweGE0Mjk1NThkNTI3YzI5MjkpLCBDT05TVDY0KDB4MjgwYTUwMjIxNDVhMGEwYSksIAorQ09OU1Q2NCgweGZlYjFlMTRmN2Y1MGIxYjEpLCBDT05TVDY0KDB4YmFhMDY5MWE1ZGM5YTBhMCksIENPTlNUNjQoMHhiMTZiN2ZkYWQ2MTQ2YjZiKSwgQ09OU1Q2NCgweDJlODU1Y2FiMTdkOTg1ODUpLCAKK0NPTlNUNjQoMHhjZWJkODE3MzY3M2NiZGJkKSwgQ09OU1Q2NCgweDY5NWRkMjM0YmE4ZjVkNWQpLCBDT05TVDY0KDB4NDAxMDgwNTAyMDkwMTAxMCksIENPTlNUNjQoMHhmN2Y0ZjMwM2Y1MDdmNGY0KSwgCitDT05TVDY0KDB4MGJjYjE2YzA4YmRkY2JjYiksIENPTlNUNjQoMHhmODNlZWRjNjdjZDMzZTNlKSwgQ09OU1Q2NCgweDE0MDUyODExMGEyZDA1MDUpLCBDT05TVDY0KDB4ODE2NzFmZTZjZTc4Njc2NyksIAorQ09OU1Q2NCgweGI3ZTQ3MzUzZDU5N2U0ZTQpLCBDT05TVDY0KDB4OWMyNzI1YmI0ZTAyMjcyNyksIENPTlNUNjQoMHgxOTQxMzI1ODgyNzM0MTQxKSwgQ09OU1Q2NCgweDE2OGIyYzlkMGJhNzhiOGIpLCAKK0NPTlNUNjQoMHhhNmE3NTEwMTUzZjZhN2E3KSwgQ09OU1Q2NCgweGU5N2RjZjk0ZmFiMjdkN2QpLCBDT05TVDY0KDB4NmU5NWRjZmIzNzQ5OTU5NSksIENPTlNUNjQoMHg0N2Q4OGU5ZmFkNTZkOGQ4KSwgCitDT05TVDY0KDB4Y2JmYjhiMzBlYjcwZmJmYiksIENPTlNUNjQoMHg5ZmVlMjM3MWMxY2RlZWVlKSwgQ09OU1Q2NCgweGVkN2NjNzkxZjhiYjdjN2MpLCBDT05TVDY0KDB4ODU2NjE3ZTNjYzcxNjY2NiksIAorQ09OU1Q2NCgweDUzZGRhNjhlYTc3YmRkZGQpLCBDT05TVDY0KDB4NWMxN2I4NGIyZWFmMTcxNyksIENPTlNUNjQoMHgwMTQ3MDI0NjhlNDU0NzQ3KSwgQ09OU1Q2NCgweDQyOWU4NGRjMjExYTllOWUpLCAKK0NPTlNUNjQoMHgwZmNhMWVjNTg5ZDRjYWNhKSwgQ09OU1Q2NCgweGI0MmQ3NTk5NWE1ODJkMmQpLCBDT05TVDY0KDB4YzZiZjkxNzk2MzJlYmZiZiksIENPTlNUNjQoMHgxYzA3MzgxYjBlM2YwNzA3KSwgCitDT05TVDY0KDB4OGVhZDAxMjM0N2FjYWRhZCksIENPTlNUNjQoMHg3NTVhZWEyZmI0YjA1YTVhKSwgQ09OU1Q2NCgweDM2ODM2Y2I1MWJlZjgzODMpLCBDT05TVDY0KDB4Y2MzMzg1ZmY2NmI2MzMzMyksIAorQ09OU1Q2NCgweDkxNjMzZmYyYzY1YzYzNjMpLCBDT05TVDY0KDB4MDgwMjEwMGEwNDEyMDIwMiksIENPTlNUNjQoMHg5MmFhMzkzODQ5OTNhYWFhKSwgQ09OU1Q2NCgweGQ5NzFhZmE4ZTJkZTcxNzEpLCAKK0NPTlNUNjQoMHgwN2M4MGVjZjhkYzZjOGM4KSwgQ09OU1Q2NCgweDY0MTljODdkMzJkMTE5MTkpLCBDT05TVDY0KDB4Mzk0OTcyNzA5MjNiNDk0OSksIENPTlNUNjQoMHg0M2Q5ODY5YWFmNWZkOWQ5KSwgCitDT05TVDY0KDB4ZWZmMmMzMWRmOTMxZjJmMiksIENPTlNUNjQoMHhhYmUzNGI0OGRiYThlM2UzKSwgQ09OU1Q2NCgweDcxNWJlMjJhYjZiOTViNWIpLCBDT05TVDY0KDB4MWE4ODM0OTIwZGJjODg4OCksIAorQ09OU1Q2NCgweDUyOWFhNGM4MjkzZTlhOWEpLCBDT05TVDY0KDB4OTgyNjJkYmU0YzBiMjYyNiksIENPTlNUNjQoMHhjODMyOGRmYTY0YmYzMjMyKSwgQ09OU1Q2NCgweGZhYjBlOTRhN2Q1OWIwYjApLCAKK0NPTlNUNjQoMHg4M2U5MWI2YWNmZjJlOWU5KSwgQ09OU1Q2NCgweDNjMGY3ODMzMWU3NzBmMGYpLCBDT05TVDY0KDB4NzNkNWU2YTZiNzMzZDVkNSksIENPTlNUNjQoMHgzYTgwNzRiYTFkZjQ4MDgwKSwgCitDT05TVDY0KDB4YzJiZTk5N2M2MTI3YmViZSksIENPTlNUNjQoMHgxM2NkMjZkZTg3ZWJjZGNkKSwgQ09OU1Q2NCgweGQwMzRiZGU0Njg4OTM0MzQpLCBDT05TVDY0KDB4M2Q0ODdhNzU5MDMyNDg0OCksIAorQ09OU1Q2NCgweGRiZmZhYjI0ZTM1NGZmZmYpLCBDT05TVDY0KDB4ZjU3YWY3OGZmNDhkN2E3YSksIENPTlNUNjQoMHg3YTkwZjRlYTNkNjQ5MDkwKSwgQ09OU1Q2NCgweDYxNWZjMjNlYmU5ZDVmNWYpLCAKK0NPTlNUNjQoMHg4MDIwMWRhMDQwM2QyMDIwKSwgQ09OU1Q2NCgweGJkNjg2N2Q1ZDAwZjY4NjgpLCBDT05TVDY0KDB4NjgxYWQwNzIzNGNhMWExYSksIENPTlNUNjQoMHg4MmFlMTkyYzQxYjdhZWFlKSwgCitDT05TVDY0KDB4ZWFiNGM5NWU3NTdkYjRiNCksIENPTlNUNjQoMHg0ZDU0OWExOWE4Y2U1NDU0KSwgQ09OU1Q2NCgweDc2OTNlY2U1M2I3ZjkzOTMpLCBDT05TVDY0KDB4ODgyMjBkYWE0NDJmMjIyMiksIAorQ09OU1Q2NCgweDhkNjQwN2U5Yzg2MzY0NjQpLCBDT05TVDY0KDB4ZTNmMWRiMTJmZjJhZjFmMSksIENPTlNUNjQoMHhkMTczYmZhMmU2Y2M3MzczKSwgQ09OU1Q2NCgweDQ4MTI5MDVhMjQ4MjEyMTIpLCAKK0NPTlNUNjQoMHgxZDQwM2E1ZDgwN2E0MDQwKSwgQ09OU1Q2NCgweDIwMDg0MDI4MTA0ODA4MDgpLCBDT05TVDY0KDB4MmJjMzU2ZTg5Yjk1YzNjMyksIENPTlNUNjQoMHg5N2VjMzM3YmM1ZGZlY2VjKSwgCitDT05TVDY0KDB4NGJkYjk2OTBhYjRkZGJkYiksIENPTlNUNjQoMHhiZWExNjExZjVmYzBhMWExKSwgQ09OU1Q2NCgweDBlOGQxYzgzMDc5MThkOGQpLCBDT05TVDY0KDB4ZjQzZGY1Yzk3YWM4M2QzZCksIAorQ09OU1Q2NCgweDY2OTdjY2YxMzM1Yjk3OTcpLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHgxYmNmMzZkNDgzZjljZmNmKSwgQ09OU1Q2NCgweGFjMmI0NTg3NTY2ZTJiMmIpLCAKK0NPTlNUNjQoMHhjNTc2OTdiM2VjZTE3Njc2KSwgQ09OU1Q2NCgweDMyODI2NGIwMTllNjgyODIpLCBDT05TVDY0KDB4N2ZkNmZlYTliMTI4ZDZkNiksIENPTlNUNjQoMHg2YzFiZDg3NzM2YzMxYjFiKSwgCitDT05TVDY0KDB4ZWViNWMxNWI3Nzc0YjViNSksIENPTlNUNjQoMHg4NmFmMTEyOTQzYmVhZmFmKSwgQ09OU1Q2NCgweGI1NmE3N2RmZDQxZDZhNmEpLCBDT05TVDY0KDB4NWQ1MGJhMGRhMGVhNTA1MCksIAorQ09OU1Q2NCgweDA5NDUxMjRjOGE1NzQ1NDUpLCBDT05TVDY0KDB4ZWJmM2NiMThmYjM4ZjNmMyksIENPTlNUNjQoMHhjMDMwOWRmMDYwYWQzMDMwKSwgQ09OU1Q2NCgweDliZWYyYjc0YzNjNGVmZWYpLCAKK0NPTlNUNjQoMHhmYzNmZTVjMzdlZGEzZjNmKSwgQ09OU1Q2NCgweDQ5NTU5MjFjYWFjNzU1NTUpLCBDT05TVDY0KDB4YjJhMjc5MTA1OWRiYTJhMiksIENPTlNUNjQoMHg4ZmVhMDM2NWM5ZTllYWVhKSwgCitDT05TVDY0KDB4ODk2NTBmZWNjYTZhNjU2NSksIENPTlNUNjQoMHhkMmJhYjk2ODY5MDNiYWJhKSwgQ09OU1Q2NCgweGJjMmY2NTkzNWU0YTJmMmYpLCBDT05TVDY0KDB4MjdjMDRlZTc5ZDhlYzBjMCksIAorQ09OU1Q2NCgweDVmZGViZTgxYTE2MGRlZGUpLCBDT05TVDY0KDB4NzAxY2UwNmMzOGZjMWMxYyksIENPTlNUNjQoMHhkM2ZkYmIyZWU3NDZmZGZkKSwgQ09OU1Q2NCgweDI5NGQ1MjY0OWExZjRkNGQpLCAKK0NPTlNUNjQoMHg3MjkyZTRlMDM5NzY5MjkyKSwgQ09OU1Q2NCgweGM5NzU4ZmJjZWFmYTc1NzUpLCBDT05TVDY0KDB4MTgwNjMwMWUwYzM2MDYwNiksIENPTlNUNjQoMHgxMjhhMjQ5ODA5YWU4YThhKSwgCitDT05TVDY0KDB4ZjJiMmY5NDA3OTRiYjJiMiksIENPTlNUNjQoMHhiZmU2NjM1OWQxODVlNmU2KSwgQ09OU1Q2NCgweDM4MGU3MDM2MWM3ZTBlMGUpLCBDT05TVDY0KDB4N2MxZmY4NjMzZWU3MWYxZiksIAorQ09OU1Q2NCgweDk1NjIzN2Y3YzQ1NTYyNjIpLCBDT05TVDY0KDB4NzdkNGVlYTNiNTNhZDRkNCksIENPTlNUNjQoMHg5YWE4MjkzMjRkODFhOGE4KSwgQ09OU1Q2NCgweDYyOTZjNGY0MzE1Mjk2OTYpLCAKK0NPTlNUNjQoMHhjM2Y5OWIzYWVmNjJmOWY5KSwgQ09OU1Q2NCgweDMzYzU2NmY2OTdhM2M1YzUpLCBDT05TVDY0KDB4OTQyNTM1YjE0YTEwMjUyNSksIENPTlNUNjQoMHg3OTU5ZjIyMGIyYWI1OTU5KSwgCitDT05TVDY0KDB4MmE4NDU0YWUxNWQwODQ4NCksIENPTlNUNjQoMHhkNTcyYjdhN2U0YzU3MjcyKSwgQ09OU1Q2NCgweGU0MzlkNWRkNzJlYzM5MzkpLCBDT05TVDY0KDB4MmQ0YzVhNjE5ODE2NGM0YyksIAorQ09OU1Q2NCgweDY1NWVjYTNiYmM5NDVlNWUpLCBDT05TVDY0KDB4ZmQ3OGU3ODVmMDlmNzg3OCksIENPTlNUNjQoMHhlMDM4ZGRkODcwZTUzODM4KSwgQ09OU1Q2NCgweDBhOGMxNDg2MDU5ODhjOGMpLCAKK0NPTlNUNjQoMHg2M2QxYzZiMmJmMTdkMWQxKSwgQ09OU1Q2NCgweGFlYTU0MTBiNTdlNGE1YTUpLCBDT05TVDY0KDB4YWZlMjQzNGRkOWExZTJlMiksIENPTlNUNjQoMHg5OTYxMmZmOGMyNGU2MTYxKSwgCitDT05TVDY0KDB4ZjZiM2YxNDU3YjQyYjNiMyksIENPTlNUNjQoMHg4NDIxMTVhNTQyMzQyMTIxKSwgQ09OU1Q2NCgweDRhOWM5NGQ2MjUwODljOWMpLCBDT05TVDY0KDB4NzgxZWYwNjYzY2VlMWUxZSksIAorQ09OU1Q2NCgweDExNDMyMjUyODY2MTQzNDMpLCBDT05TVDY0KDB4M2JjNzc2ZmM5M2IxYzdjNyksIENPTlNUNjQoMHhkN2ZjYjMyYmU1NGZmY2ZjKSwgQ09OU1Q2NCgweDEwMDQyMDE0MDgyNDA0MDQpLCAKK0NPTlNUNjQoMHg1OTUxYjIwOGEyZTM1MTUxKSwgQ09OU1Q2NCgweDVlOTliY2M3MmYyNTk5OTkpLCBDT05TVDY0KDB4YTk2ZDRmYzRkYTIyNmQ2ZCksIENPTlNUNjQoMHgzNDBkNjgzOTFhNjUwZDBkKSwgCitDT05TVDY0KDB4Y2ZmYTgzMzVlOTc5ZmFmYSksIENPTlNUNjQoMHg1YmRmYjY4NGEzNjlkZmRmKSwgQ09OU1Q2NCgweGU1N2VkNzliZmNhOTdlN2UpLCBDT05TVDY0KDB4OTAyNDNkYjQ0ODE5MjQyNCksIAorQ09OU1Q2NCgweGVjM2JjNWQ3NzZmZTNiM2IpLCBDT05TVDY0KDB4OTZhYjMxM2Q0YjlhYWJhYiksIENPTlNUNjQoMHgxZmNlM2VkMTgxZjBjZWNlKSwgQ09OU1Q2NCgweDQ0MTE4ODU1MjI5OTExMTEpLCAKK0NPTlNUNjQoMHgwNjhmMGM4OTAzODM4ZjhmKSwgQ09OU1Q2NCgweDI1NGU0YTZiOWMwNDRlNGUpLCBDT05TVDY0KDB4ZTZiN2QxNTE3MzY2YjdiNyksIENPTlNUNjQoMHg4YmViMGI2MGNiZTBlYmViKSwgCitDT05TVDY0KDB4ZjAzY2ZkY2M3OGMxM2MzYyksIENPTlNUNjQoMHgzZTgxN2NiZjFmZmQ4MTgxKSwgQ09OU1Q2NCgweDZhOTRkNGZlMzU0MDk0OTQpLCBDT05TVDY0KDB4ZmJmN2ViMGNmMzFjZjdmNyksIAorQ09OU1Q2NCgweGRlYjlhMTY3NmYxOGI5YjkpLCBDT05TVDY0KDB4NGMxMzk4NWYyNjhiMTMxMyksIENPTlNUNjQoMHhiMDJjN2Q5YzU4NTEyYzJjKSwgQ09OU1Q2NCgweDZiZDNkNmI4YmIwNWQzZDMpLCAKK0NPTlNUNjQoMHhiYmU3NmI1Y2QzOGNlN2U3KSwgQ09OU1Q2NCgweGE1NmU1N2NiZGMzOTZlNmUpLCBDT05TVDY0KDB4MzdjNDZlZjM5NWFhYzRjNCksIENPTlNUNjQoMHgwYzAzMTgwZjA2MWIwMzAzKSwgCitDT05TVDY0KDB4NDU1NjhhMTNhY2RjNTY1NiksIENPTlNUNjQoMHgwZDQ0MWE0OTg4NWU0NDQ0KSwgQ09OU1Q2NCgweGUxN2ZkZjllZmVhMDdmN2YpLCBDT05TVDY0KDB4OWVhOTIxMzc0Zjg4YTlhOSksIAorQ09OU1Q2NCgweGE4MmE0ZDgyNTQ2NzJhMmEpLCBDT05TVDY0KDB4ZDZiYmIxNmQ2YjBhYmJiYiksIENPTlNUNjQoMHgyM2MxNDZlMjlmODdjMWMxKSwgQ09OU1Q2NCgweDUxNTNhMjAyYTZmMTUzNTMpLCAKK0NPTlNUNjQoMHg1N2RjYWU4YmE1NzJkY2RjKSwgQ09OU1Q2NCgweDJjMGI1ODI3MTY1MzBiMGIpLCBDT05TVDY0KDB4NGU5ZDljZDMyNzAxOWQ5ZCksIENPTlNUNjQoMHhhZDZjNDdjMWQ4MmI2YzZjKSwgCitDT05TVDY0KDB4YzQzMTk1ZjU2MmE0MzEzMSksIENPTlNUNjQoMHhjZDc0ODdiOWU4ZjM3NDc0KSwgQ09OU1Q2NCgweGZmZjZlMzA5ZjExNWY2ZjYpLCBDT05TVDY0KDB4MDU0NjBhNDM4YzRjNDY0NiksIAorQ09OU1Q2NCgweDhhYWMwOTI2NDVhNWFjYWMpLCBDT05TVDY0KDB4MWU4OTNjOTcwZmI1ODk4OSksIENPTlNUNjQoMHg1MDE0YTA0NDI4YjQxNDE0KSwgQ09OU1Q2NCgweGEzZTE1YjQyZGZiYWUxZTEpLCAKK0NPTlNUNjQoMHg1ODE2YjA0ZTJjYTYxNjE2KSwgQ09OU1Q2NCgweGU4M2FjZGQyNzRmNzNhM2EpLCBDT05TVDY0KDB4Yjk2OTZmZDBkMjA2Njk2OSksIENPTlNUNjQoMHgyNDA5NDgyZDEyNDEwOTA5KSwgCitDT05TVDY0KDB4ZGQ3MGE3YWRlMGQ3NzA3MCksIENPTlNUNjQoMHhlMmI2ZDk1NDcxNmZiNmI2KSwgQ09OU1Q2NCgweDY3ZDBjZWI3YmQxZWQwZDApLCBDT05TVDY0KDB4OTNlZDNiN2VjN2Q2ZWRlZCksIAorQ09OU1Q2NCgweDE3Y2MyZWRiODVlMmNjY2MpLCBDT05TVDY0KDB4MTU0MjJhNTc4NDY4NDI0MiksIENPTlNUNjQoMHg1YTk4YjRjMjJkMmM5ODk4KSwgQ09OU1Q2NCgweGFhYTQ0OTBlNTVlZGE0YTQpLCAKK0NPTlNUNjQoMHhhMDI4NWQ4ODUwNzUyODI4KSwgQ09OU1Q2NCgweDZkNWNkYTMxYjg4NjVjNWMpLCBDT05TVDY0KDB4YzdmODkzM2ZlZDZiZjhmOCksIENPTlNUNjQoMHgyMjg2NDRhNDExYzI4Njg2KQorfTsKKworc3RhdGljIGNvbnN0IHVsb25nNjQgc2JveDdbXSA9IHsKK0NPTlNUNjQoMHgxODYwMThjMDc4MzBkODE4KSwgQ09OU1Q2NCgweDIzOGMyMzA1YWY0NjI2MjMpLCBDT05TVDY0KDB4YzYzZmM2N2VmOTkxYjhjNiksIENPTlNUNjQoMHhlODg3ZTgxMzZmY2RmYmU4KSwgCitDT05TVDY0KDB4ODcyNjg3NGNhMTEzY2I4NyksIENPTlNUNjQoMHhiOGRhYjhhOTYyNmQxMWI4KSwgQ09OU1Q2NCgweDAxMDQwMTA4MDUwMjA5MDEpLCBDT05TVDY0KDB4NGYyMTRmNDI2ZTllMGQ0ZiksIAorQ09OU1Q2NCgweDM2ZDgzNmFkZWU2YzliMzYpLCBDT05TVDY0KDB4YTZhMmE2NTkwNDUxZmZhNiksIENPTlNUNjQoMHhkMjZmZDJkZWJkYjkwY2QyKSwgQ09OU1Q2NCgweGY1ZjNmNWZiMDZmNzBlZjUpLCAKK0NPTlNUNjQoMHg3OWY5NzllZjgwZjI5Njc5KSwgQ09OU1Q2NCgweDZmYTE2ZjVmY2VkZTMwNmYpLCBDT05TVDY0KDB4OTE3ZTkxZmNlZjNmNmQ5MSksIENPTlNUNjQoMHg1MjU1NTJhYTA3YTRmODUyKSwgCitDT05TVDY0KDB4NjA5ZDYwMjdmZGMwNDc2MCksIENPTlNUNjQoMHhiY2NhYmM4OTc2NjUzNWJjKSwgQ09OU1Q2NCgweDliNTY5YmFjY2QyYjM3OWIpLCBDT05TVDY0KDB4OGUwMjhlMDQ4YzAxOGE4ZSksIAorQ09OU1Q2NCgweGEzYjZhMzcxMTU1YmQyYTMpLCBDT05TVDY0KDB4MGMzMDBjNjAzYzE4NmMwYyksIENPTlNUNjQoMHg3YmYxN2JmZjhhZjY4NDdiKSwgQ09OU1Q2NCgweDM1ZDQzNWI1ZTE2YTgwMzUpLCAKK0NPTlNUNjQoMHgxZDc0MWRlODY5M2FmNTFkKSwgQ09OU1Q2NCgweGUwYTdlMDUzNDdkZGIzZTApLCBDT05TVDY0KDB4ZDc3YmQ3ZjZhY2IzMjFkNyksIENPTlNUNjQoMHhjMjJmYzI1ZWVkOTk5Y2MyKSwgCitDT05TVDY0KDB4MmViODJlNmQ5NjVjNDMyZSksIENPTlNUNjQoMHg0YjMxNGI2MjdhOTYyOTRiKSwgQ09OU1Q2NCgweGZlZGZmZWEzMjFlMTVkZmUpLCBDT05TVDY0KDB4NTc0MTU3ODIxNmFlZDU1NyksIAorQ09OU1Q2NCgweDE1NTQxNWE4NDEyYWJkMTUpLCBDT05TVDY0KDB4NzdjMTc3OWZiNmVlZTg3NyksIENPTlNUNjQoMHgzN2RjMzdhNWViNmU5MjM3KSwgQ09OU1Q2NCgweGU1YjNlNTdiNTZkNzllZTUpLCAKK0NPTlNUNjQoMHg5ZjQ2OWY4Y2Q5MjMxMzlmKSwgQ09OU1Q2NCgweGYwZTdmMGQzMTdmZDIzZjApLCBDT05TVDY0KDB4NGEzNTRhNmE3Zjk0MjA0YSksIENPTlNUNjQoMHhkYTRmZGE5ZTk1YTk0NGRhKSwgCitDT05TVDY0KDB4NTg3ZDU4ZmEyNWIwYTI1OCksIENPTlNUNjQoMHhjOTAzYzkwNmNhOGZjZmM5KSwgQ09OU1Q2NCgweDI5YTQyOTU1OGQ1MjdjMjkpLCBDT05TVDY0KDB4MGEyODBhNTAyMjE0NWEwYSksIAorQ09OU1Q2NCgweGIxZmViMWUxNGY3ZjUwYjEpLCBDT05TVDY0KDB4YTBiYWEwNjkxYTVkYzlhMCksIENPTlNUNjQoMHg2YmIxNmI3ZmRhZDYxNDZiKSwgQ09OU1Q2NCgweDg1MmU4NTVjYWIxN2Q5ODUpLCAKK0NPTlNUNjQoMHhiZGNlYmQ4MTczNjczY2JkKSwgQ09OU1Q2NCgweDVkNjk1ZGQyMzRiYThmNWQpLCBDT05TVDY0KDB4MTA0MDEwODA1MDIwOTAxMCksIENPTlNUNjQoMHhmNGY3ZjRmMzAzZjUwN2Y0KSwgCitDT05TVDY0KDB4Y2IwYmNiMTZjMDhiZGRjYiksIENPTlNUNjQoMHgzZWY4M2VlZGM2N2NkMzNlKSwgQ09OU1Q2NCgweDA1MTQwNTI4MTEwYTJkMDUpLCBDT05TVDY0KDB4Njc4MTY3MWZlNmNlNzg2NyksIAorQ09OU1Q2NCgweGU0YjdlNDczNTNkNTk3ZTQpLCBDT05TVDY0KDB4Mjc5YzI3MjViYjRlMDIyNyksIENPTlNUNjQoMHg0MTE5NDEzMjU4ODI3MzQxKSwgQ09OU1Q2NCgweDhiMTY4YjJjOWQwYmE3OGIpLCAKK0NPTlNUNjQoMHhhN2E2YTc1MTAxNTNmNmE3KSwgQ09OU1Q2NCgweDdkZTk3ZGNmOTRmYWIyN2QpLCBDT05TVDY0KDB4OTU2ZTk1ZGNmYjM3NDk5NSksIENPTlNUNjQoMHhkODQ3ZDg4ZTlmYWQ1NmQ4KSwgCitDT05TVDY0KDB4ZmJjYmZiOGIzMGViNzBmYiksIENPTlNUNjQoMHhlZTlmZWUyMzcxYzFjZGVlKSwgQ09OU1Q2NCgweDdjZWQ3Y2M3OTFmOGJiN2MpLCBDT05TVDY0KDB4NjY4NTY2MTdlM2NjNzE2NiksIAorQ09OU1Q2NCgweGRkNTNkZGE2OGVhNzdiZGQpLCBDT05TVDY0KDB4MTc1YzE3Yjg0YjJlYWYxNyksIENPTlNUNjQoMHg0NzAxNDcwMjQ2OGU0NTQ3KSwgQ09OU1Q2NCgweDllNDI5ZTg0ZGMyMTFhOWUpLCAKK0NPTlNUNjQoMHhjYTBmY2ExZWM1ODlkNGNhKSwgQ09OU1Q2NCgweDJkYjQyZDc1OTk1YTU4MmQpLCBDT05TVDY0KDB4YmZjNmJmOTE3OTYzMmViZiksIENPTlNUNjQoMHgwNzFjMDczODFiMGUzZjA3KSwgCitDT05TVDY0KDB4YWQ4ZWFkMDEyMzQ3YWNhZCksIENPTlNUNjQoMHg1YTc1NWFlYTJmYjRiMDVhKSwgQ09OU1Q2NCgweDgzMzY4MzZjYjUxYmVmODMpLCBDT05TVDY0KDB4MzNjYzMzODVmZjY2YjYzMyksIAorQ09OU1Q2NCgweDYzOTE2MzNmZjJjNjVjNjMpLCBDT05TVDY0KDB4MDIwODAyMTAwYTA0MTIwMiksIENPTlNUNjQoMHhhYTkyYWEzOTM4NDk5M2FhKSwgQ09OU1Q2NCgweDcxZDk3MWFmYThlMmRlNzEpLCAKK0NPTlNUNjQoMHhjODA3YzgwZWNmOGRjNmM4KSwgQ09OU1Q2NCgweDE5NjQxOWM4N2QzMmQxMTkpLCBDT05TVDY0KDB4NDkzOTQ5NzI3MDkyM2I0OSksIENPTlNUNjQoMHhkOTQzZDk4NjlhYWY1ZmQ5KSwgCitDT05TVDY0KDB4ZjJlZmYyYzMxZGY5MzFmMiksIENPTlNUNjQoMHhlM2FiZTM0YjQ4ZGJhOGUzKSwgQ09OU1Q2NCgweDViNzE1YmUyMmFiNmI5NWIpLCBDT05TVDY0KDB4ODgxYTg4MzQ5MjBkYmM4OCksIAorQ09OU1Q2NCgweDlhNTI5YWE0YzgyOTNlOWEpLCBDT05TVDY0KDB4MjY5ODI2MmRiZTRjMGIyNiksIENPTlNUNjQoMHgzMmM4MzI4ZGZhNjRiZjMyKSwgQ09OU1Q2NCgweGIwZmFiMGU5NGE3ZDU5YjApLCAKK0NPTlNUNjQoMHhlOTgzZTkxYjZhY2ZmMmU5KSwgQ09OU1Q2NCgweDBmM2MwZjc4MzMxZTc3MGYpLCBDT05TVDY0KDB4ZDU3M2Q1ZTZhNmI3MzNkNSksIENPTlNUNjQoMHg4MDNhODA3NGJhMWRmNDgwKSwgCitDT05TVDY0KDB4YmVjMmJlOTk3YzYxMjdiZSksIENPTlNUNjQoMHhjZDEzY2QyNmRlODdlYmNkKSwgQ09OU1Q2NCgweDM0ZDAzNGJkZTQ2ODg5MzQpLCBDT05TVDY0KDB4NDgzZDQ4N2E3NTkwMzI0OCksIAorQ09OU1Q2NCgweGZmZGJmZmFiMjRlMzU0ZmYpLCBDT05TVDY0KDB4N2FmNTdhZjc4ZmY0OGQ3YSksIENPTlNUNjQoMHg5MDdhOTBmNGVhM2Q2NDkwKSwgQ09OU1Q2NCgweDVmNjE1ZmMyM2ViZTlkNWYpLCAKK0NPTlNUNjQoMHgyMDgwMjAxZGEwNDAzZDIwKSwgQ09OU1Q2NCgweDY4YmQ2ODY3ZDVkMDBmNjgpLCBDT05TVDY0KDB4MWE2ODFhZDA3MjM0Y2ExYSksIENPTlNUNjQoMHhhZTgyYWUxOTJjNDFiN2FlKSwgCitDT05TVDY0KDB4YjRlYWI0Yzk1ZTc1N2RiNCksIENPTlNUNjQoMHg1NDRkNTQ5YTE5YThjZTU0KSwgQ09OU1Q2NCgweDkzNzY5M2VjZTUzYjdmOTMpLCBDT05TVDY0KDB4MjI4ODIyMGRhYTQ0MmYyMiksIAorQ09OU1Q2NCgweDY0OGQ2NDA3ZTljODYzNjQpLCBDT05TVDY0KDB4ZjFlM2YxZGIxMmZmMmFmMSksIENPTlNUNjQoMHg3M2QxNzNiZmEyZTZjYzczKSwgQ09OU1Q2NCgweDEyNDgxMjkwNWEyNDgyMTIpLCAKK0NPTlNUNjQoMHg0MDFkNDAzYTVkODA3YTQwKSwgQ09OU1Q2NCgweDA4MjAwODQwMjgxMDQ4MDgpLCBDT05TVDY0KDB4YzMyYmMzNTZlODliOTVjMyksIENPTlNUNjQoMHhlYzk3ZWMzMzdiYzVkZmVjKSwgCitDT05TVDY0KDB4ZGI0YmRiOTY5MGFiNGRkYiksIENPTlNUNjQoMHhhMWJlYTE2MTFmNWZjMGExKSwgQ09OU1Q2NCgweDhkMGU4ZDFjODMwNzkxOGQpLCBDT05TVDY0KDB4M2RmNDNkZjVjOTdhYzgzZCksIAorQ09OU1Q2NCgweDk3NjY5N2NjZjEzMzViOTcpLCBDT05TVDY0KDB4MDAwMDAwMDAwMDAwMDAwMCksIENPTlNUNjQoMHhjZjFiY2YzNmQ0ODNmOWNmKSwgQ09OU1Q2NCgweDJiYWMyYjQ1ODc1NjZlMmIpLCAKK0NPTlNUNjQoMHg3NmM1NzY5N2IzZWNlMTc2KSwgQ09OU1Q2NCgweDgyMzI4MjY0YjAxOWU2ODIpLCBDT05TVDY0KDB4ZDY3ZmQ2ZmVhOWIxMjhkNiksIENPTlNUNjQoMHgxYjZjMWJkODc3MzZjMzFiKSwgCitDT05TVDY0KDB4YjVlZWI1YzE1Yjc3NzRiNSksIENPTlNUNjQoMHhhZjg2YWYxMTI5NDNiZWFmKSwgQ09OU1Q2NCgweDZhYjU2YTc3ZGZkNDFkNmEpLCBDT05TVDY0KDB4NTA1ZDUwYmEwZGEwZWE1MCksIAorQ09OU1Q2NCgweDQ1MDk0NTEyNGM4YTU3NDUpLCBDT05TVDY0KDB4ZjNlYmYzY2IxOGZiMzhmMyksIENPTlNUNjQoMHgzMGMwMzA5ZGYwNjBhZDMwKSwgQ09OU1Q2NCgweGVmOWJlZjJiNzRjM2M0ZWYpLCAKK0NPTlNUNjQoMHgzZmZjM2ZlNWMzN2VkYTNmKSwgQ09OU1Q2NCgweDU1NDk1NTkyMWNhYWM3NTUpLCBDT05TVDY0KDB4YTJiMmEyNzkxMDU5ZGJhMiksIENPTlNUNjQoMHhlYThmZWEwMzY1YzllOWVhKSwgCitDT05TVDY0KDB4NjU4OTY1MGZlY2NhNmE2NSksIENPTlNUNjQoMHhiYWQyYmFiOTY4NjkwM2JhKSwgQ09OU1Q2NCgweDJmYmMyZjY1OTM1ZTRhMmYpLCBDT05TVDY0KDB4YzAyN2MwNGVlNzlkOGVjMCksIAorQ09OU1Q2NCgweGRlNWZkZWJlODFhMTYwZGUpLCBDT05TVDY0KDB4MWM3MDFjZTA2YzM4ZmMxYyksIENPTlNUNjQoMHhmZGQzZmRiYjJlZTc0NmZkKSwgQ09OU1Q2NCgweDRkMjk0ZDUyNjQ5YTFmNGQpLCAKK0NPTlNUNjQoMHg5MjcyOTJlNGUwMzk3NjkyKSwgQ09OU1Q2NCgweDc1Yzk3NThmYmNlYWZhNzUpLCBDT05TVDY0KDB4MDYxODA2MzAxZTBjMzYwNiksIENPTlNUNjQoMHg4YTEyOGEyNDk4MDlhZThhKSwgCitDT05TVDY0KDB4YjJmMmIyZjk0MDc5NGJiMiksIENPTlNUNjQoMHhlNmJmZTY2MzU5ZDE4NWU2KSwgQ09OU1Q2NCgweDBlMzgwZTcwMzYxYzdlMGUpLCBDT05TVDY0KDB4MWY3YzFmZjg2MzNlZTcxZiksIAorQ09OU1Q2NCgweDYyOTU2MjM3ZjdjNDU1NjIpLCBDT05TVDY0KDB4ZDQ3N2Q0ZWVhM2I1M2FkNCksIENPTlNUNjQoMHhhODlhYTgyOTMyNGQ4MWE4KSwgQ09OU1Q2NCgweDk2NjI5NmM0ZjQzMTUyOTYpLCAKK0NPTlNUNjQoMHhmOWMzZjk5YjNhZWY2MmY5KSwgQ09OU1Q2NCgweGM1MzNjNTY2ZjY5N2EzYzUpLCBDT05TVDY0KDB4MjU5NDI1MzViMTRhMTAyNSksIENPTlNUNjQoMHg1OTc5NTlmMjIwYjJhYjU5KSwgCitDT05TVDY0KDB4ODQyYTg0NTRhZTE1ZDA4NCksIENPTlNUNjQoMHg3MmQ1NzJiN2E3ZTRjNTcyKSwgQ09OU1Q2NCgweDM5ZTQzOWQ1ZGQ3MmVjMzkpLCBDT05TVDY0KDB4NGMyZDRjNWE2MTk4MTY0YyksIAorQ09OU1Q2NCgweDVlNjU1ZWNhM2JiYzk0NWUpLCBDT05TVDY0KDB4NzhmZDc4ZTc4NWYwOWY3OCksIENPTlNUNjQoMHgzOGUwMzhkZGQ4NzBlNTM4KSwgQ09OU1Q2NCgweDhjMGE4YzE0ODYwNTk4OGMpLCAKK0NPTlNUNjQoMHhkMTYzZDFjNmIyYmYxN2QxKSwgQ09OU1Q2NCgweGE1YWVhNTQxMGI1N2U0YTUpLCBDT05TVDY0KDB4ZTJhZmUyNDM0ZGQ5YTFlMiksIENPTlNUNjQoMHg2MTk5NjEyZmY4YzI0ZTYxKSwgCitDT05TVDY0KDB4YjNmNmIzZjE0NTdiNDJiMyksIENPTlNUNjQoMHgyMTg0MjExNWE1NDIzNDIxKSwgQ09OU1Q2NCgweDljNGE5Yzk0ZDYyNTA4OWMpLCBDT05TVDY0KDB4MWU3ODFlZjA2NjNjZWUxZSksIAorQ09OU1Q2NCgweDQzMTE0MzIyNTI4NjYxNDMpLCBDT05TVDY0KDB4YzczYmM3NzZmYzkzYjFjNyksIENPTlNUNjQoMHhmY2Q3ZmNiMzJiZTU0ZmZjKSwgQ09OU1Q2NCgweDA0MTAwNDIwMTQwODI0MDQpLCAKK0NPTlNUNjQoMHg1MTU5NTFiMjA4YTJlMzUxKSwgQ09OU1Q2NCgweDk5NWU5OWJjYzcyZjI1OTkpLCBDT05TVDY0KDB4NmRhOTZkNGZjNGRhMjI2ZCksIENPTlNUNjQoMHgwZDM0MGQ2ODM5MWE2NTBkKSwgCitDT05TVDY0KDB4ZmFjZmZhODMzNWU5NzlmYSksIENPTlNUNjQoMHhkZjViZGZiNjg0YTM2OWRmKSwgQ09OU1Q2NCgweDdlZTU3ZWQ3OWJmY2E5N2UpLCBDT05TVDY0KDB4MjQ5MDI0M2RiNDQ4MTkyNCksIAorQ09OU1Q2NCgweDNiZWMzYmM1ZDc3NmZlM2IpLCBDT05TVDY0KDB4YWI5NmFiMzEzZDRiOWFhYiksIENPTlNUNjQoMHhjZTFmY2UzZWQxODFmMGNlKSwgQ09OU1Q2NCgweDExNDQxMTg4NTUyMjk5MTEpLCAKK0NPTlNUNjQoMHg4ZjA2OGYwYzg5MDM4MzhmKSwgQ09OU1Q2NCgweDRlMjU0ZTRhNmI5YzA0NGUpLCBDT05TVDY0KDB4YjdlNmI3ZDE1MTczNjZiNyksIENPTlNUNjQoMHhlYjhiZWIwYjYwY2JlMGViKSwgCitDT05TVDY0KDB4M2NmMDNjZmRjYzc4YzEzYyksIENPTlNUNjQoMHg4MTNlODE3Y2JmMWZmZDgxKSwgQ09OU1Q2NCgweDk0NmE5NGQ0ZmUzNTQwOTQpLCBDT05TVDY0KDB4ZjdmYmY3ZWIwY2YzMWNmNyksIAorQ09OU1Q2NCgweGI5ZGViOWExNjc2ZjE4YjkpLCBDT05TVDY0KDB4MTM0YzEzOTg1ZjI2OGIxMyksIENPTlNUNjQoMHgyY2IwMmM3ZDljNTg1MTJjKSwgQ09OU1Q2NCgweGQzNmJkM2Q2YjhiYjA1ZDMpLCAKK0NPTlNUNjQoMHhlN2JiZTc2YjVjZDM4Y2U3KSwgQ09OU1Q2NCgweDZlYTU2ZTU3Y2JkYzM5NmUpLCBDT05TVDY0KDB4YzQzN2M0NmVmMzk1YWFjNCksIENPTlNUNjQoMHgwMzBjMDMxODBmMDYxYjAzKSwgCitDT05TVDY0KDB4NTY0NTU2OGExM2FjZGM1NiksIENPTlNUNjQoMHg0NDBkNDQxYTQ5ODg1ZTQ0KSwgQ09OU1Q2NCgweDdmZTE3ZmRmOWVmZWEwN2YpLCBDT05TVDY0KDB4YTk5ZWE5MjEzNzRmODhhOSksIAorQ09OU1Q2NCgweDJhYTgyYTRkODI1NDY3MmEpLCBDT05TVDY0KDB4YmJkNmJiYjE2ZDZiMGFiYiksIENPTlNUNjQoMHhjMTIzYzE0NmUyOWY4N2MxKSwgQ09OU1Q2NCgweDUzNTE1M2EyMDJhNmYxNTMpLCAKK0NPTlNUNjQoMHhkYzU3ZGNhZThiYTU3MmRjKSwgQ09OU1Q2NCgweDBiMmMwYjU4MjcxNjUzMGIpLCBDT05TVDY0KDB4OWQ0ZTlkOWNkMzI3MDE5ZCksIENPTlNUNjQoMHg2Y2FkNmM0N2MxZDgyYjZjKSwgCitDT05TVDY0KDB4MzFjNDMxOTVmNTYyYTQzMSksIENPTlNUNjQoMHg3NGNkNzQ4N2I5ZThmMzc0KSwgQ09OU1Q2NCgweGY2ZmZmNmUzMDlmMTE1ZjYpLCBDT05TVDY0KDB4NDYwNTQ2MGE0MzhjNGM0NiksIAorQ09OU1Q2NCgweGFjOGFhYzA5MjY0NWE1YWMpLCBDT05TVDY0KDB4ODkxZTg5M2M5NzBmYjU4OSksIENPTlNUNjQoMHgxNDUwMTRhMDQ0MjhiNDE0KSwgQ09OU1Q2NCgweGUxYTNlMTViNDJkZmJhZTEpLCAKK0NPTlNUNjQoMHgxNjU4MTZiMDRlMmNhNjE2KSwgQ09OU1Q2NCgweDNhZTgzYWNkZDI3NGY3M2EpLCBDT05TVDY0KDB4NjliOTY5NmZkMGQyMDY2OSksIENPTlNUNjQoMHgwOTI0MDk0ODJkMTI0MTA5KSwgCitDT05TVDY0KDB4NzBkZDcwYTdhZGUwZDc3MCksIENPTlNUNjQoMHhiNmUyYjZkOTU0NzE2ZmI2KSwgQ09OU1Q2NCgweGQwNjdkMGNlYjdiZDFlZDApLCBDT05TVDY0KDB4ZWQ5M2VkM2I3ZWM3ZDZlZCksIAorQ09OU1Q2NCgweGNjMTdjYzJlZGI4NWUyY2MpLCBDT05TVDY0KDB4NDIxNTQyMmE1Nzg0Njg0MiksIENPTlNUNjQoMHg5ODVhOThiNGMyMmQyYzk4KSwgQ09OU1Q2NCgweGE0YWFhNDQ5MGU1NWVkYTQpLCAKK0NPTlNUNjQoMHgyOGEwMjg1ZDg4NTA3NTI4KSwgQ09OU1Q2NCgweDVjNmQ1Y2RhMzFiODg2NWMpLCBDT05TVDY0KDB4ZjhjN2Y4OTMzZmVkNmJmOCksIENPTlNUNjQoMHg4NjIyODY0NGE0MTFjMjg2KQorfTsKKworI2VuZGlmCisKK3N0YXRpYyBjb25zdCB1bG9uZzY0IGNvbnRbXSA9IHsKK0NPTlNUNjQoMHgxODIzYzZlODg3YjgwMTRmKSwKK0NPTlNUNjQoMHgzNmE2ZDJmNTc5NmY5MTUyKSwKK0NPTlNUNjQoMHg2MGJjOWI4ZWEzMGM3YjM1KSwKK0NPTlNUNjQoMHgxZGUwZDdjMjJlNGJmZTU3KSwKK0NPTlNUNjQoMHgxNTc3MzdlNTlmZjA0YWRhKSwKK0NPTlNUNjQoMHg1OGM5MjkwYWIxYTA2Yjg1KSwKK0NPTlNUNjQoMHhiZDVkMTBmNGNiM2UwNTY3KSwKK0NPTlNUNjQoMHhlNDI3NDE4YmE3N2Q5NWQ4KSwKK0NPTlNUNjQoMHhmYmVlN2M2NmRkMTc0NzllKSwKK0NPTlNUNjQoMHhjYTJkYmYwN2FkNWE4MzMzKSwKK0NPTlNUNjQoMHg2MzAyYWE3MWM4MTk0OWQ5KSwKK307CisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hhc2hlcy93aGlybC93aGlybHRhYi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIgJCAqLworLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTggJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHQuaCBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVjY2QwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0LmgKQEAgLTAsMCArMSw4OCBAQAorI2lmbmRlZiBUT01DUllQVF9IXworI2RlZmluZSBUT01DUllQVF9IXworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKy8qIHVzZSBjb25maWd1cmF0aW9uIGRhdGEgKi8KKyNpbmNsdWRlIDx0b21jcnlwdF9jdXN0b20uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiB2ZXJzaW9uICovCisjZGVmaW5lIENSWVBUICAgMHgwMTE2CisjZGVmaW5lIFNDUllQVCAgIjEuMTYiCisKKy8qIG1heCBzaXplIG9mIGVpdGhlciBhIGNpcGhlci9oYXNoIGJsb2NrIG9yIHN5bW1ldHJpYyBrZXkgW2xhcmdlc3Qgb2YgdGhlIHR3b10gKi8KKyNkZWZpbmUgTUFYQkxPQ0tTSVpFICAxMjgKKworLyogZGVzY3JpcHRvciB0YWJsZSBzaXplICovCisvKiBEcm9wYmVhciBjaGFuZ2UgLSB0aGlzIHNob3VsZCBiZSBzbWFsbGVyLCBzYXZlcyBzb21lIHNpemUgKi8KKyNkZWZpbmUgVEFCX1NJWkUgICAgNAorCisvKiBlcnJvciBjb2RlcyBbd2lsbCBiZSBleHBhbmRlZCBpbiBmdXR1cmUgcmVsZWFzZXNdICovCitlbnVtIHsKKyAgIENSWVBUX09LPTAsICAgICAgICAgICAgIC8qIFJlc3VsdCBPSyAqLworICAgQ1JZUFRfRVJST1IsICAgICAgICAgICAgLyogR2VuZXJpYyBFcnJvciAqLworICAgQ1JZUFRfTk9QLCAgICAgICAgICAgICAgLyogTm90IGEgZmFpbHVyZSBidXQgbm8gb3BlcmF0aW9uIHdhcyBwZXJmb3JtZWQgKi8KKworICAgQ1JZUFRfSU5WQUxJRF9LRVlTSVpFLCAgLyogSW52YWxpZCBrZXkgc2l6ZSBnaXZlbiAqLworICAgQ1JZUFRfSU5WQUxJRF9ST1VORFMsICAgLyogSW52YWxpZCBudW1iZXIgb2Ygcm91bmRzICovCisgICBDUllQVF9GQUlMX1RFU1RWRUNUT1IsICAvKiBBbGdvcml0aG0gZmFpbGVkIHRlc3QgdmVjdG9ycyAqLworCisgICBDUllQVF9CVUZGRVJfT1ZFUkZMT1csICAvKiBOb3QgZW5vdWdoIHNwYWNlIGZvciBvdXRwdXQgKi8KKyAgIENSWVBUX0lOVkFMSURfUEFDS0VULCAgIC8qIEludmFsaWQgaW5wdXQgcGFja2V0IGdpdmVuICovCisKKyAgIENSWVBUX0lOVkFMSURfUFJOR1NJWkUsIC8qIEludmFsaWQgbnVtYmVyIG9mIGJpdHMgZm9yIGEgUFJORyAqLworICAgQ1JZUFRfRVJST1JfUkVBRFBSTkcsICAgLyogQ291bGQgbm90IHJlYWQgZW5vdWdoIGZyb20gUFJORyAqLworCisgICBDUllQVF9JTlZBTElEX0NJUEhFUiwgICAvKiBJbnZhbGlkIGNpcGhlciBzcGVjaWZpZWQgKi8KKyAgIENSWVBUX0lOVkFMSURfSEFTSCwgICAgIC8qIEludmFsaWQgaGFzaCBzcGVjaWZpZWQgKi8KKyAgIENSWVBUX0lOVkFMSURfUFJORywgICAgIC8qIEludmFsaWQgUFJORyBzcGVjaWZpZWQgKi8KKworICAgQ1JZUFRfTUVNLCAgICAgICAgICAgICAgLyogT3V0IG9mIG1lbW9yeSAqLworCisgICBDUllQVF9QS19UWVBFX01JU01BVENILCAvKiBOb3QgZXF1aXZhbGVudCB0eXBlcyBvZiBQSyBrZXlzICovCisgICBDUllQVF9QS19OT1RfUFJJVkFURSwgICAvKiBSZXF1aXJlcyBhIHByaXZhdGUgUEsga2V5ICovCisKKyAgIENSWVBUX0lOVkFMSURfQVJHLCAgICAgIC8qIEdlbmVyaWMgaW52YWxpZCBhcmd1bWVudCAqLworICAgQ1JZUFRfRklMRV9OT1RGT1VORCwgICAgLyogRmlsZSBOb3QgRm91bmQgKi8KKworICAgQ1JZUFRfUEtfSU5WQUxJRF9UWVBFLCAgLyogSW52YWxpZCB0eXBlIG9mIFBLIGtleSAqLworICAgQ1JZUFRfUEtfSU5WQUxJRF9TWVNURU0sLyogSW52YWxpZCBQSyBzeXN0ZW0gc3BlY2lmaWVkICovCisgICBDUllQVF9QS19EVVAsICAgICAgICAgICAvKiBEdXBsaWNhdGUga2V5IGFscmVhZHkgaW4ga2V5IHJpbmcgKi8KKyAgIENSWVBUX1BLX05PVF9GT1VORCwgICAgIC8qIEtleSBub3QgZm91bmQgaW4ga2V5cmluZyAqLworICAgQ1JZUFRfUEtfSU5WQUxJRF9TSVpFLCAgLyogSW52YWxpZCBzaXplIGlucHV0IGZvciBQSyBwYXJhbWV0ZXJzICovCisKKyAgIENSWVBUX0lOVkFMSURfUFJJTUVfU0laRSwvKiBJbnZhbGlkIHNpemUgb2YgcHJpbWUgcmVxdWVzdGVkICovCisgICBDUllQVF9QS19JTlZBTElEX1BBRERJTkcgLyogSW52YWxpZCBwYWRkaW5nIG9uIGlucHV0ICovCit9OworCisjaW5jbHVkZSA8dG9tY3J5cHRfY2ZnLmg+CisjaW5jbHVkZSA8dG9tY3J5cHRfbWFjcm9zLmg+CisjaW5jbHVkZSA8dG9tY3J5cHRfY2lwaGVyLmg+CisjaW5jbHVkZSA8dG9tY3J5cHRfaGFzaC5oPgorI2luY2x1ZGUgPHRvbWNyeXB0X21hYy5oPgorI2luY2x1ZGUgPHRvbWNyeXB0X3BybmcuaD4KKyNpbmNsdWRlIDx0b21jcnlwdF9way5oPgorI2luY2x1ZGUgPHRvbWNyeXB0X21hdGguaD4KKyNpbmNsdWRlIDx0b21jcnlwdF9taXNjLmg+CisjaW5jbHVkZSA8dG9tY3J5cHRfYXJnY2hrLmg+CisjaW5jbHVkZSA8dG9tY3J5cHRfcGtjcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgIH0KKyNlbmRpZgorCisjZW5kaWYgLyogVE9NQ1JZUFRfSF8gKi8KKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdC5oLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIwICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI2IDAxOjQ1OjE0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2FyZ2Noay5oIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfYXJnY2hrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZjOTNhZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2FyZ2Noay5oCkBAIC0wLDAgKzEsMzggQEAKKy8qIERlZmluZXMgdGhlIExUQ19BUkdDSEsgbWFjcm8gdXNlZCB3aXRoaW4gdGhlIGxpYnJhcnkgKi8KKy8qIEFSR1RZUEUgaXMgZGVmaW5lZCBpbiBteWNyeXB0X2NmZy5oICovCisjaWYgQVJHVFlQRSA9PSAwCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworLyogdGhpcyBpcyB0aGUgZGVmYXVsdCBMaWJUb21DcnlwdCBtYWNybyAgKi8KK3ZvaWQgY3J5cHRfYXJnY2hrKGNoYXIgKnYsIGNoYXIgKnMsIGludCBkKTsKKyNkZWZpbmUgTFRDX0FSR0NISyh4KSBpZiAoISh4KSkgeyBjcnlwdF9hcmdjaGsoI3gsIF9fRklMRV9fLCBfX0xJTkVfXyk7IH0KKyNkZWZpbmUgTFRDX0FSR0NIS1ZEKHgpIExUQ19BUkdDSEsoeCkKKworI2VsaWYgQVJHVFlQRSA9PSAxCisKKy8qIGZhdGFsIHR5cGUgb2YgZXJyb3IgKi8KKyNkZWZpbmUgTFRDX0FSR0NISyh4KSBhc3NlcnQoKHgpKQorI2RlZmluZSBMVENfQVJHQ0hLVkQoeCkgTFRDX0FSR0NISyh4KQorCisjZWxpZiBBUkdUWVBFID09IDIKKworI2RlZmluZSBMVENfQVJHQ0hLKHgpIGlmICghKHgpKSB7IGZwcmludGYoc3RkZXJyLCAiXG53YXJuaW5nOiBBUkdDSEsgZmFpbGVkIGF0ICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOyB9CisjZGVmaW5lIExUQ19BUkdDSEtWRCh4KSBMVENfQVJHQ0hLKHgpCisKKyNlbGlmIEFSR1RZUEUgPT0gMworCisjZGVmaW5lIExUQ19BUkdDSEsoeCkgCisjZGVmaW5lIExUQ19BUkdDSEtWRCh4KSBMVENfQVJHQ0hLKHgpCisKKyNlbGlmIEFSR1RZUEUgPT0gNAorCisjZGVmaW5lIExUQ19BUkdDSEsoeCkgICBpZiAoISh4KSkgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworI2RlZmluZSBMVENfQVJHQ0hLVkQoeCkgaWYgKCEoeCkpIHJldHVybjsKKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfYXJnY2hrLmgsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wOC8yNyAyMDo1MDoyMSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaCBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NmZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZWFlNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9jZmcuaApAQCAtMCwwICsxLDEzNiBAQAorLyogVGhpcyBpcyB0aGUgYnVpbGQgY29uZmlnIGZpbGUuCisgKgorICogV2l0aCB0aGlzIHlvdSBjYW4gc2V0dXAgd2hhdCB0byBpbmxjdWRlL2V4Y2x1ZGUgYXV0b21hdGljYWxseSBkdXJpbmcgYW55IGJ1aWxkLiAgSnVzdCBjb21tZW50CisgKiBvdXQgdGhlIGxpbmUgdGhhdCAjZGVmaW5lJ3MgdGhlIHdvcmQgZm9yIHRoZSB0aGluZyB5b3Ugd2FudCB0byByZW1vdmUuICBwaGV3IQorICovCisKKyNpZm5kZWYgVE9NQ1JZUFRfQ0ZHX0gKKyNkZWZpbmUgVE9NQ1JZUFRfQ0ZHX0gKKworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9NU0NfVkVSKQorI2RlZmluZSBMVENfQ0FMTCBfX2NkZWNsCisjZWxzZQorI2lmbmRlZiBMVENfQ0FMTAorICAgI2RlZmluZSBMVENfQ0FMTAorI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBMVENfRVhQT1JUCisjZGVmaW5lIExUQ19FWFBPUlQKKyNlbmRpZgorCisvKiBjZXJ0YWluIHBsYXRmb3JtcyB1c2UgbWFjcm9zIGZvciB0aGVzZSwgbWFraW5nIHRoZSBwcm90b3R5cGVzIGJyb2tlbiAqLworI2lmbmRlZiBMVENfTk9fUFJPVE9UWVBFUworCisvKiB5b3UgY2FuIGNoYW5nZSBob3cgbWVtb3J5IGFsbG9jYXRpb24gd29ya3MgLi4uICovCitMVENfRVhQT1JUIHZvaWQgKiBMVENfQ0FMTCBYTUFMTE9DKHNpemVfdCBuKTsKK0xUQ19FWFBPUlQgdm9pZCAqIExUQ19DQUxMIFhSRUFMTE9DKHZvaWQgKnAsIHNpemVfdCBuKTsKK0xUQ19FWFBPUlQgdm9pZCAqIExUQ19DQUxMIFhDQUxMT0Moc2l6ZV90IG4sIHNpemVfdCBzKTsKK0xUQ19FWFBPUlQgdm9pZCBMVENfQ0FMTCBYRlJFRSh2b2lkICpwKTsKKworTFRDX0VYUE9SVCB2b2lkIExUQ19DQUxMIFhRU09SVCh2b2lkICpiYXNlLCBzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplLCBpbnQoKmNvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKKworCisvKiBjaGFuZ2UgdGhlIGNsb2NrIGZ1bmN0aW9uIHRvbyAqLworTFRDX0VYUE9SVCBjbG9ja190IExUQ19DQUxMIFhDTE9DSyh2b2lkKTsKKworLyogdmFyaW91cyBvdGhlciBmdW5jdGlvbnMgKi8KK0xUQ19FWFBPUlQgdm9pZCAqIExUQ19DQUxMIFhNRU1DUFkodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3Qgbik7CitMVENfRVhQT1JUIGludCAgIExUQ19DQUxMIFhNRU1DTVAoY29uc3Qgdm9pZCAqczEsIGNvbnN0IHZvaWQgKnMyLCBzaXplX3Qgbik7CitMVENfRVhQT1JUIHZvaWQgKiBMVENfQ0FMTCBYTUVNU0VUKHZvaWQgKnMsIGludCBjLCBzaXplX3Qgbik7CisKK0xUQ19FWFBPUlQgaW50ICAgTFRDX0NBTEwgWFNUUkNNUChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpOworCisjZW5kaWYKKworLyogdHlwZSBvZiBhcmd1bWVudCBjaGVja2luZywgMD1kZWZhdWx0LCAxPWZhdGFsIGFuZCAyPWVycm9yK2NvbnRpbnVlLCAzPW5vdGhpbmcgKi8KKyNpZm5kZWYgQVJHVFlQRQorICAgI2RlZmluZSBBUkdUWVBFICAwCisjZW5kaWYKKworLyogQ29udHJvbHMgZW5kaWFuZXNzIGFuZCBzaXplIG9mIHJlZ2lzdGVycy4gIExlYXZlIHVuY29tbWVudGVkIHRvIGdldCBwbGF0Zm9ybSBuZXV0cmFsIFtzbG93ZXJdIGNvZGUgCisgKiAKKyAqIE5vdGU6IGluIG9yZGVyIHRvIHVzZSB0aGUgb3B0aW1pemVkIG1hY3JvcyB5b3VyIHBsYXRmb3JtIG11c3Qgc3VwcG9ydCB1bmFsaWduZWQgMzIgYW5kIDY0IGJpdCByZWFkL3dyaXRlcy4KKyAqIFRoZSB4ODYgcGxhdGZvcm1zIGFsbG93IHRoaXMgYnV0IHNvbWUgb3RoZXJzIFtBUk0gZm9yIGluc3RhbmNlXSBkbyBub3QuICBPbiB0aG9zZSBwbGF0Zm9ybXMgeW91ICoqTVVTVCoqCisgKiB1c2UgdGhlIHBvcnRhYmxlIFtzbG93ZXJdIG1hY3Jvcy4KKyAqLworCisvKiBkZXRlY3QgeDg2LTMyIG1hY2hpbmVzIHNvbWV3aGF0ICovCisjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSAmJiAoZGVmaW5lZChJTlRFTF9DQykgfHwgKGRlZmluZWQoX01TQ19WRVIpICYmIGRlZmluZWQoV0lOMzIpKSB8fCAoZGVmaW5lZChfX0dOVUNfXykgJiYgKGRlZmluZWQoX19ESkdQUF9fKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19NSU5HVzMyX18pIHx8IGRlZmluZWQoX19pMzg2X18pKSkpCisgICAjZGVmaW5lIEVORElBTl9MSVRUTEUKKyAgICNkZWZpbmUgRU5ESUFOXzMyQklUV09SRAorICAgI2RlZmluZSBMVENfRkFTVAorICAgI2RlZmluZSBMVENfRkFTVF9UWVBFICAgIHVuc2lnbmVkIGxvbmcKKyNlbmRpZgorCisvKiBkZXRlY3RzIE1JUFMgUjU5MDAgcHJvY2Vzc29ycyAoUFMyKSAqLworI2lmIChkZWZpbmVkKF9fUjU5MDApIHx8IGRlZmluZWQoUjU5MDApIHx8IGRlZmluZWQoX19SNTkwMF9fKSkgJiYgKGRlZmluZWQoX21pcHMpIHx8IGRlZmluZWQoX19taXBzX18pIHx8IGRlZmluZWQobWlwcykpCisgICAjZGVmaW5lIEVORElBTl9MSVRUTEUKKyAgICNkZWZpbmUgRU5ESUFOXzY0QklUV09SRAorI2VuZGlmCisKKy8qIGRldGVjdCBhbWQ2NCAqLworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgJiYgZGVmaW5lZChfX3g4Nl82NF9fKQorICAgI2RlZmluZSBFTkRJQU5fTElUVExFCisgICAjZGVmaW5lIEVORElBTl82NEJJVFdPUkQKKyAgICNkZWZpbmUgTFRDX0ZBU1QKKyAgICNkZWZpbmUgTFRDX0ZBU1RfVFlQRSAgICB1bnNpZ25lZCBsb25nCisjZW5kaWYKKworLyogZGV0ZWN0IFBQQzMyICovCisjaWYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSAmJiBkZWZpbmVkKExUQ19QUEMzMikKKyAgICNkZWZpbmUgRU5ESUFOX0JJRworICAgI2RlZmluZSBFTkRJQU5fMzJCSVRXT1JECisgICAjZGVmaW5lIExUQ19GQVNUCisgICAjZGVmaW5lIExUQ19GQVNUX1RZUEUgICAgdW5zaWduZWQgbG9uZworI2VuZGlmICAgCisKKy8qIGRldGVjdCBzcGFyYyBhbmQgc3BhcmM2NCAqLworI2lmIGRlZmluZWQoX19zcGFyY19fKQorICAjZGVmaW5lIEVORElBTl9CSUcKKyAgI2lmIGRlZmluZWQoX19hcmNoNjRfXykKKyAgICAjZGVmaW5lIEVORElBTl82NEJJVFdPUkQKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIEVORElBTl8zMkJJVFdPUkQKKyAgI2VuZGlmCisjZW5kaWYKKworCisjaWZkZWYgTFRDX05PX0ZBU1QKKyAgICNpZmRlZiBMVENfRkFTVAorICAgICAgI3VuZGVmIExUQ19GQVNUCisgICAjZW5kaWYKKyNlbmRpZgorCisvKiBObyBhc20gaXMgYSBxdWljayB3YXkgdG8gZGlzYWJsZSBhbnl0aGluZyAibm90IHBvcnRhYmxlIiAqLworI2lmZGVmIExUQ19OT19BU00KKyAgICN1bmRlZiBFTkRJQU5fTElUVExFCisgICAjdW5kZWYgRU5ESUFOX0JJRworICAgI3VuZGVmIEVORElBTl8zMkJJVFdPUkQKKyAgICN1bmRlZiBFTkRJQU5fNjRCSVRXT1JECisgICAjdW5kZWYgTFRDX0ZBU1QKKyAgICN1bmRlZiBMVENfRkFTVF9UWVBFCisgICAjZGVmaW5lIExUQ19OT19ST0xDCisJI2RlZmluZSBMVENfTk9fQlNXQVAKKyNlbmRpZgorCisvKiAjZGVmaW5lIEVORElBTl9MSVRUTEUgKi8KKy8qICNkZWZpbmUgRU5ESUFOX0JJRyAqLworCisvKiAjZGVmaW5lIEVORElBTl8zMkJJVFdPUkQgKi8KKy8qICNkZWZpbmUgRU5ESUFOXzY0QklUV09SRCAqLworCisjaWYgKGRlZmluZWQoRU5ESUFOX0JJRykgfHwgZGVmaW5lZChFTkRJQU5fTElUVExFKSkgJiYgIShkZWZpbmVkKEVORElBTl8zMkJJVFdPUkQpIHx8IGRlZmluZWQoRU5ESUFOXzY0QklUV09SRCkpCisgICAgI2Vycm9yIFlvdSBtdXN0IHNwZWNpZnkgYSB3b3JkIHNpemUgYXMgd2VsbCBhcyBlbmRpYW5lc3MgaW4gdG9tY3J5cHRfY2ZnLmgKKyNlbmRpZgorCisjaWYgIShkZWZpbmVkKEVORElBTl9CSUcpIHx8IGRlZmluZWQoRU5ESUFOX0xJVFRMRSkpCisgICAjZGVmaW5lIEVORElBTl9ORVVUUkFMCisjZW5kaWYKKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY2ZnLmgsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTkgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDI6MTk6NDggJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY2lwaGVyLmggYi9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9jaXBoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmEyNmM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY2lwaGVyLmgKQEAgLTAsMCArMSw4MzkgQEAKKy8qIC0tLS0gU1lNTUVUUklDIEtFWSBTVFVGRiAtLS0tLQorICoKKyAqIFdlIHB1dCBlYWNoIG9mIHRoZSBjaXBoZXJzIHNjaGVkdWxlZCBrZXlzIGluIHRoZWlyIG93biBzdHJ1Y3RzIHRoZW4gd2UgcHV0IGFsbCBvZiAKKyAqIHRoZSBrZXkgZm9ybWF0cyBpbiBvbmUgdW5pb24uICBUaGlzIG1ha2VzIHRoZSBmdW5jdGlvbiBwcm90b3R5cGVzIGVhc2llciB0byB1c2UuCisgKi8KKyNpZmRlZiBCTE9XRklTSAorc3RydWN0IGJsb3dmaXNoX2tleSB7CisgICB1bG9uZzMyIFNbNF1bMjU2XTsKKyAgIHVsb25nMzIgS1sxOF07Cit9OworI2VuZGlmCisKKyNpZmRlZiBSQzUKK3N0cnVjdCByYzVfa2V5IHsKKyAgIGludCByb3VuZHM7CisgICB1bG9uZzMyIEtbNTBdOworfTsKKyNlbmRpZgorCisjaWZkZWYgUkM2CitzdHJ1Y3QgcmM2X2tleSB7CisgICB1bG9uZzMyIEtbNDRdOworfTsKKyNlbmRpZgorCisjaWZkZWYgU0FGRVJQCitzdHJ1Y3Qgc2FmZXJwX2tleSB7CisgICB1bnNpZ25lZCBjaGFyIEtbMzNdWzE2XTsKKyAgIGxvbmcgcm91bmRzOworfTsKKyNlbmRpZgorCisjaWZkZWYgUklKTkRBRUwKK3N0cnVjdCByaWpuZGFlbF9rZXkgeworICAgdWxvbmczMiBlS1s2MF0sIGRLWzYwXTsKKyAgIGludCBOcjsKK307CisjZW5kaWYKKworI2lmZGVmIEtTRUVECitzdHJ1Y3Qga3NlZWRfa2V5IHsKKyAgICB1bG9uZzMyIEtbMzJdLCBkS1szMl07Cit9OworI2VuZGlmCisKKyNpZmRlZiBMVENfS0FTVU1JCitzdHJ1Y3Qga2FzdW1pX2tleSB7CisgICAgdWxvbmczMiBLTGkxWzhdLCBLTGkyWzhdLAorICAgICAgICAgICAgS09pMVs4XSwgS09pMls4XSwgS09pM1s4XSwKKyAgICAgICAgICAgIEtJaTFbOF0sIEtJaTJbOF0sIEtJaTNbOF07Cit9OworI2VuZGlmCisKKyNpZmRlZiBYVEVBCitzdHJ1Y3QgeHRlYV9rZXkgeworICAgdW5zaWduZWQgbG9uZyBBWzMyXSwgQlszMl07Cit9OworI2VuZGlmCisKKyNpZmRlZiBUV09GSVNICisjaWZuZGVmIFRXT0ZJU0hfU01BTEwKKyAgIHN0cnVjdCB0d29maXNoX2tleSB7CisgICAgICB1bG9uZzMyIFNbNF1bMjU2XSwgS1s0MF07CisgICB9OworI2Vsc2UKKyAgIHN0cnVjdCB0d29maXNoX2tleSB7CisgICAgICB1bG9uZzMyIEtbNDBdOworICAgICAgdW5zaWduZWQgY2hhciBTWzMyXSwgc3RhcnQ7CisgICB9OworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFNBRkVSCisjZGVmaW5lIFNBRkVSX0s2NF9ERUZBVUxUX05PRl9ST1VORFMgICAgIDYKKyNkZWZpbmUgU0FGRVJfSzEyOF9ERUZBVUxUX05PRl9ST1VORFMgICAxMAorI2RlZmluZSBTQUZFUl9TSzY0X0RFRkFVTFRfTk9GX1JPVU5EUyAgICA4CisjZGVmaW5lIFNBRkVSX1NLMTI4X0RFRkFVTFRfTk9GX1JPVU5EUyAgMTAKKyNkZWZpbmUgU0FGRVJfTUFYX05PRl9ST1VORFMgICAgICAgICAgICAxMworI2RlZmluZSBTQUZFUl9CTE9DS19MRU4gICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIFNBRkVSX0tFWV9MRU4gICAgICgxICsgU0FGRVJfQkxPQ0tfTEVOICogKDEgKyAyICogU0FGRVJfTUFYX05PRl9ST1VORFMpKQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHNhZmVyX2Jsb2NrX3RbU0FGRVJfQkxPQ0tfTEVOXTsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBzYWZlcl9rZXlfdFtTQUZFUl9LRVlfTEVOXTsKK3N0cnVjdCBzYWZlcl9rZXkgeyBzYWZlcl9rZXlfdCBrZXk7IH07CisjZW5kaWYKKworI2lmZGVmIFJDMgorc3RydWN0IHJjMl9rZXkgeyB1bnNpZ25lZCB4a2V5WzY0XTsgfTsKKyNlbmRpZgorCisjaWZkZWYgREVTCitzdHJ1Y3QgZGVzX2tleSB7CisgICAgdWxvbmczMiBla1szMl0sIGRrWzMyXTsKK307CisKK3N0cnVjdCBkZXMzX2tleSB7CisgICAgdWxvbmczMiBla1szXVszMl0sIGRrWzNdWzMyXTsKK307CisjZW5kaWYKKworI2lmZGVmIENBU1Q1CitzdHJ1Y3QgY2FzdDVfa2V5IHsKKyAgICB1bG9uZzMyIEtbMzJdLCBrZXlsZW47Cit9OworI2VuZGlmCisKKyNpZmRlZiBOT0VLRU9OCitzdHJ1Y3Qgbm9la2Vvbl9rZXkgeworICAgIHVsb25nMzIgS1s0XSwgZEtbNF07Cit9OworI2VuZGlmCisKKyNpZmRlZiBTS0lQSkFDSyAKK3N0cnVjdCBza2lwamFja19rZXkgeworICAgIHVuc2lnbmVkIGNoYXIga2V5WzEwXTsKK307CisjZW5kaWYKKworI2lmZGVmIEtIQVpBRAorc3RydWN0IGtoYXphZF9rZXkgeworICAgdWxvbmc2NCByb3VuZEtleUVuY1s4ICsgMV07IAorICAgdWxvbmc2NCByb3VuZEtleURlY1s4ICsgMV07IAorfTsKKyNlbmRpZgorCisjaWZkZWYgQU5VQklTCitzdHJ1Y3QgYW51YmlzX2tleSB7IAorICAgaW50IGtleUJpdHM7IAorICAgaW50IFI7IAorICAgdWxvbmczMiByb3VuZEtleUVuY1sxOCArIDFdWzRdOyAKKyAgIHVsb25nMzIgcm91bmRLZXlEZWNbMTggKyAxXVs0XTsgCit9OyAKKyNlbmRpZgorCit0eXBlZGVmIHVuaW9uIFN5bW1ldHJpY19rZXkgeworI2lmZGVmIERFUworICAgc3RydWN0IGRlc19rZXkgZGVzOworICAgc3RydWN0IGRlczNfa2V5IGRlczM7CisjZW5kaWYKKyNpZmRlZiBSQzIKKyAgIHN0cnVjdCByYzJfa2V5IHJjMjsKKyNlbmRpZgorI2lmZGVmIFNBRkVSCisgICBzdHJ1Y3Qgc2FmZXJfa2V5IHNhZmVyOworI2VuZGlmCisjaWZkZWYgVFdPRklTSAorICAgc3RydWN0IHR3b2Zpc2hfa2V5ICB0d29maXNoOworI2VuZGlmCisjaWZkZWYgQkxPV0ZJU0gKKyAgIHN0cnVjdCBibG93ZmlzaF9rZXkgYmxvd2Zpc2g7CisjZW5kaWYKKyNpZmRlZiBSQzUKKyAgIHN0cnVjdCByYzVfa2V5ICAgICAgcmM1OworI2VuZGlmCisjaWZkZWYgUkM2CisgICBzdHJ1Y3QgcmM2X2tleSAgICAgIHJjNjsKKyNlbmRpZgorI2lmZGVmIFNBRkVSUAorICAgc3RydWN0IHNhZmVycF9rZXkgICBzYWZlcnA7CisjZW5kaWYKKyNpZmRlZiBSSUpOREFFTAorICAgc3RydWN0IHJpam5kYWVsX2tleSByaWpuZGFlbDsKKyNlbmRpZgorI2lmZGVmIFhURUEKKyAgIHN0cnVjdCB4dGVhX2tleSAgICAgeHRlYTsKKyNlbmRpZgorI2lmZGVmIENBU1Q1CisgICBzdHJ1Y3QgY2FzdDVfa2V5ICAgIGNhc3Q1OworI2VuZGlmCisjaWZkZWYgTk9FS0VPTgorICAgc3RydWN0IG5vZWtlb25fa2V5ICBub2VrZW9uOworI2VuZGlmICAgCisjaWZkZWYgU0tJUEpBQ0sKKyAgIHN0cnVjdCBza2lwamFja19rZXkgc2tpcGphY2s7CisjZW5kaWYKKyNpZmRlZiBLSEFaQUQKKyAgIHN0cnVjdCBraGF6YWRfa2V5ICAga2hhemFkOworI2VuZGlmCisjaWZkZWYgQU5VQklTCisgICBzdHJ1Y3QgYW51YmlzX2tleSAgIGFudWJpczsKKyNlbmRpZgorI2lmZGVmIEtTRUVECisgICBzdHJ1Y3Qga3NlZWRfa2V5ICAgIGtzZWVkOworI2VuZGlmCisjaWZkZWYgTFRDX0tBU1VNSQorICAgc3RydWN0IGthc3VtaV9rZXkgICBrYXN1bWk7CisjZW5kaWYgIAorICAgdm9pZCAgICpkYXRhOworfSBzeW1tZXRyaWNfa2V5OworCisjaWZkZWYgTFRDX0VDQl9NT0RFCisvKiogQSBibG9jayBjaXBoZXIgRUNCIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgLyoqIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGNob3NlbiAqLworICAgaW50ICAgICAgICAgICAgICAgICBjaXBoZXIsIAorICAgLyoqIFRoZSBibG9jayBzaXplIG9mIHRoZSBnaXZlbiBjaXBoZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tsZW47CisgICAvKiogVGhlIHNjaGVkdWxlZCBrZXkgKi8gICAgICAgICAgICAgICAgICAgICAgIAorICAgc3ltbWV0cmljX2tleSAgICAgICBrZXk7Cit9IHN5bW1ldHJpY19FQ0I7CisjZW5kaWYKKworI2lmZGVmIExUQ19DRkJfTU9ERQorLyoqIEEgYmxvY2sgY2lwaGVyIENGQiBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIC8qKiBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBjaG9zZW4gKi8KKyAgIGludCAgICAgICAgICAgICAgICAgY2lwaGVyLCAKKyAgIC8qKiBUaGUgYmxvY2sgc2l6ZSBvZiB0aGUgZ2l2ZW4gY2lwaGVyICovICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrbGVuLCAKKyAgIC8qKiBUaGUgcGFkZGluZyBvZmZzZXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgcGFkbGVuOworICAgLyoqIFRoZSBjdXJyZW50IElWICovCisgICB1bnNpZ25lZCBjaGFyICAgICAgIElWW01BWEJMT0NLU0laRV0sIAorICAgLyoqIFRoZSBwYWQgdXNlZCB0byBlbmNyeXB0L2RlY3J5cHQgKi8gCisgICAgICAgICAgICAgICAgICAgICAgIHBhZFtNQVhCTE9DS1NJWkVdOworICAgLyoqIFRoZSBzY2hlZHVsZWQga2V5ICovCisgICBzeW1tZXRyaWNfa2V5ICAgICAgIGtleTsKK30gc3ltbWV0cmljX0NGQjsKKyNlbmRpZgorCisjaWZkZWYgTFRDX09GQl9NT0RFCisvKiogQSBibG9jayBjaXBoZXIgT0ZCIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgLyoqIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGNob3NlbiAqLworICAgaW50ICAgICAgICAgICAgICAgICBjaXBoZXIsIAorICAgLyoqIFRoZSBibG9jayBzaXplIG9mIHRoZSBnaXZlbiBjaXBoZXIgKi8gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tsZW4sIAorICAgLyoqIFRoZSBwYWRkaW5nIG9mZnNldCAqLworICAgICAgICAgICAgICAgICAgICAgICBwYWRsZW47CisgICAvKiogVGhlIGN1cnJlbnQgSVYgKi8KKyAgIHVuc2lnbmVkIGNoYXIgICAgICAgSVZbTUFYQkxPQ0tTSVpFXTsKKyAgIC8qKiBUaGUgc2NoZWR1bGVkIGtleSAqLworICAgc3ltbWV0cmljX2tleSAgICAgICBrZXk7Cit9IHN5bW1ldHJpY19PRkI7CisjZW5kaWYKKworI2lmZGVmIExUQ19DQkNfTU9ERQorLyoqIEEgYmxvY2sgY2lwaGVyIENCQyBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIC8qKiBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBjaG9zZW4gKi8KKyAgIGludCAgICAgICAgICAgICAgICAgY2lwaGVyLCAKKyAgIC8qKiBUaGUgYmxvY2sgc2l6ZSBvZiB0aGUgZ2l2ZW4gY2lwaGVyICovICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrbGVuOworICAgLyoqIFRoZSBjdXJyZW50IElWICovCisgICB1bnNpZ25lZCBjaGFyICAgICAgIElWW01BWEJMT0NLU0laRV07CisgICAvKiogVGhlIHNjaGVkdWxlZCBrZXkgKi8KKyAgIHN5bW1ldHJpY19rZXkgICAgICAga2V5OworfSBzeW1tZXRyaWNfQ0JDOworI2VuZGlmCisKKworI2lmZGVmIExUQ19DVFJfTU9ERQorLyoqIEEgYmxvY2sgY2lwaGVyIENUUiBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIC8qKiBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBjaG9zZW4gKi8KKyAgIGludCAgICAgICAgICAgICAgICAgY2lwaGVyLAorICAgLyoqIFRoZSBibG9jayBzaXplIG9mIHRoZSBnaXZlbiBjaXBoZXIgKi8gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tsZW4sIAorICAgLyoqIFRoZSBwYWRkaW5nIG9mZnNldCAqLworICAgICAgICAgICAgICAgICAgICAgICBwYWRsZW4sIAorICAgLyoqIFRoZSBtb2RlIChlbmRpYW5lc3MpIG9mIHRoZSBDVFIsIDA9PWxpdHRsZSwgMT09YmlnICovICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgbW9kZTsKKyAgIC8qKiBUaGUgY291bnRlciAqLyAgICAgICAgICAgICAgICAgICAgICAgCisgICB1bnNpZ25lZCBjaGFyICAgICAgIGN0cltNQVhCTE9DS1NJWkVdLCAKKyAgIC8qKiBUaGUgcGFkIHVzZWQgdG8gZW5jcnlwdC9kZWNyeXB0ICovICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgcGFkW01BWEJMT0NLU0laRV07CisgICAvKiogVGhlIHNjaGVkdWxlZCBrZXkgKi8KKyAgIHN5bW1ldHJpY19rZXkgICAgICAga2V5OworfSBzeW1tZXRyaWNfQ1RSOworI2VuZGlmCisKKworI2lmZGVmIExUQ19MUldfTU9ERQorLyoqIEEgTFJXIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qKiBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBjaG9zZW4gKG11c3QgYmUgYSAxMjgtYml0IGJsb2NrIGNpcGhlcikgKi8KKyAgICBpbnQgICAgICAgICAgICAgICBjaXBoZXI7CisKKyAgICAvKiogVGhlIGN1cnJlbnQgSVYgKi8KKyAgICB1bnNpZ25lZCBjaGFyICAgICBJVlsxNl0sCisgCisgICAgLyoqIHRoZSB0d2VhayBrZXkgKi8KKyAgICAgICAgICAgICAgICAgICAgICB0d2Vha1sxNl0sCisKKyAgICAvKiogVGhlIGN1cnJlbnQgcGFkLCBpdCdzIHRoZSBwcm9kdWN0IG9mIHRoZSBmaXJzdCAxNSBieXRlcyBhZ2FpbnN0IHRoZSB0d2VhayBrZXkgKi8KKyAgICAgICAgICAgICAgICAgICAgICBwYWRbMTZdOworCisgICAgLyoqIFRoZSBzY2hlZHVsZWQgc3ltbWV0cmljIGtleSAqLworICAgIHN5bW1ldHJpY19rZXkgICAgIGtleTsKKworI2lmZGVmIExSV19UQUJMRVMKKyAgICAvKiogVGhlIHByZS1jb21wdXRlZCBtdWx0aXBsaWNhdGlvbiB0YWJsZSAqLworICAgIHVuc2lnbmVkIGNoYXIgICAgIFBDWzE2XVsyNTZdWzE2XTsKKyNlbmRpZgorfSBzeW1tZXRyaWNfTFJXOworI2VuZGlmCisKKyNpZmRlZiBMVENfRjhfTU9ERQorLyoqIEEgYmxvY2sgY2lwaGVyIEY4IHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgLyoqIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGNob3NlbiAqLworICAgaW50ICAgICAgICAgICAgICAgICBjaXBoZXIsIAorICAgLyoqIFRoZSBibG9jayBzaXplIG9mIHRoZSBnaXZlbiBjaXBoZXIgKi8gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tsZW4sIAorICAgLyoqIFRoZSBwYWRkaW5nIG9mZnNldCAqLworICAgICAgICAgICAgICAgICAgICAgICBwYWRsZW47CisgICAvKiogVGhlIGN1cnJlbnQgSVYgKi8KKyAgIHVuc2lnbmVkIGNoYXIgICAgICAgSVZbTUFYQkxPQ0tTSVpFXSwKKyAgICAgICAgICAgICAgICAgICAgICAgTUlWW01BWEJMT0NLU0laRV07CisgICAvKiogQ3VycmVudCBibG9jayBjb3VudCAqLworICAgdWxvbmczMiAgICAgICAgICAgICBibG9ja2NudDsKKyAgIC8qKiBUaGUgc2NoZWR1bGVkIGtleSAqLworICAgc3ltbWV0cmljX2tleSAgICAgICBrZXk7Cit9IHN5bW1ldHJpY19GODsKKyNlbmRpZgorCisKKy8qKiBjaXBoZXIgZGVzY3JpcHRvciB0YWJsZSwgbGFzdCBlbnRyeSBoYXMgIm5hbWUgPT0gTlVMTCIgdG8gbWFyayB0aGUgZW5kIG9mIHRhYmxlICovCitleHRlcm4gc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciB7CisgICAvKiogbmFtZSBvZiBjaXBoZXIgKi8KKyAgIGNoYXIgKm5hbWU7CisgICAvKiogaW50ZXJuYWwgSUQgKi8KKyAgIHVuc2lnbmVkIGNoYXIgSUQ7CisgICAvKiogbWluIGtleXNpemUgKG9jdGV0cykgKi8KKyAgIGludCAgbWluX2tleV9sZW5ndGgsIAorICAgLyoqIG1heCBrZXlzaXplIChvY3RldHMpICovCisgICAgICAgIG1heF9rZXlfbGVuZ3RoLCAKKyAgIC8qKiBibG9jayBzaXplIChvY3RldHMpICovCisgICAgICAgIGJsb2NrX2xlbmd0aCwgCisgICAvKiogZGVmYXVsdCBudW1iZXIgb2Ygcm91bmRzICovCisgICAgICAgIGRlZmF1bHRfcm91bmRzOworICAgLyoqIFNldHVwIHRoZSBjaXBoZXIgCisgICAgICBAcGFyYW0ga2V5ICAgICAgICAgVGhlIGlucHV0IHN5bW1ldHJpYyBrZXkKKyAgICAgIEBwYXJhbSBrZXlsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBrZXkgKG9jdGV0cykKKyAgICAgIEBwYXJhbSBudW1fcm91bmRzICBUaGUgcmVxdWVzdGVkIG51bWJlciBvZiByb3VuZHMgKDA9PWRlZmF1bHQpCisgICAgICBAcGFyYW0gc2tleSAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBzY2hlZHVsZWQga2V5CisgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICovCisgICBpbnQgICgqc2V0dXApKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworICAgLyoqIEVuY3J5cHQgYSBibG9jaworICAgICAgQHBhcmFtIHB0ICAgICAgVGhlIHBsYWludGV4dAorICAgICAgQHBhcmFtIGN0ICAgICAgW291dF0gVGhlIGNpcGhlcnRleHQKKyAgICAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5CisgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICovCisgICBpbnQgKCplY2JfZW5jcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKKyAgIC8qKiBEZWNyeXB0IGEgYmxvY2sKKyAgICAgIEBwYXJhbSBjdCAgICAgIFRoZSBjaXBoZXJ0ZXh0CisgICAgICBAcGFyYW0gcHQgICAgICBbb3V0XSBUaGUgcGxhaW50ZXh0CisgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAqLworICAgaW50ICgqZWNiX2RlY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CisgICAvKiogVGVzdCB0aGUgYmxvY2sgY2lwaGVyCisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0aW5nIGhhcyBiZWVuIGRpc2FibGVkCisgICAqLworICAgaW50ICgqdGVzdCkodm9pZCk7CisKKyAgIC8qKiBUZXJtaW5hdGUgdGhlIGNvbnRleHQgCisgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleQorICAgKi8KKyAgIHZvaWQgKCpkb25lKShzeW1tZXRyaWNfa2V5ICpza2V5KTsgICAgICAKKworICAgLyoqIERldGVybWluZSBhIGtleSBzaXplCisgICAgICAgQHBhcmFtIGtleXNpemUgICAgW2luL291dF0gVGhlIHNpemUgb2YgdGhlIGtleSBkZXNpcmVkIGFuZCB0aGUgc3VnZ2VzdGVkIHNpemUKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICovCisgICBpbnQgICgqa2V5c2l6ZSkoaW50ICprZXlzaXplKTsKKworLyoqIEFjY2VsZXJhdG9ycyAqKi8KKyAgIC8qKiBBY2NlbGVyYXRlZCBFQ0IgZW5jcnlwdGlvbiAKKyAgICAgICBAcGFyYW0gcHQgICAgICBQbGFpbnRleHQKKyAgICAgICBAcGFyYW0gY3QgICAgICBDaXBoZXJ0ZXh0CisgICAgICAgQHBhcmFtIGJsb2NrcyAgVGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcworICAgICAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5IGNvbnRleHQKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICovCisgICBpbnQgKCphY2NlbF9lY2JfZW5jcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGJsb2Nrcywgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBFQ0IgZGVjcnlwdGlvbiAKKyAgICAgICBAcGFyYW0gcHQgICAgICBQbGFpbnRleHQKKyAgICAgICBAcGFyYW0gY3QgICAgICBDaXBoZXJ0ZXh0CisgICAgICAgQHBhcmFtIGJsb2NrcyAgVGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcworICAgICAgIEBwYXJhbSBza2V5ICAgIFRoZSBzY2hlZHVsZWQga2V5IGNvbnRleHQKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICovCisgICBpbnQgKCphY2NlbF9lY2JfZGVjcnlwdCkoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBsb25nIGJsb2Nrcywgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBDQkMgZW5jcnlwdGlvbiAKKyAgICAgICBAcGFyYW0gcHQgICAgICBQbGFpbnRleHQKKyAgICAgICBAcGFyYW0gY3QgICAgICBDaXBoZXJ0ZXh0CisgICAgICAgQHBhcmFtIGJsb2NrcyAgVGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcworICAgICAgIEBwYXJhbSBJViAgICAgIFRoZSBpbml0aWFsIHZhbHVlIChpbnB1dC9vdXRwdXQpCisgICAgICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkgY29udGV4dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICAgKi8KKyAgIGludCAoKmFjY2VsX2NiY19lbmNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgYmxvY2tzLCB1bnNpZ25lZCBjaGFyICpJViwgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBDQkMgZGVjcnlwdGlvbiAKKyAgICAgICBAcGFyYW0gcHQgICAgICBQbGFpbnRleHQKKyAgICAgICBAcGFyYW0gY3QgICAgICBDaXBoZXJ0ZXh0CisgICAgICAgQHBhcmFtIGJsb2NrcyAgVGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcworICAgICAgIEBwYXJhbSBJViAgICAgIFRoZSBpbml0aWFsIHZhbHVlIChpbnB1dC9vdXRwdXQpCisgICAgICAgQHBhcmFtIHNrZXkgICAgVGhlIHNjaGVkdWxlZCBrZXkgY29udGV4dAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICAgKi8KKyAgIGludCAoKmFjY2VsX2NiY19kZWNyeXB0KShjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgYmxvY2tzLCB1bnNpZ25lZCBjaGFyICpJViwgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBDVFIgZW5jcnlwdGlvbiAKKyAgICAgICBAcGFyYW0gcHQgICAgICBQbGFpbnRleHQKKyAgICAgICBAcGFyYW0gY3QgICAgICBDaXBoZXJ0ZXh0CisgICAgICAgQHBhcmFtIGJsb2NrcyAgVGhlIG51bWJlciBvZiBjb21wbGV0ZSBibG9ja3MgdG8gcHJvY2VzcworICAgICAgIEBwYXJhbSBJViAgICAgIFRoZSBpbml0aWFsIHZhbHVlIChpbnB1dC9vdXRwdXQpCisgICAgICAgQHBhcmFtIG1vZGUgICAgbGl0dGxlIG9yIGJpZyBlbmRpYW4gY291bnRlciAobW9kZT0wIG9yIG1vZGU9MSkKKyAgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleSBjb250ZXh0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAqLworICAgaW50ICgqYWNjZWxfY3RyX2VuY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBibG9ja3MsIHVuc2lnbmVkIGNoYXIgKklWLCBpbnQgbW9kZSwgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBMUlcgCisgICAgICAgQHBhcmFtIHB0ICAgICAgUGxhaW50ZXh0CisgICAgICAgQHBhcmFtIGN0ICAgICAgQ2lwaGVydGV4dAorICAgICAgIEBwYXJhbSBibG9ja3MgIFRoZSBudW1iZXIgb2YgY29tcGxldGUgYmxvY2tzIHRvIHByb2Nlc3MKKyAgICAgICBAcGFyYW0gSVYgICAgICBUaGUgaW5pdGlhbCB2YWx1ZSAoaW5wdXQvb3V0cHV0KQorICAgICAgIEBwYXJhbSB0d2VhayAgIFRoZSBMUlcgdHdlYWsKKyAgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleSBjb250ZXh0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAqLworICAgaW50ICgqYWNjZWxfbHJ3X2VuY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBibG9ja3MsIHVuc2lnbmVkIGNoYXIgKklWLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0d2Vhaywgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBMUlcgCisgICAgICAgQHBhcmFtIGN0ICAgICAgQ2lwaGVydGV4dAorICAgICAgIEBwYXJhbSBwdCAgICAgIFBsYWludGV4dAorICAgICAgIEBwYXJhbSBibG9ja3MgIFRoZSBudW1iZXIgb2YgY29tcGxldGUgYmxvY2tzIHRvIHByb2Nlc3MKKyAgICAgICBAcGFyYW0gSVYgICAgICBUaGUgaW5pdGlhbCB2YWx1ZSAoaW5wdXQvb3V0cHV0KQorICAgICAgIEBwYXJhbSB0d2VhayAgIFRoZSBMUlcgdHdlYWsKKyAgICAgICBAcGFyYW0gc2tleSAgICBUaGUgc2NoZWR1bGVkIGtleSBjb250ZXh0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAqLworICAgaW50ICgqYWNjZWxfbHJ3X2RlY3J5cHQpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgbG9uZyBibG9ja3MsIHVuc2lnbmVkIGNoYXIgKklWLCBjb25zdCB1bnNpZ25lZCBjaGFyICp0d2Vhaywgc3ltbWV0cmljX2tleSAqc2tleSk7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBDQ00gcGFja2V0IChvbmUtc2hvdCkKKyAgICAgICBAcGFyYW0ga2V5ICAgICAgICBUaGUgc2VjcmV0IGtleSB0byB1c2UKKyAgICAgICBAcGFyYW0ga2V5bGVuICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQga2V5IChvY3RldHMpCisgICAgICAgQHBhcmFtIHVza2V5ICAgICAgQSBwcmV2aW91c2x5IHNjaGVkdWxlZCBrZXkgW29wdGlvbmFsIGNhbiBiZSBOVUxMXQorICAgICAgIEBwYXJhbSBub25jZSAgICAgIFRoZSBzZXNzaW9uIG5vbmNlIFt1c2Ugb25jZV0KKyAgICAgICBAcGFyYW0gbm9uY2VsZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBub25jZQorICAgICAgIEBwYXJhbSBoZWFkZXIgICAgIFRoZSBoZWFkZXIgZm9yIHRoZSBzZXNzaW9uCisgICAgICAgQHBhcmFtIGhlYWRlcmxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgaGVhZGVyIChvY3RldHMpCisgICAgICAgQHBhcmFtIHB0ICAgICAgICAgW291dF0gVGhlIHBsYWludGV4dAorICAgICAgIEBwYXJhbSBwdGxlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHBsYWludGV4dCAob2N0ZXRzKQorICAgICAgIEBwYXJhbSBjdCAgICAgICAgIFtvdXRdIFRoZSBjaXBoZXJ0ZXh0CisgICAgICAgQHBhcmFtIHRhZyAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIHRhZworICAgICAgIEBwYXJhbSB0YWdsZW4gICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgICAgIEBwYXJhbSBkaXJlY3Rpb24gIEVuY3J5cHQgb3IgRGVjcnlwdCBkaXJlY3Rpb24gKDAgb3IgMSkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICovCisgICBpbnQgKCphY2NlbF9jY21fbWVtb3J5KSgKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgIHN5bW1ldHJpY19rZXkgICAgICAgKnVza2V5LAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCAgdW5zaWduZWQgbG9uZyBub25jZWxlbiwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkZXIsIHVuc2lnbmVkIGxvbmcgaGVhZGVybGVuLAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAgICAgdW5zaWduZWQgbG9uZyBwdGxlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsICAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICBkaXJlY3Rpb24pOworCisgICAvKiogQWNjZWxlcmF0ZWQgR0NNIHBhY2tldCAob25lIHNob3QpCisgICAgICAgQHBhcmFtIGtleSAgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgICAgICBAcGFyYW0ga2V5bGVuICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQga2V5CisgICAgICAgQHBhcmFtIElWICAgICAgICAgVGhlIGluaXRpYWwgdmVjdG9yIAorICAgICAgIEBwYXJhbSBJVmxlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGluaXRpYWwgdmVjdG9yCisgICAgICAgQHBhcmFtIGFkYXRhICAgICAgVGhlIGFkZGl0aW9uYWwgYXV0aGVudGljYXRpb24gZGF0YSAoaGVhZGVyKQorICAgICAgIEBwYXJhbSBhZGF0YWxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIGFkYXRhCisgICAgICAgQHBhcmFtIHB0ICAgICAgICAgVGhlIHBsYWludGV4dAorICAgICAgIEBwYXJhbSBwdGxlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHBsYWludGV4dCAoY2lwaGVydGV4dCBsZW5ndGggaXMgdGhlIHNhbWUpCisgICAgICAgQHBhcmFtIGN0ICAgICAgICAgVGhlIGNpcGhlcnRleHQKKyAgICAgICBAcGFyYW0gdGFnICAgICAgICBbb3V0XSBUaGUgTUFDIHRhZworICAgICAgIEBwYXJhbSB0YWdsZW4gICAgIFtpbi9vdXRdIFRoZSBNQUMgdGFnIGxlbmd0aAorICAgICAgIEBwYXJhbSBkaXJlY3Rpb24gIEVuY3J5cHQgb3IgRGVjcnlwdCBtb2RlIChHQ01fRU5DUllQVCBvciBHQ01fREVDUllQVCkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCphY2NlbF9nY21fbWVtb3J5KSgKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCAgICAgdW5zaWduZWQgbG9uZyBJVmxlbiwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGF0YSwgIHVuc2lnbmVkIGxvbmcgYWRhdGFsZW4sCisgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsICAgICB1bnNpZ25lZCBsb25nIHB0bGVuLAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsICAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGRpcmVjdGlvbik7CisKKyAgIC8qKiBBY2NlbGVyYXRlZCBvbmUgc2hvdCBPTUFDIAorICAgICAgIEBwYXJhbSBrZXkgICAgICAgICAgICBUaGUgc2VjcmV0IGtleQorICAgICAgIEBwYXJhbSBrZXlsZW4gICAgICAgICBUaGUga2V5IGxlbmd0aCAob2N0ZXRzKSAKKyAgICAgICBAcGFyYW0gaW4gICAgICAgICAgICAgVGhlIG1lc3NhZ2UgCisgICAgICAgQHBhcmFtIGlubGVuICAgICAgICAgIExlbmd0aCBvZiBtZXNzYWdlIChvY3RldHMpCisgICAgICAgQHBhcmFtIG91dCAgICAgICAgICAgIFtvdXRdIERlc3RpbmF0aW9uIGZvciB0YWcKKyAgICAgICBAcGFyYW0gb3V0bGVuICAgICAgICAgW2luL291dF0gSW5pdGlhbCBhbmQgZmluYWwgc2l6ZSBvZiBvdXQKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpvbWFjX21lbW9yeSkoCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCisgICAvKiogQWNjZWxlcmF0ZWQgb25lIHNob3QgWENCQyAKKyAgICAgICBAcGFyYW0ga2V5ICAgICAgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgICAgICBAcGFyYW0ga2V5bGVuICAgICAgICAgVGhlIGtleSBsZW5ndGggKG9jdGV0cykgCisgICAgICAgQHBhcmFtIGluICAgICAgICAgICAgIFRoZSBtZXNzYWdlIAorICAgICAgIEBwYXJhbSBpbmxlbiAgICAgICAgICBMZW5ndGggb2YgbWVzc2FnZSAob2N0ZXRzKQorICAgICAgIEBwYXJhbSBvdXQgICAgICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBmb3IgdGFnCisgICAgICAgQHBhcmFtIG91dGxlbiAgICAgICAgIFtpbi9vdXRdIEluaXRpYWwgYW5kIGZpbmFsIHNpemUgb2Ygb3V0CisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqeGNiY19tZW1vcnkpKAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworICAgLyoqIEFjY2VsZXJhdGVkIG9uZSBzaG90IEY5IAorICAgICAgIEBwYXJhbSBrZXkgICAgICAgICAgICBUaGUgc2VjcmV0IGtleQorICAgICAgIEBwYXJhbSBrZXlsZW4gICAgICAgICBUaGUga2V5IGxlbmd0aCAob2N0ZXRzKSAKKyAgICAgICBAcGFyYW0gaW4gICAgICAgICAgICAgVGhlIG1lc3NhZ2UgCisgICAgICAgQHBhcmFtIGlubGVuICAgICAgICAgIExlbmd0aCBvZiBtZXNzYWdlIChvY3RldHMpCisgICAgICAgQHBhcmFtIG91dCAgICAgICAgICAgIFtvdXRdIERlc3RpbmF0aW9uIGZvciB0YWcKKyAgICAgICBAcGFyYW0gb3V0bGVuICAgICAgICAgW2luL291dF0gSW5pdGlhbCBhbmQgZmluYWwgc2l6ZSBvZiBvdXQKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICAgICBAcmVtYXJrIFJlcXVpcmVzIG1hbnVhbCBwYWRkaW5nCisgICAqLworICAgaW50ICgqZjlfbWVtb3J5KSgKKyAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7Cit9IGNpcGhlcl9kZXNjcmlwdG9yW107CisKKyNpZmRlZiBCTE9XRklTSAoraW50IGJsb3dmaXNoX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGJsb3dmaXNoX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgYmxvd2Zpc2hfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBibG93ZmlzaF90ZXN0KHZvaWQpOwordm9pZCBibG93ZmlzaF9kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGJsb3dmaXNoX2tleXNpemUoaW50ICprZXlzaXplKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIGJsb3dmaXNoX2Rlc2M7CisjZW5kaWYKKworI2lmZGVmIFJDNQoraW50IHJjNV9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCByYzVfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCByYzVfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCByYzVfdGVzdCh2b2lkKTsKK3ZvaWQgcmM1X2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgcmM1X2tleXNpemUoaW50ICprZXlzaXplKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIHJjNV9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBSQzYKK2ludCByYzZfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgcmM2X2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgcmM2X2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgcmM2X3Rlc3Qodm9pZCk7Cit2b2lkIHJjNl9kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHJjNl9rZXlzaXplKGludCAqa2V5c2l6ZSk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciByYzZfZGVzYzsKKyNlbmRpZgorCisjaWZkZWYgUkMyCitpbnQgcmMyX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHJjMl9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHJjMl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHJjMl90ZXN0KHZvaWQpOwordm9pZCByYzJfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCByYzJfa2V5c2l6ZShpbnQgKmtleXNpemUpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgcmMyX2Rlc2M7CisjZW5kaWYKKworI2lmZGVmIFNBRkVSUAoraW50IHNhZmVycF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBzYWZlcnBfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBzYWZlcnBfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBzYWZlcnBfdGVzdCh2b2lkKTsKK3ZvaWQgc2FmZXJwX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgc2FmZXJwX2tleXNpemUoaW50ICprZXlzaXplKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIHNhZmVycF9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBTQUZFUgoraW50IHNhZmVyX2s2NF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBzYWZlcl9zazY0X3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHNhZmVyX2sxMjhfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgc2FmZXJfc2sxMjhfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgc2FmZXJfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICprZXkpOworaW50IHNhZmVyX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqa2V5KTsKK2ludCBzYWZlcl9rNjRfdGVzdCh2b2lkKTsKK2ludCBzYWZlcl9zazY0X3Rlc3Qodm9pZCk7CitpbnQgc2FmZXJfc2sxMjhfdGVzdCh2b2lkKTsKK3ZvaWQgc2FmZXJfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBzYWZlcl82NF9rZXlzaXplKGludCAqa2V5c2l6ZSk7CitpbnQgc2FmZXJfMTI4X2tleXNpemUoaW50ICprZXlzaXplKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIHNhZmVyX2s2NF9kZXNjLCBzYWZlcl9rMTI4X2Rlc2MsIHNhZmVyX3NrNjRfZGVzYywgc2FmZXJfc2sxMjhfZGVzYzsKKyNlbmRpZgorCisjaWZkZWYgUklKTkRBRUwKKworLyogbWFrZSBhZXMgYW4gYWxpYXMgKi8KKyNkZWZpbmUgYWVzX3NldHVwICAgICAgICAgICByaWpuZGFlbF9zZXR1cAorI2RlZmluZSBhZXNfZWNiX2VuY3J5cHQgICAgIHJpam5kYWVsX2VjYl9lbmNyeXB0CisjZGVmaW5lIGFlc19lY2JfZGVjcnlwdCAgICAgcmlqbmRhZWxfZWNiX2RlY3J5cHQKKyNkZWZpbmUgYWVzX3Rlc3QgICAgICAgICAgICByaWpuZGFlbF90ZXN0CisjZGVmaW5lIGFlc19kb25lICAgICAgICAgICAgcmlqbmRhZWxfZG9uZQorI2RlZmluZSBhZXNfa2V5c2l6ZSAgICAgICAgIHJpam5kYWVsX2tleXNpemUKKworI2RlZmluZSBhZXNfZW5jX3NldHVwICAgICAgICAgICByaWpuZGFlbF9lbmNfc2V0dXAKKyNkZWZpbmUgYWVzX2VuY19lY2JfZW5jcnlwdCAgICAgcmlqbmRhZWxfZW5jX2VjYl9lbmNyeXB0CisjZGVmaW5lIGFlc19lbmNfa2V5c2l6ZSAgICAgICAgIHJpam5kYWVsX2VuY19rZXlzaXplCisKK2ludCByaWpuZGFlbF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCByaWpuZGFlbF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHJpam5kYWVsX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgcmlqbmRhZWxfdGVzdCh2b2lkKTsKK3ZvaWQgcmlqbmRhZWxfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCByaWpuZGFlbF9rZXlzaXplKGludCAqa2V5c2l6ZSk7CitpbnQgcmlqbmRhZWxfZW5jX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHJpam5kYWVsX2VuY19lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOwordm9pZCByaWpuZGFlbF9lbmNfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCByaWpuZGFlbF9lbmNfa2V5c2l6ZShpbnQgKmtleXNpemUpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgcmlqbmRhZWxfZGVzYywgYWVzX2Rlc2M7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciByaWpuZGFlbF9lbmNfZGVzYywgYWVzX2VuY19kZXNjOworI2VuZGlmCisKKyNpZmRlZiBYVEVBCitpbnQgeHRlYV9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCB4dGVhX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgeHRlYV9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHh0ZWFfdGVzdCh2b2lkKTsKK3ZvaWQgeHRlYV9kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHh0ZWFfa2V5c2l6ZShpbnQgKmtleXNpemUpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgeHRlYV9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBUV09GSVNICitpbnQgdHdvZmlzaF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCB0d29maXNoX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgdHdvZmlzaF9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHR3b2Zpc2hfdGVzdCh2b2lkKTsKK3ZvaWQgdHdvZmlzaF9kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHR3b2Zpc2hfa2V5c2l6ZShpbnQgKmtleXNpemUpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgdHdvZmlzaF9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBERVMKK2ludCBkZXNfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgZGVzX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgZGVzX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgZGVzX3Rlc3Qodm9pZCk7Cit2b2lkIGRlc19kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGRlc19rZXlzaXplKGludCAqa2V5c2l6ZSk7CitpbnQgZGVzM19zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBkZXMzX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgZGVzM19lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGRlczNfdGVzdCh2b2lkKTsKK3ZvaWQgZGVzM19kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGRlczNfa2V5c2l6ZShpbnQgKmtleXNpemUpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3IgZGVzX2Rlc2MsIGRlczNfZGVzYzsKKyNlbmRpZgorCisjaWZkZWYgQ0FTVDUKK2ludCBjYXN0NV9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBjYXN0NV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGNhc3Q1X2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgY2FzdDVfdGVzdCh2b2lkKTsKK3ZvaWQgY2FzdDVfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBjYXN0NV9rZXlzaXplKGludCAqa2V5c2l6ZSk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBjYXN0NV9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBOT0VLRU9OCitpbnQgbm9la2Vvbl9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBub2VrZW9uX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgbm9la2Vvbl9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IG5vZWtlb25fdGVzdCh2b2lkKTsKK3ZvaWQgbm9la2Vvbl9kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IG5vZWtlb25fa2V5c2l6ZShpbnQgKmtleXNpemUpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3Igbm9la2Vvbl9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBTS0lQSkFDSworaW50IHNraXBqYWNrX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHNraXBqYWNrX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgc2tpcGphY2tfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBza2lwamFja190ZXN0KHZvaWQpOwordm9pZCBza2lwamFja19kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IHNraXBqYWNrX2tleXNpemUoaW50ICprZXlzaXplKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIHNraXBqYWNrX2Rlc2M7CisjZW5kaWYKKworI2lmZGVmIEtIQVpBRAoraW50IGtoYXphZF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBraGF6YWRfZWNiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBraGF6YWRfZWNiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBraGF6YWRfdGVzdCh2b2lkKTsKK3ZvaWQga2hhemFkX2RvbmUoc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQga2hhemFkX2tleXNpemUoaW50ICprZXlzaXplKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIGtoYXphZF9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBBTlVCSVMKK2ludCBhbnViaXNfc2V0dXAoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgYW51YmlzX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgYW51YmlzX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQgYW51YmlzX3Rlc3Qodm9pZCk7Cit2b2lkIGFudWJpc19kb25lKHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGFudWJpc19rZXlzaXplKGludCAqa2V5c2l6ZSk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBhbnViaXNfZGVzYzsKKyNlbmRpZgorCisjaWZkZWYgS1NFRUQKK2ludCBrc2VlZF9zZXR1cChjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBrc2VlZF9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGtzZWVkX2VjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgc3ltbWV0cmljX2tleSAqc2tleSk7CitpbnQga3NlZWRfdGVzdCh2b2lkKTsKK3ZvaWQga3NlZWRfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBrc2VlZF9rZXlzaXplKGludCAqa2V5c2l6ZSk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciBrc2VlZF9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBMVENfS0FTVU1JCitpbnQga2FzdW1pX3NldHVwKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGthc3VtaV9lY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGthc3VtaV9lY2JfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHN5bW1ldHJpY19rZXkgKnNrZXkpOworaW50IGthc3VtaV90ZXN0KHZvaWQpOwordm9pZCBrYXN1bWlfZG9uZShzeW1tZXRyaWNfa2V5ICpza2V5KTsKK2ludCBrYXN1bWlfa2V5c2l6ZShpbnQgKmtleXNpemUpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfY2lwaGVyX2Rlc2NyaXB0b3Iga2FzdW1pX2Rlc2M7CisjZW5kaWYKKworI2lmZGVmIExUQ19FQ0JfTU9ERQoraW50IGVjYl9zdGFydChpbnQgY2lwaGVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX0VDQiAqZWNiKTsKK2ludCBlY2JfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfRUNCICplY2IpOworaW50IGVjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19FQ0IgKmVjYik7CitpbnQgZWNiX2RvbmUoc3ltbWV0cmljX0VDQiAqZWNiKTsKKyNlbmRpZgorCisjaWZkZWYgTFRDX0NGQl9NT0RFCitpbnQgY2ZiX3N0YXJ0KGludCBjaXBoZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX0NGQiAqY2ZiKTsKK2ludCBjZmJfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfQ0ZCICpjZmIpOworaW50IGNmYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19DRkIgKmNmYik7CitpbnQgY2ZiX2dldGl2KHVuc2lnbmVkIGNoYXIgKklWLCB1bnNpZ25lZCBsb25nICpsZW4sIHN5bW1ldHJpY19DRkIgKmNmYik7CitpbnQgY2ZiX3NldGl2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0NGQiAqY2ZiKTsKK2ludCBjZmJfZG9uZShzeW1tZXRyaWNfQ0ZCICpjZmIpOworI2VuZGlmCisKKyNpZmRlZiBMVENfT0ZCX01PREUKK2ludCBvZmJfc3RhcnQoaW50IGNpcGhlciwgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgCisgICAgICAgICAgICAgIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfT0ZCICpvZmIpOworaW50IG9mYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19PRkIgKm9mYik7CitpbnQgb2ZiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX09GQiAqb2ZiKTsKK2ludCBvZmJfZ2V0aXYodW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgKmxlbiwgc3ltbWV0cmljX09GQiAqb2ZiKTsKK2ludCBvZmJfc2V0aXYoY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfT0ZCICpvZmIpOworaW50IG9mYl9kb25lKHN5bW1ldHJpY19PRkIgKm9mYik7CisjZW5kaWYKKworI2lmZGVmIExUQ19DQkNfTU9ERQoraW50IGNiY19zdGFydChpbnQgY2lwaGVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LAorICAgICAgICAgICAgICAgaW50IGtleWxlbiwgaW50IG51bV9yb3VuZHMsIHN5bW1ldHJpY19DQkMgKmNiYyk7CitpbnQgY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0NCQyAqY2JjKTsKK2ludCBjYmNfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfQ0JDICpjYmMpOworaW50IGNiY19nZXRpdih1bnNpZ25lZCBjaGFyICpJViwgdW5zaWduZWQgbG9uZyAqbGVuLCBzeW1tZXRyaWNfQ0JDICpjYmMpOworaW50IGNiY19zZXRpdihjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19DQkMgKmNiYyk7CitpbnQgY2JjX2RvbmUoc3ltbWV0cmljX0NCQyAqY2JjKTsKKyNlbmRpZgorCisjaWZkZWYgTFRDX0NUUl9NT0RFCisKKyNkZWZpbmUgQ1RSX0NPVU5URVJfTElUVExFX0VORElBTiAgICAwCisjZGVmaW5lIENUUl9DT1VOVEVSX0JJR19FTkRJQU4gICAgICAgMQorI2RlZmluZSBMVENfQ1RSX1JGQzM2ODYgICAgICAgICAgICAgIDIKKworaW50IGN0cl9zdGFydCggICAgICAgICAgICAgICBpbnQgICBjaXBoZXIsCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgICAgIGludCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbnVtX3JvdW5kcywgaW50IGN0cl9tb2RlLAorICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19DVFIgKmN0cik7CitpbnQgY3RyX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0NUUiAqY3RyKTsKK2ludCBjdHJfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfQ1RSICpjdHIpOworaW50IGN0cl9nZXRpdih1bnNpZ25lZCBjaGFyICpJViwgdW5zaWduZWQgbG9uZyAqbGVuLCBzeW1tZXRyaWNfQ1RSICpjdHIpOworaW50IGN0cl9zZXRpdihjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19DVFIgKmN0cik7CitpbnQgY3RyX2RvbmUoc3ltbWV0cmljX0NUUiAqY3RyKTsKK2ludCBjdHJfdGVzdCh2b2lkKTsKKyNlbmRpZgorCisjaWZkZWYgTFRDX0xSV19NT0RFCisKKyNkZWZpbmUgTFJXX0VOQ1JZUFQgMAorI2RlZmluZSBMUldfREVDUllQVCAxCisKK2ludCBscndfc3RhcnQoICAgICAgICAgICAgICAgaW50ICAgY2lwaGVyLAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpJViwKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICAgICBpbnQga2V5bGVuLAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0d2VhaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBudW1fcm91bmRzLCAKKyAgICAgICAgICAgICAgICAgICBzeW1tZXRyaWNfTFJXICpscncpOworaW50IGxyd19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19MUlcgKmxydyk7CitpbnQgbHJ3X2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0xSVyAqbHJ3KTsKK2ludCBscndfZ2V0aXYodW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgKmxlbiwgc3ltbWV0cmljX0xSVyAqbHJ3KTsKK2ludCBscndfc2V0aXYoY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfTFJXICpscncpOworaW50IGxyd19kb25lKHN5bW1ldHJpY19MUlcgKmxydyk7CitpbnQgbHJ3X3Rlc3Qodm9pZCk7CisKKy8qIGRvbid0IGNhbGwgKi8KK2ludCBscndfcHJvY2Vzcyhjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgbW9kZSwgc3ltbWV0cmljX0xSVyAqbHJ3KTsKKyNlbmRpZiAgICAKKworI2lmZGVmIExUQ19GOF9NT0RFCitpbnQgZjhfc3RhcnQoICAgICAgICAgICAgICAgIGludCAgY2lwaGVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICAgICAgICAgICAgICAgICAgaW50ICBrZXlsZW4sIAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHRfa2V5LCAgICAgICAgICAgICAgIGludCAgc2tleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBudW1fcm91bmRzLCAgIHN5bW1ldHJpY19GOCAgKmY4KTsKK2ludCBmOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19GOCAqZjgpOworaW50IGY4X2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0Y4ICpmOCk7CitpbnQgZjhfZ2V0aXYodW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgKmxlbiwgc3ltbWV0cmljX0Y4ICpmOCk7CitpbnQgZjhfc2V0aXYoY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfRjggKmY4KTsKK2ludCBmOF9kb25lKHN5bW1ldHJpY19GOCAqZjgpOworaW50IGY4X3Rlc3RfbW9kZSh2b2lkKTsKKyNlbmRpZgorCisKK2ludCBmaW5kX2NpcGhlcihjb25zdCBjaGFyICpuYW1lKTsKK2ludCBmaW5kX2NpcGhlcl9hbnkoY29uc3QgY2hhciAqbmFtZSwgaW50IGJsb2NrbGVuLCBpbnQga2V5bGVuKTsKK2ludCBmaW5kX2NpcGhlcl9pZCh1bnNpZ25lZCBjaGFyIElEKTsKK2ludCByZWdpc3Rlcl9jaXBoZXIoY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciAqY2lwaGVyKTsKK2ludCB1bnJlZ2lzdGVyX2NpcGhlcihjb25zdCBzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yICpjaXBoZXIpOworaW50IGNpcGhlcl9pc192YWxpZChpbnQgaWR4KTsKKworTFRDX01VVEVYX1BST1RPKGx0Y19jaXBoZXJfbXV0ZXgpCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2NpcGhlci5oLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQ2ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzEzIDIzOjA5OjM4ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2N1c3RvbS5oIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY3VzdG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQwMTY4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X2N1c3RvbS5oCkBAIC0wLDAgKzEsMTUyIEBACisjaWZuZGVmIFRPTUNSWVBUX0NVU1RPTV9IXworI2RlZmluZSBUT01DUllQVF9DVVNUT01fSF8KKworLyogdGhpcyB3aWxsIHNvcnQgb3V0IHdoaWNoIHN0dWZmIGJhc2VkIG9uIHRoZSB1c2VyLWNvbmZpZyBpbiBvcHRpb25zLmggKi8KKyNpbmNsdWRlICJvcHRpb25zLmgiCisKKy8qIG1hY3JvcyBmb3IgdmFyaW91cyBsaWJjIGZ1bmN0aW9ucyB5b3UgY2FuIGNoYW5nZSBmb3IgZW1iZWRkZWQgdGFyZ2V0cyAqLworI2lmbmRlZiBYTUFMTE9DCisgICAjaWZkZWYgbWFsbG9jIAorICAgI2RlZmluZSBMVENfTk9fUFJPVE9UWVBFUworICAgI2VuZGlmCisjZGVmaW5lIFhNQUxMT0MgIG1hbGxvYworI2VuZGlmCisjaWZuZGVmIFhSRUFMTE9DCisgICAjaWZkZWYgcmVhbGxvYyAKKyAgICNkZWZpbmUgTFRDX05PX1BST1RPVFlQRVMKKyAgICNlbmRpZgorI2RlZmluZSBYUkVBTExPQyByZWFsbG9jCisjZW5kaWYKKyNpZm5kZWYgWENBTExPQworICAgI2lmZGVmIGNhbGxvYyAKKyAgICNkZWZpbmUgTFRDX05PX1BST1RPVFlQRVMKKyAgICNlbmRpZgorI2RlZmluZSBYQ0FMTE9DICBjYWxsb2MKKyNlbmRpZgorI2lmbmRlZiBYRlJFRQorICAgI2lmZGVmIGZyZWUKKyAgICNkZWZpbmUgTFRDX05PX1BST1RPVFlQRVMKKyAgICNlbmRpZgorI2RlZmluZSBYRlJFRSAgICBmcmVlCisjZW5kaWYKKworI2lmbmRlZiBYTUVNU0VUCisgICAjaWZkZWYgbWVtc2V0CisgICAjZGVmaW5lIExUQ19OT19QUk9UT1RZUEVTCisgICAjZW5kaWYKKyNkZWZpbmUgWE1FTVNFVCAgbWVtc2V0CisjZW5kaWYKKyNpZm5kZWYgWE1FTUNQWQorICAgI2lmZGVmIG1lbWNweQorICAgI2RlZmluZSBMVENfTk9fUFJPVE9UWVBFUworICAgI2VuZGlmCisjZGVmaW5lIFhNRU1DUFkgIG1lbWNweQorI2VuZGlmCisjaWZuZGVmIFhNRU1DTVAKKyAgICNpZmRlZiBtZW1jbXAgCisgICAjZGVmaW5lIExUQ19OT19QUk9UT1RZUEVTCisgICAjZW5kaWYKKyNkZWZpbmUgWE1FTUNNUCAgbWVtY21wCisjZW5kaWYKKyNpZm5kZWYgWFNUUkNNUAorICAgI2lmZGVmIHN0cmNtcAorICAgI2RlZmluZSBMVENfTk9fUFJPVE9UWVBFUworICAgI2VuZGlmCisjZGVmaW5lIFhTVFJDTVAgc3RyY21wCisjZW5kaWYKKworI2lmbmRlZiBYQ0xPQ0sKKyNkZWZpbmUgWENMT0NLICAgY2xvY2sKKyNlbmRpZgorI2lmbmRlZiBYQ0xPQ0tTX1BFUl9TRUMKKyNkZWZpbmUgWENMT0NLU19QRVJfU0VDIENMT0NLU19QRVJfU0VDCisjZW5kaWYKKworICAgI2RlZmluZSBMVENfTk9fUFJOR1MKKyAgICNkZWZpbmUgTFRDX05PX1BLCisjaWZkZWYgRFJPUEJFQVJfU01BTExfQ09ERQorI2RlZmluZSBMVENfU01BTExfQ09ERQorI2VuZGlmCisvKiBUaGVzZSBzcGl0IG91dCB3YXJuaW5ncyBldGMgKi8KKyNkZWZpbmUgTFRDX05PX1JPTEMKKworLyogRW5hYmxlIHNlbGYtdGVzdCB0ZXN0IHZlY3RvciBjaGVja2luZyAqLworLyogTm90IGZvciBkcm9wYmVhciAqLworLyojZGVmaW5lIExUQ19URVNUKi8KKworLyogY2xlYW4gdGhlIHN0YWNrIG9mIGZ1bmN0aW9ucyB3aGljaCBwdXQgcHJpdmF0ZSBpbmZvcm1hdGlvbiBvbiBzdGFjayAqLworLyogI2RlZmluZSBMVENfQ0xFQU5fU1RBQ0sgKi8KKworLyogZGlzYWJsZSBhbGwgZmlsZSByZWxhdGVkIGZ1bmN0aW9ucyAqLworLyogI2RlZmluZSBMVENfTk9fRklMRSAqLworCisvKiBkaXNhYmxlIGFsbCBmb3JtcyBvZiBBU00gKi8KKy8qICNkZWZpbmUgTFRDX05PX0FTTSAqLworCisvKiBkaXNhYmxlIEZBU1QgbW9kZSAqLworLyogI2RlZmluZSBMVENfTk9fRkFTVCAqLworCisvKiBkaXNhYmxlIEJTV0FQIG9uIHg4NiAqLworLyogI2RlZmluZSBMVENfTk9fQlNXQVAgKi8KKworCisjaWZkZWYgRFJPUEJFQVJfQkxPV0ZJU0hfQ0JDCisjZGVmaW5lIEJMT1dGSVNICisjZW5kaWYKKworI2lmZGVmIERST1BCRUFSX0FFU19DQkMKKyNkZWZpbmUgUklKTkRBRUwKKyNlbmRpZgorCisjaWZkZWYgRFJPUEJFQVJfVFdPRklTSF9DQkMKKyNkZWZpbmUgVFdPRklTSAorCisvKiBlbmFibGluZyBqdXN0IFRXT0ZJU0hfU01BTEwgd2lsbCBtYWtlIHRoZSBiaW5hcnkgfjFrQiBzbWFsbGVyLCB0dXJuaW5nIG9uCisgKiBUV09GSVNIX1RBQkxFUyB3aWxsIG1ha2UgaXQgYSBmZXcga0IgYmlnZ2VyLCBidXQgcGVyaGFwcyByZWR1Y2VzIHJ1bnRpbWUKKyAqIG1lbW9yeSB1c2FnZT8gKi8KKyNkZWZpbmUgVFdPRklTSF9TTUFMTAorLyojZGVmaW5lIFRXT0ZJU0hfVEFCTEVTKi8KKyNlbmRpZgorCisjaWZkZWYgRFJPUEJFQVJfM0RFU19DQkMKKyNkZWZpbmUgREVTCisjZW5kaWYKKworI2RlZmluZSBMVENfQ0JDX01PREUKKworI2lmIGRlZmluZWQoRFJPUEJFQVJfRFNTKSAmJiBkZWZpbmVkKERTU19QUk9UT0spCisjZGVmaW5lIFNIQTUxMgorI2VuZGlmCisKKyNkZWZpbmUgU0hBMQorCisjaWZkZWYgRFJPUEJFQVJfTUQ1X0hNQUMKKyNkZWZpbmUgTUQ1CisjZW5kaWYKKworI2RlZmluZSBMVENfSE1BQworCisvKiBWYXJpb3VzIHRpZGJpdHMgb2YgbW9kZXJuIG5lYXRvbmVzcyAqLworI2RlZmluZSBCQVNFNjQKKworLyogZGVmYXVsdCBubyBwdGhyZWFkIGZ1bmN0aW9ucyAqLworI2RlZmluZSBMVENfTVVURVhfR0xPQkFMKHgpCisjZGVmaW5lIExUQ19NVVRFWF9QUk9UTyh4KQorI2RlZmluZSBMVENfTVVURVhfVFlQRSh4KQorI2RlZmluZSBMVENfTVVURVhfSU5JVCh4KQorI2RlZmluZSBMVENfTVVURVhfTE9DSyh4KQorI2RlZmluZSBMVENfTVVURVhfVU5MT0NLKHgpCisjZGVmaW5lIEZPUlRVTkFfUE9PTFMgMAorCisvKiBEZWJ1Z2dlcnMgKi8KKworLyogZGVmaW5lIHRoaXMgaWYgeW91IHVzZSBWYWxncmluZCwgbm90ZTogaXQgQ0hBTkdFUyB0aGUgd2F5IFNPQkVSLTEyOCBhbmQgUkM0IHdvcmsgKHNlZSB0aGUgY29kZSkgKi8KKy8qICNkZWZpbmUgTFRDX1ZBTEdSSU5EICovCisKKyNlbmRpZgorCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfY3VzdG9tLmgsdiAkICovCisvKiAkUmV2aXNpb246IDEuNjYgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDI6NTA6MTEgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfaGFzaC5oIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfaGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5OTE2YWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9oYXNoLmgKQEAgLTAsMCArMSwzNzkgQEAKKy8qIC0tLS0gSEFTSCBGVU5DVElPTlMgLS0tLSAqLworI2lmZGVmIFNIQTUxMgorc3RydWN0IHNoYTUxMl9zdGF0ZSB7CisgICAgdWxvbmc2NCAgbGVuZ3RoLCBzdGF0ZVs4XTsKKyAgICB1bnNpZ25lZCBsb25nIGN1cmxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMjhdOworfTsKKyNlbmRpZgorCisjaWZkZWYgU0hBMjU2CitzdHJ1Y3Qgc2hhMjU2X3N0YXRlIHsKKyAgICB1bG9uZzY0IGxlbmd0aDsKKyAgICB1bG9uZzMyIHN0YXRlWzhdLCBjdXJsZW47CisgICAgdW5zaWduZWQgY2hhciBidWZbNjRdOworfTsKKyNlbmRpZgorCisjaWZkZWYgU0hBMQorc3RydWN0IHNoYTFfc3RhdGUgeworICAgIHVsb25nNjQgbGVuZ3RoOworICAgIHVsb25nMzIgc3RhdGVbNV0sIGN1cmxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07Cit9OworI2VuZGlmCisKKyNpZmRlZiBNRDUKK3N0cnVjdCBtZDVfc3RhdGUgeworICAgIHVsb25nNjQgbGVuZ3RoOworICAgIHVsb25nMzIgc3RhdGVbNF0sIGN1cmxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07Cit9OworI2VuZGlmCisKKyNpZmRlZiBNRDQKK3N0cnVjdCBtZDRfc3RhdGUgeworICAgIHVsb25nNjQgbGVuZ3RoOworICAgIHVsb25nMzIgc3RhdGVbNF0sIGN1cmxlbjsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07Cit9OworI2VuZGlmCisKKyNpZmRlZiBUSUdFUgorc3RydWN0IHRpZ2VyX3N0YXRlIHsKKyAgICB1bG9uZzY0IHN0YXRlWzNdLCBsZW5ndGg7CisgICAgdW5zaWduZWQgbG9uZyBjdXJsZW47CisgICAgdW5zaWduZWQgY2hhciBidWZbNjRdOworfTsKKyNlbmRpZgorCisjaWZkZWYgTUQyCitzdHJ1Y3QgbWQyX3N0YXRlIHsKKyAgICB1bnNpZ25lZCBjaGFyIGNoa3N1bVsxNl0sIFhbNDhdLCBidWZbMTZdOworICAgIHVuc2lnbmVkIGxvbmcgY3VybGVuOworfTsKKyNlbmRpZgorCisjaWZkZWYgUklQRU1EMTI4CitzdHJ1Y3Qgcm1kMTI4X3N0YXRlIHsKKyAgICB1bG9uZzY0IGxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisgICAgdWxvbmczMiBjdXJsZW4sIHN0YXRlWzRdOworfTsKKyNlbmRpZgorCisjaWZkZWYgUklQRU1EMTYwCitzdHJ1Y3Qgcm1kMTYwX3N0YXRlIHsKKyAgICB1bG9uZzY0IGxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisgICAgdWxvbmczMiBjdXJsZW4sIHN0YXRlWzVdOworfTsKKyNlbmRpZgorCisjaWZkZWYgUklQRU1EMjU2CitzdHJ1Y3Qgcm1kMjU2X3N0YXRlIHsKKyAgICB1bG9uZzY0IGxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisgICAgdWxvbmczMiBjdXJsZW4sIHN0YXRlWzhdOworfTsKKyNlbmRpZgorCisjaWZkZWYgUklQRU1EMzIwCitzdHJ1Y3Qgcm1kMzIwX3N0YXRlIHsKKyAgICB1bG9uZzY0IGxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1Zls2NF07CisgICAgdWxvbmczMiBjdXJsZW4sIHN0YXRlWzEwXTsKK307CisjZW5kaWYKKworI2lmZGVmIFdISVJMUE9PTAorc3RydWN0IHdoaXJscG9vbF9zdGF0ZSB7CisgICAgdWxvbmc2NCBsZW5ndGgsIHN0YXRlWzhdOworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzY0XTsKKyAgICB1bG9uZzMyIGN1cmxlbjsKK307CisjZW5kaWYKKworI2lmZGVmIENIQ19IQVNICitzdHJ1Y3QgY2hjX3N0YXRlIHsKKyAgICB1bG9uZzY0IGxlbmd0aDsKKyAgICB1bnNpZ25lZCBjaGFyIHN0YXRlW01BWEJMT0NLU0laRV0sIGJ1ZltNQVhCTE9DS1NJWkVdOworICAgIHVsb25nMzIgY3VybGVuOworfTsKKyNlbmRpZgorCit0eXBlZGVmIHVuaW9uIEhhc2hfc3RhdGUgeworICAgIGNoYXIgZHVtbXlbMV07CisjaWZkZWYgQ0hDX0hBU0gKKyAgICBzdHJ1Y3QgY2hjX3N0YXRlIGNoYzsKKyNlbmRpZgorI2lmZGVmIFdISVJMUE9PTAorICAgIHN0cnVjdCB3aGlybHBvb2xfc3RhdGUgd2hpcmxwb29sOworI2VuZGlmCisjaWZkZWYgU0hBNTEyCisgICAgc3RydWN0IHNoYTUxMl9zdGF0ZSBzaGE1MTI7CisjZW5kaWYKKyNpZmRlZiBTSEEyNTYKKyAgICBzdHJ1Y3Qgc2hhMjU2X3N0YXRlIHNoYTI1NjsKKyNlbmRpZgorI2lmZGVmIFNIQTEKKyAgICBzdHJ1Y3Qgc2hhMV9zdGF0ZSAgIHNoYTE7CisjZW5kaWYKKyNpZmRlZiBNRDUKKyAgICBzdHJ1Y3QgbWQ1X3N0YXRlICAgIG1kNTsKKyNlbmRpZgorI2lmZGVmIE1ENAorICAgIHN0cnVjdCBtZDRfc3RhdGUgICAgbWQ0OworI2VuZGlmCisjaWZkZWYgTUQyCisgICAgc3RydWN0IG1kMl9zdGF0ZSAgICBtZDI7CisjZW5kaWYKKyNpZmRlZiBUSUdFUgorICAgIHN0cnVjdCB0aWdlcl9zdGF0ZSAgdGlnZXI7CisjZW5kaWYKKyNpZmRlZiBSSVBFTUQxMjgKKyAgICBzdHJ1Y3Qgcm1kMTI4X3N0YXRlIHJtZDEyODsKKyNlbmRpZgorI2lmZGVmIFJJUEVNRDE2MAorICAgIHN0cnVjdCBybWQxNjBfc3RhdGUgcm1kMTYwOworI2VuZGlmCisjaWZkZWYgUklQRU1EMjU2CisgICAgc3RydWN0IHJtZDI1Nl9zdGF0ZSBybWQyNTY7CisjZW5kaWYKKyNpZmRlZiBSSVBFTUQzMjAKKyAgICBzdHJ1Y3Qgcm1kMzIwX3N0YXRlIHJtZDMyMDsKKyNlbmRpZgorICAgIHZvaWQgKmRhdGE7Cit9IGhhc2hfc3RhdGU7CisKKy8qKiBoYXNoIGRlc2NyaXB0b3IgKi8KK2V4dGVybiAgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3IgeworICAgIC8qKiBuYW1lIG9mIGhhc2ggKi8KKyAgICBjaGFyICpuYW1lOworICAgIC8qKiBpbnRlcm5hbCBJRCAqLworICAgIHVuc2lnbmVkIGNoYXIgSUQ7CisgICAgLyoqIFNpemUgb2YgZGlnZXN0IGluIG9jdGV0cyAqLworICAgIHVuc2lnbmVkIGxvbmcgaGFzaHNpemU7CisgICAgLyoqIElucHV0IGJsb2NrIHNpemUgaW4gb2N0ZXRzICovCisgICAgdW5zaWduZWQgbG9uZyBibG9ja3NpemU7CisgICAgLyoqIEFTTi4xIE9JRCAqLworICAgIHVuc2lnbmVkIGxvbmcgT0lEWzE2XTsKKyAgICAvKiogTGVuZ3RoIG9mIERFUiBlbmNvZGluZyAqLworICAgIHVuc2lnbmVkIGxvbmcgT0lEbGVuOworCisgICAgLyoqIEluaXQgYSBoYXNoIHN0YXRlCisgICAgICBAcGFyYW0gaGFzaCAgIFRoZSBoYXNoIHRvIGluaXRpYWxpemUKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICAgICovCisgICAgaW50ICgqaW5pdCkoaGFzaF9zdGF0ZSAqaGFzaCk7CisgICAgLyoqIFByb2Nlc3MgYSBibG9jayBvZiBkYXRhIAorICAgICAgQHBhcmFtIGhhc2ggICBUaGUgaGFzaCBzdGF0ZQorICAgICAgQHBhcmFtIGluICAgICBUaGUgZGF0YSB0byBoYXNoCisgICAgICBAcGFyYW0gaW5sZW4gIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgKG9jdGV0cykKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICAgICovCisgICAgaW50ICgqcHJvY2VzcykoaGFzaF9zdGF0ZSAqaGFzaCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworICAgIC8qKiBQcm9kdWNlIHRoZSBkaWdlc3QgYW5kIHN0b3JlIGl0CisgICAgICBAcGFyYW0gaGFzaCAgIFRoZSBoYXNoIHN0YXRlCisgICAgICBAcGFyYW0gb3V0ICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgZGlnZXN0CisgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICAqLworICAgIGludCAoKmRvbmUpKGhhc2hfc3RhdGUgKmhhc2gsIHVuc2lnbmVkIGNoYXIgKm91dCk7CisgICAgLyoqIFNlbGYtdGVzdAorICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQKKyAgICAqLworICAgIGludCAoKnRlc3QpKHZvaWQpOworCisgICAgLyogYWNjZWxlcmF0ZWQgaG1hYyBjYWxsYmFjazogaWYgeW91IG5lZWQgdG8tZG8gbXVsdGlwbGUgcGFja2V0cyBqdXN0IHVzZSB0aGUgZ2VuZXJpYyBobWFjX21lbW9yeSBhbmQgcHJvdmlkZSBhIGhhc2ggY2FsbGJhY2sgKi8KKyAgICBpbnQgICgqaG1hY19ibG9jaykoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nICBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKK30gaGFzaF9kZXNjcmlwdG9yW107CisKKyNpZmRlZiBDSENfSEFTSAoraW50IGNoY19yZWdpc3RlcihpbnQgY2lwaGVyKTsKK2ludCBjaGNfaW5pdChoYXNoX3N0YXRlICogbWQpOworaW50IGNoY19wcm9jZXNzKGhhc2hfc3RhdGUgKiBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworaW50IGNoY19kb25lKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqaGFzaCk7CitpbnQgY2hjX3Rlc3Qodm9pZCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3IgY2hjX2Rlc2M7CisjZW5kaWYKKworI2lmZGVmIFdISVJMUE9PTAoraW50IHdoaXJscG9vbF9pbml0KGhhc2hfc3RhdGUgKiBtZCk7CitpbnQgd2hpcmxwb29sX3Byb2Nlc3MoaGFzaF9zdGF0ZSAqIG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbik7CitpbnQgd2hpcmxwb29sX2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpoYXNoKTsKK2ludCB3aGlybHBvb2xfdGVzdCh2b2lkKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciB3aGlybHBvb2xfZGVzYzsKKyNlbmRpZgorCisjaWZkZWYgU0hBNTEyCitpbnQgc2hhNTEyX2luaXQoaGFzaF9zdGF0ZSAqIG1kKTsKK2ludCBzaGE1MTJfcHJvY2VzcyhoYXNoX3N0YXRlICogbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKK2ludCBzaGE1MTJfZG9uZShoYXNoX3N0YXRlICogbWQsIHVuc2lnbmVkIGNoYXIgKmhhc2gpOworaW50IHNoYTUxMl90ZXN0KHZvaWQpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIHNoYTUxMl9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBTSEEzODQKKyNpZm5kZWYgU0hBNTEyCisgICAjZXJyb3IgU0hBNTEyIGlzIHJlcXVpcmVkIGZvciBTSEEzODQKKyNlbmRpZgoraW50IHNoYTM4NF9pbml0KGhhc2hfc3RhdGUgKiBtZCk7CisjZGVmaW5lIHNoYTM4NF9wcm9jZXNzIHNoYTUxMl9wcm9jZXNzCitpbnQgc2hhMzg0X2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpoYXNoKTsKK2ludCBzaGEzODRfdGVzdCh2b2lkKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciBzaGEzODRfZGVzYzsKKyNlbmRpZgorCisjaWZkZWYgU0hBMjU2CitpbnQgc2hhMjU2X2luaXQoaGFzaF9zdGF0ZSAqIG1kKTsKK2ludCBzaGEyNTZfcHJvY2VzcyhoYXNoX3N0YXRlICogbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKK2ludCBzaGEyNTZfZG9uZShoYXNoX3N0YXRlICogbWQsIHVuc2lnbmVkIGNoYXIgKmhhc2gpOworaW50IHNoYTI1Nl90ZXN0KHZvaWQpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIHNoYTI1Nl9kZXNjOworCisjaWZkZWYgU0hBMjI0CisjaWZuZGVmIFNIQTI1NgorICAgI2Vycm9yIFNIQTI1NiBpcyByZXF1aXJlZCBmb3IgU0hBMjI0CisjZW5kaWYKK2ludCBzaGEyMjRfaW5pdChoYXNoX3N0YXRlICogbWQpOworI2RlZmluZSBzaGEyMjRfcHJvY2VzcyBzaGEyNTZfcHJvY2VzcworaW50IHNoYTIyNF9kb25lKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqaGFzaCk7CitpbnQgc2hhMjI0X3Rlc3Qodm9pZCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3Igc2hhMjI0X2Rlc2M7CisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgU0hBMQoraW50IHNoYTFfaW5pdChoYXNoX3N0YXRlICogbWQpOworaW50IHNoYTFfcHJvY2VzcyhoYXNoX3N0YXRlICogbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKK2ludCBzaGExX2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpoYXNoKTsKK2ludCBzaGExX3Rlc3Qodm9pZCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3Igc2hhMV9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBNRDUKK2ludCBtZDVfaW5pdChoYXNoX3N0YXRlICogbWQpOworaW50IG1kNV9wcm9jZXNzKGhhc2hfc3RhdGUgKiBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworaW50IG1kNV9kb25lKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqaGFzaCk7CitpbnQgbWQ1X3Rlc3Qodm9pZCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3IgbWQ1X2Rlc2M7CisjZW5kaWYKKworI2lmZGVmIE1ENAoraW50IG1kNF9pbml0KGhhc2hfc3RhdGUgKiBtZCk7CitpbnQgbWQ0X3Byb2Nlc3MoaGFzaF9zdGF0ZSAqIG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbik7CitpbnQgbWQ0X2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpoYXNoKTsKK2ludCBtZDRfdGVzdCh2b2lkKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciBtZDRfZGVzYzsKKyNlbmRpZgorCisjaWZkZWYgTUQyCitpbnQgbWQyX2luaXQoaGFzaF9zdGF0ZSAqIG1kKTsKK2ludCBtZDJfcHJvY2VzcyhoYXNoX3N0YXRlICogbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKK2ludCBtZDJfZG9uZShoYXNoX3N0YXRlICogbWQsIHVuc2lnbmVkIGNoYXIgKmhhc2gpOworaW50IG1kMl90ZXN0KHZvaWQpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIG1kMl9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBUSUdFUgoraW50IHRpZ2VyX2luaXQoaGFzaF9zdGF0ZSAqIG1kKTsKK2ludCB0aWdlcl9wcm9jZXNzKGhhc2hfc3RhdGUgKiBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworaW50IHRpZ2VyX2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpoYXNoKTsKK2ludCB0aWdlcl90ZXN0KHZvaWQpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIHRpZ2VyX2Rlc2M7CisjZW5kaWYKKworI2lmZGVmIFJJUEVNRDEyOAoraW50IHJtZDEyOF9pbml0KGhhc2hfc3RhdGUgKiBtZCk7CitpbnQgcm1kMTI4X3Byb2Nlc3MoaGFzaF9zdGF0ZSAqIG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbik7CitpbnQgcm1kMTI4X2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpoYXNoKTsKK2ludCBybWQxMjhfdGVzdCh2b2lkKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciBybWQxMjhfZGVzYzsKKyNlbmRpZgorCisjaWZkZWYgUklQRU1EMTYwCitpbnQgcm1kMTYwX2luaXQoaGFzaF9zdGF0ZSAqIG1kKTsKK2ludCBybWQxNjBfcHJvY2VzcyhoYXNoX3N0YXRlICogbWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKK2ludCBybWQxNjBfZG9uZShoYXNoX3N0YXRlICogbWQsIHVuc2lnbmVkIGNoYXIgKmhhc2gpOworaW50IHJtZDE2MF90ZXN0KHZvaWQpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIHJtZDE2MF9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBSSVBFTUQyNTYKK2ludCBybWQyNTZfaW5pdChoYXNoX3N0YXRlICogbWQpOworaW50IHJtZDI1Nl9wcm9jZXNzKGhhc2hfc3RhdGUgKiBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworaW50IHJtZDI1Nl9kb25lKGhhc2hfc3RhdGUgKiBtZCwgdW5zaWduZWQgY2hhciAqaGFzaCk7CitpbnQgcm1kMjU2X3Rlc3Qodm9pZCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3Igcm1kMjU2X2Rlc2M7CisjZW5kaWYKKworI2lmZGVmIFJJUEVNRDMyMAoraW50IHJtZDMyMF9pbml0KGhhc2hfc3RhdGUgKiBtZCk7CitpbnQgcm1kMzIwX3Byb2Nlc3MoaGFzaF9zdGF0ZSAqIG1kLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbik7CitpbnQgcm1kMzIwX2RvbmUoaGFzaF9zdGF0ZSAqIG1kLCB1bnNpZ25lZCBjaGFyICpoYXNoKTsKK2ludCBybWQzMjBfdGVzdCh2b2lkKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciBybWQzMjBfZGVzYzsKKyNlbmRpZgorCisKK2ludCBmaW5kX2hhc2goY29uc3QgY2hhciAqbmFtZSk7CitpbnQgZmluZF9oYXNoX2lkKHVuc2lnbmVkIGNoYXIgSUQpOworaW50IGZpbmRfaGFzaF9vaWQoY29uc3QgdW5zaWduZWQgbG9uZyAqSUQsIHVuc2lnbmVkIGxvbmcgSURsZW4pOworaW50IGZpbmRfaGFzaF9hbnkoY29uc3QgY2hhciAqbmFtZSwgaW50IGRpZ2VzdGxlbik7CitpbnQgcmVnaXN0ZXJfaGFzaChjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciAqaGFzaCk7CitpbnQgdW5yZWdpc3Rlcl9oYXNoKGNvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yICpoYXNoKTsKK2ludCBoYXNoX2lzX3ZhbGlkKGludCBpZHgpOworCitMVENfTVVURVhfUFJPVE8obHRjX2hhc2hfbXV0ZXgpCisKK2ludCBoYXNoX21lbW9yeShpbnQgaGFzaCwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgaGFzaF9tZW1vcnlfbXVsdGkoaW50IGhhc2gsIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCAuLi4pOworaW50IGhhc2hfZmlsZWhhbmRsZShpbnQgaGFzaCwgRklMRSAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBoYXNoX2ZpbGUoaW50IGhhc2gsIGNvbnN0IGNoYXIgKmZuYW1lLCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKKy8qIGEgc2ltcGxlIG1hY3JvIGZvciBtYWtpbmcgaGFzaCAicHJvY2VzcyIgZnVuY3Rpb25zICovCisjZGVmaW5lIEhBU0hfUFJPQ0VTUyhmdW5jX25hbWUsIGNvbXByZXNzX25hbWUsIHN0YXRlX3ZhciwgYmxvY2tfc2l6ZSkgICAgICAgICAgICAgICAgICAgICAgIFwKK2ludCBmdW5jX25hbWUgKGhhc2hfc3RhdGUgKiBtZCwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pICAgICAgICAgICAgICAgXAoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdW5zaWduZWQgbG9uZyBuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpbnQgICAgICAgICAgIGVycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIExUQ19BUkdDSEsobWQgIT0gTlVMTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgTFRDX0FSR0NISyhpbiAhPSBOVUxMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAobWQtPiBzdGF0ZV92YXIgLmN1cmxlbiA+IHNpemVvZihtZC0+IHN0YXRlX3ZhciAuYnVmKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3aGlsZSAoaW5sZW4gPiAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAobWQtPiBzdGF0ZV92YXIgLmN1cmxlbiA9PSAwICYmIGlubGVuID49IGJsb2NrX3NpemUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIGlmICgoZXJyID0gY29tcHJlc3NfbmFtZSAobWQsICh1bnNpZ25lZCBjaGFyICopaW4pKSAhPSBDUllQVF9PSykgeyAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgcmV0dXJuIGVycjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIG1kLT4gc3RhdGVfdmFyIC5sZW5ndGggKz0gYmxvY2tfc2l6ZSAqIDg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgaW4gICAgICAgICAgICAgKz0gYmxvY2tfc2l6ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBibG9ja19zaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgbiA9IE1JTihpbmxlbiwgKGJsb2NrX3NpemUgLSBtZC0+IHN0YXRlX3ZhciAuY3VybGVuKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBtZW1jcHkobWQtPiBzdGF0ZV92YXIgLmJ1ZiArIG1kLT4gc3RhdGVfdmFyLmN1cmxlbiwgaW4sIChzaXplX3Qpbik7ICAgICAgICAgICAgICBcCisgICAgICAgICAgIG1kLT4gc3RhdGVfdmFyIC5jdXJsZW4gKz0gbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgaW4gICAgICAgICAgICAgKz0gbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIGlmIChtZC0+IHN0YXRlX3ZhciAuY3VybGVuID09IGJsb2NrX3NpemUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgaWYgKChlcnIgPSBjb21wcmVzc19uYW1lIChtZCwgbWQtPiBzdGF0ZV92YXIgLmJ1ZikpICE9IENSWVBUX09LKSB7ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgbWQtPiBzdGF0ZV92YXIgLmxlbmd0aCArPSA4KmJsb2NrX3NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICBtZC0+IHN0YXRlX3ZhciAuY3VybGVuID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgcmV0dXJuIENSWVBUX09LOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfaGFzaC5oLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjE5ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA1IDAxOjM2OjQzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X21hYy5oIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJiZjY4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X21hYy5oCkBAIC0wLDAgKzEsMzgxIEBACisjaWZkZWYgTFRDX0hNQUMKK3R5cGVkZWYgc3RydWN0IEhtYWNfc3RhdGUgeworICAgICBoYXNoX3N0YXRlICAgICBtZDsKKyAgICAgaW50ICAgICAgICAgICAgaGFzaDsKKyAgICAgaGFzaF9zdGF0ZSAgICAgaGFzaHN0YXRlOworICAgICB1bnNpZ25lZCBjaGFyICAqa2V5OworfSBobWFjX3N0YXRlOworCitpbnQgaG1hY19pbml0KGhtYWNfc3RhdGUgKmhtYWMsIGludCBoYXNoLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuKTsKK2ludCBobWFjX3Byb2Nlc3MoaG1hY19zdGF0ZSAqaG1hYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworaW50IGhtYWNfZG9uZShobWFjX3N0YXRlICpobWFjLCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgaG1hY190ZXN0KHZvaWQpOworaW50IGhtYWNfbWVtb3J5KGludCBoYXNoLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGhtYWNfbWVtb3J5X211bHRpKGludCBoYXNoLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwgLi4uKTsKK2ludCBobWFjX2ZpbGUoaW50IGhhc2gsIGNvbnN0IGNoYXIgKmZuYW1lLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksCisgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcga2V5bGVuLCAKKyAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0LCB1bnNpZ25lZCBsb25nICpkc3RsZW4pOworI2VuZGlmCisKKyNpZmRlZiBMVENfT01BQworCit0eXBlZGVmIHN0cnVjdCB7CisgICBpbnQgICAgICAgICAgICAgY2lwaGVyX2lkeCwgCisgICAgICAgICAgICAgICAgICAgYnVmbGVuLAorICAgICAgICAgICAgICAgICAgIGJsa2xlbjsKKyAgIHVuc2lnbmVkIGNoYXIgICBibG9ja1tNQVhCTE9DS1NJWkVdLAorICAgICAgICAgICAgICAgICAgIHByZXZbTUFYQkxPQ0tTSVpFXSwKKyAgICAgICAgICAgICAgICAgICBMdVsyXVtNQVhCTE9DS1NJWkVdOworICAgc3ltbWV0cmljX2tleSAgIGtleTsKK30gb21hY19zdGF0ZTsKKworaW50IG9tYWNfaW5pdChvbWFjX3N0YXRlICpvbWFjLCBpbnQgY2lwaGVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuKTsKK2ludCBvbWFjX3Byb2Nlc3Mob21hY19zdGF0ZSAqb21hYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworaW50IG9tYWNfZG9uZShvbWFjX3N0YXRlICpvbWFjLCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgb21hY19tZW1vcnkoaW50IGNpcGhlciwgCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IG9tYWNfbWVtb3J5X211bHRpKGludCBjaXBoZXIsIAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLCAuLi4pOworaW50IG9tYWNfZmlsZShpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgY29uc3QgICAgICAgICAgY2hhciAqZmlsZW5hbWUsIAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgb21hY190ZXN0KHZvaWQpOworI2VuZGlmIC8qIE9NQUMgKi8KKworI2lmZGVmIExUQ19QTUFDCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIHVuc2lnbmVkIGNoYXIgICAgIExzWzMyXVtNQVhCTE9DS1NJWkVdLCAgICAvKiBMIHNoaWZ0ZWQgYnkgaSBiaXRzIHRvIHRoZSBsZWZ0ICovCisgICAgICAgICAgICAgICAgICAgICBMaVtNQVhCTE9DS1NJWkVdLCAgICAgICAgLyogdmFsdWUgb2YgTGkgW2N1cnJlbnQgdmFsdWUsIHdlIGNhbGMgZnJvbSBwcmV2aW91cyByZWNhbGxdICovCisgICAgICAgICAgICAgICAgICAgICBMcltNQVhCTE9DS1NJWkVdLCAgICAgICAgLyogTCAqIHheLTEgKi8KKyAgICAgICAgICAgICAgICAgICAgIGJsb2NrW01BWEJMT0NLU0laRV0sICAgICAvKiBjdXJyZW50bHkgYWNjdW11bGF0ZWQgYmxvY2sgKi8KKyAgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtW01BWEJMT0NLU0laRV07ICAvKiBjdXJyZW50IGNoZWNrc3VtICovCisKKyAgIHN5bW1ldHJpY19rZXkgICAgIGtleTsgICAgICAgICAgICAgICAgICAgICAvKiBzY2hlZHVsZWQga2V5IGZvciBjaXBoZXIgKi8KKyAgIHVuc2lnbmVkIGxvbmcgICAgIGJsb2NrX2luZGV4OyAgICAgICAgICAgICAvKiBpbmRleCAjIGZvciBjdXJyZW50IGJsb2NrICovCisgICBpbnQgICAgICAgICAgICAgICBjaXBoZXJfaWR4LCAgICAgICAgICAgICAgLyogY2lwaGVyIGlkeCAqLworICAgICAgICAgICAgICAgICAgICAgYmxvY2tfbGVuLCAgICAgICAgICAgICAgIC8qIGxlbmd0aCBvZiBibG9jayAqLworICAgICAgICAgICAgICAgICAgICAgYnVmbGVuOyAgICAgICAgICAgICAgICAgIC8qIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnVmZmVyICovCit9IHBtYWNfc3RhdGU7CisKK2ludCBwbWFjX2luaXQocG1hY19zdGF0ZSAqcG1hYywgaW50IGNpcGhlciwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbik7CitpbnQgcG1hY19wcm9jZXNzKHBtYWNfc3RhdGUgKnBtYWMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKK2ludCBwbWFjX2RvbmUocG1hY19zdGF0ZSAqcG1hYywgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgcG1hY19tZW1vcnkoaW50IGNpcGhlciwgCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLCB1bnNpZ25lZCBsb25nIG1zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IHBtYWNfbWVtb3J5X211bHRpKGludCBjaXBoZXIsIAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIC4uLik7CisKK2ludCBwbWFjX2ZpbGUoaW50IGNpcGhlciwgCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICBjb25zdCAgICAgICAgICBjaGFyICpmaWxlbmFtZSwgCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgcG1hY190ZXN0KHZvaWQpOworCisvKiBpbnRlcm5hbCBmdW5jdGlvbnMgKi8KK2ludCBwbWFjX250eih1bnNpZ25lZCBsb25nIHgpOwordm9pZCBwbWFjX3NoaWZ0X3hvcihwbWFjX3N0YXRlICpwbWFjKTsKKworI2VuZGlmIC8qIFBNQUMgKi8KKworI2lmZGVmIEVBWF9NT0RFCisKKyNpZiAhKGRlZmluZWQoTFRDX09NQUMpICYmIGRlZmluZWQoTFRDX0NUUl9NT0RFKSkKKyAgICNlcnJvciBFQVhfTU9ERSByZXF1aXJlcyBPTUFDIGFuZCBDVFIKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7CisgICB1bnNpZ25lZCBjaGFyIE5bTUFYQkxPQ0tTSVpFXTsKKyAgIHN5bW1ldHJpY19DVFIgY3RyOworICAgb21hY19zdGF0ZSAgICBoZWFkZXJvbWFjLCBjdG9tYWM7Cit9IGVheF9zdGF0ZTsKKworaW50IGVheF9pbml0KGVheF9zdGF0ZSAqZWF4LCBpbnQgY2lwaGVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4pOworCitpbnQgZWF4X2VuY3J5cHQoZWF4X3N0YXRlICplYXgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBsZW5ndGgpOworaW50IGVheF9kZWNyeXB0KGVheF9zdGF0ZSAqZWF4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKK2ludCBlYXhfYWRkaGVhZGVyKGVheF9zdGF0ZSAqZWF4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkZXIsIHVuc2lnbmVkIGxvbmcgbGVuZ3RoKTsKK2ludCBlYXhfZG9uZShlYXhfc3RhdGUgKmVheCwgdW5zaWduZWQgY2hhciAqdGFnLCB1bnNpZ25lZCBsb25nICp0YWdsZW4pOworCitpbnQgZWF4X2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeShpbnQgY2lwaGVyLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4sCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcHQsICAgICB1bnNpZ25lZCBsb25nIHB0bGVuLAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgICAgdW5zaWduZWQgbG9uZyAqdGFnbGVuKTsKKworaW50IGVheF9kZWNyeXB0X3ZlcmlmeV9tZW1vcnkoaW50IGNpcGhlciwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksICAgIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlLCAgdW5zaWduZWQgbG9uZyBub25jZWxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoZWFkZXIsIHVuc2lnbmVkIGxvbmcgaGVhZGVybGVuLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCAgICAgdW5zaWduZWQgbG9uZyBjdGxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsICAgIHVuc2lnbmVkIGxvbmcgdGFnbGVuLAorICAgICAgICAgIGludCAgICAgICAgICAgKnN0YXQpOworCisgaW50IGVheF90ZXN0KHZvaWQpOworI2VuZGlmIC8qIEVBWCBNT0RFICovCisKKyNpZmRlZiBPQ0JfTU9ERQordHlwZWRlZiBzdHJ1Y3QgeworICAgdW5zaWduZWQgY2hhciAgICAgTFtNQVhCTE9DS1NJWkVdLCAgICAgICAgIC8qIEwgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgIExzWzMyXVtNQVhCTE9DS1NJWkVdLCAgICAvKiBMIHNoaWZ0ZWQgYnkgaSBiaXRzIHRvIHRoZSBsZWZ0ICovCisgICAgICAgICAgICAgICAgICAgICBMaVtNQVhCTE9DS1NJWkVdLCAgICAgICAgLyogdmFsdWUgb2YgTGkgW2N1cnJlbnQgdmFsdWUsIHdlIGNhbGMgZnJvbSBwcmV2aW91cyByZWNhbGxdICovCisgICAgICAgICAgICAgICAgICAgICBMcltNQVhCTE9DS1NJWkVdLCAgICAgICAgLyogTCAqIHheLTEgKi8KKyAgICAgICAgICAgICAgICAgICAgIFJbTUFYQkxPQ0tTSVpFXSwgICAgICAgICAvKiBSIHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bVtNQVhCTE9DS1NJWkVdOyAgLyogY3VycmVudCBjaGVja3N1bSAqLworCisgICBzeW1tZXRyaWNfa2V5ICAgICBrZXk7ICAgICAgICAgICAgICAgICAgICAgLyogc2NoZWR1bGVkIGtleSBmb3IgY2lwaGVyICovCisgICB1bnNpZ25lZCBsb25nICAgICBibG9ja19pbmRleDsgICAgICAgICAgICAgLyogaW5kZXggIyBmb3IgY3VycmVudCBibG9jayAqLworICAgaW50ICAgICAgICAgICAgICAgY2lwaGVyLCAgICAgICAgICAgICAgICAgIC8qIGNpcGhlciBpZHggKi8KKyAgICAgICAgICAgICAgICAgICAgIGJsb2NrX2xlbjsgICAgICAgICAgICAgICAvKiBsZW5ndGggb2YgYmxvY2sgKi8KK30gb2NiX3N0YXRlOworCitpbnQgb2NiX2luaXQob2NiX3N0YXRlICpvY2IsIGludCBjaXBoZXIsIAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5vbmNlKTsKKworaW50IG9jYl9lbmNyeXB0KG9jYl9zdGF0ZSAqb2NiLCBjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QpOworaW50IG9jYl9kZWNyeXB0KG9jYl9zdGF0ZSAqb2NiLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQpOworCitpbnQgb2NiX2RvbmVfZW5jcnlwdChvY2Jfc3RhdGUgKm9jYiwgCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgIHVuc2lnbmVkIGxvbmcgcHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbik7CisKK2ludCBvY2JfZG9uZV9kZWNyeXB0KG9jYl9zdGF0ZSAqb2NiLCAKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCAgdW5zaWduZWQgbG9uZyBjdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhZywgdW5zaWduZWQgbG9uZyB0YWdsZW4sIGludCAqc3RhdCk7CisKK2ludCBvY2JfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5KGludCBjaXBoZXIsCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgIAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCAgICAgdW5zaWduZWQgbG9uZyBwdGxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsICAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbik7CisKK2ludCBvY2JfZGVjcnlwdF92ZXJpZnlfbWVtb3J5KGludCBjaXBoZXIsCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpub25jZSwgIAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCAgICAgdW5zaWduZWQgbG9uZyBjdGxlbiwKKyAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwdCwKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICp0YWcsICAgIHVuc2lnbmVkIGxvbmcgdGFnbGVuLAorICAgICAgICAgIGludCAgICAgICAgICAgKnN0YXQpOworCitpbnQgb2NiX3Rlc3Qodm9pZCk7CisKKy8qIGludGVybmFsIGZ1bmN0aW9ucyAqLwordm9pZCBvY2Jfc2hpZnRfeG9yKG9jYl9zdGF0ZSAqb2NiLCB1bnNpZ25lZCBjaGFyICpaKTsKK2ludCBvY2JfbnR6KHVuc2lnbmVkIGxvbmcgeCk7CitpbnQgc19vY2JfZG9uZShvY2Jfc3RhdGUgKm9jYiwgY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgcHRsZW4sCisgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqdGFnLCB1bnNpZ25lZCBsb25nICp0YWdsZW4sIGludCBtb2RlKTsKKworI2VuZGlmIC8qIE9DQl9NT0RFICovCisKKyNpZmRlZiBDQ01fTU9ERQorCisjZGVmaW5lIENDTV9FTkNSWVBUIDAKKyNkZWZpbmUgQ0NNX0RFQ1JZUFQgMQorCitpbnQgY2NtX21lbW9yeShpbnQgY2lwaGVyLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgc3ltbWV0cmljX2tleSAgICAgICAqdXNrZXksCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbm9uY2UsICB1bnNpZ25lZCBsb25nIG5vbmNlbGVuLAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhlYWRlciwgdW5zaWduZWQgbG9uZyBoZWFkZXJsZW4sCisgICAgICAgICAgdW5zaWduZWQgY2hhciAqcHQsICAgICB1bnNpZ25lZCBsb25nIHB0bGVuLAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LAorICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgICAgdW5zaWduZWQgbG9uZyAqdGFnbGVuLAorICAgICAgICAgICAgICAgICAgICBpbnQgIGRpcmVjdGlvbik7CisKK2ludCBjY21fdGVzdCh2b2lkKTsKKworI2VuZGlmIC8qIENDTV9NT0RFICovCisKKyNpZiBkZWZpbmVkKExSV19NT0RFKSB8fCBkZWZpbmVkKEdDTV9NT0RFKQordm9pZCBnY21fZ2ZfbXVsdChjb25zdCB1bnNpZ25lZCBjaGFyICphLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiLCB1bnNpZ25lZCBjaGFyICpjKTsKKyNlbmRpZgorCisKKy8qIHRhYmxlIHNoYXJlZCBiZXR3ZWVuIEdDTSBhbmQgTFJXICovCisjaWYgZGVmaW5lZChHQ01fVEFCTEVTKSB8fCBkZWZpbmVkKExSV19UQUJMRVMpIHx8ICgoZGVmaW5lZChHQ01fTU9ERSkgfHwgZGVmaW5lZChHQ01fTU9ERSkpICYmIGRlZmluZWQoTFRDX0ZBU1QpKQorZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ2NtX3NoaWZ0X3RhYmxlW107CisjZW5kaWYKKworI2lmZGVmIEdDTV9NT0RFCisKKyNkZWZpbmUgR0NNX0VOQ1JZUFQgMAorI2RlZmluZSBHQ01fREVDUllQVCAxCisKKyNkZWZpbmUgR0NNX01PREVfSVYgICAgMAorI2RlZmluZSBHQ01fTU9ERV9BQUQgICAxCisjZGVmaW5lIEdDTV9NT0RFX1RFWFQgIDIKKwordHlwZWRlZiBzdHJ1Y3QgeyAKKyAgIHN5bW1ldHJpY19rZXkgICAgICAgSzsKKyAgIHVuc2lnbmVkIGNoYXIgICAgICAgSFsxNl0sICAgICAgICAvKiBtdWx0aXBsaWVyICovCisgICAgICAgICAgICAgICAgICAgICAgIFhbMTZdLCAgICAgICAgLyogYWNjdW11bGF0b3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgWVsxNl0sICAgICAgICAvKiBjb3VudGVyICovCisgICAgICAgICAgICAgICAgICAgICAgIFlfMFsxNl0sICAgICAgLyogaW5pdGlhbCBjb3VudGVyICovCisgICAgICAgICAgICAgICAgICAgICAgIGJ1ZlsxNl07ICAgICAgLyogYnVmZmVyIGZvciBzdHVmZiAqLworCisgICBpbnQgICAgICAgICAgICAgICAgIGNpcGhlciwgICAgICAgLyogd2hpY2ggY2lwaGVyICovCisgICAgICAgICAgICAgICAgICAgICAgIGl2bW9kZSwgICAgICAgLyogV2hpY2ggbW9kZSBpcyB0aGUgSVYgaW4/ICovCisgICAgICAgICAgICAgICAgICAgICAgIG1vZGUsICAgICAgICAgLyogbW9kZSB0aGUgR0NNIGNvZGUgaXMgaW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgYnVmbGVuOyAgICAgICAvKiBsZW5ndGggb2YgZGF0YSBpbiBidWYgKi8KKworICAgdWxvbmc2NCAgICAgICAgICAgICB0b3RsZW4sICAgICAgIC8qIDY0LWJpdCBjb3VudGVyIHVzZWQgZm9yIElWIGFuZCBBQUQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgcHR0b3RsZW47ICAgICAvKiA2NC1iaXQgY291bnRlciBmb3IgdGhlIFBUICovCisKKyNpZmRlZiBHQ01fVEFCTEVTCisgICB1bnNpZ25lZCBjaGFyICAgICAgIFBDWzE2XVsyNTZdWzE2XSAgLyogMTYgdGFibGVzIG9mIDh4MTI4ICovCisjaWZkZWYgR0NNX1RBQkxFU19TU0UyCitfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSkKKyNlbmRpZgorOworI2VuZGlmICAKK30gZ2NtX3N0YXRlOworCit2b2lkIGdjbV9tdWx0X2goZ2NtX3N0YXRlICpnY20sIHVuc2lnbmVkIGNoYXIgKkkpOworCitpbnQgZ2NtX2luaXQoZ2NtX3N0YXRlICpnY20sIGludCBjaXBoZXIsCisgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCBpbnQga2V5bGVuKTsKKworaW50IGdjbV9yZXNldChnY21fc3RhdGUgKmdjbSk7CisKK2ludCBnY21fYWRkX2l2KGdjbV9zdGF0ZSAqZ2NtLCAKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCAgICAgdW5zaWduZWQgbG9uZyBJVmxlbik7CisKK2ludCBnY21fYWRkX2FhZChnY21fc3RhdGUgKmdjbSwKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkYXRhLCAgdW5zaWduZWQgbG9uZyBhZGF0YWxlbik7CisKK2ludCBnY21fcHJvY2VzcyhnY21fc3RhdGUgKmdjbSwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAgICAgdW5zaWduZWQgbG9uZyBwdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LAorICAgICAgICAgICAgICAgICAgICAgaW50IGRpcmVjdGlvbik7CisKK2ludCBnY21fZG9uZShnY21fc3RhdGUgKmdjbSwgCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICp0YWcsICAgIHVuc2lnbmVkIGxvbmcgKnRhZ2xlbik7CisKK2ludCBnY21fbWVtb3J5KCAgICAgIGludCAgICAgICAgICAgY2lwaGVyLAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgICB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCAgICAgdW5zaWduZWQgbG9uZyBJVmxlbiwKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkYXRhLCAgdW5zaWduZWQgbG9uZyBhZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnB0LCAgICAgdW5zaWduZWQgbG9uZyBwdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmN0LCAKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnRhZywgICAgdW5zaWduZWQgbG9uZyAqdGFnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXJlY3Rpb24pOworaW50IGdjbV90ZXN0KHZvaWQpOworCisjZW5kaWYgLyogR0NNX01PREUgKi8KKworI2lmZGVmIFBFTElDQU4KKwordHlwZWRlZiBzdHJ1Y3QgcGVsaWNhbl9zdGF0ZQoreworICAgIHN5bW1ldHJpY19rZXkgSzsKKyAgICB1bnNpZ25lZCBjaGFyIHN0YXRlWzE2XTsKKyAgICBpbnQgICAgICAgICAgIGJ1ZmxlbjsKK30gcGVsaWNhbl9zdGF0ZTsKKworaW50IHBlbGljYW5faW5pdChwZWxpY2FuX3N0YXRlICpwZWxtYWMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4pOworaW50IHBlbGljYW5fcHJvY2VzcyhwZWxpY2FuX3N0YXRlICpwZWxtYWMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKTsKK2ludCBwZWxpY2FuX2RvbmUocGVsaWNhbl9zdGF0ZSAqcGVsbWFjLCB1bnNpZ25lZCBjaGFyICpvdXQpOworaW50IHBlbGljYW5fdGVzdCh2b2lkKTsKKworaW50IHBlbGljYW5fbWVtb3J5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0KTsKKworI2VuZGlmCisKKyNpZmRlZiBMVENfWENCQworCit0eXBlZGVmIHN0cnVjdCB7CisgICB1bnNpZ25lZCBjaGFyIEtbM11bTUFYQkxPQ0tTSVpFXSwKKyAgICAgICAgICAgICAgICAgSVZbTUFYQkxPQ0tTSVpFXTsKKworICAgc3ltbWV0cmljX2tleSBrZXk7CisKKyAgICAgICAgICAgICBpbnQgY2lwaGVyLAorICAgICAgICAgICAgICAgICBidWZsZW4sCisgICAgICAgICAgICAgICAgIGJsb2Nrc2l6ZTsKK30geGNiY19zdGF0ZTsKKworaW50IHhjYmNfaW5pdCh4Y2JjX3N0YXRlICp4Y2JjLCBpbnQgY2lwaGVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuKTsKK2ludCB4Y2JjX3Byb2Nlc3MoeGNiY19zdGF0ZSAqeGNiYywgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworaW50IHhjYmNfZG9uZSh4Y2JjX3N0YXRlICp4Y2JjLCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgeGNiY19tZW1vcnkoaW50IGNpcGhlciwgCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IHhjYmNfbWVtb3J5X211bHRpKGludCBjaXBoZXIsIAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLCAuLi4pOworaW50IHhjYmNfZmlsZShpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgY29uc3QgICAgICAgICAgY2hhciAqZmlsZW5hbWUsIAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgeGNiY190ZXN0KHZvaWQpOworCisjZW5kaWYKKworI2lmZGVmIExUQ19GOV9NT0RFCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIHVuc2lnbmVkIGNoYXIgYWtleVtNQVhCTE9DS1NJWkVdLAorICAgICAgICAgICAgICAgICBBQ0NbTUFYQkxPQ0tTSVpFXSwKKyAgICAgICAgICAgICAgICAgSVZbTUFYQkxPQ0tTSVpFXTsKKworICAgc3ltbWV0cmljX2tleSBrZXk7CisKKyAgICAgICAgICAgICBpbnQgY2lwaGVyLAorICAgICAgICAgICAgICAgICBidWZsZW4sCisgICAgICAgICAgICAgICAgIGtleWxlbiwKKyAgICAgICAgICAgICAgICAgYmxvY2tzaXplOworfSBmOV9zdGF0ZTsKKworaW50IGY5X2luaXQoZjlfc3RhdGUgKmY5LCBpbnQgY2lwaGVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuKTsKK2ludCBmOV9wcm9jZXNzKGY5X3N0YXRlICpmOSwgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworaW50IGY5X2RvbmUoZjlfc3RhdGUgKmY5LCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgZjlfbWVtb3J5KGludCBjaXBoZXIsIAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBmOV9tZW1vcnlfbXVsdGkoaW50IGNpcGhlciwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sIC4uLik7CitpbnQgZjlfZmlsZShpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgY29uc3QgICAgICAgICAgY2hhciAqZmlsZW5hbWUsIAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgZjlfdGVzdCh2b2lkKTsKKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjLmgsdiAkICovCisvKiAkUmV2aXNpb246IDEuMjAgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjE6NTc6MDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmggYi9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9tYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2JkYTliCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgKQEAgLTAsMCArMSw0MjQgQEAKKy8qIGZpeCBmb3IgTVNWQyAuLi5ldmlsISAqLworI2lmZGVmIF9NU0NfVkVSCisgICAjZGVmaW5lIENPTlNUNjQobikgbiAjIyB1aTY0CisgICB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWxvbmc2NDsKKyNlbHNlCisgICAjZGVmaW5lIENPTlNUNjQobikgbiAjIyBVTEwKKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVsb25nNjQ7CisjZW5kaWYKKworLyogdGhpcyBpcyB0aGUgIjMyLWJpdCBhdCBsZWFzdCIgZGF0YSB0eXBlIAorICogUmUtZGVmaW5lIGl0IHRvIHN1aXQgeW91ciBwbGF0Zm9ybSBidXQgaXQgbXVzdCBiZSBhdCBsZWFzdCAzMi1iaXRzIAorICovCisjaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCAoZGVmaW5lZChfX3NwYXJjX18pICYmIGRlZmluZWQoX19hcmNoNjRfXykpCisgICB0eXBlZGVmIHVuc2lnbmVkIHVsb25nMzI7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nMzI7CisjZW5kaWYKKworLyogLS0tLSBIRUxQRVIgTUFDUk9TIC0tLS0gKi8KKyNpZmRlZiBFTkRJQU5fTkVVVFJBTAorCisjZGVmaW5lIFNUT1JFMzJMKHgsIHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB7ICh5KVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4yNCkmMjU1KTsgKHkpWzJdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjE2KSYyNTUpOyAgIFwKKyAgICAgICAoeSlbMV0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+OCkmMjU1KTsgKHkpWzBdID0gKHVuc2lnbmVkIGNoYXIpKCh4KSYyNTUpOyB9CisKKyNkZWZpbmUgTE9BRDMyTCh4LCB5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIHsgeCA9ICgodW5zaWduZWQgbG9uZykoKHkpWzNdICYgMjU1KTw8MjQpIHwgXAorICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpKCh5KVsyXSAmIDI1NSk8PDE2KSB8IFwKKyAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKSgoeSlbMV0gJiAyNTUpPDw4KSAgfCBcCisgICAgICAgICAgICgodW5zaWduZWQgbG9uZykoKHkpWzBdICYgMjU1KSk7IH0KKworI2RlZmluZSBTVE9SRTY0TCh4LCB5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgeyAoeSlbN10gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+NTYpJjI1NSk7ICh5KVs2XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj40OCkmMjU1KTsgICBcCisgICAgICAgKHkpWzVdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjQwKSYyNTUpOyAoeSlbNF0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MzIpJjI1NSk7ICAgXAorICAgICAgICh5KVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4yNCkmMjU1KTsgKHkpWzJdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjE2KSYyNTUpOyAgIFwKKyAgICAgICAoeSlbMV0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+OCkmMjU1KTsgKHkpWzBdID0gKHVuc2lnbmVkIGNoYXIpKCh4KSYyNTUpOyB9CisKKyNkZWZpbmUgTE9BRDY0TCh4LCB5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIHsgeCA9ICgoKHVsb25nNjQpKCh5KVs3XSAmIDI1NSkpPDw1Nil8KCgodWxvbmc2NCkoKHkpWzZdICYgMjU1KSk8PDQ4KXwgXAorICAgICAgICAgICAoKCh1bG9uZzY0KSgoeSlbNV0gJiAyNTUpKTw8NDApfCgoKHVsb25nNjQpKCh5KVs0XSAmIDI1NSkpPDwzMil8IFwKKyAgICAgICAgICAgKCgodWxvbmc2NCkoKHkpWzNdICYgMjU1KSk8PDI0KXwoKCh1bG9uZzY0KSgoeSlbMl0gJiAyNTUpKTw8MTYpfCBcCisgICAgICAgICAgICgoKHVsb25nNjQpKCh5KVsxXSAmIDI1NSkpPDw4KXwoKCh1bG9uZzY0KSgoeSlbMF0gJiAyNTUpKSk7IH0KKworI2RlZmluZSBTVE9SRTMySCh4LCB5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgeyAoeSlbMF0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MjQpJjI1NSk7ICh5KVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4xNikmMjU1KTsgICBcCisgICAgICAgKHkpWzJdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjgpJjI1NSk7ICh5KVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCkmMjU1KTsgfQorCisjZGVmaW5lIExPQUQzMkgoeCwgeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB7IHggPSAoKHVuc2lnbmVkIGxvbmcpKCh5KVswXSAmIDI1NSk8PDI0KSB8IFwKKyAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKSgoeSlbMV0gJiAyNTUpPDwxNikgfCBcCisgICAgICAgICAgICgodW5zaWduZWQgbG9uZykoKHkpWzJdICYgMjU1KTw8OCkgIHwgXAorICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpKCh5KVszXSAmIDI1NSkpOyB9CisKKyNkZWZpbmUgU1RPUkU2NEgoeCwgeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB7ICh5KVswXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj41NikmMjU1KTsgKHkpWzFdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjQ4KSYyNTUpOyAgICAgXAorICAgICAoeSlbMl0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+NDApJjI1NSk7ICh5KVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4zMikmMjU1KTsgICAgIFwKKyAgICAgKHkpWzRdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjI0KSYyNTUpOyAoeSlbNV0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MTYpJjI1NSk7ICAgICBcCisgICAgICh5KVs2XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj44KSYyNTUpOyAoeSlbN10gPSAodW5zaWduZWQgY2hhcikoKHgpJjI1NSk7IH0KKworI2RlZmluZSBMT0FENjRIKHgsIHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgeyB4ID0gKCgodWxvbmc2NCkoKHkpWzBdICYgMjU1KSk8PDU2KXwoKCh1bG9uZzY0KSgoeSlbMV0gJiAyNTUpKTw8NDgpIHwgXAorICAgICAgICAgKCgodWxvbmc2NCkoKHkpWzJdICYgMjU1KSk8PDQwKXwoKCh1bG9uZzY0KSgoeSlbM10gJiAyNTUpKTw8MzIpIHwgXAorICAgICAgICAgKCgodWxvbmc2NCkoKHkpWzRdICYgMjU1KSk8PDI0KXwoKCh1bG9uZzY0KSgoeSlbNV0gJiAyNTUpKTw8MTYpIHwgXAorICAgICAgICAgKCgodWxvbmc2NCkoKHkpWzZdICYgMjU1KSk8PDgpfCgoKHVsb25nNjQpKCh5KVs3XSAmIDI1NSkpKTsgfQorCisjZW5kaWYgLyogRU5ESUFOX05FVVRSQUwgKi8KKworI2lmZGVmIEVORElBTl9MSVRUTEUKKworI2lmICFkZWZpbmVkKExUQ19OT19CU1dBUCkgJiYgKGRlZmluZWQoSU5URUxfQ0MpIHx8IChkZWZpbmVkKF9fR05VQ19fKSAmJiAoZGVmaW5lZChfX0RKR1BQX18pIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX01JTkdXMzJfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSkpKQorCisjZGVmaW5lIFNUT1JFMzJIKHgsIHkpICAgICAgICAgICBcCithc20gX192b2xhdGlsZV9fICggICAgICAgICAgICAgICBcCisgICAiYnN3YXBsICUwICAgICBcblx0IiAgICAgICAgICBcCisgICAibW92bCAgICUwLCglMSlcblx0IiAgICAgICAgICBcCisgICAiYnN3YXBsICUwICAgICBcblx0IiAgICAgICAgICBcCisgICAgICA6OiJyIih4KSwgInIiKHkpKTsKKworI2RlZmluZSBMT0FEMzJIKHgsIHkpICAgICAgICAgIFwKK2FzbSBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICBcCisgICAibW92bCAoJTEpLCUwXG5cdCIgICAgICAgICAgXAorICAgImJzd2FwbCAlMFxuXHQiICAgICAgICAgICAgIFwKKyAgIDoiPXIiKHgpOiAiciIoeSkpOworCisjZWxzZQorCisjZGVmaW5lIFNUT1JFMzJIKHgsIHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB7ICh5KVswXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4yNCkmMjU1KTsgKHkpWzFdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjE2KSYyNTUpOyAgIFwKKyAgICAgICAoeSlbMl0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+OCkmMjU1KTsgKHkpWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh4KSYyNTUpOyB9CisKKyNkZWZpbmUgTE9BRDMySCh4LCB5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIHsgeCA9ICgodW5zaWduZWQgbG9uZykoKHkpWzBdICYgMjU1KTw8MjQpIHwgXAorICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpKCh5KVsxXSAmIDI1NSk8PDE2KSB8IFwKKyAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKSgoeSlbMl0gJiAyNTUpPDw4KSAgfCBcCisgICAgICAgICAgICgodW5zaWduZWQgbG9uZykoKHkpWzNdICYgMjU1KSk7IH0KKworI2VuZGlmCisKKworLyogeDg2XzY0IHByb2Nlc3NvciAqLworI2lmICFkZWZpbmVkKExUQ19OT19CU1dBUCkgJiYgKGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX194ODZfNjRfXykpCisKKyNkZWZpbmUgU1RPUkU2NEgoeCwgeSkgICAgICAgICAgIFwKK2FzbSBfX3ZvbGF0aWxlX18gKCAgICAgICAgICAgICAgIFwKKyAgICJic3dhcHEgJTAgICAgIFxuXHQiICAgICAgICAgIFwKKyAgICJtb3ZxICAgJTAsKCUxKVxuXHQiICAgICAgICAgIFwKKyAgICJic3dhcHEgJTAgICAgIFxuXHQiICAgICAgICAgIFwKKyAgICAgIDo6InIiKHgpLCAiciIoeSkpOworCisjZGVmaW5lIExPQUQ2NEgoeCwgeSkgICAgICAgICAgXAorYXNtIF9fdm9sYXRpbGVfXyAoICAgICAgICAgICAgIFwKKyAgICJtb3ZxICglMSksJTBcblx0IiAgICAgICAgICBcCisgICAiYnN3YXBxICUwXG5cdCIgICAgICAgICAgICAgXAorICAgOiI9ciIoeCk6ICJyIih5KSk7CisKKyNlbHNlCisKKyNkZWZpbmUgU1RPUkU2NEgoeCwgeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB7ICh5KVswXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj41NikmMjU1KTsgKHkpWzFdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjQ4KSYyNTUpOyAgICAgXAorICAgICAoeSlbMl0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+NDApJjI1NSk7ICh5KVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4zMikmMjU1KTsgICAgIFwKKyAgICAgKHkpWzRdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjI0KSYyNTUpOyAoeSlbNV0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MTYpJjI1NSk7ICAgICBcCisgICAgICh5KVs2XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj44KSYyNTUpOyAoeSlbN10gPSAodW5zaWduZWQgY2hhcikoKHgpJjI1NSk7IH0KKworI2RlZmluZSBMT0FENjRIKHgsIHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgeyB4ID0gKCgodWxvbmc2NCkoKHkpWzBdICYgMjU1KSk8PDU2KXwoKCh1bG9uZzY0KSgoeSlbMV0gJiAyNTUpKTw8NDgpIHwgXAorICAgICAgICAgKCgodWxvbmc2NCkoKHkpWzJdICYgMjU1KSk8PDQwKXwoKCh1bG9uZzY0KSgoeSlbM10gJiAyNTUpKTw8MzIpIHwgXAorICAgICAgICAgKCgodWxvbmc2NCkoKHkpWzRdICYgMjU1KSk8PDI0KXwoKCh1bG9uZzY0KSgoeSlbNV0gJiAyNTUpKTw8MTYpIHwgXAorICAgICAgICAgKCgodWxvbmc2NCkoKHkpWzZdICYgMjU1KSk8PDgpfCgoKHVsb25nNjQpKCh5KVs3XSAmIDI1NSkpKTsgfQorCisjZW5kaWYKKworI2lmZGVmIEVORElBTl8zMkJJVFdPUkQgCisKKyNkZWZpbmUgU1RPUkUzMkwoeCwgeSkgICAgICAgIFwKKyAgICAgeyB1bG9uZzMyICBfX3QgPSAoeCk7IFhNRU1DUFkoeSwgJl9fdCwgNCk7IH0KKworI2RlZmluZSBMT0FEMzJMKHgsIHkpICAgICAgICAgXAorICAgICBYTUVNQ1BZKCYoeCksIHksIDQpOworCisjZGVmaW5lIFNUT1JFNjRMKHgsIHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICB7ICh5KVs3XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj41NikmMjU1KTsgKHkpWzZdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjQ4KSYyNTUpOyAgIFwKKyAgICAgICAoeSlbNV0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+NDApJjI1NSk7ICh5KVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4zMikmMjU1KTsgICBcCisgICAgICAgKHkpWzNdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjI0KSYyNTUpOyAoeSlbMl0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MTYpJjI1NSk7ICAgXAorICAgICAgICh5KVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj44KSYyNTUpOyAoeSlbMF0gPSAodW5zaWduZWQgY2hhcikoKHgpJjI1NSk7IH0KKworI2RlZmluZSBMT0FENjRMKHgsIHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgeyB4ID0gKCgodWxvbmc2NCkoKHkpWzddICYgMjU1KSk8PDU2KXwoKCh1bG9uZzY0KSgoeSlbNl0gJiAyNTUpKTw8NDgpfCBcCisgICAgICAgICAgICgoKHVsb25nNjQpKCh5KVs1XSAmIDI1NSkpPDw0MCl8KCgodWxvbmc2NCkoKHkpWzRdICYgMjU1KSk8PDMyKXwgXAorICAgICAgICAgICAoKCh1bG9uZzY0KSgoeSlbM10gJiAyNTUpKTw8MjQpfCgoKHVsb25nNjQpKCh5KVsyXSAmIDI1NSkpPDwxNil8IFwKKyAgICAgICAgICAgKCgodWxvbmc2NCkoKHkpWzFdICYgMjU1KSk8PDgpfCgoKHVsb25nNjQpKCh5KVswXSAmIDI1NSkpKTsgfQorCisjZWxzZSAvKiA2NC1iaXQgd29yZHMgdGhlbiAgKi8KKworI2RlZmluZSBTVE9SRTMyTCh4LCB5KSAgICAgICAgXAorICAgICB7IHVsb25nMzIgX190ID0gKHgpOyBYTUVNQ1BZKHksICZfX3QsIDQpOyB9CisKKyNkZWZpbmUgTE9BRDMyTCh4LCB5KSAgICAgICAgIFwKKyAgICAgeyBYTUVNQ1BZKCYoeCksIHksIDQpOyB4ICY9IDB4RkZGRkZGRkY7IH0KKworI2RlZmluZSBTVE9SRTY0TCh4LCB5KSAgICAgICAgXAorICAgICB7IHVsb25nNjQgX190ID0gKHgpOyBYTUVNQ1BZKHksICZfX3QsIDgpOyB9CisKKyNkZWZpbmUgTE9BRDY0TCh4LCB5KSAgICAgICAgIFwKKyAgICB7IFhNRU1DUFkoJih4KSwgeSwgOCk7IH0KKworI2VuZGlmIC8qIEVORElBTl82NEJJVFdPUkQgKi8KKworI2VuZGlmIC8qIEVORElBTl9MSVRUTEUgKi8KKworI2lmZGVmIEVORElBTl9CSUcKKyNkZWZpbmUgU1RPUkUzMkwoeCwgeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIHsgKHkpWzNdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjI0KSYyNTUpOyAoeSlbMl0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MTYpJjI1NSk7ICAgXAorICAgICAgICh5KVsxXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj44KSYyNTUpOyAoeSlbMF0gPSAodW5zaWduZWQgY2hhcikoKHgpJjI1NSk7IH0KKworI2RlZmluZSBMT0FEMzJMKHgsIHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgeyB4ID0gKCh1bnNpZ25lZCBsb25nKSgoeSlbM10gJiAyNTUpPDwyNCkgfCBcCisgICAgICAgICAgICgodW5zaWduZWQgbG9uZykoKHkpWzJdICYgMjU1KTw8MTYpIHwgXAorICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpKCh5KVsxXSAmIDI1NSk8PDgpICB8IFwKKyAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKSgoeSlbMF0gJiAyNTUpKTsgfQorCisjZGVmaW5lIFNUT1JFNjRMKHgsIHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgeyAoeSlbN10gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+NTYpJjI1NSk7ICh5KVs2XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj40OCkmMjU1KTsgICAgIFwKKyAgICAgKHkpWzVdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjQwKSYyNTUpOyAoeSlbNF0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MzIpJjI1NSk7ICAgICBcCisgICAgICh5KVszXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4yNCkmMjU1KTsgKHkpWzJdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjE2KSYyNTUpOyAgICAgXAorICAgICAoeSlbMV0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+OCkmMjU1KTsgKHkpWzBdID0gKHVuc2lnbmVkIGNoYXIpKCh4KSYyNTUpOyB9CisKKyNkZWZpbmUgTE9BRDY0TCh4LCB5KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIHsgeCA9ICgoKHVsb25nNjQpKCh5KVs3XSAmIDI1NSkpPDw1Nil8KCgodWxvbmc2NCkoKHkpWzZdICYgMjU1KSk8PDQ4KSB8IFwKKyAgICAgICAgICgoKHVsb25nNjQpKCh5KVs1XSAmIDI1NSkpPDw0MCl8KCgodWxvbmc2NCkoKHkpWzRdICYgMjU1KSk8PDMyKSB8IFwKKyAgICAgICAgICgoKHVsb25nNjQpKCh5KVszXSAmIDI1NSkpPDwyNCl8KCgodWxvbmc2NCkoKHkpWzJdICYgMjU1KSk8PDE2KSB8IFwKKyAgICAgICAgICgoKHVsb25nNjQpKCh5KVsxXSAmIDI1NSkpPDw4KXwoKCh1bG9uZzY0KSgoeSlbMF0gJiAyNTUpKSk7IH0KKworI2lmZGVmIEVORElBTl8zMkJJVFdPUkQgCisKKyNkZWZpbmUgU1RPUkUzMkgoeCwgeSkgICAgICAgIFwKKyAgICAgeyB1bG9uZzMyIF9fdCA9ICh4KTsgWE1FTUNQWSh5LCAmX190LCA0KTsgfQorCisjZGVmaW5lIExPQUQzMkgoeCwgeSkgICAgICAgICBcCisgICAgIFhNRU1DUFkoJih4KSwgeSwgNCk7CisKKyNkZWZpbmUgU1RPUkU2NEgoeCwgeSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIHsgKHkpWzBdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjU2KSYyNTUpOyAoeSlbMV0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+NDgpJjI1NSk7ICAgXAorICAgICAgICh5KVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj40MCkmMjU1KTsgKHkpWzNdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjMyKSYyNTUpOyAgIFwKKyAgICAgICAoeSlbNF0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MjQpJjI1NSk7ICh5KVs1XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4xNikmMjU1KTsgICBcCisgICAgICAgKHkpWzZdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjgpJjI1NSk7ICAoeSlbN10gPSAodW5zaWduZWQgY2hhcikoKHgpJjI1NSk7IH0KKworI2RlZmluZSBMT0FENjRIKHgsIHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgeyB4ID0gKCgodWxvbmc2NCkoKHkpWzBdICYgMjU1KSk8PDU2KXwoKCh1bG9uZzY0KSgoeSlbMV0gJiAyNTUpKTw8NDgpfCBcCisgICAgICAgICAgICgoKHVsb25nNjQpKCh5KVsyXSAmIDI1NSkpPDw0MCl8KCgodWxvbmc2NCkoKHkpWzNdICYgMjU1KSk8PDMyKXwgXAorICAgICAgICAgICAoKCh1bG9uZzY0KSgoeSlbNF0gJiAyNTUpKTw8MjQpfCgoKHVsb25nNjQpKCh5KVs1XSAmIDI1NSkpPDwxNil8IFwKKyAgICAgICAgICAgKCgodWxvbmc2NCkoKHkpWzZdICYgMjU1KSk8PDgpfCAoKCh1bG9uZzY0KSgoeSlbN10gJiAyNTUpKSk7IH0KKworI2Vsc2UgLyogNjQtYml0IHdvcmRzIHRoZW4gICovCisKKyNkZWZpbmUgU1RPUkUzMkgoeCwgeSkgICAgICAgIFwKKyAgICAgeyB1bG9uZzMyIF9fdCA9ICh4KTsgWE1FTUNQWSh5LCAmX190LCA0KTsgfQorCisjZGVmaW5lIExPQUQzMkgoeCwgeSkgICAgICAgICBcCisgICAgIHsgWE1FTUNQWSgmKHgpLCB5LCA0KTsgeCAmPSAweEZGRkZGRkZGOyB9CisKKyNkZWZpbmUgU1RPUkU2NEgoeCwgeSkgICAgICAgIFwKKyAgICAgeyB1bG9uZzY0IF9fdCA9ICh4KTsgWE1FTUNQWSh5LCAmX190LCA4KTsgfQorCisjZGVmaW5lIExPQUQ2NEgoeCwgeSkgICAgICAgICBcCisgICAgeyBYTUVNQ1BZKCYoeCksIHksIDgpOyB9CisKKyNlbmRpZiAvKiBFTkRJQU5fNjRCSVRXT1JEICovCisjZW5kaWYgLyogRU5ESUFOX0JJRyAqLworCisjZGVmaW5lIEJTV0FQKHgpICAoICgoeD4+MjQpJjB4MDAwMDAwRkZVTCkgfCAoKHg8PDI0KSYweEZGMDAwMDAwVUwpICB8IFwKKyAgICAgICAgICAgICAgICAgICAgKCh4Pj44KSYweDAwMDBGRjAwVUwpICB8ICgoeDw8OCkmMHgwMEZGMDAwMFVMKSApCisKKworLyogMzItYml0IFJvdGF0ZXMgKi8KKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorCisvKiBpbnN0cmluc2ljIHJvdGF0ZSAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI3ByYWdtYSBpbnRyaW5zaWMoX2xyb3RyLF9scm90bCkKKyNkZWZpbmUgUk9SKHgsbikgX2xyb3RyKHgsbikKKyNkZWZpbmUgUk9MKHgsbikgX2xyb3RsKHgsbikKKyNkZWZpbmUgUk9SYyh4LG4pIF9scm90cih4LG4pCisjZGVmaW5lIFJPTGMoeCxuKSBfbHJvdGwoeCxuKQorCisjZWxpZiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pICYmIGRlZmluZWQoX19HTlVDX18pICYmIChkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pKSAmJiAhZGVmaW5lZChJTlRFTF9DQykgJiYgIWRlZmluZWQoTFRDX05PX0FTTSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBST0wodW5zaWduZWQgd29yZCwgaW50IGkpCit7CisgICBhc20gKCJyb2xsICUlY2wsJTAiCisgICAgICA6Ij1yIiAod29yZCkKKyAgICAgIDoiMCIgKHdvcmQpLCJjIiAoaSkpOworICAgcmV0dXJuIHdvcmQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgUk9SKHVuc2lnbmVkIHdvcmQsIGludCBpKQoreworICAgYXNtICgicm9ybCAlJWNsLCUwIgorICAgICAgOiI9ciIgKHdvcmQpCisgICAgICA6IjAiICh3b3JkKSwiYyIgKGkpKTsKKyAgIHJldHVybiB3b3JkOworfQorCisjaWZuZGVmIExUQ19OT19ST0xDCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgUk9MYyh1bnNpZ25lZCB3b3JkLCBjb25zdCBpbnQgaSkKK3sKKyAgIGFzbSAoInJvbGwgJTIsJTAiCisgICAgICA6Ij1yIiAod29yZCkKKyAgICAgIDoiMCIgKHdvcmQpLCJJIiAoaSkpOworICAgcmV0dXJuIHdvcmQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgUk9SYyh1bnNpZ25lZCB3b3JkLCBjb25zdCBpbnQgaSkKK3sKKyAgIGFzbSAoInJvcmwgJTIsJTAiCisgICAgICA6Ij1yIiAod29yZCkKKyAgICAgIDoiMCIgKHdvcmQpLCJJIiAoaSkpOworICAgcmV0dXJuIHdvcmQ7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgUk9MYyBST0wKKyNkZWZpbmUgUk9SYyBST1IKKworI2VuZGlmCisKKyNlbGlmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgJiYgZGVmaW5lZChMVENfUFBDMzIpCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgUk9MKHVuc2lnbmVkIHdvcmQsIGludCBpKQoreworICAgYXNtICgicm90bHcgJTAsJTAsJTIiCisgICAgICA6Ij1yIiAod29yZCkKKyAgICAgIDoiMCIgKHdvcmQpLCJyIiAoaSkpOworICAgcmV0dXJuIHdvcmQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgUk9SKHVuc2lnbmVkIHdvcmQsIGludCBpKQoreworICAgYXNtICgicm90bHcgJTAsJTAsJTIiCisgICAgICA6Ij1yIiAod29yZCkKKyAgICAgIDoiMCIgKHdvcmQpLCJyIiAoMzItaSkpOworICAgcmV0dXJuIHdvcmQ7Cit9CisKKyNpZm5kZWYgTFRDX05PX1JPTEMKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBST0xjKHVuc2lnbmVkIHdvcmQsIGNvbnN0IGludCBpKQoreworICAgYXNtICgicm90bHdpICUwLCUwLCUyIgorICAgICAgOiI9ciIgKHdvcmQpCisgICAgICA6IjAiICh3b3JkKSwiSSIgKGkpKTsKKyAgIHJldHVybiB3b3JkOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIFJPUmModW5zaWduZWQgd29yZCwgY29uc3QgaW50IGkpCit7CisgICBhc20gKCJyb3Ryd2kgJTAsJTAsJTIiCisgICAgICA6Ij1yIiAod29yZCkKKyAgICAgIDoiMCIgKHdvcmQpLCJJIiAoaSkpOworICAgcmV0dXJuIHdvcmQ7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgUk9MYyBST0wKKyNkZWZpbmUgUk9SYyBST1IKKworI2VuZGlmCisKKworI2Vsc2UKKworLyogcm90YXRlcyB0aGUgaGFyZCB3YXkgKi8KKyNkZWZpbmUgUk9MKHgsIHkpICggKCgodW5zaWduZWQgbG9uZykoeCk8PCh1bnNpZ25lZCBsb25nKSgoeSkmMzEpKSB8ICgoKHVuc2lnbmVkIGxvbmcpKHgpJjB4RkZGRkZGRkZVTCk+Pih1bnNpZ25lZCBsb25nKSgzMi0oKHkpJjMxKSkpKSAmIDB4RkZGRkZGRkZVTCkKKyNkZWZpbmUgUk9SKHgsIHkpICggKCgoKHVuc2lnbmVkIGxvbmcpKHgpJjB4RkZGRkZGRkZVTCk+Pih1bnNpZ25lZCBsb25nKSgoeSkmMzEpKSB8ICgodW5zaWduZWQgbG9uZykoeCk8PCh1bnNpZ25lZCBsb25nKSgzMi0oKHkpJjMxKSkpKSAmIDB4RkZGRkZGRkZVTCkKKyNkZWZpbmUgUk9MYyh4LCB5KSAoICgoKHVuc2lnbmVkIGxvbmcpKHgpPDwodW5zaWduZWQgbG9uZykoKHkpJjMxKSkgfCAoKCh1bnNpZ25lZCBsb25nKSh4KSYweEZGRkZGRkZGVUwpPj4odW5zaWduZWQgbG9uZykoMzItKCh5KSYzMSkpKSkgJiAweEZGRkZGRkZGVUwpCisjZGVmaW5lIFJPUmMoeCwgeSkgKCAoKCgodW5zaWduZWQgbG9uZykoeCkmMHhGRkZGRkZGRlVMKT4+KHVuc2lnbmVkIGxvbmcpKCh5KSYzMSkpIHwgKCh1bnNpZ25lZCBsb25nKSh4KTw8KHVuc2lnbmVkIGxvbmcpKDMyLSgoeSkmMzEpKSkpICYgMHhGRkZGRkZGRlVMKQorCisjZW5kaWYKKworCisvKiA2NC1iaXQgUm90YXRlcyAqLworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX3g4Nl82NF9fKSAmJiAhZGVmaW5lZChMVENfTk9fQVNNKQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9MNjQodW5zaWduZWQgbG9uZyB3b3JkLCBpbnQgaSkKK3sKKyAgIGFzbSgicm9scSAlJWNsLCUwIgorICAgICAgOiI9ciIgKHdvcmQpCisgICAgICA6IjAiICh3b3JkKSwiYyIgKGkpKTsKKyAgIHJldHVybiB3b3JkOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgUk9SNjQodW5zaWduZWQgbG9uZyB3b3JkLCBpbnQgaSkKK3sKKyAgIGFzbSgicm9ycSAlJWNsLCUwIgorICAgICAgOiI9ciIgKHdvcmQpCisgICAgICA6IjAiICh3b3JkKSwiYyIgKGkpKTsKKyAgIHJldHVybiB3b3JkOworfQorCisjaWZuZGVmIExUQ19OT19ST0xDCisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBST0w2NGModW5zaWduZWQgbG9uZyB3b3JkLCBjb25zdCBpbnQgaSkKK3sKKyAgIGFzbSgicm9scSAlMiwlMCIKKyAgICAgIDoiPXIiICh3b3JkKQorICAgICAgOiIwIiAod29yZCksIkoiIChpKSk7CisgICByZXR1cm4gd29yZDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIFJPUjY0Yyh1bnNpZ25lZCBsb25nIHdvcmQsIGNvbnN0IGludCBpKQoreworICAgYXNtKCJyb3JxICUyLCUwIgorICAgICAgOiI9ciIgKHdvcmQpCisgICAgICA6IjAiICh3b3JkKSwiSiIgKGkpKTsKKyAgIHJldHVybiB3b3JkOworfQorCisjZWxzZSAvKiBMVENfTk9fUk9MQyAqLworCisjZGVmaW5lIFJPTDY0YyBST0w2NAorI2RlZmluZSBST1I2NGMgUk9SNjQKKworI2VuZGlmCisKKyNlbHNlIC8qIE5vdCB4ODZfNjQgICovCisKKyNkZWZpbmUgUk9MNjQoeCwgeSkgXAorICAgICggKCgoeCk8PCgodWxvbmc2NCkoeSkmNjMpKSB8IFwKKyAgICAgICgoKHgpJkNPTlNUNjQoMHhGRkZGRkZGRkZGRkZGRkZGKSk+PigodWxvbmc2NCk2NC0oKHkpJjYzKSkpKSAmIENPTlNUNjQoMHhGRkZGRkZGRkZGRkZGRkZGKSkKKworI2RlZmluZSBST1I2NCh4LCB5KSBcCisgICAgKCAoKCgoeCkmQ09OU1Q2NCgweEZGRkZGRkZGRkZGRkZGRkYpKT4+KCh1bG9uZzY0KSh5KSZDT05TVDY0KDYzKSkpIHwgXAorICAgICAgKCh4KTw8KCh1bG9uZzY0KSg2NC0oKHkpJkNPTlNUNjQoNjMpKSkpKSkgJiBDT05TVDY0KDB4RkZGRkZGRkZGRkZGRkZGRikpCisKKyNkZWZpbmUgUk9MNjRjKHgsIHkpIFwKKyAgICAoICgoKHgpPDwoKHVsb25nNjQpKHkpJjYzKSkgfCBcCisgICAgICAoKCh4KSZDT05TVDY0KDB4RkZGRkZGRkZGRkZGRkZGRikpPj4oKHVsb25nNjQpNjQtKCh5KSY2MykpKSkgJiBDT05TVDY0KDB4RkZGRkZGRkZGRkZGRkZGRikpCisKKyNkZWZpbmUgUk9SNjRjKHgsIHkpIFwKKyAgICAoICgoKCh4KSZDT05TVDY0KDB4RkZGRkZGRkZGRkZGRkZGRikpPj4oKHVsb25nNjQpKHkpJkNPTlNUNjQoNjMpKSkgfCBcCisgICAgICAoKHgpPDwoKHVsb25nNjQpKDY0LSgoeSkmQ09OU1Q2NCg2MykpKSkpKSAmIENPTlNUNjQoMHhGRkZGRkZGRkZGRkZGRkZGKSkKKworI2VuZGlmCisKKyNpZm5kZWYgTUFYCisgICAjZGVmaW5lIE1BWCh4LCB5KSAoICgoeCk+KHkpKT8oeCk6KHkpICkKKyNlbmRpZgorCisjaWZuZGVmIE1JTgorICAgI2RlZmluZSBNSU4oeCwgeSkgKCAoKHgpPCh5KSk/KHgpOih5KSApCisjZW5kaWYKKworLyogZXh0cmFjdCBhIGJ5dGUgcG9ydGFibHkgKi8KKyNpZmRlZiBfTVNDX1ZFUgorICAgI2RlZmluZSBieXRlKHgsIG4pICgodW5zaWduZWQgY2hhcikoKHgpID4+ICg4ICogKG4pKSkpCisjZWxzZQorICAgI2RlZmluZSBieXRlKHgsIG4pICgoKHgpID4+ICg4ICogKG4pKSkgJiAyNTUpCisjZW5kaWYgICAKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWFjcm9zLmgsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjkgMjM6NDM6NTcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWF0aC5oIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWF0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZjU0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9tYXRoLmgKQEAgLTAsMCArMSw1MDYgQEAKKy8qKiBtYXRoIGZ1bmN0aW9ucyAqKi8KKworI2RlZmluZSBMVENfTVBfTFQgICAtMQorI2RlZmluZSBMVENfTVBfRVEgICAgMAorI2RlZmluZSBMVENfTVBfR1QgICAgMQorCisjZGVmaW5lIExUQ19NUF9OTyAgICAwCisjZGVmaW5lIExUQ19NUF9ZRVMgICAxCisKKyNpZm5kZWYgTUVDQworICAgdHlwZWRlZiB2b2lkIGVjY19wb2ludDsKKyNlbmRpZgorCisvKiBEcm9wYmVhciBoYXMgaXRzIG93biByc2Ffa2V5LiBXZSBqdXN0IGNvbW1lbnQgdGhpcyBvdXQuICovCisjaWYgMAorI2lmbmRlZiBNUlNBCisgICB0eXBlZGVmIHZvaWQgcnNhX2tleTsKKyNlbmRpZgorI2VuZGlmCisKKy8qKiBtYXRoIGRlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIC8qKiBOYW1lIG9mIHRoZSBtYXRoIHByb3ZpZGVyICovCisgICBjaGFyICpuYW1lOworCisgICAvKiogQml0cyBwZXIgZGlnaXQsIGFtb3VudCBvZiBiaXRzIG11c3QgZml0IGluIGFuIHVuc2lnbmVkIGxvbmcgKi8KKyAgIGludCAgYml0c19wZXJfZGlnaXQ7CisKKy8qIC0tLS0gaW5pdC9kZWluaXQgZnVuY3Rpb25zIC0tLS0gKi8KKworICAgLyoqIGluaXRpYWxpemUgYSBiaWdudW0KKyAgICAgQHBhcmFtICAgYSAgICAgVGhlIG51bWJlciB0byBpbml0aWFsaXplCisgICAgIEByZXR1cm4gIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCppbml0KSh2b2lkICoqYSk7CisgICAKKyAgIC8qKiBpbml0IGNvcHkgCisgICAgIEBwYXJhbSAgZHN0ICAgIFRoZSBudW1iZXIgdG8gaW5pdGlhbGl6ZSBhbmQgd3JpdGUgdG8KKyAgICAgQHBhcmFtICBzcmMgICAgVGhlIG51bWJlciB0byBjb3B5IGZyb20KKyAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqaW5pdF9jb3B5KSh2b2lkICoqZHN0LCB2b2lkICpzcmMpOworCisgICAvKiogZGVpbml0IAorICAgICAgQHBhcmFtICAgYSAgICBUaGUgbnVtYmVyIHRvIGZyZWUKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIHZvaWQgKCpkZWluaXQpKHZvaWQgKmEpOworCisvKiAtLS0tIGRhdGEgbW92ZW1lbnQgLS0tLSAqLworCisgICAvKiogbmVnYXRlCisgICAgICBAcGFyYW0gICBzcmMgICBUaGUgbnVtYmVyIHRvIG5lZ2F0ZQorICAgICAgQHBhcmFtICAgZHN0ICAgVGhlIGRlc3RpbmF0aW9uCisgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpuZWcpKHZvaWQgKnNyYywgdm9pZCAqZHN0KTsKKyAgIAorICAgLyoqIGNvcHkgCisgICAgICBAcGFyYW0gICBzcmMgICBUaGUgbnVtYmVyIHRvIGNvcHkgZnJvbQorICAgICAgQHBhcmFtICAgZHN0ICAgVGhlIG51bWJlciB0byB3cml0ZSB0byAKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmNvcHkpKHZvaWQgKnNyYywgdm9pZCAqZHN0KTsKKworLyogLS0tLSB0cml2aWFsIGxvdyBsZXZlbCBmdW5jdGlvbnMgLS0tLSAqLworCisgICAvKiogc2V0IHNtYWxsIGNvbnN0YW50IAorICAgICAgQHBhcmFtIGEgICAgTnVtYmVyIHRvIHdyaXRlIHRvCisgICAgICBAcGFyYW0gbiAgICBTb3VyY2UgdXB0byBiaXRzX3Blcl9kaWdpdCAoYWN0dWFsbHkgbWVhbnQgZm9yIHZlcnkgc21hbGwgY29uc3RhbnRzKSAKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2Nlc3MKKyAgICovCisgICBpbnQgKCpzZXRfaW50KSh2b2lkICphLCB1bnNpZ25lZCBsb25nIG4pOworCisgICAvKiogZ2V0IHNtYWxsIGNvbnN0YW50IAorICAgICAgQHBhcmFtIGEgICAgTnVtYmVyIHRvIHJlYWQsIG9ubHkgZmV0Y2hlcyB1cHRvIGJpdHNfcGVyX2RpZ2l0IGZyb20gdGhlIG51bWJlcgorICAgICAgQHJldHVybiAgVGhlIGxvd2VyIGJpdHNfcGVyX2RpZ2l0IG9mIHRoZSBpbnRlZ2VyICh1bnNpZ25lZCkKKyAgICovCisgICB1bnNpZ25lZCBsb25nICgqZ2V0X2ludCkodm9pZCAqYSk7CisKKyAgIC8qKiBnZXQgZGlnaXQgbiAKKyAgICAgQHBhcmFtIGEgIFRoZSBudW1iZXIgdG8gcmVhZCBmcm9tCisgICAgIEBwYXJhbSBuICBUaGUgbnVtYmVyIG9mIHRoZSBkaWdpdCB0byBmZXRjaAorICAgICBAcmV0dXJuICBUaGUgYml0c19wZXJfZGlnaXQgIHNpemVkIG4ndGggZGlnaXQgb2YgYQorICAgKi8KKyAgIHVuc2lnbmVkIGxvbmcgKCpnZXRfZGlnaXQpKHZvaWQgKmEsIGludCBuKTsKKworICAgLyoqIEdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0aGF0IHJlcHJlc2VudCB0aGUgbnVtYmVyCisgICAgIEBwYXJhbSBhICAgVGhlIG51bWJlciB0byBjb3VudAorICAgICBAcmV0dXJuIFRoZSBudW1iZXIgb2YgZGlnaXRzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBudW1iZXIKKyAgICovCisgICBpbnQgKCpnZXRfZGlnaXRfY291bnQpKHZvaWQgKmEpOworCisgICAvKiogY29tcGFyZSB0d28gaW50ZWdlcnMKKyAgICAgQHBhcmFtIGEgICBUaGUgbGVmdCBzaWRlIGludGVnZXIKKyAgICAgQHBhcmFtIGIgICBUaGUgcmlnaHQgc2lkZSBpbnRlZ2VyCisgICAgIEByZXR1cm4gTFRDX01QX0xUIGlmIGEgPCBiLCBMVENfTVBfR1QgaWYgYSA+IGIgYW5kIExUQ19NUF9FUSBvdGhlcndpc2UuICAoc2lnbmVkIGNvbXBhcmlzb24pCisgICAqLworICAgaW50ICgqY29tcGFyZSkodm9pZCAqYSwgdm9pZCAqYik7CisKKyAgIC8qKiBjb21wYXJlIGFnYWluc3QgaW50IAorICAgICBAcGFyYW0gYSAgIFRoZSBsZWZ0IHNpZGUgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSByaWdodCBzaWRlIGludGVnZXIgKHVwdG8gYml0c19wZXJfZGlnaXQpCisgICAgIEByZXR1cm4gTFRDX01QX0xUIGlmIGEgPCBiLCBMVENfTVBfR1QgaWYgYSA+IGIgYW5kIExUQ19NUF9FUSBvdGhlcndpc2UuICAoc2lnbmVkIGNvbXBhcmlzb24pCisgICAqLworICAgaW50ICgqY29tcGFyZV9kKSh2b2lkICphLCB1bnNpZ25lZCBsb25nIG4pOworCisgICAvKiogQ291bnQgdGhlIG51bWJlciBvZiBiaXRzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBpbnRlZ2VyCisgICAgIEBwYXJhbSBhICAgVGhlIGludGVnZXIgdG8gY291bnQKKyAgICAgQHJldHVybiBUaGUgbnVtYmVyIG9mIGJpdHMgcmVxdWlyZWQgdG8gcmVwcmVzZW50IHRoZSBpbnRlZ2VyCisgICAqLworICAgaW50ICgqY291bnRfYml0cykodm9pZCAqIGEpOworCisgICAvKiogQ291bnQgdGhlIG51bWJlciBvZiBMU0IgYml0cyB3aGljaCBhcmUgemVybyAKKyAgICAgQHBhcmFtIGEgICBUaGUgaW50ZWdlciB0byBjb3VudAorICAgICBAcmV0dXJuIFRoZSBudW1iZXIgb2YgY29udGlndW91cyB6ZXJvIExTQiBiaXRzCisgICAqLworICAgaW50ICgqY291bnRfbHNiX2JpdHMpKHZvaWQgKmEpOworCisgICAvKiogQ29tcHV0ZSBhIHBvd2VyIG9mIHR3bworICAgICBAcGFyYW0gYSAgVGhlIGludGVnZXIgdG8gc3RvcmUgdGhlIHBvd2VyIGluCisgICAgIEBwYXJhbSBuICBUaGUgcG93ZXIgb2YgdHdvIHlvdSB3YW50IHRvIHN0b3JlIChhID0gMl5uKQorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCp0d29leHB0KSh2b2lkICphICwgaW50IG4pOworCisvKiAtLS0tIHJhZGl4IGNvbnZlcnNpb25zIC0tLS0gKi8KKyAgIAorICAgLyoqIHJlYWQgYXNjaWkgc3RyaW5nIAorICAgICBAcGFyYW0gYSAgICAgVGhlIGludGVnZXIgdG8gc3RvcmUgaW50bworICAgICBAcGFyYW0gc3RyICAgVGhlIHN0cmluZyB0byByZWFkCisgICAgIEBwYXJhbSByYWRpeCBUaGUgcmFkaXggdGhlIGludGVnZXIgaGFzIGJlZW4gcmVwcmVzZW50ZWQgaW4gKDItNjQpCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnJlYWRfcmFkaXgpKHZvaWQgKmEsIGNvbnN0IGNoYXIgKnN0ciwgaW50IHJhZGl4KTsKKworICAgLyoqIHdyaXRlIG51bWJlciB0byBzdHJpbmcKKyAgICAgQHBhcmFtIGEgICAgIFRoZSBpbnRlZ2VyIHRvIHN0b3JlCisgICAgIEBwYXJhbSBzdHIgICBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBzdHJpbmcKKyAgICAgQHBhcmFtIHJhZGl4IFRoZSByYWRpeCB0aGUgaW50ZWdlciBpcyB0byBiZSByZXByZXNlbnRlZCBpbiAoMi02NCkKKyAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqd3JpdGVfcmFkaXgpKHZvaWQgKmEsIGNoYXIgKnN0ciwgaW50IHJhZGl4KTsKKworICAgLyoqIGdldCBzaXplIGFzIHVuc2lnbmVkIGNoYXIgc3RyaW5nIAorICAgICBAcGFyYW0gYSAgICAgVGhlIGludGVnZXIgdG8gZ2V0IHRoZSBzaXplICh3aGVuIHN0b3JlZCBpbiBhcnJheSBvZiBvY3RldHMpCisgICAgIEByZXR1cm4gVGhlIGxlbmd0aCBvZiB0aGUgaW50ZWdlcgorICAgKi8KKyAgIHVuc2lnbmVkIGxvbmcgKCp1bnNpZ25lZF9zaXplKSh2b2lkICphKTsKKworICAgLyoqIHN0b3JlIGFuIGludGVnZXIgYXMgYW4gYXJyYXkgb2Ygb2N0ZXRzIAorICAgICBAcGFyYW0gc3JjICAgVGhlIGludGVnZXIgdG8gc3RvcmUKKyAgICAgQHBhcmFtIGRzdCAgIFRoZSBidWZmZXIgdG8gc3RvcmUgdGhlIGludGVnZXIgaW4KKyAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqdW5zaWduZWRfd3JpdGUpKHZvaWQgKnNyYywgdW5zaWduZWQgY2hhciAqZHN0KTsKKworICAgLyoqIHJlYWQgYW4gYXJyYXkgb2Ygb2N0ZXRzIGFuZCBzdG9yZSBhcyBpbnRlZ2VyCisgICAgIEBwYXJhbSBkc3QgICBUaGUgaW50ZWdlciB0byBsb2FkCisgICAgIEBwYXJhbSBzcmMgICBUaGUgYXJyYXkgb2Ygb2N0ZXRzIAorICAgICBAcGFyYW0gbGVuICAgVGhlIG51bWJlciBvZiBvY3RldHMgCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKnVuc2lnbmVkX3JlYWQpKHZvaWQgKmRzdCwgdW5zaWduZWQgY2hhciAqc3JjLCB1bnNpZ25lZCBsb25nIGxlbik7CisKKy8qIC0tLS0gYmFzaWMgbWF0aCAtLS0tICovCisKKyAgIC8qKiBhZGQgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgKyBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCphZGQpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisKKyAgIC8qKiBhZGQgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIgKHNpbmdsZSBkaWdpdCBvZiB1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgKyBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCphZGRpKSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpOworCisgICAvKiogc3VidHJhY3QgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgLSBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpzdWIpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisgICAvKiogc3VidHJhY3QgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIgKHNpbmdsZSBkaWdpdCBvZiB1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgLSBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpzdWJpKSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpOworCisgICAvKiogbXVsdGlwbHkgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIgKHNpbmdsZSBkaWdpdCBvZiB1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgKiBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptdWwpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisgICAvKiogbXVsdGlwbHkgdHdvIGludGVnZXJzIAorICAgICBAcGFyYW0gYSAgIFRoZSBmaXJzdCBzb3VyY2UgaW50ZWdlcgorICAgICBAcGFyYW0gYiAgIFRoZSBzZWNvbmQgc291cmNlIGludGVnZXIgKHNpbmdsZSBkaWdpdCBvZiB1cHRvIGJpdHNfcGVyX2RpZ2l0IGluIGxlbmd0aCkKKyAgICAgQHBhcmFtIGMgICBUaGUgZGVzdGluYXRpb24gb2YgImEgKiBiIgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptdWxpKSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpOworCisgICAvKiogU3F1YXJlIGFuIGludGVnZXIKKyAgICAgQHBhcmFtIGEgICAgVGhlIGludGVnZXIgdG8gc3F1YXJlCisgICAgIEBwYXJhbSBiICAgIFRoZSBkZXN0aW5hdGlvbgorICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpzcXIpKHZvaWQgKmEsIHZvaWQgKmIpOworCisgICAvKiogRGl2aWRlIGFuIGludGVnZXIKKyAgICAgQHBhcmFtIGEgICAgVGhlIGRpdmlkZW5kCisgICAgIEBwYXJhbSBiICAgIFRoZSBkaXZpc29yCisgICAgIEBwYXJhbSBjICAgIFRoZSBxdW90aWVudCAoY2FuIGJlIE5VTEwgdG8gc2lnbmlmeSBkb24ndCBjYXJlKQorICAgICBAcGFyYW0gZCAgICBUaGUgcmVtYWluZGVyIChjYW4gYmUgTlVMTCB0byBzaWduaWZ5IGRvbid0IGNhcmUpCisgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKm1wZGl2KSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjLCB2b2lkICpkKTsKKworICAgLyoqIGRpdmlkZSBieSB0d28gCisgICAgICBAcGFyYW0gIGEgICBUaGUgaW50ZWdlciB0byBkaXZpZGUgKHNoaWZ0IHJpZ2h0KQorICAgICAgQHBhcmFtICBiICAgVGhlIGRlc3RpbmF0aW9uIAorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqZGl2XzIpKHZvaWQgKmEsIHZvaWQgKmIpOworCisgICAvKiogR2V0IHJlbWFpbmRlciAoc21hbGwgdmFsdWUpCisgICAgICBAcGFyYW0gIGEgICAgVGhlIGludGVnZXIgdG8gcmVkdWNlCisgICAgICBAcGFyYW0gIGIgICAgVGhlIG1vZHVsdXMgKHVwdG8gYml0c19wZXJfZGlnaXQgaW4gbGVuZ3RoKQorICAgICAgQHBhcmFtICBjICAgIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHJlc2lkdWUKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKm1vZGkpKHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyAqYyk7CisKKyAgIC8qKiBnY2QgCisgICAgICBAcGFyYW0gIGEgICAgIFRoZSBmaXJzdCBpbnRlZ2VyCisgICAgICBAcGFyYW0gIGIgICAgIFRoZSBzZWNvbmQgaW50ZWdlcgorICAgICAgQHBhcmFtICBjICAgICBUaGUgZGVzdGluYXRpb24gZm9yIChhLCBiKQorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqZ2NkKSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKTsKKworICAgLyoqIGxjbSAKKyAgICAgIEBwYXJhbSAgYSAgICAgVGhlIGZpcnN0IGludGVnZXIKKyAgICAgIEBwYXJhbSAgYiAgICAgVGhlIHNlY29uZCBpbnRlZ2VyCisgICAgICBAcGFyYW0gIGMgICAgIFRoZSBkZXN0aW5hdGlvbiBmb3IgW2EsIGJdCisgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpsY20pKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisgICAvKiogTW9kdWxhciBtdWx0aXBsaWNhdGlvbgorICAgICAgQHBhcmFtICBhICAgICBUaGUgZmlyc3Qgc291cmNlCisgICAgICBAcGFyYW0gIGIgICAgIFRoZSBzZWNvbmQgc291cmNlIAorICAgICAgQHBhcmFtICBjICAgICBUaGUgbW9kdWx1cworICAgICAgQHBhcmFtICBkICAgICBUaGUgZGVzdGluYXRpb24gKGEqYiBtb2QgYykKKyAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKm11bG1vZCkodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCk7CisKKyAgIC8qKiBNb2R1bGFyIHNxdWFyaW5nCisgICAgICBAcGFyYW0gIGEgICAgIFRoZSBmaXJzdCBzb3VyY2UKKyAgICAgIEBwYXJhbSAgYiAgICAgVGhlIG1vZHVsdXMKKyAgICAgIEBwYXJhbSAgYyAgICAgVGhlIGRlc3RpbmF0aW9uIChhKmEgbW9kIGIpCisgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpzcXJtb2QpKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpOworCisgICAvKiogTW9kdWxhciBpbnZlcnNpb24KKyAgICAgIEBwYXJhbSAgYSAgICAgVGhlIHZhbHVlIHRvIGludmVydAorICAgICAgQHBhcmFtICBiICAgICBUaGUgbW9kdWx1cyAKKyAgICAgIEBwYXJhbSAgYyAgICAgVGhlIGRlc3RpbmF0aW9uICgxL2EgbW9kIGIpCisgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCppbnZtb2QpKHZvaWQgKiwgdm9pZCAqLCB2b2lkICopOworCisvKiAtLS0tIHJlZHVjdGlvbiAtLS0tICovCisKKyAgIC8qKiBzZXR1cCBtb250Z29tZXJ5CisgICAgICAgQHBhcmFtIGEgIFRoZSBtb2R1bHVzIAorICAgICAgIEBwYXJhbSBiICBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSByZWR1Y3Rpb24gZGlnaXQgCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqbW9udGdvbWVyeV9zZXR1cCkodm9pZCAqYSwgdm9pZCAqKmIpOworCisgICAvKiogZ2V0IG5vcm1hbGl6YXRpb24gdmFsdWUgCisgICAgICAgQHBhcmFtIGEgICBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBub3JtYWxpemF0aW9uIHZhbHVlCisgICAgICAgQHBhcmFtIGIgICBUaGUgbW9kdWx1cworICAgICAgIEByZXR1cm4gIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCptb250Z29tZXJ5X25vcm1hbGl6YXRpb24pKHZvaWQgKmEsIHZvaWQgKmIpOworCisgICAvKiogcmVkdWNlIGEgbnVtYmVyCisgICAgICAgQHBhcmFtIGEgICBUaGUgbnVtYmVyIFthbmQgZGVzdF0gdG8gcmVkdWNlCisgICAgICAgQHBhcmFtIGIgICBUaGUgbW9kdWx1cworICAgICAgIEBwYXJhbSBjICAgVGhlIHZhbHVlICJiIiBmcm9tIG1vbnRnb21lcnlfc2V0dXAoKQorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKm1vbnRnb21lcnlfcmVkdWNlKSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKTsKKworICAgLyoqIGNsZWFuIHVwICAoZnJlZXMgbWVtb3J5KQorICAgICAgIEBwYXJhbSBhICAgVGhlIHZhbHVlICJiIiBmcm9tIG1vbnRnb21lcnlfc2V0dXAoKQorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8gICAgICAKKyAgIHZvaWQgKCptb250Z29tZXJ5X2RlaW5pdCkodm9pZCAqYSk7CisKKy8qIC0tLS0gZXhwb25lbnRpYXRpb24gLS0tLSAqLworCisgICAvKiogTW9kdWxhciBleHBvbmVudGlhdGlvbgorICAgICAgIEBwYXJhbSBhICAgIFRoZSBiYXNlIGludGVnZXIKKyAgICAgICBAcGFyYW0gYiAgICBUaGUgcG93ZXIgKGNhbiBiZSBuZWdhdGl2ZSkgaW50ZWdlcgorICAgICAgIEBwYXJhbSBjICAgIFRoZSBtb2R1bHVzIGludGVnZXIKKyAgICAgICBAcGFyYW0gZCAgICBUaGUgZGVzdGluYXRpb24KKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCpleHB0bW9kKSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjLCB2b2lkICpkKTsKKworICAgLyoqIFByaW1hbGl0eSB0ZXN0aW5nCisgICAgICAgQHBhcmFtIGEgICAgIFRoZSBpbnRlZ2VyIHRvIHRlc3QKKyAgICAgICBAcGFyYW0gYiAgICAgVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSByZXN1bHQgKEZQX1lFUyBpZiBwcmltZSkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCppc3ByaW1lKSh2b2lkICphLCBpbnQgKmIpOworCisvKiAtLS0tICAob3B0aW9uYWwpIGVjYyBwb2ludCBtYXRoIC0tLS0gKi8KKworICAgLyoqIEVDQyBHRihwKSBwb2ludCBtdWx0aXBsaWNhdGlvbiAoZnJvbSB0aGUgTklTVCBjdXJ2ZXMpCisgICAgICAgQHBhcmFtIGsgICBUaGUgaW50ZWdlciB0byBtdWx0aXBseSB0aGUgcG9pbnQgYnkKKyAgICAgICBAcGFyYW0gRyAgIFRoZSBwb2ludCB0byBtdWx0aXBseQorICAgICAgIEBwYXJhbSBSICAgVGhlIGRlc3RpbmF0aW9uIGZvciBrRyAgCisgICAgICAgQHBhcmFtIG1vZHVsdXMgIFRoZSBtb2R1bHVzIGZvciB0aGUgZmllbGQKKyAgICAgICBAcGFyYW0gbWFwIEJvb2xlYW4gaW5kaWNhdGVkIHdoZXRoZXIgdG8gbWFwIGJhY2sgdG8gYWZmaW5lIG9yIG5vdCAoY2FuIGJlIGlnbm9yZWQgaWYgeW91IHdvcmsgaW4gYWZmaW5lIG9ubHkpCisgICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqZWNjX3B0bXVsKSh2b2lkICprLCBlY2NfcG9pbnQgKkcsIGVjY19wb2ludCAqUiwgdm9pZCAqbW9kdWx1cywgaW50IG1hcCk7CisKKyAgIC8qKiBFQ0MgR0YocCkgcG9pbnQgYWRkaXRpb24gCisgICAgICAgQHBhcmFtIFAgICAgVGhlIGZpcnN0IHBvaW50CisgICAgICAgQHBhcmFtIFEgICAgVGhlIHNlY29uZCBwb2ludAorICAgICAgIEBwYXJhbSBSICAgIFRoZSBkZXN0aW5hdGlvbiBvZiBQICsgUQorICAgICAgIEBwYXJhbSBtb2R1bHVzICBUaGUgbW9kdWx1cworICAgICAgIEBwYXJhbSBtcCAgIFRoZSAiYiIgdmFsdWUgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICovCisgICBpbnQgKCplY2NfcHRhZGQpKGVjY19wb2ludCAqUCwgZWNjX3BvaW50ICpRLCBlY2NfcG9pbnQgKlIsIHZvaWQgKm1vZHVsdXMsIHZvaWQgKm1wKTsKKworICAgLyoqIEVDQyBHRihwKSBwb2ludCBkb3VibGUgCisgICAgICAgQHBhcmFtIFAgICAgVGhlIGZpcnN0IHBvaW50CisgICAgICAgQHBhcmFtIFIgICAgVGhlIGRlc3RpbmF0aW9uIG9mIDJQCisgICAgICAgQHBhcmFtIG1vZHVsdXMgIFRoZSBtb2R1bHVzCisgICAgICAgQHBhcmFtIG1wICAgVGhlICJiIiB2YWx1ZSBmcm9tIG1vbnRnb21lcnlfc2V0dXAoKQorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8KKyAgIGludCAoKmVjY19wdGRibCkoZWNjX3BvaW50ICpQLCBlY2NfcG9pbnQgKlIsIHZvaWQgKm1vZHVsdXMsIHZvaWQgKm1wKTsKKworICAgLyoqIEVDQyBtYXBwaW5nIGZyb20gcHJvamVjdGl2ZSB0byBhZmZpbmUsIGN1cnJlbnRseSB1c2VzICh4LHkseikgPT4gKHgvel4yLCB5L3peMywgMSkKKyAgICAgICBAcGFyYW0gUCAgICAgVGhlIHBvaW50IHRvIG1hcAorICAgICAgIEBwYXJhbSBtb2R1bHVzIFRoZSBtb2R1bHVzCisgICAgICAgQHBhcmFtIG1wICAgIFRoZSAiYiIgdmFsdWUgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgICAgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgICAgICBAcmVtYXJrICBUaGUgbWFwcGluZyBjYW4gYmUgZGlmZmVyZW50IGJ1dCBrZWVwIGluIG1pbmQgYSBlY2NfcG9pbnQgb25seSBoYXMgdGhyZWUgCisgICAgICAgICAgICAgICAgaW50ZWdlcnMgKHgseSx6KSBzbyBpZiB5b3UgdXNlIGEgZGlmZmVyZW50IG1hcHBpbmcgeW91IGhhdmUgdG8gbWFrZSBpdCBmaXQuCisgICAqLworICAgaW50ICgqZWNjX21hcCkoZWNjX3BvaW50ICpQLCB2b2lkICptb2R1bHVzLCB2b2lkICptcCk7CisKKyAgIC8qKiBDb21wdXRlcyBrQSpBICsga0IqQiA9IEMgdXNpbmcgU2hhbWlyJ3MgVHJpY2sKKyAgICAgICBAcGFyYW0gQSAgICAgICAgRmlyc3QgcG9pbnQgdG8gbXVsdGlwbHkKKyAgICAgICBAcGFyYW0ga0EgICAgICAgV2hhdCB0byBtdWx0aXBsZSBBIGJ5CisgICAgICAgQHBhcmFtIEIgICAgICAgIFNlY29uZCBwb2ludCB0byBtdWx0aXBseQorICAgICAgIEBwYXJhbSBrQiAgICAgICBXaGF0IHRvIG11bHRpcGxlIEIgYnkKKyAgICAgICBAcGFyYW0gQyAgICAgICAgW291dF0gRGVzdGluYXRpb24gcG9pbnQgKGNhbiBvdmVybGFwIHdpdGggQSBvciBCCisgICAgICAgQHBhcmFtIG1vZHVsdXMgIE1vZHVsdXMgZm9yIGN1cnZlIAorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworICAgKi8gCisgICBpbnQgKCplY2NfbXVsMmFkZCkoZWNjX3BvaW50ICpBLCB2b2lkICprQSwKKyAgICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKkIsIHZvaWQgKmtCLAorICAgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1vZHVsdXMpOworCisvKiBEcm9wYmVhciBoYXMgaXRzIG93biByc2EgY29kZSAqLworI2lmIDAKKy8qIC0tLS0gKG9wdGlvbmFsKSByc2Egb3B0aW1pemVkIG1hdGggKGZvciBpbnRlcm5hbCBDUlQpIC0tLS0gKi8KKworICAgLyoqIFJTQSBLZXkgR2VuZXJhdGlvbiAKKyAgICAgICBAcGFyYW0gcHJuZyAgICAgQW4gYWN0aXZlIFBSTkcgc3RhdGUKKyAgICAgICBAcGFyYW0gd3BybmcgICAgVGhlIGluZGV4IG9mIHRoZSBQUk5HIGRlc2lyZWQKKyAgICAgICBAcGFyYW0gc2l6ZSAgICAgVGhlIHNpemUgb2YgdGhlIG1vZHVsdXMgKGtleSBzaXplKSBkZXNpcmVkIChvY3RldHMpCisgICAgICAgQHBhcmFtIGUgICAgICAgIFRoZSAiZSIgdmFsdWUgKHB1YmxpYyBrZXkpLiAgZT09NjU1MzcgaXMgYSBnb29kIGNob2ljZQorICAgICAgIEBwYXJhbSBrZXkgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiBhIG5ld2x5IGNyZWF0ZWQgcHJpdmF0ZSBrZXkgcGFpcgorICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgdXBvbiBlcnJvciBhbGwgYWxsb2NhdGVkIHJhbSBpcyBmcmVlZAorICAgICovCisgICAgaW50ICgqcnNhX2tleWdlbikocHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgc2l6ZSwgbG9uZyBlLCByc2Ffa2V5ICprZXkpOworICAgCisKKyAgIC8qKiBSU0EgZXhwb25lbnRpYXRpb24KKyAgICAgIEBwYXJhbSBpbiAgICAgICBUaGUgb2N0ZXQgYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBiYXNlCisgICAgICBAcGFyYW0gaW5sZW4gICAgVGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQKKyAgICAgIEBwYXJhbSBvdXQgICAgICBUaGUgZGVzdGluYXRpb24gKHRvIGJlIHN0b3JlZCBpbiBhbiBvY3RldCBhcnJheSBmb3JtYXQpCisgICAgICBAcGFyYW0gb3V0bGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGJ1ZmZlciBhbmQgdGhlIHJlc3VsdGluZyBzaXplICh6ZXJvIHBhZGRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgbW9kdWx1cykKKyAgICAgIEBwYXJhbSB3aGljaCAgICBQS19QVUJMSUMgZm9yIHB1YmxpYyBSU0EgYW5kIFBLX1BSSVZBVEUgZm9yIHByaXZhdGUgUlNBCisgICAgICBAcGFyYW0ga2V5ICAgICAgVGhlIFJTQSBrZXkgdG8gdXNlIAorICAgICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisgICAqLworICAgaW50ICgqcnNhX21lKShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB3aGljaCwKKyAgICAgICAgICAgICAgICAgICAgICAgcnNhX2tleSAqa2V5KTsKKyNlbmRpZgorfSBsdGNfbWF0aF9kZXNjcmlwdG9yOworCitleHRlcm4gbHRjX21hdGhfZGVzY3JpcHRvciBsdGNfbXA7CisKK2ludCBsdGNfaW5pdF9tdWx0aSh2b2lkICoqYSwgLi4uKTsKK3ZvaWQgbHRjX2RlaW5pdF9tdWx0aSh2b2lkICphLCAuLi4pOworCisjaWZkZWYgTFRNX0RFU0MKK2V4dGVybiBjb25zdCBsdGNfbWF0aF9kZXNjcmlwdG9yIGx0bV9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBURk1fREVTQworZXh0ZXJuIGNvbnN0IGx0Y19tYXRoX2Rlc2NyaXB0b3IgdGZtX2Rlc2M7CisjZW5kaWYKKworI2lmZGVmIEdNUF9ERVNDCitleHRlcm4gY29uc3QgbHRjX21hdGhfZGVzY3JpcHRvciBnbXBfZGVzYzsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoREVTQ19ERUZfT05MWSkgJiYgZGVmaW5lZChMVENfU09VUkNFKQorCisjZGVmaW5lIE1QX0RJR0lUX0JJVCAgICAgICAgICAgICAgICAgbHRjX21wLmJpdHNfcGVyX2RpZ2l0CisKKy8qIHNvbWUgaGFuZHkgbWFjcm9zICovCisjZGVmaW5lIG1wX2luaXQoYSkgICAgICAgICAgICAgICAgICAgbHRjX21wLmluaXQoYSkKKyNkZWZpbmUgbXBfaW5pdF9tdWx0aSAgICAgICAgICAgICAgICBsdGNfaW5pdF9tdWx0aQorI2RlZmluZSBtcF9jbGVhcihhKSAgICAgICAgICAgICAgICAgIGx0Y19tcC5kZWluaXQoYSkKKyNkZWZpbmUgbXBfY2xlYXJfbXVsdGkgICAgICAgICAgICAgICBsdGNfZGVpbml0X211bHRpCisjZGVmaW5lIG1wX2luaXRfY29weShhLCBiKSAgICAgICAgICAgbHRjX21wLmluaXRfY29weShhLCBiKQorCisjZGVmaW5lIG1wX25lZyhhLCBiKSAgICAgICAgICAgICAgICAgbHRjX21wLm5lZyhhLCBiKQorI2RlZmluZSBtcF9jb3B5KGEsIGIpICAgICAgICAgICAgICAgIGx0Y19tcC5jb3B5KGEsIGIpCisKKyNkZWZpbmUgbXBfc2V0KGEsIGIpICAgICAgICAgICAgICAgICBsdGNfbXAuc2V0X2ludChhLCBiKQorI2RlZmluZSBtcF9zZXRfaW50KGEsIGIpICAgICAgICAgICAgIGx0Y19tcC5zZXRfaW50KGEsIGIpCisjZGVmaW5lIG1wX2dldF9pbnQoYSkgICAgICAgICAgICAgICAgbHRjX21wLmdldF9pbnQoYSkKKyNkZWZpbmUgbXBfZ2V0X2RpZ2l0KGEsIG4pICAgICAgICAgICBsdGNfbXAuZ2V0X2RpZ2l0KGEsIG4pCisjZGVmaW5lIG1wX2dldF9kaWdpdF9jb3VudChhKSAgICAgICAgbHRjX21wLmdldF9kaWdpdF9jb3VudChhKQorI2RlZmluZSBtcF9jbXAoYSwgYikgICAgICAgICAgICAgICAgIGx0Y19tcC5jb21wYXJlKGEsIGIpCisjZGVmaW5lIG1wX2NtcF9kKGEsIGIpICAgICAgICAgICAgICAgbHRjX21wLmNvbXBhcmVfZChhLCBiKQorI2RlZmluZSBtcF9jb3VudF9iaXRzKGEpICAgICAgICAgICAgIGx0Y19tcC5jb3VudF9iaXRzKGEpCisjZGVmaW5lIG1wX2NudF9sc2IoYSkgICAgICAgICAgICAgICAgbHRjX21wLmNvdW50X2xzYl9iaXRzKGEpCisjZGVmaW5lIG1wXzJleHB0KGEsIGIpICAgICAgICAgICAgICAgbHRjX21wLnR3b2V4cHQoYSwgYikKKworI2RlZmluZSBtcF9yZWFkX3JhZGl4KGEsIGIsIGMpICAgICAgIGx0Y19tcC5yZWFkX3JhZGl4KGEsIGIsIGMpCisjZGVmaW5lIG1wX3RvcmFkaXgoYSwgYiwgYykgICAgICAgICAgbHRjX21wLndyaXRlX3JhZGl4KGEsIGIsIGMpCisjZGVmaW5lIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGEpICAgICAgbHRjX21wLnVuc2lnbmVkX3NpemUoYSkKKyNkZWZpbmUgbXBfdG9fdW5zaWduZWRfYmluKGEsIGIpICAgICBsdGNfbXAudW5zaWduZWRfd3JpdGUoYSwgYikKKyNkZWZpbmUgbXBfcmVhZF91bnNpZ25lZF9iaW4oYSwgYiwgYykgbHRjX21wLnVuc2lnbmVkX3JlYWQoYSwgYiwgYykKKworI2RlZmluZSBtcF9hZGQoYSwgYiwgYykgICAgICAgICAgICAgIGx0Y19tcC5hZGQoYSwgYiwgYykKKyNkZWZpbmUgbXBfYWRkX2QoYSwgYiwgYykgICAgICAgICAgICBsdGNfbXAuYWRkaShhLCBiLCBjKQorI2RlZmluZSBtcF9zdWIoYSwgYiwgYykgICAgICAgICAgICAgIGx0Y19tcC5zdWIoYSwgYiwgYykKKyNkZWZpbmUgbXBfc3ViX2QoYSwgYiwgYykgICAgICAgICAgICBsdGNfbXAuc3ViaShhLCBiLCBjKQorI2RlZmluZSBtcF9tdWwoYSwgYiwgYykgICAgICAgICAgICAgIGx0Y19tcC5tdWwoYSwgYiwgYykKKyNkZWZpbmUgbXBfbXVsX2QoYSwgYiwgYykgICAgICAgICAgICBsdGNfbXAubXVsaShhLCBiLCBjKQorI2RlZmluZSBtcF9zcXIoYSwgYikgICAgICAgICAgICAgICAgIGx0Y19tcC5zcXIoYSwgYikKKyNkZWZpbmUgbXBfZGl2KGEsIGIsIGMsIGQpICAgICAgICAgICBsdGNfbXAubXBkaXYoYSwgYiwgYywgZCkKKyNkZWZpbmUgbXBfZGl2XzIoYSwgYikgICAgICAgICAgICAgICBsdGNfbXAuZGl2XzIoYSwgYikKKyNkZWZpbmUgbXBfbW9kKGEsIGIsIGMpICAgICAgICAgICAgICBsdGNfbXAubXBkaXYoYSwgYiwgTlVMTCwgYykKKyNkZWZpbmUgbXBfbW9kX2QoYSwgYiwgYykgICAgICAgICAgICBsdGNfbXAubW9kaShhLCBiLCBjKQorI2RlZmluZSBtcF9nY2QoYSwgYiwgYykgICAgICAgICAgICAgIGx0Y19tcC5nY2QoYSwgYiwgYykKKyNkZWZpbmUgbXBfbGNtKGEsIGIsIGMpICAgICAgICAgICAgICBsdGNfbXAubGNtKGEsIGIsIGMpCisKKyNkZWZpbmUgbXBfbXVsbW9kKGEsIGIsIGMsIGQpICAgICAgICBsdGNfbXAubXVsbW9kKGEsIGIsIGMsIGQpCisjZGVmaW5lIG1wX3Nxcm1vZChhLCBiLCBjKSAgICAgICAgICAgbHRjX21wLnNxcm1vZChhLCBiLCBjKQorI2RlZmluZSBtcF9pbnZtb2QoYSwgYiwgYykgICAgICAgICAgIGx0Y19tcC5pbnZtb2QoYSwgYiwgYykKKworI2RlZmluZSBtcF9tb250Z29tZXJ5X3NldHVwKGEsIGIpICAgIGx0Y19tcC5tb250Z29tZXJ5X3NldHVwKGEsIGIpCisjZGVmaW5lIG1wX21vbnRnb21lcnlfbm9ybWFsaXphdGlvbihhLCBiKSBsdGNfbXAubW9udGdvbWVyeV9ub3JtYWxpemF0aW9uKGEsIGIpCisjZGVmaW5lIG1wX21vbnRnb21lcnlfcmVkdWNlKGEsIGIsIGMpICAgbHRjX21wLm1vbnRnb21lcnlfcmVkdWNlKGEsIGIsIGMpCisjZGVmaW5lIG1wX21vbnRnb21lcnlfZnJlZShhKSAgICAgICAgbHRjX21wLm1vbnRnb21lcnlfZGVpbml0KGEpCisKKyNkZWZpbmUgbXBfZXhwdG1vZChhLGIsYyxkKSAgICAgICAgICBsdGNfbXAuZXhwdG1vZChhLGIsYyxkKQorI2RlZmluZSBtcF9wcmltZV9pc19wcmltZShhLCBiLCBjKSAgIGx0Y19tcC5pc3ByaW1lKGEsIGMpCisKKyNkZWZpbmUgbXBfaXN6ZXJvKGEpICAgICAgICAgICAgICAgICAobXBfY21wX2QoYSwgMCkgPT0gTFRDX01QX0VRID8gTFRDX01QX1lFUyA6IExUQ19NUF9OTykKKyNkZWZpbmUgbXBfaXNvZGQoYSkgICAgICAgICAgICAgICAgICAobXBfZ2V0X2RpZ2l0X2NvdW50KGEpID4gMCA/IChtcF9nZXRfZGlnaXQoYSwgMCkgJiAxID8gTFRDX01QX1lFUyA6IExUQ19NUF9OTykgOiBMVENfTVBfTk8pCisjZGVmaW5lIG1wX2V4Y2goYSwgYikgICAgICAgICAgICAgICAgZG8geyB2b2lkICpBQkNfX3RtcCA9IGE7IGEgPSBiOyBiID0gQUJDX190bXA7IH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgbXBfdG9oZXgoYSwgYikgICAgICAgICAgICAgICBtcF90b3JhZGl4KGEsIGIsIDE2KQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWF0aC5oLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQzICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzAyIDE5OjIzOjEzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X21pc2MuaCBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X21pc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjQ0NGY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfbWlzYy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qIC0tLS0gQkFTRTY0IFJvdXRpbmVzIC0tLS0gKi8KKyNpZmRlZiBCQVNFNjQKK2ludCBiYXNlNjRfZW5jb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgYmFzZTY0X2RlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKyNlbmRpZgorCisvKiAtLS0tIE1FTSByb3V0aW5lcyAtLS0tICovCit2b2lkIHplcm9tZW0odm9pZCAqZHN0LCBzaXplX3QgbGVuKTsKK3ZvaWQgYnVybl9zdGFjayh1bnNpZ25lZCBsb25nIGxlbik7CisKK2NvbnN0IGNoYXIgKmVycm9yX3RvX3N0cmluZyhpbnQgZXJyKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKmNyeXB0X2J1aWxkX3NldHRpbmdzOworCisvKiAtLS0tIEhNTSAtLS0tICovCitpbnQgY3J5cHRfZnNhKHZvaWQgKm1wLCAuLi4pOworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9taXNjLmgsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wNiAwMzowMzowMSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9way5oIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTBkN2FiCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGsuaApAQCAtMCwwICsxLDU0NCBAQAorLyogLS0tLSBOVU1CRVIgVEhFT1JZIC0tLS0gKi8KKworZW51bSB7CisgICBQS19QVUJMSUM9MCwKKyAgIFBLX1BSSVZBVEU9MQorfTsKKworaW50IHJhbmRfcHJpbWUodm9pZCAqTiwgbG9uZyBsZW4sIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZyk7CisKKy8qIC0tLS0gUlNBIC0tLS0gKi8KKyNpZmRlZiBNUlNBCisKKy8qIE1pbiBhbmQgTWF4IFJTQSBrZXkgc2l6ZXMgKGluIGJpdHMpICovCisjZGVmaW5lIE1JTl9SU0FfU0laRSAxMDI0CisjZGVmaW5lIE1BWF9SU0FfU0laRSA0MDk2CisKKy8qKiBSU0EgUEtDUyBzdHlsZSBrZXkgKi8KK3R5cGVkZWYgc3RydWN0IFJzYV9rZXkgeworICAgIC8qKiBUeXBlIG9mIGtleSwgUEtfUFJJVkFURSBvciBQS19QVUJMSUMgKi8KKyAgICBpbnQgdHlwZTsKKyAgICAvKiogVGhlIHB1YmxpYyBleHBvbmVudCAqLworICAgIHZvaWQgKmU7IAorICAgIC8qKiBUaGUgcHJpdmF0ZSBleHBvbmVudCAqLworICAgIHZvaWQgKmQ7IAorICAgIC8qKiBUaGUgbW9kdWx1cyAqLworICAgIHZvaWQgKk47IAorICAgIC8qKiBUaGUgcCBmYWN0b3Igb2YgTiAqLworICAgIHZvaWQgKnA7IAorICAgIC8qKiBUaGUgcSBmYWN0b3Igb2YgTiAqLworICAgIHZvaWQgKnE7IAorICAgIC8qKiBUaGUgMS9xIG1vZCBwIENSVCBwYXJhbSAqLworICAgIHZvaWQgKnFQOyAKKyAgICAvKiogVGhlIGQgbW9kIChwIC0gMSkgQ1JUIHBhcmFtICovCisgICAgdm9pZCAqZFA7IAorICAgIC8qKiBUaGUgZCBtb2QgKHEgLSAxKSBDUlQgcGFyYW0gKi8KKyAgICB2b2lkICpkUTsKK30gcnNhX2tleTsKKworaW50IHJzYV9tYWtlX2tleShwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGludCBzaXplLCBsb25nIGUsIHJzYV9rZXkgKmtleSk7CisKK2ludCByc2FfZXhwdG1vZChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgaW50IHdoaWNoLAorICAgICAgICAgICAgICAgICAgICAgIHJzYV9rZXkgKmtleSk7CisKK3ZvaWQgcnNhX2ZyZWUocnNhX2tleSAqa2V5KTsKKworLyogVGhlc2UgdXNlIFBLQ1MgIzEgdjIuMCBwYWRkaW5nICovCisjZGVmaW5lIHJzYV9lbmNyeXB0X2tleShfaW4sIF9pbmxlbiwgX291dCwgX291dGxlbiwgX2xwYXJhbSwgX2xwYXJhbWxlbiwgX3BybmcsIF9wcm5nX2lkeCwgX2hhc2hfaWR4LCBfa2V5KSBcCisgIHJzYV9lbmNyeXB0X2tleV9leChfaW4sIF9pbmxlbiwgX291dCwgX291dGxlbiwgX2xwYXJhbSwgX2xwYXJhbWxlbiwgX3BybmcsIF9wcm5nX2lkeCwgX2hhc2hfaWR4LCBMVENfUEtDU18xX09BRVAsIF9rZXkpCisKKyNkZWZpbmUgcnNhX2RlY3J5cHRfa2V5KF9pbiwgX2lubGVuLCBfb3V0LCBfb3V0bGVuLCBfbHBhcmFtLCBfbHBhcmFtbGVuLCBfaGFzaF9pZHgsIF9zdGF0LCBfa2V5KSBcCisgIHJzYV9kZWNyeXB0X2tleV9leChfaW4sIF9pbmxlbiwgX291dCwgX291dGxlbiwgX2xwYXJhbSwgX2xwYXJhbWxlbiwgX2hhc2hfaWR4LCBMVENfUEtDU18xX09BRVAsIF9zdGF0LCBfa2V5KQorCisjZGVmaW5lIHJzYV9zaWduX2hhc2goX2luLCBfaW5sZW4sIF9vdXQsIF9vdXRsZW4sIF9wcm5nLCBfcHJuZ19pZHgsIF9oYXNoX2lkeCwgX3NhbHRsZW4sIF9rZXkpIFwKKyAgcnNhX3NpZ25faGFzaF9leChfaW4sIF9pbmxlbiwgX291dCwgX291dGxlbiwgTFRDX1BLQ1NfMV9QU1MsIF9wcm5nLCBfcHJuZ19pZHgsIF9oYXNoX2lkeCwgX3NhbHRsZW4sIF9rZXkpCisKKyNkZWZpbmUgcnNhX3ZlcmlmeV9oYXNoKF9zaWcsIF9zaWdsZW4sIF9oYXNoLCBfaGFzaGxlbiwgX2hhc2hfaWR4LCBfc2FsdGxlbiwgX3N0YXQsIF9rZXkpIFwKKyAgcnNhX3ZlcmlmeV9oYXNoX2V4KF9zaWcsIF9zaWdsZW4sIF9oYXNoLCBfaGFzaGxlbiwgTFRDX1BLQ1NfMV9QU1MsIF9oYXNoX2lkeCwgX3NhbHRsZW4sIF9zdGF0LCBfa2V5KQorCisvKiBUaGVzZSBjYW4gYmUgc3dpdGNoZWQgYmV0d2VlbiBQS0NTICMxIHYyLnggYW5kIFBLQ1MgIzEgdjEuNSBwYWRkaW5ncyAqLworaW50IHJzYV9lbmNyeXB0X2tleV9leChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sIHVuc2lnbmVkIGxvbmcgbHBhcmFtbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgcHJuZ19pZHgsIGludCBoYXNoX2lkeCwgaW50IHBhZGRpbmcsIHJzYV9rZXkgKmtleSk7CisKK2ludCByc2FfZGVjcnlwdF9rZXlfZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sICAgdW5zaWduZWQgbG9uZyAgbHBhcmFtbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBoYXNoX2lkeCwgaW50ICAgICAgICAgICAgcGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAqc3RhdCwgICAgIHJzYV9rZXkgICAgICAgKmtleSk7CisKK2ludCByc2Ffc2lnbl9oYXNoX2V4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgICAgICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBwYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAgICAqcHJuZywgICAgIGludCAgICAgICAgICAgIHBybmdfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgaGFzaF9pZHgsIHVuc2lnbmVkIGxvbmcgIHNhbHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpOworCitpbnQgcnNhX3ZlcmlmeV9oYXNoX2V4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgICAgICB1bnNpZ25lZCBsb25nIHNpZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgICAgIHVuc2lnbmVkIGxvbmcgaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgcGFkZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgaGFzaF9pZHgsIHVuc2lnbmVkIGxvbmcgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAqc3RhdCwgICAgIHJzYV9rZXkgICAgICAqa2V5KTsKKworLyogUEtDUyAjMSBpbXBvcnQvZXhwb3J0ICovCitpbnQgcnNhX2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgaW50IHR5cGUsIHJzYV9rZXkgKmtleSk7CitpbnQgcnNhX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgcnNhX2tleSAqa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorI2VuZGlmCisKKy8qIC0tLS0gS2F0amEgLS0tLSAqLworI2lmZGVmIE1LQVQKKworLyogTWluIGFuZCBNYXggS0FUIGtleSBzaXplcyAoaW4gYml0cykgKi8KKyNkZWZpbmUgTUlOX0tBVF9TSVpFIDEwMjQKKyNkZWZpbmUgTUFYX0tBVF9TSVpFIDQwOTYKKworLyoqIEthdGphIFBLQ1Mgc3R5bGUga2V5ICovCit0eXBlZGVmIHN0cnVjdCBLQVRfa2V5IHsKKyAgICAvKiogVHlwZSBvZiBrZXksIFBLX1BSSVZBVEUgb3IgUEtfUFVCTElDICovCisgICAgaW50IHR5cGU7CisgICAgLyoqIFRoZSBwcml2YXRlIGV4cG9uZW50ICovCisgICAgdm9pZCAqZDsgCisgICAgLyoqIFRoZSBtb2R1bHVzICovCisgICAgdm9pZCAqTjsgCisgICAgLyoqIFRoZSBwIGZhY3RvciBvZiBOICovCisgICAgdm9pZCAqcDsgCisgICAgLyoqIFRoZSBxIGZhY3RvciBvZiBOICovCisgICAgdm9pZCAqcTsgCisgICAgLyoqIFRoZSAxL3EgbW9kIHAgQ1JUIHBhcmFtICovCisgICAgdm9pZCAqcVA7IAorICAgIC8qKiBUaGUgZCBtb2QgKHAgLSAxKSBDUlQgcGFyYW0gKi8KKyAgICB2b2lkICpkUDsgCisgICAgLyoqIFRoZSBkIG1vZCAocSAtIDEpIENSVCBwYXJhbSAqLworICAgIHZvaWQgKmRROworICAgIC8qKiBUaGUgcHEgcGFyYW0gKi8KKyAgICB2b2lkICpwcTsKK30ga2F0amFfa2V5OworCitpbnQga2F0amFfbWFrZV9rZXkocHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgc2l6ZSwga2F0amFfa2V5ICprZXkpOworCitpbnQga2F0amFfZXhwdG1vZChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBpbnQgd2hpY2gsCisgICAgICAgICAgICAgICAgICAgICAgICBrYXRqYV9rZXkgKmtleSk7CisKK3ZvaWQga2F0amFfZnJlZShrYXRqYV9rZXkgKmtleSk7CisKKy8qIFRoZXNlIHVzZSBQS0NTICMxIHYyLjAgcGFkZGluZyAqLworaW50IGthdGphX2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sIHVuc2lnbmVkIGxvbmcgbHBhcmFtbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCBwcm5nX2lkeCwgaW50IGhhc2hfaWR4LCBrYXRqYV9rZXkgKmtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitpbnQga2F0amFfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgICAgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCAgIHVuc2lnbmVkIGxvbmcgbHBhcmFtbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LCBpbnQgKnN0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2F0amFfa2V5ICAgICAgICprZXkpOworCisvKiBQS0NTICMxIGltcG9ydC9leHBvcnQgKi8KK2ludCBrYXRqYV9leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB0eXBlLCBrYXRqYV9rZXkgKmtleSk7CitpbnQga2F0amFfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBrYXRqYV9rZXkgKmtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyNlbmRpZgorCisvKiAtLS0tIEVDQyBSb3V0aW5lcyAtLS0tICovCisjaWZkZWYgTUVDQworCisvKiBzaXplIG9mIG91ciB0ZW1wIGJ1ZmZlcnMgZm9yIGV4cG9ydGVkIGtleXMgKi8KKyNkZWZpbmUgRUNDX0JVRl9TSVpFIDI1NgorCisvKiBtYXggcHJpdmF0ZSBrZXkgc2l6ZSAqLworI2RlZmluZSBFQ0NfTUFYU0laRSAgNjYKKworLyoqIFN0cnVjdHVyZSBkZWZpbmVzIGEgTklTVCBHRihwKSBjdXJ2ZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgLyoqIFRoZSBzaXplIG9mIHRoZSBjdXJ2ZSBpbiBvY3RldHMgKi8KKyAgIGludCBzaXplOworCisgICAvKiogbmFtZSBvZiBjdXJ2ZSAqLworICAgY2hhciAqbmFtZTsgCisKKyAgIC8qKiBUaGUgcHJpbWUgdGhhdCBkZWZpbmVzIHRoZSBmaWVsZCB0aGUgY3VydmUgaXMgaW4gKGVuY29kZWQgaW4gaGV4KSAqLworICAgY2hhciAqcHJpbWU7CisKKyAgIC8qKiBUaGUgZmllbGRzIEIgcGFyYW0gKGhleCkgKi8KKyAgIGNoYXIgKkI7CisKKyAgIC8qKiBUaGUgb3JkZXIgb2YgdGhlIGN1cnZlIChoZXgpICovCisgICBjaGFyICpvcmRlcjsKKyAgCisgICAvKiogVGhlIHggY28tb3JkaW5hdGUgb2YgdGhlIGJhc2UgcG9pbnQgb24gdGhlIGN1cnZlIChoZXgpICovCisgICBjaGFyICpHeDsKKyAKKyAgIC8qKiBUaGUgeSBjby1vcmRpbmF0ZSBvZiB0aGUgYmFzZSBwb2ludCBvbiB0aGUgY3VydmUgKGhleCkgKi8KKyAgIGNoYXIgKkd5OworfSBsdGNfZWNjX3NldF90eXBlOworCisvKiogQSBwb2ludCBvbiBhIEVDQyBjdXJ2ZSwgc3RvcmVkIGluIEphY2JvYmlhbiBmb3JtYXQgc3VjaCB0aGF0ICh4LHkseikgPT4gKHgvel4yLCB5L3peMywgMSkgd2hlbiBpbnRlcnByZXR0ZWQgYXMgYWZmaW5lICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyoqIFRoZSB4IGNvLW9yZGluYXRlICovCisgICAgdm9pZCAqeDsKKworICAgIC8qKiBUaGUgeSBjby1vcmRpbmF0ZSAqLworICAgIHZvaWQgKnk7CisKKyAgICAvKiogVGhlIHogY28tb3JkaW5hdGUgKi8KKyAgICB2b2lkICp6OworfSBlY2NfcG9pbnQ7CisKKy8qKiBBbiBFQ0Mga2V5ICovCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyoqIFR5cGUgb2Yga2V5LCBQS19QUklWQVRFIG9yIFBLX1BVQkxJQyAqLworICAgIGludCB0eXBlOworCisgICAgLyoqIEluZGV4IGludG8gdGhlIGx0Y19lY2Nfc2V0c1tdIGZvciB0aGUgcGFyYW1ldGVycyBvZiB0aGlzIGN1cnZlOyBpZiAtMSwgdGhlbiB0aGlzIGtleSBpcyB1c2luZyB1c2VyIHN1cHBsaWVkIGN1cnZlIGluIGRwICovCisgICAgaW50IGlkeDsKKworCS8qKiBwb2ludGVyIHRvIGRvbWFpbiBwYXJhbWV0ZXJzOyBlaXRoZXIgcG9pbnRzIHRvIE5JU1QgY3VydmVzIChpZGVudGlmaWVkIGJ5IGlkeCA+PSAwKSBvciB1c2VyIHN1cHBsaWVkIGN1cnZlICovCisJY29uc3QgbHRjX2VjY19zZXRfdHlwZSAqZHA7CisKKyAgICAvKiogVGhlIHB1YmxpYyBrZXkgKi8KKyAgICBlY2NfcG9pbnQgcHVia2V5OworCisgICAgLyoqIFRoZSBwcml2YXRlIGtleSAqLworICAgIHZvaWQgKms7Cit9IGVjY19rZXk7CisKKy8qKiB0aGUgRUNDIHBhcmFtcyBwcm92aWRlZCAqLworZXh0ZXJuIGNvbnN0IGx0Y19lY2Nfc2V0X3R5cGUgbHRjX2VjY19zZXRzW107CisKK2ludCAgZWNjX3Rlc3Qodm9pZCk7Cit2b2lkIGVjY19zaXplcyhpbnQgKmxvdywgaW50ICpoaWdoKTsKK2ludCAgZWNjX2dldF9zaXplKGVjY19rZXkgKmtleSk7CisKK2ludCAgZWNjX21ha2Vfa2V5KHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgaW50IGtleXNpemUsIGVjY19rZXkgKmtleSk7CitpbnQgIGVjY19tYWtlX2tleV9leChwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGVjY19rZXkgKmtleSwgY29uc3QgbHRjX2VjY19zZXRfdHlwZSAqZHApOwordm9pZCBlY2NfZnJlZShlY2Nfa2V5ICprZXkpOworCitpbnQgIGVjY19leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB0eXBlLCBlY2Nfa2V5ICprZXkpOworaW50ICBlY2NfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBlY2Nfa2V5ICprZXkpOworaW50ICBlY2NfaW1wb3J0X2V4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBlY2Nfa2V5ICprZXksIGNvbnN0IGx0Y19lY2Nfc2V0X3R5cGUgKmRwKTsKKworaW50IGVjY19hbnNpX3g5NjNfZXhwb3J0KGVjY19rZXkgKmtleSwgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGVjY19hbnNpX3g5NjNfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBlY2Nfa2V5ICprZXkpOworaW50IGVjY19hbnNpX3g5NjNfaW1wb3J0X2V4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBlY2Nfa2V5ICprZXksIGx0Y19lY2Nfc2V0X3R5cGUgKmRwKTsKKworaW50ICBlY2Nfc2hhcmVkX3NlY3JldChlY2Nfa2V5ICpwcml2YXRlX2tleSwgZWNjX2tleSAqcHVibGljX2tleSwgCisgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50ICBlY2NfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGludCBoYXNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjY19rZXkgKmtleSk7CisKK2ludCAgZWNjX2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2Nfa2V5ICprZXkpOworCitpbnQgIGVjY19zaWduX2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBlY2Nfa2V5ICprZXkpOworCitpbnQgIGVjY192ZXJpZnlfaGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsICB1bnNpZ25lZCBsb25nIHNpZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHVuc2lnbmVkIGxvbmcgaGFzaGxlbiwgCisgICAgICAgICAgICAgICAgICAgICBpbnQgKnN0YXQsIGVjY19rZXkgKmtleSk7CisKKy8qIGxvdyBsZXZlbCBmdW5jdGlvbnMgKi8KK2VjY19wb2ludCAqbHRjX2VjY19uZXdfcG9pbnQodm9pZCk7Cit2b2lkICAgICAgIGx0Y19lY2NfZGVsX3BvaW50KGVjY19wb2ludCAqcCk7CitpbnQgICAgICAgIGx0Y19lY2NfaXNfdmFsaWRfaWR4KGludCBuKTsKKworLyogcG9pbnQgb3BzIChtcCA9PSBtb250Z29tZXJ5IGRpZ2l0KSAqLworI2lmICFkZWZpbmVkKE1FQ0NfQUNDRUwpIHx8IGRlZmluZWQoTFRNX0RFU0MpIHx8IGRlZmluZWQoR01QX0RFU0MpCisvKiBSID0gMlAgKi8KK2ludCBsdGNfZWNjX3Byb2plY3RpdmVfZGJsX3BvaW50KGVjY19wb2ludCAqUCwgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCB2b2lkICptcCk7CisKKy8qIFIgPSBQICsgUSAqLworaW50IGx0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQoZWNjX3BvaW50ICpQLCBlY2NfcG9pbnQgKlEsIGVjY19wb2ludCAqUiwgdm9pZCAqbW9kdWx1cywgdm9pZCAqbXApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1FQ0NfRlApCitpbnQgbHRjX2VjY19mcF9tdWxtb2Qodm9pZCAqaywgZWNjX3BvaW50ICpHLCBlY2NfcG9pbnQgKlIsIHZvaWQgKm1vZHVsdXMsIGludCBtYXApOworaW50IGx0Y19lY2NfZnBfc2F2ZV9zdGF0ZSh1bnNpZ25lZCBjaGFyICoqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGx0Y19lY2NfZnBfcmVzdG9yZV9zdGF0ZSh1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbik7Cit2b2lkIGx0Y19lY2NfZnBfZnJlZSh2b2lkKTsKKyNlbmRpZgorCisvKiBSID0ga0cgKi8KK2ludCBsdGNfZWNjX211bG1vZCh2b2lkICprLCBlY2NfcG9pbnQgKkcsIGVjY19wb2ludCAqUiwgdm9pZCAqbW9kdWx1cywgaW50IG1hcCk7CisKKyNpZmRlZiBMVENfRUNDX1NIQU1JUgorLyoga0EqQSArIGtCKkIgPSBDICovCitpbnQgbHRjX2VjY19tdWwyYWRkKGVjY19wb2ludCAqQSwgdm9pZCAqa0EsCisgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqQiwgdm9pZCAqa0IsCisgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqQywKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICptb2R1bHVzKTsKKworI2lmZGVmIE1FQ0NfRlAKK2ludCBsdGNfZWNjX2ZwX211bDJhZGQoZWNjX3BvaW50ICpBLCB2b2lkICprQSwKKyAgICAgICAgICAgICAgICAgICAgICAgZWNjX3BvaW50ICpCLCB2b2lkICprQiwKKyAgICAgICAgICAgICAgICAgICAgICAgZWNjX3BvaW50ICpDLCB2b2lkICptb2R1bHVzKTsKKyNlbmRpZgorCisjZW5kaWYKKworCisvKiBtYXAgUCB0byBhZmZpbmUgZnJvbSBwcm9qZWN0aXZlICovCitpbnQgbHRjX2VjY19tYXAoZWNjX3BvaW50ICpQLCB2b2lkICptb2R1bHVzLCB2b2lkICptcCk7CisKKyNlbmRpZgorCisjaWZkZWYgTURTQQorCisvKiBNYXggZGlmZiBiZXR3ZWVuIGdyb3VwIGFuZCBtb2R1bHVzIHNpemUgaW4gYnl0ZXMgKi8KKyNkZWZpbmUgTURTQV9ERUxUQSAgICAgNTEyCisKKy8qIE1heCBEU0EgZ3JvdXAgc2l6ZSBpbiBieXRlcyAoZGVmYXVsdCBhbGxvd3MgNGstYml0IGdyb3VwcykgKi8KKyNkZWZpbmUgTURTQV9NQVhfR1JPVVAgNTEyCisKKy8qKiBEU0Ega2V5IHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgLyoqIFRoZSBrZXkgdHlwZSwgUEtfUFJJVkFURSBvciBQS19QVUJMSUMgKi8KKyAgIGludCB0eXBlOyAKKworICAgLyoqIFRoZSBvcmRlciBvZiB0aGUgc3ViLWdyb3VwIHVzZWQgaW4gb2N0ZXRzICovCisgICBpbnQgcW9yZDsKKworICAgLyoqIFRoZSBnZW5lcmF0b3IgICovCisgICB2b2lkICpnOworCisgICAvKiogVGhlIHByaW1lIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHN1Yi1ncm91cCAqLworICAgdm9pZCAqcTsKKworICAgLyoqIFRoZSBsYXJnZSBwcmltZSB0aGF0IGdlbmVyYXRzIHRoZSBmaWVsZCB0aGUgY29udGFpbnMgdGhlIHN1Yi1ncm91cCAqLworICAgdm9pZCAqcDsKKworICAgLyoqIFRoZSBwcml2YXRlIGtleSAqLworICAgdm9pZCAqeDsKKworICAgLyoqIFRoZSBwdWJsaWMga2V5ICovCisgICB2b2lkICp5OworfSBkc2Ffa2V5OworCitpbnQgZHNhX21ha2Vfa2V5KHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgaW50IGdyb3VwX3NpemUsIGludCBtb2R1bHVzX3NpemUsIGRzYV9rZXkgKmtleSk7Cit2b2lkIGRzYV9mcmVlKGRzYV9rZXkgKmtleSk7CisKK2ludCBkc2Ffc2lnbl9oYXNoX3Jhdyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnIsICAgdm9pZCAqcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGRzYV9rZXkgKmtleSk7CisKK2ludCBkc2Ffc2lnbl9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBkc2Ffa2V5ICprZXkpOworCitpbnQgZHNhX3ZlcmlmeV9oYXNoX3JhdyggICAgICAgICB2b2lkICpyLCAgICAgICAgICB2b2lkICpzLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCB1bnNpZ25lZCBsb25nIGhhc2hsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdGF0LCAgICAgIGRzYV9rZXkgKmtleSk7CisKK2ludCBkc2FfdmVyaWZ5X2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCAgdW5zaWduZWQgbG9uZyBzaWdsZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhhc2gsIHVuc2lnbmVkIGxvbmcgaGFzaGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgKnN0YXQsIGRzYV9rZXkgICAgICAgKmtleSk7CisKK2ludCBkc2FfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgaGFzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRzYV9rZXkgKmtleSk7CisgICAgICAgICAgICAgICAgICAgICAgCitpbnQgZHNhX2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZHNhX2tleSAqa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgCitpbnQgZHNhX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgZHNhX2tleSAqa2V5KTsKK2ludCBkc2FfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBpbnQgdHlwZSwgZHNhX2tleSAqa2V5KTsKK2ludCBkc2FfdmVyaWZ5X2tleShkc2Ffa2V5ICprZXksIGludCAqc3RhdCk7CisKK2ludCBkc2Ffc2hhcmVkX3NlY3JldCh2b2lkICAgICAgICAgICpwcml2YXRlX2tleSwgdm9pZCAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICBkc2Ffa2V5ICAgICAgICpwdWJsaWNfa2V5LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworI2VuZGlmCisKKyNpZmRlZiBMVENfREVSCisvKiBERVIgaGFuZGxpbmcgKi8KKworZW51bSB7CisgTFRDX0FTTjFfRU9MLAorIExUQ19BU04xX0JPT0xFQU4sCisgTFRDX0FTTjFfSU5URUdFUiwKKyBMVENfQVNOMV9TSE9SVF9JTlRFR0VSLAorIExUQ19BU04xX0JJVF9TVFJJTkcsCisgTFRDX0FTTjFfT0NURVRfU1RSSU5HLAorIExUQ19BU04xX05VTEwsCisgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVIsCisgTFRDX0FTTjFfSUE1X1NUUklORywKKyBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HLAorIExUQ19BU04xX1VURjhfU1RSSU5HLAorIExUQ19BU04xX1VUQ1RJTUUsCisgTFRDX0FTTjFfQ0hPSUNFLAorIExUQ19BU04xX1NFUVVFTkNFLAorIExUQ19BU04xX1NFVCwKKyBMVENfQVNOMV9TRVRPRgorfTsKKworLyoqIEEgTFRDIEFTTi4xIGxpc3QgdHlwZSAqLwordHlwZWRlZiBzdHJ1Y3QgbHRjX2FzbjFfbGlzdF8geworICAgLyoqIFRoZSBMVEMgQVNOLjEgZW51bWVyYXRlZCB0eXBlIGlkZW50aWZpZXIgKi8KKyAgIGludCAgICAgICAgICAgdHlwZTsKKyAgIC8qKiBUaGUgZGF0YSB0byBlbmNvZGUgb3IgcGxhY2UgZm9yIGRlY29kaW5nICovCisgICB2b2lkICAgICAgICAgKmRhdGE7CisgICAvKiogVGhlIHNpemUgb2YgdGhlIGlucHV0IG9yIHJlc3VsdGluZyBvdXRwdXQgKi8KKyAgIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKyAgIC8qKiBUaGUgdXNlZCBmbGFnLCB0aGlzIGlzIHVzZWQgYnkgdGhlIENIT0lDRSBBU04uMSB0eXBlIHRvIGluZGljYXRlIHdoaWNoIGNob2ljZSB3YXMgbWFkZSAqLworICAgaW50ICAgICAgICAgICB1c2VkOworICAgLyoqIHByZXYvbmV4dCBlbnRyeSBpbiB0aGUgbGlzdCAqLworICAgc3RydWN0IGx0Y19hc24xX2xpc3RfICpwcmV2LCAqbmV4dCwgKmNoaWxkLCAqcGFyZW50OworfSBsdGNfYXNuMV9saXN0OworCisjZGVmaW5lIExUQ19TRVRfQVNOMShsaXN0LCBpbmRleCwgVHlwZSwgRGF0YSwgU2l6ZSkgIFwKKyAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgaW50IExUQ19NQUNST190ZW1wICAgICAgICAgICAgPSAoaW5kZXgpOyAgICAgICBcCisgICAgICBsdGNfYXNuMV9saXN0ICpMVENfTUFDUk9fbGlzdCA9IChsaXN0KTsgICAgICAgIFwKKyAgICAgIExUQ19NQUNST19saXN0W0xUQ19NQUNST190ZW1wXS50eXBlID0gKFR5cGUpOyAgXAorICAgICAgTFRDX01BQ1JPX2xpc3RbTFRDX01BQ1JPX3RlbXBdLmRhdGEgPSAodm9pZCopKERhdGEpOyAgXAorICAgICAgTFRDX01BQ1JPX2xpc3RbTFRDX01BQ1JPX3RlbXBdLnNpemUgPSAoU2l6ZSk7ICBcCisgICAgICBMVENfTUFDUk9fbGlzdFtMVENfTUFDUk9fdGVtcF0udXNlZCA9IDA7ICAgICAgIFwKKyAgIH0gd2hpbGUgKDApOworCisvKiBTRVFVRU5DRSAqLworaW50IGRlcl9lbmNvZGVfc2VxdWVuY2VfZXgobHRjX2FzbjFfbGlzdCAqbGlzdCwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgaW50IHR5cGVfb2YpOworICAgICAgICAgICAgICAgICAgICAgICAgICAKKyNkZWZpbmUgZGVyX2VuY29kZV9zZXF1ZW5jZShsaXN0LCBpbmxlbiwgb3V0LCBvdXRsZW4pIGRlcl9lbmNvZGVfc2VxdWVuY2VfZXgobGlzdCwgaW5sZW4sIG91dCwgb3V0bGVuLCBMVENfQVNOMV9TRVFVRU5DRSkgICAgICAgICAgICAgICAgICAgICAgICAKKworaW50IGRlcl9kZWNvZGVfc2VxdWVuY2VfZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2FzbjFfbGlzdCAqbGlzdCwgICAgIHVuc2lnbmVkIGxvbmcgIG91dGxlbiwgaW50IG9yZGVyZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisjZGVmaW5lIGRlcl9kZWNvZGVfc2VxdWVuY2UoaW4sIGlubGVuLCBsaXN0LCBvdXRsZW4pIGRlcl9kZWNvZGVfc2VxdWVuY2VfZXgoaW4sIGlubGVuLCBsaXN0LCBvdXRsZW4sIDEpCisKK2ludCBkZXJfbGVuZ3RoX3NlcXVlbmNlKGx0Y19hc24xX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCisvKiBTRVQgKi8KKyNkZWZpbmUgZGVyX2RlY29kZV9zZXQoaW4sIGlubGVuLCBsaXN0LCBvdXRsZW4pIGRlcl9kZWNvZGVfc2VxdWVuY2VfZXgoaW4sIGlubGVuLCBsaXN0LCBvdXRsZW4sIDApCisjZGVmaW5lIGRlcl9sZW5ndGhfc2V0IGRlcl9sZW5ndGhfc2VxdWVuY2UKK2ludCBkZXJfZW5jb2RlX3NldChsdGNfYXNuMV9saXN0ICpsaXN0LCB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKK2ludCBkZXJfZW5jb2RlX3NldG9mKGx0Y19hc24xX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgCisvKiBWQSBsaXN0IGhhbmR5IGhlbHBlcnMgd2l0aCB0cmlwbGV0cyBvZiA8dHlwZSwgc2l6ZSwgZGF0YT4gKi8KK2ludCBkZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAuLi4pOworaW50IGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIC4uLik7CisKKy8qIEZMRVhJIERFQ09ERVIgaGFuZGxlIHVua25vd24gbGlzdCBkZWNvZGVyICovCitpbnQgIGRlcl9kZWNvZGVfc2VxdWVuY2VfZmxleGkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgKmlubGVuLCBsdGNfYXNuMV9saXN0ICoqb3V0KTsKK3ZvaWQgZGVyX2ZyZWVfc2VxdWVuY2VfZmxleGkobHRjX2FzbjFfbGlzdCAqbGlzdCk7Cit2b2lkIGRlcl9zZXF1ZW5jZV9mcmVlKGx0Y19hc24xX2xpc3QgKmluKTsKKworLyogQk9PTEVBTiAqLworaW50IGRlcl9sZW5ndGhfYm9vbGVhbih1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9lbmNvZGVfYm9vbGVhbihpbnQgaW4sIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgZGVyX2RlY29kZV9ib29sZWFuKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpvdXQpOwkJICAgICAgIAorLyogSU5URUdFUiAqLworaW50IGRlcl9lbmNvZGVfaW50ZWdlcih2b2lkICpudW0sIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfZGVjb2RlX2ludGVnZXIoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHZvaWQgKm51bSk7CitpbnQgZGVyX2xlbmd0aF9pbnRlZ2VyKHZvaWQgKm51bSwgdW5zaWduZWQgbG9uZyAqbGVuKTsKKworLyogSU5URUdFUiAtLSBoYW5keSBmb3IgMC4uMl4zMi0xIHZhbHVlcyAqLworaW50IGRlcl9kZWNvZGVfc2hvcnRfaW50ZWdlcihjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgdW5zaWduZWQgbG9uZyAqbnVtKTsKK2ludCBkZXJfZW5jb2RlX3Nob3J0X2ludGVnZXIodW5zaWduZWQgbG9uZyBudW0sIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfbGVuZ3RoX3Nob3J0X2ludGVnZXIodW5zaWduZWQgbG9uZyBudW0sIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKKy8qIEJJVCBTVFJJTkcgKi8KK2ludCBkZXJfZW5jb2RlX2JpdF9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfZGVjb2RlX2JpdF9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfbGVuZ3RoX2JpdF9zdHJpbmcodW5zaWduZWQgbG9uZyBuYml0cywgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworLyogT0NURVQgU1RSSU5HICovCitpbnQgZGVyX2VuY29kZV9vY3RldF9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9kZWNvZGVfb2N0ZXRfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfbGVuZ3RoX29jdGV0X3N0cmluZyh1bnNpZ25lZCBsb25nIG5vY3RldHMsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKKy8qIE9CSkVDVCBJREVOVElGSUVSICovCitpbnQgZGVyX2VuY29kZV9vYmplY3RfaWRlbnRpZmllcih1bnNpZ25lZCBsb25nICp3b3JkcywgdW5zaWduZWQgbG9uZyAgbndvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CitpbnQgZGVyX2RlY29kZV9vYmplY3RfaWRlbnRpZmllcihjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICp3b3JkcywgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK2ludCBkZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyKHVuc2lnbmVkIGxvbmcgKndvcmRzLCB1bnNpZ25lZCBsb25nIG53b3JkcywgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK3Vuc2lnbmVkIGxvbmcgZGVyX29iamVjdF9pZGVudGlmaWVyX2JpdHModW5zaWduZWQgbG9uZyB4KTsKKworLyogSUE1IFNUUklORyAqLworaW50IGRlcl9lbmNvZGVfaWE1X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9kZWNvZGVfaWE1X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9sZW5ndGhfaWE1X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICpvY3RldHMsIHVuc2lnbmVkIGxvbmcgbm9jdGV0cywgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IGRlcl9pYTVfY2hhcl9lbmNvZGUoaW50IGMpOworaW50IGRlcl9pYTVfdmFsdWVfZGVjb2RlKGludCB2KTsKKworLyogUHJpbnRhYmxlIFNUUklORyAqLworaW50IGRlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9kZWNvZGVfcHJpbnRhYmxlX3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworaW50IGRlcl9sZW5ndGhfcHJpbnRhYmxlX3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICpvY3RldHMsIHVuc2lnbmVkIGxvbmcgbm9jdGV0cywgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IGRlcl9wcmludGFibGVfY2hhcl9lbmNvZGUoaW50IGMpOworaW50IGRlcl9wcmludGFibGVfdmFsdWVfZGVjb2RlKGludCB2KTsKKworLyogVVRGLTggKi8KKyNpZiAoZGVmaW5lZChTSVpFX01BWCkgfHwgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMIHx8IGRlZmluZWQoV0NIQVJfTUFYKSB8fCBkZWZpbmVkKF9XQ0hBUl9UKSB8fCBkZWZpbmVkKF9XQ0hBUl9UX0RFRklORUQpKSAmJiAhZGVmaW5lZChMVENfTk9fV0NIQVIpCisjaW5jbHVkZSA8d2NoYXIuaD4KKyNlbHNlCit0eXBlZGVmIHVsb25nMzIgd2NoYXJfdDsKKyNlbmRpZgorCitpbnQgZGVyX2VuY29kZV91dGY4X3N0cmluZyhjb25zdCB3Y2hhcl90ICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKK2ludCBkZXJfZGVjb2RlX3V0Zjhfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKK3Vuc2lnbmVkIGxvbmcgZGVyX3V0ZjhfY2hhcnNpemUoY29uc3Qgd2NoYXJfdCBjKTsKK2ludCBkZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nKGNvbnN0IHdjaGFyX3QgKmluLCB1bnNpZ25lZCBsb25nIG5vY3RldHMsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKKworLyogQ0hPSUNFICovCitpbnQgZGVyX2RlY29kZV9jaG9pY2UoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyAqaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2FzbjFfbGlzdCAqbGlzdCwgdW5zaWduZWQgbG9uZyAgb3V0bGVuKTsKKworLyogVVRDVGltZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgdW5zaWduZWQgWVksIC8qIHllYXIgKi8KKyAgICAgICAgICAgIE1NLCAvKiBtb250aCAqLworICAgICAgICAgICAgREQsIC8qIGRheSAqLworICAgICAgICAgICAgaGgsIC8qIGhvdXIgKi8KKyAgICAgICAgICAgIG1tLCAvKiBtaW51dGUgKi8KKyAgICAgICAgICAgIHNzLCAvKiBzZWNvbmQgKi8KKyAgICAgICAgICAgIG9mZl9kaXIsIC8qIHRpbWV6b25lIG9mZnNldCBkaXJlY3Rpb24gMCA9PSArLCAxID09IC0gKi8KKyAgICAgICAgICAgIG9mZl9oaCwgLyogdGltZXpvbmUgb2Zmc2V0IGhvdXJzICovCisgICAgICAgICAgICBvZmZfbW07IC8qIHRpbWV6b25lIG9mZnNldCBtaW51dGVzICovCit9IGx0Y191dGN0aW1lOworCitpbnQgZGVyX2VuY29kZV91dGN0aW1lKGx0Y191dGN0aW1lICp1dGN0aW1lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKK2ludCBkZXJfZGVjb2RlX3V0Y3RpbWUoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgKmlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdGNfdXRjdGltZSAgICpvdXQpOworCitpbnQgZGVyX2xlbmd0aF91dGN0aW1lKGx0Y191dGN0aW1lICp1dGN0aW1lLCB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9way5oLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjc3ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzAzIDAwOjM5OjU2ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BrY3MuaCBiL2xpYnRvbWNyeXB0L3NyYy9oZWFkZXJzL3RvbWNyeXB0X3BrY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWJjZGI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGtjcy5oCkBAIC0wLDAgKzEsODkgQEAKKy8qIFBLQ1MgSGVhZGVyIEluZm8gKi8KKworLyogPT09PiBQS0NTICMxIC0tIFJTQSBDcnlwdG9ncmFwaHkgPD09PSAqLworI2lmZGVmIFBLQ1NfMQorCitlbnVtIGx0Y19wa2NzXzFfdjFfNV9ibG9ja3MKK3sKKyAgTFRDX1BLQ1NfMV9FTVNBICAgPSAxLCAgICAgICAgLyogQmxvY2sgdHlwZSAxIChQS0NTICMxIHYxLjUgc2lnbmF0dXJlIHBhZGRpbmcpICovCisgIExUQ19QS0NTXzFfRU1FICAgID0gMiAgICAgICAgIC8qIEJsb2NrIHR5cGUgMiAoUEtDUyAjMSB2MS41IGVuY3J5cHRpb24gcGFkZGluZykgKi8KK307CisKK2VudW0gbHRjX3BrY3NfMV9wYWRkaW5ncworeworICBMVENfUEtDU18xX1YxXzUgICA9IDEsICAgICAgICAvKiBQS0NTICMxIHYxLjUgcGFkZGluZyAoXHNhIGx0Y19wa2NzXzFfdjFfNV9ibG9ja3MpICovCisgIExUQ19QS0NTXzFfT0FFUCAgID0gMiwgICAgICAgIC8qIFBLQ1MgIzEgdjIuMCBlbmNyeXB0aW9uIHBhZGRpbmcgKi8KKyAgTFRDX1BLQ1NfMV9QU1MgICAgPSAzICAgICAgICAgLyogUEtDUyAjMSB2Mi4xIHNpZ25hdHVyZSBwYWRkaW5nICovCit9OworCitpbnQgcGtjc18xX21nZjEoICAgICAgaW50ICAgICAgICAgICAgaGFzaF9pZHgsCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2VlZCwgdW5zaWduZWQgbG9uZyBzZWVkbGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm1hc2ssIHVuc2lnbmVkIGxvbmcgbWFza2xlbik7CisKK2ludCBwa2NzXzFfaTJvc3Aodm9pZCAqbiwgdW5zaWduZWQgbG9uZyBtb2R1bHVzX2xlbiwgdW5zaWduZWQgY2hhciAqb3V0KTsKK2ludCBwa2NzXzFfb3MyaXAodm9pZCAqbiwgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4pOworCisvKiAqKiogdjEuNSBwYWRkaW5nICovCitpbnQgcGtjc18xX3YxXzVfZW5jb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgYmxvY2tfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbW9kdWx1c19iaXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBwcm5nX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IHBrY3NfMV92MV81X2RlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBtc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGJsb2NrX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1vZHVsdXNfYml0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmlzX3ZhbGlkKTsKKworLyogKioqIHYyLjEgcGFkZGluZyAqLworaW50IHBrY3NfMV9vYWVwX2VuY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICptc2csICAgIHVuc2lnbmVkIGxvbmcgbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sIHVuc2lnbmVkIGxvbmcgbHBhcmFtbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLCBwcm5nX3N0YXRlICpwcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgIHBybmdfaWR4LCAgICAgICAgIGludCAgaGFzaF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworaW50IHBrY3NfMV9vYWVwX2RlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICptc2csICAgIHVuc2lnbmVkIGxvbmcgbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sIHVuc2lnbmVkIGxvbmcgbHBhcmFtbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLCBpbnQgaGFzaF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICpyZXMpOworCitpbnQgcGtjc18xX3Bzc19lbmNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqbXNnaGFzaCwgdW5zaWduZWQgbG9uZyBtc2doYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2FsdGxlbiwgIHBybmdfc3RhdGUgICAqcHJuZywgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgcHJuZ19pZHgsIGludCAgICAgICAgICAgaGFzaF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtb2R1bHVzX2JpdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pOworCitpbnQgcGtjc18xX3Bzc19kZWNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqbXNnaGFzaCwgdW5zaWduZWQgbG9uZyBtc2doYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgICAgIHVuc2lnbmVkIGxvbmcgc2lnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc2FsdGxlbiwgIGludCAgICAgICAgICAgaGFzaF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtb2R1bHVzX2JpdGxlbiwgaW50ICAgICpyZXMpOworCisjZW5kaWYgLyogUEtDU18xICovCisKKy8qID09PT4gUEtDUyAjNSAtLSBQYXNzd29yZCBCYXNlZCBDcnlwdG9ncmFwaHkgPD09PSAqLworI2lmZGVmIFBLQ1NfNQorCisvKiBBbGdvcml0aG0gIzEgKG9sZCkgKi8KK2ludCBwa2NzXzVfYWxnMShjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd29yZCwgdW5zaWduZWQgbG9uZyBwYXNzd29yZF9sZW4sIAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIAorICAgICAgICAgICAgICAgIGludCBpdGVyYXRpb25fY291bnQsICBpbnQgaGFzaF9pZHgsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKKy8qIEFsZ29yaXRobSAjMiAobmV3KSAqLworaW50IHBrY3NfNV9hbGcyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3b3JkLCB1bnNpZ25lZCBsb25nIHBhc3N3b3JkX2xlbiwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgICAgIHVuc2lnbmVkIGxvbmcgc2FsdF9sZW4sCisgICAgICAgICAgICAgICAgaW50IGl0ZXJhdGlvbl9jb3VudCwgICAgICAgICAgIGludCBoYXNoX2lkeCwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKTsKKworI2VuZGlmICAvKiBQS0NTXzUgKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfcGtjcy5oLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMTUgMTI6NDQ6NTkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfcHJuZy5oIGIvbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfcHJuZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNjQwYzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvaGVhZGVycy90b21jcnlwdF9wcm5nLmgKQEAgLTAsMCArMSwxOTkgQEAKKy8qIC0tLS0gUFJORyBTdHVmZiAtLS0tICovCisjaWZkZWYgWUFSUk9XCitzdHJ1Y3QgeWFycm93X3BybmcgeworICAgIGludCAgICAgICAgICAgICAgICAgICBjaXBoZXIsIGhhc2g7CisgICAgdW5zaWduZWQgY2hhciAgICAgICAgIHBvb2xbTUFYQkxPQ0tTSVpFXTsKKyAgICBzeW1tZXRyaWNfQ1RSICAgICAgICAgY3RyOworICAgIExUQ19NVVRFWF9UWVBFKHBybmdfbG9jaykKK307CisjZW5kaWYKKworI2lmZGVmIFJDNAorc3RydWN0IHJjNF9wcm5nIHsKKyAgICBpbnQgeCwgeTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOworfTsKKyNlbmRpZgorCisjaWZkZWYgRk9SVFVOQQorc3RydWN0IGZvcnR1bmFfcHJuZyB7CisgICAgaGFzaF9zdGF0ZSBwb29sW0ZPUlRVTkFfUE9PTFNdOyAgICAgLyogdGhlICBwb29scyAqLworCisgICAgc3ltbWV0cmljX2tleSBza2V5OworCisgICAgdW5zaWduZWQgY2hhciBLWzMyXSwgICAgICAvKiB0aGUgY3VycmVudCBrZXkgKi8KKyAgICAgICAgICAgICAgICAgIElWWzE2XTsgICAgIC8qIElWIGZvciBDVFIgbW9kZSAqLworICAgIAorICAgIHVuc2lnbmVkIGxvbmcgcG9vbF9pZHgsICAgLyogY3VycmVudCBwb29sIHdlIHdpbGwgYWRkIHRvICovCisgICAgICAgICAgICAgICAgICBwb29sMF9sZW4sICAvKiBsZW5ndGggb2YgMCd0aCBwb29sICovCisgICAgICAgICAgICAgICAgICB3ZDsgICAgICAgICAgICAKKworICAgIHVsb25nNjQgICAgICAgcmVzZXRfY250OyAgLyogbnVtYmVyIG9mIHRpbWVzIHdlIGhhdmUgcmVzZXQgKi8KKyAgICBMVENfTVVURVhfVFlQRShwcm5nX2xvY2spCit9OworI2VuZGlmCisKKyNpZmRlZiBTT0JFUjEyOAorc3RydWN0IHNvYmVyMTI4X3BybmcgeworICAgIHVsb25nMzIgICAgICBSWzE3XSwgICAgICAgICAgLyogV29ya2luZyBzdG9yYWdlIGZvciB0aGUgc2hpZnQgcmVnaXN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgaW5pdFJbMTddLCAgICAgIC8qIHNhdmVkIHJlZ2lzdGVyIGNvbnRlbnRzICovIAorICAgICAgICAgICAgICAgICBrb25zdCwgICAgICAgICAgLyoga2V5IGRlcGVuZGVudCBjb25zdGFudCAqLworICAgICAgICAgICAgICAgICBzYnVmOyAgICAgICAgICAgLyogcGFydGlhbCB3b3JkIGVuY3J5cHRpb24gYnVmZmVyICovCisKKyAgICBpbnQgICAgICAgICAgbmJ1ZiwgICAgICAgICAgIC8qIG51bWJlciBvZiBwYXJ0LXdvcmQgc3RyZWFtIGJpdHMgYnVmZmVyZWQgKi8KKyAgICAgICAgICAgICAgICAgZmxhZywgICAgICAgICAgIC8qIGZpcnN0IGFkZF9lbnRyb3B5IGNhbGwgb3Igbm90PyAqLworICAgICAgICAgICAgICAgICBzZXQ7ICAgICAgICAgICAgLyogZGlkIHdlIGNhbGwgYWRkX2VudHJvcHkgdG8gc2V0IGtleT8gKi8KKyAgICAKK307CisjZW5kaWYKKwordHlwZWRlZiB1bmlvbiBQcm5nX3N0YXRlIHsKKyAgICBjaGFyIGR1bW15WzFdOworI2lmZGVmIFlBUlJPVworICAgIHN0cnVjdCB5YXJyb3dfcHJuZyAgICB5YXJyb3c7CisjZW5kaWYKKyNpZmRlZiBSQzQKKyAgICBzdHJ1Y3QgcmM0X3BybmcgICAgICAgcmM0OworI2VuZGlmCisjaWZkZWYgRk9SVFVOQQorICAgIHN0cnVjdCBmb3J0dW5hX3BybmcgICBmb3J0dW5hOworI2VuZGlmCisjaWZkZWYgU09CRVIxMjgKKyAgICBzdHJ1Y3Qgc29iZXIxMjhfcHJuZyAgc29iZXIxMjg7CisjZW5kaWYKK30gcHJuZ19zdGF0ZTsKKworLyoqIFBSTkcgZGVzY3JpcHRvciAqLworZXh0ZXJuIHN0cnVjdCBsdGNfcHJuZ19kZXNjcmlwdG9yIHsKKyAgICAvKiogTmFtZSBvZiB0aGUgUFJORyAqLworICAgIGNoYXIgKm5hbWU7CisgICAgLyoqIHNpemUgaW4gYnl0ZXMgb2YgZXhwb3J0ZWQgc3RhdGUgKi8KKyAgICBpbnQgIGV4cG9ydF9zaXplOworICAgIC8qKiBTdGFydCBhIFBSTkcgc3RhdGUKKyAgICAgICAgQHBhcmFtIHBybmcgICBbb3V0XSBUaGUgc3RhdGUgdG8gaW5pdGlhbGl6ZQorICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICAqLworICAgIGludCAoKnN0YXJ0KShwcm5nX3N0YXRlICpwcm5nKTsKKyAgICAvKiogQWRkIGVudHJvcHkgdG8gdGhlIFBSTkcKKyAgICAgICAgQHBhcmFtIGluICAgICAgICAgVGhlIGVudHJvcHkKKyAgICAgICAgQHBhcmFtIGlubGVuICAgICAgTGVuZ3RoIG9mIHRoZSBlbnRyb3B5IChvY3RldHMpXAorICAgICAgICBAcGFyYW0gcHJuZyAgICAgICBUaGUgUFJORyBzdGF0ZQorICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICAqLworICAgIGludCAoKmFkZF9lbnRyb3B5KShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgcHJuZ19zdGF0ZSAqcHJuZyk7CisgICAgLyoqIFJlYWR5IGEgUFJORyBzdGF0ZSB0byByZWFkIGZyb20KKyAgICAgICAgQHBhcmFtIHBybmcgICAgICAgVGhlIFBSTkcgc3RhdGUgdG8gcmVhZHkKKyAgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAgKi8KKyAgICBpbnQgKCpyZWFkeSkocHJuZ19zdGF0ZSAqcHJuZyk7CisgICAgLyoqIFJlYWQgZnJvbSB0aGUgUFJORworICAgICAgICBAcGFyYW0gb3V0ICAgICBbb3V0XSBXaGVyZSB0byBzdG9yZSB0aGUgZGF0YQorICAgICAgICBAcGFyYW0gb3V0bGVuICBMZW5ndGggb2YgZGF0YSBkZXNpcmVkIChvY3RldHMpCisgICAgICAgIEBwYXJhbSBwcm5nICAgIFRoZSBQUk5HIHN0YXRlIHRvIHJlYWQgZnJvbQorICAgICAgICBAcmV0dXJuIE51bWJlciBvZiBvY3RldHMgcmVhZAorICAgICovCisgICAgdW5zaWduZWQgbG9uZyAoKnJlYWQpKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyBvdXRsZW4sIHBybmdfc3RhdGUgKnBybmcpOworICAgIC8qKiBUZXJtaW5hdGUgYSBQUk5HIHN0YXRlCisgICAgICAgIEBwYXJhbSBwcm5nICAgVGhlIFBSTkcgc3RhdGUgdG8gdGVybWluYXRlCisgICAgICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICAgICovCisgICAgaW50ICgqZG9uZSkocHJuZ19zdGF0ZSAqcHJuZyk7CisgICAgLyoqIEV4cG9ydCBhIFBSTkcgc3RhdGUgIAorICAgICAgICBAcGFyYW0gb3V0ICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBzdGF0ZQorICAgICAgICBAcGFyYW0gb3V0bGVuICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBQUk5HIHN0YXRlCisgICAgICAgIEBwYXJhbSBwcm5nICAgIFRoZSBQUk5HIHRvIGV4cG9ydAorICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyAgICAqLworICAgIGludCAoKnBleHBvcnQpKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBwcm5nX3N0YXRlICpwcm5nKTsKKyAgICAvKiogSW1wb3J0IGEgUFJORyBzdGF0ZQorICAgICAgICBAcGFyYW0gaW4gICAgICBUaGUgZGF0YSB0byBpbXBvcnQKKyAgICAgICAgQHBhcmFtIGlubGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgZGF0YSB0byBpbXBvcnQgKG9jdGV0cykKKyAgICAgICAgQHBhcmFtIHBybmcgICAgVGhlIFBSTkcgdG8gaW5pdGlhbGl6ZS9pbXBvcnQKKyAgICAgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisgICAgKi8KKyAgICBpbnQgKCpwaW1wb3J0KShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgcHJuZ19zdGF0ZSAqcHJuZyk7CisgICAgLyoqIFNlbGYtdGVzdCB0aGUgUFJORworICAgICAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3RpbmcgaGFzIGJlZW4gZGlzYWJsZWQKKyAgICAqLworICAgIGludCAoKnRlc3QpKHZvaWQpOworfSBwcm5nX2Rlc2NyaXB0b3JbXTsKKworI2lmZGVmIFlBUlJPVworaW50IHlhcnJvd19zdGFydChwcm5nX3N0YXRlICpwcm5nKTsKK2ludCB5YXJyb3dfYWRkX2VudHJvcHkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHBybmdfc3RhdGUgKnBybmcpOworaW50IHlhcnJvd19yZWFkeShwcm5nX3N0YXRlICpwcm5nKTsKK3Vuc2lnbmVkIGxvbmcgeWFycm93X3JlYWQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nIG91dGxlbiwgcHJuZ19zdGF0ZSAqcHJuZyk7CitpbnQgeWFycm93X2RvbmUocHJuZ19zdGF0ZSAqcHJuZyk7CitpbnQgIHlhcnJvd19leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIHBybmdfc3RhdGUgKnBybmcpOworaW50ICB5YXJyb3dfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBwcm5nX3N0YXRlICpwcm5nKTsKK2ludCAgeWFycm93X3Rlc3Qodm9pZCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19wcm5nX2Rlc2NyaXB0b3IgeWFycm93X2Rlc2M7CisjZW5kaWYKKworI2lmZGVmIEZPUlRVTkEKK2ludCBmb3J0dW5hX3N0YXJ0KHBybmdfc3RhdGUgKnBybmcpOworaW50IGZvcnR1bmFfYWRkX2VudHJvcHkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHBybmdfc3RhdGUgKnBybmcpOworaW50IGZvcnR1bmFfcmVhZHkocHJuZ19zdGF0ZSAqcHJuZyk7Cit1bnNpZ25lZCBsb25nIGZvcnR1bmFfcmVhZCh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgb3V0bGVuLCBwcm5nX3N0YXRlICpwcm5nKTsKK2ludCBmb3J0dW5hX2RvbmUocHJuZ19zdGF0ZSAqcHJuZyk7CitpbnQgIGZvcnR1bmFfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBwcm5nX3N0YXRlICpwcm5nKTsKK2ludCAgZm9ydHVuYV9pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHBybmdfc3RhdGUgKnBybmcpOworaW50ICBmb3J0dW5hX3Rlc3Qodm9pZCk7CitleHRlcm4gY29uc3Qgc3RydWN0IGx0Y19wcm5nX2Rlc2NyaXB0b3IgZm9ydHVuYV9kZXNjOworI2VuZGlmCisKKyNpZmRlZiBSQzQKK2ludCByYzRfc3RhcnQocHJuZ19zdGF0ZSAqcHJuZyk7CitpbnQgcmM0X2FkZF9lbnRyb3B5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBwcm5nX3N0YXRlICpwcm5nKTsKK2ludCByYzRfcmVhZHkocHJuZ19zdGF0ZSAqcHJuZyk7Cit1bnNpZ25lZCBsb25nIHJjNF9yZWFkKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyBvdXRsZW4sIHBybmdfc3RhdGUgKnBybmcpOworaW50ICByYzRfZG9uZShwcm5nX3N0YXRlICpwcm5nKTsKK2ludCAgcmM0X2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgcHJuZ19zdGF0ZSAqcHJuZyk7CitpbnQgIHJjNF9pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHBybmdfc3RhdGUgKnBybmcpOworaW50ICByYzRfdGVzdCh2b2lkKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX3BybmdfZGVzY3JpcHRvciByYzRfZGVzYzsKKyNlbmRpZgorCisjaWZkZWYgU1BSTkcKK2ludCBzcHJuZ19zdGFydChwcm5nX3N0YXRlICpwcm5nKTsKK2ludCBzcHJuZ19hZGRfZW50cm9weShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgcHJuZ19zdGF0ZSAqcHJuZyk7CitpbnQgc3BybmdfcmVhZHkocHJuZ19zdGF0ZSAqcHJuZyk7Cit1bnNpZ25lZCBsb25nIHNwcm5nX3JlYWQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nIG91dGxlbiwgcHJuZ19zdGF0ZSAqcHJuZyk7CitpbnQgc3BybmdfZG9uZShwcm5nX3N0YXRlICpwcm5nKTsKK2ludCAgc3BybmdfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBwcm5nX3N0YXRlICpwcm5nKTsKK2ludCAgc3BybmdfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBwcm5nX3N0YXRlICpwcm5nKTsKK2ludCAgc3BybmdfdGVzdCh2b2lkKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbHRjX3BybmdfZGVzY3JpcHRvciBzcHJuZ19kZXNjOworI2VuZGlmCisKKyNpZmRlZiBTT0JFUjEyOAoraW50IHNvYmVyMTI4X3N0YXJ0KHBybmdfc3RhdGUgKnBybmcpOworaW50IHNvYmVyMTI4X2FkZF9lbnRyb3B5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBwcm5nX3N0YXRlICpwcm5nKTsKK2ludCBzb2JlcjEyOF9yZWFkeShwcm5nX3N0YXRlICpwcm5nKTsKK3Vuc2lnbmVkIGxvbmcgc29iZXIxMjhfcmVhZCh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgb3V0bGVuLCBwcm5nX3N0YXRlICpwcm5nKTsKK2ludCBzb2JlcjEyOF9kb25lKHBybmdfc3RhdGUgKnBybmcpOworaW50ICBzb2JlcjEyOF9leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIHBybmdfc3RhdGUgKnBybmcpOworaW50ICBzb2JlcjEyOF9pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHBybmdfc3RhdGUgKnBybmcpOworaW50ICBzb2JlcjEyOF90ZXN0KHZvaWQpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBsdGNfcHJuZ19kZXNjcmlwdG9yIHNvYmVyMTI4X2Rlc2M7CisjZW5kaWYKKworaW50IGZpbmRfcHJuZyhjb25zdCBjaGFyICpuYW1lKTsKK2ludCByZWdpc3Rlcl9wcm5nKGNvbnN0IHN0cnVjdCBsdGNfcHJuZ19kZXNjcmlwdG9yICpwcm5nKTsKK2ludCB1bnJlZ2lzdGVyX3BybmcoY29uc3Qgc3RydWN0IGx0Y19wcm5nX2Rlc2NyaXB0b3IgKnBybmcpOworaW50IHBybmdfaXNfdmFsaWQoaW50IGlkeCk7CitMVENfTVVURVhfUFJPVE8obHRjX3BybmdfbXV0ZXgpCisKKy8qIFNsb3cgUk5HIHlvdSAqKm1pZ2h0KiogYmUgYWJsZSB0byB1c2UgdG8gc2VlZCBhIFBSTkcgd2l0aC4gIEJlIGNhcmVmdWwgYXMgdGhpcworICogbWlnaHQgbm90IHdvcmsgb24gYWxsIHBsYXRmb3JtcyBhcyBwbGFubmVkCisgKi8KK3Vuc2lnbmVkIGxvbmcgcm5nX2dldF9ieXRlcyh1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQpKTsKKworaW50IHJuZ19tYWtlX3BybmcoaW50IGJpdHMsIGludCB3cHJuZywgcHJuZ19zdGF0ZSAqcHJuZywgdm9pZCAoKmNhbGxiYWNrKSh2b2lkKSk7CisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL2hlYWRlcnMvdG9tY3J5cHRfcHJuZy5oLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDUgMDE6MzY6NDMgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV9kb25lLmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL2Y5L2Y5X2RvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzk0ZWNjCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV9kb25lLmMKQEAgLTAsMCArMSw3NyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZjlfZG9uZS5jCisgIGY5IFN1cHBvcnQsIHRlcm1pbmF0ZSB0aGUgc3RhdGUKKyovCisKKyNpZmRlZiBMVENfRjlfTU9ERQorCisvKiogVGVybWluYXRlIHRoZSBmOS1NQUMgc3RhdGUKKyAgQHBhcmFtIGY5ICAgICBmOSBzdGF0ZSB0byB0ZXJtaW5hdGUKKyAgQHBhcmFtIG91dCAgICAgIFtvdXRdIERlc3RpbmF0aW9uIGZvciB0aGUgTUFDIHRhZworICBAcGFyYW0gb3V0bGVuICAgW2luL291dF0gRGVzdGluYXRpb24gc2l6ZSBhbmQgZmluYWwgdGFnIHNpemUKKyAgUmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyovCitpbnQgZjlfZG9uZShmOV9zdGF0ZSAqZjksIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgaW50IGVyciwgeDsKKyAgIExUQ19BUkdDSEsoZjkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgIT0gTlVMTCk7CisKKyAgIC8qIGNoZWNrIHN0cnVjdHVyZSAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoZjktPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBpZiAoKGY5LT5ibG9ja3NpemUgPiBjaXBoZXJfZGVzY3JpcHRvcltmOS0+Y2lwaGVyXS5ibG9ja19sZW5ndGgpIHx8IChmOS0+YmxvY2tzaXplIDwgMCkgfHwKKyAgICAgICAoZjktPmJ1ZmxlbiA+IGY5LT5ibG9ja3NpemUpIHx8IChmOS0+YnVmbGVuIDwgMCkpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgaWYgKGY5LT5idWZsZW4gIT0gMCkgeworICAgICAgLyogZW5jcnlwdCAqLworICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbZjktPmNpcGhlcl0uZWNiX2VuY3J5cHQoZjktPklWLCBmOS0+SVYsICZmOS0+a2V5KTsKKyAgICAgIGY5LT5idWZsZW4gPSAwOworICAgICAgZm9yICh4ID0gMDsgeCA8IGY5LT5ibG9ja3NpemU7IHgrKykgeworICAgICAgICAgZjktPkFDQ1t4XSBePSBmOS0+SVZbeF07CisgICAgICB9CisgICB9CisKKyAgIC8qIHNjaGVkdWxlIG1vZGlmaWVkIGtleSAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltmOS0+Y2lwaGVyXS5zZXR1cChmOS0+YWtleSwgZjktPmtleWxlbiwgMCwgJmY5LT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogZW5jcnlwdCB0aGUgQUNDICovCisgICBjaXBoZXJfZGVzY3JpcHRvcltmOS0+Y2lwaGVyXS5lY2JfZW5jcnlwdChmOS0+QUNDLCBmOS0+QUNDLCAmZjktPmtleSk7CisgICBjaXBoZXJfZGVzY3JpcHRvcltmOS0+Y2lwaGVyXS5kb25lKCZmOS0+a2V5KTsKKworICAgLyogZXh0cmFjdCB0YWcgKi8KKyAgIGZvciAoeCA9IDA7IHggPCBmOS0+YmxvY2tzaXplICYmICh1bnNpZ25lZCBsb25nKXggPCAqb3V0bGVuOyB4KyspIHsKKyAgICAgIG91dFt4XSA9IGY5LT5BQ0NbeF07CisgICB9CisgICAqb3V0bGVuID0geDsKKyAgCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGY5LCBzaXplb2YoKmY5KSk7CisjZW5kaWYKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvZjkvZjlfZG9uZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDkgMDE6NTM6MzIgJCAqLworCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL2Y5L2Y5X2ZpbGUuYyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvZjkvZjlfZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjNTNlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL2Y5L2Y5X2ZpbGUuYwpAQCAtMCwwICsxLDgzIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKiAKKyAgQGZpbGUgZjlfZmlsZS5jCisgIGY5IHN1cHBvcnQsIHByb2Nlc3MgYSBmaWxlLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfRjlfTU9ERQorCisvKioKKyAgIGY5IGEgZmlsZQorICAgQHBhcmFtIGNpcGhlciAgIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGRlc2lyZWQKKyAgIEBwYXJhbSBrZXkgICAgICBUaGUgc2VjcmV0IGtleQorICAgQHBhcmFtIGtleWxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZSB5b3Ugd2lzaCB0byBmOQorICAgQHBhcmFtIG91dCAgICAgIFtvdXRdIFdoZXJlIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgaXMgdG8gYmUgc3RvcmVkCisgICBAcGFyYW0gb3V0bGVuICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBmaWxlIHN1cHBvcnQgaGFzIGJlZW4gZGlzYWJsZWQKKyovCitpbnQgZjlfZmlsZShpbnQgY2lwaGVyLAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworI2lmZGVmIExUQ19OT19GSUxFCisgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIGludCBlcnIsIHg7CisgICBmOV9zdGF0ZSBmOTsKKyAgIEZJTEUgKmluOworICAgdW5zaWduZWQgY2hhciBidWZbNTEyXTsKKworICAgTFRDX0FSR0NISyhrZXkgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZmlsZW5hbWUgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gICAhPSBOVUxMKTsKKworICAgaW4gPSBmb3BlbihmaWxlbmFtZSwgInJiIik7CisgICBpZiAoaW4gPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX0ZJTEVfTk9URk9VTkQ7CisgICB9CisKKyAgIGlmICgoZXJyID0gZjlfaW5pdCgmZjksIGNpcGhlciwga2V5LCBrZXlsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZmNsb3NlKGluKTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGRvIHsKKyAgICAgIHggPSBmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBpbik7CisgICAgICBpZiAoKGVyciA9IGY5X3Byb2Nlc3MoJmY5LCBidWYsIHgpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZmNsb3NlKGluKTsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgICB9IHdoaWxlICh4ID09IHNpemVvZihidWYpKTsKKyAgIGZjbG9zZShpbik7CisKKyAgIGlmICgoZXJyID0gZjlfZG9uZSgmZjksICAgIG91dCwgb3V0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0oYnVmLCBzaXplb2YoYnVmKSk7CisjZW5kaWYKKworICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL2Y5L2Y5X2ZpbGUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzIxIDAwOjE4OjIzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYWMvZjkvZjlfaW5pdC5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVmZDhhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvZjkvZjlfaW5pdC5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGY5X2luaXQuYworICBGOSBTdXBwb3J0LCBzdGFydCBhbiBGOSBzdGF0ZQorKi8KKworI2lmZGVmIExUQ19GOV9NT0RFCisKKy8qKiBJbml0aWFsaXplIEY5LU1BQyBzdGF0ZQorICBAcGFyYW0gZjkgICAgW291dF0gZjkgc3RhdGUgdG8gaW5pdGlhbGl6ZQorICBAcGFyYW0gY2lwaGVyICBJbmRleCBvZiBjaXBoZXIgdG8gdXNlCisgIEBwYXJhbSBrZXkgICAgIFtpbl0gIFNlY3JldCBrZXkKKyAgQHBhcmFtIGtleWxlbiAgTGVuZ3RoIG9mIHNlY3JldCBrZXkgaW4gb2N0ZXRzCisgIFJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGY5X2luaXQoZjlfc3RhdGUgKmY5LCBpbnQgY2lwaGVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuKQoreworICAgaW50ICAgICAgICAgICAgeCwgZXJyOworCisgICBMVENfQVJHQ0hLKGY5ICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAgIT0gTlVMTCk7CisKKyAgIC8qIHNjaGVkdWxlIHRoZSBrZXkgKi8KKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisjaWZkZWYgTFRDX0ZBU1QKKyAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aCAlIHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKyNlbmRpZgorCisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uc2V0dXAoa2V5LCBrZXlsZW4sIDAsICZmOS0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gZG9uZTsKKyAgIH0KKyAgIAorICAgLyogbWFrZSB0aGUgc2Vjb25kIGtleSAqLworICAgZm9yICh4ID0gMDsgKHVuc2lnbmVkKXggPCBrZXlsZW47IHgrKykgeworICAgICAgZjktPmFrZXlbeF0gPSBrZXlbeF0gXiAweEFBOworICAgfQorIAorICAgLyogc2V0dXAgc3RydWN0ICovCisgICB6ZXJvbWVtKGY5LT5JViwgIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoKTsKKyAgIHplcm9tZW0oZjktPkFDQywgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5ibG9ja19sZW5ndGgpOworICAgZjktPmJsb2Nrc2l6ZSA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoOworICAgZjktPmNpcGhlciAgICA9IGNpcGhlcjsKKyAgIGY5LT5idWZsZW4gICAgPSAwOworICAgZjktPmtleWxlbiAgICA9IGtleWxlbjsKK2RvbmU6CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV9pbml0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOCAyMjo1NDoxOCAkICovCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYWMvZjkvZjlfbWVtb3J5LmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL2Y5L2Y5X21lbW9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMzkwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL2Y5L2Y5X21lbW9yeS5jCkBAIC0wLDAgKzEsNzEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGY5X3Byb2Nlc3MuYworICBmOSBTdXBwb3J0LCBQcm9jZXNzIGEgYmxvY2sgdGhyb3VnaCBGOS1NQUMKKyovCisKKyNpZmRlZiBMVENfRjlfTU9ERQorCisvKiogZjktTUFDIGEgYmxvY2sgb2YgbWVtb3J5IAorICBAcGFyYW0gY2lwaGVyICAgICBJbmRleCBvZiBjaXBoZXIgdG8gdXNlCisgIEBwYXJhbSBrZXkgICAgICAgIFtpbl0gIFNlY3JldCBrZXkKKyAgQHBhcmFtIGtleWxlbiAgICAgTGVuZ3RoIG9mIGtleSBpbiBvY3RldHMKKyAgQHBhcmFtIGluICAgICAgICAgW2luXSAgTWVzc2FnZSB0byBNQUMKKyAgQHBhcmFtIGlubGVuICAgICAgTGVuZ3RoIG9mIGlucHV0IGluIG9jdGV0cworICBAcGFyYW0gb3V0ICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBmb3IgdGhlIE1BQyB0YWcKKyAgQHBhcmFtIG91dGxlbiAgICAgW2luL291dF0gT3V0cHV0IHNpemUgYW5kIGZpbmFsIHRhZyBzaXplCisgIFJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzLgorKi8KK2ludCBmOV9tZW1vcnkoaW50IGNpcGhlciwgCisgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisgICBmOV9zdGF0ZSAqZjk7CisgICBpbnQgICAgICAgICBlcnI7CisKKyAgIC8qIGlzIHRoZSBjaXBoZXIgdmFsaWQ/ICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChjaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogVXNlIGFjY2VsZXJhdG9yIGlmIGZvdW5kICovCisgICBpZiAoY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5mOV9tZW1vcnkgIT0gTlVMTCkgeworICAgICAgcmV0dXJuIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uZjlfbWVtb3J5KGtleSwga2V5bGVuLCBpbiwgaW5sZW4sIG91dCwgb3V0bGVuKTsKKyAgIH0KKworICAgZjkgPSBYQ0FMTE9DKDEsIHNpemVvZigqZjkpKTsKKyAgIGlmIChmOSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICBpZiAoKGVyciA9IGY5X2luaXQoZjksIGNpcGhlciwga2V5LCBrZXlsZW4pKSAhPSBDUllQVF9PSykgeworICAgICBnb3RvIGRvbmU7CisgICB9CisKKyAgIGlmICgoZXJyID0gZjlfcHJvY2VzcyhmOSwgaW4sIGlubGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgZ290byBkb25lOworICAgfQorCisgICBlcnIgPSBmOV9kb25lKGY5LCBvdXQsIG91dGxlbik7Citkb25lOgorICAgWEZSRUUoZjkpOworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvZjkvZjlfbWVtb3J5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAyMzowMjo0MiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL2Y5L2Y5X21lbW9yeV9tdWx0aS5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV9tZW1vcnlfbXVsdGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjMxNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV9tZW1vcnlfbXVsdGkuYwpAQCAtMCwwICsxLDkwIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qKiAKKyAgQGZpbGUgZjlfbWVtb3J5X211bHRpLmMKKyAgZjkgc3VwcG9ydCwgcHJvY2VzcyBtdWx0aXBsZSBibG9ja3Mgb2YgbWVtb3J5LCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfRjlfTU9ERQorCisvKioKKyAgIGY5IG11bHRpcGxlIGJsb2NrcyBvZiBtZW1vcnkgCisgICBAcGFyYW0gY2lwaGVyICAgIFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBjaXBoZXIKKyAgIEBwYXJhbSBrZXkgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgIEBwYXJhbSBrZXlsZW4gICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgQHBhcmFtIG91dCAgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHBhcmFtIG91dGxlbiAgICBbaW4vb3V0XSAgVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnIChvY3RldHMpCisgICBAcGFyYW0gaW4gICAgICAgIFRoZSBkYXRhIHRvIHNlbmQgdGhyb3VnaCBmOQorICAgQHBhcmFtIGlubGVuICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHNlbmQgdGhyb3VnaCBmOSAob2N0ZXRzKQorICAgQHBhcmFtIC4uLiAgICAgICB0dXBsZXMgb2YgKGRhdGEsbGVuKSBwYWlycyB0byBmOSwgdGVybWluYXRlZCB3aXRoIGEgKE5VTEwseCkgKHg9ZG9uJ3QgY2FyZSkKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBmOV9tZW1vcnlfbXVsdGkoaW50IGNpcGhlciwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sIC4uLikKK3sKKyAgIGludCAgICAgICAgICAgICAgICAgIGVycjsKKyAgIGY5X3N0YXRlICAgICAgICAgICpmOTsKKyAgIHZhX2xpc3QgICAgICAgICAgICAgIGFyZ3M7CisgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdXJwdHI7CisgICB1bnNpZ25lZCBsb25nICAgICAgICBjdXJsZW47CisKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworCisgICAvKiBhbGxvY2F0ZSByYW0gZm9yIGY5IHN0YXRlICovCisgICBmOSA9IFhNQUxMT0Moc2l6ZW9mKGY5X3N0YXRlKSk7CisgICBpZiAoZjkgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogZjkgcHJvY2VzcyB0aGUgbWVzc2FnZSAqLworICAgaWYgKChlcnIgPSBmOV9pbml0KGY5LCBjaXBoZXIsIGtleSwga2V5bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKyAgIHZhX3N0YXJ0KGFyZ3MsIGlubGVuKTsKKyAgIGN1cnB0ciA9IGluOyAKKyAgIGN1cmxlbiA9IGlubGVuOworICAgZm9yICg7OykgeworICAgICAgLyogcHJvY2VzcyBidWYgKi8KKyAgICAgIGlmICgoZXJyID0gZjlfcHJvY2VzcyhmOSwgY3VycHRyLCBjdXJsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgICAgLyogc3RlcCB0byBuZXh0ICovCisgICAgICBjdXJwdHIgPSB2YV9hcmcoYXJncywgY29uc3QgdW5zaWduZWQgY2hhciopOworICAgICAgaWYgKGN1cnB0ciA9PSBOVUxMKSB7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGN1cmxlbiA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKKyAgIH0KKyAgIGlmICgoZXJyID0gZjlfZG9uZShmOSwgb3V0LCBvdXRsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorTEJMX0VSUjoKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0oZjksIHNpemVvZihmOV9zdGF0ZSkpOworI2VuZGlmCisgICBYRlJFRShmOSk7CisgICB2YV9lbmQoYXJncyk7CisgICByZXR1cm4gZXJyOyAgIAorfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV9tZW1vcnlfbXVsdGkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIxOjUwOjEzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYWMvZjkvZjlfcHJvY2Vzcy5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV9wcm9jZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThiZDg4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvZjkvZjlfcHJvY2Vzcy5jCkBAIC0wLDAgKzEsNzggQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGY5X3Byb2Nlc3MuYworICBmOSBTdXBwb3J0LCBwcm9jZXNzIGJsb2NrcyB3aXRoIGY5CisqLworCisjaWZkZWYgTFRDX0Y5X01PREUKKworLyoqIFByb2Nlc3MgZGF0YSB0aHJvdWdoIGY5LU1BQworICBAcGFyYW0gZjkgICAgICAgVGhlIGY5LU1BQyBzdGF0ZQorICBAcGFyYW0gaW4gICAgICAgSW5wdXQgZGF0YSB0byBwcm9jZXNzCisgIEBwYXJhbSBpbmxlbiAgICBMZW5ndGggb2YgaW5wdXQgaW4gb2N0ZXRzCisgIFJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGY5X3Byb2Nlc3MoZjlfc3RhdGUgKmY5LCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbikKK3sKKyAgIGludCBlcnIsIHg7CisKKyAgIExUQ19BUkdDSEsoZjkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGluICAgIT0gTlVMTCk7CisKKyAgIC8qIGNoZWNrIHN0cnVjdHVyZSAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoZjktPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBpZiAoKGY5LT5ibG9ja3NpemUgPiBjaXBoZXJfZGVzY3JpcHRvcltmOS0+Y2lwaGVyXS5ibG9ja19sZW5ndGgpIHx8IChmOS0+YmxvY2tzaXplIDwgMCkgfHwKKyAgICAgICAoZjktPmJ1ZmxlbiA+IGY5LT5ibG9ja3NpemUpIHx8IChmOS0+YnVmbGVuIDwgMCkpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworI2lmZGVmIExUQ19GQVNUCisgICBpZiAoZjktPmJ1ZmxlbiA9PSAwKSB7CisgICAgICAgd2hpbGUgKGlubGVuID49ICh1bnNpZ25lZCBsb25nKWY5LT5ibG9ja3NpemUpIHsKKyAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGY5LT5ibG9ja3NpemU7IHggKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSYoZjktPklWW3hdKSkgXj0gKigoTFRDX0ZBU1RfVFlQRSopJihpblt4XSkpOworICAgICAgICAgICB9CisgICAgICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2Y5LT5jaXBoZXJdLmVjYl9lbmNyeXB0KGY5LT5JViwgZjktPklWLCAmZjktPmtleSk7CisgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCBmOS0+YmxvY2tzaXplOyB4ICs9IHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgICAgICAgICAqKChMVENfRkFTVF9UWVBFKikmKGY5LT5BQ0NbeF0pKSBePSAqKChMVENfRkFTVF9UWVBFKikmKGY5LT5JVlt4XSkpOworICAgICAgICAgICB9CisgICAgICAgICAgIGluICAgICs9IGY5LT5ibG9ja3NpemU7CisgICAgICAgICAgIGlubGVuIC09IGY5LT5ibG9ja3NpemU7CisgICAgICAgfQorICB9CisjZW5kaWYKKworICAgd2hpbGUgKGlubGVuKSB7CisgICAgIGlmIChmOS0+YnVmbGVuID09IGY5LT5ibG9ja3NpemUpIHsKKyAgICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW2Y5LT5jaXBoZXJdLmVjYl9lbmNyeXB0KGY5LT5JViwgZjktPklWLCAmZjktPmtleSk7CisgICAgICAgICBmb3IgKHggPSAwOyB4IDwgZjktPmJsb2Nrc2l6ZTsgeCsrKSB7CisgICAgICAgICAgICBmOS0+QUNDW3hdIF49IGY5LT5JVlt4XTsKKyAgICAgICAgIH0KKyAgICAgICAgIGY5LT5idWZsZW4gPSAwOworICAgICB9CisgICAgIGY5LT5JVltmOS0+YnVmbGVuKytdIF49ICppbisrOworICAgICAtLWlubGVuOworICB9CisgIHJldHVybiBDUllQVF9PSzsgICAgICAgCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL2Y5L2Y5X3Byb2Nlc3MuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzE2IDE3OjQxOjIxICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV90ZXN0LmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL2Y5L2Y5X3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2RkZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV90ZXN0LmMKQEAgLTAsMCArMSw3OCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZjlfdGVzdC5jCisgIGY5IFN1cHBvcnQsIFRlc3QgRjkgbW9kZSAKKyovCisKKyNpZmRlZiBMVENfRjlfTU9ERQorCisvKiogVGVzdCBmOS1NQUMgbW9kZQorICBSZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzCisqLworaW50IGY5X3Rlc3Qodm9pZCkKK3sKKyNpZmRlZiBMVENfTk9fVEVTVAorICAgcmV0dXJuIENSWVBUX05PUDsKKyNlbHNlCisgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICBpbnQgbXNnbGVuOworICAgICAgIHVuc2lnbmVkIGNoYXIgS1sxNl0sIE1bMTI4XSwgVFs0XTsKKyAgIH0gdGVzdHNbXSA9IHsKK3sKKyAgIDIwLAorICAgeyAweDJCLCAweEQ2LCAweDQ1LCAweDlGLCAweDgyLCAweEM1LCAweEIzLCAweDAwLCAweDk1LCAweDJDLCAweDQ5LCAweDEwLCAweDQ4LCAweDgxLCAweEZGLCAweDQ4IH0sCisgICB7IDB4MzgsIDB4QTYsIDB4RjAsIDB4NTYsIDB4QjgsIDB4QUUsIDB4RkQsIDB4QTksIDB4MzMsIDB4MzIsIDB4MzQsIDB4NjIsIDB4NjMsIDB4MzksIDB4MzgsIDB4NjEsIDB4MzcsIDB4MzQsIDB4NzksIDB4NDAgfSwKKyAgIHsgMHg0NiwgMHhFMCwgMHgwRCwgMHg0QiB9Cit9LAorCit7CisgICAxMDUsCisgICB7IDB4ODMsIDB4RkQsIDB4MjMsIDB4QTIsIDB4NDQsIDB4QTcsIDB4NEMsIDB4RjMsIDB4NTgsIDB4REEsIDB4MzAsIDB4MTksIDB4RjEsIDB4NzIsIDB4MjYsIDB4MzUgfSwKKyAgIHsgMHgzNiwgMHhBRiwgMHg2MSwgMHg0NCwgMHg0RiwgMHgzMCwgMHgyQSwgMHhEMiwgCisgICAgIDB4MzUsIDB4QzYsIDB4ODcsIDB4MTYsIDB4NjMsIDB4M0MsIDB4NjYsIDB4RkIsIDB4NzUsIDB4MEMsIDB4MjYsIDB4NjgsIDB4NjUsIDB4RDUsIDB4M0MsIDB4MTEsIDB4RUEsIDB4MDUsIDB4QjEsIDB4RTksIDB4RkEsIDB4NDksIDB4QzgsIDB4MzksIDB4OEQsIDB4NDgsIDB4RTEsIDB4RUYsIDB4QTUsIDB4OTAsIDB4OUQsIDB4MzksCisgICAgIDB4NDcsIDB4OTAsIDB4MjgsIDB4MzcsIDB4RjUsIDB4QUUsIDB4OTYsIDB4RDUsIDB4QTAsIDB4NUIsIDB4QzgsIDB4RDYsIDB4MUMsIDB4QTgsIDB4REIsIDB4RUYsIDB4MUIsIDB4MTMsIDB4QTQsIDB4QjQsIDB4QUIsIDB4RkUsIDB4NEYsIDB4QjEsIDB4MDAsIDB4NjAsIDB4NDUsIDB4QjYsIDB4NzQsIDB4QkIsIDB4NTQsIDB4NzIsCisgICAgIDB4OTMsIDB4MDQsIDB4QzMsIDB4ODIsIDB4QkUsIDB4NTMsIDB4QTUsIDB4QUYsIDB4MDUsIDB4NTUsIDB4NjEsIDB4NzYsIDB4RjYsIDB4RUEsIDB4QTIsIDB4RUYsIDB4MUQsIDB4MDUsIDB4RTQsIDB4QjAsIDB4ODMsIDB4MTgsIDB4MUUsIDB4RTYsIDB4NzQsIDB4Q0QsIDB4QTUsIDB4QTQsIDB4ODUsIDB4RjcsIDB4NEQsIDB4N0EsCisgICAgIDB4NDB8MHg4MCB9LAorICAgeyAweDk1LCAweEFFLCAweDQxLCAweEJBIH0sCit9Cit9OworICB1bnNpZ25lZCBjaGFyIFRbMTZdOworICB1bnNpZ25lZCBsb25nIHRhZ2xlbjsKKyAgaW50IGVyciwgeCwgaWR4OworCisgIC8qIGZpbmQga2FzdW1pICovCisgIGlmICgoaWR4ID0gZmluZF9jaXBoZXIoImthc3VtaSIpKSA9PSAtMSkgeworICAgICByZXR1cm4gQ1JZUFRfTk9QOworICB9CisKKyAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgeworICAgICB0YWdsZW4gPSA0OworICAgICBpZiAoKGVyciA9IGY5X21lbW9yeShpZHgsIHRlc3RzW3hdLkssIDE2LCB0ZXN0c1t4XS5NLCB0ZXN0c1t4XS5tc2dsZW4sIFQsICZ0YWdsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisgICAgIGlmICh0YWdsZW4gIT0gNCB8fCBYTUVNQ01QKFQsIHRlc3RzW3hdLlQsIDQpKSB7CisgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgIH0KKyAgfQorCisgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZgorfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9mOS9mOV90ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAyMzowMjo0MiAkICovCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYy9obWFjX2RvbmUuYyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYy9obWFjX2RvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmE1NDFhCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy9obWFjL2htYWNfZG9uZS5jCkBAIC0wLDAgKzEsMTA5IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBobWFjX2RvbmUuYworICBITUFDIHN1cHBvcnQsIHRlcm1pbmF0ZSBzdHJlYW0sIFRvbSBTdCBEZW5pcy9Eb2JlcyBWYW5kZXJtZWVyCisqLworCisjaWZkZWYgTFRDX0hNQUMKKworI2RlZmluZSBITUFDX0JMT0NLU0laRSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uYmxvY2tzaXplCisKKy8qKgorICAgVGVybWluYXRlIGFuIEhNQUMgc2Vzc2lvbgorICAgQHBhcmFtIGhtYWMgICAgVGhlIEhNQUMgc3RhdGUKKyAgIEBwYXJhbSBvdXQgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgSE1BQyBhdXRoZW50aWNhdGlvbiB0YWcKKyAgIEBwYXJhbSBvdXRsZW4gIFtpbi9vdXRdICBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBITUFDIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGhtYWNfZG9uZShobWFjX3N0YXRlICpobWFjLCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpidWYsICppc2hhOworICAgIHVuc2lnbmVkIGxvbmcgaGFzaHNpemUsIGk7CisgICAgaW50IGhhc2gsIGVycjsKKworICAgIExUQ19BUkdDSEsoaG1hYyAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhvdXQgICAhPSBOVUxMKTsKKworICAgIC8qIHRlc3QgaGFzaCAqLworICAgIGhhc2ggPSBobWFjLT5oYXNoOworICAgIGlmKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2gpKSAhPSBDUllQVF9PSykgeworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIC8qIGdldCB0aGUgaGFzaCBtZXNzYWdlIGRpZ2VzdCBzaXplICovCisgICAgaGFzaHNpemUgPSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uaGFzaHNpemU7CisKKyAgICAvKiBhbGxvY2F0ZSBidWZmZXJzICovCisgICAgYnVmICA9IFhNQUxMT0MoSE1BQ19CTE9DS1NJWkUpOworICAgIGlzaGEgPSBYTUFMTE9DKGhhc2hzaXplKTsKKyAgICBpZiAoYnVmID09IE5VTEwgfHwgaXNoYSA9PSBOVUxMKSB7IAorICAgICAgIGlmIChidWYgIT0gTlVMTCkgeworICAgICAgICAgIFhGUkVFKGJ1Zik7CisgICAgICAgfSAKKyAgICAgICBpZiAoaXNoYSAhPSBOVUxMKSB7CisgICAgICAgICAgWEZSRUUoaXNoYSk7CisgICAgICAgfSAgCisgICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgICB9CisKKyAgICAvKiBHZXQgdGhlIGhhc2ggb2YgdGhlIGZpcnN0IEhNQUMgdmVjdG9yIHBsdXMgdGhlIGRhdGEgKi8KKyAgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5kb25lKCZobWFjLT5tZCwgaXNoYSkpICE9IENSWVBUX09LKSB7CisgICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKworICAgIC8qIENyZWF0ZSB0aGUgc2Vjb25kIEhNQUMgdmVjdG9yIHZlY3RvciBmb3Igc3RlcCAoMykgKi8KKyAgICBmb3IoaT0wOyBpIDwgSE1BQ19CTE9DS1NJWkU7IGkrKykgeworICAgICAgICBidWZbaV0gPSBobWFjLT5rZXlbaV0gXiAweDVDOworICAgIH0KKworICAgIC8qIE5vdyBjYWxjdWxhdGUgdGhlICJvdXRlciIgaGFzaCBmb3Igc3RlcCAoNSksICg2KSwgYW5kICg3KSAqLworICAgIGlmICgoZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hdLmluaXQoJmhtYWMtPm1kKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIGlmICgoZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hdLnByb2Nlc3MoJmhtYWMtPm1kLCBidWYsIEhNQUNfQkxPQ0tTSVpFKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIGlmICgoZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hdLnByb2Nlc3MoJmhtYWMtPm1kLCBpc2hhLCBoYXNoc2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5kb25lKCZobWFjLT5tZCwgYnVmKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorCisgICAgLyogY29weSB0byBvdXRwdXQgICovCisgICAgZm9yIChpID0gMDsgaSA8IGhhc2hzaXplICYmIGkgPCAqb3V0bGVuOyBpKyspIHsKKyAgICAgICAgb3V0W2ldID0gYnVmW2ldOworICAgIH0KKyAgICAqb3V0bGVuID0gaTsKKworICAgIGVyciA9IENSWVBUX09LOworTEJMX0VSUjoKKyAgICBYRlJFRShobWFjLT5rZXkpOworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIHplcm9tZW0oaXNoYSwgaGFzaHNpemUpOworICAgIHplcm9tZW0oYnVmLCAgaGFzaHNpemUpOworICAgIHplcm9tZW0oaG1hYywgc2l6ZW9mKCpobWFjKSk7CisjZW5kaWYKKworICAgIFhGUkVFKGlzaGEpOworICAgIFhGUkVFKGJ1Zik7CisKKyAgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9obWFjL2htYWNfZG9uZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9obWFjL2htYWNfZmlsZS5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy9obWFjL2htYWNfZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOTYzMjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY19maWxlLmMKQEAgLTAsMCArMSw5MyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgaG1hY19maWxlLmMKKyAgSE1BQyBzdXBwb3J0LCBwcm9jZXNzIGEgZmlsZSwgVG9tIFN0IERlbmlzL0RvYmVzIFZhbmRlcm1lZXIKKyovCisKKyNpZmRlZiBMVENfSE1BQworCisvKioKKyAgSE1BQyBhIGZpbGUKKyAgQHBhcmFtIGhhc2ggICAgIFRoZSBpbmRleCBvZiB0aGUgaGFzaCB5b3Ugd2lzaCB0byB1c2UKKyAgQHBhcmFtIGZuYW1lICAgIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHlvdSB3aXNoIHRvIEhNQUMKKyAgQHBhcmFtIGtleSAgICAgIFRoZSBzZWNyZXQga2V5CisgIEBwYXJhbSBrZXlsZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQga2V5CisgIEBwYXJhbSBvdXQgICAgICBbb3V0XSBUaGUgSE1BQyBhdXRoZW50aWNhdGlvbiB0YWcKKyAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdICBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgZmlsZSBzdXBwb3J0IGhhcyBiZWVuIGRpc2FibGVkCisqLworaW50IGhtYWNfZmlsZShpbnQgaGFzaCwgY29uc3QgY2hhciAqZm5hbWUsIAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisjaWZkZWYgTFRDX05PX0ZJTEUKKyAgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIGhtYWNfc3RhdGUgaG1hYzsKKyAgIEZJTEUgKmluOworICAgdW5zaWduZWQgY2hhciBidWZbNTEyXTsKKyAgIHNpemVfdCB4OworICAgaW50IGVycjsKKworICAgTFRDX0FSR0NISyhmbmFtZSAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisgICAKKyAgIGlmKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2gpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGlmICgoZXJyID0gaG1hY19pbml0KCZobWFjLCBoYXNoLCBrZXksIGtleWxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaW4gPSBmb3BlbihmbmFtZSwgInJiIik7CisgICBpZiAoaW4gPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX0ZJTEVfTk9URk9VTkQ7CisgICB9CisKKyAgIC8qIHByb2Nlc3MgdGhlIGZpbGUgY29udGVudHMgKi8KKyAgIGRvIHsKKyAgICAgIHggPSBmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBpbik7CisgICAgICBpZiAoKGVyciA9IGhtYWNfcHJvY2VzcygmaG1hYywgYnVmLCAodW5zaWduZWQgbG9uZyl4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIC8qIHdlIGRvbid0IHRyYXAgdGhpcyBlcnJvciBzaW5jZSB3ZSdyZSBhbHJlYWR5IHJldHVybmluZyBhbiBlcnJvciEgKi8KKyAgICAgICAgIGZjbG9zZShpbik7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgfSB3aGlsZSAoeCA9PSBzaXplb2YoYnVmKSk7CisKKyAgIGlmIChmY2xvc2UoaW4pICE9IDApIHsKKyAgICAgIHJldHVybiBDUllQVF9FUlJPUjsKKyAgIH0KKworICAgLyogZ2V0IGZpbmFsIGhtYWMgKi8KKyAgIGlmICgoZXJyID0gaG1hY19kb25lKCZobWFjLCBvdXQsIG91dGxlbikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICAvKiBjbGVhciBtZW1vcnkgKi8KKyAgIHplcm9tZW0oYnVmLCBzaXplb2YoYnVmKSk7CisjZW5kaWYgICAKKyAgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZgorfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY19maWxlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY19pbml0LmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY19pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ2MWE5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYy9obWFjX2luaXQuYwpAQCAtMCwwICsxLDExMiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgaG1hY19pbml0LmMKKyAgSE1BQyBzdXBwb3J0LCBpbml0aWFsaXplIHN0YXRlLCBUb20gU3QgRGVuaXMvRG9iZXMgVmFuZGVybWVlciAKKyovCisKKyNpZmRlZiBMVENfSE1BQworCisjZGVmaW5lIEhNQUNfQkxPQ0tTSVpFIGhhc2hfZGVzY3JpcHRvcltoYXNoXS5ibG9ja3NpemUKKworLyoqCisgICBJbml0aWFsaXplIGFuIEhNQUMgY29udGV4dC4KKyAgIEBwYXJhbSBobWFjICAgICBUaGUgSE1BQyBzdGF0ZSAKKyAgIEBwYXJhbSBoYXNoICAgICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggeW91IHdhbnQgdG8gdXNlIAorICAgQHBhcmFtIGtleSAgICAgIFRoZSBzZWNyZXQga2V5CisgICBAcGFyYW0ga2V5bGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGhtYWNfaW5pdChobWFjX3N0YXRlICpobWFjLCBpbnQgaGFzaCwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbikKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpidWY7CisgICAgdW5zaWduZWQgbG9uZyBoYXNoc2l6ZTsKKyAgICB1bnNpZ25lZCBsb25nIGksIHo7CisgICAgaW50IGVycjsKKworICAgIExUQ19BUkdDSEsoaG1hYyAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKGtleSAgIT0gTlVMTCk7CisKKyAgICAvKiB2YWxpZCBoYXNoPyAqLworICAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgaG1hYy0+aGFzaCA9IGhhc2g7CisgICAgaGFzaHNpemUgICA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZTsKKworICAgIC8qIHZhbGlkIGtleSBsZW5ndGg/ICovCisgICAgaWYgKGtleWxlbiA9PSAwKSB7CisgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICAgfQorCisgICAgLyogYWxsb2NhdGUgcmFtIGZvciBidWYgKi8KKyAgICBidWYgPSBYTUFMTE9DKEhNQUNfQkxPQ0tTSVpFKTsKKyAgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgIH0KKworICAgIC8qIGFsbG9jYXRlIG1lbW9yeSBmb3Iga2V5ICovCisgICAgaG1hYy0+a2V5ID0gWE1BTExPQyhITUFDX0JMT0NLU0laRSk7CisgICAgaWYgKGhtYWMtPmtleSA9PSBOVUxMKSB7CisgICAgICAgWEZSRUUoYnVmKTsKKyAgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgIH0KKworICAgIC8qICgxKSBtYWtlIHN1cmUgd2UgaGF2ZSBhIGxhcmdlIGVub3VnaCBrZXkgKi8KKyAgICBpZihrZXlsZW4gPiBITUFDX0JMT0NLU0laRSkgeworICAgICAgICB6ID0gSE1BQ19CTE9DS1NJWkU7CisgICAgICAgIGlmICgoZXJyID0gaGFzaF9tZW1vcnkoaGFzaCwga2V5LCBrZXlsZW4sIGhtYWMtPmtleSwgJnopKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgIH0KKyAgICAgICAgaWYoaGFzaHNpemUgPCBITUFDX0JMT0NLU0laRSkgeworICAgICAgICAgICAgemVyb21lbSgoaG1hYy0+a2V5KSArIGhhc2hzaXplLCAoc2l6ZV90KShITUFDX0JMT0NLU0laRSAtIGhhc2hzaXplKSk7CisgICAgICAgIH0KKyAgICAgICAga2V5bGVuID0gaGFzaHNpemU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgWE1FTUNQWShobWFjLT5rZXksIGtleSwgKHNpemVfdClrZXlsZW4pOworICAgICAgICBpZihrZXlsZW4gPCBITUFDX0JMT0NLU0laRSkgeworICAgICAgICAgICAgemVyb21lbSgoaG1hYy0+a2V5KSArIGtleWxlbiwgKHNpemVfdCkoSE1BQ19CTE9DS1NJWkUgLSBrZXlsZW4pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIENyZWF0ZSB0aGUgaW5pdGlhbCB2ZWN0b3IgZm9yIHN0ZXAgKDMpICovCisgICAgZm9yKGk9MDsgaSA8IEhNQUNfQkxPQ0tTSVpFOyAgIGkrKykgeworICAgICAgIGJ1ZltpXSA9IGhtYWMtPmtleVtpXSBeIDB4MzY7CisgICAgfQorCisgICAgLyogUHJlLXBlbmQgdGhhdCB0byB0aGUgaGFzaCBkYXRhICovCisgICAgaWYgKChlcnIgPSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uaW5pdCgmaG1hYy0+bWQpKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisKKyAgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5wcm9jZXNzKCZobWFjLT5tZCwgYnVmLCBITUFDX0JMT0NLU0laRSkpICE9IENSWVBUX09LKSB7CisgICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgICBnb3RvIGRvbmU7CitMQkxfRVJSOgorICAgIC8qIGZyZWUgdGhlIGtleSBzaW5jZSB3ZSBmYWlsZWQgKi8KKyAgICBYRlJFRShobWFjLT5rZXkpOworZG9uZToKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0oYnVmLCBITUFDX0JMT0NLU0laRSk7CisjZW5kaWYKKyAKKyAgIFhGUkVFKGJ1Zik7CisgICByZXR1cm4gZXJyOyAgICAKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYy9obWFjX2luaXQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAzIDAwOjM5OjQ5ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYy9obWFjX21lbW9yeS5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy9obWFjL2htYWNfbWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RjMzY0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYy9obWFjX21lbW9yeS5jCkBAIC0wLDAgKzEsODggQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGhtYWNfbWVtb3J5LmMKKyAgSE1BQyBzdXBwb3J0LCBwcm9jZXNzIGEgYmxvY2sgb2YgbWVtb3J5LCBUb20gU3QgRGVuaXMvRG9iZXMgVmFuZGVybWVlcgorKi8KKworI2lmZGVmIExUQ19ITUFDCisKKy8qKgorICAgSE1BQyBhIGJsb2NrIG9mIG1lbW9yeSB0byBwcm9kdWNlIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAgIEBwYXJhbSBoYXNoICAgICAgVGhlIGluZGV4IG9mIHRoZSBoYXNoIHRvIHVzZSAKKyAgIEBwYXJhbSBrZXkgICAgICAgVGhlIHNlY3JldCBrZXkgCisgICBAcGFyYW0ga2V5bGVuICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEBwYXJhbSBpbiAgICAgICAgVGhlIGRhdGEgdG8gSE1BQworICAgQHBhcmFtIGlubGVuICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIEhNQUMgKG9jdGV0cykKKyAgIEBwYXJhbSBvdXQgICAgICAgW291dF0gRGVzdGluYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHBhcmFtIG91dGxlbiAgICBbaW4vb3V0XSBNYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgYXV0aGVudGljYXRpb24gdGFnCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgaG1hY19tZW1vcnkoaW50IGhhc2gsIAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgIHVuc2lnbmVkIGxvbmcgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgICBobWFjX3N0YXRlICpobWFjOworICAgIGludCAgICAgICAgIGVycjsKKworICAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOyAKKyAgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgIC8qIG1ha2Ugc3VyZSBoYXNoIGRlc2NyaXB0b3IgaXMgdmFsaWQgKi8KKyAgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQoaGFzaCkpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICAvKiBpcyB0aGVyZSBhIGRlc2NyaXB0b3I/ICovCisgICAgaWYgKGhhc2hfZGVzY3JpcHRvcltoYXNoXS5obWFjX2Jsb2NrICE9IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIGhhc2hfZGVzY3JpcHRvcltoYXNoXS5obWFjX2Jsb2NrKGtleSwga2V5bGVuLCBpbiwgaW5sZW4sIG91dCwgb3V0bGVuKTsKKyAgICB9CisKKyAgICAvKiBub3BlLCBzbyBjYWxsIHRoZSBobWFjIGZ1bmN0aW9ucyAqLworICAgIC8qIGFsbG9jYXRlIHJhbSBmb3IgaG1hYyBzdGF0ZSAqLworICAgIGhtYWMgPSBYTUFMTE9DKHNpemVvZihobWFjX3N0YXRlKSk7CisgICAgaWYgKGhtYWMgPT0gTlVMTCkgeworICAgICAgIHJldHVybiBDUllQVF9NRU07CisgICAgfQorCisgICAgaWYgKChlcnIgPSBobWFjX2luaXQoaG1hYywgaGFzaCwga2V5LCBrZXlsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisKKyAgICBpZiAoKGVyciA9IGhtYWNfcHJvY2VzcyhobWFjLCBpbiwgaW5sZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisKKyAgICBpZiAoKGVyciA9IGhtYWNfZG9uZShobWFjLCBvdXQsIG91dGxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKworICAgZXJyID0gQ1JZUFRfT0s7CitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShobWFjLCBzaXplb2YoaG1hY19zdGF0ZSkpOworI2VuZGlmCisKKyAgIFhGUkVFKGhtYWMpOworICAgcmV0dXJuIGVycjsgICAKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9obWFjL2htYWNfbWVtb3J5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY19tZW1vcnlfbXVsdGkuYyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYy9obWFjX21lbW9yeV9tdWx0aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzODI1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY19tZW1vcnlfbXVsdGkuYwpAQCAtMCwwICsxLDkyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qKgorICBAZmlsZSBobWFjX21lbW9yeV9tdWx0aS5jCisgIEhNQUMgc3VwcG9ydCwgcHJvY2VzcyBtdWx0aXBsZSBibG9ja3Mgb2YgbWVtb3J5LCBUb20gU3QgRGVuaXMvRG9iZXMgVmFuZGVybWVlcgorKi8KKworI2lmZGVmIExUQ19ITUFDCisKKy8qKgorICAgSE1BQyBtdWx0aXBsZSBibG9ja3Mgb2YgbWVtb3J5IHRvIHByb2R1Y2UgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHBhcmFtIGhhc2ggICAgICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggdG8gdXNlIAorICAgQHBhcmFtIGtleSAgICAgICBUaGUgc2VjcmV0IGtleSAKKyAgIEBwYXJhbSBrZXlsZW4gICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgQHBhcmFtIG91dCAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgICBAcGFyYW0gb3V0bGVuICAgIFtpbi9vdXRdIE1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiBhdXRoZW50aWNhdGlvbiB0YWcKKyAgIEBwYXJhbSBpbiAgICAgICAgVGhlIGRhdGEgdG8gSE1BQworICAgQHBhcmFtIGlubGVuICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIEhNQUMgKG9jdGV0cykKKyAgIEBwYXJhbSAuLi4gICAgICAgdHVwbGVzIG9mIChkYXRhLGxlbikgcGFpcnMgdG8gSE1BQywgdGVybWluYXRlZCB3aXRoIGEgKE5VTEwseCkgKHg9ZG9uJ3QgY2FyZSkKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBobWFjX21lbW9yeV9tdWx0aShpbnQgaGFzaCwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCAgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgIHVuc2lnbmVkIGxvbmcgaW5sZW4sIC4uLikKKworeworICAgIGhtYWNfc3RhdGUgICAgICAgICAgKmhtYWM7CisgICAgaW50ICAgICAgICAgICAgICAgICAgZXJyOworICAgIHZhX2xpc3QgICAgICAgICAgICAgIGFyZ3M7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3VycHRyOworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgIGN1cmxlbjsKKworICAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOyAKKyAgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgIC8qIGFsbG9jYXRlIHJhbSBmb3IgaG1hYyBzdGF0ZSAqLworICAgIGhtYWMgPSBYTUFMTE9DKHNpemVvZihobWFjX3N0YXRlKSk7CisgICAgaWYgKGhtYWMgPT0gTlVMTCkgeworICAgICAgIHJldHVybiBDUllQVF9NRU07CisgICAgfQorCisgICAgaWYgKChlcnIgPSBobWFjX2luaXQoaG1hYywgaGFzaCwga2V5LCBrZXlsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisKKyAgICB2YV9zdGFydChhcmdzLCBpbmxlbik7CisgICAgY3VycHRyID0gaW47IAorICAgIGN1cmxlbiA9IGlubGVuOworICAgIGZvciAoOzspIHsKKyAgICAgICAvKiBwcm9jZXNzIGJ1ZiAqLworICAgICAgIGlmICgoZXJyID0gaG1hY19wcm9jZXNzKGhtYWMsIGN1cnB0ciwgY3VybGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgfQorICAgICAgIC8qIHN0ZXAgdG8gbmV4dCAqLworICAgICAgIGN1cnB0ciA9IHZhX2FyZyhhcmdzLCBjb25zdCB1bnNpZ25lZCBjaGFyKik7CisgICAgICAgaWYgKGN1cnB0ciA9PSBOVUxMKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgfQorICAgICAgIGN1cmxlbiA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKKyAgICB9CisgICAgaWYgKChlcnIgPSBobWFjX2RvbmUoaG1hYywgb3V0LCBvdXRsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShobWFjLCBzaXplb2YoaG1hY19zdGF0ZSkpOworI2VuZGlmCisgICBYRlJFRShobWFjKTsKKyAgIHZhX2VuZChhcmdzKTsKKyAgIHJldHVybiBlcnI7ICAgCit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYy9obWFjX21lbW9yeV9tdWx0aS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9obWFjL2htYWNfcHJvY2Vzcy5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy9obWFjL2htYWNfcHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YjVlZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY19wcm9jZXNzLmMKQEAgLTAsMCArMSw0MyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgaG1hY19wcm9jZXNzLmMKKyAgSE1BQyBzdXBwb3J0LCBwcm9jZXNzIGRhdGEsIFRvbSBTdCBEZW5pcy9Eb2JlcyBWYW5kZXJtZWVyCisqLworCisjaWZkZWYgTFRDX0hNQUMKKworLyoqIAorICBQcm9jZXNzIGRhdGEgdGhyb3VnaCBITUFDCisgIEBwYXJhbSBobWFjICAgIFRoZSBobWFjIHN0YXRlCisgIEBwYXJhbSBpbiAgICAgIFRoZSBkYXRhIHRvIHNlbmQgdGhyb3VnaCBITUFDCisgIEBwYXJhbSBpbmxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gSE1BQyAob2N0ZXRzKQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgaG1hY19wcm9jZXNzKGhtYWNfc3RhdGUgKmhtYWMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKQoreworICAgIGludCBlcnI7CisgICAgTFRDX0FSR0NISyhobWFjICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoaW4gIT0gTlVMTCk7CisgICAgaWYgKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhtYWMtPmhhc2gpKSAhPSBDUllQVF9PSykgeworICAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgICByZXR1cm4gaGFzaF9kZXNjcmlwdG9yW2htYWMtPmhhc2hdLnByb2Nlc3MoJmhtYWMtPm1kLCBpbiwgaW5sZW4pOworfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY19wcm9jZXNzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY190ZXN0LmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL2htYWMvaG1hY190ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEwM2Y4NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvaG1hYy9obWFjX3Rlc3QuYwpAQCAtMCwwICsxLDMxNiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgaG1hY190ZXN0LmMKKyAgSE1BQyBzdXBwb3J0LCBzZWxmLXRlc3QsIFRvbSBTdCBEZW5pcy9Eb2JlcyBWYW5kZXJtZWVyCisqLworCisjaWZkZWYgTFRDX0hNQUMKKworI2RlZmluZSBITUFDX0JMT0NLU0laRSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uYmxvY2tzaXplCisKKy8qCisgICAgVEVTVCBDQVNFUyBTT1VSQ0U6CisKK05ldHdvcmsgV29ya2luZyBHcm91cCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAuIENoZW5nCitSZXF1ZXN0IGZvciBDb21tZW50czogMjIwMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElCTQorQ2F0ZWdvcnk6IEluZm9ybWF0aW9uYWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi4gR2xlbm4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOSVNUCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXB0ZW1iZXIgMTk5NworICAgICAgICAgICAgICAgICBUZXN0IENhc2VzIGZvciBITUFDLU1ENSBhbmQgSE1BQy1TSEEtMQorKi8KKworLyoqCisgIEhNQUMgc2VsZi10ZXN0CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgQ1JZUFRfTk9QIGlmIHRlc3RzIGhhdmUgYmVlbiBkaXNhYmxlZC4KKyovCitpbnQgaG1hY190ZXN0KHZvaWQpCit7CisgI2lmbmRlZiBMVENfVEVTVAorICAgIHJldHVybiBDUllQVF9OT1A7CisgI2Vsc2UgICAgCisgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbTUFYQkxPQ0tTSVpFXTsKKyAgICBpbnQgaTsKKworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaG1hY190ZXN0X2Nhc2UgeworICAgICAgICBpbnQgbnVtOworICAgICAgICBjaGFyICphbGdvOworICAgICAgICB1bnNpZ25lZCBjaGFyIGtleVsxMjhdOworICAgICAgICB1bnNpZ25lZCBsb25nIGtleWxlbjsKKyAgICAgICAgdW5zaWduZWQgY2hhciBkYXRhWzEyOF07CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YWxlbjsKKyAgICAgICAgdW5zaWduZWQgY2hhciBkaWdlc3RbTUFYQkxPQ0tTSVpFXTsKKyAgICB9IGNhc2VzW10gPSB7CisgICAgICAgIC8qCisgICAgICAgIDMuIFRlc3QgQ2FzZXMgZm9yIEhNQUMtU0hBLTEKKworICAgICAgICB0ZXN0X2Nhc2UgPSAgICAgMQorICAgICAgICBrZXkgPSAgICAgICAgICAgMHgwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjCisgICAgICAgIGtleV9sZW4gPSAgICAgICAyMAorICAgICAgICBkYXRhID0gICAgICAgICAgIkhpIFRoZXIgICAgIDIwCisgICAgICAgIGRpZ2VzdCA9ICAgICAgICAweDRjMWEwMzQyNGI1NWUwN2ZlN2YyN2JlMWQ1OGJiOTMyNGE5YTVhMDQKKyAgICAgICAgZGlnZXN0LTk2ID0gICAgIDB4NGMxYTAzNDI0YjU1ZTA3ZmU3ZjI3YmUxCisgICAgICAgICovCisgICAgICAgIHsgNSwgInNoYTEiLAorICAgICAgICAgICAgezB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIAorICAgICAgICAgICAgIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIAorICAgICAgICAgICAgIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGN9LCAyMCwKKyAgICAgICAgICAgICJUZXN0IFdpdGggVHJ1bmNhdGlvbiIsIDIwLAorICAgICAgICAgICAgezB4NGMsIDB4MWEsIDB4MDMsIDB4NDIsIDB4NGIsIDB4NTUsIDB4ZTAsIDB4N2YsIDB4ZTcsIDB4ZjIsCisgICAgICAgICAgICAgMHg3YiwgMHhlMSwgMHhkNSwgMHg4YiwgMHhiOSwgMHgzMiwgMHg0YSwgMHg5YSwgMHg1YSwgMHgwNH0gfSwKKworICAgICAgICAvKgorICAgICAgICB0ZXN0X2Nhc2UgPSAgICAgNgorICAgICAgICBrZXkgPSAgICAgICAgICAgMHhhYSByZXBlYXRlZCA4MCB0aW1lcworICAgICAgICBrZXlfbGVuID0gICAgICAgODAKKyAgICAgICAgZGF0YSA9ICAgICAgICAgICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IC0gSGFzaCBLZXkgRmlyc3QiCisgICAgICAgIGRhdGFfbGVuID0gICAgICA1NAorICAgICAgICBkaWdlc3QgPSAgICAgICAgMHhhYTRhZTVlMTUyNzJkMDBlOTU3MDU2MzdjZThhM2I1NWVkNDAyMTEyCisgICAgICAgICovCisgICAgICAgIHsgNiwgInNoYTEiLAorICAgICAgICAgICAgezB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWF9LCA4MCwKKyAgICAgICAgICAgICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IC0gSGFzaCBLZXkgRmlyc3QiLCA1NCwKKyAgICAgICAgICAgIHsweGFhLCAweDRhLCAweGU1LCAweGUxLCAweDUyLCAweDcyLCAweGQwLCAweDBlLAorICAgICAgICAgICAgIDB4OTUsIDB4NzAsIDB4NTYsIDB4MzcsIDB4Y2UsIDB4OGEsIDB4M2IsIDB4NTUsIAorICAgICAgICAgICAgIDB4ZWQsIDB4NDAsIDB4MjEsIDB4MTJ9IH0sCisKKyAgICAgICAgLyoKKyAgICAgICAgdGVzdF9jYXNlID0gICAgIDcKKyAgICAgICAga2V5ID0gICAgICAgICAgIDB4YWEgcmVwZWF0ZWQgODAgdGltZXMKKyAgICAgICAga2V5X2xlbiA9ICAgICAgIDgwCisgICAgICAgIGRhdGEgPSAgICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSBhbmQgTGFyZ2VyCisgICAgICAgICAgICAgICAgICAgICAgICBUaGFuIE9uZSBCbG9jay1TaXplIERhdGEiCisgICAgICAgIGRhdGFfbGVuID0gICAgICA3MworICAgICAgICBkaWdlc3QgPSAgICAgICAgMHhlOGU5OWQwZjQ1MjM3ZDc4NmQ2YmJhYTc5NjVjNzgwOGJiZmYxYTkxCisgICAgICAgICovCisgICAgICAgIHsgNywgInNoYTEiLAorICAgICAgICAgICAgezB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCisgICAgICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKKyAgICAgICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCisgICAgICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKKyAgICAgICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCisgICAgICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKKyAgICAgICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWF9LCA4MCwKKyAgICAgICAgICAgICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IGFuZCBMYXJnZXIgVGhhbiBPbmUgQmxvY2stU2l6ZSBEYXRhIiwgNzMsCisgICAgICAgICAgICB7MHhlOCwgMHhlOSwgMHg5ZCwgMHgwZiwgMHg0NSwgMHgyMywgMHg3ZCwgMHg3OCwgMHg2ZCwKKyAgICAgICAgICAgICAweDZiLCAweGJhLCAweGE3LCAweDk2LCAweDVjLCAweDc4LCAweDA4LCAweGJiLCAweGZmLCAweDFhLCAweDkxfSB9LAorCisgICAgICAgIC8qCisgICAgICAgIDIuIFRlc3QgQ2FzZXMgZm9yIEhNQUMtTUQ1CisKKyAgICAgICAgdGVzdF9jYXNlID0gICAgIDEKKyAgICAgICAga2V5ID0gICAgICAgICAgIDB4MGIgMGIgMGIgMGIgCisgICAgICAgICAgICAgICAgICAgICAgICAgIDBiIDBiIDBiIDBiCisgICAgICAgICAgICAgICAgICAgICAgICAgIDBiIDBiIDBiIDBiCisgICAgICAgICAgICAgICAgICAgICAgICAgIDBiIDBiIDBiIDBiCisgICAgICAgIGtleV9sZW4gPSAgICAgICAxNgorICAgICAgICBkYXRhID0gICAgICAgICAgIkhpIFRoZXJlIgorICAgICAgICBkYXRhX2xlbiA9ICAgICAgOAorICAgICAgICBkaWdlc3QgPSAgICAgICAgMHg5MiA5NCA3MiA3YSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMzYgMzggYmIgMWMgCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEzIGY0IDhlIGY4IAorICAgICAgICAgICAgICAgICAgICAgICAgICAxNSA4YiBmYyA5ZAorICAgICAgICAqLworICAgICAgICB7IDEsICJtZDUiLAorICAgICAgICAgICAgezB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIAorICAgICAgICAgICAgIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGIsIDB4MGJ9LCAxNiwKKyAgICAgICAgICAgICJIaSBUaGVyZSIsIDgsCisgICAgICAgICAgICB7MHg5MiwgMHg5NCwgMHg3MiwgMHg3YSwgMHgzNiwgMHgzOCwgMHhiYiwgMHgxYywgCisgICAgICAgICAgICAgMHgxMywgMHhmNCwgMHg4ZSwgMHhmOCwgMHgxNSwgMHg4YiwgMHhmYywgMHg5ZH0gIH0sCisgICAgICAgIC8qCisgICAgICAgIHRlc3RfY2FzZSA9ICAgICAyCisgICAgICAgIGtleSA9ICAgICAgICAgICAiSmVmZSIKKyAgICAgICAga2V5X2xlbiA9ICAgICAgIDQKKyAgICAgICAgZGF0YSA9ICAgICAgICAgICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IgorICAgICAgICBkYXRhX2xlbiA9ICAgICAgMjgKKyAgICAgICAgZGlnZXN0ID0gICAgICAgIDB4NzUwYzc4M2U2YWIwYjUwM2VhYTg2ZTMxMGE1ZGI3MzgKKyAgICAgICAgKi8KKyAgICAgICAgeyAyLCAibWQ1IiwKKyAgICAgICAgICAgICJKZWZlIiwgNCwKKyAgICAgICAgICAgICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IiwgMjgsCisgICAgICAgICAgICB7MHg3NSwgMHgwYywgMHg3OCwgMHgzZSwgMHg2YSwgMHhiMCwgMHhiNSwgMHgwMywgCisgICAgICAgICAgICAgMHhlYSwgMHhhOCwgMHg2ZSwgMHgzMSwgMHgwYSwgMHg1ZCwgMHhiNywgMHgzOH0gfSwKKworICAgICAgICAvKgorICAgICAgICB0ZXN0X2Nhc2UgPSAgICAgMworICAgICAgICBrZXkgPSAgICAgICAgICAgMHhhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorICAgICAgICBrZXlfbGVuICAgICAgICAgMTYKKyAgICAgICAgZGF0YSA9ICAgICAgICAgIDB4ZGQgcmVwZWF0ZWQgNTAgdGltZXMKKyAgICAgICAgZGF0YV9sZW4gPSAgICAgIDUwCisgICAgICAgIGRpZ2VzdCA9ICAgICAgICAweDU2YmUzNDUyMWQxNDRjODhkYmI4YzczM2YwZThiM2Y2CisgICAgICAgICovCisgICAgICAgIHsgMywgIm1kNSIsCisgICAgICAgICAgICB7MHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgCisgICAgICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYX0sIDE2LAorICAgICAgICAgICAgezB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsCisgICAgICAgICAgICAgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwKKyAgICAgICAgICAgICAweGRkLCAweGRkLCAweGRkLCAweGRkLCAweGRkLCAweGRkLCAweGRkLCAweGRkLCAweGRkLCAweGRkLAorICAgICAgICAgICAgIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsIDB4ZGQsCisgICAgICAgICAgICAgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZCwgMHhkZH0sIDUwLAorICAgICAgICAgICAgezB4NTYsIDB4YmUsIDB4MzQsIDB4NTIsIDB4MWQsIDB4MTQsIDB4NGMsIDB4ODgsCisgICAgICAgICAgICAgMHhkYiwgMHhiOCwgMHhjNywgMHgzMywgMHhmMCwgMHhlOCwgMHhiMywgMHhmNn0gfSwKKyAgICAgICAgLyoKKworICAgICAgICB0ZXN0X2Nhc2UgPSAgICAgNAorICAgICAgICBrZXkgPSAweDAxMDIwMzA0MDUwNjA3MDgwOTBhMGIwYzBkMGUwZjEwMTExMjEzMTQxNTE2MTcxODE5CisgICAgICAgIGtleV9sZW4gICAgICAgICAyNQorICAgICAgICBkYXRhID0gICAgICAgICAgMHhjZCByZXBlYXRlZCA1MCB0aW1lcworICAgICAgICBkYXRhX2xlbiA9ICAgICAgNTAKKyAgICAgICAgZGlnZXN0ID0gICAgICAgIDB4Njk3ZWFmMGFjYTNhM2FlYTNhNzUxNjQ3NDZmZmFhNzkKKyAgICAgICAgKi8KKyAgICAgICAgeyA0LCAibWQ1IiwKKyAgICAgICAgICAgIHsweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAweDA4LCAweDA5LCAweDBhLAorICAgICAgICAgICAgIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsCisgICAgICAgICAgICAgMHgxNSwgMHgxNiwgMHgxNywgMHgxOCwgMHgxOX0sIDI1LAorICAgICAgICAgICAgezB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsCisgICAgICAgICAgICAgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwKKyAgICAgICAgICAgICAweGNkLCAweGNkLCAweGNkLCAweGNkLCAweGNkLCAweGNkLCAweGNkLCAweGNkLCAweGNkLCAweGNkLAorICAgICAgICAgICAgIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsIDB4Y2QsCisgICAgICAgICAgICAgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZCwgMHhjZH0sIDUwLAorICAgICAgICAgICAgezB4NjksIDB4N2UsIDB4YWYsIDB4MGEsIDB4Y2EsIDB4M2EsIDB4M2EsIDB4ZWEsIAorICAgICAgICAgICAgIDB4M2EsIDB4NzUsIDB4MTYsIDB4NDcsIDB4NDYsIDB4ZmYsIDB4YWEsIDB4Nzl9IH0sCisKKworICAgICAgICAvKgorIAorICAgICAgICB0ZXN0X2Nhc2UgPSAgICAgNQorICAgICAgICBrZXkgPSAgICAgICAgICAgMHgwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYworICAgICAgICBrZXlfbGVuID0gICAgICAgMTYKKyAgICAgICAgZGF0YSA9ICAgICAgICAgICJUZXN0IFdpdGggVHJ1bmNhdGlvbiIKKyAgICAgICAgZGF0YV9sZW4gPSAgICAgIDIwCisgICAgICAgIGRpZ2VzdCA9ICAgICAgICAweDU2NDYxZWYyMzQyZWRjMDBmOWJhYjk5NTY5MGVmZDRjCisgICAgICAgIGRpZ2VzdC05NiAgICAgICAweDU2NDYxZWYyMzQyZWRjMDBmOWJhYjk5NQorICAgICAgICAqLworICAgICAgICB7IDUsICJtZDUiLAorICAgICAgICAgICAgezB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIAorICAgICAgICAgICAgIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGMsIDB4MGN9LCAxNiwKKyAgICAgICAgICAgICJUZXN0IFdpdGggVHJ1bmNhdGlvbiIsIDIwLAorICAgICAgICAgICAgezB4NTYsIDB4NDYsIDB4MWUsIDB4ZjIsIDB4MzQsIDB4MmUsIDB4ZGMsIDB4MDAsIAorICAgICAgICAgICAgIDB4ZjksIDB4YmEsIDB4YjksIDB4OTUsIDB4NjksIDB4MGUsIDB4ZmQsIDB4NGN9IH0sCisKKyAgICAgICAgLyoKKworICAgICAgICB0ZXN0X2Nhc2UgPSAgICAgNgorICAgICAgICBrZXkgPSAgICAgICAgICAgMHhhYSByZXBlYXRlZCA4MCB0aW1lcworICAgICAgICBrZXlfbGVuID0gICAgICAgODAKKyAgICAgICAgZGF0YSA9ICAgICAgICAgICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IC0gSGFzaCAKK0tleSBGaXJzdCIKKyAgICAgICAgZGF0YV9sZW4gPSAgICAgIDU0CisgICAgICAgIGRpZ2VzdCA9ICAgICAgICAweDZiMWFiN2ZlNGJkN2JmOGYwYjYyZTZjZTYxYjlkMGNkCisgICAgICAgICovCisgICAgICAgIHsgNiwgIm1kNSIsCisgICAgICAgICAgICB7MHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgCisgICAgICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgCisgICAgICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgCisgICAgICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgCisgICAgICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAKKyAgICAgICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAKKyAgICAgICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAKKyAgICAgICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAKKyAgICAgICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhfSwgODAsCisgICAgICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IiwgNTQsCisgICAgICAgICAgICB7MHg2YiwgMHgxYSwgMHhiNywgMHhmZSwgMHg0YiwgMHhkNywgMHhiZiwgMHg4ZiwgCisgICAgICAgICAgICAgMHgwYiwgMHg2MiwgMHhlNiwgMHhjZSwgMHg2MSwgMHhiOSwgMHhkMCwgMHhjZH0gfSwKKworICAgICAgICAvKgorCisgICAgICAgIHRlc3RfY2FzZSA9ICAgICA3CisgICAgICAgIGtleSA9ICAgICAgICAgICAweGFhIHJlcGVhdGVkIDgwIHRpbWVzCisgICAgICAgIGtleV9sZW4gPSAgICAgICA4MAorICAgICAgICBkYXRhID0gICAgICAgICAgIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgYW5kIExhcmdlcgorICAgICAgICAgICAgICAgICAgICAgICAgVGhhbiBPbmUgQmxvY2stU2l6ZSBEYXRhIgorICAgICAgICBkYXRhX2xlbiA9ICAgICAgNzMKKyAgICAgICAgZGlnZXN0ID0gICAgICAgIDB4NmY2MzBmYWQ2N2NkYTBlZTFmYjFmNTYyZGIzYWE1M2UKKyAgICAgICAgKi8KKyAgICAgICAgeyA3LCAibWQ1IiwKKyAgICAgICAgICAgIHsweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCisgICAgICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKKyAgICAgICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsCisgICAgICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgCisgICAgICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgCisgICAgICAgICAgICAgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwgMHhhYSwKKyAgICAgICAgICAgICAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLCAweGFhLAorICAgICAgICAgICAgIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWEsIDB4YWF9LCA4MCwKKyAgICAgICAgICAgICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IGFuZCBMYXJnZXIgVGhhbiBPbmUgQmxvY2stU2l6ZSBEYXRhIiwgNzMsCisgICAgICAgICAgICB7MHg2ZiwgMHg2MywgMHgwZiwgMHhhZCwgMHg2NywgMHhjZCwgMHhhMCwgMHhlZSwKKyAgICAgICAgICAgICAweDFmLCAweGIxLCAweGY1LCAweDYyLCAweGRiLCAweDNhLCAweGE1LCAweDNlfSB9CisgICAgfTsKKworICAgIHVuc2lnbmVkIGxvbmcgb3V0bGVuOworICAgIGludCBlcnI7CisgICAgaW50IHRlc3RlZD0wLGZhaWxlZD0wOworICAgIGZvcihpPTA7IGkgPCAoaW50KShzaXplb2YoY2FzZXMpIC8gc2l6ZW9mKGNhc2VzWzBdKSk7IGkrKykgeworICAgICAgICBpbnQgaGFzaCA9IGZpbmRfaGFzaChjYXNlc1tpXS5hbGdvKTsKKyAgICAgICAgaWYgKGhhc2ggPT0gLTEpIGNvbnRpbnVlOworICAgICAgICArK3Rlc3RlZDsKKyAgICAgICAgb3V0bGVuID0gc2l6ZW9mKGRpZ2VzdCk7CisgICAgICAgIGlmKChlcnIgPSBobWFjX21lbW9yeShoYXNoLCBjYXNlc1tpXS5rZXksIGNhc2VzW2ldLmtleWxlbiwgY2FzZXNbaV0uZGF0YSwgY2FzZXNbaV0uZGF0YWxlbiwgZGlnZXN0LCAmb3V0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyNpZiAwCisgICAgICAgICAgICBwcmludGYoIkhNQUMtJXMgdGVzdCAjJWQsICVzXG4iLCBjYXNlc1tpXS5hbGdvLCBjYXNlc1tpXS5udW0sIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgfQorCisgICAgICAgIGlmKFhNRU1DTVAoZGlnZXN0LCBjYXNlc1tpXS5kaWdlc3QsIChzaXplX3QpaGFzaF9kZXNjcmlwdG9yW2hhc2hdLmhhc2hzaXplKSAhPSAwKSAgeworICAgICAgICAgICAgZmFpbGVkKys7CisjaWYgMAorICAgICAgICAgICAgdW5zaWduZWQgaW50IGo7CisgICAgICAgICAgICBwcmludGYoIlxuSE1BQy0lcyB0ZXN0ICMlZDpcbiIsIGNhc2VzW2ldLmFsZ28sIGNhc2VzW2ldLm51bSk7CisgICAgICAgICAgICBwcmludGYoICAiUmVzdWx0OiAgMHgiKTsKKyAgICAgICAgICAgIGZvcihqPTA7IGogPCBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uaGFzaHNpemU7IGorKykgeworICAgICAgICAgICAgICAgIHByaW50ZigiJTJ4ICIsIGRpZ2VzdFtqXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludGYoIlxuQ29ycmVjdDogMHgiKTsKKyAgICAgICAgICAgIGZvcihqPTA7IGogPCBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uaGFzaHNpemU7IGorKykgeworICAgICAgICAgICAgICAgcHJpbnRmKCIlMnggIiwgY2FzZXNbaV0uZGlnZXN0W2pdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBDUllQVF9FUlJPUjsKKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogcHJpbnRmKCJITUFDLSVzIHRlc3QgIyVkOiBQYXNzZWRcbiIsIGNhc2VzW2ldLmFsZ28sIGNhc2VzW2ldLm51bSk7ICovCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZmFpbGVkICE9IDApIHsKKyAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICB9IGVsc2UgaWYgKHRlc3RlZCA9PSAwKSB7CisgICAgICAgIHJldHVybiBDUllQVF9OT1A7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIENSWVBUX09LOworICAgIH0KKyAjZW5kaWYKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9obWFjL2htYWNfdGVzdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9vbWFjL29tYWNfZG9uZS5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy9vbWFjL29tYWNfZG9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMDQ1M2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL29tYWMvb21hY19kb25lLmMKQEAgLTAsMCArMSw4NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKiogCisgIEBmaWxlIG9tYWNfZG9uZS5jCisgIE9NQUMxIHN1cHBvcnQsIHRlcm1pbmF0ZSBhIHN0cmVhbSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX09NQUMKKworLyoqCisgIFRlcm1pbmF0ZSBhbiBPTUFDIHN0cmVhbQorICBAcGFyYW0gb21hYyAgIFRoZSBPTUFDIHN0YXRlCisgIEBwYXJhbSBvdXQgICAgW291dF0gRGVzdGluYXRpb24gZm9yIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAgQHBhcmFtIG91dGxlbiBbaW4vb3V0XSAgVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBvbWFjX2RvbmUob21hY19zdGF0ZSAqb21hYywgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisgICBpbnQgICAgICAgZXJyLCBtb2RlOworICAgdW5zaWduZWQgIHg7CisKKyAgIExUQ19BUkdDSEsob21hYyAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKG9tYWMtPmNpcGhlcl9pZHgpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKChvbWFjLT5idWZsZW4gPiAoaW50KXNpemVvZihvbWFjLT5ibG9jaykpIHx8IChvbWFjLT5idWZsZW4gPCAwKSB8fAorICAgICAgIChvbWFjLT5ibGtsZW4gPiAoaW50KXNpemVvZihvbWFjLT5ibG9jaykpIHx8IChvbWFjLT5idWZsZW4gPiBvbWFjLT5ibGtsZW4pKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIGZpZ3VyZSBvdXQgbW9kZSAqLworICAgaWYgKG9tYWMtPmJ1ZmxlbiAhPSBvbWFjLT5ibGtsZW4pIHsKKyAgICAgIC8qIGFkZCB0aGUgMHg4MCBieXRlICovCisgICAgICBvbWFjLT5ibG9ja1tvbWFjLT5idWZsZW4rK10gPSAweDgwOworCisgICAgICAvKiBwYWQgd2l0aCAweDAwICovCisgICAgICB3aGlsZSAob21hYy0+YnVmbGVuIDwgb21hYy0+YmxrbGVuKSB7CisgICAgICAgICBvbWFjLT5ibG9ja1tvbWFjLT5idWZsZW4rK10gPSAweDAwOworICAgICAgfQorICAgICAgbW9kZSA9IDE7CisgICB9IGVsc2UgeworICAgICAgbW9kZSA9IDA7CisgICB9CisKKyAgIC8qIG5vdyB4b3IgcHJldiArIEx1W21vZGVdICovCisgICBmb3IgKHggPSAwOyB4IDwgKHVuc2lnbmVkKW9tYWMtPmJsa2xlbjsgeCsrKSB7CisgICAgICAgb21hYy0+YmxvY2tbeF0gXj0gb21hYy0+cHJldlt4XSBeIG9tYWMtPkx1W21vZGVdW3hdOworICAgfQorCisgICAvKiBlbmNyeXB0IGl0ICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW29tYWMtPmNpcGhlcl9pZHhdLmVjYl9lbmNyeXB0KG9tYWMtPmJsb2NrLCBvbWFjLT5ibG9jaywgJm9tYWMtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgY2lwaGVyX2Rlc2NyaXB0b3Jbb21hYy0+Y2lwaGVyX2lkeF0uZG9uZSgmb21hYy0+a2V5KTsKKyAKKyAgIC8qIG91dHB1dCBpdCAqLworICAgZm9yICh4ID0gMDsgeCA8ICh1bnNpZ25lZClvbWFjLT5ibGtsZW4gJiYgeCA8ICpvdXRsZW47IHgrKykgeworICAgICAgIG91dFt4XSA9IG9tYWMtPmJsb2NrW3hdOworICAgfQorICAgKm91dGxlbiA9IHg7CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0ob21hYywgc2l6ZW9mKCpvbWFjKSk7CisjZW5kaWYKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9vbWFjL29tYWNfZG9uZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9vbWFjL29tYWNfZmlsZS5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy9vbWFjL29tYWNfZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTdhZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL29tYWMvb21hY19maWxlLmMKQEAgLTAsMCArMSw4MyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKiogCisgIEBmaWxlIG9tYWNfZmlsZS5jCisgIE9NQUMxIHN1cHBvcnQsIHByb2Nlc3MgYSBmaWxlLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfT01BQworCisvKioKKyAgIE9NQUMgYSBmaWxlCisgICBAcGFyYW0gY2lwaGVyICAgVGhlIGluZGV4IG9mIHRoZSBjaXBoZXIgZGVzaXJlZAorICAgQHBhcmFtIGtleSAgICAgIFRoZSBzZWNyZXQga2V5CisgICBAcGFyYW0ga2V5bGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgQHBhcmFtIGZpbGVuYW1lIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHlvdSB3aXNoIHRvIE9NQUMKKyAgIEBwYXJhbSBvdXQgICAgICBbb3V0XSBXaGVyZSB0aGUgYXV0aGVudGljYXRpb24gdGFnIGlzIHRvIGJlIHN0b3JlZAorICAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgZmlsZSBzdXBwb3J0IGhhcyBiZWVuIGRpc2FibGVkCisqLworaW50IG9tYWNfZmlsZShpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyNpZmRlZiBMVENfTk9fRklMRQorICAgcmV0dXJuIENSWVBUX05PUDsKKyNlbHNlCisgICBpbnQgZXJyLCB4OworICAgb21hY19zdGF0ZSBvbWFjOworICAgRklMRSAqaW47CisgICB1bnNpZ25lZCBjaGFyIGJ1Zls1MTJdOworCisgICBMVENfQVJHQ0hLKGtleSAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhmaWxlbmFtZSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAgICE9IE5VTEwpOworCisgICBpbiA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKTsKKyAgIGlmIChpbiA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfRklMRV9OT1RGT1VORDsKKyAgIH0KKworICAgaWYgKChlcnIgPSBvbWFjX2luaXQoJm9tYWMsIGNpcGhlciwga2V5LCBrZXlsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZmNsb3NlKGluKTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGRvIHsKKyAgICAgIHggPSBmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBpbik7CisgICAgICBpZiAoKGVyciA9IG9tYWNfcHJvY2Vzcygmb21hYywgYnVmLCB4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIGZjbG9zZShpbik7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgfSB3aGlsZSAoeCA9PSBzaXplb2YoYnVmKSk7CisgICBmY2xvc2UoaW4pOworCisgICBpZiAoKGVyciA9IG9tYWNfZG9uZSgmb21hYywgb3V0LCBvdXRsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShidWYsIHNpemVvZihidWYpKTsKKyNlbmRpZgorCisgICByZXR1cm4gQ1JZUFRfT0s7CisjZW5kaWYKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX2ZpbGUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAzIDAwOjM5OjQ5ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX2luaXQuYyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmYyNmEyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy9vbWFjL29tYWNfaW5pdC5jCkBAIC0wLDAgKzEsMTAxIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKiAKKyAgQGZpbGUgb21hY19pbml0LmMKKyAgT01BQzEgc3VwcG9ydCwgaW5pdGlhbGl6ZSBzdGF0ZSwgYnkgVG9tIFN0IERlbmlzCisqLworCisKKyNpZmRlZiBMVENfT01BQworCisvKioKKyAgIEluaXRpYWxpemUgYW4gT01BQyBzdGF0ZQorICAgQHBhcmFtIG9tYWMgICAgVGhlIE9NQUMgc3RhdGUgdG8gaW5pdGlhbGl6ZQorICAgQHBhcmFtIGNpcGhlciAgVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGNpcGhlcgorICAgQHBhcmFtIGtleSAgICAgVGhlIHNlY3JldCBrZXkKKyAgIEBwYXJhbSBrZXlsZW4gIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBvbWFjX2luaXQob21hY19zdGF0ZSAqb21hYywgaW50IGNpcGhlciwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbikKK3sKKyAgIGludCBlcnIsIHgsIHksIG1hc2ssIG1zYiwgbGVuOworCisgICBMVENfQVJHQ0hLKG9tYWMgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAgIT0gTlVMTCk7CisKKyAgIC8qIHNjaGVkdWxlIHRoZSBrZXkgKi8KKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisjaWZkZWYgTFRDX0ZBU1QKKyAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aCAlIHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKyNlbmRpZgorCisgICAvKiBub3cgc2V0dXAgdGhlIHN5c3RlbSAqLworICAgc3dpdGNoIChjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aCkgeworICAgICAgIGNhc2UgODogIG1hc2sgPSAweDFCOworICAgICAgICAgICAgICAgIGxlbiAgPSA4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgIGNhc2UgMTY6IG1hc2sgPSAweDg3OworICAgICAgICAgICAgICAgIGxlbiAgPSAxNjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICBkZWZhdWx0OiByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5zZXR1cChrZXksIGtleWxlbiwgMCwgJm9tYWMtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBvayBub3cgd2UgbmVlZCBMdSBhbmQgTHVeMiBbY2FsYyBvbmUgZnJvbSB0aGUgb3RoZXJdICovCisKKyAgIC8qIGZpcnN0IGNhbGMgTCB3aGljaCBpcyBFaygwKSAqLworICAgemVyb21lbShvbWFjLT5MdVswXSwgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5ibG9ja19sZW5ndGgpOworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KG9tYWMtPkx1WzBdLCBvbWFjLT5MdVswXSwgJm9tYWMtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBub3cgZG8gdGhlIG11bHRzLCB3aG9vcHkhICovCisgICBmb3IgKHggPSAwOyB4IDwgMjsgeCsrKSB7CisgICAgICAgLyogaWYgbXNiKEwgKiB1Xih4KzEpKSA9IDAgdGhlbiBqdXN0IHNoaWZ0LCBvdGhlcndpc2Ugc2hpZnQgYW5kIHhvciBjb25zdGFudCBtYXNrICovCisgICAgICAgbXNiID0gb21hYy0+THVbeF1bMF0gPj4gNzsKKworICAgICAgIC8qIHNoaWZ0IGxlZnQgKi8KKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgKGxlbiAtIDEpOyB5KyspIHsKKyAgICAgICAgICAgb21hYy0+THVbeF1beV0gPSAoKG9tYWMtPkx1W3hdW3ldIDw8IDEpIHwgKG9tYWMtPkx1W3hdW3krMV0gPj4gNykpICYgMjU1OworICAgICAgIH0KKyAgICAgICBvbWFjLT5MdVt4XVtsZW4gLSAxXSA9ICgob21hYy0+THVbeF1bbGVuIC0gMV0gPDwgMSkgXiAobXNiID8gbWFzayA6IDApKSAmIDI1NTsKKyAKKyAgICAgICAvKiBjb3B5IHVwIGFzIHJlcXVpcmUgKi8KKyAgICAgICBpZiAoeCA9PSAwKSB7CisgICAgICAgICAgWE1FTUNQWShvbWFjLT5MdVsxXSwgb21hYy0+THVbMF0sIHNpemVvZihvbWFjLT5MdVswXSkpOworICAgICAgIH0KKyAgIH0KKworICAgLyogc2V0dXAgc3RhdGUgKi8KKyAgIG9tYWMtPmNpcGhlcl9pZHggPSBjaXBoZXI7CisgICBvbWFjLT5idWZsZW4gICAgID0gMDsKKyAgIG9tYWMtPmJsa2xlbiAgICAgPSBsZW47CisgICB6ZXJvbWVtKG9tYWMtPnByZXYsICBzaXplb2Yob21hYy0+cHJldikpOworICAgemVyb21lbShvbWFjLT5ibG9jaywgc2l6ZW9mKG9tYWMtPmJsb2NrKSk7CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX2luaXQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL29tYWMvb21hY19tZW1vcnkuYyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX21lbW9yeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYjJkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL29tYWMvb21hY19tZW1vcnkuYwpAQCAtMCwwICsxLDg1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKiAKKyAgQGZpbGUgb21hY19tZW1vcnkuYworICBPTUFDMSBzdXBwb3J0LCBwcm9jZXNzIGEgYmxvY2sgb2YgbWVtb3J5LCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfT01BQworCisvKioKKyAgIE9NQUMgYSBibG9jayBvZiBtZW1vcnkgCisgICBAcGFyYW0gY2lwaGVyICAgIFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBjaXBoZXIKKyAgIEBwYXJhbSBrZXkgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgIEBwYXJhbSBrZXlsZW4gICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgQHBhcmFtIGluICAgICAgICBUaGUgZGF0YSB0byBzZW5kIHRocm91Z2ggT01BQworICAgQHBhcmFtIGlubGVuICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIHNlbmQgdGhyb3VnaCBPTUFDIChvY3RldHMpCisgICBAcGFyYW0gb3V0ICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgICBAcGFyYW0gb3V0bGVuICAgIFtpbi9vdXRdICBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcgKG9jdGV0cykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBvbWFjX21lbW9yeShpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIGludCBlcnI7CisgICBvbWFjX3N0YXRlICpvbWFjOworCisgICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgLyogaXMgdGhlIGNpcGhlciB2YWxpZD8gKi8KKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBVc2UgYWNjZWxlcmF0b3IgaWYgZm91bmQgKi8KKyAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLm9tYWNfbWVtb3J5ICE9IE5VTEwpIHsKKyAgICAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLm9tYWNfbWVtb3J5KGtleSwga2V5bGVuLCBpbiwgaW5sZW4sIG91dCwgb3V0bGVuKTsKKyAgIH0KKworICAgLyogYWxsb2NhdGUgcmFtIGZvciBvbWFjIHN0YXRlICovCisgICBvbWFjID0gWE1BTExPQyhzaXplb2Yob21hY19zdGF0ZSkpOworICAgaWYgKG9tYWMgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogb21hYyBwcm9jZXNzIHRoZSBtZXNzYWdlICovCisgICBpZiAoKGVyciA9IG9tYWNfaW5pdChvbWFjLCBjaXBoZXIsIGtleSwga2V5bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKyAgIGlmICgoZXJyID0gb21hY19wcm9jZXNzKG9tYWMsIGluLCBpbmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisgICBpZiAoKGVyciA9IG9tYWNfZG9uZShvbWFjLCBvdXQsIG91dGxlbikpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIGVyciA9IENSWVBUX09LOworTEJMX0VSUjoKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0ob21hYywgc2l6ZW9mKG9tYWNfc3RhdGUpKTsKKyNlbmRpZgorCisgICBYRlJFRShvbWFjKTsKKyAgIHJldHVybiBlcnI7ICAgCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL29tYWMvb21hY19tZW1vcnkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIzOjAxOjA2ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX21lbW9yeV9tdWx0aS5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy9vbWFjL29tYWNfbWVtb3J5X211bHRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0NWNhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX21lbW9yeV9tdWx0aS5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworLyoqIAorICBAZmlsZSBvbWFjX21lbW9yeV9tdWx0aS5jCisgIE9NQUMxIHN1cHBvcnQsIHByb2Nlc3MgbXVsdGlwbGUgYmxvY2tzIG9mIG1lbW9yeSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX09NQUMKKworLyoqCisgICBPTUFDIG11bHRpcGxlIGJsb2NrcyBvZiBtZW1vcnkgCisgICBAcGFyYW0gY2lwaGVyICAgIFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBjaXBoZXIKKyAgIEBwYXJhbSBrZXkgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgIEBwYXJhbSBrZXlsZW4gICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgQHBhcmFtIG91dCAgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHBhcmFtIG91dGxlbiAgICBbaW4vb3V0XSAgVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnIChvY3RldHMpCisgICBAcGFyYW0gaW4gICAgICAgIFRoZSBkYXRhIHRvIHNlbmQgdGhyb3VnaCBPTUFDCisgICBAcGFyYW0gaW5sZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gc2VuZCB0aHJvdWdoIE9NQUMgKG9jdGV0cykKKyAgIEBwYXJhbSAuLi4gICAgICAgdHVwbGVzIG9mIChkYXRhLGxlbikgcGFpcnMgdG8gT01BQywgdGVybWluYXRlZCB3aXRoIGEgKE5VTEwseCkgKHg9ZG9uJ3QgY2FyZSkKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBvbWFjX21lbW9yeV9tdWx0aShpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwgLi4uKQoreworICAgaW50ICAgICAgICAgICAgICAgICAgZXJyOworICAgb21hY19zdGF0ZSAgICAgICAgICAqb21hYzsKKyAgIHZhX2xpc3QgICAgICAgICAgICAgIGFyZ3M7CisgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdXJwdHI7CisgICB1bnNpZ25lZCBsb25nICAgICAgICBjdXJsZW47CisKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworCisgICAvKiBhbGxvY2F0ZSByYW0gZm9yIG9tYWMgc3RhdGUgKi8KKyAgIG9tYWMgPSBYTUFMTE9DKHNpemVvZihvbWFjX3N0YXRlKSk7CisgICBpZiAob21hYyA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICAvKiBvbWFjIHByb2Nlc3MgdGhlIG1lc3NhZ2UgKi8KKyAgIGlmICgoZXJyID0gb21hY19pbml0KG9tYWMsIGNpcGhlciwga2V5LCBrZXlsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorICAgdmFfc3RhcnQoYXJncywgaW5sZW4pOworICAgY3VycHRyID0gaW47IAorICAgY3VybGVuID0gaW5sZW47CisgICBmb3IgKDs7KSB7CisgICAgICAvKiBwcm9jZXNzIGJ1ZiAqLworICAgICAgaWYgKChlcnIgPSBvbWFjX3Byb2Nlc3Mob21hYywgY3VycHRyLCBjdXJsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgICAgLyogc3RlcCB0byBuZXh0ICovCisgICAgICBjdXJwdHIgPSB2YV9hcmcoYXJncywgY29uc3QgdW5zaWduZWQgY2hhciopOworICAgICAgaWYgKGN1cnB0ciA9PSBOVUxMKSB7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGN1cmxlbiA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKKyAgIH0KKyAgIGlmICgoZXJyID0gb21hY19kb25lKG9tYWMsIG91dCwgb3V0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKG9tYWMsIHNpemVvZihvbWFjX3N0YXRlKSk7CisjZW5kaWYKKyAgIFhGUkVFKG9tYWMpOworICAgdmFfZW5kKGFyZ3MpOworICAgcmV0dXJuIGVycjsgICAKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX21lbW9yeV9tdWx0aS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9vbWFjL29tYWNfcHJvY2Vzcy5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy9vbWFjL29tYWNfcHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0Yjk2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL29tYWMvb21hY19wcm9jZXNzLmMKQEAgLTAsMCArMSw4OCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKiogCisgIEBmaWxlIG9tYWNfcHJvY2Vzcy5jCisgIE9NQUMxIHN1cHBvcnQsIHByb2Nlc3MgZGF0YSwgVG9tIFN0IERlbmlzCisqLworCisKKyNpZmRlZiBMVENfT01BQworCisvKiogCisgICBQcm9jZXNzIGRhdGEgdGhyb3VnaCBPTUFDCisgICBAcGFyYW0gb21hYyAgICAgVGhlIE9NQUMgc3RhdGUKKyAgIEBwYXJhbSBpbiAgICAgICBUaGUgaW5wdXQgZGF0YSB0byBzZW5kIHRocm91Z2ggT01BQworICAgQHBhcmFtIGlubGVuICAgIFRoZSBsZW5ndGggb2YgdGhlIGlucHV0IChvY3RldHMpCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgb21hY19wcm9jZXNzKG9tYWNfc3RhdGUgKm9tYWMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuKQoreworICAgdW5zaWduZWQgbG9uZyBuLCB4OworICAgaW50ICAgICAgICAgICBlcnI7CisKKyAgIExUQ19BUkdDSEsob21hYyAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGluICAgICE9IE5VTEwpOworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQob21hYy0+Y2lwaGVyX2lkeCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBpZiAoKG9tYWMtPmJ1ZmxlbiA+IChpbnQpc2l6ZW9mKG9tYWMtPmJsb2NrKSkgfHwgKG9tYWMtPmJ1ZmxlbiA8IDApIHx8CisgICAgICAgKG9tYWMtPmJsa2xlbiA+IChpbnQpc2l6ZW9mKG9tYWMtPmJsb2NrKSkgfHwgKG9tYWMtPmJ1ZmxlbiA+IG9tYWMtPmJsa2xlbikpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworI2lmZGVmIExUQ19GQVNUCisgICBpZiAob21hYy0+YnVmbGVuID09IDAgJiYgaW5sZW4gPiAxNikgeworICAgICAgaW50IHk7CisgICAgICBmb3IgKHggPSAwOyB4IDwgKGlubGVuIC0gMTYpOyB4ICs9IDE2KSB7CisgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5ICs9IHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgICAgICAgICAqKChMVENfRkFTVF9UWVBFKikoJm9tYWMtPnByZXZbeV0pKSBePSAqKChMVENfRkFTVF9UWVBFKikoJmluW3ldKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGluICs9IDE2OworICAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3Jbb21hYy0+Y2lwaGVyX2lkeF0uZWNiX2VuY3J5cHQob21hYy0+cHJldiwgb21hYy0+cHJldiwgJm9tYWMtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgICBpbmxlbiAtPSB4OworICAgIH0KKyNlbmRpZgorCisgICB3aGlsZSAoaW5sZW4gIT0gMCkgeyAKKyAgICAgICAvKiBvayBpZiB0aGUgYmxvY2sgaXMgZnVsbCB3ZSB4b3IgaW4gcHJldiwgZW5jcnlwdCBhbmQgcmVwbGFjZSBwcmV2ICovCisgICAgICAgaWYgKG9tYWMtPmJ1ZmxlbiA9PSBvbWFjLT5ibGtsZW4pIHsKKyAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgKHVuc2lnbmVkIGxvbmcpb21hYy0+YmxrbGVuOyB4KyspIHsKKyAgICAgICAgICAgICAgb21hYy0+YmxvY2tbeF0gXj0gb21hYy0+cHJldlt4XTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltvbWFjLT5jaXBoZXJfaWR4XS5lY2JfZW5jcnlwdChvbWFjLT5ibG9jaywgb21hYy0+cHJldiwgJm9tYWMtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CisgICAgICAgICAgb21hYy0+YnVmbGVuID0gMDsKKyAgICAgICB9CisKKyAgICAgICAvKiBhZGQgYnl0ZXMgKi8KKyAgICAgICBuID0gTUlOKGlubGVuLCAodW5zaWduZWQgbG9uZykob21hYy0+YmxrbGVuIC0gb21hYy0+YnVmbGVuKSk7CisgICAgICAgWE1FTUNQWShvbWFjLT5ibG9jayArIG9tYWMtPmJ1ZmxlbiwgaW4sIG4pOworICAgICAgIG9tYWMtPmJ1ZmxlbiAgKz0gbjsKKyAgICAgICBpbmxlbiAgICAgICAgIC09IG47CisgICAgICAgaW4gICAgICAgICAgICArPSBuOworICAgfQorCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX3Byb2Nlc3MuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAzIDAwOjM5OjQ5ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX3Rlc3QuYyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjMwYThjCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy9vbWFjL29tYWNfdGVzdC5jCkBAIC0wLDAgKzEsMTEwIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKiAKKyAgQGZpbGUgb21hY190ZXN0LmMKKyAgT01BQzEgc3VwcG9ydCwgc2VsZi10ZXN0LCBieSBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfT01BQworCisvKioKKyAgVGVzdCB0aGUgT01BQyBzZXR1cAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiB0ZXN0cyBoYXZlIGJlZW4gZGlzYWJsZWQKKyovCitpbnQgb21hY190ZXN0KHZvaWQpCit7CisjaWYgIWRlZmluZWQoTFRDX1RFU1QpCisgICAgcmV0dXJuIENSWVBUX05PUDsKKyNlbHNlCisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7IAorICAgICAgICBpbnQga2V5bGVuLCBtc2dsZW47CisgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XSwgbXNnWzY0XSwgdGFnWzE2XTsKKyAgICB9IHRlc3RzW10gPSB7CisgICAgeyAxNiwgMCwKKyAgICAgIHsgMHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgCisgICAgICAgIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksIDB4Y2YsIDB4NGYsIDB4M2MgfSwKKyAgICAgIHsgMHgwMCB9LAorICAgICAgeyAweGJiLCAweDFkLCAweDY5LCAweDI5LCAweGU5LCAweDU5LCAweDM3LCAweDI4LAorICAgICAgICAweDdmLCAweGEzLCAweDdkLCAweDEyLCAweDliLCAweDc1LCAweDY3LCAweDQ2IH0KKyAgICB9LAorICAgIHsgMTYsIDE2LCAKKyAgICAgIHsgMHgyYiwgMHg3ZSwgMHgxNSwgMHgxNiwgMHgyOCwgMHhhZSwgMHhkMiwgMHhhNiwgCisgICAgICAgIDB4YWIsIDB4ZjcsIDB4MTUsIDB4ODgsIDB4MDksIDB4Y2YsIDB4NGYsIDB4M2MgfSwKKyAgICAgIHsgMHg2YiwgMHhjMSwgMHhiZSwgMHhlMiwgMHgyZSwgMHg0MCwgMHg5ZiwgMHg5NiwKKyAgICAgICAgMHhlOSwgMHgzZCwgMHg3ZSwgMHgxMSwgMHg3MywgMHg5MywgMHgxNywgMHgyYSB9LAorICAgICAgeyAweDA3LCAweDBhLCAweDE2LCAweGI0LCAweDZiLCAweDRkLCAweDQxLCAweDQ0LCAKKyAgICAgICAgMHhmNywgMHg5YiwgMHhkZCwgMHg5ZCwgMHhkMCwgMHg0YSwgMHgyOCwgMHg3YyB9CisgICAgfSwKKyAgICB7IDE2LCA0MCwgCisgICAgICB7IDB4MmIsIDB4N2UsIDB4MTUsIDB4MTYsIDB4MjgsIDB4YWUsIDB4ZDIsIDB4YTYsIAorICAgICAgICAweGFiLCAweGY3LCAweDE1LCAweDg4LCAweDA5LCAweGNmLCAweDRmLCAweDNjIH0sCisgICAgICB7IDB4NmIsIDB4YzEsIDB4YmUsIDB4ZTIsIDB4MmUsIDB4NDAsIDB4OWYsIDB4OTYsCisgICAgICAgIDB4ZTksIDB4M2QsIDB4N2UsIDB4MTEsIDB4NzMsIDB4OTMsIDB4MTcsIDB4MmEsCisgICAgICAgIDB4YWUsIDB4MmQsIDB4OGEsIDB4NTcsIDB4MWUsIDB4MDMsIDB4YWMsIDB4OWMsIAorICAgICAgICAweDllLCAweGI3LCAweDZmLCAweGFjLCAweDQ1LCAweGFmLCAweDhlLCAweDUxLAorICAgICAgICAweDMwLCAweGM4LCAweDFjLCAweDQ2LCAweGEzLCAweDVjLCAweGU0LCAweDExIH0sCisgICAgICB7IDB4ZGYsIDB4YTYsIDB4NjcsIDB4NDcsIDB4ZGUsIDB4OWEsIDB4ZTYsIDB4MzAsCisgICAgICAgIDB4MzAsIDB4Y2EsIDB4MzIsIDB4NjEsIDB4MTQsIDB4OTcsIDB4YzgsIDB4MjcgfQorICAgIH0sCisgICAgeyAxNiwgNjQsIAorICAgICAgeyAweDJiLCAweDdlLCAweDE1LCAweDE2LCAweDI4LCAweGFlLCAweGQyLCAweGE2LCAKKyAgICAgICAgMHhhYiwgMHhmNywgMHgxNSwgMHg4OCwgMHgwOSwgMHhjZiwgMHg0ZiwgMHgzYyB9LAorICAgICAgeyAweDZiLCAweGMxLCAweGJlLCAweGUyLCAweDJlLCAweDQwLCAweDlmLCAweDk2LAorICAgICAgICAweGU5LCAweDNkLCAweDdlLCAweDExLCAweDczLCAweDkzLCAweDE3LCAweDJhLAorICAgICAgICAweGFlLCAweDJkLCAweDhhLCAweDU3LCAweDFlLCAweDAzLCAweGFjLCAweDljLCAKKyAgICAgICAgMHg5ZSwgMHhiNywgMHg2ZiwgMHhhYywgMHg0NSwgMHhhZiwgMHg4ZSwgMHg1MSwKKyAgICAgICAgMHgzMCwgMHhjOCwgMHgxYywgMHg0NiwgMHhhMywgMHg1YywgMHhlNCwgMHgxMSwKKyAgICAgICAgMHhlNSwgMHhmYiwgMHhjMSwgMHgxOSwgMHgxYSwgMHgwYSwgMHg1MiwgMHhlZiwKKyAgICAgICAgMHhmNiwgMHg5ZiwgMHgyNCwgMHg0NSwgMHhkZiwgMHg0ZiwgMHg5YiwgMHgxNywKKyAgICAgICAgMHhhZCwgMHgyYiwgMHg0MSwgMHg3YiwgMHhlNiwgMHg2YywgMHgzNywgMHgxMCB9LAorICAgICAgeyAweDUxLCAweGYwLCAweGJlLCAweGJmLCAweDdlLCAweDNiLCAweDlkLCAweDkyLCAKKyAgICAgICAgMHhmYywgMHg0OSwgMHg3NCwgMHgxNywgMHg3OSwgMHgzNiwgMHgzYywgMHhmZSB9CisgICAgfQorCisgICAgfTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dFsxNl07CisgICAgaW50IHgsIGVyciwgaWR4OworICAgIHVuc2lnbmVkIGxvbmcgbGVuOworCisKKyAgICAvKiBBRVMgY2FuIGJlIHVuZGVyIHJpam5kYWVsIG9yIGFlcy4uLiB0cnkgdG8gZmluZCBpdCAqLyAKKyAgICBpZiAoKGlkeCA9IGZpbmRfY2lwaGVyKCJhZXMiKSkgPT0gLTEpIHsKKyAgICAgICBpZiAoKGlkeCA9IGZpbmRfY2lwaGVyKCJyaWpuZGFlbCIpKSA9PSAtMSkgeworICAgICAgICAgIHJldHVybiBDUllQVF9OT1A7CisgICAgICAgfQorICAgIH0KKworICAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSkpOyB4KyspIHsKKyAgICAgICBsZW4gPSBzaXplb2Yob3V0KTsgCisgICAgICAgaWYgKChlcnIgPSBvbWFjX21lbW9yeShpZHgsIHRlc3RzW3hdLmtleSwgdGVzdHNbeF0ua2V5bGVuLCB0ZXN0c1t4XS5tc2csIHRlc3RzW3hdLm1zZ2xlbiwgb3V0LCAmbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgIH0KKworICAgICAgIGlmIChYTUVNQ01QKG91dCwgdGVzdHNbeF0udGFnLCAxNikgIT0gMCkgeworI2lmIDAKKyAgICAgICAgICBpbnQgeTsKKyAgICAgICAgICBwcmludGYoIlxuXG5UYWc6ICIpOworICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSBwcmludGYoIiUwMngiLCBvdXRbeV0pOyBwcmludGYoIlxuXG4iKTsKKyNlbmRpZgorICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gQ1JZUFRfT0s7CisjZW5kaWYKK30gICAKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvb21hYy9vbWFjX3Rlc3QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAzIDAwOjM5OjQ5ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYWMvcGVsaWNhbi9wZWxpY2FuLmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3BlbGljYW4vcGVsaWNhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNGNkMzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3BlbGljYW4vcGVsaWNhbi5jCkBAIC0wLDAgKzEsMTY1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKiAKKyAgIEBmaWxlIHBlbGljYW4uYworICAgUGVsaWNhbiBNQUMsIGluaXRpYWxpemUgc3RhdGUsIGJ5IFRvbSBTdCBEZW5pcyAKKyovCisKKyNpZmRlZiBQRUxJQ0FOCisKKyNkZWZpbmUgRU5DUllQVF9PTkxZCisjZGVmaW5lIFBFTElfVEFCCisjaW5jbHVkZSAiLi4vLi4vY2lwaGVycy9hZXMvYWVzX3RhYi5jIgorCisvKioKKyAgIEluaXRpYWxpemUgYSBQZWxpY2FuIHN0YXRlCisgICBAcGFyYW0gcGVsbWFjICAgIFRoZSBQZWxpY2FuIHN0YXRlIHRvIGluaXRpYWxpemUKKyAgIEBwYXJhbSBrZXkgICAgICAgVGhlIHNlY3JldCBrZXkgCisgICBAcGFyYW0ga2V5bGVuICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBwZWxpY2FuX2luaXQocGVsaWNhbl9zdGF0ZSAqcGVsbWFjLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuKQoreworICAgIGludCBlcnI7CisgICAgCisgICAgTFRDX0FSR0NISyhwZWxtYWMgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7CisKKyNpZmRlZiBMVENfRkFTVAorICAgIGlmICgxNiAlIHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoKGVyciA9IGFlc19zZXR1cChrZXksIGtleWxlbiwgMCwgJnBlbG1hYy0+SykpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICB6ZXJvbWVtKHBlbG1hYy0+c3RhdGUsIDE2KTsKKyAgICBhZXNfZWNiX2VuY3J5cHQocGVsbWFjLT5zdGF0ZSwgcGVsbWFjLT5zdGF0ZSwgJnBlbG1hYy0+Syk7CisgICAgcGVsbWFjLT5idWZsZW4gPSAwOworCisgICAgcmV0dXJuIENSWVBUX09LOyAgICAKK30KKworc3RhdGljIHZvaWQgZm91cl9yb3VuZHMocGVsaWNhbl9zdGF0ZSAqcGVsbWFjKQoreworICAgIHVsb25nMzIgczAsIHMxLCBzMiwgczMsIHQwLCB0MSwgdDIsIHQzOworICAgIGludCByOworCisgICAgTE9BRDMySChzMCwgcGVsbWFjLT5zdGF0ZSAgICAgICk7CisgICAgTE9BRDMySChzMSwgcGVsbWFjLT5zdGF0ZSAgKyAgNCk7CisgICAgTE9BRDMySChzMiwgcGVsbWFjLT5zdGF0ZSAgKyAgOCk7CisgICAgTE9BRDMySChzMywgcGVsbWFjLT5zdGF0ZSAgKyAxMik7CisgICAgZm9yIChyID0gMDsgciA8IDQ7IHIrKykgeworICAgICAgICB0MCA9CisgICAgICAgICAgICBUZTAoYnl0ZShzMCwgMykpIF4KKyAgICAgICAgICAgIFRlMShieXRlKHMxLCAyKSkgXgorICAgICAgICAgICAgVGUyKGJ5dGUoczIsIDEpKSBeCisgICAgICAgICAgICBUZTMoYnl0ZShzMywgMCkpOworICAgICAgICB0MSA9CisgICAgICAgICAgICBUZTAoYnl0ZShzMSwgMykpIF4KKyAgICAgICAgICAgIFRlMShieXRlKHMyLCAyKSkgXgorICAgICAgICAgICAgVGUyKGJ5dGUoczMsIDEpKSBeCisgICAgICAgICAgICBUZTMoYnl0ZShzMCwgMCkpOworICAgICAgICB0MiA9CisgICAgICAgICAgICBUZTAoYnl0ZShzMiwgMykpIF4KKyAgICAgICAgICAgIFRlMShieXRlKHMzLCAyKSkgXgorICAgICAgICAgICAgVGUyKGJ5dGUoczAsIDEpKSBeCisgICAgICAgICAgICBUZTMoYnl0ZShzMSwgMCkpOworICAgICAgICB0MyA9CisgICAgICAgICAgICBUZTAoYnl0ZShzMywgMykpIF4KKyAgICAgICAgICAgIFRlMShieXRlKHMwLCAyKSkgXgorICAgICAgICAgICAgVGUyKGJ5dGUoczEsIDEpKSBeCisgICAgICAgICAgICBUZTMoYnl0ZShzMiwgMCkpOworICAgICAgICBzMCA9IHQwOyBzMSA9IHQxOyBzMiA9IHQyOyBzMyA9IHQzOworICAgIH0KKyAgICBTVE9SRTMySChzMCwgcGVsbWFjLT5zdGF0ZSAgICAgICk7CisgICAgU1RPUkUzMkgoczEsIHBlbG1hYy0+c3RhdGUgICsgIDQpOworICAgIFNUT1JFMzJIKHMyLCBwZWxtYWMtPnN0YXRlICArICA4KTsKKyAgICBTVE9SRTMySChzMywgcGVsbWFjLT5zdGF0ZSAgKyAxMik7Cit9CisKKy8qKiAKKyAgUHJvY2VzcyBhIGJsb2NrIG9mIHRleHQgdGhyb3VnaCBQZWxpY2FuCisgIEBwYXJhbSBwZWxtYWMgICAgICAgVGhlIFBlbGljYW4gTUFDIHN0YXRlCisgIEBwYXJhbSBpbiAgICAgICAgICAgVGhlIGlucHV0CisgIEBwYXJhbSBpbmxlbiAgICAgICAgVGhlIGxlbmd0aCBpbnB1dCAob2N0ZXRzKQorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyAgKi8KK2ludCBwZWxpY2FuX3Byb2Nlc3MocGVsaWNhbl9zdGF0ZSAqcGVsbWFjLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbikKK3sKKworICAgTFRDX0FSR0NISyhwZWxtYWMgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKworICAgLyogY2hlY2sgcmFuZ2UgKi8KKyAgIGlmIChwZWxtYWMtPmJ1ZmxlbiA8IDAgfHwgcGVsbWFjLT5idWZsZW4gPiAxNSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisjaWZkZWYgTFRDX0ZBU1QKKyAgIGlmIChwZWxtYWMtPmJ1ZmxlbiA9PSAwKSB7CisgICAgICB3aGlsZSAoaW5sZW4gJiB+MTUpIHsKKyAgICAgICAgIGludCB4OworICAgICAgICAgZm9yICh4ID0gMDsgeCA8IDE2OyB4ICs9IHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopcGVsbWFjLT5zdGF0ZSArIHgpKSBePSAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKilpbiArIHgpKTsKKyAgICAgICAgIH0KKyAgICAgICAgIGZvdXJfcm91bmRzKHBlbG1hYyk7CisgICAgICAgICBpbiAgICArPSAxNjsKKyAgICAgICAgIGlubGVuIC09IDE2OworICAgICAgfQorICAgfQorI2VuZGlmCisKKyAgIHdoaWxlIChpbmxlbi0tKSB7CisgICAgICAgcGVsbWFjLT5zdGF0ZVtwZWxtYWMtPmJ1ZmxlbisrXSBePSAqaW4rKzsKKyAgICAgICBpZiAocGVsbWFjLT5idWZsZW4gPT0gMTYpIHsKKyAgICAgICAgICBmb3VyX3JvdW5kcyhwZWxtYWMpOworICAgICAgICAgIHBlbG1hYy0+YnVmbGVuID0gMDsKKyAgICAgICB9CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBUZXJtaW5hdGUgUGVsaWNhbiBNQUMKKyAgQHBhcmFtIHBlbG1hYyAgICAgIFRoZSBQZWxpY2FuIE1BQyBzdGF0ZQorICBAcGFyYW0gb3V0ICAgICAgICAgW291dF0gVGhlIFRBRworICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2VzcworKi8KK2ludCBwZWxpY2FuX2RvbmUocGVsaWNhbl9zdGF0ZSAqcGVsbWFjLCB1bnNpZ25lZCBjaGFyICpvdXQpCit7CisgICBMVENfQVJHQ0hLKHBlbG1hYyAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAgIT0gTlVMTCk7CisKKyAgIC8qIGNoZWNrIHJhbmdlICovCisgICBpZiAocGVsbWFjLT5idWZsZW4gPCAwIHx8IHBlbG1hYy0+YnVmbGVuID4gMTYpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgaWYgIChwZWxtYWMtPmJ1ZmxlbiA9PSAxNikgeworICAgICAgIGZvdXJfcm91bmRzKHBlbG1hYyk7CisgICAgICAgcGVsbWFjLT5idWZsZW4gPSAwOworICAgfQorICAgcGVsbWFjLT5zdGF0ZVtwZWxtYWMtPmJ1ZmxlbisrXSBePSAweDgwOworICAgYWVzX2VjYl9lbmNyeXB0KHBlbG1hYy0+c3RhdGUsIG91dCwgJnBlbG1hYy0+Syk7CisgICBhZXNfZG9uZSgmcGVsbWFjLT5LKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30gICAgICAgICAgICAgICAgICAgICAgICAKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvcGVsaWNhbi9wZWxpY2FuLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTggJCAqLworLyogJERhdGU6IDIwMDYvMDQvMDIgMTM6MTk6MTAgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fbWVtb3J5LmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3BlbGljYW4vcGVsaWNhbl9tZW1vcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGRlODQzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fbWVtb3J5LmMKQEAgLTAsMCArMSw1OSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKiogCisgICBAZmlsZSBwZWxpY2FuX21lbW9yeS5jCisgICBQZWxpY2FuIE1BQywgTUFDIGEgYmxvY2sgb2YgbWVtb3J5LCBieSBUb20gU3QgRGVuaXMgCisqLworCisjaWZkZWYgUEVMSUNBTgorCisvKioKKyAgUGVsaWNhbiBibG9jayBvZiBtZW1vcnkKKyAgQHBhcmFtIGtleSAgICAgIFRoZSBrZXkgZm9yIHRoZSBNQUMKKyAgQHBhcmFtIGtleWxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIGtleSAob2N0ZXRzKQorICBAcGFyYW0gaW4gICAgICAgVGhlIGlucHV0IHRvIE1BQworICBAcGFyYW0gaW5sZW4gICAgVGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgKG9jdGV0cykKKyAgQHBhcmFtIG91dCAgICAgIFtvdXRdIFRoZSBvdXRwdXQgVEFHIAorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyovCitpbnQgcGVsaWNhbl9tZW1vcnkoY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0KQoreworICAgcGVsaWNhbl9zdGF0ZSAqcGVsOworICAgaW50IGVycjsKKworICAgcGVsID0gWE1BTExPQyhzaXplb2YoKnBlbCkpOworICAgaWYgKHBlbCA9PSBOVUxMKSB7IAorICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgaWYgKChlcnIgPSBwZWxpY2FuX2luaXQocGVsLCBrZXksIGtleWxlbikpICE9IENSWVBUX09LKSB7CisgICAgICBYRlJFRShwZWwpOworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGlmICgoZXJyID0gcGVsaWNhbl9wcm9jZXNzKHBlbCwgaW4gLGlubGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIFhGUkVFKHBlbCk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgZXJyID0gcGVsaWNhbl9kb25lKHBlbCwgb3V0KTsKKyAgIFhGUkVFKHBlbCk7IAorICAgcmV0dXJuIGVycjsKK30KKworCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9wZWxpY2FuL3BlbGljYW5fbWVtb3J5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL3BlbGljYW4vcGVsaWNhbl90ZXN0LmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3BlbGljYW4vcGVsaWNhbl90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NmZjhlYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX3Rlc3QuYwpAQCAtMCwwICsxLDEyMCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKiogCisgICBAZmlsZSBwZWxpY2FuX3Rlc3QuYworICAgUGVsaWNhbiBNQUMsIHRlc3QsIGJ5IFRvbSBTdCBEZW5pcyAKKyovCisKKyNpZmRlZiBQRUxJQ0FOCisKK2ludCBwZWxpY2FuX3Rlc3Qodm9pZCkKK3sKKyNpZm5kZWYgTFRDX1RFU1QKKyAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgS1szMl0sIE1TR1s2NF0sIFRbMTZdOworICAgaW50IGtleWxlbiwgcHRsZW47CisgICB9IHRlc3RzW10gPSB7CisvKiBLPTE2LCBNPTAgKi8KK3sKKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiB9LAorICAgeyAwIH0sCisgICB7IDB4ZWIsIDB4NTgsIDB4MzcsIDB4MTUsIDB4ZjgsIDB4MzQsIDB4ZGUsIDB4ZTUsIAorICAgICAweGE0LCAweGQxLCAweDZlLCAweGU0LCAweGI5LCAweGQ3LCAweDc2LCAweDBlLCB9LAorICAgMTYsIDAKK30sCisKKy8qIEs9MTYsIE09MyAqLworeworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGIH0sCisgICB7IDB4MDAsIDB4MDEsIDB4MDIgfSwKKyAgIHsgMHgxYywgMHg5NywgMHg0MCwgMHg2MCwgMHg2YywgMHg1OCwgMHgxNywgMHgyZCwgCisgICAgIDB4MDMsIDB4OTQsIDB4MTksIDB4NzAsIDB4ODEsIDB4YzQsIDB4MzgsIDB4NTQsIH0sCisgICAxNiwgMworfSwKKworLyogSz0xNiwgTT0xNiAqLworeworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGIH0sCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYgfSwKKyAgIHsgMHgwMywgMHhjYywgMHg0NiwgMHhiOCwgMHhhYywgMHhhNywgMHg5YywgMHgzNiwgCisgICAgIDB4MWUsIDB4OGMsIDB4NmUsIDB4YTYsIDB4N2IsIDB4ODksIDB4MzIsIDB4NDksIH0sCisgICAxNiwgMTYKK30sCisKKy8qIEs9MTYsIE09MzIgKi8KK3sKKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiB9LAorICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBBLCAweDBCLCAweDBDLCAweDBELCAweDBFLCAweDBGLAorICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAweDE4LCAweDE5LCAweDFBLCAweDFCLCAweDFDLCAweDFELCAweDFFLCAweDFGIH0sCisgICB7IDB4ODksIDB4Y2MsIDB4MzYsIDB4NTgsIDB4MWIsIDB4ZGQsIDB4NGQsIDB4YjUsIAorICAgICAweDc4LCAweGJiLCAweGFjLCAweGYwLCAweGZmLCAweDhiLCAweDA4LCAweDE1LCB9LAorICAgMTYsIDMyCit9LAorCisvKiBLPTE2LCBNPTM1ICovCit7CisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsIDB4MEYgfSwKKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwQSwgMHgwQiwgMHgwQywgMHgwRCwgMHgwRSwgMHgwRiwKKyAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKyAgICAgMHgxOCwgMHgxOSwgMHgxQSwgMHgxQiwgMHgxQywgMHgxRCwgMHgxRSwgMHgxRiwKKyAgICAgMHgyMCwgMHgyMSwgMHgyMyB9LAorICAgeyAweDRhLCAweDdkLCAweDQ1LCAweDRkLCAweGNkLCAweGI1LCAweGRhLCAweDhkLCAKKyAgICAgMHg0OCwgMHg3OCwgMHgxNiwgMHg0OCwgMHg1ZCwgMHg0NSwgMHg5NSwgMHg5OSwgfSwKKyAgIDE2LCAzNQorfSwKK307CisgICBpbnQgeCwgZXJyOworICAgdW5zaWduZWQgY2hhciBvdXRbMTZdOworICAgcGVsaWNhbl9zdGF0ZSBwZWw7CisgICAKKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSkpOyB4KyspIHsgCisgICAgICAgaWYgKChlcnIgPSBwZWxpY2FuX2luaXQoJnBlbCwgdGVzdHNbeF0uSywgdGVzdHNbeF0ua2V5bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgIH0KKyAgICAgICBpZiAoKGVyciA9IHBlbGljYW5fcHJvY2VzcygmcGVsLCB0ZXN0c1t4XS5NU0csIHRlc3RzW3hdLnB0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgIH0KKyAgICAgICBpZiAoKGVyciA9IHBlbGljYW5fZG9uZSgmcGVsLCBvdXQpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgfQorCisgICAgICAgaWYgKFhNRU1DTVAob3V0LCB0ZXN0c1t4XS5ULCAxNikpIHsKKyNpZiAwCisgICAgICAgICAgIGludCB5OworICAgICAgICAgICBwcmludGYoIlxuRmFpbGVkIHRlc3QgJWRcbiIsIHgpOworICAgICAgICAgICBwcmludGYoInsgIik7IGZvciAoeSA9IDA7IHkgPCAxNjsgKSB7IHByaW50ZigiMHglMDJ4LCAiLCBvdXRbeV0pOyBpZiAoISgrK3kgJiA3KSkgcHJpbnRmKCJcbiIpOyB9IHByaW50ZigiIH1cbiIpOworI2VuZGlmCisgICAgICAgICAgIHJldHVybiBDUllQVF9GQUlMX1RFU1RWRUNUT1I7CisgICAgICAgfQorICAgfQorICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvcGVsaWNhbi9wZWxpY2FuX3Rlc3QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAwMDoxODoyMyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY19kb25lLmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY19kb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1Zjk0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX2RvbmUuYwpAQCAtMCwwICsxLDc0IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKiAKKyAgQGZpbGUgcG1hY19kb25lLmMKKyAgUE1BQyBpbXBsZW1lbnRhdGlvbiwgdGVybWluYXRlIGEgc2Vzc2lvbiwgYnkgVG9tIFN0IERlbmlzIAorKi8KKworI2lmZGVmIExUQ19QTUFDCisKK2ludCBwbWFjX2RvbmUocG1hY19zdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgaW50IGVyciwgeDsKKworICAgTFRDX0FSR0NISyhzdGF0ZSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgIT0gTlVMTCk7CisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChzdGF0ZS0+Y2lwaGVyX2lkeCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBpZiAoKHN0YXRlLT5idWZsZW4gPiAoaW50KXNpemVvZihzdGF0ZS0+YmxvY2spKSB8fCAoc3RhdGUtPmJ1ZmxlbiA8IDApIHx8CisgICAgICAgKHN0YXRlLT5ibG9ja19sZW4gPiAoaW50KXNpemVvZihzdGF0ZS0+YmxvY2spKSB8fCAoc3RhdGUtPmJ1ZmxlbiA+IHN0YXRlLT5ibG9ja19sZW4pKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKworICAgLyogaGFuZGxlIHBhZGRpbmcuICBJZiBtdWx0aXBsZSB4b3IgaW4gTC94ICovCisKKyAgIGlmIChzdGF0ZS0+YnVmbGVuID09IHN0YXRlLT5ibG9ja19sZW4pIHsKKyAgICAgIC8qIHhvciBMciBhZ2FpbnN0IHRoZSBjaGVja3N1bSAqLworICAgICAgZm9yICh4ID0gMDsgeCA8IHN0YXRlLT5ibG9ja19sZW47IHgrKykgeworICAgICAgICAgIHN0YXRlLT5jaGVja3N1bVt4XSBePSBzdGF0ZS0+YmxvY2tbeF0gXiBzdGF0ZS0+THJbeF07CisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgLyogb3RoZXJ3aXNlIHhvciBtZXNzYWdlIGJ5dGVzIHRoZW4gdGhlIDB4ODAgYnl0ZSAqLworICAgICAgZm9yICh4ID0gMDsgeCA8IHN0YXRlLT5idWZsZW47IHgrKykgeworICAgICAgICAgIHN0YXRlLT5jaGVja3N1bVt4XSBePSBzdGF0ZS0+YmxvY2tbeF07CisgICAgICB9CisgICAgICBzdGF0ZS0+Y2hlY2tzdW1beF0gXj0gMHg4MDsKKyAgIH0KKworICAgLyogZW5jcnlwdCBpdCAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltzdGF0ZS0+Y2lwaGVyX2lkeF0uZWNiX2VuY3J5cHQoc3RhdGUtPmNoZWNrc3VtLCBzdGF0ZS0+Y2hlY2tzdW0sICZzdGF0ZS0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBjaXBoZXJfZGVzY3JpcHRvcltzdGF0ZS0+Y2lwaGVyX2lkeF0uZG9uZSgmc3RhdGUtPmtleSk7CisKKyAgIC8qIHN0b3JlIGl0ICovCisgICBmb3IgKHggPSAwOyB4IDwgc3RhdGUtPmJsb2NrX2xlbiAmJiB4IDwgKGludCkqb3V0bGVuOyB4KyspIHsKKyAgICAgICBvdXRbeF0gPSBzdGF0ZS0+Y2hlY2tzdW1beF07CisgICB9CisgICAqb3V0bGVuID0geDsKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShzdGF0ZSwgc2l6ZW9mKCpzdGF0ZSkpOworI2VuZGlmCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX2RvbmUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAzIDAwOjM5OjQ5ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX2ZpbGUuYyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX2ZpbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODgwOWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfZmlsZS5jCkBAIC0wLDAgKzEsODQgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqIAorICAgQGZpbGUgcG1hY19maWxlLmMKKyAgIFBNQUMgaW1wbGVtZW50YXRpb24sIHByb2Nlc3MgYSBmaWxlLCBieSBUb20gU3QgRGVuaXMgCisqLworCisjaWZkZWYgTFRDX1BNQUMKKworLyoqCisgICBQTUFDIGEgZmlsZSAKKyAgIEBwYXJhbSBjaXBoZXIgICAgICAgVGhlIGluZGV4IG9mIHRoZSBjaXBoZXIgZGVzaXJlZAorICAgQHBhcmFtIGtleSAgICAgICAgICBUaGUgc2VjcmV0IGtleQorICAgQHBhcmFtIGtleWxlbiAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQga2V5IChvY3RldHMpCisgICBAcGFyYW0gZmlsZW5hbWUgICAgIFRoZSBuYW1lIG9mIHRoZSBmaWxlIHRvIHNlbmQgdGhyb3VnaCBQTUFDCisgICBAcGFyYW0gb3V0ICAgICAgICAgIFtvdXRdIERlc3RpbmF0aW9uIGZvciB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgICBAcGFyYW0gb3V0bGVuICAgICAgIFtpbi9vdXRdIE1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBmaWxlIHN1cHBvcnQgaGFzIGJlZW4gZGlzYWJsZWQKKyovCitpbnQgcG1hY19maWxlKGludCBjaXBoZXIsIAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgCisgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworI2lmZGVmIExUQ19OT19GSUxFCisgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIGludCBlcnIsIHg7CisgICBwbWFjX3N0YXRlIHBtYWM7CisgICBGSUxFICppbjsKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzUxMl07CisKKworICAgTFRDX0FSR0NISyhrZXkgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZmlsZW5hbWUgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gICAhPSBOVUxMKTsKKworICAgaW4gPSBmb3BlbihmaWxlbmFtZSwgInJiIik7CisgICBpZiAoaW4gPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX0ZJTEVfTk9URk9VTkQ7CisgICB9CisKKyAgIGlmICgoZXJyID0gcG1hY19pbml0KCZwbWFjLCBjaXBoZXIsIGtleSwga2V5bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGZjbG9zZShpbik7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBkbyB7CisgICAgICB4ID0gZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgaW4pOworICAgICAgaWYgKChlcnIgPSBwbWFjX3Byb2Nlc3MoJnBtYWMsIGJ1ZiwgeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICBmY2xvc2UoaW4pOworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0gd2hpbGUgKHggPT0gc2l6ZW9mKGJ1ZikpOworICAgZmNsb3NlKGluKTsKKworICAgaWYgKChlcnIgPSBwbWFjX2RvbmUoJnBtYWMsIG91dCwgb3V0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0oYnVmLCBzaXplb2YoYnVmKSk7CisjZW5kaWYKKworICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY19maWxlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY19pbml0LmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY19pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0MjE2MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX2luaXQuYwpAQCAtMCwwICsxLDE0NyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKiogCisgICBAZmlsZSBwbWFjX2luaXQuYworICAgUE1BQyBpbXBsZW1lbnRhdGlvbiwgaW5pdGlhbGl6ZSBzdGF0ZSwgYnkgVG9tIFN0IERlbmlzIAorKi8KKworI2lmZGVmIExUQ19QTUFDCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgIGludCAgICAgICAgICAgbGVuOworICAgIHVuc2lnbmVkIGNoYXIgcG9seV9kaXZbTUFYQkxPQ0tTSVpFXSwgCisgICAgICAgICAgICAgICAgICBwb2x5X211bFtNQVhCTE9DS1NJWkVdOworfSBwb2x5c1tdID0geworeworICAgIDgsCisgICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDBEIH0sCisgICAgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFCIH0KK30sIHsKKyAgICAxNiwgCisgICAgeyAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MyB9LAorICAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKyAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODcgfQorfQorfTsKKworLyoqCisgICBJbml0aWFsaXplIGEgUE1BQyBzdGF0ZQorICAgQHBhcmFtIHBtYWMgICAgICBUaGUgUE1BQyBzdGF0ZSB0byBpbml0aWFsaXplCisgICBAcGFyYW0gY2lwaGVyICAgIFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBjaXBoZXIKKyAgIEBwYXJhbSBrZXkgICAgICAgVGhlIHNlY3JldCBrZXkgCisgICBAcGFyYW0ga2V5bGVuICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBwbWFjX2luaXQocG1hY19zdGF0ZSAqcG1hYywgaW50IGNpcGhlciwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbikKK3sKKyAgIGludCBwb2x5LCB4LCB5LCBtLCBlcnI7CisgICB1bnNpZ25lZCBjaGFyICpMOworCisgICBMVENfQVJHQ0hLKHBtYWMgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICAhPSBOVUxMKTsKKworICAgLyogdmFsaWQgY2lwaGVyPyAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIGRldGVybWluZSB3aGljaCBwb2x5cyB0byB1c2UgKi8KKyAgIHBtYWMtPmJsb2NrX2xlbiA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoOworICAgZm9yIChwb2x5ID0gMDsgcG9seSA8IChpbnQpKHNpemVvZihwb2x5cykvc2l6ZW9mKHBvbHlzWzBdKSk7IHBvbHkrKykgeworICAgICAgIGlmIChwb2x5c1twb2x5XS5sZW4gPT0gcG1hYy0+YmxvY2tfbGVuKSB7IAorICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKyAgIH0KKyAgIGlmIChwb2x5c1twb2x5XS5sZW4gIT0gcG1hYy0+YmxvY2tfbGVuKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyNpZmRlZiBMVENfRkFTVAorICAgaWYgKHBtYWMtPmJsb2NrX2xlbiAlIHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorI2VuZGlmCisKKworICAgLyogc2NoZWR1bGUgdGhlIGtleSAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLnNldHVwKGtleSwga2V5bGVuLCAwLCAmcG1hYy0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgCisgICAvKiBhbGxvY2F0ZSBMICovCisgICBMID0gWE1BTExPQyhwbWFjLT5ibG9ja19sZW4pOworICAgaWYgKEwgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogZmluZCBMID0gRVswXSAqLworICAgemVyb21lbShMLCBwbWFjLT5ibG9ja19sZW4pOworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KEwsIEwsICZwbWFjLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBlcnJvcjsKKyAgIH0KKworICAgLyogZmluZCBMc1tpXSA9IEwgPDwgaSBmb3IgaSA9PSAwLi4zMSAqLworICAgWE1FTUNQWShwbWFjLT5Mc1swXSwgTCwgcG1hYy0+YmxvY2tfbGVuKTsKKyAgIGZvciAoeCA9IDE7IHggPCAzMjsgeCsrKSB7CisgICAgICAgbSA9IHBtYWMtPkxzW3gtMV1bMF0gPj4gNzsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgcG1hYy0+YmxvY2tfbGVuLTE7IHkrKykgeworICAgICAgICAgICBwbWFjLT5Mc1t4XVt5XSA9ICgocG1hYy0+THNbeC0xXVt5XSA8PCAxKSB8IChwbWFjLT5Mc1t4LTFdW3krMV0gPj4gNykpICYgMjU1OworICAgICAgIH0KKyAgICAgICBwbWFjLT5Mc1t4XVtwbWFjLT5ibG9ja19sZW4tMV0gPSAocG1hYy0+THNbeC0xXVtwbWFjLT5ibG9ja19sZW4tMV0gPDwgMSkgJiAyNTU7CisKKyAgICAgICBpZiAobSA9PSAxKSB7CisgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IHBtYWMtPmJsb2NrX2xlbjsgeSsrKSB7CisgICAgICAgICAgICAgIHBtYWMtPkxzW3hdW3ldIF49IHBvbHlzW3BvbHldLnBvbHlfbXVsW3ldOworICAgICAgICAgIH0KKyAgICAgICB9CisgICAgfQorCisgICAgLyogZmluZCBMciA9IEwgLyB4ICovCisgICAgbSA9IExbcG1hYy0+YmxvY2tfbGVuLTFdICYgMTsKKworICAgIC8qIHNoaWZ0IHJpZ2h0ICovCisgICAgZm9yICh4ID0gcG1hYy0+YmxvY2tfbGVuIC0gMTsgeCA+IDA7IHgtLSkgeworICAgICAgICBwbWFjLT5Mclt4XSA9ICgoTFt4XSA+PiAxKSB8IChMW3gtMV0gPDwgNykpICYgMjU1OworICAgIH0KKyAgICBwbWFjLT5MclswXSA9IExbMF0gPj4gMTsKKworICAgIGlmIChtID09IDEpIHsKKyAgICAgICBmb3IgKHggPSAwOyB4IDwgcG1hYy0+YmxvY2tfbGVuOyB4KyspIHsKKyAgICAgICAgICAgcG1hYy0+THJbeF0gXj0gcG9seXNbcG9seV0ucG9seV9kaXZbeF07CisgICAgICAgfQorICAgIH0KKworICAgIC8qIHplcm8gYnVmZmVyLCBjb3VudGVycywgZXRjLi4uICovCisgICAgcG1hYy0+YmxvY2tfaW5kZXggPSAxOworICAgIHBtYWMtPmNpcGhlcl9pZHggID0gY2lwaGVyOworICAgIHBtYWMtPmJ1ZmxlbiAgICAgID0gMDsKKyAgICB6ZXJvbWVtKHBtYWMtPmJsb2NrLCAgICBzaXplb2YocG1hYy0+YmxvY2spKTsKKyAgICB6ZXJvbWVtKHBtYWMtPkxpLCAgICAgICBzaXplb2YocG1hYy0+TGkpKTsKKyAgICB6ZXJvbWVtKHBtYWMtPmNoZWNrc3VtLCBzaXplb2YocG1hYy0+Y2hlY2tzdW0pKTsKKyAgICBlcnIgPSBDUllQVF9PSzsKK2Vycm9yOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIHplcm9tZW0oTCwgcG1hYy0+YmxvY2tfbGVuKTsKKyNlbmRpZgorCisgICAgWEZSRUUoTCk7CisKKyAgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfaW5pdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5LmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY19tZW1vcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTE1ZTYzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5LmMKQEAgLTAsMCArMSw3NCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKiogCisgICBAZmlsZSBwbWFjX21lbW9yeS5jCisgICBQTUFDIGltcGxlbWVudGF0aW9uLCBwcm9jZXNzIGEgYmxvY2sgb2YgbWVtb3J5LCBieSBUb20gU3QgRGVuaXMgCisqLworCisjaWZkZWYgTFRDX1BNQUMKKworLyoqCisgICBQTUFDIGEgYmxvY2sgb2YgbWVtb3J5CisgICBAcGFyYW0gY2lwaGVyICAgVGhlIGluZGV4IG9mIHRoZSBjaXBoZXIgZGVzaXJlZAorICAgQHBhcmFtIGtleSAgICAgIFRoZSBzZWNyZXQga2V5CisgICBAcGFyYW0ga2V5bGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgQHBhcmFtIGluICAgICAgIFRoZSBkYXRhIHlvdSB3aXNoIHRvIHNlbmQgdGhyb3VnaCBQTUFDCisgICBAcGFyYW0gaW5sZW4gICAgVGhlIGxlbmd0aCBvZiBkYXRhIHlvdSB3aXNoIHRvIHNlbmQgdGhyb3VnaCBQTUFDIChvY3RldHMpCisgICBAcGFyYW0gb3V0ICAgICAgW291dF0gRGVzdGluYXRpb24gZm9yIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAgIEBwYXJhbSBvdXRsZW4gICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBwbWFjX21lbW9yeShpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgaW50IGVycjsKKyAgIHBtYWNfc3RhdGUgKnBtYWM7CisKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhpbiAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgIC8qIGFsbG9jYXRlIHJhbSBmb3IgcG1hYyBzdGF0ZSAqLworICAgcG1hYyA9IFhNQUxMT0Moc2l6ZW9mKHBtYWNfc3RhdGUpKTsKKyAgIGlmIChwbWFjID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICAKKyAgIGlmICgoZXJyID0gcG1hY19pbml0KHBtYWMsIGNpcGhlciwga2V5LCBrZXlsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorICAgaWYgKChlcnIgPSBwbWFjX3Byb2Nlc3MocG1hYywgaW4sIGlubGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKyAgIGlmICgoZXJyID0gcG1hY19kb25lKHBtYWMsIG91dCwgb3V0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgZXJyID0gQ1JZUFRfT0s7CitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShwbWFjLCBzaXplb2YocG1hY19zdGF0ZSkpOworI2VuZGlmCisKKyAgIFhGUkVFKHBtYWMpOworICAgcmV0dXJuIGVycjsgICAKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX21lbW9yeS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5X211bHRpLmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY19tZW1vcnlfbXVsdGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGUyMzk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfbWVtb3J5X211bHRpLmMKQEAgLTAsMCArMSw4OSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisvKiogCisgICBAZmlsZSBwbWFjX21lbW9yeV9tdWx0aS5jCisgICBQTUFDIGltcGxlbWVudGF0aW9uLCBwcm9jZXNzIG11bHRpcGxlIGJsb2NrcyBvZiBtZW1vcnksIGJ5IFRvbSBTdCBEZW5pcyAKKyovCisKKyNpZmRlZiBMVENfUE1BQworCisvKioKKyAgIFBNQUMgbXVsdGlwbGUgYmxvY2tzIG9mIG1lbW9yeQorICAgQHBhcmFtIGNpcGhlciAgIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGRlc2lyZWQKKyAgIEBwYXJhbSBrZXkgICAgICBUaGUgc2VjcmV0IGtleQorICAgQHBhcmFtIGtleWxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEBwYXJhbSBvdXQgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBmb3IgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHBhcmFtIGluICAgICAgIFRoZSBkYXRhIHlvdSB3aXNoIHRvIHNlbmQgdGhyb3VnaCBQTUFDCisgICBAcGFyYW0gaW5sZW4gICAgVGhlIGxlbmd0aCBvZiBkYXRhIHlvdSB3aXNoIHRvIHNlbmQgdGhyb3VnaCBQTUFDIChvY3RldHMpCisgICBAcGFyYW0gLi4uICAgICAgdHVwbGVzIG9mIChkYXRhLGxlbikgcGFpcnMgdG8gUE1BQywgdGVybWluYXRlZCB3aXRoIGEgKE5VTEwseCkgKHg9ZG9uJ3QgY2FyZSkKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBwbWFjX21lbW9yeV9tdWx0aShpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcgIGtleWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgIGlubGVuLCAuLi4pCit7CisgICBpbnQgICAgICAgICAgICAgICAgICBlcnI7CisgICBwbWFjX3N0YXRlICAgICAgICAgICpwbWFjOworICAgdmFfbGlzdCAgICAgICAgICAgICAgYXJnczsKKyAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1cnB0cjsKKyAgIHVuc2lnbmVkIGxvbmcgICAgICAgIGN1cmxlbjsKKworICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgIC8qIGFsbG9jYXRlIHJhbSBmb3IgcG1hYyBzdGF0ZSAqLworICAgcG1hYyA9IFhNQUxMT0Moc2l6ZW9mKHBtYWNfc3RhdGUpKTsKKyAgIGlmIChwbWFjID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICAKKyAgIGlmICgoZXJyID0gcG1hY19pbml0KHBtYWMsIGNpcGhlciwga2V5LCBrZXlsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorICAgdmFfc3RhcnQoYXJncywgaW5sZW4pOworICAgY3VycHRyID0gaW47IAorICAgY3VybGVuID0gaW5sZW47CisgICBmb3IgKDs7KSB7CisgICAgICAvKiBwcm9jZXNzIGJ1ZiAqLworICAgICAgaWYgKChlcnIgPSBwbWFjX3Byb2Nlc3MocG1hYywgY3VycHRyLCBjdXJsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgICAgLyogc3RlcCB0byBuZXh0ICovCisgICAgICBjdXJwdHIgPSB2YV9hcmcoYXJncywgY29uc3QgdW5zaWduZWQgY2hhciopOworICAgICAgaWYgKGN1cnB0ciA9PSBOVUxMKSB7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGN1cmxlbiA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKKyAgIH0KKyAgIGlmICgoZXJyID0gcG1hY19kb25lKHBtYWMsIG91dCwgb3V0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKHBtYWMsIHNpemVvZihwbWFjX3N0YXRlKSk7CisjZW5kaWYKKyAgIFhGUkVFKHBtYWMpOworICAgdmFfZW5kKGFyZ3MpOworICAgcmV0dXJuIGVycjsgICAKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX21lbW9yeV9tdWx0aS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfbnR6LmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY19udHouYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzIyNTYzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfbnR6LmMKQEAgLTAsMCArMSwzOSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKiogCisgICBAZmlsZSBwbWFjX250ei5jCisgICBQTUFDIGltcGxlbWVudGF0aW9uLCBpbnRlcm5hbCBmdW5jdGlvbiwgYnkgVG9tIFN0IERlbmlzIAorKi8KKworI2lmZGVmIExUQ19QTUFDCisKKy8qKgorICBJbnRlcm5hbCBQTUFDIGZ1bmN0aW9uCisqLworaW50IHBtYWNfbnR6KHVuc2lnbmVkIGxvbmcgeCkKK3sKKyAgIGludCBjOworICAgeCAmPSAweEZGRkZGRkZGVUw7CisgICBjID0gMDsKKyAgIHdoaWxlICgoeCAmIDEpID09IDApIHsKKyAgICAgICsrYzsKKyAgICAgIHggPj49IDE7CisgICB9CisgICByZXR1cm4gYzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX250ei5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfcHJvY2Vzcy5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfcHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOTE4MTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY19wcm9jZXNzLmMKQEAgLTAsMCArMSwxMDAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqIAorICAgQGZpbGUgcG1hY19wcm9jZXNzLmMKKyAgIFBNQUMgaW1wbGVtZW50YXRpb24sIHByb2Nlc3MgZGF0YSwgYnkgVG9tIFN0IERlbmlzIAorKi8KKworCisjaWZkZWYgTFRDX1BNQUMKKworLyoqCisgIFByb2Nlc3MgZGF0YSBpbiBhIFBNQUMgc3RyZWFtCisgIEBwYXJhbSBwbWFjICAgICBUaGUgUE1BQyBzdGF0ZQorICBAcGFyYW0gaW4gICAgICAgVGhlIGRhdGEgdG8gc2VuZCB0aHJvdWdoIFBNQUMKKyAgQHBhcmFtIGlubGVuICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gc2VuZCB0aHJvdWdoIFBNQUMKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHBtYWNfcHJvY2VzcyhwbWFjX3N0YXRlICpwbWFjLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbikKK3sKKyAgIGludCBlcnIsIG47CisgICB1bnNpZ25lZCBsb25nIHg7CisgICB1bnNpZ25lZCBjaGFyIFpbTUFYQkxPQ0tTSVpFXTsKKworICAgTFRDX0FSR0NISyhwbWFjICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhpbiAgICE9IE5VTEwpOworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQocG1hYy0+Y2lwaGVyX2lkeCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBpZiAoKHBtYWMtPmJ1ZmxlbiA+IChpbnQpc2l6ZW9mKHBtYWMtPmJsb2NrKSkgfHwgKHBtYWMtPmJ1ZmxlbiA8IDApIHx8CisgICAgICAgKHBtYWMtPmJsb2NrX2xlbiA+IChpbnQpc2l6ZW9mKHBtYWMtPmJsb2NrKSkgfHwgKHBtYWMtPmJ1ZmxlbiA+IHBtYWMtPmJsb2NrX2xlbikpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworI2lmZGVmIExUQ19GQVNUCisgICBpZiAocG1hYy0+YnVmbGVuID09IDAgJiYgaW5sZW4gPiAxNikgeworICAgICAgdW5zaWduZWQgbG9uZyB5OworICAgICAgZm9yICh4ID0gMDsgeCA8IChpbmxlbiAtIDE2KTsgeCArPSAxNikgeworICAgICAgICAgIHBtYWNfc2hpZnRfeG9yKHBtYWMpOworICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCZaW3ldKSkgPSAqKChMVENfRkFTVF9UWVBFKikoJmluW3ldKSkgXiAqKChMVENfRkFTVF9UWVBFKikoJnBtYWMtPkxpW3ldKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbcG1hYy0+Y2lwaGVyX2lkeF0uZWNiX2VuY3J5cHQoWiwgWiwgJnBtYWMtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CisgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5ICs9IHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgICAgICAgICAqKChMVENfRkFTVF9UWVBFKikoJnBtYWMtPmNoZWNrc3VtW3ldKSkgXj0gKigoTFRDX0ZBU1RfVFlQRSopKCZaW3ldKSk7CisgICAgICAgICAgfQorICAgICAgICAgIGluICs9IDE2OworICAgICAgfQorICAgICAgaW5sZW4gLT0geDsKKyAgIH0KKyNlbmRpZgorCisgICB3aGlsZSAoaW5sZW4gIT0gMCkgeyAKKyAgICAgICAvKiBvayBpZiB0aGUgYmxvY2sgaXMgZnVsbCB3ZSB4b3IgaW4gcHJldiwgZW5jcnlwdCBhbmQgcmVwbGFjZSBwcmV2ICovCisgICAgICAgaWYgKHBtYWMtPmJ1ZmxlbiA9PSBwbWFjLT5ibG9ja19sZW4pIHsKKyAgICAgICAgICBwbWFjX3NoaWZ0X3hvcihwbWFjKTsKKyAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgKHVuc2lnbmVkIGxvbmcpcG1hYy0+YmxvY2tfbGVuOyB4KyspIHsKKyAgICAgICAgICAgICAgIFpbeF0gPSBwbWFjLT5MaVt4XSBeIHBtYWMtPmJsb2NrW3hdOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW3BtYWMtPmNpcGhlcl9pZHhdLmVjYl9lbmNyeXB0KFosIFosICZwbWFjLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgIH0KKyAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgKHVuc2lnbmVkIGxvbmcpcG1hYy0+YmxvY2tfbGVuOyB4KyspIHsKKyAgICAgICAgICAgICAgcG1hYy0+Y2hlY2tzdW1beF0gXj0gWlt4XTsKKyAgICAgICAgICB9CisgICAgICAgICAgcG1hYy0+YnVmbGVuID0gMDsKKyAgICAgICB9CisKKyAgICAgICAvKiBhZGQgYnl0ZXMgKi8KKyAgICAgICBuID0gTUlOKGlubGVuLCAodW5zaWduZWQgbG9uZykocG1hYy0+YmxvY2tfbGVuIC0gcG1hYy0+YnVmbGVuKSk7CisgICAgICAgWE1FTUNQWShwbWFjLT5ibG9jayArIHBtYWMtPmJ1ZmxlbiwgaW4sIG4pOworICAgICAgIHBtYWMtPmJ1ZmxlbiAgKz0gbjsKKyAgICAgICBpbmxlbiAgICAgICAgIC09IG47CisgICAgICAgaW4gICAgICAgICAgICArPSBuOworICAgfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKFosIHNpemVvZihaKSk7CisjZW5kaWYKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfcHJvY2Vzcy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfc2hpZnRfeG9yLmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY19zaGlmdF94b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTRhNDIzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfc2hpZnRfeG9yLmMKQEAgLTAsMCArMSw0NCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKiogCisgICBAZmlsZSBwbWFjX3NoaWZ0X3hvci5jCisgICBQTUFDIGltcGxlbWVudGF0aW9uLCBpbnRlcm5hbCBmdW5jdGlvbiwgYnkgVG9tIFN0IERlbmlzIAorKi8KKworI2lmZGVmIExUQ19QTUFDCisKKy8qKgorICBJbnRlcm5hbCBmdW5jdGlvbi4gIFBlcmZvcm1zIHRoZSBzdGF0ZSB1cGRhdGUgKGFkZGluZyBjb3JyZWN0IG11bHRpcGxlKQorICBAcGFyYW0gcG1hYyAgIFRoZSBQTUFDIHN0YXRlLgorKi8KK3ZvaWQgcG1hY19zaGlmdF94b3IocG1hY19zdGF0ZSAqcG1hYykKK3sKKyAgIGludCB4LCB5OworICAgeSA9IHBtYWNfbnR6KHBtYWMtPmJsb2NrX2luZGV4KyspOworI2lmZGVmIExUQ19GQVNUCisgICBmb3IgKHggPSAwOyB4IDwgcG1hYy0+YmxvY2tfbGVuOyB4ICs9IHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgodW5zaWduZWQgY2hhciAqKXBtYWMtPkxpICsgeCkpIF49CisgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopcG1hYy0+THNbeV0gKyB4KSk7CisgICB9CisjZWxzZQorICAgZm9yICh4ID0gMDsgeCA8IHBtYWMtPmJsb2NrX2xlbjsgeCsrKSB7CisgICAgICAgcG1hYy0+TGlbeF0gXj0gcG1hYy0+THNbeV1beF07CisgICB9CisjZW5kaWYKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMvcG1hYy9wbWFjX3NoaWZ0X3hvci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDA6Mzk6NDkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfdGVzdC5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy9wbWFjL3BtYWNfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MzVlMTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY190ZXN0LmMKQEAgLTAsMCArMSwxNjUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqIAorICAgQGZpbGUgcG1hY190ZXN0LmMKKyAgIFBNQUMgaW1wbGVtZW50YXRpb24sIHNlbGYtdGVzdCwgYnkgVG9tIFN0IERlbmlzIAorKi8KKworCisjaWZkZWYgTFRDX1BNQUMKKworLyoqIAorICAgVGVzdCB0aGUgT01BQyBpbXBsZW1lbnRhdGlvbgorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgdGVzdGluZyBoYXMgYmVlbiBkaXNhYmxlZAorKi8KK2ludCBwbWFjX3Rlc3Qodm9pZCkKK3sKKyNpZiAhZGVmaW5lZChMVENfVEVTVCkKKyAgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsgCisgICAgICAgIGludCBtc2dsZW47CisgICAgICAgIHVuc2lnbmVkIGNoYXIga2V5WzE2XSwgbXNnWzM0XSwgdGFnWzE2XTsKKyAgICB9IHRlc3RzW10gPSB7CisKKyAgIC8qIFBNQUMtQUVTLTEyOC0wQiAqLworeworICAgMCwKKyAgIC8qIGtleSAqLworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisgICAvKiBtc2cgKi8KKyAgIHsgMHgwMCB9LAorICAgLyogdGFnICovCisgICB7IDB4NDMsIDB4OTksIDB4NTcsIDB4MmMsIDB4ZDYsIDB4ZWEsIDB4NTMsIDB4NDEsCisgICAgIDB4YjgsIDB4ZDMsIDB4NTgsIDB4NzYsIDB4YTcsIDB4MDksIDB4OGEsIDB4ZjcgfQorfSwKKworICAgLyogUE1BQy1BRVMtMTI4LTNCICovCit7CisgICAzLAorICAgLyoga2V5ICovCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKyAgIC8qIG1zZyAqLworICAgeyAweDAwLCAweDAxLCAweDAyIH0sCisgICAvKiB0YWcgKi8KKyAgIHsgMHgyNSwgMHg2YiwgMHhhNSwgMHgxOSwgMHgzYywgMHgxYiwgMHg5OSwgMHgxYiwKKyAgICAgMHg0ZCwgMHhmMCwgMHhjNSwgMHgxZiwgMHgzOCwgMHg4YSwgMHg5ZSwgMHgyNyB9Cit9LAorCisgICAvKiBQTUFDLUFFUy0xMjgtMTZCICovCit7CisgICAxNiwKKyAgIC8qIGtleSAqLworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisgICAvKiBtc2cgKi8KKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorICAgLyogdGFnICovCisgICB7IDB4ZWIsIDB4YmQsIDB4ODIsIDB4MmYsIDB4YTQsIDB4NTgsIDB4ZGEsIDB4ZjYsCisgICAgIDB4ZGYsIDB4ZGEsIDB4ZDcsIDB4YzIsIDB4N2QsIDB4YTcsIDB4NjMsIDB4MzggfQorfSwKKworICAgLyogUE1BQy1BRVMtMTI4LTIwQiAqLworeworICAgMjAsCisgICAvKiBrZXkgKi8KKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorICAgLyogbXNnICovCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsCisgICAgIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMgfSwKKyAgIC8qIHRhZyAqLworICAgeyAweDA0LCAweDEyLCAweGNhLCAweDE1LCAweDBiLCAweGJmLCAweDc5LCAweDA1LAorICAgICAweDhkLCAweDhjLCAweDc1LCAweGE1LCAweDhjLCAweDk5LCAweDNmLCAweDU1IH0KK30sCisKKyAgIC8qIFBNQUMtQUVTLTEyOC0zMkIgKi8KK3sKKyAgIDMyLAorICAgLyoga2V5ICovCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYgfSwKKyAgIC8qIG1zZyAqLworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAorICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmIH0sCisgICAvKiB0YWcgKi8KKyAgIHsgMHhlOSwgMHg3YSwgMHhjMCwgMHg0ZSwgMHg5ZSwgMHg1ZSwgMHgzMywgMHg5OSwKKyAgICAgMHhjZSwgMHg1MywgMHg1NSwgMHhjZCwgMHg3NCwgMHgwNywgMHhiYywgMHg3NSB9Cit9LAorCisgICAvKiBQTUFDLUFFUy0xMjgtMzRCICovCit7CisgICAzNCwKKyAgIC8qIGtleSAqLworICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisgICAvKiBtc2cgKi8KKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKyAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwKKyAgICAgMHgxMCwgMHgxMSwgMHgxMiwgMHgxMywgMHgxNCwgMHgxNSwgMHgxNiwgMHgxNywKKyAgICAgMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKKyAgICAgMHgyMCwgMHgyMSB9LAorICAgLyogdGFnICovCisgICB7IDB4NWMsIDB4YmEsIDB4N2QsIDB4NWUsIDB4YjIsIDB4NGYsIDB4N2MsIDB4ODYsCisgICAgIDB4Y2MsIDB4YzUsIDB4NDYsIDB4MDQsIDB4ZTUsIDB4M2QsIDB4NTUsIDB4MTIgfQorfQorCit9OworICAgaW50IGVyciwgeCwgaWR4OworICAgdW5zaWduZWQgbG9uZyBsZW47CisgICB1bnNpZ25lZCBjaGFyIG91dHRhZ1tNQVhCTE9DS1NJWkVdOworCisgICAgLyogQUVTIGNhbiBiZSB1bmRlciByaWpuZGFlbCBvciBhZXMuLi4gdHJ5IHRvIGZpbmQgaXQgKi8gCisgICAgaWYgKChpZHggPSBmaW5kX2NpcGhlcigiYWVzIikpID09IC0xKSB7CisgICAgICAgaWYgKChpZHggPSBmaW5kX2NpcGhlcigicmlqbmRhZWwiKSkgPT0gLTEpIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfTk9QOworICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKS9zaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAgIGxlbiA9IHNpemVvZihvdXR0YWcpOworICAgICAgICBpZiAoKGVyciA9IHBtYWNfbWVtb3J5KGlkeCwgdGVzdHNbeF0ua2V5LCAxNiwgdGVzdHNbeF0ubXNnLCB0ZXN0c1t4XS5tc2dsZW4sIG91dHRhZywgJmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChYTUVNQ01QKG91dHRhZywgdGVzdHNbeF0udGFnLCBsZW4pKSB7CisjaWYgMAorICAgICAgICAgICB1bnNpZ25lZCBsb25nIHk7CisgICAgICAgICAgIHByaW50ZigiXG5UQUc6XG4iKTsKKyAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IGxlbjsgKSB7CisgICAgICAgICAgICAgICBwcmludGYoIjB4JTAyeCIsIG91dHRhZ1t5XSk7CisgICAgICAgICAgICAgICBpZiAoeSA8IGxlbi0xKSBwcmludGYoIiwgIik7CisgICAgICAgICAgICAgICBpZiAoISgrK3kgJSA4KSkgcHJpbnRmKCJcbiIpOworICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICAgfQorICAgICB9CisgICAgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZiAvKiBMVENfVEVTVCAqLworfQorCisjZW5kaWYgLyogUE1BQ19NT0RFICovCisKKworIAorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL3BtYWMvcG1hY190ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMDozOTo0OSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19kb25lLmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19kb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg3YzI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMveGNiYy94Y2JjX2RvbmUuYwpAQCAtMCwwICsxLDc3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSB4Y2JjX2RvbmUuYworICBYQ0JDIFN1cHBvcnQsIHRlcm1pbmF0ZSB0aGUgc3RhdGUKKyovCisKKyNpZmRlZiBMVENfWENCQworCisvKiogVGVybWluYXRlIHRoZSBYQ0JDLU1BQyBzdGF0ZQorICBAcGFyYW0geGNiYyAgICAgWENCQyBzdGF0ZSB0byB0ZXJtaW5hdGUKKyAgQHBhcmFtIG91dCAgICAgIFtvdXRdIERlc3RpbmF0aW9uIGZvciB0aGUgTUFDIHRhZworICBAcGFyYW0gb3V0bGVuICAgW2luL291dF0gRGVzdGluYXRpb24gc2l6ZSBhbmQgZmluYWwgdGFnIHNpemUKKyAgUmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyovCitpbnQgeGNiY19kb25lKHhjYmNfc3RhdGUgKnhjYmMsIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgaW50IGVyciwgeDsKKyAgIExUQ19BUkdDSEsoeGNiYyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAhPSBOVUxMKTsKKworICAgLyogY2hlY2sgc3RydWN0dXJlICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZCh4Y2JjLT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKCh4Y2JjLT5ibG9ja3NpemUgPiBjaXBoZXJfZGVzY3JpcHRvclt4Y2JjLT5jaXBoZXJdLmJsb2NrX2xlbmd0aCkgfHwgKHhjYmMtPmJsb2Nrc2l6ZSA8IDApIHx8CisgICAgICAgKHhjYmMtPmJ1ZmxlbiA+IHhjYmMtPmJsb2Nrc2l6ZSkgfHwgKHhjYmMtPmJ1ZmxlbiA8IDApKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIHdoaWNoIGtleSBkbyB3ZSB1c2U/ICovCisgICBpZiAoeGNiYy0+YnVmbGVuID09IHhjYmMtPmJsb2Nrc2l6ZSkgeworICAgICAgLyogazIgKi8KKyAgICAgIGZvciAoeCA9IDA7IHggPCB4Y2JjLT5ibG9ja3NpemU7IHgrKykgeworICAgICAgICAgeGNiYy0+SVZbeF0gXj0geGNiYy0+S1sxXVt4XTsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICB4Y2JjLT5JVlt4Y2JjLT5idWZsZW5dIF49IDB4ODA7CisgICAgICAvKiBrMyAqLworICAgICAgZm9yICh4ID0gMDsgeCA8IHhjYmMtPmJsb2Nrc2l6ZTsgeCsrKSB7CisgICAgICAgICB4Y2JjLT5JVlt4XSBePSB4Y2JjLT5LWzJdW3hdOworICAgICAgfQorICAgfQorCisgICAvKiBlbmNyeXB0ICovCisgICBjaXBoZXJfZGVzY3JpcHRvclt4Y2JjLT5jaXBoZXJdLmVjYl9lbmNyeXB0KHhjYmMtPklWLCB4Y2JjLT5JViwgJnhjYmMtPmtleSk7CisgICBjaXBoZXJfZGVzY3JpcHRvclt4Y2JjLT5jaXBoZXJdLmRvbmUoJnhjYmMtPmtleSk7CisKKyAgIC8qIGV4dHJhY3QgdGFnICovCisgICBmb3IgKHggPSAwOyB4IDwgeGNiYy0+YmxvY2tzaXplICYmICh1bnNpZ25lZCBsb25nKXggPCAqb3V0bGVuOyB4KyspIHsKKyAgICAgIG91dFt4XSA9IHhjYmMtPklWW3hdOworICAgfQorICAgKm91dGxlbiA9IHg7CisgIAorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbSh4Y2JjLCBzaXplb2YoKnhjYmMpKTsKKyNlbmRpZgorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy94Y2JjL3hjYmNfZG9uZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDcgMDM6MjM6NDYgJCAqLworCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19maWxlLmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19maWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4ZjdhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMveGNiYy94Y2JjX2ZpbGUuYwpAQCAtMCwwICsxLDgzIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKiAKKyAgQGZpbGUgeGNiY19maWxlLmMKKyAgWENCQyBzdXBwb3J0LCBwcm9jZXNzIGEgZmlsZSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX1hDQkMKKworLyoqCisgICBYQ0JDIGEgZmlsZQorICAgQHBhcmFtIGNpcGhlciAgIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGRlc2lyZWQKKyAgIEBwYXJhbSBrZXkgICAgICBUaGUgc2VjcmV0IGtleQorICAgQHBhcmFtIGtleWxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIHNlY3JldCBrZXkgKG9jdGV0cykKKyAgIEBwYXJhbSBmaWxlbmFtZSBUaGUgbmFtZSBvZiB0aGUgZmlsZSB5b3Ugd2lzaCB0byBYQ0JDCisgICBAcGFyYW0gb3V0ICAgICAgW291dF0gV2hlcmUgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZyBpcyB0byBiZSBzdG9yZWQKKyAgIEBwYXJhbSBvdXRsZW4gICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBhdXRoZW50aWNhdGlvbiB0YWcKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgQ1JZUFRfTk9QIGlmIGZpbGUgc3VwcG9ydCBoYXMgYmVlbiBkaXNhYmxlZAorKi8KK2ludCB4Y2JjX2ZpbGUoaW50IGNpcGhlciwgCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgdW5zaWduZWQgbG9uZyBrZXlsZW4sCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisjaWZkZWYgTFRDX05PX0ZJTEUKKyAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgaW50IGVyciwgeDsKKyAgIHhjYmNfc3RhdGUgeGNiYzsKKyAgIEZJTEUgKmluOworICAgdW5zaWduZWQgY2hhciBidWZbNTEyXTsKKworICAgTFRDX0FSR0NISyhrZXkgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZmlsZW5hbWUgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gICAhPSBOVUxMKTsKKworICAgaW4gPSBmb3BlbihmaWxlbmFtZSwgInJiIik7CisgICBpZiAoaW4gPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX0ZJTEVfTk9URk9VTkQ7CisgICB9CisKKyAgIGlmICgoZXJyID0geGNiY19pbml0KCZ4Y2JjLCBjaXBoZXIsIGtleSwga2V5bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGZjbG9zZShpbik7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBkbyB7CisgICAgICB4ID0gZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgaW4pOworICAgICAgaWYgKChlcnIgPSB4Y2JjX3Byb2Nlc3MoJnhjYmMsIGJ1ZiwgeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICBmY2xvc2UoaW4pOworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0gd2hpbGUgKHggPT0gc2l6ZW9mKGJ1ZikpOworICAgZmNsb3NlKGluKTsKKworICAgaWYgKChlcnIgPSB4Y2JjX2RvbmUoJnhjYmMsIG91dCwgb3V0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0oYnVmLCBzaXplb2YoYnVmKSk7CisjZW5kaWYKKworICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19maWxlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMyAwMTo1Njo0MSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19pbml0LmMgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EwZGNhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMveGNiYy94Y2JjX2luaXQuYwpAQCAtMCwwICsxLDg2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSB4Y2JjX2luaXQuYworICBYQ0JDIFN1cHBvcnQsIHN0YXJ0IGFuIFhDQkMgc3RhdGUKKyovCisKKyNpZmRlZiBMVENfWENCQworCisvKiogSW5pdGlhbGl6ZSBYQ0JDLU1BQyBzdGF0ZQorICBAcGFyYW0geGNiYyAgICBbb3V0XSBYQ0JDIHN0YXRlIHRvIGluaXRpYWxpemUKKyAgQHBhcmFtIGNpcGhlciAgSW5kZXggb2YgY2lwaGVyIHRvIHVzZQorICBAcGFyYW0ga2V5ICAgICBbaW5dICBTZWNyZXQga2V5CisgIEBwYXJhbSBrZXlsZW4gIExlbmd0aCBvZiBzZWNyZXQga2V5IGluIG9jdGV0cworICBSZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCB4Y2JjX2luaXQoeGNiY19zdGF0ZSAqeGNiYywgaW50IGNpcGhlciwgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbikKK3sKKyAgIGludCAgICAgICAgICAgIHgsIHksIGVycjsKKyAgIHN5bW1ldHJpY19rZXkgKnNrZXk7CisKKyAgIExUQ19BUkdDSEsoeGNiYyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKKworICAgLyogc2NoZWR1bGUgdGhlIGtleSAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyNpZmRlZiBMVENfRkFTVAorICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoICUgc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorI2VuZGlmCisKKyAgIC8qIHNjaGVkdWxlIHRoZSB1c2VyIGtleSAqLworICAgc2tleSA9IFhDQUxMT0MoMSwgc2l6ZW9mKCpza2V5KSk7CisgICBpZiAoc2tleSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uc2V0dXAoa2V5LCBrZXlsZW4sIDAsIHNrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBkb25lOworICAgfQorICAgCisgICAvKiBtYWtlIHRoZSB0aHJlZSBrZXlzICovCisgICBmb3IgKHkgPSAwOyB5IDwgMzsgeSsrKSB7CisgICAgIGZvciAoeCA9IDA7IHggPCBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aDsgeCsrKSB7CisgICAgICAgIHhjYmMtPktbeV1beF0gPSB5ICsgMTsKKyAgICAgfQorICAgICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmVjYl9lbmNyeXB0KHhjYmMtPktbeV0sIHhjYmMtPktbeV0sIHNrZXkpOworICAgfQorCisgICAvKiBzZXR1cCBLMSAqLworICAgZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5zZXR1cCh4Y2JjLT5LWzBdLCBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aCwgMCwgJnhjYmMtPmtleSk7CisgCisgICAvKiBzZXR1cCBzdHJ1Y3QgKi8KKyAgIHplcm9tZW0oeGNiYy0+SVYsIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoKTsKKyAgIHhjYmMtPmJsb2Nrc2l6ZSA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoOworICAgeGNiYy0+Y2lwaGVyICAgID0gY2lwaGVyOworICAgeGNiYy0+YnVmbGVuICAgID0gMDsKK2RvbmU6CisgICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmRvbmUoc2tleSk7CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKHNrZXksIHNpemVvZigqc2tleSkpOworI2VuZGlmCisgICBYRlJFRShza2V5KTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19pbml0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wNyAwMzoyMzo0NiAkICovCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeS5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy94Y2JjL3hjYmNfbWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyNmI2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeS5jCkBAIC0wLDAgKzEsNzEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIHhjYmNfcHJvY2Vzcy5jCisgIFhDQkMgU3VwcG9ydCwgWENCQy1NQUMgYSBibG9jayBvZiBtZW1vcnkKKyovCisKKyNpZmRlZiBMVENfWENCQworCisvKiogWENCQy1NQUMgYSBibG9jayBvZiBtZW1vcnkgCisgIEBwYXJhbSBjaXBoZXIgICAgIEluZGV4IG9mIGNpcGhlciB0byB1c2UKKyAgQHBhcmFtIGtleSAgICAgICAgW2luXSAgU2VjcmV0IGtleQorICBAcGFyYW0ga2V5bGVuICAgICBMZW5ndGggb2Yga2V5IGluIG9jdGV0cworICBAcGFyYW0gaW4gICAgICAgICBbaW5dICBNZXNzYWdlIHRvIE1BQworICBAcGFyYW0gaW5sZW4gICAgICBMZW5ndGggb2YgaW5wdXQgaW4gb2N0ZXRzCisgIEBwYXJhbSBvdXQgICAgICAgIFtvdXRdIERlc3RpbmF0aW9uIGZvciB0aGUgTUFDIHRhZworICBAcGFyYW0gb3V0bGVuICAgICBbaW4vb3V0XSBPdXRwdXQgc2l6ZSBhbmQgZmluYWwgdGFnIHNpemUKKyAgUmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MuCisqLworaW50IHhjYmNfbWVtb3J5KGludCBjaXBoZXIsIAorICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqa2V5LCB1bnNpZ25lZCBsb25nIGtleWxlbiwKKyAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgeGNiY19zdGF0ZSAqeGNiYzsKKyAgIGludCAgICAgICAgIGVycjsKKworICAgLyogaXMgdGhlIGNpcGhlciB2YWxpZD8gKi8KKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBVc2UgYWNjZWxlcmF0b3IgaWYgZm91bmQgKi8KKyAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLnhjYmNfbWVtb3J5ICE9IE5VTEwpIHsKKyAgICAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLnhjYmNfbWVtb3J5KGtleSwga2V5bGVuLCBpbiwgaW5sZW4sIG91dCwgb3V0bGVuKTsKKyAgIH0KKworICAgeGNiYyA9IFhDQUxMT0MoMSwgc2l6ZW9mKCp4Y2JjKSk7CisgICBpZiAoeGNiYyA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICBpZiAoKGVyciA9IHhjYmNfaW5pdCh4Y2JjLCBjaXBoZXIsIGtleSwga2V5bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgZ290byBkb25lOworICAgfQorCisgICBpZiAoKGVyciA9IHhjYmNfcHJvY2Vzcyh4Y2JjLCBpbiwgaW5sZW4pKSAhPSBDUllQVF9PSykgeworICAgICBnb3RvIGRvbmU7CisgICB9CisKKyAgIGVyciA9IHhjYmNfZG9uZSh4Y2JjLCBvdXQsIG91dGxlbik7Citkb25lOgorICAgWEZSRUUoeGNiYyk7CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hYy94Y2JjL3hjYmNfbWVtb3J5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAyMzowMjo0MiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19tZW1vcnlfbXVsdGkuYyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeV9tdWx0aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYWU5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19tZW1vcnlfbXVsdGkuYwpAQCAtMCwwICsxLDkwIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKy8qKiAKKyAgQGZpbGUgeGNiY19tZW1vcnlfbXVsdGkuYworICBYQ0JDIHN1cHBvcnQsIHByb2Nlc3MgbXVsdGlwbGUgYmxvY2tzIG9mIG1lbW9yeSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX1hDQkMKKworLyoqCisgICBYQ0JDIG11bHRpcGxlIGJsb2NrcyBvZiBtZW1vcnkgCisgICBAcGFyYW0gY2lwaGVyICAgIFRoZSBpbmRleCBvZiB0aGUgZGVzaXJlZCBjaXBoZXIKKyAgIEBwYXJhbSBrZXkgICAgICAgVGhlIHNlY3JldCBrZXkKKyAgIEBwYXJhbSBrZXlsZW4gICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgQHBhcmFtIG91dCAgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGF1dGhlbnRpY2F0aW9uIHRhZworICAgQHBhcmFtIG91dGxlbiAgICBbaW4vb3V0XSAgVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgYXV0aGVudGljYXRpb24gdGFnIChvY3RldHMpCisgICBAcGFyYW0gaW4gICAgICAgIFRoZSBkYXRhIHRvIHNlbmQgdGhyb3VnaCBYQ0JDCisgICBAcGFyYW0gaW5sZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gc2VuZCB0aHJvdWdoIFhDQkMgKG9jdGV0cykKKyAgIEBwYXJhbSAuLi4gICAgICAgdHVwbGVzIG9mIChkYXRhLGxlbikgcGFpcnMgdG8gWENCQywgdGVybWluYXRlZCB3aXRoIGEgKE5VTEwseCkgKHg9ZG9uJ3QgY2FyZSkKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCB4Y2JjX21lbW9yeV9tdWx0aShpbnQgY2lwaGVyLCAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIHVuc2lnbmVkIGxvbmcga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwgLi4uKQoreworICAgaW50ICAgICAgICAgICAgICAgICAgZXJyOworICAgeGNiY19zdGF0ZSAgICAgICAgICAqeGNiYzsKKyAgIHZhX2xpc3QgICAgICAgICAgICAgIGFyZ3M7CisgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjdXJwdHI7CisgICB1bnNpZ25lZCBsb25nICAgICAgICBjdXJsZW47CisKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworCisgICAvKiBhbGxvY2F0ZSByYW0gZm9yIHhjYmMgc3RhdGUgKi8KKyAgIHhjYmMgPSBYTUFMTE9DKHNpemVvZih4Y2JjX3N0YXRlKSk7CisgICBpZiAoeGNiYyA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICAvKiB4Y2JjIHByb2Nlc3MgdGhlIG1lc3NhZ2UgKi8KKyAgIGlmICgoZXJyID0geGNiY19pbml0KHhjYmMsIGNpcGhlciwga2V5LCBrZXlsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorICAgdmFfc3RhcnQoYXJncywgaW5sZW4pOworICAgY3VycHRyID0gaW47IAorICAgY3VybGVuID0gaW5sZW47CisgICBmb3IgKDs7KSB7CisgICAgICAvKiBwcm9jZXNzIGJ1ZiAqLworICAgICAgaWYgKChlcnIgPSB4Y2JjX3Byb2Nlc3MoeGNiYywgY3VycHRyLCBjdXJsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgICAgLyogc3RlcCB0byBuZXh0ICovCisgICAgICBjdXJwdHIgPSB2YV9hcmcoYXJncywgY29uc3QgdW5zaWduZWQgY2hhciopOworICAgICAgaWYgKGN1cnB0ciA9PSBOVUxMKSB7CisgICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGN1cmxlbiA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKKyAgIH0KKyAgIGlmICgoZXJyID0geGNiY19kb25lKHhjYmMsIG91dCwgb3V0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKHhjYmMsIHNpemVvZih4Y2JjX3N0YXRlKSk7CisjZW5kaWYKKyAgIFhGUkVFKHhjYmMpOworICAgdmFfZW5kKGFyZ3MpOworICAgcmV0dXJuIGVycjsgICAKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYWMveGNiYy94Y2JjX21lbW9yeV9tdWx0aS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDMgMDE6NTM6MjUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hYy94Y2JjL3hjYmNfcHJvY2Vzcy5jIGIvbGlidG9tY3J5cHQvc3JjL21hYy94Y2JjL3hjYmNfcHJvY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkZDYzYjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19wcm9jZXNzLmMKQEAgLTAsMCArMSw3NSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgeGNiY19wcm9jZXNzLmMKKyAgWENCQyBTdXBwb3J0LCBwcm9jZXNzIGJsb2NrcyB3aXRoIFhDQkMKKyovCisKKyNpZmRlZiBMVENfWENCQworCisvKiogUHJvY2VzcyBkYXRhIHRocm91Z2ggWENCQy1NQUMKKyAgQHBhcmFtIHhjYmMgICAgIFRoZSBYQ0JDLU1BQyBzdGF0ZQorICBAcGFyYW0gaW4gICAgICAgSW5wdXQgZGF0YSB0byBwcm9jZXNzCisgIEBwYXJhbSBpbmxlbiAgICBMZW5ndGggb2YgaW5wdXQgaW4gb2N0ZXRzCisgIFJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IHhjYmNfcHJvY2Vzcyh4Y2JjX3N0YXRlICp4Y2JjLCBjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbikKK3sKKyAgIGludCBlcnI7CisjaWZkZWYgTFRDX0ZBU1QKKyAgIGludCB4OworI2VuZGlmCisKKyAgIExUQ19BUkdDSEsoeGNiYyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoaW4gICAhPSBOVUxMKTsKKworICAgLyogY2hlY2sgc3RydWN0dXJlICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZCh4Y2JjLT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKCh4Y2JjLT5ibG9ja3NpemUgPiBjaXBoZXJfZGVzY3JpcHRvclt4Y2JjLT5jaXBoZXJdLmJsb2NrX2xlbmd0aCkgfHwgKHhjYmMtPmJsb2Nrc2l6ZSA8IDApIHx8CisgICAgICAgKHhjYmMtPmJ1ZmxlbiA+IHhjYmMtPmJsb2Nrc2l6ZSkgfHwgKHhjYmMtPmJ1ZmxlbiA8IDApKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyNpZmRlZiBMVENfRkFTVAorICAgaWYgKHhjYmMtPmJ1ZmxlbiA9PSAwKSB7CisgICAgICAgd2hpbGUgKGlubGVuID4gKHVuc2lnbmVkIGxvbmcpeGNiYy0+YmxvY2tzaXplKSB7CisgICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB4Y2JjLT5ibG9ja3NpemU7IHggKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSYoeGNiYy0+SVZbeF0pKSBePSAqKChMVENfRkFTVF9UWVBFKikmKGluW3hdKSk7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgY2lwaGVyX2Rlc2NyaXB0b3JbeGNiYy0+Y2lwaGVyXS5lY2JfZW5jcnlwdCh4Y2JjLT5JViwgeGNiYy0+SVYsICZ4Y2JjLT5rZXkpOworICAgICAgICAgICBpbiAgICArPSB4Y2JjLT5ibG9ja3NpemU7CisgICAgICAgICAgIGlubGVuIC09IHhjYmMtPmJsb2Nrc2l6ZTsKKyAgICAgICB9CisgIH0KKyNlbmRpZgorCisgICB3aGlsZSAoaW5sZW4pIHsKKyAgICAgaWYgKHhjYmMtPmJ1ZmxlbiA9PSB4Y2JjLT5ibG9ja3NpemUpIHsKKyAgICAgICAgIGNpcGhlcl9kZXNjcmlwdG9yW3hjYmMtPmNpcGhlcl0uZWNiX2VuY3J5cHQoeGNiYy0+SVYsIHhjYmMtPklWLCAmeGNiYy0+a2V5KTsKKyAgICAgICAgIHhjYmMtPmJ1ZmxlbiA9IDA7CisgICAgIH0KKyAgICAgeGNiYy0+SVZbeGNiYy0+YnVmbGVuKytdIF49ICppbisrOworICAgICAtLWlubGVuOworICB9CisgIHJldHVybiBDUllQVF9PSzsgICAgICAgCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY19wcm9jZXNzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOSAyMjo0Mzo1MiAkICovCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYWMveGNiYy94Y2JjX3Rlc3QuYyBiL2xpYnRvbWNyeXB0L3NyYy9tYWMveGNiYy94Y2JjX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzU2YzBhCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hYy94Y2JjL3hjYmNfdGVzdC5jCkBAIC0wLDAgKzEsMTI4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSB4Y2JjX3Rlc3QuYworICBYQ0JDIFN1cHBvcnQsIFRlc3QgWENCQy1NQUMgbW9kZQorKi8KKworI2lmZGVmIExUQ19YQ0JDCisKKy8qKiBUZXN0IFhDQkMtTUFDIG1vZGUKKyAgUmV0dXJuIENSWVBUX09LIG9uIHN1Y2NlcworKi8KK2ludCB4Y2JjX3Rlc3Qodm9pZCkKK3sKKyNpZmRlZiBMVENfTk9fVEVTVAorICAgcmV0dXJuIENSWVBUX05PUDsKKyNlbHNlCisgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgICBpbnQgbXNnbGVuOworICAgICAgIHVuc2lnbmVkIGNoYXIgS1sxNl0sIE1bMzRdLCBUWzE2XTsKKyAgIH0gdGVzdHNbXSA9IHsKK3sKKyAgIDAsCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisKKyAgIHsgMCB9LAorCisgICB7IDB4NzUsIDB4ZjAsIDB4MjUsIDB4MWQsIDB4NTIsIDB4OGEsIDB4YzAsIDB4MWMsIAorICAgICAweDQ1LCAweDczLCAweGRmLCAweGQ1LCAweDg0LCAweGQ3LCAweDlmLCAweDI5IH0KK30sCisKK3sKKyAgIDMsCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisKKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiB9LAorCisgICB7IDB4NWIsIDB4MzcsIDB4NjUsIDB4ODAsIDB4YWUsIDB4MmYsIDB4MTksIDB4YWYsIAorICAgICAweGU3LCAweDIxLCAweDljLCAweGVlLCAweGYxLCAweDcyLCAweDc1LCAweDZmIH0KK30sCisKK3sKKyAgIDE2LAorICAgeyAweDAwLCAweDAxLCAweDAyLCAweDAzLCAweDA0LCAweDA1LCAweDA2LCAweDA3LCAKKyAgICAgMHgwOCwgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiB9LAorCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisKKyAgIHsgMHhkMiwgMHhhMiwgMHg0NiwgMHhmYSwgMHgzNCwgMHg5YiwgMHg2OCwgMHhhNywgCisgICAgIDB4OTksIDB4OTgsIDB4YTQsIDB4MzksIDB4NGYsIDB4ZjcsIDB4YTIsIDB4NjMgfQorfSwKKworeworICAgMzIsCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisKKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIAorICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmIH0sCisKKyAgIHsgMHhmNSwgMHg0ZiwgMHgwZSwgMHhjOCwgMHhkMiwgMHhiOSwgMHhmMywgMHhkMywgCisgICAgIDB4NjgsIDB4MDcsIDB4NzMsIDB4NGIsIDB4ZDUsIDB4MjgsIDB4M2YsIDB4ZDQgfQorfSwKKworeworICAgMzQsCisgICB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIAorICAgICAweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmIH0sCisKKyAgIHsgMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgCisgICAgIDB4MDgsIDB4MDksIDB4MGEsIDB4MGIsIDB4MGMsIDB4MGQsIDB4MGUsIDB4MGYsIAorICAgICAweDEwLCAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LAorICAgICAweDE4LCAweDE5LCAweDFhLCAweDFiLCAweDFjLCAweDFkLCAweDFlLCAweDFmLAorICAgICAweDIwLCAweDIxIH0sCisKKyAgIHsgMHhiZSwgMHhjYiwgMHhiMywgMHhiYywgMHhjZCwgMHhiNSwgMHgxOCwgMHhhMywgCisgICAgIDB4MDYsIDB4NzcsIDB4ZDUsIDB4NDgsIDB4MWYsIDB4YjYsIDB4YjQsIDB4ZDggfSwKK30sCisKKworCit9OworICB1bnNpZ25lZCBjaGFyIFRbMTZdOworICB1bnNpZ25lZCBsb25nIHRhZ2xlbjsKKyAgaW50IGVyciwgeCwgaWR4OworCisgIC8qIEFFUyBjYW4gYmUgdW5kZXIgcmlqbmRhZWwgb3IgYWVzLi4uIHRyeSB0byBmaW5kIGl0ICovIAorICBpZiAoKGlkeCA9IGZpbmRfY2lwaGVyKCJhZXMiKSkgPT0gLTEpIHsKKyAgICAgaWYgKChpZHggPSBmaW5kX2NpcGhlcigicmlqbmRhZWwiKSkgPT0gLTEpIHsKKyAgICAgICAgcmV0dXJuIENSWVBUX05PUDsKKyAgICAgfQorICB9CisKKyAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZih0ZXN0cykvc2l6ZW9mKHRlc3RzWzBdKSk7IHgrKykgeworICAgICB0YWdsZW4gPSAxNjsKKyAgICAgaWYgKChlcnIgPSB4Y2JjX21lbW9yeShpZHgsIHRlc3RzW3hdLkssIDE2LCB0ZXN0c1t4XS5NLCB0ZXN0c1t4XS5tc2dsZW4sIFQsICZ0YWdsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisgICAgIGlmICh0YWdsZW4gIT0gMTYgfHwgWE1FTUNNUChULCB0ZXN0c1t4XS5ULCAxNikpIHsKKyAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgfQorICB9CisKKyAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWFjL3hjYmMveGNiY190ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAyMzowMjo0MiAkICovCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tYXRoL2ZwL2x0Y19lY2NfZnBfbXVsbW9kLmMgYi9saWJ0b21jcnlwdC9zcmMvbWF0aC9mcC9sdGNfZWNjX2ZwX211bG1vZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYzAyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWF0aC9mcC9sdGNfZWNjX2ZwX211bG1vZC5jCkBAIC0wLDAgKzEsMTMxNCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgbHRjX2VjY19mcF9tdWxtb2QuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmIGRlZmluZWQoTUVDQykgJiYgZGVmaW5lZChNRUNDX0ZQKQorI2luY2x1ZGUgPGxpbWl0cy5oPgorCisvKiBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgY2FjaGUgKi8KKyNpZm5kZWYgRlBfRU5UUklFUworI2RlZmluZSBGUF9FTlRSSUVTIDE2CisjZW5kaWYKKworLyogbnVtYmVyIG9mIGJpdHMgaW4gTFVUICovCisjaWZuZGVmIEZQX0xVVAorI2RlZmluZSBGUF9MVVQgICAgIDhVCisjZW5kaWYKKworI2lmIChGUF9MVVQgPiAxMikgfHwgKEZQX0xVVCA8IDIpCisgICAjZXJyb3IgRlBfTFVUIG11c3QgYmUgYmV0d2VlbiAyIGFuZCAxMiBpbmNsdXNpdmVseQorI2VuZGlmICAgCisKKy8qKiBPdXIgRlAgY2FjaGUgKi8KK3N0YXRpYyBzdHJ1Y3QgeworICAgZWNjX3BvaW50ICpnLCAgICAgICAgICAgICAgLyogY2FjaGVkIENPUFkgb2YgYmFzZSBwb2ludCAqLworICAgICAgICAgICAgICpMVVRbMVU8PEZQX0xVVF07IC8qIGZpeGVkIHBvaW50IGxvb2t1cCAqLyAKKyAgIHZvaWQgICAgICAqbXU7ICAgICAgICAgICAgIC8qIGNvcHkgb2YgdGhlIG1vbnRnb21lcnkgY29uc3RhbnQgKi8KKyAgIGludCAgICAgICAgbHJ1X2NvdW50OyAgICAgIC8qIGFtb3VudCBvZiB0aW1lcyB0aGlzIGVudHJ5IGhhcyBiZWVuIHVzZWQgKi8KK30gZnBfY2FjaGVbRlBfRU5UUklFU107CisKK0xUQ19NVVRFWF9HTE9CQUwobHRjX2VjY19mcF9sb2NrKQorCisvKiBzaW1wbGUgdGFibGUgdG8gaGVscCBkaXJlY3QgdGhlIGdlbmVyYXRpb24gb2YgdGhlIExVVCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICBpbnQgaGFtLCB0ZXJtYSwgdGVybWI7Cit9IGx1dF9vcmRlcnNbXSA9IHsKKyAgIHsgMCwgMCwgMCB9LCB7IDEsIDAsIDAgfSwgeyAxLCAwLCAwIH0sIHsgMiwgMSwgMiB9LCB7IDEsIDAsIDAgfSwgeyAyLCAxLCA0IH0sIHsgMiwgMiwgNCB9LCB7IDMsIDMsIDQgfSwgCisgICB7IDEsIDAsIDAgfSwgeyAyLCAxLCA4IH0sIHsgMiwgMiwgOCB9LCB7IDMsIDMsIDggfSwgeyAyLCA0LCA4IH0sIHsgMywgNSwgOCB9LCB7IDMsIDYsIDggfSwgeyA0LCA3LCA4IH0sIAorICAgeyAxLCAwLCAwIH0sIHsgMiwgMSwgMTYgfSwgeyAyLCAyLCAxNiB9LCB7IDMsIDMsIDE2IH0sIHsgMiwgNCwgMTYgfSwgeyAzLCA1LCAxNiB9LCB7IDMsIDYsIDE2IH0sIHsgNCwgNywgMTYgfSwgCisgICB7IDIsIDgsIDE2IH0sIHsgMywgOSwgMTYgfSwgeyAzLCAxMCwgMTYgfSwgeyA0LCAxMSwgMTYgfSwgeyAzLCAxMiwgMTYgfSwgeyA0LCAxMywgMTYgfSwgeyA0LCAxNCwgMTYgfSwgeyA1LCAxNSwgMTYgfSwgCisgICB7IDEsIDAsIDAgfSwgeyAyLCAxLCAzMiB9LCB7IDIsIDIsIDMyIH0sIHsgMywgMywgMzIgfSwgeyAyLCA0LCAzMiB9LCB7IDMsIDUsIDMyIH0sIHsgMywgNiwgMzIgfSwgeyA0LCA3LCAzMiB9LCAKKyAgIHsgMiwgOCwgMzIgfSwgeyAzLCA5LCAzMiB9LCB7IDMsIDEwLCAzMiB9LCB7IDQsIDExLCAzMiB9LCB7IDMsIDEyLCAzMiB9LCB7IDQsIDEzLCAzMiB9LCB7IDQsIDE0LCAzMiB9LCB7IDUsIDE1LCAzMiB9LCAKKyAgIHsgMiwgMTYsIDMyIH0sIHsgMywgMTcsIDMyIH0sIHsgMywgMTgsIDMyIH0sIHsgNCwgMTksIDMyIH0sIHsgMywgMjAsIDMyIH0sIHsgNCwgMjEsIDMyIH0sIHsgNCwgMjIsIDMyIH0sIHsgNSwgMjMsIDMyIH0sIAorICAgeyAzLCAyNCwgMzIgfSwgeyA0LCAyNSwgMzIgfSwgeyA0LCAyNiwgMzIgfSwgeyA1LCAyNywgMzIgfSwgeyA0LCAyOCwgMzIgfSwgeyA1LCAyOSwgMzIgfSwgeyA1LCAzMCwgMzIgfSwgeyA2LCAzMSwgMzIgfSwgCisjaWYgRlBfTFVUID4gNgorICAgeyAxLCAwLCAwIH0sIHsgMiwgMSwgNjQgfSwgeyAyLCAyLCA2NCB9LCB7IDMsIDMsIDY0IH0sIHsgMiwgNCwgNjQgfSwgeyAzLCA1LCA2NCB9LCB7IDMsIDYsIDY0IH0sIHsgNCwgNywgNjQgfSwgCisgICB7IDIsIDgsIDY0IH0sIHsgMywgOSwgNjQgfSwgeyAzLCAxMCwgNjQgfSwgeyA0LCAxMSwgNjQgfSwgeyAzLCAxMiwgNjQgfSwgeyA0LCAxMywgNjQgfSwgeyA0LCAxNCwgNjQgfSwgeyA1LCAxNSwgNjQgfSwgCisgICB7IDIsIDE2LCA2NCB9LCB7IDMsIDE3LCA2NCB9LCB7IDMsIDE4LCA2NCB9LCB7IDQsIDE5LCA2NCB9LCB7IDMsIDIwLCA2NCB9LCB7IDQsIDIxLCA2NCB9LCB7IDQsIDIyLCA2NCB9LCB7IDUsIDIzLCA2NCB9LCAKKyAgIHsgMywgMjQsIDY0IH0sIHsgNCwgMjUsIDY0IH0sIHsgNCwgMjYsIDY0IH0sIHsgNSwgMjcsIDY0IH0sIHsgNCwgMjgsIDY0IH0sIHsgNSwgMjksIDY0IH0sIHsgNSwgMzAsIDY0IH0sIHsgNiwgMzEsIDY0IH0sIAorICAgeyAyLCAzMiwgNjQgfSwgeyAzLCAzMywgNjQgfSwgeyAzLCAzNCwgNjQgfSwgeyA0LCAzNSwgNjQgfSwgeyAzLCAzNiwgNjQgfSwgeyA0LCAzNywgNjQgfSwgeyA0LCAzOCwgNjQgfSwgeyA1LCAzOSwgNjQgfSwgCisgICB7IDMsIDQwLCA2NCB9LCB7IDQsIDQxLCA2NCB9LCB7IDQsIDQyLCA2NCB9LCB7IDUsIDQzLCA2NCB9LCB7IDQsIDQ0LCA2NCB9LCB7IDUsIDQ1LCA2NCB9LCB7IDUsIDQ2LCA2NCB9LCB7IDYsIDQ3LCA2NCB9LCAKKyAgIHsgMywgNDgsIDY0IH0sIHsgNCwgNDksIDY0IH0sIHsgNCwgNTAsIDY0IH0sIHsgNSwgNTEsIDY0IH0sIHsgNCwgNTIsIDY0IH0sIHsgNSwgNTMsIDY0IH0sIHsgNSwgNTQsIDY0IH0sIHsgNiwgNTUsIDY0IH0sIAorICAgeyA0LCA1NiwgNjQgfSwgeyA1LCA1NywgNjQgfSwgeyA1LCA1OCwgNjQgfSwgeyA2LCA1OSwgNjQgfSwgeyA1LCA2MCwgNjQgfSwgeyA2LCA2MSwgNjQgfSwgeyA2LCA2MiwgNjQgfSwgeyA3LCA2MywgNjQgfSwgCisjaWYgRlBfTFVUID4gNworICAgeyAxLCAwLCAwIH0sIHsgMiwgMSwgMTI4IH0sIHsgMiwgMiwgMTI4IH0sIHsgMywgMywgMTI4IH0sIHsgMiwgNCwgMTI4IH0sIHsgMywgNSwgMTI4IH0sIHsgMywgNiwgMTI4IH0sIHsgNCwgNywgMTI4IH0sIAorICAgeyAyLCA4LCAxMjggfSwgeyAzLCA5LCAxMjggfSwgeyAzLCAxMCwgMTI4IH0sIHsgNCwgMTEsIDEyOCB9LCB7IDMsIDEyLCAxMjggfSwgeyA0LCAxMywgMTI4IH0sIHsgNCwgMTQsIDEyOCB9LCB7IDUsIDE1LCAxMjggfSwgCisgICB7IDIsIDE2LCAxMjggfSwgeyAzLCAxNywgMTI4IH0sIHsgMywgMTgsIDEyOCB9LCB7IDQsIDE5LCAxMjggfSwgeyAzLCAyMCwgMTI4IH0sIHsgNCwgMjEsIDEyOCB9LCB7IDQsIDIyLCAxMjggfSwgeyA1LCAyMywgMTI4IH0sIAorICAgeyAzLCAyNCwgMTI4IH0sIHsgNCwgMjUsIDEyOCB9LCB7IDQsIDI2LCAxMjggfSwgeyA1LCAyNywgMTI4IH0sIHsgNCwgMjgsIDEyOCB9LCB7IDUsIDI5LCAxMjggfSwgeyA1LCAzMCwgMTI4IH0sIHsgNiwgMzEsIDEyOCB9LCAKKyAgIHsgMiwgMzIsIDEyOCB9LCB7IDMsIDMzLCAxMjggfSwgeyAzLCAzNCwgMTI4IH0sIHsgNCwgMzUsIDEyOCB9LCB7IDMsIDM2LCAxMjggfSwgeyA0LCAzNywgMTI4IH0sIHsgNCwgMzgsIDEyOCB9LCB7IDUsIDM5LCAxMjggfSwgCisgICB7IDMsIDQwLCAxMjggfSwgeyA0LCA0MSwgMTI4IH0sIHsgNCwgNDIsIDEyOCB9LCB7IDUsIDQzLCAxMjggfSwgeyA0LCA0NCwgMTI4IH0sIHsgNSwgNDUsIDEyOCB9LCB7IDUsIDQ2LCAxMjggfSwgeyA2LCA0NywgMTI4IH0sIAorICAgeyAzLCA0OCwgMTI4IH0sIHsgNCwgNDksIDEyOCB9LCB7IDQsIDUwLCAxMjggfSwgeyA1LCA1MSwgMTI4IH0sIHsgNCwgNTIsIDEyOCB9LCB7IDUsIDUzLCAxMjggfSwgeyA1LCA1NCwgMTI4IH0sIHsgNiwgNTUsIDEyOCB9LCAKKyAgIHsgNCwgNTYsIDEyOCB9LCB7IDUsIDU3LCAxMjggfSwgeyA1LCA1OCwgMTI4IH0sIHsgNiwgNTksIDEyOCB9LCB7IDUsIDYwLCAxMjggfSwgeyA2LCA2MSwgMTI4IH0sIHsgNiwgNjIsIDEyOCB9LCB7IDcsIDYzLCAxMjggfSwgCisgICB7IDIsIDY0LCAxMjggfSwgeyAzLCA2NSwgMTI4IH0sIHsgMywgNjYsIDEyOCB9LCB7IDQsIDY3LCAxMjggfSwgeyAzLCA2OCwgMTI4IH0sIHsgNCwgNjksIDEyOCB9LCB7IDQsIDcwLCAxMjggfSwgeyA1LCA3MSwgMTI4IH0sIAorICAgeyAzLCA3MiwgMTI4IH0sIHsgNCwgNzMsIDEyOCB9LCB7IDQsIDc0LCAxMjggfSwgeyA1LCA3NSwgMTI4IH0sIHsgNCwgNzYsIDEyOCB9LCB7IDUsIDc3LCAxMjggfSwgeyA1LCA3OCwgMTI4IH0sIHsgNiwgNzksIDEyOCB9LCAKKyAgIHsgMywgODAsIDEyOCB9LCB7IDQsIDgxLCAxMjggfSwgeyA0LCA4MiwgMTI4IH0sIHsgNSwgODMsIDEyOCB9LCB7IDQsIDg0LCAxMjggfSwgeyA1LCA4NSwgMTI4IH0sIHsgNSwgODYsIDEyOCB9LCB7IDYsIDg3LCAxMjggfSwgCisgICB7IDQsIDg4LCAxMjggfSwgeyA1LCA4OSwgMTI4IH0sIHsgNSwgOTAsIDEyOCB9LCB7IDYsIDkxLCAxMjggfSwgeyA1LCA5MiwgMTI4IH0sIHsgNiwgOTMsIDEyOCB9LCB7IDYsIDk0LCAxMjggfSwgeyA3LCA5NSwgMTI4IH0sIAorICAgeyAzLCA5NiwgMTI4IH0sIHsgNCwgOTcsIDEyOCB9LCB7IDQsIDk4LCAxMjggfSwgeyA1LCA5OSwgMTI4IH0sIHsgNCwgMTAwLCAxMjggfSwgeyA1LCAxMDEsIDEyOCB9LCB7IDUsIDEwMiwgMTI4IH0sIHsgNiwgMTAzLCAxMjggfSwgCisgICB7IDQsIDEwNCwgMTI4IH0sIHsgNSwgMTA1LCAxMjggfSwgeyA1LCAxMDYsIDEyOCB9LCB7IDYsIDEwNywgMTI4IH0sIHsgNSwgMTA4LCAxMjggfSwgeyA2LCAxMDksIDEyOCB9LCB7IDYsIDExMCwgMTI4IH0sIHsgNywgMTExLCAxMjggfSwgCisgICB7IDQsIDExMiwgMTI4IH0sIHsgNSwgMTEzLCAxMjggfSwgeyA1LCAxMTQsIDEyOCB9LCB7IDYsIDExNSwgMTI4IH0sIHsgNSwgMTE2LCAxMjggfSwgeyA2LCAxMTcsIDEyOCB9LCB7IDYsIDExOCwgMTI4IH0sIHsgNywgMTE5LCAxMjggfSwgCisgICB7IDUsIDEyMCwgMTI4IH0sIHsgNiwgMTIxLCAxMjggfSwgeyA2LCAxMjIsIDEyOCB9LCB7IDcsIDEyMywgMTI4IH0sIHsgNiwgMTI0LCAxMjggfSwgeyA3LCAxMjUsIDEyOCB9LCB7IDcsIDEyNiwgMTI4IH0sIHsgOCwgMTI3LCAxMjggfSwgCisjaWYgRlBfTFVUID4gOAorICAgeyAxLCAwLCAwIH0sIHsgMiwgMSwgMjU2IH0sIHsgMiwgMiwgMjU2IH0sIHsgMywgMywgMjU2IH0sIHsgMiwgNCwgMjU2IH0sIHsgMywgNSwgMjU2IH0sIHsgMywgNiwgMjU2IH0sIHsgNCwgNywgMjU2IH0sIAorICAgeyAyLCA4LCAyNTYgfSwgeyAzLCA5LCAyNTYgfSwgeyAzLCAxMCwgMjU2IH0sIHsgNCwgMTEsIDI1NiB9LCB7IDMsIDEyLCAyNTYgfSwgeyA0LCAxMywgMjU2IH0sIHsgNCwgMTQsIDI1NiB9LCB7IDUsIDE1LCAyNTYgfSwgCisgICB7IDIsIDE2LCAyNTYgfSwgeyAzLCAxNywgMjU2IH0sIHsgMywgMTgsIDI1NiB9LCB7IDQsIDE5LCAyNTYgfSwgeyAzLCAyMCwgMjU2IH0sIHsgNCwgMjEsIDI1NiB9LCB7IDQsIDIyLCAyNTYgfSwgeyA1LCAyMywgMjU2IH0sIAorICAgeyAzLCAyNCwgMjU2IH0sIHsgNCwgMjUsIDI1NiB9LCB7IDQsIDI2LCAyNTYgfSwgeyA1LCAyNywgMjU2IH0sIHsgNCwgMjgsIDI1NiB9LCB7IDUsIDI5LCAyNTYgfSwgeyA1LCAzMCwgMjU2IH0sIHsgNiwgMzEsIDI1NiB9LCAKKyAgIHsgMiwgMzIsIDI1NiB9LCB7IDMsIDMzLCAyNTYgfSwgeyAzLCAzNCwgMjU2IH0sIHsgNCwgMzUsIDI1NiB9LCB7IDMsIDM2LCAyNTYgfSwgeyA0LCAzNywgMjU2IH0sIHsgNCwgMzgsIDI1NiB9LCB7IDUsIDM5LCAyNTYgfSwgCisgICB7IDMsIDQwLCAyNTYgfSwgeyA0LCA0MSwgMjU2IH0sIHsgNCwgNDIsIDI1NiB9LCB7IDUsIDQzLCAyNTYgfSwgeyA0LCA0NCwgMjU2IH0sIHsgNSwgNDUsIDI1NiB9LCB7IDUsIDQ2LCAyNTYgfSwgeyA2LCA0NywgMjU2IH0sIAorICAgeyAzLCA0OCwgMjU2IH0sIHsgNCwgNDksIDI1NiB9LCB7IDQsIDUwLCAyNTYgfSwgeyA1LCA1MSwgMjU2IH0sIHsgNCwgNTIsIDI1NiB9LCB7IDUsIDUzLCAyNTYgfSwgeyA1LCA1NCwgMjU2IH0sIHsgNiwgNTUsIDI1NiB9LCAKKyAgIHsgNCwgNTYsIDI1NiB9LCB7IDUsIDU3LCAyNTYgfSwgeyA1LCA1OCwgMjU2IH0sIHsgNiwgNTksIDI1NiB9LCB7IDUsIDYwLCAyNTYgfSwgeyA2LCA2MSwgMjU2IH0sIHsgNiwgNjIsIDI1NiB9LCB7IDcsIDYzLCAyNTYgfSwgCisgICB7IDIsIDY0LCAyNTYgfSwgeyAzLCA2NSwgMjU2IH0sIHsgMywgNjYsIDI1NiB9LCB7IDQsIDY3LCAyNTYgfSwgeyAzLCA2OCwgMjU2IH0sIHsgNCwgNjksIDI1NiB9LCB7IDQsIDcwLCAyNTYgfSwgeyA1LCA3MSwgMjU2IH0sIAorICAgeyAzLCA3MiwgMjU2IH0sIHsgNCwgNzMsIDI1NiB9LCB7IDQsIDc0LCAyNTYgfSwgeyA1LCA3NSwgMjU2IH0sIHsgNCwgNzYsIDI1NiB9LCB7IDUsIDc3LCAyNTYgfSwgeyA1LCA3OCwgMjU2IH0sIHsgNiwgNzksIDI1NiB9LCAKKyAgIHsgMywgODAsIDI1NiB9LCB7IDQsIDgxLCAyNTYgfSwgeyA0LCA4MiwgMjU2IH0sIHsgNSwgODMsIDI1NiB9LCB7IDQsIDg0LCAyNTYgfSwgeyA1LCA4NSwgMjU2IH0sIHsgNSwgODYsIDI1NiB9LCB7IDYsIDg3LCAyNTYgfSwgCisgICB7IDQsIDg4LCAyNTYgfSwgeyA1LCA4OSwgMjU2IH0sIHsgNSwgOTAsIDI1NiB9LCB7IDYsIDkxLCAyNTYgfSwgeyA1LCA5MiwgMjU2IH0sIHsgNiwgOTMsIDI1NiB9LCB7IDYsIDk0LCAyNTYgfSwgeyA3LCA5NSwgMjU2IH0sIAorICAgeyAzLCA5NiwgMjU2IH0sIHsgNCwgOTcsIDI1NiB9LCB7IDQsIDk4LCAyNTYgfSwgeyA1LCA5OSwgMjU2IH0sIHsgNCwgMTAwLCAyNTYgfSwgeyA1LCAxMDEsIDI1NiB9LCB7IDUsIDEwMiwgMjU2IH0sIHsgNiwgMTAzLCAyNTYgfSwgCisgICB7IDQsIDEwNCwgMjU2IH0sIHsgNSwgMTA1LCAyNTYgfSwgeyA1LCAxMDYsIDI1NiB9LCB7IDYsIDEwNywgMjU2IH0sIHsgNSwgMTA4LCAyNTYgfSwgeyA2LCAxMDksIDI1NiB9LCB7IDYsIDExMCwgMjU2IH0sIHsgNywgMTExLCAyNTYgfSwgCisgICB7IDQsIDExMiwgMjU2IH0sIHsgNSwgMTEzLCAyNTYgfSwgeyA1LCAxMTQsIDI1NiB9LCB7IDYsIDExNSwgMjU2IH0sIHsgNSwgMTE2LCAyNTYgfSwgeyA2LCAxMTcsIDI1NiB9LCB7IDYsIDExOCwgMjU2IH0sIHsgNywgMTE5LCAyNTYgfSwgCisgICB7IDUsIDEyMCwgMjU2IH0sIHsgNiwgMTIxLCAyNTYgfSwgeyA2LCAxMjIsIDI1NiB9LCB7IDcsIDEyMywgMjU2IH0sIHsgNiwgMTI0LCAyNTYgfSwgeyA3LCAxMjUsIDI1NiB9LCB7IDcsIDEyNiwgMjU2IH0sIHsgOCwgMTI3LCAyNTYgfSwgCisgICB7IDIsIDEyOCwgMjU2IH0sIHsgMywgMTI5LCAyNTYgfSwgeyAzLCAxMzAsIDI1NiB9LCB7IDQsIDEzMSwgMjU2IH0sIHsgMywgMTMyLCAyNTYgfSwgeyA0LCAxMzMsIDI1NiB9LCB7IDQsIDEzNCwgMjU2IH0sIHsgNSwgMTM1LCAyNTYgfSwgCisgICB7IDMsIDEzNiwgMjU2IH0sIHsgNCwgMTM3LCAyNTYgfSwgeyA0LCAxMzgsIDI1NiB9LCB7IDUsIDEzOSwgMjU2IH0sIHsgNCwgMTQwLCAyNTYgfSwgeyA1LCAxNDEsIDI1NiB9LCB7IDUsIDE0MiwgMjU2IH0sIHsgNiwgMTQzLCAyNTYgfSwgCisgICB7IDMsIDE0NCwgMjU2IH0sIHsgNCwgMTQ1LCAyNTYgfSwgeyA0LCAxNDYsIDI1NiB9LCB7IDUsIDE0NywgMjU2IH0sIHsgNCwgMTQ4LCAyNTYgfSwgeyA1LCAxNDksIDI1NiB9LCB7IDUsIDE1MCwgMjU2IH0sIHsgNiwgMTUxLCAyNTYgfSwgCisgICB7IDQsIDE1MiwgMjU2IH0sIHsgNSwgMTUzLCAyNTYgfSwgeyA1LCAxNTQsIDI1NiB9LCB7IDYsIDE1NSwgMjU2IH0sIHsgNSwgMTU2LCAyNTYgfSwgeyA2LCAxNTcsIDI1NiB9LCB7IDYsIDE1OCwgMjU2IH0sIHsgNywgMTU5LCAyNTYgfSwgCisgICB7IDMsIDE2MCwgMjU2IH0sIHsgNCwgMTYxLCAyNTYgfSwgeyA0LCAxNjIsIDI1NiB9LCB7IDUsIDE2MywgMjU2IH0sIHsgNCwgMTY0LCAyNTYgfSwgeyA1LCAxNjUsIDI1NiB9LCB7IDUsIDE2NiwgMjU2IH0sIHsgNiwgMTY3LCAyNTYgfSwgCisgICB7IDQsIDE2OCwgMjU2IH0sIHsgNSwgMTY5LCAyNTYgfSwgeyA1LCAxNzAsIDI1NiB9LCB7IDYsIDE3MSwgMjU2IH0sIHsgNSwgMTcyLCAyNTYgfSwgeyA2LCAxNzMsIDI1NiB9LCB7IDYsIDE3NCwgMjU2IH0sIHsgNywgMTc1LCAyNTYgfSwgCisgICB7IDQsIDE3NiwgMjU2IH0sIHsgNSwgMTc3LCAyNTYgfSwgeyA1LCAxNzgsIDI1NiB9LCB7IDYsIDE3OSwgMjU2IH0sIHsgNSwgMTgwLCAyNTYgfSwgeyA2LCAxODEsIDI1NiB9LCB7IDYsIDE4MiwgMjU2IH0sIHsgNywgMTgzLCAyNTYgfSwgCisgICB7IDUsIDE4NCwgMjU2IH0sIHsgNiwgMTg1LCAyNTYgfSwgeyA2LCAxODYsIDI1NiB9LCB7IDcsIDE4NywgMjU2IH0sIHsgNiwgMTg4LCAyNTYgfSwgeyA3LCAxODksIDI1NiB9LCB7IDcsIDE5MCwgMjU2IH0sIHsgOCwgMTkxLCAyNTYgfSwgCisgICB7IDMsIDE5MiwgMjU2IH0sIHsgNCwgMTkzLCAyNTYgfSwgeyA0LCAxOTQsIDI1NiB9LCB7IDUsIDE5NSwgMjU2IH0sIHsgNCwgMTk2LCAyNTYgfSwgeyA1LCAxOTcsIDI1NiB9LCB7IDUsIDE5OCwgMjU2IH0sIHsgNiwgMTk5LCAyNTYgfSwgCisgICB7IDQsIDIwMCwgMjU2IH0sIHsgNSwgMjAxLCAyNTYgfSwgeyA1LCAyMDIsIDI1NiB9LCB7IDYsIDIwMywgMjU2IH0sIHsgNSwgMjA0LCAyNTYgfSwgeyA2LCAyMDUsIDI1NiB9LCB7IDYsIDIwNiwgMjU2IH0sIHsgNywgMjA3LCAyNTYgfSwgCisgICB7IDQsIDIwOCwgMjU2IH0sIHsgNSwgMjA5LCAyNTYgfSwgeyA1LCAyMTAsIDI1NiB9LCB7IDYsIDIxMSwgMjU2IH0sIHsgNSwgMjEyLCAyNTYgfSwgeyA2LCAyMTMsIDI1NiB9LCB7IDYsIDIxNCwgMjU2IH0sIHsgNywgMjE1LCAyNTYgfSwgCisgICB7IDUsIDIxNiwgMjU2IH0sIHsgNiwgMjE3LCAyNTYgfSwgeyA2LCAyMTgsIDI1NiB9LCB7IDcsIDIxOSwgMjU2IH0sIHsgNiwgMjIwLCAyNTYgfSwgeyA3LCAyMjEsIDI1NiB9LCB7IDcsIDIyMiwgMjU2IH0sIHsgOCwgMjIzLCAyNTYgfSwgCisgICB7IDQsIDIyNCwgMjU2IH0sIHsgNSwgMjI1LCAyNTYgfSwgeyA1LCAyMjYsIDI1NiB9LCB7IDYsIDIyNywgMjU2IH0sIHsgNSwgMjI4LCAyNTYgfSwgeyA2LCAyMjksIDI1NiB9LCB7IDYsIDIzMCwgMjU2IH0sIHsgNywgMjMxLCAyNTYgfSwgCisgICB7IDUsIDIzMiwgMjU2IH0sIHsgNiwgMjMzLCAyNTYgfSwgeyA2LCAyMzQsIDI1NiB9LCB7IDcsIDIzNSwgMjU2IH0sIHsgNiwgMjM2LCAyNTYgfSwgeyA3LCAyMzcsIDI1NiB9LCB7IDcsIDIzOCwgMjU2IH0sIHsgOCwgMjM5LCAyNTYgfSwgCisgICB7IDUsIDI0MCwgMjU2IH0sIHsgNiwgMjQxLCAyNTYgfSwgeyA2LCAyNDIsIDI1NiB9LCB7IDcsIDI0MywgMjU2IH0sIHsgNiwgMjQ0LCAyNTYgfSwgeyA3LCAyNDUsIDI1NiB9LCB7IDcsIDI0NiwgMjU2IH0sIHsgOCwgMjQ3LCAyNTYgfSwgCisgICB7IDYsIDI0OCwgMjU2IH0sIHsgNywgMjQ5LCAyNTYgfSwgeyA3LCAyNTAsIDI1NiB9LCB7IDgsIDI1MSwgMjU2IH0sIHsgNywgMjUyLCAyNTYgfSwgeyA4LCAyNTMsIDI1NiB9LCB7IDgsIDI1NCwgMjU2IH0sIHsgOSwgMjU1LCAyNTYgfSwgCisjaWYgRlBfTFVUID4gOQorICAgeyAxLCAwLCAwIH0sIHsgMiwgMSwgNTEyIH0sIHsgMiwgMiwgNTEyIH0sIHsgMywgMywgNTEyIH0sIHsgMiwgNCwgNTEyIH0sIHsgMywgNSwgNTEyIH0sIHsgMywgNiwgNTEyIH0sIHsgNCwgNywgNTEyIH0sIAorICAgeyAyLCA4LCA1MTIgfSwgeyAzLCA5LCA1MTIgfSwgeyAzLCAxMCwgNTEyIH0sIHsgNCwgMTEsIDUxMiB9LCB7IDMsIDEyLCA1MTIgfSwgeyA0LCAxMywgNTEyIH0sIHsgNCwgMTQsIDUxMiB9LCB7IDUsIDE1LCA1MTIgfSwgCisgICB7IDIsIDE2LCA1MTIgfSwgeyAzLCAxNywgNTEyIH0sIHsgMywgMTgsIDUxMiB9LCB7IDQsIDE5LCA1MTIgfSwgeyAzLCAyMCwgNTEyIH0sIHsgNCwgMjEsIDUxMiB9LCB7IDQsIDIyLCA1MTIgfSwgeyA1LCAyMywgNTEyIH0sIAorICAgeyAzLCAyNCwgNTEyIH0sIHsgNCwgMjUsIDUxMiB9LCB7IDQsIDI2LCA1MTIgfSwgeyA1LCAyNywgNTEyIH0sIHsgNCwgMjgsIDUxMiB9LCB7IDUsIDI5LCA1MTIgfSwgeyA1LCAzMCwgNTEyIH0sIHsgNiwgMzEsIDUxMiB9LCAKKyAgIHsgMiwgMzIsIDUxMiB9LCB7IDMsIDMzLCA1MTIgfSwgeyAzLCAzNCwgNTEyIH0sIHsgNCwgMzUsIDUxMiB9LCB7IDMsIDM2LCA1MTIgfSwgeyA0LCAzNywgNTEyIH0sIHsgNCwgMzgsIDUxMiB9LCB7IDUsIDM5LCA1MTIgfSwgCisgICB7IDMsIDQwLCA1MTIgfSwgeyA0LCA0MSwgNTEyIH0sIHsgNCwgNDIsIDUxMiB9LCB7IDUsIDQzLCA1MTIgfSwgeyA0LCA0NCwgNTEyIH0sIHsgNSwgNDUsIDUxMiB9LCB7IDUsIDQ2LCA1MTIgfSwgeyA2LCA0NywgNTEyIH0sIAorICAgeyAzLCA0OCwgNTEyIH0sIHsgNCwgNDksIDUxMiB9LCB7IDQsIDUwLCA1MTIgfSwgeyA1LCA1MSwgNTEyIH0sIHsgNCwgNTIsIDUxMiB9LCB7IDUsIDUzLCA1MTIgfSwgeyA1LCA1NCwgNTEyIH0sIHsgNiwgNTUsIDUxMiB9LCAKKyAgIHsgNCwgNTYsIDUxMiB9LCB7IDUsIDU3LCA1MTIgfSwgeyA1LCA1OCwgNTEyIH0sIHsgNiwgNTksIDUxMiB9LCB7IDUsIDYwLCA1MTIgfSwgeyA2LCA2MSwgNTEyIH0sIHsgNiwgNjIsIDUxMiB9LCB7IDcsIDYzLCA1MTIgfSwgCisgICB7IDIsIDY0LCA1MTIgfSwgeyAzLCA2NSwgNTEyIH0sIHsgMywgNjYsIDUxMiB9LCB7IDQsIDY3LCA1MTIgfSwgeyAzLCA2OCwgNTEyIH0sIHsgNCwgNjksIDUxMiB9LCB7IDQsIDcwLCA1MTIgfSwgeyA1LCA3MSwgNTEyIH0sIAorICAgeyAzLCA3MiwgNTEyIH0sIHsgNCwgNzMsIDUxMiB9LCB7IDQsIDc0LCA1MTIgfSwgeyA1LCA3NSwgNTEyIH0sIHsgNCwgNzYsIDUxMiB9LCB7IDUsIDc3LCA1MTIgfSwgeyA1LCA3OCwgNTEyIH0sIHsgNiwgNzksIDUxMiB9LCAKKyAgIHsgMywgODAsIDUxMiB9LCB7IDQsIDgxLCA1MTIgfSwgeyA0LCA4MiwgNTEyIH0sIHsgNSwgODMsIDUxMiB9LCB7IDQsIDg0LCA1MTIgfSwgeyA1LCA4NSwgNTEyIH0sIHsgNSwgODYsIDUxMiB9LCB7IDYsIDg3LCA1MTIgfSwgCisgICB7IDQsIDg4LCA1MTIgfSwgeyA1LCA4OSwgNTEyIH0sIHsgNSwgOTAsIDUxMiB9LCB7IDYsIDkxLCA1MTIgfSwgeyA1LCA5MiwgNTEyIH0sIHsgNiwgOTMsIDUxMiB9LCB7IDYsIDk0LCA1MTIgfSwgeyA3LCA5NSwgNTEyIH0sIAorICAgeyAzLCA5NiwgNTEyIH0sIHsgNCwgOTcsIDUxMiB9LCB7IDQsIDk4LCA1MTIgfSwgeyA1LCA5OSwgNTEyIH0sIHsgNCwgMTAwLCA1MTIgfSwgeyA1LCAxMDEsIDUxMiB9LCB7IDUsIDEwMiwgNTEyIH0sIHsgNiwgMTAzLCA1MTIgfSwgCisgICB7IDQsIDEwNCwgNTEyIH0sIHsgNSwgMTA1LCA1MTIgfSwgeyA1LCAxMDYsIDUxMiB9LCB7IDYsIDEwNywgNTEyIH0sIHsgNSwgMTA4LCA1MTIgfSwgeyA2LCAxMDksIDUxMiB9LCB7IDYsIDExMCwgNTEyIH0sIHsgNywgMTExLCA1MTIgfSwgCisgICB7IDQsIDExMiwgNTEyIH0sIHsgNSwgMTEzLCA1MTIgfSwgeyA1LCAxMTQsIDUxMiB9LCB7IDYsIDExNSwgNTEyIH0sIHsgNSwgMTE2LCA1MTIgfSwgeyA2LCAxMTcsIDUxMiB9LCB7IDYsIDExOCwgNTEyIH0sIHsgNywgMTE5LCA1MTIgfSwgCisgICB7IDUsIDEyMCwgNTEyIH0sIHsgNiwgMTIxLCA1MTIgfSwgeyA2LCAxMjIsIDUxMiB9LCB7IDcsIDEyMywgNTEyIH0sIHsgNiwgMTI0LCA1MTIgfSwgeyA3LCAxMjUsIDUxMiB9LCB7IDcsIDEyNiwgNTEyIH0sIHsgOCwgMTI3LCA1MTIgfSwgCisgICB7IDIsIDEyOCwgNTEyIH0sIHsgMywgMTI5LCA1MTIgfSwgeyAzLCAxMzAsIDUxMiB9LCB7IDQsIDEzMSwgNTEyIH0sIHsgMywgMTMyLCA1MTIgfSwgeyA0LCAxMzMsIDUxMiB9LCB7IDQsIDEzNCwgNTEyIH0sIHsgNSwgMTM1LCA1MTIgfSwgCisgICB7IDMsIDEzNiwgNTEyIH0sIHsgNCwgMTM3LCA1MTIgfSwgeyA0LCAxMzgsIDUxMiB9LCB7IDUsIDEzOSwgNTEyIH0sIHsgNCwgMTQwLCA1MTIgfSwgeyA1LCAxNDEsIDUxMiB9LCB7IDUsIDE0MiwgNTEyIH0sIHsgNiwgMTQzLCA1MTIgfSwgCisgICB7IDMsIDE0NCwgNTEyIH0sIHsgNCwgMTQ1LCA1MTIgfSwgeyA0LCAxNDYsIDUxMiB9LCB7IDUsIDE0NywgNTEyIH0sIHsgNCwgMTQ4LCA1MTIgfSwgeyA1LCAxNDksIDUxMiB9LCB7IDUsIDE1MCwgNTEyIH0sIHsgNiwgMTUxLCA1MTIgfSwgCisgICB7IDQsIDE1MiwgNTEyIH0sIHsgNSwgMTUzLCA1MTIgfSwgeyA1LCAxNTQsIDUxMiB9LCB7IDYsIDE1NSwgNTEyIH0sIHsgNSwgMTU2LCA1MTIgfSwgeyA2LCAxNTcsIDUxMiB9LCB7IDYsIDE1OCwgNTEyIH0sIHsgNywgMTU5LCA1MTIgfSwgCisgICB7IDMsIDE2MCwgNTEyIH0sIHsgNCwgMTYxLCA1MTIgfSwgeyA0LCAxNjIsIDUxMiB9LCB7IDUsIDE2MywgNTEyIH0sIHsgNCwgMTY0LCA1MTIgfSwgeyA1LCAxNjUsIDUxMiB9LCB7IDUsIDE2NiwgNTEyIH0sIHsgNiwgMTY3LCA1MTIgfSwgCisgICB7IDQsIDE2OCwgNTEyIH0sIHsgNSwgMTY5LCA1MTIgfSwgeyA1LCAxNzAsIDUxMiB9LCB7IDYsIDE3MSwgNTEyIH0sIHsgNSwgMTcyLCA1MTIgfSwgeyA2LCAxNzMsIDUxMiB9LCB7IDYsIDE3NCwgNTEyIH0sIHsgNywgMTc1LCA1MTIgfSwgCisgICB7IDQsIDE3NiwgNTEyIH0sIHsgNSwgMTc3LCA1MTIgfSwgeyA1LCAxNzgsIDUxMiB9LCB7IDYsIDE3OSwgNTEyIH0sIHsgNSwgMTgwLCA1MTIgfSwgeyA2LCAxODEsIDUxMiB9LCB7IDYsIDE4MiwgNTEyIH0sIHsgNywgMTgzLCA1MTIgfSwgCisgICB7IDUsIDE4NCwgNTEyIH0sIHsgNiwgMTg1LCA1MTIgfSwgeyA2LCAxODYsIDUxMiB9LCB7IDcsIDE4NywgNTEyIH0sIHsgNiwgMTg4LCA1MTIgfSwgeyA3LCAxODksIDUxMiB9LCB7IDcsIDE5MCwgNTEyIH0sIHsgOCwgMTkxLCA1MTIgfSwgCisgICB7IDMsIDE5MiwgNTEyIH0sIHsgNCwgMTkzLCA1MTIgfSwgeyA0LCAxOTQsIDUxMiB9LCB7IDUsIDE5NSwgNTEyIH0sIHsgNCwgMTk2LCA1MTIgfSwgeyA1LCAxOTcsIDUxMiB9LCB7IDUsIDE5OCwgNTEyIH0sIHsgNiwgMTk5LCA1MTIgfSwgCisgICB7IDQsIDIwMCwgNTEyIH0sIHsgNSwgMjAxLCA1MTIgfSwgeyA1LCAyMDIsIDUxMiB9LCB7IDYsIDIwMywgNTEyIH0sIHsgNSwgMjA0LCA1MTIgfSwgeyA2LCAyMDUsIDUxMiB9LCB7IDYsIDIwNiwgNTEyIH0sIHsgNywgMjA3LCA1MTIgfSwgCisgICB7IDQsIDIwOCwgNTEyIH0sIHsgNSwgMjA5LCA1MTIgfSwgeyA1LCAyMTAsIDUxMiB9LCB7IDYsIDIxMSwgNTEyIH0sIHsgNSwgMjEyLCA1MTIgfSwgeyA2LCAyMTMsIDUxMiB9LCB7IDYsIDIxNCwgNTEyIH0sIHsgNywgMjE1LCA1MTIgfSwgCisgICB7IDUsIDIxNiwgNTEyIH0sIHsgNiwgMjE3LCA1MTIgfSwgeyA2LCAyMTgsIDUxMiB9LCB7IDcsIDIxOSwgNTEyIH0sIHsgNiwgMjIwLCA1MTIgfSwgeyA3LCAyMjEsIDUxMiB9LCB7IDcsIDIyMiwgNTEyIH0sIHsgOCwgMjIzLCA1MTIgfSwgCisgICB7IDQsIDIyNCwgNTEyIH0sIHsgNSwgMjI1LCA1MTIgfSwgeyA1LCAyMjYsIDUxMiB9LCB7IDYsIDIyNywgNTEyIH0sIHsgNSwgMjI4LCA1MTIgfSwgeyA2LCAyMjksIDUxMiB9LCB7IDYsIDIzMCwgNTEyIH0sIHsgNywgMjMxLCA1MTIgfSwgCisgICB7IDUsIDIzMiwgNTEyIH0sIHsgNiwgMjMzLCA1MTIgfSwgeyA2LCAyMzQsIDUxMiB9LCB7IDcsIDIzNSwgNTEyIH0sIHsgNiwgMjM2LCA1MTIgfSwgeyA3LCAyMzcsIDUxMiB9LCB7IDcsIDIzOCwgNTEyIH0sIHsgOCwgMjM5LCA1MTIgfSwgCisgICB7IDUsIDI0MCwgNTEyIH0sIHsgNiwgMjQxLCA1MTIgfSwgeyA2LCAyNDIsIDUxMiB9LCB7IDcsIDI0MywgNTEyIH0sIHsgNiwgMjQ0LCA1MTIgfSwgeyA3LCAyNDUsIDUxMiB9LCB7IDcsIDI0NiwgNTEyIH0sIHsgOCwgMjQ3LCA1MTIgfSwgCisgICB7IDYsIDI0OCwgNTEyIH0sIHsgNywgMjQ5LCA1MTIgfSwgeyA3LCAyNTAsIDUxMiB9LCB7IDgsIDI1MSwgNTEyIH0sIHsgNywgMjUyLCA1MTIgfSwgeyA4LCAyNTMsIDUxMiB9LCB7IDgsIDI1NCwgNTEyIH0sIHsgOSwgMjU1LCA1MTIgfSwgCisgICB7IDIsIDI1NiwgNTEyIH0sIHsgMywgMjU3LCA1MTIgfSwgeyAzLCAyNTgsIDUxMiB9LCB7IDQsIDI1OSwgNTEyIH0sIHsgMywgMjYwLCA1MTIgfSwgeyA0LCAyNjEsIDUxMiB9LCB7IDQsIDI2MiwgNTEyIH0sIHsgNSwgMjYzLCA1MTIgfSwgCisgICB7IDMsIDI2NCwgNTEyIH0sIHsgNCwgMjY1LCA1MTIgfSwgeyA0LCAyNjYsIDUxMiB9LCB7IDUsIDI2NywgNTEyIH0sIHsgNCwgMjY4LCA1MTIgfSwgeyA1LCAyNjksIDUxMiB9LCB7IDUsIDI3MCwgNTEyIH0sIHsgNiwgMjcxLCA1MTIgfSwgCisgICB7IDMsIDI3MiwgNTEyIH0sIHsgNCwgMjczLCA1MTIgfSwgeyA0LCAyNzQsIDUxMiB9LCB7IDUsIDI3NSwgNTEyIH0sIHsgNCwgMjc2LCA1MTIgfSwgeyA1LCAyNzcsIDUxMiB9LCB7IDUsIDI3OCwgNTEyIH0sIHsgNiwgMjc5LCA1MTIgfSwgCisgICB7IDQsIDI4MCwgNTEyIH0sIHsgNSwgMjgxLCA1MTIgfSwgeyA1LCAyODIsIDUxMiB9LCB7IDYsIDI4MywgNTEyIH0sIHsgNSwgMjg0LCA1MTIgfSwgeyA2LCAyODUsIDUxMiB9LCB7IDYsIDI4NiwgNTEyIH0sIHsgNywgMjg3LCA1MTIgfSwgCisgICB7IDMsIDI4OCwgNTEyIH0sIHsgNCwgMjg5LCA1MTIgfSwgeyA0LCAyOTAsIDUxMiB9LCB7IDUsIDI5MSwgNTEyIH0sIHsgNCwgMjkyLCA1MTIgfSwgeyA1LCAyOTMsIDUxMiB9LCB7IDUsIDI5NCwgNTEyIH0sIHsgNiwgMjk1LCA1MTIgfSwgCisgICB7IDQsIDI5NiwgNTEyIH0sIHsgNSwgMjk3LCA1MTIgfSwgeyA1LCAyOTgsIDUxMiB9LCB7IDYsIDI5OSwgNTEyIH0sIHsgNSwgMzAwLCA1MTIgfSwgeyA2LCAzMDEsIDUxMiB9LCB7IDYsIDMwMiwgNTEyIH0sIHsgNywgMzAzLCA1MTIgfSwgCisgICB7IDQsIDMwNCwgNTEyIH0sIHsgNSwgMzA1LCA1MTIgfSwgeyA1LCAzMDYsIDUxMiB9LCB7IDYsIDMwNywgNTEyIH0sIHsgNSwgMzA4LCA1MTIgfSwgeyA2LCAzMDksIDUxMiB9LCB7IDYsIDMxMCwgNTEyIH0sIHsgNywgMzExLCA1MTIgfSwgCisgICB7IDUsIDMxMiwgNTEyIH0sIHsgNiwgMzEzLCA1MTIgfSwgeyA2LCAzMTQsIDUxMiB9LCB7IDcsIDMxNSwgNTEyIH0sIHsgNiwgMzE2LCA1MTIgfSwgeyA3LCAzMTcsIDUxMiB9LCB7IDcsIDMxOCwgNTEyIH0sIHsgOCwgMzE5LCA1MTIgfSwgCisgICB7IDMsIDMyMCwgNTEyIH0sIHsgNCwgMzIxLCA1MTIgfSwgeyA0LCAzMjIsIDUxMiB9LCB7IDUsIDMyMywgNTEyIH0sIHsgNCwgMzI0LCA1MTIgfSwgeyA1LCAzMjUsIDUxMiB9LCB7IDUsIDMyNiwgNTEyIH0sIHsgNiwgMzI3LCA1MTIgfSwgCisgICB7IDQsIDMyOCwgNTEyIH0sIHsgNSwgMzI5LCA1MTIgfSwgeyA1LCAzMzAsIDUxMiB9LCB7IDYsIDMzMSwgNTEyIH0sIHsgNSwgMzMyLCA1MTIgfSwgeyA2LCAzMzMsIDUxMiB9LCB7IDYsIDMzNCwgNTEyIH0sIHsgNywgMzM1LCA1MTIgfSwgCisgICB7IDQsIDMzNiwgNTEyIH0sIHsgNSwgMzM3LCA1MTIgfSwgeyA1LCAzMzgsIDUxMiB9LCB7IDYsIDMzOSwgNTEyIH0sIHsgNSwgMzQwLCA1MTIgfSwgeyA2LCAzNDEsIDUxMiB9LCB7IDYsIDM0MiwgNTEyIH0sIHsgNywgMzQzLCA1MTIgfSwgCisgICB7IDUsIDM0NCwgNTEyIH0sIHsgNiwgMzQ1LCA1MTIgfSwgeyA2LCAzNDYsIDUxMiB9LCB7IDcsIDM0NywgNTEyIH0sIHsgNiwgMzQ4LCA1MTIgfSwgeyA3LCAzNDksIDUxMiB9LCB7IDcsIDM1MCwgNTEyIH0sIHsgOCwgMzUxLCA1MTIgfSwgCisgICB7IDQsIDM1MiwgNTEyIH0sIHsgNSwgMzUzLCA1MTIgfSwgeyA1LCAzNTQsIDUxMiB9LCB7IDYsIDM1NSwgNTEyIH0sIHsgNSwgMzU2LCA1MTIgfSwgeyA2LCAzNTcsIDUxMiB9LCB7IDYsIDM1OCwgNTEyIH0sIHsgNywgMzU5LCA1MTIgfSwgCisgICB7IDUsIDM2MCwgNTEyIH0sIHsgNiwgMzYxLCA1MTIgfSwgeyA2LCAzNjIsIDUxMiB9LCB7IDcsIDM2MywgNTEyIH0sIHsgNiwgMzY0LCA1MTIgfSwgeyA3LCAzNjUsIDUxMiB9LCB7IDcsIDM2NiwgNTEyIH0sIHsgOCwgMzY3LCA1MTIgfSwgCisgICB7IDUsIDM2OCwgNTEyIH0sIHsgNiwgMzY5LCA1MTIgfSwgeyA2LCAzNzAsIDUxMiB9LCB7IDcsIDM3MSwgNTEyIH0sIHsgNiwgMzcyLCA1MTIgfSwgeyA3LCAzNzMsIDUxMiB9LCB7IDcsIDM3NCwgNTEyIH0sIHsgOCwgMzc1LCA1MTIgfSwgCisgICB7IDYsIDM3NiwgNTEyIH0sIHsgNywgMzc3LCA1MTIgfSwgeyA3LCAzNzgsIDUxMiB9LCB7IDgsIDM3OSwgNTEyIH0sIHsgNywgMzgwLCA1MTIgfSwgeyA4LCAzODEsIDUxMiB9LCB7IDgsIDM4MiwgNTEyIH0sIHsgOSwgMzgzLCA1MTIgfSwgCisgICB7IDMsIDM4NCwgNTEyIH0sIHsgNCwgMzg1LCA1MTIgfSwgeyA0LCAzODYsIDUxMiB9LCB7IDUsIDM4NywgNTEyIH0sIHsgNCwgMzg4LCA1MTIgfSwgeyA1LCAzODksIDUxMiB9LCB7IDUsIDM5MCwgNTEyIH0sIHsgNiwgMzkxLCA1MTIgfSwgCisgICB7IDQsIDM5MiwgNTEyIH0sIHsgNSwgMzkzLCA1MTIgfSwgeyA1LCAzOTQsIDUxMiB9LCB7IDYsIDM5NSwgNTEyIH0sIHsgNSwgMzk2LCA1MTIgfSwgeyA2LCAzOTcsIDUxMiB9LCB7IDYsIDM5OCwgNTEyIH0sIHsgNywgMzk5LCA1MTIgfSwgCisgICB7IDQsIDQwMCwgNTEyIH0sIHsgNSwgNDAxLCA1MTIgfSwgeyA1LCA0MDIsIDUxMiB9LCB7IDYsIDQwMywgNTEyIH0sIHsgNSwgNDA0LCA1MTIgfSwgeyA2LCA0MDUsIDUxMiB9LCB7IDYsIDQwNiwgNTEyIH0sIHsgNywgNDA3LCA1MTIgfSwgCisgICB7IDUsIDQwOCwgNTEyIH0sIHsgNiwgNDA5LCA1MTIgfSwgeyA2LCA0MTAsIDUxMiB9LCB7IDcsIDQxMSwgNTEyIH0sIHsgNiwgNDEyLCA1MTIgfSwgeyA3LCA0MTMsIDUxMiB9LCB7IDcsIDQxNCwgNTEyIH0sIHsgOCwgNDE1LCA1MTIgfSwgCisgICB7IDQsIDQxNiwgNTEyIH0sIHsgNSwgNDE3LCA1MTIgfSwgeyA1LCA0MTgsIDUxMiB9LCB7IDYsIDQxOSwgNTEyIH0sIHsgNSwgNDIwLCA1MTIgfSwgeyA2LCA0MjEsIDUxMiB9LCB7IDYsIDQyMiwgNTEyIH0sIHsgNywgNDIzLCA1MTIgfSwgCisgICB7IDUsIDQyNCwgNTEyIH0sIHsgNiwgNDI1LCA1MTIgfSwgeyA2LCA0MjYsIDUxMiB9LCB7IDcsIDQyNywgNTEyIH0sIHsgNiwgNDI4LCA1MTIgfSwgeyA3LCA0MjksIDUxMiB9LCB7IDcsIDQzMCwgNTEyIH0sIHsgOCwgNDMxLCA1MTIgfSwgCisgICB7IDUsIDQzMiwgNTEyIH0sIHsgNiwgNDMzLCA1MTIgfSwgeyA2LCA0MzQsIDUxMiB9LCB7IDcsIDQzNSwgNTEyIH0sIHsgNiwgNDM2LCA1MTIgfSwgeyA3LCA0MzcsIDUxMiB9LCB7IDcsIDQzOCwgNTEyIH0sIHsgOCwgNDM5LCA1MTIgfSwgCisgICB7IDYsIDQ0MCwgNTEyIH0sIHsgNywgNDQxLCA1MTIgfSwgeyA3LCA0NDIsIDUxMiB9LCB7IDgsIDQ0MywgNTEyIH0sIHsgNywgNDQ0LCA1MTIgfSwgeyA4LCA0NDUsIDUxMiB9LCB7IDgsIDQ0NiwgNTEyIH0sIHsgOSwgNDQ3LCA1MTIgfSwgCisgICB7IDQsIDQ0OCwgNTEyIH0sIHsgNSwgNDQ5LCA1MTIgfSwgeyA1LCA0NTAsIDUxMiB9LCB7IDYsIDQ1MSwgNTEyIH0sIHsgNSwgNDUyLCA1MTIgfSwgeyA2LCA0NTMsIDUxMiB9LCB7IDYsIDQ1NCwgNTEyIH0sIHsgNywgNDU1LCA1MTIgfSwgCisgICB7IDUsIDQ1NiwgNTEyIH0sIHsgNiwgNDU3LCA1MTIgfSwgeyA2LCA0NTgsIDUxMiB9LCB7IDcsIDQ1OSwgNTEyIH0sIHsgNiwgNDYwLCA1MTIgfSwgeyA3LCA0NjEsIDUxMiB9LCB7IDcsIDQ2MiwgNTEyIH0sIHsgOCwgNDYzLCA1MTIgfSwgCisgICB7IDUsIDQ2NCwgNTEyIH0sIHsgNiwgNDY1LCA1MTIgfSwgeyA2LCA0NjYsIDUxMiB9LCB7IDcsIDQ2NywgNTEyIH0sIHsgNiwgNDY4LCA1MTIgfSwgeyA3LCA0NjksIDUxMiB9LCB7IDcsIDQ3MCwgNTEyIH0sIHsgOCwgNDcxLCA1MTIgfSwgCisgICB7IDYsIDQ3MiwgNTEyIH0sIHsgNywgNDczLCA1MTIgfSwgeyA3LCA0NzQsIDUxMiB9LCB7IDgsIDQ3NSwgNTEyIH0sIHsgNywgNDc2LCA1MTIgfSwgeyA4LCA0NzcsIDUxMiB9LCB7IDgsIDQ3OCwgNTEyIH0sIHsgOSwgNDc5LCA1MTIgfSwgCisgICB7IDUsIDQ4MCwgNTEyIH0sIHsgNiwgNDgxLCA1MTIgfSwgeyA2LCA0ODIsIDUxMiB9LCB7IDcsIDQ4MywgNTEyIH0sIHsgNiwgNDg0LCA1MTIgfSwgeyA3LCA0ODUsIDUxMiB9LCB7IDcsIDQ4NiwgNTEyIH0sIHsgOCwgNDg3LCA1MTIgfSwgCisgICB7IDYsIDQ4OCwgNTEyIH0sIHsgNywgNDg5LCA1MTIgfSwgeyA3LCA0OTAsIDUxMiB9LCB7IDgsIDQ5MSwgNTEyIH0sIHsgNywgNDkyLCA1MTIgfSwgeyA4LCA0OTMsIDUxMiB9LCB7IDgsIDQ5NCwgNTEyIH0sIHsgOSwgNDk1LCA1MTIgfSwgCisgICB7IDYsIDQ5NiwgNTEyIH0sIHsgNywgNDk3LCA1MTIgfSwgeyA3LCA0OTgsIDUxMiB9LCB7IDgsIDQ5OSwgNTEyIH0sIHsgNywgNTAwLCA1MTIgfSwgeyA4LCA1MDEsIDUxMiB9LCB7IDgsIDUwMiwgNTEyIH0sIHsgOSwgNTAzLCA1MTIgfSwgCisgICB7IDcsIDUwNCwgNTEyIH0sIHsgOCwgNTA1LCA1MTIgfSwgeyA4LCA1MDYsIDUxMiB9LCB7IDksIDUwNywgNTEyIH0sIHsgOCwgNTA4LCA1MTIgfSwgeyA5LCA1MDksIDUxMiB9LCB7IDksIDUxMCwgNTEyIH0sIHsgMTAsIDUxMSwgNTEyIH0sIAorI2lmIEZQX0xVVCA+IDEwCisgICB7IDEsIDAsIDAgfSwgeyAyLCAxLCAxMDI0IH0sIHsgMiwgMiwgMTAyNCB9LCB7IDMsIDMsIDEwMjQgfSwgeyAyLCA0LCAxMDI0IH0sIHsgMywgNSwgMTAyNCB9LCB7IDMsIDYsIDEwMjQgfSwgeyA0LCA3LCAxMDI0IH0sIAorICAgeyAyLCA4LCAxMDI0IH0sIHsgMywgOSwgMTAyNCB9LCB7IDMsIDEwLCAxMDI0IH0sIHsgNCwgMTEsIDEwMjQgfSwgeyAzLCAxMiwgMTAyNCB9LCB7IDQsIDEzLCAxMDI0IH0sIHsgNCwgMTQsIDEwMjQgfSwgeyA1LCAxNSwgMTAyNCB9LCAKKyAgIHsgMiwgMTYsIDEwMjQgfSwgeyAzLCAxNywgMTAyNCB9LCB7IDMsIDE4LCAxMDI0IH0sIHsgNCwgMTksIDEwMjQgfSwgeyAzLCAyMCwgMTAyNCB9LCB7IDQsIDIxLCAxMDI0IH0sIHsgNCwgMjIsIDEwMjQgfSwgeyA1LCAyMywgMTAyNCB9LCAKKyAgIHsgMywgMjQsIDEwMjQgfSwgeyA0LCAyNSwgMTAyNCB9LCB7IDQsIDI2LCAxMDI0IH0sIHsgNSwgMjcsIDEwMjQgfSwgeyA0LCAyOCwgMTAyNCB9LCB7IDUsIDI5LCAxMDI0IH0sIHsgNSwgMzAsIDEwMjQgfSwgeyA2LCAzMSwgMTAyNCB9LCAKKyAgIHsgMiwgMzIsIDEwMjQgfSwgeyAzLCAzMywgMTAyNCB9LCB7IDMsIDM0LCAxMDI0IH0sIHsgNCwgMzUsIDEwMjQgfSwgeyAzLCAzNiwgMTAyNCB9LCB7IDQsIDM3LCAxMDI0IH0sIHsgNCwgMzgsIDEwMjQgfSwgeyA1LCAzOSwgMTAyNCB9LCAKKyAgIHsgMywgNDAsIDEwMjQgfSwgeyA0LCA0MSwgMTAyNCB9LCB7IDQsIDQyLCAxMDI0IH0sIHsgNSwgNDMsIDEwMjQgfSwgeyA0LCA0NCwgMTAyNCB9LCB7IDUsIDQ1LCAxMDI0IH0sIHsgNSwgNDYsIDEwMjQgfSwgeyA2LCA0NywgMTAyNCB9LCAKKyAgIHsgMywgNDgsIDEwMjQgfSwgeyA0LCA0OSwgMTAyNCB9LCB7IDQsIDUwLCAxMDI0IH0sIHsgNSwgNTEsIDEwMjQgfSwgeyA0LCA1MiwgMTAyNCB9LCB7IDUsIDUzLCAxMDI0IH0sIHsgNSwgNTQsIDEwMjQgfSwgeyA2LCA1NSwgMTAyNCB9LCAKKyAgIHsgNCwgNTYsIDEwMjQgfSwgeyA1LCA1NywgMTAyNCB9LCB7IDUsIDU4LCAxMDI0IH0sIHsgNiwgNTksIDEwMjQgfSwgeyA1LCA2MCwgMTAyNCB9LCB7IDYsIDYxLCAxMDI0IH0sIHsgNiwgNjIsIDEwMjQgfSwgeyA3LCA2MywgMTAyNCB9LCAKKyAgIHsgMiwgNjQsIDEwMjQgfSwgeyAzLCA2NSwgMTAyNCB9LCB7IDMsIDY2LCAxMDI0IH0sIHsgNCwgNjcsIDEwMjQgfSwgeyAzLCA2OCwgMTAyNCB9LCB7IDQsIDY5LCAxMDI0IH0sIHsgNCwgNzAsIDEwMjQgfSwgeyA1LCA3MSwgMTAyNCB9LCAKKyAgIHsgMywgNzIsIDEwMjQgfSwgeyA0LCA3MywgMTAyNCB9LCB7IDQsIDc0LCAxMDI0IH0sIHsgNSwgNzUsIDEwMjQgfSwgeyA0LCA3NiwgMTAyNCB9LCB7IDUsIDc3LCAxMDI0IH0sIHsgNSwgNzgsIDEwMjQgfSwgeyA2LCA3OSwgMTAyNCB9LCAKKyAgIHsgMywgODAsIDEwMjQgfSwgeyA0LCA4MSwgMTAyNCB9LCB7IDQsIDgyLCAxMDI0IH0sIHsgNSwgODMsIDEwMjQgfSwgeyA0LCA4NCwgMTAyNCB9LCB7IDUsIDg1LCAxMDI0IH0sIHsgNSwgODYsIDEwMjQgfSwgeyA2LCA4NywgMTAyNCB9LCAKKyAgIHsgNCwgODgsIDEwMjQgfSwgeyA1LCA4OSwgMTAyNCB9LCB7IDUsIDkwLCAxMDI0IH0sIHsgNiwgOTEsIDEwMjQgfSwgeyA1LCA5MiwgMTAyNCB9LCB7IDYsIDkzLCAxMDI0IH0sIHsgNiwgOTQsIDEwMjQgfSwgeyA3LCA5NSwgMTAyNCB9LCAKKyAgIHsgMywgOTYsIDEwMjQgfSwgeyA0LCA5NywgMTAyNCB9LCB7IDQsIDk4LCAxMDI0IH0sIHsgNSwgOTksIDEwMjQgfSwgeyA0LCAxMDAsIDEwMjQgfSwgeyA1LCAxMDEsIDEwMjQgfSwgeyA1LCAxMDIsIDEwMjQgfSwgeyA2LCAxMDMsIDEwMjQgfSwgCisgICB7IDQsIDEwNCwgMTAyNCB9LCB7IDUsIDEwNSwgMTAyNCB9LCB7IDUsIDEwNiwgMTAyNCB9LCB7IDYsIDEwNywgMTAyNCB9LCB7IDUsIDEwOCwgMTAyNCB9LCB7IDYsIDEwOSwgMTAyNCB9LCB7IDYsIDExMCwgMTAyNCB9LCB7IDcsIDExMSwgMTAyNCB9LCAKKyAgIHsgNCwgMTEyLCAxMDI0IH0sIHsgNSwgMTEzLCAxMDI0IH0sIHsgNSwgMTE0LCAxMDI0IH0sIHsgNiwgMTE1LCAxMDI0IH0sIHsgNSwgMTE2LCAxMDI0IH0sIHsgNiwgMTE3LCAxMDI0IH0sIHsgNiwgMTE4LCAxMDI0IH0sIHsgNywgMTE5LCAxMDI0IH0sIAorICAgeyA1LCAxMjAsIDEwMjQgfSwgeyA2LCAxMjEsIDEwMjQgfSwgeyA2LCAxMjIsIDEwMjQgfSwgeyA3LCAxMjMsIDEwMjQgfSwgeyA2LCAxMjQsIDEwMjQgfSwgeyA3LCAxMjUsIDEwMjQgfSwgeyA3LCAxMjYsIDEwMjQgfSwgeyA4LCAxMjcsIDEwMjQgfSwgCisgICB7IDIsIDEyOCwgMTAyNCB9LCB7IDMsIDEyOSwgMTAyNCB9LCB7IDMsIDEzMCwgMTAyNCB9LCB7IDQsIDEzMSwgMTAyNCB9LCB7IDMsIDEzMiwgMTAyNCB9LCB7IDQsIDEzMywgMTAyNCB9LCB7IDQsIDEzNCwgMTAyNCB9LCB7IDUsIDEzNSwgMTAyNCB9LCAKKyAgIHsgMywgMTM2LCAxMDI0IH0sIHsgNCwgMTM3LCAxMDI0IH0sIHsgNCwgMTM4LCAxMDI0IH0sIHsgNSwgMTM5LCAxMDI0IH0sIHsgNCwgMTQwLCAxMDI0IH0sIHsgNSwgMTQxLCAxMDI0IH0sIHsgNSwgMTQyLCAxMDI0IH0sIHsgNiwgMTQzLCAxMDI0IH0sIAorICAgeyAzLCAxNDQsIDEwMjQgfSwgeyA0LCAxNDUsIDEwMjQgfSwgeyA0LCAxNDYsIDEwMjQgfSwgeyA1LCAxNDcsIDEwMjQgfSwgeyA0LCAxNDgsIDEwMjQgfSwgeyA1LCAxNDksIDEwMjQgfSwgeyA1LCAxNTAsIDEwMjQgfSwgeyA2LCAxNTEsIDEwMjQgfSwgCisgICB7IDQsIDE1MiwgMTAyNCB9LCB7IDUsIDE1MywgMTAyNCB9LCB7IDUsIDE1NCwgMTAyNCB9LCB7IDYsIDE1NSwgMTAyNCB9LCB7IDUsIDE1NiwgMTAyNCB9LCB7IDYsIDE1NywgMTAyNCB9LCB7IDYsIDE1OCwgMTAyNCB9LCB7IDcsIDE1OSwgMTAyNCB9LCAKKyAgIHsgMywgMTYwLCAxMDI0IH0sIHsgNCwgMTYxLCAxMDI0IH0sIHsgNCwgMTYyLCAxMDI0IH0sIHsgNSwgMTYzLCAxMDI0IH0sIHsgNCwgMTY0LCAxMDI0IH0sIHsgNSwgMTY1LCAxMDI0IH0sIHsgNSwgMTY2LCAxMDI0IH0sIHsgNiwgMTY3LCAxMDI0IH0sIAorICAgeyA0LCAxNjgsIDEwMjQgfSwgeyA1LCAxNjksIDEwMjQgfSwgeyA1LCAxNzAsIDEwMjQgfSwgeyA2LCAxNzEsIDEwMjQgfSwgeyA1LCAxNzIsIDEwMjQgfSwgeyA2LCAxNzMsIDEwMjQgfSwgeyA2LCAxNzQsIDEwMjQgfSwgeyA3LCAxNzUsIDEwMjQgfSwgCisgICB7IDQsIDE3NiwgMTAyNCB9LCB7IDUsIDE3NywgMTAyNCB9LCB7IDUsIDE3OCwgMTAyNCB9LCB7IDYsIDE3OSwgMTAyNCB9LCB7IDUsIDE4MCwgMTAyNCB9LCB7IDYsIDE4MSwgMTAyNCB9LCB7IDYsIDE4MiwgMTAyNCB9LCB7IDcsIDE4MywgMTAyNCB9LCAKKyAgIHsgNSwgMTg0LCAxMDI0IH0sIHsgNiwgMTg1LCAxMDI0IH0sIHsgNiwgMTg2LCAxMDI0IH0sIHsgNywgMTg3LCAxMDI0IH0sIHsgNiwgMTg4LCAxMDI0IH0sIHsgNywgMTg5LCAxMDI0IH0sIHsgNywgMTkwLCAxMDI0IH0sIHsgOCwgMTkxLCAxMDI0IH0sIAorICAgeyAzLCAxOTIsIDEwMjQgfSwgeyA0LCAxOTMsIDEwMjQgfSwgeyA0LCAxOTQsIDEwMjQgfSwgeyA1LCAxOTUsIDEwMjQgfSwgeyA0LCAxOTYsIDEwMjQgfSwgeyA1LCAxOTcsIDEwMjQgfSwgeyA1LCAxOTgsIDEwMjQgfSwgeyA2LCAxOTksIDEwMjQgfSwgCisgICB7IDQsIDIwMCwgMTAyNCB9LCB7IDUsIDIwMSwgMTAyNCB9LCB7IDUsIDIwMiwgMTAyNCB9LCB7IDYsIDIwMywgMTAyNCB9LCB7IDUsIDIwNCwgMTAyNCB9LCB7IDYsIDIwNSwgMTAyNCB9LCB7IDYsIDIwNiwgMTAyNCB9LCB7IDcsIDIwNywgMTAyNCB9LCAKKyAgIHsgNCwgMjA4LCAxMDI0IH0sIHsgNSwgMjA5LCAxMDI0IH0sIHsgNSwgMjEwLCAxMDI0IH0sIHsgNiwgMjExLCAxMDI0IH0sIHsgNSwgMjEyLCAxMDI0IH0sIHsgNiwgMjEzLCAxMDI0IH0sIHsgNiwgMjE0LCAxMDI0IH0sIHsgNywgMjE1LCAxMDI0IH0sIAorICAgeyA1LCAyMTYsIDEwMjQgfSwgeyA2LCAyMTcsIDEwMjQgfSwgeyA2LCAyMTgsIDEwMjQgfSwgeyA3LCAyMTksIDEwMjQgfSwgeyA2LCAyMjAsIDEwMjQgfSwgeyA3LCAyMjEsIDEwMjQgfSwgeyA3LCAyMjIsIDEwMjQgfSwgeyA4LCAyMjMsIDEwMjQgfSwgCisgICB7IDQsIDIyNCwgMTAyNCB9LCB7IDUsIDIyNSwgMTAyNCB9LCB7IDUsIDIyNiwgMTAyNCB9LCB7IDYsIDIyNywgMTAyNCB9LCB7IDUsIDIyOCwgMTAyNCB9LCB7IDYsIDIyOSwgMTAyNCB9LCB7IDYsIDIzMCwgMTAyNCB9LCB7IDcsIDIzMSwgMTAyNCB9LCAKKyAgIHsgNSwgMjMyLCAxMDI0IH0sIHsgNiwgMjMzLCAxMDI0IH0sIHsgNiwgMjM0LCAxMDI0IH0sIHsgNywgMjM1LCAxMDI0IH0sIHsgNiwgMjM2LCAxMDI0IH0sIHsgNywgMjM3LCAxMDI0IH0sIHsgNywgMjM4LCAxMDI0IH0sIHsgOCwgMjM5LCAxMDI0IH0sIAorICAgeyA1LCAyNDAsIDEwMjQgfSwgeyA2LCAyNDEsIDEwMjQgfSwgeyA2LCAyNDIsIDEwMjQgfSwgeyA3LCAyNDMsIDEwMjQgfSwgeyA2LCAyNDQsIDEwMjQgfSwgeyA3LCAyNDUsIDEwMjQgfSwgeyA3LCAyNDYsIDEwMjQgfSwgeyA4LCAyNDcsIDEwMjQgfSwgCisgICB7IDYsIDI0OCwgMTAyNCB9LCB7IDcsIDI0OSwgMTAyNCB9LCB7IDcsIDI1MCwgMTAyNCB9LCB7IDgsIDI1MSwgMTAyNCB9LCB7IDcsIDI1MiwgMTAyNCB9LCB7IDgsIDI1MywgMTAyNCB9LCB7IDgsIDI1NCwgMTAyNCB9LCB7IDksIDI1NSwgMTAyNCB9LCAKKyAgIHsgMiwgMjU2LCAxMDI0IH0sIHsgMywgMjU3LCAxMDI0IH0sIHsgMywgMjU4LCAxMDI0IH0sIHsgNCwgMjU5LCAxMDI0IH0sIHsgMywgMjYwLCAxMDI0IH0sIHsgNCwgMjYxLCAxMDI0IH0sIHsgNCwgMjYyLCAxMDI0IH0sIHsgNSwgMjYzLCAxMDI0IH0sIAorICAgeyAzLCAyNjQsIDEwMjQgfSwgeyA0LCAyNjUsIDEwMjQgfSwgeyA0LCAyNjYsIDEwMjQgfSwgeyA1LCAyNjcsIDEwMjQgfSwgeyA0LCAyNjgsIDEwMjQgfSwgeyA1LCAyNjksIDEwMjQgfSwgeyA1LCAyNzAsIDEwMjQgfSwgeyA2LCAyNzEsIDEwMjQgfSwgCisgICB7IDMsIDI3MiwgMTAyNCB9LCB7IDQsIDI3MywgMTAyNCB9LCB7IDQsIDI3NCwgMTAyNCB9LCB7IDUsIDI3NSwgMTAyNCB9LCB7IDQsIDI3NiwgMTAyNCB9LCB7IDUsIDI3NywgMTAyNCB9LCB7IDUsIDI3OCwgMTAyNCB9LCB7IDYsIDI3OSwgMTAyNCB9LCAKKyAgIHsgNCwgMjgwLCAxMDI0IH0sIHsgNSwgMjgxLCAxMDI0IH0sIHsgNSwgMjgyLCAxMDI0IH0sIHsgNiwgMjgzLCAxMDI0IH0sIHsgNSwgMjg0LCAxMDI0IH0sIHsgNiwgMjg1LCAxMDI0IH0sIHsgNiwgMjg2LCAxMDI0IH0sIHsgNywgMjg3LCAxMDI0IH0sIAorICAgeyAzLCAyODgsIDEwMjQgfSwgeyA0LCAyODksIDEwMjQgfSwgeyA0LCAyOTAsIDEwMjQgfSwgeyA1LCAyOTEsIDEwMjQgfSwgeyA0LCAyOTIsIDEwMjQgfSwgeyA1LCAyOTMsIDEwMjQgfSwgeyA1LCAyOTQsIDEwMjQgfSwgeyA2LCAyOTUsIDEwMjQgfSwgCisgICB7IDQsIDI5NiwgMTAyNCB9LCB7IDUsIDI5NywgMTAyNCB9LCB7IDUsIDI5OCwgMTAyNCB9LCB7IDYsIDI5OSwgMTAyNCB9LCB7IDUsIDMwMCwgMTAyNCB9LCB7IDYsIDMwMSwgMTAyNCB9LCB7IDYsIDMwMiwgMTAyNCB9LCB7IDcsIDMwMywgMTAyNCB9LCAKKyAgIHsgNCwgMzA0LCAxMDI0IH0sIHsgNSwgMzA1LCAxMDI0IH0sIHsgNSwgMzA2LCAxMDI0IH0sIHsgNiwgMzA3LCAxMDI0IH0sIHsgNSwgMzA4LCAxMDI0IH0sIHsgNiwgMzA5LCAxMDI0IH0sIHsgNiwgMzEwLCAxMDI0IH0sIHsgNywgMzExLCAxMDI0IH0sIAorICAgeyA1LCAzMTIsIDEwMjQgfSwgeyA2LCAzMTMsIDEwMjQgfSwgeyA2LCAzMTQsIDEwMjQgfSwgeyA3LCAzMTUsIDEwMjQgfSwgeyA2LCAzMTYsIDEwMjQgfSwgeyA3LCAzMTcsIDEwMjQgfSwgeyA3LCAzMTgsIDEwMjQgfSwgeyA4LCAzMTksIDEwMjQgfSwgCisgICB7IDMsIDMyMCwgMTAyNCB9LCB7IDQsIDMyMSwgMTAyNCB9LCB7IDQsIDMyMiwgMTAyNCB9LCB7IDUsIDMyMywgMTAyNCB9LCB7IDQsIDMyNCwgMTAyNCB9LCB7IDUsIDMyNSwgMTAyNCB9LCB7IDUsIDMyNiwgMTAyNCB9LCB7IDYsIDMyNywgMTAyNCB9LCAKKyAgIHsgNCwgMzI4LCAxMDI0IH0sIHsgNSwgMzI5LCAxMDI0IH0sIHsgNSwgMzMwLCAxMDI0IH0sIHsgNiwgMzMxLCAxMDI0IH0sIHsgNSwgMzMyLCAxMDI0IH0sIHsgNiwgMzMzLCAxMDI0IH0sIHsgNiwgMzM0LCAxMDI0IH0sIHsgNywgMzM1LCAxMDI0IH0sIAorICAgeyA0LCAzMzYsIDEwMjQgfSwgeyA1LCAzMzcsIDEwMjQgfSwgeyA1LCAzMzgsIDEwMjQgfSwgeyA2LCAzMzksIDEwMjQgfSwgeyA1LCAzNDAsIDEwMjQgfSwgeyA2LCAzNDEsIDEwMjQgfSwgeyA2LCAzNDIsIDEwMjQgfSwgeyA3LCAzNDMsIDEwMjQgfSwgCisgICB7IDUsIDM0NCwgMTAyNCB9LCB7IDYsIDM0NSwgMTAyNCB9LCB7IDYsIDM0NiwgMTAyNCB9LCB7IDcsIDM0NywgMTAyNCB9LCB7IDYsIDM0OCwgMTAyNCB9LCB7IDcsIDM0OSwgMTAyNCB9LCB7IDcsIDM1MCwgMTAyNCB9LCB7IDgsIDM1MSwgMTAyNCB9LCAKKyAgIHsgNCwgMzUyLCAxMDI0IH0sIHsgNSwgMzUzLCAxMDI0IH0sIHsgNSwgMzU0LCAxMDI0IH0sIHsgNiwgMzU1LCAxMDI0IH0sIHsgNSwgMzU2LCAxMDI0IH0sIHsgNiwgMzU3LCAxMDI0IH0sIHsgNiwgMzU4LCAxMDI0IH0sIHsgNywgMzU5LCAxMDI0IH0sIAorICAgeyA1LCAzNjAsIDEwMjQgfSwgeyA2LCAzNjEsIDEwMjQgfSwgeyA2LCAzNjIsIDEwMjQgfSwgeyA3LCAzNjMsIDEwMjQgfSwgeyA2LCAzNjQsIDEwMjQgfSwgeyA3LCAzNjUsIDEwMjQgfSwgeyA3LCAzNjYsIDEwMjQgfSwgeyA4LCAzNjcsIDEwMjQgfSwgCisgICB7IDUsIDM2OCwgMTAyNCB9LCB7IDYsIDM2OSwgMTAyNCB9LCB7IDYsIDM3MCwgMTAyNCB9LCB7IDcsIDM3MSwgMTAyNCB9LCB7IDYsIDM3MiwgMTAyNCB9LCB7IDcsIDM3MywgMTAyNCB9LCB7IDcsIDM3NCwgMTAyNCB9LCB7IDgsIDM3NSwgMTAyNCB9LCAKKyAgIHsgNiwgMzc2LCAxMDI0IH0sIHsgNywgMzc3LCAxMDI0IH0sIHsgNywgMzc4LCAxMDI0IH0sIHsgOCwgMzc5LCAxMDI0IH0sIHsgNywgMzgwLCAxMDI0IH0sIHsgOCwgMzgxLCAxMDI0IH0sIHsgOCwgMzgyLCAxMDI0IH0sIHsgOSwgMzgzLCAxMDI0IH0sIAorICAgeyAzLCAzODQsIDEwMjQgfSwgeyA0LCAzODUsIDEwMjQgfSwgeyA0LCAzODYsIDEwMjQgfSwgeyA1LCAzODcsIDEwMjQgfSwgeyA0LCAzODgsIDEwMjQgfSwgeyA1LCAzODksIDEwMjQgfSwgeyA1LCAzOTAsIDEwMjQgfSwgeyA2LCAzOTEsIDEwMjQgfSwgCisgICB7IDQsIDM5MiwgMTAyNCB9LCB7IDUsIDM5MywgMTAyNCB9LCB7IDUsIDM5NCwgMTAyNCB9LCB7IDYsIDM5NSwgMTAyNCB9LCB7IDUsIDM5NiwgMTAyNCB9LCB7IDYsIDM5NywgMTAyNCB9LCB7IDYsIDM5OCwgMTAyNCB9LCB7IDcsIDM5OSwgMTAyNCB9LCAKKyAgIHsgNCwgNDAwLCAxMDI0IH0sIHsgNSwgNDAxLCAxMDI0IH0sIHsgNSwgNDAyLCAxMDI0IH0sIHsgNiwgNDAzLCAxMDI0IH0sIHsgNSwgNDA0LCAxMDI0IH0sIHsgNiwgNDA1LCAxMDI0IH0sIHsgNiwgNDA2LCAxMDI0IH0sIHsgNywgNDA3LCAxMDI0IH0sIAorICAgeyA1LCA0MDgsIDEwMjQgfSwgeyA2LCA0MDksIDEwMjQgfSwgeyA2LCA0MTAsIDEwMjQgfSwgeyA3LCA0MTEsIDEwMjQgfSwgeyA2LCA0MTIsIDEwMjQgfSwgeyA3LCA0MTMsIDEwMjQgfSwgeyA3LCA0MTQsIDEwMjQgfSwgeyA4LCA0MTUsIDEwMjQgfSwgCisgICB7IDQsIDQxNiwgMTAyNCB9LCB7IDUsIDQxNywgMTAyNCB9LCB7IDUsIDQxOCwgMTAyNCB9LCB7IDYsIDQxOSwgMTAyNCB9LCB7IDUsIDQyMCwgMTAyNCB9LCB7IDYsIDQyMSwgMTAyNCB9LCB7IDYsIDQyMiwgMTAyNCB9LCB7IDcsIDQyMywgMTAyNCB9LCAKKyAgIHsgNSwgNDI0LCAxMDI0IH0sIHsgNiwgNDI1LCAxMDI0IH0sIHsgNiwgNDI2LCAxMDI0IH0sIHsgNywgNDI3LCAxMDI0IH0sIHsgNiwgNDI4LCAxMDI0IH0sIHsgNywgNDI5LCAxMDI0IH0sIHsgNywgNDMwLCAxMDI0IH0sIHsgOCwgNDMxLCAxMDI0IH0sIAorICAgeyA1LCA0MzIsIDEwMjQgfSwgeyA2LCA0MzMsIDEwMjQgfSwgeyA2LCA0MzQsIDEwMjQgfSwgeyA3LCA0MzUsIDEwMjQgfSwgeyA2LCA0MzYsIDEwMjQgfSwgeyA3LCA0MzcsIDEwMjQgfSwgeyA3LCA0MzgsIDEwMjQgfSwgeyA4LCA0MzksIDEwMjQgfSwgCisgICB7IDYsIDQ0MCwgMTAyNCB9LCB7IDcsIDQ0MSwgMTAyNCB9LCB7IDcsIDQ0MiwgMTAyNCB9LCB7IDgsIDQ0MywgMTAyNCB9LCB7IDcsIDQ0NCwgMTAyNCB9LCB7IDgsIDQ0NSwgMTAyNCB9LCB7IDgsIDQ0NiwgMTAyNCB9LCB7IDksIDQ0NywgMTAyNCB9LCAKKyAgIHsgNCwgNDQ4LCAxMDI0IH0sIHsgNSwgNDQ5LCAxMDI0IH0sIHsgNSwgNDUwLCAxMDI0IH0sIHsgNiwgNDUxLCAxMDI0IH0sIHsgNSwgNDUyLCAxMDI0IH0sIHsgNiwgNDUzLCAxMDI0IH0sIHsgNiwgNDU0LCAxMDI0IH0sIHsgNywgNDU1LCAxMDI0IH0sIAorICAgeyA1LCA0NTYsIDEwMjQgfSwgeyA2LCA0NTcsIDEwMjQgfSwgeyA2LCA0NTgsIDEwMjQgfSwgeyA3LCA0NTksIDEwMjQgfSwgeyA2LCA0NjAsIDEwMjQgfSwgeyA3LCA0NjEsIDEwMjQgfSwgeyA3LCA0NjIsIDEwMjQgfSwgeyA4LCA0NjMsIDEwMjQgfSwgCisgICB7IDUsIDQ2NCwgMTAyNCB9LCB7IDYsIDQ2NSwgMTAyNCB9LCB7IDYsIDQ2NiwgMTAyNCB9LCB7IDcsIDQ2NywgMTAyNCB9LCB7IDYsIDQ2OCwgMTAyNCB9LCB7IDcsIDQ2OSwgMTAyNCB9LCB7IDcsIDQ3MCwgMTAyNCB9LCB7IDgsIDQ3MSwgMTAyNCB9LCAKKyAgIHsgNiwgNDcyLCAxMDI0IH0sIHsgNywgNDczLCAxMDI0IH0sIHsgNywgNDc0LCAxMDI0IH0sIHsgOCwgNDc1LCAxMDI0IH0sIHsgNywgNDc2LCAxMDI0IH0sIHsgOCwgNDc3LCAxMDI0IH0sIHsgOCwgNDc4LCAxMDI0IH0sIHsgOSwgNDc5LCAxMDI0IH0sIAorICAgeyA1LCA0ODAsIDEwMjQgfSwgeyA2LCA0ODEsIDEwMjQgfSwgeyA2LCA0ODIsIDEwMjQgfSwgeyA3LCA0ODMsIDEwMjQgfSwgeyA2LCA0ODQsIDEwMjQgfSwgeyA3LCA0ODUsIDEwMjQgfSwgeyA3LCA0ODYsIDEwMjQgfSwgeyA4LCA0ODcsIDEwMjQgfSwgCisgICB7IDYsIDQ4OCwgMTAyNCB9LCB7IDcsIDQ4OSwgMTAyNCB9LCB7IDcsIDQ5MCwgMTAyNCB9LCB7IDgsIDQ5MSwgMTAyNCB9LCB7IDcsIDQ5MiwgMTAyNCB9LCB7IDgsIDQ5MywgMTAyNCB9LCB7IDgsIDQ5NCwgMTAyNCB9LCB7IDksIDQ5NSwgMTAyNCB9LCAKKyAgIHsgNiwgNDk2LCAxMDI0IH0sIHsgNywgNDk3LCAxMDI0IH0sIHsgNywgNDk4LCAxMDI0IH0sIHsgOCwgNDk5LCAxMDI0IH0sIHsgNywgNTAwLCAxMDI0IH0sIHsgOCwgNTAxLCAxMDI0IH0sIHsgOCwgNTAyLCAxMDI0IH0sIHsgOSwgNTAzLCAxMDI0IH0sIAorICAgeyA3LCA1MDQsIDEwMjQgfSwgeyA4LCA1MDUsIDEwMjQgfSwgeyA4LCA1MDYsIDEwMjQgfSwgeyA5LCA1MDcsIDEwMjQgfSwgeyA4LCA1MDgsIDEwMjQgfSwgeyA5LCA1MDksIDEwMjQgfSwgeyA5LCA1MTAsIDEwMjQgfSwgeyAxMCwgNTExLCAxMDI0IH0sIAorICAgeyAyLCA1MTIsIDEwMjQgfSwgeyAzLCA1MTMsIDEwMjQgfSwgeyAzLCA1MTQsIDEwMjQgfSwgeyA0LCA1MTUsIDEwMjQgfSwgeyAzLCA1MTYsIDEwMjQgfSwgeyA0LCA1MTcsIDEwMjQgfSwgeyA0LCA1MTgsIDEwMjQgfSwgeyA1LCA1MTksIDEwMjQgfSwgCisgICB7IDMsIDUyMCwgMTAyNCB9LCB7IDQsIDUyMSwgMTAyNCB9LCB7IDQsIDUyMiwgMTAyNCB9LCB7IDUsIDUyMywgMTAyNCB9LCB7IDQsIDUyNCwgMTAyNCB9LCB7IDUsIDUyNSwgMTAyNCB9LCB7IDUsIDUyNiwgMTAyNCB9LCB7IDYsIDUyNywgMTAyNCB9LCAKKyAgIHsgMywgNTI4LCAxMDI0IH0sIHsgNCwgNTI5LCAxMDI0IH0sIHsgNCwgNTMwLCAxMDI0IH0sIHsgNSwgNTMxLCAxMDI0IH0sIHsgNCwgNTMyLCAxMDI0IH0sIHsgNSwgNTMzLCAxMDI0IH0sIHsgNSwgNTM0LCAxMDI0IH0sIHsgNiwgNTM1LCAxMDI0IH0sIAorICAgeyA0LCA1MzYsIDEwMjQgfSwgeyA1LCA1MzcsIDEwMjQgfSwgeyA1LCA1MzgsIDEwMjQgfSwgeyA2LCA1MzksIDEwMjQgfSwgeyA1LCA1NDAsIDEwMjQgfSwgeyA2LCA1NDEsIDEwMjQgfSwgeyA2LCA1NDIsIDEwMjQgfSwgeyA3LCA1NDMsIDEwMjQgfSwgCisgICB7IDMsIDU0NCwgMTAyNCB9LCB7IDQsIDU0NSwgMTAyNCB9LCB7IDQsIDU0NiwgMTAyNCB9LCB7IDUsIDU0NywgMTAyNCB9LCB7IDQsIDU0OCwgMTAyNCB9LCB7IDUsIDU0OSwgMTAyNCB9LCB7IDUsIDU1MCwgMTAyNCB9LCB7IDYsIDU1MSwgMTAyNCB9LCAKKyAgIHsgNCwgNTUyLCAxMDI0IH0sIHsgNSwgNTUzLCAxMDI0IH0sIHsgNSwgNTU0LCAxMDI0IH0sIHsgNiwgNTU1LCAxMDI0IH0sIHsgNSwgNTU2LCAxMDI0IH0sIHsgNiwgNTU3LCAxMDI0IH0sIHsgNiwgNTU4LCAxMDI0IH0sIHsgNywgNTU5LCAxMDI0IH0sIAorICAgeyA0LCA1NjAsIDEwMjQgfSwgeyA1LCA1NjEsIDEwMjQgfSwgeyA1LCA1NjIsIDEwMjQgfSwgeyA2LCA1NjMsIDEwMjQgfSwgeyA1LCA1NjQsIDEwMjQgfSwgeyA2LCA1NjUsIDEwMjQgfSwgeyA2LCA1NjYsIDEwMjQgfSwgeyA3LCA1NjcsIDEwMjQgfSwgCisgICB7IDUsIDU2OCwgMTAyNCB9LCB7IDYsIDU2OSwgMTAyNCB9LCB7IDYsIDU3MCwgMTAyNCB9LCB7IDcsIDU3MSwgMTAyNCB9LCB7IDYsIDU3MiwgMTAyNCB9LCB7IDcsIDU3MywgMTAyNCB9LCB7IDcsIDU3NCwgMTAyNCB9LCB7IDgsIDU3NSwgMTAyNCB9LCAKKyAgIHsgMywgNTc2LCAxMDI0IH0sIHsgNCwgNTc3LCAxMDI0IH0sIHsgNCwgNTc4LCAxMDI0IH0sIHsgNSwgNTc5LCAxMDI0IH0sIHsgNCwgNTgwLCAxMDI0IH0sIHsgNSwgNTgxLCAxMDI0IH0sIHsgNSwgNTgyLCAxMDI0IH0sIHsgNiwgNTgzLCAxMDI0IH0sIAorICAgeyA0LCA1ODQsIDEwMjQgfSwgeyA1LCA1ODUsIDEwMjQgfSwgeyA1LCA1ODYsIDEwMjQgfSwgeyA2LCA1ODcsIDEwMjQgfSwgeyA1LCA1ODgsIDEwMjQgfSwgeyA2LCA1ODksIDEwMjQgfSwgeyA2LCA1OTAsIDEwMjQgfSwgeyA3LCA1OTEsIDEwMjQgfSwgCisgICB7IDQsIDU5MiwgMTAyNCB9LCB7IDUsIDU5MywgMTAyNCB9LCB7IDUsIDU5NCwgMTAyNCB9LCB7IDYsIDU5NSwgMTAyNCB9LCB7IDUsIDU5NiwgMTAyNCB9LCB7IDYsIDU5NywgMTAyNCB9LCB7IDYsIDU5OCwgMTAyNCB9LCB7IDcsIDU5OSwgMTAyNCB9LCAKKyAgIHsgNSwgNjAwLCAxMDI0IH0sIHsgNiwgNjAxLCAxMDI0IH0sIHsgNiwgNjAyLCAxMDI0IH0sIHsgNywgNjAzLCAxMDI0IH0sIHsgNiwgNjA0LCAxMDI0IH0sIHsgNywgNjA1LCAxMDI0IH0sIHsgNywgNjA2LCAxMDI0IH0sIHsgOCwgNjA3LCAxMDI0IH0sIAorICAgeyA0LCA2MDgsIDEwMjQgfSwgeyA1LCA2MDksIDEwMjQgfSwgeyA1LCA2MTAsIDEwMjQgfSwgeyA2LCA2MTEsIDEwMjQgfSwgeyA1LCA2MTIsIDEwMjQgfSwgeyA2LCA2MTMsIDEwMjQgfSwgeyA2LCA2MTQsIDEwMjQgfSwgeyA3LCA2MTUsIDEwMjQgfSwgCisgICB7IDUsIDYxNiwgMTAyNCB9LCB7IDYsIDYxNywgMTAyNCB9LCB7IDYsIDYxOCwgMTAyNCB9LCB7IDcsIDYxOSwgMTAyNCB9LCB7IDYsIDYyMCwgMTAyNCB9LCB7IDcsIDYyMSwgMTAyNCB9LCB7IDcsIDYyMiwgMTAyNCB9LCB7IDgsIDYyMywgMTAyNCB9LCAKKyAgIHsgNSwgNjI0LCAxMDI0IH0sIHsgNiwgNjI1LCAxMDI0IH0sIHsgNiwgNjI2LCAxMDI0IH0sIHsgNywgNjI3LCAxMDI0IH0sIHsgNiwgNjI4LCAxMDI0IH0sIHsgNywgNjI5LCAxMDI0IH0sIHsgNywgNjMwLCAxMDI0IH0sIHsgOCwgNjMxLCAxMDI0IH0sIAorICAgeyA2LCA2MzIsIDEwMjQgfSwgeyA3LCA2MzMsIDEwMjQgfSwgeyA3LCA2MzQsIDEwMjQgfSwgeyA4LCA2MzUsIDEwMjQgfSwgeyA3LCA2MzYsIDEwMjQgfSwgeyA4LCA2MzcsIDEwMjQgfSwgeyA4LCA2MzgsIDEwMjQgfSwgeyA5LCA2MzksIDEwMjQgfSwgCisgICB7IDMsIDY0MCwgMTAyNCB9LCB7IDQsIDY0MSwgMTAyNCB9LCB7IDQsIDY0MiwgMTAyNCB9LCB7IDUsIDY0MywgMTAyNCB9LCB7IDQsIDY0NCwgMTAyNCB9LCB7IDUsIDY0NSwgMTAyNCB9LCB7IDUsIDY0NiwgMTAyNCB9LCB7IDYsIDY0NywgMTAyNCB9LCAKKyAgIHsgNCwgNjQ4LCAxMDI0IH0sIHsgNSwgNjQ5LCAxMDI0IH0sIHsgNSwgNjUwLCAxMDI0IH0sIHsgNiwgNjUxLCAxMDI0IH0sIHsgNSwgNjUyLCAxMDI0IH0sIHsgNiwgNjUzLCAxMDI0IH0sIHsgNiwgNjU0LCAxMDI0IH0sIHsgNywgNjU1LCAxMDI0IH0sIAorICAgeyA0LCA2NTYsIDEwMjQgfSwgeyA1LCA2NTcsIDEwMjQgfSwgeyA1LCA2NTgsIDEwMjQgfSwgeyA2LCA2NTksIDEwMjQgfSwgeyA1LCA2NjAsIDEwMjQgfSwgeyA2LCA2NjEsIDEwMjQgfSwgeyA2LCA2NjIsIDEwMjQgfSwgeyA3LCA2NjMsIDEwMjQgfSwgCisgICB7IDUsIDY2NCwgMTAyNCB9LCB7IDYsIDY2NSwgMTAyNCB9LCB7IDYsIDY2NiwgMTAyNCB9LCB7IDcsIDY2NywgMTAyNCB9LCB7IDYsIDY2OCwgMTAyNCB9LCB7IDcsIDY2OSwgMTAyNCB9LCB7IDcsIDY3MCwgMTAyNCB9LCB7IDgsIDY3MSwgMTAyNCB9LCAKKyAgIHsgNCwgNjcyLCAxMDI0IH0sIHsgNSwgNjczLCAxMDI0IH0sIHsgNSwgNjc0LCAxMDI0IH0sIHsgNiwgNjc1LCAxMDI0IH0sIHsgNSwgNjc2LCAxMDI0IH0sIHsgNiwgNjc3LCAxMDI0IH0sIHsgNiwgNjc4LCAxMDI0IH0sIHsgNywgNjc5LCAxMDI0IH0sIAorICAgeyA1LCA2ODAsIDEwMjQgfSwgeyA2LCA2ODEsIDEwMjQgfSwgeyA2LCA2ODIsIDEwMjQgfSwgeyA3LCA2ODMsIDEwMjQgfSwgeyA2LCA2ODQsIDEwMjQgfSwgeyA3LCA2ODUsIDEwMjQgfSwgeyA3LCA2ODYsIDEwMjQgfSwgeyA4LCA2ODcsIDEwMjQgfSwgCisgICB7IDUsIDY4OCwgMTAyNCB9LCB7IDYsIDY4OSwgMTAyNCB9LCB7IDYsIDY5MCwgMTAyNCB9LCB7IDcsIDY5MSwgMTAyNCB9LCB7IDYsIDY5MiwgMTAyNCB9LCB7IDcsIDY5MywgMTAyNCB9LCB7IDcsIDY5NCwgMTAyNCB9LCB7IDgsIDY5NSwgMTAyNCB9LCAKKyAgIHsgNiwgNjk2LCAxMDI0IH0sIHsgNywgNjk3LCAxMDI0IH0sIHsgNywgNjk4LCAxMDI0IH0sIHsgOCwgNjk5LCAxMDI0IH0sIHsgNywgNzAwLCAxMDI0IH0sIHsgOCwgNzAxLCAxMDI0IH0sIHsgOCwgNzAyLCAxMDI0IH0sIHsgOSwgNzAzLCAxMDI0IH0sIAorICAgeyA0LCA3MDQsIDEwMjQgfSwgeyA1LCA3MDUsIDEwMjQgfSwgeyA1LCA3MDYsIDEwMjQgfSwgeyA2LCA3MDcsIDEwMjQgfSwgeyA1LCA3MDgsIDEwMjQgfSwgeyA2LCA3MDksIDEwMjQgfSwgeyA2LCA3MTAsIDEwMjQgfSwgeyA3LCA3MTEsIDEwMjQgfSwgCisgICB7IDUsIDcxMiwgMTAyNCB9LCB7IDYsIDcxMywgMTAyNCB9LCB7IDYsIDcxNCwgMTAyNCB9LCB7IDcsIDcxNSwgMTAyNCB9LCB7IDYsIDcxNiwgMTAyNCB9LCB7IDcsIDcxNywgMTAyNCB9LCB7IDcsIDcxOCwgMTAyNCB9LCB7IDgsIDcxOSwgMTAyNCB9LCAKKyAgIHsgNSwgNzIwLCAxMDI0IH0sIHsgNiwgNzIxLCAxMDI0IH0sIHsgNiwgNzIyLCAxMDI0IH0sIHsgNywgNzIzLCAxMDI0IH0sIHsgNiwgNzI0LCAxMDI0IH0sIHsgNywgNzI1LCAxMDI0IH0sIHsgNywgNzI2LCAxMDI0IH0sIHsgOCwgNzI3LCAxMDI0IH0sIAorICAgeyA2LCA3MjgsIDEwMjQgfSwgeyA3LCA3MjksIDEwMjQgfSwgeyA3LCA3MzAsIDEwMjQgfSwgeyA4LCA3MzEsIDEwMjQgfSwgeyA3LCA3MzIsIDEwMjQgfSwgeyA4LCA3MzMsIDEwMjQgfSwgeyA4LCA3MzQsIDEwMjQgfSwgeyA5LCA3MzUsIDEwMjQgfSwgCisgICB7IDUsIDczNiwgMTAyNCB9LCB7IDYsIDczNywgMTAyNCB9LCB7IDYsIDczOCwgMTAyNCB9LCB7IDcsIDczOSwgMTAyNCB9LCB7IDYsIDc0MCwgMTAyNCB9LCB7IDcsIDc0MSwgMTAyNCB9LCB7IDcsIDc0MiwgMTAyNCB9LCB7IDgsIDc0MywgMTAyNCB9LCAKKyAgIHsgNiwgNzQ0LCAxMDI0IH0sIHsgNywgNzQ1LCAxMDI0IH0sIHsgNywgNzQ2LCAxMDI0IH0sIHsgOCwgNzQ3LCAxMDI0IH0sIHsgNywgNzQ4LCAxMDI0IH0sIHsgOCwgNzQ5LCAxMDI0IH0sIHsgOCwgNzUwLCAxMDI0IH0sIHsgOSwgNzUxLCAxMDI0IH0sIAorICAgeyA2LCA3NTIsIDEwMjQgfSwgeyA3LCA3NTMsIDEwMjQgfSwgeyA3LCA3NTQsIDEwMjQgfSwgeyA4LCA3NTUsIDEwMjQgfSwgeyA3LCA3NTYsIDEwMjQgfSwgeyA4LCA3NTcsIDEwMjQgfSwgeyA4LCA3NTgsIDEwMjQgfSwgeyA5LCA3NTksIDEwMjQgfSwgCisgICB7IDcsIDc2MCwgMTAyNCB9LCB7IDgsIDc2MSwgMTAyNCB9LCB7IDgsIDc2MiwgMTAyNCB9LCB7IDksIDc2MywgMTAyNCB9LCB7IDgsIDc2NCwgMTAyNCB9LCB7IDksIDc2NSwgMTAyNCB9LCB7IDksIDc2NiwgMTAyNCB9LCB7IDEwLCA3NjcsIDEwMjQgfSwgCisgICB7IDMsIDc2OCwgMTAyNCB9LCB7IDQsIDc2OSwgMTAyNCB9LCB7IDQsIDc3MCwgMTAyNCB9LCB7IDUsIDc3MSwgMTAyNCB9LCB7IDQsIDc3MiwgMTAyNCB9LCB7IDUsIDc3MywgMTAyNCB9LCB7IDUsIDc3NCwgMTAyNCB9LCB7IDYsIDc3NSwgMTAyNCB9LCAKKyAgIHsgNCwgNzc2LCAxMDI0IH0sIHsgNSwgNzc3LCAxMDI0IH0sIHsgNSwgNzc4LCAxMDI0IH0sIHsgNiwgNzc5LCAxMDI0IH0sIHsgNSwgNzgwLCAxMDI0IH0sIHsgNiwgNzgxLCAxMDI0IH0sIHsgNiwgNzgyLCAxMDI0IH0sIHsgNywgNzgzLCAxMDI0IH0sIAorICAgeyA0LCA3ODQsIDEwMjQgfSwgeyA1LCA3ODUsIDEwMjQgfSwgeyA1LCA3ODYsIDEwMjQgfSwgeyA2LCA3ODcsIDEwMjQgfSwgeyA1LCA3ODgsIDEwMjQgfSwgeyA2LCA3ODksIDEwMjQgfSwgeyA2LCA3OTAsIDEwMjQgfSwgeyA3LCA3OTEsIDEwMjQgfSwgCisgICB7IDUsIDc5MiwgMTAyNCB9LCB7IDYsIDc5MywgMTAyNCB9LCB7IDYsIDc5NCwgMTAyNCB9LCB7IDcsIDc5NSwgMTAyNCB9LCB7IDYsIDc5NiwgMTAyNCB9LCB7IDcsIDc5NywgMTAyNCB9LCB7IDcsIDc5OCwgMTAyNCB9LCB7IDgsIDc5OSwgMTAyNCB9LCAKKyAgIHsgNCwgODAwLCAxMDI0IH0sIHsgNSwgODAxLCAxMDI0IH0sIHsgNSwgODAyLCAxMDI0IH0sIHsgNiwgODAzLCAxMDI0IH0sIHsgNSwgODA0LCAxMDI0IH0sIHsgNiwgODA1LCAxMDI0IH0sIHsgNiwgODA2LCAxMDI0IH0sIHsgNywgODA3LCAxMDI0IH0sIAorICAgeyA1LCA4MDgsIDEwMjQgfSwgeyA2LCA4MDksIDEwMjQgfSwgeyA2LCA4MTAsIDEwMjQgfSwgeyA3LCA4MTEsIDEwMjQgfSwgeyA2LCA4MTIsIDEwMjQgfSwgeyA3LCA4MTMsIDEwMjQgfSwgeyA3LCA4MTQsIDEwMjQgfSwgeyA4LCA4MTUsIDEwMjQgfSwgCisgICB7IDUsIDgxNiwgMTAyNCB9LCB7IDYsIDgxNywgMTAyNCB9LCB7IDYsIDgxOCwgMTAyNCB9LCB7IDcsIDgxOSwgMTAyNCB9LCB7IDYsIDgyMCwgMTAyNCB9LCB7IDcsIDgyMSwgMTAyNCB9LCB7IDcsIDgyMiwgMTAyNCB9LCB7IDgsIDgyMywgMTAyNCB9LCAKKyAgIHsgNiwgODI0LCAxMDI0IH0sIHsgNywgODI1LCAxMDI0IH0sIHsgNywgODI2LCAxMDI0IH0sIHsgOCwgODI3LCAxMDI0IH0sIHsgNywgODI4LCAxMDI0IH0sIHsgOCwgODI5LCAxMDI0IH0sIHsgOCwgODMwLCAxMDI0IH0sIHsgOSwgODMxLCAxMDI0IH0sIAorICAgeyA0LCA4MzIsIDEwMjQgfSwgeyA1LCA4MzMsIDEwMjQgfSwgeyA1LCA4MzQsIDEwMjQgfSwgeyA2LCA4MzUsIDEwMjQgfSwgeyA1LCA4MzYsIDEwMjQgfSwgeyA2LCA4MzcsIDEwMjQgfSwgeyA2LCA4MzgsIDEwMjQgfSwgeyA3LCA4MzksIDEwMjQgfSwgCisgICB7IDUsIDg0MCwgMTAyNCB9LCB7IDYsIDg0MSwgMTAyNCB9LCB7IDYsIDg0MiwgMTAyNCB9LCB7IDcsIDg0MywgMTAyNCB9LCB7IDYsIDg0NCwgMTAyNCB9LCB7IDcsIDg0NSwgMTAyNCB9LCB7IDcsIDg0NiwgMTAyNCB9LCB7IDgsIDg0NywgMTAyNCB9LCAKKyAgIHsgNSwgODQ4LCAxMDI0IH0sIHsgNiwgODQ5LCAxMDI0IH0sIHsgNiwgODUwLCAxMDI0IH0sIHsgNywgODUxLCAxMDI0IH0sIHsgNiwgODUyLCAxMDI0IH0sIHsgNywgODUzLCAxMDI0IH0sIHsgNywgODU0LCAxMDI0IH0sIHsgOCwgODU1LCAxMDI0IH0sIAorICAgeyA2LCA4NTYsIDEwMjQgfSwgeyA3LCA4NTcsIDEwMjQgfSwgeyA3LCA4NTgsIDEwMjQgfSwgeyA4LCA4NTksIDEwMjQgfSwgeyA3LCA4NjAsIDEwMjQgfSwgeyA4LCA4NjEsIDEwMjQgfSwgeyA4LCA4NjIsIDEwMjQgfSwgeyA5LCA4NjMsIDEwMjQgfSwgCisgICB7IDUsIDg2NCwgMTAyNCB9LCB7IDYsIDg2NSwgMTAyNCB9LCB7IDYsIDg2NiwgMTAyNCB9LCB7IDcsIDg2NywgMTAyNCB9LCB7IDYsIDg2OCwgMTAyNCB9LCB7IDcsIDg2OSwgMTAyNCB9LCB7IDcsIDg3MCwgMTAyNCB9LCB7IDgsIDg3MSwgMTAyNCB9LCAKKyAgIHsgNiwgODcyLCAxMDI0IH0sIHsgNywgODczLCAxMDI0IH0sIHsgNywgODc0LCAxMDI0IH0sIHsgOCwgODc1LCAxMDI0IH0sIHsgNywgODc2LCAxMDI0IH0sIHsgOCwgODc3LCAxMDI0IH0sIHsgOCwgODc4LCAxMDI0IH0sIHsgOSwgODc5LCAxMDI0IH0sIAorICAgeyA2LCA4ODAsIDEwMjQgfSwgeyA3LCA4ODEsIDEwMjQgfSwgeyA3LCA4ODIsIDEwMjQgfSwgeyA4LCA4ODMsIDEwMjQgfSwgeyA3LCA4ODQsIDEwMjQgfSwgeyA4LCA4ODUsIDEwMjQgfSwgeyA4LCA4ODYsIDEwMjQgfSwgeyA5LCA4ODcsIDEwMjQgfSwgCisgICB7IDcsIDg4OCwgMTAyNCB9LCB7IDgsIDg4OSwgMTAyNCB9LCB7IDgsIDg5MCwgMTAyNCB9LCB7IDksIDg5MSwgMTAyNCB9LCB7IDgsIDg5MiwgMTAyNCB9LCB7IDksIDg5MywgMTAyNCB9LCB7IDksIDg5NCwgMTAyNCB9LCB7IDEwLCA4OTUsIDEwMjQgfSwgCisgICB7IDQsIDg5NiwgMTAyNCB9LCB7IDUsIDg5NywgMTAyNCB9LCB7IDUsIDg5OCwgMTAyNCB9LCB7IDYsIDg5OSwgMTAyNCB9LCB7IDUsIDkwMCwgMTAyNCB9LCB7IDYsIDkwMSwgMTAyNCB9LCB7IDYsIDkwMiwgMTAyNCB9LCB7IDcsIDkwMywgMTAyNCB9LCAKKyAgIHsgNSwgOTA0LCAxMDI0IH0sIHsgNiwgOTA1LCAxMDI0IH0sIHsgNiwgOTA2LCAxMDI0IH0sIHsgNywgOTA3LCAxMDI0IH0sIHsgNiwgOTA4LCAxMDI0IH0sIHsgNywgOTA5LCAxMDI0IH0sIHsgNywgOTEwLCAxMDI0IH0sIHsgOCwgOTExLCAxMDI0IH0sIAorICAgeyA1LCA5MTIsIDEwMjQgfSwgeyA2LCA5MTMsIDEwMjQgfSwgeyA2LCA5MTQsIDEwMjQgfSwgeyA3LCA5MTUsIDEwMjQgfSwgeyA2LCA5MTYsIDEwMjQgfSwgeyA3LCA5MTcsIDEwMjQgfSwgeyA3LCA5MTgsIDEwMjQgfSwgeyA4LCA5MTksIDEwMjQgfSwgCisgICB7IDYsIDkyMCwgMTAyNCB9LCB7IDcsIDkyMSwgMTAyNCB9LCB7IDcsIDkyMiwgMTAyNCB9LCB7IDgsIDkyMywgMTAyNCB9LCB7IDcsIDkyNCwgMTAyNCB9LCB7IDgsIDkyNSwgMTAyNCB9LCB7IDgsIDkyNiwgMTAyNCB9LCB7IDksIDkyNywgMTAyNCB9LCAKKyAgIHsgNSwgOTI4LCAxMDI0IH0sIHsgNiwgOTI5LCAxMDI0IH0sIHsgNiwgOTMwLCAxMDI0IH0sIHsgNywgOTMxLCAxMDI0IH0sIHsgNiwgOTMyLCAxMDI0IH0sIHsgNywgOTMzLCAxMDI0IH0sIHsgNywgOTM0LCAxMDI0IH0sIHsgOCwgOTM1LCAxMDI0IH0sIAorICAgeyA2LCA5MzYsIDEwMjQgfSwgeyA3LCA5MzcsIDEwMjQgfSwgeyA3LCA5MzgsIDEwMjQgfSwgeyA4LCA5MzksIDEwMjQgfSwgeyA3LCA5NDAsIDEwMjQgfSwgeyA4LCA5NDEsIDEwMjQgfSwgeyA4LCA5NDIsIDEwMjQgfSwgeyA5LCA5NDMsIDEwMjQgfSwgCisgICB7IDYsIDk0NCwgMTAyNCB9LCB7IDcsIDk0NSwgMTAyNCB9LCB7IDcsIDk0NiwgMTAyNCB9LCB7IDgsIDk0NywgMTAyNCB9LCB7IDcsIDk0OCwgMTAyNCB9LCB7IDgsIDk0OSwgMTAyNCB9LCB7IDgsIDk1MCwgMTAyNCB9LCB7IDksIDk1MSwgMTAyNCB9LCAKKyAgIHsgNywgOTUyLCAxMDI0IH0sIHsgOCwgOTUzLCAxMDI0IH0sIHsgOCwgOTU0LCAxMDI0IH0sIHsgOSwgOTU1LCAxMDI0IH0sIHsgOCwgOTU2LCAxMDI0IH0sIHsgOSwgOTU3LCAxMDI0IH0sIHsgOSwgOTU4LCAxMDI0IH0sIHsgMTAsIDk1OSwgMTAyNCB9LCAKKyAgIHsgNSwgOTYwLCAxMDI0IH0sIHsgNiwgOTYxLCAxMDI0IH0sIHsgNiwgOTYyLCAxMDI0IH0sIHsgNywgOTYzLCAxMDI0IH0sIHsgNiwgOTY0LCAxMDI0IH0sIHsgNywgOTY1LCAxMDI0IH0sIHsgNywgOTY2LCAxMDI0IH0sIHsgOCwgOTY3LCAxMDI0IH0sIAorICAgeyA2LCA5NjgsIDEwMjQgfSwgeyA3LCA5NjksIDEwMjQgfSwgeyA3LCA5NzAsIDEwMjQgfSwgeyA4LCA5NzEsIDEwMjQgfSwgeyA3LCA5NzIsIDEwMjQgfSwgeyA4LCA5NzMsIDEwMjQgfSwgeyA4LCA5NzQsIDEwMjQgfSwgeyA5LCA5NzUsIDEwMjQgfSwgCisgICB7IDYsIDk3NiwgMTAyNCB9LCB7IDcsIDk3NywgMTAyNCB9LCB7IDcsIDk3OCwgMTAyNCB9LCB7IDgsIDk3OSwgMTAyNCB9LCB7IDcsIDk4MCwgMTAyNCB9LCB7IDgsIDk4MSwgMTAyNCB9LCB7IDgsIDk4MiwgMTAyNCB9LCB7IDksIDk4MywgMTAyNCB9LCAKKyAgIHsgNywgOTg0LCAxMDI0IH0sIHsgOCwgOTg1LCAxMDI0IH0sIHsgOCwgOTg2LCAxMDI0IH0sIHsgOSwgOTg3LCAxMDI0IH0sIHsgOCwgOTg4LCAxMDI0IH0sIHsgOSwgOTg5LCAxMDI0IH0sIHsgOSwgOTkwLCAxMDI0IH0sIHsgMTAsIDk5MSwgMTAyNCB9LCAKKyAgIHsgNiwgOTkyLCAxMDI0IH0sIHsgNywgOTkzLCAxMDI0IH0sIHsgNywgOTk0LCAxMDI0IH0sIHsgOCwgOTk1LCAxMDI0IH0sIHsgNywgOTk2LCAxMDI0IH0sIHsgOCwgOTk3LCAxMDI0IH0sIHsgOCwgOTk4LCAxMDI0IH0sIHsgOSwgOTk5LCAxMDI0IH0sIAorICAgeyA3LCAxMDAwLCAxMDI0IH0sIHsgOCwgMTAwMSwgMTAyNCB9LCB7IDgsIDEwMDIsIDEwMjQgfSwgeyA5LCAxMDAzLCAxMDI0IH0sIHsgOCwgMTAwNCwgMTAyNCB9LCB7IDksIDEwMDUsIDEwMjQgfSwgeyA5LCAxMDA2LCAxMDI0IH0sIHsgMTAsIDEwMDcsIDEwMjQgfSwgCisgICB7IDcsIDEwMDgsIDEwMjQgfSwgeyA4LCAxMDA5LCAxMDI0IH0sIHsgOCwgMTAxMCwgMTAyNCB9LCB7IDksIDEwMTEsIDEwMjQgfSwgeyA4LCAxMDEyLCAxMDI0IH0sIHsgOSwgMTAxMywgMTAyNCB9LCB7IDksIDEwMTQsIDEwMjQgfSwgeyAxMCwgMTAxNSwgMTAyNCB9LCAKKyAgIHsgOCwgMTAxNiwgMTAyNCB9LCB7IDksIDEwMTcsIDEwMjQgfSwgeyA5LCAxMDE4LCAxMDI0IH0sIHsgMTAsIDEwMTksIDEwMjQgfSwgeyA5LCAxMDIwLCAxMDI0IH0sIHsgMTAsIDEwMjEsIDEwMjQgfSwgeyAxMCwgMTAyMiwgMTAyNCB9LCB7IDExLCAxMDIzLCAxMDI0IH0sIAorI2lmIEZQX0xVVCA+IDExCisgICB7IDEsIDAsIDAgfSwgeyAyLCAxLCAyMDQ4IH0sIHsgMiwgMiwgMjA0OCB9LCB7IDMsIDMsIDIwNDggfSwgeyAyLCA0LCAyMDQ4IH0sIHsgMywgNSwgMjA0OCB9LCB7IDMsIDYsIDIwNDggfSwgeyA0LCA3LCAyMDQ4IH0sIAorICAgeyAyLCA4LCAyMDQ4IH0sIHsgMywgOSwgMjA0OCB9LCB7IDMsIDEwLCAyMDQ4IH0sIHsgNCwgMTEsIDIwNDggfSwgeyAzLCAxMiwgMjA0OCB9LCB7IDQsIDEzLCAyMDQ4IH0sIHsgNCwgMTQsIDIwNDggfSwgeyA1LCAxNSwgMjA0OCB9LCAKKyAgIHsgMiwgMTYsIDIwNDggfSwgeyAzLCAxNywgMjA0OCB9LCB7IDMsIDE4LCAyMDQ4IH0sIHsgNCwgMTksIDIwNDggfSwgeyAzLCAyMCwgMjA0OCB9LCB7IDQsIDIxLCAyMDQ4IH0sIHsgNCwgMjIsIDIwNDggfSwgeyA1LCAyMywgMjA0OCB9LCAKKyAgIHsgMywgMjQsIDIwNDggfSwgeyA0LCAyNSwgMjA0OCB9LCB7IDQsIDI2LCAyMDQ4IH0sIHsgNSwgMjcsIDIwNDggfSwgeyA0LCAyOCwgMjA0OCB9LCB7IDUsIDI5LCAyMDQ4IH0sIHsgNSwgMzAsIDIwNDggfSwgeyA2LCAzMSwgMjA0OCB9LCAKKyAgIHsgMiwgMzIsIDIwNDggfSwgeyAzLCAzMywgMjA0OCB9LCB7IDMsIDM0LCAyMDQ4IH0sIHsgNCwgMzUsIDIwNDggfSwgeyAzLCAzNiwgMjA0OCB9LCB7IDQsIDM3LCAyMDQ4IH0sIHsgNCwgMzgsIDIwNDggfSwgeyA1LCAzOSwgMjA0OCB9LCAKKyAgIHsgMywgNDAsIDIwNDggfSwgeyA0LCA0MSwgMjA0OCB9LCB7IDQsIDQyLCAyMDQ4IH0sIHsgNSwgNDMsIDIwNDggfSwgeyA0LCA0NCwgMjA0OCB9LCB7IDUsIDQ1LCAyMDQ4IH0sIHsgNSwgNDYsIDIwNDggfSwgeyA2LCA0NywgMjA0OCB9LCAKKyAgIHsgMywgNDgsIDIwNDggfSwgeyA0LCA0OSwgMjA0OCB9LCB7IDQsIDUwLCAyMDQ4IH0sIHsgNSwgNTEsIDIwNDggfSwgeyA0LCA1MiwgMjA0OCB9LCB7IDUsIDUzLCAyMDQ4IH0sIHsgNSwgNTQsIDIwNDggfSwgeyA2LCA1NSwgMjA0OCB9LCAKKyAgIHsgNCwgNTYsIDIwNDggfSwgeyA1LCA1NywgMjA0OCB9LCB7IDUsIDU4LCAyMDQ4IH0sIHsgNiwgNTksIDIwNDggfSwgeyA1LCA2MCwgMjA0OCB9LCB7IDYsIDYxLCAyMDQ4IH0sIHsgNiwgNjIsIDIwNDggfSwgeyA3LCA2MywgMjA0OCB9LCAKKyAgIHsgMiwgNjQsIDIwNDggfSwgeyAzLCA2NSwgMjA0OCB9LCB7IDMsIDY2LCAyMDQ4IH0sIHsgNCwgNjcsIDIwNDggfSwgeyAzLCA2OCwgMjA0OCB9LCB7IDQsIDY5LCAyMDQ4IH0sIHsgNCwgNzAsIDIwNDggfSwgeyA1LCA3MSwgMjA0OCB9LCAKKyAgIHsgMywgNzIsIDIwNDggfSwgeyA0LCA3MywgMjA0OCB9LCB7IDQsIDc0LCAyMDQ4IH0sIHsgNSwgNzUsIDIwNDggfSwgeyA0LCA3NiwgMjA0OCB9LCB7IDUsIDc3LCAyMDQ4IH0sIHsgNSwgNzgsIDIwNDggfSwgeyA2LCA3OSwgMjA0OCB9LCAKKyAgIHsgMywgODAsIDIwNDggfSwgeyA0LCA4MSwgMjA0OCB9LCB7IDQsIDgyLCAyMDQ4IH0sIHsgNSwgODMsIDIwNDggfSwgeyA0LCA4NCwgMjA0OCB9LCB7IDUsIDg1LCAyMDQ4IH0sIHsgNSwgODYsIDIwNDggfSwgeyA2LCA4NywgMjA0OCB9LCAKKyAgIHsgNCwgODgsIDIwNDggfSwgeyA1LCA4OSwgMjA0OCB9LCB7IDUsIDkwLCAyMDQ4IH0sIHsgNiwgOTEsIDIwNDggfSwgeyA1LCA5MiwgMjA0OCB9LCB7IDYsIDkzLCAyMDQ4IH0sIHsgNiwgOTQsIDIwNDggfSwgeyA3LCA5NSwgMjA0OCB9LCAKKyAgIHsgMywgOTYsIDIwNDggfSwgeyA0LCA5NywgMjA0OCB9LCB7IDQsIDk4LCAyMDQ4IH0sIHsgNSwgOTksIDIwNDggfSwgeyA0LCAxMDAsIDIwNDggfSwgeyA1LCAxMDEsIDIwNDggfSwgeyA1LCAxMDIsIDIwNDggfSwgeyA2LCAxMDMsIDIwNDggfSwgCisgICB7IDQsIDEwNCwgMjA0OCB9LCB7IDUsIDEwNSwgMjA0OCB9LCB7IDUsIDEwNiwgMjA0OCB9LCB7IDYsIDEwNywgMjA0OCB9LCB7IDUsIDEwOCwgMjA0OCB9LCB7IDYsIDEwOSwgMjA0OCB9LCB7IDYsIDExMCwgMjA0OCB9LCB7IDcsIDExMSwgMjA0OCB9LCAKKyAgIHsgNCwgMTEyLCAyMDQ4IH0sIHsgNSwgMTEzLCAyMDQ4IH0sIHsgNSwgMTE0LCAyMDQ4IH0sIHsgNiwgMTE1LCAyMDQ4IH0sIHsgNSwgMTE2LCAyMDQ4IH0sIHsgNiwgMTE3LCAyMDQ4IH0sIHsgNiwgMTE4LCAyMDQ4IH0sIHsgNywgMTE5LCAyMDQ4IH0sIAorICAgeyA1LCAxMjAsIDIwNDggfSwgeyA2LCAxMjEsIDIwNDggfSwgeyA2LCAxMjIsIDIwNDggfSwgeyA3LCAxMjMsIDIwNDggfSwgeyA2LCAxMjQsIDIwNDggfSwgeyA3LCAxMjUsIDIwNDggfSwgeyA3LCAxMjYsIDIwNDggfSwgeyA4LCAxMjcsIDIwNDggfSwgCisgICB7IDIsIDEyOCwgMjA0OCB9LCB7IDMsIDEyOSwgMjA0OCB9LCB7IDMsIDEzMCwgMjA0OCB9LCB7IDQsIDEzMSwgMjA0OCB9LCB7IDMsIDEzMiwgMjA0OCB9LCB7IDQsIDEzMywgMjA0OCB9LCB7IDQsIDEzNCwgMjA0OCB9LCB7IDUsIDEzNSwgMjA0OCB9LCAKKyAgIHsgMywgMTM2LCAyMDQ4IH0sIHsgNCwgMTM3LCAyMDQ4IH0sIHsgNCwgMTM4LCAyMDQ4IH0sIHsgNSwgMTM5LCAyMDQ4IH0sIHsgNCwgMTQwLCAyMDQ4IH0sIHsgNSwgMTQxLCAyMDQ4IH0sIHsgNSwgMTQyLCAyMDQ4IH0sIHsgNiwgMTQzLCAyMDQ4IH0sIAorICAgeyAzLCAxNDQsIDIwNDggfSwgeyA0LCAxNDUsIDIwNDggfSwgeyA0LCAxNDYsIDIwNDggfSwgeyA1LCAxNDcsIDIwNDggfSwgeyA0LCAxNDgsIDIwNDggfSwgeyA1LCAxNDksIDIwNDggfSwgeyA1LCAxNTAsIDIwNDggfSwgeyA2LCAxNTEsIDIwNDggfSwgCisgICB7IDQsIDE1MiwgMjA0OCB9LCB7IDUsIDE1MywgMjA0OCB9LCB7IDUsIDE1NCwgMjA0OCB9LCB7IDYsIDE1NSwgMjA0OCB9LCB7IDUsIDE1NiwgMjA0OCB9LCB7IDYsIDE1NywgMjA0OCB9LCB7IDYsIDE1OCwgMjA0OCB9LCB7IDcsIDE1OSwgMjA0OCB9LCAKKyAgIHsgMywgMTYwLCAyMDQ4IH0sIHsgNCwgMTYxLCAyMDQ4IH0sIHsgNCwgMTYyLCAyMDQ4IH0sIHsgNSwgMTYzLCAyMDQ4IH0sIHsgNCwgMTY0LCAyMDQ4IH0sIHsgNSwgMTY1LCAyMDQ4IH0sIHsgNSwgMTY2LCAyMDQ4IH0sIHsgNiwgMTY3LCAyMDQ4IH0sIAorICAgeyA0LCAxNjgsIDIwNDggfSwgeyA1LCAxNjksIDIwNDggfSwgeyA1LCAxNzAsIDIwNDggfSwgeyA2LCAxNzEsIDIwNDggfSwgeyA1LCAxNzIsIDIwNDggfSwgeyA2LCAxNzMsIDIwNDggfSwgeyA2LCAxNzQsIDIwNDggfSwgeyA3LCAxNzUsIDIwNDggfSwgCisgICB7IDQsIDE3NiwgMjA0OCB9LCB7IDUsIDE3NywgMjA0OCB9LCB7IDUsIDE3OCwgMjA0OCB9LCB7IDYsIDE3OSwgMjA0OCB9LCB7IDUsIDE4MCwgMjA0OCB9LCB7IDYsIDE4MSwgMjA0OCB9LCB7IDYsIDE4MiwgMjA0OCB9LCB7IDcsIDE4MywgMjA0OCB9LCAKKyAgIHsgNSwgMTg0LCAyMDQ4IH0sIHsgNiwgMTg1LCAyMDQ4IH0sIHsgNiwgMTg2LCAyMDQ4IH0sIHsgNywgMTg3LCAyMDQ4IH0sIHsgNiwgMTg4LCAyMDQ4IH0sIHsgNywgMTg5LCAyMDQ4IH0sIHsgNywgMTkwLCAyMDQ4IH0sIHsgOCwgMTkxLCAyMDQ4IH0sIAorICAgeyAzLCAxOTIsIDIwNDggfSwgeyA0LCAxOTMsIDIwNDggfSwgeyA0LCAxOTQsIDIwNDggfSwgeyA1LCAxOTUsIDIwNDggfSwgeyA0LCAxOTYsIDIwNDggfSwgeyA1LCAxOTcsIDIwNDggfSwgeyA1LCAxOTgsIDIwNDggfSwgeyA2LCAxOTksIDIwNDggfSwgCisgICB7IDQsIDIwMCwgMjA0OCB9LCB7IDUsIDIwMSwgMjA0OCB9LCB7IDUsIDIwMiwgMjA0OCB9LCB7IDYsIDIwMywgMjA0OCB9LCB7IDUsIDIwNCwgMjA0OCB9LCB7IDYsIDIwNSwgMjA0OCB9LCB7IDYsIDIwNiwgMjA0OCB9LCB7IDcsIDIwNywgMjA0OCB9LCAKKyAgIHsgNCwgMjA4LCAyMDQ4IH0sIHsgNSwgMjA5LCAyMDQ4IH0sIHsgNSwgMjEwLCAyMDQ4IH0sIHsgNiwgMjExLCAyMDQ4IH0sIHsgNSwgMjEyLCAyMDQ4IH0sIHsgNiwgMjEzLCAyMDQ4IH0sIHsgNiwgMjE0LCAyMDQ4IH0sIHsgNywgMjE1LCAyMDQ4IH0sIAorICAgeyA1LCAyMTYsIDIwNDggfSwgeyA2LCAyMTcsIDIwNDggfSwgeyA2LCAyMTgsIDIwNDggfSwgeyA3LCAyMTksIDIwNDggfSwgeyA2LCAyMjAsIDIwNDggfSwgeyA3LCAyMjEsIDIwNDggfSwgeyA3LCAyMjIsIDIwNDggfSwgeyA4LCAyMjMsIDIwNDggfSwgCisgICB7IDQsIDIyNCwgMjA0OCB9LCB7IDUsIDIyNSwgMjA0OCB9LCB7IDUsIDIyNiwgMjA0OCB9LCB7IDYsIDIyNywgMjA0OCB9LCB7IDUsIDIyOCwgMjA0OCB9LCB7IDYsIDIyOSwgMjA0OCB9LCB7IDYsIDIzMCwgMjA0OCB9LCB7IDcsIDIzMSwgMjA0OCB9LCAKKyAgIHsgNSwgMjMyLCAyMDQ4IH0sIHsgNiwgMjMzLCAyMDQ4IH0sIHsgNiwgMjM0LCAyMDQ4IH0sIHsgNywgMjM1LCAyMDQ4IH0sIHsgNiwgMjM2LCAyMDQ4IH0sIHsgNywgMjM3LCAyMDQ4IH0sIHsgNywgMjM4LCAyMDQ4IH0sIHsgOCwgMjM5LCAyMDQ4IH0sIAorICAgeyA1LCAyNDAsIDIwNDggfSwgeyA2LCAyNDEsIDIwNDggfSwgeyA2LCAyNDIsIDIwNDggfSwgeyA3LCAyNDMsIDIwNDggfSwgeyA2LCAyNDQsIDIwNDggfSwgeyA3LCAyNDUsIDIwNDggfSwgeyA3LCAyNDYsIDIwNDggfSwgeyA4LCAyNDcsIDIwNDggfSwgCisgICB7IDYsIDI0OCwgMjA0OCB9LCB7IDcsIDI0OSwgMjA0OCB9LCB7IDcsIDI1MCwgMjA0OCB9LCB7IDgsIDI1MSwgMjA0OCB9LCB7IDcsIDI1MiwgMjA0OCB9LCB7IDgsIDI1MywgMjA0OCB9LCB7IDgsIDI1NCwgMjA0OCB9LCB7IDksIDI1NSwgMjA0OCB9LCAKKyAgIHsgMiwgMjU2LCAyMDQ4IH0sIHsgMywgMjU3LCAyMDQ4IH0sIHsgMywgMjU4LCAyMDQ4IH0sIHsgNCwgMjU5LCAyMDQ4IH0sIHsgMywgMjYwLCAyMDQ4IH0sIHsgNCwgMjYxLCAyMDQ4IH0sIHsgNCwgMjYyLCAyMDQ4IH0sIHsgNSwgMjYzLCAyMDQ4IH0sIAorICAgeyAzLCAyNjQsIDIwNDggfSwgeyA0LCAyNjUsIDIwNDggfSwgeyA0LCAyNjYsIDIwNDggfSwgeyA1LCAyNjcsIDIwNDggfSwgeyA0LCAyNjgsIDIwNDggfSwgeyA1LCAyNjksIDIwNDggfSwgeyA1LCAyNzAsIDIwNDggfSwgeyA2LCAyNzEsIDIwNDggfSwgCisgICB7IDMsIDI3MiwgMjA0OCB9LCB7IDQsIDI3MywgMjA0OCB9LCB7IDQsIDI3NCwgMjA0OCB9LCB7IDUsIDI3NSwgMjA0OCB9LCB7IDQsIDI3NiwgMjA0OCB9LCB7IDUsIDI3NywgMjA0OCB9LCB7IDUsIDI3OCwgMjA0OCB9LCB7IDYsIDI3OSwgMjA0OCB9LCAKKyAgIHsgNCwgMjgwLCAyMDQ4IH0sIHsgNSwgMjgxLCAyMDQ4IH0sIHsgNSwgMjgyLCAyMDQ4IH0sIHsgNiwgMjgzLCAyMDQ4IH0sIHsgNSwgMjg0LCAyMDQ4IH0sIHsgNiwgMjg1LCAyMDQ4IH0sIHsgNiwgMjg2LCAyMDQ4IH0sIHsgNywgMjg3LCAyMDQ4IH0sIAorICAgeyAzLCAyODgsIDIwNDggfSwgeyA0LCAyODksIDIwNDggfSwgeyA0LCAyOTAsIDIwNDggfSwgeyA1LCAyOTEsIDIwNDggfSwgeyA0LCAyOTIsIDIwNDggfSwgeyA1LCAyOTMsIDIwNDggfSwgeyA1LCAyOTQsIDIwNDggfSwgeyA2LCAyOTUsIDIwNDggfSwgCisgICB7IDQsIDI5NiwgMjA0OCB9LCB7IDUsIDI5NywgMjA0OCB9LCB7IDUsIDI5OCwgMjA0OCB9LCB7IDYsIDI5OSwgMjA0OCB9LCB7IDUsIDMwMCwgMjA0OCB9LCB7IDYsIDMwMSwgMjA0OCB9LCB7IDYsIDMwMiwgMjA0OCB9LCB7IDcsIDMwMywgMjA0OCB9LCAKKyAgIHsgNCwgMzA0LCAyMDQ4IH0sIHsgNSwgMzA1LCAyMDQ4IH0sIHsgNSwgMzA2LCAyMDQ4IH0sIHsgNiwgMzA3LCAyMDQ4IH0sIHsgNSwgMzA4LCAyMDQ4IH0sIHsgNiwgMzA5LCAyMDQ4IH0sIHsgNiwgMzEwLCAyMDQ4IH0sIHsgNywgMzExLCAyMDQ4IH0sIAorICAgeyA1LCAzMTIsIDIwNDggfSwgeyA2LCAzMTMsIDIwNDggfSwgeyA2LCAzMTQsIDIwNDggfSwgeyA3LCAzMTUsIDIwNDggfSwgeyA2LCAzMTYsIDIwNDggfSwgeyA3LCAzMTcsIDIwNDggfSwgeyA3LCAzMTgsIDIwNDggfSwgeyA4LCAzMTksIDIwNDggfSwgCisgICB7IDMsIDMyMCwgMjA0OCB9LCB7IDQsIDMyMSwgMjA0OCB9LCB7IDQsIDMyMiwgMjA0OCB9LCB7IDUsIDMyMywgMjA0OCB9LCB7IDQsIDMyNCwgMjA0OCB9LCB7IDUsIDMyNSwgMjA0OCB9LCB7IDUsIDMyNiwgMjA0OCB9LCB7IDYsIDMyNywgMjA0OCB9LCAKKyAgIHsgNCwgMzI4LCAyMDQ4IH0sIHsgNSwgMzI5LCAyMDQ4IH0sIHsgNSwgMzMwLCAyMDQ4IH0sIHsgNiwgMzMxLCAyMDQ4IH0sIHsgNSwgMzMyLCAyMDQ4IH0sIHsgNiwgMzMzLCAyMDQ4IH0sIHsgNiwgMzM0LCAyMDQ4IH0sIHsgNywgMzM1LCAyMDQ4IH0sIAorICAgeyA0LCAzMzYsIDIwNDggfSwgeyA1LCAzMzcsIDIwNDggfSwgeyA1LCAzMzgsIDIwNDggfSwgeyA2LCAzMzksIDIwNDggfSwgeyA1LCAzNDAsIDIwNDggfSwgeyA2LCAzNDEsIDIwNDggfSwgeyA2LCAzNDIsIDIwNDggfSwgeyA3LCAzNDMsIDIwNDggfSwgCisgICB7IDUsIDM0NCwgMjA0OCB9LCB7IDYsIDM0NSwgMjA0OCB9LCB7IDYsIDM0NiwgMjA0OCB9LCB7IDcsIDM0NywgMjA0OCB9LCB7IDYsIDM0OCwgMjA0OCB9LCB7IDcsIDM0OSwgMjA0OCB9LCB7IDcsIDM1MCwgMjA0OCB9LCB7IDgsIDM1MSwgMjA0OCB9LCAKKyAgIHsgNCwgMzUyLCAyMDQ4IH0sIHsgNSwgMzUzLCAyMDQ4IH0sIHsgNSwgMzU0LCAyMDQ4IH0sIHsgNiwgMzU1LCAyMDQ4IH0sIHsgNSwgMzU2LCAyMDQ4IH0sIHsgNiwgMzU3LCAyMDQ4IH0sIHsgNiwgMzU4LCAyMDQ4IH0sIHsgNywgMzU5LCAyMDQ4IH0sIAorICAgeyA1LCAzNjAsIDIwNDggfSwgeyA2LCAzNjEsIDIwNDggfSwgeyA2LCAzNjIsIDIwNDggfSwgeyA3LCAzNjMsIDIwNDggfSwgeyA2LCAzNjQsIDIwNDggfSwgeyA3LCAzNjUsIDIwNDggfSwgeyA3LCAzNjYsIDIwNDggfSwgeyA4LCAzNjcsIDIwNDggfSwgCisgICB7IDUsIDM2OCwgMjA0OCB9LCB7IDYsIDM2OSwgMjA0OCB9LCB7IDYsIDM3MCwgMjA0OCB9LCB7IDcsIDM3MSwgMjA0OCB9LCB7IDYsIDM3MiwgMjA0OCB9LCB7IDcsIDM3MywgMjA0OCB9LCB7IDcsIDM3NCwgMjA0OCB9LCB7IDgsIDM3NSwgMjA0OCB9LCAKKyAgIHsgNiwgMzc2LCAyMDQ4IH0sIHsgNywgMzc3LCAyMDQ4IH0sIHsgNywgMzc4LCAyMDQ4IH0sIHsgOCwgMzc5LCAyMDQ4IH0sIHsgNywgMzgwLCAyMDQ4IH0sIHsgOCwgMzgxLCAyMDQ4IH0sIHsgOCwgMzgyLCAyMDQ4IH0sIHsgOSwgMzgzLCAyMDQ4IH0sIAorICAgeyAzLCAzODQsIDIwNDggfSwgeyA0LCAzODUsIDIwNDggfSwgeyA0LCAzODYsIDIwNDggfSwgeyA1LCAzODcsIDIwNDggfSwgeyA0LCAzODgsIDIwNDggfSwgeyA1LCAzODksIDIwNDggfSwgeyA1LCAzOTAsIDIwNDggfSwgeyA2LCAzOTEsIDIwNDggfSwgCisgICB7IDQsIDM5MiwgMjA0OCB9LCB7IDUsIDM5MywgMjA0OCB9LCB7IDUsIDM5NCwgMjA0OCB9LCB7IDYsIDM5NSwgMjA0OCB9LCB7IDUsIDM5NiwgMjA0OCB9LCB7IDYsIDM5NywgMjA0OCB9LCB7IDYsIDM5OCwgMjA0OCB9LCB7IDcsIDM5OSwgMjA0OCB9LCAKKyAgIHsgNCwgNDAwLCAyMDQ4IH0sIHsgNSwgNDAxLCAyMDQ4IH0sIHsgNSwgNDAyLCAyMDQ4IH0sIHsgNiwgNDAzLCAyMDQ4IH0sIHsgNSwgNDA0LCAyMDQ4IH0sIHsgNiwgNDA1LCAyMDQ4IH0sIHsgNiwgNDA2LCAyMDQ4IH0sIHsgNywgNDA3LCAyMDQ4IH0sIAorICAgeyA1LCA0MDgsIDIwNDggfSwgeyA2LCA0MDksIDIwNDggfSwgeyA2LCA0MTAsIDIwNDggfSwgeyA3LCA0MTEsIDIwNDggfSwgeyA2LCA0MTIsIDIwNDggfSwgeyA3LCA0MTMsIDIwNDggfSwgeyA3LCA0MTQsIDIwNDggfSwgeyA4LCA0MTUsIDIwNDggfSwgCisgICB7IDQsIDQxNiwgMjA0OCB9LCB7IDUsIDQxNywgMjA0OCB9LCB7IDUsIDQxOCwgMjA0OCB9LCB7IDYsIDQxOSwgMjA0OCB9LCB7IDUsIDQyMCwgMjA0OCB9LCB7IDYsIDQyMSwgMjA0OCB9LCB7IDYsIDQyMiwgMjA0OCB9LCB7IDcsIDQyMywgMjA0OCB9LCAKKyAgIHsgNSwgNDI0LCAyMDQ4IH0sIHsgNiwgNDI1LCAyMDQ4IH0sIHsgNiwgNDI2LCAyMDQ4IH0sIHsgNywgNDI3LCAyMDQ4IH0sIHsgNiwgNDI4LCAyMDQ4IH0sIHsgNywgNDI5LCAyMDQ4IH0sIHsgNywgNDMwLCAyMDQ4IH0sIHsgOCwgNDMxLCAyMDQ4IH0sIAorICAgeyA1LCA0MzIsIDIwNDggfSwgeyA2LCA0MzMsIDIwNDggfSwgeyA2LCA0MzQsIDIwNDggfSwgeyA3LCA0MzUsIDIwNDggfSwgeyA2LCA0MzYsIDIwNDggfSwgeyA3LCA0MzcsIDIwNDggfSwgeyA3LCA0MzgsIDIwNDggfSwgeyA4LCA0MzksIDIwNDggfSwgCisgICB7IDYsIDQ0MCwgMjA0OCB9LCB7IDcsIDQ0MSwgMjA0OCB9LCB7IDcsIDQ0MiwgMjA0OCB9LCB7IDgsIDQ0MywgMjA0OCB9LCB7IDcsIDQ0NCwgMjA0OCB9LCB7IDgsIDQ0NSwgMjA0OCB9LCB7IDgsIDQ0NiwgMjA0OCB9LCB7IDksIDQ0NywgMjA0OCB9LCAKKyAgIHsgNCwgNDQ4LCAyMDQ4IH0sIHsgNSwgNDQ5LCAyMDQ4IH0sIHsgNSwgNDUwLCAyMDQ4IH0sIHsgNiwgNDUxLCAyMDQ4IH0sIHsgNSwgNDUyLCAyMDQ4IH0sIHsgNiwgNDUzLCAyMDQ4IH0sIHsgNiwgNDU0LCAyMDQ4IH0sIHsgNywgNDU1LCAyMDQ4IH0sIAorICAgeyA1LCA0NTYsIDIwNDggfSwgeyA2LCA0NTcsIDIwNDggfSwgeyA2LCA0NTgsIDIwNDggfSwgeyA3LCA0NTksIDIwNDggfSwgeyA2LCA0NjAsIDIwNDggfSwgeyA3LCA0NjEsIDIwNDggfSwgeyA3LCA0NjIsIDIwNDggfSwgeyA4LCA0NjMsIDIwNDggfSwgCisgICB7IDUsIDQ2NCwgMjA0OCB9LCB7IDYsIDQ2NSwgMjA0OCB9LCB7IDYsIDQ2NiwgMjA0OCB9LCB7IDcsIDQ2NywgMjA0OCB9LCB7IDYsIDQ2OCwgMjA0OCB9LCB7IDcsIDQ2OSwgMjA0OCB9LCB7IDcsIDQ3MCwgMjA0OCB9LCB7IDgsIDQ3MSwgMjA0OCB9LCAKKyAgIHsgNiwgNDcyLCAyMDQ4IH0sIHsgNywgNDczLCAyMDQ4IH0sIHsgNywgNDc0LCAyMDQ4IH0sIHsgOCwgNDc1LCAyMDQ4IH0sIHsgNywgNDc2LCAyMDQ4IH0sIHsgOCwgNDc3LCAyMDQ4IH0sIHsgOCwgNDc4LCAyMDQ4IH0sIHsgOSwgNDc5LCAyMDQ4IH0sIAorICAgeyA1LCA0ODAsIDIwNDggfSwgeyA2LCA0ODEsIDIwNDggfSwgeyA2LCA0ODIsIDIwNDggfSwgeyA3LCA0ODMsIDIwNDggfSwgeyA2LCA0ODQsIDIwNDggfSwgeyA3LCA0ODUsIDIwNDggfSwgeyA3LCA0ODYsIDIwNDggfSwgeyA4LCA0ODcsIDIwNDggfSwgCisgICB7IDYsIDQ4OCwgMjA0OCB9LCB7IDcsIDQ4OSwgMjA0OCB9LCB7IDcsIDQ5MCwgMjA0OCB9LCB7IDgsIDQ5MSwgMjA0OCB9LCB7IDcsIDQ5MiwgMjA0OCB9LCB7IDgsIDQ5MywgMjA0OCB9LCB7IDgsIDQ5NCwgMjA0OCB9LCB7IDksIDQ5NSwgMjA0OCB9LCAKKyAgIHsgNiwgNDk2LCAyMDQ4IH0sIHsgNywgNDk3LCAyMDQ4IH0sIHsgNywgNDk4LCAyMDQ4IH0sIHsgOCwgNDk5LCAyMDQ4IH0sIHsgNywgNTAwLCAyMDQ4IH0sIHsgOCwgNTAxLCAyMDQ4IH0sIHsgOCwgNTAyLCAyMDQ4IH0sIHsgOSwgNTAzLCAyMDQ4IH0sIAorICAgeyA3LCA1MDQsIDIwNDggfSwgeyA4LCA1MDUsIDIwNDggfSwgeyA4LCA1MDYsIDIwNDggfSwgeyA5LCA1MDcsIDIwNDggfSwgeyA4LCA1MDgsIDIwNDggfSwgeyA5LCA1MDksIDIwNDggfSwgeyA5LCA1MTAsIDIwNDggfSwgeyAxMCwgNTExLCAyMDQ4IH0sIAorICAgeyAyLCA1MTIsIDIwNDggfSwgeyAzLCA1MTMsIDIwNDggfSwgeyAzLCA1MTQsIDIwNDggfSwgeyA0LCA1MTUsIDIwNDggfSwgeyAzLCA1MTYsIDIwNDggfSwgeyA0LCA1MTcsIDIwNDggfSwgeyA0LCA1MTgsIDIwNDggfSwgeyA1LCA1MTksIDIwNDggfSwgCisgICB7IDMsIDUyMCwgMjA0OCB9LCB7IDQsIDUyMSwgMjA0OCB9LCB7IDQsIDUyMiwgMjA0OCB9LCB7IDUsIDUyMywgMjA0OCB9LCB7IDQsIDUyNCwgMjA0OCB9LCB7IDUsIDUyNSwgMjA0OCB9LCB7IDUsIDUyNiwgMjA0OCB9LCB7IDYsIDUyNywgMjA0OCB9LCAKKyAgIHsgMywgNTI4LCAyMDQ4IH0sIHsgNCwgNTI5LCAyMDQ4IH0sIHsgNCwgNTMwLCAyMDQ4IH0sIHsgNSwgNTMxLCAyMDQ4IH0sIHsgNCwgNTMyLCAyMDQ4IH0sIHsgNSwgNTMzLCAyMDQ4IH0sIHsgNSwgNTM0LCAyMDQ4IH0sIHsgNiwgNTM1LCAyMDQ4IH0sIAorICAgeyA0LCA1MzYsIDIwNDggfSwgeyA1LCA1MzcsIDIwNDggfSwgeyA1LCA1MzgsIDIwNDggfSwgeyA2LCA1MzksIDIwNDggfSwgeyA1LCA1NDAsIDIwNDggfSwgeyA2LCA1NDEsIDIwNDggfSwgeyA2LCA1NDIsIDIwNDggfSwgeyA3LCA1NDMsIDIwNDggfSwgCisgICB7IDMsIDU0NCwgMjA0OCB9LCB7IDQsIDU0NSwgMjA0OCB9LCB7IDQsIDU0NiwgMjA0OCB9LCB7IDUsIDU0NywgMjA0OCB9LCB7IDQsIDU0OCwgMjA0OCB9LCB7IDUsIDU0OSwgMjA0OCB9LCB7IDUsIDU1MCwgMjA0OCB9LCB7IDYsIDU1MSwgMjA0OCB9LCAKKyAgIHsgNCwgNTUyLCAyMDQ4IH0sIHsgNSwgNTUzLCAyMDQ4IH0sIHsgNSwgNTU0LCAyMDQ4IH0sIHsgNiwgNTU1LCAyMDQ4IH0sIHsgNSwgNTU2LCAyMDQ4IH0sIHsgNiwgNTU3LCAyMDQ4IH0sIHsgNiwgNTU4LCAyMDQ4IH0sIHsgNywgNTU5LCAyMDQ4IH0sIAorICAgeyA0LCA1NjAsIDIwNDggfSwgeyA1LCA1NjEsIDIwNDggfSwgeyA1LCA1NjIsIDIwNDggfSwgeyA2LCA1NjMsIDIwNDggfSwgeyA1LCA1NjQsIDIwNDggfSwgeyA2LCA1NjUsIDIwNDggfSwgeyA2LCA1NjYsIDIwNDggfSwgeyA3LCA1NjcsIDIwNDggfSwgCisgICB7IDUsIDU2OCwgMjA0OCB9LCB7IDYsIDU2OSwgMjA0OCB9LCB7IDYsIDU3MCwgMjA0OCB9LCB7IDcsIDU3MSwgMjA0OCB9LCB7IDYsIDU3MiwgMjA0OCB9LCB7IDcsIDU3MywgMjA0OCB9LCB7IDcsIDU3NCwgMjA0OCB9LCB7IDgsIDU3NSwgMjA0OCB9LCAKKyAgIHsgMywgNTc2LCAyMDQ4IH0sIHsgNCwgNTc3LCAyMDQ4IH0sIHsgNCwgNTc4LCAyMDQ4IH0sIHsgNSwgNTc5LCAyMDQ4IH0sIHsgNCwgNTgwLCAyMDQ4IH0sIHsgNSwgNTgxLCAyMDQ4IH0sIHsgNSwgNTgyLCAyMDQ4IH0sIHsgNiwgNTgzLCAyMDQ4IH0sIAorICAgeyA0LCA1ODQsIDIwNDggfSwgeyA1LCA1ODUsIDIwNDggfSwgeyA1LCA1ODYsIDIwNDggfSwgeyA2LCA1ODcsIDIwNDggfSwgeyA1LCA1ODgsIDIwNDggfSwgeyA2LCA1ODksIDIwNDggfSwgeyA2LCA1OTAsIDIwNDggfSwgeyA3LCA1OTEsIDIwNDggfSwgCisgICB7IDQsIDU5MiwgMjA0OCB9LCB7IDUsIDU5MywgMjA0OCB9LCB7IDUsIDU5NCwgMjA0OCB9LCB7IDYsIDU5NSwgMjA0OCB9LCB7IDUsIDU5NiwgMjA0OCB9LCB7IDYsIDU5NywgMjA0OCB9LCB7IDYsIDU5OCwgMjA0OCB9LCB7IDcsIDU5OSwgMjA0OCB9LCAKKyAgIHsgNSwgNjAwLCAyMDQ4IH0sIHsgNiwgNjAxLCAyMDQ4IH0sIHsgNiwgNjAyLCAyMDQ4IH0sIHsgNywgNjAzLCAyMDQ4IH0sIHsgNiwgNjA0LCAyMDQ4IH0sIHsgNywgNjA1LCAyMDQ4IH0sIHsgNywgNjA2LCAyMDQ4IH0sIHsgOCwgNjA3LCAyMDQ4IH0sIAorICAgeyA0LCA2MDgsIDIwNDggfSwgeyA1LCA2MDksIDIwNDggfSwgeyA1LCA2MTAsIDIwNDggfSwgeyA2LCA2MTEsIDIwNDggfSwgeyA1LCA2MTIsIDIwNDggfSwgeyA2LCA2MTMsIDIwNDggfSwgeyA2LCA2MTQsIDIwNDggfSwgeyA3LCA2MTUsIDIwNDggfSwgCisgICB7IDUsIDYxNiwgMjA0OCB9LCB7IDYsIDYxNywgMjA0OCB9LCB7IDYsIDYxOCwgMjA0OCB9LCB7IDcsIDYxOSwgMjA0OCB9LCB7IDYsIDYyMCwgMjA0OCB9LCB7IDcsIDYyMSwgMjA0OCB9LCB7IDcsIDYyMiwgMjA0OCB9LCB7IDgsIDYyMywgMjA0OCB9LCAKKyAgIHsgNSwgNjI0LCAyMDQ4IH0sIHsgNiwgNjI1LCAyMDQ4IH0sIHsgNiwgNjI2LCAyMDQ4IH0sIHsgNywgNjI3LCAyMDQ4IH0sIHsgNiwgNjI4LCAyMDQ4IH0sIHsgNywgNjI5LCAyMDQ4IH0sIHsgNywgNjMwLCAyMDQ4IH0sIHsgOCwgNjMxLCAyMDQ4IH0sIAorICAgeyA2LCA2MzIsIDIwNDggfSwgeyA3LCA2MzMsIDIwNDggfSwgeyA3LCA2MzQsIDIwNDggfSwgeyA4LCA2MzUsIDIwNDggfSwgeyA3LCA2MzYsIDIwNDggfSwgeyA4LCA2MzcsIDIwNDggfSwgeyA4LCA2MzgsIDIwNDggfSwgeyA5LCA2MzksIDIwNDggfSwgCisgICB7IDMsIDY0MCwgMjA0OCB9LCB7IDQsIDY0MSwgMjA0OCB9LCB7IDQsIDY0MiwgMjA0OCB9LCB7IDUsIDY0MywgMjA0OCB9LCB7IDQsIDY0NCwgMjA0OCB9LCB7IDUsIDY0NSwgMjA0OCB9LCB7IDUsIDY0NiwgMjA0OCB9LCB7IDYsIDY0NywgMjA0OCB9LCAKKyAgIHsgNCwgNjQ4LCAyMDQ4IH0sIHsgNSwgNjQ5LCAyMDQ4IH0sIHsgNSwgNjUwLCAyMDQ4IH0sIHsgNiwgNjUxLCAyMDQ4IH0sIHsgNSwgNjUyLCAyMDQ4IH0sIHsgNiwgNjUzLCAyMDQ4IH0sIHsgNiwgNjU0LCAyMDQ4IH0sIHsgNywgNjU1LCAyMDQ4IH0sIAorICAgeyA0LCA2NTYsIDIwNDggfSwgeyA1LCA2NTcsIDIwNDggfSwgeyA1LCA2NTgsIDIwNDggfSwgeyA2LCA2NTksIDIwNDggfSwgeyA1LCA2NjAsIDIwNDggfSwgeyA2LCA2NjEsIDIwNDggfSwgeyA2LCA2NjIsIDIwNDggfSwgeyA3LCA2NjMsIDIwNDggfSwgCisgICB7IDUsIDY2NCwgMjA0OCB9LCB7IDYsIDY2NSwgMjA0OCB9LCB7IDYsIDY2NiwgMjA0OCB9LCB7IDcsIDY2NywgMjA0OCB9LCB7IDYsIDY2OCwgMjA0OCB9LCB7IDcsIDY2OSwgMjA0OCB9LCB7IDcsIDY3MCwgMjA0OCB9LCB7IDgsIDY3MSwgMjA0OCB9LCAKKyAgIHsgNCwgNjcyLCAyMDQ4IH0sIHsgNSwgNjczLCAyMDQ4IH0sIHsgNSwgNjc0LCAyMDQ4IH0sIHsgNiwgNjc1LCAyMDQ4IH0sIHsgNSwgNjc2LCAyMDQ4IH0sIHsgNiwgNjc3LCAyMDQ4IH0sIHsgNiwgNjc4LCAyMDQ4IH0sIHsgNywgNjc5LCAyMDQ4IH0sIAorICAgeyA1LCA2ODAsIDIwNDggfSwgeyA2LCA2ODEsIDIwNDggfSwgeyA2LCA2ODIsIDIwNDggfSwgeyA3LCA2ODMsIDIwNDggfSwgeyA2LCA2ODQsIDIwNDggfSwgeyA3LCA2ODUsIDIwNDggfSwgeyA3LCA2ODYsIDIwNDggfSwgeyA4LCA2ODcsIDIwNDggfSwgCisgICB7IDUsIDY4OCwgMjA0OCB9LCB7IDYsIDY4OSwgMjA0OCB9LCB7IDYsIDY5MCwgMjA0OCB9LCB7IDcsIDY5MSwgMjA0OCB9LCB7IDYsIDY5MiwgMjA0OCB9LCB7IDcsIDY5MywgMjA0OCB9LCB7IDcsIDY5NCwgMjA0OCB9LCB7IDgsIDY5NSwgMjA0OCB9LCAKKyAgIHsgNiwgNjk2LCAyMDQ4IH0sIHsgNywgNjk3LCAyMDQ4IH0sIHsgNywgNjk4LCAyMDQ4IH0sIHsgOCwgNjk5LCAyMDQ4IH0sIHsgNywgNzAwLCAyMDQ4IH0sIHsgOCwgNzAxLCAyMDQ4IH0sIHsgOCwgNzAyLCAyMDQ4IH0sIHsgOSwgNzAzLCAyMDQ4IH0sIAorICAgeyA0LCA3MDQsIDIwNDggfSwgeyA1LCA3MDUsIDIwNDggfSwgeyA1LCA3MDYsIDIwNDggfSwgeyA2LCA3MDcsIDIwNDggfSwgeyA1LCA3MDgsIDIwNDggfSwgeyA2LCA3MDksIDIwNDggfSwgeyA2LCA3MTAsIDIwNDggfSwgeyA3LCA3MTEsIDIwNDggfSwgCisgICB7IDUsIDcxMiwgMjA0OCB9LCB7IDYsIDcxMywgMjA0OCB9LCB7IDYsIDcxNCwgMjA0OCB9LCB7IDcsIDcxNSwgMjA0OCB9LCB7IDYsIDcxNiwgMjA0OCB9LCB7IDcsIDcxNywgMjA0OCB9LCB7IDcsIDcxOCwgMjA0OCB9LCB7IDgsIDcxOSwgMjA0OCB9LCAKKyAgIHsgNSwgNzIwLCAyMDQ4IH0sIHsgNiwgNzIxLCAyMDQ4IH0sIHsgNiwgNzIyLCAyMDQ4IH0sIHsgNywgNzIzLCAyMDQ4IH0sIHsgNiwgNzI0LCAyMDQ4IH0sIHsgNywgNzI1LCAyMDQ4IH0sIHsgNywgNzI2LCAyMDQ4IH0sIHsgOCwgNzI3LCAyMDQ4IH0sIAorICAgeyA2LCA3MjgsIDIwNDggfSwgeyA3LCA3MjksIDIwNDggfSwgeyA3LCA3MzAsIDIwNDggfSwgeyA4LCA3MzEsIDIwNDggfSwgeyA3LCA3MzIsIDIwNDggfSwgeyA4LCA3MzMsIDIwNDggfSwgeyA4LCA3MzQsIDIwNDggfSwgeyA5LCA3MzUsIDIwNDggfSwgCisgICB7IDUsIDczNiwgMjA0OCB9LCB7IDYsIDczNywgMjA0OCB9LCB7IDYsIDczOCwgMjA0OCB9LCB7IDcsIDczOSwgMjA0OCB9LCB7IDYsIDc0MCwgMjA0OCB9LCB7IDcsIDc0MSwgMjA0OCB9LCB7IDcsIDc0MiwgMjA0OCB9LCB7IDgsIDc0MywgMjA0OCB9LCAKKyAgIHsgNiwgNzQ0LCAyMDQ4IH0sIHsgNywgNzQ1LCAyMDQ4IH0sIHsgNywgNzQ2LCAyMDQ4IH0sIHsgOCwgNzQ3LCAyMDQ4IH0sIHsgNywgNzQ4LCAyMDQ4IH0sIHsgOCwgNzQ5LCAyMDQ4IH0sIHsgOCwgNzUwLCAyMDQ4IH0sIHsgOSwgNzUxLCAyMDQ4IH0sIAorICAgeyA2LCA3NTIsIDIwNDggfSwgeyA3LCA3NTMsIDIwNDggfSwgeyA3LCA3NTQsIDIwNDggfSwgeyA4LCA3NTUsIDIwNDggfSwgeyA3LCA3NTYsIDIwNDggfSwgeyA4LCA3NTcsIDIwNDggfSwgeyA4LCA3NTgsIDIwNDggfSwgeyA5LCA3NTksIDIwNDggfSwgCisgICB7IDcsIDc2MCwgMjA0OCB9LCB7IDgsIDc2MSwgMjA0OCB9LCB7IDgsIDc2MiwgMjA0OCB9LCB7IDksIDc2MywgMjA0OCB9LCB7IDgsIDc2NCwgMjA0OCB9LCB7IDksIDc2NSwgMjA0OCB9LCB7IDksIDc2NiwgMjA0OCB9LCB7IDEwLCA3NjcsIDIwNDggfSwgCisgICB7IDMsIDc2OCwgMjA0OCB9LCB7IDQsIDc2OSwgMjA0OCB9LCB7IDQsIDc3MCwgMjA0OCB9LCB7IDUsIDc3MSwgMjA0OCB9LCB7IDQsIDc3MiwgMjA0OCB9LCB7IDUsIDc3MywgMjA0OCB9LCB7IDUsIDc3NCwgMjA0OCB9LCB7IDYsIDc3NSwgMjA0OCB9LCAKKyAgIHsgNCwgNzc2LCAyMDQ4IH0sIHsgNSwgNzc3LCAyMDQ4IH0sIHsgNSwgNzc4LCAyMDQ4IH0sIHsgNiwgNzc5LCAyMDQ4IH0sIHsgNSwgNzgwLCAyMDQ4IH0sIHsgNiwgNzgxLCAyMDQ4IH0sIHsgNiwgNzgyLCAyMDQ4IH0sIHsgNywgNzgzLCAyMDQ4IH0sIAorICAgeyA0LCA3ODQsIDIwNDggfSwgeyA1LCA3ODUsIDIwNDggfSwgeyA1LCA3ODYsIDIwNDggfSwgeyA2LCA3ODcsIDIwNDggfSwgeyA1LCA3ODgsIDIwNDggfSwgeyA2LCA3ODksIDIwNDggfSwgeyA2LCA3OTAsIDIwNDggfSwgeyA3LCA3OTEsIDIwNDggfSwgCisgICB7IDUsIDc5MiwgMjA0OCB9LCB7IDYsIDc5MywgMjA0OCB9LCB7IDYsIDc5NCwgMjA0OCB9LCB7IDcsIDc5NSwgMjA0OCB9LCB7IDYsIDc5NiwgMjA0OCB9LCB7IDcsIDc5NywgMjA0OCB9LCB7IDcsIDc5OCwgMjA0OCB9LCB7IDgsIDc5OSwgMjA0OCB9LCAKKyAgIHsgNCwgODAwLCAyMDQ4IH0sIHsgNSwgODAxLCAyMDQ4IH0sIHsgNSwgODAyLCAyMDQ4IH0sIHsgNiwgODAzLCAyMDQ4IH0sIHsgNSwgODA0LCAyMDQ4IH0sIHsgNiwgODA1LCAyMDQ4IH0sIHsgNiwgODA2LCAyMDQ4IH0sIHsgNywgODA3LCAyMDQ4IH0sIAorICAgeyA1LCA4MDgsIDIwNDggfSwgeyA2LCA4MDksIDIwNDggfSwgeyA2LCA4MTAsIDIwNDggfSwgeyA3LCA4MTEsIDIwNDggfSwgeyA2LCA4MTIsIDIwNDggfSwgeyA3LCA4MTMsIDIwNDggfSwgeyA3LCA4MTQsIDIwNDggfSwgeyA4LCA4MTUsIDIwNDggfSwgCisgICB7IDUsIDgxNiwgMjA0OCB9LCB7IDYsIDgxNywgMjA0OCB9LCB7IDYsIDgxOCwgMjA0OCB9LCB7IDcsIDgxOSwgMjA0OCB9LCB7IDYsIDgyMCwgMjA0OCB9LCB7IDcsIDgyMSwgMjA0OCB9LCB7IDcsIDgyMiwgMjA0OCB9LCB7IDgsIDgyMywgMjA0OCB9LCAKKyAgIHsgNiwgODI0LCAyMDQ4IH0sIHsgNywgODI1LCAyMDQ4IH0sIHsgNywgODI2LCAyMDQ4IH0sIHsgOCwgODI3LCAyMDQ4IH0sIHsgNywgODI4LCAyMDQ4IH0sIHsgOCwgODI5LCAyMDQ4IH0sIHsgOCwgODMwLCAyMDQ4IH0sIHsgOSwgODMxLCAyMDQ4IH0sIAorICAgeyA0LCA4MzIsIDIwNDggfSwgeyA1LCA4MzMsIDIwNDggfSwgeyA1LCA4MzQsIDIwNDggfSwgeyA2LCA4MzUsIDIwNDggfSwgeyA1LCA4MzYsIDIwNDggfSwgeyA2LCA4MzcsIDIwNDggfSwgeyA2LCA4MzgsIDIwNDggfSwgeyA3LCA4MzksIDIwNDggfSwgCisgICB7IDUsIDg0MCwgMjA0OCB9LCB7IDYsIDg0MSwgMjA0OCB9LCB7IDYsIDg0MiwgMjA0OCB9LCB7IDcsIDg0MywgMjA0OCB9LCB7IDYsIDg0NCwgMjA0OCB9LCB7IDcsIDg0NSwgMjA0OCB9LCB7IDcsIDg0NiwgMjA0OCB9LCB7IDgsIDg0NywgMjA0OCB9LCAKKyAgIHsgNSwgODQ4LCAyMDQ4IH0sIHsgNiwgODQ5LCAyMDQ4IH0sIHsgNiwgODUwLCAyMDQ4IH0sIHsgNywgODUxLCAyMDQ4IH0sIHsgNiwgODUyLCAyMDQ4IH0sIHsgNywgODUzLCAyMDQ4IH0sIHsgNywgODU0LCAyMDQ4IH0sIHsgOCwgODU1LCAyMDQ4IH0sIAorICAgeyA2LCA4NTYsIDIwNDggfSwgeyA3LCA4NTcsIDIwNDggfSwgeyA3LCA4NTgsIDIwNDggfSwgeyA4LCA4NTksIDIwNDggfSwgeyA3LCA4NjAsIDIwNDggfSwgeyA4LCA4NjEsIDIwNDggfSwgeyA4LCA4NjIsIDIwNDggfSwgeyA5LCA4NjMsIDIwNDggfSwgCisgICB7IDUsIDg2NCwgMjA0OCB9LCB7IDYsIDg2NSwgMjA0OCB9LCB7IDYsIDg2NiwgMjA0OCB9LCB7IDcsIDg2NywgMjA0OCB9LCB7IDYsIDg2OCwgMjA0OCB9LCB7IDcsIDg2OSwgMjA0OCB9LCB7IDcsIDg3MCwgMjA0OCB9LCB7IDgsIDg3MSwgMjA0OCB9LCAKKyAgIHsgNiwgODcyLCAyMDQ4IH0sIHsgNywgODczLCAyMDQ4IH0sIHsgNywgODc0LCAyMDQ4IH0sIHsgOCwgODc1LCAyMDQ4IH0sIHsgNywgODc2LCAyMDQ4IH0sIHsgOCwgODc3LCAyMDQ4IH0sIHsgOCwgODc4LCAyMDQ4IH0sIHsgOSwgODc5LCAyMDQ4IH0sIAorICAgeyA2LCA4ODAsIDIwNDggfSwgeyA3LCA4ODEsIDIwNDggfSwgeyA3LCA4ODIsIDIwNDggfSwgeyA4LCA4ODMsIDIwNDggfSwgeyA3LCA4ODQsIDIwNDggfSwgeyA4LCA4ODUsIDIwNDggfSwgeyA4LCA4ODYsIDIwNDggfSwgeyA5LCA4ODcsIDIwNDggfSwgCisgICB7IDcsIDg4OCwgMjA0OCB9LCB7IDgsIDg4OSwgMjA0OCB9LCB7IDgsIDg5MCwgMjA0OCB9LCB7IDksIDg5MSwgMjA0OCB9LCB7IDgsIDg5MiwgMjA0OCB9LCB7IDksIDg5MywgMjA0OCB9LCB7IDksIDg5NCwgMjA0OCB9LCB7IDEwLCA4OTUsIDIwNDggfSwgCisgICB7IDQsIDg5NiwgMjA0OCB9LCB7IDUsIDg5NywgMjA0OCB9LCB7IDUsIDg5OCwgMjA0OCB9LCB7IDYsIDg5OSwgMjA0OCB9LCB7IDUsIDkwMCwgMjA0OCB9LCB7IDYsIDkwMSwgMjA0OCB9LCB7IDYsIDkwMiwgMjA0OCB9LCB7IDcsIDkwMywgMjA0OCB9LCAKKyAgIHsgNSwgOTA0LCAyMDQ4IH0sIHsgNiwgOTA1LCAyMDQ4IH0sIHsgNiwgOTA2LCAyMDQ4IH0sIHsgNywgOTA3LCAyMDQ4IH0sIHsgNiwgOTA4LCAyMDQ4IH0sIHsgNywgOTA5LCAyMDQ4IH0sIHsgNywgOTEwLCAyMDQ4IH0sIHsgOCwgOTExLCAyMDQ4IH0sIAorICAgeyA1LCA5MTIsIDIwNDggfSwgeyA2LCA5MTMsIDIwNDggfSwgeyA2LCA5MTQsIDIwNDggfSwgeyA3LCA5MTUsIDIwNDggfSwgeyA2LCA5MTYsIDIwNDggfSwgeyA3LCA5MTcsIDIwNDggfSwgeyA3LCA5MTgsIDIwNDggfSwgeyA4LCA5MTksIDIwNDggfSwgCisgICB7IDYsIDkyMCwgMjA0OCB9LCB7IDcsIDkyMSwgMjA0OCB9LCB7IDcsIDkyMiwgMjA0OCB9LCB7IDgsIDkyMywgMjA0OCB9LCB7IDcsIDkyNCwgMjA0OCB9LCB7IDgsIDkyNSwgMjA0OCB9LCB7IDgsIDkyNiwgMjA0OCB9LCB7IDksIDkyNywgMjA0OCB9LCAKKyAgIHsgNSwgOTI4LCAyMDQ4IH0sIHsgNiwgOTI5LCAyMDQ4IH0sIHsgNiwgOTMwLCAyMDQ4IH0sIHsgNywgOTMxLCAyMDQ4IH0sIHsgNiwgOTMyLCAyMDQ4IH0sIHsgNywgOTMzLCAyMDQ4IH0sIHsgNywgOTM0LCAyMDQ4IH0sIHsgOCwgOTM1LCAyMDQ4IH0sIAorICAgeyA2LCA5MzYsIDIwNDggfSwgeyA3LCA5MzcsIDIwNDggfSwgeyA3LCA5MzgsIDIwNDggfSwgeyA4LCA5MzksIDIwNDggfSwgeyA3LCA5NDAsIDIwNDggfSwgeyA4LCA5NDEsIDIwNDggfSwgeyA4LCA5NDIsIDIwNDggfSwgeyA5LCA5NDMsIDIwNDggfSwgCisgICB7IDYsIDk0NCwgMjA0OCB9LCB7IDcsIDk0NSwgMjA0OCB9LCB7IDcsIDk0NiwgMjA0OCB9LCB7IDgsIDk0NywgMjA0OCB9LCB7IDcsIDk0OCwgMjA0OCB9LCB7IDgsIDk0OSwgMjA0OCB9LCB7IDgsIDk1MCwgMjA0OCB9LCB7IDksIDk1MSwgMjA0OCB9LCAKKyAgIHsgNywgOTUyLCAyMDQ4IH0sIHsgOCwgOTUzLCAyMDQ4IH0sIHsgOCwgOTU0LCAyMDQ4IH0sIHsgOSwgOTU1LCAyMDQ4IH0sIHsgOCwgOTU2LCAyMDQ4IH0sIHsgOSwgOTU3LCAyMDQ4IH0sIHsgOSwgOTU4LCAyMDQ4IH0sIHsgMTAsIDk1OSwgMjA0OCB9LCAKKyAgIHsgNSwgOTYwLCAyMDQ4IH0sIHsgNiwgOTYxLCAyMDQ4IH0sIHsgNiwgOTYyLCAyMDQ4IH0sIHsgNywgOTYzLCAyMDQ4IH0sIHsgNiwgOTY0LCAyMDQ4IH0sIHsgNywgOTY1LCAyMDQ4IH0sIHsgNywgOTY2LCAyMDQ4IH0sIHsgOCwgOTY3LCAyMDQ4IH0sIAorICAgeyA2LCA5NjgsIDIwNDggfSwgeyA3LCA5NjksIDIwNDggfSwgeyA3LCA5NzAsIDIwNDggfSwgeyA4LCA5NzEsIDIwNDggfSwgeyA3LCA5NzIsIDIwNDggfSwgeyA4LCA5NzMsIDIwNDggfSwgeyA4LCA5NzQsIDIwNDggfSwgeyA5LCA5NzUsIDIwNDggfSwgCisgICB7IDYsIDk3NiwgMjA0OCB9LCB7IDcsIDk3NywgMjA0OCB9LCB7IDcsIDk3OCwgMjA0OCB9LCB7IDgsIDk3OSwgMjA0OCB9LCB7IDcsIDk4MCwgMjA0OCB9LCB7IDgsIDk4MSwgMjA0OCB9LCB7IDgsIDk4MiwgMjA0OCB9LCB7IDksIDk4MywgMjA0OCB9LCAKKyAgIHsgNywgOTg0LCAyMDQ4IH0sIHsgOCwgOTg1LCAyMDQ4IH0sIHsgOCwgOTg2LCAyMDQ4IH0sIHsgOSwgOTg3LCAyMDQ4IH0sIHsgOCwgOTg4LCAyMDQ4IH0sIHsgOSwgOTg5LCAyMDQ4IH0sIHsgOSwgOTkwLCAyMDQ4IH0sIHsgMTAsIDk5MSwgMjA0OCB9LCAKKyAgIHsgNiwgOTkyLCAyMDQ4IH0sIHsgNywgOTkzLCAyMDQ4IH0sIHsgNywgOTk0LCAyMDQ4IH0sIHsgOCwgOTk1LCAyMDQ4IH0sIHsgNywgOTk2LCAyMDQ4IH0sIHsgOCwgOTk3LCAyMDQ4IH0sIHsgOCwgOTk4LCAyMDQ4IH0sIHsgOSwgOTk5LCAyMDQ4IH0sIAorICAgeyA3LCAxMDAwLCAyMDQ4IH0sIHsgOCwgMTAwMSwgMjA0OCB9LCB7IDgsIDEwMDIsIDIwNDggfSwgeyA5LCAxMDAzLCAyMDQ4IH0sIHsgOCwgMTAwNCwgMjA0OCB9LCB7IDksIDEwMDUsIDIwNDggfSwgeyA5LCAxMDA2LCAyMDQ4IH0sIHsgMTAsIDEwMDcsIDIwNDggfSwgCisgICB7IDcsIDEwMDgsIDIwNDggfSwgeyA4LCAxMDA5LCAyMDQ4IH0sIHsgOCwgMTAxMCwgMjA0OCB9LCB7IDksIDEwMTEsIDIwNDggfSwgeyA4LCAxMDEyLCAyMDQ4IH0sIHsgOSwgMTAxMywgMjA0OCB9LCB7IDksIDEwMTQsIDIwNDggfSwgeyAxMCwgMTAxNSwgMjA0OCB9LCAKKyAgIHsgOCwgMTAxNiwgMjA0OCB9LCB7IDksIDEwMTcsIDIwNDggfSwgeyA5LCAxMDE4LCAyMDQ4IH0sIHsgMTAsIDEwMTksIDIwNDggfSwgeyA5LCAxMDIwLCAyMDQ4IH0sIHsgMTAsIDEwMjEsIDIwNDggfSwgeyAxMCwgMTAyMiwgMjA0OCB9LCB7IDExLCAxMDIzLCAyMDQ4IH0sIAorICAgeyAyLCAxMDI0LCAyMDQ4IH0sIHsgMywgMTAyNSwgMjA0OCB9LCB7IDMsIDEwMjYsIDIwNDggfSwgeyA0LCAxMDI3LCAyMDQ4IH0sIHsgMywgMTAyOCwgMjA0OCB9LCB7IDQsIDEwMjksIDIwNDggfSwgeyA0LCAxMDMwLCAyMDQ4IH0sIHsgNSwgMTAzMSwgMjA0OCB9LCAKKyAgIHsgMywgMTAzMiwgMjA0OCB9LCB7IDQsIDEwMzMsIDIwNDggfSwgeyA0LCAxMDM0LCAyMDQ4IH0sIHsgNSwgMTAzNSwgMjA0OCB9LCB7IDQsIDEwMzYsIDIwNDggfSwgeyA1LCAxMDM3LCAyMDQ4IH0sIHsgNSwgMTAzOCwgMjA0OCB9LCB7IDYsIDEwMzksIDIwNDggfSwgCisgICB7IDMsIDEwNDAsIDIwNDggfSwgeyA0LCAxMDQxLCAyMDQ4IH0sIHsgNCwgMTA0MiwgMjA0OCB9LCB7IDUsIDEwNDMsIDIwNDggfSwgeyA0LCAxMDQ0LCAyMDQ4IH0sIHsgNSwgMTA0NSwgMjA0OCB9LCB7IDUsIDEwNDYsIDIwNDggfSwgeyA2LCAxMDQ3LCAyMDQ4IH0sIAorICAgeyA0LCAxMDQ4LCAyMDQ4IH0sIHsgNSwgMTA0OSwgMjA0OCB9LCB7IDUsIDEwNTAsIDIwNDggfSwgeyA2LCAxMDUxLCAyMDQ4IH0sIHsgNSwgMTA1MiwgMjA0OCB9LCB7IDYsIDEwNTMsIDIwNDggfSwgeyA2LCAxMDU0LCAyMDQ4IH0sIHsgNywgMTA1NSwgMjA0OCB9LCAKKyAgIHsgMywgMTA1NiwgMjA0OCB9LCB7IDQsIDEwNTcsIDIwNDggfSwgeyA0LCAxMDU4LCAyMDQ4IH0sIHsgNSwgMTA1OSwgMjA0OCB9LCB7IDQsIDEwNjAsIDIwNDggfSwgeyA1LCAxMDYxLCAyMDQ4IH0sIHsgNSwgMTA2MiwgMjA0OCB9LCB7IDYsIDEwNjMsIDIwNDggfSwgCisgICB7IDQsIDEwNjQsIDIwNDggfSwgeyA1LCAxMDY1LCAyMDQ4IH0sIHsgNSwgMTA2NiwgMjA0OCB9LCB7IDYsIDEwNjcsIDIwNDggfSwgeyA1LCAxMDY4LCAyMDQ4IH0sIHsgNiwgMTA2OSwgMjA0OCB9LCB7IDYsIDEwNzAsIDIwNDggfSwgeyA3LCAxMDcxLCAyMDQ4IH0sIAorICAgeyA0LCAxMDcyLCAyMDQ4IH0sIHsgNSwgMTA3MywgMjA0OCB9LCB7IDUsIDEwNzQsIDIwNDggfSwgeyA2LCAxMDc1LCAyMDQ4IH0sIHsgNSwgMTA3NiwgMjA0OCB9LCB7IDYsIDEwNzcsIDIwNDggfSwgeyA2LCAxMDc4LCAyMDQ4IH0sIHsgNywgMTA3OSwgMjA0OCB9LCAKKyAgIHsgNSwgMTA4MCwgMjA0OCB9LCB7IDYsIDEwODEsIDIwNDggfSwgeyA2LCAxMDgyLCAyMDQ4IH0sIHsgNywgMTA4MywgMjA0OCB9LCB7IDYsIDEwODQsIDIwNDggfSwgeyA3LCAxMDg1LCAyMDQ4IH0sIHsgNywgMTA4NiwgMjA0OCB9LCB7IDgsIDEwODcsIDIwNDggfSwgCisgICB7IDMsIDEwODgsIDIwNDggfSwgeyA0LCAxMDg5LCAyMDQ4IH0sIHsgNCwgMTA5MCwgMjA0OCB9LCB7IDUsIDEwOTEsIDIwNDggfSwgeyA0LCAxMDkyLCAyMDQ4IH0sIHsgNSwgMTA5MywgMjA0OCB9LCB7IDUsIDEwOTQsIDIwNDggfSwgeyA2LCAxMDk1LCAyMDQ4IH0sIAorICAgeyA0LCAxMDk2LCAyMDQ4IH0sIHsgNSwgMTA5NywgMjA0OCB9LCB7IDUsIDEwOTgsIDIwNDggfSwgeyA2LCAxMDk5LCAyMDQ4IH0sIHsgNSwgMTEwMCwgMjA0OCB9LCB7IDYsIDExMDEsIDIwNDggfSwgeyA2LCAxMTAyLCAyMDQ4IH0sIHsgNywgMTEwMywgMjA0OCB9LCAKKyAgIHsgNCwgMTEwNCwgMjA0OCB9LCB7IDUsIDExMDUsIDIwNDggfSwgeyA1LCAxMTA2LCAyMDQ4IH0sIHsgNiwgMTEwNywgMjA0OCB9LCB7IDUsIDExMDgsIDIwNDggfSwgeyA2LCAxMTA5LCAyMDQ4IH0sIHsgNiwgMTExMCwgMjA0OCB9LCB7IDcsIDExMTEsIDIwNDggfSwgCisgICB7IDUsIDExMTIsIDIwNDggfSwgeyA2LCAxMTEzLCAyMDQ4IH0sIHsgNiwgMTExNCwgMjA0OCB9LCB7IDcsIDExMTUsIDIwNDggfSwgeyA2LCAxMTE2LCAyMDQ4IH0sIHsgNywgMTExNywgMjA0OCB9LCB7IDcsIDExMTgsIDIwNDggfSwgeyA4LCAxMTE5LCAyMDQ4IH0sIAorICAgeyA0LCAxMTIwLCAyMDQ4IH0sIHsgNSwgMTEyMSwgMjA0OCB9LCB7IDUsIDExMjIsIDIwNDggfSwgeyA2LCAxMTIzLCAyMDQ4IH0sIHsgNSwgMTEyNCwgMjA0OCB9LCB7IDYsIDExMjUsIDIwNDggfSwgeyA2LCAxMTI2LCAyMDQ4IH0sIHsgNywgMTEyNywgMjA0OCB9LCAKKyAgIHsgNSwgMTEyOCwgMjA0OCB9LCB7IDYsIDExMjksIDIwNDggfSwgeyA2LCAxMTMwLCAyMDQ4IH0sIHsgNywgMTEzMSwgMjA0OCB9LCB7IDYsIDExMzIsIDIwNDggfSwgeyA3LCAxMTMzLCAyMDQ4IH0sIHsgNywgMTEzNCwgMjA0OCB9LCB7IDgsIDExMzUsIDIwNDggfSwgCisgICB7IDUsIDExMzYsIDIwNDggfSwgeyA2LCAxMTM3LCAyMDQ4IH0sIHsgNiwgMTEzOCwgMjA0OCB9LCB7IDcsIDExMzksIDIwNDggfSwgeyA2LCAxMTQwLCAyMDQ4IH0sIHsgNywgMTE0MSwgMjA0OCB9LCB7IDcsIDExNDIsIDIwNDggfSwgeyA4LCAxMTQzLCAyMDQ4IH0sIAorICAgeyA2LCAxMTQ0LCAyMDQ4IH0sIHsgNywgMTE0NSwgMjA0OCB9LCB7IDcsIDExNDYsIDIwNDggfSwgeyA4LCAxMTQ3LCAyMDQ4IH0sIHsgNywgMTE0OCwgMjA0OCB9LCB7IDgsIDExNDksIDIwNDggfSwgeyA4LCAxMTUwLCAyMDQ4IH0sIHsgOSwgMTE1MSwgMjA0OCB9LCAKKyAgIHsgMywgMTE1MiwgMjA0OCB9LCB7IDQsIDExNTMsIDIwNDggfSwgeyA0LCAxMTU0LCAyMDQ4IH0sIHsgNSwgMTE1NSwgMjA0OCB9LCB7IDQsIDExNTYsIDIwNDggfSwgeyA1LCAxMTU3LCAyMDQ4IH0sIHsgNSwgMTE1OCwgMjA0OCB9LCB7IDYsIDExNTksIDIwNDggfSwgCisgICB7IDQsIDExNjAsIDIwNDggfSwgeyA1LCAxMTYxLCAyMDQ4IH0sIHsgNSwgMTE2MiwgMjA0OCB9LCB7IDYsIDExNjMsIDIwNDggfSwgeyA1LCAxMTY0LCAyMDQ4IH0sIHsgNiwgMTE2NSwgMjA0OCB9LCB7IDYsIDExNjYsIDIwNDggfSwgeyA3LCAxMTY3LCAyMDQ4IH0sIAorICAgeyA0LCAxMTY4LCAyMDQ4IH0sIHsgNSwgMTE2OSwgMjA0OCB9LCB7IDUsIDExNzAsIDIwNDggfSwgeyA2LCAxMTcxLCAyMDQ4IH0sIHsgNSwgMTE3MiwgMjA0OCB9LCB7IDYsIDExNzMsIDIwNDggfSwgeyA2LCAxMTc0LCAyMDQ4IH0sIHsgNywgMTE3NSwgMjA0OCB9LCAKKyAgIHsgNSwgMTE3NiwgMjA0OCB9LCB7IDYsIDExNzcsIDIwNDggfSwgeyA2LCAxMTc4LCAyMDQ4IH0sIHsgNywgMTE3OSwgMjA0OCB9LCB7IDYsIDExODAsIDIwNDggfSwgeyA3LCAxMTgxLCAyMDQ4IH0sIHsgNywgMTE4MiwgMjA0OCB9LCB7IDgsIDExODMsIDIwNDggfSwgCisgICB7IDQsIDExODQsIDIwNDggfSwgeyA1LCAxMTg1LCAyMDQ4IH0sIHsgNSwgMTE4NiwgMjA0OCB9LCB7IDYsIDExODcsIDIwNDggfSwgeyA1LCAxMTg4LCAyMDQ4IH0sIHsgNiwgMTE4OSwgMjA0OCB9LCB7IDYsIDExOTAsIDIwNDggfSwgeyA3LCAxMTkxLCAyMDQ4IH0sIAorICAgeyA1LCAxMTkyLCAyMDQ4IH0sIHsgNiwgMTE5MywgMjA0OCB9LCB7IDYsIDExOTQsIDIwNDggfSwgeyA3LCAxMTk1LCAyMDQ4IH0sIHsgNiwgMTE5NiwgMjA0OCB9LCB7IDcsIDExOTcsIDIwNDggfSwgeyA3LCAxMTk4LCAyMDQ4IH0sIHsgOCwgMTE5OSwgMjA0OCB9LCAKKyAgIHsgNSwgMTIwMCwgMjA0OCB9LCB7IDYsIDEyMDEsIDIwNDggfSwgeyA2LCAxMjAyLCAyMDQ4IH0sIHsgNywgMTIwMywgMjA0OCB9LCB7IDYsIDEyMDQsIDIwNDggfSwgeyA3LCAxMjA1LCAyMDQ4IH0sIHsgNywgMTIwNiwgMjA0OCB9LCB7IDgsIDEyMDcsIDIwNDggfSwgCisgICB7IDYsIDEyMDgsIDIwNDggfSwgeyA3LCAxMjA5LCAyMDQ4IH0sIHsgNywgMTIxMCwgMjA0OCB9LCB7IDgsIDEyMTEsIDIwNDggfSwgeyA3LCAxMjEyLCAyMDQ4IH0sIHsgOCwgMTIxMywgMjA0OCB9LCB7IDgsIDEyMTQsIDIwNDggfSwgeyA5LCAxMjE1LCAyMDQ4IH0sIAorICAgeyA0LCAxMjE2LCAyMDQ4IH0sIHsgNSwgMTIxNywgMjA0OCB9LCB7IDUsIDEyMTgsIDIwNDggfSwgeyA2LCAxMjE5LCAyMDQ4IH0sIHsgNSwgMTIyMCwgMjA0OCB9LCB7IDYsIDEyMjEsIDIwNDggfSwgeyA2LCAxMjIyLCAyMDQ4IH0sIHsgNywgMTIyMywgMjA0OCB9LCAKKyAgIHsgNSwgMTIyNCwgMjA0OCB9LCB7IDYsIDEyMjUsIDIwNDggfSwgeyA2LCAxMjI2LCAyMDQ4IH0sIHsgNywgMTIyNywgMjA0OCB9LCB7IDYsIDEyMjgsIDIwNDggfSwgeyA3LCAxMjI5LCAyMDQ4IH0sIHsgNywgMTIzMCwgMjA0OCB9LCB7IDgsIDEyMzEsIDIwNDggfSwgCisgICB7IDUsIDEyMzIsIDIwNDggfSwgeyA2LCAxMjMzLCAyMDQ4IH0sIHsgNiwgMTIzNCwgMjA0OCB9LCB7IDcsIDEyMzUsIDIwNDggfSwgeyA2LCAxMjM2LCAyMDQ4IH0sIHsgNywgMTIzNywgMjA0OCB9LCB7IDcsIDEyMzgsIDIwNDggfSwgeyA4LCAxMjM5LCAyMDQ4IH0sIAorICAgeyA2LCAxMjQwLCAyMDQ4IH0sIHsgNywgMTI0MSwgMjA0OCB9LCB7IDcsIDEyNDIsIDIwNDggfSwgeyA4LCAxMjQzLCAyMDQ4IH0sIHsgNywgMTI0NCwgMjA0OCB9LCB7IDgsIDEyNDUsIDIwNDggfSwgeyA4LCAxMjQ2LCAyMDQ4IH0sIHsgOSwgMTI0NywgMjA0OCB9LCAKKyAgIHsgNSwgMTI0OCwgMjA0OCB9LCB7IDYsIDEyNDksIDIwNDggfSwgeyA2LCAxMjUwLCAyMDQ4IH0sIHsgNywgMTI1MSwgMjA0OCB9LCB7IDYsIDEyNTIsIDIwNDggfSwgeyA3LCAxMjUzLCAyMDQ4IH0sIHsgNywgMTI1NCwgMjA0OCB9LCB7IDgsIDEyNTUsIDIwNDggfSwgCisgICB7IDYsIDEyNTYsIDIwNDggfSwgeyA3LCAxMjU3LCAyMDQ4IH0sIHsgNywgMTI1OCwgMjA0OCB9LCB7IDgsIDEyNTksIDIwNDggfSwgeyA3LCAxMjYwLCAyMDQ4IH0sIHsgOCwgMTI2MSwgMjA0OCB9LCB7IDgsIDEyNjIsIDIwNDggfSwgeyA5LCAxMjYzLCAyMDQ4IH0sIAorICAgeyA2LCAxMjY0LCAyMDQ4IH0sIHsgNywgMTI2NSwgMjA0OCB9LCB7IDcsIDEyNjYsIDIwNDggfSwgeyA4LCAxMjY3LCAyMDQ4IH0sIHsgNywgMTI2OCwgMjA0OCB9LCB7IDgsIDEyNjksIDIwNDggfSwgeyA4LCAxMjcwLCAyMDQ4IH0sIHsgOSwgMTI3MSwgMjA0OCB9LCAKKyAgIHsgNywgMTI3MiwgMjA0OCB9LCB7IDgsIDEyNzMsIDIwNDggfSwgeyA4LCAxMjc0LCAyMDQ4IH0sIHsgOSwgMTI3NSwgMjA0OCB9LCB7IDgsIDEyNzYsIDIwNDggfSwgeyA5LCAxMjc3LCAyMDQ4IH0sIHsgOSwgMTI3OCwgMjA0OCB9LCB7IDEwLCAxMjc5LCAyMDQ4IH0sIAorICAgeyAzLCAxMjgwLCAyMDQ4IH0sIHsgNCwgMTI4MSwgMjA0OCB9LCB7IDQsIDEyODIsIDIwNDggfSwgeyA1LCAxMjgzLCAyMDQ4IH0sIHsgNCwgMTI4NCwgMjA0OCB9LCB7IDUsIDEyODUsIDIwNDggfSwgeyA1LCAxMjg2LCAyMDQ4IH0sIHsgNiwgMTI4NywgMjA0OCB9LCAKKyAgIHsgNCwgMTI4OCwgMjA0OCB9LCB7IDUsIDEyODksIDIwNDggfSwgeyA1LCAxMjkwLCAyMDQ4IH0sIHsgNiwgMTI5MSwgMjA0OCB9LCB7IDUsIDEyOTIsIDIwNDggfSwgeyA2LCAxMjkzLCAyMDQ4IH0sIHsgNiwgMTI5NCwgMjA0OCB9LCB7IDcsIDEyOTUsIDIwNDggfSwgCisgICB7IDQsIDEyOTYsIDIwNDggfSwgeyA1LCAxMjk3LCAyMDQ4IH0sIHsgNSwgMTI5OCwgMjA0OCB9LCB7IDYsIDEyOTksIDIwNDggfSwgeyA1LCAxMzAwLCAyMDQ4IH0sIHsgNiwgMTMwMSwgMjA0OCB9LCB7IDYsIDEzMDIsIDIwNDggfSwgeyA3LCAxMzAzLCAyMDQ4IH0sIAorICAgeyA1LCAxMzA0LCAyMDQ4IH0sIHsgNiwgMTMwNSwgMjA0OCB9LCB7IDYsIDEzMDYsIDIwNDggfSwgeyA3LCAxMzA3LCAyMDQ4IH0sIHsgNiwgMTMwOCwgMjA0OCB9LCB7IDcsIDEzMDksIDIwNDggfSwgeyA3LCAxMzEwLCAyMDQ4IH0sIHsgOCwgMTMxMSwgMjA0OCB9LCAKKyAgIHsgNCwgMTMxMiwgMjA0OCB9LCB7IDUsIDEzMTMsIDIwNDggfSwgeyA1LCAxMzE0LCAyMDQ4IH0sIHsgNiwgMTMxNSwgMjA0OCB9LCB7IDUsIDEzMTYsIDIwNDggfSwgeyA2LCAxMzE3LCAyMDQ4IH0sIHsgNiwgMTMxOCwgMjA0OCB9LCB7IDcsIDEzMTksIDIwNDggfSwgCisgICB7IDUsIDEzMjAsIDIwNDggfSwgeyA2LCAxMzIxLCAyMDQ4IH0sIHsgNiwgMTMyMiwgMjA0OCB9LCB7IDcsIDEzMjMsIDIwNDggfSwgeyA2LCAxMzI0LCAyMDQ4IH0sIHsgNywgMTMyNSwgMjA0OCB9LCB7IDcsIDEzMjYsIDIwNDggfSwgeyA4LCAxMzI3LCAyMDQ4IH0sIAorICAgeyA1LCAxMzI4LCAyMDQ4IH0sIHsgNiwgMTMyOSwgMjA0OCB9LCB7IDYsIDEzMzAsIDIwNDggfSwgeyA3LCAxMzMxLCAyMDQ4IH0sIHsgNiwgMTMzMiwgMjA0OCB9LCB7IDcsIDEzMzMsIDIwNDggfSwgeyA3LCAxMzM0LCAyMDQ4IH0sIHsgOCwgMTMzNSwgMjA0OCB9LCAKKyAgIHsgNiwgMTMzNiwgMjA0OCB9LCB7IDcsIDEzMzcsIDIwNDggfSwgeyA3LCAxMzM4LCAyMDQ4IH0sIHsgOCwgMTMzOSwgMjA0OCB9LCB7IDcsIDEzNDAsIDIwNDggfSwgeyA4LCAxMzQxLCAyMDQ4IH0sIHsgOCwgMTM0MiwgMjA0OCB9LCB7IDksIDEzNDMsIDIwNDggfSwgCisgICB7IDQsIDEzNDQsIDIwNDggfSwgeyA1LCAxMzQ1LCAyMDQ4IH0sIHsgNSwgMTM0NiwgMjA0OCB9LCB7IDYsIDEzNDcsIDIwNDggfSwgeyA1LCAxMzQ4LCAyMDQ4IH0sIHsgNiwgMTM0OSwgMjA0OCB9LCB7IDYsIDEzNTAsIDIwNDggfSwgeyA3LCAxMzUxLCAyMDQ4IH0sIAorICAgeyA1LCAxMzUyLCAyMDQ4IH0sIHsgNiwgMTM1MywgMjA0OCB9LCB7IDYsIDEzNTQsIDIwNDggfSwgeyA3LCAxMzU1LCAyMDQ4IH0sIHsgNiwgMTM1NiwgMjA0OCB9LCB7IDcsIDEzNTcsIDIwNDggfSwgeyA3LCAxMzU4LCAyMDQ4IH0sIHsgOCwgMTM1OSwgMjA0OCB9LCAKKyAgIHsgNSwgMTM2MCwgMjA0OCB9LCB7IDYsIDEzNjEsIDIwNDggfSwgeyA2LCAxMzYyLCAyMDQ4IH0sIHsgNywgMTM2MywgMjA0OCB9LCB7IDYsIDEzNjQsIDIwNDggfSwgeyA3LCAxMzY1LCAyMDQ4IH0sIHsgNywgMTM2NiwgMjA0OCB9LCB7IDgsIDEzNjcsIDIwNDggfSwgCisgICB7IDYsIDEzNjgsIDIwNDggfSwgeyA3LCAxMzY5LCAyMDQ4IH0sIHsgNywgMTM3MCwgMjA0OCB9LCB7IDgsIDEzNzEsIDIwNDggfSwgeyA3LCAxMzcyLCAyMDQ4IH0sIHsgOCwgMTM3MywgMjA0OCB9LCB7IDgsIDEzNzQsIDIwNDggfSwgeyA5LCAxMzc1LCAyMDQ4IH0sIAorICAgeyA1LCAxMzc2LCAyMDQ4IH0sIHsgNiwgMTM3NywgMjA0OCB9LCB7IDYsIDEzNzgsIDIwNDggfSwgeyA3LCAxMzc5LCAyMDQ4IH0sIHsgNiwgMTM4MCwgMjA0OCB9LCB7IDcsIDEzODEsIDIwNDggfSwgeyA3LCAxMzgyLCAyMDQ4IH0sIHsgOCwgMTM4MywgMjA0OCB9LCAKKyAgIHsgNiwgMTM4NCwgMjA0OCB9LCB7IDcsIDEzODUsIDIwNDggfSwgeyA3LCAxMzg2LCAyMDQ4IH0sIHsgOCwgMTM4NywgMjA0OCB9LCB7IDcsIDEzODgsIDIwNDggfSwgeyA4LCAxMzg5LCAyMDQ4IH0sIHsgOCwgMTM5MCwgMjA0OCB9LCB7IDksIDEzOTEsIDIwNDggfSwgCisgICB7IDYsIDEzOTIsIDIwNDggfSwgeyA3LCAxMzkzLCAyMDQ4IH0sIHsgNywgMTM5NCwgMjA0OCB9LCB7IDgsIDEzOTUsIDIwNDggfSwgeyA3LCAxMzk2LCAyMDQ4IH0sIHsgOCwgMTM5NywgMjA0OCB9LCB7IDgsIDEzOTgsIDIwNDggfSwgeyA5LCAxMzk5LCAyMDQ4IH0sIAorICAgeyA3LCAxNDAwLCAyMDQ4IH0sIHsgOCwgMTQwMSwgMjA0OCB9LCB7IDgsIDE0MDIsIDIwNDggfSwgeyA5LCAxNDAzLCAyMDQ4IH0sIHsgOCwgMTQwNCwgMjA0OCB9LCB7IDksIDE0MDUsIDIwNDggfSwgeyA5LCAxNDA2LCAyMDQ4IH0sIHsgMTAsIDE0MDcsIDIwNDggfSwgCisgICB7IDQsIDE0MDgsIDIwNDggfSwgeyA1LCAxNDA5LCAyMDQ4IH0sIHsgNSwgMTQxMCwgMjA0OCB9LCB7IDYsIDE0MTEsIDIwNDggfSwgeyA1LCAxNDEyLCAyMDQ4IH0sIHsgNiwgMTQxMywgMjA0OCB9LCB7IDYsIDE0MTQsIDIwNDggfSwgeyA3LCAxNDE1LCAyMDQ4IH0sIAorICAgeyA1LCAxNDE2LCAyMDQ4IH0sIHsgNiwgMTQxNywgMjA0OCB9LCB7IDYsIDE0MTgsIDIwNDggfSwgeyA3LCAxNDE5LCAyMDQ4IH0sIHsgNiwgMTQyMCwgMjA0OCB9LCB7IDcsIDE0MjEsIDIwNDggfSwgeyA3LCAxNDIyLCAyMDQ4IH0sIHsgOCwgMTQyMywgMjA0OCB9LCAKKyAgIHsgNSwgMTQyNCwgMjA0OCB9LCB7IDYsIDE0MjUsIDIwNDggfSwgeyA2LCAxNDI2LCAyMDQ4IH0sIHsgNywgMTQyNywgMjA0OCB9LCB7IDYsIDE0MjgsIDIwNDggfSwgeyA3LCAxNDI5LCAyMDQ4IH0sIHsgNywgMTQzMCwgMjA0OCB9LCB7IDgsIDE0MzEsIDIwNDggfSwgCisgICB7IDYsIDE0MzIsIDIwNDggfSwgeyA3LCAxNDMzLCAyMDQ4IH0sIHsgNywgMTQzNCwgMjA0OCB9LCB7IDgsIDE0MzUsIDIwNDggfSwgeyA3LCAxNDM2LCAyMDQ4IH0sIHsgOCwgMTQzNywgMjA0OCB9LCB7IDgsIDE0MzgsIDIwNDggfSwgeyA5LCAxNDM5LCAyMDQ4IH0sIAorICAgeyA1LCAxNDQwLCAyMDQ4IH0sIHsgNiwgMTQ0MSwgMjA0OCB9LCB7IDYsIDE0NDIsIDIwNDggfSwgeyA3LCAxNDQzLCAyMDQ4IH0sIHsgNiwgMTQ0NCwgMjA0OCB9LCB7IDcsIDE0NDUsIDIwNDggfSwgeyA3LCAxNDQ2LCAyMDQ4IH0sIHsgOCwgMTQ0NywgMjA0OCB9LCAKKyAgIHsgNiwgMTQ0OCwgMjA0OCB9LCB7IDcsIDE0NDksIDIwNDggfSwgeyA3LCAxNDUwLCAyMDQ4IH0sIHsgOCwgMTQ1MSwgMjA0OCB9LCB7IDcsIDE0NTIsIDIwNDggfSwgeyA4LCAxNDUzLCAyMDQ4IH0sIHsgOCwgMTQ1NCwgMjA0OCB9LCB7IDksIDE0NTUsIDIwNDggfSwgCisgICB7IDYsIDE0NTYsIDIwNDggfSwgeyA3LCAxNDU3LCAyMDQ4IH0sIHsgNywgMTQ1OCwgMjA0OCB9LCB7IDgsIDE0NTksIDIwNDggfSwgeyA3LCAxNDYwLCAyMDQ4IH0sIHsgOCwgMTQ2MSwgMjA0OCB9LCB7IDgsIDE0NjIsIDIwNDggfSwgeyA5LCAxNDYzLCAyMDQ4IH0sIAorICAgeyA3LCAxNDY0LCAyMDQ4IH0sIHsgOCwgMTQ2NSwgMjA0OCB9LCB7IDgsIDE0NjYsIDIwNDggfSwgeyA5LCAxNDY3LCAyMDQ4IH0sIHsgOCwgMTQ2OCwgMjA0OCB9LCB7IDksIDE0NjksIDIwNDggfSwgeyA5LCAxNDcwLCAyMDQ4IH0sIHsgMTAsIDE0NzEsIDIwNDggfSwgCisgICB7IDUsIDE0NzIsIDIwNDggfSwgeyA2LCAxNDczLCAyMDQ4IH0sIHsgNiwgMTQ3NCwgMjA0OCB9LCB7IDcsIDE0NzUsIDIwNDggfSwgeyA2LCAxNDc2LCAyMDQ4IH0sIHsgNywgMTQ3NywgMjA0OCB9LCB7IDcsIDE0NzgsIDIwNDggfSwgeyA4LCAxNDc5LCAyMDQ4IH0sIAorICAgeyA2LCAxNDgwLCAyMDQ4IH0sIHsgNywgMTQ4MSwgMjA0OCB9LCB7IDcsIDE0ODIsIDIwNDggfSwgeyA4LCAxNDgzLCAyMDQ4IH0sIHsgNywgMTQ4NCwgMjA0OCB9LCB7IDgsIDE0ODUsIDIwNDggfSwgeyA4LCAxNDg2LCAyMDQ4IH0sIHsgOSwgMTQ4NywgMjA0OCB9LCAKKyAgIHsgNiwgMTQ4OCwgMjA0OCB9LCB7IDcsIDE0ODksIDIwNDggfSwgeyA3LCAxNDkwLCAyMDQ4IH0sIHsgOCwgMTQ5MSwgMjA0OCB9LCB7IDcsIDE0OTIsIDIwNDggfSwgeyA4LCAxNDkzLCAyMDQ4IH0sIHsgOCwgMTQ5NCwgMjA0OCB9LCB7IDksIDE0OTUsIDIwNDggfSwgCisgICB7IDcsIDE0OTYsIDIwNDggfSwgeyA4LCAxNDk3LCAyMDQ4IH0sIHsgOCwgMTQ5OCwgMjA0OCB9LCB7IDksIDE0OTksIDIwNDggfSwgeyA4LCAxNTAwLCAyMDQ4IH0sIHsgOSwgMTUwMSwgMjA0OCB9LCB7IDksIDE1MDIsIDIwNDggfSwgeyAxMCwgMTUwMywgMjA0OCB9LCAKKyAgIHsgNiwgMTUwNCwgMjA0OCB9LCB7IDcsIDE1MDUsIDIwNDggfSwgeyA3LCAxNTA2LCAyMDQ4IH0sIHsgOCwgMTUwNywgMjA0OCB9LCB7IDcsIDE1MDgsIDIwNDggfSwgeyA4LCAxNTA5LCAyMDQ4IH0sIHsgOCwgMTUxMCwgMjA0OCB9LCB7IDksIDE1MTEsIDIwNDggfSwgCisgICB7IDcsIDE1MTIsIDIwNDggfSwgeyA4LCAxNTEzLCAyMDQ4IH0sIHsgOCwgMTUxNCwgMjA0OCB9LCB7IDksIDE1MTUsIDIwNDggfSwgeyA4LCAxNTE2LCAyMDQ4IH0sIHsgOSwgMTUxNywgMjA0OCB9LCB7IDksIDE1MTgsIDIwNDggfSwgeyAxMCwgMTUxOSwgMjA0OCB9LCAKKyAgIHsgNywgMTUyMCwgMjA0OCB9LCB7IDgsIDE1MjEsIDIwNDggfSwgeyA4LCAxNTIyLCAyMDQ4IH0sIHsgOSwgMTUyMywgMjA0OCB9LCB7IDgsIDE1MjQsIDIwNDggfSwgeyA5LCAxNTI1LCAyMDQ4IH0sIHsgOSwgMTUyNiwgMjA0OCB9LCB7IDEwLCAxNTI3LCAyMDQ4IH0sIAorICAgeyA4LCAxNTI4LCAyMDQ4IH0sIHsgOSwgMTUyOSwgMjA0OCB9LCB7IDksIDE1MzAsIDIwNDggfSwgeyAxMCwgMTUzMSwgMjA0OCB9LCB7IDksIDE1MzIsIDIwNDggfSwgeyAxMCwgMTUzMywgMjA0OCB9LCB7IDEwLCAxNTM0LCAyMDQ4IH0sIHsgMTEsIDE1MzUsIDIwNDggfSwgCisgICB7IDMsIDE1MzYsIDIwNDggfSwgeyA0LCAxNTM3LCAyMDQ4IH0sIHsgNCwgMTUzOCwgMjA0OCB9LCB7IDUsIDE1MzksIDIwNDggfSwgeyA0LCAxNTQwLCAyMDQ4IH0sIHsgNSwgMTU0MSwgMjA0OCB9LCB7IDUsIDE1NDIsIDIwNDggfSwgeyA2LCAxNTQzLCAyMDQ4IH0sIAorICAgeyA0LCAxNTQ0LCAyMDQ4IH0sIHsgNSwgMTU0NSwgMjA0OCB9LCB7IDUsIDE1NDYsIDIwNDggfSwgeyA2LCAxNTQ3LCAyMDQ4IH0sIHsgNSwgMTU0OCwgMjA0OCB9LCB7IDYsIDE1NDksIDIwNDggfSwgeyA2LCAxNTUwLCAyMDQ4IH0sIHsgNywgMTU1MSwgMjA0OCB9LCAKKyAgIHsgNCwgMTU1MiwgMjA0OCB9LCB7IDUsIDE1NTMsIDIwNDggfSwgeyA1LCAxNTU0LCAyMDQ4IH0sIHsgNiwgMTU1NSwgMjA0OCB9LCB7IDUsIDE1NTYsIDIwNDggfSwgeyA2LCAxNTU3LCAyMDQ4IH0sIHsgNiwgMTU1OCwgMjA0OCB9LCB7IDcsIDE1NTksIDIwNDggfSwgCisgICB7IDUsIDE1NjAsIDIwNDggfSwgeyA2LCAxNTYxLCAyMDQ4IH0sIHsgNiwgMTU2MiwgMjA0OCB9LCB7IDcsIDE1NjMsIDIwNDggfSwgeyA2LCAxNTY0LCAyMDQ4IH0sIHsgNywgMTU2NSwgMjA0OCB9LCB7IDcsIDE1NjYsIDIwNDggfSwgeyA4LCAxNTY3LCAyMDQ4IH0sIAorICAgeyA0LCAxNTY4LCAyMDQ4IH0sIHsgNSwgMTU2OSwgMjA0OCB9LCB7IDUsIDE1NzAsIDIwNDggfSwgeyA2LCAxNTcxLCAyMDQ4IH0sIHsgNSwgMTU3MiwgMjA0OCB9LCB7IDYsIDE1NzMsIDIwNDggfSwgeyA2LCAxNTc0LCAyMDQ4IH0sIHsgNywgMTU3NSwgMjA0OCB9LCAKKyAgIHsgNSwgMTU3NiwgMjA0OCB9LCB7IDYsIDE1NzcsIDIwNDggfSwgeyA2LCAxNTc4LCAyMDQ4IH0sIHsgNywgMTU3OSwgMjA0OCB9LCB7IDYsIDE1ODAsIDIwNDggfSwgeyA3LCAxNTgxLCAyMDQ4IH0sIHsgNywgMTU4MiwgMjA0OCB9LCB7IDgsIDE1ODMsIDIwNDggfSwgCisgICB7IDUsIDE1ODQsIDIwNDggfSwgeyA2LCAxNTg1LCAyMDQ4IH0sIHsgNiwgMTU4NiwgMjA0OCB9LCB7IDcsIDE1ODcsIDIwNDggfSwgeyA2LCAxNTg4LCAyMDQ4IH0sIHsgNywgMTU4OSwgMjA0OCB9LCB7IDcsIDE1OTAsIDIwNDggfSwgeyA4LCAxNTkxLCAyMDQ4IH0sIAorICAgeyA2LCAxNTkyLCAyMDQ4IH0sIHsgNywgMTU5MywgMjA0OCB9LCB7IDcsIDE1OTQsIDIwNDggfSwgeyA4LCAxNTk1LCAyMDQ4IH0sIHsgNywgMTU5NiwgMjA0OCB9LCB7IDgsIDE1OTcsIDIwNDggfSwgeyA4LCAxNTk4LCAyMDQ4IH0sIHsgOSwgMTU5OSwgMjA0OCB9LCAKKyAgIHsgNCwgMTYwMCwgMjA0OCB9LCB7IDUsIDE2MDEsIDIwNDggfSwgeyA1LCAxNjAyLCAyMDQ4IH0sIHsgNiwgMTYwMywgMjA0OCB9LCB7IDUsIDE2MDQsIDIwNDggfSwgeyA2LCAxNjA1LCAyMDQ4IH0sIHsgNiwgMTYwNiwgMjA0OCB9LCB7IDcsIDE2MDcsIDIwNDggfSwgCisgICB7IDUsIDE2MDgsIDIwNDggfSwgeyA2LCAxNjA5LCAyMDQ4IH0sIHsgNiwgMTYxMCwgMjA0OCB9LCB7IDcsIDE2MTEsIDIwNDggfSwgeyA2LCAxNjEyLCAyMDQ4IH0sIHsgNywgMTYxMywgMjA0OCB9LCB7IDcsIDE2MTQsIDIwNDggfSwgeyA4LCAxNjE1LCAyMDQ4IH0sIAorICAgeyA1LCAxNjE2LCAyMDQ4IH0sIHsgNiwgMTYxNywgMjA0OCB9LCB7IDYsIDE2MTgsIDIwNDggfSwgeyA3LCAxNjE5LCAyMDQ4IH0sIHsgNiwgMTYyMCwgMjA0OCB9LCB7IDcsIDE2MjEsIDIwNDggfSwgeyA3LCAxNjIyLCAyMDQ4IH0sIHsgOCwgMTYyMywgMjA0OCB9LCAKKyAgIHsgNiwgMTYyNCwgMjA0OCB9LCB7IDcsIDE2MjUsIDIwNDggfSwgeyA3LCAxNjI2LCAyMDQ4IH0sIHsgOCwgMTYyNywgMjA0OCB9LCB7IDcsIDE2MjgsIDIwNDggfSwgeyA4LCAxNjI5LCAyMDQ4IH0sIHsgOCwgMTYzMCwgMjA0OCB9LCB7IDksIDE2MzEsIDIwNDggfSwgCisgICB7IDUsIDE2MzIsIDIwNDggfSwgeyA2LCAxNjMzLCAyMDQ4IH0sIHsgNiwgMTYzNCwgMjA0OCB9LCB7IDcsIDE2MzUsIDIwNDggfSwgeyA2LCAxNjM2LCAyMDQ4IH0sIHsgNywgMTYzNywgMjA0OCB9LCB7IDcsIDE2MzgsIDIwNDggfSwgeyA4LCAxNjM5LCAyMDQ4IH0sIAorICAgeyA2LCAxNjQwLCAyMDQ4IH0sIHsgNywgMTY0MSwgMjA0OCB9LCB7IDcsIDE2NDIsIDIwNDggfSwgeyA4LCAxNjQzLCAyMDQ4IH0sIHsgNywgMTY0NCwgMjA0OCB9LCB7IDgsIDE2NDUsIDIwNDggfSwgeyA4LCAxNjQ2LCAyMDQ4IH0sIHsgOSwgMTY0NywgMjA0OCB9LCAKKyAgIHsgNiwgMTY0OCwgMjA0OCB9LCB7IDcsIDE2NDksIDIwNDggfSwgeyA3LCAxNjUwLCAyMDQ4IH0sIHsgOCwgMTY1MSwgMjA0OCB9LCB7IDcsIDE2NTIsIDIwNDggfSwgeyA4LCAxNjUzLCAyMDQ4IH0sIHsgOCwgMTY1NCwgMjA0OCB9LCB7IDksIDE2NTUsIDIwNDggfSwgCisgICB7IDcsIDE2NTYsIDIwNDggfSwgeyA4LCAxNjU3LCAyMDQ4IH0sIHsgOCwgMTY1OCwgMjA0OCB9LCB7IDksIDE2NTksIDIwNDggfSwgeyA4LCAxNjYwLCAyMDQ4IH0sIHsgOSwgMTY2MSwgMjA0OCB9LCB7IDksIDE2NjIsIDIwNDggfSwgeyAxMCwgMTY2MywgMjA0OCB9LCAKKyAgIHsgNCwgMTY2NCwgMjA0OCB9LCB7IDUsIDE2NjUsIDIwNDggfSwgeyA1LCAxNjY2LCAyMDQ4IH0sIHsgNiwgMTY2NywgMjA0OCB9LCB7IDUsIDE2NjgsIDIwNDggfSwgeyA2LCAxNjY5LCAyMDQ4IH0sIHsgNiwgMTY3MCwgMjA0OCB9LCB7IDcsIDE2NzEsIDIwNDggfSwgCisgICB7IDUsIDE2NzIsIDIwNDggfSwgeyA2LCAxNjczLCAyMDQ4IH0sIHsgNiwgMTY3NCwgMjA0OCB9LCB7IDcsIDE2NzUsIDIwNDggfSwgeyA2LCAxNjc2LCAyMDQ4IH0sIHsgNywgMTY3NywgMjA0OCB9LCB7IDcsIDE2NzgsIDIwNDggfSwgeyA4LCAxNjc5LCAyMDQ4IH0sIAorICAgeyA1LCAxNjgwLCAyMDQ4IH0sIHsgNiwgMTY4MSwgMjA0OCB9LCB7IDYsIDE2ODIsIDIwNDggfSwgeyA3LCAxNjgzLCAyMDQ4IH0sIHsgNiwgMTY4NCwgMjA0OCB9LCB7IDcsIDE2ODUsIDIwNDggfSwgeyA3LCAxNjg2LCAyMDQ4IH0sIHsgOCwgMTY4NywgMjA0OCB9LCAKKyAgIHsgNiwgMTY4OCwgMjA0OCB9LCB7IDcsIDE2ODksIDIwNDggfSwgeyA3LCAxNjkwLCAyMDQ4IH0sIHsgOCwgMTY5MSwgMjA0OCB9LCB7IDcsIDE2OTIsIDIwNDggfSwgeyA4LCAxNjkzLCAyMDQ4IH0sIHsgOCwgMTY5NCwgMjA0OCB9LCB7IDksIDE2OTUsIDIwNDggfSwgCisgICB7IDUsIDE2OTYsIDIwNDggfSwgeyA2LCAxNjk3LCAyMDQ4IH0sIHsgNiwgMTY5OCwgMjA0OCB9LCB7IDcsIDE2OTksIDIwNDggfSwgeyA2LCAxNzAwLCAyMDQ4IH0sIHsgNywgMTcwMSwgMjA0OCB9LCB7IDcsIDE3MDIsIDIwNDggfSwgeyA4LCAxNzAzLCAyMDQ4IH0sIAorICAgeyA2LCAxNzA0LCAyMDQ4IH0sIHsgNywgMTcwNSwgMjA0OCB9LCB7IDcsIDE3MDYsIDIwNDggfSwgeyA4LCAxNzA3LCAyMDQ4IH0sIHsgNywgMTcwOCwgMjA0OCB9LCB7IDgsIDE3MDksIDIwNDggfSwgeyA4LCAxNzEwLCAyMDQ4IH0sIHsgOSwgMTcxMSwgMjA0OCB9LCAKKyAgIHsgNiwgMTcxMiwgMjA0OCB9LCB7IDcsIDE3MTMsIDIwNDggfSwgeyA3LCAxNzE0LCAyMDQ4IH0sIHsgOCwgMTcxNSwgMjA0OCB9LCB7IDcsIDE3MTYsIDIwNDggfSwgeyA4LCAxNzE3LCAyMDQ4IH0sIHsgOCwgMTcxOCwgMjA0OCB9LCB7IDksIDE3MTksIDIwNDggfSwgCisgICB7IDcsIDE3MjAsIDIwNDggfSwgeyA4LCAxNzIxLCAyMDQ4IH0sIHsgOCwgMTcyMiwgMjA0OCB9LCB7IDksIDE3MjMsIDIwNDggfSwgeyA4LCAxNzI0LCAyMDQ4IH0sIHsgOSwgMTcyNSwgMjA0OCB9LCB7IDksIDE3MjYsIDIwNDggfSwgeyAxMCwgMTcyNywgMjA0OCB9LCAKKyAgIHsgNSwgMTcyOCwgMjA0OCB9LCB7IDYsIDE3MjksIDIwNDggfSwgeyA2LCAxNzMwLCAyMDQ4IH0sIHsgNywgMTczMSwgMjA0OCB9LCB7IDYsIDE3MzIsIDIwNDggfSwgeyA3LCAxNzMzLCAyMDQ4IH0sIHsgNywgMTczNCwgMjA0OCB9LCB7IDgsIDE3MzUsIDIwNDggfSwgCisgICB7IDYsIDE3MzYsIDIwNDggfSwgeyA3LCAxNzM3LCAyMDQ4IH0sIHsgNywgMTczOCwgMjA0OCB9LCB7IDgsIDE3MzksIDIwNDggfSwgeyA3LCAxNzQwLCAyMDQ4IH0sIHsgOCwgMTc0MSwgMjA0OCB9LCB7IDgsIDE3NDIsIDIwNDggfSwgeyA5LCAxNzQzLCAyMDQ4IH0sIAorICAgeyA2LCAxNzQ0LCAyMDQ4IH0sIHsgNywgMTc0NSwgMjA0OCB9LCB7IDcsIDE3NDYsIDIwNDggfSwgeyA4LCAxNzQ3LCAyMDQ4IH0sIHsgNywgMTc0OCwgMjA0OCB9LCB7IDgsIDE3NDksIDIwNDggfSwgeyA4LCAxNzUwLCAyMDQ4IH0sIHsgOSwgMTc1MSwgMjA0OCB9LCAKKyAgIHsgNywgMTc1MiwgMjA0OCB9LCB7IDgsIDE3NTMsIDIwNDggfSwgeyA4LCAxNzU0LCAyMDQ4IH0sIHsgOSwgMTc1NSwgMjA0OCB9LCB7IDgsIDE3NTYsIDIwNDggfSwgeyA5LCAxNzU3LCAyMDQ4IH0sIHsgOSwgMTc1OCwgMjA0OCB9LCB7IDEwLCAxNzU5LCAyMDQ4IH0sIAorICAgeyA2LCAxNzYwLCAyMDQ4IH0sIHsgNywgMTc2MSwgMjA0OCB9LCB7IDcsIDE3NjIsIDIwNDggfSwgeyA4LCAxNzYzLCAyMDQ4IH0sIHsgNywgMTc2NCwgMjA0OCB9LCB7IDgsIDE3NjUsIDIwNDggfSwgeyA4LCAxNzY2LCAyMDQ4IH0sIHsgOSwgMTc2NywgMjA0OCB9LCAKKyAgIHsgNywgMTc2OCwgMjA0OCB9LCB7IDgsIDE3NjksIDIwNDggfSwgeyA4LCAxNzcwLCAyMDQ4IH0sIHsgOSwgMTc3MSwgMjA0OCB9LCB7IDgsIDE3NzIsIDIwNDggfSwgeyA5LCAxNzczLCAyMDQ4IH0sIHsgOSwgMTc3NCwgMjA0OCB9LCB7IDEwLCAxNzc1LCAyMDQ4IH0sIAorICAgeyA3LCAxNzc2LCAyMDQ4IH0sIHsgOCwgMTc3NywgMjA0OCB9LCB7IDgsIDE3NzgsIDIwNDggfSwgeyA5LCAxNzc5LCAyMDQ4IH0sIHsgOCwgMTc4MCwgMjA0OCB9LCB7IDksIDE3ODEsIDIwNDggfSwgeyA5LCAxNzgyLCAyMDQ4IH0sIHsgMTAsIDE3ODMsIDIwNDggfSwgCisgICB7IDgsIDE3ODQsIDIwNDggfSwgeyA5LCAxNzg1LCAyMDQ4IH0sIHsgOSwgMTc4NiwgMjA0OCB9LCB7IDEwLCAxNzg3LCAyMDQ4IH0sIHsgOSwgMTc4OCwgMjA0OCB9LCB7IDEwLCAxNzg5LCAyMDQ4IH0sIHsgMTAsIDE3OTAsIDIwNDggfSwgeyAxMSwgMTc5MSwgMjA0OCB9LCAKKyAgIHsgNCwgMTc5MiwgMjA0OCB9LCB7IDUsIDE3OTMsIDIwNDggfSwgeyA1LCAxNzk0LCAyMDQ4IH0sIHsgNiwgMTc5NSwgMjA0OCB9LCB7IDUsIDE3OTYsIDIwNDggfSwgeyA2LCAxNzk3LCAyMDQ4IH0sIHsgNiwgMTc5OCwgMjA0OCB9LCB7IDcsIDE3OTksIDIwNDggfSwgCisgICB7IDUsIDE4MDAsIDIwNDggfSwgeyA2LCAxODAxLCAyMDQ4IH0sIHsgNiwgMTgwMiwgMjA0OCB9LCB7IDcsIDE4MDMsIDIwNDggfSwgeyA2LCAxODA0LCAyMDQ4IH0sIHsgNywgMTgwNSwgMjA0OCB9LCB7IDcsIDE4MDYsIDIwNDggfSwgeyA4LCAxODA3LCAyMDQ4IH0sIAorICAgeyA1LCAxODA4LCAyMDQ4IH0sIHsgNiwgMTgwOSwgMjA0OCB9LCB7IDYsIDE4MTAsIDIwNDggfSwgeyA3LCAxODExLCAyMDQ4IH0sIHsgNiwgMTgxMiwgMjA0OCB9LCB7IDcsIDE4MTMsIDIwNDggfSwgeyA3LCAxODE0LCAyMDQ4IH0sIHsgOCwgMTgxNSwgMjA0OCB9LCAKKyAgIHsgNiwgMTgxNiwgMjA0OCB9LCB7IDcsIDE4MTcsIDIwNDggfSwgeyA3LCAxODE4LCAyMDQ4IH0sIHsgOCwgMTgxOSwgMjA0OCB9LCB7IDcsIDE4MjAsIDIwNDggfSwgeyA4LCAxODIxLCAyMDQ4IH0sIHsgOCwgMTgyMiwgMjA0OCB9LCB7IDksIDE4MjMsIDIwNDggfSwgCisgICB7IDUsIDE4MjQsIDIwNDggfSwgeyA2LCAxODI1LCAyMDQ4IH0sIHsgNiwgMTgyNiwgMjA0OCB9LCB7IDcsIDE4MjcsIDIwNDggfSwgeyA2LCAxODI4LCAyMDQ4IH0sIHsgNywgMTgyOSwgMjA0OCB9LCB7IDcsIDE4MzAsIDIwNDggfSwgeyA4LCAxODMxLCAyMDQ4IH0sIAorICAgeyA2LCAxODMyLCAyMDQ4IH0sIHsgNywgMTgzMywgMjA0OCB9LCB7IDcsIDE4MzQsIDIwNDggfSwgeyA4LCAxODM1LCAyMDQ4IH0sIHsgNywgMTgzNiwgMjA0OCB9LCB7IDgsIDE4MzcsIDIwNDggfSwgeyA4LCAxODM4LCAyMDQ4IH0sIHsgOSwgMTgzOSwgMjA0OCB9LCAKKyAgIHsgNiwgMTg0MCwgMjA0OCB9LCB7IDcsIDE4NDEsIDIwNDggfSwgeyA3LCAxODQyLCAyMDQ4IH0sIHsgOCwgMTg0MywgMjA0OCB9LCB7IDcsIDE4NDQsIDIwNDggfSwgeyA4LCAxODQ1LCAyMDQ4IH0sIHsgOCwgMTg0NiwgMjA0OCB9LCB7IDksIDE4NDcsIDIwNDggfSwgCisgICB7IDcsIDE4NDgsIDIwNDggfSwgeyA4LCAxODQ5LCAyMDQ4IH0sIHsgOCwgMTg1MCwgMjA0OCB9LCB7IDksIDE4NTEsIDIwNDggfSwgeyA4LCAxODUyLCAyMDQ4IH0sIHsgOSwgMTg1MywgMjA0OCB9LCB7IDksIDE4NTQsIDIwNDggfSwgeyAxMCwgMTg1NSwgMjA0OCB9LCAKKyAgIHsgNSwgMTg1NiwgMjA0OCB9LCB7IDYsIDE4NTcsIDIwNDggfSwgeyA2LCAxODU4LCAyMDQ4IH0sIHsgNywgMTg1OSwgMjA0OCB9LCB7IDYsIDE4NjAsIDIwNDggfSwgeyA3LCAxODYxLCAyMDQ4IH0sIHsgNywgMTg2MiwgMjA0OCB9LCB7IDgsIDE4NjMsIDIwNDggfSwgCisgICB7IDYsIDE4NjQsIDIwNDggfSwgeyA3LCAxODY1LCAyMDQ4IH0sIHsgNywgMTg2NiwgMjA0OCB9LCB7IDgsIDE4NjcsIDIwNDggfSwgeyA3LCAxODY4LCAyMDQ4IH0sIHsgOCwgMTg2OSwgMjA0OCB9LCB7IDgsIDE4NzAsIDIwNDggfSwgeyA5LCAxODcxLCAyMDQ4IH0sIAorICAgeyA2LCAxODcyLCAyMDQ4IH0sIHsgNywgMTg3MywgMjA0OCB9LCB7IDcsIDE4NzQsIDIwNDggfSwgeyA4LCAxODc1LCAyMDQ4IH0sIHsgNywgMTg3NiwgMjA0OCB9LCB7IDgsIDE4NzcsIDIwNDggfSwgeyA4LCAxODc4LCAyMDQ4IH0sIHsgOSwgMTg3OSwgMjA0OCB9LCAKKyAgIHsgNywgMTg4MCwgMjA0OCB9LCB7IDgsIDE4ODEsIDIwNDggfSwgeyA4LCAxODgyLCAyMDQ4IH0sIHsgOSwgMTg4MywgMjA0OCB9LCB7IDgsIDE4ODQsIDIwNDggfSwgeyA5LCAxODg1LCAyMDQ4IH0sIHsgOSwgMTg4NiwgMjA0OCB9LCB7IDEwLCAxODg3LCAyMDQ4IH0sIAorICAgeyA2LCAxODg4LCAyMDQ4IH0sIHsgNywgMTg4OSwgMjA0OCB9LCB7IDcsIDE4OTAsIDIwNDggfSwgeyA4LCAxODkxLCAyMDQ4IH0sIHsgNywgMTg5MiwgMjA0OCB9LCB7IDgsIDE4OTMsIDIwNDggfSwgeyA4LCAxODk0LCAyMDQ4IH0sIHsgOSwgMTg5NSwgMjA0OCB9LCAKKyAgIHsgNywgMTg5NiwgMjA0OCB9LCB7IDgsIDE4OTcsIDIwNDggfSwgeyA4LCAxODk4LCAyMDQ4IH0sIHsgOSwgMTg5OSwgMjA0OCB9LCB7IDgsIDE5MDAsIDIwNDggfSwgeyA5LCAxOTAxLCAyMDQ4IH0sIHsgOSwgMTkwMiwgMjA0OCB9LCB7IDEwLCAxOTAzLCAyMDQ4IH0sIAorICAgeyA3LCAxOTA0LCAyMDQ4IH0sIHsgOCwgMTkwNSwgMjA0OCB9LCB7IDgsIDE5MDYsIDIwNDggfSwgeyA5LCAxOTA3LCAyMDQ4IH0sIHsgOCwgMTkwOCwgMjA0OCB9LCB7IDksIDE5MDksIDIwNDggfSwgeyA5LCAxOTEwLCAyMDQ4IH0sIHsgMTAsIDE5MTEsIDIwNDggfSwgCisgICB7IDgsIDE5MTIsIDIwNDggfSwgeyA5LCAxOTEzLCAyMDQ4IH0sIHsgOSwgMTkxNCwgMjA0OCB9LCB7IDEwLCAxOTE1LCAyMDQ4IH0sIHsgOSwgMTkxNiwgMjA0OCB9LCB7IDEwLCAxOTE3LCAyMDQ4IH0sIHsgMTAsIDE5MTgsIDIwNDggfSwgeyAxMSwgMTkxOSwgMjA0OCB9LCAKKyAgIHsgNSwgMTkyMCwgMjA0OCB9LCB7IDYsIDE5MjEsIDIwNDggfSwgeyA2LCAxOTIyLCAyMDQ4IH0sIHsgNywgMTkyMywgMjA0OCB9LCB7IDYsIDE5MjQsIDIwNDggfSwgeyA3LCAxOTI1LCAyMDQ4IH0sIHsgNywgMTkyNiwgMjA0OCB9LCB7IDgsIDE5MjcsIDIwNDggfSwgCisgICB7IDYsIDE5MjgsIDIwNDggfSwgeyA3LCAxOTI5LCAyMDQ4IH0sIHsgNywgMTkzMCwgMjA0OCB9LCB7IDgsIDE5MzEsIDIwNDggfSwgeyA3LCAxOTMyLCAyMDQ4IH0sIHsgOCwgMTkzMywgMjA0OCB9LCB7IDgsIDE5MzQsIDIwNDggfSwgeyA5LCAxOTM1LCAyMDQ4IH0sIAorICAgeyA2LCAxOTM2LCAyMDQ4IH0sIHsgNywgMTkzNywgMjA0OCB9LCB7IDcsIDE5MzgsIDIwNDggfSwgeyA4LCAxOTM5LCAyMDQ4IH0sIHsgNywgMTk0MCwgMjA0OCB9LCB7IDgsIDE5NDEsIDIwNDggfSwgeyA4LCAxOTQyLCAyMDQ4IH0sIHsgOSwgMTk0MywgMjA0OCB9LCAKKyAgIHsgNywgMTk0NCwgMjA0OCB9LCB7IDgsIDE5NDUsIDIwNDggfSwgeyA4LCAxOTQ2LCAyMDQ4IH0sIHsgOSwgMTk0NywgMjA0OCB9LCB7IDgsIDE5NDgsIDIwNDggfSwgeyA5LCAxOTQ5LCAyMDQ4IH0sIHsgOSwgMTk1MCwgMjA0OCB9LCB7IDEwLCAxOTUxLCAyMDQ4IH0sIAorICAgeyA2LCAxOTUyLCAyMDQ4IH0sIHsgNywgMTk1MywgMjA0OCB9LCB7IDcsIDE5NTQsIDIwNDggfSwgeyA4LCAxOTU1LCAyMDQ4IH0sIHsgNywgMTk1NiwgMjA0OCB9LCB7IDgsIDE5NTcsIDIwNDggfSwgeyA4LCAxOTU4LCAyMDQ4IH0sIHsgOSwgMTk1OSwgMjA0OCB9LCAKKyAgIHsgNywgMTk2MCwgMjA0OCB9LCB7IDgsIDE5NjEsIDIwNDggfSwgeyA4LCAxOTYyLCAyMDQ4IH0sIHsgOSwgMTk2MywgMjA0OCB9LCB7IDgsIDE5NjQsIDIwNDggfSwgeyA5LCAxOTY1LCAyMDQ4IH0sIHsgOSwgMTk2NiwgMjA0OCB9LCB7IDEwLCAxOTY3LCAyMDQ4IH0sIAorICAgeyA3LCAxOTY4LCAyMDQ4IH0sIHsgOCwgMTk2OSwgMjA0OCB9LCB7IDgsIDE5NzAsIDIwNDggfSwgeyA5LCAxOTcxLCAyMDQ4IH0sIHsgOCwgMTk3MiwgMjA0OCB9LCB7IDksIDE5NzMsIDIwNDggfSwgeyA5LCAxOTc0LCAyMDQ4IH0sIHsgMTAsIDE5NzUsIDIwNDggfSwgCisgICB7IDgsIDE5NzYsIDIwNDggfSwgeyA5LCAxOTc3LCAyMDQ4IH0sIHsgOSwgMTk3OCwgMjA0OCB9LCB7IDEwLCAxOTc5LCAyMDQ4IH0sIHsgOSwgMTk4MCwgMjA0OCB9LCB7IDEwLCAxOTgxLCAyMDQ4IH0sIHsgMTAsIDE5ODIsIDIwNDggfSwgeyAxMSwgMTk4MywgMjA0OCB9LCAKKyAgIHsgNiwgMTk4NCwgMjA0OCB9LCB7IDcsIDE5ODUsIDIwNDggfSwgeyA3LCAxOTg2LCAyMDQ4IH0sIHsgOCwgMTk4NywgMjA0OCB9LCB7IDcsIDE5ODgsIDIwNDggfSwgeyA4LCAxOTg5LCAyMDQ4IH0sIHsgOCwgMTk5MCwgMjA0OCB9LCB7IDksIDE5OTEsIDIwNDggfSwgCisgICB7IDcsIDE5OTIsIDIwNDggfSwgeyA4LCAxOTkzLCAyMDQ4IH0sIHsgOCwgMTk5NCwgMjA0OCB9LCB7IDksIDE5OTUsIDIwNDggfSwgeyA4LCAxOTk2LCAyMDQ4IH0sIHsgOSwgMTk5NywgMjA0OCB9LCB7IDksIDE5OTgsIDIwNDggfSwgeyAxMCwgMTk5OSwgMjA0OCB9LCAKKyAgIHsgNywgMjAwMCwgMjA0OCB9LCB7IDgsIDIwMDEsIDIwNDggfSwgeyA4LCAyMDAyLCAyMDQ4IH0sIHsgOSwgMjAwMywgMjA0OCB9LCB7IDgsIDIwMDQsIDIwNDggfSwgeyA5LCAyMDA1LCAyMDQ4IH0sIHsgOSwgMjAwNiwgMjA0OCB9LCB7IDEwLCAyMDA3LCAyMDQ4IH0sIAorICAgeyA4LCAyMDA4LCAyMDQ4IH0sIHsgOSwgMjAwOSwgMjA0OCB9LCB7IDksIDIwMTAsIDIwNDggfSwgeyAxMCwgMjAxMSwgMjA0OCB9LCB7IDksIDIwMTIsIDIwNDggfSwgeyAxMCwgMjAxMywgMjA0OCB9LCB7IDEwLCAyMDE0LCAyMDQ4IH0sIHsgMTEsIDIwMTUsIDIwNDggfSwgCisgICB7IDcsIDIwMTYsIDIwNDggfSwgeyA4LCAyMDE3LCAyMDQ4IH0sIHsgOCwgMjAxOCwgMjA0OCB9LCB7IDksIDIwMTksIDIwNDggfSwgeyA4LCAyMDIwLCAyMDQ4IH0sIHsgOSwgMjAyMSwgMjA0OCB9LCB7IDksIDIwMjIsIDIwNDggfSwgeyAxMCwgMjAyMywgMjA0OCB9LCAKKyAgIHsgOCwgMjAyNCwgMjA0OCB9LCB7IDksIDIwMjUsIDIwNDggfSwgeyA5LCAyMDI2LCAyMDQ4IH0sIHsgMTAsIDIwMjcsIDIwNDggfSwgeyA5LCAyMDI4LCAyMDQ4IH0sIHsgMTAsIDIwMjksIDIwNDggfSwgeyAxMCwgMjAzMCwgMjA0OCB9LCB7IDExLCAyMDMxLCAyMDQ4IH0sIAorICAgeyA4LCAyMDMyLCAyMDQ4IH0sIHsgOSwgMjAzMywgMjA0OCB9LCB7IDksIDIwMzQsIDIwNDggfSwgeyAxMCwgMjAzNSwgMjA0OCB9LCB7IDksIDIwMzYsIDIwNDggfSwgeyAxMCwgMjAzNywgMjA0OCB9LCB7IDEwLCAyMDM4LCAyMDQ4IH0sIHsgMTEsIDIwMzksIDIwNDggfSwgCisgICB7IDksIDIwNDAsIDIwNDggfSwgeyAxMCwgMjA0MSwgMjA0OCB9LCB7IDEwLCAyMDQyLCAyMDQ4IH0sIHsgMTEsIDIwNDMsIDIwNDggfSwgeyAxMCwgMjA0NCwgMjA0OCB9LCB7IDExLCAyMDQ1LCAyMDQ4IH0sIHsgMTEsIDIwNDYsIDIwNDggfSwgeyAxMiwgMjA0NywgMjA0OCB9LCAKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKK307CisKKy8qIGZpbmQgYSBob2xlIGFuZCBmcmVlIGFzIHJlcXVpcmVkICovCitzdGF0aWMgaW50IGZpbmRfaG9sZSh2b2lkKQoreworICAgdW5zaWduZWQgeDsKKyAgIGludCAgICAgIHksIHo7CisgICBmb3IgKHogPSAwLCB5ID0gSU5UX01BWCwgeCA9IDA7IHggPCBGUF9FTlRSSUVTOyB4KyspIHsKKyAgICAgICBpZiAoZnBfY2FjaGVbeF0ubHJ1X2NvdW50IDwgeSkgeworICAgICAgICAgIHogPSB4OworICAgICAgICAgIHkgPSBmcF9jYWNoZVt4XS5scnVfY291bnQ7CisgICAgICAgfQorICAgfQorCisgICAvKiBkZWNyZWFzZSBhbGwgKi8KKyAgIGZvciAoeCA9IDA7IHggPCBGUF9FTlRSSUVTOyB4KyspIHsKKyAgICAgIGlmIChmcF9jYWNoZVt4XS5scnVfY291bnQgPiAzKSB7CisgICAgICAgICAtLShmcF9jYWNoZVt4XS5scnVfY291bnQpOworICAgICAgfQorICAgfQorCisgICAvKiBmcmVlIGVudHJ5IHogKi8KKyAgIGlmIChmcF9jYWNoZVt6XS5nKSB7CisgICAgICBpZiAoZnBfY2FjaGVbel0ubXUgIT0gTlVMTCkgeworICAgICAgICAgbXBfY2xlYXIoZnBfY2FjaGVbel0ubXUpOworICAgICAgICAgZnBfY2FjaGVbel0ubXUgPSBOVUxMOworICAgICAgfQorICAgICAgbHRjX2VjY19kZWxfcG9pbnQoZnBfY2FjaGVbel0uZyk7CisgICAgICBmcF9jYWNoZVt6XS5nICA9IE5VTEw7CisgICAgICBmb3IgKHggPSAwOyB4IDwgKDFVPDxGUF9MVVQpOyB4KyspIHsKKyAgICAgICAgIGx0Y19lY2NfZGVsX3BvaW50KGZwX2NhY2hlW3pdLkxVVFt4XSk7CisgICAgICAgICBmcF9jYWNoZVt6XS5MVVRbeF0gPSBOVUxMOworICAgICAgfQorICAgICAgZnBfY2FjaGVbel0ubHJ1X2NvdW50ID0gMDsKKyAgIH0KKyAgIHJldHVybiB6OworfQorCisvKiBkZXRlcm1pbmUgaWYgYSBiYXNlIGlzIGFscmVhZHkgaW4gdGhlIGNhY2hlIGFuZCBpZiBzbywgd2hlcmUgKi8KK3N0YXRpYyBpbnQgZmluZF9iYXNlKGVjY19wb2ludCAqZykKK3sKKyAgIGludCB4OworICAgZm9yICh4ID0gMDsgeCA8IEZQX0VOVFJJRVM7IHgrKykgeworICAgICAgaWYgKGZwX2NhY2hlW3hdLmcgIT0gTlVMTCAmJiAKKyAgICAgICAgICBtcF9jbXAoZnBfY2FjaGVbeF0uZy0+eCwgZy0+eCkgPT0gTFRDX01QX0VRICYmIAorICAgICAgICAgIG1wX2NtcChmcF9jYWNoZVt4XS5nLT55LCBnLT55KSA9PSBMVENfTVBfRVEgJiYgCisgICAgICAgICAgbXBfY21wKGZwX2NhY2hlW3hdLmctPnosIGctPnopID09IExUQ19NUF9FUSkgeworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICB9CisgICBpZiAoeCA9PSBGUF9FTlRSSUVTKSB7CisgICAgICB4ID0gLTE7CisgICB9CisgICByZXR1cm4geDsKK30KKworLyogYWRkIGEgbmV3IGJhc2UgdG8gdGhlIGNhY2hlICovCitzdGF0aWMgaW50IGFkZF9lbnRyeShpbnQgaWR4LCBlY2NfcG9pbnQgKmcpCit7CisgICB1bnNpZ25lZCB4LCB5OworCisgICAvKiBhbGxvY2F0ZSBiYXNlIGFuZCBMVVQgKi8KKyAgIGZwX2NhY2hlW2lkeF0uZyA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICBpZiAoZnBfY2FjaGVbaWR4XS5nID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIC8qIGNvcHkgeCBhbmQgeSAqLworICAgaWYgKChtcF9jb3B5KGctPngsIGZwX2NhY2hlW2lkeF0uZy0+eCkgIT0gQ1JZUFRfT0spIHx8CisgICAgICAgKG1wX2NvcHkoZy0+eSwgZnBfY2FjaGVbaWR4XS5nLT55KSAhPSBDUllQVF9PSykgfHwKKyAgICAgICAobXBfY29weShnLT56LCBmcF9jYWNoZVtpZHhdLmctPnopICE9IENSWVBUX09LKSkgeworICAgICAgbHRjX2VjY19kZWxfcG9pbnQoZnBfY2FjaGVbaWR4XS5nKTsKKyAgICAgIGZwX2NhY2hlW2lkeF0uZyA9IE5VTEw7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfSAgICAgICAgICAgICAgCisKKyAgIGZvciAoeCA9IDA7IHggPCAoMVU8PEZQX0xVVCk7IHgrKykgeworICAgICAgZnBfY2FjaGVbaWR4XS5MVVRbeF0gPSBsdGNfZWNjX25ld19wb2ludCgpOworICAgICAgaWYgKGZwX2NhY2hlW2lkeF0uTFVUW3hdID09IE5VTEwpIHsKKyAgICAgICAgIGZvciAoeSA9IDA7IHkgPCB4OyB5KyspIHsKKyAgICAgICAgICAgIGx0Y19lY2NfZGVsX3BvaW50KGZwX2NhY2hlW2lkeF0uTFVUW3ldKTsKKyAgICAgICAgICAgIGZwX2NhY2hlW2lkeF0uTFVUW3ldID0gTlVMTDsKKyAgICAgICAgIH0KKyAgICAgICAgIGx0Y19lY2NfZGVsX3BvaW50KGZwX2NhY2hlW2lkeF0uZyk7CisgICAgICAgICBmcF9jYWNoZVtpZHhdLmcgICAgICAgICA9IE5VTEw7CisgICAgICAgICBmcF9jYWNoZVtpZHhdLmxydV9jb3VudCA9IDA7CisgICAgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgICAgfQorICAgfQorICAgCisgICBmcF9jYWNoZVtpZHhdLmxydV9jb3VudCA9IDA7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGJ1aWxkIHRoZSBMVVQgYnkgc3BhY2luZyB0aGUgYml0cyBvZiB0aGUgaW5wdXQgYnkgI21vZHVsdXMvRlBfTFVUIGJpdHMgYXBhcnQgCisgKiAKKyAqIFRoZSBhbGdvcml0aG0gYnVpbGRzIHBhdHRlcm5zIGluIGluY3JlYXNpbmcgYml0IG9yZGVyIGJ5IGZpcnN0IG1ha2luZyBhbGwgCisgKiBzaW5nbGUgYml0IGlucHV0IHBhdHRlcm5zLCB0aGVuIGFsbCB0d28gYml0IGlucHV0IHBhdHRlcm5zIGFuZCBzbyBvbgorICovCitzdGF0aWMgaW50IGJ1aWxkX2x1dChpbnQgaWR4LCB2b2lkICptb2R1bHVzLCB2b2lkICptcCwgdm9pZCAqbXUpCit7IAorICAgdW5zaWduZWQgeCwgeSwgZXJyLCBiaXRsZW4sIGx1dF9nYXA7CisgICB2b2lkICAgICp0bXA7CisKKyAgIHRtcCA9IE5VTEw7CisKKyAgIC8qIHNhbml0eSBjaGVjayB0byBtYWtlIHN1cmUgbHV0X29yZGVyIHRhYmxlIGlzIG9mIGNvcnJlY3Qgc2l6ZSwgc2hvdWxkIGNvbXBpbGUgb3V0IHRvIGEgTk9QIGlmIHRydWUgKi8KKyAgIGlmICgoc2l6ZW9mKGx1dF9vcmRlcnMpIC8gc2l6ZW9mKGx1dF9vcmRlcnNbMF0pKSA8ICgxVTw8RlBfTFVUKSkgeworICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfQVJHOworICAgICAgIGdvdG8gRE9ORTsKKyAgIH0gICAgICAgCisKKyAgIC8qIGdldCBiaXRsZW4gYW5kIHJvdW5kIHVwIHRvIG5leHQgbXVsdGlwbGUgb2YgRlBfTFVUICovCisgICBiaXRsZW4gID0gbXBfdW5zaWduZWRfYmluX3NpemUobW9kdWx1cykgPDwgMzsKKyAgIHggICAgICAgPSBiaXRsZW4gJSBGUF9MVVQ7CisgICBpZiAoeCkgeworICAgICAgYml0bGVuICs9IEZQX0xVVCAtIHg7CisgICB9ICAKKyAgIGx1dF9nYXAgPSBiaXRsZW4gLyBGUF9MVVQ7CisKKyAgIC8qIGluaXQgdGhlIG11ICovCisgICBpZiAoKGVyciA9IG1wX2luaXRfY29weSgmZnBfY2FjaGVbaWR4XS5tdSwgbXUpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBFUlI7CisgICB9CisgICAKKyAgIC8qIGNvcHkgYmFzZSAqLworICAgaWYgKChtcF9tdWxtb2QoZnBfY2FjaGVbaWR4XS5nLT54LCBtdSwgbW9kdWx1cywgZnBfY2FjaGVbaWR4XS5MVVRbMV0tPngpICE9IENSWVBUX09LKSB8fCAKKyAgICAgICAobXBfbXVsbW9kKGZwX2NhY2hlW2lkeF0uZy0+eSwgbXUsIG1vZHVsdXMsIGZwX2NhY2hlW2lkeF0uTFVUWzFdLT55KSAhPSBDUllQVF9PSykgfHwgCisgICAgICAgKG1wX211bG1vZChmcF9jYWNoZVtpZHhdLmctPnosIG11LCBtb2R1bHVzLCBmcF9jYWNoZVtpZHhdLkxVVFsxXS0+eikgIT0gQ1JZUFRfT0spKSAgICAgICAgeyBnb3RvIEVSUjsgfQorICAgICAgIAorICAgLyogbWFrZSBhbGwgc2luZ2xlIGJpdCBlbnRyaWVzICovCisgICBmb3IgKHggPSAxOyB4IDwgRlBfTFVUOyB4KyspIHsKKyAgICAgIGlmICgobXBfY29weShmcF9jYWNoZVtpZHhdLkxVVFsxPDwoeC0xKV0tPngsIGZwX2NhY2hlW2lkeF0uTFVUWzE8PHhdLT54KSAhPSBDUllQVF9PSykgfHwgCisgICAgICAgICAgKG1wX2NvcHkoZnBfY2FjaGVbaWR4XS5MVVRbMTw8KHgtMSldLT55LCBmcF9jYWNoZVtpZHhdLkxVVFsxPDx4XS0+eSkgIT0gQ1JZUFRfT0spIHx8IAorICAgICAgICAgIChtcF9jb3B5KGZwX2NhY2hlW2lkeF0uTFVUWzE8PCh4LTEpXS0+eiwgZnBfY2FjaGVbaWR4XS5MVVRbMTw8eF0tPnopICE9IENSWVBUX09LKSkgICAgIHsgZ290byBFUlI7IH0KKyAgICAgICAgICAKKyAgICAgIC8qIG5vdyBkb3VibGUgaXQgYml0bGVuL0ZQX0xVVCB0aW1lcyAqLworICAgICAgZm9yICh5ID0gMDsgeSA8IGx1dF9nYXA7IHkrKykgeworICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibChmcF9jYWNoZVtpZHhdLkxVVFsxPDx4XSwgZnBfY2FjaGVbaWR4XS5MVVRbMTw8eF0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICBnb3RvIEVSUjsKKyAgICAgICAgICB9CisgICAgICB9ICAgICAgICAgIAorICAgfQorICAgICAgCisgICAvKiBub3cgbWFrZSBhbGwgZW50cmllcyBpbiBpbmNyZWFzZSBvcmRlciBvZiBoYW1taW5nIHdlaWdodCAqLworICAgZm9yICh4ID0gMjsgeCA8PSBGUF9MVVQ7IHgrKykgeworICAgICAgIGZvciAoeSA9IDA7IHkgPCAoMVVMPDxGUF9MVVQpOyB5KyspIHsKKyAgICAgICAgICAgaWYgKGx1dF9vcmRlcnNbeV0uaGFtICE9IChpbnQpeCkgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgLyogcGVyZm9ybSB0aGUgYWRkICovCisgICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChmcF9jYWNoZVtpZHhdLkxVVFtsdXRfb3JkZXJzW3ldLnRlcm1hXSwgZnBfY2FjaGVbaWR4XS5MVVRbbHV0X29yZGVyc1t5XS50ZXJtYl0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnBfY2FjaGVbaWR4XS5MVVRbeV0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgZ290byBFUlI7CisgICAgICAgICAgIH0KKyAgICAgICB9CisgICB9CisgICAgICAKKyAgIC8qIG5vdyBtYXAgYWxsIGVudHJpZXMgYmFjayB0byBhZmZpbmUgc3BhY2UgdG8gbWFrZSBwb2ludCBhZGRpdGlvbiBmYXN0ZXIgKi8KKyAgIGlmICgoZXJyID0gbXBfaW5pdCgmdG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSOyB9CisgICBmb3IgKHggPSAxOyB4IDwgKDFVTDw8RlBfTFVUKTsgeCsrKSB7CisgICAgICAgLyogY29udmVydCB6IHRvIG5vcm1hbCBmcm9tIG1vbnRnb21lcnkgKi8KKyAgICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKGZwX2NhY2hlW2lkeF0uTFVUW3hdLT56LCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSOyB9CisgCisgICAgICAgLyogaW52ZXJ0IGl0ICovCisgICAgICAgaWYgKChlcnIgPSBtcF9pbnZtb2QoZnBfY2FjaGVbaWR4XS5MVVRbeF0tPnosIG1vZHVsdXMsIGZwX2NhY2hlW2lkeF0uTFVUW3hdLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgeyBnb3RvIEVSUjsgfQorCisgICAgICAgLyogbm93IHNxdWFyZSBpdCAqLworICAgICAgIGlmICgoZXJyID0gbXBfc3FybW9kKGZwX2NhY2hlW2lkeF0uTFVUW3hdLT56LCBtb2R1bHVzLCB0bXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBFUlI7IH0KKyAgICAgICAKKyAgICAgICAvKiBmaXggeCAqLworICAgICAgIGlmICgoZXJyID0gbXBfbXVsbW9kKGZwX2NhY2hlW2lkeF0uTFVUW3hdLT54LCB0bXAsIG1vZHVsdXMsIGZwX2NhY2hlW2lkeF0uTFVUW3hdLT54KSkgIT0gQ1JZUFRfT0spICAgIHsgZ290byBFUlI7IH0KKworICAgICAgIC8qIGdldCAxL3peMyAqLworICAgICAgIGlmICgoZXJyID0gbXBfbXVsbW9kKHRtcCwgZnBfY2FjaGVbaWR4XS5MVVRbeF0tPnosIG1vZHVsdXMsIHRtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBFUlI7IH0KKworICAgICAgIC8qIGZpeCB5ICovCisgICAgICAgaWYgKChlcnIgPSBtcF9tdWxtb2QoZnBfY2FjaGVbaWR4XS5MVVRbeF0tPnksIHRtcCwgbW9kdWx1cywgZnBfY2FjaGVbaWR4XS5MVVRbeF0tPnkpKSAhPSBDUllQVF9PSykgICAgeyBnb3RvIEVSUjsgfQorCisgICAgICAgLyogZnJlZSB6ICovCisgICAgICAgbXBfY2xlYXIoZnBfY2FjaGVbaWR4XS5MVVRbeF0tPnopOworICAgICAgIGZwX2NhY2hlW2lkeF0uTFVUW3hdLT56ID0gTlVMTDsKKyAgIH0KKyAgIG1wX2NsZWFyKHRtcCk7CisKKyAgIHJldHVybiBDUllQVF9PSzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorRVJSOgorICAgZXJyID0gQ1JZUFRfTUVNOworRE9ORTogICAKKyAgIGZvciAoeSA9IDA7IHkgPCAoMVU8PEZQX0xVVCk7IHkrKykgeworICAgICAgbHRjX2VjY19kZWxfcG9pbnQoZnBfY2FjaGVbaWR4XS5MVVRbeV0pOworICAgICAgZnBfY2FjaGVbaWR4XS5MVVRbeV0gPSBOVUxMOworICAgfQorICAgbHRjX2VjY19kZWxfcG9pbnQoZnBfY2FjaGVbaWR4XS5nKTsKKyAgIGZwX2NhY2hlW2lkeF0uZyAgICAgICAgID0gTlVMTDsKKyAgIGZwX2NhY2hlW2lkeF0ubHJ1X2NvdW50ID0gMDsKKyAgIGlmIChmcF9jYWNoZVtpZHhdLm11ICE9IE5VTEwpIHsKKyAgICAgIG1wX2NsZWFyKGZwX2NhY2hlW2lkeF0ubXUpOworICAgICAgZnBfY2FjaGVbaWR4XS5tdSA9IE5VTEw7CisgICB9CisgICBpZiAodG1wICE9IE5VTEwpIHsKKyAgICAgIG1wX2NsZWFyKHRtcCk7CisgICB9CisgICByZXR1cm4gZXJyOworfQorCisvKiBwZXJmb3JtIGEgZml4ZWQgcG9pbnQgRUNDIG11bG1vZCAqLworc3RhdGljIGludCBhY2NlbF9mcF9tdWwoaW50IGlkeCwgdm9pZCAqaywgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCB2b2lkICptcCwgaW50IG1hcCkKK3sKKyAgIHVuc2lnbmVkIGNoYXIga2JbMTI4XTsKKyAgIGludCAgICAgIHg7CisgICB1bnNpZ25lZCB5LCB6LCBlcnIsIGJpdGxlbiwgYml0cG9zLCBsdXRfZ2FwLCBmaXJzdDsKKyAgIHZvaWQgICAgICp0aywgKm9yZGVyOworCisgICAvKiBpZiBpdCdzIHNtYWxsZXIgdGhhbiBtb2R1bHVzIHdlIGZpbmUgKi8KKyAgIGlmIChtcF91bnNpZ25lZF9iaW5fc2l6ZShrKSA+IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKG1vZHVsdXMpKSB7CisgICAgICAvKiBmaW5kIG9yZGVyICovCisgICAgICB5ID0gbXBfdW5zaWduZWRfYmluX3NpemUobW9kdWx1cyk7CisgICAgICBmb3IgKHggPSAwOyBsdGNfZWNjX3NldHNbeF0uc2l6ZTsgeCsrKSB7CisgICAgICAgICBpZiAoeSA8PSAodW5zaWduZWQpbHRjX2VjY19zZXRzW3hdLnNpemUpIGJyZWFrOworICAgICAgfQorICAgCisgICAgICAvKiBiYWNrIG9mZiBpZiB3ZSBhcmUgb24gdGhlIDUyMSBiaXQgY3VydmUgKi8KKyAgICAgIGlmICh5ID09IDY2KSAtLXg7CisgICAgICAKKyAgICAgIGlmICgoZXJyID0gbXBfaW5pdCgmb3JkZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0gICAgICAKKyAgICAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChvcmRlciwgbHRjX2VjY19zZXRzW3hdLm9yZGVyLCAxNikpICE9IENSWVBUX09LKSB7CisgICAgICAgICBtcF9jbGVhcigmb3JkZXIpOworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKworICAgICAgLyogayBtdXN0IGJlIGxlc3MgdGhhbiBtb2R1bHVzICovCisgICAgICBpZiAobXBfY21wKGssIG9yZGVyKSAhPSBMVENfTVBfTFQpIHsKKyAgICAgICAgIGlmICgoZXJyID0gbXBfaW5pdCgmdGspKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgbXBfY2xlYXIob3JkZXIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgoZXJyID0gbXBfbW9kKGssIG9yZGVyLCB0aykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBtcF9jbGVhcih0ayk7CisgICAgICAgICAgICBtcF9jbGVhcihvcmRlcik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIHRrID0gazsKKyAgICAgIH0KKyAgICAgIG1wX2NsZWFyKG9yZGVyKTsKKyAgIH0gZWxzZSB7CisgICAgICAgdGsgPSBrOworICAgfSAgICAgICAKKyAgIAorICAgLyogZ2V0IGJpdGxlbiBhbmQgcm91bmQgdXAgdG8gbmV4dCBtdWx0aXBsZSBvZiBGUF9MVVQgKi8KKyAgIGJpdGxlbiAgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShtb2R1bHVzKSA8PCAzOworICAgeCAgICAgICA9IGJpdGxlbiAlIEZQX0xVVDsKKyAgIGlmICh4KSB7CisgICAgICBiaXRsZW4gKz0gRlBfTFVUIC0geDsKKyAgIH0gIAorICAgbHV0X2dhcCA9IGJpdGxlbiAvIEZQX0xVVDsKKyAgICAgICAgCisgICAvKiBnZXQgdGhlIGsgdmFsdWUgKi8KKyAgIGlmIChtcF91bnNpZ25lZF9iaW5fc2l6ZSh0aykgPiAoc2l6ZW9mKGtiKSAtIDIpKSB7CisgICAgICBpZiAodGsgIT0gaykgeworICAgICAgICAgbXBfY2xlYXIodGspOworICAgICAgfSAgICAgICAgIAorICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgIH0KKyAgIAorICAgLyogc3RvcmUgayAqLworICAgemVyb21lbShrYiwgc2l6ZW9mKGtiKSk7CisgICBpZiAoKGVyciA9IG1wX3RvX3Vuc2lnbmVkX2Jpbih0aywga2IpKSAhPSBDUllQVF9PSykgeworICAgICAgaWYgKHRrICE9IGspIHsKKyAgICAgICAgIG1wX2NsZWFyKHRrKTsKKyAgICAgIH0gICAgICAgICAKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICAKKyAgIC8qIGxldCdzIHJldmVyc2Uga2Igc28gaXQncyBsaXR0bGUgZW5kaWFuICovCisgICB4ID0gMDsKKyAgIHkgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZSh0aykgLSAxOworICAgaWYgKHRrICE9IGspIHsKKyAgICAgIG1wX2NsZWFyKHRrKTsKKyAgIH0gICAgICAgICAKKyAgIHdoaWxlICgodW5zaWduZWQpeCA8IHkpIHsKKyAgICAgIHogPSBrYlt4XTsga2JbeF0gPSBrYlt5XTsga2JbeV0gPSB6OworICAgICAgKyt4OyAtLXk7CisgICB9ICAgICAgCisgICAKKyAgIC8qIGF0IHRoaXMgcG9pbnQgd2UgY2FuIHN0YXJ0LCB5aXBlZSAqLworICAgZmlyc3QgPSAxOworICAgZm9yICh4ID0gbHV0X2dhcC0xOyB4ID49IDA7IHgtLSkgeworICAgICAgIC8qIGV4dHJhY3QgRlBfTFVUIGJpdHMgZnJvbSBrYiBzcHJlYWQgb3V0IGJ5IGx1dF9nYXAgYml0cyBhbmQgb2Zmc2V0IGJ5IHggYml0cyBmcm9tIHRoZSBzdGFydCAqLworICAgICAgIGJpdHBvcyA9IHg7CisgICAgICAgZm9yICh5ID0geiA9IDA7IHkgPCBGUF9MVVQ7IHkrKykgeworICAgICAgICAgIHogfD0gKChrYltiaXRwb3M+PjNdID4+IChiaXRwb3MmNykpICYgMSkgPDwgeTsKKyAgICAgICAgICBiaXRwb3MgKz0gbHV0X2dhcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXQncyB5Kmx1dF9nYXAgKyB4LCBidXQgaGVyZSB3ZSBjYW4gYXZvaWQgdGhlIG11bHQgaW4gZWFjaCBsb29wICovCisgICAgICAgfQorICAgICAgICAgICAgICAKKyAgICAgICAvKiBkb3VibGUgaWYgbm90IGZpcnN0ICovCisgICAgICAgaWYgKCFmaXJzdCkgeworICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibChSLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CisgICAgICAgfQorICAgICAgIAorICAgICAgIC8qIGFkZCBpZiBub3QgZmlyc3QsIG90aGVyd2lzZSBjb3B5ICovICAgICAgICAgIAorICAgICAgIGlmICghZmlyc3QgJiYgeikgeworICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChSLCBmcF9jYWNoZVtpZHhdLkxVVFt6XSwgUiwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorICAgICAgIH0gZWxzZSBpZiAoeikgeworICAgICAgICAgIGlmICgobXBfY29weShmcF9jYWNoZVtpZHhdLkxVVFt6XS0+eCwgUi0+eCkgIT0gQ1JZUFRfT0spIHx8IAorICAgICAgICAgICAgICAobXBfY29weShmcF9jYWNoZVtpZHhdLkxVVFt6XS0+eSwgUi0+eSkgIT0gQ1JZUFRfT0spIHx8IAorICAgICAgICAgICAgICAobXBfY29weShmcF9jYWNoZVtpZHhdLm11LCAgICAgICAgUi0+eikgIT0gQ1JZUFRfT0spKSB7IHJldHVybiBDUllQVF9NRU07IH0KKyAgICAgICAgICAgICAgZmlyc3QgPSAwOyAgICAgICAgICAgICAgCisgICAgICAgfQorICAgfSAgICAgCisgICB6ID0gMDsKKyAgIHplcm9tZW0oa2IsIHNpemVvZihrYikpOworICAgLyogbWFwIFIgYmFjayBmcm9tIHByb2plY3RpdmUgc3BhY2UgKi8KKyAgIGlmIChtYXApIHsKKyAgICAgIGVyciA9IGx0Y19lY2NfbWFwKFIsIG1vZHVsdXMsIG1wKTsKKyAgIH0gZWxzZSB7CisgICAgICBlcnIgPSBDUllQVF9PSzsKKyAgIH0KKyAgIHJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBMVENfRUNDX1NIQU1JUgorLyogcGVyZm9ybSBhIGZpeGVkIHBvaW50IEVDQyBtdWxtb2QgKi8KK3N0YXRpYyBpbnQgYWNjZWxfZnBfbXVsMmFkZChpbnQgaWR4MSwgaW50IGlkeDIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmtBLCB2b2lkICprQiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKlIsIHZvaWQgKm1vZHVsdXMsIHZvaWQgKm1wKQoreworICAgdW5zaWduZWQgY2hhciBrYlsyXVsxMjhdOworICAgaW50ICAgICAgeDsKKyAgIHVuc2lnbmVkIHksIHosIGVyciwgYml0bGVuLCBiaXRwb3MsIGx1dF9nYXAsIGZpcnN0LCB6QSwgekI7CisgICB2b2lkICAgICAqdGthLCAqdGtiLCAqb3JkZXI7CisKKyAgIC8qIGlmIGl0J3Mgc21hbGxlciB0aGFuIG1vZHVsdXMgd2UgZmluZSAqLworICAgaWYgKG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtBKSA+IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKG1vZHVsdXMpKSB7CisgICAgICAvKiBmaW5kIG9yZGVyICovCisgICAgICB5ID0gbXBfdW5zaWduZWRfYmluX3NpemUobW9kdWx1cyk7CisgICAgICBmb3IgKHggPSAwOyBsdGNfZWNjX3NldHNbeF0uc2l6ZTsgeCsrKSB7CisgICAgICAgICBpZiAoeSA8PSAodW5zaWduZWQpbHRjX2VjY19zZXRzW3hdLnNpemUpIGJyZWFrOworICAgICAgfQorICAgCisgICAgICAvKiBiYWNrIG9mZiBpZiB3ZSBhcmUgb24gdGhlIDUyMSBiaXQgY3VydmUgKi8KKyAgICAgIGlmICh5ID09IDY2KSAtLXg7CisgICAgICAKKyAgICAgIGlmICgoZXJyID0gbXBfaW5pdCgmb3JkZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0gICAgICAKKyAgICAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChvcmRlciwgbHRjX2VjY19zZXRzW3hdLm9yZGVyLCAxNikpICE9IENSWVBUX09LKSB7CisgICAgICAgICBtcF9jbGVhcigmb3JkZXIpOworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKworICAgICAgLyoga0EgbXVzdCBiZSBsZXNzIHRoYW4gbW9kdWx1cyAqLworICAgICAgaWYgKG1wX2NtcChrQSwgb3JkZXIpICE9IExUQ19NUF9MVCkgeworICAgICAgICAgaWYgKChlcnIgPSBtcF9pbml0KCZ0a2EpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgbXBfY2xlYXIob3JkZXIpOworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgoZXJyID0gbXBfbW9kKGtBLCBvcmRlciwgdGthKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIG1wX2NsZWFyKHRrYSk7CisgICAgICAgICAgICBtcF9jbGVhcihvcmRlcik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIHRrYSA9IGtBOworICAgICAgfQorICAgICAgbXBfY2xlYXIob3JkZXIpOworICAgfSBlbHNlIHsKKyAgICAgIHRrYSA9IGtBOworICAgfSAgICAgICAKKworICAgLyogaWYgaXQncyBzbWFsbGVyIHRoYW4gbW9kdWx1cyB3ZSBmaW5lICovCisgICBpZiAobXBfdW5zaWduZWRfYmluX3NpemUoa0IpID4gbXBfdW5zaWduZWRfYmluX3NpemUobW9kdWx1cykpIHsKKyAgICAgIC8qIGZpbmQgb3JkZXIgKi8KKyAgICAgIHkgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShtb2R1bHVzKTsKKyAgICAgIGZvciAoeCA9IDA7IGx0Y19lY2Nfc2V0c1t4XS5zaXplOyB4KyspIHsKKyAgICAgICAgIGlmICh5IDw9ICh1bnNpZ25lZClsdGNfZWNjX3NldHNbeF0uc2l6ZSkgYnJlYWs7CisgICAgICB9CisgICAKKyAgICAgIC8qIGJhY2sgb2ZmIGlmIHdlIGFyZSBvbiB0aGUgNTIxIGJpdCBjdXJ2ZSAqLworICAgICAgaWYgKHkgPT0gNjYpIC0teDsKKyAgICAgIAorICAgICAgaWYgKChlcnIgPSBtcF9pbml0KCZvcmRlcikpICE9IENSWVBUX09LKSB7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfSAgICAgIAorICAgICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KG9yZGVyLCBsdGNfZWNjX3NldHNbeF0ub3JkZXIsIDE2KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIG1wX2NsZWFyKCZvcmRlcik7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorCisgICAgICAvKiBrQiBtdXN0IGJlIGxlc3MgdGhhbiBtb2R1bHVzICovCisgICAgICBpZiAobXBfY21wKGtCLCBvcmRlcikgIT0gTFRDX01QX0xUKSB7CisgICAgICAgICBpZiAoKGVyciA9IG1wX2luaXQoJnRrYikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBtcF9jbGVhcihvcmRlcik7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgfQorICAgICAgICAgaWYgKChlcnIgPSBtcF9tb2Qoa0IsIG9yZGVyLCB0a2IpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgbXBfY2xlYXIodGtiKTsKKyAgICAgICAgICAgIG1wX2NsZWFyKG9yZGVyKTsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICAgdGtiID0ga0I7CisgICAgICB9CisgICAgICBtcF9jbGVhcihvcmRlcik7CisgICB9IGVsc2UgeworICAgICAgdGtiID0ga0I7CisgICB9ICAgICAKKworICAgLyogZ2V0IGJpdGxlbiBhbmQgcm91bmQgdXAgdG8gbmV4dCBtdWx0aXBsZSBvZiBGUF9MVVQgKi8KKyAgIGJpdGxlbiAgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShtb2R1bHVzKSA8PCAzOworICAgeCAgICAgICA9IGJpdGxlbiAlIEZQX0xVVDsKKyAgIGlmICh4KSB7CisgICAgICBiaXRsZW4gKz0gRlBfTFVUIC0geDsKKyAgIH0gIAorICAgbHV0X2dhcCA9IGJpdGxlbiAvIEZQX0xVVDsKKyAgICAgICAgCisgICAvKiBnZXQgdGhlIGsgdmFsdWUgKi8KKyAgIGlmICgobXBfdW5zaWduZWRfYmluX3NpemUodGthKSA+IChzaXplb2Yoa2JbMF0pIC0gMikpIHx8IChtcF91bnNpZ25lZF9iaW5fc2l6ZSh0a2IpID4gKHNpemVvZihrYlswXSkgLSAyKSkgICkgeworICAgICAgaWYgKHRrYSAhPSBrQSkgeworICAgICAgICAgbXBfY2xlYXIodGthKTsKKyAgICAgIH0gICAgICAgICAKKyAgICAgIGlmICh0a2IgIT0ga0IpIHsKKyAgICAgICAgIG1wX2NsZWFyKHRrYik7CisgICAgICB9ICAgICAgICAgCisgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgfQorICAgCisgICAvKiBzdG9yZSBrICovCisgICB6ZXJvbWVtKGtiLCBzaXplb2Yoa2IpKTsKKyAgIGlmICgoZXJyID0gbXBfdG9fdW5zaWduZWRfYmluKHRrYSwga2JbMF0pKSAhPSBDUllQVF9PSykgeworICAgICAgaWYgKHRrYSAhPSBrQSkgeworICAgICAgICAgbXBfY2xlYXIodGthKTsKKyAgICAgIH0gICAgICAgICAKKyAgICAgIGlmICh0a2IgIT0ga0IpIHsKKyAgICAgICAgIG1wX2NsZWFyKHRrYik7CisgICAgICB9ICAgICAgICAgCisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgCisgICAvKiBsZXQncyByZXZlcnNlIGtiIHNvIGl0J3MgbGl0dGxlIGVuZGlhbiAqLworICAgeCA9IDA7CisgICB5ID0gbXBfdW5zaWduZWRfYmluX3NpemUodGthKSAtIDE7CisgICBpZiAodGthICE9IGtBKSB7CisgICAgICBtcF9jbGVhcih0a2EpOworICAgfSAgICAgICAgIAorICAgd2hpbGUgKCh1bnNpZ25lZCl4IDwgeSkgeworICAgICAgeiA9IGtiWzBdW3hdOyBrYlswXVt4XSA9IGtiWzBdW3ldOyBrYlswXVt5XSA9IHo7CisgICAgICArK3g7IC0teTsKKyAgIH0gICAgICAKKyAgIAorICAgLyogc3RvcmUgYiAqLworICAgaWYgKChlcnIgPSBtcF90b191bnNpZ25lZF9iaW4odGtiLCBrYlsxXSkpICE9IENSWVBUX09LKSB7CisgICAgICBpZiAodGtiICE9IGtCKSB7CisgICAgICAgICBtcF9jbGVhcih0a2IpOworICAgICAgfSAgICAgICAgIAorICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgeCA9IDA7CisgICB5ID0gbXBfdW5zaWduZWRfYmluX3NpemUodGtiKSAtIDE7CisgICBpZiAodGtiICE9IGtCKSB7CisgICAgICBtcF9jbGVhcih0a2IpOworICAgfSAgICAgICAgIAorICAgd2hpbGUgKCh1bnNpZ25lZCl4IDwgeSkgeworICAgICAgeiA9IGtiWzFdW3hdOyBrYlsxXVt4XSA9IGtiWzFdW3ldOyBrYlsxXVt5XSA9IHo7CisgICAgICArK3g7IC0teTsKKyAgIH0gICAgICAKKworICAgLyogYXQgdGhpcyBwb2ludCB3ZSBjYW4gc3RhcnQsIHlpcGVlICovCisgICBmaXJzdCA9IDE7CisgICBmb3IgKHggPSBsdXRfZ2FwLTE7IHggPj0gMDsgeC0tKSB7CisgICAgICAgLyogZXh0cmFjdCBGUF9MVVQgYml0cyBmcm9tIGtiIHNwcmVhZCBvdXQgYnkgbHV0X2dhcCBiaXRzIGFuZCBvZmZzZXQgYnkgeCBiaXRzIGZyb20gdGhlIHN0YXJ0ICovCisgICAgICAgYml0cG9zID0geDsKKyAgICAgICBmb3IgKHkgPSB6QSA9IHpCID0gMDsgeSA8IEZQX0xVVDsgeSsrKSB7CisgICAgICAgICAgekEgfD0gKChrYlswXVtiaXRwb3M+PjNdID4+IChiaXRwb3MmNykpICYgMSkgPDwgeTsKKyAgICAgICAgICB6QiB8PSAoKGtiWzFdW2JpdHBvcz4+M10gPj4gKGJpdHBvcyY3KSkgJiAxKSA8PCB5OworICAgICAgICAgIGJpdHBvcyArPSBsdXRfZ2FwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIHkqbHV0X2dhcCArIHgsIGJ1dCBoZXJlIHdlIGNhbiBhdm9pZCB0aGUgbXVsdCBpbiBlYWNoIGxvb3AgKi8KKyAgICAgICB9CisgICAgICAgICAgICAgIAorICAgICAgIC8qIGRvdWJsZSBpZiBub3QgZmlyc3QgKi8KKyAgICAgICBpZiAoIWZpcnN0KSB7CisgICAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0ZGJsKFIsIFIsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgCisgICAgICAgLyogYWRkIGlmIG5vdCBmaXJzdCwgb3RoZXJ3aXNlIGNvcHkgKi8gICAgICAgICAgCisgICAgICAgaWYgKCFmaXJzdCkgeworICAgICAgICAgIGlmICh6QSkgeworICAgICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChSLCBmcF9jYWNoZVtpZHgxXS5MVVRbekFdLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGlmICh6QikgeworICAgICAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChSLCBmcF9jYWNoZVtpZHgyXS5MVVRbekJdLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHpBKSB7CisgICAgICAgICAgICAgIGlmICgobXBfY29weShmcF9jYWNoZVtpZHgxXS5MVVRbekFdLT54LCBSLT54KSAhPSBDUllQVF9PSykgfHwgCisgICAgICAgICAgICAgICAgIChtcF9jb3B5KGZwX2NhY2hlW2lkeDFdLkxVVFt6QV0tPnksIFItPnkpICE9IENSWVBUX09LKSB8fCAKKyAgICAgICAgICAgICAgICAgKG1wX2NvcHkoZnBfY2FjaGVbaWR4MV0ubXUsICAgICAgICBSLT56KSAhPSBDUllQVF9PSykpIHsgcmV0dXJuIENSWVBUX01FTTsgfQorICAgICAgICAgICAgICAgICBmaXJzdCA9IDA7ICAgICAgICAgICAgICAKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHpCICYmIGZpcnN0ID09IDApIHsKKyAgICAgICAgICAgICBpZiAoekIpIHsKKyAgICAgICAgICAgICAgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRhZGQoUiwgZnBfY2FjaGVbaWR4Ml0uTFVUW3pCXSwgUiwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgaWYgKHpCICYmIGZpcnN0ID09IDEpIHsKKyAgICAgICAgICAgICAgaWYgKChtcF9jb3B5KGZwX2NhY2hlW2lkeDJdLkxVVFt6Ql0tPngsIFItPngpICE9IENSWVBUX09LKSB8fCAKKyAgICAgICAgICAgICAgICAgKG1wX2NvcHkoZnBfY2FjaGVbaWR4Ml0uTFVUW3pCXS0+eSwgUi0+eSkgIT0gQ1JZUFRfT0spIHx8IAorICAgICAgICAgICAgICAgICAobXBfY29weShmcF9jYWNoZVtpZHgyXS5tdSwgICAgICAgIFItPnopICE9IENSWVBUX09LKSkgeyByZXR1cm4gQ1JZUFRfTUVNOyB9CisgICAgICAgICAgICAgICAgIGZpcnN0ID0gMDsgICAgICAgICAgICAgIAorICAgICAgICAgIH0KKyAgICAgICB9CisgICB9ICAgICAKKyAgIHplcm9tZW0oa2IsIHNpemVvZihrYikpOworICAgcmV0dXJuIGx0Y19lY2NfbWFwKFIsIG1vZHVsdXMsIG1wKTsKK30KKworLyoqIEVDQyBGaXhlZCBQb2ludCBtdWxtb2QgZ2xvYmFsCisgICAgQHBhcmFtIGsgICAgICAgIFRoZSBtdWx0aXBsaWNhbmQKKyAgICBAcGFyYW0gRyAgICAgICAgQmFzZSBwb2ludCB0byBtdWx0aXBseQorICAgIEBwYXJhbSBSICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiBwcm9kdWN0CisgICAgQHBhcmFtIG1vZHVsdXMgIFRoZSBtb2R1bHVzIGZvciB0aGUgY3VydmUKKyAgICBAcGFyYW0gbWFwICAgICAgW2Jvb2xlYW5dIElmIG5vbi16ZXJvIG1hcHMgdGhlIHBvaW50IGJhY2sgdG8gYWZmaW5lIGNvLW9yZGluYXRlcywgb3RoZXJ3aXNlIGl0J3MgbGVmdCBpbiBqYWNvYmlhbi1tb250Z29tZXJ5IGZvcm0KKyAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAgCitpbnQgbHRjX2VjY19mcF9tdWwyYWRkKGVjY19wb2ludCAqQSwgdm9pZCAqa0EsCisgICAgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqQiwgdm9pZCAqa0IsCisgICAgICAgICAgICAgICAgICAgICAgIGVjY19wb2ludCAqQywgdm9pZCAqbW9kdWx1cykKK3sKKyAgIGludCAgaWR4MSwgaWR4MiwgZXJyOworICAgdm9pZCAqbXAsICptdTsKKyAgIAorICAgbXAgPSBOVUxMOworICAgbXUgPSBOVUxMOworICAgTFRDX01VVEVYX0xPQ0soJmx0Y19lY2NfZnBfbG9jayk7CisgICAgICAvKiBmaW5kIHBvaW50ICovCisgICAgICBpZHgxID0gZmluZF9iYXNlKEEpOworCisgICAgICAvKiBubyBlbnRyeT8gKi8KKyAgICAgIGlmIChpZHgxID09IC0xKSB7CisgICAgICAgICAvKiBmaW5kIGhvbGUgYW5kIGFkZCBpdCAqLworICAgICAgICAgaWR4MSA9IGZpbmRfaG9sZSgpOworCisgICAgICAgICBpZiAoKGVyciA9IGFkZF9lbnRyeShpZHgxLCBBKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogaW5jcmVtZW50IExSVSAqLworICAgICAgKysoZnBfY2FjaGVbaWR4MV0ubHJ1X2NvdW50KTsKKyAKKyAgICAgIC8qIGZpbmQgcG9pbnQgKi8KKyAgICAgIGlkeDIgPSBmaW5kX2Jhc2UoQik7CisKKyAgICAgIC8qIG5vIGVudHJ5PyAqLworICAgICAgaWYgKGlkeDIgPT0gLTEpIHsKKyAgICAgICAgIC8qIGZpbmQgaG9sZSBhbmQgYWRkIGl0ICovCisgICAgICAgICBpZHgyID0gZmluZF9ob2xlKCk7CisKKyAgICAgICAgIGlmICgoZXJyID0gYWRkX2VudHJ5KGlkeDIsIEIpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBpbmNyZW1lbnQgTFJVICovCisgICAgICArKyhmcF9jYWNoZVtpZHgyXS5scnVfY291bnQpOworCisgICAgICAvKiBpZiBpdCdzIDIgYnVpbGQgdGhlIExVVCwgaWYgaXQncyBoaWdoZXIganVzdCB1c2UgdGhlIExVVCAqLworICAgICAgaWYgKGZwX2NhY2hlW2lkeDFdLmxydV9jb3VudCA9PSAyKSB7CisgICAgICAgICAvKiBjb21wdXRlIG1wICovCisgICAgICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfc2V0dXAobW9kdWx1cywgJm1wKSkgIT0gQ1JZUFRfT0spIHsgZ290byBMQkxfRVJSOyB9CisKKyAgICAgICAgIC8qIGNvbXB1dGUgbXUgKi8KKyAgICAgICAgIGlmICgoZXJyID0gbXBfaW5pdCgmbXUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgIH0KKyAgICAgICAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9ub3JtYWxpemF0aW9uKG11LCBtb2R1bHVzKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgIH0gICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAvKiBidWlsZCB0aGUgTFVUICovCisgICAgICAgICBpZiAoKGVyciA9IGJ1aWxkX2x1dChpZHgxLCBtb2R1bHVzLCBtcCwgbXUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjs7CisgICAgICAgICB9ICAKKyAgICAgIH0KKworICAgICAgLyogaWYgaXQncyAyIGJ1aWxkIHRoZSBMVVQsIGlmIGl0J3MgaGlnaGVyIGp1c3QgdXNlIHRoZSBMVVQgKi8KKyAgICAgIGlmIChmcF9jYWNoZVtpZHgyXS5scnVfY291bnQgPT0gMikgeworICAgICAgICAgaWYgKG1wID09IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIGNvbXB1dGUgbXAgKi8KKyAgICAgICAgICAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9zZXR1cChtb2R1bHVzLCAmbXApKSAhPSBDUllQVF9PSykgeyBnb3RvIExCTF9FUlI7IH0KKworICAgICAgICAgICAgLyogY29tcHV0ZSBtdSAqLworICAgICAgICAgICAgaWYgKChlcnIgPSBtcF9pbml0KCZtdSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X25vcm1hbGl6YXRpb24obXUsIG1vZHVsdXMpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICAgfQorICAgICAgICAgICAgICAgICAKKyAgICAgICAgIC8qIGJ1aWxkIHRoZSBMVVQgKi8KKyAgICAgICAgIGlmICgoZXJyID0gYnVpbGRfbHV0KGlkeDIsIG1vZHVsdXMsIG1wLCBtdSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgZ290byBMQkxfRVJSOzsKKyAgICAgICAgIH0gIAorICAgICAgfQorCisKKyAgICAgIGlmIChmcF9jYWNoZVtpZHgxXS5scnVfY291bnQgPj0gMiAmJiBmcF9jYWNoZVtpZHgyXS5scnVfY291bnQgPj0gMikgeworICAgICAgICAgaWYgKG1wID09IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIGNvbXB1dGUgbXAgKi8KKyAgICAgICAgICAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9zZXR1cChtb2R1bHVzLCAmbXApKSAhPSBDUllQVF9PSykgeyBnb3RvIExCTF9FUlI7IH0KKyAgICAgICAgIH0KKyAgICAgICAgIGVyciA9IGFjY2VsX2ZwX211bDJhZGQoaWR4MSwgaWR4Miwga0EsIGtCLCBDLCBtb2R1bHVzLCBtcCk7CisgICAgICB9IGVsc2UgeworICAgICAgICAgZXJyID0gbHRjX2VjY19tdWwyYWRkKEEsIGtBLCBCLCBrQiwgQywgbW9kdWx1cyk7CisgICAgICB9CitMQkxfRVJSOgorICAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19lY2NfZnBfbG9jayk7CisgICAgaWYgKG1wICE9IE5VTEwpIHsKKyAgICAgICBtcF9tb250Z29tZXJ5X2ZyZWUobXApOworICAgIH0gICAgICAgCisgICAgaWYgKG11ICE9IE5VTEwpIHsKKyAgICAgICBtcF9jbGVhcihtdSk7CisgICAgfSAgICAgICAKKyAgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qKiBFQ0MgRml4ZWQgUG9pbnQgbXVsbW9kIGdsb2JhbAorICAgIEBwYXJhbSBrICAgICAgICBUaGUgbXVsdGlwbGljYW5kCisgICAgQHBhcmFtIEcgICAgICAgIEJhc2UgcG9pbnQgdG8gbXVsdGlwbHkKKyAgICBAcGFyYW0gUiAgICAgICAgW291dF0gRGVzdGluYXRpb24gb2YgcHJvZHVjdAorICAgIEBwYXJhbSBtb2R1bHVzICBUaGUgbW9kdWx1cyBmb3IgdGhlIGN1cnZlCisgICAgQHBhcmFtIG1hcCAgICAgIFtib29sZWFuXSBJZiBub24temVybyBtYXBzIHRoZSBwb2ludCBiYWNrIHRvIGFmZmluZSBjby1vcmRpbmF0ZXMsIG90aGVyd2lzZSBpdCdzIGxlZnQgaW4gamFjb2JpYW4tbW9udGdvbWVyeSBmb3JtCisgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLyAgIAoraW50IGx0Y19lY2NfZnBfbXVsbW9kKHZvaWQgKmssIGVjY19wb2ludCAqRywgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCBpbnQgbWFwKQoreworICAgaW50ICAgaWR4LCBlcnI7CisgICB2b2lkICptcCwgKm11OworICAgCisgICBtcCA9IE5VTEw7CisgICBtdSA9IE5VTEw7CisgICBMVENfTVVURVhfTE9DSygmbHRjX2VjY19mcF9sb2NrKTsKKyAgICAgIC8qIGZpbmQgcG9pbnQgKi8KKyAgICAgIGlkeCA9IGZpbmRfYmFzZShHKTsKKworICAgICAgLyogbm8gZW50cnk/ICovCisgICAgICBpZiAoaWR4ID09IC0xKSB7CisgICAgICAgICAvKiBmaW5kIGhvbGUgYW5kIGFkZCBpdCAqLworICAgICAgICAgaWR4ID0gZmluZF9ob2xlKCk7CisKKyAgICAgICAgIGlmICgoZXJyID0gYWRkX2VudHJ5KGlkeCwgRykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIGluY3JlbWVudCBMUlUgKi8KKyAgICAgICsrKGZwX2NhY2hlW2lkeF0ubHJ1X2NvdW50KTsKKyAKKyAgICAgIC8qIGlmIGl0J3MgMiBidWlsZCB0aGUgTFVULCBpZiBpdCdzIGhpZ2hlciBqdXN0IHVzZSB0aGUgTFVUICovCisgICAgICBpZiAoZnBfY2FjaGVbaWR4XS5scnVfY291bnQgPT0gMikgeworICAgICAgICAgLyogY29tcHV0ZSBtcCAqLworICAgICAgICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3NldHVwKG1vZHVsdXMsICZtcCkpICE9IENSWVBUX09LKSB7IGdvdG8gTEJMX0VSUjsgfQorCisgICAgICAgICAvKiBjb21wdXRlIG11ICovCisgICAgICAgICBpZiAoKGVyciA9IG1wX2luaXQoJm11KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICB9CisgICAgICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfbm9ybWFsaXphdGlvbihtdSwgbW9kdWx1cykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIAorICAgICAgICAgLyogYnVpbGQgdGhlIExVVCAqLworICAgICAgICAgaWYgKChlcnIgPSBidWlsZF9sdXQoaWR4LCBtb2R1bHVzLCBtcCwgbXUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjs7CisgICAgICAgICB9ICAKKyAgICAgIH0KKworICAgICAgaWYgKGZwX2NhY2hlW2lkeF0ubHJ1X2NvdW50ID49IDIpIHsKKyAgICAgICAgIGlmIChtcCA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBjb21wdXRlIG1wICovCisgICAgICAgICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfc2V0dXAobW9kdWx1cywgJm1wKSkgIT0gQ1JZUFRfT0spIHsgZ290byBMQkxfRVJSOyB9CisgICAgICAgICB9CisgICAgICAgICBlcnIgPSBhY2NlbF9mcF9tdWwoaWR4LCBrLCBSLCBtb2R1bHVzLCBtcCwgbWFwKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICBlcnIgPSBsdGNfZWNjX211bG1vZChrLCBHLCBSLCBtb2R1bHVzLCBtYXApOworICAgICAgfQorTEJMX0VSUjoKKyAgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfZWNjX2ZwX2xvY2spOworICAgIGlmIChtcCAhPSBOVUxMKSB7CisgICAgICAgbXBfbW9udGdvbWVyeV9mcmVlKG1wKTsKKyAgICB9ICAgICAgIAorICAgIGlmIChtdSAhPSBOVUxMKSB7CisgICAgICAgbXBfY2xlYXIobXUpOworICAgIH0gICAgICAgCisgICAgcmV0dXJuIGVycjsKK30KKworLyoqIEZyZWUgdGhlIEZpeGVkIFBvaW50IHRhYmxlcyAqLwordm9pZCBsdGNfZWNjX2ZwX2ZyZWUodm9pZCkKK3sKKyAgIHVuc2lnbmVkIHgsIHk7CisgICBMVENfTVVURVhfTE9DSygmbHRjX2VjY19mcF9sb2NrKTsKKyAgIGZvciAoeCA9IDA7IHggPCBGUF9FTlRSSUVTOyB4KyspIHsKKyAgICAgIGlmIChmcF9jYWNoZVt4XS5nICE9IE5VTEwpIHsKKyAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAoMVU8PEZQX0xVVCk7IHkrKykgeworICAgICAgICAgICAgbHRjX2VjY19kZWxfcG9pbnQoZnBfY2FjaGVbeF0uTFVUW3ldKTsKKyAgICAgICAgICAgIGZwX2NhY2hlW3hdLkxVVFt5XSA9IE5VTEw7CisgICAgICAgICB9CisgICAgICAgICBsdGNfZWNjX2RlbF9wb2ludChmcF9jYWNoZVt4XS5nKTsKKyAgICAgICAgIGZwX2NhY2hlW3hdLmcgICAgICAgICA9IE5VTEw7CisgICAgICAgICBpZiAoZnBfY2FjaGVbeF0ubXUgIT0gTlVMTCkgeworICAgICAgICAgICAgbXBfY2xlYXIoZnBfY2FjaGVbeF0ubXUpOworICAgICAgICAgICAgZnBfY2FjaGVbeF0ubXUgICAgID0gTlVMTDsKKyAgICAgICAgIH0KKyAgICAgICAgIGZwX2NhY2hlW3hdLmxydV9jb3VudCA9IDA7CisgICAgICB9ICAgICAgICAgCisgICB9CisgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfZWNjX2ZwX2xvY2spOworfSAgICAgICAgIAorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWF0aC9mcC9sdGNfZWNjX2ZwX211bG1vZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjI3ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzAzIDAwOjM5OjU2ICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hdGgvZ21wX2Rlc2MuYyBiL2xpYnRvbWNyeXB0L3NyYy9tYXRoL2dtcF9kZXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZjMjc5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYXRoL2dtcF9kZXNjLmMKQEAgLTAsMCArMSw0NzggQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKyNkZWZpbmUgREVTQ19ERUZfT05MWQorI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBHTVBfREVTQworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxnbXAuaD4KKworc3RhdGljIGludCBpbml0KHZvaWQgKiphKQoreyAKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKworICAgKmEgPSBYQ0FMTE9DKDEsIHNpemVvZihfX21wel9zdHJ1Y3QpKTsKKyAgIGlmICgqYSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorICAgbXB6X2luaXQoKChfX21wel9zdHJ1Y3QgKikqYSkpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCitzdGF0aWMgdm9pZCBkZWluaXQodm9pZCAqYSkKK3sKKyAgIExUQ19BUkdDSEtWRChhICE9IE5VTEwpOworICAgbXB6X2NsZWFyKGEpOworICAgWEZSRUUoYSk7Cit9CisKK3N0YXRpYyBpbnQgbmVnKHZvaWQgKmEsIHZvaWQgKmIpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBtcHpfbmVnKGIsIGEpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCitzdGF0aWMgaW50IGNvcHkodm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIG1wel9zZXQoYiwgYSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jb3B5KHZvaWQgKiphLCB2b2lkICpiKQoreworICAgaWYgKGluaXQoYSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICByZXR1cm4gY29weShiLCAqYSk7Cit9CisKKy8qIC0tLS0gdHJpdmlhbCAtLS0tICovCitzdGF0aWMgaW50IHNldF9pbnQodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgbXB6X3NldF91aSgoKF9fbXB6X3N0cnVjdCAqKWEpLCBiKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2ludCh2b2lkICphKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgcmV0dXJuIG1wel9nZXRfdWkoYSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9kaWdpdCh2b2lkICphLCBpbnQgbikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIHJldHVybiBtcHpfZ2V0bGltYm4oYSwgbik7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2RpZ2l0X2NvdW50KHZvaWQgKmEpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICByZXR1cm4gbXB6X3NpemUoYSk7Cit9CisgICAKK3N0YXRpYyBpbnQgY29tcGFyZSh2b2lkICphLCB2b2lkICpiKQoreworICAgaW50IHJldDsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldCA9IG1wel9jbXAoYSwgYik7CisgICBpZiAocmV0IDwgMCkgeworICAgICAgcmV0dXJuIExUQ19NUF9MVDsKKyAgIH0gZWxzZSBpZiAocmV0ID4gMCkgeworICAgICAgcmV0dXJuIExUQ19NUF9HVDsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gTFRDX01QX0VROworICAgfQorfQorCitzdGF0aWMgaW50IGNvbXBhcmVfZCh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIpCit7CisgICBpbnQgcmV0OworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgcmV0ID0gbXB6X2NtcF91aSgoKF9fbXB6X3N0cnVjdCAqKWEpLCBiKTsKKyAgIGlmIChyZXQgPCAwKSB7CisgICAgICByZXR1cm4gTFRDX01QX0xUOworICAgfSBlbHNlIGlmIChyZXQgPiAwKSB7CisgICAgICByZXR1cm4gTFRDX01QX0dUOworICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBMVENfTVBfRVE7CisgICB9Cit9CisKK3N0YXRpYyBpbnQgY291bnRfYml0cyh2b2lkICphKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgcmV0dXJuIG1wel9zaXplaW5iYXNlKGEsIDIpOworfQorCitzdGF0aWMgaW50IGNvdW50X2xzYl9iaXRzKHZvaWQgKmEpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICByZXR1cm4gbXB6X3NjYW4xKGEsIDApOworfQorCisKK3N0YXRpYyBpbnQgdHdvZXhwdCh2b2lkICphLCBpbnQgbikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIG1wel9zZXRfdWkoYSwgMCk7CisgICBtcHpfc2V0Yml0KGEsIG4pOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiAtLS0tIGNvbnZlcnNpb25zIC0tLS0gKi8KKworLyogcmVhZCBhc2NpaSBzdHJpbmcgKi8KK3N0YXRpYyBpbnQgcmVhZF9yYWRpeCh2b2lkICphLCBjb25zdCBjaGFyICpiLCBpbnQgcmFkaXgpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBtcHpfc2V0X3N0cihhLCBiLCByYWRpeCk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIHdyaXRlIG9uZSAqLworc3RhdGljIGludCB3cml0ZV9yYWRpeCh2b2lkICphLCBjaGFyICpiLCBpbnQgcmFkaXgpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBtcHpfZ2V0X3N0cihiLCByYWRpeCwgYSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGdldCBzaXplIGFzIHVuc2lnbmVkIGNoYXIgc3RyaW5nICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bnNpZ25lZF9zaXplKHZvaWQgKmEpCit7CisgICB1bnNpZ25lZCBsb25nIHQ7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICB0ID0gbXB6X3NpemVpbmJhc2UoYSwgMik7CisgICBpZiAobXB6X2NtcF91aSgoKF9fbXB6X3N0cnVjdCAqKWEpLCAwKSA9PSAwKSByZXR1cm4gMDsKKyAgIHJldHVybiAodD4+MykgKyAoKHQmNyk/MTowKTsKK30KKworLyogc3RvcmUgKi8KK3N0YXRpYyBpbnQgdW5zaWduZWRfd3JpdGUodm9pZCAqYSwgdW5zaWduZWQgY2hhciAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIG1wel9leHBvcnQoYiwgTlVMTCwgMSwgMSwgMSwgMCwgKChfX21wel9zdHJ1Y3QqKWEpKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyogcmVhZCAqLworc3RhdGljIGludCB1bnNpZ25lZF9yZWFkKHZvaWQgKmEsIHVuc2lnbmVkIGNoYXIgKmIsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgbXB6X2ltcG9ydChhLCBsZW4sIDEsIDEsIDEsIDAsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBhZGQgKi8KK3N0YXRpYyBpbnQgYWRkKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBtcHpfYWRkKGMsIGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorICAKK3N0YXRpYyBpbnQgYWRkaSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBtcHpfYWRkX3VpKGMsIGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBzdWIgKi8KK3N0YXRpYyBpbnQgc3ViKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBtcHpfc3ViKGMsIGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCitzdGF0aWMgaW50IHN1Ymkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgbXB6X3N1Yl91aShjLCBhLCBiKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyogbXVsICovCitzdGF0aWMgaW50IG11bCh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgbXB6X211bChjLCBhLCBiKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIGludCBtdWxpKHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIG1wel9tdWxfdWkoYywgYSwgYik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIHNxciAqLworc3RhdGljIGludCBzcXIodm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIG1wel9tdWwoYiwgYSwgYSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGRpdiAqLworc3RhdGljIGludCBkaXZpZGUodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCkKK3sKKyAgIG1wel90IHRtcDsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIGlmIChjICE9IE5VTEwpIHsKKyAgICAgIG1wel9pbml0KHRtcCk7CisgICAgICBtcHpfZGl2ZXhhY3QodG1wLCBhLCBiKTsKKyAgIH0KKyAgIGlmIChkICE9IE5VTEwpIHsKKyAgICAgIG1wel9tb2QoZCwgYSwgYik7CisgICB9CisgICBpZiAoYyAhPSBOVUxMKSB7CisgICAgICBtcHpfc2V0KGMsIHRtcCk7CisgICAgICBtcHpfY2xlYXIodG1wKTsKKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIGludCBkaXZfMih2b2lkICphLCB2b2lkICpiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgbXB6X2RpdmV4YWN0X3VpKGIsIGEsIDIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBtb2RpICovCitzdGF0aWMgaW50IG1vZGkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiLCB1bnNpZ25lZCBsb25nICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgCisgICAqYyA9IG1wel9mZGl2X3VpKGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfSAgCisKKy8qIGdjZCAqLworc3RhdGljIGludCBnY2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIG1wel9nY2QoYywgYSwgYik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGxjbSAqLworc3RhdGljIGludCBsY20odm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIG1wel9sY20oYywgYSwgYik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKK3N0YXRpYyBpbnQgbXVsbW9kKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMsIHZvaWQgKmQpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGQgIT0gTlVMTCk7CisgICBtcHpfbXVsKGQsIGEsIGIpOworICAgbXB6X21vZChkLCBkLCBjKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIGludCBzcXJtb2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIG1wel9tdWwoYywgYSwgYSk7CisgICBtcHpfbW9kKGMsIGMsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBpbnZtb2QgKi8KK3N0YXRpYyBpbnQgaW52bW9kKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBtcHpfaW52ZXJ0KGMsIGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBzZXR1cCAqLworc3RhdGljIGludCBtb250Z29tZXJ5X3NldHVwKHZvaWQgKmEsIHZvaWQgKipiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgKmIgPSAodm9pZCAqKTE7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGdldCBub3JtYWxpemF0aW9uIHZhbHVlICovCitzdGF0aWMgaW50IG1vbnRnb21lcnlfbm9ybWFsaXphdGlvbih2b2lkICphLCB2b2lkICpiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgbXB6X3NldF91aShhLCAxKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyogcmVkdWNlICovCitzdGF0aWMgaW50IG1vbnRnb21lcnlfcmVkdWNlKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBtcHpfbW9kKGEsIGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBjbGVhbiB1cCAqLworc3RhdGljIHZvaWQgbW9udGdvbWVyeV9kZWluaXQodm9pZCAqYSkKK3sKK30KKworc3RhdGljIGludCBleHB0bW9kKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMsIHZvaWQgKmQpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGQgIT0gTlVMTCk7CisgICBtcHpfcG93bShkLCBhLCBiLCBjKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30gICAKKworc3RhdGljIGludCBpc3ByaW1lKHZvaWQgKmEsIGludCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgICpiID0gbXB6X3Byb2JhYl9wcmltZV9wKGEsIDgpID4gMCA/IExUQ19NUF9ZRVMgOiBMVENfTVBfTk87CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKK2NvbnN0IGx0Y19tYXRoX2Rlc2NyaXB0b3IgZ21wX2Rlc2MgPSB7CisgICAiR05VIE1QIiwKKyAgIHNpemVvZihtcF9saW1iX3QpICogQ0hBUl9CSVQgLSBHTVBfTkFJTF9CSVRTLAorCisgICAmaW5pdCwKKyAgICZpbml0X2NvcHksCisgICAmZGVpbml0LAorCisgICAmbmVnLAorICAgJmNvcHksCisKKyAgICZzZXRfaW50LAorICAgJmdldF9pbnQsCisgICAmZ2V0X2RpZ2l0LAorICAgJmdldF9kaWdpdF9jb3VudCwKKyAgICZjb21wYXJlLAorICAgJmNvbXBhcmVfZCwKKyAgICZjb3VudF9iaXRzLAorICAgJmNvdW50X2xzYl9iaXRzLAorICAgJnR3b2V4cHQsCisKKyAgICZyZWFkX3JhZGl4LAorICAgJndyaXRlX3JhZGl4LAorICAgJnVuc2lnbmVkX3NpemUsCisgICAmdW5zaWduZWRfd3JpdGUsCisgICAmdW5zaWduZWRfcmVhZCwKKworICAgJmFkZCwKKyAgICZhZGRpLAorICAgJnN1YiwKKyAgICZzdWJpLAorICAgJm11bCwKKyAgICZtdWxpLAorICAgJnNxciwKKyAgICZkaXZpZGUsCisgICAmZGl2XzIsCisgICAmbW9kaSwKKyAgICZnY2QsCisgICAmbGNtLAorCisgICAmbXVsbW9kLAorICAgJnNxcm1vZCwKKyAgICZpbnZtb2QsCisKKyAgICZtb250Z29tZXJ5X3NldHVwLAorICAgJm1vbnRnb21lcnlfbm9ybWFsaXphdGlvbiwKKyAgICZtb250Z29tZXJ5X3JlZHVjZSwKKyAgICZtb250Z29tZXJ5X2RlaW5pdCwKKworICAgJmV4cHRtb2QsCisgICAmaXNwcmltZSwKKworI2lmZGVmIE1FQ0MKKyNpZmRlZiBNRUNDX0ZQCisgICAmbHRjX2VjY19mcF9tdWxtb2QsCisjZWxzZQorICAgJmx0Y19lY2NfbXVsbW9kLAorI2VuZGlmIC8qIE1FQ0NfRlAgKi8KKyAgICZsdGNfZWNjX3Byb2plY3RpdmVfYWRkX3BvaW50LAorICAgJmx0Y19lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQsCisgICAmbHRjX2VjY19tYXAsCisjaWZkZWYgTFRDX0VDQ19TSEFNSVIKKyNpZmRlZiBNRUNDX0ZQCisgICAmbHRjX2VjY19mcF9tdWwyYWRkLAorI2Vsc2UKKyAgICZsdGNfZWNjX211bDJhZGQsCisjZW5kaWYgLyogTUVDQ19GUCAqLworI2Vsc2UKKyAgIE5VTEwsCisjZW5kaWYgLyogTFRDX0VDQ19TSEFNSVIgKi8KKyNlbHNlCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMCisjZW5kaWYgLyogTUVDQyAqLworCisjaWZkZWYgTVJTQQorICAgJnJzYV9tYWtlX2tleSwKKyAgICZyc2FfZXhwdG1vZCwKKyNlbHNlCisgICBOVUxMLCBOVUxMCisjZW5kaWYKKyAgIAorfTsKKworCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hdGgvZ21wX2Rlc2MuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wMyAwMDozOTo1NiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWF0aC9sdG1fZGVzYy5jIGIvbGlidG9tY3J5cHQvc3JjL21hdGgvbHRtX2Rlc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2ZkZDVhCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21hdGgvbHRtX2Rlc2MuYwpAQCAtMCwwICsxLDQ4MyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworI2RlZmluZSBERVNDX0RFRl9PTkxZCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworI2lmZGVmIExUTV9ERVNDCisKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgIGludCBtcGlfY29kZSwgbHRjX2NvZGU7Cit9IG1waV90b19sdGNfY29kZXNbXSA9IHsKKyAgIHsgTVBfT0tBWSAsICBDUllQVF9PS30sCisgICB7IE1QX01FTSAgLCAgQ1JZUFRfTUVNfSwKKyAgIHsgTVBfVkFMICAsICBDUllQVF9JTlZBTElEX0FSR30sCit9OworCisvKioKKyAgIENvbnZlcnQgYSBNUEkgZXJyb3IgdG8gYSBMVEMgZXJyb3IgKFBvc3NpYmx5IHRoZSBtb3N0IHBvd2VyZnVsIGZ1bmN0aW9uIGV2ZXIhICBPaCB3YWl0Li4uIG5vKSAKKyAgIEBwYXJhbSBlcnIgICAgVGhlIGVycm9yIHRvIGNvbnZlcnQKKyAgIEByZXR1cm4gVGhlIGVxdWl2YWxlbnQgTFRDIGVycm9yIGNvZGUgb3IgQ1JZUFRfRVJST1IgaWYgbm9uZSBmb3VuZAorKi8KK3N0YXRpYyBpbnQgbXBpX3RvX2x0Y19lcnJvcihpbnQgZXJyKQoreworICAgaW50IHg7CisKKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YobXBpX3RvX2x0Y19jb2Rlcykvc2l6ZW9mKG1waV90b19sdGNfY29kZXNbMF0pKTsgeCsrKSB7CisgICAgICAgaWYgKGVyciA9PSBtcGlfdG9fbHRjX2NvZGVzW3hdLm1waV9jb2RlKSB7IAorICAgICAgICAgIHJldHVybiBtcGlfdG9fbHRjX2NvZGVzW3hdLmx0Y19jb2RlOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBDUllQVF9FUlJPUjsKK30KKworc3RhdGljIGludCBpbml0KHZvaWQgKiphKQoreworICAgaW50IGVycjsKKworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworCisgICAqYSA9IFhDQUxMT0MoMSwgc2l6ZW9mKG1wX2ludCkpOworICAgaWYgKCphID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICAKKyAgIGlmICgoZXJyID0gbXBpX3RvX2x0Y19lcnJvcihtcF9pbml0KCphKSkpICE9IENSWVBUX09LKSB7CisgICAgICBYRlJFRSgqYSk7CisgICB9CisgICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBkZWluaXQodm9pZCAqYSkKK3sKKyAgIExUQ19BUkdDSEtWRChhICE9IE5VTEwpOworICAgbXBfY2xlYXIoYSk7CisgICBYRlJFRShhKTsKK30KKworc3RhdGljIGludCBuZWcodm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX25lZyhhLCBiKSk7Cit9CisKK3N0YXRpYyBpbnQgY29weSh2b2lkICphLCB2b2lkICpiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgcmV0dXJuIG1waV90b19sdGNfZXJyb3IobXBfY29weShhLCBiKSk7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9jb3B5KHZvaWQgKiphLCB2b2lkICpiKQoreworICAgaWYgKGluaXQoYSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICByZXR1cm4gY29weShiLCAqYSk7Cit9CisKKy8qIC0tLS0gdHJpdmlhbCAtLS0tICovCitzdGF0aWMgaW50IHNldF9pbnQodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgcmV0dXJuIG1waV90b19sdGNfZXJyb3IobXBfc2V0X2ludChhLCBiKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9pbnQodm9pZCAqYSkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIHJldHVybiBtcF9nZXRfaW50KGEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfZGlnaXQodm9pZCAqYSwgaW50IG4pCit7CisgICBtcF9pbnQgKkE7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBBID0gYTsKKyAgIHJldHVybiAobiA+PSBBLT51c2VkIHx8IG4gPCAwKSA/IDAgOiBBLT5kcFtuXTsKK30KKworc3RhdGljIGludCBnZXRfZGlnaXRfY291bnQodm9pZCAqYSkKK3sKKyAgIG1wX2ludCAqQTsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIEEgPSBhOworICAgcmV0dXJuIEEtPnVzZWQ7Cit9CisgICAKK3N0YXRpYyBpbnQgY29tcGFyZSh2b2lkICphLCB2b2lkICpiKQoreworICAgaW50IHJldDsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldCA9IG1wX2NtcChhLCBiKTsKKyAgIHN3aXRjaCAocmV0KSB7CisgICAgICBjYXNlIE1QX0xUOiByZXR1cm4gTFRDX01QX0xUOworICAgICAgY2FzZSBNUF9FUTogcmV0dXJuIExUQ19NUF9FUTsKKyAgICAgIGNhc2UgTVBfR1Q6IHJldHVybiBMVENfTVBfR1Q7CisgICB9CisgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXJlX2Qodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiKQoreworICAgaW50IHJldDsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIHJldCA9IG1wX2NtcF9kKGEsIGIpOworICAgc3dpdGNoIChyZXQpIHsKKyAgICAgIGNhc2UgTVBfTFQ6IHJldHVybiBMVENfTVBfTFQ7CisgICAgICBjYXNlIE1QX0VROiByZXR1cm4gTFRDX01QX0VROworICAgICAgY2FzZSBNUF9HVDogcmV0dXJuIExUQ19NUF9HVDsKKyAgIH0KKyAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvdW50X2JpdHModm9pZCAqYSkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIHJldHVybiBtcF9jb3VudF9iaXRzKGEpOworfQorCitzdGF0aWMgaW50IGNvdW50X2xzYl9iaXRzKHZvaWQgKmEpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICByZXR1cm4gbXBfY250X2xzYihhKTsKK30KKworCitzdGF0aWMgaW50IHR3b2V4cHQodm9pZCAqYSwgaW50IG4pCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF8yZXhwdChhLCBuKSk7Cit9CisKKy8qIC0tLS0gY29udmVyc2lvbnMgLS0tLSAqLworCisvKiByZWFkIGFzY2lpIHN0cmluZyAqLworc3RhdGljIGludCByZWFkX3JhZGl4KHZvaWQgKmEsIGNvbnN0IGNoYXIgKmIsIGludCByYWRpeCkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX3JlYWRfcmFkaXgoYSwgYiwgcmFkaXgpKTsKK30KKworLyogd3JpdGUgb25lICovCitzdGF0aWMgaW50IHdyaXRlX3JhZGl4KHZvaWQgKmEsIGNoYXIgKmIsIGludCByYWRpeCkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX3RvcmFkaXgoYSwgYiwgcmFkaXgpKTsKK30KKworLyogZ2V0IHNpemUgYXMgdW5zaWduZWQgY2hhciBzdHJpbmcgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVuc2lnbmVkX3NpemUodm9pZCAqYSkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIHJldHVybiBtcF91bnNpZ25lZF9iaW5fc2l6ZShhKTsKK30KKworLyogc3RvcmUgKi8KK3N0YXRpYyBpbnQgdW5zaWduZWRfd3JpdGUodm9pZCAqYSwgdW5zaWduZWQgY2hhciAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX3RvX3Vuc2lnbmVkX2JpbihhLCBiKSk7Cit9CisKKy8qIHJlYWQgKi8KK3N0YXRpYyBpbnQgdW5zaWduZWRfcmVhZCh2b2lkICphLCB1bnNpZ25lZCBjaGFyICpiLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX3JlYWRfdW5zaWduZWRfYmluKGEsIGIsIGxlbikpOworfQorCisvKiBhZGQgKi8KK3N0YXRpYyBpbnQgYWRkKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9hZGQoYSwgYiwgYykpOworfQorICAKK3N0YXRpYyBpbnQgYWRkaSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9hZGRfZChhLCBiLCBjKSk7Cit9CisKKy8qIHN1YiAqLworc3RhdGljIGludCBzdWIodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX3N1YihhLCBiLCBjKSk7Cit9CisKK3N0YXRpYyBpbnQgc3ViaSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9zdWJfZChhLCBiLCBjKSk7Cit9CisKKy8qIG11bCAqLworc3RhdGljIGludCBtdWwodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX211bChhLCBiLCBjKSk7Cit9CisKK3N0YXRpYyBpbnQgbXVsaSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9tdWxfZChhLCBiLCBjKSk7Cit9CisKKy8qIHNxciAqLworc3RhdGljIGludCBzcXIodm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX3NxcihhLCBiKSk7Cit9CisKKy8qIGRpdiAqLworc3RhdGljIGludCBkaXZpZGUodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX2RpdihhLCBiLCBjLCBkKSk7Cit9CisKK3N0YXRpYyBpbnQgZGl2XzIodm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX2Rpdl8yKGEsIGIpKTsKK30KKworLyogbW9kaSAqLworc3RhdGljIGludCBtb2RpKHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgYiwgdW5zaWduZWQgbG9uZyAqYykKK3sKKyAgIG1wX2RpZ2l0IHRtcDsKKyAgIGludCAgICAgIGVycjsKKworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworCisgICBpZiAoKGVyciA9IG1waV90b19sdGNfZXJyb3IobXBfbW9kX2QoYSwgYiwgJnRtcCkpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgICpjID0gdG1wOworICAgcmV0dXJuIENSWVBUX09LOworfSAgCisKKy8qIGdjZCAqLworc3RhdGljIGludCBnY2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX2djZChhLCBiLCBjKSk7Cit9CisKKy8qIGxjbSAqLworc3RhdGljIGludCBsY20odm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX2xjbShhLCBiLCBjKSk7Cit9CisKK3N0YXRpYyBpbnQgbXVsbW9kKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMsIHZvaWQgKmQpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGQgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9tdWxtb2QoYSxiLGMsZCkpOworfQorCitzdGF0aWMgaW50IHNxcm1vZCh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgcmV0dXJuIG1waV90b19sdGNfZXJyb3IobXBfc3FybW9kKGEsYixjKSk7Cit9CisKKy8qIGludm1vZCAqLworc3RhdGljIGludCBpbnZtb2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX2ludm1vZChhLCBiLCBjKSk7Cit9CisKKy8qIHNldHVwICovCitzdGF0aWMgaW50IG1vbnRnb21lcnlfc2V0dXAodm9pZCAqYSwgdm9pZCAqKmIpCit7CisgICBpbnQgZXJyOworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgKmIgPSBYQ0FMTE9DKDEsIHNpemVvZihtcF9kaWdpdCkpOworICAgaWYgKCpiID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICBpZiAoKGVyciA9IG1waV90b19sdGNfZXJyb3IobXBfbW9udGdvbWVyeV9zZXR1cChhLCAobXBfZGlnaXQgKikqYikpKSAhPSBDUllQVF9PSykgeworICAgICAgWEZSRUUoKmIpOworICAgfQorICAgcmV0dXJuIGVycjsKK30KKworLyogZ2V0IG5vcm1hbGl6YXRpb24gdmFsdWUgKi8KK3N0YXRpYyBpbnQgbW9udGdvbWVyeV9ub3JtYWxpemF0aW9uKHZvaWQgKmEsIHZvaWQgKmIpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICByZXR1cm4gbXBpX3RvX2x0Y19lcnJvcihtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbihhLCBiKSk7Cit9CisKKy8qIHJlZHVjZSAqLworc3RhdGljIGludCBtb250Z29tZXJ5X3JlZHVjZSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgcmV0dXJuIG1waV90b19sdGNfZXJyb3IobXBfbW9udGdvbWVyeV9yZWR1Y2UoYSwgYiwgKigobXBfZGlnaXQgKiljKSkpOworfQorCisvKiBjbGVhbiB1cCAqLworc3RhdGljIHZvaWQgbW9udGdvbWVyeV9kZWluaXQodm9pZCAqYSkKK3sKKyAgIFhGUkVFKGEpOworfQorCitzdGF0aWMgaW50IGV4cHRtb2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZCAhPSBOVUxMKTsKKyAgIHJldHVybiBtcGlfdG9fbHRjX2Vycm9yKG1wX2V4cHRtb2QoYSxiLGMsZCkpOworfSAgIAorCitzdGF0aWMgaW50IGlzcHJpbWUodm9pZCAqYSwgaW50ICpiKQoreworICAgaW50IGVycjsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIGVyciA9IG1waV90b19sdGNfZXJyb3IobXBfcHJpbWVfaXNfcHJpbWUoYSwgOCwgYikpOworICAgKmIgPSAoKmIgPT0gTVBfWUVTKSA/IExUQ19NUF9ZRVMgOiBMVENfTVBfTk87CisgICByZXR1cm4gZXJyOworfSAgIAorCitjb25zdCBsdGNfbWF0aF9kZXNjcmlwdG9yIGx0bV9kZXNjID0geworCisgICAiTGliVG9tTWF0aCIsCisgICAoaW50KURJR0lUX0JJVCwKKworICAgJmluaXQsCisgICAmaW5pdF9jb3B5LAorICAgJmRlaW5pdCwKKworICAgJm5lZywKKyAgICZjb3B5LAorCisgICAmc2V0X2ludCwKKyAgICZnZXRfaW50LAorICAgJmdldF9kaWdpdCwKKyAgICZnZXRfZGlnaXRfY291bnQsCisgICAmY29tcGFyZSwKKyAgICZjb21wYXJlX2QsCisgICAmY291bnRfYml0cywKKyAgICZjb3VudF9sc2JfYml0cywKKyAgICZ0d29leHB0LAorCisgICAmcmVhZF9yYWRpeCwKKyAgICZ3cml0ZV9yYWRpeCwKKyAgICZ1bnNpZ25lZF9zaXplLAorICAgJnVuc2lnbmVkX3dyaXRlLAorICAgJnVuc2lnbmVkX3JlYWQsCisKKyAgICZhZGQsCisgICAmYWRkaSwKKyAgICZzdWIsCisgICAmc3ViaSwKKyAgICZtdWwsCisgICAmbXVsaSwKKyAgICZzcXIsCisgICAmZGl2aWRlLAorICAgJmRpdl8yLAorICAgJm1vZGksCisgICAmZ2NkLAorICAgJmxjbSwKKworICAgJm11bG1vZCwKKyAgICZzcXJtb2QsCisgICAmaW52bW9kLAorICAgCisgICAmbW9udGdvbWVyeV9zZXR1cCwKKyAgICZtb250Z29tZXJ5X25vcm1hbGl6YXRpb24sCisgICAmbW9udGdvbWVyeV9yZWR1Y2UsCisgICAmbW9udGdvbWVyeV9kZWluaXQsCisKKyAgICZleHB0bW9kLAorICAgJmlzcHJpbWUsCisKKyNpZmRlZiBNRUNDCisjaWZkZWYgTUVDQ19GUAorICAgJmx0Y19lY2NfZnBfbXVsbW9kLAorI2Vsc2UgICAKKyAgICZsdGNfZWNjX211bG1vZCwKKyNlbmRpZgorICAgJmx0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQsCisgICAmbHRjX2VjY19wcm9qZWN0aXZlX2RibF9wb2ludCwKKyAgICZsdGNfZWNjX21hcCwKKyNpZmRlZiBMVENfRUNDX1NIQU1JUgorI2lmZGVmIE1FQ0NfRlAKKyAgICZsdGNfZWNjX2ZwX211bDJhZGQsCisjZWxzZQorICAgJmx0Y19lY2NfbXVsMmFkZCwKKyNlbmRpZiAvKiBNRUNDX0ZQICovCisjZWxzZQorICAgTlVMTCwKKyNlbmRpZiAvKiBMVENfRUNDX1NIQU1JUiAqLworI2Vsc2UKKyAgIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCisjZW5kaWYgLyogTUVDQyAqLworCisjaWZkZWYgTVJTQQorICAgJnJzYV9tYWtlX2tleSwKKyAgICZyc2FfZXhwdG1vZCwKKyNlbHNlCisgICBOVUxMLCBOVUxMCisjZW5kaWYKK307CisKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYXRoL2x0bV9kZXNjLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMjkgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDMgMDA6Mzk6NTYgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hdGgvbXVsdGkuYyBiL2xpYnRvbWNyeXB0L3NyYy9tYXRoL211bHRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVlNGQ3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYXRoL211bHRpLmMKQEAgLTAsMCArMSw2MSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisjaWZkZWYgTVBJCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK2ludCBsdGNfaW5pdF9tdWx0aSh2b2lkICoqYSwgLi4uKQoreworICAgdm9pZCAgICAqKmN1ciA9IGE7CisgICBpbnQgICAgICAgbnAgID0gMDsKKyAgIHZhX2xpc3QgICBhcmdzOworCisgICB2YV9zdGFydChhcmdzLCBhKTsKKyAgIHdoaWxlIChjdXIgIT0gTlVMTCkgeworICAgICAgIGlmIChtcF9pbml0KGN1cikgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAvKiBmYWlsZWQgKi8KKyAgICAgICAgICB2YV9saXN0IGNsZWFuX2xpc3Q7CisKKyAgICAgICAgICB2YV9zdGFydChjbGVhbl9saXN0LCBhKTsKKyAgICAgICAgICBjdXIgPSBhOworICAgICAgICAgIHdoaWxlIChucC0tKSB7CisgICAgICAgICAgICAgIG1wX2NsZWFyKCpjdXIpOworICAgICAgICAgICAgICBjdXIgPSB2YV9hcmcoY2xlYW5fbGlzdCwgdm9pZCoqKTsKKyAgICAgICAgICB9CisgICAgICAgICAgdmFfZW5kKGNsZWFuX2xpc3QpOworICAgICAgICAgIHJldHVybiBDUllQVF9NRU07CisgICAgICAgfQorICAgICAgICsrbnA7CisgICAgICAgY3VyID0gdmFfYXJnKGFyZ3MsIHZvaWQqKik7CisgICB9CisgICB2YV9lbmQoYXJncyk7CisgICByZXR1cm4gQ1JZUFRfT0s7ICAgCit9CisKK3ZvaWQgbHRjX2RlaW5pdF9tdWx0aSh2b2lkICphLCAuLi4pCit7CisgICB2b2lkICAgICAqY3VyID0gYTsKKyAgIHZhX2xpc3QgICBhcmdzOworCisgICB2YV9zdGFydChhcmdzLCBhKTsKKyAgIHdoaWxlIChjdXIgIT0gTlVMTCkgeworICAgICAgIG1wX2NsZWFyKGN1cik7CisgICAgICAgY3VyID0gdmFfYXJnKGFyZ3MsIHZvaWQgKik7CisgICB9CisgICB2YV9lbmQoYXJncyk7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWF0aC9tdWx0aS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hdGgvcmFuZF9wcmltZS5jIGIvbGlidG9tY3J5cHQvc3JjL21hdGgvcmFuZF9wcmltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDc3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWF0aC9yYW5kX3ByaW1lLmMKQEAgLTAsMCArMSw4NyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgcmFuZF9wcmltZS5jCisgIEdlbmVyYXRlIGEgcmFuZG9tIHByaW1lLCBUb20gU3QgRGVuaXMKKyovICAKKworI2RlZmluZSBVU0VfQkJTIDEKKworaW50IHJhbmRfcHJpbWUodm9pZCAqTiwgbG9uZyBsZW4sIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZykKK3sKKyAgIGludCAgICAgICAgICAgIGVyciwgcmVzLCB0eXBlOworICAgdW5zaWduZWQgY2hhciAqYnVmOworCisgICBMVENfQVJHQ0hLKE4gIT0gTlVMTCk7CisKKyAgIC8qIGdldCB0eXBlICovCisgICBpZiAobGVuIDwgMCkgeworICAgICAgdHlwZSA9IFVTRV9CQlM7CisgICAgICBsZW4gPSAtbGVuOworICAgfSBlbHNlIHsKKyAgICAgIHR5cGUgPSAwOworICAgfQorCisgICAvKiBhbGxvdyBzaXplcyBiZXR3ZWVuIDIgYW5kIDUxMiBieXRlcyBmb3IgYSBwcmltZSBzaXplICovCisgICBpZiAobGVuIDwgMiB8fCBsZW4gPiA1MTIpIHsgCisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QUklNRV9TSVpFOworICAgfQorICAgCisgICAvKiB2YWxpZCBQUk5HPyBCZXR0ZXIgYmUhICovCisgICBpZiAoKGVyciA9IHBybmdfaXNfdmFsaWQod3BybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsgCisgICB9CisKKyAgIC8qIGFsbG9jYXRlIGJ1ZmZlciB0byB3b3JrIHdpdGggKi8KKyAgIGJ1ZiA9IFhDQUxMT0MoMSwgbGVuKTsKKyAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIGRvIHsKKyAgICAgIC8qIGdlbmVyYXRlIHZhbHVlICovCisgICAgICBpZiAocHJuZ19kZXNjcmlwdG9yW3dwcm5nXS5yZWFkKGJ1ZiwgbGVuLCBwcm5nKSAhPSAodW5zaWduZWQgbG9uZylsZW4pIHsKKyAgICAgICAgIFhGUkVFKGJ1Zik7CisgICAgICAgICByZXR1cm4gQ1JZUFRfRVJST1JfUkVBRFBSTkc7CisgICAgICB9CisKKyAgICAgIC8qIG11bmdlIGJpdHMgKi8KKyAgICAgIGJ1ZlswXSAgICAgfD0gMHg4MCB8IDB4NDA7CisgICAgICBidWZbbGVuLTFdIHw9IDB4MDEgfCAoKHR5cGUgJiBVU0VfQkJTKSA/IDB4MDIgOiAweDAwKTsKKyAKKyAgICAgIC8qIGxvYWQgdmFsdWUgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4oTiwgYnVmLCBsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgWEZSRUUoYnVmKTsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisKKyAgICAgIC8qIHRlc3QgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfcHJpbWVfaXNfcHJpbWUoTiwgOCwgJnJlcykpICE9IENSWVBUX09LKSB7CisgICAgICAgICBYRlJFRShidWYpOworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0gd2hpbGUgKHJlcyA9PSBMVENfTVBfTk8pOworCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGJ1ZiwgbGVuKTsKKyNlbmRpZgorCisgICBYRlJFRShidWYpOworICAgcmV0dXJuIENSWVBUX09LOworfQorICAgICAgCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21hdGgvcmFuZF9wcmltZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21hdGgvdGZtX2Rlc2MuYyBiL2xpYnRvbWNyeXB0L3NyYy9tYXRoL3RmbV9kZXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIzNzU2ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tYXRoL3RmbV9kZXNjLmMKQEAgLTAsMCArMSw3NzcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKyNkZWZpbmUgREVTQ19ERUZfT05MWQorI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKyNpZmRlZiBURk1fREVTQworCisjaW5jbHVkZSA8dGZtLmg+CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgIGludCB0Zm1fY29kZSwgbHRjX2NvZGU7Cit9IHRmbV90b19sdGNfY29kZXNbXSA9IHsKKyAgIHsgRlBfT0tBWSAsICBDUllQVF9PS30sCisgICB7IEZQX01FTSAgLCAgQ1JZUFRfTUVNfSwKKyAgIHsgRlBfVkFMICAsICBDUllQVF9JTlZBTElEX0FSR30sCit9OworCisvKioKKyAgIENvbnZlcnQgYSB0Zm0gZXJyb3IgdG8gYSBMVEMgZXJyb3IgKFBvc3NpYmx5IHRoZSBtb3N0IHBvd2VyZnVsIGZ1bmN0aW9uIGV2ZXIhICBPaCB3YWl0Li4uIG5vKSAKKyAgIEBwYXJhbSBlcnIgICAgVGhlIGVycm9yIHRvIGNvbnZlcnQKKyAgIEByZXR1cm4gVGhlIGVxdWl2YWxlbnQgTFRDIGVycm9yIGNvZGUgb3IgQ1JZUFRfRVJST1IgaWYgbm9uZSBmb3VuZAorKi8KK3N0YXRpYyBpbnQgdGZtX3RvX2x0Y19lcnJvcihpbnQgZXJyKQoreworICAgaW50IHg7CisKKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YodGZtX3RvX2x0Y19jb2Rlcykvc2l6ZW9mKHRmbV90b19sdGNfY29kZXNbMF0pKTsgeCsrKSB7CisgICAgICAgaWYgKGVyciA9PSB0Zm1fdG9fbHRjX2NvZGVzW3hdLnRmbV9jb2RlKSB7IAorICAgICAgICAgIHJldHVybiB0Zm1fdG9fbHRjX2NvZGVzW3hdLmx0Y19jb2RlOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBDUllQVF9FUlJPUjsKK30KKworc3RhdGljIGludCBpbml0KHZvaWQgKiphKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworCisgICAqYSA9IFhDQUxMT0MoMSwgc2l6ZW9mKGZwX2ludCkpOworICAgaWYgKCphID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICBmcF9pbml0KCphKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIHZvaWQgZGVpbml0KHZvaWQgKmEpCit7CisgICBMVENfQVJHQ0hLVkQoYSAhPSBOVUxMKTsKKyAgIFhGUkVFKGEpOworfQorCitzdGF0aWMgaW50IG5lZyh2b2lkICphLCB2b2lkICpiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgZnBfbmVnKCgoZnBfaW50KilhKSwgKChmcF9pbnQqKWIpKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIGludCBjb3B5KHZvaWQgKmEsIHZvaWQgKmIpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBmcF9jb3B5KGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCitzdGF0aWMgaW50IGluaXRfY29weSh2b2lkICoqYSwgdm9pZCAqYikKK3sKKyAgIGlmIChpbml0KGEpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorICAgcmV0dXJuIGNvcHkoYiwgKmEpOworfQorCisvKiAtLS0tIHRyaXZpYWwgLS0tLSAqLworc3RhdGljIGludCBzZXRfaW50KHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIGZwX3NldChhLCBiKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2ludCh2b2lkICphKQoreworICAgZnBfaW50ICpBOworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgQSA9IGE7CisgICByZXR1cm4gQS0+dXNlZCA+IDAgPyBBLT5kcFswXSA6IDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9kaWdpdCh2b2lkICphLCBpbnQgbikKK3sKKyAgIGZwX2ludCAqQTsKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIEEgPSBhOworICAgcmV0dXJuIChuID49IEEtPnVzZWQgfHwgbiA8IDApID8gMCA6IEEtPmRwW25dOworfQorCitzdGF0aWMgaW50IGdldF9kaWdpdF9jb3VudCh2b2lkICphKQoreworICAgZnBfaW50ICpBOworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgQSA9IGE7CisgICByZXR1cm4gQS0+dXNlZDsKK30KKyAgIAorc3RhdGljIGludCBjb21wYXJlKHZvaWQgKmEsIHZvaWQgKmIpCit7CisgICBpbnQgcmV0OworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgcmV0ID0gZnBfY21wKGEsIGIpOworICAgc3dpdGNoIChyZXQpIHsKKyAgICAgIGNhc2UgRlBfTFQ6IHJldHVybiBMVENfTVBfTFQ7CisgICAgICBjYXNlIEZQX0VROiByZXR1cm4gTFRDX01QX0VROworICAgICAgY2FzZSBGUF9HVDogcmV0dXJuIExUQ19NUF9HVDsKKyAgIH0KKyAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhcmVfZCh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIpCit7CisgICBpbnQgcmV0OworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgcmV0ID0gZnBfY21wX2QoYSwgYik7CisgICBzd2l0Y2ggKHJldCkgeworICAgICAgY2FzZSBGUF9MVDogcmV0dXJuIExUQ19NUF9MVDsKKyAgICAgIGNhc2UgRlBfRVE6IHJldHVybiBMVENfTVBfRVE7CisgICAgICBjYXNlIEZQX0dUOiByZXR1cm4gTFRDX01QX0dUOworICAgfQorICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfYml0cyh2b2lkICphKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgcmV0dXJuIGZwX2NvdW50X2JpdHMoYSk7Cit9CisKK3N0YXRpYyBpbnQgY291bnRfbHNiX2JpdHModm9pZCAqYSkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIHJldHVybiBmcF9jbnRfbHNiKGEpOworfQorCitzdGF0aWMgaW50IHR3b2V4cHQodm9pZCAqYSwgaW50IG4pCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBmcF8yZXhwdChhLCBuKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyogLS0tLSBjb252ZXJzaW9ucyAtLS0tICovCisKKy8qIHJlYWQgYXNjaWkgc3RyaW5nICovCitzdGF0aWMgaW50IHJlYWRfcmFkaXgodm9pZCAqYSwgY29uc3QgY2hhciAqYiwgaW50IHJhZGl4KQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgcmV0dXJuIHRmbV90b19sdGNfZXJyb3IoZnBfcmVhZF9yYWRpeChhLCAoY2hhciAqKWIsIHJhZGl4KSk7Cit9CisKKy8qIHdyaXRlIG9uZSAqLworc3RhdGljIGludCB3cml0ZV9yYWRpeCh2b2lkICphLCBjaGFyICpiLCBpbnQgcmFkaXgpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICByZXR1cm4gdGZtX3RvX2x0Y19lcnJvcihmcF90b3JhZGl4KGEsIGIsIHJhZGl4KSk7Cit9CisKKy8qIGdldCBzaXplIGFzIHVuc2lnbmVkIGNoYXIgc3RyaW5nICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1bnNpZ25lZF9zaXplKHZvaWQgKmEpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICByZXR1cm4gZnBfdW5zaWduZWRfYmluX3NpemUoYSk7Cit9CisKKy8qIHN0b3JlICovCitzdGF0aWMgaW50IHVuc2lnbmVkX3dyaXRlKHZvaWQgKmEsIHVuc2lnbmVkIGNoYXIgKmIpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBmcF90b191bnNpZ25lZF9iaW4oYSwgYik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIHJlYWQgKi8KK3N0YXRpYyBpbnQgdW5zaWduZWRfcmVhZCh2b2lkICphLCB1bnNpZ25lZCBjaGFyICpiLCB1bnNpZ25lZCBsb25nIGxlbikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIGZwX3JlYWRfdW5zaWduZWRfYmluKGEsIGIsIGxlbik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGFkZCAqLworc3RhdGljIGludCBhZGQodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIGZwX2FkZChhLCBiLCBjKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKyAgCitzdGF0aWMgaW50IGFkZGkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgZnBfYWRkX2QoYSwgYiwgYyk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIHN1YiAqLworc3RhdGljIGludCBzdWIodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIGZwX3N1YihhLCBiLCBjKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIGludCBzdWJpKHZvaWQgKmEsIHVuc2lnbmVkIGxvbmcgYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIGZwX3N1Yl9kKGEsIGIsIGMpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBtdWwgKi8KK3N0YXRpYyBpbnQgbXVsKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBmcF9tdWwoYSwgYiwgYyk7IAorICAgcmV0dXJuIENSWVBUX09LOworfQorCitzdGF0aWMgaW50IG11bGkodm9pZCAqYSwgdW5zaWduZWQgbG9uZyBiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgZnBfbXVsX2QoYSwgYiwgYyk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIHNxciAqLworc3RhdGljIGludCBzcXIodm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIGZwX3NxcihhLCBiKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyogZGl2ICovCitzdGF0aWMgaW50IGRpdmlkZSh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjLCB2b2lkICpkKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgcmV0dXJuIHRmbV90b19sdGNfZXJyb3IoZnBfZGl2KGEsIGIsIGMsIGQpKTsKK30KKworc3RhdGljIGludCBkaXZfMih2b2lkICphLCB2b2lkICpiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgZnBfZGl2XzIoYSwgYik7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIG1vZGkgKi8KK3N0YXRpYyBpbnQgbW9kaSh2b2lkICphLCB1bnNpZ25lZCBsb25nIGIsIHVuc2lnbmVkIGxvbmcgKmMpCit7CisgICBmcF9kaWdpdCB0bXA7CisgICBpbnQgICAgICBlcnI7CisKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSB0Zm1fdG9fbHRjX2Vycm9yKGZwX21vZF9kKGEsIGIsICZ0bXApKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICAqYyA9IHRtcDsKKyAgIHJldHVybiBDUllQVF9PSzsKK30gIAorCisvKiBnY2QgKi8KK3N0YXRpYyBpbnQgZ2NkKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICBmcF9nY2QoYSwgYiwgYyk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIGxjbSAqLworc3RhdGljIGludCBsY20odm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIGZwX2xjbShhLCBiLCBjKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworc3RhdGljIGludCBtdWxtb2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZCAhPSBOVUxMKTsKKyAgIHJldHVybiB0Zm1fdG9fbHRjX2Vycm9yKGZwX211bG1vZChhLGIsYyxkKSk7Cit9CisKK3N0YXRpYyBpbnQgc3FybW9kKHZvaWQgKmEsIHZvaWQgKmIsIHZvaWQgKmMpCit7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGMgIT0gTlVMTCk7CisgICByZXR1cm4gdGZtX3RvX2x0Y19lcnJvcihmcF9zcXJtb2QoYSxiLGMpKTsKK30KKworLyogaW52bW9kICovCitzdGF0aWMgaW50IGludm1vZCh2b2lkICphLCB2b2lkICpiLCB2b2lkICpjKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjICE9IE5VTEwpOworICAgcmV0dXJuIHRmbV90b19sdGNfZXJyb3IoZnBfaW52bW9kKGEsIGIsIGMpKTsKK30KKworLyogc2V0dXAgKi8KK3N0YXRpYyBpbnQgbW9udGdvbWVyeV9zZXR1cCh2b2lkICphLCB2b2lkICoqYikKK3sKKyAgIGludCBlcnI7CisgICBMVENfQVJHQ0hLKGEgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGIgIT0gTlVMTCk7CisgICAqYiA9IFhDQUxMT0MoMSwgc2l6ZW9mKGZwX2RpZ2l0KSk7CisgICBpZiAoKmIgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKyAgIGlmICgoZXJyID0gdGZtX3RvX2x0Y19lcnJvcihmcF9tb250Z29tZXJ5X3NldHVwKGEsIChmcF9kaWdpdCAqKSpiKSkpICE9IENSWVBUX09LKSB7CisgICAgICBYRlJFRSgqYik7CisgICB9CisgICByZXR1cm4gZXJyOworfQorCisvKiBnZXQgbm9ybWFsaXphdGlvbiB2YWx1ZSAqLworc3RhdGljIGludCBtb250Z29tZXJ5X25vcm1hbGl6YXRpb24odm9pZCAqYSwgdm9pZCAqYikKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIGZwX21vbnRnb21lcnlfY2FsY19ub3JtYWxpemF0aW9uKGEsIGIpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiByZWR1Y2UgKi8KK3N0YXRpYyBpbnQgbW9udGdvbWVyeV9yZWR1Y2Uodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYykKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKGEsIGIsICooKGZwX2RpZ2l0ICopYykpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKiBjbGVhbiB1cCAqLworc3RhdGljIHZvaWQgbW9udGdvbWVyeV9kZWluaXQodm9pZCAqYSkKK3sKKyAgIFhGUkVFKGEpOworfQorCitzdGF0aWMgaW50IGV4cHRtb2Qodm9pZCAqYSwgdm9pZCAqYiwgdm9pZCAqYywgdm9pZCAqZCkKK3sKKyAgIExUQ19BUkdDSEsoYSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoYyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZCAhPSBOVUxMKTsKKyAgIHJldHVybiB0Zm1fdG9fbHRjX2Vycm9yKGZwX2V4cHRtb2QoYSxiLGMsZCkpOworfSAgIAorCitzdGF0aWMgaW50IGlzcHJpbWUodm9pZCAqYSwgaW50ICpiKQoreworICAgTFRDX0FSR0NISyhhICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhiICE9IE5VTEwpOworICAgKmIgPSAoZnBfaXNwcmltZShhKSA9PSBGUF9ZRVMpID8gTFRDX01QX1lFUyA6IExUQ19NUF9OTzsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2lmIGRlZmluZWQoTUVDQykgJiYgZGVmaW5lZChNRUNDX0FDQ0VMKQorCitzdGF0aWMgaW50IHRmbV9lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQoZWNjX3BvaW50ICpQLCBlY2NfcG9pbnQgKlIsIHZvaWQgKm1vZHVsdXMsIHZvaWQgKk1wKQoreworICAgZnBfaW50IHQxLCB0MjsKKyAgIGZwX2RpZ2l0IG1wOworCisgICBMVENfQVJHQ0hLKFAgICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKFIgICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG1vZHVsdXMgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKE1wICAgICAgIT0gTlVMTCk7CisKKyAgIG1wID0gKigoZnBfZGlnaXQqKU1wKTsKKworICAgZnBfaW5pdCgmdDEpOworICAgZnBfaW5pdCgmdDIpOworCisgICBpZiAoUCAhPSBSKSB7CisgICAgICBmcF9jb3B5KFAtPngsIFItPngpOworICAgICAgZnBfY29weShQLT55LCBSLT55KTsKKyAgICAgIGZwX2NvcHkoUC0+eiwgUi0+eik7CisgICB9CisKKyAgIC8qIHQxID0gWiAqIFogKi8KKyAgIGZwX3NxcihSLT56LCAmdDEpOworICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQxLCBtb2R1bHVzLCBtcCk7CisgICAvKiBaID0gWSAqIFogKi8KKyAgIGZwX211bChSLT56LCBSLT55LCBSLT56KTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKFItPnosIG1vZHVsdXMsIG1wKTsKKyAgIC8qIFogPSAyWiAqLworICAgZnBfYWRkKFItPnosIFItPnosIFItPnopOworICAgaWYgKGZwX2NtcChSLT56LCBtb2R1bHVzKSAhPSBGUF9MVCkgeworICAgICAgZnBfc3ViKFItPnosIG1vZHVsdXMsIFItPnopOworICAgfQorICAgCisgICAvKiAmdDIgPSBYIC0gVDEgKi8KKyAgIGZwX3N1YihSLT54LCAmdDEsICZ0Mik7CisgICBpZiAoZnBfY21wX2QoJnQyLCAwKSA9PSBGUF9MVCkgeworICAgICAgZnBfYWRkKCZ0MiwgbW9kdWx1cywgJnQyKTsKKyAgIH0KKyAgIC8qIFQxID0gWCArIFQxICovCisgICBmcF9hZGQoJnQxLCBSLT54LCAmdDEpOworICAgaWYgKGZwX2NtcCgmdDEsIG1vZHVsdXMpICE9IEZQX0xUKSB7CisgICAgICBmcF9zdWIoJnQxLCBtb2R1bHVzLCAmdDEpOworICAgfQorICAgLyogVDIgPSBUMSAqIFQyICovCisgICBmcF9tdWwoJnQxLCAmdDIsICZ0Mik7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmdDIsIG1vZHVsdXMsIG1wKTsKKyAgIC8qIFQxID0gMlQyICovCisgICBmcF9hZGQoJnQyLCAmdDIsICZ0MSk7CisgICBpZiAoZnBfY21wKCZ0MSwgbW9kdWx1cykgIT0gRlBfTFQpIHsKKyAgICAgIGZwX3N1YigmdDEsIG1vZHVsdXMsICZ0MSk7CisgICB9CisgICAvKiBUMSA9IFQxICsgVDIgKi8KKyAgIGZwX2FkZCgmdDEsICZ0MiwgJnQxKTsKKyAgIGlmIChmcF9jbXAoJnQxLCBtb2R1bHVzKSAhPSBGUF9MVCkgeworICAgICAgZnBfc3ViKCZ0MSwgbW9kdWx1cywgJnQxKTsKKyAgIH0KKworICAgLyogWSA9IDJZICovCisgICBmcF9hZGQoUi0+eSwgUi0+eSwgUi0+eSk7CisgICBpZiAoZnBfY21wKFItPnksIG1vZHVsdXMpICE9IEZQX0xUKSB7CisgICAgICBmcF9zdWIoUi0+eSwgbW9kdWx1cywgUi0+eSk7CisgICB9CisgICAvKiBZID0gWSAqIFkgKi8KKyAgIGZwX3NxcihSLT55LCBSLT55KTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKFItPnksIG1vZHVsdXMsIG1wKTsKKyAgIC8qIFQyID0gWSAqIFkgKi8KKyAgIGZwX3NxcihSLT55LCAmdDIpOworICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQyLCBtb2R1bHVzLCBtcCk7CisgICAvKiBUMiA9IFQyLzIgKi8KKyAgIGlmIChmcF9pc29kZCgmdDIpKSB7CisgICAgICBmcF9hZGQoJnQyLCBtb2R1bHVzLCAmdDIpOworICAgfQorICAgZnBfZGl2XzIoJnQyLCAmdDIpOworICAgLyogWSA9IFkgKiBYICovCisgICBmcF9tdWwoUi0+eSwgUi0+eCwgUi0+eSk7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZShSLT55LCBtb2R1bHVzLCBtcCk7CisKKyAgIC8qIFggID0gVDEgKiBUMSAqLworICAgZnBfc3FyKCZ0MSwgUi0+eCk7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZShSLT54LCBtb2R1bHVzLCBtcCk7CisgICAvKiBYID0gWCAtIFkgKi8KKyAgIGZwX3N1YihSLT54LCBSLT55LCBSLT54KTsKKyAgIGlmIChmcF9jbXBfZChSLT54LCAwKSA9PSBGUF9MVCkgeworICAgICAgZnBfYWRkKFItPngsIG1vZHVsdXMsIFItPngpOworICAgfQorICAgLyogWCA9IFggLSBZICovCisgICBmcF9zdWIoUi0+eCwgUi0+eSwgUi0+eCk7CisgICBpZiAoZnBfY21wX2QoUi0+eCwgMCkgPT0gRlBfTFQpIHsKKyAgICAgIGZwX2FkZChSLT54LCBtb2R1bHVzLCBSLT54KTsKKyAgIH0KKworICAgLyogWSA9IFkgLSBYICovICAgICAKKyAgIGZwX3N1YihSLT55LCBSLT54LCBSLT55KTsKKyAgIGlmIChmcF9jbXBfZChSLT55LCAwKSA9PSBGUF9MVCkgeworICAgICAgZnBfYWRkKFItPnksIG1vZHVsdXMsIFItPnkpOworICAgfQorICAgLyogWSA9IFkgKiBUMSAqLworICAgZnBfbXVsKFItPnksICZ0MSwgUi0+eSk7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZShSLT55LCBtb2R1bHVzLCBtcCk7CisgICAvKiBZID0gWSAtIFQyICovCisgICBmcF9zdWIoUi0+eSwgJnQyLCBSLT55KTsKKyAgIGlmIChmcF9jbXBfZChSLT55LCAwKSA9PSBGUF9MVCkgeworICAgICAgZnBfYWRkKFItPnksIG1vZHVsdXMsIFItPnkpOworICAgfQorIAorICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgIEFkZCB0d28gRUNDIHBvaW50cworICAgQHBhcmFtIFAgICAgICAgIFRoZSBwb2ludCB0byBhZGQKKyAgIEBwYXJhbSBRICAgICAgICBUaGUgcG9pbnQgdG8gYWRkCisgICBAcGFyYW0gUiAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBkb3VibGUKKyAgIEBwYXJhbSBtb2R1bHVzICBUaGUgbW9kdWx1cyBvZiB0aGUgZmllbGQgdGhlIEVDQyBjdXJ2ZSBpcyBpbgorICAgQHBhcmFtIG1wICAgICAgIFRoZSAiYiIgdmFsdWUgZnJvbSBtb250Z29tZXJ5X3NldHVwKCkKKyAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK3N0YXRpYyBpbnQgdGZtX2VjY19wcm9qZWN0aXZlX2FkZF9wb2ludChlY2NfcG9pbnQgKlAsIGVjY19wb2ludCAqUSwgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCB2b2lkICpNcCkKK3sKKyAgIGZwX2ludCAgdDEsIHQyLCB4LCB5LCB6OworICAgZnBfZGlnaXQgbXA7ICAKKyAgIAorICAgTFRDX0FSR0NISyhQICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhRICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhSICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhtb2R1bHVzICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhNcCAgICAgICE9IE5VTEwpOworCisgICBtcCA9ICooKGZwX2RpZ2l0KilNcCk7CisKKyAgIGZwX2luaXQoJnQxKTsKKyAgIGZwX2luaXQoJnQyKTsKKyAgIGZwX2luaXQoJngpOworICAgZnBfaW5pdCgmeSk7CisgICBmcF9pbml0KCZ6KTsKKworICAgLyogc2hvdWxkIHdlIGRibCBpbnN0ZWFkPyAqLworICAgZnBfc3ViKG1vZHVsdXMsIFEtPnksICZ0MSk7CisgICBpZiAoIChmcF9jbXAoUC0+eCwgUS0+eCkgPT0gRlBfRVEpICYmIAorICAgICAgICAoUS0+eiAhPSBOVUxMICYmIGZwX2NtcChQLT56LCBRLT56KSA9PSBGUF9FUSkgJiYKKyAgICAgICAgKGZwX2NtcChQLT55LCBRLT55KSA9PSBGUF9FUSB8fCBmcF9jbXAoUC0+eSwgJnQxKSA9PSBGUF9FUSkpIHsKKyAgICAgICAgcmV0dXJuIHRmbV9lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQoUCwgUiwgbW9kdWx1cywgTXApOworICAgfQorCisgICBmcF9jb3B5KFAtPngsICZ4KTsKKyAgIGZwX2NvcHkoUC0+eSwgJnkpOworICAgZnBfY29weShQLT56LCAmeik7CisKKyAgIC8qIGlmIFogaXMgb25lIHRoZW4gdGhlc2UgYXJlIG5vLW9wZXJhdGlvbnMgKi8KKyAgIGlmIChRLT56ICE9IE5VTEwpIHsKKyAgICAgIC8qIFQxID0gWicgKiBaJyAqLworICAgICAgZnBfc3FyKFEtPnosICZ0MSk7CisgICAgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmdDEsIG1vZHVsdXMsIG1wKTsKKyAgICAgIC8qIFggPSBYICogVDEgKi8KKyAgICAgIGZwX211bCgmdDEsICZ4LCAmeCk7CisgICAgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmeCwgbW9kdWx1cywgbXApOworICAgICAgLyogVDEgPSBaJyAqIFQxICovCisgICAgICBmcF9tdWwoUS0+eiwgJnQxLCAmdDEpOworICAgICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQxLCBtb2R1bHVzLCBtcCk7CisgICAgICAvKiBZID0gWSAqIFQxICovCisgICAgICBmcF9tdWwoJnQxLCAmeSwgJnkpOworICAgICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnksIG1vZHVsdXMsIG1wKTsKKyAgIH0KKworICAgLyogVDEgPSBaKlogKi8KKyAgIGZwX3NxcigmeiwgJnQxKTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKCZ0MSwgbW9kdWx1cywgbXApOworICAgLyogVDIgPSBYJyAqIFQxICovCisgICBmcF9tdWwoUS0+eCwgJnQxLCAmdDIpOworICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQyLCBtb2R1bHVzLCBtcCk7CisgICAvKiBUMSA9IFogKiBUMSAqLworICAgZnBfbXVsKCZ6LCAmdDEsICZ0MSk7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmdDEsIG1vZHVsdXMsIG1wKTsKKyAgIC8qIFQxID0gWScgKiBUMSAqLworICAgZnBfbXVsKFEtPnksICZ0MSwgJnQxKTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKCZ0MSwgbW9kdWx1cywgbXApOworCisgICAvKiBZID0gWSAtIFQxICovCisgICBmcF9zdWIoJnksICZ0MSwgJnkpOworICAgaWYgKGZwX2NtcF9kKCZ5LCAwKSA9PSBGUF9MVCkgeworICAgICAgZnBfYWRkKCZ5LCBtb2R1bHVzLCAmeSk7CisgICB9CisgICAvKiBUMSA9IDJUMSAqLworICAgZnBfYWRkKCZ0MSwgJnQxLCAmdDEpOworICAgaWYgKGZwX2NtcCgmdDEsIG1vZHVsdXMpICE9IEZQX0xUKSB7CisgICAgICBmcF9zdWIoJnQxLCBtb2R1bHVzLCAmdDEpOworICAgfQorICAgLyogVDEgPSBZICsgVDEgKi8KKyAgIGZwX2FkZCgmdDEsICZ5LCAmdDEpOworICAgaWYgKGZwX2NtcCgmdDEsIG1vZHVsdXMpICE9IEZQX0xUKSB7CisgICAgICBmcF9zdWIoJnQxLCBtb2R1bHVzLCAmdDEpOworICAgfQorICAgLyogWCA9IFggLSBUMiAqLworICAgZnBfc3ViKCZ4LCAmdDIsICZ4KTsKKyAgIGlmIChmcF9jbXBfZCgmeCwgMCkgPT0gRlBfTFQpIHsKKyAgICAgIGZwX2FkZCgmeCwgbW9kdWx1cywgJngpOworICAgfQorICAgLyogVDIgPSAyVDIgKi8KKyAgIGZwX2FkZCgmdDIsICZ0MiwgJnQyKTsKKyAgIGlmIChmcF9jbXAoJnQyLCBtb2R1bHVzKSAhPSBGUF9MVCkgeworICAgICAgZnBfc3ViKCZ0MiwgbW9kdWx1cywgJnQyKTsKKyAgIH0KKyAgIC8qIFQyID0gWCArIFQyICovCisgICBmcF9hZGQoJnQyLCAmeCwgJnQyKTsKKyAgIGlmIChmcF9jbXAoJnQyLCBtb2R1bHVzKSAhPSBGUF9MVCkgeworICAgICAgZnBfc3ViKCZ0MiwgbW9kdWx1cywgJnQyKTsKKyAgIH0KKworICAgLyogaWYgWicgIT0gMSAqLworICAgaWYgKFEtPnogIT0gTlVMTCkgeworICAgICAgLyogWiA9IFogKiBaJyAqLworICAgICAgZnBfbXVsKCZ6LCBRLT56LCAmeik7CisgICAgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmeiwgbW9kdWx1cywgbXApOworICAgfQorCisgICAvKiBaID0gWiAqIFggKi8KKyAgIGZwX211bCgmeiwgJngsICZ6KTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKCZ6LCBtb2R1bHVzLCBtcCk7CisKKyAgIC8qIFQxID0gVDEgKiBYICAqLworICAgZnBfbXVsKCZ0MSwgJngsICZ0MSk7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmdDEsIG1vZHVsdXMsIG1wKTsKKyAgIC8qIFggPSBYICogWCAqLworICAgZnBfc3FyKCZ4LCAmeCk7CisgICBmcF9tb250Z29tZXJ5X3JlZHVjZSgmeCwgbW9kdWx1cywgbXApOworICAgLyogVDIgPSBUMiAqIHggKi8KKyAgIGZwX211bCgmdDIsICZ4LCAmdDIpOworICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQyLCBtb2R1bHVzLCBtcCk7CisgICAvKiBUMSA9IFQxICogWCAgKi8KKyAgIGZwX211bCgmdDEsICZ4LCAmdDEpOworICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQxLCBtb2R1bHVzLCBtcCk7CisgCisgICAvKiBYID0gWSpZICovCisgICBmcF9zcXIoJnksICZ4KTsKKyAgIGZwX21vbnRnb21lcnlfcmVkdWNlKCZ4LCBtb2R1bHVzLCBtcCk7CisgICAvKiBYID0gWCAtIFQyICovCisgICBmcF9zdWIoJngsICZ0MiwgJngpOworICAgaWYgKGZwX2NtcF9kKCZ4LCAwKSA9PSBGUF9MVCkgeworICAgICAgZnBfYWRkKCZ4LCBtb2R1bHVzLCAmeCk7CisgICB9CisKKyAgIC8qIFQyID0gVDIgLSBYICovCisgICBmcF9zdWIoJnQyLCAmeCwgJnQyKTsKKyAgIGlmIChmcF9jbXBfZCgmdDIsIDApID09IEZQX0xUKSB7CisgICAgICBmcF9hZGQoJnQyLCBtb2R1bHVzLCAmdDIpOworICAgfSAKKyAgIC8qIFQyID0gVDIgLSBYICovCisgICBmcF9zdWIoJnQyLCAmeCwgJnQyKTsKKyAgIGlmIChmcF9jbXBfZCgmdDIsIDApID09IEZQX0xUKSB7CisgICAgICBmcF9hZGQoJnQyLCBtb2R1bHVzLCAmdDIpOworICAgfQorICAgLyogVDIgPSBUMiAqIFkgKi8KKyAgIGZwX211bCgmdDIsICZ5LCAmdDIpOworICAgZnBfbW9udGdvbWVyeV9yZWR1Y2UoJnQyLCBtb2R1bHVzLCBtcCk7CisgICAvKiBZID0gVDIgLSBUMSAqLworICAgZnBfc3ViKCZ0MiwgJnQxLCAmeSk7CisgICBpZiAoZnBfY21wX2QoJnksIDApID09IEZQX0xUKSB7CisgICAgICBmcF9hZGQoJnksIG1vZHVsdXMsICZ5KTsKKyAgIH0KKyAgIC8qIFkgPSBZLzIgKi8KKyAgIGlmIChmcF9pc29kZCgmeSkpIHsKKyAgICAgIGZwX2FkZCgmeSwgbW9kdWx1cywgJnkpOworICAgfQorICAgZnBfZGl2XzIoJnksICZ5KTsKKworICAgZnBfY29weSgmeCwgUi0+eCk7CisgICBmcF9jb3B5KCZ5LCBSLT55KTsKKyAgIGZwX2NvcHkoJnosIFItPnopOworICAgCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKworI2VuZGlmCisKK2NvbnN0IGx0Y19tYXRoX2Rlc2NyaXB0b3IgdGZtX2Rlc2MgPSB7CisKKyAgICJUb21zRmFzdE1hdGgiLAorICAgKGludClESUdJVF9CSVQsCisKKyAgICZpbml0LAorICAgJmluaXRfY29weSwKKyAgICZkZWluaXQsCisKKyAgICZuZWcsCisgICAmY29weSwKKworICAgJnNldF9pbnQsCisgICAmZ2V0X2ludCwKKyAgICZnZXRfZGlnaXQsCisgICAmZ2V0X2RpZ2l0X2NvdW50LAorICAgJmNvbXBhcmUsCisgICAmY29tcGFyZV9kLAorICAgJmNvdW50X2JpdHMsCisgICAmY291bnRfbHNiX2JpdHMsCisgICAmdHdvZXhwdCwKKworICAgJnJlYWRfcmFkaXgsCisgICAmd3JpdGVfcmFkaXgsCisgICAmdW5zaWduZWRfc2l6ZSwKKyAgICZ1bnNpZ25lZF93cml0ZSwKKyAgICZ1bnNpZ25lZF9yZWFkLAorCisgICAmYWRkLAorICAgJmFkZGksCisgICAmc3ViLAorICAgJnN1YmksCisgICAmbXVsLAorICAgJm11bGksCisgICAmc3FyLAorICAgJmRpdmlkZSwKKyAgICZkaXZfMiwKKyAgICZtb2RpLAorICAgJmdjZCwKKyAgICZsY20sCisKKyAgICZtdWxtb2QsCisgICAmc3FybW9kLAorICAgJmludm1vZCwKKworICAgJm1vbnRnb21lcnlfc2V0dXAsCisgICAmbW9udGdvbWVyeV9ub3JtYWxpemF0aW9uLAorICAgJm1vbnRnb21lcnlfcmVkdWNlLAorICAgJm1vbnRnb21lcnlfZGVpbml0LAorCisgICAmZXhwdG1vZCwKKyAgICZpc3ByaW1lLAorCisjaWZkZWYgTUVDQworI2lmZGVmIE1FQ0NfRlAKKyAgICZsdGNfZWNjX2ZwX211bG1vZCwKKyNlbHNlCisgICAmbHRjX2VjY19tdWxtb2QsCisjZW5kaWYgLyogTUVDQ19GUCAqLworI2lmZGVmIE1FQ0NfQUNDRUwKKyAgICZ0Zm1fZWNjX3Byb2plY3RpdmVfYWRkX3BvaW50LAorICAgJnRmbV9lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQsCisjZWxzZQorICAgJmx0Y19lY2NfcHJvamVjdGl2ZV9hZGRfcG9pbnQsCisgICAmbHRjX2VjY19wcm9qZWN0aXZlX2RibF9wb2ludCwKKyNlbmRpZiAvKiBNRUNDX0FDQ0VMICovCisgICAmbHRjX2VjY19tYXAsCisjaWZkZWYgTFRDX0VDQ19TSEFNSVIKKyNpZmRlZiBNRUNDX0ZQCisgICAmbHRjX2VjY19mcF9tdWwyYWRkLAorI2Vsc2UKKyAgICZsdGNfZWNjX211bDJhZGQsCisjZW5kaWYgLyogTUVDQ19GUCAqLworI2Vsc2UKKyAgIE5VTEwsCisjZW5kaWYgLyogTFRDX0VDQ19TSEFNSVIgKi8KKyNlbHNlCisgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAorI2VuZGlmIC8qIE1FQ0MgKi8KKworI2lmZGVmIE1SU0EKKyAgICZyc2FfbWFrZV9rZXksCisgICAmcnNhX2V4cHRtb2QsCisjZWxzZQorICAgTlVMTCwgTlVMTAorI2VuZGlmCisgICAKK307CisKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tYXRoL3RmbV9kZXNjLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMjYgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDMgMDA6Mzk6NTYgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9kZWNvZGUuYyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZGVjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEzOWJhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZGVjb2RlLmMKQEAgLTAsMCArMSwxMDQgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGJhc2U2NF9kZWNvZGUuYworICBDb21wbGlhbnQgYmFzZTY0IGNvZGUgZG9uYXRlZCBieSBXYXluZSBTY290dCAod3Njb3R0QGJpdG1vdmVyLmNvbSkKKyovCisKKworI2lmZGVmIEJBU0U2NAorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtYXBbMjU2XSA9IHsKKzI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKzI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgIDYyLCAyNTUsIDI1NSwgMjU1LCAgNjMsCisgNTIsICA1MywgIDU0LCAgNTUsICA1NiwgIDU3LCAgNTgsICA1OSwgIDYwLCAgNjEsIDI1NSwgMjU1LAorMjU1LCAyNTQsIDI1NSwgMjU1LCAyNTUsICAgMCwgICAxLCAgIDIsICAgMywgICA0LCAgIDUsICAgNiwKKyAgNywgICA4LCAgIDksICAxMCwgIDExLCAgMTIsICAxMywgIDE0LCAgMTUsICAxNiwgIDE3LCAgMTgsCisgMTksICAyMCwgIDIxLCAgMjIsICAyMywgIDI0LCAgMjUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorMjU1LCAgMjYsICAyNywgIDI4LCAgMjksICAzMCwgIDMxLCAgMzIsICAzMywgIDM0LCAgMzUsICAzNiwKKyAzNywgIDM4LCAgMzksICA0MCwgIDQxLCAgNDIsICA0MywgIDQ0LCAgNDUsICA0NiwgIDQ3LCAgNDgsCisgNDksICA1MCwgIDUxLCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKzI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKzI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKzI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LAorMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwKKzI1NSwgMjU1LCAyNTUsIDI1NSB9OworCisvKioKKyAgIGJhc2U2NCBkZWNvZGUgYSBibG9jayBvZiBtZW1vcnkKKyAgIEBwYXJhbSBpbiAgICAgICBUaGUgYmFzZTY0IGRhdGEgdG8gZGVjb2RlCisgICBAcGFyYW0gaW5sZW4gICAgVGhlIGxlbmd0aCBvZiB0aGUgYmFzZTY0IGRhdGEKKyAgIEBwYXJhbSBvdXQgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGJpbmFyeSBkZWNvZGVkIGRhdGEKKyAgIEBwYXJhbSBvdXRsZW4gICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBkZWNvZGVkIGRhdGEKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBiYXNlNjRfZGVjb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgdW5zaWduZWQgbG9uZyBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgdCwgeCwgeSwgejsKKyAgIHVuc2lnbmVkIGNoYXIgYzsKKyAgIGludCAgICAgICAgICAgZzsKKworICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworCisgICBnID0gMzsKKyAgIGZvciAoeCA9IHkgPSB6ID0gdCA9IDA7IHggPCBpbmxlbjsgeCsrKSB7CisgICAgICAgYyA9IG1hcFtpblt4XSYweEZGXTsKKyAgICAgICBpZiAoYyA9PSAyNTUpIGNvbnRpbnVlOworICAgICAgIC8qIHRoZSBmaW5hbCA9IHN5bWJvbHMgYXJlIHJlYWQgYW5kIHVzZWQgdG8gdHJpbSB0aGUgcmVtYWluaW5nIGJ5dGVzICovCisgICAgICAgaWYgKGMgPT0gMjU0KSB7IAorICAgICAgICAgIGMgPSAwOyAKKyAgICAgICAgICAvKiBwcmV2ZW50IGcgPCAwIHdoaWNoIHdvdWxkIHBvdGVudGlhbGx5IGFsbG93IGFuIG92ZXJmbG93IGxhdGVyICovCisgICAgICAgICAgaWYgKC0tZyA8IDApIHsKKyAgICAgICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICAgICAgfQorICAgICAgIH0gZWxzZSBpZiAoZyAhPSAzKSB7CisgICAgICAgICAgLyogd2Ugb25seSBhbGxvdyA9IHRvIGJlIGF0IHRoZSBlbmQgKi8KKyAgICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICAgfQorCisgICAgICAgdCA9ICh0PDw2KXxjOworCisgICAgICAgaWYgKCsreSA9PSA0KSB7CisgICAgICAgICAgaWYgKHogKyBnID4gKm91dGxlbikgeyAKKyAgICAgICAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOyAKKyAgICAgICAgICB9CisgICAgICAgICAgb3V0W3orK10gPSAodW5zaWduZWQgY2hhcikoKHQ+PjE2KSYyNTUpOworICAgICAgICAgIGlmIChnID4gMSkgb3V0W3orK10gPSAodW5zaWduZWQgY2hhcikoKHQ+PjgpJjI1NSk7CisgICAgICAgICAgaWYgKGcgPiAyKSBvdXRbeisrXSA9ICh1bnNpZ25lZCBjaGFyKSh0JjI1NSk7CisgICAgICAgICAgeSA9IHQgPSAwOworICAgICAgIH0KKyAgIH0KKyAgIGlmICh5ICE9IDApIHsKKyAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICB9CisgICAqb3V0bGVuID0gejsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9kZWNvZGUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9taXNjL2Jhc2U2NC9iYXNlNjRfZW5jb2RlLmMgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2VuY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNGRmMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9iYXNlNjQvYmFzZTY0X2VuY29kZS5jCkBAIC0wLDAgKzEsODEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGJhc2U2NF9lbmNvZGUuYworICBDb21wbGlhbnQgYmFzZTY0IGVuY29kZXIgZG9uYXRlZCBieSBXYXluZSBTY290dCAod3Njb3R0QGJpdG1vdmVyLmNvbSkKKyovCisKKworI2lmZGVmIEJBU0U2NAorCitzdGF0aWMgY29uc3QgY2hhciAqY29kZXMgPSAKKyJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKKworLyoqCisgICBiYXNlNjQgRW5jb2RlIGEgYnVmZmVyIChOVUwgdGVybWluYXRlZCkKKyAgIEBwYXJhbSBpbiAgICAgIFRoZSBpbnB1dCBidWZmZXIgdG8gZW5jb2RlCisgICBAcGFyYW0gaW5sZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIKKyAgIEBwYXJhbSBvdXQgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgYmFzZTY0IGVuY29kZWQgZGF0YQorICAgQHBhcmFtIG91dGxlbiAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGJhc2U2NF9lbmNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgdW5zaWduZWQgbG9uZyBpLCBsZW4yLCBsZXZlbjsKKyAgIHVuc2lnbmVkIGNoYXIgKnA7CisKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgLyogdmFsaWQgb3V0cHV0IHNpemUgPyAqLworICAgbGVuMiA9IDQgKiAoKGlubGVuICsgMikgLyAzKTsKKyAgIGlmICgqb3V0bGVuIDwgbGVuMiArIDEpIHsKKyAgICAgICpvdXRsZW4gPSBsZW4yICsgMTsKKyAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisgICBwID0gb3V0OworICAgbGV2ZW4gPSAzKihpbmxlbiAvIDMpOworICAgZm9yIChpID0gMDsgaSA8IGxldmVuOyBpICs9IDMpIHsKKyAgICAgICAqcCsrID0gY29kZXNbKGluWzBdID4+IDIpICYgMHgzRl07CisgICAgICAgKnArKyA9IGNvZGVzWygoKGluWzBdICYgMykgPDwgNCkgKyAoaW5bMV0gPj4gNCkpICYgMHgzRl07CisgICAgICAgKnArKyA9IGNvZGVzWygoKGluWzFdICYgMHhmKSA8PCAyKSArIChpblsyXSA+PiA2KSkgJiAweDNGXTsKKyAgICAgICAqcCsrID0gY29kZXNbaW5bMl0gJiAweDNGXTsKKyAgICAgICBpbiArPSAzOworICAgfQorICAgLyogUGFkIGl0IGlmIG5lY2Vzc2FyeS4uLiAgKi8KKyAgIGlmIChpIDwgaW5sZW4pIHsKKyAgICAgICB1bnNpZ25lZCBhID0gaW5bMF07CisgICAgICAgdW5zaWduZWQgYiA9IChpKzEgPCBpbmxlbikgPyBpblsxXSA6IDA7CisKKyAgICAgICAqcCsrID0gY29kZXNbKGEgPj4gMikgJiAweDNGXTsKKyAgICAgICAqcCsrID0gY29kZXNbKCgoYSAmIDMpIDw8IDQpICsgKGIgPj4gNCkpICYgMHgzRl07CisgICAgICAgKnArKyA9IChpKzEgPCBpbmxlbikgPyBjb2Rlc1soKChiICYgMHhmKSA8PCAyKSkgJiAweDNGXSA6ICc9JzsKKyAgICAgICAqcCsrID0gJz0nOworICAgfQorCisgICAvKiBhcHBlbmQgYSBOVUxMIGJ5dGUgKi8KKyAgICpwID0gJ1wwJzsKKworICAgLyogcmV0dXJuIG9rICovCisgICAqb3V0bGVuID0gcCAtIG91dDsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvYmFzZTY0L2Jhc2U2NF9lbmNvZGUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIxOjUzOjQxICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9taXNjL2J1cm5fc3RhY2suYyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2J1cm5fc3RhY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmVlZTkyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvYnVybl9zdGFjay5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBidXJuX3N0YWNrLmMKKyAgIEJ1cm4gc3RhY2ssIFRvbSBTdCBEZW5pcworKi8KKworLyoqCisgICBCdXJuIHNvbWUgc3RhY2sgbWVtb3J5CisgICBAcGFyYW0gbGVuIGFtb3VudCBvZiBzdGFjayB0byBidXJuIGluIGJ5dGVzCisqLwordm9pZCBidXJuX3N0YWNrKHVuc2lnbmVkIGxvbmcgbGVuKQoreworICAgdW5zaWduZWQgY2hhciBidWZbMzJdOworICAgemVyb21lbShidWYsIHNpemVvZihidWYpKTsKKyAgIGlmIChsZW4gPiAodW5zaWduZWQgbG9uZylzaXplb2YoYnVmKSkKKyAgICAgIGJ1cm5fc3RhY2sobGVuIC0gc2l6ZW9mKGJ1ZikpOworfQorCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvYnVybl9zdGFjay5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHQuYyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODYwMzk0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0LmMKQEAgLTAsMCArMSwzNjYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGNyeXB0LmMKKyAgQnVpbGQgc3RyaW5ncywgVG9tIFN0IERlbmlzCisqLyAgCisKKy8qCitjb25zdCBjaGFyICpjcnlwdF9idWlsZF9zZXR0aW5ncyA9CisgICAiTGliVG9tQ3J5cHQgIiBTQ1JZUFQgIiAoVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSlcbiIKKyAgICJMaWJUb21DcnlwdCBpcyBwdWJsaWMgZG9tYWluIHNvZnR3YXJlLlxuIgorICAgIkJ1aWx0IG9uICIgX19EQVRFX18gIiBhdCAiIF9fVElNRV9fICJcblxuXG4iCisgICAiRW5kaWFuZXNzOiAiCisjaWYgZGVmaW5lZChFTkRJQU5fTkVVVFJBTCkKKyAgICJuZXV0cmFsXG4iCisjZWxpZiBkZWZpbmVkKEVORElBTl9MSVRUTEUpCisgICAibGl0dGxlIgorICAgI2lmIGRlZmluZWQoRU5ESUFOXzMyQklUV09SRCkKKyAgICIgKDMyLWJpdCB3b3JkcylcbiIKKyAgICNlbHNlCisgICAiICg2NC1iaXQgd29yZHMpXG4iCisgICAjZW5kaWYKKyNlbGlmIGRlZmluZWQoRU5ESUFOX0JJRykKKyAgICJiaWciCisgICAjaWYgZGVmaW5lZChFTkRJQU5fMzJCSVRXT1JEKQorICAgIiAoMzItYml0IHdvcmRzKVxuIgorICAgI2Vsc2UKKyAgICIgKDY0LWJpdCB3b3JkcylcbiIKKyAgICNlbmRpZgorI2VuZGlmCisgICAiQ2xlYW4gc3RhY2s6ICIKKyNpZiBkZWZpbmVkKExUQ19DTEVBTl9TVEFDSykKKyAgICJlbmFibGVkXG4iCisjZWxzZQorICAgImRpc2FibGVkXG4iCisjZW5kaWYKKyAgICJDaXBoZXJzIGJ1aWx0LWluOlxuIgorI2lmIGRlZmluZWQoQkxPV0ZJU0gpCisgICAiICAgQmxvd2Zpc2hcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoUkMyKQorICAgIiAgIFJDMlxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChSQzUpCisgICAiICAgUkM1XG4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKFJDNikKKyAgICIgICBSQzZcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoU0FGRVJQKQorICAgIiAgIFNhZmVyK1xuIgorI2VuZGlmCisjaWYgZGVmaW5lZChTQUZFUikKKyAgICIgICBTYWZlclxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChSSUpOREFFTCkKKyAgICIgICBSaWpuZGFlbFxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChYVEVBKQorICAgIiAgIFhURUFcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoVFdPRklTSCkKKyAgICIgICBUd29maXNoICIKKyAgICNpZiBkZWZpbmVkKFRXT0ZJU0hfU01BTEwpICYmIGRlZmluZWQoVFdPRklTSF9UQUJMRVMpICYmIGRlZmluZWQoVFdPRklTSF9BTExfVEFCTEVTKQorICAgICAgICIoc21hbGwsIHRhYmxlcywgYWxsX3RhYmxlcylcbiIKKyAgICNlbGlmIGRlZmluZWQoVFdPRklTSF9TTUFMTCkgJiYgZGVmaW5lZChUV09GSVNIX1RBQkxFUykKKyAgICAgICAiKHNtYWxsLCB0YWJsZXMpXG4iCisgICAjZWxpZiBkZWZpbmVkKFRXT0ZJU0hfU01BTEwpICYmIGRlZmluZWQoVFdPRklTSF9BTExfVEFCTEVTKQorICAgICAgICIoc21hbGwsIGFsbF90YWJsZXMpXG4iCisgICAjZWxpZiBkZWZpbmVkKFRXT0ZJU0hfVEFCTEVTKSAmJiBkZWZpbmVkKFRXT0ZJU0hfQUxMX1RBQkxFUykKKyAgICAgICAiKHRhYmxlcywgYWxsX3RhYmxlcylcbiIKKyAgICNlbGlmIGRlZmluZWQoVFdPRklTSF9TTUFMTCkKKyAgICAgICAiKHNtYWxsKVxuIgorICAgI2VsaWYgZGVmaW5lZChUV09GSVNIX1RBQkxFUykKKyAgICAgICAiKHRhYmxlcylcbiIKKyAgICNlbGlmIGRlZmluZWQoVFdPRklTSF9BTExfVEFCTEVTKQorICAgICAgICIoYWxsX3RhYmxlcylcbiIKKyAgICNlbHNlCisgICAgICAgIlxuIgorICAgI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKERFUykKKyAgICIgICBERVNcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoQ0FTVDUpCisgICAiICAgQ0FTVDVcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoTk9FS0VPTikKKyAgICIgICBOb2VrZW9uXG4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNLSVBKQUNLKQorICAgIiAgIFNraXBqYWNrXG4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKEtIQVpBRCkKKyAgICIgICBLaGF6YWRcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoQU5VQklTKQorICAgIiAgIEFudWJpcyAiCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFOVUJJU19UV0VBSykKKyAgICIgKHR3ZWFrZWQpIgorI2VuZGlmCisgICAiXG4iCisjaWYgZGVmaW5lZChLU0VFRCkKKyAgICIgICBLU0VFRFxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChMVENfS0FTVU1JKQorICAgIiAgIEtBU1VNSVxuIgorI2VuZGlmCisKKyAgICAiXG5IYXNoZXMgYnVpbHQtaW46XG4iCisjaWYgZGVmaW5lZChTSEE1MTIpCisgICAiICAgU0hBLTUxMlxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChTSEEzODQpCisgICAiICAgU0hBLTM4NFxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChTSEEyNTYpCisgICAiICAgU0hBLTI1NlxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChTSEEyMjQpCisgICAiICAgU0hBLTIyNFxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChUSUdFUikKKyAgICIgICBUSUdFUlxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChTSEExKQorICAgIiAgIFNIQTFcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoTUQ1KQorICAgIiAgIE1ENVxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChNRDQpCisgICAiICAgTUQ0XG4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1EMikKKyAgICIgICBNRDJcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoUklQRU1EMTI4KQorICAgIiAgIFJJUEVNRDEyOFxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChSSVBFTUQxNjApCisgICAiICAgUklQRU1EMTYwXG4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKFdISVJMUE9PTCkKKyAgICIgICBXSElSTFBPT0xcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoQ0hDX0hBU0gpCisgICAiICAgQ0hDX0hBU0ggXG4iCisjZW5kaWYKKworICAgICJcbkJsb2NrIENoYWluaW5nIE1vZGVzOlxuIgorI2lmIGRlZmluZWQoTFRDX0NGQl9NT0RFKQorICAgICIgICBDRkJcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX09GQl9NT0RFKQorICAgICIgICBPRkJcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX0VDQl9NT0RFKQorICAgICIgICBFQ0JcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX0NCQ19NT0RFKQorICAgICIgICBDQkNcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX0NUUl9NT0RFKQorICAgICIgICBDVFIgIgorI2VuZGlmCisjaWYgZGVmaW5lZChMVENfQ1RSX09MRCkKKyAgICAiIChDVFJfT0xEKSAiCisjZW5kaWYKKyAgICAiXG4iCisjaWYgZGVmaW5lZChMUldfTU9ERSkKKyAgICAiICAgTFJXX01PREUiCisjaWYgZGVmaW5lZChMUldfVEFCTEVTKQorICAgICIgKExSV19UQUJMRVMpICIKKyNlbmRpZgorICAgICJcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX0Y4X01PREUpCisgICAgIiAgIEY4IE1PREVcbiIKKyNlbmRpZiAgICAKKworICAgICJcbk1BQ3M6XG4iCisjaWYgZGVmaW5lZChMVENfSE1BQykKKyAgICAiICAgSE1BQ1xuIgorI2VuZGlmCisjaWYgZGVmaW5lZChMVENfT01BQykKKyAgICAiICAgT01BQ1xuIgorI2VuZGlmCisjaWYgZGVmaW5lZChMVENfUE1BQykKKyAgICAiICAgUE1BQ1xuIgorI2VuZGlmCisjaWYgZGVmaW5lZChQRUxJQ0FOKQorICAgICIgICBQRUxJQ0FOXG4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKExUQ19YQ0JDKQorICAgICIgICBYQ0JDLU1BQ1xuIgorI2VuZGlmCisjaWYgZGVmaW5lZChMVENfRjlfTU9ERSkKKyAgICAiICAgRjktTUFDXG4iCisjZW5kaWYKKworICAgICJcbkVOQyArIEFVVEggbW9kZXM6XG4iCisjaWYgZGVmaW5lZChFQVhfTU9ERSkKKyAgICAiICAgRUFYX01PREVcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoT0NCX01PREUpCisgICAgIiAgIE9DQl9NT0RFXG4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKENDTV9NT0RFKQorICAgICIgICBDQ01fTU9ERVxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChHQ01fTU9ERSkKKyAgICAiICAgR0NNX01PREUgIgorI2VuZGlmCisjaWYgZGVmaW5lZChHQ01fVEFCTEVTKQorICAgICIgKEdDTV9UQUJMRVMpICIKKyNlbmRpZgorICAgIlxuIgorCisgICAgIlxuUFJORzpcbiIKKyNpZiBkZWZpbmVkKFlBUlJPVykKKyAgICAiICAgWWFycm93XG4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNQUk5HKQorICAgICIgICBTUFJOR1xuIgorI2VuZGlmCisjaWYgZGVmaW5lZChSQzQpCisgICAgIiAgIFJDNFxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChGT1JUVU5BKQorICAgICIgICBGb3J0dW5hXG4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNPQkVSMTI4KQorICAgICIgICBTT0JFUjEyOFxuIgorI2VuZGlmCisKKyAgICAiXG5QSyBBbGdzOlxuIgorI2lmIGRlZmluZWQoTVJTQSkKKyAgICAiICAgUlNBIFxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChNRUNDKQorICAgICIgICBFQ0NcbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoTURTQSkKKyAgICAiICAgRFNBXG4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKE1LQVQpCisgICAgIiAgIEthdGphXG4iCisjZW5kaWYgICAgCisKKyAgICAiXG5Db21waWxlcjpcbiIKKyNpZiBkZWZpbmVkKFdJTjMyKQorICAgICIgICBXSU4zMiBwbGF0Zm9ybSBkZXRlY3RlZC5cbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19DWUdXSU5fXykKKyAgICAiICAgQ1lHV0lOIERldGVjdGVkLlxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0RKR1BQX18pCisgICAgIiAgIERKR1BQIERldGVjdGVkLlxuIgorI2VuZGlmCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAiICAgTVNWQyBjb21waWxlciBkZXRlY3RlZC5cbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19HTlVDX18pCisgICAgIiAgIEdDQyBjb21waWxlciBkZXRlY3RlZC5cbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5URUxfQ0MpCisgICAgIiAgIEludGVsIEMgQ29tcGlsZXIgZGV0ZWN0ZWQuXG4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pCisgICAgIiAgIHg4Ni02NCBkZXRlY3RlZC5cbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX1BQQzMyKQorICAgICIgICBMVENfUFBDMzIgZGVmaW5lZCBcbiIKKyNlbmRpZiAgICAKKworICAgICJcblZhcmlvdXMgb3RoZXJzOiAiCisjaWYgZGVmaW5lZChCQVNFNjQpCisgICAgIiBCQVNFNjQgIgorI2VuZGlmCisjaWYgZGVmaW5lZChNUEkpCisgICAgIiBNUEkgIgorI2VuZGlmCisjaWYgZGVmaW5lZChUUllfVU5SQU5ET01fRklSU1QpCisgICAgIiBUUllfVU5SQU5ET01fRklSU1QgIgorI2VuZGlmCisjaWYgZGVmaW5lZChMVENfVEVTVCkKKyAgICAiIExUQ19URVNUICIKKyNlbmRpZgorI2lmIGRlZmluZWQoUEtDU18xKQorICAgICIgUEtDUyMxICIKKyNlbmRpZgorI2lmIGRlZmluZWQoUEtDU181KQorICAgICIgUEtDUyM1ICIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX1NNQUxMX0NPREUpCisgICAgIiBMVENfU01BTExfQ09ERSAiCisjZW5kaWYKKyNpZiBkZWZpbmVkKExUQ19OT19GSUxFKQorICAgICIgTFRDX05PX0ZJTEUgIgorI2VuZGlmCisjaWYgZGVmaW5lZChMVENfREVSKQorICAgICIgTFRDX0RFUiAiCisjZW5kaWYKKyNpZiBkZWZpbmVkKExUQ19GQVNUKQorICAgICIgTFRDX0ZBU1QgIgorI2VuZGlmCisjaWYgZGVmaW5lZChMVENfTk9fRkFTVCkKKyAgICAiIExUQ19OT19GQVNUICIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX05PX0JTV0FQKQorICAgICIgTFRDX05PX0JTV0FQICIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX05PX0FTTSkKKyAgICAiIExUQ19OT19BU00gIgorI2VuZGlmCisjaWYgZGVmaW5lZChMVENfTk9fVEVTVCkKKyAgICAiIExUQ19OT19URVNUICIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX05PX1RBQkxFUykKKyAgICAiIExUQ19OT19UQUJMRVMgIgorI2VuZGlmCisjaWYgZGVmaW5lZChMVENfUFRIUkVBRCkKKyAgICAiIExUQ19QVEhSRUFEICIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRNX0RFU0MpCisgICAgIiBMVE1fREVTQyAiCisjZW5kaWYKKyNpZiBkZWZpbmVkKFRGTV9ERVNDKQorICAgICIgVEZNX0RFU0MgIgorI2VuZGlmCisjaWYgZGVmaW5lZChNRUNDX0FDQ0VMKQorICAgICIgTUVDQ19BQ0NFTCAiCisjZW5kaWYKKyNpZiBkZWZpbmVkKEdNUF9ERVNDKQorICAgICIgR01QX0RFU0MgIgorI2VuZGlmCisjaWYgZGVmaW5lZChMVENfRUFTWSkKKyAgICAiIChlYXN5KSAiCisjZW5kaWYgICAgCisjaWYgZGVmaW5lZChNRUNDX0ZQKQorICAgIiBNRUNDX0ZQICIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFRDX0VDQ19TSEFNSVIpCisgICAiIExUQ19FQ0NfU0hBTUlSICIKKyNlbmRpZgorICAgICJcbiIKKyAgICAiXG5cblxuIgorICAgIDsKKwkqLworCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMjcgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDMgMDM6NTA6NDUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfYXJnY2hrLmMgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9hcmdjaGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjY3NWVmCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfYXJnY2hrLmMKQEAgLTAsMCArMSwzMCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisvKioKKyAgQGZpbGUgY3J5cHRfYXJnY2hrLmMKKyAgUGVyZm9ybSBhcmd1bWVudCBjaGVja2luZywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZiAoQVJHVFlQRSA9PSAwKQordm9pZCBjcnlwdF9hcmdjaGsoY2hhciAqdiwgY2hhciAqcywgaW50IGQpCit7CisgZnByaW50ZihzdGRlcnIsICJMVENfQVJHQ0hLICclcycgZmFpbHVyZSBvbiBsaW5lICVkIG9mIGZpbGUgJXNcbiIsCisgICAgICAgICB2LCBkLCBzKTsKKyAodm9pZClyYWlzZShTSUdBQlJUKTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9hcmdjaGsuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9kZXNjcmlwdG9yLmMgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfZGVzY3JpcHRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MGMxNDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfZGVzY3JpcHRvci5jCkBAIC0wLDAgKzEsMjcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGNyeXB0X2NpcGhlcl9kZXNjcmlwdG9yLmMKKyAgU3RvcmVzIHRoZSBjaXBoZXIgZGVzY3JpcHRvciB0YWJsZSwgVG9tIFN0IERlbmlzCisqLworCitzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yIGNpcGhlcl9kZXNjcmlwdG9yW1RBQl9TSVpFXSA9IHsKK3sgTlVMTCwgMCwgMCwgMCwgMCwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCB9CisgfTsKKworTFRDX01VVEVYX0dMT0JBTChsdGNfY2lwaGVyX211dGV4KQorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9kZXNjcmlwdG9yLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTIgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDggMjM6MDE6MDYgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfY2lwaGVyX2lzX3ZhbGlkLmMgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9jaXBoZXJfaXNfdmFsaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjgyMDJiCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfY2lwaGVyX2lzX3ZhbGlkLmMKQEAgLTAsMCArMSwzNiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgY3J5cHRfY2lwaGVyX2lzX3ZhbGlkLmMKKyAgRGV0ZXJtaW5lIGlmIGNpcGhlciBpcyB2YWxpZCwgVG9tIFN0IERlbmlzCisqLworCisvKgorICAgVGVzdCBpZiBhIGNpcGhlciBpbmRleCBpcyB2YWxpZAorICAgQHBhcmFtIGlkeCAgIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIHRvIHNlYXJjaCBmb3IKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgdmFsaWQKKyovCitpbnQgY2lwaGVyX2lzX3ZhbGlkKGludCBpZHgpCit7CisgICBMVENfTVVURVhfTE9DSygmbHRjX2NpcGhlcl9tdXRleCk7CisgICBpZiAoaWR4IDwgMCB8fCBpZHggPj0gVEFCX1NJWkUgfHwgY2lwaGVyX2Rlc2NyaXB0b3JbaWR4XS5uYW1lID09IE5VTEwpIHsKKyAgICAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19jaXBoZXJfbXV0ZXgpOworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQ0lQSEVSOworICAgfQorICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2NpcGhlcl9tdXRleCk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2NpcGhlcl9pc192YWxpZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXIuYyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjNTllYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyLmMKQEAgLTAsMCArMSw0MSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgY3J5cHRfZmluZF9jaXBoZXIuYworICBGaW5kIGEgY2lwaGVyIGluIHRoZSBkZXNjcmlwdG9yIHRhYmxlcywgVG9tIFN0IERlbmlzCisqLworCisvKioKKyAgIEZpbmQgYSByZWdpc3RlcmVkIGNpcGhlciBieSBuYW1lCisgICBAcGFyYW0gbmFtZSAgIFRoZSBuYW1lIG9mIHRoZSBjaXBoZXIgdG8gbG9vayBmb3IKKyAgIEByZXR1cm4gPj0gMCBpZiBmb3VuZCwgLTEgaWYgbm90IHByZXNlbnQKKyovCitpbnQgZmluZF9jaXBoZXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgIGludCB4OworICAgTFRDX0FSR0NISyhuYW1lICE9IE5VTEwpOworICAgTFRDX01VVEVYX0xPQ0soJmx0Y19jaXBoZXJfbXV0ZXgpOworICAgZm9yICh4ID0gMDsgeCA8IFRBQl9TSVpFOyB4KyspIHsKKyAgICAgICBpZiAoY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMICYmICFYU1RSQ01QKGNpcGhlcl9kZXNjcmlwdG9yW3hdLm5hbWUsIG5hbWUpKSB7CisgICAgICAgICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2NpcGhlcl9tdXRleCk7CisgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgfQorICAgfQorICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2NpcGhlcl9tdXRleCk7CisgICByZXR1cm4gLTE7Cit9CisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI5IDIzOjQzOjU3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2FueS5jIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfYW55LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzZWRlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2FueS5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGNyeXB0X2ZpbmRfY2lwaGVyX2FueS5jCisgIEZpbmQgYSBjaXBoZXIgaW4gdGhlIGRlc2NyaXB0b3IgdGFibGVzLCBUb20gU3QgRGVuaXMKKyovCisKKy8qKgorICAgRmluZCBhIGNpcGhlciBmbGV4aWJseS4gIEZpcnN0IGJ5IG5hbWUgdGhlbiBpZiBub3QgcHJlc2VudCBieSBibG9jayBhbmQga2V5IHNpemUgCisgICBAcGFyYW0gbmFtZSAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGNpcGhlciBkZXNpcmVkCisgICBAcGFyYW0gYmxvY2tsZW4gICAgVGhlIG1pbmltdW0gbGVuZ3RoIG9mIHRoZSBibG9jayBjaXBoZXIgZGVzaXJlZCAob2N0ZXRzKQorICAgQHBhcmFtIGtleWxlbiAgICAgIFRoZSBtaW5pbXVtIGxlbmd0aCBvZiB0aGUga2V5IHNpemUgZGVzaXJlZCAob2N0ZXRzKQorICAgQHJldHVybiA+PSAwIGlmIGZvdW5kLCAtMSBpZiBub3QgcHJlc2VudAorKi8KK2ludCBmaW5kX2NpcGhlcl9hbnkoY29uc3QgY2hhciAqbmFtZSwgaW50IGJsb2NrbGVuLCBpbnQga2V5bGVuKQoreworICAgaW50IHg7CisKKyAgIExUQ19BUkdDSEsobmFtZSAhPSBOVUxMKTsKKworICAgeCA9IGZpbmRfY2lwaGVyKG5hbWUpOworICAgaWYgKHggIT0gLTEpIHJldHVybiB4OworCisgICBMVENfTVVURVhfTE9DSygmbHRjX2NpcGhlcl9tdXRleCk7CisgICBmb3IgKHggPSAwOyB4IDwgVEFCX1NJWkU7IHgrKykgeworICAgICAgIGlmIChjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICB9CisgICAgICAgaWYgKGJsb2NrbGVuIDw9IChpbnQpY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoICYmIGtleWxlbiA8PSAoaW50KWNpcGhlcl9kZXNjcmlwdG9yW3hdLm1heF9rZXlfbGVuZ3RoKSB7CisgICAgICAgICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2NpcGhlcl9tdXRleCk7CisgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgfQorICAgfQorICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2NpcGhlcl9tdXRleCk7CisgICByZXR1cm4gLTE7Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2FueS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9jaXBoZXJfaWQuYyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlNzNjNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfY2lwaGVyX2lkLmMKQEAgLTAsMCArMSw0MCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgY3J5cHRfZmluZF9jaXBoZXJfaWQuYworICBGaW5kIGNpcGhlciBieSBJRCwgVG9tIFN0IERlbmlzCisqLworCisvKioKKyAgIEZpbmQgYSBjaXBoZXIgYnkgSUQgbnVtYmVyCisgICBAcGFyYW0gSUQgICAgVGhlIElEIChub3Qgc2FtZSBhcyBpbmRleCkgb2YgdGhlIGNpcGhlciB0byBmaW5kCisgICBAcmV0dXJuID49IDAgaWYgZm91bmQsIC0xIGlmIG5vdCBwcmVzZW50CisqLworaW50IGZpbmRfY2lwaGVyX2lkKHVuc2lnbmVkIGNoYXIgSUQpCit7CisgICBpbnQgeDsKKyAgIExUQ19NVVRFWF9MT0NLKCZsdGNfY2lwaGVyX211dGV4KTsKKyAgIGZvciAoeCA9IDA7IHggPCBUQUJfU0laRTsgeCsrKSB7CisgICAgICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW3hdLklEID09IElEKSB7CisgICAgICAgICAgeCA9IChjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lID09IE5VTEwpID8gLTEgOiB4OworICAgICAgICAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19jaXBoZXJfbXV0ZXgpOworICAgICAgICAgIHJldHVybiB4OworICAgICAgIH0KKyAgIH0KKyAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19jaXBoZXJfbXV0ZXgpOworICAgcmV0dXJuIC0xOworfQorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2NpcGhlcl9pZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoLmMgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDYwNDEzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoLmMKQEAgLTAsMCArMSw0MCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgY3J5cHRfZmluZF9oYXNoLmMKKyAgRmluZCBhIGhhc2gsIFRvbSBTdCBEZW5pcworKi8KKworLyoqCisgICBGaW5kIGEgcmVnaXN0ZXJlZCBoYXNoIGJ5IG5hbWUKKyAgIEBwYXJhbSBuYW1lICAgVGhlIG5hbWUgb2YgdGhlIGhhc2ggdG8gbG9vayBmb3IKKyAgIEByZXR1cm4gPj0gMCBpZiBmb3VuZCwgLTEgaWYgbm90IHByZXNlbnQKKyovCitpbnQgZmluZF9oYXNoKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICBpbnQgeDsKKyAgIExUQ19BUkdDSEsobmFtZSAhPSBOVUxMKTsKKyAgIExUQ19NVVRFWF9MT0NLKCZsdGNfaGFzaF9tdXRleCk7CisgICBmb3IgKHggPSAwOyB4IDwgVEFCX1NJWkU7IHgrKykgeworICAgICAgIGlmIChoYXNoX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMICYmIFhTVFJDTVAoaGFzaF9kZXNjcmlwdG9yW3hdLm5hbWUsIG5hbWUpID09IDApIHsKKyAgICAgICAgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfaGFzaF9tdXRleCk7CisgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgfQorICAgfQorICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2hhc2hfbXV0ZXgpOworICAgcmV0dXJuIC0xOworfQorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2guYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI5IDIzOjQzOjU3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9hbnkuYyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9hbnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmNmY2NkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2FueS5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGNyeXB0X2ZpbmRfaGFzaF9hbnkuYworICBGaW5kIGEgaGFzaCwgVG9tIFN0IERlbmlzCisqLworCisvKioKKyAgIEZpbmQgYSBoYXNoIGZsZXhpYmx5LiAgRmlyc3QgYnkgbmFtZSB0aGVuIGlmIG5vdCBwcmVzZW50IGJ5IGRpZ2VzdCBzaXplIAorICAgQHBhcmFtIG5hbWUgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBoYXNoIGRlc2lyZWQKKyAgIEBwYXJhbSBkaWdlc3RsZW4gICBUaGUgbWluaW11bSBsZW5ndGggb2YgdGhlIGRpZ2VzdCBzaXplIChvY3RldHMpCisgICBAcmV0dXJuID49IDAgaWYgZm91bmQsIC0xIGlmIG5vdCBwcmVzZW50CisqL2ludCBmaW5kX2hhc2hfYW55KGNvbnN0IGNoYXIgKm5hbWUsIGludCBkaWdlc3RsZW4pCit7CisgICBpbnQgeCwgeSwgejsKKyAgIExUQ19BUkdDSEsobmFtZSAhPSBOVUxMKTsKKworICAgeCA9IGZpbmRfaGFzaChuYW1lKTsKKyAgIGlmICh4ICE9IC0xKSByZXR1cm4geDsKKworICAgTFRDX01VVEVYX0xPQ0soJmx0Y19oYXNoX211dGV4KTsKKyAgIHkgPSBNQVhCTE9DS1NJWkUrMTsKKyAgIHogPSAtMTsKKyAgIGZvciAoeCA9IDA7IHggPCBUQUJfU0laRTsgeCsrKSB7CisgICAgICAgaWYgKGhhc2hfZGVzY3JpcHRvclt4XS5uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICB9CisgICAgICAgaWYgKChpbnQpaGFzaF9kZXNjcmlwdG9yW3hdLmhhc2hzaXplID49IGRpZ2VzdGxlbiAmJiAoaW50KWhhc2hfZGVzY3JpcHRvclt4XS5oYXNoc2l6ZSA8IHkpIHsKKyAgICAgICAgICB6ID0geDsKKyAgICAgICAgICB5ID0gaGFzaF9kZXNjcmlwdG9yW3hdLmhhc2hzaXplOworICAgICAgIH0KKyAgIH0KKyAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19oYXNoX211dGV4KTsKKyAgIHJldHVybiB6OworfQorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfYW55LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfaWQuYyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9pZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1OWNhMDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfaWQuYwpAQCAtMCwwICsxLDQwIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBjcnlwdF9maW5kX2hhc2hfaWQuYworICBGaW5kIGhhc2ggYnkgSUQsIFRvbSBTdCBEZW5pcworKi8KKworLyoqCisgICBGaW5kIGEgaGFzaCBieSBJRCBudW1iZXIKKyAgIEBwYXJhbSBJRCAgICBUaGUgSUQgKG5vdCBzYW1lIGFzIGluZGV4KSBvZiB0aGUgaGFzaCB0byBmaW5kCisgICBAcmV0dXJuID49IDAgaWYgZm91bmQsIC0xIGlmIG5vdCBwcmVzZW50CisqLworaW50IGZpbmRfaGFzaF9pZCh1bnNpZ25lZCBjaGFyIElEKQoreworICAgaW50IHg7CisgICBMVENfTVVURVhfTE9DSygmbHRjX2hhc2hfbXV0ZXgpOworICAgZm9yICh4ID0gMDsgeCA8IFRBQl9TSVpFOyB4KyspIHsKKyAgICAgIGlmIChoYXNoX2Rlc2NyaXB0b3JbeF0uSUQgPT0gSUQpIHsKKyAgICAgICAgICB4ID0gKGhhc2hfZGVzY3JpcHRvclt4XS5uYW1lID09IE5VTEwpID8gLTEgOiB4OworICAgICAgICAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19oYXNoX211dGV4KTsKKyAgICAgICAgICByZXR1cm4geDsKKyAgICAgIH0KKyAgIH0KKyAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19oYXNoX211dGV4KTsKKyAgIHJldHVybiAtMTsKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZmluZF9oYXNoX2lkLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfb2lkLmMgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfb2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA0ZjgwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfaGFzaF9vaWQuYwpAQCAtMCwwICsxLDM1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBjcnlwdF9maW5kX2hhc2hfb2lkLmMKKyAgRmluZCBhIGhhc2gsIFRvbSBTdCBEZW5pcworKi8KKworaW50IGZpbmRfaGFzaF9vaWQoY29uc3QgdW5zaWduZWQgbG9uZyAqSUQsIHVuc2lnbmVkIGxvbmcgSURsZW4pCit7CisgICBpbnQgeDsKKyAgIExUQ19BUkdDSEsoSUQgIT0gTlVMTCk7CisgICBMVENfTVVURVhfTE9DSygmbHRjX2hhc2hfbXV0ZXgpOworICAgZm9yICh4ID0gMDsgeCA8IFRBQl9TSVpFOyB4KyspIHsKKyAgICAgICBpZiAoaGFzaF9kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTCAmJiBoYXNoX2Rlc2NyaXB0b3JbeF0uT0lEbGVuID09IElEbGVuICYmICFYTUVNQ01QKGhhc2hfZGVzY3JpcHRvclt4XS5PSUQsIElELCBzaXplb2YodW5zaWduZWQgbG9uZykgKiBJRGxlbikpIHsKKyAgICAgICAgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfaGFzaF9tdXRleCk7CisgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgfQorICAgfQorICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2hhc2hfbXV0ZXgpOworICAgcmV0dXJuIC0xOworfQorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX2hhc2hfb2lkLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX3BybmcuYyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZpbmRfcHJuZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiM2JjNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX3BybmcuYwpAQCAtMCwwICsxLDQxIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBjcnlwdF9maW5kX3BybmcuYworICBGaW5kIGEgUFJORywgVG9tIFN0IERlbmlzCisqLworCisvKioKKyAgIEZpbmQgYSByZWdpc3RlcmVkIFBSTkcgYnkgbmFtZQorICAgQHBhcmFtIG5hbWUgICBUaGUgbmFtZSBvZiB0aGUgUFJORyB0byBsb29rIGZvcgorICAgQHJldHVybiA+PSAwIGlmIGZvdW5kLCAtMSBpZiBub3QgcHJlc2VudAorKi8KK2ludCBmaW5kX3BybmcoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgIGludCB4OworICAgTFRDX0FSR0NISyhuYW1lICE9IE5VTEwpOworICAgTFRDX01VVEVYX0xPQ0soJmx0Y19wcm5nX211dGV4KTsKKyAgIGZvciAoeCA9IDA7IHggPCBUQUJfU0laRTsgeCsrKSB7CisgICAgICAgaWYgKChwcm5nX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMKSAmJiBYU1RSQ01QKHBybmdfZGVzY3JpcHRvclt4XS5uYW1lLCBuYW1lKSA9PSAwKSB7CisgICAgICAgICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX3BybmdfbXV0ZXgpOworICAgICAgICAgIHJldHVybiB4OworICAgICAgIH0KKyAgIH0KKyAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19wcm5nX211dGV4KTsKKyAgIHJldHVybiAtMTsKK30KKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9maW5kX3BybmcuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI5IDIzOjQzOjU3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZzYS5jIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZnNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk1NjliNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2ZzYS5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworLyoqCisgIEBmaWxlIGNyeXB0X2ZzYS5jCisgIExpYlRvbUNyeXB0IEZVTEwgU1BFRUQgQUhFQUQhLCBUb20gU3QgRGVuaXMKKyovICAKKworLyogZm9ybWF0IGlzIGx0Y19tcCwgY2lwaGVyX2Rlc2MsIFtjaXBoZXJfZGVzY10sIE5VTEwsIGhhc2hfZGVzYywgW2hhc2hfZGVzY10sIE5VTEwsIHBybmdfZGVzYywgW3BybmdfZGVzY10sIE5VTEwgKi8KK2ludCBjcnlwdF9mc2Eodm9pZCAqbXAsIC4uLikKK3sKKyAgIGludCAgICAgIGVycjsKKyAgIHZhX2xpc3QgIGFyZ3M7CisgICB2b2lkICAgICAqcDsKKworICAgdmFfc3RhcnQoYXJncywgbXApOworICAgaWYgKG1wICE9IE5VTEwpIHsKKyAgICAgIFhNRU1DUFkoJmx0Y19tcCwgbXAsIHNpemVvZihsdGNfbXApKTsKKyAgIH0KKyAgIAorICAgd2hpbGUgKChwID0gdmFfYXJnKGFyZ3MsIHZvaWQqKSkgIT0gTlVMTCkgeworICAgICAgaWYgKChlcnIgPSByZWdpc3Rlcl9jaXBoZXIocCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICB2YV9lbmQoYXJncyk7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgfQorCisgICB3aGlsZSAoKHAgPSB2YV9hcmcoYXJncywgdm9pZCopKSAhPSBOVUxMKSB7CisgICAgICBpZiAoKGVyciA9IHJlZ2lzdGVyX2hhc2gocCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICB2YV9lbmQoYXJncyk7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgfQorCisgICB3aGlsZSAoKHAgPSB2YV9hcmcoYXJncywgdm9pZCopKSAhPSBOVUxMKSB7CisgICAgICBpZiAoKGVyciA9IHJlZ2lzdGVyX3BybmcocCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICB2YV9lbmQoYXJncyk7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgfQorCisgICB2YV9lbmQoYXJncyk7CisgICByZXR1cm4gQ1JZUFRfT0s7ICAgCit9CisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfZnNhLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8xMyAyMzoxNDozMyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2Rlc2NyaXB0b3IuYyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfZGVzY3JpcHRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYTU5ZjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2Rlc2NyaXB0b3IuYwpAQCAtMCwwICsxLDI3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBjcnlwdF9oYXNoX2Rlc2NyaXB0b3IuYworICBTdG9yZXMgdGhlIGhhc2ggZGVzY3JpcHRvciB0YWJsZSwgVG9tIFN0IERlbmlzICAKKyovCisKK3N0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yIGhhc2hfZGVzY3JpcHRvcltUQUJfU0laRV0gPSB7Cit7IE5VTEwsIDAsIDAsIDAsIHsgMCB9LCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KK307CisKK0xUQ19NVVRFWF9HTE9CQUwobHRjX2hhc2hfbXV0ZXgpCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9kZXNjcmlwdG9yLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2lzX3ZhbGlkLmMgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9oYXNoX2lzX3ZhbGlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTRhOTFlYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2hhc2hfaXNfdmFsaWQuYwpAQCAtMCwwICsxLDM2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBjcnlwdF9oYXNoX2lzX3ZhbGlkLmMKKyAgRGV0ZXJtaW5lIGlmIGhhc2ggaXMgdmFsaWQsIFRvbSBTdCBEZW5pcworKi8gIAorCisvKgorICAgVGVzdCBpZiBhIGhhc2ggaW5kZXggaXMgdmFsaWQKKyAgIEBwYXJhbSBpZHggICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggdG8gc2VhcmNoIGZvcgorICAgQHJldHVybiBDUllQVF9PSyBpZiB2YWxpZAorKi8KK2ludCBoYXNoX2lzX3ZhbGlkKGludCBpZHgpCit7CisgICBMVENfTVVURVhfTE9DSygmbHRjX2hhc2hfbXV0ZXgpOworICAgaWYgKGlkeCA8IDAgfHwgaWR4ID49IFRBQl9TSVpFIHx8IGhhc2hfZGVzY3JpcHRvcltpZHhdLm5hbWUgPT0gTlVMTCkgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2hhc2hfbXV0ZXgpOworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfSEFTSDsKKyAgIH0KKyAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19oYXNoX211dGV4KTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfaGFzaF9pc192YWxpZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfbHRjX21wX2Rlc2NyaXB0b3IuYyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2x0Y19tcF9kZXNjcmlwdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA3ODYyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X2x0Y19tcF9kZXNjcmlwdG9yLmMKQEAgLTAsMCArMSwxMyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCitsdGNfbWF0aF9kZXNjcmlwdG9yIGx0Y19tcDsKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfZGVzY3JpcHRvci5jIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19kZXNjcmlwdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiNWYwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfZGVzY3JpcHRvci5jCkBAIC0wLDAgKzEsMjYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGNyeXB0X3BybmdfZGVzY3JpcHRvci5jCisgIFN0b3JlcyB0aGUgUFJORyBkZXNjcmlwdG9ycywgVG9tIFN0IERlbmlzCisqLyAgCitzdHJ1Y3QgbHRjX3BybmdfZGVzY3JpcHRvciBwcm5nX2Rlc2NyaXB0b3JbVEFCX1NJWkVdID0geworeyBOVUxMLCAwLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMIH0KK307CisKK0xUQ19NVVRFWF9HTE9CQUwobHRjX3BybmdfbXV0ZXgpCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfcHJuZ19kZXNjcmlwdG9yLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9wcm5nX2lzX3ZhbGlkLmMgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9wcm5nX2lzX3ZhbGlkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFmMGEzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfaXNfdmFsaWQuYwpAQCAtMCwwICsxLDM2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBjcnlwdF9wcm5nX2lzX3ZhbGlkLmMKKyAgRGV0ZXJtaW5lIGlmIFBSTkcgaXMgdmFsaWQsIFRvbSBTdCBEZW5pcworKi8KKworLyoKKyAgIFRlc3QgaWYgYSBQUk5HIGluZGV4IGlzIHZhbGlkCisgICBAcGFyYW0gaWR4ICAgVGhlIGluZGV4IG9mIHRoZSBQUk5HIHRvIHNlYXJjaCBmb3IKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgdmFsaWQKKyovCitpbnQgcHJuZ19pc192YWxpZChpbnQgaWR4KQoreworICAgTFRDX01VVEVYX0xPQ0soJmx0Y19wcm5nX211dGV4KTsKKyAgIGlmIChpZHggPCAwIHx8IGlkeCA+PSBUQUJfU0laRSB8fCBwcm5nX2Rlc2NyaXB0b3JbaWR4XS5uYW1lID09IE5VTEwpIHsKKyAgICAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19wcm5nX211dGV4KTsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BSTkc7CisgICB9CisgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfcHJuZ19tdXRleCk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3BybmdfaXNfdmFsaWQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2NpcGhlci5jIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfY2lwaGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ3NGNjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2NpcGhlci5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGNyeXB0X3JlZ2lzdGVyX2NpcGhlci5jCisgIFJlZ2lzdGVyIGEgY2lwaGVyLCBUb20gU3QgRGVuaXMKKyovCisKKy8qKgorICAgUmVnaXN0ZXIgYSBjaXBoZXIgd2l0aCB0aGUgZGVzY3JpcHRvciB0YWJsZQorICAgQHBhcmFtIGNpcGhlciAgIFRoZSBjaXBoZXIgeW91IHdpc2ggdG8gcmVnaXN0ZXIKKyAgIEByZXR1cm4gdmFsdWUgPj0gMCBpZiBzdWNjZXNzZnVsbHkgYWRkZWQgKG9yIGFscmVhZHkgcHJlc2VudCksIC0xIGlmIHVuc3VjY2Vzc2Z1bAorKi8KK2ludCByZWdpc3Rlcl9jaXBoZXIoY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciAqY2lwaGVyKQoreworICAgaW50IHg7CisKKyAgIExUQ19BUkdDSEsoY2lwaGVyICE9IE5VTEwpOworCisgICAvKiBpcyBpdCBhbHJlYWR5IHJlZ2lzdGVyZWQ/ICovCisgICBMVENfTVVURVhfTE9DSygmbHRjX2NpcGhlcl9tdXRleCk7CisgICBmb3IgKHggPSAwOyB4IDwgVEFCX1NJWkU7IHgrKykgeworICAgICAgIGlmIChjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lICE9IE5VTEwgJiYgY2lwaGVyX2Rlc2NyaXB0b3JbeF0uSUQgPT0gY2lwaGVyLT5JRCkgeworICAgICAgICAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19jaXBoZXJfbXV0ZXgpOworICAgICAgICAgIHJldHVybiB4OworICAgICAgIH0KKyAgIH0KKworICAgLyogZmluZCBhIGJsYW5rIHNwb3QgKi8KKyAgIGZvciAoeCA9IDA7IHggPCBUQUJfU0laRTsgeCsrKSB7CisgICAgICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW3hdLm5hbWUgPT0gTlVMTCkgeworICAgICAgICAgIFhNRU1DUFkoJmNpcGhlcl9kZXNjcmlwdG9yW3hdLCBjaXBoZXIsIHNpemVvZihzdHJ1Y3QgbHRjX2NpcGhlcl9kZXNjcmlwdG9yKSk7CisgICAgICAgICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2NpcGhlcl9tdXRleCk7CisgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgfQorICAgfQorCisgICAvKiBubyBzcG90ICovCisgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfY2lwaGVyX211dGV4KTsKKyAgIHJldHVybiAtMTsKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfY2lwaGVyLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9oYXNoLmMgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9oYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkMGU4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2hhc2guYwpAQCAtMCwwICsxLDU0IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBjcnlwdF9yZWdpc3Rlcl9oYXNoLmMKKyAgUmVnaXN0ZXIgYSBIQVNILCBUb20gU3QgRGVuaXMKKyovCisKKy8qKgorICAgUmVnaXN0ZXIgYSBoYXNoIHdpdGggdGhlIGRlc2NyaXB0b3IgdGFibGUKKyAgIEBwYXJhbSBoYXNoICAgVGhlIGhhc2ggeW91IHdpc2ggdG8gcmVnaXN0ZXIKKyAgIEByZXR1cm4gdmFsdWUgPj0gMCBpZiBzdWNjZXNzZnVsbHkgYWRkZWQgKG9yIGFscmVhZHkgcHJlc2VudCksIC0xIGlmIHVuc3VjY2Vzc2Z1bAorKi8KK2ludCByZWdpc3Rlcl9oYXNoKGNvbnN0IHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yICpoYXNoKQoreworICAgaW50IHg7CisKKyAgIExUQ19BUkdDSEsoaGFzaCAhPSBOVUxMKTsKKworICAgLyogaXMgaXQgYWxyZWFkeSByZWdpc3RlcmVkPyAqLworICAgTFRDX01VVEVYX0xPQ0soJmx0Y19oYXNoX211dGV4KTsKKyAgIGZvciAoeCA9IDA7IHggPCBUQUJfU0laRTsgeCsrKSB7CisgICAgICAgaWYgKFhNRU1DTVAoJmhhc2hfZGVzY3JpcHRvclt4XSwgaGFzaCwgc2l6ZW9mKHN0cnVjdCBsdGNfaGFzaF9kZXNjcmlwdG9yKSkgPT0gMCkgeworICAgICAgICAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19oYXNoX211dGV4KTsKKyAgICAgICAgICByZXR1cm4geDsKKyAgICAgICB9CisgICB9CisKKyAgIC8qIGZpbmQgYSBibGFuayBzcG90ICovCisgICBmb3IgKHggPSAwOyB4IDwgVEFCX1NJWkU7IHgrKykgeworICAgICAgIGlmIChoYXNoX2Rlc2NyaXB0b3JbeF0ubmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgWE1FTUNQWSgmaGFzaF9kZXNjcmlwdG9yW3hdLCBoYXNoLCBzaXplb2Yoc3RydWN0IGx0Y19oYXNoX2Rlc2NyaXB0b3IpKTsKKyAgICAgICAgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfaGFzaF9tdXRleCk7CisgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgfQorICAgfQorCisgICAvKiBubyBzcG90ICovCisgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfaGFzaF9tdXRleCk7CisgICByZXR1cm4gLTE7Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX2hhc2guYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX3BybmcuYyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3JlZ2lzdGVyX3BybmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODM0YzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfcmVnaXN0ZXJfcHJuZy5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGNyeXB0X3JlZ2lzdGVyX3BybmcuYworICBSZWdpc3RlciBhIFBSTkcsIFRvbSBTdCBEZW5pcworKi8KKyAgCisvKioKKyAgIFJlZ2lzdGVyIGEgUFJORyB3aXRoIHRoZSBkZXNjcmlwdG9yIHRhYmxlCisgICBAcGFyYW0gcHJuZyAgIFRoZSBQUk5HIHlvdSB3aXNoIHRvIHJlZ2lzdGVyCisgICBAcmV0dXJuIHZhbHVlID49IDAgaWYgc3VjY2Vzc2Z1bGx5IGFkZGVkIChvciBhbHJlYWR5IHByZXNlbnQpLCAtMSBpZiB1bnN1Y2Nlc3NmdWwKKyovCitpbnQgcmVnaXN0ZXJfcHJuZyhjb25zdCBzdHJ1Y3QgbHRjX3BybmdfZGVzY3JpcHRvciAqcHJuZykKK3sKKyAgIGludCB4OworCisgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CisKKyAgIC8qIGlzIGl0IGFscmVhZHkgcmVnaXN0ZXJlZD8gKi8KKyAgIExUQ19NVVRFWF9MT0NLKCZsdGNfcHJuZ19tdXRleCk7CisgICBmb3IgKHggPSAwOyB4IDwgVEFCX1NJWkU7IHgrKykgeworICAgICAgIGlmIChYTUVNQ01QKCZwcm5nX2Rlc2NyaXB0b3JbeF0sIHBybmcsIHNpemVvZihzdHJ1Y3QgbHRjX3BybmdfZGVzY3JpcHRvcikpID09IDApIHsKKyAgICAgICAgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfcHJuZ19tdXRleCk7CisgICAgICAgICAgcmV0dXJuIHg7CisgICAgICAgfQorICAgfQorCisgICAvKiBmaW5kIGEgYmxhbmsgc3BvdCAqLworICAgZm9yICh4ID0gMDsgeCA8IFRBQl9TSVpFOyB4KyspIHsKKyAgICAgICBpZiAocHJuZ19kZXNjcmlwdG9yW3hdLm5hbWUgPT0gTlVMTCkgeworICAgICAgICAgIFhNRU1DUFkoJnBybmdfZGVzY3JpcHRvclt4XSwgcHJuZywgc2l6ZW9mKHN0cnVjdCBsdGNfcHJuZ19kZXNjcmlwdG9yKSk7CisgICAgICAgICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX3BybmdfbXV0ZXgpOworICAgICAgICAgIHJldHVybiB4OworICAgICAgIH0KKyAgIH0KKworICAgLyogbm8gc3BvdCAqLworICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX3BybmdfbXV0ZXgpOworICAgcmV0dXJuIC0xOworfQorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF9yZWdpc3Rlcl9wcm5nLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToyODoxNyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX2NpcGhlci5jIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9jaXBoZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2I0NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9jaXBoZXIuYwpAQCAtMCwwICsxLDQ1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBjcnlwdF91bnJlZ2lzdGVyX2NpcGhlci5jCisgIFVucmVnaXN0ZXIgYSBjaXBoZXIsIFRvbSBTdCBEZW5pcworKi8KKworLyoqCisgIFVucmVnaXN0ZXIgYSBjaXBoZXIgZnJvbSB0aGUgZGVzY3JpcHRvciB0YWJsZQorICBAcGFyYW0gY2lwaGVyICAgVGhlIGNpcGhlciBkZXNjcmlwdG9yIHRvIHJlbW92ZQorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyovCitpbnQgdW5yZWdpc3Rlcl9jaXBoZXIoY29uc3Qgc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvciAqY2lwaGVyKQoreworICAgaW50IHg7CisKKyAgIExUQ19BUkdDSEsoY2lwaGVyICE9IE5VTEwpOworCisgICAvKiBpcyBpdCBhbHJlYWR5IHJlZ2lzdGVyZWQ/ICovCisgICBMVENfTVVURVhfTE9DSygmbHRjX2NpcGhlcl9tdXRleCk7CisgICBmb3IgKHggPSAwOyB4IDwgVEFCX1NJWkU7IHgrKykgeworICAgICAgIGlmIChYTUVNQ01QKCZjaXBoZXJfZGVzY3JpcHRvclt4XSwgY2lwaGVyLCBzaXplb2Yoc3RydWN0IGx0Y19jaXBoZXJfZGVzY3JpcHRvcikpID09IDApIHsKKyAgICAgICAgICBjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lID0gTlVMTDsKKyAgICAgICAgICBjaXBoZXJfZGVzY3JpcHRvclt4XS5JRCAgID0gMjU1OworICAgICAgICAgIExUQ19NVVRFWF9VTkxPQ0soJmx0Y19jaXBoZXJfbXV0ZXgpOworICAgICAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgICAgICB9CisgICB9CisgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfY2lwaGVyX211dGV4KTsKKyAgIHJldHVybiBDUllQVF9FUlJPUjsKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9jaXBoZXIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzAxIDA5OjI4OjE3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfaGFzaC5jIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9oYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg3YTM5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfaGFzaC5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGNyeXB0X3VucmVnaXN0ZXJfaGFzaC5jCisgIFVucmVnaXN0ZXIgYSBoYXNoLCBUb20gU3QgRGVuaXMKKyovCisKKy8qKgorICBVbnJlZ2lzdGVyIGEgaGFzaCBmcm9tIHRoZSBkZXNjcmlwdG9yIHRhYmxlCisgIEBwYXJhbSBoYXNoICAgVGhlIGhhc2ggZGVzY3JpcHRvciB0byByZW1vdmUKKyAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IHVucmVnaXN0ZXJfaGFzaChjb25zdCBzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvciAqaGFzaCkKK3sKKyAgIGludCB4OworCisgICBMVENfQVJHQ0hLKGhhc2ggIT0gTlVMTCk7CisKKyAgIC8qIGlzIGl0IGFscmVhZHkgcmVnaXN0ZXJlZD8gKi8KKyAgIExUQ19NVVRFWF9MT0NLKCZsdGNfaGFzaF9tdXRleCk7CisgICBmb3IgKHggPSAwOyB4IDwgVEFCX1NJWkU7IHgrKykgeworICAgICAgIGlmIChYTUVNQ01QKCZoYXNoX2Rlc2NyaXB0b3JbeF0sIGhhc2gsIHNpemVvZihzdHJ1Y3QgbHRjX2hhc2hfZGVzY3JpcHRvcikpID09IDApIHsKKyAgICAgICAgICBoYXNoX2Rlc2NyaXB0b3JbeF0ubmFtZSA9IE5VTEw7CisgICAgICAgICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX2hhc2hfbXV0ZXgpOworICAgICAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgICAgICB9CisgICB9CisgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfaGFzaF9tdXRleCk7CisgICByZXR1cm4gQ1JZUFRfRVJST1I7Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfaGFzaC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6Mjg6MTcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9wcm5nLmMgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9jcnlwdC9jcnlwdF91bnJlZ2lzdGVyX3BybmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTRjYmNmCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvY3J5cHQvY3J5cHRfdW5yZWdpc3Rlcl9wcm5nLmMKQEAgLTAsMCArMSw0NCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgY3J5cHRfdW5yZWdpc3Rlcl9wcm5nLmMKKyAgVW5yZWdpc3RlciBhIFBSTkcsIFRvbSBTdCBEZW5pcworKi8KKworLyoqCisgIFVucmVnaXN0ZXIgYSBQUk5HIGZyb20gdGhlIGRlc2NyaXB0b3IgdGFibGUKKyAgQHBhcmFtIHBybmcgICBUaGUgUFJORyBkZXNjcmlwdG9yIHRvIHJlbW92ZQorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyovCitpbnQgdW5yZWdpc3Rlcl9wcm5nKGNvbnN0IHN0cnVjdCBsdGNfcHJuZ19kZXNjcmlwdG9yICpwcm5nKQoreworICAgaW50IHg7CisKKyAgIExUQ19BUkdDSEsocHJuZyAhPSBOVUxMKTsKKyAKKyAgIC8qIGlzIGl0IGFscmVhZHkgcmVnaXN0ZXJlZD8gKi8KKyAgIExUQ19NVVRFWF9MT0NLKCZsdGNfcHJuZ19tdXRleCk7CisgICBmb3IgKHggPSAwOyB4IDwgVEFCX1NJWkU7IHgrKykgeworICAgICAgIGlmIChYTUVNQ01QKCZwcm5nX2Rlc2NyaXB0b3JbeF0sIHBybmcsIHNpemVvZihzdHJ1Y3QgbHRjX3BybmdfZGVzY3JpcHRvcikpICE9IDApIHsKKyAgICAgICAgICBwcm5nX2Rlc2NyaXB0b3JbeF0ubmFtZSA9IE5VTEw7CisgICAgICAgICAgTFRDX01VVEVYX1VOTE9DSygmbHRjX3BybmdfbXV0ZXgpOworICAgICAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgICAgICB9CisgICB9CisgICBMVENfTVVURVhfVU5MT0NLKCZsdGNfcHJuZ19tdXRleCk7CisgICByZXR1cm4gQ1JZUFRfRVJST1I7Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL2NyeXB0L2NyeXB0X3VucmVnaXN0ZXJfcHJuZy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6Mjg6MTcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21pc2MvZXJyb3JfdG9fc3RyaW5nLmMgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy9lcnJvcl90b19zdHJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGEyNTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvZXJyb3JfdG9fc3RyaW5nLmMKQEAgLTAsMCArMSw3NCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBlcnJvcl90b19zdHJpbmcuYworICBDb252ZXJ0IGVycm9yIGNvZGVzIHRvIEFTQ0lJIHN0cmluZ3MsIFRvbSBTdCBEZW5pcworKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKmVycl8yX3N0cltdID0KK3sKKyAgICJDUllQVF9PSyIsCisgICAiQ1JZUFRfRVJST1IiLAorICAgIk5vbi1mYXRhbCAnbm8tb3BlcmF0aW9uJyByZXF1ZXN0ZWQuIiwKKworICAgIkludmFsaWQga2V5c2l6ZSBmb3IgYmxvY2sgY2lwaGVyLiIsCisgICAiSW52YWxpZCBudW1iZXIgb2Ygcm91bmRzIGZvciBibG9jayBjaXBoZXIuIiwKKyAgICJBbGdvcml0aG0gZmFpbGVkIHRlc3QgdmVjdG9ycy4iLAorCisgICAiQnVmZmVyIG92ZXJmbG93LiIsCisgICAiSW52YWxpZCBpbnB1dCBwYWNrZXQuIiwKKworICAgIkludmFsaWQgbnVtYmVyIG9mIGJpdHMgZm9yIGEgUFJORy4iLAorICAgIkVycm9yIHJlYWRpbmcgdGhlIFBSTkcuIiwKKworICAgIkludmFsaWQgY2lwaGVyIHNwZWNpZmllZC4iLAorICAgIkludmFsaWQgaGFzaCBzcGVjaWZpZWQuIiwKKyAgICJJbnZhbGlkIFBSTkcgc3BlY2lmaWVkLiIsCisKKyAgICJPdXQgb2YgbWVtb3J5LiIsCisKKyAgICJJbnZhbGlkIFBLIGtleSBvciBrZXkgdHlwZSBzcGVjaWZpZWQgZm9yIGZ1bmN0aW9uLiIsCisgICAiQSBwcml2YXRlIFBLIGtleSBpcyByZXF1aXJlZC4iLAorCisgICAiSW52YWxpZCBhcmd1bWVudCBwcm92aWRlZC4iLAorICAgIkZpbGUgTm90IEZvdW5kIiwKKworICAgIkludmFsaWQgUEsgdHlwZS4iLAorICAgIkludmFsaWQgUEsgc3lzdGVtLiIsCisgICAiRHVwbGljYXRlIFBLIGtleSBmb3VuZCBvbiBrZXlyaW5nLiIsCisgICAiS2V5IG5vdCBmb3VuZCBpbiBrZXlyaW5nLiIsCisgICAiSW52YWxpZCBzaXplZCBwYXJhbWV0ZXIuIiwKKworICAgIkludmFsaWQgc2l6ZSBmb3IgcHJpbWUuIiwKKworfTsKKworLyoqCisgICBDb252ZXJ0IGFuIExUQyBlcnJvciBjb2RlIHRvIEFTQ0lJCisgICBAcGFyYW0gZXJyICAgIFRoZSBlcnJvciBjb2RlCisgICBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgQVNDSUkgTlVMIHRlcm1pbmF0ZWQgc3RyaW5nIGZvciB0aGUgZXJyb3Igb3IgIkludmFsaWQgZXJyb3IgY29kZS4iIGlmIHRoZSBlcnIgY29kZSB3YXMgbm90IHZhbGlkLgorKi8KK2NvbnN0IGNoYXIgKmVycm9yX3RvX3N0cmluZyhpbnQgZXJyKQoreworICAgaWYgKGVyciA8IDAgfHwgZXJyID49IChpbnQpKHNpemVvZihlcnJfMl9zdHIpL3NpemVvZihlcnJfMl9zdHJbMF0pKSkgeworICAgICAgcmV0dXJuICJJbnZhbGlkIGVycm9yIGNvZGUuIjsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZXJyXzJfc3RyW2Vycl07CisgICB9ICAgCit9CisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21pc2MvZXJyb3JfdG9fc3RyaW5nLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWlzYy9wa2NzNS9wa2NzXzVfMS5jIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvcGtjczUvcGtjc181XzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmY3YjBjCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21pc2MvcGtjczUvcGtjc181XzEuYwpAQCAtMCwwICsxLDEwNiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlIDx0b21jcnlwdC5oPgorCisvKiogCisgICBAZmlsZSBwa2NzXzVfMS5jCisgICBQS0NTICM1LCBBbGdvcml0aG0gIzEsIFRvbSBTdCBEZW5pcworKi8KKyNpZmRlZiBQS0NTXzUKKy8qKgorICAgRXhlY3V0ZSBQS0NTICM1IHYxCisgICBAcGFyYW0gcGFzc3dvcmQgICAgICAgICBUaGUgcGFzc3dvcmQgKG9yIGtleSkKKyAgIEBwYXJhbSBwYXNzd29yZF9sZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIHBhc3N3b3JkIChvY3RldCkKKyAgIEBwYXJhbSBzYWx0ICAgICAgICAgICAgIFRoZSBzYWx0IChvciBub25jZSkgd2hpY2ggaXMgOCBvY3RldHMgbG9uZworICAgQHBhcmFtIGl0ZXJhdGlvbl9jb3VudCAgVGhlIFBLQ1MgIzUgdjEgaXRlcmF0aW9uIGNvdW50CisgICBAcGFyYW0gaGFzaF9pZHggICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggZGVzaXJlZAorICAgQHBhcmFtIG91dCAgICAgICAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGlzIGFsZ29yaXRobQorICAgQHBhcmFtIG91dGxlbiAgICAgICAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgYWxnb3JpdGhtIG91dHB1dAorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHBrY3NfNV9hbGcxKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBhc3N3b3JkLCB1bnNpZ25lZCBsb25nIHBhc3N3b3JkX2xlbiwgCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc2FsdCwgCisgICAgICAgICAgICAgICAgaW50IGl0ZXJhdGlvbl9jb3VudCwgIGludCBoYXNoX2lkeCwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgaW50IGVycjsKKyAgIHVuc2lnbmVkIGxvbmcgeDsKKyAgIGhhc2hfc3RhdGUgICAgKm1kOworICAgdW5zaWduZWQgY2hhciAqYnVmOworCisgICBMVENfQVJHQ0hLKHBhc3N3b3JkICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhzYWx0ICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAgICE9IE5VTEwpOworCisgICAvKiB0ZXN0IGhhc2ggSURYICovCisgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQoaGFzaF9pZHgpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogYWxsb2NhdGUgbWVtb3J5ICovCisgICBtZCAgPSBYTUFMTE9DKHNpemVvZihoYXNoX3N0YXRlKSk7CisgICBidWYgPSBYTUFMTE9DKE1BWEJMT0NLU0laRSk7CisgICBpZiAobWQgPT0gTlVMTCB8fCBidWYgPT0gTlVMTCkgeworICAgICAgaWYgKG1kICE9IE5VTEwpIHsKKyAgICAgICAgIFhGUkVFKG1kKTsKKyAgICAgIH0KKyAgICAgIGlmIChidWYgIT0gTlVMTCkgeyAKKyAgICAgICAgIFhGUkVFKGJ1Zik7CisgICAgICB9CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfSAgICAgICAgCisKKyAgIC8qIGhhc2ggaW5pdGlhbCBwYXNzd29yZCArIHNhbHQgKi8KKyAgIGlmICgoZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5pbml0KG1kKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0ucHJvY2VzcyhtZCwgcGFzc3dvcmQsIHBhc3N3b3JkX2xlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgZ290byBMQkxfRVJSOworICAgfQorICAgaWYgKChlcnIgPSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF9pZHhdLnByb2Nlc3MobWQsIHNhbHQsIDgpKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKyAgIGlmICgoZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5kb25lKG1kLCBidWYpKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgd2hpbGUgKC0taXRlcmF0aW9uX2NvdW50KSB7CisgICAgICAvKiBjb2RlIGdvZXMgaGVyZS4gKi8KKyAgICAgIHggPSBNQVhCTE9DS1NJWkU7CisgICAgICBpZiAoKGVyciA9IGhhc2hfbWVtb3J5KGhhc2hfaWR4LCBidWYsIGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0uaGFzaHNpemUsIGJ1ZiwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgfQorCisgICAvKiBjb3B5IHVwdG8gb3V0bGVuIGJ5dGVzICovCisgICBmb3IgKHggPSAwOyB4IDwgaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5oYXNoc2l6ZSAmJiB4IDwgKm91dGxlbjsgeCsrKSB7CisgICAgICAgb3V0W3hdID0gYnVmW3hdOworICAgfQorICAgKm91dGxlbiA9IHg7CisgICBlcnIgPSBDUllQVF9PSzsKK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLIAorICAgemVyb21lbShidWYsIE1BWEJMT0NLU0laRSk7CisgICB6ZXJvbWVtKG1kLCBzaXplb2YoaGFzaF9zdGF0ZSkpOworI2VuZGlmCisKKyAgIFhGUkVFKGJ1Zik7CisgICBYRlJFRShtZCk7CisKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbWlzYy9wa2NzNS9wa2NzXzVfMS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21pc2MvcGtjczUvcGtjc181XzIuYyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL3BrY3M1L3BrY3NfNV8yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4ZDE2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL3BrY3M1L3BrY3NfNV8yLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSA8dG9tY3J5cHQuaD4KKworLyoqIAorICAgQGZpbGUgcGtjc181XzIuYworICAgUEtDUyAjNSwgQWxnb3JpdGhtICMyLCBUb20gU3QgRGVuaXMKKyovCisjaWZkZWYgUEtDU181CisKKy8qKgorICAgRXhlY3V0ZSBQS0NTICM1IHYyCisgICBAcGFyYW0gcGFzc3dvcmQgICAgICAgICAgVGhlIGlucHV0IHBhc3N3b3JkIChvciBrZXkpCisgICBAcGFyYW0gcGFzc3dvcmRfbGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgcGFzc3dvcmQgKG9jdGV0cykKKyAgIEBwYXJhbSBzYWx0ICAgICAgICAgICAgICBUaGUgc2FsdCAob3Igbm9uY2UpCisgICBAcGFyYW0gc2FsdF9sZW4gICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2FsdCAob2N0ZXRzKQorICAgQHBhcmFtIGl0ZXJhdGlvbl9jb3VudCAgICMgb2YgaXRlcmF0aW9ucyBkZXNpcmVkIGZvciBQS0NTICM1IHYyIFtyZWFkIHNwZWNzIGZvciBtb3JlXQorICAgQHBhcmFtIGhhc2hfaWR4ICAgICAgICAgIFRoZSBpbmRleCBvZiB0aGUgaGFzaCBkZXNpcmVkCisgICBAcGFyYW0gb3V0ICAgICAgICAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGlzIGFsZ29yaXRobQorICAgQHBhcmFtIG91dGxlbiAgICAgICAgICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGFsZ29yaXRobSBvdXRwdXQKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBwa2NzXzVfYWxnMihjb25zdCB1bnNpZ25lZCBjaGFyICpwYXNzd29yZCwgdW5zaWduZWQgbG9uZyBwYXNzd29yZF9sZW4sIAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsICAgICB1bnNpZ25lZCBsb25nIHNhbHRfbGVuLAorICAgICAgICAgICAgICAgIGludCBpdGVyYXRpb25fY291bnQsICAgICAgICAgICBpbnQgaGFzaF9pZHgsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIGludCBlcnIsIGl0dHM7CisgICB1bG9uZzMyICBibGtubzsKKyAgIHVuc2lnbmVkIGxvbmcgc3RvcmVkLCBsZWZ0LCB4LCB5OworICAgdW5zaWduZWQgY2hhciAqYnVmWzJdOworICAgaG1hY19zdGF0ZSAgICAqaG1hYzsKKworICAgTFRDX0FSR0NISyhwYXNzd29yZCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc2FsdCAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gICAhPSBOVUxMKTsKKworICAgLyogdGVzdCBoYXNoIElEWCAqLworICAgaWYgKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2hfaWR4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGJ1ZlswXSA9IFhNQUxMT0MoTUFYQkxPQ0tTSVpFICogMik7CisgICBobWFjICAgPSBYTUFMTE9DKHNpemVvZihobWFjX3N0YXRlKSk7CisgICBpZiAoaG1hYyA9PSBOVUxMIHx8IGJ1ZlswXSA9PSBOVUxMKSB7CisgICAgICBpZiAoaG1hYyAhPSBOVUxMKSB7CisgICAgICAgICBYRlJFRShobWFjKTsKKyAgICAgIH0KKyAgICAgIGlmIChidWZbMF0gIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUoYnVmWzBdKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICAvKiBidWZbMV0gcG9pbnRzIHRvIHRoZSBzZWNvbmQgYmxvY2sgb2YgTUFYQkxPQ0tTSVpFIGJ5dGVzICovCisgICBidWZbMV0gPSBidWZbMF0gKyBNQVhCTE9DS1NJWkU7CisKKyAgIGxlZnQgICA9ICpvdXRsZW47CisgICBibGtubyAgPSAxOworICAgc3RvcmVkID0gMDsKKyAgIHdoaWxlIChsZWZ0ICE9IDApIHsKKyAgICAgICAvKiBwcm9jZXNzIGJsb2NrIG51bWJlciBibGtubyAqLworICAgICAgIHplcm9tZW0oYnVmWzBdLCBNQVhCTE9DS1NJWkUqMik7CisgICAgICAgCisgICAgICAgLyogc3RvcmUgY3VycmVudCBibG9jayBudW1iZXIgYW5kIGluY3JlbWVudCBmb3IgbmV4dCBwYXNzICovCisgICAgICAgU1RPUkUzMkgoYmxrbm8sIGJ1ZlsxXSk7CisgICAgICAgKytibGtubzsKKworICAgICAgIC8qIGdldCBQUkYoUCwgU3x8aW50KGJsa25vKSkgKi8KKyAgICAgICBpZiAoKGVyciA9IGhtYWNfaW5pdChobWFjLCBoYXNoX2lkeCwgcGFzc3dvcmQsIHBhc3N3b3JkX2xlbikpICE9IENSWVBUX09LKSB7IAorICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICB9CisgICAgICAgaWYgKChlcnIgPSBobWFjX3Byb2Nlc3MoaG1hYywgc2FsdCwgc2FsdF9sZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICB9CisgICAgICAgaWYgKChlcnIgPSBobWFjX3Byb2Nlc3MoaG1hYywgYnVmWzFdLCA0KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgfQorICAgICAgIHggPSBNQVhCTE9DS1NJWkU7CisgICAgICAgaWYgKChlcnIgPSBobWFjX2RvbmUoaG1hYywgYnVmWzBdLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgIH0KKworICAgICAgIC8qIG5vdyBjb21wdXRlIHJlcGVhdGVkIGFuZCBYT1IgaXQgaW4gYnVmWzFdICovCisgICAgICAgWE1FTUNQWShidWZbMV0sIGJ1ZlswXSwgeCk7CisgICAgICAgZm9yIChpdHRzID0gMTsgaXR0cyA8IGl0ZXJhdGlvbl9jb3VudDsgKytpdHRzKSB7CisgICAgICAgICAgIGlmICgoZXJyID0gaG1hY19tZW1vcnkoaGFzaF9pZHgsIHBhc3N3b3JkLCBwYXNzd29yZF9sZW4sIGJ1ZlswXSwgeCwgYnVmWzBdLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgfQorICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgeDsgeSsrKSB7CisgICAgICAgICAgICAgICBidWZbMV1beV0gXj0gYnVmWzBdW3ldOworICAgICAgICAgICB9CisgICAgICAgfQorCisgICAgICAgLyogbm93IGVtaXQgdXB0byB4IGJ5dGVzIG9mIGJ1ZlsxXSB0byBvdXRwdXQgKi8KKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgeCAmJiBsZWZ0ICE9IDA7ICsreSkgeworICAgICAgICAgICBvdXRbc3RvcmVkKytdID0gYnVmWzFdW3ldOworICAgICAgICAgICAtLWxlZnQ7CisgICAgICAgfQorICAgfQorICAgKm91dGxlbiA9IHN0b3JlZDsKKworICAgZXJyID0gQ1JZUFRfT0s7CitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShidWZbMF0sIE1BWEJMT0NLU0laRSoyKTsKKyAgIHplcm9tZW0oaG1hYywgc2l6ZW9mKGhtYWNfc3RhdGUpKTsKKyNlbmRpZgorCisgICBYRlJFRShobWFjKTsKKyAgIFhGUkVFKGJ1ZlswXSk7CisKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL3BrY3M1L3BrY3NfNV8yLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbWlzYy96ZXJvbWVtLmMgYi9saWJ0b21jcnlwdC9zcmMvbWlzYy96ZXJvbWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJkYzNjMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9taXNjL3plcm9tZW0uYwpAQCAtMCwwICsxLDM0IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgemVyb21lbS5jCisgICBaZXJvIGEgYmxvY2sgb2YgbWVtb3J5LCBUb20gU3QgRGVuaXMKKyovCisKKy8qKgorICAgWmVybyBhIGJsb2NrIG9mIG1lbW9yeQorICAgQHBhcmFtIG91dCAgICBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGFyZWEgdG8gemVybworICAgQHBhcmFtIG91dGxlbiBUaGUgbGVuZ3RoIG9mIHRoZSBhcmVhIHRvIHplcm8gKG9jdGV0cykKKyovCit2b2lkIHplcm9tZW0odm9pZCAqb3V0LCBzaXplX3Qgb3V0bGVuKQoreworICAgdW5zaWduZWQgY2hhciAqbWVtID0gb3V0OworICAgTFRDX0FSR0NIS1ZEKG91dCAhPSBOVUxMKTsKKyAgIHdoaWxlIChvdXRsZW4tLSA+IDApIHsKKyAgICAgICptZW0rKyA9IDA7CisgICB9Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9taXNjL3plcm9tZW0uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzA5IDAxOjM4OjEzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMvY2JjX2RlY3J5cHQuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMvY2JjX2RlY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzY4ZDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2NiYy9jYmNfZGVjcnlwdC5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBjYmNfZGVjcnlwdC5jCisgICBDQkMgaW1wbGVtZW50YXRpb24sIGVuY3J5cHQgYmxvY2ssIFRvbSBTdCBEZW5pcworKi8KKworCisjaWZkZWYgTFRDX0NCQ19NT0RFCisKKy8qKgorICBDQkMgZGVjcnlwdAorICBAcGFyYW0gY3QgICAgIENpcGhlcnRleHQKKyAgQHBhcmFtIHB0ICAgICBbb3V0XSBQbGFpbnRleHQKKyAgQHBhcmFtIGxlbiAgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHByb2Nlc3MgKG11c3QgYmUgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoKQorICBAcGFyYW0gY2JjICAgIENCQyBzdGF0ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgY2JjX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0NCQyAqY2JjKQoreworICAgaW50IHgsIGVycjsKKyAgIHVuc2lnbmVkIGNoYXIgdG1wWzE2XTsKKyNpZmRlZiBMVENfRkFTVAorICAgTFRDX0ZBU1RfVFlQRSB0bXB5OworI2Vsc2UKKyAgIHVuc2lnbmVkIGNoYXIgdG1weTsKKyNlbmRpZiAgICAgICAgIAorCisgICBMVENfQVJHQ0hLKHB0ICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3QgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjYmMgIT0gTlVMTCk7CisKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNiYy0+Y2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICByZXR1cm4gZXJyOworICAgfQorICAgCisgICAvKiBpcyBibG9ja2xlbiB2YWxpZD8gKi8KKyAgIGlmIChjYmMtPmJsb2NrbGVuIDwgMSB8fCBjYmMtPmJsb2NrbGVuID4gKGludClzaXplb2YoY2JjLT5JVikpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0gICAgCisKKyAgIGlmIChsZW4gJSBjYmMtPmJsb2NrbGVuKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisjaWZkZWYgTFRDX0ZBU1QKKyAgIGlmIChjYmMtPmJsb2NrbGVuICUgc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7ICAgCisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisjZW5kaWYKKyAgIAorICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2NiYy0+Y2lwaGVyXS5hY2NlbF9jYmNfZGVjcnlwdCAhPSBOVUxMKSB7CisgICAgICByZXR1cm4gY2lwaGVyX2Rlc2NyaXB0b3JbY2JjLT5jaXBoZXJdLmFjY2VsX2NiY19kZWNyeXB0KGN0LCBwdCwgbGVuIC8gY2JjLT5ibG9ja2xlbiwgY2JjLT5JViwgJmNiYy0+a2V5KTsKKyAgIH0gZWxzZSB7CisgICAgICB3aGlsZSAobGVuKSB7CisgICAgICAgICAvKiBkZWNyeXB0ICovCisgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NiYy0+Y2lwaGVyXS5lY2JfZGVjcnlwdChjdCwgdG1wLCAmY2JjLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KKworICAgICAgICAgLyogeG9yIElWIGFnYWluc3QgcGxhaW50ZXh0ICovCisgICAgICAgICAjaWYgZGVmaW5lZChMVENfRkFTVCkKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IGNiYy0+YmxvY2tsZW47IHggKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICB0bXB5ID0gKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopY2JjLT5JViArIHgpKSBeICooKExUQ19GQVNUX1RZUEUqKSgodW5zaWduZWQgY2hhciAqKXRtcCArIHgpKTsKKyAgICAgICAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKiljYmMtPklWICsgeCkpID0gKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopY3QgKyB4KSk7CisgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopcHQgKyB4KSkgPSB0bXB5OworICAgICAgICB9CisgICAgI2Vsc2UgCisgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgY2JjLT5ibG9ja2xlbjsgeCsrKSB7CisgICAgICAgICAgICAgICB0bXB5ICAgICAgID0gdG1wW3hdIF4gY2JjLT5JVlt4XTsKKyAgICAgICAgICAgICAgIGNiYy0+SVZbeF0gPSBjdFt4XTsKKyAgICAgICAgICAgICAgIHB0W3hdICAgICAgPSB0bXB5OworICAgICAgICAgICAgfQorICAgICNlbmRpZgorICAgICAgIAorICAgICAgICAgY3QgICs9IGNiYy0+YmxvY2tsZW47CisgICAgICAgICBwdCAgKz0gY2JjLT5ibG9ja2xlbjsKKyAgICAgICAgIGxlbiAtPSBjYmMtPmJsb2NrbGVuOworICAgICAgfQorICAgfQorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2NiYy9jYmNfZGVjcnlwdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjE1ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzIxIDAwOjE4OjIzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMvY2JjX2RvbmUuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMvY2JjX2RvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWIwMzVlCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2NiYy9jYmNfZG9uZS5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBjYmNfZG9uZS5jCisgICBDQkMgaW1wbGVtZW50YXRpb24sIGZpbmlzaCBjaGFpbiwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0NCQ19NT0RFCisKKy8qKiBUZXJtaW5hdGUgdGhlIGNoYWluCisgIEBwYXJhbSBjYmMgICAgVGhlIENCQyBjaGFpbiB0byB0ZXJtaW5hdGUKKyAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGNiY19kb25lKHN5bW1ldHJpY19DQkMgKmNiYykKK3sKKyAgIGludCBlcnI7CisgICBMVENfQVJHQ0hLKGNiYyAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2JjLT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGNpcGhlcl9kZXNjcmlwdG9yW2NiYy0+Y2lwaGVyXS5kb25lKCZjYmMtPmtleSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyAgIAorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2NiYy9jYmNfZG9uZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NDY6NDYgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2NiYy9jYmNfZW5jcnlwdC5jIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2NiYy9jYmNfZW5jcnlwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiZmQxYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2JjL2NiY19lbmNyeXB0LmMKQEAgLTAsMCArMSw5OCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIGNiY19lbmNyeXB0LmMKKyAgIENCQyBpbXBsZW1lbnRhdGlvbiwgZW5jcnlwdCBibG9jaywgVG9tIFN0IERlbmlzCisqLworCisKKyNpZmRlZiBMVENfQ0JDX01PREUKKworLyoqCisgIENCQyBlbmNyeXB0CisgIEBwYXJhbSBwdCAgICAgUGxhaW50ZXh0CisgIEBwYXJhbSBjdCAgICAgW291dF0gQ2lwaGVydGV4dAorICBAcGFyYW0gbGVuICAgIFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gcHJvY2VzcyAobXVzdCBiZSBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgpCisgIEBwYXJhbSBjYmMgICAgQ0JDIHN0YXRlCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBjYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfQ0JDICpjYmMpCit7CisgICBpbnQgeCwgZXJyOworCisgICBMVENfQVJHQ0hLKHB0ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY2JjICE9IE5VTEwpOworCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChjYmMtPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIAorICAgLyogaXMgYmxvY2tsZW4gdmFsaWQ/ICovCisgICBpZiAoY2JjLT5ibG9ja2xlbiA8IDEgfHwgY2JjLT5ibG9ja2xlbiA+IChpbnQpc2l6ZW9mKGNiYy0+SVYpKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9ICAgIAorCisgICBpZiAobGVuICUgY2JjLT5ibG9ja2xlbikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorI2lmZGVmIExUQ19GQVNUCisgICBpZiAoY2JjLT5ibG9ja2xlbiAlIHNpemVvZihMVENfRkFTVF9UWVBFKSkgeyAgIAorICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorI2VuZGlmCisKKyAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltjYmMtPmNpcGhlcl0uYWNjZWxfY2JjX2VuY3J5cHQgIT0gTlVMTCkgeworICAgICAgcmV0dXJuIGNpcGhlcl9kZXNjcmlwdG9yW2NiYy0+Y2lwaGVyXS5hY2NlbF9jYmNfZW5jcnlwdChwdCwgY3QsIGxlbiAvIGNiYy0+YmxvY2tsZW4sIGNiYy0+SVYsICZjYmMtPmtleSk7CisgICB9IGVsc2UgeworICAgICAgd2hpbGUgKGxlbikgeworICAgICAgICAgLyogeG9yIElWIGFnYWluc3QgcGxhaW50ZXh0ICovCisgICAgICAgICAjaWYgZGVmaW5lZChMVENfRkFTVCkKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IGNiYy0+YmxvY2tsZW47IHggKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKiljYmMtPklWICsgeCkpIF49ICooKExUQ19GQVNUX1RZUEUqKSgodW5zaWduZWQgY2hhciAqKXB0ICsgeCkpOworICAgICAgICB9CisgICAgI2Vsc2UgCisgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgY2JjLT5ibG9ja2xlbjsgeCsrKSB7CisgICAgICAgICAgICAgICBjYmMtPklWW3hdIF49IHB0W3hdOworICAgICAgICAgICAgfQorICAgICNlbmRpZgorCisgICAgICAgICAvKiBlbmNyeXB0ICovCisgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NiYy0+Y2lwaGVyXS5lY2JfZW5jcnlwdChjYmMtPklWLCBjdCwgJmNiYy0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICB9CisKKyAgICAgICAgLyogc3RvcmUgSVYgW2NpcGhlcnRleHRdIGZvciBhIGZ1dHVyZSBibG9jayAqLworICAgICAgICAgI2lmIGRlZmluZWQoTFRDX0ZBU1QpCisgICAgICAgIGZvciAoeCA9IDA7IHggPCBjYmMtPmJsb2NrbGVuOyB4ICs9IHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopY2JjLT5JViArIHgpKSA9ICooKExUQ19GQVNUX1RZUEUqKSgodW5zaWduZWQgY2hhciAqKWN0ICsgeCkpOworICAgICAgICB9CisgICAgI2Vsc2UgCisgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGNiYy0+YmxvY2tsZW47IHgrKykgeworICAgICAgICAgICAgICAgIGNiYy0+SVZbeF0gPSBjdFt4XTsKKyAgICAgICAgICAgICB9CisgICAgI2VuZGlmCisgICAgICAgIAorICAgICAgICBjdCAgKz0gY2JjLT5ibG9ja2xlbjsKKyAgICAgICAgcHQgICs9IGNiYy0+YmxvY2tsZW47CisgICAgICAgIGxlbiAtPSBjYmMtPmJsb2NrbGVuOworICAgICB9CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2JjL2NiY19lbmNyeXB0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTMgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjEgMDA6MTg6MjMgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2NiYy9jYmNfZ2V0aXYuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMvY2JjX2dldGl2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU0ZDU1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMvY2JjX2dldGl2LmMKQEAgLTAsMCArMSw0NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIGNiY19nZXRpdi5jCisgICBDQkMgaW1wbGVtZW50YXRpb24sIGdldCBJViwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0NCQ19NT0RFCisKKy8qKgorICAgR2V0IHRoZSBjdXJyZW50IGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gSVYgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gbGVuICBbaW4vb3V0XSAgVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgaW5pdGlhbCB2ZWN0b3IKKyAgIEBwYXJhbSBjYmMgIFRoZSBDQkMgc3RhdGUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBjYmNfZ2V0aXYodW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgKmxlbiwgc3ltbWV0cmljX0NCQyAqY2JjKQoreworICAgTFRDX0FSR0NISyhJViAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY2JjICE9IE5VTEwpOworICAgaWYgKCh1bnNpZ25lZCBsb25nKWNiYy0+YmxvY2tsZW4gPiAqbGVuKSB7CisgICAgICAqbGVuID0gY2JjLT5ibG9ja2xlbjsKKyAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisgICBYTUVNQ1BZKElWLCBjYmMtPklWLCBjYmMtPmJsb2NrbGVuKTsKKyAgICpsZW4gPSBjYmMtPmJsb2NrbGVuOworCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2JjL2NiY19nZXRpdi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NDY6NDYgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2NiYy9jYmNfc2V0aXYuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMvY2JjX3NldGl2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZiNzBjYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMvY2JjX3NldGl2LmMKQEAgLTAsMCArMSw0NCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIGNiY19zZXRpdi5jCisgICBDQkMgaW1wbGVtZW50YXRpb24sIHNldCBJViwgVG9tIFN0IERlbmlzCisqLworCisKKyNpZmRlZiBMVENfQ0JDX01PREUKKworLyoqCisgICBTZXQgYW4gaW5pdGlhbCB2ZWN0b3IKKyAgIEBwYXJhbSBJViAgIFRoZSBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIGxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yIChpbiBvY3RldHMpCisgICBAcGFyYW0gY2JjICBUaGUgQ0JDIHN0YXRlCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgY2JjX3NldGl2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0NCQyAqY2JjKQoreworICAgTFRDX0FSR0NISyhJViAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGNiYyAhPSBOVUxMKTsKKyAgIGlmIChsZW4gIT0gKHVuc2lnbmVkIGxvbmcpY2JjLT5ibG9ja2xlbikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorICAgWE1FTUNQWShjYmMtPklWLCBJViwgbGVuKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmIAorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMvY2JjX3NldGl2LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo0Njo0NiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2JjL2NiY19zdGFydC5jIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2NiYy9jYmNfc3RhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmVjN2I5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2NiYy9jYmNfc3RhcnQuYwpAQCAtMCwwICsxLDYyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgY2JjX3N0YXJ0LmMKKyAgIENCQyBpbXBsZW1lbnRhdGlvbiwgc3RhcnQgY2hhaW4sIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19DQkNfTU9ERQorCisvKioKKyAgIEluaXRpYWxpemUgYSBDQkMgY29udGV4dAorICAgQHBhcmFtIGNpcGhlciAgICAgIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGRlc2lyZWQKKyAgIEBwYXJhbSBJViAgICAgICAgICBUaGUgaW5pdGlhbCB2ZWN0b3IKKyAgIEBwYXJhbSBrZXkgICAgICAgICBUaGUgc2VjcmV0IGtleSAKKyAgIEBwYXJhbSBrZXlsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQga2V5IChvY3RldHMpCisgICBAcGFyYW0gbnVtX3JvdW5kcyAgTnVtYmVyIG9mIHJvdW5kcyBpbiB0aGUgY2lwaGVyIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICBAcGFyYW0gY2JjICAgICAgICAgVGhlIENCQyBzdGF0ZSB0byBpbml0aWFsaXplCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgY2JjX3N0YXJ0KGludCBjaXBoZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX0NCQyAqY2JjKQoreworICAgaW50IHgsIGVycjsKKyAKKyAgIExUQ19BUkdDSEsoSVYgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY2JjICE9IE5VTEwpOworCisgICAvKiBiYWQgcGFyYW0/ICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChjaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogc2V0dXAgY2lwaGVyICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uc2V0dXAoa2V5LCBrZXlsZW4sIG51bV9yb3VuZHMsICZjYmMtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBjb3B5IElWICovCisgICBjYmMtPmJsb2NrbGVuID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5ibG9ja19sZW5ndGg7CisgICBjYmMtPmNpcGhlciAgID0gY2lwaGVyOworICAgZm9yICh4ID0gMDsgeCA8IGNiYy0+YmxvY2tsZW47IHgrKykgeworICAgICAgIGNiYy0+SVZbeF0gPSBJVlt4XTsKKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jYmMvY2JjX3N0YXJ0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo0Njo0NiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiL2NmYl9kZWNyeXB0LmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiL2NmYl9kZWNyeXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZhNGRlMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX2RlY3J5cHQuYwpAQCAtMCwwICsxLDY3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBjZmJfZGVjcnlwdC5jCisgIENGQiBpbXBsZW1lbnRhdGlvbiwgZGVjcnlwdCBkYXRhLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfQ0ZCX01PREUKKworLyoqCisgICBDRkIgZGVjcnlwdAorICAgQHBhcmFtIGN0ICAgICAgQ2lwaGVydGV4dAorICAgQHBhcmFtIHB0ICAgICAgW291dF0gUGxhaW50ZXh0CisgICBAcGFyYW0gbGVuICAgICBMZW5ndGggb2YgY2lwaGVydGV4dCAob2N0ZXRzKQorICAgQHBhcmFtIGNmYiAgICAgQ0ZCIHN0YXRlCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgY2ZiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0NGQiAqY2ZiKQoreworICAgaW50IGVycjsKKworICAgTFRDX0FSR0NISyhwdCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3QgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGNmYiAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2ZiLT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIGlzIGJsb2NrbGVuL3BhZGxlbiB2YWxpZD8gKi8KKyAgIGlmIChjZmItPmJsb2NrbGVuIDwgMCB8fCBjZmItPmJsb2NrbGVuID4gKGludClzaXplb2YoY2ZiLT5JVikgfHwKKyAgICAgICBjZmItPnBhZGxlbiAgIDwgMCB8fCBjZmItPnBhZGxlbiAgID4gKGludClzaXplb2YoY2ZiLT5wYWQpKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIHdoaWxlIChsZW4tLSA+IDApIHsKKyAgICAgICBpZiAoY2ZiLT5wYWRsZW4gPT0gY2ZiLT5ibG9ja2xlbikgeworICAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2ZiLT5jaXBoZXJdLmVjYl9lbmNyeXB0KGNmYi0+cGFkLCBjZmItPklWLCAmY2ZiLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorICAgICAgICAgIGNmYi0+cGFkbGVuID0gMDsKKyAgICAgICB9CisgICAgICAgY2ZiLT5wYWRbY2ZiLT5wYWRsZW5dID0gKmN0OworICAgICAgICpwdCA9ICpjdCBeIGNmYi0+SVZbY2ZiLT5wYWRsZW5dOworICAgICAgICsrcHQ7IAorICAgICAgICsrY3Q7CisgICAgICAgKysoY2ZiLT5wYWRsZW4pOworICAgfQorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiL2NmYl9kZWNyeXB0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yNiAwMTo0NToxNCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiL2NmYl9kb25lLmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiL2NmYl9kb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVlOWQ1MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX2RvbmUuYwpAQCAtMCwwICsxLDQyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgY2ZiX2RvbmUuYworICAgQ0ZCIGltcGxlbWVudGF0aW9uLCBmaW5pc2ggY2hhaW4sIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19DRkJfTU9ERQorCisvKiogVGVybWluYXRlIHRoZSBjaGFpbgorICBAcGFyYW0gY2ZiICAgIFRoZSBDRkIgY2hhaW4gdG8gdGVybWluYXRlCisgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCBjZmJfZG9uZShzeW1tZXRyaWNfQ0ZCICpjZmIpCit7CisgICBpbnQgZXJyOworICAgTFRDX0FSR0NISyhjZmIgIT0gTlVMTCk7CisKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNmYi0+Y2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBjaXBoZXJfZGVzY3JpcHRvcltjZmItPmNpcGhlcl0uZG9uZSgmY2ZiLT5rZXkpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisgICAKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX2RvbmUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX2VuY3J5cHQuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX2VuY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjE5NjgyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2NmYi9jZmJfZW5jcnlwdC5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGNmYl9lbmNyeXB0LmMKKyAgQ0ZCIGltcGxlbWVudGF0aW9uLCBlbmNyeXB0IGRhdGEsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19DRkJfTU9ERQorCisvKioKKyAgQ0ZCIGVuY3J5cHQKKyAgQHBhcmFtIHB0ICAgICBQbGFpbnRleHQKKyAgQHBhcmFtIGN0ICAgICBbb3V0XSBDaXBoZXJ0ZXh0CisgIEBwYXJhbSBsZW4gICAgTGVuZ3RoIG9mIHBsYWludGV4dCAob2N0ZXRzKQorICBAcGFyYW0gY2ZiICAgIENGQiBzdGF0ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgY2ZiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0NGQiAqY2ZiKQoreworICAgaW50IGVycjsKKworICAgTFRDX0FSR0NISyhwdCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3QgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGNmYiAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2ZiLT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIGlzIGJsb2NrbGVuL3BhZGxlbiB2YWxpZD8gKi8KKyAgIGlmIChjZmItPmJsb2NrbGVuIDwgMCB8fCBjZmItPmJsb2NrbGVuID4gKGludClzaXplb2YoY2ZiLT5JVikgfHwKKyAgICAgICBjZmItPnBhZGxlbiAgIDwgMCB8fCBjZmItPnBhZGxlbiAgID4gKGludClzaXplb2YoY2ZiLT5wYWQpKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIHdoaWxlIChsZW4tLSA+IDApIHsKKyAgICAgICBpZiAoY2ZiLT5wYWRsZW4gPT0gY2ZiLT5ibG9ja2xlbikgeworICAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2ZiLT5jaXBoZXJdLmVjYl9lbmNyeXB0KGNmYi0+cGFkLCBjZmItPklWLCAmY2ZiLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorICAgICAgICAgIGNmYi0+cGFkbGVuID0gMDsKKyAgICAgICB9CisgICAgICAgY2ZiLT5wYWRbY2ZiLT5wYWRsZW5dID0gKCpjdCA9ICpwdCBeIGNmYi0+SVZbY2ZiLT5wYWRsZW5dKTsKKyAgICAgICArK3B0OyAKKyAgICAgICArK2N0OworICAgICAgICsrKGNmYi0+cGFkbGVuKTsKKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX2VuY3J5cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI2IDAxOjQ1OjE0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX2dldGl2LmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiL2NmYl9nZXRpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ODlhNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiL2NmYl9nZXRpdi5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBjZmJfZ2V0aXYuYworICAgQ0ZCIGltcGxlbWVudGF0aW9uLCBnZXQgSVYsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19DRkJfTU9ERQorCisvKioKKyAgIEdldCB0aGUgY3VycmVudCBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIElWICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIGxlbiAgW2luL291dF0gIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gY2ZiICBUaGUgQ0ZCIHN0YXRlCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgY2ZiX2dldGl2KHVuc2lnbmVkIGNoYXIgKklWLCB1bnNpZ25lZCBsb25nICpsZW4sIHN5bW1ldHJpY19DRkIgKmNmYikKK3sKKyAgIExUQ19BUkdDSEsoSVYgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhsZW4gIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGNmYiAhPSBOVUxMKTsKKyAgIGlmICgodW5zaWduZWQgbG9uZyljZmItPmJsb2NrbGVuID4gKmxlbikgeworICAgICAgKmxlbiA9IGNmYi0+YmxvY2tsZW47CisgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgfQorICAgWE1FTUNQWShJViwgY2ZiLT5JViwgY2ZiLT5ibG9ja2xlbik7CisgICAqbGVuID0gY2ZiLT5ibG9ja2xlbjsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2NmYi9jZmJfZ2V0aXYuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX3NldGl2LmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiL2NmYl9zZXRpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmYjg0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiL2NmYl9zZXRpdi5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGNmYl9zZXRpdi5jCisgIENGQiBpbXBsZW1lbnRhdGlvbiwgc2V0IElWLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIExUQ19DRkJfTU9ERQorCisvKioKKyAgIFNldCBhbiBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIElWICAgVGhlIGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gbGVuICBUaGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3IgKGluIG9jdGV0cykKKyAgIEBwYXJhbSBjZmIgIFRoZSBDRkIgc3RhdGUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBjZmJfc2V0aXYoY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfQ0ZCICpjZmIpCit7CisgICBpbnQgZXJyOworICAgCisgICBMVENfQVJHQ0hLKElWICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY2ZiICE9IE5VTEwpOworCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChjZmItPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIAorICAgaWYgKGxlbiAhPSAodW5zaWduZWQgbG9uZyljZmItPmJsb2NrbGVuKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisgICAgICAKKyAgIC8qIGZvcmNlIG5leHQgYmxvY2sgKi8KKyAgIGNmYi0+cGFkbGVuID0gMDsKKyAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltjZmItPmNpcGhlcl0uZWNiX2VuY3J5cHQoSVYsIGNmYi0+SVYsICZjZmItPmtleSk7Cit9CisKKyNlbmRpZiAKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY2ZiL2NmYl9zZXRpdi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NTE6MzQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2NmYi9jZmJfc3RhcnQuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX3N0YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcwZDYzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jZmIvY2ZiX3N0YXJ0LmMKQEAgLTAsMCArMSw2NSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIGNmYl9zdGFydC5jCisgICBDRkIgaW1wbGVtZW50YXRpb24sIHN0YXJ0IGNoYWluLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19DRkJfTU9ERQorCisvKioKKyAgIEluaXRpYWxpemUgYSBDRkIgY29udGV4dAorICAgQHBhcmFtIGNpcGhlciAgICAgIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGRlc2lyZWQKKyAgIEBwYXJhbSBJViAgICAgICAgICBUaGUgaW5pdGlhbCB2ZWN0b3IKKyAgIEBwYXJhbSBrZXkgICAgICAgICBUaGUgc2VjcmV0IGtleSAKKyAgIEBwYXJhbSBrZXlsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQga2V5IChvY3RldHMpCisgICBAcGFyYW0gbnVtX3JvdW5kcyAgTnVtYmVyIG9mIHJvdW5kcyBpbiB0aGUgY2lwaGVyIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICBAcGFyYW0gY2ZiICAgICAgICAgVGhlIENGQiBzdGF0ZSB0byBpbml0aWFsaXplCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgY2ZiX3N0YXJ0KGludCBjaXBoZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX0NGQiAqY2ZiKQoreworICAgaW50IHgsIGVycjsKKworICAgTFRDX0FSR0NISyhJViAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjZmIgIT0gTlVMTCk7CisKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgCisKKyAgIC8qIGNvcHkgZGF0YSAqLworICAgY2ZiLT5jaXBoZXIgPSBjaXBoZXI7CisgICBjZmItPmJsb2NrbGVuID0gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5ibG9ja19sZW5ndGg7CisgICBmb3IgKHggPSAwOyB4IDwgY2ZiLT5ibG9ja2xlbjsgeCsrKQorICAgICAgIGNmYi0+SVZbeF0gPSBJVlt4XTsKKworICAgLyogaW5pdCB0aGUgY2lwaGVyICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uc2V0dXAoa2V5LCBrZXlsZW4sIG51bV9yb3VuZHMsICZjZmItPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBlbmNyeXB0IHRoZSBJViAqLworICAgY2ZiLT5wYWRsZW4gPSAwOworICAgcmV0dXJuIGNpcGhlcl9kZXNjcmlwdG9yW2NmYi0+Y2lwaGVyXS5lY2JfZW5jcnlwdChjZmItPklWLCBjZmItPklWLCAmY2ZiLT5rZXkpOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2NmYi9jZmJfc3RhcnQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX2RlY3J5cHQuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX2RlY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzI4MjFmCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2N0ci9jdHJfZGVjcnlwdC5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGN0cl9kZWNyeXB0LmMKKyAgQ1RSIGltcGxlbWVudGF0aW9uLCBkZWNyeXB0IGRhdGEsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19DVFJfTU9ERQorCisvKioKKyAgIENUUiBkZWNyeXB0CisgICBAcGFyYW0gY3QgICAgICBDaXBoZXJ0ZXh0CisgICBAcGFyYW0gcHQgICAgICBbb3V0XSBQbGFpbnRleHQKKyAgIEBwYXJhbSBsZW4gICAgIExlbmd0aCBvZiBjaXBoZXJ0ZXh0IChvY3RldHMpCisgICBAcGFyYW0gY3RyICAgICBDVFIgc3RhdGUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBjdHJfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfQ1RSICpjdHIpCit7CisgICBMVENfQVJHQ0hLKHB0ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3RyICE9IE5VTEwpOworCisgICByZXR1cm4gY3RyX2VuY3J5cHQoY3QsIHB0LCBsZW4sIGN0cik7Cit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX2RlY3J5cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjQ2OjQ2ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX2RvbmUuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX2RvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzRjOGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2N0ci9jdHJfZG9uZS5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBjdHJfZG9uZS5jCisgICBDVFIgaW1wbGVtZW50YXRpb24sIGZpbmlzaCBjaGFpbiwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0NUUl9NT0RFCisKKy8qKiBUZXJtaW5hdGUgdGhlIGNoYWluCisgIEBwYXJhbSBjdHIgICAgVGhlIENUUiBjaGFpbiB0byB0ZXJtaW5hdGUKKyAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGN0cl9kb25lKHN5bW1ldHJpY19DVFIgKmN0cikKK3sKKyAgIGludCBlcnI7CisgICBMVENfQVJHQ0hLKGN0ciAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY3RyLT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGNpcGhlcl9kZXNjcmlwdG9yW2N0ci0+Y2lwaGVyXS5kb25lKCZjdHItPmtleSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyAgIAorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2N0ci9jdHJfZG9uZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NDY6NDYgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2N0ci9jdHJfZW5jcnlwdC5jIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2N0ci9jdHJfZW5jcnlwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0ZGQ2NWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyL2N0cl9lbmNyeXB0LmMKQEAgLTAsMCArMSwxMTIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGN0cl9lbmNyeXB0LmMKKyAgQ1RSIGltcGxlbWVudGF0aW9uLCBlbmNyeXB0IGRhdGEsIFRvbSBTdCBEZW5pcworKi8KKworCisjaWZkZWYgTFRDX0NUUl9NT0RFCisKKy8qKgorICBDVFIgZW5jcnlwdAorICBAcGFyYW0gcHQgICAgIFBsYWludGV4dAorICBAcGFyYW0gY3QgICAgIFtvdXRdIENpcGhlcnRleHQKKyAgQHBhcmFtIGxlbiAgICBMZW5ndGggb2YgcGxhaW50ZXh0IChvY3RldHMpCisgIEBwYXJhbSBjdHIgICAgQ1RSIHN0YXRlCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBjdHJfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfQ1RSICpjdHIpCit7CisgICBpbnQgeCwgZXJyOworCisgICBMVENfQVJHQ0hLKHB0ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3RyICE9IE5VTEwpOworCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChjdHItPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIAorICAgLyogaXMgYmxvY2tsZW4vcGFkbGVuIHZhbGlkPyAqLworICAgaWYgKGN0ci0+YmxvY2tsZW4gPCAxIHx8IGN0ci0+YmxvY2tsZW4gPiAoaW50KXNpemVvZihjdHItPmN0cikgfHwKKyAgICAgICBjdHItPnBhZGxlbiAgIDwgMCB8fCBjdHItPnBhZGxlbiAgID4gKGludClzaXplb2YoY3RyLT5wYWQpKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyNpZmRlZiBMVENfRkFTVAorICAgaWYgKGN0ci0+YmxvY2tsZW4gJSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKyNlbmRpZgorICAgCisgICAvKiBoYW5kbGUgYWNjZWxlcmF0aW9uIG9ubHkgaWYgcGFkIGlzIGVtcHR5LCBhY2NlbGVyYXRvciBpcyBwcmVzZW50IGFuZCBsZW5ndGggaXMgPj0gYSBibG9jayBzaXplICovCisgICBpZiAoKGN0ci0+cGFkbGVuID09IGN0ci0+YmxvY2tsZW4pICYmIGNpcGhlcl9kZXNjcmlwdG9yW2N0ci0+Y2lwaGVyXS5hY2NlbF9jdHJfZW5jcnlwdCAhPSBOVUxMICYmIChsZW4gPj0gKHVuc2lnbmVkIGxvbmcpY3RyLT5ibG9ja2xlbikpIHsKKyAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbY3RyLT5jaXBoZXJdLmFjY2VsX2N0cl9lbmNyeXB0KHB0LCBjdCwgbGVuL2N0ci0+YmxvY2tsZW4sIGN0ci0+Y3RyLCBjdHItPm1vZGUsICZjdHItPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgICAgbGVuICU9IGN0ci0+YmxvY2tsZW47CisgICB9CisKKyAgIHdoaWxlIChsZW4pIHsKKyAgICAgIC8qIGlzIHRoZSBwYWQgZW1wdHk/ICovCisgICAgICBpZiAoY3RyLT5wYWRsZW4gPT0gY3RyLT5ibG9ja2xlbikgeworICAgICAgICAgLyogaW5jcmVtZW50IGNvdW50ZXIgKi8KKyAgICAgICAgIGlmIChjdHItPm1vZGUgPT0gQ1RSX0NPVU5URVJfTElUVExFX0VORElBTikgeworICAgICAgICAgICAgLyogbGl0dGxlLWVuZGlhbiAqLworICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGN0ci0+YmxvY2tsZW47IHgrKykgeworICAgICAgICAgICAgICAgY3RyLT5jdHJbeF0gPSAoY3RyLT5jdHJbeF0gKyAodW5zaWduZWQgY2hhcikxKSAmICh1bnNpZ25lZCBjaGFyKTI1NTsKKyAgICAgICAgICAgICAgIGlmIChjdHItPmN0clt4XSAhPSAodW5zaWduZWQgY2hhcikwKSB7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBiaWctZW5kaWFuICovCisgICAgICAgICAgICBmb3IgKHggPSBjdHItPmJsb2NrbGVuLTE7IHggPj0gMDsgeC0tKSB7CisgICAgICAgICAgICAgICBjdHItPmN0clt4XSA9IChjdHItPmN0clt4XSArICh1bnNpZ25lZCBjaGFyKTEpICYgKHVuc2lnbmVkIGNoYXIpMjU1OworICAgICAgICAgICAgICAgaWYgKGN0ci0+Y3RyW3hdICE9ICh1bnNpZ25lZCBjaGFyKTApIHsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgfQorCisgICAgICAgICAvKiBlbmNyeXB0IGl0ICovCisgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2N0ci0+Y2lwaGVyXS5lY2JfZW5jcnlwdChjdHItPmN0ciwgY3RyLT5wYWQsICZjdHItPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgfQorICAgICAgICAgY3RyLT5wYWRsZW4gPSAwOworICAgICAgfQorI2lmZGVmIExUQ19GQVNUCisgICAgICBpZiAoY3RyLT5wYWRsZW4gPT0gMCAmJiBsZW4gPj0gKHVuc2lnbmVkIGxvbmcpY3RyLT5ibG9ja2xlbikgeworICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGN0ci0+YmxvY2tsZW47IHggKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICAqKChMVENfRkFTVF9UWVBFKikoKHVuc2lnbmVkIGNoYXIgKiljdCArIHgpKSA9ICooKExUQ19GQVNUX1RZUEUqKSgodW5zaWduZWQgY2hhciAqKXB0ICsgeCkpIF4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCh1bnNpZ25lZCBjaGFyICopY3RyLT5wYWQgKyB4KSk7CisgICAgICAgICB9CisgICAgICAgcHQgICAgICAgICArPSBjdHItPmJsb2NrbGVuOworICAgICAgIGN0ICAgICAgICAgKz0gY3RyLT5ibG9ja2xlbjsKKyAgICAgICBsZW4gICAgICAgIC09IGN0ci0+YmxvY2tsZW47CisgICAgICAgY3RyLT5wYWRsZW4gPSBjdHItPmJsb2NrbGVuOworICAgICAgIGNvbnRpbnVlOworICAgICAgfQorI2VuZGlmICAgIAorICAgICAgKmN0KysgPSAqcHQrKyBeIGN0ci0+cGFkW2N0ci0+cGFkbGVuKytdOworICAgICAgLS1sZW47CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyL2N0cl9lbmNyeXB0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMjAgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjEgMDA6MTg6MjMgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2N0ci9jdHJfZ2V0aXYuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX2dldGl2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZiZjg4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX2dldGl2LmMKQEAgLTAsMCArMSw0NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIGN0cl9nZXRpdi5jCisgICBDVFIgaW1wbGVtZW50YXRpb24sIGdldCBJViwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0NUUl9NT0RFCisKKy8qKgorICAgR2V0IHRoZSBjdXJyZW50IGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gSVYgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gbGVuICBbaW4vb3V0XSAgVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgaW5pdGlhbCB2ZWN0b3IKKyAgIEBwYXJhbSBjdHIgIFRoZSBDVFIgc3RhdGUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBjdHJfZ2V0aXYodW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgKmxlbiwgc3ltbWV0cmljX0NUUiAqY3RyKQoreworICAgTFRDX0FSR0NISyhJViAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3RyICE9IE5VTEwpOworICAgaWYgKCh1bnNpZ25lZCBsb25nKWN0ci0+YmxvY2tsZW4gPiAqbGVuKSB7CisgICAgICAqbGVuID0gY3RyLT5ibG9ja2xlbjsKKyAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisgICBYTUVNQ1BZKElWLCBjdHItPmN0ciwgY3RyLT5ibG9ja2xlbik7CisgICAqbGVuID0gY3RyLT5ibG9ja2xlbjsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2N0ci9jdHJfZ2V0aXYuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjQ2OjQ2ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX3NldGl2LmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyL2N0cl9zZXRpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlODY0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyL2N0cl9zZXRpdi5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGN0cl9zZXRpdi5jCisgIENUUiBpbXBsZW1lbnRhdGlvbiwgc2V0IElWLCBUb20gU3QgRGVuaXMKKyovCisgIAorI2lmZGVmIExUQ19DVFJfTU9ERQorCisvKioKKyAgIFNldCBhbiBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIElWICAgVGhlIGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gbGVuICBUaGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3IgKGluIG9jdGV0cykKKyAgIEBwYXJhbSBjdHIgIFRoZSBDVFIgc3RhdGUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBjdHJfc2V0aXYoY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfQ1RSICpjdHIpCit7CisgICBpbnQgZXJyOworICAgCisgICBMVENfQVJHQ0hLKElWICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3RyICE9IE5VTEwpOworCisgICAvKiBiYWQgcGFyYW0/ICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChjdHItPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgCisgICBpZiAobGVuICE9ICh1bnNpZ25lZCBsb25nKWN0ci0+YmxvY2tsZW4pIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgLyogc2V0IElWICovCisgICBYTUVNQ1BZKGN0ci0+Y3RyLCBJViwgbGVuKTsKKyAgIAorICAgLyogZm9yY2UgbmV4dCBibG9jayAqLworICAgY3RyLT5wYWRsZW4gPSAwOworICAgcmV0dXJuIGNpcGhlcl9kZXNjcmlwdG9yW2N0ci0+Y2lwaGVyXS5lY2JfZW5jcnlwdChJViwgY3RyLT5wYWQsICZjdHItPmtleSk7Cit9CisKKyNlbmRpZiAKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyL2N0cl9zZXRpdi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NDY6NDYgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2N0ci9jdHJfc3RhcnQuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX3N0YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1YzhhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX3N0YXJ0LmMKQEAgLTAsMCArMSw5MSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIGN0cl9zdGFydC5jCisgICBDVFIgaW1wbGVtZW50YXRpb24sIHN0YXJ0IGNoYWluLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19DVFJfTU9ERQorCisvKioKKyAgIEluaXRpYWxpemUgYSBDVFIgY29udGV4dAorICAgQHBhcmFtIGNpcGhlciAgICAgIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGRlc2lyZWQKKyAgIEBwYXJhbSBJViAgICAgICAgICBUaGUgaW5pdGlhbCB2ZWN0b3IKKyAgIEBwYXJhbSBrZXkgICAgICAgICBUaGUgc2VjcmV0IGtleSAKKyAgIEBwYXJhbSBrZXlsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQga2V5IChvY3RldHMpCisgICBAcGFyYW0gbnVtX3JvdW5kcyAgTnVtYmVyIG9mIHJvdW5kcyBpbiB0aGUgY2lwaGVyIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICBAcGFyYW0gY3RyX21vZGUgICAgVGhlIGNvdW50ZXIgbW9kZSAoQ1RSX0NPVU5URVJfTElUVExFX0VORElBTiBvciBDVFJfQ09VTlRFUl9CSUdfRU5ESUFOKQorICAgQHBhcmFtIGN0ciAgICAgICAgIFRoZSBDVFIgc3RhdGUgdG8gaW5pdGlhbGl6ZQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGN0cl9zdGFydCggICAgICAgICAgICAgICBpbnQgICBjaXBoZXIsIAorICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpJViwgCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgICAgaW50IGtleWxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbnVtX3JvdW5kcywgaW50IGN0cl9tb2RlLAorICAgICAgICAgICAgICAgICAgIHN5bW1ldHJpY19DVFIgKmN0cikKK3sKKyAgIGludCB4LCBlcnI7CisKKyAgIExUQ19BUkdDSEsoSVYgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ciAhPSBOVUxMKTsKKworICAgLyogYmFkIHBhcmFtPyAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIHNldHVwIGNpcGhlciAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLnNldHVwKGtleSwga2V5bGVuLCBudW1fcm91bmRzLCAmY3RyLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogY29weSBjdHIgKi8KKyAgIGN0ci0+YmxvY2tsZW4gPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aDsKKyAgIGN0ci0+Y2lwaGVyICAgPSBjaXBoZXI7CisgICBjdHItPnBhZGxlbiAgID0gMDsKKyAgIGN0ci0+bW9kZSAgICAgPSBjdHJfbW9kZSAmIDE7CisgICBmb3IgKHggPSAwOyB4IDwgY3RyLT5ibG9ja2xlbjsgeCsrKSB7CisgICAgICAgY3RyLT5jdHJbeF0gPSBJVlt4XTsKKyAgIH0KKworICAgaWYgKGN0cl9tb2RlICYgTFRDX0NUUl9SRkMzNjg2KSB7CisgICAgICAvKiBpbmNyZW1lbnQgdGhlIElWIGFzIHBlciBSRkMgMzY4NiAqLworICAgICAgaWYgKGN0ci0+bW9kZSA9PSBDVFJfQ09VTlRFUl9MSVRUTEVfRU5ESUFOKSB7CisgICAgICAgICAvKiBsaXR0bGUtZW5kaWFuICovCisgICAgICAgICBmb3IgKHggPSAwOyB4IDwgY3RyLT5ibG9ja2xlbjsgeCsrKSB7CisgICAgICAgICAgICAgY3RyLT5jdHJbeF0gPSAoY3RyLT5jdHJbeF0gKyAodW5zaWduZWQgY2hhcikxKSAmICh1bnNpZ25lZCBjaGFyKTI1NTsKKyAgICAgICAgICAgICBpZiAoY3RyLT5jdHJbeF0gIT0gKHVuc2lnbmVkIGNoYXIpMCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAvKiBiaWctZW5kaWFuICovCisgICAgICAgICBmb3IgKHggPSBjdHItPmJsb2NrbGVuLTE7IHggPj0gMDsgeC0tKSB7CisgICAgICAgICAgICAgY3RyLT5jdHJbeF0gPSAoY3RyLT5jdHJbeF0gKyAodW5zaWduZWQgY2hhcikxKSAmICh1bnNpZ25lZCBjaGFyKTI1NTsKKyAgICAgICAgICAgICBpZiAoY3RyLT5jdHJbeF0gIT0gKHVuc2lnbmVkIGNoYXIpMCkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKworICAgcmV0dXJuIGNpcGhlcl9kZXNjcmlwdG9yW2N0ci0+Y2lwaGVyXS5lY2JfZW5jcnlwdChjdHItPmN0ciwgY3RyLT5wYWQsICZjdHItPmtleSk7IAorfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2N0ci9jdHJfc3RhcnQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wNSAwMTo0NjozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyL2N0cl90ZXN0LmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvY3RyL2N0cl90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQyMDc3OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9jdHIvY3RyX3Rlc3QuYwpAQCAtMCwwICsxLDg1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBjdHJfdGVzdC5jCisgIENUUiBpbXBsZW1lbnRhdGlvbiwgVGVzdHMgYWdhaW4gUkZDIDM2ODYsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19DVFJfTU9ERQorCitpbnQgY3RyX3Rlc3Qodm9pZCkKK3sKKyNpZmRlZiBMVENfTk9fVEVTVAorICAgcmV0dXJuIENSWVBUX05PUDsKKyNlbHNlCisgICBzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgICAgIGludCBrZXlsZW4sIG1zZ2xlbjsKKyAgICAgIHVuc2lnbmVkIGNoYXIga2V5WzMyXSwgSVZbMTZdLCBwdFs2NF0sIGN0WzY0XTsKKyAgIH0gdGVzdHNbXSA9IHsKKy8qIDEyOC1iaXQga2V5LCAxNi1ieXRlIHB0ICovCit7CisgICAxNiwgMTYsCisgICB7MHhBRSwweDY4LDB4NTIsMHhGOCwweDEyLDB4MTAsMHg2NywweENDLDB4NEIsMHhGNywweEE1LDB4NzYsMHg1NSwweDc3LDB4RjMsMHg5RSB9LAorICAgezB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAgfSwKKyAgIHsweDUzLDB4NjksMHg2RSwweDY3LDB4NkMsMHg2NSwweDIwLDB4NjIsMHg2QywweDZGLDB4NjMsMHg2QiwweDIwLDB4NkQsMHg3MywweDY3IH0sCisgICB7MHhFNCwweDA5LDB4NUQsMHg0RiwweEI3LDB4QTcsMHhCMywweDc5LDB4MkQsMHg2MSwweDc1LDB4QTMsMHgyNiwweDEzLDB4MTEsMHhCOCB9LAorfSwKKworLyogMTI4LWJpdCBrZXksIDM2LWJ5dGUgcHQgKi8KK3sKKyAgIDE2LCAzNiwKKyAgIHsweDc2LDB4OTEsMHhCRSwweDAzLDB4NUUsMHg1MCwweDIwLDB4QTgsMHhBQywweDZFLDB4NjEsMHg4NSwweDI5LDB4RjksMHhBMCwweERDIH0sCisgICB7MHgwMCwweEUwLDB4MDEsMHg3QiwweDI3LDB4NzcsMHg3RiwweDNGLDB4NEEsMHgxNywweDg2LDB4RjAsMHgwMCwweDAwLDB4MDAsMHgwMCB9LAorICAgezB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwweDBFLDB4MEYsCisgICAgMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3LDB4MTgsMHgxOSwweDFBLDB4MUIsMHgxQywweDFELDB4MUUsMHgxRiwKKyAgICAweDIwLDB4MjEsMHgyMiwweDIzfSwKKyAgIHsweEMxLDB4Q0YsMHg0OCwweEE4LDB4OUYsMHgyRiwweEZELDB4RDksMHhDRiwweDQ2LDB4NTIsMHhFOSwweEVGLDB4REIsMHg3MiwweEQ3LAorICAgIDB4NDUsMHg0MCwweEE0LDB4MkIsMHhERSwweDZELDB4NzgsMHgzNiwweEQ1LDB4OUEsMHg1QywweEVBLDB4QUUsMHhGMywweDEwLDB4NTMsCisgICAgMHgyNSwweEIyLDB4MDcsMHgyRiB9LAorfSwKK307CisgIGludCBpZHgsIGVyciwgeDsKKyAgdW5zaWduZWQgY2hhciBidWZbNjRdOworICBzeW1tZXRyaWNfQ1RSIGN0cjsKKworICAvKiBBRVMgY2FuIGJlIHVuZGVyIHJpam5kYWVsIG9yIGFlcy4uLiB0cnkgdG8gZmluZCBpdCAqLyAKKyAgaWYgKChpZHggPSBmaW5kX2NpcGhlcigiYWVzIikpID09IC0xKSB7CisgICAgIGlmICgoaWR4ID0gZmluZF9jaXBoZXIoInJpam5kYWVsIikpID09IC0xKSB7CisgICAgICAgIHJldHVybiBDUllQVF9OT1A7CisgICAgIH0KKyAgfQorCisgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSkpOyB4KyspIHsKKyAgICAgaWYgKChlcnIgPSBjdHJfc3RhcnQoaWR4LCB0ZXN0c1t4XS5JViwgdGVzdHNbeF0ua2V5LCB0ZXN0c1t4XS5rZXlsZW4sIDAsIENUUl9DT1VOVEVSX0JJR19FTkRJQU58TFRDX0NUUl9SRkMzNjg2LCAmY3RyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgfQorICAgICBpZiAoKGVyciA9IGN0cl9lbmNyeXB0KHRlc3RzW3hdLnB0LCBidWYsIHRlc3RzW3hdLm1zZ2xlbiwgJmN0cikpICE9IENSWVBUX09LKSB7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgIH0KKyAgICAgY3RyX2RvbmUoJmN0cik7CisgICAgIGlmIChYTUVNQ01QKGJ1ZiwgdGVzdHNbeF0uY3QsIHRlc3RzW3hdLm1zZ2xlbikpIHsKKyAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgfQorICB9CisgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZgorfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2N0ci9jdHJfdGVzdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDUgMDI6MDY6NDkgJCAqLworCisKKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2VjYi9lY2JfZGVjcnlwdC5jIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2VjYi9lY2JfZGVjcnlwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNmZjZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZWNiL2VjYl9kZWNyeXB0LmMKQEAgLTAsMCArMSw2MSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZWNiX2RlY3J5cHQuYworICBFQ0IgaW1wbGVtZW50YXRpb24sIGRlY3J5cHQgYSBibG9jaywgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0VDQl9NT0RFCisKKy8qKgorICBFQ0IgZGVjcnlwdAorICBAcGFyYW0gY3QgICAgIENpcGhlcnRleHQKKyAgQHBhcmFtIHB0ICAgICBbb3V0XSBQbGFpbnRleHQKKyAgQHBhcmFtIGxlbiAgICBUaGUgbnVtYmVyIG9mIG9jdGV0cyB0byBwcm9jZXNzIChtdXN0IGJlIG11bHRpcGxlIG9mIHRoZSBjaXBoZXIgYmxvY2sgc2l6ZSkKKyAgQHBhcmFtIGVjYiAgICBFQ0Igc3RhdGUKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGVjYl9kZWNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBjaGFyICpwdCwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19FQ0IgKmVjYikKK3sKKyAgIGludCBlcnI7CisgICBMVENfQVJHQ0hLKHB0ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZWNiICE9IE5VTEwpOworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoZWNiLT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBpZiAobGVuICUgY2lwaGVyX2Rlc2NyaXB0b3JbZWNiLT5jaXBoZXJdLmJsb2NrX2xlbmd0aCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICAvKiBjaGVjayBmb3IgYWNjZWwgKi8KKyAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltlY2ItPmNpcGhlcl0uYWNjZWxfZWNiX2RlY3J5cHQgIT0gTlVMTCkgeworICAgICAgcmV0dXJuIGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5hY2NlbF9lY2JfZGVjcnlwdChjdCwgcHQsIGxlbiAvIGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5ibG9ja19sZW5ndGgsICZlY2ItPmtleSk7CisgICB9IGVsc2UgeworICAgICAgd2hpbGUgKGxlbikgeworICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltlY2ItPmNpcGhlcl0uZWNiX2RlY3J5cHQoY3QsIHB0LCAmZWNiLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KKyAgICAgICAgIHB0ICArPSBjaXBoZXJfZGVzY3JpcHRvcltlY2ItPmNpcGhlcl0uYmxvY2tfbGVuZ3RoOworICAgICAgICAgY3QgICs9IGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5ibG9ja19sZW5ndGg7CisgICAgICAgICBsZW4gLT0gY2lwaGVyX2Rlc2NyaXB0b3JbZWNiLT5jaXBoZXJdLmJsb2NrX2xlbmd0aDsKKyAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9lY2IvZWNiX2RlY3J5cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9lY2IvZWNiX2RvbmUuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9lY2IvZWNiX2RvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWYzYTgzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2VjYi9lY2JfZG9uZS5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBlY2JfZG9uZS5jCisgICBFQ0IgaW1wbGVtZW50YXRpb24sIGZpbmlzaCBjaGFpbiwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0VDQl9NT0RFCisKKy8qKiBUZXJtaW5hdGUgdGhlIGNoYWluCisgIEBwYXJhbSBlY2IgICAgVGhlIEVDQiBjaGFpbiB0byB0ZXJtaW5hdGUKKyAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGVjYl9kb25lKHN5bW1ldHJpY19FQ0IgKmVjYikKK3sKKyAgIGludCBlcnI7CisgICBMVENfQVJHQ0hLKGVjYiAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoZWNiLT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5kb25lKCZlY2ItPmtleSk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyAgIAorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2VjYi9lY2JfZG9uZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NTE6MzQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2VjYi9lY2JfZW5jcnlwdC5jIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2VjYi9lY2JfZW5jcnlwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTEwYzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZWNiL2VjYl9lbmNyeXB0LmMKQEAgLTAsMCArMSw2MSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZWNiX2VuY3J5cHQuYworICBFQ0IgaW1wbGVtZW50YXRpb24sIGVuY3J5cHQgYSBibG9jaywgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0VDQl9NT0RFCisKKy8qKgorICBFQ0IgZW5jcnlwdAorICBAcGFyYW0gcHQgICAgIFBsYWludGV4dAorICBAcGFyYW0gY3QgICAgIFtvdXRdIENpcGhlcnRleHQKKyAgQHBhcmFtIGxlbiAgICBUaGUgbnVtYmVyIG9mIG9jdGV0cyB0byBwcm9jZXNzIChtdXN0IGJlIG11bHRpcGxlIG9mIHRoZSBjaXBoZXIgYmxvY2sgc2l6ZSkKKyAgQHBhcmFtIGVjYiAgICBFQ0Igc3RhdGUKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGVjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19FQ0IgKmVjYikKK3sKKyAgIGludCBlcnI7CisgICBMVENfQVJHQ0hLKHB0ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZWNiICE9IE5VTEwpOworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoZWNiLT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBpZiAobGVuICUgY2lwaGVyX2Rlc2NyaXB0b3JbZWNiLT5jaXBoZXJdLmJsb2NrX2xlbmd0aCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICAvKiBjaGVjayBmb3IgYWNjZWwgKi8KKyAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltlY2ItPmNpcGhlcl0uYWNjZWxfZWNiX2VuY3J5cHQgIT0gTlVMTCkgeworICAgICAgcmV0dXJuIGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5hY2NlbF9lY2JfZW5jcnlwdChwdCwgY3QsIGxlbiAvIGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5ibG9ja19sZW5ndGgsICZlY2ItPmtleSk7CisgICB9IGVsc2UgeworICAgICAgd2hpbGUgKGxlbikgeworICAgICAgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltlY2ItPmNpcGhlcl0uZWNiX2VuY3J5cHQocHQsIGN0LCAmZWNiLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KKyAgICAgICAgIHB0ICArPSBjaXBoZXJfZGVzY3JpcHRvcltlY2ItPmNpcGhlcl0uYmxvY2tfbGVuZ3RoOworICAgICAgICAgY3QgICs9IGNpcGhlcl9kZXNjcmlwdG9yW2VjYi0+Y2lwaGVyXS5ibG9ja19sZW5ndGg7CisgICAgICAgICBsZW4gLT0gY2lwaGVyX2Rlc2NyaXB0b3JbZWNiLT5jaXBoZXJdLmJsb2NrX2xlbmd0aDsKKyAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9lY2IvZWNiX2VuY3J5cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9lY2IvZWNiX3N0YXJ0LmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZWNiL2VjYl9zdGFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjODQ1NzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZWNiL2VjYl9zdGFydC5jCkBAIC0wLDAgKzEsNDggQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBlY2Jfc3RhcnQuYworICAgRUNCIGltcGxlbWVudGF0aW9uLCBzdGFydCBjaGFpbiwgVG9tIFN0IERlbmlzCisqLworCisKKyNpZmRlZiBMVENfRUNCX01PREUKKworLyoqCisgICBJbml0aWFsaXplIGEgRUNCIGNvbnRleHQKKyAgIEBwYXJhbSBjaXBoZXIgICAgICBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBkZXNpcmVkCisgICBAcGFyYW0ga2V5ICAgICAgICAgVGhlIHNlY3JldCBrZXkgCisgICBAcGFyYW0ga2V5bGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgQHBhcmFtIG51bV9yb3VuZHMgIE51bWJlciBvZiByb3VuZHMgaW4gdGhlIGNpcGhlciBkZXNpcmVkICgwIGZvciBkZWZhdWx0KQorICAgQHBhcmFtIGVjYiAgICAgICAgIFRoZSBFQ0Igc3RhdGUgdG8gaW5pdGlhbGl6ZQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGVjYl9zdGFydChpbnQgY2lwaGVyLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIGludCBrZXlsZW4sIGludCBudW1fcm91bmRzLCBzeW1tZXRyaWNfRUNCICplY2IpCit7CisgICBpbnQgZXJyOworICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGVjYiAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBlY2ItPmNpcGhlciA9IGNpcGhlcjsKKyAgIGVjYi0+YmxvY2tsZW4gPSBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aDsKKyAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLnNldHVwKGtleSwga2V5bGVuLCBudW1fcm91bmRzLCAmZWNiLT5rZXkpOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2VjYi9lY2Jfc3RhcnQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF9kZWNyeXB0LmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZjgvZjhfZGVjcnlwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjOGY2MWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZjgvZjhfZGVjcnlwdC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGY4X2RlY3J5cHQuYworICBGOCBpbXBsZW1lbnRhdGlvbiwgZGVjcnlwdCBkYXRhLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfRjhfTU9ERQorCisvKioKKyAgIEY4IGRlY3J5cHQKKyAgIEBwYXJhbSBjdCAgICAgIENpcGhlcnRleHQKKyAgIEBwYXJhbSBwdCAgICAgIFtvdXRdIFBsYWludGV4dAorICAgQHBhcmFtIGxlbiAgICAgTGVuZ3RoIG9mIGNpcGhlcnRleHQgKG9jdGV0cykKKyAgIEBwYXJhbSBmOCAgICAgIEY4IHN0YXRlCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZjhfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfRjggKmY4KQoreworICAgTFRDX0FSR0NISyhwdCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3QgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGY4ICE9IE5VTEwpOworICAgcmV0dXJuIGY4X2VuY3J5cHQoY3QsIHB0LCBsZW4sIGY4KTsKK30KKworCisjZW5kaWYKKworIAorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZjgvZjhfZGVjcnlwdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjI6NDk6MjUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2Y4L2Y4X2RvbmUuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF9kb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg2NDc2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF9kb25lLmMKQEAgLTAsMCArMSw0MiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIGY4X2RvbmUuYworICAgRjggaW1wbGVtZW50YXRpb24sIGZpbmlzaCBjaGFpbiwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0Y4X01PREUKKworLyoqIFRlcm1pbmF0ZSB0aGUgY2hhaW4KKyAgQHBhcmFtIGY4ICAgIFRoZSBGOCBjaGFpbiB0byB0ZXJtaW5hdGUKKyAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGY4X2RvbmUoc3ltbWV0cmljX0Y4ICpmOCkKK3sKKyAgIGludCBlcnI7CisgICBMVENfQVJHQ0hLKGY4ICE9IE5VTEwpOworCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChmOC0+Y2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBjaXBoZXJfZGVzY3JpcHRvcltmOC0+Y2lwaGVyXS5kb25lKCZmOC0+a2V5KTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworICAgCisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZjgvZjhfZG9uZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjI6NDk6MjUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2Y4L2Y4X2VuY3J5cHQuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF9lbmNyeXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMzM2JlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF9lbmNyeXB0LmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGY4X2VuY3J5cHQuYworICBGOCBpbXBsZW1lbnRhdGlvbiwgZW5jcnlwdCBkYXRhLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfRjhfTU9ERQorCisvKioKKyAgRjggZW5jcnlwdAorICBAcGFyYW0gcHQgICAgIFBsYWludGV4dAorICBAcGFyYW0gY3QgICAgIFtvdXRdIENpcGhlcnRleHQKKyAgQHBhcmFtIGxlbiAgICBMZW5ndGggb2YgcGxhaW50ZXh0IChvY3RldHMpCisgIEBwYXJhbSBmOCAgICAgRjggc3RhdGUKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGY4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0Y4ICpmOCkKK3sKKyAgIGludCAgICAgICAgICAgZXJyLCB4OworICAgdW5zaWduZWQgY2hhciBidWZbTUFYQkxPQ0tTSVpFXTsKKyAgIExUQ19BUkdDSEsocHQgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhmOCAhPSBOVUxMKTsKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGY4LT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICB9CisgICAKKyAgIC8qIGlzIGJsb2NrbGVuL3BhZGxlbiB2YWxpZD8gKi8KKyAgIGlmIChmOC0+YmxvY2tsZW4gPCAwIHx8IGY4LT5ibG9ja2xlbiA+IChpbnQpc2l6ZW9mKGY4LT5JVikgfHwKKyAgICAgICBmOC0+cGFkbGVuICAgPCAwIHx8IGY4LT5wYWRsZW4gICA+IChpbnQpc2l6ZW9mKGY4LT5JVikpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKyAgIAorICAgemVyb21lbShidWYsIHNpemVvZihidWYpKTsKKworICAgLyogbWFrZSBzdXJlIHRoZSBwYWQgaXMgZW1wdHkgKi8KKyAgIGlmIChmOC0+cGFkbGVuID09IGY4LT5ibG9ja2xlbikgeworICAgICAgLyogeG9yIG9mIElWLCBNSVYgYW5kIGJsb2NrY250ID09IHdoYXQgZ29lcyBpbnRvIGNpcGhlciAqLworICAgICAgU1RPUkUzMkgoZjgtPmJsb2NrY250LCAoYnVmKyhmOC0+YmxvY2tsZW4tNCkpKTsKKyAgICAgICsrKGY4LT5ibG9ja2NudCk7CisgICAgICBmb3IgKHggPSAwOyB4IDwgZjgtPmJsb2NrbGVuOyB4KyspIHsKKyAgICAgICAgICBmOC0+SVZbeF0gXj0gZjgtPk1JVlt4XSBeIGJ1Zlt4XTsKKyAgICAgIH0KKyAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbZjgtPmNpcGhlcl0uZWNiX2VuY3J5cHQoZjgtPklWLCBmOC0+SVYsICZmOC0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgICAgICBmOC0+cGFkbGVuID0gMDsKKyAgIH0KKworI2lmZGVmIExUQ19GQVNUCisgICBpZiAoZjgtPnBhZGxlbiA9PSAwKSB7CisgICAgICB3aGlsZSAobGVuID49ICh1bnNpZ25lZCBsb25nKWY4LT5ibG9ja2xlbikgeworICAgICAgICAgU1RPUkUzMkgoZjgtPmJsb2NrY250LCAoYnVmKyhmOC0+YmxvY2tsZW4tNCkpKTsKKyAgICAgICAgICsrKGY4LT5ibG9ja2NudCk7CisgICAgICAgICBmb3IgKHggPSAwOyB4IDwgZjgtPmJsb2NrbGVuOyB4ICs9IHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgmY3RbeF0pKSA9ICooKExUQ19GQVNUX1RZUEUqKSgmcHRbeF0pKSBeICooKExUQ19GQVNUX1RZUEUqKSgmZjgtPklWW3hdKSk7CisgICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSopKCZmOC0+SVZbeF0pKSBePSAqKChMVENfRkFTVF9UWVBFKikoJmY4LT5NSVZbeF0pKSBeICooKExUQ19GQVNUX1RZUEUqKSgmYnVmW3hdKSk7CisgICAgICAgICB9CisgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2Y4LT5jaXBoZXJdLmVjYl9lbmNyeXB0KGY4LT5JViwgZjgtPklWLCAmZjgtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgfQorICAgICAgICAgbGVuIC09IHg7CisgICAgICAgICBwdCAgKz0geDsKKyAgICAgICAgIGN0ICArPSB4OworICAgICAgfQorICAgfQorI2VuZGlmICAgICAgICAgICAgIAorCisgICB3aGlsZSAobGVuID4gMCkgeworICAgICAgIGlmIChmOC0+cGFkbGVuID09IGY4LT5ibG9ja2xlbikgeworICAgICAgICAgIC8qIHhvciBvZiBJViwgTUlWIGFuZCBibG9ja2NudCA9PSB3aGF0IGdvZXMgaW50byBjaXBoZXIgKi8KKyAgICAgICAgICBTVE9SRTMySChmOC0+YmxvY2tjbnQsIChidWYrKGY4LT5ibG9ja2xlbi00KSkpOworICAgICAgICAgICsrKGY4LT5ibG9ja2NudCk7CisgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGY4LT5ibG9ja2xlbjsgeCsrKSB7CisgICAgICAgICAgICAgIGY4LT5JVlt4XSBePSBmOC0+TUlWW3hdIF4gYnVmW3hdOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2Y4LT5jaXBoZXJdLmVjYl9lbmNyeXB0KGY4LT5JViwgZjgtPklWLCAmZjgtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgICB9CisgICAgICAgICAgZjgtPnBhZGxlbiA9IDA7CisgICAgICAgfQorICAgICAgICpjdCsrID0gKnB0KysgXiBmOC0+SVZbZjgtPnBhZGxlbisrXTsKKyAgICAgICAtLWxlbjsKKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF9lbmNyeXB0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wNSAwNDoxNjozMiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZjgvZjhfZ2V0aXYuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF9nZXRpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNWQ5MmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZjgvZjhfZ2V0aXYuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgb2ZiX2dldGl2LmMKKyAgIEY4IGltcGxlbWVudGF0aW9uLCBnZXQgSVYsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19GOF9NT0RFCisKKy8qKgorICAgR2V0IHRoZSBjdXJyZW50IGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gSVYgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gbGVuICBbaW4vb3V0XSAgVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgaW5pdGlhbCB2ZWN0b3IKKyAgIEBwYXJhbSBmOCAgIFRoZSBGOCBzdGF0ZQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGY4X2dldGl2KHVuc2lnbmVkIGNoYXIgKklWLCB1bnNpZ25lZCBsb25nICpsZW4sIHN5bW1ldHJpY19GOCAqZjgpCit7CisgICBMVENfQVJHQ0hLKElWICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobGVuICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhmOCAgIT0gTlVMTCk7CisgICBpZiAoKHVuc2lnbmVkIGxvbmcpZjgtPmJsb2NrbGVuID4gKmxlbikgeworICAgICAgKmxlbiA9IGY4LT5ibG9ja2xlbjsKKyAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisgICBYTUVNQ1BZKElWLCBmOC0+SVYsIGY4LT5ibG9ja2xlbik7CisgICAqbGVuID0gZjgtPmJsb2NrbGVuOworCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZjgvZjhfZ2V0aXYuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIyOjQ5OjI1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF9zZXRpdi5jIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2Y4L2Y4X3NldGl2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY5Y2MxNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF9zZXRpdi5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBmOF9zZXRpdi5jCisgICBGOCBpbXBsZW1lbnRhdGlvbiwgc2V0IElWLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfRjhfTU9ERQorCisvKioKKyAgIFNldCBhbiBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIElWICAgVGhlIGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gbGVuICBUaGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3IgKGluIG9jdGV0cykKKyAgIEBwYXJhbSBmOCAgIFRoZSBGOCBzdGF0ZQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGY4X3NldGl2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0Y4ICpmOCkKK3sKKyAgIGludCBlcnI7CisKKyAgIExUQ19BUkdDSEsoSVYgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGY4ICE9IE5VTEwpOworCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChmOC0+Y2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBpZiAobGVuICE9ICh1bnNpZ25lZCBsb25nKWY4LT5ibG9ja2xlbikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICAvKiBmb3JjZSBuZXh0IGJsb2NrICovCisgICBmOC0+cGFkbGVuID0gMDsKKyAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltmOC0+Y2lwaGVyXS5lY2JfZW5jcnlwdChJViwgZjgtPklWLCAmZjgtPmtleSk7Cit9CisKKyNlbmRpZiAKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZjgvZjhfc2V0aXYuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIyOjQ5OjI1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF9zdGFydC5jIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2Y4L2Y4X3N0YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIwNWMxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF9zdGFydC5jCkBAIC0wLDAgKzEsOTggQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBmOF9zdGFydC5jCisgICBGOCBpbXBsZW1lbnRhdGlvbiwgc3RhcnQgY2hhaW4sIFRvbSBTdCBEZW5pcworKi8KKworCisjaWZkZWYgTFRDX0Y4X01PREUKKworLyoqCisgICBJbml0aWFsaXplIGFuIEY4IGNvbnRleHQKKyAgIEBwYXJhbSBjaXBoZXIgICAgICBUaGUgaW5kZXggb2YgdGhlIGNpcGhlciBkZXNpcmVkCisgICBAcGFyYW0gSVYgICAgICAgICAgVGhlIGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0ga2V5ICAgICAgICAgVGhlIHNlY3JldCBrZXkgCisgICBAcGFyYW0ga2V5bGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2VjcmV0IGtleSAob2N0ZXRzKQorICAgQHBhcmFtIHNhbHRfa2V5ICAgIFRoZSBzYWx0aW5nIGtleSBmb3IgdGhlIElWCisgICBAcGFyYW0gc2tleWxlbiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2FsdGluZyBrZXkgKG9jdGV0cykKKyAgIEBwYXJhbSBudW1fcm91bmRzICBOdW1iZXIgb2Ygcm91bmRzIGluIHRoZSBjaXBoZXIgZGVzaXJlZCAoMCBmb3IgZGVmYXVsdCkKKyAgIEBwYXJhbSBmOCAgICAgICAgICBUaGUgRjggc3RhdGUgdG8gaW5pdGlhbGl6ZQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGY4X3N0YXJ0KCAgICAgICAgICAgICAgICBpbnQgIGNpcGhlciwgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIAorICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgICAgICAgICAgICAgICAgIGludCAga2V5bGVuLCAKKyAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzYWx0X2tleSwgICAgICAgICAgICAgICBpbnQgIHNrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbnVtX3JvdW5kcywgICBzeW1tZXRyaWNfRjggICpmOCkKK3sKKyAgIGludCAgICAgICAgICAgeCwgZXJyOworICAgdW5zaWduZWQgY2hhciB0a2V5W01BWEJMT0NLU0laRV07CisKKyAgIExUQ19BUkdDSEsoSVYgICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhzYWx0X2tleSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZjggICAgICAgIT0gTlVMTCk7CisKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisjaWZkZWYgTFRDX0ZBU1QKKyAgIGlmIChjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLmJsb2NrX2xlbmd0aCAlIHNpemVvZihMVENfRkFTVF9UWVBFKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorI2VuZGlmCisKKyAgIC8qIGNvcHkgZGV0YWlscyAqLworICAgZjgtPmJsb2NrY250ID0gMDsKKyAgIGY4LT5jaXBoZXIgICA9IGNpcGhlcjsKKyAgIGY4LT5ibG9ja2xlbiA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoOworICAgZjgtPnBhZGxlbiAgID0gZjgtPmJsb2NrbGVuOworICAgCisgICAvKiBub3cgZ2V0IGtleSBeIHNhbHRfa2V5IFtleHRlbmQgc2FsdF9rZXQgd2l0aCAweDU1IGFzIHJlcXVpcmVkIHRvIG1hdGNoIGxlbmd0aF0gKi8KKyAgIHplcm9tZW0odGtleSwgc2l6ZW9mKHRrZXkpKTsKKyAgIGZvciAoeCA9IDA7IHggPCBrZXlsZW4gJiYgeCA8IChpbnQpc2l6ZW9mKHRrZXkpOyB4KyspIHsKKyAgICAgICB0a2V5W3hdID0ga2V5W3hdOworICAgfQorICAgZm9yICh4ID0gMDsgeCA8IHNrZXlsZW4gJiYgeCA8IChpbnQpc2l6ZW9mKHRrZXkpOyB4KyspIHsKKyAgICAgICB0a2V5W3hdIF49IHNhbHRfa2V5W3hdOworICAgfSAgICAgICAKKyAgIGZvciAoOyB4IDwga2V5bGVuICYmIHggPCAoaW50KXNpemVvZih0a2V5KTsgeCsrKSB7CisgICAgICAgdGtleVt4XSBePSAweDU1OworICAgfQorICAgCisgICAvKiBub3cgZW5jcnlwdCB3aXRoIHRrZXlbMC4ua2V5bGVuLTFdIHRoZSBJViBhbmQgdXNlIHRoYXQgYXMgdGhlIElWICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uc2V0dXAodGtleSwga2V5bGVuLCBudW1fcm91bmRzLCAmZjgtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgCisgICAvKiBlbmNyeXB0IElWICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2Y4LT5jaXBoZXJdLmVjYl9lbmNyeXB0KElWLCBmOC0+TUlWLCAmZjgtPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICBjaXBoZXJfZGVzY3JpcHRvcltmOC0+Y2lwaGVyXS5kb25lKCZmOC0+a2V5KTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICB6ZXJvbWVtKHRrZXksIHNpemVvZih0a2V5KSk7CisgICB6ZXJvbWVtKGY4LT5JViwgc2l6ZW9mKGY4LT5JVikpOworICAgCisgICAvKiB0ZXJtaW5hdGUgdGhpcyBjaXBoZXIgKi8KKyAgIGNpcGhlcl9kZXNjcmlwdG9yW2Y4LT5jaXBoZXJdLmRvbmUoJmY4LT5rZXkpOworICAgCisgICAvKiBpbml0IHRoZSBjaXBoZXIgKi8KKyAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJdLnNldHVwKGtleSwga2V5bGVuLCBudW1fcm91bmRzLCAmZjgtPmtleSk7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvZjgvZjhfc3RhcnQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA1IDAxOjM2OjQzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF90ZXN0X21vZGUuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF90ZXN0X21vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODE2MGVhCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2Y4L2Y4X3Rlc3RfbW9kZS5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBmOF90ZXN0X21vZGUuYworICAgRjggaW1wbGVtZW50YXRpb24sIHRlc3QsIFRvbSBTdCBEZW5pcworKi8KKworCisjaWZkZWYgTFRDX0Y4X01PREUKKworaW50IGY4X3Rlc3RfbW9kZSh2b2lkKQoreworI2lmbmRlZiBMVENfVEVTVAorICAgcmV0dXJuIENSWVBUX05PUDsKKyNlbHNlCisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrZXlbMTZdID0geyAweDIzLCAweDQ4LCAweDI5LCAweDAwLCAweDg0LCAweDY3LCAweGJlLCAweDE4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NmMsIDB4M2QsIDB4ZTEsIDB4NGEsIDB4YWUsIDB4NzIsIDB4ZDYsIDB4MmMgfTsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhbHRbNF0gPSB7IDB4MzIsIDB4ZjIsIDB4ODcsIDB4MGQgfTsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIElWWzE2XSAgPSB7IDB4MDAsIDB4NmUsIDB4NWMsIDB4YmEsIDB4NTAsIDB4NjgsIDB4MWQsIDB4ZTUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1YywgMHg2MiwgMHgxNSwgMHg5OSwgMHhkNCwgMHg2MiwgMHg1NiwgMHg0YSB9OworICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHRbMzldICA9IHsgMHg3MCwgMHg3MywgMHg2NSwgMHg3NSwgMHg2NCwgMHg2ZiwgMHg3MiwgMHg2MSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDZlLCAweDY0LCAweDZmLCAweDZkLCAweDZlLCAweDY1LCAweDczLCAweDczLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMCwgMHg2OSwgMHg3MywgMHgyMCwgMHg3NCwgMHg2OCwgMHg2NSwgMHgyMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDZlLCAweDY1LCAweDc4LCAweDc0LCAweDIwLCAweDYyLCAweDY1LCAweDczLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3NCwgMHgyMCwgMHg3NCwgMHg2OCwgMHg2OSwgMHg2ZSwgMHg2NyAgICAgICB9OworICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY3RbMzldICA9IHsgMHgwMSwgMHg5YywgMHhlNywgMHhhMiwgMHg2ZSwgMHg3OCwgMHg1NCwgMHgwMSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDRhLCAweDYzLCAweDY2LCAweGFhLCAweDk1LCAweGQ0LCAweGVlLCAweGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxYSwgMHhkNCwgMHgxNywgMHgyYSwgMHgxNCwgMHhmOSwgMHhmYSwgMHhmNCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDU1LCAweGI3LCAweGYxLCAweGQ0LCAweGI2LCAweDJiLCAweGQwLCAweDhmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1NiwgMHgyYywgMHgwZSwgMHhlZiwgMHg3YywgMHg0OCwgMHgwMiAgICAgICB9OworICAgdW5zaWduZWQgY2hhciBidWZbMzldOworICAgc3ltbWV0cmljX0Y4ICBmODsKKyAgIGludCAgICAgICAgICAgZXJyLCBpZHg7CisgICAKKyAgIGlkeCA9IGZpbmRfY2lwaGVyKCJhZXMiKTsKKyAgIGlmIChpZHggPT0gLTEpIHsKKyAgICAgIGlkeCA9IGZpbmRfY2lwaGVyKCJyaWpuZGFlbCIpOworICAgICAgaWYgKGlkeCA9PSAtMSkgcmV0dXJuIENSWVBUX05PUDsKKyAgIH0gICAgICAKKyAgIAorICAgLyogaW5pdGlhbGl6ZSB0aGUgY29udGV4dCAqLworICAgaWYgKChlcnIgPSBmOF9zdGFydChpZHgsIElWLCBrZXksIHNpemVvZihrZXkpLCBzYWx0LCBzaXplb2Yoc2FsdCksIDAsICZmOCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgCisgICAvKiBlbmNyeXB0IGJsb2NrICovCisgICBpZiAoKGVyciA9IGY4X2VuY3J5cHQocHQsIGJ1Ziwgc2l6ZW9mKHB0KSwgJmY4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGY4X2RvbmUoJmY4KTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBmOF9kb25lKCZmOCk7CisKKyAgIC8qIGNvbXBhcmUgKi8KKyAgIGlmIChYTUVNQ01QKGJ1ZiwgY3QsIHNpemVvZihjdCkpKSB7CisgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgfSAgICAgIAorICAgCisgICByZXR1cm4gQ1JZUFRfT0s7CisjZW5kaWYgICAKK30gICAKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9mOC9mOF90ZXN0X21vZGUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzEzIDExOjU1OjI1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X2RlY3J5cHQuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X2RlY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGVlY2U4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2xydy9scndfZGVjcnlwdC5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBscndfZGVjcnlwdC5jCisgICBMUldfTU9ERSBpbXBsZW1lbnRhdGlvbiwgRGVjcnlwdCBibG9ja3MsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19MUldfTU9ERQorCisvKioKKyAgTFJXIGRlY3J5cHQgYmxvY2tzCisgIEBwYXJhbSBjdCAgICAgVGhlIGNpcGhlcnRleHQKKyAgQHBhcmFtIHB0ICAgICBbb3V0XSBUaGUgcGxhaW50ZXh0CisgIEBwYXJhbSBsZW4gICAgVGhlIGxlbmd0aCBpbiBvY3RldHMsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNgorICBAcGFyYW0gbHJ3ICAgIFRoZSBMUlcgc3RhdGUKKyovCitpbnQgbHJ3X2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX0xSVyAqbHJ3KQoreworICAgaW50IGVycjsKKworICAgTFRDX0FSR0NISyhwdCAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobHJ3ICE9IE5VTEwpOworCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChscnctPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBpZiAoY2lwaGVyX2Rlc2NyaXB0b3JbbHJ3LT5jaXBoZXJdLmFjY2VsX2xyd19kZWNyeXB0ICE9IE5VTEwpIHsKKyAgICAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltscnctPmNpcGhlcl0uYWNjZWxfbHJ3X2RlY3J5cHQoY3QsIHB0LCBsZW4sIGxydy0+SVYsIGxydy0+dHdlYWssICZscnctPmtleSk7CisgICB9CisKKyAgIHJldHVybiBscndfcHJvY2VzcyhjdCwgcHQsIGxlbiwgTFJXX0RFQ1JZUFQsIGxydyk7Cit9CisKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X2RlY3J5cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUzOjEzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X2RvbmUuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X2RvbmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWU3NWMzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2xydy9scndfZG9uZS5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBscndfZG9uZS5jCisgICBMUldfTU9ERSBpbXBsZW1lbnRhdGlvbiwgRnJlZSByZXNvdXJjZXMsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19MUldfTU9ERQorCisvKioKKyAgVGVybWluYXRlIGEgTFJXIHN0YXRlCisgIEBwYXJhbSBscncgICBUaGUgc3RhdGUgdG8gdGVybWluYXRlCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBscndfZG9uZShzeW1tZXRyaWNfTFJXICpscncpIAoreworICAgaW50IGVycjsKKworICAgTFRDX0FSR0NISyhscncgIT0gTlVMTCk7CisgCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChscnctPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgY2lwaGVyX2Rlc2NyaXB0b3JbbHJ3LT5jaXBoZXJdLmRvbmUoJmxydy0+a2V5KTsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X2RvbmUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUzOjEzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X2VuY3J5cHQuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X2VuY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWQxMWM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2xydy9scndfZW5jcnlwdC5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBscndfZW5jcnlwdC5jCisgICBMUldfTU9ERSBpbXBsZW1lbnRhdGlvbiwgRW5jcnlwdCBibG9ja3MsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19MUldfTU9ERQorIAorLyoqCisgIExSVyBlbmNyeXB0IGJsb2NrcworICBAcGFyYW0gcHQgICAgIFRoZSBwbGFpbnRleHQKKyAgQHBhcmFtIGN0ICAgICBbb3V0XSBUaGUgY2lwaGVydGV4dAorICBAcGFyYW0gbGVuICAgIFRoZSBsZW5ndGggaW4gb2N0ZXRzLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYKKyAgQHBhcmFtIGxydyAgICBUaGUgTFJXIHN0YXRlCisqLworaW50IGxyd19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBsZW4sIHN5bW1ldHJpY19MUlcgKmxydykKK3sKKyAgIGludCBlcnI7CisKKyAgIExUQ19BUkdDSEsocHQgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGxydyAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQobHJ3LT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKGNpcGhlcl9kZXNjcmlwdG9yW2xydy0+Y2lwaGVyXS5hY2NlbF9scndfZW5jcnlwdCAhPSBOVUxMKSB7CisgICAgICByZXR1cm4gY2lwaGVyX2Rlc2NyaXB0b3JbbHJ3LT5jaXBoZXJdLmFjY2VsX2xyd19lbmNyeXB0KHB0LCBjdCwgbGVuLCBscnctPklWLCBscnctPnR3ZWFrLCAmbHJ3LT5rZXkpOworICAgfQorCisgICByZXR1cm4gbHJ3X3Byb2Nlc3MocHQsIGN0LCBsZW4sIExSV19FTkNSWVBULCBscncpOworfQorCisKKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2xydy9scndfZW5jcnlwdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NTM6MTMgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2xydy9scndfZ2V0aXYuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X2dldGl2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxNTljZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X2dldGl2LmMKQEAgLTAsMCArMSw0NSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIGxyd19nZXRpdi5jCisgICBMUldfTU9ERSBpbXBsZW1lbnRhdGlvbiwgUmV0cmlldmUgdGhlIGN1cnJlbnQgSVYsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19MUldfTU9ERQorCisvKioKKyAgR2V0IHRoZSBJViBmb3IgTFJXCisgIEBwYXJhbSBJViAgICAgIFtvdXRdIFRoZSBJViwgbXVzdCBiZSAxNiBvY3RldHMKKyAgQHBhcmFtIGxlbiAgICAgTGVuZ3RoIC4uLiBtdXN0IGJlIGF0IGxlYXN0IDE2IDotKQorICBAcGFyYW0gbHJ3ICAgICBUaGUgTFJXIHN0YXRlIHRvIHJlYWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGxyd19nZXRpdih1bnNpZ25lZCBjaGFyICpJViwgdW5zaWduZWQgbG9uZyAqbGVuLCBzeW1tZXRyaWNfTFJXICpscncpCit7CisgICBMVENfQVJHQ0hLKElWICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhsZW4gIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGxydyAhPSBOVUxMKTsKKyAgIGlmICgqbGVuIDwgMTYpIHsKKyAgICAgICAqbGVuID0gMTY7CisgICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgIH0KKworICAgWE1FTUNQWShJViwgbHJ3LT5JViwgMTYpOworICAgKmxlbiA9IDE2OworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X2dldGl2LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo1MzoxMyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvbHJ3L2xyd19wcm9jZXNzLmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvbHJ3L2xyd19wcm9jZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxZDRjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X3Byb2Nlc3MuYwpAQCAtMCwwICsxLDEyMCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIGxyd19wcm9jZXNzLmMKKyAgIExSV19NT0RFIGltcGxlbWVudGF0aW9uLCBFbmNyeXB0L2RlY3J5cHQgYmxvY2tzLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfTFJXX01PREUKKworLyoqCisgIFByb2Nlc3MgYmxvY2tzIHdpdGggTFJXLCBzaW5jZSBkZWNyeXB0L2VuY3J5cHQgYXJlIGxhcmdlbHkgdGhlIHNhbWUgdGhleSBzaGFyZSB0aGlzIGNvZGUuCisgIEBwYXJhbSBwdCAgICAgICAgVGhlICJpbnB1dCIgZGF0YQorICBAcGFyYW0gY3QgICAgICAgIFtvdXRdIFRoZSAib3V0cHV0IiBkYXRhCisgIEBwYXJhbSBsZW4gICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxMjgtYml0cyAoMTYgb2N0ZXRzKQorICBAcGFyYW0gbW9kZSAgICAgIExSV19FTkNSWVBUIG9yIExSV19ERUNSWVBUCisgIEBwYXJhbSBscncgICAgICAgVGhlIExSVyBzdGF0ZQorICBAcmV0dXJuICBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGxyd19wcm9jZXNzKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBjaGFyICpjdCwgdW5zaWduZWQgbG9uZyBsZW4sIGludCBtb2RlLCBzeW1tZXRyaWNfTFJXICpscncpCit7CisgICB1bnNpZ25lZCBjaGFyIHByb2RbMTZdOworICAgaW50ICAgICAgICAgICB4LCBlcnI7CisjaWZkZWYgTFJXX1RBQkxFUworICAgaW50ICAgICAgICAgICB5OworI2VuZGlmCisKKyAgIExUQ19BUkdDSEsocHQgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhjdCAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGxydyAhPSBOVUxMKTsKKworICAgaWYgKGxlbiAmIDE1KSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIHdoaWxlIChsZW4pIHsKKyAgICAgIC8qIGNvcHkgcGFkICovCisgICAgICBYTUVNQ1BZKHByb2QsIGxydy0+cGFkLCAxNik7CisKKyAgICAgIC8qIGluY3JlbWVudCBJViAqLworICAgICAgZm9yICh4ID0gMTU7IHggPj0gMDsgeC0tKSB7CisgICAgICAgICAgbHJ3LT5JVlt4XSA9IChscnctPklWW3hdICsgMSkgJiAyNTU7CisgICAgICAgICAgaWYgKGxydy0+SVZbeF0pIHsgCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogdXBkYXRlIHBhZCAqLworI2lmZGVmIExSV19UQUJMRVMKKyAgICAgIC8qIGZvciBlYWNoIGJ5dGUgY2hhbmdlZCB3ZSB1bmRvIGl0J3MgYWZmZWN0IG9uIHRoZSBwYWQgdGhlbiBhZGQgdGhlIG5ldyBwcm9kdWN0ICovCisgICAgICBmb3IgKDsgeCA8IDE2OyB4KyspIHsKKyNpZmRlZiBMVENfRkFTVAorICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSAqKShscnctPnBhZCArIHkpKSBePSAqKChMVENfRkFTVF9UWVBFICopKCZscnctPlBDW3hdW2xydy0+SVZbeF1dW3ldKSkgXiAqKChMVENfRkFTVF9UWVBFICopKCZscnctPlBDW3hdWyhscnctPklWW3hdLTEpJjI1NV1beV0pKTsKKyAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCAxNjsgeSsrKSB7CisgICAgICAgICAgICAgIGxydy0+cGFkW3ldIF49IGxydy0+UENbeF1bbHJ3LT5JVlt4XV1beV0gXiBscnctPlBDW3hdWyhscnctPklWW3hdLTEpJjI1NV1beV07CisgICAgICAgICAgfQorI2VuZGlmCisgICAgICB9CisjZWxzZQorICAgICAgZ2NtX2dmX211bHQobHJ3LT50d2VhaywgbHJ3LT5JViwgbHJ3LT5wYWQpOworI2VuZGlmCisKKyAgICAgIC8qIHhvciBwcm9kICovCisjaWZkZWYgTFRDX0ZBU1QKKyAgICAgIGZvciAoeCA9IDA7IHggPCAxNjsgeCArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSAqKShjdCArIHgpKSA9ICooKExUQ19GQVNUX1RZUEUgKikocHQgKyB4KSkgXiAqKChMVENfRkFTVF9UWVBFICopKHByb2QgKyB4KSk7CisgICAgICB9CisjZWxzZQorICAgICAgZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsKKyAgICAgICAgIGN0W3hdID0gcHRbeF0gXiBwcm9kW3hdOworICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qIHNlbmQgdGhyb3VnaCBjaXBoZXIgKi8KKyAgICAgIGlmIChtb2RlID09IExSV19FTkNSWVBUKSB7CisgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2xydy0+Y2lwaGVyXS5lY2JfZW5jcnlwdChjdCwgY3QsICZscnctPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbbHJ3LT5jaXBoZXJdLmVjYl9kZWNyeXB0KGN0LCBjdCwgJmxydy0+a2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICB9CisgICAgICB9ICAgICAgICAgICAgICAgCisKKyAgICAgIC8qIHhvciBwcm9kICovCisjaWZkZWYgTFRDX0ZBU1QKKyAgICAgIGZvciAoeCA9IDA7IHggPCAxNjsgeCArPSBzaXplb2YoTFRDX0ZBU1RfVFlQRSkpIHsKKyAgICAgICAgICAgKigoTFRDX0ZBU1RfVFlQRSAqKShjdCArIHgpKSA9ICooKExUQ19GQVNUX1RZUEUgKikoY3QgKyB4KSkgXiAqKChMVENfRkFTVF9UWVBFICopKHByb2QgKyB4KSk7CisgICAgICB9CisjZWxzZQorICAgICAgZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsKKyAgICAgICAgIGN0W3hdID0gY3RbeF0gXiBwcm9kW3hdOworICAgICAgfQorI2VuZGlmCisgICAKKyAgICAgIC8qIG1vdmUgdG8gbmV4dCAqLworICAgICAgcHQgICs9IDE2OworICAgICAgY3QgICs9IDE2OworICAgICAgbGVuIC09IDE2OworICAgfQorCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisgICAgICAKKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL2xydy9scndfcHJvY2Vzcy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEwICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUzOjEzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X3NldGl2LmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvbHJ3L2xyd19zZXRpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiM2MwYWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvbHJ3L2xyd19zZXRpdi5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBscndfc2V0aXYuYworICAgTFJXX01PREUgaW1wbGVtZW50YXRpb24sIFNldCB0aGUgY3VycmVudCBJViwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0xSV19NT0RFCisKKy8qKgorICBTZXQgdGhlIElWIGZvciBMUlcKKyAgQHBhcmFtIElWICAgICAgVGhlIElWLCBtdXN0IGJlIDE2IG9jdGV0cworICBAcGFyYW0gbGVuICAgICBMZW5ndGggLi4uIG11c3QgYmUgMTYgOi0pCisgIEBwYXJhbSBscncgICAgIFRoZSBMUlcgc3RhdGUgdG8gdXBkYXRlCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBscndfc2V0aXYoY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfTFJXICpscncpCit7CisgICBpbnQgICAgICAgICAgIGVycjsKKyNpZmRlZiBMUldfVEFCTEVTCisgICB1bnNpZ25lZCBjaGFyIFRbMTZdOworICAgaW50ICAgICAgICAgICB4LCB5OworI2VuZGlmCisgICBMVENfQVJHQ0hLKElWICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhscncgIT0gTlVMTCk7CisKKyAgIGlmIChsZW4gIT0gMTYpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQobHJ3LT5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogY29weSB0aGUgSVYgKi8KKyAgIFhNRU1DUFkobHJ3LT5JViwgSVYsIDE2KTsKKworICAgLyogY2hlY2sgaWYgd2UgaGF2ZSB0byBhY3R1YWxseSBkbyB3b3JrICovCisgICBpZiAoY2lwaGVyX2Rlc2NyaXB0b3JbbHJ3LT5jaXBoZXJdLmFjY2VsX2xyd19lbmNyeXB0ICE9IE5VTEwgJiYgY2lwaGVyX2Rlc2NyaXB0b3JbbHJ3LT5jaXBoZXJdLmFjY2VsX2xyd19kZWNyeXB0ICE9IE5VTEwpIHsKKyAgICAgICAvKiB3ZSBoYXZlIGFjY2VsZXJhdG9ycywgbGV0J3MgYmFpbCBzaW5jZSB0aGV5IGRvbid0IHVzZSBscnctPnBhZCBhbnl3YXlzICovCisgICAgICAgcmV0dXJuIENSWVBUX09LOworICAgfQorCisjaWZkZWYgTFJXX1RBQkxFUworICAgWE1FTUNQWShULCAmbHJ3LT5QQ1swXVtJVlswXV1bMF0sIDE2KTsKKyAgIGZvciAoeCA9IDE7IHggPCAxNjsgeCsrKSB7CisjaWZkZWYgTFRDX0ZBU1QKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMTY7IHkgKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICAgICooKExUQ19GQVNUX1RZUEUgKikoVCArIHkpKSBePSAqKChMVENfRkFTVF9UWVBFICopKCZscnctPlBDW3hdW0lWW3hdXVt5XSkpOworICAgICAgIH0KKyNlbHNlCisgICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHsKKyAgICAgICAgICAgVFt5XSBePSBscnctPlBDW3hdW0lWW3hdXVt5XTsKKyAgICAgICB9CisjZW5kaWYKKyAgIH0KKyAgIFhNRU1DUFkobHJ3LT5wYWQsIFQsIDE2KTsKKyNlbHNlICAgICAKKyAgIGdjbV9nZl9tdWx0KGxydy0+dHdlYWssIElWLCBscnctPnBhZCk7IAorI2VuZGlmCisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X3NldGl2LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTIgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NTM6MTMgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2xydy9scndfc3RhcnQuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X3N0YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmMjRiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X3N0YXJ0LmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBscndfc3RhcnQuYworICAgTFJXX01PREUgaW1wbGVtZW50YXRpb24sIHN0YXJ0IG1vZGUsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19MUldfTU9ERQorCisvKioKKyAgSW5pdGlhbGl6ZSB0aGUgTFJXIGNvbnRleHQKKyAgQHBhcmFtIGNpcGhlciAgICAgICAgVGhlIGNpcGhlciBkZXNpcmVkLCBtdXN0IGJlIGEgMTI4LWJpdCBibG9jayBjaXBoZXIgCisgIEBwYXJhbSBJViAgICAgICAgICAgIFRoZSBpbmRleCB2YWx1ZSwgbXVzdCBiZSAxMjgtYml0cworICBAcGFyYW0ga2V5ICAgICAgICAgICBUaGUgY2lwaGVyIGtleSAKKyAgQHBhcmFtIGtleWxlbiAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgY2lwaGVyIGtleSBpbiBvY3RldHMKKyAgQHBhcmFtIHR3ZWFrICAgICAgICAgVGhlIHR3ZWFrIHZhbHVlIChzZWNvbmQga2V5KSwgbXVzdCBiZSAxMjgtYml0cworICBAcGFyYW0gbnVtX3JvdW5kcyAgICBUaGUgbnVtYmVyIG9mIHJvdW5kcyBmb3IgdGhlIGNpcGhlciAoMCA9PSBkZWZhdWx0KQorICBAcGFyYW0gbHJ3ICAgICAgICAgICBbb3V0XSBUaGUgTFJXIHN0YXRlCisgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2Vzcy4KKyovCitpbnQgbHJ3X3N0YXJ0KCAgICAgICAgICAgICAgIGludCAgIGNpcGhlciwKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqSVYsCisgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmtleSwgICAgICAgaW50IGtleWxlbiwKKyAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdHdlYWssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgbnVtX3JvdW5kcywgCisgICAgICAgICAgICAgICAgICAgc3ltbWV0cmljX0xSVyAqbHJ3KQoreworICAgaW50ICAgICAgICAgICBlcnI7CisjaWZkZWYgTFJXX1RBQkxFUworICAgdW5zaWduZWQgY2hhciBCWzE2XTsKKyAgIGludCAgICAgICAgICAgeCwgeSwgeiwgdDsKKyNlbmRpZgorCisgIExUQ19BUkdDSEsoSVYgICAgIT0gTlVMTCk7CisgIExUQ19BUkdDSEsoa2V5ICAgIT0gTlVMTCk7CisgIExUQ19BUkdDSEsodHdlYWsgIT0gTlVMTCk7CisgIExUQ19BUkdDSEsobHJ3ICAgIT0gTlVMTCk7CisKKyNpZmRlZiBMVENfRkFTVAorICAgaWYgKDE2ICUgc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisjZW5kaWYKKworICAgLyogaXMgY2lwaGVyIHZhbGlkPyAqLworICAgaWYgKChlcnIgPSBjaXBoZXJfaXNfdmFsaWQoY2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBpZiAoY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5ibG9ja19sZW5ndGggIT0gMTYpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0NJUEhFUjsKKyAgIH0KKworICAgLyogc2NoZWR1bGUga2V5ICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uc2V0dXAoa2V5LCBrZXlsZW4sIG51bV9yb3VuZHMsICZscnctPmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgbHJ3LT5jaXBoZXIgPSBjaXBoZXI7CisKKyAgIC8qIGNvcHkgdGhlIElWIGFuZCB0d2VhayAqLworICAgWE1FTUNQWShscnctPnR3ZWFrLCB0d2VhaywgMTYpOworCisjaWZkZWYgTFJXX1RBQkxFUworICAgLyogc2V0dXAgdGFibGVzICovCisgICAvKiBnZW5lcmF0ZSB0aGUgZmlyc3QgdGFibGUgYXMgaXQgaGFzIG5vIHNoaWZ0aW5nIChmcm9tIHdoaWNoIHdlIG1ha2UgdGhlIG90aGVyIHRhYmxlcykgKi8KKyAgIHplcm9tZW0oQiwgMTYpOworICAgZm9yICh5ID0gMDsgeSA8IDI1NjsgeSsrKSB7CisgICAgICAgIEJbMF0gPSB5OworICAgICAgICBnY21fZ2ZfbXVsdCh0d2VhaywgQiwgJmxydy0+UENbMF1beV1bMF0pOworICAgfQorCisgICAvKiBub3cgZ2VuZXJhdGUgdGhlIHJlc3Qgb2YgdGhlIHRhYmxlcyBiYXNlZCB0aGUgcHJldmlvdXMgdGFibGUgKi8KKyAgIGZvciAoeCA9IDE7IHggPCAxNjsgeCsrKSB7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgMjU2OyB5KyspIHsKKyAgICAgICAgIC8qIG5vdyBzaGlmdCBpdCByaWdodCBieSA4IGJpdHMgKi8KKyAgICAgICAgIHQgPSBscnctPlBDW3gtMV1beV1bMTVdOworICAgICAgICAgZm9yICh6ID0gMTU7IHogPiAwOyB6LS0pIHsKKyAgICAgICAgICAgICBscnctPlBDW3hdW3ldW3pdID0gbHJ3LT5QQ1t4LTFdW3ldW3otMV07CisgICAgICAgICB9CisgICAgICAgICBscnctPlBDW3hdW3ldWzBdICA9IGdjbV9zaGlmdF90YWJsZVt0PDwxXTsKKyAgICAgICAgIGxydy0+UENbeF1beV1bMV0gXj0gZ2NtX3NoaWZ0X3RhYmxlWyh0PDwxKSsxXTsKKyAgICAgfQorICB9CisjZW5kaWYKKworICAgLyogZ2VuZXJhdGUgZmlyc3QgcGFkICovCisgICByZXR1cm4gbHJ3X3NldGl2KElWLCAxNiwgbHJ3KTsKK30KKworCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X3N0YXJ0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTEgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NTM6MTMgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL2xydy9scndfdGVzdC5jIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL2xydy9scndfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMzM4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvbHJ3L2xyd190ZXN0LmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBscndfdGVzdC5jCisgICBMUldfTU9ERSBpbXBsZW1lbnRhdGlvbiwgdGVzdCBMUlcsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19MUldfTU9ERQorCisvKioKKyAgVGVzdCBMUlcgYWdhaW5zdCBzcGVjcworICBAcmV0dXJuIENSWVBUX09LIGlmIGdvb2RseQorKi8KK2ludCBscndfdGVzdCh2b2lkKQoreworI2lmbmRlZiAgTFRDX1RFU1QKKyAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICB1bnNpZ25lZCBjaGFyIGtleVsxNl0sIHR3ZWFrWzE2XSwgSVZbMTZdLCBQWzE2XSwgZXhwZWN0ZWRfdHdlYWtbMTZdLCBDWzE2XTsKKyAgIH0gdGVzdHNbXSA9IHsKKworeworeyAweDQ1LCAweDYyLCAweGFjLCAweDI1LCAweGY4LCAweDI4LCAweDE3LCAweDZkLCAweDRjLCAweDI2LCAweDg0LCAweDE0LCAweGI1LCAweDY4LCAweDAxLCAweDg1IH0sCit7IDB4MjUsIDB4OGUsIDB4MmEsIDB4MDUsIDB4ZTcsIDB4M2UsIDB4OWQsIDB4MDMsIDB4ZWUsIDB4NWEsIDB4ODMsIDB4MGMsIDB4Y2MsIDB4MDksIDB4NGMsIDB4ODcgfSwKK3sgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAoreyAweDMwLCAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2IH0sCit7IDB4MjUsIDB4OGUsIDB4MmEsIDB4MDUsIDB4ZTcsIDB4M2UsIDB4OWQsIDB4MDMsIDB4ZWUsIDB4NWEsIDB4ODMsIDB4MGMsIDB4Y2MsIDB4MDksIDB4NGMsIDB4ODcgfSwKK3sgMHhmMSwgMHhiMiwgMHg3MywgMHhjZCwgMHg2NSwgMHhhMywgMHhkZiwgMHg1ZiwgMHhlOSwgMHg1ZCwgMHg0OCwgMHg5MiwgMHg1NCwgMHg2MywgMHg0ZSwgMHhiOCB9Cit9LAorCit7Cit7IDB4NTksIDB4NzAsIDB4NDcsIDB4MTQsIDB4ZjUsIDB4NTcsIDB4NDcsIDB4OGMsIDB4ZDcsIDB4NzksIDB4ZTgsIDB4MGYsIDB4NTQsIDB4ODgsIDB4NzksIDB4NDQgfSwKK3sgMHgzNSwgMHgyMywgMHhjMiwgMHhkZSwgMHhjNSwgMHg2OSwgMHg0ZiwgMHhhOCwgMHg3MiwgMHhhOSwgMHhhYywgMHhhNywgMHgwYiwgMHgyYiwgMHhlZSwgMHhiYyB9LAoreyAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCit7IDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYgfSwKK3sgMHgxYSwgMHg5MSwgMHhlMSwgMHg2ZiwgMHg2MiwgMHhiNCwgMHhhNywgMHhkNCwgMHgzOSwgMHg1NCwgMHhkNiwgMHg1MywgMHg4NSwgMHg5NSwgMHhmNywgMHg1ZSB9LAoreyAweDAwLCAweGM4LCAweDJiLCAweGFlLCAweDk1LCAweGJiLCAweGNkLCAweGU1LCAweDI3LCAweDRmLCAweDA3LCAweDY5LCAweGIyLCAweDYwLCAweGUxLCAweDM2IH0sCit9LAorCit7Cit7IDB4NTksIDB4NzAsIDB4NDcsIDB4MTQsIDB4ZjUsIDB4NTcsIDB4NDcsIDB4OGMsIDB4ZDcsIDB4NzksIDB4ZTgsIDB4MGYsIDB4NTQsIDB4ODgsIDB4NzksIDB4NDQgfSwKK3sgMHg2NywgMHg1MywgMHhjOSwgMHgwYywgMHhiNywgMHhkOCwgMHhjZCwgMHhlNSwgMHgwNiwgMHhhMCwgMHg0NywgMHg3OCwgMHgxYSwgMHhhZCwgMHg4NSwgMHgxMSB9LAoreyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAyIH0sCit7IDB4MzAsIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4NDEsIDB4NDIsIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYgfSwKK3sgMHgxYSwgMHg5MSwgMHhlMSwgMHg2ZiwgMHg2MiwgMHhiNCwgMHhhNywgMHhkNCwgMHgzOSwgMHg1NCwgMHhkNiwgMHg1MywgMHg4NSwgMHg5NSwgMHhmNywgMHg1ZSB9LAoreyAweDAwLCAweGM4LCAweDJiLCAweGFlLCAweDk1LCAweGJiLCAweGNkLCAweGU1LCAweDI3LCAweDRmLCAweDA3LCAweDY5LCAweGIyLCAweDYwLCAweGUxLCAweDM2IH0sCit9LAorCit7CisKK3sgMHhkOCwgMHgyYSwgMHg5MSwgMHgzNCwgMHhiMiwgMHg2YSwgMHg1NiwgMHg1MCwgMHgzMCwgMHhmZSwgMHg2OSwgMHhlMiwgMHgzNywgMHg3ZiwgMHg5OCwgMHg0NyB9LAoreyAweDRlLCAweGI1LCAweDVkLCAweDMxLCAweDA1LCAweDk3LCAweDNhLCAweDNmLCAweDVlLCAweDIzLCAweGRhLCAweGZiLCAweDVhLCAweDQ1LCAweGQ2LCAweGMwIH0sCit7IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKK3sgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgzOSwgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiB9LAoreyAweDE4LCAweGM5LCAweDFmLCAweDZkLCAweDYwLCAweDFhLCAweDFhLCAweDM3LCAweDVkLCAweDBiLCAweDBlLCAweGY3LCAweDNhLCAweGQ1LCAweDc0LCAweGM0IH0sCit7IDB4NzYsIDB4MzIsIDB4MjEsIDB4ODMsIDB4ZWQsIDB4OGYsIDB4ZjEsIDB4ODIsIDB4ZjksIDB4NTksIDB4NjIsIDB4MDMsIDB4NjksIDB4MGUsIDB4NWUsIDB4MDEgfSwKKworfQorfTsKKworICBpbnQgaWR4LCBlcnIsIHg7CisgIHN5bW1ldHJpY19MUlcgbHJ3OworICB1bnNpZ25lZCBjaGFyIGJ1ZlsyXVsxNl07CisKKyAgaWR4ID0gZmluZF9jaXBoZXIoImFlcyIpOworICBpZiAoaWR4ID09IC0xKSB7CisgICAgIGlkeCA9IGZpbmRfY2lwaGVyKCJyaWpuZGFlbCIpOworICAgICBpZiAoaWR4ID09IC0xKSB7CisgICAgICAgIHJldHVybiBDUllQVF9OT1A7CisgICAgIH0KKyAgfQorCisgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSkpOyB4KyspIHsKKyAgICAgLyogc2NoZWR1bGUgaXQgKi8KKyAgICAgaWYgKChlcnIgPSBscndfc3RhcnQoaWR4LCB0ZXN0c1t4XS5JViwgdGVzdHNbeF0ua2V5LCAxNiwgdGVzdHNbeF0udHdlYWssIDAsICZscncpKSAhPSBDUllQVF9PSykgeworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisKKyAgICAgLyogY2hlY2sgcGFkIGFnYWluc3QgZXhwZWN0ZWQgdHdlYWsgKi8KKyAgICAgaWYgKFhNRU1DTVAodGVzdHNbeF0uZXhwZWN0ZWRfdHdlYWssIGxydy5wYWQsIDE2KSkgeworICAgICAgICBscndfZG9uZSgmbHJ3KTsKKyAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgfQorCisgICAgIC8qIHByb2Nlc3MgYmxvY2sgKi8KKyAgICAgaWYgKChlcnIgPSBscndfZW5jcnlwdCh0ZXN0c1t4XS5QLCBidWZbMF0sIDE2LCAmbHJ3KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgbHJ3X2RvbmUoJmxydyk7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgIH0KKworICAgICBpZiAoWE1FTUNNUChidWZbMF0sIHRlc3RzW3hdLkMsIDE2KSkgeworICAgICAgICBscndfZG9uZSgmbHJ3KTsKKyAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgfQorCisgICAgIC8qIHByb2Nlc3MgYmxvY2sgKi8KKyAgICAgaWYgKChlcnIgPSBscndfc2V0aXYodGVzdHNbeF0uSVYsIDE2LCAmbHJ3KSkgIT0gQ1JZUFRfT0spIHsgCisgICAgICAgIGxyd19kb25lKCZscncpOworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisKKyAgICAgaWYgKChlcnIgPSBscndfZGVjcnlwdChidWZbMF0sIGJ1ZlsxXSwgMTYsICZscncpKSAhPSBDUllQVF9PSykgeworICAgICAgICBscndfZG9uZSgmbHJ3KTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgfQorCisgICAgIGlmIChYTUVNQ01QKGJ1ZlsxXSwgdGVzdHNbeF0uUCwgMTYpKSB7CisgICAgICAgIGxyd19kb25lKCZscncpOworICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICB9CisgICAgIGlmICgoZXJyID0gbHJ3X2RvbmUoJmxydykpICE9IENSWVBUX09LKSB7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgIH0KKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZgorfQorCisjZW5kaWYKKworCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9scncvbHJ3X3Rlc3QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo1MzoxMyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9kZWNyeXB0LmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9kZWNyeXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFkYTFlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX2RlY3J5cHQuYwpAQCAtMCwwICsxLDQzIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBvZmJfZGVjcnlwdC5jCisgIE9GQiBpbXBsZW1lbnRhdGlvbiwgZGVjcnlwdCBkYXRhLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfT0ZCX01PREUKKworLyoqCisgICBPRkIgZGVjcnlwdAorICAgQHBhcmFtIGN0ICAgICAgQ2lwaGVydGV4dAorICAgQHBhcmFtIHB0ICAgICAgW291dF0gUGxhaW50ZXh0CisgICBAcGFyYW0gbGVuICAgICBMZW5ndGggb2YgY2lwaGVydGV4dCAob2N0ZXRzKQorICAgQHBhcmFtIG9mYiAgICAgT0ZCIHN0YXRlCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgb2ZiX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqY3QsIHVuc2lnbmVkIGNoYXIgKnB0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX09GQiAqb2ZiKQoreworICAgTFRDX0FSR0NISyhwdCAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoY3QgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG9mYiAhPSBOVUxMKTsKKyAgIHJldHVybiBvZmJfZW5jcnlwdChjdCwgcHQsIGxlbiwgb2ZiKTsKK30KKworCisjZW5kaWYKKworIAorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9kZWNyeXB0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo1MTozNCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9kb25lLmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9kb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhOWRlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX2RvbmUuYwpAQCAtMCwwICsxLDQyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgb2ZiX2RvbmUuYworICAgT0ZCIGltcGxlbWVudGF0aW9uLCBmaW5pc2ggY2hhaW4sIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19PRkJfTU9ERQorCisvKiogVGVybWluYXRlIHRoZSBjaGFpbgorICBAcGFyYW0gb2ZiICAgIFRoZSBPRkIgY2hhaW4gdG8gdGVybWluYXRlCisgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCBvZmJfZG9uZShzeW1tZXRyaWNfT0ZCICpvZmIpCit7CisgICBpbnQgZXJyOworICAgTFRDX0FSR0NISyhvZmIgIT0gTlVMTCk7CisKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKG9mYi0+Y2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBjaXBoZXJfZGVzY3JpcHRvcltvZmItPmNpcGhlcl0uZG9uZSgmb2ZiLT5rZXkpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisgICAKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX2RvbmUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX2VuY3J5cHQuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX2VuY3J5cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzE5ZjFkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL21vZGVzL29mYi9vZmJfZW5jcnlwdC5jCkBAIC0wLDAgKzEsNjAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIG9mYl9lbmNyeXB0LmMKKyAgT0ZCIGltcGxlbWVudGF0aW9uLCBlbmNyeXB0IGRhdGEsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19PRkJfTU9ERQorCisvKioKKyAgT0ZCIGVuY3J5cHQKKyAgQHBhcmFtIHB0ICAgICBQbGFpbnRleHQKKyAgQHBhcmFtIGN0ICAgICBbb3V0XSBDaXBoZXJ0ZXh0CisgIEBwYXJhbSBsZW4gICAgTGVuZ3RoIG9mIHBsYWludGV4dCAob2N0ZXRzKQorICBAcGFyYW0gb2ZiICAgIE9GQiBzdGF0ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgb2ZiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqcHQsIHVuc2lnbmVkIGNoYXIgKmN0LCB1bnNpZ25lZCBsb25nIGxlbiwgc3ltbWV0cmljX09GQiAqb2ZiKQoreworICAgaW50IGVycjsKKyAgIExUQ19BUkdDSEsocHQgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGN0ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvZmIgIT0gTlVMTCk7CisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChvZmItPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIAorICAgLyogaXMgYmxvY2tsZW4vcGFkbGVuIHZhbGlkPyAqLworICAgaWYgKG9mYi0+YmxvY2tsZW4gPCAwIHx8IG9mYi0+YmxvY2tsZW4gPiAoaW50KXNpemVvZihvZmItPklWKSB8fAorICAgICAgIG9mYi0+cGFkbGVuICAgPCAwIHx8IG9mYi0+cGFkbGVuICAgPiAoaW50KXNpemVvZihvZmItPklWKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorICAgCisgICB3aGlsZSAobGVuLS0gPiAwKSB7CisgICAgICAgaWYgKG9mYi0+cGFkbGVuID09IG9mYi0+YmxvY2tsZW4pIHsKKyAgICAgICAgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW29mYi0+Y2lwaGVyXS5lY2JfZW5jcnlwdChvZmItPklWLCBvZmItPklWLCAmb2ZiLT5rZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgfQorICAgICAgICAgIG9mYi0+cGFkbGVuID0gMDsKKyAgICAgICB9CisgICAgICAgKmN0KysgPSAqcHQrKyBeIG9mYi0+SVZbKG9mYi0+cGFkbGVuKSsrXTsKKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX2VuY3J5cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI2IDAxOjQ1OjE0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX2dldGl2LmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9nZXRpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MWQxNGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9nZXRpdi5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBvZmJfZ2V0aXYuYworICAgT0ZCIGltcGxlbWVudGF0aW9uLCBnZXQgSVYsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19PRkJfTU9ERQorCisvKioKKyAgIEdldCB0aGUgY3VycmVudCBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIElWICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIGxlbiAgW2luL291dF0gIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gb2ZiICBUaGUgT0ZCIHN0YXRlCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgb2ZiX2dldGl2KHVuc2lnbmVkIGNoYXIgKklWLCB1bnNpZ25lZCBsb25nICpsZW4sIHN5bW1ldHJpY19PRkIgKm9mYikKK3sKKyAgIExUQ19BUkdDSEsoSVYgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhsZW4gIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG9mYiAhPSBOVUxMKTsKKyAgIGlmICgodW5zaWduZWQgbG9uZylvZmItPmJsb2NrbGVuID4gKmxlbikgeworICAgICAgKmxlbiA9IG9mYi0+YmxvY2tsZW47CisgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgfQorICAgWE1FTUNQWShJViwgb2ZiLT5JViwgb2ZiLT5ibG9ja2xlbik7CisgICAqbGVuID0gb2ZiLT5ibG9ja2xlbjsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL21vZGVzL29mYi9vZmJfZ2V0aXYuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzI5IDAxOjUxOjM0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX3NldGl2LmMgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9zZXRpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1YTg0ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9zZXRpdi5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBvZmJfc2V0aXYuYworICAgT0ZCIGltcGxlbWVudGF0aW9uLCBzZXQgSVYsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19PRkJfTU9ERQorCisvKioKKyAgIFNldCBhbiBpbml0aWFsIHZlY3RvcgorICAgQHBhcmFtIElWICAgVGhlIGluaXRpYWwgdmVjdG9yCisgICBAcGFyYW0gbGVuICBUaGUgbGVuZ3RoIG9mIHRoZSB2ZWN0b3IgKGluIG9jdGV0cykKKyAgIEBwYXJhbSBvZmIgIFRoZSBPRkIgc3RhdGUKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBvZmJfc2V0aXYoY29uc3QgdW5zaWduZWQgY2hhciAqSVYsIHVuc2lnbmVkIGxvbmcgbGVuLCBzeW1tZXRyaWNfT0ZCICpvZmIpCit7CisgICBpbnQgZXJyOworCisgICBMVENfQVJHQ0hLKElWICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob2ZiICE9IE5VTEwpOworCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChvZmItPmNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKGxlbiAhPSAodW5zaWduZWQgbG9uZylvZmItPmJsb2NrbGVuKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIGZvcmNlIG5leHQgYmxvY2sgKi8KKyAgIG9mYi0+cGFkbGVuID0gMDsKKyAgIHJldHVybiBjaXBoZXJfZGVzY3JpcHRvcltvZmItPmNpcGhlcl0uZWNiX2VuY3J5cHQoSVYsIG9mYi0+SVYsICZvZmItPmtleSk7Cit9CisKKyNlbmRpZiAKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvbW9kZXMvb2ZiL29mYl9zZXRpdi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMjkgMDE6NTE6MzQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL21vZGVzL29mYi9vZmJfc3RhcnQuYyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX3N0YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwZjY1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX3N0YXJ0LmMKQEAgLTAsMCArMSw2MCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIG9mYl9zdGFydC5jCisgICBPRkIgaW1wbGVtZW50YXRpb24sIHN0YXJ0IGNoYWluLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19PRkJfTU9ERQorCisvKioKKyAgIEluaXRpYWxpemUgYSBPRkIgY29udGV4dAorICAgQHBhcmFtIGNpcGhlciAgICAgIFRoZSBpbmRleCBvZiB0aGUgY2lwaGVyIGRlc2lyZWQKKyAgIEBwYXJhbSBJViAgICAgICAgICBUaGUgaW5pdGlhbCB2ZWN0b3IKKyAgIEBwYXJhbSBrZXkgICAgICAgICBUaGUgc2VjcmV0IGtleSAKKyAgIEBwYXJhbSBrZXlsZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzZWNyZXQga2V5IChvY3RldHMpCisgICBAcGFyYW0gbnVtX3JvdW5kcyAgTnVtYmVyIG9mIHJvdW5kcyBpbiB0aGUgY2lwaGVyIGRlc2lyZWQgKDAgZm9yIGRlZmF1bHQpCisgICBAcGFyYW0gb2ZiICAgICAgICAgVGhlIE9GQiBzdGF0ZSB0byBpbml0aWFsaXplCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgb2ZiX3N0YXJ0KGludCBjaXBoZXIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKklWLCBjb25zdCB1bnNpZ25lZCBjaGFyICprZXksIAorICAgICAgICAgICAgICBpbnQga2V5bGVuLCBpbnQgbnVtX3JvdW5kcywgc3ltbWV0cmljX09GQiAqb2ZiKQoreworICAgaW50IHgsIGVycjsKKworICAgTFRDX0FSR0NISyhJViAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvZmIgIT0gTlVMTCk7CisKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKGNpcGhlcikpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBjb3B5IGRldGFpbHMgKi8KKyAgIG9mYi0+Y2lwaGVyID0gY2lwaGVyOworICAgb2ZiLT5ibG9ja2xlbiA9IGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl0uYmxvY2tfbGVuZ3RoOworICAgZm9yICh4ID0gMDsgeCA8IG9mYi0+YmxvY2tsZW47IHgrKykgeworICAgICAgIG9mYi0+SVZbeF0gPSBJVlt4XTsKKyAgIH0KKworICAgLyogaW5pdCB0aGUgY2lwaGVyICovCisgICBvZmItPnBhZGxlbiA9IG9mYi0+YmxvY2tsZW47CisgICByZXR1cm4gY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyXS5zZXR1cChrZXksIGtleWxlbiwgbnVtX3JvdW5kcywgJm9mYi0+a2V5KTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9tb2Rlcy9vZmIvb2ZiX3N0YXJ0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8yOSAwMTo1MTozNCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9kZWNvZGVfYml0X3N0cmluZy5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZGVjb2RlX2JpdF9zdHJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDM1NjljCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZGVjb2RlX2JpdF9zdHJpbmcuYwpAQCAtMCwwICsxLDEwMiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2RlY29kZV9iaXRfc3RyaW5nLmMKKyAgQVNOLjEgREVSLCBlbmNvZGUgYSBCSVQgU1RSSU5HLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19ERVIKKworLyoqCisgIFN0b3JlIGEgQklUIFNUUklORworICBAcGFyYW0gaW4gICAgICBUaGUgREVSIGVuY29kZWQgQklUIFNUUklORworICBAcGFyYW0gaW5sZW4gICBUaGUgc2l6ZSBvZiB0aGUgREVSIEJJVCBTVFJJTkcKKyAgQHBhcmFtIG91dCAgICAgW291dF0gVGhlIGFycmF5IG9mIGJpdHMgc3RvcmVkIChvbmUgcGVyIGNoYXIpCisgIEBwYXJhbSBvdXRsZW4gIFtpbi9vdXRdIFRoZSBudW1iZXIgb2YgYml0cyBzdG9yZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlcl9kZWNvZGVfYml0X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgdW5zaWduZWQgbG9uZyBkbGVuLCBibGVuLCB4LCB5OworCisgICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgIC8qIHBhY2tldCBtdXN0IGJlIGF0IGxlYXN0IDQgYnl0ZXMgKi8KKyAgIGlmIChpbmxlbiA8IDQpIHsKKyAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIGNoZWNrIGZvciAweDAzICovCisgICBpZiAoKGluWzBdJjB4MUYpICE9IDB4MDMpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgIH0KKworICAgIC8qIG9mZnNldCBpbiB0aGUgZGF0YSAqLworICAgIHggPSAxOworCisgICAvKiBnZXQgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSAqLworICAgaWYgKGluW3hdICYgMHg4MCkgeworICAgICAgLyogbG9uZyBmb3JtYXQgZ2V0IG51bWJlciBvZiBsZW5ndGggYnl0ZXMgKi8KKyAgICAgIHkgPSBpblt4KytdICYgMHg3RjsKKworICAgICAgLyogaW52YWxpZCBpZiAwIG9yID4gMiAqLworICAgICAgaWYgKHkgPT0gMCB8fCB5ID4gMikgeworICAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgfQorCisgICAgICAvKiByZWFkIHRoZSBkYXRhIGxlbiAqLworICAgICAgZGxlbiA9IDA7CisgICAgICB3aGlsZSAoeS0tKSB7CisgICAgICAgICBkbGVuID0gKGRsZW4gPDwgOCkgfCAodW5zaWduZWQgbG9uZylpblt4KytdOworICAgICAgfQorICAgfSBlbHNlIHsKKyAgICAgIC8qIHNob3J0IGZvcm1hdCAqLworICAgICAgZGxlbiA9IGluW3grK10gJiAweDdGOworICAgfQorICAKKyAgIC8qIGlzIHRoZSBkYXRhIGxlbiB0b28gbG9uZyBvciB0b28gc2hvcnQ/ICovCisgICBpZiAoKGRsZW4gPT0gMCkgfHwgKGRsZW4gKyB4ID4gaW5sZW4pKSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiBnZXQgcGFkZGluZyBjb3VudCAqLworICAgYmxlbiA9ICgoZGxlbiAtIDEpIDw8IDMpIC0gKGluW3grK10gJiA3KTsKKworICAgLyogdG9vIG1hbnkgYml0cz8gKi8KKyAgIGlmIChibGVuID4gKm91dGxlbikgeworICAgICAgKm91dGxlbiA9IGJsZW47CisgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgfQorCisgICAvKiBkZWNvZGUvc3RvcmUgdGhlIGJpdHMgKi8KKyAgIGZvciAoeSA9IDA7IHkgPCBibGVuOyB5KyspIHsKKyAgICAgICBvdXRbeV0gPSAoaW5beF0gJiAoMSA8PCAoNyAtICh5ICYgNykpKSkgPyAxIDogMDsKKyAgICAgICBpZiAoKHkgJiA3KSA9PSA3KSB7CisgICAgICAgICAgKyt4OworICAgICAgIH0KKyAgIH0KKworICAgLyogd2UgZG9uZSAqLworICAgKm91dGxlbiA9IGJsZW47CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9kZWNvZGVfYml0X3N0cmluZy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjE6NTM6NDEgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZW5jb2RlX2JpdF9zdHJpbmcuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9iaXQvZGVyX2VuY29kZV9iaXRfc3RyaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU3OTYzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9iaXQvZGVyX2VuY29kZV9iaXRfc3RyaW5nLmMKQEAgLTAsMCArMSw4OSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2VuY29kZV9iaXRfc3RyaW5nLmMKKyAgQVNOLjEgREVSLCBlbmNvZGUgYSBCSVQgU1RSSU5HLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19ERVIKKworLyoqCisgIFN0b3JlIGEgQklUIFNUUklORworICBAcGFyYW0gaW4gICAgICAgVGhlIGFycmF5IG9mIGJpdHMgdG8gc3RvcmUgKG9uZSBwZXIgY2hhcikKKyAgQHBhcmFtIGlubGVuICAgIFRoZSBudW1iZXIgb2YgYml0cyB0b3N0b3JlCisgIEBwYXJhbSBvdXQgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBERVIgZW5jb2RlZCBCSVQgU1RSSU5HCisgIEBwYXJhbSBvdXRsZW4gICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBERVIgQklUIFNUUklORworICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZGVyX2VuY29kZV9iaXRfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgbGVuLCB4LCB5OworICAgdW5zaWduZWQgY2hhciBidWY7CisgICBpbnQgICAgICAgICAgIGVycjsKKworICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworCisgICAvKiBhdm9pZCBvdmVyZmxvd3MgKi8KKyAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9iaXRfc3RyaW5nKGlubGVuLCAmbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGlmIChsZW4gPiAqb3V0bGVuKSB7CisgICAgICAqb3V0bGVuID0gbGVuOworICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgIH0KKworICAgLyogc3RvcmUgaGVhZGVyIChpbmNsdWRlIGJpdCBwYWRkaW5nIGNvdW50IGluIGxlbmd0aCkgKi8KKyAgIHggPSAwOworICAgeSA9IChpbmxlbiA+PiAzKSArICgoaW5sZW4mNykgPyAxIDogMCkgKyAxOworCisgICBvdXRbeCsrXSA9IDB4MDM7CisgICBpZiAoeSA8IDEyOCkgeworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcil5OworICAgfSBlbHNlIGlmICh5IDwgMjU2KSB7CisgICAgICBvdXRbeCsrXSA9IDB4ODE7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKXk7CisgICB9IGVsc2UgaWYgKHkgPCA2NTUzNikgeworICAgICAgb3V0W3grK10gPSAweDgyOworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoKHk+PjgpJjI1NSk7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSh5JjI1NSk7CisgICB9CisKKyAgIC8qIHN0b3JlIG51bWJlciBvZiB6ZXJvIHBhZGRpbmcgYml0cyAqLworICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoKDggLSBpbmxlbikgJiA3KTsKKworICAgLyogc3RvcmUgdGhlIGJpdHMgaW4gYmlnIGVuZGlhbiBmb3JtYXQgKi8KKyAgIGZvciAoeSA9IGJ1ZiA9IDA7IHkgPCBpbmxlbjsgeSsrKSB7CisgICAgICAgYnVmIHw9IChpblt5XSA/IDEgOiAwKSA8PCAoNyAtICh5ICYgNykpOworICAgICAgIGlmICgoeSAmIDcpID09IDcpIHsKKyAgICAgICAgICBvdXRbeCsrXSA9IGJ1ZjsKKyAgICAgICAgICBidWYgICAgICA9IDA7CisgICAgICAgfQorICAgfQorICAgLyogc3RvcmUgbGFzdCBieXRlICovCisgICBpZiAoaW5sZW4gJiA3KSB7CisgICAgICBvdXRbeCsrXSA9IGJ1ZjsKKyAgIH0KKyAgICpvdXRsZW4gPSB4OworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfZW5jb2RlX2JpdF9zdHJpbmcuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIxOjM0OjAzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9iaXQvZGVyX2xlbmd0aF9iaXRfc3RyaW5nLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9sZW5ndGhfYml0X3N0cmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYzJhYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvYml0L2Rlcl9sZW5ndGhfYml0X3N0cmluZy5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9sZW5ndGhfYml0X3N0cmluZy5jCisgIEFTTi4xIERFUiwgZ2V0IGxlbmd0aCBvZiBCSVQgU1RSSU5HLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisvKioKKyAgR2V0cyBsZW5ndGggb2YgREVSIGVuY29kaW5nIG9mIEJJVCBTVFJJTkcgCisgIEBwYXJhbSBuYml0cyAgVGhlIG51bWJlciBvZiBiaXRzIGluIHRoZSBzdHJpbmcgdG8gZW5jb2RlCisgIEBwYXJhbSBvdXRsZW4gW291dF0gVGhlIGxlbmd0aCBvZiB0aGUgREVSIGVuY29kaW5nIGZvciB0aGUgZ2l2ZW4gc3RyaW5nCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfbGVuZ3RoX2JpdF9zdHJpbmcodW5zaWduZWQgbG9uZyBuYml0cywgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgdW5zaWduZWQgbG9uZyBuYnl0ZXM7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgLyogZ2V0IHRoZSBudW1iZXIgb2YgdGhlIGJ5dGVzICovCisgICBuYnl0ZXMgPSAobmJpdHMgPj4gMykgKyAoKG5iaXRzICYgNykgPyAxIDogMCkgKyAxOworIAorICAgaWYgKG5ieXRlcyA8IDEyOCkgeworICAgICAgLyogMDMgTEwgUFAgREQgREQgREQgLi4uICovCisgICAgICAqb3V0bGVuID0gMiArIG5ieXRlczsKKyAgIH0gZWxzZSBpZiAobmJ5dGVzIDwgMjU2KSB7CisgICAgICAvKiAwMyA4MSBMTCBQUCBERCBERCBERCAuLi4gKi8KKyAgICAgICpvdXRsZW4gPSAzICsgbmJ5dGVzOworICAgfSBlbHNlIGlmIChuYnl0ZXMgPCA2NTUzNikgeworICAgICAgLyogMDMgODIgTEwgTEwgUFAgREQgREQgREQgLi4uICovCisgICAgICAqb3V0bGVuID0gNCArIG5ieXRlczsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2JpdC9kZXJfbGVuZ3RoX2JpdF9zdHJpbmcuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9kZWNvZGVfYm9vbGVhbi5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2RlY29kZV9ib29sZWFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI1OWU1MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9kZWNvZGVfYm9vbGVhbi5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9kZWNvZGVfYm9vbGVhbi5jCisgIEFTTi4xIERFUiwgZGVjb2RlIGEgQk9PTEVBTiwgVG9tIFN0IERlbmlzCisqLworCisKKyNpZmRlZiBMVENfREVSCisKKy8qKgorICBSZWFkIGEgQk9PTEVBTgorICBAcGFyYW0gaW4gICAgICBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBERVIgZW5jb2RlZCBCT09MRUFOCisgIEBwYXJhbSBpbmxlbiAgIFRoZSBzaXplIG9mIHRoZSBERVIgQk9PTEVBTgorICBAcGFyYW0gb3V0ICAgICBbb3V0XSAgVGhlIGJvb2xlYW4gdG8gZGVjb2RlCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfZGVjb2RlX2Jvb2xlYW4oY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKm91dCkKK3sKKyAgIExUQ19BUkdDSEsoaW4gICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgIT0gTlVMTCk7CisgICAKKyAgIGlmIChpbmxlbiAhPSAzIHx8IGluWzBdICE9IDB4MDEgfHwgaW5bMV0gIT0gMHgwMSB8fCAoaW5bMl0gIT0gMHgwMCAmJiBpblsyXSAhPSAweEZGKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorICAgCisgICAqb3V0ID0gKGluWzJdPT0weEZGKSA/IDEgOiAwOworICAgCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfZGVjb2RlX2Jvb2xlYW4uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xICQgKi8KKy8qICREYXRlOiAyMDA2LzA0LzIyIDE3OjAxOjU5ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9lbmNvZGVfYm9vbGVhbi5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2VuY29kZV9ib29sZWFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM0NGE3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9lbmNvZGVfYm9vbGVhbi5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9lbmNvZGVfYm9vbGVhbi5jCisgIEFTTi4xIERFUiwgZW5jb2RlIGEgQk9PTEVBTiwgVG9tIFN0IERlbmlzCisqLworCisKKyNpZmRlZiBMVENfREVSCisKKy8qKgorICBTdG9yZSBhIEJPT0xFQU4KKyAgQHBhcmFtIGluICAgICAgIFRoZSBib29sZWFuIHRvIGVuY29kZQorICBAcGFyYW0gb3V0ICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgREVSIGVuY29kZWQgQk9PTEVBTgorICBAcGFyYW0gb3V0bGVuICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgREVSIEJPT0xFQU4KKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlcl9lbmNvZGVfYm9vbGVhbihpbnQgaW4sIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICAKKyAgIGlmICgqb3V0bGVuIDwgMykgeworICAgICAgICpvdXRsZW4gPSAzOworICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisgICAKKyAgICpvdXRsZW4gPSAzOworICAgb3V0WzBdID0gMHgwMTsKKyAgIG91dFsxXSA9IDB4MDE7CisgICBvdXRbMl0gPSBpbiA/IDB4RkYgOiAweDAwOworICAgCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfZW5jb2RlX2Jvb2xlYW4uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIxOjUzOjQxICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9sZW5ndGhfYm9vbGVhbi5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2Jvb2xlYW4vZGVyX2xlbmd0aF9ib29sZWFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q1YmYyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9ib29sZWFuL2Rlcl9sZW5ndGhfYm9vbGVhbi5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9sZW5ndGhfYm9vbGVhbi5jCisgIEFTTi4xIERFUiwgZ2V0IGxlbmd0aCBvZiBhIEJPT0xFQU4sIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKy8qKgorICBHZXRzIGxlbmd0aCBvZiBERVIgZW5jb2Rpbmcgb2YgYSBCT09MRUFOIAorICBAcGFyYW0gb3V0bGVuIFtvdXRdIFRoZSBsZW5ndGggb2YgdGhlIERFUiBlbmNvZGluZworICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZGVyX2xlbmd0aF9ib29sZWFuKHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICAgKm91dGxlbiA9IDM7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvYm9vbGVhbi9kZXJfbGVuZ3RoX2Jvb2xlYW4uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA2LzA0LzIyIDE3OjI4OjM4ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9jaG9pY2UvZGVyX2RlY29kZV9jaG9pY2UuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9jaG9pY2UvZGVyX2RlY29kZV9jaG9pY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmY2ZjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2Nob2ljZS9kZXJfZGVjb2RlX2Nob2ljZS5jCkBAIC0wLDAgKzEsMTgyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZGVjb2RlX2Nob2ljZS5jCisgIEFTTi4xIERFUiwgZGVjb2RlIGEgQ0hPSUNFLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisKKy8qKgorICAgRGVjb2RlIGEgQ0hPSUNFCisgICBAcGFyYW0gaW4gICAgICAgVGhlIERFUiBlbmNvZGVkIGlucHV0CisgICBAcGFyYW0gaW5sZW4gICAgW2luL291dF0gVGhlIHNpemUgb2YgdGhlIGlucHV0IGFuZCByZXN1bHRpbmcgc2l6ZSBvZiByZWFkIHR5cGUKKyAgIEBwYXJhbSBsaXN0ICAgICBUaGUgbGlzdCBvZiBpdGVtcyB0byBkZWNvZGUKKyAgIEBwYXJhbSBvdXRsZW4gICBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBsaXN0CisgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyovCitpbnQgZGVyX2RlY29kZV9jaG9pY2UoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyAqaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX2FzbjFfbGlzdCAqbGlzdCwgdW5zaWduZWQgbG9uZyAgb3V0bGVuKQoreworICAgdW5zaWduZWQgbG9uZyBzaXplLCB4LCB6OworICAgdm9pZCAgICAgICAgICAqZGF0YTsKKworICAgTFRDX0FSR0NISyhpbiAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoaW5sZW4gIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGxpc3QgICE9IE5VTEwpOworCisgICAvKiBnZXQgYmxrIHNpemUgKi8KKyAgIGlmICgqaW5sZW4gPCAyKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICB9CisKKyAgIC8qIHNldCBhbGwgb2YgdGhlICJ1c2VkIiBmbGFncyB0byB6ZXJvICovCisgICBmb3IgKHggPSAwOyB4IDwgb3V0bGVuOyB4KyspIHsKKyAgICAgICBsaXN0W3hdLnVzZWQgPSAwOworICAgfQorCisgICAvKiBub3cgc2NhbiB1bnRpbCB3ZSBoYXZlIGEgd2lubmVyICovCisgICBmb3IgKHggPSAwOyB4IDwgb3V0bGVuOyB4KyspIHsKKyAgICAgICBzaXplID0gbGlzdFt4XS5zaXplOworICAgICAgIGRhdGEgPSBsaXN0W3hdLmRhdGE7CisKKyAgICAgICBzd2l0Y2ggKGxpc3RbeF0udHlwZSkgeworICAgICAgICAgICBjYXNlIExUQ19BU04xX0lOVEVHRVI6CisgICAgICAgICAgICAgICBpZiAoZGVyX2RlY29kZV9pbnRlZ2VyKGluLCAqaW5sZW4sIGRhdGEpID09IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoZGVyX2xlbmd0aF9pbnRlZ2VyKGRhdGEsICZ6KSA9PSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgICAgIGxpc3RbeF0udXNlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgKmlubGVuICAgICAgID0gejsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1JZUFRfT0s7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX1NIT1JUX0lOVEVHRVI6CisgICAgICAgICAgICAgICBpZiAoZGVyX2RlY29kZV9zaG9ydF9pbnRlZ2VyKGluLCAqaW5sZW4sIGRhdGEpID09IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyKHNpemUsICZ6KSA9PSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgICAgIGxpc3RbeF0udXNlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgKmlubGVuICAgICAgID0gejsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1JZUFRfT0s7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX0JJVF9TVFJJTkc6CisgICAgICAgICAgICAgICBpZiAoZGVyX2RlY29kZV9iaXRfc3RyaW5nKGluLCAqaW5sZW4sIGRhdGEsICZzaXplKSA9PSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgaWYgKGRlcl9sZW5ndGhfYml0X3N0cmluZyhzaXplLCAmeikgPT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgIGxpc3RbeF0udXNlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICBsaXN0W3hdLnNpemUgPSBzaXplOworICAgICAgICAgICAgICAgICAgICAgKmlubGVuICAgICAgID0gejsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0NURVRfU1RSSU5HOgorICAgICAgICAgICAgICAgaWYgKGRlcl9kZWNvZGVfb2N0ZXRfc3RyaW5nKGluLCAqaW5sZW4sIGRhdGEsICZzaXplKSA9PSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgaWYgKGRlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nKHNpemUsICZ6KSA9PSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgICAgbGlzdFt4XS51c2VkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgIGxpc3RbeF0uc2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAgICAgICAqaW5sZW4gICAgICAgPSB6OworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENSWVBUX09LOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9OVUxMOgorICAgICAgICAgICAgICAgaWYgKCppbmxlbiA9PSAyICYmIGluW3hdID09IDB4MDUgJiYgaW5beCsxXSA9PSAweDAwKSB7CisgICAgICAgICAgICAgICAgICAqaW5sZW4gPSAyOworICAgICAgICAgICAgICAgICAgbGlzdFt4XS51c2VkICAgPSAxOworICAgICAgICAgICAgICAgICAgcmV0dXJuIENSWVBUX09LOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUjoKKyAgICAgICAgICAgICAgIGlmIChkZXJfZGVjb2RlX29iamVjdF9pZGVudGlmaWVyKGluLCAqaW5sZW4sIGRhdGEsICZzaXplKSA9PSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgaWYgKGRlcl9sZW5ndGhfb2JqZWN0X2lkZW50aWZpZXIoZGF0YSwgc2l6ZSwgJnopID09IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICAgICBsaXN0W3hdLnVzZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgbGlzdFt4XS5zaXplID0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICppbmxlbiAgICAgICA9IHo7CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1JZUFRfT0s7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX0lBNV9TVFJJTkc6CisgICAgICAgICAgICAgICBpZiAoZGVyX2RlY29kZV9pYTVfc3RyaW5nKGluLCAqaW5sZW4sIGRhdGEsICZzaXplKSA9PSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgaWYgKGRlcl9sZW5ndGhfaWE1X3N0cmluZyhkYXRhLCBzaXplLCAmeikgPT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgIGxpc3RbeF0udXNlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICBsaXN0W3hdLnNpemUgPSBzaXplOworICAgICAgICAgICAgICAgICAgICAgKmlubGVuICAgICAgID0gejsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HOgorICAgICAgICAgICAgICAgaWYgKGRlcl9kZWNvZGVfcHJpbnRhYmxlX3N0cmluZyhpbiwgKmlubGVuLCBkYXRhLCAmc2l6ZSkgPT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmIChkZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcoZGF0YSwgc2l6ZSwgJnopID09IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICAgICBsaXN0W3hdLnVzZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgbGlzdFt4XS5zaXplID0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgICppbmxlbiAgICAgICA9IHo7CisgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1JZUFRfT0s7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX1VURjhfU1RSSU5HOgorICAgICAgICAgICAgICAgaWYgKGRlcl9kZWNvZGVfdXRmOF9zdHJpbmcoaW4sICppbmxlbiwgZGF0YSwgJnNpemUpID09IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoZGVyX2xlbmd0aF91dGY4X3N0cmluZyhkYXRhLCBzaXplLCAmeikgPT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgIGxpc3RbeF0udXNlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICBsaXN0W3hdLnNpemUgPSBzaXplOworICAgICAgICAgICAgICAgICAgICAgKmlubGVuICAgICAgID0gejsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfVVRDVElNRToKKyAgICAgICAgICAgICAgIHogPSAqaW5sZW47CisgICAgICAgICAgICAgICBpZiAoZGVyX2RlY29kZV91dGN0aW1lKGluLCAmeiwgZGF0YSkgPT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGxpc3RbeF0udXNlZCA9IDE7CisgICAgICAgICAgICAgICAgICAqaW5sZW4gICAgICAgPSB6OworICAgICAgICAgICAgICAgICAgcmV0dXJuIENSWVBUX09LOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVQ6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUT0Y6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VRVUVOQ0U6CisgICAgICAgICAgICAgICBpZiAoZGVyX2RlY29kZV9zZXF1ZW5jZShpbiwgKmlubGVuLCBkYXRhLCBzaXplKSA9PSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgaWYgKGRlcl9sZW5ndGhfc2VxdWVuY2UoZGF0YSwgc2l6ZSwgJnopID09IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICAgICBsaXN0W3hdLnVzZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgKmlubGVuICAgICAgID0gejsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgICAgfQorICAgfQorCisgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvY2hvaWNlL2Rlcl9kZWNvZGVfY2hvaWNlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNiAwMjoyMzo0OSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9kZWNvZGVfaWE1X3N0cmluZy5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZGVjb2RlX2lhNV9zdHJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTE0Yjc3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZGVjb2RlX2lhNV9zdHJpbmcuYwpAQCAtMCwwICsxLDk2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZGVjb2RlX2lhNV9zdHJpbmcuYworICBBU04uMSBERVIsIGVuY29kZSBhIElBNSBTVFJJTkcsIFRvbSBTdCBEZW5pcworKi8KKworCisjaWZkZWYgTFRDX0RFUgorCisvKioKKyAgU3RvcmUgYSBJQTUgU1RSSU5HCisgIEBwYXJhbSBpbiAgICAgIFRoZSBERVIgZW5jb2RlZCBJQTUgU1RSSU5HCisgIEBwYXJhbSBpbmxlbiAgIFRoZSBzaXplIG9mIHRoZSBERVIgSUE1IFNUUklORworICBAcGFyYW0gb3V0ICAgICBbb3V0XSBUaGUgYXJyYXkgb2Ygb2N0ZXRzIHN0b3JlZCAob25lIHBlciBjaGFyKQorICBAcGFyYW0gb3V0bGVuICBbaW4vb3V0XSBUaGUgbnVtYmVyIG9mIG9jdGV0cyBzdG9yZWQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlcl9kZWNvZGVfaWE1X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisgICB1bnNpZ25lZCBsb25nIHgsIHksIGxlbjsKKyAgIGludCAgICAgICAgICAgdDsKKworICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworCisgICAvKiBtdXN0IGhhdmUgaGVhZGVyIGF0IGxlYXN0ICovCisgICBpZiAoaW5sZW4gPCAyKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICB9CisKKyAgIC8qIGNoZWNrIGZvciAweDE2ICovCisgICBpZiAoKGluWzBdICYgMHgxRikgIT0gMHgxNikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorICAgeCA9IDE7CisKKyAgIC8qIGRlY29kZSB0aGUgbGVuZ3RoICovCisgICBpZiAoaW5beF0gJiAweDgwKSB7CisgICAgICAvKiB2YWxpZCAjIG9mIGJ5dGVzIGluIGxlbmd0aCBhcmUgMSwyLDMgKi8KKyAgICAgIHkgPSBpblt4XSAmIDB4N0Y7CisgICAgICBpZiAoKHkgPT0gMCkgfHwgKHkgPiAzKSB8fCAoKHggKyB5KSA+IGlubGVuKSkgeworICAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgfQorCisgICAgICAvKiByZWFkIHRoZSBsZW5ndGggaW4gKi8KKyAgICAgIGxlbiA9IDA7CisgICAgICArK3g7CisgICAgICB3aGlsZSAoeS0tKSB7CisgICAgICAgICBsZW4gPSAobGVuIDw8IDgpIHwgaW5beCsrXTsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBsZW4gPSBpblt4KytdICYgMHg3RjsKKyAgIH0KKworICAgLyogaXMgaXQgdG9vIGxvbmc/ICovCisgICBpZiAobGVuID4gKm91dGxlbikgeworICAgICAgKm91dGxlbiA9IGxlbjsKKyAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisKKyAgIGlmIChsZW4gKyB4ID4gaW5sZW4pIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgIH0KKworICAgLyogcmVhZCB0aGUgZGF0YSAqLworICAgZm9yICh5ID0gMDsgeSA8IGxlbjsgeSsrKSB7CisgICAgICAgdCA9IGRlcl9pYTVfdmFsdWVfZGVjb2RlKGluW3grK10pOworICAgICAgIGlmICh0ID09IC0xKSB7CisgICAgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgICAgICB9CisgICAgICAgb3V0W3ldID0gdDsKKyAgIH0KKworICAgKm91dGxlbiA9IHk7CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKyAKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9kZWNvZGVfaWE1X3N0cmluZy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjE6NTM6NDEgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfZW5jb2RlX2lhNV9zdHJpbmcuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2VuY29kZV9pYTVfc3RyaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWZmMzM5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2VuY29kZV9pYTVfc3RyaW5nLmMKQEAgLTAsMCArMSw4NSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2VuY29kZV9pYTVfc3RyaW5nLmMKKyAgQVNOLjEgREVSLCBlbmNvZGUgYSBJQTUgU1RSSU5HLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisKKy8qKgorICBTdG9yZSBhbiBJQTUgU1RSSU5HCisgIEBwYXJhbSBpbiAgICAgICBUaGUgYXJyYXkgb2YgSUE1IHRvIHN0b3JlIChvbmUgcGVyIGNoYXIpCisgIEBwYXJhbSBpbmxlbiAgICBUaGUgbnVtYmVyIG9mIElBNSB0byBzdG9yZQorICBAcGFyYW0gb3V0ICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgREVSIGVuY29kZWQgSUE1IFNUUklORworICBAcGFyYW0gb3V0bGVuICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgREVSIElBNSBTVFJJTkcKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlcl9lbmNvZGVfaWE1X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisgICB1bnNpZ25lZCBsb25nIHgsIHksIGxlbjsKKyAgIGludCAgICAgICAgICAgZXJyOworCisgICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgIC8qIGdldCB0aGUgc2l6ZSAqLworICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX2lhNV9zdHJpbmcoaW4sIGlubGVuLCAmbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7IAorICAgfQorCisgICAvKiB0b28gYmlnPyAqLworICAgaWYgKGxlbiA+ICpvdXRsZW4pIHsKKyAgICAgICpvdXRsZW4gPSBsZW47CisgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgfQorCisgICAvKiBlbmNvZGUgdGhlIGhlYWRlcitsZW4gKi8KKyAgIHggPSAwOworICAgb3V0W3grK10gPSAweDE2OworICAgaWYgKGlubGVuIDwgMTI4KSB7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKWlubGVuOworICAgfSBlbHNlIGlmIChpbmxlbiA8IDI1NikgeworICAgICAgb3V0W3grK10gPSAweDgxOworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcilpbmxlbjsKKyAgIH0gZWxzZSBpZiAoaW5sZW4gPCA2NTUzNlVMKSB7CisgICAgICBvdXRbeCsrXSA9IDB4ODI7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSgoaW5sZW4+PjgpJjI1NSk7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKShpbmxlbiYyNTUpOworICAgfSBlbHNlIGlmIChpbmxlbiA8IDE2Nzc3MjE2VUwpIHsKKyAgICAgIG91dFt4KytdID0gMHg4MzsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKChpbmxlbj4+MTYpJjI1NSk7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSgoaW5sZW4+PjgpJjI1NSk7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKShpbmxlbiYyNTUpOworICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgLyogc3RvcmUgb2N0ZXRzICovCisgICBmb3IgKHkgPSAwOyB5IDwgaW5sZW47IHkrKykgeworICAgICAgIG91dFt4KytdID0gZGVyX2lhNV9jaGFyX2VuY29kZShpblt5XSk7CisgICB9CisKKyAgIC8qIHJldHVuIGxlbmd0aCAqLworICAgKm91dGxlbiA9IHg7CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2VuY29kZV9pYTVfc3RyaW5nLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMTozNDowMyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaWE1L2Rlcl9sZW5ndGhfaWE1X3N0cmluZy5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfbGVuZ3RoX2lhNV9zdHJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mjc4ZGQyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2lhNS9kZXJfbGVuZ3RoX2lhNV9zdHJpbmcuYwpAQCAtMCwwICsxLDE5NCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2xlbmd0aF9pYTVfc3RyaW5nLmMKKyAgQVNOLjEgREVSLCBnZXQgbGVuZ3RoIG9mIElBNSBTVFJJTkcsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICBpbnQgY29kZSwgdmFsdWU7Cit9IGlhNV90YWJsZVtdID0geworeyAnXDAnLCAwIH0sCit7ICdcYScsIDcgfSwgCit7ICdcYicsIDggfSwgCit7ICdcdCcsIDkgfSwgCit7ICdcbicsIDEwIH0sIAoreyAnXGYnLCAxMiB9LCAKK3sgJ1xyJywgMTMgfSwgCit7ICcgJywgMzIgfSwgCit7ICchJywgMzMgfSwgCit7ICciJywgMzQgfSwgCit7ICcjJywgMzUgfSwgCit7ICckJywgMzYgfSwgCit7ICclJywgMzcgfSwgCit7ICcmJywgMzggfSwgCit7ICdcJycsIDM5IH0sIAoreyAnKCcsIDQwIH0sIAoreyAnKScsIDQxIH0sIAoreyAnKicsIDQyIH0sIAoreyAnKycsIDQzIH0sIAoreyAnLCcsIDQ0IH0sIAoreyAnLScsIDQ1IH0sIAoreyAnLicsIDQ2IH0sIAoreyAnLycsIDQ3IH0sIAoreyAnMCcsIDQ4IH0sIAoreyAnMScsIDQ5IH0sIAoreyAnMicsIDUwIH0sIAoreyAnMycsIDUxIH0sIAoreyAnNCcsIDUyIH0sIAoreyAnNScsIDUzIH0sIAoreyAnNicsIDU0IH0sIAoreyAnNycsIDU1IH0sIAoreyAnOCcsIDU2IH0sIAoreyAnOScsIDU3IH0sIAoreyAnOicsIDU4IH0sIAoreyAnOycsIDU5IH0sIAoreyAnPCcsIDYwIH0sIAoreyAnPScsIDYxIH0sIAoreyAnPicsIDYyIH0sIAoreyAnPycsIDYzIH0sIAoreyAnQCcsIDY0IH0sIAoreyAnQScsIDY1IH0sIAoreyAnQicsIDY2IH0sIAoreyAnQycsIDY3IH0sIAoreyAnRCcsIDY4IH0sIAoreyAnRScsIDY5IH0sIAoreyAnRicsIDcwIH0sIAoreyAnRycsIDcxIH0sIAoreyAnSCcsIDcyIH0sIAoreyAnSScsIDczIH0sIAoreyAnSicsIDc0IH0sIAoreyAnSycsIDc1IH0sIAoreyAnTCcsIDc2IH0sIAoreyAnTScsIDc3IH0sIAoreyAnTicsIDc4IH0sIAoreyAnTycsIDc5IH0sIAoreyAnUCcsIDgwIH0sIAoreyAnUScsIDgxIH0sIAoreyAnUicsIDgyIH0sIAoreyAnUycsIDgzIH0sIAoreyAnVCcsIDg0IH0sIAoreyAnVScsIDg1IH0sIAoreyAnVicsIDg2IH0sIAoreyAnVycsIDg3IH0sIAoreyAnWCcsIDg4IH0sIAoreyAnWScsIDg5IH0sIAoreyAnWicsIDkwIH0sIAoreyAnWycsIDkxIH0sIAoreyAnXFwnLCA5MiB9LCAKK3sgJ10nLCA5MyB9LCAKK3sgJ14nLCA5NCB9LCAKK3sgJ18nLCA5NSB9LCAKK3sgJ2AnLCA5NiB9LCAKK3sgJ2EnLCA5NyB9LCAKK3sgJ2InLCA5OCB9LCAKK3sgJ2MnLCA5OSB9LCAKK3sgJ2QnLCAxMDAgfSwgCit7ICdlJywgMTAxIH0sIAoreyAnZicsIDEwMiB9LCAKK3sgJ2cnLCAxMDMgfSwgCit7ICdoJywgMTA0IH0sIAoreyAnaScsIDEwNSB9LCAKK3sgJ2onLCAxMDYgfSwgCit7ICdrJywgMTA3IH0sIAoreyAnbCcsIDEwOCB9LCAKK3sgJ20nLCAxMDkgfSwgCit7ICduJywgMTEwIH0sIAoreyAnbycsIDExMSB9LCAKK3sgJ3AnLCAxMTIgfSwgCit7ICdxJywgMTEzIH0sIAoreyAncicsIDExNCB9LCAKK3sgJ3MnLCAxMTUgfSwgCit7ICd0JywgMTE2IH0sIAoreyAndScsIDExNyB9LCAKK3sgJ3YnLCAxMTggfSwgCit7ICd3JywgMTE5IH0sIAoreyAneCcsIDEyMCB9LCAKK3sgJ3knLCAxMjEgfSwgCit7ICd6JywgMTIyIH0sIAoreyAneycsIDEyMyB9LCAKK3sgJ3wnLCAxMjQgfSwgCit7ICd9JywgMTI1IH0sIAoreyAnficsIDEyNiB9Cit9OworCitpbnQgZGVyX2lhNV9jaGFyX2VuY29kZShpbnQgYykKK3sKKyAgIGludCB4OworICAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZihpYTVfdGFibGUpL3NpemVvZihpYTVfdGFibGVbMF0pKTsgeCsrKSB7CisgICAgICAgaWYgKGlhNV90YWJsZVt4XS5jb2RlID09IGMpIHsKKyAgICAgICAgICByZXR1cm4gaWE1X3RhYmxlW3hdLnZhbHVlOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiAtMTsKK30KKworaW50IGRlcl9pYTVfdmFsdWVfZGVjb2RlKGludCB2KQoreworICAgaW50IHg7CisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKGlhNV90YWJsZSkvc2l6ZW9mKGlhNV90YWJsZVswXSkpOyB4KyspIHsKKyAgICAgICBpZiAoaWE1X3RhYmxlW3hdLnZhbHVlID09IHYpIHsKKyAgICAgICAgICByZXR1cm4gaWE1X3RhYmxlW3hdLmNvZGU7CisgICAgICAgfQorICAgfQorICAgcmV0dXJuIC0xOworfQorICAgCisvKioKKyAgR2V0cyBsZW5ndGggb2YgREVSIGVuY29kaW5nIG9mIElBNSBTVFJJTkcgCisgIEBwYXJhbSBvY3RldHMgICBUaGUgdmFsdWVzIHlvdSB3YW50IHRvIGVuY29kZSAKKyAgQHBhcmFtIG5vY3RldHMgIFRoZSBudW1iZXIgb2Ygb2N0ZXRzIGluIHRoZSBzdHJpbmcgdG8gZW5jb2RlCisgIEBwYXJhbSBvdXRsZW4gICBbb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RpbmcgZm9yIHRoZSBnaXZlbiBzdHJpbmcKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlcl9sZW5ndGhfaWE1X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICpvY3RldHMsIHVuc2lnbmVkIGxvbmcgbm9jdGV0cywgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgdW5zaWduZWQgbG9uZyB4OworCisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob2N0ZXRzICE9IE5VTEwpOworCisgICAvKiBzY2FuIHN0cmluZyBmb3IgdmFsaWRpdHkgKi8KKyAgIGZvciAoeCA9IDA7IHggPCBub2N0ZXRzOyB4KyspIHsKKyAgICAgICBpZiAoZGVyX2lhNV9jaGFyX2VuY29kZShvY3RldHNbeF0pID09IC0xKSB7CisgICAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgICAgIH0KKyAgIH0KKworICAgaWYgKG5vY3RldHMgPCAxMjgpIHsKKyAgICAgIC8qIDE2IExMIEREIEREIEREIC4uLiAqLworICAgICAgKm91dGxlbiA9IDIgKyBub2N0ZXRzOworICAgfSBlbHNlIGlmIChub2N0ZXRzIDwgMjU2KSB7CisgICAgICAvKiAxNiA4MSBMTCBERCBERCBERCAuLi4gKi8KKyAgICAgICpvdXRsZW4gPSAzICsgbm9jdGV0czsKKyAgIH0gZWxzZSBpZiAobm9jdGV0cyA8IDY1NTM2VUwpIHsKKyAgICAgIC8qIDE2IDgyIExMIExMIEREIEREIEREIC4uLiAqLworICAgICAgKm91dGxlbiA9IDQgKyBub2N0ZXRzOworICAgfSBlbHNlIGlmIChub2N0ZXRzIDwgMTY3NzcyMTZVTCkgeworICAgICAgLyogMTYgODMgTEwgTEwgTEwgREQgREQgREQgLi4uICovCisgICAgICAqb3V0bGVuID0gNSArIG5vY3RldHM7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pYTUvZGVyX2xlbmd0aF9pYTVfc3RyaW5nLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZGVjb2RlX2ludGVnZXIuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9kZWNvZGVfaW50ZWdlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZjg3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZGVjb2RlX2ludGVnZXIuYwpAQCAtMCwwICsxLDExMCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2RlY29kZV9pbnRlZ2VyLmMKKyAgQVNOLjEgREVSLCBkZWNvZGUgYW4gaW50ZWdlciwgVG9tIFN0IERlbmlzCisqLworCisKKyNpZmRlZiBMVENfREVSCisKKy8qKgorICBSZWFkIGEgbXBfaW50IGludGVnZXIKKyAgQHBhcmFtIGluICAgICAgIFRoZSBERVIgZW5jb2RlZCBkYXRhCisgIEBwYXJhbSBpbmxlbiAgICBTaXplIG9mIERFUiBlbmNvZGVkIGRhdGEKKyAgQHBhcmFtIG51bSAgICAgIFRoZSBmaXJzdCBtcF9pbnQgdG8gZGVjb2RlCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfZGVjb2RlX2ludGVnZXIoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHZvaWQgKm51bSkKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeSwgejsKKyAgIGludCAgICAgICAgICAgZXJyOworCisgICBMVENfQVJHQ0hLKG51bSAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworCisgICAvKiBtaW4gREVSIElOVEVHRVIgaXMgMHgwMiAwMSAwMCA9PSAwICovCisgICBpZiAoaW5sZW4gPCAoMSArIDEgKyAxKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiBvayBleHBlY3QgMHgwMiB3aGVuIHdlIEFORCB3aXRoIDAwMDEgMTExMSBbMUZdICovCisgICB4ID0gMDsKKyAgIGlmICgoaW5beCsrXSAmIDB4MUYpICE9IDB4MDIpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgIH0KKworICAgLyogbm93IGRlY29kZSB0aGUgbGVuIHN0dWZmICovCisgICB6ID0gaW5beCsrXTsKKworICAgaWYgKCh6ICYgMHg4MCkgPT0gMHgwMCkgeworICAgICAgLyogc2hvcnQgZm9ybSAqLworCisgICAgICAvKiB3aWxsIGl0IG92ZXJmbG93PyAqLworICAgICAgaWYgKHggKyB6ID4gaW5sZW4pIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgIH0KKyAgICAgCisgICAgICAvKiBubyBzbyByZWFkIGl0ICovCisgICAgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKG51bSwgKHVuc2lnbmVkIGNoYXIgKilpbiArIHgsIHopKSAhPSBDUllQVF9PSykgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICAvKiBsb25nIGZvcm0gKi8KKyAgICAgIHogJj0gMHg3RjsKKyAgICAgIAorICAgICAgLyogd2lsbCBudW1iZXIgb2YgbGVuZ3RoIGJ5dGVzIG92ZXJmbG93PyAob3IgPiA0KSAqLworICAgICAgaWYgKCgoeCArIHopID4gaW5sZW4pIHx8ICh6ID4gNCkgfHwgKHogPT0gMCkpIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgIH0KKworICAgICAgLyogbm93IHJlYWQgaXQgaW4gKi8KKyAgICAgIHkgPSAwOworICAgICAgd2hpbGUgKHotLSkgeworICAgICAgICAgeSA9ICgodW5zaWduZWQgbG9uZykoaW5beCsrXSkpIHwgKHkgPDwgOCk7CisgICAgICB9CisKKyAgICAgIC8qIG5vdyB3aWxsIHJlYWRpbmcgeSBieXRlcyBvdmVycnVuPyAqLworICAgICAgaWYgKCh4ICsgeSkgPiBpbmxlbikgeworICAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgfQorCisgICAgICAvKiBubyBzbyByZWFkIGl0ICovCisgICAgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKG51bSwgKHVuc2lnbmVkIGNoYXIgKilpbiArIHgsIHkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0KKworICAgLyogc2VlIGlmIGl0J3MgbmVnYXRpdmUgKi8KKyAgIGlmIChpblt4XSAmIDB4ODApIHsKKyAgICAgIHZvaWQgKnRtcDsKKyAgICAgIGlmIChtcF9pbml0KCZ0bXApICE9IENSWVBUX09LKSB7CisgICAgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgICAgfQorCisgICAgICBpZiAobXBfMmV4cHQodG1wLCBtcF9jb3VudF9iaXRzKG51bSkpICE9IENSWVBUX09LIHx8IG1wX3N1YihudW0sIHRtcCwgbnVtKSAhPSBDUllQVF9PSykgeworICAgICAgICAgbXBfY2xlYXIodG1wKTsKKyAgICAgICAgIHJldHVybiBDUllQVF9NRU07CisgICAgICB9CisgICAgICBtcF9jbGVhcih0bXApOworICAgfSAKKworICAgcmV0dXJuIENSWVBUX09LOworCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfZGVjb2RlX2ludGVnZXIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9lbmNvZGVfaW50ZWdlci5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2VuY29kZV9pbnRlZ2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0ZmNlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9lbmNvZGVfaW50ZWdlci5jCkBAIC0wLDAgKzEsMTMwIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZW5jb2RlX2ludGVnZXIuYworICBBU04uMSBERVIsIGVuY29kZSBhbiBpbnRlZ2VyLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19ERVIKKworLyogRXhwb3J0cyBhIHBvc2l0aXZlIGJpZ251bSBhcyBERVIgZm9ybWF0ICh1cHRvIDJeMzIgYnl0ZXMgaW4gc2l6ZSkgKi8KKy8qKgorICBTdG9yZSBhIG1wX2ludCBpbnRlZ2VyCisgIEBwYXJhbSBudW0gICAgICBUaGUgZmlyc3QgbXBfaW50IHRvIGVuY29kZQorICBAcGFyYW0gb3V0ICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgREVSIGVuY29kZWQgaW50ZWdlcnMKKyAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIERFUiBlbmNvZGVkIGludGVnZXJzCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfZW5jb2RlX2ludGVnZXIodm9pZCAqbnVtLCB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sgIAorICAgdW5zaWduZWQgbG9uZyB0bXBsZW4sIHk7CisgICBpbnQgICAgICAgICAgIGVyciwgbGVhZGluZ196ZXJvOworCisgICBMVENfQVJHQ0hLKG51bSAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgIC8qIGZpbmQgb3V0IGhvdyBiaWcgdGhpcyB3aWxsIGJlICovCisgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfaW50ZWdlcihudW0sICZ0bXBsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKCpvdXRsZW4gPCB0bXBsZW4pIHsKKyAgICAgICpvdXRsZW4gPSB0bXBsZW47CisgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgfQorCisgICBpZiAobXBfY21wX2QobnVtLCAwKSAhPSBMVENfTVBfTFQpIHsKKyAgICAgIC8qIHdlIG9ubHkgbmVlZCBhIGxlYWRpbmcgemVybyBpZiB0aGUgbXNiIG9mIHRoZSBmaXJzdCBieXRlIGlzIG9uZSAqLworICAgICAgaWYgKChtcF9jb3VudF9iaXRzKG51bSkgJiA3KSA9PSAwIHx8IG1wX2lzemVybyhudW0pID09IExUQ19NUF9ZRVMpIHsKKyAgICAgICAgIGxlYWRpbmdfemVybyA9IDE7CisgICAgICB9IGVsc2UgeworICAgICAgICAgbGVhZGluZ196ZXJvID0gMDsKKyAgICAgIH0KKworICAgICAgLyogZ2V0IGxlbmd0aCBvZiBudW0gaW4gYnl0ZXMgKHBsdXMgMSBzaW5jZSB3ZSBmb3JjZSB0aGUgbXNieXRlIHRvIHplcm8pICovCisgICAgICB5ID0gbXBfdW5zaWduZWRfYmluX3NpemUobnVtKSArIGxlYWRpbmdfemVybzsKKyAgIH0gZWxzZSB7CisgICAgICBsZWFkaW5nX3plcm8gPSAwOworICAgICAgeSAgICAgICAgICAgID0gbXBfY291bnRfYml0cyhudW0pOworICAgICAgeSAgICAgICAgICAgID0geSArICg4IC0gKHkgJiA3KSk7CisgICAgICB5ICAgICAgICAgICAgPSB5ID4+IDM7CisgICAgICBpZiAoKChtcF9jbnRfbHNiKG51bSkrMSk9PW1wX2NvdW50X2JpdHMobnVtKSkgJiYgKChtcF9jb3VudF9iaXRzKG51bSkmNyk9PTApKSAtLXk7CisgICB9CisKKyAgIC8qIG5vdyBzdG9yZSBpbml0aWFsIGRhdGEgKi8KKyAgICpvdXQrKyA9IDB4MDI7CisgICBpZiAoeSA8IDEyOCkgeworICAgICAgLyogc2hvcnQgZm9ybSAqLworICAgICAgKm91dCsrID0gKHVuc2lnbmVkIGNoYXIpeTsKKyAgIH0gZWxzZSBpZiAoeSA8IDI1NikgeworICAgICAgKm91dCsrID0gMHg4MTsKKyAgICAgICpvdXQrKyA9ICh1bnNpZ25lZCBjaGFyKXk7CisgICB9IGVsc2UgaWYgKHkgPCA2NTUzNlVMKSB7CisgICAgICAqb3V0KysgPSAweDgyOworICAgICAgKm91dCsrID0gKHVuc2lnbmVkIGNoYXIpKCh5Pj44KSYyNTUpOworICAgICAgKm91dCsrID0gKHVuc2lnbmVkIGNoYXIpeTsKKyAgIH0gZWxzZSBpZiAoeSA8IDE2Nzc3MjE2VUwpIHsKKyAgICAgICpvdXQrKyA9IDB4ODM7CisgICAgICAqb3V0KysgPSAodW5zaWduZWQgY2hhcikoKHk+PjE2KSYyNTUpOworICAgICAgKm91dCsrID0gKHVuc2lnbmVkIGNoYXIpKCh5Pj44KSYyNTUpOworICAgICAgKm91dCsrID0gKHVuc2lnbmVkIGNoYXIpeTsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIG5vdyBzdG9yZSBtc2J5dGUgb2YgemVybyBpZiBudW0gaXMgbm9uLXplcm8gKi8KKyAgIGlmIChsZWFkaW5nX3plcm8pIHsKKyAgICAgICpvdXQrKyA9IDB4MDA7CisgICB9CisKKyAgIC8qIGlmIGl0J3Mgbm90IHplcm8gc3RvcmUgaXQgYXMgYmlnIGVuZGlhbiAqLworICAgaWYgKG1wX2NtcF9kKG51bSwgMCkgPT0gTFRDX01QX0dUKSB7CisgICAgICAvKiBub3cgc3RvcmUgdGhlIG1waW50ICovCisgICAgICBpZiAoKGVyciA9IG1wX3RvX3Vuc2lnbmVkX2JpbihudW0sIG91dCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0gZWxzZSBpZiAobXBfaXN6ZXJvKG51bSkgIT0gTFRDX01QX1lFUykgeworICAgICAgdm9pZCAqdG1wOworICAgICAgICAgCisgICAgICAvKiBuZWdhdGl2ZSAqLworICAgICAgaWYgKG1wX2luaXQoJnRtcCkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9NRU07CisgICAgICB9CisKKyAgICAgIC8qIDJecm91bmR1cCBhbmQgc3VidHJhY3QgKi8KKyAgICAgIHkgPSBtcF9jb3VudF9iaXRzKG51bSk7CisgICAgICB5ID0geSArICg4IC0gKHkgJiA3KSk7CisgICAgICBpZiAoKChtcF9jbnRfbHNiKG51bSkrMSk9PW1wX2NvdW50X2JpdHMobnVtKSkgJiYgKChtcF9jb3VudF9iaXRzKG51bSkmNyk9PTApKSB5IC09IDg7CisgICAgICBpZiAobXBfMmV4cHQodG1wLCB5KSAhPSBDUllQVF9PSyB8fCBtcF9hZGQodG1wLCBudW0sIHRtcCkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIG1wX2NsZWFyKHRtcCk7CisgICAgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgICAgfQorICAgICAgaWYgKChlcnIgPSBtcF90b191bnNpZ25lZF9iaW4odG1wLCBvdXQpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgbXBfY2xlYXIodG1wKTsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgICAgICBtcF9jbGVhcih0bXApOworICAgfQorCisgICAvKiB3ZSBnb29kICovCisgICAqb3V0bGVuID0gdG1wbGVuOyAKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9pbnRlZ2VyL2Rlcl9lbmNvZGVfaW50ZWdlci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMjE6MzQ6MDMgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2xlbmd0aF9pbnRlZ2VyLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvaW50ZWdlci9kZXJfbGVuZ3RoX2ludGVnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2MzMzFkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2xlbmd0aF9pbnRlZ2VyLmMKQEAgLTAsMCArMSw4MiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2xlbmd0aF9pbnRlZ2VyLmMKKyAgQVNOLjEgREVSLCBnZXQgbGVuZ3RoIG9mIGVuY29kaW5nLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19ERVIKKy8qKgorICBHZXRzIGxlbmd0aCBvZiBERVIgZW5jb2Rpbmcgb2YgbnVtIAorICBAcGFyYW0gbnVtICAgIFRoZSBpbnQgdG8gZ2V0IHRoZSBzaXplIG9mIAorICBAcGFyYW0gb3V0bGVuIFtvdXRdIFRoZSBsZW5ndGggb2YgdGhlIERFUiBlbmNvZGluZyBmb3IgdGhlIGdpdmVuIGludGVnZXIKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlcl9sZW5ndGhfaW50ZWdlcih2b2lkICpudW0sIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeiwgbGVuOworICAgaW50ICAgICAgICAgICBsZWFkaW5nX3plcm87CisKKyAgIExUQ19BUkdDSEsobnVtICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICAhPSBOVUxMKTsKKworICAgaWYgKG1wX2NtcF9kKG51bSwgMCkgIT0gTFRDX01QX0xUKSB7CisgICAgICAvKiBwb3NpdGl2ZSAqLworCisgICAgICAvKiB3ZSBvbmx5IG5lZWQgYSBsZWFkaW5nIHplcm8gaWYgdGhlIG1zYiBvZiB0aGUgZmlyc3QgYnl0ZSBpcyBvbmUgKi8KKyAgICAgIGlmICgobXBfY291bnRfYml0cyhudW0pICYgNykgPT0gMCB8fCBtcF9pc3plcm8obnVtKSA9PSBMVENfTVBfWUVTKSB7CisgICAgICAgICBsZWFkaW5nX3plcm8gPSAxOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgIGxlYWRpbmdfemVybyA9IDA7CisgICAgICB9CisKKyAgICAgIC8qIHNpemUgZm9yIGJpZ251bSAqLworICAgICAgeiA9IGxlbiA9IGxlYWRpbmdfemVybyArIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKG51bSk7CisgICB9IGVsc2UgeworICAgICAgLyogaXQncyBuZWdhdGl2ZSAqLworICAgICAgLyogZmluZCBwb3dlciBvZiAyIHRoYXQgaXMgYSBtdWx0aXBsZSBvZiBlaWdodCBhbmQgZ3JlYXRlciB0aGFuIGNvdW50IGJpdHMgKi8KKyAgICAgIGxlYWRpbmdfemVybyA9IDA7CisgICAgICB6ID0gbXBfY291bnRfYml0cyhudW0pOworICAgICAgeiA9IHogKyAoOCAtICh6ICYgNykpOworICAgICAgaWYgKCgobXBfY250X2xzYihudW0pKzEpPT1tcF9jb3VudF9iaXRzKG51bSkpICYmICgobXBfY291bnRfYml0cyhudW0pJjcpPT0wKSkgLS16OworICAgICAgbGVuID0geiA9IHogPj4gMzsKKyAgIH0KKworICAgLyogbm93IHdlIG5lZWQgYSBsZW5ndGggKi8KKyAgIGlmICh6IDwgMTI4KSB7CisgICAgICAvKiBzaG9ydCBmb3JtICovCisgICAgICArK2xlbjsKKyAgIH0gZWxzZSB7CisgICAgICAvKiBsb25nIGZvcm0gKHJlbGllcyBvbiB6ICE9IDApLCBhc3N1bWVzIGxlbmd0aCBieXRlcyA8IDEyOCAqLworICAgICAgKytsZW47CisKKyAgICAgIHdoaWxlICh6KSB7CisgICAgICAgICArK2xlbjsKKyAgICAgICAgIHogPj49IDg7CisgICAgICB9CisgICB9CisKKyAgIC8qIHdlIG5lZWQgYSAweDAyIHRvIGluZGljYXRlIGl0J3MgSU5URUdFUiAqLworICAgKytsZW47CisKKyAgIC8qIHJldHVybiBsZW5ndGggKi8KKyAgICpvdXRsZW4gPSBsZW47IAorICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL2ludGVnZXIvZGVyX2xlbmd0aF9pbnRlZ2VyLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wNC8yMiAwMToyMjo1NSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2RlY29kZV9vYmplY3RfaWRlbnRpZmllci5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9kZWNvZGVfb2JqZWN0X2lkZW50aWZpZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmE4N2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9kZWNvZGVfb2JqZWN0X2lkZW50aWZpZXIuYwpAQCAtMCwwICsxLDk5IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZGVjb2RlX29iamVjdF9pZGVudGlmaWVyLmMKKyAgQVNOLjEgREVSLCBEZWNvZGUgT2JqZWN0IElkZW50aWZpZXIsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKy8qKgorICBEZWNvZGUgT0lEIGRhdGEgYW5kIHN0b3JlIHRoZSBhcnJheSBvZiBpbnRlZ2VycyBpbiB3b3JkcworICBAcGFyYW0gaW4gICAgICBUaGUgT0lEIERFUiBlbmNvZGVkIGRhdGEKKyAgQHBhcmFtIGlubGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgT0lEIGRhdGEKKyAgQHBhcmFtIHdvcmRzICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIG9mIHRoZSBPSUQgd29yZHMKKyAgQHBhcmFtIG91dGxlbiAgW2luL291dF0gVGhlIG51bWJlciBvZiBPSUQgd29yZHMKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlcl9kZWNvZGVfb2JqZWN0X2lkZW50aWZpZXIoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqd29yZHMsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeSwgdCwgbGVuOworCisgICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsod29yZHMgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgIC8qIGhlYWRlciBpcyBhdCBsZWFzdCAzIGJ5dGVzICovCisgICBpZiAoaW5sZW4gPCAzKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICB9CisKKyAgIC8qIG11c3QgYmUgcm9vbSBmb3IgYXQgbGVhc3QgdHdvIHdvcmRzICovCisgICBpZiAoKm91dGxlbiA8IDIpIHsKKyAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisKKyAgIC8qIGRlY29kZSB0aGUgcGFja2V0IGhlYWRlciAqLworICAgeCA9IDA7CisgICBpZiAoKGluW3grK10gJiAweDFGKSAhPSAweDA2KSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICB9CisgICAKKyAgIC8qIGdldCB0aGUgbGVuZ3RoICovCisgICBpZiAoaW5beF0gPCAxMjgpIHsKKyAgICAgIGxlbiA9IGluW3grK107IAorICAgfSBlbHNlIHsKKyAgICAgICBpZiAoaW5beF0gPCAweDgxIHx8IGluW3hdID4gMHg4MikgeworICAgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgICB9CisgICAgICAgeSAgID0gaW5beCsrXSAmIDB4N0Y7CisgICAgICAgbGVuID0gMDsKKyAgICAgICB3aGlsZSAoeS0tKSB7CisgICAgICAgICAgbGVuID0gKGxlbiA8PCA4KSB8ICh1bnNpZ25lZCBsb25nKWluW3grK107CisgICAgICAgfQorICAgfQorCisgICBpZiAobGVuIDwgMSB8fCAobGVuICsgeCkgPiBpbmxlbikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiBkZWNvZGUgd29yZHMgKi8KKyAgIHkgPSAwOworICAgdCA9IDA7CisgICB3aGlsZSAobGVuLS0pIHsKKyAgICAgICB0ID0gKHQgPDwgNykgfCAoaW5beF0gJiAweDdGKTsKKyAgICAgICBpZiAoIShpblt4KytdICYgMHg4MCkpIHsKKyAgICAgICAgICAgLyogc3RvcmUgdCAqLworICAgICAgICAgICBpZiAoeSA+PSAqb3V0bGVuKSB7CisgICAgICAgICAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICAgICAgICAgIH0KKyAgICAgIGlmICh5ID09IDApIHsKKyAgICAgICAgIHdvcmRzWzBdID0gdCAvIDQwOworICAgICAgICAgd29yZHNbMV0gPSB0ICUgNDA7CisgICAgICAgICB5ID0gMjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHdvcmRzW3krK10gPSB0OworICAgICAgfQorICAgICAgICAgICB0ICAgICAgICAgID0gMDsKKyAgICAgICB9CisgICB9CisgICAgICAgCisgICAqb3V0bGVuID0geTsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfZGVjb2RlX29iamVjdF9pZGVudGlmaWVyLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yMSAwMDoxODoyMyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2VuY29kZV9vYmplY3RfaWRlbnRpZmllci5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9lbmNvZGVfb2JqZWN0X2lkZW50aWZpZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzQzYWFhCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9lbmNvZGVfb2JqZWN0X2lkZW50aWZpZXIuYwpAQCAtMCwwICsxLDExMSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2VuY29kZV9vYmplY3RfaWRlbnRpZmllci5jCisgIEFTTi4xIERFUiwgRW5jb2RlIE9iamVjdCBJZGVudGlmaWVyLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisvKioKKyAgRW5jb2RlIGFuIE9JRAorICBAcGFyYW0gd29yZHMgICBUaGUgd29yZHMgdG8gZW5jb2RlICAodXB0byAzMi1iaXRzIGVhY2gpCisgIEBwYXJhbSBud29yZHMgIFRoZSBudW1iZXIgb2Ygd29yZHMgaW4gdGhlIE9JRAorICBAcGFyYW0gb3V0ICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiBPSUQgZGF0YQorICBAcGFyYW0gb3V0bGVuICBbaW4vb3V0XSBUaGUgbWF4IGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgT0lECisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfZW5jb2RlX29iamVjdF9pZGVudGlmaWVyKHVuc2lnbmVkIGxvbmcgKndvcmRzLCB1bnNpZ25lZCBsb25nICBud29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgdW5zaWduZWQgbG9uZyBpLCB4LCB5LCB6LCB0LCBtYXNrLCB3b3JkYnVmOworICAgaW50ICAgICAgICAgICBlcnI7CisKKyAgIExUQ19BUkdDSEsod29yZHMgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgLyogY2hlY2sgbGVuZ3RoICovCisgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfb2JqZWN0X2lkZW50aWZpZXIod29yZHMsIG53b3JkcywgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGlmICh4ID4gKm91dGxlbikgeworICAgICAgKm91dGxlbiA9IHg7CisgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgfQorCisgICAvKiBjb21wdXRlIGxlbmd0aCB0byBzdG9yZSBPSUQgZGF0YSAqLworICAgeiA9IDA7CisgICB3b3JkYnVmID0gd29yZHNbMF0gKiA0MCArIHdvcmRzWzFdOworICAgZm9yICh5ID0gMTsgeSA8IG53b3JkczsgeSsrKSB7CisgICAgICAgdCA9IGRlcl9vYmplY3RfaWRlbnRpZmllcl9iaXRzKHdvcmRidWYpOworICAgICAgIHogKz0gdC83ICsgKCh0JTcpID8gMSA6IDApICsgKHdvcmRidWYgPT0gMCA/IDEgOiAwKTsKKyAgICAgICBpZiAoeSA8IG53b3JkcyAtIDEpIHsKKyAgICAgICAgICB3b3JkYnVmID0gd29yZHNbeSArIDFdOworICAgICAgIH0KKyAgIH0KKworICAgLyogc3RvcmUgaGVhZGVyICsgbGVuZ3RoICovCisgICB4ID0gMDsgCisgICBvdXRbeCsrXSA9IDB4MDY7CisgICBpZiAoeiA8IDEyOCkgeworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcil6OworICAgfSBlbHNlIGlmICh6IDwgMjU2KSB7CisgICAgICBvdXRbeCsrXSA9IDB4ODE7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKXo7CisgICB9IGVsc2UgaWYgKHogPCA2NTUzNlVMKSB7CisgICAgICBvdXRbeCsrXSA9IDB4ODI7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSgoej4+OCkmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKHomMjU1KTsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIHN0b3JlIGZpcnN0IGJ5dGUgKi8KKyAgICB3b3JkYnVmID0gd29yZHNbMF0gKiA0MCArIHdvcmRzWzFdOyAgIAorICAgIGZvciAoaSA9IDE7IGkgPCBud29yZHM7IGkrKykgeworICAgICAgICAvKiBzdG9yZSA3IGJpdCB3b3JkcyBpbiBsaXR0bGUgZW5kaWFuICovCisgICAgICAgIHQgICAgPSB3b3JkYnVmICYgMHhGRkZGRkZGRjsKKyAgICAgICAgaWYgKHQpIHsKKyAgICAgICAgICAgeSAgICA9IHg7CisgICAgICAgICAgIG1hc2sgPSAwOworICAgICAgICAgICB3aGlsZSAodCkgeworICAgICAgICAgICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoKHQgJiAweDdGKSB8IG1hc2spOworICAgICAgICAgICAgICAgdCAgICA+Pj0gNzsKKyAgICAgICAgICAgICAgIG1hc2sgIHw9IDB4ODA7ICAvKiB1cHBlciBiaXQgaXMgc2V0IG9uIGFsbCBidXQgdGhlIGxhc3QgYnl0ZSAqLworICAgICAgICAgICB9CisgICAgICAgICAgIC8qIG5vdyBzd2FwIGJ5dGVzIHkuLi54LTEgKi8KKyAgICAgICAgICAgeiA9IHggLSAxOworICAgICAgICAgICB3aGlsZSAoeSA8IHopIHsKKyAgICAgICAgICAgICAgIHQgPSBvdXRbeV07IG91dFt5XSA9IG91dFt6XTsgb3V0W3pdID0gKHVuc2lnbmVkIGNoYXIpdDsKKyAgICAgICAgICAgICAgICsreTsgCisgICAgICAgICAgICAgICAtLXo7CisgICAgICAgICAgIH0KKyAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIHplcm8gd29yZCAqLworICAgICAgICAgIG91dFt4KytdID0gMHgwMDsKKyAgICAgICB9CisgICAgICAgCisgICAgICAgaWYgKGkgPCBud29yZHMgLSAxKSB7CisgICAgICAgICAgd29yZGJ1ZiA9IHdvcmRzW2kgKyAxXTsKKyAgICAgICB9CisgICB9CisKKyAgICpvdXRsZW4gPSB4OworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29iamVjdF9pZGVudGlmaWVyL2Rlcl9lbmNvZGVfb2JqZWN0X2lkZW50aWZpZXIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIxOjM0OjAzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2xlbmd0aF9vYmplY3RfaWRlbnRpZmllci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0Y2Y1M2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2JqZWN0X2lkZW50aWZpZXIvZGVyX2xlbmd0aF9vYmplY3RfaWRlbnRpZmllci5jCkBAIC0wLDAgKzEsODkgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9sZW5ndGhfb2JqZWN0X2lkZW50aWZpZXIuYworICBBU04uMSBERVIsIGdldCBsZW5ndGggb2YgT2JqZWN0IElkZW50aWZpZXIsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKwordW5zaWduZWQgbG9uZyBkZXJfb2JqZWN0X2lkZW50aWZpZXJfYml0cyh1bnNpZ25lZCBsb25nIHgpCit7CisgICB1bnNpZ25lZCBsb25nIGM7CisgICB4ICY9IDB4RkZGRkZGRkY7CisgICBjICA9IDA7CisgICB3aGlsZSAoeCkgeworICAgICArK2M7CisgICAgIHggPj49IDE7CisgICB9CisgICByZXR1cm4gYzsKK30KKworCisvKioKKyAgR2V0cyBsZW5ndGggb2YgREVSIGVuY29kaW5nIG9mIE9iamVjdCBJZGVudGlmaWVyCisgIEBwYXJhbSBud29yZHMgICBUaGUgbnVtYmVyIG9mIE9JRCB3b3JkcyAKKyAgQHBhcmFtIHdvcmRzICAgIFRoZSBhY3R1YWwgT0lEIHdvcmRzIHRvIGdldCB0aGUgc2l6ZSBvZgorICBAcGFyYW0gb3V0bGVuICAgW291dF0gVGhlIGxlbmd0aCBvZiB0aGUgREVSIGVuY29kaW5nIGZvciB0aGUgZ2l2ZW4gc3RyaW5nCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyKHVuc2lnbmVkIGxvbmcgKndvcmRzLCB1bnNpZ25lZCBsb25nIG53b3JkcywgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgdW5zaWduZWQgbG9uZyB5LCB6LCB0LCB3b3JkYnVmOyAgIAorCisgICBMVENfQVJHQ0hLKHdvcmRzICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworCisKKyAgIC8qIG11c3QgYmUgPj0gMiB3b3JkcyAqLworICAgaWYgKG53b3JkcyA8IDIpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgLyogd29yZDEgPSAwLDEsMiwzIGFuZCB3b3JkMiAwLi4zOSAqLworICAgaWYgKHdvcmRzWzBdID4gMyB8fCAod29yZHNbMF0gPCAyICYmIHdvcmRzWzFdID4gMzkpKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIGxlYWRpbmcgd29yZCBpcyB0aGUgZmlyc3QgdHdvICovCisgICB6ID0gMDsKKyAgIHdvcmRidWYgPSB3b3Jkc1swXSAqIDQwICsgd29yZHNbMV07CisgICBmb3IgKHkgPSAxOyB5IDwgbndvcmRzOyB5KyspIHsKKyAgICAgICB0ID0gZGVyX29iamVjdF9pZGVudGlmaWVyX2JpdHMod29yZGJ1Zik7CisgICAgICAgeiArPSB0LzcgKyAoKHQlNykgPyAxIDogMCkgKyAod29yZGJ1ZiA9PSAwID8gMSA6IDApOworICAgICAgIGlmICh5IDwgbndvcmRzIC0gMSkgeworICAgICAgICAgIC8qIGdyYWIgbmV4dCB3b3JkICovCisgICAgICAgICAgd29yZGJ1ZiA9IHdvcmRzW3krMV07CisgICAgICAgfQorICAgfQorCisgICAvKiBub3cgZGVwZW5kaW5nIG9uIHRoZSBsZW5ndGggb3VyIGxlbmd0aCBlbmNvZGluZyBjaGFuZ2VzICovCisgICBpZiAoeiA8IDEyOCkgeworICAgICAgeiArPSAyOworICAgfSBlbHNlIGlmICh6IDwgMjU2KSB7CisgICAgICB6ICs9IDM7CisgICB9IGVsc2UgaWYgKHogPCA2NTUzNlVMKSB7CisgICAgICB6ICs9IDQ7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICAqb3V0bGVuID0gejsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9vYmplY3RfaWRlbnRpZmllci9kZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wNC8xNiAyMDoxNzo0MiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2RlY29kZV9vY3RldF9zdHJpbmcuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfZGVjb2RlX29jdGV0X3N0cmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5MzdlNjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2RlY29kZV9vY3RldF9zdHJpbmcuYwpAQCAtMCwwICsxLDkxIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZGVjb2RlX29jdGV0X3N0cmluZy5jCisgIEFTTi4xIERFUiwgZW5jb2RlIGEgT0NURVQgU1RSSU5HLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19ERVIKKworLyoqCisgIFN0b3JlIGEgT0NURVQgU1RSSU5HCisgIEBwYXJhbSBpbiAgICAgIFRoZSBERVIgZW5jb2RlZCBPQ1RFVCBTVFJJTkcKKyAgQHBhcmFtIGlubGVuICAgVGhlIHNpemUgb2YgdGhlIERFUiBPQ1RFVCBTVFJJTkcKKyAgQHBhcmFtIG91dCAgICAgW291dF0gVGhlIGFycmF5IG9mIG9jdGV0cyBzdG9yZWQgKG9uZSBwZXIgY2hhcikKKyAgQHBhcmFtIG91dGxlbiAgW2luL291dF0gVGhlIG51bWJlciBvZiBvY3RldHMgc3RvcmVkCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfZGVjb2RlX29jdGV0X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeSwgbGVuOworCisgICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgIC8qIG11c3QgaGF2ZSBoZWFkZXIgYXQgbGVhc3QgKi8KKyAgIGlmIChpbmxlbiA8IDIpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgIH0KKworICAgLyogY2hlY2sgZm9yIDB4MDQgKi8KKyAgIGlmICgoaW5bMF0gJiAweDFGKSAhPSAweDA0KSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICB9CisgICB4ID0gMTsKKworICAgLyogZGVjb2RlIHRoZSBsZW5ndGggKi8KKyAgIGlmIChpblt4XSAmIDB4ODApIHsKKyAgICAgIC8qIHZhbGlkICMgb2YgYnl0ZXMgaW4gbGVuZ3RoIGFyZSAxLDIsMyAqLworICAgICAgeSA9IGluW3hdICYgMHg3RjsKKyAgICAgIGlmICgoeSA9PSAwKSB8fCAoeSA+IDMpIHx8ICgoeCArIHkpID4gaW5sZW4pKSB7CisgICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICB9CisKKyAgICAgIC8qIHJlYWQgdGhlIGxlbmd0aCBpbiAqLworICAgICAgbGVuID0gMDsKKyAgICAgICsreDsKKyAgICAgIHdoaWxlICh5LS0pIHsKKyAgICAgICAgIGxlbiA9IChsZW4gPDwgOCkgfCBpblt4KytdOworICAgICAgfQorICAgfSBlbHNlIHsKKyAgICAgIGxlbiA9IGluW3grK10gJiAweDdGOworICAgfQorCisgICAvKiBpcyBpdCB0b28gbG9uZz8gKi8KKyAgIGlmIChsZW4gPiAqb3V0bGVuKSB7CisgICAgICAqb3V0bGVuID0gbGVuOworICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgIH0KKworICAgaWYgKGxlbiArIHggPiBpbmxlbikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiByZWFkIHRoZSBkYXRhICovCisgICBmb3IgKHkgPSAwOyB5IDwgbGVuOyB5KyspIHsKKyAgICAgICBvdXRbeV0gPSBpblt4KytdOworICAgfQorCisgICAqb3V0bGVuID0geTsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorIAorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfZGVjb2RlX29jdGV0X3N0cmluZy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjE6NTM6NDEgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29jdGV0L2Rlcl9lbmNvZGVfb2N0ZXRfc3RyaW5nLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2VuY29kZV9vY3RldF9zdHJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTBmMTYzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29jdGV0L2Rlcl9lbmNvZGVfb2N0ZXRfc3RyaW5nLmMKQEAgLTAsMCArMSw4NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2VuY29kZV9vY3RldF9zdHJpbmcuYworICBBU04uMSBERVIsIGVuY29kZSBhIE9DVEVUIFNUUklORywgVG9tIFN0IERlbmlzCisqLworCisKKyNpZmRlZiBMVENfREVSCisKKy8qKgorICBTdG9yZSBhbiBPQ1RFVCBTVFJJTkcKKyAgQHBhcmFtIGluICAgICAgIFRoZSBhcnJheSBvZiBPQ1RFVFMgdG8gc3RvcmUgKG9uZSBwZXIgY2hhcikKKyAgQHBhcmFtIGlubGVuICAgIFRoZSBudW1iZXIgb2YgT0NURVRTIHRvIHN0b3JlCisgIEBwYXJhbSBvdXQgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBERVIgZW5jb2RlZCBPQ1RFVCBTVFJJTkcKKyAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIERFUiBPQ1RFVCBTVFJJTkcKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlcl9lbmNvZGVfb2N0ZXRfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgdW5zaWduZWQgbG9uZyB4LCB5LCBsZW47CisgICBpbnQgICAgICAgICAgIGVycjsKKworICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworCisgICAvKiBnZXQgdGhlIHNpemUgKi8KKyAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9vY3RldF9zdHJpbmcoaW5sZW4sICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsgCisgICB9CisKKyAgIC8qIHRvbyBiaWc/ICovCisgICBpZiAobGVuID4gKm91dGxlbikgeworICAgICAgKm91dGxlbiA9IGxlbjsKKyAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisKKyAgIC8qIGVuY29kZSB0aGUgaGVhZGVyK2xlbiAqLworICAgeCA9IDA7CisgICBvdXRbeCsrXSA9IDB4MDQ7CisgICBpZiAoaW5sZW4gPCAxMjgpIHsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpaW5sZW47CisgICB9IGVsc2UgaWYgKGlubGVuIDwgMjU2KSB7CisgICAgICBvdXRbeCsrXSA9IDB4ODE7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKWlubGVuOworICAgfSBlbHNlIGlmIChpbmxlbiA8IDY1NTM2VUwpIHsKKyAgICAgIG91dFt4KytdID0gMHg4MjsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKChpbmxlbj4+OCkmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKGlubGVuJjI1NSk7CisgICB9IGVsc2UgaWYgKGlubGVuIDwgMTY3NzcyMTZVTCkgeworICAgICAgb3V0W3grK10gPSAweDgzOworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoKGlubGVuPj4xNikmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKChpbmxlbj4+OCkmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKGlubGVuJjI1NSk7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICAvKiBzdG9yZSBvY3RldHMgKi8KKyAgIGZvciAoeSA9IDA7IHkgPCBpbmxlbjsgeSsrKSB7CisgICAgICAgb3V0W3grK10gPSBpblt5XTsKKyAgIH0KKworICAgLyogcmV0dW4gbGVuZ3RoICovCisgICAqb3V0bGVuID0geDsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL29jdGV0L2Rlcl9lbmNvZGVfb2N0ZXRfc3RyaW5nLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMTozNDowMyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2xlbmd0aF9vY3RldF9zdHJpbmcuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfbGVuZ3RoX29jdGV0X3N0cmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYWYzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvb2N0ZXQvZGVyX2xlbmd0aF9vY3RldF9zdHJpbmcuYwpAQCAtMCwwICsxLDUzIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfbGVuZ3RoX29jdGV0X3N0cmluZy5jCisgIEFTTi4xIERFUiwgZ2V0IGxlbmd0aCBvZiBPQ1RFVCBTVFJJTkcsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKy8qKgorICBHZXRzIGxlbmd0aCBvZiBERVIgZW5jb2Rpbmcgb2YgT0NURVQgU1RSSU5HIAorICBAcGFyYW0gbm9jdGV0cyAgVGhlIG51bWJlciBvZiBvY3RldHMgaW4gdGhlIHN0cmluZyB0byBlbmNvZGUKKyAgQHBhcmFtIG91dGxlbiAgIFtvdXRdIFRoZSBsZW5ndGggb2YgdGhlIERFUiBlbmNvZGluZyBmb3IgdGhlIGdpdmVuIHN0cmluZworICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZGVyX2xlbmd0aF9vY3RldF9zdHJpbmcodW5zaWduZWQgbG9uZyBub2N0ZXRzLCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgaWYgKG5vY3RldHMgPCAxMjgpIHsKKyAgICAgIC8qIDA0IExMIEREIEREIEREIC4uLiAqLworICAgICAgKm91dGxlbiA9IDIgKyBub2N0ZXRzOworICAgfSBlbHNlIGlmIChub2N0ZXRzIDwgMjU2KSB7CisgICAgICAvKiAwNCA4MSBMTCBERCBERCBERCAuLi4gKi8KKyAgICAgICpvdXRsZW4gPSAzICsgbm9jdGV0czsKKyAgIH0gZWxzZSBpZiAobm9jdGV0cyA8IDY1NTM2VUwpIHsKKyAgICAgIC8qIDA0IDgyIExMIExMIEREIEREIEREIC4uLiAqLworICAgICAgKm91dGxlbiA9IDQgKyBub2N0ZXRzOworICAgfSBlbHNlIGlmIChub2N0ZXRzIDwgMTY3NzcyMTZVTCkgeworICAgICAgLyogMDQgODMgTEwgTEwgTEwgREQgREQgREQgLi4uICovCisgICAgICAqb3V0bGVuID0gNSArIG5vY3RldHM7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9vY3RldC9kZXJfbGVuZ3RoX29jdGV0X3N0cmluZy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZGVjb2RlX3ByaW50YWJsZV9zdHJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWU5NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nLmMKQEAgLTAsMCArMSw5NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nLmMKKyAgQVNOLjEgREVSLCBlbmNvZGUgYSBwcmludGFibGUgU1RSSU5HLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19ERVIKKworLyoqCisgIFN0b3JlIGEgcHJpbnRhYmxlIFNUUklORworICBAcGFyYW0gaW4gICAgICBUaGUgREVSIGVuY29kZWQgcHJpbnRhYmxlIFNUUklORworICBAcGFyYW0gaW5sZW4gICBUaGUgc2l6ZSBvZiB0aGUgREVSIHByaW50YWJsZSBTVFJJTkcKKyAgQHBhcmFtIG91dCAgICAgW291dF0gVGhlIGFycmF5IG9mIG9jdGV0cyBzdG9yZWQgKG9uZSBwZXIgY2hhcikKKyAgQHBhcmFtIG91dGxlbiAgW2luL291dF0gVGhlIG51bWJlciBvZiBvY3RldHMgc3RvcmVkCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfZGVjb2RlX3ByaW50YWJsZV9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgdW5zaWduZWQgbG9uZyB4LCB5LCBsZW47CisgICBpbnQgICAgICAgICAgIHQ7CisKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgLyogbXVzdCBoYXZlIGhlYWRlciBhdCBsZWFzdCAqLworICAgaWYgKGlubGVuIDwgMikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiBjaGVjayBmb3IgMHgxMyAqLworICAgaWYgKChpblswXSAmIDB4MUYpICE9IDB4MTMpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgIH0KKyAgIHggPSAxOworCisgICAvKiBkZWNvZGUgdGhlIGxlbmd0aCAqLworICAgaWYgKGluW3hdICYgMHg4MCkgeworICAgICAgLyogdmFsaWQgIyBvZiBieXRlcyBpbiBsZW5ndGggYXJlIDEsMiwzICovCisgICAgICB5ID0gaW5beF0gJiAweDdGOworICAgICAgaWYgKCh5ID09IDApIHx8ICh5ID4gMykgfHwgKCh4ICsgeSkgPiBpbmxlbikpIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgIH0KKworICAgICAgLyogcmVhZCB0aGUgbGVuZ3RoIGluICovCisgICAgICBsZW4gPSAwOworICAgICAgKyt4OworICAgICAgd2hpbGUgKHktLSkgeworICAgICAgICAgbGVuID0gKGxlbiA8PCA4KSB8IGluW3grK107CisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgbGVuID0gaW5beCsrXSAmIDB4N0Y7CisgICB9CisKKyAgIC8qIGlzIGl0IHRvbyBsb25nPyAqLworICAgaWYgKGxlbiA+ICpvdXRsZW4pIHsKKyAgICAgICpvdXRsZW4gPSBsZW47CisgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgfQorCisgICBpZiAobGVuICsgeCA+IGlubGVuKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICB9CisKKyAgIC8qIHJlYWQgdGhlIGRhdGEgKi8KKyAgIGZvciAoeSA9IDA7IHkgPCBsZW47IHkrKykgeworICAgICAgIHQgPSBkZXJfcHJpbnRhYmxlX3ZhbHVlX2RlY29kZShpblt4KytdKTsKKyAgICAgICBpZiAodCA9PSAtMSkgeworICAgICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgICAgfQorICAgICAgIG91dFt5XSA9IHQ7CisgICB9CisKKyAgICpvdXRsZW4gPSB5OworCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisgCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8xNiAyMTo1Mzo0MSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZW5jb2RlX3ByaW50YWJsZV9zdHJpbmcuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjFiMWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfZW5jb2RlX3ByaW50YWJsZV9zdHJpbmcuYwpAQCAtMCwwICsxLDg1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZW5jb2RlX3ByaW50YWJsZV9zdHJpbmcuYworICBBU04uMSBERVIsIGVuY29kZSBhIHByaW50YWJsZSBTVFJJTkcsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKworLyoqCisgIFN0b3JlIGFuIHByaW50YWJsZSBTVFJJTkcKKyAgQHBhcmFtIGluICAgICAgIFRoZSBhcnJheSBvZiBwcmludGFibGUgdG8gc3RvcmUgKG9uZSBwZXIgY2hhcikKKyAgQHBhcmFtIGlubGVuICAgIFRoZSBudW1iZXIgb2YgcHJpbnRhYmxlIHRvIHN0b3JlCisgIEBwYXJhbSBvdXQgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gZm9yIHRoZSBERVIgZW5jb2RlZCBwcmludGFibGUgU1RSSU5HCisgIEBwYXJhbSBvdXRsZW4gICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBERVIgcHJpbnRhYmxlIFNUUklORworICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZGVyX2VuY29kZV9wcmludGFibGVfc3RyaW5nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeSwgbGVuOworICAgaW50ICAgICAgICAgICBlcnI7CisKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgLyogZ2V0IHRoZSBzaXplICovCisgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfcHJpbnRhYmxlX3N0cmluZyhpbiwgaW5sZW4sICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsgCisgICB9CisKKyAgIC8qIHRvbyBiaWc/ICovCisgICBpZiAobGVuID4gKm91dGxlbikgeworICAgICAgKm91dGxlbiA9IGxlbjsKKyAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisKKyAgIC8qIGVuY29kZSB0aGUgaGVhZGVyK2xlbiAqLworICAgeCA9IDA7CisgICBvdXRbeCsrXSA9IDB4MTM7CisgICBpZiAoaW5sZW4gPCAxMjgpIHsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpaW5sZW47CisgICB9IGVsc2UgaWYgKGlubGVuIDwgMjU2KSB7CisgICAgICBvdXRbeCsrXSA9IDB4ODE7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKWlubGVuOworICAgfSBlbHNlIGlmIChpbmxlbiA8IDY1NTM2VUwpIHsKKyAgICAgIG91dFt4KytdID0gMHg4MjsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKChpbmxlbj4+OCkmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKGlubGVuJjI1NSk7CisgICB9IGVsc2UgaWYgKGlubGVuIDwgMTY3NzcyMTZVTCkgeworICAgICAgb3V0W3grK10gPSAweDgzOworICAgICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcikoKGlubGVuPj4xNikmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKChpbmxlbj4+OCkmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKGlubGVuJjI1NSk7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICAvKiBzdG9yZSBvY3RldHMgKi8KKyAgIGZvciAoeSA9IDA7IHkgPCBpbmxlbjsgeSsrKSB7CisgICAgICAgb3V0W3grK10gPSBkZXJfcHJpbnRhYmxlX2NoYXJfZW5jb2RlKGluW3ldKTsKKyAgIH0KKworICAgLyogcmV0dW4gbGVuZ3RoICovCisgICAqb3V0bGVuID0geDsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3ByaW50YWJsZV9zdHJpbmcvZGVyX2VuY29kZV9wcmludGFibGVfc3RyaW5nLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMTozNDowMyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9wcmludGFibGVfc3RyaW5nL2Rlcl9sZW5ndGhfcHJpbnRhYmxlX3N0cmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OWI2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcuYwpAQCAtMCwwICsxLDE2NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2xlbmd0aF9wcmludGFibGVfc3RyaW5nLmMKKyAgQVNOLjEgREVSLCBnZXQgbGVuZ3RoIG9mIFByaW50YWJsZSBTVFJJTkcsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICBpbnQgY29kZSwgdmFsdWU7Cit9IHByaW50YWJsZV90YWJsZVtdID0geworeyAnICcsIDMyIH0sIAoreyAnXCcnLCAzOSB9LCAKK3sgJygnLCA0MCB9LCAKK3sgJyknLCA0MSB9LCAKK3sgJysnLCA0MyB9LCAKK3sgJywnLCA0NCB9LCAKK3sgJy0nLCA0NSB9LCAKK3sgJy4nLCA0NiB9LCAKK3sgJy8nLCA0NyB9LCAKK3sgJzAnLCA0OCB9LCAKK3sgJzEnLCA0OSB9LCAKK3sgJzInLCA1MCB9LCAKK3sgJzMnLCA1MSB9LCAKK3sgJzQnLCA1MiB9LCAKK3sgJzUnLCA1MyB9LCAKK3sgJzYnLCA1NCB9LCAKK3sgJzcnLCA1NSB9LCAKK3sgJzgnLCA1NiB9LCAKK3sgJzknLCA1NyB9LCAKK3sgJzonLCA1OCB9LCAKK3sgJz0nLCA2MSB9LCAKK3sgJz8nLCA2MyB9LCAKK3sgJ0EnLCA2NSB9LCAKK3sgJ0InLCA2NiB9LCAKK3sgJ0MnLCA2NyB9LCAKK3sgJ0QnLCA2OCB9LCAKK3sgJ0UnLCA2OSB9LCAKK3sgJ0YnLCA3MCB9LCAKK3sgJ0cnLCA3MSB9LCAKK3sgJ0gnLCA3MiB9LCAKK3sgJ0knLCA3MyB9LCAKK3sgJ0onLCA3NCB9LCAKK3sgJ0snLCA3NSB9LCAKK3sgJ0wnLCA3NiB9LCAKK3sgJ00nLCA3NyB9LCAKK3sgJ04nLCA3OCB9LCAKK3sgJ08nLCA3OSB9LCAKK3sgJ1AnLCA4MCB9LCAKK3sgJ1EnLCA4MSB9LCAKK3sgJ1InLCA4MiB9LCAKK3sgJ1MnLCA4MyB9LCAKK3sgJ1QnLCA4NCB9LCAKK3sgJ1UnLCA4NSB9LCAKK3sgJ1YnLCA4NiB9LCAKK3sgJ1cnLCA4NyB9LCAKK3sgJ1gnLCA4OCB9LCAKK3sgJ1knLCA4OSB9LCAKK3sgJ1onLCA5MCB9LCAKK3sgJ2EnLCA5NyB9LCAKK3sgJ2InLCA5OCB9LCAKK3sgJ2MnLCA5OSB9LCAKK3sgJ2QnLCAxMDAgfSwgCit7ICdlJywgMTAxIH0sIAoreyAnZicsIDEwMiB9LCAKK3sgJ2cnLCAxMDMgfSwgCit7ICdoJywgMTA0IH0sIAoreyAnaScsIDEwNSB9LCAKK3sgJ2onLCAxMDYgfSwgCit7ICdrJywgMTA3IH0sIAoreyAnbCcsIDEwOCB9LCAKK3sgJ20nLCAxMDkgfSwgCit7ICduJywgMTEwIH0sIAoreyAnbycsIDExMSB9LCAKK3sgJ3AnLCAxMTIgfSwgCit7ICdxJywgMTEzIH0sIAoreyAncicsIDExNCB9LCAKK3sgJ3MnLCAxMTUgfSwgCit7ICd0JywgMTE2IH0sIAoreyAndScsIDExNyB9LCAKK3sgJ3YnLCAxMTggfSwgCit7ICd3JywgMTE5IH0sIAoreyAneCcsIDEyMCB9LCAKK3sgJ3knLCAxMjEgfSwgCit7ICd6JywgMTIyIH0sIAorfTsKKworaW50IGRlcl9wcmludGFibGVfY2hhcl9lbmNvZGUoaW50IGMpCit7CisgICBpbnQgeDsKKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YocHJpbnRhYmxlX3RhYmxlKS9zaXplb2YocHJpbnRhYmxlX3RhYmxlWzBdKSk7IHgrKykgeworICAgICAgIGlmIChwcmludGFibGVfdGFibGVbeF0uY29kZSA9PSBjKSB7CisgICAgICAgICAgcmV0dXJuIHByaW50YWJsZV90YWJsZVt4XS52YWx1ZTsKKyAgICAgICB9CisgICB9CisgICByZXR1cm4gLTE7Cit9CisKK2ludCBkZXJfcHJpbnRhYmxlX3ZhbHVlX2RlY29kZShpbnQgdikKK3sKKyAgIGludCB4OworICAgZm9yICh4ID0gMDsgeCA8IChpbnQpKHNpemVvZihwcmludGFibGVfdGFibGUpL3NpemVvZihwcmludGFibGVfdGFibGVbMF0pKTsgeCsrKSB7CisgICAgICAgaWYgKHByaW50YWJsZV90YWJsZVt4XS52YWx1ZSA9PSB2KSB7CisgICAgICAgICAgcmV0dXJuIHByaW50YWJsZV90YWJsZVt4XS5jb2RlOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiAtMTsKK30KKyAgIAorLyoqCisgIEdldHMgbGVuZ3RoIG9mIERFUiBlbmNvZGluZyBvZiBQcmludGFibGUgU1RSSU5HIAorICBAcGFyYW0gb2N0ZXRzICAgVGhlIHZhbHVlcyB5b3Ugd2FudCB0byBlbmNvZGUgCisgIEBwYXJhbSBub2N0ZXRzICBUaGUgbnVtYmVyIG9mIG9jdGV0cyBpbiB0aGUgc3RyaW5nIHRvIGVuY29kZQorICBAcGFyYW0gb3V0bGVuICAgW291dF0gVGhlIGxlbmd0aCBvZiB0aGUgREVSIGVuY29kaW5nIGZvciB0aGUgZ2l2ZW4gc3RyaW5nCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcoY29uc3QgdW5zaWduZWQgY2hhciAqb2N0ZXRzLCB1bnNpZ25lZCBsb25nIG5vY3RldHMsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeDsKKworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG9jdGV0cyAhPSBOVUxMKTsKKworICAgLyogc2NhbiBzdHJpbmcgZm9yIHZhbGlkaXR5ICovCisgICBmb3IgKHggPSAwOyB4IDwgbm9jdGV0czsgeCsrKSB7CisgICAgICAgaWYgKGRlcl9wcmludGFibGVfY2hhcl9lbmNvZGUob2N0ZXRzW3hdKSA9PSAtMSkgeworICAgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgICAgICB9CisgICB9CisKKyAgIGlmIChub2N0ZXRzIDwgMTI4KSB7CisgICAgICAvKiAxNiBMTCBERCBERCBERCAuLi4gKi8KKyAgICAgICpvdXRsZW4gPSAyICsgbm9jdGV0czsKKyAgIH0gZWxzZSBpZiAobm9jdGV0cyA8IDI1NikgeworICAgICAgLyogMTYgODEgTEwgREQgREQgREQgLi4uICovCisgICAgICAqb3V0bGVuID0gMyArIG5vY3RldHM7CisgICB9IGVsc2UgaWYgKG5vY3RldHMgPCA2NTUzNlVMKSB7CisgICAgICAvKiAxNiA4MiBMTCBMTCBERCBERCBERCAuLi4gKi8KKyAgICAgICpvdXRsZW4gPSA0ICsgbm9jdGV0czsKKyAgIH0gZWxzZSBpZiAobm9jdGV0cyA8IDE2Nzc3MjE2VUwpIHsKKyAgICAgIC8qIDE2IDgzIExMIExMIExMIEREIEREIEREIC4uLiAqLworICAgICAgKm91dGxlbiA9IDUgKyBub2N0ZXRzOworICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgcmV0dXJuIENSWVBUX09LOworfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvcHJpbnRhYmxlX3N0cmluZy9kZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX2V4LmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9leC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNjU2MDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9leC5jCkBAIC0wLDAgKzEsMjg3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKworLyoqCisgIEBmaWxlIGRlcl9kZWNvZGVfc2VxdWVuY2VfZXguYworICBBU04uMSBERVIsIGRlY29kZSBhIFNFUVVFTkNFLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisKKy8qKgorICAgRGVjb2RlIGEgU0VRVUVOQ0UKKyAgIEBwYXJhbSBpbiAgICAgICBUaGUgREVSIGVuY29kZWQgaW5wdXQKKyAgIEBwYXJhbSBpbmxlbiAgICBUaGUgc2l6ZSBvZiB0aGUgaW5wdXQKKyAgIEBwYXJhbSBsaXN0ICAgICBUaGUgbGlzdCBvZiBpdGVtcyB0byBkZWNvZGUKKyAgIEBwYXJhbSBvdXRsZW4gICBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBsaXN0CisgICBAcGFyYW0gb3JkZXJlZCAgU2VhcmNoIGFuIHVub3JkZWRlZCBvciBvcmRlcmVkIGxpc3QKKyAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCBkZXJfZGVjb2RlX3NlcXVlbmNlX2V4KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGx0Y19hc24xX2xpc3QgKmxpc3QsICAgICB1bnNpZ25lZCBsb25nICBvdXRsZW4sIGludCBvcmRlcmVkKQoreworICAgaW50ICAgICAgICAgICBlcnIsIHR5cGU7CisgICB1bnNpZ25lZCBsb25nIHNpemUsIHgsIHksIHosIGksIGJsa3NpemU7CisgICB2b2lkICAgICAgICAgICpkYXRhOworCisgICBMVENfQVJHQ0hLKGluICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGxpc3QgIT0gTlVMTCk7CisgICAKKyAgIC8qIGdldCBibGsgc2l6ZSAqLworICAgaWYgKGlubGVuIDwgMikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiBzZXF1ZW5jZSB0eXBlPyBXZSBhbGxvdyAweDMwIFNFUVVFTkNFIGFuZCAweDMxIFNFVCBzaW5jZSBmdW5kYW1lbnRhbGx5IHRoZXkncmUgdGhlIHNhbWUgc3RydWN0dXJlICovCisgICB4ID0gMDsKKyAgIGlmIChpblt4XSAhPSAweDMwICYmIGluW3hdICE9IDB4MzEpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgIH0KKyAgICsreDsKKworICAgaWYgKGluW3hdIDwgMTI4KSB7CisgICAgICBibGtzaXplID0gaW5beCsrXTsKKyAgIH0gZWxzZSBpZiAoaW5beF0gJiAweDgwKSB7CisgICAgICBpZiAoaW5beF0gPCAweDgxIHx8IGluW3hdID4gMHg4MykgeworICAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgfQorICAgICAgeSA9IGluW3grK10gJiAweDdGOworCisgICAgICAvKiB3b3VsZCByZWFkaW5nIHRoZSBsZW4gYnl0ZXMgb3ZlcnJ1bj8gKi8KKyAgICAgIGlmICh4ICsgeSA+IGlubGVuKSB7CisgICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICB9CisKKyAgICAgIC8qIHJlYWQgbGVuICovCisgICAgICBibGtzaXplID0gMDsKKyAgICAgIHdoaWxlICh5LS0pIHsKKyAgICAgICAgICBibGtzaXplID0gKGJsa3NpemUgPDwgOCkgfCAodW5zaWduZWQgbG9uZylpblt4KytdOworICAgICAgfQorICB9CisKKyAgLyogd291bGQgdGhpcyBibGtzaXplIG92ZXJmbG93PyAqLworICBpZiAoeCArIGJsa3NpemUgPiBpbmxlbikgeworICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgIH0KKworICAgLyogbWFyayBhbGwgYXMgdW51c2VkICovCisgICBmb3IgKGkgPSAwOyBpIDwgb3V0bGVuOyBpKyspIHsKKyAgICAgICBsaXN0W2ldLnVzZWQgPSAwOworICAgfSAgICAgCisKKyAgLyogb2sgcmVhZCBkYXRhICovCisgICBpbmxlbiA9IGJsa3NpemU7CisgICBmb3IgKGkgPSAwOyBpIDwgb3V0bGVuOyBpKyspIHsKKyAgICAgICB6ICAgID0gMDsKKyAgICAgICB0eXBlID0gbGlzdFtpXS50eXBlOworICAgICAgIHNpemUgPSBsaXN0W2ldLnNpemU7CisgICAgICAgZGF0YSA9IGxpc3RbaV0uZGF0YTsKKyAgICAgICBpZiAoIW9yZGVyZWQgJiYgbGlzdFtpXS51c2VkID09IDEpIHsgY29udGludWU7IH0KKworICAgICAgIGlmICh0eXBlID09IExUQ19BU04xX0VPTCkgeyAKKyAgICAgICAgICBicmVhazsKKyAgICAgICB9CisKKyAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9CT09MRUFOOgorICAgICAgICAgICAgICAgeiA9IGlubGVuOworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX2Jvb2xlYW4oaW4gKyB4LCB6LCAoKGludCAqKWRhdGEpKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfYm9vbGVhbigmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9JTlRFR0VSOgorICAgICAgICAgICAgICAgeiA9IGlubGVuOworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX2ludGVnZXIoaW4gKyB4LCB6LCBkYXRhKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJlZCkgeyAgY29udGludWU7IH0KKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9pbnRlZ2VyKGRhdGEsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0hPUlRfSU5URUdFUjoKKyAgICAgICAgICAgICAgIHogPSBpbmxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zaG9ydF9pbnRlZ2VyKGluICsgeCwgeiwgZGF0YSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIW9yZGVyZWQpIHsgY29udGludWU7IH0KKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyKCgodW5zaWduZWQgbG9uZyopZGF0YSlbMF0sICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9CSVRfU1RSSU5HOgorICAgICAgICAgICAgICAgeiA9IGlubGVuOworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX2JpdF9zdHJpbmcoaW4gKyB4LCB6LCBkYXRhLCAmc2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIW9yZGVyZWQpIHsgY29udGludWU7IH0KKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGxpc3RbaV0uc2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfYml0X3N0cmluZyhzaXplLCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX09DVEVUX1NUUklORzoKKyAgICAgICAgICAgICAgIHogPSBpbmxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9vY3RldF9zdHJpbmcoaW4gKyB4LCB6LCBkYXRhLCAmc2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIW9yZGVyZWQpIHsgY29udGludWU7IH0KKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGxpc3RbaV0uc2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nKHNpemUsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfTlVMTDoKKyAgICAgICAgICAgICAgIGlmIChpbmxlbiA8IDIgfHwgaW5beF0gIT0gMHgwNSB8fCBpblt4KzFdICE9IDB4MDApIHsKKyAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJlZCkgeyBjb250aW51ZTsgfQorICAgICAgICAgICAgICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB6ID0gMjsKKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVI6CisgICAgICAgICAgICAgICB6ID0gaW5sZW47CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfb2JqZWN0X2lkZW50aWZpZXIoaW4gKyB4LCB6LCBkYXRhLCAmc2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIW9yZGVyZWQpIHsgY29udGludWU7IH0KKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGxpc3RbaV0uc2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfb2JqZWN0X2lkZW50aWZpZXIoZGF0YSwgc2l6ZSwgJnopKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9JQTVfU1RSSU5HOgorICAgICAgICAgICAgICAgeiA9IGlubGVuOworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX2lhNV9zdHJpbmcoaW4gKyB4LCB6LCBkYXRhLCAmc2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIW9yZGVyZWQpIHsgY29udGludWU7IH0KKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGxpc3RbaV0uc2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfaWE1X3N0cmluZyhkYXRhLCBzaXplLCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfUFJJTlRBQkxFX1NUUklORzoKKyAgICAgICAgICAgICAgIHogPSBpbmxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nKGluICsgeCwgeiwgZGF0YSwgJnNpemUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgaWYgKCFvcmRlcmVkKSB7IGNvbnRpbnVlOyB9CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBsaXN0W2ldLnNpemUgPSBzaXplOworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcoZGF0YSwgc2l6ZSwgJnopKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVEY4X1NUUklORzoKKyAgICAgICAgICAgICAgIHogPSBpbmxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV91dGY4X3N0cmluZyhpbiArIHgsIHosIGRhdGEsICZzaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJlZCkgeyBjb250aW51ZTsgfQorICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgbGlzdFtpXS5zaXplID0gc2l6ZTsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF91dGY4X3N0cmluZyhkYXRhLCBzaXplLCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX1VUQ1RJTUU6CisgICAgICAgICAgICAgICB6ID0gaW5sZW47CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfdXRjdGltZShpbiArIHgsICZ6LCBkYXRhKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJlZCkgeyBjb250aW51ZTsgfQorICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVQ6CisgICAgICAgICAgICAgICB6ID0gaW5sZW47CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2V0KGluICsgeCwgeiwgZGF0YSwgc2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIW9yZGVyZWQpIHsgY29udGludWU7IH0KKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9zZXF1ZW5jZShkYXRhLCBzaXplLCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUT0Y6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VRVUVOQ0U6CisgICAgICAgICAgICAgICAvKiBkZXRlY3QgaWYgd2UgaGF2ZSB0aGUgcmlnaHQgdHlwZSAqLworICAgICAgICAgICAgICAgaWYgKCh0eXBlID09IExUQ19BU04xX1NFVE9GICYmIChpblt4XSAmIDB4M0YpICE9IDB4MzEpIHx8ICh0eXBlID09IExUQ19BU04xX1NFUVVFTkNFICYmIChpblt4XSAmIDB4M0YpICE9IDB4MzApKSB7CisgICAgICAgICAgICAgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgeiA9IGlubGVuOworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlKGluICsgeCwgeiwgZGF0YSwgc2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBpZiAoIW9yZGVyZWQpIHsgY29udGludWU7IH0KKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9zZXF1ZW5jZShkYXRhLCBzaXplLCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICBicmVhazsKKworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfQ0hPSUNFOgorICAgICAgICAgICAgICAgeiA9IGlubGVuOworICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX2Nob2ljZShpbiArIHgsICZ6LCBkYXRhLCBzaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGlmICghb3JkZXJlZCkgeyBjb250aW51ZTsgfQorICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfQVJHOworICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgIH0KKyAgICAgICB4ICAgICAgICAgICArPSB6OworICAgICAgIGlubGVuICAgICAgIC09IHo7CisgICAgICAgbGlzdFtpXS51c2VkID0gMTsKKyAgICAgICBpZiAoIW9yZGVyZWQpIHsgCisgICAgICAgICAgLyogcmVzdGFydCB0aGUgZGVjb2RlciAqLworICAgICAgICAgIGkgPSAtMTsKKyAgICAgICB9ICAgICAgICAgIAorICAgfQorICAgICAKKyAgIGZvciAoaSA9IDA7IGkgPCBvdXRsZW47IGkrKykgeworICAgICAgaWYgKGxpc3RbaV0udXNlZCA9PSAwKSB7CisgICAgICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgfSAgICAgICAgICAgICAgICAKKyAgIGVyciA9IENSWVBUX09LOyAgIAorCitMQkxfRVJSOgorICAgcmV0dXJuIGVycjsKK30gIAorIAorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX2V4LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjYgMDI6MjU6MTggJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfZmxleGkuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkOGM4NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpLmMKQEAgLTAsMCArMSwzODYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9kZWNvZGVfc2VxdWVuY2VfZmxleGkuYworICBBU04uMSBERVIsIGRlY29kZSBhbiBhcnJheSBvZiBBU04uMSB0eXBlcyB3aXRoIGEgZmxleGkgcGFyc2VyLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZldGNoX2xlbmd0aChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeSwgejsKKworICAgeSA9IDA7CisKKyAgIC8qIHNraXAgdHlwZSBhbmQgcmVhZCBsZW4gKi8KKyAgIGlmIChpbmxlbiA8IDIpIHsKKyAgICAgIHJldHVybiAweEZGRkZGRkZGOworICAgfQorICAgKytpbjsgKyt5OworICAgCisgICAvKiByZWFkIGxlbiAqLworICAgeCA9ICppbisrOyArK3k7CisgICAKKyAgIC8qIDwxMjggbWVhbnMgbGl0ZXJhbCAqLworICAgaWYgKHggPCAxMjgpIHsKKyAgICAgIHJldHVybiB4K3k7CisgICB9CisgICB4ICAgICAmPSAweDdGOyAvKiB0aGUgbG93ZXIgNyBiaXRzIGFyZSB0aGUgbGVuZ3RoIG9mIHRoZSBsZW5ndGggKi8KKyAgIGlubGVuIC09IDI7CisgICAKKyAgIC8qIGxlbiBtZWFucyBsZW4gb2YgbGVuISAqLworICAgaWYgKHggPT0gMCB8fCB4ID4gNCB8fCB4ID4gaW5sZW4pIHsKKyAgICAgIHJldHVybiAweEZGRkZGRkZGOworICAgfQorICAgCisgICB5ICs9IHg7CisgICB6ID0gMDsKKyAgIHdoaWxlICh4LS0pIHsgICAKKyAgICAgIHogPSAoejw8OCkgfCAoKHVuc2lnbmVkIGxvbmcpKmluKTsKKyAgICAgICsraW47CisgICB9CisgICByZXR1cm4geit5OworfQorCisvKiogCisgICBBU04uMSBERVIgRmxleGkoYmxlKSBkZWNvZGVyIHdpbGwgZGVjb2RlIGFyYml0cmFyeSBERVIgcGFja2V0cyBhbmQgY3JlYXRlIGEgbGlua2VkIGxpc3Qgb2YgdGhlIGRlY29kZWQgZWxlbWVudHMuCisgICBAcGFyYW0gaW4gICAgICBUaGUgaW5wdXQgYnVmZmVyCisgICBAcGFyYW0gaW5sZW4gICBbaW4vb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCBidWZmZXIgYW5kIG9uIG91dHB1dCB0aGUgYW1vdW50IG9mIGRlY29kZWQgZGF0YSAKKyAgIEBwYXJhbSBvdXQgICAgIFtvdXRdIEEgcG9pbnRlciB0byB0aGUgbGlua2VkIGxpc3QKKyAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2Vzcy4KKyovICAgCitpbnQgZGVyX2RlY29kZV9zZXF1ZW5jZV9mbGV4aShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyAqaW5sZW4sIGx0Y19hc24xX2xpc3QgKipvdXQpCit7CisgICBsdGNfYXNuMV9saXN0ICpsOworICAgdW5zaWduZWQgbG9uZyBlcnIsIHR5cGUsIGxlbiwgdG90bGVuLCB4LCB5OworICAgdm9pZCAgICAgICAgICAqcmVhbGxvY190bXA7CisgICAKKyAgIExUQ19BUkdDSEsoaW4gICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGlubGVuICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAhPSBOVUxMKTsKKworICAgbCA9IE5VTEw7CisgICB0b3RsZW4gPSAwOworICAgCisgICAvKiBzY2FuIHRoZSBpbnB1dCBhbmQgYW5kIGdldCBsZW5ndGhzIGFuZCB3aGF0IG5vdCAqLworICAgd2hpbGUgKCppbmxlbikgeyAgICAgCisgICAgICAvKiByZWFkIHRoZSB0eXBlIGJ5dGUgKi8KKyAgICAgIHR5cGUgPSAqaW47CisKKyAgICAgIC8qIGZldGNoIGxlbmd0aCAqLworICAgICAgbGVuID0gZmV0Y2hfbGVuZ3RoKGluLCAqaW5sZW4pOworICAgICAgaWYgKGxlbiA+ICppbmxlbikgeworICAgICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICAgICBnb3RvIGVycm9yOworICAgICAgfQorCisgICAgICAvKiBhbGxvYyBuZXcgbGluayAqLworICAgICAgaWYgKGwgPT0gTlVMTCkgeworICAgICAgICAgbCA9IFhDQUxMT0MoMSwgc2l6ZW9mKCpsKSk7CisgICAgICAgICBpZiAobCA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnIgPSBDUllQVF9NRU07CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIGwtPm5leHQgPSBYQ0FMTE9DKDEsIHNpemVvZigqbCkpOworICAgICAgICAgaWYgKGwtPm5leHQgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyID0gQ1JZUFRfTUVNOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgIH0KKyAgICAgICAgIGwtPm5leHQtPnByZXYgPSBsOworICAgICAgICAgbCA9IGwtPm5leHQ7CisgICAgICB9CisKKyAgICAgIC8qIG5vdyBzd2l0Y2ggb24gdHlwZSAqLworICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICBjYXNlIDB4MDE6IC8qIEJPT0xFQU4gKi8KKyAgICAgICAgICAgIGwtPnR5cGUgPSBMVENfQVNOMV9CT09MRUFOOworICAgICAgICAgICAgbC0+c2l6ZSA9IDE7CisgICAgICAgICAgICBsLT5kYXRhID0gWENBTExPQygxLCBzaXplb2YoaW50KSk7CisgICAgICAgCisgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfYm9vbGVhbihpbiwgKmlubGVuLCBsLT5kYXRhKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX2Jvb2xlYW4oJmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgIGNhc2UgMHgwMjogLyogSU5URUdFUiAqLworICAgICAgICAgICAgIC8qIGluaXQgZmllbGQgKi8KKyAgICAgICAgICAgICBsLT50eXBlID0gTFRDX0FTTjFfSU5URUdFUjsKKyAgICAgICAgICAgICBsLT5zaXplID0gMTsKKyAgICAgICAgICAgICBpZiAoKGVyciA9IG1wX2luaXQoJmwtPmRhdGEpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICAvKiBkZWNvZGUgZmllbGQgKi8KKyAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfaW50ZWdlcihpbiwgKmlubGVuLCBsLT5kYXRhKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgCisgICAgICAgICAgICAgLyogY2FsYyBsZW5ndGggb2Ygb2JqZWN0ICovCisgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX2ludGVnZXIobC0+ZGF0YSwgJmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICBjYXNlIDB4MDM6IC8qIEJJVCAqLworICAgICAgICAgICAgLyogaW5pdCBmaWVsZCAqLworICAgICAgICAgICAgbC0+dHlwZSA9IExUQ19BU04xX0JJVF9TVFJJTkc7CisgICAgICAgICAgICBsLT5zaXplID0gbGVuICogODsgLyogKjggYmVjYXVzZSB3ZSBzdG9yZSBkZWNvZGVkIGJpdHMgb25lIHBlciBjaGFyIGFuZCB0aGV5IGFyZSBlbmNvZGVkIDggcGVyIGNoYXIuICAqLworCisgICAgICAgICAgICBpZiAoKGwtPmRhdGEgPSBYQ0FMTE9DKDEsIGwtPnNpemUpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICBlcnIgPSBDUllQVF9NRU07CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfYml0X3N0cmluZyhpbiwgKmlubGVuLCBsLT5kYXRhLCAmbC0+c2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfYml0X3N0cmluZyhsLT5zaXplLCAmbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgY2FzZSAweDA0OiAvKiBPQ1RFVCAqLworCisgICAgICAgICAgICAvKiBpbml0IGZpZWxkICovCisgICAgICAgICAgICBsLT50eXBlID0gTFRDX0FTTjFfT0NURVRfU1RSSU5HOworICAgICAgICAgICAgbC0+c2l6ZSA9IGxlbjsKKworICAgICAgICAgICAgaWYgKChsLT5kYXRhID0gWENBTExPQygxLCBsLT5zaXplKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgZXJyID0gQ1JZUFRfTUVNOworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX29jdGV0X3N0cmluZyhpbiwgKmlubGVuLCBsLT5kYXRhLCAmbC0+c2l6ZSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nKGwtPnNpemUsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICBjYXNlIDB4MDU6IC8qIE5VTEwgKi8KKyAgICAgICAgIAorICAgICAgICAgICAgLyogdmFsaWQgTlVMTCBpcyAweDA1IDB4MDAgKi8KKyAgICAgICAgICAgIGlmIChpblswXSAhPSAweDA1IHx8IGluWzFdICE9IDB4MDApIHsKKyAgICAgICAgICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyogc2ltcGxlIHRvIHN0b3JlIDstKSAqLworICAgICAgICAgICAgbC0+dHlwZSA9IExUQ19BU04xX05VTEw7CisgICAgICAgICAgICBsLT5kYXRhID0gTlVMTDsKKyAgICAgICAgICAgIGwtPnNpemUgPSAwOworICAgICAgICAgICAgbGVuICAgICA9IDI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgCisgICAgICAgICBjYXNlIDB4MDY6IC8qIE9JRCAqLworICAgICAgICAgCisgICAgICAgICAgICAvKiBpbml0IGZpZWxkICovCisgICAgICAgICAgICBsLT50eXBlID0gTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVI7CisgICAgICAgICAgICBsLT5zaXplID0gbGVuOworCisgICAgICAgICAgICBpZiAoKGwtPmRhdGEgPSBYQ0FMTE9DKGxlbiwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgZXJyID0gQ1JZUFRfTUVNOworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX29iamVjdF9pZGVudGlmaWVyKGluLCAqaW5sZW4sIGwtPmRhdGEsICZsLT5zaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9vYmplY3RfaWRlbnRpZmllcihsLT5kYXRhLCBsLT5zaXplLCAmbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qIHJlc2l6ZSBpdCB0byBzYXZlIGEgYnVuY2ggb2YgbWVtICovCisgICAgICAgICAgICBpZiAoKHJlYWxsb2NfdG1wID0gWFJFQUxMT0MobC0+ZGF0YSwgbC0+c2l6ZSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgIC8qIG91dCBvZiBoZWFwIGJ1dCB0aGlzIGlzIG5vdCBhbiBlcnJvciAqLworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsLT5kYXRhID0gcmVhbGxvY190bXA7CisgICAgICAgICAgICBicmVhazsKKyAgCisgICAgICAgICBjYXNlIDB4MEM6IC8qIFVURjggKi8KKyAgICAgICAgIAorICAgICAgICAgICAgLyogaW5pdCBmaWVsZCAqLworICAgICAgICAgICAgbC0+dHlwZSA9IExUQ19BU04xX1VURjhfU1RSSU5HOworICAgICAgICAgICAgbC0+c2l6ZSA9IGxlbjsKKworICAgICAgICAgICAgaWYgKChsLT5kYXRhID0gWENBTExPQyhzaXplb2Yod2NoYXJfdCksIGwtPnNpemUpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICBlcnIgPSBDUllQVF9NRU07CisgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfdXRmOF9zdHJpbmcoaW4sICppbmxlbiwgbC0+ZGF0YSwgJmwtPnNpemUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nKGwtPmRhdGEsIGwtPnNpemUsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICBjYXNlIDB4MTM6IC8qIFBSSU5UQUJMRSAqLworICAgICAgICAgCisgICAgICAgICAgICAvKiBpbml0IGZpZWxkICovCisgICAgICAgICAgICBsLT50eXBlID0gTFRDX0FTTjFfUFJJTlRBQkxFX1NUUklORzsKKyAgICAgICAgICAgIGwtPnNpemUgPSBsZW47CisKKyAgICAgICAgICAgIGlmICgobC0+ZGF0YSA9IFhDQUxMT0MoMSwgbC0+c2l6ZSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgIGVyciA9IENSWVBUX01FTTsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nKGluLCAqaW5sZW4sIGwtPmRhdGEsICZsLT5zaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9wcmludGFibGVfc3RyaW5nKGwtPmRhdGEsIGwtPnNpemUsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgCisgICAgICAgICBjYXNlIDB4MTY6IC8qIElBNSAqLworICAgICAgICAgCisgICAgICAgICAgICAvKiBpbml0IGZpZWxkICovCisgICAgICAgICAgICBsLT50eXBlID0gTFRDX0FTTjFfSUE1X1NUUklORzsKKyAgICAgICAgICAgIGwtPnNpemUgPSBsZW47CisKKyAgICAgICAgICAgIGlmICgobC0+ZGF0YSA9IFhDQUxMT0MoMSwgbC0+c2l6ZSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgIGVyciA9IENSWVBUX01FTTsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9pYTVfc3RyaW5nKGluLCAqaW5sZW4sIGwtPmRhdGEsICZsLT5zaXplKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9pYTVfc3RyaW5nKGwtPmRhdGEsIGwtPnNpemUsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgCisgICAgICAgICBjYXNlIDB4MTc6IC8qIFVUQyBUSU1FICovCisgICAgICAgICAKKyAgICAgICAgICAgIC8qIGluaXQgZmllbGQgKi8KKyAgICAgICAgICAgIGwtPnR5cGUgPSBMVENfQVNOMV9VVENUSU1FOworICAgICAgICAgICAgbC0+c2l6ZSA9IDE7CisKKyAgICAgICAgICAgIGlmICgobC0+ZGF0YSA9IFhDQUxMT0MoMSwgc2l6ZW9mKGx0Y191dGN0aW1lKSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgIGVyciA9IENSWVBUX01FTTsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxlbiA9ICppbmxlbjsKKyAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV91dGN0aW1lKGluLCAmbGVuLCBsLT5kYXRhKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF91dGN0aW1lKGwtPmRhdGEsICZsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgCisgICAgICAgICBjYXNlIDB4MzA6IC8qIFNFUVVFTkNFICovCisgICAgICAgICBjYXNlIDB4MzE6IC8qIFNFVCAqLworICAgICAgICAgCisgICAgICAgICAgICAgLyogaW5pdCBmaWVsZCAqLworICAgICAgICAgICAgIGwtPnR5cGUgPSAodHlwZSA9PSAweDMwKSA/IExUQ19BU04xX1NFUVVFTkNFIDogTFRDX0FTTjFfU0VUOworICAgICAgICAgICAgIAorICAgICAgICAgICAgIC8qIHdlIGhhdmUgdG8gZGVjb2RlIHRoZSBTRVFVRU5DRSBoZWFkZXIgYW5kIGdldCBpdCdzIGxlbmd0aCAqLworICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIG1vdmUgcGFzdCB0eXBlICovCisgICAgICAgICAgICAgICAgKytpbjsgLS0oKmlubGVuKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiByZWFkIGxlbmd0aCBieXRlICovCisgICAgICAgICAgICAgICAgeCA9ICppbisrOyAtLSgqaW5sZW4pOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qIHNtYWxsZXN0IFNFUVVFTkNFL1NFVCBoZWFkZXIgKi8KKyAgICAgICAgICAgICAgICB5ID0gMjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiBub3cgaWYgaXQncyA+IDEyNyB0aGUgbmV4dCBieXRlcyBhcmUgdGhlIGxlbmd0aCBvZiB0aGUgbGVuZ3RoICovCisgICAgICAgICAgICAgICAgaWYgKHggPiAxMjgpIHsKKyAgICAgICAgICAgICAgICAgICB4ICAgICAgJj0gMHg3RjsKKyAgICAgICAgICAgICAgICAgICBpbiAgICAgKz0geDsKKyAgICAgICAgICAgICAgICAgICAqaW5sZW4gLT0geDsKKyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAvKiB1cGRhdGUgc2VxdWVuY2UgaGVhZGVyIGxlbiAqLworICAgICAgICAgICAgICAgICAgIHkgICAgICArPSB4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAKKyAgICAgICAgICAgICAvKiBTZXF1ZW5jZSBlbGVtZW50cyBnbyBhcyBjaGlsZCAqLworICAgICAgICAgICAgIGxlbiA9IGxlbiAtIHk7CisgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpKGluLCAmbGVuLCAmKGwtPmNoaWxkKSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgCisgICAgICAgICAgICAgLyogbGVuIHVwZGF0ZSAqLworICAgICAgICAgICAgIHRvdGxlbiArPSB5OworICAgICAgICAgICAgIAorICAgICAgICAgICAgIC8qIGxpbmsgdGhlbSB1cCB5MCAqLworICAgICAgICAgICAgIGwtPmNoaWxkLT5wYXJlbnQgPSBsOworICAgICAgICAgICAgIAorICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgLyogaW52YWxpZCBieXRlIC4uLiB0aGlzIGlzIGEgc29mdCBlcnJvciAqLworICAgICAgICAgICAvKiByZW1vdmUgbGluayAqLworICAgICAgICAgICBsICAgICAgID0gbC0+cHJldjsKKyAgICAgICAgICAgWEZSRUUobC0+bmV4dCk7CisgICAgICAgICAgIGwtPm5leHQgPSBOVUxMOworICAgICAgICAgICBnb3RvIG91dHNpZGU7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qIGFkdmFuY2UgcG9pbnRlcnMgKi8KKyAgICAgIHRvdGxlbiAgKz0gbGVuOworICAgICAgaW4gICAgICArPSBsZW47CisgICAgICAqaW5sZW4gIC09IGxlbjsKKyAgIH0KKyAgIAorb3V0c2lkZTogICAKKworICAgLyogcmV3aW5kIGwgcGxlYXNlICovCisgICB3aGlsZSAobC0+cHJldiAhPSBOVUxMIHx8IGwtPnBhcmVudCAhPSBOVUxMKSB7CisgICAgICBpZiAobC0+cGFyZW50ICE9IE5VTEwpIHsKKyAgICAgICAgIGwgPSBsLT5wYXJlbnQ7CisgICAgICB9IGVsc2UgeworICAgICAgICAgbCA9IGwtPnByZXY7CisgICAgICB9CisgICB9CisgICAKKyAgIC8qIHJldHVybiAqLworICAgKm91dCAgID0gbDsKKyAgICppbmxlbiA9IHRvdGxlbjsKKyAgIHJldHVybiBDUllQVF9PSzsKKworZXJyb3I6CisgICAvKiBmcmVlIGxpc3QgKi8KKyAgIGRlcl9zZXF1ZW5jZV9mcmVlKGwpOworCisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9mbGV4aS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjI1ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI2IDAyOjI1OjE4ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNWMxODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aS5jCkBAIC0wLDAgKzEsMTM5IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKKworLyoqCisgIEBmaWxlIGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkuYworICBBU04uMSBERVIsIGRlY29kZSBhIFNFUVVFTkNFLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisKKy8qKgorICBEZWNvZGUgYSBTRVFVRU5DRSB0eXBlIHVzaW5nIGEgVkEgbGlzdAorICBAcGFyYW0gaW4gICAgSW5wdXQgYnVmZmVyCisgIEBwYXJhbSBpbmxlbiBMZW5ndGggb2YgaW5wdXQgaW4gb2N0ZXRzCisgIEByZW1hcmsgPC4uLj4gaXMgb2YgdGhlIGZvcm0gPHR5cGUsIHNpemUsIGRhdGE+IChpbnQsIHVuc2lnbmVkIGxvbmcsIHZvaWQqKQorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyovICAKK2ludCBkZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCAuLi4pCit7CisgICBpbnQgICAgICAgICAgIGVyciwgdHlwZTsKKyAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgeDsKKyAgIHZvaWQgICAgICAgICAgKmRhdGE7CisgICB2YV9saXN0ICAgICAgIGFyZ3M7CisgICBsdGNfYXNuMV9saXN0ICpsaXN0OworCisgICBMVENfQVJHQ0hLKGluICAgICE9IE5VTEwpOworCisgICAvKiBnZXQgc2l6ZSBvZiBvdXRwdXQgdGhhdCB3aWxsIGJlIHJlcXVpcmVkICovCisgICB2YV9zdGFydChhcmdzLCBpbmxlbik7CisgICB4ID0gMDsKKyAgIGZvciAoOzspIHsKKyAgICAgICB0eXBlID0gdmFfYXJnKGFyZ3MsIGludCk7CisgICAgICAgc2l6ZSA9IHZhX2FyZyhhcmdzLCB1bnNpZ25lZCBsb25nKTsKKyAgICAgICBkYXRhID0gdmFfYXJnKGFyZ3MsIHZvaWQqKTsKKworICAgICAgIGlmICh0eXBlID09IExUQ19BU04xX0VPTCkgeyAKKyAgICAgICAgICBicmVhazsKKyAgICAgICB9CisKKyAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9CT09MRUFOOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX0lOVEVHRVI6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0hPUlRfSU5URUdFUjoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9CSVRfU1RSSU5HOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX09DVEVUX1NUUklORzoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9OVUxMOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX09CSkVDVF9JREVOVElGSUVSOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX0lBNV9TVFJJTkc6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfUFJJTlRBQkxFX1NUUklORzoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVEY4X1NUUklORzoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVENUSU1FOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFVDoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVRPRjoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVFVRU5DRToKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9DSE9JQ0U6CisgICAgICAgICAgICAgICAgKyt4OyAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAKKyAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgIHZhX2VuZChhcmdzKTsKKyAgICAgICAgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgICAgICB9CisgICB9CisgICB2YV9lbmQoYXJncyk7CisKKyAgIC8qIGFsbG9jYXRlIHN0cnVjdHVyZSBmb3IgeCBlbGVtZW50cyAqLworICAgaWYgKHggPT0gMCkgeworICAgICAgcmV0dXJuIENSWVBUX05PUDsKKyAgIH0KKworICAgbGlzdCA9IFhDQUxMT0Moc2l6ZW9mKCpsaXN0KSwgeCk7CisgICBpZiAobGlzdCA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICAvKiBmaWxsIGluIHRoZSBzdHJ1Y3R1cmUgKi8KKyAgIHZhX3N0YXJ0KGFyZ3MsIGlubGVuKTsKKyAgIHggPSAwOworICAgZm9yICg7OykgeworICAgICAgIHR5cGUgPSB2YV9hcmcoYXJncywgaW50KTsKKyAgICAgICBzaXplID0gdmFfYXJnKGFyZ3MsIHVuc2lnbmVkIGxvbmcpOworICAgICAgIGRhdGEgPSB2YV9hcmcoYXJncywgdm9pZCopOworCisgICAgICAgaWYgKHR5cGUgPT0gTFRDX0FTTjFfRU9MKSB7IAorICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKworICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICBjYXNlIExUQ19BU04xX0JPT0xFQU46CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfSU5URUdFUjoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TSE9SVF9JTlRFR0VSOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX0JJVF9TVFJJTkc6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0NURVRfU1RSSU5HOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX05VTEw6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVI6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfSUE1X1NUUklORzoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1VURjhfU1RSSU5HOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1VUQ1RJTUU6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VRVUVOQ0U6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFVE9GOiAgICAgICAgICAKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9DSE9JQ0U6CisgICAgICAgICAgICAgICAgbGlzdFt4XS50eXBlICAgPSB0eXBlOworICAgICAgICAgICAgICAgIGxpc3RbeF0uc2l6ZSAgID0gc2l6ZTsKKyAgICAgICAgICAgICAgICBsaXN0W3grK10uZGF0YSA9IGRhdGE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAKKyAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgIHZhX2VuZChhcmdzKTsKKyAgICAgICAgICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfQVJHOworICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgIH0KKyAgIH0KKyAgIHZhX2VuZChhcmdzKTsKKworICAgZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZShpbiwgaW5sZW4sIGxpc3QsIHgpOworTEJMX0VSUjoKKyAgIFhGUkVFKGxpc3QpOworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yNiAwMjoyNToxOCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9leC5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2VfZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGI0ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2VfZXguYwpAQCAtMCwwICsxLDMzNSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisKKy8qKgorICBAZmlsZSBkZXJfZW5jb2RlX3NlcXVlbmNlX2V4LmMKKyAgQVNOLjEgREVSLCBlbmNvZGUgYSBTRVFVRU5DRSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0RFUgorCisvKioKKyAgIEVuY29kZSBhIFNFUVVFTkNFCisgICBAcGFyYW0gbGlzdCAgICAgIFRoZSBsaXN0IG9mIGl0ZW1zIHRvIGVuY29kZQorICAgQHBhcmFtIGlubGVuICAgICBUaGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBsaXN0CisgICBAcGFyYW0gb3V0ICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiAKKyAgIEBwYXJhbSBvdXRsZW4gICAgW2luL291dF0gVGhlIHNpemUgb2YgdGhlIG91dHB1dAorICAgQHBhcmFtIHR5cGVfb2YgICBMVENfQVNOMV9TRVFVRU5DRSBvciBMVENfQVNOMV9TRVQvTFRDX0FTTjFfU0VUT0YKKyAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCBkZXJfZW5jb2RlX3NlcXVlbmNlX2V4KGx0Y19hc24xX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB0eXBlX29mKSAKK3sKKyAgIGludCAgICAgICAgICAgZXJyLCB0eXBlOworICAgdW5zaWduZWQgbG9uZyBzaXplLCB4LCB5LCB6LCBpOworICAgdm9pZCAgICAgICAgICAqZGF0YTsKKworICAgTFRDX0FSR0NISyhsaXN0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gICE9IE5VTEwpOworCisgICAvKiBnZXQgc2l6ZSBvZiBvdXRwdXQgdGhhdCB3aWxsIGJlIHJlcXVpcmVkICovCisgICB5ID0gMDsKKyAgIGZvciAoaSA9IDA7IGkgPCBpbmxlbjsgaSsrKSB7CisgICAgICAgdHlwZSA9IGxpc3RbaV0udHlwZTsKKyAgICAgICBzaXplID0gbGlzdFtpXS5zaXplOworICAgICAgIGRhdGEgPSBsaXN0W2ldLmRhdGE7CisKKyAgICAgICBpZiAodHlwZSA9PSBMVENfQVNOMV9FT0wpIHsgCisgICAgICAgICAgYnJlYWs7CisgICAgICAgfQorCisgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIExUQ19BU04xX0JPT0xFQU46CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfYm9vbGVhbigmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB5ICs9IHg7CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX0lOVEVHRVI6CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfaW50ZWdlcihkYXRhLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB5ICs9IHg7CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX1NIT1JUX0lOVEVHRVI6CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfc2hvcnRfaW50ZWdlcigqKCh1bnNpZ25lZCBsb25nKilkYXRhKSwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9CSVRfU1RSSU5HOgorICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX2JpdF9zdHJpbmcoc2l6ZSwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9PQ1RFVF9TVFJJTkc6CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nKHNpemUsICZ4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHkgKz0geDsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfTlVMTDoKKyAgICAgICAgICAgICAgIHkgKz0gMjsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVI6CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfb2JqZWN0X2lkZW50aWZpZXIoZGF0YSwgc2l6ZSwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9JQTVfU1RSSU5HOgorICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX2lhNV9zdHJpbmcoZGF0YSwgc2l6ZSwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HOgorICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcoZGF0YSwgc2l6ZSwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVEY4X1NUUklORzoKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF91dGY4X3N0cmluZyhkYXRhLCBzaXplLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB5ICs9IHg7CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX1VUQ1RJTUU6CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfdXRjdGltZShkYXRhLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB5ICs9IHg7CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFVDoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVRPRjoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVFVRU5DRToKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9zZXF1ZW5jZShkYXRhLCBzaXplLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB5ICs9IHg7CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAKKyAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfQVJHOworICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgIH0KKyAgIH0KKworICAgLyogY2FsYyBoZWFkZXIgc2l6ZSAqLworICAgeiA9IHk7CisgICBpZiAoeSA8IDEyOCkgeworICAgICAgeSArPSAyOworICAgfSBlbHNlIGlmICh5IDwgMjU2KSB7CisgICAgICAvKiAweDMwIDB4ODEgTEwgKi8KKyAgICAgIHkgKz0gMzsKKyAgIH0gZWxzZSBpZiAoeSA8IDY1NTM2VUwpIHsKKyAgICAgIC8qIDB4MzAgMHg4MiBMTCBMTCAqLworICAgICAgeSArPSA0OworICAgfSBlbHNlIGlmICh5IDwgMTY3NzcyMTZVTCkgeworICAgICAgLyogMHgzMCAweDgzIExMIExMIExMICovCisgICAgICB5ICs9IDU7CisgICB9IGVsc2UgeworICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIHRvbyBiaWcgPyAqLworICAgaWYgKCpvdXRsZW4gPCB5KSB7CisgICAgICAqb3V0bGVuID0geTsKKyAgICAgIGVyciA9IENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogc3RvcmUgaGVhZGVyICovCisgICB4ID0gMDsKKyAgIG91dFt4KytdID0gKHR5cGVfb2YgPT0gTFRDX0FTTjFfU0VRVUVOQ0UpID8gMHgzMCA6IDB4MzE7CisgICAgICAKKyAgIGlmICh6IDwgMTI4KSB7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKXo7CisgICB9IGVsc2UgaWYgKHogPCAyNTYpIHsKKyAgICAgIG91dFt4KytdID0gMHg4MTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpejsKKyAgIH0gZWxzZSBpZiAoeiA8IDY1NTM2VUwpIHsKKyAgICAgIG91dFt4KytdID0gMHg4MjsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKCh6Pj44VUwpJjI1NSk7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSh6JjI1NSk7CisgICB9IGVsc2UgaWYgKHogPCAxNjc3NzIxNlVMKSB7CisgICAgICBvdXRbeCsrXSA9IDB4ODM7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSgoej4+MTZVTCkmMjU1KTsKKyAgICAgIG91dFt4KytdID0gKHVuc2lnbmVkIGNoYXIpKCh6Pj44VUwpJjI1NSk7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSh6JjI1NSk7CisgICB9CisKKyAgIC8qIHN0b3JlIGRhdGEgKi8KKyAgICpvdXRsZW4gLT0geDsKKyAgIGZvciAoaSA9IDA7IGkgPCBpbmxlbjsgaSsrKSB7CisgICAgICAgdHlwZSA9IGxpc3RbaV0udHlwZTsKKyAgICAgICBzaXplID0gbGlzdFtpXS5zaXplOworICAgICAgIGRhdGEgPSBsaXN0W2ldLmRhdGE7CisKKyAgICAgICBpZiAodHlwZSA9PSBMVENfQVNOMV9FT0wpIHsgCisgICAgICAgICAgYnJlYWs7CisgICAgICAgfQorCisgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIExUQ19BU04xX0JPT0xFQU46CisgICAgICAgICAgICAgICB6ID0gKm91dGxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2VuY29kZV9ib29sZWFuKCooKGludCAqKWRhdGEpLCBvdXQgKyB4LCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB4ICAgICAgICs9IHo7CisgICAgICAgICAgICAgICAqb3V0bGVuIC09IHo7CisgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9JTlRFR0VSOgorICAgICAgICAgICAgICAgeiA9ICpvdXRsZW47CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfaW50ZWdlcihkYXRhLCBvdXQgKyB4LCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB4ICAgICAgICs9IHo7CisgICAgICAgICAgICAgICAqb3V0bGVuIC09IHo7CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX1NIT1JUX0lOVEVHRVI6CisgICAgICAgICAgICAgICB6ID0gKm91dGxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2VuY29kZV9zaG9ydF9pbnRlZ2VyKCooKHVuc2lnbmVkIGxvbmcqKWRhdGEpLCBvdXQgKyB4LCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB4ICAgICAgICs9IHo7CisgICAgICAgICAgICAgICAqb3V0bGVuIC09IHo7CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX0JJVF9TVFJJTkc6CisgICAgICAgICAgICAgICB6ID0gKm91dGxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2VuY29kZV9iaXRfc3RyaW5nKGRhdGEsIHNpemUsIG91dCArIHgsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHggICAgICAgKz0gejsKKyAgICAgICAgICAgICAgICpvdXRsZW4gLT0gejsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0NURVRfU1RSSU5HOgorICAgICAgICAgICAgICAgeiA9ICpvdXRsZW47CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfb2N0ZXRfc3RyaW5nKGRhdGEsIHNpemUsIG91dCArIHgsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHggICAgICAgKz0gejsKKyAgICAgICAgICAgICAgICpvdXRsZW4gLT0gejsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfTlVMTDoKKyAgICAgICAgICAgICAgIG91dFt4KytdID0gMHgwNTsKKyAgICAgICAgICAgICAgIG91dFt4KytdID0gMHgwMDsKKyAgICAgICAgICAgICAgICpvdXRsZW4gLT0gMjsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVI6CisgICAgICAgICAgICAgICB6ID0gKm91dGxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2VuY29kZV9vYmplY3RfaWRlbnRpZmllcihkYXRhLCBzaXplLCBvdXQgKyB4LCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB4ICAgICAgICs9IHo7CisgICAgICAgICAgICAgICAqb3V0bGVuIC09IHo7CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX0lBNV9TVFJJTkc6CisgICAgICAgICAgICAgICB6ID0gKm91dGxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2VuY29kZV9pYTVfc3RyaW5nKGRhdGEsIHNpemUsIG91dCArIHgsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHggICAgICAgKz0gejsKKyAgICAgICAgICAgICAgICpvdXRsZW4gLT0gejsKKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIAorICAgICAgICAgICBjYXNlIExUQ19BU04xX1BSSU5UQUJMRV9TVFJJTkc6CisgICAgICAgICAgICAgICB6ID0gKm91dGxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2VuY29kZV9wcmludGFibGVfc3RyaW5nKGRhdGEsIHNpemUsIG91dCArIHgsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHggICAgICAgKz0gejsKKyAgICAgICAgICAgICAgICpvdXRsZW4gLT0gejsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfVVRGOF9TVFJJTkc6CisgICAgICAgICAgICAgICB6ID0gKm91dGxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2VuY29kZV91dGY4X3N0cmluZyhkYXRhLCBzaXplLCBvdXQgKyB4LCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB4ICAgICAgICs9IHo7CisgICAgICAgICAgICAgICAqb3V0bGVuIC09IHo7CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX1VUQ1RJTUU6CisgICAgICAgICAgICAgICB6ID0gKm91dGxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2VuY29kZV91dGN0aW1lKGRhdGEsIG91dCArIHgsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHggICAgICAgKz0gejsKKyAgICAgICAgICAgICAgICpvdXRsZW4gLT0gejsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUOgorICAgICAgICAgICAgICAgeiA9ICpvdXRsZW47CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfc2V0KGRhdGEsIHNpemUsIG91dCArIHgsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHggICAgICAgKz0gejsKKyAgICAgICAgICAgICAgICpvdXRsZW4gLT0gejsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUT0Y6CisgICAgICAgICAgICAgICB6ID0gKm91dGxlbjsKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2VuY29kZV9zZXRvZihkYXRhLCBzaXplLCBvdXQgKyB4LCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB4ICAgICAgICs9IHo7CisgICAgICAgICAgICAgICAqb3V0bGVuIC09IHo7CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFUVVFTkNFOgorICAgICAgICAgICAgICAgeiA9ICpvdXRsZW47CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2VfZXgoZGF0YSwgc2l6ZSwgb3V0ICsgeCwgJnosIHR5cGUpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeCAgICAgICArPSB6OworICAgICAgICAgICAgICAgKm91dGxlbiAtPSB6OworICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgIAorICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgfQorICAgfQorICAgKm91dGxlbiA9IHg7CisgICBlcnIgPSBDUllQVF9PSzsgICAKKworTEJMX0VSUjoKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGEzNGM2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfZW5jb2RlX3NlcXVlbmNlX211bHRpLmMKQEAgLTAsMCArMSwxMzggQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworCisvKioKKyAgQGZpbGUgZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aS5jCisgIEFTTi4xIERFUiwgZW5jb2RlIGEgU0VRVUVOQ0UsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKworLyoqCisgIEVuY29kZSBhIFNFUVVFTkNFIHR5cGUgdXNpbmcgYSBWQSBsaXN0CisgIEBwYXJhbSBvdXQgICAgW291dF0gRGVzdGluYXRpb24gZm9yIGRhdGEKKyAgQHBhcmFtIG91dGxlbiBbaW4vb3V0XSBMZW5ndGggb2YgYnVmZmVyIGFuZCByZXN1bHRpbmcgbGVuZ3RoIG9mIG91dHB1dAorICBAcmVtYXJrIDwuLi4+IGlzIG9mIHRoZSBmb3JtIDx0eXBlLCBzaXplLCBkYXRhPiAoaW50LCB1bnNpZ25lZCBsb25nLCB2b2lkKikKKyAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLyAgCitpbnQgZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aSh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgLi4uKQoreworICAgaW50ICAgICAgICAgICBlcnIsIHR5cGU7CisgICB1bnNpZ25lZCBsb25nIHNpemUsIHg7CisgICB2b2lkICAgICAgICAgICpkYXRhOworICAgdmFfbGlzdCAgICAgICBhcmdzOworICAgbHRjX2FzbjFfbGlzdCAqbGlzdDsKKworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgLyogZ2V0IHNpemUgb2Ygb3V0cHV0IHRoYXQgd2lsbCBiZSByZXF1aXJlZCAqLworICAgdmFfc3RhcnQoYXJncywgb3V0bGVuKTsKKyAgIHggPSAwOworICAgZm9yICg7OykgeworICAgICAgIHR5cGUgPSB2YV9hcmcoYXJncywgaW50KTsKKyAgICAgICBzaXplID0gdmFfYXJnKGFyZ3MsIHVuc2lnbmVkIGxvbmcpOworICAgICAgIGRhdGEgPSB2YV9hcmcoYXJncywgdm9pZCopOworCisgICAgICAgaWYgKHR5cGUgPT0gTFRDX0FTTjFfRU9MKSB7IAorICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKworICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICBjYXNlIExUQ19BU04xX0JPT0xFQU46CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfSU5URUdFUjoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TSE9SVF9JTlRFR0VSOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX0JJVF9TVFJJTkc6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0NURVRfU1RSSU5HOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX05VTEw6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVI6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfSUE1X1NUUklORzoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1VURjhfU1RSSU5HOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1VUQ1RJTUU6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VRVUVOQ0U6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFVE9GOgorICAgICAgICAgICAgICAgICsreDsgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgCisgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICB2YV9lbmQoYXJncyk7CisgICAgICAgICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgICAgfQorICAgfQorICAgdmFfZW5kKGFyZ3MpOworCisgICAvKiBhbGxvY2F0ZSBzdHJ1Y3R1cmUgZm9yIHggZWxlbWVudHMgKi8KKyAgIGlmICh4ID09IDApIHsKKyAgICAgIHJldHVybiBDUllQVF9OT1A7CisgICB9CisKKyAgIGxpc3QgPSBYQ0FMTE9DKHNpemVvZigqbGlzdCksIHgpOworICAgaWYgKGxpc3QgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogZmlsbCBpbiB0aGUgc3RydWN0dXJlICovCisgICB2YV9zdGFydChhcmdzLCBvdXRsZW4pOworICAgeCA9IDA7CisgICBmb3IgKDs7KSB7CisgICAgICAgdHlwZSA9IHZhX2FyZyhhcmdzLCBpbnQpOworICAgICAgIHNpemUgPSB2YV9hcmcoYXJncywgdW5zaWduZWQgbG9uZyk7CisgICAgICAgZGF0YSA9IHZhX2FyZyhhcmdzLCB2b2lkKik7CisKKyAgICAgICBpZiAodHlwZSA9PSBMVENfQVNOMV9FT0wpIHsgCisgICAgICAgICAgYnJlYWs7CisgICAgICAgfQorCisgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfQk9PTEVBTjoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9JTlRFR0VSOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1NIT1JUX0lOVEVHRVI6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfQklUX1NUUklORzoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9PQ1RFVF9TVFJJTkc6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfTlVMTDoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUjoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9JQTVfU1RSSU5HOgorICAgICAgICAgICBjYXNlIExUQ19BU04xX1BSSU5UQUJMRV9TVFJJTkc6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfVVRGOF9TVFJJTkc6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfVVRDVElNRToKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVFVRU5DRToKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVQ6CisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUT0Y6CisgICAgICAgICAgICAgICAgbGlzdFt4XS50eXBlICAgPSB0eXBlOworICAgICAgICAgICAgICAgIGxpc3RbeF0uc2l6ZSAgID0gc2l6ZTsKKyAgICAgICAgICAgICAgICBsaXN0W3grK10uZGF0YSA9IGRhdGE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAKKyAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgIHZhX2VuZChhcmdzKTsKKyAgICAgICAgICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfQVJHOworICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgIH0KKyAgIH0KKyAgIHZhX2VuZChhcmdzKTsKKworICAgZXJyID0gZGVyX2VuY29kZV9zZXF1ZW5jZShsaXN0LCB4LCBvdXQsIG91dGxlbik7ICAgCitMQkxfRVJSOgorICAgWEZSRUUobGlzdCk7CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjExICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI2IDAyOjI1OjE4ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfbGVuZ3RoX3NlcXVlbmNlLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2xlbmd0aF9zZXF1ZW5jZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZjRhMmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX2xlbmd0aF9zZXF1ZW5jZS5jCkBAIC0wLDAgKzEsMTY5IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfbGVuZ3RoX3NlcXVlbmNlLmMKKyAgQVNOLjEgREVSLCBsZW5ndGggYSBTRVFVRU5DRSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTFRDX0RFUgorCisvKioKKyAgIEdldCB0aGUgbGVuZ3RoIG9mIGEgREVSIHNlcXVlbmNlIAorICAgQHBhcmFtIGxpc3QgICBUaGUgc2VxdWVuY2VzIG9mIGl0ZW1zIGluIHRoZSBTRVFVRU5DRQorICAgQHBhcmFtIGlubGVuICBUaGUgbnVtYmVyIG9mIGl0ZW1zCisgICBAcGFyYW0gb3V0bGVuIFtvdXRdIFRoZSBsZW5ndGggcmVxdWlyZWQgaW4gb2N0ZXRzIHRvIHN0b3JlIGl0IAorICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGRlcl9sZW5ndGhfc2VxdWVuY2UobHRjX2FzbjFfbGlzdCAqbGlzdCwgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbikgCit7CisgICBpbnQgICAgICAgICAgIGVyciwgdHlwZTsKKyAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgeCwgeSwgeiwgaTsKKyAgIHZvaWQgICAgICAgICAgKmRhdGE7CisKKyAgIExUQ19BUkdDSEsobGlzdCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICAhPSBOVUxMKTsKKworICAgLyogZ2V0IHNpemUgb2Ygb3V0cHV0IHRoYXQgd2lsbCBiZSByZXF1aXJlZCAqLworICAgeSA9IDA7CisgICBmb3IgKGkgPSAwOyBpIDwgaW5sZW47IGkrKykgeworICAgICAgIHR5cGUgPSBsaXN0W2ldLnR5cGU7CisgICAgICAgc2l6ZSA9IGxpc3RbaV0uc2l6ZTsKKyAgICAgICBkYXRhID0gbGlzdFtpXS5kYXRhOworCisgICAgICAgaWYgKHR5cGUgPT0gTFRDX0FTTjFfRU9MKSB7IAorICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKworICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAgICBjYXNlIExUQ19BU04xX0JPT0xFQU46CisgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9ib29sZWFuKCZ4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIHkgKz0geDsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfSU5URUdFUjoKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9pbnRlZ2VyKGRhdGEsICZ4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHkgKz0geDsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0hPUlRfSU5URUdFUjoKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyKCooKHVuc2lnbmVkIGxvbmcgKilkYXRhKSwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9CSVRfU1RSSU5HOgorICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX2JpdF9zdHJpbmcoc2l6ZSwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9PQ1RFVF9TVFJJTkc6CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nKHNpemUsICZ4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIHkgKz0geDsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfTlVMTDoKKyAgICAgICAgICAgICAgIHkgKz0gMjsKKyAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgIGNhc2UgTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVI6CisgICAgICAgICAgICAgICBpZiAoKGVyciA9IGRlcl9sZW5ndGhfb2JqZWN0X2lkZW50aWZpZXIoZGF0YSwgc2l6ZSwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9JQTVfU1RSSU5HOgorICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX2lhNV9zdHJpbmcoZGF0YSwgc2l6ZSwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HOgorICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcoZGF0YSwgc2l6ZSwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVENUSU1FOgorICAgICAgICAgICAgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX3V0Y3RpbWUoZGF0YSwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgeSArPSB4OworICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9VVEY4X1NUUklORzoKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF91dGY4X3N0cmluZyhkYXRhLCBzaXplLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB5ICs9IHg7CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICBjYXNlIExUQ19BU04xX1NFVDoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVRPRjoKKyAgICAgICAgICAgY2FzZSBMVENfQVNOMV9TRVFVRU5DRToKKyAgICAgICAgICAgICAgIGlmICgoZXJyID0gZGVyX2xlbmd0aF9zZXF1ZW5jZShkYXRhLCBzaXplLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICB5ICs9IHg7CisgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgIAorICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgICAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgfQorICAgfQorCisgICAvKiBjYWxjIGhlYWRlciBzaXplICovCisgICB6ID0geTsKKyAgIGlmICh5IDwgMTI4KSB7CisgICAgICB5ICs9IDI7CisgICB9IGVsc2UgaWYgKHkgPCAyNTYpIHsKKyAgICAgIC8qIDB4MzAgMHg4MSBMTCAqLworICAgICAgeSArPSAzOworICAgfSBlbHNlIGlmICh5IDwgNjU1MzZVTCkgeworICAgICAgLyogMHgzMCAweDgyIExMIExMICovCisgICAgICB5ICs9IDQ7CisgICB9IGVsc2UgaWYgKHkgPCAxNjc3NzIxNlVMKSB7CisgICAgICAvKiAweDMwIDB4ODMgTEwgTEwgTEwgKi8KKyAgICAgIHkgKz0gNTsKKyAgIH0gZWxzZSB7CisgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX0FSRzsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogc3RvcmUgc2l6ZSAqLworICAgKm91dGxlbiA9IHk7CisgICBlcnIgICAgID0gQ1JZUFRfT0s7CisKK0xCTF9FUlI6CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NlcXVlbmNlL2Rlcl9sZW5ndGhfc2VxdWVuY2UuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMyAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yNiAwMjoyNToxOCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX3NlcXVlbmNlX2ZyZWUuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfc2VxdWVuY2VfZnJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjODI2ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2VxdWVuY2UvZGVyX3NlcXVlbmNlX2ZyZWUuYwpAQCAtMCwwICsxLDY1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfc2VxdWVuY2VfZnJlZS5jCisgIEFTTi4xIERFUiwgZnJlZSdzIGEgc3RydWN0dXJlIGFsbG9jYXRlZCBieSBkZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpKCksIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKworLyoqCisgIEZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSBkZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpKCkKKyAgQHBhcmFtIGluICAgICBUaGUgbGlzdCB0byBmcmVlCisqLyAgCit2b2lkIGRlcl9zZXF1ZW5jZV9mcmVlKGx0Y19hc24xX2xpc3QgKmluKQoreworICAgbHRjX2FzbjFfbGlzdCAqbDsKKyAgIAorICAgLyogd2FsayB0byB0aGUgc3RhcnQgb2YgdGhlIGNoYWluICovCisgICB3aGlsZSAoaW4tPnByZXYgIT0gTlVMTCB8fCBpbi0+cGFyZW50ICE9IE5VTEwpIHsKKyAgICAgIGlmIChpbi0+cGFyZW50ICE9IE5VTEwpIHsKKyAgICAgICAgICBpbiA9IGluLT5wYXJlbnQ7CisgICAgICB9IGVsc2UgeworICAgICAgICAgIGluID0gaW4tPnByZXY7CisgICAgICB9CisgICB9CisgICAKKyAgIC8qIG5vdyB3YWxrIHRoZSBsaXN0IGFuZCBmcmVlIHN0dWZmICovCisgICB3aGlsZSAoaW4gIT0gTlVMTCkgeworICAgICAgLyogaXMgdGhlcmUgYSBjaGlsZD8gKi8KKyAgICAgIGlmIChpbi0+Y2hpbGQpIHsKKyAgICAgICAgIC8qIGRpc2Nvbm5lY3QgKi8KKyAgICAgICAgIGluLT5jaGlsZC0+cGFyZW50ID0gTlVMTDsKKyAgICAgICAgIGRlcl9zZXF1ZW5jZV9mcmVlKGluLT5jaGlsZCk7CisgICAgICB9CisgICAgICAKKyAgICAgIHN3aXRjaCAoaW4tPnR5cGUpIHsgCisgICAgICAgICBjYXNlIExUQ19BU04xX1NFVDoKKyAgICAgICAgIGNhc2UgTFRDX0FTTjFfU0VUT0Y6CisgICAgICAgICBjYXNlIExUQ19BU04xX1NFUVVFTkNFOiBicmVhazsKKyAgICAgICAgIGNhc2UgTFRDX0FTTjFfSU5URUdFUiA6IGlmIChpbi0+ZGF0YSAhPSBOVUxMKSB7IG1wX2NsZWFyKGluLT5kYXRhKTsgfSBicmVhazsKKyAgICAgICAgIGRlZmF1bHQgICAgICAgICAgICAgICA6IGlmIChpbi0+ZGF0YSAhPSBOVUxMKSB7IFhGUkVFKGluLT5kYXRhKTsgICAgfQorICAgICAgfQorICAgICAgCisgICAgICAvKiBtb3ZlIHRvIG5leHQgYW5kIGZyZWUgY3VycmVudCAqLworICAgICAgbCA9IGluLT5uZXh0OworICAgICAgZnJlZShpbik7CisgICAgICBpbiA9IGw7CisgICB9ICAgICAKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXF1ZW5jZS9kZXJfc2VxdWVuY2VfZnJlZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NldC9kZXJfZW5jb2RlX3NldC5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NldC9kZXJfZW5jb2RlX3NldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwOGQyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2V0L2Rlcl9lbmNvZGVfc2V0LmMKQEAgLTAsMCArMSwxMDMgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZW5jb2RlX3NldC5jCisgIEFTTi4xIERFUiwgRW5jb2RlIGEgU0VULCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisKKy8qIExUQyBkZWZpbmUgdG8gQVNOLjEgVEFHICovCitzdGF0aWMgaW50IGx0Y190b19hc24xKGludCB2KQoreworICAgc3dpdGNoICh2KSB7CisgICAgICBjYXNlIExUQ19BU04xX0JPT0xFQU46ICAgICAgICAgICAgICAgICByZXR1cm4gMHgwMTsKKyAgICAgIGNhc2UgTFRDX0FTTjFfSU5URUdFUjoKKyAgICAgIGNhc2UgTFRDX0FTTjFfU0hPUlRfSU5URUdFUjogICAgICAgICAgIHJldHVybiAweDAyOworICAgICAgY2FzZSBMVENfQVNOMV9CSVRfU1RSSU5HOiAgICAgICAgICAgICAgcmV0dXJuIDB4MDM7CisgICAgICBjYXNlIExUQ19BU04xX09DVEVUX1NUUklORzogICAgICAgICAgICByZXR1cm4gMHgwNDsKKyAgICAgIGNhc2UgTFRDX0FTTjFfTlVMTDogICAgICAgICAgICAgICAgICAgIHJldHVybiAweDA1OworICAgICAgY2FzZSBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUjogICAgICAgcmV0dXJuIDB4MDY7CisgICAgICBjYXNlIExUQ19BU04xX1VURjhfU1RSSU5HOiAgICAgICAgICAgICByZXR1cm4gMHgwQzsKKyAgICAgIGNhc2UgTFRDX0FTTjFfUFJJTlRBQkxFX1NUUklORzogICAgICAgIHJldHVybiAweDEzOworICAgICAgY2FzZSBMVENfQVNOMV9JQTVfU1RSSU5HOiAgICAgICAgICAgICAgcmV0dXJuIDB4MTY7CisgICAgICBjYXNlIExUQ19BU04xX1VUQ1RJTUU6ICAgICAgICAgICAgICAgICByZXR1cm4gMHgxNzsKKyAgICAgIGNhc2UgTFRDX0FTTjFfU0VRVUVOQ0U6ICAgICAgICAgICAgICAgIHJldHVybiAweDMwOworICAgICAgY2FzZSBMVENfQVNOMV9TRVQ6CisgICAgICBjYXNlIExUQ19BU04xX1NFVE9GOiAgICAgICAgICAgICAgICAgICByZXR1cm4gMHgzMTsKKyAgICAgIGRlZmF1bHQ6IHJldHVybiAtMTsKKyAgIH0KK30gICAgICAgICAKKyAgICAgIAorCitzdGF0aWMgaW50IHFzb3J0X2hlbHBlcihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworICAgbHRjX2FzbjFfbGlzdCAqQSA9IChsdGNfYXNuMV9saXN0ICopYSwgKkIgPSAobHRjX2FzbjFfbGlzdCAqKWI7CisgICBpbnQgICAgICAgICAgICByOworICAgCisgICByID0gbHRjX3RvX2FzbjEoQS0+dHlwZSkgLSBsdGNfdG9fYXNuMShCLT50eXBlKTsKKyAgIAorICAgLyogZm9yIFFTT1JUIHRoZSBvcmRlciBpcyBVTkRFRklORUQgaWYgdGhleSBhcmUgImVxdWFsIiB3aGljaCBtZWFucyBpdCBpcyBOT1QgREVURVJNSU5JU1RJQy4gIFNvIHdlIGZvcmNlIGl0IHRvIGJlIDotKSAqLworICAgaWYgKHIgPT0gMCkgeworICAgICAgLyogdGhlaXIgb3JkZXIgaW4gdGhlIG9yaWdpbmFsIGxpc3Qgbm93IGRldGVybWluZXMgdGhlIHBvc2l0aW9uICovCisgICAgICByZXR1cm4gQS0+dXNlZCAtIEItPnVzZWQ7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHI7CisgICB9Cit9ICAgCisKKy8qCisgICBFbmNvZGUgYSBTRVQgdHlwZQorICAgQHBhcmFtIGxpc3QgICAgICBUaGUgbGlzdCBvZiBpdGVtcyB0byBlbmNvZGUKKyAgIEBwYXJhbSBpbmxlbiAgICAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgbGlzdAorICAgQHBhcmFtIG91dCAgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gCisgICBAcGFyYW0gb3V0bGVuICAgIFtpbi9vdXRdIFRoZSBzaXplIG9mIHRoZSBvdXRwdXQKKyAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8KK2ludCBkZXJfZW5jb2RlX3NldChsdGNfYXNuMV9saXN0ICpsaXN0LCB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIGx0Y19hc24xX2xpc3QgICpjb3B5OworICAgdW5zaWduZWQgbG9uZyAgIHg7CisgICBpbnQgICAgICAgICAgICAgZXJyOworICAgCisgICAvKiBtYWtlIGNvcHkgb2YgbGlzdCAqLworICAgY29weSA9IFhDQUxMT0MoaW5sZW4sIHNpemVvZigqY29weSkpOworICAgaWYgKGNvcHkgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0gICAgICAKKyAgIAorICAgLyogZmlsbCBpbiB1c2VkIG1lbWJlciB3aXRoIGluZGV4IHNvIHdlIGNhbiBmdWxseSBzb3J0IGl0ICovCisgICBmb3IgKHggPSAwOyB4IDwgaW5sZW47IHgrKykgeworICAgICAgIGNvcHlbeF0gICAgICA9IGxpc3RbeF07CisgICAgICAgY29weVt4XS51c2VkID0geDsKKyAgIH0gICAgICAgCisgICAKKyAgIC8qIHNvcnQgaXQgYnkgdGhlICJ0eXBlIiBmaWVsZCAqLworICAgWFFTT1JUKGNvcHksIGlubGVuLCBzaXplb2YoKmNvcHkpLCAmcXNvcnRfaGVscGVyKTsgICAKKyAgIAorICAgLyogY2FsbCBkZXJfZW5jb2RlX3NlcXVlbmNlX2V4KCkgKi8KKyAgIGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2VfZXgoY29weSwgaW5sZW4sIG91dCwgb3V0bGVuLCBMVENfQVNOMV9TRVQpOyAgIAorICAgCisgICAvKiBmcmVlIGxpc3QgKi8KKyAgIFhGUkVFKGNvcHkpOworICAgCisgICByZXR1cm4gZXJyOworfSAgICAgICAgICAgICAgICAgICAKKworCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NldC9kZXJfZW5jb2RlX3NldC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjExICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI2IDAyOjI3OjM3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXQvZGVyX2VuY29kZV9zZXRvZi5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3NldC9kZXJfZW5jb2RlX3NldG9mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMxMmViNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zZXQvZGVyX2VuY29kZV9zZXRvZi5jCkBAIC0wLDAgKzEsMTYyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZW5jb2RlX3NldG9mLmMKKyAgQVNOLjEgREVSLCBFbmNvZGUgU0VUIE9GLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisKK3N0cnVjdCBlZGdlIHsKKyAgIHVuc2lnbmVkIGNoYXIgKnN0YXJ0OworICAgdW5zaWduZWQgbG9uZyAgc2l6ZTsKK307CisKK3N0YXRpYyBpbnQgcXNvcnRfaGVscGVyKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisgICBzdHJ1Y3QgZWRnZSAgICpBID0gKHN0cnVjdCBlZGdlICopYSwgKkIgPSAoc3RydWN0IGVkZ2UgKiliOworICAgaW50ICAgICAgICAgICAgcjsKKyAgIHVuc2lnbmVkIGxvbmcgIHg7CisgICAKKyAgIC8qIGNvbXBhcmUgbWluIGxlbmd0aCAqLworICAgciA9IFhNRU1DTVAoQS0+c3RhcnQsIEItPnN0YXJ0LCBNSU4oQS0+c2l6ZSwgQi0+c2l6ZSkpOworICAgCisgICBpZiAociA9PSAwICYmIEEtPnNpemUgIT0gQi0+c2l6ZSkgeworICAgICAgaWYgKEEtPnNpemUgPiBCLT5zaXplKSB7CisgICAgICAgICBmb3IgKHggPSBCLT5zaXplOyB4IDwgQS0+c2l6ZTsgeCsrKSB7CisgICAgICAgICAgICBpZiAoQS0+c3RhcnRbeF0pIHsKKyAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgIGZvciAoeCA9IEEtPnNpemU7IHggPCBCLT5zaXplOyB4KyspIHsKKyAgICAgICAgICAgIGlmIChCLT5zdGFydFt4XSkgeworICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgfSAgICAgICAgIAorICAgfQorICAgCisgICByZXR1cm4gcjsgICAgICAKK30KKworLyoqCisgICBFbmNvZGUgYSBTRVRPRiBzdHVjdHVyZQorICAgQHBhcmFtIGxpc3QgICAgICBUaGUgbGlzdCBvZiBpdGVtcyB0byBlbmNvZGUKKyAgIEBwYXJhbSBpbmxlbiAgICAgVGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgbGlzdAorICAgQHBhcmFtIG91dCAgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gCisgICBAcGFyYW0gb3V0bGVuICAgIFtpbi9vdXRdIFRoZSBzaXplIG9mIHRoZSBvdXRwdXQKKyAgIEByZXR1cm4gQ1JZUFRfT0sgb24gc3VjY2VzcworKi8gICAKK2ludCBkZXJfZW5jb2RlX3NldG9mKGx0Y19hc24xX2xpc3QgKmxpc3QsIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisgICB1bnNpZ25lZCBsb25nICB4LCB5LCB6LCBoZHJsZW47CisgICBpbnQgICAgICAgICAgICBlcnI7CisgICBzdHJ1Y3QgZWRnZSAgICplZGdlczsKKyAgIHVuc2lnbmVkIGNoYXIgKnB0ciwgKmJ1ZjsKKyAgIAorICAgLyogY2hlY2sgdGhhdCB0aGV5J3JlIGFsbCB0aGUgc2FtZSB0eXBlICovCisgICBmb3IgKHggPSAxOyB4IDwgaW5sZW47IHgrKykgeworICAgICAgaWYgKGxpc3RbeF0udHlwZSAhPSBsaXN0W3gtMV0udHlwZSkgeworICAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgICAgfQorICAgfQorCisgICAvKiBhbGxvYyBidWZmZXIgdG8gc3RvcmUgY29weSBvZiBvdXRwdXQgKi8KKyAgIGJ1ZiA9IFhDQUxMT0MoMSwgKm91dGxlbik7CisgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9ICAgICAgCisgICAgICAgICAgICAgICAgICAKKyAgIC8qIGVuY29kZSBsaXN0ICovCisgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2VfZXgobGlzdCwgaW5sZW4sIGJ1Ziwgb3V0bGVuLCBMVENfQVNOMV9TRVRPRikpICE9IENSWVBUX09LKSB7CisgICAgICAgWEZSRUUoYnVmKTsKKyAgICAgICByZXR1cm4gZXJyOworICAgfQorICAgCisgICAvKiBhbGxvY2F0ZSBlZGdlcyAqLworICAgZWRnZXMgPSBYQ0FMTE9DKGlubGVuLCBzaXplb2YoKmVkZ2VzKSk7CisgICBpZiAoZWRnZXMgPT0gTlVMTCkgeworICAgICAgWEZSRUUoYnVmKTsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9ICAgICAgCisgICAKKyAgIC8qIHNraXAgaGVhZGVyICovCisgICAgICBwdHIgPSBidWYgKyAxOworCisgICAgICAvKiBub3cgc2tpcCBsZW5ndGggZGF0YSAqLworICAgICAgeCA9ICpwdHIrKzsKKyAgICAgIGlmICh4ID49IDB4ODApIHsKKyAgICAgICAgIHB0ciArPSAoeCAmIDB4N0YpOworICAgICAgfQorICAgICAgCisgICAgICAvKiBnZXQgdGhlIHNpemUgb2YgdGhlIHN0YXRpYyBoZWFkZXIgKi8KKyAgICAgIGhkcmxlbiA9ICgodW5zaWduZWQgbG9uZylwdHIpIC0gKCh1bnNpZ25lZCBsb25nKWJ1Zik7CisgICAgICAKKyAgICAgIAorICAgLyogc2NhbiBmb3IgZWRnZXMgKi8KKyAgIHggPSAwOworICAgd2hpbGUgKHB0ciA8IChidWYgKyAqb3V0bGVuKSkgeworICAgICAgLyogc3RvcmUgc3RhcnQgKi8KKyAgICAgIGVkZ2VzW3hdLnN0YXJ0ID0gcHRyOworICAgICAgCisgICAgICAvKiBza2lwIHR5cGUgKi8KKyAgICAgIHogPSAxOworICAgICAgCisgICAgICAvKiBwYXJzZSBsZW5ndGggKi8KKyAgICAgIHkgPSBwdHJbeisrXTsKKyAgICAgIGlmICh5IDwgMTI4KSB7CisgICAgICAgICBlZGdlc1t4XS5zaXplID0geTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICB5ICY9IDB4N0Y7CisgICAgICAgICBlZGdlc1t4XS5zaXplID0gMDsKKyAgICAgICAgIHdoaWxlICh5LS0pIHsKKyAgICAgICAgICAgIGVkZ2VzW3hdLnNpemUgPSAoZWRnZXNbeF0uc2l6ZSA8PCA4KSB8ICgodW5zaWduZWQgbG9uZylwdHJbeisrXSk7CisgICAgICAgICB9CisgICAgICB9CisgICAgICAKKyAgICAgIC8qIHNraXAgY29udGVudCAqLworICAgICAgZWRnZXNbeF0uc2l6ZSArPSB6OworICAgICAgcHRyICAgICAgICAgICArPSBlZGdlc1t4XS5zaXplOworICAgICAgKyt4OworICAgfSAgICAgIAorICAgICAgCisgICAvKiBzb3J0IGJhc2VkIG9uIGNvbnRlbnRzICh1c2luZyBlZGdlcykgKi8KKyAgIFhRU09SVChlZGdlcywgaW5sZW4sIHNpemVvZigqZWRnZXMpLCAmcXNvcnRfaGVscGVyKTsKKyAgIAorICAgLyogY29weSBzdGF0aWMgaGVhZGVyICovCisgICBYTUVNQ1BZKG91dCwgYnVmLCBoZHJsZW4pOworICAgCisgICAvKiBjb3B5K3NvcnQgdXNpbmcgZWRnZXMraW5kZWNpZXMgdG8gb3V0cHV0IGZyb20gYnVmZmVyICovCisgICBmb3IgKHkgPSBoZHJsZW4sIHggPSAwOyB4IDwgaW5sZW47IHgrKykgeworICAgICAgWE1FTUNQWShvdXQreSwgZWRnZXNbeF0uc3RhcnQsIGVkZ2VzW3hdLnNpemUpOworICAgICAgeSArPSBlZGdlc1t4XS5zaXplOworICAgfSAgICAgIAorICAgCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGJ1ZiwgKm91dGxlbik7CisjZW5kaWYgICAgICAKKyAgIAorICAgLyogZnJlZSBidWZmZXJzICovCisgICBYRlJFRShlZGdlcyk7CisgICBYRlJFRShidWYpOworICAgCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2V0L2Rlcl9lbmNvZGVfc2V0b2YuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfZGVjb2RlX3Nob3J0X2ludGVnZXIuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9kZWNvZGVfc2hvcnRfaW50ZWdlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MDdlOWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfZGVjb2RlX3Nob3J0X2ludGVnZXIuYwpAQCAtMCwwICsxLDY4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZGVjb2RlX3Nob3J0X2ludGVnZXIuYworICBBU04uMSBERVIsIGRlY29kZSBhbiBpbnRlZ2VyLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19ERVIKKworLyoqCisgIFJlYWQgYSBzaG9ydCBpbnRlZ2VyCisgIEBwYXJhbSBpbiAgICAgICBUaGUgREVSIGVuY29kZWQgZGF0YQorICBAcGFyYW0gaW5sZW4gICAgU2l6ZSBvZiBkYXRhCisgIEBwYXJhbSBudW0gICAgICBbb3V0XSBUaGUgaW50ZWdlciB0byBkZWNvZGUKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlcl9kZWNvZGVfc2hvcnRfaW50ZWdlcihjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgdW5zaWduZWQgbG9uZyAqbnVtKQoreworICAgdW5zaWduZWQgbG9uZyBsZW4sIHgsIHk7CisKKyAgIExUQ19BUkdDSEsobnVtICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7CisKKyAgIC8qIGNoZWNrIGxlbmd0aCAqLworICAgaWYgKGlubGVuIDwgMikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiBjaGVjayBoZWFkZXIgKi8KKyAgIHggPSAwOworICAgaWYgKChpblt4KytdICYgMHgxRikgIT0gMHgwMikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiBnZXQgdGhlIHBhY2tldCBsZW4gKi8KKyAgIGxlbiA9IGluW3grK107CisKKyAgIGlmICh4ICsgbGVuID4gaW5sZW4pIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgIH0KKworICAgLyogcmVhZCBudW1iZXIgKi8KKyAgIHkgPSAwOworICAgd2hpbGUgKGxlbi0tKSB7CisgICAgICB5ID0gKHk8PDgpIHwgKHVuc2lnbmVkIGxvbmcpaW5beCsrXTsKKyAgIH0KKyAgICpudW0gPSB5OworCisgICByZXR1cm4gQ1JZUFRfT0s7CisKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9kZWNvZGVfc2hvcnRfaW50ZWdlci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2VuY29kZV9zaG9ydF9pbnRlZ2VyLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfZW5jb2RlX3Nob3J0X2ludGVnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWRhMmZhCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2VuY29kZV9zaG9ydF9pbnRlZ2VyLmMKQEAgLTAsMCArMSw5NyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2VuY29kZV9zaG9ydF9pbnRlZ2VyLmMKKyAgQVNOLjEgREVSLCBlbmNvZGUgYW4gaW50ZWdlciwgVG9tIFN0IERlbmlzCisqLworCisKKyNpZmRlZiBMVENfREVSCisKKy8qKgorICBTdG9yZSBhIHNob3J0IGludGVnZXIgaW4gdGhlIHJhbmdlICgwLDJeMzItMSkKKyAgQHBhcmFtIG51bSAgICAgIFRoZSBpbnRlZ2VyIHRvIGVuY29kZQorICBAcGFyYW0gb3V0ICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgREVSIGVuY29kZWQgaW50ZWdlcnMKKyAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIERFUiBlbmNvZGVkIGludGVnZXJzCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfZW5jb2RlX3Nob3J0X2ludGVnZXIodW5zaWduZWQgbG9uZyBudW0sIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreyAgCisgICB1bnNpZ25lZCBsb25nIGxlbiwgeCwgeSwgejsKKyAgIGludCAgICAgICAgICAgZXJyOworICAgCisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworCisgICAvKiBmb3JjZSB0byAzMiBiaXRzICovCisgICBudW0gJj0gMHhGRkZGRkZGRlVMOworCisgICAvKiBmaW5kIG91dCBob3cgYmlnIHRoaXMgd2lsbCBiZSAqLworICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX3Nob3J0X2ludGVnZXIobnVtLCAmbGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGlmICgqb3V0bGVuIDwgbGVuKSB7CisgICAgICAqb3V0bGVuID0gbGVuOworICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgIH0KKworICAgLyogZ2V0IGxlbiBvZiBvdXRwdXQgKi8KKyAgIHogPSAwOworICAgeSA9IG51bTsKKyAgIHdoaWxlICh5KSB7CisgICAgICsrejsKKyAgICAgeSA+Pj0gODsKKyAgIH0KKworICAgLyogaGFuZGxlIHplcm8gKi8KKyAgIGlmICh6ID09IDApIHsKKyAgICAgIHogPSAxOworICAgfQorCisgICAvKiBzZWUgaWYgbXNiIGlzIHNldCAqLworICAgeiArPSAobnVtJigxVUw8PCgoejw8MykgLSAxKSkpID8gMSA6IDA7CisKKyAgIC8qIGFkanVzdCB0aGUgbnVtYmVyIHNvIHRoZSBtc0IgaXMgbm9uLXplcm8gKi8KKyAgIGZvciAoeCA9IDA7ICh6IDw9IDQpICYmICh4IDwgKDQgLSB6KSk7IHgrKykgeworICAgICAgbnVtIDw8PSA4OworICAgfQorCisgICAvKiBzdG9yZSBoZWFkZXIgKi8KKyAgIHggPSAwOworICAgb3V0W3grK10gPSAweDAyOworICAgb3V0W3grK10gPSAodW5zaWduZWQgY2hhcil6OworCisgICAvKiBpZiAzMXN0IGJpdCBpcyBzZXQgb3V0cHV0IGEgbGVhZGluZyB6ZXJvIGFuZCBkZWNyZW1lbnQgY291bnQgKi8KKyAgIGlmICh6ID09IDUpIHsKKyAgICAgIG91dFt4KytdID0gMDsKKyAgICAgIC0tejsKKyAgIH0KKworICAgLyogc3RvcmUgdmFsdWVzICovCisgICBmb3IgKHkgPSAwOyB5IDwgejsgeSsrKSB7CisgICAgICBvdXRbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSgobnVtID4+IDI0KSAmIDB4RkYpOworICAgICAgbnVtICAgIDw8PSA4OworICAgfQorCisgICAvKiB3ZSBnb29kICovCisgICAqb3V0bGVuID0geDsKKyAKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci9zaG9ydF9pbnRlZ2VyL2Rlcl9lbmNvZGVfc2hvcnRfaW50ZWdlci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMjE6MzQ6MDMgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfbGVuZ3RoX3Nob3J0X2ludGVnZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzNlMjk0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3Nob3J0X2ludGVnZXIvZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyLmMKQEAgLTAsMCArMSw3MCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZGVyX2xlbmd0aF9zaG9ydF9pbnRlZ2VyLmMKKyAgQVNOLjEgREVSLCBnZXQgbGVuZ3RoIG9mIGVuY29kaW5nLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19ERVIKKy8qKgorICBHZXRzIGxlbmd0aCBvZiBERVIgZW5jb2Rpbmcgb2YgbnVtIAorICBAcGFyYW0gbnVtICAgIFRoZSBpbnRlZ2VyIHRvIGdldCB0aGUgc2l6ZSBvZiAKKyAgQHBhcmFtIG91dGxlbiBbb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RpbmcgZm9yIHRoZSBnaXZlbiBpbnRlZ2VyCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfbGVuZ3RoX3Nob3J0X2ludGVnZXIodW5zaWduZWQgbG9uZyBudW0sIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeiwgeSwgbGVuOworCisgICBMVENfQVJHQ0hLKG91dGxlbiAgIT0gTlVMTCk7CisKKyAgIC8qIGZvcmNlIHRvIDMyIGJpdHMgKi8KKyAgIG51bSAmPSAweEZGRkZGRkZGVUw7CisKKyAgIC8qIGdldCB0aGUgbnVtYmVyIG9mIGJ5dGVzICovCisgICB6ID0gMDsKKyAgIHkgPSBudW07CisgICB3aGlsZSAoeSkgeworICAgICArK3o7CisgICAgIHkgPj49IDg7CisgICB9CisgICAKKyAgIC8qIGhhbmRsZSB6ZXJvICovCisgICBpZiAoeiA9PSAwKSB7CisgICAgICB6ID0gMTsKKyAgIH0KKworICAgLyogd2UgbmVlZCBhIDB4MDIgdG8gaW5kaWNhdGUgaXQncyBJTlRFR0VSICovCisgICBsZW4gPSAxOworCisgICAvKiBsZW5ndGggYnl0ZSAqLworICAgKytsZW47CisKKyAgIC8qIGJ5dGVzIGluIHZhbHVlICovCisgICBsZW4gKz0gejsKKworICAgLyogc2VlIGlmIG1zYiBpcyBzZXQgKi8KKyAgIGxlbiArPSAobnVtJigxVUw8PCgoejw8MykgLSAxKSkpID8gMSA6IDA7CisKKyAgIC8qIHJldHVybiBsZW5ndGggKi8KKyAgICpvdXRsZW4gPSBsZW47IAorICAgCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvc2hvcnRfaW50ZWdlci9kZXJfbGVuZ3RoX3Nob3J0X2ludGVnZXIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9kZWNvZGVfdXRjdGltZS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2RlY29kZV91dGN0aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExZjVmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9kZWNvZGVfdXRjdGltZS5jCkBAIC0wLDAgKzEsMTI3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZGVjb2RlX3V0Y3RpbWUuYworICBBU04uMSBERVIsIGRlY29kZSBhICBVVENUSU1FLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisKK3N0YXRpYyBpbnQgY2hhcl90b19pbnQodW5zaWduZWQgY2hhciB4KQoreworICAgc3dpdGNoICh4KSAgeworICAgICAgY2FzZSAnMCc6IHJldHVybiAwOworICAgICAgY2FzZSAnMSc6IHJldHVybiAxOworICAgICAgY2FzZSAnMic6IHJldHVybiAyOworICAgICAgY2FzZSAnMyc6IHJldHVybiAzOworICAgICAgY2FzZSAnNCc6IHJldHVybiA0OworICAgICAgY2FzZSAnNSc6IHJldHVybiA1OworICAgICAgY2FzZSAnNic6IHJldHVybiA2OworICAgICAgY2FzZSAnNyc6IHJldHVybiA3OworICAgICAgY2FzZSAnOCc6IHJldHVybiA4OworICAgICAgY2FzZSAnOSc6IHJldHVybiA5OworICAgfQorICAgcmV0dXJuIDEwMDsKK30KKworI2RlZmluZSBERUNPREVfVih5LCBtYXgpIFwKKyAgIHkgID0gY2hhcl90b19pbnQoYnVmW3hdKSoxMCArIGNoYXJfdG9faW50KGJ1Zlt4KzFdKTsgXAorICAgaWYgKHkgPj0gbWF4KSByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7ICAgICAgICAgICBcCisgICB4ICs9IDI7CisKKy8qKgorICBEZWNvZGVzIGEgVVRDIHRpbWUgc3RydWN0dXJlIGluIERFUiBmb3JtYXQgKHJlYWRzIGFsbCA2IHZhbGlkIGVuY29kaW5nIGZvcm1hdHMpCisgIEBwYXJhbSBpbiAgICAgSW5wdXQgYnVmZmVyCisgIEBwYXJhbSBpbmxlbiAgTGVuZ3RoIG9mIGlucHV0IGJ1ZmZlciBpbiBvY3RldHMKKyAgQHBhcmFtIG91dCAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiBVVEMgdGltZSBzdHJ1Y3R1cmUKKyAgQHJldHVybiBDUllQVF9PSyAgIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZGVyX2RlY29kZV91dGN0aW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nICppbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHRjX3V0Y3RpbWUgICAqb3V0KQoreworICAgdW5zaWduZWQgY2hhciBidWZbMzJdOworICAgdW5zaWduZWQgbG9uZyB4OworICAgaW50ICAgICAgICAgICB5OworCisgICBMVENfQVJHQ0hLKGluICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhpbmxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgIT0gTlVMTCk7CisKKyAgIC8qIGNoZWNrIGhlYWRlciAqLworICAgaWYgKCppbmxlbiA8IDJVTCB8fCAoaW5bMV0gPj0gc2l6ZW9mKGJ1ZikpIHx8ICgoaW5bMV0gKyAyVUwpID4gKmlubGVuKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiBkZWNvZGUgdGhlIHN0cmluZyAqLworICAgZm9yICh4ID0gMDsgeCA8IGluWzFdOyB4KyspIHsKKyAgICAgICB5ID0gZGVyX2lhNV92YWx1ZV9kZWNvZGUoaW5beCsyXSk7CisgICAgICAgaWYgKHkgPT0gLTEpIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICAgfQorICAgICAgIGJ1Zlt4XSA9IHk7CisgICB9CisgICAqaW5sZW4gPSAyICsgeDsKKworCisgICAvKiBwb3NzaWJsZSBlbmNvZGluZ3MgYXJlIAorWVlNTUREaGhtbVoKK1lZTU1ERGhobW0raGgnbW0nCitZWU1NRERoaG1tLWhoJ21tJworWVlNTUREaGhtbXNzWgorWVlNTUREaGhtbXNzK2hoJ21tJworWVlNTUREaGhtbXNzLWhoJ21tJworCisgICAgU28gbGV0J3MgZG8gYSB0cml2aWFsIGRlY29kZSB1cHRvIFtpbmNsdWRpbmddIG1tIAorICAgKi8KKworICAgIHggPSAwOworICAgIERFQ09ERV9WKG91dC0+WVksIDEwMCk7CisgICAgREVDT0RFX1Yob3V0LT5NTSwgMTMpOworICAgIERFQ09ERV9WKG91dC0+REQsIDMyKTsKKyAgICBERUNPREVfVihvdXQtPmhoLCAyNCk7CisgICAgREVDT0RFX1Yob3V0LT5tbSwgNjApOworCisgICAgLyogY2xlYXIgdGltZXpvbmUgYW5kIHNlY29uZHMgaW5mbyAqLworICAgIG91dC0+b2ZmX2RpciA9IG91dC0+b2ZmX2hoID0gb3V0LT5vZmZfbW0gPSBvdXQtPnNzID0gMDsKKworICAgIC8qIG5vdyBpcyBpdCBaLCArLCAtIG9yIDAtOSAqLworICAgIGlmIChidWZbeF0gPT0gJ1onKSB7CisgICAgICAgcmV0dXJuIENSWVBUX09LOworICAgIH0gZWxzZSBpZiAoYnVmW3hdID09ICcrJyB8fCBidWZbeF0gPT0gJy0nKSB7CisgICAgICAgb3V0LT5vZmZfZGlyID0gKGJ1Zlt4KytdID09ICcrJykgPyAwIDogMTsKKyAgICAgICBERUNPREVfVihvdXQtPm9mZl9oaCwgMjQpOworICAgICAgIERFQ09ERV9WKG91dC0+b2ZmX21tLCA2MCk7CisgICAgICAgcmV0dXJuIENSWVBUX09LOworICAgIH0KKworICAgIC8qIGRlY29kZSBzZWNvbmRzICovCisgICAgREVDT0RFX1Yob3V0LT5zcywgNjApOworCisgICAgLyogbm93IGlzIGl0IFosICssIC0gKi8KKyAgICBpZiAoYnVmW3hdID09ICdaJykgeworICAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgICB9IGVsc2UgaWYgKGJ1Zlt4XSA9PSAnKycgfHwgYnVmW3hdID09ICctJykgeworICAgICAgIG91dC0+b2ZmX2RpciA9IChidWZbeCsrXSA9PSAnKycpID8gMCA6IDE7CisgICAgICAgREVDT0RFX1Yob3V0LT5vZmZfaGgsIDI0KTsKKyAgICAgICBERUNPREVfVihvdXQtPm9mZl9tbSwgNjApOworICAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgICB9IGVsc2UgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICB9Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvdXRjdGltZS9kZXJfZGVjb2RlX3V0Y3RpbWUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9lbmNvZGVfdXRjdGltZS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2VuY29kZV91dGN0aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUyY2NiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9lbmNvZGVfdXRjdGltZS5jCkBAIC0wLDAgKzEsODMgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9lbmNvZGVfdXRjdGltZS5jCisgIEFTTi4xIERFUiwgZW5jb2RlIGEgIFVUQ1RJTUUsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIExUQ19ERVIKKworc3RhdGljIGNvbnN0IGNoYXIgKmJhc2V0ZW4gPSAiMDEyMzQ1Njc4OSI7CisKKyNkZWZpbmUgU1RPUkVfVih5KSBcCisgICAgb3V0W3grK10gPSBkZXJfaWE1X2NoYXJfZW5jb2RlKGJhc2V0ZW5bKHkvMTApICUgMTBdKTsgXAorICAgIG91dFt4KytdID0gZGVyX2lhNV9jaGFyX2VuY29kZShiYXNldGVuW3kgJSAxMF0pOworCisvKioKKyAgRW5jb2RlcyBhIFVUQyB0aW1lIHN0cnVjdHVyZSBpbiBERVIgZm9ybWF0CisgIEBwYXJhbSB1dGN0aW1lICAgICAgVGhlIFVUQyB0aW1lIHN0cnVjdHVyZSB0byBlbmNvZGUKKyAgQHBhcmFtIG91dCAgICAgICAgICBUaGUgZGVzdGluYXRpb24gb2YgdGhlIERFUiBlbmNvZGluZyBvZiB0aGUgVVRDIHRpbWUgc3RydWN0dXJlCisgIEBwYXJhbSBvdXRsZW4gICAgICAgW2luL291dF0gVGhlIGxlbmd0aCBvZiB0aGUgREVSIGVuY29kaW5nCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfZW5jb2RlX3V0Y3RpbWUobHRjX3V0Y3RpbWUgKnV0Y3RpbWUsIAorICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgIHVuc2lnbmVkIGxvbmcgeCwgdG1wbGVuOworICAgIGludCAgICAgICAgICAgZXJyOworIAorICAgIExUQ19BUkdDSEsodXRjdGltZSAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dCAgICAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhvdXRsZW4gICE9IE5VTEwpOworCisgICAgaWYgKChlcnIgPSBkZXJfbGVuZ3RoX3V0Y3RpbWUodXRjdGltZSwgJnRtcGxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgICAgaWYgKHRtcGxlbiA+ICpvdXRsZW4pIHsKKyAgICAgICAgKm91dGxlbiA9IHRtcGxlbjsKKyAgICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgICB9CisgICAgCisgICAgLyogc3RvcmUgaGVhZGVyICovCisgICAgb3V0WzBdID0gMHgxNzsKKworICAgIC8qIHN0b3JlIHZhbHVlcyAqLworICAgIHggPSAyOworICAgIFNUT1JFX1YodXRjdGltZS0+WVkpOworICAgIFNUT1JFX1YodXRjdGltZS0+TU0pOworICAgIFNUT1JFX1YodXRjdGltZS0+REQpOworICAgIFNUT1JFX1YodXRjdGltZS0+aGgpOworICAgIFNUT1JFX1YodXRjdGltZS0+bW0pOworICAgIFNUT1JFX1YodXRjdGltZS0+c3MpOworCisgICAgaWYgKHV0Y3RpbWUtPm9mZl9tbSB8fCB1dGN0aW1lLT5vZmZfaGgpIHsKKyAgICAgICBvdXRbeCsrXSA9IGRlcl9pYTVfY2hhcl9lbmNvZGUodXRjdGltZS0+b2ZmX2RpciA/ICctJyA6ICcrJyk7CisgICAgICAgU1RPUkVfVih1dGN0aW1lLT5vZmZfaGgpOworICAgICAgIFNUT1JFX1YodXRjdGltZS0+b2ZmX21tKTsKKyAgICB9IGVsc2UgeworICAgICAgIG91dFt4KytdID0gZGVyX2lhNV9jaGFyX2VuY29kZSgnWicpOworICAgIH0KKworICAgIC8qIHN0b3JlIGxlbmd0aCAqLworICAgIG91dFsxXSA9ICh1bnNpZ25lZCBjaGFyKSh4IC0gMik7CisgICAKKyAgICAvKiBhbGwgZ29vZCBsZXQncyByZXR1cm4gKi8KKyAgICAqb3V0bGVuID0geDsKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvdXRjdGltZS9kZXJfZW5jb2RlX3V0Y3RpbWUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS45ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIxOjM0OjAzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9sZW5ndGhfdXRjdGltZS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3V0Y3RpbWUvZGVyX2xlbmd0aF91dGN0aW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBmMDlkZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9sZW5ndGhfdXRjdGltZS5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9sZW5ndGhfdXRjdGltZS5jCisgIEFTTi4xIERFUiwgZ2V0IGxlbmd0aCBvZiBVVENUSU1FLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisKKy8qKgorICBHZXRzIGxlbmd0aCBvZiBERVIgZW5jb2Rpbmcgb2YgVVRDVElNRQorICBAcGFyYW0gdXRjdGltZSAgICAgIFRoZSBVVEMgdGltZSBzdHJ1Y3R1cmUgdG8gZ2V0IHRoZSBzaXplIG9mCisgIEBwYXJhbSBvdXRsZW4gW291dF0gVGhlIGxlbmd0aCBvZiB0aGUgREVSIGVuY29kaW5nCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkZXJfbGVuZ3RoX3V0Y3RpbWUobHRjX3V0Y3RpbWUgKnV0Y3RpbWUsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIExUQ19BUkdDSEsob3V0bGVuICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsodXRjdGltZSAhPSBOVUxMKTsKKworICAgaWYgKHV0Y3RpbWUtPm9mZl9oaCA9PSAwICYmIHV0Y3RpbWUtPm9mZl9tbSA9PSAwKSB7CisgICAgICAvKiB3ZSBlbmNvZGUgYXMgWVlNTUREaGhtbXNzWiAqLworICAgICAgKm91dGxlbiA9IDIgKyAxMzsKKyAgIH0gZWxzZSB7CisgICAgICAvKiB3ZSBlbmNvZGUgYXMgWVlNTUREaGhtbXNzeyt8LX1oaCdtbScgKi8KKyAgICAgICpvdXRsZW4gPSAyICsgMTc7CisgICB9CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGN0aW1lL2Rlcl9sZW5ndGhfdXRjdGltZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2RlY29kZV91dGY4X3N0cmluZy5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2RlY29kZV91dGY4X3N0cmluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjU1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfZGVjb2RlX3V0Zjhfc3RyaW5nLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRlcl9kZWNvZGVfdXRmOF9zdHJpbmcuYworICBBU04uMSBERVIsIGVuY29kZSBhIFVURjggU1RSSU5HLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIExUQ19ERVIKKworLyoqCisgIFN0b3JlIGEgVVRGOCBTVFJJTkcKKyAgQHBhcmFtIGluICAgICAgVGhlIERFUiBlbmNvZGVkIFVURjggU1RSSU5HCisgIEBwYXJhbSBpbmxlbiAgIFRoZSBzaXplIG9mIHRoZSBERVIgVVRGOCBTVFJJTkcKKyAgQHBhcmFtIG91dCAgICAgW291dF0gVGhlIGFycmF5IG9mIHV0ZjhzIHN0b3JlZCAob25lIHBlciBjaGFyKQorICBAcGFyYW0gb3V0bGVuICBbaW4vb3V0XSBUaGUgbnVtYmVyIG9mIHV0ZjhzIHN0b3JlZAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZGVyX2RlY29kZV91dGY4X3N0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHdjaGFyX3QgICAgICAgdG1wOworICAgdW5zaWduZWQgbG9uZyB4LCB5LCB6LCBsZW47CisKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgLyogbXVzdCBoYXZlIGhlYWRlciBhdCBsZWFzdCAqLworICAgaWYgKGlubGVuIDwgMikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgfQorCisgICAvKiBjaGVjayBmb3IgMHgwQyAqLworICAgaWYgKChpblswXSAmIDB4MUYpICE9IDB4MEMpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgIH0KKyAgIHggPSAxOworCisgICAvKiBkZWNvZGUgdGhlIGxlbmd0aCAqLworICAgaWYgKGluW3hdICYgMHg4MCkgeworICAgICAgLyogdmFsaWQgIyBvZiBieXRlcyBpbiBsZW5ndGggYXJlIDEsMiwzICovCisgICAgICB5ID0gaW5beF0gJiAweDdGOworICAgICAgaWYgKCh5ID09IDApIHx8ICh5ID4gMykgfHwgKCh4ICsgeSkgPiBpbmxlbikpIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgIH0KKworICAgICAgLyogcmVhZCB0aGUgbGVuZ3RoIGluICovCisgICAgICBsZW4gPSAwOworICAgICAgKyt4OworICAgICAgd2hpbGUgKHktLSkgeworICAgICAgICAgbGVuID0gKGxlbiA8PCA4KSB8IGluW3grK107CisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgbGVuID0gaW5beCsrXSAmIDB4N0Y7CisgICB9CisKKyAgIGlmIChsZW4gKyB4ID4gaW5sZW4pIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgIH0KKworICAgLyogcHJvY2VlZCB0byBkZWNvZGUgKi8KKyAgIGZvciAoeSA9IDA7IHggPCBpbmxlbjsgKSB7CisgICAgICAvKiBnZXQgZmlyc3QgYnl0ZSAqLworICAgICAgdG1wID0gaW5beCsrXTsKKyAKKyAgICAgIC8qIGNvdW50IG51bWJlciBvZiBieXRlcyAqLworICAgICAgZm9yICh6ID0gMDsgKHRtcCAmIDB4ODApICYmICh6IDw9IDQpOyB6KyssIHRtcCA9ICh0bXAgPDwgMSkgJiAweEZGKTsKKyAgICAgIAorICAgICAgaWYgKHogPiA0IHx8ICh4ICsgKHogLSAxKSA+IGlubGVuKSkgeworICAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgfQorCisgICAgICAvKiBkZWNvZGUsIGdyYWIgdXBwZXIgYml0cyAqLworICAgICAgdG1wID4+PSB6OworCisgICAgICAvKiBncmFiIHJlbWFpbmluZyBieXRlcyAqLworICAgICAgaWYgKHogPiAxKSB7IC0tejsgfQorICAgICAgd2hpbGUgKHotLSAhPSAwKSB7CisgICAgICAgICBpZiAoKGluW3hdICYgMHhDMCkgIT0gMHg4MCkgeworICAgICAgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgICAgfQorICAgICAgICAgdG1wID0gKHRtcCA8PCA2KSB8ICgod2NoYXJfdClpblt4KytdICYgMHgzRik7CisgICAgICB9CisKKyAgICAgIGlmICh5ID4gKm91dGxlbikgeworICAgICAgICAgKm91dGxlbiA9IHk7CisgICAgICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgICAgfQorICAgICAgb3V0W3krK10gPSB0bXA7CisgICB9CisgICAqb3V0bGVuID0geTsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorIAorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9kZWNvZGVfdXRmOF9zdHJpbmcuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzI2IDAyOjI3OjM3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9lbmNvZGVfdXRmOF9zdHJpbmcuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9lbmNvZGVfdXRmOF9zdHJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGQ2MDgxCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2VuY29kZV91dGY4X3N0cmluZy5jCkBAIC0wLDAgKzEsMTA1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfZW5jb2RlX3V0Zjhfc3RyaW5nLmMKKyAgQVNOLjEgREVSLCBlbmNvZGUgYSBVVEY4IFNUUklORywgVG9tIFN0IERlbmlzCisqLworCisKKyNpZmRlZiBMVENfREVSCisKKy8qKgorICBTdG9yZSBhbiBVVEY4IFNUUklORworICBAcGFyYW0gaW4gICAgICAgVGhlIGFycmF5IG9mIFVURjggdG8gc3RvcmUgKG9uZSBwZXIgd2NoYXJfdCkKKyAgQHBhcmFtIGlubGVuICAgIFRoZSBudW1iZXIgb2YgVVRGOCB0byBzdG9yZQorICBAcGFyYW0gb3V0ICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgREVSIGVuY29kZWQgVVRGOCBTVFJJTkcKKyAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIERFUiBVVEY4IFNUUklORworICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZGVyX2VuY29kZV91dGY4X3N0cmluZyhjb25zdCB3Y2hhcl90ICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeSwgbGVuOworCisgICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgIC8qIGdldCB0aGUgc2l6ZSAqLworICAgZm9yICh4ID0gbGVuID0gMDsgeCA8IGlubGVuOyB4KyspIHsKKyAgICAgICBpZiAoaW5beF0gPCAwIHx8IGluW3hdID4gMHgxRkZGRikgeyAKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgICAgfQorICAgICAgIGxlbiArPSBkZXJfdXRmOF9jaGFyc2l6ZShpblt4XSk7CisgICB9CisKKyAgIGlmIChsZW4gPCAxMjgpIHsKKyAgICAgIHkgPSAyICsgbGVuOworICAgfSBlbHNlIGlmIChsZW4gPCAyNTYpIHsKKyAgICAgIHkgPSAzICsgbGVuOworICAgfSBlbHNlIGlmIChsZW4gPCA2NTUzNlVMKSB7CisgICAgICB5ID0gNCArIGxlbjsKKyAgIH0gZWxzZSBpZiAobGVuIDwgMTY3NzcyMTZVTCkgeworICAgICAgeSA9IDUgKyBsZW47CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICAvKiB0b28gYmlnPyAqLworICAgaWYgKHkgPiAqb3V0bGVuKSB7CisgICAgICAqb3V0bGVuID0gbGVuOworICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgIH0KKworICAgLyogZW5jb2RlIHRoZSBoZWFkZXIrbGVuICovCisgICB4ID0gMDsKKyAgIG91dFt4KytdID0gMHgwQzsKKyAgIGlmIChsZW4gPCAxMjgpIHsKKyAgICAgIG91dFt4KytdID0gbGVuOworICAgfSBlbHNlIGlmIChsZW4gPCAyNTYpIHsKKyAgICAgIG91dFt4KytdID0gMHg4MTsKKyAgICAgIG91dFt4KytdID0gbGVuOworICAgfSBlbHNlIGlmIChsZW4gPCA2NTUzNlVMKSB7CisgICAgICBvdXRbeCsrXSA9IDB4ODI7CisgICAgICBvdXRbeCsrXSA9IChsZW4+PjgpJjI1NTsKKyAgICAgIG91dFt4KytdID0gbGVuJjI1NTsKKyAgIH0gZWxzZSBpZiAobGVuIDwgMTY3NzcyMTZVTCkgeworICAgICAgb3V0W3grK10gPSAweDgzOworICAgICAgb3V0W3grK10gPSAobGVuPj4xNikmMjU1OworICAgICAgb3V0W3grK10gPSAobGVuPj44KSYyNTU7CisgICAgICBvdXRbeCsrXSA9IGxlbiYyNTU7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICAvKiBzdG9yZSBVVEY4ICovCisgICBmb3IgKHkgPSAwOyB5IDwgaW5sZW47IHkrKykgeworICAgICAgIHN3aXRjaCAoZGVyX3V0ZjhfY2hhcnNpemUoaW5beV0pKSB7CisgICAgICAgICAgY2FzZSAxOiBvdXRbeCsrXSA9IGluW3ldOyBicmVhazsKKyAgICAgICAgICBjYXNlIDI6IG91dFt4KytdID0gMHhDMCB8ICgoaW5beV0gPj4gNikgJiAweDFGKTsgIG91dFt4KytdID0gMHg4MCB8IChpblt5XSAmIDB4M0YpOyBicmVhazsKKyAgICAgICAgICBjYXNlIDM6IG91dFt4KytdID0gMHhFMCB8ICgoaW5beV0gPj4gMTIpICYgMHgwRik7IG91dFt4KytdID0gMHg4MCB8ICgoaW5beV0gPj4gNikgJiAweDNGKTsgb3V0W3grK10gPSAweDgwIHwgKGluW3ldICYgMHgzRik7IGJyZWFrOworICAgICAgICAgIGNhc2UgNDogb3V0W3grK10gPSAweEYwIHwgKChpblt5XSA+PiAxOCkgJiAweDA3KTsgb3V0W3grK10gPSAweDgwIHwgKChpblt5XSA+PiAxMikgJiAweDNGKTsgb3V0W3grK10gPSAweDgwIHwgKChpblt5XSA+PiA2KSAmIDB4M0YpOyBvdXRbeCsrXSA9IDB4ODAgfCAoaW5beV0gJiAweDNGKTsgYnJlYWs7CisgICAgICAgfQorICAgfQorCisgICAvKiByZXR1biBsZW5ndGggKi8KKyAgICpvdXRsZW4gPSB4OworCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfZW5jb2RlX3V0Zjhfc3RyaW5nLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNyAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8xNiAxNzo0MToyMSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvYXNuMS9kZXIvdXRmOC9kZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViMmJjNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9hc24xL2Rlci91dGY4L2Rlcl9sZW5ndGhfdXRmOF9zdHJpbmcuYwpAQCAtMCwwICsxLDgzIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBkZXJfbGVuZ3RoX3V0Zjhfc3RyaW5nLmMKKyAgQVNOLjEgREVSLCBnZXQgbGVuZ3RoIG9mIFVURjggU1RSSU5HLCBUb20gU3QgRGVuaXMKKyovCisKKyNpZmRlZiBMVENfREVSCisKKy8qKiBSZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgYSBVVEYtOCBjaGFyYWN0ZXIKKyAgQHBhcmFtIGMgICBUaGUgVVRGLTggY2hhcmFjdGVyIHRvIG1lYXN1cmUKKyAgQHJldHVybiAgICBUaGUgc2l6ZSBpbiBieXRlcworKi8KK3Vuc2lnbmVkIGxvbmcgZGVyX3V0ZjhfY2hhcnNpemUoY29uc3Qgd2NoYXJfdCBjKQoreworICAgaWYgKGMgPD0gMHg3RikgeworICAgICAgcmV0dXJuIDE7CisgICB9IGVsc2UgaWYgKGMgPD0gMHg3RkYpIHsKKyAgICAgIHJldHVybiAyOworICAgfSBlbHNlIGlmIChjIDw9IDB4RkZGRikgeworICAgICAgcmV0dXJuIDM7CisgICB9IGVsc2UgeworICAgICAgcmV0dXJuIDQ7CisgICB9Cit9CisKKy8qKgorICBHZXRzIGxlbmd0aCBvZiBERVIgZW5jb2Rpbmcgb2YgVVRGOCBTVFJJTkcgCisgIEBwYXJhbSBpbiAgICAgICBUaGUgY2hhcmFjdGVycyB0byBtZWFzdXJlIHRoZSBsZW5ndGggb2YKKyAgQHBhcmFtIG5vY3RldHMgIFRoZSBudW1iZXIgb2Ygb2N0ZXRzIGluIHRoZSBzdHJpbmcgdG8gZW5jb2RlCisgIEBwYXJhbSBvdXRsZW4gICBbb3V0XSBUaGUgbGVuZ3RoIG9mIHRoZSBERVIgZW5jb2RpbmcgZm9yIHRoZSBnaXZlbiBzdHJpbmcKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRlcl9sZW5ndGhfdXRmOF9zdHJpbmcoY29uc3Qgd2NoYXJfdCAqaW4sIHVuc2lnbmVkIGxvbmcgbm9jdGV0cywgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgdW5zaWduZWQgbG9uZyB4LCBsZW47CisKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisKKyAgIGxlbiA9IDA7CisgICBmb3IgKHggPSAwOyB4IDwgbm9jdGV0czsgeCsrKSB7CisgICAgICBpZiAoaW5beF0gPCAwIHx8IGluW3hdID4gMHgxMEZGRkYpIHsKKyAgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgICAgIH0KKyAgICAgIGxlbiArPSBkZXJfdXRmOF9jaGFyc2l6ZShpblt4XSk7CisgICB9CisKKyAgIGlmIChsZW4gPCAxMjgpIHsKKyAgICAgIC8qIDBDIExMIEREIEREIEREIC4uLiAqLworICAgICAgKm91dGxlbiA9IDIgKyBsZW47CisgICB9IGVsc2UgaWYgKGxlbiA8IDI1NikgeworICAgICAgLyogMEMgODEgTEwgREQgREQgREQgLi4uICovCisgICAgICAqb3V0bGVuID0gMyArIGxlbjsKKyAgIH0gZWxzZSBpZiAobGVuIDwgNjU1MzZVTCkgeworICAgICAgLyogMEMgODIgTEwgTEwgREQgREQgREQgLi4uICovCisgICAgICAqb3V0bGVuID0gNCArIGxlbjsKKyAgIH0gZWxzZSBpZiAobGVuIDwgMTY3NzcyMTZVTCkgeworICAgICAgLyogMEMgODMgTEwgTEwgTEwgREQgREQgREQgLi4uICovCisgICAgICAqb3V0bGVuID0gNSArIGxlbjsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2FzbjEvZGVyL3V0ZjgvZGVyX2xlbmd0aF91dGY4X3N0cmluZy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMTYgMTc6NDE6MjEgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfZGVjcnlwdF9rZXkuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX2RlY3J5cHRfa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNiZWRjNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX2RlY3J5cHRfa2V5LmMKQEAgLTAsMCArMSwxMzkgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRzYV9kZWNyeXB0X2tleS5jCisgIERTQSBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTURTQQorCisvKioKKyAgRGVjcnlwdCBhbiBEU0EgZW5jcnlwdGVkIGtleQorICBAcGFyYW0gaW4gICAgICAgVGhlIGNpcGhlcnRleHQKKyAgQHBhcmFtIGlubGVuICAgIFRoZSBsZW5ndGggb2YgdGhlIGNpcGhlcnRleHQgKG9jdGV0cykKKyAgQHBhcmFtIG91dCAgICAgIFtvdXRdIFRoZSBwbGFpbnRleHQKKyAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHBsYWludGV4dAorICBAcGFyYW0ga2V5ICAgICAgVGhlIGNvcnJlc3BvbmRpbmcgcHJpdmF0ZSBEU0Ega2V5CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkc2FfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nICBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBkc2Ffa2V5ICprZXkpCit7CisgICB1bnNpZ25lZCBjaGFyICAqc2tleSwgKmV4cHQ7CisgICB2b2lkICAgICAgICAgICAqZ19wdWI7CisgICB1bnNpZ25lZCBsb25nICB4LCB5LCBoYXNoT0lEWzMyXTsKKyAgIGludCAgICAgICAgICAgIGhhc2gsIGVycjsKKyAgIGx0Y19hc24xX2xpc3QgIGRlY29kZVszXTsKKworICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7CisKKyAgIC8qIHJpZ2h0IGtleSB0eXBlPyAqLworICAgaWYgKGtleS0+dHlwZSAhPSBQS19QUklWQVRFKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfTk9UX1BSSVZBVEU7CisgICB9CisgICAKKyAgIC8qIGRlY29kZSB0byBmaW5kIG91dCBoYXNoICovCisgICBMVENfU0VUX0FTTjEoZGVjb2RlLCAwLCBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUiwgaGFzaE9JRCwgc2l6ZW9mKGhhc2hPSUQpL3NpemVvZihoYXNoT0lEWzBdKSk7CisgCisgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2UoaW4sIGlubGVuLCBkZWNvZGUsIDEpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaGFzaCA9IGZpbmRfaGFzaF9vaWQoaGFzaE9JRCwgZGVjb2RlWzBdLnNpemUpOyAgICAgICAgICAgICAgICAgICAKKyAgIGlmIChoYXNoX2lzX3ZhbGlkKGhhc2gpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICB9CisKKyAgIC8qIHdlIG5vdyBoYXZlIHRoZSBoYXNoISAqLworICAgCisgICBpZiAoKGVyciA9IG1wX2luaXQoJmdfcHViKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIGFsbG9jYXRlIG1lbW9yeSAqLworICAgZXhwdCAgID0gWE1BTExPQyhtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPnApICsgMSk7CisgICBza2V5ICAgPSBYTUFMTE9DKE1BWEJMT0NLU0laRSk7CisgICBpZiAoZXhwdCA9PSBOVUxMIHx8IHNrZXkgPT0gTlVMTCkgeworICAgICAgaWYgKGV4cHQgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUoZXhwdCk7CisgICAgICB9CisgICAgICBpZiAoc2tleSAhPSBOVUxMKSB7CisgICAgICAgICBYRlJFRShza2V5KTsKKyAgICAgIH0KKyAgICAgIG1wX2NsZWFyKGdfcHViKTsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisgICAKKyAgIExUQ19TRVRfQVNOMShkZWNvZGUsIDEsIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgIGdfcHViLCAgICAgIDFVTCk7CisgICBMVENfU0VUX0FTTjEoZGVjb2RlLCAyLCBMVENfQVNOMV9PQ1RFVF9TVFJJTkcsICAgICAgc2tleSwgICAgICBNQVhCTE9DS1NJWkUpOworCisgICAvKiByZWFkIHRoZSBzdHJ1Y3R1cmUgaW4gbm93ICovCisgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2UoaW4sIGlubGVuLCBkZWNvZGUsIDMpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiBtYWtlIHNoYXJlZCBrZXkgKi8KKyAgIHggPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPnApICsgMTsKKyAgIGlmICgoZXJyID0gZHNhX3NoYXJlZF9zZWNyZXQoa2V5LT54LCBnX3B1Yiwga2V5LCBleHB0LCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIHkgPSBNSU4obXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5wKSArIDEsIE1BWEJMT0NLU0laRSk7CisgICBpZiAoKGVyciA9IGhhc2hfbWVtb3J5KGhhc2gsIGV4cHQsIHgsIGV4cHQsICZ5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogZW5zdXJlIHRoZSBoYXNoIG9mIHRoZSBzaGFyZWQgc2VjcmV0IGlzIGF0IGxlYXN0IGFzIGJpZyBhcyB0aGUgZW5jcnlwdCBpdHNlbGYgKi8KKyAgIGlmIChkZWNvZGVbMl0uc2l6ZSA+IHkpIHsKKyAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiBhdm9pZCBidWZmZXIgb3ZlcmZsb3cgKi8KKyAgIGlmICgqb3V0bGVuIDwgZGVjb2RlWzJdLnNpemUpIHsKKyAgICAgICpvdXRsZW4gPSBkZWNvZGVbMl0uc2l6ZTsKKyAgICAgIGVyciA9IENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogRGVjcnlwdCB0aGUga2V5ICovCisgICBmb3IgKHggPSAwOyB4IDwgZGVjb2RlWzJdLnNpemU7IHgrKykgeworICAgICBvdXRbeF0gPSBleHB0W3hdIF4gc2tleVt4XTsKKyAgIH0KKyAgICpvdXRsZW4gPSB4OworCisgICBlcnIgPSBDUllQVF9PSzsKK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGV4cHQsICAgbXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5wKSArIDEpOworICAgemVyb21lbShza2V5LCAgIE1BWEJMT0NLU0laRSk7CisjZW5kaWYKKworICAgWEZSRUUoZXhwdCk7CisgICBYRlJFRShza2V5KTsKKyAgCisgICBtcF9jbGVhcihnX3B1Yik7CisKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV9kZWNyeXB0X2tleS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDM6MTg6NDMgJCAqLworCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV9lbmNyeXB0X2tleS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfZW5jcnlwdF9rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWZhNGRlCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfZW5jcnlwdF9rZXkuYwpAQCAtMCwwICsxLDEzNSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZHNhX2VuY3J5cHRfa2V5LmMKKyAgRFNBIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRFNBCisKKy8qKgorICBFbmNyeXB0IGEgc3ltbWV0cmljIGtleSB3aXRoIERTQQorICBAcGFyYW0gaW4gICAgICAgICBUaGUgc3ltbWV0cmljIGtleSB5b3Ugd2FudCB0byBlbmNyeXB0CisgIEBwYXJhbSBpbmxlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGtleSB0byBlbmNyeXB0IChvY3RldHMpCisgIEBwYXJhbSBvdXQgICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGNpcGhlcnRleHQKKyAgQHBhcmFtIG91dGxlbiAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgY2lwaGVydGV4dAorICBAcGFyYW0gcHJuZyAgICAgICBBbiBhY3RpdmUgUFJORyBzdGF0ZQorICBAcGFyYW0gd3BybmcgICAgICBUaGUgaW5kZXggb2YgdGhlIFBSTkcgeW91IHdpc2ggdG8gdXNlIAorICBAcGFyYW0gaGFzaCAgICAgICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggeW91IHdhbnQgdG8gdXNlIAorICBAcGFyYW0ga2V5ICAgICAgICBUaGUgRFNBIGtleSB5b3Ugd2FudCB0byBlbmNyeXB0IHRvCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkc2FfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJuZ19zdGF0ZSAqcHJuZywgaW50IHdwcm5nLCBpbnQgaGFzaCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRzYV9rZXkgKmtleSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpleHB0LCAqc2tleTsKKyAgICB2b2lkICAgICAgICAgICpnX3B1YiwgKmdfcHJpdjsKKyAgICB1bnNpZ25lZCBsb25nICB4LCB5OworICAgIGludCAgICAgICAgICAgIGVycjsKKworICAgIExUQ19BUkdDSEsoaW4gICAgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dCAgICAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhvdXRsZW4gICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsoa2V5ICAgICAhPSBOVUxMKTsKKworICAgIC8qIGNoZWNrIHRoYXQgd3BybmcvY2lwaGVyL2hhc2ggYXJlIG5vdCBpbnZhbGlkICovCisgICAgaWYgKChlcnIgPSBwcm5nX2lzX3ZhbGlkKHdwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIGlmIChpbmxlbiA+IGhhc2hfZGVzY3JpcHRvcltoYXNoXS5oYXNoc2l6ZSkgeworICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0hBU0g7CisgICAgfQorCisgICAgLyogbWFrZSBhIHJhbmRvbSBrZXkgYW5kIGV4cG9ydCB0aGUgcHVibGljIGNvcHkgKi8KKyAgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJmdfcHViLCAmZ19wcml2LCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgIAorICAgIGV4cHQgICAgICAgPSBYTUFMTE9DKG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS0+cCkgKyAxKTsKKyAgICBza2V5ICAgICAgID0gWE1BTExPQyhNQVhCTE9DS1NJWkUpOworICAgIGlmIChleHB0ID09IE5VTEwgIHx8IHNrZXkgPT0gTlVMTCkgeworICAgICAgIGlmIChleHB0ICE9IE5VTEwpIHsKKyAgICAgICAgICBYRlJFRShleHB0KTsKKyAgICAgICB9CisgICAgICAgaWYgKHNrZXkgIT0gTlVMTCkgeworICAgICAgICAgIFhGUkVFKHNrZXkpOworICAgICAgIH0KKyAgICAgICBtcF9jbGVhcl9tdWx0aShnX3B1YiwgZ19wcml2LCBOVUxMKTsKKyAgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgIH0KKyAgICAKKyAgICAvKiBtYWtlIGEgcmFuZG9tIHgsIGdeeCBwYWlyICovCisgICAgeCA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS0+cSk7CisgICAgaWYgKHBybmdfZGVzY3JpcHRvclt3cHJuZ10ucmVhZChleHB0LCB4LCBwcm5nKSAhPSB4KSB7CisgICAgICAgZXJyID0gQ1JZUFRfRVJST1JfUkVBRFBSTkc7CisgICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgICAKKyAgICAvKiBsb2FkIHggKi8KKyAgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKGdfcHJpdiwgZXhwdCwgeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgICAKKyAgICAvKiBjb21wdXRlIHkgKi8KKyAgICBpZiAoKGVyciA9IG1wX2V4cHRtb2Qoa2V5LT5nLCBnX3ByaXYsIGtleS0+cCwgZ19wdWIpKSAhPSBDUllQVF9PSykgeworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisgICAgCisgICAgLyogbWFrZSByYW5kb20ga2V5ICovCisgICAgeCAgICAgICAgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPnApICsgMTsKKyAgICBpZiAoKGVyciA9IGRzYV9zaGFyZWRfc2VjcmV0KGdfcHJpdiwga2V5LT55LCBrZXksIGV4cHQsICZ4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorCisgICAgeSA9IE1BWEJMT0NLU0laRTsKKyAgICBpZiAoKGVyciA9IGhhc2hfbWVtb3J5KGhhc2gsIGV4cHQsIHgsIHNrZXksICZ5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIAorICAgIC8qIEVuY3J5cHQga2V5ICovCisgICAgZm9yICh4ID0gMDsgeCA8IGlubGVuOyB4KyspIHsKKyAgICAgIHNrZXlbeF0gXj0gaW5beF07CisgICAgfQorCisgICAgZXJyID0gZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aShvdXQsIG91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX09CSkVDVF9JREVOVElGSUVSLCAgaGFzaF9kZXNjcmlwdG9yW2hhc2hdLk9JRGxlbiwgICBoYXNoX2Rlc2NyaXB0b3JbaGFzaF0uT0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAgICAgICAxVUwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcHViLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfT0NURVRfU1RSSU5HLCAgICAgICBpbmxlbiwgICAgICAgICAgICAgICAgICAgICAgICAgIHNrZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAgICAgICAgICAgIDBVTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICAgLyogY2xlYW4gdXAgKi8KKyAgICB6ZXJvbWVtKGV4cHQsICAgbXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5wKSArIDEpOworICAgIHplcm9tZW0oc2tleSwgICBNQVhCTE9DS1NJWkUpOworI2VuZGlmCisKKyAgICBYRlJFRShza2V5KTsKKyAgICBYRlJFRShleHB0KTsKKyAgICAKKyAgICBtcF9jbGVhcl9tdWx0aShnX3B1YiwgZ19wcml2LCBOVUxMKTsKKyAgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX2VuY3J5cHRfa2V5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNyAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMzoxODo0MyAkICovCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX2V4cG9ydC5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfZXhwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4Mjc3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX2V4cG9ydC5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBkc2FfZXhwb3J0LmMKKyAgIERTQSBpbXBsZW1lbnRhdGlvbiwgZXhwb3J0IGtleSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTURTQQorCisvKioKKyAgRXhwb3J0IGEgRFNBIGtleSB0byBhIGJpbmFyeSBwYWNrZXQKKyAgQHBhcmFtIG91dCAgICBbb3V0XSBXaGVyZSB0byBzdG9yZSB0aGUgcGFja2V0CisgIEBwYXJhbSBvdXRsZW4gW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgcGFja2V0CisgIEBwYXJhbSB0eXBlICAgVGhlIHR5cGUgb2Yga2V5IHRvIGV4cG9ydCAoUEtfUFJJVkFURSBvciBQS19QVUJMSUMpCisgIEBwYXJhbSBrZXkgICAgVGhlIGtleSB0byBleHBvcnQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGRzYV9leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB0eXBlLCBkc2Ffa2V5ICprZXkpCit7CisgICB1bnNpZ25lZCBjaGFyIGZsYWdzWzFdOworCisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7CisKKyAgIC8qIGNhbiB3ZSBzdG9yZSB0aGUgc3RhdGljIGhlYWRlcj8gICovCisgICBpZiAodHlwZSA9PSBQS19QUklWQVRFICYmIGtleS0+dHlwZSAhPSBQS19QUklWQVRFKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfVFlQRV9NSVNNQVRDSDsKKyAgIH0KKworICAgaWYgKHR5cGUgIT0gUEtfUFVCTElDICYmIHR5cGUgIT0gUEtfUFJJVkFURSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICBmbGFnc1swXSA9ICh0eXBlICE9IFBLX1BVQkxJQykgPyAxIDogMDsKKworICAgaWYgKHR5cGUgPT0gUEtfUFJJVkFURSkgeworICAgICAgcmV0dXJuIGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkob3V0LCBvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9CSVRfU1RSSU5HLCAgIDFVTCwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsIGtleS0+cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCBrZXktPnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsIGtleS0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgICAgICAgMFVMLCBOVUxMKTsKKyAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aShvdXQsIG91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0JJVF9TVFJJTkcsICAgMVVMLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCBrZXktPmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT5wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsIGtleS0+cSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCBrZXktPnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAgICAgIDBVTCwgTlVMTCk7CisgICB9Cit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX2V4cG9ydC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfZnJlZS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfZnJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYTFlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV9mcmVlLmMKQEAgLTAsMCArMSwzNCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIGRzYV9mcmVlLmMKKyAgIERTQSBpbXBsZW1lbnRhdGlvbiwgZnJlZSBhIERTQSBrZXksIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIE1EU0EKKworLyoqCisgICBGcmVlIGEgRFNBIGtleQorICAgQHBhcmFtIGtleSAgIFRoZSBrZXkgdG8gZnJlZSBmcm9tIG1lbW9yeQorKi8KK3ZvaWQgZHNhX2ZyZWUoZHNhX2tleSAqa2V5KQoreworICAgTFRDX0FSR0NIS1ZEKGtleSAhPSBOVUxMKTsKKyAgIG1wX2NsZWFyX211bHRpKGtleS0+Zywga2V5LT5xLCBrZXktPnAsIGtleS0+eCwga2V5LT55LCBOVUxMKTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX2ZyZWUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzA5IDAxOjM4OjEzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX2ltcG9ydC5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfaW1wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyMjcyYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX2ltcG9ydC5jCkBAIC0wLDAgKzEsOTAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBkc2FfaW1wb3J0LmMKKyAgIERTQSBpbXBsZW1lbnRhdGlvbiwgaW1wb3J0IGEgRFNBIGtleSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTURTQQorCisvKioKKyAgIEltcG9ydCBhIERTQSBrZXkgCisgICBAcGFyYW0gaW4gICAgICAgVGhlIGJpbmFyeSBwYWNrZXQgdG8gaW1wb3J0IGZyb20KKyAgIEBwYXJhbSBpbmxlbiAgICBUaGUgbGVuZ3RoIG9mIHRoZSBiaW5hcnkgcGFja2V0CisgICBAcGFyYW0ga2V5ICAgICAgW291dF0gV2hlcmUgdG8gc3RvcmUgdGhlIGltcG9ydGVkIGtleQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCB1cG9uIGVycm9yIHRoaXMgZnVuY3Rpb24gd2lsbCBmcmVlIGFsbCBhbGxvY2F0ZWQgbWVtb3J5CisqLworaW50IGRzYV9pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIGRzYV9rZXkgKmtleSkKK3sKKyAgIHVuc2lnbmVkIGNoYXIgZmxhZ3NbMV07CisgICBpbnQgICAgICAgICAgIGVycjsKKworICAgTFRDX0FSR0NISyhpbiAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobHRjX21wLm5hbWUgIT0gTlVMTCk7CisKKyAgIC8qIGluaXQga2V5ICovCisgICBpZiAobXBfaW5pdF9tdWx0aSgma2V5LT5wLCAma2V5LT5nLCAma2V5LT5xLCAma2V5LT54LCAma2V5LT55LCBOVUxMKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogZ2V0IGtleSB0eXBlICovCisgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkoaW4sIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0JJVF9TVFJJTkcsIDFVTCwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBlcnJvcjsKKyAgIH0KKworICAgaWYgKGZsYWdzWzBdID09IDEpIHsKKyAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShpbiwgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9CSVRfU1RSSU5HLCAgIDFVTCwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsIGtleS0+cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCBrZXktPnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsIGtleS0+eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgICAgICAgMFVMLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICB9CisgICAgICBrZXktPnR5cGUgPSBQS19QUklWQVRFOworICAgfSBlbHNlIHsKKyAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShpbiwgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9CSVRfU1RSSU5HLCAgIDFVTCwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAxVUwsIGtleS0+cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgMVVMLCBrZXktPnEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgIDFVTCwga2V5LT55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgICAgICAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgIH0KKyAgICAgIGtleS0+dHlwZSA9IFBLX1BVQkxJQzsKKyAgfQorICBrZXktPnFvcmQgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPnEpOworCisgIGlmIChrZXktPnFvcmQgPj0gTURTQV9NQVhfR1JPVVAgfHwga2V5LT5xb3JkIDw9IDE1IHx8CisgICAgICAodW5zaWduZWQgbG9uZylrZXktPnFvcmQgPj0gbXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5wKSB8fCAobXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5wKSAtIGtleS0+cW9yZCkgPj0gTURTQV9ERUxUQSkgeworICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICBnb3RvIGVycm9yOworICAgfQorCisgIHJldHVybiBDUllQVF9PSzsKK2Vycm9yOiAKKyAgIG1wX2NsZWFyX211bHRpKGtleS0+cCwga2V5LT5nLCBrZXktPnEsIGtleS0+eCwga2V5LT55LCBOVUxMKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV9pbXBvcnQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMiAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV9tYWtlX2tleS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfbWFrZV9rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTNlODE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfbWFrZV9rZXkuYwpAQCAtMCwwICsxLDEzNyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgIEBmaWxlIGRzYV9tYWtlX2tleS5jCisgICBEU0EgaW1wbGVtZW50YXRpb24sIGdlbmVyYXRlIGEgRFNBIGtleSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTURTQQorCisvKioKKyAgQ3JlYXRlIGEgRFNBIGtleQorICBAcGFyYW0gcHJuZyAgICAgICAgICBBbiBhY3RpdmUgUFJORyBzdGF0ZQorICBAcGFyYW0gd3BybmcgICAgICAgICBUaGUgaW5kZXggb2YgdGhlIFBSTkcgZGVzaXJlZAorICBAcGFyYW0gZ3JvdXBfc2l6ZSAgICBTaXplIG9mIHRoZSBtdWx0aXBsaWNhdGl2ZSBncm91cCAob2N0ZXRzKQorICBAcGFyYW0gbW9kdWx1c19zaXplICBTaXplIG9mIHRoZSBtb2R1bHVzIChvY3RldHMpCisgIEBwYXJhbSBrZXkgICAgICAgICAgIFtvdXRdIFdoZXJlIHRvIHN0b3JlIHRoZSBjcmVhdGVkIGtleQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIHVwb24gZXJyb3IgdGhpcyBmdW5jdGlvbiB3aWxsIGZyZWUgYWxsIGFsbG9jYXRlZCBtZW1vcnkKKyovCitpbnQgZHNhX21ha2Vfa2V5KHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgaW50IGdyb3VwX3NpemUsIGludCBtb2R1bHVzX3NpemUsIGRzYV9rZXkgKmtleSkKK3sKKyAgIHZvaWQgICAgICAgICAgICp0bXAsICp0bXAyOworICAgaW50ICAgICAgICAgICAgZXJyLCByZXM7CisgICB1bnNpZ25lZCBjaGFyICpidWY7CisKKyAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobHRjX21wLm5hbWUgIT0gTlVMTCk7CisKKyAgIC8qIGNoZWNrIHBybmcgKi8KKyAgIGlmICgoZXJyID0gcHJuZ19pc192YWxpZCh3cHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBjaGVjayBzaXplICovCisgICBpZiAoZ3JvdXBfc2l6ZSA+PSBNRFNBX01BWF9HUk9VUCB8fCBncm91cF9zaXplIDw9IDE1IHx8IAorICAgICAgIGdyb3VwX3NpemUgPj0gbW9kdWx1c19zaXplIHx8IChtb2R1bHVzX3NpemUgLSBncm91cF9zaXplKSA+PSBNRFNBX0RFTFRBKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIC8qIGFsbG9jYXRlIHJhbSAqLworICAgYnVmID0gWE1BTExPQyhNRFNBX0RFTFRBKTsKKyAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogaW5pdCBtcF9pbnRzICAqLworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ0bXAsICZ0bXAyLCAma2V5LT5nLCAma2V5LT5xLCAma2V5LT5wLCAma2V5LT54LCAma2V5LT55LCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIFhGUkVFKGJ1Zik7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBtYWtlIG91ciBwcmltZSBxICovCisgICBpZiAoKGVyciA9IHJhbmRfcHJpbWUoa2V5LT5xLCBncm91cF9zaXplLCBwcm5nLCB3cHJuZykpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgLyogZG91YmxlIHEgICovCisgICBpZiAoKGVyciA9IG1wX2FkZChrZXktPnEsIGtleS0+cSwgdG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgLyogbm93IG1ha2UgYSByYW5kb20gc3RyaW5nIGFuZCBtdWx0cGx5IGl0IGFnYWluc3QgcSAqLworICAgaWYgKHBybmdfZGVzY3JpcHRvclt3cHJuZ10ucmVhZChidWYrMSwgbW9kdWx1c19zaXplIC0gZ3JvdXBfc2l6ZSwgcHJuZykgIT0gKHVuc2lnbmVkIGxvbmcpKG1vZHVsdXNfc2l6ZSAtIGdyb3VwX3NpemUpKSB7CisgICAgICBlcnIgPSBDUllQVF9FUlJPUl9SRUFEUFJORzsKKyAgICAgIGdvdG8gZXJyb3I7CisgICB9CisKKyAgIC8qIGZvcmNlIG1hZ25pdHVkZSAqLworICAgYnVmWzBdIHw9IDB4QzA7CisKKyAgIC8qIGZvcmNlIGV2ZW4gKi8KKyAgIGJ1Zlttb2R1bHVzX3NpemUgLSBncm91cF9zaXplIC0gMV0gJj0gfjE7CisKKyAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4odG1wMiwgYnVmLCBtb2R1bHVzX3NpemUgLSBncm91cF9zaXplKSkgIT0gQ1JZUFRfT0spIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9tdWwoa2V5LT5xLCB0bXAyLCBrZXktPnApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX2FkZF9kKGtleS0+cCwgMSwga2V5LT5wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgLyogbm93IGxvb3AgdW50aWwgcCBpcyBwcmltZSAqLworICAgZm9yICg7OykgeworICAgICAgIGlmICgoZXJyID0gbXBfcHJpbWVfaXNfcHJpbWUoa2V5LT5wLCA4LCAmcmVzKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICAgaWYgKHJlcyA9PSBMVENfTVBfWUVTKSBicmVhazsKKworICAgICAgIC8qIGFkZCAycSB0byBwIGFuZCAyIHRvIHRtcDIgKi8KKyAgICAgICBpZiAoKGVyciA9IG1wX2FkZCh0bXAsIGtleS0+cCwga2V5LT5wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgICAgIGlmICgoZXJyID0gbXBfYWRkX2QodG1wMiwgMiwgdG1wMikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICB9CisKKyAgIC8qIG5vdyBwID0gKHEgKiB0bXAyKSArIDEgaXMgcHJpbWUsIGZpbmQgYSB2YWx1ZSBnIGZvciB3aGljaCBnXnRtcDIgIT0gMSAqLworICAgbXBfc2V0KGtleS0+ZywgMSk7CisKKyAgIGRvIHsKKyAgICAgIGlmICgoZXJyID0gbXBfYWRkX2Qoa2V5LT5nLCAxLCBrZXktPmcpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKGtleS0+ZywgdG1wMiwga2V5LT5wLCB0bXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICB9IHdoaWxlIChtcF9jbXBfZCh0bXAsIDEpID09IExUQ19NUF9FUSk7CisKKyAgIC8qIGF0IHRoaXMgcG9pbnQgdG1wIGdlbmVyYXRlcyBhIGdyb3VwIG9mIG9yZGVyIHEgbW9kIHAgKi8KKyAgIG1wX2V4Y2godG1wLCBrZXktPmcpOworCisgICAvKiBzbyBub3cgd2UgaGF2ZSBvdXIgREggc3RydWN0dXJlLCBnZW5lcmF0b3IgZywgb3JkZXIgcSwgbW9kdWx1cyBwIAorICAgICAgTm93IHdlIG5lZWQgYSByYW5kb20gZXhwb25lbnQgW21vZCBxXSBhbmQgaXQncyBwb3dlciBnXnggbW9kIHAgCisgICAgKi8KKyAgIGRvIHsKKyAgICAgIGlmIChwcm5nX2Rlc2NyaXB0b3Jbd3BybmddLnJlYWQoYnVmLCBncm91cF9zaXplLCBwcm5nKSAhPSAodW5zaWduZWQgbG9uZylncm91cF9zaXplKSB7CisgICAgICAgICBlcnIgPSBDUllQVF9FUlJPUl9SRUFEUFJORzsKKyAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICB9CisgICAgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKGtleS0+eCwgYnVmLCBncm91cF9zaXplKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIH0gd2hpbGUgKG1wX2NtcF9kKGtleS0+eCwgMSkgIT0gTFRDX01QX0dUKTsKKyAgIGlmICgoZXJyID0gbXBfZXhwdG1vZChrZXktPmcsIGtleS0+eCwga2V5LT5wLCBrZXktPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAKKyAgIGtleS0+dHlwZSA9IFBLX1BSSVZBVEU7CisgICBrZXktPnFvcmQgPSBncm91cF9zaXplOworCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGJ1ZiwgTURTQV9ERUxUQSk7CisjZW5kaWYKKworICAgZXJyID0gQ1JZUFRfT0s7CisgICBnb3RvIGRvbmU7CitlcnJvcjogCisgICAgbXBfY2xlYXJfbXVsdGkoa2V5LT5nLCBrZXktPnEsIGtleS0+cCwga2V5LT54LCBrZXktPnksIE5VTEwpOworZG9uZTogCisgICAgbXBfY2xlYXJfbXVsdGkodG1wLCB0bXAyLCBOVUxMKTsKKyAgICBYRlJFRShidWYpOworICAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV9tYWtlX2tleS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEwICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAzOjE4OjQzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX3NoYXJlZF9zZWNyZXQuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX3NoYXJlZF9zZWNyZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzBkNjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2Ffc2hhcmVkX3NlY3JldC5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGRzYV9zaGFyZWRfc2VjcmV0LmMKKyAgRFNBIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRFNBCisKKy8qKgorICBDcmVhdGUgYSBEU0Egc2hhcmVkIHNlY3JldCBiZXR3ZWVuIHR3byBrZXlzCisgIEBwYXJhbSBwcml2YXRlX2tleSAgICAgIFRoZSBwcml2YXRlIERTQSBrZXkgKHRoZSBleHBvbmVudCkKKyAgQHBhcmFtIGJhc2UgICAgICAgICAgICAgVGhlIGJhc2Ugb2YgdGhlIGV4cG9uZW50aWF0aW9uIChhbGxvd3MgdGhpcyB0byBiZSB1c2VkIGZvciBib3RoIGVuY3J5cHQgYW5kIGRlY3J5cHQpIAorICBAcGFyYW0gcHVibGljX2tleSAgICAgICBUaGUgcHVibGljIGtleQorICBAcGFyYW0gb3V0ICAgICAgICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiB0aGUgc2hhcmVkIHNlY3JldAorICBAcGFyYW0gb3V0bGVuICAgICAgICAgICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBzaGFyZWQgc2VjcmV0CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkc2Ffc2hhcmVkX3NlY3JldCh2b2lkICAgICAgICAgICpwcml2YXRlX2tleSwgdm9pZCAqYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICBkc2Ffa2V5ICAgICAgICpwdWJsaWNfa2V5LAorICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisgICB1bnNpZ25lZCBsb25nICB4OworICAgdm9pZCAgICAgICAgICAqcmVzOworICAgaW50ICAgICAgICAgICAgZXJyOworCisgICBMVENfQVJHQ0hLKHByaXZhdGVfa2V5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwdWJsaWNfa2V5ICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAgICAgICE9IE5VTEwpOworCisgICAvKiBtYWtlIG5ldyBwb2ludCAqLworICAgaWYgKChlcnIgPSBtcF9pbml0KCZyZXMpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKGJhc2UsIHByaXZhdGVfa2V5LCBwdWJsaWNfa2V5LT5wLCByZXMpKSAhPSBDUllQVF9PSykgeworICAgICAgbXBfY2xlYXIocmVzKTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICAKKyAgIHggPSAodW5zaWduZWQgbG9uZyltcF91bnNpZ25lZF9iaW5fc2l6ZShyZXMpOworICAgaWYgKCpvdXRsZW4gPCB4KSB7CisgICAgICAqb3V0bGVuID0geDsKKyAgICAgIGVyciA9IENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgICAgIGdvdG8gZG9uZTsKKyAgIH0KKyAgIHplcm9tZW0ob3V0LCB4KTsKKyAgIGlmICgoZXJyID0gbXBfdG9fdW5zaWduZWRfYmluKHJlcywgb3V0ICsgKHggLSBtcF91bnNpZ25lZF9iaW5fc2l6ZShyZXMpKSkpICAgIT0gQ1JZUFRfT0spICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIGVyciAgICAgPSBDUllQVF9PSzsKKyAgICpvdXRsZW4gPSB4OworZG9uZToKKyAgIG1wX2NsZWFyKHJlcyk7CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX3NoYXJlZF9zZWNyZXQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAzOjE4OjQzICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2Ffc2lnbl9oYXNoLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV9zaWduX2hhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODRkZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2Ffc2lnbl9oYXNoLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBkc2Ffc2lnbl9oYXNoLmMKKyAgIERTQSBpbXBsZW1lbnRhdGlvbiwgc2lnbiBhIGhhc2gsIFRvbSBTdCBEZW5pcworKi8KKworI2lmZGVmIE1EU0EKKworLyoqCisgIFNpZ24gYSBoYXNoIHdpdGggRFNBCisgIEBwYXJhbSBpbiAgICAgICBUaGUgaGFzaCB0byBzaWduCisgIEBwYXJhbSBpbmxlbiAgICBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIHRvIHNpZ24KKyAgQHBhcmFtIHIgICAgICAgIFRoZSAiciIgaW50ZWdlciBvZiB0aGUgc2lnbmF0dXJlIChjYWxsZXIgbXVzdCBpbml0aWFsaXplIHdpdGggbXBfaW5pdCgpIGZpcnN0KQorICBAcGFyYW0gcyAgICAgICAgVGhlICJzIiBpbnRlZ2VyIG9mIHRoZSBzaWduYXR1cmUgKGNhbGxlciBtdXN0IGluaXRpYWxpemUgd2l0aCBtcF9pbml0KCkgZmlyc3QpCisgIEBwYXJhbSBwcm5nICAgICBBbiBhY3RpdmUgUFJORyBzdGF0ZQorICBAcGFyYW0gd3BybmcgICAgVGhlIGluZGV4IG9mIHRoZSBQUk5HIGRlc2lyZWQKKyAgQHBhcmFtIGtleSAgICAgIEEgcHJpdmF0ZSBEU0Ega2V5CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBkc2Ffc2lnbl9oYXNoX3Jhdyhjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAqciwgICB2b2lkICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgZHNhX2tleSAqa2V5KQoreworICAgdm9pZCAgICAgICAgICprLCAqa2ludiwgKnRtcDsKKyAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKKyAgIGludCAgICAgICAgICAgIGVycjsKKworICAgTFRDX0FSR0NISyhpbiAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHIgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsocyAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7CisKKyAgIGlmICgoZXJyID0gcHJuZ19pc192YWxpZCh3cHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaWYgKGtleS0+dHlwZSAhPSBQS19QUklWQVRFKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfTk9UX1BSSVZBVEU7CisgICB9CisKKyAgIC8qIGNoZWNrIGdyb3VwIG9yZGVyIHNpemUgICovCisgICBpZiAoa2V5LT5xb3JkID49IE1EU0FfTUFYX0dST1VQKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIGJ1ZiA9IFhNQUxMT0MoTURTQV9NQVhfR1JPVVApOworICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICAvKiBJbml0IG91ciB0ZW1wcyAqLworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZrLCAma2ludiwgJnRtcCwgTlVMTCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIEVSUkJVRjsgfQorCityZXRyeToKKworICAgZG8geworICAgICAgLyogZ2VuIHJhbmRvbSBrICovCisgICAgICBpZiAocHJuZ19kZXNjcmlwdG9yW3dwcm5nXS5yZWFkKGJ1Ziwga2V5LT5xb3JkLCBwcm5nKSAhPSAodW5zaWduZWQgbG9uZylrZXktPnFvcmQpIHsKKyAgICAgICAgIGVyciA9IENSWVBUX0VSUk9SX1JFQURQUk5HOworICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgIH0KKworICAgICAgLyogcmVhZCBrICovCisgICAgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKGssIGJ1Ziwga2V5LT5xb3JkKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgICAgLyogayA+IDEgPyAqLworICAgICAgaWYgKG1wX2NtcF9kKGssIDEpICE9IExUQ19NUF9HVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIHJldHJ5OyB9CisKKyAgICAgIC8qIHRlc3QgZ2NkICovCisgICAgICBpZiAoKGVyciA9IG1wX2djZChrLCBrZXktPnEsIHRtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIH0gd2hpbGUgKG1wX2NtcF9kKHRtcCwgMSkgIT0gTFRDX01QX0VRKTsKKworICAgLyogbm93IGZpbmQgMS9rIG1vZCBxICovCisgICBpZiAoKGVyciA9IG1wX2ludm1vZChrLCBrZXktPnEsIGtpbnYpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgLyogbm93IGZpbmQgciA9IGdeayBtb2QgcCBtb2QgcSAqLworICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKGtleS0+Zywgaywga2V5LT5wLCByKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX21vZChyLCBrZXktPnEsIHIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgaWYgKG1wX2lzemVybyhyKSA9PSBMVENfTVBfWUVTKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIHJldHJ5OyB9CisKKyAgIC8qIG5vdyBmaW5kIHMgPSAoaW4gKyB4cikvayBtb2QgcSAqLworICAgaWYgKChlcnIgPSBtcF9yZWFkX3Vuc2lnbmVkX2Jpbih0bXAsICh1bnNpZ25lZCBjaGFyICopaW4sIGlubGVuKSkgIT0gQ1JZUFRfT0spICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX211bChrZXktPngsIHIsIHMpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfYWRkKHMsIHRtcCwgcykpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9tdWxtb2Qocywga2ludiwga2V5LT5xLCBzKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIGlmIChtcF9pc3plcm8ocykgPT0gTFRDX01QX1lFUykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byByZXRyeTsgfQorCisgICBlcnIgPSBDUllQVF9PSzsKK2Vycm9yOiAKKyAgIG1wX2NsZWFyX211bHRpKGssIGtpbnYsIHRtcCwgTlVMTCk7CitFUlJCVUY6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGJ1ZiwgTURTQV9NQVhfR1JPVVApOworI2VuZGlmCisgICBYRlJFRShidWYpOworICAgcmV0dXJuIGVycjsKK30KKworLyoqCisgIFNpZ24gYSBoYXNoIHdpdGggRFNBCisgIEBwYXJhbSBpbiAgICAgICBUaGUgaGFzaCB0byBzaWduCisgIEBwYXJhbSBpbmxlbiAgICBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIHRvIHNpZ24KKyAgQHBhcmFtIG91dCAgICAgIFtvdXRdIFdoZXJlIHRvIHN0b3JlIHRoZSBzaWduYXR1cmUKKyAgQHBhcmFtIG91dGxlbiAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHNpZ25hdHVyZQorICBAcGFyYW0gcHJuZyAgICAgQW4gYWN0aXZlIFBSTkcgc3RhdGUKKyAgQHBhcmFtIHdwcm5nICAgIFRoZSBpbmRleCBvZiB0aGUgUFJORyBkZXNpcmVkCisgIEBwYXJhbSBrZXkgICAgICBBIHByaXZhdGUgRFNBIGtleQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZHNhX3NpZ25faGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgZHNhX2tleSAqa2V5KQoreworICAgdm9pZCAgICAgICAgICpyLCAqczsKKyAgIGludCAgICAgICAgICAgZXJyOworCisgICBMVENfQVJHQ0hLKGluICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAgICAgIT0gTlVMTCk7CisKKyAgIGlmIChtcF9pbml0X211bHRpKCZyLCAmcywgTlVMTCkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIGlmICgoZXJyID0gZHNhX3NpZ25faGFzaF9yYXcoaW4sIGlubGVuLCByLCBzLCBwcm5nLCB3cHJuZywga2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gZXJyb3I7CisgICB9CisKKyAgIGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkob3V0LCBvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIHMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAwVUwsIE5VTEwpOworCitlcnJvcjoKKyAgIG1wX2NsZWFyX211bHRpKHIsIHMsIE5VTEwpOworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX3NpZ25faGFzaC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEyICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIyOjI3OjU2ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX3ZlcmlmeV9oYXNoLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV92ZXJpZnlfaGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlOGZmMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV92ZXJpZnlfaGFzaC5jCkBAIC0wLDAgKzEsMTI2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICAgQGZpbGUgZHNhX3ZlcmlmeV9oYXNoLmMKKyAgIERTQSBpbXBsZW1lbnRhdGlvbiwgdmVyaWZ5IGEgc2lnbmF0dXJlLCBUb20gU3QgRGVuaXMKKyovCisKKworI2lmZGVmIE1EU0EKKworLyoqCisgIFZlcmlmeSBhIERTQSBzaWduYXR1cmUKKyAgQHBhcmFtIHIgICAgICAgIERTQSAiciIgcGFyYW1ldGVyCisgIEBwYXJhbSBzICAgICAgICBEU0EgInMiIHBhcmFtZXRlcgorICBAcGFyYW0gaGFzaCAgICAgVGhlIGhhc2ggdGhhdCB3YXMgc2lnbmVkCisgIEBwYXJhbSBoYXNobGVuICBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIHRoYXQgd2FzIHNpZ25lZAorICBAcGFyYW0gc3RhdCAgICAgW291dF0gVGhlIHJlc3VsdCBvZiB0aGUgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiwgMT09dmFsaWQsIDA9PWludmFsaWQKKyAgQHBhcmFtIGtleSAgICAgIFRoZSBjb3JyZXNwb25kaW5nIHB1YmxpYyBESCBrZXkKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsIChldmVuIGlmIHRoZSBzaWduYXR1cmUgaXMgaW52YWxpZCkKKyovCitpbnQgZHNhX3ZlcmlmeV9oYXNoX3JhdyggICAgICAgICB2b2lkICAgKnIsICAgICAgICAgIHZvaWQgICAqcywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaGFzaCwgdW5zaWduZWQgbG9uZyBoYXNobGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc3RhdCwgICAgICBkc2Ffa2V5ICprZXkpCit7CisgICB2b2lkICAgICAgICAgICp3LCAqdiwgKnUxLCAqdTI7CisgICBpbnQgICAgICAgICAgIGVycjsKKworICAgTFRDX0FSR0NISyhyICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhzICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhzdGF0ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICE9IE5VTEwpOworCisgICAvKiBkZWZhdWx0IHRvIGludmFsaWQgc2lnbmF0dXJlICovCisgICAqc3RhdCA9IDA7CisKKyAgIC8qIGluaXQgb3VyIHZhcmlhYmxlcyAqLworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ3LCAmdiwgJnUxLCAmdTIsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogbmVpdGhlciByIG9yIHMgY2FuIGJlIG51bGwgb3IgPnEqLworICAgaWYgKG1wX2lzemVybyhyKSA9PSBMVENfTVBfWUVTIHx8IG1wX2lzemVybyhzKSA9PSBMVENfTVBfWUVTIHx8IG1wX2NtcChyLCBrZXktPnEpICE9IExUQ19NUF9MVCB8fCBtcF9jbXAocywga2V5LT5xKSAhPSBMVENfTVBfTFQpIHsKKyAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgZ290byBlcnJvcjsKKyAgIH0KKyAgIAorICAgLyogdyA9IDEvcyBtb2QgcSAqLworICAgaWYgKChlcnIgPSBtcF9pbnZtb2Qocywga2V5LT5xLCB3KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qIHUxID0gbSAqIHcgbW9kIHEgKi8KKyAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4odTEsICh1bnNpZ25lZCBjaGFyICopaGFzaCwgaGFzaGxlbikpICE9IENSWVBUX09LKSAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9tdWxtb2QodTEsIHcsIGtleS0+cSwgdTEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qIHUyID0gcip3IG1vZCBxICovCisgICBpZiAoKGVyciA9IG1wX211bG1vZChyLCB3LCBrZXktPnEsIHUyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0gCisKKyAgIC8qIHYgPSBnXnUxICogeV51MiBtb2QgcCBtb2QgcSAqLworICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKGtleS0+ZywgdTEsIGtleS0+cCwgdTEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX2V4cHRtb2Qoa2V5LT55LCB1Miwga2V5LT5wLCB1MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfbXVsbW9kKHUxLCB1Miwga2V5LT5wLCB2KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9tb2Qodiwga2V5LT5xLCB2KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qIGlmIHIgPSB2IHRoZW4gd2UncmUgc2V0ICovCisgICBpZiAobXBfY21wKHIsIHYpID09IExUQ19NUF9FUSkgeworICAgICAgKnN0YXQgPSAxOworICAgfQorCisgICBlcnIgPSBDUllQVF9PSzsKK2Vycm9yOgorICAgbXBfY2xlYXJfbXVsdGkodywgdiwgdTEsIHUyLCBOVUxMKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKy8qKgorICBWZXJpZnkgYSBEU0Egc2lnbmF0dXJlCisgIEBwYXJhbSBzaWcgICAgICBUaGUgc2lnbmF0dXJlCisgIEBwYXJhbSBzaWdsZW4gICBUaGUgbGVuZ3RoIG9mIHRoZSBzaWduYXR1cmUgKG9jdGV0cykKKyAgQHBhcmFtIGhhc2ggICAgIFRoZSBoYXNoIHRoYXQgd2FzIHNpZ25lZAorICBAcGFyYW0gaGFzaGxlbiAgVGhlIGxlbmd0aCBvZiB0aGUgaGFzaCB0aGF0IHdhcyBzaWduZWQKKyAgQHBhcmFtIHN0YXQgICAgIFtvdXRdIFRoZSByZXN1bHQgb2YgdGhlIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24sIDE9PXZhbGlkLCAwPT1pbnZhbGlkCisgIEBwYXJhbSBrZXkgICAgICBUaGUgY29ycmVzcG9uZGluZyBwdWJsaWMgREgga2V5CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCAoZXZlbiBpZiB0aGUgc2lnbmF0dXJlIGlzIGludmFsaWQpCisqLworaW50IGRzYV92ZXJpZnlfaGFzaChjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsIHVuc2lnbmVkIGxvbmcgc2lnbGVuLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCB1bnNpZ25lZCBsb25nIGhhc2hsZW4sIAorICAgICAgICAgICAgICAgICAgICBpbnQgKnN0YXQsIGRzYV9rZXkgKmtleSkKK3sKKyAgIGludCAgICBlcnI7CisgICB2b2lkICAgKnIsICpzOworCisgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnIsICZzLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIC8qIGRlY29kZSB0aGUgc2VxdWVuY2UgKi8KKyAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShzaWcsIHNpZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgMFVMLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogZG8gdGhlIG9wICovCisgICBlcnIgPSBkc2FfdmVyaWZ5X2hhc2hfcmF3KHIsIHMsIGhhc2gsIGhhc2hsZW4sIHN0YXQsIGtleSk7CisKK0xCTF9FUlI6CisgICBtcF9jbGVhcl9tdWx0aShyLCBzLCBOVUxMKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX3ZlcmlmeV9oYXNoLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTMgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDM6MTg6NDMgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfdmVyaWZ5X2tleS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2RzYS9kc2FfdmVyaWZ5X2tleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MDU0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZHNhL2RzYV92ZXJpZnlfa2V5LmMKQEAgLTAsMCArMSwxMDAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBkc2FfdmVyaWZ5X2tleS5jCisgICBEU0EgaW1wbGVtZW50YXRpb24sIHZlcmlmeSBhIGtleSwgVG9tIFN0IERlbmlzCisqLworCisjaWZkZWYgTURTQQorCisvKioKKyAgIFZlcmlmeSBhIERTQSBrZXkgZm9yIHZhbGlkaXR5CisgICBAcGFyYW0ga2V5ICAgVGhlIGtleSB0byB2ZXJpZnkKKyAgIEBwYXJhbSBzdGF0ICBbb3V0XSAgUmVzdWx0IG9mIHRlc3QsIDE9PXZhbGlkLCAwPT1pbnZhbGlkCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZHNhX3ZlcmlmeV9rZXkoZHNhX2tleSAqa2V5LCBpbnQgKnN0YXQpCit7CisgICB2b2lkICAgKnRtcCwgKnRtcDI7CisgICBpbnQgICAgcmVzLCBlcnI7CisKKyAgIExUQ19BUkdDSEsoa2V5ICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoc3RhdCAhPSBOVUxMKTsKKworICAgLyogZGVmYXVsdCB0byBhbiBpbnZhbGlkIGtleSAqLworICAgKnN0YXQgPSAwOworCisgICAvKiBmaXJzdCBtYWtlIHN1cmUga2V5LT5xIGFuZCBrZXktPnAgYXJlIHByaW1lICovCisgICBpZiAoKGVyciA9IG1wX3ByaW1lX2lzX3ByaW1lKGtleS0+cSwgOCwgJnJlcykpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICByZXR1cm4gQ1JZUFRfT0s7CisgICB9CisKKyAgIGlmICgoZXJyID0gbXBfcHJpbWVfaXNfcHJpbWUoa2V5LT5wLCA4LCAmcmVzKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBpZiAocmVzID09IDApIHsKKyAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgIH0KKworICAgLyogbm93IG1ha2Ugc3VyZSB0aGF0IGcgaXMgbm90IC0xLCAwIG9yIDEgYW5kIDxwICovCisgICBpZiAobXBfY21wX2Qoa2V5LT5nLCAwKSA9PSBMVENfTVBfRVEgfHwgbXBfY21wX2Qoa2V5LT5nLCAxKSA9PSBMVENfTVBfRVEpIHsKKyAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgIH0KKyAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmdG1wLCAmdG1wMiwgTlVMTCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgIHsgcmV0dXJuIGVycjsgfQorICAgaWYgKChlcnIgPSBtcF9zdWJfZChrZXktPnAsIDEsIHRtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAobXBfY21wKHRtcCwga2V5LT5nKSA9PSBMVENfTVBfRVEgfHwgbXBfY21wKGtleS0+Zywga2V5LT5wKSAhPSBMVENfTVBfTFQpIHsKKyAgICAgIGVyciA9IENSWVBUX09LOworICAgICAgZ290byBlcnJvcjsKKyAgIH0KKworICAgLyogMSA8IHkgPCBwLTEgKi8KKyAgIGlmICghKG1wX2NtcF9kKGtleS0+eSwgMSkgPT0gTFRDX01QX0dUICYmIG1wX2NtcChrZXktPnksIHRtcCkgPT0gTFRDX01QX0xUKSkgeworICAgICAgZXJyID0gQ1JZUFRfT0s7CisgICAgICBnb3RvIGVycm9yOworICAgfQorCisgICAvKiBub3cgd2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCBnXnEgPSAxLCBhbmQgdGhhdCBwLTEvcSBnaXZlcyAwIHJlbWFpbmRlciAqLworICAgaWYgKChlcnIgPSBtcF9kaXYodG1wLCBrZXktPnEsIHRtcCwgdG1wMikpICE9IENSWVBUX09LKSAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmIChtcF9pc3plcm8odG1wMikgIT0gTFRDX01QX1lFUykgeworICAgICAgZXJyID0gQ1JZUFRfT0s7CisgICAgICBnb3RvIGVycm9yOworICAgfQorCisgICBpZiAoKGVyciA9IG1wX2V4cHRtb2Qoa2V5LT5nLCBrZXktPnEsIGtleS0+cCwgdG1wKSkgIT0gQ1JZUFRfT0spICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKG1wX2NtcF9kKHRtcCwgMSkgIT0gTFRDX01QX0VRKSB7CisgICAgICBlcnIgPSBDUllQVF9PSzsKKyAgICAgIGdvdG8gZXJyb3I7CisgICB9CisKKyAgIC8qIG5vdyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IHlecSA9IDEsIHRoaXMgbWFrZXMgc3VyZSB5IFxpbiBnXnggbW9kIHAgKi8KKyAgIGlmICgoZXJyID0gbXBfZXhwdG1vZChrZXktPnksIGtleS0+cSwga2V5LT5wLCB0bXApKSAhPSBDUllQVF9PSykgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAobXBfY21wX2QodG1wLCAxKSAhPSBMVENfTVBfRVEpIHsKKyAgICAgIGVyciA9IENSWVBUX09LOworICAgICAgZ290byBlcnJvcjsKKyAgIH0KKworICAgLyogYXQgdGhpcyBwb2ludCB3ZSBhcmUgb3V0IG9mIHRlc3RzIDstKCAqLworICAgZXJyICAgPSBDUllQVF9PSzsKKyAgICpzdGF0ID0gMTsKK2Vycm9yOiAKKyAgIG1wX2NsZWFyX211bHRpKHRtcCwgdG1wMiwgTlVMTCk7CisgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9kc2EvZHNhX3ZlcmlmeV9rZXkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS42ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAzOjE4OjQzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYmJlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjYy5jCkBAIC0wLDAgKzEsMTI3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBlY2MuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyogVGhpcyBob2xkcyB0aGUga2V5IHNldHRpbmdzLiAgKioqTVVTVCoqKiBiZSBvcmdhbml6ZWQgYnkgc2l6ZSBmcm9tIHNtYWxsZXN0IHRvIGxhcmdlc3QuICovCitjb25zdCBsdGNfZWNjX3NldF90eXBlIGx0Y19lY2Nfc2V0c1tdID0geworI2lmZGVmIEVDQzExMgoreworICAgICAgICAxNCwKKyAgICAgICAgIlNFQ1AxMTJSMSIsCisgICAgICAgICJEQjdDMkFCRjYyRTM1RTY2ODA3NkJFQUQyMDhCIiwKKyAgICAgICAgIjY1OUVGOEJBMDQzOTE2RUVERTg5MTE3MDJCMjIiLAorICAgICAgICAiREI3QzJBQkY2MkUzNUU3NjI4REZBQzY1NjFDNSIsCisgICAgICAgICIwOTQ4NzIzOTk5NUE1RUU3NkI1NUY5QzJGMDk4IiwKKyAgICAgICAgIkE4OUNFNUFGODcyNEMwQTIzRTBFMEZGNzc1MDAiCit9LAorI2VuZGlmCisjaWZkZWYgRUNDMTI4Cit7CisgICAgICAgIDE2LAorICAgICAgICAiU0VDUDEyOFIxIiwKKyAgICAgICAgIkZGRkZGRkZERkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIiwKKyAgICAgICAgIkU4NzU3OUMxMTA3OUY0M0REODI0OTkzQzJDRUU1RUQzIiwKKyAgICAgICAgIkZGRkZGRkZFMDAwMDAwMDA3NUEzMEQxQjkwMzhBMTE1IiwKKyAgICAgICAgIjE2MUZGNzUyOEI4OTlCMkQwQzI4NjA3Q0E1MkM1Qjg2IiwKKyAgICAgICAgIkNGNUFDODM5NUJBRkVCMTNDMDJEQTI5MkRERUQ3QTgzIiwKK30sCisjZW5kaWYKKyNpZmRlZiBFQ0MxNjAKK3sKKyAgICAgICAgMjAsCisgICAgICAgICJTRUNQMTYwUjEiLAorICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY3RkZGRkZGRiIsCisgICAgICAgICIxQzk3QkVGQzU0QkQ3QThCNjVBQ0Y4OUY4MUQ0RDRBREM1NjVGQTQ1IiwKKyAgICAgICAgIjAxMDAwMDAwMDAwMDAwMDAwMDAwMDFGNEM4RjkyN0FFRDNDQTc1MjI1NyIsCisgICAgICAgICI0QTk2QjU2ODhFRjU3MzI4NDY2NDY5ODk2OEMzOEJCOTEzQ0JGQzgyIiwKKyAgICAgICAgIjIzQTYyODU1MzE2ODk0N0Q1OURDQzkxMjA0MjM1MTM3N0FDNUZCMzIiLAorfSwKKyNlbmRpZgorI2lmZGVmIEVDQzE5MgoreworICAgICAgICAyNCwKKyAgICAgICAgIkVDQy0xOTIiLAorICAgICAgICAiRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkVGRkZGRkZGRkZGRkZGRkZGIiwKKyAgICAgICAgIjY0MjEwNTE5RTU5QzgwRTcwRkE3RTlBQjcyMjQzMDQ5RkVCOERFRUNDMTQ2QjlCMSIsCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY5OURFRjgzNjE0NkJDOUIxQjREMjI4MzEiLAorICAgICAgICAiMTg4REE4MEVCMDMwOTBGNjdDQkYyMEVCNDNBMTg4MDBGNEZGMEFGRDgyRkYxMDEyIiwKKyAgICAgICAgIjcxOTJCOTVGRkM4REE3ODYzMTAxMUVENkIyNENERDU3M0Y5NzdBMTFFNzk0ODExIiwKK30sCisjZW5kaWYKKyNpZmRlZiBFQ0MyMjQKK3sKKyAgICAgICAgMjgsCisgICAgICAgICJFQ0MtMjI0IiwKKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIiwKKyAgICAgICAgIkI0MDUwQTg1MEMwNEIzQUJGNTQxMzI1NjUwNDRCMEI3RDdCRkQ4QkEyNzBCMzk0MzIzNTVGRkI0IiwKKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYxNkEyRTBCOEYwM0UxM0REMjk0NTVDNUMyQTNEIiwKKyAgICAgICAgIkI3MEUwQ0JENkJCNEJGN0YzMjEzOTBCOTRBMDNDMUQzNTZDMjExMjIzNDMyODBENjExNUMxRDIxIiwKKyAgICAgICAgIkJEMzc2Mzg4QjVGNzIzRkI0QzIyREZFNkNENDM3NUEwNUEwNzQ3NjQ0NEQ1ODE5OTg1MDA3RTM0IiwKK30sCisjZW5kaWYKKyNpZmRlZiBFQ0MyNTYKK3sKKyAgICAgICAgMzIsCisgICAgICAgICJFQ0MtMjU2IiwKKyAgICAgICAgIkZGRkZGRkZGMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYiLAorICAgICAgICAiNUFDNjM1RDhBQTNBOTNFN0IzRUJCRDU1NzY5ODg2QkM2NTFEMDZCMENDNTNCMEY2M0JDRTNDM0UyN0QyNjA0QiIsCisgICAgICAgICJGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkZGRkZGRkZGRkJDRTZGQUFEQTcxNzlFODRGM0I5Q0FDMkZDNjMyNTUxIiwKKyAgICAgICAgIjZCMTdEMUYyRTEyQzQyNDdGOEJDRTZFNTYzQTQ0MEYyNzcwMzdEODEyREVCMzNBMEY0QTEzOTQ1RDg5OEMyOTYiLAorICAgICAgICAiNEZFMzQyRTJGRTFBN0Y5QjhFRTdFQjRBN0MwRjlFMTYyQkNFMzM1NzZCMzE1RUNFQ0JCNjQwNjgzN0JGNTFGNSIsCit9LAorI2VuZGlmCisjaWZkZWYgRUNDMzg0Cit7CisgICAgICAgIDQ4LAorICAgICAgICAiRUNDLTM4NCIsCisgICAgICAgICJGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZFRkZGRkZGRkYwMDAwMDAwMDAwMDAwMDAwRkZGRkZGRkYiLAorICAgICAgICAiQjMzMTJGQTdFMjNFRTdFNDk4OEUwNTZCRTNGODJEMTkxODFEOUM2RUZFODE0MTEyMDMxNDA4OEY1MDEzODc1QUM2NTYzOThEOEEyRUQxOUQyQTg1QzhFREQzRUMyQUVGIiwKKyAgICAgICAgIkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkM3NjM0RDgxRjQzNzJEREY1ODFBMERCMjQ4QjBBNzdBRUNFQzE5NkFDQ0M1Mjk3MyIsCisgICAgICAgICJBQTg3Q0EyMkJFOEIwNTM3OEVCMUM3MUVGMzIwQUQ3NDZFMUQzQjYyOEJBNzlCOTg1OUY3NDFFMDgyNTQyQTM4NTUwMkYyNURCRjU1Mjk2QzNBNTQ1RTM4NzI3NjBBQjciLAorICAgICAgICAiMzYxN0RFNEE5NjI2MkM2RjVEOUU5OEJGOTI5MkRDMjlGOEY0MURCRDI4OUExNDdDRTlEQTMxMTNCNUYwQjhDMDBBNjBCMUNFMUQ3RTgxOUQ3QTQzMUQ3QzkwRUEwRTVGIiwKK30sCisjZW5kaWYKKyNpZmRlZiBFQ0M1MjEKK3sKKyAgICAgICAgNjYsCisgICAgICAgICJFQ0MtNTIxIiwKKyAgICAgICAgIjFGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGIiwKKyAgICAgICAgIjUxOTUzRUI5NjE4RTFDOUExRjkyOUEyMUEwQjY4NTQwRUVBMkRBNzI1Qjk5QjMxNUYzQjhCNDg5OTE4RUYxMDlFMTU2MTkzOTUxRUM3RTkzN0IxNjUyQzBCRDNCQjFCRjA3MzU3M0RGODgzRDJDMzRGMUVGNDUxRkQ0NkI1MDNGMDAiLAorICAgICAgICAiMUZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQTUxODY4NzgzQkYyRjk2NkI3RkNDMDE0OEY3MDlBNUQwM0JCNUM5Qjg4OTlDNDdBRUJCNkZCNzFFOTEzODY0MDkiLAorICAgICAgICAiQzY4NThFMDZCNzA0MDRFOUNEOUUzRUNCNjYyMzk1QjQ0MjlDNjQ4MTM5MDUzRkI1MjFGODI4QUY2MDZCNEQzREJBQTE0QjVFNzdFRkU3NTkyOEZFMURDMTI3QTJGRkE4REUzMzQ4QjNDMTg1NkE0MjlCRjk3RTdFMzFDMkU1QkQ2NiIsCisgICAgICAgICIxMTgzOTI5NkE3ODlBM0JDMDA0NUM4QTVGQjQyQzdEMUJEOTk4RjU0NDQ5NTc5QjQ0NjgxN0FGQkQxNzI3M0U2NjJDOTdFRTcyOTk1RUY0MjY0MEM1NTBCOTAxM0ZBRDA3NjEzNTNDNzA4NkEyNzJDMjQwODhCRTk0NzY5RkQxNjY1MCIsCit9LAorI2VuZGlmCit7CisgICAwLAorICAgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTAorfQorfTsKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMzggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDcgMjM6MTQ6MjggJCAqLworCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfZXhwb3J0LmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfZXhwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzMjkxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX2Fuc2lfeDk2M19leHBvcnQuYwpAQCAtMCwwICsxLDcyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBlY2NfYW5zaV94OTYzX2V4cG9ydC5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUVDQworCisvKiogRUNDIFg5LjYzIChTZWMuIDQuMy42KSB1bmNvbXByZXNzZWQgZXhwb3J0CisgIEBwYXJhbSBrZXkgICAgIEtleSB0byBleHBvcnQKKyAgQHBhcmFtIG91dCAgICAgW291dF0gZGVzdGluYXRpb24gb2YgZXhwb3J0CisgIEBwYXJhbSBvdXRsZW4gIFtpbi9vdXRdICBMZW5ndGggb2YgZGVzdGluYXRpb24gYW5kIGZpbmFsIG91dHB1dCBzaXplCisgIFJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGVjY19hbnNpX3g5NjNfZXhwb3J0KGVjY19rZXkgKmtleSwgdW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisgICB1bnNpZ25lZCBjaGFyIGJ1ZltFQ0NfQlVGX1NJWkVdOworICAgdW5zaWduZWQgbG9uZyBudW1sZW47CisKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgaWYgKGx0Y19lY2NfaXNfdmFsaWRfaWR4KGtleS0+aWR4KSA9PSAwKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisgICBudW1sZW4gPSBrZXktPmRwLT5zaXplOworCisgICBpZiAoKm91dGxlbiA8ICgxICsgMipudW1sZW4pKSB7CisgICAgICAqb3V0bGVuID0gMSArIDIqbnVtbGVuOworICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgIH0KKworICAgLyogc3RvcmUgYnl0ZSAweDA0ICovCisgICBvdXRbMF0gPSAweDA0OworCisgICAvKiBwYWQgYW5kIHN0b3JlIHggKi8KKyAgIHplcm9tZW0oYnVmLCBzaXplb2YoYnVmKSk7CisgICBtcF90b191bnNpZ25lZF9iaW4oa2V5LT5wdWJrZXkueCwgYnVmICsgKG51bWxlbiAtIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS0+cHVia2V5LngpKSk7CisgICBYTUVNQ1BZKG91dCsxLCBidWYsIG51bWxlbik7CisKKyAgIC8qIHBhZCBhbmQgc3RvcmUgeSAqLworICAgemVyb21lbShidWYsIHNpemVvZihidWYpKTsKKyAgIG1wX3RvX3Vuc2lnbmVkX2JpbihrZXktPnB1YmtleS55LCBidWYgKyAobnVtbGVuIC0gbXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5wdWJrZXkueSkpKTsKKyAgIFhNRU1DUFkob3V0KzErbnVtbGVuLCBidWYsIG51bWxlbik7CisKKyAgICpvdXRsZW4gPSAxICsgMipudW1sZW47CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfZXhwb3J0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMjo1MDoxMSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfaW1wb3J0LmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfaW1wb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkyZjVmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX2Fuc2lfeDk2M19pbXBvcnQuYwpAQCAtMCwwICsxLDEwNCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZWNjX2Fuc2lfeDk2M19pbXBvcnQuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyoqIEltcG9ydCBhbiBBTlNJIFg5LjYzIGZvcm1hdCBwdWJsaWMga2V5IAorICBAcGFyYW0gaW4gICAgICBUaGUgaW5wdXQgZGF0YSB0byByZWFkCisgIEBwYXJhbSBpbmxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIGlucHV0IGRhdGEKKyAgQHBhcmFtIGtleSAgICAgW291dF0gZGVzdGluYXRpb24gdG8gc3RvcmUgaW1wb3J0ZWQga2V5IFwKKyovCitpbnQgZWNjX2Fuc2lfeDk2M19pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIGVjY19rZXkgKmtleSkKK3sKKyAgIHJldHVybiBlY2NfYW5zaV94OTYzX2ltcG9ydF9leChpbiwgaW5sZW4sIGtleSwgTlVMTCk7Cit9CisKK2ludCBlY2NfYW5zaV94OTYzX2ltcG9ydF9leChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgZWNjX2tleSAqa2V5LCBsdGNfZWNjX3NldF90eXBlICpkcCkKK3sKKyAgIGludCB4LCBlcnI7CisgCisgICBMVENfQVJHQ0hLKGluICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICE9IE5VTEwpOworICAgCisgICAvKiBtdXN0IGJlIG9kZCAqLworICAgaWYgKChpbmxlbiAmIDEpID09IDApIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgLyogaW5pdCBrZXkgKi8KKyAgIGlmIChtcF9pbml0X211bHRpKCZrZXktPnB1YmtleS54LCAma2V5LT5wdWJrZXkueSwgJmtleS0+cHVia2V5LnosICZrZXktPmssIE5VTEwpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICAvKiBjaGVjayBmb3IgNCwgNiBvciA3ICovCisgICBpZiAoaW5bMF0gIT0gNCAmJiBpblswXSAhPSA2ICYmIGluWzBdICE9IDcpIHsKKyAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgZ290byBlcnJvcjsKKyAgIH0KKworICAgLyogcmVhZCBkYXRhICovCisgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKGtleS0+cHVia2V5LngsICh1bnNpZ25lZCBjaGFyICopaW4rMSwgKGlubGVuLTEpPj4xKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gZXJyb3I7CisgICB9CisKKyAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4oa2V5LT5wdWJrZXkueSwgKHVuc2lnbmVkIGNoYXIgKilpbisxKygoaW5sZW4tMSk+PjEpLCAoaW5sZW4tMSk+PjEpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBlcnJvcjsKKyAgIH0KKyAgIGlmICgoZXJyID0gbXBfc2V0KGtleS0+cHVia2V5LnosIDEpKSAhPSBDUllQVF9PSykgeyBnb3RvIGVycm9yOyB9CisKKyAgIGlmIChkcCA9PSBOVUxMKSB7CisgICAgIC8qIGRldGVybWluZSB0aGUgaWR4ICovCisgICAgICBmb3IgKHggPSAwOyBsdGNfZWNjX3NldHNbeF0uc2l6ZSAhPSAwOyB4KyspIHsKKyAgICAgICAgIGlmICgodW5zaWduZWQpbHRjX2VjY19zZXRzW3hdLnNpemUgPj0gKChpbmxlbi0xKT4+MSkpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgfQorICAgICAgfQorICAgICAgaWYgKGx0Y19lY2Nfc2V0c1t4XS5zaXplID09IDApIHsKKyAgICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgIH0KKyAgICAgIC8qIHNldCB0aGUgaWR4ICovCisgICAgICBrZXktPmlkeCAgPSB4OworICAgICAga2V5LT5kcCA9ICZsdGNfZWNjX3NldHNbeF07CisgICB9IGVsc2UgeworICAgICAgaWYgKCgoaW5sZW4tMSk+PjEpICE9ICh1bnNpZ25lZCBsb25nKSBkcC0+c2l6ZSkgeworICAgICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICAgICBnb3RvIGVycm9yOworICAgICAgfQorICAgICAga2V5LT5pZHggPSAtMTsKKyAgICAgIGtleS0+ZHAgID0gZHA7CisgICB9CisgICBrZXktPnR5cGUgPSBQS19QVUJMSUM7CisKKyAgIC8qIHdlJ3JlIGRvbmUgKi8KKyAgIHJldHVybiBDUllQVF9PSzsKK2Vycm9yOgorICAgbXBfY2xlYXJfbXVsdGkoa2V5LT5wdWJrZXkueCwga2V5LT5wdWJrZXkueSwga2V5LT5wdWJrZXkueiwga2V5LT5rLCBOVUxMKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19hbnNpX3g5NjNfaW1wb3J0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOSAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMjoxNzo0NiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19kZWNyeXB0X2tleS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfZGVjcnlwdF9rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjU2MjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfZGVjcnlwdF9rZXkuYwpAQCAtMCwwICsxLDE1MCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZWNjX2RlY3J5cHRfa2V5LmMKKyAgRUNDIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRUNDCisKKy8qKgorICBEZWNyeXB0IGFuIEVDQyBlbmNyeXB0ZWQga2V5CisgIEBwYXJhbSBpbiAgICAgICBUaGUgY2lwaGVydGV4dAorICBAcGFyYW0gaW5sZW4gICAgVGhlIGxlbmd0aCBvZiB0aGUgY2lwaGVydGV4dCAob2N0ZXRzKQorICBAcGFyYW0gb3V0ICAgICAgW291dF0gVGhlIHBsYWludGV4dAorICBAcGFyYW0gb3V0bGVuICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgcGxhaW50ZXh0CisgIEBwYXJhbSBrZXkgICAgICBUaGUgY29ycmVzcG9uZGluZyBwcml2YXRlIEVDQyBrZXkKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGVjY19kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVjY19rZXkgKmtleSkKK3sKKyAgIHVuc2lnbmVkIGNoYXIgKmVjY19zaGFyZWQsICpza2V5LCAqcHViX2V4cHQ7CisgICB1bnNpZ25lZCBsb25nICB4LCB5LCBoYXNoT0lEWzMyXTsKKyAgIGludCAgICAgICAgICAgIGhhc2gsIGVycjsKKyAgIGVjY19rZXkgICAgICAgIHB1YmtleTsKKyAgIGx0Y19hc24xX2xpc3QgIGRlY29kZVszXTsKKworICAgTFRDX0FSR0NISyhpbiAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7CisKKyAgIC8qIHJpZ2h0IGtleSB0eXBlPyAqLworICAgaWYgKGtleS0+dHlwZSAhPSBQS19QUklWQVRFKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfTk9UX1BSSVZBVEU7CisgICB9CisgICAKKyAgIC8qIGRlY29kZSB0byBmaW5kIG91dCBoYXNoICovCisgICBMVENfU0VUX0FTTjEoZGVjb2RlLCAwLCBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUiwgaGFzaE9JRCwgc2l6ZW9mKGhhc2hPSUQpL3NpemVvZihoYXNoT0lEWzBdKSk7CisgCisgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2UoaW4sIGlubGVuLCBkZWNvZGUsIDEpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaGFzaCA9IGZpbmRfaGFzaF9vaWQoaGFzaE9JRCwgZGVjb2RlWzBdLnNpemUpOyAgICAgICAgICAgICAgICAgICAKKyAgIGlmIChoYXNoX2lzX3ZhbGlkKGhhc2gpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICB9CisKKyAgIC8qIHdlIG5vdyBoYXZlIHRoZSBoYXNoISAqLworCisgICAvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KKyAgIHB1Yl9leHB0ICAgPSBYTUFMTE9DKEVDQ19CVUZfU0laRSk7CisgICBlY2Nfc2hhcmVkID0gWE1BTExPQyhFQ0NfQlVGX1NJWkUpOworICAgc2tleSAgICAgICA9IFhNQUxMT0MoTUFYQkxPQ0tTSVpFKTsKKyAgIGlmIChwdWJfZXhwdCA9PSBOVUxMIHx8IGVjY19zaGFyZWQgPT0gTlVMTCB8fCBza2V5ID09IE5VTEwpIHsKKyAgICAgIGlmIChwdWJfZXhwdCAhPSBOVUxMKSB7CisgICAgICAgICBYRlJFRShwdWJfZXhwdCk7CisgICAgICB9CisgICAgICBpZiAoZWNjX3NoYXJlZCAhPSBOVUxMKSB7CisgICAgICAgICBYRlJFRShlY2Nfc2hhcmVkKTsKKyAgICAgIH0KKyAgICAgIGlmIChza2V5ICE9IE5VTEwpIHsKKyAgICAgICAgIFhGUkVFKHNrZXkpOworICAgICAgfQorICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKyAgIExUQ19TRVRfQVNOMShkZWNvZGUsIDEsIExUQ19BU04xX09DVEVUX1NUUklORywgICAgICBwdWJfZXhwdCwgIEVDQ19CVUZfU0laRSk7CisgICBMVENfU0VUX0FTTjEoZGVjb2RlLCAyLCBMVENfQVNOMV9PQ1RFVF9TVFJJTkcsICAgICAgc2tleSwgICAgICBNQVhCTE9DS1NJWkUpOworCisgICAvKiByZWFkIHRoZSBzdHJ1Y3R1cmUgaW4gbm93ICovCisgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2UoaW4sIGlubGVuLCBkZWNvZGUsIDMpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiBpbXBvcnQgRUNDIGtleSBmcm9tIHBhY2tldCAqLworICAgaWYgKChlcnIgPSBlY2NfaW1wb3J0KGRlY29kZVsxXS5kYXRhLCBkZWNvZGVbMV0uc2l6ZSwgJnB1YmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIG1ha2Ugc2hhcmVkIGtleSAqLworICAgeCA9IEVDQ19CVUZfU0laRTsKKyAgIGlmICgoZXJyID0gZWNjX3NoYXJlZF9zZWNyZXQoa2V5LCAmcHVia2V5LCBlY2Nfc2hhcmVkLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICBlY2NfZnJlZSgmcHVia2V5KTsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKyAgIGVjY19mcmVlKCZwdWJrZXkpOworCisgICB5ID0gTUlOKEVDQ19CVUZfU0laRSwgTUFYQkxPQ0tTSVpFKTsKKyAgIGlmICgoZXJyID0gaGFzaF9tZW1vcnkoaGFzaCwgZWNjX3NoYXJlZCwgeCwgZWNjX3NoYXJlZCwgJnkpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiBlbnN1cmUgdGhlIGhhc2ggb2YgdGhlIHNoYXJlZCBzZWNyZXQgaXMgYXQgbGVhc3QgYXMgYmlnIGFzIHRoZSBlbmNyeXB0IGl0c2VsZiAqLworICAgaWYgKGRlY29kZVsyXS5zaXplID4geSkgeworICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIGF2b2lkIGJ1ZmZlciBvdmVyZmxvdyAqLworICAgaWYgKCpvdXRsZW4gPCBkZWNvZGVbMl0uc2l6ZSkgeworICAgICAgKm91dGxlbiA9IGRlY29kZVsyXS5zaXplOworICAgICAgZXJyID0gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiBEZWNyeXB0IHRoZSBrZXkgKi8KKyAgIGZvciAoeCA9IDA7IHggPCBkZWNvZGVbMl0uc2l6ZTsgeCsrKSB7CisgICAgIG91dFt4XSA9IHNrZXlbeF0gXiBlY2Nfc2hhcmVkW3hdOworICAgfQorICAgKm91dGxlbiA9IHg7CisKKyAgIGVyciA9IENSWVBUX09LOworTEJMX0VSUjoKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0ocHViX2V4cHQsICAgRUNDX0JVRl9TSVpFKTsKKyAgIHplcm9tZW0oZWNjX3NoYXJlZCwgRUNDX0JVRl9TSVpFKTsKKyAgIHplcm9tZW0oc2tleSwgICAgICAgTUFYQkxPQ0tTSVpFKTsKKyNlbmRpZgorCisgICBYRlJFRShwdWJfZXhwdCk7CisgICBYRlJFRShlY2Nfc2hhcmVkKTsKKyAgIFhGUkVFKHNrZXkpOworCisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfZGVjcnlwdF9rZXkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIxOjUzOjQxICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfZW5jcnlwdF9rZXkuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX2VuY3J5cHRfa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5YmFiMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX2VuY3J5cHRfa2V5LmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGVjY19lbmNyeXB0X2tleS5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUVDQworCisvKioKKyAgRW5jcnlwdCBhIHN5bW1ldHJpYyBrZXkgd2l0aCBFQ0MgCisgIEBwYXJhbSBpbiAgICAgICAgIFRoZSBzeW1tZXRyaWMga2V5IHlvdSB3YW50IHRvIGVuY3J5cHQKKyAgQHBhcmFtIGlubGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUga2V5IHRvIGVuY3J5cHQgKG9jdGV0cykKKyAgQHBhcmFtIG91dCAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgY2lwaGVydGV4dAorICBAcGFyYW0gb3V0bGVuICAgICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBjaXBoZXJ0ZXh0CisgIEBwYXJhbSBwcm5nICAgICAgIEFuIGFjdGl2ZSBQUk5HIHN0YXRlCisgIEBwYXJhbSB3cHJuZyAgICAgIFRoZSBpbmRleCBvZiB0aGUgUFJORyB5b3Ugd2lzaCB0byB1c2UgCisgIEBwYXJhbSBoYXNoICAgICAgIFRoZSBpbmRleCBvZiB0aGUgaGFzaCB5b3Ugd2FudCB0byB1c2UgCisgIEBwYXJhbSBrZXkgICAgICAgIFRoZSBFQ0Mga2V5IHlvdSB3YW50IHRvIGVuY3J5cHQgdG8KKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGVjY19lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICB1bnNpZ25lZCBsb25nIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGludCBoYXNoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZWNjX2tleSAqa2V5KQoreworICAgIHVuc2lnbmVkIGNoYXIgKnB1Yl9leHB0LCAqZWNjX3NoYXJlZCwgKnNrZXk7CisgICAgZWNjX2tleSAgICAgICAgcHVia2V5OworICAgIHVuc2lnbmVkIGxvbmcgIHgsIHksIHB1YmtleXNpemU7CisgICAgaW50ICAgICAgICAgICAgZXJyOworCisgICAgTFRDX0FSR0NISyhpbiAgICAgICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsob3V0ICAgICAhPSBOVUxMKTsKKyAgICBMVENfQVJHQ0hLKG91dGxlbiAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhrZXkgICAgICE9IE5VTEwpOworCisgICAgLyogY2hlY2sgdGhhdCB3cHJuZy9jaXBoZXIvaGFzaCBhcmUgbm90IGludmFsaWQgKi8KKyAgICBpZiAoKGVyciA9IHBybmdfaXNfdmFsaWQod3BybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgaWYgKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2gpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgaWYgKGlubGVuID4gaGFzaF9kZXNjcmlwdG9yW2hhc2hdLmhhc2hzaXplKSB7CisgICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfSEFTSDsKKyAgICB9CisKKyAgICAvKiBtYWtlIGEgcmFuZG9tIGtleSBhbmQgZXhwb3J0IHRoZSBwdWJsaWMgY29weSAqLworICAgIGlmICgoZXJyID0gZWNjX21ha2Vfa2V5X2V4KHBybmcsIHdwcm5nLCAmcHVia2V5LCBrZXktPmRwKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIHB1Yl9leHB0ICAgPSBYTUFMTE9DKEVDQ19CVUZfU0laRSk7CisgICAgZWNjX3NoYXJlZCA9IFhNQUxMT0MoRUNDX0JVRl9TSVpFKTsKKyAgICBza2V5ICAgICAgID0gWE1BTExPQyhNQVhCTE9DS1NJWkUpOworICAgIGlmIChwdWJfZXhwdCA9PSBOVUxMIHx8IGVjY19zaGFyZWQgPT0gTlVMTCB8fCBza2V5ID09IE5VTEwpIHsKKyAgICAgICBpZiAocHViX2V4cHQgIT0gTlVMTCkgeworICAgICAgICAgIFhGUkVFKHB1Yl9leHB0KTsKKyAgICAgICB9CisgICAgICAgaWYgKGVjY19zaGFyZWQgIT0gTlVMTCkgeworICAgICAgICAgIFhGUkVFKGVjY19zaGFyZWQpOworICAgICAgIH0KKyAgICAgICBpZiAoc2tleSAhPSBOVUxMKSB7CisgICAgICAgICAgWEZSRUUoc2tleSk7CisgICAgICAgfQorICAgICAgIGVjY19mcmVlKCZwdWJrZXkpOworICAgICAgIHJldHVybiBDUllQVF9NRU07CisgICAgfQorCisgICAgcHVia2V5c2l6ZSA9IEVDQ19CVUZfU0laRTsKKyAgICBpZiAoKGVyciA9IGVjY19leHBvcnQocHViX2V4cHQsICZwdWJrZXlzaXplLCBQS19QVUJMSUMsICZwdWJrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgIGVjY19mcmVlKCZwdWJrZXkpOworICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisgICAgCisgICAgLyogbWFrZSByYW5kb20ga2V5ICovCisgICAgeCAgICAgICAgPSBFQ0NfQlVGX1NJWkU7CisgICAgaWYgKChlcnIgPSBlY2Nfc2hhcmVkX3NlY3JldCgmcHVia2V5LCBrZXksIGVjY19zaGFyZWQsICZ4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBlY2NfZnJlZSgmcHVia2V5KTsKKyAgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIGVjY19mcmVlKCZwdWJrZXkpOworICAgIHkgPSBNQVhCTE9DS1NJWkU7CisgICAgaWYgKChlcnIgPSBoYXNoX21lbW9yeShoYXNoLCBlY2Nfc2hhcmVkLCB4LCBza2V5LCAmeSkpICE9IENSWVBUX09LKSB7CisgICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgICAKKyAgICAvKiBFbmNyeXB0IGtleSAqLworICAgIGZvciAoeCA9IDA7IHggPCBpbmxlbjsgeCsrKSB7CisgICAgICBza2V5W3hdIF49IGluW3hdOworICAgIH0KKworICAgIGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkob3V0LCBvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUiwgIGhhc2hfZGVzY3JpcHRvcltoYXNoXS5PSURsZW4sICAgaGFzaF9kZXNjcmlwdG9yW2hhc2hdLk9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX09DVEVUX1NUUklORywgICAgICAgcHVia2V5c2l6ZSwgICAgICAgICAgICAgICAgICAgICBwdWJfZXhwdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX09DVEVUX1NUUklORywgICAgICAgaW5sZW4sICAgICAgICAgICAgICAgICAgICAgICAgICBza2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgICAgICAgICAgICAwVUwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIC8qIGNsZWFuIHVwICovCisgICAgemVyb21lbShwdWJfZXhwdCwgICBFQ0NfQlVGX1NJWkUpOworICAgIHplcm9tZW0oZWNjX3NoYXJlZCwgRUNDX0JVRl9TSVpFKTsKKyAgICB6ZXJvbWVtKHNrZXksICAgICAgIE1BWEJMT0NLU0laRSk7CisjZW5kaWYKKworICAgIFhGUkVFKHNrZXkpOworICAgIFhGUkVFKGVjY19zaGFyZWQpOworICAgIFhGUkVFKHB1Yl9leHB0KTsKKworICAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfZW5jcnlwdF9rZXkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzIxIDAwOjEwOjE4ICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfZXhwb3J0LmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19leHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTE5ODQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfZXhwb3J0LmMKQEAgLTAsMCArMSw4MiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZWNjX2V4cG9ydC5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUVDQworCisvKioKKyAgRXhwb3J0IGFuIEVDQyBrZXkgYXMgYSBiaW5hcnkgcGFja2V0CisgIEBwYXJhbSBvdXQgICAgIFtvdXRdIERlc3RpbmF0aW9uIGZvciB0aGUga2V5CisgIEBwYXJhbSBvdXRsZW4gIFtpbi9vdXRdIE1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgZXhwb3J0ZWQga2V5CisgIEBwYXJhbSB0eXBlICAgIFRoZSB0eXBlIG9mIGtleSB5b3Ugd2FudCB0byBleHBvcnQgKFBLX1BSSVZBVEUgb3IgUEtfUFVCTElDKQorICBAcGFyYW0ga2V5ICAgICBUaGUga2V5IHRvIGV4cG9ydAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovCitpbnQgZWNjX2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgaW50IHR5cGUsIGVjY19rZXkgKmtleSkKK3sKKyAgIGludCAgICAgICAgICAgZXJyOworICAgdW5zaWduZWQgY2hhciBmbGFnc1sxXTsKKyAgIHVuc2lnbmVkIGxvbmcga2V5X3NpemU7CisKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKyAgIAorICAgLyogdHlwZSB2YWxpZD8gKi8KKyAgIGlmIChrZXktPnR5cGUgIT0gUEtfUFJJVkFURSAmJiB0eXBlID09IFBLX1BSSVZBVEUpIHsKKyAgICAgIHJldHVybiBDUllQVF9QS19UWVBFX01JU01BVENIOworICAgfQorCisgICBpZiAobHRjX2VjY19pc192YWxpZF9pZHgoa2V5LT5pZHgpID09IDApIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0FSRzsKKyAgIH0KKworICAgLyogd2Ugc3RvcmUgdGhlIE5JU1QgYnl0ZSBzaXplICovCisgICBrZXlfc2l6ZSA9IGtleS0+ZHAtPnNpemU7CisKKyAgIGlmICh0eXBlID09IFBLX1BSSVZBVEUpIHsKKyAgICAgICBmbGFnc1swXSA9IDE7CisgICAgICAgZXJyID0gZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aShvdXQsIG91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0JJVF9TVFJJTkcsICAgICAgMVVMLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX1NIT1JUX0lOVEVHRVIsICAgMVVMLCAma2V5X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgICAgIDFVTCwga2V5LT5wdWJrZXkueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsICAgICAgICAgMVVMLCBrZXktPnB1YmtleS55LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAgICAxVUwsIGtleS0+aywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgICAgICAgICAgMFVMLCBOVUxMKTsKKyAgIH0gZWxzZSB7CisgICAgICAgZmxhZ3NbMF0gPSAwOworICAgICAgIGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkob3V0LCBvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9CSVRfU1RSSU5HLCAgICAgIDFVTCwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9TSE9SVF9JTlRFR0VSLCAgIDFVTCwgJmtleV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAgICAxVUwsIGtleS0+cHVia2V5LngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgICAgIDFVTCwga2V5LT5wdWJrZXkueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgICAgICAgICAgMFVMLCBOVUxMKTsKKyAgIH0KKworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19leHBvcnQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzIxIDAwOjEwOjE4ICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfZnJlZS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfZnJlZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOTE3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19mcmVlLmMKQEAgLTAsMCArMSw0MCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZWNjX2ZyZWUuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyoqCisgIEZyZWUgYW4gRUNDIGtleSBmcm9tIG1lbW9yeQorICBAcGFyYW0ga2V5ICAgVGhlIGtleSB5b3Ugd2lzaCB0byBmcmVlCisqLwordm9pZCBlY2NfZnJlZShlY2Nfa2V5ICprZXkpCit7CisgICBMVENfQVJHQ0hLVkQoa2V5ICE9IE5VTEwpOworICAgbXBfY2xlYXJfbXVsdGkoa2V5LT5wdWJrZXkueCwga2V5LT5wdWJrZXkueSwga2V5LT5wdWJrZXkueiwga2V5LT5rLCBOVUxMKTsKK30KKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19mcmVlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8wOSAwMTozODoxNCAkICovCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX2dldF9zaXplLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19nZXRfc2l6ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllYWZkZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19nZXRfc2l6ZS5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGVjY19nZXRfc2l6ZS5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUVDQworCisvKioKKyAgR2V0IHRoZSBzaXplIG9mIGFuIEVDQyBrZXkKKyAgQHBhcmFtIGtleSAgICBUaGUga2V5IHRvIGdldCB0aGUgc2l6ZSBvZiAKKyAgQHJldHVybiBUaGUgc2l6ZSAob2N0ZXRzKSBvZiB0aGUga2V5IG9yIElOVF9NQVggb24gZXJyb3IKKyovCitpbnQgZWNjX2dldF9zaXplKGVjY19rZXkgKmtleSkKK3sKKyAgIExUQ19BUkdDSEsoa2V5ICE9IE5VTEwpOworICAgaWYgKGx0Y19lY2NfaXNfdmFsaWRfaWR4KGtleS0+aWR4KSkKKyAgICAgIHJldHVybiBrZXktPmRwLT5zaXplOworICAgZWxzZQorICAgICAgcmV0dXJuIElOVF9NQVg7IC8qIGxhcmdlIHZhbHVlIGtub3duIHRvIGNhdXNlIGl0IHRvIGZhaWwgd2hlbiBwYXNzZWQgdG8gZWNjX21ha2Vfa2V5KCkgKi8KK30KKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19nZXRfc2l6ZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjEgMDA6MTA6MTggJCAqLworCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19pbXBvcnQuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX2ltcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhZGIyOGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19pbXBvcnQuYwpAQCAtMCwwICsxLDE3MiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZWNjX2ltcG9ydC5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUVDQworCitzdGF0aWMgaW50IGlzX3BvaW50KGVjY19rZXkgKmtleSkKK3sKKyAgIHZvaWQgKnByaW1lLCAqYiwgKnQxLCAqdDI7CisgICBpbnQgZXJyOworICAgCisgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnByaW1lLCAmYiwgJnQxLCAmdDIsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIAorICAgLyogbG9hZCBwcmltZSBhbmQgYiAqLworICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KHByaW1lLCBrZXktPmRwLT5wcmltZSwgMTYpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KGIsIGtleS0+ZHAtPkIsIDE2KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgCisgICAvKiBjb21wdXRlIHleMiAqLworICAgaWYgKChlcnIgPSBtcF9zcXIoa2V5LT5wdWJrZXkueSwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgCisgICAvKiBjb21wdXRlIHheMyAqLworICAgaWYgKChlcnIgPSBtcF9zcXIoa2V5LT5wdWJrZXkueCwgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9tb2QodDIsIHByaW1lLCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9tdWwoa2V5LT5wdWJrZXkueCwgdDIsIHQyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgCisgICAvKiBjb21wdXRlIHleMiAtIHheMyAqLworICAgaWYgKChlcnIgPSBtcF9zdWIodDEsIHQyLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgCisgICAvKiBjb21wdXRlIHleMiAtIHheMyArIDN4ICovCisgICBpZiAoKGVyciA9IG1wX2FkZCh0MSwga2V5LT5wdWJrZXkueCwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX2FkZCh0MSwga2V5LT5wdWJrZXkueCwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX2FkZCh0MSwga2V5LT5wdWJrZXkueCwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX21vZCh0MSwgcHJpbWUsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICB3aGlsZSAobXBfY21wX2QodDEsIDApID09IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9hZGQodDEsIHByaW1lLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgfQorICAgd2hpbGUgKG1wX2NtcCh0MSwgcHJpbWUpICE9IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9zdWIodDEsIHByaW1lLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgfQorICAgCisgICAvKiBjb21wYXJlIHRvIGIgKi8KKyAgIGlmIChtcF9jbXAodDEsIGIpICE9IExUQ19NUF9FUSkgeworICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICB9IGVsc2UgeworICAgICAgZXJyID0gQ1JZUFRfT0s7CisgICB9CisgICAKK2Vycm9yOgorICAgbXBfY2xlYXJfbXVsdGkocHJpbWUsIGIsIHQxLCB0MiwgTlVMTCk7CisgICByZXR1cm4gZXJyOworfQorCisvKioKKyAgSW1wb3J0IGFuIEVDQyBrZXkgZnJvbSBhIGJpbmFyeSBwYWNrZXQKKyAgQHBhcmFtIGluICAgICAgVGhlIHBhY2tldCB0byBpbXBvcnQKKyAgQHBhcmFtIGlubGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0CisgIEBwYXJhbSBrZXkgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgaW1wb3J0CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgdXBvbiBlcnJvciBhbGwgYWxsb2NhdGVkIG1lbW9yeSB3aWxsIGJlIGZyZWVkCisqLworaW50IGVjY19pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIGVjY19rZXkgKmtleSkKK3sKKyAgIHJldHVybiBlY2NfaW1wb3J0X2V4KGluLCBpbmxlbiwga2V5LCBOVUxMKTsKK30KKworLyoqCisgIEltcG9ydCBhbiBFQ0Mga2V5IGZyb20gYSBiaW5hcnkgcGFja2V0LCB1c2luZyB1c2VyIHN1cHBsaWVkIGRvbWFpbiBwYXJhbXMgcmF0aGVyIHRoYW4gb25lIG9mIHRoZSBOSVNUIG9uZXMKKyAgQHBhcmFtIGluICAgICAgVGhlIHBhY2tldCB0byBpbXBvcnQKKyAgQHBhcmFtIGlubGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0CisgIEBwYXJhbSBrZXkgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgaW1wb3J0CisgIEBwYXJhbSBkcCAgICAgIHBvaW50ZXIgdG8gdXNlciBzdXBwbGllZCBwYXJhbXM7IG11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIHBhcmFtcyB1c2VkIHdoZW4gZXhwb3J0aW5nCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgdXBvbiBlcnJvciBhbGwgYWxsb2NhdGVkIG1lbW9yeSB3aWxsIGJlIGZyZWVkCisqLworaW50IGVjY19pbXBvcnRfZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIGVjY19rZXkgKmtleSwgY29uc3QgbHRjX2VjY19zZXRfdHlwZSAqZHApCit7CisgICB1bnNpZ25lZCBsb25nIGtleV9zaXplOworICAgdW5zaWduZWQgY2hhciBmbGFnc1sxXTsKKyAgIGludCAgICAgICAgICAgZXJyOworCisgICBMVENfQVJHQ0hLKGluICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhsdGNfbXAubmFtZSAhPSBOVUxMKTsKKworICAgLyogaW5pdCBrZXkgKi8KKyAgIGlmIChtcF9pbml0X211bHRpKCZrZXktPnB1YmtleS54LCAma2V5LT5wdWJrZXkueSwgJmtleS0+cHVia2V5LnosICZrZXktPmssIE5VTEwpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICAvKiBmaW5kIG91dCB3aGF0IHR5cGUgb2Yga2V5IGl0IGlzICovCisgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkoaW4sIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9CSVRfU1RSSU5HLCAxVUwsICZmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAgICAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBkb25lOworICAgfQorCisKKyAgIGlmIChmbGFnc1swXSA9PSAxKSB7CisgICAgICAvKiBwcml2YXRlIGtleSAqLworICAgICAga2V5LT50eXBlID0gUEtfUFJJVkFURTsKKyAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShpbiwgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfQklUX1NUUklORywgICAgICAxVUwsIGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX1NIT1JUX0lOVEVHRVIsICAgMVVMLCAma2V5X3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAgICAxVUwsIGtleS0+cHVia2V5LngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAgICAxVUwsIGtleS0+cHVia2V5LnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgICAgICAgICAxVUwsIGtleS0+aywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAgICAgICAgIDBVTCwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICBnb3RvIGRvbmU7CisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgLyogcHVibGljIGtleSAqLworICAgICAga2V5LT50eXBlID0gUEtfUFVCTElDOworICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpKGluLCBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9CSVRfU1RSSU5HLCAgICAgIDFVTCwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfU0hPUlRfSU5URUdFUiwgICAxVUwsICZrZXlfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgICAgIDFVTCwga2V5LT5wdWJrZXkueCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAgICAgICAgIDFVTCwga2V5LT5wdWJrZXkueSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAgICAgICAgIDBVTCwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICBnb3RvIGRvbmU7CisgICAgICB9CisgICB9CisKKyAgIGlmIChkcCA9PSBOVUxMKSB7CisgICAgIC8qIGZpbmQgdGhlIGlkeCAqLworICAgICBmb3IgKGtleS0+aWR4ID0gMDsgbHRjX2VjY19zZXRzW2tleS0+aWR4XS5zaXplICYmICh1bnNpZ25lZCBsb25nKWx0Y19lY2Nfc2V0c1trZXktPmlkeF0uc2l6ZSAhPSBrZXlfc2l6ZTsgKytrZXktPmlkeCk7CisgICAgIGlmIChsdGNfZWNjX3NldHNba2V5LT5pZHhdLnNpemUgPT0gMCkgeworICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgIGdvdG8gZG9uZTsKKyAgICAgfQorICAgICBrZXktPmRwID0gJmx0Y19lY2Nfc2V0c1trZXktPmlkeF07CisgICB9IGVsc2UgeworICAgICBrZXktPmlkeCA9IC0xOworICAgICBrZXktPmRwID0gZHA7CisgICB9CisgICAvKiBzZXQgeiAqLworICAgaWYgKChlcnIgPSBtcF9zZXQoa2V5LT5wdWJrZXkueiwgMSkpICE9IENSWVBUX09LKSB7IGdvdG8gZG9uZTsgfQorICAgCisgICAvKiBpcyBpdCBhIHBvaW50IG9uIHRoZSBjdXJ2ZT8gICovCisgICBpZiAoKGVyciA9IGlzX3BvaW50KGtleSkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIGRvbmU7CisgICB9CisKKyAgIC8qIHdlJ3JlIGdvb2QgKi8KKyAgIHJldHVybiBDUllQVF9PSzsKK2RvbmU6CisgICBtcF9jbGVhcl9tdWx0aShrZXktPnB1YmtleS54LCBrZXktPnB1YmtleS55LCBrZXktPnB1YmtleS56LCBrZXktPmssIE5VTEwpOworICAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfaW1wb3J0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTEgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDI6MTk6NDggJCAqLworCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19tYWtlX2tleS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfbWFrZV9rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTZiNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfbWFrZV9rZXkuYwpAQCAtMCwwICsxLDEyNSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZWNjX21ha2Vfa2V5LmMKKyAgRUNDIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRUNDCisKKy8qKgorICBNYWtlIGEgbmV3IEVDQyBrZXkgCisgIEBwYXJhbSBwcm5nICAgICAgICAgQW4gYWN0aXZlIFBSTkcgc3RhdGUKKyAgQHBhcmFtIHdwcm5nICAgICAgICBUaGUgaW5kZXggb2YgdGhlIFBSTkcgeW91IHdpc2ggdG8gdXNlCisgIEBwYXJhbSBrZXlzaXplICAgICAgVGhlIGtleXNpemUgZm9yIHRoZSBuZXcga2V5IChpbiBvY3RldHMgZnJvbSAyMCB0byA2NSBieXRlcykKKyAgQHBhcmFtIGtleSAgICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiB0aGUgbmV3bHkgY3JlYXRlZCBrZXkKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCB1cG9uIGVycm9yIGFsbCBhbGxvY2F0ZWQgbWVtb3J5IHdpbGwgYmUgZnJlZWQKKyovCitpbnQgZWNjX21ha2Vfa2V5KHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgaW50IGtleXNpemUsIGVjY19rZXkgKmtleSkKK3sKKyAgIGludCB4LCBlcnI7CisKKyAgIC8qIGZpbmQga2V5IHNpemUgKi8KKyAgIGZvciAoeCA9IDA7IChrZXlzaXplID4gbHRjX2VjY19zZXRzW3hdLnNpemUpICYmIChsdGNfZWNjX3NldHNbeF0uc2l6ZSAhPSAwKTsgeCsrKTsKKyAgIGtleXNpemUgPSBsdGNfZWNjX3NldHNbeF0uc2l6ZTsKKworICAgaWYgKGtleXNpemUgPiBFQ0NfTUFYU0laRSB8fCBsdGNfZWNjX3NldHNbeF0uc2l6ZSA9PSAwKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgfQorICAgZXJyID0gZWNjX21ha2Vfa2V5X2V4KHBybmcsIHdwcm5nLCBrZXksICZsdGNfZWNjX3NldHNbeF0pOworICAga2V5LT5pZHggPSB4OworICAgcmV0dXJuIGVycjsKK30KKworaW50IGVjY19tYWtlX2tleV9leChwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGVjY19rZXkgKmtleSwgY29uc3QgbHRjX2VjY19zZXRfdHlwZSAqZHApCit7CisgICBpbnQgICAgICAgICAgICBlcnI7CisgICBlY2NfcG9pbnQgICAgICpiYXNlOworICAgdm9pZCAgICAgICAgICAqcHJpbWU7CisgICB1bnNpZ25lZCBjaGFyICpidWY7CisgICBpbnQgICAgICAgICAgICBrZXlzaXplOworCisgICBMVENfQVJHQ0hLKGtleSAgICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhsdGNfbXAubmFtZSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoZHAgICAgICAgICAgIT0gTlVMTCk7CisKKyAgIC8qIGdvb2QgcHJuZz8gKi8KKyAgIGlmICgoZXJyID0gcHJuZ19pc192YWxpZCh3cHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBrZXktPmlkeCA9IC0xOworICAga2V5LT5kcCAgPSBkcDsKKyAgIGtleXNpemUgID0gZHAtPnNpemU7CisKKyAgIC8qIGFsbG9jYXRlIHJhbSAqLworICAgYmFzZSA9IE5VTEw7CisgICBidWYgID0gWE1BTExPQyhFQ0NfTUFYU0laRSk7CisgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIC8qIG1ha2UgdXAgcmFuZG9tIHN0cmluZyAqLworICAgaWYgKHBybmdfZGVzY3JpcHRvclt3cHJuZ10ucmVhZChidWYsICh1bnNpZ25lZCBsb25nKWtleXNpemUsIHBybmcpICE9ICh1bnNpZ25lZCBsb25nKWtleXNpemUpIHsKKyAgICAgIGVyciA9IENSWVBUX0VSUk9SX1JFQURQUk5HOworICAgICAgZ290byBFUlJfQlVGOworICAgfQorCisgICAvKiBzZXR1cCB0aGUga2V5IHZhcmlhYmxlcyAqLworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZrZXktPnB1YmtleS54LCAma2V5LT5wdWJrZXkueSwgJmtleS0+cHVia2V5LnosICZrZXktPmssICZwcmltZSwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIEVSUl9CVUY7CisgICB9CisgICBiYXNlID0gbHRjX2VjY19uZXdfcG9pbnQoKTsKKyAgIGlmIChiYXNlID09IE5VTEwpIHsKKyAgICAgIGVyciA9IENSWVBUX01FTTsKKyAgICAgIGdvdG8gZXJya2V5OworICAgfQorCisgICAvKiByZWFkIGluIHRoZSBzcGVjcyBmb3IgdGhpcyBrZXkgKi8KKyAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChwcmltZSwgICAoY2hhciAqKWtleS0+ZHAtPnByaW1lLCAxNikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0KKyAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChiYXNlLT54LCAoY2hhciAqKWtleS0+ZHAtPkd4LCAxNikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0KKyAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChiYXNlLT55LCAoY2hhciAqKWtleS0+ZHAtPkd5LCAxNikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0KKyAgIGlmICgoZXJyID0gbXBfc2V0KGJhc2UtPnosIDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0KKyAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4oa2V5LT5rLCAodW5zaWduZWQgY2hhciAqKWJ1Ziwga2V5c2l6ZSkpICE9IENSWVBUX09LKSAgICAgICAgIHsgZ290byBlcnJrZXk7IH0KKworICAgLyogbWFrZSB0aGUgcHVibGljIGtleSAqLworICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0bXVsKGtleS0+aywgYmFzZSwgJmtleS0+cHVia2V5LCBwcmltZSwgMSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgeyBnb3RvIGVycmtleTsgfQorICAga2V5LT50eXBlID0gUEtfUFJJVkFURTsKKworICAgLyogZnJlZSB1cCByYW0gKi8KKyAgIGVyciA9IENSWVBUX09LOworICAgZ290byBjbGVhbnVwOworZXJya2V5OgorICAgbXBfY2xlYXJfbXVsdGkoa2V5LT5wdWJrZXkueCwga2V5LT5wdWJrZXkueSwga2V5LT5wdWJrZXkueiwga2V5LT5rLCBOVUxMKTsKK2NsZWFudXA6CisgICBsdGNfZWNjX2RlbF9wb2ludChiYXNlKTsKKyAgIG1wX2NsZWFyKHByaW1lKTsKK0VSUl9CVUY6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGJ1ZiwgRUNDX01BWFNJWkUpOworI2VuZGlmCisgICBYRlJFRShidWYpOworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19tYWtlX2tleS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDI6NTA6MTEgJCAqLworCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19zaGFyZWRfc2VjcmV0LmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19zaGFyZWRfc2VjcmV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlZjg0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX3NoYXJlZF9zZWNyZXQuYwpAQCAtMCwwICsxLDk1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBlY2Nfc2hhcmVkX3NlY3JldC5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUVDQworCisvKioKKyAgQ3JlYXRlIGFuIEVDQyBzaGFyZWQgc2VjcmV0IGJldHdlZW4gdHdvIGtleXMKKyAgQHBhcmFtIHByaXZhdGVfa2V5ICAgICAgVGhlIHByaXZhdGUgRUNDIGtleQorICBAcGFyYW0gcHVibGljX2tleSAgICAgICBUaGUgcHVibGljIGtleQorICBAcGFyYW0gb3V0ICAgICAgICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiB0aGUgc2hhcmVkIHNlY3JldCAoQ29uZm9ybXMgdG8gRUMtREggZnJvbSBBTlNJIFg5LjYzKQorICBAcGFyYW0gb3V0bGVuICAgICAgICAgICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBzaGFyZWQgc2VjcmV0CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBlY2Nfc2hhcmVkX3NlY3JldChlY2Nfa2V5ICpwcml2YXRlX2tleSwgZWNjX2tleSAqcHVibGljX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGxvbmcgIHg7CisgICBlY2NfcG9pbnQgICAgICpyZXN1bHQ7CisgICB2b2lkICAgICAgICAgICpwcmltZTsKKyAgIGludCAgICAgICAgICAgIGVycjsKKworICAgTFRDX0FSR0NISyhwcml2YXRlX2tleSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsocHVibGljX2tleSAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dCAgICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gICAgICAhPSBOVUxMKTsKKworICAgLyogdHlwZSB2YWxpZD8gKi8KKyAgIGlmIChwcml2YXRlX2tleS0+dHlwZSAhPSBQS19QUklWQVRFKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfTk9UX1BSSVZBVEU7CisgICB9CisKKyAgIGlmIChsdGNfZWNjX2lzX3ZhbGlkX2lkeChwcml2YXRlX2tleS0+aWR4KSA9PSAwIHx8IGx0Y19lY2NfaXNfdmFsaWRfaWR4KHB1YmxpY19rZXktPmlkeCkgPT0gMCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICBpZiAoWFNUUkNNUChwcml2YXRlX2tleS0+ZHAtPm5hbWUsIHB1YmxpY19rZXktPmRwLT5uYW1lKSAhPSAwKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfVFlQRV9NSVNNQVRDSDsKKyAgIH0KKworICAgLyogbWFrZSBuZXcgcG9pbnQgKi8KKyAgIHJlc3VsdCA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIGlmICgoZXJyID0gbXBfaW5pdCgmcHJpbWUpKSAhPSBDUllQVF9PSykgeworICAgICAgbHRjX2VjY19kZWxfcG9pbnQocmVzdWx0KTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChwcmltZSwgKGNoYXIgKilwcml2YXRlX2tleS0+ZHAtPnByaW1lLCAxNikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0bXVsKHByaXZhdGVfa2V5LT5rLCAmcHVibGljX2tleS0+cHVia2V5LCByZXN1bHQsIHByaW1lLCAxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIHggPSAodW5zaWduZWQgbG9uZyltcF91bnNpZ25lZF9iaW5fc2l6ZShwcmltZSk7CisgICBpZiAoKm91dGxlbiA8IHgpIHsKKyAgICAgICpvdXRsZW4gPSB4OworICAgICAgZXJyID0gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgICAgZ290byBkb25lOworICAgfQorICAgemVyb21lbShvdXQsIHgpOworICAgaWYgKChlcnIgPSBtcF90b191bnNpZ25lZF9iaW4ocmVzdWx0LT54LCBvdXQgKyAoeCAtIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKHJlc3VsdC0+eCkpKSkgICAhPSBDUllQVF9PSykgICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIGVyciAgICAgPSBDUllQVF9PSzsKKyAgICpvdXRsZW4gPSB4OworZG9uZToKKyAgIG1wX2NsZWFyKHByaW1lKTsKKyAgIGx0Y19lY2NfZGVsX3BvaW50KHJlc3VsdCk7CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX3NoYXJlZF9zZWNyZXQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAyOjE5OjQ4ICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2Nfc2lnbl9oYXNoLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19zaWduX2hhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGY5NDllCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2Nfc2lnbl9oYXNoLmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGVjY19zaWduX2hhc2guYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyoqCisgIFNpZ24gYSBtZXNzYWdlIGRpZ2VzdAorICBAcGFyYW0gaW4gICAgICAgIFRoZSBtZXNzYWdlIGRpZ2VzdCB0byBzaWduCisgIEBwYXJhbSBpbmxlbiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgZGlnZXN0CisgIEBwYXJhbSBvdXQgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgc2lnbmF0dXJlCisgIEBwYXJhbSBvdXRsZW4gICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgc2lnbmF0dXJlCisgIEBwYXJhbSBwcm5nICAgICAgQW4gYWN0aXZlIFBSTkcgc3RhdGUKKyAgQHBhcmFtIHdwcm5nICAgICBUaGUgaW5kZXggb2YgdGhlIFBSTkcgeW91IHdpc2ggdG8gdXNlCisgIEBwYXJhbSBrZXkgICAgICAgQSBwcml2YXRlIEVDQyBrZXkKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGVjY19zaWduX2hhc2goY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICB1bnNpZ25lZCBsb25nIGlubGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCB3cHJuZywgZWNjX2tleSAqa2V5KQoreworICAgZWNjX2tleSAgICAgICBwdWJrZXk7CisgICB2b2lkICAgICAgICAgICpyLCAqcywgKmUsICpwOworICAgaW50ICAgICAgICAgICBlcnI7CisKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworCisgICAvKiBpcyB0aGlzIGEgcHJpdmF0ZSBrZXk/ICovCisgICBpZiAoa2V5LT50eXBlICE9IFBLX1BSSVZBVEUpIHsKKyAgICAgIHJldHVybiBDUllQVF9QS19OT1RfUFJJVkFURTsKKyAgIH0KKyAgIAorICAgLyogaXMgdGhlIElEWCB2YWxpZCA/ICAqLworICAgaWYgKGx0Y19lY2NfaXNfdmFsaWRfaWR4KGtleS0+aWR4KSAhPSAxKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfSU5WQUxJRF9UWVBFOworICAgfQorICAgCisgICBpZiAoKGVyciA9IHBybmdfaXNfdmFsaWQod3BybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogZ2V0IHRoZSBoYXNoIGFuZCBsb2FkIGl0IGFzIGEgYmlnbnVtIGludG8gJ2UnICovCisgICAvKiBpbml0IHRoZSBiaWdudW1zICovCisgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnIsICZzLCAmcCwgJmUsIE5VTEwpKSAhPSBDUllQVF9PSykgeyAKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgocCwgKGNoYXIgKilrZXktPmRwLT5vcmRlciwgMTYpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm5va2V5OyB9CisgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKGUsICh1bnNpZ25lZCBjaGFyICopaW4sIChpbnQpaW5sZW4pKSAhPSBDUllQVF9PSykgICAgICAgICAgeyBnb3RvIGVycm5va2V5OyB9CisKKyAgIC8qIG1ha2UgdXAgYSBrZXkgYW5kIGV4cG9ydCB0aGUgcHVibGljIGNvcHkgKi8KKyAgIGZvciAoOzspIHsKKyAgICAgIGlmICgoZXJyID0gZWNjX21ha2Vfa2V5X2V4KHBybmcsIHdwcm5nLCAmcHVia2V5LCBrZXktPmRwKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIGdvdG8gZXJybm9rZXk7CisgICAgICB9CisKKyAgICAgIC8qIGZpbmQgciA9IHgxIG1vZCBuICovCisgICAgICBpZiAoKGVyciA9IG1wX21vZChwdWJrZXkucHVia2V5LngsIHAsIHIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAgICBpZiAobXBfaXN6ZXJvKHIpID09IExUQ19NUF9ZRVMpIHsKKyAgICAgICAgIGVjY19mcmVlKCZwdWJrZXkpOworICAgICAgfSBlbHNlIHsgCisgICAgICAgIC8qIGZpbmQgcyA9IChlICsgeHIpL2sgKi8KKyAgICAgICAgaWYgKChlcnIgPSBtcF9pbnZtb2QocHVia2V5LmssIHAsIHB1YmtleS5rKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9IC8qIGsgPSAxL2sgKi8KKyAgICAgICAgaWYgKChlcnIgPSBtcF9tdWxtb2Qoa2V5LT5rLCByLCBwLCBzKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9IC8qIHMgPSB4ciAqLworICAgICAgICBpZiAoKGVyciA9IG1wX2FkZChlLCBzLCBzKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0gLyogcyA9IGUgKyAgeHIgKi8KKyAgICAgICAgaWYgKChlcnIgPSBtcF9tb2QocywgcCwgcykpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9IC8qIHMgPSBlICsgIHhyICovCisgICAgICAgIGlmICgoZXJyID0gbXBfbXVsbW9kKHMsIHB1YmtleS5rLCBwLCBzKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfSAvKiBzID0gKGUgKyB4cikvayAqLworICAgICAgICBlY2NfZnJlZSgmcHVia2V5KTsKKyAgICAgICAgaWYgKG1wX2lzemVybyhzKSA9PSBMVENfTVBfTk8pIHsKKyAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKworICAgLyogc3RvcmUgYXMgU0VRVUVOQ0UgeyByLCBzIC0tIGludGVnZXIgfSAqLworICAgZXJyID0gZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aShvdXQsIG91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCByLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgMFVMLCBOVUxMKTsKKyAgIGdvdG8gZXJybm9rZXk7CitlcnJvcjoKKyAgIGVjY19mcmVlKCZwdWJrZXkpOworZXJybm9rZXk6CisgICBtcF9jbGVhcl9tdWx0aShyLCBzLCBwLCBlLCBOVUxMKTsKKyAgIHJldHVybiBlcnI7ICAgCit9CisKKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2Nfc2lnbl9oYXNoLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOSAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMjo1MDoxMSAkICovCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX3NpemVzLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19zaXplcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YjJkODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY19zaXplcy5jCkBAIC0wLDAgKzEsNDggQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGVjY19zaXplcy5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUVDQworCit2b2lkIGVjY19zaXplcyhpbnQgKmxvdywgaW50ICpoaWdoKQoreworIGludCBpOworIExUQ19BUkdDSEtWRChsb3cgICE9IE5VTEwpOworIExUQ19BUkdDSEtWRChoaWdoICE9IE5VTEwpOworCisgKmxvdyA9IElOVF9NQVg7CisgKmhpZ2ggPSAwOworIGZvciAoaSA9IDA7IGx0Y19lY2Nfc2V0c1tpXS5zaXplICE9IDA7IGkrKykgeworICAgICBpZiAobHRjX2VjY19zZXRzW2ldLnNpemUgPCAqbG93KSAgeworICAgICAgICAqbG93ICA9IGx0Y19lY2Nfc2V0c1tpXS5zaXplOworICAgICB9CisgICAgIGlmIChsdGNfZWNjX3NldHNbaV0uc2l6ZSA+ICpoaWdoKSB7CisgICAgICAgICpoaWdoID0gbHRjX2VjY19zZXRzW2ldLnNpemU7CisgICAgIH0KKyB9Cit9CisKKyNlbmRpZgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2Nfc2l6ZXMuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzA5IDAxOjM4OjE0ICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfdGVzdC5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYTE2N2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2VjY190ZXN0LmMKQEAgLTAsMCArMSw5NSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZWNjX3Rlc3QuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyoqCisgIFBlcmZvcm0gb24gdGhlIEVDQyBzeXN0ZW0KKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IGVjY190ZXN0KHZvaWQpCit7CisgICB2b2lkICAgICAqbW9kdWx1cywgKm9yZGVyOworICAgZWNjX3BvaW50ICAqRywgKkdHOworICAgaW50IGksIGVyciwgcHJpbWFsaXR5OworCisgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJm1vZHVsdXMsICZvcmRlciwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBHICAgPSBsdGNfZWNjX25ld19wb2ludCgpOworICAgR0cgID0gbHRjX2VjY19uZXdfcG9pbnQoKTsKKyAgIGlmIChHID09IE5VTEwgfHwgR0cgPT0gTlVMTCkgeworICAgICAgbXBfY2xlYXJfbXVsdGkobW9kdWx1cywgb3JkZXIsIE5VTEwpOworICAgICAgbHRjX2VjY19kZWxfcG9pbnQoRyk7CisgICAgICBsdGNfZWNjX2RlbF9wb2ludChHRyk7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICBmb3IgKGkgPSAwOyBsdGNfZWNjX3NldHNbaV0uc2l6ZTsgaSsrKSB7CisgICAgICAgI2lmIDAKKyAgICAgICAgICBwcmludGYoIlRlc3RpbmcgJWRcbiIsIGx0Y19lY2Nfc2V0c1tpXS5zaXplKTsKKyAgICAgICAjZW5kaWYKKyAgICAgICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgobW9kdWx1cywgKGNoYXIgKilsdGNfZWNjX3NldHNbaV0ucHJpbWUsIDE2KSkgIT0gQ1JZUFRfT0spICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgob3JkZXIsIChjaGFyICopbHRjX2VjY19zZXRzW2ldLm9yZGVyLCAxNikpICE9IENSWVBUX09LKSAgICAgeyBnb3RvIGRvbmU7IH0KKworICAgICAgIC8qIGlzIHByaW1lIGFjdHVhbGx5IHByaW1lPyAqLworICAgICAgIGlmICgoZXJyID0gbXBfcHJpbWVfaXNfcHJpbWUobW9kdWx1cywgOCwgJnByaW1hbGl0eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgIGlmIChwcmltYWxpdHkgPT0gMCkgeworICAgICAgICAgIGVyciA9IENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgfQorCisgICAgICAgLyogaXMgb3JkZXIgcHJpbWUgPyAqLworICAgICAgIGlmICgoZXJyID0gbXBfcHJpbWVfaXNfcHJpbWUob3JkZXIsIDgsICZwcmltYWxpdHkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgIGlmIChwcmltYWxpdHkgPT0gMCkgeworICAgICAgICAgIGVyciA9IENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgfQorCisgICAgICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KEctPngsIChjaGFyICopbHRjX2VjY19zZXRzW2ldLkd4LCAxNikpICE9IENSWVBUX09LKSAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KEctPnksIChjaGFyICopbHRjX2VjY19zZXRzW2ldLkd5LCAxNikpICE9IENSWVBUX09LKSAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICAgbXBfc2V0KEctPnosIDEpOworCisgICAgICAgLyogdGhlbiB3ZSBzaG91bGQgaGF2ZSBHID09IChvcmRlciArIDEpRyAqLworICAgICAgIGlmICgoZXJyID0gbXBfYWRkX2Qob3JkZXIsIDEsIG9yZGVyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdG11bChvcmRlciwgRywgR0csIG1vZHVsdXMsIDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgIGlmIChtcF9jbXAoRy0+eCwgR0ctPngpICE9IExUQ19NUF9FUSB8fCBtcF9jbXAoRy0+eSwgR0ctPnkpICE9IExUQ19NUF9FUSkgeworICAgICAgICAgIGVyciA9IENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgfQorICAgfQorICAgZXJyID0gQ1JZUFRfT0s7Citkb25lOgorICAgbHRjX2VjY19kZWxfcG9pbnQoR0cpOworICAgbHRjX2VjY19kZWxfcG9pbnQoRyk7CisgICBtcF9jbGVhcl9tdWx0aShvcmRlciwgbW9kdWx1cywgTlVMTCk7CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfdGVzdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEwICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAyOjE5OjQ4ICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9lY2NfdmVyaWZ5X2hhc2guYyBiL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX3ZlcmlmeV9oYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ4YTg0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX3ZlcmlmeV9oYXNoLmMKQEAgLTAsMCArMSwxNjUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGVjY192ZXJpZnlfaGFzaC5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUVDQworCisvKiB2ZXJpZnkgCisgKgorICogdyAgPSBzXi0xIG1vZCBuCisgKiB1MSA9IHh3IAorICogdTIgPSBydworICogWCA9IHUxKkcgKyB1MipRCisgKiB2ID0gWF94MSBtb2QgbgorICogYWNjZXB0IGlmIHYgPT0gcgorICovCisKKy8qKgorICAgVmVyaWZ5IGFuIEVDQyBzaWduYXR1cmUKKyAgIEBwYXJhbSBzaWcgICAgICAgICBUaGUgc2lnbmF0dXJlIHRvIHZlcmlmeQorICAgQHBhcmFtIHNpZ2xlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHNpZ25hdHVyZSAob2N0ZXRzKQorICAgQHBhcmFtIGhhc2ggICAgICAgIFRoZSBoYXNoIChtZXNzYWdlIGRpZ2VzdCkgdGhhdCB3YXMgc2lnbmVkCisgICBAcGFyYW0gaGFzaGxlbiAgICAgVGhlIGxlbmd0aCBvZiB0aGUgaGFzaCAob2N0ZXRzKQorICAgQHBhcmFtIHN0YXQgICAgICAgIFJlc3VsdCBvZiBzaWduYXR1cmUsIDE9PXZhbGlkLCAwPT1pbnZhbGlkCisgICBAcGFyYW0ga2V5ICAgICAgICAgVGhlIGNvcnJlc3BvbmRpbmcgcHVibGljIEVDQyBrZXkKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCAoZXZlbiBpZiB0aGUgc2lnbmF0dXJlIGlzIG5vdCB2YWxpZCkKKyovCitpbnQgZWNjX3ZlcmlmeV9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNpZywgIHVuc2lnbmVkIGxvbmcgc2lnbGVuLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCB1bnNpZ25lZCBsb25nIGhhc2hsZW4sIAorICAgICAgICAgICAgICAgICAgICBpbnQgKnN0YXQsIGVjY19rZXkgKmtleSkKK3sKKyAgIGVjY19wb2ludCAgICAqbUcsICptUTsKKyAgIHZvaWQgICAgICAgICAgKnIsICpzLCAqdiwgKncsICp1MSwgKnUyLCAqZSwgKnAsICptOworICAgdm9pZCAgICAgICAgICAqbXA7CisgICBpbnQgICAgICAgICAgIGVycjsKKworICAgTFRDX0FSR0NISyhzaWcgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhoYXNoICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhzdGF0ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICE9IE5VTEwpOworCisgICAvKiBkZWZhdWx0IHRvIGludmFsaWQgc2lnbmF0dXJlICovCisgICAqc3RhdCA9IDA7CisgICBtcCAgICA9IE5VTEw7CisKKyAgIC8qIGlzIHRoZSBJRFggdmFsaWQgPyAgKi8KKyAgIGlmIChsdGNfZWNjX2lzX3ZhbGlkX2lkeChrZXktPmlkeCkgIT0gMSkgeworICAgICAgcmV0dXJuIENSWVBUX1BLX0lOVkFMSURfVFlQRTsKKyAgIH0KKworICAgLyogYWxsb2NhdGUgaW50cyAqLworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZyLCAmcywgJnYsICZ3LCAmdTEsICZ1MiwgJnAsICZlLCAmbSwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICAvKiBhbGxvY2F0ZSBwb2ludHMgKi8KKyAgIG1HID0gbHRjX2VjY19uZXdfcG9pbnQoKTsKKyAgIG1RID0gbHRjX2VjY19uZXdfcG9pbnQoKTsKKyAgIGlmIChtUSAgPT0gTlVMTCB8fCBtRyA9PSBOVUxMKSB7CisgICAgICBlcnIgPSBDUllQVF9NRU07CisgICAgICBnb3RvIGVycm9yOworICAgfQorCisgICAvKiBwYXJzZSBoZWFkZXIgKi8KKyAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShzaWcsIHNpZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgMFVMLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gZXJyb3I7CisgICB9CisKKyAgIC8qIGdldCB0aGUgb3JkZXIgKi8KKyAgIGlmICgoZXJyID0gbXBfcmVhZF9yYWRpeChwLCAoY2hhciAqKWtleS0+ZHAtPm9yZGVyLCAxNikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qIGdldCB0aGUgbW9kdWx1cyAqLworICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KG0sIChjaGFyICopa2V5LT5kcC0+cHJpbWUsIDE2KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgLyogY2hlY2sgZm9yIHplcm8gKi8KKyAgIGlmIChtcF9pc3plcm8ocikgfHwgbXBfaXN6ZXJvKHMpIHx8IG1wX2NtcChyLCBwKSAhPSBMVENfTVBfTFQgfHwgbXBfY21wKHMsIHApICE9IExUQ19NUF9MVCkgeworICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICBnb3RvIGVycm9yOworICAgfQorCisgICAvKiByZWFkIGhhc2ggKi8KKyAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4oZSwgKHVuc2lnbmVkIGNoYXIgKiloYXNoLCAoaW50KWhhc2hsZW4pKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qICB3ICA9IHNeLTEgbW9kIG4gKi8KKyAgIGlmICgoZXJyID0gbXBfaW52bW9kKHMsIHAsIHcpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qIHUxID0gZXcgKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsbW9kKGUsIHcsIHAsIHUxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qIHUyID0gcncgKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsbW9kKHIsIHcsIHAsIHUyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qIGZpbmQgbUcgYW5kIG1RICovCisgICBpZiAoKGVyciA9IG1wX3JlYWRfcmFkaXgobUctPngsIChjaGFyICopa2V5LT5kcC0+R3gsIDE2KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9yZWFkX3JhZGl4KG1HLT55LCAoY2hhciAqKWtleS0+ZHAtPkd5LCAxNikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIGlmICgoZXJyID0gbXBfc2V0KG1HLT56LCAxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIGlmICgoZXJyID0gbXBfY29weShrZXktPnB1YmtleS54LCBtUS0+eCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICBpZiAoKGVyciA9IG1wX2NvcHkoa2V5LT5wdWJrZXkueSwgbVEtPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgaWYgKChlcnIgPSBtcF9jb3B5KGtleS0+cHVia2V5LnosIG1RLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgLyogY29tcHV0ZSB1MSptRyArIHUyKm1RID0gbUcgKi8KKyAgIGlmIChsdGNfbXAuZWNjX211bDJhZGQgPT0gTlVMTCkgeworICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0bXVsKHUxLCBtRywgbUcsIG0sIDApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdG11bCh1MiwgbVEsIG1RLCBtLCAwKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgIAorICAgICAgLyogZmluZCB0aGUgbW9udGdvbWVyeSBtcCAqLworICAgICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3NldHVwKG0sICZtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgICAgLyogYWRkIHRoZW0gKi8KKyAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChtUSwgbUcsIG1HLCBtLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAKKyAgICAgIC8qIHJlZHVjZSAqLworICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX21hcChtRywgbSwgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIH0gZWxzZSB7CisgICAgICAvKiB1c2UgU2hhbWlyJ3MgdHJpY2sgdG8gY29tcHV0ZSB1MSptRyArIHUyKm1RIHVzaW5nIGhhbGYgb2YgdGhlIGRvdWJsZXMgKi8KKyAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19tdWwyYWRkKG1HLCB1MSwgbVEsIHUyLCBtRywgbSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICB9CisKKyAgIC8qIHYgPSBYX3gxIG1vZCBuICovCisgICBpZiAoKGVyciA9IG1wX21vZChtRy0+eCwgcCwgdikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAvKiBkb2VzIHYgPT0gciAqLworICAgaWYgKG1wX2NtcCh2LCByKSA9PSBMVENfTVBfRVEpIHsKKyAgICAgICpzdGF0ID0gMTsKKyAgIH0KKworICAgLyogY2xlYXIgdXAgYW5kIHJldHVybiAqLworICAgZXJyID0gQ1JZUFRfT0s7CitlcnJvcjoKKyAgIGx0Y19lY2NfZGVsX3BvaW50KG1HKTsKKyAgIGx0Y19lY2NfZGVsX3BvaW50KG1RKTsKKyAgIG1wX2NsZWFyX211bHRpKHIsIHMsIHYsIHcsIHUxLCB1MiwgcCwgZSwgbSwgTlVMTCk7CisgICBpZiAobXAgIT0gTlVMTCkgeyAKKyAgICAgIG1wX21vbnRnb21lcnlfZnJlZShtcCk7CisgICB9CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvZWNjX3ZlcmlmeV9oYXNoLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTIgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDU6MDc6NTkgJCAqLworCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfaXNfdmFsaWRfaWR4LmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfaXNfdmFsaWRfaWR4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y4MWYyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvbHRjX2VjY19pc192YWxpZF9pZHguYwpAQCAtMCwwICsxLDQ2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBsdGNfZWNjX2lzX3ZhbGlkX2lkeC5jCisgIEVDQyBDcnlwdG8sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUVDQworCisvKiogUmV0dXJucyB3aGV0aGVyIGFuIEVDQyBpZHggaXMgdmFsaWQgb3Igbm90CisgIEBwYXJhbSBuICAgVGhlIGlkeCBudW1iZXIgdG8gY2hlY2sKKyAgQHJldHVybiAxIGlmIHZhbGlkLCAwIGlmIG5vdAorKi8gIAoraW50IGx0Y19lY2NfaXNfdmFsaWRfaWR4KGludCBuKQoreworICAgaW50IHg7CisKKyAgIGZvciAoeCA9IDA7IGx0Y19lY2Nfc2V0c1t4XS5zaXplICE9IDA7IHgrKyk7CisgICAvKiAtMSBpcyBhIHZhbGlkIGluZGV4IC0tLSBpbmRpY2F0aW5nIHRoYXQgdGhlIGRvbWFpbiBwYXJhbXMgd2VyZSBzdXBwbGllZCBieSB0aGUgdXNlciAqLworICAgaWYgKChuID49IC0xKSB8fCAobiA8IHgpKSB7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIHJldHVybiAwOworfQorCisjZW5kaWYKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvbHRjX2VjY19pc192YWxpZF9pZHguYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzIxIDAwOjEwOjE4ICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX21hcC5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX21hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYzI4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfbWFwLmMKQEAgLTAsMCArMSw3NiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgbHRjX2VjY19tYXAuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyoqCisgIE1hcCBhIHByb2plY3RpdmUgamFjYm9iaWFuIHBvaW50IGJhY2sgdG8gYWZmaW5lIHNwYWNlCisgIEBwYXJhbSBQICAgICAgICBbaW4vb3V0XSBUaGUgcG9pbnQgdG8gbWFwCisgIEBwYXJhbSBtb2R1bHVzICBUaGUgbW9kdWx1cyBvZiB0aGUgZmllbGQgdGhlIEVDQyBjdXJ2ZSBpcyBpbgorICBAcGFyYW0gbXAgICAgICAgVGhlICJiIiB2YWx1ZSBmcm9tIG1vbnRnb21lcnlfc2V0dXAoKQorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyovCitpbnQgbHRjX2VjY19tYXAoZWNjX3BvaW50ICpQLCB2b2lkICptb2R1bHVzLCB2b2lkICptcCkKK3sKKyAgIHZvaWQgKnQxLCAqdDI7CisgICBpbnQgICBlcnI7CisKKyAgIExUQ19BUkdDSEsoUCAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobW9kdWx1cyAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobXAgICAgICAhPSBOVUxMKTsKKworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ0MSwgJnQyLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIC8qIGZpcnN0IG1hcCB6IGJhY2sgdG8gbm9ybWFsICovCisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKFAtPnosIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorCisgICAvKiBnZXQgMS96ICovCisgICBpZiAoKGVyciA9IG1wX2ludm1vZChQLT56LCBtb2R1bHVzLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorIAorICAgLyogZ2V0IDEvel4yIGFuZCAxL3peMyAqLworICAgaWYgKChlcnIgPSBtcF9zcXIodDEsIHQyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9kKHQyLCBtb2R1bHVzLCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX211bCh0MSwgdDIsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb2QodDEsIG1vZHVsdXMsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKworICAgLyogbXVsdGlwbHkgYWdhaW5zdCB4L3kgKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsKFAtPngsIHQyLCBQLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKFAtPngsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tdWwoUC0+eSwgdDEsIFAtPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoUC0+eSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX3NldChQLT56LCAxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorCisgICBlcnIgPSBDUllQVF9PSzsKK2RvbmU6CisgICBtcF9jbGVhcl9tdWx0aSh0MSwgdDIsIE5VTEwpOworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvbHRjX2VjY19tYXAuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDAyOjUwOjExICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX211bDJhZGQuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvbHRjX2VjY19tdWwyYWRkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMxYzI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvbHRjX2VjY19tdWwyYWRkLmMKQEAgLTAsMCArMSwyMDcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGx0Y19lY2NfbXVsMmFkZC5jCisgIEVDQyBDcnlwdG8sIFNoYW1pcidzIFRyaWNrLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworI2lmZGVmIExUQ19FQ0NfU0hBTUlSCisKKy8qKiBDb21wdXRlcyBrQSpBICsga0IqQiA9IEMgdXNpbmcgU2hhbWlyJ3MgVHJpY2sKKyAgQHBhcmFtIEEgICAgICAgIEZpcnN0IHBvaW50IHRvIG11bHRpcGx5CisgIEBwYXJhbSBrQSAgICAgICBXaGF0IHRvIG11bHRpcGxlIEEgYnkKKyAgQHBhcmFtIEIgICAgICAgIFNlY29uZCBwb2ludCB0byBtdWx0aXBseQorICBAcGFyYW0ga0IgICAgICAgV2hhdCB0byBtdWx0aXBsZSBCIGJ5CisgIEBwYXJhbSBDICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBwb2ludCAoY2FuIG92ZXJsYXAgd2l0aCBBIG9yIEIKKyAgQHBhcmFtIG1vZHVsdXMgIE1vZHVsdXMgZm9yIGN1cnZlIAorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyovIAoraW50IGx0Y19lY2NfbXVsMmFkZChlY2NfcG9pbnQgKkEsIHZvaWQgKmtBLAorICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKkIsIHZvaWQgKmtCLAorICAgICAgICAgICAgICAgICAgICBlY2NfcG9pbnQgKkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqbW9kdWx1cykKK3sKKyAgZWNjX3BvaW50ICAgICAqcHJlY29tcFsxNl07CisgIHVuc2lnbmVkICAgICAgIGJpdGJ1ZkEsIGJpdGJ1ZkIsIGxlbkEsIGxlbkIsIGxlbiwgeCwgeSwgbkEsIG5CLCBuaWJibGU7CisgIHVuc2lnbmVkIGNoYXIgKnRBLCAqdEI7CisgIGludCAgICAgICAgICAgIGVyciwgZmlyc3Q7CisgIHZvaWQgICAgICAgICAgKm1wLCAqbXU7CisgCisgIC8qIGFyZ2Noa3MgKi8KKyAgTFRDX0FSR0NISyhBICAgICAgICE9IE5VTEwpOworICBMVENfQVJHQ0hLKEIgICAgICAgIT0gTlVMTCk7CisgIExUQ19BUkdDSEsoQyAgICAgICAhPSBOVUxMKTsKKyAgTFRDX0FSR0NISyhrQSAgICAgICE9IE5VTEwpOworICBMVENfQVJHQ0hLKGtCICAgICAgIT0gTlVMTCk7CisgIExUQ19BUkdDSEsobW9kdWx1cyAhPSBOVUxMKTsKKworICAvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KKyAgdEEgPSBYQ0FMTE9DKDEsIEVDQ19CVUZfU0laRSk7CisgIGlmICh0QSA9PSBOVUxMKSB7CisgICAgIHJldHVybiBDUllQVF9NRU07CisgIH0KKyAgdEIgPSBYQ0FMTE9DKDEsIEVDQ19CVUZfU0laRSk7CisgIGlmICh0QiA9PSBOVUxMKSB7CisgICAgIFhGUkVFKHRBKTsKKyAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgfQorCisgIC8qIGdldCBzaXplcyAqLworICBsZW5BID0gbXBfdW5zaWduZWRfYmluX3NpemUoa0EpOworICBsZW5CID0gbXBfdW5zaWduZWRfYmluX3NpemUoa0IpOworICBsZW4gID0gTUFYKGxlbkEsIGxlbkIpOworCisgIC8qIHNhbml0eSBjaGVjayAqLworICBpZiAoKGxlbkEgPiBFQ0NfQlVGX1NJWkUpIHx8IChsZW5CID4gRUNDX0JVRl9TSVpFKSkgeworICAgICBlcnIgPSBDUllQVF9JTlZBTElEX0FSRzsKKyAgICAgZ290byBFUlJfVDsKKyAgfQorCisgIC8qIGV4dHJhY3QgYW5kIGp1c3RpZnkga0EgKi8KKyAgbXBfdG9fdW5zaWduZWRfYmluKGtBLCAobGVuIC0gbGVuQSkgKyB0QSk7CisKKyAgLyogZXh0cmFjdCBhbmQganVzdGlmeSBrQiAqLworICBtcF90b191bnNpZ25lZF9iaW4oa0IsIChsZW4gLSBsZW5CKSArIHRCKTsKKworICAvKiBhbGxvY2F0ZSB0aGUgdGFibGUgKi8KKyAgZm9yICh4ID0gMDsgeCA8IDE2OyB4KyspIHsKKyAgICAgcHJlY29tcFt4XSA9IGx0Y19lY2NfbmV3X3BvaW50KCk7CisgICAgIGlmIChwcmVjb21wW3hdID09IE5VTEwpIHsKKyAgICAgICAgIGZvciAoeSA9IDA7IHkgPCB4OyArK3kpIHsKKyAgICAgICAgICAgIGx0Y19lY2NfZGVsX3BvaW50KHByZWNvbXBbeV0pOworICAgICAgICAgfQorICAgICAgICAgZXJyID0gQ1JZUFRfTUVNOworICAgICAgICAgZ290byBFUlJfVDsKKyAgICAgfQorICB9CisKKyAgIC8qIGluaXQgbW9udGdvbWVyeSByZWR1Y3Rpb24gKi8KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9zZXR1cChtb2R1bHVzLCAmbXApKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBFUlJfUDsKKyAgIH0KKyAgIGlmICgoZXJyID0gbXBfaW5pdCgmbXUpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBFUlJfTVA7CisgICB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfbm9ybWFsaXphdGlvbihtdSwgbW9kdWx1cykpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIEVSUl9NVTsKKyAgIH0KKworICAvKiBjb3B5IG9uZXMgLi4uICovCisgIGlmICgoZXJyID0gbXBfbXVsbW9kKEEtPngsIG11LCBtb2R1bHVzLCBwcmVjb21wWzFdLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSX01VOyB9CisgIGlmICgoZXJyID0gbXBfbXVsbW9kKEEtPnksIG11LCBtb2R1bHVzLCBwcmVjb21wWzFdLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSX01VOyB9CisgIGlmICgoZXJyID0gbXBfbXVsbW9kKEEtPnosIG11LCBtb2R1bHVzLCBwcmVjb21wWzFdLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSX01VOyB9CisKKyAgaWYgKChlcnIgPSBtcF9tdWxtb2QoQi0+eCwgbXUsIG1vZHVsdXMsIHByZWNvbXBbMTw8Ml0tPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBFUlJfTVU7IH0KKyAgaWYgKChlcnIgPSBtcF9tdWxtb2QoQi0+eSwgbXUsIG1vZHVsdXMsIHByZWNvbXBbMTw8Ml0tPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBFUlJfTVU7IH0KKyAgaWYgKChlcnIgPSBtcF9tdWxtb2QoQi0+eiwgbXUsIG1vZHVsdXMsIHByZWNvbXBbMTw8Ml0tPnopKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBFUlJfTVU7IH0KKworICAvKiBwcmVjb21wIFtpLDBdKEEgKyBCKSB0YWJsZSAqLworICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRkYmwocHJlY29tcFsxXSwgcHJlY29tcFsyXSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIEVSUl9NVTsgfQorICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRhZGQocHJlY29tcFsxXSwgcHJlY29tcFsyXSwgcHJlY29tcFszXSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgeyBnb3RvIEVSUl9NVTsgfQorCisgIC8qIHByZWNvbXAgWzAsaV0oQSArIEIpIHRhYmxlICovCisgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibChwcmVjb21wWzE8PDJdLCBwcmVjb21wWzI8PDJdLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSX01VOyB9CisgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChwcmVjb21wWzE8PDJdLCBwcmVjb21wWzI8PDJdLCBwcmVjb21wWzM8PDJdLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICB7IGdvdG8gRVJSX01VOyB9CisKKyAgLyogcHJlY29tcCBbaSxqXShBICsgQikgdGFibGUgKGkgIT0gMCwgaiAhPSAwKSAqLworICBmb3IgKHggPSAxOyB4IDwgNDsgeCsrKSB7CisgICAgIGZvciAoeSA9IDE7IHkgPCA0OyB5KyspIHsKKyAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0YWRkKHByZWNvbXBbeF0sIHByZWNvbXBbKHk8PDIpXSwgcHJlY29tcFt4Kyh5PDwyKV0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spIHsgZ290byBFUlJfTVU7IH0KKyAgICAgfQorICB9ICAgCisKKyAgbmliYmxlICA9IDM7CisgIGZpcnN0ICAgPSAxOworICBiaXRidWZBID0gdEFbMF07CisgIGJpdGJ1ZkIgPSB0QlswXTsKKworICAvKiBmb3IgZXZlcnkgYnl0ZSBvZiB0aGUgbXVsdGlwbGljYW5kcyAqLworICBmb3IgKHggPSAtMTs7ICkgeworICAgICAvKiBncmFiIGEgbmliYmxlICovCisgICAgIGlmICgrK25pYmJsZSA9PSA0KSB7CisgICAgICAgICsreDsgaWYgKHggPT0gbGVuKSBicmVhazsKKyAgICAgICAgYml0YnVmQSA9IHRBW3hdOworICAgICAgICBiaXRidWZCID0gdEJbeF07CisgICAgICAgIG5pYmJsZSAgPSAwOworICAgICB9CisKKyAgICAgLyogZXh0cmFjdCB0d28gYml0cyBmcm9tIGJvdGgsIHNoaWZ0L3VwZGF0ZSAqLworICAgICBuQSA9IChiaXRidWZBID4+IDYpICYgMHgwMzsKKyAgICAgbkIgPSAoYml0YnVmQiA+PiA2KSAmIDB4MDM7CisgICAgIGJpdGJ1ZkEgPSAoYml0YnVmQSA8PCAyKSAmIDB4RkY7ICAgCisgICAgIGJpdGJ1ZkIgPSAoYml0YnVmQiA8PCAyKSAmIDB4RkY7ICAgCisKKyAgICAgLyogaWYgYm90aCB6ZXJvLCBpZiBmaXJzdCwgY29udGludWUgKi8KKyAgICAgaWYgKChuQSA9PSAwKSAmJiAobkIgPT0gMCkgJiYgKGZpcnN0ID09IDEpKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICB9CisKKyAgICAgLyogZG91YmxlIHR3aWNlLCBvbmx5IGlmIHRoaXMgaXNuJ3QgdGhlIGZpcnN0ICovCisgICAgIGlmIChmaXJzdCA9PSAwKSB7CisgICAgICAgIC8qIGRvdWJsZSB0d2ljZSAqLworICAgICAgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRkYmwoQywgQywgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICB7IGdvdG8gRVJSX01VOyB9CisgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibChDLCBDLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgIHsgZ290byBFUlJfTVU7IH0KKyAgICAgfQorCisgICAgIC8qIGlmIG5vdCBib3RoIHplcm8gKi8KKyAgICAgaWYgKChuQSAhPSAwKSB8fCAobkIgIT0gMCkpIHsKKyAgICAgICAgaWYgKGZpcnN0ID09IDEpIHsKKyAgICAgICAgICAgLyogaWYgZmlyc3QsIGNvcHkgZnJvbSB0YWJsZSAqLworICAgICAgICAgICBmaXJzdCA9IDA7CisgICAgICAgICAgIGlmICgoZXJyID0gbXBfY29weShwcmVjb21wW25BICsgKG5CPDwyKV0tPngsIEMtPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgIHsgZ290byBFUlJfTVU7IH0KKyAgICAgICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KHByZWNvbXBbbkEgKyAobkI8PDIpXS0+eSwgQy0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgeyBnb3RvIEVSUl9NVTsgfQorICAgICAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkocHJlY29tcFtuQSArIChuQjw8MildLT56LCBDLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICB7IGdvdG8gRVJSX01VOyB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgIC8qIGlmIG5vdCBmaXJzdCwgYWRkIGZyb20gdGFibGUgKi8KKyAgICAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0YWRkKEMsIHByZWNvbXBbbkEgKyAobkI8PDIpXSwgQywgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgeyBnb3RvIEVSUl9NVTsgfQorICAgICAgICB9CisgICAgIH0KKyAgfQorCisgIC8qIHJlZHVjZSB0byBhZmZpbmUgKi8KKyAgZXJyID0gbHRjX2VjY19tYXAoQywgbW9kdWx1cywgbXApOworCisgIC8qIGNsZWFuIHVwICovCitFUlJfTVU6CisgICBtcF9jbGVhcihtdSk7CitFUlJfTVA6CisgICBtcF9tb250Z29tZXJ5X2ZyZWUobXApOworRVJSX1A6CisgICBmb3IgKHggPSAwOyB4IDwgMTY7IHgrKykgeworICAgICAgIGx0Y19lY2NfZGVsX3BvaW50KHByZWNvbXBbeF0pOworICAgfQorRVJSX1Q6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKHRBLCBFQ0NfQlVGX1NJWkUpOworICAgemVyb21lbSh0QiwgRUNDX0JVRl9TSVpFKTsKKyNlbmRpZgorICAgWEZSRUUodEEpOworICAgWEZSRUUodEIpOworCisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfbXVsMmFkZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMDU6MDc6NTkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX211bG1vZC5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX211bG1vZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNGM5MmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfbXVsbW9kLmMKQEAgLTAsMCArMSwyMjIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGx0Y19lY2NfbXVsbW9kLmMKKyAgRUNDIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNRUNDCisjaWZuZGVmIExUQ19FQ0NfVElNSU5HX1JFU0lTVEFOVAorCisvKiBzaXplIG9mIHNsaWRpbmcgd2luZG93LCBkb24ndCBjaGFuZ2UgdGhpcyEgKi8KKyNkZWZpbmUgV0lOU0laRSA0CisKKy8qKgorICAgUGVyZm9ybSBhIHBvaW50IG11bHRpcGxpY2F0aW9uIAorICAgQHBhcmFtIGsgICAgVGhlIHNjYWxhciB0byBtdWx0aXBseSBieQorICAgQHBhcmFtIEcgICAgVGhlIGJhc2UgcG9pbnQKKyAgIEBwYXJhbSBSICAgIFtvdXRdIERlc3RpbmF0aW9uIGZvciBrRworICAgQHBhcmFtIG1vZHVsdXMgIFRoZSBtb2R1bHVzIG9mIHRoZSBmaWVsZCB0aGUgRUNDIGN1cnZlIGlzIGluCisgICBAcGFyYW0gbWFwICAgICAgQm9vbGVhbiB3aGV0aGVyIHRvIG1hcCBiYWNrIHRvIGFmZmluZSBvciBub3QgKDE9PW1hcCwgMCA9PSBsZWF2ZSBpbiBwcm9qZWN0aXZlKQorICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGx0Y19lY2NfbXVsbW9kKHZvaWQgKmssIGVjY19wb2ludCAqRywgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCBpbnQgbWFwKQoreworICAgZWNjX3BvaW50ICp0RywgKk1bOF07CisgICBpbnQgICAgICAgIGksIGosIGVycjsKKyAgIHZvaWQgICAgICAgKm11LCAqbXA7CisgICB1bnNpZ25lZCBsb25nIGJ1ZjsKKyAgIGludCAgICAgICAgZmlyc3QsIGJpdGJ1ZiwgYml0Y3B5LCBiaXRjbnQsIG1vZGUsIGRpZ2lkeDsKKworICAgTFRDX0FSR0NISyhrICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhHICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhSICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhtb2R1bHVzICE9IE5VTEwpOworCisgICAvKiBpbml0IG1vbnRnb21lcnkgcmVkdWN0aW9uICovCisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfc2V0dXAobW9kdWx1cywgJm1wKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBpZiAoKGVyciA9IG1wX2luaXQoJm11KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIG1wX21vbnRnb21lcnlfZnJlZShtcCk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X25vcm1hbGl6YXRpb24obXUsIG1vZHVsdXMpKSAhPSBDUllQVF9PSykgeworICAgICAgbXBfbW9udGdvbWVyeV9mcmVlKG1wKTsKKyAgICAgIG1wX2NsZWFyKG11KTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgIAorICAvKiBhbGxvYyByYW0gZm9yIHdpbmRvdyB0ZW1wcyAqLworICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICBNW2ldID0gbHRjX2VjY19uZXdfcG9pbnQoKTsKKyAgICAgIGlmIChNW2ldID09IE5VTEwpIHsKKyAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKyAgICAgICAgICAgICBsdGNfZWNjX2RlbF9wb2ludChNW2pdKTsKKyAgICAgICAgIH0KKyAgICAgICAgIG1wX21vbnRnb21lcnlfZnJlZShtcCk7CisgICAgICAgICBtcF9jbGVhcihtdSk7CisgICAgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgICAgfQorICB9CisKKyAgIC8qIG1ha2UgYSBjb3B5IG9mIEcgaW5jYXNlIFI9PUcgKi8KKyAgIHRHID0gbHRjX2VjY19uZXdfcG9pbnQoKTsKKyAgIGlmICh0RyA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGVyciA9IENSWVBUX01FTTsgZ290byBkb25lOyB9CisKKyAgIC8qIHRHID0gRyAgYW5kIGNvbnZlcnQgdG8gbW9udGdvbWVyeSAqLworICAgaWYgKG1wX2NtcF9kKG11LCAxKSA9PSBMVENfTVBfRVEpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfY29weShHLT54LCB0Ry0+eCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KEctPnksIHRHLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoRy0+eiwgdEctPnopKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0gZWxzZSB7ICAgICAgCisgICAgICBpZiAoKGVyciA9IG1wX211bG1vZChHLT54LCBtdSwgbW9kdWx1cywgdEctPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsbW9kKEctPnksIG11LCBtb2R1bHVzLCB0Ry0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgaWYgKChlcnIgPSBtcF9tdWxtb2QoRy0+eiwgbXUsIG1vZHVsdXMsIHRHLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgICBtcF9jbGVhcihtdSk7CisgICBtdSA9IE5VTEw7CisgICAKKyAgIC8qIGNhbGMgdGhlIE0gdGFiLCB3aGljaCBob2xkcyBrRyBmb3Igaz09OC4uMTUgKi8KKyAgIC8qIE1bMF0gPT0gOEcgKi8KKyAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibCh0RywgTVswXSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRkYmwoTVswXSwgTVswXSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0ZGJsKE1bMF0sIE1bMF0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKworICAgLyogbm93IGZpbmQgKDgraylHIGZvciBrPTEuLjcgKi8KKyAgIGZvciAoaiA9IDk7IGogPCAxNjsgaisrKSB7CisgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0YWRkKE1bai05XSwgdEcsIE1bai04XSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICB7IGdvdG8gZG9uZTsgfQorICAgfQorCisgICAvKiBzZXR1cCBzbGlkaW5nIHdpbmRvdyAqLworICAgbW9kZSAgID0gMDsKKyAgIGJpdGNudCA9IDE7CisgICBidWYgICAgPSAwOworICAgZGlnaWR4ID0gbXBfZ2V0X2RpZ2l0X2NvdW50KGspIC0gMTsKKyAgIGJpdGNweSA9IGJpdGJ1ZiA9IDA7CisgICBmaXJzdCAgPSAxOworCisgICAvKiBwZXJmb3JtIG9wcyAqLworICAgZm9yICg7OykgeworICAgICAvKiBncmFiIG5leHQgZGlnaXQgYXMgcmVxdWlyZWQgKi8KKyAgICAgaWYgKC0tYml0Y250ID09IDApIHsKKyAgICAgICBpZiAoZGlnaWR4ID09IC0xKSB7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgfQorICAgICAgIGJ1ZiAgICA9IG1wX2dldF9kaWdpdChrLCBkaWdpZHgpOworICAgICAgIGJpdGNudCA9IChpbnQpIGx0Y19tcC5iaXRzX3Blcl9kaWdpdDsKKyAgICAgICAtLWRpZ2lkeDsKKyAgICAgfQorCisgICAgIC8qIGdyYWIgdGhlIG5leHQgbXNiIGZyb20gdGhlIGx0aXBsaWNhbmQgKi8KKyAgICAgaSA9IChidWYgPj4gKGx0Y19tcC5iaXRzX3Blcl9kaWdpdCAtIDEpKSAmIDE7CisgICAgIGJ1ZiA8PD0gMTsKKworICAgICAvKiBza2lwIGxlYWRpbmcgemVybyBiaXRzICovCisgICAgIGlmIChtb2RlID09IDAgJiYgaSA9PSAwKSB7CisgICAgICAgIGNvbnRpbnVlOworICAgICB9CisKKyAgICAgLyogaWYgdGhlIGJpdCBpcyB6ZXJvIGFuZCBtb2RlID09IDEgdGhlbiB3ZSBkb3VibGUgKi8KKyAgICAgaWYgKG1vZGUgPT0gMSAmJiBpID09IDApIHsKKyAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0ZGJsKFIsIFIsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgICBjb250aW51ZTsKKyAgICAgfQorCisgICAgIC8qIGVsc2Ugd2UgYWRkIGl0IHRvIHRoZSB3aW5kb3cgKi8KKyAgICAgYml0YnVmIHw9IChpIDw8IChXSU5TSVpFIC0gKytiaXRjcHkpKTsKKyAgICAgbW9kZSA9IDI7CisKKyAgICAgaWYgKGJpdGNweSA9PSBXSU5TSVpFKSB7CisgICAgICAgLyogaWYgdGhpcyBpcyB0aGUgZmlyc3Qgd2luZG93IHdlIGRvIGEgc2ltcGxlIGNvcHkgKi8KKyAgICAgICBpZiAoZmlyc3QgPT0gMSkgeworICAgICAgICAgIC8qIFIgPSBrRyBbayA9IGZpcnN0IHdpbmRvd10gKi8KKyAgICAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoTVtiaXRidWYtOF0tPngsIFItPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgICAgIGlmICgoZXJyID0gbXBfY29weShNW2JpdGJ1Zi04XS0+eSwgUi0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KE1bYml0YnVmLThdLT56LCBSLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICAgICBmaXJzdCA9IDA7CisgICAgICAgfSBlbHNlIHsKKyAgICAgICAgIC8qIG5vcm1hbCB3aW5kb3cgKi8KKyAgICAgICAgIC8qIG9rIHdpbmRvdyBpcyBmaWxsZWQgc28gZG91YmxlIGFzIHJlcXVpcmVkIGFuZCBhZGQgICovCisgICAgICAgICAvKiBkb3VibGUgZmlyc3QgKi8KKyAgICAgICAgIGZvciAoaiA9IDA7IGogPCBXSU5TSVpFOyBqKyspIHsKKyAgICAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0ZGJsKFIsIFIsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgICAgfQorCisgICAgICAgICAvKiB0aGVuIGFkZCwgYml0YnVmIHdpbGwgYmUgOC4uMTUgWzguLjJeV0lOU0laRV0gZ3VhcmFudGVlZCAqLworICAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0YWRkKFIsIE1bYml0YnVmLThdLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgIHsgZ290byBkb25lOyB9CisgICAgICAgfQorICAgICAgIC8qIGVtcHR5IHdpbmRvdyBhbmQgcmVzZXQgKi8KKyAgICAgICBiaXRjcHkgPSBiaXRidWYgPSAwOworICAgICAgIG1vZGUgPSAxOworICAgIH0KKyAgfQorCisgICAvKiBpZiBiaXRzIHJlbWFpbiB0aGVuIGRvdWJsZS9hZGQgKi8KKyAgIGlmIChtb2RlID09IDIgJiYgYml0Y3B5ID4gMCkgeworICAgICAvKiBkb3VibGUgdGhlbiBhZGQgKi8KKyAgICAgZm9yIChqID0gMDsgaiA8IGJpdGNweTsgaisrKSB7CisgICAgICAgLyogb25seSBkb3VibGUgaWYgd2UgaGF2ZSBoYWQgYXQgbGVhc3Qgb25lIGFkZCBmaXJzdCAqLworICAgICAgIGlmIChmaXJzdCA9PSAwKSB7CisgICAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0ZGJsKFIsIFIsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgIH0KKworICAgICAgIGJpdGJ1ZiA8PD0gMTsKKyAgICAgICBpZiAoKGJpdGJ1ZiAmICgxIDw8IFdJTlNJWkUpKSAhPSAwKSB7CisgICAgICAgICBpZiAoZmlyc3QgPT0gMSl7CisgICAgICAgICAgICAvKiBmaXJzdCBhZGQsIHNvIGNvcHkgKi8KKyAgICAgICAgICAgIGlmICgoZXJyID0gbXBfY29weSh0Ry0+eCwgUi0+eCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkodEctPnksIFItPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KHRHLT56LCBSLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICAgICAgIGZpcnN0ID0gMDsKKyAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiB0aGVuIGFkZCAqLworICAgICAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0YWRkKFIsIHRHLCBSLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICAgIH0KKyAgICAgICB9CisgICAgIH0KKyAgIH0KKworICAgLyogbWFwIFIgYmFjayBmcm9tIHByb2plY3RpdmUgc3BhY2UgKi8KKyAgIGlmIChtYXApIHsKKyAgICAgIGVyciA9IGx0Y19lY2NfbWFwKFIsIG1vZHVsdXMsIG1wKTsKKyAgIH0gZWxzZSB7CisgICAgICBlcnIgPSBDUllQVF9PSzsKKyAgIH0KK2RvbmU6CisgICBpZiAobXUgIT0gTlVMTCkgeworICAgICAgbXBfY2xlYXIobXUpOworICAgfQorICAgbXBfbW9udGdvbWVyeV9mcmVlKG1wKTsKKyAgIGx0Y19lY2NfZGVsX3BvaW50KHRHKTsKKyAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICBsdGNfZWNjX2RlbF9wb2ludChNW2ldKTsKKyAgIH0KKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisjdW5kZWYgV0lOU0laRQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX211bG1vZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjI0ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDA1OjA3OjU5ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvbHRjX2VjY19tdWxtb2RfdGltaW5nLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfbXVsbW9kX3RpbWluZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NGE1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfbXVsbW9kX3RpbWluZy5jCkBAIC0wLDAgKzEsMTY3IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBsdGNfZWNjX211bG1vZF90aW1pbmcuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworI2lmZGVmIExUQ19FQ0NfVElNSU5HX1JFU0lTVEFOVAorCisvKioKKyAgIFBlcmZvcm0gYSBwb2ludCBtdWx0aXBsaWNhdGlvbiAgKHRpbWluZyByZXNpc3RhbnQpCisgICBAcGFyYW0gayAgICBUaGUgc2NhbGFyIHRvIG11bHRpcGx5IGJ5CisgICBAcGFyYW0gRyAgICBUaGUgYmFzZSBwb2ludAorICAgQHBhcmFtIFIgICAgW291dF0gRGVzdGluYXRpb24gZm9yIGtHCisgICBAcGFyYW0gbW9kdWx1cyAgVGhlIG1vZHVsdXMgb2YgdGhlIGZpZWxkIHRoZSBFQ0MgY3VydmUgaXMgaW4KKyAgIEBwYXJhbSBtYXAgICAgICBCb29sZWFuIHdoZXRoZXIgdG8gbWFwIGJhY2sgdG8gYWZmaW5lIG9yIG5vdCAoMT09bWFwLCAwID09IGxlYXZlIGluIHByb2plY3RpdmUpCisgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyovCitpbnQgbHRjX2VjY19tdWxtb2Qodm9pZCAqaywgZWNjX3BvaW50ICpHLCBlY2NfcG9pbnQgKlIsIHZvaWQgKm1vZHVsdXMsIGludCBtYXApCit7CisgICBlY2NfcG9pbnQgKnRHLCAqTVszXTsKKyAgIGludCAgICAgICAgaSwgaiwgZXJyOworICAgdm9pZCAgICAgICAqbXUsICptcDsKKyAgIHVuc2lnbmVkIGxvbmcgYnVmOworICAgaW50ICAgICAgICBmaXJzdCwgYml0YnVmLCBiaXRjcHksIGJpdGNudCwgbW9kZSwgZGlnaWR4OworCisgICBMVENfQVJHQ0hLKGsgICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKEcgICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKFIgICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG1vZHVsdXMgIT0gTlVMTCk7CisKKyAgIC8qIGluaXQgbW9udGdvbWVyeSByZWR1Y3Rpb24gKi8KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9zZXR1cChtb2R1bHVzLCAmbXApKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGlmICgoZXJyID0gbXBfaW5pdCgmbXUpKSAhPSBDUllQVF9PSykgeworICAgICAgbXBfbW9udGdvbWVyeV9mcmVlKG1wKTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfbm9ybWFsaXphdGlvbihtdSwgbW9kdWx1cykpICE9IENSWVBUX09LKSB7CisgICAgICBtcF9jbGVhcihtdSk7CisgICAgICBtcF9tb250Z29tZXJ5X2ZyZWUobXApOworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAvKiBhbGxvYyByYW0gZm9yIHdpbmRvdyB0ZW1wcyAqLworICBmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisgICAgICBNW2ldID0gbHRjX2VjY19uZXdfcG9pbnQoKTsKKyAgICAgIGlmIChNW2ldID09IE5VTEwpIHsKKyAgICAgICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKyAgICAgICAgICAgICBsdGNfZWNjX2RlbF9wb2ludChNW2pdKTsKKyAgICAgICAgIH0KKyAgICAgICAgIG1wX2NsZWFyKG11KTsKKyAgICAgICAgIG1wX21vbnRnb21lcnlfZnJlZShtcCk7CisgICAgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgICAgfQorICB9CisKKyAgIC8qIG1ha2UgYSBjb3B5IG9mIEcgaW5jYXNlIFI9PUcgKi8KKyAgIHRHID0gbHRjX2VjY19uZXdfcG9pbnQoKTsKKyAgIGlmICh0RyA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGVyciA9IENSWVBUX01FTTsgZ290byBkb25lOyB9CisKKyAgIC8qIHRHID0gRyAgYW5kIGNvbnZlcnQgdG8gbW9udGdvbWVyeSAqLworICAgaWYgKChlcnIgPSBtcF9tdWxtb2QoRy0+eCwgbXUsIG1vZHVsdXMsIHRHLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX211bG1vZChHLT55LCBtdSwgbW9kdWx1cywgdEctPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbXVsbW9kKEctPnosIG11LCBtb2R1bHVzLCB0Ry0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgbXBfY2xlYXIobXUpOworICAgbXUgPSBOVUxMOworICAgCisgICAvKiBjYWxjIHRoZSBNIHRhYiAqLworICAgLyogTVswXSA9PSBHICovCisgICBpZiAoKGVyciA9IG1wX2NvcHkodEctPngsIE1bMF0tPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfY29weSh0Ry0+eSwgTVswXS0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9jb3B5KHRHLT56LCBNWzBdLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAvKiBNWzFdID09IDJHICovCisgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRkYmwodEcsIE1bMV0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKworICAgLyogc2V0dXAgc2xpZGluZyB3aW5kb3cgKi8KKyAgIG1vZGUgICA9IDA7CisgICBiaXRjbnQgPSAxOworICAgYnVmICAgID0gMDsKKyAgIGRpZ2lkeCA9IG1wX2dldF9kaWdpdF9jb3VudChrKSAtIDE7CisgICBiaXRjcHkgPSBiaXRidWYgPSAwOworICAgZmlyc3QgID0gMTsKKworICAgLyogcGVyZm9ybSBvcHMgKi8KKyAgIGZvciAoOzspIHsKKyAgICAgLyogZ3JhYiBuZXh0IGRpZ2l0IGFzIHJlcXVpcmVkICovCisgICAgICBpZiAoLS1iaXRjbnQgPT0gMCkgeworICAgICAgICAgaWYgKGRpZ2lkeCA9PSAtMSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgICAgICAgICBidWYgICAgPSBtcF9nZXRfZGlnaXQoaywgZGlnaWR4KTsKKyAgICAgICAgIGJpdGNudCA9IChpbnQpIE1QX0RJR0lUX0JJVDsKKyAgICAgICAgIC0tZGlnaWR4OworICAgICAgfQorCisgICAgICAvKiBncmFiIHRoZSBuZXh0IG1zYiBmcm9tIHRoZSBsdGlwbGljYW5kICovCisgICAgICBpID0gKGJ1ZiA+PiAoTVBfRElHSVRfQklUIC0gMSkpICYgMTsKKyAgICAgIGJ1ZiA8PD0gMTsKKworICAgICAgaWYgKG1vZGUgPT0gMCAmJiBpID09IDApIHsKKyAgICAgICAgIC8qIGR1bW15IG9wZXJhdGlvbnMgKi8KKyAgICAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGFkZChNWzBdLCBNWzFdLCBNWzJdLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0ZGJsKE1bMV0sIE1bMl0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgaWYgKG1vZGUgPT0gMCAmJiBpID09IDEpIHsKKyAgICAgICAgIG1vZGUgPSAxOworICAgICAgICAgLyogZHVtbXkgb3BlcmF0aW9ucyAqLworICAgICAgICAgaWYgKChlcnIgPSBsdGNfbXAuZWNjX3B0YWRkKE1bMF0sIE1bMV0sIE1bMl0sIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgIHsgZ290byBkb25lOyB9CisgICAgICAgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRkYmwoTVsxXSwgTVsyXSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBpZiAoKGVyciA9IGx0Y19tcC5lY2NfcHRhZGQoTVswXSwgTVsxXSwgTVtpXjFdLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgIGlmICgoZXJyID0gbHRjX21wLmVjY19wdGRibChNW2ldLCBNW2ldLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorCisgICAvKiBjb3B5IHJlc3VsdCBvdXQgKi8KKyAgIGlmICgoZXJyID0gbXBfY29weShNWzBdLT54LCBSLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9jb3B5KE1bMF0tPnksIFItPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX2NvcHkoTVswXS0+eiwgUi0+eikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKworICAgLyogbWFwIFIgYmFjayBmcm9tIHByb2plY3RpdmUgc3BhY2UgKi8KKyAgIGlmIChtYXApIHsKKyAgICAgIGVyciA9IGx0Y19lY2NfbWFwKFIsIG1vZHVsdXMsIG1wKTsKKyAgIH0gZWxzZSB7CisgICAgICBlcnIgPSBDUllQVF9PSzsKKyAgIH0KK2RvbmU6CisgICBpZiAobXUgIT0gTlVMTCkgeworICAgICAgbXBfY2xlYXIobXUpOworICAgfQorICAgbXBfbW9udGdvbWVyeV9mcmVlKG1wKTsKKyAgIGx0Y19lY2NfZGVsX3BvaW50KHRHKTsKKyAgIGZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKyAgICAgICBsdGNfZWNjX2RlbF9wb2ludChNW2ldKTsKKyAgIH0KKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfbXVsbW9kX3RpbWluZy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjExICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIyOjE3OjQ2ICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX3BvaW50cy5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX3BvaW50cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZjEzMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfcG9pbnRzLmMKQEAgLTAsMCArMSw2MCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKworLyogSW1wbGVtZW50cyBFQ0Mgb3ZlciBaL3BaIGZvciBjdXJ2ZSB5XjIgPSB4XjMgLSAzeCArIGIKKyAqCisgKiBBbGwgY3VydmVzIHRha2VuIGZyb20gTklTVCByZWNvbW1lbmRhdGlvbiBwYXBlciBvZiBKdWx5IDE5OTkKKyAqIEF2YWlsYWJsZSBhdCBodHRwOi8vY3NyYy5uaXN0Lmdvdi9jcnlwdHZhbC9kc3MuaHRtCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgbHRjX2VjY19wb2ludHMuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1FQ0MKKworLyoqCisgICBBbGxvY2F0ZSBhIG5ldyBFQ0MgcG9pbnQKKyAgIEByZXR1cm4gQSBuZXdseSBhbGxvY2F0ZWQgcG9pbnQgb3IgTlVMTCBvbiBlcnJvciAKKyovCitlY2NfcG9pbnQgKmx0Y19lY2NfbmV3X3BvaW50KHZvaWQpCit7CisgICBlY2NfcG9pbnQgKnA7CisgICBwID0gWENBTExPQygxLCBzaXplb2YoKnApKTsKKyAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgIHJldHVybiBOVUxMOworICAgfQorICAgaWYgKG1wX2luaXRfbXVsdGkoJnAtPngsICZwLT55LCAmcC0+eiwgTlVMTCkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIFhGUkVFKHApOworICAgICAgcmV0dXJuIE5VTEw7CisgICB9CisgICByZXR1cm4gcDsKK30KKworLyoqIEZyZWUgYW4gRUNDIHBvaW50IGZyb20gbWVtb3J5CisgIEBwYXJhbSBwICAgVGhlIHBvaW50IHRvIGZyZWUKKyovCit2b2lkIGx0Y19lY2NfZGVsX3BvaW50KGVjY19wb2ludCAqcCkKK3sKKyAgIC8qIHByZXZlbnRzIGZyZWUnaW5nIG51bGwgYXJndW1lbnRzICovCisgICBpZiAocCAhPSBOVUxMKSB7CisgICAgICBtcF9jbGVhcl9tdWx0aShwLT54LCBwLT55LCBwLT56LCBOVUxMKTsgLyogbm90ZTogcC0+eiBtYXkgYmUgTlVMTCBidXQgdGhhdCdzIG9rIHdpdGggdGhpcyBmdW5jdGlvbiBhbnl3YXlzICovCisgICAgICBYRlJFRShwKTsKKyAgIH0KK30KKworI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfcG9pbnRzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMjoxOTo0OCAkICovCisKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvbHRjX2VjY19wcm9qZWN0aXZlX2FkZF9wb2ludC5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX3Byb2plY3RpdmVfYWRkX3BvaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlMzU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvbHRjX2VjY19wcm9qZWN0aXZlX2FkZF9wb2ludC5jCkBAIC0wLDAgKzEsMTk2IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBJbXBsZW1lbnRzIEVDQyBvdmVyIFovcFogZm9yIGN1cnZlIHleMiA9IHheMyAtIDN4ICsgYgorICoKKyAqIEFsbCBjdXJ2ZXMgdGFrZW4gZnJvbSBOSVNUIHJlY29tbWVuZGF0aW9uIHBhcGVyIG9mIEp1bHkgMTk5OQorICogQXZhaWxhYmxlIGF0IGh0dHA6Ly9jc3JjLm5pc3QuZ292L2NyeXB0dmFsL2Rzcy5odG0KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBsdGNfZWNjX3Byb2plY3RpdmVfYWRkX3BvaW50LmMKKyAgRUNDIENyeXB0bywgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZiBkZWZpbmVkKE1FQ0MpICYmICghZGVmaW5lZChNRUNDX0FDQ0VMKSB8fCBkZWZpbmVkKExUTV9ERVNDKSkKKworLyoqCisgICBBZGQgdHdvIEVDQyBwb2ludHMKKyAgIEBwYXJhbSBQICAgICAgICBUaGUgcG9pbnQgdG8gYWRkCisgICBAcGFyYW0gUSAgICAgICAgVGhlIHBvaW50IHRvIGFkZAorICAgQHBhcmFtIFIgICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgZG91YmxlCisgICBAcGFyYW0gbW9kdWx1cyAgVGhlIG1vZHVsdXMgb2YgdGhlIGZpZWxkIHRoZSBFQ0MgY3VydmUgaXMgaW4KKyAgIEBwYXJhbSBtcCAgICAgICBUaGUgImIiIHZhbHVlIGZyb20gbW9udGdvbWVyeV9zZXR1cCgpCisgICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MKKyovCitpbnQgbHRjX2VjY19wcm9qZWN0aXZlX2FkZF9wb2ludChlY2NfcG9pbnQgKlAsIGVjY19wb2ludCAqUSwgZWNjX3BvaW50ICpSLCB2b2lkICptb2R1bHVzLCB2b2lkICptcCkKK3sKKyAgIHZvaWQgICp0MSwgKnQyLCAqeCwgKnksICp6OworICAgaW50ICAgIGVycjsKKworICAgTFRDX0FSR0NISyhQICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhRICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhSICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhtb2R1bHVzICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhtcCAgICAgICE9IE5VTEwpOworCisgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnQxLCAmdDIsICZ4LCAmeSwgJnosIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIAorICAgLyogc2hvdWxkIHdlIGRibCBpbnN0ZWFkPyAqLworICAgaWYgKChlcnIgPSBtcF9zdWIobW9kdWx1cywgUS0+eSwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIGlmICggKG1wX2NtcChQLT54LCBRLT54KSA9PSBMVENfTVBfRVEpICYmIAorICAgICAgICAoUS0+eiAhPSBOVUxMICYmIG1wX2NtcChQLT56LCBRLT56KSA9PSBMVENfTVBfRVEpICYmCisgICAgICAgIChtcF9jbXAoUC0+eSwgUS0+eSkgPT0gTFRDX01QX0VRIHx8IG1wX2NtcChQLT55LCB0MSkgPT0gTFRDX01QX0VRKSkgeworICAgICAgICBtcF9jbGVhcl9tdWx0aSh0MSwgdDIsIHgsIHksIHosIE5VTEwpOworICAgICAgICByZXR1cm4gbHRjX2VjY19wcm9qZWN0aXZlX2RibF9wb2ludChQLCBSLCBtb2R1bHVzLCBtcCk7CisgICB9CisKKyAgIGlmICgoZXJyID0gbXBfY29weShQLT54LCB4KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9jb3B5KFAtPnksIHkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX2NvcHkoUC0+eiwgeikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKworICAgLyogaWYgWiBpcyBvbmUgdGhlbiB0aGVzZSBhcmUgbm8tb3BlcmF0aW9ucyAqLworICAgaWYgKFEtPnogIT0gTlVMTCkgeworICAgICAgLyogVDEgPSBaJyAqIFonICovCisgICAgICBpZiAoKGVyciA9IG1wX3NxcihRLT56LCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UodDEsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgLyogWCA9IFggKiBUMSAqLworICAgICAgaWYgKChlcnIgPSBtcF9tdWwodDEsIHgsIHgpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKHgsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgIC8qIFQxID0gWicgKiBUMSAqLworICAgICAgaWYgKChlcnIgPSBtcF9tdWwoUS0+eiwgdDEsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKHQxLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgIC8qIFkgPSBZICogVDEgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsKHQxLCB5LCB5KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh5LCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisKKyAgIC8qIFQxID0gWipaICovCisgICBpZiAoKGVyciA9IG1wX3Nxcih6LCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UodDEsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogVDIgPSBYJyAqIFQxICovCisgICBpZiAoKGVyciA9IG1wX211bChRLT54LCB0MSwgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UodDIsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogVDEgPSBaICogVDEgKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsKHosIHQxLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh0MSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAvKiBUMSA9IFknICogVDEgKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsKFEtPnksIHQxLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh0MSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIC8qIFkgPSBZIC0gVDEgKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViKHksIHQxLCB5KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcF9kKHksIDApID09IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9hZGQoeSwgbW9kdWx1cywgeSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgICAvKiBUMSA9IDJUMSAqLworICAgaWYgKChlcnIgPSBtcF9hZGQodDEsIHQxLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAobXBfY21wKHQxLCBtb2R1bHVzKSAhPSBMVENfTVBfTFQpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfc3ViKHQxLCBtb2R1bHVzLCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorICAgLyogVDEgPSBZICsgVDEgKi8KKyAgIGlmICgoZXJyID0gbXBfYWRkKHQxLCB5LCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcCh0MSwgbW9kdWx1cykgIT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3N1Yih0MSwgbW9kdWx1cywgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKyAgIC8qIFggPSBYIC0gVDIgKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViKHgsIHQyLCB4KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcF9kKHgsIDApID09IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9hZGQoeCwgbW9kdWx1cywgeCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgICAvKiBUMiA9IDJUMiAqLworICAgaWYgKChlcnIgPSBtcF9hZGQodDIsIHQyLCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAobXBfY21wKHQyLCBtb2R1bHVzKSAhPSBMVENfTVBfTFQpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfc3ViKHQyLCBtb2R1bHVzLCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorICAgLyogVDIgPSBYICsgVDIgKi8KKyAgIGlmICgoZXJyID0gbXBfYWRkKHQyLCB4LCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcCh0MiwgbW9kdWx1cykgIT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3N1Yih0MiwgbW9kdWx1cywgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKworICAgLyogaWYgWicgIT0gMSAqLworICAgaWYgKFEtPnogIT0gTlVMTCkgeworICAgICAgLyogWiA9IFogKiBaJyAqLworICAgICAgaWYgKChlcnIgPSBtcF9tdWwoeiwgUS0+eiwgeikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKHosIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKworICAgLyogWiA9IFogKiBYICovCisgICBpZiAoKGVyciA9IG1wX211bCh6LCB4LCB6KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoeiwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorCisgICAvKiBUMSA9IFQxICogWCAgKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsKHQxLCB4LCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh0MSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAvKiBYID0gWCAqIFggKi8KKyAgIGlmICgoZXJyID0gbXBfc3FyKHgsIHgpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh4LCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAvKiBUMiA9IFQyICogeCAqLworICAgaWYgKChlcnIgPSBtcF9tdWwodDIsIHgsIHQyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKHQyLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIC8qIFQxID0gVDEgKiBYICAqLworICAgaWYgKChlcnIgPSBtcF9tdWwodDEsIHgsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKHQxLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAKKyAgIC8qIFggPSBZKlkgKi8KKyAgIGlmICgoZXJyID0gbXBfc3FyKHksIHgpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh4LCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAvKiBYID0gWCAtIFQyICovCisgICBpZiAoKGVyciA9IG1wX3N1Yih4LCB0MiwgeCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXBfZCh4LCAwKSA9PSBMVENfTVBfTFQpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfYWRkKHgsIG1vZHVsdXMsIHgpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorCisgICAvKiBUMiA9IFQyIC0gWCAqLworICAgaWYgKChlcnIgPSBtcF9zdWIodDIsIHgsIHQyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAobXBfY21wX2QodDIsIDApID09IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9hZGQodDIsIG1vZHVsdXMsIHQyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9IAorICAgLyogVDIgPSBUMiAtIFggKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViKHQyLCB4LCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcF9kKHQyLCAwKSA9PSBMVENfTVBfTFQpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfYWRkKHQyLCBtb2R1bHVzLCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorICAgLyogVDIgPSBUMiAqIFkgKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsKHQyLCB5LCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh0MiwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAvKiBZID0gVDIgLSBUMSAqLworICAgaWYgKChlcnIgPSBtcF9zdWIodDIsIHQxLCB5KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAobXBfY21wX2QoeSwgMCkgPT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX2FkZCh5LCBtb2R1bHVzLCB5KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKyAgIC8qIFkgPSBZLzIgKi8KKyAgIGlmIChtcF9pc29kZCh5KSkgeworICAgICAgaWYgKChlcnIgPSBtcF9hZGQoeSwgbW9kdWx1cywgeSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgICBpZiAoKGVyciA9IG1wX2Rpdl8yKHksIHkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKworICAgaWYgKChlcnIgPSBtcF9jb3B5KHgsIFItPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX2NvcHkoeSwgUi0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfY29weSh6LCBSLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorCisgICBlcnIgPSBDUllQVF9PSzsKK2RvbmU6CisgICBtcF9jbGVhcl9tdWx0aSh0MSwgdDIsIHgsIHksIHosIE5VTEwpOworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9lY2MvbHRjX2VjY19wcm9qZWN0aXZlX2FkZF9wb2ludC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjEzICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDA1OjA3OjU5ICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX3Byb2plY3RpdmVfZGJsX3BvaW50LmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGIzZTFkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2VjYy9sdGNfZWNjX3Byb2plY3RpdmVfZGJsX3BvaW50LmMKQEAgLTAsMCArMSwxNDcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEltcGxlbWVudHMgRUNDIG92ZXIgWi9wWiBmb3IgY3VydmUgeV4yID0geF4zIC0gM3ggKyBiCisgKgorICogQWxsIGN1cnZlcyB0YWtlbiBmcm9tIE5JU1QgcmVjb21tZW5kYXRpb24gcGFwZXIgb2YgSnVseSAxOTk5CisgKiBBdmFpbGFibGUgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvY3J5cHR2YWwvZHNzLmh0bQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGx0Y19lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQuYworICBFQ0MgQ3J5cHRvLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmIGRlZmluZWQoTUVDQykgJiYgKCFkZWZpbmVkKE1FQ0NfQUNDRUwpIHx8IGRlZmluZWQoTFRNX0RFU0MpKQorCisvKioKKyAgIERvdWJsZSBhbiBFQ0MgcG9pbnQKKyAgIEBwYXJhbSBQICAgVGhlIHBvaW50IHRvIGRvdWJsZQorICAgQHBhcmFtIFIgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGRvdWJsZQorICAgQHBhcmFtIG1vZHVsdXMgIFRoZSBtb2R1bHVzIG9mIHRoZSBmaWVsZCB0aGUgRUNDIGN1cnZlIGlzIGluCisgICBAcGFyYW0gbXAgICAgICAgVGhlICJiIiB2YWx1ZSBmcm9tIG1vbnRnb21lcnlfc2V0dXAoKQorICAgQHJldHVybiBDUllQVF9PSyBvbiBzdWNjZXNzCisqLworaW50IGx0Y19lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQoZWNjX3BvaW50ICpQLCBlY2NfcG9pbnQgKlIsIHZvaWQgKm1vZHVsdXMsIHZvaWQgKm1wKQoreworICAgdm9pZCAqdDEsICp0MjsKKyAgIGludCAgIGVycjsKKworICAgTFRDX0FSR0NISyhQICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhSICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhtb2R1bHVzICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhtcCAgICAgICE9IE5VTEwpOworCisgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnQxLCAmdDIsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKFAgIT0gUikgeworICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KFAtPngsIFItPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoUC0+eSwgUi0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgICAgIGlmICgoZXJyID0gbXBfY29weShQLT56LCBSLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorCisgICAvKiB0MSA9IFogKiBaICovCisgICBpZiAoKGVyciA9IG1wX3NxcihSLT56LCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UodDEsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogWiA9IFkgKiBaICovCisgICBpZiAoKGVyciA9IG1wX211bChSLT56LCBSLT55LCBSLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoUi0+eiwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogWiA9IDJaICovCisgICBpZiAoKGVyciA9IG1wX2FkZChSLT56LCBSLT56LCBSLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXAoUi0+eiwgbW9kdWx1cykgIT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3N1YihSLT56LCBtb2R1bHVzLCBSLT56KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKyAgIAorICAgLyogVDIgPSBYIC0gVDEgKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViKFItPngsIHQxLCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcF9kKHQyLCAwKSA9PSBMVENfTVBfTFQpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfYWRkKHQyLCBtb2R1bHVzLCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorICAgLyogVDEgPSBYICsgVDEgKi8KKyAgIGlmICgoZXJyID0gbXBfYWRkKHQxLCBSLT54LCB0MSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcCh0MSwgbW9kdWx1cykgIT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3N1Yih0MSwgbW9kdWx1cywgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKyAgIC8qIFQyID0gVDEgKiBUMiAqLworICAgaWYgKChlcnIgPSBtcF9tdWwodDEsIHQyLCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKHQyLCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIC8qIFQxID0gMlQyICovCisgICBpZiAoKGVyciA9IG1wX2FkZCh0MiwgdDIsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXAodDEsIG1vZHVsdXMpICE9IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9zdWIodDEsIG1vZHVsdXMsIHQxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgICAvKiBUMSA9IFQxICsgVDIgKi8KKyAgIGlmICgoZXJyID0gbXBfYWRkKHQxLCB0MiwgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcCh0MSwgbW9kdWx1cykgIT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3N1Yih0MSwgbW9kdWx1cywgdDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKworICAgLyogWSA9IDJZICovCisgICBpZiAoKGVyciA9IG1wX2FkZChSLT55LCBSLT55LCBSLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmIChtcF9jbXAoUi0+eSwgbW9kdWx1cykgIT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3N1YihSLT55LCBtb2R1bHVzLCBSLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKyAgIC8qIFkgPSBZICogWSAqLworICAgaWYgKChlcnIgPSBtcF9zcXIoUi0+eSwgUi0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKFItPnksIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIC8qIFQyID0gWSAqIFkgKi8KKyAgIGlmICgoZXJyID0gbXBfc3FyKFItPnksIHQyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSh0MiwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAvKiBUMiA9IFQyLzIgKi8KKyAgIGlmIChtcF9pc29kZCh0MikpIHsKKyAgICAgIGlmICgoZXJyID0gbXBfYWRkKHQyLCBtb2R1bHVzLCB0MikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfQorICAgaWYgKChlcnIgPSBtcF9kaXZfMih0MiwgdDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICAvKiBZID0gWSAqIFggKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsKFItPnksIFItPngsIFItPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3JlZHVjZShSLT55LCBtb2R1bHVzLCBtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIC8qIFggID0gVDEgKiBUMSAqLworICAgaWYgKChlcnIgPSBtcF9zcXIodDEsIFItPngpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfcmVkdWNlKFItPngsIG1vZHVsdXMsIG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIC8qIFggPSBYIC0gWSAqLworICAgaWYgKChlcnIgPSBtcF9zdWIoUi0+eCwgUi0+eSwgUi0+eCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAobXBfY21wX2QoUi0+eCwgMCkgPT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX2FkZChSLT54LCBtb2R1bHVzLCBSLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKyAgIC8qIFggPSBYIC0gWSAqLworICAgaWYgKChlcnIgPSBtcF9zdWIoUi0+eCwgUi0+eSwgUi0+eCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAobXBfY21wX2QoUi0+eCwgMCkgPT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX2FkZChSLT54LCBtb2R1bHVzLCBSLT54KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKworICAgLyogWSA9IFkgLSBYICovICAgICAKKyAgIGlmICgoZXJyID0gbXBfc3ViKFItPnksIFItPngsIFItPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKG1wX2NtcF9kKFItPnksIDApID09IExUQ19NUF9MVCkgeworICAgICAgaWYgKChlcnIgPSBtcF9hZGQoUi0+eSwgbW9kdWx1cywgUi0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICB9CisgICAvKiBZID0gWSAqIFQxICovCisgICBpZiAoKGVyciA9IG1wX211bChSLT55LCB0MSwgUi0+eSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIGlmICgoZXJyID0gbXBfbW9udGdvbWVyeV9yZWR1Y2UoUi0+eSwgbW9kdWx1cywgbXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgLyogWSA9IFkgLSBUMiAqLworICAgaWYgKChlcnIgPSBtcF9zdWIoUi0+eSwgdDIsIFItPnkpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisgICBpZiAobXBfY21wX2QoUi0+eSwgMCkgPT0gTFRDX01QX0xUKSB7CisgICAgICBpZiAoKGVyciA9IG1wX2FkZChSLT55LCBtb2R1bHVzLCBSLT55KSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGRvbmU7IH0KKyAgIH0KKyAKKyAgIGVyciA9IENSWVBUX09LOworZG9uZToKKyAgIG1wX2NsZWFyX211bHRpKHQxLCB0MiwgTlVMTCk7CisgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvZWNjL2x0Y19lY2NfcHJvamVjdGl2ZV9kYmxfcG9pbnQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDA1OjA3OjU5ICQgKi8KKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2RlY3J5cHRfa2V5LmMgYi9saWJ0b21jcnlwdC9zcmMvcGsva2F0amEva2F0amFfZGVjcnlwdF9rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTEwZDZjCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2RlY3J5cHRfa2V5LmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGthdGphX2RlY3J5cHRfa2V5LmMKKyAgS2F0amEgUEtDUyAjMSBPQUVQIERlY3J5cHRpb24sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUtBVAorCisvKioKKyAgIChQS0NTICMxIHYyLjApIGRlY3J5cHQgdGhlbiBPQUVQIGRlcGFkICAKKyAgIEBwYXJhbSBpbiAgICAgICAgICBUaGUgY2lwaGVydGV4dAorICAgQHBhcmFtIGlubGVuICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGNpcGhlcnRleHQgKG9jdGV0cykKKyAgIEBwYXJhbSBvdXQgICAgICAgICBbb3V0XSBUaGUgcGxhaW50ZXh0CisgICBAcGFyYW0gb3V0bGVuICAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgcGxhaW50ZXh0IChvY3RldHMpCisgICBAcGFyYW0gbHBhcmFtICAgICAgVGhlIHN5c3RlbSAibHBhcmFtIiB2YWx1ZQorICAgQHBhcmFtIGxwYXJhbWxlbiAgIFRoZSBsZW5ndGggb2YgdGhlIGxwYXJhbSB2YWx1ZSAob2N0ZXRzKQorICAgQHBhcmFtIGhhc2hfaWR4ICAgIFRoZSBpbmRleCBvZiB0aGUgaGFzaCBkZXNpcmVkCisgICBAcGFyYW0gc3RhdCAgICAgICAgW291dF0gUmVzdWx0IG9mIHRoZSBkZWNyeXB0aW9uLCAxPT12YWxpZCwgMD09aW52YWxpZAorICAgQHBhcmFtIGtleSAgICAgICAgIFRoZSBjb3JyZXNwb25kaW5nIHByaXZhdGUgS2F0amEga2V5CisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2NjZXNzdWwgKGV2ZW4gaWYgaW52YWxpZCkKKyovCitpbnQga2F0amFfZGVjcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCAKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCAgIHVuc2lnbmVkIGxvbmcgIGxwYXJhbWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgaGFzaF9pZHgsIGludCAgICAgICAgICAgKnN0YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGthdGphX2tleSAgICAgICAqa2V5KQoreworICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLCBtb2R1bHVzX2J5dGVsZW4sIHg7CisgIGludCAgICAgICAgICAgZXJyOworICB1bnNpZ25lZCBjaGFyICp0bXA7CisgIAorICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICBMVENfQVJHQ0hLKHN0YXQgICAhPSBOVUxMKTsKKworICAvKiBkZWZhdWx0IHRvIGludmFsaWQgKi8KKyAgKnN0YXQgPSAwOworCisgIC8qIHZhbGlkIGhhc2ggPyAqLworICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQoaGFzaF9pZHgpKSAhPSBDUllQVF9PSykgeworICAgICByZXR1cm4gZXJyOworICB9CisgIAorICAvKiBnZXQgbW9kdWx1cyBsZW4gaW4gYml0cyAqLworICBtb2R1bHVzX2JpdGxlbiA9IG1wX2NvdW50X2JpdHMoIChrZXktPk4pKTsKKworICAvKiBwYXlsb2FkIGlzIHVwdG8gcHEsIHNvIHdlIGtub3cgcSBpcyAxLzNyZCB0aGUgc2l6ZSBvZiBOIGFuZCB0aGVyZWZvcmUgcHEgaXMgMi8zdGggdGhlIHNpemUgKi8KKyBtb2R1bHVzX2JpdGxlbiA9ICgobW9kdWx1c19iaXRsZW4gPDwgMSkgLyAzKTsKKworICAvKiByb3VuZCBkb3duIHRvIG5leHQgYnl0ZSAqLworICBtb2R1bHVzX2JpdGxlbiAtPSAobW9kdWx1c19iaXRsZW4gJiA3KSArIDg7CisKKyAgLyogb3V0bGVuIG11c3QgYmUgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIG1vZHVsdXMgKi8KKyAgbW9kdWx1c19ieXRlbGVuID0gbXBfdW5zaWduZWRfYmluX3NpemUoIChrZXktPk4pKTsKKyAgaWYgKG1vZHVsdXNfYnl0ZWxlbiAhPSBpbmxlbikgeworICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgIH0KKworICAvKiBhbGxvY2F0ZSByYW0gKi8KKyAgdG1wID0gWE1BTExPQyhpbmxlbik7CisgIGlmICh0bXAgPT0gTlVMTCkgeworICAgICByZXR1cm4gQ1JZUFRfTUVNOworICB9CisKKyAgLyogcnNhIGRlY29kZSB0aGUgcGFja2V0ICovCisgIHggPSBpbmxlbjsKKyAgaWYgKChlcnIgPSBrYXRqYV9leHB0bW9kKGluLCBpbmxlbiwgdG1wLCAmeCwgUEtfUFJJVkFURSwga2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgWEZSRUUodG1wKTsKKyAgICAgcmV0dXJuIGVycjsKKyAgfQorCisgIC8qIHNoaWZ0IHJpZ2h0IGJ5IG1vZHVsdXNfYnl0ZWxlbiAtIG1vZHVsdXNfYml0bGVuLzggIGJ5dGVzICovCisgIGZvciAoeCA9IDA7IHggPCAobW9kdWx1c19iaXRsZW4gPj4gMyk7IHgrKykgeworICAgICB0bXBbeF0gPSB0bXBbeCsobW9kdWx1c19ieXRlbGVuLShtb2R1bHVzX2JpdGxlbj4+MykpXTsKKyAgfQorCisgIC8qIG5vdyBPQUVQIGRlY29kZSB0aGUgcGFja2V0ICovCisgIGVyciA9IHBrY3NfMV9vYWVwX2RlY29kZSh0bXAsIHgsIGxwYXJhbSwgbHBhcmFtbGVuLCBtb2R1bHVzX2JpdGxlbiwgaGFzaF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIG91dGxlbiwgc3RhdCk7CisKKyAgWEZSRUUodG1wKTsKKyAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmIC8qIE1SU0EgKi8KKworCisKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsva2F0amEva2F0amFfZGVjcnlwdF9rZXkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9rYXRqYS9rYXRqYV9lbmNyeXB0X2tleS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2VuY3J5cHRfa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U5MzM1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9rYXRqYS9rYXRqYV9lbmNyeXB0X2tleS5jCkBAIC0wLDAgKzEsODcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGthdGphX2VuY3J5cHRfa2V5LmMKKyAgS2F0amEgUEtDUy1zdHlsZSBPQUVQIGVuY3J5cHRpb24sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUtBVAorCisvKioKKyAgICAoUEtDUyAjMSB2Mi4wKSBPQUVQIHBhZCB0aGVuIGVuY3J5cHQKKyAgICBAcGFyYW0gaW4gICAgICAgICAgVGhlIHBsYWludGV4dAorICAgIEBwYXJhbSBpbmxlbiAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBwbGFpbnRleHQgKG9jdGV0cykKKyAgICBAcGFyYW0gb3V0ICAgICAgICAgW291dF0gVGhlIGNpcGhlcnRleHQKKyAgICBAcGFyYW0gb3V0bGVuICAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgY2lwaGVydGV4dAorICAgIEBwYXJhbSBscGFyYW0gICAgICBUaGUgc3lzdGVtICJscGFyYW0iIGZvciB0aGUgZW5jcnlwdGlvbgorICAgIEBwYXJhbSBscGFyYW1sZW4gICBUaGUgbGVuZ3RoIG9mIGxwYXJhbSAob2N0ZXRzKQorICAgIEBwYXJhbSBwcm5nICAgICAgICBBbiBhY3RpdmUgUFJORworICAgIEBwYXJhbSBwcm5nX2lkeCAgICBUaGUgaW5kZXggb2YgdGhlIGRlc2lyZWQgcHJuZworICAgIEBwYXJhbSBoYXNoX2lkeCAgICBUaGUgaW5kZXggb2YgdGhlIGRlc2lyZWQgaGFzaAorICAgIEBwYXJhbSBrZXkgICAgICAgICBUaGUgS2F0amEga2V5IHRvIGVuY3J5cHQgdG8KKyAgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAgIAoraW50IGthdGphX2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxwYXJhbSwgdW5zaWduZWQgbG9uZyBscGFyYW1sZW4sCisgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIGludCBwcm5nX2lkeCwgaW50IGhhc2hfaWR4LCBrYXRqYV9rZXkgKmtleSkKK3sKKyAgdW5zaWduZWQgbG9uZyBtb2R1bHVzX2JpdGxlbiwgbW9kdWx1c19ieXRlbGVuLCB4OworICBpbnQgICAgICAgICAgIGVycjsKKyAgCisgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAKKyAgLyogdmFsaWQgcHJuZyBhbmQgaGFzaCA/ICovCisgIGlmICgoZXJyID0gcHJuZ19pc192YWxpZChwcm5nX2lkeCkpICE9IENSWVBUX09LKSB7CisgICAgIHJldHVybiBlcnI7CisgIH0KKyAgaWYgKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2hfaWR4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgcmV0dXJuIGVycjsKKyAgfQorICAKKyAgLyogZ2V0IG1vZHVsdXMgbGVuIGluIGJpdHMgKi8KKyAgbW9kdWx1c19iaXRsZW4gPSBtcF9jb3VudF9iaXRzKChrZXktPk4pKTsKKworICAvKiBwYXlsb2FkIGlzIHVwdG8gcHEsIHNvIHdlIGtub3cgcSBpcyAxLzNyZCB0aGUgc2l6ZSBvZiBOIGFuZCB0aGVyZWZvcmUgcHEgaXMgMi8zdGggdGhlIHNpemUgKi8KKyAgbW9kdWx1c19iaXRsZW4gPSAoKG1vZHVsdXNfYml0bGVuIDw8IDEpIC8gMyk7CisKKyAgLyogcm91bmQgZG93biB0byBuZXh0IGJ5dGUgKi8KKyAgbW9kdWx1c19iaXRsZW4gLT0gKG1vZHVsdXNfYml0bGVuICYgNykgKyA4OworCisgIC8qIG91dGxlbiBtdXN0IGJlIGF0IGxlYXN0IHRoZSBzaXplIG9mIHRoZSBtb2R1bHVzICovCisgIG1vZHVsdXNfYnl0ZWxlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKChrZXktPk4pKTsKKyAgaWYgKG1vZHVsdXNfYnl0ZWxlbiA+ICpvdXRsZW4pIHsKKyAgICAgKm91dGxlbiA9IG1vZHVsdXNfYnl0ZWxlbjsKKyAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgfQorCisgIC8qIE9BRVAgcGFkIHRoZSBrZXkgKi8KKyAgeCA9ICpvdXRsZW47CisgIGlmICgoZXJyID0gcGtjc18xX29hZXBfZW5jb2RlKGluLCBpbmxlbiwgbHBhcmFtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHBhcmFtbGVuLCBtb2R1bHVzX2JpdGxlbiwgcHJuZywgcHJuZ19pZHgsIGhhc2hfaWR4LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgIHJldHVybiBlcnI7CisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgIAorCisgIC8qIEthdGphIGV4cHRtb2QgdGhlIE9BRVAgcGFkICovCisgIHJldHVybiBrYXRqYV9leHB0bW9kKG91dCwgeCwgb3V0LCBvdXRsZW4sIFBLX1BVQkxJQywga2V5KTsKK30KKworI2VuZGlmIC8qIE1SU0EgKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2VuY3J5cHRfa2V5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wNi8xNiAyMTo1Mzo0MSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsva2F0amEva2F0amFfZXhwb3J0LmMgYi9saWJ0b21jcnlwdC9zcmMvcGsva2F0amEva2F0amFfZXhwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU1NTY1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9rYXRqYS9rYXRqYV9leHBvcnQuYwpAQCAtMCwwICsxLDc1IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSBrYXRqYV9leHBvcnQuYworICBFeHBvcnQgS2F0amEgUEtDUy1zdHlsZSBrZXlzLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1LQVQKKworLyoqCisgICAgVGhpcyB3aWxsIGV4cG9ydCBlaXRoZXIgYW4gS2F0amFQdWJsaWNLZXkgb3IgS2F0amFQcml2YXRlS2V5CisgICAgQHBhcmFtIG91dCAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiB0aGUgcGFja2V0CisgICAgQHBhcmFtIG91dGxlbiAgICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBwYWNrZXQKKyAgICBAcGFyYW0gdHlwZSAgICAgIFRoZSB0eXBlIG9mIGV4cG9ydGVkIGtleSAoUEtfUFJJVkFURSBvciBQS19QVUJMSUMpCisgICAgQHBhcmFtIGtleSAgICAgICBUaGUgS2F0amEga2V5IHRvIGV4cG9ydAorICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gICAgCitpbnQga2F0amFfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBpbnQgdHlwZSwga2F0amFfa2V5ICprZXkpCit7CisgICBpbnQgICAgICAgICAgIGVycjsKKyAgIHVuc2lnbmVkIGxvbmcgemVybz0wOworCisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhrZXkgICAgIT0gTlVMTCk7CisKKyAgIC8qIHR5cGUgdmFsaWQ/ICovCisgICBpZiAoIShrZXktPnR5cGUgPT0gUEtfUFJJVkFURSkgJiYgKHR5cGUgPT0gUEtfUFJJVkFURSkpIHsKKyAgICAgIHJldHVybiBDUllQVF9QS19JTlZBTElEX1RZUEU7CisgICB9CisKKyAgIGlmICh0eXBlID09IFBLX1BSSVZBVEUpIHsKKyAgICAgIC8qIHByaXZhdGUga2V5ICovCisgICAgICAvKiBvdXRwdXQgaXMgCisgICAgICAgICAgICBWZXJzaW9uLCBuLCBkLCBwLCBxLCBkIG1vZCAocC0xKSwgZCBtb2QgKHEgLSAxKSwgMS9xIG1vZCBwLCBwcQorICAgICAgICovCisgICAgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2VfbXVsdGkob3V0LCBvdXRsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9TSE9SVF9JTlRFR0VSLCAxVUwsICZ6ZXJvLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAga2V5LT5OLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAga2V5LT5kLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAga2V5LT5wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAga2V5LT5xLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAga2V5LT5kUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAga2V5LT5kUSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgIGtleS0+cVAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICBrZXktPnBxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgMFVMLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgCisgICAgICAvKiBjbGVhciB6ZXJvIGFuZCByZXR1cm4gKi8KKyAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgIH0gZWxzZSB7CisgICAgICAvKiBwdWJsaWMga2V5ICovCisgICAgICByZXR1cm4gZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aShvdXQsIG91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+TiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAwVUwsIE5VTEwpOworICAgfQorfQorCisjZW5kaWYgLyogTVJTQSAqLworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsva2F0amEva2F0amFfZXhwb3J0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsva2F0amEva2F0amFfZXhwdG1vZC5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2V4cHRtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2M0N2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2V4cHRtb2QuYwpAQCAtMCwwICsxLDExNSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUga2F0amFfZXhwdG1vZC5jCisgIEthdGphIFBLQ1Mtc3R5bGUgZXhwdG1vZCwgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNS0FUCisKKy8qKiAKKyAgIENvbXB1dGUgYW4gUlNBIG1vZHVsYXIgZXhwb25lbnRpYXRpb24gCisgICBAcGFyYW0gaW4gICAgICAgICBUaGUgaW5wdXQgZGF0YSB0byBzZW5kIGludG8gUlNBCisgICBAcGFyYW0gaW5sZW4gICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBpbnB1dCAob2N0ZXRzKQorICAgQHBhcmFtIG91dCAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIAorICAgQHBhcmFtIG91dGxlbiAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgb3V0cHV0CisgICBAcGFyYW0gd2hpY2ggICAgICBXaGljaCBleHBvbmVudCB0byB1c2UsIGUuZy4gUEtfUFJJVkFURSBvciBQS19QVUJMSUMKKyAgIEBwYXJhbSBrZXkgICAgICAgIFRoZSBSU0Ega2V5IHRvIHVzZSAKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gICAKK2ludCBrYXRqYV9leHB0bW9kKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCAgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB3aGljaCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGthdGphX2tleSAqa2V5KQoreworICAgdm9pZCAgICAgICAgICp0bXAsICp0bXBhLCAqdG1wYjsKKyAgIHVuc2lnbmVkIGxvbmcgeDsKKyAgIGludCAgICAgICAgICAgZXJyOworCisgICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKyAgCisgICAvKiBpcyB0aGUga2V5IG9mIHRoZSByaWdodCB0eXBlIGZvciB0aGUgb3BlcmF0aW9uPyAqLworICAgaWYgKHdoaWNoID09IFBLX1BSSVZBVEUgJiYgKGtleS0+dHlwZSAhPSBQS19QUklWQVRFKSkgeworICAgICAgcmV0dXJuIENSWVBUX1BLX05PVF9QUklWQVRFOworICAgfQorCisgICAvKiBtdXN0IGJlIGEgcHJpdmF0ZSBvciBwdWJsaWMgb3BlcmF0aW9uICovCisgICBpZiAod2hpY2ggIT0gUEtfUFJJVkFURSAmJiB3aGljaCAhPSBQS19QVUJMSUMpIHsKKyAgICAgIHJldHVybiBDUllQVF9QS19JTlZBTElEX1RZUEU7CisgICB9CisKKyAgIC8qIGluaXQgYW5kIGNvcHkgaW50byB0bXAgKi8KKyAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmdG1wLCAmdG1wYSwgJnRtcGIsIE5VTEwpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHJldHVybiBlcnI7IH0KKyAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4odG1wLCAodW5zaWduZWQgY2hhciAqKWluLCAoaW50KWlubGVuKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgLyogc2FuaXR5IGNoZWNrIG9uIHRoZSBpbnB1dCAqLworICAgaWYgKG1wX2NtcChrZXktPk4sIHRtcCkgPT0gTFRDX01QX0xUKSB7CisgICAgICBlcnIgPSBDUllQVF9QS19JTlZBTElEX1NJWkU7CisgICAgICBnb3RvIGRvbmU7CisgICB9CisKKyAgIC8qIGFyZSB3ZSB1c2luZyB0aGUgcHJpdmF0ZSBleHBvbmVudCBhbmQgaXMgdGhlIGtleSBvcHRpbWl6ZWQ/ICovCisgICBpZiAod2hpY2ggPT0gUEtfUFJJVkFURSkgeworICAgICAgLyogdG1wYSA9IHRtcF5kUCBtb2QgcCAqLworICAgICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKHRtcCwga2V5LT5kUCwga2V5LT5wLCB0bXBhKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAgICAvKiB0bXBiID0gdG1wXmRRIG1vZCBxICovCisgICAgICBpZiAoKGVyciA9IG1wX2V4cHRtb2QodG1wLCBrZXktPmRRLCBrZXktPnEsIHRtcGIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgICAgIC8qIHRtcCA9ICh0bXBhIC0gdG1wYikgKiBxSW52IChtb2QgcCkgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfc3ViKHRtcGEsIHRtcGIsIHRtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsbW9kKHRtcCwga2V5LT5xUCwga2V5LT5wLCB0bXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgICAgLyogdG1wID0gdG1wYiArIHEgKiB0bXAgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsKHRtcCwga2V5LT5xLCB0bXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgICAgIGlmICgoZXJyID0gbXBfYWRkKHRtcCwgdG1wYiwgdG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIH0gZWxzZSB7CisgICAgICAvKiBleHB0bW9kIGl0ICovCisgICAgICBpZiAoKGVyciA9IG1wX2V4cHRtb2QodG1wLCBrZXktPk4sIGtleS0+TiwgdG1wKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICB9CisKKyAgIC8qIHJlYWQgaXQgYmFjayAqLworICAgeCA9ICh1bnNpZ25lZCBsb25nKW1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS0+Tik7CisgICBpZiAoeCA+ICpvdXRsZW4pIHsKKyAgICAgICpvdXRsZW4gPSB4OworICAgICAgZXJyID0gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgICAgZ290byBkb25lOworICAgfQorCisgICAvKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4gLi4uICovCisgICBpZiAobXBfdW5zaWduZWRfYmluX3NpemUodG1wKSA+IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS0+TikpIHsKKyAgICAgIGVyciA9IENSWVBUX0VSUk9SOworICAgICAgZ290byBkb25lOworICAgfQorICAgKm91dGxlbiA9IHg7CisKKyAgIC8qIGNvbnZlcnQgaXQgKi8KKyAgIHplcm9tZW0ob3V0LCB4KTsKKyAgIGlmICgoZXJyID0gbXBfdG9fdW5zaWduZWRfYmluKHRtcCwgb3V0Kyh4LW1wX3Vuc2lnbmVkX2Jpbl9zaXplKHRtcCkpKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qIGNsZWFuIHVwIGFuZCByZXR1cm4gKi8KKyAgIGVyciA9IENSWVBUX09LOworICAgZ290byBkb25lOworZXJyb3I6Citkb25lOgorICAgbXBfY2xlYXJfbXVsdGkodG1wLCB0bXBhLCB0bXBiLCBOVUxMKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsva2F0amEva2F0amFfZXhwdG1vZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjE6NTM6NDEgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2ZyZWUuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9rYXRqYS9rYXRqYV9mcmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlZDNmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9rYXRqYS9rYXRqYV9mcmVlLmMKQEAgLTAsMCArMSwzNSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUga2F0amFfZnJlZS5jCisgIEZyZWUgYW4gS2F0amEga2V5LCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1LQVQKKworLyoqCisgIEZyZWUgYW4gS2F0amEga2V5IGZyb20gbWVtb3J5CisgIEBwYXJhbSBrZXkgICBUaGUgUlNBIGtleSB0byBmcmVlCisqLwordm9pZCBrYXRqYV9mcmVlKGthdGphX2tleSAqa2V5KQoreworICAgTFRDX0FSR0NISyhrZXkgIT0gTlVMTCk7CisgICBtcF9jbGVhcl9tdWx0aSgga2V5LT5kLCAga2V5LT5OLCAga2V5LT5kUSwgIGtleS0+ZFAsCisgICAgICAgICAgICAgICAgICAga2V5LT5xUCwgIGtleS0+cCwgIGtleS0+cSwga2V5LT5wcSwgTlVMTCk7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsva2F0amEva2F0amFfZnJlZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2ltcG9ydC5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2ltcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZGJlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsva2F0amEva2F0amFfaW1wb3J0LmMKQEAgLTAsMCArMSw4MSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUga2F0amFfaW1wb3J0LmMKKyAgSW1wb3J0IGEgUEtDUy1zdHlsZSBLYXRqYSBrZXksIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUtBVAorCisvKioKKyAgSW1wb3J0IGFuIEthdGphUHVibGljS2V5IG9yIEthdGphUHJpdmF0ZUtleSBbdHdvLXByaW1lIG9ubHksIG9ubHkgc3VwcG9ydCA+PSAxMDI0LWJpdCBrZXlzLCBkZWZpbmVkIGluIFBLQ1MgIzEgdjIuMV0KKyAgQHBhcmFtIGluICAgICAgVGhlIHBhY2tldCB0byBpbXBvcnQgZnJvbQorICBAcGFyYW0gaW5sZW4gICBJdCdzIGxlbmd0aCAob2N0ZXRzKQorICBAcGFyYW0ga2V5ICAgICBbb3V0XSBEZXN0aW5hdGlvbiBmb3IgbmV3bHkgaW1wb3J0ZWQga2V5CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgdXBvbiBlcnJvciBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkCisqLworaW50IGthdGphX2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwga2F0amFfa2V5ICprZXkpCit7CisgICBpbnQgICAgICAgICAgIGVycjsKKyAgIHZvaWQgICAgICAgICAqemVybzsKKworICAgTFRDX0FSR0NISyhpbiAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsobHRjX21wLm5hbWUgIT0gTlVMTCk7CisKKyAgIC8qIGluaXQga2V5ICovCisgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnplcm8sICZrZXktPmQsICZrZXktPk4sICZrZXktPmRRLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5LT5kUCwgJmtleS0+cVAsICZrZXktPnAsICZrZXktPnEsICZrZXktPnBxLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShpbiwgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5OLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICBpZiAobXBfY21wX2Qoa2V5LT5OLCAwKSA9PSBMVENfTVBfRVEpIHsKKyAgICAgIC8qIGl0J3MgYSBwcml2YXRlIGtleSAqLworICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpKGluLCBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgemVybywgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5OLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPmQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+cCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5xLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPmRQLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+ZFEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+cVAsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+cHEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgICAga2V5LT50eXBlID0gUEtfUFJJVkFURTsKKyAgIH0gZWxzZSB7CisgICAgICAvKiBwdWJsaWMgd2UgaGF2ZSBOICovCisgICAgICBrZXktPnR5cGUgPSBQS19QVUJMSUM7CisgICB9CisgICBtcF9jbGVhcih6ZXJvKTsKKyAgIHJldHVybiBDUllQVF9PSzsKK0xCTF9FUlI6CisgICBtcF9jbGVhcl9tdWx0aSh6ZXJvLCAgICBrZXktPmQsIGtleS0+Tiwga2V5LT5kUSwga2V5LT5kUCwKKyAgICAgICAgICAgICAgICAgIGtleS0+cVAsIGtleS0+cCwga2V5LT5xLCBrZXktPnBxLCBOVUxMKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZiAvKiBNUlNBICovCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX2ltcG9ydC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX21ha2Vfa2V5LmMgYi9saWJ0b21jcnlwdC9zcmMvcGsva2F0amEva2F0amFfbWFrZV9rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODAxNmM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL2thdGphL2thdGphX21ha2Vfa2V5LmMKQEAgLTAsMCArMSwxMDEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIGthdGphX21ha2Vfa2V5LmMKKyAgS2F0amEga2V5IGdlbmVyYXRpb24sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTUtBVAorCisvKiogCisgICBDcmVhdGUgYSBLYXRqYSBrZXkKKyAgIEBwYXJhbSBwcm5nICAgICBBbiBhY3RpdmUgUFJORyBzdGF0ZQorICAgQHBhcmFtIHdwcm5nICAgIFRoZSBpbmRleCBvZiB0aGUgUFJORyBkZXNpcmVkCisgICBAcGFyYW0gc2l6ZSAgICAgVGhlIHNpemUgb2YgdGhlIG1vZHVsdXMgKGtleSBzaXplKSBkZXNpcmVkIChvY3RldHMpCisgICBAcGFyYW0ga2V5ICAgICAgW291dF0gRGVzdGluYXRpb24gb2YgYSBuZXdseSBjcmVhdGVkIHByaXZhdGUga2V5IHBhaXIKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCwgdXBvbiBlcnJvciBhbGwgYWxsb2NhdGVkIHJhbSBpcyBmcmVlZAorKi8KK2ludCBrYXRqYV9tYWtlX2tleShwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGludCBzaXplLCBrYXRqYV9rZXkgKmtleSkKK3sKKyAgIHZvaWQgKnAsICpxLCAqdG1wMSwgKnRtcDI7CisgICBpbnQgICAgZXJyOworICAKKyAgIExUQ19BUkdDSEsoa2V5ICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhsdGNfbXAubmFtZSAhPSBOVUxMKTsKKworICAgaWYgKChzaXplIDwgKE1JTl9LQVRfU0laRS84KSkgfHwgKHNpemUgPiAoTUFYX0tBVF9TSVpFLzgpKSkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfS0VZU0laRTsKKyAgIH0KKworICAgaWYgKChlcnIgPSBwcm5nX2lzX3ZhbGlkKHdwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmcCwgJnEsICZ0bXAxLCAmdG1wMiwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBkaXZpZGUgc2l6ZSBieSB0aHJlZSAgKi8KKyAgIHNpemUgICA9ICgoKHNpemUgPDwgMykgLyAzKSArIDcpID4+IDM7CisKKyAgIC8qIG1ha2UgcHJpbWUgInEiICh3ZSBuZWdhdGUgc2l6ZSB0byBtYWtlIHEgPT0gMyBtb2QgNCkgKi8KKyAgIGlmICgoZXJyID0gcmFuZF9wcmltZShxLCAtc2l6ZSwgcHJuZywgd3BybmcpKSAhPSBDUllQVF9PSykgICAgICB7IGdvdG8gZG9uZTsgfQorICAgaWYgKChlcnIgPSBtcF9zdWJfZChxLCAxLCB0bXAxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgIHsgZ290byBkb25lOyB9CisKKyAgIC8qIG1ha2UgcHJpbWUgInAiICovCisgICBkbyB7CisgICAgICBpZiAoKGVyciA9IHJhbmRfcHJpbWUocCwgc2l6ZSsxLCBwcm5nLCB3cHJuZykpICE9IENSWVBUX09LKSAgeyBnb3RvIGRvbmU7IH0KKyAgICAgIGlmICgoZXJyID0gbXBfZ2NkKHAsIHRtcDEsIHRtcDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICB7IGdvdG8gZG9uZTsgfQorICAgfSB3aGlsZSAobXBfY21wX2QodG1wMiwgMSkgIT0gTFRDX01QX0VRKTsKKworICAgLyogbWFrZSBrZXkgKi8KKyAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgma2V5LT5kLCAma2V5LT5OLCAma2V5LT5kUSwgJmtleS0+ZFAsCisgICAgICAgICAgICAgICAgICAgICAma2V5LT5xUCwgJmtleS0+cCwgJmtleS0+cSwgJmtleS0+cHEsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBlcnJvcjsKKyAgIH0KKworICAgLyogbj1wXjJxIGFuZCAxL24gbW9kIHBxICovCisgICBpZiAoKGVyciA9IG1wX2NvcHkoIHAsICBrZXktPnApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjI7IH0KKyAgIGlmICgoZXJyID0gbXBfY29weSggcSwgIGtleS0+cSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfQorICAgaWYgKChlcnIgPSBtcF9tdWwoa2V5LT5wLCBrZXktPnEsIGtleS0+cHEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICB7IGdvdG8gZXJyb3IyOyB9IC8qIHRtcDEgPSBwcSAgKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsKGtleS0+cHEsIGtleS0+cCwga2V5LT5OKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfSAvKiBOID0gcF4ycSAgICovICAKKyAgIGlmICgoZXJyID0gbXBfc3ViX2QoIHAsIDEsICB0bXAxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfSAvKiB0bXAxID0gcS0xICovCisgICBpZiAoKGVyciA9IG1wX3N1Yl9kKCBxLCAxLCAgdG1wMikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjI7IH0gLyogdG1wMiA9IHAtMSAqLworICAgaWYgKChlcnIgPSBtcF9sY20odG1wMSwgdG1wMiwga2V5LT5kKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3IyOyB9IC8qIHRtcDEgPSBsY2QocC0xLHEtMSkgKi8KKyAgIGlmICgoZXJyID0gbXBfaW52bW9kKCBrZXktPk4sICBrZXktPmQsICBrZXktPmQpKSAhPSBDUllQVF9PSykgICAgICAgeyBnb3RvIGVycm9yMjsgfSAvKiBrZXktPmQgPSAxL04gbW9kIHBxICovCisKKyAgIC8qIG9wdGltaXplIGZvciBDUlQgbm93ICovCisgICAvKiBmaW5kIGQgbW9kIHEtMSBhbmQgZCBtb2QgcC0xICovCisgICBpZiAoKGVyciA9IG1wX21vZCgga2V5LT5kLCAgdG1wMSwgIGtleS0+ZFApKSAhPSBDUllQVF9PSykgICAgICAgICAgIHsgZ290byBlcnJvcjI7IH0gLyogZFAgPSBkIG1vZCBwLTEgKi8KKyAgIGlmICgoZXJyID0gbXBfbW9kKCBrZXktPmQsICB0bXAyLCAga2V5LT5kUSkpICE9IENSWVBUX09LKSAgICAgICAgICAgeyBnb3RvIGVycm9yMjsgfSAvKiBkUSA9IGQgbW9kIHEtMSAqLworICAgaWYgKChlcnIgPSBtcF9pbnZtb2QoIHEsICBwLCAga2V5LT5xUCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3IyOyB9IC8qIHFQID0gMS9xIG1vZCBwICovCisKKyAgIC8qIHNldCBrZXkgdHlwZSAoaW4gdGhpcyBjYXNlIGl0J3MgQ1JUIG9wdGltaXplZCkgKi8KKyAgIGtleS0+dHlwZSA9IFBLX1BSSVZBVEU7CisKKyAgIC8qIHJldHVybiBvayBhbmQgZnJlZSB0ZW1wcyAqLworICAgZXJyICAgICAgID0gQ1JZUFRfT0s7CisgICBnb3RvIGRvbmU7CitlcnJvcjI6CisgICBtcF9jbGVhcl9tdWx0aSgga2V5LT5kLCAga2V5LT5OLCAga2V5LT5kUSwgIGtleS0+ZFAsICBrZXktPnFQLCAga2V5LT5wLCAga2V5LT5xLCBrZXktPnBxLCBOVUxMKTsKK2Vycm9yOgorZG9uZToKKyAgIG1wX2NsZWFyX211bHRpKCB0bXAyLCAgdG1wMSwgIHAsICBxLCBOVUxMKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsva2F0amEva2F0amFfbWFrZV9rZXkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX2kyb3NwLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX2kyb3NwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzOWJkNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9wa2NzMS9wa2NzXzFfaTJvc3AuYwpAQCAtMCwwICsxLDUxIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKiAKKyAgQGZpbGUgcGtjc18xX2kyb3NwLmMKKyAgSW50ZWdlciB0byBPY3RldCBJMk9TUCwgVG9tIFN0IERlbmlzIAorKi8KKworI2lmZGVmIFBLQ1NfMQorCisvKiBhbHdheXMgc3RvcmVzIHRoZSBzYW1lICMgb2YgYnl0ZXMsIHBhZHMgd2l0aCBsZWFkaW5nIHplcm8gYnl0ZXMKKyAgIGFzIHJlcXVpcmVkCisgKi8KKworLyoqCisgICBQS0NTICMxIEludGVnZXIgdG8gYmluYXJ5CisgICBAcGFyYW0gbiAgICAgICAgICAgICBUaGUgaW50ZWdlciB0byBzdG9yZQorICAgQHBhcmFtIG1vZHVsdXNfbGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgUlNBIG1vZHVsdXMKKyAgIEBwYXJhbSBvdXQgICAgICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIGludGVnZXIKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBwa2NzXzFfaTJvc3Aodm9pZCAqbiwgdW5zaWduZWQgbG9uZyBtb2R1bHVzX2xlbiwgdW5zaWduZWQgY2hhciAqb3V0KQoreworICAgdW5zaWduZWQgbG9uZyBzaXplOworCisgICBzaXplID0gbXBfdW5zaWduZWRfYmluX3NpemUobik7CisKKyAgIGlmIChzaXplID4gbW9kdWx1c19sZW4pIHsKKyAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisKKyAgIC8qIHN0b3JlIGl0ICovCisgICB6ZXJvbWVtKG91dCwgbW9kdWx1c19sZW4pOworICAgcmV0dXJuIG1wX3RvX3Vuc2lnbmVkX2JpbihuLCBvdXQrKG1vZHVsdXNfbGVuLXNpemUpKTsKK30KKworI2VuZGlmIC8qIFBLQ1NfMSAqLworCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9wa2NzMS9wa2NzXzFfaTJvc3AuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9wa2NzMS9wa2NzXzFfbWdmMS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV9tZ2YxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZjODBiZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9wa2NzMS9wa2NzXzFfbWdmMS5jCkBAIC0wLDAgKzEsMTA4IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKiAKKyAgQGZpbGUgcGtjc18xX21nZjEuYworICBUaGUgTWFzayBHZW5lcmF0aW9uIEZ1bmN0aW9uIChNR0YxKSBmb3IgUEtDUyAjMSwgVG9tIFN0IERlbmlzIAorKi8KKworI2lmZGVmIFBLQ1NfMQorCisvKioKKyAgIFBlcmZvcm0gUEtDUyAjMSBNR0YxIChpbnRlcm5hbCkKKyAgIEBwYXJhbSBzZWVkICAgICAgICBUaGUgc2VlZCBmb3IgTUdGMQorICAgQHBhcmFtIHNlZWRsZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIHNlZWQKKyAgIEBwYXJhbSBoYXNoX2lkeCAgICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggZGVzaXJlZAorICAgQHBhcmFtIG1hc2sgICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbgorICAgQHBhcmFtIG1hc2tsZW4gICAgIFRoZSBsZW5ndGggb2YgdGhlIG1hc2sgZGVzaXJlZAorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHBrY3NfMV9tZ2YxKGludCAgICAgICAgICAgICAgICAgIGhhc2hfaWR4LAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlZWQsIHVuc2lnbmVkIGxvbmcgc2VlZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICptYXNrLCB1bnNpZ25lZCBsb25nIG1hc2tsZW4pCit7CisgICB1bnNpZ25lZCBsb25nIGhMZW4sIHg7CisgICB1bG9uZzMyICAgICAgIGNvdW50ZXI7CisgICBpbnQgICAgICAgICAgIGVycjsKKyAgIGhhc2hfc3RhdGUgICAgKm1kOworICAgdW5zaWduZWQgY2hhciAqYnVmOworIAorICAgTFRDX0FSR0NISyhzZWVkICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhtYXNrICE9IE5VTEwpOworCisgICAvKiBlbnN1cmUgdmFsaWQgaGFzaCAqLworICAgaWYgKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2hfaWR4KSkgIT0gQ1JZUFRfT0spIHsgCisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBnZXQgaGFzaCBvdXRwdXQgc2l6ZSAqLworICAgaExlbiA9IGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0uaGFzaHNpemU7CisKKyAgIC8qIGFsbG9jYXRlIG1lbW9yeSAqLworICAgbWQgID0gWE1BTExPQyhzaXplb2YoaGFzaF9zdGF0ZSkpOworICAgYnVmID0gWE1BTExPQyhoTGVuKTsKKyAgIGlmIChtZCA9PSBOVUxMIHx8IGJ1ZiA9PSBOVUxMKSB7CisgICAgICBpZiAobWQgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUobWQpOworICAgICAgfQorICAgICAgaWYgKGJ1ZiAhPSBOVUxMKSB7CisgICAgICAgICBYRlJFRShidWYpOworICAgICAgfQorICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogc3RhcnQgY291bnRlciAqLworICAgY291bnRlciA9IDA7CisKKyAgIHdoaWxlIChtYXNrbGVuID4gMCkgeworICAgICAgIC8qIGhhbmRsZSBjb3VudGVyICovCisgICAgICAgU1RPUkUzMkgoY291bnRlciwgYnVmKTsKKyAgICAgICArK2NvdW50ZXI7CisKKyAgICAgICAvKiBnZXQgaGFzaCBvZiBzZWVkIHx8IGNvdW50ZXIgKi8KKyAgICAgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0uaW5pdChtZCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgIH0KKyAgICAgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0ucHJvY2VzcyhtZCwgc2VlZCwgc2VlZGxlbikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgIH0KKyAgICAgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0ucHJvY2VzcyhtZCwgYnVmLCA0KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICAgfQorICAgICAgIGlmICgoZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5kb25lKG1kLCBidWYpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICB9CisKKyAgICAgICAvKiBzdG9yZSBpdCAqLworICAgICAgIGZvciAoeCA9IDA7IHggPCBoTGVuICYmIG1hc2tsZW4gPiAwOyB4KyssIG1hc2tsZW4tLSkgeworICAgICAgICAgICptYXNrKysgPSBidWZbeF07CisgICAgICAgfQorICAgfQorCisgICBlcnIgPSBDUllQVF9PSzsKK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKGJ1ZiwgaExlbik7CisgICB6ZXJvbWVtKG1kLCAgc2l6ZW9mKGhhc2hfc3RhdGUpKTsKKyNlbmRpZgorCisgICBYRlJFRShidWYpOworICAgWEZSRUUobWQpOworCisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYgLyogUEtDU18xICovCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9wa2NzMS9wa2NzXzFfbWdmMS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2RlY29kZS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2RlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MGEwMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZGVjb2RlLmMKQEAgLTAsMCArMSwxODkgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqIAorICBAZmlsZSBwa2NzXzFfb2FlcF9kZWNvZGUuYworICBPQUVQIFBhZGRpbmcgZm9yIFBLQ1MgIzEsIFRvbSBTdCBEZW5pcyAKKyovCisKKyNpZmRlZiBQS0NTXzEKKworLyoqCisgICBQS0NTICMxIHYyLjAwIE9BRVAgZGVjb2RlCisgICBAcGFyYW0gbXNnICAgICAgICAgICAgICBUaGUgZW5jb2RlZCBkYXRhIHRvIGRlY29kZQorICAgQHBhcmFtIG1zZ2xlbiAgICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgZW5jb2RlZCBkYXRhIChvY3RldHMpCisgICBAcGFyYW0gbHBhcmFtICAgICAgICAgICBUaGUgc2Vzc2lvbiBvciBzeXN0ZW0gZGF0YSAoY2FuIGJlIE5VTEwpCisgICBAcGFyYW0gbHBhcmFtbGVuICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBscGFyYW0KKyAgIEBwYXJhbSBtb2R1bHVzX2JpdGxlbiAgIFRoZSBiaXQgbGVuZ3RoIG9mIHRoZSBSU0EgbW9kdWx1cworICAgQHBhcmFtIGhhc2hfaWR4ICAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBoYXNoIGRlc2lyZWQKKyAgIEBwYXJhbSBvdXQgICAgICAgICAgICAgIFtvdXRdIERlc3RpbmF0aW9uIG9mIGRlY29kaW5nCisgICBAcGFyYW0gb3V0bGVuICAgICAgICAgICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBkZWNvZGluZworICAgQHBhcmFtIHJlcyAgICAgICAgICAgICAgW291dF0gUmVzdWx0IG9mIGRlY29kaW5nLCAxPT12YWxpZCwgMD09aW52YWxpZAorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsIChldmVuIGlmIGludmFsaWQpCisqLworaW50IHBrY3NfMV9vYWVwX2RlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICptc2csICAgIHVuc2lnbmVkIGxvbmcgbXNnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sIHVuc2lnbmVkIGxvbmcgbHBhcmFtbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLCBpbnQgaGFzaF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICpyZXMpCit7CisgICB1bnNpZ25lZCBjaGFyICpEQiwgKnNlZWQsICptYXNrOworICAgdW5zaWduZWQgbG9uZyBoTGVuLCB4LCB5LCBtb2R1bHVzX2xlbjsKKyAgIGludCAgICAgICAgICAgZXJyOworCisgICBMVENfQVJHQ0hLKG1zZyAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHJlcyAgICAhPSBOVUxMKTsKKworICAgLyogZGVmYXVsdCB0byBpbnZhbGlkIHBhY2tldCAqLworICAgKnJlcyA9IDA7CisgICAKKyAgIC8qIHRlc3QgdmFsaWQgaGFzaCAqLworICAgaWYgKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2hfaWR4KSkgIT0gQ1JZUFRfT0spIHsgCisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaExlbiAgICAgICAgPSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF9pZHhdLmhhc2hzaXplOworICAgbW9kdWx1c19sZW4gPSAobW9kdWx1c19iaXRsZW4gPj4gMykgKyAobW9kdWx1c19iaXRsZW4gJiA3ID8gMSA6IDApOworCisgICAvKiB0ZXN0IGhhc2gvbWVzc2FnZSBzaXplICovCisgICBpZiAoKDIqaExlbiA+PSAobW9kdWx1c19sZW4gLSAyKSkgfHwgKG1zZ2xlbiAhPSBtb2R1bHVzX2xlbikpIHsKKyAgICAgIHJldHVybiBDUllQVF9QS19JTlZBTElEX1NJWkU7CisgICB9CisKKyAgIC8qIGFsbG9jYXRlIHJhbSBmb3IgREIvbWFzay9zYWx0IG9mIHNpemUgbW9kdWx1c19sZW4gKi8KKyAgIERCICAgPSBYTUFMTE9DKG1vZHVsdXNfbGVuKTsKKyAgIG1hc2sgPSBYTUFMTE9DKG1vZHVsdXNfbGVuKTsKKyAgIHNlZWQgPSBYTUFMTE9DKGhMZW4pOworICAgaWYgKERCID09IE5VTEwgfHwgbWFzayA9PSBOVUxMIHx8IHNlZWQgPT0gTlVMTCkgeworICAgICAgaWYgKERCICE9IE5VTEwpIHsKKyAgICAgICAgIFhGUkVFKERCKTsKKyAgICAgIH0KKyAgICAgIGlmIChtYXNrICE9IE5VTEwpIHsKKyAgICAgICAgIFhGUkVFKG1hc2spOworICAgICAgfQorICAgICAgaWYgKHNlZWQgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUoc2VlZCk7CisgICAgICB9CisgICAgICByZXR1cm4gQ1JZUFRfTUVNOworICAgfQorCisgICAvKiBvayBzbyBpdCdzIG5vdyBpbiB0aGUgZm9ybQorICAKKyAgICAgIDB4MDAgIHx8IG1hc2tlZHNlZWQgfHwgbWFza2VkREIgCisgIAorICAgICAgIDEgICAgfHwgICBoTGVuICAgICB8fCAgbW9kdWx1c19sZW4gLSBoTGVuIC0gMQorICAgCisgICAgKi8KKworICAgLyogbXVzdCBoYXZlIGxlYWRpbmcgMHgwMCBieXRlICovCisgICBpZiAobXNnWzBdICE9IDB4MDApIHsKKyAgICAgIGVyciA9IENSWVBUX09LOworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiBub3cgcmVhZCB0aGUgbWFza2VkIHNlZWQgKi8KKyAgIHggPSAxOworICAgWE1FTUNQWShzZWVkLCBtc2cgKyB4LCBoTGVuKTsKKyAgIHggKz0gaExlbjsKKworICAgLyogbm93IHJlYWQgdGhlIG1hc2tlZCBEQiAqLworICAgWE1FTUNQWShEQiwgbXNnICsgeCwgbW9kdWx1c19sZW4gLSBoTGVuIC0gMSk7CisgICB4ICs9IG1vZHVsdXNfbGVuIC0gaExlbiAtIDE7CisKKyAgIC8qIGNvbXB1dGUgTUdGMSBvZiBtYXNrZWREQiAoaExlbikgKi8gCisgICBpZiAoKGVyciA9IHBrY3NfMV9tZ2YxKGhhc2hfaWR4LCBEQiwgbW9kdWx1c19sZW4gLSBoTGVuIC0gMSwgbWFzaywgaExlbikpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIFhPUiBhZ2FpbnN0IHNlZWQgKi8KKyAgIGZvciAoeSA9IDA7IHkgPCBoTGVuOyB5KyspIHsKKyAgICAgIHNlZWRbeV0gXj0gbWFza1t5XTsKKyAgIH0KKworICAgLyogY29tcHV0ZSBNR0YxIG9mIHNlZWQgKGsgLSBobGVuIC0gMSkgKi8KKyAgIGlmICgoZXJyID0gcGtjc18xX21nZjEoaGFzaF9pZHgsIHNlZWQsIGhMZW4sIG1hc2ssIG1vZHVsdXNfbGVuIC0gaExlbiAtIDEpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiB4b3IgYWdhaW5zdCBEQiAqLworICAgZm9yICh5ID0gMDsgeSA8IChtb2R1bHVzX2xlbiAtIGhMZW4gLSAxKTsgeSsrKSB7CisgICAgICAgREJbeV0gXj0gbWFza1t5XTsgCisgICB9CisKKyAgIC8qIG5vdyBEQiA9PSBsaGFzaCB8fCBQUyB8fCAweDAxIHx8IE0sIFBTID09IGsgLSBtbGVuIC0gMmhsZW4gLSAyIHplcm9lcyAqLworCisgICAvKiBjb21wdXRlIGxoYXNoIGFuZCBzdG9yZSBpdCBpbiBzZWVkIFtyZXVzZSB0ZW1wcyFdICovCisgICB4ID0gbW9kdWx1c19sZW47CisgICBpZiAobHBhcmFtICE9IE5VTEwpIHsKKyAgICAgIGlmICgoZXJyID0gaGFzaF9tZW1vcnkoaGFzaF9pZHgsIGxwYXJhbSwgbHBhcmFtbGVuLCBzZWVkLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgLyogY2FuJ3QgcGFzcyBoYXNoX21lbW9yeSBhIE5VTEwgc28gdXNlIERCIHdpdGggemVybyBsZW5ndGggKi8KKyAgICAgIGlmICgoZXJyID0gaGFzaF9tZW1vcnkoaGFzaF9pZHgsIERCLCAwLCBzZWVkLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICB9CisKKyAgIC8qIGNvbXBhcmUgdGhlIGxoYXNoJ2VzICovCisgICBpZiAoWE1FTUNNUChzZWVkLCBEQiwgaExlbikgIT0gMCkgeworICAgICAgZXJyID0gQ1JZUFRfT0s7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIG5vdyB6ZXJvZXMgYmVmb3JlIGEgMHgwMSAqLworICAgZm9yICh4ID0gaExlbjsgeCA8IChtb2R1bHVzX2xlbiAtIGhMZW4gLSAxKSAmJiBEQlt4XSA9PSAweDAwOyB4KyspIHsKKyAgICAgIC8qIHN0ZXAuLi4gKi8KKyAgIH0KKworICAgLyogZXJyb3Igb3V0IGlmIHdhc24ndCAweDAxICovCisgICBpZiAoeCA9PSAobW9kdWx1c19sZW4gLSBoTGVuIC0gMSkgfHwgREJbeF0gIT0gMHgwMSkgeworICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIHJlc3QgaXMgdGhlIG1lc3NhZ2UgKGFuZCBza2lwIDB4MDEpICovCisgICBpZiAoKG1vZHVsdXNfbGVuIC0gaExlbiAtIDEgLSArK3gpID4gKm91dGxlbikgeworICAgICAgKm91dGxlbiA9IG1vZHVsdXNfbGVuIC0gaExlbiAtIDEgLSB4OworICAgICAgZXJyID0gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiBjb3B5IG1lc3NhZ2UgKi8KKyAgICpvdXRsZW4gPSBtb2R1bHVzX2xlbiAtIGhMZW4gLSAxIC0geDsKKyAgIFhNRU1DUFkob3V0LCBEQiArIHgsIG1vZHVsdXNfbGVuIC0gaExlbiAtIDEgLSB4KTsKKyAgIHggKz0gbW9kdWx1c19sZW4gLSBoTGVuIC0gMTsKKworICAgLyogdmFsaWQgcGFja2V0ICovCisgICAqcmVzID0gMTsKKworICAgZXJyID0gQ1JZUFRfT0s7CitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShEQiwgICBtb2R1bHVzX2xlbik7CisgICB6ZXJvbWVtKHNlZWQsIGhMZW4pOworICAgemVyb21lbShtYXNrLCBtb2R1bHVzX2xlbik7CisjZW5kaWYKKworICAgWEZSRUUoc2VlZCk7CisgICBYRlJFRShtYXNrKTsKKyAgIFhGUkVFKERCKTsKKworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmIC8qIFBLQ1NfMSAqLworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZGVjb2RlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTEgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6Mjg6MTcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2VuY29kZS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV9vYWVwX2VuY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTFhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX29hZXBfZW5jb2RlLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIHBrY3NfMV9vYWVwX2VuY29kZS5jCisgIE9BRVAgUGFkZGluZyBmb3IgUEtDUyAjMSwgVG9tIFN0IERlbmlzIAorKi8KKworI2lmZGVmIFBLQ1NfMQorCisvKioKKyAgUEtDUyAjMSB2Mi4wMCBPQUVQIGVuY29kZQorICBAcGFyYW0gbXNnICAgICAgICAgICAgIFRoZSBkYXRhIHRvIGVuY29kZQorICBAcGFyYW0gbXNnbGVuICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gZW5jb2RlIChvY3RldHMpCisgIEBwYXJhbSBscGFyYW0gICAgICAgICAgQSBzZXNzaW9uIG9yIHN5c3RlbSBwYXJhbWV0ZXIgKGNhbiBiZSBOVUxMKQorICBAcGFyYW0gbHBhcmFtbGVuICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGxwYXJhbSBkYXRhCisgIEBwYXJhbSBtb2R1bHVzX2JpdGxlbiAgVGhlIGJpdCBsZW5ndGggb2YgdGhlIFJTQSBtb2R1bHVzCisgIEBwYXJhbSBwcm5nICAgICAgICAgICAgQW4gYWN0aXZlIFBSTkcgc3RhdGUKKyAgQHBhcmFtIHBybmdfaWR4ICAgICAgICBUaGUgaW5kZXggb2YgdGhlIFBSTkcgZGVzaXJlZAorICBAcGFyYW0gaGFzaF9pZHggICAgICAgIFRoZSBpbmRleCBvZiB0aGUgaGFzaCBkZXNpcmVkCisgIEBwYXJhbSBvdXQgICAgICAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgZW5jb2RlZCBkYXRhCisgIEBwYXJhbSBvdXRsZW4gICAgICAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgZW5jb2RlZCBkYXRhCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBwa2NzXzFfb2FlcF9lbmNvZGUoY29uc3QgdW5zaWduZWQgY2hhciAqbXNnLCAgICB1bnNpZ25lZCBsb25nIG1zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbHBhcmFtLCB1bnNpZ25lZCBsb25nIGxwYXJhbWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtb2R1bHVzX2JpdGxlbiwgcHJuZ19zdGF0ZSAqcHJuZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICBwcm5nX2lkeCwgICAgICAgICBpbnQgIGhhc2hfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGNoYXIgKkRCLCAqc2VlZCwgKm1hc2s7CisgICB1bnNpZ25lZCBsb25nIGhMZW4sIHgsIHksIG1vZHVsdXNfbGVuOworICAgaW50ICAgICAgICAgICBlcnI7CisKKyAgIExUQ19BUkdDSEsobXNnICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKworICAgLyogdGVzdCB2YWxpZCBoYXNoICovCisgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQoaGFzaF9pZHgpKSAhPSBDUllQVF9PSykgeyAKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIHZhbGlkIHBybmcgKi8KKyAgIGlmICgoZXJyID0gcHJuZ19pc192YWxpZChwcm5nX2lkeCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBoTGVuICAgICAgICA9IGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0uaGFzaHNpemU7CisgICBtb2R1bHVzX2xlbiA9IChtb2R1bHVzX2JpdGxlbiA+PiAzKSArIChtb2R1bHVzX2JpdGxlbiAmIDcgPyAxIDogMCk7CisKKyAgIC8qIHRlc3QgbWVzc2FnZSBzaXplICovCisgICBpZiAoKDIqaExlbiA+PSAobW9kdWx1c19sZW4gLSAyKSkgfHwgKG1zZ2xlbiA+IChtb2R1bHVzX2xlbiAtIDIqaExlbiAtIDIpKSkgeworICAgICAgcmV0dXJuIENSWVBUX1BLX0lOVkFMSURfU0laRTsKKyAgIH0KKworICAgLyogYWxsb2NhdGUgcmFtIGZvciBEQi9tYXNrL3NhbHQgb2Ygc2l6ZSBtb2R1bHVzX2xlbiAqLworICAgREIgICA9IFhNQUxMT0MobW9kdWx1c19sZW4pOworICAgbWFzayA9IFhNQUxMT0MobW9kdWx1c19sZW4pOworICAgc2VlZCA9IFhNQUxMT0MoaExlbik7CisgICBpZiAoREIgPT0gTlVMTCB8fCBtYXNrID09IE5VTEwgfHwgc2VlZCA9PSBOVUxMKSB7CisgICAgICBpZiAoREIgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUoREIpOworICAgICAgfQorICAgICAgaWYgKG1hc2sgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUobWFzayk7CisgICAgICB9CisgICAgICBpZiAoc2VlZCAhPSBOVUxMKSB7CisgICAgICAgICBYRlJFRShzZWVkKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKyAgIC8qIGdldCBsaGFzaCAqLworICAgLyogREIgPT0gbGhhc2ggfHwgUFMgfHwgMHgwMSB8fCBNLCBQUyA9PSBrIC0gbWxlbiAtIDJobGVuIC0gMiB6ZXJvZXMgKi8KKyAgIHggPSBtb2R1bHVzX2xlbjsKKyAgIGlmIChscGFyYW0gIT0gTlVMTCkgeworICAgICAgaWYgKChlcnIgPSBoYXNoX21lbW9yeShoYXNoX2lkeCwgbHBhcmFtLCBscGFyYW1sZW4sIERCLCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICB9IGVsc2UgeworICAgICAgLyogY2FuJ3QgcGFzcyBoYXNoX21lbW9yeSBhIE5VTEwgc28gdXNlIERCIHdpdGggemVybyBsZW5ndGggKi8KKyAgICAgIGlmICgoZXJyID0gaGFzaF9tZW1vcnkoaGFzaF9pZHgsIERCLCAwLCBEQiwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgfQorCisgICAvKiBhcHBlbmQgUFMgdGhlbiAweDAxICh0byBsaGFzaCkgICovCisgICB4ID0gaExlbjsKKyAgIHkgPSBtb2R1bHVzX2xlbiAtIG1zZ2xlbiAtIDIqaExlbiAtIDI7CisgICBYTUVNU0VUKERCK3gsIDAsIHkpOworICAgeCArPSB5OworCisgICAvKiAweDAxIGJ5dGUgKi8KKyAgIERCW3grK10gPSAweDAxOworCisgICAvKiBtZXNzYWdlIChsZW5ndGggPSBtc2dsZW4pICovCisgICBYTUVNQ1BZKERCK3gsIG1zZywgbXNnbGVuKTsKKyAgIHggKz0gbXNnbGVuOworCisgICAvKiBub3cgY2hvb3NlIGEgcmFuZG9tIHNlZWQgKi8KKyAgIGlmIChwcm5nX2Rlc2NyaXB0b3JbcHJuZ19pZHhdLnJlYWQoc2VlZCwgaExlbiwgcHJuZykgIT0gaExlbikgeworICAgICAgZXJyID0gQ1JZUFRfRVJST1JfUkVBRFBSTkc7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIGNvbXB1dGUgTUdGMSBvZiBzZWVkIChrIC0gaGxlbiAtIDEpICovCisgICBpZiAoKGVyciA9IHBrY3NfMV9tZ2YxKGhhc2hfaWR4LCBzZWVkLCBoTGVuLCBtYXNrLCBtb2R1bHVzX2xlbiAtIGhMZW4gLSAxKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogeG9yIGFnYWluc3QgREIgKi8KKyAgIGZvciAoeSA9IDA7IHkgPCAobW9kdWx1c19sZW4gLSBoTGVuIC0gMSk7IHkrKykgeworICAgICAgIERCW3ldIF49IG1hc2tbeV07IAorICAgfQorCisgICAvKiBjb21wdXRlIE1HRjEgb2YgbWFza2VkREIgKGhMZW4pICovIAorICAgaWYgKChlcnIgPSBwa2NzXzFfbWdmMShoYXNoX2lkeCwgREIsIG1vZHVsdXNfbGVuIC0gaExlbiAtIDEsIG1hc2ssIGhMZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiBYT1IgYWdhaW5zdCBzZWVkICovCisgICBmb3IgKHkgPSAwOyB5IDwgaExlbjsgeSsrKSB7CisgICAgICBzZWVkW3ldIF49IG1hc2tbeV07CisgICB9CisKKyAgIC8qIGNyZWF0ZSBzdHJpbmcgb2YgbGVuZ3RoIG1vZHVsdXNfbGVuICovCisgICBpZiAoKm91dGxlbiA8IG1vZHVsdXNfbGVuKSB7CisgICAgICAqb3V0bGVuID0gbW9kdWx1c19sZW47CisgICAgICBlcnIgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIHN0YXJ0IG91dHB1dCB3aGljaCBpcyAweDAwIHx8IG1hc2tlZFNlZWQgfHwgbWFza2VkREIgKi8KKyAgIHggPSAwOworICAgb3V0W3grK10gPSAweDAwOworICAgWE1FTUNQWShvdXQreCwgc2VlZCwgaExlbik7CisgICB4ICs9IGhMZW47CisgICBYTUVNQ1BZKG91dCt4LCBEQiwgbW9kdWx1c19sZW4gLSBoTGVuIC0gMSk7CisgICB4ICs9IG1vZHVsdXNfbGVuIC0gaExlbiAtIDE7CisKKyAgICpvdXRsZW4gPSB4OworICAgIAorICAgZXJyID0gQ1JZUFRfT0s7CitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShEQiwgICBtb2R1bHVzX2xlbik7CisgICB6ZXJvbWVtKHNlZWQsIGhMZW4pOworICAgemVyb21lbShtYXNrLCBtb2R1bHVzX2xlbik7CisjZW5kaWYKKworICAgWEZSRUUoc2VlZCk7CisgICBYRlJFRShtYXNrKTsKKyAgIFhGUkVFKERCKTsKKworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmIC8qIFBLQ1NfMSAqLworCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9wa2NzMS9wa2NzXzFfb2FlcF9lbmNvZGUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzA2LzE2IDIxOjUzOjQxICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9wa2NzMS9wa2NzXzFfb3MyaXAuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9wa2NzMS9wa2NzXzFfb3MyaXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjNhZThkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV9vczJpcC5jCkBAIC0wLDAgKzEsMzYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqIAorICBAZmlsZSBwa2NzXzFfb3MyaXAuYworICBPY3RldCB0byBJbnRlZ2VyIE9TMklQLCBUb20gU3QgRGVuaXMgCisqLworI2lmZGVmIFBLQ1NfMQorCisvKioKKyAgUmVhZCBhIGJpbmFyeSBzdHJpbmcgaW50byBhbiBtcF9pbnQKKyAgQHBhcmFtIG4gICAgICAgICAgW291dF0gVGhlIG1wX2ludCBkZXN0aW5hdGlvbgorICBAcGFyYW0gaW4gICAgICAgICBUaGUgYmluYXJ5IHN0cmluZyB0byByZWFkCisgIEBwYXJhbSBpbmxlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGJpbmFyeSBzdHJpbmcKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHBrY3NfMV9vczJpcCh2b2lkICpuLCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbikKK3sKKyAgIHJldHVybiBtcF9yZWFkX3Vuc2lnbmVkX2JpbihuLCBpbiwgaW5sZW4pOworfQorCisjZW5kaWYgLyogUEtDU18xICovCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV9vczJpcC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTU6MzUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZGVjb2RlLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX3Bzc19kZWNvZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzE2ZDUwCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZGVjb2RlLmMKQEAgLTAsMCArMSwxNzcgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqIAorICBAZmlsZSBwa2NzXzFfcHNzX2RlY29kZS5jCisgIFBLQ1MgIzEgUFNTIFNpZ25hdHVyZSBQYWRkaW5nLCBUb20gU3QgRGVuaXMgCisqLworCisjaWZkZWYgUEtDU18xCisKKy8qKgorICAgUEtDUyAjMSB2Mi4wMCBQU1MgZGVjb2RlCisgICBAcGFyYW0gIG1zZ2hhc2ggICAgICAgICBUaGUgaGFzaCB0byB2ZXJpZnkKKyAgIEBwYXJhbSAgbXNnaGFzaGxlbiAgICAgIFRoZSBsZW5ndGggb2YgdGhlIGhhc2ggKG9jdGV0cykKKyAgIEBwYXJhbSAgc2lnICAgICAgICAgICAgIFRoZSBzaWduYXR1cmUgZGF0YSAoZW5jb2RlZCBkYXRhKQorICAgQHBhcmFtICBzaWdsZW4gICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2lnbmF0dXJlIGRhdGEgKG9jdGV0cykKKyAgIEBwYXJhbSAgc2FsdGxlbiAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHNhbHQgdXNlZCAob2N0ZXRzKQorICAgQHBhcmFtICBoYXNoX2lkeCAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBoYXNoIGRlc2lyZWQKKyAgIEBwYXJhbSAgbW9kdWx1c19iaXRsZW4gIFRoZSBiaXQgbGVuZ3RoIG9mIHRoZSBSU0EgbW9kdWx1cworICAgQHBhcmFtICByZXMgICAgICAgICAgICAgW291dF0gVGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbiwgMT09dmFsaWQsIDA9PWludmFsaWQKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bCAoZXZlbiBpZiB0aGUgY29tcGFyaXNvbiBmYWlsZWQpCisqLworaW50IHBrY3NfMV9wc3NfZGVjb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZ2hhc2gsIHVuc2lnbmVkIGxvbmcgbXNnaGFzaGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWcsICAgICB1bnNpZ25lZCBsb25nIHNpZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNhbHRsZW4sICBpbnQgICAgICAgICAgIGhhc2hfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbW9kdWx1c19iaXRsZW4sIGludCAgICAqcmVzKQoreworICAgdW5zaWduZWQgY2hhciAqREIsICptYXNrLCAqc2FsdCwgKmhhc2g7CisgICB1bnNpZ25lZCBsb25nIHgsIHksIGhMZW4sIG1vZHVsdXNfbGVuOworICAgaW50ICAgICAgICAgICBlcnI7CisgICBoYXNoX3N0YXRlICAgIG1kOworCisgICBMVENfQVJHQ0hLKG1zZ2hhc2ggIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHJlcyAgICAgIT0gTlVMTCk7CisKKyAgIC8qIGRlZmF1bHQgdG8gaW52YWxpZCAqLworICAgKnJlcyA9IDA7CisKKyAgIC8qIGVuc3VyZSBoYXNoIGlzIHZhbGlkICovCisgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQoaGFzaF9pZHgpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaExlbiAgICAgICAgPSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF9pZHhdLmhhc2hzaXplOworICAgbW9kdWx1c19sZW4gPSAobW9kdWx1c19iaXRsZW4+PjMpICsgKG1vZHVsdXNfYml0bGVuICYgNyA/IDEgOiAwKTsKKworICAgLyogY2hlY2sgc2l6ZXMgKi8KKyAgIGlmICgoc2FsdGxlbiA+IG1vZHVsdXNfbGVuKSB8fCAKKyAgICAgICAobW9kdWx1c19sZW4gPCBoTGVuICsgc2FsdGxlbiArIDIpIHx8IChzaWdsZW4gIT0gbW9kdWx1c19sZW4pKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfSU5WQUxJRF9TSVpFOworICAgfQorCisgICAvKiBhbGxvY2F0ZSByYW0gZm9yIERCL21hc2svc2FsdC9oYXNoIG9mIHNpemUgbW9kdWx1c19sZW4gKi8KKyAgIERCICAgPSBYTUFMTE9DKG1vZHVsdXNfbGVuKTsKKyAgIG1hc2sgPSBYTUFMTE9DKG1vZHVsdXNfbGVuKTsKKyAgIHNhbHQgPSBYTUFMTE9DKG1vZHVsdXNfbGVuKTsKKyAgIGhhc2ggPSBYTUFMTE9DKG1vZHVsdXNfbGVuKTsKKyAgIGlmIChEQiA9PSBOVUxMIHx8IG1hc2sgPT0gTlVMTCB8fCBzYWx0ID09IE5VTEwgfHwgaGFzaCA9PSBOVUxMKSB7CisgICAgICBpZiAoREIgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUoREIpOworICAgICAgfQorICAgICAgaWYgKG1hc2sgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUobWFzayk7CisgICAgICB9CisgICAgICBpZiAoc2FsdCAhPSBOVUxMKSB7CisgICAgICAgICBYRlJFRShzYWx0KTsKKyAgICAgIH0KKyAgICAgIGlmIChoYXNoICE9IE5VTEwpIHsKKyAgICAgICAgIFhGUkVFKGhhc2gpOworICAgICAgfQorICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogZW5zdXJlIHRoZSAweEJDIGJ5dGUgKi8KKyAgIGlmIChzaWdbc2lnbGVuLTFdICE9IDB4QkMpIHsKKyAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiBjb3B5IG91dCB0aGUgREIgKi8KKyAgIHggPSAwOworICAgWE1FTUNQWShEQiwgc2lnICsgeCwgbW9kdWx1c19sZW4gLSBoTGVuIC0gMSk7CisgICB4ICs9IG1vZHVsdXNfbGVuIC0gaExlbiAtIDE7CisKKyAgIC8qIGNvcHkgb3V0IHRoZSBoYXNoICovCisgICBYTUVNQ1BZKGhhc2gsIHNpZyArIHgsIGhMZW4pOworICAgeCArPSBoTGVuOworCisgICAvKiBjaGVjayB0aGUgTVNCICovCisgICBpZiAoKHNpZ1swXSAmIH4oMHhGRiA+PiAoKG1vZHVsdXNfbGVuPDwzKSAtIChtb2R1bHVzX2JpdGxlbi0xKSkpKSAhPSAwKSB7CisgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogZ2VuZXJhdGUgbWFzayBvZiBsZW5ndGggbW9kdWx1c19sZW4gLSBoTGVuIC0gMSBmcm9tIGhhc2ggKi8KKyAgIGlmICgoZXJyID0gcGtjc18xX21nZjEoaGFzaF9pZHgsIGhhc2gsIGhMZW4sIG1hc2ssIG1vZHVsdXNfbGVuIC0gaExlbiAtIDEpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiB4b3IgYWdhaW5zdCBEQiAqLworICAgZm9yICh5ID0gMDsgeSA8IChtb2R1bHVzX2xlbiAtIGhMZW4gLSAxKTsgeSsrKSB7CisgICAgICBEQlt5XSBePSBtYXNrW3ldOworICAgfQorICAgCisgICAvKiBub3cgY2xlYXIgdGhlIGZpcnN0IGJ5dGUgW21ha2Ugc3VyZSBzbWFsbGVyIHRoYW4gbW9kdWx1c10gKi8KKyAgIERCWzBdICY9IDB4RkYgPj4gKChtb2R1bHVzX2xlbjw8MykgLSAobW9kdWx1c19iaXRsZW4tMSkpOworCisgICAvKiBEQiA9IFBTIHx8IDB4MDEgfHwgc2FsdCwgUFMgPT0gbW9kdWx1c19sZW4gLSBzYWx0bGVuIC0gaExlbiAtIDIgemVybyBieXRlcyAqLworCisgICAvKiBjaGVjayBmb3IgemVyb2VzIGFuZCAweDAxICovCisgICBmb3IgKHggPSAwOyB4IDwgbW9kdWx1c19sZW4gLSBzYWx0bGVuIC0gaExlbiAtIDI7IHgrKykgeworICAgICAgIGlmIChEQlt4XSAhPSAweDAwKSB7CisgICAgICAgICAgZXJyID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgIH0KKyAgIH0KKworICAgLyogY2hlY2sgZm9yIHRoZSAweDAxICovCisgICBpZiAoREJbeCsrXSAhPSAweDAxKSB7CisgICAgICBlcnIgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogTSA9IChlaWdodCkgMHgwMCB8fCBtc2doYXNoIHx8IHNhbHQsIG1hc2sgPSBIKE0pICovCisgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0uaW5pdCgmbWQpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorICAgemVyb21lbShtYXNrLCA4KTsKKyAgIGlmICgoZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5wcm9jZXNzKCZtZCwgbWFzaywgOCkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0ucHJvY2VzcygmbWQsIG1zZ2hhc2gsIG1zZ2hhc2hsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorICAgaWYgKChlcnIgPSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF9pZHhdLnByb2Nlc3MoJm1kLCBEQit4LCBzYWx0bGVuKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKyAgIGlmICgoZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5kb25lKCZtZCwgbWFzaykpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIG1hc2sgPT0gaGFzaCBtZWFucyB2YWxpZCBzaWduYXR1cmUgKi8KKyAgIGlmIChYTUVNQ01QKG1hc2ssIGhhc2gsIGhMZW4pID09IDApIHsKKyAgICAgICpyZXMgPSAxOworICAgfQorCisgICBlcnIgPSBDUllQVF9PSzsKK0xCTF9FUlI6CisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKERCLCAgIG1vZHVsdXNfbGVuKTsgICAKKyAgIHplcm9tZW0obWFzaywgbW9kdWx1c19sZW4pOyAgIAorICAgemVyb21lbShzYWx0LCBtb2R1bHVzX2xlbik7ICAgCisgICB6ZXJvbWVtKGhhc2gsIG1vZHVsdXNfbGVuKTsgICAKKyNlbmRpZgorCisgICBYRlJFRShoYXNoKTsKKyAgIFhGUkVFKHNhbHQpOworICAgWEZSRUUobWFzayk7CisgICBYRlJFRShEQik7CisKKyAgIHJldHVybiBlcnI7Cit9CisKKyNlbmRpZiAvKiBQS0NTXzEgKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV9wc3NfZGVjb2RlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8zMCAwMjozNzoyMSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX3Bzc19lbmNvZGUuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9wa2NzMS9wa2NzXzFfcHNzX2VuY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0YmQzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX3Bzc19lbmNvZGUuYwpAQCAtMCwwICsxLDE3NSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKiogCisgIEBmaWxlIHBrY3NfMV9wc3NfZW5jb2RlLmMKKyAgUEtDUyAjMSBQU1MgU2lnbmF0dXJlIFBhZGRpbmcsIFRvbSBTdCBEZW5pcyAKKyovCisKKyNpZmRlZiBQS0NTXzEKKworLyoqCisgICBQS0NTICMxIHYyLjAwIFNpZ25hdHVyZSBFbmNvZGluZworICAgQHBhcmFtIG1zZ2hhc2ggICAgICAgICAgVGhlIGhhc2ggdG8gZW5jb2RlCisgICBAcGFyYW0gbXNnaGFzaGxlbiAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIChvY3RldHMpCisgICBAcGFyYW0gc2FsdGxlbiAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzYWx0IGRlc2lyZWQgKG9jdGV0cykKKyAgIEBwYXJhbSBwcm5nICAgICAgICAgICAgIEFuIGFjdGl2ZSBQUk5HIGNvbnRleHQKKyAgIEBwYXJhbSBwcm5nX2lkeCAgICAgICAgIFRoZSBpbmRleCBvZiB0aGUgUFJORyBkZXNpcmVkCisgICBAcGFyYW0gaGFzaF9pZHggICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGhhc2ggZGVzaXJlZAorICAgQHBhcmFtIG1vZHVsdXNfYml0bGVuICAgVGhlIGJpdCBsZW5ndGggb2YgdGhlIFJTQSBtb2R1bHVzCisgICBAcGFyYW0gb3V0ICAgICAgICAgICAgICBbb3V0XSBUaGUgZGVzdGluYXRpb24gb2YgdGhlIGVuY29kaW5nCisgICBAcGFyYW0gb3V0bGVuICAgICAgICAgICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBlbmNvZGVkIGRhdGEKKyAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8KK2ludCBwa2NzXzFfcHNzX2VuY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICptc2doYXNoLCB1bnNpZ25lZCBsb25nIG1zZ2hhc2hsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzYWx0bGVuLCAgcHJuZ19zdGF0ZSAgICpwcm5nLCAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICBwcm5nX2lkeCwgaW50ICAgICAgICAgICBoYXNoX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbikKK3sKKyAgIHVuc2lnbmVkIGNoYXIgKkRCLCAqbWFzaywgKnNhbHQsICpoYXNoOworICAgdW5zaWduZWQgbG9uZyB4LCB5LCBoTGVuLCBtb2R1bHVzX2xlbjsKKyAgIGludCAgICAgICAgICAgZXJyOworICAgaGFzaF9zdGF0ZSAgICBtZDsKKworICAgTFRDX0FSR0NISyhtc2doYXNoICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gICE9IE5VTEwpOworCisgICAvKiBlbnN1cmUgaGFzaCBhbmQgUFJORyBhcmUgdmFsaWQgKi8KKyAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoX2lkeCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaWYgKChlcnIgPSBwcm5nX2lzX3ZhbGlkKHBybmdfaWR4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGhMZW4gICAgICAgID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5oYXNoc2l6ZTsKKyAgIG1vZHVsdXNfbGVuID0gKG1vZHVsdXNfYml0bGVuPj4zKSArIChtb2R1bHVzX2JpdGxlbiAmIDcgPyAxIDogMCk7CisKKyAgIC8qIGNoZWNrIHNpemVzICovCisgICBpZiAoKHNhbHRsZW4gPiBtb2R1bHVzX2xlbikgfHwgKG1vZHVsdXNfbGVuIDwgaExlbiArIHNhbHRsZW4gKyAyKSkgeworICAgICAgcmV0dXJuIENSWVBUX1BLX0lOVkFMSURfU0laRTsKKyAgIH0KKworICAgLyogYWxsb2NhdGUgcmFtIGZvciBEQi9tYXNrL3NhbHQvaGFzaCBvZiBzaXplIG1vZHVsdXNfbGVuICovCisgICBEQiAgID0gWE1BTExPQyhtb2R1bHVzX2xlbik7CisgICBtYXNrID0gWE1BTExPQyhtb2R1bHVzX2xlbik7CisgICBzYWx0ID0gWE1BTExPQyhtb2R1bHVzX2xlbik7CisgICBoYXNoID0gWE1BTExPQyhtb2R1bHVzX2xlbik7CisgICBpZiAoREIgPT0gTlVMTCB8fCBtYXNrID09IE5VTEwgfHwgc2FsdCA9PSBOVUxMIHx8IGhhc2ggPT0gTlVMTCkgeworICAgICAgaWYgKERCICE9IE5VTEwpIHsKKyAgICAgICAgIFhGUkVFKERCKTsKKyAgICAgIH0KKyAgICAgIGlmIChtYXNrICE9IE5VTEwpIHsKKyAgICAgICAgIFhGUkVFKG1hc2spOworICAgICAgfQorICAgICAgaWYgKHNhbHQgIT0gTlVMTCkgeworICAgICAgICAgWEZSRUUoc2FsdCk7CisgICAgICB9CisgICAgICBpZiAoaGFzaCAhPSBOVUxMKSB7CisgICAgICAgICBYRlJFRShoYXNoKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBDUllQVF9NRU07CisgICB9CisKKworICAgLyogZ2VuZXJhdGUgcmFuZG9tIHNhbHQgKi8KKyAgIGlmIChzYWx0bGVuID4gMCkgeworICAgICAgaWYgKHBybmdfZGVzY3JpcHRvcltwcm5nX2lkeF0ucmVhZChzYWx0LCBzYWx0bGVuLCBwcm5nKSAhPSBzYWx0bGVuKSB7CisgICAgICAgICBlcnIgPSBDUllQVF9FUlJPUl9SRUFEUFJORzsKKyAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgIH0KKyAgIH0KKworICAgLyogTSA9IChlaWdodCkgMHgwMCB8fCBtc2doYXNoIHx8IHNhbHQsIGhhc2ggPSBIKE0pICovCisgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0uaW5pdCgmbWQpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorICAgemVyb21lbShEQiwgOCk7CisgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0ucHJvY2VzcygmbWQsIERCLCA4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKyAgIGlmICgoZXJyID0gaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5wcm9jZXNzKCZtZCwgbXNnaGFzaCwgbXNnaGFzaGxlbikpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0ucHJvY2VzcygmbWQsIHNhbHQsIHNhbHRsZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorICAgaWYgKChlcnIgPSBoYXNoX2Rlc2NyaXB0b3JbaGFzaF9pZHhdLmRvbmUoJm1kLCBoYXNoKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgIH0KKworICAgLyogZ2VuZXJhdGUgREIgPSBQUyB8fCAweDAxIHx8IHNhbHQsIFBTID09IG1vZHVsdXNfbGVuIC0gc2FsdGxlbiAtIGhMZW4gLSAyIHplcm8gYnl0ZXMgKi8KKyAgIHggPSAwOworICAgWE1FTVNFVChEQiArIHgsIDAsIG1vZHVsdXNfbGVuIC0gc2FsdGxlbiAtIGhMZW4gLSAyKTsKKyAgIHggKz0gbW9kdWx1c19sZW4gLSBzYWx0bGVuIC0gaExlbiAtIDI7CisgICBEQlt4KytdID0gMHgwMTsKKyAgIFhNRU1DUFkoREIgKyB4LCBzYWx0LCBzYWx0bGVuKTsKKyAgIHggKz0gc2FsdGxlbjsKKworICAgLyogZ2VuZXJhdGUgbWFzayBvZiBsZW5ndGggbW9kdWx1c19sZW4gLSBoTGVuIC0gMSBmcm9tIGhhc2ggKi8KKyAgIGlmICgoZXJyID0gcGtjc18xX21nZjEoaGFzaF9pZHgsIGhhc2gsIGhMZW4sIG1hc2ssIG1vZHVsdXNfbGVuIC0gaExlbiAtIDEpKSAhPSBDUllQVF9PSykgeworICAgICAgZ290byBMQkxfRVJSOworICAgfQorCisgICAvKiB4b3IgYWdhaW5zdCBEQiAqLworICAgZm9yICh5ID0gMDsgeSA8IChtb2R1bHVzX2xlbiAtIGhMZW4gLSAxKTsgeSsrKSB7CisgICAgICBEQlt5XSBePSBtYXNrW3ldOworICAgfQorCisgICAvKiBvdXRwdXQgaXMgREIgfHwgaGFzaCB8fCAweEJDICovCisgICBpZiAoKm91dGxlbiA8IG1vZHVsdXNfbGVuKSB7CisgICAgICAqb3V0bGVuID0gbW9kdWx1c19sZW47CisgICAgICBlcnIgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIERCIGxlbiA9IG1vZHVsdXNfbGVuIC0gaExlbiAtIDEgKi8KKyAgIHkgPSAwOworICAgWE1FTUNQWShvdXQgKyB5LCBEQiwgbW9kdWx1c19sZW4gLSBoTGVuIC0gMSk7CisgICB5ICs9IG1vZHVsdXNfbGVuIC0gaExlbiAtIDE7CisKKyAgIC8qIGhhc2ggKi8KKyAgIFhNRU1DUFkob3V0ICsgeSwgaGFzaCwgaExlbik7CisgICB5ICs9IGhMZW47CisKKyAgIC8qIDB4QkMgKi8KKyAgIG91dFt5XSA9IDB4QkM7CisKKyAgIC8qIG5vdyBjbGVhciB0aGUgOCptb2R1bHVzX2xlbiAtIG1vZHVsdXNfYml0bGVuIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyAqLworICAgb3V0WzBdICY9IDB4RkYgPj4gKChtb2R1bHVzX2xlbjw8MykgLSAobW9kdWx1c19iaXRsZW4tMSkpOworCisgICAvKiBzdG9yZSBvdXRwdXQgc2l6ZSAqLworICAgKm91dGxlbiA9IG1vZHVsdXNfbGVuOworICAgZXJyID0gQ1JZUFRfT0s7CitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShEQiwgICBtb2R1bHVzX2xlbik7ICAgCisgICB6ZXJvbWVtKG1hc2ssIG1vZHVsdXNfbGVuKTsgICAKKyAgIHplcm9tZW0oc2FsdCwgbW9kdWx1c19sZW4pOyAgIAorICAgemVyb21lbShoYXNoLCBtb2R1bHVzX2xlbik7ICAgCisjZW5kaWYKKworICAgWEZSRUUoaGFzaCk7CisgICBYRlJFRShzYWx0KTsKKyAgIFhGUkVFKG1hc2spOworICAgWEZSRUUoREIpOworCisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYgLyogUEtDU18xICovCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9wa2NzMS9wa2NzXzFfcHNzX2VuY29kZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMDYvMTYgMjE6NTM6NDEgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2RlY29kZS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2RlY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwYTdjMmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX3YxXzVfZGVjb2RlLmMKQEAgLTAsMCArMSwxMTAgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqIEBmaWxlIHBrY3NfMV92MV81X2RlY29kZS5jCisgKgorICogIFBLQ1MgIzEgdjEuNSBQYWRkaW5nLiAoQW5kcmVhcyBMYW5nZSkKKyAqLworCisjaWZkZWYgUEtDU18xCisKKy8qKiBAYnJpZWYgUEtDUyAjMSB2MS41IGRlY29kZS4KKyAqCisgKiAgQHBhcmFtIG1zZyAgICAgICAgICAgICAgVGhlIGVuY29kZWQgZGF0YSB0byBkZWNvZGUKKyAqICBAcGFyYW0gbXNnbGVuICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBlbmNvZGVkIGRhdGEgKG9jdGV0cykKKyAqICBAcGFyYW0gYmxvY2tfdHlwZSAgICAgICBCbG9jayB0eXBlIHRvIHVzZSBpbiBwYWRkaW5nIChcc2EgbHRjX3BrY3NfMV92MV81X2Jsb2NrcykKKyAqICBAcGFyYW0gbW9kdWx1c19iaXRsZW4gICBUaGUgYml0IGxlbmd0aCBvZiB0aGUgUlNBIG1vZHVsdXMKKyAqICBAcGFyYW0gb3V0ICAgICAgICAgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiBkZWNvZGluZworICogIEBwYXJhbSBvdXRsZW4gICAgICAgICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGRlY29kaW5nCisgKiAgQHBhcmFtIGlzX3ZhbGlkICAgICAgICAgW291dF0gQm9vbGVhbiB3aGV0aGVyIHRoZSBwYWRkaW5nIHdhcyB2YWxpZAorICoKKyAqICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwgKGV2ZW4gaWYgaW52YWxpZCkKKyAqLworaW50IHBrY3NfMV92MV81X2RlY29kZShjb25zdCB1bnNpZ25lZCBjaGFyICptc2csIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICBtc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgIGJsb2NrX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1vZHVsdXNfYml0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmlzX3ZhbGlkKQoreworICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfbGVuLCBwc19sZW4sIGk7CisgIGludCByZXN1bHQ7CisKKyAgLyogZGVmYXVsdCB0byBpbnZhbGlkIHBhY2tldCAqLworICAqaXNfdmFsaWQgPSAwOworCisgIG1vZHVsdXNfbGVuID0gKG1vZHVsdXNfYml0bGVuID4+IDMpICsgKG1vZHVsdXNfYml0bGVuICYgNyA/IDEgOiAwKTsKKworICAvKiB0ZXN0IG1lc3NhZ2Ugc2l6ZSAqLworCisgIGlmICgobXNnbGVuID4gbW9kdWx1c19sZW4pIHx8IChtb2R1bHVzX2xlbiA8IDExKSkgeworICAgIHJldHVybiBDUllQVF9QS19JTlZBTElEX1NJWkU7CisgIH0KKworICAvKiBzZXBhcmF0ZSBlbmNvZGVkIG1lc3NhZ2UgKi8KKworICBpZiAoKG1zZ1swXSAhPSAweDAwKSB8fCAobXNnWzFdICE9ICh1bnNpZ25lZCBjaGFyKWJsb2NrX3R5cGUpKSB7CisgICAgcmVzdWx0ID0gQ1JZUFRfSU5WQUxJRF9QQUNLRVQ7CisgICAgZ290byBiYWlsOworICB9CisKKyAgaWYgKGJsb2NrX3R5cGUgPT0gTFRDX1BLQ1NfMV9FTUUpIHsKKyAgICBmb3IgKGkgPSAyOyBpIDwgbW9kdWx1c19sZW47IGkrKykgeworICAgICAgLyogc2VwYXJhdG9yICovCisgICAgICBpZiAobXNnW2ldID09IDB4MDApIHsgYnJlYWs7IH0KKyAgICB9CisgICAgcHNfbGVuID0gaSsrIC0gMjsKKworICAgIGlmICgoaSA+PSBtb2R1bHVzX2xlbikgfHwgKHBzX2xlbiA8IDgpKSB7CisgICAgICAvKiBUaGVyZSB3YXMgbm8gb2N0ZXQgd2l0aCBoZXhhZGVjaW1hbCB2YWx1ZSAweDAwIHRvIHNlcGFyYXRlIHBzIGZyb20gbSwKKyAgICAgICAqIG9yIHRoZSBsZW5ndGggb2YgcHMgaXMgbGVzcyB0aGFuIDggb2N0ZXRzLgorICAgICAgICovCisgICAgICByZXN1bHQgPSBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgZm9yIChpID0gMjsgaSA8IG1vZHVsdXNfbGVuIC0gMTsgaSsrKSB7CisgICAgICAgaWYgKG1zZ1tpXSAhPSAweEZGKSB7IGJyZWFrOyB9CisgICAgfQorCisgICAgLyogc2VwYXJhdG9yIGNoZWNrICovCisgICAgaWYgKG1zZ1tpXSAhPSAwKSB7CisgICAgICAvKiBUaGVyZSB3YXMgbm8gb2N0ZXQgd2l0aCBoZXhhZGVjaW1hbCB2YWx1ZSAweDAwIHRvIHNlcGFyYXRlIHBzIGZyb20gbS4gKi8KKyAgICAgIHJlc3VsdCA9IENSWVBUX0lOVkFMSURfUEFDS0VUOworICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIHBzX2xlbiA9IGkgLSAyOworICB9CisKKyAgaWYgKCpvdXRsZW4gPCAobXNnbGVuIC0gKDIgKyBwc19sZW4gKyAxKSkpIHsKKyAgICAqb3V0bGVuID0gbXNnbGVuIC0gKDIgKyBwc19sZW4gKyAxKTsKKyAgICByZXN1bHQgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICAgZ290byBiYWlsOworICB9CisKKyAgKm91dGxlbiA9IChtc2dsZW4gLSAoMiArIHBzX2xlbiArIDEpKTsKKyAgWE1FTUNQWShvdXQsICZtc2dbMiArIHBzX2xlbiArIDFdLCAqb3V0bGVuKTsKKworICAvKiB2YWxpZCBwYWNrZXQgKi8KKyAgKmlzX3ZhbGlkID0gMTsKKyAgcmVzdWx0ICAgID0gQ1JZUFRfT0s7CitiYWlsOgorICByZXR1cm4gcmVzdWx0OworfSAvKiBwa2NzXzFfdjFfNV9kZWNvZGUgKi8KKworI2VuZGlmIC8qICNpZmRlZiBQS0NTXzEgKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2RlY29kZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMTYgMTc6NDE6MjEgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2VuY29kZS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL3BrY3MxL3BrY3NfMV92MV81X2VuY29kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZGQxZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX3YxXzVfZW5jb2RlLmMKQEAgLTAsMCArMSwxMTEgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyohIFxmaWxlIHBrY3NfMV92MV81X2VuY29kZS5jCisgKgorICogIFBLQ1MgIzEgdjEuNSBQYWRkaW5nIChBbmRyZWFzIExhbmdlKQorICovCisKKyNpZmRlZiBQS0NTXzEKKworLyohIFxicmllZiBQS0NTICMxIHYxLjUgZW5jb2RlLgorICoKKyAqICBccGFyYW0gbXNnICAgICAgICAgICAgICBUaGUgZGF0YSB0byBlbmNvZGUKKyAqICBccGFyYW0gbXNnbGVuICAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGVuY29kZSAob2N0ZXRzKQorICogIFxwYXJhbSBibG9ja190eXBlICAgICAgIEJsb2NrIHR5cGUgdG8gdXNlIGluIHBhZGRpbmcgKFxzYSBsdGNfcGtjc18xX3YxXzVfYmxvY2tzKQorICogIFxwYXJhbSBtb2R1bHVzX2JpdGxlbiAgIFRoZSBiaXQgbGVuZ3RoIG9mIHRoZSBSU0EgbW9kdWx1cworICogIFxwYXJhbSBwcm5nICAgICAgICAgICAgIEFuIGFjdGl2ZSBQUk5HIHN0YXRlIChvbmx5IGZvciBMVENfUEtDU18xX0VNRSkKKyAqICBccGFyYW0gcHJuZ19pZHggICAgICAgICBUaGUgaW5kZXggb2YgdGhlIFBSTkcgZGVzaXJlZCAob25seSBmb3IgTFRDX1BLQ1NfMV9FTUUpCisgKiAgXHBhcmFtIG91dCAgICAgICAgICAgICAgW291dF0gVGhlIGRlc3RpbmF0aW9uIGZvciB0aGUgZW5jb2RlZCBkYXRhCisgKiAgXHBhcmFtIG91dGxlbiAgICAgICAgICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgZW5jb2RlZCBkYXRhCisgKgorICogIFxyZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorICovCitpbnQgcGtjc18xX3YxXzVfZW5jb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm1zZywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgIG1zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgYmxvY2tfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgbW9kdWx1c19iaXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICBwcm5nX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfbGVuLCBwc19sZW4sIGk7CisgIHVuc2lnbmVkIGNoYXIgKnBzOworICBpbnQgcmVzdWx0OworCisgIC8qIHZhbGlkIGJsb2NrX3R5cGU/ICovCisgIGlmICgoYmxvY2tfdHlwZSAhPSBMVENfUEtDU18xX0VNU0EpICYmCisgICAgICAoYmxvY2tfdHlwZSAhPSBMVENfUEtDU18xX0VNRSkpIHsKKyAgICAgcmV0dXJuIENSWVBUX1BLX0lOVkFMSURfUEFERElORzsKKyAgfQorCisgIGlmIChibG9ja190eXBlID09IExUQ19QS0NTXzFfRU1FKSB7ICAgIC8qIGVuY3J5cHRpb24gcGFkZGluZywgd2UgbmVlZCBhIHZhbGlkIFBSTkcgKi8KKyAgICBpZiAoKHJlc3VsdCA9IHBybmdfaXNfdmFsaWQocHJuZ19pZHgpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICB9CisKKyAgbW9kdWx1c19sZW4gPSAobW9kdWx1c19iaXRsZW4gPj4gMykgKyAobW9kdWx1c19iaXRsZW4gJiA3ID8gMSA6IDApOworCisgIC8qIHRlc3QgbWVzc2FnZSBzaXplICovCisgIGlmICgobXNnbGVuICsgMTEpID4gbW9kdWx1c19sZW4pIHsKKyAgICByZXR1cm4gQ1JZUFRfUEtfSU5WQUxJRF9TSVpFOworICB9CisKKyAgaWYgKCpvdXRsZW4gPCBtb2R1bHVzX2xlbikgeworICAgICpvdXRsZW4gPSBtb2R1bHVzX2xlbjsKKyAgICByZXN1bHQgPSBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICAgZ290byBiYWlsOworICB9CisKKyAgLyogZ2VuZXJhdGUgYW4gb2N0ZXRzIHN0cmluZyBQUyAqLworICBwcyA9ICZvdXRbMl07CisgIHBzX2xlbiA9IG1vZHVsdXNfbGVuIC0gbXNnbGVuIC0gMzsKKworICBpZiAoYmxvY2tfdHlwZSA9PSBMVENfUEtDU18xX0VNRSkgeworICAgIC8qIG5vdyBjaG9vc2UgYSByYW5kb20gcHMgKi8KKyAgICBpZiAocHJuZ19kZXNjcmlwdG9yW3BybmdfaWR4XS5yZWFkKHBzLCBwc19sZW4sIHBybmcpICE9IHBzX2xlbikgeworICAgICAgcmVzdWx0ID0gQ1JZUFRfRVJST1JfUkVBRFBSTkc7CisgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgLyogdHJhbnNmb3JtIHplcm8gYnl0ZXMgKGlmIGFueSkgdG8gbm9uLXplcm8gcmFuZG9tIGJ5dGVzICovCisgICAgZm9yIChpID0gMDsgaSA8IHBzX2xlbjsgaSsrKSB7CisgICAgICB3aGlsZSAocHNbaV0gPT0gMCkgeworICAgICAgICBpZiAocHJuZ19kZXNjcmlwdG9yW3BybmdfaWR4XS5yZWFkKCZwc1tpXSwgMSwgcHJuZykgIT0gMSkgeworICAgICAgICAgIHJlc3VsdCA9IENSWVBUX0VSUk9SX1JFQURQUk5HOworICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBYTUVNU0VUKHBzLCAweEZGLCBwc19sZW4pOworICB9CisKKyAgLyogY3JlYXRlIHN0cmluZyBvZiBsZW5ndGggbW9kdWx1c19sZW4gKi8KKyAgb3V0WzBdICAgICAgICAgID0gMHgwMDsKKyAgb3V0WzFdICAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIpYmxvY2tfdHlwZTsgIC8qIGJsb2NrX3R5cGUgMSBvciAyICovCisgIG91dFsyICsgcHNfbGVuXSA9IDB4MDA7CisgIFhNRU1DUFkoJm91dFsyICsgcHNfbGVuICsgMV0sIG1zZywgbXNnbGVuKTsKKyAgKm91dGxlbiA9IG1vZHVsdXNfbGVuOworCisgIHJlc3VsdCAgPSBDUllQVF9PSzsKK2JhaWw6CisgIHJldHVybiByZXN1bHQ7Cit9IC8qIHBrY3NfMV92MV81X2VuY29kZSAqLworCisjZW5kaWYgLyogI2lmZGVmIFBLQ1NfMSAqLworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcGtjczEvcGtjc18xX3YxXzVfZW5jb2RlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wMSAwOToxMjowNiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9kZWNyeXB0X2tleS5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL3JzYS9yc2FfZGVjcnlwdF9rZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGNlMjBmCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL3JzYS9yc2FfZGVjcnlwdF9rZXkuYwpAQCAtMCwwICsxLDEwNSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgcnNhX2RlY3J5cHRfa2V5LmMKKyAgUlNBIFBLQ1MgIzEgRGVjcnlwdGlvbiwgVG9tIFN0IERlbmlzIGFuZCBBbmRyZWFzIExhbmdlCisqLworCisjaWZkZWYgTVJTQQorCisvKioKKyAgIFBLQ1MgIzEgZGVjcnlwdCB0aGVuIHYxLjUgb3IgT0FFUCBkZXBhZAorICAgQHBhcmFtIGluICAgICAgICAgIFRoZSBjaXBoZXJ0ZXh0CisgICBAcGFyYW0gaW5sZW4gICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgY2lwaGVydGV4dCAob2N0ZXRzKQorICAgQHBhcmFtIG91dCAgICAgICAgIFtvdXRdIFRoZSBwbGFpbnRleHQKKyAgIEBwYXJhbSBvdXRsZW4gICAgICBbaW4vb3V0XSBUaGUgbWF4IHNpemUgYW5kIHJlc3VsdGluZyBzaXplIG9mIHRoZSBwbGFpbnRleHQgKG9jdGV0cykKKyAgIEBwYXJhbSBscGFyYW0gICAgICBUaGUgc3lzdGVtICJscGFyYW0iIHZhbHVlCisgICBAcGFyYW0gbHBhcmFtbGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgbHBhcmFtIHZhbHVlIChvY3RldHMpCisgICBAcGFyYW0gaGFzaF9pZHggICAgVGhlIGluZGV4IG9mIHRoZSBoYXNoIGRlc2lyZWQKKyAgIEBwYXJhbSBwYWRkaW5nICAgICBUeXBlIG9mIHBhZGRpbmcgKExUQ19QS0NTXzFfT0FFUCBvciBMVENfUEtDU18xX1YxXzUpCisgICBAcGFyYW0gc3RhdCAgICAgICAgW291dF0gUmVzdWx0IG9mIHRoZSBkZWNyeXB0aW9uLCAxPT12YWxpZCwgMD09aW52YWxpZAorICAgQHBhcmFtIGtleSAgICAgICAgIFRoZSBjb3JyZXNwb25kaW5nIHByaXZhdGUgUlNBIGtleQorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjY2Vzc3VsIChldmVuIGlmIGludmFsaWQpCisqLworaW50IHJzYV9kZWNyeXB0X2tleV9leChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAgICAgdW5zaWduZWQgbG9uZyAgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgICB1bnNpZ25lZCBsb25nICpvdXRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxwYXJhbSwgICB1bnNpZ25lZCBsb25nICBscGFyYW1sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIGhhc2hfaWR4LCBpbnQgICAgICAgICAgICBwYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICpzdGF0LCAgICAgcnNhX2tleSAgICAgICAqa2V5KQoreworICB1bnNpZ25lZCBsb25nIG1vZHVsdXNfYml0bGVuLCBtb2R1bHVzX2J5dGVsZW4sIHg7CisgIGludCAgICAgICAgICAgZXJyOworICB1bnNpZ25lZCBjaGFyICp0bXA7CisKKyAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKyAgTFRDX0FSR0NISyhzdGF0ICAgIT0gTlVMTCk7CisKKyAgLyogZGVmYXVsdCB0byBpbnZhbGlkICovCisgICpzdGF0ID0gMDsKKworICAvKiB2YWxpZCBwYWRkaW5nPyAqLworCisgIGlmICgocGFkZGluZyAhPSBMVENfUEtDU18xX1YxXzUpICYmCisgICAgICAocGFkZGluZyAhPSBMVENfUEtDU18xX09BRVApKSB7CisgICAgcmV0dXJuIENSWVBUX1BLX0lOVkFMSURfUEFERElORzsKKyAgfQorCisgIGlmIChwYWRkaW5nID09IExUQ19QS0NTXzFfT0FFUCkgeworICAgIC8qIHZhbGlkIGhhc2ggPyAqLworICAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoX2lkeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgIH0KKworICAvKiBnZXQgbW9kdWx1cyBsZW4gaW4gYml0cyAqLworICBtb2R1bHVzX2JpdGxlbiA9IG1wX2NvdW50X2JpdHMoIChrZXktPk4pKTsKKworICAvKiBvdXRsZW4gbXVzdCBiZSBhdCBsZWFzdCB0aGUgc2l6ZSBvZiB0aGUgbW9kdWx1cyAqLworICBtb2R1bHVzX2J5dGVsZW4gPSBtcF91bnNpZ25lZF9iaW5fc2l6ZSggKGtleS0+TikpOworICBpZiAobW9kdWx1c19ieXRlbGVuICE9IGlubGVuKSB7CisgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgfQorCisgIC8qIGFsbG9jYXRlIHJhbSAqLworICB0bXAgPSBYTUFMTE9DKGlubGVuKTsKKyAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgIHJldHVybiBDUllQVF9NRU07CisgIH0KKworICAvKiByc2EgZGVjb2RlIHRoZSBwYWNrZXQgKi8KKyAgeCA9IGlubGVuOworICBpZiAoKGVyciA9IGx0Y19tcC5yc2FfbWUoaW4sIGlubGVuLCB0bXAsICZ4LCBQS19QUklWQVRFLCBrZXkpKSAhPSBDUllQVF9PSykgeworICAgICBYRlJFRSh0bXApOworICAgICByZXR1cm4gZXJyOworICB9CisKKyAgaWYgKHBhZGRpbmcgPT0gTFRDX1BLQ1NfMV9PQUVQKSB7CisgICAgLyogbm93IE9BRVAgZGVjb2RlIHRoZSBwYWNrZXQgKi8KKyAgICBlcnIgPSBwa2NzXzFfb2FlcF9kZWNvZGUodG1wLCB4LCBscGFyYW0sIGxwYXJhbWxlbiwgbW9kdWx1c19iaXRsZW4sIGhhc2hfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsIG91dGxlbiwgc3RhdCk7CisgIH0gZWxzZSB7CisgICAgLyogbm93IFBLQ1MgIzEgdjEuNSBkZXBhZCB0aGUgcGFja2V0ICovCisgICAgZXJyID0gcGtjc18xX3YxXzVfZGVjb2RlKHRtcCwgeCwgTFRDX1BLQ1NfMV9FTUUsIG1vZHVsdXNfYml0bGVuLCBvdXQsIG91dGxlbiwgc3RhdCk7CisgIH0KKworICBYRlJFRSh0bXApOworICByZXR1cm4gZXJyOworfQorCisjZW5kaWYgLyogTVJTQSAqLworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9kZWNyeXB0X2tleS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6MTg6MjIgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL3JzYS9yc2FfZW5jcnlwdF9rZXkuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX2VuY3J5cHRfa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQyYzIyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX2VuY3J5cHRfa2V5LmMKQEAgLTAsMCArMSwxMDIgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIHJzYV9lbmNyeXB0X2tleS5jCisgIFJTQSBQS0NTICMxIGVuY3J5cHRpb24sIFRvbSBTdCBEZW5pcyBhbmQgQW5kcmVhcyBMYW5nZQorKi8KKworI2lmZGVmIE1SU0EKKworLyoqCisgICAgKFBLQ1MgIzEgdjIuMCkgT0FFUCBwYWQgdGhlbiBlbmNyeXB0CisgICAgQHBhcmFtIGluICAgICAgICAgIFRoZSBwbGFpbnRleHQKKyAgICBAcGFyYW0gaW5sZW4gICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgcGxhaW50ZXh0IChvY3RldHMpCisgICAgQHBhcmFtIG91dCAgICAgICAgIFtvdXRdIFRoZSBjaXBoZXJ0ZXh0CisgICAgQHBhcmFtIG91dGxlbiAgICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIGNpcGhlcnRleHQKKyAgICBAcGFyYW0gbHBhcmFtICAgICAgVGhlIHN5c3RlbSAibHBhcmFtIiBmb3IgdGhlIGVuY3J5cHRpb24KKyAgICBAcGFyYW0gbHBhcmFtbGVuICAgVGhlIGxlbmd0aCBvZiBscGFyYW0gKG9jdGV0cykKKyAgICBAcGFyYW0gcHJuZyAgICAgICAgQW4gYWN0aXZlIFBSTkcKKyAgICBAcGFyYW0gcHJuZ19pZHggICAgVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIHBybmcKKyAgICBAcGFyYW0gaGFzaF9pZHggICAgVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGhhc2gKKyAgICBAcGFyYW0gcGFkZGluZyAgICAgVHlwZSBvZiBwYWRkaW5nIChMVENfUEtDU18xX09BRVAgb3IgTFRDX1BLQ1NfMV9WMV81KQorICAgIEBwYXJhbSBrZXkgICAgICAgICBUaGUgUlNBIGtleSB0byBlbmNyeXB0IHRvCisgICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHJzYV9lbmNyeXB0X2tleV9leChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgICAgIHVuc2lnbmVkIGxvbmcgaW5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dCwgICAgdW5zaWduZWQgbG9uZyAqb3V0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpscGFyYW0sIHVuc2lnbmVkIGxvbmcgbHBhcmFtbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICpwcm5nLCBpbnQgcHJuZ19pZHgsIGludCBoYXNoX2lkeCwgaW50IHBhZGRpbmcsIHJzYV9rZXkgKmtleSkKK3sKKyAgdW5zaWduZWQgbG9uZyBtb2R1bHVzX2JpdGxlbiwgbW9kdWx1c19ieXRlbGVuLCB4OworICBpbnQgICAgICAgICAgIGVycjsKKworICBMVENfQVJHQ0hLKGluICAgICAhPSBOVUxMKTsKKyAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICBMVENfQVJHQ0hLKGtleSAgICAhPSBOVUxMKTsKKworICAvKiB2YWxpZCBwYWRkaW5nPyAqLworICBpZiAoKHBhZGRpbmcgIT0gTFRDX1BLQ1NfMV9WMV81KSAmJgorICAgICAgKHBhZGRpbmcgIT0gTFRDX1BLQ1NfMV9PQUVQKSkgeworICAgIHJldHVybiBDUllQVF9QS19JTlZBTElEX1BBRERJTkc7CisgIH0KKworICAvKiB2YWxpZCBwcm5nPyAqLworICBpZiAoKGVyciA9IHBybmdfaXNfdmFsaWQocHJuZ19pZHgpKSAhPSBDUllQVF9PSykgeworICAgICByZXR1cm4gZXJyOworICB9CisKKyAgaWYgKHBhZGRpbmcgPT0gTFRDX1BLQ1NfMV9PQUVQKSB7CisgICAgLyogdmFsaWQgaGFzaD8gKi8KKyAgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQoaGFzaF9pZHgpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICB9CisKKyAgLyogZ2V0IG1vZHVsdXMgbGVuIGluIGJpdHMgKi8KKyAgbW9kdWx1c19iaXRsZW4gPSBtcF9jb3VudF9iaXRzKCAoa2V5LT5OKSk7CisKKyAgLyogb3V0bGVuIG11c3QgYmUgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIG1vZHVsdXMgKi8KKyAgbW9kdWx1c19ieXRlbGVuID0gbXBfdW5zaWduZWRfYmluX3NpemUoIChrZXktPk4pKTsKKyAgaWYgKG1vZHVsdXNfYnl0ZWxlbiA+ICpvdXRsZW4pIHsKKyAgICAgKm91dGxlbiA9IG1vZHVsdXNfYnl0ZWxlbjsKKyAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgfQorCisgIGlmIChwYWRkaW5nID09IExUQ19QS0NTXzFfT0FFUCkgeworICAgIC8qIE9BRVAgcGFkIHRoZSBrZXkgKi8KKyAgICB4ID0gKm91dGxlbjsKKyAgICBpZiAoKGVyciA9IHBrY3NfMV9vYWVwX2VuY29kZShpbiwgaW5sZW4sIGxwYXJhbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscGFyYW1sZW4sIG1vZHVsdXNfYml0bGVuLCBwcm5nLCBwcm5nX2lkeCwgaGFzaF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgLyogUEtDUyAjMSB2MS41IHBhZCB0aGUga2V5ICovCisgICAgeCA9ICpvdXRsZW47CisgICAgaWYgKChlcnIgPSBwa2NzXzFfdjFfNV9lbmNvZGUoaW4sIGlubGVuLCBMVENfUEtDU18xX0VNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bHVzX2JpdGxlbiwgcHJuZywgcHJuZ19pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCAmeCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgfQorCisgIC8qIHJzYSBleHB0bW9kIHRoZSBPQUVQIG9yIFBLQ1MgIzEgdjEuNSBwYWQgKi8KKyAgcmV0dXJuIGx0Y19tcC5yc2FfbWUob3V0LCB4LCBvdXQsIG91dGxlbiwgUEtfUFVCTElDLCBrZXkpOworfQorCisjZW5kaWYgLyogTVJTQSAqLworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9lbmNyeXB0X2tleS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjggJCAqLworLyogJERhdGU6IDIwMDYvMTEvMDEgMDk6MTg6MjIgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BrL3JzYS9yc2FfZXhwb3J0LmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9leHBvcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjM4OWVjCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL3JzYS9yc2FfZXhwb3J0LmMKQEAgLTAsMCArMSw2OSBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgcnNhX2V4cG9ydC5jCisgIEV4cG9ydCBSU0EgUEtDUyBrZXlzLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIE1SU0EKKworLyoqCisgICAgVGhpcyB3aWxsIGV4cG9ydCBlaXRoZXIgYW4gUlNBUHVibGljS2V5IG9yIFJTQVByaXZhdGVLZXkgW2RlZmluZWQgaW4gUEtDUyAjMSB2Mi4xXSAKKyAgICBAcGFyYW0gb3V0ICAgICAgIFtvdXRdIERlc3RpbmF0aW9uIG9mIHRoZSBwYWNrZXQKKyAgICBAcGFyYW0gb3V0bGVuICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHBhY2tldAorICAgIEBwYXJhbSB0eXBlICAgICAgVGhlIHR5cGUgb2YgZXhwb3J0ZWQga2V5IChQS19QUklWQVRFIG9yIFBLX1BVQkxJQykKKyAgICBAcGFyYW0ga2V5ICAgICAgIFRoZSBSU0Ega2V5IHRvIGV4cG9ydAorICAgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gICAgCitpbnQgcnNhX2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgaW50IHR5cGUsIHJzYV9rZXkgKmtleSkKK3sKKyAgIHVuc2lnbmVkIGxvbmcgemVybz0wOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworCisgICAvKiB0eXBlIHZhbGlkPyAqLworICAgaWYgKCEoa2V5LT50eXBlID09IFBLX1BSSVZBVEUpICYmICh0eXBlID09IFBLX1BSSVZBVEUpKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfSU5WQUxJRF9UWVBFOworICAgfQorCisgICBpZiAodHlwZSA9PSBQS19QUklWQVRFKSB7CisgICAgICAvKiBwcml2YXRlIGtleSAqLworICAgICAgLyogb3V0cHV0IGlzIAorICAgICAgICAgICAgVmVyc2lvbiwgbiwgZSwgZCwgcCwgcSwgZCBtb2QgKHAtMSksIGQgbW9kIChxIC0gMSksIDEvcSBtb2QgcAorICAgICAgICovCisgICAgICByZXR1cm4gZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aShvdXQsIG91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX1NIT1JUX0lOVEVHRVIsIDFVTCwgJnplcm8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICBrZXktPk4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICBrZXktPmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgIGtleS0+ZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgIGtleS0+cCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgIGtleS0+cSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgIGtleS0+ZFAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwgIGtleS0+ZFEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICBrZXktPnFQLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgMFVMLCBOVUxMKTsKKyAgIH0gZWxzZSB7CisgICAgICAvKiBwdWJsaWMga2V5ICovCisgICAgICByZXR1cm4gZGVyX2VuY29kZV9zZXF1ZW5jZV9tdWx0aShvdXQsIG91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsICBrZXktPk4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCAga2V5LT5lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgIDBVTCwgTlVMTCk7CisgICB9Cit9CisKKyNlbmRpZiAvKiBNUlNBICovCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX2V4cG9ydC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjE1ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE1OjM1ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX2V4cHRtb2QuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX2V4cHRtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2RiZjZiCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL3JzYS9yc2FfZXhwdG1vZC5jCkBAIC0wLDAgKzEsMTEzIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSByc2FfZXhwdG1vZC5jCisgIFJTQSBQS0NTIGV4cHRtb2QsIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTVJTQQorCisvKiogCisgICBDb21wdXRlIGFuIFJTQSBtb2R1bGFyIGV4cG9uZW50aWF0aW9uIAorICAgQHBhcmFtIGluICAgICAgICAgVGhlIGlucHV0IGRhdGEgdG8gc2VuZCBpbnRvIFJTQQorICAgQHBhcmFtIGlubGVuICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgKG9jdGV0cykKKyAgIEBwYXJhbSBvdXQgICAgICAgIFtvdXRdIFRoZSBkZXN0aW5hdGlvbiAKKyAgIEBwYXJhbSBvdXRsZW4gICAgIFtpbi9vdXRdIFRoZSBtYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIG91dHB1dAorICAgQHBhcmFtIHdoaWNoICAgICAgV2hpY2ggZXhwb25lbnQgdG8gdXNlLCBlLmcuIFBLX1BSSVZBVEUgb3IgUEtfUFVCTElDCisgICBAcGFyYW0ga2V5ICAgICAgICBUaGUgUlNBIGtleSB0byB1c2UgCisgICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAgCitpbnQgcnNhX2V4cHRtb2QoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgdW5zaWduZWQgbG9uZyBpbmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpvdXQsICB1bnNpZ25lZCBsb25nICpvdXRsZW4sIGludCB3aGljaCwKKyAgICAgICAgICAgICAgICAgICAgICByc2Ffa2V5ICprZXkpCit7CisgICB2b2lkICAgICAgICAgKnRtcCwgKnRtcGEsICp0bXBiOworICAgdW5zaWduZWQgbG9uZyB4OworICAgaW50ICAgICAgICAgICBlcnI7CisKKyAgIExUQ19BUkdDSEsoaW4gICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICAgICE9IE5VTEwpOworICAKKyAgIC8qIGlzIHRoZSBrZXkgb2YgdGhlIHJpZ2h0IHR5cGUgZm9yIHRoZSBvcGVyYXRpb24/ICovCisgICBpZiAod2hpY2ggPT0gUEtfUFJJVkFURSAmJiAoa2V5LT50eXBlICE9IFBLX1BSSVZBVEUpKSB7CisgICAgICByZXR1cm4gQ1JZUFRfUEtfTk9UX1BSSVZBVEU7CisgICB9CisKKyAgIC8qIG11c3QgYmUgYSBwcml2YXRlIG9yIHB1YmxpYyBvcGVyYXRpb24gKi8KKyAgIGlmICh3aGljaCAhPSBQS19QUklWQVRFICYmIHdoaWNoICE9IFBLX1BVQkxJQykgeworICAgICAgcmV0dXJuIENSWVBUX1BLX0lOVkFMSURfVFlQRTsKKyAgIH0KKworICAgLyogaW5pdCBhbmQgY29weSBpbnRvIHRtcCAqLworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ0bXAsICZ0bXBhLCAmdG1wYiwgTlVMTCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgcmV0dXJuIGVycjsgfQorICAgaWYgKChlcnIgPSBtcF9yZWFkX3Vuc2lnbmVkX2Jpbih0bXAsICh1bnNpZ25lZCBjaGFyICopaW4sIChpbnQpaW5sZW4pKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAvKiBzYW5pdHkgY2hlY2sgb24gdGhlIGlucHV0ICovCisgICBpZiAobXBfY21wKGtleS0+TiwgdG1wKSA9PSBMVENfTVBfTFQpIHsKKyAgICAgIGVyciA9IENSWVBUX1BLX0lOVkFMSURfU0laRTsKKyAgICAgIGdvdG8gZXJyb3I7CisgICB9CisKKyAgIC8qIGFyZSB3ZSB1c2luZyB0aGUgcHJpdmF0ZSBleHBvbmVudCBhbmQgaXMgdGhlIGtleSBvcHRpbWl6ZWQ/ICovCisgICBpZiAod2hpY2ggPT0gUEtfUFJJVkFURSkgeworICAgICAgLyogdG1wYSA9IHRtcF5kUCBtb2QgcCAqLworICAgICAgaWYgKChlcnIgPSBtcF9leHB0bW9kKHRtcCwga2V5LT5kUCwga2V5LT5wLCB0bXBhKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAgICAvKiB0bXBiID0gdG1wXmRRIG1vZCBxICovCisgICAgICBpZiAoKGVyciA9IG1wX2V4cHRtb2QodG1wLCBrZXktPmRRLCBrZXktPnEsIHRtcGIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgICAgIC8qIHRtcCA9ICh0bXBhIC0gdG1wYikgKiBxSW52IChtb2QgcCkgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfc3ViKHRtcGEsIHRtcGIsIHRtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsbW9kKHRtcCwga2V5LT5xUCwga2V5LT5wLCB0bXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorCisgICAgICAvKiB0bXAgPSB0bXBiICsgcSAqIHRtcCAqLworICAgICAgaWYgKChlcnIgPSBtcF9tdWwodG1wLCBrZXktPnEsIHRtcCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgICAgaWYgKChlcnIgPSBtcF9hZGQodG1wLCB0bXBiLCB0bXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgfSBlbHNlIHsKKyAgICAgIC8qIGV4cHRtb2QgaXQgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfZXhwdG1vZCh0bXAsIGtleS0+ZSwga2V5LT5OLCB0bXApKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgfQorCisgICAvKiByZWFkIGl0IGJhY2sgKi8KKyAgIHggPSAodW5zaWduZWQgbG9uZyltcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPk4pOworICAgaWYgKHggPiAqb3V0bGVuKSB7CisgICAgICAqb3V0bGVuID0geDsKKyAgICAgIGVyciA9IENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgICAgIGdvdG8gZXJyb3I7CisgICB9CisKKyAgIC8qIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAuLi4gKi8KKyAgIGlmIChtcF91bnNpZ25lZF9iaW5fc2l6ZSh0bXApID4gbXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5OKSkgeworICAgICAgZXJyID0gQ1JZUFRfRVJST1I7CisgICAgICBnb3RvIGVycm9yOworICAgfQorICAgKm91dGxlbiA9IHg7CisKKyAgIC8qIGNvbnZlcnQgaXQgKi8KKyAgIHplcm9tZW0ob3V0LCB4KTsKKyAgIGlmICgoZXJyID0gbXBfdG9fdW5zaWduZWRfYmluKHRtcCwgb3V0Kyh4LW1wX3Vuc2lnbmVkX2Jpbl9zaXplKHRtcCkpKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgIC8qIGNsZWFuIHVwIGFuZCByZXR1cm4gKi8KKyAgIGVyciA9IENSWVBUX09LOworZXJyb3I6CisgICBtcF9jbGVhcl9tdWx0aSh0bXAsIHRtcGEsIHRtcGIsIE5VTEwpOworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX2V4cHRtb2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xNiAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMzowOToyOCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9mcmVlLmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9mcmVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4OTc2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX2ZyZWUuYwpAQCAtMCwwICsxLDM0IEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSByc2FfZnJlZS5jCisgIEZyZWUgYW4gUlNBIGtleSwgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNUlNBCisKKy8qKgorICBGcmVlIGFuIFJTQSBrZXkgZnJvbSBtZW1vcnkKKyAgQHBhcmFtIGtleSAgIFRoZSBSU0Ega2V5IHRvIGZyZWUKKyovCit2b2lkIHJzYV9mcmVlKHJzYV9rZXkgKmtleSkKK3sKKyAgIExUQ19BUkdDSEtWRChrZXkgIT0gTlVMTCk7CisgICBtcF9jbGVhcl9tdWx0aShrZXktPmUsIGtleS0+ZCwga2V5LT5OLCBrZXktPmRRLCBrZXktPmRQLCBrZXktPnFQLCBrZXktPnAsIGtleS0+cSwgTlVMTCk7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9mcmVlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMjoyMzoyNyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9pbXBvcnQuYyBiL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX2ltcG9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTJmZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9pbXBvcnQuYwpAQCAtMCwwICsxLDE0MyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgcnNhX2ltcG9ydC5jCisgIEltcG9ydCBhIFBLQ1MgUlNBIGtleSwgVG9tIFN0IERlbmlzCisqLyAgCisKKyNpZmRlZiBNUlNBCisKKy8qKgorICBJbXBvcnQgYW4gUlNBUHVibGljS2V5IG9yIFJTQVByaXZhdGVLZXkgW3R3by1wcmltZSBvbmx5LCBvbmx5IHN1cHBvcnQgPj0gMTAyNC1iaXQga2V5cywgZGVmaW5lZCBpbiBQS0NTICMxIHYyLjFdCisgIEBwYXJhbSBpbiAgICAgIFRoZSBwYWNrZXQgdG8gaW1wb3J0IGZyb20KKyAgQHBhcmFtIGlubGVuICAgSXQncyBsZW5ndGggKG9jdGV0cykKKyAgQHBhcmFtIGtleSAgICAgW291dF0gRGVzdGluYXRpb24gZm9yIG5ld2x5IGltcG9ydGVkIGtleQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIHVwb24gZXJyb3IgYWxsb2NhdGVkIG1lbW9yeSBpcyBmcmVlZAorKi8KK2ludCByc2FfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCByc2Ffa2V5ICprZXkpCit7CisgICBpbnQgICAgICAgICAgIGVycjsKKyAgIHZvaWQgICAgICAgICAqemVybzsKKyAgIHVuc2lnbmVkIGNoYXIgKnRtcGJ1ZjsKKyAgIHVuc2lnbmVkIGxvbmcgIHQsIHgsIHksIHosIHRtcG9pZFsxNl07CisgICBsdGNfYXNuMV9saXN0IHNzbF9wdWJrZXlfaGFzaG9pZFsyXTsKKyAgIGx0Y19hc24xX2xpc3Qgc3NsX3B1YmtleVsyXTsKKworICAgTFRDX0FSR0NISyhpbiAgICAgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICAgICAgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGx0Y19tcC5uYW1lICE9IE5VTEwpOworCisgICAvKiBpbml0IGtleSAqLworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZrZXktPmUsICZrZXktPmQsICZrZXktPk4sICZrZXktPmRRLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAma2V5LT5kUCwgJmtleS0+cVAsICZrZXktPnAsICZrZXktPnEsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogc2VlIGlmIHRoZSBPcGVuU1NMIERFUiBmb3JtYXQgUlNBIHB1YmxpYyBrZXkgd2lsbCB3b3JrICovCisgICB0bXBidWYgPSBYQ0FMTE9DKDEsIE1BWF9SU0FfU0laRSo4KTsKKyAgIGlmICh0bXBidWYgPT0gTlVMTCkgeworICAgICAgIGVyciA9IENSWVBUX01FTTsKKyAgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIC8qIHRoaXMgaW5jbHVkZXMgdGhlIGludGVybmFsIGhhc2ggSUQgYW5kIG9wdGlvbmFsIHBhcmFtcyAoTlVMTCBpbiB0aGlzIGNhc2UpICovCisgICBMVENfU0VUX0FTTjEoc3NsX3B1YmtleV9oYXNob2lkLCAwLCBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUiwgdG1wb2lkLCAgICAgICAgICAgICAgICBzaXplb2YodG1wb2lkKS9zaXplb2YodG1wb2lkWzBdKSk7ICAgCisgICBMVENfU0VUX0FTTjEoc3NsX3B1YmtleV9oYXNob2lkLCAxLCBMVENfQVNOMV9OVUxMLCAgICAgICAgICAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAwKTsKKworICAgLyogdGhlIGFjdHVhbCBmb3JtYXQgb2YgdGhlIFNTTCBERVIga2V5IGlzIG9kZCwgaXQgc3RvcmVzIGEgUlNBUHVibGljS2V5IGluIGEgKipCSVQqKiBzdHJpbmcgLi4uIHNvIHdlIGhhdmUgdG8gZXh0cmFjdCBpdAorICAgICAgdGhlbiBwcm9jZWVkIHRvIGNvbnZlcnQgYml0IHRvIG9jdGV0IAorICAgICovCisgICBMVENfU0VUX0FTTjEoc3NsX3B1YmtleSwgMCwgICAgICAgICBMVENfQVNOMV9TRVFVRU5DRSwgICAgICAgICAgJnNzbF9wdWJrZXlfaGFzaG9pZCwgICAyKTsKKyAgIExUQ19TRVRfQVNOMShzc2xfcHVia2V5LCAxLCAgICAgICAgIExUQ19BU04xX0JJVF9TVFJJTkcsICAgICAgICB0bXBidWYsICAgICAgICAgICAgICAgIE1BWF9SU0FfU0laRSo4KTsKKworICAgaWYgKGRlcl9kZWNvZGVfc2VxdWVuY2UoaW4sIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3B1YmtleSwgMlVMKSA9PSBDUllQVF9PSykgeworCisgICAgICAvKiBvayBub3cgd2UgaGF2ZSB0byByZWFzc2VtYmxlIHRoZSBCSVQgU1RSSU5HIHRvIGFuIE9DVEVUIFNUUklORy4gIFRoYW5rcyBPcGVuU1NMLi4uICovCisgICAgICBmb3IgKHQgPSB5ID0geiA9IHggPSAwOyB4IDwgc3NsX3B1YmtleVsxXS5zaXplOyB4KyspIHsKKyAgICAgICAgICB5ID0gKHkgPDwgMSkgfCB0bXBidWZbeF07CisgICAgICAgICAgaWYgKCsreiA9PSA4KSB7CisgICAgICAgICAgICAgdG1wYnVmW3QrK10gPSAodW5zaWduZWQgY2hhcil5OworICAgICAgICAgICAgIHkgICAgICAgICAgID0gMDsKKyAgICAgICAgICAgICB6ICAgICAgICAgICA9IDA7CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiBub3cgaXQgc2hvdWxkIGJlIFNFUVVFTkNFIHsgSU5URUdFUiwgSU5URUdFUiB9ICovCisgICAgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2VxdWVuY2VfbXVsdGkodG1wYnVmLCB0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5OLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfRU9MLCAgICAgMFVMLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIFhGUkVFKHRtcGJ1Zik7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICAgICBYRlJFRSh0bXBidWYpOworICAgICAga2V5LT50eXBlID0gUEtfUFVCTElDOworICAgICAgcmV0dXJuIENSWVBUX09LOworICAgfQorICAgWEZSRUUodG1wYnVmKTsKKworICAgLyogbm90IFNTTCBwdWJsaWMga2V5LCB0cnkgdG8gbWF0Y2ggYWdhaW5zdCBQS0NTICMxIHN0YW5kYXJkcyAqLworICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpKGluLCBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPk4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgIDBVTCwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9CisKKyAgIGlmIChtcF9jbXBfZChrZXktPk4sIDApID09IExUQ19NUF9FUSkgeworICAgICAgaWYgKChlcnIgPSBtcF9pbml0KCZ6ZXJvKSkgIT0gQ1JZUFRfT0spIHsgCisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICAgICAvKiBpdCdzIGEgcHJpdmF0ZSBrZXkgKi8KKyAgICAgIGlmICgoZXJyID0gZGVyX2RlY29kZV9zZXF1ZW5jZV9tdWx0aShpbiwgaW5sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIHplcm8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+TiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+ZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5wLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPnEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9JTlRFR0VSLCAxVUwsIGtleS0+ZFAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5kUSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5xUCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0VPTCwgICAgIDBVTCwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICBtcF9jbGVhcih6ZXJvKTsKKyAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgIH0KKyAgICAgIG1wX2NsZWFyKHplcm8pOworICAgICAga2V5LT50eXBlID0gUEtfUFJJVkFURTsKKyAgIH0gZWxzZSBpZiAobXBfY21wX2Qoa2V5LT5OLCAxKSA9PSBMVENfTVBfRVEpIHsKKyAgICAgIC8qIHdlIGRvbid0IHN1cHBvcnQgbXVsdGktcHJpbWUgUlNBICovCisgICAgICBlcnIgPSBDUllQVF9QS19JTlZBTElEX1RZUEU7CisgICAgICBnb3RvIExCTF9FUlI7CisgICB9IGVsc2UgeworICAgICAgLyogaXQncyBhIHB1YmxpYyBrZXkgYW5kIHdlIGxhY2sgZSAqLworICAgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlX211bHRpKGluLCBpbmxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFRDX0FTTjFfSU5URUdFUiwgMVVMLCBrZXktPk4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUQ19BU04xX0lOVEVHRVIsIDFVTCwga2V5LT5lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVENfQVNOMV9FT0wsICAgICAwVUwsIE5VTEwpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgICAga2V5LT50eXBlID0gUEtfUFVCTElDOworICAgfQorICAgcmV0dXJuIENSWVBUX09LOworTEJMX0VSUjoKKyAgIG1wX2NsZWFyX211bHRpKGtleS0+ZCwgIGtleS0+ZSwga2V5LT5OLCBrZXktPmRRLCBrZXktPmRQLCBrZXktPnFQLCBrZXktPnAsIGtleS0+cSwgTlVMTCk7CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYgLyogTVJTQSAqLworCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX2ltcG9ydC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIxICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA0IDIyOjIzOjI3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX21ha2Vfa2V5LmMgYi9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9tYWtlX2tleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMmEyOWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9tYWtlX2tleS5jCkBAIC0wLDAgKzEsMTEyIEBACisvKiBMaWJUb21DcnlwdCwgbW9kdWxhciBjcnlwdG9ncmFwaGljIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tQ3J5cHQgaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgdmFyaW91cyBjcnlwdG9ncmFwaGljCisgKiBhbGdvcml0aG1zIGluIGEgaGlnaGx5IG1vZHVsYXIgYW5kIGZsZXhpYmxlIG1hbm5lci4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgInRvbWNyeXB0LmgiCisKKy8qKgorICBAZmlsZSByc2FfbWFrZV9rZXkuYworICBSU0Ega2V5IGdlbmVyYXRpb24sIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgTVJTQQorCisvKiogCisgICBDcmVhdGUgYW4gUlNBIGtleQorICAgQHBhcmFtIHBybmcgICAgIEFuIGFjdGl2ZSBQUk5HIHN0YXRlCisgICBAcGFyYW0gd3BybmcgICAgVGhlIGluZGV4IG9mIHRoZSBQUk5HIGRlc2lyZWQKKyAgIEBwYXJhbSBzaXplICAgICBUaGUgc2l6ZSBvZiB0aGUgbW9kdWx1cyAoa2V5IHNpemUpIGRlc2lyZWQgKG9jdGV0cykKKyAgIEBwYXJhbSBlICAgICAgICBUaGUgImUiIHZhbHVlIChwdWJsaWMga2V5KS4gIGU9PTY1NTM3IGlzIGEgZ29vZCBjaG9pY2UKKyAgIEBwYXJhbSBrZXkgICAgICBbb3V0XSBEZXN0aW5hdGlvbiBvZiBhIG5ld2x5IGNyZWF0ZWQgcHJpdmF0ZSBrZXkgcGFpcgorICAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCB1cG9uIGVycm9yIGFsbCBhbGxvY2F0ZWQgcmFtIGlzIGZyZWVkCisqLworaW50IHJzYV9tYWtlX2tleShwcm5nX3N0YXRlICpwcm5nLCBpbnQgd3BybmcsIGludCBzaXplLCBsb25nIGUsIHJzYV9rZXkgKmtleSkKK3sKKyAgIHZvaWQgKnAsICpxLCAqdG1wMSwgKnRtcDIsICp0bXAzOworICAgaW50ICAgIGVycjsKKworICAgTFRDX0FSR0NISyhsdGNfbXAubmFtZSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoa2V5ICAgICAgICAgIT0gTlVMTCk7CisKKyAgIGlmICgoc2l6ZSA8IChNSU5fUlNBX1NJWkUvOCkpIHx8IChzaXplID4gKE1BWF9SU0FfU0laRS84KSkpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICB9CisKKyAgIGlmICgoZSA8IDMpIHx8ICgoZSAmIDEpID09IDApKSB7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIGlmICgoZXJyID0gcHJuZ19pc192YWxpZCh3cHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJnAsICZxLCAmdG1wMSwgJnRtcDIsICZ0bXAzLCBOVUxMKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIG1ha2UgcHJpbWVzIHAgYW5kIHEgKG9wdGltaXphdGlvbiBwcm92aWRlZCBieSBXYXluZSBTY290dCkgKi8KKyAgIGlmICgoZXJyID0gbXBfc2V0X2ludCh0bXAzLCBlKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0gIC8qIHRtcDMgPSBlICovCisKKyAgIC8qIG1ha2UgcHJpbWUgInAiICovCisgICBkbyB7CisgICAgICAgaWYgKChlcnIgPSByYW5kX3ByaW1lKCBwLCBzaXplLzIsIHBybmcsIHdwcm5nKSkgIT0gQ1JZUFRfT0spICB7IGdvdG8gZXJya2V5OyB9CisgICAgICAgaWYgKChlcnIgPSBtcF9zdWJfZCggcCwgMSwgIHRtcDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9ICAvKiB0bXAxID0gcC0xICovCisgICAgICAgaWYgKChlcnIgPSBtcF9nY2QoIHRtcDEsICB0bXAzLCAgdG1wMikpICE9IENSWVBUX09LKSAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9ICAvKiB0bXAyID0gZ2NkKHAtMSwgZSkgKi8KKyAgIH0gd2hpbGUgKG1wX2NtcF9kKCB0bXAyLCAxKSAhPSAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoaWxlIGUgZGl2aWRlcyBwLTEgKi8KKworICAgLyogbWFrZSBwcmltZSAicSIgKi8KKyAgIGRvIHsKKyAgICAgICBpZiAoKGVyciA9IHJhbmRfcHJpbWUoIHEsIHNpemUvMiwgcHJuZywgd3BybmcpKSAhPSBDUllQVF9PSykgIHsgZ290byBlcnJrZXk7IH0KKyAgICAgICBpZiAoKGVyciA9IG1wX3N1Yl9kKCBxLCAxLCAgdG1wMSkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0gLyogdG1wMSA9IHEtMSAqLworICAgICAgIGlmICgoZXJyID0gbXBfZ2NkKCB0bXAxLCAgdG1wMywgIHRtcDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgeyBnb3RvIGVycmtleTsgfSAvKiB0bXAyID0gZ2NkKHEtMSwgZSkgKi8KKyAgIH0gd2hpbGUgKG1wX2NtcF9kKCB0bXAyLCAxKSAhPSAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2hpbGUgZSBkaXZpZGVzIHEtMSAqLworCisgICAvKiB0bXAxID0gbGNtKHAtMSwgcS0xKSAqLworICAgaWYgKChlcnIgPSBtcF9zdWJfZCggcCwgMSwgIHRtcDIpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycmtleTsgfSAvKiB0bXAyID0gcC0xICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRtcDEgPSBxLTEgKHByZXZpb3VzIGRvL3doaWxlIGxvb3ApICovCisgICBpZiAoKGVyciA9IG1wX2xjbSggdG1wMSwgIHRtcDIsICB0bXAxKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9IC8qIHRtcDEgPSBsY20ocC0xLCBxLTEpICovCisKKyAgIC8qIG1ha2Uga2V5ICovCisgICBpZiAoKGVyciA9IG1wX2luaXRfbXVsdGkoJmtleS0+ZSwgJmtleS0+ZCwgJmtleS0+TiwgJmtleS0+ZFEsICZrZXktPmRQLCAma2V5LT5xUCwgJmtleS0+cCwgJmtleS0+cSwgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICBnb3RvIGVycmtleTsKKyAgIH0KKworICAgaWYgKChlcnIgPSBtcF9zZXRfaW50KCBrZXktPmUsIGUpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9IC8qIGtleS0+ZSA9ICBlICovCisgICBpZiAoKGVyciA9IG1wX2ludm1vZCgga2V5LT5lLCAgdG1wMSwgIGtleS0+ZCkpICE9IENSWVBUX09LKSAgICAgICAgIHsgZ290byBlcnJrZXk7IH0gLyoga2V5LT5kID0gMS9lIG1vZCBsY20ocC0xLHEtMSkgKi8KKyAgIGlmICgoZXJyID0gbXBfbXVsKCBwLCAgcSwgIGtleS0+TikpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycmtleTsgfSAvKiBrZXktPk4gPSBwcSAqLworCisgICAvKiBvcHRpbWl6ZSBmb3IgQ1JUIG5vdyAqLworICAgLyogZmluZCBkIG1vZCBxLTEgYW5kIGQgbW9kIHAtMSAqLworICAgaWYgKChlcnIgPSBtcF9zdWJfZCggcCwgMSwgIHRtcDEpKSAhPSBDUllQVF9PSykgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9IC8qIHRtcDEgPSBxLTEgKi8KKyAgIGlmICgoZXJyID0gbXBfc3ViX2QoIHEsIDEsICB0bXAyKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycmtleTsgfSAvKiB0bXAyID0gcC0xICovCisgICBpZiAoKGVyciA9IG1wX21vZCgga2V5LT5kLCAgdG1wMSwgIGtleS0+ZFApKSAhPSBDUllQVF9PSykgICAgICAgICAgIHsgZ290byBlcnJrZXk7IH0gLyogZFAgPSBkIG1vZCBwLTEgKi8KKyAgIGlmICgoZXJyID0gbXBfbW9kKCBrZXktPmQsICB0bXAyLCAga2V5LT5kUSkpICE9IENSWVBUX09LKSAgICAgICAgICAgeyBnb3RvIGVycmtleTsgfSAvKiBkUSA9IGQgbW9kIHEtMSAqLworICAgaWYgKChlcnIgPSBtcF9pbnZtb2QoIHEsICBwLCAga2V5LT5xUCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9IC8qIHFQID0gMS9xIG1vZCBwICovCisKKyAgIGlmICgoZXJyID0gbXBfY29weSggcCwgIGtleS0+cCkpICE9IENSWVBUX09LKSAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycmtleTsgfQorICAgaWYgKChlcnIgPSBtcF9jb3B5KCBxLCAga2V5LT5xKSkgIT0gQ1JZUFRfT0spICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJya2V5OyB9CisKKyAgIC8qIHNldCBrZXkgdHlwZSAoaW4gdGhpcyBjYXNlIGl0J3MgQ1JUIG9wdGltaXplZCkgKi8KKyAgIGtleS0+dHlwZSA9IFBLX1BSSVZBVEU7CisKKyAgIC8qIHJldHVybiBvayBhbmQgZnJlZSB0ZW1wcyAqLworICAgZXJyICAgICAgID0gQ1JZUFRfT0s7CisgICBnb3RvIGNsZWFudXA7CitlcnJrZXk6CisgICBtcF9jbGVhcl9tdWx0aShrZXktPmQsIGtleS0+ZSwga2V5LT5OLCBrZXktPmRRLCBrZXktPmRQLCBrZXktPnFQLCBrZXktPnAsIGtleS0+cSwgTlVMTCk7CitjbGVhbnVwOgorICAgbXBfY2xlYXJfbXVsdGkodG1wMywgdG1wMiwgdG1wMSwgcCwgcSwgTlVMTCk7CisgICByZXR1cm4gZXJyOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL3JzYS9yc2FfbWFrZV9rZXkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xNCAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAyMjoyMzoyNyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9zaWduX2hhc2guYyBiL2xpYnRvbWNyeXB0L3NyYy9way9yc2EvcnNhX3NpZ25faGFzaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMGE5N2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV9zaWduX2hhc2guYwpAQCAtMCwwICsxLDEzNCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgcnNhX3NpZ25faGFzaC5jCisgIFJTQSBQS0NTICMxIHYxLjUgYW5kIHYyIFBTUyBzaWduIGhhc2gsIFRvbSBTdCBEZW5pcyBhbmQgQW5kcmVhcyBMYW5nZQorKi8KKworI2lmZGVmIE1SU0EKKworLyoqCisgIFBLQ1MgIzEgcGFkIHRoZW4gc2lnbgorICBAcGFyYW0gaW4gICAgICAgIFRoZSBoYXNoIHRvIHNpZ24KKyAgQHBhcmFtIGlubGVuICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIHRvIHNpZ24gKG9jdGV0cykKKyAgQHBhcmFtIG91dCAgICAgICBbb3V0XSBUaGUgc2lnbmF0dXJlCisgIEBwYXJhbSBvdXRsZW4gICAgW2luL291dF0gVGhlIG1heCBzaXplIGFuZCByZXN1bHRpbmcgc2l6ZSBvZiB0aGUgc2lnbmF0dXJlCisgIEBwYXJhbSBwYWRkaW5nICAgVHlwZSBvZiBwYWRkaW5nIChMVENfUEtDU18xX1BTUyBvciBMVENfUEtDU18xX1YxXzUpCisgIEBwYXJhbSBwcm5nICAgICAgQW4gYWN0aXZlIFBSTkcgc3RhdGUKKyAgQHBhcmFtIHBybmdfaWR4ICBUaGUgaW5kZXggb2YgdGhlIFBSTkcgZGVzaXJlZAorICBAcGFyYW0gaGFzaF9pZHggIFRoZSBpbmRleCBvZiB0aGUgaGFzaCBkZXNpcmVkCisgIEBwYXJhbSBzYWx0bGVuICAgVGhlIGxlbmd0aCBvZiB0aGUgc2FsdCBkZXNpcmVkIChvY3RldHMpCisgIEBwYXJhbSBrZXkgICAgICAgVGhlIHByaXZhdGUgUlNBIGtleSB0byB1c2UKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLworaW50IHJzYV9zaWduX2hhc2hfZXgoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sICAgICAgIHVuc2lnbmVkIGxvbmcgIGlubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqb3V0LCAgICAgIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgIHBhZGRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm5nX3N0YXRlICAgICpwcm5nLCAgICAgaW50ICAgICAgICAgICAgcHJuZ19pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBoYXNoX2lkeCwgdW5zaWduZWQgbG9uZyAgc2FsdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzYV9rZXkgKmtleSkKK3sKKyAgIHVuc2lnbmVkIGxvbmcgbW9kdWx1c19iaXRsZW4sIG1vZHVsdXNfYnl0ZWxlbiwgeCwgeTsKKyAgIGludCAgICAgICAgICAgZXJyOworCisgICBMVENfQVJHQ0hLKGluICAgICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKGtleSAgICAgICE9IE5VTEwpOworCisgICAvKiB2YWxpZCBwYWRkaW5nPyAqLworICAgaWYgKChwYWRkaW5nICE9IExUQ19QS0NTXzFfVjFfNSkgJiYgKHBhZGRpbmcgIT0gTFRDX1BLQ1NfMV9QU1MpKSB7CisgICAgIHJldHVybiBDUllQVF9QS19JTlZBTElEX1BBRERJTkc7CisgICB9CisKKyAgIGlmIChwYWRkaW5nID09IExUQ19QS0NTXzFfUFNTKSB7CisgICAgIC8qIHZhbGlkIHBybmcgYW5kIGhhc2ggPyAqLworICAgICBpZiAoKGVyciA9IHBybmdfaXNfdmFsaWQocHJuZ19pZHgpKSAhPSBDUllQVF9PSykgeworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisgICAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChoYXNoX2lkeCkpICE9IENSWVBUX09LKSB7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgIH0KKyAgIH0KKworICAgLyogZ2V0IG1vZHVsdXMgbGVuIGluIGJpdHMgKi8KKyAgIG1vZHVsdXNfYml0bGVuID0gbXBfY291bnRfYml0cygoa2V5LT5OKSk7CisKKyAgLyogb3V0bGVuIG11c3QgYmUgYXQgbGVhc3QgdGhlIHNpemUgb2YgdGhlIG1vZHVsdXMgKi8KKyAgbW9kdWx1c19ieXRlbGVuID0gbXBfdW5zaWduZWRfYmluX3NpemUoKGtleS0+TikpOworICBpZiAobW9kdWx1c19ieXRlbGVuID4gKm91dGxlbikgeworICAgICAqb3V0bGVuID0gbW9kdWx1c19ieXRlbGVuOworICAgICByZXR1cm4gQ1JZUFRfQlVGRkVSX09WRVJGTE9XOworICB9CisKKyAgaWYgKHBhZGRpbmcgPT0gTFRDX1BLQ1NfMV9QU1MpIHsKKyAgICAvKiBQU1MgcGFkIHRoZSBrZXkgKi8KKyAgICB4ID0gKm91dGxlbjsKKyAgICBpZiAoKGVyciA9IHBrY3NfMV9wc3NfZW5jb2RlKGluLCBpbmxlbiwgc2FsdGxlbiwgcHJuZywgcHJuZ19pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2lkeCwgbW9kdWx1c19iaXRsZW4sIG91dCwgJngpKSAhPSBDUllQVF9PSykgeworICAgICAgIHJldHVybiBlcnI7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIFBLQ1MgIzEgdjEuNSBwYWQgdGhlIGhhc2ggKi8KKyAgICB1bnNpZ25lZCBjaGFyICp0bXBpbjsKKyAgICBsdGNfYXNuMV9saXN0IGRpZ2VzdGluZm9bMl0sIHNpZ2luZm9bMl07CisKKyAgICAvKiBub3QgYWxsIGhhc2hlcyBoYXZlIE9JRHMuLi4gc28gc2FkICovCisgICAgaWYgKGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0uT0lEbGVuID09IDApIHsKKyAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICAgfQorCisgICAgLyogY29uc3RydWN0IHRoZSBTRVFVRU5DRSAKKyAgICAgIFNFUVVFTkNFIHsKKyAgICAgICAgIFNFUVVFTkNFIHtoYXNob2lkIE9JRAorICAgICAgICAgICAgICAgICAgIGJsYWggICAgTlVMTAorICAgICAgICAgfQorICAgICAgICAgaGFzaCAgICBPQ1RFVCBTVFJJTkcgCisgICAgICB9CisgICAqLworICAgIExUQ19TRVRfQVNOMShkaWdlc3RpbmZvLCAwLCBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUiwgaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5PSUQsIGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0uT0lEbGVuKTsKKyAgICBMVENfU0VUX0FTTjEoZGlnZXN0aW5mbywgMSwgTFRDX0FTTjFfTlVMTCwgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICBMVENfU0VUX0FTTjEoc2lnaW5mbywgICAgMCwgTFRDX0FTTjFfU0VRVUVOQ0UsICAgICAgICAgIGRpZ2VzdGluZm8sICAgICAgICAgICAgICAgICAgICAyKTsKKyAgICBMVENfU0VUX0FTTjEoc2lnaW5mbywgICAgMSwgTFRDX0FTTjFfT0NURVRfU1RSSU5HLCAgICAgIGluLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxlbik7CisKKyAgICAvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBlbmNvZGluZyAqLworICAgIHkgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPk4pOworICAgIHRtcGluID0gWE1BTExPQyh5KTsKKyAgICBpZiAodG1waW4gPT0gTlVMTCkgeworICAgICAgIHJldHVybiBDUllQVF9NRU07CisgICAgfQorCisgICAgaWYgKChlcnIgPSBkZXJfZW5jb2RlX3NlcXVlbmNlKHNpZ2luZm8sIDIsIHRtcGluLCAmeSkpICE9IENSWVBUX09LKSB7CisgICAgICAgWEZSRUUodG1waW4pOworICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgeCA9ICpvdXRsZW47CisgICAgaWYgKChlcnIgPSBwa2NzXzFfdjFfNV9lbmNvZGUodG1waW4sIHksIExUQ19QS0NTXzFfRU1TQSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bHVzX2JpdGxlbiwgTlVMTCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQsICZ4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIFhGUkVFKHRtcGluKTsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorICAgIFhGUkVFKHRtcGluKTsKKyAgfQorCisgIC8qIFJTQSBlbmNvZGUgaXQgKi8KKyAgcmV0dXJuIGx0Y19tcC5yc2FfbWUob3V0LCB4LCBvdXQsIG91dGxlbiwgUEtfUFJJVkFURSwga2V5KTsKK30KKworI2VuZGlmIC8qIE1SU0EgKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL3JzYS9yc2Ffc2lnbl9oYXNoLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuOSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8wOSAyMzoxNTozOSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcGsvcnNhL3JzYV92ZXJpZnlfaGFzaC5jIGIvbGlidG9tY3J5cHQvc3JjL3BrL3JzYS9yc2FfdmVyaWZ5X2hhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjYxMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BrL3JzYS9yc2FfdmVyaWZ5X2hhc2guYwpAQCAtMCwwICsxLDE2NyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgcnNhX3ZlcmlmeV9oYXNoLmMKKyAgUlNBIFBLQ1MgIzEgdjEuNSBvciB2MiBQU1Mgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiwgVG9tIFN0IERlbmlzIGFuZCBBbmRyZWFzIExhbmdlCisqLworCisjaWZkZWYgTVJTQQorCisvKioKKyAgUEtDUyAjMSBkZS1zaWduIHRoZW4gdjEuNSBvciBQU1MgZGVwYWQKKyAgQHBhcmFtIHNpZyAgICAgICAgICAgICAgVGhlIHNpZ25hdHVyZSBkYXRhCisgIEBwYXJhbSBzaWdsZW4gICAgICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHNpZ25hdHVyZSBkYXRhIChvY3RldHMpCisgIEBwYXJhbSBoYXNoICAgICAgICAgICAgIFRoZSBoYXNoIG9mIHRoZSBtZXNzYWdlIHRoYXQgd2FzIHNpZ25lZAorICBAcGFyYW0gaGFzaGxlbiAgICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBoYXNoIG9mIHRoZSBtZXNzYWdlIHRoYXQgd2FzIHNpZ25lZCAob2N0ZXRzKQorICBAcGFyYW0gcGFkZGluZyAgICAgICAgICBUeXBlIG9mIHBhZGRpbmcgKExUQ19QS0NTXzFfUFNTIG9yIExUQ19QS0NTXzFfVjFfNSkKKyAgQHBhcmFtIGhhc2hfaWR4ICAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBkZXNpcmVkIGhhc2gKKyAgQHBhcmFtIHNhbHRsZW4gICAgICAgICAgVGhlIGxlbmd0aCBvZiB0aGUgc2FsdCB1c2VkIGR1cmluZyBzaWduYXR1cmUKKyAgQHBhcmFtIHN0YXQgICAgICAgICAgICAgW291dF0gVGhlIHJlc3VsdCBvZiB0aGUgc2lnbmF0dXJlIGNvbXBhcmlzb24sIDE9PXZhbGlkLCAwPT1pbnZhbGlkCisgIEBwYXJhbSBrZXkgICAgICAgICAgICAgIFRoZSBwdWJsaWMgUlNBIGtleSBjb3JyZXNwb25kaW5nIHRvIHRoZSBrZXkgdGhhdCBwZXJmb3JtZWQgdGhlIHNpZ25hdHVyZQorICBAcmV0dXJuIENSWVBUX09LIG9uIHN1Y2Nlc3MgKGV2ZW4gaWYgdGhlIHNpZ25hdHVyZSBpcyBpbnZhbGlkKQorKi8KK2ludCByc2FfdmVyaWZ5X2hhc2hfZXgoY29uc3QgdW5zaWduZWQgY2hhciAqc2lnLCAgICAgIHVuc2lnbmVkIGxvbmcgc2lnbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoYXNoLCAgICAgdW5zaWduZWQgbG9uZyBoYXNobGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBwYWRkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICBoYXNoX2lkeCwgdW5zaWduZWQgbG9uZyBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICpzdGF0LCAgICAgcnNhX2tleSAgICAgICprZXkpCit7CisgIHVuc2lnbmVkIGxvbmcgbW9kdWx1c19iaXRsZW4sIG1vZHVsdXNfYnl0ZWxlbiwgeDsKKyAgaW50ICAgICAgICAgICBlcnI7CisgIHVuc2lnbmVkIGNoYXIgKnRtcGJ1ZjsKKworICBMVENfQVJHQ0hLKGhhc2ggICE9IE5VTEwpOworICBMVENfQVJHQ0hLKHNpZyAgICE9IE5VTEwpOworICBMVENfQVJHQ0hLKHN0YXQgICE9IE5VTEwpOworICBMVENfQVJHQ0hLKGtleSAgICE9IE5VTEwpOworCisgIC8qIGRlZmF1bHQgdG8gaW52YWxpZCAqLworICAqc3RhdCA9IDA7CisKKyAgLyogdmFsaWQgcGFkZGluZz8gKi8KKworICBpZiAoKHBhZGRpbmcgIT0gTFRDX1BLQ1NfMV9WMV81KSAmJgorICAgICAgKHBhZGRpbmcgIT0gTFRDX1BLQ1NfMV9QU1MpKSB7CisgICAgcmV0dXJuIENSWVBUX1BLX0lOVkFMSURfUEFERElORzsKKyAgfQorCisgIGlmIChwYWRkaW5nID09IExUQ19QS0NTXzFfUFNTKSB7CisgICAgLyogdmFsaWQgaGFzaCA/ICovCisgICAgaWYgKChlcnIgPSBoYXNoX2lzX3ZhbGlkKGhhc2hfaWR4KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgfQorCisgIC8qIGdldCBtb2R1bHVzIGxlbiBpbiBiaXRzICovCisgIG1vZHVsdXNfYml0bGVuID0gbXBfY291bnRfYml0cyggKGtleS0+TikpOworCisgIC8qIG91dGxlbiBtdXN0IGJlIGF0IGxlYXN0IHRoZSBzaXplIG9mIHRoZSBtb2R1bHVzICovCisgIG1vZHVsdXNfYnl0ZWxlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKCAoa2V5LT5OKSk7CisgIGlmIChtb2R1bHVzX2J5dGVsZW4gIT0gc2lnbGVuKSB7CisgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BBQ0tFVDsKKyAgfQorCisgIC8qIGFsbG9jYXRlIHRlbXAgYnVmZmVyIGZvciBkZWNvZGVkIHNpZyAqLworICB0bXBidWYgPSBYTUFMTE9DKHNpZ2xlbik7CisgIGlmICh0bXBidWYgPT0gTlVMTCkgeworICAgICByZXR1cm4gQ1JZUFRfTUVNOworICB9CisKKyAgLyogUlNBIGRlY29kZSBpdCAgKi8KKyAgeCA9IHNpZ2xlbjsKKyAgaWYgKChlcnIgPSBsdGNfbXAucnNhX21lKHNpZywgc2lnbGVuLCB0bXBidWYsICZ4LCBQS19QVUJMSUMsIGtleSkpICE9IENSWVBUX09LKSB7CisgICAgIFhGUkVFKHRtcGJ1Zik7CisgICAgIHJldHVybiBlcnI7CisgIH0KKworICAvKiBtYWtlIHN1cmUgdGhlIG91dHB1dCBpcyB0aGUgcmlnaHQgc2l6ZSAqLworICBpZiAoeCAhPSBzaWdsZW4pIHsKKyAgICAgWEZSRUUodG1wYnVmKTsKKyAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfUEFDS0VUOworICB9CisKKyAgaWYgKHBhZGRpbmcgPT0gTFRDX1BLQ1NfMV9QU1MpIHsKKyAgICAvKiBQU1MgZGVjb2RlIGFuZCB2ZXJpZnkgaXQgKi8KKyAgICBlcnIgPSBwa2NzXzFfcHNzX2RlY29kZShoYXNoLCBoYXNobGVuLCB0bXBidWYsIHgsIHNhbHRsZW4sIGhhc2hfaWR4LCBtb2R1bHVzX2JpdGxlbiwgc3RhdCk7CisgIH0gZWxzZSB7CisgICAgLyogUEtDUyAjMSB2MS41IGRlY29kZSBpdCAqLworICAgIHVuc2lnbmVkIGNoYXIgKm91dDsKKyAgICB1bnNpZ25lZCBsb25nIG91dGxlbiwgbG9pZFsxNl07CisgICAgaW50ICAgICAgICAgICBkZWNvZGVkOworICAgIGx0Y19hc24xX2xpc3QgZGlnZXN0aW5mb1syXSwgc2lnaW5mb1syXTsKKworICAgIC8qIG5vdCBhbGwgaGFzaGVzIGhhdmUgT0lEcy4uLiBzbyBzYWQgKi8KKyAgICBpZiAoaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5PSURsZW4gPT0gMCkgeworICAgICAgIGVyciA9IENSWVBUX0lOVkFMSURfQVJHOworICAgICAgIGdvdG8gYmFpbF8yOworICAgIH0KKworICAgIC8qIGFsbG9jYXRlIHRlbXAgYnVmZmVyIGZvciBkZWNvZGVkIGhhc2ggKi8KKyAgICBvdXRsZW4gPSAoKG1vZHVsdXNfYml0bGVuID4+IDMpICsgKG1vZHVsdXNfYml0bGVuICYgNyA/IDEgOiAwKSkgLSAzOworICAgIG91dCAgICA9IFhNQUxMT0Mob3V0bGVuKTsKKyAgICBpZiAob3V0ID09IE5VTEwpIHsKKyAgICAgIGVyciA9IENSWVBUX01FTTsKKyAgICAgIGdvdG8gYmFpbF8yOworICAgIH0KKworICAgIGlmICgoZXJyID0gcGtjc18xX3YxXzVfZGVjb2RlKHRtcGJ1ZiwgeCwgTFRDX1BLQ1NfMV9FTVNBLCBtb2R1bHVzX2JpdGxlbiwgb3V0LCAmb3V0bGVuLCAmZGVjb2RlZCkpICE9IENSWVBUX09LKSB7CisgICAgICBYRlJFRShvdXQpOyAgICAgICAKKyAgICAgIGdvdG8gYmFpbF8yOworICAgIH0KKworICAgIC8qIG5vdyB3ZSBtdXN0IGRlY29kZSBvdXRbMC4uLm91dGxlbi0xXSB1c2luZyBBU04uMSwgdGVzdCB0aGUgT0lEIGFuZCB0aGVuIHRlc3QgdGhlIGhhc2ggKi8KKyAgICAvKiBjb25zdHJ1Y3QgdGhlIFNFUVVFTkNFIAorICAgICAgU0VRVUVOQ0UgeworICAgICAgICAgU0VRVUVOQ0Uge2hhc2hvaWQgT0lECisgICAgICAgICAgICAgICAgICAgYmxhaCAgICBOVUxMCisgICAgICAgICB9CisgICAgICAgICBoYXNoICAgIE9DVEVUIFNUUklORyAKKyAgICAgIH0KKyAgICovCisgICAgTFRDX1NFVF9BU04xKGRpZ2VzdGluZm8sIDAsIExUQ19BU04xX09CSkVDVF9JREVOVElGSUVSLCBsb2lkLCBzaXplb2YobG9pZCkvc2l6ZW9mKGxvaWRbMF0pKTsKKyAgICBMVENfU0VUX0FTTjEoZGlnZXN0aW5mbywgMSwgTFRDX0FTTjFfTlVMTCwgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICBMVENfU0VUX0FTTjEoc2lnaW5mbywgICAgMCwgTFRDX0FTTjFfU0VRVUVOQ0UsICAgICAgICAgIGRpZ2VzdGluZm8sICAgICAgICAgICAgICAgICAgICAyKTsKKyAgICBMVENfU0VUX0FTTjEoc2lnaW5mbywgICAgMSwgTFRDX0FTTjFfT0NURVRfU1RSSU5HLCAgICAgIHRtcGJ1ZiwgICAgICAgICAgICAgICAgICAgICAgICBzaWdsZW4pOworICAgCisgICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlKG91dCwgb3V0bGVuLCBzaWdpbmZvLCAyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICBYRlJFRShvdXQpOworICAgICAgIGdvdG8gYmFpbF8yOworICAgIH0KKworICAgIC8qIHRlc3QgT0lEICovCisgICAgaWYgKChkaWdlc3RpbmZvWzBdLnNpemUgPT0gaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5PSURsZW4pICYmCisgICAgICAgIChYTUVNQ01QKGRpZ2VzdGluZm9bMF0uZGF0YSwgaGFzaF9kZXNjcmlwdG9yW2hhc2hfaWR4XS5PSUQsIHNpemVvZih1bnNpZ25lZCBsb25nKSAqIGhhc2hfZGVzY3JpcHRvcltoYXNoX2lkeF0uT0lEbGVuKSA9PSAwKSAmJgorICAgICAgICAoc2lnaW5mb1sxXS5zaXplID09IGhhc2hsZW4pICYmCisgICAgICAgIChYTUVNQ01QKHNpZ2luZm9bMV0uZGF0YSwgaGFzaCwgaGFzaGxlbikgPT0gMCkpIHsKKyAgICAgICAqc3RhdCA9IDE7CisgICAgfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICAgemVyb21lbShvdXQsIG91dGxlbik7CisjZW5kaWYKKyAgICBYRlJFRShvdXQpOworICB9CisKK2JhaWxfMjoKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgemVyb21lbSh0bXBidWYsIHNpZ2xlbik7CisjZW5kaWYKKyAgWEZSRUUodG1wYnVmKTsKKyAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmIC8qIE1SU0EgKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BrL3JzYS9yc2FfdmVyaWZ5X2hhc2guYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMSAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMzowOToyOCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcHJuZ3MvZm9ydHVuYS5jIGIvbGlidG9tY3J5cHQvc3JjL3BybmdzL2ZvcnR1bmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTlkYjUyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BybmdzL2ZvcnR1bmEuYwpAQCAtMCwwICsxLDQyNyBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgZm9ydHVuYS5jCisgIEZvcnR1bmEgUFJORywgVG9tIFN0IERlbmlzCisqLworICAKKy8qIEltcGxlbWVudGF0aW9uIG9mIEZvcnR1bmEgYnkgVG9tIFN0IERlbmlzIAorCitXZSBkZXZpYXRlIHNsaWdodGx5IGhlcmUgZm9yIHJlYXNvbnMgb2Ygc2ltcGxpY2l0eSBbYW5kIHRvIGZpdCBpbiB0aGUgQVBJXS4gIEZpcnN0IGFsbCAic291cmNlcyIKK2luIHRoZSBBZGRFbnRyb3B5IGZ1bmN0aW9uIGFyZSBmaXhlZCB0byAwLiAgU2Vjb25kIHNpbmNlIG5vIHJlbGlhYmxlIHRpbWVyIGlzIHByb3ZpZGVkIAord2UgcmVzZWVkIGF1dG9tYXRpY2FsbHkgd2hlbiBsZW4ocG9vbDApID49IDY0IG9yIGV2ZXJ5IEZPUlRVTkFfV0QgY2FsbHMgdG8gdGhlIHJlYWQgZnVuY3Rpb24gKi8KKworI2lmZGVmIEZPUlRVTkEgCisKKy8qIHJlcXVyaWVzIFNIQTI1NiBhbmQgQUVTICAqLworI2lmICEoZGVmaW5lZChSSUpOREFFTCkgJiYgZGVmaW5lZChTSEEyNTYpKQorICAgI2Vycm9yIEZPUlRVTkEgcmVxdWlyZXMgU0hBMjU2IGFuZCBSSUpOREFFTCAoQUVTKQorI2VuZGlmCisKKyNpZm5kZWYgRk9SVFVOQV9QT09MUworICAgI3dhcm5pbmcgRk9SVFVOQV9QT09MUyB3YXMgbm90IHByZXZpb3VzbHkgZGVmaW5lZCAob2xkIGhlYWRlcnM/KQorICAgI2RlZmluZSBGT1JUVU5BX1BPT0xTIDMyCisjZW5kaWYKKworI2lmIEZPUlRVTkFfUE9PTFMgPCA0IHx8IEZPUlRVTkFfUE9PTFMgPiAzMgorICAgI2Vycm9yIEZPUlRVTkFfUE9PTFMgbXVzdCBiZSBpbiBbNC4uMzJdCisjZW5kaWYKKworY29uc3Qgc3RydWN0IGx0Y19wcm5nX2Rlc2NyaXB0b3IgZm9ydHVuYV9kZXNjID0geworICAgICJmb3J0dW5hIiwgMTAyNCwKKyAgICAmZm9ydHVuYV9zdGFydCwKKyAgICAmZm9ydHVuYV9hZGRfZW50cm9weSwKKyAgICAmZm9ydHVuYV9yZWFkeSwKKyAgICAmZm9ydHVuYV9yZWFkLAorICAgICZmb3J0dW5hX2RvbmUsCisgICAgJmZvcnR1bmFfZXhwb3J0LAorICAgICZmb3J0dW5hX2ltcG9ydCwKKyAgICAmZm9ydHVuYV90ZXN0Cit9OworCisvKiB1cGRhdGUgdGhlIElWICovCitzdGF0aWMgdm9pZCBmb3J0dW5hX3VwZGF0ZV9pdihwcm5nX3N0YXRlICpwcm5nKQoreworICAgaW50ICAgICAgICAgICAgeDsKKyAgIHVuc2lnbmVkIGNoYXIgKklWOworICAgLyogdXBkYXRlIElWICovCisgICBJViA9IHBybmctPmZvcnR1bmEuSVY7CisgICBmb3IgKHggPSAwOyB4IDwgMTY7IHgrKykgeworICAgICAgSVZbeF0gPSAoSVZbeF0gKyAxKSAmIDI1NTsKKyAgICAgIGlmIChJVlt4XSAhPSAwKSBicmVhazsKKyAgIH0KK30KKworLyogcmVzZWVkIHRoZSBQUk5HICovCitzdGF0aWMgaW50IGZvcnR1bmFfcmVzZWVkKHBybmdfc3RhdGUgKnBybmcpCit7CisgICB1bnNpZ25lZCBjaGFyIHRtcFtNQVhCTE9DS1NJWkVdOworICAgaGFzaF9zdGF0ZSAgICBtZDsKKyAgIGludCAgICAgICAgICAgZXJyLCB4OworCisgICArK3BybmctPmZvcnR1bmEucmVzZXRfY250OworCisgICAvKiBuZXcgSyA9PSBTSEEyNTYoSyB8fCBzKSB3aGVyZSBzID09IFNIQTI1NihQMCkgfHwgU0hBMjU2KFAxKSAuLi4gKi8KKyAgIHNoYTI1Nl9pbml0KCZtZCk7CisgICBpZiAoKGVyciA9IHNoYTI1Nl9wcm9jZXNzKCZtZCwgcHJuZy0+Zm9ydHVuYS5LLCAzMikpICE9IENSWVBUX09LKSB7CisgICAgICBzaGEyNTZfZG9uZSgmbWQsIHRtcCk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBmb3IgKHggPSAwOyB4IDwgRk9SVFVOQV9QT09MUzsgeCsrKSB7CisgICAgICAgaWYgKHggPT0gMCB8fCAoKHBybmctPmZvcnR1bmEucmVzZXRfY250ID4+ICh4LTEpKSAmIDEpID09IDApIHsgCisgICAgICAgICAgLyogdGVybWluYXRlIHRoaXMgaGFzaCAqLworICAgICAgICAgIGlmICgoZXJyID0gc2hhMjU2X2RvbmUoJnBybmctPmZvcnR1bmEucG9vbFt4XSwgdG1wKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICBzaGEyNTZfZG9uZSgmbWQsIHRtcCk7CisgICAgICAgICAgICAgcmV0dXJuIGVycjsgCisgICAgICAgICAgfQorICAgICAgICAgIC8qIGFkZCBpdCB0byB0aGUgc3RyaW5nICovCisgICAgICAgICAgaWYgKChlcnIgPSBzaGEyNTZfcHJvY2VzcygmbWQsIHRtcCwgMzIpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHNoYTI1Nl9kb25lKCZtZCwgdG1wKTsKKyAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KKyAgICAgICAgICAvKiByZXNldCB0aGlzIHBvb2wgKi8KKyAgICAgICAgICBpZiAoKGVyciA9IHNoYTI1Nl9pbml0KCZwcm5nLT5mb3J0dW5hLnBvb2xbeF0pKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgIHNoYTI1Nl9kb25lKCZtZCwgdG1wKTsKKyAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAgIH0KKyAgICAgICB9IGVsc2UgeworICAgICAgICAgIGJyZWFrOworICAgICAgIH0KKyAgIH0KKworICAgLyogZmluaXNoIGtleSAqLworICAgaWYgKChlcnIgPSBzaGEyNTZfZG9uZSgmbWQsIHBybmctPmZvcnR1bmEuSykpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOyAKKyAgIH0KKyAgIGlmICgoZXJyID0gcmlqbmRhZWxfc2V0dXAocHJuZy0+Zm9ydHVuYS5LLCAzMiwgMCwgJnBybmctPmZvcnR1bmEuc2tleSkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgZm9ydHVuYV91cGRhdGVfaXYocHJuZyk7CisKKyAgIC8qIHJlc2V0IHBvb2wgbGVuICovCisgICBwcm5nLT5mb3J0dW5hLnBvb2wwX2xlbiA9IDA7CisgICBwcm5nLT5mb3J0dW5hLndkICAgICAgICA9IDA7CisKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbSgmbWQsIHNpemVvZihtZCkpOworICAgemVyb21lbSh0bXAsIHNpemVvZih0bXApKTsKKyNlbmRpZgorCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBTdGFydCB0aGUgUFJORworICBAcGFyYW0gcHJuZyAgICAgW291dF0gVGhlIFBSTkcgc3RhdGUgdG8gaW5pdGlhbGl6ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAKK2ludCBmb3J0dW5hX3N0YXJ0KHBybmdfc3RhdGUgKnBybmcpCit7CisgICBpbnQgZXJyLCB4LCB5OworICAgdW5zaWduZWQgY2hhciB0bXBbTUFYQkxPQ0tTSVpFXTsKKworICAgTFRDX0FSR0NISyhwcm5nICE9IE5VTEwpOworICAgCisgICAvKiBpbml0aWFsaXplIHRoZSBwb29scyAqLworICAgZm9yICh4ID0gMDsgeCA8IEZPUlRVTkFfUE9PTFM7IHgrKykgeworICAgICAgIGlmICgoZXJyID0gc2hhMjU2X2luaXQoJnBybmctPmZvcnR1bmEucG9vbFt4XSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IHg7IHkrKykgeworICAgICAgICAgICAgICBzaGEyNTZfZG9uZSgmcHJuZy0+Zm9ydHVuYS5wb29sW3ldLCB0bXApOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgIH0KKyAgIH0KKyAgIHBybmctPmZvcnR1bmEucG9vbF9pZHggPSBwcm5nLT5mb3J0dW5hLnBvb2wwX2xlbiA9IHBybmctPmZvcnR1bmEud2QgPSAwOworICAgcHJuZy0+Zm9ydHVuYS5yZXNldF9jbnQgPSAwOworCisgICAvKiByZXNldCBidWZzICovCisgICB6ZXJvbWVtKHBybmctPmZvcnR1bmEuSywgMzIpOworICAgaWYgKChlcnIgPSByaWpuZGFlbF9zZXR1cChwcm5nLT5mb3J0dW5hLkssIDMyLCAwLCAmcHJuZy0+Zm9ydHVuYS5za2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGZvciAoeCA9IDA7IHggPCBGT1JUVU5BX1BPT0xTOyB4KyspIHsKKyAgICAgICAgICBzaGEyNTZfZG9uZSgmcHJuZy0+Zm9ydHVuYS5wb29sW3hdLCB0bXApOworICAgICAgfQorICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIHplcm9tZW0ocHJuZy0+Zm9ydHVuYS5JViwgMTYpOworICAgCisgICBMVENfTVVURVhfSU5JVCgmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spCisgICAKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIEFkZCBlbnRyb3B5IHRvIHRoZSBQUk5HIHN0YXRlCisgIEBwYXJhbSBpbiAgICAgICBUaGUgZGF0YSB0byBhZGQKKyAgQHBhcmFtIGlubGVuICAgIExlbmd0aCBvZiB0aGUgZGF0YSB0byBhZGQKKyAgQHBhcmFtIHBybmcgICAgIFBSTkcgc3RhdGUgdG8gdXBkYXRlCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IGZvcnR1bmFfYWRkX2VudHJvcHkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHBybmdfc3RhdGUgKnBybmcpCit7CisgICB1bnNpZ25lZCBjaGFyIHRtcFsyXTsKKyAgIGludCAgICAgICAgICAgZXJyOworCisgICBMVENfQVJHQ0hLKGluICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsocHJuZyAhPSBOVUxMKTsKKworICAgTFRDX01VVEVYX0xPQ0soJnBybmctPmZvcnR1bmEucHJuZ19sb2NrKTsKKworICAgLyogZW5zdXJlIGlubGVuIDw9IDMyICovCisgICBpZiAoaW5sZW4gPiAzMikgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spOworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICAvKiBhZGQgcyB8fCBsZW5ndGgoaW4pIHx8IGluIHRvIHBvb2xbcG9vbF9pZHhdICovCisgICB0bXBbMF0gPSAwOworICAgdG1wWzFdID0gKHVuc2lnbmVkIGNoYXIpaW5sZW47CisgICBpZiAoKGVyciA9IHNoYTI1Nl9wcm9jZXNzKCZwcm5nLT5mb3J0dW5hLnBvb2xbcHJuZy0+Zm9ydHVuYS5wb29sX2lkeF0sIHRtcCwgMikpICE9IENSWVBUX09LKSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT5mb3J0dW5hLnBybmdfbG9jayk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgaWYgKChlcnIgPSBzaGEyNTZfcHJvY2VzcygmcHJuZy0+Zm9ydHVuYS5wb29sW3BybmctPmZvcnR1bmEucG9vbF9pZHhdLCBpbiwgaW5sZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spOworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGlmIChwcm5nLT5mb3J0dW5hLnBvb2xfaWR4ID09IDApIHsKKyAgICAgIHBybmctPmZvcnR1bmEucG9vbDBfbGVuICs9IGlubGVuOworICAgfQorICAgaWYgKCsrKHBybmctPmZvcnR1bmEucG9vbF9pZHgpID09IEZPUlRVTkFfUE9PTFMpIHsKKyAgICAgIHBybmctPmZvcnR1bmEucG9vbF9pZHggPSAwOworICAgfQorCisgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT5mb3J0dW5hLnBybmdfbG9jayk7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBNYWtlIHRoZSBQUk5HIHJlYWR5IHRvIHJlYWQgZnJvbQorICBAcGFyYW0gcHJuZyAgIFRoZSBQUk5HIHRvIG1ha2UgYWN0aXZlCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IGZvcnR1bmFfcmVhZHkocHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgIHJldHVybiBmb3J0dW5hX3Jlc2VlZChwcm5nKTsKK30KKworLyoqCisgIFJlYWQgZnJvbSB0aGUgUFJORworICBAcGFyYW0gb3V0ICAgICAgRGVzdGluYXRpb24KKyAgQHBhcmFtIG91dGxlbiAgIExlbmd0aCBvZiBvdXRwdXQKKyAgQHBhcmFtIHBybmcgICAgIFRoZSBhY3RpdmUgUFJORyB0byByZWFkIGZyb20KKyAgQHJldHVybiBOdW1iZXIgb2Ygb2N0ZXRzIHJlYWQKKyovICAKK3Vuc2lnbmVkIGxvbmcgZm9ydHVuYV9yZWFkKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyBvdXRsZW4sIHBybmdfc3RhdGUgKnBybmcpCit7CisgICB1bnNpZ25lZCBjaGFyIHRtcFsxNl07CisgICBpbnQgICAgICAgICAgIGVycjsKKyAgIHVuc2lnbmVkIGxvbmcgdGxlbjsKKworICAgTFRDX0FSR0NISyhvdXQgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwcm5nICE9IE5VTEwpOworCisgICBMVENfTVVURVhfTE9DSygmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spOworCisgICAvKiBkbyB3ZSBoYXZlIHRvIHJlc2VlZD8gKi8KKyAgIGlmICgrK3BybmctPmZvcnR1bmEud2QgPT0gRk9SVFVOQV9XRCB8fCBwcm5nLT5mb3J0dW5hLnBvb2wwX2xlbiA+PSA2NCkgeworICAgICAgaWYgKChlcnIgPSBmb3J0dW5hX3Jlc2VlZChwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPmZvcnR1bmEucHJuZ19sb2NrKTsKKyAgICAgICAgIHJldHVybiAwOworICAgICAgfQorICAgfQorCisgICAvKiBub3cgZ2VuZXJhdGUgdGhlIGJsb2NrcyByZXF1aXJlZCAqLworICAgdGxlbiA9IG91dGxlbjsKKworICAgLyogaGFuZGxlIHdob2xlIGJsb2NrcyB3aXRob3V0IHRoZSBleHRyYSBYTUVNQ1BZICovCisgICB3aGlsZSAob3V0bGVuID49IDE2KSB7CisgICAgICAvKiBlbmNyeXB0IHRoZSBJViBhbmQgc3RvcmUgaXQgKi8KKyAgICAgIHJpam5kYWVsX2VjYl9lbmNyeXB0KHBybmctPmZvcnR1bmEuSVYsIG91dCwgJnBybmctPmZvcnR1bmEuc2tleSk7CisgICAgICBvdXQgKz0gMTY7CisgICAgICBvdXRsZW4gLT0gMTY7CisgICAgICBmb3J0dW5hX3VwZGF0ZV9pdihwcm5nKTsKKyAgIH0KKworICAgLyogbGVmdCBvdmVyIGJ5dGVzPyAqLworICAgaWYgKG91dGxlbiA+IDApIHsKKyAgICAgIHJpam5kYWVsX2VjYl9lbmNyeXB0KHBybmctPmZvcnR1bmEuSVYsIHRtcCwgJnBybmctPmZvcnR1bmEuc2tleSk7CisgICAgICBYTUVNQ1BZKG91dCwgdG1wLCBvdXRsZW4pOworICAgICAgZm9ydHVuYV91cGRhdGVfaXYocHJuZyk7CisgICB9CisgICAgICAgCisgICAvKiBnZW5lcmF0ZSBuZXcga2V5ICovCisgICByaWpuZGFlbF9lY2JfZW5jcnlwdChwcm5nLT5mb3J0dW5hLklWLCBwcm5nLT5mb3J0dW5hLksgICAsICZwcm5nLT5mb3J0dW5hLnNrZXkpOyBmb3J0dW5hX3VwZGF0ZV9pdihwcm5nKTsKKyAgIHJpam5kYWVsX2VjYl9lbmNyeXB0KHBybmctPmZvcnR1bmEuSVYsIHBybmctPmZvcnR1bmEuSysxNiwgJnBybmctPmZvcnR1bmEuc2tleSk7IGZvcnR1bmFfdXBkYXRlX2l2KHBybmcpOworICAgaWYgKChlcnIgPSByaWpuZGFlbF9zZXR1cChwcm5nLT5mb3J0dW5hLkssIDMyLCAwLCAmcHJuZy0+Zm9ydHVuYS5za2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPmZvcnR1bmEucHJuZ19sb2NrKTsKKyAgICAgIHJldHVybiAwOworICAgfQorCisjaWZkZWYgTFRDX0NMRUFOX1NUQUNLCisgICB6ZXJvbWVtKHRtcCwgc2l6ZW9mKHRtcCkpOworI2VuZGlmCisgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT5mb3J0dW5hLnBybmdfbG9jayk7CisgICByZXR1cm4gdGxlbjsKK30gICAKKworLyoqCisgIFRlcm1pbmF0ZSB0aGUgUFJORworICBAcGFyYW0gcHJuZyAgIFRoZSBQUk5HIHRvIHRlcm1pbmF0ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAKK2ludCBmb3J0dW5hX2RvbmUocHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgIGludCAgICAgICAgICAgZXJyLCB4OworICAgdW5zaWduZWQgY2hhciB0bXBbMzJdOworCisgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CisgICBMVENfTVVURVhfTE9DSygmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spOworCisgICAvKiB0ZXJtaW5hdGUgYWxsIHRoZSBoYXNoZXMgKi8KKyAgIGZvciAoeCA9IDA7IHggPCBGT1JUVU5BX1BPT0xTOyB4KyspIHsKKyAgICAgICBpZiAoKGVyciA9IHNoYTI1Nl9kb25lKCYocHJuZy0+Zm9ydHVuYS5wb29sW3hdKSwgdG1wKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT5mb3J0dW5hLnBybmdfbG9jayk7CisgICAgICAgICAgcmV0dXJuIGVycjsgCisgICAgICAgfQorICAgfQorICAgLyogY2FsbCBjaXBoZXIgZG9uZSB3aGVuIHdlIGludmVudCBvbmUgOy0pICovCisKKyNpZmRlZiBMVENfQ0xFQU5fU1RBQ0sKKyAgIHplcm9tZW0odG1wLCBzaXplb2YodG1wKSk7CisjZW5kaWYKKworICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgRXhwb3J0IHRoZSBQUk5HIHN0YXRlCisgIEBwYXJhbSBvdXQgICAgICAgW291dF0gRGVzdGluYXRpb24KKyAgQHBhcmFtIG91dGxlbiAgICBbaW4vb3V0XSBNYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHN0YXRlCisgIEBwYXJhbSBwcm5nICAgICAgVGhlIFBSTkcgdG8gZXhwb3J0CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IGZvcnR1bmFfZXhwb3J0KHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyAqb3V0bGVuLCBwcm5nX3N0YXRlICpwcm5nKQoreworICAgaW50ICAgICAgICAgeCwgZXJyOworICAgaGFzaF9zdGF0ZSAqbWQ7CisKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXRsZW4gIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHBybmcgICAhPSBOVUxMKTsKKworICAgTFRDX01VVEVYX0xPQ0soJnBybmctPmZvcnR1bmEucHJuZ19sb2NrKTsKKworICAgLyogd2UnbGwgd3JpdGUgYnl0ZXMgZm9yIHMmZydzICovCisgICBpZiAoKm91dGxlbiA8IDMyKkZPUlRVTkFfUE9PTFMpIHsKKyAgICAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPmZvcnR1bmEucHJuZ19sb2NrKTsKKyAgICAgICpvdXRsZW4gPSAzMipGT1JUVU5BX1BPT0xTOworICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgIH0KKworICAgbWQgPSBYTUFMTE9DKHNpemVvZihoYXNoX3N0YXRlKSk7CisgICBpZiAobWQgPT0gTlVMTCkgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+Zm9ydHVuYS5wcm5nX2xvY2spOworICAgICAgcmV0dXJuIENSWVBUX01FTTsKKyAgIH0KKworICAgLyogdG8gZW1pdCB0aGUgc3RhdGUgd2UgY29weSBlYWNoIHBvb2wsIHRlcm1pbmF0ZSBpdCB0aGVuIGhhc2ggaXQgYWdhaW4gc28gCisgICAgKiBhbiBhdHRhY2tlciB3aG8gc2VlcyB0aGUgc3RhdGUgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBQUk5HIAorICAgICovICAgCisgICBmb3IgKHggPSAwOyB4IDwgRk9SVFVOQV9QT09MUzsgeCsrKSB7CisgICAgICAvKiBjb3B5IHRoZSBQUk5HICovCisgICAgICBYTUVNQ1BZKG1kLCAmKHBybmctPmZvcnR1bmEucG9vbFt4XSksIHNpemVvZigqbWQpKTsKKworICAgICAgLyogdGVybWluYXRlIGl0ICovCisgICAgICBpZiAoKGVyciA9IHNoYTI1Nl9kb25lKG1kLCBvdXQreCozMikpICE9IENSWVBUX09LKSB7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisKKyAgICAgIC8qIG5vdyBoYXNoIGl0ICovCisgICAgICBpZiAoKGVyciA9IHNoYTI1Nl9pbml0KG1kKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgIH0KKyAgICAgIGlmICgoZXJyID0gc2hhMjU2X3Byb2Nlc3MobWQsIG91dCt4KjMyLCAzMikpICE9IENSWVBUX09LKSB7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICAgICBpZiAoKGVyciA9IHNoYTI1Nl9kb25lKG1kLCBvdXQreCozMikpICE9IENSWVBUX09LKSB7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICB9CisgICAqb3V0bGVuID0gMzIqRk9SVFVOQV9QT09MUzsKKyAgIGVyciA9IENSWVBUX09LOworCitMQkxfRVJSOgorI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgemVyb21lbShtZCwgc2l6ZW9mKCptZCkpOworI2VuZGlmCisgICBYRlJFRShtZCk7CisgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT5mb3J0dW5hLnBybmdfbG9jayk7CisgICByZXR1cm4gZXJyOworfQorIAorLyoqCisgIEltcG9ydCBhIFBSTkcgc3RhdGUKKyAgQHBhcmFtIGluICAgICAgIFRoZSBQUk5HIHN0YXRlCisgIEBwYXJhbSBpbmxlbiAgICBTaXplIG9mIHRoZSBzdGF0ZQorICBAcGFyYW0gcHJuZyAgICAgVGhlIFBSTkcgdG8gaW1wb3J0CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IGZvcnR1bmFfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBwcm5nX3N0YXRlICpwcm5nKQoreworICAgaW50IGVyciwgeDsKKworICAgTFRDX0FSR0NISyhpbiAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwcm5nICE9IE5VTEwpOworCisgICBpZiAoaW5sZW4gIT0gMzIqRk9SVFVOQV9QT09MUykgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorCisgICBpZiAoKGVyciA9IGZvcnR1bmFfc3RhcnQocHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgZm9yICh4ID0gMDsgeCA8IEZPUlRVTkFfUE9PTFM7IHgrKykgeworICAgICAgaWYgKChlcnIgPSBmb3J0dW5hX2FkZF9lbnRyb3B5KGluK3gqMzIsIDMyLCBwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIHJldHVybiBlcnI7CisgICAgICB9CisgICB9CisgICByZXR1cm4gZXJyOworfQorCisvKioKKyAgUFJORyBzZWxmLXRlc3QKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsLCBDUllQVF9OT1AgaWYgc2VsZi10ZXN0aW5nIGhhcyBiZWVuIGRpc2FibGVkCisqLyAgCitpbnQgZm9ydHVuYV90ZXN0KHZvaWQpCit7CisjaWZuZGVmIExUQ19URVNUCisgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIGludCBlcnI7CisKKyAgIGlmICgoZXJyID0gc2hhMjU2X3Rlc3QoKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICByZXR1cm4gcmlqbmRhZWxfdGVzdCgpOworI2VuZGlmCit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9mb3J0dW5hLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTIgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMjE6MzQ6MDMgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BybmdzL3JjNC5jIGIvbGlidG9tY3J5cHQvc3JjL3BybmdzL3JjNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMTE4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcHJuZ3MvcmM0LmMKQEAgLTAsMCArMSwyNjkgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgIEBmaWxlIHJjNC5jCisgIFJDNCBQUk5HLCBUb20gU3QgRGVuaXMKKyovICAKKworI2lmZGVmIFJDNAorCitjb25zdCBzdHJ1Y3QgbHRjX3BybmdfZGVzY3JpcHRvciByYzRfZGVzYyA9IAoreworICAgInJjNCIsIDMyLAorICAgICZyYzRfc3RhcnQsCisgICAgJnJjNF9hZGRfZW50cm9weSwKKyAgICAmcmM0X3JlYWR5LAorICAgICZyYzRfcmVhZCwKKyAgICAmcmM0X2RvbmUsCisgICAgJnJjNF9leHBvcnQsCisgICAgJnJjNF9pbXBvcnQsCisgICAgJnJjNF90ZXN0Cit9OworCisvKioKKyAgU3RhcnQgdGhlIFBSTkcKKyAgQHBhcmFtIHBybmcgICAgIFtvdXRdIFRoZSBQUk5HIHN0YXRlIHRvIGluaXRpYWxpemUKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLyAgCitpbnQgcmM0X3N0YXJ0KHBybmdfc3RhdGUgKnBybmcpCit7CisgICAgTFRDX0FSR0NISyhwcm5nICE9IE5VTEwpOworCisgICAgLyogc2V0IGtleXNpemUgdG8gemVybyAqLworICAgIHBybmctPnJjNC54ID0gMDsKKyAgICAKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBBZGQgZW50cm9weSB0byB0aGUgUFJORyBzdGF0ZQorICBAcGFyYW0gaW4gICAgICAgVGhlIGRhdGEgdG8gYWRkCisgIEBwYXJhbSBpbmxlbiAgICBMZW5ndGggb2YgdGhlIGRhdGEgdG8gYWRkCisgIEBwYXJhbSBwcm5nICAgICBQUk5HIHN0YXRlIHRvIHVwZGF0ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAKK2ludCByYzRfYWRkX2VudHJvcHkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHBybmdfc3RhdGUgKnBybmcpCit7CisgICAgTFRDX0FSR0NISyhpbiAgIT0gTlVMTCk7CisgICAgTFRDX0FSR0NISyhwcm5nICE9IE5VTEwpOworIAorICAgIC8qIHRyaW0gYXMgcmVxdWlyZWQgKi8KKyAgICBpZiAocHJuZy0+cmM0LnggKyBpbmxlbiA+IDI1NikgeworICAgICAgIGlmIChwcm5nLT5yYzQueCA9PSAyNTYpIHsKKyAgICAgICAgICAvKiBJIGNhbid0IHBvc3NpYmx5IGFjY2VwdCBhbm90aGVyIGJ5dGUsIG9rIG1heWJlIGEgbWludCB3YWZlci4uLiAqLworICAgICAgICAgIHJldHVybiBDUllQVF9PSzsKKyAgICAgICB9IGVsc2UgeworICAgICAgICAgIC8qIG9ubHkgYWNjZXB0IHBhcnQgb2YgaXQgKi8KKyAgICAgICAgICBpbmxlbiA9IDI1NiAtIHBybmctPnJjNC54OworICAgICAgIH0gICAgICAgCisgICAgfQorCisgICAgd2hpbGUgKGlubGVuLS0pIHsKKyAgICAgICBwcm5nLT5yYzQuYnVmW3BybmctPnJjNC54KytdID0gKmluKys7CisgICAgfQorCisgICAgcmV0dXJuIENSWVBUX09LOworICAgIAorfQorCisvKioKKyAgTWFrZSB0aGUgUFJORyByZWFkeSB0byByZWFkIGZyb20KKyAgQHBhcmFtIHBybmcgICBUaGUgUFJORyB0byBtYWtlIGFjdGl2ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAKK2ludCByYzRfcmVhZHkocHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGtleVsyNTZdLCB0bXAsICpzOworICAgIGludCBrZXlsZW4sIHgsIHksIGo7CisKKyAgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CisKKyAgICAvKiBleHRyYWN0IHRoZSBrZXkgKi8KKyAgICBzID0gcHJuZy0+cmM0LmJ1ZjsKKyAgICBYTUVNQ1BZKGtleSwgcywgMjU2KTsKKyAgICBrZXlsZW4gPSBwcm5nLT5yYzQueDsKKworICAgIC8qIG1ha2UgUkM0IHBlcm0gYW5kIHNodWZmbGUgKi8KKyAgICBmb3IgKHggPSAwOyB4IDwgMjU2OyB4KyspIHsKKyAgICAgICAgc1t4XSA9IHg7CisgICAgfQorCisgICAgZm9yIChqID0geCA9IHkgPSAwOyB4IDwgMjU2OyB4KyspIHsKKyAgICAgICAgeSA9ICh5ICsgcHJuZy0+cmM0LmJ1Zlt4XSArIGtleVtqKytdKSAmIDI1NTsKKyAgICAgICAgaWYgKGogPT0ga2V5bGVuKSB7CisgICAgICAgICAgIGogPSAwOyAKKyAgICAgICAgfQorICAgICAgICB0bXAgPSBzW3hdOyBzW3hdID0gc1t5XTsgc1t5XSA9IHRtcDsKKyAgICB9CisgICAgcHJuZy0+cmM0LnggPSAwOworICAgIHBybmctPnJjNC55ID0gMDsKKworI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgIHplcm9tZW0oa2V5LCBzaXplb2Yoa2V5KSk7CisjZW5kaWYKKworICAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIFJlYWQgZnJvbSB0aGUgUFJORworICBAcGFyYW0gb3V0ICAgICAgRGVzdGluYXRpb24KKyAgQHBhcmFtIG91dGxlbiAgIExlbmd0aCBvZiBvdXRwdXQKKyAgQHBhcmFtIHBybmcgICAgIFRoZSBhY3RpdmUgUFJORyB0byByZWFkIGZyb20KKyAgQHJldHVybiBOdW1iZXIgb2Ygb2N0ZXRzIHJlYWQKKyovICAKK3Vuc2lnbmVkIGxvbmcgcmM0X3JlYWQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nIG91dGxlbiwgcHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgIHVuc2lnbmVkIGNoYXIgeCwgeSwgKnMsIHRtcDsKKyAgIHVuc2lnbmVkIGxvbmcgbjsKKworICAgTFRDX0FSR0NISyhvdXQgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CisKKyNpZmRlZiBMVENfVkFMR1JJTkQKKyAgIHplcm9tZW0ob3V0LCBvdXRsZW4pOworI2VuZGlmCisKKyAgIG4gPSBvdXRsZW47CisgICB4ID0gcHJuZy0+cmM0Lng7CisgICB5ID0gcHJuZy0+cmM0Lnk7CisgICBzID0gcHJuZy0+cmM0LmJ1ZjsKKyAgIHdoaWxlIChvdXRsZW4tLSkgeworICAgICAgeCA9ICh4ICsgMSkgJiAyNTU7CisgICAgICB5ID0gKHkgKyBzW3hdKSAmIDI1NTsKKyAgICAgIHRtcCA9IHNbeF07IHNbeF0gPSBzW3ldOyBzW3ldID0gdG1wOworICAgICAgdG1wID0gKHNbeF0gKyBzW3ldKSAmIDI1NTsKKyAgICAgICpvdXQrKyBePSBzW3RtcF07CisgICB9CisgICBwcm5nLT5yYzQueCA9IHg7CisgICBwcm5nLT5yYzQueSA9IHk7CisgICByZXR1cm4gbjsKK30KKworLyoqCisgIFRlcm1pbmF0ZSB0aGUgUFJORworICBAcGFyYW0gcHJuZyAgIFRoZSBQUk5HIHRvIHRlcm1pbmF0ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAKK2ludCByYzRfZG9uZShwcm5nX3N0YXRlICpwcm5nKQoreworICAgTFRDX0FSR0NISyhwcm5nICE9IE5VTEwpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgRXhwb3J0IHRoZSBQUk5HIHN0YXRlCisgIEBwYXJhbSBvdXQgICAgICAgW291dF0gRGVzdGluYXRpb24KKyAgQHBhcmFtIG91dGxlbiAgICBbaW4vb3V0XSBNYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHN0YXRlCisgIEBwYXJhbSBwcm5nICAgICAgVGhlIFBSTkcgdG8gZXhwb3J0CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IHJjNF9leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIHBybmdfc3RhdGUgKnBybmcpCit7CisgICBMVENfQVJHQ0hLKG91dGxlbiAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0ICAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwcm5nICAgIT0gTlVMTCk7CisKKyAgIGlmICgqb3V0bGVuIDwgMzIpIHsKKyAgICAgICpvdXRsZW4gPSAzMjsKKyAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisKKyAgIGlmIChyYzRfcmVhZChvdXQsIDMyLCBwcm5nKSAhPSAzMikgeworICAgICAgcmV0dXJuIENSWVBUX0VSUk9SX1JFQURQUk5HOworICAgfQorICAgKm91dGxlbiA9IDMyOworCisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisgCisvKioKKyAgSW1wb3J0IGEgUFJORyBzdGF0ZQorICBAcGFyYW0gaW4gICAgICAgVGhlIFBSTkcgc3RhdGUKKyAgQHBhcmFtIGlubGVuICAgIFNpemUgb2YgdGhlIHN0YXRlCisgIEBwYXJhbSBwcm5nICAgICBUaGUgUFJORyB0byBpbXBvcnQKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLyAgCitpbnQgcmM0X2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgcHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgIGludCBlcnI7CisgICBMVENfQVJHQ0hLKGluICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CisKKyAgIGlmIChpbmxlbiAhPSAzMikgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorICAgCisgICBpZiAoKGVyciA9IHJjNF9zdGFydChwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICByZXR1cm4gcmM0X2FkZF9lbnRyb3B5KGluLCAzMiwgcHJuZyk7Cit9CisKKy8qKgorICBQUk5HIHNlbGYtdGVzdAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3RpbmcgaGFzIGJlZW4gZGlzYWJsZWQKKyovICAKK2ludCByYzRfdGVzdCh2b2lkKQoreworI2lmICFkZWZpbmVkKExUQ19URVNUKSB8fCBkZWZpbmVkKExUQ19WQUxHUklORCkKKyAgIHJldHVybiBDUllQVF9OT1A7CisjZWxzZQorICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICB1bnNpZ25lZCBjaGFyIGtleVs4XSwgcHRbOF0sIGN0WzhdOworICAgfSB0ZXN0c1tdID0geworeworICAgeyAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmIH0sCisgICB7IDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYgfSwKKyAgIHsgMHg3NSwgMHhiNywgMHg4NywgMHg4MCwgMHg5OSwgMHhlMCwgMHhjNSwgMHg5NiB9Cit9Cit9OworICAgcHJuZ19zdGF0ZSBwcm5nOworICAgdW5zaWduZWQgY2hhciBkc3RbOF07CisgICBpbnQgZXJyLCB4OworCisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHRlc3RzKS9zaXplb2YodGVzdHNbMF0pKTsgeCsrKSB7CisgICAgICAgaWYgKChlcnIgPSByYzRfc3RhcnQoJnBybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgfQorICAgICAgIGlmICgoZXJyID0gcmM0X2FkZF9lbnRyb3B5KHRlc3RzW3hdLmtleSwgOCwgJnBybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgfQorICAgICAgIGlmICgoZXJyID0gcmM0X3JlYWR5KCZwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgIH0KKyAgICAgICBYTUVNQ1BZKGRzdCwgdGVzdHNbeF0ucHQsIDgpOworICAgICAgIGlmIChyYzRfcmVhZChkc3QsIDgsICZwcm5nKSAhPSA4KSB7CisgICAgICAgICAgcmV0dXJuIENSWVBUX0VSUk9SX1JFQURQUk5HOworICAgICAgIH0KKyAgICAgICByYzRfZG9uZSgmcHJuZyk7CisgICAgICAgaWYgKFhNRU1DTVAoZHN0LCB0ZXN0c1t4XS5jdCwgOCkpIHsKKyNpZiAwCisgICAgICAgICAgaW50IHk7CisgICAgICAgICAgcHJpbnRmKCJcblxuUkM0IGZhaWxlZCwgSSBnb3Q6XG4iKTsgCisgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgcHJpbnRmKCIlMDJ4ICIsIGRzdFt5XSk7CisgICAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgICAgcmV0dXJuIENSWVBUX0ZBSUxfVEVTVFZFQ1RPUjsKKyAgICAgICB9CisgICB9CisgICByZXR1cm4gQ1JZUFRfT0s7CisjZW5kaWYKK30KKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BybmdzL3JjNC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMTYgMDA6MzI6MTggJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BybmdzL3JuZ19nZXRfYnl0ZXMuYyBiL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9ybmdfZ2V0X2J5dGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QzMzJiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9ybmdfZ2V0X2J5dGVzLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqIAorICAgQGZpbGUgcm5nX2dldF9ieXRlcy5jCisgICBwb3J0YWJsZSB3YXkgdG8gZ2V0IHNlY3VyZSByYW5kb20gYml0cyB0byBmZWVkIGEgUFJORyAoVG9tIFN0IERlbmlzKQorKi8KKworI2lmZGVmIERFVlJBTkRPTQorLyogb24gKk5JWCByZWFkIC9kZXYvcmFuZG9tICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBybmdfbml4KHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQpKQoreworI2lmZGVmIExUQ19OT19GSUxFCisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIEZJTEUgKmY7CisgICAgdW5zaWduZWQgbG9uZyB4OworI2lmZGVmIFRSWV9VUkFORE9NX0ZJUlNUCisgICAgZiA9IGZvcGVuKCIvZGV2L3VyYW5kb20iLCAicmIiKTsKKyAgICBpZiAoZiA9PSBOVUxMKQorI2VuZGlmIC8qIFRSWV9VUkFORE9NX0ZJUlNUICovCisgICAgICAgZiA9IGZvcGVuKCIvZGV2L3JhbmRvbSIsICJyYiIpOworCisgICAgaWYgKGYgPT0gTlVMTCkgeworICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICAvKiBkaXNhYmxlIGJ1ZmZlcmluZyAqLworICAgIGlmIChzZXR2YnVmKGYsIE5VTEwsIF9JT05CRiwgMCkgIT0gMCkgeworICAgICAgIGZjbG9zZShmKTsKKyAgICAgICByZXR1cm4gMDsKKyAgICB9ICAgCisgCisgICAgeCA9ICh1bnNpZ25lZCBsb25nKWZyZWFkKGJ1ZiwgMSwgKHNpemVfdClsZW4sIGYpOworICAgIGZjbG9zZShmKTsKKyAgICByZXR1cm4geDsKKyNlbmRpZiAvKiBMVENfTk9fRklMRSAqLworfQorCisjZW5kaWYgLyogREVWUkFORE9NICovCisKKy8qIG9uIEFOU0kgQyBwbGF0Zm9ybXMgd2l0aCAxMDAgPCBDTE9DS1NfUEVSX1NFQyA8IDEwMDAwICovCisjaWYgZGVmaW5lZChDTE9DS1NfUEVSX1NFQykgJiYgIWRlZmluZWQoV0lOQ0UpCisKKyNkZWZpbmUgQU5TSV9STkcKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcm5nX2Fuc2ljKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbG9uZyBsZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCkpCit7CisgICBjbG9ja190IHQxOworICAgaW50IGwsIGFjYywgYml0cywgYSwgYjsKKworICAgaWYgKFhDTE9DS1NfUEVSX1NFQyA8IDEwMCB8fCBYQ0xPQ0tTX1BFUl9TRUMgPiAxMDAwMCkgeworICAgICAgcmV0dXJuIDA7CisgICB9CisKKyAgIGwgPSBsZW47CisgICBiaXRzID0gODsKKyAgIGFjYyAgPSBhID0gYiA9IDA7CisgICB3aGlsZSAobGVuLS0pIHsKKyAgICAgICBpZiAoY2FsbGJhY2sgIT0gTlVMTCkgY2FsbGJhY2soKTsKKyAgICAgICB3aGlsZSAoYml0cy0tKSB7CisgICAgICAgICAgZG8geworICAgICAgICAgICAgIHQxID0gWENMT0NLKCk7IHdoaWxlICh0MSA9PSBYQ0xPQ0soKSkgYSBePSAxOworICAgICAgICAgICAgIHQxID0gWENMT0NLKCk7IHdoaWxlICh0MSA9PSBYQ0xPQ0soKSkgYiBePSAxOworICAgICAgICAgIH0gd2hpbGUgKGEgPT0gYik7CisgICAgICAgICAgYWNjID0gKGFjYyA8PCAxKSB8IGE7CisgICAgICAgfQorICAgICAgICpidWYrKyA9IGFjYzsgCisgICAgICAgYWNjICA9IDA7CisgICAgICAgYml0cyA9IDg7CisgICB9CisgICBhY2MgPSBiaXRzID0gYSA9IGIgPSAwOworICAgcmV0dXJuIGw7Cit9CisKKyNlbmRpZiAKKworLyogVHJ5IHRoZSBNaWNyb3NvZnQgQ1NQICovCisjaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChXSU5DRSkKKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDQwMAorI2lmZGVmIFdJTkNFCisgICAjZGVmaW5lIFVOREVSX0NFCisgICAjZGVmaW5lIEFSTQorI2VuZGlmCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbmNyeXB0Lmg+CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJuZ193aW4zMih1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxvbmcgbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQpKQoreworICAgSENSWVBUUFJPViBoUHJvdiA9IDA7CisgICBpZiAoIUNyeXB0QWNxdWlyZUNvbnRleHQoJmhQcm92LCBOVUxMLCBNU19ERUZfUFJPViwgUFJPVl9SU0FfRlVMTCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENSWVBUX1ZFUklGWUNPTlRFWFQgfCBDUllQVF9NQUNISU5FX0tFWVNFVCkpICYmIAorICAgICAgICFDcnlwdEFjcXVpcmVDb250ZXh0ICgmaFByb3YsIE5VTEwsIE1TX0RFRl9QUk9WLCBQUk9WX1JTQV9GVUxMLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVF9WRVJJRllDT05URVhUIHwgQ1JZUFRfTUFDSElORV9LRVlTRVQgfCBDUllQVF9ORVdLRVlTRVQpKQorICAgICAgcmV0dXJuIDA7CisKKyAgIGlmIChDcnlwdEdlblJhbmRvbShoUHJvdiwgbGVuLCBidWYpID09IFRSVUUpIHsKKyAgICAgIENyeXB0UmVsZWFzZUNvbnRleHQoaFByb3YsIDApOworICAgICAgcmV0dXJuIGxlbjsKKyAgIH0gZWxzZSB7CisgICAgICBDcnlwdFJlbGVhc2VDb250ZXh0KGhQcm92LCAwKTsKKyAgICAgIHJldHVybiAwOworICAgfQorfQorCisjZW5kaWYgLyogV0lOMzIgKi8KKworLyoqCisgIFJlYWQgdGhlIHN5c3RlbSBSTkcKKyAgQHBhcmFtIG91dCAgICAgICBEZXN0aW5hdGlvbgorICBAcGFyYW0gb3V0bGVuICAgIExlbmd0aCBkZXNpcmVkIChvY3RldHMpCisgIEBwYXJhbSBjYWxsYmFjayAgUG9pbnRlciB0byB2b2lkIGZ1bmN0aW9uIHRvIGFjdCBhcyAiY2FsbGJhY2siIHdoZW4gUk5HIGlzIHNsb3cuICBUaGlzIGNhbiBiZSBOVUxMCisgIEByZXR1cm4gTnVtYmVyIG9mIG9jdGV0cyByZWFkCisqLyAgICAgCit1bnNpZ25lZCBsb25nIHJuZ19nZXRfYnl0ZXModW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nIG91dGxlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkKSkKK3sKKyAgIHVuc2lnbmVkIGxvbmcgeDsKKworICAgTFRDX0FSR0NISyhvdXQgIT0gTlVMTCk7CisKKyNpZiBkZWZpbmVkKERFVlJBTkRPTSkKKyAgIHggPSBybmdfbml4KG91dCwgb3V0bGVuLCBjYWxsYmFjayk7ICAgaWYgKHggIT0gMCkgeyByZXR1cm4geDsgfQorI2VuZGlmCisjaWZkZWYgV0lOMzIKKyAgIHggPSBybmdfd2luMzIob3V0LCBvdXRsZW4sIGNhbGxiYWNrKTsgaWYgKHggIT0gMCkgeyByZXR1cm4geDsgfQorI2VuZGlmCisjaWZkZWYgQU5TSV9STkcKKyAgIHggPSBybmdfYW5zaWMob3V0LCBvdXRsZW4sIGNhbGxiYWNrKTsgaWYgKHggIT0gMCkgeyByZXR1cm4geDsgfQorI2VuZGlmCisgICByZXR1cm4gMDsKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BybmdzL3JuZ19nZXRfYnl0ZXMuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzEyLzA2IDAyOjAxOjI5ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9ybmdfbWFrZV9wcm5nLmMgYi9saWJ0b21jcnlwdC9zcmMvcHJuZ3Mvcm5nX21ha2VfcHJuZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NjMxYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcHJuZ3Mvcm5nX21ha2VfcHJuZy5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqIAorICBAZmlsZSBybmdfbWFrZV9wcm5nLmMKKyAgcG9ydGFibGUgd2F5IHRvIGdldCBzZWN1cmUgcmFuZG9tIGJpdHMgdG8gZmVlZCBhIFBSTkcgIChUb20gU3QgRGVuaXMpCisqLworCisvKioKKyAgQ3JlYXRlIGEgUFJORyBmcm9tIGEgUk5HCisgIEBwYXJhbSBiaXRzICAgICBOdW1iZXIgb2YgYml0cyBvZiBlbnRyb3B5IGRlc2lyZWQgKDY0IC4uLiAxMDI0KQorICBAcGFyYW0gd3BybmcgICAgSW5kZXggb2Ygd2hpY2ggUFJORyB0byBzZXR1cAorICBAcGFyYW0gcHJuZyAgICAgW291dF0gUFJORyBzdGF0ZSB0byBpbml0aWFsaXplCisgIEBwYXJhbSBjYWxsYmFjayBBIHBvaW50ZXIgdG8gYSB2b2lkIGZ1bmN0aW9uIGZvciB3aGVuIHRoZSBSTkcgaXMgc2xvdywgdGhpcyBjYW4gYmUgTlVMTAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAKK2ludCBybmdfbWFrZV9wcm5nKGludCBiaXRzLCBpbnQgd3BybmcsIHBybmdfc3RhdGUgKnBybmcsIAorICAgICAgICAgICAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkKSkKK3sKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzI1Nl07CisgICBpbnQgZXJyOworICAgCisgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CisKKyAgIC8qIGNoZWNrIHBhcmFtZXRlciAqLworICAgaWYgKChlcnIgPSBwcm5nX2lzX3ZhbGlkKHdwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGlmIChiaXRzIDwgNjQgfHwgYml0cyA+IDEwMjQpIHsKKyAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX1BSTkdTSVpFOworICAgfQorCisgICBpZiAoKGVyciA9IHBybmdfZGVzY3JpcHRvclt3cHJuZ10uc3RhcnQocHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBiaXRzID0gKChiaXRzLzgpKygoYml0cyY3KSE9MD8xOjApKSAqIDI7CisgICBpZiAocm5nX2dldF9ieXRlcyhidWYsICh1bnNpZ25lZCBsb25nKWJpdHMsIGNhbGxiYWNrKSAhPSAodW5zaWduZWQgbG9uZyliaXRzKSB7CisgICAgICByZXR1cm4gQ1JZUFRfRVJST1JfUkVBRFBSTkc7CisgICB9CisKKyAgIGlmICgoZXJyID0gcHJuZ19kZXNjcmlwdG9yW3dwcm5nXS5hZGRfZW50cm9weShidWYsICh1bnNpZ25lZCBsb25nKWJpdHMsIHBybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgaWYgKChlcnIgPSBwcm5nX2Rlc2NyaXB0b3Jbd3BybmddLnJlYWR5KHBybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgI2lmZGVmIExUQ19DTEVBTl9TVEFDSworICAgICAgemVyb21lbShidWYsIHNpemVvZihidWYpKTsKKyAgICNlbmRpZgorICAgcmV0dXJuIENSWVBUX09LOworfQorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9ybmdfbWFrZV9wcm5nLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcHJuZ3Mvc29iZXIxMjguYyBiL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9zb2JlcjEyOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNjEzODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC9zcmMvcHJuZ3Mvc29iZXIxMjguYwpAQCAtMCwwICsxLDUwMCBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyBAZmlsZSBzb2JlcjEyOC5jCisgSW1wbGVtZW50YXRpb24gb2YgU09CRVItMTI4IGJ5IFRvbSBTdCBEZW5pcy4KKyBCYXNlZCBvbiBzMTI4ZmFzdC5jIHJlZmVyZW5jZSBjb2RlIHN1cHBsaWVkIGJ5IEdyZWcgUm9zZSBvZiBRVUFMQ09NTS4KKyovCisKKyNpZmRlZiBTT0JFUjEyOAorCisjaW5jbHVkZSAic29iZXIxMjh0YWIuYyIKKworY29uc3Qgc3RydWN0IGx0Y19wcm5nX2Rlc2NyaXB0b3Igc29iZXIxMjhfZGVzYyA9IAoreworICAgInNvYmVyMTI4IiwgNjQsCisgICAgJnNvYmVyMTI4X3N0YXJ0LAorICAgICZzb2JlcjEyOF9hZGRfZW50cm9weSwKKyAgICAmc29iZXIxMjhfcmVhZHksCisgICAgJnNvYmVyMTI4X3JlYWQsCisgICAgJnNvYmVyMTI4X2RvbmUsCisgICAgJnNvYmVyMTI4X2V4cG9ydCwKKyAgICAmc29iZXIxMjhfaW1wb3J0LAorICAgICZzb2JlcjEyOF90ZXN0Cit9OworCisvKiBkb24ndCBjaGFuZ2UgdGhlc2UuLi4gKi8KKyNkZWZpbmUgTiAgICAgICAgICAgICAgICAgICAgICAgIDE3CisjZGVmaW5lIEZPTEQgICAgICAgICAgICAgICAgICAgICAgTiAvKiBob3cgbWFueSBpdGVyYXRpb25zIG9mIGZvbGRpbmcgdG8gZG8gKi8KKyNkZWZpbmUgSU5JVEtPTlNUICAgICAgICAweDY5OTZjNTNhIC8qIHZhbHVlIG9mIEtPTlNUIHRvIHVzZSBkdXJpbmcga2V5IGxvYWRpbmcgKi8KKyNkZWZpbmUgS0VZUCAgICAgICAgICAgICAgICAgICAgIDE1IC8qIHdoZXJlIHRvIGluc2VydCBrZXkgd29yZHMgKi8KKyNkZWZpbmUgRk9MRFAgICAgICAgICAgICAgICAgICAgICA0IC8qIHdoZXJlIHRvIGluc2VydCBub24tbGluZWFyIGZlZWRiYWNrICovCisKKyNkZWZpbmUgQih4LGkpICgodW5zaWduZWQgY2hhcikoKCh4KSA+PiAoOCppKSkgJiAweEZGKSkKKworc3RhdGljIHVsb25nMzIgQllURTJXT1JEKHVuc2lnbmVkIGNoYXIgKmIpCit7CisgICB1bG9uZzMyIHQ7CisgICBMT0FEMzJMKHQsIGIpOworICAgcmV0dXJuIHQ7Cit9CisKKyNkZWZpbmUgV09SRDJCWVRFKHcsIGIpIFNUT1JFMzJMKGIsIHcpCisKK3N0YXRpYyB2b2lkIFhPUldPUkQodWxvbmczMiB3LCB1bnNpZ25lZCBjaGFyICpiKQoreworICAgdWxvbmczMiB0OworICAgTE9BRDMyTCh0LCBiKTsKKyAgIHQgXj0gdzsKKyAgIFNUT1JFMzJMKHQsIGIpOworfQorCisvKiBnaXZlIGNvcnJlY3Qgb2Zmc2V0IGZvciB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiB0aGUgcmVnaXN0ZXIsCisgKiB3aGVyZSBsb2dpY2FsbHkgUlswXSBpcyBhdCBwb3NpdGlvbiAiemVybyIuCisgKi8KKyNkZWZpbmUgT0ZGKHplcm8sIGkpICgoKHplcm8pKyhpKSkgJSBOKQorCisvKiBzdGVwIHRoZSBMRlNSICovCisvKiBBZnRlciBzdGVwcGluZywgInplcm8iIG1vdmVzIHJpZ2h0IG9uZSBwbGFjZSAqLworI2RlZmluZSBTVEVQKFIseikgXAorICAgIFJbT0ZGKHosMCldID0gUltPRkYoeiwxNSldIF4gUltPRkYoeiw0KV0gXiAoUltPRkYoeiwwKV0gPDwgOCkgXiBNdWx0YWJbKFJbT0ZGKHosMCldID4+IDI0KSAmIDB4RkZdOworCitzdGF0aWMgdm9pZCBjeWNsZSh1bG9uZzMyICpSKQoreworICAgIHVsb25nMzIgdDsKKyAgICBpbnQgICAgIGk7CisKKyAgICBTVEVQKFIsMCk7CisgICAgdCA9IFJbMF07CisgICAgZm9yIChpID0gMTsgaSA8IE47ICsraSkgeworICAgICAgICBSW2ktMV0gPSBSW2ldOworICAgIH0KKyAgICBSW04tMV0gPSB0OworfQorCisvKiBSZXR1cm4gYSBub24tbGluZWFyIGZ1bmN0aW9uIG9mIHNvbWUgcGFydHMgb2YgdGhlIHJlZ2lzdGVyLgorICovCisjZGVmaW5lIE5MRlVOQyhjLHopIFwKK3sgXAorICAgIHQgPSBjLT5SW09GRih6LDApXSArIGMtPlJbT0ZGKHosMTYpXTsgXAorICAgIHQgXj0gU2JveFsodCA+PiAyNCkgJiAweEZGXTsgXAorICAgIHQgPSBST1JjKHQsIDgpOyBcCisgICAgdCA9ICgodCArIGMtPlJbT0ZGKHosMSldKSBeIGMtPmtvbnN0KSArIGMtPlJbT0ZGKHosNildOyBcCisgICAgdCBePSBTYm94Wyh0ID4+IDI0KSAmIDB4RkZdOyBcCisgICAgdCA9IHQgKyBjLT5SW09GRih6LDEzKV07IFwKK30KKworc3RhdGljIHVsb25nMzIgbmx0YXAoc3RydWN0IHNvYmVyMTI4X3BybmcgKmMpCit7CisgICAgdWxvbmczMiB0OworICAgIE5MRlVOQyhjLCAwKTsKKyAgICByZXR1cm4gdDsKK30KKworLyoqCisgIFN0YXJ0IHRoZSBQUk5HCisgIEBwYXJhbSBwcm5nICAgICBbb3V0XSBUaGUgUFJORyBzdGF0ZSB0byBpbml0aWFsaXplCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IHNvYmVyMTI4X3N0YXJ0KHBybmdfc3RhdGUgKnBybmcpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgIGk7CisgICAgc3RydWN0IHNvYmVyMTI4X3BybmcgKmM7CisKKyAgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CisKKyAgICBjID0gJihwcm5nLT5zb2JlcjEyOCk7CisgICAgCisgICAgLyogUmVnaXN0ZXIgaW5pdGlhbGlzZWQgdG8gRmlib25hY2NpIG51bWJlcnMgKi8KKyAgICBjLT5SWzBdID0gMTsKKyAgICBjLT5SWzFdID0gMTsKKyAgICBmb3IgKGkgPSAyOyBpIDwgTjsgKytpKSB7CisgICAgICAgYy0+UltpXSA9IGMtPlJbaS0xXSArIGMtPlJbaS0yXTsKKyAgICB9CisgICAgYy0+a29uc3QgPSBJTklUS09OU1Q7CisKKyAgICAvKiBuZXh0IGFkZF9lbnRyb3B5IHdpbGwgYmUgdGhlIGtleSAqLworICAgIGMtPmZsYWcgID0gMTsKKyAgICBjLT5zZXQgICA9IDA7CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qIFNhdmUgdGhlIGN1cnJlbnQgcmVnaXN0ZXIgc3RhdGUKKyAqLworc3RhdGljIHZvaWQgczEyOF9zYXZlc3RhdGUoc3RydWN0IHNvYmVyMTI4X3BybmcgKmMpCit7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IE47ICsraSkgeworICAgICAgICBjLT5pbml0UltpXSA9IGMtPlJbaV07CisgICAgfQorfQorCisvKiBpbml0aWFsaXNlIHRvIHByZXZpb3VzbHkgc2F2ZWQgcmVnaXN0ZXIgc3RhdGUKKyAqLworc3RhdGljIHZvaWQgczEyOF9yZWxvYWRzdGF0ZShzdHJ1Y3Qgc29iZXIxMjhfcHJuZyAqYykKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBOOyArK2kpIHsKKyAgICAgICAgYy0+UltpXSA9IGMtPmluaXRSW2ldOworICAgIH0KK30KKworLyogSW5pdGlhbGlzZSAia29uc3QiCisgKi8KK3N0YXRpYyB2b2lkIHMxMjhfZ2Vua29uc3Qoc3RydWN0IHNvYmVyMTI4X3BybmcgKmMpCit7CisgICAgdWxvbmczMiBuZXdrb25zdDsKKworICAgIGRvIHsKKyAgICAgICBjeWNsZShjLT5SKTsKKyAgICAgICBuZXdrb25zdCA9IG5sdGFwKGMpOworICAgIH0gd2hpbGUgKChuZXdrb25zdCAmIDB4RkYwMDAwMDApID09IDApOworICAgIGMtPmtvbnN0ID0gbmV3a29uc3Q7Cit9CisKKy8qIExvYWQga2V5IG1hdGVyaWFsIGludG8gdGhlIHJlZ2lzdGVyCisgKi8KKyNkZWZpbmUgQURES0VZKGspIFwKKyAgIGMtPlJbS0VZUF0gKz0gKGspOworCisjZGVmaW5lIFhPUk5MKG5sKSBcCisgICBjLT5SW0ZPTERQXSBePSAobmwpOworCisvKiBub25saW5lYXIgZGlmZnVzaW9uIG9mIHJlZ2lzdGVyIGZvciBrZXkgKi8KKyNkZWZpbmUgRFJPVU5EKHopIFNURVAoYy0+Uix6KTsgTkxGVU5DKGMsKHorMSkpOyBjLT5SW09GRigoeisxKSxGT0xEUCldIF49IHQ7IAorc3RhdGljIHZvaWQgczEyOF9kaWZmdXNlKHN0cnVjdCBzb2JlcjEyOF9wcm5nICpjKQoreworICAgIHVsb25nMzIgdDsKKyAgICAvKiByZWxpZXMgb24gRk9MRCA9PSBOID09IDE3ISAqLworICAgIERST1VORCgwKTsKKyAgICBEUk9VTkQoMSk7CisgICAgRFJPVU5EKDIpOworICAgIERST1VORCgzKTsKKyAgICBEUk9VTkQoNCk7CisgICAgRFJPVU5EKDUpOworICAgIERST1VORCg2KTsKKyAgICBEUk9VTkQoNyk7CisgICAgRFJPVU5EKDgpOworICAgIERST1VORCg5KTsKKyAgICBEUk9VTkQoMTApOworICAgIERST1VORCgxMSk7CisgICAgRFJPVU5EKDEyKTsKKyAgICBEUk9VTkQoMTMpOworICAgIERST1VORCgxNCk7CisgICAgRFJPVU5EKDE1KTsKKyAgICBEUk9VTkQoMTYpOworfQorCisvKioKKyAgQWRkIGVudHJvcHkgdG8gdGhlIFBSTkcgc3RhdGUKKyAgQHBhcmFtIGluICAgICAgIFRoZSBkYXRhIHRvIGFkZAorICBAcGFyYW0gaW5sZW4gICAgTGVuZ3RoIG9mIHRoZSBkYXRhIHRvIGFkZAorICBAcGFyYW0gcHJuZyAgICAgUFJORyBzdGF0ZSB0byB1cGRhdGUKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLyAgCitpbnQgc29iZXIxMjhfYWRkX2VudHJvcHkoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHBybmdfc3RhdGUgKnBybmcpCit7CisgICAgc3RydWN0IHNvYmVyMTI4X3BybmcgKmM7CisgICAgdWxvbmczMiAgICAgICAgICAgICAgIGksIGs7CisKKyAgICBMVENfQVJHQ0hLKGluICE9IE5VTEwpOworICAgIExUQ19BUkdDSEsocHJuZyAhPSBOVUxMKTsKKyAgICBjID0gJihwcm5nLT5zb2JlcjEyOCk7CisKKyAgICBpZiAoYy0+ZmxhZyA9PSAxKSB7CisgICAgICAgLyogdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCB0byB0aGUgYWRkX2VudHJvcHkgc28gdGhpcyBpbnB1dCBpcyB0aGUga2V5ICovCisgICAgICAgLyogaW5sZW4gbXVzdCBiZSBtdWx0aXBsZSBvZiA0IGJ5dGVzICovCisgICAgICAgaWYgKChpbmxlbiAmIDMpICE9IDApIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9LRVlTSVpFOworICAgICAgIH0KKyAgICAKKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5sZW47IGkgKz0gNCkgeworICAgICAgICAgICBrID0gQllURTJXT1JEKCh1bnNpZ25lZCBjaGFyICopJmluW2ldKTsKKyAgICAgICAgICBBRERLRVkoayk7CisgICAgICAgICAgY3ljbGUoYy0+Uik7CisgICAgICAgICAgWE9STkwobmx0YXAoYykpOworICAgICAgIH0KKworICAgICAgIC8qIGFsc28gZm9sZCBpbiB0aGUgbGVuZ3RoIG9mIHRoZSBrZXkgKi8KKyAgICAgICBBRERLRVkoaW5sZW4pOworCisgICAgICAgLyogbm93IGRpZmZ1c2UgKi8KKyAgICAgICBzMTI4X2RpZmZ1c2UoYyk7CisKKyAgICAgICBzMTI4X2dlbmtvbnN0KGMpOworICAgICAgIHMxMjhfc2F2ZXN0YXRlKGMpOworICAgICAgIGMtPm5idWYgPSAwOworICAgICAgIGMtPmZsYWcgPSAwOyAgICAgICAKKyAgICAgICBjLT5zZXQgID0gMTsKKyAgICB9IGVsc2UgeworICAgICAgIC8qIG9rIHdlIGFyZSBhZGRpbmcgYW4gSVYgdGhlbi4uLiAqLworICAgICAgIHMxMjhfcmVsb2Fkc3RhdGUoYyk7CisKKyAgICAgICAvKiBpbmxlbiBtdXN0IGJlIG11bHRpcGxlIG9mIDQgYnl0ZXMgKi8KKyAgICAgICBpZiAoKGlubGVuICYgMykgIT0gMCkgeworICAgICAgICAgIHJldHVybiBDUllQVF9JTlZBTElEX0tFWVNJWkU7CisgICAgICAgfQorICAgIAorICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbmxlbjsgaSArPSA0KSB7CisgICAgICAgICAgIGsgPSBCWVRFMldPUkQoKHVuc2lnbmVkIGNoYXIgKikmaW5baV0pOworICAgICAgICAgIEFEREtFWShrKTsKKyAgICAgICAgICBjeWNsZShjLT5SKTsKKyAgICAgICAgICBYT1JOTChubHRhcChjKSk7CisgICAgICAgfQorCisgICAgICAgLyogYWxzbyBmb2xkIGluIHRoZSBsZW5ndGggb2YgdGhlIGtleSAqLworICAgICAgIEFEREtFWShpbmxlbik7CisKKyAgICAgICAvKiBub3cgZGlmZnVzZSAqLworICAgICAgIHMxMjhfZGlmZnVzZShjKTsKKyAgICAgICBjLT5uYnVmID0gMDsKKyAgICB9CisKKyAgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBNYWtlIHRoZSBQUk5HIHJlYWR5IHRvIHJlYWQgZnJvbQorICBAcGFyYW0gcHJuZyAgIFRoZSBQUk5HIHRvIG1ha2UgYWN0aXZlCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IHNvYmVyMTI4X3JlYWR5KHBybmdfc3RhdGUgKnBybmcpCit7CisgICByZXR1cm4gcHJuZy0+c29iZXIxMjguc2V0ID09IDEgPyBDUllQVF9PSyA6IENSWVBUX0VSUk9SOworfQorCisvKiBYT1IgcHNldWRvLXJhbmRvbSBieXRlcyBpbnRvIGJ1ZmZlcgorICovCisjZGVmaW5lIFNST1VORCh6KSBTVEVQKGMtPlIseik7IE5MRlVOQyhjLCh6KzEpKTsgWE9SV09SRCh0LCBvdXQrKHoqNCkpOworCisvKioKKyAgUmVhZCBmcm9tIHRoZSBQUk5HCisgIEBwYXJhbSBvdXQgICAgICBEZXN0aW5hdGlvbgorICBAcGFyYW0gb3V0bGVuICAgTGVuZ3RoIG9mIG91dHB1dAorICBAcGFyYW0gcHJuZyAgICAgVGhlIGFjdGl2ZSBQUk5HIHRvIHJlYWQgZnJvbQorICBAcmV0dXJuIE51bWJlciBvZiBvY3RldHMgcmVhZAorKi8gIAordW5zaWduZWQgbG9uZyBzb2JlcjEyOF9yZWFkKHVuc2lnbmVkIGNoYXIgKm91dCwgdW5zaWduZWQgbG9uZyBvdXRsZW4sIHBybmdfc3RhdGUgKnBybmcpCit7CisgICBzdHJ1Y3Qgc29iZXIxMjhfcHJuZyAqYzsKKyAgIHVsb25nMzIgICAgICAgICAgICAgICB0LCB0bGVuOworCisgICBMVENfQVJHQ0hLKG91dCAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CisKKyNpZmRlZiBMVENfVkFMR1JJTkQKKyAgIHplcm9tZW0ob3V0LCBvdXRsZW4pOworI2VuZGlmCisKKyAgIGMgPSAmKHBybmctPnNvYmVyMTI4KTsKKyAgIHQgPSAwOworICAgdGxlbiA9IG91dGxlbjsKKyAgIAorICAgLyogaGFuZGxlIGFueSBwcmV2aW91c2x5IGJ1ZmZlcmVkIGJ5dGVzICovCisgICB3aGlsZSAoYy0+bmJ1ZiAhPSAwICYmIG91dGxlbiAhPSAwKSB7CisgICAgICAqb3V0KysgXj0gYy0+c2J1ZiAmIDB4RkY7CisgICAgICAgYy0+c2J1ZiA+Pj0gODsKKyAgICAgICBjLT5uYnVmIC09IDg7CisgICAgICAgLS1vdXRsZW47CisgICB9CisKKyNpZm5kZWYgTFRDX1NNQUxMX0NPREUKKyAgICAvKiBkbyBsb3RzIGF0IGEgdGltZSwgaWYgdGhlcmUncyBlbm91Z2ggdG8gZG8gKi8KKyAgICB3aGlsZSAob3V0bGVuID49IE4qNCkgeworICAgICAgU1JPVU5EKDApOworICAgICAgU1JPVU5EKDEpOworICAgICAgU1JPVU5EKDIpOworICAgICAgU1JPVU5EKDMpOworICAgICAgU1JPVU5EKDQpOworICAgICAgU1JPVU5EKDUpOworICAgICAgU1JPVU5EKDYpOworICAgICAgU1JPVU5EKDcpOworICAgICAgU1JPVU5EKDgpOworICAgICAgU1JPVU5EKDkpOworICAgICAgU1JPVU5EKDEwKTsKKyAgICAgIFNST1VORCgxMSk7CisgICAgICBTUk9VTkQoMTIpOworICAgICAgU1JPVU5EKDEzKTsKKyAgICAgIFNST1VORCgxNCk7CisgICAgICBTUk9VTkQoMTUpOworICAgICAgU1JPVU5EKDE2KTsKKyAgICAgIG91dCAgICArPSA0Kk47CisgICAgICBvdXRsZW4gLT0gNCpOOworICAgIH0KKyNlbmRpZgorCisgICAgLyogZG8gc21hbGwgb3Igb2RkIHNpemUgYnVmZmVycyB0aGUgc2xvdyB3YXkgKi8KKyAgICB3aGlsZSAoNCA8PSBvdXRsZW4pIHsKKyAgICAgIGN5Y2xlKGMtPlIpOworICAgICAgdCA9IG5sdGFwKGMpOworICAgICAgWE9SV09SRCh0LCBvdXQpOworICAgICAgb3V0ICAgICs9IDQ7CisgICAgICBvdXRsZW4gLT0gNDsKKyAgICB9CisKKyAgICAvKiBoYW5kbGUgYW55IHRyYWlsaW5nIGJ5dGVzICovCisgICAgaWYgKG91dGxlbiAhPSAwKSB7CisgICAgICBjeWNsZShjLT5SKTsKKyAgICAgIGMtPnNidWYgPSBubHRhcChjKTsKKyAgICAgIGMtPm5idWYgPSAzMjsKKyAgICAgIHdoaWxlIChjLT5uYnVmICE9IDAgJiYgb3V0bGVuICE9IDApIHsKKyAgICAgICAgICAqb3V0KysgXj0gYy0+c2J1ZiAmIDB4RkY7CisgICAgICAgICAgYy0+c2J1ZiA+Pj0gODsKKyAgICAgICAgICBjLT5uYnVmIC09IDg7CisgICAgICAgICAgLS1vdXRsZW47CisgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRsZW47Cit9CisKKy8qKgorICBUZXJtaW5hdGUgdGhlIFBSTkcKKyAgQHBhcmFtIHBybmcgICBUaGUgUFJORyB0byB0ZXJtaW5hdGUKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLyAgCitpbnQgc29iZXIxMjhfZG9uZShwcm5nX3N0YXRlICpwcm5nKQoreworICAgTFRDX0FSR0NISyhwcm5nICE9IE5VTEwpOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgRXhwb3J0IHRoZSBQUk5HIHN0YXRlCisgIEBwYXJhbSBvdXQgICAgICAgW291dF0gRGVzdGluYXRpb24KKyAgQHBhcmFtIG91dGxlbiAgICBbaW4vb3V0XSBNYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHN0YXRlCisgIEBwYXJhbSBwcm5nICAgICAgVGhlIFBSTkcgdG8gZXhwb3J0CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IHNvYmVyMTI4X2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgcHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhvdXQgICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHBybmcgICAhPSBOVUxMKTsKKworICAgaWYgKCpvdXRsZW4gPCA2NCkgeworICAgICAgKm91dGxlbiA9IDY0OworICAgICAgcmV0dXJuIENSWVBUX0JVRkZFUl9PVkVSRkxPVzsKKyAgIH0KKworICAgaWYgKHNvYmVyMTI4X3JlYWQob3V0LCA2NCwgcHJuZykgIT0gNjQpIHsKKyAgICAgIHJldHVybiBDUllQVF9FUlJPUl9SRUFEUFJORzsKKyAgIH0KKyAgICpvdXRsZW4gPSA2NDsKKworICAgcmV0dXJuIENSWVBUX09LOworfQorIAorLyoqCisgIEltcG9ydCBhIFBSTkcgc3RhdGUKKyAgQHBhcmFtIGluICAgICAgIFRoZSBQUk5HIHN0YXRlCisgIEBwYXJhbSBpbmxlbiAgICBTaXplIG9mIHRoZSBzdGF0ZQorICBAcGFyYW0gcHJuZyAgICAgVGhlIFBSTkcgdG8gaW1wb3J0CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IHNvYmVyMTI4X2ltcG9ydChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgcHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgIGludCBlcnI7CisgICBMVENfQVJHQ0hLKGluICAgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CisKKyAgIGlmIChpbmxlbiAhPSA2NCkgeworICAgICAgcmV0dXJuIENSWVBUX0lOVkFMSURfQVJHOworICAgfQorICAgCisgICBpZiAoKGVyciA9IHNvYmVyMTI4X3N0YXJ0KHBybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIGlmICgoZXJyID0gc29iZXIxMjhfYWRkX2VudHJvcHkoaW4sIDY0LCBwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICByZXR1cm4gc29iZXIxMjhfcmVhZHkocHJuZyk7Cit9CisKKy8qKgorICBQUk5HIHNlbGYtdGVzdAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3RpbmcgaGFzIGJlZW4gZGlzYWJsZWQKKyovICAKK2ludCBzb2JlcjEyOF90ZXN0KHZvaWQpCit7CisjaWZuZGVmIExUQ19URVNUCisgICByZXR1cm4gQ1JZUFRfTk9QOworI2Vsc2UKKyAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeyAKKyAgICAgaW50IGtleWxlbiwgaXZsZW4sIGxlbjsKKyAgICAgdW5zaWduZWQgY2hhciBrZXlbMTZdLCBpdls0XSwgb3V0WzIwXTsKKyAgIH0gdGVzdHNbXSA9IHsKKworeworICAgMTYsIDQsIDIwLAorCisgICAvKiBrZXkgKi8KKyAgIHsgMHg3NCwgMHg2NSwgMHg3MywgMHg3NCwgMHgyMCwgMHg2YiwgMHg2NSwgMHg3OSwgCisgICAgIDB4MjAsIDB4MzEsIDB4MzIsIDB4MzgsIDB4NjIsIDB4NjksIDB4NzQsIDB4NzMgfSwKKworICAgLyogSVYgKi8KKyAgIHsgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCB9LAorCisgICAvKiBleHBlY3RlZCBvdXRwdXQgKi8KKyAgIHsgMHg0MywgMHg1MCwgMHgwYywgMHhjZiwgMHg4OSwgMHg5MSwgMHg5ZiwgMHgxZCwKKyAgICAgMHhhYSwgMHgzNywgMHg3NCwgMHg5NSwgMHhmNCwgMHhiNCwgMHg1OCwgMHhjMiwgCisgICAgIDB4NDAsIDB4MzcsIDB4OGIsIDB4YmIgfQorfQorCit9OworICAgcHJuZ19zdGF0ZSAgICBwcm5nOworICAgdW5zaWduZWQgY2hhciBkc3RbMjBdOworICAgaW50ICAgICAgICAgICBlcnIsIHg7CisKKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YodGVzdHMpL3NpemVvZih0ZXN0c1swXSkpOyB4KyspIHsKKyAgICAgICBpZiAoKGVyciA9IHNvYmVyMTI4X3N0YXJ0KCZwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgIH0KKyAgICAgICBpZiAoKGVyciA9IHNvYmVyMTI4X2FkZF9lbnRyb3B5KHRlc3RzW3hdLmtleSwgdGVzdHNbeF0ua2V5bGVuLCAmcHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICB9CisgICAgICAgLyogYWRkIElWICovCisgICAgICAgaWYgKChlcnIgPSBzb2JlcjEyOF9hZGRfZW50cm9weSh0ZXN0c1t4XS5pdiwgdGVzdHNbeF0uaXZsZW4sICZwcm5nKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgIH0KKworICAgICAgIC8qIHJlYWR5IHVwICovCisgICAgICAgaWYgKChlcnIgPSBzb2JlcjEyOF9yZWFkeSgmcHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICB9CisgICAgICAgWE1FTVNFVChkc3QsIDAsIHRlc3RzW3hdLmxlbik7CisgICAgICAgaWYgKHNvYmVyMTI4X3JlYWQoZHN0LCB0ZXN0c1t4XS5sZW4sICZwcm5nKSAhPSAodW5zaWduZWQgbG9uZyl0ZXN0c1t4XS5sZW4pIHsKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRVJST1JfUkVBRFBSTkc7CisgICAgICAgfQorICAgICAgIHNvYmVyMTI4X2RvbmUoJnBybmcpOworICAgICAgIGlmIChYTUVNQ01QKGRzdCwgdGVzdHNbeF0ub3V0LCB0ZXN0c1t4XS5sZW4pKSB7CisjaWYgMAorICAgICAgICAgIHByaW50ZigiXG5cblNPQkVSMTI4IGZhaWxlZCwgSSBnb3Q6XG4iKTsgCisgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IHRlc3RzW3hdLmxlbjsgeSsrKSBwcmludGYoIiUwMnggIiwgZHN0W3ldKTsKKyAgICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgICByZXR1cm4gQ1JZUFRfRkFJTF9URVNUVkVDVE9SOworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBDUllQVF9PSzsKKyNlbmRpZgorfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC9zcmMvcHJuZ3Mvc29iZXIxMjguYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS44ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA1IDAwOjExOjM2ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9zb2JlcjEyOHRhYi5jIGIvbGlidG9tY3J5cHQvc3JjL3BybmdzL3NvYmVyMTI4dGFiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwYzc3YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9zb2JlcjEyOHRhYi5jCkBAIC0wLDAgKzEsMTYyIEBACisvKiogCisgICBAZmlsZSBzb2JlcjEyOHRhYi5jCisgICBTT0JFUi0xMjggVGFibGVzCisqLyAgIAorLyogJElkOiBzb2JlcjEyOHRhYi5jLHYgMS4yIDIwMDUvMDUvMDUgMTQ6MzU6NTkgdG9tIEV4cCAkICovCisvKiBAKCMpVHVyaW5nTXVsdGFiLmggICAxLjMgKFFVQUxDT01NKSAwMi8wOS8wMyAqLworLyogTXVsdGlwbGljYXRpb24gdGFibGUgZm9yIFR1cmluZyB1c2luZyAweEQwMkI0MzY3ICovCitzdGF0aWMgY29uc3QgdWxvbmczMiBNdWx0YWJbMjU2XSA9IHsKKyAgICAweDAwMDAwMDAwLCAweEQwMkI0MzY3LCAweEVENTY4NkNFLCAweDNEN0RDNUE5LAorICAgIDB4OTdBQzQxRDEsIDB4NDc4NzAyQjYsIDB4N0FGQUM3MUYsIDB4QUFEMTg0NzgsCisgICAgMHg2MzE1ODJFRiwgMHhCMzNFQzE4OCwgMHg4RTQzMDQyMSwgMHg1RTY4NDc0NiwKKyAgICAweEY0QjlDMzNFLCAweDI0OTI4MDU5LCAweDE5RUY0NUYwLCAweEM5QzQwNjk3LAorICAgIDB4QzYyQTQ5OTMsIDB4MTYwMTBBRjQsIDB4MkI3Q0NGNUQsIDB4RkI1NzhDM0EsCisgICAgMHg1MTg2MDg0MiwgMHg4MUFENEIyNSwgMHhCQ0QwOEU4QywgMHg2Q0ZCQ0RFQiwKKyAgICAweEE1M0ZDQjdDLCAweDc1MTQ4ODFCLCAweDQ4Njk0REIyLCAweDk4NDIwRUQ1LAorICAgIDB4MzI5MzhBQUQsIDB4RTJCOEM5Q0EsIDB4REZDNTBDNjMsIDB4MEZFRTRGMDQsCisgICAgMHhDMTU0OTI2QiwgMHgxMTdGRDEwQywgMHgyQzAyMTRBNSwgMHhGQzI5NTdDMiwKKyAgICAweDU2RjhEM0JBLCAweDg2RDM5MERELCAweEJCQUU1NTc0LCAweDZCODUxNjEzLAorICAgIDB4QTI0MTEwODQsIDB4NzI2QTUzRTMsIDB4NEYxNzk2NEEsIDB4OUYzQ0Q1MkQsCisgICAgMHgzNUVENTE1NSwgMHhFNUM2MTIzMiwgMHhEOEJCRDc5QiwgMHgwODkwOTRGQywKKyAgICAweDA3N0VEQkY4LCAweEQ3NTU5ODlGLCAweEVBMjg1RDM2LCAweDNBMDMxRTUxLAorICAgIDB4OTBEMjlBMjksIDB4NDBGOUQ5NEUsIDB4N0Q4NDFDRTcsIDB4QURBRjVGODAsCisgICAgMHg2NDZCNTkxNywgMHhCNDQwMUE3MCwgMHg4OTNEREZEOSwgMHg1OTE2OUNCRSwKKyAgICAweEYzQzcxOEM2LCAweDIzRUM1QkExLCAweDFFOTE5RTA4LCAweENFQkFERDZGLAorICAgIDB4Q0ZBODY5RDYsIDB4MUY4MzJBQjEsIDB4MjJGRUVGMTgsIDB4RjJENUFDN0YsCisgICAgMHg1ODA0MjgwNywgMHg4ODJGNkI2MCwgMHhCNTUyQUVDOSwgMHg2NTc5RURBRSwKKyAgICAweEFDQkRFQjM5LCAweDdDOTZBODVFLCAweDQxRUI2REY3LCAweDkxQzAyRTkwLAorICAgIDB4M0IxMUFBRTgsIDB4RUIzQUU5OEYsIDB4RDY0NzJDMjYsIDB4MDY2QzZGNDEsCisgICAgMHgwOTgyMjA0NSwgMHhEOUE5NjMyMiwgMHhFNEQ0QTY4QiwgMHgzNEZGRTVFQywKKyAgICAweDlFMkU2MTk0LCAweDRFMDUyMkYzLCAweDczNzhFNzVBLCAweEEzNTNBNDNELAorICAgIDB4NkE5N0EyQUEsIDB4QkFCQ0UxQ0QsIDB4ODdDMTI0NjQsIDB4NTdFQTY3MDMsCisgICAgMHhGRDNCRTM3QiwgMHgyRDEwQTAxQywgMHgxMDZENjVCNSwgMHhDMDQ2MjZEMiwKKyAgICAweDBFRkNGQkJELCAweERFRDdCOERBLCAweEUzQUE3RDczLCAweDMzODEzRTE0LAorICAgIDB4OTk1MEJBNkMsIDB4NDk3QkY5MEIsIDB4NzQwNjNDQTIsIDB4QTQyRDdGQzUsCisgICAgMHg2REU5Nzk1MiwgMHhCREMyM0EzNSwgMHg4MEJGRkY5QywgMHg1MDk0QkNGQiwKKyAgICAweEZBNDUzODgzLCAweDJBNkU3QkU0LCAweDE3MTNCRTRELCAweEM3MzhGRDJBLAorICAgIDB4QzhENkIyMkUsIDB4MThGREYxNDksIDB4MjU4MDM0RTAsIDB4RjVBQjc3ODcsCisgICAgMHg1RjdBRjNGRiwgMHg4RjUxQjA5OCwgMHhCMjJDNzUzMSwgMHg2MjA3MzY1NiwKKyAgICAweEFCQzMzMEMxLCAweDdCRTg3M0E2LCAweDQ2OTVCNjBGLCAweDk2QkVGNTY4LAorICAgIDB4M0M2RjcxMTAsIDB4RUM0NDMyNzcsIDB4RDEzOUY3REUsIDB4MDExMkI0QjksCisgICAgMHhEMzFERDJFMSwgMHgwMzM2OTE4NiwgMHgzRTRCNTQyRiwgMHhFRTYwMTc0OCwKKyAgICAweDQ0QjE5MzMwLCAweDk0OUFEMDU3LCAweEE5RTcxNUZFLCAweDc5Q0M1Njk5LAorICAgIDB4QjAwODUwMEUsIDB4NjAyMzEzNjksIDB4NUQ1RUQ2QzAsIDB4OEQ3NTk1QTcsCisgICAgMHgyN0E0MTFERiwgMHhGNzhGNTJCOCwgMHhDQUYyOTcxMSwgMHgxQUQ5RDQ3NiwKKyAgICAweDE1Mzc5QjcyLCAweEM1MUNEODE1LCAweEY4NjExREJDLCAweDI4NEE1RURCLAorICAgIDB4ODI5QkRBQTMsIDB4NTJCMDk5QzQsIDB4NkZDRDVDNkQsIDB4QkZFNjFGMEEsCisgICAgMHg3NjIyMTk5RCwgMHhBNjA5NUFGQSwgMHg5Qjc0OUY1MywgMHg0QjVGREMzNCwKKyAgICAweEUxOEU1ODRDLCAweDMxQTUxQjJCLCAweDBDRDhERTgyLCAweERDRjM5REU1LAorICAgIDB4MTI0OTQwOEEsIDB4QzI2MjAzRUQsIDB4RkYxRkM2NDQsIDB4MkYzNDg1MjMsCisgICAgMHg4NUU1MDE1QiwgMHg1NUNFNDIzQywgMHg2OEIzODc5NSwgMHhCODk4QzRGMiwKKyAgICAweDcxNUNDMjY1LCAweEExNzc4MTAyLCAweDlDMEE0NEFCLCAweDRDMjEwN0NDLAorICAgIDB4RTZGMDgzQjQsIDB4MzZEQkMwRDMsIDB4MEJBNjA1N0EsIDB4REI4RDQ2MUQsCisgICAgMHhENDYzMDkxOSwgMHgwNDQ4NEE3RSwgMHgzOTM1OEZENywgMHhFOTFFQ0NCMCwKKyAgICAweDQzQ0Y0OEM4LCAweDkzRTQwQkFGLCAweEFFOTlDRTA2LCAweDdFQjI4RDYxLAorICAgIDB4Qjc3NjhCRjYsIDB4Njc1REM4OTEsIDB4NUEyMDBEMzgsIDB4OEEwQjRFNUYsCisgICAgMHgyMERBQ0EyNywgMHhGMEYxODk0MCwgMHhDRDhDNENFOSwgMHgxREE3MEY4RSwKKyAgICAweDFDQjVCQjM3LCAweENDOUVGODUwLCAweEYxRTMzREY5LCAweDIxQzg3RTlFLAorICAgIDB4OEIxOUZBRTYsIDB4NUIzMkI5ODEsIDB4NjY0RjdDMjgsIDB4QjY2NDNGNEYsCisgICAgMHg3RkEwMzlEOCwgMHhBRjhCN0FCRiwgMHg5MkY2QkYxNiwgMHg0MkRERkM3MSwKKyAgICAweEU4MEM3ODA5LCAweDM4MjczQjZFLCAweDA1NUFGRUM3LCAweEQ1NzFCREEwLAorICAgIDB4REE5RkYyQTQsIDB4MEFCNEIxQzMsIDB4MzdDOTc0NkEsIDB4RTdFMjM3MEQsCisgICAgMHg0RDMzQjM3NSwgMHg5RDE4RjAxMiwgMHhBMDY1MzVCQiwgMHg3MDRFNzZEQywKKyAgICAweEI5OEE3MDRCLCAweDY5QTEzMzJDLCAweDU0RENGNjg1LCAweDg0RjdCNUUyLAorICAgIDB4MkUyNjMxOUEsIDB4RkUwRDcyRkQsIDB4QzM3MEI3NTQsIDB4MTM1QkY0MzMsCisgICAgMHhEREUxMjk1QywgMHgwRENBNkEzQiwgMHgzMEI3QUY5MiwgMHhFMDlDRUNGNSwKKyAgICAweDRBNEQ2ODhELCAweDlBNjYyQkVBLCAweEE3MUJFRTQzLCAweDc3MzBBRDI0LAorICAgIDB4QkVGNEFCQjMsIDB4NkVERkU4RDQsIDB4NTNBMjJEN0QsIDB4ODM4OTZFMUEsCisgICAgMHgyOTU4RUE2MiwgMHhGOTczQTkwNSwgMHhDNDBFNkNBQywgMHgxNDI1MkZDQiwKKyAgICAweDFCQ0I2MENGLCAweENCRTAyM0E4LCAweEY2OURFNjAxLCAweDI2QjZBNTY2LAorICAgIDB4OEM2NzIxMUUsIDB4NUM0QzYyNzksIDB4NjEzMUE3RDAsIDB4QjExQUU0QjcsCisgICAgMHg3OERFRTIyMCwgMHhBOEY1QTE0NywgMHg5NTg4NjRFRSwgMHg0NUEzMjc4OSwKKyAgICAweEVGNzJBM0YxLCAweDNGNTlFMDk2LCAweDAyMjQyNTNGLCAweEQyMEY2NjU4LAorfTsKKworLyogJElkOiBzb2JlcjEyOHRhYi5jLHYgMS4yIDIwMDUvMDUvMDUgMTQ6MzU6NTkgdG9tIEV4cCAkICovCisvKiBTYm94IGZvciBTT0JFUi0xMjggKi8KKy8qCisgKiBUaGlzIGlzIHJlYWxseSB0aGUgY29tYmluYXRpb24gb2YgdHdvIFNCb3hlczsgdGhlIGxlYXN0IHNpZ25pZmljYW50CisgKiAyNCBiaXRzIGNvbWVzIGZyb206CisgKiA4LT4zMiBTYm94IGdlbmVyYXRlZCBieSBNaWxsYW4gZXQuIGFsLiBhdCBRdWVlbnNsYW5kIFVuaXZlcnNpdHkgb2YKKyAqIFRlY2hub2xvZ3kuIFNlZTogRS4gRGF3c29uLCBXLiBNaWxsYW4sIEwuIEJ1cm5ldHQsIEcuIENhcnRlciwKKyAqICJPbiB0aGUgRGVzaWduIG9mIDgqMzIgUy1ib3hlcyIuIFVucHVibGlzaGVkIHJlcG9ydCwgYnkgdGhlCisgKiBJbmZvcm1hdGlvbiBTeXN0ZW1zIFJlc2VhcmNoIENlbnRyZSwKKyAqIFF1ZWVuc2xhbmQgVW5pdmVyc2l0eSBvZiBUZWNobm9sb2d5LCAxOTk5LgorICogCisgKiBUaGUgbW9zdCBzaWduaWZpY2FudCA4IGJpdHMgYXJlIHRoZSBTa2lwamFjayAiRiB0YWJsZSIsIHdoaWNoIGNhbiBiZQorICogZm91bmQgYXQgaHR0cDovL2NzcmMubmlzdC5nb3YvQ3J5cHRvVG9vbGtpdC9za2lwamFjay9za2lwamFjay5wZGYgLgorICogSW4gdGhpcyBvcHRpbWlzZWQgdGFibGUsIHRob3VnaCwgdGhlIGludGVudCBpcyB0byBYT1IgdGhlIHdvcmQgZnJvbQorICogdGhlIHRhYmxlIHNlbGVjdGVkIGJ5IHRoZSBoaWdoIGJ5dGUgd2l0aCB0aGUgaW5wdXQgd29yZC4gVGh1cywgdGhlCisgKiBoaWdoIGJ5dGUgaXMgYWN0dWFsbHkgdGhlIFNraXBqYWNrIEYtdGFibGUgZW50cnkgWE9SRUQgd2l0aCBpdHMKKyAqIHRhYmxlIGluZGV4LgorICovCitzdGF0aWMgY29uc3QgdWxvbmczMiBTYm94WzI1Nl0gPSB7CisgICAgMHhhM2FhMTg4NywgMHhkNjVlNDM1YywgMHgwYjY1YzA0MiwgMHg4MDBlNmVmNCwKKyAgICAweGZjNTdlZTIwLCAweDRkODRmZWQzLCAweGYwNjZjNTAyLCAweGYzNTRlOGFlLAorICAgIDB4YmIyZWU5ZDksIDB4MjgxZjM4ZDQsIDB4MWY4MjliNWQsIDB4NzM1Y2RmM2MsCisgICAgMHg5NTg2NDI0OSwgMHhiYzJlMzk2MywgMHhhMWY0NDI5ZiwgMHhmNjQzMmMzNSwKKyAgICAweGY3ZjQwMzI1LCAweDNjYzBkZDcwLCAweDVmOTczZGVkLCAweDk5MDJkYzVlLAorICAgIDB4ZGExNzViNDIsIDB4NTkwMDEyYmYsIDB4ZGM5NGQ3OGMsIDB4MzlhYWIyNmIsCisgICAgMHg0YWMxMWI5YSwgMHg4YzE2ODE0NiwgMHhjM2VhOGVjNSwgMHgwNThhYzI4ZiwKKyAgICAweDUyZWQ1YzBmLCAweDI1YjQxMDFjLCAweDVhMmRiMDgyLCAweDM3MDkyOWUxLAorICAgIDB4MmExODQzZGUsIDB4ZmU4Mjk5ZmMsIDB4MjAyZmJjNGIsIDB4ODMzOTE1ZGQsCisgICAgMHgzM2E4MDNmYSwgMHhkNDQ2YjJkZSwgMHg0NjIzMzM0MiwgMHg0ZmNlZTdjMywKKyAgICAweDNhZDYwN2VmLCAweDllOTdlYmFiLCAweDUwN2Y4NTliLCAweGU4MWYyZTJmLAorICAgIDB4YzU1YjcxZGEsIDB4ZDdlMjI2OWEsIDB4MTMzOWMzZDEsIDB4N2NhNTZiMzYsCisgICAgMHhhNmM5ZGVmMiwgMHhiNWM5ZmM1ZiwgMHg1OTI3YjNhMywgMHg4OWE1NmRkZiwKKyAgICAweGM2MjViNTEwLCAweDU2MGY4NWE3LCAweGFjZTgyZTcxLCAweDJlY2I4ODE2LAorICAgIDB4NDQ5NTFlMmEsIDB4OTdmNWY2YWYsIDB4ZGZjYmMyYjMsIDB4Y2U0ZmY1NWQsCisgICAgMHhjYjZiNjIxNCwgMHgyYjBiODNlMywgMHg1NDllYTZmNSwgMHg5ZGUwNDFhZiwKKyAgICAweDc5MmYxZjE3LCAweGY3M2I5OWVlLCAweDM5YTY1ZWMwLCAweDRjNzAxNmM2LAorICAgIDB4ODU3NzA5YTQsIDB4ZDYzMjZlMDEsIDB4YzdiMjgwZDksIDB4NWNmYjE0MTgsCisgICAgMHhhNmFmZjIyNywgMHhmZDU0ODIwMywgMHg1MDZiOWQ5NiwgMHhhMTE3YThjMCwKKyAgICAweDljZDViZjZlLCAweGRjZWU3ODg4LCAweDYxZmNmZTY0LCAweGY3YTE5M2NkLAorICAgIDB4MDUwZDAxODQsIDB4ZThhZTQ5MzAsIDB4ODgwMTRmMzYsIDB4ZDZhODcwODgsCisgICAgMHg2YmFkNmMyYSwgMHgxNDIyYzY3OCwgMHhlOTIwNGRlNywgMHhiN2MyZTc1OSwKKyAgICAweDAyMDAyNDhlLCAweDAxM2I0NDZiLCAweGRhMGQ5ZmMyLCAweDA0MTRhODk1LAorICAgIDB4M2E2Y2MzYTEsIDB4NTZmZWYxNzAsIDB4ODZjMTkxNTUsIDB4Y2Y3YjhhNjYsCisgICAgMHg1NTFiNWU2OSwgMHhiNGE4NjIzZSwgMHhhMmJkZmEzNSwgMHhjNGYwNjhjYywKKyAgICAweDU3M2E2YWNkLCAweDYzNTVlOTM2LCAweDAzNjAyZGI5LCAweDBlZGYxM2MxLAorICAgIDB4MmQwYmIxNmQsIDB4Njk4MGI4M2MsIDB4ZmViMjM3NjMsIDB4M2RkOGE5MTEsCisgICAgMHgwMWI2YmMxMywgMHhmNTU1NzlkNywgMHhmNTVjMmZhOCwgMHgxOWY0MTk2ZSwKKyAgICAweGU3ZGI1NDc2LCAweDhkNjRhODY2LCAweGMwNmUxNmFkLCAweGIxN2ZjNTE1LAorICAgIDB4YzQ2ZmViM2MsIDB4OGJjOGEzMDYsIDB4YWQ2Nzk5ZDksIDB4NTcxYTkxMzMsCisgICAgMHg5OTI0NjZkZCwgMHg5MmViNWRjZCwgMHhhYzExOGY1MCwgMHg5ZmFmYjIyNiwKKyAgICAweGExYjljZWYzLCAweDNhYjM2MTg5LCAweDM0N2ExOWIxLCAweDYyYzczMDg0LAorICAgIDB4YzI3ZGVkNWMsIDB4NmM4YmM1OGYsIDB4MWNkZGU0MjEsIDB4ZWQxZTQ3ZmIsCisgICAgMHhjZGNjNzE1ZSwgMHhiOWMwZmY5OSwgMHg0YjEyMmYwZiwgMHhjNGQyNTE4NCwKKyAgICAweGFmN2E1ZTZjLCAweDViYmYxOGJjLCAweDhkZDdjNmUwLCAweDVmYjdlNDIwLAorICAgIDB4NTIxZjUyM2YsIDB4NGFkOWI4YTIsIDB4ZTlkYTFhNmIsIDB4OTc4ODhjMDIsCisgICAgMHgxOWQxZTM1NCwgMHg1YWJhN2Q3OSwgMHhhMmNjNzc1MywgMHg4YzJkOTY1NSwKKyAgICAweDE5ODI5ZGExLCAweDUzMTU5MGE3LCAweDE5YzFjMTQ5LCAweDNkNTM3ZjFjLAorICAgIDB4NTA3NzliNjksIDB4ZWQ3MWYyYjcsIDB4NDYzYzU4ZmEsIDB4NTJkYzQ0MTgsCisgICAgMHhjMThjOGM3NiwgMHhjMTIwZDlmMCwgMHhhZmE4MGQ0ZCwgMHgzYjc0YzQ3MywKKyAgICAweGQwOTQxMGU5LCAweDI5MGU0MjExLCAweGMzYzgwODJiLCAweDhmNmIzMzRhLAorICAgIDB4M2JmNjhlZDIsIDB4YTg0M2NjMWIsIDB4OGQzYzBmZjMsIDB4MjBlNTY0YTAsCisgICAgMHhmOGY1NWE0ZiwgMHgyYjQwZjhlNywgMHhmZWE3ZjE1ZiwgMHhjZjAwZmUyMSwKKyAgICAweDhhNmQzN2Q2LCAweGQwZDUwNmYxLCAweGFkZTAwOTczLCAweGVmYmJkZTM2LAorICAgIDB4ODQ2NzBmYTgsIDB4ZmEzMWFiOWUsIDB4YWVkYWI2MTgsIDB4YzAxZjUyZjUsCisgICAgMHg2NTU4ZWI0ZiwgMHg3MWI5ZTM0MywgMHg0YjhkNzdkZCwgMHg4Y2I5M2RhNiwKKyAgICAweDc0MGZkNTJkLCAweDQyNTQxMmY4LCAweGM1YTYzMzYwLCAweDEwZTUzYWQwLAorICAgIDB4NWE3MDBmMWMsIDB4ODMyNGVkMGIsIDB4ZTUzZGMxZWMsIDB4MWEzNjY3OTUsCisgICAgMHg2ZDU0OWQxNSwgMHhjNWNlNDZkNywgMHhlMTdhYmU3NiwgMHg1ZjQ4ZTBhMCwKKyAgICAweGQwZjA3YzAyLCAweDk0MTI0OWI3LCAweGU0OWVkNmJhLCAweDM3YTQ3Zjc4LAorICAgIDB4ZTFjZmZmYmQsIDB4YjAwN2NhODQsIDB4YmI2NWY0ZGEsIDB4YjU5ZjM1ZGEsCisgICAgMHgzM2QyYWE0NCwgMHg0MTc0NTJhYywgMHhjMGQ2NzRhNywgMHgyZDYxYTQ2YSwKKyAgICAweGRjNjMxNTJhLCAweDNlMTJiN2FhLCAweDZlNjE1OTI3LCAweGExNGZiMTE4LAorICAgIDB4YTE1MTc1OGQsIDB4YmE4MTY4N2IsIDB4ZTE1MmYwYjMsIDB4NzY0MjU0ZWQsCisgICAgMHgzNGM3NzI3MSwgMHgwYTMxYWNhYiwgMHg1NGY5NGFlYywgMHhiOWU5OTRjZCwKKyAgICAweDU3NGQ5ZTgxLCAweDViNjIzNzMwLCAweGNlOGEyMWU4LCAweDM3OTE3ZjBiLAorICAgIDB4ZThhOWI1ZDYsIDB4OTY5N2FkZjgsIDB4ZjNkMzA0MzEsIDB4NWRjYWM5MjEsCisgICAgMHg3NmIzNWQ0NiwgMHhhYTQzMGEzNiwgMHhjMjE5NDAyMiwgMHgyMmJjYTY1ZSwKKyAgICAweGRhZWM3MGJhLCAweGRmYWVhOGNjLCAweDc3N2JhZThiLCAweDI0MjkyNGQ1LAorICAgIDB4MWYwOThhNWEsIDB4NGIzOTZiODEsIDB4NTVkZTI1MjIsIDB4NDM1YzFjYjgsCisgICAgMHhhZWI4ZmUxZCwgMHg5ZGIzYzY5NywgMHg1YjE2NGY4MywgMHhlMGMxNjM3NiwKKyAgICAweGEzMTkyMjRjLCAweGQwMjAzYjM1LCAweDQzM2FjMGZlLCAweDE0NjZhMTlhLAorICAgIDB4NDVmMGIyNGYsIDB4NTFmZGE5OTgsIDB4YzBkNTJkNzEsIDB4ZmEwODk2YTgsCisgICAgMHhmOWU2MDUzZiwgMHhhNGIwZDMwMCwgMHhkNDk5Y2JjYywgMHhiOTVlM2Q0MCwKK307CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy9zb2JlcjEyOHRhYi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIgJCAqLworLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvc3JjL3BybmdzL3Nwcm5nLmMgYi9saWJ0b21jcnlwdC9zcmMvcHJuZ3Mvc3BybmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTBlMzNkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvc3JjL3BybmdzL3Nwcm5nLmMKQEAgLTAsMCArMSwxMzYgQEAKKy8qIExpYlRvbUNyeXB0LCBtb2R1bGFyIGNyeXB0b2dyYXBoaWMgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21DcnlwdCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyB2YXJpb3VzIGNyeXB0b2dyYXBoaWMKKyAqIGFsZ29yaXRobXMgaW4gYSBoaWdobHkgbW9kdWxhciBhbmQgZmxleGlibGUgbWFubmVyLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL2xpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSAidG9tY3J5cHQuaCIKKworLyoqCisgICBAZmlsZSBzcHJuZy5jCisgICBTZWN1cmUgUFJORywgVG9tIFN0IERlbmlzCisqLworICAgCisvKiBBIHNlY3VyZSBQUk5HIHVzaW5nIHRoZSBSTkcgZnVuY3Rpb25zLiAgQmFzaWNhbGx5IHRoaXMgaXMgYQorICogd3JhcHBlciB0aGF0IGFsbG93cyB5b3UgdG8gdXNlIGEgc2VjdXJlIFJORyBhcyBhIFBSTkcKKyAqIGluIHRoZSB2YXJpb3VzIG90aGVyIGZ1bmN0aW9ucy4KKyAqLworCisjaWZkZWYgU1BSTkcKKworY29uc3Qgc3RydWN0IGx0Y19wcm5nX2Rlc2NyaXB0b3Igc3BybmdfZGVzYyA9Cit7CisgICAgInNwcm5nIiwgMCwKKyAgICAmc3Bybmdfc3RhcnQsCisgICAgJnNwcm5nX2FkZF9lbnRyb3B5LAorICAgICZzcHJuZ19yZWFkeSwKKyAgICAmc3BybmdfcmVhZCwKKyAgICAmc3BybmdfZG9uZSwKKyAgICAmc3BybmdfZXhwb3J0LAorICAgICZzcHJuZ19pbXBvcnQsCisgICAgJnNwcm5nX3Rlc3QKK307CisKKy8qKgorICBTdGFydCB0aGUgUFJORworICBAcGFyYW0gcHJuZyAgICAgW291dF0gVGhlIFBSTkcgc3RhdGUgdG8gaW5pdGlhbGl6ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAKK2ludCBzcHJuZ19zdGFydChwcm5nX3N0YXRlICpwcm5nKQoreworICAgcmV0dXJuIENSWVBUX09LOyAgCit9CisKKy8qKgorICBBZGQgZW50cm9weSB0byB0aGUgUFJORyBzdGF0ZQorICBAcGFyYW0gaW4gICAgICAgVGhlIGRhdGEgdG8gYWRkCisgIEBwYXJhbSBpbmxlbiAgICBMZW5ndGggb2YgdGhlIGRhdGEgdG8gYWRkCisgIEBwYXJhbSBwcm5nICAgICBQUk5HIHN0YXRlIHRvIHVwZGF0ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAKK2ludCBzcHJuZ19hZGRfZW50cm9weShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgcHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIE1ha2UgdGhlIFBSTkcgcmVhZHkgdG8gcmVhZCBmcm9tCisgIEBwYXJhbSBwcm5nICAgVGhlIFBSTkcgdG8gbWFrZSBhY3RpdmUKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLyAgCitpbnQgc3BybmdfcmVhZHkocHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIFJlYWQgZnJvbSB0aGUgUFJORworICBAcGFyYW0gb3V0ICAgICAgRGVzdGluYXRpb24KKyAgQHBhcmFtIG91dGxlbiAgIExlbmd0aCBvZiBvdXRwdXQKKyAgQHBhcmFtIHBybmcgICAgIFRoZSBhY3RpdmUgUFJORyB0byByZWFkIGZyb20KKyAgQHJldHVybiBOdW1iZXIgb2Ygb2N0ZXRzIHJlYWQKKyovICAKK3Vuc2lnbmVkIGxvbmcgc3BybmdfcmVhZCh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgb3V0bGVuLCBwcm5nX3N0YXRlICpwcm5nKQoreworICAgTFRDX0FSR0NISyhvdXQgIT0gTlVMTCk7CisgICByZXR1cm4gcm5nX2dldF9ieXRlcyhvdXQsIG91dGxlbiwgTlVMTCk7Cit9CisKKy8qKgorICBUZXJtaW5hdGUgdGhlIFBSTkcKKyAgQHBhcmFtIHBybmcgICBUaGUgUFJORyB0byB0ZXJtaW5hdGUKKyAgQHJldHVybiBDUllQVF9PSyBpZiBzdWNjZXNzZnVsCisqLyAgCitpbnQgc3BybmdfZG9uZShwcm5nX3N0YXRlICpwcm5nKQoreworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgRXhwb3J0IHRoZSBQUk5HIHN0YXRlCisgIEBwYXJhbSBvdXQgICAgICAgW291dF0gRGVzdGluYXRpb24KKyAgQHBhcmFtIG91dGxlbiAgICBbaW4vb3V0XSBNYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHN0YXRlCisgIEBwYXJhbSBwcm5nICAgICAgVGhlIFBSTkcgdG8gZXhwb3J0CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IHNwcm5nX2V4cG9ydCh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgKm91dGxlbiwgcHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworCisgICAqb3V0bGVuID0gMDsKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKyAKKy8qKgorICBJbXBvcnQgYSBQUk5HIHN0YXRlCisgIEBwYXJhbSBpbiAgICAgICBUaGUgUFJORyBzdGF0ZQorICBAcGFyYW0gaW5sZW4gICAgU2l6ZSBvZiB0aGUgc3RhdGUKKyAgQHBhcmFtIHBybmcgICAgIFRoZSBQUk5HIHRvIGltcG9ydAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAKK2ludCBzcHJuZ19pbXBvcnQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGxvbmcgaW5sZW4sIHBybmdfc3RhdGUgKnBybmcpCit7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKy8qKgorICBQUk5HIHNlbGYtdGVzdAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3RpbmcgaGFzIGJlZW4gZGlzYWJsZWQKKyovICAKK2ludCBzcHJuZ190ZXN0KHZvaWQpCit7CisgICByZXR1cm4gQ1JZUFRfT0s7Cit9CisKKyNlbmRpZgorCisKKyAKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvc3JjL3BybmdzL3Nwcm5nLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxNTozNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC9zcmMvcHJuZ3MveWFycm93LmMgYi9saWJ0b21jcnlwdC9zcmMvcHJuZ3MveWFycm93LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZiZDRmNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy95YXJyb3cuYwpAQCAtMCwwICsxLDM2MiBAQAorLyogTGliVG9tQ3J5cHQsIG1vZHVsYXIgY3J5cHRvZ3JhcGhpYyBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbUNyeXB0IGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIHZhcmlvdXMgY3J5cHRvZ3JhcGhpYworICogYWxnb3JpdGhtcyBpbiBhIGhpZ2hseSBtb2R1bGFyIGFuZCBmbGV4aWJsZSBtYW5uZXIuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlICJ0b21jcnlwdC5oIgorCisvKioKKyAgQGZpbGUgeWFycm93LmMKKyAgWWFycm93IFBSTkcsIFRvbSBTdCBEZW5pcworKi8gIAorCisjaWZkZWYgWUFSUk9XCisKK2NvbnN0IHN0cnVjdCBsdGNfcHJuZ19kZXNjcmlwdG9yIHlhcnJvd19kZXNjID0KK3sKKyAgICAieWFycm93IiwgNjQsCisgICAgJnlhcnJvd19zdGFydCwKKyAgICAmeWFycm93X2FkZF9lbnRyb3B5LAorICAgICZ5YXJyb3dfcmVhZHksCisgICAgJnlhcnJvd19yZWFkLAorICAgICZ5YXJyb3dfZG9uZSwKKyAgICAmeWFycm93X2V4cG9ydCwKKyAgICAmeWFycm93X2ltcG9ydCwKKyAgICAmeWFycm93X3Rlc3QKK307CisKKy8qKgorICBTdGFydCB0aGUgUFJORworICBAcGFyYW0gcHJuZyAgICAgW291dF0gVGhlIFBSTkcgc3RhdGUgdG8gaW5pdGlhbGl6ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAKK2ludCB5YXJyb3dfc3RhcnQocHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgIGludCBlcnI7CisgICAKKyAgIExUQ19BUkdDSEsocHJuZyAhPSBOVUxMKTsKKworICAgLyogdGhlc2UgYXJlIHRoZSBkZWZhdWx0IGhhc2gvY2lwaGVyIGNvbWJvIHVzZWQgKi8KKyNpZmRlZiBSSUpOREFFTAorI2lmICAgIFlBUlJPV19BRVM9PTAKKyAgIHBybmctPnlhcnJvdy5jaXBoZXIgPSByZWdpc3Rlcl9jaXBoZXIoJnJpam5kYWVsX2VuY19kZXNjKTsKKyNlbGlmICBZQVJST1dfQUVTPT0xCisgICBwcm5nLT55YXJyb3cuY2lwaGVyID0gcmVnaXN0ZXJfY2lwaGVyKCZhZXNfZW5jX2Rlc2MpOworI2VsaWYgIFlBUlJPV19BRVM9PTIKKyAgIHBybmctPnlhcnJvdy5jaXBoZXIgPSByZWdpc3Rlcl9jaXBoZXIoJnJpam5kYWVsX2Rlc2MpOworI2VsaWYgIFlBUlJPV19BRVM9PTMKKyAgIHBybmctPnlhcnJvdy5jaXBoZXIgPSByZWdpc3Rlcl9jaXBoZXIoJmFlc19kZXNjKTsKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChCTE9XRklTSCkKKyAgIHBybmctPnlhcnJvdy5jaXBoZXIgPSByZWdpc3Rlcl9jaXBoZXIoJmJsb3dmaXNoX2Rlc2MpOworI2VsaWYgZGVmaW5lZChUV09GSVNIKQorICAgcHJuZy0+eWFycm93LmNpcGhlciA9IHJlZ2lzdGVyX2NpcGhlcigmdHdvZmlzaF9kZXNjKTsKKyNlbGlmIGRlZmluZWQoUkM2KQorICAgcHJuZy0+eWFycm93LmNpcGhlciA9IHJlZ2lzdGVyX2NpcGhlcigmcmM2X2Rlc2MpOworI2VsaWYgZGVmaW5lZChSQzUpCisgICBwcm5nLT55YXJyb3cuY2lwaGVyID0gcmVnaXN0ZXJfY2lwaGVyKCZyYzVfZGVzYyk7CisjZWxpZiBkZWZpbmVkKFNBRkVSUCkKKyAgIHBybmctPnlhcnJvdy5jaXBoZXIgPSByZWdpc3Rlcl9jaXBoZXIoJnNhZmVycF9kZXNjKTsKKyNlbGlmIGRlZmluZWQoUkMyKQorICAgcHJuZy0+eWFycm93LmNpcGhlciA9IHJlZ2lzdGVyX2NpcGhlcigmcmMyX2Rlc2MpOworI2VsaWYgZGVmaW5lZChOT0VLRU9OKSAgIAorICAgcHJuZy0+eWFycm93LmNpcGhlciA9IHJlZ2lzdGVyX2NpcGhlcigmbm9la2Vvbl9kZXNjKTsKKyNlbGlmIGRlZmluZWQoQU5VQklTKSAgIAorICAgcHJuZy0+eWFycm93LmNpcGhlciA9IHJlZ2lzdGVyX2NpcGhlcigmYW51YmlzX2Rlc2MpOworI2VsaWYgZGVmaW5lZChLU0VFRCkgICAKKyAgIHBybmctPnlhcnJvdy5jaXBoZXIgPSByZWdpc3Rlcl9jaXBoZXIoJmtzZWVkX2Rlc2MpOworI2VsaWYgZGVmaW5lZChLSEFaQUQpICAgCisgICBwcm5nLT55YXJyb3cuY2lwaGVyID0gcmVnaXN0ZXJfY2lwaGVyKCZraGF6YWRfZGVzYyk7CisjZWxpZiBkZWZpbmVkKENBU1Q1KQorICAgcHJuZy0+eWFycm93LmNpcGhlciA9IHJlZ2lzdGVyX2NpcGhlcigmY2FzdDVfZGVzYyk7CisjZWxpZiBkZWZpbmVkKFhURUEpCisgICBwcm5nLT55YXJyb3cuY2lwaGVyID0gcmVnaXN0ZXJfY2lwaGVyKCZ4dGVhX2Rlc2MpOworI2VsaWYgZGVmaW5lZChTQUZFUikKKyAgIHBybmctPnlhcnJvdy5jaXBoZXIgPSByZWdpc3Rlcl9jaXBoZXIoJnNhZmVyX3NrMTI4X2Rlc2MpOworI2VsaWYgZGVmaW5lZChERVMpCisgICBwcm5nLT55YXJyb3cuY2lwaGVyID0gcmVnaXN0ZXJfY2lwaGVyKCZkZXMzX2Rlc2MpOworI2Vsc2UKKyAgICNlcnJvciBZQVJST1cgbmVlZHMgYXQgbGVhc3Qgb25lIENJUEhFUgorI2VuZGlmCisgICBpZiAoKGVyciA9IGNpcGhlcl9pc192YWxpZChwcm5nLT55YXJyb3cuY2lwaGVyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyNpZmRlZiBTSEEyNTYKKyAgIHBybmctPnlhcnJvdy5oYXNoICAgPSByZWdpc3Rlcl9oYXNoKCZzaGEyNTZfZGVzYyk7CisjZWxpZiBkZWZpbmVkKFNIQTUxMikKKyAgIHBybmctPnlhcnJvdy5oYXNoICAgPSByZWdpc3Rlcl9oYXNoKCZzaGE1MTJfZGVzYyk7CisjZWxpZiBkZWZpbmVkKFRJR0VSKQorICAgcHJuZy0+eWFycm93Lmhhc2ggICA9IHJlZ2lzdGVyX2hhc2goJnRpZ2VyX2Rlc2MpOworI2VsaWYgZGVmaW5lZChTSEExKQorICAgcHJuZy0+eWFycm93Lmhhc2ggICA9IHJlZ2lzdGVyX2hhc2goJnNoYTFfZGVzYyk7CisjZWxpZiBkZWZpbmVkKFJJUEVNRDMyMCkKKyAgIHBybmctPnlhcnJvdy5oYXNoICAgPSByZWdpc3Rlcl9oYXNoKCZybWQzMjBfZGVzYyk7CisjZWxpZiBkZWZpbmVkKFJJUEVNRDI1NikKKyAgIHBybmctPnlhcnJvdy5oYXNoICAgPSByZWdpc3Rlcl9oYXNoKCZybWQyNTZfZGVzYyk7CisjZWxpZiBkZWZpbmVkKFJJUEVNRDE2MCkKKyAgIHBybmctPnlhcnJvdy5oYXNoICAgPSByZWdpc3Rlcl9oYXNoKCZybWQxNjBfZGVzYyk7CisjZWxpZiBkZWZpbmVkKFJJUEVNRDEyOCkKKyAgIHBybmctPnlhcnJvdy5oYXNoICAgPSByZWdpc3Rlcl9oYXNoKCZybWQxMjhfZGVzYyk7CisjZWxpZiBkZWZpbmVkKE1ENSkKKyAgIHBybmctPnlhcnJvdy5oYXNoICAgPSByZWdpc3Rlcl9oYXNoKCZtZDVfZGVzYyk7CisjZWxpZiBkZWZpbmVkKE1ENCkKKyAgIHBybmctPnlhcnJvdy5oYXNoICAgPSByZWdpc3Rlcl9oYXNoKCZtZDRfZGVzYyk7CisjZWxpZiBkZWZpbmVkKE1EMikKKyAgIHBybmctPnlhcnJvdy5oYXNoICAgPSByZWdpc3Rlcl9oYXNoKCZtZDJfZGVzYyk7CisjZWxpZiBkZWZpbmVkKFdISVJMUE9PTCkKKyAgIHBybmctPnlhcnJvdy5oYXNoICAgPSByZWdpc3Rlcl9oYXNoKCZ3aGlybHBvb2xfZGVzYyk7CisjZWxzZQorICAgI2Vycm9yIFlBUlJPVyBuZWVkcyBhdCBsZWFzdCBvbmUgSEFTSAorI2VuZGlmCisgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQocHJuZy0+eWFycm93Lmhhc2gpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogemVybyB0aGUgbWVtb3J5IHVzZWQgKi8KKyAgIHplcm9tZW0ocHJuZy0+eWFycm93LnBvb2wsIHNpemVvZihwcm5nLT55YXJyb3cucG9vbCkpOworICAgTFRDX01VVEVYX0lOSVQoJnBybmctPnlhcnJvdy5wcm5nX2xvY2spCisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKworLyoqCisgIEFkZCBlbnRyb3B5IHRvIHRoZSBQUk5HIHN0YXRlCisgIEBwYXJhbSBpbiAgICAgICBUaGUgZGF0YSB0byBhZGQKKyAgQHBhcmFtIGlubGVuICAgIExlbmd0aCBvZiB0aGUgZGF0YSB0byBhZGQKKyAgQHBhcmFtIHBybmcgICAgIFBSTkcgc3RhdGUgdG8gdXBkYXRlCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IHlhcnJvd19hZGRfZW50cm9weShjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgbG9uZyBpbmxlbiwgcHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgIGhhc2hfc3RhdGUgbWQ7CisgICBpbnQgZXJyOworCisgICBMVENfQVJHQ0hLKGluICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsocHJuZyAhPSBOVUxMKTsKKyAgIAorICAgTFRDX01VVEVYX0xPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOworICAgCisgICBpZiAoKGVyciA9IGhhc2hfaXNfdmFsaWQocHJuZy0+eWFycm93Lmhhc2gpKSAhPSBDUllQVF9PSykgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBzdGFydCB0aGUgaGFzaCAqLworICAgaWYgKChlcnIgPSBoYXNoX2Rlc2NyaXB0b3JbcHJuZy0+eWFycm93Lmhhc2hdLmluaXQoJm1kKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOworICAgICAgcmV0dXJuIGVycjsgCisgICB9CisKKyAgIC8qIGhhc2ggdGhlIGN1cnJlbnQgcG9vbCAqLworICAgaWYgKChlcnIgPSBoYXNoX2Rlc2NyaXB0b3JbcHJuZy0+eWFycm93Lmhhc2hdLnByb2Nlc3MoJm1kLCBwcm5nLT55YXJyb3cucG9vbCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hfZGVzY3JpcHRvcltwcm5nLT55YXJyb3cuaGFzaF0uaGFzaHNpemUpKSAhPSBDUllQVF9PSykgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBhZGQgdGhlIG5ldyBlbnRyb3B5ICovCisgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltwcm5nLT55YXJyb3cuaGFzaF0ucHJvY2VzcygmbWQsIGluLCBpbmxlbikpICE9IENSWVBUX09LKSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIHN0b3JlIHJlc3VsdCAqLworICAgaWYgKChlcnIgPSBoYXNoX2Rlc2NyaXB0b3JbcHJuZy0+eWFycm93Lmhhc2hdLmRvbmUoJm1kLCBwcm5nLT55YXJyb3cucG9vbCkpICE9IENSWVBUX09LKSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgTWFrZSB0aGUgUFJORyByZWFkeSB0byByZWFkIGZyb20KKyAgQHBhcmFtIHBybmcgICBUaGUgUFJORyB0byBtYWtlIGFjdGl2ZQorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAKK2ludCB5YXJyb3dfcmVhZHkocHJuZ19zdGF0ZSAqcHJuZykKK3sKKyAgIGludCBrcywgZXJyOworCisgICBMVENfQVJHQ0hLKHBybmcgIT0gTlVMTCk7CisgICBMVENfTVVURVhfTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisKKyAgIGlmICgoZXJyID0gaGFzaF9pc192YWxpZChwcm5nLT55YXJyb3cuaGFzaCkpICE9IENSWVBUX09LKSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICAKKyAgIGlmICgoZXJyID0gY2lwaGVyX2lzX3ZhbGlkKHBybmctPnlhcnJvdy5jaXBoZXIpKSAhPSBDUllQVF9PSykgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICAvKiBzZXR1cCBDVFIgbW9kZSB1c2luZyB0aGUgInBvb2wiIGFzIHRoZSBrZXkgKi8KKyAgIGtzID0gKGludCloYXNoX2Rlc2NyaXB0b3JbcHJuZy0+eWFycm93Lmhhc2hdLmhhc2hzaXplOworICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvcltwcm5nLT55YXJyb3cuY2lwaGVyXS5rZXlzaXplKCZrcykpICE9IENSWVBUX09LKSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIGlmICgoZXJyID0gY3RyX3N0YXJ0KHBybmctPnlhcnJvdy5jaXBoZXIsICAgICAvKiB3aGF0IGNpcGhlciB0byB1c2UgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHBybmctPnlhcnJvdy5wb29sLCAgICAgICAvKiBJViAqLworICAgICAgICAgICAgICAgICAgICAgICAgcHJuZy0+eWFycm93LnBvb2wsIGtzLCAgIC8qIEtFWSBhbmQga2V5IHNpemUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBudW1iZXIgb2Ygcm91bmRzICovCisgICAgICAgICAgICAgICAgICAgICAgICBDVFJfQ09VTlRFUl9MSVRUTEVfRU5ESUFOLCAvKiBsaXR0bGUgZW5kaWFuIGNvdW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICZwcm5nLT55YXJyb3cuY3RyKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIExUQ19NVVRFWF9VTkxPQ0soJnBybmctPnlhcnJvdy5wcm5nX2xvY2spOworICAgcmV0dXJuIENSWVBUX09LOworfQorCisvKioKKyAgUmVhZCBmcm9tIHRoZSBQUk5HCisgIEBwYXJhbSBvdXQgICAgICBEZXN0aW5hdGlvbgorICBAcGFyYW0gb3V0bGVuICAgTGVuZ3RoIG9mIG91dHB1dAorICBAcGFyYW0gcHJuZyAgICAgVGhlIGFjdGl2ZSBQUk5HIHRvIHJlYWQgZnJvbQorICBAcmV0dXJuIE51bWJlciBvZiBvY3RldHMgcmVhZAorKi8gIAordW5zaWduZWQgbG9uZyB5YXJyb3dfcmVhZCh1bnNpZ25lZCBjaGFyICpvdXQsIHVuc2lnbmVkIGxvbmcgb3V0bGVuLCBwcm5nX3N0YXRlICpwcm5nKQoreworICAgTFRDX0FSR0NISyhvdXQgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwcm5nICE9IE5VTEwpOworCisgICBMVENfTVVURVhfTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisKKyAgIC8qIHB1dCBvdXQgaW4gcHJlZGljdGFibGUgc3RhdGUgZmlyc3QgKi8KKyAgIHplcm9tZW0ob3V0LCBvdXRsZW4pOworICAgCisgICAvKiBub3cgcmFuZG9taXplIGl0ICovCisgICBpZiAoY3RyX2VuY3J5cHQob3V0LCBvdXQsIG91dGxlbiwgJnBybmctPnlhcnJvdy5jdHIpICE9IENSWVBUX09LKSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKKyAgICAgIHJldHVybiAwOworICAgfQorICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisgICByZXR1cm4gb3V0bGVuOworfQorCisvKioKKyAgVGVybWluYXRlIHRoZSBQUk5HCisgIEBwYXJhbSBwcm5nICAgVGhlIFBSTkcgdG8gdGVybWluYXRlCisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IHlhcnJvd19kb25lKHBybmdfc3RhdGUgKnBybmcpCit7CisgICBpbnQgZXJyOworICAgTFRDX0FSR0NISyhwcm5nICE9IE5VTEwpOworCisgICBMVENfTVVURVhfTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisKKyAgIC8qIGNhbGwgY2lwaGVyIGRvbmUgd2hlbiB3ZSBpbnZlbnQgb25lIDstKSAqLworCisgICAvKiB3ZSBpbnZlbnRlZCBvbmUgKi8KKyAgIGVyciA9IGN0cl9kb25lKCZwcm5nLT55YXJyb3cuY3RyKTsKKyAgIAorICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisgICByZXR1cm4gZXJyOworfQorCisvKioKKyAgRXhwb3J0IHRoZSBQUk5HIHN0YXRlCisgIEBwYXJhbSBvdXQgICAgICAgW291dF0gRGVzdGluYXRpb24KKyAgQHBhcmFtIG91dGxlbiAgICBbaW4vb3V0XSBNYXggc2l6ZSBhbmQgcmVzdWx0aW5nIHNpemUgb2YgdGhlIHN0YXRlCisgIEBwYXJhbSBwcm5nICAgICAgVGhlIFBSTkcgdG8gZXhwb3J0CisgIEByZXR1cm4gQ1JZUFRfT0sgaWYgc3VjY2Vzc2Z1bAorKi8gIAoraW50IHlhcnJvd19leHBvcnQodW5zaWduZWQgY2hhciAqb3V0LCB1bnNpZ25lZCBsb25nICpvdXRsZW4sIHBybmdfc3RhdGUgKnBybmcpCit7CisgICBMVENfQVJHQ0hLKG91dCAgICAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsob3V0bGVuICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwcm5nICAgIT0gTlVMTCk7CisKKyAgIExUQ19NVVRFWF9MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKKworICAgLyogd2UnbGwgd3JpdGUgNjQgYnl0ZXMgZm9yIHMmZydzICovCisgICBpZiAoKm91dGxlbiA8IDY0KSB7CisgICAgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKKyAgICAgICpvdXRsZW4gPSA2NDsKKyAgICAgIHJldHVybiBDUllQVF9CVUZGRVJfT1ZFUkZMT1c7CisgICB9CisKKyAgIGlmICh5YXJyb3dfcmVhZChvdXQsIDY0LCBwcm5nKSAhPSA2NCkgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisgICAgICByZXR1cm4gQ1JZUFRfRVJST1JfUkVBRFBSTkc7CisgICB9CisgICAqb3V0bGVuID0gNjQ7CisKKyAgIHJldHVybiBDUllQVF9PSzsKK30KKyAKKy8qKgorICBJbXBvcnQgYSBQUk5HIHN0YXRlCisgIEBwYXJhbSBpbiAgICAgICBUaGUgUFJORyBzdGF0ZQorICBAcGFyYW0gaW5sZW4gICAgU2l6ZSBvZiB0aGUgc3RhdGUKKyAgQHBhcmFtIHBybmcgICAgIFRoZSBQUk5HIHRvIGltcG9ydAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwKKyovICAKK2ludCB5YXJyb3dfaW1wb3J0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBsb25nIGlubGVuLCBwcm5nX3N0YXRlICpwcm5nKQoreworICAgaW50IGVycjsKKworICAgTFRDX0FSR0NISyhpbiAgICE9IE5VTEwpOworICAgTFRDX0FSR0NISyhwcm5nICE9IE5VTEwpOworICAgCisgICBMVENfTVVURVhfTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisKKyAgIGlmIChpbmxlbiAhPSA2NCkgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisgICAgICByZXR1cm4gQ1JZUFRfSU5WQUxJRF9BUkc7CisgICB9CisKKyAgIGlmICgoZXJyID0geWFycm93X3N0YXJ0KHBybmcpKSAhPSBDUllQVF9PSykgeworICAgICAgTFRDX01VVEVYX1VOTE9DSygmcHJuZy0+eWFycm93LnBybmdfbG9jayk7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgZXJyID0geWFycm93X2FkZF9lbnRyb3B5KGluLCA2NCwgcHJuZyk7CisgICBMVENfTVVURVhfVU5MT0NLKCZwcm5nLT55YXJyb3cucHJuZ19sb2NrKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKy8qKgorICBQUk5HIHNlbGYtdGVzdAorICBAcmV0dXJuIENSWVBUX09LIGlmIHN1Y2Nlc3NmdWwsIENSWVBUX05PUCBpZiBzZWxmLXRlc3RpbmcgaGFzIGJlZW4gZGlzYWJsZWQKKyovICAKK2ludCB5YXJyb3dfdGVzdCh2b2lkKQoreworI2lmbmRlZiBMVENfVEVTVAorICAgcmV0dXJuIENSWVBUX05PUDsKKyNlbHNlCisgICBpbnQgZXJyOworICAgcHJuZ19zdGF0ZSBwcm5nOworCisgICBpZiAoKGVyciA9IHlhcnJvd19zdGFydCgmcHJuZykpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorICAgCisgICAvKiBub3cgbGV0J3MgdGVzdCB0aGUgaGFzaC9jaXBoZXIgdGhhdCB3YXMgY2hvc2VuICovCisgICBpZiAoKGVyciA9IGNpcGhlcl9kZXNjcmlwdG9yW3BybmcueWFycm93LmNpcGhlcl0udGVzdCgpKSAhPSBDUllQVF9PSykgeworICAgICAgcmV0dXJuIGVycjsgCisgICB9CisgICBpZiAoKGVyciA9IGhhc2hfZGVzY3JpcHRvcltwcm5nLnlhcnJvdy5oYXNoXS50ZXN0KCkpICE9IENSWVBUX09LKSB7CisgICAgICByZXR1cm4gZXJyOyAKKyAgIH0KKworICAgcmV0dXJuIENSWVBUX09LOworI2VuZGlmCit9CisKKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3NyYy9wcm5ncy95YXJyb3cuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4xMCAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8xNCAwNDoyMToxNyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC90ZXN0YnVpbGQuc2ggYi9saWJ0b21jcnlwdC90ZXN0YnVpbGQuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5ZTNlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3Rlc3RidWlsZC5zaApAQCAtMCwwICsxLDExIEBACisjIS9iaW4vYmFzaAorZWNobyAiJDEgKEJ1aWxkIE9ubHksICQyLCAkMykuLi4iCittYWtlIGNsZWFuIDE+L2Rldi9udWxsIDI+L2Rldi9udWxsCitlY2hvIC1uICJidWlsZGluZy4uLiIKK3RvdWNoIHRlc3Rvay50eHQKK0NGTEFHUz0iJDIgJENGTEFHUyAkNCIgRVhUUkFMSUJTPSIkNSIgbWFrZSAtZiAkMyB0ZXN0IHR2X2dlbiAxPmdjY18xLnR4dCAyPmdjY18yLnR4dCB8fCAoZWNobyAiYnVpbGQgJDEgZmFpbGVkIHNlZSBnY2NfMi50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24iICYmIGNhdCBnY2NfMi50eHQgJiYgcm0gLWYgdGVzdG9rLnR4dCAmJiBleGl0IDEpCitpZiBmaW5kIHRlc3Rvay50eHQgLXR5cGUgZiAxPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCA7IHRoZW4KKyAgIGVjaG8gInN1Y2Nlc3NmdWwiCisgICBleGl0IDAKK2ZpCitleGl0IDEKZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3Rlc3RtZS5zaCBiL2xpYnRvbWNyeXB0L3Rlc3RtZS5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjJmZGE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvdGVzdG1lLnNoCkBAIC0wLDAgKzEsNTggQEAKKyMhL2Jpbi9iYXNoCisKKyMgZGF0ZQorZWNobyAiZGF0ZT0iYGRhdGVgCisKKyMgb3V0cHV0IHZlcnNpb24KK2VjaG8gIlRlc3RpbmcgdmVyaW9uIiBgZ3JlcCAiXlZFUlNJT049IiBtYWtlZmlsZSB8IHNlZCAicy8uKj0vLyJgCisjZ3JlcCAiVkVSU0lPTj0iIG1ha2VmaWxlIHwgcGVybCAtZSAiQGEgPSBzcGxpdCgnPScsIDw+KTsgcHJpbnQgQGFbMV07ImAKKworIyBnZXQgdW5hbWUgCitlY2hvICJ1bmFtZT0iYHVuYW1lIC1hYAorCisjIGdldCBnY2MgbmFtZQorZWNobyAiZ2NjPSJgZ2NjIC1kdW1wdmVyc2lvbmAKK2VjaG8KKworIyBzdG9jayBidWlsZAorYmFzaCBydW4uc2ggIlNUT0NLIiAiICIgIiQxIiAiJDIiICIkMyIgfHwgZXhpdCAxCisKKyMgU01BTEwgY29kZQorYmFzaCBydW4uc2ggIlNNQUxMIiAiLURMVENfU01BTExfQ09ERSIgIiQxIiAiJDIiICIkMyIgfHwgZXhpdCAxCisKKyMgTk9UQUJMRVMKK2Jhc2ggcnVuLnNoICJOT1RBQkxFUyIgIi1ETFRDX05PX1RBQkxFUyIgIiQxIiAiJDIiICIkMyIgfHwgZXhpdCAxCisKKyMgU01BTEwrTk9UQUJMRVMKK2Jhc2ggcnVuLnNoICJTTUFMTCtOT1RBQkxFUyIgIi1ETFRDX1NNQUxMX0NPREUgLURMVENfTk9fVEFCTEVTIiAiJDEiICIkMiIgIiQzIiB8fCBleGl0IDEKKworIyBDTEVBTlNUQUNLCitiYXNoIHJ1bi5zaCAiQ0xFQU5TVEFDSyIgIi1ETFRDX0NMRUFOX1NUQUNLIiAiJDEiICIkMiIgIiQzIiB8fCBleGl0IDEKKworIyBDTEVBTlNUQUNLICsgU01BTEwKK2Jhc2ggcnVuLnNoICJDTEVBTlNUQUNLK1NNQUxMIiAiLURMVENfU01BTExfQ09ERSAtRExUQ19DTEVBTl9TVEFDSyIgIiQxIiAiJDIiICIkMyIgfHwgZXhpdCAxCisKKyMgQ0xFQU5TVEFDSyArIE5PVEFCTEVTCitiYXNoIHJ1bi5zaCAiQ0xFQU5TVEFDSytOT1RBQkxFUyIgIi1ETFRDX05PX1RBQkxFUyAtRExUQ19DTEVBTl9TVEFDSyIgIiQxIiAiJDIiICIkMyIgfHwgZXhpdCAxCisKKyMgQ0xFQU5TVEFDSyArIE5PVEFCTEVTICsgU01BTEwKK2Jhc2ggcnVuLnNoICJDTEVBTlNUQUNLK05PVEFCTEVTK1NNQUxMIiAiLURMVENfTk9fVEFCTEVTIC1ETFRDX0NMRUFOX1NUQUNLIC1ETFRDX1NNQUxMX0NPREUiICIkMSIgIiQyIiAiJDMiIHx8IGV4aXQgMQorCisjIE5PX0ZBU1QKK2Jhc2ggcnVuLnNoICJOT19GQVNUIiAiLURMVENfTk9fRkFTVCIgIiQxIiAiJDIiICIkMyIgfHwgZXhpdCAxCisKKyMgTk9fRkFTVCArIE5PVEFCTEVTCitiYXNoIHJ1bi5zaCAiTk9fRkFTVCtOT1RBQkxFUyIgIi1ETFRDX05PX0ZBU1QgLURMVENfTk9fVEFCTEVTIiAiJDEiICIkMiIgIiQzIiB8fCBleGl0IDEKKworIyBOT19BU00KK2Jhc2ggcnVuLnNoICJOT19BU00iICItRExUQ19OT19BU00iICIkMSIgIiQyIiAiJDMiIHx8IGV4aXQgMQorCisjIHRlc3QgYnVpbGQgd2l0aCBubyB0ZXN0aW5nCitiYXNoIHRlc3RidWlsZC5zaCAiTk9URVNUIiAiLURMVENfTk9fVEVTVCIgIiQxIiAiJDIiICIkMyIgfHwgZXhpdCAxCisKKyMgdGVzdCBidWlsZCB3aXRoIG5vIGZpbGUgcm91dGluZXMKK2Jhc2ggdGVzdGJ1aWxkLnNoICJOT0ZJTEUiICItRExUQ19OT19GSUxFIiAiJDEiICIkMiIgIiQzIiB8fCBleGl0IDEKKworIyAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC90ZXN0bWUuc2gsdiAkICAgCisjICRSZXZpc2lvbjogMS4yMCAkICAgCisjICREYXRlOiAyMDA2LzAxLzI2IDE0OjQ5OjQzICQgCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC90ZXN0cHJvZi9iYXNlNjRfdGVzdC5jIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvYmFzZTY0X3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjIwYTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvYmFzZTY0X3Rlc3QuYwpAQCAtMCwwICsxLDI0IEBACisjaW5jbHVkZSAgPHRvbWNyeXB0X3Rlc3QuaD4KKworaW50IGJhc2U2NF90ZXN0KHZvaWQpCit7CisgICB1bnNpZ25lZCBjaGFyIGluWzY0XSwgb3V0WzI1Nl0sIHRtcFs2NF07CisgICB1bnNpZ25lZCBsb25nIHgsIGwxLCBsMjsKKyAgIAorICAgZm9yICAoeCA9IDA7IHggPCA2NDsgeCsrKSB7CisgICAgICAgeWFycm93X3JlYWQoaW4sIHgsICZ5YXJyb3dfcHJuZyk7CisgICAgICAgbDEgPSBzaXplb2Yob3V0KTsKKyAgICAgICBETyhiYXNlNjRfZW5jb2RlKGluLCB4LCBvdXQsICZsMSkpOworICAgICAgIGwyID0gc2l6ZW9mKHRtcCk7CisgICAgICAgRE8oYmFzZTY0X2RlY29kZShvdXQsIGwxLCB0bXAsICZsMikpOworICAgICAgIGlmIChsMiAhPSB4IHx8IG1lbWNtcCh0bXAsIGluLCB4KSkgeworICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImJhc2U2NCAgZmFpbGVkICVsdSAlbHUgJWx1IiwgeCwgbDEsIGwyKTsKKyAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgfQorICAgfQorICAgcmV0dXJuIDA7Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL2Jhc2U2NF90ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNS8wNS8yMSAxMjo1MToyNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC90ZXN0cHJvZi9jaXBoZXJfaGFzaF90ZXN0LmMgYi9saWJ0b21jcnlwdC90ZXN0cHJvZi9jaXBoZXJfaGFzaF90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyMzJlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL2NpcGhlcl9oYXNoX3Rlc3QuYwpAQCAtMCwwICsxLDQ1IEBACisvKiB0ZXN0IHRoZSBjaXBoZXJzIGFuZCBoYXNoZXMgdXNpbmcgdGhlaXIgYnVpbHQtaW4gc2VsZi10ZXN0cyAqLworCisjaW5jbHVkZSA8dG9tY3J5cHRfdGVzdC5oPgorCitpbnQgY2lwaGVyX2hhc2hfdGVzdCh2b2lkKQoreworICAgaW50ICAgICAgICAgICB4OworICAgdW5zaWduZWQgY2hhciBidWZbNDA5Nl07CisgICB1bnNpZ25lZCBsb25nIG47CisgICBwcm5nX3N0YXRlICAgIG5wcm5nOworICAgCisgICAvKiB0ZXN0IGNpcGhlcnMgKi8KKyAgIGZvciAoeCA9IDA7IGNpcGhlcl9kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTDsgeCsrKSB7CisgICAgICBETyhjaXBoZXJfZGVzY3JpcHRvclt4XS50ZXN0KCkpOworICAgfQorICAgCisgICAvKiB0ZXN0IGhhc2hlcyAqLworICAgZm9yICh4ID0gMDsgaGFzaF9kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTDsgeCsrKSB7CisgICAgICBETyhoYXNoX2Rlc2NyaXB0b3JbeF0udGVzdCgpKTsKKyAgIH0KKyAKKyAgIC8qIHRlc3QgcHJuZ3MgKHRlc3QsIGltcG9ydC9leHBvcnQgKi8KKyAgIGZvciAoeCA9IDA7IHBybmdfZGVzY3JpcHRvclt4XS5uYW1lICE9IE5VTEw7IHgrKykgeworICAgICAgRE8ocHJuZ19kZXNjcmlwdG9yW3hdLnRlc3QoKSk7CisgICAgICBETyhwcm5nX2Rlc2NyaXB0b3JbeF0uc3RhcnQoJm5wcm5nKSk7CisgICAgICBETyhwcm5nX2Rlc2NyaXB0b3JbeF0uYWRkX2VudHJvcHkoKHVuc2lnbmVkIGNoYXIgKikiaGVsbG93b3JsZDEyIiwgMTIsICZucHJuZykpOworICAgICAgRE8ocHJuZ19kZXNjcmlwdG9yW3hdLnJlYWR5KCZucHJuZykpOworICAgICAgbiA9IHNpemVvZihidWYpOworICAgICAgRE8ocHJuZ19kZXNjcmlwdG9yW3hdLnBleHBvcnQoYnVmLCAmbiwgJm5wcm5nKSk7CisgICAgICBwcm5nX2Rlc2NyaXB0b3JbeF0uZG9uZSgmbnBybmcpOworICAgICAgRE8ocHJuZ19kZXNjcmlwdG9yW3hdLnBpbXBvcnQoYnVmLCBuLCAmbnBybmcpKTsKKyAgICAgIERPKHBybmdfZGVzY3JpcHRvclt4XS5yZWFkeSgmbnBybmcpKTsKKyAgICAgIGlmIChwcm5nX2Rlc2NyaXB0b3JbeF0ucmVhZChidWYsIDEwMCwgJm5wcm5nKSAhPSAxMDApIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IgcmVhZGluZyBmcm9tIGltcG9ydGVkIFBSTkchXG4iKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIHBybmdfZGVzY3JpcHRvclt4XS5kb25lKCZucHJuZyk7CisgICB9CisgICAKKyAgIHJldHVybiAwOworfQorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC90ZXN0cHJvZi9jaXBoZXJfaGFzaF90ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozNTo1OSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC90ZXN0cHJvZi9kZXJfdGVzdHMuYyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL2Rlcl90ZXN0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ODE4ODYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC90ZXN0cHJvZi9kZXJfdGVzdHMuYwpAQCAtMCwwICsxLDg1MyBAQAorI2luY2x1ZGUgPHRvbWNyeXB0X3Rlc3QuaD4KKyNpZiBkZWZpbmVkKEdNUF9ERVNDKSB8fCBkZWZpbmVkKFVTRV9HTVApCisjaW5jbHVkZSA8Z21wLmg+CisjZW5kaWYKKworI2lmbmRlZiBMVENfREVSCisKK2ludCBkZXJfdGVzdHModm9pZCkKK3sKKyAgIGZwcmludGYoc3RkZXJyLCAiTk9QIik7CisgICByZXR1cm4gMDsKK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQgZGVyX3NldF90ZXN0KHZvaWQpCit7CisgICBsdGNfYXNuMV9saXN0IGxpc3RbMTBdOworICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgb2N0X3N0cltdID0geyAxLCAyLCAzLCA0IH07CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBiaW5fc3RyW10gPSB7IDEsIDAsIDAsIDEgfTsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGludF92YWwgICA9IDEyMzQ1Njc4VUw7CisKKyAgIHVuc2lnbmVkIGNoYXIgc3Ryc1sxMF1bMTBdLCBvdXRidWZbMTI4XTsKKyAgIHVuc2lnbmVkIGxvbmcgeCwgdmFsLCBvdXRsZW47CisgICBpbnQgICAgICAgICAgIGVycjsKKyAgIAorICAgLyogbWFrZSBzdHJ1Y3R1cmUgYW5kIGVuY29kZSBpdCAqLworICAgTFRDX1NFVF9BU04xKGxpc3QsIDAsIExUQ19BU04xX09DVEVUX1NUUklORywgIG9jdF9zdHIsIHNpemVvZihvY3Rfc3RyKSk7CisgICBMVENfU0VUX0FTTjEobGlzdCwgMSwgTFRDX0FTTjFfQklUX1NUUklORywgICAgYmluX3N0ciwgc2l6ZW9mKGJpbl9zdHIpKTsKKyAgIExUQ19TRVRfQVNOMShsaXN0LCAyLCBMVENfQVNOMV9TSE9SVF9JTlRFR0VSLCAmaW50X3ZhbCwgMSk7CisgICAKKyAgIC8qIGVuY29kZSBpdCAqLworICAgb3V0bGVuID0gc2l6ZW9mKG91dGJ1Zik7CisgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfc2V0KGxpc3QsIDMsIG91dGJ1ZiwgJm91dGxlbikpICE9IENSWVBUX09LKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGVuY29kaW5nIHNldDogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgIH0KKyAgIAorICAKKyAgIC8qIGZpcnN0IGxldCdzIHRlc3QgdGhlIHNldF9kZWNvZGVyIG91dCBvZiBvcmRlciB0byBzZWUgd2hhdCBoYXBwZW5zLCB3ZSBzaG91bGQgZ2V0IGFsbCB0aGUgZmllbGRzIHdlIGV4cGVjdCBldmVuIHRob3VnaCB0aGV5J3JlIGluIGEgZGlmZiBvcmRlciAqLworICAgTFRDX1NFVF9BU04xKGxpc3QsIDAsIExUQ19BU04xX0JJVF9TVFJJTkcsICAgIHN0cnNbMV0sIHNpemVvZihzdHJzWzFdKSk7CisgICBMVENfU0VUX0FTTjEobGlzdCwgMSwgTFRDX0FTTjFfU0hPUlRfSU5URUdFUiwgJnZhbCwgMSk7CisgICBMVENfU0VUX0FTTjEobGlzdCwgMiwgTFRDX0FTTjFfT0NURVRfU1RSSU5HLCAgc3Ryc1swXSwgc2l6ZW9mKHN0cnNbMF0pKTsKKyAgIAorICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NldChvdXRidWYsIG91dGxlbiwgbGlzdCwgMykpICE9IENSWVBUX09LKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGRlY29kaW5nIHNldCB1c2luZyBkZXJfZGVjb2RlX3NldDogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgIH0KKyAgIAorICAgLyogbm93IGNvbXBhcmUgdGhlIGl0ZW1zICovCisgICBpZiAobWVtY21wKHN0cnNbMF0sIG9jdF9zdHIsIHNpemVvZihvY3Rfc3RyKSkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgZGVjb2Rpbmcgc2V0IHVzaW5nIGRlcl9kZWNvZGVfc2V0IChvY3Rfc3RyIGlzIHdyb25nKTpcbiIpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgfQorICAgICAgCisgICBpZiAobWVtY21wKHN0cnNbMV0sIGJpbl9zdHIsIHNpemVvZihiaW5fc3RyKSkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgZGVjb2Rpbmcgc2V0IHVzaW5nIGRlcl9kZWNvZGVfc2V0IChiaW5fc3RyIGlzIHdyb25nKTpcbiIpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgfQorICAgCisgICBpZiAodmFsICE9IGludF92YWwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiZXJyb3IgZGVjb2Rpbmcgc2V0IHVzaW5nIGRlcl9kZWNvZGVfc2V0IChpbnRfdmFsIGlzIHdyb25nKTpcbiIpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgfQorICAgCisgICBzdHJjcHkoKGNoYXIqKXN0cnNbMF0sICJvbmUiKTsKKyAgIHN0cmNweSgoY2hhciopc3Ryc1sxXSwgIm9uZTIiKTsKKyAgIHN0cmNweSgoY2hhciopc3Ryc1syXSwgInR3byIpOworICAgc3RyY3B5KChjaGFyKilzdHJzWzNdLCAiYWFhIik7CisgICBzdHJjcHkoKGNoYXIqKXN0cnNbNF0sICJhYWFhIik7CisgICBzdHJjcHkoKGNoYXIqKXN0cnNbNV0sICJhYWIiKTsKKyAgIHN0cmNweSgoY2hhciopc3Ryc1s2XSwgImFhYWIiKTsKKyAgIHN0cmNweSgoY2hhciopc3Ryc1s3XSwgImJiYiIpOworICAgc3RyY3B5KChjaGFyKilzdHJzWzhdLCAiYmJiYSIpOworICAgc3RyY3B5KChjaGFyKilzdHJzWzldLCAiYmJiYiIpOworICAgCisgICBmb3IgKHggPSAwOyB4IDwgMTA7IHgrKykgeworICAgICAgIExUQ19TRVRfQVNOMShsaXN0LCB4LCBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HLCBzdHJzW3hdLCBzdHJsZW4oKGNoYXIqKXN0cnNbeF0pKTsKKyAgIH0KKyAgIAorICAgb3V0bGVuID0gc2l6ZW9mKG91dGJ1Zik7CisgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfc2V0b2YobGlzdCwgMTAsIG91dGJ1ZiwgJm91dGxlbikpICE9IENSWVBUX09LKSB7ICAgICAgIAorICAgICAgZnByaW50ZihzdGRlcnIsICJlcnJvciBlbmNvZGluZyBTRVQgT0Y6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICB9CisgICAKKyAgIGZvciAoeCA9IDA7IHggPCAxMDsgeCsrKSB7CisgICAgICAgTFRDX1NFVF9BU04xKGxpc3QsIHgsIExUQ19BU04xX1BSSU5UQUJMRV9TVFJJTkcsIHN0cnNbeF0sIHNpemVvZihzdHJzW3hdKSAtIDEpOworICAgfQorICAgWE1FTVNFVChzdHJzLCAwLCBzaXplb2Yoc3RycykpOworICAgCisgICBpZiAoKGVyciA9IGRlcl9kZWNvZGVfc2V0KG91dGJ1Ziwgb3V0bGVuLCBsaXN0LCAxMCkpICE9IENSWVBUX09LKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIGRlY29kaW5nIFNFVCBPRjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgIH0KKyAgIAorICAgLyogbm93IGNvbXBhcmUgKi8KKyAgIGZvciAoeCA9IDE7IHggPCAxMDsgeCsrKSB7CisgICAgICBpZiAoIShzdHJsZW4oKGNoYXIqKXN0cnNbeC0xXSkgPD0gc3RybGVuKChjaGFyKilzdHJzW3hdKSkgJiYgc3RyY21wKChjaGFyKilzdHJzW3gtMV0sIChjaGFyKilzdHJzW3hdKSA+PSAwKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVycm9yIFNFVCBPRiBvcmRlciBhdCAlbHUgaXMgd3JvbmdcbiIsIHgpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgfSAgICAgIAorICAgCit9CisKKworLyogd2UgYXJlIGVuY29kaW5nIAorCisgIFNFUVVFTkNFIHsKKyAgICAgUFJJTlRBQkxFICJwcmludGFibGUiCisgICAgIElBNSAgICAgICAiaWE1IgorICAgICBTRVFVRU5DRSB7CisgICAgICAgIElOVEVHRVIgMTIzNDU2NzgKKyAgICAgICAgVVRDVElNRSB7IDkxLCA1LCA2LCAxNiwgNDUsIDQwLCAxLCA3LCAwIH0KKyAgICAgICAgU0VRVUVOQ0UgeworICAgICAgICAgICBPQ1RFVCBTVFJJTkcgeyAxLCAyLCAzLCA0IH0KKyAgICAgICAgICAgQklUIFNUUklORyAgIHsgMSwgMCwgMCwgMSB9CisgICAgICAgICAgIFNFUVVFTkNFIHsKKyAgICAgICAgICAgICAgT0lEICAgICAgIHsgMSwgMiwgODQwLCAxMTM1NDkgfQorICAgICAgICAgICAgICBOVUxMCisgICAgICAgICAgICAgIFNFVCBPRiB7CisgICAgICAgICAgICAgICAgIFBSSU5UQUJMRSAiMzMzIiAgLy8gV0lMTCBHRVQgU09SVEVECisgICAgICAgICAgICAgICAgIFBSSU5UQUJMRSAiMjIyIgorICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgfQorICB9ICAgICAKKworKi8gIAorCitzdGF0aWMgdm9pZCBkZXJfZmxleGlfdGVzdCh2b2lkKQoreworICAgc3RhdGljIGNvbnN0IGNoYXIgcHJpbnRhYmxlX3N0cltdICAgID0gInByaW50YWJsZSI7CisgICBzdGF0aWMgY29uc3QgY2hhciBzZXQxX3N0cltdICAgICAgICAgPSAiMzMzIjsKKyAgIHN0YXRpYyBjb25zdCBjaGFyIHNldDJfc3RyW10gICAgICAgICA9ICIyMjIiOworICAgc3RhdGljIGNvbnN0IGNoYXIgaWE1X3N0cltdICAgICAgICAgID0gImlhNSI7CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBpbnRfdmFsICAgPSAxMjM0NTY3OFVMOworICAgc3RhdGljIGNvbnN0IGx0Y191dGN0aW1lICAgdXRjdGltZSAgID0geyA5MSwgNSwgNiwgMTYsIDQ1LCA0MCwgMSwgNywgMCB9OworICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgb2N0X3N0cltdID0geyAxLCAyLCAzLCA0IH07CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBiaXRfc3RyW10gPSB7IDEsIDAsIDAsIDEgfTsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9pZF9zdHJbXSA9IHsgMSwgMiwgODQwLCAxMTM1NDkgfTsKKyAgIAorICAgdW5zaWduZWQgY2hhciBlbmNvZGVfYnVmWzE5Ml07CisgICB1bnNpZ25lZCBsb25nIGVuY29kZV9idWZfbGVuLCBkZWNvZGVfbGVuOworICAgaW50ICAgICAgICAgICBlcnI7CisgICAKKyAgIGx0Y19hc24xX2xpc3Qgc3RhdGljX2xpc3RbNV1bM10sICpkZWNvZGVkX2xpc3QsICpsOworICAgCisgICAvKiBidWlsZCBsaXN0ICovCisgICBMVENfU0VUX0FTTjEoc3RhdGljX2xpc3RbMF0sIDAsIExUQ19BU04xX1BSSU5UQUJMRV9TVFJJTkcsICh2b2lkICopcHJpbnRhYmxlX3N0ciwgc3RybGVuKHByaW50YWJsZV9zdHIpKTsKKyAgIExUQ19TRVRfQVNOMShzdGF0aWNfbGlzdFswXSwgMSwgTFRDX0FTTjFfSUE1X1NUUklORywgICAgICAgKHZvaWQgKilpYTVfc3RyLCAgICAgICBzdHJsZW4oaWE1X3N0cikpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzBdLCAyLCBMVENfQVNOMV9TRVFVRU5DRSwgICAgICAgICBzdGF0aWNfbGlzdFsxXSwgICAzKTsKKyAgIAorICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzFdLCAwLCBMVENfQVNOMV9TSE9SVF9JTlRFR0VSLCAgICAodm9pZCAqKSZpbnRfdmFsLCAgICAgICAgIDEpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzFdLCAxLCBMVENfQVNOMV9VVENUSU1FLCAgICAgICAgICAodm9pZCAqKSZ1dGN0aW1lLCAgICAgICAgIDEpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzFdLCAyLCBMVENfQVNOMV9TRVFVRU5DRSwgICAgICAgICBzdGF0aWNfbGlzdFsyXSwgICAzKTsKKworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzJdLCAwLCBMVENfQVNOMV9PQ1RFVF9TVFJJTkcsICAgICAodm9pZCAqKW9jdF9zdHIsICAgICAgICAgIDQpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzJdLCAxLCBMVENfQVNOMV9CSVRfU1RSSU5HLCAgICAgICAodm9pZCAqKWJpdF9zdHIsICAgICAgICAgIDQpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzJdLCAyLCBMVENfQVNOMV9TRVFVRU5DRSwgICAgICAgICBzdGF0aWNfbGlzdFszXSwgICAzKTsKKworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzNdLCAwLCBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUiwodm9pZCAqKW9pZF9zdHIsICAgICAgICAgIDQpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzNdLCAxLCBMVENfQVNOMV9OVUxMLCAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAwKTsKKyAgIExUQ19TRVRfQVNOMShzdGF0aWNfbGlzdFszXSwgMiwgTFRDX0FTTjFfU0VUT0YsICAgICAgICAgICAgc3RhdGljX2xpc3RbNF0sICAgMik7CisKKyAgIExUQ19TRVRfQVNOMShzdGF0aWNfbGlzdFs0XSwgMCwgTFRDX0FTTjFfUFJJTlRBQkxFX1NUUklORywgc2V0MV9zdHIsIHN0cmxlbihzZXQxX3N0cikpOworICAgTFRDX1NFVF9BU04xKHN0YXRpY19saXN0WzRdLCAxLCBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HLCBzZXQyX3N0ciwgc3RybGVuKHNldDJfc3RyKSk7CisKKyAgIC8qIGVuY29kZSBpdCAqLworICAgZW5jb2RlX2J1Zl9sZW4gPSBzaXplb2YoZW5jb2RlX2J1Zik7CisgICBpZiAoKGVyciA9IGRlcl9lbmNvZGVfc2VxdWVuY2UoJnN0YXRpY19saXN0WzBdWzBdLCAzLCBlbmNvZGVfYnVmLCAmZW5jb2RlX2J1Zl9sZW4pKSAhPSBDUllQVF9PSykgeworICAgICAgZnByaW50ZihzdGRlcnIsICJFbmNvZGluZyBzdGF0aWNfbGlzdDogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgIH0KKyAgIAorI2lmIDAKKyAgIHsKKyAgICAgRklMRSAqZjsKKyAgICAgZiA9IGZvcGVuKCJ0LmJpbiIsICJ3YiIpOworICAgICBmd3JpdGUoZW5jb2RlX2J1ZiwgMSwgZW5jb2RlX2J1Zl9sZW4sIGYpOworICAgICBmY2xvc2UoZik7CisgICB9IAorI2VuZGlmICAgIAorICAgCisgICAvKiBkZWNvZGUgd2l0aCBmbGV4aSAqLworICAgZGVjb2RlX2xlbiA9IGVuY29kZV9idWZfbGVuOworICAgaWYgKChlcnIgPSBkZXJfZGVjb2RlX3NlcXVlbmNlX2ZsZXhpKGVuY29kZV9idWYsICZkZWNvZGVfbGVuLCAmZGVjb2RlZF9saXN0KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiZGVjb2Rpbmcgc3RhdGljX2xpc3Q6ICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICB9CisgICAKKyAgIGlmIChkZWNvZGVfbGVuICE9IGVuY29kZV9idWZfbGVuKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRlY29kZSBsZW4gb2YgJWx1IGRvZXMgbm90IG1hdGNoIGVuY29kZSBsZW4gb2YgJWx1IFxuIiwgZGVjb2RlX2xlbiwgZW5jb2RlX2J1Zl9sZW4pOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgfQorICAgCisgICAvKiB3ZSBleHBlY3QgbC0+bmV4dCB0byBiZSBOVUxMIGFuZCBsLT5jaGlsZCB0byBub3QgYmUgKi8KKyAgIGwgPSBkZWNvZGVkX2xpc3Q7CisgICBpZiAobC0+bmV4dCAhPSBOVUxMIHx8IGwtPmNoaWxkID09IE5VTEwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgfQorICAgCisgICAvKiB3ZSBleHBlY3QgYSBTRVFVRU5DRSAqLworICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfU0VRVUVOQ0UpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgICAgbCA9IGwtPmNoaWxkOworICAgICAgICAgCisgICAvKiBQUklOVEFCTEUgU1RSSU5HICovCisgICAgICAvKiB3ZSBleHBlY3QgcHJpbnRhYmxlX3N0ciAqLworICAgICAgaWYgKGwtPm5leHQgPT0gTlVMTCB8fCBsLT5jaGlsZCAhPSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfUFJJTlRBQkxFX1NUUklORykgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAKKyAgICAgIGlmIChsLT5zaXplICE9IHN0cmxlbihwcmludGFibGVfc3RyKSB8fCBtZW1jbXAocHJpbnRhYmxlX3N0ciwgbC0+ZGF0YSwgbC0+c2l6ZSkpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICAvKiBtb3ZlIHRvIG5leHQgKi8KKyAgICAgIGwgPSBsLT5uZXh0OworICAgICAgCisgICAvKiBJQTUgU1RSSU5HICovICAgICAgCisgICAgICAvKiB3ZSBleHBlY3QgaWE1X3N0ciAqLworICAgICAgaWYgKGwtPm5leHQgPT0gTlVMTCB8fCBsLT5jaGlsZCAhPSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfSUE1X1NUUklORykgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAKKyAgICAgIGlmIChsLT5zaXplICE9IHN0cmxlbihpYTVfc3RyKSB8fCBtZW1jbXAoaWE1X3N0ciwgbC0+ZGF0YSwgbC0+c2l6ZSkpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICAvKiBtb3ZlIHRvIG5leHQgKi8KKyAgICAgIGwgPSBsLT5uZXh0OworICAgCisgICAvKiBleHBlY3QgY2hpbGQgYW52ZSBtb3ZlIGRvd24gKi8KKyAgICAgIAorICAgICAgaWYgKGwtPm5leHQgIT0gTlVMTCB8fCBsLT5jaGlsZCA9PSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfU0VRVUVOQ0UpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgICAgbCA9IGwtPmNoaWxkOworICAgICAgCisKKyAgIC8qIElOVEVHRVIgKi8KKyAgIAorICAgICAgaWYgKGwtPm5leHQgPT0gTlVMTCB8fCBsLT5jaGlsZCAhPSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfSU5URUdFUikgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAKKyAgICAgIGlmIChtcF9jbXBfZChsLT5kYXRhLCAxMjM0NTY3OFVMKSAhPSBMVENfTVBfRVEpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICAvKiBtb3ZlIHRvIG5leHQgKi8KKyAgICAgIGwgPSBsLT5uZXh0OworICAgICAgCisgICAvKiBVVENUSU1FICovCisgICAgICAgICAKKyAgICAgIGlmIChsLT5uZXh0ID09IE5VTEwgfHwgbC0+Y2hpbGQgIT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChsLT50eXBlICE9IExUQ19BU04xX1VUQ1RJTUUpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICBpZiAobWVtY21wKGwtPmRhdGEsICZ1dGN0aW1lLCBzaXplb2YodXRjdGltZSkpKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorICAgICAgLyogbW92ZSB0byBuZXh0ICovCisgICAgICBsID0gbC0+bmV4dDsKKyAgICAgIAorICAgLyogZXhwZWN0IGNoaWxkIGFudmUgbW92ZSBkb3duICovCisgICAgICAKKyAgICAgIGlmIChsLT5uZXh0ICE9IE5VTEwgfHwgbC0+Y2hpbGQgPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChsLT50eXBlICE9IExUQ19BU04xX1NFUVVFTkNFKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIGwgPSBsLT5jaGlsZDsKKyAgICAgIAorICAgICAgCisgICAvKiBPQ1RFVCBTVFJJTkcgKi8gICAgICAKKyAgICAgIC8qIHdlIGV4cGVjdCBvY3Rfc3RyICovCisgICAgICBpZiAobC0+bmV4dCA9PSBOVUxMIHx8IGwtPmNoaWxkICE9IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgICAgCisgICAgICBpZiAobC0+dHlwZSAhPSBMVENfQVNOMV9PQ1RFVF9TVFJJTkcpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICBpZiAobC0+c2l6ZSAhPSBzaXplb2Yob2N0X3N0cikgfHwgbWVtY21wKG9jdF9zdHIsIGwtPmRhdGEsIGwtPnNpemUpKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorICAgICAgLyogbW92ZSB0byBuZXh0ICovCisgICAgICBsID0gbC0+bmV4dDsKKworICAgLyogQklUIFNUUklORyAqLyAgICAgIAorICAgICAgLyogd2UgZXhwZWN0IG9jdF9zdHIgKi8KKyAgICAgIGlmIChsLT5uZXh0ID09IE5VTEwgfHwgbC0+Y2hpbGQgIT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChsLT50eXBlICE9IExUQ19BU04xX0JJVF9TVFJJTkcpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICBpZiAobC0+c2l6ZSAhPSBzaXplb2YoYml0X3N0cikgfHwgbWVtY21wKGJpdF9zdHIsIGwtPmRhdGEsIGwtPnNpemUpKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorICAgICAgLyogbW92ZSB0byBuZXh0ICovCisgICAgICBsID0gbC0+bmV4dDsKKworICAgLyogZXhwZWN0IGNoaWxkIGFudmUgbW92ZSBkb3duICovCisgICAgICAKKyAgICAgIGlmIChsLT5uZXh0ICE9IE5VTEwgfHwgbC0+Y2hpbGQgPT0gTlVMTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAgICAKKyAgICAgIGlmIChsLT50eXBlICE9IExUQ19BU04xX1NFUVVFTkNFKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIGwgPSBsLT5jaGlsZDsKKworCisgICAvKiBPSUQgU1RSSU5HICovICAgICAgCisgICAgICAvKiB3ZSBleHBlY3Qgb2lkX3N0ciAqLworICAgICAgaWYgKGwtPm5leHQgPT0gTlVMTCB8fCBsLT5jaGlsZCAhPSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfT0JKRUNUX0lERU5USUZJRVIpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICBpZiAobC0+c2l6ZSAhPSBzaXplb2Yob2lkX3N0cikvc2l6ZW9mKG9pZF9zdHJbMF0pIHx8IG1lbWNtcChvaWRfc3RyLCBsLT5kYXRhLCBsLT5zaXplKnNpemVvZihvaWRfc3RyWzBdKSkpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgCisgICAgICAvKiBtb3ZlIHRvIG5leHQgKi8KKyAgICAgIGwgPSBsLT5uZXh0OworICAgICAgCisgICAvKiBOVUxMICovCisgICAgICBpZiAobC0+dHlwZSAhPSBMVENfQVNOMV9OVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLyogbW92ZSB0byBuZXh0ICovCisgICAgICBsID0gbC0+bmV4dDsKKyAgICAgIAorICAgLyogZXhwZWN0IGNoaWxkIGFudmUgbW92ZSBkb3duICovCisgICAgICBpZiAobC0+bmV4dCAhPSBOVUxMIHx8IGwtPmNoaWxkID09IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgICAgCisgICAgICBpZiAobC0+dHlwZSAhPSBMVENfQVNOMV9TRVQpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKCVkKSwgJWQsICVsdSwgbmV4dD0lcCwgcHJldj0lcCwgcGFyZW50PSVwLCBjaGlsZD0lcFxuIiwgX19MSU5FX18sIGwtPnR5cGUsIGwtPnNpemUsIGwtPm5leHQsIGwtPnByZXYsIGwtPnBhcmVudCwgbC0+Y2hpbGQpOworICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgfQorICAgICAgbCA9IGwtPmNoaWxkOworICAgICAgCisgICAvKiBQUklOVEFCTEUgU1RSSU5HICovCisgICAgICAvKiB3ZSBleHBlY3QgcHJpbnRhYmxlX3N0ciAqLworICAgICAgaWYgKGwtPm5leHQgPT0gTlVMTCB8fCBsLT5jaGlsZCAhPSBOVUxMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorICAgICAgaWYgKGwtPnR5cGUgIT0gTFRDX0FTTjFfUFJJTlRBQkxFX1NUUklORykgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAKKy8qIG5vdGUgd2UgY29tcGFyZSBzZXQyX3N0ciBGSVJTVCBiZWNhdXNlIHRoZSBTRVQgT0YgaXMgc29ydGVkIGFuZCAiMjIyIiBjb21lcyBiZWZvcmUgIjMzMyIgKi8gICAKKyAgICAgIGlmIChsLT5zaXplICE9IHN0cmxlbihzZXQyX3N0cikgfHwgbWVtY21wKHNldDJfc3RyLCBsLT5kYXRhLCBsLT5zaXplKSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpLCAlZCwgJWx1LCBuZXh0PSVwLCBwcmV2PSVwLCBwYXJlbnQ9JXAsIGNoaWxkPSVwXG4iLCBfX0xJTkVfXywgbC0+dHlwZSwgbC0+c2l6ZSwgbC0+bmV4dCwgbC0+cHJldiwgbC0+cGFyZW50LCBsLT5jaGlsZCk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisgICAKKyAgICAgIC8qIG1vdmUgdG8gbmV4dCAqLworICAgICAgbCA9IGwtPm5leHQ7CisKKyAgIC8qIFBSSU5UQUJMRSBTVFJJTkcgKi8KKyAgICAgIC8qIHdlIGV4cGVjdCBwcmludGFibGVfc3RyICovCisgICAgICBpZiAobC0+dHlwZSAhPSBMVENfQVNOMV9QUklOVEFCTEVfU1RSSU5HKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorICAgICAgaWYgKGwtPnNpemUgIT0gc3RybGVuKHNldDFfc3RyKSB8fCBtZW1jbXAoc2V0MV9zdHIsIGwtPmRhdGEsIGwtPnNpemUpKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiglZCksICVkLCAlbHUsIG5leHQ9JXAsIHByZXY9JXAsIHBhcmVudD0lcCwgY2hpbGQ9JXBcbiIsIF9fTElORV9fLCBsLT50eXBlLCBsLT5zaXplLCBsLT5uZXh0LCBsLT5wcmV2LCBsLT5wYXJlbnQsIGwtPmNoaWxkKTsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIAorCisgICBkZXJfc2VxdWVuY2VfZnJlZShsKTsKKworfQorCitzdGF0aWMgaW50IGRlcl9jaG9pY2VfdGVzdCh2b2lkKQoreworICAgbHRjX2FzbjFfbGlzdCB0eXBlc1s3XSwgaG9zdFsxXTsKKyAgIHVuc2lnbmVkIGNoYXIgYml0YnVmWzEwXSwgb2N0ZXRidWZbMTBdLCBpYTVidWZbMTBdLCBwcmludGJ1ZlsxMF0sIG91dGJ1ZlsyNTZdOworICAgdW5zaWduZWQgbG9uZyBpbnRlZ2VyLCBvaWRidWZbMTBdLCBvdXRsZW4sIGlubGVuLCB4LCB5OworICAgdm9pZCAgICAgICAgICAqbXBpbnRlZ2VyOworICAgbHRjX3V0Y3RpbWUgICB1dGN0aW1lID0geyA5MSwgNSwgNiwgMTYsIDQ1LCA0MCwgMSwgNywgMCB9OworCisgICAvKiBzZXR1cCB2YXJpYWJsZXMgKi8KKyAgIGZvciAoeCA9IDA7IHggPCBzaXplb2YoYml0YnVmKTsgeCsrKSAgIHsgYml0YnVmW3hdICAgPSB4ICYgMTsgfQorICAgZm9yICh4ID0gMDsgeCA8IHNpemVvZihvY3RldGJ1Zik7IHgrKykgeyBvY3RldGJ1Zlt4XSA9IHg7ICAgICB9CisgICBmb3IgKHggPSAwOyB4IDwgc2l6ZW9mKGlhNWJ1Zik7IHgrKykgICB7IGlhNWJ1Zlt4XSAgID0gJ2EnOyAgIH0KKyAgIGZvciAoeCA9IDA7IHggPCBzaXplb2YocHJpbnRidWYpOyB4KyspIHsgcHJpbnRidWZbeF0gPSAnYSc7ICAgfQorICAgaW50ZWdlciA9IDE7CisgICBmb3IgKHggPSAwOyB4IDwgc2l6ZW9mKG9pZGJ1Zikvc2l6ZW9mKG9pZGJ1ZlswXSk7IHgrKykgICB7IG9pZGJ1Zlt4XSA9IHggKyAxOyAgIH0KKyAgIERPKG1wX2luaXQoJm1waW50ZWdlcikpOworCisgICBmb3IgKHggPSAwOyB4IDwgMTQ7IHgrKykgeworICAgICAgIC8qIHNldHVwIGxpc3QgKi8KKyAgICAgICBMVENfU0VUX0FTTjEodHlwZXMsIDAsIExUQ19BU04xX1BSSU5UQUJMRV9TVFJJTkcsIHByaW50YnVmLCBzaXplb2YocHJpbnRidWYpKTsKKyAgICAgICBMVENfU0VUX0FTTjEodHlwZXMsIDEsIExUQ19BU04xX0JJVF9TVFJJTkcsIGJpdGJ1Ziwgc2l6ZW9mKGJpdGJ1ZikpOworICAgICAgIExUQ19TRVRfQVNOMSh0eXBlcywgMiwgTFRDX0FTTjFfT0NURVRfU1RSSU5HLCBvY3RldGJ1Ziwgc2l6ZW9mKG9jdGV0YnVmKSk7CisgICAgICAgTFRDX1NFVF9BU04xKHR5cGVzLCAzLCBMVENfQVNOMV9JQTVfU1RSSU5HLCBpYTVidWYsIHNpemVvZihpYTVidWYpKTsKKyAgICAgICBpZiAoeCA+IDcpIHsKKyAgICAgICAgICBMVENfU0VUX0FTTjEodHlwZXMsIDQsIExUQ19BU04xX1NIT1JUX0lOVEVHRVIsICZpbnRlZ2VyLCAxKTsKKyAgICAgICB9IGVsc2UgeworICAgICAgICAgIExUQ19TRVRfQVNOMSh0eXBlcywgNCwgTFRDX0FTTjFfSU5URUdFUiwgbXBpbnRlZ2VyLCAxKTsKKyAgICAgICB9CisgICAgICAgTFRDX1NFVF9BU04xKHR5cGVzLCA1LCBMVENfQVNOMV9PQkpFQ1RfSURFTlRJRklFUiwgb2lkYnVmLCBzaXplb2Yob2lkYnVmKS9zaXplb2Yob2lkYnVmWzBdKSk7CisgICAgICAgTFRDX1NFVF9BU04xKHR5cGVzLCA2LCBMVENfQVNOMV9VVENUSU1FLCAmdXRjdGltZSwgMSk7CisKKyAgICAgICBMVENfU0VUX0FTTjEoaG9zdCwgMCwgTFRDX0FTTjFfQ0hPSUNFLCB0eXBlcywgNyk7CisKKyAgICAgICAKKyAgICAgICAvKiBlbmNvZGUgKi8KKyAgICAgICBvdXRsZW4gPSBzaXplb2Yob3V0YnVmKTsKKyAgICAgICBETyhkZXJfZW5jb2RlX3NlcXVlbmNlKCZ0eXBlc1t4PjY/eC03OnhdLCAxLCBvdXRidWYsICZvdXRsZW4pKTsKKworICAgICAgIC8qIGRlY29kZSBpdCAqLworICAgICAgIGlubGVuID0gb3V0bGVuOworICAgICAgIERPKGRlcl9kZWNvZGVfc2VxdWVuY2Uob3V0YnVmLCBpbmxlbiwgJmhvc3RbMF0sIDEpKTsKKworICAgICAgIGZvciAoeSA9IDA7IHkgPCA3OyB5KyspIHsKKyAgICAgICAgICAgaWYgKHR5cGVzW3ldLnVzZWQgJiYgeSAhPSAoeD42P3gtNzp4KSkgeworICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDSE9JQ0UsIGZsYWcgJWx1IGluIHRyaWFsICVsdSB3YXMgaW5jb3JyZWN0bHkgc2V0IHRvIG9uZVxuIiwgeSwgeCk7CisgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgfQorICAgICAgICAgICBpZiAoIXR5cGVzW3ldLnVzZWQgJiYgeSA9PSAoeD42P3gtNzp4KSkgeworICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDSE9JQ0UsIGZsYWcgJWx1IGluIHRyaWFsICVsdSB3YXMgaW5jb3JyZWN0bHkgc2V0IHRvIHplcm9cbiIsIHksIHgpOworICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgIH0KKyAgICAgIH0KKyAgfQorICBtcF9jbGVhcihtcGludGVnZXIpOworICByZXR1cm4gMDsKK30KKyAgIAorCitpbnQgZGVyX3Rlc3RzKHZvaWQpCit7CisgICB1bnNpZ25lZCBsb25nIHgsIHksIHosIHp6LCBvaWRbMl1bMzJdOworICAgdW5zaWduZWQgY2hhciBidWZbM11bMjA0OF07CisgICB2b2lkICphLCAqYiwgKmMsICpkLCAqZSwgKmYsICpnOworCisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByc2Ffb2lkX2RlcltdID0geyAweDA2LCAweDA2LCAweDJhLCAweDg2LCAweDQ4LCAweDg2LCAweGY3LCAweDBkIH07CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyByc2Ffb2lkW10gICAgID0geyAxLCAyLCA4NDAsIDExMzU0OSB9OworCisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByc2FfaWE1W10gICAgID0gInRlc3QxQHJzYS5jb20iOworICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcnNhX2lhNV9kZXJbXSA9IHsgMHgxNiwgMHgwZCwgMHg3NCwgMHg2NSwgMHg3MywgMHg3NCwgMHgzMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAsIDB4NzIsIDB4NzMsIDB4NjEsIDB4MmUsIDB4NjMsIDB4NmYsIDB4NmQgfTsKKworICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcnNhX3ByaW50YWJsZVtdID0gIlRlc3QgVXNlciAxIjsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJzYV9wcmludGFibGVfZGVyW10gPSB7IDB4MTMsIDB4MGIsIDB4NTQsIDB4NjUsIDB4NzMsIDB4NzQsIDB4MjAsIDB4NTUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MywgMHg2NSwgMHg3MiwgMHgyMCwgMHgzMSB9OworCisgICBzdGF0aWMgY29uc3QgbHRjX3V0Y3RpbWUgICByc2FfdGltZTEgPSB7IDkxLCA1LCA2LCAxNiwgNDUsIDQwLCAxLCA3LCAwIH07CisgICBzdGF0aWMgY29uc3QgbHRjX3V0Y3RpbWUgICByc2FfdGltZTIgPSB7IDkxLCA1LCA2LCAyMywgNDUsIDQwLCAwLCAwLCAwIH07CisgICBsdGNfdXRjdGltZSAgICAgICAgICAgICAgICB0bXBfdGltZTsKKworICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcnNhX3RpbWUxX2RlcltdID0geyAweDE3LCAweDExLCAweDM5LCAweDMxLCAweDMwLCAweDM1LCAweDMwLCAweDM2LCAweDMxLCAweDM2LCAweDM0LCAweDM1LCAweDM0LCAweDMwLCAweDJELCAweDMwLCAweDM3LCAweDMwLCAweDMwIH07CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciByc2FfdGltZTJfZGVyW10gPSB7IDB4MTcsIDB4MGQsIDB4MzksIDB4MzEsIDB4MzAsIDB4MzUsIDB4MzAsIDB4MzYsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzQsIDB4MzAsIDB4NWEgfTsKKworICAgc3RhdGljIGNvbnN0IHdjaGFyX3QgdXRmOF8xW10gICAgICAgICAgID0geyAweDAwNDEsIDB4MjI2MiwgMHgwMzkxLCAweDAwMkUgfTsKKyAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHV0ZjhfMV9kZXJbXSA9IHsgMHgwQywgMHgwNywgMHg0MSwgMHhFMiwgMHg4OSwgMHhBMiwgMHhDRSwgMHg5MSwgMHgyRSB9OworICAgc3RhdGljIGNvbnN0IHdjaGFyX3QgdXRmOF8yW10gICAgICAgICAgID0geyAweEQ1NUMsIDB4QUQ2RCwgMHhDNUI0IH07CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciB1dGY4XzJfZGVyW10gPSB7IDB4MEMsIDB4MDksIDB4RUQsIDB4OTUsIDB4OUMsIDB4RUEsIDB4QjUsIDB4QUQsIDB4RUMsIDB4OTYsIDB4QjQgfTsKKworICAgdW5zaWduZWQgY2hhciB1dGY4X2J1ZlszMl07CisgICB3Y2hhcl90IHV0Zjhfb3V0WzMyXTsKKworICAgRE8obXBfaW5pdF9tdWx0aSgmYSwgJmIsICZjLCAmZCwgJmUsICZmLCAmZywgTlVMTCkpOworICAgZm9yICh6eiA9IDA7IHp6IDwgMTY7IHp6KyspIHsKKyNpZmRlZiBVU0VfVEZNCisgICAgICBmb3IgKHogPSAwOyB6IDwgMjU2OyB6KyspIHsKKyNlbHNlCisgICAgICBmb3IgKHogPSAwOyB6IDwgMTAyNDsgeisrKSB7CisjZW5kaWYKKyAgICAgICAgIGlmICh5YXJyb3dfcmVhZChidWZbMF0sIHosICZ5YXJyb3dfcHJuZykgIT0geikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVhZCAlbHUgYnl0ZXMgZnJvbSB5YXJyb3dcbiIsIHopOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICB9CisgICAgICAgICBETyhtcF9yZWFkX3Vuc2lnbmVkX2JpbihhLCBidWZbMF0sIHopKTsKKy8qICAgICAgICAgIGlmIChtcF9pc3plcm8oYSkgPT0gTFRDX01QX05PKSB7IGEuc2lnbiA9IGJ1ZlswXVswXSAmIDEgPyBMVENfTVBfWlBPUyA6IExUQ19NUF9ORUc7IH0gKi8KKyAgICAgICAgIHggPSBzaXplb2YoYnVmWzBdKTsKKyAgICAgICAgIERPKGRlcl9lbmNvZGVfaW50ZWdlcihhLCBidWZbMF0sICZ4KSk7CisgICAgICAgICBETyhkZXJfbGVuZ3RoX2ludGVnZXIoYSwgJnkpKTsKKyAgICAgICAgIGlmICh5ICE9IHgpIHsgZnByaW50ZihzdGRlcnIsICJERVIgSU5URUdFUiBzaXplIG1pc21hdGNoXG4iKTsgcmV0dXJuIDE7IH0KKyAgICAgICAgIG1wX3NldF9pbnQoYiwgMCk7CisgICAgICAgICBETyhkZXJfZGVjb2RlX2ludGVnZXIoYnVmWzBdLCB5LCBiKSk7CisgICAgICAgICBpZiAoeSAhPSB4IHx8IG1wX2NtcChhLCBiKSAhPSBMVENfTVBfRVEpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJWx1OiAlbHUgdnMgJWx1XG4iLCB6LCB4LCB5KTsKKyAgICAgICAgICAgIG1wX2NsZWFyX211bHRpKGEsIGIsIGMsIGQsIGUsIGYsIGcsIE5VTEwpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICB9CisgICAgICB9CisgICB9CisKKy8qIHRlc3Qgc2hvcnQgaW50ZWdlciAqLworICAgZm9yICh6eiA9IDA7IHp6IDwgMjU2OyB6eisrKSB7CisgICAgICBmb3IgKHogPSAxOyB6IDwgNDsgeisrKSB7CisgICAgICAgICBpZiAoeWFycm93X3JlYWQoYnVmWzBdLCB6LCAmeWFycm93X3BybmcpICE9IHopIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJlYWQgJWx1IGJ5dGVzIGZyb20geWFycm93XG4iLCB6KTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgfQorICAgICAgICAgLyogZW5jb2RlIHdpdGggbm9ybWFsICovCisgICAgICAgICBETyhtcF9yZWFkX3Vuc2lnbmVkX2JpbihhLCBidWZbMF0sIHopKTsKKworICAgICAgICAgeCA9IHNpemVvZihidWZbMF0pOworICAgICAgICAgRE8oZGVyX2VuY29kZV9pbnRlZ2VyKGEsIGJ1ZlswXSwgJngpKTsKKworICAgICAgICAgLyogZW5jb2RlIHdpdGggc2hvcnQgKi8KKyAgICAgICAgIHkgPSBzaXplb2YoYnVmWzFdKTsKKyAgICAgICAgIERPKGRlcl9lbmNvZGVfc2hvcnRfaW50ZWdlcihtcF9nZXRfaW50KGEpLCBidWZbMV0sICZ5KSk7CisgICAgICAgICBpZiAoeCAhPSB5IHx8IG1lbWNtcChidWZbMF0sIGJ1ZlsxXSwgeCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREVSIElOVEVHRVIgc2hvcnQgZW5jb2RpbmcgZmFpbGVkLCAlbHUsICVsdVxuIiwgeCwgeSk7CisgICAgICAgICAgICBmb3IgKHogPSAwOyB6IDwgeDsgeisrKSBmcHJpbnRmKHN0ZGVyciwgIiUwMnggIiwgYnVmWzBdW3pdKTsgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICAgICAgZm9yICh6ID0gMDsgeiA8IHk7IHorKykgZnByaW50ZihzdGRlcnIsICIlMDJ4ICIsIGJ1ZlsxXVt6XSk7IGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgICAgIG1wX2NsZWFyX211bHRpKGEsIGIsIGMsIGQsIGUsIGYsIGcsIE5VTEwpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICB9CisKKyAgICAgICAgIC8qIGRlY29kZSBpdCAqLworICAgICAgICAgeCA9IDA7CisgICAgICAgICBETyhkZXJfZGVjb2RlX3Nob3J0X2ludGVnZXIoYnVmWzFdLCB5LCAmeCkpOworICAgICAgICAgaWYgKHggIT0gbXBfZ2V0X2ludChhKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJERVIgSU5URUdFUiBzaG9ydCBkZWNvZGluZyBmYWlsZWQsICVsdSwgJWx1XG4iLCB4LCBtcF9nZXRfaW50KGEpKTsKKyAgICAgICAgICAgIG1wX2NsZWFyX211bHRpKGEsIGIsIGMsIGQsIGUsIGYsIGcsIE5VTEwpOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICB9CisgICAgICB9CisgICB9IAorICAgbXBfY2xlYXJfbXVsdGkoYSwgYiwgYywgZCwgZSwgZiwgZywgTlVMTCk7CisKKyAgIAorLyogVGVzdCBiaXQgc3RyaW5nICovCisgICBmb3IgKHp6ID0gMTsgenogPCAxNTM2OyB6eisrKSB7CisgICAgICAgeWFycm93X3JlYWQoYnVmWzBdLCB6eiwgJnlhcnJvd19wcm5nKTsKKyAgICAgICBmb3IgKHogPSAwOyB6IDwgeno7IHorKykgeworICAgICAgICAgICBidWZbMF1bel0gJj0gMHgwMTsKKyAgICAgICB9CisgICAgICAgeCA9IHNpemVvZihidWZbMV0pOworICAgICAgIERPKGRlcl9lbmNvZGVfYml0X3N0cmluZyhidWZbMF0sIHp6LCBidWZbMV0sICZ4KSk7CisgICAgICAgRE8oZGVyX2xlbmd0aF9iaXRfc3RyaW5nKHp6LCAmeSkpOworICAgICAgIGlmICh5ICE9IHgpIHsgCisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbkRFUiBCSVQgU1RSSU5HIGxlbmd0aCBvZiBlbmNvZGVkIG5vdCBtYXRjaCBleHBlY3RlZCA6ICVsdSwgJWx1LCAlbHVcbiIsIHosIHgsIHkpOworICAgICAgICAgIHJldHVybiAxOworICAgICAgIH0KKworICAgICAgIHkgPSBzaXplb2YoYnVmWzJdKTsKKyAgICAgICBETyhkZXJfZGVjb2RlX2JpdF9zdHJpbmcoYnVmWzFdLCB4LCBidWZbMl0sICZ5KSk7CisgICAgICAgaWYgKHkgIT0genogfHwgbWVtY21wKGJ1ZlswXSwgYnVmWzJdLCB6eikpIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVsdSwgJWx1LCAlZFxuIiwgeSwgenosIG1lbWNtcChidWZbMF0sIGJ1ZlsyXSwgenopKTsKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICB9CisgICB9CisKKy8qIFRlc3Qgb2N0ZXQgc3RyaW5nICovCisgICBmb3IgKHp6ID0gMTsgenogPCAxNTM2OyB6eisrKSB7CisgICAgICAgeWFycm93X3JlYWQoYnVmWzBdLCB6eiwgJnlhcnJvd19wcm5nKTsKKyAgICAgICB4ID0gc2l6ZW9mKGJ1ZlsxXSk7CisgICAgICAgRE8oZGVyX2VuY29kZV9vY3RldF9zdHJpbmcoYnVmWzBdLCB6eiwgYnVmWzFdLCAmeCkpOworICAgICAgIERPKGRlcl9sZW5ndGhfb2N0ZXRfc3RyaW5nKHp6LCAmeSkpOworICAgICAgIGlmICh5ICE9IHgpIHsgCisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbkRFUiBPQ1RFVCBTVFJJTkcgbGVuZ3RoIG9mIGVuY29kZWQgbm90IG1hdGNoIGV4cGVjdGVkIDogJWx1LCAlbHUsICVsdVxuIiwgeiwgeCwgeSk7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgfQorICAgICAgIHkgPSBzaXplb2YoYnVmWzJdKTsKKyAgICAgICBETyhkZXJfZGVjb2RlX29jdGV0X3N0cmluZyhidWZbMV0sIHgsIGJ1ZlsyXSwgJnkpKTsKKyAgICAgICBpZiAoeSAhPSB6eiB8fCBtZW1jbXAoYnVmWzBdLCBidWZbMl0sIHp6KSkgeworICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJWx1LCAlbHUsICVkXG4iLCB5LCB6eiwgbWVtY21wKGJ1ZlswXSwgYnVmWzJdLCB6eikpOworICAgICAgICAgIHJldHVybiAxOworICAgICAgIH0KKyAgIH0KKworLyogdGVzdCBPSUQgKi8KKyAgIHggPSBzaXplb2YoYnVmWzBdKTsKKyAgIERPKGRlcl9lbmNvZGVfb2JqZWN0X2lkZW50aWZpZXIoKHVuc2lnbmVkIGxvbmcqKXJzYV9vaWQsIHNpemVvZihyc2Ffb2lkKS9zaXplb2YocnNhX29pZFswXSksIGJ1ZlswXSwgJngpKTsKKyAgIGlmICh4ICE9IHNpemVvZihyc2Ffb2lkX2RlcikgfHwgbWVtY21wKHJzYV9vaWRfZGVyLCBidWZbMF0sIHgpKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgInJzYV9vaWRfZGVyIGVuY29kZSBmYWlsZWQgdG8gbWF0Y2gsICVsdSwgIiwgeCk7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgeDsgeSsrKSBmcHJpbnRmKHN0ZGVyciwgIiUwMnggIiwgYnVmWzBdW3ldKTsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgIHJldHVybiAxOworICAgfQorCisgICB5ID0gc2l6ZW9mKG9pZFswXSkvc2l6ZW9mKG9pZFswXVswXSk7CisgICBETyhkZXJfZGVjb2RlX29iamVjdF9pZGVudGlmaWVyKGJ1ZlswXSwgeCwgb2lkWzBdLCAmeSkpOworICAgaWYgKHkgIT0gc2l6ZW9mKHJzYV9vaWQpL3NpemVvZihyc2Ffb2lkWzBdKSB8fCBtZW1jbXAocnNhX29pZCwgb2lkWzBdLCBzaXplb2YocnNhX29pZCkpKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgInJzYV9vaWRfZGVyIGRlY29kZSBmYWlsZWQgdG8gbWF0Y2gsICVsdSwgIiwgeSk7CisgICAgICBmb3IgKHogPSAwOyB6IDwgeTsgeisrKSBmcHJpbnRmKHN0ZGVyciwgIiVsdSAiLCBvaWRbMF1bel0pOworICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgcmV0dXJuIDE7CisgICB9CisKKyAgIC8qIGRvIHJhbmRvbSBzdHJpbmdzICovCisgICBmb3IgKHp6ID0gMDsgenogPCA1MDAwOyB6eisrKSB7CisgICAgICAgLyogcGljayBhIHJhbmRvbSBudW1iZXIgb2Ygd29yZHMgKi8KKyAgICAgICB5YXJyb3dfcmVhZChidWZbMF0sIDQsICZ5YXJyb3dfcHJuZyk7CisgICAgICAgTE9BRDMyTCh6LCBidWZbMF0pOworICAgICAgIHogPSAyICsgKHogJSAoKHNpemVvZihvaWRbMF0pL3NpemVvZihvaWRbMF1bMF0pKSAtIDIpKTsKKyAgICAgICAKKyAgICAgICAvKiBmaWxsIHRoZW0gaW4gKi8KKyAgICAgICBvaWRbMF1bMF0gPSBidWZbMF1bMF0gJSAzOworICAgICAgIG9pZFswXVsxXSA9IGJ1ZlswXVsxXSAlIDQwOworCisgICAgICAgZm9yICh5ID0gMjsgeSA8IHo7IHkrKykgeworICAgICAgICAgIHlhcnJvd19yZWFkKGJ1ZlswXSwgNCwgJnlhcnJvd19wcm5nKTsKKyAgICAgICAgICBMT0FEMzJMKG9pZFswXVt5XSwgYnVmWzBdKTsKKyAgICAgICB9CisKKyAgICAgICAvKiBlbmNvZGUgaXQgKi8KKyAgICAgICB4ID0gc2l6ZW9mKGJ1ZlswXSk7CisgICAgICAgRE8oZGVyX2VuY29kZV9vYmplY3RfaWRlbnRpZmllcihvaWRbMF0sIHosIGJ1ZlswXSwgJngpKTsKKyAgICAgICBETyhkZXJfbGVuZ3RoX29iamVjdF9pZGVudGlmaWVyKG9pZFswXSwgeiwgJnkpKTsKKyAgICAgICBpZiAoeCAhPSB5KSB7CisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJSYW5kb20gT0lEICVsdSB0ZXN0IGZhaWxlZCwgbGVuZ3RoIG1pc21hdGNoOiAlbHUsICVsdVxuIiwgeiwgeCwgeSk7CisgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IHo7IHgrKykgZnByaW50ZihzdGRlcnIsICIlbHVcbiIsIG9pZFswXVt4XSk7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgfQorICAgICAgIAorICAgICAgIC8qIGRlY29kZSBpdCAqLworICAgICAgIHkgPSBzaXplb2Yob2lkWzBdKS9zaXplb2Yob2lkWzBdWzBdKTsKKyAgICAgICBETyhkZXJfZGVjb2RlX29iamVjdF9pZGVudGlmaWVyKGJ1ZlswXSwgeCwgb2lkWzFdLCAmeSkpOworICAgICAgIGlmICh5ICE9IHopIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJhbmRvbSBPSUQgJWx1IHRlc3QgZmFpbGVkLCBkZWNvZGUgbGVuZ3RoIG1pc21hdGNoOiAlbHUsICVsdVxuIiwgeiwgeCwgeSk7CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgfQorICAgICAgIGlmIChtZW1jbXAob2lkWzBdLCBvaWRbMV0sIHNpemVvZihvaWRbMF1bMF0pICogeikpIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJhbmRvbSBPSUQgJWx1IHRlc3QgZmFpbGVkLCBkZWNvZGVkIHZhbHVlcyB3cm9uZ1xuIiwgeik7CisgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IHo7IHgrKykgZnByaW50ZihzdGRlcnIsICIlbHVcbiIsIG9pZFswXVt4XSk7IGZwcmludGYoc3RkZXJyLCAiXG5cbiBHb3QgXG5cbiIpOworICAgICAgICAgIGZvciAoeCA9IDA7IHggPCB6OyB4KyspIGZwcmludGYoc3RkZXJyLCAiJWx1XG4iLCBvaWRbMV1beF0pOworICAgICAgICAgIHJldHVybiAxOworICAgICAgIH0KKyAgIH0KKworLyogSUE1IHN0cmluZyAqLworICAgeCA9IHNpemVvZihidWZbMF0pOworICAgRE8oZGVyX2VuY29kZV9pYTVfc3RyaW5nKHJzYV9pYTUsIHN0cmxlbigoY2hhciopcnNhX2lhNSksIGJ1ZlswXSwgJngpKTsKKyAgIGlmICh4ICE9IHNpemVvZihyc2FfaWE1X2RlcikgfHwgbWVtY21wKGJ1ZlswXSwgcnNhX2lhNV9kZXIsIHgpKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIklBNSBlbmNvZGUgZmFpbGVkOiAlbHUsICVsdVxuIiwgeCwgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mKHJzYV9pYTVfZGVyKSk7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIERPKGRlcl9sZW5ndGhfaWE1X3N0cmluZyhyc2FfaWE1LCBzdHJsZW4oKGNoYXIqKXJzYV9pYTUpLCAmeSkpOworICAgaWYgKHkgIT0geCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJJQTUgbGVuZ3RoIGZhaWxlZCB0byBtYXRjaDogJWx1LCAlbHVcbiIsIHgsIHkpOworICAgICAgcmV0dXJuIDE7CisgICB9CisgICB5ID0gc2l6ZW9mKGJ1ZlsxXSk7CisgICBETyhkZXJfZGVjb2RlX2lhNV9zdHJpbmcoYnVmWzBdLCB4LCBidWZbMV0sICZ5KSk7CisgICBpZiAoeSAhPSBzdHJsZW4oKGNoYXIqKXJzYV9pYTUpIHx8IG1lbWNtcChidWZbMV0sIHJzYV9pYTUsIHN0cmxlbigoY2hhciopcnNhX2lhNSkpKSB7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJERVIgSUE1IGZhaWxlZCB0ZXN0IHZlY3RvclxuIik7CisgICAgICAgcmV0dXJuIDE7CisgICB9CisKKy8qIFByaW50YWJsZSBzdHJpbmcgKi8KKyAgIHggPSBzaXplb2YoYnVmWzBdKTsKKyAgIERPKGRlcl9lbmNvZGVfcHJpbnRhYmxlX3N0cmluZyhyc2FfcHJpbnRhYmxlLCBzdHJsZW4oKGNoYXIqKXJzYV9wcmludGFibGUpLCBidWZbMF0sICZ4KSk7CisgICBpZiAoeCAhPSBzaXplb2YocnNhX3ByaW50YWJsZV9kZXIpIHx8IG1lbWNtcChidWZbMF0sIHJzYV9wcmludGFibGVfZGVyLCB4KSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJQUklOVEFCTEUgZW5jb2RlIGZhaWxlZDogJWx1LCAlbHVcbiIsIHgsICh1bnNpZ25lZCBsb25nKXNpemVvZihyc2FfcHJpbnRhYmxlX2RlcikpOworICAgICAgcmV0dXJuIDE7CisgICB9CisgICBETyhkZXJfbGVuZ3RoX3ByaW50YWJsZV9zdHJpbmcocnNhX3ByaW50YWJsZSwgc3RybGVuKChjaGFyKilyc2FfcHJpbnRhYmxlKSwgJnkpKTsKKyAgIGlmICh5ICE9IHgpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAicHJpbnRhYmxlIGxlbmd0aCBmYWlsZWQgdG8gbWF0Y2g6ICVsdSwgJWx1XG4iLCB4LCB5KTsKKyAgICAgIHJldHVybiAxOworICAgfQorICAgeSA9IHNpemVvZihidWZbMV0pOworICAgRE8oZGVyX2RlY29kZV9wcmludGFibGVfc3RyaW5nKGJ1ZlswXSwgeCwgYnVmWzFdLCAmeSkpOworICAgaWYgKHkgIT0gc3RybGVuKChjaGFyKilyc2FfcHJpbnRhYmxlKSB8fCBtZW1jbXAoYnVmWzFdLCByc2FfcHJpbnRhYmxlLCBzdHJsZW4oKGNoYXIqKXJzYV9wcmludGFibGUpKSkgeworICAgICAgIGZwcmludGYoc3RkZXJyLCAiREVSIHByaW50YWJsZSBmYWlsZWQgdGVzdCB2ZWN0b3JcbiIpOworICAgICAgIHJldHVybiAxOworICAgfQorCisvKiBUZXN0IFVUQyB0aW1lICovCisgICB4ID0gc2l6ZW9mKGJ1ZlswXSk7CisgICBETyhkZXJfZW5jb2RlX3V0Y3RpbWUoKGx0Y191dGN0aW1lKikmcnNhX3RpbWUxLCBidWZbMF0sICZ4KSk7CisgICBpZiAoeCAhPSBzaXplb2YocnNhX3RpbWUxX2RlcikgfHwgbWVtY21wKGJ1ZlswXSwgcnNhX3RpbWUxX2RlciwgeCkpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiVVRDVElNRSBlbmNvZGUgb2YgcnNhX3RpbWUxIGZhaWxlZDogJWx1LCAlbHVcbiIsIHgsICh1bnNpZ25lZCBsb25nKXNpemVvZihyc2FfdGltZTFfZGVyKSk7CitmcHJpbnRmKHN0ZGVyciwgIlxuXG4iKTsKK2ZvciAoeSA9IDA7IHkgPCB4OyB5KyspIGZwcmludGYoc3RkZXJyLCAiJTAyeCAiLCBidWZbMF1beV0pOyBwcmludGYoIlxuIik7CisKKyAgICAgIHJldHVybiAxOworICAgfQorICAgRE8oZGVyX2xlbmd0aF91dGN0aW1lKChsdGNfdXRjdGltZSopJnJzYV90aW1lMSwgJnkpKTsKKyAgIGlmICh5ICE9IHgpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiVVRDVElNRSBsZW5ndGggZmFpbGVkIHRvIG1hdGNoIGZvciByc2FfdGltZTE6ICVsdSwgJWx1XG4iLCB4LCB5KTsKKyAgICAgIHJldHVybiAxOworICAgfQorICAgRE8oZGVyX2RlY29kZV91dGN0aW1lKGJ1ZlswXSwgJnksICZ0bXBfdGltZSkpOworICAgaWYgKHkgIT0geCB8fCBtZW1jbXAoJnJzYV90aW1lMSwgJnRtcF90aW1lLCBzaXplb2YobHRjX3V0Y3RpbWUpKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJVVENUSU1FIGRlY29kZSBmYWlsZWQgZm9yIHJzYV90aW1lMTogJWx1ICVsdVxuIiwgeCwgeSk7CitmcHJpbnRmKHN0ZGVyciwgIlxuXG4ldSAldSAldSAldSAldSAldSAldSAldSAldVxuXG4iLCAKK3RtcF90aW1lLllZLAordG1wX3RpbWUuTU0sCit0bXBfdGltZS5ERCwKK3RtcF90aW1lLmhoLAordG1wX3RpbWUubW0sCit0bXBfdGltZS5zcywKK3RtcF90aW1lLm9mZl9kaXIsCit0bXBfdGltZS5vZmZfbW0sCit0bXBfdGltZS5vZmZfaGgpOworICAgICAgcmV0dXJuIDE7CisgICB9CisKKyAgIHggPSBzaXplb2YoYnVmWzBdKTsKKyAgIERPKGRlcl9lbmNvZGVfdXRjdGltZSgobHRjX3V0Y3RpbWUqKSZyc2FfdGltZTIsIGJ1ZlswXSwgJngpKTsKKyAgIGlmICh4ICE9IHNpemVvZihyc2FfdGltZTJfZGVyKSB8fCBtZW1jbXAoYnVmWzBdLCByc2FfdGltZTJfZGVyLCB4KSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJVVENUSU1FIGVuY29kZSBvZiByc2FfdGltZTIgZmFpbGVkOiAlbHUsICVsdVxuIiwgeCwgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mKHJzYV90aW1lMV9kZXIpKTsKK2ZwcmludGYoc3RkZXJyLCAiXG5cbiIpOworZm9yICh5ID0gMDsgeSA8IHg7IHkrKykgZnByaW50ZihzdGRlcnIsICIlMDJ4ICIsIGJ1ZlswXVt5XSk7IHByaW50ZigiXG4iKTsKKworICAgICAgcmV0dXJuIDE7CisgICB9CisgICBETyhkZXJfbGVuZ3RoX3V0Y3RpbWUoKGx0Y191dGN0aW1lKikmcnNhX3RpbWUyLCAmeSkpOworICAgaWYgKHkgIT0geCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJVVENUSU1FIGxlbmd0aCBmYWlsZWQgdG8gbWF0Y2ggZm9yIHJzYV90aW1lMjogJWx1LCAlbHVcbiIsIHgsIHkpOworICAgICAgcmV0dXJuIDE7CisgICB9CisgICBETyhkZXJfZGVjb2RlX3V0Y3RpbWUoYnVmWzBdLCAmeSwgJnRtcF90aW1lKSk7CisgICBpZiAoeSAhPSB4IHx8IG1lbWNtcCgmcnNhX3RpbWUyLCAmdG1wX3RpbWUsIHNpemVvZihsdGNfdXRjdGltZSkpKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVUQ1RJTUUgZGVjb2RlIGZhaWxlZCBmb3IgcnNhX3RpbWUyOiAlbHUgJWx1XG4iLCB4LCB5KTsKK2ZwcmludGYoc3RkZXJyLCAiXG5cbiV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1ICV1XG5cbiIsIAordG1wX3RpbWUuWVksCit0bXBfdGltZS5NTSwKK3RtcF90aW1lLkRELAordG1wX3RpbWUuaGgsCit0bXBfdGltZS5tbSwKK3RtcF90aW1lLnNzLAordG1wX3RpbWUub2ZmX2RpciwKK3RtcF90aW1lLm9mZl9tbSwKK3RtcF90aW1lLm9mZl9oaCk7CisKKworICAgICAgcmV0dXJuIDE7CisgICB9CisKKyAgIC8qIFVURiA4ICovCisgICAgIC8qIGVuY29kZSBpdCAqLworICAgICB4ID0gc2l6ZW9mKHV0ZjhfYnVmKTsKKyAgICAgRE8oZGVyX2VuY29kZV91dGY4X3N0cmluZyh1dGY4XzEsIHNpemVvZih1dGY4XzEpIC8gc2l6ZW9mKHV0ZjhfMVswXSksIHV0ZjhfYnVmLCAmeCkpOworICAgICBpZiAoeCAhPSBzaXplb2YodXRmOF8xX2RlcikgfHwgbWVtY21wKHV0ZjhfYnVmLCB1dGY4XzFfZGVyLCB4KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRFUiBVVEY4XzEgZW5jb2RlZCB0byAlbHUgYnl0ZXNcbiIsIHgpOworICAgICAgICBmb3IgKHkgPSAwOyB5IDwgeDsgeSsrKSBmcHJpbnRmKHN0ZGVyciwgIiUwMnggIiwgKHVuc2lnbmVkKXV0ZjhfYnVmW3ldKTsgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICAgfQorICAgICAvKiBkZWNvZGUgaXQgKi8KKyAgICAgeSA9IHNpemVvZih1dGY4X291dCkgLyBzaXplb2YodXRmOF9vdXRbMF0pOworICAgICBETyhkZXJfZGVjb2RlX3V0Zjhfc3RyaW5nKHV0ZjhfYnVmLCB4LCB1dGY4X291dCwgJnkpKTsKKyAgICAgaWYgKHkgIT0gKHNpemVvZih1dGY4XzEpIC8gc2l6ZW9mKHV0ZjhfMVswXSkpIHx8IG1lbWNtcCh1dGY4XzEsIHV0Zjhfb3V0LCB5ICogc2l6ZW9mKHdjaGFyX3QpKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRFUiBVVEY4XzEgZGVjb2RlZCB0byAlbHUgd2NoYXJfdFxuIiwgeSk7CisgICAgICAgIGZvciAoeCA9IDA7IHggPCB5OyB4KyspIGZwcmludGYoc3RkZXJyLCAiJTA0bHggIiwgKHVuc2lnbmVkIGxvbmcpdXRmOF9vdXRbeF0pOyBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgIHJldHVybiAxOworICAgICB9CisKKyAgICAgLyogZW5jb2RlIGl0ICovCisgICAgIHggPSBzaXplb2YodXRmOF9idWYpOworICAgICBETyhkZXJfZW5jb2RlX3V0Zjhfc3RyaW5nKHV0ZjhfMiwgc2l6ZW9mKHV0ZjhfMikgLyBzaXplb2YodXRmOF8yWzBdKSwgdXRmOF9idWYsICZ4KSk7CisgICAgIGlmICh4ICE9IHNpemVvZih1dGY4XzJfZGVyKSB8fCBtZW1jbXAodXRmOF9idWYsIHV0ZjhfMl9kZXIsIHgpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREVSIFVURjhfMiBlbmNvZGVkIHRvICVsdSBieXRlc1xuIiwgeCk7CisgICAgICAgIGZvciAoeSA9IDA7IHkgPCB4OyB5KyspIGZwcmludGYoc3RkZXJyLCAiJTAyeCAiLCAodW5zaWduZWQpdXRmOF9idWZbeV0pOyBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgIHJldHVybiAxOworICAgICB9CisgICAgIC8qIGRlY29kZSBpdCAqLworICAgICB5ID0gc2l6ZW9mKHV0Zjhfb3V0KSAvIHNpemVvZih1dGY4X291dFswXSk7CisgICAgIERPKGRlcl9kZWNvZGVfdXRmOF9zdHJpbmcodXRmOF9idWYsIHgsIHV0Zjhfb3V0LCAmeSkpOworICAgICBpZiAoeSAhPSAoc2l6ZW9mKHV0ZjhfMikgLyBzaXplb2YodXRmOF8yWzBdKSkgfHwgbWVtY21wKHV0ZjhfMiwgdXRmOF9vdXQsIHkgKiBzaXplb2Yod2NoYXJfdCkpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiREVSIFVURjhfMiBkZWNvZGVkIHRvICVsdSB3Y2hhcl90XG4iLCB5KTsKKyAgICAgICAgZm9yICh4ID0gMDsgeCA8IHk7IHgrKykgZnByaW50ZihzdGRlcnIsICIlMDRseCAiLCAodW5zaWduZWQgbG9uZyl1dGY4X291dFt4XSk7IGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKworCisgICBkZXJfc2V0X3Rlc3QoKTsKKyAgIGRlcl9mbGV4aV90ZXN0KCk7CisgICByZXR1cm4gZGVyX2Nob2ljZV90ZXN0KCk7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC90ZXN0cHJvZi9kZXJfdGVzdHMuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40OSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8yNiAwMjoxMDoyMSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC90ZXN0cHJvZi9kc2FfdGVzdC5jIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvZHNhX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjIzMDkyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvZHNhX3Rlc3QuYwpAQCAtMCwwICsxLDgyIEBACisjaW5jbHVkZSA8dG9tY3J5cHRfdGVzdC5oPgorCisjaWZkZWYgTURTQQorCitpbnQgZHNhX3Rlc3Qodm9pZCkKK3sKKyAgIHVuc2lnbmVkIGNoYXIgbXNnWzE2XSwgb3V0WzEwMjRdLCBvdXQyWzEwMjRdOworICAgdW5zaWduZWQgbG9uZyB4LCB5OworICAgaW50IHN0YXQxLCBzdGF0MjsKKyAgIGRzYV9rZXkga2V5LCBrZXkyOworCisgICAvKiBtYWtlIGEgcmFuZG9tIGtleSAqLworICAgRE8oZHNhX21ha2Vfa2V5KCZ5YXJyb3dfcHJuZywgZmluZF9wcm5nKCJ5YXJyb3ciKSwgMjAsIDEyOCwgJmtleSkpOworCisgICAvKiB2ZXJpZnkgaXQgKi8KKyAgIERPKGRzYV92ZXJpZnlfa2V5KCZrZXksICZzdGF0MSkpOworICAgaWYgKHN0YXQxID09IDApIHsgZnByaW50ZihzdGRlcnIsICJkc2FfdmVyaWZ5X2tleSAiKTsgcmV0dXJuIDE7IH0KKyAgIAorICAgLyogZW5jcnlwdCBhIG1lc3NhZ2UgKi8KKyAgIGZvciAoeCA9IDA7IHggPCAxNjsgeCsrKSB7IG1zZ1t4XSA9IHg7IH0KKyAgIHggPSBzaXplb2Yob3V0KTsKKyAgIERPKGRzYV9lbmNyeXB0X2tleShtc2csIDE2LCBvdXQsICZ4LCAmeWFycm93X3BybmcsIGZpbmRfcHJuZygieWFycm93IiksIGZpbmRfaGFzaCgic2hhMSIpLCAma2V5KSk7CisgICAKKyAgIC8qIGRlY3J5cHQgKi8KKyAgIHkgPSBzaXplb2Yob3V0Mik7CisgICBETyhkc2FfZGVjcnlwdF9rZXkob3V0LCB4LCBvdXQyLCAmeSwgJmtleSkpOworICAgCisgICBpZiAoeSAhPSAxNiB8fCBtZW1jbXAob3V0MiwgbXNnLCAxNikpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiZHNhX2RlY3J5cHQgZmFpbGVkLCB5ID09ICVsdVxuIiwgeSk7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKworICAgLyogc2lnbiB0aGUgbWVzc2FnZSAqLworICAgeCA9IHNpemVvZihvdXQpOworICAgRE8oZHNhX3NpZ25faGFzaChtc2csIHNpemVvZihtc2cpLCBvdXQsICZ4LCAmeWFycm93X3BybmcsIGZpbmRfcHJuZygieWFycm93IiksICZrZXkpKTsKKworICAgLyogdmVyaWZ5IGl0IG9uY2UgKi8KKyAgIERPKGRzYV92ZXJpZnlfaGFzaChvdXQsIHgsIG1zZywgc2l6ZW9mKG1zZyksICZzdGF0MSwgJmtleSkpOworCisgICAvKiBNb2RpZnkgYW5kIHZlcmlmeSBhZ2FpbiAqLworICAgbXNnWzBdIF49IDE7CisgICBETyhkc2FfdmVyaWZ5X2hhc2gob3V0LCB4LCBtc2csIHNpemVvZihtc2cpLCAmc3RhdDIsICZrZXkpKTsKKyAgIG1zZ1swXSBePSAxOworICAgaWYgKCEoc3RhdDEgPT0gMSAmJiBzdGF0MiA9PSAwKSkgeyBmcHJpbnRmKHN0ZGVyciwgImRzYV92ZXJpZnkgJWQgJWQiLCBzdGF0MSwgc3RhdDIpOyByZXR1cm4gMTsgfQorCisgICAvKiB0ZXN0IGV4cG9ydGluZyBpdCAqLworICAgeCA9IHNpemVvZihvdXQyKTsKKyAgIERPKGRzYV9leHBvcnQob3V0MiwgJngsIFBLX1BSSVZBVEUsICZrZXkpKTsKKyAgIERPKGRzYV9pbXBvcnQob3V0MiwgeCwgJmtleTIpKTsKKworICAgLyogdmVyaWZ5IGEgc2lnbmF0dXJlIHdpdGggaXQgKi8KKyAgIERPKGRzYV92ZXJpZnlfaGFzaChvdXQsIHgsIG1zZywgc2l6ZW9mKG1zZyksICZzdGF0MSwgJmtleTIpKTsKKyAgIGlmIChzdGF0MSA9PSAwKSB7IGZwcmludGYoc3RkZXJyLCAiZHNhX3ZlcmlmeSAoaW1wb3J0IHByaXZhdGUpICVkICIsIHN0YXQxKTsgcmV0dXJuIDE7IH0KKyAgIGRzYV9mcmVlKCZrZXkyKTsKKworICAgLyogZXhwb3J0IGFzIHB1YmxpYyBub3cgKi8KKyAgIHggPSBzaXplb2Yob3V0Mik7CisgICBETyhkc2FfZXhwb3J0KG91dDIsICZ4LCBQS19QVUJMSUMsICZrZXkpKTsKKworICAgRE8oZHNhX2ltcG9ydChvdXQyLCB4LCAma2V5MikpOworICAgLyogdmVyaWZ5IGEgc2lnbmF0dXJlIHdpdGggaXQgKi8KKyAgIERPKGRzYV92ZXJpZnlfaGFzaChvdXQsIHgsIG1zZywgc2l6ZW9mKG1zZyksICZzdGF0MSwgJmtleTIpKTsKKyAgIGlmIChzdGF0MSA9PSAwKSB7IGZwcmludGYoc3RkZXJyLCAiZHNhX3ZlcmlmeSAoaW1wb3J0IHB1YmxpYykgJWQgIiwgc3RhdDEpOyByZXR1cm4gMTsgfQorICAgZHNhX2ZyZWUoJmtleTIpOworICAgZHNhX2ZyZWUoJmtleSk7CisKKyAgIHJldHVybiAwOworfQorCisjZWxzZQorCitpbnQgZHNhX3Rlc3Qodm9pZCkKK3sKKyAgZnByaW50ZihzdGRlcnIsICJOT1AiKTsKKyAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC90ZXN0cHJvZi9kc2FfdGVzdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjkgJCAqLworLyogJERhdGU6IDIwMDUvMTAvMzAgMTg6NDk6MTQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvdGVzdHByb2YvZWNjX3Rlc3QuYyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL2VjY190ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NmYWJlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL2VjY190ZXN0LmMKQEAgLTAsMCArMSwyNTIgQEAKKyNpbmNsdWRlIDx0b21jcnlwdF90ZXN0Lmg+CisKKyNpZmRlZiBNRUNDCisKK3N0YXRpYyBpbnQgc2l6ZXNbXSA9IHsKKyNpZmRlZiBFQ0MxMTIKKzE0LAorI2VuZGlmCisjaWZkZWYgRUNDMTI4CisxNiwKKyNlbmRpZgorI2lmZGVmIEVDQzE2MAorMjAsCisjZW5kaWYKKyNpZmRlZiBFQ0MxOTIKKzI0LAorI2VuZGlmCisjaWZkZWYgRUNDMjI0CisyOCwKKyNlbmRpZgorI2lmZGVmIEVDQzI1NgorMzIsCisjZW5kaWYKKyNpZmRlZiBFQ0MzODQKKzQ4LAorI2VuZGlmCisjaWZkZWYgRUNDNTIxCis2NQorI2VuZGlmCit9OworCisjaWZkZWYgTFRDX0VDQ19TSEFNSVIKK2ludCBlY2NfdGVzdF9zaGFtaXIodm9pZCkKK3sKKyAgIHZvaWQgKm1vZHVsdXMsICptcCwgKmtBLCAqa0IsICpyQSwgKnJCOworICAgZWNjX3BvaW50ICpHLCAqQSwgKkIsICpDMSwgKkMyOworICAgaW50IHgsIHksIHo7CisgICB1bnNpZ25lZCBjaGFyIGJ1ZltFQ0NfQlVGX1NJWkVdOworCisgICBETyhtcF9pbml0X211bHRpKCZrQSwgJmtCLCAmckEsICZyQiwgJm1vZHVsdXMsIE5VTEwpKTsKKyAgIExUQ19BUkdDSEsoKEcgID0gbHRjX2VjY19uZXdfcG9pbnQoKSkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKChBICA9IGx0Y19lY2NfbmV3X3BvaW50KCkpICE9IE5VTEwpOworICAgTFRDX0FSR0NISygoQiAgPSBsdGNfZWNjX25ld19wb2ludCgpKSAhPSBOVUxMKTsKKyAgIExUQ19BUkdDSEsoKEMxID0gbHRjX2VjY19uZXdfcG9pbnQoKSkgIT0gTlVMTCk7CisgICBMVENfQVJHQ0hLKChDMiA9IGx0Y19lY2NfbmV3X3BvaW50KCkpICE9IE5VTEwpOworCisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHNpemVzKS9zaXplb2Yoc2l6ZXNbMF0pKTsgeCsrKSB7CisgICAgICAgLyogZ2V0IHRoZSBiYXNlIHBvaW50ICovCisgICAgICAgZm9yICh6ID0gMDsgbHRjX2VjY19zZXRzW3pdLm5hbWU7IHorKykgeworICAgICAgICAgICBpZiAoc2l6ZXNbel0gPCBsdGNfZWNjX3NldHNbel0uc2l6ZSkgYnJlYWs7CisgICAgICAgfQorICAgICAgIExUQ19BUkdDSEsobHRjX2VjY19zZXRzW3pdLm5hbWUgIT0gTlVMTCk7CisKKyAgICAgICAvKiBsb2FkIGl0ICovCisgICAgICAgRE8obXBfcmVhZF9yYWRpeChHLT54LCBsdGNfZWNjX3NldHNbel0uR3gsIDE2KSk7CisgICAgICAgRE8obXBfcmVhZF9yYWRpeChHLT55LCBsdGNfZWNjX3NldHNbel0uR3ksIDE2KSk7CisgICAgICAgRE8obXBfc2V0KEctPnosIDEpKTsKKyAgICAgICBETyhtcF9yZWFkX3JhZGl4KG1vZHVsdXMsIGx0Y19lY2Nfc2V0c1t6XS5wcmltZSwgMTYpKTsKKyAgICAgICBETyhtcF9tb250Z29tZXJ5X3NldHVwKG1vZHVsdXMsICZtcCkpOworCisgICAgICAgLyogZG8gMTAwIHJhbmRvbSB0ZXN0cyAqLworICAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDA7IHkrKykgeworICAgICAgICAgIC8qIHBpY2sgYSByYW5kb20gcjEsIHIyICovCisgICAgICAgICAgTFRDX0FSR0NISyh5YXJyb3dfcmVhZChidWYsIHNpemVzW3hdLCAmeWFycm93X3BybmcpID09IHNpemVzW3hdKTsKKyAgICAgICAgICBETyhtcF9yZWFkX3Vuc2lnbmVkX2JpbihyQSwgYnVmLCBzaXplc1t4XSkpOworICAgICAgICAgIExUQ19BUkdDSEsoeWFycm93X3JlYWQoYnVmLCBzaXplc1t4XSwgJnlhcnJvd19wcm5nKSA9PSBzaXplc1t4XSk7CisgICAgICAgICAgRE8obXBfcmVhZF91bnNpZ25lZF9iaW4ockIsIGJ1Ziwgc2l6ZXNbeF0pKTsKKworICAgICAgICAgIC8qIGNvbXB1dGUgckEgKiBHID0gQSAqLworICAgICAgICAgIERPKGx0Y19tcC5lY2NfcHRtdWwockEsIEcsIEEsIG1vZHVsdXMsIDEpKTsKKyAgICAgICAKKyAgICAgICAgICAvKiBjb21wdXRlIHJCICogRyA9IEIgKi8KKyAgICAgICAgICBETyhsdGNfbXAuZWNjX3B0bXVsKHJCLCBHLCBCLCBtb2R1bHVzLCAxKSk7CisKKyAgICAgICAgICAvKiBwaWNrIGEgcmFuZG9tIGtBLCBrQiAqLworICAgICAgICAgIExUQ19BUkdDSEsoeWFycm93X3JlYWQoYnVmLCBzaXplc1t4XSwgJnlhcnJvd19wcm5nKSA9PSBzaXplc1t4XSk7CisgICAgICAgICAgRE8obXBfcmVhZF91bnNpZ25lZF9iaW4oa0EsIGJ1Ziwgc2l6ZXNbeF0pKTsKKyAgICAgICAgICBMVENfQVJHQ0hLKHlhcnJvd19yZWFkKGJ1Ziwgc2l6ZXNbeF0sICZ5YXJyb3dfcHJuZykgPT0gc2l6ZXNbeF0pOworICAgICAgICAgIERPKG1wX3JlYWRfdW5zaWduZWRfYmluKGtCLCBidWYsIHNpemVzW3hdKSk7CisKKyAgICAgICAgICAvKiBub3csIGNvbXB1dGUga0EqQSArIGtCKkIgPSBDMSB1c2luZyB0aGUgb2xkZXIgbWV0aG9kICovCisgICAgICAgICAgRE8obHRjX21wLmVjY19wdG11bChrQSwgQSwgQzEsIG1vZHVsdXMsIDApKTsKKyAgICAgICAgICBETyhsdGNfbXAuZWNjX3B0bXVsKGtCLCBCLCBDMiwgbW9kdWx1cywgMCkpOworICAgICAgICAgIERPKGx0Y19tcC5lY2NfcHRhZGQoQzEsIEMyLCBDMSwgbW9kdWx1cywgbXApKTsKKyAgICAgICAgICBETyhsdGNfbXAuZWNjX21hcChDMSwgbW9kdWx1cywgbXApKTsKKworICAgICAgICAgIC8qIG5vdyBjb21wdXRlIHVzaW5nIG11bDJhZGQgKi8KKyAgICAgICAgICBETyhsdGNfbXAuZWNjX211bDJhZGQoQSwga0EsIEIsIGtCLCBDMiwgbW9kdWx1cykpOworCisgICAgICAgICAgLyogaXMgdGhleSB0aGUgc2FtZXM/ICAqLworICAgICAgICAgIGlmICgobXBfY21wKEMxLT54LCBDMi0+eCkgIT0gTFRDX01QX0VRKSB8fCAobXBfY21wKEMxLT55LCBDMi0+eSkgIT0gTFRDX01QX0VRKSB8fCAobXBfY21wKEMxLT56LCBDMi0+eikgIT0gTFRDX01QX0VRKSkgeworICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRUNDIGZhaWxlZCBzaGFtaXIgdGVzdDogc2l6ZT0lZCwgdGVzdG5vPSVkXG4iLCBzaXplc1t4XSwgeSk7CisgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgfQorICAgICAgfQorICAgICAgbXBfbW9udGdvbWVyeV9mcmVlKG1wKTsKKyAgfQorICBsdGNfZWNjX2RlbF9wb2ludChDMik7CisgIGx0Y19lY2NfZGVsX3BvaW50KEMxKTsKKyAgbHRjX2VjY19kZWxfcG9pbnQoQik7CisgIGx0Y19lY2NfZGVsX3BvaW50KEEpOworICBsdGNfZWNjX2RlbF9wb2ludChHKTsKKyAgbXBfY2xlYXJfbXVsdGkoa0EsIGtCLCByQSwgckIsIG1vZHVsdXMsIE5VTEwpOworICByZXR1cm4gMDsKK30KKyNlbmRpZgorCitpbnQgZWNjX3Rlc3RzICh2b2lkKQoreworICB1bnNpZ25lZCBjaGFyIGJ1Zls0XVs0MDk2XTsKKyAgdW5zaWduZWQgbG9uZyB4LCB5LCB6LCBzOworICBpbnQgICAgICAgICAgIHN0YXQsIHN0YXQyOworICBlY2Nfa2V5IHVzZXJhLCB1c2VyYiwgcHViS2V5LCBwcml2S2V5OworCQorICBETyhlY2NfdGVzdCAoKSk7CisgIERPKGVjY190ZXN0ICgpKTsKKyAgRE8oZWNjX3Rlc3QgKCkpOworICBETyhlY2NfdGVzdCAoKSk7CisgIERPKGVjY190ZXN0ICgpKTsKKworICBmb3IgKHMgPSAwOyBzIDwgKHNpemVvZihzaXplcykvc2l6ZW9mKHNpemVzWzBdKSk7IHMrKykgeworICAgICAvKiBtYWtlIHVwIHR3byBrZXlzICovCisgICAgIERPKGVjY19tYWtlX2tleSAoJnlhcnJvd19wcm5nLCBmaW5kX3BybmcgKCJ5YXJyb3ciKSwgc2l6ZXNbc10sICZ1c2VyYSkpOworICAgICBETyhlY2NfbWFrZV9rZXkgKCZ5YXJyb3dfcHJuZywgZmluZF9wcm5nICgieWFycm93IiksIHNpemVzW3NdLCAmdXNlcmIpKTsKKworICAgICAvKiBtYWtlIHRoZSBzaGFyZWQgc2VjcmV0ICovCisgICAgIHggPSBzaXplb2YoYnVmWzBdKTsKKyAgICAgRE8oZWNjX3NoYXJlZF9zZWNyZXQgKCZ1c2VyYSwgJnVzZXJiLCBidWZbMF0sICZ4KSk7CisKKyAgICAgeSA9IHNpemVvZihidWZbMV0pOworICAgICBETyhlY2Nfc2hhcmVkX3NlY3JldCAoJnVzZXJiLCAmdXNlcmEsIGJ1ZlsxXSwgJnkpKTsKKworICAgICBpZiAoeSAhPSB4KSB7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJlY2MgU2hhcmVkIGtleXMgYXJlIG5vdCBzYW1lIHNpemUuIik7CisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKworICAgICBpZiAobWVtY21wIChidWZbMF0sIGJ1ZlsxXSwgeCkpIHsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVjYyBTaGFyZWQga2V5cyBub3Qgc2FtZSBjb250ZW50cy4iKTsKKyAgICAgICByZXR1cm4gMTsKKyAgICAgfQorCisgICAgIC8qIG5vdyBleHBvcnQgdXNlcmIgKi8KKyAgICAgeSA9IHNpemVvZihidWZbMF0pOworICAgICBETyhlY2NfZXhwb3J0IChidWZbMV0sICZ5LCBQS19QVUJMSUMsICZ1c2VyYikpOworICAgICBlY2NfZnJlZSAoJnVzZXJiKTsKKworICAgICAvKiBpbXBvcnQgYW5kIG1ha2UgdGhlIHNoYXJlZCBzZWNyZXQgYWdhaW4gKi8KKyAgICAgRE8oZWNjX2ltcG9ydCAoYnVmWzFdLCB5LCAmdXNlcmIpKTsKKworICAgICB6ID0gc2l6ZW9mKGJ1ZlswXSk7CisgICAgIERPKGVjY19zaGFyZWRfc2VjcmV0ICgmdXNlcmEsICZ1c2VyYiwgYnVmWzJdLCAmeikpOworCisgICAgIGlmICh6ICE9IHgpIHsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZC4gIFNpemUgZG9uJ3QgbWF0Y2g/Iik7CisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAgICAgaWYgKG1lbWNtcCAoYnVmWzBdLCBidWZbMl0sIHgpKSB7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQuICBDb250ZW50cyBkaWRuJ3QgbWF0Y2guIik7CisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKworICAgICAvKiBleHBvcnQgd2l0aCBBTlNJIFg5LjYzICovCisgICAgIHkgPSBzaXplb2YoYnVmWzFdKTsKKyAgICAgRE8oZWNjX2Fuc2lfeDk2M19leHBvcnQoJnVzZXJiLCBidWZbMV0sICZ5KSk7CisgICAgIGVjY19mcmVlICgmdXNlcmIpOworCisgICAgIC8qIG5vdyBpbXBvcnQgdGhlIEFOU0kga2V5ICovCisgICAgIERPKGVjY19hbnNpX3g5NjNfaW1wb3J0KGJ1ZlsxXSwgeSwgJnVzZXJiKSk7CisKKyAgICAgLyogc2hhcmVkIHNlY3JldCAqLworICAgICB6ID0gc2l6ZW9mKGJ1ZlswXSk7CisgICAgIERPKGVjY19zaGFyZWRfc2VjcmV0ICgmdXNlcmEsICZ1c2VyYiwgYnVmWzJdLCAmeikpOworCisgICAgIGlmICh6ICE9IHgpIHsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZC4gIFNpemUgZG9uJ3QgbWF0Y2g/Iik7CisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAgICAgaWYgKG1lbWNtcCAoYnVmWzBdLCBidWZbMl0sIHgpKSB7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQuICBDb250ZW50cyBkaWRuJ3QgbWF0Y2guIik7CisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKworICAgICBlY2NfZnJlZSAoJnVzZXJhKTsKKyAgICAgZWNjX2ZyZWUgKCZ1c2VyYik7CisKKyAgICAgLyogdGVzdCBlbmNyeXB0X2tleSAqLworICAgICBETyhlY2NfbWFrZV9rZXkgKCZ5YXJyb3dfcHJuZywgZmluZF9wcm5nICgieWFycm93IiksIHNpemVzW3NdLCAmdXNlcmEpKTsKKworICAgICAvKiBleHBvcnQga2V5ICovCisgICAgIHggPSBzaXplb2YoYnVmWzBdKTsKKyAgICAgRE8oZWNjX2V4cG9ydChidWZbMF0sICZ4LCBQS19QVUJMSUMsICZ1c2VyYSkpOworICAgICBETyhlY2NfaW1wb3J0KGJ1ZlswXSwgeCwgJnB1YktleSkpOworICAgICB4ID0gc2l6ZW9mKGJ1ZlswXSk7CisgICAgIERPKGVjY19leHBvcnQoYnVmWzBdLCAmeCwgUEtfUFJJVkFURSwgJnVzZXJhKSk7CisgICAgIERPKGVjY19pbXBvcnQoYnVmWzBdLCB4LCAmcHJpdktleSkpOworCisgICAgIGZvciAoeCA9IDA7IHggPCAzMjsgeCsrKSB7CisgICAgICAgIGJ1ZlswXVt4XSA9IHg7CisgICAgIH0KKyAgICAgeSA9IHNpemVvZiAoYnVmWzFdKTsKKyAgICAgRE8oZWNjX2VuY3J5cHRfa2V5IChidWZbMF0sIDMyLCBidWZbMV0sICZ5LCAmeWFycm93X3BybmcsIGZpbmRfcHJuZyAoInlhcnJvdyIpLCBmaW5kX2hhc2ggKCJzaGEyNTYiKSwgJnB1YktleSkpOworICAgICB6ZXJvbWVtIChidWZbMF0sIHNpemVvZiAoYnVmWzBdKSk7CisgICAgIHggPSBzaXplb2YgKGJ1ZlswXSk7CisgICAgIERPKGVjY19kZWNyeXB0X2tleSAoYnVmWzFdLCB5LCBidWZbMF0sICZ4LCAmcHJpdktleSkpOworICAgICBpZiAoeCAhPSAzMikgeworICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIChsZW5ndGgpIik7CisgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAgICAgZm9yICh4ID0gMDsgeCA8IDMyOyB4KyspIHsKKyAgICAgICAgaWYgKGJ1ZlswXVt4XSAhPSB4KSB7CisgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIChjb250ZW50cykiKTsKKyAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgfQorICAgICAvKiB0ZXN0IHNpZ25faGFzaCAqLworICAgICBmb3IgKHggPSAwOyB4IDwgMTY7IHgrKykgeworICAgICAgICBidWZbMF1beF0gPSB4OworICAgICB9CisgICAgIHggPSBzaXplb2YgKGJ1ZlsxXSk7CisgICAgIERPKGVjY19zaWduX2hhc2ggKGJ1ZlswXSwgMTYsIGJ1ZlsxXSwgJngsICZ5YXJyb3dfcHJuZywgZmluZF9wcm5nICgieWFycm93IiksICZwcml2S2V5KSk7CisgICAgIERPKGVjY192ZXJpZnlfaGFzaCAoYnVmWzFdLCB4LCBidWZbMF0sIDE2LCAmc3RhdCwgJnB1YktleSkpOworICAgICBidWZbMF1bMF0gXj0gMTsKKyAgICAgRE8oZWNjX3ZlcmlmeV9oYXNoIChidWZbMV0sIHgsIGJ1ZlswXSwgMTYsICZzdGF0MiwgJnByaXZLZXkpKTsKKyAgICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7IAorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImVjY192ZXJpZnlfaGFzaCBmYWlsZWQgJWQsICVkLCAiLCBzdGF0LCBzdGF0Mik7CisgICAgICAgIHJldHVybiAxOworICAgICB9CisgICAgIGVjY19mcmVlICgmdXNlcmEpOyAKKyAgICAgZWNjX2ZyZWUgKCZwdWJLZXkpOworICAgICBlY2NfZnJlZSAoJnByaXZLZXkpOworICB9CisjaWZkZWYgTFRDX0VDQ19TSEFNSVIKKyAgcmV0dXJuIGVjY190ZXN0X3NoYW1pcigpOworI2Vsc2UKKyAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworI2Vsc2UKKworaW50IGVjY190ZXN0cyh2b2lkKQoreworICAgZnByaW50ZihzdGRlcnIsICJOT1AiKTsKKyAgIHJldHVybiAwOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvdGVzdHByb2YvZWNjX3Rlc3QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yMSAkICovCisvKiAkRGF0ZTogMjAwNi8xMi8wNCAwMzoyMTowMyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC90ZXN0cHJvZi9rYXRqYV90ZXN0LmMgYi9saWJ0b21jcnlwdC90ZXN0cHJvZi9rYXRqYV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdkMDFmZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL2thdGphX3Rlc3QuYwpAQCAtMCwwICsxLDIzMSBAQAorI2luY2x1ZGUgPHRvbWNyeXB0X3Rlc3QuaD4KKworI2lmZGVmIE1LQVQKKworaW50IGthdGphX3Rlc3Qodm9pZCkKK3sKKyAgIHVuc2lnbmVkIGNoYXIgaW5bMTAyNF0sIG91dFsxMDI0XSwgdG1wWzEwMjRdOworICAga2F0amFfa2V5ICAgICBrZXksIHByaXZLZXksIHB1YktleTsKKyAgIGludCAgICAgICAgICAgaGFzaF9pZHgsIHBybmdfaWR4LCBzdGF0LCBzdGF0Miwgc2l6ZTsKKyAgIHVuc2lnbmVkIGxvbmcga2F0X21zZ3NpemUsIGxlbiwgbGVuMiwgY250OworICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbHBhcmFtW10gPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQgfTsKKworICAgaGFzaF9pZHggPSBmaW5kX2hhc2goInNoYTEiKTsKKyAgIHBybmdfaWR4ID0gZmluZF9wcm5nKCJ5YXJyb3ciKTsKKyAgIGlmIChoYXNoX2lkeCA9PSAtMSB8fCBwcm5nX2lkeCA9PSAtMSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJrYXRqYV90ZXN0IHJlcXVpcmVzIFNIQTEgYW5kIHlhcnJvdyIpOworICAgICAgcmV0dXJuIDE7CisgICB9CisKK2ZvciAoc2l6ZSA9IDEwMjQ7IHNpemUgPD0gMjA0ODsgc2l6ZSArPSAyNTYpIHsKKyAgCisgICAvKiBtYWtlIDEwIHJhbmRvbSBrZXkgKi8KKyAgIGZvciAoY250ID0gMDsgY250IDwgMTA7IGNudCsrKSB7CisgICAgICBETyhrYXRqYV9tYWtlX2tleSgmeWFycm93X3BybmcsIHBybmdfaWR4LCBzaXplLzgsICZrZXkpKTsKKyAgICAgIGlmIChtcF9jb3VudF9iaXRzKGtleS5OKSA8IHNpemUgLSA3KSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImthdGphXyVkIGtleSBtb2R1bHVzIGhhcyAlZCBiaXRzXG4iLCBzaXplLCBtcF9jb3VudF9iaXRzKGtleS5OKSk7CisKK2xlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS5OKTsKK21wX3RvX3Vuc2lnbmVkX2JpbihrZXkuTiwgdG1wKTsKKyBmcHJpbnRmKHN0ZGVyciwgIk4gPT0gXG4iKTsKK2ZvciAoY250ID0gMDsgY250IDwgbGVuOyApIHsKKyAgIGZwcmludGYoc3RkZXJyLCAiJTAyeCAiLCB0bXBbY250XSk7CisgICBpZiAoISgrK2NudCAmIDE1KSkgZnByaW50ZihzdGRlcnIsICJcbiIpOworfQorCitsZW4gPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXkucCk7CittcF90b191bnNpZ25lZF9iaW4oa2V5LnAsIHRtcCk7CisgZnByaW50ZihzdGRlcnIsICJwID09IFxuIik7Citmb3IgKGNudCA9IDA7IGNudCA8IGxlbjsgKSB7CisgICBmcHJpbnRmKHN0ZGVyciwgIiUwMnggIiwgdG1wW2NudF0pOworICAgaWYgKCEoKytjbnQgJiAxNSkpIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKworbGVuID0gbXBfdW5zaWduZWRfYmluX3NpemUoa2V5LnEpOworbXBfdG9fdW5zaWduZWRfYmluKGtleS5xLCB0bXApOworIGZwcmludGYoc3RkZXJyLCAiXG5xID09IFxuIik7Citmb3IgKGNudCA9IDA7IGNudCA8IGxlbjsgKSB7CisgICBmcHJpbnRmKHN0ZGVyciwgIiUwMnggIiwgdG1wW2NudF0pOworICAgaWYgKCEoKytjbnQgJiAxNSkpIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKyBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisKKworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICBpZiAoY250ICE9IDkpIHsKKyAgICAgICAgIGthdGphX2ZyZWUoJmtleSk7CisgICAgICB9CisgICB9CisgICAvKiBlbmNyeXB0IHRoZSBrZXkgKHdpdGhvdXQgbHBhcmFtKSAqLworICAgZm9yIChjbnQgPSAwOyBjbnQgPCA0OyBjbnQrKykgeworICAgZm9yIChrYXRfbXNnc2l6ZSA9IDE7IGthdF9tc2dzaXplIDw9IDQyOyBrYXRfbXNnc2l6ZSsrKSB7CisgICAgICAvKiBtYWtlIGEgcmFuZG9tIGtleS9tc2cgKi8KKyAgICAgIHlhcnJvd19yZWFkKGluLCBrYXRfbXNnc2l6ZSwgJnlhcnJvd19wcm5nKTsKKworICAgICAgbGVuICA9IHNpemVvZihvdXQpOworICAgICAgbGVuMiA9IGthdF9tc2dzaXplOworICAgCisgICAgICBETyhrYXRqYV9lbmNyeXB0X2tleShpbiwga2F0X21zZ3NpemUsIG91dCwgJmxlbiwgTlVMTCwgMCwgJnlhcnJvd19wcm5nLCBwcm5nX2lkeCwgaGFzaF9pZHgsICZrZXkpKTsKKyAgICAgIC8qIGNoYW5nZSBhIGJ5dGUgKi8KKyAgICAgIG91dFs4XSBePSAxOworICAgICAgRE8oa2F0amFfZGVjcnlwdF9rZXkob3V0LCBsZW4sIHRtcCwgJmxlbjIsIE5VTEwsIDAsIGhhc2hfaWR4LCAmc3RhdDIsICZrZXkpKTsKKyAgICAgIC8qIGNoYW5nZSBhIGJ5dGUgYmFjayAqLworICAgICAgb3V0WzhdIF49IDE7CisgICAgICBpZiAobGVuMiAhPSBrYXRfbXNnc2l6ZSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbmthdGphX2RlY3J5cHRfa2V5IG1pc21hdGNoIGxlbiAlbHUgKGZpcnN0IGRlY3J5cHQpIiwgbGVuMik7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgbGVuMiA9IGthdF9tc2dzaXplOworICAgICAgRE8oa2F0amFfZGVjcnlwdF9rZXkob3V0LCBsZW4sIHRtcCwgJmxlbjIsIE5VTEwsIDAsIGhhc2hfaWR4LCAmc3RhdCwgJmtleSkpOworICAgICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImthdGphX2RlY3J5cHRfa2V5IGZhaWxlZCIpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICBpZiAobGVuMiAhPSBrYXRfbXNnc2l6ZSB8fCBtZW1jbXAodG1wLCBpbiwga2F0X21zZ3NpemUpKSB7CisgICAgICAgICB1bnNpZ25lZCBsb25nIHg7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxua2F0amFfZGVjcnlwdF9rZXkgbWlzbWF0Y2gsIGxlbiAlbHUgKHNlY29uZCBkZWNyeXB0KVxuIiwgbGVuMik7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk9yaWdpbmFsIGNvbnRlbnRzOiBcbiIpOyAKKyAgICAgICAgIGZvciAoeCA9IDA7IHggPCBrYXRfbXNnc2l6ZTsgKSB7CisgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlMDJ4ICIsIGluW3hdKTsKKyAgICAgICAgICAgICBpZiAoISgrK3ggJSAxNikpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJPdXRwdXQgY29udGVudHM6IFxuIik7IAorICAgICAgICAgZm9yICh4ID0gMDsgeCA8IGthdF9tc2dzaXplOyApIHsKKyAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiUwMnggIiwgb3V0W3hdKTsKKyAgICAgICAgICAgICBpZiAoISgrK3ggJSAxNikpIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgICAgICAgfQorICAgICAgICAgfSAgICAgCisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgIH0KKyAgIH0KKworICAgLyogZW5jcnlwdCB0aGUga2V5ICh3aXRoIGxwYXJhbSkgKi8KKyAgIGZvciAoa2F0X21zZ3NpemUgPSAxOyBrYXRfbXNnc2l6ZSA8PSA0Mjsga2F0X21zZ3NpemUrKykgeworICAgICAgbGVuICA9IHNpemVvZihvdXQpOworICAgICAgbGVuMiA9IGthdF9tc2dzaXplOworICAgICAgRE8oa2F0amFfZW5jcnlwdF9rZXkoaW4sIGthdF9tc2dzaXplLCBvdXQsICZsZW4sIGxwYXJhbSwgc2l6ZW9mKGxwYXJhbSksICZ5YXJyb3dfcHJuZywgcHJuZ19pZHgsIGhhc2hfaWR4LCAma2V5KSk7CisgICAgICAvKiBjaGFuZ2UgYSBieXRlICovCisgICAgICBvdXRbOF0gXj0gMTsKKyAgICAgIERPKGthdGphX2RlY3J5cHRfa2V5KG91dCwgbGVuLCB0bXAsICZsZW4yLCBscGFyYW0sIHNpemVvZihscGFyYW0pLCBoYXNoX2lkeCwgJnN0YXQyLCAma2V5KSk7CisgICAgICBpZiAobGVuMiAhPSBrYXRfbXNnc2l6ZSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbmthdGphX2RlY3J5cHRfa2V5IG1pc21hdGNoIGxlbiAlbHUgKGZpcnN0IGRlY3J5cHQpIiwgbGVuMik7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIC8qIGNoYW5nZSBhIGJ5dGUgYmFjayAqLworICAgICAgb3V0WzhdIF49IDE7CisKKyAgICAgIGxlbjIgPSBrYXRfbXNnc2l6ZTsKKyAgICAgIERPKGthdGphX2RlY3J5cHRfa2V5KG91dCwgbGVuLCB0bXAsICZsZW4yLCBscGFyYW0sIHNpemVvZihscGFyYW0pLCBoYXNoX2lkeCwgJnN0YXQsICZrZXkpKTsKKyAgICAgIGlmICghKHN0YXQgPT0gMSAmJiBzdGF0MiA9PSAwKSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJrYXRqYV9kZWNyeXB0X2tleSBmYWlsZWQiKTsKKyAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgaWYgKGxlbjIgIT0ga2F0X21zZ3NpemUgfHwgbWVtY21wKHRtcCwgaW4sIGthdF9tc2dzaXplKSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJrYXRqYV9kZWNyeXB0X2tleSBtaXNtYXRjaCBsZW4gJWx1IiwgbGVuMik7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgIH0KKworI2lmIDAKKworICAgLyogc2lnbiBhIG1lc3NhZ2UgKHVuc2FsdGVkLCBsb3dlciBjaG9sZXN0b3JvbCBhbmQgQXRraW5zIGFwcHJvdmVkKSBub3cgKi8KKyAgIGxlbiA9IHNpemVvZihvdXQpOworICAgRE8oa2F0amFfc2lnbl9oYXNoKGluLCAyMCwgb3V0LCAmbGVuLCAmeWFycm93X3BybmcsIHBybmdfaWR4LCBoYXNoX2lkeCwgMCwgJmtleSkpOworCisvKiBleHBvcnQga2V5IGFuZCBpbXBvcnQgYXMgYm90aCBwcml2YXRlIGFuZCBwdWJsaWMgKi8KKyAgIGxlbjIgPSBzaXplb2YodG1wKTsKKyAgIERPKGthdGphX2V4cG9ydCh0bXAsICZsZW4yLCBQS19QUklWQVRFLCAma2V5KSk7IAorICAgRE8oa2F0amFfaW1wb3J0KHRtcCwgbGVuMiwgJnByaXZLZXkpKTsgCisgICBsZW4yID0gc2l6ZW9mKHRtcCk7CisgICBETyhrYXRqYV9leHBvcnQodG1wLCAmbGVuMiwgUEtfUFVCTElDLCAma2V5KSk7CisgICBETyhrYXRqYV9pbXBvcnQodG1wLCBsZW4yLCAmcHViS2V5KSk7CisKKyAgIC8qIHZlcmlmeSB3aXRoIG9yaWdpbmFsICovCisgICBETyhrYXRqYV92ZXJpZnlfaGFzaChvdXQsIGxlbiwgaW4sIDIwLCBoYXNoX2lkeCwgMCwgJnN0YXQsICZrZXkpKTsKKyAgIC8qIGNoYW5nZSBhIGJ5dGUgKi8KKyAgIGluWzBdIF49IDE7CisgICBETyhrYXRqYV92ZXJpZnlfaGFzaChvdXQsIGxlbiwgaW4sIDIwLCBoYXNoX2lkeCwgMCwgJnN0YXQyLCAma2V5KSk7CisgICAKKyAgIGlmICghKHN0YXQgPT0gMSAmJiBzdGF0MiA9PSAwKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJrYXRqYV92ZXJpZnlfaGFzaCAodW5zYWx0ZWQsIG9yaWdLZXkpIGZhaWxlZCwgJWQsICVkIiwgc3RhdCwgc3RhdDIpOworICAgICAga2F0amFfZnJlZSgma2V5KTsKKyAgICAgIGthdGphX2ZyZWUoJnB1YktleSk7CisgICAgICBrYXRqYV9mcmVlKCZwcml2S2V5KTsKKyAgICAgIHJldHVybiAxOworICAgfQorCisgICAvKiB2ZXJpZnkgd2l0aCBwcml2S2V5ICovCisgICAvKiBjaGFuZ2UgYSBieXRlICovCisgICBpblswXSBePSAxOworICAgRE8oa2F0amFfdmVyaWZ5X2hhc2gob3V0LCBsZW4sIGluLCAyMCwgaGFzaF9pZHgsIDAsICZzdGF0LCAmcHJpdktleSkpOworICAgLyogY2hhbmdlIGEgYnl0ZSAqLworICAgaW5bMF0gXj0gMTsKKyAgIERPKGthdGphX3ZlcmlmeV9oYXNoKG91dCwgbGVuLCBpbiwgMjAsIGhhc2hfaWR4LCAwLCAmc3RhdDIsICZwcml2S2V5KSk7CisgICAKKyAgIGlmICghKHN0YXQgPT0gMSAmJiBzdGF0MiA9PSAwKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJrYXRqYV92ZXJpZnlfaGFzaCAodW5zYWx0ZWQsIHByaXZLZXkpIGZhaWxlZCwgJWQsICVkIiwgc3RhdCwgc3RhdDIpOworICAgICAga2F0amFfZnJlZSgma2V5KTsKKyAgICAgIGthdGphX2ZyZWUoJnB1YktleSk7CisgICAgICBrYXRqYV9mcmVlKCZwcml2S2V5KTsKKyAgICAgIHJldHVybiAxOworICAgfQorCisgICAvKiB2ZXJpZnkgd2l0aCBwdWJLZXkgKi8KKyAgIC8qIGNoYW5nZSBhIGJ5dGUgKi8KKyAgIGluWzBdIF49IDE7CisgICBETyhrYXRqYV92ZXJpZnlfaGFzaChvdXQsIGxlbiwgaW4sIDIwLCBoYXNoX2lkeCwgMCwgJnN0YXQsICZwdWJLZXkpKTsKKyAgIC8qIGNoYW5nZSBhIGJ5dGUgKi8KKyAgIGluWzBdIF49IDE7CisgICBETyhrYXRqYV92ZXJpZnlfaGFzaChvdXQsIGxlbiwgaW4sIDIwLCBoYXNoX2lkeCwgMCwgJnN0YXQyLCAmcHViS2V5KSk7CisgICAKKyAgIGlmICghKHN0YXQgPT0gMSAmJiBzdGF0MiA9PSAwKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJrYXRqYV92ZXJpZnlfaGFzaCAodW5zYWx0ZWQsIHB1YmtleSkgZmFpbGVkLCAlZCwgJWQiLCBzdGF0LCBzdGF0Mik7CisgICAgICBrYXRqYV9mcmVlKCZrZXkpOworICAgICAga2F0amFfZnJlZSgmcHViS2V5KTsKKyAgICAgIGthdGphX2ZyZWUoJnByaXZLZXkpOworICAgICAgcmV0dXJuIDE7CisgICB9CisKKyAgIC8qIHNpZ24gYSBtZXNzYWdlIChzYWx0ZWQpIG5vdyAodXNlIHByaXZLZXkgdG8gbWFrZSwgcHViS2V5IHRvIHZlcmlmeSkgKi8KKyAgIGxlbiA9IHNpemVvZihvdXQpOworICAgRE8oa2F0amFfc2lnbl9oYXNoKGluLCAyMCwgb3V0LCAmbGVuLCAmeWFycm93X3BybmcsIHBybmdfaWR4LCBoYXNoX2lkeCwgOCwgJnByaXZLZXkpKTsKKyAgIERPKGthdGphX3ZlcmlmeV9oYXNoKG91dCwgbGVuLCBpbiwgMjAsIGhhc2hfaWR4LCA4LCAmc3RhdCwgJnB1YktleSkpOworICAgLyogY2hhbmdlIGEgYnl0ZSAqLworICAgaW5bMF0gXj0gMTsKKyAgIERPKGthdGphX3ZlcmlmeV9oYXNoKG91dCwgbGVuLCBpbiwgMjAsIGhhc2hfaWR4LCA4LCAmc3RhdDIsICZwdWJLZXkpKTsKKyAgIAorICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgImthdGphX3ZlcmlmeV9oYXNoIChzYWx0ZWQpIGZhaWxlZCwgJWQsICVkIiwgc3RhdCwgc3RhdDIpOworICAgICAga2F0amFfZnJlZSgma2V5KTsKKyAgICAgIGthdGphX2ZyZWUoJnB1YktleSk7CisgICAgICBrYXRqYV9mcmVlKCZwcml2S2V5KTsKKyAgICAgIHJldHVybiAxOworICAgfQorI2VuZGlmCisKKyAgIGthdGphX2ZyZWUoJmtleSk7CisgICBrYXRqYV9mcmVlKCZwdWJLZXkpOworICAga2F0amFfZnJlZSgmcHJpdktleSk7Cit9CisgICAKKyAgIC8qIGZyZWUgdGhlIGtleSBhbmQgcmV0dXJuICovCisgICByZXR1cm4gMDsKK30KKworI2Vsc2UKKworaW50IGthdGphX3Rlc3Qodm9pZCkKK3sKKyAgIGZwcmludGYoc3RkZXJyLCAiTk9QIik7CisgICByZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJ0b21jcnlwdC90ZXN0cHJvZi9tYWNfdGVzdC5jIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvbWFjX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTBlNGI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvbWFjX3Rlc3QuYwpAQCAtMCwwICsxLDQxIEBACisvKiB0ZXN0IHBtYWMvb21hYy9obWFjICovCisjaW5jbHVkZSA8dG9tY3J5cHRfdGVzdC5oPgorCitpbnQgbWFjX3Rlc3Qodm9pZCkKK3sKKyNpZmRlZiBMVENfSE1BQworICAgRE8oaG1hY190ZXN0KCkpOyAKKyNlbmRpZgorI2lmZGVmIExUQ19QTUFDCisgICBETyhwbWFjX3Rlc3QoKSk7IAorI2VuZGlmCisjaWZkZWYgTFRDX09NQUMKKyAgIERPKG9tYWNfdGVzdCgpKTsgCisjZW5kaWYKKyNpZmRlZiBMVENfWENCQworICAgRE8oeGNiY190ZXN0KCkpOworI2VuZGlmCisjaWZkZWYgTFRDX0Y5X01PREUKKyAgIERPKGY5X3Rlc3QoKSk7CisjZW5kaWYKKyNpZmRlZiBFQVhfTU9ERQorICAgRE8oZWF4X3Rlc3QoKSk7ICAKKyNlbmRpZgorI2lmZGVmIE9DQl9NT0RFCisgICBETyhvY2JfdGVzdCgpKTsgIAorI2VuZGlmCisjaWZkZWYgQ0NNX01PREUKKyAgIERPKGNjbV90ZXN0KCkpOworI2VuZGlmCisjaWZkZWYgR0NNX01PREUKKyAgIERPKGdjbV90ZXN0KCkpOworI2VuZGlmCisjaWZkZWYgUEVMSUNBTgorICAgRE8ocGVsaWNhbl90ZXN0KCkpOworI2VuZGlmCisgICByZXR1cm4gMDsKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvdGVzdHByb2YvbWFjX3Rlc3QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzA4IDIxOjU3OjA0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL21ha2VmaWxlIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvbWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNjNzBmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL21ha2VmaWxlCkBAIC0wLDAgKzEsMjQgQEAKK0NGTEFHUyArPSAtSS4uL3NyYy9oZWFkZXJzIC1JLi8gLVdhbGwgLVcKKworIyByYW5saWIgdG9vbHMKK2lmbmRlZiBSQU5MSUIKKyAgIFJBTkxJQj1yYW5saWIKK2VuZGlmCisKK09CSkVDVFMgPSBiYXNlNjRfdGVzdC5vIGNpcGhlcl9oYXNoX3Rlc3QubyBkZXJfdGVzdHMubyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZHNhX3Rlc3QubyBlY2NfdGVzdC5vIG1hY190ZXN0Lm8gbW9kZXNfdGVzdC5vIHBrY3NfMV90ZXN0Lm8gcnNhX3Rlc3QubyAgICAgICAgICAgICAgICAgICBcCitzdG9yZV90ZXN0Lm8gdGVzdF9kcml2ZXIubyB4ODZfcHJvZi5vIGthdGphX3Rlc3QubworCitpZm5kZWYgTElCVEVTVF9TCisgICBMSUJURVNUX1M9bGlidG9tY3J5cHRfcHJvZi5hCitlbmRpZgorCitkZWZhdWx0OiAkKExJQlRFU1RfUykKKworJChMSUJURVNUX1MpOiAkKE9CSkVDVFMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSkVDVFMpCisJJChSQU5MSUIpICRACisKK2NsZWFuOgorCXJtIC1mICoubyAqLmEKKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvdGVzdHByb2YvbWFrZWZpbGUuaWNjIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvbWFrZWZpbGUuaWNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwNjI4Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC90ZXN0cHJvZi9tYWtlZmlsZS5pY2MKQEAgLTAsMCArMSwyMCBAQAorQ0ZMQUdTICs9IC1JLi4vc3JjL2hlYWRlcnMgLUkuLyAKK0NDPWljYworCitPQkpFQ1RTID0gYmFzZTY0X3Rlc3QubyBjaXBoZXJfaGFzaF90ZXN0Lm8gZGVyX3Rlc3RzLm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RzYV90ZXN0Lm8gZWNjX3Rlc3QubyBtYWNfdGVzdC5vIG1vZGVzX3Rlc3QubyBwa2NzXzFfdGVzdC5vIHJzYV90ZXN0Lm8gICAgICAgICAgICAgICAgICAgXAorc3RvcmVfdGVzdC5vIHRlc3RfZHJpdmVyLm8geDg2X3Byb2YubyBrYXRqYV90ZXN0Lm8KKworaWZuZGVmIExJQlRFU1RfUworICAgTElCVEVTVF9TID0gbGlidG9tY3J5cHRfcHJvZi5hCitlbmRpZgorCitkZWZhdWx0OiAkKExJQlRFU1RfUykKKworJChMSUJURVNUX1MpOiAkKE9CSkVDVFMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSkVDVFMpCisJcmFubGliICRACisKK2NsZWFuOgorCXJtIC1mICoubyAqLmEKKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvdGVzdHByb2YvbWFrZWZpbGUubXN2YyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL21ha2VmaWxlLm1zdmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzMGY5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL21ha2VmaWxlLm1zdmMKQEAgLTAsMCArMSwxMCBAQAorQ0ZMQUdTID0gL0kuLi9zcmMvaGVhZGVycy8gL0kuLyAvT3ggL0RXSU4zMiAvRExUQ19TT1VSQ0UgL1czIC9GbyRACisKK09CSkVDVFM9YmFzZTY0X3Rlc3Qub2JqIGNpcGhlcl9oYXNoX3Rlc3Qub2JqIGRlcl90ZXN0cy5vYmogICAgICAgICAgICBcCitkc2FfdGVzdC5vYmogZWNjX3Rlc3Qub2JqIG1hY190ZXN0Lm9iaiBtb2Rlc190ZXN0Lm9iaiBwa2NzXzFfdGVzdC5vYmogXAorcnNhX3Rlc3Qub2JqIHN0b3JlX3Rlc3Qub2JqIHRlc3RfZHJpdmVyLm9iaiB4ODZfcHJvZi5vYmoga2F0amFfdGVzdC5vYmoKKwordG9tY3J5cHRfcHJvZi5saWI6ICQoT0JKRUNUUykKKwlsaWIgL291dDp0b21jcnlwdF9wcm9mLmxpYiAkKE9CSkVDVFMpCisKKwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvdGVzdHByb2YvbWFrZWZpbGUuc2hhcmVkIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvbWFrZWZpbGUuc2hhcmVkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYWJiYTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC90ZXN0cHJvZi9tYWtlZmlsZS5zaGFyZWQKQEAgLTAsMCArMSwyNCBAQAorQ0M9bGlidG9vbCAtLW1vZGU9Y29tcGlsZSBnY2MKKworQ0ZMQUdTICs9IC1JLi4vc3JjL2hlYWRlcnMgLUkuLyAtV2FsbCAtVworCisjIHJhbmxpYiB0b29scworaWZuZGVmIFJBTkxJQgorICAgUkFOTElCPXJhbmxpYgorZW5kaWYKKworT0JKRUNUUyA9IGJhc2U2NF90ZXN0Lm8gY2lwaGVyX2hhc2hfdGVzdC5vIGRlcl90ZXN0cy5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkc2FfdGVzdC5vIGVjY190ZXN0Lm8gbWFjX3Rlc3QubyBtb2Rlc190ZXN0Lm8gcGtjc18xX3Rlc3QubyByc2FfdGVzdC5vICAgICAgICAgICAgICAgICAgIFwKK3N0b3JlX3Rlc3QubyB0ZXN0X2RyaXZlci5vIHg4Nl9wcm9mLm8ga2F0amFfdGVzdC5vCisKK2lmbmRlZiBMSUJURVNUCisgICBMSUJURVNUPWxpYnRvbWNyeXB0X3Byb2YubGEKK2VuZGlmCisKK2RlZmF1bHQ6ICQoTElCVEVTVCkKKworJChMSUJURVNUKTogJChPQkpFQ1RTKQorCWxpYnRvb2wgLS1zaWxlbnQgLS1tb2RlPWxpbmsgZ2NjICQoQ0ZMQUdTKSBgZmluZCAuIC10eXBlIGYgfCBncmVwICJbLl1sbyIgfCAgeGFyZ3NgIC1vICRAIC1ycGF0aCAkKExJQlBBVEgpIC12ZXJzaW9uLWluZm8gJChWRVJTSU9OKQorCitpbnN0YWxsOiAkKExJQlRFU1QpCisJbGlidG9vbCAtLXNpbGVudCAtLW1vZGU9aW5zdGFsbCBpbnN0YWxsIC1jICQoTElCVEVTVCkgJChERVNURElSKSQoTElCUEFUSCkvJChMSUJURVNUKQpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvdGVzdHByb2YvbW9kZXNfdGVzdC5jIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvbW9kZXNfdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OTljMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC90ZXN0cHJvZi9tb2Rlc190ZXN0LmMKQEAgLTAsMCArMSwxMTUgQEAKKy8qIHRlc3QgQ0ZCL09GQi9DQkMgbW9kZXMgKi8KKyNpbmNsdWRlIDx0b21jcnlwdF90ZXN0Lmg+CisKK2ludCBtb2Rlc190ZXN0KHZvaWQpCit7CisgICB1bnNpZ25lZCBjaGFyIHB0WzY0XSwgY3RbNjRdLCB0bXBbNjRdLCBrZXlbMTZdLCBpdlsxNl0sIGl2MlsxNl07CisgICBpbnQgY2lwaGVyX2lkeDsKKyNpZmRlZiBMVENfQ0JDX01PREUKKyAgIHN5bW1ldHJpY19DQkMgY2JjOworI2VuZGlmCisjaWZkZWYgTFRDX0NGQl9NT0RFCisgICBzeW1tZXRyaWNfQ0ZCIGNmYjsKKyNlbmRpZgorI2lmZGVmIExUQ19PRkJfTU9ERQorICAgc3ltbWV0cmljX09GQiBvZmI7CisjZW5kaWYKKyAgIHVuc2lnbmVkIGxvbmcgbDsKKyAgIAorICAgLyogbWFrZSBhIHJhbmRvbSBwdCwga2V5IGFuZCBpdiAqLworICAgeWFycm93X3JlYWQocHQsICA2NCwgJnlhcnJvd19wcm5nKTsKKyAgIHlhcnJvd19yZWFkKGtleSwgMTYsICZ5YXJyb3dfcHJuZyk7CisgICB5YXJyb3dfcmVhZChpdiwgIDE2LCAmeWFycm93X3BybmcpOworICAgCisgICAvKiBnZXQgaWR4IG9mIEFFUyBoYW5keSAqLworICAgY2lwaGVyX2lkeCA9IGZpbmRfY2lwaGVyKCJhZXMiKTsKKyAgIGlmIChjaXBoZXJfaWR4ID09IC0xKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgInRlc3QgcmVxdWlyZXMgQUVTIik7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIAorI2lmZGVmIExUQ19GOF9NT0RFCisgICBETyhmOF90ZXN0X21vZGUoKSk7CisjZW5kaWYgICAKKyAgIAorI2lmZGVmIExUQ19MUldfTU9ERQorICAgRE8obHJ3X3Rlc3QoKSk7CisjZW5kaWYKKworI2lmZGVmIExUQ19DQkNfTU9ERQorICAgLyogdGVzdCBDQkMgbW9kZSAqLworICAgLyogZW5jb2RlIHRoZSBibG9jayAqLworICAgRE8oY2JjX3N0YXJ0KGNpcGhlcl9pZHgsIGl2LCBrZXksIDE2LCAwLCAmY2JjKSk7CisgICBsID0gc2l6ZW9mKGl2Mik7CisgICBETyhjYmNfZ2V0aXYoaXYyLCAmbCwgJmNiYykpOworICAgaWYgKGwgIT0gMTYgfHwgbWVtY21wKGl2MiwgaXYsIDE2KSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJjYmNfZ2V0aXYgZmFpbGVkIik7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIERPKGNiY19lbmNyeXB0KHB0LCBjdCwgNjQsICZjYmMpKTsKKyAgIAorICAgLyogZGVjb2RlIHRoZSBibG9jayAqLworICAgRE8oY2JjX3NldGl2KGl2MiwgbCwgJmNiYykpOworICAgemVyb21lbSh0bXAsIHNpemVvZih0bXApKTsKKyAgIERPKGNiY19kZWNyeXB0KGN0LCB0bXAsIDY0LCAmY2JjKSk7CisgICBpZiAobWVtY21wKHRtcCwgcHQsIDY0KSAhPSAwKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNCQyBmYWlsZWQiKTsKKyAgICAgIHJldHVybiAxOworICAgfQorI2VuZGlmCisKKyNpZmRlZiBMVENfQ0ZCX01PREUKKyAgIC8qIHRlc3QgQ0ZCIG1vZGUgKi8KKyAgIC8qIGVuY29kZSB0aGUgYmxvY2sgKi8KKyAgIERPKGNmYl9zdGFydChjaXBoZXJfaWR4LCBpdiwga2V5LCAxNiwgMCwgJmNmYikpOworICAgbCA9IHNpemVvZihpdjIpOworICAgRE8oY2ZiX2dldGl2KGl2MiwgJmwsICZjZmIpKTsKKyAgIC8qIG5vdGUgd2UgZG9uJ3QgbWVtY21wIGl2Mi9pdiBzaW5jZSBjZmJfc3RhcnQgcHJvY2Vzc2VzIHRoZSBJViBmb3IgdGhlIGZpcnN0IGJsb2NrICovCisgICBpZiAobCAhPSAxNikgeworICAgICAgZnByaW50ZihzdGRlcnIsICJjZmJfZ2V0aXYgZmFpbGVkIik7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIERPKGNmYl9lbmNyeXB0KHB0LCBjdCwgNjQsICZjZmIpKTsKKyAgIAorICAgLyogZGVjb2RlIHRoZSBibG9jayAqLworICAgRE8oY2ZiX3NldGl2KGl2LCBsLCAmY2ZiKSk7CisgICB6ZXJvbWVtKHRtcCwgc2l6ZW9mKHRtcCkpOworICAgRE8oY2ZiX2RlY3J5cHQoY3QsIHRtcCwgNjQsICZjZmIpKTsKKyAgIGlmIChtZW1jbXAodG1wLCBwdCwgNjQpICE9IDApIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiQ0ZCIGZhaWxlZCIpOworICAgICAgcmV0dXJuIDE7CisgICB9CisjZW5kaWYKKyAgIAorI2lmZGVmIExUQ19PRkJfTU9ERQorICAgLyogdGVzdCBPRkIgbW9kZSAqLworICAgLyogZW5jb2RlIHRoZSBibG9jayAqLworICAgRE8ob2ZiX3N0YXJ0KGNpcGhlcl9pZHgsIGl2LCBrZXksIDE2LCAwLCAmb2ZiKSk7CisgICBsID0gc2l6ZW9mKGl2Mik7CisgICBETyhvZmJfZ2V0aXYoaXYyLCAmbCwgJm9mYikpOworICAgaWYgKGwgIT0gMTYgfHwgbWVtY21wKGl2MiwgaXYsIDE2KSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJvZmJfZ2V0aXYgZmFpbGVkIik7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIERPKG9mYl9lbmNyeXB0KHB0LCBjdCwgNjQsICZvZmIpKTsKKyAgIAorICAgLyogZGVjb2RlIHRoZSBibG9jayAqLworICAgRE8ob2ZiX3NldGl2KGl2MiwgbCwgJm9mYikpOworICAgemVyb21lbSh0bXAsIHNpemVvZih0bXApKTsKKyAgIERPKG9mYl9kZWNyeXB0KGN0LCB0bXAsIDY0LCAmb2ZiKSk7CisgICBpZiAobWVtY21wKHRtcCwgcHQsIDY0KSAhPSAwKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIk9GQiBmYWlsZWQiKTsKKyAgICAgIHJldHVybiAxOworICAgfQorI2VuZGlmCisKKyNpZmRlZiBMVENfQ1RSX01PREUgICAKKyAgIERPKGN0cl90ZXN0KCkpOworI2VuZGlmCisgICAgICAgICAKKyAgIHJldHVybiAwOworfQorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC90ZXN0cHJvZi9tb2Rlc190ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMTQgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMTMgMTE6NTU6MjUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvdGVzdHByb2YvcGtjc18xX3Rlc3QuYyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3BrY3NfMV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3MjVmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3BrY3NfMV90ZXN0LmMKQEAgLTAsMCArMSw5MyBAQAorI2luY2x1ZGUgPHRvbWNyeXB0X3Rlc3QuaD4KKworI2lmZGVmIFBLQ1NfMQorCitpbnQgcGtjc18xX3Rlc3Qodm9pZCkKK3sKKyAgIHVuc2lnbmVkIGNoYXIgYnVmWzNdWzEyOF07CisgICBpbnQgcmVzMSwgcmVzMiwgcmVzMywgcHJuZ19pZHgsIGhhc2hfaWR4LCBlcnI7CisgICB1bnNpZ25lZCBsb25nIHgsIHksIGwxLCBsMiwgbDMsIGkxLCBpMiwgbHBhcmFtbGVuLCBzYWx0bGVuLCBtb2RsZW47CisgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBscGFyYW1bXSA9IHsgMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYgfTsKKworICAgLyogZ2V0IGhhc2gvcHJuZyAgKi8KKyAgIGhhc2hfaWR4ID0gZmluZF9oYXNoKCJzaGExIik7CisgICBwcm5nX2lkeCA9IGZpbmRfcHJuZygieWFycm93Iik7CisgICAKKyAgIGlmIChoYXNoX2lkeCA9PSAtMSB8fCBwcm5nX2lkeCA9PSAtMSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJwa2NzXzEgdGVzdHMgcmVxdWlyZSBzaGExL3lhcnJvdyIpOworICAgICAgcmV0dXJuIDE7CisgICB9ICAgCisKKyAgIHNyYW5kKHRpbWUoTlVMTCkpOworICAgLyogZG8gbWFueSB0ZXN0cyAqLworICAgZm9yICh4ID0gMDsgeCA8IDEwMDsgeCsrKSB7CisgICAgICB6ZXJvbWVtKGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisgICAgICAvKiBtYWtlIGEgZHVtbXkgbWVzc2FnZSAob2YgcmFuZG9tIGxlbmd0aCkgKi8KKyAgICAgIGwzID0gKHJhbmQoKSAmIDMxKSArIDg7CisgICAgICBmb3IgKHkgPSAwOyB5IDwgbDM7IHkrKykgYnVmWzBdW3ldID0gcmFuZCgpICYgMjU1OworCisgICAgICAvKiBwaWNrIGEgcmFuZG9tIGxwYXJhbSBsZW4gWzAuLjE2XSAqLworICAgICAgbHBhcmFtbGVuID0gYWJzKHJhbmQoKSkgJSAxNzsKKworICAgICAgLyogcGljayBhIHJhbmRvbSBzYWx0bGVuIDAuLjE2ICovCisgICAgICBzYWx0bGVuICAgPSBhYnMocmFuZCgpKSAlIDE3OworCisgICAgICAvKiBQS0NTICMxIHYyLjAgc3VwcG9ydHMgbW9kbGVucyBub3QgbXVsdGlwbGUgb2YgOCAqLworICAgICAgbW9kbGVuID0gODAwICsgKGFicyhyYW5kKCkpICUgMjI0KTsKKworICAgICAgLyogZW5jb2RlIGl0ICovCisgICAgICBsMSA9IHNpemVvZihidWZbMV0pOworICAgICAgRE8ocGtjc18xX29hZXBfZW5jb2RlKGJ1ZlswXSwgbDMsIGxwYXJhbSwgbHBhcmFtbGVuLCBtb2RsZW4sICZ5YXJyb3dfcHJuZywgcHJuZ19pZHgsIGhhc2hfaWR4LCBidWZbMV0sICZsMSkpOworCisgICAgICAvKiBkZWNvZGUgaXQgKi8KKyAgICAgIGwyID0gc2l6ZW9mKGJ1ZlsyXSk7CisgICAgICBETyhwa2NzXzFfb2FlcF9kZWNvZGUoYnVmWzFdLCBsMSwgbHBhcmFtLCBscGFyYW1sZW4sIG1vZGxlbiwgaGFzaF9pZHgsIGJ1ZlsyXSwgJmwyLCAmcmVzMSkpOworCisgICAgICBpZiAocmVzMSAhPSAxIHx8IGwyICE9IGwzIHx8IG1lbWNtcChidWZbMl0sIGJ1ZlswXSwgbDMpICE9IDApIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT3V0c2l6ZSA9PSAlbHUsIHNob3VsZCBoYXZlIGJlZW4gJWx1LCByZXMxID0gJWQsIGxwYXJhbWxlbiA9ICVsdSwgbXNnIGNvbnRlbnRzIGZvbGxvdy5cbiIsIGwyLCBsMywgcmVzMSwgbHBhcmFtbGVuKTsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT1JJR0lOQUw6XG4iKTsKKyAgICAgICAgIGZvciAoeCA9IDA7IHggPCBsMzsgeCsrKSB7CisgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlMDJ4ICIsIGJ1ZlswXVt4XSk7CisgICAgICAgICB9CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuUkVTVUxUOlxuIik7CisgICAgICAgICBmb3IgKHggPSAwOyB4IDwgbDI7IHgrKykgeworICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJTAyeCAiLCBidWZbMl1beF0pOworICAgICAgICAgfQorICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxuIik7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKworICAgICAgLyogdGVzdCBQU1MgKi8KKyAgICAgIGwxID0gc2l6ZW9mKGJ1ZlsxXSk7CisgICAgICBETyhwa2NzXzFfcHNzX2VuY29kZShidWZbMF0sIGwzLCBzYWx0bGVuLCAmeWFycm93X3BybmcsIHBybmdfaWR4LCBoYXNoX2lkeCwgbW9kbGVuLCBidWZbMV0sICZsMSkpOworICAgICAgRE8ocGtjc18xX3Bzc19kZWNvZGUoYnVmWzBdLCBsMywgYnVmWzFdLCBsMSwgc2FsdGxlbiwgaGFzaF9pZHgsIG1vZGxlbiwgJnJlczEpKTsKKyAgICAgIAorICAgICAgYnVmWzBdW2kxID0gYWJzKHJhbmQoKSkgJSBsM10gXj0gMTsKKyAgICAgIERPKHBrY3NfMV9wc3NfZGVjb2RlKGJ1ZlswXSwgbDMsIGJ1ZlsxXSwgbDEsIHNhbHRsZW4sIGhhc2hfaWR4LCBtb2RsZW4sICZyZXMyKSk7CisKKyAgICAgIGJ1ZlswXVtpMV0gXj0gMTsKKyAgICAgIGJ1ZlsxXVtpMiA9IGFicyhyYW5kKCkpICUgKGwxIC0gMSldIF49IDE7CisgICAgICBwa2NzXzFfcHNzX2RlY29kZShidWZbMF0sIGwzLCBidWZbMV0sIGwxLCBzYWx0bGVuLCBoYXNoX2lkeCwgbW9kbGVuLCAmcmVzMyk7CisgICAgICBpZiAoIShyZXMxID09IDEgJiYgcmVzMiA9PSAwICYmIHJlczMgPT0gMCkpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUFNTIGZhaWxlZDogJWQsICVkLCAlZCwgJWx1LCAlbHVcbiIsIHJlczEsIHJlczIsIHJlczMsIGwzLCBzYWx0bGVuKTsKKyAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgfQorICAgcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKK2ludCBwa2NzXzFfdGVzdCh2b2lkKQoreworICAgZnByaW50ZihzdGRlcnIsICJOT1AiKTsKKyAgIHJldHVybiAwOworfQorCisjZW5kaWYKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC90ZXN0cHJvZi9wa2NzXzFfdGVzdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjcgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMzAgMDM6MzA6NDUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvdGVzdHByb2YvcnNhX3Rlc3QuYyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3JzYV90ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2OGQ2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3JzYV90ZXN0LmMKQEAgLTAsMCArMSwzODcgQEAKKyNpbmNsdWRlIDx0b21jcnlwdF90ZXN0Lmg+CisKKyNpZmRlZiBNUlNBIAorCisjZGVmaW5lIFJTQV9NU0dTSVpFIDc4CisKKy8qIFRoZXNlIGFyZSB0ZXN0IGtleXMgW3NlZSBmaWxlIHRlc3Qua2V5XSB0aGF0IEkgdXNlIHRvIHRlc3QgbXkgaW1wb3J0L2V4cG9ydCBhZ2FpbnN0ICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBvcGVuc3NsX3ByaXZhdGVfcnNhW10gPSB7CisgICAweDMwLCAweDgyLCAweDAyLCAweDVlLCAweDAyLCAweDAxLCAweDAwLCAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweGNmLCAweDlhLCAweGRlLCAweDY0LCAweDhhLCAKKyAgIDB4ZGEsIDB4YzgsIDB4MzMsIDB4MjAsIDB4YTksIDB4ZDcsIDB4ODMsIDB4MzEsIDB4MTksIDB4NTQsIDB4YjIsIDB4OWEsIDB4ODUsIDB4YTcsIDB4YTEsIDB4YjcsIAorICAgMHg3NSwgMHgzMywgMHhiNiwgMHhhOSwgMHhhYywgMHg4NCwgMHgyNCwgMHhiMywgMHhkZSwgMHhkYiwgMHg3ZCwgMHg4NSwgMHgyZCwgMHg5NiwgMHg2NSwgMHhlNSwgCisgICAweDNmLCAweDcyLCAweDk1LCAweDI0LCAweDlmLCAweDI4LCAweDY4LCAweGNhLCAweDRmLCAweGRiLCAweDQ0LCAweDFjLCAweDNlLCAweDYwLCAweDEyLCAweDhhLCAKKyAgIDB4ZGQsIDB4MjYsIDB4YTUsIDB4ZWIsIDB4ZmYsIDB4MGIsIDB4NWUsIDB4ZDQsIDB4ODgsIDB4MzgsIDB4NDksIDB4MmEsIDB4NmUsIDB4NWIsIDB4YmYsIDB4MTIsIAorICAgMHgzNywgMHg0NywgMHhiZCwgMHgwNSwgMHg2YiwgMHhiYywgMHhkYiwgMHhmMywgMHhlZSwgMHhlNCwgMHgxMSwgMHg4ZSwgMHg0MSwgMHg2OCwgMHg3YywgMHg2MSwgCisgICAweDEzLCAweGQ3LCAweDQyLCAweGM4LCAweDgwLCAweGJlLCAweDM2LCAweDhmLCAweGRjLCAweDA4LCAweDhiLCAweDRmLCAweGFjLCAweGE0LCAweGUyLCAweDc2LCAKKyAgIDB4MGMsIDB4YzksIDB4NjMsIDB4NmMsIDB4NDksIDB4NTgsIDB4OTMsIDB4ZWQsIDB4Y2MsIDB4YWEsIDB4ZGMsIDB4MjUsIDB4M2IsIDB4MGEsIDB4NjAsIDB4M2YsIAorICAgMHg4YiwgMHg1NCwgMHgzYSwgMHhjMywgMHg0ZCwgMHgzMSwgMHhlNywgMHg5NCwgMHhhNCwgMHg0NCwgMHhmZCwgMHgwMiwgMHgwMywgMHgwMSwgMHgwMCwgMHgwMSwgCisgICAweDAyLCAweDgxLCAweDgxLCAweDAwLCAweGM4LCAweDYyLCAweGI5LCAweGVhLCAweGRlLCAweDQ0LCAweDUzLCAweDFkLCAweDU2LCAweDk3LCAweGQ5LCAweDk3LCAKKyAgIDB4OWUsIDB4MWEsIDB4Y2YsIDB4MzAsIDB4MWUsIDB4MGEsIDB4ODgsIDB4NDUsIDB4ODYsIDB4MjksIDB4MzAsIDB4YTMsIDB4NGQsIDB4OWYsIDB4NjEsIDB4NjUsIAorICAgMHg3MywgMHhlMCwgMHhkNiwgMHg4NywgMHg4ZiwgMHhiNiwgMHhmMywgMHgwNiwgMHhhMywgMHg4MiwgMHhkYywgMHg3YywgMHhhYywgMHhmZSwgMHg5YiwgMHgyOCwgCisgICAweDlhLCAweGFlLCAweGZkLCAweGZiLCAweGZlLCAweDJmLCAweDBlLCAweGQ4LCAweDk3LCAweDA0LCAweGUzLCAweGJiLCAweDFmLCAweGQxLCAweGVjLCAweDBkLCAKKyAgIDB4YmEsIDB4YTMsIDB4NDksIDB4N2YsIDB4NDcsIDB4YWMsIDB4OGEsIDB4NDQsIDB4MDQsIDB4N2UsIDB4ODYsIDB4YjcsIDB4MzksIDB4NDIsIDB4M2YsIDB4YWQsIAorICAgMHgxZSwgMHhiNywgMHgwZSwgMHhhNSwgMHg1MSwgMHhmNCwgMHg0MCwgMHg2MywgMHgxZSwgMHhmZCwgMHhiZCwgMHhlYSwgMHg5ZiwgMHg0MSwgMHg5ZiwgMHhhOCwgCisgICAweDkwLCAweDFkLCAweDZmLCAweDBhLCAweDVhLCAweDk1LCAweDEzLCAweDExLCAweDBkLCAweDgwLCAweGFmLCAweDVmLCAweDY0LCAweDk4LCAweDhhLCAweDJjLCAKKyAgIDB4NzgsIDB4NjgsIDB4NjUsIDB4YjAsIDB4MmIsIDB4OGIsIDB4YTIsIDB4NTMsIDB4ODcsIDB4Y2EsIDB4ZjEsIDB4NjQsIDB4MDQsIDB4YWIsIDB4ZjIsIDB4N2IsIAorICAgMHhkYiwgMHg4MywgMHhjOCwgMHg4MSwgMHgwMiwgMHg0MSwgMHgwMCwgMHhmNywgMHhiZSwgMHg1ZSwgMHgyMywgMHhjMywgMHgzMiwgMHgzZiwgMHhiZiwgMHg4YiwgCisgICAweDhlLCAweDNhLCAweGVlLCAweGZjLCAweGZjLCAweGNiLCAweGU1LCAweGY3LCAweGYxLCAweDBiLCAweGJjLCAweDQyLCAweDgyLCAweGFlLCAweGQ1LCAweDdhLCAKKyAgIDB4M2UsIDB4Y2EsIDB4ZjcsIDB4ZDUsIDB4NjksIDB4M2YsIDB4NjQsIDB4MjUsIDB4YTIsIDB4MWYsIDB4YjcsIDB4NzUsIDB4NzUsIDB4MDUsIDB4OTIsIDB4NDIsIAorICAgMHhlYiwgMHhiOCwgMHhmMSwgMHhmMywgMHgwYSwgMHgwNSwgMHhlMywgMHg5NCwgMHhkMSwgMHg1NSwgMHg3OCwgMHgzNSwgMHhhMCwgMHgzNiwgMHhhMCwgMHg5YiwgCisgICAweDdjLCAweDkyLCAweDg0LCAweDZjLCAweGRkLCAweGRjLCAweDRkLCAweDAyLCAweDQxLCAweDAwLCAweGQ2LCAweDg2LCAweDBlLCAweDg1LCAweDQyLCAweDBiLCAKKyAgIDB4MDQsIDB4MDgsIDB4ODQsIDB4MjEsIDB4NjAsIDB4ZjAsIDB4MGUsIDB4MGQsIDB4ODgsIDB4ZmQsIDB4MWUsIDB4MzYsIDB4MTAsIDB4NjUsIDB4NGYsIDB4MWUsIAorICAgMHg1MywgMHhiNCwgMHgwOCwgMHg3MiwgMHg4MCwgMHg1YywgMHgzZiwgMHg1OSwgMHg2NiwgMHgxNywgMHhlNiwgMHg5OCwgMHhmMiwgMHhlOSwgMHg2YywgMHg3YSwgCisgICAweDA2LCAweDRjLCAweGFjLCAweDc2LCAweDNkLCAweGVkLCAweDhjLCAweGExLCAweGNlLCAweGFkLCAweDFiLCAweGJkLCAweGI0LCAweDdkLCAweDI4LCAweGJjLCAKKyAgIDB4ZTMsIDB4MGUsIDB4MzgsIDB4OGQsIDB4OTksIDB4ZDgsIDB4MDUsIDB4YjUsIDB4YTMsIDB4NzEsIDB4MDIsIDB4NDAsIDB4NmQsIDB4ZWIsIDB4YzMsIDB4MmQsIAorICAgMHgyZSwgMHhmMCwgMHg1ZSwgMHhhNCwgMHg4OCwgMHgzMSwgMHgwNSwgMHgyOSwgMHgwMCwgMHg4YSwgMHhkMSwgMHg5NSwgMHgyOSwgMHg5YiwgMHg4MywgMHhjZiwgCisgICAweDc1LCAweGRiLCAweDMxLCAweGUzLCAweDdhLCAweDI3LCAweGRlLCAweDNhLCAweDc0LCAweDMwLCAweDBjLCAweDc2LCAweDRjLCAweGQ0LCAweDUwLCAweDJhLCAKKyAgIDB4NDAsIDB4MmQsIDB4MzksIDB4ZDksIDB4OTksIDB4NjMsIDB4YTksIDB4NWQsIDB4ODAsIDB4YWUsIDB4NTMsIDB4Y2EsIDB4OTQsIDB4M2YsIDB4MDUsIDB4MjMsIAorICAgMHgxZSwgMHhmOCwgMHgwNSwgMHgwNCwgMHhlMSwgMHhiOCwgMHgzNSwgMHhmMiwgMHgxNywgMHhiMywgMHhhMCwgMHg4OSwgMHgwMiwgMHg0MSwgMHgwMCwgMHhhYiwgCisgICAweDkwLCAweDg4LCAweGZhLCAweDYwLCAweDA4LCAweDI5LCAweDUwLCAweDlhLCAweDQzLCAweDhiLCAweGEwLCAweDUwLCAweGNjLCAweGQ4LCAweDVhLCAweGZlLCAKKyAgIDB4OTcsIDB4NjQsIDB4NjMsIDB4NzEsIDB4NzQsIDB4MjIsIDB4YTMsIDB4MjAsIDB4MDIsIDB4NWEsIDB4Y2YsIDB4ZWIsIDB4YzYsIDB4MTYsIDB4OTUsIDB4NTQsIAorICAgMHhkMSwgMHhjYiwgMHhhYiwgMHg4ZCwgMHgxYSwgMHhjNiwgMHgwMCwgMHhmYSwgMHgwOCwgMHg5MiwgMHg5YywgMHg3MSwgMHhkNSwgMHg1MiwgMHg1MiwgMHgzNSwgCisgICAweDk2LCAweDcxLCAweDRiLCAweDhiLCAweDkyLCAweDBjLCAweGQwLCAweGU5LCAweGJmLCAweGFkLCAweDYzLCAweDBiLCAweGE1LCAweGU5LCAweGIxLCAweDAyLCAKKyAgIDB4NDEsIDB4MDAsIDB4ZGMsIDB4Y2MsIDB4MjcsIDB4YzgsIDB4ZTQsIDB4ZGMsIDB4NjIsIDB4NDgsIDB4ZDUsIDB4OWIsIDB4YWYsIDB4ZjUsIDB4YWIsIDB4NjAsIAorICAgMHhmNiwgMHgyMSwgMHhmZCwgMHg1MywgMHhlMiwgMHhiNywgMHg1ZCwgMHgwOSwgMHhjOSwgMHgxYSwgMHhhMSwgMHgwNCwgMHhhOSwgMHhmYywgMHg2MSwgMHgyYywgCisgICAweDVkLCAweDA0LCAweDU4LCAweDNhLCAweDVhLCAweDM5LCAweGYxLCAweDRhLCAweDIxLCAweDU2LCAweDY3LCAweGZkLCAweGNjLCAweDIwLCAweGEzLCAweDhmLCAKKyAgIDB4NzgsIDB4MTgsIDB4NWEsIDB4NzksIDB4M2QsIDB4MmUsIDB4OGUsIDB4N2UsIDB4ODYsIDB4MGEsIDB4ZTYsIDB4YTgsIDB4MzMsIDB4YzEsIDB4MDQsIDB4MTcsIAorICAgMHg0YSwgMHg5ZiwgIH07CisKKworLyoqKiBvcGVuc3NsIHB1YmxpYyBSU0Ega2V5IGluIERFUiBmb3JtYXQgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG9wZW5zc2xfcHVibGljX3JzYVtdID0geworICAgMHgzMCwgMHg4MSwgMHg5ZiwgMHgzMCwgMHgwZCwgMHgwNiwgMHgwOSwgMHgyYSwgMHg4NiwgMHg0OCwgMHg4NiwgMHhmNywgMHgwZCwgMHgwMSwgMHgwMSwgMHgwMSwKKyAgIDB4MDUsIDB4MDAsIDB4MDMsIDB4ODEsIDB4OGQsIDB4MDAsIDB4MzAsIDB4ODEsIDB4ODksIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4Y2YsIDB4OWEsIDB4ZGUsCisgICAweDY0LCAweDhhLCAweGRhLCAweGM4LCAweDMzLCAweDIwLCAweGE5LCAweGQ3LCAweDgzLCAweDMxLCAweDE5LCAweDU0LCAweGIyLCAweDlhLCAweDg1LCAweGE3LAorICAgMHhhMSwgMHhiNywgMHg3NSwgMHgzMywgMHhiNiwgMHhhOSwgMHhhYywgMHg4NCwgMHgyNCwgMHhiMywgMHhkZSwgMHhkYiwgMHg3ZCwgMHg4NSwgMHgyZCwgMHg5NiwKKyAgIDB4NjUsIDB4ZTUsIDB4M2YsIDB4NzIsIDB4OTUsIDB4MjQsIDB4OWYsIDB4MjgsIDB4NjgsIDB4Y2EsIDB4NGYsIDB4ZGIsIDB4NDQsIDB4MWMsIDB4M2UsIDB4NjAsCisgICAweDEyLCAweDhhLCAweGRkLCAweDI2LCAweGE1LCAweGViLCAweGZmLCAweDBiLCAweDVlLCAweGQ0LCAweDg4LCAweDM4LCAweDQ5LCAweDJhLCAweDZlLCAweDViLAorICAgMHhiZiwgMHgxMiwgMHgzNywgMHg0NywgMHhiZCwgMHgwNSwgMHg2YiwgMHhiYywgMHhkYiwgMHhmMywgMHhlZSwgMHhlNCwgMHgxMSwgMHg4ZSwgMHg0MSwgMHg2OCwKKyAgIDB4N2MsIDB4NjEsIDB4MTMsIDB4ZDcsIDB4NDIsIDB4YzgsIDB4ODAsIDB4YmUsIDB4MzYsIDB4OGYsIDB4ZGMsIDB4MDgsIDB4OGIsIDB4NGYsIDB4YWMsIDB4YTQsCisgICAweGUyLCAweDc2LCAweDBjLCAweGM5LCAweDYzLCAweDZjLCAweDQ5LCAweDU4LCAweDkzLCAweGVkLCAweGNjLCAweGFhLCAweGRjLCAweDI1LCAweDNiLCAweDBhLAorICAgMHg2MCwgMHgzZiwgMHg4YiwgMHg1NCwgMHgzYSwgMHhjMywgMHg0ZCwgMHgzMSwgMHhlNywgMHg5NCwgMHhhNCwgMHg0NCwgMHhmZCwgMHgwMiwgMHgwMywgMHgwMSwKKyAgIDB4MDAsIDB4MDEsICB9OworCisvKiBzYW1lIGtleSBidXQgd2l0aCBleHRyYSBoZWFkZXJzIHN0cmlwcGVkICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBvcGVuc3NsX3B1YmxpY19yc2Ffc3RyaXBwZWRbXSA9IHsKKyAgIDB4MzAsIDB4ODEsIDB4ODksIDB4MDIsIDB4ODEsIDB4ODEsIDB4MDAsIDB4Y2YsIDB4OWEsIDB4ZGUsIAorICAgMHg2NCwgMHg4YSwgMHhkYSwgMHhjOCwgMHgzMywgMHgyMCwgMHhhOSwgMHhkNywgMHg4MywgMHgzMSwgMHgxOSwgMHg1NCwgMHhiMiwgMHg5YSwgMHg4NSwgMHhhNywgCisgICAweGExLCAweGI3LCAweDc1LCAweDMzLCAweGI2LCAweGE5LCAweGFjLCAweDg0LCAweDI0LCAweGIzLCAweGRlLCAweGRiLCAweDdkLCAweDg1LCAweDJkLCAweDk2LCAKKyAgIDB4NjUsIDB4ZTUsIDB4M2YsIDB4NzIsIDB4OTUsIDB4MjQsIDB4OWYsIDB4MjgsIDB4NjgsIDB4Y2EsIDB4NGYsIDB4ZGIsIDB4NDQsIDB4MWMsIDB4M2UsIDB4NjAsIAorICAgMHgxMiwgMHg4YSwgMHhkZCwgMHgyNiwgMHhhNSwgMHhlYiwgMHhmZiwgMHgwYiwgMHg1ZSwgMHhkNCwgMHg4OCwgMHgzOCwgMHg0OSwgMHgyYSwgMHg2ZSwgMHg1YiwgCisgICAweGJmLCAweDEyLCAweDM3LCAweDQ3LCAweGJkLCAweDA1LCAweDZiLCAweGJjLCAweGRiLCAweGYzLCAweGVlLCAweGU0LCAweDExLCAweDhlLCAweDQxLCAweDY4LCAKKyAgIDB4N2MsIDB4NjEsIDB4MTMsIDB4ZDcsIDB4NDIsIDB4YzgsIDB4ODAsIDB4YmUsIDB4MzYsIDB4OGYsIDB4ZGMsIDB4MDgsIDB4OGIsIDB4NGYsIDB4YWMsIDB4YTQsIAorICAgMHhlMiwgMHg3NiwgMHgwYywgMHhjOSwgMHg2MywgMHg2YywgMHg0OSwgMHg1OCwgMHg5MywgMHhlZCwgMHhjYywgMHhhYSwgMHhkYywgMHgyNSwgMHgzYiwgMHgwYSwgCisgICAweDYwLCAweDNmLCAweDhiLCAweDU0LCAweDNhLCAweGMzLCAweDRkLCAweDMxLCAweGU3LCAweDk0LCAweGE0LCAweDQ0LCAweGZkLCAweDAyLCAweDAzLCAweDAxLCAKKyAgIDB4MDAsIDB4MDEsICB9OworCitzdGF0aWMgaW50IHJzYV9jb21wYXRfdGVzdCh2b2lkKQoreworICAgcnNhX2tleSBrZXk7CisgICB1bnNpZ25lZCBjaGFyIGJ1ZlsxMDI0XTsKKyAgIHVuc2lnbmVkIGxvbmcgbGVuOworCisgICAvKiB0cnkgcmVhZGluZyB0aGUga2V5ICovCisgICBETyhyc2FfaW1wb3J0KG9wZW5zc2xfcHJpdmF0ZV9yc2EsIHNpemVvZihvcGVuc3NsX3ByaXZhdGVfcnNhKSwgJmtleSkpOworCisgICAvKiBub3cgdHJ5IHRvIGV4cG9ydCBwcml2YXRlL3B1YmxpYyBhbmQgY29tcGFyZSAqLworICAgbGVuID0gc2l6ZW9mKGJ1Zik7CisgICBETyhyc2FfZXhwb3J0KGJ1ZiwgJmxlbiwgUEtfUFJJVkFURSwgJmtleSkpOworICAgaWYgKGxlbiAhPSBzaXplb2Yob3BlbnNzbF9wcml2YXRlX3JzYSkgfHwgbWVtY21wKGJ1Ziwgb3BlbnNzbF9wcml2YXRlX3JzYSwgbGVuKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJSU0EgcHJpdmF0ZSBleHBvcnQgZmFpbGVkIHRvIG1hdGNoIE9wZW5TU0wgb3V0cHV0LCAlbHUsICVsdVxuIiwgbGVuLCAodW5zaWduZWQgbG9uZylzaXplb2Yob3BlbnNzbF9wcml2YXRlX3JzYSkpOworICAgICAgcmV0dXJuIDE7CisgICB9CisKKyAgIGxlbiA9IHNpemVvZihidWYpOworICAgRE8ocnNhX2V4cG9ydChidWYsICZsZW4sIFBLX1BVQkxJQywgJmtleSkpOworICAgaWYgKGxlbiAhPSBzaXplb2Yob3BlbnNzbF9wdWJsaWNfcnNhX3N0cmlwcGVkKSB8fCBtZW1jbXAoYnVmLCBvcGVuc3NsX3B1YmxpY19yc2Ffc3RyaXBwZWQsIGxlbikpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiUlNBKHByaXZhdGUpIHB1YmxpYyBleHBvcnQgZmFpbGVkIHRvIG1hdGNoIE9wZW5TU0wgb3V0cHV0XG4iKTsKKyAgICAgIHJldHVybiAxOworICAgfQorICAgcnNhX2ZyZWUoJmtleSk7CisKKyAgIC8qIHRyeSByZWFkaW5nIHRoZSBwdWJsaWMga2V5ICovCisgICBETyhyc2FfaW1wb3J0KG9wZW5zc2xfcHVibGljX3JzYV9zdHJpcHBlZCwgc2l6ZW9mKG9wZW5zc2xfcHVibGljX3JzYV9zdHJpcHBlZCksICZrZXkpKTsKKyAgIGxlbiA9IHNpemVvZihidWYpOworICAgRE8ocnNhX2V4cG9ydChidWYsICZsZW4sIFBLX1BVQkxJQywgJmtleSkpOworICAgaWYgKGxlbiAhPSBzaXplb2Yob3BlbnNzbF9wdWJsaWNfcnNhX3N0cmlwcGVkKSB8fCBtZW1jbXAoYnVmLCBvcGVuc3NsX3B1YmxpY19yc2Ffc3RyaXBwZWQsIGxlbikpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiUlNBKHB1YmxpYykgc3RyaXBwZWQgcHVibGljIGltcG9ydCBmYWlsZWQgdG8gbWF0Y2ggT3BlblNTTCBvdXRwdXRcbiIpOworICAgICAgcmV0dXJuIDE7CisgICB9CisgICByc2FfZnJlZSgma2V5KTsKKworICAgLyogdHJ5IHJlYWRpbmcgdGhlIHB1YmxpYyBrZXkgKi8KKyAgIERPKHJzYV9pbXBvcnQob3BlbnNzbF9wdWJsaWNfcnNhLCBzaXplb2Yob3BlbnNzbF9wdWJsaWNfcnNhKSwgJmtleSkpOworICAgbGVuID0gc2l6ZW9mKGJ1Zik7CisgICBETyhyc2FfZXhwb3J0KGJ1ZiwgJmxlbiwgUEtfUFVCTElDLCAma2V5KSk7CisgICBpZiAobGVuICE9IHNpemVvZihvcGVuc3NsX3B1YmxpY19yc2Ffc3RyaXBwZWQpIHx8IG1lbWNtcChidWYsIG9wZW5zc2xfcHVibGljX3JzYV9zdHJpcHBlZCwgbGVuKSkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJSU0EocHVibGljKSBTU0wgcHVibGljIGltcG9ydCBmYWlsZWQgdG8gbWF0Y2ggT3BlblNTTCBvdXRwdXRcbiIpOworICAgICAgcmV0dXJuIDE7CisgICB9CisgICByc2FfZnJlZSgma2V5KTsKKworICAgcmV0dXJuIDA7Cit9ICAgCisKK2ludCByc2FfdGVzdCh2b2lkKQoreworICAgdW5zaWduZWQgY2hhciBpblsxMDI0XSwgb3V0WzEwMjRdLCB0bXBbMTAyNF07CisgICByc2Ffa2V5ICAgICAgIGtleSwgcHJpdktleSwgcHViS2V5OworICAgaW50ICAgICAgICAgICBoYXNoX2lkeCwgcHJuZ19pZHgsIHN0YXQsIHN0YXQyOworICAgdW5zaWduZWQgbG9uZyByc2FfbXNnc2l6ZSwgbGVuLCBsZW4yLCBjbnQ7CisgICBzdGF0aWMgdW5zaWduZWQgY2hhciBscGFyYW1bXSA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCB9OworCisgICBpZiAocnNhX2NvbXBhdF90ZXN0KCkgIT0gMCkgeworICAgICAgcmV0dXJuIDE7CisgICB9CisgICAgICAKKyAgIGhhc2hfaWR4ID0gZmluZF9oYXNoKCJzaGExIik7CisgICBwcm5nX2lkeCA9IGZpbmRfcHJuZygieWFycm93Iik7CisgICBpZiAoaGFzaF9pZHggPT0gLTEgfHwgcHJuZ19pZHggPT0gLTEpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAicnNhX3Rlc3QgcmVxdWlyZXMgU0hBMSBhbmQgeWFycm93Iik7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIAorICAgLyogbWFrZSAxMCByYW5kb20ga2V5ICovCisgICBmb3IgKGNudCA9IDA7IGNudCA8IDEwOyBjbnQrKykgeworICAgICAgRE8ocnNhX21ha2Vfa2V5KCZ5YXJyb3dfcHJuZywgcHJuZ19pZHgsIDEwMjQvOCwgNjU1MzcsICZrZXkpKTsKKyAgICAgIGlmIChtcF9jb3VudF9iaXRzKGtleS5OKSAhPSAxMDI0KSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJzYV8xMDI0IGtleSBtb2R1bHVzIGhhcyAlZCBiaXRzXG4iLCBtcF9jb3VudF9iaXRzKGtleS5OKSk7CisKK2xlbiA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS5OKTsKK21wX3RvX3Vuc2lnbmVkX2JpbihrZXkuTiwgdG1wKTsKKyBmcHJpbnRmKHN0ZGVyciwgIk4gPT0gXG4iKTsKK2ZvciAoY250ID0gMDsgY250IDwgbGVuOyApIHsKKyAgIGZwcmludGYoc3RkZXJyLCAiJTAyeCAiLCB0bXBbY250XSk7CisgICBpZiAoISgrK2NudCAmIDE1KSkgZnByaW50ZihzdGRlcnIsICJcbiIpOworfQorCitsZW4gPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXkucCk7CittcF90b191bnNpZ25lZF9iaW4oa2V5LnAsIHRtcCk7CisgZnByaW50ZihzdGRlcnIsICJwID09IFxuIik7Citmb3IgKGNudCA9IDA7IGNudCA8IGxlbjsgKSB7CisgICBmcHJpbnRmKHN0ZGVyciwgIiUwMnggIiwgdG1wW2NudF0pOworICAgaWYgKCEoKytjbnQgJiAxNSkpIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKworbGVuID0gbXBfdW5zaWduZWRfYmluX3NpemUoa2V5LnEpOworbXBfdG9fdW5zaWduZWRfYmluKGtleS5xLCB0bXApOworIGZwcmludGYoc3RkZXJyLCAiXG5xID09IFxuIik7Citmb3IgKGNudCA9IDA7IGNudCA8IGxlbjsgKSB7CisgICBmcHJpbnRmKHN0ZGVyciwgIiUwMnggIiwgdG1wW2NudF0pOworICAgaWYgKCEoKytjbnQgJiAxNSkpIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKyBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisKKworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICBpZiAoY250ICE9IDkpIHsKKyAgICAgICAgIHJzYV9mcmVlKCZrZXkpOworICAgICAgfQorICAgfQorICAgIAorICAgLyogZW5jcnlwdCB0aGUga2V5ICh3aXRob3V0IGxwYXJhbSkgKi8KKyAgIGZvciAoY250ID0gMDsgY250IDwgNDsgY250KyspIHsKKyAgIGZvciAocnNhX21zZ3NpemUgPSAxOyByc2FfbXNnc2l6ZSA8PSA4NjsgcnNhX21zZ3NpemUrKykgeworICAgICAgLyogbWFrZSBhIHJhbmRvbSBrZXkvbXNnICovCisgICAgICB5YXJyb3dfcmVhZChpbiwgcnNhX21zZ3NpemUsICZ5YXJyb3dfcHJuZyk7CisKKyAgICAgIGxlbiAgPSBzaXplb2Yob3V0KTsKKyAgICAgIGxlbjIgPSByc2FfbXNnc2l6ZTsKKyAgIAorICAgICAgRE8ocnNhX2VuY3J5cHRfa2V5KGluLCByc2FfbXNnc2l6ZSwgb3V0LCAmbGVuLCBOVUxMLCAwLCAmeWFycm93X3BybmcsIHBybmdfaWR4LCBoYXNoX2lkeCwgJmtleSkpOworICAgICAgLyogY2hhbmdlIGEgYnl0ZSAqLworICAgICAgb3V0WzhdIF49IDE7CisgICAgICBETyhyc2FfZGVjcnlwdF9rZXkob3V0LCBsZW4sIHRtcCwgJmxlbjIsIE5VTEwsIDAsIGhhc2hfaWR4LCAmc3RhdDIsICZrZXkpKTsKKyAgICAgIC8qIGNoYW5nZSBhIGJ5dGUgYmFjayAqLworICAgICAgb3V0WzhdIF49IDE7CisgICAgICBpZiAobGVuMiAhPSByc2FfbXNnc2l6ZSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbnJzYV9kZWNyeXB0X2tleSBtaXNtYXRjaCBsZW4gJWx1IChmaXJzdCBkZWNyeXB0KSIsIGxlbjIpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisKKyAgICAgIGxlbjIgPSByc2FfbXNnc2l6ZTsKKyAgICAgIERPKHJzYV9kZWNyeXB0X2tleShvdXQsIGxlbiwgdG1wLCAmbGVuMiwgTlVMTCwgMCwgaGFzaF9pZHgsICZzdGF0LCAma2V5KSk7CisgICAgICBpZiAoIShzdGF0ID09IDEgJiYgc3RhdDIgPT0gMCkpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicnNhX2RlY3J5cHRfa2V5IGZhaWxlZCIpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICBpZiAobGVuMiAhPSByc2FfbXNnc2l6ZSB8fCBtZW1jbXAodG1wLCBpbiwgcnNhX21zZ3NpemUpKSB7CisgICAgICAgICB1bnNpZ25lZCBsb25nIHg7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxucnNhX2RlY3J5cHRfa2V5IG1pc21hdGNoLCBsZW4gJWx1IChzZWNvbmQgZGVjcnlwdClcbiIsIGxlbjIpOworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJPcmlnaW5hbCBjb250ZW50czogXG4iKTsgCisgICAgICAgICBmb3IgKHggPSAwOyB4IDwgcnNhX21zZ3NpemU7ICkgeworICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJTAyeCAiLCBpblt4XSk7CisgICAgICAgICAgICAgaWYgKCEoKyt4ICUgMTYpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT3V0cHV0IGNvbnRlbnRzOiBcbiIpOyAKKyAgICAgICAgIGZvciAoeCA9IDA7IHggPCByc2FfbXNnc2l6ZTsgKSB7CisgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlMDJ4ICIsIG91dFt4XSk7CisgICAgICAgICAgICAgaWYgKCEoKyt4ICUgMTYpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0gICAgIAorICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICB9CisgICB9CisKKyAgIC8qIGVuY3J5cHQgdGhlIGtleSAod2l0aCBscGFyYW0pICovCisgICBmb3IgKHJzYV9tc2dzaXplID0gMTsgcnNhX21zZ3NpemUgPD0gODY7IHJzYV9tc2dzaXplKyspIHsKKyAgICAgIGxlbiAgPSBzaXplb2Yob3V0KTsKKyAgICAgIGxlbjIgPSByc2FfbXNnc2l6ZTsKKyAgICAgIERPKHJzYV9lbmNyeXB0X2tleShpbiwgcnNhX21zZ3NpemUsIG91dCwgJmxlbiwgbHBhcmFtLCBzaXplb2YobHBhcmFtKSwgJnlhcnJvd19wcm5nLCBwcm5nX2lkeCwgaGFzaF9pZHgsICZrZXkpKTsKKyAgICAgIC8qIGNoYW5nZSBhIGJ5dGUgKi8KKyAgICAgIG91dFs4XSBePSAxOworICAgICAgRE8ocnNhX2RlY3J5cHRfa2V5KG91dCwgbGVuLCB0bXAsICZsZW4yLCBscGFyYW0sIHNpemVvZihscGFyYW0pLCBoYXNoX2lkeCwgJnN0YXQyLCAma2V5KSk7CisgICAgICBpZiAobGVuMiAhPSByc2FfbXNnc2l6ZSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbnJzYV9kZWNyeXB0X2tleSBtaXNtYXRjaCBsZW4gJWx1IChmaXJzdCBkZWNyeXB0KSIsIGxlbjIpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICAvKiBjaGFuZ2UgYSBieXRlIGJhY2sgKi8KKyAgICAgIG91dFs4XSBePSAxOworCisgICAgICBsZW4yID0gcnNhX21zZ3NpemU7CisgICAgICBETyhyc2FfZGVjcnlwdF9rZXkob3V0LCBsZW4sIHRtcCwgJmxlbjIsIGxwYXJhbSwgc2l6ZW9mKGxwYXJhbSksIGhhc2hfaWR4LCAmc3RhdCwgJmtleSkpOworICAgICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJzYV9kZWNyeXB0X2tleSBmYWlsZWQiKTsKKyAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgaWYgKGxlbjIgIT0gcnNhX21zZ3NpemUgfHwgbWVtY21wKHRtcCwgaW4sIHJzYV9tc2dzaXplKSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJyc2FfZGVjcnlwdF9rZXkgbWlzbWF0Y2ggbGVuICVsdSIsIGxlbjIpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICB9CisKKyAgIC8qIGVuY3J5cHQgdGhlIGtleSBQS0NTICMxIHYxLjUgKHBheWxvYWQgZnJvbSAxIHRvIDExNyBieXRlcykgKi8KKyAgIGZvciAocnNhX21zZ3NpemUgPSAxOyByc2FfbXNnc2l6ZSA8PSAxMTc7IHJzYV9tc2dzaXplKyspIHsKKyAgICAgIGxlbiAgPSBzaXplb2Yob3V0KTsKKyAgICAgIGxlbjIgPSByc2FfbXNnc2l6ZTsKKyAgICAgIERPKHJzYV9lbmNyeXB0X2tleV9leChpbiwgcnNhX21zZ3NpemUsIG91dCwgJmxlbiwgTlVMTCwgMCwgJnlhcnJvd19wcm5nLCBwcm5nX2lkeCwgMCwgTFRDX1BLQ1NfMV9WMV81LCAma2V5KSk7CisKKyAgICAgIGxlbjIgPSByc2FfbXNnc2l6ZTsKKyAgICAgIERPKHJzYV9kZWNyeXB0X2tleV9leChvdXQsIGxlbiwgdG1wLCAmbGVuMiwgTlVMTCwgMCwgMCwgTFRDX1BLQ1NfMV9WMV81LCAmc3RhdCwgJmtleSkpOworICAgICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInJzYV9kZWNyeXB0X2tleV9leCBmYWlsZWQsICVkLCAlZCIsIHN0YXQsIHN0YXQyKTsKKyAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICAgICAgaWYgKGxlbjIgIT0gcnNhX21zZ3NpemUgfHwgbWVtY21wKHRtcCwgaW4sIHJzYV9tc2dzaXplKSkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJyc2FfZGVjcnlwdF9rZXlfZXggbWlzbWF0Y2ggbGVuICVsdSIsIGxlbjIpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICB9CisKKyAgIC8qIHNpZ24gYSBtZXNzYWdlICh1bnNhbHRlZCwgbG93ZXIgY2hvbGVzdG9yb2wgYW5kIEF0a2lucyBhcHByb3ZlZCkgbm93ICovCisgICBsZW4gPSBzaXplb2Yob3V0KTsKKyAgIERPKHJzYV9zaWduX2hhc2goaW4sIDIwLCBvdXQsICZsZW4sICZ5YXJyb3dfcHJuZywgcHJuZ19pZHgsIGhhc2hfaWR4LCAwLCAma2V5KSk7CisKKy8qIGV4cG9ydCBrZXkgYW5kIGltcG9ydCBhcyBib3RoIHByaXZhdGUgYW5kIHB1YmxpYyAqLworICAgbGVuMiA9IHNpemVvZih0bXApOworICAgRE8ocnNhX2V4cG9ydCh0bXAsICZsZW4yLCBQS19QUklWQVRFLCAma2V5KSk7IAorICAgRE8ocnNhX2ltcG9ydCh0bXAsIGxlbjIsICZwcml2S2V5KSk7IAorICAgbGVuMiA9IHNpemVvZih0bXApOworICAgRE8ocnNhX2V4cG9ydCh0bXAsICZsZW4yLCBQS19QVUJMSUMsICZrZXkpKTsKKyAgIERPKHJzYV9pbXBvcnQodG1wLCBsZW4yLCAmcHViS2V5KSk7CisKKyAgIC8qIHZlcmlmeSB3aXRoIG9yaWdpbmFsICovCisgICBETyhyc2FfdmVyaWZ5X2hhc2gob3V0LCBsZW4sIGluLCAyMCwgaGFzaF9pZHgsIDAsICZzdGF0LCAma2V5KSk7CisgICAvKiBjaGFuZ2UgYSBieXRlICovCisgICBpblswXSBePSAxOworICAgRE8ocnNhX3ZlcmlmeV9oYXNoKG91dCwgbGVuLCBpbiwgMjAsIGhhc2hfaWR4LCAwLCAmc3RhdDIsICZrZXkpKTsKKyAgIAorICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgInJzYV92ZXJpZnlfaGFzaCAodW5zYWx0ZWQsIG9yaWdLZXkpIGZhaWxlZCwgJWQsICVkIiwgc3RhdCwgc3RhdDIpOworICAgICAgcnNhX2ZyZWUoJmtleSk7CisgICAgICByc2FfZnJlZSgmcHViS2V5KTsKKyAgICAgIHJzYV9mcmVlKCZwcml2S2V5KTsKKyAgICAgIHJldHVybiAxOworICAgfQorCisgICAvKiB2ZXJpZnkgd2l0aCBwcml2S2V5ICovCisgICAvKiBjaGFuZ2UgYSBieXRlICovCisgICBpblswXSBePSAxOworICAgRE8ocnNhX3ZlcmlmeV9oYXNoKG91dCwgbGVuLCBpbiwgMjAsIGhhc2hfaWR4LCAwLCAmc3RhdCwgJnByaXZLZXkpKTsKKyAgIC8qIGNoYW5nZSBhIGJ5dGUgKi8KKyAgIGluWzBdIF49IDE7CisgICBETyhyc2FfdmVyaWZ5X2hhc2gob3V0LCBsZW4sIGluLCAyMCwgaGFzaF9pZHgsIDAsICZzdGF0MiwgJnByaXZLZXkpKTsKKyAgIAorICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgInJzYV92ZXJpZnlfaGFzaCAodW5zYWx0ZWQsIHByaXZLZXkpIGZhaWxlZCwgJWQsICVkIiwgc3RhdCwgc3RhdDIpOworICAgICAgcnNhX2ZyZWUoJmtleSk7CisgICAgICByc2FfZnJlZSgmcHViS2V5KTsKKyAgICAgIHJzYV9mcmVlKCZwcml2S2V5KTsKKyAgICAgIHJldHVybiAxOworICAgfQorCisgICAvKiB2ZXJpZnkgd2l0aCBwdWJLZXkgKi8KKyAgIC8qIGNoYW5nZSBhIGJ5dGUgKi8KKyAgIGluWzBdIF49IDE7CisgICBETyhyc2FfdmVyaWZ5X2hhc2gob3V0LCBsZW4sIGluLCAyMCwgaGFzaF9pZHgsIDAsICZzdGF0LCAmcHViS2V5KSk7CisgICAvKiBjaGFuZ2UgYSBieXRlICovCisgICBpblswXSBePSAxOworICAgRE8ocnNhX3ZlcmlmeV9oYXNoKG91dCwgbGVuLCBpbiwgMjAsIGhhc2hfaWR4LCAwLCAmc3RhdDIsICZwdWJLZXkpKTsKKyAgIAorICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgInJzYV92ZXJpZnlfaGFzaCAodW5zYWx0ZWQsIHB1YmtleSkgZmFpbGVkLCAlZCwgJWQiLCBzdGF0LCBzdGF0Mik7CisgICAgICByc2FfZnJlZSgma2V5KTsKKyAgICAgIHJzYV9mcmVlKCZwdWJLZXkpOworICAgICAgcnNhX2ZyZWUoJnByaXZLZXkpOworICAgICAgcmV0dXJuIDE7CisgICB9CisKKyAgIC8qIHNpZ24gYSBtZXNzYWdlIChzYWx0ZWQpIG5vdyAodXNlIHByaXZLZXkgdG8gbWFrZSwgcHViS2V5IHRvIHZlcmlmeSkgKi8KKyAgIGxlbiA9IHNpemVvZihvdXQpOworICAgRE8ocnNhX3NpZ25faGFzaChpbiwgMjAsIG91dCwgJmxlbiwgJnlhcnJvd19wcm5nLCBwcm5nX2lkeCwgaGFzaF9pZHgsIDgsICZwcml2S2V5KSk7CisgICBETyhyc2FfdmVyaWZ5X2hhc2gob3V0LCBsZW4sIGluLCAyMCwgaGFzaF9pZHgsIDgsICZzdGF0LCAmcHViS2V5KSk7CisgICAvKiBjaGFuZ2UgYSBieXRlICovCisgICBpblswXSBePSAxOworICAgRE8ocnNhX3ZlcmlmeV9oYXNoKG91dCwgbGVuLCBpbiwgMjAsIGhhc2hfaWR4LCA4LCAmc3RhdDIsICZwdWJLZXkpKTsKKyAgIAorICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgInJzYV92ZXJpZnlfaGFzaCAoc2FsdGVkKSBmYWlsZWQsICVkLCAlZCIsIHN0YXQsIHN0YXQyKTsKKyAgICAgIHJzYV9mcmVlKCZrZXkpOworICAgICAgcnNhX2ZyZWUoJnB1YktleSk7CisgICAgICByc2FfZnJlZSgmcHJpdktleSk7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKyAgIAorICAgLyogc2lnbiBhIG1lc3NhZ2Ugd2l0aCBQS0NTICMxIHYxLjUgKi8KKyAgIGxlbiA9IHNpemVvZihvdXQpOworICAgRE8ocnNhX3NpZ25faGFzaF9leChpbiwgMjAsIG91dCwgJmxlbiwgTFRDX1BLQ1NfMV9WMV81LCAmeWFycm93X3BybmcsIHBybmdfaWR4LCBoYXNoX2lkeCwgOCwgJnByaXZLZXkpKTsKKyAgIERPKHJzYV92ZXJpZnlfaGFzaF9leChvdXQsIGxlbiwgaW4sIDIwLCBMVENfUEtDU18xX1YxXzUsIGhhc2hfaWR4LCA4LCAmc3RhdCwgJnB1YktleSkpOworICAgLyogY2hhbmdlIGEgYnl0ZSAqLworICAgaW5bMF0gXj0gMTsKKyAgIERPKHJzYV92ZXJpZnlfaGFzaF9leChvdXQsIGxlbiwgaW4sIDIwLCBMVENfUEtDU18xX1YxXzUsIGhhc2hfaWR4LCA4LCAmc3RhdDIsICZwdWJLZXkpKTsKKyAgIAorICAgaWYgKCEoc3RhdCA9PSAxICYmIHN0YXQyID09IDApKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgInJzYV92ZXJpZnlfaGFzaF9leCBmYWlsZWQsICVkLCAlZCIsIHN0YXQsIHN0YXQyKTsKKyAgICAgIHJzYV9mcmVlKCZrZXkpOworICAgICAgcnNhX2ZyZWUoJnB1YktleSk7CisgICAgICByc2FfZnJlZSgmcHJpdktleSk7CisgICAgICByZXR1cm4gMTsKKyAgIH0KKworICAgLyogZnJlZSB0aGUga2V5IGFuZCByZXR1cm4gKi8KKyAgIHJzYV9mcmVlKCZrZXkpOworICAgcnNhX2ZyZWUoJnB1YktleSk7CisgICByc2FfZnJlZSgmcHJpdktleSk7CisgICByZXR1cm4gMDsKK30KKworI2Vsc2UKKworaW50IHJzYV90ZXN0KHZvaWQpCit7CisgICBmcHJpbnRmKHN0ZGVyciwgIk5PUCIpOworICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21jcnlwdC90ZXN0cHJvZi9yc2FfdGVzdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjE4ICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzIxIDAwOjEwOjE4ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3N0b3JlX3Rlc3QuYyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3N0b3JlX3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTM4ZDY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvdGVzdHByb2Yvc3RvcmVfdGVzdC5jCkBAIC0wLDAgKzEsNzggQEAKKyNpbmNsdWRlIDx0b21jcnlwdF90ZXN0Lmg+CisKKy8qIFRlc3Qgc3RvcmUvbG9hZCBtYWNyb3Mgd2l0aCBvZmZzZXRzICovCitpbnQgc3RvcmVfdGVzdCh2b2lkKQoreworICB1bnNpZ25lZCBjaGFyIGJ1ZlsyNTZdOworICBpbnQgeTsKKyAgdWxvbmczMiBMLCBMMTsKKyAgdWxvbmc2NCBMTCwgTEwxOworI2lmZGVmIExUQ19GQVNUCisgIGludCB4LCB6OworI2VuZGlmCisKKyAgZm9yICh5ID0gMDsgeSA8IDQ7IHkrKykgeworICAgICAgTCAgPSAweDEyMzQ1Njc4VUw7CisgICAgICBMMSA9IDA7CisgICAgICBTVE9SRTMyTChMLCBidWYgKyB5KTsKKyAgICAgIExPQUQzMkwoTDEsIGJ1ZiArIHkpOworICAgICAgaWYgKEwxICE9IEwpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4zMkwgZmFpbGVkIGF0IG9mZnNldCAlZFxuIiwgeSk7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIFNUT1JFMzJIKEwsIGJ1ZiArIHkpOworICAgICAgTE9BRDMySChMMSwgYnVmICsgeSk7CisgICAgICBpZiAoTDEgIT0gTCkgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbjMySCBmYWlsZWQgYXQgb2Zmc2V0ICVkXG4iLCB5KTsKKyAgICAgICAgIHJldHVybiAxOworICAgICAgfQorICB9CisKKyAgZm9yICh5ID0gMDsgeSA8IDg7IHkrKykgeworICAgICAgTEwgPSBDT05TVDY0ICgweDAxMDIwMzA0MDUwNjA3KTsKKyAgICAgIExMMSA9IDA7CisgICAgICBTVE9SRTY0TChMTCwgYnVmICsgeSk7CisgICAgICBMT0FENjRMKExMMSwgYnVmICsgeSk7CisgICAgICBpZiAoTEwxICE9IExMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuNjRMIGZhaWxlZCBhdCBvZmZzZXQgJWRcbiIsIHkpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICAgICBTVE9SRTY0SChMTCwgYnVmICsgeSk7CisgICAgICBMT0FENjRIKExMMSwgYnVmICsgeSk7CisgICAgICBpZiAoTEwxICE9IExMKSB7CisgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuNjRIIGZhaWxlZCBhdCBvZmZzZXQgJWRcbiIsIHkpOworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgIH0KKworLyogdGVzdCBMVENfRkFTVCAqLworI2lmZGVmIExUQ19GQVNUCisgIHkgPSAxNjsKKworICBmb3IgKHogPSAwOyB6IDwgeTsgeisrKSB7CisgICAgIC8qIGZpbGwgeSBieXRlcyB3aXRoIHJhbmRvbSAqLworICAgICB5YXJyb3dfcmVhZChidWYreiwgICB5LCAmeWFycm93X3BybmcpOworICAgICB5YXJyb3dfcmVhZChidWYreit5LCB5LCAmeWFycm93X3BybmcpOworCisgICAgIC8qIG5vdyBYT1IgaXQgYnl0ZSBmb3IgYnl0ZSAqLworICAgICBmb3IgKHggPSAwOyB4IDwgeTsgeCsrKSB7CisgICAgICAgICBidWZbMip5K3oreF0gPSBidWZbeit4XSBeIGJ1Zlt6K3kreF07CisgICAgIH0KKworICAgICAvKiBub3cgWE9SIGl0IHdvcmQgZm9yIHdvcmQgKi8KKyAgICAgZm9yICh4ID0gMDsgeCA8IHk7IHggKz0gc2l6ZW9mKExUQ19GQVNUX1RZUEUpKSB7CisgICAgICAgICooKExUQ19GQVNUX1RZUEUqKSgmYnVmWzMqeSt6K3hdKSkgPSAqKChMVENfRkFTVF9UWVBFKikoJmJ1Zlt6K3hdKSkgXiAqKChMVENfRkFTVF9UWVBFKikoJmJ1Zlt6K3kreF0pKTsKKyAgICAgfQorCisgICAgIGlmIChtZW1jbXAoJmJ1ZlsyKnkrel0sICZidWZbMyp5K3pdLCB5KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuTFRDX0ZBU1QgZmFpbGVkIGF0IG9mZnNldCAlZFxuIiwgeik7CisgICAgICAgIHJldHVybiAxOworICAgICB9CisgIH0KKyNlbmRpZgorICByZXR1cm4gMDsKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvdGVzdHByb2Yvc3RvcmVfdGVzdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjYgJCAqLworLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6MzU6NTkgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvdGVzdHByb2YvdGVzdC5kZXIgYi9saWJ0b21jcnlwdC90ZXN0cHJvZi90ZXN0LmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzA0MWY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvdGVzdC5kZXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvdGVzdHByb2YvdGVzdC5rZXkgYi9saWJ0b21jcnlwdC90ZXN0cHJvZi90ZXN0LmtleQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDk5NmMzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvdGVzdC5rZXkKQEAgLTAsMCArMSwxNSBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJQ1hnSUJBQUtCZ1FEUG10NWtpdHJJTXlDcDE0TXhHVlN5bW9Xbm9iZDFNN2FwcklRa3M5N2JmWVV0bG1YbAorUDNLVkpKOG9hTXBQMjBRY1BtQVNpdDBtcGV2L0MxN1VpRGhKS201YnZ4STNSNzBGYTd6YjgrN2tFWTVCYUh4aAorRTlkQ3lJQytOby9jQ0l0UHJLVGlkZ3pKWTJ4SldKUHR6S3JjSlRzS1lEK0xWRHJEVFRIbmxLUkUvUUlEQVFBQgorQW9HQkFNaGl1ZXJlUkZNZFZwZlpsNTRhenpBZUNvaEZoaWt3bzAyZllXVno0TmFIajdiekJxT0MzSHlzL3BzbworbXE3OSsvNHZEdGlYQk9PN0g5SHNEYnFqU1g5SHJJcEVCSDZHdHpsQ1A2MGV0dzZsVWZSQVl4Nzl2ZXFmUVorbwora0IxdkNscVZFeEVOZ0s5ZlpKaUtMSGhvWmJBcmk2SlRoOHJ4WkFTcjhudmJnOGlCQWtFQTk3NWVJOE15UDcrTAorampydS9Qekw1ZmZ4Qzd4Q2dxN1ZlajdLOTlWcFAyUWxvaCszZFhVRmtrTHJ1UEh6Q2dYamxORlZlRFdnTnFDYgorZkpLRWJOM2NUUUpCQU5hR0RvVkNDd1FJaENGZzhBNE5pUDBlTmhCbFR4NVR0QWh5Z0Z3L1dXWVg1cGp5Nld4NgorQmt5c2RqM3RqS0hPclJ1OXRIMG92T01PT0kyWjJBVzFvM0VDUUczcnd5MHU4RjZraURFRktRQ0swWlVwbTRQUAorZGRzeDQzb24zanAwTUF4MlROUlFLa0F0T2RtWlk2bGRnSzVUeXBRL0JTTWUrQVVFNGJnMThoZXpvSWtDUVFDcgora0lqNllBZ3BVSnBEaTZCUXpOaGEvcGRrWTNGMElxTWdBbHJQNjhZV2xWVFJ5NnVOR3NZQStnaVNuSEhWVWxJMQorbG5GTGk1SU0wT20vcldNTHBlbXhBa0VBM013bnlPVGNZa2pWbTYvMXEyRDJJZjFUNHJkZENja2FvUVNwL0dFcworWFFSWU9sbzU4VW9oVm1mOXpDQ2pqM2dZV25rOUxvNStoZ3JtcURQQkJCZEtudz09CistLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvdGVzdHByb2YvdGVzdF9kcml2ZXIuYyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3Rlc3RfZHJpdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU3NDBhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3Rlc3RfZHJpdmVyLmMKQEAgLTAsMCArMSwxNSBAQAorI2luY2x1ZGUgPHRvbWNyeXB0X3Rlc3QuaD4KKwordm9pZCBydW5fY21kKGludCByZXMsIGludCBsaW5lLCBjaGFyICpmaWxlLCBjaGFyICpjbWQpCit7CisgICBpZiAocmVzICE9IENSWVBUX09LKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzICglZClcbiVzOiVkOiVzXG4iLCBlcnJvcl90b19zdHJpbmcocmVzKSwgcmVzLCBmaWxlLCBsaW5lLCBjbWQpOworICAgICAgaWYgKHJlcyAhPSBDUllQVF9OT1ApIHsKKyAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgIH0KKyAgIH0KK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvdGVzdHByb2YvdGVzdF9kcml2ZXIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA2LzExLzEzIDIzOjE0OjMzICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3RvbWNyeXB0X3Rlc3QuaCBiL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3RvbWNyeXB0X3Rlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDM5NmZiCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvdGVzdHByb2YvdG9tY3J5cHRfdGVzdC5oCkBAIC0wLDAgKzEsODMgQEAKKworI2lmbmRlZiBfX1RFU1RfSF8KKyNkZWZpbmUgX19URVNUX0hfCisKKyNpbmNsdWRlIDx0b21jcnlwdC5oPgorCisvKiBlbmFibGUgc3RhY2sgdGVzdGluZyAqLworLyogI2RlZmluZSBTVEFDS19URVNUICovCisKKy8qIHN0YWNrIHRlc3RpbmcsIGRlZmluZSB0aGlzIGlmIHN0YWNrIHVzYWdlIGdvZXMgZG93bndhcmRzIFtlLmcuIHg4Nl0gKi8KKyNkZWZpbmUgU1RBQ0tfRE9XTgorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgY2hhciAqbmFtZSwgKnByb3YsICpyZXE7CisgICAgaW50ICAoKmVudHJ5KSh2b2lkKTsKK30gdGVzdF9lbnRyeTsKKworZXh0ZXJuIHBybmdfc3RhdGUgeWFycm93X3Bybmc7CisKK3ZvaWQgcnVuX2NtZChpbnQgcmVzLCBpbnQgbGluZSwgY2hhciAqZmlsZSwgY2hhciAqY21kKTsKKworI2lmZGVmIExUQ19WRVJCT1NFCisjZGVmaW5lIERPKHgpIGRvIHsgZnByaW50ZihzdGRlcnIsICIlczpcbiIsICN4KTsgcnVuX2NtZCgoeCksIF9fTElORV9fLCBfX0ZJTEVfXywgI3gpOyB9IHdoaWxlICgwKTsKKyNlbHNlCisjZGVmaW5lIERPKHgpIGRvIHsgcnVuX2NtZCgoeCksIF9fTElORV9fLCBfX0ZJTEVfXywgI3gpOyB9IHdoaWxlICgwKTsKKyNlbmRpZgorCisvKiBURVNUUyAqLworaW50IGNpcGhlcl9oYXNoX3Rlc3Qodm9pZCk7CitpbnQgbW9kZXNfdGVzdCh2b2lkKTsKK2ludCBtYWNfdGVzdCh2b2lkKTsKK2ludCBwa2NzXzFfdGVzdCh2b2lkKTsKK2ludCBzdG9yZV90ZXN0KHZvaWQpOworaW50IHJzYV90ZXN0KHZvaWQpOworaW50IGthdGphX3Rlc3Qodm9pZCk7CitpbnQgZWNjX3Rlc3RzKHZvaWQpOworaW50IGRzYV90ZXN0KHZvaWQpOworaW50IGRlcl90ZXN0cyh2b2lkKTsKKworLyogdGltaW5nICovCisjZGVmaW5lIEtUSU1FUyAgMjUKKyNkZWZpbmUgVElNRVMgICAxMDAwMDAKKworZXh0ZXJuIHN0cnVjdCBsaXN0IHsKKyAgICBpbnQgaWQ7CisgICAgdW5zaWduZWQgbG9uZyBzcGQxLCBzcGQyLCBhdmc7Cit9IHJlc3VsdHNbXTsKKworZXh0ZXJuIGludCBub19yZXN1bHRzOworCitpbnQgc29ydGVyKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOwordm9pZCB0YWxseV9yZXN1bHRzKGludCB0eXBlKTsKK3Vsb25nNjQgcmR0c2MgKHZvaWQpOworCit2b2lkIHRfc3RhcnQodm9pZCk7Cit1bG9uZzY0IHRfcmVhZCh2b2lkKTsKK3ZvaWQgaW5pdF90aW1lcih2b2lkKTsKKworLyogcmVnaXN0ZXIgZGVmYXVsdCBhbGdzICovCit2b2lkIHJlZ19hbGdzKHZvaWQpOworaW50IHRpbWVfa2V5c2NoZWQodm9pZCk7CitpbnQgdGltZV9jaXBoZXIodm9pZCk7CitpbnQgdGltZV9jaXBoZXIyKHZvaWQpOworaW50IHRpbWVfY2lwaGVyMyh2b2lkKTsKK2ludCB0aW1lX2hhc2godm9pZCk7Cit2b2lkIHRpbWVfbXVsdCh2b2lkKTsKK3ZvaWQgdGltZV9zcXIodm9pZCk7Cit2b2lkIHRpbWVfcHJuZyh2b2lkKTsKK3ZvaWQgdGltZV9yc2Eodm9pZCk7Cit2b2lkIHRpbWVfZHNhKHZvaWQpOwordm9pZCB0aW1lX2thdGphKHZvaWQpOwordm9pZCB0aW1lX2VjYyh2b2lkKTsKK3ZvaWQgdGltZV9tYWNzXyh1bnNpZ25lZCBsb25nIE1BQ19TSVpFKTsKK3ZvaWQgdGltZV9tYWNzKHZvaWQpOwordm9pZCB0aW1lX2VuY21hY3Modm9pZCk7CisKKworCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tY3J5cHQvdGVzdHByb2YvdG9tY3J5cHRfdGVzdC5oLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjE0ICQgKi8KKy8qICREYXRlOiAyMDA2LzEwLzE4IDAzOjM2OjM0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3g4Nl9wcm9mLmMgYi9saWJ0b21jcnlwdC90ZXN0cHJvZi94ODZfcHJvZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NjY3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21jcnlwdC90ZXN0cHJvZi94ODZfcHJvZi5jCkBAIC0wLDAgKzEsMTQzNiBAQAorI2luY2x1ZGUgPHRvbWNyeXB0X3Rlc3QuaD4KKworcHJuZ19zdGF0ZSB5YXJyb3dfcHJuZzsKKworc3RydWN0IGxpc3QgcmVzdWx0c1sxMDBdOworaW50IG5vX3Jlc3VsdHM7CitpbnQgc29ydGVyKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisgICBjb25zdCBzdHJ1Y3QgbGlzdCAqQSwgKkI7CisgICBBID0gYTsKKyAgIEIgPSBiOworICAgaWYgKEEtPmF2ZyA8IEItPmF2ZykgcmV0dXJuIC0xOworICAgaWYgKEEtPmF2ZyA+IEItPmF2ZykgcmV0dXJuIDE7CisgICByZXR1cm4gMDsKK30KKwordm9pZCB0YWxseV9yZXN1bHRzKGludCB0eXBlKQoreworICAgaW50IHg7CisKKyAgIC8qIHFzb3J0IHRoZSByZXN1bHRzICovCisgICBxc29ydChyZXN1bHRzLCBub19yZXN1bHRzLCBzaXplb2Yoc3RydWN0IGxpc3QpLCAmc29ydGVyKTsKKworICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgaWYgKHR5cGUgPT0gMCkgeworICAgICAgZm9yICh4ID0gMDsgeCA8IG5vX3Jlc3VsdHM7IHgrKykgeworICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlLTIwczogU2NoZWR1bGUgYXQgJTZsdVxuIiwgY2lwaGVyX2Rlc2NyaXB0b3JbcmVzdWx0c1t4XS5pZF0ubmFtZSwgKHVuc2lnbmVkIGxvbmcpcmVzdWx0c1t4XS5zcGQxKTsKKyAgICAgIH0gCisgICB9IGVsc2UgaWYgKHR5cGUgPT0gMSkgeworICAgICAgZm9yICh4ID0gMDsgeCA8IG5vX3Jlc3VsdHM7IHgrKykgeworICAgICAgICBwcmludGYKKyAgICAgICAgICAoIiUtMjBzWyUzZF06IEVuY3J5cHQgYXQgJTVsdSwgRGVjcnlwdCBhdCAlNWx1XG4iLCBjaXBoZXJfZGVzY3JpcHRvcltyZXN1bHRzW3hdLmlkXS5uYW1lLCBjaXBoZXJfZGVzY3JpcHRvcltyZXN1bHRzW3hdLmlkXS5JRCwgcmVzdWx0c1t4XS5zcGQxLCByZXN1bHRzW3hdLnNwZDIpOworICAgICAgfQorICAgfSBlbHNlIHsKKyAgICAgIGZvciAoeCA9IDA7IHggPCBub19yZXN1bHRzOyB4KyspIHsKKyAgICAgICAgcHJpbnRmCisgICAgICAgICAgKCIlLTIwczogUHJvY2VzcyBhdCAlNWx1XG4iLCBoYXNoX2Rlc2NyaXB0b3JbcmVzdWx0c1t4XS5pZF0ubmFtZSwgcmVzdWx0c1t4XS5zcGQxIC8gMTAwMCk7CisgICAgICB9CisgICB9Cit9CisKKy8qIFJEVFNDIGZyb20gU2NvdHQgRHVwbGljaGFuICovCit1bG9uZzY0IHJkdHNjICh2b2lkKQorICAgeworICAgI2lmIGRlZmluZWQgX19HTlVDX18gJiYgIWRlZmluZWQoTFRDX05PX0FTTSkKKyAgICAgICNpZmRlZiBJTlRFTF9DQworCQkJdWxvbmc2NCBhOworCQkJYXNtICggIiByZHRzYyAiOiI9QSIoYSkpOworICAgICAgICAgcmV0dXJuIGE7CisgICAgICAjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pCisgICAgICAgICB1bG9uZzY0IGE7CisgICAgICAgICBhc20gX192b2xhdGlsZV9fICgicmR0c2Ncbm1vdmwgJSVlYXgsKCUwKVxubW92bCAlJWVkeCw0KCUwKVxuIjo6InIiKCZhKToiJWVheCIsIiVlZHgiKTsKKyAgICAgICAgIHJldHVybiBhOworICAgICAgI2VsaWYgZGVmaW5lZChMVENfUFBDMzIpIHx8IGRlZmluZWQoVEZNX1BQQzMyKQorICAgICAgICAgdW5zaWduZWQgbG9uZyBhLCBiOworICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJtZnRidSAlMSBcbm1mdGIgJTBcbiI6Ij1yIihhKSwgIj1yIihiKSk7CisgICAgICAgICByZXR1cm4gKCgodWxvbmc2NCliKSA8PCAzMlVMTCkgfCAoKHVsb25nNjQpYSk7CisgICAgICAjZWxpZiBkZWZpbmVkKF9faWE2NF9fKSAgLyogZ2NjLUlBNjQgdmVyc2lvbiAqLworICAgICAgICAgdW5zaWduZWQgbG9uZyByZXN1bHQ7CisgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ICUwPWFyLml0YyIgOiAiPXIiKHJlc3VsdCkgOjogIm1lbW9yeSIpOworICAgICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QgKChpbnQpIHJlc3VsdCA9PSAtMSwgMCkpCisgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ICUwPWFyLml0YyIgOiAiPXIiKHJlc3VsdCkgOjogIm1lbW9yeSIpOworICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICNlbGlmIGRlZmluZWQoX19zcGFyY19fKQorICAgICAgICAgI2lmIGRlZmluZWQoX19hcmNoNjRfXykKKyAgICAgICAgICAgdWxvbmc2NCBhOworICAgICAgICAgICBhc20gdm9sYXRpbGUoInJkICUldGljaywlMCIgOiAiPXIiIChhKSk7CisgICAgICAgICAgIHJldHVybiBhOworICAgICAgICAgI2Vsc2UKKyAgICAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyB4LCB5OworICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJkICUldGljaywgJTA7IGNscnV3ICUwLCAlMTsgc3JseCAlMCwgMzIsICUwIiA6ICI9ciIgKHgpLCAiPXIiICh5KSA6ICIwIiAoeCksICIxIiAoeSkpOworICAgICAgICAgICByZXR1cm4gKCh1bnNpZ25lZCBsb25nIGxvbmcpIHggPDwgMzIpIHwgeTsgCisgICAgICAgICAjZW5kaWYKKyAgICAgICNlbHNlIAorICAgICAgICAgcmV0dXJuIFhDTE9DSygpOworICAgICAgI2VuZGlmCisKKyAgIC8qIE1pY3Jvc29mdCBhbmQgSW50ZWwgV2luZG93cyBjb21waWxlcnMgKi8KKyAgICNlbGlmIGRlZmluZWQgX01fSVg4NiAmJiAhZGVmaW5lZChMVENfTk9fQVNNKQorICAgICBfX2FzbSByZHRzYworICAgI2VsaWYgZGVmaW5lZCBfTV9BTUQ2NCAmJiAhZGVmaW5lZChMVENfTk9fQVNNKQorICAgICByZXR1cm4gX19yZHRzYyAoKTsKKyAgICNlbGlmIGRlZmluZWQgX01fSUE2NCAmJiAhZGVmaW5lZChMVENfTk9fQVNNKQorICAgICAjaWYgZGVmaW5lZCBfX0lOVEVMX0NPTVBJTEVSCisgICAgICAgI2luY2x1ZGUgPGlhNjRpbnRyaW4uaD4KKyAgICAgI2VuZGlmCisgICAgICByZXR1cm4gX19nZXRSZWcgKDMxMTYpOworICAgI2Vsc2UKKyAgICAgcmV0dXJuIFhDTE9DSygpOworICAgI2VuZGlmCisgICB9CisKK3N0YXRpYyB1bG9uZzY0IHRpbWVyLCBza2V3ID0gMDsKKwordm9pZCB0X3N0YXJ0KHZvaWQpCit7CisgICB0aW1lciA9IHJkdHNjKCk7Cit9CisKK3Vsb25nNjQgdF9yZWFkKHZvaWQpCit7CisgICByZXR1cm4gcmR0c2MoKSAtIHRpbWVyOworfQorCit2b2lkIGluaXRfdGltZXIodm9pZCkKK3sKKyAgIHVsb25nNjQgYzEsIGMyLCB0MSwgdDIsIHQzOworICAgdW5zaWduZWQgbG9uZyB5MTsKKworICAgYzEgPSBjMiA9ICh1bG9uZzY0KS0xOworICAgZm9yICh5MSA9IDA7IHkxIDwgVElNRVMqMTAwOyB5MSsrKSB7CisgICAgICB0X3N0YXJ0KCk7CisgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgdDMgPSB0X3JlYWQoKTsKKyAgICAgIHQyID0gKHRfcmVhZCgpIC0gdDEpPj4xOworCisgICAgICBjMSA9ICh0MSA+IGMxKSA/IHQxIDogYzE7CisgICAgICBjMiA9ICh0MiA+IGMyKSA/IHQyIDogYzI7CisgICB9CisgICBza2V3ID0gYzIgLSBjMTsKKyAgIGZwcmludGYoc3RkZXJyLCAiQ2xvY2sgU2tldzogJWx1XG4iLCAodW5zaWduZWQgbG9uZylza2V3KTsKK30KKwordm9pZCByZWdfYWxncyh2b2lkKQoreworICBpbnQgZXJyOworI2lmZGVmIFJJSk5EQUVMCisgIHJlZ2lzdGVyX2NpcGhlciAoJmFlc19kZXNjKTsKKyNlbmRpZgorI2lmZGVmIEJMT1dGSVNICisgIHJlZ2lzdGVyX2NpcGhlciAoJmJsb3dmaXNoX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgWFRFQQorICByZWdpc3Rlcl9jaXBoZXIgKCZ4dGVhX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgUkM1CisgIHJlZ2lzdGVyX2NpcGhlciAoJnJjNV9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFJDNgorICByZWdpc3Rlcl9jaXBoZXIgKCZyYzZfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBTQUZFUlAKKyAgcmVnaXN0ZXJfY2lwaGVyICgmc2FmZXJwX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgVFdPRklTSAorICByZWdpc3Rlcl9jaXBoZXIgKCZ0d29maXNoX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgU0FGRVIKKyAgcmVnaXN0ZXJfY2lwaGVyICgmc2FmZXJfazY0X2Rlc2MpOworICByZWdpc3Rlcl9jaXBoZXIgKCZzYWZlcl9zazY0X2Rlc2MpOworICByZWdpc3Rlcl9jaXBoZXIgKCZzYWZlcl9rMTI4X2Rlc2MpOworICByZWdpc3Rlcl9jaXBoZXIgKCZzYWZlcl9zazEyOF9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFJDMgorICByZWdpc3Rlcl9jaXBoZXIgKCZyYzJfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBERVMKKyAgcmVnaXN0ZXJfY2lwaGVyICgmZGVzX2Rlc2MpOworICByZWdpc3Rlcl9jaXBoZXIgKCZkZXMzX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgQ0FTVDUKKyAgcmVnaXN0ZXJfY2lwaGVyICgmY2FzdDVfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBOT0VLRU9OCisgIHJlZ2lzdGVyX2NpcGhlciAoJm5vZWtlb25fZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBTS0lQSkFDSworICByZWdpc3Rlcl9jaXBoZXIgKCZza2lwamFja19kZXNjKTsKKyNlbmRpZgorI2lmZGVmIEtIQVpBRAorICByZWdpc3Rlcl9jaXBoZXIgKCZraGF6YWRfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBBTlVCSVMKKyAgcmVnaXN0ZXJfY2lwaGVyICgmYW51YmlzX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgS1NFRUQKKyAgcmVnaXN0ZXJfY2lwaGVyICgma3NlZWRfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBMVENfS0FTVU1JCisgIHJlZ2lzdGVyX2NpcGhlciAoJmthc3VtaV9kZXNjKTsKKyNlbmRpZgorCisjaWZkZWYgVElHRVIKKyAgcmVnaXN0ZXJfaGFzaCAoJnRpZ2VyX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgTUQyCisgIHJlZ2lzdGVyX2hhc2ggKCZtZDJfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBNRDQKKyAgcmVnaXN0ZXJfaGFzaCAoJm1kNF9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIE1ENQorICByZWdpc3Rlcl9oYXNoICgmbWQ1X2Rlc2MpOworI2VuZGlmCisjaWZkZWYgU0hBMQorICByZWdpc3Rlcl9oYXNoICgmc2hhMV9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFNIQTIyNAorICByZWdpc3Rlcl9oYXNoICgmc2hhMjI0X2Rlc2MpOworI2VuZGlmCisjaWZkZWYgU0hBMjU2CisgIHJlZ2lzdGVyX2hhc2ggKCZzaGEyNTZfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBTSEEzODQKKyAgcmVnaXN0ZXJfaGFzaCAoJnNoYTM4NF9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFNIQTUxMgorICByZWdpc3Rlcl9oYXNoICgmc2hhNTEyX2Rlc2MpOworI2VuZGlmCisjaWZkZWYgUklQRU1EMTI4CisgIHJlZ2lzdGVyX2hhc2ggKCZybWQxMjhfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBSSVBFTUQxNjAKKyAgcmVnaXN0ZXJfaGFzaCAoJnJtZDE2MF9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFJJUEVNRDI1NgorICByZWdpc3Rlcl9oYXNoICgmcm1kMjU2X2Rlc2MpOworI2VuZGlmCisjaWZkZWYgUklQRU1EMzIwCisgIHJlZ2lzdGVyX2hhc2ggKCZybWQzMjBfZGVzYyk7CisjZW5kaWYKKyNpZmRlZiBXSElSTFBPT0wKKyAgcmVnaXN0ZXJfaGFzaCAoJndoaXJscG9vbF9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIENIQ19IQVNICisgIHJlZ2lzdGVyX2hhc2goJmNoY19kZXNjKTsKKyAgaWYgKChlcnIgPSBjaGNfcmVnaXN0ZXIocmVnaXN0ZXJfY2lwaGVyKCZhZXNfZGVzYykpKSAhPSBDUllQVF9PSykgeworICAgICBmcHJpbnRmKHN0ZGVyciwgImNoY19yZWdpc3RlciBlcnJvcjogJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICB9CisjZW5kaWYKKworCisjaWZuZGVmIFlBUlJPVyAKKyAgICNlcnJvciBUaGlzIGRlbW8gcmVxdWlyZXMgWWFycm93LgorI2VuZGlmCityZWdpc3Rlcl9wcm5nKCZ5YXJyb3dfZGVzYyk7CisjaWZkZWYgRk9SVFVOQQorcmVnaXN0ZXJfcHJuZygmZm9ydHVuYV9kZXNjKTsKKyNlbmRpZgorI2lmZGVmIFJDNAorcmVnaXN0ZXJfcHJuZygmcmM0X2Rlc2MpOworI2VuZGlmCisjaWZkZWYgU09CRVIxMjgKK3JlZ2lzdGVyX3BybmcoJnNvYmVyMTI4X2Rlc2MpOworI2VuZGlmCisKKyAgIGlmICgoZXJyID0gcm5nX21ha2VfcHJuZygxMjgsIGZpbmRfcHJuZygieWFycm93IiksICZ5YXJyb3dfcHJuZywgTlVMTCkpICE9IENSWVBUX09LKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgInJuZ19tYWtlX3BybmcgZmFpbGVkOiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgfQorICAgCit9CisKK2ludCB0aW1lX2tleXNjaGVkKHZvaWQpCit7CisgIHVuc2lnbmVkIGxvbmcgeCwgeTE7CisgIHVsb25nNjQgdDEsIGMxOworICBzeW1tZXRyaWNfa2V5IHNrZXk7CisgIGludCBrbDsKKyAgaW50ICAgICgqZnVuYykgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgaW50ICwgaW50ICwgc3ltbWV0cmljX2tleSAqKTsKKyAgdW5zaWduZWQgY2hhciBrZXlbTUFYQkxPQ0tTSVpFXTsKKworICBmcHJpbnRmKHN0ZGVyciwgIlxuXG5LZXkgU2NoZWR1bGUgVGltZSBUcmlhbHMgZm9yIHRoZSBTeW1tZXRyaWMgQ2lwaGVyczpcbihUaW1lcyBhcmUgY3ljbGVzIHBlciBrZXkpXG4iKTsKKyAgbm9fcmVzdWx0cyA9IDA7IAorIGZvciAoeCA9IDA7IGNpcGhlcl9kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTDsgeCsrKSB7CisjZGVmaW5lIERPMShrKSAgIGZ1bmMoaywga2wsIDAsICZza2V5KTsKKworICAgIGZ1bmMgPSBjaXBoZXJfZGVzY3JpcHRvclt4XS5zZXR1cDsKKyAgICBrbCAgID0gY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubWluX2tleV9sZW5ndGg7CisgICAgYzEgPSAodWxvbmc2NCktMTsKKyAgICBmb3IgKHkxID0gMDsgeTEgPCBLVElNRVM7IHkxKyspIHsKKyAgICAgICB5YXJyb3dfcmVhZChrZXksIGtsLCAmeWFycm93X3BybmcpOworICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICBETzEoa2V5KTsKKyAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgIGMxID0gKHQxID4gYzEpID8gYzEgOiB0MTsKKyAgICB9CisgICAgdDEgPSBjMSAtIHNrZXc7CisgICAgcmVzdWx0c1tub19yZXN1bHRzXS5zcGQxID0gcmVzdWx0c1tub19yZXN1bHRzXS5hdmcgPSB0MTsKKyAgICByZXN1bHRzW25vX3Jlc3VsdHMrK10uaWQgPSB4OworICAgIGZwcmludGYoc3RkZXJyLCAiLiIpOyBmZmx1c2goc3Rkb3V0KTsKKworI3VuZGVmIERPMQorICAgfQorICAgdGFsbHlfcmVzdWx0cygwKTsKKworICAgcmV0dXJuIDA7Cit9CisKK2ludCB0aW1lX2NpcGhlcih2b2lkKQoreworICB1bnNpZ25lZCBsb25nIHgsIHkxOworICB1bG9uZzY0ICB0MSwgdDIsIGMxLCBjMiwgYTEsIGEyOworICBzeW1tZXRyaWNfRUNCIGVjYjsKKyAgdW5zaWduZWQgY2hhciBrZXlbTUFYQkxPQ0tTSVpFXSwgcHRbNDA5Nl07CisgIGludCBlcnI7CisKKyAgZnByaW50ZihzdGRlcnIsICJcblxuRUNCIFRpbWUgVHJpYWxzIGZvciB0aGUgU3ltbWV0cmljIENpcGhlcnM6XG4iKTsKKyAgbm9fcmVzdWx0cyA9IDA7CisgIGZvciAoeCA9IDA7IGNpcGhlcl9kZXNjcmlwdG9yW3hdLm5hbWUgIT0gTlVMTDsgeCsrKSB7CisgICAgZWNiX3N0YXJ0KHgsIGtleSwgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubWluX2tleV9sZW5ndGgsIDAsICZlY2IpOworCisgICAgLyogc2FuaXR5IGNoZWNrIG9uIGNpcGhlciAqLworICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbeF0udGVzdCgpKSAhPSBDUllQVF9PSykgeworICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbkVSUk9SOiBDaXBoZXIgJXMgZmFpbGVkIHNlbGYtdGVzdCAlc1xuIiwgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyNkZWZpbmUgRE8xICAgZWNiX2VuY3J5cHQocHQsIHB0LCBzaXplb2YocHQpLCAmZWNiKTsKKyNkZWZpbmUgRE8yICAgRE8xIERPMQorCisgICAgYzEgPSBjMiA9ICh1bG9uZzY0KS0xOworICAgIGZvciAoeTEgPSAwOyB5MSA8IDEwMDsgeTErKykgeworICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgIERPMTsKKyAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgRE8yOworICAgICAgICB0MiA9IHRfcmVhZCgpOworICAgICAgICB0MiAtPSB0MTsKKworICAgICAgICBjMSA9ICh0MSA+IGMxID8gYzEgOiB0MSk7CisgICAgICAgIGMyID0gKHQyID4gYzIgPyBjMiA6IHQyKTsKKyAgICB9CisgICAgYTEgPSBjMiAtIGMxIC0gc2tldzsKKworI3VuZGVmIERPMQorI3VuZGVmIERPMgorI2RlZmluZSBETzEgICBlY2JfZGVjcnlwdChwdCwgcHQsIHNpemVvZihwdCksICZlY2IpOworI2RlZmluZSBETzIgICBETzEgRE8xCisKKyAgICBjMSA9IGMyID0gKHVsb25nNjQpLTE7CisgICAgZm9yICh5MSA9IDA7IHkxIDwgMTAwOyB5MSsrKSB7CisgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgRE8xOworICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICBETzI7CisgICAgICAgIHQyID0gdF9yZWFkKCk7CisgICAgICAgIHQyIC09IHQxOworCisgICAgICAgIGMxID0gKHQxID4gYzEgPyBjMSA6IHQxKTsKKyAgICAgICAgYzIgPSAodDIgPiBjMiA/IGMyIDogdDIpOworICAgIH0KKyAgICBhMiA9IGMyIC0gYzEgLSBza2V3OworICAgIGVjYl9kb25lKCZlY2IpOworICAgIAorICAgIHJlc3VsdHNbbm9fcmVzdWx0c10uaWQgPSB4OworICAgIHJlc3VsdHNbbm9fcmVzdWx0c10uc3BkMSA9IGExLyhzaXplb2YocHQpL2NpcGhlcl9kZXNjcmlwdG9yW3hdLmJsb2NrX2xlbmd0aCk7CisgICAgcmVzdWx0c1tub19yZXN1bHRzXS5zcGQyID0gYTIvKHNpemVvZihwdCkvY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoKTsKKyAgICByZXN1bHRzW25vX3Jlc3VsdHNdLmF2ZyA9IChyZXN1bHRzW25vX3Jlc3VsdHNdLnNwZDEgKyByZXN1bHRzW25vX3Jlc3VsdHNdLnNwZDIrMSkvMjsKKyAgICArK25vX3Jlc3VsdHM7CisgICAgZnByaW50ZihzdGRlcnIsICIuIik7IGZmbHVzaChzdGRvdXQpOworICAgIAorI3VuZGVmIERPMgorI3VuZGVmIERPMQorICAgfQorICAgdGFsbHlfcmVzdWx0cygxKTsKKworICAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBMVENfQ0JDX01PREUgCitpbnQgdGltZV9jaXBoZXIyKHZvaWQpCit7CisgIHVuc2lnbmVkIGxvbmcgeCwgeTE7CisgIHVsb25nNjQgIHQxLCB0MiwgYzEsIGMyLCBhMSwgYTI7CisgIHN5bW1ldHJpY19DQkMgY2JjOworICB1bnNpZ25lZCBjaGFyIGtleVtNQVhCTE9DS1NJWkVdLCBwdFs0MDk2XTsKKyAgaW50IGVycjsKKworICBmcHJpbnRmKHN0ZGVyciwgIlxuXG5DQkMgVGltZSBUcmlhbHMgZm9yIHRoZSBTeW1tZXRyaWMgQ2lwaGVyczpcbiIpOworICBub19yZXN1bHRzID0gMDsKKyAgZm9yICh4ID0gMDsgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMOyB4KyspIHsKKyAgICBjYmNfc3RhcnQoeCwgcHQsIGtleSwgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubWluX2tleV9sZW5ndGgsIDAsICZjYmMpOworCisgICAgLyogc2FuaXR5IGNoZWNrIG9uIGNpcGhlciAqLworICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbeF0udGVzdCgpKSAhPSBDUllQVF9PSykgeworICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbkVSUk9SOiBDaXBoZXIgJXMgZmFpbGVkIHNlbGYtdGVzdCAlc1xuIiwgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyNkZWZpbmUgRE8xICAgY2JjX2VuY3J5cHQocHQsIHB0LCBzaXplb2YocHQpLCAmY2JjKTsKKyNkZWZpbmUgRE8yICAgRE8xIERPMQorCisgICAgYzEgPSBjMiA9ICh1bG9uZzY0KS0xOworICAgIGZvciAoeTEgPSAwOyB5MSA8IDEwMDsgeTErKykgeworICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgIERPMTsKKyAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgRE8yOworICAgICAgICB0MiA9IHRfcmVhZCgpOworICAgICAgICB0MiAtPSB0MTsKKworICAgICAgICBjMSA9ICh0MSA+IGMxID8gYzEgOiB0MSk7CisgICAgICAgIGMyID0gKHQyID4gYzIgPyBjMiA6IHQyKTsKKyAgICB9CisgICAgYTEgPSBjMiAtIGMxIC0gc2tldzsKKworI3VuZGVmIERPMQorI3VuZGVmIERPMgorI2RlZmluZSBETzEgICBjYmNfZGVjcnlwdChwdCwgcHQsIHNpemVvZihwdCksICZjYmMpOworI2RlZmluZSBETzIgICBETzEgRE8xCisKKyAgICBjMSA9IGMyID0gKHVsb25nNjQpLTE7CisgICAgZm9yICh5MSA9IDA7IHkxIDwgMTAwOyB5MSsrKSB7CisgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgRE8xOworICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICBETzI7CisgICAgICAgIHQyID0gdF9yZWFkKCk7CisgICAgICAgIHQyIC09IHQxOworCisgICAgICAgIGMxID0gKHQxID4gYzEgPyBjMSA6IHQxKTsKKyAgICAgICAgYzIgPSAodDIgPiBjMiA/IGMyIDogdDIpOworICAgIH0KKyAgICBhMiA9IGMyIC0gYzEgLSBza2V3OworICAgIGNiY19kb25lKCZjYmMpOworICAgIAorICAgIHJlc3VsdHNbbm9fcmVzdWx0c10uaWQgPSB4OworICAgIHJlc3VsdHNbbm9fcmVzdWx0c10uc3BkMSA9IGExLyhzaXplb2YocHQpL2NpcGhlcl9kZXNjcmlwdG9yW3hdLmJsb2NrX2xlbmd0aCk7CisgICAgcmVzdWx0c1tub19yZXN1bHRzXS5zcGQyID0gYTIvKHNpemVvZihwdCkvY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoKTsKKyAgICByZXN1bHRzW25vX3Jlc3VsdHNdLmF2ZyA9IChyZXN1bHRzW25vX3Jlc3VsdHNdLnNwZDEgKyByZXN1bHRzW25vX3Jlc3VsdHNdLnNwZDIrMSkvMjsKKyAgICArK25vX3Jlc3VsdHM7CisgICAgZnByaW50ZihzdGRlcnIsICIuIik7IGZmbHVzaChzdGRvdXQpOworICAgIAorI3VuZGVmIERPMgorI3VuZGVmIERPMQorICAgfQorICAgdGFsbHlfcmVzdWx0cygxKTsKKworICAgcmV0dXJuIDA7Cit9CisjZWxzZQoraW50IHRpbWVfY2lwaGVyMih2b2lkKSB7IGZwcmludGYoc3RkZXJyLCAiTk8gQ0JDXG4iKTsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisjaWZkZWYgTFRDX0NUUl9NT0RFCitpbnQgdGltZV9jaXBoZXIzKHZvaWQpCit7CisgIHVuc2lnbmVkIGxvbmcgeCwgeTE7CisgIHVsb25nNjQgIHQxLCB0MiwgYzEsIGMyLCBhMSwgYTI7CisgIHN5bW1ldHJpY19DVFIgY3RyOworICB1bnNpZ25lZCBjaGFyIGtleVtNQVhCTE9DS1NJWkVdLCBwdFs0MDk2XTsKKyAgaW50IGVycjsKKworICBmcHJpbnRmKHN0ZGVyciwgIlxuXG5DVFIgVGltZSBUcmlhbHMgZm9yIHRoZSBTeW1tZXRyaWMgQ2lwaGVyczpcbiIpOworICBub19yZXN1bHRzID0gMDsKKyAgZm9yICh4ID0gMDsgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMOyB4KyspIHsKKyAgICBjdHJfc3RhcnQoeCwgcHQsIGtleSwgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubWluX2tleV9sZW5ndGgsIDAsIENUUl9DT1VOVEVSX0xJVFRMRV9FTkRJQU4sICZjdHIpOworCisgICAgLyogc2FuaXR5IGNoZWNrIG9uIGNpcGhlciAqLworICAgIGlmICgoZXJyID0gY2lwaGVyX2Rlc2NyaXB0b3JbeF0udGVzdCgpKSAhPSBDUllQVF9PSykgeworICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbkVSUk9SOiBDaXBoZXIgJXMgZmFpbGVkIHNlbGYtdGVzdCAlc1xuIiwgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyNkZWZpbmUgRE8xICAgY3RyX2VuY3J5cHQocHQsIHB0LCBzaXplb2YocHQpLCAmY3RyKTsKKyNkZWZpbmUgRE8yICAgRE8xIERPMQorCisgICAgYzEgPSBjMiA9ICh1bG9uZzY0KS0xOworICAgIGZvciAoeTEgPSAwOyB5MSA8IDEwMDsgeTErKykgeworICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgIERPMTsKKyAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgRE8yOworICAgICAgICB0MiA9IHRfcmVhZCgpOworICAgICAgICB0MiAtPSB0MTsKKworICAgICAgICBjMSA9ICh0MSA+IGMxID8gYzEgOiB0MSk7CisgICAgICAgIGMyID0gKHQyID4gYzIgPyBjMiA6IHQyKTsKKyAgICB9CisgICAgYTEgPSBjMiAtIGMxIC0gc2tldzsKKworI3VuZGVmIERPMQorI3VuZGVmIERPMgorI2RlZmluZSBETzEgICBjdHJfZGVjcnlwdChwdCwgcHQsIHNpemVvZihwdCksICZjdHIpOworI2RlZmluZSBETzIgICBETzEgRE8xCisKKyAgICBjMSA9IGMyID0gKHVsb25nNjQpLTE7CisgICAgZm9yICh5MSA9IDA7IHkxIDwgMTAwOyB5MSsrKSB7CisgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgRE8xOworICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICBETzI7CisgICAgICAgIHQyID0gdF9yZWFkKCk7CisgICAgICAgIHQyIC09IHQxOworCisgICAgICAgIGMxID0gKHQxID4gYzEgPyBjMSA6IHQxKTsKKyAgICAgICAgYzIgPSAodDIgPiBjMiA/IGMyIDogdDIpOworICAgIH0KKyAgICBhMiA9IGMyIC0gYzEgLSBza2V3OworICAgIGN0cl9kb25lKCZjdHIpOworICAgIAorICAgIHJlc3VsdHNbbm9fcmVzdWx0c10uaWQgPSB4OworICAgIHJlc3VsdHNbbm9fcmVzdWx0c10uc3BkMSA9IGExLyhzaXplb2YocHQpL2NpcGhlcl9kZXNjcmlwdG9yW3hdLmJsb2NrX2xlbmd0aCk7CisgICAgcmVzdWx0c1tub19yZXN1bHRzXS5zcGQyID0gYTIvKHNpemVvZihwdCkvY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoKTsKKyAgICByZXN1bHRzW25vX3Jlc3VsdHNdLmF2ZyA9IChyZXN1bHRzW25vX3Jlc3VsdHNdLnNwZDEgKyByZXN1bHRzW25vX3Jlc3VsdHNdLnNwZDIrMSkvMjsKKyAgICArK25vX3Jlc3VsdHM7CisgICAgZnByaW50ZihzdGRlcnIsICIuIik7IGZmbHVzaChzdGRvdXQpOworICAgIAorI3VuZGVmIERPMgorI3VuZGVmIERPMQorICAgfQorICAgdGFsbHlfcmVzdWx0cygxKTsKKworICAgcmV0dXJuIDA7Cit9CisjZWxzZQoraW50IHRpbWVfY2lwaGVyMyh2b2lkKSB7IGZwcmludGYoc3RkZXJyLCAiTk8gQ1RSXG4iKTsgcmV0dXJuIDA7IH0KKyNlbmRpZgorCisjaWZkZWYgTFRDX0xSV19NT0RFCitpbnQgdGltZV9jaXBoZXI0KHZvaWQpCit7CisgIHVuc2lnbmVkIGxvbmcgeCwgeTE7CisgIHVsb25nNjQgIHQxLCB0MiwgYzEsIGMyLCBhMSwgYTI7CisgIHN5bW1ldHJpY19MUlcgbHJ3OworICB1bnNpZ25lZCBjaGFyIGtleVtNQVhCTE9DS1NJWkVdLCBwdFs0MDk2XTsKKyAgaW50IGVycjsKKworICBmcHJpbnRmKHN0ZGVyciwgIlxuXG5MUlcgVGltZSBUcmlhbHMgZm9yIHRoZSBTeW1tZXRyaWMgQ2lwaGVyczpcbiIpOworICBub19yZXN1bHRzID0gMDsKKyAgZm9yICh4ID0gMDsgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMOyB4KyspIHsKKyAgICBpZiAoY2lwaGVyX2Rlc2NyaXB0b3JbeF0uYmxvY2tfbGVuZ3RoICE9IDE2KSBjb250aW51ZTsKKyAgICBscndfc3RhcnQoeCwgcHQsIGtleSwgY2lwaGVyX2Rlc2NyaXB0b3JbeF0ubWluX2tleV9sZW5ndGgsIGtleSwgMCwgJmxydyk7CisKKyAgICAvKiBzYW5pdHkgY2hlY2sgb24gY2lwaGVyICovCisgICAgaWYgKChlcnIgPSBjaXBoZXJfZGVzY3JpcHRvclt4XS50ZXN0KCkpICE9IENSWVBUX09LKSB7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxuRVJST1I6IENpcGhlciAlcyBmYWlsZWQgc2VsZi10ZXN0ICVzXG4iLCBjaXBoZXJfZGVzY3JpcHRvclt4XS5uYW1lLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworI2RlZmluZSBETzEgICBscndfZW5jcnlwdChwdCwgcHQsIHNpemVvZihwdCksICZscncpOworI2RlZmluZSBETzIgICBETzEgRE8xCisKKyAgICBjMSA9IGMyID0gKHVsb25nNjQpLTE7CisgICAgZm9yICh5MSA9IDA7IHkxIDwgMTAwOyB5MSsrKSB7CisgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgRE8xOworICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICBETzI7CisgICAgICAgIHQyID0gdF9yZWFkKCk7CisgICAgICAgIHQyIC09IHQxOworCisgICAgICAgIGMxID0gKHQxID4gYzEgPyBjMSA6IHQxKTsKKyAgICAgICAgYzIgPSAodDIgPiBjMiA/IGMyIDogdDIpOworICAgIH0KKyAgICBhMSA9IGMyIC0gYzEgLSBza2V3OworCisjdW5kZWYgRE8xCisjdW5kZWYgRE8yCisjZGVmaW5lIERPMSAgIGxyd19kZWNyeXB0KHB0LCBwdCwgc2l6ZW9mKHB0KSwgJmxydyk7CisjZGVmaW5lIERPMiAgIERPMSBETzEKKworICAgIGMxID0gYzIgPSAodWxvbmc2NCktMTsKKyAgICBmb3IgKHkxID0gMDsgeTEgPCAxMDA7IHkxKyspIHsKKyAgICAgICAgdF9zdGFydCgpOworICAgICAgICBETzE7CisgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgIERPMjsKKyAgICAgICAgdDIgPSB0X3JlYWQoKTsKKyAgICAgICAgdDIgLT0gdDE7CisKKyAgICAgICAgYzEgPSAodDEgPiBjMSA/IGMxIDogdDEpOworICAgICAgICBjMiA9ICh0MiA+IGMyID8gYzIgOiB0Mik7CisgICAgfQorICAgIGEyID0gYzIgLSBjMSAtIHNrZXc7CisKKyAgICBscndfZG9uZSgmbHJ3KTsKKyAgICAKKyAgICByZXN1bHRzW25vX3Jlc3VsdHNdLmlkID0geDsKKyAgICByZXN1bHRzW25vX3Jlc3VsdHNdLnNwZDEgPSBhMS8oc2l6ZW9mKHB0KS9jaXBoZXJfZGVzY3JpcHRvclt4XS5ibG9ja19sZW5ndGgpOworICAgIHJlc3VsdHNbbm9fcmVzdWx0c10uc3BkMiA9IGEyLyhzaXplb2YocHQpL2NpcGhlcl9kZXNjcmlwdG9yW3hdLmJsb2NrX2xlbmd0aCk7CisgICAgcmVzdWx0c1tub19yZXN1bHRzXS5hdmcgPSAocmVzdWx0c1tub19yZXN1bHRzXS5zcGQxICsgcmVzdWx0c1tub19yZXN1bHRzXS5zcGQyKzEpLzI7CisgICAgKytub19yZXN1bHRzOworICAgIGZwcmludGYoc3RkZXJyLCAiLiIpOyBmZmx1c2goc3Rkb3V0KTsKKyAgICAKKyN1bmRlZiBETzIKKyN1bmRlZiBETzEKKyAgIH0KKyAgIHRhbGx5X3Jlc3VsdHMoMSk7CisKKyAgIHJldHVybiAwOworfQorI2Vsc2UKK2ludCB0aW1lX2NpcGhlcjQodm9pZCkgeyBmcHJpbnRmKHN0ZGVyciwgIk5PIExSV1xuIik7IHJldHVybiAwOyB9CisjZW5kaWYKKworCitpbnQgdGltZV9oYXNoKHZvaWQpCit7CisgIHVuc2lnbmVkIGxvbmcgeCwgeTEsIGxlbjsKKyAgdWxvbmc2NCB0MSwgdDIsIGMxLCBjMjsKKyAgaGFzaF9zdGF0ZSBtZDsKKyAgaW50ICAgICgqZnVuYykoaGFzaF9zdGF0ZSAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGxvbmcpLCBlcnI7CisgIHVuc2lnbmVkIGNoYXIgcHRbTUFYQkxPQ0tTSVpFXTsKKworCisgIGZwcmludGYoc3RkZXJyLCAiXG5cbkhBU0ggVGltZSBUcmlhbHMgZm9yOlxuIik7CisgIG5vX3Jlc3VsdHMgPSAwOworICBmb3IgKHggPSAwOyBoYXNoX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMOyB4KyspIHsKKworICAgIC8qIHNhbml0eSBjaGVjayBvbiBoYXNoICovCisgICAgaWYgKChlcnIgPSBoYXNoX2Rlc2NyaXB0b3JbeF0udGVzdCgpKSAhPSBDUllQVF9PSykgeworICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbkVSUk9SOiBIYXNoICVzIGZhaWxlZCBzZWxmLXRlc3QgJXNcbiIsIGhhc2hfZGVzY3JpcHRvclt4XS5uYW1lLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIGhhc2hfZGVzY3JpcHRvclt4XS5pbml0KCZtZCk7CisKKyNkZWZpbmUgRE8xICAgZnVuYygmbWQscHQsbGVuKTsKKyNkZWZpbmUgRE8yICAgRE8xIERPMQorCisgICAgZnVuYyA9IGhhc2hfZGVzY3JpcHRvclt4XS5wcm9jZXNzOworICAgIGxlbiAgPSBoYXNoX2Rlc2NyaXB0b3JbeF0uYmxvY2tzaXplOworCisgICAgYzEgPSBjMiA9ICh1bG9uZzY0KS0xOworICAgIGZvciAoeTEgPSAwOyB5MSA8IFRJTUVTOyB5MSsrKSB7CisgICAgICAgdF9zdGFydCgpOworICAgICAgIERPMTsKKyAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgIERPMjsKKyAgICAgICB0MiA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgYzEgPSAodDEgPiBjMSkgPyBjMSA6IHQxOworICAgICAgIGMyID0gKHQyID4gYzIpID8gYzIgOiB0MjsKKyAgICB9CisgICAgdDEgPSBjMiAtIGMxIC0gc2tldzsKKyAgICB0MSA9ICgodDEgKiBDT05TVDY0KDEwMDApKSkgLyAoKHVsb25nNjQpaGFzaF9kZXNjcmlwdG9yW3hdLmJsb2Nrc2l6ZSk7CisgICAgcmVzdWx0c1tub19yZXN1bHRzXS5pZCA9IHg7CisgICAgcmVzdWx0c1tub19yZXN1bHRzXS5zcGQxID0gcmVzdWx0c1tub19yZXN1bHRzXS5hdmcgPSB0MTsKKyAgICArK25vX3Jlc3VsdHM7CisgICAgZnByaW50ZihzdGRlcnIsICIuIik7IGZmbHVzaChzdGRvdXQpOworI3VuZGVmIERPMgorI3VuZGVmIERPMQorICAgfQorICAgdGFsbHlfcmVzdWx0cygyKTsKKworICAgcmV0dXJuIDA7Cit9CisKKyN1bmRlZiBNUEkKKy8qI3dhcm5pbmcgeW91IG5lZWQgYW4gbXBfcmFuZCEhISovCisKKyNpZmRlZiBNUEkKK3ZvaWQgdGltZV9tdWx0KHZvaWQpCit7CisgICB1bG9uZzY0IHQxLCB0MjsKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeTsKKyAgIHZvaWQgICphLCAqYiwgKmM7CisKKyAgIGZwcmludGYoc3RkZXJyLCAiVGltaW5nIE11bHRpcGx5aW5nOlxuIik7CisgICBtcF9pbml0X211bHRpKCZhLCZiLCZjLE5VTEwpOworICAgZm9yICh4ID0gMTI4L0RJR0lUX0JJVDsgeCA8PSAxNTM2L0RJR0lUX0JJVDsgeCArPSAxMjgvRElHSVRfQklUKSB7CisgICAgICAgbXBfcmFuZCgmYSwgeCk7CisgICAgICAgbXBfcmFuZCgmYiwgeCk7CisKKyNkZWZpbmUgRE8xIG1wX211bCgmYSwgJmIsICZjKTsKKyNkZWZpbmUgRE8yIERPMTsgRE8xOworCisgICAgICAgdDIgPSAtMTsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgVElNRVM7IHkrKykgeworICAgICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgICAgIERPMjsKKyAgICAgICAgICAgdDEgPSAodF9yZWFkKCkgLSB0MSk+PjE7CisgICAgICAgICAgIGlmICh0MSA8IHQyKSB0MiA9IHQxOworICAgICAgIH0KKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiU0bHUgYml0czogJTlsbHUgY3ljbGVzXG4iLCB4KkRJR0lUX0JJVCwgdDIpOworICAgfQorICAgbXBfY2xlYXJfbXVsdGkoJmEsJmIsJmMsTlVMTCk7CisKKyN1bmRlZiBETzEKKyN1bmRlZiBETzIKK30gCisKK3ZvaWQgdGltZV9zcXIodm9pZCkKK3sKKyAgIHVsb25nNjQgdDEsIHQyOworICAgdW5zaWduZWQgbG9uZyB4LCB5OworICAgbXBfaW50ICBhLCBiOworCisgICBmcHJpbnRmKHN0ZGVyciwgIlRpbWluZyBTcXVhcmluZzpcbiIpOworICAgbXBfaW5pdF9tdWx0aSgmYSwmYixOVUxMKTsKKyAgIGZvciAoeCA9IDEyOC9ESUdJVF9CSVQ7IHggPD0gMTUzNi9ESUdJVF9CSVQ7IHggKz0gMTI4L0RJR0lUX0JJVCkgeworICAgICAgIG1wX3JhbmQoJmEsIHgpOworCisjZGVmaW5lIERPMSBtcF9zcXIoJmEsICZiKTsKKyNkZWZpbmUgRE8yIERPMTsgRE8xOworCisgICAgICAgdDIgPSAtMTsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgVElNRVM7IHkrKykgeworICAgICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgICAgIERPMjsKKyAgICAgICAgICAgdDEgPSAodF9yZWFkKCkgLSB0MSk+PjE7CisgICAgICAgICAgIGlmICh0MSA8IHQyKSB0MiA9IHQxOworICAgICAgIH0KKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiU0bHUgYml0czogJTlsbHUgY3ljbGVzXG4iLCB4KkRJR0lUX0JJVCwgdDIpOworICAgfQorICAgbXBfY2xlYXJfbXVsdGkoJmEsJmIsTlVMTCk7CisKKyN1bmRlZiBETzEKKyN1bmRlZiBETzIKK30KKyNlbHNlCit2b2lkIHRpbWVfbXVsdCh2b2lkKSB7IGZwcmludGYoc3RkZXJyLCAiTk8gTVVMVFxuIik7IH0KK3ZvaWQgdGltZV9zcXIodm9pZCkgeyBmcHJpbnRmKHN0ZGVyciwgIk5PIFNRUlxuIik7IH0KKyNlbmRpZgorICAgCit2b2lkIHRpbWVfcHJuZyh2b2lkKQoreworICAgdWxvbmc2NCB0MSwgdDI7CisgICB1bnNpZ25lZCBjaGFyIGJ1Zls0MDk2XTsKKyAgIHBybmdfc3RhdGUgdHBybmc7CisgICB1bnNpZ25lZCBsb25nIHgsIHk7CisgICBpbnQgICAgICAgICAgIGVycjsKKworICAgZnByaW50ZihzdGRlcnIsICJUaW1pbmcgUFJOR3MgKGN5Y2xlcy9ieXRlIG91dHB1dCwgY3ljbGVzIGFkZF9lbnRyb3B5ICgzMiBieXRlcykgOlxuIik7CisgICBmb3IgKHggPSAwOyBwcm5nX2Rlc2NyaXB0b3JbeF0ubmFtZSAhPSBOVUxMOyB4KyspIHsKKworICAgICAgLyogc2FuaXR5IGNoZWNrIG9uIHBybmcgKi8KKyAgICAgIGlmICgoZXJyID0gcHJuZ19kZXNjcmlwdG9yW3hdLnRlc3QoKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbkVSUk9SOiBQUk5HICVzIGZhaWxlZCBzZWxmLXRlc3QgJXNcbiIsIHBybmdfZGVzY3JpcHRvclt4XS5uYW1lLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICB9CisKKyAgICAgIHBybmdfZGVzY3JpcHRvclt4XS5zdGFydCgmdHBybmcpOworICAgICAgemVyb21lbShidWYsIDI1Nik7CisgICAgICBwcm5nX2Rlc2NyaXB0b3JbeF0uYWRkX2VudHJvcHkoYnVmLCAyNTYsICZ0cHJuZyk7CisgICAgICBwcm5nX2Rlc2NyaXB0b3JbeF0ucmVhZHkoJnRwcm5nKTsKKyAgICAgIHQyID0gLTE7CisKKyNkZWZpbmUgRE8xIGlmIChwcm5nX2Rlc2NyaXB0b3JbeF0ucmVhZChidWYsIDQwOTYsICZ0cHJuZykgIT0gNDA5NikgeyBmcHJpbnRmKHN0ZGVyciwgIlxuXG5FUlJPUiBSRUFEICE9IDQwOTZcblxuIik7IGV4aXQoRVhJVF9GQUlMVVJFKTsgfQorI2RlZmluZSBETzIgRE8xIERPMQorICAgICAgZm9yICh5ID0gMDsgeSA8IDEwMDAwOyB5KyspIHsKKyAgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgICBETzI7CisgICAgICAgICB0MSA9ICh0X3JlYWQoKSAtIHQxKT4+MTsKKyAgICAgICAgIGlmICh0MSA8IHQyKSB0MiA9IHQxOworICAgICAgfQorICAgICAgZnByaW50ZihzdGRlcnIsICIlMjBzOiAlNWxsdSAiLCBwcm5nX2Rlc2NyaXB0b3JbeF0ubmFtZSwgdDI+PjEyKTsKKyN1bmRlZiBETzIKKyN1bmRlZiBETzEKKworI2RlZmluZSBETzEgcHJuZ19kZXNjcmlwdG9yW3hdLnN0YXJ0KCZ0cHJuZyk7IHBybmdfZGVzY3JpcHRvclt4XS5hZGRfZW50cm9weShidWYsIDMyLCAmdHBybmcpOyBwcm5nX2Rlc2NyaXB0b3JbeF0ucmVhZHkoJnRwcm5nKTsgcHJuZ19kZXNjcmlwdG9yW3hdLmRvbmUoJnRwcm5nKTsKKyNkZWZpbmUgRE8yIERPMSBETzEKKyAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwMDsgeSsrKSB7CisgICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICAgRE8yOworICAgICAgICAgdDEgPSAodF9yZWFkKCkgLSB0MSk+PjE7CisgICAgICAgICBpZiAodDEgPCB0MikgdDIgPSB0MTsKKyAgICAgIH0KKyAgICAgIGZwcmludGYoc3RkZXJyLCAiJTVsbHVcbiIsIHQyKTsKKyN1bmRlZiBETzIKKyN1bmRlZiBETzEKKworICAgfQorfQorCisjaWZkZWYgTURTQQorLyogdGltZSB2YXJpb3VzIERTQSBvcGVyYXRpb25zICovCit2b2lkIHRpbWVfZHNhKHZvaWQpCit7CisgICBkc2Ffa2V5ICAgICAgIGtleTsKKyAgIHVsb25nNjQgICAgICAgdDEsIHQyOworICAgdW5zaWduZWQgbG9uZyB4LCB5OworICAgaW50ICAgICAgICAgICBlcnI7CitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgIGludCBncm91cCwgbW9kdWx1czsKK30gZ3JvdXBzW10gPSB7Cit7IDIwLCA5NiAgfSwgCit7IDIwLCAxMjggfSwKK3sgMjQsIDE5MiB9LAoreyAyOCwgMjU2IH0sCit7IDMyLCA1MTIgfQorfTsKKworICAgZm9yICh4ID0gMDsgeCA8IChzaXplb2YoZ3JvdXBzKS9zaXplb2YoZ3JvdXBzWzBdKSk7IHgrKykgeworICAgICAgIHQyID0gMDsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgNDsgeSsrKSB7CisgICAgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgICAgaWYgKChlcnIgPSBkc2FfbWFrZV9rZXkoJnlhcnJvd19wcm5nLCBmaW5kX3BybmcoInlhcnJvdyIpLCBncm91cHNbeF0uZ3JvdXAsIGdyb3Vwc1t4XS5tb2R1bHVzLCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxuZHNhX21ha2Vfa2V5IHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CisgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgICAgIHQyICs9IHQxOworCisjaWZkZWYgTFRDX1BST0ZJTEUKKyAgICAgICB0MiA8PD0gMjsKKyAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgICAgICBpZiAoeSA8IDMpIHsKKyAgICAgICAgICAgICAgZHNhX2ZyZWUoJmtleSk7CisgICAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgdDIgPj49IDI7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJEU0EtKCVsdSwgJWx1KSBtYWtlX2tleSAgICB0b29rICUxNWxsdSBjeWNsZXNcbiIsICh1bnNpZ25lZCBsb25nKWdyb3Vwc1t4XS5ncm91cCo4LCAodW5zaWduZWQgbG9uZylncm91cHNbeF0ubW9kdWx1cyo4LCB0Mik7CisgICB9Cit9CisjZW5kaWYKKworCisjaWZkZWYgTVJTQSAgICAgIAorLyogdGltZSB2YXJpb3VzIFJTQSBvcGVyYXRpb25zICovCit2b2lkIHRpbWVfcnNhKHZvaWQpCit7CisgICByc2Ffa2V5ICAgICAgIGtleTsKKyAgIHVsb25nNjQgICAgICAgdDEsIHQyOworICAgdW5zaWduZWQgY2hhciBidWZbMl1bMjA0OF07CisgICB1bnNpZ25lZCBsb25nIHgsIHksIHosIHp6ejsKKyAgIGludCAgICAgICAgICAgZXJyLCB6eiwgc3RhdDsKKworICAgZm9yICh4ID0gMTAyNDsgeCA8PSAyMDQ4OyB4ICs9IDI1NikgeworICAgICAgIHQyID0gMDsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgNDsgeSsrKSB7CisgICAgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgICAgaWYgKChlcnIgPSByc2FfbWFrZV9rZXkoJnlhcnJvd19wcm5nLCBmaW5kX3BybmcoInlhcnJvdyIpLCB4LzgsIDY1NTM3LCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxucnNhX21ha2Vfa2V5IHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CisgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgICAgIHQyICs9IHQxOworCisjaWZkZWYgTFRDX1BST0ZJTEUKKyAgICAgICB0MiA8PD0gMjsKKyAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAgICAgIGlmICh5IDwgMykgeworICAgICAgICAgICAgICByc2FfZnJlZSgma2V5KTsKKyAgICAgICAgICAgfQorICAgICAgIH0KKyAgICAgICB0MiA+Pj0gMjsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJTQS0lbHUgbWFrZV9rZXkgICAgdG9vayAlMTVsbHUgY3ljbGVzXG4iLCB4LCB0Mik7CisKKyAgICAgICB0MiA9IDA7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHsKKyAgICAgICAgICAgdF9zdGFydCgpOworICAgICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICAgICB6ID0gc2l6ZW9mKGJ1ZlsxXSk7CisgICAgICAgICAgIGlmICgoZXJyID0gcnNhX2VuY3J5cHRfa2V5KGJ1ZlswXSwgMzIsIGJ1ZlsxXSwgJnosIChjb25zdCB1bnNpZ25lZCBjaGFyICopInRlc3Rwcm9nIiwgOCwgJnlhcnJvd19wcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kX3BybmcoInlhcnJvdyIpLCBmaW5kX2hhc2goInNoYTEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbnJzYV9lbmNyeXB0X2tleSBzYXlzICVzLCB3YWl0Li4ubm8gaXQgc2hvdWxkIHNheSAlcy4uLmRhbW4geW91IVxuIiwgZXJyb3JfdG9fc3RyaW5nKGVyciksIGVycm9yX3RvX3N0cmluZyhDUllQVF9PSykpOworICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOworICAgICAgICAgICB0MiArPSB0MTsKKyNpZmRlZiBMVENfUFJPRklMRQorICAgICAgIHQyIDw8PSA0OworICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgfQorICAgICAgIHQyID4+PSA0OworICAgICAgIGZwcmludGYoc3RkZXJyLCAiUlNBLSVsdSBlbmNyeXB0X2tleSB0b29rICUxNWxsdSBjeWNsZXNcbiIsIHgsIHQyKTsKKworICAgICAgIHQyID0gMDsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMjA0ODsgeSsrKSB7CisgICAgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgICAgenp6ID0gc2l6ZW9mKGJ1ZlswXSk7CisgICAgICAgICAgIGlmICgoZXJyID0gcnNhX2RlY3J5cHRfa2V5KGJ1ZlsxXSwgeiwgYnVmWzBdLCAmenp6LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSJ0ZXN0cHJvZyIsIDgsICBmaW5kX2hhc2goInNoYTEiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ6eiwgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbnJzYV9kZWNyeXB0X2tleSBzYXlzICVzLCB3YWl0Li4ubm8gaXQgc2hvdWxkIHNheSAlcy4uLmRhbW4geW91IVxuIiwgZXJyb3JfdG9fc3RyaW5nKGVyciksIGVycm9yX3RvX3N0cmluZyhDUllQVF9PSykpOworICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOworICAgICAgICAgICB0MiArPSB0MTsKKyNpZmRlZiBMVENfUFJPRklMRQorICAgICAgIHQyIDw8PSAxMTsKKyAgICAgICBicmVhazsKKyNlbmRpZgorICAgICAgIH0KKyAgICAgICB0MiA+Pj0gMTE7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJSU0EtJWx1IGRlY3J5cHRfa2V5IHRvb2sgJTE1bGx1IGN5Y2xlc1xuIiwgeCwgdDIpOworCisgICAgICAgdDIgPSAwOworICAgICAgIGZvciAoeSA9IDA7IHkgPCAyNTY7IHkrKykgeworICAgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICAgIHogPSBzaXplb2YoYnVmWzFdKTsKKyAgICAgICAgICBpZiAoKGVyciA9IHJzYV9zaWduX2hhc2goYnVmWzBdLCAyMCwgYnVmWzFdLCAmeiwgJnlhcnJvd19wcm5nLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZF9wcm5nKCJ5YXJyb3ciKSwgZmluZF9oYXNoKCJzaGExIiksIDgsICZrZXkpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuXG5yc2Ffc2lnbl9oYXNoIHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CisgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgICAgIHQyICs9IHQxOworI2lmZGVmIExUQ19QUk9GSUxFCisgICAgICAgdDIgPDw9IDg7CisgICAgICAgYnJlYWs7CisjZW5kaWYKKwl9CisgICAgICAgIHQyID4+PSA4OworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJTQS0lbHUgc2lnbl9oYXNoIHRvb2sgICAlMTVsbHUgY3ljbGVzXG4iLCB4LCB0Mik7CisKKyAgICAgICB0MiA9IDA7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDIwNDg7IHkrKykgeworICAgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICAgIGlmICgoZXJyID0gcnNhX3ZlcmlmeV9oYXNoKGJ1ZlsxXSwgeiwgYnVmWzBdLCAyMCwgZmluZF9oYXNoKCJzaGExIiksIDgsICZzdGF0LCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxucnNhX3ZlcmlmeV9oYXNoIHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CisgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICB9CisgICAgICAgICAgaWYgKHN0YXQgPT0gMCkgeworICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbnJzYV92ZXJpZnlfaGFzaCBmb3IgUlNBLSVsdSBmYWlsZWQgdG8gdmVyaWZ5IHNpZ25hdHVyZSglbHUpXG4iLCB4LCB5KTsKKyAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgfQorICAgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKKyAgICAgICAgICB0MiArPSB0MTsKKyNpZmRlZiBMVENfUFJPRklMRQorICAgICAgIHQyIDw8PSAxMTsKKyAgICAgICBicmVhazsKKyNlbmRpZgorCX0KKyAgICAgICAgdDIgPj49IDExOworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlJTQS0lbHUgdmVyaWZ5X2hhc2ggdG9vayAlMTVsbHUgY3ljbGVzXG4iLCB4LCB0Mik7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxuIik7CisgICAgICAgcnNhX2ZyZWUoJmtleSk7CisgIH0KK30KKyNlbHNlCit2b2lkIHRpbWVfcnNhKHZvaWQpIHsgZnByaW50ZihzdGRlcnIsICJOTyBSU0FcbiIpOyB9CisjZW5kaWYKKworI2lmZGVmIE1LQVQgICAgICAKKy8qIHRpbWUgdmFyaW91cyBLQVQgb3BlcmF0aW9ucyAqLwordm9pZCB0aW1lX2thdGphKHZvaWQpCit7CisgICBrYXRqYV9rZXkga2V5OworICAgdWxvbmc2NCB0MSwgdDI7CisgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyXVs0MDk2XTsKKyAgIHVuc2lnbmVkIGxvbmcgeCwgeSwgeiwgenp6OworICAgaW50ICAgICAgICAgICBlcnIsIHp6OworCisgICBmb3IgKHggPSAxMDI0OyB4IDw9IDIwNDg7IHggKz0gMjU2KSB7CisgICAgICAgdDIgPSAwOworICAgICAgIGZvciAoeSA9IDA7IHkgPCA0OyB5KyspIHsKKyAgICAgICAgICAgdF9zdGFydCgpOworICAgICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICAgICBpZiAoKGVyciA9IGthdGphX21ha2Vfa2V5KCZ5YXJyb3dfcHJuZywgZmluZF9wcm5nKCJ5YXJyb3ciKSwgeC84LCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxua2F0amFfbWFrZV9rZXkgc2F5cyAlcywgd2FpdC4uLm5vIGl0IHNob3VsZCBzYXkgJXMuLi5kYW1uIHlvdSFcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpLCBlcnJvcl90b19zdHJpbmcoQ1JZUFRfT0spKTsKKyAgICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICAgICB9CisgICAgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKKyAgICAgICAgICAgdDIgKz0gdDE7CisKKyAgICAgICAgICAgaWYgKHkgPCAzKSB7CisgICAgICAgICAgICAgIGthdGphX2ZyZWUoJmtleSk7CisgICAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgdDIgPj49IDI7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJLYXRqYS0lbHUgbWFrZV9rZXkgICAgdG9vayAlMTVsbHUgY3ljbGVzXG4iLCB4LCB0Mik7CisKKyAgICAgICB0MiA9IDA7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDE2OyB5KyspIHsKKyAgICAgICAgICAgdF9zdGFydCgpOworICAgICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICAgICB6ID0gc2l6ZW9mKGJ1ZlsxXSk7CisgICAgICAgICAgIGlmICgoZXJyID0ga2F0amFfZW5jcnlwdF9rZXkoYnVmWzBdLCAzMiwgYnVmWzFdLCAmeiwgInRlc3Rwcm9nIiwgOCwgJnlhcnJvd19wcm5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kX3BybmcoInlhcnJvdyIpLCBmaW5kX2hhc2goInNoYTEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbmthdGphX2VuY3J5cHRfa2V5IHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CisgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgICAgIHQyICs9IHQxOworICAgICAgIH0KKyAgICAgICB0MiA+Pj0gNDsKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkthdGphLSVsdSBlbmNyeXB0X2tleSB0b29rICUxNWxsdSBjeWNsZXNcbiIsIHgsIHQyKTsKKworICAgICAgIHQyID0gMDsKKyAgICAgICBmb3IgKHkgPSAwOyB5IDwgMjA0ODsgeSsrKSB7CisgICAgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgICAgenp6ID0gc2l6ZW9mKGJ1ZlswXSk7CisgICAgICAgICAgIGlmICgoZXJyID0ga2F0amFfZGVjcnlwdF9rZXkoYnVmWzFdLCB6LCBidWZbMF0sICZ6enosICJ0ZXN0cHJvZyIsIDgsICBmaW5kX2hhc2goInNoYTEiKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ6eiwgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbmthdGphX2RlY3J5cHRfa2V5IHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CisgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgICAgIHQyICs9IHQxOworICAgICAgIH0KKyAgICAgICB0MiA+Pj0gMTE7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJLYXRqYS0lbHUgZGVjcnlwdF9rZXkgdG9vayAlMTVsbHUgY3ljbGVzXG4iLCB4LCB0Mik7CisKKworICAgICAgIGthdGphX2ZyZWUoJmtleSk7CisgIH0KK30KKyNlbHNlCit2b2lkIHRpbWVfa2F0amEodm9pZCkgeyBmcHJpbnRmKHN0ZGVyciwgIk5PIEthdGphXG4iKTsgfQorI2VuZGlmCisKKyNpZmRlZiBNRUNDCisvKiB0aW1lIHZhcmlvdXMgRUNDIG9wZXJhdGlvbnMgKi8KK3ZvaWQgdGltZV9lY2Modm9pZCkKK3sKKyAgIGVjY19rZXkga2V5OworICAgdWxvbmc2NCB0MSwgdDI7CisgICB1bnNpZ25lZCBjaGFyIGJ1ZlsyXVsyNTZdOworICAgdW5zaWduZWQgbG9uZyBpLCB3LCB4LCB5LCB6OworICAgaW50ICAgICAgICAgICBlcnIsIHN0YXQ7CisgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaXplc1tdID0geworI2lmZGVmIEVDQzExMgorMTEyLzgsIAorI2VuZGlmCisjaWZkZWYgRUNDMTI4CisxMjgvOCwgCisjZW5kaWYKKyNpZmRlZiBFQ0MxNjAKKzE2MC84LCAKKyNlbmRpZgorI2lmZGVmIEVDQzE5MgorMTkyLzgsIAorI2VuZGlmCisjaWZkZWYgRUNDMjI0CisyMjQvOCwKKyNlbmRpZgorI2lmZGVmIEVDQzI1NgorMjU2LzgsIAorI2VuZGlmCisjaWZkZWYgRUNDMzg0CiszODQvOCwgCisjZW5kaWYKKyNpZmRlZiBFQ0M1MjEKKzUyMS84LCAKKyNlbmRpZgorMTAwMDAwfTsKKworICAgZm9yICh4ID0gc2l6ZXNbaT0wXTsgeCA8IDEwMDAwMDsgeCA9IHNpemVzWysraV0pIHsKKyAgICAgICB0MiA9IDA7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDI1NjsgeSsrKSB7CisgICAgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgICAgaWYgKChlcnIgPSBlY2NfbWFrZV9rZXkoJnlhcnJvd19wcm5nLCBmaW5kX3BybmcoInlhcnJvdyIpLCB4LCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxuZWNjX21ha2Vfa2V5IHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CisgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgICAgIHQyICs9IHQxOworCisjaWZkZWYgTFRDX1BST0ZJTEUKKyAgICAgICB0MiA8PD0gODsKKyAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAgICAgIGlmICh5IDwgMjU1KSB7CisgICAgICAgICAgICAgIGVjY19mcmVlKCZrZXkpOworICAgICAgICAgICB9CisgICAgICAgfQorICAgICAgIHQyID4+PSA4OworICAgICAgIGZwcmludGYoc3RkZXJyLCAiRUNDLSVsdSBtYWtlX2tleSAgICB0b29rICUxNWxsdSBjeWNsZXNcbiIsIHgqOCwgdDIpOworCisgICAgICAgdDIgPSAwOworICAgICAgIGZvciAoeSA9IDA7IHkgPCAyNTY7IHkrKykgeworICAgICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgICAgIHogPSBzaXplb2YoYnVmWzFdKTsKKyAgICAgICAgICAgaWYgKChlcnIgPSBlY2NfZW5jcnlwdF9rZXkoYnVmWzBdLCAyMCwgYnVmWzFdLCAmeiwgJnlhcnJvd19wcm5nLCBmaW5kX3BybmcoInlhcnJvdyIpLCBmaW5kX2hhc2goInNoYTEiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbmVjY19lbmNyeXB0X2tleSBzYXlzICVzLCB3YWl0Li4ubm8gaXQgc2hvdWxkIHNheSAlcy4uLmRhbW4geW91IVxuIiwgZXJyb3JfdG9fc3RyaW5nKGVyciksIGVycm9yX3RvX3N0cmluZyhDUllQVF9PSykpOworICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOworICAgICAgICAgICB0MiArPSB0MTsKKyNpZmRlZiBMVENfUFJPRklMRQorICAgICAgIHQyIDw8PSA4OworICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgfQorICAgICAgIHQyID4+PSA4OworICAgICAgIGZwcmludGYoc3RkZXJyLCAiRUNDLSVsdSBlbmNyeXB0X2tleSB0b29rICUxNWxsdSBjeWNsZXNcbiIsIHgqOCwgdDIpOworCisgICAgICAgdDIgPSAwOworICAgICAgIGZvciAoeSA9IDA7IHkgPCAyNTY7IHkrKykgeworICAgICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgICAgIHcgPSAyMDsKKyAgICAgICAgICAgaWYgKChlcnIgPSBlY2NfZGVjcnlwdF9rZXkoYnVmWzFdLCB6LCBidWZbMF0sICZ3LCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxuZWNjX2RlY3J5cHRfa2V5IHNheXMgJXMsIHdhaXQuLi5ubyBpdCBzaG91bGQgc2F5ICVzLi4uZGFtbiB5b3UhXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSwgZXJyb3JfdG9fc3RyaW5nKENSWVBUX09LKSk7CisgICAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgICAgfQorICAgICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgICAgIHQyICs9IHQxOworI2lmZGVmIExUQ19QUk9GSUxFCisgICAgICAgdDIgPDw9IDg7CisgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICB9CisgICAgICAgdDIgPj49IDg7CisgICAgICAgZnByaW50ZihzdGRlcnIsICJFQ0MtJWx1IGRlY3J5cHRfa2V5IHRvb2sgJTE1bGx1IGN5Y2xlc1xuIiwgeCo4LCB0Mik7CisKKyAgICAgICB0MiA9IDA7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDI1NjsgeSsrKSB7CisgICAgICAgICAgdF9zdGFydCgpOworICAgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgICAgeiA9IHNpemVvZihidWZbMV0pOworICAgICAgICAgIGlmICgoZXJyID0gZWNjX3NpZ25faGFzaChidWZbMF0sIDIwLCBidWZbMV0sICZ6LCAmeWFycm93X3BybmcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kX3BybmcoInlhcnJvdyIpLCAma2V5KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxuZWNjX3NpZ25faGFzaCBzYXlzICVzLCB3YWl0Li4ubm8gaXQgc2hvdWxkIHNheSAlcy4uLmRhbW4geW91IVxuIiwgZXJyb3JfdG9fc3RyaW5nKGVyciksIGVycm9yX3RvX3N0cmluZyhDUllQVF9PSykpOworICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOworICAgICAgICAgICB0MiArPSB0MTsKKyNpZmRlZiBMVENfUFJPRklMRQorICAgICAgIHQyIDw8PSA4OworICAgICAgIGJyZWFrOworI2VuZGlmCisJfQorICAgICAgICB0MiA+Pj0gODsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFQ0MtJWx1IHNpZ25faGFzaCB0b29rICAgJTE1bGx1IGN5Y2xlc1xuIiwgeCo4LCB0Mik7CisKKyAgICAgICB0MiA9IDA7CisgICAgICAgZm9yICh5ID0gMDsgeSA8IDI1NjsgeSsrKSB7CisgICAgICAgICAgdF9zdGFydCgpOworICAgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgICAgaWYgKChlcnIgPSBlY2NfdmVyaWZ5X2hhc2goYnVmWzFdLCB6LCBidWZbMF0sIDIwLCAmc3RhdCwgJmtleSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbmVjY192ZXJpZnlfaGFzaCBzYXlzICVzLCB3YWl0Li4ubm8gaXQgc2hvdWxkIHNheSAlcy4uLmRhbW4geW91IVxuIiwgZXJyb3JfdG9fc3RyaW5nKGVyciksIGVycm9yX3RvX3N0cmluZyhDUllQVF9PSykpOworICAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgfQorICAgICAgICAgIGlmIChzdGF0ID09IDApIHsKKyAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuXG5lY2NfdmVyaWZ5X2hhc2ggZm9yIEVDQy0lbHUgZmFpbGVkIHRvIHZlcmlmeSBzaWduYXR1cmUoJWx1KVxuIiwgeCo4LCB5KTsKKyAgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgICAgfQorICAgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKKyAgICAgICAgICB0MiArPSB0MTsKKyNpZmRlZiBMVENfUFJPRklMRQorICAgICAgIHQyIDw8PSA4OworICAgICAgIGJyZWFrOworI2VuZGlmCisJfQorICAgICAgICB0MiA+Pj0gODsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJFQ0MtJWx1IHZlcmlmeV9oYXNoIHRvb2sgJTE1bGx1IGN5Y2xlc1xuIiwgeCo4LCB0Mik7CisKKyAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuXG4iKTsKKyAgICAgICBlY2NfZnJlZSgma2V5KTsKKyAgfQorfQorI2Vsc2UKK3ZvaWQgdGltZV9lY2Modm9pZCkgeyBmcHJpbnRmKHN0ZGVyciwgIk5PIEVDQ1xuIik7IH0KKyNlbmRpZgorCit2b2lkIHRpbWVfbWFjc18odW5zaWduZWQgbG9uZyBNQUNfU0laRSkKK3sKKyAgIHVuc2lnbmVkIGNoYXIgKmJ1Ziwga2V5WzE2XSwgdGFnWzE2XTsKKyAgIHVsb25nNjQgdDEsIHQyOworICAgdW5zaWduZWQgbG9uZyB4LCB6OworICAgaW50IGVyciwgY2lwaGVyX2lkeCwgaGFzaF9pZHg7CisKKyAgIGZwcmludGYoc3RkZXJyLCAiXG5NQUMgVGltaW5ncyAoY3ljbGVzL2J5dGUgb24gJWx1S0IgYmxvY2tzKTpcbiIsIE1BQ19TSVpFKTsKKworICAgYnVmID0gWE1BTExPQyhNQUNfU0laRSoxMDI0KTsKKyAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgZnByaW50ZihzdGRlcnIsICJcblxub3V0IG9mIGhlYXAgeW9cblxuIik7CisgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICB9CisKKyAgIGNpcGhlcl9pZHggPSBmaW5kX2NpcGhlcigiYWVzIik7CisgICBoYXNoX2lkeCAgID0gZmluZF9oYXNoKCJzaGExIik7CisgICAKKyAgIGlmIChjaXBoZXJfaWR4ID09IC0xIHx8IGhhc2hfaWR4ID09IC0xKSB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmcgdGhlIE1BQyB0ZXN0cyByZXF1aXJlcyBBRVMgYW5kIFNIQTEgdG8gb3BlcmF0ZS4uLiBzbyBzb3JyeVxuIik7CisgICAgICByZXR1cm47CisgICB9CisKKyAgIHlhcnJvd19yZWFkKGJ1ZiwgTUFDX1NJWkUqMTAyNCwgJnlhcnJvd19wcm5nKTsKKyAgIHlhcnJvd19yZWFkKGtleSwgMTYsICZ5YXJyb3dfcHJuZyk7CisKKyNpZmRlZiBMVENfT01BQworICAgdDIgPSAtMTsKKyAgIGZvciAoeCA9IDA7IHggPCAxMDAwMDsgeCsrKSB7CisgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgeiA9IDE2OworICAgICAgICBpZiAoKGVyciA9IG9tYWNfbWVtb3J5KGNpcGhlcl9pZHgsIGtleSwgMTYsIGJ1ZiwgTUFDX1NJWkUqMTAyNCwgdGFnLCAmeikpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbm9tYWMgZXJyb3IuLi4gJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKKyAgICAgICAgaWYgKHQxIDwgdDIpIHQyID0gdDE7CisgICB9CisgICBmcHJpbnRmKHN0ZGVyciwgIk9NQUMtJXNcdFx0JTlsbHVcbiIsIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl9pZHhdLm5hbWUsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CisjZW5kaWYKKworI2lmZGVmIExUQ19YQ0JDCisgICB0MiA9IC0xOworICAgZm9yICh4ID0gMDsgeCA8IDEwMDAwOyB4KyspIHsKKyAgICAgICAgdF9zdGFydCgpOworICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICB6ID0gMTY7CisgICAgICAgIGlmICgoZXJyID0geGNiY19tZW1vcnkoY2lwaGVyX2lkeCwga2V5LCAxNiwgYnVmLCBNQUNfU0laRSoxMDI0LCB0YWcsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxueGNiYyBlcnJvci4uLiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOworICAgICAgICBpZiAodDEgPCB0MikgdDIgPSB0MTsKKyAgIH0KKyAgIGZwcmludGYoc3RkZXJyLCAiWENCQy0lc1x0XHQlOWxsdVxuIiwgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyX2lkeF0ubmFtZSwgdDIvKHVsb25nNjQpKE1BQ19TSVpFKjEwMjQpKTsKKyNlbmRpZgorCisjaWZkZWYgTFRDX0Y5X01PREUKKyAgIHQyID0gLTE7CisgICBmb3IgKHggPSAwOyB4IDwgMTAwMDA7IHgrKykgeworICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgIHogPSAxNjsKKyAgICAgICAgaWYgKChlcnIgPSBmOV9tZW1vcnkoY2lwaGVyX2lkeCwga2V5LCAxNiwgYnVmLCBNQUNfU0laRSoxMDI0LCB0YWcsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxuRjkgZXJyb3IuLi4gJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKKyAgICAgICAgaWYgKHQxIDwgdDIpIHQyID0gdDE7CisgICB9CisgICBmcHJpbnRmKHN0ZGVyciwgIkY5LSVzXHRcdFx0JTlsbHVcbiIsIGNpcGhlcl9kZXNjcmlwdG9yW2NpcGhlcl9pZHhdLm5hbWUsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CisjZW5kaWYKKworI2lmZGVmIExUQ19QTUFDCisgICB0MiA9IC0xOworICAgZm9yICh4ID0gMDsgeCA8IDEwMDAwOyB4KyspIHsKKyAgICAgICAgdF9zdGFydCgpOworICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICB6ID0gMTY7CisgICAgICAgIGlmICgoZXJyID0gcG1hY19tZW1vcnkoY2lwaGVyX2lkeCwga2V5LCAxNiwgYnVmLCBNQUNfU0laRSoxMDI0LCB0YWcsICZ6KSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcblxucG1hYyBlcnJvci4uLiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOworICAgICAgICBpZiAodDEgPCB0MikgdDIgPSB0MTsKKyAgIH0KKyAgIGZwcmludGYoc3RkZXJyLCAiUE1BQy1BRVNcdFx0JTlsbHVcbiIsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CisjZW5kaWYKKworI2lmZGVmIFBFTElDQU4KKyAgIHQyID0gLTE7CisgICBmb3IgKHggPSAwOyB4IDwgMTAwMDA7IHgrKykgeworICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgIHogPSAxNjsKKyAgICAgICAgaWYgKChlcnIgPSBwZWxpY2FuX21lbW9yeShrZXksIDE2LCBidWYsIE1BQ19TSVpFKjEwMjQsIHRhZykpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbnBlbGljYW4gZXJyb3IuLi4gJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKKyAgICAgICAgaWYgKHQxIDwgdDIpIHQyID0gdDE7CisgICB9CisgICBmcHJpbnRmKHN0ZGVyciwgIlBFTElDQU4gXHRcdCU5bGx1XG4iLCB0Mi8odWxvbmc2NCkoTUFDX1NJWkUqMTAyNCkpOworI2VuZGlmCisKKyNpZmRlZiBMVENfSE1BQworICAgdDIgPSAtMTsKKyAgIGZvciAoeCA9IDA7IHggPCAxMDAwMDsgeCsrKSB7CisgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgeiA9IDE2OworICAgICAgICBpZiAoKGVyciA9IGhtYWNfbWVtb3J5KGhhc2hfaWR4LCBrZXksIDE2LCBidWYsIE1BQ19TSVpFKjEwMjQsIHRhZywgJnopKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuXG5obWFjIGVycm9yLi4uICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgIGlmICh0MSA8IHQyKSB0MiA9IHQxOworICAgfQorICAgZnByaW50ZihzdGRlcnIsICJITUFDLSVzXHRcdCU5bGx1XG4iLCBoYXNoX2Rlc2NyaXB0b3JbaGFzaF9pZHhdLm5hbWUsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CisjZW5kaWYKKworICAgWEZSRUUoYnVmKTsKK30KKwordm9pZCB0aW1lX21hY3Modm9pZCkKK3sKKyAgIHRpbWVfbWFjc18oMSk7CisgICB0aW1lX21hY3NfKDQpOworICAgdGltZV9tYWNzXygzMik7Cit9CisKK3ZvaWQgdGltZV9lbmNtYWNzXyh1bnNpZ25lZCBsb25nIE1BQ19TSVpFKQoreworICAgdW5zaWduZWQgY2hhciAqYnVmLCBJVlsxNl0sIGtleVsxNl0sIHRhZ1sxNl07CisgICB1bG9uZzY0IHQxLCB0MjsKKyAgIHVuc2lnbmVkIGxvbmcgeCwgejsKKyAgIGludCBlcnIsIGNpcGhlcl9pZHg7CisgICBzeW1tZXRyaWNfa2V5IHNrZXk7CisKKyAgIGZwcmludGYoc3RkZXJyLCAiXG5FTkMrTUFDIFRpbWluZ3MgKHplcm8gYnl0ZSBBQUQsIDE2IGJ5dGUgSVYsIGN5Y2xlcy9ieXRlIG9uICVsdUtCIGJsb2Nrcyk6XG4iLCBNQUNfU0laRSk7CisKKyAgIGJ1ZiA9IFhNQUxMT0MoTUFDX1NJWkUqMTAyNCk7CisgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5cbm91dCBvZiBoZWFwIHlvXG5cbiIpOworICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgfQorCisgICBjaXBoZXJfaWR4ID0gZmluZF9jaXBoZXIoImFlcyIpOworCisgICB5YXJyb3dfcmVhZChidWYsIE1BQ19TSVpFKjEwMjQsICZ5YXJyb3dfcHJuZyk7CisgICB5YXJyb3dfcmVhZChrZXksIDE2LCAmeWFycm93X3BybmcpOworICAgeWFycm93X3JlYWQoSVYsIDE2LCAmeWFycm93X3BybmcpOworCisjaWZkZWYgRUFYX01PREUKKyAgIHQyID0gLTE7CisgICBmb3IgKHggPSAwOyB4IDwgMTAwMDA7IHgrKykgeworICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgIHogPSAxNjsKKyAgICAgICAgaWYgKChlcnIgPSBlYXhfZW5jcnlwdF9hdXRoZW50aWNhdGVfbWVtb3J5KGNpcGhlcl9pZHgsIGtleSwgMTYsIElWLCAxNiwgTlVMTCwgMCwgYnVmLCBNQUNfU0laRSoxMDI0LCBidWYsIHRhZywgJnopKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuRUFYIGVycm9yLi4uICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgIGlmICh0MSA8IHQyKSB0MiA9IHQxOworICAgfQorICAgZnByaW50ZihzdGRlcnIsICJFQVggXHRcdFx0JTlsbHVcbiIsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CisjZW5kaWYKKworI2lmZGVmIE9DQl9NT0RFCisgICB0MiA9IC0xOworICAgZm9yICh4ID0gMDsgeCA8IDEwMDAwOyB4KyspIHsKKyAgICAgICAgdF9zdGFydCgpOworICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICB6ID0gMTY7CisgICAgICAgIGlmICgoZXJyID0gb2NiX2VuY3J5cHRfYXV0aGVudGljYXRlX21lbW9yeShjaXBoZXJfaWR4LCBrZXksIDE2LCBJViwgYnVmLCBNQUNfU0laRSoxMDI0LCBidWYsIHRhZywgJnopKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuT0NCIGVycm9yLi4uICVzXG4iLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgIGlmICh0MSA8IHQyKSB0MiA9IHQxOworICAgfQorICAgZnByaW50ZihzdGRlcnIsICJPQ0IgXHRcdFx0JTlsbHVcbiIsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CisjZW5kaWYKKworI2lmZGVmIENDTV9NT0RFCisgICB0MiA9IC0xOworICAgZm9yICh4ID0gMDsgeCA8IDEwMDAwOyB4KyspIHsKKyAgICAgICAgdF9zdGFydCgpOworICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICB6ID0gMTY7CisgICAgICAgIGlmICgoZXJyID0gY2NtX21lbW9yeShjaXBoZXJfaWR4LCBrZXksIDE2LCBOVUxMLCBJViwgMTYsIE5VTEwsIDAsIGJ1ZiwgTUFDX1NJWkUqMTAyNCwgYnVmLCB0YWcsICZ6LCBDQ01fRU5DUllQVCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5DQ00gZXJyb3IuLi4gJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKKyAgICAgICAgaWYgKHQxIDwgdDIpIHQyID0gdDE7CisgICB9CisgICBmcHJpbnRmKHN0ZGVyciwgIkNDTSAobm8tcHJlY29tcCkgXHQlOWxsdVxuIiwgdDIvKHVsb25nNjQpKE1BQ19TSVpFKjEwMjQpKTsKKyAgIAorICAgY2lwaGVyX2Rlc2NyaXB0b3JbY2lwaGVyX2lkeF0uc2V0dXAoa2V5LCAxNiwgMCwgJnNrZXkpOworICAgdDIgPSAtMTsKKyAgIGZvciAoeCA9IDA7IHggPCAxMDAwMDsgeCsrKSB7CisgICAgICAgIHRfc3RhcnQoKTsKKyAgICAgICAgdDEgPSB0X3JlYWQoKTsKKyAgICAgICAgeiA9IDE2OworICAgICAgICBpZiAoKGVyciA9IGNjbV9tZW1vcnkoY2lwaGVyX2lkeCwga2V5LCAxNiwgJnNrZXksIElWLCAxNiwgTlVMTCwgMCwgYnVmLCBNQUNfU0laRSoxMDI0LCBidWYsIHRhZywgJnosIENDTV9FTkNSWVBUKSkgIT0gQ1JZUFRfT0spIHsKKyAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbkNDTSBlcnJvci4uLiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOworICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKyAgICAgICAgdDEgPSB0X3JlYWQoKSAtIHQxOworICAgICAgICBpZiAodDEgPCB0MikgdDIgPSB0MTsKKyAgIH0KKyAgIGZwcmludGYoc3RkZXJyLCAiQ0NNIChwcmVjb21wKSBcdFx0JTlsbHVcbiIsIHQyLyh1bG9uZzY0KShNQUNfU0laRSoxMDI0KSk7CisgICBjaXBoZXJfZGVzY3JpcHRvcltjaXBoZXJfaWR4XS5kb25lKCZza2V5KTsgICAKKyNlbmRpZgorCisjaWZkZWYgR0NNX01PREUKKyAgIHQyID0gLTE7CisgICBmb3IgKHggPSAwOyB4IDwgMTAwOyB4KyspIHsKKyAgICAgICAgdF9zdGFydCgpOworICAgICAgICB0MSA9IHRfcmVhZCgpOworICAgICAgICB6ID0gMTY7CisgICAgICAgIGlmICgoZXJyID0gZ2NtX21lbW9yeShjaXBoZXJfaWR4LCBrZXksIDE2LCBJViwgMTYsIE5VTEwsIDAsIGJ1ZiwgTUFDX1NJWkUqMTAyNCwgYnVmLCB0YWcsICZ6LCBHQ01fRU5DUllQVCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5HQ00gZXJyb3IuLi4gJXNcbiIsIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAgIHQxID0gdF9yZWFkKCkgLSB0MTsKKyAgICAgICAgaWYgKHQxIDwgdDIpIHQyID0gdDE7CisgICB9CisgICBmcHJpbnRmKHN0ZGVyciwgIkdDTSAobm8tcHJlY29tcClcdCU5bGx1XG4iLCB0Mi8odWxvbmc2NCkoTUFDX1NJWkUqMTAyNCkpOworCisgICB7CisgICBnY21fc3RhdGUgZ2NtCisjaWZkZWYgR0NNX1RBQkxFU19TU0UyCitfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoMTYpKSkKKyNlbmRpZgorOworCisgICBpZiAoKGVyciA9IGdjbV9pbml0KCZnY20sIGNpcGhlcl9pZHgsIGtleSwgMTYpKSAhPSBDUllQVF9PSykgeyBmcHJpbnRmKHN0ZGVyciwgImdjbV9pbml0OiAlc1xuIiwgZXJyb3JfdG9fc3RyaW5nKGVycikpOyBleGl0KEVYSVRfRkFJTFVSRSk7IH0KKyAgIHQyID0gLTE7CisgICBmb3IgKHggPSAwOyB4IDwgMTAwMDA7IHgrKykgeworICAgICAgICB0X3N0YXJ0KCk7CisgICAgICAgIHQxID0gdF9yZWFkKCk7CisgICAgICAgIHogPSAxNjsKKyAgICAgICAgaWYgKChlcnIgPSBnY21fcmVzZXQoJmdjbSkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuR0NNIGVycm9yWyVkXS4uLiAlc1xuIiwgX19MSU5FX18sIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAgIGlmICgoZXJyID0gZ2NtX2FkZF9pdigmZ2NtLCBJViwgMTYpKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbkdDTSBlcnJvclslZF0uLi4gJXNcbiIsIF9fTElORV9fLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGVyciA9IGdjbV9hZGRfYWFkKCZnY20sIE5VTEwsIDApKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbkdDTSBlcnJvclslZF0uLi4gJXNcbiIsIF9fTElORV9fLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGVyciA9IGdjbV9wcm9jZXNzKCZnY20sIGJ1ZiwgTUFDX1NJWkUqMTAyNCwgYnVmLCBHQ01fRU5DUllQVCkpICE9IENSWVBUX09LKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuR0NNIGVycm9yWyVkXS4uLiAlc1xuIiwgX19MSU5FX18sIGVycm9yX3RvX3N0cmluZyhlcnIpKTsKKyAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoKGVyciA9IGdjbV9kb25lKCZnY20sIHRhZywgJnopKSAhPSBDUllQVF9PSykgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbkdDTSBlcnJvclslZF0uLi4gJXNcbiIsIF9fTElORV9fLCBlcnJvcl90b19zdHJpbmcoZXJyKSk7CisgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICB0MSA9IHRfcmVhZCgpIC0gdDE7CisgICAgICAgIGlmICh0MSA8IHQyKSB0MiA9IHQxOworICAgfQorICAgZnByaW50ZihzdGRlcnIsICJHQ00gKHByZWNvbXApXHRcdCU5bGx1XG4iLCB0Mi8odWxvbmc2NCkoTUFDX1NJWkUqMTAyNCkpOworICAgfQorCisjZW5kaWYKKworfSAKKwordm9pZCB0aW1lX2VuY21hY3Modm9pZCkKK3sKKyAgIHRpbWVfZW5jbWFjc18oMSk7CisgICB0aW1lX2VuY21hY3NfKDQpOworICAgdGltZV9lbmNtYWNzXygzMik7Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbWNyeXB0L3Rlc3Rwcm9mL3g4Nl9wcm9mLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNTEgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMjEgMDA6MTA6MTggJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tY3J5cHQvdXBkYXRlbWFrZXMuc2ggYi9saWJ0b21jcnlwdC91cGRhdGVtYWtlcy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjZjYmRlCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tY3J5cHQvdXBkYXRlbWFrZXMuc2gKQEAgLTAsMCArMSwyMSBAQAorIyEvYmluL2Jhc2gKKworYmFzaCBnZW5saXN0LnNoID4gdG1wbGlzdAorCitwZXJsIGZpbHRlci5wbCBtYWtlZmlsZSB0bXBsaXN0CittdiAtZiB0bXAuZGVsbWUgbWFrZWZpbGUKKworcGVybCBmaWx0ZXIucGwgbWFrZWZpbGUuaWNjIHRtcGxpc3QKK212IC1mIHRtcC5kZWxtZSBtYWtlZmlsZS5pY2MKKworcGVybCBmaWx0ZXIucGwgbWFrZWZpbGUuc2hhcmVkIHRtcGxpc3QKK212IC1mIHRtcC5kZWxtZSBtYWtlZmlsZS5zaGFyZWQKKworcGVybCBmaWx0ZXIucGwgbWFrZWZpbGUudW5peCB0bXBsaXN0CittdiAtZiB0bXAuZGVsbWUgbWFrZWZpbGUudW5peAorCitwZXJsIGZpbHRlci5wbCBtYWtlZmlsZS5tc3ZjIHRtcGxpc3QKK3NlZCAtZSAncy9cLm8gLy5vYmogL2cnIDwgdG1wLmRlbG1lID4gbWFrZWZpbGUubXN2YworCitybSAtZiB0bXBsaXN0CitybSAtZiB0bXAuZGVsbWUKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvQW5kcm9pZC5tayBiL2xpYnRvbW1hdGgvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQ4ZTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsMzQgQEAKK0xPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQoraW5jbHVkZSAkKENMRUFSX1ZBUlMpCisKK0xPQ0FMX01PRFVMRSA6PSBsaWJ0b21tYXRoCitMT0NBTF9TUkNfRklMRVMgOj0gXAorYm5jb3JlLmMgYm5fbXBfaW5pdC5jIGJuX21wX2NsZWFyLmMgYm5fbXBfZXhjaC5jIGJuX21wX2dyb3cuYyBibl9tcF9zaHJpbmsuYyBcCitibl9tcF9jbGFtcC5jIGJuX21wX3plcm8uYyAgYm5fbXBfc2V0LmMgYm5fbXBfc2V0X2ludC5jIGJuX21wX2luaXRfc2l6ZS5jIGJuX21wX2NvcHkuYyBcCitibl9tcF9pbml0X2NvcHkuYyBibl9tcF9hYnMuYyBibl9tcF9uZWcuYyBibl9tcF9jbXBfbWFnLmMgYm5fbXBfY21wLmMgYm5fbXBfY21wX2QuYyBcCitibl9tcF9yc2hkLmMgYm5fbXBfbHNoZC5jIGJuX21wX21vZF8yZC5jIGJuX21wX2Rpdl8yZC5jIGJuX21wX211bF8yZC5jIGJuX21wX2Rpdl8yLmMgXAorYm5fbXBfbXVsXzIuYyBibl9zX21wX2FkZC5jIGJuX3NfbXBfc3ViLmMgYm5fZmFzdF9zX21wX211bF9kaWdzLmMgYm5fc19tcF9tdWxfZGlncy5jIFwKK2JuX2Zhc3Rfc19tcF9tdWxfaGlnaF9kaWdzLmMgYm5fc19tcF9tdWxfaGlnaF9kaWdzLmMgYm5fZmFzdF9zX21wX3Nxci5jIGJuX3NfbXBfc3FyLmMgXAorYm5fbXBfYWRkLmMgYm5fbXBfc3ViLmMgYm5fbXBfa2FyYXRzdWJhX211bC5jIGJuX21wX211bC5jIGJuX21wX2thcmF0c3ViYV9zcXIuYyBcCitibl9tcF9zcXIuYyBibl9tcF9kaXYuYyBibl9tcF9tb2QuYyBibl9tcF9hZGRfZC5jIGJuX21wX3N1Yl9kLmMgYm5fbXBfbXVsX2QuYyBcCitibl9tcF9kaXZfZC5jIGJuX21wX21vZF9kLmMgYm5fbXBfZXhwdF9kLmMgYm5fbXBfYWRkbW9kLmMgYm5fbXBfc3VibW9kLmMgXAorYm5fbXBfbXVsbW9kLmMgYm5fbXBfc3FybW9kLmMgYm5fbXBfZ2NkLmMgYm5fbXBfbGNtLmMgYm5fZmFzdF9tcF9pbnZtb2QuYyBibl9tcF9pbnZtb2QuYyBcCitibl9tcF9yZWR1Y2UuYyBibl9tcF9tb250Z29tZXJ5X3NldHVwLmMgYm5fZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZS5jIGJuX21wX21vbnRnb21lcnlfcmVkdWNlLmMgXAorYm5fbXBfZXhwdG1vZF9mYXN0LmMgYm5fbXBfZXhwdG1vZC5jIGJuX21wXzJleHB0LmMgYm5fbXBfbl9yb290LmMgYm5fbXBfamFjb2JpLmMgYm5fcmV2ZXJzZS5jIFwKK2JuX21wX2NvdW50X2JpdHMuYyBibl9tcF9yZWFkX3Vuc2lnbmVkX2Jpbi5jIGJuX21wX3JlYWRfc2lnbmVkX2Jpbi5jIGJuX21wX3RvX3Vuc2lnbmVkX2Jpbi5jIFwKK2JuX21wX3RvX3NpZ25lZF9iaW4uYyBibl9tcF91bnNpZ25lZF9iaW5fc2l6ZS5jIGJuX21wX3NpZ25lZF9iaW5fc2l6ZS5jICBcCitibl9tcF94b3IuYyBibl9tcF9hbmQuYyBibl9tcF9vci5jIGJuX21wX3JhbmQuYyBibl9tcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbi5jIFwKK2JuX21wX3ByaW1lX2lzX2RpdmlzaWJsZS5jIGJuX3ByaW1lX3RhYi5jIGJuX21wX3ByaW1lX2Zlcm1hdC5jIGJuX21wX3ByaW1lX21pbGxlcl9yYWJpbi5jIFwKK2JuX21wX3ByaW1lX2lzX3ByaW1lLmMgYm5fbXBfcHJpbWVfbmV4dF9wcmltZS5jIGJuX21wX2RyX3JlZHVjZS5jIFwKK2JuX21wX2RyX2lzX21vZHVsdXMuYyBibl9tcF9kcl9zZXR1cC5jIGJuX21wX3JlZHVjZV9zZXR1cC5jIFwKK2JuX21wX3Rvb21fbXVsLmMgYm5fbXBfdG9vbV9zcXIuYyBibl9tcF9kaXZfMy5jIGJuX3NfbXBfZXhwdG1vZC5jIFwKK2JuX21wX3JlZHVjZV8yay5jIGJuX21wX3JlZHVjZV9pc18yay5jIGJuX21wX3JlZHVjZV8ya19zZXR1cC5jIFwKK2JuX21wX3JlZHVjZV8ya19sLmMgYm5fbXBfcmVkdWNlX2lzXzJrX2wuYyBibl9tcF9yZWR1Y2VfMmtfc2V0dXBfbC5jIFwKK2JuX21wX3JhZGl4X3NtYXAuYyBibl9tcF9yZWFkX3JhZGl4LmMgYm5fbXBfdG9yYWRpeC5jIGJuX21wX3JhZGl4X3NpemUuYyBcCitibl9tcF9mcmVhZC5jIGJuX21wX2Z3cml0ZS5jIGJuX21wX2NudF9sc2IuYyBibl9lcnJvci5jIFwKK2JuX21wX2luaXRfbXVsdGkuYyBibl9tcF9jbGVhcl9tdWx0aS5jIGJuX21wX2V4dGV1Y2xpZC5jIGJuX21wX3RvcmFkaXhfbi5jIFwKK2JuX21wX3ByaW1lX3JhbmRvbV9leC5jIGJuX21wX2dldF9pbnQuYyBibl9tcF9zcXJ0LmMgYm5fbXBfaXNfc3F1YXJlLmMgYm5fbXBfaW5pdF9zZXQuYyBcCitibl9tcF9pbml0X3NldF9pbnQuYyBibl9tcF9pbnZtb2Rfc2xvdy5jIGJuX21wX3ByaW1lX3JhYmluX21pbGxlcl90cmlhbHMuYyBcCitibl9tcF90b19zaWduZWRfYmluX24uYyBibl9tcF90b191bnNpZ25lZF9iaW5fbi5jCisKK2luY2x1ZGUgJChCVUlMRF9TVEFUSUNfTElCUkFSWSkKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvTElDRU5TRSBiL2xpYnRvbW1hdGgvTElDRU5TRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmFhNzkyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9MSUNFTlNFCkBAIC0wLDAgKzEsNCBAQAorTGliVG9tTWF0aCBpcyBoZXJlYnkgcmVsZWFzZWQgaW50byB0aGUgUHVibGljIERvbWFpbi4gIAorCistLSBUb20gU3QgRGVuaXMKKwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9NYWtlZmlsZS5pbiBiL2xpYnRvbW1hdGgvTWFrZWZpbGUuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYxYjkyYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwxODggQEAKKyNNYWtlZmlsZSBmb3IgR0NDCisjCisjVG9tIFN0IERlbmlzCisKKyN2ZXJzaW9uIG9mIGxpYnJhcnkgCitWRVJTSU9OPTAuNDAKKworVlBBVEg9QHNyY2RpckAKK3NyY2Rpcj1Ac3JjZGlyQAorCisjIERyb3BiZWFyIHRha2VzIGZsYWdzIGZyb20gdGhlIHRvcGxldmVsIG1ha2VmaWxlCitDRkxBR1MgKz0gLUkkKHNyY2RpcikKKworI0NGTEFHUyAgKz0gIC1JLi8gLVdhbGwgLVcgLVdzaGFkb3cgLVdzaWduLWNvbXBhcmUKKworaWZuZGVmIElHTk9SRV9TUEVFRAorCisjZm9yIHNwZWVkIAorI0NGTEFHUyArPSAtTzMgLWZ1bnJvbGwtYWxsLWxvb3BzCisKKyNmb3Igc2l6ZSAKKyNDRkxBR1MgKz0gLU9zCisKKyN4ODYgb3B0aW1pemF0aW9ucyBbc2hvdWxkIGJlIHZhbGlkIGZvciBhbnkgR0NDIGluc3RhbGwgdGhvdWdoXQorI0NGTEFHUyAgKz0gLWZvbWl0LWZyYW1lLXBvaW50ZXIKKworI2RlYnVnCisjQ0ZMQUdTICs9IC1nMworCitlbmRpZgorCisjaW5zdGFsbCBhcyB0aGlzIHVzZXIKK2lmbmRlZiBJTlNUQUxMX0dST1VQCisgICBHUk9VUD13aGVlbAorZWxzZQorICAgR1JPVVA9JChJTlNUQUxMX0dST1VQKQorZW5kaWYKKworaWZuZGVmIElOU1RBTExfVVNFUgorICAgVVNFUj1yb290CitlbHNlCisgICBVU0VSPSQoSU5TVEFMTF9VU0VSKQorZW5kaWYKKworI2RlZmF1bHQgZmlsZXMgdG8gaW5zdGFsbAoraWZuZGVmIExJQk5BTUUKKyAgIExJQk5BTUU9bGlidG9tbWF0aC5hCitlbmRpZgorCitkZWZhdWx0OiAke0xJQk5BTUV9CisKK0hFQURFUlM9dG9tbWF0aC5oIHRvbW1hdGhfY2xhc3MuaCB0b21tYXRoX3N1cGVyY2xhc3MuaAorCisjTElCUEFUSC1UaGUgZGlyZWN0b3J5IGZvciBsaWJ0b21tYXRoIHRvIGJlIGluc3RhbGxlZCB0by4KKyNJTkNQQVRILVRoZSBkaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgaGVhZGVyIGZpbGVzIGZvciBsaWJ0b21tYXRoLgorI0RBVEFQQVRILVRoZSBkaXJlY3RvcnkgdG8gaW5zdGFsbCB0aGUgcGRmIGRvY3MuCitERVNURElSPQorTElCUEFUSD0vdXNyL2xpYgorSU5DUEFUSD0vdXNyL2luY2x1ZGUKK0RBVEFQQVRIPS91c3Ivc2hhcmUvZG9jL2xpYnRvbW1hdGgvcGRmCisKK09CSkVDVFM9Ym5jb3JlLm8gYm5fbXBfaW5pdC5vIGJuX21wX2NsZWFyLm8gYm5fbXBfZXhjaC5vIGJuX21wX2dyb3cubyBibl9tcF9zaHJpbmsubyBcCitibl9tcF9jbGFtcC5vIGJuX21wX3plcm8ubyAgYm5fbXBfc2V0Lm8gYm5fbXBfc2V0X2ludC5vIGJuX21wX2luaXRfc2l6ZS5vIGJuX21wX2NvcHkubyBcCitibl9tcF9pbml0X2NvcHkubyBibl9tcF9hYnMubyBibl9tcF9uZWcubyBibl9tcF9jbXBfbWFnLm8gYm5fbXBfY21wLm8gYm5fbXBfY21wX2QubyBcCitibl9tcF9yc2hkLm8gYm5fbXBfbHNoZC5vIGJuX21wX21vZF8yZC5vIGJuX21wX2Rpdl8yZC5vIGJuX21wX211bF8yZC5vIGJuX21wX2Rpdl8yLm8gXAorYm5fbXBfbXVsXzIubyBibl9zX21wX2FkZC5vIGJuX3NfbXBfc3ViLm8gYm5fZmFzdF9zX21wX211bF9kaWdzLm8gYm5fc19tcF9tdWxfZGlncy5vIFwKK2JuX2Zhc3Rfc19tcF9tdWxfaGlnaF9kaWdzLm8gYm5fc19tcF9tdWxfaGlnaF9kaWdzLm8gYm5fZmFzdF9zX21wX3Nxci5vIGJuX3NfbXBfc3FyLm8gXAorYm5fbXBfYWRkLm8gYm5fbXBfc3ViLm8gYm5fbXBfa2FyYXRzdWJhX211bC5vIGJuX21wX211bC5vIGJuX21wX2thcmF0c3ViYV9zcXIubyBcCitibl9tcF9zcXIubyBibl9tcF9kaXYubyBibl9tcF9tb2QubyBibl9tcF9hZGRfZC5vIGJuX21wX3N1Yl9kLm8gYm5fbXBfbXVsX2QubyBcCitibl9tcF9kaXZfZC5vIGJuX21wX21vZF9kLm8gYm5fbXBfZXhwdF9kLm8gYm5fbXBfYWRkbW9kLm8gYm5fbXBfc3VibW9kLm8gXAorYm5fbXBfbXVsbW9kLm8gYm5fbXBfc3FybW9kLm8gYm5fbXBfZ2NkLm8gYm5fbXBfbGNtLm8gYm5fZmFzdF9tcF9pbnZtb2QubyBibl9tcF9pbnZtb2QubyBcCitibl9tcF9yZWR1Y2UubyBibl9tcF9tb250Z29tZXJ5X3NldHVwLm8gYm5fZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZS5vIGJuX21wX21vbnRnb21lcnlfcmVkdWNlLm8gXAorYm5fbXBfZXhwdG1vZF9mYXN0Lm8gYm5fbXBfZXhwdG1vZC5vIGJuX21wXzJleHB0Lm8gYm5fbXBfbl9yb290Lm8gYm5fbXBfamFjb2JpLm8gYm5fcmV2ZXJzZS5vIFwKK2JuX21wX2NvdW50X2JpdHMubyBibl9tcF9yZWFkX3Vuc2lnbmVkX2Jpbi5vIGJuX21wX3JlYWRfc2lnbmVkX2Jpbi5vIGJuX21wX3RvX3Vuc2lnbmVkX2Jpbi5vIFwKK2JuX21wX3RvX3NpZ25lZF9iaW4ubyBibl9tcF91bnNpZ25lZF9iaW5fc2l6ZS5vIGJuX21wX3NpZ25lZF9iaW5fc2l6ZS5vICBcCitibl9tcF94b3IubyBibl9tcF9hbmQubyBibl9tcF9vci5vIGJuX21wX3JhbmQubyBibl9tcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbi5vIFwKK2JuX21wX3ByaW1lX2lzX2RpdmlzaWJsZS5vIGJuX3ByaW1lX3RhYi5vIGJuX21wX3ByaW1lX2Zlcm1hdC5vIGJuX21wX3ByaW1lX21pbGxlcl9yYWJpbi5vIFwKK2JuX21wX3ByaW1lX2lzX3ByaW1lLm8gYm5fbXBfcHJpbWVfbmV4dF9wcmltZS5vIGJuX21wX2RyX3JlZHVjZS5vIFwKK2JuX21wX2RyX2lzX21vZHVsdXMubyBibl9tcF9kcl9zZXR1cC5vIGJuX21wX3JlZHVjZV9zZXR1cC5vIFwKK2JuX21wX3Rvb21fbXVsLm8gYm5fbXBfdG9vbV9zcXIubyBibl9tcF9kaXZfMy5vIGJuX3NfbXBfZXhwdG1vZC5vIFwKK2JuX21wX3JlZHVjZV8yay5vIGJuX21wX3JlZHVjZV9pc18yay5vIGJuX21wX3JlZHVjZV8ya19zZXR1cC5vIFwKK2JuX21wX3JlZHVjZV8ya19sLm8gYm5fbXBfcmVkdWNlX2lzXzJrX2wubyBibl9tcF9yZWR1Y2VfMmtfc2V0dXBfbC5vIFwKK2JuX21wX3JhZGl4X3NtYXAubyBibl9tcF9yZWFkX3JhZGl4Lm8gYm5fbXBfdG9yYWRpeC5vIGJuX21wX3JhZGl4X3NpemUubyBcCitibl9tcF9mcmVhZC5vIGJuX21wX2Z3cml0ZS5vIGJuX21wX2NudF9sc2IubyBibl9lcnJvci5vIFwKK2JuX21wX2luaXRfbXVsdGkubyBibl9tcF9jbGVhcl9tdWx0aS5vIGJuX21wX2V4dGV1Y2xpZC5vIGJuX21wX3RvcmFkaXhfbi5vIFwKK2JuX21wX3ByaW1lX3JhbmRvbV9leC5vIGJuX21wX2dldF9pbnQubyBibl9tcF9zcXJ0Lm8gYm5fbXBfaXNfc3F1YXJlLm8gYm5fbXBfaW5pdF9zZXQubyBcCitibl9tcF9pbml0X3NldF9pbnQubyBibl9tcF9pbnZtb2Rfc2xvdy5vIGJuX21wX3ByaW1lX3JhYmluX21pbGxlcl90cmlhbHMubyBcCitibl9tcF90b19zaWduZWRfYmluX24ubyBibl9tcF90b191bnNpZ25lZF9iaW5fbi5vCisKKyQoTElCTkFNRSk6ICAkKE9CSkVDVFMpCisJJChBUikgJChBUkZMQUdTKSAkQCAkKE9CSkVDVFMpCisJJChSQU5MSUIpICRACisKKyNtYWtlIGEgcHJvZmlsZWQgbGlicmFyeSAodGFrZXMgYSB3aGlsZSEhISkKKyMKKyMgVGhpcyB3aWxsIGJ1aWxkIHRoZSBsaWJyYXJ5IHdpdGggcHJvZmlsZSBnZW5lcmF0aW9uCisjIHRoZW4gcnVuIHRoZSB0ZXN0IGRlbW8gYW5kIHJlYnVpbGQgdGhlIGxpYnJhcnkuCisjIAorIyBTbyBmYXIgSSd2ZSBzZWVuIGltcHJvdmVtZW50cyBpbiB0aGUgTVAgbWF0aAorcHJvZmlsZWQ6CisJbWFrZSBDRkxBR1M9IiQoQ0ZMQUdTKSAtZnByb2ZpbGUtYXJjcyAtRFRFU1RJTkciIHRpbWluZworCS4vbHRtdGVzdAorCXJtIC1mICouYSAqLm8gbHRtdGVzdAorCW1ha2UgQ0ZMQUdTPSIkKENGTEFHUykgLWZicmFuY2gtcHJvYmFiaWxpdGllcyIKKworI21ha2UgYSBzaW5nbGUgb2JqZWN0IHByb2ZpbGVkIGxpYnJhcnkgCitwcm9maWxlZF9zaW5nbGU6CisJcGVybCBnZW4ucGwKKwkkKENDKSAkKENGTEFHUykgLWZwcm9maWxlLWFyY3MgLURURVNUSU5HIC1jIG1waS5jIC1vIG1waS5vCisJJChDQykgJChDRkxBR1MpIC1EVEVTVElORyAtRFRJTUVSIGRlbW8vdGltaW5nLmMgbXBpLm8gLW8gbHRtdGVzdAorCS4vbHRtdGVzdAorCXJtIC1mICoubyBsdG10ZXN0CisJJChDQykgJChDRkxBR1MpIC1mYnJhbmNoLXByb2JhYmlsaXRpZXMgLURURVNUSU5HIC1jIG1waS5jIC1vIG1waS5vCisJJChBUikgJChBUkZMQUdTKSAkKExJQk5BTUUpIG1waS5vCisJJChSQU5MSUIpICQoTElCTkFNRSkJCisKK2luc3RhbGw6ICQoTElCTkFNRSkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoTElCUEFUSCkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoSU5DUEFUSCkKKwlpbnN0YWxsIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChMSUJOQU1FKSAkKERFU1RESVIpJChMSUJQQVRIKQorCWluc3RhbGwgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKEhFQURFUlMpICQoREVTVERJUikkKElOQ1BBVEgpCisKK3Rlc3Q6ICQoTElCTkFNRSkgZGVtby9kZW1vLm8KKwkkKENDKSAkKENGTEFHUykgZGVtby9kZW1vLm8gJChMSUJOQU1FKSAtbyB0ZXN0CisJCittdGVzdDogdGVzdAkKKwljZCBtdGVzdCA7ICQoQ0MpICQoQ0ZMQUdTKSBtdGVzdC5jIC1vIG10ZXN0CisgICAgICAgIAordGltaW5nOiAkKExJQk5BTUUpCisJJChDQykgJChDRkxBR1MpIC1EVElNRVIgZGVtby90aW1pbmcuYyAkKExJQk5BTUUpIC1vIGx0bXRlc3QKKworIyBtYWtlcyB0aGUgTFRNIGJvb2sgRFZJIGZpbGUsIHJlcXVpcmVzIHRldGV4LCBwZXJsIGFuZCBtYWtlaW5kZXggW3BhcnQgb2YgdGV0ZXggSSB0aGlua10KK2RvY2R2aTogdG9tbWF0aC5zcmMKKwljZCBwaWNzIDsgTUFLRT0ke01BS0V9ICR7TUFLRX0gCisJZWNobyAiaGVsbG8iID4gdG9tbWF0aC5pbmQKKwlwZXJsIGJvb2tlci5wbAorCWxhdGV4IHRvbW1hdGggPiAvZGV2L251bGwKKwlsYXRleCB0b21tYXRoID4gL2Rldi9udWxsCisJbWFrZWluZGV4IHRvbW1hdGgKKwlsYXRleCB0b21tYXRoID4gL2Rldi9udWxsCisKKyMgcG9zdGVyLCBtYWtlcyB0aGUgc2luZ2xlIHBhZ2UgUERGIHBvc3RlcgorcG9zdGVyOiBwb3N0ZXIudGV4CisJcGRmbGF0ZXggcG9zdGVyCisJcm0gLWYgcG9zdGVyLmF1eCBwb3N0ZXIubG9nIAorCisjIG1ha2VzIHRoZSBMVE0gYm9vayBQREYgZmlsZSwgcmVxdWlyZXMgdGV0ZXgsIGNsZWFucyB1cCB0aGUgTGFUZVggdGVtcCBmaWxlcworZG9jczogICBkb2NkdmkKKwlkdmlwZGYgdG9tbWF0aAorCXJtIC1mIHRvbW1hdGgubG9nIHRvbW1hdGguYXV4IHRvbW1hdGguZHZpIHRvbW1hdGguaWR4IHRvbW1hdGgudG9jIHRvbW1hdGgubG9mIHRvbW1hdGguaW5kIHRvbW1hdGguaWxnCisJY2QgcGljcyA7IE1BS0U9JHtNQUtFfSAke01BS0V9IGNsZWFuCisJCisjTFRNIHVzZXIgbWFudWFsCittYW5kdmk6IGJuLnRleAorCWVjaG8gImhlbGxvIiA+IGJuLmluZAorCWxhdGV4IGJuID4gL2Rldi9udWxsCisJbGF0ZXggYm4gPiAvZGV2L251bGwKKwltYWtlaW5kZXggYm4KKwlsYXRleCBibiA+IC9kZXYvbnVsbAorCisjTFRNIHVzZXIgbWFudWFsIFtwZGZdCittYW51YWw6CW1hbmR2aQorCXBkZmxhdGV4IGJuID4vZGV2L251bGwKKwlybSAtZiBibi5hdXggYm4uZHZpIGJuLmxvZyBibi5pZHggYm4ubG9mIGJuLm91dCBibi50b2MKKworcHJldHR5OiAKKwlwZXJsIHByZXR0eS5idWlsZAorCitjbGVhbjoKKwlybSAtZiAqLmJhdCAqLnBkZiAqLm8gKi5hICoub2JqICoubGliICouZXhlICouZGxsIGV0Y2xpYi8qLm8gZGVtby9kZW1vLm8gdGVzdCBsdG10ZXN0IG1waXRlc3QgbXRlc3QvbXRlc3QgbXRlc3QvbXRlc3QuZXhlIFwKKyAgICAgICAgKi5pZHggKi50b2MgKi5sb2cgKi5hdXggKi5kdmkgKi5sb2YgKi5pbmQgKi5pbGcgKi5wcyAqLmxvZyAqLnMgbXBpLmMgKi5kYSAqLmR5biAqLmRwaSB0b21tYXRoLnRleCBgZmluZCAuIC10eXBlIGYgfCBncmVwIFt+XSB8IHhhcmdzYCAqLmxvICoubGEKKwlybSAtcmYgLmxpYnMKKwljZCBldGMgOyBNQUtFPSR7TUFLRX0gJHtNQUtFfSBjbGVhbgorCWNkIHBpY3MgOyBNQUtFPSR7TUFLRX0gJHtNQUtFfSBjbGVhbgorCisjemlwdXAgdGhlIHByb2plY3QgKHRha2UgdGhhdCEpCitub19vb3BzOiBjbGVhbgorCWNkIC4uIDsgY3ZzIGNvbW1pdCAKKwllY2hvIFNjYW5uaW5nIGZvciBzY3JhdGNoL2RpcnR5IGZpbGVzCisJZmluZCAuIC10eXBlIGYgfCBncmVwIC12IENWUyB8IHhhcmdzIC1uIDEgYmFzaCBtZXNzLnNoCisKK3ppcHVwOiBjbGVhbiBtYW51YWwgcG9zdGVyIGRvY3MKKwlwZXJsIGdlbi5wbCA7IG12IG1waS5jIHByZV9nZW4vIDsgXAorCWNkIC4uIDsgcm0gLXJmIGx0bSogbGlidG9tbWF0aC0kKFZFUlNJT04pIDsgbWtkaXIgbGlidG9tbWF0aC0kKFZFUlNJT04pIDsgXAorCWNwIC1SIC4vbGlidG9tbWF0aC8qIC4vbGlidG9tbWF0aC0kKFZFUlNJT04pLyA7IFwKKwl0YXIgLWMgbGlidG9tbWF0aC0kKFZFUlNJT04pLyogfCBiemlwMiAtOXZ2YyA+IGx0bS0kKFZFUlNJT04pLnRhci5iejIgOyBcCisJemlwIC05IC1yIGx0bS0kKFZFUlNJT04pLnppcCBsaWJ0b21tYXRoLSQoVkVSU0lPTikvKiA7IFwKKwltdiAtZiBsdG0qIH4gOyBybSAtcmYgbGlidG9tbWF0aC0kKFZFUlNJT04pCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuLnRleCBiL2xpYnRvbW1hdGgvYm4udGV4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZWNlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuLnRleApAQCAtMCwwICsxLDE4MzUgQEAKK1xkb2N1bWVudGNsYXNzW3N5bnBhcGVyXXtib29rfQorXHVzZXBhY2thZ2V7aHlwZXJyZWZ9CitcdXNlcGFja2FnZXttYWtlaWR4fQorXHVzZXBhY2thZ2V7YW1zc3ltYn0KK1x1c2VwYWNrYWdle2NvbG9yfQorXHVzZXBhY2thZ2V7YWxsdHR9CitcdXNlcGFja2FnZXtncmFwaGljeH0KK1x1c2VwYWNrYWdle2xheW91dH0KK1xkZWZcdW5pb257XGN1cH0KK1xkZWZcaW50ZXJzZWN0e1xjYXB9CitcZGVmXGdldHNyYW5kb217XHN0YWNrcmVse1xybSBSfXtcZ2V0c319CitcZGVmXGNyb3Nze1x0aW1lc30KK1xkZWZcY2F0e1xoc3BhY2V7MC41ZW19IFx8IFxoc3BhY2V7MC41ZW19fQorXGRlZlxjYXRueyRcfCR9CitcZGVmXGRpdmlkZXN7XGhzcGFjZXswLjNlbX0gfCBcaHNwYWNlezAuM2VtfX0KK1xkZWZcbmVxdWl2e1xub3RcZXF1aXZ9CitcZGVmXGFwcHJveHtccmFpc2Vib3h7MC4yZXh9e1xtYm94e1xzbWFsbCAkXHNpbSR9fX0KK1xkZWZcbGNte3tccm0gbGNtfX0KK1xkZWZcZ2Nke3tccm0gZ2NkfX0KK1xkZWZcbG9ne3tccm0gbG9nfX0KK1xkZWZcb3Jke3tccm0gb3JkfX0KK1xkZWZcYWJze3tcbWF0aGl0IGFic319CitcZGVmXHJlcHt7XG1hdGhpdCByZXB9fQorXGRlZlxtb2R7e1xtYXRoaXRcIG1vZFwgfX0KK1xyZW5ld2NvbW1hbmR7XHBtb2R9WzFde1wgKHtccm0gbW9kXCB9eyMxfSl9CitcbmV3Y29tbWFuZHtcZmxvb3J9WzFde1xsZWZ0XGxmbG9vcnsjMX1ccmlnaHRccmZsb29yfQorXG5ld2NvbW1hbmR7XGNlaWx9WzFde1xsZWZ0XGxjZWlseyMxfVxyaWdodFxyY2VpbH0KK1xkZWZcT3J7e1xybVwgb3JcIH19CitcZGVmXEFuZHt7XHJtXCBhbmRcIH19CitcZGVmXGlmZntcaHNwYWNlezFlbX1cTG9uZ2xlZnRyaWdodGFycm93XGhzcGFjZXsxZW19fQorXGRlZlxpbXBsaWVze1xSaWdodGFycm93fQorXGRlZlx1bmRlZmluZWR7e1xybSBgYHVuZGVmaW5lZCJ9fQorXGRlZlxQcm9vZntcdnNwYWNlezFleH1cbm9pbmRlbnQge1xiZiBQcm9vZjp9XGhzcGFjZXsxZW19fQorXGxldFxvbGRwaGlccGhpCitcZGVmXHBoaXtcdmFycGhpfQorXGRlZlxQcnt7XHJtIFByfX0KK1xuZXdjb21tYW5ke1xzdHJ9WzFde3tcbWF0aGJmeyMxfX19CitcZGVmXEZ7e1xtYXRoYmIgRn19CitcZGVmXE57e1xtYXRoYmIgTn19CitcZGVmXFp7e1xtYXRoYmIgWn19CitcZGVmXFJ7e1xtYXRoYmIgUn19CitcZGVmXEN7e1xtYXRoYmIgQ319CitcZGVmXFF7e1xtYXRoYmIgUX19CitcZGVmaW5lY29sb3J7REdyYXl9e2dyYXl9ezAuNX0KK1xuZXdjb21tYW5ke1xlbWFpbGFkZHJ9WzFde1xtYm94eyQ8JHsjMX0kPiR9fQorXGRlZlx0d2lkZGxle1xyYWlzZWJveHswLjNleH17XG1ib3h7XHRpbnkgJFxzaW0kfX19CitcZGVmXGdhcHtcdnNwYWNlezAuNWV4fX0KK1xtYWtlaW5kZXgKK1xiZWdpbntkb2N1bWVudH0KK1xmcm9udG1hdHRlcgorXHBhZ2VzdHlsZXtlbXB0eX0KK1x0aXRsZXtMaWJUb21NYXRoIFVzZXIgTWFudWFsIFxcIHYwLjQwfQorXGF1dGhvcntUb20gU3QgRGVuaXMgXFwgdG9tc3RkZW5pc0BnbWFpbC5jb219CitcbWFrZXRpdGxlCitUaGlzIHRleHQsIHRoZSBsaWJyYXJ5IGFuZCB0aGUgYWNjb21wYW55aW5nIHRleHRib29rIGFyZSBhbGwgaGVyZWJ5IHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbi4gIFRoaXMgYm9vayBoYXMgYmVlbiAKK2Zvcm1hdHRlZCBmb3IgQjUgWzE3NngyNTBdIHBhcGVyIHVzaW5nIHRoZSBcTGFUZVh7fSB7XGVtIGJvb2t9IG1hY3JvIHBhY2thZ2UuCisKK1x2c3BhY2V7MTBjbX0KKworXGJlZ2lue2ZsdXNocmlnaHR9T3BlbiBTb3VyY2UuICBPcGVuIEFjYWRlbWlhLiAgT3BlbiBNaW5kcy4KKworXG1ib3h7IH0KKworVG9tIFN0IERlbmlzLAorCitPbnRhcmlvLCBDYW5hZGEKK1xlbmR7Zmx1c2hyaWdodH0KKworXHRhYmxlb2Zjb250ZW50cworXGxpc3RvZmZpZ3VyZXMKK1xtYWlubWF0dGVyCitccGFnZXN0eWxle2hlYWRpbmdzfQorXGNoYXB0ZXJ7SW50cm9kdWN0aW9ufQorXHNlY3Rpb257V2hhdCBpcyBMaWJUb21NYXRoP30KK0xpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IG9mIHNvdXJjZSBjb2RlIHdoaWNoIHByb3ZpZGVzIGEgc2VyaWVzIG9mIGVmZmljaWVudCBhbmQgY2FyZWZ1bGx5IHdyaXR0ZW4gZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcKK2xhcmdlIGludGVnZXIgbnVtYmVycy4gIEl0IHdhcyB3cml0dGVuIGluIHBvcnRhYmxlIElTTyBDIHNvdXJjZSBjb2RlIHNvIHRoYXQgaXQgd2lsbCBidWlsZCBvbiBhbnkgcGxhdGZvcm0gd2l0aCBhIGNvbmZvcm1pbmcKK0MgY29tcGlsZXIuICAKKworSW4gYSBudXRzaGVsbCB0aGUgbGlicmFyeSB3YXMgd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aCB2ZXJib3NlIGNvbW1lbnRzIHRvIGhlbHAgaW5zdHJ1Y3QgY29tcHV0ZXIgc2NpZW5jZSBzdHVkZW50cyBob3cKK3RvIGltcGxlbWVudCBgYGJpZ251bScnIG1hdGguICBIb3dldmVyLCB0aGUgcmVzdWx0aW5nIGNvZGUgaGFzIHByb3ZlbiB0byBiZSB2ZXJ5IHVzZWZ1bC4gIEl0IGhhcyBiZWVuIHVzZWQgYnkgbnVtZXJvdXMgCit1bml2ZXJzaXRpZXMsIGNvbW1lcmNpYWwgYW5kIG9wZW4gc291cmNlIHNvZnR3YXJlIGRldmVsb3BlcnMuICBJdCBoYXMgYmVlbiB1c2VkIG9uIGEgdmFyaWV0eSBvZiBwbGF0Zm9ybXMgcmFuZ2luZyBmcm9tCitMaW51eCBhbmQgV2luZG93cyBiYXNlZCB4ODYgdG8gQVJNIGJhc2VkIEdhbWVib3lzIGFuZCBQUEMgYmFzZWQgTWFjT1MgbWFjaGluZXMuICAKKworXHNlY3Rpb257TGljZW5zZX0KK0FzIG9mIHRoZSB2MC4yNSB0aGUgbGlicmFyeSBzb3VyY2UgY29kZSBoYXMgYmVlbiBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4gd2l0aCBldmVyeSBuZXcgcmVsZWFzZS4gIEFzIG9mIHRoZSB2MC4yOAorcmVsZWFzZSB0aGUgdGV4dGJvb2sgYGBJbXBsZW1lbnRpbmcgTXVsdGlwbGUgUHJlY2lzaW9uIEFyaXRobWV0aWMnJyBoYXMgYmVlbiBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4gd2l0aCBldmVyeSBuZXcKK3JlbGVhc2UgYXMgd2VsbC4gIFRoaXMgdGV4dGJvb2sgaXMgbWVhbnQgdG8gY29tcGxpbWVudCB0aGUgcHJvamVjdCBieSBwcm92aWRpbmcgYSBtb3JlIHNvbGlkIHdhbGt0aHJvdWdoIG9mIHRoZSBkZXZlbG9wbWVudAorYWxnb3JpdGhtcyB1c2VkIGluIHRoZSBsaWJyYXJ5LgorCitTaW5jZSBib3RoXGZvb3Rub3Rle05vdGUgdGhhdCB0aGUgTVBJIGZpbGVzIHVuZGVyIG10ZXN0LyBhcmUgY29weXJpZ2h0ZWQgYnkgTWljaGFlbCBGcm9tYmVyZ2VyLiAgVGhleSBhcmUgbm90IHJlcXVpcmVkIHRvIHVzZSBMaWJUb21NYXRoLn0gYXJlIGluIHRoZSAKK3B1YmxpYyBkb21haW4gZXZlcnlvbmUgaXMgZW50aXRsZWQgdG8gZG8gd2l0aCB0aGVtIGFzIHRoZXkgc2VlIGZpdC4KKworXHNlY3Rpb257QnVpbGRpbmcgTGliVG9tTWF0aH0KKworTGliVG9tTWF0aCBpcyBtZWFudCB0byBiZSB2ZXJ5IGBgR0NDIGZyaWVuZGx5JycgYXMgaXQgY29tZXMgd2l0aCBhIG1ha2VmaWxlIHdlbGwgc3VpdGVkIGZvciBHQ0MuICBIb3dldmVyLCB0aGUgbGlicmFyeSB3aWxsCithbHNvIGJ1aWxkIGluIE1TVkMsIEJvcmxhbmQgQyBvdXQgb2YgdGhlIGJveC4gIEZvciBhbnkgb3RoZXIgSVNPIEMgY29tcGlsZXIgYSBtYWtlZmlsZSB3aWxsIGhhdmUgdG8gYmUgbWFkZSBieSB0aGUgZW5kCitkZXZlbG9wZXIuICAKKworXHN1YnNlY3Rpb257U3RhdGljIExpYnJhcmllc30KK1RvIGJ1aWxkIGFzIGEgc3RhdGljIGxpYnJhcnkgZm9yIEdDQyBpc3N1ZSB0aGUgZm9sbG93aW5nCitcYmVnaW57YWxsdHR9CittYWtlCitcZW5ke2FsbHR0fQorCitjb21tYW5kLiAgVGhpcyB3aWxsIGJ1aWxkIHRoZSBsaWJyYXJ5IGFuZCBhcmNoaXZlIHRoZSBvYmplY3QgZmlsZXMgaW4gYGBsaWJ0b21tYXRoLmEnJy4gIE5vdyB5b3UgbGluayBhZ2FpbnN0IAordGhhdCBhbmQgaW5jbHVkZSBgYHRvbW1hdGguaCcnIHdpdGhpbiB5b3VyIHByb2dyYW1zLiAgQWx0ZXJuYXRpdmVseSB0byBidWlsZCB3aXRoIE1TVkMgaXNzdWUgdGhlIGZvbGxvd2luZworXGJlZ2lue2FsbHR0fQorbm1ha2UgLWYgbWFrZWZpbGUubXN2YworXGVuZHthbGx0dH0KKworVGhpcyB3aWxsIGJ1aWxkIHRoZSBsaWJyYXJ5IGFuZCBhcmNoaXZlIHRoZSBvYmplY3QgZmlsZXMgaW4gYGB0b21tYXRoLmxpYicnLiAgVGhpcyBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBNU1ZDIAordmVyc2lvbiA2LjAwIHdpdGggc2VydmljZSBwYWNrIDUuICAKKworXHN1YnNlY3Rpb257U2hhcmVkIExpYnJhcmllc30KK1RvIGJ1aWxkIGFzIGEgc2hhcmVkIGxpYnJhcnkgZm9yIEdDQyBpc3N1ZSB0aGUgZm9sbG93aW5nCitcYmVnaW57YWxsdHR9CittYWtlIC1mIG1ha2VmaWxlLnNoYXJlZAorXGVuZHthbGx0dH0KK1RoaXMgcmVxdWlyZXMgdGhlIGBgbGlidG9vbCcnIHBhY2thZ2UgKGNvbW1vbiBvbiBtb3N0IExpbnV4L0JTRCBzeXN0ZW1zKS4gIEl0IHdpbGwgYnVpbGQgTGliVG9tTWF0aCBhcyBib3RoIHNoYXJlZAorYW5kIHN0YXRpYyB0aGVuIGluc3RhbGwgKGJ5IGRlZmF1bHQpIGludG8gL3Vzci9saWIgYXMgd2VsbCBhcyBpbnN0YWxsIHRoZSBoZWFkZXIgZmlsZXMgaW4gL3Vzci9pbmNsdWRlLiAgVGhlIHNoYXJlZCAKK2xpYnJhcnkgKHJlc291cmNlKSB3aWxsIGJlIGNhbGxlZCBgYGxpYnRvbW1hdGgubGEnJyB3aGlsZSB0aGUgc3RhdGljIGxpYnJhcnkgY2FsbGVkIGBgbGlidG9tbWF0aC5hJycuICBHZW5lcmFsbHkgCit5b3UgdXNlIGxpYnRvb2wgdG8gbGluayB5b3VyIGFwcGxpY2F0aW9uIGFnYWluc3QgdGhlIHNoYXJlZCBvYmplY3QuICAKKworVGhlcmUgaXMgbGltaXRlZCBzdXBwb3J0IGZvciBtYWtpbmcgYSBgYERMTCcnIGluIHdpbmRvd3MgdmlhIHRoZSBgYG1ha2VmaWxlLmN5Z3dpblxfZGxsJycgbWFrZWZpbGUuICBJdCByZXF1aXJlcyAKK0N5Z3dpbiB0byB3b3JrIHdpdGggc2luY2UgaXQgcmVxdWlyZXMgdGhlIGF1dG8tZXhwb3J0L2ltcG9ydCBmdW5jdGlvbmFsaXR5LiAgVGhlIHJlc3VsdGluZyBETEwgYW5kIGltcG9ydCBsaWJyYXJ5IAorYGBsaWJ0b21tYXRoLmRsbC5hJycgY2FuIGJlIHVzZWQgdG8gbGluayBMaWJUb21NYXRoIGR5bmFtaWNhbGx5IHRvIGFueSBXaW5kb3dzIHByb2dyYW0gdXNpbmcgQ3lnd2luLgorCitcc3Vic2VjdGlvbntUZXN0aW5nfQorVG8gYnVpbGQgdGhlIGxpYnJhcnkgYW5kIHRoZSB0ZXN0IGhhcm5lc3MgdHlwZQorCitcYmVnaW57YWxsdHR9CittYWtlIHRlc3QKK1xlbmR7YWxsdHR9CisKK1RoaXMgd2lsbCBidWlsZCB0aGUgbGlicmFyeSwgYGB0ZXN0JycgYW5kIGBgbXRlc3QvbXRlc3QnJy4gIFRoZSBgYHRlc3QnJyBwcm9ncmFtIHdpbGwgYWNjZXB0IHRlc3QgdmVjdG9ycyBhbmQgdmVyaWZ5IHRoZQorcmVzdWx0cy4gIGBgbXRlc3QvbXRlc3QnJyB3aWxsIGdlbmVyYXRlIHRlc3QgdmVjdG9ycyB1c2luZyB0aGUgTVBJIGxpYnJhcnkgYnkgTWljaGFlbCBGcm9tYmVyZ2VyXGZvb3Rub3Rle0EgY29weSBvZiBNUEkKK2lzIGluY2x1ZGVkIGluIHRoZSBwYWNrYWdlfS4gIFNpbXBseSBwaXBlIG10ZXN0IGludG8gdGVzdCB1c2luZworCitcYmVnaW57YWxsdHR9CittdGVzdC9tdGVzdCB8IHRlc3QKK1xlbmR7YWxsdHR9CisKK0lmIHlvdSBkbyBub3QgaGF2ZSBhIGBgL2Rldi91cmFuZG9tJycgc3R5bGUgUk5HIHNvdXJjZSB5b3Ugd2lsbCBoYXZlIHRvIHdyaXRlIHlvdXIgb3duIFBSTkcgYW5kIHNpbXBseSBwaXBlIHRoYXQgaW50byAKK210ZXN0LiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgUFJORyBwcm9ncmFtIGlzIGNhbGxlZCBgYG15cHJuZycnIHNpbXBseSBpbnZva2UKKworXGJlZ2lue2FsbHR0fQorbXlwcm5nIHwgbXRlc3QvbXRlc3QgfCB0ZXN0CitcZW5ke2FsbHR0fQorCitUaGlzIHdpbGwgb3V0cHV0IGEgcm93IG9mIG51bWJlcnMgdGhhdCBhcmUgaW5jcmVhc2luZy4gIEVhY2ggY29sdW1uIGlzIGEgZGlmZmVyZW50IHRlc3QgKHN1Y2ggYXMgYWRkaXRpb24sIG11bHRpcGxpY2F0aW9uLCBldGMpCit0aGF0IGlzIGJlaW5nIHBlcmZvcm1lZC4gIFRoZSBudW1iZXJzIHJlcHJlc2VudCBob3cgbWFueSB0aW1lcyB0aGUgdGVzdCB3YXMgaW52b2tlZC4gIElmIGFuIGVycm9yIGlzIGRldGVjdGVkIHRoZSBwcm9ncmFtCit3aWxsIGV4aXQgd2l0aCBhIGR1bXAgb2YgdGhlIHJlbGV2ZW50IG51bWJlcnMgaXQgd2FzIHdvcmtpbmcgd2l0aC4KKworXHNlY3Rpb257QnVpbGQgQ29uZmlndXJhdGlvbn0KK0xpYlRvbU1hdGggY2FuIGNvbmZpZ3VyZWQgYXQgYnVpbGQgdGltZSBpbiB0aHJlZSBwaGFzZXMgd2Ugc2hhbGwgY2FsbCBgYGRlcGVuZHMnJywgYGB0d2Vha3MnJyBhbmQgYGB0cmltcycnLiAgCitFYWNoIHBoYXNlIGNoYW5nZXMgaG93IHRoZSBsaWJyYXJ5IGlzIGJ1aWx0IGFuZCB0aGV5IGFyZSBhcHBsaWVkIG9uZSBhZnRlciBhbm90aGVyIHJlc3BlY3RpdmVseS4gIAorCitUbyBtYWtlIHRoZSBzeXN0ZW0gbW9yZSBwb3dlcmZ1bCB5b3UgY2FuIHR3ZWFrIHRoZSBidWlsZCBwcm9jZXNzLiAgQ2xhc3NlcyBhcmUgZGVmaW5lZCBpbiB0aGUgZmlsZQorYGB0b21tYXRoXF9zdXBlcmNsYXNzLmgnJy4gIEJ5IGRlZmF1bHQsIHRoZSBzeW1ib2wgYGBMVE1cX0FMTCcnIHNoYWxsIGJlIGRlZmluZWQgd2hpY2ggc2ltcGx5IAoraW5zdHJ1Y3RzIHRoZSBzeXN0ZW0gdG8gYnVpbGQgYWxsIG9mIHRoZSBmdW5jdGlvbnMuICBUaGlzIGlzIGhvdyBMaWJUb21NYXRoIHVzZWQgdG8gYmUgcGFja2FnZWQuICBUaGlzIHdpbGwgZ2l2ZSB5b3UgCithY2Nlc3MgdG8gZXZlcnkgZnVuY3Rpb24gTGliVG9tTWF0aCBvZmZlcnMuCisKK0hvd2V2ZXIsIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSBzdWNoIGEgYnVpbGQgaXMgbm90IG9wdGlvbmFsLiAgRm9yIGluc3RhbmNlLCB5b3Ugd2FudCB0byBwZXJmb3JtIFJTQSBvcGVyYXRpb25zLiAgWW91IAorZG9uJ3QgbmVlZCB0aGUgdmFzdCBtYWpvcml0eSBvZiB0aGUgbGlicmFyeSB0byBwZXJmb3JtIHRoZXNlIG9wZXJhdGlvbnMuICBBc2lkZSBmcm9tIExUTVxfQUxMIHRoZXJlIGlzIAorYW5vdGhlciBwcmUtLWRlZmluZWQgY2xhc3MgYGBTQ1xfUlNBXF8xJycgd2hpY2ggd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgUlNBIGZyb20gTGliVG9tQ3J5cHQuICBBZGRpdGlvbmFsIAorY2xhc3NlcyBjYW4gYmUgZGVmaW5lZCBiYXNlIG9uIHRoZSBuZWVkIG9mIHRoZSB1c2VyLgorCitcc3Vic2VjdGlvbntCdWlsZCBEZXBlbmRzfQorSW4gdGhlIGZpbGUgdG9tbWF0aFxfY2xhc3MuaCB5b3Ugd2lsbCBzZWUgYSBsYXJnZSBsaXN0IG9mIEMgYGBkZWZpbmVzJycgZm9sbG93ZWQgYnkgYSBzZXJpZXMgb2YgYGBpZmRlZnMnJword2hpY2ggZnVydGhlciBkZWZpbmUgc3ltYm9scy4gIEFsbCBvZiB0aGUgc3ltYm9scyAodGVjaG5pY2FsbHkgdGhleSdyZSBtYWNyb3MgJFxsZG90cyQpIHJlcHJlc2VudCBhIGdpdmVuIEMgc291cmNlCitmaWxlLiAgRm9yIGluc3RhbmNlLCBCTlxfTVBcX0FERFxfQyByZXByZXNlbnRzIHRoZSBmaWxlIGBgYm5cX21wXF9hZGQuYycnLiAgV2hlbiBhIGRlZmluZSBoYXMgYmVlbiBlbmFibGVkIHRoZQorZnVuY3Rpb24gaW4gdGhlIHJlc3BlY3RpdmUgZmlsZSB3aWxsIGJlIGNvbXBpbGVkIGFuZCBsaW5rZWQgaW50byB0aGUgbGlicmFyeS4gIEFjY29yZGluZ2x5IHdoZW4gdGhlIGRlZmluZQoraXMgYWJzZW50IHRoZSBmaWxlIHdpbGwgbm90IGJlIGNvbXBpbGVkIGFuZCBub3QgY29udHJpYnV0ZSBhbnkgc2l6ZSB0byB0aGUgbGlicmFyeS4KKworWW91IHdpbGwgYWxzbyBub3RlIHRoYXQgdGhlIGhlYWRlciB0b21tYXRoXF9jbGFzcy5oIGlzIGFjdHVhbGx5IHJlY3Vyc2l2ZWx5IGluY2x1ZGVkIChpdCBpbmNsdWRlcyBpdHNlbGYgdHdpY2UpLiAgCitUaGlzIGlzIHRvIGhlbHAgcmVzb2x2ZSBhcyBtYW55IGRlcGVuZGVuY2llcyBhcyBwb3NzaWJsZS4gIEluIHRoZSBsYXN0IHBhc3MgdGhlIHN5bWJvbCBMVE1cX0xBU1Qgd2lsbCBiZSBkZWZpbmVkLiAgCitUaGlzIGlzIHVzZWZ1bCBmb3IgYGB0cmltcycnLgorCitcc3Vic2VjdGlvbntCdWlsZCBUd2Vha3N9CitBIHR3ZWFrIGlzIGFuIGFsZ29yaXRobSBgYGFsdGVybmF0aXZlJycuICBGb3IgZXhhbXBsZSwgdG8gcHJvdmlkZSB0cmFkZW9mZnMgKHVzdWFsbHkgYmV0d2VlbiBzaXplIGFuZCBzcGFjZSkuCitUaGV5IGNhbiBiZSBlbmFibGVkIGF0IGFueSBwYXNzIG9mIHRoZSBjb25maWd1cmF0aW9uIHBoYXNlLgorCitcYmVnaW57c21hbGx9CitcYmVnaW57Y2VudGVyfQorXGJlZ2lue3RhYnVsYXJ9e3xsfGx8fQorXGhsaW5lIFx0ZXh0YmZ7RGVmaW5lfSAmIFx0ZXh0YmZ7UHVycG9zZX0gXFwKK1xobGluZSBCTlxfTVBcX0RJVlxfU01BTEwgJiBFbmFibGVzIGEgc2xvd2VyLCBzbWFsbGVyIGFuZCBlcXVhbGx5IFxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICYgZnVuY3Rpb25hbCBtcFxfZGl2KCkgZnVuY3Rpb24gXFwKK1xobGluZQorXGVuZHt0YWJ1bGFyfQorXGVuZHtjZW50ZXJ9CitcZW5ke3NtYWxsfQorCitcc3Vic2VjdGlvbntCdWlsZCBUcmltc30KK0EgdHJpbSBpcyBhIG1hbm5lciBvZiByZW1vdmluZyBmdW5jdGlvbmFsaXR5IGZyb20gYSBmdW5jdGlvbiB0aGF0IGlzIG5vdCByZXF1aXJlZC4gIEZvciBpbnN0YW5jZSwgdG8gcGVyZm9ybQorUlNBIGNyeXB0b2dyYXBoeSB5b3Ugb25seSByZXF1aXJlIGV4cG9uZW50aWF0aW9uIHdpdGggb2RkIG1vZHVsaSBzbyBldmVuIG1vZHVsaSBzdXBwb3J0IGNhbiBiZSBzYWZlbHkgcmVtb3ZlZC4gIAorQnVpbGQgdHJpbXMgYXJlIG1lYW50IHRvIGJlIGRlZmluZWQgb24gdGhlIGxhc3QgcGFzcyBvZiB0aGUgY29uZmlndXJhdGlvbiB3aGljaCBtZWFucyB0aGV5IGFyZSB0byBiZSBkZWZpbmVkCitvbmx5IGlmIExUTVxfTEFTVCBoYXMgYmVlbiBkZWZpbmVkLgorCitcc3Vic3Vic2VjdGlvbntNb2R1bGkgUmVsYXRlZH0KK1xiZWdpbntzbWFsbH0KK1xiZWdpbntjZW50ZXJ9CitcYmVnaW57dGFidWxhcn17fGx8bHx9CitcaGxpbmUgXHRleHRiZntSZXN0cmljdGlvbn0gJiBcdGV4dGJme1VuZGVmaW5lfSBcXAorXGhsaW5lIEV4cG9uZW50aWF0aW9uIHdpdGggb2RkIG1vZHVsaSBvbmx5ICYgQk5cX1NcX01QXF9FWFBUTU9EXF9DIFxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBCTlxfTVBcX1JFRFVDRVxfQyBcXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgQk5cX01QXF9SRURVQ0VcX1NFVFVQXF9DIFxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBCTlxfU1xfTVBcX01VTFxfSElHSFxfRElHU1xfQyBcXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgQk5cX0ZBU1RcX1NcX01QXF9NVUxcX0hJR0hcX0RJR1NcX0MgXFwKK1xobGluZSBFeHBvbmVudGlhdGlvbiB3aXRoIHJhbmRvbSBvZGQgbW9kdWxpICYgKFRoZSBhYm92ZSBwbHVzIHRoZSBmb2xsb3dpbmcpIFxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBCTlxfTVBcX1JFRFVDRVxfMktcX0MgXFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEJOXF9NUFxfUkVEVUNFXF8yS1xfU0VUVVBcX0MgXFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEJOXF9NUFxfUkVEVUNFXF9JU1xfMktcX0MgXFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEJOXF9NUFxfRFJcX0lTXF9NT0RVTFVTXF9DIFxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBCTlxfTVBcX0RSXF9SRURVQ0VcX0MgXFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEJOXF9NUFxfRFJcX1NFVFVQXF9DIFxcCitcaGxpbmUgTW9kdWxhciBpbnZlcnNlIG9kZCBtb2R1bGkgb25seSAgICAgJiBCTlxfTVBcX0lOVk1PRFxfU0xPV1xfQyBcXAorXGhsaW5lIE1vZHVsYXIgaW52ZXJzZSAoYm90aCwgc21hbGxlci9zbG93ZXIpICYgQk5cX0ZBU1RcX01QXF9JTlZNT0RcX0MgXFwKK1xobGluZQorXGVuZHt0YWJ1bGFyfQorXGVuZHtjZW50ZXJ9CitcZW5ke3NtYWxsfQorCitcc3Vic3Vic2VjdGlvbntPcGVyYW5kIFNpemUgUmVsYXRlZH0KK1xiZWdpbntzbWFsbH0KK1xiZWdpbntjZW50ZXJ9CitcYmVnaW57dGFidWxhcn17fGx8bHx9CitcaGxpbmUgXHRleHRiZntSZXN0cmljdGlvbn0gJiBcdGV4dGJme1VuZGVmaW5lfSBcXAorXGhsaW5lIE1vZHVsaSAkXGxlIDI1NjAkIGJpdHMgICAgICAgICAgICAgICYgQk5cX01QXF9NT05UR09NRVJZXF9SRURVQ0VcX0MgXFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEJOXF9TXF9NUFxfTVVMXF9ESUdTXF9DIFxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBCTlxfU1xfTVBcX01VTFxfSElHSFxfRElHU1xfQyBcXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgQk5cX1NcX01QXF9TUVJcX0MgXFwKK1xobGluZSBQb2x5bm9taWFsIFNjaG1vbHlub21pYWwgICAgICAgICAgICAmIEJOXF9NUFxfS0FSQVRTVUJBXF9NVUxcX0MgXFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEJOXF9NUFxfS0FSQVRTVUJBXF9TUVJcX0MgXFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIEJOXF9NUFxfVE9PTVxfTVVMXF9DIFxcIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgQk5cX01QXF9UT09NXF9TUVJcX0MgXFwKKworXGhsaW5lCitcZW5ke3RhYnVsYXJ9CitcZW5ke2NlbnRlcn0KK1xlbmR7c21hbGx9CisKKworXHNlY3Rpb257UHVycG9zZSBvZiBMaWJUb21NYXRofQorVW5saWtlICBHTlUgTVAgKEdNUCkgTGlicmFyeSwgTElQLCBPcGVuU1NMIG9yIHZhcmlvdXMgb3RoZXIgY29tbWVyY2lhbCBraXRzIChNaXJhY2wpLCBMaWJUb21NYXRoIHdhcyBub3Qgd3JpdHRlbiB3aXRoIAorYmxlZWRpbmcgZWRnZSBwZXJmb3JtYW5jZSBpbiBtaW5kLiAgRmlyc3QgYW5kIGZvcmVtb3N0IExpYlRvbU1hdGggd2FzIHdyaXR0ZW4gdG8gYmUgZW50aXJlbHkgb3Blbi4gIE5vdCBvbmx5IGlzIHRoZSAKK3NvdXJjZSBjb2RlIHB1YmxpYyBkb21haW4gKHVubGlrZSB2YXJpb3VzIG90aGVyIEdQTC9ldGMgbGljZW5zZWQgY29kZSksIG5vdCBvbmx5IGlzIHRoZSBjb2RlIGZyZWVseSBkb3dubG9hZGFibGUgYnV0IHRoZQorc291cmNlIGNvZGUgaXMgYWxzbyBhY2Nlc3NpYmxlIGZvciBjb21wdXRlciBzY2llbmNlIHN0dWRlbnRzIGF0dGVtcHRpbmcgdG8gbGVhcm4gYGBCaWdOdW0nJyBvciBtdWx0aXBsZSBwcmVjaXNpb24KK2FyaXRobWV0aWMgdGVjaG5pcXVlcy4gCisKK0xpYlRvbU1hdGggd2FzIHdyaXR0ZW4gdG8gYmUgYW4gaW5zdHJ1Y3RpdmUgY29sbGVjdGlvbiBvZiBzb3VyY2UgY29kZS4gIFRoaXMgaXMgd2h5IHRoZXJlIGFyZSBtYW55IGNvbW1lbnRzLCBvbmx5IG9uZQorZnVuY3Rpb24gcGVyIHNvdXJjZSBmaWxlIGFuZCBvZnRlbiBJIHVzZSBhIGBgbWlkZGxlLXJvYWQnJyBhcHByb2FjaCB3aGVyZSBJIGRvbid0IGN1dCBjb3JuZXJzIGZvciBhbiBleHRyYSAyXCUgc3BlZWQKK2luY3JlYXNlLgorCitTb3VyY2UgY29kZSBhbG9uZSBjYW5ub3QgcmVhbGx5IHRlYWNoIGhvdyB0aGUgYWxnb3JpdGhtcyB3b3JrIHdoaWNoIGlzIHdoeSBJIGFsc28gd3JvdGUgYSB0ZXh0Ym9vayB0aGF0IGFjY29tcGFuaWVzCit0aGUgbGlicmFyeSAoYmVhdCB0aGF0ISkuCisKK1NvIHlvdSBtYXkgYmUgdGhpbmtpbmcgYGBzaG91bGQgSSB1c2UgTGliVG9tTWF0aD8nJyBhbmQgdGhlIGFuc3dlciBpcyBhIGRlZmluaXRlIG1heWJlLiAgTGV0IG1lIHRhYnVsYXRlIHdoYXQgSSB0aGluaworYXJlIHRoZSBwcm9zIGFuZCBjb25zIG9mIExpYlRvbU1hdGggYnkgY29tcGFyaW5nIGl0IHRvIHRoZSBtYXRoIHJvdXRpbmVzIGZyb20gR251UEdcZm9vdG5vdGV7R251UEcgdjEuMi4zIHZlcnN1cyBMaWJUb21NYXRoIHYwLjI4fS4KKworXG5ld3BhZ2VcYmVnaW57ZmlndXJlfVtoZXJlXQorXGJlZ2lue3NtYWxsfQorXGJlZ2lue2NlbnRlcn0KK1xiZWdpbnt0YWJ1bGFyfXt8bHxjfGN8bHx9CitcaGxpbmUgXHRleHRiZntDcml0ZXJpYX0gJiBcdGV4dGJme1Byb30gJiBcdGV4dGJme0Nvbn0gJiBcdGV4dGJme05vdGVzfSBcXAorXGhsaW5lIEZldyBsaW5lcyBvZiBjb2RlIHBlciBmaWxlICYgWCAmICYgR251UEcgJCA9IDMwMC45JCwgTGliVG9tTWF0aCAgJCA9IDcxLjk3JCBcXAorXGhsaW5lIENvbW1lbnRlZCBmdW5jdGlvbiBwcm90b3R5cGVzICYgWCAmJiBHbnVQRyBmdW5jdGlvbiBuYW1lcyBhcmUgY3J5cHRpYy4gXFwKK1xobGluZSBTcGVlZCAmJiBYICYgTGliVG9tTWF0aCBpcyBzbG93ZXIuICBcXAorXGhsaW5lIFRvdGFsbHkgZnJlZSAmIFggJiAmIEdQTCBoYXMgdW5mYXZvdXJhYmxlIHJlc3RyaWN0aW9ucy5cXAorXGhsaW5lIExhcmdlIGZ1bmN0aW9uIGJhc2UgJiBYICYgJiBHbnVQRyBpcyBiYXJlYm9uZXMuIFxcCitcaGxpbmUgRml2ZSBtb2R1bGFyIHJlZHVjdGlvbiBhbGdvcml0aG1zICYgWCAmICYgRmFzdGVyIG1vZHVsYXIgZXhwb25lbnRpYXRpb24gZm9yIGEgdmFyaWV0eSBvZiBtb2R1bGkuIFxcCitcaGxpbmUgUG9ydGFibGUgJiBYICYgJiBHbnVQRyByZXF1aXJlcyBjb25maWd1cmF0aW9uIHRvIGJ1aWxkLiBcXAorXGhsaW5lCitcZW5ke3RhYnVsYXJ9CitcZW5ke2NlbnRlcn0KK1xlbmR7c21hbGx9CitcY2FwdGlvbntMaWJUb21NYXRoIFZhbHVhdGlvbn0KK1xlbmR7ZmlndXJlfQorCitJdCBtYXkgc2VlbSBvZGQgdG8gY29tcGFyZSBMaWJUb21NYXRoIHRvIEdudVBHIHNpbmNlIHRoZSBtYXRoIGluIEdudVBHIGlzIG9ubHkgYSBzbWFsbCBwb3J0aW9uIG9mIHRoZSBlbnRpcmUgYXBwbGljYXRpb24uIAorSG93ZXZlciwgTGliVG9tTWF0aCB3YXMgd3JpdHRlbiB3aXRoIGNyeXB0b2dyYXBoeSBpbiBtaW5kLiAgSXQgcHJvdmlkZXMgZXNzZW50aWFsbHkgYWxsIG9mIHRoZSBmdW5jdGlvbnMgYSBjcnlwdG9zeXN0ZW0KK3dvdWxkIHJlcXVpcmUgd2hlbiB3b3JraW5nIHdpdGggbGFyZ2UgaW50ZWdlcnMuICAKKworU28gaXQgbWF5IGZlZWwgdGVtcHRpbmcgdG8ganVzdCByaXAgdGhlIG1hdGggY29kZSBvdXQgb2YgR251UEcgKG9yIEdudU1QIHdoZXJlIGl0IHdhcyB0YWtlbiBmcm9tIG9yaWdpbmFsbHkpIGluIHlvdXIKK293biBhcHBsaWNhdGlvbiBidXQgSSB0aGluayB0aGVyZSBhcmUgcmVhc29ucyBub3QgdG8uICBXaGlsZSBMaWJUb21NYXRoIGlzIHNsb3dlciB0aGFuIGxpYnJhcmllcyBzdWNoIGFzIEdudU1QIGl0IGlzCitub3Qgbm9ybWFsbHkgc2lnbmlmaWNhbnRseSBzbG93ZXIuICBPbiB4ODYgbWFjaGluZXMgdGhlIGRpZmZlcmVuY2UgaXMgbm9ybWFsbHkgYSBmYWN0b3Igb2YgdHdvIHdoZW4gcGVyZm9ybWluZyBtb2R1bGFyCitleHBvbmVudGlhdGlvbnMuICBJdCBkZXBlbmRzIGxhcmdlbHkgb24gdGhlIHByb2Nlc3NvciwgY29tcGlsZXIgYW5kIHRoZSBtb2R1bGkgYmVpbmcgdXNlZC4KKworRXNzZW50aWFsbHkgdGhlIG9ubHkgdGltZSB5b3Ugd291bGRuJ3QgdXNlIExpYlRvbU1hdGggaXMgd2hlbiBibGF6aW5nIHNwZWVkIGlzIHRoZSBwcmltYXJ5IGNvbmNlcm4uICBIb3dldmVyLAorb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIGNvaW4gTGliVG9tTWF0aCBvZmZlcnMgeW91IGEgdG90YWxseSBmcmVlIChwdWJsaWMgZG9tYWluKSB3ZWxsIHN0cnVjdHVyZWQgbWF0aCBsaWJyYXJ5Cit0aGF0IGlzIHZlcnkgZmxleGlibGUsIGNvbXBsZXRlIGFuZCBwZXJmb3JtcyB3ZWxsIGluIHJlc291cmNlIGNvbnRyYWluZWQgZW52aXJvbm1lbnRzLiAgRmFzdCBSU0EgZm9yIGV4YW1wbGUgY2FuCitiZSBwZXJmb3JtZWQgd2l0aCBhcyBsaXR0bGUgYXMgOEtCIG9mIHJhbSBmb3IgZGF0YSAoYWdhaW4gZGVwZW5kaW5nIG9uIGJ1aWxkIG9wdGlvbnMpLiAgCisKK1xjaGFwdGVye0dldHRpbmcgU3RhcnRlZCB3aXRoIExpYlRvbU1hdGh9Citcc2VjdGlvbntCdWlsZGluZyBQcm9ncmFtc30KK0luIG9yZGVyIHRvIHVzZSBMaWJUb21NYXRoIHlvdSBtdXN0IGluY2x1ZGUgYGB0b21tYXRoLmgnJyBhbmQgbGluayBhZ2FpbnN0IHRoZSBhcHByb3ByaWF0ZSBsaWJyYXJ5IGZpbGUgKHR5cGljYWxseSAKK2xpYnRvbW1hdGguYSkuICBUaGVyZSBpcyBubyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uIHJlcXVpcmVkIGFuZCB0aGUgZW50aXJlIGxpYnJhcnkgaXMgdGhyZWFkIHNhZmUuCisKK1xzZWN0aW9ue1JldHVybiBDb2Rlc30KK1RoZXJlIGFyZSB0aHJlZSBwb3NzaWJsZSByZXR1cm4gY29kZXMgYSBmdW5jdGlvbiBtYXkgcmV0dXJuLgorCitcaW5kZXh7TVBcX09LQVl9XGluZGV4e01QXF9ZRVN9XGluZGV4e01QXF9OT31caW5kZXh7TVBcX1ZBTH1caW5kZXh7TVBcX01FTX0KK1xiZWdpbntmaWd1cmV9W2hlcmUhXQorXGJlZ2lue2NlbnRlcn0KK1xiZWdpbntzbWFsbH0KK1xiZWdpbnt0YWJ1bGFyfXt8bHxsfH0KK1xobGluZSBcdGV4dGJme0NvZGV9ICYgXHRleHRiZntNZWFuaW5nfSBcXAorXGhsaW5lIE1QXF9PS0FZICYgVGhlIGZ1bmN0aW9uIHN1Y2NlZWRlZC4gXFwKK1xobGluZSBNUFxfVkFMICAmIFRoZSBmdW5jdGlvbiBpbnB1dCB3YXMgaW52YWxpZC4gXFwKK1xobGluZSBNUFxfTUVNICAmIEhlYXAgbWVtb3J5IGV4aGF1c3RlZC4gXFwKK1xobGluZSAmXFwKK1xobGluZSBNUFxfWUVTICAmIFJlc3BvbnNlIGlzIHllcy4gXFwKK1xobGluZSBNUFxfTk8gICAmIFJlc3BvbnNlIGlzIG5vLiBcXAorXGhsaW5lCitcZW5ke3RhYnVsYXJ9CitcZW5ke3NtYWxsfQorXGVuZHtjZW50ZXJ9CitcY2FwdGlvbntSZXR1cm4gQ29kZXN9CitcZW5ke2ZpZ3VyZX0KKworVGhlIGxhc3QgdHdvIGNvZGVzIGxpc3RlZCBhcmUgbm90IGFjdHVhbGx5IGBgcmV0dXJuJ2VkJycgYnkgYSBmdW5jdGlvbi4gIFRoZXkgYXJlIHBsYWNlZCBpbiBhbiBpbnRlZ2VyICh0aGUgY2FsbGVyIG11c3QKK3Byb3ZpZGUgdGhlIGFkZHJlc3Mgb2YgYW4gaW50ZWdlciBpdCBjYW4gc3RvcmUgdG8pIHdoaWNoIHRoZSBjYWxsZXIgY2FuIGFjY2Vzcy4gIFRvIGNvbnZlcnQgb25lIG9mIHRoZSB0aHJlZSByZXR1cm4gY29kZXMKK3RvIGEgc3RyaW5nIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgorCitcaW5kZXh7bXBcX2Vycm9yXF90b1xfc3RyaW5nfQorXGJlZ2lue2FsbHR0fQorY2hhciAqbXBfZXJyb3JfdG9fc3RyaW5nKGludCBjb2RlKTsKK1xlbmR7YWxsdHR9CisKK1RoaXMgd2lsbCByZXR1cm4gYSBwb2ludGVyIHRvIGEgc3RyaW5nIHdoaWNoIGRlc2NyaWJlcyB0aGUgZ2l2ZW4gZXJyb3IgY29kZS4gIEl0IHdpbGwgbm90IHdvcmsgZm9yIHRoZSByZXR1cm4gY29kZXMgCitNUFxfWUVTIGFuZCBNUFxfTk8uICAKKworXHNlY3Rpb257RGF0YSBUeXBlc30KK1RoZSBiYXNpYyBgYG11bHRpcGxlIHByZWNpc2lvbiBpbnRlZ2VyJycgdHlwZSBpcyBrbm93biBhcyB0aGUgYGBtcFxfaW50Jycgd2l0aGluIExpYlRvbU1hdGguICBUaGlzIGRhdGEgdHlwZSBpcyB1c2VkIHRvCitvcmdhbml6ZSBhbGwgb2YgdGhlIGRhdGEgcmVxdWlyZWQgdG8gbWFuaXB1bGF0ZSB0aGUgaW50ZWdlciBpdCByZXByZXNlbnRzLiAgV2l0aGluIExpYlRvbU1hdGggaXQgaGFzIGJlZW4gcHJvdG90eXBlZAorYXMgdGhlIGZvbGxvd2luZy4KKworXGluZGV4e21wXF9pbnR9CitcYmVnaW57YWxsdHR9Cit0eXBlZGVmIHN0cnVjdCAgXHsKKyAgICBpbnQgdXNlZCwgYWxsb2MsIHNpZ247CisgICAgbXBfZGlnaXQgKmRwOworXH0gbXBfaW50OworXGVuZHthbGx0dH0KKworV2hlcmUgYGBtcFxfZGlnaXQnJyBpcyBhIGRhdGEgdHlwZSB0aGF0IHJlcHJlc2VudHMgaW5kaXZpZHVhbCBkaWdpdHMgb2YgdGhlIGludGVnZXIuICBCeSBkZWZhdWx0LCBhbiBtcFxfZGlnaXQgaXMgdGhlCitJU08gQyBgYHVuc2lnbmVkIGxvbmcnJyBkYXRhIHR5cGUgYW5kIGVhY2ggZGlnaXQgaXMgJDI4LSRiaXRzIGxvbmcuICBUaGUgbXBcX2RpZ2l0IHR5cGUgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gc3VpdCBvdGhlcgorcGxhdGZvcm1zIGJ5IGRlZmluaW5nIHRoZSBhcHByb3ByaWF0ZSBtYWNyb3MuICAKKworQWxsIExUTSBmdW5jdGlvbnMgdGhhdCB1c2UgdGhlIG1wXF9pbnQgdHlwZSB3aWxsIGV4cGVjdCBhIHBvaW50ZXIgdG8gbXBcX2ludCBzdHJ1Y3R1cmUuICBZb3UgbXVzdCBhbGxvY2F0ZSBtZW1vcnkgdG8KK2hvbGQgdGhlIHN0cnVjdHVyZSBpdHNlbGYgYnkgeW91cnNlbGYgKHdoZXRoZXIgb2ZmIHN0YWNrIG9yIGhlYXAgaXQgZG9lc24ndCBtYXR0ZXIpLiAgVGhlIHZlcnkgZmlyc3QgdGhpbmcgdGhhdCBtdXN0IGJlCitkb25lIHRvIHVzZSBhbiBtcFxfaW50IGlzIHRoYXQgaXQgbXVzdCBiZSBpbml0aWFsaXplZC4KKworXHNlY3Rpb257RnVuY3Rpb24gT3JnYW5pemF0aW9ufQorCitUaGUgYXJpdGhtZXRpYyBmdW5jdGlvbnMgb2YgdGhlIGxpYnJhcnkgYXJlIGFsbCBvcmdhbml6ZWQgdG8gaGF2ZSB0aGUgc2FtZSBzdHlsZSBwcm90b3R5cGUuICBUaGF0IGlzIHNvdXJjZSBvcGVyYW5kcworYXJlIHBhc3NlZCBvbiB0aGUgbGVmdCBhbmQgdGhlIGRlc3RpbmF0aW9uIGlzIG9uIHRoZSByaWdodC4gIEZvciBpbnN0YW5jZSwKKworXGJlZ2lue2FsbHR0fQorbXBfYWRkKCZhLCAmYiwgJmMpOyAgICAgICAvKiBjID0gYSArIGIgKi8KK21wX211bCgmYSwgJmEsICZjKTsgICAgICAgLyogYyA9IGEgKiBhICovCittcF9kaXYoJmEsICZiLCAmYywgJmQpOyAgIC8qIGMgPSBbYS9iXSwgZCA9IGEgbW9kIGIgKi8KK1xlbmR7YWxsdHR9CisKK0Fub3RoZXIgZmVhdHVyZSBvZiB0aGUgd2F5IHRoZSBmdW5jdGlvbnMgaGF2ZSBiZWVuIGltcGxlbWVudGVkIGlzIHRoYXQgc291cmNlIG9wZXJhbmRzIGNhbiBiZSBkZXN0aW5hdGlvbiBvcGVyYW5kcyBhcyB3ZWxsLgorRm9yIGluc3RhbmNlLAorCitcYmVnaW57YWxsdHR9CittcF9hZGQoJmEsICZiLCAmYik7ICAgICAgIC8qIGIgPSBhICsgYiAqLworbXBfZGl2KCZhLCAmYiwgJmEsICZjKTsgICAvKiBhID0gW2EvYl0sIGMgPSBhIG1vZCBiICovCitcZW5ke2FsbHR0fQorCitUaGlzIGFsbG93cyBvcGVyYW5kcyB0byBiZSByZS11c2VkIHdoaWNoIGNhbiBtYWtlIHByb2dyYW1taW5nIHNpbXBsZXIuCisKK1xzZWN0aW9ue0luaXRpYWxpemF0aW9ufQorXHN1YnNlY3Rpb257U2luZ2xlIEluaXRpYWxpemF0aW9ufQorQSBzaW5nbGUgbXBcX2ludCBjYW4gYmUgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYGBtcFxfaW5pdCcnIGZ1bmN0aW9uLiAKKworXGluZGV4e21wXF9pbml0fQorXGJlZ2lue2FsbHR0fQoraW50IG1wX2luaXQgKG1wX2ludCAqIGEpOworXGVuZHthbGx0dH0KKworVGhpcyBmdW5jdGlvbiBleHBlY3RzIGEgcG9pbnRlciB0byBhbiBtcFxfaW50IHN0cnVjdHVyZSBhbmQgd2lsbCBpbml0aWFsaXplIHRoZSBtZW1iZXJzIG9mIHRoZSBzdHJ1Y3R1cmUgc28gdGhlIG1wXF9pbnQKK3JlcHJlc2VudHMgdGhlIGRlZmF1bHQgaW50ZWdlciB3aGljaCBpcyB6ZXJvLiAgSWYgdGhlIGZ1bmN0aW9ucyByZXR1cm5zIE1QXF9PS0FZIHRoZW4gdGhlIG1wXF9pbnQgaXMgcmVhZHkgdG8gYmUgdXNlZAorYnkgdGhlIG90aGVyIExpYlRvbU1hdGggZnVuY3Rpb25zLgorCitcYmVnaW57c21hbGx9IFxiZWdpbnthbGx0dH0KK2ludCBtYWluKHZvaWQpCitceworICAgbXBfaW50IG51bWJlcjsKKyAgIGludCByZXN1bHQ7CisKKyAgIGlmICgocmVzdWx0ID0gbXBfaW5pdCgmbnVtYmVyKSkgIT0gTVBfT0tBWSkgXHsKKyAgICAgIHByaW50ZigiRXJyb3IgaW5pdGlhbGl6aW5nIHRoZSBudW1iZXIuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKyAKKyAgIC8qIHVzZSB0aGUgbnVtYmVyICovCisKKyAgIHJldHVybiBFWElUX1NVQ0NFU1M7CitcfQorXGVuZHthbGx0dH0gXGVuZHtzbWFsbH0KKworXHN1YnNlY3Rpb257U2luZ2xlIEZyZWV9CitXaGVuIHlvdSBhcmUgZmluaXNoZWQgd2l0aCBhbiBtcFxfaW50IGl0IGlzIGlkZWFsIHRvIHJldHVybiB0aGUgaGVhcCBpdCB1c2VkIGJhY2sgdG8gdGhlIHN5c3RlbS4gIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gCitwcm92aWRlcyB0aGlzIGZ1bmN0aW9uYWxpdHkuCisKK1xpbmRleHttcFxfY2xlYXJ9CitcYmVnaW57YWxsdHR9Cit2b2lkIG1wX2NsZWFyIChtcF9pbnQgKiBhKTsKK1xlbmR7YWxsdHR9CisKK1RoZSBmdW5jdGlvbiBleHBlY3RzIGEgcG9pbnRlciB0byBhIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgbXBcX2ludCBzdHJ1Y3R1cmUgYW5kIGZyZWVzIHRoZSBoZWFwIGl0IHVzZXMuICBJdCBzZXRzIHRoZSAKK3BvaW50ZXJcZm9vdG5vdGV7VGhlIGBgZHAnJyBtZW1iZXIufSB3aXRoaW4gdGhlIG1wXF9pbnQgdG8gXHRleHRiZntOVUxMfSB3aGljaCBpcyB1c2VkIHRvIHByZXZlbnQgZG91YmxlIGZyZWUgc2l0dWF0aW9ucy4gCitJcyBpcyBsZWdhbCB0byBjYWxsIG1wXF9jbGVhcigpIHR3aWNlIG9uIHRoZSBzYW1lIG1wXF9pbnQgaW4gYSByb3cuICAKKworXGJlZ2lue3NtYWxsfSBcYmVnaW57YWxsdHR9CitpbnQgbWFpbih2b2lkKQorXHsKKyAgIG1wX2ludCBudW1iZXI7CisgICBpbnQgcmVzdWx0OworCisgICBpZiAoKHJlc3VsdCA9IG1wX2luaXQoJm51bWJlcikpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIGluaXRpYWxpemluZyB0aGUgbnVtYmVyLiAgXCVzIiwgCisgICAgICAgICAgICAgbXBfZXJyb3JfdG9fc3RyaW5nKHJlc3VsdCkpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIFx9CisgCisgICAvKiB1c2UgdGhlIG51bWJlciAqLworCisgICAvKiBXZSdyZSBkb25lIHdpdGggaXQuICovCisgICBtcF9jbGVhcigmbnVtYmVyKTsKKworICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK1x9CitcZW5ke2FsbHR0fSBcZW5ke3NtYWxsfQorCitcc3Vic2VjdGlvbntNdWx0aXBsZSBJbml0aWFsaXphdGlvbnN9CitDZXJ0YWluIGFsZ29yaXRobXMgcmVxdWlyZSBtb3JlIHRoYW4gb25lIGxhcmdlIGludGVnZXIuICBJbiB0aGVzZSBpbnN0YW5jZXMgaXQgaXMgaWRlYWwgdG8gaW5pdGlhbGl6ZSBhbGwgb2YgdGhlIG1wXF9pbnQKK3ZhcmlhYmxlcyBpbiBhbiBgYGFsbCBvciBub3RoaW5nJycgZmFzaGlvbi4gIFRoYXQgaXMsIHRoZXkgYXJlIGVpdGhlciBhbGwgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5IG9yIHRoZXkgYXJlIGFsbAorbm90IGluaXRpYWxpemVkLgorCitUaGUgIG1wXF9pbml0XF9tdWx0aSgpIGZ1bmN0aW9uIHByb3ZpZGVzIHRoaXMgZnVuY3Rpb25hbGl0eS4KKworXGluZGV4e21wXF9pbml0XF9tdWx0aX0gXGluZGV4e21wXF9jbGVhclxfbXVsdGl9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfaW5pdF9tdWx0aShtcF9pbnQgKm1wLCAuLi4pOworXGVuZHthbGx0dH0KKworSXQgYWNjZXB0cyBhIFx0ZXh0YmZ7TlVMTH0gdGVybWluYXRlZCBsaXN0IG9mIHBvaW50ZXJzIHRvIG1wXF9pbnQgc3RydWN0dXJlcy4gIEl0IHdpbGwgYXR0ZW1wdCB0byBpbml0aWFsaXplIHRoZW0gYWxsCithdCBvbmNlLiAgSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgTVBcX09LQVkgdGhlbiBhbGwgb2YgdGhlIG1wXF9pbnQgdmFyaWFibGVzIGFyZSByZWFkeSB0byB1c2UsIG90aGVyd2lzZSBub25lIG9mIHRoZW0KK2FyZSBhdmFpbGFibGUgZm9yIHVzZS4gIEEgY29tcGxlbWVudGFyeSBtcFxfY2xlYXJcX211bHRpKCkgZnVuY3Rpb24gYWxsb3dzIG11bHRpcGxlIG1wXF9pbnQgdmFyaWFibGVzIHRvIGJlIGZyZWUnZCAKK2Zyb20gdGhlIGhlYXAgYXQgdGhlIHNhbWUgdGltZS4gIAorCitcYmVnaW57c21hbGx9IFxiZWdpbnthbGx0dH0KK2ludCBtYWluKHZvaWQpCitceworICAgbXBfaW50IG51bTEsIG51bTIsIG51bTM7CisgICBpbnQgcmVzdWx0OworCisgICBpZiAoKHJlc3VsdCA9IG1wX2luaXRfbXVsdGkoJm51bTEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW0zLCBOVUxMKSkgIT0gTVBcX09LQVkpIFx7ICAgICAgCisgICAgICBwcmludGYoIkVycm9yIGluaXRpYWxpemluZyB0aGUgbnVtYmVycy4gIFwlcyIsIAorICAgICAgICAgICAgIG1wX2Vycm9yX3RvX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICBcfQorIAorICAgLyogdXNlIHRoZSBudW1iZXJzICovCisKKyAgIC8qIFdlJ3JlIGRvbmUgd2l0aCB0aGVtLiAqLworICAgbXBfY2xlYXJfbXVsdGkoJm51bTEsICZudW0yLCAmbnVtMywgTlVMTCk7CisKKyAgIHJldHVybiBFWElUX1NVQ0NFU1M7CitcfQorXGVuZHthbGx0dH0gXGVuZHtzbWFsbH0KKworXHN1YnNlY3Rpb257T3RoZXIgSW5pdGlhbGl6ZXJzfQorVG8gaW5pdGlhbGl6ZWQgYW5kIG1ha2UgYSBjb3B5IG9mIGFuIG1wXF9pbnQgdGhlIG1wXF9pbml0XF9jb3B5KCkgZnVuY3Rpb24gaGFzIGJlZW4gcHJvdmlkZWQuICAKKworXGluZGV4e21wXF9pbml0XF9jb3B5fQorXGJlZ2lue2FsbHR0fQoraW50IG1wX2luaXRfY29weSAobXBfaW50ICogYSwgbXBfaW50ICogYik7CitcZW5ke2FsbHR0fQorCitUaGlzIGZ1bmN0aW9uIHdpbGwgaW5pdGlhbGl6ZSAkYSQgYW5kIG1ha2UgaXQgYSBjb3B5IG9mICRiJCBpZiBhbGwgZ29lcyB3ZWxsLgorCitcYmVnaW57c21hbGx9IFxiZWdpbnthbGx0dH0KK2ludCBtYWluKHZvaWQpCitceworICAgbXBfaW50IG51bTEsIG51bTI7CisgICBpbnQgcmVzdWx0OworCisgICAvKiBpbml0aWFsaXplIGFuZCBkbyB3b3JrIG9uIG51bTEgLi4uICovCisKKyAgIC8qIFdlIHdhbnQgYSBjb3B5IG9mIG51bTEgaW4gbnVtMiBub3cgKi8KKyAgIGlmICgocmVzdWx0ID0gbXBfaW5pdF9jb3B5KCZudW0yLCAmbnVtMSkpICE9IE1QX09LQVkpIFx7CisgICAgIHByaW50ZigiRXJyb3IgaW5pdGlhbGl6aW5nIHRoZSBjb3B5LiAgXCVzIiwgCisgICAgICAgICAgICAgbXBfZXJyb3JfdG9fc3RyaW5nKHJlc3VsdCkpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIFx9CisgCisgICAvKiBub3cgbnVtMiBpcyByZWFkeSBhbmQgY29udGFpbnMgYSBjb3B5IG9mIG51bTEgKi8KKworICAgLyogV2UncmUgZG9uZSB3aXRoIHRoZW0uICovCisgICBtcF9jbGVhcl9tdWx0aSgmbnVtMSwgJm51bTIsIE5VTEwpOworCisgICByZXR1cm4gRVhJVF9TVUNDRVNTOworXH0KK1xlbmR7YWxsdHR9IFxlbmR7c21hbGx9CisKK0Fub3RoZXIgbGVzcyBjb21tb24gaW5pdGlhbGl6ZXIgaXMgbXBcX2luaXRcX3NpemUoKSB3aGljaCBhbGxvd3MgdGhlIHVzZXIgdG8gaW5pdGlhbGl6ZSBhbiBtcFxfaW50IHdpdGggYSBnaXZlbgorZGVmYXVsdCBudW1iZXIgb2YgZGlnaXRzLiAgQnkgZGVmYXVsdCwgYWxsIGluaXRpYWxpemVycyBhbGxvY2F0ZSBcdGV4dGJme01QXF9QUkVDfSBkaWdpdHMuICBUaGlzIGZ1bmN0aW9uIGxldHMKK3lvdSBvdmVycmlkZSB0aGlzIGJlaGF2aW91ci4KKworXGluZGV4e21wXF9pbml0XF9zaXplfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX2luaXRfc2l6ZSAobXBfaW50ICogYSwgaW50IHNpemUpOworXGVuZHthbGx0dH0KKworVGhlICRzaXplJCBwYXJhbWV0ZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4gIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcyB0aGUgbXBcX2ludCAkYSQgd2lsbCBiZSBpbml0aWFsaXplZAordG8gaGF2ZSAkc2l6ZSQgZGlnaXRzICh3aGljaCBhcmUgYWxsIGluaXRpYWxseSB6ZXJvKS4gIAorCitcYmVnaW57c21hbGx9IFxiZWdpbnthbGx0dH0KK2ludCBtYWluKHZvaWQpCitceworICAgbXBfaW50IG51bWJlcjsKKyAgIGludCByZXN1bHQ7CisKKyAgIC8qIHdlIG5lZWQgYSA2MC1kaWdpdCBudW1iZXIgKi8KKyAgIGlmICgocmVzdWx0ID0gbXBfaW5pdF9zaXplKCZudW1iZXIsIDYwKSkgIT0gTVBfT0tBWSkgXHsKKyAgICAgIHByaW50ZigiRXJyb3IgaW5pdGlhbGl6aW5nIHRoZSBudW1iZXIuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKyAKKyAgIC8qIHVzZSB0aGUgbnVtYmVyICovCisKKyAgIHJldHVybiBFWElUX1NVQ0NFU1M7CitcfQorXGVuZHthbGx0dH0gXGVuZHtzbWFsbH0KKworXHNlY3Rpb257TWFpbnRlbmFuY2UgRnVuY3Rpb25zfQorCitcc3Vic2VjdGlvbntSZWR1Y2luZyBNZW1vcnkgVXNhZ2V9CitXaGVuIGFuIG1wXF9pbnQgaXMgaW4gYSBzdGF0ZSB3aGVyZSBpdCB3b24ndCBiZSBjaGFuZ2VkIGFnYWluXGZvb3Rub3Rle0EgRGlmZmllLUhlbGxtYW4gbW9kdWx1cyBmb3IgaW5zdGFuY2UufSBleGNlc3MKK2RpZ2l0cyBjYW4gYmUgcmVtb3ZlZCB0byByZXR1cm4gbWVtb3J5IHRvIHRoZSBoZWFwIHdpdGggdGhlIG1wXF9zaHJpbmsoKSBmdW5jdGlvbi4KKworXGluZGV4e21wXF9zaHJpbmt9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfc2hyaW5rIChtcF9pbnQgKiBhKTsKK1xlbmR7YWxsdHR9CisKK1RoaXMgd2lsbCByZW1vdmUgZXhjZXNzIGRpZ2l0cyBvZiB0aGUgbXBcX2ludCAkYSQuICBJZiB0aGUgb3BlcmF0aW9uIGZhaWxzIHRoZSBtcFxfaW50IHNob3VsZCBiZSBpbnRhY3Qgd2l0aG91dCB0aGUKK2V4Y2VzcyBkaWdpdHMgYmVpbmcgcmVtb3ZlZC4gIE5vdGUgdGhhdCB5b3UgY2FuIHVzZSBhIHNocnVuayBtcFxfaW50IGluIGZ1cnRoZXIgY29tcHV0YXRpb25zLCBob3dldmVyLCBzdWNoIG9wZXJhdGlvbnMKK3dpbGwgcmVxdWlyZSBoZWFwIG9wZXJhdGlvbnMgd2hpY2ggY2FuIGJlIHNsb3cuICBJdCBpcyBub3QgaWRlYWwgdG8gc2hyaW5rIG1wXF9pbnQgdmFyaWFibGVzIHRoYXQgeW91IHdpbGwgZnVydGhlcgorbW9kaWZ5IGluIHRoZSBzeXN0ZW0gKHVubGVzcyB5b3UgYXJlIHNlcmlvdXNseSBsb3cgb24gbWVtb3J5KS4gIAorCitcYmVnaW57c21hbGx9IFxiZWdpbnthbGx0dH0KK2ludCBtYWluKHZvaWQpCitceworICAgbXBfaW50IG51bWJlcjsKKyAgIGludCByZXN1bHQ7CisKKyAgIGlmICgocmVzdWx0ID0gbXBfaW5pdCgmbnVtYmVyKSkgIT0gTVBfT0tBWSkgXHsKKyAgICAgIHByaW50ZigiRXJyb3IgaW5pdGlhbGl6aW5nIHRoZSBudW1iZXIuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKyAKKyAgIC8qIHVzZSB0aGUgbnVtYmVyIFtlLmcuIHByZS1jb21wdXRhdGlvbl0gICovCisKKyAgIC8qIFdlJ3JlIGRvbmUgd2l0aCBpdCBmb3Igbm93LiAqLworICAgaWYgKChyZXN1bHQgPSBtcF9zaHJpbmsoJm51bWJlcikpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIHNocmlua2luZyB0aGUgbnVtYmVyLiAgXCVzIiwgCisgICAgICAgICAgICAgbXBfZXJyb3JfdG9fc3RyaW5nKHJlc3VsdCkpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIFx9CisKKyAgIC8qIHVzZSBpdCAuLi4uICovCisKKworICAgLyogd2UncmUgZG9uZSB3aXRoIGl0LiAqLyAKKyAgIG1wX2NsZWFyKCZudW1iZXIpOworCisgICByZXR1cm4gRVhJVF9TVUNDRVNTOworXH0KK1xlbmR7YWxsdHR9IFxlbmR7c21hbGx9CisKK1xzdWJzZWN0aW9ue0FkZGluZyBhZGRpdGlvbmFsIGRpZ2l0c30KKworV2l0aGluIHRoZSBtcFxfaW50IHN0cnVjdHVyZSBhcmUgdHdvIHBhcmFtZXRlcnMgd2hpY2ggY29udHJvbCB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIGFycmF5IG9mIGRpZ2l0cyB0aGF0IHJlcHJlc2VudAordGhlIGludGVnZXIgdGhlIG1wXF9pbnQgaXMgbWVhbnQgdG8gZXF1YWwuICAgVGhlIFx0ZXh0aXR7dXNlZH0gcGFyYW1ldGVyIGRpY3RhdGVzIGhvdyBtYW55IGRpZ2l0cyBhcmUgc2lnbmlmaWNhbnQsIHRoYXQgaXMsCitjb250cmlidXRlIHRvIHRoZSB2YWx1ZSBvZiB0aGUgbXBcX2ludC4gIFRoZSBcdGV4dGl0e2FsbG9jfSBwYXJhbWV0ZXIgZGljdGF0ZXMgaG93IG1hbnkgZGlnaXRzIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlIGluCit0aGUgYXJyYXkuICBJZiB5b3UgbmVlZCB0byBwZXJmb3JtIGFuIG9wZXJhdGlvbiB0aGF0IHJlcXVpcmVzIG1vcmUgZGlnaXRzIHlvdSB3aWxsIGhhdmUgdG8gbXBcX2dyb3coKSB0aGUgbXBcX2ludCB0bworeW91ciBkZXNpcmVkIHNpemUuICAKKworXGluZGV4e21wXF9ncm93fQorXGJlZ2lue2FsbHR0fQoraW50IG1wX2dyb3cgKG1wX2ludCAqIGEsIGludCBzaXplKTsKK1xlbmR7YWxsdHR9CisKK1RoaXMgd2lsbCBncm93IHRoZSBhcnJheSBvZiBkaWdpdHMgb2YgJGEkIHRvICRzaXplJC4gIElmIHRoZSBcdGV4dGl0e2FsbG9jfSBwYXJhbWV0ZXIgaXMgYWxyZWFkeSBiaWdnZXIgdGhhbgorJHNpemUkIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCBkbyBhbnl0aGluZy4KKworXGJlZ2lue3NtYWxsfSBcYmVnaW57YWxsdHR9CitpbnQgbWFpbih2b2lkKQorXHsKKyAgIG1wX2ludCBudW1iZXI7CisgICBpbnQgcmVzdWx0OworCisgICBpZiAoKHJlc3VsdCA9IG1wX2luaXQoJm51bWJlcikpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIGluaXRpYWxpemluZyB0aGUgbnVtYmVyLiAgXCVzIiwgCisgICAgICAgICAgICAgbXBfZXJyb3JfdG9fc3RyaW5nKHJlc3VsdCkpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIFx9CisgCisgICAvKiB1c2UgdGhlIG51bWJlciAqLworCisgICAvKiBXZSBuZWVkIHRvIGFkZCAyMCBkaWdpdHMgdG8gdGhlIG51bWJlciAgKi8KKyAgIGlmICgocmVzdWx0ID0gbXBfZ3JvdygmbnVtYmVyLCBudW1iZXIuYWxsb2MgKyAyMCkpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIGdyb3dpbmcgdGhlIG51bWJlci4gIFwlcyIsIAorICAgICAgICAgICAgIG1wX2Vycm9yX3RvX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICBcfQorCisKKyAgIC8qIHVzZSB0aGUgbnVtYmVyICovCisKKyAgIC8qIHdlJ3JlIGRvbmUgd2l0aCBpdC4gKi8gCisgICBtcF9jbGVhcigmbnVtYmVyKTsKKworICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK1x9CitcZW5ke2FsbHR0fSBcZW5ke3NtYWxsfQorCitcY2hhcHRlcntCYXNpYyBPcGVyYXRpb25zfQorXHNlY3Rpb257U21hbGwgQ29uc3RhbnRzfQorU2V0dGluZyBtcFxfaW50cyB0byBzbWFsbCBjb25zdGFudHMgaXMgYSByZWxhdGl2ZWx5IGNvbW1vbiBvcGVyYXRpb24uICBUbyBhY2NvbW9kYXRlIHRoZXNlIGluc3RhbmNlcyB0aGVyZSBhcmUgdHdvCitzbWFsbCBjb25zdGFudCBhc3NpZ25tZW50IGZ1bmN0aW9ucy4gIFRoZSBmaXJzdCBmdW5jdGlvbiBpcyB1c2VkIHRvIHNldCBhIHNpbmdsZSBkaWdpdCBjb25zdGFudCB3aGlsZSB0aGUgc2Vjb25kIHNldHMKK2FuIElTTyBDIHN0eWxlIGBgdW5zaWduZWQgbG9uZycnIGNvbnN0YW50LiAgVGhlIHJlYXNvbiBmb3IgYm90aCBmdW5jdGlvbnMgaXMgZWZmaWNpZW5jeS4gIFNldHRpbmcgYSBzaW5nbGUgZGlnaXQgaXMgcXVpY2sgYnV0IHRoZQorZG9tYWluIG9mIGEgZGlnaXQgY2FuIGNoYW5nZSAoaXQncyBhbHdheXMgYXQgbGVhc3QgJDAgXGxkb3RzIDEyNyQpLiAgCisKK1xzdWJzZWN0aW9ue1NpbmdsZSBEaWdpdH0KKworU2V0dGluZyBhIHNpbmdsZSBkaWdpdCBjYW4gYmUgYWNjb21wbGlzaGVkIHdpdGggdGhlIGZvbGxvd2luZyBmdW5jdGlvbi4KKworXGluZGV4e21wXF9zZXR9CitcYmVnaW57YWxsdHR9Cit2b2lkIG1wX3NldCAobXBfaW50ICogYSwgbXBfZGlnaXQgYik7CitcZW5ke2FsbHR0fQorCitUaGlzIHdpbGwgemVybyB0aGUgY29udGVudHMgb2YgJGEkIGFuZCBtYWtlIGl0IHJlcHJlc2VudCBhbiBpbnRlZ2VyIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiAkYiQuICBOb3RlIHRoYXQgdGhpcworZnVuY3Rpb24gaGFzIGEgcmV0dXJuIHR5cGUgb2YgXHRleHRiZnt2b2lkfS4gIEl0IGNhbm5vdCBjYXVzZSBhbiBlcnJvciBzbyBpdCBpcyBzYWZlIHRvIGFzc3VtZSB0aGUgZnVuY3Rpb24KK3N1Y2NlZWRlZC4KKworXGJlZ2lue3NtYWxsfSBcYmVnaW57YWxsdHR9CitpbnQgbWFpbih2b2lkKQorXHsKKyAgIG1wX2ludCBudW1iZXI7CisgICBpbnQgcmVzdWx0OworCisgICBpZiAoKHJlc3VsdCA9IG1wX2luaXQoJm51bWJlcikpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIGluaXRpYWxpemluZyB0aGUgbnVtYmVyLiAgXCVzIiwgCisgICAgICAgICAgICAgbXBfZXJyb3JfdG9fc3RyaW5nKHJlc3VsdCkpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIFx9CisgCisgICAvKiBzZXQgdGhlIG51bWJlciB0byA1ICovCisgICBtcF9zZXQoJm51bWJlciwgNSk7CisKKyAgIC8qIHdlJ3JlIGRvbmUgd2l0aCBpdC4gKi8gCisgICBtcF9jbGVhcigmbnVtYmVyKTsKKworICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK1x9CitcZW5ke2FsbHR0fSBcZW5ke3NtYWxsfQorCitcc3Vic2VjdGlvbntMb25nIENvbnN0YW50c30KKworVG8gc2V0IGEgY29uc3RhbnQgdGhhdCBpcyB0aGUgc2l6ZSBvZiBhbiBJU08gQyBgYHVuc2lnbmVkIGxvbmcnJyBhbmQgbGFyZ2VyIHRoYW4gYSBzaW5nbGUgZGlnaXQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiAKK2NhbiBiZSB1c2VkLgorCitcaW5kZXh7bXBcX3NldFxfaW50fQorXGJlZ2lue2FsbHR0fQoraW50IG1wX3NldF9pbnQgKG1wX2ludCAqIGEsIHVuc2lnbmVkIGxvbmcgYik7CitcZW5ke2FsbHR0fQorCitUaGlzIHdpbGwgYXNzaWduIHRoZSB2YWx1ZSBvZiB0aGUgMzItYml0IHZhcmlhYmxlICRiJCB0byB0aGUgbXBcX2ludCAkYSQuICBVbmxpa2UgbXBcX3NldCgpIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMKK2FjY2VwdCBhIDMyLWJpdCBpbnB1dCByZWdhcmRsZXNzIG9mIHRoZSBzaXplIG9mIGEgc2luZ2xlIGRpZ2l0LiAgSG93ZXZlciwgc2luY2UgdGhlIHZhbHVlIG1heSBzcGFuIHNldmVyYWwgZGlnaXRzIAordGhpcyBmdW5jdGlvbiBjYW4gZmFpbCBpZiBpdCBydW5zIG91dCBvZiBoZWFwIG1lbW9yeS4KKworVG8gZ2V0IHRoZSBgYHVuc2lnbmVkIGxvbmcnJyBjb3B5IG9mIGFuIG1wXF9pbnQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjYW4gYmUgdXNlZC4KKworXGluZGV4e21wXF9nZXRcX2ludH0KK1xiZWdpbnthbGx0dH0KK3Vuc2lnbmVkIGxvbmcgbXBfZ2V0X2ludCAobXBfaW50ICogYSk7CitcZW5ke2FsbHR0fQorCitUaGlzIHdpbGwgcmV0dXJuIHRoZSAzMiBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBtcFxfaW50ICRhJC4gIAorCitcYmVnaW57c21hbGx9IFxiZWdpbnthbGx0dH0KK2ludCBtYWluKHZvaWQpCitceworICAgbXBfaW50IG51bWJlcjsKKyAgIGludCByZXN1bHQ7CisKKyAgIGlmICgocmVzdWx0ID0gbXBfaW5pdCgmbnVtYmVyKSkgIT0gTVBfT0tBWSkgXHsKKyAgICAgIHByaW50ZigiRXJyb3IgaW5pdGlhbGl6aW5nIHRoZSBudW1iZXIuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKyAKKyAgIC8qIHNldCB0aGUgbnVtYmVyIHRvIDY1NDMyMSAobm90ZSB0aGlzIGlzIGJpZ2dlciB0aGFuIDEyNykgKi8KKyAgIGlmICgocmVzdWx0ID0gbXBfc2V0X2ludCgmbnVtYmVyLCA2NTQzMjEpKSAhPSBNUF9PS0FZKSBceworICAgICAgcHJpbnRmKCJFcnJvciBzZXR0aW5nIHRoZSB2YWx1ZSBvZiB0aGUgbnVtYmVyLiAgXCVzIiwgCisgICAgICAgICAgICAgbXBfZXJyb3JfdG9fc3RyaW5nKHJlc3VsdCkpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIFx9CisKKyAgIHByaW50ZigibnVtYmVyID09IFwlbHUiLCBtcF9nZXRfaW50KCZudW1iZXIpKTsKKworICAgLyogd2UncmUgZG9uZSB3aXRoIGl0LiAqLyAKKyAgIG1wX2NsZWFyKCZudW1iZXIpOworCisgICByZXR1cm4gRVhJVF9TVUNDRVNTOworXH0KK1xlbmR7YWxsdHR9IFxlbmR7c21hbGx9CisKK1RoaXMgc2hvdWxkIG91dHB1dCB0aGUgZm9sbG93aW5nIGlmIHRoZSBwcm9ncmFtIHN1Y2NlZWRzLgorCitcYmVnaW57YWxsdHR9CitudW1iZXIgPT0gNjU0MzIxCitcZW5ke2FsbHR0fQorCitcc3Vic2VjdGlvbntJbml0aWFsaXplIGFuZCBTZXR0aW5nIENvbnN0YW50c30KK1RvIGJvdGggaW5pdGlhbGl6ZSBhbmQgc2V0IHNtYWxsIGNvbnN0YW50cyB0aGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgYXJlIGF2YWlsYWJsZS4KK1xpbmRleHttcFxfaW5pdFxfc2V0fSBcaW5kZXh7bXBcX2luaXRcX3NldFxfaW50fQorXGJlZ2lue2FsbHR0fQoraW50IG1wX2luaXRfc2V0IChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiKTsKK2ludCBtcF9pbml0X3NldF9pbnQgKG1wX2ludCAqIGEsIHVuc2lnbmVkIGxvbmcgYik7CitcZW5ke2FsbHR0fQorCitCb3RoIGZ1bmN0aW9ucyB3b3JrIGxpa2UgdGhlIHByZXZpb3VzIGNvdW50ZXJwYXJ0cyBleGNlcHQgdGhleSBmaXJzdCBtcFxfaW5pdCAkYSQgYmVmb3JlIHNldHRpbmcgdGhlIHZhbHVlcy4gIAorCitcYmVnaW57YWxsdHR9CitpbnQgbWFpbih2b2lkKQorXHsKKyAgIG1wX2ludCBudW1iZXIxLCBudW1iZXIyOworICAgaW50ICAgIHJlc3VsdDsKKworICAgLyogaW5pdGlhbGl6ZSBhbmQgc2V0IGEgc2luZ2xlIGRpZ2l0ICovCisgICBpZiAoKHJlc3VsdCA9IG1wX2luaXRfc2V0KCZudW1iZXIxLCAxMDApKSAhPSBNUF9PS0FZKSBceworICAgICAgcHJpbnRmKCJFcnJvciBzZXR0aW5nIG51bWJlcjE6IFwlcyIsIAorICAgICAgICAgICAgIG1wX2Vycm9yX3RvX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICBcfSAgICAgICAgICAgICAKKworICAgLyogaW5pdGlhbGl6ZSBhbmQgc2V0IGEgbG9uZyAqLworICAgaWYgKChyZXN1bHQgPSBtcF9pbml0X3NldF9pbnQoJm51bWJlcjIsIDEwMjMpKSAhPSBNUF9PS0FZKSBceworICAgICAgcHJpbnRmKCJFcnJvciBzZXR0aW5nIG51bWJlcjI6IFwlcyIsIAorICAgICAgICAgICAgIG1wX2Vycm9yX3RvX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICBcfQorCisgICAvKiBkaXNwbGF5ICovCisgICBwcmludGYoIk51bWJlcjEsIE51bWJlcjIgPT0gXCVsdSwgXCVsdSIsCisgICAgICAgICAgbXBfZ2V0X2ludCgmbnVtYmVyMSksIG1wX2dldF9pbnQoJm51bWJlcjIpKTsKKworICAgLyogY2xlYXIgKi8KKyAgIG1wX2NsZWFyX211bHRpKCZudW1iZXIxLCAmbnVtYmVyMiwgTlVMTCk7CisKKyAgIHJldHVybiBFWElUX1NVQ0NFU1M7CitcfQorXGVuZHthbGx0dH0KKworSWYgdGhpcyBwcm9ncmFtIHN1Y2NlZWRzIGl0IHNoYWxsIG91dHB1dC4KK1xiZWdpbnthbGx0dH0KK051bWJlcjEsIE51bWJlcjIgPT0gMTAwLCAxMDIzCitcZW5ke2FsbHR0fQorCitcc2VjdGlvbntDb21wYXJpc29uc30KKworQ29tcGFyaXNvbnMgaW4gTGliVG9tTWF0aCBhcmUgYWx3YXlzIHBlcmZvcm1lZCBpbiBhIGBgbGVmdCB0byByaWdodCcnIGZhc2hpb24uICBUaGVyZSBhcmUgdGhyZWUgcG9zc2libGUgcmV0dXJuIGNvZGVzCitmb3IgYW55IGNvbXBhcmlzb24uCisKK1xpbmRleHtNUFxfR1R9IFxpbmRleHtNUFxfRVF9IFxpbmRleHtNUFxfTFR9CitcYmVnaW57ZmlndXJlfVtoZXJlXQorXGJlZ2lue2NlbnRlcn0KK1xiZWdpbnt0YWJ1bGFyfXt8Y3xjfH0KK1xobGluZSBcdGV4dGJme1Jlc3VsdCBDb2RlfSAmIFx0ZXh0YmZ7TWVhbmluZ30gXFwKK1xobGluZSBNUFxfR1QgJiAkYSA+IGIkIFxcCitcaGxpbmUgTVBcX0VRICYgJGEgPSBiJCBcXAorXGhsaW5lIE1QXF9MVCAmICRhIDwgYiQgXFwKK1xobGluZQorXGVuZHt0YWJ1bGFyfQorXGVuZHtjZW50ZXJ9CitcY2FwdGlvbntDb21wYXJpc29uIENvZGVzIGZvciAkYSwgYiR9CitcbGFiZWx7ZmlnOkNNUH0KK1xlbmR7ZmlndXJlfQorCitJbiBmaWd1cmUgXHJlZntmaWc6Q01QfSB0d28gaW50ZWdlcnMgJGEkIGFuZCAkYiQgYXJlIGJlaW5nIGNvbXBhcmVkLiAgSW4gdGhpcyBjYXNlICRhJCBpcyBzYWlkIHRvIGJlIGBgdG8gdGhlIGxlZnQnJyBvZiAKKyRiJC4gIAorCitcc3Vic2VjdGlvbntVbnNpZ25lZCBjb21wYXJpc29ufQorCitBbiB1bnNpZ25lZCBjb21wYXJpc29uIGNvbnNpZGVycyBvbmx5IHRoZSBkaWdpdHMgdGhlbXNlbHZlcyBhbmQgbm90IHRoZSBhc3NvY2lhdGVkIFx0ZXh0aXR7c2lnbn0gZmxhZyBvZiB0aGUgCittcFxfaW50IHN0cnVjdHVyZXMuICBUaGlzIGlzIGFuYWxvZ291cyB0byBhbiBhYnNvbHV0ZSBjb21wYXJpc29uLiAgVGhlIGZ1bmN0aW9uIG1wXF9jbXBcX21hZygpIHdpbGwgY29tcGFyZSB0d28KK21wXF9pbnQgdmFyaWFibGVzIGJhc2VkIG9uIHRoZWlyIGRpZ2l0cyBvbmx5LiAKKworXGluZGV4e21wXF9jbXBcX21hZ30KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9jbXBfbWFnKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpOworXGVuZHthbGx0dH0KK1RoaXMgd2lsbCBjb21wYXJlICRhJCB0byAkYiQgcGxhY2luZyAkYSQgdG8gdGhlIGxlZnQgb2YgJGIkLiAgVGhpcyBmdW5jdGlvbiBjYW5ub3QgZmFpbCBhbmQgd2lsbCByZXR1cm4gb25lIG9mIHRoZQordGhyZWUgY29tcGFyZSBjb2RlcyBsaXN0ZWQgaW4gZmlndXJlIFxyZWZ7ZmlnOkNNUH0uCisKK1xiZWdpbntzbWFsbH0gXGJlZ2lue2FsbHR0fQoraW50IG1haW4odm9pZCkKK1x7CisgICBtcF9pbnQgbnVtYmVyMSwgbnVtYmVyMjsKKyAgIGludCByZXN1bHQ7CisKKyAgIGlmICgocmVzdWx0ID0gbXBfaW5pdF9tdWx0aSgmbnVtYmVyMSwgJm51bWJlcjIsIE5VTEwpKSAhPSBNUF9PS0FZKSBceworICAgICAgcHJpbnRmKCJFcnJvciBpbml0aWFsaXppbmcgdGhlIG51bWJlcnMuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKyAKKyAgIC8qIHNldCB0aGUgbnVtYmVyMSB0byA1ICovCisgICBtcF9zZXQoJm51bWJlcjEsIDUpOworICAKKyAgIC8qIHNldCB0aGUgbnVtYmVyMiB0byAtNiAqLworICAgbXBfc2V0KCZudW1iZXIyLCA2KTsKKyAgIGlmICgocmVzdWx0ID0gbXBfbmVnKCZudW1iZXIyLCAmbnVtYmVyMikpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIG5lZ2F0aW5nIG51bWJlcjIuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKworICAgc3dpdGNoKG1wX2NtcF9tYWcoJm51bWJlcjEsICZudW1iZXIyKSkgXHsKKyAgICAgICBjYXNlIE1QX0dUOiAgcHJpbnRmKCJ8bnVtYmVyMXwgPiB8bnVtYmVyMnwiKTsgYnJlYWs7CisgICAgICAgY2FzZSBNUF9FUTogIHByaW50ZigifG51bWJlcjF8ID0gfG51bWJlcjJ8Iik7IGJyZWFrOworICAgICAgIGNhc2UgTVBfTFQ6ICBwcmludGYoInxudW1iZXIxfCA8IHxudW1iZXIyfCIpOyBicmVhazsKKyAgIFx9CisKKyAgIC8qIHdlJ3JlIGRvbmUgd2l0aCBpdC4gKi8gCisgICBtcF9jbGVhcl9tdWx0aSgmbnVtYmVyMSwgJm51bWJlcjIsIE5VTEwpOworCisgICByZXR1cm4gRVhJVF9TVUNDRVNTOworXH0KK1xlbmR7YWxsdHR9IFxlbmR7c21hbGx9CisKK0lmIHRoaXMgcHJvZ3JhbVxmb290bm90ZXtUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIG1wXF9uZWcoKSBmdW5jdGlvbiB3aGljaCBpcyBkaXNjdXNzZWQgaW4gc2VjdGlvbiBccmVme3NlYzpORUd9Ln0gY29tcGxldGVzIAorc3VjY2Vzc2Z1bGx5IGl0IHNob3VsZCBwcmludCB0aGUgZm9sbG93aW5nLgorCitcYmVnaW57YWxsdHR9Cit8bnVtYmVyMXwgPCB8bnVtYmVyMnwKK1xlbmR7YWxsdHR9CisKK1RoaXMgaXMgYmVjYXVzZSAkXHZlcnQgLTYgXHZlcnQgPSA2JCBhbmQgb2J2aW91c2x5ICQ1IDwgNiQuCisKK1xzdWJzZWN0aW9ue1NpZ25lZCBjb21wYXJpc29ufQorCitUbyBjb21wYXJlIHR3byBtcFxfaW50IHZhcmlhYmxlcyBiYXNlZCBvbiB0aGVpciBzaWduZWQgdmFsdWUgdGhlIG1wXF9jbXAoKSBmdW5jdGlvbiBpcyBwcm92aWRlZC4KKworXGluZGV4e21wXF9jbXB9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfY21wKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpOworXGVuZHthbGx0dH0KKworVGhpcyB3aWxsIGNvbXBhcmUgJGEkIHRvIHRoZSBsZWZ0IG9mICRiJC4gIEl0IHdpbGwgZmlyc3QgY29tcGFyZSB0aGUgc2lnbnMgb2YgdGhlIHR3byBtcFxfaW50IHZhcmlhYmxlcy4gIElmIHRoZXkKK2RpZmZlciBpdCB3aWxsIHJldHVybiBpbW1lZGlhdGVseSBiYXNlZCBvbiB0aGVpciBzaWducy4gIElmIHRoZSBzaWducyBhcmUgZXF1YWwgdGhlbiBpdCB3aWxsIGNvbXBhcmUgdGhlIGRpZ2l0cworaW5kaXZpZHVhbGx5LiAgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBvbmUgb2YgdGhlIGNvbXBhcmUgY29uZGl0aW9ucyBjb2RlcyBsaXN0ZWQgaW4gZmlndXJlIFxyZWZ7ZmlnOkNNUH0uCisKK1xiZWdpbntzbWFsbH0gXGJlZ2lue2FsbHR0fQoraW50IG1haW4odm9pZCkKK1x7CisgICBtcF9pbnQgbnVtYmVyMSwgbnVtYmVyMjsKKyAgIGludCByZXN1bHQ7CisKKyAgIGlmICgocmVzdWx0ID0gbXBfaW5pdF9tdWx0aSgmbnVtYmVyMSwgJm51bWJlcjIsIE5VTEwpKSAhPSBNUF9PS0FZKSBceworICAgICAgcHJpbnRmKCJFcnJvciBpbml0aWFsaXppbmcgdGhlIG51bWJlcnMuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKyAKKyAgIC8qIHNldCB0aGUgbnVtYmVyMSB0byA1ICovCisgICBtcF9zZXQoJm51bWJlcjEsIDUpOworICAKKyAgIC8qIHNldCB0aGUgbnVtYmVyMiB0byAtNiAqLworICAgbXBfc2V0KCZudW1iZXIyLCA2KTsKKyAgIGlmICgocmVzdWx0ID0gbXBfbmVnKCZudW1iZXIyLCAmbnVtYmVyMikpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIG5lZ2F0aW5nIG51bWJlcjIuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKworICAgc3dpdGNoKG1wX2NtcCgmbnVtYmVyMSwgJm51bWJlcjIpKSBceworICAgICAgIGNhc2UgTVBfR1Q6ICBwcmludGYoIm51bWJlcjEgPiBudW1iZXIyIik7IGJyZWFrOworICAgICAgIGNhc2UgTVBfRVE6ICBwcmludGYoIm51bWJlcjEgPSBudW1iZXIyIik7IGJyZWFrOworICAgICAgIGNhc2UgTVBfTFQ6ICBwcmludGYoIm51bWJlcjEgPCBudW1iZXIyIik7IGJyZWFrOworICAgXH0KKworICAgLyogd2UncmUgZG9uZSB3aXRoIGl0LiAqLyAKKyAgIG1wX2NsZWFyX211bHRpKCZudW1iZXIxLCAmbnVtYmVyMiwgTlVMTCk7CisKKyAgIHJldHVybiBFWElUX1NVQ0NFU1M7CitcfQorXGVuZHthbGx0dH0gXGVuZHtzbWFsbH0KKworSWYgdGhpcyBwcm9ncmFtXGZvb3Rub3Rle1RoaXMgZnVuY3Rpb24gdXNlcyB0aGUgbXBcX25lZygpIGZ1bmN0aW9uIHdoaWNoIGlzIGRpc2N1c3NlZCBpbiBzZWN0aW9uIFxyZWZ7c2VjOk5FR30ufSBjb21wbGV0ZXMgCitzdWNjZXNzZnVsbHkgaXQgc2hvdWxkIHByaW50IHRoZSBmb2xsb3dpbmcuCisKK1xiZWdpbnthbGx0dH0KK251bWJlcjEgPiBudW1iZXIyCitcZW5ke2FsbHR0fQorCitcc3Vic2VjdGlvbntTaW5nbGUgRGlnaXR9CisKK1RvIGNvbXBhcmUgYSBzaW5nbGUgZGlnaXQgYWdhaW5zdCBhbiBtcFxfaW50IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gaGFzIGJlZW4gcHJvdmlkZWQuCisKK1xpbmRleHttcFxfY21wXF9kfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX2NtcF9kKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIpOworXGVuZHthbGx0dH0KKworVGhpcyB3aWxsIGNvbXBhcmUgJGEkIHRvIHRoZSBsZWZ0IG9mICRiJCB1c2luZyBhIHNpZ25lZCBjb21wYXJpc29uLiAgTm90ZSB0aGF0IGl0IHdpbGwgYWx3YXlzIHRyZWF0ICRiJCBhcyAKK3Bvc2l0aXZlLiAgVGhpcyBmdW5jdGlvbiBpcyByYXRoZXIgaGFuZHkgd2hlbiB5b3UgaGF2ZSB0byBjb21wYXJlIGFnYWluc3Qgc21hbGwgdmFsdWVzIHN1Y2ggYXMgJDEkICh3aGljaCBvZnRlbgorY29tZXMgdXAgaW4gY3J5cHRvZ3JhcGh5KS4gIFRoZSBmdW5jdGlvbiBjYW5ub3QgZmFpbCBhbmQgd2lsbCByZXR1cm4gb25lIG9mIHRoZSB0cmVlIGNvbXBhcmUgY29uZGl0aW9uIGNvZGVzCitsaXN0ZWQgaW4gZmlndXJlIFxyZWZ7ZmlnOkNNUH0uCisKKworXGJlZ2lue3NtYWxsfSBcYmVnaW57YWxsdHR9CitpbnQgbWFpbih2b2lkKQorXHsKKyAgIG1wX2ludCBudW1iZXI7CisgICBpbnQgcmVzdWx0OworCisgICBpZiAoKHJlc3VsdCA9IG1wX2luaXQoJm51bWJlcikpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIGluaXRpYWxpemluZyB0aGUgbnVtYmVyLiAgXCVzIiwgCisgICAgICAgICAgICAgbXBfZXJyb3JfdG9fc3RyaW5nKHJlc3VsdCkpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIFx9CisgCisgICAvKiBzZXQgdGhlIG51bWJlciB0byA1ICovCisgICBtcF9zZXQoJm51bWJlciwgNSk7CisKKyAgIHN3aXRjaChtcF9jbXBfZCgmbnVtYmVyLCA3KSkgXHsKKyAgICAgICBjYXNlIE1QX0dUOiAgcHJpbnRmKCJudW1iZXIgPiA3Iik7IGJyZWFrOworICAgICAgIGNhc2UgTVBfRVE6ICBwcmludGYoIm51bWJlciA9IDciKTsgYnJlYWs7CisgICAgICAgY2FzZSBNUF9MVDogIHByaW50ZigibnVtYmVyIDwgNyIpOyBicmVhazsKKyAgIFx9CisKKyAgIC8qIHdlJ3JlIGRvbmUgd2l0aCBpdC4gKi8gCisgICBtcF9jbGVhcigmbnVtYmVyKTsKKworICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK1x9CitcZW5ke2FsbHR0fSBcZW5ke3NtYWxsfQorCitJZiB0aGlzIHByb2dyYW0gZnVuY3Rpb25zIHByb3Blcmx5IGl0IHdpbGwgcHJpbnQgb3V0IHRoZSBmb2xsb3dpbmcuCisKK1xiZWdpbnthbGx0dH0KK251bWJlciA8IDcKK1xlbmR7YWxsdHR9CisKK1xzZWN0aW9ue0xvZ2ljYWwgT3BlcmF0aW9uc30KKworTG9naWNhbCBvcGVyYXRpb25zIGFyZSBvcGVyYXRpb25zIHRoYXQgY2FuIGJlIHBlcmZvcm1lZCBlaXRoZXIgd2l0aCBzaW1wbGUgc2hpZnRzIG9yIGJvb2xlYW4gb3BlcmF0b3JzIHN1Y2ggYXMKK0FORCwgWE9SIGFuZCBPUiBkaXJlY3RseS4gIFRoZXNlIG9wZXJhdGlvbnMgYXJlIHZlcnkgcXVpY2suCisKK1xzdWJzZWN0aW9ue011bHRpcGxpY2F0aW9uIGJ5IHR3b30KKworTXVsdGlwbGljYXRpb25zIGFuZCBkaXZpc2lvbnMgYnkgYW55IHBvd2VyIG9mIHR3byBjYW4gYmUgcGVyZm9ybWVkIHdpdGggcXVpY2sgbG9naWNhbCBzaGlmdHMgZWl0aGVyIGxlZnQgb3IKK3JpZ2h0IGRlcGVuZGluZyBvbiB0aGUgb3BlcmF0aW9uLiAgCisKK1doZW4gbXVsdGlwbHlpbmcgb3IgZGl2aWRpbmcgYnkgdHdvIGEgc3BlY2lhbCBjYXNlIHJvdXRpbmUgY2FuIGJlIHVzZWQgd2hpY2ggYXJlIGFzIGZvbGxvd3MuCitcaW5kZXh7bXBcX211bFxfMn0gXGluZGV4e21wXF9kaXZcXzJ9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfbXVsXzIobXBfaW50ICogYSwgbXBfaW50ICogYik7CitpbnQgbXBfZGl2XzIobXBfaW50ICogYSwgbXBfaW50ICogYik7CitcZW5ke2FsbHR0fQorCitUaGUgZm9ybWVyIHdpbGwgYXNzaWduIHR3aWNlICRhJCB0byAkYiQgd2hpbGUgdGhlIGxhdHRlciB3aWxsIGFzc2lnbiBoYWxmICRhJCB0byAkYiQuICBUaGVzZSBmdW5jdGlvbnMgYXJlIGZhc3QKK3NpbmNlIHRoZSBzaGlmdCBjb3VudHMgYW5kIG1hc2tlcyBhcmUgaGFyZGNvZGVkIGludG8gdGhlIHJvdXRpbmVzLgorCitcYmVnaW57c21hbGx9IFxiZWdpbnthbGx0dH0KK2ludCBtYWluKHZvaWQpCitceworICAgbXBfaW50IG51bWJlcjsKKyAgIGludCByZXN1bHQ7CisKKyAgIGlmICgocmVzdWx0ID0gbXBfaW5pdCgmbnVtYmVyKSkgIT0gTVBfT0tBWSkgXHsKKyAgICAgIHByaW50ZigiRXJyb3IgaW5pdGlhbGl6aW5nIHRoZSBudW1iZXIuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKyAKKyAgIC8qIHNldCB0aGUgbnVtYmVyIHRvIDUgKi8KKyAgIG1wX3NldCgmbnVtYmVyLCA1KTsKKworICAgLyogbXVsdGlwbHkgYnkgdHdvICovCisgICBpZiAoKHJlc3VsdCA9IG1wXF9tdWxcXzIoJm51bWJlciwgJm51bWJlcikpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIG11bHRpcGx5aW5nIHRoZSBudW1iZXIuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKyAgIHN3aXRjaChtcF9jbXBfZCgmbnVtYmVyLCA3KSkgXHsKKyAgICAgICBjYXNlIE1QX0dUOiAgcHJpbnRmKCIyKm51bWJlciA+IDciKTsgYnJlYWs7CisgICAgICAgY2FzZSBNUF9FUTogIHByaW50ZigiMipudW1iZXIgPSA3Iik7IGJyZWFrOworICAgICAgIGNhc2UgTVBfTFQ6ICBwcmludGYoIjIqbnVtYmVyIDwgNyIpOyBicmVhazsKKyAgIFx9CisKKyAgIC8qIG5vdyBkaXZpZGUgYnkgdHdvICovCisgICBpZiAoKHJlc3VsdCA9IG1wXF9kaXZcXzIoJm51bWJlciwgJm51bWJlcikpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIGRpdmlkaW5nIHRoZSBudW1iZXIuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKyAgIHN3aXRjaChtcF9jbXBfZCgmbnVtYmVyLCA3KSkgXHsKKyAgICAgICBjYXNlIE1QX0dUOiAgcHJpbnRmKCIyKm51bWJlci8yID4gNyIpOyBicmVhazsKKyAgICAgICBjYXNlIE1QX0VROiAgcHJpbnRmKCIyKm51bWJlci8yID0gNyIpOyBicmVhazsKKyAgICAgICBjYXNlIE1QX0xUOiAgcHJpbnRmKCIyKm51bWJlci8yIDwgNyIpOyBicmVhazsKKyAgIFx9CisKKyAgIC8qIHdlJ3JlIGRvbmUgd2l0aCBpdC4gKi8gCisgICBtcF9jbGVhcigmbnVtYmVyKTsKKworICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK1x9CitcZW5ke2FsbHR0fSBcZW5ke3NtYWxsfQorCitJZiB0aGlzIHByb2dyYW0gaXMgc3VjY2Vzc2Z1bCBpdCB3aWxsIHByaW50IG91dCB0aGUgZm9sbG93aW5nIHRleHQuCisKK1xiZWdpbnthbGx0dH0KKzIqbnVtYmVyID4gNworMipudW1iZXIvMiA8IDcKK1xlbmR7YWxsdHR9CisKK1NpbmNlICQxMCA+IDckIGFuZCAkNSA8IDckLiAgVG8gbXVsdGlwbHkgYnkgYSBwb3dlciBvZiB0d28gdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjYW4gYmUgdXNlZC4KKworXGluZGV4e21wXF9tdWxcXzJkfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX211bF8yZChtcF9pbnQgKiBhLCBpbnQgYiwgbXBfaW50ICogYyk7CitcZW5ke2FsbHR0fQorCitUaGlzIHdpbGwgbXVsdGlwbHkgJGEkIGJ5ICQyXmIkIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIGBgYycnLiAgSWYgdGhlIHZhbHVlIG9mICRiJCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gCit6ZXJvIHRoZSBmdW5jdGlvbiB3aWxsIGNvcHkgJGEkIHRvIGBgYycnIHdpdGhvdXQgcGVyZm9ybWluZyBhbnkgZnVydGhlciBhY3Rpb25zLiAgCisKK1RvIGRpdmlkZSBieSBhIHBvd2VyIG9mIHR3byB1c2UgdGhlIGZvbGxvd2luZy4KKworXGluZGV4e21wXF9kaXZcXzJkfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX2Rpdl8yZCAobXBfaW50ICogYSwgaW50IGIsIG1wX2ludCAqIGMsIG1wX2ludCAqIGQpOworXGVuZHthbGx0dH0KK1doaWNoIHdpbGwgZGl2aWRlICRhJCBieSAkMl5iJCwgc3RvcmUgdGhlIHF1b3RpZW50IGluIGBgYycnIGFuZCB0aGUgcmVtYWluZGVyIGluIGBgZCcuICBJZiAkYiBcbGUgMCQgdGhlbiB0aGUKK2Z1bmN0aW9uIHNpbXBseSBjb3BpZXMgJGEkIG92ZXIgdG8gYGBjJycgYW5kIHplcm9lcyAkZCQuICBUaGUgdmFyaWFibGUgJGQkIG1heSBiZSBwYXNzZWQgYXMgYSBcdGV4dGJme05VTEx9Cit2YWx1ZSB0byBzaWduYWwgdGhhdCB0aGUgcmVtYWluZGVyIGlzIG5vdCBkZXNpcmVkLgorCitcc3Vic2VjdGlvbntQb2x5bm9taWFsIEJhc2lzIE9wZXJhdGlvbnN9CisKK1N0cmljdGx5IHNwZWFraW5nIHRoZSBvcmdhbml6YXRpb24gb2YgdGhlIGludGVnZXJzIHdpdGhpbiB0aGUgbXBcX2ludCBzdHJ1Y3R1cmVzIGlzIHdoYXQgaXMga25vd24gYXMgYSAKK2BgcG9seW5vbWlhbCBiYXNpcycnLiAgVGhpcyBzaW1wbHkgbWVhbnMgYSBmaWVsZCBlbGVtZW50IGlzIHN0b3JlZCBieSBkaXZpc2lvbnMgb2YgYSByYWRpeC4gIEZvciBleGFtcGxlLCBpZgorJGYoeCkgPSBcc3VtX3tpPTB9XntrfSB5X2l4XmskIGZvciBhbnkgdmVjdG9yICRcdmVjIHkkIHRoZW4gdGhlIGFycmF5IG9mIGRpZ2l0cyBpbiAkXHZlYyB5JCBhcmUgc2FpZCB0byBiZSAKK3RoZSBwb2x5bm9taWFsIGJhc2lzIHJlcHJlc2VudGF0aW9uIG9mICR6JCBpZiAkZihcYmV0YSkgPSB6JCBmb3IgYSBnaXZlbiByYWRpeCAkXGJldGEkLiAgCisKK1RvIG11bHRpcGx5IGJ5IHRoZSBwb2x5bm9taWFsICRnKHgpID0geCQgYWxsIHlvdSBoYXZlIHRvZG8gaXMgc2hpZnQgdGhlIGRpZ2l0cyBvZiB0aGUgYmFzaXMgbGVmdCBvbmUgcGxhY2UuICBUaGUKK2ZvbGxvd2luZyBmdW5jdGlvbiBwcm92aWRlcyB0aGlzIG9wZXJhdGlvbi4KKworXGluZGV4e21wXF9sc2hkfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX2xzaGQgKG1wX2ludCAqIGEsIGludCBiKTsKK1xlbmR7YWxsdHR9CisKK1RoaXMgd2lsbCBtdWx0aXBseSAkYSQgaW4gcGxhY2UgYnkgJHheYiQgd2hpY2ggaXMgZXF1aXZhbGVudCB0byBzaGlmdGluZyB0aGUgZGlnaXRzIGxlZnQgJGIkIHBsYWNlcyBhbmQgaW5zZXJ0aW5nIHplcm9lcworaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IGRpZ2l0cy4gIFNpbWlsYXJseSB0byBkaXZpZGUgYnkgYSBwb3dlciBvZiAkeCQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyBwcm92aWRlZC4KKworXGluZGV4e21wXF9yc2hkfQorXGJlZ2lue2FsbHR0fQordm9pZCBtcF9yc2hkIChtcF9pbnQgKiBhLCBpbnQgYikKK1xlbmR7YWxsdHR9CitUaGlzIHdpbGwgZGl2aWRlICRhJCBpbiBwbGFjZSBieSAkeF5iJCBhbmQgZGlzY2FyZCB0aGUgcmVtYWluZGVyLiAgVGhpcyBmdW5jdGlvbiBjYW5ub3QgZmFpbCBhcyBpdCBwZXJmb3JtcyB0aGUgb3BlcmF0aW9ucworaW4gcGxhY2UgYW5kIG5vIG5ldyBkaWdpdHMgYXJlIHJlcXVpcmVkIHRvIGNvbXBsZXRlIGl0LgorCitcc3Vic2VjdGlvbntBTkQsIE9SIGFuZCBYT1IgT3BlcmF0aW9uc30KKworV2hpbGUgQU5ELCBPUiBhbmQgWE9SIG9wZXJhdGlvbnMgYXJlIG5vdCB0eXBpY2FsIGBgYmlnbnVtIGZ1bmN0aW9ucycnIHRoZXkgY2FuIGJlIHVzZWZ1bCBpbiBzZXZlcmFsIGluc3RhbmNlcy4gIFRoZQordGhyZWUgZnVuY3Rpb25zIGFyZSBwcm90b3R5cGVkIGFzIGZvbGxvd3MuCisKK1xpbmRleHttcFxfb3J9IFxpbmRleHttcFxfYW5kfSBcaW5kZXh7bXBcX3hvcn0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9vciAgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpOworaW50IG1wX2FuZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYyk7CitpbnQgbXBfeG9yIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKTsKK1xlbmR7YWxsdHR9CisKK1doaWNoIGNvbXB1dGUgJGMgPSBhIFxvZG90IGIkIHdoZXJlICRcb2RvdCQgaXMgb25lIG9mIE9SLCBBTkQgb3IgWE9SLiAgCisKK1xzZWN0aW9ue0FkZGl0aW9uIGFuZCBTdWJ0cmFjdGlvbn0KKworVG8gY29tcHV0ZSBhbiBhZGRpdGlvbiBvciBzdWJ0cmFjdGlvbiB0aGUgZm9sbG93aW5nIHR3byBmdW5jdGlvbnMgY2FuIGJlIHVzZWQuCisKK1xpbmRleHttcFxfYWRkfSBcaW5kZXh7bXBcX3N1Yn0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9hZGQgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpOworaW50IG1wX3N1YiAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK1xlbmR7YWxsdHR9CisKK1doaWNoIHBlcmZvcm0gJGMgPSBhIFxvZG90IGIkIHdoZXJlICRcb2RvdCQgaXMgb25lIG9mIHNpZ25lZCBhZGRpdGlvbiBvciBzdWJ0cmFjdGlvbi4gIFRoZSBvcGVyYXRpb25zIGFyZSBmdWxseSBzaWduCithd2FyZS4KKworXHNlY3Rpb257U2lnbiBNYW5pcHVsYXRpb259Citcc3Vic2VjdGlvbntOZWdhdGlvbn0KK1xsYWJlbHtzZWM6TkVHfQorU2ltcGxlIGludGVnZXIgbmVnYXRpb24gY2FuIGJlIHBlcmZvcm1lZCB3aXRoIHRoZSBmb2xsb3dpbmcuCisKK1xpbmRleHttcFxfbmVnfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX25lZyAobXBfaW50ICogYSwgbXBfaW50ICogYik7CitcZW5ke2FsbHR0fQorCitXaGljaCBhc3NpZ25zICQtYSQgdG8gJGIkLiAgCisKK1xzdWJzZWN0aW9ue0Fic29sdXRlfQorU2ltcGxlIGludGVnZXIgYWJzb2x1dGVzIGNhbiBiZSBwZXJmb3JtZWQgd2l0aCB0aGUgZm9sbG93aW5nLgorCitcaW5kZXh7bXBcX25lZ30KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9hYnMgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpOworXGVuZHthbGx0dH0KKworV2hpY2ggYXNzaWducyAkXHZlcnQgYSBcdmVydCQgdG8gJGIkLiAgCisKK1xzZWN0aW9ue0ludGVnZXIgRGl2aXNpb24gYW5kIFJlbWFpbmRlcn0KK1RvIHBlcmZvcm0gYSBjb21wbGV0ZSBhbmQgZ2VuZXJhbCBpbnRlZ2VyIGRpdmlzaW9uIHdpdGggcmVtYWluZGVyIHVzZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgorCitcaW5kZXh7bXBcX2Rpdn0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9kaXYgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIG1wX2ludCAqIGQpOworXGVuZHthbGx0dH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitUaGlzIGRpdmlkZXMgJGEkIGJ5ICRiJCBhbmQgc3RvcmVzIHRoZSBxdW90aWVudCBpbiAkYyQgYW5kICRkJC4gIFRoZSBzaWduZWQgcXVvdGllbnQgaXMgY29tcHV0ZWQgc3VjaCB0aGF0IAorJGJjICsgZCA9IGEkLiAgTm90ZSB0aGF0IGVpdGhlciBvZiAkYyQgb3IgJGQkIGNhbiBiZSBzZXQgdG8gXHRleHRiZntOVUxMfSBpZiB0aGVpciB2YWx1ZSBpcyBub3QgcmVxdWlyZWQuICBJZiAKKyRiJCBpcyB6ZXJvIHRoZSBmdW5jdGlvbiByZXR1cm5zIFx0ZXh0YmZ7TVBcX1ZBTH0uICAKKworCitcY2hhcHRlcntNdWx0aXBsaWNhdGlvbiBhbmQgU3F1YXJpbmd9Citcc2VjdGlvbntNdWx0aXBsaWNhdGlvbn0KK0EgZnVsbCBzaWduZWQgaW50ZWdlciBtdWx0aXBsaWNhdGlvbiBjYW4gYmUgcGVyZm9ybWVkIHdpdGggdGhlIGZvbGxvd2luZy4KK1xpbmRleHttcFxfbXVsfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX211bCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYyk7CitcZW5ke2FsbHR0fQorV2hpY2ggYXNzaWducyB0aGUgZnVsbCBzaWduZWQgcHJvZHVjdCAkYWIkIHRvICRjJC4gIFRoaXMgZnVuY3Rpb24gYWN0dWFsbHkgYnJlYWtzIGludG8gb25lIG9mIGZvdXIgY2FzZXMgd2hpY2ggYXJlIAorc3BlY2lmaWMgbXVsdGlwbGljYXRpb24gcm91dGluZXMgb3B0aW1pemVkIGZvciBnaXZlbiBwYXJhbWV0ZXJzLiAgRmlyc3QgdGhlcmUgYXJlIHRoZSBUb29tLUNvb2sgbXVsdGlwbGljYXRpb25zIHdoaWNoCitzaG91bGQgb25seSBiZSB1c2VkIHdpdGggdmVyeSBsYXJnZSBpbnB1dHMuICBUaGlzIGlzIGZvbGxvd2VkIGJ5IHRoZSBLYXJhdHN1YmEgbXVsdGlwbGljYXRpb25zIHdoaWNoIGFyZSBmb3IgbW9kZXJhdGUKK3NpemVkIGlucHV0cy4gIFRoZW4gZm9sbG93ZWQgYnkgdGhlIENvbWJhIGFuZCBiYXNlbGluZSBtdWx0aXBsaWVycy4KKworRm9ydHVuYXRlbHkgZm9yIHRoZSBkZXZlbG9wZXIgeW91IGRvbid0IHJlYWxseSBuZWVkIHRvIGtub3cgdGhpcyB1bmxlc3MgeW91IHJlYWxseSB3YW50IHRvIGZpbmUgdHVuZSB0aGUgc3lzdGVtLiAgbXBcX211bCgpCit3aWxsIGRldGVybWluZSBvbiBpdHMgb3duXGZvb3Rub3Rle1NvbWUgdHdlYWtpbmcgbWF5IGJlIHJlcXVpcmVkLn0gd2hhdCByb3V0aW5lIHRvIHVzZSBhdXRvbWF0aWNhbGx5IHdoZW4gaXQgaXMgY2FsbGVkLgorCitcYmVnaW57YWxsdHR9CitpbnQgbWFpbih2b2lkKQorXHsKKyAgIG1wX2ludCBudW1iZXIxLCBudW1iZXIyOworICAgaW50IHJlc3VsdDsKKworICAgLyogSW5pdGlhbGl6ZSB0aGUgbnVtYmVycyAqLworICAgaWYgKChyZXN1bHQgPSBtcF9pbml0X211bHRpKCZudW1iZXIxLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtYmVyMiwgTlVMTCkpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIGluaXRpYWxpemluZyB0aGUgbnVtYmVycy4gIFwlcyIsIAorICAgICAgICAgICAgIG1wX2Vycm9yX3RvX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICBcfQorCisgICAvKiBzZXQgdGhlIHRlcm1zICovCisgICBpZiAoKHJlc3VsdCA9IG1wX3NldF9pbnQoJm51bWJlciwgMjU3KSkgIT0gTVBfT0tBWSkgXHsKKyAgICAgIHByaW50ZigiRXJyb3Igc2V0dGluZyBudW1iZXIxLiAgXCVzIiwgCisgICAgICAgICAgICAgbXBfZXJyb3JfdG9fc3RyaW5nKHJlc3VsdCkpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIFx9CisgCisgICBpZiAoKHJlc3VsdCA9IG1wX3NldF9pbnQoJm51bWJlcjIsIDEwMjMpKSAhPSBNUF9PS0FZKSBceworICAgICAgcHJpbnRmKCJFcnJvciBzZXR0aW5nIG51bWJlcjIuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKworICAgLyogbXVsdGlwbHkgdGhlbSAqLworICAgaWYgKChyZXN1bHQgPSBtcF9tdWwoJm51bWJlcjEsICZudW1iZXIyLAorICAgICAgICAgICAgICAgICAgICAgICAgJm51bWJlcjEpKSAhPSBNUF9PS0FZKSBceworICAgICAgcHJpbnRmKCJFcnJvciBtdWx0aXBseWluZyB0ZXJtcy4gIFwlcyIsIAorICAgICAgICAgICAgIG1wX2Vycm9yX3RvX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICBcfQorCisgICAvKiBkaXNwbGF5ICovCisgICBwcmludGYoIm51bWJlcjEgKiBudW1iZXIyID09IFwlbHUiLCBtcF9nZXRfaW50KCZudW1iZXIxKSk7CisKKyAgIC8qIGZyZWUgdGVybXMgYW5kIHJldHVybiAqLworICAgbXBfY2xlYXJfbXVsdGkoJm51bWJlcjEsICZudW1iZXIyLCBOVUxMKTsKKworICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK1x9CitcZW5ke2FsbHR0fSAgIAorCitJZiB0aGlzIHByb2dyYW0gc3VjY2VlZHMgaXQgc2hhbGwgb3V0cHV0IHRoZSBmb2xsb3dpbmcuCisKK1xiZWdpbnthbGx0dH0KK251bWJlcjEgKiBudW1iZXIyID09IDI2MjkxMQorXGVuZHthbGx0dH0KKworXHNlY3Rpb257U3F1YXJpbmd9CitTaW5jZSBzcXVhcmluZyBjYW4gYmUgcGVyZm9ybWVkIGZhc3RlciB0aGFuIG11bHRpcGxpY2F0aW9uIGl0IGlzIHBlcmZvcm1lZCBpdCdzIG93biBmdW5jdGlvbiBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcKK21wXF9tdWwoKS4KKworXGluZGV4e21wXF9zcXJ9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfc3FyIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKTsKK1xlbmR7YWxsdHR9CisKK1dpbGwgc3F1YXJlICRhJCBhbmQgc3RvcmUgaXQgaW4gJGIkLiAgTGlrZSB0aGUgY2FzZSBvZiBtdWx0aXBsaWNhdGlvbiB0aGVyZSBhcmUgZm91ciBkaWZmZXJlbnQgc3F1YXJpbmcKK2FsZ29yaXRobXMgYWxsIHdoaWNoIGNhbiBiZSBjYWxsZWQgZnJvbSBtcFxfc3FyKCkuICBJdCBpcyBpZGVhbCB0byB1c2UgbXBcX3NxciBvdmVyIG1wXF9tdWwgd2hlbiBzcXVhcmluZyB0ZXJtcyBiZWNhdXNlCitvZiB0aGUgc3BlZWQgZGlmZmVyZW5jZS4gIAorCitcc2VjdGlvbntUdW5pbmcgUG9seW5vbWlhbCBCYXNpcyBSb3V0aW5lc30KKworQm90aCBvZiB0aGUgVG9vbS1Db29rIGFuZCBLYXJhdHN1YmEgbXVsdGlwbGljYXRpb24gYWxnb3JpdGhtcyBhcmUgZmFzdGVyIHRoYW4gdGhlIHRyYWRpdGlvbmFsICRPKG5eMikkIGFwcHJvYWNoIHRoYXQKK3RoZSBDb21iYSBhbmQgYmFzZWxpbmUgYWxnb3JpdGhtcyB1c2UuICBBdCAkTyhuXnsxLjQ2NDk3M30pJCBhbmQgJE8obl57MS41ODQ5NjJ9KSQgcnVubmluZyB0aW1lcyByZXNwZWN0aXZlbHkgdGhleSByZXF1aXJlIAorY29uc2lkZXJhYmx5IGxlc3Mgd29yay4gIEZvciBleGFtcGxlLCBhIDEwMDAwLWRpZ2l0IG11bHRpcGxpY2F0aW9uIHdvdWxkIHRha2Ugcm91Z2hseSA3MjQsMDAwIHNpbmdsZSBwcmVjaXNpb24KK211bHRpcGxpY2F0aW9ucyB3aXRoIFRvb20tQ29vayBvciAxMDAsMDAwLDAwMCBzaW5nbGUgcHJlY2lzaW9uIG11bHRpcGxpY2F0aW9ucyB3aXRoIHRoZSBzdGFuZGFyZCBDb21iYSAoYSBmYWN0b3IKK29mIDEzOCkuCisKK1NvIHdoeSBub3QgYWx3YXlzIHVzZSBLYXJhdHN1YmEgb3IgVG9vbS1Db29rPyAgIFRoZSBzaW1wbGUgYW5zd2VyIGlzIHRoYXQgdGhleSBoYXZlIHNvIG11Y2ggb3ZlcmhlYWQgdGhhdCB0aGV5J3JlIG5vdAorYWN0dWFsbHkgZmFzdGVyIHRoYW4gQ29tYmEgdW50aWwgeW91IGhpdCBkaXN0aW5jdCAgYGBjdXRvZmYnJyBwb2ludHMuICBGb3IgS2FyYXRzdWJhIHdpdGggdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgCitHQ0MgMy4zLjEgYW5kIGFuIEF0aGxvbiBYUCBwcm9jZXNzb3IgdGhlIGN1dG9mZiBwb2ludCBpcyByb3VnaGx5IDExMCBkaWdpdHMgKGFib3V0IDcwIGZvciB0aGUgSW50ZWwgUDQpLiAgVGhhdCBpcywgYXQgCisxMTAgZGlnaXRzIEthcmF0c3ViYSBhbmQgQ29tYmEgbXVsdGlwbGljYXRpb25zIGp1c3QgYWJvdXQgYnJlYWsgZXZlbiBhbmQgZm9yIDExMCsgZGlnaXRzIEthcmF0c3ViYSBpcyBmYXN0ZXIuCisKK1Rvb20tQ29vayBoYXMgaW5jcmVkaWJsZSBvdmVyaGVhZCBhbmQgaXMgcHJvYmFibHkgb25seSB1c2VmdWwgZm9yIHZlcnkgbGFyZ2UgaW5wdXRzLiAgU28gZmFyIG5vIGtub3duIGN1dG9mZiBwb2ludHMgCitleGlzdCBhbmQgZm9yIHRoZSBtb3N0IHBhcnQgSSBqdXN0IHNldCB0aGUgY3V0b2ZmIHBvaW50cyB2ZXJ5IGhpZ2ggdG8gbWFrZSBzdXJlIHRoZXkncmUgbm90IGNhbGxlZC4KKworQSBkZW1vIHByb2dyYW0gaW4gdGhlIGBgZXRjLycnIGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdCBjYWxsZWQgYGB0dW5lLmMnJyBjYW4gYmUgdXNlZCB0byBmaW5kIHRoZSBjdXRvZmYgcG9pbnRzLiAgVGhpcworY2FuIGJlIGJ1aWx0IHdpdGggR0NDIGFzIGZvbGxvd3MKKworXGJlZ2lue2FsbHR0fQorbWFrZSBYWFgKK1xlbmR7YWxsdHR9CitXaGVyZSBgYFhYWCcnIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVudHJpZXMgZnJvbSB0aGUgdGFibGUgXHJlZntmaWc6dHVuaW5nfS4KKworXGJlZ2lue2ZpZ3VyZX1baGVyZV0KK1xiZWdpbntjZW50ZXJ9CitcYmVnaW57c21hbGx9CitcYmVnaW57dGFidWxhcn17fGx8bHx9CitcaGxpbmUgXHRleHRiZntWYWx1ZSBvZiBYWFh9ICYgXHRleHRiZntNZWFuaW5nfSBcXAorXGhsaW5lIHR1bmUgJiBCdWlsZHMgcG9ydGFibGUgdHVuaW5nIGFwcGxpY2F0aW9uIFxcCitcaGxpbmUgdHVuZTg2ICYgQnVpbGRzIHg4NiAocGVudGl1bSBhbmQgdXApIHByb2dyYW0gZm9yIENPRkYgXFwKK1xobGluZSB0dW5lODZjICYgQnVpbGRzIHg4NiBwcm9ncmFtIGZvciBDeWd3aW4gXFwKK1xobGluZSB0dW5lODZsICYgQnVpbGRzIHg4NiBwcm9ncmFtIGZvciBMaW51eCAoRUxGIGZvcm1hdCkgXFwKK1xobGluZQorXGVuZHt0YWJ1bGFyfQorXGVuZHtzbWFsbH0KK1xlbmR7Y2VudGVyfQorXGNhcHRpb257QnVpbGQgTmFtZXMgZm9yIFR1bmluZyBQcm9ncmFtc30KK1xsYWJlbHtmaWc6dHVuaW5nfQorXGVuZHtmaWd1cmV9CisKK1doZW4gdGhlIHByb2dyYW0gaXMgcnVubmluZyBpdCB3aWxsIG91dHB1dCBhIHNlcmllcyBvZiBtZWFzdXJlbWVudHMgZm9yIGRpZmZlcmVudCBjdXRvZmYgcG9pbnRzLiAgSXQgd2lsbCBmaXJzdCBmaW5kCitnb29kIEthcmF0c3ViYSBzcXVhcmluZyBhbmQgbXVsdGlwbGljYXRpb24gcG9pbnRzLiAgVGhlbiBpdCBwcm9jZWVkcyB0byBmaW5kIFRvb20tQ29vayBwb2ludHMuICBOb3RlIHRoYXQgdGhlIFRvb20tQ29vawordHVuaW5nIHRha2VzIGEgdmVyeSBsb25nIHRpbWUgYXMgdGhlIGN1dG9mZiBwb2ludHMgYXJlIGxpa2VseSB0byBiZSB2ZXJ5IGhpZ2guCisKK1xjaGFwdGVye01vZHVsYXIgUmVkdWN0aW9ufQorCitNb2R1bGFyIHJlZHVjdGlvbiBpcyBwcm9jZXNzIG9mIHRha2luZyB0aGUgcmVtYWluZGVyIG9mIG9uZSBxdWFudGl0eSBkaXZpZGVkIGJ5IGFub3RoZXIuICBFeHByZXNzZWQgCithcyAoXHJlZntlcW46bW9kfSkgdGhlIG1vZHVsYXIgcmVkdWN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIHJlbWFpbmRlciBvZiAkYiQgZGl2aWRlZCBieSAkYyQuICAKKworXGJlZ2lue2VxdWF0aW9ufQorYSBcZXF1aXYgYiBcbWJveHsgKG1vZCB9Y1xtYm94eyl9CitcbGFiZWx7ZXFuOm1vZH0KK1xlbmR7ZXF1YXRpb259CisKK09mIHBhcnRpY3VsYXIgaW50ZXJlc3QgdG8gY3J5cHRvZ3JhcGh5IGFyZSByZWR1Y3Rpb25zIHdoZXJlICRiJCBpcyBsaW1pdGVkIHRvIHRoZSByYW5nZSAkMCBcbGUgYiA8IGNeMiQgc2luY2UgcGFydGljdWxhcmx5IAorZmFzdCByZWR1Y3Rpb24gYWxnb3JpdGhtcyBjYW4gYmUgd3JpdHRlbiBmb3IgdGhlIGxpbWl0ZWQgcmFuZ2UuICAKKworTm90ZSB0aGF0IG9uZSBvZiB0aGUgZm91ciBvcHRpbWl6ZWQgcmVkdWN0aW9uIGFsZ29yaXRobXMgYXJlIGF1dG9tYXRpY2FsbHkgY2hvc2VuIGluIHRoZSBtb2R1bGFyIGV4cG9uZW50aWF0aW9uCithbGdvcml0aG0gbXBcX2V4cHRtb2Qgd2hlbiBhbiBhcHByb3ByaWF0ZSBtb2R1bHVzIGlzIGRldGVjdGVkLiAgCisKK1xzZWN0aW9ue1N0cmFpZ2h0IERpdmlzaW9ufQorSW4gb3JkZXIgdG8gZWZmZWN0IGFuIGFyYml0cmFyeSBtb2R1bGFyIHJlZHVjdGlvbiB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSBpcyBwcm92aWRlZC4KKworXGluZGV4e21wXF9tb2R9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfbW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworXGVuZHthbGx0dH0KKworVGhpcyByZWR1Y2VzICRhJCBtb2R1bG8gJGIkIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiAkYyQuICBUaGUgc2lnbiBvZiAkYyQgc2hhbGwgYWdyZWUgd2l0aCB0aGUgc2lnbiAKK29mICRiJC4gIFRoaXMgYWxnb3JpdGhtIGFjY2VwdHMgYW4gaW5wdXQgJGEkIG9mIGFueSByYW5nZSBhbmQgaXMgbm90IGxpbWl0ZWQgYnkgJDAgXGxlIGEgPCBiXjIkLgorCitcc2VjdGlvbntCYXJyZXR0IFJlZHVjdGlvbn0KKworQmFycmV0dCByZWR1Y3Rpb24gaXMgYSBnZW5lcmljIG9wdGltaXplZCByZWR1Y3Rpb24gYWxnb3JpdGhtIHRoYXQgcmVxdWlyZXMgcHJlLS1jb21wdXRhdGlvbiB0byBhY2hpZXZlCithIGRlY2VudCBzcGVlZHVwIG92ZXIgc3RyYWlnaHQgZGl2aXNpb24uICBGaXJzdCBhICRcbXUkIHZhbHVlIG11c3QgYmUgcHJlY29tcHV0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uLgorCitcaW5kZXh7bXBcX3JlZHVjZVxfc2V0dXB9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfcmVkdWNlX3NldHVwKG1wX2ludCAqYSwgbXBfaW50ICpiKTsKK1xlbmR7YWxsdHR9CisKK0dpdmVuIGEgbW9kdWx1cyBpbiAkYiQgdGhpcyBwcm9kdWNlcyB0aGUgcmVxdWlyZWQgJFxtdSQgdmFsdWUgaW4gJGEkLiAgRm9yIGFueSBnaXZlbiBtb2R1bHVzIHRoaXMgb25seSBoYXMgdG8KK2JlIGNvbXB1dGVkIG9uY2UuICBNb2R1bGFyIHJlZHVjdGlvbiBjYW4gbm93IGJlIHBlcmZvcm1lZCB3aXRoIHRoZSBmb2xsb3dpbmcuCisKK1xpbmRleHttcFxfcmVkdWNlfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX3JlZHVjZShtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKTsKK1xlbmR7YWxsdHR9CisKK1RoaXMgd2lsbCByZWR1Y2UgJGEkIGluIHBsYWNlIG1vZHVsbyAkYiQgd2l0aCB0aGUgcHJlY29tcHV0ZWQgJFxtdSQgdmFsdWUgaW4gJGMkLiAgJGEkIG11c3QgYmUgaW4gdGhlIHJhbmdlCiskMCBcbGUgYSA8IGJeMiQuCisKK1xiZWdpbnthbGx0dH0KK2ludCBtYWluKHZvaWQpCitceworICAgbXBfaW50ICAgYSwgYiwgYywgbXU7CisgICBpbnQgICAgICByZXN1bHQ7CisKKyAgIC8qIGluaXRpYWxpemUgYSxiIHRvIGRlc2lyZWQgdmFsdWVzLCBtcF9pbml0IG11LCAKKyAgICAqIGMgYW5kIHNldCBjIHRvIDEuLi53ZSB3YW50IHRvIGNvbXB1dGUgYV4zIG1vZCBiIAorICAgICovCisKKyAgIC8qIGdldCBtdSB2YWx1ZSAqLworICAgaWYgKChyZXN1bHQgPSBtcF9yZWR1Y2Vfc2V0dXAoJm11LCBiKSkgIT0gTVBfT0tBWSkgXHsKKyAgICAgIHByaW50ZigiRXJyb3IgZ2V0dGluZyBtdS4gIFwlcyIsIAorICAgICAgICAgICAgIG1wX2Vycm9yX3RvX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICBcfQorCisgICAvKiBzcXVhcmUgYSB0byBnZXQgYyA9IGFeMiAqLworICAgaWYgKChyZXN1bHQgPSBtcF9zcXIoJmEsICZjKSkgIT0gTVBfT0tBWSkgXHsKKyAgICAgIHByaW50ZigiRXJyb3Igc3F1YXJpbmcuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKworICAgLyogbm93IHJlZHVjZSBgYycgbW9kdWxvIGIgKi8KKyAgIGlmICgocmVzdWx0ID0gbXBfcmVkdWNlKCZjLCAmYiwgJm11KSkgIT0gTVBfT0tBWSkgXHsKKyAgICAgIHByaW50ZigiRXJyb3IgcmVkdWNpbmcuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKyAgIAorICAgLyogbXVsdGlwbHkgYSB0byBnZXQgYyA9IGFeMyAqLworICAgaWYgKChyZXN1bHQgPSBtcF9tdWwoJmEsICZjLCAmYykpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIHJlZHVjaW5nLiAgXCVzIiwgCisgICAgICAgICAgICAgbXBfZXJyb3JfdG9fc3RyaW5nKHJlc3VsdCkpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIFx9CisKKyAgIC8qIG5vdyByZWR1Y2UgYGMnIG1vZHVsbyBiICAqLworICAgaWYgKChyZXN1bHQgPSBtcF9yZWR1Y2UoJmMsICZiLCAmbXUpKSAhPSBNUF9PS0FZKSBceworICAgICAgcHJpbnRmKCJFcnJvciByZWR1Y2luZy4gIFwlcyIsIAorICAgICAgICAgICAgIG1wX2Vycm9yX3RvX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICBcfQorICAKKyAgIC8qIGMgbm93IGVxdWFscyBhXjMgbW9kIGIgKi8KKworICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK1x9CitcZW5ke2FsbHR0fSAKKworVGhpcyBwcm9ncmFtIHdpbGwgY2FsY3VsYXRlICRhXjMgXG1ib3h7IG1vZCB9YiQgaWYgYWxsIHRoZSBmdW5jdGlvbnMgc3VjY2VlZC4gIAorCitcc2VjdGlvbntNb250Z29tZXJ5IFJlZHVjdGlvbn0KKworTW9udGdvbWVyeSBpcyBhIHNwZWNpYWxpemVkIHJlZHVjdGlvbiBhbGdvcml0aG0gZm9yIGFueSBvZGQgbW9kdWxpLiAgTGlrZSBCYXJyZXR0IHJlZHVjdGlvbiBhIHByZS0tY29tcHV0YXRpb24KK3N0ZXAgaXMgcmVxdWlyZWQuICBUaGlzIGlzIGFjY29tcGxpc2hlZCB3aXRoIHRoZSBmb2xsb3dpbmcuCisKK1xpbmRleHttcFxfbW9udGdvbWVyeVxfc2V0dXB9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfbW9udGdvbWVyeV9zZXR1cChtcF9pbnQgKmEsIG1wX2RpZ2l0ICptcCk7CitcZW5ke2FsbHR0fQorCitGb3IgdGhlIGdpdmVuIG9kZCBtb2R1bGkgJGEkIHRoZSBwcmVjb21wdXRhdGlvbiB2YWx1ZSBpcyBwbGFjZWQgaW4gJG1wJC4gIFRoZSByZWR1Y3Rpb24gaXMgY29tcHV0ZWQgd2l0aCB0aGUgCitmb2xsb3dpbmcuCisKK1xpbmRleHttcFxfbW9udGdvbWVyeVxfcmVkdWNlfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX21vbnRnb21lcnlfcmVkdWNlKG1wX2ludCAqYSwgbXBfaW50ICptLCBtcF9kaWdpdCBtcCk7CitcZW5ke2FsbHR0fQorVGhpcyByZWR1Y2VzICRhJCBpbiBwbGFjZSBtb2R1bG8gJG0kIHdpdGggdGhlIHByZS0tY29tcHV0ZWQgdmFsdWUgJG1wJC4gICAkYSQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UKKyQwIFxsZSBhIDwgYl4yJC4KKworTW9udGdvbWVyeSByZWR1Y3Rpb24gaXMgZmFzdGVyIHRoYW4gQmFycmV0dCByZWR1Y3Rpb24gZm9yIG1vZHVsaSBzbWFsbGVyIHRoYW4gdGhlIGBgY29tYmEnJyBsaW1pdC4gIFdpdGggdGhlIGRlZmF1bHQKK3NldHVwIGZvciBpbnN0YW5jZSwgdGhlIGxpbWl0IGlzICQxMjckIGRpZ2l0cyAoJDM1NTYkLS1iaXRzKS4gICBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBub3QgbGltaXRlZCB0bworJDEyNyQgZGlnaXRzIGp1c3QgdGhhdCBpdCBmYWxscyBiYWNrIHRvIGEgYmFzZWxpbmUgYWxnb3JpdGhtIGFmdGVyIHRoYXQgcG9pbnQuICAKKworQW4gaW1wb3J0YW50IG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyByZWR1Y3Rpb24gZG9lcyBub3QgcmV0dXJuICRhIFxtYm94eyBtb2QgfW0kIGJ1dCAkYVJeey0xfSBcbWJveHsgbW9kIH1tJCAKK3doZXJlICRSID0gXGJldGFebiQsICRuJCBpcyB0aGUgbiBudW1iZXIgb2YgZGlnaXRzIGluICRtJCBhbmQgJFxiZXRhJCBpcyByYWRpeCB1c2VkIChkZWZhdWx0IGlzICQyXnsyOH0kKS4gIAorCitUbyBxdWlja2x5IGNhbGN1bGF0ZSAkUiQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiB3YXMgcHJvdmlkZWQuCisKK1xpbmRleHttcFxfbW9udGdvbWVyeVxfY2FsY1xfbm9ybWFsaXphdGlvbn0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbihtcF9pbnQgKmEsIG1wX2ludCAqYik7CitcZW5ke2FsbHR0fQorV2hpY2ggY2FsY3VsYXRlcyAkYSA9IFIkIGZvciB0aGUgb2RkIG1vZHVsaSAkYiQgd2l0aG91dCB1c2luZyBtdWx0aXBsaWNhdGlvbiBvciBkaXZpc2lvbi4gIAorCitUaGUgbm9ybWFsIG1vZHVzIG9wZXJhbmRpIGZvciBNb250Z29tZXJ5IHJlZHVjdGlvbnMgaXMgdG8gbm9ybWFsaXplIHRoZSBpbnRlZ2VycyBiZWZvcmUgZW50ZXJpbmcgdGhlIHN5c3RlbS4gIEZvcgorZXhhbXBsZSwgdG8gY2FsY3VsYXRlICRhXjMgXG1ib3ggeyBtb2QgfWIkIHVzaW5nIE1vbnRnb21lcnkgcmVkdWN0aW9uIHRoZSB2YWx1ZSBvZiAkYSQgY2FuIGJlIG5vcm1hbGl6ZWQgYnkKK211bHRpcGx5aW5nIGl0IGJ5ICRSJC4gIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0LgorCitcYmVnaW57YWxsdHR9CitpbnQgbWFpbih2b2lkKQorXHsKKyAgIG1wX2ludCAgIGEsIGIsIGMsIFI7CisgICBtcF9kaWdpdCBtcDsKKyAgIGludCAgICAgIHJlc3VsdDsKKworICAgLyogaW5pdGlhbGl6ZSBhLGIgdG8gZGVzaXJlZCB2YWx1ZXMsIAorICAgICogbXBfaW5pdCBSLCBjIGFuZCBzZXQgYyB0byAxLi4uLiAKKyAgICAqLworCisgICAvKiBnZXQgbm9ybWFsaXphdGlvbiAqLworICAgaWYgKChyZXN1bHQgPSBtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbigmUiwgYikpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIGdldHRpbmcgbm9ybS4gIFwlcyIsIAorICAgICAgICAgICAgIG1wX2Vycm9yX3RvX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICBcfQorCisgICAvKiBnZXQgbXAgdmFsdWUgKi8KKyAgIGlmICgocmVzdWx0ID0gbXBfbW9udGdvbWVyeV9zZXR1cCgmYywgJm1wKSkgIT0gTVBfT0tBWSkgXHsKKyAgICAgIHByaW50ZigiRXJyb3Igc2V0dGluZyB1cCBtb250Z29tZXJ5LiAgXCVzIiwgCisgICAgICAgICAgICAgbXBfZXJyb3JfdG9fc3RyaW5nKHJlc3VsdCkpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIFx9CisKKyAgIC8qIG5vcm1hbGl6ZSBgYScgc28gbm93IGEgaXMgZXF1YWwgdG8gYVIgKi8KKyAgIGlmICgocmVzdWx0ID0gbXBfbXVsbW9kKCZhLCAmUiwgJmIsICZhKSkgIT0gTVBfT0tBWSkgXHsKKyAgICAgIHByaW50ZigiRXJyb3IgY29tcHV0aW5nIGFSLiAgXCVzIiwgCisgICAgICAgICAgICAgbXBfZXJyb3JfdG9fc3RyaW5nKHJlc3VsdCkpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIFx9CisKKyAgIC8qIHNxdWFyZSBhIHRvIGdldCBjID0gYV4yUl4yICovCisgICBpZiAoKHJlc3VsdCA9IG1wX3NxcigmYSwgJmMpKSAhPSBNUF9PS0FZKSBceworICAgICAgcHJpbnRmKCJFcnJvciBzcXVhcmluZy4gIFwlcyIsIAorICAgICAgICAgICAgIG1wX2Vycm9yX3RvX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICBcfQorCisgICAvKiBub3cgcmVkdWNlIGBjJyBiYWNrIGRvd24gdG8gYyA9IGFeMlJeMiAqIFJeLTEgPT0gYV4yUiAqLworICAgaWYgKChyZXN1bHQgPSBtcF9tb250Z29tZXJ5X3JlZHVjZSgmYywgJmIsIG1wKSkgIT0gTVBfT0tBWSkgXHsKKyAgICAgIHByaW50ZigiRXJyb3IgcmVkdWNpbmcuICBcJXMiLCAKKyAgICAgICAgICAgICBtcF9lcnJvcl90b19zdHJpbmcocmVzdWx0KSk7CisgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgXH0KKyAgIAorICAgLyogbXVsdGlwbHkgYSB0byBnZXQgYyA9IGFeM1JeMiAqLworICAgaWYgKChyZXN1bHQgPSBtcF9tdWwoJmEsICZjLCAmYykpICE9IE1QX09LQVkpIFx7CisgICAgICBwcmludGYoIkVycm9yIHJlZHVjaW5nLiAgXCVzIiwgCisgICAgICAgICAgICAgbXBfZXJyb3JfdG9fc3RyaW5nKHJlc3VsdCkpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIFx9CisKKyAgIC8qIG5vdyByZWR1Y2UgYGMnIGJhY2sgZG93biB0byBjID0gYV4zUl4yICogUl4tMSA9PSBhXjNSICovCisgICBpZiAoKHJlc3VsdCA9IG1wX21vbnRnb21lcnlfcmVkdWNlKCZjLCAmYiwgbXApKSAhPSBNUF9PS0FZKSBceworICAgICAgcHJpbnRmKCJFcnJvciByZWR1Y2luZy4gIFwlcyIsIAorICAgICAgICAgICAgIG1wX2Vycm9yX3RvX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICBcfQorICAgCisgICAvKiBub3cgcmVkdWNlIChhZ2FpbikgYGMnIGJhY2sgZG93biB0byBjID0gYV4zUiAqIFJeLTEgPT0gYV4zICovCisgICBpZiAoKHJlc3VsdCA9IG1wX21vbnRnb21lcnlfcmVkdWNlKCZjLCAmYiwgbXApKSAhPSBNUF9PS0FZKSBceworICAgICAgcHJpbnRmKCJFcnJvciByZWR1Y2luZy4gIFwlcyIsIAorICAgICAgICAgICAgIG1wX2Vycm9yX3RvX3N0cmluZyhyZXN1bHQpKTsKKyAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICBcfQorCisgICAvKiBjIG5vdyBlcXVhbHMgYV4zIG1vZCBiICovCisKKyAgIHJldHVybiBFWElUX1NVQ0NFU1M7CitcfQorXGVuZHthbGx0dH0gCisKK1RoaXMgcGFydGljdWxhciBleGFtcGxlIGRvZXMgbm90IGxvb2sgdG9vIGVmZmljaWVudCBidXQgaXQgZGVtb25zdHJhdGVzIHRoZSBwb2ludCBvZiB0aGUgYWxnb3JpdGhtLiAgQnkgCitub3JtYWxpemluZyB0aGUgaW5wdXRzIHRoZSByZWR1Y2VkIHJlc3VsdHMgYXJlIGFsd2F5cyBvZiB0aGUgZm9ybSAkYVIkIGZvciBzb21lIHZhcmlhYmxlICRhJC4gIFRoaXMgYWxsb3dzCithIHNpbmdsZSBmaW5hbCByZWR1Y3Rpb24gdG8gY29ycmVjdCBmb3IgdGhlIG5vcm1hbGl6YXRpb24gYW5kIHRoZSBmYXN0IHJlZHVjdGlvbiB1c2VkIHdpdGhpbiB0aGUgYWxnb3JpdGhtLgorCitGb3IgbW9yZSBkZXRhaWxzIGNvbnNpZGVyIGV4YW1pbmluZyB0aGUgZmlsZSBcdGV4dGl0e2JuXF9tcFxfZXhwdG1vZFxfZmFzdC5jfS4KKworXHNlY3Rpb257UmVzdHJpY3RlZCBEaW1taW5pc2hlZCBSYWRpeH0KKworYGBEaW1taW5pc2hlZCBSYWRpeCcnIHJlZHVjdGlvbiByZWZlcnMgdG8gcmVkdWN0aW9uIHdpdGggcmVzcGVjdCB0byBtb2R1bGkgdGhhdCBhcmUgYW1lbmlhYmxlIHRvIHNpbXBsZQorZGlnaXQgc2hpZnRpbmcgYW5kIHNtYWxsIG11bHRpcGxpY2F0aW9ucy4gIEluIHRoaXMgY2FzZSB0aGUgYGByZXN0cmljdGVkJycgdmFyaWFudCByZWZlcnMgdG8gbW9kdWxpIG9mIHRoZQorZm9ybSAkXGJldGFeayAtIHAkIGZvciBzb21lICRrIFxnZSAwJCBhbmQgJDAgPCBwIDwgXGJldGEkIHdoZXJlICRcYmV0YSQgaXMgdGhlIHJhZGl4IChkZWZhdWx0IHRvICQyXnsyOH0kKS4gIAorCitBcyBpbiB0aGUgY2FzZSBvZiBNb250Z29tZXJ5IHJlZHVjdGlvbiB0aGVyZSBpcyBhIHByZS0tY29tcHV0YXRpb24gcGhhc2UgcmVxdWlyZWQgZm9yIGEgZ2l2ZW4gbW9kdWx1cy4KKworXGluZGV4e21wXF9kclxfc2V0dXB9CitcYmVnaW57YWxsdHR9Cit2b2lkIG1wX2RyX3NldHVwKG1wX2ludCAqYSwgbXBfZGlnaXQgKmQpOworXGVuZHthbGx0dH0KKworVGhpcyBjb21wdXRlcyB0aGUgdmFsdWUgcmVxdWlyZWQgZm9yIHRoZSBtb2R1bHVzICRhJCBhbmQgc3RvcmVzIGl0IGluICRkJC4gIFRoaXMgZnVuY3Rpb24gY2Fubm90IGZhaWwKK2FuZCBkb2VzIG5vdCByZXR1cm4gYW55IGVycm9yIGNvZGVzLiAgQWZ0ZXIgdGhlIHByZS0tY29tcHV0YXRpb24gYSByZWR1Y3Rpb24gY2FuIGJlIHBlcmZvcm1lZCB3aXRoIHRoZQorZm9sbG93aW5nLgorCitcaW5kZXh7bXBcX2RyXF9yZWR1Y2V9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfZHJfcmVkdWNlKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9kaWdpdCBtcCk7CitcZW5ke2FsbHR0fQorCitUaGlzIHJlZHVjZXMgJGEkIGluIHBsYWNlIG1vZHVsbyAkYiQgd2l0aCB0aGUgcHJlLS1jb21wdXRlZCB2YWx1ZSAkbXAkLiAgJGIkIG11c3QgYmUgb2YgYSByZXN0cmljdGVkCitkaW1taW5pc2hlZCByYWRpeCBmb3JtIGFuZCAkYSQgbXVzdCBiZSBpbiB0aGUgcmFuZ2UgJDAgXGxlIGEgPCBiXjIkLiAgRGltbWluaXNoZWQgcmFkaXggcmVkdWN0aW9ucyBhcmUgCittdWNoIGZhc3RlciB0aGFuIGJvdGggQmFycmV0dCBhbmQgTW9udGdvbWVyeSByZWR1Y3Rpb25zIGFzIHRoZXkgaGF2ZSBhIG11Y2ggbG93ZXIgYXN5bXRvdGljIHJ1bm5pbmcgdGltZS4gIAorCitTaW5jZSB0aGUgbW9kdWxpIGFyZSByZXN0cmljdGVkIHRoaXMgYWxnb3JpdGhtIGlzIG5vdCBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBzb21ldGhpbmcgbGlrZSBSYWJpbiwgUlNBIG9yCitCQlMgY3J5cHRvZ3JhcGhpYyBwdXJwb3Nlcy4gIFRoaXMgcmVkdWN0aW9uIGFsZ29yaXRobSBpcyB1c2VmdWwgZm9yIERpZmZpZS1IZWxsbWFuIGFuZCBFQ0Mgd2hlcmUgZml4ZWQKK3ByaW1lcyBhcmUgYWNjZXB0YWJsZS4gIAorCitOb3RlIHRoYXQgdW5saWtlIE1vbnRnb21lcnkgcmVkdWN0aW9uIHRoZXJlIGlzIG5vIG5vcm1hbGl6YXRpb24gcHJvY2Vzcy4gIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcworZXF1YWwgdG8gdGhlIGNvcnJlY3QgcmVzaWR1ZS4KKworXHNlY3Rpb257VW5yZXN0cmljdGVkIERpbW1pbnNoZWQgUmFkaXh9CisKK1VucmVzdHJpY3RlZCByZWR1Y3Rpb25zIHdvcmsgbXVjaCBsaWtlIHRoZSByZXN0cmljdGVkIGNvdW50ZXJwYXJ0cyBleGNlcHQgaW4gdGhpcyBjYXNlIHRoZSBtb2R1bGkgaXMgb2YgdGhlIAorZm9ybSAkMl5rIC0gcCQgZm9yICQwIDwgcCA8IFxiZXRhJC4gIEluIHRoaXMgc2Vuc2UgdGhlIHVucmVzdHJpY3RlZCByZWR1Y3Rpb25zIGFyZSBtb3JlIGZsZXhpYmxlIGFzIHRoZXkgCitjYW4gYmUgYXBwbGllZCB0byBhIHdpZGVyIHJhbmdlIG9mIG51bWJlcnMuICAKKworXGluZGV4e21wXF9yZWR1Y2VcXzJrXF9zZXR1cH0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9yZWR1Y2VfMmtfc2V0dXAobXBfaW50ICphLCBtcF9kaWdpdCAqZCk7CitcZW5ke2FsbHR0fQorCitUaGlzIHdpbGwgY29tcHV0ZSB0aGUgcmVxdWlyZWQgJGQkIHZhbHVlIGZvciB0aGUgZ2l2ZW4gbW9kdWxpICRhJC4gIAorCitcaW5kZXh7bXBcX3JlZHVjZVxfMmt9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfcmVkdWNlXzJrKG1wX2ludCAqYSwgbXBfaW50ICpuLCBtcF9kaWdpdCBkKTsKK1xlbmR7YWxsdHR9CisKK1RoaXMgd2lsbCByZWR1Y2UgJGEkIGluIHBsYWNlIG1vZHVsbyAkbiQgd2l0aCB0aGUgcHJlLS1jb21wdXRlZCB2YWx1ZSAkZCQuICBGcm9tIG15IGV4cGVyaWVuY2UgdGhpcyByb3V0aW5lIGlzIAorc2xvd2VyIHRoYW4gbXBcX2RyXF9yZWR1Y2UgYnV0IGZhc3RlciBmb3IgbW9zdCBtb2R1bGkgc2l6ZXMgdGhhbiB0aGUgTW9udGdvbWVyeSByZWR1Y3Rpb24uICAKKworXGNoYXB0ZXJ7RXhwb25lbnRpYXRpb259Citcc2VjdGlvbntTaW5nbGUgRGlnaXQgRXhwb25lbnRpYXRpb259CitcaW5kZXh7bXBcX2V4cHRcX2R9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfZXhwdF9kIChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiLCBtcF9pbnQgKiBjKQorXGVuZHthbGx0dH0KK1RoaXMgY29tcHV0ZXMgJGMgPSBhXmIkIHVzaW5nIGEgc2ltcGxlIGJpbmFyeSBsZWZ0LXRvLXJpZ2h0IGFsZ29yaXRobS4gIEl0IGlzIGZhc3RlciB0aGFuIHJlcGVhdGVkIG11bHRpcGxpY2F0aW9ucyBieSAKKyRhJCBmb3IgYWxsIHZhbHVlcyBvZiAkYiQgZ3JlYXRlciB0aGFuIHRocmVlLiAgCisKK1xzZWN0aW9ue01vZHVsYXIgRXhwb25lbnRpYXRpb259CitcaW5kZXh7bXBcX2V4cHRtb2R9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfZXhwdG1vZCAobXBfaW50ICogRywgbXBfaW50ICogWCwgbXBfaW50ICogUCwgbXBfaW50ICogWSkKK1xlbmR7YWxsdHR9CitUaGlzIGNvbXB1dGVzICRZIFxlcXVpdiBHXlggXG1ib3h7IChtb2QgfVBcbWJveHspfSQgdXNpbmcgYSB2YXJpYWJsZSB3aWR0aCBzbGlkaW5nIHdpbmRvdyBhbGdvcml0aG0uICBUaGlzIGZ1bmN0aW9uCit3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IHRoZSBmYXN0ZXN0IG1vZHVsYXIgcmVkdWN0aW9uIHRlY2huaXF1ZSB0byB1c2UgZHVyaW5nIHRoZSBvcGVyYXRpb24uICBGb3IgbmVnYXRpdmUgdmFsdWVzIG9mIAorJFgkIHRoZSBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFzICRZIFxlcXVpdiAoR157LTF9IFxtYm94eyBtb2QgfVApXntcdmVydCBYIFx2ZXJ0fSBcbWJveHsgKG1vZCB9UFxtYm94eyl9JCBwcm92aWRlZCB0aGF0IAorJGdjZChHLCBQKSA9IDEkLgorCitUaGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGEgc2hlbGwgYXJvdW5kIHRoZSB0d28gaW50ZXJuYWwgZXhwb25lbnRpYXRpb24gZnVuY3Rpb25zLiAgVGhpcyByb3V0aW5lIHdpbGwgYXV0b21hdGljYWxseQorZGV0ZWN0IHdoZW4gQmFycmV0dCwgTW9udGdvbWVyeSwgUmVzdHJpY3RlZCBhbmQgVW5yZXN0cmljdGVkIERpbW1pbmlzaGVkIFJhZGl4IGJhc2VkIGV4cG9uZW50aWF0aW9uIGNhbiBiZSB1c2VkLiAgR2VuZXJhbGx5Cittb2R1bGkgb2YgdGhlIGEgYGByZXN0cmljdGVkIGRpbW1pbmlzaGVkIHJhZGl4JycgZm9ybSBsZWFkIHRvIHRoZSBmYXN0ZXN0IG1vZHVsYXIgZXhwb25lbnRpYXRpb25zLiAgRm9sbG93ZWQgYnkgTW9udGdvbWVyeQorYW5kIHRoZSBvdGhlciB0d28gYWxnb3JpdGhtcy4KKworXHNlY3Rpb257Um9vdCBGaW5kaW5nfQorXGluZGV4e21wXF9uXF9yb290fQorXGJlZ2lue2FsbHR0fQoraW50IG1wX25fcm9vdCAobXBfaW50ICogYSwgbXBfZGlnaXQgYiwgbXBfaW50ICogYykKK1xlbmR7YWxsdHR9CitUaGlzIGNvbXB1dGVzICRjID0gYV57MS9ifSQgc3VjaCB0aGF0ICRjXmIgXGxlIGEkIGFuZCAkKGMrMSleYiA+IGEkLiAgVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gaXMgbm90IAoraWRlYWwgZm9yIHZhbHVlcyBvZiAkYiQgZ3JlYXRlciB0aGFuIHRocmVlLiAgSXQgd2lsbCB3b3JrIGJ1dCBiZWNvbWUgdmVyeSBzbG93LiAgU28gdW5sZXNzIHlvdSBhcmUgd29ya2luZyB3aXRoIHZlcnkgc21hbGwKK251bWJlcnMgKGxlc3MgdGhhbiAxMDAwIGJpdHMpIEknZCBhdm9pZCAkYiA+IDMkIHNpdHVhdGlvbnMuICBXaWxsIHJldHVybiBhIHBvc2l0aXZlIHJvb3Qgb25seSBmb3IgZXZlbiByb290cyBhbmQgcmV0dXJuCithIHJvb3Qgd2l0aCB0aGUgc2lnbiBvZiB0aGUgaW5wdXQgZm9yIG9kZCByb290cy4gIEZvciBleGFtcGxlLCBwZXJmb3JtaW5nICQ0XnsxLzJ9JCB3aWxsIHJldHVybiAkMiQgd2hlcmVhcyAkKC04KV57MS8zfSQgCit3aWxsIHJldHVybiAkLTIkLiAgCisKK1RoaXMgYWxnb3JpdGhtIHVzZXMgdGhlIGBgTmV3dG9uIEFwcHJveGltYXRpb24nJyBtZXRob2QgYW5kIHdpbGwgY29udmVyZ2Ugb24gdGhlIGNvcnJlY3Qgcm9vdCBmYWlybHkgcXVpY2tseS4gIFNpbmNlCit0aGUgYWxnb3JpdGhtIHJlcXVpcmVzIHJhaXNpbmcgJGEkIHRvIHRoZSBwb3dlciBvZiAkYiQgaXQgaXMgbm90IGlkZWFsIHRvIGF0dGVtcHQgdG8gZmluZCByb290cyBmb3IgbGFyZ2UKK3ZhbHVlcyBvZiAkYiQuICBJZiBwYXJ0aWN1bGFybHkgbGFyZ2Ugcm9vdHMgYXJlIHJlcXVpcmVkIHRoZW4gYSBmYWN0b3IgbWV0aG9kIGNvdWxkIGJlIHVzZWQgaW5zdGVhZC4gIEZvciBleGFtcGxlLAorJGFeezEvMTZ9JCBpcyBlcXVpdmFsZW50IHRvICRcbGVmdCAoYV57MS80fSBccmlnaHQpXnsxLzR9JCBvciBzaW1wbHkgCiskXGxlZnQgKCBcbGVmdCAoIFxsZWZ0ICggYV57MS8yfSBccmlnaHQgKV57MS8yfSBccmlnaHQgKV57MS8yfSBccmlnaHQgKV57MS8yfSQKKworXGNoYXB0ZXJ7UHJpbWUgTnVtYmVyc30KK1xzZWN0aW9ue1RyaWFsIERpdmlzaW9ufQorXGluZGV4e21wXF9wcmltZVxfaXNcX2RpdmlzaWJsZX0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9wcmltZV9pc19kaXZpc2libGUgKG1wX2ludCAqIGEsIGludCAqcmVzdWx0KQorXGVuZHthbGx0dH0KK1RoaXMgd2lsbCBhdHRlbXB0IHRvIGV2ZW5seSBkaXZpZGUgJGEkIGJ5IGEgbGlzdCBvZiBwcmltZXNcZm9vdG5vdGV7RGVmYXVsdCBpcyB0aGUgZmlyc3QgMjU2IHByaW1lcy59IGFuZCBzdG9yZSB0aGUgCitvdXRjb21lIGluIGBgcmVzdWx0JycuICBUaGF0IGlzIGlmICRyZXN1bHQgPSAwJCB0aGVuICRhJCBpcyBub3QgZGl2aXNpYmxlIGJ5IHRoZSBwcmltZXMsIG90aGVyd2lzZSBpdCBpcy4gIE5vdGUgdGhhdCAKK2lmIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gXHRleHRiZntNUFxfT0tBWX0gdGhlIHZhbHVlIGluIGBgcmVzdWx0Jycgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdW5kZWZpbmVkXGZvb3Rub3Rle0N1cnJlbnRseQordGhlIGRlZmF1bHQgaXMgdG8gc2V0IGl0IHRvIHplcm8gZmlyc3QufS4KKworXHNlY3Rpb257RmVybWF0IFRlc3R9CitcaW5kZXh7bXBcX3ByaW1lXF9mZXJtYXR9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfcHJpbWVfZmVybWF0IChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBpbnQgKnJlc3VsdCkKK1xlbmR7YWxsdHR9CitQZXJmb3JtcyBhIEZlcm1hdCBwcmltYWxpdHkgdGVzdCB0byB0aGUgYmFzZSAkYiQuICBUaGF0IGlzIGl0IGNvbXB1dGVzICRiXmEgXG1ib3h7IG1vZCB9YSQgYW5kIHRlc3RzIHdoZXRoZXIgdGhlIHZhbHVlIGlzCitlcXVhbCB0byAkYiQgb3Igbm90LiAgSWYgdGhlIHZhbHVlcyBhcmUgZXF1YWwgdGhlbiAkYSQgaXMgcHJvYmFibHkgcHJpbWUgYW5kICRyZXN1bHQkIGlzIHNldCB0byBvbmUuICBPdGhlcndpc2UgJHJlc3VsdCQKK2lzIHNldCB0byB6ZXJvLgorCitcc2VjdGlvbntNaWxsZXItUmFiaW4gVGVzdH0KK1xpbmRleHttcFxfcHJpbWVcX21pbGxlclxfcmFiaW59CitcYmVnaW57YWxsdHR9CitpbnQgbXBfcHJpbWVfbWlsbGVyX3JhYmluIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBpbnQgKnJlc3VsdCkKK1xlbmR7YWxsdHR9CitQZXJmb3JtcyBhIE1pbGxlci1SYWJpbiB0ZXN0IHRvIHRoZSBiYXNlICRiJCBvZiAkYSQuICBUaGlzIHRlc3QgaXMgbXVjaCBzdHJvbmdlciB0aGFuIHRoZSBGZXJtYXQgdGVzdCBhbmQgaXMgdmVyeSBoYXJkIHRvCitmb29sIChiZXNpZGVzIHdpdGggQ2FybWljaGFlbCBudW1iZXJzKS4gIElmICRhJCBwYXNzZXMgdGhlIHRlc3QgKHRoZXJlZm9yZSBpcyBwcm9iYWJseSBwcmltZSkgJHJlc3VsdCQgaXMgc2V0IHRvIG9uZS4gIAorT3RoZXJ3aXNlICRyZXN1bHQkIGlzIHNldCB0byB6ZXJvLiAgCisKK05vdGUgdGhhdCBpcyBzdWdnZXN0ZWQgdGhhdCB5b3UgdXNlIHRoZSBNaWxsZXItUmFiaW4gdGVzdCBpbnN0ZWFkIG9mIHRoZSBGZXJtYXQgdGVzdCBzaW5jZSBhbGwgb2YgdGhlIGZhaWx1cmVzIG9mIAorTWlsbGVyLVJhYmluIGFyZSBhIHN1YnNldCBvZiB0aGUgZmFpbHVyZXMgb2YgdGhlIEZlcm1hdCB0ZXN0LgorCitcc3Vic2VjdGlvbntSZXF1aXJlZCBOdW1iZXIgb2YgVGVzdHN9CitHZW5lcmFsbHkgdG8gZW5zdXJlIGEgbnVtYmVyIGlzIHZlcnkgbGlrZWx5IHRvIGJlIHByaW1lIHlvdSBoYXZlIHRvIHBlcmZvcm0gdGhlIE1pbGxlci1SYWJpbiB3aXRoIGF0IGxlYXN0IGEgaGFsZi1kb3plbgorb3Igc28gdW5pcXVlIGJhc2VzLiAgSG93ZXZlciwgaXQgaGFzIGJlZW4gcHJvdmVuIHRoYXQgdGhlIHByb2JhYmlsaXR5IG9mIGZhaWx1cmUgZ29lcyBkb3duIGFzIHRoZSBzaXplIG9mIHRoZSBpbnB1dCBnb2VzIHVwLgorVGhpcyBpcyB3aHkgYSBzaW1wbGUgZnVuY3Rpb24gaGFzIGJlZW4gcHJvdmlkZWQgdG8gaGVscCBvdXQuCisKK1xpbmRleHttcFxfcHJpbWVcX3JhYmluXF9taWxsZXJcX3RyaWFsc30KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9wcmltZV9yYWJpbl9taWxsZXJfdHJpYWxzKGludCBzaXplKQorXGVuZHthbGx0dH0KK1RoaXMgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHRyaWFscyByZXF1aXJlZCBmb3IgYSAkMl57LTk2fSQgKG9yIGxvd2VyKSBwcm9iYWJpbGl0eSBvZiBmYWlsdXJlIGZvciBhIGdpdmVuIGBgc2l6ZScnIGV4cHJlc3NlZAoraW4gYml0cy4gIFRoaXMgY29tZXMgaW4gaGFuZHkgc3BlY2lhbGx5IHNpbmNlIGxhcmdlciBudW1iZXJzIGFyZSBzbG93ZXIgdG8gdGVzdC4gIEZvciBleGFtcGxlLCBhIDUxMi1iaXQgbnVtYmVyIHdvdWxkCityZXF1aXJlIHRlbiB0ZXN0cyB3aGVyZWFzIGEgMTAyNC1iaXQgbnVtYmVyIHdvdWxkIG9ubHkgcmVxdWlyZSBmb3VyIHRlc3RzLiAKKworWW91IHNob3VsZCBhbHdheXMgc3RpbGwgcGVyZm9ybSBhIHRyaWFsIGRpdmlzaW9uIGJlZm9yZSBhIE1pbGxlci1SYWJpbiB0ZXN0IHRob3VnaC4KKworXHNlY3Rpb257UHJpbWFsaXR5IFRlc3Rpbmd9CitcaW5kZXh7bXBcX3ByaW1lXF9pc1xfcHJpbWV9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfcHJpbWVfaXNfcHJpbWUgKG1wX2ludCAqIGEsIGludCB0LCBpbnQgKnJlc3VsdCkKK1xlbmR7YWxsdHR9CitUaGlzIHdpbGwgcGVyZm9ybSBhIHRyaWFsIGRpdmlzaW9uIGZvbGxvd2VkIGJ5ICR0JCByb3VuZHMgb2YgTWlsbGVyLVJhYmluIHRlc3RzIG9uICRhJCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiAkcmVzdWx0JC4gIAorSWYgJGEkIHBhc3NlcyBhbGwgb2YgdGhlIHRlc3RzICRyZXN1bHQkIGlzIHNldCB0byBvbmUsIG90aGVyd2lzZSBpdCBpcyBzZXQgdG8gemVyby4gIE5vdGUgdGhhdCAkdCQgaXMgYm91bmRlZCBieSAKKyQxIFxsZSB0IDwgUFJJTUVcX1NJWkUkIHdoZXJlICRQUklNRVxfU0laRSQgaXMgdGhlIG51bWJlciBvZiBwcmltZXMgaW4gdGhlIHByaW1lIG51bWJlciB0YWJsZSAoYnkgZGVmYXVsdCB0aGlzIGlzICQyNTYkKS4KKworXHNlY3Rpb257TmV4dCBQcmltZX0KK1xpbmRleHttcFxfcHJpbWVcX25leHRcX3ByaW1lfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX3ByaW1lX25leHRfcHJpbWUobXBfaW50ICphLCBpbnQgdCwgaW50IGJic19zdHlsZSkKK1xlbmR7YWxsdHR9CitUaGlzIGZpbmRzIHRoZSBuZXh0IHByaW1lIGFmdGVyICRhJCB0aGF0IHBhc3NlcyBtcFxfcHJpbWVcX2lzXF9wcmltZSgpIHdpdGggJHQkIHRlc3RzLiAgU2V0ICRiYnNcX3N0eWxlJCB0byBvbmUgaWYgeW91IAord2FudCBvbmx5IHRoZSBuZXh0IHByaW1lIGNvbmdydWVudCB0byAkMyBcbWJveHsgbW9kIH0gNCQsIG90aGVyd2lzZSBzZXQgaXQgdG8gemVybyB0byBmaW5kIGFueSBuZXh0IHByaW1lLiAgCisKK1xzZWN0aW9ue1JhbmRvbSBQcmltZXN9CitcaW5kZXh7bXBcX3ByaW1lXF9yYW5kb219CitcYmVnaW57YWxsdHR9CitpbnQgbXBfcHJpbWVfcmFuZG9tKG1wX2ludCAqYSwgaW50IHQsIGludCBzaXplLCBpbnQgYmJzLCAKKyAgICAgICAgICAgICAgICAgICAgbHRtX3ByaW1lX2NhbGxiYWNrIGNiLCB2b2lkICpkYXQpCitcZW5ke2FsbHR0fQorVGhpcyB3aWxsIGZpbmQgYSBwcmltZSBncmVhdGVyIHRoYW4gJDI1Nl57c2l6ZX0kIHdoaWNoIGNhbiBiZSBgYGJic1xfc3R5bGUnJyBvciBub3QgZGVwZW5kaW5nIG9uICRiYnMkIGFuZCBtdXN0IHBhc3MKKyR0JCByb3VuZHMgb2YgdGVzdHMuICBUaGUgYGBsdG1cX3ByaW1lXF9jYWxsYmFjaycnIGlzIGEgdHlwZWRlZiBmb3IgCisKK1xiZWdpbnthbGx0dH0KK3R5cGVkZWYgaW50IGx0bV9wcmltZV9jYWxsYmFjayh1bnNpZ25lZCBjaGFyICpkc3QsIGludCBsZW4sIHZvaWQgKmRhdCk7CitcZW5ke2FsbHR0fQorCitXaGljaCBpcyBhIGZ1bmN0aW9uIHRoYXQgbXVzdCByZWFkICRsZW4kIGJ5dGVzIChhbmQgcmV0dXJuIHRoZSBhbW91bnQgc3RvcmVkKSBpbnRvICRkc3QkLiAgVGhlICRkYXQkIHZhcmlhYmxlIGlzIHNpbXBseQorY29waWVkIGZyb20gdGhlIG9yaWdpbmFsIGlucHV0LiAgSXQgY2FuIGJlIHVzZWQgdG8gcGFzcyBSTkcgY29udGV4dCBkYXRhIHRvIHRoZSBjYWxsYmFjay4gIFRoZSBmdW5jdGlvbiAKK21wXF9wcmltZVxfcmFuZG9tKCkgaXMgbW9yZSBzdWl0YWJsZSBmb3IgZ2VuZXJhdGluZyBwcmltZXMgd2hpY2ggbXVzdCBiZSBzZWNyZXQgKGFzIGluIHRoZSBjYXNlIG9mIFJTQSkgc2luY2UgdGhlcmUgCitpcyBubyBza2V3IG9uIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzLgorCitcdGV4dGl0e05vdGU6fSAgQXMgb2YgdjAuMzAgb2YgdGhlIExpYlRvbU1hdGggbGlicmFyeSB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQuICBJdCBpcyBzdGlsbCBhdmFpbGFibGUKK2J1dCB1c2VycyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgdGhlIG5ldyBtcFxfcHJpbWVcX3JhbmRvbVxfZXgoKSBmdW5jdGlvbiBpbnN0ZWFkLgorCitcc3Vic2VjdGlvbntFeHRlbmRlZCBHZW5lcmF0aW9ufQorXGluZGV4e21wXF9wcmltZVxfcmFuZG9tXF9leH0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9wcmltZV9yYW5kb21fZXgobXBfaW50ICphLCAgICBpbnQgdCwgCisgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgc2l6ZSwgaW50IGZsYWdzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgbHRtX3ByaW1lX2NhbGxiYWNrIGNiLCB2b2lkICpkYXQpOworXGVuZHthbGx0dH0KK1RoaXMgd2lsbCBnZW5lcmF0ZSBhIHByaW1lIGluICRhJCB1c2luZyAkdCQgdGVzdHMgb2YgdGhlIHByaW1hbGl0eSB0ZXN0aW5nIGFsZ29yaXRobXMuICBUaGUgdmFyaWFibGUgJHNpemUkCitzcGVjaWZpZXMgdGhlIGJpdCBsZW5ndGggb2YgdGhlIHByaW1lIGRlc2lyZWQuICBUaGUgdmFyaWFibGUgJGZsYWdzJCBzcGVjaWZpZXMgb25lIG9mIHNldmVyYWwgb3B0aW9ucyBhdmFpbGFibGUKKyhzZWUgZmlnLiBccmVme2ZpZzpwcmltZW9wdHN9KSB3aGljaCBjYW4gYmUgT1InZWQgdG9nZXRoZXIuICBUaGUgY2FsbGJhY2sgcGFyYW1ldGVycyBhcmUgdXNlZCBhcyBpbiAKK21wXF9wcmltZVxfcmFuZG9tKCkuCisKK1xiZWdpbntmaWd1cmV9W2hlcmVdCitcYmVnaW57Y2VudGVyfQorXGJlZ2lue3NtYWxsfQorXGJlZ2lue3RhYnVsYXJ9e3xyfGx8fQorXGhsaW5lIFx0ZXh0YmZ7RmxhZ30gICAgICAgICAmIFx0ZXh0YmZ7TWVhbmluZ30gXFwKK1xobGluZSBMVE1cX1BSSU1FXF9CQlMgICAgICAgJiBNYWtlIHRoZSBwcmltZSBjb25ncnVlbnQgdG8gJDMkIG1vZHVsbyAkNCQgXFwKK1xobGluZSBMVE1cX1BSSU1FXF9TQUZFICAgICAgJiBNYWtlIGEgcHJpbWUgJHAkIHN1Y2ggdGhhdCAkKHAgLSAxKS8yJCBpcyBhbHNvIHByaW1lLiBcXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIFRoaXMgb3B0aW9uIGltcGxpZXMgTFRNXF9QUklNRVxfQkJTIGFzIHdlbGwuIFxcCitcaGxpbmUgTFRNXF9QUklNRVxfMk1TQlxfT0ZGICYgTWFrZXMgc3VyZSB0aGF0IHRoZSBiaXQgYWRqYWNlbnQgdG8gdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IFxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgSXMgZm9yY2VkIHRvIHplcm8uICBcXAorXGhsaW5lIExUTVxfUFJJTUVcXzJNU0JcX09OICAmIE1ha2VzIHN1cmUgdGhhdCB0aGUgYml0IGFkamFjZW50IHRvIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBcXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIElzIGZvcmNlZCB0byBvbmUuIFxcCitcaGxpbmUKK1xlbmR7dGFidWxhcn0KK1xlbmR7c21hbGx9CitcZW5ke2NlbnRlcn0KK1xjYXB0aW9ue1ByaW1hbGl0eSBHZW5lcmF0aW9uIE9wdGlvbnN9CitcbGFiZWx7ZmlnOnByaW1lb3B0c30KK1xlbmR7ZmlndXJlfQorCitcY2hhcHRlcntJbnB1dCBhbmQgT3V0cHV0fQorXHNlY3Rpb257QVNDSUkgQ29udmVyc2lvbnN9Citcc3Vic2VjdGlvbntUbyBBU0NJSX0KK1xpbmRleHttcFxfdG9yYWRpeH0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF90b3JhZGl4IChtcF9pbnQgKiBhLCBjaGFyICpzdHIsIGludCByYWRpeCk7CitcZW5ke2FsbHR0fQorVGhpcyBzdGlsbCBzdG9yZSAkYSQgaW4gYGBzdHInJyBhcyBhIGJhc2UtYGByYWRpeCcnIHN0cmluZyBvZiBBU0NJSSBjaGFycy4gIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhIE5VTCBjaGFyYWN0ZXIKK3RvIHRlcm1pbmF0ZSB0aGUgc3RyaW5nLiAgVmFsaWQgdmFsdWVzIG9mIGBgcmFkaXgnJyBsaW5lIGluIHRoZSByYW5nZSAkWzIsIDY0XSQuICBUbyBkZXRlcm1pbmUgdGhlIHNpemUgKGV4YWN0KSByZXF1aXJlZAorYnkgdGhlIGNvbnZlcnNpb24gYmVmb3JlIHN0b3JpbmcgYW55IGRhdGEgdXNlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24uCisKK1xpbmRleHttcFxfcmFkaXhcX3NpemV9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfcmFkaXhfc2l6ZSAobXBfaW50ICogYSwgaW50IHJhZGl4LCBpbnQgKnNpemUpCitcZW5ke2FsbHR0fQorVGhpcyBzdG9yZXMgaW4gYGBzaXplJycgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgc3BhY2UgZm9yIHRoZSBOVUwgdGVybWluYXRvcikgcmVxdWlyZWQuICBVcG9uIGVycm9yIHRoaXMgCitmdW5jdGlvbiByZXR1cm5zIGFuIGVycm9yIGNvZGUgYW5kIGBgc2l6ZScnIHdpbGwgYmUgemVyby4gIAorCitcc3Vic2VjdGlvbntGcm9tIEFTQ0lJfQorXGluZGV4e21wXF9yZWFkXF9yYWRpeH0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9yZWFkX3JhZGl4IChtcF9pbnQgKiBhLCBjaGFyICpzdHIsIGludCByYWRpeCk7CitcZW5ke2FsbHR0fQorVGhpcyB3aWxsIHJlYWQgdGhlIGJhc2UtYGByYWRpeCcnIE5VTCB0ZXJtaW5hdGVkIHN0cmluZyBmcm9tIGBgc3RyJycgaW50byAkYSQuICBJdCB3aWxsIHN0b3AgcmVhZGluZyB3aGVuIGl0IHJlYWRzIGEKK2NoYXJhY3RlciBpdCBkb2VzIG5vdCByZWNvZ25pemUgKHdoaWNoIGhhcHBlbnMgdG8gaW5jbHVkZSB0aCBOVUwgY2hhci4uLiBpbWFnaW5lIHRoYXQuLi4pLiAgQSBzaW5nbGUgbGVhZGluZyAkLSQgc2lnbgorY2FuIGJlIHVzZWQgdG8gZGVub3RlIGEgbmVnYXRpdmUgbnVtYmVyLgorCitcc2VjdGlvbntCaW5hcnkgQ29udmVyc2lvbnN9CisKK0NvbnZlcnRpbmcgYW4gbXBcX2ludCB0byBhbmQgZnJvbSBiaW5hcnkgaXMgYW5vdGhlciBrZWVuIGlkZWEuCisKK1xpbmRleHttcFxfdW5zaWduZWRcX2Jpblxfc2l6ZX0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF91bnNpZ25lZF9iaW5fc2l6ZShtcF9pbnQgKmEpOworXGVuZHthbGx0dH0KKworVGhpcyB3aWxsIHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIChvY3RldHMpIHJlcXVpcmVkIHRvIHN0b3JlIHRoZSB1bnNpZ25lZCBjb3B5IG9mIHRoZSBpbnRlZ2VyICRhJC4KKworXGluZGV4e21wXF90b1xfdW5zaWduZWRcX2Jpbn0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF90b191bnNpZ25lZF9iaW4obXBfaW50ICphLCB1bnNpZ25lZCBjaGFyICpiKTsKK1xlbmR7YWxsdHR9CitUaGlzIHdpbGwgc3RvcmUgJGEkIGludG8gdGhlIGJ1ZmZlciAkYiQgaW4gYmlnLS1lbmRpYW4gZm9ybWF0LiAgRm9ydHVuYXRlbHkgdGhpcyBpcyBleGFjdGx5IHdoYXQgREVSIChvciBpcyBpdCBBU04/KQorcmVxdWlyZXMuICBJdCBkb2VzIG5vdCBzdG9yZSB0aGUgc2lnbiBvZiB0aGUgaW50ZWdlci4KKworXGluZGV4e21wXF9yZWFkXF91bnNpZ25lZFxfYmlufQorXGJlZ2lue2FsbHR0fQoraW50IG1wX3JlYWRfdW5zaWduZWRfYmluKG1wX2ludCAqYSwgdW5zaWduZWQgY2hhciAqYiwgaW50IGMpOworXGVuZHthbGx0dH0KK1RoaXMgd2lsbCByZWFkIGluIGFuIHVuc2lnbmVkIGJpZy0tZW5kaWFuIGFycmF5IG9mIGJ5dGVzIChvY3RldHMpIGZyb20gJGIkIG9mIGxlbmd0aCAkYyQgaW50byAkYSQuICBUaGUgcmVzdWx0aW5nCitpbnRlZ2VyICRhJCB3aWxsIGFsd2F5cyBiZSBwb3NpdGl2ZS4KKworRm9yIHRob3NlIHdobyBhY2tub3dsZWRnZSB0aGUgZXhpc3RlbmNlIG9mIG5lZ2F0aXZlIG51bWJlcnMgKGhlcmV0aWMhKSB0aGVyZSBhcmUgYGBzaWduZWQnJyB2ZXJzaW9ucyBvZiB0aGUKK3ByZXZpb3VzIGZ1bmN0aW9ucy4KKworXGJlZ2lue2FsbHR0fQoraW50IG1wX3NpZ25lZF9iaW5fc2l6ZShtcF9pbnQgKmEpOworaW50IG1wX3JlYWRfc2lnbmVkX2JpbihtcF9pbnQgKmEsIHVuc2lnbmVkIGNoYXIgKmIsIGludCBjKTsKK2ludCBtcF90b19zaWduZWRfYmluKG1wX2ludCAqYSwgdW5zaWduZWQgY2hhciAqYik7CitcZW5ke2FsbHR0fQorVGhleSBvcGVyYXRlIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHRoZSB1bnNpZ25lZCBjb3BpZXMgZXhjZXB0IHRoZXkgcHJlZml4IHRoZSBkYXRhIHdpdGggemVybyBvciBub24tLXplcm8KK2J5dGUgZGVwZW5kaW5nIG9uIHRoZSBzaWduLiAgSWYgdGhlIHNpZ24gaXMgenBvcyAoZS5nLiBub3QgbmVnYXRpdmUpIHRoZSBwcmVmaXggaXMgemVybywgb3RoZXJ3aXNlIHRoZSBwcmVmaXgKK2lzIG5vbi0temVyby4gIAorCitcY2hhcHRlcntBbGdlYnJhaWMgRnVuY3Rpb25zfQorXHNlY3Rpb257RXh0ZW5kZWQgRXVjbGlkZWFuIEFsZ29yaXRobX0KK1xpbmRleHttcFxfZXh0ZXVjbGlkfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX2V4dGV1Y2xpZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgCisgICAgICAgICAgICAgICAgIG1wX2ludCAqVTEsIG1wX2ludCAqVTIsIG1wX2ludCAqVTMpOworXGVuZHthbGx0dH0KKworVGhpcyBmaW5kcyB0aGUgdHJpcGxlIFUxL1UyL1UzIHVzaW5nIHRoZSBFeHRlbmRlZCBFdWNsaWRlYW4gYWxnb3JpdGhtIHN1Y2ggdGhhdCB0aGUgZm9sbG93aW5nIGVxdWF0aW9uIGhvbGRzLgorCitcYmVnaW57ZXF1YXRpb259CithIFxjZG90IFUxICsgYiBcY2RvdCBVMiA9IFUzCitcZW5ke2VxdWF0aW9ufQorCitBbnkgb2YgdGhlIFUxL1UyL1UzIHBhcmFtdGVycyBjYW4gYmUgc2V0IHRvIFx0ZXh0YmZ7TlVMTH0gaWYgdGhleSBhcmUgbm90IGRlc2lyZWQuICAKKworXHNlY3Rpb257R3JlYXRlc3QgQ29tbW9uIERpdmlzb3J9CitcaW5kZXh7bXBcX2djZH0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9nY2QgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpCitcZW5ke2FsbHR0fQorVGhpcyB3aWxsIGNvbXB1dGUgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mICRhJCBhbmQgJGIkIGFuZCBzdG9yZSBpdCBpbiAkYyQuCisKK1xzZWN0aW9ue0xlYXN0IENvbW1vbiBNdWx0aXBsZX0KK1xpbmRleHttcFxfbGNtfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX2xjbSAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK1xlbmR7YWxsdHR9CitUaGlzIHdpbGwgY29tcHV0ZSB0aGUgbGVhc3QgY29tbW9uIG11bHRpcGxlIG9mICRhJCBhbmQgJGIkIGFuZCBzdG9yZSBpdCBpbiAkYyQuCisKK1xzZWN0aW9ue0phY29iaSBTeW1ib2x9CitcaW5kZXh7bXBcX2phY29iaX0KK1xiZWdpbnthbGx0dH0KK2ludCBtcF9qYWNvYmkgKG1wX2ludCAqIGEsIG1wX2ludCAqIHAsIGludCAqYykKK1xlbmR7YWxsdHR9CitUaGlzIHdpbGwgY29tcHV0ZSB0aGUgSmFjb2JpIHN5bWJvbCBmb3IgJGEkIHdpdGggcmVzcGVjdCB0byAkcCQuICBJZiAkcCQgaXMgcHJpbWUgdGhpcyBlc3NlbnRpYWxseSBjb21wdXRlcyB0aGUgTGVnZW5kcmUKK3N5bWJvbC4gIFRoZSByZXN1bHQgaXMgc3RvcmVkIGluICRjJCBhbmQgY2FuIHRha2Ugb24gb25lIG9mIHRocmVlIHZhbHVlcyAkXGxicmFjZSAtMSwgMCwgMSBccmJyYWNlJC4gIElmICRwJCBpcyBwcmltZQordGhlbiB0aGUgcmVzdWx0IHdpbGwgYmUgJC0xJCB3aGVuICRhJCBpcyBub3QgYSBxdWFkcmF0aWMgcmVzaWR1ZSBtb2R1bG8gJHAkLiAgVGhlIHJlc3VsdCB3aWxsIGJlICQwJCBpZiAkYSQgZGl2aWRlcyAkcCQKK2FuZCB0aGUgcmVzdWx0IHdpbGwgYmUgJDEkIGlmICRhJCBpcyBhIHF1YWRyYXRpYyByZXNpZHVlIG1vZHVsbyAkcCQuICAKKworXHNlY3Rpb257TW9kdWxhciBJbnZlcnNlfQorXGluZGV4e21wXF9pbnZtb2R9CitcYmVnaW57YWxsdHR9CitpbnQgbXBfaW52bW9kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQorXGVuZHthbGx0dH0KK0NvbXB1dGVzIHRoZSBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9mICRhJCBtb2R1bG8gJGIkIGFuZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiAkYyQgc3VjaCB0aGF0ICRhYyBcZXF1aXYgMSBcbWJveHsgKG1vZCB9YlxtYm94eyl9JC4KKworXHNlY3Rpb257U2luZ2xlIERpZ2l0IEZ1bmN0aW9uc30KKworRm9yIHRob3NlIHVzaW5nIHNtYWxsIG51bWJlcnMgKFx0ZXh0aXR7c25pY2tlciBzbmlja2VyfSkgdGhlcmUgYXJlIHNldmVyYWwgYGBoZWxwZXInJyBmdW5jdGlvbnMKKworXGluZGV4e21wXF9hZGRcX2R9IFxpbmRleHttcFxfc3ViXF9kfSBcaW5kZXh7bXBcX211bFxfZH0gXGluZGV4e21wXF9kaXZcX2R9IFxpbmRleHttcFxfbW9kXF9kfQorXGJlZ2lue2FsbHR0fQoraW50IG1wX2FkZF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgYiwgbXBfaW50ICpjKTsKK2ludCBtcF9zdWJfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGIsIG1wX2ludCAqYyk7CitpbnQgbXBfbXVsX2QobXBfaW50ICphLCBtcF9kaWdpdCBiLCBtcF9pbnQgKmMpOworaW50IG1wX2Rpdl9kKG1wX2ludCAqYSwgbXBfZGlnaXQgYiwgbXBfaW50ICpjLCBtcF9kaWdpdCAqZCk7CitpbnQgbXBfbW9kX2QobXBfaW50ICphLCBtcF9kaWdpdCBiLCBtcF9kaWdpdCAqYyk7CitcZW5ke2FsbHR0fQorCitUaGVzZSB3b3JrIGxpa2UgdGhlIGZ1bGwgbXBcX2ludCBjYXBhYmxlIHZhcmlhbnRzIGV4Y2VwdCB0aGUgc2Vjb25kIHBhcmFtZXRlciAkYiQgaXMgYSBtcFxfZGlnaXQuICBUaGVzZQorZnVuY3Rpb25zIGZhaXJseSBoYW5keSBpZiB5b3UgaGF2ZSB0byB3b3JrIHdpdGggcmVsYXRpdmVseSBzbWFsbCBudW1iZXJzIHNpbmNlIHlvdSB3aWxsIG5vdCBoYXZlIHRvIGFsbG9jYXRlCithbiBlbnRpcmUgbXBcX2ludCB0byBzdG9yZSBhIG51bWJlciBsaWtlICQxJCBvciAkMiQuCisKK1xpbnB1dHtibi5pbmR9CisKK1xlbmR7ZG9jdW1lbnR9CmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX2Vycm9yLmMgYi9saWJ0b21tYXRoL2JuX2Vycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlNjQzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fZXJyb3IuYwpAQCAtMCwwICsxLDQ3IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX0VSUk9SX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICBpbnQgY29kZTsKKyAgICAgY2hhciAqbXNnOworfSBtc2dzW10gPSB7CisgICAgIHsgTVBfT0tBWSwgIlN1Y2Nlc3NmdWwiIH0sCisgICAgIHsgTVBfTUVNLCAgIk91dCBvZiBoZWFwIiB9LAorICAgICB7IE1QX1ZBTCwgICJWYWx1ZSBvdXQgb2YgcmFuZ2UiIH0KK307CisKKy8qIHJldHVybiBhIGNoYXIgKiBzdHJpbmcgZm9yIGEgZ2l2ZW4gY29kZSAqLworY2hhciAqbXBfZXJyb3JfdG9fc3RyaW5nKGludCBjb2RlKQoreworICAgaW50IHg7CisKKyAgIC8qIHNjYW4gdGhlIGxvb2t1cCB0YWJsZSBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UgKi8KKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YobXNncykgLyBzaXplb2YobXNnc1swXSkpOyB4KyspIHsKKyAgICAgICBpZiAobXNnc1t4XS5jb2RlID09IGNvZGUpIHsKKyAgICAgICAgICByZXR1cm4gbXNnc1t4XS5tc2c7CisgICAgICAgfQorICAgfQorCisgICAvKiBnZW5lcmljIHJlcGx5IGZvciBpbnZhbGlkIGNvZGUgKi8KKyAgIHJldHVybiAiSW52YWxpZCBlcnJvciBjb2RlIjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fZXJyb3IuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fZmFzdF9tcF9pbnZtb2QuYyBiL2xpYnRvbW1hdGgvYm5fZmFzdF9tcF9pbnZtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTc0MTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9mYXN0X21wX2ludm1vZC5jCkBAIC0wLDAgKzEsMTQ4IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX0ZBU1RfTVBfSU5WTU9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGNvbXB1dGVzIHRoZSBtb2R1bGFyIGludmVyc2UgdmlhIGJpbmFyeSBleHRlbmRlZCBldWNsaWRlYW4gYWxnb3JpdGhtLCAKKyAqIHRoYXQgaXMgYyA9IDEvYSBtb2QgYiAKKyAqCisgKiBCYXNlZCBvbiBzbG93IGludm1vZCBleGNlcHQgdGhpcyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlIHdoZXJlIGIgaXMgCisgKiBvZGQgYXMgcGVyIEhBQyBOb3RlIDE0LjY0IG9uIHBwLiA2MTAKKyAqLworaW50IGZhc3RfbXBfaW52bW9kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBtcF9pbnQgIHgsIHksIHUsIHYsIEIsIEQ7CisgIGludCAgICAgcmVzLCBuZWc7CisKKyAgLyogMi4gW21vZGlmaWVkXSBiIG11c3QgYmUgb2RkICAgKi8KKyAgaWYgKG1wX2lzZXZlbiAoYikgPT0gMSkgeworICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworICAvKiBpbml0IGFsbCBvdXIgdGVtcHMgKi8KKyAgaWYgKChyZXMgPSBtcF9pbml0X211bHRpKCZ4LCAmeSwgJnUsICZ2LCAmQiwgJkQsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgIHJldHVybiByZXM7CisgIH0KKworICAvKiB4ID09IG1vZHVsdXMsIHkgPT0gdmFsdWUgdG8gaW52ZXJ0ICovCisgIGlmICgocmVzID0gbXBfY29weSAoYiwgJngpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfRVJSOworICB9CisKKyAgLyogd2UgbmVlZCB5ID0gfGF8ICovCisgIGlmICgocmVzID0gbXBfbW9kIChhLCBiLCAmeSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9FUlI7CisgIH0KKworICAvKiAzLiB1PXgsIHY9eSwgQT0xLCBCPTAsIEM9MCxEPTEgKi8KKyAgaWYgKChyZXMgPSBtcF9jb3B5ICgmeCwgJnUpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfRVJSOworICB9CisgIGlmICgocmVzID0gbXBfY29weSAoJnksICZ2KSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX0VSUjsKKyAgfQorICBtcF9zZXQgKCZELCAxKTsKKwordG9wOgorICAvKiA0LiAgd2hpbGUgdSBpcyBldmVuIGRvICovCisgIHdoaWxlIChtcF9pc2V2ZW4gKCZ1KSA9PSAxKSB7CisgICAgLyogNC4xIHUgPSB1LzIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmdSwgJnUpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIC8qIDQuMiBpZiBCIGlzIG9kZCB0aGVuICovCisgICAgaWYgKG1wX2lzb2RkICgmQikgPT0gMSkgeworICAgICAgaWYgKChyZXMgPSBtcF9zdWIgKCZCLCAmeCwgJkIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgIH0KKyAgICB9CisgICAgLyogQiA9IEIvMiAqLworICAgIGlmICgocmVzID0gbXBfZGl2XzIgKCZCLCAmQikpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisgIH0KKworICAvKiA1LiAgd2hpbGUgdiBpcyBldmVuIGRvICovCisgIHdoaWxlIChtcF9pc2V2ZW4gKCZ2KSA9PSAxKSB7CisgICAgLyogNS4xIHYgPSB2LzIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmdiwgJnYpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIC8qIDUuMiBpZiBEIGlzIG9kZCB0aGVuICovCisgICAgaWYgKG1wX2lzb2RkICgmRCkgPT0gMSkgeworICAgICAgLyogRCA9IChELXgpLzIgKi8KKyAgICAgIGlmICgocmVzID0gbXBfc3ViICgmRCwgJngsICZEKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICAgfQorICAgIC8qIEQgPSBELzIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmRCwgJkQpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICB9CisKKyAgLyogNi4gIGlmIHUgPj0gdiB0aGVuICovCisgIGlmIChtcF9jbXAgKCZ1LCAmdikgIT0gTVBfTFQpIHsKKyAgICAvKiB1ID0gdSAtIHYsIEIgPSBCIC0gRCAqLworICAgIGlmICgocmVzID0gbXBfc3ViICgmdSwgJnYsICZ1KSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfc3ViICgmQiwgJkQsICZCKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvKiB2IC0gdiAtIHUsIEQgPSBEIC0gQiAqLworICAgIGlmICgocmVzID0gbXBfc3ViICgmdiwgJnUsICZ2KSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfc3ViICgmRCwgJkIsICZEKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgfQorCisgIC8qIGlmIG5vdCB6ZXJvIGdvdG8gc3RlcCA0ICovCisgIGlmIChtcF9pc3plcm8gKCZ1KSA9PSAwKSB7CisgICAgZ290byB0b3A7CisgIH0KKworICAvKiBub3cgYSA9IEMsIGIgPSBELCBnY2QgPT0gZyp2ICovCisKKyAgLyogaWYgdiAhPSAxIHRoZW4gdGhlcmUgaXMgbm8gaW52ZXJzZSAqLworICBpZiAobXBfY21wX2QgKCZ2LCAxKSAhPSBNUF9FUSkgeworICAgIHJlcyA9IE1QX1ZBTDsKKyAgICBnb3RvIExCTF9FUlI7CisgIH0KKworICAvKiBiIGlzIG5vdyB0aGUgaW52ZXJzZSAqLworICBuZWcgPSBhLT5zaWduOworICB3aGlsZSAoRC5zaWduID09IE1QX05FRykgeworICAgIGlmICgocmVzID0gbXBfYWRkICgmRCwgYiwgJkQpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICB9CisgIG1wX2V4Y2ggKCZELCBjKTsKKyAgYy0+c2lnbiA9IG5lZzsKKyAgcmVzID0gTVBfT0tBWTsKKworTEJMX0VSUjptcF9jbGVhcl9tdWx0aSAoJngsICZ5LCAmdSwgJnYsICZCLCAmRCwgTlVMTCk7CisgIHJldHVybiByZXM7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9mYXN0X21wX2ludm1vZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9mYXN0X21wX21vbnRnb21lcnlfcmVkdWNlLmMgYi9saWJ0b21tYXRoL2JuX2Zhc3RfbXBfbW9udGdvbWVyeV9yZWR1Y2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzUzOGM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9mYXN0X21wX21vbnRnb21lcnlfcmVkdWNlLmMKQEAgLTAsMCArMSwxNzIgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fRkFTVF9NUF9NT05UR09NRVJZX1JFRFVDRV9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBjb21wdXRlcyB4UioqLTEgPT0geCAobW9kIE4pIHZpYSBNb250Z29tZXJ5IFJlZHVjdGlvbgorICoKKyAqIFRoaXMgaXMgYW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIG9mIG1vbnRnb21lcnlfcmVkdWNlCisgKiB3aGljaCB1c2VzIHRoZSBjb21iYSBtZXRob2QgdG8gcXVpY2tseSBjYWxjdWxhdGUgdGhlIGNvbHVtbnMgb2YgdGhlCisgKiByZWR1Y3Rpb24uCisgKgorICogQmFzZWQgb24gQWxnb3JpdGhtIDE0LjMyIG9uIHBwLjYwMSBvZiBIQUMuCisqLworaW50IGZhc3RfbXBfbW9udGdvbWVyeV9yZWR1Y2UgKG1wX2ludCAqIHgsIG1wX2ludCAqIG4sIG1wX2RpZ2l0IHJobykKK3sKKyAgaW50ICAgICBpeCwgcmVzLCBvbGR1c2U7CisgIG1wX3dvcmQgV1tNUF9XQVJSQVldOworCisgIC8qIGdldCBvbGQgdXNlZCBjb3VudCAqLworICBvbGR1c2UgPSB4LT51c2VkOworCisgIC8qIGdyb3cgYSBhcyByZXF1aXJlZCAqLworICBpZiAoeC0+YWxsb2MgPCBuLT51c2VkICsgMSkgeworICAgIGlmICgocmVzID0gbXBfZ3JvdyAoeCwgbi0+dXNlZCArIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgfQorCisgIC8qIGZpcnN0IHdlIGhhdmUgdG8gZ2V0IHRoZSBkaWdpdHMgb2YgdGhlIGlucHV0IGludG8KKyAgICogYW4gYXJyYXkgb2YgZG91YmxlIHByZWNpc2lvbiB3b3JkcyBXWy4uLl0KKyAgICovCisgIHsKKyAgICByZWdpc3RlciBtcF93b3JkICpfVzsKKyAgICByZWdpc3RlciBtcF9kaWdpdCAqdG1weDsKKworICAgIC8qIGFsaWFzIGZvciB0aGUgV1tdIGFycmF5ICovCisgICAgX1cgICA9IFc7CisKKyAgICAvKiBhbGlhcyBmb3IgdGhlIGRpZ2l0cyBvZiAgeCovCisgICAgdG1weCA9IHgtPmRwOworCisgICAgLyogY29weSB0aGUgZGlnaXRzIG9mIGEgaW50byBXWzAuLmEtPnVzZWQtMV0gKi8KKyAgICBmb3IgKGl4ID0gMDsgaXggPCB4LT51c2VkOyBpeCsrKSB7CisgICAgICAqX1crKyA9ICp0bXB4Kys7CisgICAgfQorCisgICAgLyogemVybyB0aGUgaGlnaCB3b3JkcyBvZiBXW2EtPnVzZWQuLm0tPnVzZWQqMl0gKi8KKyAgICBmb3IgKDsgaXggPCBuLT51c2VkICogMiArIDE7IGl4KyspIHsKKyAgICAgICpfVysrID0gMDsKKyAgICB9CisgIH0KKworICAvKiBub3cgd2UgcHJvY2VlZCB0byB6ZXJvIHN1Y2Nlc3NpdmUgZGlnaXRzCisgICAqIGZyb20gdGhlIGxlYXN0IHNpZ25pZmljYW50IHVwd2FyZHMKKyAgICovCisgIGZvciAoaXggPSAwOyBpeCA8IG4tPnVzZWQ7IGl4KyspIHsKKyAgICAvKiBtdSA9IGFpICogbScgbW9kIGIKKyAgICAgKgorICAgICAqIFdlIGF2b2lkIGEgZG91YmxlIHByZWNpc2lvbiBtdWx0aXBsaWNhdGlvbiAod2hpY2ggaXNuJ3QgcmVxdWlyZWQpCisgICAgICogYnkgY2FzdGluZyB0aGUgdmFsdWUgZG93biB0byBhIG1wX2RpZ2l0LiAgTm90ZSB0aGlzIHJlcXVpcmVzCisgICAgICogdGhhdCBXW2l4LTFdIGhhdmUgIHRoZSBjYXJyeSBjbGVhcmVkIChzZWUgYWZ0ZXIgdGhlIGlubmVyIGxvb3ApCisgICAgICovCisgICAgcmVnaXN0ZXIgbXBfZGlnaXQgbXU7CisgICAgbXUgPSAobXBfZGlnaXQpICgoKFdbaXhdICYgTVBfTUFTSykgKiByaG8pICYgTVBfTUFTSyk7CisKKyAgICAvKiBhID0gYSArIG11ICogbSAqIGIqKmkKKyAgICAgKgorICAgICAqIFRoaXMgaXMgY29tcHV0ZWQgaW4gcGxhY2UgYW5kIG9uIHRoZSBmbHkuICBUaGUgbXVsdGlwbGljYXRpb24KKyAgICAgKiBieSBiKippIGlzIGhhbmRsZWQgYnkgb2Zmc2V0aW5nIHdoaWNoIGNvbHVtbnMgdGhlIHJlc3VsdHMKKyAgICAgKiBhcmUgYWRkZWQgdG8uCisgICAgICoKKyAgICAgKiBOb3RlIHRoZSBjb21iYSBtZXRob2Qgbm9ybWFsbHkgZG9lc24ndCBoYW5kbGUgY2FycmllcyBpbiB0aGUKKyAgICAgKiBpbm5lciBsb29wIEluIHRoaXMgY2FzZSB3ZSBmaXggdGhlIGNhcnJ5IGZyb20gdGhlIHByZXZpb3VzCisgICAgICogY29sdW1uIHNpbmNlIHRoZSBNb250Z29tZXJ5IHJlZHVjdGlvbiByZXF1aXJlcyBkaWdpdHMgb2YgdGhlCisgICAgICogcmVzdWx0IChzbyBmYXIpIFtzZWUgYWJvdmVdIHRvIHdvcmsuICBUaGlzIGlzCisgICAgICogaGFuZGxlZCBieSBmaXhpbmcgdXAgb25lIGNhcnJ5IGFmdGVyIHRoZSBpbm5lciBsb29wLiAgVGhlCisgICAgICogY2FycnkgZml4dXBzIGFyZSBkb25lIGluIG9yZGVyIHNvIGFmdGVyIHRoZXNlIGxvb3BzIHRoZQorICAgICAqIGZpcnN0IG0tPnVzZWQgd29yZHMgb2YgV1tdIGhhdmUgdGhlIGNhcnJpZXMgZml4ZWQKKyAgICAgKi8KKyAgICB7CisgICAgICByZWdpc3RlciBpbnQgaXk7CisgICAgICByZWdpc3RlciBtcF9kaWdpdCAqdG1wbjsKKyAgICAgIHJlZ2lzdGVyIG1wX3dvcmQgKl9XOworCisgICAgICAvKiBhbGlhcyBmb3IgdGhlIGRpZ2l0cyBvZiB0aGUgbW9kdWx1cyAqLworICAgICAgdG1wbiA9IG4tPmRwOworCisgICAgICAvKiBBbGlhcyBmb3IgdGhlIGNvbHVtbnMgc2V0IGJ5IGFuIG9mZnNldCBvZiBpeCAqLworICAgICAgX1cgPSBXICsgaXg7CisKKyAgICAgIC8qIGlubmVyIGxvb3AgKi8KKyAgICAgIGZvciAoaXkgPSAwOyBpeSA8IG4tPnVzZWQ7IGl5KyspIHsKKyAgICAgICAgICAqX1crKyArPSAoKG1wX3dvcmQpbXUpICogKChtcF93b3JkKSp0bXBuKyspOworICAgICAgfQorICAgIH0KKworICAgIC8qIG5vdyBmaXggY2FycnkgZm9yIG5leHQgZGlnaXQsIFdbaXgrMV0gKi8KKyAgICBXW2l4ICsgMV0gKz0gV1tpeF0gPj4gKChtcF93b3JkKSBESUdJVF9CSVQpOworICB9CisKKyAgLyogbm93IHdlIGhhdmUgdG8gcHJvcGFnYXRlIHRoZSBjYXJyaWVzIGFuZAorICAgKiBzaGlmdCB0aGUgd29yZHMgZG93bndhcmQgW2FsbCB0aG9zZSBsZWFzdAorICAgKiBzaWduaWZpY2FudCBkaWdpdHMgd2UgemVyb2VkXS4KKyAgICovCisgIHsKKyAgICByZWdpc3RlciBtcF9kaWdpdCAqdG1weDsKKyAgICByZWdpc3RlciBtcF93b3JkICpfVywgKl9XMTsKKworICAgIC8qIG5veCBmaXggcmVzdCBvZiBjYXJyaWVzICovCisKKyAgICAvKiBhbGlhcyBmb3IgY3VycmVudCB3b3JkICovCisgICAgX1cxID0gVyArIGl4OworCisgICAgLyogYWxpYXMgZm9yIG5leHQgd29yZCwgd2hlcmUgdGhlIGNhcnJ5IGdvZXMgKi8KKyAgICBfVyA9IFcgKyArK2l4OworCisgICAgZm9yICg7IGl4IDw9IG4tPnVzZWQgKiAyICsgMTsgaXgrKykgeworICAgICAgKl9XKysgKz0gKl9XMSsrID4+ICgobXBfd29yZCkgRElHSVRfQklUKTsKKyAgICB9CisKKyAgICAvKiBjb3B5IG91dCwgQSA9IEEvYioqbgorICAgICAqCisgICAgICogVGhlIHJlc3VsdCBpcyBBL2IqKm4gYnV0IGluc3RlYWQgb2YgY29udmVydGluZyBmcm9tIGFuCisgICAgICogYXJyYXkgb2YgbXBfd29yZCB0byBtcF9kaWdpdCB0aGFuIGNhbGxpbmcgbXBfcnNoZAorICAgICAqIHdlIGp1c3QgY29weSB0aGVtIGluIHRoZSByaWdodCBvcmRlcgorICAgICAqLworCisgICAgLyogYWxpYXMgZm9yIGRlc3RpbmF0aW9uIHdvcmQgKi8KKyAgICB0bXB4ID0geC0+ZHA7CisKKyAgICAvKiBhbGlhcyBmb3Igc2hpZnRlZCBkb3VibGUgcHJlY2lzaW9uIHJlc3VsdCAqLworICAgIF9XID0gVyArIG4tPnVzZWQ7CisKKyAgICBmb3IgKGl4ID0gMDsgaXggPCBuLT51c2VkICsgMTsgaXgrKykgeworICAgICAgKnRtcHgrKyA9IChtcF9kaWdpdCkoKl9XKysgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKKyAgICB9CisKKyAgICAvKiB6ZXJvIG9sZHVzZWQgZGlnaXRzLCBpZiB0aGUgaW5wdXQgYSB3YXMgbGFyZ2VyIHRoYW4KKyAgICAgKiBtLT51c2VkKzEgd2UnbGwgaGF2ZSB0byBjbGVhciB0aGUgZGlnaXRzCisgICAgICovCisgICAgZm9yICg7IGl4IDwgb2xkdXNlOyBpeCsrKSB7CisgICAgICAqdG1weCsrID0gMDsKKyAgICB9CisgIH0KKworICAvKiBzZXQgdGhlIG1heCB1c2VkIGFuZCBjbGFtcCAqLworICB4LT51c2VkID0gbi0+dXNlZCArIDE7CisgIG1wX2NsYW1wICh4KTsKKworICAvKiBpZiBBID49IG0gdGhlbiBBID0gQSAtIG0gKi8KKyAgaWYgKG1wX2NtcF9tYWcgKHgsIG4pICE9IE1QX0xUKSB7CisgICAgcmV0dXJuIHNfbXBfc3ViICh4LCBuLCB4KTsKKyAgfQorICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX2Zhc3RfbXBfbW9udGdvbWVyeV9yZWR1Y2UuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fZmFzdF9zX21wX211bF9kaWdzLmMgYi9saWJ0b21tYXRoL2JuX2Zhc3Rfc19tcF9tdWxfZGlncy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMmUwNjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX2Zhc3Rfc19tcF9tdWxfZGlncy5jCkBAIC0wLDAgKzEsMTA3IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX0ZBU1RfU19NUF9NVUxfRElHU19DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBGYXN0IChjb21iYSkgbXVsdGlwbGllcgorICoKKyAqIFRoaXMgaXMgdGhlIGZhc3QgY29sdW1uLWFycmF5IFtjb21iYV0gbXVsdGlwbGllci4gIEl0IGlzIAorICogZGVzaWduZWQgdG8gY29tcHV0ZSB0aGUgY29sdW1ucyBvZiB0aGUgcHJvZHVjdCBmaXJzdCAKKyAqIHRoZW4gaGFuZGxlIHRoZSBjYXJyaWVzIGFmdGVyd2FyZHMuICBUaGlzIGhhcyB0aGUgZWZmZWN0IAorICogb2YgbWFraW5nIHRoZSBuZXN0ZWQgbG9vcHMgdGhhdCBjb21wdXRlIHRoZSBjb2x1bW5zIHZlcnkKKyAqIHNpbXBsZSBhbmQgc2NoZWR1bGFibGUgb24gc3VwZXItc2NhbGFyIHByb2Nlc3NvcnMuCisgKgorICogVGhpcyBoYXMgYmVlbiBtb2RpZmllZCB0byBwcm9kdWNlIGEgdmFyaWFibGUgbnVtYmVyIG9mIAorICogZGlnaXRzIG9mIG91dHB1dCBzbyBpZiBzYXkgb25seSBhIGhhbGYtcHJvZHVjdCBpcyByZXF1aXJlZCAKKyAqIHlvdSBkb24ndCBoYXZlIHRvIGNvbXB1dGUgdGhlIHVwcGVyIGhhbGYgKGEgZmVhdHVyZSAKKyAqIHJlcXVpcmVkIGZvciBmYXN0IEJhcnJldHQgcmVkdWN0aW9uKS4KKyAqCisgKiBCYXNlZCBvbiBBbGdvcml0aG0gMTQuMTIgb24gcHAuNTk1IG9mIEhBQy4KKyAqCisgKi8KK2ludCBmYXN0X3NfbXBfbXVsX2RpZ3MgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIGludCBkaWdzKQoreworICBpbnQgICAgIG9sZHVzZSwgcmVzLCBwYSwgaXgsIGl6OworICBtcF9kaWdpdCBXW01QX1dBUlJBWV07CisgIHJlZ2lzdGVyIG1wX3dvcmQgIF9XOworCisgIC8qIGdyb3cgdGhlIGRlc3RpbmF0aW9uIGFzIHJlcXVpcmVkICovCisgIGlmIChjLT5hbGxvYyA8IGRpZ3MpIHsKKyAgICBpZiAoKHJlcyA9IG1wX2dyb3cgKGMsIGRpZ3MpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgfQorCisgIC8qIG51bWJlciBvZiBvdXRwdXQgZGlnaXRzIHRvIHByb2R1Y2UgKi8KKyAgcGEgPSBNSU4oZGlncywgYS0+dXNlZCArIGItPnVzZWQpOworCisgIC8qIGNsZWFyIHRoZSBjYXJyeSAqLworICBfVyA9IDA7CisgIGZvciAoaXggPSAwOyBpeCA8IHBhOyBpeCsrKSB7IAorICAgICAgaW50ICAgICAgdHgsIHR5OworICAgICAgaW50ICAgICAgaXk7CisgICAgICBtcF9kaWdpdCAqdG1weCwgKnRtcHk7CisKKyAgICAgIC8qIGdldCBvZmZzZXRzIGludG8gdGhlIHR3byBiaWdudW1zICovCisgICAgICB0eSA9IE1JTihiLT51c2VkLTEsIGl4KTsKKyAgICAgIHR4ID0gaXggLSB0eTsKKworICAgICAgLyogc2V0dXAgdGVtcCBhbGlhc2VzICovCisgICAgICB0bXB4ID0gYS0+ZHAgKyB0eDsKKyAgICAgIHRtcHkgPSBiLT5kcCArIHR5OworCisgICAgICAvKiB0aGlzIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGxvb3Agd2lsbCBpdGVycmF0ZSwgZXNzZW50aWFsbHkgCisgICAgICAgICB3aGlsZSAodHgrKyA8IGEtPnVzZWQgJiYgdHktLSA+PSAwKSB7IC4uLiB9CisgICAgICAgKi8KKyAgICAgIGl5ID0gTUlOKGEtPnVzZWQtdHgsIHR5KzEpOworCisgICAgICAvKiBleGVjdXRlIGxvb3AgKi8KKyAgICAgIGZvciAoaXogPSAwOyBpeiA8IGl5OyArK2l6KSB7CisgICAgICAgICBfVyArPSAoKG1wX3dvcmQpKnRtcHgrKykqKChtcF93b3JkKSp0bXB5LS0pOworCisgICAgICB9CisKKyAgICAgIC8qIHN0b3JlIHRlcm0gKi8KKyAgICAgIFdbaXhdID0gKChtcF9kaWdpdClfVykgJiBNUF9NQVNLOworCisgICAgICAvKiBtYWtlIG5leHQgY2FycnkgKi8KKyAgICAgIF9XID0gX1cgPj4gKChtcF93b3JkKURJR0lUX0JJVCk7CisgfQorCisgIC8qIHNldHVwIGRlc3QgKi8KKyAgb2xkdXNlICA9IGMtPnVzZWQ7CisgIGMtPnVzZWQgPSBwYTsKKworICB7CisgICAgcmVnaXN0ZXIgbXBfZGlnaXQgKnRtcGM7CisgICAgdG1wYyA9IGMtPmRwOworICAgIGZvciAoaXggPSAwOyBpeCA8IHBhKzE7IGl4KyspIHsKKyAgICAgIC8qIG5vdyBleHRyYWN0IHRoZSBwcmV2aW91cyBkaWdpdCBbYmVsb3cgdGhlIGNhcnJ5XSAqLworICAgICAgKnRtcGMrKyA9IFdbaXhdOworICAgIH0KKworICAgIC8qIGNsZWFyIHVudXNlZCBkaWdpdHMgW3RoYXQgZXhpc3RlZCBpbiB0aGUgb2xkIGNvcHkgb2YgY10gKi8KKyAgICBmb3IgKDsgaXggPCBvbGR1c2U7IGl4KyspIHsKKyAgICAgICp0bXBjKysgPSAwOworICAgIH0KKyAgfQorICBtcF9jbGFtcCAoYyk7CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fZmFzdF9zX21wX211bF9kaWdzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX2Zhc3Rfc19tcF9tdWxfaGlnaF9kaWdzLmMgYi9saWJ0b21tYXRoL2JuX2Zhc3Rfc19tcF9tdWxfaGlnaF9kaWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDc3OGIyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fZmFzdF9zX21wX211bF9oaWdoX2RpZ3MuYwpAQCAtMCwwICsxLDk4IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX0ZBU1RfU19NUF9NVUxfSElHSF9ESUdTX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHRoaXMgaXMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGZhc3Rfc19tdWxfZGlncyB0aGF0IG9ubHkgcHJvZHVjZXMKKyAqIG91dHB1dCBkaWdpdHMgKmFib3ZlKiBkaWdzLiAgU2VlIHRoZSBjb21tZW50cyBmb3IgZmFzdF9zX211bF9kaWdzCisgKiB0byBzZWUgaG93IGl0IHdvcmtzLgorICoKKyAqIFRoaXMgaXMgdXNlZCBpbiB0aGUgQmFycmV0dCByZWR1Y3Rpb24gc2luY2UgZm9yIG9uZSBvZiB0aGUgbXVsdGlwbGljYXRpb25zCisgKiBvbmx5IHRoZSBoaWdoZXIgZGlnaXRzIHdlcmUgbmVlZGVkLiAgVGhpcyBlc3NlbnRpYWxseSBoYWx2ZXMgdGhlIHdvcmsuCisgKgorICogQmFzZWQgb24gQWxnb3JpdGhtIDE0LjEyIG9uIHBwLjU5NSBvZiBIQUMuCisgKi8KK2ludCBmYXN0X3NfbXBfbXVsX2hpZ2hfZGlncyAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYywgaW50IGRpZ3MpCit7CisgIGludCAgICAgb2xkdXNlLCByZXMsIHBhLCBpeCwgaXo7CisgIG1wX2RpZ2l0IFdbTVBfV0FSUkFZXTsKKyAgbXBfd29yZCAgX1c7CisKKyAgLyogZ3JvdyB0aGUgZGVzdGluYXRpb24gYXMgcmVxdWlyZWQgKi8KKyAgcGEgPSBhLT51c2VkICsgYi0+dXNlZDsKKyAgaWYgKGMtPmFsbG9jIDwgcGEpIHsKKyAgICBpZiAoKHJlcyA9IG1wX2dyb3cgKGMsIHBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKworICAvKiBudW1iZXIgb2Ygb3V0cHV0IGRpZ2l0cyB0byBwcm9kdWNlICovCisgIHBhID0gYS0+dXNlZCArIGItPnVzZWQ7CisgIF9XID0gMDsKKyAgZm9yIChpeCA9IGRpZ3M7IGl4IDwgcGE7IGl4KyspIHsgCisgICAgICBpbnQgICAgICB0eCwgdHksIGl5OworICAgICAgbXBfZGlnaXQgKnRtcHgsICp0bXB5OworCisgICAgICAvKiBnZXQgb2Zmc2V0cyBpbnRvIHRoZSB0d28gYmlnbnVtcyAqLworICAgICAgdHkgPSBNSU4oYi0+dXNlZC0xLCBpeCk7CisgICAgICB0eCA9IGl4IC0gdHk7CisKKyAgICAgIC8qIHNldHVwIHRlbXAgYWxpYXNlcyAqLworICAgICAgdG1weCA9IGEtPmRwICsgdHg7CisgICAgICB0bXB5ID0gYi0+ZHAgKyB0eTsKKworICAgICAgLyogdGhpcyBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBsb29wIHdpbGwgaXRlcnJhdGUsIGVzc2VudGlhbGx5IGl0cyAKKyAgICAgICAgIHdoaWxlICh0eCsrIDwgYS0+dXNlZCAmJiB0eS0tID49IDApIHsgLi4uIH0KKyAgICAgICAqLworICAgICAgaXkgPSBNSU4oYS0+dXNlZC10eCwgdHkrMSk7CisKKyAgICAgIC8qIGV4ZWN1dGUgbG9vcCAqLworICAgICAgZm9yIChpeiA9IDA7IGl6IDwgaXk7IGl6KyspIHsKKyAgICAgICAgIF9XICs9ICgobXBfd29yZCkqdG1weCsrKSooKG1wX3dvcmQpKnRtcHktLSk7CisgICAgICB9CisKKyAgICAgIC8qIHN0b3JlIHRlcm0gKi8KKyAgICAgIFdbaXhdID0gKChtcF9kaWdpdClfVykgJiBNUF9NQVNLOworCisgICAgICAvKiBtYWtlIG5leHQgY2FycnkgKi8KKyAgICAgIF9XID0gX1cgPj4gKChtcF93b3JkKURJR0lUX0JJVCk7CisgIH0KKyAgCisgIC8qIHNldHVwIGRlc3QgKi8KKyAgb2xkdXNlICA9IGMtPnVzZWQ7CisgIGMtPnVzZWQgPSBwYTsKKworICB7CisgICAgcmVnaXN0ZXIgbXBfZGlnaXQgKnRtcGM7CisKKyAgICB0bXBjID0gYy0+ZHAgKyBkaWdzOworICAgIGZvciAoaXggPSBkaWdzOyBpeCA8IHBhOyBpeCsrKSB7CisgICAgICAvKiBub3cgZXh0cmFjdCB0aGUgcHJldmlvdXMgZGlnaXQgW2JlbG93IHRoZSBjYXJyeV0gKi8KKyAgICAgICp0bXBjKysgPSBXW2l4XTsKKyAgICB9CisKKyAgICAvKiBjbGVhciB1bnVzZWQgZGlnaXRzIFt0aGF0IGV4aXN0ZWQgaW4gdGhlIG9sZCBjb3B5IG9mIGNdICovCisgICAgZm9yICg7IGl4IDwgb2xkdXNlOyBpeCsrKSB7CisgICAgICAqdG1wYysrID0gMDsKKyAgICB9CisgIH0KKyAgbXBfY2xhbXAgKGMpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX2Zhc3Rfc19tcF9tdWxfaGlnaF9kaWdzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8xMS8xNCAwMzo0NjoyNSAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX2Zhc3Rfc19tcF9zcXIuYyBiL2xpYnRvbW1hdGgvYm5fZmFzdF9zX21wX3Nxci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNTk3NGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX2Zhc3Rfc19tcF9zcXIuYwpAQCAtMCwwICsxLDExNCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9GQVNUX1NfTVBfU1FSX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHRoZSBqaXN0IG9mIHNxdWFyaW5nLi4uCisgKiB5b3UgZG8gbGlrZSBtdWx0IGV4Y2VwdCB0aGUgb2Zmc2V0IG9mIHRoZSB0bXB4IFtvbmUgdGhhdCAKKyAqIHN0YXJ0cyBjbG9zZXIgdG8gemVyb10gY2FuJ3QgZXF1YWwgdGhlIG9mZnNldCBvZiB0bXB5LiAgCisgKiBTbyBiYXNpY2FsbHkgeW91IHNldCB1cCBpeSBsaWtlIGJlZm9yZSB0aGVuIHlvdSBtaW4gaXQgd2l0aAorICogKHR5LXR4KSBzbyB0aGF0IGl0IG5ldmVyIGhhcHBlbnMuICBZb3UgZG91YmxlIGFsbCB0aG9zZSAKKyAqIHlvdSBhZGQgaW4gdGhlIGlubmVyIGxvb3AKKworQWZ0ZXIgdGhhdCBsb29wIHlvdSBkbyB0aGUgc3F1YXJlcyBhbmQgYWRkIHRoZW0gaW4uCisqLworCitpbnQgZmFzdF9zX21wX3NxciAobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgaW50ICAgICAgIG9sZHVzZSwgcmVzLCBwYSwgaXgsIGl6OworICBtcF9kaWdpdCAgIFdbTVBfV0FSUkFZXSwgKnRtcHg7CisgIG1wX3dvcmQgICBXMTsKKworICAvKiBncm93IHRoZSBkZXN0aW5hdGlvbiBhcyByZXF1aXJlZCAqLworICBwYSA9IGEtPnVzZWQgKyBhLT51c2VkOworICBpZiAoYi0+YWxsb2MgPCBwYSkgeworICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYiwgcGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgfQorCisgIC8qIG51bWJlciBvZiBvdXRwdXQgZGlnaXRzIHRvIHByb2R1Y2UgKi8KKyAgVzEgPSAwOworICBmb3IgKGl4ID0gMDsgaXggPCBwYTsgaXgrKykgeyAKKyAgICAgIGludCAgICAgIHR4LCB0eSwgaXk7CisgICAgICBtcF93b3JkICBfVzsKKyAgICAgIG1wX2RpZ2l0ICp0bXB5OworCisgICAgICAvKiBjbGVhciBjb3VudGVyICovCisgICAgICBfVyA9IDA7CisKKyAgICAgIC8qIGdldCBvZmZzZXRzIGludG8gdGhlIHR3byBiaWdudW1zICovCisgICAgICB0eSA9IE1JTihhLT51c2VkLTEsIGl4KTsKKyAgICAgIHR4ID0gaXggLSB0eTsKKworICAgICAgLyogc2V0dXAgdGVtcCBhbGlhc2VzICovCisgICAgICB0bXB4ID0gYS0+ZHAgKyB0eDsKKyAgICAgIHRtcHkgPSBhLT5kcCArIHR5OworCisgICAgICAvKiB0aGlzIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGxvb3Agd2lsbCBpdGVycmF0ZSwgZXNzZW50aWFsbHkKKyAgICAgICAgIHdoaWxlICh0eCsrIDwgYS0+dXNlZCAmJiB0eS0tID49IDApIHsgLi4uIH0KKyAgICAgICAqLworICAgICAgaXkgPSBNSU4oYS0+dXNlZC10eCwgdHkrMSk7CisKKyAgICAgIC8qIG5vdyBmb3Igc3F1YXJpbmcgdHggY2FuIG5ldmVyIGVxdWFsIHR5IAorICAgICAgICogd2UgaGFsdmUgdGhlIGRpc3RhbmNlIHNpbmNlIHRoZXkgYXBwcm9hY2ggYXQgYSByYXRlIG9mIDJ4CisgICAgICAgKiBhbmQgd2UgaGF2ZSB0byByb3VuZCBiZWNhdXNlIG9kZCBjYXNlcyBuZWVkIHRvIGJlIGV4ZWN1dGVkCisgICAgICAgKi8KKyAgICAgIGl5ID0gTUlOKGl5LCAodHktdHgrMSk+PjEpOworCisgICAgICAvKiBleGVjdXRlIGxvb3AgKi8KKyAgICAgIGZvciAoaXogPSAwOyBpeiA8IGl5OyBpeisrKSB7CisgICAgICAgICBfVyArPSAoKG1wX3dvcmQpKnRtcHgrKykqKChtcF93b3JkKSp0bXB5LS0pOworICAgICAgfQorCisgICAgICAvKiBkb3VibGUgdGhlIGlubmVyIHByb2R1Y3QgYW5kIGFkZCBjYXJyeSAqLworICAgICAgX1cgPSBfVyArIF9XICsgVzE7CisKKyAgICAgIC8qIGV2ZW4gY29sdW1ucyBoYXZlIHRoZSBzcXVhcmUgdGVybSBpbiB0aGVtICovCisgICAgICBpZiAoKGl4JjEpID09IDApIHsKKyAgICAgICAgIF9XICs9ICgobXBfd29yZClhLT5kcFtpeD4+MV0pKigobXBfd29yZClhLT5kcFtpeD4+MV0pOworICAgICAgfQorCisgICAgICAvKiBzdG9yZSBpdCAqLworICAgICAgV1tpeF0gPSAobXBfZGlnaXQpKF9XICYgTVBfTUFTSyk7CisKKyAgICAgIC8qIG1ha2UgbmV4dCBjYXJyeSAqLworICAgICAgVzEgPSBfVyA+PiAoKG1wX3dvcmQpRElHSVRfQklUKTsKKyAgfQorCisgIC8qIHNldHVwIGRlc3QgKi8KKyAgb2xkdXNlICA9IGItPnVzZWQ7CisgIGItPnVzZWQgPSBhLT51c2VkK2EtPnVzZWQ7CisKKyAgeworICAgIG1wX2RpZ2l0ICp0bXBiOworICAgIHRtcGIgPSBiLT5kcDsKKyAgICBmb3IgKGl4ID0gMDsgaXggPCBwYTsgaXgrKykgeworICAgICAgKnRtcGIrKyA9IFdbaXhdICYgTVBfTUFTSzsKKyAgICB9CisKKyAgICAvKiBjbGVhciB1bnVzZWQgZGlnaXRzIFt0aGF0IGV4aXN0ZWQgaW4gdGhlIG9sZCBjb3B5IG9mIGNdICovCisgICAgZm9yICg7IGl4IDwgb2xkdXNlOyBpeCsrKSB7CisgICAgICAqdG1wYisrID0gMDsKKyAgICB9CisgIH0KKyAgbXBfY2xhbXAgKGIpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX2Zhc3Rfc19tcF9zcXIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfMmV4cHQuYyBiL2xpYnRvbW1hdGgvYm5fbXBfMmV4cHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTVmMzJlCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF8yZXhwdC5jCkBAIC0wLDAgKzEsNDggQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfMkVYUFRfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY29tcHV0ZXMgYSA9IDIqKmIgCisgKgorICogU2ltcGxlIGFsZ29yaXRobSB3aGljaCB6ZXJvZXMgdGhlIGludCwgZ3Jvd3MgaXQgdGhlbiBqdXN0IHNldHMgb25lIGJpdAorICogYXMgcmVxdWlyZWQuCisgKi8KK2ludAorbXBfMmV4cHQgKG1wX2ludCAqIGEsIGludCBiKQoreworICBpbnQgICAgIHJlczsKKworICAvKiB6ZXJvIGEgYXMgcGVyIGRlZmF1bHQgKi8KKyAgbXBfemVybyAoYSk7CisKKyAgLyogZ3JvdyBhIHRvIGFjY29tb2RhdGUgdGhlIHNpbmdsZSBiaXQgKi8KKyAgaWYgKChyZXMgPSBtcF9ncm93IChhLCBiIC8gRElHSVRfQklUICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLyogc2V0IHRoZSB1c2VkIGNvdW50IG9mIHdoZXJlIHRoZSBiaXQgd2lsbCBnbyAqLworICBhLT51c2VkID0gYiAvIERJR0lUX0JJVCArIDE7CisKKyAgLyogcHV0IHRoZSBzaW5nbGUgYml0IGluIGl0cyBwbGFjZSAqLworICBhLT5kcFtiIC8gRElHSVRfQklUXSA9ICgobXBfZGlnaXQpMSkgPDwgKGIgJSBESUdJVF9CSVQpOworCisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfMmV4cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfYWJzLmMgYi9saWJ0b21tYXRoL2JuX21wX2Ficy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NDNjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2Ficy5jCkBAIC0wLDAgKzEsNDMgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfQUJTX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGIgPSB8YXwgCisgKgorICogU2ltcGxlIGZ1bmN0aW9uIGNvcGllcyB0aGUgaW5wdXQgYW5kIGZpeGVzIHRoZSBzaWduIHRvIHBvc2l0aXZlCisgKi8KK2ludAorbXBfYWJzIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQoreworICBpbnQgICAgIHJlczsKKworICAvKiBjb3B5IGEgdG8gYiAqLworICBpZiAoYSAhPSBiKSB7CisgICAgIGlmICgocmVzID0gbXBfY29weSAoYSwgYikpICE9IE1QX09LQVkpIHsKKyAgICAgICByZXR1cm4gcmVzOworICAgICB9CisgIH0KKworICAvKiBmb3JjZSB0aGUgc2lnbiBvZiBiIHRvIHBvc2l0aXZlICovCisgIGItPnNpZ24gPSBNUF9aUE9TOworCisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfYWJzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX2FkZC5jIGIvbGlidG9tbWF0aC9ibl9tcF9hZGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTBlZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9hZGQuYwpAQCAtMCwwICsxLDUzIEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0FERF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBoaWdoIGxldmVsIGFkZGl0aW9uIChoYW5kbGVzIHNpZ25zKSAqLworaW50IG1wX2FkZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK3sKKyAgaW50ICAgICBzYSwgc2IsIHJlczsKKworICAvKiBnZXQgc2lnbiBvZiBib3RoIGlucHV0cyAqLworICBzYSA9IGEtPnNpZ247CisgIHNiID0gYi0+c2lnbjsKKworICAvKiBoYW5kbGUgdHdvIGNhc2VzLCBub3QgZm91ciAqLworICBpZiAoc2EgPT0gc2IpIHsKKyAgICAvKiBib3RoIHBvc2l0aXZlIG9yIGJvdGggbmVnYXRpdmUgKi8KKyAgICAvKiBhZGQgdGhlaXIgbWFnbml0dWRlcywgY29weSB0aGUgc2lnbiAqLworICAgIGMtPnNpZ24gPSBzYTsKKyAgICByZXMgPSBzX21wX2FkZCAoYSwgYiwgYyk7CisgIH0gZWxzZSB7CisgICAgLyogb25lIHBvc2l0aXZlLCB0aGUgb3RoZXIgbmVnYXRpdmUgKi8KKyAgICAvKiBzdWJ0cmFjdCB0aGUgb25lIHdpdGggdGhlIGdyZWF0ZXIgbWFnbml0dWRlIGZyb20gKi8KKyAgICAvKiB0aGUgb25lIG9mIHRoZSBsZXNzZXIgbWFnbml0dWRlLiAgVGhlIHJlc3VsdCBnZXRzICovCisgICAgLyogdGhlIHNpZ24gb2YgdGhlIG9uZSB3aXRoIHRoZSBncmVhdGVyIG1hZ25pdHVkZS4gKi8KKyAgICBpZiAobXBfY21wX21hZyAoYSwgYikgPT0gTVBfTFQpIHsKKyAgICAgIGMtPnNpZ24gPSBzYjsKKyAgICAgIHJlcyA9IHNfbXBfc3ViIChiLCBhLCBjKTsKKyAgICB9IGVsc2UgeworICAgICAgYy0+c2lnbiA9IHNhOworICAgICAgcmVzID0gc19tcF9zdWIgKGEsIGIsIGMpOworICAgIH0KKyAgfQorICByZXR1cm4gcmVzOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9hZGQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfYWRkX2QuYyBiL2xpYnRvbW1hdGgvYm5fbXBfYWRkX2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWY1YWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9hZGRfZC5jCkBAIC0wLDAgKzEsMTEyIEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0FERF9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHNpbmdsZSBkaWdpdCBhZGRpdGlvbiAqLworaW50CittcF9hZGRfZCAobXBfaW50ICogYSwgbXBfZGlnaXQgYiwgbXBfaW50ICogYykKK3sKKyAgaW50ICAgICByZXMsIGl4LCBvbGR1c2VkOworICBtcF9kaWdpdCAqdG1wYSwgKnRtcGMsIG11OworCisgIC8qIGdyb3cgYyBhcyByZXF1aXJlZCAqLworICBpZiAoYy0+YWxsb2MgPCBhLT51c2VkICsgMSkgeworICAgICBpZiAoKHJlcyA9IG1wX2dyb3coYywgYS0+dXNlZCArIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfQorCisgIC8qIGlmIGEgaXMgbmVnYXRpdmUgYW5kIHxhfCA+PSBiLCBjYWxsIGMgPSB8YXwgLSBiICovCisgIGlmIChhLT5zaWduID09IE1QX05FRyAmJiAoYS0+dXNlZCA+IDEgfHwgYS0+ZHBbMF0gPj0gYikpIHsKKyAgICAgLyogdGVtcG9yYXJpbHkgZml4IHNpZ24gb2YgYSAqLworICAgICBhLT5zaWduID0gTVBfWlBPUzsKKworICAgICAvKiBjID0gfGF8IC0gYiAqLworICAgICByZXMgPSBtcF9zdWJfZChhLCBiLCBjKTsKKworICAgICAvKiBmaXggc2lnbiAgKi8KKyAgICAgYS0+c2lnbiA9IGMtPnNpZ24gPSBNUF9ORUc7CisKKyAgICAgLyogY2xhbXAgKi8KKyAgICAgbXBfY2xhbXAoYyk7CisKKyAgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIG9sZCBudW1iZXIgb2YgdXNlZCBkaWdpdHMgaW4gYyAqLworICBvbGR1c2VkID0gYy0+dXNlZDsKKworICAvKiBzaWduIGFsd2F5cyBwb3NpdGl2ZSAqLworICBjLT5zaWduID0gTVBfWlBPUzsKKworICAvKiBzb3VyY2UgYWxpYXMgKi8KKyAgdG1wYSAgICA9IGEtPmRwOworCisgIC8qIGRlc3RpbmF0aW9uIGFsaWFzICovCisgIHRtcGMgICAgPSBjLT5kcDsKKworICAvKiBpZiBhIGlzIHBvc2l0aXZlICovCisgIGlmIChhLT5zaWduID09IE1QX1pQT1MpIHsKKyAgICAgLyogYWRkIGRpZ2l0LCBhZnRlciB0aGlzIHdlJ3JlIHByb3BhZ2F0aW5nCisgICAgICAqIHRoZSBjYXJyeS4KKyAgICAgICovCisgICAgICp0bXBjICAgPSAqdG1wYSsrICsgYjsKKyAgICAgbXUgICAgICA9ICp0bXBjID4+IERJR0lUX0JJVDsKKyAgICAgKnRtcGMrKyAmPSBNUF9NQVNLOworCisgICAgIC8qIG5vdyBoYW5kbGUgcmVzdCBvZiB0aGUgZGlnaXRzICovCisgICAgIGZvciAoaXggPSAxOyBpeCA8IGEtPnVzZWQ7IGl4KyspIHsKKyAgICAgICAgKnRtcGMgICA9ICp0bXBhKysgKyBtdTsKKyAgICAgICAgbXUgICAgICA9ICp0bXBjID4+IERJR0lUX0JJVDsKKyAgICAgICAgKnRtcGMrKyAmPSBNUF9NQVNLOworICAgICB9CisgICAgIC8qIHNldCBmaW5hbCBjYXJyeSAqLworICAgICBpeCsrOworICAgICAqdG1wYysrICA9IG11OworCisgICAgIC8qIHNldHVwIHNpemUgKi8KKyAgICAgYy0+dXNlZCA9IGEtPnVzZWQgKyAxOworICB9IGVsc2UgeworICAgICAvKiBhIHdhcyBuZWdhdGl2ZSBhbmQgfGF8IDwgYiAqLworICAgICBjLT51c2VkICA9IDE7CisKKyAgICAgLyogdGhlIHJlc3VsdCBpcyBhIHNpbmdsZSBkaWdpdCAqLworICAgICBpZiAoYS0+dXNlZCA9PSAxKSB7CisgICAgICAgICp0bXBjKysgID0gIGIgLSBhLT5kcFswXTsKKyAgICAgfSBlbHNlIHsKKyAgICAgICAgKnRtcGMrKyAgPSAgYjsKKyAgICAgfQorCisgICAgIC8qIHNldHVwIGNvdW50IHNvIHRoZSBjbGVhcmluZyBvZiBvbGR1c2VkCisgICAgICAqIGNhbiBmYWxsIHRocm91Z2ggY29ycmVjdGx5CisgICAgICAqLworICAgICBpeCAgICAgICA9IDE7CisgIH0KKworICAvKiBub3cgemVybyB0byBvbGR1c2VkICovCisgIHdoaWxlIChpeCsrIDwgb2xkdXNlZCkgeworICAgICAqdG1wYysrID0gMDsKKyAgfQorICBtcF9jbGFtcChjKTsKKworICByZXR1cm4gTVBfT0tBWTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfYWRkX2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfYWRkbW9kLmMgYi9saWJ0b21tYXRoL2JuX21wX2FkZG1vZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzYjNhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2FkZG1vZC5jCkBAIC0wLDAgKzEsNDEgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfQURETU9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGQgPSBhICsgYiAobW9kIGMpICovCitpbnQKK21wX2FkZG1vZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYywgbXBfaW50ICogZCkKK3sKKyAgaW50ICAgICByZXM7CisgIG1wX2ludCAgdDsKKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ0KSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2FkZCAoYSwgYiwgJnQpKSAhPSBNUF9PS0FZKSB7CisgICAgbXBfY2xlYXIgKCZ0KTsKKyAgICByZXR1cm4gcmVzOworICB9CisgIHJlcyA9IG1wX21vZCAoJnQsIGMsIGQpOworICBtcF9jbGVhciAoJnQpOworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfYWRkbW9kLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX2FuZC5jIGIvbGlidG9tbWF0aC9ibl9tcF9hbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTJjMGVlCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9hbmQuYwpAQCAtMCwwICsxLDU3IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0FORF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBBTkQgdHdvIGludHMgdG9nZXRoZXIgKi8KK2ludAorbXBfYW5kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBpbnQgICAgIHJlcywgaXgsIHB4OworICBtcF9pbnQgIHQsICp4OworCisgIGlmIChhLT51c2VkID4gYi0+dXNlZCkgeworICAgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmdCwgYSkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHB4ID0gYi0+dXNlZDsKKyAgICB4ID0gYjsKKyAgfSBlbHNlIHsKKyAgICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnQsIGIpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBweCA9IGEtPnVzZWQ7CisgICAgeCA9IGE7CisgIH0KKworICBmb3IgKGl4ID0gMDsgaXggPCBweDsgaXgrKykgeworICAgIHQuZHBbaXhdICY9IHgtPmRwW2l4XTsKKyAgfQorCisgIC8qIHplcm8gZGlnaXRzIGFib3ZlIHRoZSBsYXN0IGZyb20gdGhlIHNtYWxsZXN0IG1wX2ludCAqLworICBmb3IgKDsgaXggPCB0LnVzZWQ7IGl4KyspIHsKKyAgICB0LmRwW2l4XSA9IDA7CisgIH0KKworICBtcF9jbGFtcCAoJnQpOworICBtcF9leGNoIChjLCAmdCk7CisgIG1wX2NsZWFyICgmdCk7CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfYW5kLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX2NsYW1wLmMgYi9saWJ0b21tYXRoL2JuX21wX2NsYW1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE0ZTFlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfY2xhbXAuYwpAQCAtMCwwICsxLDQ0IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0NMQU1QX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHRyaW0gdW51c2VkIGRpZ2l0cyAKKyAqCisgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgbGVhZGluZyB6ZXJvIGRpZ2l0cyBhcmUKKyAqIHRyaW1lZCBhbmQgdGhlIGxlYWRpbmcgInVzZWQiIGRpZ2l0IHdpbGwgYmUgbm9uLXplcm8KKyAqIFR5cGljYWxseSB2ZXJ5IGZhc3QuICBBbHNvIGZpeGVzIHRoZSBzaWduIGlmIHRoZXJlCisgKiBhcmUgbm8gbW9yZSBsZWFkaW5nIGRpZ2l0cworICovCit2b2lkCittcF9jbGFtcCAobXBfaW50ICogYSkKK3sKKyAgLyogZGVjcmVhc2UgdXNlZCB3aGlsZSB0aGUgbW9zdCBzaWduaWZpY2FudCBkaWdpdCBpcworICAgKiB6ZXJvLgorICAgKi8KKyAgd2hpbGUgKGEtPnVzZWQgPiAwICYmIGEtPmRwW2EtPnVzZWQgLSAxXSA9PSAwKSB7CisgICAgLS0oYS0+dXNlZCk7CisgIH0KKworICAvKiByZXNldCB0aGUgc2lnbiBmbGFnIGlmIHVzZWQgPT0gMCAqLworICBpZiAoYS0+dXNlZCA9PSAwKSB7CisgICAgYS0+c2lnbiA9IE1QX1pQT1M7CisgIH0KK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2NsYW1wLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX2NsZWFyLmMgYi9saWJ0b21tYXRoL2JuX21wX2NsZWFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAwYmQwNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfY2xlYXIuYwpAQCAtMCwwICsxLDQ3IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0NMRUFSX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGNsZWFyIG9uZSAoZnJlZXMpICAqLwordm9pZAorbXBfY2xlYXIgKG1wX2ludCAqIGEpCit7CisgIHZvbGF0aWxlIG1wX2RpZ2l0ICpwOworICBpbnQgbGVuOworCisgIC8qIG9ubHkgZG8gYW55dGhpbmcgaWYgYSBoYXNuJ3QgYmVlbiBmcmVlZCBwcmV2aW91c2x5ICovCisgIGlmIChhLT5kcCAhPSBOVUxMKSB7CisgICAgLyogZmlyc3QgemVybyB0aGUgZGlnaXRzICovCisJbGVuID0gYS0+YWxsb2M7CisJcCA9IGEtPmRwOworCXdoaWxlIChsZW4tLSkgeworCQkqcCsrID0gMDsKKwl9CisKKyAgICAvKiBmcmVlIHJhbSAqLworICAgIFhGUkVFKGEtPmRwKTsKKworICAgIC8qIHJlc2V0IG1lbWJlcnMgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyICovCisgICAgYS0+ZHAgICAgPSBOVUxMOworICAgIGEtPmFsbG9jID0gYS0+dXNlZCA9IDA7CisgICAgYS0+c2lnbiAgPSBNUF9aUE9TOworICB9Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9jbGVhci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9jbGVhcl9tdWx0aS5jIGIvbGlidG9tbWF0aC9ibl9tcF9jbGVhcl9tdWx0aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxODU5YmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2NsZWFyX211bHRpLmMKQEAgLTAsMCArMSwzNCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9DTEVBUl9NVUxUSV9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCit2b2lkIG1wX2NsZWFyX211bHRpKG1wX2ludCAqbXAsIC4uLikgCit7CisgICAgbXBfaW50KiBuZXh0X21wID0gbXA7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIG1wKTsKKyAgICB3aGlsZSAobmV4dF9tcCAhPSBOVUxMKSB7CisgICAgICAgIG1wX2NsZWFyKG5leHRfbXApOworICAgICAgICBuZXh0X21wID0gdmFfYXJnKGFyZ3MsIG1wX2ludCopOworICAgIH0KKyAgICB2YV9lbmQoYXJncyk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9jbGVhcl9tdWx0aS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9jbXAuYyBiL2xpYnRvbW1hdGgvYm5fbXBfY21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRlMmFmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfY21wLmMKQEAgLTAsMCArMSw0MyBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9DTVBfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY29tcGFyZSB0d28gaW50cyAoc2lnbmVkKSovCitpbnQKK21wX2NtcCAobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgLyogY29tcGFyZSBiYXNlZCBvbiBzaWduICovCisgIGlmIChhLT5zaWduICE9IGItPnNpZ24pIHsKKyAgICAgaWYgKGEtPnNpZ24gPT0gTVBfTkVHKSB7CisgICAgICAgIHJldHVybiBNUF9MVDsKKyAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIE1QX0dUOworICAgICB9CisgIH0KKyAgCisgIC8qIGNvbXBhcmUgZGlnaXRzICovCisgIGlmIChhLT5zaWduID09IE1QX05FRykgeworICAgICAvKiBpZiBuZWdhdGl2ZSBjb21wYXJlIG9wcG9zaXRlIGRpcmVjdGlvbiAqLworICAgICByZXR1cm4gbXBfY21wX21hZyhiLCBhKTsKKyAgfSBlbHNlIHsKKyAgICAgcmV0dXJuIG1wX2NtcF9tYWcoYSwgYik7CisgIH0KK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2NtcC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9jbXBfZC5jIGIvbGlidG9tbWF0aC9ibl9tcF9jbXBfZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYTE5YmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2NtcF9kLmMKQEAgLTAsMCArMSw0NCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9DTVBfRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBjb21wYXJlIGEgZGlnaXQgKi8KK2ludCBtcF9jbXBfZChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiKQoreworICAvKiBjb21wYXJlIGJhc2VkIG9uIHNpZ24gKi8KKyAgaWYgKGEtPnNpZ24gPT0gTVBfTkVHKSB7CisgICAgcmV0dXJuIE1QX0xUOworICB9CisKKyAgLyogY29tcGFyZSBiYXNlZCBvbiBtYWduaXR1ZGUgKi8KKyAgaWYgKGEtPnVzZWQgPiAxKSB7CisgICAgcmV0dXJuIE1QX0dUOworICB9CisKKyAgLyogY29tcGFyZSB0aGUgb25seSBkaWdpdCBvZiBhIHRvIGIgKi8KKyAgaWYgKGEtPmRwWzBdID4gYikgeworICAgIHJldHVybiBNUF9HVDsKKyAgfSBlbHNlIGlmIChhLT5kcFswXSA8IGIpIHsKKyAgICByZXR1cm4gTVBfTFQ7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIE1QX0VROworICB9Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9jbXBfZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9jbXBfbWFnLmMgYi9saWJ0b21tYXRoL2JuX21wX2NtcF9tYWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGM3YTNmCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9jbXBfbWFnLmMKQEAgLTAsMCArMSw1NSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9DTVBfTUFHX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGNvbXBhcmUgbWFnaW5pdHVkZSBvZiB0d28gaW50cyAodW5zaWduZWQpICovCitpbnQgbXBfY21wX21hZyAobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgaW50ICAgICBuOworICBtcF9kaWdpdCAqdG1wYSwgKnRtcGI7CisKKyAgLyogY29tcGFyZSBiYXNlZCBvbiAjIG9mIG5vbi16ZXJvIGRpZ2l0cyAqLworICBpZiAoYS0+dXNlZCA+IGItPnVzZWQpIHsKKyAgICByZXR1cm4gTVBfR1Q7CisgIH0KKyAgCisgIGlmIChhLT51c2VkIDwgYi0+dXNlZCkgeworICAgIHJldHVybiBNUF9MVDsKKyAgfQorCisgIC8qIGFsaWFzIGZvciBhICovCisgIHRtcGEgPSBhLT5kcCArIChhLT51c2VkIC0gMSk7CisKKyAgLyogYWxpYXMgZm9yIGIgKi8KKyAgdG1wYiA9IGItPmRwICsgKGEtPnVzZWQgLSAxKTsKKworICAvKiBjb21wYXJlIGJhc2VkIG9uIGRpZ2l0cyAgKi8KKyAgZm9yIChuID0gMDsgbiA8IGEtPnVzZWQ7ICsrbiwgLS10bXBhLCAtLXRtcGIpIHsKKyAgICBpZiAoKnRtcGEgPiAqdG1wYikgeworICAgICAgcmV0dXJuIE1QX0dUOworICAgIH0KKworICAgIGlmICgqdG1wYSA8ICp0bXBiKSB7CisgICAgICByZXR1cm4gTVBfTFQ7CisgICAgfQorICB9CisgIHJldHVybiBNUF9FUTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2NtcF9tYWcuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfY250X2xzYi5jIGIvbGlidG9tbWF0aC9ibl9tcF9jbnRfbHNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3Yjk5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfY250X2xzYi5jCkBAIC0wLDAgKzEsNTMgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfQ05UX0xTQl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCitzdGF0aWMgY29uc3QgaW50IGxuelsxNl0gPSB7IAorICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMAorfTsKKworLyogQ291bnRzIHRoZSBudW1iZXIgb2YgbHNicyB3aGljaCBhcmUgemVybyBiZWZvcmUgdGhlIGZpcnN0IHplcm8gYml0ICovCitpbnQgbXBfY250X2xzYihtcF9pbnQgKmEpCit7CisgICBpbnQgeDsKKyAgIG1wX2RpZ2l0IHEsIHFxOworCisgICAvKiBlYXN5IG91dCAqLworICAgaWYgKG1wX2lzemVybyhhKSA9PSAxKSB7CisgICAgICByZXR1cm4gMDsKKyAgIH0KKworICAgLyogc2NhbiBsb3dlciBkaWdpdHMgdW50aWwgbm9uLXplcm8gKi8KKyAgIGZvciAoeCA9IDA7IHggPCBhLT51c2VkICYmIGEtPmRwW3hdID09IDA7IHgrKyk7CisgICBxID0gYS0+ZHBbeF07CisgICB4ICo9IERJR0lUX0JJVDsKKworICAgLyogbm93IHNjYW4gdGhpcyBkaWdpdCB1bnRpbCBhIDEgaXMgZm91bmQgKi8KKyAgIGlmICgocSAmIDEpID09IDApIHsKKyAgICAgIGRvIHsKKyAgICAgICAgIHFxICA9IHEgJiAxNTsKKyAgICAgICAgIHggICs9IGxueltxcV07CisgICAgICAgICBxID4+PSA0OworICAgICAgfSB3aGlsZSAocXEgPT0gMCk7CisgICB9CisgICByZXR1cm4geDsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfY250X2xzYi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9jb3B5LmMgYi9saWJ0b21tYXRoL2JuX21wX2NvcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODIwMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9jb3B5LmMKQEAgLTAsMCArMSw2OCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9DT1BZX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGNvcHksIGIgPSBhICovCitpbnQKK21wX2NvcHkgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpCit7CisgIGludCAgICAgcmVzLCBuOworCisgIC8qIGlmIGRzdCA9PSBzcmMgZG8gbm90aGluZyAqLworICBpZiAoYSA9PSBiKSB7CisgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICAvKiBncm93IGRlc3QgKi8KKyAgaWYgKGItPmFsbG9jIDwgYS0+dXNlZCkgeworICAgICBpZiAoKHJlcyA9IG1wX2dyb3cgKGIsIGEtPnVzZWQpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfQorCisgIC8qIHplcm8gYiBhbmQgY29weSB0aGUgcGFyYW1ldGVycyBvdmVyICovCisgIHsKKyAgICByZWdpc3RlciBtcF9kaWdpdCAqdG1wYSwgKnRtcGI7CisKKyAgICAvKiBwb2ludGVyIGFsaWFzZXMgKi8KKworICAgIC8qIHNvdXJjZSAqLworICAgIHRtcGEgPSBhLT5kcDsKKworICAgIC8qIGRlc3RpbmF0aW9uICovCisgICAgdG1wYiA9IGItPmRwOworCisgICAgLyogY29weSBhbGwgdGhlIGRpZ2l0cyAqLworICAgIGZvciAobiA9IDA7IG4gPCBhLT51c2VkOyBuKyspIHsKKyAgICAgICp0bXBiKysgPSAqdG1wYSsrOworICAgIH0KKworICAgIC8qIGNsZWFyIGhpZ2ggZGlnaXRzICovCisgICAgZm9yICg7IG4gPCBiLT51c2VkOyBuKyspIHsKKyAgICAgICp0bXBiKysgPSAwOworICAgIH0KKyAgfQorCisgIC8qIGNvcHkgdXNlZCBjb3VudCBhbmQgc2lnbiAqLworICBiLT51c2VkID0gYS0+dXNlZDsKKyAgYi0+c2lnbiA9IGEtPnNpZ247CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfY29weS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9jb3VudF9iaXRzLmMgYi9saWJ0b21tYXRoL2JuX21wX2NvdW50X2JpdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjRkYjIyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9jb3VudF9iaXRzLmMKQEAgLTAsMCArMSw0NSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9DT1VOVF9CSVRTX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIGluIGFuIGludCAqLworaW50CittcF9jb3VudF9iaXRzIChtcF9pbnQgKiBhKQoreworICBpbnQgICAgIHI7CisgIG1wX2RpZ2l0IHE7CisKKyAgLyogc2hvcnRjdXQgKi8KKyAgaWYgKGEtPnVzZWQgPT0gMCkgeworICAgIHJldHVybiAwOworICB9CisKKyAgLyogZ2V0IG51bWJlciBvZiBkaWdpdHMgYW5kIGFkZCB0aGF0ICovCisgIHIgPSAoYS0+dXNlZCAtIDEpICogRElHSVRfQklUOworICAKKyAgLyogdGFrZSB0aGUgbGFzdCBkaWdpdCBhbmQgY291bnQgdGhlIGJpdHMgaW4gaXQgKi8KKyAgcSA9IGEtPmRwW2EtPnVzZWQgLSAxXTsKKyAgd2hpbGUgKHEgPiAoKG1wX2RpZ2l0KSAwKSkgeworICAgICsrcjsKKyAgICBxID4+PSAoKG1wX2RpZ2l0KSAxKTsKKyAgfQorICByZXR1cm4gcjsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2NvdW50X2JpdHMuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfZGl2LmMgYi9saWJ0b21tYXRoL2JuX21wX2Rpdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YWExYWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2Rpdi5jCkBAIC0wLDAgKzEsMjk0IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0RJVl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisjaWZkZWYgQk5fTVBfRElWX1NNQUxMCisKKy8qIHNsb3dlciBiaXQtYmFuZyBkaXZpc2lvbi4uLiBhbHNvIHNtYWxsZXIgKi8KK2ludCBtcF9kaXYobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYywgbXBfaW50ICogZCkKK3sKKyAgIG1wX2ludCB0YSwgdGIsIHRxLCBxOworICAgaW50ICAgIHJlcywgbiwgbjI7CisKKyAgLyogaXMgZGl2aXNvciB6ZXJvID8gKi8KKyAgaWYgKG1wX2lzemVybyAoYikgPT0gMSkgeworICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworICAvKiBpZiBhIDwgYiB0aGVuIHE9MCwgciA9IGEgKi8KKyAgaWYgKG1wX2NtcF9tYWcgKGEsIGIpID09IE1QX0xUKSB7CisgICAgaWYgKGQgIT0gTlVMTCkgeworICAgICAgcmVzID0gbXBfY29weSAoYSwgZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcyA9IE1QX09LQVk7CisgICAgfQorICAgIGlmIChjICE9IE5VTEwpIHsKKyAgICAgIG1wX3plcm8gKGMpOworICAgIH0KKyAgICByZXR1cm4gcmVzOworICB9CisJCisgIC8qIGluaXQgb3VyIHRlbXBzICovCisgIGlmICgocmVzID0gbXBfaW5pdF9tdWx0aSgmdGEsICZ0YiwgJnRxLCAmcSwgTlVMTCkgIT0gTVBfT0tBWSkpIHsKKyAgICAgcmV0dXJuIHJlczsKKyAgfQorCisKKyAgbXBfc2V0KCZ0cSwgMSk7CisgIG4gPSBtcF9jb3VudF9iaXRzKGEpIC0gbXBfY291bnRfYml0cyhiKTsKKyAgaWYgKCgocmVzID0gbXBfYWJzKGEsICZ0YSkpICE9IE1QX09LQVkpIHx8CisgICAgICAoKHJlcyA9IG1wX2FicyhiLCAmdGIpKSAhPSBNUF9PS0FZKSB8fCAKKyAgICAgICgocmVzID0gbXBfbXVsXzJkKCZ0YiwgbiwgJnRiKSkgIT0gTVBfT0tBWSkgfHwKKyAgICAgICgocmVzID0gbXBfbXVsXzJkKCZ0cSwgbiwgJnRxKSkgIT0gTVBfT0tBWSkpIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgfQorCisgIHdoaWxlIChuLS0gPj0gMCkgeworICAgICBpZiAobXBfY21wKCZ0YiwgJnRhKSAhPSBNUF9HVCkgeworICAgICAgICBpZiAoKChyZXMgPSBtcF9zdWIoJnRhLCAmdGIsICZ0YSkpICE9IE1QX09LQVkpIHx8CisgICAgICAgICAgICAoKHJlcyA9IG1wX2FkZCgmcSwgJnRxLCAmcSkpICE9IE1QX09LQVkpKSB7CisgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgICAgfQorICAgICB9CisgICAgIGlmICgoKHJlcyA9IG1wX2Rpdl8yZCgmdGIsIDEsICZ0YiwgTlVMTCkpICE9IE1QX09LQVkpIHx8CisgICAgICAgICAoKHJlcyA9IG1wX2Rpdl8yZCgmdHEsIDEsICZ0cSwgTlVMTCkpICE9IE1QX09LQVkpKSB7CisgICAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgfQorICB9CisKKyAgLyogbm93IHEgPT0gcXVvdGllbnQgYW5kIHRhID09IHJlbWFpbmRlciAqLworICBuICA9IGEtPnNpZ247CisgIG4yID0gKGEtPnNpZ24gPT0gYi0+c2lnbiA/IE1QX1pQT1MgOiBNUF9ORUcpOworICBpZiAoYyAhPSBOVUxMKSB7CisgICAgIG1wX2V4Y2goYywgJnEpOworICAgICBjLT5zaWduICA9IChtcF9pc3plcm8oYykgPT0gTVBfWUVTKSA/IE1QX1pQT1MgOiBuMjsKKyAgfQorICBpZiAoZCAhPSBOVUxMKSB7CisgICAgIG1wX2V4Y2goZCwgJnRhKTsKKyAgICAgZC0+c2lnbiA9IChtcF9pc3plcm8oZCkgPT0gTVBfWUVTKSA/IE1QX1pQT1MgOiBuOworICB9CitMQkxfRVJSOgorICAgbXBfY2xlYXJfbXVsdGkoJnRhLCAmdGIsICZ0cSwgJnEsIE5VTEwpOworICAgcmV0dXJuIHJlczsKK30KKworI2Vsc2UKKworLyogaW50ZWdlciBzaWduZWQgZGl2aXNpb24uIAorICogYypiICsgZCA9PSBhIFtlLmcuIGEvYiwgYz1xdW90aWVudCwgZD1yZW1haW5kZXJdCisgKiBIQUMgcHAuNTk4IEFsZ29yaXRobSAxNC4yMAorICoKKyAqIE5vdGUgdGhhdCB0aGUgZGVzY3JpcHRpb24gaW4gSEFDIGlzIGhvcnJpYmx5IAorICogaW5jb21wbGV0ZS4gIEZvciBleGFtcGxlLCBpdCBkb2Vzbid0IGNvbnNpZGVyIAorICogdGhlIGNhc2Ugd2hlcmUgZGlnaXRzIGFyZSByZW1vdmVkIGZyb20gJ3gnIGluIAorICogdGhlIGlubmVyIGxvb3AuICBJdCBhbHNvIGRvZXNuJ3QgY29uc2lkZXIgdGhlIAorICogY2FzZSB0aGF0IHkgaGFzIGZld2VyIHRoYW4gdGhyZWUgZGlnaXRzLCBldGMuLgorICoKKyAqIFRoZSBvdmVyYWxsIGFsZ29yaXRobSBpcyBhcyBkZXNjcmliZWQgYXMgCisgKiAxNC4yMCBmcm9tIEhBQyBidXQgZml4ZWQgdG8gdHJlYXQgdGhlc2UgY2FzZXMuCisqLworaW50IG1wX2RpdiAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYywgbXBfaW50ICogZCkKK3sKKyAgbXBfaW50ICBxLCB4LCB5LCB0MSwgdDI7CisgIGludCAgICAgcmVzLCBuLCB0LCBpLCBub3JtLCBuZWc7CisKKyAgLyogaXMgZGl2aXNvciB6ZXJvID8gKi8KKyAgaWYgKG1wX2lzemVybyAoYikgPT0gMSkgeworICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworICAvKiBpZiBhIDwgYiB0aGVuIHE9MCwgciA9IGEgKi8KKyAgaWYgKG1wX2NtcF9tYWcgKGEsIGIpID09IE1QX0xUKSB7CisgICAgaWYgKGQgIT0gTlVMTCkgeworICAgICAgcmVzID0gbXBfY29weSAoYSwgZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHJlcyA9IE1QX09LQVk7CisgICAgfQorICAgIGlmIChjICE9IE5VTEwpIHsKKyAgICAgIG1wX3plcm8gKGMpOworICAgIH0KKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9pbml0X3NpemUgKCZxLCBhLT51c2VkICsgMikpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisgIHEudXNlZCA9IGEtPnVzZWQgKyAyOworCisgIGlmICgocmVzID0gbXBfaW5pdCAoJnQxKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1E7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ0MikpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9UMTsKKyAgfQorCisgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmeCwgYSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9UMjsKKyAgfQorCisgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmeSwgYikpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9YOworICB9CisKKyAgLyogZml4IHRoZSBzaWduICovCisgIG5lZyA9IChhLT5zaWduID09IGItPnNpZ24pID8gTVBfWlBPUyA6IE1QX05FRzsKKyAgeC5zaWduID0geS5zaWduID0gTVBfWlBPUzsKKworICAvKiBub3JtYWxpemUgYm90aCB4IGFuZCB5LCBlbnN1cmUgdGhhdCB5ID49IGIvMiwgW2IgPT0gMioqRElHSVRfQklUXSAqLworICBub3JtID0gbXBfY291bnRfYml0cygmeSkgJSBESUdJVF9CSVQ7CisgIGlmIChub3JtIDwgKGludCkoRElHSVRfQklULTEpKSB7CisgICAgIG5vcm0gPSAoRElHSVRfQklULTEpIC0gbm9ybTsKKyAgICAgaWYgKChyZXMgPSBtcF9tdWxfMmQgKCZ4LCBub3JtLCAmeCkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIExCTF9ZOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfbXVsXzJkICgmeSwgbm9ybSwgJnkpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBMQkxfWTsKKyAgICAgfQorICB9IGVsc2UgeworICAgICBub3JtID0gMDsKKyAgfQorCisgIC8qIG5vdGUgaGFjIGRvZXMgMCBiYXNlZCwgc28gaWYgdXNlZD09NSB0aGVuIGl0cyAwLDEsMiwzLDQsIGUuZy4gdXNlIDQgKi8KKyAgbiA9IHgudXNlZCAtIDE7CisgIHQgPSB5LnVzZWQgLSAxOworCisgIC8qIHdoaWxlICh4ID49IHkqYioqbi10KSBkbyB7IHFbbi10XSArPSAxOyB4IC09IHkqYioqe24tdH0gfSAqLworICBpZiAoKHJlcyA9IG1wX2xzaGQgKCZ5LCBuIC0gdCkpICE9IE1QX09LQVkpIHsgLyogeSA9IHkqYioqe24tdH0gKi8KKyAgICBnb3RvIExCTF9ZOworICB9CisKKyAgd2hpbGUgKG1wX2NtcCAoJngsICZ5KSAhPSBNUF9MVCkgeworICAgICsrKHEuZHBbbiAtIHRdKTsKKyAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJngsICZ5LCAmeCkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX1k7CisgICAgfQorICB9CisKKyAgLyogcmVzZXQgeSBieSBzaGlmdGluZyBpdCBiYWNrIGRvd24gKi8KKyAgbXBfcnNoZCAoJnksIG4gLSB0KTsKKworICAvKiBzdGVwIDMuIGZvciBpIGZyb20gbiBkb3duIHRvICh0ICsgMSkgKi8KKyAgZm9yIChpID0gbjsgaSA+PSAodCArIDEpOyBpLS0pIHsKKyAgICBpZiAoaSA+IHgudXNlZCkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogc3RlcCAzLjEgaWYgeGkgPT0geXQgdGhlbiBzZXQgcXtpLXQtMX0gdG8gYi0xLCAKKyAgICAgKiBvdGhlcndpc2Ugc2V0IHF7aS10LTF9IHRvICh4aSpiICsgeHtpLTF9KS95dCAqLworICAgIGlmICh4LmRwW2ldID09IHkuZHBbdF0pIHsKKyAgICAgIHEuZHBbaSAtIHQgLSAxXSA9ICgoKChtcF9kaWdpdCkxKSA8PCBESUdJVF9CSVQpIC0gMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIG1wX3dvcmQgdG1wOworICAgICAgdG1wID0gKChtcF93b3JkKSB4LmRwW2ldKSA8PCAoKG1wX3dvcmQpIERJR0lUX0JJVCk7CisgICAgICB0bXAgfD0gKChtcF93b3JkKSB4LmRwW2kgLSAxXSk7CisgICAgICB0bXAgLz0gKChtcF93b3JkKSB5LmRwW3RdKTsKKyAgICAgIGlmICh0bXAgPiAobXBfd29yZCkgTVBfTUFTSykKKyAgICAgICAgdG1wID0gTVBfTUFTSzsKKyAgICAgIHEuZHBbaSAtIHQgLSAxXSA9IChtcF9kaWdpdCkgKHRtcCAmIChtcF93b3JkKSAoTVBfTUFTSykpOworICAgIH0KKworICAgIC8qIHdoaWxlIChxe2ktdC0xfSAqICh5dCAqIGIgKyB5e3QtMX0pKSA+IAorICAgICAgICAgICAgIHhpICogYioqMiArIHhpLTEgKiBiICsgeGktMiAKKyAgICAgCisgICAgICAgZG8gcXtpLXQtMX0gLT0gMTsgCisgICAgKi8KKyAgICBxLmRwW2kgLSB0IC0gMV0gPSAocS5kcFtpIC0gdCAtIDFdICsgMSkgJiBNUF9NQVNLOworICAgIGRvIHsKKyAgICAgIHEuZHBbaSAtIHQgLSAxXSA9IChxLmRwW2kgLSB0IC0gMV0gLSAxKSAmIE1QX01BU0s7CisKKyAgICAgIC8qIGZpbmQgbGVmdCBoYW5kICovCisgICAgICBtcF96ZXJvICgmdDEpOworICAgICAgdDEuZHBbMF0gPSAodCAtIDEgPCAwKSA/IDAgOiB5LmRwW3QgLSAxXTsKKyAgICAgIHQxLmRwWzFdID0geS5kcFt0XTsKKyAgICAgIHQxLnVzZWQgPSAyOworICAgICAgaWYgKChyZXMgPSBtcF9tdWxfZCAoJnQxLCBxLmRwW2kgLSB0IC0gMV0sICZ0MSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfWTsKKyAgICAgIH0KKworICAgICAgLyogZmluZCByaWdodCBoYW5kICovCisgICAgICB0Mi5kcFswXSA9IChpIC0gMiA8IDApID8gMCA6IHguZHBbaSAtIDJdOworICAgICAgdDIuZHBbMV0gPSAoaSAtIDEgPCAwKSA/IDAgOiB4LmRwW2kgLSAxXTsKKyAgICAgIHQyLmRwWzJdID0geC5kcFtpXTsKKyAgICAgIHQyLnVzZWQgPSAzOworICAgIH0gd2hpbGUgKG1wX2NtcF9tYWcoJnQxLCAmdDIpID09IE1QX0dUKTsKKworICAgIC8qIHN0ZXAgMy4zIHggPSB4IC0gcXtpLXQtMX0gKiB5ICogYioqe2ktdC0xfSAqLworICAgIGlmICgocmVzID0gbXBfbXVsX2QgKCZ5LCBxLmRwW2kgLSB0IC0gMV0sICZ0MSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX1k7CisgICAgfQorCisgICAgaWYgKChyZXMgPSBtcF9sc2hkICgmdDEsIGkgLSB0IC0gMSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX1k7CisgICAgfQorCisgICAgaWYgKChyZXMgPSBtcF9zdWIgKCZ4LCAmdDEsICZ4KSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfWTsKKyAgICB9CisKKyAgICAvKiBpZiB4IDwgMCB0aGVuIHsgeCA9IHggKyB5KmIqKntpLXQtMX07IHF7aS10LTF9IC09IDE7IH0gKi8KKyAgICBpZiAoeC5zaWduID09IE1QX05FRykgeworICAgICAgaWYgKChyZXMgPSBtcF9jb3B5ICgmeSwgJnQxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9ZOworICAgICAgfQorICAgICAgaWYgKChyZXMgPSBtcF9sc2hkICgmdDEsIGkgLSB0IC0gMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfWTsKKyAgICAgIH0KKyAgICAgIGlmICgocmVzID0gbXBfYWRkICgmeCwgJnQxLCAmeCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfWTsKKyAgICAgIH0KKworICAgICAgcS5kcFtpIC0gdCAtIDFdID0gKHEuZHBbaSAtIHQgLSAxXSAtIDFVTCkgJiBNUF9NQVNLOworICAgIH0KKyAgfQorCisgIC8qIG5vdyBxIGlzIHRoZSBxdW90aWVudCBhbmQgeCBpcyB0aGUgcmVtYWluZGVyIAorICAgKiBbd2hpY2ggd2UgaGF2ZSB0byBub3JtYWxpemVdIAorICAgKi8KKyAgCisgIC8qIGdldCBzaWduIGJlZm9yZSB3cml0aW5nIHRvIGMgKi8KKyAgeC5zaWduID0geC51c2VkID09IDAgPyBNUF9aUE9TIDogYS0+c2lnbjsKKworICBpZiAoYyAhPSBOVUxMKSB7CisgICAgbXBfY2xhbXAgKCZxKTsKKyAgICBtcF9leGNoICgmcSwgYyk7CisgICAgYy0+c2lnbiA9IG5lZzsKKyAgfQorCisgIGlmIChkICE9IE5VTEwpIHsKKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yZCAoJngsIG5vcm0sICZ4LCBOVUxMKSkgIT0gTVBfT0tBWSkgeworCQlnb3RvIExCTF9ZOworCX0KKyAgICBtcF9leGNoICgmeCwgZCk7CisgIH0KKworICByZXMgPSBNUF9PS0FZOworCitMQkxfWTptcF9jbGVhciAoJnkpOworTEJMX1g6bXBfY2xlYXIgKCZ4KTsKK0xCTF9UMjptcF9jbGVhciAoJnQyKTsKK0xCTF9UMTptcF9jbGVhciAoJnQxKTsKK0xCTF9ROm1wX2NsZWFyICgmcSk7CisgIHJldHVybiByZXM7Cit9CisKKyNlbmRpZgorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9kaXYuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfZGl2XzIuYyBiL2xpYnRvbW1hdGgvYm5fbXBfZGl2XzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDM1ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9kaXZfMi5jCkBAIC0wLDAgKzEsNjggQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRElWXzJfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogYiA9IGEvMiAqLworaW50IG1wX2Rpdl8yKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpCit7CisgIGludCAgICAgeCwgcmVzLCBvbGR1c2VkOworCisgIC8qIGNvcHkgKi8KKyAgaWYgKGItPmFsbG9jIDwgYS0+dXNlZCkgeworICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYiwgYS0+dXNlZCkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisKKyAgb2xkdXNlZCA9IGItPnVzZWQ7CisgIGItPnVzZWQgPSBhLT51c2VkOworICB7CisgICAgcmVnaXN0ZXIgbXBfZGlnaXQgciwgcnIsICp0bXBhLCAqdG1wYjsKKworICAgIC8qIHNvdXJjZSBhbGlhcyAqLworICAgIHRtcGEgPSBhLT5kcCArIGItPnVzZWQgLSAxOworCisgICAgLyogZGVzdCBhbGlhcyAqLworICAgIHRtcGIgPSBiLT5kcCArIGItPnVzZWQgLSAxOworCisgICAgLyogY2FycnkgKi8KKyAgICByID0gMDsKKyAgICBmb3IgKHggPSBiLT51c2VkIC0gMTsgeCA+PSAwOyB4LS0pIHsKKyAgICAgIC8qIGdldCB0aGUgY2FycnkgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbiAqLworICAgICAgcnIgPSAqdG1wYSAmIDE7CisKKyAgICAgIC8qIHNoaWZ0IHRoZSBjdXJyZW50IGRpZ2l0LCBhZGQgaW4gY2FycnkgYW5kIHN0b3JlICovCisgICAgICAqdG1wYi0tID0gKCp0bXBhLS0gPj4gMSkgfCAociA8PCAoRElHSVRfQklUIC0gMSkpOworCisgICAgICAvKiBmb3J3YXJkIGNhcnJ5IHRvIG5leHQgaXRlcmF0aW9uICovCisgICAgICByID0gcnI7CisgICAgfQorCisgICAgLyogemVybyBleGNlc3MgZGlnaXRzICovCisgICAgdG1wYiA9IGItPmRwICsgYi0+dXNlZDsKKyAgICBmb3IgKHggPSBiLT51c2VkOyB4IDwgb2xkdXNlZDsgeCsrKSB7CisgICAgICAqdG1wYisrID0gMDsKKyAgICB9CisgIH0KKyAgYi0+c2lnbiA9IGEtPnNpZ247CisgIG1wX2NsYW1wIChiKTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9kaXZfMi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9kaXZfMmQuYyBiL2xpYnRvbW1hdGgvYm5fbXBfZGl2XzJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMxOGQ4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfZGl2XzJkLmMKQEAgLTAsMCArMSw5NyBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9ESVZfMkRfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogc2hpZnQgcmlnaHQgYnkgYSBjZXJ0YWluIGJpdCBjb3VudCAoc3RvcmUgcXVvdGllbnQgaW4gYywgb3B0aW9uYWwgcmVtYWluZGVyIGluIGQpICovCitpbnQgbXBfZGl2XzJkIChtcF9pbnQgKiBhLCBpbnQgYiwgbXBfaW50ICogYywgbXBfaW50ICogZCkKK3sKKyAgbXBfZGlnaXQgRCwgciwgcnI7CisgIGludCAgICAgeCwgcmVzOworICBtcF9pbnQgIHQ7CisKKworICAvKiBpZiB0aGUgc2hpZnQgY291bnQgaXMgPD0gMCB0aGVuIHdlIGRvIG5vIHdvcmsgKi8KKyAgaWYgKGIgPD0gMCkgeworICAgIHJlcyA9IG1wX2NvcHkgKGEsIGMpOworICAgIGlmIChkICE9IE5VTEwpIHsKKyAgICAgIG1wX3plcm8gKGQpOworICAgIH0KKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9pbml0ICgmdCkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLyogZ2V0IHRoZSByZW1haW5kZXIgKi8KKyAgaWYgKGQgIT0gTlVMTCkgeworICAgIGlmICgocmVzID0gbXBfbW9kXzJkIChhLCBiLCAmdCkpICE9IE1QX09LQVkpIHsKKyAgICAgIG1wX2NsZWFyICgmdCk7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgfQorCisgIC8qIGNvcHkgKi8KKyAgaWYgKChyZXMgPSBtcF9jb3B5IChhLCBjKSkgIT0gTVBfT0tBWSkgeworICAgIG1wX2NsZWFyICgmdCk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIHNoaWZ0IGJ5IGFzIG1hbnkgZGlnaXRzIGluIHRoZSBiaXQgY291bnQgKi8KKyAgaWYgKGIgPj0gKGludClESUdJVF9CSVQpIHsKKyAgICBtcF9yc2hkIChjLCBiIC8gRElHSVRfQklUKTsKKyAgfQorCisgIC8qIHNoaWZ0IGFueSBiaXQgY291bnQgPCBESUdJVF9CSVQgKi8KKyAgRCA9IChtcF9kaWdpdCkgKGIgJSBESUdJVF9CSVQpOworICBpZiAoRCAhPSAwKSB7CisgICAgcmVnaXN0ZXIgbXBfZGlnaXQgKnRtcGMsIG1hc2ssIHNoaWZ0OworCisgICAgLyogbWFzayAqLworICAgIG1hc2sgPSAoKChtcF9kaWdpdCkxKSA8PCBEKSAtIDE7CisKKyAgICAvKiBzaGlmdCBmb3IgbHNiICovCisgICAgc2hpZnQgPSBESUdJVF9CSVQgLSBEOworCisgICAgLyogYWxpYXMgKi8KKyAgICB0bXBjID0gYy0+ZHAgKyAoYy0+dXNlZCAtIDEpOworCisgICAgLyogY2FycnkgKi8KKyAgICByID0gMDsKKyAgICBmb3IgKHggPSBjLT51c2VkIC0gMTsgeCA+PSAwOyB4LS0pIHsKKyAgICAgIC8qIGdldCB0aGUgbG93ZXIgIGJpdHMgb2YgdGhpcyB3b3JkIGluIGEgdGVtcCAqLworICAgICAgcnIgPSAqdG1wYyAmIG1hc2s7CisKKyAgICAgIC8qIHNoaWZ0IHRoZSBjdXJyZW50IHdvcmQgYW5kIG1peCBpbiB0aGUgY2FycnkgYml0cyBmcm9tIHRoZSBwcmV2aW91cyB3b3JkICovCisgICAgICAqdG1wYyA9ICgqdG1wYyA+PiBEKSB8IChyIDw8IHNoaWZ0KTsKKyAgICAgIC0tdG1wYzsKKworICAgICAgLyogc2V0IHRoZSBjYXJyeSB0byB0aGUgY2FycnkgYml0cyBvZiB0aGUgY3VycmVudCB3b3JkIGZvdW5kIGFib3ZlICovCisgICAgICByID0gcnI7CisgICAgfQorICB9CisgIG1wX2NsYW1wIChjKTsKKyAgaWYgKGQgIT0gTlVMTCkgeworICAgIG1wX2V4Y2ggKCZ0LCBkKTsKKyAgfQorICBtcF9jbGVhciAoJnQpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2Rpdl8yZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9kaXZfMy5jIGIvbGlidG9tbWF0aC9ibl9tcF9kaXZfMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MDkwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2Rpdl8zLmMKQEAgLTAsMCArMSw3OSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9ESVZfM19DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBkaXZpZGUgYnkgdGhyZWUgKGJhc2VkIG9uIHJvdXRpbmUgZnJvbSBNUEkgYW5kIHRoZSBHTVAgbWFudWFsKSAqLworaW50CittcF9kaXZfMyAobXBfaW50ICogYSwgbXBfaW50ICpjLCBtcF9kaWdpdCAqIGQpCit7CisgIG1wX2ludCAgIHE7CisgIG1wX3dvcmQgIHcsIHQ7CisgIG1wX2RpZ2l0IGI7CisgIGludCAgICAgIHJlcywgaXg7CisgIAorICAvKiBiID0gMioqRElHSVRfQklUIC8gMyAqLworICBiID0gKCgobXBfd29yZCkxKSA8PCAoKG1wX3dvcmQpRElHSVRfQklUKSkgLyAoKG1wX3dvcmQpMyk7CisKKyAgaWYgKChyZXMgPSBtcF9pbml0X3NpemUoJnEsIGEtPnVzZWQpKSAhPSBNUF9PS0FZKSB7CisgICAgIHJldHVybiByZXM7CisgIH0KKyAgCisgIHEudXNlZCA9IGEtPnVzZWQ7CisgIHEuc2lnbiA9IGEtPnNpZ247CisgIHcgPSAwOworICBmb3IgKGl4ID0gYS0+dXNlZCAtIDE7IGl4ID49IDA7IGl4LS0pIHsKKyAgICAgdyA9ICh3IDw8ICgobXBfd29yZClESUdJVF9CSVQpKSB8ICgobXBfd29yZClhLT5kcFtpeF0pOworCisgICAgIGlmICh3ID49IDMpIHsKKyAgICAgICAgLyogbXVsdGlwbHkgdyBieSBbMS8zXSAqLworICAgICAgICB0ID0gKHcgKiAoKG1wX3dvcmQpYikpID4+ICgobXBfd29yZClESUdJVF9CSVQpOworCisgICAgICAgIC8qIG5vdyBzdWJ0cmFjdCAzICogW3cvM10gZnJvbSB3LCB0byBnZXQgdGhlIHJlbWFpbmRlciAqLworICAgICAgICB3IC09IHQrdCt0OworCisgICAgICAgIC8qIGZpeHVwIHRoZSByZW1haW5kZXIgYXMgcmVxdWlyZWQgc2luY2UKKyAgICAgICAgICogdGhlIG9wdGltaXphdGlvbiBpcyBub3QgZXhhY3QuCisgICAgICAgICAqLworICAgICAgICB3aGlsZSAodyA+PSAzKSB7CisgICAgICAgICAgIHQgKz0gMTsKKyAgICAgICAgICAgdyAtPSAzOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICB0ID0gMDsKKyAgICAgIH0KKyAgICAgIHEuZHBbaXhdID0gKG1wX2RpZ2l0KXQ7CisgIH0KKworICAvKiBbb3B0aW9uYWxdIHN0b3JlIHRoZSByZW1haW5kZXIgKi8KKyAgaWYgKGQgIT0gTlVMTCkgeworICAgICAqZCA9IChtcF9kaWdpdCl3OworICB9CisKKyAgLyogW29wdGlvbmFsXSBzdG9yZSB0aGUgcXVvdGllbnQgKi8KKyAgaWYgKGMgIT0gTlVMTCkgeworICAgICBtcF9jbGFtcCgmcSk7CisgICAgIG1wX2V4Y2goJnEsIGMpOworICB9CisgIG1wX2NsZWFyKCZxKTsKKyAgCisgIHJldHVybiByZXM7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2Rpdl8zLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX2Rpdl9kLmMgYi9saWJ0b21tYXRoL2JuX21wX2Rpdl9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxYWE2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfZGl2X2QuYwpAQCAtMCwwICsxLDExMCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9ESVZfRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCitzdGF0aWMgaW50IHNfaXNfcG93ZXJfb2ZfdHdvKG1wX2RpZ2l0IGIsIGludCAqcCkKK3sKKyAgIGludCB4OworCisgICBmb3IgKHggPSAxOyB4IDwgRElHSVRfQklUOyB4KyspIHsKKyAgICAgIGlmIChiID09ICgoKG1wX2RpZ2l0KTEpPDx4KSkgeworICAgICAgICAgKnAgPSB4OworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICB9CisgICByZXR1cm4gMDsKK30KKworLyogc2luZ2xlIGRpZ2l0IGRpdmlzaW9uIChiYXNlZCBvbiByb3V0aW5lIGZyb20gTVBJKSAqLworaW50IG1wX2Rpdl9kIChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiLCBtcF9pbnQgKiBjLCBtcF9kaWdpdCAqIGQpCit7CisgIG1wX2ludCAgcTsKKyAgbXBfd29yZCB3OworICBtcF9kaWdpdCB0OworICBpbnQgICAgIHJlcywgaXg7CisKKyAgLyogY2Fubm90IGRpdmlkZSBieSB6ZXJvICovCisgIGlmIChiID09IDApIHsKKyAgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIHF1aWNrIG91dHMgKi8KKyAgaWYgKGIgPT0gMSB8fCBtcF9pc3plcm8oYSkgPT0gMSkgeworICAgICBpZiAoZCAhPSBOVUxMKSB7CisgICAgICAgICpkID0gMDsKKyAgICAgfQorICAgICBpZiAoYyAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybiBtcF9jb3B5KGEsIGMpOworICAgICB9CisgICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogcG93ZXIgb2YgdHdvID8gKi8KKyAgaWYgKHNfaXNfcG93ZXJfb2ZfdHdvKGIsICZpeCkgPT0gMSkgeworICAgICBpZiAoZCAhPSBOVUxMKSB7CisgICAgICAgICpkID0gYS0+ZHBbMF0gJiAoKCgobXBfZGlnaXQpMSk8PGl4KSAtIDEpOworICAgICB9CisgICAgIGlmIChjICE9IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIG1wX2Rpdl8yZChhLCBpeCwgYywgTlVMTCk7CisgICAgIH0KKyAgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworI2lmZGVmIEJOX01QX0RJVl8zX0MKKyAgLyogdGhyZWU/ICovCisgIGlmIChiID09IDMpIHsKKyAgICAgcmV0dXJuIG1wX2Rpdl8zKGEsIGMsIGQpOworICB9CisjZW5kaWYKKworICAvKiBubyBlYXN5IGFuc3dlciBbYydlc3QgbGEgdmllXS4gIEp1c3QgZGl2aXNpb24gKi8KKyAgaWYgKChyZXMgPSBtcF9pbml0X3NpemUoJnEsIGEtPnVzZWQpKSAhPSBNUF9PS0FZKSB7CisgICAgIHJldHVybiByZXM7CisgIH0KKyAgCisgIHEudXNlZCA9IGEtPnVzZWQ7CisgIHEuc2lnbiA9IGEtPnNpZ247CisgIHcgPSAwOworICBmb3IgKGl4ID0gYS0+dXNlZCAtIDE7IGl4ID49IDA7IGl4LS0pIHsKKyAgICAgdyA9ICh3IDw8ICgobXBfd29yZClESUdJVF9CSVQpKSB8ICgobXBfd29yZClhLT5kcFtpeF0pOworICAgICAKKyAgICAgaWYgKHcgPj0gYikgeworICAgICAgICB0ID0gKG1wX2RpZ2l0KSh3IC8gYik7CisgICAgICAgIHcgLT0gKChtcF93b3JkKXQpICogKChtcF93b3JkKWIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdCA9IDA7CisgICAgICB9CisgICAgICBxLmRwW2l4XSA9IChtcF9kaWdpdCl0OworICB9CisgIAorICBpZiAoZCAhPSBOVUxMKSB7CisgICAgICpkID0gKG1wX2RpZ2l0KXc7CisgIH0KKyAgCisgIGlmIChjICE9IE5VTEwpIHsKKyAgICAgbXBfY2xhbXAoJnEpOworICAgICBtcF9leGNoKCZxLCBjKTsKKyAgfQorICBtcF9jbGVhcigmcSk7CisgIAorICByZXR1cm4gcmVzOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9kaXZfZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9kcl9pc19tb2R1bHVzLmMgYi9saWJ0b21tYXRoL2JuX21wX2RyX2lzX21vZHVsdXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTIyM2YzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9kcl9pc19tb2R1bHVzLmMKQEAgLTAsMCArMSw0MyBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9EUl9JU19NT0RVTFVTX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGRldGVybWluZXMgaWYgYSBudW1iZXIgaXMgYSB2YWxpZCBEUiBtb2R1bHVzICovCitpbnQgbXBfZHJfaXNfbW9kdWx1cyhtcF9pbnQgKmEpCit7CisgICBpbnQgaXg7CisKKyAgIC8qIG11c3QgYmUgYXQgbGVhc3QgdHdvIGRpZ2l0cyAqLworICAgaWYgKGEtPnVzZWQgPCAyKSB7CisgICAgICByZXR1cm4gMDsKKyAgIH0KKworICAgLyogbXVzdCBiZSBvZiB0aGUgZm9ybSBiKiprIC0gYSBbYSA8PSBiXSBzbyBhbGwKKyAgICAqIGJ1dCB0aGUgZmlyc3QgZGlnaXQgbXVzdCBiZSBlcXVhbCB0byAtMSAobW9kIGIpLgorICAgICovCisgICBmb3IgKGl4ID0gMTsgaXggPCBhLT51c2VkOyBpeCsrKSB7CisgICAgICAgaWYgKGEtPmRwW2l4XSAhPSBNUF9NQVNLKSB7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgfQorICAgfQorICAgcmV0dXJuIDE7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2RyX2lzX21vZHVsdXMuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfZHJfcmVkdWNlLmMgYi9saWJ0b21tYXRoL2JuX21wX2RyX3JlZHVjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZWYxOGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2RyX3JlZHVjZS5jCkBAIC0wLDAgKzEsOTQgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRFJfUkVEVUNFX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHJlZHVjZSAieCIgaW4gcGxhY2UgbW9kdWxvICJuIiB1c2luZyB0aGUgRGltaW5pc2hlZCBSYWRpeCBhbGdvcml0aG0uCisgKgorICogQmFzZWQgb24gYWxnb3JpdGhtIGZyb20gdGhlIHBhcGVyCisgKgorICogIkdlbmVyYXRpbmcgRWZmaWNpZW50IFByaW1lcyBmb3IgRGlzY3JldGUgTG9nIENyeXB0b3N5c3RlbXMiCisgKiAgICAgICAgICAgICAgICAgQ2hhZSBIb29uIExpbSwgUGlsIEpvb25nIExlZSwKKyAqICAgICAgICAgIFBPU1RFQ0ggSW5mb3JtYXRpb24gUmVzZWFyY2ggTGFib3JhdG9yaWVzCisgKgorICogVGhlIG1vZHVsdXMgbXVzdCBiZSBvZiBhIHNwZWNpYWwgZm9ybWF0IFtzZWUgbWFudWFsXQorICoKKyAqIEhhcyBiZWVuIG1vZGlmaWVkIHRvIHVzZSBhbGdvcml0aG0gNy4xMCBmcm9tIHRoZSBMVE0gYm9vayBpbnN0ZWFkCisgKgorICogSW5wdXQgeCBtdXN0IGJlIGluIHRoZSByYW5nZSAwIDw9IHggPD0gKG4tMSkqKjIKKyAqLworaW50CittcF9kcl9yZWR1Y2UgKG1wX2ludCAqIHgsIG1wX2ludCAqIG4sIG1wX2RpZ2l0IGspCit7CisgIGludCAgICAgIGVyciwgaSwgbTsKKyAgbXBfd29yZCAgcjsKKyAgbXBfZGlnaXQgbXUsICp0bXB4MSwgKnRtcHgyOworCisgIC8qIG0gPSBkaWdpdHMgaW4gbW9kdWx1cyAqLworICBtID0gbi0+dXNlZDsKKworICAvKiBlbnN1cmUgdGhhdCAieCIgaGFzIGF0IGxlYXN0IDJtIGRpZ2l0cyAqLworICBpZiAoeC0+YWxsb2MgPCBtICsgbSkgeworICAgIGlmICgoZXJyID0gbXBfZ3JvdyAoeCwgbSArIG0pKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgfQorCisvKiB0b3Agb2YgbG9vcCwgdGhpcyBpcyB3aGVyZSB0aGUgY29kZSByZXN1bWVzIGlmCisgKiBhbm90aGVyIHJlZHVjdGlvbiBwYXNzIGlzIHJlcXVpcmVkLgorICovCit0b3A6CisgIC8qIGFsaWFzZXMgZm9yIGRpZ2l0cyAqLworICAvKiBhbGlhcyBmb3IgbG93ZXIgaGFsZiBvZiB4ICovCisgIHRtcHgxID0geC0+ZHA7CisKKyAgLyogYWxpYXMgZm9yIHVwcGVyIGhhbGYgb2YgeCwgb3IgeC9CKiptICovCisgIHRtcHgyID0geC0+ZHAgKyBtOworCisgIC8qIHNldCBjYXJyeSB0byB6ZXJvICovCisgIG11ID0gMDsKKworICAvKiBjb21wdXRlICh4IG1vZCBCKiptKSArIGsgKiBbeC9CKiptXSBpbmxpbmUgYW5kIGlucGxhY2UgKi8KKyAgZm9yIChpID0gMDsgaSA8IG07IGkrKykgeworICAgICAgciAgICAgICAgID0gKChtcF93b3JkKSp0bXB4MisrKSAqICgobXBfd29yZClrKSArICp0bXB4MSArIG11OworICAgICAgKnRtcHgxKysgID0gKG1wX2RpZ2l0KShyICYgTVBfTUFTSyk7CisgICAgICBtdSAgICAgICAgPSAobXBfZGlnaXQpKHIgPj4gKChtcF93b3JkKURJR0lUX0JJVCkpOworICB9CisKKyAgLyogc2V0IGZpbmFsIGNhcnJ5ICovCisgICp0bXB4MSsrID0gbXU7CisKKyAgLyogemVybyB3b3JkcyBhYm92ZSBtICovCisgIGZvciAoaSA9IG0gKyAxOyBpIDwgeC0+dXNlZDsgaSsrKSB7CisgICAgICAqdG1weDErKyA9IDA7CisgIH0KKworICAvKiBjbGFtcCwgc3ViIGFuZCByZXR1cm4gKi8KKyAgbXBfY2xhbXAgKHgpOworCisgIC8qIGlmIHggPj0gbiB0aGVuIHN1YnRyYWN0IGFuZCByZWR1Y2UgYWdhaW4KKyAgICogRWFjaCBzdWNjZXNzaXZlICJyZWN1cnNpb24iIG1ha2VzIHRoZSBpbnB1dCBzbWFsbGVyIGFuZCBzbWFsbGVyLgorICAgKi8KKyAgaWYgKG1wX2NtcF9tYWcgKHgsIG4pICE9IE1QX0xUKSB7CisgICAgc19tcF9zdWIoeCwgbiwgeCk7CisgICAgZ290byB0b3A7CisgIH0KKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9kcl9yZWR1Y2UuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfZHJfc2V0dXAuYyBiL2xpYnRvbW1hdGgvYm5fbXBfZHJfc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTgyYzliCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9kcl9zZXR1cC5jCkBAIC0wLDAgKzEsMzIgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRFJfU0VUVVBfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZGV0ZXJtaW5lcyB0aGUgc2V0dXAgdmFsdWUgKi8KK3ZvaWQgbXBfZHJfc2V0dXAobXBfaW50ICphLCBtcF9kaWdpdCAqZCkKK3sKKyAgIC8qIHRoZSBjYXN0cyBhcmUgcmVxdWlyZWQgaWYgRElHSVRfQklUIGlzIG9uZSBsZXNzIHRoYW4KKyAgICAqIHRoZSBudW1iZXIgb2YgYml0cyBpbiBhIG1wX2RpZ2l0IFtlLmcuIERJR0lUX0JJVD09MzFdCisgICAgKi8KKyAgICpkID0gKG1wX2RpZ2l0KSgoKChtcF93b3JkKTEpIDw8ICgobXBfd29yZClESUdJVF9CSVQpKSAtIAorICAgICAgICAoKG1wX3dvcmQpYS0+ZHBbMF0pKTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZHJfc2V0dXAuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfZXhjaC5jIGIvbGlidG9tbWF0aC9ibl9tcF9leGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFhNDJhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfZXhjaC5jCkBAIC0wLDAgKzEsMzQgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRVhDSF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBzd2FwIHRoZSBlbGVtZW50cyBvZiB0d28gaW50ZWdlcnMsIGZvciBjYXNlcyB3aGVyZSB5b3UgY2FuJ3Qgc2ltcGx5IHN3YXAgdGhlIAorICogbXBfaW50IHBvaW50ZXJzIGFyb3VuZAorICovCit2b2lkCittcF9leGNoIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQoreworICBtcF9pbnQgIHQ7CisKKyAgdCAgPSAqYTsKKyAgKmEgPSAqYjsKKyAgKmIgPSB0OworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZXhjaC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9leHB0X2QuYyBiL2xpYnRvbW1hdGgvYm5fbXBfZXhwdF9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU2Y2Y2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfZXhwdF9kLmMKQEAgLTAsMCArMSw1NyBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9FWFBUX0RfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY2FsY3VsYXRlIGMgPSBhKipiICB1c2luZyBhIHNxdWFyZS1tdWx0aXBseSBhbGdvcml0aG0gKi8KK2ludCBtcF9leHB0X2QgKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIsIG1wX2ludCAqIGMpCit7CisgIGludCAgICAgcmVzLCB4OworICBtcF9pbnQgIGc7CisKKyAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkgKCZnLCBhKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICAvKiBzZXQgaW5pdGlhbCByZXN1bHQgKi8KKyAgbXBfc2V0IChjLCAxKTsKKworICBmb3IgKHggPSAwOyB4IDwgKGludCkgRElHSVRfQklUOyB4KyspIHsKKyAgICAvKiBzcXVhcmUgKi8KKyAgICBpZiAoKHJlcyA9IG1wX3NxciAoYywgYykpICE9IE1QX09LQVkpIHsKKyAgICAgIG1wX2NsZWFyICgmZyk7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIC8qIGlmIHRoZSBiaXQgaXMgc2V0IG11bHRpcGx5ICovCisgICAgaWYgKChiICYgKG1wX2RpZ2l0KSAoKChtcF9kaWdpdCkxKSA8PCAoRElHSVRfQklUIC0gMSkpKSAhPSAwKSB7CisgICAgICBpZiAoKHJlcyA9IG1wX211bCAoYywgJmcsIGMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICBtcF9jbGVhciAoJmcpOworICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBzaGlmdCB0byBuZXh0IGJpdCAqLworICAgIGIgPDw9IDE7CisgIH0KKworICBtcF9jbGVhciAoJmcpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2V4cHRfZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9leHB0bW9kLmMgYi9saWJ0b21tYXRoL2JuX21wX2V4cHRtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzJhYjIwCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9leHB0bW9kLmMKQEAgLTAsMCArMSwxMTIgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRVhQVE1PRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisKKy8qIHRoaXMgaXMgYSBzaGVsbCBmdW5jdGlvbiB0aGF0IGNhbGxzIGVpdGhlciB0aGUgbm9ybWFsIG9yIE1vbnRnb21lcnkKKyAqIGV4cHRtb2QgZnVuY3Rpb25zLiAgT3JpZ2luYWxseSB0aGUgY2FsbCB0byB0aGUgbW9udGdvbWVyeSBjb2RlIHdhcworICogZW1iZWRkZWQgaW4gdGhlIG5vcm1hbCBmdW5jdGlvbiBidXQgdGhhdCB3YXN0ZWQgYWxvdCBvZiBzdGFjayBzcGFjZQorICogZm9yIG5vdGhpbmcgKHNpbmNlIDk5JSBvZiB0aGUgdGltZSB0aGUgTW9udGdvbWVyeSBjb2RlIHdvdWxkIGJlIGNhbGxlZCkKKyAqLworaW50IG1wX2V4cHRtb2QgKG1wX2ludCAqIEcsIG1wX2ludCAqIFgsIG1wX2ludCAqIFAsIG1wX2ludCAqIFkpCit7CisgIGludCBkcjsKKworICAvKiBtb2R1bHVzIFAgbXVzdCBiZSBwb3NpdGl2ZSAqLworICBpZiAoUC0+c2lnbiA9PSBNUF9ORUcpIHsKKyAgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIGlmIGV4cG9uZW50IFggaXMgbmVnYXRpdmUgd2UgaGF2ZSB0byByZWN1cnNlICovCisgIGlmIChYLT5zaWduID09IE1QX05FRykgeworI2lmZGVmIEJOX01QX0lOVk1PRF9DCisgICAgIG1wX2ludCB0bXBHLCB0bXBYOworICAgICBpbnQgZXJyOworCisgICAgIC8qIGZpcnN0IGNvbXB1dGUgMS9HIG1vZCBQICovCisgICAgIGlmICgoZXJyID0gbXBfaW5pdCgmdG1wRykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgfQorICAgICBpZiAoKGVyciA9IG1wX2ludm1vZChHLCBQLCAmdG1wRykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgbXBfY2xlYXIoJnRtcEcpOworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisKKyAgICAgLyogbm93IGdldCB8WHwgKi8KKyAgICAgaWYgKChlcnIgPSBtcF9pbml0KCZ0bXBYKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBtcF9jbGVhcigmdG1wRyk7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgIH0KKyAgICAgaWYgKChlcnIgPSBtcF9hYnMoWCwgJnRtcFgpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIG1wX2NsZWFyX211bHRpKCZ0bXBHLCAmdG1wWCwgTlVMTCk7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgIH0KKworICAgICAvKiBhbmQgbm93IGNvbXB1dGUgKDEvRykqKnxYfCBpbnN0ZWFkIG9mIEcqKlggW1ggPCAwXSAqLworICAgICBlcnIgPSBtcF9leHB0bW9kKCZ0bXBHLCAmdG1wWCwgUCwgWSk7CisgICAgIG1wX2NsZWFyX211bHRpKCZ0bXBHLCAmdG1wWCwgTlVMTCk7CisgICAgIHJldHVybiBlcnI7CisjZWxzZSAKKyAgICAgLyogbm8gaW52bW9kICovCisgICAgIHJldHVybiBNUF9WQUw7CisjZW5kaWYKKyAgfQorCisvKiBtb2RpZmllZCBkaW1pbmlzaGVkIHJhZGl4IHJlZHVjdGlvbiAqLworI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFX0lTXzJLX0xfQykgJiYgZGVmaW5lZChCTl9NUF9SRURVQ0VfMktfTF9DKSAmJiBkZWZpbmVkKEJOX1NfTVBfRVhQVE1PRF9DKQorICBpZiAobXBfcmVkdWNlX2lzXzJrX2woUCkgPT0gTVBfWUVTKSB7CisgICAgIHJldHVybiBzX21wX2V4cHRtb2QoRywgWCwgUCwgWSwgMSk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgQk5fTVBfRFJfSVNfTU9EVUxVU19DCisgIC8qIGlzIGl0IGEgRFIgbW9kdWx1cz8gKi8KKyAgZHIgPSBtcF9kcl9pc19tb2R1bHVzKFApOworI2Vsc2UKKyAgLyogZGVmYXVsdCB0byBubyAqLworICBkciA9IDA7CisjZW5kaWYKKworI2lmZGVmIEJOX01QX1JFRFVDRV9JU18yS19DCisgIC8qIGlmIG5vdCwgaXMgaXQgYSB1bnJlc3RyaWN0ZWQgRFIgbW9kdWx1cz8gKi8KKyAgaWYgKGRyID09IDApIHsKKyAgICAgZHIgPSBtcF9yZWR1Y2VfaXNfMmsoUCkgPDwgMTsKKyAgfQorI2VuZGlmCisgICAgCisgIC8qIGlmIHRoZSBtb2R1bHVzIGlzIG9kZCBvciBkciAhPSAwIHVzZSB0aGUgbW9udGdvbWVyeSBtZXRob2QgKi8KKyNpZmRlZiBCTl9NUF9FWFBUTU9EX0ZBU1RfQworICBpZiAobXBfaXNvZGQgKFApID09IDEgfHwgZHIgIT0gIDApIHsKKyAgICByZXR1cm4gbXBfZXhwdG1vZF9mYXN0IChHLCBYLCBQLCBZLCBkcik7CisgIH0gZWxzZSB7CisjZW5kaWYKKyNpZmRlZiBCTl9TX01QX0VYUFRNT0RfQworICAgIC8qIG90aGVyd2lzZSB1c2UgdGhlIGdlbmVyaWMgQmFycmV0dCByZWR1Y3Rpb24gdGVjaG5pcXVlICovCisgICAgcmV0dXJuIHNfbXBfZXhwdG1vZCAoRywgWCwgUCwgWSwgMCk7CisjZWxzZQorICAgIC8qIG5vIGV4cHRtb2QgZm9yIGV2ZW5zICovCisgICAgcmV0dXJuIE1QX1ZBTDsKKyNlbmRpZgorI2lmZGVmIEJOX01QX0VYUFRNT0RfRkFTVF9DCisgIH0KKyNlbmRpZgorfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9leHB0bW9kLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX2V4cHRtb2RfZmFzdC5jIGIvbGlidG9tbWF0aC9ibl9tcF9leHB0bW9kX2Zhc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmY4ZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9leHB0bW9kX2Zhc3QuYwpAQCAtMCwwICsxLDMyMSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9FWFBUTU9EX0ZBU1RfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY29tcHV0ZXMgWSA9PSBHKipYIG1vZCBQLCBIQUMgcHAuNjE2LCBBbGdvcml0aG0gMTQuODUKKyAqCisgKiBVc2VzIGEgbGVmdC10by1yaWdodCBrLWFyeSBzbGlkaW5nIHdpbmRvdyB0byBjb21wdXRlIHRoZSBtb2R1bGFyIGV4cG9uZW50aWF0aW9uLgorICogVGhlIHZhbHVlIG9mIGsgY2hhbmdlcyBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0aGUgZXhwb25lbnQuCisgKgorICogVXNlcyBNb250Z29tZXJ5IG9yIERpbWluaXNoZWQgUmFkaXggcmVkdWN0aW9uIFt3aGljaGV2ZXIgYXBwcm9wcmlhdGVdCisgKi8KKworI2lmZGVmIE1QX0xPV19NRU0KKyAgICNkZWZpbmUgVEFCX1NJWkUgMzIKKyNlbHNlCisgICAjZGVmaW5lIFRBQl9TSVpFIDI1NgorI2VuZGlmCisKK2ludCBtcF9leHB0bW9kX2Zhc3QgKG1wX2ludCAqIEcsIG1wX2ludCAqIFgsIG1wX2ludCAqIFAsIG1wX2ludCAqIFksIGludCByZWRtb2RlKQoreworICBtcF9pbnQgIE1bVEFCX1NJWkVdLCByZXM7CisgIG1wX2RpZ2l0IGJ1ZiwgbXA7CisgIGludCAgICAgZXJyLCBiaXRidWYsIGJpdGNweSwgYml0Y250LCBtb2RlLCBkaWdpZHgsIHgsIHksIHdpbnNpemU7CisKKyAgLyogdXNlIGEgcG9pbnRlciB0byB0aGUgcmVkdWN0aW9uIGFsZ29yaXRobS4gIFRoaXMgYWxsb3dzIHVzIHRvIHVzZQorICAgKiBvbmUgb2YgbWFueSByZWR1Y3Rpb24gYWxnb3JpdGhtcyB3aXRob3V0IG1vZGRpbmcgdGhlIGd1dHMgb2YKKyAgICogdGhlIGNvZGUgd2l0aCBpZiBzdGF0ZW1lbnRzIGV2ZXJ5d2hlcmUuCisgICAqLworICBpbnQgICAgICgqcmVkdXgpKG1wX2ludCosbXBfaW50KixtcF9kaWdpdCk7CisKKyAgLyogZmluZCB3aW5kb3cgc2l6ZSAqLworICB4ID0gbXBfY291bnRfYml0cyAoWCk7CisgIGlmICh4IDw9IDcpIHsKKyAgICB3aW5zaXplID0gMjsKKyAgfSBlbHNlIGlmICh4IDw9IDM2KSB7CisgICAgd2luc2l6ZSA9IDM7CisgIH0gZWxzZSBpZiAoeCA8PSAxNDApIHsKKyAgICB3aW5zaXplID0gNDsKKyAgfSBlbHNlIGlmICh4IDw9IDQ1MCkgeworICAgIHdpbnNpemUgPSA1OworICB9IGVsc2UgaWYgKHggPD0gMTMwMykgeworICAgIHdpbnNpemUgPSA2OworICB9IGVsc2UgaWYgKHggPD0gMzUyOSkgeworICAgIHdpbnNpemUgPSA3OworICB9IGVsc2UgeworICAgIHdpbnNpemUgPSA4OworICB9CisKKyNpZmRlZiBNUF9MT1dfTUVNCisgIGlmICh3aW5zaXplID4gNSkgeworICAgICB3aW5zaXplID0gNTsKKyAgfQorI2VuZGlmCisKKyAgLyogaW5pdCBNIGFycmF5ICovCisgIC8qIGluaXQgZmlyc3QgY2VsbCAqLworICBpZiAoKGVyciA9IG1wX2luaXQoJk1bMV0pKSAhPSBNUF9PS0FZKSB7CisgICAgIHJldHVybiBlcnI7CisgIH0KKworICAvKiBub3cgaW5pdCB0aGUgc2Vjb25kIGhhbGYgb2YgdGhlIGFycmF5ICovCisgIGZvciAoeCA9IDE8PCh3aW5zaXplLTEpOyB4IDwgKDEgPDwgd2luc2l6ZSk7IHgrKykgeworICAgIGlmICgoZXJyID0gbXBfaW5pdCgmTVt4XSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGZvciAoeSA9IDE8PCh3aW5zaXplLTEpOyB5IDwgeDsgeSsrKSB7CisgICAgICAgIG1wX2NsZWFyICgmTVt5XSk7CisgICAgICB9CisgICAgICBtcF9jbGVhcigmTVsxXSk7CisgICAgICByZXR1cm4gZXJyOworICAgIH0KKyAgfQorCisgIC8qIGRldGVybWluZSBhbmQgc2V0dXAgcmVkdWN0aW9uIGNvZGUgKi8KKyAgaWYgKHJlZG1vZGUgPT0gMCkgeworI2lmZGVmIEJOX01QX01PTlRHT01FUllfU0VUVVBfQyAgICAgCisgICAgIC8qIG5vdyBzZXR1cCBtb250Z29tZXJ5ICAqLworICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfc2V0dXAgKFAsICZtcCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfTTsKKyAgICAgfQorI2Vsc2UKKyAgICAgZXJyID0gTVBfVkFMOworICAgICBnb3RvIExCTF9NOworI2VuZGlmCisKKyAgICAgLyogYXV0b21hdGljYWxseSBwaWNrIHRoZSBjb21iYSBvbmUgaWYgYXZhaWxhYmxlIChzYXZlcyBxdWl0ZSBhIGZldyBjYWxscy9pZnMpICovCisjaWZkZWYgQk5fRkFTVF9NUF9NT05UR09NRVJZX1JFRFVDRV9DCisgICAgIGlmICgoKFAtPnVzZWQgKiAyICsgMSkgPCBNUF9XQVJSQVkpICYmCisgICAgICAgICAgUC0+dXNlZCA8ICgxIDw8ICgoQ0hBUl9CSVQgKiBzaXplb2YgKG1wX3dvcmQpKSAtICgyICogRElHSVRfQklUKSkpKSB7CisgICAgICAgIHJlZHV4ID0gZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZTsKKyAgICAgfSBlbHNlIAorI2VuZGlmCisgICAgIHsKKyNpZmRlZiBCTl9NUF9NT05UR09NRVJZX1JFRFVDRV9DCisgICAgICAgIC8qIHVzZSBzbG93ZXIgYmFzZWxpbmUgTW9udGdvbWVyeSBtZXRob2QgKi8KKyAgICAgICAgcmVkdXggPSBtcF9tb250Z29tZXJ5X3JlZHVjZTsKKyNlbHNlCisgICAgICAgIGVyciA9IE1QX1ZBTDsKKyAgICAgICAgZ290byBMQkxfTTsKKyNlbmRpZgorICAgICB9CisgIH0gZWxzZSBpZiAocmVkbW9kZSA9PSAxKSB7CisjaWYgZGVmaW5lZChCTl9NUF9EUl9TRVRVUF9DKSAmJiBkZWZpbmVkKEJOX01QX0RSX1JFRFVDRV9DKQorICAgICAvKiBzZXR1cCBEUiByZWR1Y3Rpb24gZm9yIG1vZHVsaSBvZiB0aGUgZm9ybSBCKiprIC0gYiAqLworICAgICBtcF9kcl9zZXR1cChQLCAmbXApOworICAgICByZWR1eCA9IG1wX2RyX3JlZHVjZTsKKyNlbHNlCisgICAgIGVyciA9IE1QX1ZBTDsKKyAgICAgZ290byBMQkxfTTsKKyNlbmRpZgorICB9IGVsc2UgeworI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0MpICYmIGRlZmluZWQoQk5fTVBfUkVEVUNFXzJLX0MpCisgICAgIC8qIHNldHVwIERSIHJlZHVjdGlvbiBmb3IgbW9kdWxpIG9mIHRoZSBmb3JtIDIqKmsgLSBiICovCisgICAgIGlmICgoZXJyID0gbXBfcmVkdWNlXzJrX3NldHVwKFAsICZtcCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfTTsKKyAgICAgfQorICAgICByZWR1eCA9IG1wX3JlZHVjZV8yazsKKyNlbHNlCisgICAgIGVyciA9IE1QX1ZBTDsKKyAgICAgZ290byBMQkxfTTsKKyNlbmRpZgorICB9CisKKyAgLyogc2V0dXAgcmVzdWx0ICovCisgIGlmICgoZXJyID0gbXBfaW5pdCAoJnJlcykpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9NOworICB9CisKKyAgLyogY3JlYXRlIE0gdGFibGUKKyAgICoKKworICAgKgorICAgKiBUaGUgZmlyc3QgaGFsZiBvZiB0aGUgdGFibGUgaXMgbm90IGNvbXB1dGVkIHRob3VnaCBhY2NlcHQgZm9yIE1bMF0gYW5kIE1bMV0KKyAgICovCisKKyAgaWYgKHJlZG1vZGUgPT0gMCkgeworI2lmZGVmIEJOX01QX01PTlRHT01FUllfQ0FMQ19OT1JNQUxJWkFUSU9OX0MKKyAgICAgLyogbm93IHdlIG5lZWQgUiBtb2QgbSAqLworICAgICBpZiAoKGVyciA9IG1wX21vbnRnb21lcnlfY2FsY19ub3JtYWxpemF0aW9uICgmcmVzLCBQKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgfQorI2Vsc2UgCisgICAgIGVyciA9IE1QX1ZBTDsKKyAgICAgZ290byBMQkxfUkVTOworI2VuZGlmCisKKyAgICAgLyogbm93IHNldCBNWzFdIHRvIEcgKiBSIG1vZCBtICovCisgICAgIGlmICgoZXJyID0gbXBfbXVsbW9kIChHLCAmcmVzLCBQLCAmTVsxXSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIExCTF9SRVM7CisgICAgIH0KKyAgfSBlbHNlIHsKKyAgICAgbXBfc2V0KCZyZXMsIDEpOworICAgICBpZiAoKGVyciA9IG1wX21vZChHLCBQLCAmTVsxXSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfUkVTOworICAgICB9CisgIH0KKworICAvKiBjb21wdXRlIHRoZSB2YWx1ZSBhdCBNWzE8PCh3aW5zaXplLTEpXSBieSBzcXVhcmluZyBNWzFdICh3aW5zaXplLTEpIHRpbWVzICovCisgIGlmICgoZXJyID0gbXBfY29weSAoJk1bMV0sICZNWzEgPDwgKHdpbnNpemUgLSAxKV0pKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfUkVTOworICB9CisKKyAgZm9yICh4ID0gMDsgeCA8ICh3aW5zaXplIC0gMSk7IHgrKykgeworICAgIGlmICgoZXJyID0gbXBfc3FyICgmTVsxIDw8ICh3aW5zaXplIC0gMSldLCAmTVsxIDw8ICh3aW5zaXplIC0gMSldKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfUkVTOworICAgIH0KKyAgICBpZiAoKGVyciA9IHJlZHV4ICgmTVsxIDw8ICh3aW5zaXplIC0gMSldLCBQLCBtcCkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICB9CisgIH0KKworICAvKiBjcmVhdGUgdXBwZXIgdGFibGUgKi8KKyAgZm9yICh4ID0gKDEgPDwgKHdpbnNpemUgLSAxKSkgKyAxOyB4IDwgKDEgPDwgd2luc2l6ZSk7IHgrKykgeworICAgIGlmICgoZXJyID0gbXBfbXVsICgmTVt4IC0gMV0sICZNWzFdLCAmTVt4XSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICB9CisgICAgaWYgKChlcnIgPSByZWR1eCAoJk1beF0sIFAsIG1wKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfUkVTOworICAgIH0KKyAgfQorCisgIC8qIHNldCBpbml0aWFsIG1vZGUgYW5kIGJpdCBjbnQgKi8KKyAgbW9kZSAgID0gMDsKKyAgYml0Y250ID0gMTsKKyAgYnVmICAgID0gMDsKKyAgZGlnaWR4ID0gWC0+dXNlZCAtIDE7CisgIGJpdGNweSA9IDA7CisgIGJpdGJ1ZiA9IDA7CisKKyAgZm9yICg7OykgeworICAgIC8qIGdyYWIgbmV4dCBkaWdpdCBhcyByZXF1aXJlZCAqLworICAgIGlmICgtLWJpdGNudCA9PSAwKSB7CisgICAgICAvKiBpZiBkaWdpZHggPT0gLTEgd2UgYXJlIG91dCBvZiBkaWdpdHMgc28gYnJlYWsgKi8KKyAgICAgIGlmIChkaWdpZHggPT0gLTEpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICAvKiByZWFkIG5leHQgZGlnaXQgYW5kIHJlc2V0IGJpdGNudCAqLworICAgICAgYnVmICAgID0gWC0+ZHBbZGlnaWR4LS1dOworICAgICAgYml0Y250ID0gKGludClESUdJVF9CSVQ7CisgICAgfQorCisgICAgLyogZ3JhYiB0aGUgbmV4dCBtc2IgZnJvbSB0aGUgZXhwb25lbnQgKi8KKyAgICB5ICAgICA9IChtcF9kaWdpdCkoYnVmID4+IChESUdJVF9CSVQgLSAxKSkgJiAxOworICAgIGJ1ZiA8PD0gKG1wX2RpZ2l0KTE7CisKKyAgICAvKiBpZiB0aGUgYml0IGlzIHplcm8gYW5kIG1vZGUgPT0gMCB0aGVuIHdlIGlnbm9yZSBpdAorICAgICAqIFRoZXNlIHJlcHJlc2VudCB0aGUgbGVhZGluZyB6ZXJvIGJpdHMgYmVmb3JlIHRoZSBmaXJzdCAxIGJpdAorICAgICAqIGluIHRoZSBleHBvbmVudC4gIFRlY2huaWNhbGx5IHRoaXMgb3B0IGlzIG5vdCByZXF1aXJlZCBidXQgaXQKKyAgICAgKiBkb2VzIGxvd2VyIHRoZSAjIG9mIHRyaXZpYWwgc3F1YXJpbmcvcmVkdWN0aW9ucyB1c2VkCisgICAgICovCisgICAgaWYgKG1vZGUgPT0gMCAmJiB5ID09IDApIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIGlmIHRoZSBiaXQgaXMgemVybyBhbmQgbW9kZSA9PSAxIHRoZW4gd2Ugc3F1YXJlICovCisgICAgaWYgKG1vZGUgPT0gMSAmJiB5ID09IDApIHsKKyAgICAgIGlmICgoZXJyID0gbXBfc3FyICgmcmVzLCAmcmVzKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9SRVM7CisgICAgICB9CisgICAgICBpZiAoKGVyciA9IHJlZHV4ICgmcmVzLCBQLCBtcCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgfQorICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogZWxzZSB3ZSBhZGQgaXQgdG8gdGhlIHdpbmRvdyAqLworICAgIGJpdGJ1ZiB8PSAoeSA8PCAod2luc2l6ZSAtICsrYml0Y3B5KSk7CisgICAgbW9kZSAgICA9IDI7CisKKyAgICBpZiAoYml0Y3B5ID09IHdpbnNpemUpIHsKKyAgICAgIC8qIG9rIHdpbmRvdyBpcyBmaWxsZWQgc28gc3F1YXJlIGFzIHJlcXVpcmVkIGFuZCBtdWx0aXBseSAgKi8KKyAgICAgIC8qIHNxdWFyZSBmaXJzdCAqLworICAgICAgZm9yICh4ID0gMDsgeCA8IHdpbnNpemU7IHgrKykgeworICAgICAgICBpZiAoKGVyciA9IG1wX3NxciAoJnJlcywgJnJlcykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgICBnb3RvIExCTF9SRVM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChlcnIgPSByZWR1eCAoJnJlcywgUCwgbXApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIHRoZW4gbXVsdGlwbHkgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsICgmcmVzLCAmTVtiaXRidWZdLCAmcmVzKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9SRVM7CisgICAgICB9CisgICAgICBpZiAoKGVyciA9IHJlZHV4ICgmcmVzLCBQLCBtcCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgfQorCisgICAgICAvKiBlbXB0eSB3aW5kb3cgYW5kIHJlc2V0ICovCisgICAgICBiaXRjcHkgPSAwOworICAgICAgYml0YnVmID0gMDsKKyAgICAgIG1vZGUgICA9IDE7CisgICAgfQorICB9CisKKyAgLyogaWYgYml0cyByZW1haW4gdGhlbiBzcXVhcmUvbXVsdGlwbHkgKi8KKyAgaWYgKG1vZGUgPT0gMiAmJiBiaXRjcHkgPiAwKSB7CisgICAgLyogc3F1YXJlIHRoZW4gbXVsdGlwbHkgaWYgdGhlIGJpdCBpcyBzZXQgKi8KKyAgICBmb3IgKHggPSAwOyB4IDwgYml0Y3B5OyB4KyspIHsKKyAgICAgIGlmICgoZXJyID0gbXBfc3FyICgmcmVzLCAmcmVzKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9SRVM7CisgICAgICB9CisgICAgICBpZiAoKGVyciA9IHJlZHV4ICgmcmVzLCBQLCBtcCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgfQorCisgICAgICAvKiBnZXQgbmV4dCBiaXQgb2YgdGhlIHdpbmRvdyAqLworICAgICAgYml0YnVmIDw8PSAxOworICAgICAgaWYgKChiaXRidWYgJiAoMSA8PCB3aW5zaXplKSkgIT0gMCkgeworICAgICAgICAvKiB0aGVuIG11bHRpcGx5ICovCisgICAgICAgIGlmICgoZXJyID0gbXBfbXVsICgmcmVzLCAmTVsxXSwgJnJlcykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgICBnb3RvIExCTF9SRVM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChlcnIgPSByZWR1eCAoJnJlcywgUCwgbXApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKHJlZG1vZGUgPT0gMCkgeworICAgICAvKiBmaXh1cCByZXN1bHQgaWYgTW9udGdvbWVyeSByZWR1Y3Rpb24gaXMgdXNlZAorICAgICAgKiByZWNhbGwgdGhhdCBhbnkgdmFsdWUgaW4gYSBNb250Z29tZXJ5IHN5c3RlbSBpcworICAgICAgKiBhY3R1YWxseSBtdWx0aXBsaWVkIGJ5IFIgbW9kIG4uICBTbyB3ZSBoYXZlCisgICAgICAqIHRvIHJlZHVjZSBvbmUgbW9yZSB0aW1lIHRvIGNhbmNlbCBvdXQgdGhlIGZhY3RvcgorICAgICAgKiBvZiBSLgorICAgICAgKi8KKyAgICAgaWYgKChlcnIgPSByZWR1eCgmcmVzLCBQLCBtcCkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIExCTF9SRVM7CisgICAgIH0KKyAgfQorCisgIC8qIHN3YXAgcmVzIHdpdGggWSAqLworICBtcF9leGNoICgmcmVzLCBZKTsKKyAgZXJyID0gTVBfT0tBWTsKK0xCTF9SRVM6bXBfY2xlYXIgKCZyZXMpOworTEJMX006CisgIG1wX2NsZWFyKCZNWzFdKTsKKyAgZm9yICh4ID0gMTw8KHdpbnNpemUtMSk7IHggPCAoMSA8PCB3aW5zaXplKTsgeCsrKSB7CisgICAgbXBfY2xlYXIgKCZNW3hdKTsKKyAgfQorICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9leHB0bW9kX2Zhc3QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfZXh0ZXVjbGlkLmMgYi9saWJ0b21tYXRoL2JuX21wX2V4dGV1Y2xpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1Y2NiYTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2V4dGV1Y2xpZC5jCkBAIC0wLDAgKzEsODIgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRVhURVVDTElEX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEV4dGVuZGVkIGV1Y2xpZGVhbiBhbGdvcml0aG0gb2YgKGEsIGIpIHByb2R1Y2VzIAorICAgYSp1MSArIGIqdTIgPSB1MworICovCitpbnQgbXBfZXh0ZXVjbGlkKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKlUxLCBtcF9pbnQgKlUyLCBtcF9pbnQgKlUzKQoreworICAgbXBfaW50IHUxLHUyLHUzLHYxLHYyLHYzLHQxLHQyLHQzLHEsdG1wOworICAgaW50IGVycjsKKworICAgaWYgKChlcnIgPSBtcF9pbml0X211bHRpKCZ1MSwgJnUyLCAmdTMsICZ2MSwgJnYyLCAmdjMsICZ0MSwgJnQyLCAmdDMsICZxLCAmdG1wLCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgLyogaW5pdGlhbGl6ZSwgKHUxLHUyLHUzKSA9ICgxLDAsYSkgKi8KKyAgIG1wX3NldCgmdTEsIDEpOworICAgaWYgKChlcnIgPSBtcF9jb3B5KGEsICZ1MykpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9CisKKyAgIC8qIGluaXRpYWxpemUsICh2MSx2Mix2MykgPSAoMCwxLGIpICovCisgICBtcF9zZXQoJnYyLCAxKTsKKyAgIGlmICgoZXJyID0gbXBfY29weShiLCAmdjMpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQorCisgICAvKiBsb29wIHdoaWxlIHYzICE9IDAgKi8KKyAgIHdoaWxlIChtcF9pc3plcm8oJnYzKSA9PSBNUF9OTykgeworICAgICAgIC8qIHEgPSB1My92MyAqLworICAgICAgIGlmICgoZXJyID0gbXBfZGl2KCZ1MywgJnYzLCAmcSwgTlVMTCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9CisKKyAgICAgICAvKiAodDEsdDIsdDMpID0gKHUxLHUyLHUzKSAtICh2MSx2Mix2MylxICovCisgICAgICAgaWYgKChlcnIgPSBtcF9tdWwoJnYxLCAmcSwgJnRtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KKyAgICAgICBpZiAoKGVyciA9IG1wX3N1YigmdTEsICZ0bXAsICZ0MSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQorICAgICAgIGlmICgoZXJyID0gbXBfbXVsKCZ2MiwgJnEsICZ0bXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9CisgICAgICAgaWYgKChlcnIgPSBtcF9zdWIoJnUyLCAmdG1wLCAmdDIpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KKyAgICAgICBpZiAoKGVyciA9IG1wX211bCgmdjMsICZxLCAmdG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQorICAgICAgIGlmICgoZXJyID0gbXBfc3ViKCZ1MywgJnRtcCwgJnQzKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9CisKKyAgICAgICAvKiAodTEsdTIsdTMpID0gKHYxLHYyLHYzKSAqLworICAgICAgIGlmICgoZXJyID0gbXBfY29weSgmdjEsICZ1MSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9CisgICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KCZ2MiwgJnUyKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KKyAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoJnYzLCAmdTMpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQorCisgICAgICAgLyogKHYxLHYyLHYzKSA9ICh0MSx0Mix0MykgKi8KKyAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoJnQxLCAmdjEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQorICAgICAgIGlmICgoZXJyID0gbXBfY29weSgmdDIsICZ2MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9CisgICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KCZ0MywgJnYzKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KKyAgIH0KKworICAgLyogbWFrZSBzdXJlIFUzID49IDAgKi8KKyAgIGlmICh1My5zaWduID09IE1QX05FRykgeworICAgICAgbXBfbmVnKCZ1MSwgJnUxKTsKKyAgICAgIG1wX25lZygmdTIsICZ1Mik7CisgICAgICBtcF9uZWcoJnUzLCAmdTMpOworICAgfQorCisgICAvKiBjb3B5IHJlc3VsdCBvdXQgKi8KKyAgIGlmIChVMSAhPSBOVUxMKSB7IG1wX2V4Y2goVTEsICZ1MSk7IH0KKyAgIGlmIChVMiAhPSBOVUxMKSB7IG1wX2V4Y2goVTIsICZ1Mik7IH0KKyAgIGlmIChVMyAhPSBOVUxMKSB7IG1wX2V4Y2goVTMsICZ1Myk7IH0KKworICAgZXJyID0gTVBfT0tBWTsKK19FUlI6IG1wX2NsZWFyX211bHRpKCZ1MSwgJnUyLCAmdTMsICZ2MSwgJnYyLCAmdjMsICZ0MSwgJnQyLCAmdDMsICZxLCAmdG1wLCBOVUxMKTsKKyAgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9leHRldWNsaWQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfZnJlYWQuYyBiL2xpYnRvbW1hdGgvYm5fbXBfZnJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2JkMDhkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9mcmVhZC5jCkBAIC0wLDAgKzEsNjcgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRlJFQURfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogcmVhZCBhIGJpZ2ludCBmcm9tIGEgZmlsZSBzdHJlYW0gaW4gQVNDSUkgKi8KK2ludCBtcF9mcmVhZChtcF9pbnQgKmEsIGludCByYWRpeCwgRklMRSAqc3RyZWFtKQoreworICAgaW50IGVyciwgY2gsIG5lZywgeTsKKyAgIAorICAgLyogY2xlYXIgYSAqLworICAgbXBfemVybyhhKTsKKyAgIAorICAgLyogaWYgZmlyc3QgZGlnaXQgaXMgLSB0aGVuIHNldCBuZWdhdGl2ZSAqLworICAgY2ggPSBmZ2V0YyhzdHJlYW0pOworICAgaWYgKGNoID09ICctJykgeworICAgICAgbmVnID0gTVBfTkVHOworICAgICAgY2ggPSBmZ2V0YyhzdHJlYW0pOworICAgfSBlbHNlIHsKKyAgICAgIG5lZyA9IE1QX1pQT1M7CisgICB9CisgICAKKyAgIGZvciAoOzspIHsKKyAgICAgIC8qIGZpbmQgeSBpbiB0aGUgcmFkaXggbWFwICovCisgICAgICBmb3IgKHkgPSAwOyB5IDwgcmFkaXg7IHkrKykgeworICAgICAgICAgIGlmIChtcF9zX3JtYXBbeV0gPT0gY2gpIHsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoeSA9PSByYWRpeCkgeworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qIHNoaWZ0IHVwIGFuZCBhZGQgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsX2QoYSwgcmFkaXgsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgICAgaWYgKChlcnIgPSBtcF9hZGRfZChhLCB5LCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgICAgIAorICAgICAgY2ggPSBmZ2V0YyhzdHJlYW0pOworICAgfQorICAgaWYgKG1wX2NtcF9kKGEsIDApICE9IE1QX0VRKSB7CisgICAgICBhLT5zaWduID0gbmVnOworICAgfQorICAgCisgICByZXR1cm4gTVBfT0tBWTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZnJlYWQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfZndyaXRlLmMgYi9saWJ0b21tYXRoL2JuX21wX2Z3cml0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNmY5MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2Z3cml0ZS5jCkBAIC0wLDAgKzEsNTIgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRldSSVRFX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKK2ludCBtcF9md3JpdGUobXBfaW50ICphLCBpbnQgcmFkaXgsIEZJTEUgKnN0cmVhbSkKK3sKKyAgIGNoYXIgKmJ1ZjsKKyAgIGludCBlcnIsIGxlbiwgeDsKKyAgIAorICAgaWYgKChlcnIgPSBtcF9yYWRpeF9zaXplKGEsIHJhZGl4LCAmbGVuKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKworICAgYnVmID0gT1BUX0NBU1QoY2hhcikgWE1BTExPQyAobGVuKTsKKyAgIGlmIChidWYgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIE1QX01FTTsKKyAgIH0KKyAgIAorICAgaWYgKChlcnIgPSBtcF90b3JhZGl4KGEsIGJ1ZiwgcmFkaXgpKSAhPSBNUF9PS0FZKSB7CisgICAgICBYRlJFRSAoYnVmKTsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisgICAKKyAgIGZvciAoeCA9IDA7IHggPCBsZW47IHgrKykgeworICAgICAgIGlmIChmcHV0YyhidWZbeF0sIHN0cmVhbSkgPT0gRU9GKSB7CisgICAgICAgICAgWEZSRUUgKGJ1Zik7CisgICAgICAgICAgcmV0dXJuIE1QX1ZBTDsKKyAgICAgICB9CisgICB9CisgICAKKyAgIFhGUkVFIChidWYpOworICAgcmV0dXJuIE1QX09LQVk7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2Z3cml0ZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9nY2QuYyBiL2xpYnRvbW1hdGgvYm5fbXBfZ2NkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmNmIwMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfZ2NkLmMKQEAgLTAsMCArMSwxMDUgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfR0NEX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEdyZWF0ZXN0IENvbW1vbiBEaXZpc29yIHVzaW5nIHRoZSBiaW5hcnkgbWV0aG9kICovCitpbnQgbXBfZ2NkIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBtcF9pbnQgIHUsIHY7CisgIGludCAgICAgaywgdV9sc2IsIHZfbHNiLCByZXM7CisKKyAgLyogZWl0aGVyIHplcm8gdGhhbiBnY2QgaXMgdGhlIGxhcmdlc3QgKi8KKyAgaWYgKG1wX2lzemVybyAoYSkgPT0gTVBfWUVTKSB7CisgICAgcmV0dXJuIG1wX2FicyAoYiwgYyk7CisgIH0KKyAgaWYgKG1wX2lzemVybyAoYikgPT0gTVBfWUVTKSB7CisgICAgcmV0dXJuIG1wX2FicyAoYSwgYyk7CisgIH0KKworICAvKiBnZXQgY29waWVzIG9mIGEgYW5kIGIgd2UgY2FuIG1vZGlmeSAqLworICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnUsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmdiwgYikpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9VOworICB9CisKKyAgLyogbXVzdCBiZSBwb3NpdGl2ZSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgYWxnb3JpdGhtICovCisgIHUuc2lnbiA9IHYuc2lnbiA9IE1QX1pQT1M7CisKKyAgLyogQjEuICBGaW5kIHRoZSBjb21tb24gcG93ZXIgb2YgdHdvIGZvciB1IGFuZCB2ICovCisgIHVfbHNiID0gbXBfY250X2xzYigmdSk7CisgIHZfbHNiID0gbXBfY250X2xzYigmdik7CisgIGsgICAgID0gTUlOKHVfbHNiLCB2X2xzYik7CisKKyAgaWYgKGsgPiAwKSB7CisgICAgIC8qIGRpdmlkZSB0aGUgcG93ZXIgb2YgdHdvIG91dCAqLworICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yZCgmdSwgaywgJnUsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1Y7CisgICAgIH0KKworICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yZCgmdiwgaywgJnYsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1Y7CisgICAgIH0KKyAgfQorCisgIC8qIGRpdmlkZSBhbnkgcmVtYWluaW5nIGZhY3RvcnMgb2YgdHdvIG91dCAqLworICBpZiAodV9sc2IgIT0gaykgeworICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yZCgmdSwgdV9sc2IgLSBrLCAmdSwgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfVjsKKyAgICAgfQorICB9CisKKyAgaWYgKHZfbHNiICE9IGspIHsKKyAgICAgaWYgKChyZXMgPSBtcF9kaXZfMmQoJnYsIHZfbHNiIC0gaywgJnYsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1Y7CisgICAgIH0KKyAgfQorCisgIHdoaWxlIChtcF9pc3plcm8oJnYpID09IDApIHsKKyAgICAgLyogbWFrZSBzdXJlIHYgaXMgdGhlIGxhcmdlc3QgKi8KKyAgICAgaWYgKG1wX2NtcF9tYWcoJnUsICZ2KSA9PSBNUF9HVCkgeworICAgICAgICAvKiBzd2FwIHUgYW5kIHYgdG8gbWFrZSBzdXJlIHYgaXMgPj0gdSAqLworICAgICAgICBtcF9leGNoKCZ1LCAmdik7CisgICAgIH0KKyAgICAgCisgICAgIC8qIHN1YnRyYWN0IHNtYWxsZXN0IGZyb20gbGFyZ2VzdCAqLworICAgICBpZiAoKHJlcyA9IHNfbXBfc3ViKCZ2LCAmdSwgJnYpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1Y7CisgICAgIH0KKyAgICAgCisgICAgIC8qIERpdmlkZSBvdXQgYWxsIGZhY3RvcnMgb2YgdHdvICovCisgICAgIGlmICgocmVzID0gbXBfZGl2XzJkKCZ2LCBtcF9jbnRfbHNiKCZ2KSwgJnYsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1Y7CisgICAgIH0gCisgIH0gCisKKyAgLyogbXVsdGlwbHkgYnkgMioqayB3aGljaCB3ZSBkaXZpZGVkIG91dCBhdCB0aGUgYmVnaW5uaW5nICovCisgIGlmICgocmVzID0gbXBfbXVsXzJkICgmdSwgaywgYykpICE9IE1QX09LQVkpIHsKKyAgICAgZ290byBMQkxfVjsKKyAgfQorICBjLT5zaWduID0gTVBfWlBPUzsKKyAgcmVzID0gTVBfT0tBWTsKK0xCTF9WOm1wX2NsZWFyICgmdSk7CitMQkxfVTptcF9jbGVhciAoJnYpOworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZ2NkLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX2dldF9pbnQuYyBiL2xpYnRvbW1hdGgvYm5fbXBfZ2V0X2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NDhkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2dldF9pbnQuYwpAQCAtMCwwICsxLDQ1IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0dFVF9JTlRfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZ2V0IHRoZSBsb3dlciAzMi1iaXRzIG9mIGFuIG1wX2ludCAqLwordW5zaWduZWQgbG9uZyBtcF9nZXRfaW50KG1wX2ludCAqIGEpIAoreworICBpbnQgaTsKKyAgdW5zaWduZWQgbG9uZyByZXM7CisKKyAgaWYgKGEtPnVzZWQgPT0gMCkgeworICAgICByZXR1cm4gMDsKKyAgfQorCisgIC8qIGdldCBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBsc2Igd2UgaGF2ZSB0byByZWFkICovCisgIGkgPSBNSU4oYS0+dXNlZCwoaW50KSgoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKkNIQVJfQklUK0RJR0lUX0JJVC0xKS9ESUdJVF9CSVQpKS0xOworCisgIC8qIGdldCBtb3N0IHNpZ25pZmljYW50IGRpZ2l0IG9mIHJlc3VsdCAqLworICByZXMgPSBESUdJVChhLGkpOworICAgCisgIHdoaWxlICgtLWkgPj0gMCkgeworICAgIHJlcyA9IChyZXMgPDwgRElHSVRfQklUKSB8IERJR0lUKGEsaSk7CisgIH0KKworICAvKiBmb3JjZSByZXN1bHQgdG8gMzItYml0cyBhbHdheXMgc28gaXQgaXMgY29uc2lzdGVudCBvbiBub24gMzItYml0IHBsYXRmb3JtcyAqLworICByZXR1cm4gcmVzICYgMHhGRkZGRkZGRlVMOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZ2V0X2ludC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9ncm93LmMgYi9saWJ0b21tYXRoL2JuX21wX2dyb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDUwMDU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9ncm93LmMKQEAgLTAsMCArMSw1NyBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9HUk9XX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGdyb3cgYXMgcmVxdWlyZWQgKi8KK2ludCBtcF9ncm93IChtcF9pbnQgKiBhLCBpbnQgc2l6ZSkKK3sKKyAgaW50ICAgICBpOworICBtcF9kaWdpdCAqdG1wOworCisgIC8qIGlmIHRoZSBhbGxvYyBzaXplIGlzIHNtYWxsZXIgYWxsb2MgbW9yZSByYW0gKi8KKyAgaWYgKGEtPmFsbG9jIDwgc2l6ZSkgeworICAgIC8qIGVuc3VyZSB0aGVyZSBhcmUgYWx3YXlzIGF0IGxlYXN0IE1QX1BSRUMgZGlnaXRzIGV4dHJhIG9uIHRvcCAqLworICAgIHNpemUgKz0gKE1QX1BSRUMgKiAyKSAtIChzaXplICUgTVBfUFJFQyk7CisKKyAgICAvKiByZWFsbG9jYXRlIHRoZSBhcnJheSBhLT5kcAorICAgICAqCisgICAgICogV2Ugc3RvcmUgdGhlIHJldHVybiBpbiBhIHRlbXBvcmFyeSB2YXJpYWJsZQorICAgICAqIGluIGNhc2UgdGhlIG9wZXJhdGlvbiBmYWlsZWQgd2UgZG9uJ3Qgd2FudAorICAgICAqIHRvIG92ZXJ3cml0ZSB0aGUgZHAgbWVtYmVyIG9mIGEuCisgICAgICovCisgICAgdG1wID0gT1BUX0NBU1QobXBfZGlnaXQpIFhSRUFMTE9DIChhLT5kcCwgc2l6ZW9mIChtcF9kaWdpdCkgKiBzaXplKTsKKyAgICBpZiAodG1wID09IE5VTEwpIHsKKyAgICAgIC8qIHJlYWxsb2NhdGlvbiBmYWlsZWQgYnV0ICJhIiBpcyBzdGlsbCB2YWxpZCBbY2FuIGJlIGZyZWVkXSAqLworICAgICAgcmV0dXJuIE1QX01FTTsKKyAgICB9CisKKyAgICAvKiByZWFsbG9jYXRpb24gc3VjY2VlZGVkIHNvIHNldCBhLT5kcCAqLworICAgIGEtPmRwID0gdG1wOworCisgICAgLyogemVybyBleGNlc3MgZGlnaXRzICovCisgICAgaSAgICAgICAgPSBhLT5hbGxvYzsKKyAgICBhLT5hbGxvYyA9IHNpemU7CisgICAgZm9yICg7IGkgPCBhLT5hbGxvYzsgaSsrKSB7CisgICAgICBhLT5kcFtpXSA9IDA7CisgICAgfQorICB9CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZ3Jvdy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9pbml0LmMgYi9saWJ0b21tYXRoL2JuX21wX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjVlYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9pbml0LmMKQEAgLTAsMCArMSw0NiBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9JTklUX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGluaXQgYSBuZXcgbXBfaW50ICovCitpbnQgbXBfaW5pdCAobXBfaW50ICogYSkKK3sKKyAgaW50IGk7CisKKyAgLyogYWxsb2NhdGUgbWVtb3J5IHJlcXVpcmVkIGFuZCBjbGVhciBpdCAqLworICBhLT5kcCA9IE9QVF9DQVNUKG1wX2RpZ2l0KSBYTUFMTE9DIChzaXplb2YgKG1wX2RpZ2l0KSAqIE1QX1BSRUMpOworICBpZiAoYS0+ZHAgPT0gTlVMTCkgeworICAgIHJldHVybiBNUF9NRU07CisgIH0KKworICAvKiBzZXQgdGhlIGRpZ2l0cyB0byB6ZXJvICovCisgIGZvciAoaSA9IDA7IGkgPCBNUF9QUkVDOyBpKyspIHsKKyAgICAgIGEtPmRwW2ldID0gMDsKKyAgfQorCisgIC8qIHNldCB0aGUgdXNlZCB0byB6ZXJvLCBhbGxvY2F0ZWQgZGlnaXRzIHRvIHRoZSBkZWZhdWx0IHByZWNpc2lvbgorICAgKiBhbmQgc2lnbiB0byBwb3NpdGl2ZSAqLworICBhLT51c2VkICA9IDA7CisgIGEtPmFsbG9jID0gTVBfUFJFQzsKKyAgYS0+c2lnbiAgPSBNUF9aUE9TOworCisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfaW5pdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9pbml0X2NvcHkuYyBiL2xpYnRvbW1hdGgvYm5fbXBfaW5pdF9jb3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU3MzI5YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfaW5pdF9jb3B5LmMKQEAgLTAsMCArMSwzMiBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9JTklUX0NPUFlfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY3JlYXRlcyAiYSIgdGhlbiBjb3BpZXMgYiBpbnRvIGl0ICovCitpbnQgbXBfaW5pdF9jb3B5IChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQoreworICBpbnQgICAgIHJlczsKKworICBpZiAoKHJlcyA9IG1wX2luaXQgKGEpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorICByZXR1cm4gbXBfY29weSAoYiwgYSk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9pbml0X2NvcHkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfaW5pdF9tdWx0aS5jIGIvbGlidG9tbWF0aC9ibl9tcF9pbml0X211bHRpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5MmY0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfaW5pdF9tdWx0aS5jCkBAIC0wLDAgKzEsNTkgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfSU5JVF9NVUxUSV9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitpbnQgbXBfaW5pdF9tdWx0aShtcF9pbnQgKm1wLCAuLi4pIAoreworICAgIG1wX2VyciByZXMgPSBNUF9PS0FZOyAgICAgIC8qIEFzc3VtZSBvayB1bnRpbCBwcm92ZW4gb3RoZXJ3aXNlICovCisgICAgaW50IG4gPSAwOyAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIG9rIGluaXRzICovCisgICAgbXBfaW50KiBjdXJfYXJnID0gbXA7CisgICAgdmFfbGlzdCBhcmdzOworCisgICAgdmFfc3RhcnQoYXJncywgbXApOyAgICAgICAgLyogaW5pdCBhcmdzIHRvIG5leHQgYXJndW1lbnQgZnJvbSBjYWxsZXIgKi8KKyAgICB3aGlsZSAoY3VyX2FyZyAhPSBOVUxMKSB7CisgICAgICAgIGlmIChtcF9pbml0KGN1cl9hcmcpICE9IE1QX09LQVkpIHsKKyAgICAgICAgICAgIC8qIE9vcHMgLSBlcnJvciEgQmFjay10cmFjayBhbmQgbXBfY2xlYXIgd2hhdCB3ZSBhbHJlYWR5CisgICAgICAgICAgICAgICBzdWNjZWVkZWQgaW4gaW5pdC1pbmcsIHRoZW4gcmV0dXJuIGVycm9yLgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHZhX2xpc3QgY2xlYW5fYXJnczsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyogZW5kIHRoZSBjdXJyZW50IGxpc3QgKi8KKyAgICAgICAgICAgIHZhX2VuZChhcmdzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyogbm93IHN0YXJ0IGNsZWFuaW5nIHVwICovICAgICAgICAgICAgCisgICAgICAgICAgICBjdXJfYXJnID0gbXA7CisgICAgICAgICAgICB2YV9zdGFydChjbGVhbl9hcmdzLCBtcCk7CisgICAgICAgICAgICB3aGlsZSAobi0tKSB7CisgICAgICAgICAgICAgICAgbXBfY2xlYXIoY3VyX2FyZyk7CisgICAgICAgICAgICAgICAgY3VyX2FyZyA9IHZhX2FyZyhjbGVhbl9hcmdzLCBtcF9pbnQqKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhX2VuZChjbGVhbl9hcmdzKTsKKyAgICAgICAgICAgIHJlcyA9IE1QX01FTTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG4rKzsKKyAgICAgICAgY3VyX2FyZyA9IHZhX2FyZyhhcmdzLCBtcF9pbnQqKTsKKyAgICB9CisgICAgdmFfZW5kKGFyZ3MpOworICAgIHJldHVybiByZXM7ICAgICAgICAgICAgICAgIC8qIEFzc3VtZWQgb2ssIGlmIGVycm9yIGZsYWdnZWQgYWJvdmUuICovCit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2luaXRfbXVsdGkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfaW5pdF9zZXQuYyBiL2xpYnRvbW1hdGgvYm5fbXBfaW5pdF9zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2VlOGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9pbml0X3NldC5jCkBAIC0wLDAgKzEsMzIgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfSU5JVF9TRVRfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogaW5pdGlhbGl6ZSBhbmQgc2V0IGEgZGlnaXQgKi8KK2ludCBtcF9pbml0X3NldCAobXBfaW50ICogYSwgbXBfZGlnaXQgYikKK3sKKyAgaW50IGVycjsKKyAgaWYgKChlcnIgPSBtcF9pbml0KGEpKSAhPSBNUF9PS0FZKSB7CisgICAgIHJldHVybiBlcnI7CisgIH0KKyAgbXBfc2V0KGEsIGIpOworICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfaW5pdF9zZXQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfaW5pdF9zZXRfaW50LmMgYi9saWJ0b21tYXRoL2JuX21wX2luaXRfc2V0X2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOWRkNDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2luaXRfc2V0X2ludC5jCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfSU5JVF9TRVRfSU5UX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGluaXRpYWxpemUgYW5kIHNldCBhIGRpZ2l0ICovCitpbnQgbXBfaW5pdF9zZXRfaW50IChtcF9pbnQgKiBhLCB1bnNpZ25lZCBsb25nIGIpCit7CisgIGludCBlcnI7CisgIGlmICgoZXJyID0gbXBfaW5pdChhKSkgIT0gTVBfT0tBWSkgeworICAgICByZXR1cm4gZXJyOworICB9CisgIHJldHVybiBtcF9zZXRfaW50KGEsIGIpOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfaW5pdF9zZXRfaW50LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX2luaXRfc2l6ZS5jIGIvbGlidG9tbWF0aC9ibl9tcF9pbml0X3NpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWViZDFmCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9pbml0X3NpemUuYwpAQCAtMCwwICsxLDQ4IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0lOSVRfU0laRV9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBpbml0IGFuIG1wX2luaXQgZm9yIGEgZ2l2ZW4gc2l6ZSAqLworaW50IG1wX2luaXRfc2l6ZSAobXBfaW50ICogYSwgaW50IHNpemUpCit7CisgIGludCB4OworCisgIC8qIHBhZCBzaXplIHNvIHRoZXJlIGFyZSBhbHdheXMgZXh0cmEgZGlnaXRzICovCisgIHNpemUgKz0gKE1QX1BSRUMgKiAyKSAtIChzaXplICUgTVBfUFJFQyk7CQorICAKKyAgLyogYWxsb2MgbWVtICovCisgIGEtPmRwID0gT1BUX0NBU1QobXBfZGlnaXQpIFhNQUxMT0MgKHNpemVvZiAobXBfZGlnaXQpICogc2l6ZSk7CisgIGlmIChhLT5kcCA9PSBOVUxMKSB7CisgICAgcmV0dXJuIE1QX01FTTsKKyAgfQorCisgIC8qIHNldCB0aGUgbWVtYmVycyAqLworICBhLT51c2VkICA9IDA7CisgIGEtPmFsbG9jID0gc2l6ZTsKKyAgYS0+c2lnbiAgPSBNUF9aUE9TOworCisgIC8qIHplcm8gdGhlIGRpZ2l0cyAqLworICBmb3IgKHggPSAwOyB4IDwgc2l6ZTsgeCsrKSB7CisgICAgICBhLT5kcFt4XSA9IDA7CisgIH0KKworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2luaXRfc2l6ZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9pbnZtb2QuYyBiL2xpYnRvbW1hdGgvYm5fbXBfaW52bW9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1NzkxZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfaW52bW9kLmMKQEAgLTAsMCArMSw0MyBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9JTlZNT0RfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogaGFjIDE0LjYxLCBwcDYwOCAqLworaW50IG1wX2ludm1vZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK3sKKyAgLyogYiBjYW5ub3QgYmUgbmVnYXRpdmUgKi8KKyAgaWYgKGItPnNpZ24gPT0gTVBfTkVHIHx8IG1wX2lzemVybyhiKSA9PSAxKSB7CisgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisjaWZkZWYgQk5fRkFTVF9NUF9JTlZNT0RfQworICAvKiBpZiB0aGUgbW9kdWx1cyBpcyBvZGQgd2UgY2FuIHVzZSBhIGZhc3RlciByb3V0aW5lIGluc3RlYWQgKi8KKyAgaWYgKG1wX2lzb2RkIChiKSA9PSAxKSB7CisgICAgcmV0dXJuIGZhc3RfbXBfaW52bW9kIChhLCBiLCBjKTsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBCTl9NUF9JTlZNT0RfU0xPV19DCisgIHJldHVybiBtcF9pbnZtb2Rfc2xvdyhhLCBiLCBjKTsKKyNlbmRpZgorCisgIHJldHVybiBNUF9WQUw7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9pbnZtb2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfaW52bW9kX3Nsb3cuYyBiL2xpYnRvbW1hdGgvYm5fbXBfaW52bW9kX3Nsb3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNGU0ZmJjCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9pbnZtb2Rfc2xvdy5jCkBAIC0wLDAgKzEsMTc1IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0lOVk1PRF9TTE9XX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGhhYyAxNC42MSwgcHA2MDggKi8KK2ludCBtcF9pbnZtb2Rfc2xvdyAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK3sKKyAgbXBfaW50ICB4LCB5LCB1LCB2LCBBLCBCLCBDLCBEOworICBpbnQgICAgIHJlczsKKworICAvKiBiIGNhbm5vdCBiZSBuZWdhdGl2ZSAqLworICBpZiAoYi0+c2lnbiA9PSBNUF9ORUcgfHwgbXBfaXN6ZXJvKGIpID09IDEpIHsKKyAgICByZXR1cm4gTVBfVkFMOworICB9CisKKyAgLyogaW5pdCB0ZW1wcyAqLworICBpZiAoKHJlcyA9IG1wX2luaXRfbXVsdGkoJngsICZ5LCAmdSwgJnYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJkEsICZCLCAmQywgJkQsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgIHJldHVybiByZXM7CisgIH0KKworICAvKiB4ID0gYSwgeSA9IGIgKi8KKyAgaWYgKChyZXMgPSBtcF9tb2QoYSwgYiwgJngpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgIH0KKyAgaWYgKChyZXMgPSBtcF9jb3B5IChiLCAmeSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9FUlI7CisgIH0KKworICAvKiAyLiBbbW9kaWZpZWRdIGlmIHgseSBhcmUgYm90aCBldmVuIHRoZW4gcmV0dXJuIGFuIGVycm9yISAqLworICBpZiAobXBfaXNldmVuICgmeCkgPT0gMSAmJiBtcF9pc2V2ZW4gKCZ5KSA9PSAxKSB7CisgICAgcmVzID0gTVBfVkFMOworICAgIGdvdG8gTEJMX0VSUjsKKyAgfQorCisgIC8qIDMuIHU9eCwgdj15LCBBPTEsIEI9MCwgQz0wLEQ9MSAqLworICBpZiAoKHJlcyA9IG1wX2NvcHkgKCZ4LCAmdSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9FUlI7CisgIH0KKyAgaWYgKChyZXMgPSBtcF9jb3B5ICgmeSwgJnYpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfRVJSOworICB9CisgIG1wX3NldCAoJkEsIDEpOworICBtcF9zZXQgKCZELCAxKTsKKwordG9wOgorICAvKiA0LiAgd2hpbGUgdSBpcyBldmVuIGRvICovCisgIHdoaWxlIChtcF9pc2V2ZW4gKCZ1KSA9PSAxKSB7CisgICAgLyogNC4xIHUgPSB1LzIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmdSwgJnUpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIC8qIDQuMiBpZiBBIG9yIEIgaXMgb2RkIHRoZW4gKi8KKyAgICBpZiAobXBfaXNvZGQgKCZBKSA9PSAxIHx8IG1wX2lzb2RkICgmQikgPT0gMSkgeworICAgICAgLyogQSA9IChBK3kpLzIsIEIgPSAoQi14KS8yICovCisgICAgICBpZiAoKHJlcyA9IG1wX2FkZCAoJkEsICZ5LCAmQSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgIH0KKyAgICAgIGlmICgocmVzID0gbXBfc3ViICgmQiwgJngsICZCKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgIH0KKyAgICAvKiBBID0gQS8yLCBCID0gQi8yICovCisgICAgaWYgKChyZXMgPSBtcF9kaXZfMiAoJkEsICZBKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmQiwgJkIpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICB9CisKKyAgLyogNS4gIHdoaWxlIHYgaXMgZXZlbiBkbyAqLworICB3aGlsZSAobXBfaXNldmVuICgmdikgPT0gMSkgeworICAgIC8qIDUuMSB2ID0gdi8yICovCisgICAgaWYgKChyZXMgPSBtcF9kaXZfMiAoJnYsICZ2KSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgICAvKiA1LjIgaWYgQyBvciBEIGlzIG9kZCB0aGVuICovCisgICAgaWYgKG1wX2lzb2RkICgmQykgPT0gMSB8fCBtcF9pc29kZCAoJkQpID09IDEpIHsKKyAgICAgIC8qIEMgPSAoQyt5KS8yLCBEID0gKEQteCkvMiAqLworICAgICAgaWYgKChyZXMgPSBtcF9hZGQgKCZDLCAmeSwgJkMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJkQsICZ4LCAmRCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgIH0KKyAgICB9CisgICAgLyogQyA9IEMvMiwgRCA9IEQvMiAqLworICAgIGlmICgocmVzID0gbXBfZGl2XzIgKCZDLCAmQykpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9kaXZfMiAoJkQsICZEKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgfQorCisgIC8qIDYuICBpZiB1ID49IHYgdGhlbiAqLworICBpZiAobXBfY21wICgmdSwgJnYpICE9IE1QX0xUKSB7CisgICAgLyogdSA9IHUgLSB2LCBBID0gQSAtIEMsIEIgPSBCIC0gRCAqLworICAgIGlmICgocmVzID0gbXBfc3ViICgmdSwgJnYsICZ1KSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfc3ViICgmQSwgJkMsICZBKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfc3ViICgmQiwgJkQsICZCKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvKiB2IC0gdiAtIHUsIEMgPSBDIC0gQSwgRCA9IEQgLSBCICovCisgICAgaWYgKChyZXMgPSBtcF9zdWIgKCZ2LCAmdSwgJnYpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorCisgICAgaWYgKChyZXMgPSBtcF9zdWIgKCZDLCAmQSwgJkMpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorCisgICAgaWYgKChyZXMgPSBtcF9zdWIgKCZELCAmQiwgJkQpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICB9CisKKyAgLyogaWYgbm90IHplcm8gZ290byBzdGVwIDQgKi8KKyAgaWYgKG1wX2lzemVybyAoJnUpID09IDApCisgICAgZ290byB0b3A7CisKKyAgLyogbm93IGEgPSBDLCBiID0gRCwgZ2NkID09IGcqdiAqLworCisgIC8qIGlmIHYgIT0gMSB0aGVuIHRoZXJlIGlzIG5vIGludmVyc2UgKi8KKyAgaWYgKG1wX2NtcF9kICgmdiwgMSkgIT0gTVBfRVEpIHsKKyAgICByZXMgPSBNUF9WQUw7CisgICAgZ290byBMQkxfRVJSOworICB9CisKKyAgLyogaWYgaXRzIHRvbyBsb3cgKi8KKyAgd2hpbGUgKG1wX2NtcF9kKCZDLCAwKSA9PSBNUF9MVCkgeworICAgICAgaWYgKChyZXMgPSBtcF9hZGQoJkMsIGIsICZDKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICB9CisgIAorICAvKiB0b28gYmlnICovCisgIHdoaWxlIChtcF9jbXBfbWFnKCZDLCBiKSAhPSBNUF9MVCkgeworICAgICAgaWYgKChyZXMgPSBtcF9zdWIoJkMsIGIsICZDKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICB9CisgIAorICAvKiBDIGlzIG5vdyB0aGUgaW52ZXJzZSAqLworICBtcF9leGNoICgmQywgYyk7CisgIHJlcyA9IE1QX09LQVk7CitMQkxfRVJSOm1wX2NsZWFyX211bHRpICgmeCwgJnksICZ1LCAmdiwgJkEsICZCLCAmQywgJkQsIE5VTEwpOworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfaW52bW9kX3Nsb3cuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfaXNfc3F1YXJlLmMgYi9saWJ0b21tYXRoL2JuX21wX2lzX3NxdWFyZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMzVkOTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2lzX3NxdWFyZS5jCkBAIC0wLDAgKzEsMTA5IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0lTX1NRVUFSRV9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBDaGVjayBpZiByZW1haW5kZXJzIGFyZSBwb3NzaWJsZSBzcXVhcmVzIC0gZmFzdCBleGNsdWRlIG5vbi1zcXVhcmVzICovCitzdGF0aWMgY29uc3QgY2hhciByZW1fMTI4WzEyOF0gPSB7CisgMCwgMCwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwKKyAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLAorIDEsIDAsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsCisgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwKKyAwLCAwLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLAorIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsCisgMSwgMCwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwKKyAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxCit9OworCitzdGF0aWMgY29uc3QgY2hhciByZW1fMTA1WzEwNV0gPSB7CisgMCwgMCwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwKKyAwLCAwLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLAorIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsCisgMSwgMCwgMSwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKyAwLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLAorIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDEsCisgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMQorfTsKKworLyogU3RvcmUgbm9uLXplcm8gdG8gcmV0IGlmIGFyZyBpcyBzcXVhcmUsIGFuZCB6ZXJvIGlmIG5vdCAqLworaW50IG1wX2lzX3NxdWFyZShtcF9pbnQgKmFyZyxpbnQgKnJldCkgCit7CisgIGludCAgICAgICAgICAgcmVzOworICBtcF9kaWdpdCAgICAgIGM7CisgIG1wX2ludCAgICAgICAgdDsKKyAgdW5zaWduZWQgbG9uZyByOworCisgIC8qIERlZmF1bHQgdG8gTm9uLXNxdWFyZSA6KSAqLworICAqcmV0ID0gTVBfTk87IAorCisgIGlmIChhcmctPnNpZ24gPT0gTVBfTkVHKSB7CisgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIGRpZ2l0cyB1c2VkPyAgKFRTRCkgKi8KKyAgaWYgKGFyZy0+dXNlZCA9PSAwKSB7CisgICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogRmlyc3QgY2hlY2sgbW9kIDEyOCAoc3VwcG9zZSB0aGF0IERJR0lUX0JJVCBpcyBhdCBsZWFzdCA3KSAqLworICBpZiAocmVtXzEyOFsxMjcgJiBESUdJVChhcmcsMCldID09IDEpIHsKKyAgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICAvKiBOZXh0IGNoZWNrIG1vZCAxMDUgKDMqNSo3KSAqLworICBpZiAoKHJlcyA9IG1wX21vZF9kKGFyZywxMDUsJmMpKSAhPSBNUF9PS0FZKSB7CisgICAgIHJldHVybiByZXM7CisgIH0KKyAgaWYgKHJlbV8xMDVbY10gPT0gMSkgeworICAgICByZXR1cm4gTVBfT0tBWTsKKyAgfQorCisKKyAgaWYgKChyZXMgPSBtcF9pbml0X3NldF9pbnQoJnQsMTFMKjEzTCoxN0wqMTlMKjIzTCoyOUwqMzFMKSkgIT0gTVBfT0tBWSkgeworICAgICByZXR1cm4gcmVzOworICB9CisgIGlmICgocmVzID0gbXBfbW9kKGFyZywmdCwmdCkpICE9IE1QX09LQVkpIHsKKyAgICAgZ290byBFUlI7CisgIH0KKyAgciA9IG1wX2dldF9pbnQoJnQpOworICAvKiBDaGVjayBmb3Igb3RoZXIgcHJpbWUgbW9kdWxlcywgbm90ZSBpdCdzIG5vdCBhbiBFUlJPUiBidXQgd2UgbXVzdAorICAgKiBmcmVlICJ0IiBzbyB0aGUgZWFzaWVzdCB3YXkgaXMgdG8gZ290byBFUlIuICBXZSBrbm93IHRoYXQgcmVzCisgICAqIGlzIGFscmVhZHkgZXF1YWwgdG8gTVBfT0tBWSBmcm9tIHRoZSBtcF9tb2QgY2FsbCAKKyAgICovIAorICBpZiAoICgxTDw8KHIlMTEpKSAmIDB4NUM0TCApICAgICAgICAgICAgIGdvdG8gRVJSOworICBpZiAoICgxTDw8KHIlMTMpKSAmIDB4OUU0TCApICAgICAgICAgICAgIGdvdG8gRVJSOworICBpZiAoICgxTDw8KHIlMTcpKSAmIDB4NUNFOEwgKSAgICAgICAgICAgIGdvdG8gRVJSOworICBpZiAoICgxTDw8KHIlMTkpKSAmIDB4NEY1MENMICkgICAgICAgICAgIGdvdG8gRVJSOworICBpZiAoICgxTDw8KHIlMjMpKSAmIDB4N0FDQ0EwTCApICAgICAgICAgIGdvdG8gRVJSOworICBpZiAoICgxTDw8KHIlMjkpKSAmIDB4QzJFREQwQ0wgKSAgICAgICAgIGdvdG8gRVJSOworICBpZiAoICgxTDw8KHIlMzEpKSAmIDB4NkRFMkI4NDhMICkgICAgICAgIGdvdG8gRVJSOworCisgIC8qIEZpbmFsIGNoZWNrIC0gaXMgc3FyKHNxcnQoYXJnKSkgPT0gYXJnID8gKi8KKyAgaWYgKChyZXMgPSBtcF9zcXJ0KGFyZywmdCkpICE9IE1QX09LQVkpIHsKKyAgICAgZ290byBFUlI7CisgIH0KKyAgaWYgKChyZXMgPSBtcF9zcXIoJnQsJnQpKSAhPSBNUF9PS0FZKSB7CisgICAgIGdvdG8gRVJSOworICB9CisKKyAgKnJldCA9IChtcF9jbXBfbWFnKCZ0LGFyZykgPT0gTVBfRVEpID8gTVBfWUVTIDogTVBfTk87CitFUlI6bXBfY2xlYXIoJnQpOworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfaXNfc3F1YXJlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX2phY29iaS5jIGIvbGlidG9tbWF0aC9ibl9tcF9qYWNvYmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTg4ZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9qYWNvYmkuYwpAQCAtMCwwICsxLDEwNSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9KQUNPQklfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY29tcHV0ZXMgdGhlIGphY29iaSBjID0gKGEgfCBuKSAob3IgTGVnZW5kcmUgaWYgbiBpcyBwcmltZSkKKyAqIEhBQyBwcC4gNzMgQWxnb3JpdGhtIDIuMTQ5CisgKi8KK2ludCBtcF9qYWNvYmkgKG1wX2ludCAqIGEsIG1wX2ludCAqIHAsIGludCAqYykKK3sKKyAgbXBfaW50ICBhMSwgcDE7CisgIGludCAgICAgaywgcywgciwgcmVzOworICBtcF9kaWdpdCByZXNpZHVlOworCisgIC8qIGlmIHAgPD0gMCByZXR1cm4gTVBfVkFMICovCisgIGlmIChtcF9jbXBfZChwLCAwKSAhPSBNUF9HVCkgeworICAgICByZXR1cm4gTVBfVkFMOworICB9CisKKyAgLyogc3RlcCAxLiAgaWYgYSA9PSAwLCByZXR1cm4gMCAqLworICBpZiAobXBfaXN6ZXJvIChhKSA9PSAxKSB7CisgICAgKmMgPSAwOworICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogc3RlcCAyLiAgaWYgYSA9PSAxLCByZXR1cm4gMSAqLworICBpZiAobXBfY21wX2QgKGEsIDEpID09IE1QX0VRKSB7CisgICAgKmMgPSAxOworICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogZGVmYXVsdCAqLworICBzID0gMDsKKworICAvKiBzdGVwIDMuICB3cml0ZSBhID0gYTEgKiAyKiprICAqLworICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJmExLCBhKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZwMSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9BMTsKKyAgfQorCisgIC8qIGRpdmlkZSBvdXQgbGFyZ2VyIHBvd2VyIG9mIHR3byAqLworICBrID0gbXBfY250X2xzYigmYTEpOworICBpZiAoKHJlcyA9IG1wX2Rpdl8yZCgmYTEsIGssICZhMSwgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgZ290byBMQkxfUDE7CisgIH0KKworICAvKiBzdGVwIDQuICBpZiBlIGlzIGV2ZW4gc2V0IHM9MSAqLworICBpZiAoKGsgJiAxKSA9PSAwKSB7CisgICAgcyA9IDE7CisgIH0gZWxzZSB7CisgICAgLyogZWxzZSBzZXQgcz0xIGlmIHAgPSAxLzcgKG1vZCA4KSBvciBzPS0xIGlmIHAgPSAzLzUgKG1vZCA4KSAqLworICAgIHJlc2lkdWUgPSBwLT5kcFswXSAmIDc7CisKKyAgICBpZiAocmVzaWR1ZSA9PSAxIHx8IHJlc2lkdWUgPT0gNykgeworICAgICAgcyA9IDE7CisgICAgfSBlbHNlIGlmIChyZXNpZHVlID09IDMgfHwgcmVzaWR1ZSA9PSA1KSB7CisgICAgICBzID0gLTE7CisgICAgfQorICB9CisKKyAgLyogc3RlcCA1LiAgaWYgcCA9PSAzIChtb2QgNCkgKmFuZCogYTEgPT0gMyAobW9kIDQpIHRoZW4gcyA9IC1zICovCisgIGlmICggKChwLT5kcFswXSAmIDMpID09IDMpICYmICgoYTEuZHBbMF0gJiAzKSA9PSAzKSkgeworICAgIHMgPSAtczsKKyAgfQorCisgIC8qIGlmIGExID09IDEgd2UncmUgZG9uZSAqLworICBpZiAobXBfY21wX2QgKCZhMSwgMSkgPT0gTVBfRVEpIHsKKyAgICAqYyA9IHM7CisgIH0gZWxzZSB7CisgICAgLyogbjEgPSBuIG1vZCBhMSAqLworICAgIGlmICgocmVzID0gbXBfbW9kIChwLCAmYTEsICZwMSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX1AxOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2phY29iaSAoJnAxLCAmYTEsICZyKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfUDE7CisgICAgfQorICAgICpjID0gcyAqIHI7CisgIH0KKworICAvKiBkb25lICovCisgIHJlcyA9IE1QX09LQVk7CitMQkxfUDE6bXBfY2xlYXIgKCZwMSk7CitMQkxfQTE6bXBfY2xlYXIgKCZhMSk7CisgIHJldHVybiByZXM7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9qYWNvYmkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfa2FyYXRzdWJhX211bC5jIGIvbGlidG9tbWF0aC9ibl9tcF9rYXJhdHN1YmFfbXVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkYzlhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfa2FyYXRzdWJhX211bC5jCkBAIC0wLDAgKzEsMTY3IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0tBUkFUU1VCQV9NVUxfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogYyA9IHxhfCAqIHxifCB1c2luZyBLYXJhdHN1YmEgTXVsdGlwbGljYXRpb24gdXNpbmcgCisgKiB0aHJlZSBoYWxmIHNpemUgbXVsdGlwbGljYXRpb25zCisgKgorICogTGV0IEIgcmVwcmVzZW50IHRoZSByYWRpeCBbZS5nLiAyKipESUdJVF9CSVRdIGFuZCAKKyAqIGxldCBuIHJlcHJlc2VudCBoYWxmIG9mIHRoZSBudW1iZXIgb2YgZGlnaXRzIGluIAorICogdGhlIG1pbihhLGIpCisgKgorICogYSA9IGExICogQioqbiArIGEwCisgKiBiID0gYjEgKiBCKipuICsgYjAKKyAqCisgKiBUaGVuLCBhICogYiA9PiAKKyAgIGExYjEgKiBCKioybiArICgoYTEgKyBhMCkoYjEgKyBiMCkgLSAoYTBiMCArIGExYjEpKSAqIEIgKyBhMGIwCisgKgorICogTm90ZSB0aGF0IGExYjEgYW5kIGEwYjAgYXJlIHVzZWQgdHdpY2UgYW5kIG9ubHkgbmVlZCB0byBiZSAKKyAqIGNvbXB1dGVkIG9uY2UuICBTbyBpbiB0b3RhbCB0aHJlZSBoYWxmIHNpemUgKGhhbGYgIyBvZiAKKyAqIGRpZ2l0KSBtdWx0aXBsaWNhdGlvbnMgYXJlIHBlcmZvcm1lZCwgYTBiMCwgYTFiMSBhbmQgCisgKiAoYTErYjEpKGEwK2IwKQorICoKKyAqIE5vdGUgdGhhdCBhIG11bHRpcGxpY2F0aW9uIG9mIGhhbGYgdGhlIGRpZ2l0cyByZXF1aXJlcworICogMS80dGggdGhlIG51bWJlciBvZiBzaW5nbGUgcHJlY2lzaW9uIG11bHRpcGxpY2F0aW9ucyBzbyBpbiAKKyAqIHRvdGFsIGFmdGVyIG9uZSBjYWxsIDI1JSBvZiB0aGUgc2luZ2xlIHByZWNpc2lvbiBtdWx0aXBsaWNhdGlvbnMgCisgKiBhcmUgc2F2ZWQuICBOb3RlIGFsc28gdGhhdCB0aGUgY2FsbCB0byBtcF9tdWwgY2FuIGVuZCB1cCBiYWNrIAorICogaW4gdGhpcyBmdW5jdGlvbiBpZiB0aGUgYTAsIGExLCBiMCwgb3IgYjEgYXJlIGFib3ZlIHRoZSB0aHJlc2hvbGQuICAKKyAqIFRoaXMgaXMga25vd24gYXMgZGl2aWRlLWFuZC1jb25xdWVyIGFuZCBsZWFkcyB0byB0aGUgZmFtb3VzIAorICogTyhOKipsZygzKSkgb3IgTyhOKioxLjU4NCkgd29yayB3aGljaCBpcyBhc3ltcHRvcGljYWxseSBsb3dlciB0aGFuIAorICogdGhlIHN0YW5kYXJkIE8oTioqMikgdGhhdCB0aGUgYmFzZWxpbmUvY29tYmEgbWV0aG9kcyB1c2UuICAKKyAqIEdlbmVyYWxseSB0aG91Z2ggdGhlIG92ZXJoZWFkIG9mIHRoaXMgbWV0aG9kIGRvZXNuJ3QgcGF5IG9mZiAKKyAqIHVudGlsIGEgY2VydGFpbiBzaXplIChOIH4gODApIGlzIHJlYWNoZWQuCisgKi8KK2ludCBtcF9rYXJhdHN1YmFfbXVsIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBtcF9pbnQgIHgwLCB4MSwgeTAsIHkxLCB0MSwgeDB5MCwgeDF5MTsKKyAgaW50ICAgICBCLCBlcnI7CisKKyAgLyogZGVmYXVsdCB0aGUgcmV0dXJuIGNvZGUgdG8gYW4gZXJyb3IgKi8KKyAgZXJyID0gTVBfTUVNOworCisgIC8qIG1pbiAjIG9mIGRpZ2l0cyAqLworICBCID0gTUlOIChhLT51c2VkLCBiLT51c2VkKTsKKworICAvKiBub3cgZGl2aWRlIGluIHR3byAqLworICBCID0gQiA+PiAxOworCisgIC8qIGluaXQgY29weSBhbGwgdGhlIHRlbXBzICovCisgIGlmIChtcF9pbml0X3NpemUgKCZ4MCwgQikgIT0gTVBfT0tBWSkKKyAgICBnb3RvIEVSUjsKKyAgaWYgKG1wX2luaXRfc2l6ZSAoJngxLCBhLT51c2VkIC0gQikgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgwOworICBpZiAobXBfaW5pdF9zaXplICgmeTAsIEIpICE9IE1QX09LQVkpCisgICAgZ290byBYMTsKKyAgaWYgKG1wX2luaXRfc2l6ZSAoJnkxLCBiLT51c2VkIC0gQikgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFkwOworCisgIC8qIGluaXQgdGVtcHMgKi8KKyAgaWYgKG1wX2luaXRfc2l6ZSAoJnQxLCBCICogMikgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFkxOworICBpZiAobXBfaW5pdF9zaXplICgmeDB5MCwgQiAqIDIpICE9IE1QX09LQVkpCisgICAgZ290byBUMTsKKyAgaWYgKG1wX2luaXRfc2l6ZSAoJngxeTEsIEIgKiAyKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDBZMDsKKworICAvKiBub3cgc2hpZnQgdGhlIGRpZ2l0cyAqLworICB4MC51c2VkID0geTAudXNlZCA9IEI7CisgIHgxLnVzZWQgPSBhLT51c2VkIC0gQjsKKyAgeTEudXNlZCA9IGItPnVzZWQgLSBCOworCisgIHsKKyAgICByZWdpc3RlciBpbnQgeDsKKyAgICByZWdpc3RlciBtcF9kaWdpdCAqdG1wYSwgKnRtcGIsICp0bXB4LCAqdG1weTsKKworICAgIC8qIHdlIGNvcHkgdGhlIGRpZ2l0cyBkaXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5nIGhpZ2hlciBsZXZlbCBmdW5jdGlvbnMKKyAgICAgKiBzaW5jZSB3ZSBhbHNvIG5lZWQgdG8gc2hpZnQgdGhlIGRpZ2l0cworICAgICAqLworICAgIHRtcGEgPSBhLT5kcDsKKyAgICB0bXBiID0gYi0+ZHA7CisKKyAgICB0bXB4ID0geDAuZHA7CisgICAgdG1weSA9IHkwLmRwOworICAgIGZvciAoeCA9IDA7IHggPCBCOyB4KyspIHsKKyAgICAgICp0bXB4KysgPSAqdG1wYSsrOworICAgICAgKnRtcHkrKyA9ICp0bXBiKys7CisgICAgfQorCisgICAgdG1weCA9IHgxLmRwOworICAgIGZvciAoeCA9IEI7IHggPCBhLT51c2VkOyB4KyspIHsKKyAgICAgICp0bXB4KysgPSAqdG1wYSsrOworICAgIH0KKworICAgIHRtcHkgPSB5MS5kcDsKKyAgICBmb3IgKHggPSBCOyB4IDwgYi0+dXNlZDsgeCsrKSB7CisgICAgICAqdG1weSsrID0gKnRtcGIrKzsKKyAgICB9CisgIH0KKworICAvKiBvbmx5IG5lZWQgdG8gY2xhbXAgdGhlIGxvd2VyIHdvcmRzIHNpbmNlIGJ5IGRlZmluaXRpb24gdGhlIAorICAgKiB1cHBlciB3b3JkcyB4MS95MSBtdXN0IGhhdmUgYSBrbm93biBudW1iZXIgb2YgZGlnaXRzCisgICAqLworICBtcF9jbGFtcCAoJngwKTsKKyAgbXBfY2xhbXAgKCZ5MCk7CisKKyAgLyogbm93IGNhbGMgdGhlIHByb2R1Y3RzIHgweTAgYW5kIHgxeTEgKi8KKyAgLyogYWZ0ZXIgdGhpcyB4MCBpcyBubyBsb25nZXIgcmVxdWlyZWQsIGZyZWUgdGVtcCBbeDA9PXQyXSEgKi8KKyAgaWYgKG1wX211bCAoJngwLCAmeTAsICZ4MHkwKSAhPSBNUF9PS0FZKSAgCisgICAgZ290byBYMVkxOyAgICAgICAgICAvKiB4MHkwID0geDAqeTAgKi8KKyAgaWYgKG1wX211bCAoJngxLCAmeTEsICZ4MXkxKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFZMTsgICAgICAgICAgLyogeDF5MSA9IHgxKnkxICovCisKKyAgLyogbm93IGNhbGMgeDEreDAgYW5kIHkxK3kwICovCisgIGlmIChzX21wX2FkZCAoJngxLCAmeDAsICZ0MSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWTE7ICAgICAgICAgIC8qIHQxID0geDEgLSB4MCAqLworICBpZiAoc19tcF9hZGQgKCZ5MSwgJnkwLCAmeDApICE9IE1QX09LQVkpCisgICAgZ290byBYMVkxOyAgICAgICAgICAvKiB0MiA9IHkxIC0geTAgKi8KKyAgaWYgKG1wX211bCAoJnQxLCAmeDAsICZ0MSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWTE7ICAgICAgICAgIC8qIHQxID0gKHgxICsgeDApICogKHkxICsgeTApICovCisKKyAgLyogYWRkIHgweTAgKi8KKyAgaWYgKG1wX2FkZCAoJngweTAsICZ4MXkxLCAmeDApICE9IE1QX09LQVkpCisgICAgZ290byBYMVkxOyAgICAgICAgICAvKiB0MiA9IHgweTAgKyB4MXkxICovCisgIGlmIChzX21wX3N1YiAoJnQxLCAmeDAsICZ0MSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWTE7ICAgICAgICAgIC8qIHQxID0gKHgxK3gwKSooeTEreTApIC0gKHgxeTEgKyB4MHkwKSAqLworCisgIC8qIHNoaWZ0IGJ5IEIgKi8KKyAgaWYgKG1wX2xzaGQgKCZ0MSwgQikgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWTE7ICAgICAgICAgIC8qIHQxID0gKHgweTAgKyB4MXkxIC0gKHgxLXgwKSooeTEteTApKTw8QiAqLworICBpZiAobXBfbHNoZCAoJngxeTEsIEIgKiAyKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFZMTsgICAgICAgICAgLyogeDF5MSA9IHgxeTEgPDwgMipCICovCisKKyAgaWYgKG1wX2FkZCAoJngweTAsICZ0MSwgJnQxKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFZMTsgICAgICAgICAgLyogdDEgPSB4MHkwICsgdDEgKi8KKyAgaWYgKG1wX2FkZCAoJnQxLCAmeDF5MSwgYykgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWTE7ICAgICAgICAgIC8qIHQxID0geDB5MCArIHQxICsgeDF5MSAqLworCisgIC8qIEFsZ29yaXRobSBzdWNjZWVkZWQgc2V0IHRoZSByZXR1cm4gY29kZSB0byBNUF9PS0FZICovCisgIGVyciA9IE1QX09LQVk7CisKK1gxWTE6bXBfY2xlYXIgKCZ4MXkxKTsKK1gwWTA6bXBfY2xlYXIgKCZ4MHkwKTsKK1QxOm1wX2NsZWFyICgmdDEpOworWTE6bXBfY2xlYXIgKCZ5MSk7CitZMDptcF9jbGVhciAoJnkwKTsKK1gxOm1wX2NsZWFyICgmeDEpOworWDA6bXBfY2xlYXIgKCZ4MCk7CitFUlI6CisgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9rYXJhdHN1YmFfbXVsLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX2thcmF0c3ViYV9zcXIuYyBiL2xpYnRvbW1hdGgvYm5fbXBfa2FyYXRzdWJhX3Nxci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOGFkNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX2thcmF0c3ViYV9zcXIuYwpAQCAtMCwwICsxLDEyMSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9LQVJBVFNVQkFfU1FSX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEthcmF0c3ViYSBzcXVhcmluZywgY29tcHV0ZXMgYiA9IGEqYSB1c2luZyB0aHJlZSAKKyAqIGhhbGYgc2l6ZSBzcXVhcmluZ3MKKyAqCisgKiBTZWUgY29tbWVudHMgb2Yga2FyYXRzdWJhX211bCBmb3IgZGV0YWlscy4gIEl0IAorICogaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYWxnb3JpdGhtIGJ1dCBtZXJlbHkgCisgKiB0dW5lZCB0byBwZXJmb3JtIHJlY3Vyc2l2ZSBzcXVhcmluZ3MuCisgKi8KK2ludCBtcF9rYXJhdHN1YmFfc3FyIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQoreworICBtcF9pbnQgIHgwLCB4MSwgdDEsIHQyLCB4MHgwLCB4MXgxOworICBpbnQgICAgIEIsIGVycjsKKworICBlcnIgPSBNUF9NRU07CisKKyAgLyogbWluICMgb2YgZGlnaXRzICovCisgIEIgPSBhLT51c2VkOworCisgIC8qIG5vdyBkaXZpZGUgaW4gdHdvICovCisgIEIgPSBCID4+IDE7CisKKyAgLyogaW5pdCBjb3B5IGFsbCB0aGUgdGVtcHMgKi8KKyAgaWYgKG1wX2luaXRfc2l6ZSAoJngwLCBCKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gRVJSOworICBpZiAobXBfaW5pdF9zaXplICgmeDEsIGEtPnVzZWQgLSBCKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDA7CisKKyAgLyogaW5pdCB0ZW1wcyAqLworICBpZiAobXBfaW5pdF9zaXplICgmdDEsIGEtPnVzZWQgKiAyKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDE7CisgIGlmIChtcF9pbml0X3NpemUgKCZ0MiwgYS0+dXNlZCAqIDIpICE9IE1QX09LQVkpCisgICAgZ290byBUMTsKKyAgaWYgKG1wX2luaXRfc2l6ZSAoJngweDAsIEIgKiAyKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gVDI7CisgIGlmIChtcF9pbml0X3NpemUgKCZ4MXgxLCAoYS0+dXNlZCAtIEIpICogMikgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgwWDA7CisKKyAgeworICAgIHJlZ2lzdGVyIGludCB4OworICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICpkc3QsICpzcmM7CisKKyAgICBzcmMgPSBhLT5kcDsKKworICAgIC8qIG5vdyBzaGlmdCB0aGUgZGlnaXRzICovCisgICAgZHN0ID0geDAuZHA7CisgICAgZm9yICh4ID0gMDsgeCA8IEI7IHgrKykgeworICAgICAgKmRzdCsrID0gKnNyYysrOworICAgIH0KKworICAgIGRzdCA9IHgxLmRwOworICAgIGZvciAoeCA9IEI7IHggPCBhLT51c2VkOyB4KyspIHsKKyAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICB9CisgIH0KKworICB4MC51c2VkID0gQjsKKyAgeDEudXNlZCA9IGEtPnVzZWQgLSBCOworCisgIG1wX2NsYW1wICgmeDApOworCisgIC8qIG5vdyBjYWxjIHRoZSBwcm9kdWN0cyB4MCp4MCBhbmQgeDEqeDEgKi8KKyAgaWYgKG1wX3NxciAoJngwLCAmeDB4MCkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWDE7ICAgICAgICAgICAvKiB4MHgwID0geDAqeDAgKi8KKyAgaWYgKG1wX3NxciAoJngxLCAmeDF4MSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWDE7ICAgICAgICAgICAvKiB4MXgxID0geDEqeDEgKi8KKworICAvKiBub3cgY2FsYyAoeDEreDApKioyICovCisgIGlmIChzX21wX2FkZCAoJngxLCAmeDAsICZ0MSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWDE7ICAgICAgICAgICAvKiB0MSA9IHgxIC0geDAgKi8KKyAgaWYgKG1wX3NxciAoJnQxLCAmdDEpICE9IE1QX09LQVkpCisgICAgZ290byBYMVgxOyAgICAgICAgICAgLyogdDEgPSAoeDEgLSB4MCkgKiAoeDEgLSB4MCkgKi8KKworICAvKiBhZGQgeDB5MCAqLworICBpZiAoc19tcF9hZGQgKCZ4MHgwLCAmeDF4MSwgJnQyKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFYMTsgICAgICAgICAgIC8qIHQyID0geDB4MCArIHgxeDEgKi8KKyAgaWYgKHNfbXBfc3ViICgmdDEsICZ0MiwgJnQxKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFYMTsgICAgICAgICAgIC8qIHQxID0gKHgxK3gwKSoqMiAtICh4MHgwICsgeDF4MSkgKi8KKworICAvKiBzaGlmdCBieSBCICovCisgIGlmIChtcF9sc2hkICgmdDEsIEIpICE9IE1QX09LQVkpCisgICAgZ290byBYMVgxOyAgICAgICAgICAgLyogdDEgPSAoeDB4MCArIHgxeDEgLSAoeDEteDApKih4MS14MCkpPDxCICovCisgIGlmIChtcF9sc2hkICgmeDF4MSwgQiAqIDIpICE9IE1QX09LQVkpCisgICAgZ290byBYMVgxOyAgICAgICAgICAgLyogeDF4MSA9IHgxeDEgPDwgMipCICovCisKKyAgaWYgKG1wX2FkZCAoJngweDAsICZ0MSwgJnQxKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFYMTsgICAgICAgICAgIC8qIHQxID0geDB4MCArIHQxICovCisgIGlmIChtcF9hZGQgKCZ0MSwgJngxeDEsIGIpICE9IE1QX09LQVkpCisgICAgZ290byBYMVgxOyAgICAgICAgICAgLyogdDEgPSB4MHgwICsgdDEgKyB4MXgxICovCisKKyAgZXJyID0gTVBfT0tBWTsKKworWDFYMTptcF9jbGVhciAoJngxeDEpOworWDBYMDptcF9jbGVhciAoJngweDApOworVDI6bXBfY2xlYXIgKCZ0Mik7CitUMTptcF9jbGVhciAoJnQxKTsKK1gxOm1wX2NsZWFyICgmeDEpOworWDA6bXBfY2xlYXIgKCZ4MCk7CitFUlI6CisgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9rYXJhdHN1YmFfc3FyLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX2xjbS5jIGIvbGlidG9tbWF0aC9ibl9tcF9sY20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGIyYjYzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9sY20uYwpAQCAtMCwwICsxLDYwIEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0xDTV9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBjb21wdXRlcyBsZWFzdCBjb21tb24gbXVsdGlwbGUgYXMgfGEqYnwvKGEsIGIpICovCitpbnQgbXBfbGNtIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBpbnQgICAgIHJlczsKKyAgbXBfaW50ICB0MSwgdDI7CisKKworICBpZiAoKHJlcyA9IG1wX2luaXRfbXVsdGkgKCZ0MSwgJnQyLCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICAvKiB0MSA9IGdldCB0aGUgR0NEIG9mIHRoZSB0d28gaW5wdXRzICovCisgIGlmICgocmVzID0gbXBfZ2NkIChhLCBiLCAmdDEpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfVDsKKyAgfQorCisgIC8qIGRpdmlkZSB0aGUgc21hbGxlc3QgYnkgdGhlIEdDRCAqLworICBpZiAobXBfY21wX21hZyhhLCBiKSA9PSBNUF9MVCkgeworICAgICAvKiBzdG9yZSBxdW90aWVudCBpbiB0MiBzdWNoIHRoYXQgdDIgKiBiIGlzIHRoZSBMQ00gKi8KKyAgICAgaWYgKChyZXMgPSBtcF9kaXYoYSwgJnQxLCAmdDIsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1Q7CisgICAgIH0KKyAgICAgcmVzID0gbXBfbXVsKGIsICZ0MiwgYyk7CisgIH0gZWxzZSB7CisgICAgIC8qIHN0b3JlIHF1b3RpZW50IGluIHQyIHN1Y2ggdGhhdCB0MiAqIGEgaXMgdGhlIExDTSAqLworICAgICBpZiAoKHJlcyA9IG1wX2RpdihiLCAmdDEsICZ0MiwgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfVDsKKyAgICAgfQorICAgICByZXMgPSBtcF9tdWwoYSwgJnQyLCBjKTsKKyAgfQorCisgIC8qIGZpeCB0aGUgc2lnbiB0byBwb3NpdGl2ZSAqLworICBjLT5zaWduID0gTVBfWlBPUzsKKworTEJMX1Q6CisgIG1wX2NsZWFyX211bHRpICgmdDEsICZ0MiwgTlVMTCk7CisgIHJldHVybiByZXM7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9sY20uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfbHNoZC5jIGIvbGlidG9tbWF0aC9ibl9tcF9sc2hkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E5Yjg1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfbHNoZC5jCkBAIC0wLDAgKzEsNjcgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfTFNIRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBzaGlmdCBsZWZ0IGEgY2VydGFpbiBhbW91bnQgb2YgZGlnaXRzICovCitpbnQgbXBfbHNoZCAobXBfaW50ICogYSwgaW50IGIpCit7CisgIGludCAgICAgeCwgcmVzOworCisgIC8qIGlmIGl0cyBsZXNzIHRoYW4gemVybyByZXR1cm4gKi8KKyAgaWYgKGIgPD0gMCkgeworICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogZ3JvdyB0byBmaXQgdGhlIG5ldyBkaWdpdHMgKi8KKyAgaWYgKGEtPmFsbG9jIDwgYS0+dXNlZCArIGIpIHsKKyAgICAgaWYgKChyZXMgPSBtcF9ncm93IChhLCBhLT51c2VkICsgYikpICE9IE1QX09LQVkpIHsKKyAgICAgICByZXR1cm4gcmVzOworICAgICB9CisgIH0KKworICB7CisgICAgcmVnaXN0ZXIgbXBfZGlnaXQgKnRvcCwgKmJvdHRvbTsKKworICAgIC8qIGluY3JlbWVudCB0aGUgdXNlZCBieSB0aGUgc2hpZnQgYW1vdW50IHRoZW4gY29weSB1cHdhcmRzICovCisgICAgYS0+dXNlZCArPSBiOworCisgICAgLyogdG9wICovCisgICAgdG9wID0gYS0+ZHAgKyBhLT51c2VkIC0gMTsKKworICAgIC8qIGJhc2UgKi8KKyAgICBib3R0b20gPSBhLT5kcCArIGEtPnVzZWQgLSAxIC0gYjsKKworICAgIC8qIG11Y2ggbGlrZSBtcF9yc2hkIHRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSBzbGlkaW5nIHdpbmRvdworICAgICAqIGV4Y2VwdCB0aGUgd2luZG93IGdvZXMgdGhlIG90aGVyd2F5IGFyb3VuZC4gIENvcHlpbmcgZnJvbQorICAgICAqIHRoZSBib3R0b20gdG8gdGhlIHRvcC4gIHNlZSBibl9tcF9yc2hkLmMgZm9yIG1vcmUgaW5mby4KKyAgICAgKi8KKyAgICBmb3IgKHggPSBhLT51c2VkIC0gMTsgeCA+PSBiOyB4LS0pIHsKKyAgICAgICp0b3AtLSA9ICpib3R0b20tLTsKKyAgICB9CisKKyAgICAvKiB6ZXJvIHRoZSBsb3dlciBkaWdpdHMgKi8KKyAgICB0b3AgPSBhLT5kcDsKKyAgICBmb3IgKHggPSAwOyB4IDwgYjsgeCsrKSB7CisgICAgICAqdG9wKysgPSAwOworICAgIH0KKyAgfQorICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2xzaGQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfbW9kLmMgYi9saWJ0b21tYXRoL2JuX21wX21vZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMWYzNmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX21vZC5jCkBAIC0wLDAgKzEsNDggQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfTU9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGMgPSBhIG1vZCBiLCAwIDw9IGMgPCBiICovCitpbnQKK21wX21vZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK3sKKyAgbXBfaW50ICB0OworICBpbnQgICAgIHJlczsKKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ0KSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2RpdiAoYSwgYiwgTlVMTCwgJnQpKSAhPSBNUF9PS0FZKSB7CisgICAgbXBfY2xlYXIgKCZ0KTsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgaWYgKHQuc2lnbiAhPSBiLT5zaWduKSB7CisgICAgcmVzID0gbXBfYWRkIChiLCAmdCwgYyk7CisgIH0gZWxzZSB7CisgICAgcmVzID0gTVBfT0tBWTsKKyAgICBtcF9leGNoICgmdCwgYyk7CisgIH0KKworICBtcF9jbGVhciAoJnQpOworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfbW9kLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX21vZF8yZC5jIGIvbGlidG9tbWF0aC9ibl9tcF9tb2RfMmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjFiMWIyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9tb2RfMmQuYwpAQCAtMCwwICsxLDU1IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX01PRF8yRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBjYWxjIGEgdmFsdWUgbW9kIDIqKmIgKi8KK2ludAorbXBfbW9kXzJkIChtcF9pbnQgKiBhLCBpbnQgYiwgbXBfaW50ICogYykKK3sKKyAgaW50ICAgICB4LCByZXM7CisKKyAgLyogaWYgYiBpcyA8PSAwIHRoZW4gemVybyB0aGUgaW50ICovCisgIGlmIChiIDw9IDApIHsKKyAgICBtcF96ZXJvIChjKTsKKyAgICByZXR1cm4gTVBfT0tBWTsKKyAgfQorCisgIC8qIGlmIHRoZSBtb2R1bHVzIGlzIGxhcmdlciB0aGFuIHRoZSB2YWx1ZSB0aGFuIHJldHVybiAqLworICBpZiAoYiA+PSAoaW50KSAoYS0+dXNlZCAqIERJR0lUX0JJVCkpIHsKKyAgICByZXMgPSBtcF9jb3B5IChhLCBjKTsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLyogY29weSAqLworICBpZiAoKHJlcyA9IG1wX2NvcHkgKGEsIGMpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIHplcm8gZGlnaXRzIGFib3ZlIHRoZSBsYXN0IGRpZ2l0IG9mIHRoZSBtb2R1bHVzICovCisgIGZvciAoeCA9IChiIC8gRElHSVRfQklUKSArICgoYiAlIERJR0lUX0JJVCkgPT0gMCA/IDAgOiAxKTsgeCA8IGMtPnVzZWQ7IHgrKykgeworICAgIGMtPmRwW3hdID0gMDsKKyAgfQorICAvKiBjbGVhciB0aGUgZGlnaXQgdGhhdCBpcyBub3QgY29tcGxldGVseSBvdXRzaWRlL2luc2lkZSB0aGUgbW9kdWx1cyAqLworICBjLT5kcFtiIC8gRElHSVRfQklUXSAmPQorICAgIChtcF9kaWdpdCkgKCgoKG1wX2RpZ2l0KSAxKSA8PCAoKChtcF9kaWdpdCkgYikgJSBESUdJVF9CSVQpKSAtICgobXBfZGlnaXQpIDEpKTsKKyAgbXBfY2xhbXAgKGMpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX21vZF8yZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9tb2RfZC5jIGIvbGlidG9tbWF0aC9ibl9tcF9tb2RfZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYzQ5OWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX21vZF9kLmMKQEAgLTAsMCArMSwyNyBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9NT0RfRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCitpbnQKK21wX21vZF9kIChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiLCBtcF9kaWdpdCAqIGMpCit7CisgIHJldHVybiBtcF9kaXZfZChhLCBiLCBOVUxMLCBjKTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX21vZF9kLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfY2FsY19ub3JtYWxpemF0aW9uLmMgYi9saWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfY2FsY19ub3JtYWxpemF0aW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFlYjVmZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9jYWxjX25vcm1hbGl6YXRpb24uYwpAQCAtMCwwICsxLDU5IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX01PTlRHT01FUllfQ0FMQ19OT1JNQUxJWkFUSU9OX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qCisgKiBzaGlmdHMgd2l0aCBzdWJ0cmFjdGlvbnMgd2hlbiB0aGUgcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBiLgorICoKKyAqIFRoZSBtZXRob2QgaXMgc2xpZ2h0bHkgbW9kaWZpZWQgdG8gc2hpZnQgQiB1bmNvbmRpdGlvbmFsbHkgdXB0byBqdXN0IHVuZGVyCisgKiB0aGUgbGVhZGluZyBiaXQgb2YgYi4gIFRoaXMgc2F2ZXMgYWxvdCBvZiBtdWx0aXBsZSBwcmVjaXNpb24gc2hpZnRpbmcuCisgKi8KK2ludCBtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbiAobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgaW50ICAgICB4LCBiaXRzLCByZXM7CisKKyAgLyogaG93IG1hbnkgYml0cyBvZiBsYXN0IGRpZ2l0IGRvZXMgYiB1c2UgKi8KKyAgYml0cyA9IG1wX2NvdW50X2JpdHMgKGIpICUgRElHSVRfQklUOworCisgIGlmIChiLT51c2VkID4gMSkgeworICAgICBpZiAoKHJlcyA9IG1wXzJleHB0IChhLCAoYi0+dXNlZCAtIDEpICogRElHSVRfQklUICsgYml0cyAtIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfSBlbHNlIHsKKyAgICAgbXBfc2V0KGEsIDEpOworICAgICBiaXRzID0gMTsKKyAgfQorCisKKyAgLyogbm93IGNvbXB1dGUgQyA9IEEgKiBCIG1vZCBiICovCisgIGZvciAoeCA9IGJpdHMgLSAxOyB4IDwgKGludClESUdJVF9CSVQ7IHgrKykgeworICAgIGlmICgocmVzID0gbXBfbXVsXzIgKGEsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBpZiAobXBfY21wX21hZyAoYSwgYikgIT0gTVBfTFQpIHsKKyAgICAgIGlmICgocmVzID0gc19tcF9zdWIgKGEsIGIsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIHJldHVybiByZXM7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9tb250Z29tZXJ5X3JlZHVjZS5jIGIvbGlidG9tbWF0aC9ibl9tcF9tb250Z29tZXJ5X3JlZHVjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMjFkMmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfcmVkdWNlLmMKQEAgLTAsMCArMSwxMTggQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfTU9OVEdPTUVSWV9SRURVQ0VfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY29tcHV0ZXMgeFIqKi0xID09IHggKG1vZCBOKSB2aWEgTW9udGdvbWVyeSBSZWR1Y3Rpb24gKi8KK2ludAorbXBfbW9udGdvbWVyeV9yZWR1Y2UgKG1wX2ludCAqIHgsIG1wX2ludCAqIG4sIG1wX2RpZ2l0IHJobykKK3sKKyAgaW50ICAgICBpeCwgcmVzLCBkaWdzOworICBtcF9kaWdpdCBtdTsKKworICAvKiBjYW4gdGhlIGZhc3QgcmVkdWN0aW9uIFtjb21iYV0gbWV0aG9kIGJlIHVzZWQ/CisgICAqCisgICAqIE5vdGUgdGhhdCB1bmxpa2UgaW4gbXVsIHlvdSdyZSBzYWZlbHkgYWxsb3dlZCAqbGVzcyoKKyAgICogdGhhbiB0aGUgYXZhaWxhYmxlIGNvbHVtbnMgWzI1NSBwZXIgZGVmYXVsdF0gc2luY2UgY2FycmllcworICAgKiBhcmUgZml4ZWQgdXAgaW4gdGhlIGlubmVyIGxvb3AuCisgICAqLworICBkaWdzID0gbi0+dXNlZCAqIDIgKyAxOworICBpZiAoKGRpZ3MgPCBNUF9XQVJSQVkpICYmCisgICAgICBuLT51c2VkIDwKKyAgICAgICgxIDw8ICgoQ0hBUl9CSVQgKiBzaXplb2YgKG1wX3dvcmQpKSAtICgyICogRElHSVRfQklUKSkpKSB7CisgICAgcmV0dXJuIGZhc3RfbXBfbW9udGdvbWVyeV9yZWR1Y2UgKHgsIG4sIHJobyk7CisgIH0KKworICAvKiBncm93IHRoZSBpbnB1dCBhcyByZXF1aXJlZCAqLworICBpZiAoeC0+YWxsb2MgPCBkaWdzKSB7CisgICAgaWYgKChyZXMgPSBtcF9ncm93ICh4LCBkaWdzKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKyAgeC0+dXNlZCA9IGRpZ3M7CisKKyAgZm9yIChpeCA9IDA7IGl4IDwgbi0+dXNlZDsgaXgrKykgeworICAgIC8qIG11ID0gYWkgKiByaG8gbW9kIGIKKyAgICAgKgorICAgICAqIFRoZSB2YWx1ZSBvZiByaG8gbXVzdCBiZSBwcmVjYWxjdWxhdGVkIHZpYQorICAgICAqIG1vbnRnb21lcnlfc2V0dXAoKSBzdWNoIHRoYXQKKyAgICAgKiBpdCBlcXVhbHMgLTEvbjAgbW9kIGIgdGhpcyBhbGxvd3MgdGhlCisgICAgICogZm9sbG93aW5nIGlubmVyIGxvb3AgdG8gcmVkdWNlIHRoZQorICAgICAqIGlucHV0IG9uZSBkaWdpdCBhdCBhIHRpbWUKKyAgICAgKi8KKyAgICBtdSA9IChtcF9kaWdpdCkgKCgobXBfd29yZCl4LT5kcFtpeF0pICogKChtcF93b3JkKXJobykgJiBNUF9NQVNLKTsKKworICAgIC8qIGEgPSBhICsgbXUgKiBtICogYioqaSAqLworICAgIHsKKyAgICAgIHJlZ2lzdGVyIGludCBpeTsKKyAgICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXBuLCAqdG1weCwgdTsKKyAgICAgIHJlZ2lzdGVyIG1wX3dvcmQgcjsKKworICAgICAgLyogYWxpYXMgZm9yIGRpZ2l0cyBvZiB0aGUgbW9kdWx1cyAqLworICAgICAgdG1wbiA9IG4tPmRwOworCisgICAgICAvKiBhbGlhcyBmb3IgdGhlIGRpZ2l0cyBvZiB4IFt0aGUgaW5wdXRdICovCisgICAgICB0bXB4ID0geC0+ZHAgKyBpeDsKKworICAgICAgLyogc2V0IHRoZSBjYXJyeSB0byB6ZXJvICovCisgICAgICB1ID0gMDsKKworICAgICAgLyogTXVsdGlwbHkgYW5kIGFkZCBpbiBwbGFjZSAqLworICAgICAgZm9yIChpeSA9IDA7IGl5IDwgbi0+dXNlZDsgaXkrKykgeworICAgICAgICAvKiBjb21wdXRlIHByb2R1Y3QgYW5kIHN1bSAqLworICAgICAgICByICAgICAgID0gKChtcF93b3JkKW11KSAqICgobXBfd29yZCkqdG1wbisrKSArCisgICAgICAgICAgICAgICAgICAoKG1wX3dvcmQpIHUpICsgKChtcF93b3JkKSAqIHRtcHgpOworCisgICAgICAgIC8qIGdldCBjYXJyeSAqLworICAgICAgICB1ICAgICAgID0gKG1wX2RpZ2l0KShyID4+ICgobXBfd29yZCkgRElHSVRfQklUKSk7CisKKyAgICAgICAgLyogZml4IGRpZ2l0ICovCisgICAgICAgICp0bXB4KysgPSAobXBfZGlnaXQpKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKKyAgICAgIH0KKyAgICAgIC8qIEF0IHRoaXMgcG9pbnQgdGhlIGl4J3RoIGRpZ2l0IG9mIHggc2hvdWxkIGJlIHplcm8gKi8KKworCisgICAgICAvKiBwcm9wYWdhdGUgY2FycmllcyB1cHdhcmRzIGFzIHJlcXVpcmVkKi8KKyAgICAgIHdoaWxlICh1KSB7CisgICAgICAgICp0bXB4ICAgKz0gdTsKKyAgICAgICAgdSAgICAgICAgPSAqdG1weCA+PiBESUdJVF9CSVQ7CisgICAgICAgICp0bXB4KysgJj0gTVBfTUFTSzsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvKiBhdCB0aGlzIHBvaW50IHRoZSBuLnVzZWQndGggbGVhc3QKKyAgICogc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHggYXJlIGFsbCB6ZXJvCisgICAqIHdoaWNoIG1lYW5zIHdlIGNhbiBzaGlmdCB4IHRvIHRoZQorICAgKiByaWdodCBieSBuLnVzZWQgZGlnaXRzIGFuZCB0aGUKKyAgICogcmVzaWR1ZSBpcyB1bmNoYW5nZWQuCisgICAqLworCisgIC8qIHggPSB4L2IqKm4udXNlZCAqLworICBtcF9jbGFtcCh4KTsKKyAgbXBfcnNoZCAoeCwgbi0+dXNlZCk7CisKKyAgLyogaWYgeCA+PSBuIHRoZW4geCA9IHggLSBuICovCisgIGlmIChtcF9jbXBfbWFnICh4LCBuKSAhPSBNUF9MVCkgeworICAgIHJldHVybiBzX21wX3N1YiAoeCwgbiwgeCk7CisgIH0KKworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfcmVkdWNlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfc2V0dXAuYyBiL2xpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYzgwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfc2V0dXAuYwpAQCAtMCwwICsxLDU5IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX01PTlRHT01FUllfU0VUVVBfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogc2V0dXBzIHRoZSBtb250Z29tZXJ5IHJlZHVjdGlvbiBzdHVmZiAqLworaW50CittcF9tb250Z29tZXJ5X3NldHVwIChtcF9pbnQgKiBuLCBtcF9kaWdpdCAqIHJobykKK3sKKyAgbXBfZGlnaXQgeCwgYjsKKworLyogZmFzdCBpbnZlcnNpb24gbW9kIDIqKmsKKyAqCisgKiBCYXNlZCBvbiB0aGUgZmFjdCB0aGF0CisgKgorICogWEEgPSAxIChtb2QgMioqbikgID0+ICAoWCgyLVhBKSkgQSA9IDEgKG1vZCAyKioybikKKyAqICAgICAgICAgICAgICAgICAgICA9PiAgMipYKkEgLSBYKlgqQSpBID0gMQorICogICAgICAgICAgICAgICAgICAgID0+ICAyKigxKSAtICgxKSAgICAgPSAxCisgKi8KKyAgYiA9IG4tPmRwWzBdOworCisgIGlmICgoYiAmIDEpID09IDApIHsKKyAgICByZXR1cm4gTVBfVkFMOworICB9CisKKyAgeCA9ICgoKGIgKyAyKSAmIDQpIDw8IDEpICsgYjsgLyogaGVyZSB4KmE9PTEgbW9kIDIqKjQgKi8KKyAgeCAqPSAyIC0gYiAqIHg7ICAgICAgICAgICAgICAgLyogaGVyZSB4KmE9PTEgbW9kIDIqKjggKi8KKyNpZiAhZGVmaW5lZChNUF84QklUKQorICB4ICo9IDIgLSBiICogeDsgICAgICAgICAgICAgICAvKiBoZXJlIHgqYT09MSBtb2QgMioqMTYgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTVBfNjRCSVQpIHx8ICEoZGVmaW5lZChNUF84QklUKSB8fCBkZWZpbmVkKE1QXzE2QklUKSkKKyAgeCAqPSAyIC0gYiAqIHg7ICAgICAgICAgICAgICAgLyogaGVyZSB4KmE9PTEgbW9kIDIqKjMyICovCisjZW5kaWYKKyNpZmRlZiBNUF82NEJJVAorICB4ICo9IDIgLSBiICogeDsgICAgICAgICAgICAgICAvKiBoZXJlIHgqYT09MSBtb2QgMioqNjQgKi8KKyNlbmRpZgorCisgIC8qIHJobyA9IC0xL20gbW9kIGIgKi8KKyAgKnJobyA9ICh1bnNpZ25lZCBsb25nKSgoKG1wX3dvcmQpMSA8PCAoKG1wX3dvcmQpIERJR0lUX0JJVCkpIC0geCkgJiBNUF9NQVNLOworCisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMjE6MzQ6MDMgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9tdWwuYyBiL2xpYnRvbW1hdGgvYm5fbXBfbXVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk0MWExYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfbXVsLmMKQEAgLTAsMCArMSw2NiBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9NVUxfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogaGlnaCBsZXZlbCBtdWx0aXBsaWNhdGlvbiAoaGFuZGxlcyBzaWduKSAqLworaW50IG1wX211bCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK3sKKyAgaW50ICAgICByZXMsIG5lZzsKKyAgbmVnID0gKGEtPnNpZ24gPT0gYi0+c2lnbikgPyBNUF9aUE9TIDogTVBfTkVHOworCisgIC8qIHVzZSBUb29tLUNvb2s/ICovCisjaWZkZWYgQk5fTVBfVE9PTV9NVUxfQworICBpZiAoTUlOIChhLT51c2VkLCBiLT51c2VkKSA+PSBUT09NX01VTF9DVVRPRkYpIHsKKyAgICByZXMgPSBtcF90b29tX211bChhLCBiLCBjKTsKKyAgfSBlbHNlIAorI2VuZGlmCisjaWZkZWYgQk5fTVBfS0FSQVRTVUJBX01VTF9DCisgIC8qIHVzZSBLYXJhdHN1YmE/ICovCisgIGlmIChNSU4gKGEtPnVzZWQsIGItPnVzZWQpID49IEtBUkFUU1VCQV9NVUxfQ1VUT0ZGKSB7CisgICAgcmVzID0gbXBfa2FyYXRzdWJhX211bCAoYSwgYiwgYyk7CisgIH0gZWxzZSAKKyNlbmRpZgorICB7CisgICAgLyogY2FuIHdlIHVzZSB0aGUgZmFzdCBtdWx0aXBsaWVyPworICAgICAqCisgICAgICogVGhlIGZhc3QgbXVsdGlwbGllciBjYW4gYmUgdXNlZCBpZiB0aGUgb3V0cHV0IHdpbGwgCisgICAgICogaGF2ZSBsZXNzIHRoYW4gTVBfV0FSUkFZIGRpZ2l0cyBhbmQgdGhlIG51bWJlciBvZiAKKyAgICAgKiBkaWdpdHMgd29uJ3QgYWZmZWN0IGNhcnJ5IHByb3BhZ2F0aW9uCisgICAgICovCisgICAgaW50ICAgICBkaWdzID0gYS0+dXNlZCArIGItPnVzZWQgKyAxOworCisjaWZkZWYgQk5fRkFTVF9TX01QX01VTF9ESUdTX0MKKyAgICBpZiAoKGRpZ3MgPCBNUF9XQVJSQVkpICYmCisgICAgICAgIE1JTihhLT51c2VkLCBiLT51c2VkKSA8PSAKKyAgICAgICAgKDEgPDwgKChDSEFSX0JJVCAqIHNpemVvZiAobXBfd29yZCkpIC0gKDIgKiBESUdJVF9CSVQpKSkpIHsKKyAgICAgIHJlcyA9IGZhc3Rfc19tcF9tdWxfZGlncyAoYSwgYiwgYywgZGlncyk7CisgICAgfSBlbHNlIAorI2VuZGlmCisjaWZkZWYgQk5fU19NUF9NVUxfRElHU19DCisgICAgICByZXMgPSBzX21wX211bCAoYSwgYiwgYyk7IC8qIHVzZXMgc19tcF9tdWxfZGlncyAqLworI2Vsc2UKKyAgICAgIHJlcyA9IE1QX1ZBTDsKKyNlbmRpZgorCisgIH0KKyAgYy0+c2lnbiA9IChjLT51c2VkID4gMCkgPyBuZWcgOiBNUF9aUE9TOworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfbXVsLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX211bF8yLmMgYi9saWJ0b21tYXRoL2JuX21wX211bF8yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyN2E5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfbXVsXzIuYwpAQCAtMCwwICsxLDgyIEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX01VTF8yX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGIgPSBhKjIgKi8KK2ludCBtcF9tdWxfMihtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQoreworICBpbnQgICAgIHgsIHJlcywgb2xkdXNlZDsKKworICAvKiBncm93IHRvIGFjY29tb2RhdGUgcmVzdWx0ICovCisgIGlmIChiLT5hbGxvYyA8IGEtPnVzZWQgKyAxKSB7CisgICAgaWYgKChyZXMgPSBtcF9ncm93IChiLCBhLT51c2VkICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisKKyAgb2xkdXNlZCA9IGItPnVzZWQ7CisgIGItPnVzZWQgPSBhLT51c2VkOworCisgIHsKKyAgICByZWdpc3RlciBtcF9kaWdpdCByLCByciwgKnRtcGEsICp0bXBiOworCisgICAgLyogYWxpYXMgZm9yIHNvdXJjZSAqLworICAgIHRtcGEgPSBhLT5kcDsKKyAgICAKKyAgICAvKiBhbGlhcyBmb3IgZGVzdCAqLworICAgIHRtcGIgPSBiLT5kcDsKKworICAgIC8qIGNhcnJ5ICovCisgICAgciA9IDA7CisgICAgZm9yICh4ID0gMDsgeCA8IGEtPnVzZWQ7IHgrKykgeworICAgIAorICAgICAgLyogZ2V0IHdoYXQgd2lsbCBiZSB0aGUgKm5leHQqIGNhcnJ5IGJpdCBmcm9tIHRoZSAKKyAgICAgICAqIE1TQiBvZiB0aGUgY3VycmVudCBkaWdpdCAKKyAgICAgICAqLworICAgICAgcnIgPSAqdG1wYSA+PiAoKG1wX2RpZ2l0KShESUdJVF9CSVQgLSAxKSk7CisgICAgICAKKyAgICAgIC8qIG5vdyBzaGlmdCB1cCB0aGlzIGRpZ2l0LCBhZGQgaW4gdGhlIGNhcnJ5IFtmcm9tIHRoZSBwcmV2aW91c10gKi8KKyAgICAgICp0bXBiKysgPSAoKCp0bXBhKysgPDwgKChtcF9kaWdpdCkxKSkgfCByKSAmIE1QX01BU0s7CisgICAgICAKKyAgICAgIC8qIGNvcHkgdGhlIGNhcnJ5IHRoYXQgd291bGQgYmUgZnJvbSB0aGUgc291cmNlIAorICAgICAgICogZGlnaXQgaW50byB0aGUgbmV4dCBpdGVyYXRpb24gCisgICAgICAgKi8KKyAgICAgIHIgPSBycjsKKyAgICB9CisKKyAgICAvKiBuZXcgbGVhZGluZyBkaWdpdD8gKi8KKyAgICBpZiAociAhPSAwKSB7CisgICAgICAvKiBhZGQgYSBNU0Igd2hpY2ggaXMgYWx3YXlzIDEgYXQgdGhpcyBwb2ludCAqLworICAgICAgKnRtcGIgPSAxOworICAgICAgKysoYi0+dXNlZCk7CisgICAgfQorCisgICAgLyogbm93IHplcm8gYW55IGV4Y2VzcyBkaWdpdHMgb24gdGhlIGRlc3RpbmF0aW9uIAorICAgICAqIHRoYXQgd2UgZGlkbid0IHdyaXRlIHRvIAorICAgICAqLworICAgIHRtcGIgPSBiLT5kcCArIGItPnVzZWQ7CisgICAgZm9yICh4ID0gYi0+dXNlZDsgeCA8IG9sZHVzZWQ7IHgrKykgeworICAgICAgKnRtcGIrKyA9IDA7CisgICAgfQorICB9CisgIGItPnNpZ24gPSBhLT5zaWduOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX211bF8yLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX211bF8yZC5jIGIvbGlidG9tbWF0aC9ibl9tcF9tdWxfMmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODAzYmY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9tdWxfMmQuYwpAQCAtMCwwICsxLDg1IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX01VTF8yRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBzaGlmdCBsZWZ0IGJ5IGEgY2VydGFpbiBiaXQgY291bnQgKi8KK2ludCBtcF9tdWxfMmQgKG1wX2ludCAqIGEsIGludCBiLCBtcF9pbnQgKiBjKQoreworICBtcF9kaWdpdCBkOworICBpbnQgICAgICByZXM7CisKKyAgLyogY29weSAqLworICBpZiAoYSAhPSBjKSB7CisgICAgIGlmICgocmVzID0gbXBfY29weSAoYSwgYykpICE9IE1QX09LQVkpIHsKKyAgICAgICByZXR1cm4gcmVzOworICAgICB9CisgIH0KKworICBpZiAoYy0+YWxsb2MgPCAoaW50KShjLT51c2VkICsgYi9ESUdJVF9CSVQgKyAxKSkgeworICAgICBpZiAoKHJlcyA9IG1wX2dyb3cgKGMsIGMtPnVzZWQgKyBiIC8gRElHSVRfQklUICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICByZXR1cm4gcmVzOworICAgICB9CisgIH0KKworICAvKiBzaGlmdCBieSBhcyBtYW55IGRpZ2l0cyBpbiB0aGUgYml0IGNvdW50ICovCisgIGlmIChiID49IChpbnQpRElHSVRfQklUKSB7CisgICAgaWYgKChyZXMgPSBtcF9sc2hkIChjLCBiIC8gRElHSVRfQklUKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKworICAvKiBzaGlmdCBhbnkgYml0IGNvdW50IDwgRElHSVRfQklUICovCisgIGQgPSAobXBfZGlnaXQpIChiICUgRElHSVRfQklUKTsKKyAgaWYgKGQgIT0gMCkgeworICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXBjLCBzaGlmdCwgbWFzaywgciwgcnI7CisgICAgcmVnaXN0ZXIgaW50IHg7CisKKyAgICAvKiBiaXRtYXNrIGZvciBjYXJyaWVzICovCisgICAgbWFzayA9ICgoKG1wX2RpZ2l0KTEpIDw8IGQpIC0gMTsKKworICAgIC8qIHNoaWZ0IGZvciBtc2JzICovCisgICAgc2hpZnQgPSBESUdJVF9CSVQgLSBkOworCisgICAgLyogYWxpYXMgKi8KKyAgICB0bXBjID0gYy0+ZHA7CisKKyAgICAvKiBjYXJyeSAqLworICAgIHIgICAgPSAwOworICAgIGZvciAoeCA9IDA7IHggPCBjLT51c2VkOyB4KyspIHsKKyAgICAgIC8qIGdldCB0aGUgaGlnaGVyIGJpdHMgb2YgdGhlIGN1cnJlbnQgd29yZCAqLworICAgICAgcnIgPSAoKnRtcGMgPj4gc2hpZnQpICYgbWFzazsKKworICAgICAgLyogc2hpZnQgdGhlIGN1cnJlbnQgd29yZCBhbmQgT1IgaW4gdGhlIGNhcnJ5ICovCisgICAgICAqdG1wYyA9ICgoKnRtcGMgPDwgZCkgfCByKSAmIE1QX01BU0s7CisgICAgICArK3RtcGM7CisKKyAgICAgIC8qIHNldCB0aGUgY2FycnkgdG8gdGhlIGNhcnJ5IGJpdHMgb2YgdGhlIGN1cnJlbnQgd29yZCAqLworICAgICAgciA9IHJyOworICAgIH0KKyAgICAKKyAgICAvKiBzZXQgZmluYWwgY2FycnkgKi8KKyAgICBpZiAociAhPSAwKSB7CisgICAgICAgYy0+ZHBbKGMtPnVzZWQpKytdID0gcjsKKyAgICB9CisgIH0KKyAgbXBfY2xhbXAgKGMpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX211bF8yZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9tdWxfZC5jIGIvbGlidG9tbWF0aC9ibl9tcF9tdWxfZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MzI0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX211bF9kLmMKQEAgLTAsMCArMSw3OSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9NVUxfRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBtdWx0aXBseSBieSBhIGRpZ2l0ICovCitpbnQKK21wX211bF9kIChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiLCBtcF9pbnQgKiBjKQoreworICBtcF9kaWdpdCB1LCAqdG1wYSwgKnRtcGM7CisgIG1wX3dvcmQgIHI7CisgIGludCAgICAgIGl4LCByZXMsIG9sZHVzZTsKKworICAvKiBtYWtlIHN1cmUgYyBpcyBiaWcgZW5vdWdoIHRvIGhvbGQgYSpiICovCisgIGlmIChjLT5hbGxvYyA8IGEtPnVzZWQgKyAxKSB7CisgICAgaWYgKChyZXMgPSBtcF9ncm93IChjLCBhLT51c2VkICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisKKyAgLyogZ2V0IHRoZSBvcmlnaW5hbCBkZXN0aW5hdGlvbnMgdXNlZCBjb3VudCAqLworICBvbGR1c2UgPSBjLT51c2VkOworCisgIC8qIHNldCB0aGUgc2lnbiAqLworICBjLT5zaWduID0gYS0+c2lnbjsKKworICAvKiBhbGlhcyBmb3IgYS0+ZHAgW3NvdXJjZV0gKi8KKyAgdG1wYSA9IGEtPmRwOworCisgIC8qIGFsaWFzIGZvciBjLT5kcCBbZGVzdF0gKi8KKyAgdG1wYyA9IGMtPmRwOworCisgIC8qIHplcm8gY2FycnkgKi8KKyAgdSA9IDA7CisKKyAgLyogY29tcHV0ZSBjb2x1bW5zICovCisgIGZvciAoaXggPSAwOyBpeCA8IGEtPnVzZWQ7IGl4KyspIHsKKyAgICAvKiBjb21wdXRlIHByb2R1Y3QgYW5kIGNhcnJ5IHN1bSBmb3IgdGhpcyB0ZXJtICovCisgICAgciAgICAgICA9ICgobXBfd29yZCkgdSkgKyAoKG1wX3dvcmQpKnRtcGErKykgKiAoKG1wX3dvcmQpYik7CisKKyAgICAvKiBtYXNrIG9mZiBoaWdoZXIgYml0cyB0byBnZXQgYSBzaW5nbGUgZGlnaXQgKi8KKyAgICAqdG1wYysrID0gKG1wX2RpZ2l0KSAociAmICgobXBfd29yZCkgTVBfTUFTSykpOworCisgICAgLyogc2VuZCBjYXJyeSBpbnRvIG5leHQgaXRlcmF0aW9uICovCisgICAgdSAgICAgICA9IChtcF9kaWdpdCkgKHIgPj4gKChtcF93b3JkKSBESUdJVF9CSVQpKTsKKyAgfQorCisgIC8qIHN0b3JlIGZpbmFsIGNhcnJ5IFtpZiBhbnldIGFuZCBpbmNyZW1lbnQgaXggb2Zmc2V0ICAqLworICAqdG1wYysrID0gdTsKKyAgKytpeDsKKworICAvKiBub3cgemVybyBkaWdpdHMgYWJvdmUgdGhlIHRvcCAqLworICB3aGlsZSAoaXgrKyA8IG9sZHVzZSkgeworICAgICAqdG1wYysrID0gMDsKKyAgfQorCisgIC8qIHNldCB1c2VkIGNvdW50ICovCisgIGMtPnVzZWQgPSBhLT51c2VkICsgMTsKKyAgbXBfY2xhbXAoYyk7CisKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9tdWxfZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9tdWxtb2QuYyBiL2xpYnRvbW1hdGgvYm5fbXBfbXVsbW9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY4MThiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfbXVsbW9kLmMKQEAgLTAsMCArMSw0MCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9NVUxNT0RfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZCA9IGEgKiBiIChtb2QgYykgKi8KK2ludCBtcF9tdWxtb2QgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIG1wX2ludCAqIGQpCit7CisgIGludCAgICAgcmVzOworICBtcF9pbnQgIHQ7CisKKyAgaWYgKChyZXMgPSBtcF9pbml0ICgmdCkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9tdWwgKGEsIGIsICZ0KSkgIT0gTVBfT0tBWSkgeworICAgIG1wX2NsZWFyICgmdCk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorICByZXMgPSBtcF9tb2QgKCZ0LCBjLCBkKTsKKyAgbXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX211bG1vZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9uX3Jvb3QuYyBiL2xpYnRvbW1hdGgvYm5fbXBfbl9yb290LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE1NDAxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfbl9yb290LmMKQEAgLTAsMCArMSwxMzIgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfTl9ST09UX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGZpbmQgdGhlIG4ndGggcm9vdCBvZiBhbiBpbnRlZ2VyIAorICoKKyAqIFJlc3VsdCBmb3VuZCBzdWNoIHRoYXQgKGMpKipiIDw9IGEgYW5kIChjKzEpKipiID4gYSAKKyAqCisgKiBUaGlzIGFsZ29yaXRobSB1c2VzIE5ld3RvbidzIGFwcHJveGltYXRpb24gCisgKiB4W2krMV0gPSB4W2ldIC0gZih4W2ldKS9mJyh4W2ldKSAKKyAqIHdoaWNoIHdpbGwgZmluZCB0aGUgcm9vdCBpbiBsb2coTikgdGltZSB3aGVyZSAKKyAqIGVhY2ggc3RlcCBpbnZvbHZlcyBhIGZhaXIgYml0LiAgVGhpcyBpcyBub3QgbWVhbnQgdG8gCisgKiBmaW5kIGh1Z2Ugcm9vdHMgW3NxdWFyZSBhbmQgY3ViZSwgZXRjXS4KKyAqLworaW50IG1wX25fcm9vdCAobXBfaW50ICogYSwgbXBfZGlnaXQgYiwgbXBfaW50ICogYykKK3sKKyAgbXBfaW50ICB0MSwgdDIsIHQzOworICBpbnQgICAgIHJlcywgbmVnOworCisgIC8qIGlucHV0IG11c3QgYmUgcG9zaXRpdmUgaWYgYiBpcyBldmVuICovCisgIGlmICgoYiAmIDEpID09IDAgJiYgYS0+c2lnbiA9PSBNUF9ORUcpIHsKKyAgICByZXR1cm4gTVBfVkFMOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9pbml0ICgmdDEpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIGlmICgocmVzID0gbXBfaW5pdCAoJnQyKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1QxOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9pbml0ICgmdDMpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfVDI7CisgIH0KKworICAvKiBpZiBhIGlzIG5lZ2F0aXZlIGZ1ZGdlIHRoZSBzaWduIGJ1dCBrZWVwIHRyYWNrICovCisgIG5lZyAgICAgPSBhLT5zaWduOworICBhLT5zaWduID0gTVBfWlBPUzsKKworICAvKiB0MiA9IDIgKi8KKyAgbXBfc2V0ICgmdDIsIDIpOworCisgIGRvIHsKKyAgICAvKiB0MSA9IHQyICovCisgICAgaWYgKChyZXMgPSBtcF9jb3B5ICgmdDIsICZ0MSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX1QzOworICAgIH0KKworICAgIC8qIHQyID0gdDEgLSAoKHQxKipiIC0gYSkgLyAoYiAqIHQxKiooYi0xKSkpICovCisgICAgCisgICAgLyogdDMgPSB0MSoqKGItMSkgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2V4cHRfZCAoJnQxLCBiIC0gMSwgJnQzKSkgIT0gTVBfT0tBWSkgeyAgIAorICAgICAgZ290byBMQkxfVDM7CisgICAgfQorCisgICAgLyogbnVtZXJhdG9yICovCisgICAgLyogdDIgPSB0MSoqYiAqLworICAgIGlmICgocmVzID0gbXBfbXVsICgmdDMsICZ0MSwgJnQyKSkgIT0gTVBfT0tBWSkgeyAgICAKKyAgICAgIGdvdG8gTEJMX1QzOworICAgIH0KKworICAgIC8qIHQyID0gdDEqKmIgLSBhICovCisgICAgaWYgKChyZXMgPSBtcF9zdWIgKCZ0MiwgYSwgJnQyKSkgIT0gTVBfT0tBWSkgeyAgCisgICAgICBnb3RvIExCTF9UMzsKKyAgICB9CisKKyAgICAvKiBkZW5vbWluYXRvciAqLworICAgIC8qIHQzID0gdDEqKihiLTEpICogYiAgKi8KKyAgICBpZiAoKHJlcyA9IG1wX211bF9kICgmdDMsIGIsICZ0MykpICE9IE1QX09LQVkpIHsgICAgCisgICAgICBnb3RvIExCTF9UMzsKKyAgICB9CisKKyAgICAvKiB0MyA9ICh0MSoqYiAtIGEpLyhiICogdDEqKihiLTEpKSAqLworICAgIGlmICgocmVzID0gbXBfZGl2ICgmdDIsICZ0MywgJnQzLCBOVUxMKSkgIT0gTVBfT0tBWSkgeyAgCisgICAgICBnb3RvIExCTF9UMzsKKyAgICB9CisKKyAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJnQxLCAmdDMsICZ0MikpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX1QzOworICAgIH0KKyAgfSAgd2hpbGUgKG1wX2NtcCAoJnQxLCAmdDIpICE9IE1QX0VRKTsKKworICAvKiByZXN1bHQgY2FuIGJlIG9mZiBieSBhIGZldyBzbyBjaGVjayAqLworICBmb3IgKDs7KSB7CisgICAgaWYgKChyZXMgPSBtcF9leHB0X2QgKCZ0MSwgYiwgJnQyKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfVDM7CisgICAgfQorCisgICAgaWYgKG1wX2NtcCAoJnQyLCBhKSA9PSBNUF9HVCkgeworICAgICAgaWYgKChyZXMgPSBtcF9zdWJfZCAoJnQxLCAxLCAmdDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICBnb3RvIExCTF9UMzsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7CisgICAgfQorICB9CisKKyAgLyogcmVzZXQgdGhlIHNpZ24gb2YgYSBmaXJzdCAqLworICBhLT5zaWduID0gbmVnOworCisgIC8qIHNldCB0aGUgcmVzdWx0ICovCisgIG1wX2V4Y2ggKCZ0MSwgYyk7CisKKyAgLyogc2V0IHRoZSBzaWduIG9mIHRoZSByZXN1bHQgKi8KKyAgYy0+c2lnbiA9IG5lZzsKKworICByZXMgPSBNUF9PS0FZOworCitMQkxfVDM6bXBfY2xlYXIgKCZ0Myk7CitMQkxfVDI6bXBfY2xlYXIgKCZ0Mik7CitMQkxfVDE6bXBfY2xlYXIgKCZ0MSk7CisgIHJldHVybiByZXM7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9uX3Jvb3QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfbmVnLmMgYi9saWJ0b21tYXRoL2JuX21wX25lZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkYjliNDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX25lZy5jCkBAIC0wLDAgKzEsNDAgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfTkVHX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGIgPSAtYSAqLworaW50IG1wX25lZyAobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgaW50ICAgICByZXM7CisgIGlmIChhICE9IGIpIHsKKyAgICAgaWYgKChyZXMgPSBtcF9jb3B5IChhLCBiKSkgIT0gTVBfT0tBWSkgeworICAgICAgICByZXR1cm4gcmVzOworICAgICB9CisgIH0KKworICBpZiAobXBfaXN6ZXJvKGIpICE9IE1QX1lFUykgeworICAgICBiLT5zaWduID0gKGEtPnNpZ24gPT0gTVBfWlBPUykgPyBNUF9ORUcgOiBNUF9aUE9TOworICB9IGVsc2UgeworICAgICBiLT5zaWduID0gTVBfWlBPUzsKKyAgfQorCisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfbmVnLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX29yLmMgYi9saWJ0b21tYXRoL2JuX21wX29yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmYzc0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfb3IuYwpAQCAtMCwwICsxLDUwIEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX09SX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIE9SIHR3byBpbnRzIHRvZ2V0aGVyICovCitpbnQgbXBfb3IgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpCit7CisgIGludCAgICAgcmVzLCBpeCwgcHg7CisgIG1wX2ludCAgdCwgKng7CisKKyAgaWYgKGEtPnVzZWQgPiBiLT51c2VkKSB7CisgICAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkgKCZ0LCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgcHggPSBiLT51c2VkOworICAgIHggPSBiOworICB9IGVsc2UgeworICAgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmdCwgYikpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHB4ID0gYS0+dXNlZDsKKyAgICB4ID0gYTsKKyAgfQorCisgIGZvciAoaXggPSAwOyBpeCA8IHB4OyBpeCsrKSB7CisgICAgdC5kcFtpeF0gfD0geC0+ZHBbaXhdOworICB9CisgIG1wX2NsYW1wICgmdCk7CisgIG1wX2V4Y2ggKGMsICZ0KTsKKyAgbXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9vci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9wcmltZV9mZXJtYXQuYyBiL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfZmVybWF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg2OTg2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfZmVybWF0LmMKQEAgLTAsMCArMSw2MiBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9QUklNRV9GRVJNQVRfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogcGVyZm9ybXMgb25lIEZlcm1hdCB0ZXN0LgorICogCisgKiBJZiAiYSIgd2VyZSBwcmltZSB0aGVuIGIqKmEgPT0gYiAobW9kIGEpIHNpbmNlIHRoZSBvcmRlciBvZgorICogdGhlIG11bHRpcGxpY2F0aXZlIHN1Yi1ncm91cCB3b3VsZCBiZSBwaGkoYSkgPSBhLTEuICBUaGF0IG1lYW5zCisgKiBpdCB3b3VsZCBiZSB0aGUgc2FtZSBhcyBiKiooYSBtb2QgKGEtMSkpID09IGIqKjEgPT0gYiAobW9kIGEpLgorICoKKyAqIFNldHMgcmVzdWx0IHRvIDEgaWYgdGhlIGNvbmdydWVuY2UgaG9sZHMsIG9yIHplcm8gb3RoZXJ3aXNlLgorICovCitpbnQgbXBfcHJpbWVfZmVybWF0IChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBpbnQgKnJlc3VsdCkKK3sKKyAgbXBfaW50ICB0OworICBpbnQgICAgIGVycjsKKworICAvKiBkZWZhdWx0IHRvIGNvbXBvc2l0ZSAgKi8KKyAgKnJlc3VsdCA9IE1QX05POworCisgIC8qIGVuc3VyZSBiID4gMSAqLworICBpZiAobXBfY21wX2QoYiwgMSkgIT0gTVBfR1QpIHsKKyAgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIGluaXQgdCAqLworICBpZiAoKGVyciA9IG1wX2luaXQgKCZ0KSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiBlcnI7CisgIH0KKworICAvKiBjb21wdXRlIHQgPSBiKiphIG1vZCBhICovCisgIGlmICgoZXJyID0gbXBfZXhwdG1vZCAoYiwgYSwgYSwgJnQpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfVDsKKyAgfQorCisgIC8qIGlzIGl0IGVxdWFsIHRvIGI/ICovCisgIGlmIChtcF9jbXAgKCZ0LCBiKSA9PSBNUF9FUSkgeworICAgICpyZXN1bHQgPSBNUF9ZRVM7CisgIH0KKworICBlcnIgPSBNUF9PS0FZOworTEJMX1Q6bXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3ByaW1lX2Zlcm1hdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9wcmltZV9pc19kaXZpc2libGUuYyBiL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfaXNfZGl2aXNpYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2NTQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfaXNfZGl2aXNpYmxlLmMKQEAgLTAsMCArMSw1MCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9QUklNRV9JU19ESVZJU0lCTEVfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZGV0ZXJtaW5lcyBpZiBhbiBpbnRlZ2VycyBpcyBkaXZpc2libGUgYnkgb25lIAorICogb2YgdGhlIGZpcnN0IFBSSU1FX1NJWkUgcHJpbWVzIG9yIG5vdAorICoKKyAqIHNldHMgcmVzdWx0IHRvIDAgaWYgbm90LCAxIGlmIHllcworICovCitpbnQgbXBfcHJpbWVfaXNfZGl2aXNpYmxlIChtcF9pbnQgKiBhLCBpbnQgKnJlc3VsdCkKK3sKKyAgaW50ICAgICBlcnIsIGl4OworICBtcF9kaWdpdCByZXM7CisKKyAgLyogZGVmYXVsdCB0byBub3QgKi8KKyAgKnJlc3VsdCA9IE1QX05POworCisgIGZvciAoaXggPSAwOyBpeCA8IFBSSU1FX1NJWkU7IGl4KyspIHsKKyAgICAvKiB3aGF0IGlzIGEgbW9kIExCTF9wcmltZV90YWJbaXhdICovCisgICAgaWYgKChlcnIgPSBtcF9tb2RfZCAoYSwgbHRtX3ByaW1lX3RhYltpeF0sICZyZXMpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIC8qIGlzIHRoZSByZXNpZHVlIHplcm8/ICovCisgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAqcmVzdWx0ID0gTVBfWUVTOworICAgICAgcmV0dXJuIE1QX09LQVk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9wcmltZV9pc19kaXZpc2libGUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfaXNfcHJpbWUuYyBiL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfaXNfcHJpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTNkNDZhCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9wcmltZV9pc19wcmltZS5jCkBAIC0wLDAgKzEsODMgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfUFJJTUVfSVNfUFJJTUVfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogcGVyZm9ybXMgYSB2YXJpYWJsZSBudW1iZXIgb2Ygcm91bmRzIG9mIE1pbGxlci1SYWJpbgorICoKKyAqIFByb2JhYmlsaXR5IG9mIGVycm9yIGFmdGVyIHQgcm91bmRzIGlzIG5vIG1vcmUgdGhhbgorCisgKgorICogU2V0cyByZXN1bHQgdG8gMSBpZiBwcm9iYWJseSBwcmltZSwgMCBvdGhlcndpc2UKKyAqLworaW50IG1wX3ByaW1lX2lzX3ByaW1lIChtcF9pbnQgKiBhLCBpbnQgdCwgaW50ICpyZXN1bHQpCit7CisgIG1wX2ludCAgYjsKKyAgaW50ICAgICBpeCwgZXJyLCByZXM7CisKKyAgLyogZGVmYXVsdCB0byBubyAqLworICAqcmVzdWx0ID0gTVBfTk87CisKKyAgLyogdmFsaWQgdmFsdWUgb2YgdD8gKi8KKyAgaWYgKHQgPD0gMCB8fCB0ID4gUFJJTUVfU0laRSkgeworICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworICAvKiBpcyB0aGUgaW5wdXQgZXF1YWwgdG8gb25lIG9mIHRoZSBwcmltZXMgaW4gdGhlIHRhYmxlPyAqLworICBmb3IgKGl4ID0gMDsgaXggPCBQUklNRV9TSVpFOyBpeCsrKSB7CisgICAgICBpZiAobXBfY21wX2QoYSwgbHRtX3ByaW1lX3RhYltpeF0pID09IE1QX0VRKSB7CisgICAgICAgICAqcmVzdWx0ID0gMTsKKyAgICAgICAgIHJldHVybiBNUF9PS0FZOworICAgICAgfQorICB9CisKKyAgLyogZmlyc3QgcGVyZm9ybSB0cmlhbCBkaXZpc2lvbiAqLworICBpZiAoKGVyciA9IG1wX3ByaW1lX2lzX2RpdmlzaWJsZSAoYSwgJnJlcykpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gZXJyOworICB9CisKKyAgLyogcmV0dXJuIGlmIGl0IHdhcyB0cml2aWFsbHkgZGl2aXNpYmxlICovCisgIGlmIChyZXMgPT0gTVBfWUVTKSB7CisgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICAvKiBub3cgcGVyZm9ybSB0aGUgbWlsbGVyLXJhYmluIHJvdW5kcyAqLworICBpZiAoKGVyciA9IG1wX2luaXQgKCZiKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiBlcnI7CisgIH0KKworICBmb3IgKGl4ID0gMDsgaXggPCB0OyBpeCsrKSB7CisgICAgLyogc2V0IHRoZSBwcmltZSAqLworICAgIG1wX3NldCAoJmIsIGx0bV9wcmltZV90YWJbaXhdKTsKKworICAgIGlmICgoZXJyID0gbXBfcHJpbWVfbWlsbGVyX3JhYmluIChhLCAmYiwgJnJlcykpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX0I7CisgICAgfQorCisgICAgaWYgKHJlcyA9PSBNUF9OTykgeworICAgICAgZ290byBMQkxfQjsKKyAgICB9CisgIH0KKworICAvKiBwYXNzZWQgdGhlIHRlc3QgKi8KKyAgKnJlc3VsdCA9IE1QX1lFUzsKK0xCTF9COm1wX2NsZWFyICgmYik7CisgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9wcmltZV9pc19wcmltZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9wcmltZV9taWxsZXJfcmFiaW4uYyBiL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfbWlsbGVyX3JhYmluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJkNmJhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfbWlsbGVyX3JhYmluLmMKQEAgLTAsMCArMSwxMDMgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfUFJJTUVfTUlMTEVSX1JBQklOX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIE1pbGxlci1SYWJpbiB0ZXN0IG9mICJhIiB0byB0aGUgYmFzZSBvZiAiYiIgYXMgZGVzY3JpYmVkIGluIAorICogSEFDIHBwLiAxMzkgQWxnb3JpdGhtIDQuMjQKKyAqCisgKiBTZXRzIHJlc3VsdCB0byAwIGlmIGRlZmluaXRlbHkgY29tcG9zaXRlIG9yIDEgaWYgcHJvYmFibHkgcHJpbWUuCisgKiBSYW5kb21seSB0aGUgY2hhbmNlIG9mIGVycm9yIGlzIG5vIG1vcmUgdGhhbiAxLzQgYW5kIG9mdGVuIAorICogdmVyeSBtdWNoIGxvd2VyLgorICovCitpbnQgbXBfcHJpbWVfbWlsbGVyX3JhYmluIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBpbnQgKnJlc3VsdCkKK3sKKyAgbXBfaW50ICBuMSwgeSwgcjsKKyAgaW50ICAgICBzLCBqLCBlcnI7CisKKyAgLyogZGVmYXVsdCAqLworICAqcmVzdWx0ID0gTVBfTk87CisKKyAgLyogZW5zdXJlIGIgPiAxICovCisgIGlmIChtcF9jbXBfZChiLCAxKSAhPSBNUF9HVCkgeworICAgICByZXR1cm4gTVBfVkFMOworICB9ICAgICAKKworICAvKiBnZXQgbjEgPSBhIC0gMSAqLworICBpZiAoKGVyciA9IG1wX2luaXRfY29weSAoJm4xLCBhKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiBlcnI7CisgIH0KKyAgaWYgKChlcnIgPSBtcF9zdWJfZCAoJm4xLCAxLCAmbjEpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfTjE7CisgIH0KKworICAvKiBzZXQgMioqcyAqIHIgPSBuMSAqLworICBpZiAoKGVyciA9IG1wX2luaXRfY29weSAoJnIsICZuMSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9OMTsKKyAgfQorCisgIC8qIGNvdW50IHRoZSBudW1iZXIgb2YgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cworICAgKiB3aGljaCBhcmUgemVybworICAgKi8KKyAgcyA9IG1wX2NudF9sc2IoJnIpOworCisgIC8qIG5vdyBkaXZpZGUgbiAtIDEgYnkgMioqcyAqLworICBpZiAoKGVyciA9IG1wX2Rpdl8yZCAoJnIsIHMsICZyLCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1I7CisgIH0KKworICAvKiBjb21wdXRlIHkgPSBiKipyIG1vZCBhICovCisgIGlmICgoZXJyID0gbXBfaW5pdCAoJnkpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfUjsKKyAgfQorICBpZiAoKGVyciA9IG1wX2V4cHRtb2QgKGIsICZyLCBhLCAmeSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9ZOworICB9CisKKyAgLyogaWYgeSAhPSAxIGFuZCB5ICE9IG4xIGRvICovCisgIGlmIChtcF9jbXBfZCAoJnksIDEpICE9IE1QX0VRICYmIG1wX2NtcCAoJnksICZuMSkgIT0gTVBfRVEpIHsKKyAgICBqID0gMTsKKyAgICAvKiB3aGlsZSBqIDw9IHMtMSBhbmQgeSAhPSBuMSAqLworICAgIHdoaWxlICgoaiA8PSAocyAtIDEpKSAmJiBtcF9jbXAgKCZ5LCAmbjEpICE9IE1QX0VRKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3Nxcm1vZCAoJnksIGEsICZ5KSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgZ290byBMQkxfWTsKKyAgICAgIH0KKworICAgICAgLyogaWYgeSA9PSAxIHRoZW4gY29tcG9zaXRlICovCisgICAgICBpZiAobXBfY21wX2QgKCZ5LCAxKSA9PSBNUF9FUSkgeworICAgICAgICAgZ290byBMQkxfWTsKKyAgICAgIH0KKworICAgICAgKytqOworICAgIH0KKworICAgIC8qIGlmIHkgIT0gbjEgdGhlbiBjb21wb3NpdGUgKi8KKyAgICBpZiAobXBfY21wICgmeSwgJm4xKSAhPSBNUF9FUSkgeworICAgICAgZ290byBMQkxfWTsKKyAgICB9CisgIH0KKworICAvKiBwcm9iYWJseSBwcmltZSBub3cgKi8KKyAgKnJlc3VsdCA9IE1QX1lFUzsKK0xCTF9ZOm1wX2NsZWFyICgmeSk7CitMQkxfUjptcF9jbGVhciAoJnIpOworTEJMX04xOm1wX2NsZWFyICgmbjEpOworICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfbWlsbGVyX3JhYmluLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3ByaW1lX25leHRfcHJpbWUuYyBiL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfbmV4dF9wcmltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyZGEzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX3ByaW1lX25leHRfcHJpbWUuYwpAQCAtMCwwICsxLDE3MCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9QUklNRV9ORVhUX1BSSU1FX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGZpbmRzIHRoZSBuZXh0IHByaW1lIGFmdGVyIHRoZSBudW1iZXIgImEiIHVzaW5nICJ0IiB0cmlhbHMKKyAqIG9mIE1pbGxlci1SYWJpbi4KKyAqCisgKiBiYnNfc3R5bGUgPSAxIG1lYW5zIHRoZSBwcmltZSBtdXN0IGJlIGNvbmdydWVudCB0byAzIG1vZCA0CisgKi8KK2ludCBtcF9wcmltZV9uZXh0X3ByaW1lKG1wX2ludCAqYSwgaW50IHQsIGludCBiYnNfc3R5bGUpCit7CisgICBpbnQgICAgICBlcnIsIHJlcywgeCwgeTsKKyAgIG1wX2RpZ2l0IHJlc190YWJbUFJJTUVfU0laRV0sIHN0ZXAsIGtzdGVwOworICAgbXBfaW50ICAgYjsKKworICAgLyogZW5zdXJlIHQgaXMgdmFsaWQgKi8KKyAgIGlmICh0IDw9IDAgfHwgdCA+IFBSSU1FX1NJWkUpIHsKKyAgICAgIHJldHVybiBNUF9WQUw7CisgICB9CisKKyAgIC8qIGZvcmNlIHBvc2l0aXZlICovCisgICBhLT5zaWduID0gTVBfWlBPUzsKKworICAgLyogc2ltcGxlIGFsZ28gaWYgYSBpcyBsZXNzIHRoYW4gdGhlIGxhcmdlc3QgcHJpbWUgaW4gdGhlIHRhYmxlICovCisgICBpZiAobXBfY21wX2QoYSwgbHRtX3ByaW1lX3RhYltQUklNRV9TSVpFLTFdKSA9PSBNUF9MVCkgeworICAgICAgLyogZmluZCB3aGljaCBwcmltZSBpdCBpcyBiaWdnZXIgdGhhbiAqLworICAgICAgZm9yICh4ID0gUFJJTUVfU0laRSAtIDI7IHggPj0gMDsgeC0tKSB7CisgICAgICAgICAgaWYgKG1wX2NtcF9kKGEsIGx0bV9wcmltZV90YWJbeF0pICE9IE1QX0xUKSB7CisgICAgICAgICAgICAgaWYgKGJic19zdHlsZSA9PSAxKSB7CisgICAgICAgICAgICAgICAgLyogb2sgd2UgZm91bmQgYSBwcmltZSBzbWFsbGVyIG9yCisgICAgICAgICAgICAgICAgICogZXF1YWwgW3NvIHRoZSBuZXh0IGlzIGxhcmdlcl0KKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAqIGhvd2V2ZXIsIHRoZSBwcmltZSBtdXN0IGJlCisgICAgICAgICAgICAgICAgICogY29uZ3J1ZW50IHRvIDMgbW9kIDQKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoKGx0bV9wcmltZV90YWJbeCArIDFdICYgMykgIT0gMykgeworICAgICAgICAgICAgICAgICAgIC8qIHNjYW4gdXB3YXJkcyBmb3IgYSBwcmltZSBjb25ncnVlbnQgdG8gMyBtb2QgNCAqLworICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IHggKyAxOyB5IDwgUFJJTUVfU0laRTsgeSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgIGlmICgobHRtX3ByaW1lX3RhYlt5XSAmIDMpID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc2V0KGEsIGx0bV9wcmltZV90YWJbeV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTVBfT0tBWTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtcF9zZXQoYSwgbHRtX3ByaW1lX3RhYlt4ICsgMV0pOworICAgICAgICAgICAgICAgIHJldHVybiBNUF9PS0FZOworICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICB9CisgICAgICAvKiBhdCB0aGlzIHBvaW50IGEgbWF5YmUgMSAqLworICAgICAgaWYgKG1wX2NtcF9kKGEsIDEpID09IE1QX0VRKSB7CisgICAgICAgICBtcF9zZXQoYSwgMik7CisgICAgICAgICByZXR1cm4gTVBfT0tBWTsKKyAgICAgIH0KKyAgICAgIC8qIGZhbGwgdGhyb3VnaCB0byB0aGUgc2lldmUgKi8KKyAgIH0KKworICAgLyogZ2VuZXJhdGUgYSBwcmltZSBjb25ncnVlbnQgdG8gMyBtb2QgNCBvciAxLzMgbW9kIDQ/ICovCisgICBpZiAoYmJzX3N0eWxlID09IDEpIHsKKyAgICAgIGtzdGVwICAgPSA0OworICAgfSBlbHNlIHsKKyAgICAgIGtzdGVwICAgPSAyOworICAgfQorCisgICAvKiBhdCB0aGlzIHBvaW50IHdlIHdpbGwgdXNlIGEgY29tYmluYXRpb24gb2YgYSBzaWV2ZSBhbmQgTWlsbGVyLVJhYmluICovCisKKyAgIGlmIChiYnNfc3R5bGUgPT0gMSkgeworICAgICAgLyogaWYgYSBtb2QgNCAhPSAzIHN1YnRyYWN0IHRoZSBjb3JyZWN0IHZhbHVlIHRvIG1ha2UgaXQgc28gKi8KKyAgICAgIGlmICgoYS0+ZHBbMF0gJiAzKSAhPSAzKSB7CisgICAgICAgICBpZiAoKGVyciA9IG1wX3N1Yl9kKGEsIChhLT5kcFswXSAmIDMpICsgMSwgYSkpICE9IE1QX09LQVkpIHsgcmV0dXJuIGVycjsgfTsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBpZiAobXBfaXNldmVuKGEpID09IDEpIHsKKyAgICAgICAgIC8qIGZvcmNlIG9kZCAqLworICAgICAgICAgaWYgKChlcnIgPSBtcF9zdWJfZChhLCAxLCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKworICAgLyogZ2VuZXJhdGUgdGhlIHJlc3RhYmxlICovCisgICBmb3IgKHggPSAxOyB4IDwgUFJJTUVfU0laRTsgeCsrKSB7CisgICAgICBpZiAoKGVyciA9IG1wX21vZF9kKGEsIGx0bV9wcmltZV90YWJbeF0sIHJlc190YWIgKyB4KSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0KKworICAgLyogaW5pdCB0ZW1wIHVzZWQgZm9yIE1pbGxlci1SYWJpbiBUZXN0aW5nICovCisgICBpZiAoKGVyciA9IG1wX2luaXQoJmIpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBmb3IgKDs7KSB7CisgICAgICAvKiBza2lwIHRvIHRoZSBuZXh0IG5vbi10cml2aWFsbHkgZGl2aXNpYmxlIGNhbmRpZGF0ZSAqLworICAgICAgc3RlcCA9IDA7CisgICAgICBkbyB7CisgICAgICAgICAvKiB5ID09IDEgaWYgYW55IHJlc2lkdWUgd2FzIHplcm8gW2UuZy4gY2Fubm90IGJlIHByaW1lXSAqLworICAgICAgICAgeSAgICAgPSAgMDsKKworICAgICAgICAgLyogaW5jcmVhc2Ugc3RlcCB0byBuZXh0IGNhbmRpZGF0ZSAqLworICAgICAgICAgc3RlcCArPSBrc3RlcDsKKworICAgICAgICAgLyogY29tcHV0ZSB0aGUgbmV3IHJlc2lkdWUgd2l0aG91dCB1c2luZyBkaXZpc2lvbiAqLworICAgICAgICAgZm9yICh4ID0gMTsgeCA8IFBSSU1FX1NJWkU7IHgrKykgeworICAgICAgICAgICAgIC8qIGFkZCB0aGUgc3RlcCB0byBlYWNoIHJlc2lkdWUgKi8KKyAgICAgICAgICAgICByZXNfdGFiW3hdICs9IGtzdGVwOworCisgICAgICAgICAgICAgLyogc3VidHJhY3QgdGhlIG1vZHVsdXMgW2luc3RlYWQgb2YgdXNpbmcgZGl2aXNpb25dICovCisgICAgICAgICAgICAgaWYgKHJlc190YWJbeF0gPj0gbHRtX3ByaW1lX3RhYlt4XSkgeworICAgICAgICAgICAgICAgIHJlc190YWJbeF0gIC09IGx0bV9wcmltZV90YWJbeF07CisgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgLyogc2V0IGZsYWcgaWYgemVybyAqLworICAgICAgICAgICAgIGlmIChyZXNfdGFiW3hdID09IDApIHsKKyAgICAgICAgICAgICAgICB5ID0gMTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICB9IHdoaWxlICh5ID09IDEgJiYgc3RlcCA8ICgoKChtcF9kaWdpdCkxKTw8RElHSVRfQklUKSAtIGtzdGVwKSk7CisKKyAgICAgIC8qIGFkZCB0aGUgc3RlcCAqLworICAgICAgaWYgKChlcnIgPSBtcF9hZGRfZChhLCBzdGVwLCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorCisgICAgICAvKiBpZiBkaWRuJ3QgcGFzcyBzaWV2ZSBhbmQgc3RlcCA9PSBNQVggdGhlbiBza2lwIHRlc3QgKi8KKyAgICAgIGlmICh5ID09IDEgJiYgc3RlcCA+PSAoKCgobXBfZGlnaXQpMSk8PERJR0lUX0JJVCkgLSBrc3RlcCkpIHsKKyAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICAvKiBpcyB0aGlzIHByaW1lPyAqLworICAgICAgZm9yICh4ID0gMDsgeCA8IHQ7IHgrKykgeworICAgICAgICAgIG1wX3NldCgmYiwgbHRtX3ByaW1lX3RhYlt0XSk7CisgICAgICAgICAgaWYgKChlcnIgPSBtcF9wcmltZV9taWxsZXJfcmFiaW4oYSwgJmIsICZyZXMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAocmVzID09IE1QX05PKSB7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAocmVzID09IE1QX1lFUykgeworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICB9CisKKyAgIGVyciA9IE1QX09LQVk7CitMQkxfRVJSOgorICAgbXBfY2xlYXIoJmIpOworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfbmV4dF9wcmltZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9wcmltZV9yYWJpbl9taWxsZXJfdHJpYWxzLmMgYi9saWJ0b21tYXRoL2JuX21wX3ByaW1lX3JhYmluX21pbGxlcl90cmlhbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDBiMjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9wcmltZV9yYWJpbl9taWxsZXJfdHJpYWxzLmMKQEAgLTAsMCArMSw1MiBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9QUklNRV9SQUJJTl9NSUxMRVJfVFJJQUxTX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICBpbnQgaywgdDsKK30gc2l6ZXNbXSA9IHsKK3sgICAxMjgsICAgIDI4IH0sCit7ICAgMjU2LCAgICAxNiB9LAoreyAgIDM4NCwgICAgMTAgfSwKK3sgICA1MTIsICAgICA3IH0sCit7ICAgNjQwLCAgICAgNiB9LAoreyAgIDc2OCwgICAgIDUgfSwKK3sgICA4OTYsICAgICA0IH0sCit7ICAxMDI0LCAgICAgNCB9Cit9OworCisvKiByZXR1cm5zICMgb2YgUk0gdHJpYWxzIHJlcXVpcmVkIGZvciBhIGdpdmVuIGJpdCBzaXplICovCitpbnQgbXBfcHJpbWVfcmFiaW5fbWlsbGVyX3RyaWFscyhpbnQgc2l6ZSkKK3sKKyAgIGludCB4OworCisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHNpemVzKS8oc2l6ZW9mKHNpemVzWzBdKSkpOyB4KyspIHsKKyAgICAgICBpZiAoc2l6ZXNbeF0uayA9PSBzaXplKSB7CisgICAgICAgICAgcmV0dXJuIHNpemVzW3hdLnQ7CisgICAgICAgfSBlbHNlIGlmIChzaXplc1t4XS5rID4gc2l6ZSkgeworICAgICAgICAgIHJldHVybiAoeCA9PSAwKSA/IHNpemVzWzBdLnQgOiBzaXplc1t4IC0gMV0udDsKKyAgICAgICB9CisgICB9CisgICByZXR1cm4gc2l6ZXNbeC0xXS50ICsgMTsKK30KKworCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9wcmltZV9yYWJpbl9taWxsZXJfdHJpYWxzLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3ByaW1lX3JhbmRvbV9leC5jIGIvbGlidG9tbWF0aC9ibl9tcF9wcmltZV9yYW5kb21fZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGU3YTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9wcmltZV9yYW5kb21fZXguYwpAQCAtMCwwICsxLDEyNSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9QUklNRV9SQU5ET01fRVhfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogbWFrZXMgYSB0cnVseSByYW5kb20gcHJpbWUgb2YgYSBnaXZlbiBzaXplIChiaXRzKSwKKyAqCisgKiBGbGFncyBhcmUgYXMgZm9sbG93czoKKyAqIAorICogICBMVE1fUFJJTUVfQkJTICAgICAgLSBtYWtlIHByaW1lIGNvbmdydWVudCB0byAzIG1vZCA0CisgKiAgIExUTV9QUklNRV9TQUZFICAgICAtIG1ha2Ugc3VyZSAocC0xKS8yIGlzIHByaW1lIGFzIHdlbGwgKGltcGxpZXMgTFRNX1BSSU1FX0JCUykKKyAqICAgTFRNX1BSSU1FXzJNU0JfT0ZGIC0gbWFrZSB0aGUgMm5kIGhpZ2hlc3QgYml0IHplcm8KKyAqICAgTFRNX1BSSU1FXzJNU0JfT04gIC0gbWFrZSB0aGUgMm5kIGhpZ2hlc3QgYml0IG9uZQorICoKKyAqIFlvdSBoYXZlIHRvIHN1cHBseSBhIGNhbGxiYWNrIHdoaWNoIGZpbGxzIGluIGEgYnVmZmVyIHdpdGggcmFuZG9tIGJ5dGVzLiAgImRhdCIgaXMgYSBwYXJhbWV0ZXIgeW91IGNhbgorICogaGF2ZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIChlLmcuIGEgc3RhdGUgb3Igc29tZXRoaW5nKS4gIFRoaXMgZnVuY3Rpb24gZG9lc24ndCB1c2UgImRhdCIgaXRzZWxmCisgKiBzbyBpdCBjYW4gYmUgTlVMTAorICoKKyAqLworCisvKiBUaGlzIGlzIHBvc3NpYmx5IHRoZSBtb3RoZXIgb2YgYWxsIHByaW1lIGdlbmVyYXRpb24gZnVuY3Rpb25zLCBtdWFoYWhhaGFoYWhhISAqLworaW50IG1wX3ByaW1lX3JhbmRvbV9leChtcF9pbnQgKmEsIGludCB0LCBpbnQgc2l6ZSwgaW50IGZsYWdzLCBsdG1fcHJpbWVfY2FsbGJhY2sgY2IsIHZvaWQgKmRhdCkKK3sKKyAgIHVuc2lnbmVkIGNoYXIgKnRtcCwgbWFza0FORCwgbWFza09SX21zYiwgbWFza09SX2xzYjsKKyAgIGludCByZXMsIGVyciwgYnNpemUsIG1hc2tPUl9tc2Jfb2Zmc2V0OworCisgICAvKiBzYW5pdHkgY2hlY2sgdGhlIGlucHV0ICovCisgICBpZiAoc2l6ZSA8PSAxIHx8IHQgPD0gMCkgeworICAgICAgcmV0dXJuIE1QX1ZBTDsKKyAgIH0KKworICAgLyogTFRNX1BSSU1FX1NBRkUgaW1wbGllcyBMVE1fUFJJTUVfQkJTICovCisgICBpZiAoZmxhZ3MgJiBMVE1fUFJJTUVfU0FGRSkgeworICAgICAgZmxhZ3MgfD0gTFRNX1BSSU1FX0JCUzsKKyAgIH0KKworICAgLyogY2FsYyB0aGUgYnl0ZSBzaXplICovCisgICBic2l6ZSA9IChzaXplPj4zKSArICgoc2l6ZSY3KT8xOjApOworCisgICAvKiB3ZSBuZWVkIGEgYnVmZmVyIG9mIGJzaXplIGJ5dGVzICovCisgICB0bXAgPSBPUFRfQ0FTVCh1bnNpZ25lZCBjaGFyKSBYTUFMTE9DKGJzaXplKTsKKyAgIGlmICh0bXAgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIE1QX01FTTsKKyAgIH0KKworICAgLyogY2FsYyB0aGUgbWFza0FORCB2YWx1ZSBmb3IgdGhlIE1TYnl0ZSovCisgICBtYXNrQU5EID0gKChzaXplJjcpID09IDApID8gMHhGRiA6ICgweEZGID4+ICg4IC0gKHNpemUgJiA3KSkpOworCisgICAvKiBjYWxjIHRoZSBtYXNrT1JfbXNiICovCisgICBtYXNrT1JfbXNiICAgICAgICA9IDA7CisgICBtYXNrT1JfbXNiX29mZnNldCA9ICgoc2l6ZSAmIDcpID09IDEpID8gMSA6IDA7CisgICBpZiAoZmxhZ3MgJiBMVE1fUFJJTUVfMk1TQl9PTikgeworICAgICAgbWFza09SX21zYiAgICAgICB8PSAweDgwID4+ICgoOSAtIHNpemUpICYgNyk7CisgICB9ICAKKworICAgLyogZ2V0IHRoZSBtYXNrT1JfbHNiICovCisgICBtYXNrT1JfbHNiICAgICAgICAgPSAxOworICAgaWYgKGZsYWdzICYgTFRNX1BSSU1FX0JCUykgeworICAgICAgbWFza09SX2xzYiAgICAgfD0gMzsKKyAgIH0KKworICAgZG8geworICAgICAgLyogcmVhZCB0aGUgYnl0ZXMgKi8KKyAgICAgIGlmIChjYih0bXAsIGJzaXplLCBkYXQpICE9IGJzaXplKSB7CisgICAgICAgICBlcnIgPSBNUF9WQUw7CisgICAgICAgICBnb3RvIGVycm9yOworICAgICAgfQorIAorICAgICAgLyogd29yayBvdmVyIHRoZSBNU2J5dGUgKi8KKyAgICAgIHRtcFswXSAgICAmPSBtYXNrQU5EOworICAgICAgdG1wWzBdICAgIHw9IDEgPDwgKChzaXplIC0gMSkgJiA3KTsKKworICAgICAgLyogbWl4IGluIHRoZSBtYXNrT1JzICovCisgICAgICB0bXBbbWFza09SX21zYl9vZmZzZXRdICAgfD0gbWFza09SX21zYjsKKyAgICAgIHRtcFtic2l6ZS0xXSAgICAgICAgICAgICB8PSBtYXNrT1JfbHNiOworCisgICAgICAvKiByZWFkIGl0IGluICovCisgICAgICBpZiAoKGVyciA9IG1wX3JlYWRfdW5zaWduZWRfYmluKGEsIHRtcCwgYnNpemUpKSAhPSBNUF9PS0FZKSAgICAgeyBnb3RvIGVycm9yOyB9CisKKyAgICAgIC8qIGlzIGl0IHByaW1lPyAqLworICAgICAgaWYgKChlcnIgPSBtcF9wcmltZV9pc19wcmltZShhLCB0LCAmcmVzKSkgIT0gTVBfT0tBWSkgICAgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgICAgaWYgKHJlcyA9PSBNUF9OTykgeyAgCisgICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgICAgaWYgKGZsYWdzICYgTFRNX1BSSU1FX1NBRkUpIHsKKyAgICAgICAgIC8qIHNlZSBpZiAoYS0xKS8yIGlzIHByaW1lICovCisgICAgICAgICBpZiAoKGVyciA9IG1wX3N1Yl9kKGEsIDEsIGEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICAgICBpZiAoKGVyciA9IG1wX2Rpdl8yKGEsIGEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgCisgICAgICAgICAvKiBpcyBpdCBwcmltZT8gKi8KKyAgICAgICAgIGlmICgoZXJyID0gbXBfcHJpbWVfaXNfcHJpbWUoYSwgdCwgJnJlcykpICE9IE1QX09LQVkpICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgICAgIH0KKyAgIH0gd2hpbGUgKHJlcyA9PSBNUF9OTyk7CisKKyAgIGlmIChmbGFncyAmIExUTV9QUklNRV9TQUZFKSB7CisgICAgICAvKiByZXN0b3JlIGEgdG8gdGhlIG9yaWdpbmFsIHZhbHVlICovCisgICAgICBpZiAoKGVyciA9IG1wX211bF8yKGEsIGEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICBpZiAoKGVyciA9IG1wX2FkZF9kKGEsIDEsIGEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICB9CisKKyAgIGVyciA9IE1QX09LQVk7CitlcnJvcjoKKyAgIFhGUkVFKHRtcCk7CisgICByZXR1cm4gZXJyOworfQorCisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3ByaW1lX3JhbmRvbV9leC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9yYWRpeF9zaXplLmMgYi9saWJ0b21tYXRoL2JuX21wX3JhZGl4X3NpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWU4ODIyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9yYWRpeF9zaXplLmMKQEAgLTAsMCArMSw3OCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SQURJWF9TSVpFX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHJldHVybnMgc2l6ZSBvZiBBU0NJSSByZXByZW5zZW50YXRpb24gKi8KK2ludCBtcF9yYWRpeF9zaXplIChtcF9pbnQgKiBhLCBpbnQgcmFkaXgsIGludCAqc2l6ZSkKK3sKKyAgaW50ICAgICByZXMsIGRpZ3M7CisgIG1wX2ludCAgdDsKKyAgbXBfZGlnaXQgZDsKKworICAqc2l6ZSA9IDA7CisKKyAgLyogc3BlY2lhbCBjYXNlIGZvciBiaW5hcnkgKi8KKyAgaWYgKHJhZGl4ID09IDIpIHsKKyAgICAqc2l6ZSA9IG1wX2NvdW50X2JpdHMgKGEpICsgKGEtPnNpZ24gPT0gTVBfTkVHID8gMSA6IDApICsgMTsKKyAgICByZXR1cm4gTVBfT0tBWTsKKyAgfQorCisgIC8qIG1ha2Ugc3VyZSB0aGUgcmFkaXggaXMgaW4gcmFuZ2UgKi8KKyAgaWYgKHJhZGl4IDwgMiB8fCByYWRpeCA+IDY0KSB7CisgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIGlmIChtcF9pc3plcm8oYSkgPT0gTVBfWUVTKSB7CisgICAgKnNpemUgPSAyOworICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogZGlncyBpcyB0aGUgZGlnaXQgY291bnQgKi8KKyAgZGlncyA9IDA7CisKKyAgLyogaWYgaXQncyBuZWdhdGl2ZSBhZGQgb25lIGZvciB0aGUgc2lnbiAqLworICBpZiAoYS0+c2lnbiA9PSBNUF9ORUcpIHsKKyAgICArK2RpZ3M7CisgIH0KKworICAvKiBpbml0IGEgY29weSBvZiB0aGUgaW5wdXQgKi8KKyAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkgKCZ0LCBhKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICAvKiBmb3JjZSB0ZW1wIHRvIHBvc2l0aXZlICovCisgIHQuc2lnbiA9IE1QX1pQT1M7IAorCisgIC8qIGZldGNoIG91dCBhbGwgb2YgdGhlIGRpZ2l0cyAqLworICB3aGlsZSAobXBfaXN6ZXJvICgmdCkgPT0gTVBfTk8pIHsKKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl9kICgmdCwgKG1wX2RpZ2l0KSByYWRpeCwgJnQsICZkKSkgIT0gTVBfT0tBWSkgeworICAgICAgbXBfY2xlYXIgKCZ0KTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgICsrZGlnczsKKyAgfQorICBtcF9jbGVhciAoJnQpOworCisgIC8qIHJldHVybiBkaWdzICsgMSwgdGhlIDEgaXMgZm9yIHRoZSBOVUxMIGJ5dGUgdGhhdCB3b3VsZCBiZSByZXF1aXJlZC4gKi8KKyAgKnNpemUgPSBkaWdzICsgMTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JhZGl4X3NpemUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfcmFkaXhfc21hcC5jIGIvbGlidG9tbWF0aC9ibl9tcF9yYWRpeF9zbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThjM2E1ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfcmFkaXhfc21hcC5jCkBAIC0wLDAgKzEsMjQgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfUkFESVhfU01BUF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBjaGFycyB1c2VkIGluIHJhZGl4IGNvbnZlcnNpb25zICovCitjb25zdCBjaGFyICptcF9zX3JtYXAgPSAiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXorLyI7CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9yYWRpeF9zbWFwLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3JhbmQuYyBiL2xpYnRvbW1hdGgvYm5fbXBfcmFuZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjOGYzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX3JhbmQuYwpAQCAtMCwwICsxLDU1IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1JBTkRfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogbWFrZXMgYSBwc2V1ZG8tcmFuZG9tIGludCBvZiBhIGdpdmVuIHNpemUgKi8KK2ludAorbXBfcmFuZCAobXBfaW50ICogYSwgaW50IGRpZ2l0cykKK3sKKyAgaW50ICAgICByZXM7CisgIG1wX2RpZ2l0IGQ7CisKKyAgbXBfemVybyAoYSk7CisgIGlmIChkaWdpdHMgPD0gMCkgeworICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogZmlyc3QgcGxhY2UgYSByYW5kb20gbm9uLXplcm8gZGlnaXQgKi8KKyAgZG8geworICAgIGQgPSAoKG1wX2RpZ2l0KSBhYnMgKHJhbmQgKCkpKSAmIE1QX01BU0s7CisgIH0gd2hpbGUgKGQgPT0gMCk7CisKKyAgaWYgKChyZXMgPSBtcF9hZGRfZCAoYSwgZCwgYSkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgd2hpbGUgKC0tZGlnaXRzID4gMCkgeworICAgIGlmICgocmVzID0gbXBfbHNoZCAoYSwgMSkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgaWYgKChyZXMgPSBtcF9hZGRfZCAoYSwgKChtcF9kaWdpdCkgYWJzIChyYW5kICgpKSksIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgfQorCisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcmFuZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9yZWFkX3JhZGl4LmMgYi9saWJ0b21tYXRoL2JuX21wX3JlYWRfcmFkaXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjExOWMxCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9yZWFkX3JhZGl4LmMKQEAgLTAsMCArMSw4NSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SRUFEX1JBRElYX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHJlYWQgYSBzdHJpbmcgW0FTQ0lJXSBpbiBhIGdpdmVuIHJhZGl4ICovCitpbnQgbXBfcmVhZF9yYWRpeCAobXBfaW50ICogYSwgY29uc3QgY2hhciAqc3RyLCBpbnQgcmFkaXgpCit7CisgIGludCAgICAgeSwgcmVzLCBuZWc7CisgIGNoYXIgICAgY2g7CisKKyAgLyogemVybyB0aGUgZGlnaXQgYmlnbnVtICovCisgIG1wX3plcm8oYSk7CisKKyAgLyogbWFrZSBzdXJlIHRoZSByYWRpeCBpcyBvayAqLworICBpZiAocmFkaXggPCAyIHx8IHJhZGl4ID4gNjQpIHsKKyAgICByZXR1cm4gTVBfVkFMOworICB9CisKKyAgLyogaWYgdGhlIGxlYWRpbmcgZGlnaXQgaXMgYSAKKyAgICogbWludXMgc2V0IHRoZSBzaWduIHRvIG5lZ2F0aXZlLiAKKyAgICovCisgIGlmICgqc3RyID09ICctJykgeworICAgICsrc3RyOworICAgIG5lZyA9IE1QX05FRzsKKyAgfSBlbHNlIHsKKyAgICBuZWcgPSBNUF9aUE9TOworICB9CisKKyAgLyogc2V0IHRoZSBpbnRlZ2VyIHRvIHRoZSBkZWZhdWx0IG9mIHplcm8gKi8KKyAgbXBfemVybyAoYSk7CisgIAorICAvKiBwcm9jZXNzIGVhY2ggZGlnaXQgb2YgdGhlIHN0cmluZyAqLworICB3aGlsZSAoKnN0cikgeworICAgIC8qIGlmIHRoZSByYWRpeCA8IDM2IHRoZSBjb252ZXJzaW9uIGlzIGNhc2UgaW5zZW5zaXRpdmUKKyAgICAgKiB0aGlzIGFsbG93cyBudW1iZXJzIGxpa2UgMUFCIGFuZCAxYWIgdG8gcmVwcmVzZW50IHRoZSBzYW1lICB2YWx1ZQorICAgICAqIFtlLmcuIGluIGhleF0KKyAgICAgKi8KKyAgICBjaCA9IChjaGFyKSAoKHJhZGl4IDwgMzYpID8gdG91cHBlciAoKnN0cikgOiAqc3RyKTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgNjQ7IHkrKykgeworICAgICAgaWYgKGNoID09IG1wX3Nfcm1hcFt5XSkgeworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgLyogaWYgdGhlIGNoYXIgd2FzIGZvdW5kIGluIHRoZSBtYXAgCisgICAgICogYW5kIGlzIGxlc3MgdGhhbiB0aGUgZ2l2ZW4gcmFkaXggYWRkIGl0CisgICAgICogdG8gdGhlIG51bWJlciwgb3RoZXJ3aXNlIGV4aXQgdGhlIGxvb3AuIAorICAgICAqLworICAgIGlmICh5IDwgcmFkaXgpIHsKKyAgICAgIGlmICgocmVzID0gbXBfbXVsX2QgKGEsIChtcF9kaWdpdCkgcmFkaXgsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICByZXR1cm4gcmVzOworICAgICAgfQorICAgICAgaWYgKChyZXMgPSBtcF9hZGRfZCAoYSwgKG1wX2RpZ2l0KSB5LCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7CisgICAgfQorICAgICsrc3RyOworICB9CisgIAorICAvKiBzZXQgdGhlIHNpZ24gb25seSBpZiBhICE9IDAgKi8KKyAgaWYgKG1wX2lzemVybyhhKSAhPSAxKSB7CisgICAgIGEtPnNpZ24gPSBuZWc7CisgIH0KKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9yZWFkX3JhZGl4LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3JlYWRfc2lnbmVkX2Jpbi5jIGIvbGlidG9tbWF0aC9ibl9tcF9yZWFkX3NpZ25lZF9iaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2RmM2MzCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9yZWFkX3NpZ25lZF9iaW4uYwpAQCAtMCwwICsxLDQxIEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1JFQURfU0lHTkVEX0JJTl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiByZWFkIHNpZ25lZCBiaW4sIGJpZyBlbmRpYW4sIGZpcnN0IGJ5dGUgaXMgMD09cG9zaXRpdmUgb3IgMT09bmVnYXRpdmUgKi8KK2ludCBtcF9yZWFkX3NpZ25lZF9iaW4gKG1wX2ludCAqIGEsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmIsIGludCBjKQoreworICBpbnQgICAgIHJlczsKKworICAvKiByZWFkIG1hZ25pdHVkZSAqLworICBpZiAoKHJlcyA9IG1wX3JlYWRfdW5zaWduZWRfYmluIChhLCBiICsgMSwgYyAtIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIGZpcnN0IGJ5dGUgaXMgMCBmb3IgcG9zaXRpdmUsIG5vbi16ZXJvIGZvciBuZWdhdGl2ZSAqLworICBpZiAoYlswXSA9PSAwKSB7CisgICAgIGEtPnNpZ24gPSBNUF9aUE9TOworICB9IGVsc2UgeworICAgICBhLT5zaWduID0gTVBfTkVHOworICB9CisKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9yZWFkX3NpZ25lZF9iaW4uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfcmVhZF91bnNpZ25lZF9iaW4uYyBiL2xpYnRvbW1hdGgvYm5fbXBfcmVhZF91bnNpZ25lZF9iaW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzQ3MWVkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9yZWFkX3Vuc2lnbmVkX2Jpbi5jCkBAIC0wLDAgKzEsNTUgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfUkVBRF9VTlNJR05FRF9CSU5fQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogcmVhZHMgYSB1bnNpZ25lZCBjaGFyIGFycmF5LCBhc3N1bWVzIHRoZSBtc2IgaXMgc3RvcmVkIGZpcnN0IFtiaWcgZW5kaWFuXSAqLworaW50IG1wX3JlYWRfdW5zaWduZWRfYmluIChtcF9pbnQgKiBhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgYykKK3sKKyAgaW50ICAgICByZXM7CisKKyAgLyogbWFrZSBzdXJlIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gZGlnaXRzICovCisgIGlmIChhLT5hbGxvYyA8IDIpIHsKKyAgICAgaWYgKChyZXMgPSBtcF9ncm93KGEsIDIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfQorCisgIC8qIHplcm8gdGhlIGludCAqLworICBtcF96ZXJvIChhKTsKKworICAvKiByZWFkIHRoZSBieXRlcyBpbiAqLworICB3aGlsZSAoYy0tID4gMCkgeworICAgIGlmICgocmVzID0gbXBfbXVsXzJkIChhLCA4LCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyNpZm5kZWYgTVBfOEJJVAorICAgICAgYS0+ZHBbMF0gfD0gKmIrKzsKKyAgICAgIGEtPnVzZWQgKz0gMTsKKyNlbHNlCisgICAgICBhLT5kcFswXSA9ICgqYiAmIE1QX01BU0spOworICAgICAgYS0+ZHBbMV0gfD0gKCgqYisrID4+IDdVKSAmIDEpOworICAgICAgYS0+dXNlZCArPSAyOworI2VuZGlmCisgIH0KKyAgbXBfY2xhbXAgKGEpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JlYWRfdW5zaWduZWRfYmluLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3JlZHVjZS5jIGIvbGlidG9tbWF0aC9ibl9tcF9yZWR1Y2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjcyODRhCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9yZWR1Y2UuYwpAQCAtMCwwICsxLDEwMCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SRURVQ0VfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogcmVkdWNlcyB4IG1vZCBtLCBhc3N1bWVzIDAgPCB4IDwgbSoqMiwgbXUgaXMgCisgKiBwcmVjb21wdXRlZCB2aWEgbXBfcmVkdWNlX3NldHVwLgorICogRnJvbSBIQUMgcHAuNjA0IEFsZ29yaXRobSAxNC40MgorICovCitpbnQgbXBfcmVkdWNlIChtcF9pbnQgKiB4LCBtcF9pbnQgKiBtLCBtcF9pbnQgKiBtdSkKK3sKKyAgbXBfaW50ICBxOworICBpbnQgICAgIHJlcywgdW0gPSBtLT51c2VkOworCisgIC8qIHEgPSB4ICovCisgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmcSwgeCkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLyogcTEgPSB4IC8gYioqKGstMSkgICovCisgIG1wX3JzaGQgKCZxLCB1bSAtIDEpOyAgICAgICAgIAorCisgIC8qIGFjY29yZGluZyB0byBIQUMgdGhpcyBvcHRpbWl6YXRpb24gaXMgb2sgKi8KKyAgaWYgKCgodW5zaWduZWQgbG9uZykgdW0pID4gKCgobXBfZGlnaXQpMSkgPDwgKERJR0lUX0JJVCAtIDEpKSkgeworICAgIGlmICgocmVzID0gbXBfbXVsICgmcSwgbXUsICZxKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBDTEVBTlVQOworICAgIH0KKyAgfSBlbHNlIHsKKyNpZmRlZiBCTl9TX01QX01VTF9ISUdIX0RJR1NfQworICAgIGlmICgocmVzID0gc19tcF9tdWxfaGlnaF9kaWdzICgmcSwgbXUsICZxLCB1bSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gQ0xFQU5VUDsKKyAgICB9CisjZWxpZiBkZWZpbmVkKEJOX0ZBU1RfU19NUF9NVUxfSElHSF9ESUdTX0MpCisgICAgaWYgKChyZXMgPSBmYXN0X3NfbXBfbXVsX2hpZ2hfZGlncyAoJnEsIG11LCAmcSwgdW0pKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIENMRUFOVVA7CisgICAgfQorI2Vsc2UgCisgICAgeyAKKyAgICAgIHJlcyA9IE1QX1ZBTDsKKyAgICAgIGdvdG8gQ0xFQU5VUDsKKyAgICB9CisjZW5kaWYKKyAgfQorCisgIC8qIHEzID0gcTIgLyBiKiooaysxKSAqLworICBtcF9yc2hkICgmcSwgdW0gKyAxKTsgICAgICAgICAKKworICAvKiB4ID0geCBtb2QgYioqKGsrMSksIHF1aWNrIChubyBkaXZpc2lvbikgKi8KKyAgaWYgKChyZXMgPSBtcF9tb2RfMmQgKHgsIERJR0lUX0JJVCAqICh1bSArIDEpLCB4KSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gQ0xFQU5VUDsKKyAgfQorCisgIC8qIHEgPSBxICogbSBtb2QgYioqKGsrMSksIHF1aWNrIChubyBkaXZpc2lvbikgKi8KKyAgaWYgKChyZXMgPSBzX21wX211bF9kaWdzICgmcSwgbSwgJnEsIHVtICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIENMRUFOVVA7CisgIH0KKworICAvKiB4ID0geCAtIHEgKi8KKyAgaWYgKChyZXMgPSBtcF9zdWIgKHgsICZxLCB4KSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gQ0xFQU5VUDsKKyAgfQorCisgIC8qIElmIHggPCAwLCBhZGQgYioqKGsrMSkgdG8gaXQgKi8KKyAgaWYgKG1wX2NtcF9kICh4LCAwKSA9PSBNUF9MVCkgeworICAgIG1wX3NldCAoJnEsIDEpOworICAgIGlmICgocmVzID0gbXBfbHNoZCAoJnEsIHVtICsgMSkpICE9IE1QX09LQVkpCisgICAgICBnb3RvIENMRUFOVVA7CisgICAgaWYgKChyZXMgPSBtcF9hZGQgKHgsICZxLCB4KSkgIT0gTVBfT0tBWSkKKyAgICAgIGdvdG8gQ0xFQU5VUDsKKyAgfQorCisgIC8qIEJhY2sgb2ZmIGlmIGl0J3MgdG9vIGJpZyAqLworICB3aGlsZSAobXBfY21wICh4LCBtKSAhPSBNUF9MVCkgeworICAgIGlmICgocmVzID0gc19tcF9zdWIgKHgsIG0sIHgpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIENMRUFOVVA7CisgICAgfQorICB9CisgIAorQ0xFQU5VUDoKKyAgbXBfY2xlYXIgKCZxKTsKKworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcmVkdWNlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV8yay5jIGIvbGlidG9tbWF0aC9ibl9tcF9yZWR1Y2VfMmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODEwNjk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9yZWR1Y2VfMmsuYwpAQCAtMCwwICsxLDYxIEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1JFRFVDRV8yS19DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiByZWR1Y2VzIGEgbW9kdWxvIG4gd2hlcmUgbiBpcyBvZiB0aGUgZm9ybSAyKipwIC0gZCAqLworaW50IG1wX3JlZHVjZV8yayhtcF9pbnQgKmEsIG1wX2ludCAqbiwgbXBfZGlnaXQgZCkKK3sKKyAgIG1wX2ludCBxOworICAgaW50ICAgIHAsIHJlczsKKyAgIAorICAgaWYgKChyZXMgPSBtcF9pbml0KCZxKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgIH0KKyAgIAorICAgcCA9IG1wX2NvdW50X2JpdHMobik7ICAgIAordG9wOgorICAgLyogcSA9IGEvMioqcCwgYSA9IGEgbW9kIDIqKnAgKi8KKyAgIGlmICgocmVzID0gbXBfZGl2XzJkKGEsIHAsICZxLCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBFUlI7CisgICB9CisgICAKKyAgIGlmIChkICE9IDEpIHsKKyAgICAgIC8qIHEgPSBxICogZCAqLworICAgICAgaWYgKChyZXMgPSBtcF9tdWxfZCgmcSwgZCwgJnEpKSAhPSBNUF9PS0FZKSB7IAorICAgICAgICAgZ290byBFUlI7CisgICAgICB9CisgICB9CisgICAKKyAgIC8qIGEgPSBhICsgcSAqLworICAgaWYgKChyZXMgPSBzX21wX2FkZChhLCAmcSwgYSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gRVJSOworICAgfQorICAgCisgICBpZiAobXBfY21wX21hZyhhLCBuKSAhPSBNUF9MVCkgeworICAgICAgc19tcF9zdWIoYSwgbiwgYSk7CisgICAgICBnb3RvIHRvcDsKKyAgIH0KKyAgIAorRVJSOgorICAgbXBfY2xlYXIoJnEpOworICAgcmV0dXJuIHJlczsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcmVkdWNlXzJrLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV8ya19sLmMgYi9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV8ya19sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiNDM1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfcmVkdWNlXzJrX2wuYwpAQCAtMCwwICsxLDYyIEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1JFRFVDRV8yS19MX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHJlZHVjZXMgYSBtb2R1bG8gbiB3aGVyZSBuIGlzIG9mIHRoZSBmb3JtIDIqKnAgLSBkIAorICAgVGhpcyBkaWZmZXJzIGZyb20gcmVkdWNlXzJrIHNpbmNlICJkIiBjYW4gYmUgbGFyZ2VyCisgICB0aGFuIGEgc2luZ2xlIGRpZ2l0LgorKi8KK2ludCBtcF9yZWR1Y2VfMmtfbChtcF9pbnQgKmEsIG1wX2ludCAqbiwgbXBfaW50ICpkKQoreworICAgbXBfaW50IHE7CisgICBpbnQgICAgcCwgcmVzOworICAgCisgICBpZiAoKHJlcyA9IG1wX2luaXQoJnEpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgfQorICAgCisgICBwID0gbXBfY291bnRfYml0cyhuKTsgICAgCit0b3A6CisgICAvKiBxID0gYS8yKipwLCBhID0gYSBtb2QgMioqcCAqLworICAgaWYgKChyZXMgPSBtcF9kaXZfMmQoYSwgcCwgJnEsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIEVSUjsKKyAgIH0KKyAgIAorICAgLyogcSA9IHEgKiBkICovCisgICBpZiAoKHJlcyA9IG1wX211bCgmcSwgZCwgJnEpKSAhPSBNUF9PS0FZKSB7IAorICAgICAgZ290byBFUlI7CisgICB9CisgICAKKyAgIC8qIGEgPSBhICsgcSAqLworICAgaWYgKChyZXMgPSBzX21wX2FkZChhLCAmcSwgYSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gRVJSOworICAgfQorICAgCisgICBpZiAobXBfY21wX21hZyhhLCBuKSAhPSBNUF9MVCkgeworICAgICAgc19tcF9zdWIoYSwgbiwgYSk7CisgICAgICBnb3RvIHRvcDsKKyAgIH0KKyAgIAorRVJSOgorICAgbXBfY2xlYXIoJnEpOworICAgcmV0dXJuIHJlczsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcmVkdWNlXzJrX2wuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfcmVkdWNlXzJrX3NldHVwLmMgYi9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV8ya19zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3ZGUwZWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV8ya19zZXR1cC5jCkBAIC0wLDAgKzEsNDcgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGRldGVybWluZXMgdGhlIHNldHVwIHZhbHVlICovCitpbnQgbXBfcmVkdWNlXzJrX3NldHVwKG1wX2ludCAqYSwgbXBfZGlnaXQgKmQpCit7CisgICBpbnQgcmVzLCBwOworICAgbXBfaW50IHRtcDsKKyAgIAorICAgaWYgKChyZXMgPSBtcF9pbml0KCZ0bXApKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgfQorICAgCisgICBwID0gbXBfY291bnRfYml0cyhhKTsKKyAgIGlmICgocmVzID0gbXBfMmV4cHQoJnRtcCwgcCkpICE9IE1QX09LQVkpIHsKKyAgICAgIG1wX2NsZWFyKCZ0bXApOworICAgICAgcmV0dXJuIHJlczsKKyAgIH0KKyAgIAorICAgaWYgKChyZXMgPSBzX21wX3N1YigmdG1wLCBhLCAmdG1wKSkgIT0gTVBfT0tBWSkgeworICAgICAgbXBfY2xlYXIoJnRtcCk7CisgICAgICByZXR1cm4gcmVzOworICAgfQorICAgCisgICAqZCA9IHRtcC5kcFswXTsKKyAgIG1wX2NsZWFyKCZ0bXApOworICAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9yZWR1Y2VfMmtfc2V0dXAuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfcmVkdWNlXzJrX3NldHVwX2wuYyBiL2xpYnRvbW1hdGgvYm5fbXBfcmVkdWNlXzJrX3NldHVwX2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWYwMzg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9yZWR1Y2VfMmtfc2V0dXBfbC5jCkBAIC0wLDAgKzEsNDQgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0xfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZGV0ZXJtaW5lcyB0aGUgc2V0dXAgdmFsdWUgKi8KK2ludCBtcF9yZWR1Y2VfMmtfc2V0dXBfbChtcF9pbnQgKmEsIG1wX2ludCAqZCkKK3sKKyAgIGludCAgICByZXM7CisgICBtcF9pbnQgdG1wOworICAgCisgICBpZiAoKHJlcyA9IG1wX2luaXQoJnRtcCkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICB9CisgICAKKyAgIGlmICgocmVzID0gbXBfMmV4cHQoJnRtcCwgbXBfY291bnRfYml0cyhhKSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gRVJSOworICAgfQorICAgCisgICBpZiAoKHJlcyA9IHNfbXBfc3ViKCZ0bXAsIGEsIGQpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIEVSUjsKKyAgIH0KKyAgIAorRVJSOgorICAgbXBfY2xlYXIoJnRtcCk7CisgICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcmVkdWNlXzJrX3NldHVwX2wuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfcmVkdWNlX2lzXzJrLmMgYi9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV9pc18yay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OTdiMGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV9pc18yay5jCkBAIC0wLDAgKzEsNTIgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfUkVEVUNFX0lTXzJLX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGRldGVybWluZXMgaWYgbXBfcmVkdWNlXzJrIGNhbiBiZSB1c2VkICovCitpbnQgbXBfcmVkdWNlX2lzXzJrKG1wX2ludCAqYSkKK3sKKyAgIGludCBpeCwgaXksIGl3OworICAgbXBfZGlnaXQgaXo7CisgICAKKyAgIGlmIChhLT51c2VkID09IDApIHsKKyAgICAgIHJldHVybiBNUF9OTzsKKyAgIH0gZWxzZSBpZiAoYS0+dXNlZCA9PSAxKSB7CisgICAgICByZXR1cm4gTVBfWUVTOworICAgfSBlbHNlIGlmIChhLT51c2VkID4gMSkgeworICAgICAgaXkgPSBtcF9jb3VudF9iaXRzKGEpOworICAgICAgaXogPSAxOworICAgICAgaXcgPSAxOworICAgIAorICAgICAgLyogVGVzdCBldmVyeSBiaXQgZnJvbSB0aGUgc2Vjb25kIGRpZ2l0IHVwLCBtdXN0IGJlIDEgKi8KKyAgICAgIGZvciAoaXggPSBESUdJVF9CSVQ7IGl4IDwgaXk7IGl4KyspIHsKKyAgICAgICAgICBpZiAoKGEtPmRwW2l3XSAmIGl6KSA9PSAwKSB7CisgICAgICAgICAgICAgcmV0dXJuIE1QX05POworICAgICAgICAgIH0KKyAgICAgICAgICBpeiA8PD0gMTsKKyAgICAgICAgICBpZiAoaXogPiAobXBfZGlnaXQpTVBfTUFTSykgeworICAgICAgICAgICAgICsraXc7CisgICAgICAgICAgICAgaXogPSAxOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBNUF9ZRVM7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV9pc18yay5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9yZWR1Y2VfaXNfMmtfbC5jIGIvbGlidG9tbWF0aC9ibl9tcF9yZWR1Y2VfaXNfMmtfbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YjQyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV9pc18ya19sLmMKQEAgLTAsMCArMSw0NCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SRURVQ0VfSVNfMktfTF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBkZXRlcm1pbmVzIGlmIHJlZHVjZV8ya19sIGNhbiBiZSB1c2VkICovCitpbnQgbXBfcmVkdWNlX2lzXzJrX2wobXBfaW50ICphKQoreworICAgaW50IGl4LCBpeTsKKyAgIAorICAgaWYgKGEtPnVzZWQgPT0gMCkgeworICAgICAgcmV0dXJuIE1QX05POworICAgfSBlbHNlIGlmIChhLT51c2VkID09IDEpIHsKKyAgICAgIHJldHVybiBNUF9ZRVM7CisgICB9IGVsc2UgaWYgKGEtPnVzZWQgPiAxKSB7CisgICAgICAvKiBpZiBtb3JlIHRoYW4gaGFsZiBvZiB0aGUgZGlnaXRzIGFyZSAtMSB3ZSdyZSBzb2xkICovCisgICAgICBmb3IgKGl5ID0gaXggPSAwOyBpeCA8IGEtPnVzZWQ7IGl4KyspIHsKKyAgICAgICAgICBpZiAoYS0+ZHBbaXhdID09IE1QX01BU0spIHsKKyAgICAgICAgICAgICAgKytpeTsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgICByZXR1cm4gKGl5ID49IChhLT51c2VkLzIpKSA/IE1QX1lFUyA6IE1QX05POworICAgICAgCisgICB9CisgICByZXR1cm4gTVBfTk87Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV9pc18ya19sLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV9zZXR1cC5jIGIvbGlidG9tbWF0aC9ibl9tcF9yZWR1Y2Vfc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDg1YWYwCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9yZWR1Y2Vfc2V0dXAuYwpAQCAtMCwwICsxLDM0IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1JFRFVDRV9TRVRVUF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBwcmUtY2FsY3VsYXRlIHRoZSB2YWx1ZSByZXF1aXJlZCBmb3IgQmFycmV0dCByZWR1Y3Rpb24KKyAqIEZvciBhIGdpdmVuIG1vZHVsdXMgImIiIGl0IGNhbHVsYXRlcyB0aGUgdmFsdWUgcmVxdWlyZWQgaW4gImEiCisgKi8KK2ludCBtcF9yZWR1Y2Vfc2V0dXAgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpCit7CisgIGludCAgICAgcmVzOworICAKKyAgaWYgKChyZXMgPSBtcF8yZXhwdCAoYSwgYi0+dXNlZCAqIDIgKiBESUdJVF9CSVQpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorICByZXR1cm4gbXBfZGl2IChhLCBiLCBhLCBOVUxMKTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV9zZXR1cC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9yc2hkLmMgYi9saWJ0b21tYXRoL2JuX21wX3JzaGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzRiZDRkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9yc2hkLmMKQEAgLTAsMCArMSw3MiBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SU0hEX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHNoaWZ0IHJpZ2h0IGEgY2VydGFpbiBhbW91bnQgb2YgZGlnaXRzICovCit2b2lkIG1wX3JzaGQgKG1wX2ludCAqIGEsIGludCBiKQoreworICBpbnQgICAgIHg7CisKKyAgLyogaWYgYiA8PSAwIHRoZW4gaWdub3JlIGl0ICovCisgIGlmIChiIDw9IDApIHsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBpZiBiID4gdXNlZCB0aGVuIHNpbXBseSB6ZXJvIGl0IGFuZCByZXR1cm4gKi8KKyAgaWYgKGEtPnVzZWQgPD0gYikgeworICAgIG1wX3plcm8gKGEpOworICAgIHJldHVybjsKKyAgfQorCisgIHsKKyAgICByZWdpc3RlciBtcF9kaWdpdCAqYm90dG9tLCAqdG9wOworCisgICAgLyogc2hpZnQgdGhlIGRpZ2l0cyBkb3duICovCisKKyAgICAvKiBib3R0b20gKi8KKyAgICBib3R0b20gPSBhLT5kcDsKKworICAgIC8qIHRvcCBbb2Zmc2V0IGludG8gZGlnaXRzXSAqLworICAgIHRvcCA9IGEtPmRwICsgYjsKKworICAgIC8qIHRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBzbGlkaW5nIHdpbmRvdyB3aGVyZSAKKyAgICAgKiB0aGUgd2luZG93IGlzIGItZGlnaXRzIGxvbmcgYW5kIGRpZ2l0cyBmcm9tIAorICAgICAqIHRoZSB0b3Agb2YgdGhlIHdpbmRvdyBhcmUgY29waWVkIHRvIHRoZSBib3R0b20KKyAgICAgKgorICAgICAqIGUuZy4KKworICAgICBiLTIgfCBiLTEgfCBiMCB8IGIxIHwgYjIgfCAuLi4gfCBiYiB8ICAgLS0tLT4KKyAgICAgICAgICAgICAgICAgL1wgICAgICAgICAgICAgICAgICAgfCAgICAgIC0tLS0+CisgICAgICAgICAgICAgICAgICBcLS0tLS0tLS0tLS0tLS0tLS0tLS8gICAgICAtLS0tPgorICAgICAqLworICAgIGZvciAoeCA9IDA7IHggPCAoYS0+dXNlZCAtIGIpOyB4KyspIHsKKyAgICAgICpib3R0b20rKyA9ICp0b3ArKzsKKyAgICB9CisKKyAgICAvKiB6ZXJvIHRoZSB0b3AgZGlnaXRzICovCisgICAgZm9yICg7IHggPCBhLT51c2VkOyB4KyspIHsKKyAgICAgICpib3R0b20rKyA9IDA7CisgICAgfQorICB9CisgIAorICAvKiByZW1vdmUgZXhjZXNzIGRpZ2l0cyAqLworICBhLT51c2VkIC09IGI7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9yc2hkLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3NldC5jIGIvbGlidG9tbWF0aC9ibl9tcF9zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWViYWRiCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9zZXQuYwpAQCAtMCwwICsxLDI5IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1NFVF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBzZXQgdG8gYSBkaWdpdCAqLwordm9pZCBtcF9zZXQgKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIpCit7CisgIG1wX3plcm8gKGEpOworICBhLT5kcFswXSA9IGIgJiBNUF9NQVNLOworICBhLT51c2VkICA9IChhLT5kcFswXSAhPSAwKSA/IDEgOiAwOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfc2V0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3NldF9pbnQuYyBiL2xpYnRvbW1hdGgvYm5fbXBfc2V0X2ludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTg0NGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX3NldF9pbnQuYwpAQCAtMCwwICsxLDQ4IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1NFVF9JTlRfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogc2V0IGEgMzItYml0IGNvbnN0ICovCitpbnQgbXBfc2V0X2ludCAobXBfaW50ICogYSwgdW5zaWduZWQgbG9uZyBiKQoreworICBpbnQgICAgIHgsIHJlczsKKworICBtcF96ZXJvIChhKTsKKyAgCisgIC8qIHNldCBmb3VyIGJpdHMgYXQgYSB0aW1lICovCisgIGZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKKyAgICAvKiBzaGlmdCB0aGUgbnVtYmVyIHVwIGZvdXIgYml0cyAqLworICAgIGlmICgocmVzID0gbXBfbXVsXzJkIChhLCA0LCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICAvKiBPUiBpbiB0aGUgdG9wIGZvdXIgYml0cyBvZiB0aGUgc291cmNlICovCisgICAgYS0+ZHBbMF0gfD0gKGIgPj4gMjgpICYgMTU7CisKKyAgICAvKiBzaGlmdCB0aGUgc291cmNlIHVwIHRvIHRoZSBuZXh0IGZvdXIgYml0cyAqLworICAgIGIgPDw9IDQ7CisKKyAgICAvKiBlbnN1cmUgdGhhdCBkaWdpdHMgYXJlIG5vdCBjbGFtcGVkIG9mZiAqLworICAgIGEtPnVzZWQgKz0gMTsKKyAgfQorICBtcF9jbGFtcCAoYSk7CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfc2V0X2ludC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9zaHJpbmsuYyBiL2xpYnRvbW1hdGgvYm5fbXBfc2hyaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY3NjA2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfc2hyaW5rLmMKQEAgLTAsMCArMSwzNSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9TSFJJTktfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogc2hyaW5rIGEgYmlnbnVtICovCitpbnQgbXBfc2hyaW5rIChtcF9pbnQgKiBhKQoreworICBtcF9kaWdpdCAqdG1wOworICBpZiAoYS0+YWxsb2MgIT0gYS0+dXNlZCAmJiBhLT51c2VkID4gMCkgeworICAgIGlmICgodG1wID0gT1BUX0NBU1QobXBfZGlnaXQpIFhSRUFMTE9DIChhLT5kcCwgc2l6ZW9mIChtcF9kaWdpdCkgKiBhLT51c2VkKSkgPT0gTlVMTCkgeworICAgICAgcmV0dXJuIE1QX01FTTsKKyAgICB9CisgICAgYS0+ZHAgICAgPSB0bXA7CisgICAgYS0+YWxsb2MgPSBhLT51c2VkOworICB9CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfc2hyaW5rLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3NpZ25lZF9iaW5fc2l6ZS5jIGIvbGlidG9tbWF0aC9ibl9tcF9zaWduZWRfYmluX3NpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGYwYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF9zaWduZWRfYmluX3NpemUuYwpAQCAtMCwwICsxLDI3IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1NJR05FRF9CSU5fU0laRV9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBnZXQgdGhlIHNpemUgZm9yIGFuIHNpZ25lZCBlcXVpdmFsZW50ICovCitpbnQgbXBfc2lnbmVkX2Jpbl9zaXplIChtcF9pbnQgKiBhKQoreworICByZXR1cm4gMSArIG1wX3Vuc2lnbmVkX2Jpbl9zaXplIChhKTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3NpZ25lZF9iaW5fc2l6ZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9zcXIuYyBiL2xpYnRvbW1hdGgvYm5fbXBfc3FyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZmOGE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfc3FyLmMKQEAgLTAsMCArMSw1OCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9TUVJfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY29tcHV0ZXMgYiA9IGEqYSAqLworaW50CittcF9zcXIgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpCit7CisgIGludCAgICAgcmVzOworCisjaWZkZWYgQk5fTVBfVE9PTV9TUVJfQworICAvKiB1c2UgVG9vbS1Db29rPyAqLworICBpZiAoYS0+dXNlZCA+PSBUT09NX1NRUl9DVVRPRkYpIHsKKyAgICByZXMgPSBtcF90b29tX3NxcihhLCBiKTsKKyAgLyogS2FyYXRzdWJhPyAqLworICB9IGVsc2UgCisjZW5kaWYKKyNpZmRlZiBCTl9NUF9LQVJBVFNVQkFfU1FSX0MKK2lmIChhLT51c2VkID49IEtBUkFUU1VCQV9TUVJfQ1VUT0ZGKSB7CisgICAgcmVzID0gbXBfa2FyYXRzdWJhX3NxciAoYSwgYik7CisgIH0gZWxzZSAKKyNlbmRpZgorICB7CisjaWZkZWYgQk5fRkFTVF9TX01QX1NRUl9DCisgICAgLyogY2FuIHdlIHVzZSB0aGUgZmFzdCBjb21iYSBtdWx0aXBsaWVyPyAqLworICAgIGlmICgoYS0+dXNlZCAqIDIgKyAxKSA8IE1QX1dBUlJBWSAmJiAKKyAgICAgICAgIGEtPnVzZWQgPCAKKyAgICAgICAgICgxIDw8IChzaXplb2YobXBfd29yZCkgKiBDSEFSX0JJVCAtIDIqRElHSVRfQklUIC0gMSkpKSB7CisgICAgICByZXMgPSBmYXN0X3NfbXBfc3FyIChhLCBiKTsKKyAgICB9IGVsc2UKKyNlbmRpZgorI2lmZGVmIEJOX1NfTVBfU1FSX0MKKyAgICAgIHJlcyA9IHNfbXBfc3FyIChhLCBiKTsKKyNlbHNlCisgICAgICByZXMgPSBNUF9WQUw7CisjZW5kaWYKKyAgfQorICBiLT5zaWduID0gTVBfWlBPUzsKKyAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3Nxci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9zcXJtb2QuYyBiL2xpYnRvbW1hdGgvYm5fbXBfc3FybW9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhjYmM5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfc3FybW9kLmMKQEAgLTAsMCArMSw0MSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9TUVJNT0RfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogYyA9IGEgKiBhIChtb2QgYikgKi8KK2ludAorbXBfc3FybW9kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBpbnQgICAgIHJlczsKKyAgbXBfaW50ICB0OworCisgIGlmICgocmVzID0gbXBfaW5pdCAoJnQpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIGlmICgocmVzID0gbXBfc3FyIChhLCAmdCkpICE9IE1QX09LQVkpIHsKKyAgICBtcF9jbGVhciAoJnQpOworICAgIHJldHVybiByZXM7CisgIH0KKyAgcmVzID0gbXBfbW9kICgmdCwgYiwgYyk7CisgIG1wX2NsZWFyICgmdCk7CisgIHJldHVybiByZXM7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9zcXJtb2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfc3FydC5jIGIvbGlidG9tbWF0aC9ibl9tcF9zcXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ0OTYyNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfc3FydC5jCkBAIC0wLDAgKzEsODEgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfU1FSVF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGxlc3MgZ2VuZXJpYyB0aGFuIG1wX25fcm9vdCwgc2ltcGxlciBhbmQgZmFzdGVyICovCitpbnQgbXBfc3FydChtcF9pbnQgKmFyZywgbXBfaW50ICpyZXQpIAoreworICBpbnQgcmVzOworICBtcF9pbnQgdDEsdDI7CisKKyAgLyogbXVzdCBiZSBwb3NpdGl2ZSAqLworICBpZiAoYXJnLT5zaWduID09IE1QX05FRykgeworICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworICAvKiBlYXN5IG91dCAqLworICBpZiAobXBfaXN6ZXJvKGFyZykgPT0gTVBfWUVTKSB7CisgICAgbXBfemVybyhyZXQpOworICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkoJnQxLCBhcmcpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIGlmICgocmVzID0gbXBfaW5pdCgmdDIpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBFMjsKKyAgfQorCisgIC8qIEZpcnN0IGFwcHJveC4gKG5vdCB2ZXJ5IGJhZCBmb3IgbGFyZ2UgYXJnKSAqLworICBtcF9yc2hkICgmdDEsdDEudXNlZC8yKTsKKworICAvKiB0MSA+IDAgICovIAorICBpZiAoKHJlcyA9IG1wX2RpdihhcmcsJnQxLCZ0MixOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gRTE7CisgIH0KKyAgaWYgKChyZXMgPSBtcF9hZGQoJnQxLCZ0MiwmdDEpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBFMTsKKyAgfQorICBpZiAoKHJlcyA9IG1wX2Rpdl8yKCZ0MSwmdDEpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBFMTsKKyAgfQorICAvKiBBbmQgbm93IHQxID4gc3FydChhcmcpICovCisgIGRvIHsgCisgICAgaWYgKChyZXMgPSBtcF9kaXYoYXJnLCZ0MSwmdDIsTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gRTE7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0MSwmdDIsJnQxKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBFMTsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9kaXZfMigmdDEsJnQxKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBFMTsKKyAgICB9CisgICAgLyogdDEgPj0gc3FydChhcmcpID49IHQyIGF0IHRoaXMgcG9pbnQgKi8KKyAgfSB3aGlsZSAobXBfY21wX21hZygmdDEsJnQyKSA9PSBNUF9HVCk7CisKKyAgbXBfZXhjaCgmdDEscmV0KTsKKworRTE6IG1wX2NsZWFyKCZ0Mik7CitFMjogbXBfY2xlYXIoJnQxKTsKKyAgcmV0dXJuIHJlczsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfc3FydC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF9zdWIuYyBiL2xpYnRvbW1hdGgvYm5fbXBfc3ViLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY5ZDAzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfc3ViLmMKQEAgLTAsMCArMSw1OSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9TVUJfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogaGlnaCBsZXZlbCBzdWJ0cmFjdGlvbiAoaGFuZGxlcyBzaWducykgKi8KK2ludAorbXBfc3ViIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBpbnQgICAgIHNhLCBzYiwgcmVzOworCisgIHNhID0gYS0+c2lnbjsKKyAgc2IgPSBiLT5zaWduOworCisgIGlmIChzYSAhPSBzYikgeworICAgIC8qIHN1YnRyYWN0IGEgbmVnYXRpdmUgZnJvbSBhIHBvc2l0aXZlLCBPUiAqLworICAgIC8qIHN1YnRyYWN0IGEgcG9zaXRpdmUgZnJvbSBhIG5lZ2F0aXZlLiAqLworICAgIC8qIEluIGVpdGhlciBjYXNlLCBBREQgdGhlaXIgbWFnbml0dWRlcywgKi8KKyAgICAvKiBhbmQgdXNlIHRoZSBzaWduIG9mIHRoZSBmaXJzdCBudW1iZXIuICovCisgICAgYy0+c2lnbiA9IHNhOworICAgIHJlcyA9IHNfbXBfYWRkIChhLCBiLCBjKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBzdWJ0cmFjdCBhIHBvc2l0aXZlIGZyb20gYSBwb3NpdGl2ZSwgT1IgKi8KKyAgICAvKiBzdWJ0cmFjdCBhIG5lZ2F0aXZlIGZyb20gYSBuZWdhdGl2ZS4gKi8KKyAgICAvKiBGaXJzdCwgdGFrZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZWlyICovCisgICAgLyogbWFnbml0dWRlcywgdGhlbi4uLiAqLworICAgIGlmIChtcF9jbXBfbWFnIChhLCBiKSAhPSBNUF9MVCkgeworICAgICAgLyogQ29weSB0aGUgc2lnbiBmcm9tIHRoZSBmaXJzdCAqLworICAgICAgYy0+c2lnbiA9IHNhOworICAgICAgLyogVGhlIGZpcnN0IGhhcyBhIGxhcmdlciBvciBlcXVhbCBtYWduaXR1ZGUgKi8KKyAgICAgIHJlcyA9IHNfbXBfc3ViIChhLCBiLCBjKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogVGhlIHJlc3VsdCBoYXMgdGhlICpvcHBvc2l0ZSogc2lnbiBmcm9tICovCisgICAgICAvKiB0aGUgZmlyc3QgbnVtYmVyLiAqLworICAgICAgYy0+c2lnbiA9IChzYSA9PSBNUF9aUE9TKSA/IE1QX05FRyA6IE1QX1pQT1M7CisgICAgICAvKiBUaGUgc2Vjb25kIGhhcyBhIGxhcmdlciBtYWduaXR1ZGUgKi8KKyAgICAgIHJlcyA9IHNfbXBfc3ViIChiLCBhLCBjKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHJlczsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfc3ViLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3N1Yl9kLmMgYi9saWJ0b21tYXRoL2JuX21wX3N1Yl9kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU3N2E1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfc3ViX2QuYwpAQCAtMCwwICsxLDkzIEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1NVQl9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHNpbmdsZSBkaWdpdCBzdWJ0cmFjdGlvbiAqLworaW50CittcF9zdWJfZCAobXBfaW50ICogYSwgbXBfZGlnaXQgYiwgbXBfaW50ICogYykKK3sKKyAgbXBfZGlnaXQgKnRtcGEsICp0bXBjLCBtdTsKKyAgaW50ICAgICAgIHJlcywgaXgsIG9sZHVzZWQ7CisKKyAgLyogZ3JvdyBjIGFzIHJlcXVpcmVkICovCisgIGlmIChjLT5hbGxvYyA8IGEtPnVzZWQgKyAxKSB7CisgICAgIGlmICgocmVzID0gbXBfZ3JvdyhjLCBhLT51c2VkICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgfQorICB9CisKKyAgLyogaWYgYSBpcyBuZWdhdGl2ZSBqdXN0IGRvIGFuIHVuc2lnbmVkCisgICAqIGFkZGl0aW9uIFt3aXRoIGZ1ZGdlZCBzaWduc10KKyAgICovCisgIGlmIChhLT5zaWduID09IE1QX05FRykgeworICAgICBhLT5zaWduID0gTVBfWlBPUzsKKyAgICAgcmVzICAgICA9IG1wX2FkZF9kKGEsIGIsIGMpOworICAgICBhLT5zaWduID0gYy0+c2lnbiA9IE1QX05FRzsKKworICAgICAvKiBjbGFtcCAqLworICAgICBtcF9jbGFtcChjKTsKKworICAgICByZXR1cm4gcmVzOworICB9CisKKyAgLyogc2V0dXAgcmVncyAqLworICBvbGR1c2VkID0gYy0+dXNlZDsKKyAgdG1wYSAgICA9IGEtPmRwOworICB0bXBjICAgID0gYy0+ZHA7CisKKyAgLyogaWYgYSA8PSBiIHNpbXBseSBmaXggdGhlIHNpbmdsZSBkaWdpdCAqLworICBpZiAoKGEtPnVzZWQgPT0gMSAmJiBhLT5kcFswXSA8PSBiKSB8fCBhLT51c2VkID09IDApIHsKKyAgICAgaWYgKGEtPnVzZWQgPT0gMSkgeworICAgICAgICAqdG1wYysrID0gYiAtICp0bXBhOworICAgICB9IGVsc2UgeworICAgICAgICAqdG1wYysrID0gYjsKKyAgICAgfQorICAgICBpeCAgICAgID0gMTsKKworICAgICAvKiBuZWdhdGl2ZS8xZGlnaXQgKi8KKyAgICAgYy0+c2lnbiA9IE1QX05FRzsKKyAgICAgYy0+dXNlZCA9IDE7CisgIH0gZWxzZSB7CisgICAgIC8qIHBvc2l0aXZlL3NpemUgKi8KKyAgICAgYy0+c2lnbiA9IE1QX1pQT1M7CisgICAgIGMtPnVzZWQgPSBhLT51c2VkOworCisgICAgIC8qIHN1YnRyYWN0IGZpcnN0IGRpZ2l0ICovCisgICAgICp0bXBjICAgID0gKnRtcGErKyAtIGI7CisgICAgIG11ICAgICAgID0gKnRtcGMgPj4gKHNpemVvZihtcF9kaWdpdCkgKiBDSEFSX0JJVCAtIDEpOworICAgICAqdG1wYysrICY9IE1QX01BU0s7CisKKyAgICAgLyogaGFuZGxlIHJlc3Qgb2YgdGhlIGRpZ2l0cyAqLworICAgICBmb3IgKGl4ID0gMTsgaXggPCBhLT51c2VkOyBpeCsrKSB7CisgICAgICAgICp0bXBjICAgID0gKnRtcGErKyAtIG11OworICAgICAgICBtdSAgICAgICA9ICp0bXBjID4+IChzaXplb2YobXBfZGlnaXQpICogQ0hBUl9CSVQgLSAxKTsKKyAgICAgICAgKnRtcGMrKyAmPSBNUF9NQVNLOworICAgICB9CisgIH0KKworICAvKiB6ZXJvIGV4Y2VzcyBkaWdpdHMgKi8KKyAgd2hpbGUgKGl4KysgPCBvbGR1c2VkKSB7CisgICAgICp0bXBjKysgPSAwOworICB9CisgIG1wX2NsYW1wKGMpOworICByZXR1cm4gTVBfT0tBWTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfc3ViX2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfc3VibW9kLmMgYi9saWJ0b21tYXRoL2JuX21wX3N1Ym1vZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjRmMjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX3N1Ym1vZC5jCkBAIC0wLDAgKzEsNDIgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfU1VCTU9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGQgPSBhIC0gYiAobW9kIGMpICovCitpbnQKK21wX3N1Ym1vZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYywgbXBfaW50ICogZCkKK3sKKyAgaW50ICAgICByZXM7CisgIG1wX2ludCAgdDsKKworCisgIGlmICgocmVzID0gbXBfaW5pdCAoJnQpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIGlmICgocmVzID0gbXBfc3ViIChhLCBiLCAmdCkpICE9IE1QX09LQVkpIHsKKyAgICBtcF9jbGVhciAoJnQpOworICAgIHJldHVybiByZXM7CisgIH0KKyAgcmVzID0gbXBfbW9kICgmdCwgYywgZCk7CisgIG1wX2NsZWFyICgmdCk7CisgIHJldHVybiByZXM7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9zdWJtb2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfdG9fc2lnbmVkX2Jpbi5jIGIvbGlidG9tbWF0aC9ibl9tcF90b19zaWduZWRfYmluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEyNWQwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfdG9fc2lnbmVkX2Jpbi5jCkBAIC0wLDAgKzEsMzMgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfVE9fU0lHTkVEX0JJTl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBzdG9yZSBpbiBzaWduZWQgW2JpZyBlbmRpYW5dIGZvcm1hdCAqLworaW50IG1wX3RvX3NpZ25lZF9iaW4gKG1wX2ludCAqIGEsIHVuc2lnbmVkIGNoYXIgKmIpCit7CisgIGludCAgICAgcmVzOworCisgIGlmICgocmVzID0gbXBfdG9fdW5zaWduZWRfYmluIChhLCBiICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisgIGJbMF0gPSAodW5zaWduZWQgY2hhcikgKChhLT5zaWduID09IE1QX1pQT1MpID8gMCA6IDEpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3RvX3NpZ25lZF9iaW4uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfdG9fc2lnbmVkX2Jpbl9uLmMgYi9saWJ0b21tYXRoL2JuX21wX3RvX3NpZ25lZF9iaW5fbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOWQyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX3RvX3NpZ25lZF9iaW5fbi5jCkBAIC0wLDAgKzEsMzEgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfVE9fU0lHTkVEX0JJTl9OX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHN0b3JlIGluIHNpZ25lZCBbYmlnIGVuZGlhbl0gZm9ybWF0ICovCitpbnQgbXBfdG9fc2lnbmVkX2Jpbl9uIChtcF9pbnQgKiBhLCB1bnNpZ25lZCBjaGFyICpiLCB1bnNpZ25lZCBsb25nICpvdXRsZW4pCit7CisgICBpZiAoKm91dGxlbiA8ICh1bnNpZ25lZCBsb25nKW1wX3NpZ25lZF9iaW5fc2l6ZShhKSkgeworICAgICAgcmV0dXJuIE1QX1ZBTDsKKyAgIH0KKyAgICpvdXRsZW4gPSBtcF9zaWduZWRfYmluX3NpemUoYSk7CisgICByZXR1cm4gbXBfdG9fc2lnbmVkX2JpbihhLCBiKTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3RvX3NpZ25lZF9iaW5fbi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF90b191bnNpZ25lZF9iaW4uYyBiL2xpYnRvbW1hdGgvYm5fbXBfdG9fdW5zaWduZWRfYmluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1OTM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfdG9fdW5zaWduZWRfYmluLmMKQEAgLTAsMCArMSw0OCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9UT19VTlNJR05FRF9CSU5fQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogc3RvcmUgaW4gdW5zaWduZWQgW2JpZyBlbmRpYW5dIGZvcm1hdCAqLworaW50IG1wX3RvX3Vuc2lnbmVkX2JpbiAobXBfaW50ICogYSwgdW5zaWduZWQgY2hhciAqYikKK3sKKyAgaW50ICAgICB4LCByZXM7CisgIG1wX2ludCAgdDsKKworICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnQsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIHggPSAwOworICB3aGlsZSAobXBfaXN6ZXJvICgmdCkgPT0gMCkgeworI2lmbmRlZiBNUF84QklUCisgICAgICBiW3grK10gPSAodW5zaWduZWQgY2hhcikgKHQuZHBbMF0gJiAyNTUpOworI2Vsc2UKKyAgICAgIGJbeCsrXSA9ICh1bnNpZ25lZCBjaGFyKSAodC5kcFswXSB8ICgodC5kcFsxXSAmIDB4MDEpIDw8IDcpKTsKKyNlbmRpZgorICAgIGlmICgocmVzID0gbXBfZGl2XzJkICgmdCwgOCwgJnQsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgICBtcF9jbGVhciAoJnQpOworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKyAgYm5fcmV2ZXJzZSAoYiwgeCk7CisgIG1wX2NsZWFyICgmdCk7CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfdG9fdW5zaWduZWRfYmluLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX21wX3RvX3Vuc2lnbmVkX2Jpbl9uLmMgYi9saWJ0b21tYXRoL2JuX21wX3RvX3Vuc2lnbmVkX2Jpbl9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFiZjRlMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfdG9fdW5zaWduZWRfYmluX24uYwpAQCAtMCwwICsxLDMxIEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9OX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHN0b3JlIGluIHVuc2lnbmVkIFtiaWcgZW5kaWFuXSBmb3JtYXQgKi8KK2ludCBtcF90b191bnNpZ25lZF9iaW5fbiAobXBfaW50ICogYSwgdW5zaWduZWQgY2hhciAqYiwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgaWYgKCpvdXRsZW4gPCAodW5zaWduZWQgbG9uZyltcF91bnNpZ25lZF9iaW5fc2l6ZShhKSkgeworICAgICAgcmV0dXJuIE1QX1ZBTDsKKyAgIH0KKyAgICpvdXRsZW4gPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShhKTsKKyAgIHJldHVybiBtcF90b191bnNpZ25lZF9iaW4oYSwgYik7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF90b191bnNpZ25lZF9iaW5fbi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF90b29tX211bC5jIGIvbGlidG9tbWF0aC9ibl9tcF90b29tX211bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMjkwNzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX3Rvb21fbXVsLmMKQEAgLTAsMCArMSwyODQgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfVE9PTV9NVUxfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogbXVsdGlwbGljYXRpb24gdXNpbmcgdGhlIFRvb20tQ29vayAzLXdheSBhbGdvcml0aG0gCisgKgorICogTXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gS2FyYXRzdWJhIGJ1dCBoYXMgYSBsb3dlciAKKyAqIGFzeW1wdG90aWMgcnVubmluZyB0aW1lIG9mIE8oTioqMS40NjQpLiAgVGhpcyBhbGdvcml0aG0gaXMgCisgKiBvbmx5IHBhcnRpY3VsYXJseSB1c2VmdWwgb24gVkVSWSBsYXJnZSBpbnB1dHMgCisgKiAod2UncmUgdGFsa2luZyAxMDAwcyBvZiBkaWdpdHMgaGVyZS4uLikuCisqLworaW50IG1wX3Rvb21fbXVsKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpCit7CisgICAgbXBfaW50IHcwLCB3MSwgdzIsIHczLCB3NCwgdG1wMSwgdG1wMiwgYTAsIGExLCBhMiwgYjAsIGIxLCBiMjsKKyAgICBpbnQgcmVzLCBCOworICAgICAgICAKKyAgICAvKiBpbml0IHRlbXBzICovCisgICAgaWYgKChyZXMgPSBtcF9pbml0X211bHRpKCZ3MCwgJncxLCAmdzIsICZ3MywgJnc0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmEwLCAmYTEsICZhMiwgJmIwLCAmYjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYjIsICZ0bXAxLCAmdG1wMiwgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICAKKyAgICAvKiBCICovCisgICAgQiA9IE1JTihhLT51c2VkLCBiLT51c2VkKSAvIDM7CisgICAgCisgICAgLyogYSA9IGEyICogQioqMiArIGExICogQiArIGEwICovCisgICAgaWYgKChyZXMgPSBtcF9tb2RfMmQoYSwgRElHSVRfQklUICogQiwgJmEwKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfY29weShhLCAmYTEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIG1wX3JzaGQoJmExLCBCKTsKKyAgICBtcF9tb2RfMmQoJmExLCBESUdJVF9CSVQgKiBCLCAmYTEpOworCisgICAgaWYgKChyZXMgPSBtcF9jb3B5KGEsICZhMikpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgbXBfcnNoZCgmYTIsIEIqMik7CisgICAgCisgICAgLyogYiA9IGIyICogQioqMiArIGIxICogQiArIGIwICovCisgICAgaWYgKChyZXMgPSBtcF9tb2RfMmQoYiwgRElHSVRfQklUICogQiwgJmIwKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfY29weShiLCAmYjEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIG1wX3JzaGQoJmIxLCBCKTsKKyAgICBtcF9tb2RfMmQoJmIxLCBESUdJVF9CSVQgKiBCLCAmYjEpOworCisgICAgaWYgKChyZXMgPSBtcF9jb3B5KGIsICZiMikpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgbXBfcnNoZCgmYjIsIEIqMik7CisgICAgCisgICAgLyogdzAgPSBhMCpiMCAqLworICAgIGlmICgocmVzID0gbXBfbXVsKCZhMCwgJmIwLCAmdzApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIAorICAgIC8qIHc0ID0gYTIgKiBiMiAqLworICAgIGlmICgocmVzID0gbXBfbXVsKCZhMiwgJmIyLCAmdzQpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIAorICAgIC8qIHcxID0gKGEyICsgMihhMSArIDJhMCkpKGIyICsgMihiMSArIDJiMCkpICovCisgICAgaWYgKChyZXMgPSBtcF9tdWxfMigmYTAsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmExLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9tdWxfMigmdG1wMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAxLCAmYTIsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICAKKyAgICBpZiAoKHJlcyA9IG1wX211bF8yKCZiMCwgJnRtcDIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAyLCAmYjEsICZ0bXAyKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX211bF8yKCZ0bXAyLCAmdG1wMikpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9hZGQoJnRtcDIsICZiMiwgJnRtcDIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIAorICAgIGlmICgocmVzID0gbXBfbXVsKCZ0bXAxLCAmdG1wMiwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICAKKyAgICAvKiB3MyA9IChhMCArIDIoYTEgKyAyYTIpKShiMCArIDIoYjEgKyAyYjIpKSAqLworICAgIGlmICgocmVzID0gbXBfbXVsXzIoJmEyLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9hZGQoJnRtcDEsICZhMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfbXVsXzIoJnRtcDEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmEwLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgCisgICAgaWYgKChyZXMgPSBtcF9tdWxfMigmYjIsICZ0bXAyKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMiwgJmIxLCAmdG1wMikpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9tdWxfMigmdG1wMiwgJnRtcDIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAyLCAmYjAsICZ0bXAyKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICAKKyAgICBpZiAoKHJlcyA9IG1wX211bCgmdG1wMSwgJnRtcDIsICZ3MykpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgCisKKyAgICAvKiB3MiA9IChhMiArIGExICsgYTApKGIyICsgYjEgKyBiMCkgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmYTIsICZhMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAxLCAmYTAsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmYjIsICZiMSwgJnRtcDIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAyLCAmYjAsICZ0bXAyKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX211bCgmdG1wMSwgJnRtcDIsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgCisgICAgLyogbm93IHNvbHZlIHRoZSBtYXRyaXggCisgICAgCisgICAgICAgMCAgMCAgMCAgMCAgMQorICAgICAgIDEgIDIgIDQgIDggIDE2CisgICAgICAgMSAgMSAgMSAgMSAgMQorICAgICAgIDE2IDggIDQgIDIgIDEKKyAgICAgICAxICAwICAwICAwICAwCisgICAgICAgCisgICAgICAgdXNpbmcgMTIgc3VidHJhY3Rpb25zLCA0IHNoaWZ0cywgCisgICAgICAgICAgICAgIDIgc21hbGwgZGl2aXNpb25zIGFuZCAxIHNtYWxsIG11bHRpcGxpY2F0aW9uIAorICAgICAqLworICAgICAKKyAgICAgLyogcjEgLSByNCAqLworICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzEsICZ3NCwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMyAtIHIwICovCisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MywgJncwLCAmdzMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIxLzIgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9kaXZfMigmdzEsICZ3MSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjMvMiAqLworICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yKCZ3MywgJnczKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMiAtIHIwIC0gcjQgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncyLCAmdzAsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncyLCAmdzQsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjEgLSByMiAqLworICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzEsICZ3MiwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMyAtIHIyICovCisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MywgJncyLCAmdzMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIxIC0gOHIwICovCisgICAgIGlmICgocmVzID0gbXBfbXVsXzJkKCZ3MCwgMywgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MSwgJnRtcDEsICZ3MSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjMgLSA4cjQgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9tdWxfMmQoJnc0LCAzLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJnczLCAmdG1wMSwgJnczKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiAzcjIgLSByMSAtIHIzICovCisgICAgIGlmICgocmVzID0gbXBfbXVsX2QoJncyLCAzLCAmdzIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MiwgJncxLCAmdzIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MiwgJnczLCAmdzIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIxIC0gcjIgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncxLCAmdzIsICZ3MSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjMgLSByMiAqLworICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzMsICZ3MiwgJnczKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMS8zICovCisgICAgIGlmICgocmVzID0gbXBfZGl2XzMoJncxLCAmdzEsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIzLzMgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9kaXZfMygmdzMsICZ3MywgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgCisgICAgIC8qIGF0IHRoaXMgcG9pbnQgc2hpZnQgV1tuXSBieSBCKm4gKi8KKyAgICAgaWYgKChyZXMgPSBtcF9sc2hkKCZ3MSwgMSpCKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX2xzaGQoJncyLCAyKkIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfbHNoZCgmdzMsIDMqQikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9sc2hkKCZ3NCwgNCpCKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfSAgICAgCisgICAgIAorICAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdzAsICZ3MSwgYykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9hZGQoJncyLCAmdzMsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdzQsICZ0bXAxLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9hZGQoJnRtcDEsIGMsIGMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9ICAgICAKKyAgICAgCitFUlI6CisgICAgIG1wX2NsZWFyX211bHRpKCZ3MCwgJncxLCAmdzIsICZ3MywgJnc0LCAKKyAgICAgICAgICAgICAgICAgICAgJmEwLCAmYTEsICZhMiwgJmIwLCAmYjEsIAorICAgICAgICAgICAgICAgICAgICAmYjIsICZ0bXAxLCAmdG1wMiwgTlVMTCk7CisgICAgIHJldHVybiByZXM7Cit9ICAgICAKKyAgICAgCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF90b29tX211bC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF90b29tX3Nxci5jIGIvbGlidG9tbWF0aC9ibl9tcF90b29tX3Nxci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MzE4MWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX21wX3Rvb21fc3FyLmMKQEAgLTAsMCArMSwyMjYgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfVE9PTV9TUVJfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogc3F1YXJpbmcgdXNpbmcgVG9vbS1Db29rIDMtd2F5IGFsZ29yaXRobSAqLworaW50CittcF90b29tX3NxcihtcF9pbnQgKmEsIG1wX2ludCAqYikKK3sKKyAgICBtcF9pbnQgdzAsIHcxLCB3MiwgdzMsIHc0LCB0bXAxLCBhMCwgYTEsIGEyOworICAgIGludCByZXMsIEI7CisKKyAgICAvKiBpbml0IHRlbXBzICovCisgICAgaWYgKChyZXMgPSBtcF9pbml0X211bHRpKCZ3MCwgJncxLCAmdzIsICZ3MywgJnc0LCAmYTAsICZhMSwgJmEyLCAmdG1wMSwgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIC8qIEIgKi8KKyAgICBCID0gYS0+dXNlZCAvIDM7CisKKyAgICAvKiBhID0gYTIgKiBCKioyICsgYTEgKiBCICsgYTAgKi8KKyAgICBpZiAoKHJlcyA9IG1wX21vZF8yZChhLCBESUdJVF9CSVQgKiBCLCAmYTApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorCisgICAgaWYgKChyZXMgPSBtcF9jb3B5KGEsICZhMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgbXBfcnNoZCgmYTEsIEIpOworICAgIG1wX21vZF8yZCgmYTEsIERJR0lUX0JJVCAqIEIsICZhMSk7CisKKyAgICBpZiAoKHJlcyA9IG1wX2NvcHkoYSwgJmEyKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBtcF9yc2hkKCZhMiwgQioyKTsKKworICAgIC8qIHcwID0gYTAqYTAgKi8KKyAgICBpZiAoKHJlcyA9IG1wX3NxcigmYTAsICZ3MCkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisKKyAgICAvKiB3NCA9IGEyICogYTIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX3NxcigmYTIsICZ3NCkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisKKyAgICAvKiB3MSA9IChhMiArIDIoYTEgKyAyYTApKSoqMiAqLworICAgIGlmICgocmVzID0gbXBfbXVsXzIoJmEwLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9hZGQoJnRtcDEsICZhMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfbXVsXzIoJnRtcDEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmEyLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisKKyAgICBpZiAoKHJlcyA9IG1wX3NxcigmdG1wMSwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKworICAgIC8qIHczID0gKGEwICsgMihhMSArIDJhMikpKioyICovCisgICAgaWYgKChyZXMgPSBtcF9tdWxfMigmYTIsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmExLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9tdWxfMigmdG1wMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAxLCAmYTAsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfc3FyKCZ0bXAxLCAmdzMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorCisKKyAgICAvKiB3MiA9IChhMiArIGExICsgYTApKioyICovCisgICAgaWYgKChyZXMgPSBtcF9hZGQoJmEyLCAmYTEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmEwLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9zcXIoJnRtcDEsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisKKyAgICAvKiBub3cgc29sdmUgdGhlIG1hdHJpeAorCisgICAgICAgMCAgMCAgMCAgMCAgMQorICAgICAgIDEgIDIgIDQgIDggIDE2CisgICAgICAgMSAgMSAgMSAgMSAgMQorICAgICAgIDE2IDggIDQgIDIgIDEKKyAgICAgICAxICAwICAwICAwICAwCisKKyAgICAgICB1c2luZyAxMiBzdWJ0cmFjdGlvbnMsIDQgc2hpZnRzLCAyIHNtYWxsIGRpdmlzaW9ucyBhbmQgMSBzbWFsbCBtdWx0aXBsaWNhdGlvbi4KKyAgICAgKi8KKworICAgICAvKiByMSAtIHI0ICovCisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MSwgJnc0LCAmdzEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIzIC0gcjAgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJnczLCAmdzAsICZ3MykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjEvMiAqLworICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yKCZ3MSwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMy8yICovCisgICAgIGlmICgocmVzID0gbXBfZGl2XzIoJnczLCAmdzMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIyIC0gcjAgLSByNCAqLworICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzIsICZ3MCwgJncyKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzIsICZ3NCwgJncyKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMSAtIHIyICovCisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MSwgJncyLCAmdzEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIzIC0gcjIgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJnczLCAmdzIsICZ3MykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjEgLSA4cjAgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9tdWxfMmQoJncwLCAzLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncxLCAmdG1wMSwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMyAtIDhyNCAqLworICAgICBpZiAoKHJlcyA9IG1wX211bF8yZCgmdzQsIDMsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzMsICZ0bXAxLCAmdzMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIDNyMiAtIHIxIC0gcjMgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9tdWxfZCgmdzIsIDMsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncyLCAmdzEsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncyLCAmdzMsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjEgLSByMiAqLworICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzEsICZ3MiwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMyAtIHIyICovCisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MywgJncyLCAmdzMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIxLzMgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9kaXZfMygmdzEsICZ3MSwgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjMvMyAqLworICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8zKCZ3MywgJnczLCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorCisgICAgIC8qIGF0IHRoaXMgcG9pbnQgc2hpZnQgV1tuXSBieSBCKm4gKi8KKyAgICAgaWYgKChyZXMgPSBtcF9sc2hkKCZ3MSwgMSpCKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX2xzaGQoJncyLCAyKkIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfbHNoZCgmdzMsIDMqQikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9sc2hkKCZ3NCwgNCpCKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorCisgICAgIGlmICgocmVzID0gbXBfYWRkKCZ3MCwgJncxLCBiKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdzIsICZ3MywgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfYWRkKCZ3NCwgJnRtcDEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgYiwgYikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKworRVJSOgorICAgICBtcF9jbGVhcl9tdWx0aSgmdzAsICZ3MSwgJncyLCAmdzMsICZ3NCwgJmEwLCAmYTEsICZhMiwgJnRtcDEsIE5VTEwpOworICAgICByZXR1cm4gcmVzOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF90b29tX3Nxci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF90b3JhZGl4LmMgYi9saWJ0b21tYXRoL2JuX21wX3RvcmFkaXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTAwODMyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF90b3JhZGl4LmMKQEAgLTAsMCArMSw3NSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9UT1JBRElYX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHN0b3JlcyBhIGJpZ251bSBhcyBhIEFTQ0lJIHN0cmluZyBpbiBhIGdpdmVuIHJhZGl4ICgyLi42NCkgKi8KK2ludCBtcF90b3JhZGl4IChtcF9pbnQgKiBhLCBjaGFyICpzdHIsIGludCByYWRpeCkKK3sKKyAgaW50ICAgICByZXMsIGRpZ3M7CisgIG1wX2ludCAgdDsKKyAgbXBfZGlnaXQgZDsKKyAgY2hhciAgICpfcyA9IHN0cjsKKworICAvKiBjaGVjayByYW5nZSBvZiB0aGUgcmFkaXggKi8KKyAgaWYgKHJhZGl4IDwgMiB8fCByYWRpeCA+IDY0KSB7CisgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIHF1aWNrIG91dCBpZiBpdHMgemVybyAqLworICBpZiAobXBfaXN6ZXJvKGEpID09IDEpIHsKKyAgICAgKnN0cisrID0gJzAnOworICAgICAqc3RyID0gJ1wwJzsKKyAgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnQsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIGlmIGl0IGlzIG5lZ2F0aXZlIG91dHB1dCBhIC0gKi8KKyAgaWYgKHQuc2lnbiA9PSBNUF9ORUcpIHsKKyAgICArK19zOworICAgICpzdHIrKyA9ICctJzsKKyAgICB0LnNpZ24gPSBNUF9aUE9TOworICB9CisKKyAgZGlncyA9IDA7CisgIHdoaWxlIChtcF9pc3plcm8gKCZ0KSA9PSAwKSB7CisgICAgaWYgKChyZXMgPSBtcF9kaXZfZCAoJnQsIChtcF9kaWdpdCkgcmFkaXgsICZ0LCAmZCkpICE9IE1QX09LQVkpIHsKKyAgICAgIG1wX2NsZWFyICgmdCk7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICAqc3RyKysgPSBtcF9zX3JtYXBbZF07CisgICAgKytkaWdzOworICB9CisKKyAgLyogcmV2ZXJzZSB0aGUgZGlnaXRzIG9mIHRoZSBzdHJpbmcuICBJbiB0aGlzIGNhc2UgX3MgcG9pbnRzCisgICAqIHRvIHRoZSBmaXJzdCBkaWdpdCBbZXhsdWRpbmcgdGhlIHNpZ25dIG9mIHRoZSBudW1iZXJdCisgICAqLworICBibl9yZXZlcnNlICgodW5zaWduZWQgY2hhciAqKV9zLCBkaWdzKTsKKworICAvKiBhcHBlbmQgYSBOVUxMIHNvIHRoZSBzdHJpbmcgaXMgcHJvcGVybHkgdGVybWluYXRlZCAqLworICAqc3RyID0gJ1wwJzsKKworICBtcF9jbGVhciAoJnQpOworICByZXR1cm4gTVBfT0tBWTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfdG9yYWRpeC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF90b3JhZGl4X24uYyBiL2xpYnRvbW1hdGgvYm5fbXBfdG9yYWRpeF9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MwZjNiYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfdG9yYWRpeF9uLmMKQEAgLTAsMCArMSw4OCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9UT1JBRElYX05fQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogc3RvcmVzIGEgYmlnbnVtIGFzIGEgQVNDSUkgc3RyaW5nIGluIGEgZ2l2ZW4gcmFkaXggKDIuLjY0KSAKKyAqCisgKiBTdG9yZXMgdXB0byBtYXhsZW4tMSBjaGFycyBhbmQgYWx3YXlzIGEgTlVMTCBieXRlIAorICovCitpbnQgbXBfdG9yYWRpeF9uKG1wX2ludCAqIGEsIGNoYXIgKnN0ciwgaW50IHJhZGl4LCBpbnQgbWF4bGVuKQoreworICBpbnQgICAgIHJlcywgZGlnczsKKyAgbXBfaW50ICB0OworICBtcF9kaWdpdCBkOworICBjaGFyICAgKl9zID0gc3RyOworCisgIC8qIGNoZWNrIHJhbmdlIG9mIHRoZSBtYXhsZW4sIHJhZGl4ICovCisgIGlmIChtYXhsZW4gPCAyIHx8IHJhZGl4IDwgMiB8fCByYWRpeCA+IDY0KSB7CisgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIHF1aWNrIG91dCBpZiBpdHMgemVybyAqLworICBpZiAobXBfaXN6ZXJvKGEpID09IE1QX1lFUykgeworICAgICAqc3RyKysgPSAnMCc7CisgICAgICpzdHIgPSAnXDAnOworICAgICByZXR1cm4gTVBfT0tBWTsKKyAgfQorCisgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmdCwgYSkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLyogaWYgaXQgaXMgbmVnYXRpdmUgb3V0cHV0IGEgLSAqLworICBpZiAodC5zaWduID09IE1QX05FRykgeworICAgIC8qIHdlIGhhdmUgdG8gcmV2ZXJzZSBvdXIgZGlnaXRzIGxhdGVyLi4uIGJ1dCBub3QgdGhlIC0gc2lnbiEhICovCisgICAgKytfczsKKworICAgIC8qIHN0b3JlIHRoZSBmbGFnIGFuZCBtYXJrIHRoZSBudW1iZXIgYXMgcG9zaXRpdmUgKi8KKyAgICAqc3RyKysgPSAnLSc7CisgICAgdC5zaWduID0gTVBfWlBPUzsKKyAKKyAgICAvKiBzdWJ0cmFjdCBhIGNoYXIgKi8KKyAgICAtLW1heGxlbjsKKyAgfQorCisgIGRpZ3MgPSAwOworICB3aGlsZSAobXBfaXN6ZXJvICgmdCkgPT0gMCkgeworICAgIGlmICgtLW1heGxlbiA8IDEpIHsKKyAgICAgICAvKiBubyBtb3JlIHJvb20gKi8KKyAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9kaXZfZCAoJnQsIChtcF9kaWdpdCkgcmFkaXgsICZ0LCAmZCkpICE9IE1QX09LQVkpIHsKKyAgICAgIG1wX2NsZWFyICgmdCk7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICAqc3RyKysgPSBtcF9zX3JtYXBbZF07CisgICAgKytkaWdzOworICB9CisKKyAgLyogcmV2ZXJzZSB0aGUgZGlnaXRzIG9mIHRoZSBzdHJpbmcuICBJbiB0aGlzIGNhc2UgX3MgcG9pbnRzCisgICAqIHRvIHRoZSBmaXJzdCBkaWdpdCBbZXhsdWRpbmcgdGhlIHNpZ25dIG9mIHRoZSBudW1iZXIKKyAgICovCisgIGJuX3JldmVyc2UgKCh1bnNpZ25lZCBjaGFyICopX3MsIGRpZ3MpOworCisgIC8qIGFwcGVuZCBhIE5VTEwgc28gdGhlIHN0cmluZyBpcyBwcm9wZXJseSB0ZXJtaW5hdGVkICovCisgICpzdHIgPSAnXDAnOworCisgIG1wX2NsZWFyICgmdCk7CisgIHJldHVybiBNUF9PS0FZOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF90b3JhZGl4X24uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfdW5zaWduZWRfYmluX3NpemUuYyBiL2xpYnRvbW1hdGgvYm5fbXBfdW5zaWduZWRfYmluX3NpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGQ2YWEwCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9tcF91bnNpZ25lZF9iaW5fc2l6ZS5jCkBAIC0wLDAgKzEsMjggQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfVU5TSUdORURfQklOX1NJWkVfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZ2V0IHRoZSBzaXplIGZvciBhbiB1bnNpZ25lZCBlcXVpdmFsZW50ICovCitpbnQgbXBfdW5zaWduZWRfYmluX3NpemUgKG1wX2ludCAqIGEpCit7CisgIGludCAgICAgc2l6ZSA9IG1wX2NvdW50X2JpdHMgKGEpOworICByZXR1cm4gKHNpemUgLyA4ICsgKChzaXplICYgNykgIT0gMCA/IDEgOiAwKSk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF91bnNpZ25lZF9iaW5fc2l6ZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9tcF94b3IuYyBiL2xpYnRvbW1hdGgvYm5fbXBfeG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4YzFhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfeG9yLmMKQEAgLTAsMCArMSw1MSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9YT1JfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogWE9SIHR3byBpbnRzIHRvZ2V0aGVyICovCitpbnQKK21wX3hvciAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK3sKKyAgaW50ICAgICByZXMsIGl4LCBweDsKKyAgbXBfaW50ICB0LCAqeDsKKworICBpZiAoYS0+dXNlZCA+IGItPnVzZWQpIHsKKyAgICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnQsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBweCA9IGItPnVzZWQ7CisgICAgeCA9IGI7CisgIH0gZWxzZSB7CisgICAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkgKCZ0LCBiKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgcHggPSBhLT51c2VkOworICAgIHggPSBhOworICB9CisKKyAgZm9yIChpeCA9IDA7IGl4IDwgcHg7IGl4KyspIHsKKyAgICAgdC5kcFtpeF0gXj0geC0+ZHBbaXhdOworICB9CisgIG1wX2NsYW1wICgmdCk7CisgIG1wX2V4Y2ggKGMsICZ0KTsKKyAgbXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF94b3IuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fbXBfemVyby5jIGIvbGlidG9tbWF0aC9ibl9tcF96ZXJvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhmZDUzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fbXBfemVyby5jCkBAIC0wLDAgKzEsMzYgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfWkVST19DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBzZXQgdG8gemVybyAqLwordm9pZCBtcF96ZXJvIChtcF9pbnQgKiBhKQoreworICBpbnQgICAgICAgbjsKKyAgbXBfZGlnaXQgKnRtcDsKKworICBhLT5zaWduID0gTVBfWlBPUzsKKyAgYS0+dXNlZCA9IDA7CisKKyAgdG1wID0gYS0+ZHA7CisgIGZvciAobiA9IDA7IG4gPCBhLT5hbGxvYzsgbisrKSB7CisgICAgICp0bXArKyA9IDA7CisgIH0KK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3plcm8uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fcHJpbWVfdGFiLmMgYi9saWJ0b21tYXRoL2JuX3ByaW1lX3RhYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyMmQ0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX3ByaW1lX3RhYi5jCkBAIC0wLDAgKzEsNjEgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fUFJJTUVfVEFCX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCitjb25zdCBtcF9kaWdpdCBsdG1fcHJpbWVfdGFiW10gPSB7CisgIDB4MDAwMiwgMHgwMDAzLCAweDAwMDUsIDB4MDAwNywgMHgwMDBCLCAweDAwMEQsIDB4MDAxMSwgMHgwMDEzLAorICAweDAwMTcsIDB4MDAxRCwgMHgwMDFGLCAweDAwMjUsIDB4MDAyOSwgMHgwMDJCLCAweDAwMkYsIDB4MDAzNSwKKyAgMHgwMDNCLCAweDAwM0QsIDB4MDA0MywgMHgwMDQ3LCAweDAwNDksIDB4MDA0RiwgMHgwMDUzLCAweDAwNTksCisgIDB4MDA2MSwgMHgwMDY1LCAweDAwNjcsIDB4MDA2QiwgMHgwMDZELCAweDAwNzEsIDB4MDA3RiwKKyNpZm5kZWYgTVBfOEJJVAorICAweDAwODMsCisgIDB4MDA4OSwgMHgwMDhCLCAweDAwOTUsIDB4MDA5NywgMHgwMDlELCAweDAwQTMsIDB4MDBBNywgMHgwMEFELAorICAweDAwQjMsIDB4MDBCNSwgMHgwMEJGLCAweDAwQzEsIDB4MDBDNSwgMHgwMEM3LCAweDAwRDMsIDB4MDBERiwKKyAgMHgwMEUzLCAweDAwRTUsIDB4MDBFOSwgMHgwMEVGLCAweDAwRjEsIDB4MDBGQiwgMHgwMTAxLCAweDAxMDcsCisgIDB4MDEwRCwgMHgwMTBGLCAweDAxMTUsIDB4MDExOSwgMHgwMTFCLCAweDAxMjUsIDB4MDEzMywgMHgwMTM3LAorCisgIDB4MDEzOSwgMHgwMTNELCAweDAxNEIsIDB4MDE1MSwgMHgwMTVCLCAweDAxNUQsIDB4MDE2MSwgMHgwMTY3LAorICAweDAxNkYsIDB4MDE3NSwgMHgwMTdCLCAweDAxN0YsIDB4MDE4NSwgMHgwMThELCAweDAxOTEsIDB4MDE5OSwKKyAgMHgwMUEzLCAweDAxQTUsIDB4MDFBRiwgMHgwMUIxLCAweDAxQjcsIDB4MDFCQiwgMHgwMUMxLCAweDAxQzksCisgIDB4MDFDRCwgMHgwMUNGLCAweDAxRDMsIDB4MDFERiwgMHgwMUU3LCAweDAxRUIsIDB4MDFGMywgMHgwMUY3LAorICAweDAxRkQsIDB4MDIwOSwgMHgwMjBCLCAweDAyMUQsIDB4MDIyMywgMHgwMjJELCAweDAyMzMsIDB4MDIzOSwKKyAgMHgwMjNCLCAweDAyNDEsIDB4MDI0QiwgMHgwMjUxLCAweDAyNTcsIDB4MDI1OSwgMHgwMjVGLCAweDAyNjUsCisgIDB4MDI2OSwgMHgwMjZCLCAweDAyNzcsIDB4MDI4MSwgMHgwMjgzLCAweDAyODcsIDB4MDI4RCwgMHgwMjkzLAorICAweDAyOTUsIDB4MDJBMSwgMHgwMkE1LCAweDAyQUIsIDB4MDJCMywgMHgwMkJELCAweDAyQzUsIDB4MDJDRiwKKworICAweDAyRDcsIDB4MDJERCwgMHgwMkUzLCAweDAyRTcsIDB4MDJFRiwgMHgwMkY1LCAweDAyRjksIDB4MDMwMSwKKyAgMHgwMzA1LCAweDAzMTMsIDB4MDMxRCwgMHgwMzI5LCAweDAzMkIsIDB4MDMzNSwgMHgwMzM3LCAweDAzM0IsCisgIDB4MDMzRCwgMHgwMzQ3LCAweDAzNTUsIDB4MDM1OSwgMHgwMzVCLCAweDAzNUYsIDB4MDM2RCwgMHgwMzcxLAorICAweDAzNzMsIDB4MDM3NywgMHgwMzhCLCAweDAzOEYsIDB4MDM5NywgMHgwM0ExLCAweDAzQTksIDB4MDNBRCwKKyAgMHgwM0IzLCAweDAzQjksIDB4MDNDNywgMHgwM0NCLCAweDAzRDEsIDB4MDNENywgMHgwM0RGLCAweDAzRTUsCisgIDB4MDNGMSwgMHgwM0Y1LCAweDAzRkIsIDB4MDNGRCwgMHgwNDA3LCAweDA0MDksIDB4MDQwRiwgMHgwNDE5LAorICAweDA0MUIsIDB4MDQyNSwgMHgwNDI3LCAweDA0MkQsIDB4MDQzRiwgMHgwNDQzLCAweDA0NDUsIDB4MDQ0OSwKKyAgMHgwNDRGLCAweDA0NTUsIDB4MDQ1RCwgMHgwNDYzLCAweDA0NjksIDB4MDQ3RiwgMHgwNDgxLCAweDA0OEIsCisKKyAgMHgwNDkzLCAweDA0OUQsIDB4MDRBMywgMHgwNEE5LCAweDA0QjEsIDB4MDRCRCwgMHgwNEMxLCAweDA0QzcsCisgIDB4MDRDRCwgMHgwNENGLCAweDA0RDUsIDB4MDRFMSwgMHgwNEVCLCAweDA0RkQsIDB4MDRGRiwgMHgwNTAzLAorICAweDA1MDksIDB4MDUwQiwgMHgwNTExLCAweDA1MTUsIDB4MDUxNywgMHgwNTFCLCAweDA1MjcsIDB4MDUyOSwKKyAgMHgwNTJGLCAweDA1NTEsIDB4MDU1NywgMHgwNTVELCAweDA1NjUsIDB4MDU3NywgMHgwNTgxLCAweDA1OEYsCisgIDB4MDU5MywgMHgwNTk1LCAweDA1OTksIDB4MDU5RiwgMHgwNUE3LCAweDA1QUIsIDB4MDVBRCwgMHgwNUIzLAorICAweDA1QkYsIDB4MDVDOSwgMHgwNUNCLCAweDA1Q0YsIDB4MDVEMSwgMHgwNUQ1LCAweDA1REIsIDB4MDVFNywKKyAgMHgwNUYzLCAweDA1RkIsIDB4MDYwNywgMHgwNjBELCAweDA2MTEsIDB4MDYxNywgMHgwNjFGLCAweDA2MjMsCisgIDB4MDYyQiwgMHgwNjJGLCAweDA2M0QsIDB4MDY0MSwgMHgwNjQ3LCAweDA2NDksIDB4MDY0RCwgMHgwNjUzCisjZW5kaWYKK307CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9wcmltZV90YWIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fcmV2ZXJzZS5jIGIvbGlidG9tbWF0aC9ibl9yZXZlcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQxOTYyNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fcmV2ZXJzZS5jCkBAIC0wLDAgKzEsMzkgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fUkVWRVJTRV9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiByZXZlcnNlIGFuIGFycmF5LCB1c2VkIGZvciByYWRpeCBjb2RlICovCit2b2lkCitibl9yZXZlcnNlICh1bnNpZ25lZCBjaGFyICpzLCBpbnQgbGVuKQoreworICBpbnQgICAgIGl4LCBpeTsKKyAgdW5zaWduZWQgY2hhciB0OworCisgIGl4ID0gMDsKKyAgaXkgPSBsZW4gLSAxOworICB3aGlsZSAoaXggPCBpeSkgeworICAgIHQgICAgID0gc1tpeF07CisgICAgc1tpeF0gPSBzW2l5XTsKKyAgICBzW2l5XSA9IHQ7CisgICAgKytpeDsKKyAgICAtLWl5OworICB9Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9yZXZlcnNlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX3NfbXBfYWRkLmMgYi9saWJ0b21tYXRoL2JuX3NfbXBfYWRkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxN2YxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fc19tcF9hZGQuYwpAQCAtMCwwICsxLDEwOSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9TX01QX0FERF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBsb3cgbGV2ZWwgYWRkaXRpb24sIGJhc2VkIG9uIEhBQyBwcC41OTQsIEFsZ29yaXRobSAxNC43ICovCitpbnQKK3NfbXBfYWRkIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBtcF9pbnQgKng7CisgIGludCAgICAgb2xkdXNlLCByZXMsIG1pbiwgbWF4OworCisgIC8qIGZpbmQgc2l6ZXMsIHdlIGxldCB8YXwgPD0gfGJ8IHdoaWNoIG1lYW5zIHdlIGhhdmUgdG8gc29ydAorICAgKiB0aGVtLiAgIngiIHdpbGwgcG9pbnQgdG8gdGhlIGlucHV0IHdpdGggdGhlIG1vc3QgZGlnaXRzCisgICAqLworICBpZiAoYS0+dXNlZCA+IGItPnVzZWQpIHsKKyAgICBtaW4gPSBiLT51c2VkOworICAgIG1heCA9IGEtPnVzZWQ7CisgICAgeCA9IGE7CisgIH0gZWxzZSB7CisgICAgbWluID0gYS0+dXNlZDsKKyAgICBtYXggPSBiLT51c2VkOworICAgIHggPSBiOworICB9CisKKyAgLyogaW5pdCByZXN1bHQgKi8KKyAgaWYgKGMtPmFsbG9jIDwgbWF4ICsgMSkgeworICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYywgbWF4ICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisKKyAgLyogZ2V0IG9sZCB1c2VkIGRpZ2l0IGNvdW50IGFuZCBzZXQgbmV3IG9uZSAqLworICBvbGR1c2UgPSBjLT51c2VkOworICBjLT51c2VkID0gbWF4ICsgMTsKKworICB7CisgICAgcmVnaXN0ZXIgbXBfZGlnaXQgdSwgKnRtcGEsICp0bXBiLCAqdG1wYzsKKyAgICByZWdpc3RlciBpbnQgaTsKKworICAgIC8qIGFsaWFzIGZvciBkaWdpdCBwb2ludGVycyAqLworCisgICAgLyogZmlyc3QgaW5wdXQgKi8KKyAgICB0bXBhID0gYS0+ZHA7CisKKyAgICAvKiBzZWNvbmQgaW5wdXQgKi8KKyAgICB0bXBiID0gYi0+ZHA7CisKKyAgICAvKiBkZXN0aW5hdGlvbiAqLworICAgIHRtcGMgPSBjLT5kcDsKKworICAgIC8qIHplcm8gdGhlIGNhcnJ5ICovCisgICAgdSA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG1pbjsgaSsrKSB7CisgICAgICAvKiBDb21wdXRlIHRoZSBzdW0gYXQgb25lIGRpZ2l0LCBUW2ldID0gQVtpXSArIEJbaV0gKyBVICovCisgICAgICAqdG1wYyA9ICp0bXBhKysgKyAqdG1wYisrICsgdTsKKworICAgICAgLyogVSA9IGNhcnJ5IGJpdCBvZiBUW2ldICovCisgICAgICB1ID0gKnRtcGMgPj4gKChtcF9kaWdpdClESUdJVF9CSVQpOworCisgICAgICAvKiB0YWtlIGF3YXkgY2FycnkgYml0IGZyb20gVFtpXSAqLworICAgICAgKnRtcGMrKyAmPSBNUF9NQVNLOworICAgIH0KKworICAgIC8qIG5vdyBjb3B5IGhpZ2hlciB3b3JkcyBpZiBhbnksIHRoYXQgaXMgaW4gQStCIAorICAgICAqIGlmIEEgb3IgQiBoYXMgbW9yZSBkaWdpdHMgYWRkIHRob3NlIGluIAorICAgICAqLworICAgIGlmIChtaW4gIT0gbWF4KSB7CisgICAgICBmb3IgKDsgaSA8IG1heDsgaSsrKSB7CisgICAgICAgIC8qIFRbaV0gPSBYW2ldICsgVSAqLworICAgICAgICAqdG1wYyA9IHgtPmRwW2ldICsgdTsKKworICAgICAgICAvKiBVID0gY2FycnkgYml0IG9mIFRbaV0gKi8KKyAgICAgICAgdSA9ICp0bXBjID4+ICgobXBfZGlnaXQpRElHSVRfQklUKTsKKworICAgICAgICAvKiB0YWtlIGF3YXkgY2FycnkgYml0IGZyb20gVFtpXSAqLworICAgICAgICAqdG1wYysrICY9IE1QX01BU0s7CisgICAgICB9CisgICAgfQorCisgICAgLyogYWRkIGNhcnJ5ICovCisgICAgKnRtcGMrKyA9IHU7CisKKyAgICAvKiBjbGVhciBkaWdpdHMgYWJvdmUgb2xkdXNlZCAqLworICAgIGZvciAoaSA9IGMtPnVzZWQ7IGkgPCBvbGR1c2U7IGkrKykgeworICAgICAgKnRtcGMrKyA9IDA7CisgICAgfQorICB9CisKKyAgbXBfY2xhbXAgKGMpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX3NfbXBfYWRkLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2JuX3NfbXBfZXhwdG1vZC5jIGIvbGlidG9tbWF0aC9ibl9zX21wX2V4cHRtb2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODkxOTdjCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ibl9zX21wX2V4cHRtb2QuYwpAQCAtMCwwICsxLDI1MiBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9TX01QX0VYUFRNT0RfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKyNpZmRlZiBNUF9MT1dfTUVNCisgICAjZGVmaW5lIFRBQl9TSVpFIDMyCisjZWxzZQorICAgI2RlZmluZSBUQUJfU0laRSAyNTYKKyNlbmRpZgorCitpbnQgc19tcF9leHB0bW9kIChtcF9pbnQgKiBHLCBtcF9pbnQgKiBYLCBtcF9pbnQgKiBQLCBtcF9pbnQgKiBZLCBpbnQgcmVkbW9kZSkKK3sKKyAgbXBfaW50ICBNW1RBQl9TSVpFXSwgcmVzLCBtdTsKKyAgbXBfZGlnaXQgYnVmOworICBpbnQgICAgIGVyciwgYml0YnVmLCBiaXRjcHksIGJpdGNudCwgbW9kZSwgZGlnaWR4LCB4LCB5LCB3aW5zaXplOworICBpbnQgKCpyZWR1eCkobXBfaW50KixtcF9pbnQqLG1wX2ludCopOworCisgIC8qIGZpbmQgd2luZG93IHNpemUgKi8KKyAgeCA9IG1wX2NvdW50X2JpdHMgKFgpOworICBpZiAoeCA8PSA3KSB7CisgICAgd2luc2l6ZSA9IDI7CisgIH0gZWxzZSBpZiAoeCA8PSAzNikgeworICAgIHdpbnNpemUgPSAzOworICB9IGVsc2UgaWYgKHggPD0gMTQwKSB7CisgICAgd2luc2l6ZSA9IDQ7CisgIH0gZWxzZSBpZiAoeCA8PSA0NTApIHsKKyAgICB3aW5zaXplID0gNTsKKyAgfSBlbHNlIGlmICh4IDw9IDEzMDMpIHsKKyAgICB3aW5zaXplID0gNjsKKyAgfSBlbHNlIGlmICh4IDw9IDM1MjkpIHsKKyAgICB3aW5zaXplID0gNzsKKyAgfSBlbHNlIHsKKyAgICB3aW5zaXplID0gODsKKyAgfQorCisjaWZkZWYgTVBfTE9XX01FTQorICAgIGlmICh3aW5zaXplID4gNSkgeworICAgICAgIHdpbnNpemUgPSA1OworICAgIH0KKyNlbmRpZgorCisgIC8qIGluaXQgTSBhcnJheSAqLworICAvKiBpbml0IGZpcnN0IGNlbGwgKi8KKyAgaWYgKChlcnIgPSBtcF9pbml0KCZNWzFdKSkgIT0gTVBfT0tBWSkgeworICAgICByZXR1cm4gZXJyOyAKKyAgfQorCisgIC8qIG5vdyBpbml0IHRoZSBzZWNvbmQgaGFsZiBvZiB0aGUgYXJyYXkgKi8KKyAgZm9yICh4ID0gMTw8KHdpbnNpemUtMSk7IHggPCAoMSA8PCB3aW5zaXplKTsgeCsrKSB7CisgICAgaWYgKChlcnIgPSBtcF9pbml0KCZNW3hdKSkgIT0gTVBfT0tBWSkgeworICAgICAgZm9yICh5ID0gMTw8KHdpbnNpemUtMSk7IHkgPCB4OyB5KyspIHsKKyAgICAgICAgbXBfY2xlYXIgKCZNW3ldKTsKKyAgICAgIH0KKyAgICAgIG1wX2NsZWFyKCZNWzFdKTsKKyAgICAgIHJldHVybiBlcnI7CisgICAgfQorICB9CisKKyAgLyogY3JlYXRlIG11LCB1c2VkIGZvciBCYXJyZXR0IHJlZHVjdGlvbiAqLworICBpZiAoKGVyciA9IG1wX2luaXQgKCZtdSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9NOworICB9CisgIAorICBpZiAocmVkbW9kZSA9PSAwKSB7CisgICAgIGlmICgoZXJyID0gbXBfcmVkdWNlX3NldHVwICgmbXUsIFApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX01VOworICAgICB9CisgICAgIHJlZHV4ID0gbXBfcmVkdWNlOworICB9IGVsc2UgeworICAgICBpZiAoKGVyciA9IG1wX3JlZHVjZV8ya19zZXR1cF9sIChQLCAmbXUpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX01VOworICAgICB9CisgICAgIHJlZHV4ID0gbXBfcmVkdWNlXzJrX2w7CisgIH0gICAgCisKKyAgLyogY3JlYXRlIE0gdGFibGUKKyAgICoKKyAgICogVGhlIE0gdGFibGUgY29udGFpbnMgcG93ZXJzIG9mIHRoZSBiYXNlLCAKKyAgICogZS5nLiBNW3hdID0gRyoqeCBtb2QgUAorICAgKgorICAgKiBUaGUgZmlyc3QgaGFsZiBvZiB0aGUgdGFibGUgaXMgbm90IAorICAgKiBjb21wdXRlZCB0aG91Z2ggYWNjZXB0IGZvciBNWzBdIGFuZCBNWzFdCisgICAqLworICBpZiAoKGVyciA9IG1wX21vZCAoRywgUCwgJk1bMV0pKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfTVU7CisgIH0KKworICAvKiBjb21wdXRlIHRoZSB2YWx1ZSBhdCBNWzE8PCh3aW5zaXplLTEpXSBieSBzcXVhcmluZyAKKyAgICogTVsxXSAod2luc2l6ZS0xKSB0aW1lcyAKKyAgICovCisgIGlmICgoZXJyID0gbXBfY29weSAoJk1bMV0sICZNWzEgPDwgKHdpbnNpemUgLSAxKV0pKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfTVU7CisgIH0KKworICBmb3IgKHggPSAwOyB4IDwgKHdpbnNpemUgLSAxKTsgeCsrKSB7CisgICAgLyogc3F1YXJlIGl0ICovCisgICAgaWYgKChlcnIgPSBtcF9zcXIgKCZNWzEgPDwgKHdpbnNpemUgLSAxKV0sIAorICAgICAgICAgICAgICAgICAgICAgICAmTVsxIDw8ICh3aW5zaXplIC0gMSldKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfTVU7CisgICAgfQorCisgICAgLyogcmVkdWNlIG1vZHVsbyBQICovCisgICAgaWYgKChlcnIgPSByZWR1eCAoJk1bMSA8PCAod2luc2l6ZSAtIDEpXSwgUCwgJm11KSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfTVU7CisgICAgfQorICB9CisKKyAgLyogY3JlYXRlIHVwcGVyIHRhYmxlLCB0aGF0IGlzIE1beF0gPSBNW3gtMV0gKiBNWzFdIChtb2QgUCkKKyAgICogZm9yIHggPSAoMioqKHdpbnNpemUgLSAxKSArIDEpIHRvICgyKip3aW5zaXplIC0gMSkKKyAgICovCisgIGZvciAoeCA9ICgxIDw8ICh3aW5zaXplIC0gMSkpICsgMTsgeCA8ICgxIDw8IHdpbnNpemUpOyB4KyspIHsKKyAgICBpZiAoKGVyciA9IG1wX211bCAoJk1beCAtIDFdLCAmTVsxXSwgJk1beF0pKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9NVTsKKyAgICB9CisgICAgaWYgKChlcnIgPSByZWR1eCAoJk1beF0sIFAsICZtdSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX01VOworICAgIH0KKyAgfQorCisgIC8qIHNldHVwIHJlc3VsdCAqLworICBpZiAoKGVyciA9IG1wX2luaXQgKCZyZXMpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfTVU7CisgIH0KKyAgbXBfc2V0ICgmcmVzLCAxKTsKKworICAvKiBzZXQgaW5pdGlhbCBtb2RlIGFuZCBiaXQgY250ICovCisgIG1vZGUgICA9IDA7CisgIGJpdGNudCA9IDE7CisgIGJ1ZiAgICA9IDA7CisgIGRpZ2lkeCA9IFgtPnVzZWQgLSAxOworICBiaXRjcHkgPSAwOworICBiaXRidWYgPSAwOworCisgIGZvciAoOzspIHsKKyAgICAvKiBncmFiIG5leHQgZGlnaXQgYXMgcmVxdWlyZWQgKi8KKyAgICBpZiAoLS1iaXRjbnQgPT0gMCkgeworICAgICAgLyogaWYgZGlnaWR4ID09IC0xIHdlIGFyZSBvdXQgb2YgZGlnaXRzICovCisgICAgICBpZiAoZGlnaWR4ID09IC0xKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgLyogcmVhZCBuZXh0IGRpZ2l0IGFuZCByZXNldCB0aGUgYml0Y250ICovCisgICAgICBidWYgICAgPSBYLT5kcFtkaWdpZHgtLV07CisgICAgICBiaXRjbnQgPSAoaW50KSBESUdJVF9CSVQ7CisgICAgfQorCisgICAgLyogZ3JhYiB0aGUgbmV4dCBtc2IgZnJvbSB0aGUgZXhwb25lbnQgKi8KKyAgICB5ICAgICA9IChidWYgPj4gKG1wX2RpZ2l0KShESUdJVF9CSVQgLSAxKSkgJiAxOworICAgIGJ1ZiA8PD0gKG1wX2RpZ2l0KTE7CisKKyAgICAvKiBpZiB0aGUgYml0IGlzIHplcm8gYW5kIG1vZGUgPT0gMCB0aGVuIHdlIGlnbm9yZSBpdAorICAgICAqIFRoZXNlIHJlcHJlc2VudCB0aGUgbGVhZGluZyB6ZXJvIGJpdHMgYmVmb3JlIHRoZSBmaXJzdCAxIGJpdAorICAgICAqIGluIHRoZSBleHBvbmVudC4gIFRlY2huaWNhbGx5IHRoaXMgb3B0IGlzIG5vdCByZXF1aXJlZCBidXQgaXQKKyAgICAgKiBkb2VzIGxvd2VyIHRoZSAjIG9mIHRyaXZpYWwgc3F1YXJpbmcvcmVkdWN0aW9ucyB1c2VkCisgICAgICovCisgICAgaWYgKG1vZGUgPT0gMCAmJiB5ID09IDApIHsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIGlmIHRoZSBiaXQgaXMgemVybyBhbmQgbW9kZSA9PSAxIHRoZW4gd2Ugc3F1YXJlICovCisgICAgaWYgKG1vZGUgPT0gMSAmJiB5ID09IDApIHsKKyAgICAgIGlmICgoZXJyID0gbXBfc3FyICgmcmVzLCAmcmVzKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9SRVM7CisgICAgICB9CisgICAgICBpZiAoKGVyciA9IHJlZHV4ICgmcmVzLCBQLCAmbXUpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgIH0KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIGVsc2Ugd2UgYWRkIGl0IHRvIHRoZSB3aW5kb3cgKi8KKyAgICBiaXRidWYgfD0gKHkgPDwgKHdpbnNpemUgLSArK2JpdGNweSkpOworICAgIG1vZGUgICAgPSAyOworCisgICAgaWYgKGJpdGNweSA9PSB3aW5zaXplKSB7CisgICAgICAvKiBvayB3aW5kb3cgaXMgZmlsbGVkIHNvIHNxdWFyZSBhcyByZXF1aXJlZCBhbmQgbXVsdGlwbHkgICovCisgICAgICAvKiBzcXVhcmUgZmlyc3QgKi8KKyAgICAgIGZvciAoeCA9IDA7IHggPCB3aW5zaXplOyB4KyspIHsKKyAgICAgICAgaWYgKChlcnIgPSBtcF9zcXIgKCZyZXMsICZyZXMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgICB9CisgICAgICAgIGlmICgoZXJyID0gcmVkdXggKCZyZXMsIFAsICZtdSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgICBnb3RvIExCTF9SRVM7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgLyogdGhlbiBtdWx0aXBseSAqLworICAgICAgaWYgKChlcnIgPSBtcF9tdWwgKCZyZXMsICZNW2JpdGJ1Zl0sICZyZXMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgIH0KKyAgICAgIGlmICgoZXJyID0gcmVkdXggKCZyZXMsIFAsICZtdSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgfQorCisgICAgICAvKiBlbXB0eSB3aW5kb3cgYW5kIHJlc2V0ICovCisgICAgICBiaXRjcHkgPSAwOworICAgICAgYml0YnVmID0gMDsKKyAgICAgIG1vZGUgICA9IDE7CisgICAgfQorICB9CisKKyAgLyogaWYgYml0cyByZW1haW4gdGhlbiBzcXVhcmUvbXVsdGlwbHkgKi8KKyAgaWYgKG1vZGUgPT0gMiAmJiBiaXRjcHkgPiAwKSB7CisgICAgLyogc3F1YXJlIHRoZW4gbXVsdGlwbHkgaWYgdGhlIGJpdCBpcyBzZXQgKi8KKyAgICBmb3IgKHggPSAwOyB4IDwgYml0Y3B5OyB4KyspIHsKKyAgICAgIGlmICgoZXJyID0gbXBfc3FyICgmcmVzLCAmcmVzKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9SRVM7CisgICAgICB9CisgICAgICBpZiAoKGVyciA9IHJlZHV4ICgmcmVzLCBQLCAmbXUpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgIH0KKworICAgICAgYml0YnVmIDw8PSAxOworICAgICAgaWYgKChiaXRidWYgJiAoMSA8PCB3aW5zaXplKSkgIT0gMCkgeworICAgICAgICAvKiB0aGVuIG11bHRpcGx5ICovCisgICAgICAgIGlmICgoZXJyID0gbXBfbXVsICgmcmVzLCAmTVsxXSwgJnJlcykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgICBnb3RvIExCTF9SRVM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChlcnIgPSByZWR1eCAoJnJlcywgUCwgJm11KSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIG1wX2V4Y2ggKCZyZXMsIFkpOworICBlcnIgPSBNUF9PS0FZOworTEJMX1JFUzptcF9jbGVhciAoJnJlcyk7CitMQkxfTVU6bXBfY2xlYXIgKCZtdSk7CitMQkxfTToKKyAgbXBfY2xlYXIoJk1bMV0pOworICBmb3IgKHggPSAxPDwod2luc2l6ZS0xKTsgeCA8ICgxIDw8IHdpbnNpemUpOyB4KyspIHsKKyAgICBtcF9jbGVhciAoJk1beF0pOworICB9CisgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9zX21wX2V4cHRtb2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5fc19tcF9tdWxfZGlncy5jIGIvbGlidG9tbWF0aC9ibl9zX21wX211bF9kaWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q1NWI4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fc19tcF9tdWxfZGlncy5jCkBAIC0wLDAgKzEsOTAgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fU19NUF9NVUxfRElHU19DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBtdWx0aXBsaWVzIHxhfCAqIHxifCBhbmQgb25seSBjb21wdXRlcyB1cHRvIGRpZ3MgZGlnaXRzIG9mIHJlc3VsdAorICogSEFDIHBwLiA1OTUsIEFsZ29yaXRobSAxNC4xMiAgTW9kaWZpZWQgc28geW91IGNhbiBjb250cm9sIGhvdyAKKyAqIG1hbnkgZGlnaXRzIG9mIG91dHB1dCBhcmUgY3JlYXRlZC4KKyAqLworaW50IHNfbXBfbXVsX2RpZ3MgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIGludCBkaWdzKQoreworICBtcF9pbnQgIHQ7CisgIGludCAgICAgcmVzLCBwYSwgcGIsIGl4LCBpeTsKKyAgbXBfZGlnaXQgdTsKKyAgbXBfd29yZCByOworICBtcF9kaWdpdCB0bXB4LCAqdG1wdCwgKnRtcHk7CisKKyAgLyogY2FuIHdlIHVzZSB0aGUgZmFzdCBtdWx0aXBsaWVyPyAqLworICBpZiAoKChkaWdzKSA8IE1QX1dBUlJBWSkgJiYKKyAgICAgIE1JTiAoYS0+dXNlZCwgYi0+dXNlZCkgPCAKKyAgICAgICAgICAoMSA8PCAoKENIQVJfQklUICogc2l6ZW9mIChtcF93b3JkKSkgLSAoMiAqIERJR0lUX0JJVCkpKSkgeworICAgIHJldHVybiBmYXN0X3NfbXBfbXVsX2RpZ3MgKGEsIGIsIGMsIGRpZ3MpOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9pbml0X3NpemUgKCZ0LCBkaWdzKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKyAgdC51c2VkID0gZGlnczsKKworICAvKiBjb21wdXRlIHRoZSBkaWdpdHMgb2YgdGhlIHByb2R1Y3QgZGlyZWN0bHkgKi8KKyAgcGEgPSBhLT51c2VkOworICBmb3IgKGl4ID0gMDsgaXggPCBwYTsgaXgrKykgeworICAgIC8qIHNldCB0aGUgY2FycnkgdG8gemVybyAqLworICAgIHUgPSAwOworCisgICAgLyogbGltaXQgb3Vyc2VsdmVzIHRvIG1ha2luZyBkaWdzIGRpZ2l0cyBvZiBvdXRwdXQgKi8KKyAgICBwYiA9IE1JTiAoYi0+dXNlZCwgZGlncyAtIGl4KTsKKworICAgIC8qIHNldHVwIHNvbWUgYWxpYXNlcyAqLworICAgIC8qIGNvcHkgb2YgdGhlIGRpZ2l0IGZyb20gYSB1c2VkIHdpdGhpbiB0aGUgbmVzdGVkIGxvb3AgKi8KKyAgICB0bXB4ID0gYS0+ZHBbaXhdOworICAgIAorICAgIC8qIGFuIGFsaWFzIGZvciB0aGUgZGVzdGluYXRpb24gc2hpZnRlZCBpeCBwbGFjZXMgKi8KKyAgICB0bXB0ID0gdC5kcCArIGl4OworICAgIAorICAgIC8qIGFuIGFsaWFzIGZvciB0aGUgZGlnaXRzIG9mIGIgKi8KKyAgICB0bXB5ID0gYi0+ZHA7CisKKyAgICAvKiBjb21wdXRlIHRoZSBjb2x1bW5zIG9mIHRoZSBvdXRwdXQgYW5kIHByb3BhZ2F0ZSB0aGUgY2FycnkgKi8KKyAgICBmb3IgKGl5ID0gMDsgaXkgPCBwYjsgaXkrKykgeworICAgICAgLyogY29tcHV0ZSB0aGUgY29sdW1uIGFzIGEgbXBfd29yZCAqLworICAgICAgciAgICAgICA9ICgobXBfd29yZCkqdG1wdCkgKworICAgICAgICAgICAgICAgICgobXBfd29yZCl0bXB4KSAqICgobXBfd29yZCkqdG1weSsrKSArCisgICAgICAgICAgICAgICAgKChtcF93b3JkKSB1KTsKKworICAgICAgLyogdGhlIG5ldyBjb2x1bW4gaXMgdGhlIGxvd2VyIHBhcnQgb2YgdGhlIHJlc3VsdCAqLworICAgICAgKnRtcHQrKyA9IChtcF9kaWdpdCkgKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKKworICAgICAgLyogZ2V0IHRoZSBjYXJyeSB3b3JkIGZyb20gdGhlIHJlc3VsdCAqLworICAgICAgdSAgICAgICA9IChtcF9kaWdpdCkgKHIgPj4gKChtcF93b3JkKSBESUdJVF9CSVQpKTsKKyAgICB9CisgICAgLyogc2V0IGNhcnJ5IGlmIGl0IGlzIHBsYWNlZCBiZWxvdyBkaWdzICovCisgICAgaWYgKGl4ICsgaXkgPCBkaWdzKSB7CisgICAgICAqdG1wdCA9IHU7CisgICAgfQorICB9CisKKyAgbXBfY2xhbXAgKCZ0KTsKKyAgbXBfZXhjaCAoJnQsIGMpOworCisgIG1wX2NsZWFyICgmdCk7CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fc19tcF9tdWxfZGlncy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9zX21wX211bF9oaWdoX2RpZ3MuYyBiL2xpYnRvbW1hdGgvYm5fc19tcF9tdWxfaGlnaF9kaWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwYWFlNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvYm5fc19tcF9tdWxfaGlnaF9kaWdzLmMKQEAgLTAsMCArMSw4MSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9TX01QX01VTF9ISUdIX0RJR1NfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogbXVsdGlwbGllcyB8YXwgKiB8YnwgYW5kIGRvZXMgbm90IGNvbXB1dGUgdGhlIGxvd2VyIGRpZ3MgZGlnaXRzCisgKiBbbWVhbnQgdG8gZ2V0IHRoZSBoaWdoZXIgcGFydCBvZiB0aGUgcHJvZHVjdF0KKyAqLworaW50CitzX21wX211bF9oaWdoX2RpZ3MgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIGludCBkaWdzKQoreworICBtcF9pbnQgIHQ7CisgIGludCAgICAgcmVzLCBwYSwgcGIsIGl4LCBpeTsKKyAgbXBfZGlnaXQgdTsKKyAgbXBfd29yZCByOworICBtcF9kaWdpdCB0bXB4LCAqdG1wdCwgKnRtcHk7CisKKyAgLyogY2FuIHdlIHVzZSB0aGUgZmFzdCBtdWx0aXBsaWVyPyAqLworI2lmZGVmIEJOX0ZBU1RfU19NUF9NVUxfSElHSF9ESUdTX0MKKyAgaWYgKCgoYS0+dXNlZCArIGItPnVzZWQgKyAxKSA8IE1QX1dBUlJBWSkKKyAgICAgICYmIE1JTiAoYS0+dXNlZCwgYi0+dXNlZCkgPCAoMSA8PCAoKENIQVJfQklUICogc2l6ZW9mIChtcF93b3JkKSkgLSAoMiAqIERJR0lUX0JJVCkpKSkgeworICAgIHJldHVybiBmYXN0X3NfbXBfbXVsX2hpZ2hfZGlncyAoYSwgYiwgYywgZGlncyk7CisgIH0KKyNlbmRpZgorCisgIGlmICgocmVzID0gbXBfaW5pdF9zaXplICgmdCwgYS0+dXNlZCArIGItPnVzZWQgKyAxKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKyAgdC51c2VkID0gYS0+dXNlZCArIGItPnVzZWQgKyAxOworCisgIHBhID0gYS0+dXNlZDsKKyAgcGIgPSBiLT51c2VkOworICBmb3IgKGl4ID0gMDsgaXggPCBwYTsgaXgrKykgeworICAgIC8qIGNsZWFyIHRoZSBjYXJyeSAqLworICAgIHUgPSAwOworCisgICAgLyogbGVmdCBoYW5kIHNpZGUgb2YgQVtpeF0gKiBCW2l5XSAqLworICAgIHRtcHggPSBhLT5kcFtpeF07CisKKyAgICAvKiBhbGlhcyB0byB0aGUgYWRkcmVzcyBvZiB3aGVyZSB0aGUgZGlnaXRzIHdpbGwgYmUgc3RvcmVkICovCisgICAgdG1wdCA9ICYodC5kcFtkaWdzXSk7CisKKyAgICAvKiBhbGlhcyBmb3Igd2hlcmUgdG8gcmVhZCB0aGUgcmlnaHQgaGFuZCBzaWRlIGZyb20gKi8KKyAgICB0bXB5ID0gYi0+ZHAgKyAoZGlncyAtIGl4KTsKKworICAgIGZvciAoaXkgPSBkaWdzIC0gaXg7IGl5IDwgcGI7IGl5KyspIHsKKyAgICAgIC8qIGNhbGN1bGF0ZSB0aGUgZG91YmxlIHByZWNpc2lvbiByZXN1bHQgKi8KKyAgICAgIHIgICAgICAgPSAoKG1wX3dvcmQpKnRtcHQpICsKKyAgICAgICAgICAgICAgICAoKG1wX3dvcmQpdG1weCkgKiAoKG1wX3dvcmQpKnRtcHkrKykgKworICAgICAgICAgICAgICAgICgobXBfd29yZCkgdSk7CisKKyAgICAgIC8qIGdldCB0aGUgbG93ZXIgcGFydCAqLworICAgICAgKnRtcHQrKyA9IChtcF9kaWdpdCkgKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKKworICAgICAgLyogY2FycnkgdGhlIGNhcnJ5ICovCisgICAgICB1ICAgICAgID0gKG1wX2RpZ2l0KSAociA+PiAoKG1wX3dvcmQpIERJR0lUX0JJVCkpOworICAgIH0KKyAgICAqdG1wdCA9IHU7CisgIH0KKyAgbXBfY2xhbXAgKCZ0KTsKKyAgbXBfZXhjaCAoJnQsIGMpOworICBtcF9jbGVhciAoJnQpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX3NfbXBfbXVsX2hpZ2hfZGlncy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9zX21wX3Nxci5jIGIvbGlidG9tbWF0aC9ibl9zX21wX3Nxci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwMDYzYmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX3NfbXBfc3FyLmMKQEAgLTAsMCArMSw4NCBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9TX01QX1NRUl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBsb3cgbGV2ZWwgc3F1YXJpbmcsIGIgPSBhKmEsIEhBQyBwcC41OTYtNTk3LCBBbGdvcml0aG0gMTQuMTYgKi8KK2ludCBzX21wX3NxciAobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgbXBfaW50ICB0OworICBpbnQgICAgIHJlcywgaXgsIGl5LCBwYTsKKyAgbXBfd29yZCByOworICBtcF9kaWdpdCB1LCB0bXB4LCAqdG1wdDsKKworICBwYSA9IGEtPnVzZWQ7CisgIGlmICgocmVzID0gbXBfaW5pdF9zaXplICgmdCwgMipwYSArIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIGRlZmF1bHQgdXNlZCBpcyBtYXhpbXVtIHBvc3NpYmxlIHNpemUgKi8KKyAgdC51c2VkID0gMipwYSArIDE7CisKKyAgZm9yIChpeCA9IDA7IGl4IDwgcGE7IGl4KyspIHsKKyAgICAvKiBmaXJzdCBjYWxjdWxhdGUgdGhlIGRpZ2l0IGF0IDIqaXggKi8KKyAgICAvKiBjYWxjdWxhdGUgZG91YmxlIHByZWNpc2lvbiByZXN1bHQgKi8KKyAgICByID0gKChtcF93b3JkKSB0LmRwWzIqaXhdKSArCisgICAgICAgICgobXBfd29yZClhLT5kcFtpeF0pKigobXBfd29yZClhLT5kcFtpeF0pOworCisgICAgLyogc3RvcmUgbG93ZXIgcGFydCBpbiByZXN1bHQgKi8KKyAgICB0LmRwW2l4K2l4XSA9IChtcF9kaWdpdCkgKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKKworICAgIC8qIGdldCB0aGUgY2FycnkgKi8KKyAgICB1ICAgICAgICAgICA9IChtcF9kaWdpdCkociA+PiAoKG1wX3dvcmQpIERJR0lUX0JJVCkpOworCisgICAgLyogbGVmdCBoYW5kIHNpZGUgb2YgQVtpeF0gKiBBW2l5XSAqLworICAgIHRtcHggICAgICAgID0gYS0+ZHBbaXhdOworCisgICAgLyogYWxpYXMgZm9yIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzICovCisgICAgdG1wdCAgICAgICAgPSB0LmRwICsgKDIqaXggKyAxKTsKKyAgICAKKyAgICBmb3IgKGl5ID0gaXggKyAxOyBpeSA8IHBhOyBpeSsrKSB7CisgICAgICAvKiBmaXJzdCBjYWxjdWxhdGUgdGhlIHByb2R1Y3QgKi8KKyAgICAgIHIgICAgICAgPSAoKG1wX3dvcmQpdG1weCkgKiAoKG1wX3dvcmQpYS0+ZHBbaXldKTsKKworICAgICAgLyogbm93IGNhbGN1bGF0ZSB0aGUgZG91YmxlIHByZWNpc2lvbiByZXN1bHQsIG5vdGUgd2UgdXNlCisgICAgICAgKiBhZGRpdGlvbiBpbnN0ZWFkIG9mICoyIHNpbmNlIGl0J3MgZWFzaWVyIHRvIG9wdGltaXplCisgICAgICAgKi8KKyAgICAgIHIgICAgICAgPSAoKG1wX3dvcmQpICp0bXB0KSArIHIgKyByICsgKChtcF93b3JkKSB1KTsKKworICAgICAgLyogc3RvcmUgbG93ZXIgcGFydCAqLworICAgICAgKnRtcHQrKyA9IChtcF9kaWdpdCkgKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKKworICAgICAgLyogZ2V0IGNhcnJ5ICovCisgICAgICB1ICAgICAgID0gKG1wX2RpZ2l0KShyID4+ICgobXBfd29yZCkgRElHSVRfQklUKSk7CisgICAgfQorICAgIC8qIHByb3BhZ2F0ZSB1cHdhcmRzICovCisgICAgd2hpbGUgKHUgIT0gKChtcF9kaWdpdCkgMCkpIHsKKyAgICAgIHIgICAgICAgPSAoKG1wX3dvcmQpICp0bXB0KSArICgobXBfd29yZCkgdSk7CisgICAgICAqdG1wdCsrID0gKG1wX2RpZ2l0KSAociAmICgobXBfd29yZCkgTVBfTUFTSykpOworICAgICAgdSAgICAgICA9IChtcF9kaWdpdCkociA+PiAoKG1wX3dvcmQpIERJR0lUX0JJVCkpOworICAgIH0KKyAgfQorCisgIG1wX2NsYW1wICgmdCk7CisgIG1wX2V4Y2ggKCZ0LCBiKTsKKyAgbXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9zX21wX3Nxci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ibl9zX21wX3N1Yi5jIGIvbGlidG9tbWF0aC9ibl9zX21wX3N1Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTQ5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuX3NfbXBfc3ViLmMKQEAgLTAsMCArMSw4OSBAQAorI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9TX01QX1NVQl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBsb3cgbGV2ZWwgc3VidHJhY3Rpb24gKGFzc3VtZXMgfGF8ID4gfGJ8KSwgSEFDIHBwLjU5NSBBbGdvcml0aG0gMTQuOSAqLworaW50CitzX21wX3N1YiAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK3sKKyAgaW50ICAgICBvbGR1c2UsIHJlcywgbWluLCBtYXg7CisKKyAgLyogZmluZCBzaXplcyAqLworICBtaW4gPSBiLT51c2VkOworICBtYXggPSBhLT51c2VkOworCisgIC8qIGluaXQgcmVzdWx0ICovCisgIGlmIChjLT5hbGxvYyA8IG1heCkgeworICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYywgbWF4KSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKyAgb2xkdXNlID0gYy0+dXNlZDsKKyAgYy0+dXNlZCA9IG1heDsKKworICB7CisgICAgcmVnaXN0ZXIgbXBfZGlnaXQgdSwgKnRtcGEsICp0bXBiLCAqdG1wYzsKKyAgICByZWdpc3RlciBpbnQgaTsKKworICAgIC8qIGFsaWFzIGZvciBkaWdpdCBwb2ludGVycyAqLworICAgIHRtcGEgPSBhLT5kcDsKKyAgICB0bXBiID0gYi0+ZHA7CisgICAgdG1wYyA9IGMtPmRwOworCisgICAgLyogc2V0IGNhcnJ5IHRvIHplcm8gKi8KKyAgICB1ID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbWluOyBpKyspIHsKKyAgICAgIC8qIFRbaV0gPSBBW2ldIC0gQltpXSAtIFUgKi8KKyAgICAgICp0bXBjID0gKnRtcGErKyAtICp0bXBiKysgLSB1OworCisgICAgICAvKiBVID0gY2FycnkgYml0IG9mIFRbaV0KKyAgICAgICAqIE5vdGUgdGhpcyBzYXZlcyBwZXJmb3JtaW5nIGFuIEFORCBvcGVyYXRpb24gc2luY2UKKyAgICAgICAqIGlmIGEgY2FycnkgZG9lcyBvY2N1ciBpdCB3aWxsIHByb3BhZ2F0ZSBhbGwgdGhlIHdheSB0byB0aGUKKyAgICAgICAqIE1TQi4gIEFzIGEgcmVzdWx0IGEgc2luZ2xlIHNoaWZ0IGlzIGVub3VnaCB0byBnZXQgdGhlIGNhcnJ5CisgICAgICAgKi8KKyAgICAgIHUgPSAqdG1wYyA+PiAoKG1wX2RpZ2l0KShDSEFSX0JJVCAqIHNpemVvZiAobXBfZGlnaXQpIC0gMSkpOworCisgICAgICAvKiBDbGVhciBjYXJyeSBmcm9tIFRbaV0gKi8KKyAgICAgICp0bXBjKysgJj0gTVBfTUFTSzsKKyAgICB9CisKKyAgICAvKiBub3cgY29weSBoaWdoZXIgd29yZHMgaWYgYW55LCBlLmcuIGlmIEEgaGFzIG1vcmUgZGlnaXRzIHRoYW4gQiAgKi8KKyAgICBmb3IgKDsgaSA8IG1heDsgaSsrKSB7CisgICAgICAvKiBUW2ldID0gQVtpXSAtIFUgKi8KKyAgICAgICp0bXBjID0gKnRtcGErKyAtIHU7CisKKyAgICAgIC8qIFUgPSBjYXJyeSBiaXQgb2YgVFtpXSAqLworICAgICAgdSA9ICp0bXBjID4+ICgobXBfZGlnaXQpKENIQVJfQklUICogc2l6ZW9mIChtcF9kaWdpdCkgLSAxKSk7CisKKyAgICAgIC8qIENsZWFyIGNhcnJ5IGZyb20gVFtpXSAqLworICAgICAgKnRtcGMrKyAmPSBNUF9NQVNLOworICAgIH0KKworICAgIC8qIGNsZWFyIGRpZ2l0cyBhYm92ZSB1c2VkIChzaW5jZSB3ZSBtYXkgbm90IGhhdmUgZ3Jvd24gcmVzdWx0IGFib3ZlKSAqLworICAgIGZvciAoaSA9IGMtPnVzZWQ7IGkgPCBvbGR1c2U7IGkrKykgeworICAgICAgKnRtcGMrKyA9IDA7CisgICAgfQorICB9CisKKyAgbXBfY2xhbXAgKGMpOworICByZXR1cm4gTVBfT0tBWTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fc19tcF9zdWIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvYm5jb3JlLmMgYi9saWJ0b21tYXRoL2JuY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4OWExZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2JuY29yZS5jCkBAIC0wLDAgKzEsMzYgQEAKKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5DT1JFX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEtub3duIG9wdGltYWwgY29uZmlndXJhdGlvbnMKKworIENQVSAgICAgICAgICAgICAgICAgICAgL0NvbXBpbGVyICAgICAvTVVMIENVVE9GRi9TUVIgQ1VUT0ZGCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW50ZWwgUDQgTm9ydGh3b29kICAgICAvR0NDIHYzLjQuMSAgIC8gICAgICAgIDg4LyAgICAgICAxMjgvTFRNIDAuMzIgOy0pCisgQU1EIEF0aGxvbjY0ICAgICAgICAgICAvR0NDIHYzLjQuNCAgIC8gICAgICAgIDgwLyAgICAgICAxMjAvTFRNIDAuMzUKKyAKKyovCisKK2ludCAgICAgS0FSQVRTVUJBX01VTF9DVVRPRkYgPSA4MCwgICAgICAvKiBNaW4uIG51bWJlciBvZiBkaWdpdHMgYmVmb3JlIEthcmF0c3ViYSBtdWx0aXBsaWNhdGlvbiBpcyB1c2VkLiAqLworICAgICAgICBLQVJBVFNVQkFfU1FSX0NVVE9GRiA9IDEyMCwgICAgIC8qIE1pbi4gbnVtYmVyIG9mIGRpZ2l0cyBiZWZvcmUgS2FyYXRzdWJhIHNxdWFyaW5nIGlzIHVzZWQuICovCisgICAgICAgIAorICAgICAgICBUT09NX01VTF9DVVRPRkYgICAgICA9IDM1MCwgICAgICAvKiBubyBvcHRpbWFsIHZhbHVlcyBvZiB0aGVzZSBhcmUga25vd24geWV0IHNvIHNldCBlbSBoaWdoICovCisgICAgICAgIFRPT01fU1FSX0NVVE9GRiAgICAgID0gNDAwOyAKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuY29yZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ib29rZXIucGwgYi9saWJ0b21tYXRoL2Jvb2tlci5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OWYxODg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ib29rZXIucGwKQEAgLTAsMCArMSwyNjUgQEAKKyMhL2Jpbi9wZXJsCisjCisjVXNlZCB0byBwcmVwYXJlIHRoZSBib29rICJ0b21tYXRoLnNyYyIgZm9yIExhVGVYIGJ5IHByZS1wcm9jZXNzaW5nIGl0IGludG8gYSAudGV4IGZpbGUKKyMKKyNFc3NlbnRpYWxseSB5b3Ugd3JpdGUgdGhlICJ0b21tYXRoLnNyYyIgYXMgbm9ybWFsIExhVGV4IGV4Y2VwdCB3aGVyZSB5b3Ugd2FudCBjb2RlIHNuaXBwZXRzIHlvdSBwdXQKKyMKKyNFWEFNLGZpbGUKKyMKKyNUaGlzIHByZXByb2Nlc3NvciB3aWxsIHRoZW4gb3BlbiAiZmlsZSIgYW5kIGluc2VydCBpdCBhcyBhIHZlcmJhdGltIGNvcHkuCisjCisjVG9tIFN0IERlbmlzCisKKyNnZXQgZ3JhcGhpY3MgdHlwZQoraWYgKHNoaWZ0ID1+IC9QREYvKSB7CisgICAkZ3JhcGggPSAiIjsKK30gZWxzZSB7CisgICAkZ3JhcGggPSAiLnBzIjsKK30gICAKKworb3BlbihJTiwiPHRvbW1hdGguc3JjIikgb3IgZGllICJDYW4ndCBvcGVuIHNvdXJjZSBmaWxlIjsKK29wZW4oT1VULCI+dG9tbWF0aC50ZXgiKSBvciBkaWUgIkNhbid0IG9wZW4gZGVzdGluYXRpb24gZmlsZSI7CisKK3ByaW50ICJTY2FubmluZyBmb3Igc2VjdGlvbnNcbiI7CiskY2hhcHRlciA9ICRzZWN0aW9uID0gJHN1YnNlY3Rpb24gPSAwOworJHggPSAwOword2hpbGUgKDxJTj4pIHsKKyAgIHByaW50ICIuIjsKKyAgIGlmICghKCsrJHggJSA4MCkpIHsgcHJpbnQgIlxuIjsgfQorICAgI3VwZGF0ZSB0aGUgaGVhZGluZ3MgCisgICBpZiAofigkXyA9fiAvXCovKSkgeworICAgICAgaWYgKCRfID1+IC9cXGNoYXB0ZXJ7Lit9LykgeworICAgICAgICAgICsrJGNoYXB0ZXI7CisgICAgICAgICAgJHNlY3Rpb24gPSAkc3Vic2VjdGlvbiA9IDA7CisgICAgICB9IGVsc2lmICgkXyA9fiAvXFxzZWN0aW9uey4rfS8pIHsKKyAgICAgICAgICArKyRzZWN0aW9uOworICAgICAgICAgICRzdWJzZWN0aW9uID0gMDsKKyAgICAgIH0gZWxzaWYgKCRfID1+IC9cXHN1YnNlY3Rpb257Lit9LykgeworICAgICAgICAgICsrJHN1YnNlY3Rpb247CisgICAgICB9CisgICB9ICAgICAgCisKKyAgIGlmICgkXyA9fiBtL01BUksvKSB7CisgICAgICBAbSA9IHNwbGl0KCIsIiwkXyk7CisgICAgICBjaG9tcChAbVsxXSk7CisgICAgICAkaW5kZXgxe0BtWzFdfSA9ICRjaGFwdGVyOworICAgICAgJGluZGV4MntAbVsxXX0gPSAkc2VjdGlvbjsKKyAgICAgICRpbmRleDN7QG1bMV19ID0gJHN1YnNlY3Rpb247CisgICB9Cit9CitjbG9zZShJTik7CisKK29wZW4oSU4sIjx0b21tYXRoLnNyYyIpIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBzb3VyY2UgZmlsZSI7CiskcmVhZGxpbmUgPSAkd3JvdGVsaW5lID0gMDsKKyRzcmNsaW5lID0gMDsKKword2hpbGUgKDxJTj4pIHsKKyAgICsrJHJlYWRsaW5lOworICAgKyskc3JjbGluZTsKKyAgIAorICAgaWYgKCRfID1+IG0vTUFSSy8pIHsKKyAgIH0gZWxzaWYgKCRfID1+IG0vRVhBTS8gfHwgJF8gPX4gbS9MSVNULykgeworICAgICAgaWYgKCRfID1+IG0vRVhBTS8pIHsKKyAgICAgICAgICRza2lwaGVhZGVyID0gMTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAkc2tpcGhlYWRlciA9IDA7CisgICAgICB9CisgICAgICAKKyAgICAgICMgRVhBTSxmaWxlCisgICAgICBjaG9tcCgkXyk7CisgICAgICBAbSA9IHNwbGl0KCIsIiwkXyk7CisgICAgICBvcGVuKFNSQywiPCRtWzFdIikgb3IgZGllICJFcnJvcjokc3JjbGluZTpDYW4ndCBvcGVuIHNvdXJjZSBmaWxlICRtWzFdIjsKKyAgICAgIAorICAgICAgcHJpbnQgIiRzcmNsaW5lOkluc2VydGluZyAkbVsxXToiOworICAgICAgCisgICAgICAkbGluZSA9IDA7CisgICAgICAkdG1wID0gJG1bMV07CisgICAgICAkdG1wID1+IHMvXy8iXFxfIi9nZTsKKyAgICAgIHByaW50IE9VVCAiXFx2c3BhY2V7KzNtbX1cXGJlZ2lue3NtYWxsfVxuXFxoc3BhY2V7LTUuMW1tfXtcXGJmIEZpbGV9OiAkdG1wXG5cXHZzcGFjZXstM21tfVxuXFxiZWdpbnthbGx0dH1cbiI7CisgICAgICAkd3JvdGVsaW5lICs9IDU7CisgICAgICAKKyAgICAgIGlmICgkc2tpcGhlYWRlciA9PSAxKSB7CisgICAgICAgICAjIHNjYW4gdGlsbCBuZXh0IGVuZCBvZiBjb21tZW50LCBlLmcuIHNraXAgbGljZW5zZSAKKyAgICAgICAgIHdoaWxlICg8U1JDPikgeworICAgICAgICAgICAgJHRleHRbJGxpbmUrK10gPSAkXzsKKyAgICAgICAgICAgIGxhc3QgaWYgKCRfID1+IC9tYXRoXC5saWJ0b21jcnlwdFwuY29tLyk7CisgICAgICAgICB9CisgICAgICAgICA8U1JDPjsgICAKKyAgICAgIH0KKyAgICAgIAorICAgICAgJGlubGluZSA9IDA7CisgICAgICB3aGlsZSAoPFNSQz4pIHsKKyAgICAgIG5leHQgaWYgKCRfID1+IC9cJFNvdXJjZS8pOworICAgICAgbmV4dCBpZiAoJF8gPX4gL1wkUmV2aXNpb24vKTsKKyAgICAgIG5leHQgaWYgKCRfID1+IC9cJERhdGUvKTsKKyAgICAgICAgICR0ZXh0WyRsaW5lKytdID0gJF87CisgICAgICAgICArKyRpbmxpbmU7CisgICAgICAgICBjaG9tcCgkXyk7CisgICAgICAgICAkXyA9fiBzL1x0LyIgICAgIi9nZTsKKyAgICAgICAgICRfID1+IHMvey8iXnsiL2dlOworICAgICAgICAgJF8gPX4gcy99LyJefSIvZ2U7CisgICAgICAgICAkXyA9fiBzL1xcLydcc3ltYm9sezkyfScvZ2U7CisgICAgICAgICAkXyA9fiBzL1xeLyJcXCIvZ2U7CisgICAgICAgICAgIAorICAgICAgICAgcHJpbnRmIE9VVCAoIiUwM2QgICAiLCAkbGluZSk7CisgICAgICAgICBmb3IgKCR4ID0gMDsgJHggPCBsZW5ndGgoJF8pOyAkeCsrKSB7CisgICAgICAgICAgICAgcHJpbnQgT1VUIGNocih2ZWMoJF8sICR4LCA4KSk7CisgICAgICAgICAgICAgaWYgKCR4ID09IDc1KSB7IAorICAgICAgICAgICAgICAgICBwcmludCBPVVQgIlxuICAgICAgIjsKKyAgICAgICAgICAgICAgICAgKyskd3JvdGVsaW5lOworICAgICAgICAgICAgIH0KKyAgICAgICAgIH0KKyAgICAgICAgIHByaW50IE9VVCAiXG4iOworICAgICAgICAgKyskd3JvdGVsaW5lOworICAgICAgfQorICAgICAgJHRvdGxpbmVzID0gJGxpbmU7CisgICAgICBwcmludCBPVVQgIlxcZW5ke2FsbHR0fVxuXFxlbmR7c21hbGx9XG4iOworICAgICAgY2xvc2UoU1JDKTsKKyAgICAgIHByaW50ICIkaW5saW5lIGxpbmVzXG4iOworICAgICAgJHdyb3RlbGluZSArPSAyOworICAgfSBlbHNpZiAoJF8gPX4gbS9AXGQrLC4rQC8pIHsKKyAgICAgIyBsaW5lIGNvbnRhaW5zIFtudW1iZXIsdGV4dF0KKyAgICAgIyBlLmcuIEAxNCxmb3IgKGl4ID0gMClACisgICAgICR0eHQgPSAkXzsKKyAgICAgd2hpbGUgKCR0eHQgPX4gbS9AXGQrLC4rQC8pIHsKKyAgICAgICAgQG0gPSBzcGxpdCgiQCIsJHR4dCk7ICAgICAgIyBzcGxpdHMgaW50byB0ZXh0LCBvbmUsIHR3bworICAgICAgICBAcGFybXMgPSBzcGxpdCgiLCIsJG1bMV0pOyAgIyBzcGxpdHMgb25lLHR3byBpbnRvIHR3byBlbGVtZW50cyAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgIyBub3cgc2VhcmNoIGZyb20gJHBhcm1zWzBdIGRvd24gZm9yICRwYXJtc1sxXSAKKyAgICAgICAgJGZvdW5kMSA9IDA7CisgICAgICAgICRmb3VuZDIgPSAwOworICAgICAgICBmb3IgKCRpID0gJHBhcm1zWzBdOyAkaSA8ICR0b3RsaW5lcyAmJiAkZm91bmQxID09IDA7ICRpKyspIHsKKyAgICAgICAgICAgaWYgKCR0ZXh0WyRpXSA9fiBtL1xRJHBhcm1zWzFdXEUvKSB7CisgICAgICAgICAgICAgICRmb3VuZGxpbmUxID0gJGkgKyAxOworICAgICAgICAgICAgICAkZm91bmQxID0gMTsKKyAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAjIG5vdyBzZWFyY2ggYmFja3dhcmRzCisgICAgICAgIGZvciAoJGkgPSAkcGFybXNbMF0gLSAxOyAkaSA+PSAwICYmICRmb3VuZDIgPT0gMDsgJGktLSkgeworICAgICAgICAgICBpZiAoJHRleHRbJGldID1+IG0vXFEkcGFybXNbMV1cRS8pIHsKKyAgICAgICAgICAgICAgJGZvdW5kbGluZTIgPSAkaSArIDE7CisgICAgICAgICAgICAgICRmb3VuZDIgPSAxOworICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICMgbm93IHVzZSB0aGUgY2xvc2VzdCBtYXRjaCBvciB0aGUgZmlyc3QgaWYgdGllZAorICAgICAgICBpZiAoJGZvdW5kMSA9PSAxICYmICRmb3VuZDIgPT0gMCkgeworICAgICAgICAgICAkZm91bmQgPSAxOworICAgICAgICAgICAkZm91bmRsaW5lID0gJGZvdW5kbGluZTE7CisgICAgICAgIH0gZWxzaWYgKCRmb3VuZDEgPT0gMCAmJiAkZm91bmQyID09IDEpIHsKKyAgICAgICAgICAgJGZvdW5kID0gMTsKKyAgICAgICAgICAgJGZvdW5kbGluZSA9ICRmb3VuZGxpbmUyOworICAgICAgICB9IGVsc2lmICgkZm91bmQxID09IDEgJiYgJGZvdW5kMiA9PSAxKSB7CisgICAgICAgICAgICRmb3VuZCA9IDE7CisgICAgICAgICAgIGlmICgoJGZvdW5kbGluZTEgLSAkcGFybXNbMF0pIDw9ICgkcGFybXNbMF0gLSAkZm91bmRsaW5lMikpIHsKKyAgICAgICAgICAgICAgJGZvdW5kbGluZSA9ICRmb3VuZGxpbmUxOworICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAkZm91bmRsaW5lID0gJGZvdW5kbGluZTI7CisgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgJGZvdW5kID0gMDsKKyAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAjIGlmIGZvdW5kIHJlcGxhY2UgCisgICAgICAgIGlmICgkZm91bmQgPT0gMSkgeworICAgICAgICAgICAkZGVsdGEgPSAkcGFybXNbMF0gLSAkZm91bmRsaW5lOworICAgICAgICAgICBwcmludCAiRm91bmQgcmVwbGFjZW1lbnQgdGFnIGZvciBcIiRwYXJtc1sxXVwiIG9uIGxpbmUgJHNyY2xpbmUgd2hpY2ggcmVmZXJzIHRvIGxpbmUgJGZvdW5kbGluZSAoZGVsdGEgJGRlbHRhKVxuIjsKKyAgICAgICAgICAgJF8gPX4gcy9AXFEkbVsxXVxFQC8kZm91bmRsaW5lLzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgcHJpbnQgIkVSUk9SOiAgVGhlIHRhZyBcIiRwYXJtc1sxXVwiIG9uIGxpbmUgJHNyY2xpbmUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgbW9zdCByZWNlbnRseSBwYXJzZWQgc291cmNlIVxuIjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgIyByZW1ha2UgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgCisgICAgICAgICRjbnQgPSBAbTsKKyAgICAgICAgJHR4dCA9ICIiOworICAgICAgICBmb3IgKCRpID0gMjsgJGkgPCAkY250OyAkaSsrKSB7CisgICAgICAgICAgICAkdHh0ID0gJHR4dCAuICRtWyRpXSAuICJAIjsKKyAgICAgICAgfQorICAgICB9CisgICAgIHByaW50IE9VVCAkXzsKKyAgICAgKyskd3JvdGVsaW5lOworICAgfSBlbHNpZiAoJF8gPX4gL34uK34vKSB7CisgICAgICAjIGxpbmUgY29udGFpbnMgYSB+dGV4dH4gcGFpciB1c2VkIHRvIHJlZmVyIHRvIGluZGV4aW5nIDotKQorICAgICAgJHR4dCA9ICRfOworICAgICAgd2hpbGUgKCR0eHQgPX4gL34uK34vKSB7CisgICAgICAgICBAbSA9IHNwbGl0KCJ+IiwgJHR4dCk7CisgICAgICAgICAKKyAgICAgICAgICMgd29yZCBpcyB0aGUgc2Vjb25kIHBvc2l0aW9uCisgICAgICAgICAkd29yZCA9IEBtWzFdOworICAgICAgICAgJGEgPSAkaW5kZXgxeyR3b3JkfTsKKyAgICAgICAgICRiID0gJGluZGV4Mnskd29yZH07CisgICAgICAgICAkYyA9ICRpbmRleDN7JHdvcmR9OworICAgICAgICAgCisgICAgICAgICAjIGlmIGNoYXB0ZXIgKGEpIGlzIHplcm8gaXQgd2Fzbid0IGZvdW5kCisgICAgICAgICBpZiAoJGEgPT0gMCkgeworICAgICAgICAgICAgcHJpbnQgIkVSUk9SOiB0aGUgdGFnIFwiJHdvcmRcIiBvbiBsaW5lICRzcmNsaW5lIHdhcyBub3QgZm91bmQgcHJldmlvdXNseSBtYXJrZWQuXG4iOworICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICMgZm9ybWF0IHRoZSB0YWcgYXMgeCwgeC55IG9yIHgueS56IGRlcGVuZGluZyBvbiB0aGUgdmFsdWVzCisgICAgICAgICAgICAkc3RyID0gJGE7CisgICAgICAgICAgICAkc3RyID0gJHN0ciAuICIuJGIiIGlmICgkYiAhPSAwKTsKKyAgICAgICAgICAgICRzdHIgPSAkc3RyIC4gIi4kYyIgaWYgKCRjICE9IDApOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoJGIgPT0gMCAmJiAkYyA9PSAwKSB7CisgICAgICAgICAgICAgICAjIGl0cyBhIGNoYXB0ZXIKKyAgICAgICAgICAgICAgIGlmICgkYSA8PSAxMCkgeworICAgICAgICAgICAgICAgICAgaWYgKCRhID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICRzdHIgPSAiY2hhcHRlciBvbmUiOworICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGEgPT0gMikgeworICAgICAgICAgICAgICAgICAgICAgJHN0ciA9ICJjaGFwdGVyIHR3byI7CisgICAgICAgICAgICAgICAgICB9IGVsc2lmICgkYSA9PSAzKSB7CisgICAgICAgICAgICAgICAgICAgICAkc3RyID0gImNoYXB0ZXIgdGhyZWUiOworICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGEgPT0gNCkgeworICAgICAgICAgICAgICAgICAgICAgJHN0ciA9ICJjaGFwdGVyIGZvdXIiOworICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGEgPT0gNSkgeworICAgICAgICAgICAgICAgICAgICAgJHN0ciA9ICJjaGFwdGVyIGZpdmUiOworICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGEgPT0gNikgeworICAgICAgICAgICAgICAgICAgICAgJHN0ciA9ICJjaGFwdGVyIHNpeCI7CisgICAgICAgICAgICAgICAgICB9IGVsc2lmICgkYSA9PSA3KSB7CisgICAgICAgICAgICAgICAgICAgICAkc3RyID0gImNoYXB0ZXIgc2V2ZW4iOworICAgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGEgPT0gOCkgeworICAgICAgICAgICAgICAgICAgICAgJHN0ciA9ICJjaGFwdGVyIGVpZ2h0IjsKKyAgICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRhID09IDkpIHsKKyAgICAgICAgICAgICAgICAgICAgICRzdHIgPSAiY2hhcHRlciBuaW5lIjsKKyAgICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRhID09IDEwKSB7CisgICAgICAgICAgICAgICAgICAgICAkc3RyID0gImNoYXB0ZXIgdGVuIjsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAkc3RyID0gImNoYXB0ZXIgIiAuICRzdHI7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgJHN0ciA9ICJzZWN0aW9uICIgLiAkc3RyICAgICBpZiAoJGIgIT0gMCAmJiAkYyA9PSAwKTsgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICRzdHIgPSAic3ViLXNlY3Rpb24gIiAuICRzdHIgaWYgKCRiICE9IDAgJiYgJGMgIT0gMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICNzdWJzdGl0dXRlCisgICAgICAgICAgICAkXyA9fiBzL35cUSR3b3JkXEV+LyRzdHIvOworICAgICAgICAgICAgCisgICAgICAgICAgICBwcmludCAiRm91bmQgcmVwbGFjZW1lbnQgdGFnIGZvciBtYXJrZXIgXCIkd29yZFwiIG9uIGxpbmUgJHNyY2xpbmUgd2hpY2ggcmVmZXJzIHRvICRzdHJcbiI7CisgICAgICAgICB9CisgICAgICAgICAKKyAgICAgICAgICMgcmVtYWtlIHJlc3Qgb2YgdGhlIGxpbmUKKyAgICAgICAgICRjbnQgPSBAbTsKKyAgICAgICAgICR0eHQgPSAiIjsKKyAgICAgICAgIGZvciAoJGkgPSAyOyAkaSA8ICRjbnQ7ICRpKyspIHsKKyAgICAgICAgICAgICAkdHh0ID0gJHR4dCAuICRtWyRpXSAuICJ+IjsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHByaW50IE9VVCAkXzsKKyAgICAgICsrJHdyb3RlbGluZTsKKyAgIH0gZWxzaWYgKCRfID1+IG0vRklHVS8pIHsKKyAgICAgICMgRklHVSxmaWxlLGNhcHRpb24KKyAgICAgIGNob21wKCRfKTsKKyAgICAgIEBtID0gc3BsaXQoIiwiLCAkXyk7CisgICAgICBwcmludCBPVVQgIlxcYmVnaW57Y2VudGVyfVxuXFxiZWdpbntmaWd1cmV9W2hlcmVdXG5cXGluY2x1ZGVncmFwaGljc3twaWNzLyRtWzFdJGdyYXBofVxuIjsKKyAgICAgIHByaW50IE9VVCAiXFxjYXB0aW9ueyRtWzJdfVxuXFxsYWJlbHtwaWM6JG1bMV19XG5cXGVuZHtmaWd1cmV9XG5cXGVuZHtjZW50ZXJ9XG4iOworICAgICAgJHdyb3RlbGluZSArPSA0OworICAgfSBlbHNlIHsKKyAgICAgIHByaW50IE9VVCAkXzsKKyAgICAgICsrJHdyb3RlbGluZTsKKyAgIH0KK30KK3ByaW50ICJSZWFkICRyZWFkbGluZSBsaW5lcywgd3JvdGUgJHdyb3RlbGluZSBsaW5lc1xuIjsKKworY2xvc2UgKE9VVCk7CitjbG9zZSAoSU4pOwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9jaGFuZ2VzLnR4dCBiL2xpYnRvbW1hdGgvY2hhbmdlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhZjY5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvY2hhbmdlcy50eHQKQEAgLTAsMCArMSwzOTMgQEAKK0RlY2VtYmVyIDI0dGgsIDIwMDYKK3YwLjQwICAtLSBVcGRhdGVkIG1ha2VmaWxlIHRvIHByb3Blcmx5IHN1cHBvcnQgTElCTkFNRQorICAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBmYXN0X3NfbXBfbXVsX2hpZ2hfZGlncygpIHdoaWNoIG92ZXJmbG93ZWQgKGxpbmUgODMpLCB0aGFua3MgVmFsZ3JpbmQhCisKK0FwcmlsIDR0aCwgMjAwNgordjAuMzkgIC0tIEppbSBXaWdnaW50b24gcG9pbnRlZCBvdXQgbXkgTW9udGdvbWVyeSBleGFtcGxlcyBpbiBmaWd1cmVzIDYuNCBhbmQgNi42IHdlcmUgb2ZmIGJ5IG9uZSwgayBzaG91bGQgYmUgOSBub3QgOAorICAgICAgIC0tIEJydWNlIEd1ZW50ZXIgc3VnZ2VzdGVkIEkgdXNlIC0tdGFnPUNDIGZvciBsaWJ0b29sIGJ1aWxkcyB3aGVyZSB0aGUgY29tcGlsZXIgbWF5IHRoaW5rIGl0J3MgQysrLgorICAgICAgIC0tICJtbSIgZnJvbSBzY2kuY3J5cHQgcG9pbnRlZCBvdXQgdGhhdCBteSBtcF9nY2Qgd2FzIHN1Yi1vcHRpbWFsIChJIGFsc28gdXBkYXRlZCBhbmQgY29ycmVjdGVkIHRoZSBib29rKQorICAgICAgIC0tIHVwZGF0ZWQgc29tZSBvZiB0aGUgQEAgdGFncyBpbiB0b21tYXRoLnNyYyB0byByZWZsZWN0IHNvdXJjZSBjaGFuZ2VzLgorICAgICAgIC0tIHVwZGF0ZWQgZW1haWwgYW5kIHVybCBpbmZvIGluIGFsbCBzb3VyY2UgZmlsZXMKKworSmFuIDI2dGgsIDIwMDYKK3YwLjM4ICAtLSBicm9rZW4gbWFrZWZpbGUuc2hhcmVkIGZpeGVkCisgICAgICAgLS0gcmVtb3ZlZCBzb21lIGNhcnJ5IHN0b3JlcyB0aGF0IHdlcmUgbm90IHJlcXVpcmVkIFt1cGRhdGVkIHRleHRdCisgICAgICAgCitOb3ZlbWJlciAxOHRoLCAyMDA1Cit2MC4zNyAgLS0gW0RvbiBQb3J0ZXJdIHJlcG9ydGVkIG9uIGEgVENMIGxpc3QgW0hFWSBTRU5EIE1FIEJVR1JFUE9SVFMgQUxSRUFEWSEhIV0gdGhhdCBtcF9hZGRfZCgpIHdvdWxkIGNvbXB1dGUgLTAgd2l0aCBzb21lIGlucHV0cy4gIEZpeGVkLgorICAgICAgIC0tIFtyaW5pY2tAZ21haWwuY29tXSByZXBvcnRlZCB0aGUgbWFrZWZpbGUuYmNjIHdhcyBtZXNzZWQgdXAuICBGaXhlZC4KKyAgICAgICAtLSBbS2V2aW4gS2VubnldIHJlcG9ydGVkIHNvbWUgaXNzdWVzIHdpdGggbXBfdG9yYWRpeF9uKCkuICBOb3cgaXQgZG9lc24ndCByZXF1aXJlIGEgbWluIG9mIDMgY2hhcnMgb2Ygb3V0cHV0LiAgCisgICAgICAgLS0gTWFkZSB0aGUgbWFrZSBjb21tYW5kIHJlbmFtYWJsZS4gIFdlZQorCitBdWd1c3QgMXN0LCAyMDA1Cit2MC4zNiAgLS0gTFRNX1BSSU1FXzJNU0JfT04gd2FzIGZpeGVkIGFuZCB0aGUgIk9GRiIgZmxhZyB3YXMgcmVtb3ZlZC4KKyAgICAgICAtLSBbUGV0ZXIgTGFEb3ddIGZvdW5kIGEgdHlwbyBpbiB0aGUgWFJFQUxMT0MgbWFjcm8KKyAgICAgICAtLSBbUGV0ZXIgTGFEb3ddIHBvaW50ZWQgb3V0IHRoYXQgbXBfcmVhZF8odW4pc2lnbmVkX2JpbiBzaG91bGQgaGF2ZSAiY29uc3QiIG9uIHRoZSBpbnB1dAorICAgICAgIC0tIFBvcnRlZCBMVEMgcGF0Y2ggdG8gZml4IHRoZSBwcmltZV9yYW5kb21fZXgoKSBmdW5jdGlvbiB0byBnZXQgdGhlIGJpdHNpemUgY29ycmVjdCBbYW5kIHRoZSBtYXNrT1IgZmxhZ3NdCisgICAgICAgLS0gS2V2aW4gS2VubnkgcG9pbnRlZCBvdXQgYSBzdHJheSAvLworICAgICAgIC0tIERhdmlkIEh1bHRvbiBwb2ludGVkIG91dCBhIHR5cG8gaW4gdGhlIHRleHRib29rIFttcF9tb250Z29tZXJ5X3NldHVwKCkgcHNldWRvLWNvZGVdCisgICAgICAgLS0gTmVhbCBIYW1pbHRvbiAoRWxsaXB0aWMgU2VtaWNvbmR1Y3RvcikgcG9pbnRlZCBvdXQgdGhhdCBteSBLYXJhdHN1YmEgbm90YXRpb24gd2FzIGJhY2t3YXJkcyBhbmQgdGhhdCBJIGNvdWxkIHVzZSAKKyAgICAgICAgICB1bnNpZ25lZCBvcGVyYXRpb25zIGluIHRoZSByb3V0aW5lLiAgCisgICAgICAgLS0gUGF1bCBTY2htaWR0IHBvaW50ZWQgb3V0IGEgbGlua2luZyBlcnJvciBpbiBtcF9leHB0bW9kKCkgd2hlbiBCTl9TX01QX0VYUFRNT0RfQyBpcyB1bmRlZmluZWQgKGFuZCBhbm90aGVyIGZvciByZWFkX3JhZGl4KQorICAgICAgIC0tIFVwZGF0ZWQgbWFrZWZpbGVzIHRvIGJlIHdheSBtb3JlIGZsZXhpYmxlCisKK01hcmNoIDEydGgsIDIwMDUKK3YwLjM1ICAtLSBTdHVwaWQgWE9SIGZ1bmN0aW9uIG1pc3NpbmcgbGluZSBhZ2Fpbi4uLiBvb3BzLgorICAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBpbnZtb2Qgbm90IGhhbmRsaW5nIG5lZ2F0aXZlIGlucHV0cyBjb3JyZWN0bHkgW1dvbGZnYW5nIEVocmhhcmR0XQorICAgICAgIC0tIE1hZGUgZXh0ZXVjbGlkIGFsd2F5cyBnaXZlIHBvc2l0aXZlIHUzIG91dHB1dC4uLlsgV29sZmdhbmcgRWhyaGFyZHQgXQorICAgICAgIC0tIFtXb2xmZ2FuZyBFaHJoYXJkdF0gU3VnZ2VzdGVkIGEgZml4IGZvciBtcF9yZWR1Y2UoKSB3aGljaCBhdm9pZGVkIHVuZGVycnVucy4gIDstKQorICAgICAgIC0tIG1wX3JhbmQoKSB3b3VsZCBlbWl0IG9uZSB0b28gbWFueSBkaWdpdHMgYW5kIGl0IHdhcyBwb3NzaWJsZSB0byBnZXQgYSAwIG91dCBvZiBpdCAuLi4gb29wcworICAgICAgIC0tIEFkZGVkIG1vbnRnb21lcnkgdG8gdGhlIHRlc3RpbmcgdG8gbWFrZSBzdXJlIGl0IGhhbmRsZXMgMS4uMTAgZGlnaXQgbW9kdWxpIGNvcnJlY3RseQorICAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBjb21iYSB0aGF0IHdvdWxkIGxlYWQgdG8gcG9zc2libGUgZXJyb25lb3VzIG91dHB1dHMgd2hlbiAicGEgPCBkaWdzIiAKKyAgICAgICAtLSBGaXhlZCBidWcgaW4gbXBfdG9yYWRpeF9zaXplIGZvciAiMCIgW0tldmluIEtlbm55XQorICAgICAgIC0tIFVwZGF0ZWQgY2hhcHRlcnMgMS01IG9mIHRoZSB0ZXh0Ym9vayA7LSkgSXQgbm93IHRhbGtzIGFib3V0IHRoZSBuZXcgY29tYmEgY29kZSEKKworRmVicnVhcnkgMTJ0aCwgMjAwNQordjAuMzQgIC0tIEZpeGVkIHR3byBtb3JlIHNtYWxsIGVycm9ycyBpbiBtcF9wcmltZV9yYW5kb21fZXgoKQorICAgICAgIC0tIEZpeGVkIG92ZXJmbG93IGluIG1wX211bF9kKCkgW0tldmluIEtlbm55XQorICAgICAgIC0tIEFkZGVkIG1wX3RvXyh1bilzaWduZWRfYmluX24oKSBmdW5jdGlvbnMgd2hpY2ggZG8gYm91bmRzIGNoZWNraW5nIGZvciB5YSBbYW5kIHJlcG9ydCB0aGUgc2l6ZV0KKyAgICAgICAtLSBBZGRlZCAibGFyZ2UiIGRpbWluaXNoZWQgcmFkaXggc3VwcG9ydC4gIFNwZWVkcyB1cCB0aGluZ3MgbGlrZSBEU0Egd2hlcmUgdGhlIG1vZHVsaSBpcyBvZiB0aGUgZm9ybSAyXmsgLSBQIGZvciBzb21lIFAgPCAyXihrLzIpIG9yIHNvCisgICAgICAgICAgQWN0dWFsbHkgaXMgZmFzdGVyIHRoYW4gTW9udGdvbWVyeSBvbiBteSBBTUQ2NCAoYW5kIHByb2JhYmx5IG11Y2ggZmFzdGVyIG9uIGEgUDQpCisgICAgICAgLS0gVXBkYXRlZCB0aGUgbWFudWFsIGEgYml0CisgICAgICAgLS0gT2sgc28gSSBoYXZlbid0IGRvbmUgdGhlIHRleHRib29rIHdvcmsgeWV0Li4uIE15IGN1cnJlbnQgZnJlZWxhbmNlIGdpZyBoYXMgbGFuZGVkIG1lIGluIEZyYW5jZSB0aWxsIHRoZSAKKyAgICAgICAgICBlbmQgb2YgRmViLzA1LiAgT25jZSBJIGdldCBiYWNrIEknbGwgaGF2ZSB0b25zIG9mIGZyZWUgdGltZSBhbmQgSSBwbGFuIHRvIGdvIHRvIHRvd24gb24gdGhlIGJvb2suCisgICAgICAgICAgQXMgb2YgdGhpcyByZWxlYXNlIHRoZSBBUEkgd2lsbCBmcmVlemUuICBBdCBsZWFzdCB1bnRpbCB0aGUgYm9vayBjYXRjaGVzIHVwIHdpdGggYWxsIHRoZSBjaGFuZ2VzLiAgSSB3ZWxjb21lCisgICAgICAgICAgYnVnIHJlcG9ydHMgYnV0IG5ldyBhbGdvcml0aG1zIHdpbGwgaGF2ZSB0byB3YWl0LgorCitEZWNlbWJlciAyM3JkLCAyMDA0Cit2MC4zMyAgLS0gRml4ZWQgInNtYWxsIiB2YXJpYW50IGZvciBtcF9kaXYoKSB3aGljaCB3b3VsZCBtdW5nZSB3aXRoIG5lZ2F0aXZlIGRpdmlkZW5kcy4uLgorICAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBtcF9wcmltZV9yYW5kb21fZXgoKSB3aGljaCB3b3VsZCBzZXQgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSB0byB6ZXJvIHdoZW4KKyAgICAgICAgICBubyBzcGVjaWFsIGZsYWdzIHdlcmUgc2V0CisgICAgICAgLS0gRml4ZWQgb3ZlcmZsb3cgW21pbm9yXSBidWcgaW4gZmFzdF9zX21wX3NxcigpCisgICAgICAgLS0gTWFkZSB0aGUgbWFrZWZpbGVzIGVhc2llciB0byBjb25maWd1cmUgdGhlIGdyb3VwL3VzZXIgdGhhdCBsdG0gd2lsbCBpbnN0YWxsIGFzCisgICAgICAgLS0gRml4ZWQgImZpbmFsIGNhcnJ5IiBidWcgaW4gY29tYmEgbXVsdGlwbGllcnMuIChWb2xrYW4gQ2V5bGFuKQorICAgICAgIC0tIE1hdHQgSm9obnN0b24gcG9pbnRlZCBvdXQgYSBtaXNzaW5nIHNlbWktY29sb24gaW4gbXBfZXhwdG1vZAorCitPY3RvYmVyIDI5dGgsIDIwMDQKK3YwLjMyICAtLSBBZGRlZCAibWFrZWZpbGUuc2hhcmVkIiBmb3Igc2hhcmVkIG9iamVjdCBzdXBwb3J0CisgICAgICAgLS0gQWRkZWQgbW9yZSB0byB0aGUgYnVpbGQgb3B0aW9ucy9jb25maWdzIGluIHRoZSBtYW51YWwKKyAgICAgICAtLSBTdGFydGVkIHRoZSBEZXBlbmRzIGZyYW1ld29yaywgd3JvdGUgZGVwLnBsIHRvIHNjYW4gZGVwcyBhbmQgCisgICAgICAgICAgcHJvZHVjZSAiY2FsbGdyYXBoLnR4dCIgOy0pCisgICAgICAgLS0gV3JvdGUgU0NfUlNBXzEgd2hpY2ggd2lsbCBlbmFibGUgY2xvc2UgdG8gdGhlIG1pbmltdW0gcmVxdWlyZWQgdG8gcGVyZm9ybQorICAgICAgICAgIFJTQSBvbiAzMi1iaXQgW29yIDY0LWJpdF0gcGxhdGZvcm1zIHdpdGggTGliVG9tQ3J5cHQKKyAgICAgICAtLSBNZXJnZWQgaW4gdGhlIHNtYWxsL3Nsb3dlciBtcF9kaXYgcmVwbGFjZW1lbnQuICBZb3UgY2FuIG5vdyB0b2dnbGUgd2hpY2gKKyAgICAgICAgICB5b3Ugd2FudCB0byB1c2UgYXMgeW91ciBtcF9kaXYoKSBhdCBidWlsZCB0aW1lLiAgU2F2ZXMgcm91Z2hseSA4S0Igb3Igc28uCisgICAgICAgLS0gUmVuYW1lZCBhIGZldyBmaWxlcyBhbmQgY2hhbmdlZCBzb21lIGNvbW1lbnRzIHRvIG1ha2UgZGVwZW5kcyBzeXN0ZW0gd29yayBiZXR0ZXIuCisgICAgICAgICAgKE5vIGNoYW5nZXMgdG8gZnVuY3Rpb24gbmFtZXMpCisgICAgICAgLS0gTWVyZ2VkIGluIG5ldyBDb21iYXMgdGhhdCBwZXJmb3JtIDIgcmVhZHMgcGVyIGlubmVyIGxvb3AgaW5zdGVhZCBvZiB0aGUgb2xkZXIgCisgICAgICAgICAgM3JlYWRzLzJ3cml0ZXMgcGVyIGlubmVyIGxvb3Agb2YgdGhlIG9sZCBjb2RlLiAgUmVhbGx5IHRob3VnaCBpZiB5b3Ugd2FudCBzcGVlZAorICAgICAgICAgIGxlYXJuIHRvIHVzZSBUb21zRmFzdE1hdGggOy0pCisKK0F1Z3VzdCA5dGgsIDIwMDQKK3YwLjMxICAtLSAicHJvZmlsZWQiIGJ1aWxkcyBub3cgOi0pIG5ldyB0aW1pbmdzIGZvciBJbnRlbCBOb3J0aHdvb2RzCisgICAgICAgLS0gQWRkZWQgInByZXR0eSIgYnVpbGQgdGFyZ2V0CisgICAgICAgLS0gVXBkYXRlIG1wX2luaXQoKSB0byBhY3R1YWxseSBhc3NpZ24gMCdzIGluc3RlYWQgb2YgcmVseWluZyBvbiBjYWxsb2MoKQorICAgICAgIC0tICJXb2xmZ2FuZyBFaHJoYXJkdCIgPFdvbGZnYW5nLkVocmhhcmR0QG11bmljaC5uZXRzdXJmLmRlPiBmb3VuZCBhIGJ1ZyBpbiBtcF9tdWwoKSB3aGVyZSBpZgorICAgICAgICAgIHlvdSBtdWx0aXBseSBhIG5lZ2F0aXZlIGJ5IHplcm8geW91IGdldCBuZWdhdGl2ZSB6ZXJvIGFzIHRoZSByZXN1bHQuICBPb3BzLgorICAgICAgIC0tIEogSGFycGVyIGZyb20gUGVlclNlYyBsZXQgbWUgdG95IHdpdGggaGlzIEFNRDY0IGFuZCBJIGdvdCA2MC1iaXQgZGlnaXRzIHdvcmtpbmcgcHJvcGVybHkKKyAgICAgICAgICBbdGhpcyBhbHNvIG1lYW5zIHRoYXQgSSBmaXhlZCBhIGJ1ZyB3aGVyZSBpZiBzaXplb2YoaW50KSA8IHNpemVvZihtcF9kaWdpdCkgaXQgd291bGQgYnVnXQorCitBcHJpbCAxMXRoLCAyMDA0Cit2MC4zMCAgLS0gQWRkZWQgIm1wX3RvcmFkaXhfbiIgd2hpY2ggc3RvcmVzIHVwdG8gIm4tMSIgbGVhc3Qgc2lnbmlmaWNhbnQgZGlnaXRzIG9mIGFuIG1wX2ludAorICAgICAgIC0tIEpvaGFuIExpbmRoIHNlbnQgYSBwYXRjaCBzbyBNU1ZDIHdvdWxkbid0IHdoaW5lIGFib3V0IHJlZGVmaW5pbmcgbWFsbG9jIFtpbiB3ZWlyZCBkbGwgbW9kZXNdCisgICAgICAgLS0gSGVucmlrIEdvbGRtYW4gc3BvdHRlZCBhIG1pc3NpbmcgT1BUX0NBU1QgaW4gbXBfZndyaXRlKCkKKyAgICAgICAtLSBUdW5lZCB0b21tYXRoLmggc28gdGhhdCB3aGVuIE1QX0xPV19NRU0gaXMgZGVmaW5lZCBNUF9QUkVDIHNoYWxsIGJlIHJlZHVjZWQuCisgICAgICAgICAgW0kgYWxzbyBhbGxvdyBNUF9QUkVDIHRvIGJlIGV4dGVybmFsbHkgZGVmaW5lZCBub3ddCisgICAgICAgLS0gU3BlZCB1cCBtcF9jbnRfbHNiKCkgYnkgdXNpbmcgYSA0eDQgdGFibGUgW2UuZy4gNHggc3BlZWR1cF0KKyAgICAgICAtLSBBZGRlZCBtcF9wcmltZV9yYW5kb21fZXgoKSB3aGljaCBpcyBhIG1vcmUgdmVyc2F0aWxlIHByaW1lIGdlbmVyYXRvciBhY2N1cmF0ZSB0bworICAgICAgICAgIGV4YWN0IGJpdCBsZW5ndGhzICh1bmxpa2UgdGhlIGRlcHJlY2F0ZWQgYnV0IHN0aWxsIGF2YWlsYWJsZSBtcF9wcmltZV9yYW5kb20oKSB3aGljaAorICAgICAgICAgIGlzIG9ubHkgYWNjdXJhdGUgdG8gYnl0ZSBsZW5ndGhzKS4gIFNlZSB0aGUgbmV3IExUTV9QUklNRV8qIGZsYWdzIDstKQorICAgICAgIC0tIEFsZXggUG9sdXNoaW4gY29udHJpYnV0ZWQgYW4gb3B0aW1pemVkIG1wX3NxcnQoKSBhcyB3ZWxsIGFzIG1wX2dldF9pbnQoKSBhbmQgbXBfaXNfc3F1YXJlKCkuCisgICAgICAgICAgSSd2ZSBjbGVhbmVkIHRoZW0gYWxsIHVwIHRvIGJlIGEgbGl0dGxlIG1vcmUgY29uc2lzdGVudCBbYWxvbmcgd2l0aCBvbmUgYnVnIGZpeF0gZm9yIHRoaXMgcmVsZWFzZS4KKyAgICAgICAtLSBBZGRlZCBtcF9pbml0X3NldCBhbmQgbXBfaW5pdF9zZXRfaW50IHRvIGluaXRpYWxpemUgYW5kIHNldCBzbWFsbCBjb25zdGFudHMgd2l0aCBvbmUgZnVuY3Rpb24KKyAgICAgICAgICBjYWxsLgorICAgICAgIC0tIFJlbW92ZWQgL2V0Y2xpYiBkaXJlY3RvcnkgW3VtIExpYlRvbVBvbHkgZGVwcmVjYXRlcyB0aGlzXS4KKyAgICAgICAtLSBGaXhlZCBtcF9tb2QoKSBzbyB0aGUgc2lnbiBvZiB0aGUgcmVzdWx0IGFncmVlcyB3aXRoIHRoZSBzaWduIG9mIHRoZSBtb2R1bHVzLgorICAgICAgICsrIE4uQi4gIE15IHNlbWVzdGVyIGlzIGFsbW9zdCB1cCBzbyBleHBlY3QgdXBkYXRlcyB0byB0aGUgdGV4dGJvb2sgdG8gYmUgcG9zdGVkIHRvIHRoZSBsaWJ0b21jcnlwdC5vcmcgCisgICAgICAgICAgd2Vic2l0ZS4gIAorCitKYW4gMjV0aCwgMjAwNAordjAuMjkgICsrIE5vdGU6ICJIZW5yaWsiIGZyb20gdGhlIHYwLjI4IGNoYW5nZWxvZyByZWZlcnMgdG8gSGVucmlrIEdvbGRtYW4gOy0pCisgICAgICAgLS0gQWRkZWQgZml4IHRvIG1wX3NocmluayB0byBwcmV2ZW50IGEgcmVhbGxvYyB3aGVuIHVzZWQgPT0gMCBbZS5nLiByZWFsbG9jIHplcm8gYnl0ZXM/Pz9dCisgICAgICAgLS0gTWFkZSB0aGUgbXBfcHJpbWVfcmFiaW5fbWlsbGVyX3RyaWFscygpIGZ1bmN0aW9uIGludGVybmFsIHRhYmxlIHNtYWxsZXIgYW5kIGFsc28KKyAgICAgICAgICBzZXQgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHRlc3RzIHRvIHR3byAoc291bmRzIGEgYml0IHNhZmVyKS4KKyAgICAgICAtLSBBZGRlZCBhIG1wX2V4dGV1Y2xpZCgpIHdoaWNoIGNvbXB1dGVzIHRoZSBleHRlbmRlZCBldWNsaWRlYW4gYWxnb3JpdGhtLgorICAgICAgIC0tIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gc19tcF9leHB0bW9kKCkgW2NhbGxlZCB3aGVuIEJhcnJldHQgcmVkdWN0aW9uIGlzIHRvIGJlIHVzZWRdIHdoaWNoIHdvdWxkIGFyaXNlCisgICAgICAgICAgaWYgYSBtdWx0aXBsaWNhdGlvbiBvciBzdWJzZXF1ZW50IHJlZHVjdGlvbiBmYWlsZWQgW3dvdWxkIG5vdCBmcmVlIHRoZSB0ZW1wIHJlc3VsdF0uCisgICAgICAgLS0gTWFkZSBhbiBBUEkgY2hhbmdlIHRvIG1wX3JhZGl4X3NpemUoKS4gIEl0IG5vdyByZXR1cm5zIGFuIGVycm9yIGNvZGUgYW5kIHN0b3JlcyB0aGUgcmVxdWlyZWQgc2l6ZQorICAgICAgICAgIHRocm91Z2ggYW4gImludCBzdGFyIiBwYXNzZWQgdG8gaXQuCisKK0RlYyAyNHRoLCAyMDAzCit2MC4yOCAgLS0gSGVucmlrIEdvbGRtYW4gc3VnZ2VzdGVkIEkgYWRkIGNhc3RzIHRvIHRoZSBtb250b21nZXJ5IGNvZGUgW3N0b3JlcyBpbnRvIG11Li4uXSBzbyBjb21waWxlcnMgd291bGRuJ3QKKyAgICAgICAgICBzcGV3IFtlcnJvbmVvdXNdIGRpYWdub3N0aWNzLi4uIGZpeGVkLgorICAgICAgIC0tIEhlbnJpayBHb2xkbWFuIGFsc28gc3BvdHRlZCB0d28gdHlwb3MuICBPbmUgaW4gbXBfcmFkaXhfc2l6ZSgpIGFuZCBhbm90aGVyIGluIG1wX3RvcmFkaXgoKS4KKyAgICAgICAtLSBBZGRlZCBmaXggdG8gbXBfc2hyaW5rKCkgdG8gYXZvaWQgYSBtZW1vcnkgbGVhay4KKyAgICAgICAtLSBBZGRlZCBtcF9wcmltZV9yYW5kb20oKSB3aGljaCByZXF1aXJlcyBhIGNhbGxiYWNrIHRvIG1ha2UgdHJ1bHkgcmFuZG9tIHByaW1lcyBvZiBhIGdpdmVuIG5hdHVyZQorICAgICAgICAgIChpZGVhIGZyb20gY2hhdCB3aXRoIE5pZWxzIEZlcmd1c29uIGF0IENyeXB0bycwMykKKyAgICAgICAtLSBQaWNrZWQgdXAgYSBzZWNvbmQgd2luZC4gIEknbSBmaWxsZWQgd2l0aCBHb29vLiAgTWlzc2lvbiBHb29vIQorICAgICAgIC0tIFJlbW92ZWQgZGl2aXNpb25zIGZyb20gbXBfcmVkdWNlX2lzXzJrKCkKKyAgICAgICAtLSBTcGVkIHVwIG1wX2Rpdl9kKCkgW2dlbmVyYWwgY2FzZV0gdG8gdXNlIG9ubHkgb25lIGRpdmlzaW9uIHBlciBkaWdpdCBpbnN0ZWFkIG9mIHR3by4KKyAgICAgICAtLSBBZGRlZCB0aGUgaGVhcCBtYWNyb3MgZnJvbSBMVEMgdG8gTFRNLiAgTm93IHlvdSBjYW4gZWFzaWx5IFtieSBlZGl0aW5nIGZvdXIgbGluZXMgb2YgdG9tbWF0aC5oXQorICAgICAgICAgIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgaGVhcCBmdW5jdGlvbnMgdXNlZCBpbiBMVE0gW2Fsc28gY29tcGF0aWJsZSB3aXRoIExUQyB2aWEgTVBJIG1vZGVdCisgICAgICAgLS0gQWRkZWQgYm5fcHJpbWVfcmFiaW5fbWlsbGVyX3RyaWFscygpIHdoaWNoIGdpdmVzIHRoZSBudW1iZXIgb2YgUmFiaW4tTWlsbGVyIHRyaWFscyB0byBhY2hpZXZlCisgICAgICAgICAgYSBmYWlsdXJlIHJhdGUgb2YgbGVzcyB0aGFuIDJeLTk2CisgICAgICAgLS0gZml4ZWQgYnVnIGluIGZhc3RfbXBfaW52bW9kKCkuICBUaGUgaW5pdGlhbCB0ZXN0aW5nIGxvZ2ljIHdhcyB3cm9uZy4gIEFuIGludmFsaWQgaW5wdXQgaXMgbm90IHdoZW4KKyAgICAgICAgICAiYSIgYW5kICJiIiBhcmUgZXZlbiBpdCdzIHdoZW4gImIiIGlzIGV2ZW4gW3RoZSBhbGdvIGlzIGZvciBvZGQgbW9kdWxpIG9ubHldLgorICAgICAgIC0tIFN0YXJ0ZWQgYSBuZXcgbWFudWFsIFtmaW5hbGx5XS4gIEl0IGlzIGluY29tcGxldGUgYW5kIHdpbGwgYmUgZmluaXNoZWQgYXMgdGltZSBnb2VzIG9uLiAgSSBoYWQgdG8gc3RvcAorICAgICAgICAgIGFkZGluZyBmdWxsIGRlbW9zIGFyb3VuZCBoYWxmIHdheSBpbiBjaGFwdGVyIHRocmVlIHNvIEkgY291bGQgYXQgbGVhc3QgZ2V0IGEgZ29vZCBwb3J0aW9uIG9mIHRoZQorICAgICAgICAgIG1hbnVhbCBkb25lLiAgIElmIHlvdSByZWFsbHkgbmVlZCBoZWxwIHVzaW5nIHRoZSBsaWJyYXJ5IHlvdSBjYW4gYWx3YXlzIGVtYWlsIG1lIQorICAgICAgIC0tIE15IFRleHRib29rIGlzIG5vdyBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBwYWNrYWdlIFthbGwgUHVibGljIERvbWFpbl0KKworU2VwdCAxOXRoLCAyMDAzCit2MC4yNyAgLS0gUmVtb3ZlZCBjaGFuZ2VzLnR4dH4gd2hpY2ggd2FzIG1hZGUgYnkgYWNjaWRlbnQgc2luY2UgImthdGUiIGRlY2lkZWQgaXQgd2FzCisgICAgICAgICAgYSBnb29kIHRpbWUgdG8gcmUtZW5hYmxlIGJhY2t1cHMuLi4gW2tkZSBpcyBmdW4hXQorICAgICAgIC0tIEluIG1wX2dyb3coKSAiYS0+ZHAiIGlzIG5vdCBvdmVyd3JpdHRlbiBieSByZWFsbG9jIGNhbGwgW3JlOiBtZW1vcnkgbGVha10KKyAgICAgICAgICBOb3cgaWYgbXBfZ3JvdygpIGZhaWxzIHRoZSBtcF9pbnQgaXMgc3RpbGwgdmFsaWQgYW5kIGNhbiBiZSBjbGVhcmVkIHZpYQorICAgICAgICAgIG1wX2NsZWFyKCkgdG8gcmVjbGFpbSB0aGUgbWVtb3J5LgorICAgICAgIC0tIEhlbnJpayBHb2xkbWFuIGZvdW5kIGEgYnVmZmVyIG92ZXJmbG93IGJ1ZyBpbiBtcF9hZGRfZCgpLiAgRml4ZWQuCisgICAgICAgLS0gQ2xlYW5lZCB1cCBtcF9tdWxfZCgpIHRvIGJlIG11Y2ggZWFzaWVyIHRvIHJlYWQgYW5kIGZvbGxvdy4KKworQXVnIDI5dGgsIDIwMDMKK3YwLjI2ICAtLSBGaXhlZCB0eXBvIHRoYXQgY2F1c2VkIHdhcm5pbmcgd2l0aCBHQ0MgMy4yCisgICAgICAgLS0gTWFydGluIE1hcmNlbCBub3RpY2VkIGEgYnVnIGluIG1wX25lZygpIHRoYXQgYWxsb3dlZCBuZWdhdGl2ZSB6ZXJvZXMuCisgICAgICAgICAgQWxzbywgTWFydGluIGlzIHRoZSBmZWxsb3cgd2hvIG5vdGVkIHRoZSBidWdzIGluIG1wX2djZCgpIG9mIDAuMjQvMC4yNS4KKyAgICAgICAtLSBNYXJ0aW4gTWFyY2VsIG5vdGljZWQgYW4gb3B0aW1pemF0aW9uIFthbmQgc2xpZ2h0IGJ1Z10gaW4gbXBfbGNtKCkuCisgICAgICAgLS0gQWRkZWQgZml4IHRvIG1wX3JlYWRfdW5zaWduZWRfYmluIHRvIHByZXZlbnQgYSBidWZmZXIgb3ZlcmZsb3cuCisgICAgICAgLS0gQmVlZmVkIHVwIHRoZSBjb21tZW50cyBpbiB0aGUgYmFzZWxpbmUgbXVsdGlwbGllcnMgW2FuZCBtb250Z29tZXJ5XQorICAgICAgIC0tIEFkZGVkICJtb250IiBkZW1vIHRvIHRoZSBtYWtlZmlsZS5tc3ZjIGluIGV0Yy8KKyAgICAgICAtLSBPcHRpbWl6ZWQgc2lnbiBjb21wYXJlcyBpbiBtcF9jbXAgZnJvbSA0IHRvIDIgY2FzZXMuCisKK0F1ZyA0dGgsIDIwMDMKK3YwLjI1ICAtLSBGaXggdG8gbXBfZ2NkIGFnYWluLi4uIG9vcHMgKDAsLWEpID09ICgtYSwgMCkgPT0gYQorICAgICAgIC0tIEZpeCB0byBtcF9jbGVhciB3aGljaCBkaWRuJ3QgcmVzZXQgdGhlIHNpZ24gIFtHcmVnIFJvc2VdCisgICAgICAgLS0gQWRkZWQgbXBfZXJyb3JfdG9fc3RyaW5nKCkgdG8gY29udmVydCByZXR1cm4gY29kZXMgdG8gc3RyaW5ncy4gIFtHcmVnIFJvc2VdCisgICAgICAgLS0gT3B0aW1pemVkIGZhc3RfbXBfaW52bW9kKCkgdG8gZG8gdGhlIHRlc3QgZm9yIGludmFsaWQgaW5wdXRzIFtib3RoIGV2ZW5dCisgICAgICAgICAgZmlyc3Qgc28gdGVtcHMgZG9uJ3QgaGF2ZSB0byBiZSBpbml0aWFsaXplZCBpZiBpdCdzIGdvaW5nIHRvIGZhaWwuCisgICAgICAgLS0gT3B0aW1pemVkIG1wX2djZCgpIGJ5IHJlbW92aW5nIG1wX2Rpdl8yZCBjYWxscyBmb3Igd2hlbiBvbmUgb2YgdGhlIGlucHV0cworICAgICAgICAgIGlzIG9kZC4KKyAgICAgICAtLSBUb25zIG9mIG5ldyBjb21tZW50cywgc29tZSBpbmRlbnRhdGlvbiBmaXh1cHMsIGV0Yy4KKyAgICAgICAtLSBtcF9qYWNvYmkoKSByZXR1cm5zIE1QX1ZBTCBpZiB0aGUgbW9kdWx1cyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVyby4KKyAgICAgICAtLSBmaXhlZCB0d28gdHlwb3MgaW4gdGhlIGhlYWRlciBvZiBlYWNoIGZpbGUgOi0pCisgICAgICAgLS0gTGliVG9tTWF0aCBpcyBvZmZpY2lhbGx5IFB1YmxpYyBEb21haW4gW3NlZSBMSUNFTlNFXQorCitKdWx5IDE1dGgsIDIwMDMKK3YwLjI0ICAtLSBPcHRpbWl6ZWQgbXBfYWRkX2QgYW5kIG1wX3N1Yl9kIHRvIG5vdCBhbGxvY2F0ZSB0ZW1wb3JhcnkgdmFyaWFibGVzCisgICAgICAgLS0gRml4ZWQgbXBfZ2NkKCkgc28gdGhlIGdjZCBvZiAwLDAgaXMgMC4gIEFsbG93cyB0aGUgZ2NkIG9wZXJhdGlvbiB0byBiZSBjaGFpbmVkCisgICAgICAgICAgZS5nLiAoMCwwLGEpID09IGEgW2luc3RlYWQgb2YgMV0KKyAgICAgICAtLSBTaG91bGQgYmUgb25lIG9mIHRoZSBsYXN0IHJlbGVhc2UgZm9yIGEgd2hpbGUuICBXb3JraW5nIG9uIExpYlRvbU1hdGggYm9vayBub3cuCisgICAgICAgLS0gb3B0aW1pemVkIHRoZSBwcHJpbWUgZGVtbyBbL2V0Yy9wcHJpbWUuY10gdG8gZmlyc3QgbWFrZSBhIGh1Z2UgdGFibGUgb2Ygc2luZ2xlCisgICAgICAgICAgZGlnaXQgcHJpbWVzIHRoZW4gaXQgcmVhZHMgdGhlbSByYW5kb21seSBpbnN0ZWFkIG9mIHJhbmRvbWx5IGNob29zaW5nL3Rlc3Rpbmcgc2luZ2xlCisgICAgICAgICAgZGlnaXQgcHJpbWVzLgorCitKdWx5IDEydGgsIDIwMDMKK3YwLjIzICAtLSBPcHRpbWl6ZWQgbXBfcHJpbWVfbmV4dF9wcmltZSgpIHRvIG5vdCB1c2UgbXBfbW9kIFt2aWEgaXNfZGl2aXNpYmxlKCldIGluIGVhY2gKKyAgICAgICAgICBpdGVyYXRpb24uICBJbnN0ZWFkIG5vdyBhIHNtYWxsZXIgdGFibGUgaXMga2VwdCBvZiB0aGUgcmVzaWR1ZXMgd2hpY2ggY2FuIGJlIHVwZGF0ZWQKKyAgICAgICAgICB3aXRob3V0IGRpdmlzaW9uLgorICAgICAgIC0tIEZpeGVkIGEgYnVnIGluIG5leHRfcHJpbWUoKSB3aGVyZSBhbiBpbnB1dCBvZiB6ZXJvIHdvdWxkIGJlIHRyZWF0ZWQgYXMgb2RkIGFuZAorICAgICAgICAgIGhhdmUgdHdvIGFkZGVkIHRvIGl0IFt0byBtb3ZlIHRvIHRoZSBuZXh0IG9kZF0uCisgICAgICAgLS0gZml4ZWQgYSBidWcgaW4gcHJpbWVfZmVybWF0KCkgYW5kIHByaW1lX21pbGxlcl9yYWJpbigpIHdoaWNoIGFsbG93ZWQgdGhlIGJhc2UKKyAgICAgICAgICB0byBiZSBuZWdhdGl2ZSwgemVybyBvciBvbmUuICBOb3JtYWxseSB0aGUgdGVzdCBpcyBvbmx5IHZhbGlkIGlmIHRoZSBiYXNlIGlzCisgICAgICAgICAgZ3JlYXRlciB0aGFuIG9uZS4KKyAgICAgICAtLSBjaGFuZ2VkIHRoZSBuZXh0X3ByaW1lKCkgcHJvdG90eXBlIHRvIGFjY2VwdCBhIG5ldyBwYXJhbWV0ZXIgImJic19zdHlsZSIgd2hpY2gKKyAgICAgICAgICB3aWxsIGZpbmQgdGhlIG5leHQgcHJpbWUgY29uZ3J1ZW50IHRvIDMgbW9kIDQuICBUaGUgZGVmYXVsdCBbYmJzX3N0eWxlPT0wXSB3aWxsCisgICAgICAgICAgbWFrZSBwcmltZXMgd2hpY2ggYXJlIGVpdGhlciBjb25ncnVlbnQgdG8gMSBvciAzIG1vZCA0LgorICAgICAgIC0tIGZpeGVkIG1wX3JlYWRfdW5zaWduZWRfYmluKCkgc28gdGhhdCBpdCBkb2Vzbid0IGluY2x1ZGUgYm90aCBjb2RlIGZvcgorICAgICAgICAgIHRoZSBjYXNlIERJR0lUX0JJVCA8IDggYW5kID49IDgKKyAgICAgICAtLSBvcHRpbWl6ZWQgZGl2X2QoKSB0byBlYXN5IG91dCBvbiBkaXZpc2lvbiBieSAxIFtvciBpZiBhID09IDBdIGFuZCB1c2UKKyAgICAgICAgICBsb2dpY2FsIHNoaWZ0cyBpZiB0aGUgZGl2aXNvciBpcyBhIHBvd2VyIG9mIHR3by4KKyAgICAgICAtLSB0aGUgZGVmYXVsdCBESUdJVF9CSVQgdHlwZSB3YXMgbm90IGludCBmb3Igbm9uLWRlZmF1bHQgYnVpbGRzLiAgRml4ZWQuCisKK0p1bHkgMm5kLCAyMDAzCit2MC4yMiAgLS0gRml4ZWQgdXAgbXBfaW52bW9kIHNvIHRoZSByZXN1bHQgaXMgcHJvcGVybHkgaW4gcmFuZ2Ugbm93IFt3YXMgYWx3YXlzIGNvbmdydWVudCB0byB0aGUgaW52ZXJzZS4uLl0KKyAgICAgICAtLSBGaXhlZCB1cCBzX21wX2V4cHRtb2QgYW5kIG1wX2V4cHRtb2RfZmFzdCBzbyB0aGUgbG93ZXIgaGFsZiBvZiB0aGUgcHJlLWNvbXB1dGVkIHRhYmxlIGlzbid0IGFsbG9jYXRlZAorICAgICAgICAgIHdoaWNoIG1ha2VzIHRoZSBhbGdvcml0aG0gdXNlIGhhbGYgYXMgbXVjaCByYW0uCisgICAgICAgLS0gRml4ZWQgdGhlIGluc3RhbGwgc2NyaXB0IG5vdCB0byBtYWtlIHRoZSBib29rIDotKSBbd2hpY2ggaXNuJ3QgaW5jbHVkZWQgYW55d2F5c10KKyAgICAgICAtLSBhZGRlZCBtcF9jbnRfbHNiKCkgd2hpY2ggY291bnRzIGhvdyBtYW55IG9mIHRoZSBsc2JzIGFyZSB6ZXJvCisgICAgICAgLS0gb3B0aW1pemVkIG1wX2djZCgpIHRvIHVzZSB0aGUgbmV3IG1wX2NudF9sc2IoKSB0byByZXBsYWNlIG11bHRpcGxlIGRpdmlzaW9ucyBieSB0d28gYnkgYSBzaW5nbGUgZGl2aXNpb24uCisgICAgICAgLS0gYXBwbGllZCBzaW1pbGFyIG9wdGltaXphdGlvbiB0byBtcF9wcmltZV9taWxsZXJfcmFiaW4oKS4KKyAgICAgICAtLSBGaXhlZCBhIGJ1ZyBpbiBib3RoIG1wX2ludm1vZCgpIGFuZCBmYXN0X21wX2ludm1vZCgpIHdoaWNoIHRlc3RlZCBmb3Igb2RkCisgICAgICAgICAgdmlhICJtcF9pc2V2ZW4oKSA9PSAwIiB3aGljaCBpcyBub3QgdmFsaWQgW3NpbmNlIHplcm8gaXMgbm90IGV2ZW4gZWl0aGVyXS4KKworSnVuZSAxOXRoLCAyMDAzCit2MC4yMSAgLS0gRml4ZWQgYnVnIGluIG1wX211bF9kIHdoaWNoIHdvdWxkIG5vdCBoYW5kbGUgc2lnbiBjb3JyZWN0bHkgW3dvdWxkIG5vdCBhbHdheXMgZm9yd2FyZCBpdF0KKyAgICAgICAtLSBSZW1vdmVkIHRoZSAjbGluZSBsaW5lcyBmcm9tIGdlbi5wbCBbd2FzIGluIHZpb2xhdGlvbiBvZiBJU08gQ10KKworSnVuZSA4dGgsIDIwMDMKK3YwLjIwICAtLSBSZW1vdmVkIHRoZSBib29rIGZyb20gdGhlIHBhY2thZ2UuICBBZGRlZCB0aGUgVERDQUwgbGljZW5zZSBkb2N1bWVudC4KKyAgICAgICAtLSBUaGlzIHJlbGVhc2UgaXMgb2ZmaWNpYWxseSBwdXJlLWJyZWQgVERDQUwgYWdhaW4gW2xhc3Qgb2ZmaWNpYWxseSBURENBTCBiYXNlZCByZWxlYXNlIHdhcyB2MC4xNl0KKworSnVuZSA2dGgsIDIwMDMKK3YwLjE5ICAtLSBGaXhlZCBhIGJ1ZyBpbiBtcF9tb250Z29tZXJ5X3JlZHVjZSgpIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIHdoZW4gSSB0d2Vha2VkIG1wX3JzaGQoKSBpbiB0aGUgcHJldmlvdXMgcmVsZWFzZS4KKyAgICAgICAgICBFc3NlbnRpYWxseSB0aGUgZGlnaXRzIHdlcmUgbm90IHRyaW1tZWQgYmVmb3JlIHRoZSBjb21wYXJlIHdoaWNoIGNhdXNlIGEgc3VidHJhY3Rpb24gdG8gb2NjdXIgYWxsIHRoZSB0aW1lLgorICAgICAgIC0tIEZpeGVkIHVwIGV0Yy90dW5lLmMgYSBiaXQgdG8gc3RvcCB0ZXN0aW5nIG5ldyBjdXRvZmZzIGFmdGVyIDE2IGZhaWx1cmVzIFt0byBmaW5kIG1vcmUgb3B0aW1hbCBwb2ludHNdLgorICAgICAgICAgIEJydXRlIGZvcmNlIGhvIQorCisKK01heSAyOXRoLCAyMDAzCit2MC4xOCAgLS0gRml4ZWQgYSBidWcgaW4gc19tcF9zcXIgd2hpY2ggd291bGQgaGFuZGxlIGNhcnJpZXMgcHJvcGVybHkganVzdCBub3QgdmVyeSBlbGVnYW50bHkuCisgICAgICAgICAgKGUuZy4gY29ycmVjdCByZXN1bHQsIGp1c3QgYmFkIGxvb2tpbmcgY29kZSkKKyAgICAgICAtLSBGaXhlZCBidWcgaW4gbXBfc3FyIHdoaWNoIHN0aWxsIGhhZCBhIDUxMiBjb25zdGFudCBpbnN0ZWFkIG9mIE1QX1dBUlJBWQorICAgICAgIC0tIEFkZGVkIFRvb20tQ29vayBtdWx0aXBsaWVycyBbbmVlZHMgdHVuaW5nIV0KKyAgICAgICAtLSBBZGRlZCBlZmZpY2llbnQgZGl2aWRlIGJ5IDMgYWxnb3JpdGhtIG1wX2Rpdl8zCisgICAgICAgLS0gUmUtd3JvdGUgbXBfZGl2X2QgdG8gYmUgZmFzdGVyIHRoYW4gY2FsbGluZyBtcF9kaXYKKyAgICAgICAtLSBBZGRlZCBpbiBhIGRvbmF0ZWQgQkNDIG1ha2VmaWxlIGFuZCBhIHNpbmdsZSBwYWdlIExUTSBwb3N0ZXIgKGFoYWxoYWJzaUBzYmNnbG9iYWwubmV0KQorICAgICAgIC0tIEFkZGVkIG1wX3JlZHVjZV8yayB3aGljaCByZWR1Y2VzIGFuIGlucHV0IG1vZHVsbyBuID0gMioqcCAtIGsgZm9yIGFueSBzaW5nbGUgZGlnaXQgaworICAgICAgIC0tIE1hZGUgdGhlIGV4cHRtb2Qgc3lzdGVtIGJlIGF3YXJlIG9mIHRoZSAyayByZWR1Y3Rpb24gYWxnb3JpdGhtcy4KKyAgICAgICAtLSBSZXdyb3RlIG1wX2RyX3JlZHVjZSB0byBiZSBzbWFsbGVyLCBzaW1wbGVyIGFuZCBlYXNpZXIgdG8gdW5kZXJzdGFuZC4KKworTWF5IDE3dGgsIDIwMDMKK3YwLjE3ICAtLSBCZW5qYW1pbiBHb2xkYmVyZyBzdWJtaXR0ZWQgb3B0aW1pemVkIG1wX2FkZCBhbmQgbXBfc3ViIHJvdXRpbmVzLiAgQSBuZXcgZ2VuLnBsIGFzIHdlbGwKKyAgICAgICAgICBhcyBzZXZlcmFsIHNtYWxsZXIgc3VnZ2VzdGlvbnMuICBUaGFua3MhCisgICAgICAgLS0gcmVtb3ZlZCBjYWxsIHRvIG1wX2NtcCBpbiBpbm5lciBsb29wIG9mIG1wX2RpdiBhbmQgcHV0IG1wX2NtcF9tYWcgaW4gaXRzIHBsYWNlIDotKQorICAgICAgIC0tIEZpeGVkIGJ1ZyBpbiBtcF9leHB0bW9kIHRoYXQgd291bGQgY2F1c2UgaXQgdG8gZmFpbCBmb3Igb2RkIG1vZHVsaSB3aGVuIERJR0lUX0JJVCAhPSAyOAorICAgICAgIC0tIG1wX2V4cHRtb2Qgbm93IGFsc28gcmV0dXJucyBlcnJvcnMgaWYgdGhlIG1vZHVsdXMgaXMgbmVnYXRpdmUgYW5kIHdpbGwgaGFuZGxlIG5lZ2F0aXZlIGV4cG9uZW50cworICAgICAgIC0tIG1wX3ByaW1lX2lzX3ByaW1lIHdpbGwgbm93IHJldHVybiB0cnVlIGlmIHRoZSBpbnB1dCBpcyBvbmUgb2YgdGhlIHByaW1lcyBpbiB0aGUgcHJpbWUgdGFibGUKKyAgICAgICAtLSBEYW1pYW4gTSBHcnlza2kgKGRncnlza2lAdXdhdGVybG9vLmNhKSBmb3VuZCBhIGluZGV4IG91dCBvZiBib3VuZHMgZXJyb3IgaW4gdGhlCisgICAgICAgICAgbXBfZmFzdF9zX21wX211bF9oaWdoX2RpZ3MgZnVuY3Rpb24gd2hpY2ggZGlkbid0IGNvbWUgdXAgYmVmb3JlLiAgKGZpeGVkKQorICAgICAgIC0tIFJlZmFjdG9yZWQgdGhlIERSIHJlZHVjdGlvbiBjb2RlIHNvIHRoZXJlIGlzIG9ubHkgb25lIGZ1bmN0aW9uIHBlciBmaWxlLgorICAgICAgIC0tIEZpeGVkIGJ1ZyBpbiB0aGUgbXBfbXVsKCkgd2hpY2ggd291bGQgZXJyb25lb3VzbHkgYXZvaWQgdGhlIGZhc3RlciBtdWx0aXBsaWVyIFtjb21iYV0gd2hlbiBpdCB3YXMKKyAgICAgICAgICBhbGxvd2VkLiAgVGhlIGJ1ZyB3b3VsZCBub3QgY2F1c2UgdGhlIGluY29ycmVjdCB2YWx1ZSB0byBiZSBwcm9kdWNlZCBqdXN0IGxlc3MgZWZmaWNpZW50IChmaXhlZCkKKyAgICAgICAtLSBGaXhlZCBzaW1pbGFyIGJ1ZyBpbiB0aGUgTW9udGdvbWVyeSByZWR1Y3Rpb24gY29kZS4KKyAgICAgICAtLSBBZGRlZCB0b25zIG9mIChtcF9kaWdpdCkgY2FzdHMgc28gdGhlIDcvMTUvMjgvMzEgYml0IGRpZ2l0IGNvZGUgd2lsbCB3b3JrIGZsYXdsZXNzbHkgb3V0IG9mIHRoZSBib3guCisgICAgICAgICAgQWxzbyBhZGRlZCBsaW1pdGVkIHN1cHBvcnQgZm9yIDY0LWJpdCBtYWNoaW5lcyB3aXRoIGEgNjAtYml0IGRpZ2l0LiAgQm90aCB0aGFua3MgdG8gVG9tIFd1ICh0b21AYXJjb3QuY29tKQorICAgICAgIC0tIEFkZGVkIG5ldyBjb21tZW50cyBoZXJlIGFuZCB0aGVyZSwgY2xlYW5lZCB1cCBzb21lIGNvZGUgW3N0eWxlIHN0dWZmXQorICAgICAgIC0tIEZpeGVkIGEgbGluZ2VyaW5nIHR5cG8gaW4gbXBfZXhwdG1vZCogdGhhdCB3b3VsZCBzZXQgYml0Y250IHRvIHplcm8gdGhlbiBvbmUuICBWZXJ5IHNpbGx5IHN0dWZmIDotKQorICAgICAgIC0tIEZpeGVkIHVwIG1wX2V4cHRtb2RfZmFzdCBzbyBpdCB3b3VsZCBzZXQgInJlZHV4IiB0byB0aGUgY29tYmEgTW9udGdvbWVyeSByZWR1Y3Rpb24gaWYgYWxsb3dlZC4gIFRoaXMKKyAgICAgICAgICBzYXZlcyBxdWl0ZSBhIGZldyBjYWxscyBhbmQgaWYgc3RhdGVtZW50cy4KKyAgICAgICAtLSBBZGRlZCBldGMvbW9udC5jIGEgdGVzdCBvZiB0aGUgTW9udGdvbWVyeSByZWR1Y3Rpb24gW2Fzc3VtaW5nIGFsbCBlbHNlIHdvcmtzIDotfCBdCisgICAgICAgLS0gRml4ZWQgdXAgZXRjL3R1bmUuYyB0byB1c2UgYSB3aWRlciB0ZXN0IHJhbmdlIFttb3JlIGFwcHJvcHJpYXRlXSBhbHNvIGFkZGVkIGEgeDg2IGJhc2VkIGFkZGl0aW9uIHdoaWNoCisgICAgICAgICAgdXNlcyBSRFRTQyBmb3IgaGlnaCBwcmVjaXNpb24gdGltaW5nLgorICAgICAgIC0tIFVwZGF0ZWQgZGVtby9kZW1vLmMgdG8gcmVtb3ZlIE1QSSBzdHVmZiBbd29uJ3Qgd29yayBhbnl3YXlzXSwgbWFkZSB0aGUgdGVzdHMgcnVuIGZvciAyIHNlY29uZHMgZWFjaCBzbyBpdHMKKyAgICAgICAgICBub3Qgc28gaW5zYW5lbHkgc2xvdy4gIEFsc28gbWFkZSB0aGUgb3V0cHV0IHNwYWNlIGRlbGltaXRlZCBbYW5kIGZpeGVkIHVwIHZhcmlvdXMgZXJyb3JzXQorICAgICAgIC0tIEFkZGVkIGxvZ3MgZGlyZWN0b3J5LCBsb2dzL2dyYXBoLmRlbSB3aGljaCB3aWxsIHVzZSBnbnVwbG90IHRvIG1ha2UgYSBzZXJpZXMgb2YgUE5HIGZpbGVzCisgICAgICAgICAgdGhhdCBnbyB3aXRoIHRoZSBwcmUtbWFkZSBpbmRleC5odG1sLiAgWW91IGhhdmUgdG8gYnVpbGQgW3ZpYSBtYWtlIHRpbWluZ10gYW5kIHJ1biBsdG10ZXN0IGZpcnN0IGluIHRoZQorICAgICAgICAgIHJvb3Qgb2YgdGhlIHBhY2thZ2UuCisgICAgICAgLS0gRml4ZWQgYSBidWcgaW4gbXBfc3ViIGFuZCBtcF9hZGQgd2hlcmUgIi1hIC0gLWEiIG9yICItYSArIGEiIHdvdWxkIHByb2R1Y2UgLTAgYXMgdGhlIHJlc3VsdCBbb2J2aW91c2x5IGludmFsaWRdLgorICAgICAgIC0tIEZpeGVkIGEgYnVnIGluIG1wX3JzaGQuICBJZiB0aGUgY291bnQgPT0gYS51c2VkIGl0IHNob3VsZCB6ZXJvL3JldHVybiBbaW5zdGVhZCBvZiBzaGlmdGluZ10KKyAgICAgICAtLSBGaXhlZCBhICJvZmYtYnktb25lIiBidWcgaW4gbXBfbXVsMmQuICBUaGUgaW5pdGlhbCBzaXplIGNoZWNrIG9uIGFsbG9jIHdvdWxkIGJlIG9mZiBieSBvbmUgaWYgdGhlIHJlc2lkdWUKKyAgICAgICAgICBzaGlmdGluZyBjYXVzZWQgYSBjYXJyeS4KKyAgICAgICAtLSBGaXhlZCBhIGJ1ZyB3aGVyZSBzX21wX211bF9kaWdzKCkgd291bGQgbm90IGNhbGwgdGhlIENvbWJhIGJhc2VkIHJvdXRpbmUgaWYgYWxsb3dlZC4gIFRoaXMgbWFkZSBCYXJyZXR0IHJlZHVjdGlvbgorICAgICAgICAgIHNsb3dlciB0aGFuIGl0IGhhZCB0byBiZS4KKworTWFyIDI5dGgsIDIwMDMKK3YwLjE2ICAtLSBTcGVkIHVwIG1wX2RpdiBieSBtYWtpbmcgbm9ybWFsaXphdGlvbiBvbmUgc2hpZnQgY2FsbAorICAgICAgIC0tIFNwZWQgdXAgbXBfbXVsXzJkL21wX2Rpdl8yZCBieSBhbGlhc2luZyBwb2ludGVycyA6LSkKKyAgICAgICAtLSBDbGVhbmVkIHVwIG1wX2djZCB0byB1c2UgdGhlIG1hY3JvcyBmb3Igb2RkL2V2ZW4gZGV0ZWN0aW9uCisgICAgICAgLS0gQWRkZWQgY29tbWVudHMgaGVyZSBhbmQgdGhlcmUsIG1vc3RseSB0aGVyZSBidXQgb2NjYXNpb25hbGx5IGhlcmUgdG9vLgorCitNYXIgMjJuZCwgMjAwMwordjAuMTUgIC0tIEFkZGVkIHNlcmllcyBvZiBwcmltZSB0ZXN0aW5nIHJvdXRpbmVzIHRvIGxpYgorICAgICAgIC0tIEZpeGVkIHVwIGV0Yy90dW5lLmMKKyAgICAgICAtLSBBZGRlZCBEUiByZWR1Y3Rpb24gYWxnb3JpdGhtCisgICAgICAgLS0gQmVlZmVkIHVwIHRoZSBtYW51YWwgbW9yZS4KKyAgICAgICAtLSBGaXhlZCB1cCBkZW1vL2RlbW8uYyBzbyBpdCBkb2Vzbid0IGhhdmUgc28gbWFueSB3YXJuaW5ncyBhbmQgaXQgZG9lcyB0aGUgZnVsbCBzZXJpZXMgb2YKKyAgICAgICAgICB0ZXN0cworICAgICAgIC0tIEFkZGVkICJwcmUtZ2VuIiBkaXJlY3Rvcnkgd2hpY2ggd2lsbCBob2xkIGEgImdlbi5wbCInZWQgY29weSBvZiB0aGUgZW50aXJlIGxpYiBbZG9uZSBhdAorICAgICAgICAgIHppcHVwIHRpbWUgc28gaXRzIGFsd2F5cyB0aGUgbGF0ZXN0XQorICAgICAgIC0tIEFkZGVkIGNvbmRpdGlvbmFsIGNhc3RzIGZvciBDKysgdXNlcnMgW2JvbyFdCisKK01hciAxNXRoLCAyMDAzCit2MC4xNCAgLS0gVG9ucyBvZiBtYW51YWwgdXBkYXRlcworICAgICAgIC0tIGNsZWFuZWQgdXAgdGhlIGRpcmVjdG9yeQorICAgICAgIC0tIGFkZGVkIE1TVkMgbWFrZWZpbGVzCisgICAgICAgLS0gc291cmNlIGNoYW5nZXMgW3RoYXQgSSBkb24ndCByZWNhbGxdCisgICAgICAgLS0gRml4ZWQgdXAgdGhlIGxzaGQvcnNoZCBjb2RlIHRvIHVzZSBwb2ludGVyIGFsaWFzaW5nCisgICAgICAgLS0gRml4ZWQgdXAgdGhlIG11bF8yZCBhbmQgZGl2XzJkIHRvIG5vdCBjYWxsIHJzaGQvbHNoZCB1bmxlc3MgbmVlZGVkCisgICAgICAgLS0gRml4ZWQgdXAgZXRjL3R1bmUuYyBhIHRhZAorICAgICAgIC0tIGZpeGVkIHVwIGRlbW8vZGVtby5jIHRvIG91dHB1dCBjb21tYS1kZWxpbWl0ZWQgcmVzdWx0cyBvZiB0aW1pbmcKKyAgICAgICAgICBhbHNvIGZpeGVkIHVwIHRpbWluZyBkZW1vIHRvIHVzZSBhIGZpbmVyIGdyYW51bGFyaXR5IGZvciB2YXJpb3VzIGZ1bmN0aW9ucworICAgICAgIC0tIGZpeGVkIHVwIGRlbW8vZGVtby5jIHRlc3RpbmcgdG8gcGF1c2UgZHVyaW5nIHRlc3Rpbmcgc28gbXkgRHVyb24gd29uJ3QgY2F0Y2ggb24gZmlyZQorICAgICAgICAgIFtzdGF5cyBhcm91bmQgMzEtMzVDIGR1cmluZyB0ZXN0aW5nIDotKV0KKworRmViIDEzdGgsIDIwMDMKK3YwLjEzICAtLSB0b25zIG9mIG1pbm9yIHNwZWVkLXVwcyBpbiBsb3cgbGV2ZWwgYWRkLCBzdWIsIG11bF8yIGFuZCBkaXZfMiB3aGljaCBwcm9wYWdhdGUKKyAgICAgICAgICB0byBvdGhlciBmdW5jdGlvbnMgbGlrZSBtcF9pbnZtb2QsIG1wX2RpdiwgZXRjLi4uCisgICAgICAgLS0gU3BlZCB1cCBtcF9leHB0bW9kX2Zhc3QgYnkgdXNpbmcgbmV3IGNvZGUgdG8gZmluZCBSIG1vZCBtIFtlLmcuIEJebiBtb2QgbV0KKyAgICAgICAtLSBtaW5vciBmaXhlcworCitKYW4gMTd0aCwgMjAwMwordjAuMTIgIC0tIHJlLXdyb3RlIHRoZSBtYWpvcml0eSBvZiB0aGUgbWFrZWZpbGUgc28gaXRzIG1vcmUgcG9ydGFibGUgYW5kIHdpbGwKKyAgICAgICAgICBpbnN0YWxsIHZpYSAibWFrZSBpbnN0YWxsIiBvbiBtb3N0ICpuaXggcGxhdGZvcm1zCisgICAgICAgLS0gUmUtcGFja2FnZWQgYWxsIHRoZSBzb3VyY2UgYXMgc2VwZXJhdGUgZmlsZXMuICBNZWFucyB0aGUgbGlicmFyeSBhIHNpbmdsZQorICAgICAgICAgIGZpbGUgcGFja2FnYWdlIGFueSBtb3JlLiAgSW5zdGVhZCBvZiBqdXN0IGFkZGluZyAiYm4uYyIgeW91IGhhdmUgdG8gYWRkCisgICAgICAgICAgbGlidG9tbWF0aC5hCisgICAgICAgLS0gUmVuYW1lZCAiYm4uaCIgdG8gInRvbW1hdGguaCIKKyAgICAgICAtLSBDaGFuZ2VzIHRvIHRoZSBtYW51YWwgdG8gcmVmbGVjdCBhbGwgb2YgdGhpcworICAgICAgIC0tIFVzZWQgR05VIEluZGVudCB0byBjbGVhbiB1cCB0aGUgc291cmNlCisKK0phbiAxNXRoLCAyMDAzCit2MC4xMSAgLS0gTW9yZSBzdWJ0bGUgZml4ZXMKKyAgICAgICAtLSBNb3ZlZCB0byBnZW50b28gbGludXggW2h1cnJhaCFdIHNvIG1hZGUgKm5peCBzcGVjaWZpYyBmaXhlcyB0byB0aGUgbWFrZSBwcm9jZXNzCisgICAgICAgLS0gU3BlZCB1cCB0aGUgbW9udGdvbWVyeSByZWR1Y3Rpb24gY29kZSBxdWl0ZSBhIGJpdAorICAgICAgIC0tIGZpeGVkIHVwIGRlbW8gc28gd2hlbiBidWlsZGluZyB0aW1pbmcgZm9yIHRoZSB4ODYgaXQgYXNzdW1lcyBFTEYgZm9ybWF0IG5vdworCitKYW4gOXRoLCAyMDAzCit2MC4xMCAgLS0gUGVra2EgUmlpa29uZW4gc3VnZ2VzdGVkIGZpeGVzIHRvIHRoZSByYWRpeCBjb252ZXJzaW9uIGNvZGUuCisgICAgICAgLS0gQWRkZWQgYmFzZWxpbmUgbW9udGdvbWVyeSBhbmQgY29tYmEgbW9udGdvbWVyeSByZWR1Y3Rpb25zLCBzcGVkIHVwIGV4cHRtb2RzCisgICAgICAgICAgW3RvIGEgcG9pbnQsIHNlZSBibi5oIGZvciBNT05UR09NRVJZX0VYUFRfQ1VUT0ZGXQorCitKYW4gNnRoLCAyMDAzCit2MC4wOSAgLS0gVXBkYXRlZCB0aGUgbWFudWFsIHRvIHJlZmxlY3QgcmVjZW50IGNoYW5nZXMuICA6LSkKKyAgICAgICAtLSBBZGRlZCBKYWNvYmkgZnVuY3Rpb24gKG1wX2phY29iaSkgdG8gc3VwcGxlbWVudCB0aGUgbnVtYmVyIHRoZW9yeSBzaWRlIG9mIHRoZSBsaWIKKyAgICAgICAtLSBBZGRlZCBhIE1lcnNlbm5lIHByaW1lIGZpbmRlciBkZW1vIGluIC4vZXRjL21lcnNlbm5lLmMKKworSmFuIDJuZCwgMjAwMwordjAuMDggIC0tIFNwZWQgdXAgdGhlIG11bHRpcGxpZXJzIGJ5IG1vdmluZyB0aGUgaW5uZXIgbG9vcCB2YXJpYWJsZXMgaW50byBhIHNtYWxsZXIgc2NvcGUKKyAgICAgICAtLSBDb3JyZWN0ZWQgYSBidW5jaCBvZiBzbWFsbCAid2FybmluZ3MiCisgICAgICAgLS0gQWRkZWQgbW9yZSBjb21tZW50cworICAgICAgIC0tIE1hZGUgIm10ZXN0IiBiZSBhYmxlIHRvIHVzZSAvZGV2L3JhbmRvbSwgL2Rldi91cmFuZG9tIG9yIHN0ZGluIGZvciBSTkcgZGF0YQorICAgICAgIC0tIENvcnJlY3RlZCBzb21lIGJ1Z3Mgd2hlcmUgZXJyb3IgbWVzc2FnZXMgd2VyZSBwb3RlbnRpYWxseSBpZ25vcmVkCisgICAgICAgLS0gYWRkIGV0Yy9wcHJpbWUuYyBwcm9ncmFtIHdoaWNoIG1ha2VzIG51bWJlcnMgd2hpY2ggYXJlIHByb3ZhYmx5IHByaW1lLgorCitKYW4gMXN0LCAyMDAzCit2MC4wNyAgLS0gUmVtb3ZlZCBhbG90IG9mIGhlYXAgb3BlcmF0aW9ucyBmcm9tIGNvcmUgZnVuY3Rpb25zIHRvIHNwZWVkIHRoZW0gdXAKKyAgICAgICAtLSBBZGRlZCBhIHJvb3QgZmluZGluZyBmdW5jdGlvbiBbYW5kIG1wX3NxcnQgbWFjcm8gbGlrZSBmcm9tIE1QSV0KKyAgICAgICAtLSBBZGRlZCBtb3JlIHRvIG1hbnVhbAorCitEZWMgMzFzdCwgMjAwMgordjAuMDYgIC0tIFNwZWQgdXAgdGhlIHNfbXBfYWRkLCBzX21wX3N1YiB3aGljaCBpbnR1cm4gc3BlZCB1cCBtcF9pbnZtb2QsIG1wX2V4cHRtb2QsIGV0Yy4uLgorICAgICAgIC0tIENsZWFuZWQgdXAgdGhlIGhlYWRlciBhIGJpdCBtb3JlCisKK0RlYyAzMHRoLCAyMDAyCit2MC4wNSAgLS0gQnVpbGRzIHdpdGggTVNWQyBvdXQgb2YgdGhlIGJveAorICAgICAgIC0tIEZpeGVkIGEgYnVnIGluIG1wX2ludm1vZCB3LnIudC4gZXZlbiBtb2R1bGkKKyAgICAgICAtLSBNYWRlIG1wX3RvcmFkaXggYW5kIG1wX3JlYWRfcmFkaXggdXNlIGNoYXIgaW5zdGVhZCBvZiB1bnNpZ25lZCBjaGFyIGFycmF5cworICAgICAgIC0tIEZpeGVkIHVwIGV4cHRtb2QgdG8gdXNlIGZld2VyIG11bHRpcGxpY2F0aW9ucworICAgICAgIC0tIEZpeGVkIHVwIG1wX2luaXRfc2l6ZSB0byB1c2Ugb25seSBvbmUgaGVhcCBvcGVyYXRpb24KKyAgICAgICAgICAtLSBOb3RlIHRoZXJlIGlzIGEgc2xpZ2h0ICJvZmYtYnktb25lIiBidWcgaW4gdGhlIGxpYnJhcnkgc29tZXdoZXJlCisgICAgICAgICAgICAgd2l0aG91dCB0aGUgcGFkZGluZyAoc2VlIHRoZSBzb3VyY2UgZm9yIGNvbW1lbnQpIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAgY3Jhc2hlcyBpbiBsaWJ0b21jcnlwdC4gIEFueXdheXMgYSByZWFzb25hYmxlIHdvcmthcm91bmQgaXMgdG8gcGFkIHRoZQorICAgICAgICAgICAgIG51bWJlcnMgd2hpY2ggd2lsbCBhbHdheXMgY29ycmVjdCBpdCBzaW5jZSBhcyB0aGUgbnVtYmVycyBncm93IHRoZSBwYWRkaW5nCisgICAgICAgICAgICAgd2lsbCBzdGlsbCBiZSBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgbnVtYmVyCisgICAgICAgLS0gQWRkZWQgbW9yZSB0byB0aGUgbWFudWFsCisKK0RlYyAyOXRoLCAyMDAyCit2MC4wNCAgLS0gRml4ZWQgYSBtZW1vcnkgbGVhayBpbiBtcF90b191bnNpZ25lZF9iaW4KKyAgICAgICAtLSBvcHRpbWl6ZWQgaW52bW9kIGNvZGUKKyAgICAgICAtLSBGaXhlZCBidWcgaW4gbXBfZGl2CisgICAgICAgLS0gdXNlIGV4Y2hhbmdlIGluc3RlYWQgb2YgY29weSBmb3IgcmVzdWx0cworICAgICAgIC0tIGFkZGVkIGEgYml0IG1vcmUgdG8gdGhlIG1hbnVhbAorCitEZWMgMjd0aCwgMjAwMgordjAuMDMgIC0tIFNwZWQgdXAgc19tcF9tdWxfaGlnaF9kaWdzIGJ5IG5vdCBjb21wdXRpbmcgdGhlIGNhcnJpZXMgb2YgdGhlIGxvd2VyIGRpZ2l0cworICAgICAgIC0tIEZpeGVkIGEgYnVnIHdoZXJlIG1wX3NldF9pbnQgd291bGRuJ3QgemVybyB0aGUgdmFsdWUgZmlyc3QgYW5kIHNldCB0aGUgdXNlZCBtZW1iZXIuCisgICAgICAgLS0gZml4ZWQgYSBidWcgaW4gc19tcF9tdWxfaGlnaF9kaWdzIHdoZXJlIHRoZSBsaW1pdCBwbGFjZWQgb24gdGhlIHJlc3VsdCBkaWdpdHMgd2FzIG5vdCBjYWxjdWxhdGVkIHByb3Blcmx5CisgICAgICAgLS0gZml4ZWQgYnVncyBpbiBhZGQvc3ViL211bC9zcXJfbW9kIGZ1bmN0aW9ucyB3aGVyZSBpZiB0aGUgbW9kdWx1cyBhbmQgZGVzdCB3ZXJlIHRoZSBzYW1lIGl0IHdvdWxkbid0IHdvcmsKKyAgICAgICAtLSBmaXhlZCBhIGJ1ZyBpbiBtcF9tb2QgYW5kIG1wX21vZF9kIGNvbmNlcm5pbmcgbmVnYXRpdmUgaW5wdXRzCisgICAgICAgLS0gbXBfbXVsX2QgZGlkbid0IHByZXNlcnZlIHNpZ24KKyAgICAgICAtLSBNYW55IG1hbnkgbWFueSBtYW55IGZpeGVzCisgICAgICAgLS0gV29ya3MgaW4gTGliVG9tQ3J5cHQgbm93IDotKQorICAgICAgIC0tIEFkZGVkIGl0ZXJhdGlvbnMgdG8gdGhlIHRpbWluZyBkZW1vcy4uLiBtb3JlIGFjY3VyYXRlLgorICAgICAgIC0tIFRvbSBuZWVkcyBhIGpvYi4KKworRGVjIDI2dGgsIDIwMDIKK3YwLjAyICAtLSBGaXhlZCBhIGZldyAic2xpcHMiIGluIHRoZSBtYW51YWwuICBUaGlzIGlzICJMaWJUb21NYXRoIiBhZnRlcmFsbCA6LSkKKyAgICAgICAtLSBBZGRlZCBtcF9jbXBfbWFnLCBtcF9uZWcsIG1wX2FicyBhbmQgbXBfcmFkaXhfc2l6ZSB0aGF0IHdlcmUgbWlzc2luZy4KKyAgICAgICAtLSBTcGVkIHVwIHRoZSBmYXN0IFtjb21iYV0gbXVsdGlwbGllcnMgbW9yZSBbeWFob28hXQorCitEZWMgMjV0aCwyMDAyCit2MC4wMSAgLS0gSW5pdGlhbCByZWxlYXNlLiAgR2ltbWUgYSBicmVhay4KKyAgICAgICAtLSBUb2RvIGxpc3QsCisgICAgICAgICAgIGFkZCBkZXRhaWxzIHRvIG1hbnVhbCBbZS5nLiBhbGdvcml0aG1zXQorICAgICAgICAgICBtb3JlIGNvbW1lbnRzIGluIGNvZGUKKyAgICAgICAgICAgZXhhbXBsZSBwcm9ncmFtcwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9kZW1vL2RlbW8uYyBiL2xpYnRvbW1hdGgvZGVtby9kZW1vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1ZWI0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvZGVtby9kZW1vLmMKQEAgLTAsMCArMSw3NDAgQEAKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpZmRlZiBJT1dOQU5BVEhMT04KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNkZWZpbmUgU0xFRVAgc2xlZXAoNCkKKyNlbHNlCisjZGVmaW5lIFNMRUVQCisjZW5kaWYKKworI2luY2x1ZGUgInRvbW1hdGguaCIKKwordm9pZCBuZHJhdyhtcF9pbnQgKiBhLCBjaGFyICpuYW1lKQoreworICAgY2hhciBidWZbMTYwMDBdOworCisgICBwcmludGYoIiVzOiAiLCBuYW1lKTsKKyAgIG1wX3RvcmFkaXgoYSwgYnVmLCAxMCk7CisgICBwcmludGYoIiVzXG4iLCBidWYpOworfQorCitzdGF0aWMgdm9pZCBkcmF3KG1wX2ludCAqIGEpCit7CisgICBuZHJhdyhhLCAiIik7Cit9CisKKwordW5zaWduZWQgbG9uZyBsZnNyID0gMHhBQUFBQUFBQVVMOworCitpbnQgbGJpdCh2b2lkKQoreworICAgaWYgKGxmc3IgJiAweDgwMDAwMDAwVUwpIHsKKyAgICAgIGxmc3IgPSAoKGxmc3IgPDwgMSkgXiAweDgwMDAwMDFCVUwpICYgMHhGRkZGRkZGRlVMOworICAgICAgcmV0dXJuIDE7CisgICB9IGVsc2UgeworICAgICAgbGZzciA8PD0gMTsKKyAgICAgIHJldHVybiAwOworICAgfQorfQorCitpbnQgbXlybmcodW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLCB2b2lkICpkYXQpCit7CisgICBpbnQgeDsKKworICAgZm9yICh4ID0gMDsgeCA8IGxlbjsgeCsrKQorICAgICAgZHN0W3hdID0gcmFuZCgpICYgMHhGRjsKKyAgIHJldHVybiBsZW47Cit9CisKKworCitjaGFyIGNtZFs0MDk2XSwgYnVmWzQwOTZdOworaW50IG1haW4odm9pZCkKK3sKKyAgIG1wX2ludCBhLCBiLCBjLCBkLCBlLCBmOworICAgdW5zaWduZWQgbG9uZyBleHB0X24sIGFkZF9uLCBzdWJfbiwgbXVsX24sIGRpdl9uLCBzcXJfbiwgbXVsMmRfbiwgZGl2MmRfbiwKKyAgICAgIGdjZF9uLCBsY21fbiwgaW52X24sIGRpdjJfbiwgbXVsMl9uLCBhZGRfZF9uLCBzdWJfZF9uLCB0OworICAgdW5zaWduZWQgcnI7CisgICBpbnQgaSwgbiwgZXJyLCBjbnQsIGl4LCBvbGRfa2FyYV9tLCBvbGRfa2FyYV9zOworICAgbXBfZGlnaXQgbXA7CisKKworICAgbXBfaW5pdCgmYSk7CisgICBtcF9pbml0KCZiKTsKKyAgIG1wX2luaXQoJmMpOworICAgbXBfaW5pdCgmZCk7CisgICBtcF9pbml0KCZlKTsKKyAgIG1wX2luaXQoJmYpOworCisgICBzcmFuZCh0aW1lKE5VTEwpKTsKKworI2lmIDAKKyAgIC8vIHRlc3QgbW9udGdvbWVyeSAKKyAgIHByaW50ZigiVGVzdGluZyBtb250Z29tZXJ5Li4uXG4iKTsKKyAgIGZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKSB7CisgICAgICBwcmludGYoIlRlc3RpbmcgZGlnaXQgc2l6ZTogJWRcbiIsIGkpOworICAgICAgZm9yIChuID0gMDsgbiA8IDEwMDA7IG4rKykgeworICAgICAgICAgbXBfcmFuZCgmYSwgaSk7CisgICAgICAgICBhLmRwWzBdIHw9IDE7CisKKyAgICAgICAgIC8vIGxldCdzIHNlZSBpZiBSIGlzIHJpZ2h0CisgICAgICAgICBtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbigmYiwgJmEpOworICAgICAgICAgbXBfbW9udGdvbWVyeV9zZXR1cCgmYSwgJm1wKTsKKworICAgICAgICAgLy8gbm93IHRlc3QgYSByYW5kb20gcmVkdWN0aW9uIAorICAgICAgICAgZm9yIChpeCA9IDA7IGl4IDwgMTAwOyBpeCsrKSB7CisgICAgICAgICAgICAgbXBfcmFuZCgmYywgMSArIGFicyhyYW5kKCkpICUgKDIqaSkpOworICAgICAgICAgICAgIG1wX2NvcHkoJmMsICZkKTsKKyAgICAgICAgICAgICBtcF9jb3B5KCZjLCAmZSk7CisKKyAgICAgICAgICAgICBtcF9tb2QoJmQsICZhLCAmZCk7CisgICAgICAgICAgICAgbXBfbW9udGdvbWVyeV9yZWR1Y2UoJmMsICZhLCBtcCk7CisgICAgICAgICAgICAgbXBfbXVsbW9kKCZjLCAmYiwgJmEsICZjKTsKKworICAgICAgICAgICAgIGlmIChtcF9jbXAoJmMsICZkKSAhPSBNUF9FUSkgeyAKK3ByaW50ZigiZCA9IGUgbW9kIGEsIGMgPSBlIE1PRCBhXG4iKTsKK21wX3RvZGVjaW1hbCgmYSwgYnVmKTsgcHJpbnRmKCJhID0gJXNcbiIsIGJ1Zik7CittcF90b2RlY2ltYWwoJmUsIGJ1Zik7IHByaW50ZigiZSA9ICVzXG4iLCBidWYpOworbXBfdG9kZWNpbWFsKCZkLCBidWYpOyBwcmludGYoImQgPSAlc1xuIiwgYnVmKTsKK21wX3RvZGVjaW1hbCgmYywgYnVmKTsgcHJpbnRmKCJjID0gJXNcbiIsIGJ1Zik7CitwcmludGYoImNvbXBhcmUgbm8gY29tcGFyZSFcbiIpOyBleGl0KEVYSVRfRkFJTFVSRSk7IH0KKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKyAgIHByaW50ZigiZG9uZVxuIik7CisKKyAgIC8vIHRlc3QgbXBfZ2V0X2ludAorICAgcHJpbnRmKCJUZXN0aW5nOiBtcF9nZXRfaW50XG4iKTsKKyAgIGZvciAoaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICAgIHQgPSAoKHVuc2lnbmVkIGxvbmcpIHJhbmQoKSAqIHJhbmQoKSArIDEpICYgMHhGRkZGRkZGRjsKKyAgICAgIG1wX3NldF9pbnQoJmEsIHQpOworICAgICAgaWYgKHQgIT0gbXBfZ2V0X2ludCgmYSkpIHsKKwkgcHJpbnRmKCJtcF9nZXRfaW50KCkgYmFkIHJlc3VsdCFcbiIpOworCSByZXR1cm4gMTsKKyAgICAgIH0KKyAgIH0KKyAgIG1wX3NldF9pbnQoJmEsIDApOworICAgaWYgKG1wX2dldF9pbnQoJmEpICE9IDApIHsKKyAgICAgIHByaW50ZigibXBfZ2V0X2ludCgpIGJhZCByZXN1bHQhXG4iKTsKKyAgICAgIHJldHVybiAxOworICAgfQorICAgbXBfc2V0X2ludCgmYSwgMHhmZmZmZmZmZik7CisgICBpZiAobXBfZ2V0X2ludCgmYSkgIT0gMHhmZmZmZmZmZikgeworICAgICAgcHJpbnRmKCJtcF9nZXRfaW50KCkgYmFkIHJlc3VsdCFcbiIpOworICAgICAgcmV0dXJuIDE7CisgICB9CisgICAvLyB0ZXN0IG1wX3NxcnQKKyAgIHByaW50ZigiVGVzdGluZzogbXBfc3FydFxuIik7CisgICBmb3IgKGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgICBwcmludGYoIiU2ZFxyIiwgaSk7CisgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgIG4gPSAocmFuZCgpICYgMTUpICsgMTsKKyAgICAgIG1wX3JhbmQoJmEsIG4pOworICAgICAgaWYgKG1wX3NxcnQoJmEsICZiKSAhPSBNUF9PS0FZKSB7CisJIHByaW50ZigibXBfc3FydCgpIGVycm9yIVxuIik7CisJIHJldHVybiAxOworICAgICAgfQorICAgICAgbXBfbl9yb290KCZhLCAyLCAmYSk7CisgICAgICBpZiAobXBfY21wX21hZygmYiwgJmEpICE9IE1QX0VRKSB7CisJIHByaW50ZigibXBfc3FydCgpIGJhZCByZXN1bHQhXG4iKTsKKwkgcmV0dXJuIDE7CisgICAgICB9CisgICB9CisKKyAgIHByaW50ZigiXG5UZXN0aW5nOiBtcF9pc19zcXVhcmVcbiIpOworICAgZm9yIChpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgICAgcHJpbnRmKCIlNmRcciIsIGkpOworICAgICAgZmZsdXNoKHN0ZG91dCk7CisKKyAgICAgIC8qIHRlc3QgbXBfaXNfc3F1YXJlIGZhbHNlIG5lZ2F0aXZlcyAqLworICAgICAgbiA9IChyYW5kKCkgJiA3KSArIDE7CisgICAgICBtcF9yYW5kKCZhLCBuKTsKKyAgICAgIG1wX3NxcigmYSwgJmEpOworICAgICAgaWYgKG1wX2lzX3NxdWFyZSgmYSwgJm4pICE9IE1QX09LQVkpIHsKKwkgcHJpbnRmKCJmbjptcF9pc19zcXVhcmUoKSBlcnJvciFcbiIpOworCSByZXR1cm4gMTsKKyAgICAgIH0KKyAgICAgIGlmIChuID09IDApIHsKKwkgcHJpbnRmKCJmbjptcF9pc19zcXVhcmUoKSBiYWQgcmVzdWx0IVxuIik7CisJIHJldHVybiAxOworICAgICAgfQorCisgICAgICAvKiB0ZXN0IGZvciBmYWxzZSBwb3NpdGl2ZXMgKi8KKyAgICAgIG1wX2FkZF9kKCZhLCAxLCAmYSk7CisgICAgICBpZiAobXBfaXNfc3F1YXJlKCZhLCAmbikgIT0gTVBfT0tBWSkgeworCSBwcmludGYoImZwOm1wX2lzX3NxdWFyZSgpIGVycm9yIVxuIik7CisJIHJldHVybiAxOworICAgICAgfQorICAgICAgaWYgKG4gPT0gMSkgeworCSBwcmludGYoImZwOm1wX2lzX3NxdWFyZSgpIGJhZCByZXN1bHQhXG4iKTsKKwkgcmV0dXJuIDE7CisgICAgICB9CisKKyAgIH0KKyAgIHByaW50ZigiXG5cbiIpOworCisgICAvKiB0ZXN0IGZvciBzaXplICovCisgICBmb3IgKGl4ID0gMTA7IGl4IDwgMTI4OyBpeCsrKSB7CisgICAgICBwcmludGYoIlRlc3RpbmcgKG5vdCBzYWZlLXByaW1lKTogJTlkIGJpdHMgICAgXHIiLCBpeCk7CisgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgIGVyciA9CisJIG1wX3ByaW1lX3JhbmRvbV9leCgmYSwgOCwgaXgsCisJCQkgICAgKHJhbmQoKSAmIDEpID8gTFRNX1BSSU1FXzJNU0JfT0ZGIDoKKwkJCSAgICBMVE1fUFJJTUVfMk1TQl9PTiwgbXlybmcsIE5VTEwpOworICAgICAgaWYgKGVyciAhPSBNUF9PS0FZKSB7CisJIHByaW50ZigiZmFpbGVkIHdpdGggZXJyIGNvZGUgJWRcbiIsIGVycik7CisJIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgICB9CisgICAgICBpZiAobXBfY291bnRfYml0cygmYSkgIT0gaXgpIHsKKwkgcHJpbnRmKCJQcmltZSBpcyAlZCBub3QgJWQgYml0cyEhIVxuIiwgbXBfY291bnRfYml0cygmYSksIGl4KTsKKwkgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICAgIH0KKyAgIH0KKworICAgZm9yIChpeCA9IDE2OyBpeCA8IDEyODsgaXgrKykgeworICAgICAgcHJpbnRmKCJUZXN0aW5nICggICBzYWZlLXByaW1lKTogJTlkIGJpdHMgICAgXHIiLCBpeCk7CisgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICAgIGVyciA9CisJIG1wX3ByaW1lX3JhbmRvbV9leCgmYSwgOCwgaXgsCisJCQkgICAgKChyYW5kKCkgJiAxKSA/IExUTV9QUklNRV8yTVNCX09GRiA6CisJCQkgICAgIExUTV9QUklNRV8yTVNCX09OKSB8IExUTV9QUklNRV9TQUZFLCBteXJuZywKKwkJCSAgICBOVUxMKTsKKyAgICAgIGlmIChlcnIgIT0gTVBfT0tBWSkgeworCSBwcmludGYoImZhaWxlZCB3aXRoIGVyciBjb2RlICVkXG4iLCBlcnIpOworCSByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgICAgfQorICAgICAgaWYgKG1wX2NvdW50X2JpdHMoJmEpICE9IGl4KSB7CisJIHByaW50ZigiUHJpbWUgaXMgJWQgbm90ICVkIGJpdHMhISFcbiIsIG1wX2NvdW50X2JpdHMoJmEpLCBpeCk7CisJIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgICB9CisgICAgICAvKiBsZXQncyBzZWUgaWYgaXQncyByZWFsbHkgYSBzYWZlIHByaW1lICovCisgICAgICBtcF9zdWJfZCgmYSwgMSwgJmEpOworICAgICAgbXBfZGl2XzIoJmEsICZhKTsKKyAgICAgIG1wX3ByaW1lX2lzX3ByaW1lKCZhLCA4LCAmY250KTsKKyAgICAgIGlmIChjbnQgIT0gTVBfWUVTKSB7CisJIHByaW50Zigic3ViIGlzIG5vdCBwcmltZSFcbiIpOworCSByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgICAgfQorICAgfQorCisgICBwcmludGYoIlxuXG4iKTsKKworICAgbXBfcmVhZF9yYWRpeCgmYSwgIjEyMzQ1NiIsIDEwKTsKKyAgIG1wX3RvcmFkaXhfbigmYSwgYnVmLCAxMCwgMyk7CisgICBwcmludGYoImEgPT0gJXNcbiIsIGJ1Zik7CisgICBtcF90b3JhZGl4X24oJmEsIGJ1ZiwgMTAsIDQpOworICAgcHJpbnRmKCJhID09ICVzXG4iLCBidWYpOworICAgbXBfdG9yYWRpeF9uKCZhLCBidWYsIDEwLCAzMCk7CisgICBwcmludGYoImEgPT0gJXNcbiIsIGJ1Zik7CisKKworI2lmIDAKKyAgIGZvciAoOzspIHsKKyAgICAgIGZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKTsKKyAgICAgIG1wX3JlYWRfcmFkaXgoJmEsIGJ1ZiwgMTApOworICAgICAgbXBfcHJpbWVfbmV4dF9wcmltZSgmYSwgNSwgMSk7CisgICAgICBtcF90b3JhZGl4KCZhLCBidWYsIDEwKTsKKyAgICAgIHByaW50ZigiJXMsICVsdVxuIiwgYnVmLCBhLmRwWzBdICYgMyk7CisgICB9CisjZW5kaWYKKworICAgLyogdGVzdCBtcF9jbnRfbHNiICovCisgICBwcmludGYoInRlc3RpbmcgbXBfY250X2xzYi4uLlxuIik7CisgICBtcF9zZXQoJmEsIDEpOworICAgZm9yIChpeCA9IDA7IGl4IDwgMTAyNDsgaXgrKykgeworICAgICAgaWYgKG1wX2NudF9sc2IoJmEpICE9IGl4KSB7CisJIHByaW50ZigiRmFpbGVkIGF0ICVkLCAlZFxuIiwgaXgsIG1wX2NudF9sc2IoJmEpKTsKKwkgcmV0dXJuIDA7CisgICAgICB9CisgICAgICBtcF9tdWxfMigmYSwgJmEpOworICAgfQorCisvKiB0ZXN0IG1wX3JlZHVjZV8yayAqLworICAgcHJpbnRmKCJUZXN0aW5nIG1wX3JlZHVjZV8yay4uLlxuIik7CisgICBmb3IgKGNudCA9IDM7IGNudCA8PSAxMjg7ICsrY250KSB7CisgICAgICBtcF9kaWdpdCB0bXA7CisKKyAgICAgIG1wXzJleHB0KCZhLCBjbnQpOworICAgICAgbXBfc3ViX2QoJmEsIDIsICZhKTsJLyogYSA9IDIqKmNudCAtIDIgKi8KKworCisgICAgICBwcmludGYoIlxuVGVzdGluZyAlNGQgYml0cyIsIGNudCk7CisgICAgICBwcmludGYoIiglZCkiLCBtcF9yZWR1Y2VfaXNfMmsoJmEpKTsKKyAgICAgIG1wX3JlZHVjZV8ya19zZXR1cCgmYSwgJnRtcCk7CisgICAgICBwcmludGYoIiglZCkiLCB0bXApOworICAgICAgZm9yIChpeCA9IDA7IGl4IDwgMTAwMDsgaXgrKykgeworCSBpZiAoIShpeCAmIDEyNykpIHsKKwkgICAgcHJpbnRmKCIuIik7CisJICAgIGZmbHVzaChzdGRvdXQpOworCSB9CisJIG1wX3JhbmQoJmIsIChjbnQgLyBESUdJVF9CSVQgKyAxKSAqIDIpOworCSBtcF9jb3B5KCZjLCAmYik7CisJIG1wX21vZCgmYywgJmEsICZjKTsKKwkgbXBfcmVkdWNlXzJrKCZiLCAmYSwgMik7CisJIGlmIChtcF9jbXAoJmMsICZiKSkgeworCSAgICBwcmludGYoIkZBSUxFRFxuIik7CisJICAgIGV4aXQoMCk7CisJIH0KKyAgICAgIH0KKyAgIH0KKworLyogdGVzdCBtcF9kaXZfMyAgKi8KKyAgIHByaW50ZigiVGVzdGluZyBtcF9kaXZfMy4uLlxuIik7CisgICBtcF9zZXQoJmQsIDMpOworICAgZm9yIChjbnQgPSAwOyBjbnQgPCAxMDAwMDspIHsKKyAgICAgIG1wX2RpZ2l0IHIxLCByMjsKKworICAgICAgaWYgKCEoKytjbnQgJiAxMjcpKQorCSBwcmludGYoIiU5ZFxyIiwgY250KTsKKyAgICAgIG1wX3JhbmQoJmEsIGFicyhyYW5kKCkpICUgMTI4ICsgMSk7CisgICAgICBtcF9kaXYoJmEsICZkLCAmYiwgJmUpOworICAgICAgbXBfZGl2XzMoJmEsICZjLCAmcjIpOworCisgICAgICBpZiAobXBfY21wKCZiLCAmYykgfHwgbXBfY21wX2QoJmUsIHIyKSkgeworCSBwcmludGYoIlxuXG5tcF9kaXZfMyA9PiBGYWlsdXJlXG4iKTsKKyAgICAgIH0KKyAgIH0KKyAgIHByaW50ZigiXG5cblBhc3NlZCBkaXZfMyB0ZXN0aW5nXG4iKTsKKworLyogdGVzdCB0aGUgRFIgcmVkdWN0aW9uICovCisgICBwcmludGYoInRlc3RpbmcgbXBfZHJfcmVkdWNlLi4uXG4iKTsKKyAgIGZvciAoY250ID0gMjsgY250IDwgMzI7IGNudCsrKSB7CisgICAgICBwcmludGYoIiVkIGRpZ2l0IG1vZHVsdXNcbiIsIGNudCk7CisgICAgICBtcF9ncm93KCZhLCBjbnQpOworICAgICAgbXBfemVybygmYSk7CisgICAgICBmb3IgKGl4ID0gMTsgaXggPCBjbnQ7IGl4KyspIHsKKwkgYS5kcFtpeF0gPSBNUF9NQVNLOworICAgICAgfQorICAgICAgYS51c2VkID0gY250OworICAgICAgYS5kcFswXSA9IDM7CisKKyAgICAgIG1wX3JhbmQoJmIsIGNudCAtIDEpOworICAgICAgbXBfY29weSgmYiwgJmMpOworCisgICAgICByciA9IDA7CisgICAgICBkbyB7CisJIGlmICghKHJyICYgMTI3KSkgeworCSAgICBwcmludGYoIiU5bHVcciIsIHJyKTsKKwkgICAgZmZsdXNoKHN0ZG91dCk7CisJIH0KKwkgbXBfc3FyKCZiLCAmYik7CisJIG1wX2FkZF9kKCZiLCAxLCAmYik7CisJIG1wX2NvcHkoJmIsICZjKTsKKworCSBtcF9tb2QoJmIsICZhLCAmYik7CisJIG1wX2RyX3JlZHVjZSgmYywgJmEsICgoKG1wX2RpZ2l0KSAxKSA8PCBESUdJVF9CSVQpIC0gYS5kcFswXSk7CisKKwkgaWYgKG1wX2NtcCgmYiwgJmMpICE9IE1QX0VRKSB7CisJICAgIHByaW50ZigiRmFpbGVkIG9uIHRyaWFsICVsdVxuIiwgcnIpOworCSAgICBleGl0KC0xKTsKKworCSB9CisgICAgICB9IHdoaWxlICgrK3JyIDwgNTAwKTsKKyAgICAgIHByaW50ZigiUGFzc2VkIERSIHRlc3QgZm9yICVkIGRpZ2l0c1xuIiwgY250KTsKKyAgIH0KKworI2VuZGlmCisKKy8qIHRlc3QgdGhlIG1wX3JlZHVjZV8ya19sIGNvZGUgKi8KKyNpZiAwCisjaWYgMAorLyogZmlyc3QgbG9hZCBQIHdpdGggMl4xMDI0IC0gMHgyQTQzNCBCOUZERUM5NSBEOEY5RDU1MCBGRkZGRkZGRiBGRkZGRkZGRiAqLworICAgbXBfMmV4cHQoJmEsIDEwMjQpOworICAgbXBfcmVhZF9yYWRpeCgmYiwgIjJBNDM0QjlGREVDOTVEOEY5RDU1MEZGRkZGRkZGRkZGRkZGRkYiLCAxNik7CisgICBtcF9zdWIoJmEsICZiLCAmYSk7CisjZWxpZiAxCisvKiAgcCA9IDJeMjA0OCAtIDB4MSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCA0OTQ1RERCRiA4RUEyQTkxRCA1Nzc2Mzk5QiBCODNFMTg4RiAgKi8KKyAgIG1wXzJleHB0KCZhLCAyMDQ4KTsKKyAgIG1wX3JlYWRfcmFkaXgoJmIsCisJCSAiMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDk0NUREQkY4RUEyQTkxRDU3NzYzOTlCQjgzRTE4OEYiLAorCQkgMTYpOworICAgbXBfc3ViKCZhLCAmYiwgJmEpOworI2VuZGlmCisKKyAgIG1wX3RvZGVjaW1hbCgmYSwgYnVmKTsKKyAgIHByaW50ZigicD09JXNcbiIsIGJ1Zik7CisvKiBub3cgbXBfcmVkdWNlX2lzXzJrX2woKSBzaG91bGQgcmV0dXJuICovCisgICBpZiAobXBfcmVkdWNlX2lzXzJrX2woJmEpICE9IDEpIHsKKyAgICAgIHByaW50ZigibXBfcmVkdWNlX2lzXzJrX2woKSByZXR1cm4gMCwgc2hvdWxkIGJlIDFcbiIpOworICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgIH0KKyAgIG1wX3JlZHVjZV8ya19zZXR1cF9sKCZhLCAmZCk7CisgICAvKiBub3cgZG8gYSBtaWxsaW9uIHNxdWFyZSsxIHRvIHNlZSBpZiBpdCB2YXJpZXMgKi8KKyAgIG1wX3JhbmQoJmIsIDY0KTsKKyAgIG1wX21vZCgmYiwgJmEsICZiKTsKKyAgIG1wX2NvcHkoJmIsICZjKTsKKyAgIHByaW50ZigidGVzdGluZyBtcF9yZWR1Y2VfMmtfbC4uLiIpOworICAgZmZsdXNoKHN0ZG91dCk7CisgICBmb3IgKGNudCA9IDA7IGNudCA8ICgxVUwgPDwgMjApOyBjbnQrKykgeworICAgICAgbXBfc3FyKCZiLCAmYik7CisgICAgICBtcF9hZGRfZCgmYiwgMSwgJmIpOworICAgICAgbXBfcmVkdWNlXzJrX2woJmIsICZhLCAmZCk7CisgICAgICBtcF9zcXIoJmMsICZjKTsKKyAgICAgIG1wX2FkZF9kKCZjLCAxLCAmYyk7CisgICAgICBtcF9tb2QoJmMsICZhLCAmYyk7CisgICAgICBpZiAobXBfY21wKCZiLCAmYykgIT0gTVBfRVEpIHsKKwkgcHJpbnRmKCJtcF9yZWR1Y2VfMmtfbCgpIGZhaWxlZCBhdCBzdGVwICVsdVxuIiwgY250KTsKKwkgbXBfdG9oZXgoJmIsIGJ1Zik7CisJIHByaW50ZigiYiA9PSAlc1xuIiwgYnVmKTsKKwkgbXBfdG9oZXgoJmMsIGJ1Zik7CisJIHByaW50ZigiYyA9PSAlc1xuIiwgYnVmKTsKKwkgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICAgIH0KKyAgIH0KKyAgIHByaW50ZigiLi4uUGFzc2VkXG4iKTsKKyNlbmRpZgorCisgICBkaXYyX24gPSBtdWwyX24gPSBpbnZfbiA9IGV4cHRfbiA9IGxjbV9uID0gZ2NkX24gPSBhZGRfbiA9CisgICAgICBzdWJfbiA9IG11bF9uID0gZGl2X24gPSBzcXJfbiA9IG11bDJkX24gPSBkaXYyZF9uID0gY250ID0gYWRkX2RfbiA9CisgICAgICBzdWJfZF9uID0gMDsKKworICAgLyogZm9yY2UgS0FSQSBhbmQgVE9PTSB0byBlbmFibGUgZGVzcGl0ZSBjdXRvZmZzICovCisgICBLQVJBVFNVQkFfU1FSX0NVVE9GRiA9IEtBUkFUU1VCQV9NVUxfQ1VUT0ZGID0gODsKKyAgIFRPT01fU1FSX0NVVE9GRiA9IFRPT01fTVVMX0NVVE9GRiA9IDE2OworCisgICBmb3IgKDs7KSB7CisgICAgICAvKiByYW5kb21seSBjbGVhciBhbmQgcmUtaW5pdCBvbmUgdmFyaWFibGUsIHRoaXMgaGFzIHRoZSBhZmZlY3Qgb2YgdHJpbWluZyB0aGUgYWxsb2Mgc3BhY2UgKi8KKyAgICAgIHN3aXRjaCAoYWJzKHJhbmQoKSkgJSA3KSB7CisgICAgICBjYXNlIDA6CisJIG1wX2NsZWFyKCZhKTsKKwkgbXBfaW5pdCgmYSk7CisJIGJyZWFrOworICAgICAgY2FzZSAxOgorCSBtcF9jbGVhcigmYik7CisJIG1wX2luaXQoJmIpOworCSBicmVhazsKKyAgICAgIGNhc2UgMjoKKwkgbXBfY2xlYXIoJmMpOworCSBtcF9pbml0KCZjKTsKKwkgYnJlYWs7CisgICAgICBjYXNlIDM6CisJIG1wX2NsZWFyKCZkKTsKKwkgbXBfaW5pdCgmZCk7CisJIGJyZWFrOworICAgICAgY2FzZSA0OgorCSBtcF9jbGVhcigmZSk7CisJIG1wX2luaXQoJmUpOworCSBicmVhazsKKyAgICAgIGNhc2UgNToKKwkgbXBfY2xlYXIoJmYpOworCSBtcF9pbml0KCZmKTsKKwkgYnJlYWs7CisgICAgICBjYXNlIDY6CisJIGJyZWFrOwkJCS8qIGRvbid0IGNsZWFyIGFueSAqLworICAgICAgfQorCisKKyAgICAgIHByaW50ZgorCSAoIiU0bHUvJTRsdS8lNGx1LyU0bHUvJTRsdS8lNGx1LyU0bHUvJTRsdS8lNGx1LyU0bHUvJTRsdS8lNGx1LyU0bHUvJTRsdS8lNGx1ICIsCisJICBhZGRfbiwgc3ViX24sIG11bF9uLCBkaXZfbiwgc3FyX24sIG11bDJkX24sIGRpdjJkX24sIGdjZF9uLCBsY21fbiwKKwkgIGV4cHRfbiwgaW52X24sIGRpdjJfbiwgbXVsMl9uLCBhZGRfZF9uLCBzdWJfZF9uKTsKKyAgICAgIGZnZXRzKGNtZCwgNDA5NSwgc3RkaW4pOworICAgICAgY21kW3N0cmxlbihjbWQpIC0gMV0gPSAwOworICAgICAgcHJpbnRmKCIlcyAgXVxyIiwgY21kKTsKKyAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgaWYgKCFzdHJjbXAoY21kLCAibXVsMmQiKSkgeworCSArK211bDJkX247CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZhLCBidWYsIDY0KTsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIHNzY2FuZihidWYsICIlZCIsICZycik7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZiLCBidWYsIDY0KTsKKworCSBtcF9tdWxfMmQoJmEsIHJyLCAmYSk7CisJIGEuc2lnbiA9IGIuc2lnbjsKKwkgaWYgKG1wX2NtcCgmYSwgJmIpICE9IE1QX0VRKSB7CisJICAgIHByaW50ZigibXVsMmQgZmFpbGVkLCByciA9PSAlZFxuIiwgcnIpOworCSAgICBkcmF3KCZhKTsKKwkgICAgZHJhdygmYik7CisJICAgIHJldHVybiAwOworCSB9CisgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiZGl2MmQiKSkgeworCSArK2RpdjJkX247CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZhLCBidWYsIDY0KTsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIHNzY2FuZihidWYsICIlZCIsICZycik7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZiLCBidWYsIDY0KTsKKworCSBtcF9kaXZfMmQoJmEsIHJyLCAmYSwgJmUpOworCSBhLnNpZ24gPSBiLnNpZ247CisJIGlmIChhLnVzZWQgPT0gYi51c2VkICYmIGEudXNlZCA9PSAwKSB7CisJICAgIGEuc2lnbiA9IGIuc2lnbiA9IE1QX1pQT1M7CisJIH0KKwkgaWYgKG1wX2NtcCgmYSwgJmIpICE9IE1QX0VRKSB7CisJICAgIHByaW50ZigiZGl2MmQgZmFpbGVkLCByciA9PSAlZFxuIiwgcnIpOworCSAgICBkcmF3KCZhKTsKKwkgICAgZHJhdygmYik7CisJICAgIHJldHVybiAwOworCSB9CisgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiYWRkIikpIHsKKwkgKythZGRfbjsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIG1wX3JlYWRfcmFkaXgoJmEsIGJ1ZiwgNjQpOworCSBmZ2V0cyhidWYsIDQwOTUsIHN0ZGluKTsKKwkgbXBfcmVhZF9yYWRpeCgmYiwgYnVmLCA2NCk7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZjLCBidWYsIDY0KTsKKwkgbXBfY29weSgmYSwgJmQpOworCSBtcF9hZGQoJmQsICZiLCAmZCk7CisJIGlmIChtcF9jbXAoJmMsICZkKSAhPSBNUF9FUSkgeworCSAgICBwcmludGYoImFkZCAlbHUgZmFpbHVyZSFcbiIsIGFkZF9uKTsKKwkgICAgZHJhdygmYSk7CisJICAgIGRyYXcoJmIpOworCSAgICBkcmF3KCZjKTsKKwkgICAgZHJhdygmZCk7CisJICAgIHJldHVybiAwOworCSB9CisKKwkgLyogdGVzdCB0aGUgc2lnbi91bnNpZ25lZCBzdG9yYWdlIGZ1bmN0aW9ucyAqLworCisJIHJyID0gbXBfc2lnbmVkX2Jpbl9zaXplKCZjKTsKKwkgbXBfdG9fc2lnbmVkX2JpbigmYywgKHVuc2lnbmVkIGNoYXIgKikgY21kKTsKKwkgbWVtc2V0KGNtZCArIHJyLCByYW5kKCkgJiAyNTUsIHNpemVvZihjbWQpIC0gcnIpOworCSBtcF9yZWFkX3NpZ25lZF9iaW4oJmQsICh1bnNpZ25lZCBjaGFyICopIGNtZCwgcnIpOworCSBpZiAobXBfY21wKCZjLCAmZCkgIT0gTVBfRVEpIHsKKwkgICAgcHJpbnRmKCJtcF9zaWduZWRfYmluIGZhaWx1cmUhXG4iKTsKKwkgICAgZHJhdygmYyk7CisJICAgIGRyYXcoJmQpOworCSAgICByZXR1cm4gMDsKKwkgfQorCisKKwkgcnIgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZSgmYyk7CisJIG1wX3RvX3Vuc2lnbmVkX2JpbigmYywgKHVuc2lnbmVkIGNoYXIgKikgY21kKTsKKwkgbWVtc2V0KGNtZCArIHJyLCByYW5kKCkgJiAyNTUsIHNpemVvZihjbWQpIC0gcnIpOworCSBtcF9yZWFkX3Vuc2lnbmVkX2JpbigmZCwgKHVuc2lnbmVkIGNoYXIgKikgY21kLCBycik7CisJIGlmIChtcF9jbXBfbWFnKCZjLCAmZCkgIT0gTVBfRVEpIHsKKwkgICAgcHJpbnRmKCJtcF91bnNpZ25lZF9iaW4gZmFpbHVyZSFcbiIpOworCSAgICBkcmF3KCZjKTsKKwkgICAgZHJhdygmZCk7CisJICAgIHJldHVybiAwOworCSB9CisKKyAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJzdWIiKSkgeworCSArK3N1Yl9uOworCSBmZ2V0cyhidWYsIDQwOTUsIHN0ZGluKTsKKwkgbXBfcmVhZF9yYWRpeCgmYSwgYnVmLCA2NCk7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZiLCBidWYsIDY0KTsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIG1wX3JlYWRfcmFkaXgoJmMsIGJ1ZiwgNjQpOworCSBtcF9jb3B5KCZhLCAmZCk7CisJIG1wX3N1YigmZCwgJmIsICZkKTsKKwkgaWYgKG1wX2NtcCgmYywgJmQpICE9IE1QX0VRKSB7CisJICAgIHByaW50Zigic3ViICVsdSBmYWlsdXJlIVxuIiwgc3ViX24pOworCSAgICBkcmF3KCZhKTsKKwkgICAgZHJhdygmYik7CisJICAgIGRyYXcoJmMpOworCSAgICBkcmF3KCZkKTsKKwkgICAgcmV0dXJuIDA7CisJIH0KKyAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJtdWwiKSkgeworCSArK211bF9uOworCSBmZ2V0cyhidWYsIDQwOTUsIHN0ZGluKTsKKwkgbXBfcmVhZF9yYWRpeCgmYSwgYnVmLCA2NCk7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZiLCBidWYsIDY0KTsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIG1wX3JlYWRfcmFkaXgoJmMsIGJ1ZiwgNjQpOworCSBtcF9jb3B5KCZhLCAmZCk7CisJIG1wX211bCgmZCwgJmIsICZkKTsKKwkgaWYgKG1wX2NtcCgmYywgJmQpICE9IE1QX0VRKSB7CisJICAgIHByaW50ZigibXVsICVsdSBmYWlsdXJlIVxuIiwgbXVsX24pOworCSAgICBkcmF3KCZhKTsKKwkgICAgZHJhdygmYik7CisJICAgIGRyYXcoJmMpOworCSAgICBkcmF3KCZkKTsKKwkgICAgcmV0dXJuIDA7CisJIH0KKyAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJkaXYiKSkgeworCSArK2Rpdl9uOworCSBmZ2V0cyhidWYsIDQwOTUsIHN0ZGluKTsKKwkgbXBfcmVhZF9yYWRpeCgmYSwgYnVmLCA2NCk7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZiLCBidWYsIDY0KTsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIG1wX3JlYWRfcmFkaXgoJmMsIGJ1ZiwgNjQpOworCSBmZ2V0cyhidWYsIDQwOTUsIHN0ZGluKTsKKwkgbXBfcmVhZF9yYWRpeCgmZCwgYnVmLCA2NCk7CisKKwkgbXBfZGl2KCZhLCAmYiwgJmUsICZmKTsKKwkgaWYgKG1wX2NtcCgmYywgJmUpICE9IE1QX0VRIHx8IG1wX2NtcCgmZCwgJmYpICE9IE1QX0VRKSB7CisJICAgIHByaW50ZigiZGl2ICVsdSAlZCwgJWQsIGZhaWx1cmUhXG4iLCBkaXZfbiwgbXBfY21wKCZjLCAmZSksCisJCSAgIG1wX2NtcCgmZCwgJmYpKTsKKwkgICAgZHJhdygmYSk7CisJICAgIGRyYXcoJmIpOworCSAgICBkcmF3KCZjKTsKKwkgICAgZHJhdygmZCk7CisJICAgIGRyYXcoJmUpOworCSAgICBkcmF3KCZmKTsKKwkgICAgcmV0dXJuIDA7CisJIH0KKworICAgICAgfSBlbHNlIGlmICghc3RyY21wKGNtZCwgInNxciIpKSB7CisJICsrc3FyX247CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZhLCBidWYsIDY0KTsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIG1wX3JlYWRfcmFkaXgoJmIsIGJ1ZiwgNjQpOworCSBtcF9jb3B5KCZhLCAmYyk7CisJIG1wX3NxcigmYywgJmMpOworCSBpZiAobXBfY21wKCZiLCAmYykgIT0gTVBfRVEpIHsKKwkgICAgcHJpbnRmKCJzcXIgJWx1IGZhaWx1cmUhXG4iLCBzcXJfbik7CisJICAgIGRyYXcoJmEpOworCSAgICBkcmF3KCZiKTsKKwkgICAgZHJhdygmYyk7CisJICAgIHJldHVybiAwOworCSB9CisgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiZ2NkIikpIHsKKwkgKytnY2RfbjsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIG1wX3JlYWRfcmFkaXgoJmEsIGJ1ZiwgNjQpOworCSBmZ2V0cyhidWYsIDQwOTUsIHN0ZGluKTsKKwkgbXBfcmVhZF9yYWRpeCgmYiwgYnVmLCA2NCk7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZjLCBidWYsIDY0KTsKKwkgbXBfY29weSgmYSwgJmQpOworCSBtcF9nY2QoJmQsICZiLCAmZCk7CisJIGQuc2lnbiA9IGMuc2lnbjsKKwkgaWYgKG1wX2NtcCgmYywgJmQpICE9IE1QX0VRKSB7CisJICAgIHByaW50ZigiZ2NkICVsdSBmYWlsdXJlIVxuIiwgZ2NkX24pOworCSAgICBkcmF3KCZhKTsKKwkgICAgZHJhdygmYik7CisJICAgIGRyYXcoJmMpOworCSAgICBkcmF3KCZkKTsKKwkgICAgcmV0dXJuIDA7CisJIH0KKyAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChjbWQsICJsY20iKSkgeworCSArK2xjbV9uOworCSBmZ2V0cyhidWYsIDQwOTUsIHN0ZGluKTsKKwkgbXBfcmVhZF9yYWRpeCgmYSwgYnVmLCA2NCk7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZiLCBidWYsIDY0KTsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIG1wX3JlYWRfcmFkaXgoJmMsIGJ1ZiwgNjQpOworCSBtcF9jb3B5KCZhLCAmZCk7CisJIG1wX2xjbSgmZCwgJmIsICZkKTsKKwkgZC5zaWduID0gYy5zaWduOworCSBpZiAobXBfY21wKCZjLCAmZCkgIT0gTVBfRVEpIHsKKwkgICAgcHJpbnRmKCJsY20gJWx1IGZhaWx1cmUhXG4iLCBsY21fbik7CisJICAgIGRyYXcoJmEpOworCSAgICBkcmF3KCZiKTsKKwkgICAgZHJhdygmYyk7CisJICAgIGRyYXcoJmQpOworCSAgICByZXR1cm4gMDsKKwkgfQorICAgICAgfSBlbHNlIGlmICghc3RyY21wKGNtZCwgImV4cHQiKSkgeworCSArK2V4cHRfbjsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIG1wX3JlYWRfcmFkaXgoJmEsIGJ1ZiwgNjQpOworCSBmZ2V0cyhidWYsIDQwOTUsIHN0ZGluKTsKKwkgbXBfcmVhZF9yYWRpeCgmYiwgYnVmLCA2NCk7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZjLCBidWYsIDY0KTsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIG1wX3JlYWRfcmFkaXgoJmQsIGJ1ZiwgNjQpOworCSBtcF9jb3B5KCZhLCAmZSk7CisJIG1wX2V4cHRtb2QoJmUsICZiLCAmYywgJmUpOworCSBpZiAobXBfY21wKCZkLCAmZSkgIT0gTVBfRVEpIHsKKwkgICAgcHJpbnRmKCJleHB0ICVsdSBmYWlsdXJlIVxuIiwgZXhwdF9uKTsKKwkgICAgZHJhdygmYSk7CisJICAgIGRyYXcoJmIpOworCSAgICBkcmF3KCZjKTsKKwkgICAgZHJhdygmZCk7CisJICAgIGRyYXcoJmUpOworCSAgICByZXR1cm4gMDsKKwkgfQorICAgICAgfSBlbHNlIGlmICghc3RyY21wKGNtZCwgImludm1vZCIpKSB7CisJICsraW52X247CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZhLCBidWYsIDY0KTsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIG1wX3JlYWRfcmFkaXgoJmIsIGJ1ZiwgNjQpOworCSBmZ2V0cyhidWYsIDQwOTUsIHN0ZGluKTsKKwkgbXBfcmVhZF9yYWRpeCgmYywgYnVmLCA2NCk7CisJIG1wX2ludm1vZCgmYSwgJmIsICZkKTsKKwkgbXBfbXVsbW9kKCZkLCAmYSwgJmIsICZlKTsKKwkgaWYgKG1wX2NtcF9kKCZlLCAxKSAhPSBNUF9FUSkgeworCSAgICBwcmludGYoImludiBbd3JvbmcgdmFsdWUgZnJvbSBNUEk/IV0gZmFpbHVyZVxuIik7CisJICAgIGRyYXcoJmEpOworCSAgICBkcmF3KCZiKTsKKwkgICAgZHJhdygmYyk7CisJICAgIGRyYXcoJmQpOworCSAgICBtcF9nY2QoJmEsICZiLCAmZSk7CisJICAgIGRyYXcoJmUpOworCSAgICByZXR1cm4gMDsKKwkgfQorCisgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiZGl2MiIpKSB7CisJICsrZGl2Ml9uOworCSBmZ2V0cyhidWYsIDQwOTUsIHN0ZGluKTsKKwkgbXBfcmVhZF9yYWRpeCgmYSwgYnVmLCA2NCk7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZiLCBidWYsIDY0KTsKKwkgbXBfZGl2XzIoJmEsICZjKTsKKwkgaWYgKG1wX2NtcCgmYywgJmIpICE9IE1QX0VRKSB7CisJICAgIHByaW50ZigiZGl2XzIgJWx1IGZhaWx1cmVcbiIsIGRpdjJfbik7CisJICAgIGRyYXcoJmEpOworCSAgICBkcmF3KCZiKTsKKwkgICAgZHJhdygmYyk7CisJICAgIHJldHVybiAwOworCSB9CisgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAibXVsMiIpKSB7CisJICsrbXVsMl9uOworCSBmZ2V0cyhidWYsIDQwOTUsIHN0ZGluKTsKKwkgbXBfcmVhZF9yYWRpeCgmYSwgYnVmLCA2NCk7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZiLCBidWYsIDY0KTsKKwkgbXBfbXVsXzIoJmEsICZjKTsKKwkgaWYgKG1wX2NtcCgmYywgJmIpICE9IE1QX0VRKSB7CisJICAgIHByaW50ZigibXVsXzIgJWx1IGZhaWx1cmVcbiIsIG11bDJfbik7CisJICAgIGRyYXcoJmEpOworCSAgICBkcmF3KCZiKTsKKwkgICAgZHJhdygmYyk7CisJICAgIHJldHVybiAwOworCSB9CisgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAiYWRkX2QiKSkgeworCSArK2FkZF9kX247CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZhLCBidWYsIDY0KTsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIHNzY2FuZihidWYsICIlZCIsICZpeCk7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZiLCBidWYsIDY0KTsKKwkgbXBfYWRkX2QoJmEsIGl4LCAmYyk7CisJIGlmIChtcF9jbXAoJmIsICZjKSAhPSBNUF9FUSkgeworCSAgICBwcmludGYoImFkZF9kICVsdSBmYWlsdXJlXG4iLCBhZGRfZF9uKTsKKwkgICAgZHJhdygmYSk7CisJICAgIGRyYXcoJmIpOworCSAgICBkcmF3KCZjKTsKKwkgICAgcHJpbnRmKCJkID09ICVkXG4iLCBpeCk7CisJICAgIHJldHVybiAwOworCSB9CisgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoY21kLCAic3ViX2QiKSkgeworCSArK3N1Yl9kX247CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZhLCBidWYsIDY0KTsKKwkgZmdldHMoYnVmLCA0MDk1LCBzdGRpbik7CisJIHNzY2FuZihidWYsICIlZCIsICZpeCk7CisJIGZnZXRzKGJ1ZiwgNDA5NSwgc3RkaW4pOworCSBtcF9yZWFkX3JhZGl4KCZiLCBidWYsIDY0KTsKKwkgbXBfc3ViX2QoJmEsIGl4LCAmYyk7CisJIGlmIChtcF9jbXAoJmIsICZjKSAhPSBNUF9FUSkgeworCSAgICBwcmludGYoInN1Yl9kICVsdSBmYWlsdXJlXG4iLCBzdWJfZF9uKTsKKwkgICAgZHJhdygmYSk7CisJICAgIGRyYXcoJmIpOworCSAgICBkcmF3KCZjKTsKKwkgICAgcHJpbnRmKCJkID09ICVkXG4iLCBpeCk7CisJICAgIHJldHVybiAwOworCSB9CisgICAgICB9CisgICB9CisgICByZXR1cm4gMDsKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9kZW1vL2RlbW8uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA1LzA2LzI0IDExOjMyOjA3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvZGVtby90aW1pbmcuYyBiL2xpYnRvbW1hdGgvZGVtby90aW1pbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDY2MGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9kZW1vL3RpbWluZy5jCkBAIC0wLDAgKzEsMzE5IEBACisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKwordWxvbmc2NCBfdHQ7CisKKyNpZmRlZiBJT1dOQU5BVEhMT04KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNkZWZpbmUgU0xFRVAgc2xlZXAoNCkKKyNlbHNlCisjZGVmaW5lIFNMRUVQCisjZW5kaWYKKworCit2b2lkIG5kcmF3KG1wX2ludCAqIGEsIGNoYXIgKm5hbWUpCit7CisgICBjaGFyIGJ1Zls0MDk2XTsKKworICAgcHJpbnRmKCIlczogIiwgbmFtZSk7CisgICBtcF90b3JhZGl4KGEsIGJ1ZiwgNjQpOworICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKK30KKworc3RhdGljIHZvaWQgZHJhdyhtcF9pbnQgKiBhKQoreworICAgbmRyYXcoYSwgIiIpOworfQorCisKK3Vuc2lnbmVkIGxvbmcgbGZzciA9IDB4QUFBQUFBQUFVTDsKKworaW50IGxiaXQodm9pZCkKK3sKKyAgIGlmIChsZnNyICYgMHg4MDAwMDAwMFVMKSB7CisgICAgICBsZnNyID0gKChsZnNyIDw8IDEpIF4gMHg4MDAwMDAxQlVMKSAmIDB4RkZGRkZGRkZVTDsKKyAgICAgIHJldHVybiAxOworICAgfSBlbHNlIHsKKyAgICAgIGxmc3IgPDw9IDE7CisgICAgICByZXR1cm4gMDsKKyAgIH0KK30KKworLyogUkRUU0MgZnJvbSBTY290dCBEdXBsaWNoYW4gKi8KK3N0YXRpYyB1bG9uZzY0IFRJTUZVTkModm9pZCkKK3sKKyNpZiBkZWZpbmVkIF9fR05VQ19fCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorICAgdW5zaWduZWQgbG9uZyBsb25nIGE7CisgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmR0c2Ncbm1vdmwgJSVlYXgsJTBcbm1vdmwgJSVlZHgsNCslMFxuIjo6CisJCQkibSIoYSk6IiVlYXgiLCAiJWVkeCIpOworICAgcmV0dXJuIGE7CisjZWxzZSAvKiBnY2MtSUE2NCB2ZXJzaW9uICovCisgICB1bnNpZ25lZCBsb25nIHJlc3VsdDsKKyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtb3YgJTA9YXIuaXRjIjoiPXIiKHJlc3VsdCk6OiJtZW1vcnkiKTsKKworICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QoKGludCkgcmVzdWx0ID09IC0xLCAwKSkKKyAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJtb3YgJTA9YXIuaXRjIjoiPXIiKHJlc3VsdCk6OiJtZW1vcnkiKTsKKworICAgcmV0dXJuIHJlc3VsdDsKKyNlbmRpZgorCisgICAvLyBNaWNyb3NvZnQgYW5kIEludGVsIFdpbmRvd3MgY29tcGlsZXJzCisjZWxpZiBkZWZpbmVkIF9NX0lYODYKKyAgIF9fYXNtIHJkdHNjCisjZWxpZiBkZWZpbmVkIF9NX0FNRDY0CisgICByZXR1cm4gX19yZHRzYygpOworI2VsaWYgZGVmaW5lZCBfTV9JQTY0CisjaWYgZGVmaW5lZCBfX0lOVEVMX0NPTVBJTEVSCisjaW5jbHVkZSA8aWE2NGludHJpbi5oPgorI2VuZGlmCisgICByZXR1cm4gX19nZXRSZWcoMzExNik7CisjZWxzZQorI2Vycm9yIG5lZWQgcmR0c2MgZnVuY3Rpb24gZm9yIHRoaXMgYnVpbGQKKyNlbmRpZgorfQorCisjZGVmaW5lIERPKHgpIHg7IHg7CisvLyNkZWZpbmUgRE80KHgpIERPMih4KTsgRE8yKHgpOworLy8jZGVmaW5lIERPOCh4KSBETzQoeCk7IERPNCh4KTsKKy8vI2RlZmluZSBETyh4KSAgRE84KHgpOyBETzgoeCk7CisKK2ludCBtYWluKHZvaWQpCit7CisgICB1bG9uZzY0IHR0LCBnZywgQ0xLX1BFUl9TRUM7CisgICBGSUxFICpsb2csICpsb2diLCAqbG9nYywgKmxvZ2Q7CisgICBtcF9pbnQgYSwgYiwgYywgZCwgZSwgZjsKKyAgIGludCBuLCBjbnQsIGl4LCBvbGRfa2FyYV9tLCBvbGRfa2FyYV9zOworICAgdW5zaWduZWQgcnI7CisKKyAgIG1wX2luaXQoJmEpOworICAgbXBfaW5pdCgmYik7CisgICBtcF9pbml0KCZjKTsKKyAgIG1wX2luaXQoJmQpOworICAgbXBfaW5pdCgmZSk7CisgICBtcF9pbml0KCZmKTsKKworICAgc3JhbmQodGltZShOVUxMKSk7CisKKworICAgLyogdGVtcC4gdHVybiBvZmYgVE9PTSAqLworICAgVE9PTV9NVUxfQ1VUT0ZGID0gVE9PTV9TUVJfQ1VUT0ZGID0gMTAwMDAwOworCisgICBDTEtfUEVSX1NFQyA9IFRJTUZVTkMoKTsKKyAgIHNsZWVwKDEpOworICAgQ0xLX1BFUl9TRUMgPSBUSU1GVU5DKCkgLSBDTEtfUEVSX1NFQzsKKworICAgcHJpbnRmKCJDTEtfUEVSX1NFQyA9PSAlbGx1XG4iLCBDTEtfUEVSX1NFQyk7CisgICBnb3RvIGV4cHRtb2Q7CisgICBsb2cgPSBmb3BlbigibG9ncy9hZGQubG9nIiwgInciKTsKKyAgIGZvciAoY250ID0gODsgY250IDw9IDEyODsgY250ICs9IDgpIHsKKyAgICAgIFNMRUVQOworICAgICAgbXBfcmFuZCgmYSwgY250KTsKKyAgICAgIG1wX3JhbmQoJmIsIGNudCk7CisgICAgICByciA9IDA7CisgICAgICB0dCA9IC0xOworICAgICAgZG8geworCSBnZyA9IFRJTUZVTkMoKTsKKwkgRE8obXBfYWRkKCZhLCAmYiwgJmMpKTsKKwkgZ2cgPSAoVElNRlVOQygpIC0gZ2cpID4+IDE7CisJIGlmICh0dCA+IGdnKQorCSAgICB0dCA9IGdnOworICAgICAgfSB3aGlsZSAoKytyciA8IDEwMDAwMCk7CisgICAgICBwcmludGYoIkFkZGluZ1x0XHQlNGQtYml0ID0+ICU5bGx1L3NlYywgJTlsbHUgY3ljbGVzXG4iLAorCSAgICAgbXBfY291bnRfYml0cygmYSksIENMS19QRVJfU0VDIC8gdHQsIHR0KTsKKyAgICAgIGZwcmludGYobG9nLCAiJWQgJTlsbHVcbiIsIGNudCAqIERJR0lUX0JJVCwgdHQpOworICAgICAgZmZsdXNoKGxvZyk7CisgICB9CisgICBmY2xvc2UobG9nKTsKKworICAgbG9nID0gZm9wZW4oImxvZ3Mvc3ViLmxvZyIsICJ3Iik7CisgICBmb3IgKGNudCA9IDg7IGNudCA8PSAxMjg7IGNudCArPSA4KSB7CisgICAgICBTTEVFUDsKKyAgICAgIG1wX3JhbmQoJmEsIGNudCk7CisgICAgICBtcF9yYW5kKCZiLCBjbnQpOworICAgICAgcnIgPSAwOworICAgICAgdHQgPSAtMTsKKyAgICAgIGRvIHsKKwkgZ2cgPSBUSU1GVU5DKCk7CisJIERPKG1wX3N1YigmYSwgJmIsICZjKSk7CisJIGdnID0gKFRJTUZVTkMoKSAtIGdnKSA+PiAxOworCSBpZiAodHQgPiBnZykKKwkgICAgdHQgPSBnZzsKKyAgICAgIH0gd2hpbGUgKCsrcnIgPCAxMDAwMDApOworCisgICAgICBwcmludGYoIlN1YnRyYWN0aW5nXHRcdCU0ZC1iaXQgPT4gJTlsbHUvc2VjLCAlOWxsdSBjeWNsZXNcbiIsCisJICAgICBtcF9jb3VudF9iaXRzKCZhKSwgQ0xLX1BFUl9TRUMgLyB0dCwgdHQpOworICAgICAgZnByaW50Zihsb2csICIlZCAlOWxsdVxuIiwgY250ICogRElHSVRfQklULCB0dCk7CisgICAgICBmZmx1c2gobG9nKTsKKyAgIH0KKyAgIGZjbG9zZShsb2cpOworCisgICAvKiBkbyBtdWx0L3NxdWFyZSB0d2ljZSwgZmlyc3Qgd2l0aG91dCBrYXJhdHN1YmEgYW5kIHNlY29uZCB3aXRoICovCisgbXVsdHRlc3Q6CisgICBvbGRfa2FyYV9tID0gS0FSQVRTVUJBX01VTF9DVVRPRkY7CisgICBvbGRfa2FyYV9zID0gS0FSQVRTVUJBX1NRUl9DVVRPRkY7CisgICBmb3IgKGl4ID0gMDsgaXggPCAyOyBpeCsrKSB7CisgICAgICBwcmludGYoIldpdGglcyBLYXJhdHN1YmFcbiIsIChpeCA9PSAwKSA/ICJvdXQiIDogIiIpOworCisgICAgICBLQVJBVFNVQkFfTVVMX0NVVE9GRiA9IChpeCA9PSAwKSA/IDk5OTkgOiBvbGRfa2FyYV9tOworICAgICAgS0FSQVRTVUJBX1NRUl9DVVRPRkYgPSAoaXggPT0gMCkgPyA5OTk5IDogb2xkX2thcmFfczsKKworICAgICAgbG9nID0gZm9wZW4oKGl4ID09IDApID8gImxvZ3MvbXVsdC5sb2ciIDogImxvZ3MvbXVsdF9rYXJhLmxvZyIsICJ3Iik7CisgICAgICBmb3IgKGNudCA9IDQ7IGNudCA8PSAxMDI0MCAvIERJR0lUX0JJVDsgY250ICs9IDIpIHsKKwkgU0xFRVA7CisJIG1wX3JhbmQoJmEsIGNudCk7CisJIG1wX3JhbmQoJmIsIGNudCk7CisJIHJyID0gMDsKKwkgdHQgPSAtMTsKKwkgZG8geworCSAgICBnZyA9IFRJTUZVTkMoKTsKKwkgICAgRE8obXBfbXVsKCZhLCAmYiwgJmMpKTsKKwkgICAgZ2cgPSAoVElNRlVOQygpIC0gZ2cpID4+IDE7CisJICAgIGlmICh0dCA+IGdnKQorCSAgICAgICB0dCA9IGdnOworCSB9IHdoaWxlICgrK3JyIDwgMTAwKTsKKwkgcHJpbnRmKCJNdWx0aXBseWluZ1x0JTRkLWJpdCA9PiAlOWxsdS9zZWMsICU5bGx1IGN5Y2xlc1xuIiwKKwkJbXBfY291bnRfYml0cygmYSksIENMS19QRVJfU0VDIC8gdHQsIHR0KTsKKwkgZnByaW50Zihsb2csICIlZCAlOWxsdVxuIiwgbXBfY291bnRfYml0cygmYSksIHR0KTsKKwkgZmZsdXNoKGxvZyk7CisgICAgICB9CisgICAgICBmY2xvc2UobG9nKTsKKworICAgICAgbG9nID0gZm9wZW4oKGl4ID09IDApID8gImxvZ3Mvc3FyLmxvZyIgOiAibG9ncy9zcXJfa2FyYS5sb2ciLCAidyIpOworICAgICAgZm9yIChjbnQgPSA0OyBjbnQgPD0gMTAyNDAgLyBESUdJVF9CSVQ7IGNudCArPSAyKSB7CisJIFNMRUVQOworCSBtcF9yYW5kKCZhLCBjbnQpOworCSByciA9IDA7CisJIHR0ID0gLTE7CisJIGRvIHsKKwkgICAgZ2cgPSBUSU1GVU5DKCk7CisJICAgIERPKG1wX3NxcigmYSwgJmIpKTsKKwkgICAgZ2cgPSAoVElNRlVOQygpIC0gZ2cpID4+IDE7CisJICAgIGlmICh0dCA+IGdnKQorCSAgICAgICB0dCA9IGdnOworCSB9IHdoaWxlICgrK3JyIDwgMTAwKTsKKwkgcHJpbnRmKCJTcXVhcmluZ1x0JTRkLWJpdCA9PiAlOWxsdS9zZWMsICU5bGx1IGN5Y2xlc1xuIiwKKwkJbXBfY291bnRfYml0cygmYSksIENMS19QRVJfU0VDIC8gdHQsIHR0KTsKKwkgZnByaW50Zihsb2csICIlZCAlOWxsdVxuIiwgbXBfY291bnRfYml0cygmYSksIHR0KTsKKwkgZmZsdXNoKGxvZyk7CisgICAgICB9CisgICAgICBmY2xvc2UobG9nKTsKKworICAgfQorIGV4cHRtb2Q6CisKKyAgIHsKKyAgICAgIGNoYXIgKnByaW1lc1tdID0geworCSAvKiAySyBsYXJnZSBtb2R1bGkgKi8KKwkgIjE3OTc2OTMxMzQ4NjIzMTU5MDc3MjkzMDUxOTA3ODkwMjQ3MzM2MTc5NzY5Nzg5NDIzMDY1NzI3MzQzMDA4MTE1NzczMjY3NTgwNTUwMDk2MzEzMjcwODQ3NzMyMjQwNzUzNjAyMTEyMDExMzg3OTg3MTM5MzM1NzY1ODc4OTc2ODgxNDQxNjYyMjQ5Mjg0NzQzMDYzOTQ3NDEyNDM3Nzc2Nzg5MzQyNDg2NTQ4NTI3NjMwMjIxOTYwMTI0NjA5NDExOTQ1MzA4Mjk1MjA4NTAwNTc2ODgzODE1MDY4MjM0MjQ2Mjg4MTQ3MzkxMzExMDU0MDgyNzIzNzE2MzM1MDUxMDY4NDU4NjIzOTMzNDEwMDA0NzM1OTgxNzk1MDg3MDY3ODI0MjQ1NzY2NjIwODEzNzIxNyIsCisJICIzMjMxNzAwNjA3MTMxMTAwNzMwMDcxNDg3NjY4ODY2OTk1MTk2MDQ0NDEwMjY2OTcxNTQ4NDAzMjEzMDM0NTQyNzUyNDY1NTEzODg2Nzg5MDg5MzE5NzIwMTQxMTUyMjkxMzQ2MzY4ODcxNzk2MDkyMTg5ODAxOTQ5NDExOTU1OTE1MDQ5MDkyMTA5NTA4ODE1MjM4NjQ0ODI4MzEyMDYzMDg3NzM2NzMwMDk5NjA5MTc1MDE5Nzc1MDM4OTY1MjEwNjc5NjA1NzYzODM4NDA2NzU2ODI3Njc5MjIxODY0MjYxOTc1NjE2MTgzODA5NDMzODQ3NjE3MDQ3MDU4MTY0NTg1MjAzNjMwNTA0Mjg4NzU3NTg5MTU0MTA2NTgwODYwNzU1MjM5OTEyMzkzMDM4NTUyMTkxNDMzMzM4OTY2ODM0MjQyMDY4NDk3NDc4NjU2NDU2OTQ5NDg1NjE3NjAzNTMyNjMyMjA1ODA3NzgwNTY1OTMzMTAyNjE5MjcwODQ2MDMxNDE1MDI1ODU5Mjg2NDE3NzExNjcyNTk0MzYwMzcxODQ2MTg1NzM1NzU5ODM1MTE1MjMwMTY0NTkwNDQwMzY5NzYxMzIzMzI4NzIzMTIyNzEyNTY4NDcxMDgyMDIwOTcyNTE1NzEwMTcyNjkzMTMyMzQ2OTY3ODU0MjU4MDY1NjY5NzkzNTA0NTk5NzI2ODM1Mjk5ODYzODA5OTczMzA3NzE1MjEyMTE0MDEyMDAzMTE1MDQyNDU0MTY5Njc5MTk1MTA5NzUyOTU0NjgwMTQyOTAyNzY2ODg2OTkyNzQ5MTcyNTE2OSIsCisJICIxMDQ0Mzg4ODgxNDEzMTUyNTA2NjkxNzUyNzEwNzE2NjI0MzgyNTc5OTY0MjQ5MDQ3MzgzNzgwMzg0MjMzNDgzMjgzOTUzOTA3OTcxNTU3NDU2ODQ4ODI2ODExOTM0OTk3NTU4MzQwODkwMTA2NzE0NDM5MjYyODM3OTg3NTczNDM4MTg1NzkzNjA3MjYzMjM2MDg3ODUxMzY1Mjc3OTQ1OTU2OTc2NTQzNzA5OTk4MzQwMzYxNTkwMTM0MzgzNzE4MzE0NDI4MDcwMDExODU1OTQ2MjI2Mzc2MzE4ODM5Mzk3NzEyNzQ1NjcyMzM0Njg0MzQ0NTg2NjE3NDk2ODA3OTA4NzA1ODAzNzA0MDcxMjg0MDQ4NzQwMTE4NjA5MTE0NDY3OTc3NzgzNTk4MDI5MDA2Njg2OTM4OTc2ODgxNzg3Nzg1OTQ2OTA1NjMwMTkwMjYwOTQwNTk5NTc5NDUzNDMyODIzNDY5MzAzMDI2Njk2NDQzMDU5MDI1MDE1OTcyMzk5ODY3NzE0MjE1NTQxNjkzODM1NTU5ODg1MjkxNDg2MzE4MjM3OTE0NDM0NDk2NzM0MDg3ODExODcyNjM5NDk2NDc1MTAwMTg5MDQxMzQ5MDA4NDE3MDYxNjc1MDkzNjY4MzMzODUwNTUxMDMyOTcyMDg4MjY5NTUwNzY5OTgzNjE2MzY5NDExOTMzMDE1MjEzNzk2ODI1ODM3MTg4MDkxODMzNjU2NzUxMjIxMzE4NDkyODQ2MzY4MTI1NTUwMjI1OTk4MzAwNDEyMzQ0Nzg0ODYyNTk1Njc0NDkyMTk0NjE3MDIzODA2NTA1OTEzMjQ1NjEwODI1NzMxODM1MzgwMDg3NjA4NjIyMTAyODM0MjcwMTk3Njk4MjAyMzEzMTY5MDE3Njc4MDA2Njc1MTk1NDg1MDc5OTIxNjM2NDE5MzcwMjg1Mzc1MTI0Nzg0MDE0OTA3MTU5MTM1NDU5OTgyNzkwNTEzMzk5NjExNTUxNzk0MjcxMTA2ODMxMTM0MDkwNTg0MjcyODg0Mjc5NzkxNTU0ODQ5NzgyOTU0MzIzNTM0NTE3MDY1MjIzMjY5MDYxMzk0OTA1OTg3NjkzMDAyMTIyOTYzMzk1Njg3NzgyODc4OTQ4NDQwNjE2MDA3NDEyOTQ1Njc0OTE5ODIzMDUwNTcxNjQyMzc3MTU0ODE2MzIxMzgwNjMxMDQ1OTAyOTE2MTM2OTI2NzA4MzQyODU2NDQwNzMwNDQ3ODk5OTcxOTAxNzgxNDY1NzYzNDczMjIzODUwMjY3MjUzMDU5ODk5Nzk1OTk2MDkwNzk5NDY5MjAxNzc0NjI0ODE3NzE4NDQ5ODY3NDU1NjU5MjUwMTc4MzI5MDcwNDczMTE5NDMzMTY1NTUwODA3NTY4MjIxODQ2NTcxNzQ2MzczMjk2ODg0OTEyODE5NTIwMzE3NDU3MDAyNDQwOTI2NjE2OTEwODc0MTQ4Mzg1MDc4NDExOTI5ODA0NTIyOTgxODU3MzM4OTc3NjQ4MTAzMTI2MDg1OTAyOTk1MjA4MjU3NDIxODU1MjQ5Nzk2NzIxNzI5MDM5NzQ0MTE4MTY1OTM4NDMzNjk0ODIzMzI1Njk2NjQyMDk2ODkyMTI0NTQ3NDI1MjgzIiwKKwkgLyogMksgbW9kdWxpIG1lcnNlbm5lIHByaW1lcyAqLworCSAiNjg2NDc5NzY2MDEzMDYwOTcxNDk4MTkwMDc5OTA4MTM5MzIxNzI2OTQzNTMwMDE0MzMwNTQwOTM5NDQ2MzQ1OTE4NTU0MzE4MzM5NzY1NjA1MjEyMjU1OTY0MDY2MTQ1NDU1NDk3NzI5NjMxMTM5MTQ4MDg1ODAzNzEyMTk4Nzk5OTcxNjY0MzgxMjU3NDAyODI5MTExNTA1NzE1MSIsCisJICI1MzExMzc5OTI4MTY3NjcwOTg2ODk1ODgyMDY1NTI0Njg2MjczMjk1OTMxMTc3MjcwMzE5MjMxOTk0NDQxMzgyMDA0MDM1NTk4NjA4NTIyNDI3MzkxNjI1MDIyNjUyMjkyODU2Njg4ODkzMjk0ODYyNDY1MDEwMTUzNDY1NzkzMzc2NTI3MDcyMzk0MDk1MTk5Nzg3NjY1ODczNTE5NDM4MzEyNzA4MzUzOTMyMTkwMzE3MjgxMjciLAorCSAiMTA0MDc5MzIxOTQ2NjQzOTkwODE5MjUyNDAzMjczNjQwODU1Mzg2MTUyNjIyNDcyNjY3MDQ4MDUzMTkxMTIzNTA0MDM2MDgwNTk2NzMzNjAyOTgwMTIyMzk0NDE3MzIzMjQxODQ4NDI0MjE2MTM5NTQyODEwMDc3OTEzODM1NjYyNDgzMjM0NjQ5MDgxMzk5MDY2MDU2NzczMjA3NjI5MjQxMjk1MDkzODkyMjAzNDU3NzMxODMzNDk2NjE1ODM1NTA0NzI5NTk0MjA1NDc2ODk4MTEyMTE2OTM2NzcxNDc1NDg0Nzg4NjY5NjI1MDEzODQ0MzgyNjAyOTE3MzIzNDg4ODUzMTExNjA4Mjg1Mzg0MTY1ODUwMjgyNTU2MDQ2NjYyMjQ4MzE4OTA5MTg4MDE4NDcwNjgyMjIyMDMxNDA1MjEwMjY2OTg0MzU0ODg3MzI5NTgwMjg4NzgwNTA4Njk3MzYxODY5MDA3MTQ3MjA3MTA1NTU3MDMxNjg3MjkwODciLAorCSAiMTQ3NTk3OTkxNTIxNDE4MDIzNTA4NDg5ODYyMjczNzM4MTczNjMxMjA2NjE0NTMzMzE2OTc3NTE0Nzc3MTIxNjQ3ODU3MDI5Nzg3ODA3ODk0OTM3NzQwNzMzNzA0OTM4OTI4OTM4Mjc0ODUwNzUzMTQ5NjQ4MDQ3NzI4MTI2NDgzODc2MDI1OTE5MTgxNDQ2MzM2NTMzMDI2OTU0MDQ5Njk2MTIwMTExMzQzMDE1NjkwMjM5NjA5Mzk4OTA5MDIyNjI1OTMyNjkzNTAyNTI4MTQwOTYxNDk4MzQ5OTM4ODIyMjgzMTQ0ODU5ODYwMTgzNDMxODUzNjIzMDkyMzc3MjY0MTM5MDIwOTQ5MDIzMTgzNjQ0Njg5OTYwODIxMDc5NTQ4Mjk2Mzc2MzA5NDIzNjYzMDk0NTQxMDgzMjc5Mzc2OTkwNTM5OTk4MjQ1NzE4NjMyMjk0NDcyOTYzNjQxODg5MDYyMzM3MjE3MTcyMzc0MjEwNTYzNjQ0MDM2ODIxODQ1OTY0OTYzMjk0ODUzODY5NjkwNTg3MjY1MDQ4NjkxNDQzNDYzNzQ1NzUwNzI4MDQ0MTgyMzY3NjgxMzUxNzg1MjA5OTM0ODY2MDg0NzE3MjU3OTQwODQyMjMxNjY3ODA5NzY3MDIyNDAxMTk5MDI4MDE3MDQ3NDg5NDQ4NzQyNjkyNDc0MjEwODgyMzUzNjgwODQ4NTA3MjUwMjI0MDUxOTQ1MjU4NzU0Mjg3NTM0OTk3NjU1ODU3MjY3MDIyOTYzMzk2MjU3NTIxMjYzNzQ3Nzg5Nzc4NTUwMTU1MjY0NjUyMjYwOTk4ODg2OTkxNDAxMzU0MDQ4MzgwOTg2NTY4MTI1MDQxOTQ5NzY4NjY5Nzc3MTAwNyIsCisJICIyNTkxMTcwODYwMTMyMDI2Mjc3NzYyNDY3Njc5MjI0NDE1MzA5NDE4MTg4ODc1NTMxMjU0MjczMDM5NzQ5MjMxNjE4NzQwMTkyNjY1ODYzNjIwODYyMDEyMDk1MTY4MDA0ODM0MDY1NTA2OTUyNDE3MzMxOTQxNzc0NDE2ODk1MDkyMzg4MDcwMTc0MTAzNzc3MDk1OTc1MTIwNDIzMTMwNjY2MjQwODI5MTYzNTM1MTc5NTIzMTExODYxNTQ4NjIyNjU2MDQ1NDc2OTExMjc1OTU4NDg3NzU2MTA1Njg3NTc5MzExOTEwMTc3MTE0MDg4MjYyNTIxNTM4NDkwMzU4MzA0MDExODUwNzIxMTY0MjQ3NDc0NjE4MjMwMzE0NzEzOTgzNDAyMjkyODgwNzQ1NDU2Nzc5MDc5NDEwMzcyODgyMzU4MjA3MDU4OTIzNTEwNjg0MzM4ODI5ODY4ODg2MTY2NTg2NTAyODA5Mjc2OTIwODAzMzk2MDU4NjkzMDg3OTA1MDA0MDk1MDM3MDk4NzU5MDIxMTkwMTgzNzE5OTE2MjA5OTQwMDI1Njg5MzUxMTMxMzY1NDg4Mjk3MzkxMTI2NTY3OTczMDMyNDE5ODY1MTcyNTAxMTY0MTI3MDM1MDk3MDU0Mjc3NzM0Nzc5NzIzNDk4MjE2NzY0NDM0NDY2NjgzODMxMTkzMjI1NDAwOTk2NDg5OTQwNTE3OTAyNDE2MjQwNTY1MTkwNTQ0ODM2OTA4MDk2MTYwNjE2MjU3NDMwNDIzNjE3MjE4NjMzMzk0MTU4NTI0MjY0MzEyMDg3MzcyNjY1OTE5NjIwNjE3NTM1MzU3NDg4OTI4OTQ1OTk2MjkxOTUxODMwODI2MjE4NjA4NTM0MDA5Mzc5MzI4Mzk0MjAyNjE4NjY1ODYxNDI1MDMyNTE0NTA3NzMwOTYyNzQyMzUzNzY4MjI5Mzg2NDk0MDcxMjc3MDA4NDYwNzcxMjQyMTE4MjMwODA4MDQxMzkyOTgwODcwNTc1MDQ3MTM4MjUyNjQ1NzE0NDgzNzkzNzExMjUwMzIwODE4MjYxMjY1NjY2NDkwODQyNTE2OTk0NTM5NTE4ODc3ODk2MTM2NTAyNDg0MDU3MzkzNzg1OTQ1OTk0NDQzMzUyMzExODgyODAxMjM2NjA0MDYyNjI0Njg2MDkyMTIxNTAzNDk5Mzc1ODQ3ODIyOTIyMzcxNDQzMzk2Mjg4NTg0ODU5MzgyMTU3Mzg4MjEyMzIzOTM2ODcwNDYxNjA2NzczNjI5MDkzMTUwNzEiLAorCSAiMTkwNzk3MDA3NTI0NDM5MDczODA3NDY4MDQyOTY5NTI5MTczNjY5MzU2OTk0NzQ5OTQwMTc3Mzk0NzQxODgyNjczNTI4OTc5Nzg3MDA1MDUzNzA2MzY4MDQ5ODM1NTE0OTAwMjQ0MzAzNDk1OTU0OTUwNzA5NzI1NzYyMTg2MzExMjI0MTQ4ODI4ODExOTIwMjE2OTA0NTQyMjA2OTYwNzQ0NjY2MTY5MzY0MjIxMTk1Mjg5NTM4NDM2ODQ1MzkwMjUwMTY4NjYzOTMyODM4ODA1MTkyMDU1MTM3MTU0MzkwOTEyNjY2NTI3NTMzMDA3MzA5MjkyNjg3NTM5MDkyMjU3MDQzMzYyNTE3ODU3MzY2NjI0Njk5OTc1NDAyMzc1NDYyOTU0NDkwMjkzMjU5MjMzMzAzMTM3MzMwNjQzNTMxNTU2NTM5NzM5OTIxOTI2MjAxNDM4NjA2NDM5MDIwMDc1MTc0NzIzMDI5MDU2ODM4MjcyNTA1MDUxNTcxOTY3NTk0NjA4MzUwMDYzNDA0NDk1OTc3NjYwNjU2MjY5MDIwODIzOTYwODI1NTY3MDEyMzQ0MTg5OTA4OTI3OTU2NjQ2MDExOTk4MDU3OTg4NTQ4NjMwMTA3NjM3MzgwOTkzNTE5ODI2NTgyMzg5NzgxODg4MTM1NzA1NDA4NjUzMDQ1MjE5NjU1ODAxNzU4MDgxMjUxMTY0MDgwNTU0NjA5MDU3NDY4MDI4MjAzMzA4NzE4NzI0NjU0MDgxMDU1MzIzMjE1ODYwMTg5NjExMzkxMjk2MDMwNDcxMTA4NDQzMTQ2NzQ1NjcxOTY3NzY2MzA4OTI1ODU4NTQ3MjcxNTA3MzExNTYzNzY1MTcxMDA4MzE4MjQ4NjQ3MTEwMDk3NjE0ODkwMzEzNTYyODU2NTQxNzg0MTU0ODgxNzQzMTQ2MDMzOTA5NjAyNzM3OTQ3Mzg1MDU1MzU1OTYwMzMxODU1NjE0NTQwOTAwMDgxNDU2Mzc4NjU5MDY4MzcwMzE3MjY3Njk2OTgwMDAxMTg3NzUwOTk1NDkxMDkwMzUwMTA4NDE3MDUwOTE3OTkxNTYyMTY3OTcyMjgxMDcwMTYxMzA1OTcyNTE4MDQ0ODcyMDQ4MzMxMzA2MzgzNzE1MDk0ODU0OTM4NDE1NzM4NTQ5ODk0NjA2MDcwNzIyNTg0NzM3OTc4MTc2Njg2NDIyMTM0MzU0NTI2OTg5NDQzMDI4MzUzNjQ0MDM3MTg3Mzc1Mzg1Mzk3ODM4MjU5NTExODMzMTY2NDE2MTM0MzIzNjk1NjYwMzY3Njc2ODk3NzIyMjg3OTE4NzczNDIwOTY4OTgyMzI2MDg5MDI2MTUwMDMxNTE1NDI0MTY1NDYyMTExMzM3NTI3NDMxMTU0ODkwNjY2MzI3Mzc0OTIxNDQ2Mjc2ODMzNTY0NTE5Nzc2Nzk3NjMzODc1NTAzNTQ4NjY1MDkzOTE0NTU2NDgyMDMxNDgyMjQ4ODgzMTI3MDIzNzc3MDM5NjY3NzA3OTc2NTU5ODU3MzMzMzU3MDEzNzI3MzQyMDc5MDk5MDY0NDAwNDU1NzQxODMwNjU0MzIwMzc5MzUwODMzMjM2MjQ1ODE5MzQ4ODI0MDY0NzgzNTg1NjkyOTI0ODgxMDIxOTc4MzMyOTc0OTQ5OTA2MTIyNjY0NDIxMzc2MDM0Njg3ODE1MzUwNDg0OTkxIiwKKworCSAvKiBEUiBtb2R1bGkgKi8KKwkgIjE0MDU5MTA1NjA3OTQ3NDg4Njk2MjgyOTMyODM2NTE4NjkzMzA4OTY3ODAzNDk0NjkzNDg5NDc4NDM5ODYxMTY0NDExOTkyNDM5NTk4Mzk5NTk0NzQ3MDAyMTQ0MDc0NjU4OTI4NTkzNTAyODQ1NzI5NzUyNzk3MjYwMDI1ODMxNDIzNDE5Njg2NTI4MTUxNjA5OTQwMjAzMzY4NjEyMDc5IiwKKwkgIjEwMTc0NTgyNTY5NzAxOTI2MDc3MzkyMzUxOTc1NTg3ODU2NzQ2MTMxNTI4MjAxNzc1OTgyOTEwNzYwODkxNDM2NDA3NTI3NTIzNTI1NDM5NTYyMjU4MDQ0NzQwMDk5NDE3NTU3ODk2MzE2MzkxODk2NzE4MjAxMzYzOTY2MDY2OTc3MTEwODQ3NTk1NzY5MjgxMDg1NzA5ODg0NzEzODkwMzE2MTMwODUwMjQxOTQxMDE0MjE4NTc1OTE1MjQzNTY4MDA2ODQzNTkxNTE1OTQwMjQ5NjA1ODUxMzYxMTQxMTY4ODkwMDI0MzAzOSIsCisJICI3MzYzMzUxMDgwMzk2MDQ1OTU4MDU5MjM0MDYxNDcxODQ1MzA4ODk5MjMzNzA1NzQ3Njg3NzIxOTE5Njk2MTI0MjIwNzMwNDAwOTkzMzE5NDQ5OTE1NzM5MjMxMTI1ODEyNjc1NDI1MDc5ODY0NTE5NTMyMjcxOTI5NzA0MDI4OTMwNjM4NTA0ODU3MzA3MDMwNzU4OTkyODYwMTM0NTEzMzcyOTE0NjgyNDkwMjc2OTE3MzM4OTE0ODY3MDQwMDE1MTMyNzk4Mjc3NzE3NDAxODM2MjkxNjEwNjUxOTQ4NzQ3Mjc5NjI1MTcxNDgxMDA3NzUyMjgzNjM0MjEwODM2OTE3NjQwNjU0Nzc1OTA4MjM5MTkzNjQwMTI5MTc5ODQ2MDU2MTk1MjYxNDA4MjE3OTc2MDI0MzEiLAorCSAiMzg1NjQ5OTg4MzA3MzY1MjE0MTcyODE4NjU2OTY0NTMwMjU4MDY1OTM0OTE5NjcxMzEwMjMyMjE3NTQ4MDA2MjUwNDQxMTgyNjU0Njg4NTEyMTA3MDUzNjAzODU3MTc1MzY3OTQ2MTUxODAyNjA0OTQyMDgwNzY2MDU3OTg2NzE2NjA3MTkzMzMxOTk1MTM4MDc4MDYyNTIzOTQ0MjMyODM0MTM0MzAxMDYwMDM1OTYzMzI1MTMyNDY2ODI5MDM5OTQ4Mjk1Mjg2OTAxOTgyMDUxMjA5MjE1NTc1MzM3MjY0NzM1ODU3NTEzODIxOTM5NTM1OTIxMjc0Mzk5NjUwNTAyNjE0NzY4MTA4NDIwNzE1NzM2ODQ1MDU4Nzg4NTQ1ODg3MDY2MjM0ODQ1NzM5MjU5MjU5MDM1MDU3NDc1NDU0NzEwODg4Njc3MTIxODUwMDQxMzUyMDEyODkyNzM0MDU2MTQ0MTU4OTk0MzgyNzY1MzU2MjYzNDYwOTg5MDQyNDEwMjA4Nzc5NzQwMDI5MTYxNjgwOTk5NTE4ODU0MDYzNzkyOTU1MzYyMDA0MTM0OTMxOTA0MTk3Mjc3ODk3MTIwNzYxNjUxNjIxNzU3ODMiLAorCSAiNTQyMTg5MzkxMzMxNjk2MTcyNjYxNjcwNDQwNjE5MTgwNTM2NzQ5OTk0MTY2NDE1OTkzMzM0MTUxNjAxNzQ1MzkyMTkzNDg0NTkwMjk2NjAwOTc5NjAyMzc4Njc2NjI0ODA4MTI5NjEzNzc3OTkzNDY2MjQyMjAzMDI1MDU0NTczNjkyNTYyNjg5MjUxMjUwNDcxNjI4MzU4MzE4NzQzOTc4Mjg1ODYwNzIwMTQ4NDQ2NDQ4ODg1NzAxMDAxMjc3NTYwNTcyNTI2OTQ3NjE5MzkyNTUxNTc0NDkwODM5Mjg2NDU4NDU0OTk0NDg4NjY1NzQ0OTkxODIyODM3NzY5OTE4MDk1MTE3MTI5NTQ2NDE0MTI0NDQ4Nzc3MDMzOTQxMjIzNTY1ODMxNDIwMzkwODQ2ODY0NDI5NTA0Nzc0NDc3OTQ5MTUzNzk0Njg5OTQ4NzQ3NjgwMzYyMjEyOTU0Mjc4NjkzMzM1NjUzOTM1ODkwMzUyNjE5MDQxOTM2NzI3NDYzNzE3OTI2NzQ0ODY4MzM4MzU4MTQ5NTY4MzY4NjQzNDAzMDM3NzY4NjQ5NjE2Nzc4NTI2MDEzNjEwNDkzNjk2MTg2MDU1ODk5MzE4MjY4MzM5NDMyNjcxNTQxMzI4MTk1NzI0MjYxMzI5NjA2Njk5ODMxMDE2NjY2MzU5NDQwODc0ODQzMTAzMDIwNjY2MTA2NTY4MjIyNDAxMDQ3NzIwMjY5OTUxNTMwMjk2ODc5NDkwNDQ0MjI0NTQ2NjU0NzI5MTExNTA0MzQ2NjYwODU5OTA3Mjk2MzY0MDk3MTI2ODM0ODM0MjM1Mjg3MTQ3IiwKKwkgIjE0ODcyNTkxMzQ4MTQ3MDkyNjQwOTIwMzI2NDg1MjU5NzEwMzg4OTU4NjU2NDUxNDg5MDExODA1ODUzNDA0NTQ5ODU1MjQxNTUxMzUyNjAyMTc3ODg3NTgwMjc0MDA0NzgzMTIyNTYzMzk0OTYzODUyNzUwMTI0NjU2NjE1NzU1NzYyMDIyNTIwNjMxNDU2OTg3MzIwNzk4ODAyOTQ2NjQyMjA1Nzk3NjQ4NDg3Njc3MDQwNzY3NjE4NTMxOTcyMTY1NjMyNjI2NjAwNDY2MDI3MDM5NzMwNTA3OTgyMTgyNDYxNzA4MzU5NjIwMDU1OTg1NjE2Njk3MDY4NDQ0Njk0NDc0MzU0NjEwOTI1NDIyNjU3OTI0NDQ5NDc3MDY3Njk2MTU2OTUyNTIyNTYxMzA5MDEyNzE4NzAzNDEwMDU3Njg5MTI5NzQ0MzM2ODQ1MjE0MzYyMTEyNjMzNTgwOTc1MjI3MjY0NjIwODM5MTc5MzkwOTE3NjAwMjY2NTg5MjU3NTcwNzY3MzM0ODQxNzMyMDI5MjcxNDE0NDE0OTI1NzM3OTk5MTQyNDAyMjI2Mjg3OTU0MDU2MjM5NTMxMDkxMzE1OTQ1MjM2MjMzNTMwNDQ4OTgzMzk0ODE0OTQxMjAxMTI3MjM0NDU2ODk2NDc5ODY0NzUyNzkyNDI0NDYwODMxNTE0MTM2Njc1ODcwMDgxOTE2ODI1NjQzNzY0MTIzNDc5NjQxNDYxMTM4OTg1NjU4ODY2ODMxMzk0MDcwMDU5NDEzODM2NjkzMjU5OTc0NzUwNzY5MTA0ODgwODY2NjMyNTYzMzU2ODkxODExNTc5NTc1NzE0NDUwNjc0OTAxODc5Mzk1NTMxNjU5MDM3NzM1NTQyOTAyNjA1MzEwMDkxMjE4NzkwNDQxNzA3NjY2MTUyMzIzMDA5MzY2NzUzNjk0NTEyNjA3NDc2NzE0MzIwNzMzOTQ4Njc1MzA4MjA1Mjc0NzkxNzI0NjQxMDY0NDI0NTA3Mjc2NDAyMjY1MDM3NDY1ODYzNDAyNzk4MTYzMTg4MjEzOTUyMTA3MjYyNjgyOTE1MzU2NDg1MDYxOTA3MTQ2MTYwODMxNjM0MDMxODk5NDMzMzQ0MzEwNTY4NzYwMzgyODY1MzAzNjU3NTcxODczNjcxNDc0NDYwMDQ4NTU5MTIwMzMxMzczODYyMjUwNTMyNzU0MTk2MjYxMDI0MTcyMzYxMzM5NDg1MDMiLAorCSAiMTA5NTEyMTExNTcxNjY3NzgwMjg1NjgxMTI5MDM5MjM5NTEyODU4ODE2ODU5MjQwOTEwOTQ5NDkwMDE3ODAwODk2Nzk1NTI1MzAwNTE4MzgzMTg3MjcxNTQyMzE1MTU1MTk5OTczNDg1NzE4NDUzODE5OTg2NDQ2OTYwNTY1NzgwNTUxOTEwNjcxNzUyOTY1NTA0NDA1NDgzMzE5NzY4NzQ1OTc4MjYzNjI5NzI1NTIxOTc0Mjk5NDczNjc1MTU0MTgxNTI2OTcyNzk0MDc1MTg2MDY3MDI2ODc3NDkwMzM0MDI5NjA0MDAwNjExNDAxMzk3MTMwOTI1NzAyODMzMjg0OTY3OTA5NjgyNDgwMDI1MDc0MjY5MTcxODYxMDY3MDgxMjM3NDI3MjQxNDA4Njg2MzcxNTc2MzcyNDYyMjc5NzUwOTQzNzA2MjUxODA4MjM4MzA1NjA1MDE0NDYyNDk2Mjc3NjMwMjE0Nzg5MDUyMTI0OTQ3NzA2MDIxNTE0ODI3NTE2MzY4ODMwMTI3NTg0NzE1NTMxNjA0MjI3OTQwNTU1NzYzMjYzOTM2NjA2Njg0NzQ0Mjg2MTQyMjE2NDgzMjY1NTg3NDY1NTgyNDIyMTU3Nzg0OTkyODg2MzAyMzAxODM2NjgzNTY3NTM5OTk0OTc0MDQyOTMzMjQ2ODE4NjM0MDUxODE3MjQ4NzA3MzM2MDgyMjIyMDQ0OTA1NTM0MDU4MjU2ODQ2MTU2ODY0NTI1OTk1NDg3MzMwMzYxNjk1Mzc3NjM5Mzg1MzE3NDg0NTEzMjA4MTEyMTk3NjMyNzQ2Mjc0MDM1NDkzMDc0NDQ4NzQyOTYxNzIwMjU4NTAxNTUxMDc0NDI5ODUzMDEwMTU0NzcwNjgyMTU5MDE4ODczMzUxNTg4MDczMzUyNzQ0OTc4MDk2MzE2MzkwOTgzMDA3NzYxNjM1NzUwNjg0NTUyMzIxNTI4OTI5NzYyNDA4NjkxNDU0NTM3ODUxMTA4MjUzNDIyOTYyMDExNjU2MzI2MDE2ODQ5NDUyMzkwNjU2NjcwOTQxODE2NjAxMTExMjc1NDUyOTc2NjE4MzU1NDU3OTMyMTIyNDk0MDk1MTE3NzM5NDA4ODQ2NTU5NjcxMjYyMDA3NjI0MDA2NzM3MDU4OTAzNjkyNDAyNDcyODM3NTA3NjIxMDQ3NzI2NzQ4ODY3OTAwODAxNjU3OTU4ODY5NjE5MTE5NDA2MDEyNzMxOTAzNTE5NTM3MDEzNzE2MDkzNjg4MjQwMjI0NDM5OTY5OTE3MjAxNzgzNTE0NDUzNzQ4ODQ4NjM5NjkwNjE0NDIxNzcyMDAyODk5Mjg2Mzk0MTI4ODIxNzE4NTM1MzkxNDk5MTU4MzQwMDQyMTY4Mjc1MTAwMDYwMzU5NjY1NTc5MDk5MDgxNTUyNTEyNjE1NDM5NDM0NDY0MTMzNjM5Nzc5Mzc5MTQ5NzA2ODI1MzkzNjc3MTAxNzAzMTk4MDg2NzcwNjcwNzQ5MDIyNDA0MTA3NTgyNjMzNzM4MzUzODY1MTgyNTQ5MzY3OTUwMzc3MTkzNDgzNjA5NDY1NTgwMjc3NjMzMTY2NDI2MTYzMTc0MDE0ODI4MTc2MzQ4Nzc2NTg1Mjc0NjU3NzgwODAxOTYzMzY3OSIsCisKKwkgLyogZ2VuZXJpYyB1bnJlc3RyaWN0ZWQgbW9kdWxpICovCisJICIxNzkzMzYwMTE5NDg2MDExMzM3MjIzNzA3MDU2MjE2NTEyODM1MDAyNzMyMDA3MjE3Njg0NDIyNjY3MzI4Nzk0NTg3MzM3MDc1MTI0NTQzOTU4Nzc5MjM3MTk2MDYxNTA3Mzg1NTY2OTI3NDA4NzgwNTA1NTUwNzk3NzMyMzAyNDg4Njg4MDk4NTA2MjAwMjg1MzMzMTQyNDIwMyIsCisJICIyODkzNTI3NzIwNzA5NjYxMjM5NDkzODk2NTYyMzM5NTQ0MDg4NjIwMzc1NzM2NDkwNDA4NDY4MDExODgzMDMwNDY5OTM5OTA0MzY4MDg2MDkyMzM2NDU4Mjk4MjIxMjQ1NzA3ODk4OTMzNTgzMTkwNzEzMTg4MTc3Mzk5NDAxODUyNjI3NzQ5MjEwOTk0NTk1OTc0NzkxNzgyNzkwMjUzOTQ2NTM5MDQzOTYyMjEzMDI3MDc0OTIyNTU5NTcyMzEyMTQxMTgxNzg3NDM0Mjc4NzA4NzgzMjA3OTY2NDU5MDE5NDc5NDg3IiwKKwkgIjM0Nzc0MzE1OTQzOTg3NjYyNjA3OTI1Mjc5Njc5NzQyMjIyMzE3NzUzNTQ0NzM4ODIwNjYwNzYwNzE4MTY2MzkwMzA0NTkwNzU5MTIwMTk0MDQ3ODIyMzYyMTcyMjExODE3MzI3MDg5ODQ4NzU4Mjk4NzEzNzcwODY1NjQxNDM0NDY4NTgxNjE3OTQyMDg1NTE2MDk4NjM0MDQ1Nzk3MzgyMDE4Mjg4MzUwODM4NzU4ODE2MzEyMjM1NDA4OTI2NDM5NTYwNDc5NjY3NTI3ODk2NjExNzU2NzI5NDgxMjcxNDgxMjc5NjgyMDU5NjU2NDg3NjQ1MDcxNjA2NjI4MzEyNjcyMDAxMDg1OTA0MTQ4NDc4NjUyOTA1NjQ1Nzg5NjM2NzY4MzEyMjk2MDQxMTEzNjMxOSIsCisJICI0NzI2NjQyODk1NjM1NjM5MzE2NDY5NzM2NTA5ODEyMDQxODk3NjQwMDYwMjcwNjA3MjMxMjczNTkyNDA3MTc0NTQzODUzMjIxODIzNzk3OTMzMzM1MTc3NDkwNzMwODE2ODM0MDY5MzMyNjY4NzMxNzQ0MzcyMTE5MzI2NjIxNTE1NTczNTgxNDUxMDc5MjE0ODc2ODU3NjQ5ODQ5MTE5OTEyMjc0NDM1MTM5OTQ4OTQ1MzUzMzU1MzIwMzgzMzMxODY5MTY3ODI2MzI0MTk0MTcwNjI1Njk5NjE5NzQ2MDQyNDAyOTAxMjQxOTAxMjYzNDY3MTg2MjI4MzUzMjM0MjY1NjMwOTY3NzE3MzYwMjUwOTQ5ODQxNzk3NjA5MTUwOTE1NDM2MDAzOTg5MzE2NTAzNzYzNzAzNDczNzAyMDMyNzM5OTkxMDQwOTg4NTc5ODE4NTc3MTAwMzUwNTMyMDU4Mzk2NzczNzI5MzQxNTk3OTkxNzMxNzMzODk4NTgzNzM4NTczNDc0NzQ3ODM2NDI0MjAyMDM4MDQxNjg5MjA1NjY1MDg0MTQ3MDg2OTI5NDUyNzU0MzU5NzM0OTI1MDI5OTUzOTY4MjQzMDYwNTE3MzMyMTAyOTAyNjU1NTU0NjgzMjQ3MzA0ODYwMDMyNzAzNjg0NTc4MTk3MDI4OTI4ODg5ODMxNzg4ODQyNzUxNzM2NDk0NTMxNjcwOTA4MTE3Mzg0MDE4NjE1MDc5NDM5NzQ3OTA0NTAzNDAwODI1Nzc5MzQzNjgxNzY4MzM5MjM3NTI3NDYzNTc5NDgzNTI0NTY5NTg4NyIsCisJICI0MzY0NjM4MDg1MDU5NTc3Njg1NzQ4OTQ4NzAzOTQzNDk3Mzk2MjMzNDY0NDA2MDE5NDU5NjExNjEyNTQ0NDAwNzIxNDMyOTgxNTIwNDAxMDU2NzY0OTEwNDgyNDgxMTAxNDYyNzg3NTI4NTc4Mzk5MzA1MTU3NjYxNjc0NDE0MDcwMjE1MDEyMjk5MjQ3MjEzMzU2NDQ1NTczNDIyNjU4NjQ2MDY1NjkwMDAxMTc3MTQ5MzUxODU1NjY4NDI0NTM2MzA4Njg4NDkxMjE0ODAxNzk2OTE4MzgzOTk1NDU2NDQzNjU1NzExMDY3NTc3MzEzMTczNzE3NTg1NTc5OTA3ODE4ODA2OTEzMzY2OTU1ODQ3OTkzMTMzMTM2ODcyODc0Njg4OTQxNDg4MjM3NjE3ODU1ODI5ODI1NDk1ODYxODM3NTY4MDY0NDkwMTc1NDI2MjIyNjc4NzQyNzUxMDM4Nzc0ODE0NzU1MzQ5OTEyMDE4NDk5MTIyMjI2NzAxMDIwNjk5NTE2ODc1NzI5MTc5Mzc2MzQ0Njc3NzgwNDI4NzQzMTU0NjMyMzgwNjIwMDkyMDI5OTIwODc2MjA5NjM3NzE3NTk2NjY0NDgyNjY1MzI4NTgwNzk0MDI2Njk5MjAwMjUyMjQyMjA2MTM0MTk0NDEwNjk3MTg0ODI4MzczOTk2MTI2NDQ5Nzg4Mzk5MjUyMDcxMDk4NzA4NDAyNzgxOTQwNDIxNTg3NDg4NDU0NDUxMzE3MjkxMzcxMTcwOTg1MjkwMjg4ODY3NzAwNjM3MzY0ODc0MjA2MTMxNDQwNDU4MzY4MDM5ODU2MzU2NTQxOTI0ODIzOTU4ODI2MDM1MTE5NTA1NDc4MjY0MzkwOTI4MzI4MDA1MzIxNTI1MzQwMDM5MzY5MjYwMTc2MTI0NDY2MDYxMzU2NTUxNDY0NDU2MjA2MjMzOTU3ODg5Nzg3MjY3NDQ3Mjg1MDMwNTg2NzAwNDY4ODU4NzYyNTE1MjcxMjIzNTAyNzU3NTA5OTUyMjciLAorCSAiMTE0MjQxNjc0NzMzNTE4MzYzOTgwNzgzMDYwNDI2MjQzNjIyNzc5NTY0Mjk0NDA1MjExMzcwNjE4ODk3MDI2MTE3NjYzNDg3NjA2OTIyMDYyNDMxNDA0MTM0MTEwNzczOTQ1ODMxODA3MjY4NjMyNzcwMTIwMTY2MDIyNzkyOTAxNDQxMjY3ODUxMjk1Njk0NzQ5MDkxNzM1ODQ3ODk4MjIzNDE5ODY3NDI3MTkyMzAzMzE5NDYwNzI3MzAzMTk1NTU5ODQ0ODQ5MTE3MTY3OTcwNTg4NzU5MDU0MDA5OTk1MDQzMDU4NzcyNDU4NDkxMTk2ODc1MDkwMjMyMzI3OTAyNzM2Mzc0NjY4MjEwNTI1NzY4NTkyMzI0NTI5ODIwNjE4MzEwMDk3NzA3ODYwMzE3ODU2NjkwMzAyNzE1NDIyODY2MDM5NTYxMTg3NTU1ODU2ODM5OTYxMTg4OTYyMTUyMTM0ODg4NzUyNTMxMDE4OTQ2NjM0MDMwNjk2Nzc3NDU5NDgzMDU4OTM4NDk1MDU0MzQyMDE3NjM3NDUyMzI4OTU3ODA3MTE5NzI0MzIwMTEzNDQ4NTc1MjE2OTEwMTc4OTYzMTY4NjE0MDMyMDY0NDk0MjEzMzIyNDM2NTg4NTU0NTM0MzU3ODQwMDY1MTcyMDI4OTQxODE2NDA1NjI0MzM1NzUzOTA4MjEzODQyMTA5NjAxMTc1MTg2NTAzNzQ2MDIyNTY2MDEwOTEzNzk2NDQwMzQyNDQzMzIyODUwNjU5MzU0MTMyMzM1NTc5OTgzMzE1NjI3NDkxNDAyMDI5NjU4NDQyMTkzMzYyOTg5NzAwMTE1MTM4ODI1NjQ5MzU1Mzg3MDQyODk0NDY5NjgzMjIyODE0NTE5MDc0ODczNjIwNDY1MTE0NjEyMjEzMjk3OTk4OTczNTA5OTMzNzA1NjA2OTc1MDU4MDk2ODY0Mzg3ODIwMzYyMzUzNzIxMzcwMTU3MzEzMDQ3NzkwNzI0MzAyNjA5ODY0NjAyNjk4OTQ1MjIxNTkxMDMwMDgyNjA0OTU1MDMwMDUyNjcxNjU5Mjc1NDI5NDk0Mzk1MjYyNzI3MzY1ODY2MjY3MDk1ODE3MjEwMzIxODk1MzI3MjYzODk2NDM2MjU1OTA2ODAxMDU3ODQ4NDQyNDYxNTI3MDI2NzAxNjkzMDQyMDM3ODMwNzIyNzUwODkxOTQ3NTQ4ODk1MTE5NzM5MTYyMDciLAorCSAiMTIxNDg1NTYzNjgxNjU2MjYzNzUwMjU4NDA2MDE2MzQwMzgzMDI3MDcwNTAwMDYzNDcxMzQ4MzAxNTEwMTM4NDg4MTg3MTk3ODQ0NjgwMTIyNDc5ODUzNjE1NTQwNjg5NTgyMzMwNTAzNTQ2NzU5MTYzMjUzMTA2NzU0Nzg5MDk0ODY5NTExNzE3MjA3Njk1NDIyMDcyNzA3NTY4ODA0ODc1MTAyMjQyMTE5ODcxMjAzMjg0ODg5MDA1NjM1Nzg0NTk3NDI0NjU2MDc0ODM0NzkxODYzMDA1MDg1MzkzMzY5Nzc5MjI1NDk1NTg5MDQzOTcyMDI5NzU2MDY5MzU3OTQwMDI5NzA2MjM5NjkwNDMwNjI3MDE0NTg4NjgzMDcxOTMwOTI5NjM1Mjc2NTI5NTcxMjE4MzA0MDc3MzE0NjQxOTAyMjg3NTE2NTM4Mjc3ODAwNzA0MDEwOTk1NzYwOTczOTU4OTg3NTU5MDg4NTcwMTEyNjE5NzkwNjA2MzYyMDEzMzk1NDg5MzIxNjYxMjY3ODgzODUwNzU0MDc3NzEzODQzNzc5NzcwNTYwMjQ1MzcxOTU1OTAxNzYzMzk4NjQ4NjY0OTUyMzYxMTk3NTg2NTAwNTcxMjM3MTE5NDA2NzYxMjI2MzMzMDMzNTU5MDUyNjE3NjA4NzAwNDQyMTM2MzU5ODQ3MDMwMjczMTM0OTEzODc3MzIwNTkwMTQ0NzcwNDY4MjE4MTUxNzkwNDA2NDczNTYzNjUxODQ2MjQ1MjI0Mjc5MTY3NjU0MTcyNTI5MjM3ODkyNTU2ODI5Njg1ODAxMDE1MTg1MjMyNjMxNjc3NzUxMTkzNTAzNzUzMTAxNzQxMzkxMDUwNjkyMTkyMjQ1MDY2NjkzMzIwMjI3ODQ4OTAyNDUyMTI2Mzc5ODQ4MjIzNzE1MDA1NjgzNTc0NjQ1NDg0MjY2MjA0ODY5MjEyNzE3MzgzNDQzMzA4OTAxNjEwNzg1NDQ5MTA5NzQ1NjcyNTAxNjMyNzcwOTY2MzE5OTczODIzODQ0MjE2NDg0MzE0NzEzMjc4OTE1MzcyNTUxMzI1NzE2NzkxNTU1NTE2MjA5NDk3MDg1MzU4NDQ0Nzk5MzEyNTQ4ODYwNzY5NjAwODE2OTgwNzM3NDczNjcxMTI5NzAwNzQ3MzgxMjI1NjI3MjI0NTQ4OTQwNTg5ODQ3MDI5NzE3ODczODAyOTQ4NDQ1OTY5MDgzNjI1MDU2MDQ5NTQ2MTU3OTUzMzI1NDQ3MzMxNjM0MDYwODIxNzg3Njc4MTk4NjE4ODcwNTkyODI3MDczNTY5NTc1MjgzMDgyNTUyNzk2MzgzODM1NTQxOTc2MjUxNjI0NjAyODY4MDI4MDk4ODAyMDQwMTkxNDU1MTgyNTQ4NzM0OTk5MDMwNjk3NjMwNDA5MzEwOTM4NDQ1MTQzODgxMzI1MTIxMTA1MTU5NzM5MjEyNzQ5MTQ2NDg5ODc5NzQwNjc4OTE3NTQ1MzA2Nzk2MDA3MjAwODU5MDYxNDg4NjUzMjMzMzAxNTg4MTE3MTM2NzEwNDQ0NTA0NDcxODE0NDMxMjQxNjgxNTcxMjIxNjYxMTU3NjIyMTU0NjQ1NTk2ODc3MDgwMTQxMzQ0MDc3ODQyMzk3OSIsCisJIE5VTEwKKyAgICAgIH07CisgICAgICBsb2cgPSBmb3BlbigibG9ncy9leHB0LmxvZyIsICJ3Iik7CisgICAgICBsb2diID0gZm9wZW4oImxvZ3MvZXhwdF9kci5sb2ciLCAidyIpOworICAgICAgbG9nYyA9IGZvcGVuKCJsb2dzL2V4cHRfMmsubG9nIiwgInciKTsKKyAgICAgIGxvZ2QgPSBmb3BlbigibG9ncy9leHB0XzJrbC5sb2ciLCAidyIpOworICAgICAgZm9yIChuID0gMDsgcHJpbWVzW25dOyBuKyspIHsKKwkgU0xFRVA7CisJIG1wX3JlYWRfcmFkaXgoJmEsIHByaW1lc1tuXSwgMTApOworCSBtcF96ZXJvKCZiKTsKKwkgZm9yIChyciA9IDA7IHJyIDwgKHVuc2lnbmVkKSBtcF9jb3VudF9iaXRzKCZhKTsgcnIrKykgeworCSAgICBtcF9tdWxfMigmYiwgJmIpOworCSAgICBiLmRwWzBdIHw9IGxiaXQoKTsKKwkgICAgYi51c2VkICs9IDE7CisJIH0KKwkgbXBfc3ViX2QoJmEsIDEsICZjKTsKKwkgbXBfbW9kKCZiLCAmYywgJmIpOworCSBtcF9zZXQoJmMsIDMpOworCSByciA9IDA7CisJIHR0ID0gLTE7CisJIGRvIHsKKwkgICAgZ2cgPSBUSU1GVU5DKCk7CisJICAgIERPKG1wX2V4cHRtb2QoJmMsICZiLCAmYSwgJmQpKTsKKwkgICAgZ2cgPSAoVElNRlVOQygpIC0gZ2cpID4+IDE7CisJICAgIGlmICh0dCA+IGdnKQorCSAgICAgICB0dCA9IGdnOworCSB9IHdoaWxlICgrK3JyIDwgMTApOworCSBtcF9zdWJfZCgmYSwgMSwgJmUpOworCSBtcF9zdWIoJmUsICZiLCAmYik7CisJIG1wX2V4cHRtb2QoJmMsICZiLCAmYSwgJmUpOwkvKiBjXihwLTEtYikgbW9kIGEgKi8KKwkgbXBfbXVsbW9kKCZlLCAmZCwgJmEsICZkKTsJLyogY15iICogY14ocC0xLWIpID09IGNecC0xID09IDEgKi8KKwkgaWYgKG1wX2NtcF9kKCZkLCAxKSkgeworCSAgICBwcmludGYoIkRpZmZlcmVudCAoJWQpISEhXG4iLCBtcF9jb3VudF9iaXRzKCZhKSk7CisJICAgIGRyYXcoJmQpOworCSAgICBleGl0KDApOworCSB9CisJIHByaW50ZigiRXhwb25lbnRpYXRpbmdcdCU0ZC1iaXQgPT4gJTlsbHUvc2VjLCAlOWxsdSBjeWNsZXNcbiIsCisJCW1wX2NvdW50X2JpdHMoJmEpLCBDTEtfUEVSX1NFQyAvIHR0LCB0dCk7CisJIGZwcmludGYobiA8IDQgPyBsb2dkIDogKG4gPCA5KSA/IGxvZ2MgOiAobiA8IDE2KSA/IGxvZ2IgOiBsb2csCisJCSAiJWQgJTlsbHVcbiIsIG1wX2NvdW50X2JpdHMoJmEpLCB0dCk7CisgICAgICB9CisgICB9CisgICBmY2xvc2UobG9nKTsKKyAgIGZjbG9zZShsb2diKTsKKyAgIGZjbG9zZShsb2djKTsKKyAgIGZjbG9zZShsb2dkKTsKKworICAgbG9nID0gZm9wZW4oImxvZ3MvaW52bW9kLmxvZyIsICJ3Iik7CisgICBmb3IgKGNudCA9IDQ7IGNudCA8PSAxMjg7IGNudCArPSA0KSB7CisgICAgICBTTEVFUDsKKyAgICAgIG1wX3JhbmQoJmEsIGNudCk7CisgICAgICBtcF9yYW5kKCZiLCBjbnQpOworCisgICAgICBkbyB7CisJIG1wX2FkZF9kKCZiLCAxLCAmYik7CisJIG1wX2djZCgmYSwgJmIsICZjKTsKKyAgICAgIH0gd2hpbGUgKG1wX2NtcF9kKCZjLCAxKSAhPSBNUF9FUSk7CisKKyAgICAgIHJyID0gMDsKKyAgICAgIHR0ID0gLTE7CisgICAgICBkbyB7CisJIGdnID0gVElNRlVOQygpOworCSBETyhtcF9pbnZtb2QoJmIsICZhLCAmYykpOworCSBnZyA9IChUSU1GVU5DKCkgLSBnZykgPj4gMTsKKwkgaWYgKHR0ID4gZ2cpCisJICAgIHR0ID0gZ2c7CisgICAgICB9IHdoaWxlICgrK3JyIDwgMTAwMCk7CisgICAgICBtcF9tdWxtb2QoJmIsICZjLCAmYSwgJmQpOworICAgICAgaWYgKG1wX2NtcF9kKCZkLCAxKSAhPSBNUF9FUSkgeworCSBwcmludGYoIkZhaWxlZCB0byBpbnZlcnRcbiIpOworCSByZXR1cm4gMDsKKyAgICAgIH0KKyAgICAgIHByaW50ZigiSW52ZXJ0aW5nIG1vZFx0JTRkLWJpdCA9PiAlOWxsdS9zZWMsICU5bGx1IGN5Y2xlc1xuIiwKKwkgICAgIG1wX2NvdW50X2JpdHMoJmEpLCBDTEtfUEVSX1NFQyAvIHR0LCB0dCk7CisgICAgICBmcHJpbnRmKGxvZywgIiVkICU5bGx1XG4iLCBjbnQgKiBESUdJVF9CSVQsIHR0KTsKKyAgIH0KKyAgIGZjbG9zZShsb2cpOworCisgICByZXR1cm4gMDsKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9kZW1vL3RpbWluZy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIgJCAqLworLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6Mzg6NDcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9kZXAucGwgYi9saWJ0b21tYXRoL2RlcC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzllMjdlCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9kZXAucGwKQEAgLTAsMCArMSwxMjMgQEAKKyMhL3Vzci9iaW4vcGVybCAKKyMKKyMgV2FsayB0aHJvdWdoIHNvdXJjZSwgYWRkIGxhYmVscyBhbmQgbWFrZSBjbGFzc2VzCisjCisjdXNlIHN0cmljdDsKKworbXkgJWRlcGxpc3Q7CisKKyNvcGVuIGNsYXNzIGZpbGUgYW5kIHdyaXRlIHByZWFtYmxlIAorb3BlbihDTEFTUywgIj50b21tYXRoX2NsYXNzLmgiKSBvciBkaWUgIkNvdWxkbid0IG9wZW4gdG9tbWF0aF9jbGFzcy5oIGZvciB3cml0aW5nXG4iOworcHJpbnQgQ0xBU1MgIiNpZiAhKGRlZmluZWQoTFRNMSkgJiYgZGVmaW5lZChMVE0yKSAmJiBkZWZpbmVkKExUTTMpKVxuI2lmIGRlZmluZWQoTFRNMilcbiNkZWZpbmUgTFRNM1xuI2VuZGlmXG4jaWYgZGVmaW5lZChMVE0xKVxuI2RlZmluZSBMVE0yXG4jZW5kaWZcbiNkZWZpbmUgTFRNMVxuXG4jaWYgZGVmaW5lZChMVE1fQUxMKVxuIjsKKworZm9yZWFjaCBteSAkZmlsZW5hbWUgKGdsb2IgImJuKi5jIikgeworICAgbXkgJGRlZmluZSA9ICRmaWxlbmFtZTsKKworcHJpbnQgIlByb2Nlc3NpbmcgJGZpbGVuYW1lXG4iOworCisgICAjIGNvbnZlcnQgZmlsZW5hbWUgdG8gdXBwZXIgY2FzZSBzbyB3ZSBjYW4gdXNlIGl0IGFzIGEgZGVmaW5lIAorICAgJGRlZmluZSA9fiB0ci9bYS16XS9bQS1aXS87CisgICAkZGVmaW5lID1+IHRyL1wuL18vOworICAgcHJpbnQgQ0xBU1MgIiNkZWZpbmUgJGRlZmluZVxuIjsKKworICAgIyBub3cgY29weSB0ZXh0IGFuZCBhcHBseSAjaWZkZWYgYXMgcmVxdWlyZWQgCisgICBteSAkYXBwbHkgPSAwOworICAgb3BlbihTUkMsICI8JGZpbGVuYW1lIik7CisgICBvcGVuKE9VVCwgIj50bXAiKTsKKworICAgIyBmaXJzdCBsaW5lIHdpbGwgYmUgdGhlICNpZmRlZgorICAgbXkgJGxpbmUgPSA8U1JDPjsKKyAgIGlmICgkbGluZSA9fiAvaW5jbHVkZS8pIHsKKyAgICAgIHByaW50IE9VVCAkbGluZTsKKyAgIH0gZWxzZSB7CisgICAgICBwcmludCBPVVQgIiNpbmNsdWRlIDx0b21tYXRoLmg+XG4jaWZkZWYgJGRlZmluZVxuJGxpbmUiOworICAgICAgJGFwcGx5ID0gMTsKKyAgIH0KKyAgIHdoaWxlICg8U1JDPikgeworICAgICAgaWYgKCEoJF8gPX4gL3RvbW1hdGhcLmgvKSkgeworICAgICAgICAgcHJpbnQgT1VUICRfOworICAgICAgfQorICAgfQorICAgaWYgKCRhcHBseSA9PSAxKSB7CisgICAgICBwcmludCBPVVQgIiNlbmRpZlxuIjsKKyAgIH0KKyAgIGNsb3NlIFNSQzsKKyAgIGNsb3NlIE9VVDsKKworICAgdW5saW5rKCRmaWxlbmFtZSk7CisgICByZW5hbWUoInRtcCIsICRmaWxlbmFtZSk7Cit9CitwcmludCBDTEFTUyAiI2VuZGlmXG5cbiI7CisKKyMgbm93IGRvIGNsYXNzZXMgCisKK2ZvcmVhY2ggbXkgJGZpbGVuYW1lIChnbG9iICJibiouYyIpIHsKKyAgIG9wZW4oU1JDLCAiPCRmaWxlbmFtZSIpIG9yIGRpZSAiQ2FuJ3Qgb3BlbiBzb3VyY2UgZmlsZSFcbiI7IAorCisgICAjIGNvbnZlcnQgZmlsZW5hbWUgdG8gdXBwZXIgY2FzZSBzbyB3ZSBjYW4gdXNlIGl0IGFzIGEgZGVmaW5lIAorICAgJGZpbGVuYW1lID1+IHRyL1thLXpdL1tBLVpdLzsKKyAgICRmaWxlbmFtZSA9fiB0ci9cLi9fLzsKKworICAgcHJpbnQgQ0xBU1MgIiNpZiBkZWZpbmVkKCRmaWxlbmFtZSlcbiI7CisgICBteSAkbGlzdCA9ICRmaWxlbmFtZTsKKworICAgIyBzY2FuIGZvciBtcF8qIGFuZCBtYWtlIGNsYXNzZXMKKyAgIHdoaWxlICg8U1JDPikgeworICAgICAgbXkgJGxpbmUgPSAkXzsKKyAgICAgIHdoaWxlICgkbGluZSA9fiBtLyhmYXN0XykqKHNfKSptcFxfW2Etel8wLTldKi8pIHsKKyAgICAgICAgICAkbGluZSA9ICQnOworICAgICAgICAgICMgbm93ICQmIGlzIHRoZSBtYXRjaCwgd2Ugd2FudCB0byBza2lwIG92ZXIgTFRNIGtleXdvcmRzIGxpa2UKKyAgICAgICAgICAjIG1wX2ludCwgbXBfd29yZCwgbXBfZGlnaXQKKyAgICAgICAgICBpZiAoISgkJiBlcSAibXBfZGlnaXQiKSAmJiAhKCQmIGVxICJtcF93b3JkIikgJiYgISgkJiBlcSAibXBfaW50IikpIHsKKyAgICAgICAgICAgICBteSAkYSA9ICQmOworICAgICAgICAgICAgICRhID1+IHRyL1thLXpdL1tBLVpdLzsKKyAgICAgICAgICAgICAkYSA9ICJCTl8iIC4gJGEgLiAiX0MiOworICAgICAgICAgICAgIGlmICghKCRsaXN0ID1+IC8kYS8pKSB7CisgICAgICAgICAgICAgICAgcHJpbnQgQ0xBU1MgIiAgICNkZWZpbmUgJGFcbiI7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgICRsaXN0ID0gJGxpc3QgLiAiLCIgLiAkYTsKKyAgICAgICAgICB9CisgICAgICB9CisgICB9CisgICBAZGVwbGlzdHskZmlsZW5hbWV9ID0gJGxpc3Q7CisKKyAgIHByaW50IENMQVNTICIjZW5kaWZcblxuIjsKKyAgIGNsb3NlIFNSQzsKK30KKworcHJpbnQgQ0xBU1MgIiNpZmRlZiBMVE0zXG4jZGVmaW5lIExUTV9MQVNUXG4jZW5kaWZcbiNpbmNsdWRlIDx0b21tYXRoX3N1cGVyY2xhc3MuaD5cbiNpbmNsdWRlIDx0b21tYXRoX2NsYXNzLmg+XG4jZWxzZVxuI2RlZmluZSBMVE1fTEFTVFxuI2VuZGlmXG4iOworY2xvc2UgQ0xBU1M7CisKKyNub3cgbGV0J3MgbWFrZSBhIGNvb2wgY2FsbCBncmFwaC4uLiAKKworb3BlbihPVVQsIj5jYWxsZ3JhcGgudHh0Iik7CiskaW5kZW50ID0gMDsKK2ZvcmVhY2ggKGtleXMgJWRlcGxpc3QpIHsKKyAgICRsaXN0ID0gIiI7CisgICBkcmF3X2Z1bmMoQGRlcGxpc3R7JF99KTsKKyAgIHByaW50IE9VVCAiXG5cbiI7Cit9CitjbG9zZShPVVQpOworCitzdWIgZHJhd19mdW5jKCkKK3sKKyAgIG15IEBmdW5jcyA9IHNwbGl0KCIsIiwgJF9bMF0pOworICAgaWYgKCRsaXN0ID1+IC9AZnVuY3NbMF0vKSB7CisgICAgICByZXR1cm47CisgICB9IGVsc2UgeworICAgICAgJGxpc3QgPSAkbGlzdCAuIEBmdW5jc1swXTsKKyAgIH0KKyAgIGlmICgkaW5kZW50ID09IDApIHsgfQorICAgZWxzaWYgKCRpbmRlbnQgPj0gMSkgeyBwcmludCBPVVQgInwgICAiIHggKCRpbmRlbnQgLSAxKSAuICIrLS0tPiI7IH0KKyAgIHByaW50IE9VVCBAZnVuY3NbMF0gLiAiXG4iOyAgIAorICAgc2hpZnQgQGZ1bmNzOworICAgICAgbXkgJHRlbXAgPSAkbGlzdDsKKyAgIGZvcmVhY2ggbXkgJGkgKEBmdW5jcykgeworICAgICAgKyskaW5kZW50OworICAgICAgZHJhd19mdW5jKEBkZXBsaXN0eyRpfSk7CisgICAgICAtLSRpbmRlbnQ7CisgICB9CisgICAgICAkbGlzdCA9ICR0ZW1wOworfQorCisKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvZXRjLzJrcHJpbWUuMSBiL2xpYnRvbW1hdGgvZXRjLzJrcHJpbWUuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDFkZWQxCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ldGMvMmtwcmltZS4xCkBAIC0wLDAgKzEsMiBAQAorMjU2LWJpdHMgKGsgPSAzNjExMykgPSAxMTU3OTIwODkyMzczMTYxOTU0MjM1NzA5ODUwMDg2ODc5MDc4NTMyNjk5ODQ2NjU2NDA1NjQwMzk0NTc1ODQwMDc5MTMxMjk2MDM4MjMKKzUxMi1iaXRzIChrID0gMzgxMTcpID0gMTM0MDc4MDc5Mjk5NDI1OTcwOTk1NzQwMjQ5OTgyMDU4NDYxMjc0NzkzNjU4MjA1OTIzOTMzNzc3MjM1NjE0NDM3MjE3NjQwMzAwNzM1NDY5NzY4MDE4NzQyOTgxNjY5MDM0Mjc2OTAwMzE4NTgxODY0ODYwNTA4NTM3NTM4ODI4MTE5NDY1Njk5NDY0MzM2NDkwMDYwNDU5NzkKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvZXRjLzJrcHJpbWUuYyBiL2xpYnRvbW1hdGgvZXRjLzJrcHJpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDk4MThmCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ldGMvMmtwcmltZS5jCkBAIC0wLDAgKzEsODQgQEAKKy8qIE1ha2VzIHNhZmUgcHJpbWVzIG9mIGEgMmsgbmF0dXJlICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworaW50IHNpemVzW10gPSB7MjU2LCA1MTIsIDc2OCwgMTAyNCwgMTUzNiwgMjA0OCwgMzA3MiwgNDA5Nn07CisKK2ludCBtYWluKHZvaWQpCit7CisgICBjaGFyIGJ1ZlsyMDAwXTsKKyAgIGludCB4LCB5OworICAgbXBfaW50IHEsIHA7CisgICBGSUxFICpvdXQ7CisgICBjbG9ja190IHQxOworICAgbXBfZGlnaXQgejsKKyAgIAorICAgbXBfaW5pdF9tdWx0aSgmcSwgJnAsIE5VTEwpOworICAgCisgICBvdXQgPSBmb3BlbigiMmtwcmltZS4xIiwgInciKTsKKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2Yoc2l6ZXMpIC8gc2l6ZW9mKHNpemVzWzBdKSk7IHgrKykgeworICAgdG9wOgorICAgICAgIG1wXzJleHB0KCZxLCBzaXplc1t4XSk7CisgICAgICAgbXBfYWRkX2QoJnEsIDMsICZxKTsKKyAgICAgICB6ID0gLTM7CisgICAgICAgCisgICAgICAgdDEgPSBjbG9jaygpOworICAgICAgIGZvcig7OykgeworICAgICAgICAgbXBfc3ViX2QoJnEsIDQsICZxKTsKKyAgICAgICAgIHogKz0gNDsKKworICAgICAgICAgaWYgKHogPiBNUF9NQVNLKSB7CisgICAgICAgICAgICBwcmludGYoIk5vIHByaW1lcyBvZiBzaXplICVkIGZvdW5kXG4iLCBzaXplc1t4XSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAgICAgICAgIAorICAgICAgICAgaWYgKGNsb2NrKCkgLSB0MSA+IENMT0NLU19QRVJfU0VDKSB7IAorICAgICAgICAgICAgcHJpbnRmKCIuIik7IGZmbHVzaChzdGRvdXQpOworLy8gICAgICAgICAgICBzbGVlcCgoY2xvY2soKSAtIHQxICsgQ0xPQ0tTX1BFUl9TRUMvMikvQ0xPQ0tTX1BFUl9TRUMpOworICAgICAgICAgICAgdDEgPSBjbG9jaygpOworICAgICAgICAgfQorICAgICAgICAgCisgICAgICAgICAvKiBxdWljayB0ZXN0IG9uIHEgKi8KKyAgICAgICAgIG1wX3ByaW1lX2lzX3ByaW1lKCZxLCAxLCAmeSk7CisgICAgICAgICBpZiAoeSA9PSAwKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgIH0KKworICAgICAgICAgLyogZmluZCAocS0xKS8yICovCisgICAgICAgICBtcF9zdWJfZCgmcSwgMSwgJnApOworICAgICAgICAgbXBfZGl2XzIoJnAsICZwKTsKKyAgICAgICAgIG1wX3ByaW1lX2lzX3ByaW1lKCZwLCAzLCAmeSk7CisgICAgICAgICBpZiAoeSA9PSAwKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgIH0KKworICAgICAgICAgLyogdGVzdCBvbiBxICovCisgICAgICAgICBtcF9wcmltZV9pc19wcmltZSgmcSwgMywgJnkpOworICAgICAgICAgaWYgKHkgPT0gMCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICB9CisKKyAgICAgICAgIGJyZWFrOworICAgICAgIH0KKyAgICAgICAKKyAgICAgICBpZiAoeSA9PSAwKSB7CisgICAgICAgICAgKytzaXplc1t4XTsKKyAgICAgICAgICBnb3RvIHRvcDsKKyAgICAgICB9CisgICAgICAgCisgICAgICAgbXBfdG9yYWRpeCgmcSwgYnVmLCAxMCk7CisgICAgICAgcHJpbnRmKCJcblxuJWQtYml0cyAoayA9ICVsdSkgPSAlc1xuIiwgc2l6ZXNbeF0sIHosIGJ1Zik7CisgICAgICAgZnByaW50ZihvdXQsICIlZC1iaXRzIChrID0gJWx1KSA9ICVzXG4iLCBzaXplc1t4XSwgeiwgYnVmKTsgZmZsdXNoKG91dCk7CisgICB9CisgICAKKyAgIHJldHVybiAwOworfSAgIAorICAgICAgIAorICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgIAorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2V0Yy8ya3ByaW1lLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozODo0NyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2V0Yy9kcnByaW1lLmMgYi9saWJ0b21tYXRoL2V0Yy9kcnByaW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxMzk4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvZXRjL2RycHJpbWUuYwpAQCAtMCwwICsxLDY0IEBACisvKiBNYWtlcyBzYWZlIHByaW1lcyBvZiBhIERSIG5hdHVyZSAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKworaW50IHNpemVzW10gPSB7IDErMjU2L0RJR0lUX0JJVCwgMSs1MTIvRElHSVRfQklULCAxKzc2OC9ESUdJVF9CSVQsIDErMTAyNC9ESUdJVF9CSVQsIDErMjA0OC9ESUdJVF9CSVQsIDErNDA5Ni9ESUdJVF9CSVQgfTsKK2ludCBtYWluKHZvaWQpCit7CisgICBpbnQgcmVzLCB4LCB5OworICAgY2hhciBidWZbNDA5Nl07CisgICBGSUxFICpvdXQ7CisgICBtcF9pbnQgYSwgYjsKKyAgIAorICAgbXBfaW5pdCgmYSk7CisgICBtcF9pbml0KCZiKTsKKyAgIAorICAgb3V0ID0gZm9wZW4oImRycHJpbWVzLnR4dCIsICJ3Iik7CisgICBmb3IgKHggPSAwOyB4IDwgKGludCkoc2l6ZW9mKHNpemVzKS9zaXplb2Yoc2l6ZXNbMF0pKTsgeCsrKSB7CisgICB0b3A6CisgICAgICAgcHJpbnRmKCJTZWVraW5nIGEgJWQtYml0IHNhZmUgcHJpbWVcbiIsIHNpemVzW3hdICogRElHSVRfQklUKTsKKyAgICAgICBtcF9ncm93KCZhLCBzaXplc1t4XSk7CisgICAgICAgbXBfemVybygmYSk7CisgICAgICAgZm9yICh5ID0gMTsgeSA8IHNpemVzW3hdOyB5KyspIHsKKyAgICAgICAgICAgYS5kcFt5XSA9IE1QX01BU0s7CisgICAgICAgfQorICAgICAgIAorICAgICAgIC8qIG1ha2UgYSBEUiBtb2R1bHVzICovCisgICAgICAgYS5kcFswXSA9IC0xOworICAgICAgIGEudXNlZCA9IHNpemVzW3hdOworICAgICAgIAorICAgICAgIC8qIG5vdyBsb29wICovCisgICAgICAgcmVzID0gMDsKKyAgICAgICBmb3IgKDs7KSB7IAorICAgICAgICAgIGEuZHBbMF0gKz0gNDsKKyAgICAgICAgICBpZiAoYS5kcFswXSA+PSBNUF9NQVNLKSBicmVhazsKKyAgICAgICAgICBtcF9wcmltZV9pc19wcmltZSgmYSwgMSwgJnJlcyk7CisgICAgICAgICAgaWYgKHJlcyA9PSAwKSBjb250aW51ZTsKKyAgICAgICAgICBwcmludGYoIi4iKTsgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgICAgbXBfc3ViX2QoJmEsIDEsICZiKTsKKyAgICAgICAgICBtcF9kaXZfMigmYiwgJmIpOworICAgICAgICAgIG1wX3ByaW1lX2lzX3ByaW1lKCZiLCAzLCAmcmVzKTsgIAorICAgICAgICAgIGlmIChyZXMgPT0gMCkgY29udGludWU7CisgICAgICAgICAgbXBfcHJpbWVfaXNfcHJpbWUoJmEsIDMsICZyZXMpOworICAgICAgICAgIGlmIChyZXMgPT0gMSkgYnJlYWs7CisJfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlcyAhPSAxKSB7CisgICAgICAgICAgIHByaW50ZigiRXJyb3Igbm90IERSIG1vZHVsdXNcbiIpOyBzaXplc1t4XSArPSAxOyBnb3RvIHRvcDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgbXBfdG9yYWRpeCgmYSwgYnVmLCAxMCk7CisgICAgICAgICAgIHByaW50ZigiXG5cbnAgPT0gJXNcblxuIiwgYnVmKTsKKyAgICAgICAgICAgZnByaW50ZihvdXQsICIlZC1iaXQgcHJpbWU6XG5wID09ICVzXG5cbiIsIG1wX2NvdW50X2JpdHMoJmEpLCBidWYpOyBmZmx1c2gob3V0KTsKKyAgICAgICAgfSAgICAgICAgICAgCisgICB9CisgICBmY2xvc2Uob3V0KTsKKyAgIAorICAgbXBfY2xlYXIoJmEpOworICAgbXBfY2xlYXIoJmIpOworICAgCisgICByZXR1cm4gMDsKK30KKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2V0Yy9kcnByaW1lLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozODo0NyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2V0Yy9kcnByaW1lcy4yOCBiL2xpYnRvbW1hdGgvZXRjL2RycHJpbWVzLjI4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkNDM4YWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2V0Yy9kcnByaW1lcy4yOApAQCAtMCwwICsxLDI1IEBACitEUiBzYWZlIHByaW1lcyBmb3IgMjgtYml0IGRpZ2l0cy4KKworMjI0LWJpdCBwcmltZToKK3AgPT0gMjY5NTk5NDY2NjcxNTA2Mzk3OTQ2NjcwMTUwODcwMTk2MzA2NzM2MzcxNDQ0MjI1NDA1NzI0ODExMDMzNDE4NDQxNDMKKworNTMyLWJpdCBwcmltZToKK3AgPT0gMTQwNTkxMDU2MDc5NDc0ODg2OTYyODI5MzI4MzY1MTg2OTMzMDg5Njc4MDM0OTQ2OTM0ODk0Nzg0Mzk4NjExNjQ0MTE5OTI0Mzk1OTgzOTk1OTQ3NDcwMDIxNDQwNzQ2NTg5Mjg1OTM1MDI4NDU3Mjk3NTI3OTcyNjAwMjU4MzE0MjM0MTk2ODY1MjgxNTE2MDk5NDAyMDMzNjg2OTE3NDcKKworNzg0LWJpdCBwcmltZToKK3AgPT0gMTAxNzQ1ODI1Njk3MDE5MjYwNzczOTIzNTE5NzU1ODc4NTY3NDYxMzE1MjgyMDE3NzU5ODI5MTA3NjA4OTE0MzY0MDc1Mjc1MjM1MjU0Mzk1NjIyNTgwNDQ3NDAwOTk0MTc1NTc4OTYzMTYzOTE4OTY3MTgyMDEzNjM5NjYwNjY5NzcxMTA4NDc1OTU3NjkyODEwODU3MDk4ODQ3MTM4OTAzMTYxMzA4NTAyNDE5NDEwMTQyMTg1NzU5MTUyNDM1NjgwMDY4NDM1OTE1MTU5NDAyNDk2MDU4NTEzNjExNDExNjg4OTAwMjQzMDM5CisKKzEwMzYtYml0IHByaW1lOgorcCA9PSA3MzYzMzUxMDgwMzk2MDQ1OTU4MDU5MjM0MDYxNDcxODQ1MzA4ODk5MjMzNzA1NzQ3Njg3NzIxOTE5Njk2MTI0MjIwNzMwNDAwOTkzMzE5NDQ5OTE1NzM5MjMxMTI1ODEyNjc1NDI1MDc5ODY0NTE5NTMyMjcxOTI5NzA0MDI4OTMwNjM4NTA0ODU3MzA3MDMwNzU4OTkyODYwMTM0NTEzMzcyOTE0NjgyNDkwMjc2OTE3MzM4OTE0ODY3MDQwMDE1MTMyNzk4Mjc3NzE3NDAxODM2MjkxNjEwNjUxOTQ4NzQ3Mjc5NjI1MTcxNDgxMDA3NzUyMjgzNjM0MjEwODM2OTE3NjQwNjU0Nzc1OTA4MjM5MTkzNjQwMTI5MTc5ODQ2MDU2MTk1MjYxNDA4MjE3OTg0MzcxMjcKKworMTU0MC1iaXQgcHJpbWU6CitwID09IDM4NTY0OTk4ODMwNzM2NTIxNDE3MjgxODY1Njk2NDUzMDI1ODA2NTkzNDkxOTY3MTMxMDIzMjIxNzU0ODAwNjI1MDQ0MTE4MjY1NDY4ODUxMjEwNzA1MzYwMzg1NzE3NTM2Nzk0NjE1MTgwMjYwNDk0MjA4MDc2NjA1Nzk4NjcxNjYwNzE5MzMzMTk5NTEzODA3ODA2MjUyMzk0NDIzMjgzNDEzNDMwMTA2MDAzNTk2MzMyNTEzMjQ2NjgyOTAzOTk0ODI5NTI4NjkwMTk4MjA1MTIwOTIxNTU3NTMzNzI2NDczNTg1NzUxMzgyMTkzOTUzNTkyMTI3NDM5OTY1MDUwMjYxNDc2ODEwODQyMDcxNTczNjg0NTA1ODc4ODU0NTg4NzA2NjIzNDg0NTczOTI1OTI1OTAzNTA1NzQ3NTQ1NDcxMDg4ODY3NzEyMTg1MDA0MTM1MjAxMjg5MjczNDA1NjE0NDE1ODk5NDM4Mjc2NTM1NjI2MzQ2MDk4OTA0MjQxMDIwODc3OTc0MDAyOTE2MTY4MDk5OTUxODg1NDA2Mzc5Mjk1NTM2MjAwNDEzNDkzMTkwNDE5NzI3Nzg5NzEyMDc2MTY1MTYyMTc1NzgzCisKKzIwNzItYml0IHByaW1lOgorcCA9PSA1NDIxODkzOTEzMzE2OTYxNzI2NjE2NzA0NDA2MTkxODA1MzY3NDk5OTQxNjY0MTU5OTMzMzQxNTE2MDE3NDUzOTIxOTM0ODQ1OTAyOTY2MDA5Nzk2MDIzNzg2NzY2MjQ4MDgxMjk2MTM3Nzc5OTM0NjYyNDIyMDMwMjUwNTQ1NzM2OTI1NjI2ODkyNTEyNTA0NzE2MjgzNTgzMTg3NDM5NzgyODU4NjA3MjAxNDg0NDY0NDg4ODU3MDEwMDEyNzc1NjA1NzI1MjY5NDc2MTkzOTI1NTE1NzQ0OTA4MzkyODY0NTg0NTQ5OTQ0ODg2NjU3NDQ5OTE4MjI4Mzc3Njk5MTgwOTUxMTcxMjk1NDY0MTQxMjQ0NDg3NzcwMzM5NDEyMjM1NjU4MzE0MjAzOTA4NDY4NjQ0Mjk1MDQ3NzQ0Nzc5NDkxNTM3OTQ2ODk5NDg3NDc2ODAzNjIyMTI5NTQyNzg2OTMzMzU2NTM5MzU4OTAzNTI2MTkwNDE5MzY3Mjc0NjM3MTc5MjY3NDQ4NjgzMzgzNTgxNDk1NjgzNjg2NDM0MDMwMzc3Njg2NDk2MTY3Nzg1MjYwMTM2MTA0OTM2OTYxODYwNTU4OTkzMTgyNjgzMzk0MzI2NzE1NDEzMjgxOTU3MjQyNjEzMjk2MDY2OTk4MzEwMTY2NjYzNTk0NDA4NzQ4NDMxMDMwMjA2NjYxMDY1NjgyMjI0MDEwNDc3MjAyNjk5NTE1MzAyOTY4Nzk0OTA0NDQyMjQ1NDY2NTQ3MjkxMTE1MDQzNDY2NjA4NTk5MDcyOTYzNjQwOTcxMjY4MzQ4MzQyMzUyODcxNDcKKworMzA4MC1iaXQgcHJpbWU6CitwID09IDE0ODcyNTkxMzQ4MTQ3MDkyNjQwOTIwMzI2NDg1MjU5NzEwMzg4OTU4NjU2NDUxNDg5MDExODA1ODUzNDA0NTQ5ODU1MjQxNTUxMzUyNjAyMTc3ODg3NTgwMjc0MDA0NzgzMTIyNTYzMzk0OTYzODUyNzUwMTI0NjU2NjE1NzU1NzYyMDIyNTIwNjMxNDU2OTg3MzIwNzk4ODAyOTQ2NjQyMjA1Nzk3NjQ4NDg3Njc3MDQwNzY3NjE4NTMxOTcyMTY1NjMyNjI2NjAwNDY2MDI3MDM5NzMwNTA3OTgyMTgyNDYxNzA4MzU5NjIwMDU1OTg1NjE2Njk3MDY4NDQ0Njk0NDc0MzU0NjEwOTI1NDIyNjU3OTI0NDQ5NDc3MDY3Njk2MTU2OTUyNTIyNTYxMzA5MDEyNzE4NzAzNDEwMDU3Njg5MTI5NzQ0MzM2ODQ1MjE0MzYyMTEyNjMzNTgwOTc1MjI3MjY0NjIwODM5MTc5MzkwOTE3NjAwMjY2NTg5MjU3NTcwNzY3MzM0ODQxNzMyMDI5MjcxNDE0NDE0OTI1NzM3OTk5MTQyNDAyMjI2Mjg3OTU0MDU2MjM5NTMxMDkxMzE1OTQ1MjM2MjMzNTMwNDQ4OTgzMzk0ODE0OTQxMjAxMTI3MjM0NDU2ODk2NDc5ODY0NzUyNzkyNDI0NDYwODMxNTE0MTM2Njc1ODcwMDgxOTE2ODI1NjQzNzY0MTIzNDc5NjQxNDYxMTM4OTg1NjU4ODY2ODMxMzk0MDcwMDU5NDEzODM2NjkzMjU5OTc0NzUwNzY5MTA0ODgwODY2NjMyNTYzMzU2ODkxODExNTc5NTc1NzE0NDUwNjc0OTAxODc5Mzk1NTMxNjU5MDM3NzM1NTQyOTAyNjA1MzEwMDkxMjE4NzkwNDQxNzA3NjY2MTUyMzIzMDA5MzY2NzUzNjk0NTEyNjA3NDc2NzE0MzIwNzMzOTQ4Njc1MzA4MjA1Mjc0NzkxNzI0NjQxMDY0NDI0NTA3Mjc2NDAyMjY1MDM3NDY1ODYzNDAyNzk4MTYzMTg4MjEzOTUyMTA3MjYyNjgyOTE1MzU2NDg1MDYxOTA3MTQ2MTYwODMxNjM0MDMxODk5NDMzMzQ0MzEwNTY4NzYwMzgyODY1MzAzNjU3NTcxODczNjcxNDc0NDYwMDQ4NTU5MTIwMzMxMzczODYyMjUwNTMyNzU0MTk2MjYxMDI0MTcyMzYxMzM5NDg1MDMKKworNDExNi1iaXQgcHJpbWU6CitwID09IDEwOTUxMjExMTU3MTY2Nzc4MDI4NTY4MTEyOTAzOTIzOTUxMjg1ODgxNjg1OTI0MDkxMDk0OTQ5MDAxNzgwMDg5Njc5NTUyNTMwMDUxODM4MzE4NzI3MTU0MjMxNTE1NTE5OTk3MzQ4NTcxODQ1MzgxOTk4NjQ0Njk2MDU2NTc4MDU1MTkxMDY3MTc1Mjk2NTUwNDQwNTQ4MzMxOTc2ODc0NTk3ODI2MzYyOTcyNTUyMTk3NDI5OTQ3MzY3NTE1NDE4MTUyNjk3Mjc5NDA3NTE4NjA2NzAyNjg3NzQ5MDMzNDAyOTYwNDAwMDYxMTQwMTM5NzEzMDkyNTcwMjgzMzI4NDk2NzkwOTY4MjQ4MDAyNTA3NDI2OTE3MTg2MTA2NzA4MTIzNzQyNzI0MTQwODY4NjM3MTU3NjM3MjQ2MjI3OTc1MDk0MzcwNjI1MTgwODIzODMwNTYwNTAxNDQ2MjQ5NjI3NzYzMDIxNDc4OTA1MjEyNDk0NzcwNjAyMTUxNDgyNzUxNjM2ODgzMDEyNzU4NDcxNTUzMTYwNDIyNzk0MDU1NTc2MzI2MzkzNjYwNjY4NDc0NDI4NjE0MjIxNjQ4MzI2NTU4NzQ2NTU4MjQyMjE1Nzc4NDk5Mjg4NjMwMjMwMTgzNjY4MzU2NzUzOTk5NDk3NDA0MjkzMzI0NjgxODYzNDA1MTgxNzI0ODcwNzMzNjA4MjIyMjA0NDkwNTUzNDA1ODI1Njg0NjE1Njg2NDUyNTk5NTQ4NzMzMDM2MTY5NTM3NzYzOTM4NTMxNzQ4NDUxMzIwODExMjE5NzYzMjc0NjI3NDAzNTQ5MzA3NDQ0ODc0Mjk2MTcyMDI1ODUwMTU1MTA3NDQyOTg1MzAxMDE1NDc3MDY4MjE1OTAxODg3MzM1MTU4ODA3MzM1Mjc0NDk3ODA5NjMxNjM5MDk4MzAwNzc2MTYzNTc1MDY4NDU1MjMyMTUyODkyOTc2MjQwODY5MTQ1NDUzNzg1MTEwODI1MzQyMjk2MjAxMTY1NjMyNjAxNjg0OTQ1MjM5MDY1NjY3MDk0MTgxNjYwMTExMTI3NTQ1Mjk3NjYxODM1NTQ1NzkzMjEyMjQ5NDA5NTExNzczOTQwODg0NjU1OTY3MTI2MjAwNzYyNDAwNjczNzA1ODkwMzY5MjQwMjQ3MjgzNzUwNzYyMTA0NzcyNjc0ODg2NzkwMDgwMTY1Nzk1ODg2OTYxOTExOTQwNjAxMjczMTkwMzUxOTUzNzAxMzcxNjA5MzY4ODI0MDIyNDQzOTk2OTkxNzIwMTc4MzUxNDQ1Mzc0ODg0ODYzOTY5MDYxNDQyMTc3MjAwMjg5OTI4NjM5NDEyODgyMTcxODUzNTM5MTQ5OTE1ODM0MDA0MjE2ODI3NTEwMDA2MDM1OTY2NTU3OTA5OTA4MTU1MjUxMjYxNTQzOTQzNDQ2NDEzMzYzOTc3OTM3OTE0OTcwNjgyNTM5MzY3NzEwMTcwMzE5ODA4Njc3MDY3MDc0OTAyMjQwNDEwNzU4MjYzMzczODM1Mzg2NTE4MjU0OTM2Nzk1MDM3NzE5MzQ4MzYwOTQ2NTU4MDI3NzYzMzE2NjQyNjE2MzE3NDAxNDgyODE3NjM0ODc3NjU4NTI3NDY1Nzc4MDgwMTk2MzM2NzkKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvZXRjL2RycHJpbWVzLnR4dCBiL2xpYnRvbW1hdGgvZXRjL2RycHJpbWVzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yzk3ZjY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ldGMvZHJwcmltZXMudHh0CkBAIC0wLDAgKzEsOSBAQAorMzAwLWJpdCBwcmltZToKK3AgPT0gMjAzNzAzNTk3NjMzNDQ4NjA4NjI2ODQ0NTY4ODQwOTM3ODE2MTA1MTQ2ODM5MzY2NTkzNjI1MDYzNjE0MDQ0OTM1NDM4MTI5ODYxMDQxNTIwMTU3NjYzNzgxOQorCis1NDAtYml0IHByaW1lOgorcCA9PSAzNTk5MTMxMDM1NjM0NTU3MTA2MjQ4NDMwODA2MTQ4Nzg1NDg3MDk1NzU3Njk0NjQxNTMzMzA2NDgwNjA0NDU4MDg5NDcwMDY0NTM3MTkwMjk2MjU1MjMyNTQ4ODgzMTEyNjg1NzE5OTM2NzI4NTA2ODE2NzE2MDk4NTY2NjEyODQ0Mzk1NDM5NzUxMjA2ODEwOTkxNzcwNjI2NDc3MzQ0NzM5CisKKzc4MC1iaXQgcHJpbWU6CitwID09IDYzNTkxMTQxMDYwNjM3MDM3OTgzNzAyMTk5ODQ3NDI0MTA0NjYzMzIyMDUxMjYxMDk5ODkzMTkyMjU1NTcxNDc3NTQ3MDQ3MDIyMDMzOTk3MjY0MTEyNzc5NjI1NjIxMzU5NzM2ODUxOTc3NDQ5MzU0NDg4NzU4NTI0Nzg3OTE4NjA2OTQyNzk3NDczNTU4MDA2Nzg1Njg2Nzc5NDYxODE0NDc1ODE3ODE0MDEyMTMxMzM4ODY2MDk5NDcwMjcyMzAwMDQyNzcyNDQ2OTc0NjI2NTYwMDM2NTU5NDc3OTE3MjU5NjYyNzExNjcKKwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ldGMvbWFrZWZpbGUgYi9saWJ0b21tYXRoL2V0Yy9tYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTE1NGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ldGMvbWFrZWZpbGUKQEAgLTAsMCArMSw1MCBAQAorQ0ZMQUdTICs9IC1XYWxsIC1XIC1Xc2hhZG93IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnVucm9sbC1sb29wcyAtSS4uLworCisjIGRlZmF1bHQgbGliIG5hbWUgKHJlcXVpcmVzIGluc3RhbGwgd2l0aCByb290KQorIyBMSUJOQU1FPS1sdG9tbWF0aAorCisjIGxpYm5hbWUgd2hlbiB5b3UgY2FuJ3QgaW5zdGFsbCB0aGUgbGliIHdpdGggaW5zdGFsbAorTElCTkFNRT0uLi9saWJ0b21tYXRoLmEKKworI3Byb3ZhYmxlIHByaW1lcworcHByaW1lOiBwcHJpbWUubworCSQoQ0MpIHBwcmltZS5vICQoTElCTkFNRSkgLW8gcHByaW1lCisKKyMgcG9ydGFibGUgW3dlbGwgcmVxdWlyZXMgY2xvY2soKV0gdHVuaW5nIGFwcAordHVuZTogdHVuZS5vCisJJChDQykgdHVuZS5vICQoTElCTkFNRSkgLW8gdHVuZQorCQorIyBzYW1lIGFwcCBidXQgdXNpbmcgUkRUU0MgZm9yIGhpZ2hlciBwcmVjaXNpb24gW3JlcXVpcmVzIDgwNTg2K10sIGNvZmYgYmFzZWQgZ2NjIGluc3RhbGxzIFtlLmcuIG1pbmcsIGN5Z3dpbiwgZGpncHBdCit0dW5lODY6IHR1bmUuYworCW5hc20gLWYgY29mZiB0aW1lci5hc20KKwkkKENDKSAtRFg4Nl9USU1FUiAkKENGTEFHUykgdHVuZS5jIHRpbWVyLm8gICQoTElCTkFNRSkgLW8gdHVuZTg2CisJCisjIGZvciBjeWd3aW4KK3R1bmU4NmM6IHR1bmUuYworCW5hc20gLWYgZ251d2luMzIgdGltZXIuYXNtCisJJChDQykgLURYODZfVElNRVIgJChDRkxBR1MpIHR1bmUuYyB0aW1lci5vICAkKExJQk5BTUUpIC1vIHR1bmU4NgorCisjbWFrZSB0dW5lODYgZm9yIGxpbnV4IG9yIGFueSBFTEYgZm9ybWF0Cit0dW5lODZsOiB0dW5lLmMKKwluYXNtIC1mIGVsZiAtRFVTRV9FTEYgdGltZXIuYXNtCisJJChDQykgLURYODZfVElNRVIgJChDRkxBR1MpIHR1bmUuYyB0aW1lci5vICQoTElCTkFNRSkgLW8gdHVuZTg2bAorICAgICAgICAKKyMgc3BpdHMgb3V0IG1lcnNlbm5lIHByaW1lcworbWVyc2VubmU6IG1lcnNlbm5lLm8KKwkkKENDKSBtZXJzZW5uZS5vICQoTElCTkFNRSkgLW8gbWVyc2VubmUKKworIyBmaW5lcyBEUiBzYWZlIHByaW1lcyBmb3IgdGhlIGdpdmVuIGNvbmZpZworZHJwcmltZTogZHJwcmltZS5vCisJJChDQykgZHJwcmltZS5vICQoTElCTkFNRSkgLW8gZHJwcmltZQorCQorIyBmaW5lcyAyayBzYWZlIHByaW1lcyBmb3IgdGhlIGdpdmVuIGNvbmZpZworMmtwcmltZTogMmtwcmltZS5vCisJJChDQykgMmtwcmltZS5vICQoTElCTkFNRSkgLW8gMmtwcmltZQorCittb250OiBtb250Lm8KKwkkKENDKSBtb250Lm8gJChMSUJOQU1FKSAtbyBtb250CisKKyAgICAgICAgCitjbGVhbjoKKwlybSAtZiAqLmxvZyAqLm8gKi5vYmogKi5leGUgcHByaW1lIHR1bmUgbWVyc2VubmUgZHJwcmltZSB0dW5lODYgdHVuZTg2bCBtb250IDJrcHJpbWUgcHByaW1lLmRhdCBcCisgICAgICAgICAqLmRhICouZHluICouZHBpICp+CmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2V0Yy9tYWtlZmlsZS5pY2MgYi9saWJ0b21tYXRoL2V0Yy9tYWtlZmlsZS5pY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExZmZmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvZXRjL21ha2VmaWxlLmljYwpAQCAtMCwwICsxLDY3IEBACitDQyA9IGljYworCitDRkxBR1MgKz0gLUkuLi8KKworIyBvcHRpbWl6ZSBmb3IgU1BFRUQKKyMKKyMgLW1jcHU9IGNhbiBiZSBwZW50aXVtLCBwZW50aXVtcHJvIChjb3ZlcnMgUElJIHRocm91Z2ggUElJSSkgb3IgcGVudGl1bTQKKyMgLWF4PyAgIHNwZWNpZmllcyBtYWtlIGNvZGUgc3BlY2lmaWNhbGx5IGZvciA/IGJ1dCBjb21wYXRpYmxlIHdpdGggSUEtMzIKKyMgLXg/ICAgIHNwZWNpZmllcyBjb21waWxlIHNvbGVseSBmb3IgPyBbbm90IHNwZWNpZmljYWxseSBJQS0zMiBjb21wYXRpYmxlXQorIworIyB3aGVyZSA/IGlzIAorIyAgIEsgLSBQSUlJCisjICAgVyAtIGZpcnN0IFA0IFtXaWxsaWFtZXR0ZV0KKyMgICBOIC0gUDQgTm9ydGh3b29kCisjICAgUCAtIFA0IFByZXNjb3R0CisjICAgQiAtIEJsZW5kIG9mIFA0IGFuZCBQTSBbbW9iaWxlXQorIworIyBEZWZhdWx0IHRvIGp1c3QgZ2VuZXJpYyBtYXggb3B0cworQ0ZMQUdTICs9IC1PMyAteFAgLWlwCisKKyMgZGVmYXVsdCBsaWIgbmFtZSAocmVxdWlyZXMgaW5zdGFsbCB3aXRoIHJvb3QpCisjIExJQk5BTUU9LWx0b21tYXRoCisKKyMgbGlibmFtZSB3aGVuIHlvdSBjYW4ndCBpbnN0YWxsIHRoZSBsaWIgd2l0aCBpbnN0YWxsCitMSUJOQU1FPS4uL2xpYnRvbW1hdGguYQorCisjcHJvdmFibGUgcHJpbWVzCitwcHJpbWU6IHBwcmltZS5vCisJJChDQykgcHByaW1lLm8gJChMSUJOQU1FKSAtbyBwcHJpbWUKKworIyBwb3J0YWJsZSBbd2VsbCByZXF1aXJlcyBjbG9jaygpXSB0dW5pbmcgYXBwCit0dW5lOiB0dW5lLm8KKwkkKENDKSB0dW5lLm8gJChMSUJOQU1FKSAtbyB0dW5lCisJCisjIHNhbWUgYXBwIGJ1dCB1c2luZyBSRFRTQyBmb3IgaGlnaGVyIHByZWNpc2lvbiBbcmVxdWlyZXMgODA1ODYrXSwgY29mZiBiYXNlZCBnY2MgaW5zdGFsbHMgW2UuZy4gbWluZywgY3lnd2luLCBkamdwcF0KK3R1bmU4NjogdHVuZS5jCisJbmFzbSAtZiBjb2ZmIHRpbWVyLmFzbQorCSQoQ0MpIC1EWDg2X1RJTUVSICQoQ0ZMQUdTKSB0dW5lLmMgdGltZXIubyAgJChMSUJOQU1FKSAtbyB0dW5lODYKKwkKKyMgZm9yIGN5Z3dpbgordHVuZTg2YzogdHVuZS5jCisJbmFzbSAtZiBnbnV3aW4zMiB0aW1lci5hc20KKwkkKENDKSAtRFg4Nl9USU1FUiAkKENGTEFHUykgdHVuZS5jIHRpbWVyLm8gICQoTElCTkFNRSkgLW8gdHVuZTg2CisKKyNtYWtlIHR1bmU4NiBmb3IgbGludXggb3IgYW55IEVMRiBmb3JtYXQKK3R1bmU4Nmw6IHR1bmUuYworCW5hc20gLWYgZWxmIC1EVVNFX0VMRiB0aW1lci5hc20KKwkkKENDKSAtRFg4Nl9USU1FUiAkKENGTEFHUykgdHVuZS5jIHRpbWVyLm8gJChMSUJOQU1FKSAtbyB0dW5lODZsCisgICAgICAgIAorIyBzcGl0cyBvdXQgbWVyc2VubmUgcHJpbWVzCittZXJzZW5uZTogbWVyc2VubmUubworCSQoQ0MpIG1lcnNlbm5lLm8gJChMSUJOQU1FKSAtbyBtZXJzZW5uZQorCisjIGZpbmVzIERSIHNhZmUgcHJpbWVzIGZvciB0aGUgZ2l2ZW4gY29uZmlnCitkcnByaW1lOiBkcnByaW1lLm8KKwkkKENDKSBkcnByaW1lLm8gJChMSUJOQU1FKSAtbyBkcnByaW1lCisJCisjIGZpbmVzIDJrIHNhZmUgcHJpbWVzIGZvciB0aGUgZ2l2ZW4gY29uZmlnCisya3ByaW1lOiAya3ByaW1lLm8KKwkkKENDKSAya3ByaW1lLm8gJChMSUJOQU1FKSAtbyAya3ByaW1lCisKK21vbnQ6IG1vbnQubworCSQoQ0MpIG1vbnQubyAkKExJQk5BTUUpIC1vIG1vbnQKKworICAgICAgICAKK2NsZWFuOgorCXJtIC1mICoubG9nICoubyAqLm9iaiAqLmV4ZSBwcHJpbWUgdHVuZSBtZXJzZW5uZSBkcnByaW1lIHR1bmU4NiB0dW5lODZsIG1vbnQgMmtwcmltZSBwcHJpbWUuZGF0ICouaWwKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvZXRjL21ha2VmaWxlLm1zdmMgYi9saWJ0b21tYXRoL2V0Yy9tYWtlZmlsZS5tc3ZjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MzMzNzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2V0Yy9tYWtlZmlsZS5tc3ZjCkBAIC0wLDAgKzEsMjMgQEAKKyNNU1ZDIE1ha2VmaWxlCisjCisjVG9tIFN0IERlbmlzCisKK0NGTEFHUyA9IC9JLi4vIC9PeCAvRFdJTjMyIC9XMworCitwcHJpbWU6IHBwcmltZS5vYmoKKwljbCBwcHJpbWUub2JqIC4uL3RvbW1hdGgubGliIAorCittZXJzZW5uZTogbWVyc2VubmUub2JqCisJY2wgbWVyc2VubmUub2JqIC4uL3RvbW1hdGgubGliCisJCit0dW5lOiB0dW5lLm9iagorCWNsIHR1bmUub2JqIC4uL3RvbW1hdGgubGliCisKK21vbnQ6IG1vbnQub2JqCisJY2wgbW9udC5vYmogLi4vdG9tbWF0aC5saWIKKwkKK2RycHJpbWU6IGRycHJpbWUub2JqCisJY2wgZHJwcmltZS5vYmogLi4vdG9tbWF0aC5saWIKKworMmtwcmltZTogMmtwcmltZS5vYmoKKwljbCAya3ByaW1lLm9iaiAuLi90b21tYXRoLmxpYgpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ldGMvbWVyc2VubmUuYyBiL2xpYnRvbW1hdGgvZXRjL21lcnNlbm5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE2NDk3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvZXRjL21lcnNlbm5lLmMKQEAgLTAsMCArMSwxNDQgQEAKKy8qIEZpbmRzIE1lcnNlbm5lIHByaW1lcyB1c2luZyB0aGUgTHVjYXMtTGVobWVyIHRlc3QgCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbQorICovCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHRvbW1hdGguaD4KKworaW50Citpc19tZXJzZW5uZSAobG9uZyBzLCBpbnQgKnBwKQoreworICBtcF9pbnQgIG4sIHU7CisgIGludCAgICAgcmVzLCBrOworICAKKyAgKnBwID0gMDsKKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZuKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ1KSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX047CisgIH0KKworICAvKiBuID0gMl5zIC0gMSAqLworICBpZiAoKHJlcyA9IG1wXzJleHB0KCZuLCBzKSkgIT0gTVBfT0tBWSkgeworICAgICBnb3RvIExCTF9NVTsKKyAgfQorICBpZiAoKHJlcyA9IG1wX3N1Yl9kICgmbiwgMSwgJm4pKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfTVU7CisgIH0KKworICAvKiBzZXQgdT00ICovCisgIG1wX3NldCAoJnUsIDQpOworCisgIC8qIGZvciBrPTEgdG8gcy0yIGRvICovCisgIGZvciAoayA9IDE7IGsgPD0gcyAtIDI7IGsrKykgeworICAgIC8qIHUgPSB1XjIgLSAyIG1vZCBuICovCisgICAgaWYgKChyZXMgPSBtcF9zcXIgKCZ1LCAmdSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX01VOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX3N1Yl9kICgmdSwgMiwgJnUpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9NVTsKKyAgICB9CisKKyAgICAvKiBtYWtlIHN1cmUgdSBpcyBwb3NpdGl2ZSAqLworICAgIHdoaWxlICh1LnNpZ24gPT0gTVBfTkVHKSB7CisgICAgICBpZiAoKHJlcyA9IG1wX2FkZCAoJnUsICZuLCAmdSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgIGdvdG8gTEJMX01VOworICAgICAgfQorICAgIH0KKworICAgIC8qIHJlZHVjZSAqLworICAgIGlmICgocmVzID0gbXBfcmVkdWNlXzJrICgmdSwgJm4sIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9NVTsKKyAgICB9CisgIH0KKworICAvKiBpZiB1ID09IDAgdGhlbiBpdHMgcHJpbWUgKi8KKyAgaWYgKG1wX2lzemVybyAoJnUpID09IDEpIHsKKyAgICBtcF9wcmltZV9pc19wcmltZSgmbiwgOCwgcHApOworICBpZiAoKnBwICE9IDEpIHByaW50ZigiRkFJTFVSRVxuIik7CisgIH0KKworICByZXMgPSBNUF9PS0FZOworTEJMX01VOm1wX2NsZWFyICgmdSk7CitMQkxfTjptcF9jbGVhciAoJm4pOworICByZXR1cm4gcmVzOworfQorCisvKiBzcXVhcmUgcm9vdCBvZiBhIGxvbmcgPCA2NTUzNiAqLworbG9uZworaV9zcXJ0IChsb25nIHgpCit7CisgIGxvbmcgICAgeDEsIHgyOworCisgIHgyID0gMTY7CisgIGRvIHsKKyAgICB4MSA9IHgyOworICAgIHgyID0geDEgLSAoKHgxICogeDEpIC0geCkgLyAoMiAqIHgxKTsKKyAgfSB3aGlsZSAoeDEgIT0geDIpOworCisgIGlmICh4MSAqIHgxID4geCkgeworICAgIC0teDE7CisgIH0KKworICByZXR1cm4geDE7Cit9CisKKy8qIGlzIHRoZSBsb25nIHByaW1lIGJ5IGJydXRlIGZvcmNlICovCitpbnQKK2lzcHJpbWUgKGxvbmcgaykKK3sKKyAgbG9uZyAgICB5LCB6OworCisgIHkgPSBpX3NxcnQgKGspOworICBmb3IgKHogPSAyOyB6IDw9IHk7IHorKykgeworICAgIGlmICgoayAlIHopID09IDApCisgICAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gMTsKK30KKworCitpbnQKK21haW4gKHZvaWQpCit7CisgIGludCAgICAgcHA7CisgIGxvbmcgICAgazsKKyAgY2xvY2tfdCB0dDsKKworICBrID0gMzsKKworICBmb3IgKDs7KSB7CisgICAgLyogc3RhcnQgdGltZSAqLworICAgIHR0ID0gY2xvY2sgKCk7CisKKyAgICAvKiB0ZXN0IGlmIDJeayAtIDEgaXMgcHJpbWUgKi8KKyAgICBpZiAoaXNfbWVyc2VubmUgKGssICZwcCkgIT0gTVBfT0tBWSkgeworICAgICAgcHJpbnRmICgiV2hvYSBlcnJvclxuIik7CisgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHBwID09IDEpIHsKKyAgICAgIC8qIGNvdW50IHRpbWUgKi8KKyAgICAgIHR0ID0gY2xvY2sgKCkgLSB0dDsKKworICAgICAgLyogZGlzcGxheSBpZiBwcmltZSAqLworICAgICAgcHJpbnRmICgiMl4lLTVsZCAtIDEgaXMgcHJpbWUsIHRlc3QgdG9vayAlbGQgdGlja3NcbiIsIGssIHR0KTsKKyAgICB9CisKKyAgICAvKiBnb3RvIG5leHQgb2RkIGV4cG9uZW50ICovCisgICAgayArPSAyOworCisgICAgLyogYnV0IG1ha2Ugc3VyZSBpdHMgcHJpbWUgKi8KKyAgICB3aGlsZSAoaXNwcmltZSAoaykgPT0gMCkgeworICAgICAgayArPSAyOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ldGMvbWVyc2VubmUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvZXRjL21vbnQuYyBiL2xpYnRvbW1hdGgvZXRjL21vbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTNiZTRjCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ldGMvbW9udC5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qIHRlc3RzIHRoZSBtb250Z29tZXJ5IHJvdXRpbmVzICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorCitpbnQgbWFpbih2b2lkKQoreworICAgbXBfaW50IG1vZHVsdXMsIFIsIHAsIHBwOworICAgbXBfZGlnaXQgbXA7CisgICBsb25nIHgsIHk7CisKKyAgIHNyYW5kKHRpbWUoTlVMTCkpOworICAgbXBfaW5pdF9tdWx0aSgmbW9kdWx1cywgJlIsICZwLCAmcHAsIE5VTEwpOworCisgICAvKiBsb29wIHRocm91Z2ggdmFyaW91cyBzaXplcyAqLworICAgZm9yICh4ID0gNDsgeCA8IDI1NjsgeCsrKSB7CisgICAgICAgcHJpbnRmKCJESUdJVFMgPT0gJTNsZC4uLiIsIHgpOyBmZmx1c2goc3Rkb3V0KTsKKyAgICAgICAKKyAgICAgICAvKiBtYWtlIHVwIHRoZSBvZGQgbW9kdWx1cyAqLworICAgICAgIG1wX3JhbmQoJm1vZHVsdXMsIHgpOworICAgICAgIG1vZHVsdXMuZHBbMF0gfD0gMTsKKyAgICAgICAKKyAgICAgICAvKiBub3cgZmluZCB0aGUgUiB2YWx1ZSAqLworICAgICAgIG1wX21vbnRnb21lcnlfY2FsY19ub3JtYWxpemF0aW9uKCZSLCAmbW9kdWx1cyk7CisgICAgICAgbXBfbW9udGdvbWVyeV9zZXR1cCgmbW9kdWx1cywgJm1wKTsKKyAgICAgICAKKyAgICAgICAvKiBub3cgcnVuIHRocm91Z2ggYSBidW5jaCB0ZXN0cyAqLworICAgICAgIGZvciAoeSA9IDA7IHkgPCAxMDAwOyB5KyspIHsKKyAgICAgICAgICAgbXBfcmFuZCgmcCwgeC8yKTsgICAgICAgIC8qIHAgPSByYW5kb20gKi8KKyAgICAgICAgICAgbXBfbXVsKCZwLCAmUiwgJnBwKTsgICAgIC8qIHBwID0gUiAqIHAgKi8KKyAgICAgICAgICAgbXBfbW9udGdvbWVyeV9yZWR1Y2UoJnBwLCAmbW9kdWx1cywgbXApOworICAgICAgICAgICAKKyAgICAgICAgICAgLyogc2hvdWxkIGJlIGVxdWFsIHRvIHAgKi8KKyAgICAgICAgICAgaWYgKG1wX2NtcCgmcHAsICZwKSAhPSBNUF9FUSkgeworICAgICAgICAgICAgICBwcmludGYoIkZBSUxVUkUhXG4iKTsKKyAgICAgICAgICAgICAgZXhpdCgtMSk7CisgICAgICAgICAgIH0KKyAgICAgICB9CisgICAgICAgcHJpbnRmKCJQQVNTRURcbiIpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gMDsKK30KKworCisKKworCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvZXRjL21vbnQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM4OjQ3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvZXRjL3BwcmltZS5jIGIvbGlidG9tbWF0aC9ldGMvcHByaW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE3ZTJhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvZXRjL3BwcmltZS5jCkBAIC0wLDAgKzEsNDAwIEBACisvKiBHZW5lcmF0ZXMgcHJvdmFibGUgcHJpbWVzCisgKgorICogU2VlIGh0dHA6Ly9nbWFpbC5jb206ODA4MC9wYXBlcnMvcHAucGRmIGZvciBtb3JlIGluZm8uCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL3RvbS5nbWFpbC5jb20KKyAqLworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlICJ0b21tYXRoLmgiCisKK2ludCAgIG5fcHJpbWU7CitGSUxFICpwcmltZXM7CisKKy8qIGZhc3Qgc3F1YXJlIHJvb3QgKi8KK3N0YXRpYyAgbXBfZGlnaXQKK2lfc3FydCAobXBfd29yZCB4KQoreworICBtcF93b3JkIHgxLCB4MjsKKworICB4MiA9IHg7CisgIGRvIHsKKyAgICB4MSA9IHgyOworICAgIHgyID0geDEgLSAoKHgxICogeDEpIC0geCkgLyAoMiAqIHgxKTsKKyAgfSB3aGlsZSAoeDEgIT0geDIpOworCisgIGlmICh4MSAqIHgxID4geCkgeworICAgIC0teDE7CisgIH0KKworICByZXR1cm4geDE7Cit9CisKKworLyogZ2VuZXJhdGVzIGEgcHJpbWUgZGlnaXQgKi8KK3N0YXRpYyB2b2lkIGdlbl9wcmltZSAodm9pZCkKK3sKKyAgbXBfZGlnaXQgciwgeCwgeSwgbmV4dDsKKyAgRklMRSAqb3V0OworCisgIG91dCA9IGZvcGVuKCJwcHJpbWUuZGF0IiwgIndiIik7CisKKyAgLyogd3JpdGUgZmlyc3Qgc2V0IG9mIHByaW1lcyAqLworICByID0gMzsgZndyaXRlKCZyLCAxLCBzaXplb2YobXBfZGlnaXQpLCBvdXQpOworICByID0gNTsgZndyaXRlKCZyLCAxLCBzaXplb2YobXBfZGlnaXQpLCBvdXQpOworICByID0gNzsgZndyaXRlKCZyLCAxLCBzaXplb2YobXBfZGlnaXQpLCBvdXQpOworICByID0gMTE7IGZ3cml0ZSgmciwgMSwgc2l6ZW9mKG1wX2RpZ2l0KSwgb3V0KTsKKyAgciA9IDEzOyBmd3JpdGUoJnIsIDEsIHNpemVvZihtcF9kaWdpdCksIG91dCk7CisgIHIgPSAxNzsgZndyaXRlKCZyLCAxLCBzaXplb2YobXBfZGlnaXQpLCBvdXQpOworICByID0gMTk7IGZ3cml0ZSgmciwgMSwgc2l6ZW9mKG1wX2RpZ2l0KSwgb3V0KTsKKyAgciA9IDIzOyBmd3JpdGUoJnIsIDEsIHNpemVvZihtcF9kaWdpdCksIG91dCk7CisgIHIgPSAyOTsgZndyaXRlKCZyLCAxLCBzaXplb2YobXBfZGlnaXQpLCBvdXQpOworICByID0gMzE7IGZ3cml0ZSgmciwgMSwgc2l6ZW9mKG1wX2RpZ2l0KSwgb3V0KTsKKworICAvKiBnZXQgc3F1YXJlIHJvb3QsIHNpbmNlIGlmICdyJyBpcyBjb21wb3NpdGUgaXRzIGZhY3RvcnMgbXVzdCBiZSA8IHRoYW4gdGhpcyAqLworICB5ID0gaV9zcXJ0IChyKTsKKyAgbmV4dCA9ICh5ICsgMSkgKiAoeSArIDEpOworCisgIGZvciAoOzspIHsKKyAgZG8geworICAgIHIgKz0gMjsJCQkvKiBuZXh0IGNhbmRpZGF0ZSAqLworICAgIHIgJj0gTVBfTUFTSzsKKyAgICBpZiAociA8IDMxKSBicmVhazsKKworICAgIC8qIHVwZGF0ZSBzcXJ0ID8gKi8KKyAgICBpZiAobmV4dCA8PSByKSB7CisgICAgICArK3k7CisgICAgICBuZXh0ID0gKHkgKyAxKSAqICh5ICsgMSk7CisgICAgfQorCisgICAgLyogbG9vcCBpZiBkaXZpc2libGUgYnkgMyw1LDcsMTEsMTMsMTcsMTksMjMsMjkgICovCisgICAgaWYgKChyICUgMykgPT0gMCkgeworICAgICAgeCA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYgKChyICUgNSkgPT0gMCkgeworICAgICAgeCA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYgKChyICUgNykgPT0gMCkgeworICAgICAgeCA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYgKChyICUgMTEpID09IDApIHsKKyAgICAgIHggPSAwOworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmICgociAlIDEzKSA9PSAwKSB7CisgICAgICB4ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAoKHIgJSAxNykgPT0gMCkgeworICAgICAgeCA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgaWYgKChyICUgMTkpID09IDApIHsKKyAgICAgIHggPSAwOworICAgICAgY29udGludWU7CisgICAgfQorICAgIGlmICgociAlIDIzKSA9PSAwKSB7CisgICAgICB4ID0gMDsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKyAgICBpZiAoKHIgJSAyOSkgPT0gMCkgeworICAgICAgeCA9IDA7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBub3cgY2hlY2sgaWYgciBpcyBkaXZpc2libGUgYnkgeCArIGs9ezEsNywxMSwxMywxNywxOSwyMywyOX0gKi8KKyAgICBmb3IgKHggPSAzMDsgeCA8PSB5OyB4ICs9IDMwKSB7CisgICAgICBpZiAoKHIgJSAoeCArIDEpKSA9PSAwKSB7CisJeCA9IDA7CisJYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoKHIgJSAoeCArIDcpKSA9PSAwKSB7CisJeCA9IDA7CisJYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoKHIgJSAoeCArIDExKSkgPT0gMCkgeworCXggPSAwOworCWJyZWFrOworICAgICAgfQorICAgICAgaWYgKChyICUgKHggKyAxMykpID09IDApIHsKKwl4ID0gMDsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIGlmICgociAlICh4ICsgMTcpKSA9PSAwKSB7CisJeCA9IDA7CisJYnJlYWs7CisgICAgICB9CisgICAgICBpZiAoKHIgJSAoeCArIDE5KSkgPT0gMCkgeworCXggPSAwOworCWJyZWFrOworICAgICAgfQorICAgICAgaWYgKChyICUgKHggKyAyMykpID09IDApIHsKKwl4ID0gMDsKKwlicmVhazsKKyAgICAgIH0KKyAgICAgIGlmICgociAlICh4ICsgMjkpKSA9PSAwKSB7CisJeCA9IDA7CisJYnJlYWs7CisgICAgICB9CisgICAgfQorICB9IHdoaWxlICh4ID09IDApOworICBpZiAociA+IDMxKSB7IGZ3cml0ZSgmciwgMSwgc2l6ZW9mKG1wX2RpZ2l0KSwgb3V0KTsgcHJpbnRmKCIlOWRcciIsIHIpOyBmZmx1c2goc3Rkb3V0KTsgfQorICBpZiAociA8IDMxKSBicmVhazsKKyAgfQorCisgIGZjbG9zZShvdXQpOworfQorCit2b2lkIGxvYWRfdGFiKHZvaWQpCit7CisgICBwcmltZXMgPSBmb3BlbigicHByaW1lLmRhdCIsICJyYiIpOworICAgaWYgKHByaW1lcyA9PSBOVUxMKSB7CisgICAgICBnZW5fcHJpbWUoKTsKKyAgICAgIHByaW1lcyA9IGZvcGVuKCJwcHJpbWUuZGF0IiwgInJiIik7CisgICB9CisgICBmc2VlayhwcmltZXMsIDAsIFNFRUtfRU5EKTsKKyAgIG5fcHJpbWUgPSBmdGVsbChwcmltZXMpIC8gc2l6ZW9mKG1wX2RpZ2l0KTsKK30KKworbXBfZGlnaXQgcHJpbWVfZGlnaXQodm9pZCkKK3sKKyAgIGludCBuOworICAgbXBfZGlnaXQgZDsKKworICAgbiA9IGFicyhyYW5kKCkpICUgbl9wcmltZTsKKyAgIGZzZWVrKHByaW1lcywgbiAqIHNpemVvZihtcF9kaWdpdCksIFNFRUtfU0VUKTsKKyAgIGZyZWFkKCZkLCAxLCBzaXplb2YobXBfZGlnaXQpLCBwcmltZXMpOworICAgcmV0dXJuIGQ7Cit9CisKKworLyogbWFrZXMgYSBwcmltZSBvZiBhdCBsZWFzdCBrIGJpdHMgKi8KK2ludAorcHByaW1lIChpbnQgaywgaW50IGxpLCBtcF9pbnQgKiBwLCBtcF9pbnQgKiBxKQoreworICBtcF9pbnQgIGEsIGIsIGMsIG4sIHgsIHksIHosIHY7CisgIGludCAgICAgcmVzLCBpaTsKKyAgc3RhdGljIGNvbnN0IG1wX2RpZ2l0IGJhc2VzW10gPSB7IDIsIDMsIDUsIDcsIDExLCAxMywgMTcsIDE5IH07CisKKyAgLyogc2luZ2xlIGRpZ2l0ID8gKi8KKyAgaWYgKGsgPD0gKGludCkgRElHSVRfQklUKSB7CisgICAgbXBfc2V0IChwLCBwcmltZV9kaWdpdCAoKSk7CisgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZjKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ2KSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX0M7CisgIH0KKworICAvKiBwcm9kdWN0IG9mIGZpcnN0IDUwIHByaW1lcyAqLworICBpZiAoKHJlcyA9CisgICAgICAgbXBfcmVhZF9yYWRpeCAoJnYsCisJCSAgICAgICIxOTA3ODI2Njg4OTU4MDE5NTAxMzYwMTg5MTgyMDk5Mjc1Nzc1NzIxOTgzOTY2ODM1NzAxMjA1NTkwNzUxNjkwNDMwOTcwMDAxNDkzMzkwOTAxNDcyOTc0MDE5MCIsCisJCSAgICAgIDEwKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1Y7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZhKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1Y7CisgIH0KKworICAvKiBzZXQgdGhlIHByaW1lICovCisgIG1wX3NldCAoJmEsIHByaW1lX2RpZ2l0ICgpKTsKKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZiKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX0E7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZuKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX0I7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ4KSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX047CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ5KSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1g7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ6KSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1k7CisgIH0KKworICAvKiBub3cgbG9vcCBtYWtpbmcgdGhlIHNpbmdsZSBkaWdpdCAqLworICB3aGlsZSAobXBfY291bnRfYml0cyAoJmEpIDwgaykgeworICAgIGZwcmludGYgKHN0ZGVyciwgInByaW1lIGhhcyAlNGQgYml0cyBsZWZ0XHIiLCBrIC0gbXBfY291bnRfYml0cyAoJmEpKTsKKyAgICBmZmx1c2ggKHN0ZGVycik7CisgIHRvcDoKKyAgICBtcF9zZXQgKCZiLCBwcmltZV9kaWdpdCAoKSk7CisKKyAgICAvKiBub3cgY29tcHV0ZSB6ID0gYSAqIGIgKiAyICovCisgICAgaWYgKChyZXMgPSBtcF9tdWwgKCZhLCAmYiwgJnopKSAhPSBNUF9PS0FZKSB7CS8qIHogPSBhICogYiAqLworICAgICAgZ290byBMQkxfWjsKKyAgICB9CisKKyAgICBpZiAoKHJlcyA9IG1wX2NvcHkgKCZ6LCAmYykpICE9IE1QX09LQVkpIHsJLyogYyA9IGEgKiBiICovCisgICAgICBnb3RvIExCTF9aOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfbXVsXzIgKCZ6LCAmeikpICE9IE1QX09LQVkpIHsJLyogeiA9IDIgKiBhICogYiAqLworICAgICAgZ290byBMQkxfWjsKKyAgICB9CisKKyAgICAvKiBuID0geiArIDEgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2FkZF9kICgmeiwgMSwgJm4pKSAhPSBNUF9PS0FZKSB7CS8qIG4gPSB6ICsgMSAqLworICAgICAgZ290byBMQkxfWjsKKyAgICB9CisKKyAgICAvKiBjaGVjayAobiwgdikgPT0gMSAqLworICAgIGlmICgocmVzID0gbXBfZ2NkICgmbiwgJnYsICZ5KSkgIT0gTVBfT0tBWSkgewkvKiB5ID0gKG4sIHYpICovCisgICAgICBnb3RvIExCTF9aOworICAgIH0KKworICAgIGlmIChtcF9jbXBfZCAoJnksIDEpICE9IE1QX0VRKQorICAgICAgZ290byB0b3A7CisKKyAgICAvKiBub3cgdHJ5IGJhc2UgeD1iYXNlc1tpaV0gICovCisgICAgZm9yIChpaSA9IDA7IGlpIDwgbGk7IGlpKyspIHsKKyAgICAgIG1wX3NldCAoJngsIGJhc2VzW2lpXSk7CisKKyAgICAgIC8qIGNvbXB1dGUgeF5hIG1vZCBuICovCisgICAgICBpZiAoKHJlcyA9IG1wX2V4cHRtb2QgKCZ4LCAmYSwgJm4sICZ5KSkgIT0gTVBfT0tBWSkgewkvKiB5ID0geF5hIG1vZCBuICovCisJZ290byBMQkxfWjsKKyAgICAgIH0KKworICAgICAgLyogaWYgeSA9PSAxIGxvb3AgKi8KKyAgICAgIGlmIChtcF9jbXBfZCAoJnksIDEpID09IE1QX0VRKQorCWNvbnRpbnVlOworCisgICAgICAvKiBub3cgeF4yYSBtb2QgbiAqLworICAgICAgaWYgKChyZXMgPSBtcF9zcXJtb2QgKCZ5LCAmbiwgJnkpKSAhPSBNUF9PS0FZKSB7CS8qIHkgPSB4XjJhIG1vZCBuICovCisJZ290byBMQkxfWjsKKyAgICAgIH0KKworICAgICAgaWYgKG1wX2NtcF9kICgmeSwgMSkgPT0gTVBfRVEpCisJY29udGludWU7CisKKyAgICAgIC8qIGNvbXB1dGUgeF5iIG1vZCBuICovCisgICAgICBpZiAoKHJlcyA9IG1wX2V4cHRtb2QgKCZ4LCAmYiwgJm4sICZ5KSkgIT0gTVBfT0tBWSkgewkvKiB5ID0geF5iIG1vZCBuICovCisJZ290byBMQkxfWjsKKyAgICAgIH0KKworICAgICAgLyogaWYgeSA9PSAxIGxvb3AgKi8KKyAgICAgIGlmIChtcF9jbXBfZCAoJnksIDEpID09IE1QX0VRKQorCWNvbnRpbnVlOworCisgICAgICAvKiBub3cgeF4yYiBtb2QgbiAqLworICAgICAgaWYgKChyZXMgPSBtcF9zcXJtb2QgKCZ5LCAmbiwgJnkpKSAhPSBNUF9PS0FZKSB7CS8qIHkgPSB4XjJiIG1vZCBuICovCisJZ290byBMQkxfWjsKKyAgICAgIH0KKworICAgICAgaWYgKG1wX2NtcF9kICgmeSwgMSkgPT0gTVBfRVEpCisJY29udGludWU7CisKKyAgICAgIC8qIGNvbXB1dGUgeF5jIG1vZCBuID09IHheYWIgbW9kIG4gKi8KKyAgICAgIGlmICgocmVzID0gbXBfZXhwdG1vZCAoJngsICZjLCAmbiwgJnkpKSAhPSBNUF9PS0FZKSB7CS8qIHkgPSB4XmFiIG1vZCBuICovCisJZ290byBMQkxfWjsKKyAgICAgIH0KKworICAgICAgLyogaWYgeSA9PSAxIGxvb3AgKi8KKyAgICAgIGlmIChtcF9jbXBfZCAoJnksIDEpID09IE1QX0VRKQorCWNvbnRpbnVlOworCisgICAgICAvKiBub3cgY29tcHV0ZSAoeF5jIG1vZCBuKV4yICovCisgICAgICBpZiAoKHJlcyA9IG1wX3Nxcm1vZCAoJnksICZuLCAmeSkpICE9IE1QX09LQVkpIHsJLyogeSA9IHheMmFiIG1vZCBuICovCisJZ290byBMQkxfWjsKKyAgICAgIH0KKworICAgICAgLyogeSBzaG91bGQgYmUgMSAqLworICAgICAgaWYgKG1wX2NtcF9kICgmeSwgMSkgIT0gTVBfRVEpCisJY29udGludWU7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBubyBiYXNlcyB3b3JrZWQ/ICovCisgICAgaWYgKGlpID09IGxpKQorICAgICAgZ290byB0b3A7CisKK3sKKyAgIGNoYXIgYnVmWzQwOTZdOworCisgICBtcF90b3JhZGl4KCZuLCBidWYsIDEwKTsKKyAgIHByaW50ZigiQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjpcbiVzXG5cbiIsIGJ1Zik7CisgICBtcF90b3JhZGl4KCZhLCBidWYsIDEwKTsKKyAgIHByaW50ZigiQSA9PSBcbiVzXG5cbiIsIGJ1Zik7CisgICBtcF90b3JhZGl4KCZiLCBidWYsIDEwKTsKKyAgIHByaW50ZigiQiA9PSBcbiVzXG5cbkcgPT0gJWRcbiIsIGJ1ZiwgYmFzZXNbaWldKTsKKyAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7Cit9CisKKyAgICAvKiBhID0gbiAqLworICAgIG1wX2NvcHkgKCZuLCAmYSk7CisgIH0KKworICAvKiBnZXQgcSB0byBiZSB0aGUgb3JkZXIgb2YgdGhlIGxhcmdlIHByaW1lIHN1Ymdyb3VwICovCisgIG1wX3N1Yl9kICgmbiwgMSwgcSk7CisgIG1wX2Rpdl8yIChxLCBxKTsKKyAgbXBfZGl2IChxLCAmYiwgcSwgTlVMTCk7CisKKyAgbXBfZXhjaCAoJm4sIHApOworCisgIHJlcyA9IE1QX09LQVk7CitMQkxfWjptcF9jbGVhciAoJnopOworTEJMX1k6bXBfY2xlYXIgKCZ5KTsKK0xCTF9YOm1wX2NsZWFyICgmeCk7CitMQkxfTjptcF9jbGVhciAoJm4pOworTEJMX0I6bXBfY2xlYXIgKCZiKTsKK0xCTF9BOm1wX2NsZWFyICgmYSk7CitMQkxfVjptcF9jbGVhciAoJnYpOworTEJMX0M6bXBfY2xlYXIgKCZjKTsKKyAgcmV0dXJuIHJlczsKK30KKworCitpbnQKK21haW4gKHZvaWQpCit7CisgIG1wX2ludCAgcCwgcTsKKyAgY2hhciAgICBidWZbNDA5Nl07CisgIGludCAgICAgaywgbGk7CisgIGNsb2NrX3QgdDE7CisKKyAgc3JhbmQgKHRpbWUgKE5VTEwpKTsKKyAgbG9hZF90YWIoKTsKKworICBwcmludGYgKCJFbnRlciAjIG9mIGJpdHM6IFxuIik7CisgIGZnZXRzIChidWYsIHNpemVvZiAoYnVmKSwgc3RkaW4pOworICBzc2NhbmYgKGJ1ZiwgIiVkIiwgJmspOworCisgIHByaW50ZiAoIkVudGVyIG51bWJlciBvZiBiYXNlcyB0byB0cnkgKDEgdG8gOCk6XG4iKTsKKyAgZmdldHMgKGJ1Ziwgc2l6ZW9mIChidWYpLCBzdGRpbik7CisgIHNzY2FuZiAoYnVmLCAiJWQiLCAmbGkpOworCisKKyAgbXBfaW5pdCAoJnApOworICBtcF9pbml0ICgmcSk7CisKKyAgdDEgPSBjbG9jayAoKTsKKyAgcHByaW1lIChrLCBsaSwgJnAsICZxKTsKKyAgdDEgPSBjbG9jayAoKSAtIHQxOworCisgIHByaW50ZiAoIlxuXG5Ub29rICVsZCB0aWNrcywgJWQgYml0c1xuIiwgdDEsIG1wX2NvdW50X2JpdHMgKCZwKSk7CisKKyAgbXBfdG9yYWRpeCAoJnAsIGJ1ZiwgMTApOworICBwcmludGYgKCJQID09ICVzXG4iLCBidWYpOworICBtcF90b3JhZGl4ICgmcSwgYnVmLCAxMCk7CisgIHByaW50ZiAoIlEgPT0gJXNcbiIsIGJ1Zik7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvZXRjL3BwcmltZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ldGMvcHJpbWUuMTAyNCBiL2xpYnRvbW1hdGgvZXRjL3ByaW1lLjEwMjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTYzNmUyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvZXRjL3ByaW1lLjEwMjQKQEAgLTAsMCArMSw0MTQgQEAKK0VudGVyICMgb2YgYml0czogCitFbnRlciBudW1iZXIgb2YgYmFzZXMgdG8gdHJ5ICgxIHRvIDgpOgorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzM2MzYwMDgwNzAzMTczMzYzCisKK0EgPT0gCis4OTk2MzU2OQorCitCID09IAorMjAyMDgyMjQ5CisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzQ4NTE1OTU1OTc3Mzk4NTYxMzY5ODcxMzkKKworQSA9PSAKKzM2MzYwMDgwNzAzMTczMzYzCisKK0IgPT0gCis2NjcxNTk2MworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxOTU1MDYzOTczNDQ2MjYyMTQzMDMyNTczMTU5MTAyNworCitBID09IAorNDg1MTU5NTU5NzczOTg1NjEzNjk4NzEzOQorCitCID09IAorMjAxNDg2NworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxMDQwOTAzNjE0MTM0NDMxNzE2NTY5MTg1ODUwOTkyMzgxODczNDUzOQorCitBID09IAorMTk1NTA2Mzk3MzQ0NjI2MjE0MzAzMjU3MzE1OTEwMjcKKworQiA9PSAKKzI2NjIwNzA0NworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxMDQ5ODI5NTQ5OTg4Mjg1MDEyNzM2NDc1NjAyMTE4MDk0NzI2NjQ3NTA0NDE0MjAzCisKK0EgPT0gCisxMDQwOTAzNjE0MTM0NDMxNzE2NTY5MTg1ODUwOTkyMzgxODczNDUzOQorCitCID09IAorNTA0Mjg3NTkKKworRyA9PSAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorNzcxOTQ3MzczODU1MjgyODgzODc3MTIzOTk1OTY4MzU0NTk5MzE5MjAzNTg4NDQ1ODY2MTUwMDMKKworQSA9PSAKKzEwNDk4Mjk1NDk5ODgyODUwMTI3MzY0NzU2MDIxMTgwOTQ3MjY2NDc1MDQ0MTQyMDMKKworQiA9PSAKKzM2NzY1MzY3CisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzM1NjYzNzU2Njk1MzY1MjA4NTc0NDQzMjE1OTU1NDg4Njg5NTc4Mzc0MjMyNzMyODkzNjI4ODk2NTQxMjAxNzYzCisKK0EgPT0gCis3NzE5NDczNzM4NTUyODI4ODM4NzcxMjM5OTU5NjgzNTQ1OTkzMTkyMDM1ODg0NDU4NjYxNTAwMworCitCID09IAorMjMwOTk4NjI3CisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzE2NzExODMxNDYzNTAyMTY1MTY5NDk1NjIyMjQ2MDIzMTE5Njk4NDE1ODQ4MTIwMjkyNjcxMjk0MTI3NTY3NjIwMzk2NDY5ODAzCisKK0EgPT0gCiszNTY2Mzc1NjY5NTM2NTIwODU3NDQ0MzIxNTk1NTQ4ODY4OTU3ODM3NDIzMjczMjg5MzYyODg5NjU0MTIwMTc2MworCitCID09IAorMjM0Mjk3MTI3CisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzYxNjM1MzQ3ODE1NjAyODU5NjI4OTA3MTg5MjU5NzIyNDk3NTMxNDc0NzA5NTM1NzkyNjYzOTQzOTU0MzI0NzU2MjIzNDU1OTcxMDM1Mjg3MzkKKworQSA9PSAKKzE2NzExODMxNDYzNTAyMTY1MTY5NDk1NjIyMjQ2MDIzMTE5Njk4NDE1ODQ4MTIwMjkyNjcxMjk0MTI3NTY3NjIwMzk2NDY5ODAzCisKK0IgPT0gCisxODQ0MDYzMjMKKworRyA9PSAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorODE0MjU4MjU2MjA1MjQzNDk3NzA0MDk0OTUxNDMyNTc1ODY3MzYwMDY1NjU4MzcyMTU4NTExMDM2MjU5OTM0NjQwNzQ4MDg4MzA2NzY0NTUzNDg4ODAzNzg3CisKK0EgPT0gCis2MTYzNTM0NzgxNTYwMjg1OTYyODkwNzE4OTI1OTcyMjQ5NzUzMTQ3NDcwOTUzNTc5MjY2Mzk0Mzk1NDMyNDc1NjIyMzQ1NTk3MTAzNTI4NzM5CisKK0IgPT0gCis2NjA1NDQ4NworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxNzY0Njk2OTU1MzMyNzE2NTc5MDI4MTQxNzY4MTE2NjAzNTcwNDkwMDc0Njc4NTY0MzIzODMwMzc1OTA2NzM0MDczMzAyNDY5Njc3ODE0NTE3MjM3NjQwNzk1ODE5OTgxODcKKworQSA9PSAKKzgxNDI1ODI1NjIwNTI0MzQ5NzcwNDA5NDk1MTQzMjU3NTg2NzM2MDA2NTY1ODM3MjE1ODUxMTAzNjI1OTkzNDY0MDc0ODA4ODMwNjc2NDU1MzQ4ODgwMzc4NworCitCID09IAorMTA4MzYyMjM5CisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzQ0OTI0NDkyODU5NDQ1NTE2NTQxNzU5NDg1MTk4NTQ0MDEyMTAyNDI0Nzk2NDAzNzA3MjUzNjEwMDM1MTQ4MDYzODYzMDczNTk2MDUxMjcyMTcxMTk0ODA2NjY5NzU2OTcxNDA2NDAwNDE5CisKK0EgPT0gCisxNzY0Njk2OTU1MzMyNzE2NTc5MDI4MTQxNzY4MTE2NjAzNTcwNDkwMDc0Njc4NTY0MzIzODMwMzc1OTA2NzM0MDczMzAyNDY5Njc3ODE0NTE3MjM3NjQwNzk1ODE5OTgxODcKKworQiA9PSAKKzEyNzI4NjcwNworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisyMDYwMDk5NjkyNzIxOTM0MzM4MzIyNTQyNDMyMDEzNDQ3NDkyOTYwOTQ1OTU4ODMyMzg1Nzc5Njg3MTA4Njg0NTkyNDE4NjE5MTU2MTc0OTUxOTg1ODYwMDY5NjE1OTkzMjQ2ODAyNDcxMDk4NTM3MTA1OQorCitBID09IAorNDQ5MjQ0OTI4NTk0NDU1MTY1NDE3NTk0ODUxOTg1NDQwMTIxMDI0MjQ3OTY0MDM3MDcyNTM2MTAwMzUxNDgwNjM4NjMwNzM1OTYwNTEyNzIxNzExOTQ4MDY2Njk3NTY5NzE0MDY0MDA0MTkKKworQiA9PSAKKzIyOTI4NDY5MQorCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6Cis2Mjk1Njk2NDI3Njk1NDkzMTEwMTQxMTg2NjA1ODM3Mzk3MTg1ODQ4OTkyMzA3OTc4NDU2MTM4MTEyNTI2OTE1MzMwMzQ3NzE1MjM2Mzc4MDQxNDg2NTQ3OTk0NzA4NzQ4ODQwODQ0MjE3MzcxMjMzNzM1MDcyNTcyOTc5CisKK0EgPT0gCisyMDYwMDk5NjkyNzIxOTM0MzM4MzIyNTQyNDMyMDEzNDQ3NDkyOTYwOTQ1OTU4ODMyMzg1Nzc5Njg3MTA4Njg0NTkyNDE4NjE5MTU2MTc0OTUxOTg1ODYwMDY5NjE1OTkzMjQ2ODAyNDcxMDk4NTM3MTA1OQorCitCID09IAorMTUyODAwNzcxCisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzMxMDQ5ODQwNzgwNDIzMTc0ODg3NDkwNzMwMTY0NTQyMTM1NzkyNTc3OTI2MzUxNDIyMTgyOTQwNTIxMzQ4MDQxODc2MzE2NjExNDUyNjEwMTUxMDI2MTc1ODIwOTAyNjM4MDg2OTY2OTk5NjY4NDA3MzUzMzMyNTIxMDc2Nzg3OTIxMjMKKworQSA9PSAKKzYyOTU2OTY0Mjc2OTU0OTMxMTAxNDExODY2MDU4MzczOTcxODU4NDg5OTIzMDc5Nzg0NTYxMzgxMTI1MjY5MTUzMzAzNDc3MTUyMzYzNzgwNDE0ODY1NDc5OTQ3MDg3NDg4NDA4NDQyMTczNzEyMzM3MzUwNzI1NzI5NzkKKworQiA9PSAKKzI0NjU5NTc1OQorCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisyNjQwNTE3NTgyNzY2NTcwMTI1NjMyNTY5OTMxNTEyNjcwNTUwODkxOTI1NTA1MTEyMTQ1MjI5MjEyNDQwNDk0Mzc5Njk0NzI4Nzk2ODYwMzk3NTMyMDU2Mjg0NzkxMDk0NjgwMjM5NjYzMjMwMjIwOTQzNTIwNjYyNzkxMzQ2NjAxNTc0MTc5OTQ5OQorCitBID09IAorMzEwNDk4NDA3ODA0MjMxNzQ4ODc0OTA3MzAxNjQ1NDIxMzU3OTI1Nzc5MjYzNTE0MjIxODI5NDA1MjEzNDgwNDE4NzYzMTY2MTE0NTI2MTAxNTEwMjYxNzU4MjA5MDI2MzgwODY5NjY5OTk2Njg0MDczNTMzMzI1MjEwNzY3ODc5MjEyMworCitCID09IAorNDI1MjA2MworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxMTEyMjE0NjIzNzkwODQxMzYxMDAzNDYwMDYwOTQ2MDU0NTcwMzU5MTA5NTg5NDQxODU5OTc1OTc0Mjc0MTQwNjYyODA1NTA2OTAwNzA4Mjk5ODEzNDkwNTU5NTgwMDIzNjQ1MjAxMDkwNTkwMDM5MTUwNTQ1NDg5MDQ0NjU4NTIxMTk3NTEyNDU1ODYwMTc3MDE2MworCitBID09IAorMjY0MDUxNzU4Mjc2NjU3MDEyNTYzMjU2OTkzMTUxMjY3MDU1MDg5MTkyNTUwNTExMjE0NTIyOTIxMjQ0MDQ5NDM3OTY5NDcyODc5Njg2MDM5NzUzMjA1NjI4NDc5MTA5NDY4MDIzOTY2MzIzMDIyMDk0MzUyMDY2Mjc5MTM0NjYwMTU3NDE3OTk0OTkKKworQiA9PSAKKzIxMDYwNTQxOQorCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxNjQ5ODYxNjQyMDQ3Nzk4ODkwNTgwMzU0MDgyMDg4NzEyNjQ5OTExODQ5MzYyMjAxMzQzNjQ5Mjg5Mzg0OTIzMTQ3Nzk3OTYwMzY0NzM2MDExNTE1NzU3NDgyMDMwMDQ5MzQyOTQzNzkwMTI3Njg1MTg1ODA2MDkyNjU5ODMyMTI5NDg2MzA3MDM1NTAwNjM4NTk1NTcyMzk2MTg3CisKK0EgPT0gCisxMTEyMjE0NjIzNzkwODQxMzYxMDAzNDYwMDYwOTQ2MDU0NTcwMzU5MTA5NTg5NDQxODU5OTc1OTc0Mjc0MTQwNjYyODA1NTA2OTAwNzA4Mjk5ODEzNDkwNTU5NTgwMDIzNjQ1MjAxMDkwNTkwMDM5MTUwNTQ1NDg5MDQ0NjU4NTIxMTk3NTEyNDU1ODYwMTc3MDE2MworCitCID09IAorNzQxNzAxMTEKKworRyA9PSAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorODU3OTgzMzY3MTI2MjY2NzE3NjA3Mzg5NzE5NjM3MDg2Njg0MTM0NDYyNjEzMDA2NDE1ODU5ODc3NjY2MjM1OTU1Nzg4MzkyNDY0MDgxOTE0MTI3NzE1OTY3OTQwOTY4MTk3NzY1MDQyMzk5OTA0MTE3MzkyNzA3NTE4MTc1MjIwODY0ODUyODE2MzkwMDA0MjY0MTA3MjAxMTc3Mzk0NTY1MzYzCisKK0EgPT0gCisxNjQ5ODYxNjQyMDQ3Nzk4ODkwNTgwMzU0MDgyMDg4NzEyNjQ5OTExODQ5MzYyMjAxMzQzNjQ5Mjg5Mzg0OTIzMTQ3Nzk3OTYwMzY0NzM2MDExNTE1NzU3NDgyMDMwMDQ5MzQyOTQzNzkwMTI3Njg1MTg1ODA2MDkyNjU5ODMyMTI5NDg2MzA3MDM1NTAwNjM4NTk1NTcyMzk2MTg3CisKK0IgPT0gCisyNjAwMTY3NjMKKworRyA9PSAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorMTc1OTk1OTA5MzUzNjIzNzAzMjU3MDcyMTIwNDc5MzQwNjEwMDEwMzM3MTQ0MDg1Njg4ODUwNzQ1MjkyMDMxMzM2NzI0NjkxMjc3Mzc0MjEwOTI5MTg4NDQyMjMwMjM3NzExMDYzNzgzNzI3MDkyNjg1NDQ4NzE4NTE1NjYxNjQxMDU0ODg2MTAxNzE2Njk4MzkwMTQ1MjgzMTk2Mjk2NzAyNDUwNTY2MTYxMjgzCisKK0EgPT0gCis4NTc5ODMzNjcxMjYyNjY3MTc2MDczODk3MTk2MzcwODY2ODQxMzQ0NjI2MTMwMDY0MTU4NTk4Nzc2NjYyMzU5NTU3ODgzOTI0NjQwODE5MTQxMjc3MTU5Njc5NDA5NjgxOTc3NjUwNDIzOTk5MDQxMTczOTI3MDc1MTgxNzUyMjA4NjQ4NTI4MTYzOTAwMDQyNjQxMDcyMDExNzczOTQ1NjUzNjMKKworQiA9PSAKKzEwMjU2MzcwNworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6Cis0ODQ4NjAwMjU1MTE1NTY2NzIyNDQ4NzA1OTcxMzM1MDQ0NzIzOTE5MDc3MjA2ODA5MjYzMDU2MzI3MjE2ODQxODg4MDY2MTAwNjU5MzUzNzIxODE0NDE2MDA2ODM5NTIxODY0MjM1MzQ5NTMzOTcyMDY0MDY5OTcyMTcwMzAwMzY0ODE0NDQ2MzU1NjI5MTMxNTY5NDc4Nzg2MjAwOTA1MjY0MTY0MDY1NjkzMzIzMjc5NDI4MworCitBID09IAorMTc1OTk1OTA5MzUzNjIzNzAzMjU3MDcyMTIwNDc5MzQwNjEwMDEwMzM3MTQ0MDg1Njg4ODUwNzQ1MjkyMDMxMzM2NzI0NjkxMjc3Mzc0MjEwOTI5MTg4NDQyMjMwMjM3NzExMDYzNzgzNzI3MDkyNjg1NDQ4NzE4NTE1NjYxNjQxMDU0ODg2MTAxNzE2Njk4MzkwMTQ1MjgzMTk2Mjk2NzAyNDUwNTY2MTYxMjgzCisKK0IgPT0gCisxMzc3NDc1MjcKKworRyA9PSAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorMTMxNTY0NjgwMTE1MjkxMDUwMjUwNjE0OTUwMTE5Mzg1MTgxNzEzMjg2MDQwNDUyMTI0MTAwOTY0NzY2OTc0NTA1MDYwNTU2NjQwMTI4NjE5MzIzNzIxNTY1MDU4MDU3ODgwNjg3OTExNDY5ODYyODIyNjMwMTY3OTA2MzExMDgzODY3OTAyOTEyNzU5Mzk1NzUxMjMzNzUzMDQ1OTk2MjI2MjMzMjg1MTczNTQxNjM5NjQyMjgyNzk4Njc0MDMKKworQSA9PSAKKzQ4NDg2MDAyNTUxMTU1NjY3MjI0NDg3MDU5NzEzMzUwNDQ3MjM5MTkwNzcyMDY4MDkyNjMwNTYzMjcyMTY4NDE4ODgwNjYxMDA2NTkzNTM3MjE4MTQ0MTYwMDY4Mzk1MjE4NjQyMzUzNDk1MzM5NzIwNjQwNjk5NzIxNzAzMDAzNjQ4MTQ0NDYzNTU2MjkxMzE1Njk0Nzg3ODYyMDA5MDUyNjQxNjQwNjU2OTMzMjMyNzk0MjgzCisKK0IgPT0gCisxMzU2NzI4NDcKKworRyA9PSAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorNjM1NTE5NDY5Mjc5MDUzMzYwMTEwNTE1NDM0MTczMTk5NzQ2NDQwNzkzMDAwOTQwNDgyMjkyNjgzMjEzNjA2MDMxOTk1NTA1ODM4ODEwNjQ1NjA4NDU0OTMxNjQxNTIwMDUxOTQ3MjQ4MTE0Nzk0MjI2MzkxNjU4NTQyODkwNjU4MjcyNjc0OTEzMTQ3OTQ2NTk1ODEwNzE0MjIyODIzNjkwOTY2NTMwNjc4MTUzODg2MDA1MzEwNzY4MDgzMDExMzg2OTEyMworCitBID09IAorMTMxNTY0NjgwMTE1MjkxMDUwMjUwNjE0OTUwMTE5Mzg1MTgxNzEzMjg2MDQwNDUyMTI0MTAwOTY0NzY2OTc0NTA1MDYwNTU2NjQwMTI4NjE5MzIzNzIxNTY1MDU4MDU3ODgwNjg3OTExNDY5ODYyODIyNjMwMTY3OTA2MzExMDgzODY3OTAyOTEyNzU5Mzk1NzUxMjMzNzUzMDQ1OTk2MjI2MjMzMjg1MTczNTQxNjM5NjQyMjgyNzk4Njc0MDMKKworQiA9PSAKKzI0MTUyMzU4NworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CiszMTU3MTE2Njc2NTM1NDMwMzAyNzk0NDM4MDI3NTQ0MTQ2NjQyODYzMzMxMzU4NTMwNzIyODYwMzMzNzQ1NjE3NTcxMDEwNDYwOTA1ODU3ODYyNTYxODcwNDg4MDAwMjY1NzUxMTM4OTU0MjcxMDQwMDE3NDU0NDA1NzA3NzU1NDU4NzAyMDQ0ODg0MDIzMTg0NTc0NDEyMjIxODAyNTAyMzUxNTAzOTI5OTM1MjI0OTk1MzE0NTgxOTMyMDk3NzA2ODc0ODE5MzQ4ODU4MDgzCisKK0EgPT0gCis2MzU1MTk0NjkyNzkwNTMzNjAxMTA1MTU0MzQxNzMxOTk3NDY0NDA3OTMwMDA5NDA0ODIyOTI2ODMyMTM2MDYwMzE5OTU1MDU4Mzg4MTA2NDU2MDg0NTQ5MzE2NDE1MjAwNTE5NDcyNDgxMTQ3OTQyMjYzOTE2NTg1NDI4OTA2NTgyNzI2NzQ5MTMxNDc5NDY1OTU4MTA3MTQyMjI4MjM2OTA5NjY1MzA2NzgxNTM4ODYwMDUzMTA3NjgwODMwMTEzODY5MTIzCisKK0IgPT0gCisyNDgzODg2NjcKKworRyA9PSAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorMzkwNTMzMTI5MjE5OTkyNTA2NzI1MzIwNjMzNDg5NDY3NzEzOTA3ODM3MzcwNDQ0OTYyMTYzMzc4NzI3ODE5OTM5MDkyOTI5NDQ4NzUyOTA1MzEwMTE1MzExMTgwMDMyMjQ5MjMwMzk0MzQ4MzM3NTY4OTczMTc3ODAyODc0MTY2MjI4MTMyNzc4MTI2MzM4ODgzNjcxOTU4ODk3MjM4NzIyNzM0Mzk0NzgzMjQ0MjM3MTMzMzY3MDU1NDIyMjk3NzM2MjE1NzU0ODI5ODM5MzY0MTU4MDY3CisKK0EgPT0gCiszMTU3MTE2Njc2NTM1NDMwMzAyNzk0NDM4MDI3NTQ0MTQ2NjQyODYzMzMxMzU4NTMwNzIyODYwMzMzNzQ1NjE3NTcxMDEwNDYwOTA1ODU3ODYyNTYxODcwNDg4MDAwMjY1NzUxMTM4OTU0MjcxMDQwMDE3NDU0NDA1NzA3NzU1NDU4NzAyMDQ0ODg0MDIzMTg0NTc0NDEyMjIxODAyNTAyMzUxNTAzOTI5OTM1MjI0OTk1MzE0NTgxOTMyMDk3NzA2ODc0ODE5MzQ4ODU4MDgzCisKK0IgPT0gCis2MTg0OTY1MQorCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6Cis0ODU4MzY1NDU1NTA3MDIyNDg5MTA0Nzg0NzA1MDczMjUxNjY1MjkxMDI1MDI0MDEzNTk5MjIyNTEzOTUxNTc3NzIwMDQzMjQ4NjY4NTk5OTQ2Mjk5NzA3MzQ0NDQ2ODM4MDQzNDM1OTkyOTQ5OTQ5ODgwNDcyMzc5MzEwNjU2NTI5MTE4MzIyMDQ0NDIyMTA4MDQ0OTc0MDU0Mjg4NDE3MjI4MTE1ODEyNjI1OTM3MzA5NTIxNjQzNTAwOTY2MTA1MDEwOTcxMTM0MTQxOTAwNTk3Mjg1Mjc3MDQ0MDczOQorCitBID09IAorMzkwNTMzMTI5MjE5OTkyNTA2NzI1MzIwNjMzNDg5NDY3NzEzOTA3ODM3MzcwNDQ0OTYyMTYzMzc4NzI3ODE5OTM5MDkyOTI5NDQ4NzUyOTA1MzEwMTE1MzExMTgwMDMyMjQ5MjMwMzk0MzQ4MzM3NTY4OTczMTc3ODAyODc0MTY2MjI4MTMyNzc4MTI2MzM4ODgzNjcxOTU4ODk3MjM4NzIyNzM0Mzk0NzgzMjQ0MjM3MTMzMzY3MDU1NDIyMjk3NzM2MjE1NzU0ODI5ODM5MzY0MTU4MDY3CisKK0IgPT0gCis2MjIwMTcwNworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisyNTczMzAzNTI1MTkwNTEyMDAzOTEzNTg2NjUyNDM4NDUyNTEzODg2OTc0ODQyNzcyNzAwMTEyODc2NDcwNDQ5OTA3MTM3ODkzOTIyNzg2MjA2ODUwMDYzMzgxMzUzODgzMTU5ODc3NjU3ODM3MjcwOTk2MzY3MzY3MDkzNDM4ODIxMzYyMjQzMzgwMDAxNTc1OTU4NTQ3MDU0MjY4NjMzMzAzOTYxNDkzMTY4MjA5ODkyMjkzNTA4NzgyMjk1MDA4NDkwODcxNTI5ODYyNzk5NjExNTE4NTg0OTI2MDcwMzUyNTMxNzQxOQorCitBID09IAorNDg1ODM2NTQ1NTUwNzAyMjQ4OTEwNDc4NDcwNTA3MzI1MTY2NTI5MTAyNTAyNDAxMzU5OTIyMjUxMzk1MTU3NzcyMDA0MzI0ODY2ODU5OTk0NjI5OTcwNzM0NDQ0NjgzODA0MzQzNTk5Mjk0OTk0OTg4MDQ3MjM3OTMxMDY1NjUyOTExODMyMjA0NDQyMjEwODA0NDk3NDA1NDI4ODQxNzIyODExNTgxMjYyNTkzNzMwOTUyMTY0MzUwMDk2NjEwNTAxMDk3MTEzNDE0MTkwMDU5NzI4NTI3NzA0NDA3MzkKKworQiA9PSAKKzI2NDgzMjIzMQorCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisyODA0NTk0NDY0OTM5OTQ4OTAxOTA2NjIzNDk5NTMxMDczOTE3OTgwNDk5MTk1Mzk3NDYyNjA1MzU5OTEzNzE3ODI3MDE0MzYwNTM4MTg2NTE4NTQwNzgxNTE3MTI5NTQ4NjUwOTM3NjMyMDA4NjgzMjgwNTU1NjAyNjMzMTIyMTcwNDU4NzczODk1NTA0ODk0ODA3MTgyNjY0NTQwNTI5MDc3ODM2ODU3ODk3OTcyMTc1NTMwMTQ4MTA3NTQ1OTM5MjExMzM5MDQ0Mzg2MTA2MTExNjMzNTEwMTY2Njk1Mzg2MzIzNDI2MjQxODA5Mzg3CisKK0EgPT0gCisyNTczMzAzNTI1MTkwNTEyMDAzOTEzNTg2NjUyNDM4NDUyNTEzODg2OTc0ODQyNzcyNzAwMTEyODc2NDcwNDQ5OTA3MTM3ODkzOTIyNzg2MjA2ODUwMDYzMzgxMzUzODgzMTU5ODc3NjU3ODM3MjcwOTk2MzY3MzY3MDkzNDM4ODIxMzYyMjQzMzgwMDAxNTc1OTU4NTQ3MDU0MjY4NjMzMzAzOTYxNDkzMTY4MjA5ODkyMjkzNTA4NzgyMjk1MDA4NDkwODcxNTI5ODYyNzk5NjExNTE4NTg0OTI2MDcwMzUyNTMxNzQxOQorCitCID09IAorNTQ0OTQwNDcKKworRyA9PSAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorNzM4MTM2NjEyMDgzNDMzNzIwMDk2NzA3MzA4MTY1Nzk3MTE0NDQ5OTE0MjU5MjU2OTc5MzQwNDcxMDc3NjkwNDE2NTY3MjM3NTkyNDY1MzA2MTEyNDg0ODQzNTMwMDc0NzgyNzIxMzkwNTI4NzczNTk0MzUxNDgyMzg0NzExOTAwNDU2NDQwODA4MjUxMTk2ODQ1MjY1MTMyMDg2NDg2NjcyNDQ3MTM2ODIyMDQ2NjI4NDA3NDY3NDU5OTIxODIzMTUwNjAwMTM4MDczMjY4Mzg1NTM0NTg4MjM4NTQ4ODY1MDEyNjM4MjA5NTE1OTIzNTEzNTE2NTQ3CisKK0EgPT0gCisyODA0NTk0NDY0OTM5OTQ4OTAxOTA2NjIzNDk5NTMxMDczOTE3OTgwNDk5MTk1Mzk3NDYyNjA1MzU5OTEzNzE3ODI3MDE0MzYwNTM4MTg2NTE4NTQwNzgxNTE3MTI5NTQ4NjUwOTM3NjMyMDA4NjgzMjgwNTU1NjAyNjMzMTIyMTcwNDU4NzczODk1NTA0ODk0ODA3MTgyNjY0NTQwNTI5MDc3ODM2ODU3ODk3OTcyMTc1NTMwMTQ4MTA3NTQ1OTM5MjExMzM5MDQ0Mzg2MTA2MTExNjMzNTEwMTY2Njk1Mzg2MzIzNDI2MjQxODA5Mzg3CisKK0IgPT0gCisxMzE1OTQxNzkKKworRyA9PSAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorMzkyODQ3NTI5MDU2MTI2NzY2NTI4NjE1NDE5OTM3MTY1MTkzNDIxMTY2Njk0MTcyNzkwNjY2NjI2NTU4NzUwMDQ3MDU3NTU4MTY4MTI0ODY2OTQwNTA5MTgwMTcxMjM2NTE3NjgxNDcwMTAwODc3Njg3NDQ1MTM0NjMzNzg0ODE1MzUyMDc2MTM4NzkwMjE3MjI4NzQ5MzMyMzk4MDI2NzE0MTkyNzA3NDQ3ODU1NzMxNjc5NDg1NzQ2MTIwNTg5ODUxOTkyMjIxNTA4MjkyOTc2OTAwNTc4Mjk5NTA0NDYxMzMzNzY3NDM3MjgwOTg4MzkzMDI2NDUyODQ2MDEzNjgzCisKK0EgPT0gCis3MzgxMzY2MTIwODM0MzM3MjAwOTY3MDczMDgxNjU3OTcxMTQ0NDk5MTQyNTkyNTY5NzkzNDA0NzEwNzc2OTA0MTY1NjcyMzc1OTI0NjUzMDYxMTI0ODQ4NDM1MzAwNzQ3ODI3MjEzOTA1Mjg3NzM1OTQzNTE0ODIzODQ3MTE5MDA0NTY0NDA4MDgyNTExOTY4NDUyNjUxMzIwODY0ODY2NzI0NDcxMzY4MjIwNDY2Mjg0MDc0Njc0NTk5MjE4MjMxNTA2MDAxMzgwNzMyNjgzODU1MzQ1ODgyMzg1NDg4NjUwMTI2MzgyMDk1MTU5MjM1MTM1MTY1NDcKKworQiA9PSAKKzI2NjEwNzYwMworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxNjg0NTkzOTMyMzE4ODM1MDU5NzU4NzY5MTkyNjgzOTg2NTU2MzI3NjM5NTY2Mjc0MDU1MDg4NTk2NjI0MDgwNTYyMjE1NDQzMTAyMDA1NDYyNjU2ODE4NDUzOTczNDY5NTY1ODA2MDQyMDgwNjQzMjg4MTQzMTk0NjU5NDA5NTgwODAyNDQ4ODk2OTIzNjg2MDI1OTE1OTg1MDM5NDQwMTU4MzUxOTA1ODc3NDA3NTY4NTk4NDI3OTI1NTQyODI0OTY3NDI4NDM2MDA1NzMzMzYwMjM2MzkyNTYwMDg2ODc1ODEyOTEyMzM0ODE0NTUzOTUxMjM0NTQ2NTU0ODg3MzUzMDQzNjU2MjcKKworQSA9PSAKKzM5Mjg0NzUyOTA1NjEyNjc2NjUyODYxNTQxOTkzNzE2NTE5MzQyMTE2NjY5NDE3Mjc5MDY2NjYyNjU1ODc1MDA0NzA1NzU1ODE2ODEyNDg2Njk0MDUwOTE4MDE3MTIzNjUxNzY4MTQ3MDEwMDg3NzY4NzQ0NTEzNDYzMzc4NDgxNTM1MjA3NjEzODc5MDIxNzIyODc0OTMzMjM5ODAyNjcxNDE5MjcwNzQ0Nzg1NTczMTY3OTQ4NTc0NjEyMDU4OTg1MTk5MjIyMTUwODI5Mjk3NjkwMDU3ODI5OTUwNDQ2MTMzMzc2NzQzNzI4MDk4ODM5MzAyNjQ1Mjg0NjAxMzY4MworCitCID09IAorMjE0NDA4MTExCisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzE0ODY1Nzc0Mjg4NjM2OTQxNDA0ODg0OTIzOTgxOTQ1ODMzMDcyMTEzNjY3NTY1MzEwMDU0OTUyMTc3ODYwNjA4MzU1MjYzMjUyNDYyNDA5NTU0NjU4NzI4OTQxMTkxOTI5NDAwMTk4MDUzMjkwMTEzNDkyOTEwMjcyNDU4NDQxNjU1NDU4NTE0MDgwMTIzODcwMTMyMDkyMzY1ODMzNDcyNDM2NDA3NDU1OTEwMTg1MjIxNDc0Mzg2NzE4ODM4MTM4MTM1MDY1NzgwODQwODM5ODkzMTEzOTEyNjg5NTk0ODE1NDg1NzA2MTU0NDYxMTY0MDcxNzc1NDgxMTM0Mzc5Nzk0OTA5NjkwNTAxNjg0NjQzCisKK0EgPT0gCisxNjg0NTkzOTMyMzE4ODM1MDU5NzU4NzY5MTkyNjgzOTg2NTU2MzI3NjM5NTY2Mjc0MDU1MDg4NTk2NjI0MDgwNTYyMjE1NDQzMTAyMDA1NDYyNjU2ODE4NDUzOTczNDY5NTY1ODA2MDQyMDgwNjQzMjg4MTQzMTk0NjU5NDA5NTgwODAyNDQ4ODk2OTIzNjg2MDI1OTE1OTg1MDM5NDQwMTU4MzUxOTA1ODc3NDA3NTY4NTk4NDI3OTI1NTQyODI0OTY3NDI4NDM2MDA1NzMzMzYwMjM2MzkyNTYwMDg2ODc1ODEyOTEyMzM0ODE0NTUzOTUxMjM0NTQ2NTU0ODg3MzUzMDQzNjU2MjcKKworQiA9PSAKKzQ0MTIyNzIzCisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzEyMTMzMDE3NzMyMDMyNDE2MTQ4OTcxMDk4NTYxMzQ4OTQ3ODMwMjE2NjgyOTIwMDAwMjM5ODQwOTg4MjQ0MjM2ODI1NjgxNzM2MzkzOTQyOTA4ODYxODUzNjY5OTMxMDgyOTIwMzkwNjg5NDAzMzM5MDc1MDUxNTc4MTM5MzQ5NjIzNTcyMDYxMzE0NTAyNDQwMDQxNzg2MTkyNjU4Njg2MTQ4NTk3OTQzMTYzNjEwMzE5MDQ0MTI5MjY2MDQxMzg4OTM3NzUwNjg4NTMxNzUyMTU1MDIxMDQ3NDQzMzk2NTg5NDQ0NDM2MzA0MDc2MzIyOTAxNTI3NzI0ODc0NTUyOTg2NTI5OTgzNjgyOTY5OTg3MTk5OTYwMTkKKworQSA9PSAKKzE0ODY1Nzc0Mjg4NjM2OTQxNDA0ODg0OTIzOTgxOTQ1ODMzMDcyMTEzNjY3NTY1MzEwMDU0OTUyMTc3ODYwNjA4MzU1MjYzMjUyNDYyNDA5NTU0NjU4NzI4OTQxMTkxOTI5NDAwMTk4MDUzMjkwMTEzNDkyOTEwMjcyNDU4NDQxNjU1NDU4NTE0MDgwMTIzODcwMTMyMDkyMzY1ODMzNDcyNDM2NDA3NDU1OTEwMTg1MjIxNDc0Mzg2NzE4ODM4MTM4MTM1MDY1NzgwODQwODM5ODkzMTEzOTEyNjg5NTk0ODE1NDg1NzA2MTU0NDYxMTY0MDcxNzc1NDgxMTM0Mzc5Nzk0OTA5NjkwNTAxNjg0NjQzCisKK0IgPT0gCis0MDgwODU2MworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxODY5MzUyNDU5ODk1MTUxNTgxMjc5NjkxMjkzNDc0NjQ4NTE5OTA0MjkwNjA2NDA5MTA5NTEyNjY1MTM3NDA5NzIyNDg0Mjg2NTExMDkwNjI5OTczNjgxNDQ3MjIwMTUyOTAwOTI4NDY2NjY5NDM4OTY1NTYxOTEyNTcyMjI1MjEyMDM2NDc2MDY5MTE0NDY2MzUxOTQxOTgyMTM0MzY0MjMwODAwMDU4Njc0ODk1MTY0MjE1NTkzMzA1MDA3MjIyNjQ0NDY3NjU2MDg3NjMyMjQ1NzIzODY0MTAxNTU0MTMxNjExNzI3MDc4MDIzMzQ4NjU3Mjk2NTQxMDkwNTA4NzM4MjA2MTA4MTM4NTUwNDE2Njc2MzM4NDM2MDEyODY4NDMKKworQSA9PSAKKzEyMTMzMDE3NzMyMDMyNDE2MTQ4OTcxMDk4NTYxMzQ4OTQ3ODMwMjE2NjgyOTIwMDAwMjM5ODQwOTg4MjQ0MjM2ODI1NjgxNzM2MzkzOTQyOTA4ODYxODUzNjY5OTMxMDgyOTIwMzkwNjg5NDAzMzM5MDc1MDUxNTc4MTM5MzQ5NjIzNTcyMDYxMzE0NTAyNDQwMDQxNzg2MTkyNjU4Njg2MTQ4NTk3OTQzMTYzNjEwMzE5MDQ0MTI5MjY2MDQxMzg4OTM3NzUwNjg4NTMxNzUyMTU1MDIxMDQ3NDQzMzk2NTg5NDQ0NDM2MzA0MDc2MzIyOTAxNTI3NzI0ODc0NTUyOTg2NTI5OTgzNjgyOTY5OTg3MTk5OTYwMTkKKworQiA9PSAKKzc3MDM1NzU5CisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzgzMTQyNjYxMDc5NzUxNDkwNTEwNzM5OTYwMDE5MTEyNDA2Mjg0MTExNDA4MzQ4NzMyNTkyNTgwNDU5MDM3NDA0Mzk0OTQ2MDM3MDk0NDA5OTE1MTI3Mzk5MTY1NjMzNzU2MTU5Mzg1NjA5NjcxOTU2MDg3ODQ1NTE3Njc4MzY3ODQ0OTAxNDI0NjE3ODY2OTg4MTg3MTMyNDgwNTg1OTY2NzIxOTYyNTg1NTg2NzMwNjkzNDQzNTM2MTAwMTM4MjQ2NTE2ODY4NjEzMjUwMDA5MDI4MTg3NjYyMDgwODI4MDEyNDk3MTkxNzc1MTcyMjI4ODMyMjQ3NzA2MDgwMDQ0OTcxNDIzNjU0NjMyMTQ2OTI4MTY1NzUxODg1MzAyMzMxOTI0NDkxNjgzCisKK0EgPT0gCisxODY5MzUyNDU5ODk1MTUxNTgxMjc5NjkxMjkzNDc0NjQ4NTE5OTA0MjkwNjA2NDA5MTA5NTEyNjY1MTM3NDA5NzIyNDg0Mjg2NTExMDkwNjI5OTczNjgxNDQ3MjIwMTUyOTAwOTI4NDY2NjY5NDM4OTY1NTYxOTEyNTcyMjI1MjEyMDM2NDc2MDY5MTE0NDY2MzUxOTQxOTgyMTM0MzY0MjMwODAwMDU4Njc0ODk1MTY0MjE1NTkzMzA1MDA3MjIyNjQ0NDY3NjU2MDg3NjMyMjQ1NzIzODY0MTAxNTU0MTMxNjExNzI3MDc4MDIzMzQ4NjU3Mjk2NTQxMDkwNTA4NzM4MjA2MTA4MTM4NTUwNDE2Njc2MzM4NDM2MDEyODY4NDMKKworQiA9PSAKKzIyMjM4MzU4NworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CiszODkyMzU0NzczODAzODA5ODU1MzE3NzQyMjQ1MDM5Nzk0NDQ4MjMwNjI1ODM5NTEyNjM4NzQ3NjQzODE0OTI3NzY2NzM4NjQyNDM2MzkyNjczNDg1OTk3NDQ5NTg2NDMyMjQxNjI2NDQwOTI3MDEwNjQxNTY0MDY0NzY0MzM2NDAyMzY4NjM0MTg2NjE4MjUwMTM0MjM0MTg5MDY2MTc5NzcxMjQwMjMyNDU4MjQ5ODA2ODUwODM4NDkwNDEwNDczNDYyMzkxNDAxNDM4MTYwNTI4MTU3OTgxOTQyNDk5NTgxNjM0NzMyNzA2OTA0NDExODA3MTk1MjU5NjIwNzc5Mzc5Mjc0MDE3NzA0MDUwNzkwODY1MDMwODA4NTAxNjMzNzcyMTE3MjE3ODk5NTM0NDQzCisKK0EgPT0gCis4MzE0MjY2MTA3OTc1MTQ5MDUxMDczOTk2MDAxOTExMjQwNjI4NDExMTQwODM0ODczMjU5MjU4MDQ1OTAzNzQwNDM5NDk0NjAzNzA5NDQwOTkxNTEyNzM5OTE2NTYzMzc1NjE1OTM4NTYwOTY3MTk1NjA4Nzg0NTUxNzY3ODM2Nzg0NDkwMTQyNDYxNzg2Njk4ODE4NzEzMjQ4MDU4NTk2NjcyMTk2MjU4NTU4NjczMDY5MzQ0MzUzNjEwMDEzODI0NjUxNjg2ODYxMzI1MDAwOTAyODE4NzY2MjA4MDgyODAxMjQ5NzE5MTc3NTE3MjIyODgzMjI0NzcwNjA4MDA0NDk3MTQyMzY1NDYzMjE0NjkyODE2NTc1MTg4NTMwMjMzMTkyNDQ5MTY4MworCitCID09IAorMjM0MDc2ODcKKworRyA9PSAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorMTY2MzYwNjY1Mjk4ODA5MTgxMTI4NDAxNDM2NjU2MDE3MTUyMjU4MjY4MzMxODUxNDUxOTM3OTkyNDk1MDM5MDYyNzI1MDE1NTQ0MDMxMzY5MTIyNjc0NDIyNzc4NzkyMTkyODg5NDU1MTc1NTIxOTQ5NTUwMTM2NTU1NTM3MDAyNzI1NzU2ODUwNjM0OTk1ODAxMDQ1NzY4Mjg5ODYxMjA4MjA0ODk1OTQ2NDQ2NTM2OTg5Mjg0MjYwMzc2NTI4MDMxNzY5NjExNjU1Mjg1MDY2NDc3MzI5MTM3MTQ5MDMzOTA4NDE1NjA1MjI0NDI1NjYzNTExNTk5NzQ1MzM5OTc2MTAyOTU2NzAzMzk3MTk5ODYxNzMwMzk4ODM3NjE3MjUzOTE3MjcwMjI0NjU3NTIyNTgzNzA1NDcyMworCitBID09IAorMzg5MjM1NDc3MzgwMzgwOTg1NTMxNzc0MjI0NTAzOTc5NDQ0ODIzMDYyNTgzOTUxMjYzODc0NzY0MzgxNDkyNzc2NjczODY0MjQzNjM5MjY3MzQ4NTk5NzQ0OTU4NjQzMjI0MTYyNjQ0MDkyNzAxMDY0MTU2NDA2NDc2NDMzNjQwMjM2ODYzNDE4NjYxODI1MDEzNDIzNDE4OTA2NjE3OTc3MTI0MDIzMjQ1ODI0OTgwNjg1MDgzODQ5MDQxMDQ3MzQ2MjM5MTQwMTQzODE2MDUyODE1Nzk4MTk0MjQ5OTU4MTYzNDczMjcwNjkwNDQxMTgwNzE5NTI1OTYyMDc3OTM3OTI3NDAxNzcwNDA1MDc5MDg2NTAzMDgwODUwMTYzMzc3MjExNzIxNzg5OTUzNDQ0MworCitCID09IAorMjEzNzAxODI3CisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1Rvb2sgMzMwNTcgdGlja3MsIDEwNDggYml0cworUCA9PSAxNjYzNjA2NjUyOTg4MDkxODExMjg0MDE0MzY2NTYwMTcxNTIyNTgyNjgzMzE4NTE0NTE5Mzc5OTI0OTUwMzkwNjI3MjUwMTU1NDQwMzEzNjkxMjI2NzQ0MjI3Nzg3OTIxOTI4ODk0NTUxNzU1MjE5NDk1NTAxMzY1NTU1MzcwMDI3MjU3NTY4NTA2MzQ5OTU4MDEwNDU3NjgyODk4NjEyMDgyMDQ4OTU5NDY0NDY1MzY5ODkyODQyNjAzNzY1MjgwMzE3Njk2MTE2NTUyODUwNjY0NzczMjkxMzcxNDkwMzM5MDg0MTU2MDUyMjQ0MjU2NjM1MTE1OTk3NDUzMzk5NzYxMDI5NTY3MDMzOTcxOTk4NjE3MzAzOTg4Mzc2MTcyNTM5MTcyNzAyMjQ2NTc1MjI1ODM3MDU0NzIzCitRID09IDM4OTIzNTQ3NzM4MDM4MDk4NTUzMTc3NDIyNDUwMzk3OTQ0NDgyMzA2MjU4Mzk1MTI2Mzg3NDc2NDM4MTQ5Mjc3NjY3Mzg2NDI0MzYzOTI2NzM0ODU5OTc0NDk1ODY0MzIyNDE2MjY0NDA5MjcwMTA2NDE1NjQwNjQ3NjQzMzY0MDIzNjg2MzQxODY2MTgyNTAxMzQyMzQxODkwNjYxNzk3NzEyNDAyMzI0NTgyNDk4MDY4NTA4Mzg0OTA0MTA0NzM0NjIzOTE0MDE0MzgxNjA1MjgxNTc5ODE5NDI0OTk1ODE2MzQ3MzI3MDY5MDQ0MTE4MDcxOTUyNTk2MjA3NzkzNzkyNzQwMTc3MDQwNTA3OTA4NjUwMzA4MDg1MDE2MzM3NzIxMTcyMTc4OTk1MzQ0NDMKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvZXRjL3ByaW1lLjUxMiBiL2xpYnRvbW1hdGgvZXRjL3ByaW1lLjUxMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjZlYzMwCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9ldGMvcHJpbWUuNTEyCkBAIC0wLDAgKzEsMjA1IEBACitFbnRlciAjIG9mIGJpdHM6IAorRW50ZXIgbnVtYmVyIG9mIGJhc2VzIHRvIHRyeSAoMSB0byA4KToKK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6Cis4NTkzMzkyNjgwNzYzNDcyNworCitBID09IAorMjUzNzU4MDIzCisKK0IgPT0gCisxNjkzMjI1ODEKKworRyA9PSA1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorMjM5MzAxOTg4MjUwODYyNDE0NjIxMTM3OTkKKworQSA9PSAKKzg1OTMzOTI2ODA3NjM0NzI3CisKK0IgPT0gCisxMzkyMzYwMzcKKworRyA9PSAxMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzY0MDE4NDQ2NDcyNjE2MTI2MDIzNzg2NzY1NzI1MTAwMTkKKworQSA9PSAKKzIzOTMwMTk4ODI1MDg2MjQxNDYyMTEzNzk5CisKK0IgPT0gCisxMzM3NjA3OTEKKworRyA9PSAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorMjY5NzMxMzY2MDI3NzI4Nzc3NzEyMDM0ODg4Njg0MDE1MzI5MzU0MjU5CisKK0EgPT0gCis2NDAxODQ0NjQ3MjYxNjEyNjAyMzc4Njc2NTcyNTEwMDE5CisKK0IgPT0gCisyMTA2NjY5MQorCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CiszNzk0MjMzODIwOTAyNTU3MTY5MDA3NTAyNTA5OTE4OTQ2Nzk5MjMyOTY4NDIyMzcwNworCitBID09IAorMjY5NzMxMzY2MDI3NzI4Nzc3NzEyMDM0ODg4Njg0MDE1MzI5MzU0MjU5CisKK0IgPT0gCis3MDMzMzU2NworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxNTMwNjkwNDcxNDI1ODk4MjQ4NDQ3MzQ5MDc3NDEwMTcwNTM2MzMwODMyNzQzNjk4ODE2MDI0ODMyMworCitBID09IAorMzc5NDIzMzgyMDkwMjU1NzE2OTAwNzUwMjUwOTkxODk0Njc5OTIzMjk2ODQyMjM3MDcKKworQiA9PSAKKzIwMTcxMjcyMworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxNjE2NzQ0NzU3MDE4NTEzMzkyODEwMzU1MTkxNTAzODUzMDQwMzU3MTU1Mjc1NzMzMzMzMTI0NjI0NTEzNTMwMDk5CisKK0EgPT0gCisxNTMwNjkwNDcxNDI1ODk4MjQ4NDQ3MzQ5MDc3NDEwMTcwNTM2MzMwODMyNzQzNjk4ODE2MDI0ODMyMworCitCID09IAorNTI4MTA5NjMKKworRyA9PSAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorNDY0MjIyMDk0ODE0MjA4MDQ3MTYxNzcxMDM2MDcyNjIyNDg1MTg4NjU4MDc3OTQwMTU0Njg5OTM5MzA2Mzg2Mjg5OTgzNzg3OTgzCisKK0EgPT0gCisxNjE2NzQ0NzU3MDE4NTEzMzkyODEwMzU1MTkxNTAzODUzMDQwMzU3MTU1Mjc1NzMzMzMzMTI0NjI0NTEzNTMwMDk5CisKK0IgPT0gCisxNDM1NjY5MDkKKworRyA9PSA1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDZXJ0aWZpY2F0ZSBvZiBwcmltYWxpdHkgZm9yOgorMTg3NDI5OTMxNjc0MDUzNzg0NjI2NDg3NTYwNzI5NjQzNjAxMjA4NzU3Mzc0OTk0MTc3MjU4NDI5OTMwNjk5MzU0NzcwMDQ5MzY5MDI1MDk2NDQ3CisKK0EgPT0gCis0NjQyMjIwOTQ4MTQyMDgwNDcxNjE3NzEwMzYwNzI2MjI0ODUxODg2NTgwNzc5NDAxNTQ2ODk5MzkzMDYzODYyODk5ODM3ODc5ODMKKworQiA9PSAKKzIwMTg3NTI4MQorCitHID09IDUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxMDA1NzkyMjA4NDY1MDI2MjEwNzQwOTM3MjcxMTk4NTEzMzE3NzUwNTI2NjQ0NDQzMzk2MzI2ODI1OTg1ODk0NTY2NjY5Mzg1MjE5NzY2MjUzMDU4MzI5MTc1NjMKKworQSA9PSAKKzE4NzQyOTkzMTY3NDA1Mzc4NDYyNjQ4NzU2MDcyOTY0MzYwMTIwODc1NzM3NDk5NDE3NzI1ODQyOTkzMDY5OTM1NDc3MDA0OTM2OTAyNTA5NjQ0NworCitCID09IAorMjY4MzExNTIzCisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzExNzM2MTYwODEzMDk3NTg0NzUxOTcwMjIxMzc4MzM3OTIxMzM4MTU3NTMzNjg5NjU5NDU4ODUwODk3MjAxNTMzNzA3Mzc5NjU0OTcxMzQ4Nzg2NTEzODQwMzAyMTk3NjUxNjMKKworQSA9PSAKKzEwMDU3OTIyMDg0NjUwMjYyMTA3NDA5MzcyNzExOTg1MTMzMTc3NTA1MjY2NDQ0NDMzOTYzMjY4MjU5ODU4OTQ1NjY2NjkzODUyMTk3NjYyNTMwNTgzMjkxNzU2MworCitCID09IAorNTgzNDI4NworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxOTE0NTY5MTM0ODk5MDU5MTMxODU5MzUxOTc2NTU2NzI1ODU3MTM1NzMwNzAzNDkwNDQxOTU0MTE3MjgxMTQ5MDU2OTE3MjExODY1NzQ5MDc3MzgwODEzNDA3NTQzNzMwMzI3MzUyODM2MjMKKworQSA9PSAKKzExNzM2MTYwODEzMDk3NTg0NzUxOTcwMjIxMzc4MzM3OTIxMzM4MTU3NTMzNjg5NjU5NDU4ODUwODk3MjAxNTMzNzA3Mzc5NjU0OTcxMzQ4Nzg2NTEzODQwMzAyMTk3NjUxNjMKKworQiA9PSAKKzgxNTY3MDk3CisKK0cgPT0gNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzU3ODU2NTMwNDg5MjAxNzUwMTY0MTc4NTc2Mzk5NDQ4ODY4NDg5MjQzODc0MDgzMDU2NTg3NjgzNzQzMzQ1NTk5ODk4NDg5NTU0NDAxNjE4OTQzMjQwOTAxNTQxMDA1MDgwMDQ5MzIxNzA2Nzg5OTg3NTE5CisKK0EgPT0gCisxOTE0NTY5MTM0ODk5MDU5MTMxODU5MzUxOTc2NTU2NzI1ODU3MTM1NzMwNzAzNDkwNDQxOTU0MTE3MjgxMTQ5MDU2OTE3MjExODY1NzQ5MDc3MzgwODEzNDA3NTQzNzMwMzI3MzUyODM2MjMKKworQiA9PSAKKzE1MTA5NTQzMworCitHID09IDcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6CisxMzc5MDUyOTc1MDQ1MjU3NjY5ODEwOTY3MTcxMDc3Mzc4NDk0OTE4NTYyMTI0NDEyMjA0MDgwNDc5MjQwMzQwNzI3MjcyOTAzODM3Nzc2NzE2MjIzMzY1MzI0ODg1MjA5OTU0NTEzNDgzMTcyMjUxMjA4NTg4MTgxNDgwMworCitBID09IAorNTc4NTY1MzA0ODkyMDE3NTAxNjQxNzg1NzYzOTk0NDg4Njg0ODkyNDM4NzQwODMwNTY1ODc2ODM3NDMzNDU1OTk4OTg0ODk1NTQ0MDE2MTg5NDMyNDA5MDE1NDEwMDUwODAwNDkzMjE3MDY3ODk5ODc1MTkKKworQiA9PSAKKzExOTE3ODY3OQorCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NlcnRpZmljYXRlIG9mIHByaW1hbGl0eSBmb3I6Cis3MDc1OTg1OTg5MDAwODE3NzQyNjc3NTQ3ODIxMTA2NTM0MTc0MzM0ODEyMTExNjA1MDE4ODU3NzAzODI1NjM3MTcwMTQwMDQwNTA5MDY3NzA0MjY5Njk2MTk4MjMxMjY2MzUxNjMxMTMyNDY0MDM1NjcxODU4MDc3MDUyODc2MDU4OTc5CisKK0EgPT0gCisxMzc5MDUyOTc1MDQ1MjU3NjY5ODEwOTY3MTcxMDc3Mzc4NDk0OTE4NTYyMTI0NDEyMjA0MDgwNDc5MjQwMzQwNzI3MjcyOTAzODM3Nzc2NzE2MjIzMzY1MzI0ODg1MjA5OTU0NTEzNDgzMTcyMjUxMjA4NTg4MTgxNDgwMworCitCID09IAorMjU2NTUyMzYzCisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzEyMjcyNzMwMDYyMzI1ODgwNzI5MDc0ODg5MTAyODIzMDc0MzU5MjEyMjY2NDY4OTUxMzEyMjU0MDc0NTIwNTY2Nzc4OTk0MTExNjI4OTI4Mjk1NjQ0NTUxNTQwODAzMTA5Mzc0NzE3NDcxNDA5NDIzNjA3ODk2MjM4MTkzMjcyMzQyNTgxNjI0MjA0NjMKKworQSA9PSAKKzcwNzU5ODU5ODkwMDA4MTc3NDI2Nzc1NDc4MjExMDY1MzQxNzQzMzQ4MTIxMTE2MDUwMTg4NTc3MDM4MjU2MzcxNzAxNDAwNDA1MDkwNjc3MDQyNjk2OTYxOTgyMzEyNjYzNTE2MzExMzI0NjQwMzU2NzE4NTgwNzcwNTI4NzYwNTg5NzkKKworQiA9PSAKKzg2NzIwOTg5CisKK0cgPT0gNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzQ0Njc2NDg5NjkxMzU1NDYxMzY4NjA2NzAzNjkwODcwMjg3Nzk0Mjg3MjM1NTA1MzMyOTkzNzc5MDM5ODE1NjA2OTkzNjI1NTc1OTg4OTg4NDI0NjgzMjc3OTczNzExNDAzMjY2NjMxODIyMDUwMDEwNjQ5OTE2MTg1MjE5Mzc2NTM4MDgzMTMzMDEwNjM3NTIzNTc2MworCitBID09IAorMTIyNzI3MzAwNjIzMjU4ODA3MjkwNzQ4ODkxMDI4MjMwNzQzNTkyMTIyNjY0Njg5NTEzMTIyNTQwNzQ1MjA1NjY3Nzg5OTQxMTE2Mjg5MjgyOTU2NDQ1NTE1NDA4MDMxMDkzNzQ3MTc0NzE0MDk0MjM2MDc4OTYyMzgxOTMyNzIzNDI1ODE2MjQyMDQ2MworCitCID09IAorMTgyMDE1Mjg3CisKK0cgPT0gMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2VydGlmaWNhdGUgb2YgcHJpbWFsaXR5IGZvcjoKKzUyOTAyMDMwMTA4NDk1ODY1OTY5NzQ5NTM3MTcwMTg4OTY1NDM5MDcxOTU5MDEwODIwNTY5Mzk1ODc3Njg0NzkzNzcwMjg1NzU5MTExMjc5NDQ2MTEyMzYwMjA0NTk2NTIwMzQwODIyNTEzMzU1ODMzMDgwNzA4NDYzNzk1MTQ1Njk4Mzg5ODQ4MTExODc4MjM0MjA5NTEyNzUyNDMKKworQSA9PSAKKzQ0Njc2NDg5NjkxMzU1NDYxMzY4NjA2NzAzNjkwODcwMjg3Nzk0Mjg3MjM1NTA1MzMyOTkzNzc5MDM5ODE1NjA2OTkzNjI1NTc1OTg4OTg4NDI0NjgzMjc3OTczNzExNDAzMjY2NjMxODIyMDUwMDEwNjQ5OTE2MTg1MjE5Mzc2NTM4MDgzMTMzMDEwNjM3NTIzNTc2MworCitCID09IAorNTkyMDU2NworCitHID09IDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitUb29rIDM0NTQgdGlja3MsIDUyMSBiaXRzCitQID09IDUyOTAyMDMwMTA4NDk1ODY1OTY5NzQ5NTM3MTcwMTg4OTY1NDM5MDcxOTU5MDEwODIwNTY5Mzk1ODc3Njg0NzkzNzcwMjg1NzU5MTExMjc5NDQ2MTEyMzYwMjA0NTk2NTIwMzQwODIyNTEzMzU1ODMzMDgwNzA4NDYzNzk1MTQ1Njk4Mzg5ODQ4MTExODc4MjM0MjA5NTEyNzUyNDMKK1EgPT0gNDQ2NzY0ODk2OTEzNTU0NjEzNjg2MDY3MDM2OTA4NzAyODc3OTQyODcyMzU1MDUzMzI5OTM3NzkwMzk4MTU2MDY5OTM2MjU1NzU5ODg5ODg0MjQ2ODMyNzc5NzM3MTE0MDMyNjY2MzE4MjIwNTAwMTA2NDk5MTYxODUyMTkzNzY1MzgwODMxMzMwMTA2Mzc1MjM1NzYzCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2V0Yy90aW1lci5hc20gYi9saWJ0b21tYXRoL2V0Yy90aW1lci5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU4OTBkOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvZXRjL3RpbWVyLmFzbQpAQCAtMCwwICsxLDM3IEBACis7IHg4NiB0aW1lciBpbiBOQVNNDQorOw0KKzsgVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGlhaHUuY2ENCitbYml0cyAzMl0NCitbc2VjdGlvbiAuZGF0YV0NCit0aW1lIGRkIDAsIDANCisNCitbc2VjdGlvbiAudGV4dF0NCisNCislaWZkZWYgVVNFX0VMRg0KK1tnbG9iYWwgdF9zdGFydF0NCit0X3N0YXJ0Og0KKyVlbHNlDQorW2dsb2JhbCBfdF9zdGFydF0NCitfdF9zdGFydDoNCislZW5kaWYNCisgICBwdXNoIGVkeA0KKyAgIHB1c2ggZWF4DQorICAgcmR0c2MNCisgICBtb3YgW3RpbWUrMF0sZWR4DQorICAgbW92IFt0aW1lKzRdLGVheA0KKyAgIHBvcCBlYXgNCisgICBwb3AgZWR4DQorICAgcmV0DQorICAgDQorJWlmZGVmIFVTRV9FTEYNCitbZ2xvYmFsIHRfcmVhZF0NCit0X3JlYWQ6DQorJWVsc2UNCitbZ2xvYmFsIF90X3JlYWRdDQorX3RfcmVhZDoNCislZW5kaWYNCisgICByZHRzYw0KKyAgIHN1YiBlYXgsW3RpbWUrNF0NCisgICBzYmIgZWR4LFt0aW1lKzBdDQorICAgcmV0DQorICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9ldGMvdHVuZS5jIGIvbGlidG9tbWF0aC9ldGMvdHVuZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0YTUwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2V0Yy90dW5lLmMKQEAgLTAsMCArMSwxNDIgQEAKKy8qIFR1bmUgdGhlIEthcmF0c3ViYSBwYXJhbWV0ZXJzCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbQorICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworLyogaG93IG1hbnkgdGltZXMgdG9kbyBlYWNoIHNpemUgbXVsdC4gIERlcGVuZHMgb24geW91ciBjb21wdXRlci4gIEZvciBzbG93IGNvbXB1dGVycworICogdGhpcyBjYW4gYmUgbG93IGxpa2UgNSBvciAxMC4gIEZvciBmYXN0IFtyZTogQXRobG9uXSBzaG91bGQgYmUgMjUgLSA1MCBvciBzbyAKKyAqLworI2RlZmluZSBUSU1FUyAoMVVMPDwxNFVMKQorCisvKiBSRFRTQyBmcm9tIFNjb3R0IER1cGxpY2hhbiAqLworc3RhdGljIHVsb25nNjQgVElNRlVOQyAodm9pZCkKKyAgIHsKKyAgICNpZiBkZWZpbmVkIF9fR05VQ19fCisgICAgICAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGE7CisgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJkdHNjXG5tb3ZsICUlZWF4LCUwXG5tb3ZsICUlZWR4LDQrJTBcbiI6OiJtIihhKToiJWVheCIsIiVlZHgiKTsKKyAgICAgICAgIHJldHVybiBhOworICAgICAgI2Vsc2UgLyogZ2NjLUlBNjQgdmVyc2lvbiAqLworICAgICAgICAgdW5zaWduZWQgbG9uZyByZXN1bHQ7CisgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ICUwPWFyLml0YyIgOiAiPXIiKHJlc3VsdCkgOjogIm1lbW9yeSIpOworICAgICAgICAgd2hpbGUgKF9fYnVpbHRpbl9leHBlY3QgKChpbnQpIHJlc3VsdCA9PSAtMSwgMCkpCisgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibW92ICUwPWFyLml0YyIgOiAiPXIiKHJlc3VsdCkgOjogIm1lbW9yeSIpOworICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICNlbmRpZgorCisgICAvLyBNaWNyb3NvZnQgYW5kIEludGVsIFdpbmRvd3MgY29tcGlsZXJzCisgICAjZWxpZiBkZWZpbmVkIF9NX0lYODYKKyAgICAgX19hc20gcmR0c2MKKyAgICNlbGlmIGRlZmluZWQgX01fQU1ENjQKKyAgICAgcmV0dXJuIF9fcmR0c2MgKCk7CisgICAjZWxpZiBkZWZpbmVkIF9NX0lBNjQKKyAgICAgI2lmIGRlZmluZWQgX19JTlRFTF9DT01QSUxFUgorICAgICAgICNpbmNsdWRlIDxpYTY0aW50cmluLmg+CisgICAgICNlbmRpZgorICAgICAgcmV0dXJuIF9fZ2V0UmVnICgzMTE2KTsKKyAgICNlbHNlCisgICAgICNlcnJvciBuZWVkIHJkdHNjIGZ1bmN0aW9uIGZvciB0aGlzIGJ1aWxkCisgICAjZW5kaWYKKyAgIH0KKworCisjaWZuZGVmIFg4Nl9USU1FUgorCisvKiBnZW5lcmljIElTTyBDIHRpbWVyICovCit1bG9uZzY0IExCTF9UOwordm9pZCB0X3N0YXJ0KHZvaWQpIHsgTEJMX1QgPSBUSU1GVU5DKCk7IH0KK3Vsb25nNjQgdF9yZWFkKHZvaWQpIHsgcmV0dXJuIFRJTUZVTkMoKSAtIExCTF9UOyB9CisKKyNlbHNlCitleHRlcm4gdm9pZCB0X3N0YXJ0KHZvaWQpOworZXh0ZXJuIHVsb25nNjQgdF9yZWFkKHZvaWQpOworI2VuZGlmCisKK3Vsb25nNjQgdGltZV9tdWx0KGludCBzaXplLCBpbnQgcykKK3sKKyAgdW5zaWduZWQgbG9uZyAgICAgeDsKKyAgbXBfaW50ICBhLCBiLCBjOworICB1bG9uZzY0IHQxOworCisgIG1wX2luaXQgKCZhKTsKKyAgbXBfaW5pdCAoJmIpOworICBtcF9pbml0ICgmYyk7CisKKyAgbXBfcmFuZCAoJmEsIHNpemUpOworICBtcF9yYW5kICgmYiwgc2l6ZSk7CisKKyAgaWYgKHMgPT0gMSkgeyAKKyAgICAgIEtBUkFUU1VCQV9NVUxfQ1VUT0ZGID0gc2l6ZTsKKyAgfSBlbHNlIHsKKyAgICAgIEtBUkFUU1VCQV9NVUxfQ1VUT0ZGID0gMTAwMDAwOworICB9CisKKyAgdF9zdGFydCgpOworICBmb3IgKHggPSAwOyB4IDwgVElNRVM7IHgrKykgeworICAgICAgbXBfbXVsKCZhLCZiLCZjKTsKKyAgfQorICB0MSA9IHRfcmVhZCgpOworICBtcF9jbGVhciAoJmEpOworICBtcF9jbGVhciAoJmIpOworICBtcF9jbGVhciAoJmMpOworICByZXR1cm4gdDE7Cit9CisKK3Vsb25nNjQgdGltZV9zcXIoaW50IHNpemUsIGludCBzKQoreworICB1bnNpZ25lZCBsb25nICAgICB4OworICBtcF9pbnQgIGEsIGI7CisgIHVsb25nNjQgdDE7CisKKyAgbXBfaW5pdCAoJmEpOworICBtcF9pbml0ICgmYik7CisKKyAgbXBfcmFuZCAoJmEsIHNpemUpOworCisgIGlmIChzID09IDEpIHsgCisgICAgICBLQVJBVFNVQkFfU1FSX0NVVE9GRiA9IHNpemU7CisgIH0gZWxzZSB7CisgICAgICBLQVJBVFNVQkFfU1FSX0NVVE9GRiA9IDEwMDAwMDsKKyAgfQorCisgIHRfc3RhcnQoKTsKKyAgZm9yICh4ID0gMDsgeCA8IFRJTUVTOyB4KyspIHsKKyAgICAgIG1wX3NxcigmYSwmYik7CisgIH0KKyAgdDEgPSB0X3JlYWQoKTsKKyAgbXBfY2xlYXIgKCZhKTsKKyAgbXBfY2xlYXIgKCZiKTsKKyAgcmV0dXJuIHQxOworfQorCitpbnQKK21haW4gKHZvaWQpCit7CisgIHVsb25nNjQgdDEsIHQyOworICBpbnQgeCwgeTsKKworICBmb3IgKHggPSA4OyA7IHggKz0gMikgeyAKKyAgICAgdDEgPSB0aW1lX211bHQoeCwgMCk7CisgICAgIHQyID0gdGltZV9tdWx0KHgsIDEpOworICAgICBwcmludGYoIiVkOiAlOWxsdSAlOWxsdSwgJTlsbHVcbiIsIHgsIHQxLCB0MiwgdDIgLSB0MSk7CisgICAgIGlmICh0MiA8IHQxKSBicmVhazsKKyAgfQorICB5ID0geDsKKworICBmb3IgKHggPSA4OyA7IHggKz0gMikgeyAKKyAgICAgdDEgPSB0aW1lX3Nxcih4LCAwKTsKKyAgICAgdDIgPSB0aW1lX3Nxcih4LCAxKTsKKyAgICAgcHJpbnRmKCIlZDogJTlsbHUgJTlsbHUsICU5bGx1XG4iLCB4LCB0MSwgdDIsIHQyIC0gdDEpOworICAgICBpZiAodDIgPCB0MSkgYnJlYWs7CisgIH0KKyAgcHJpbnRmKCJLQVJBVFNVQkFfTVVMX0NVVE9GRiA9ICVkXG4iLCB5KTsKKyAgcHJpbnRmKCJLQVJBVFNVQkFfU1FSX0NVVE9GRiA9ICVkXG4iLCB4KTsKKworICByZXR1cm4gMDsKK30KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ldGMvdHVuZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9nZW4ucGwgYi9saWJ0b21tYXRoL2dlbi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjM2NTkxCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9nZW4ucGwKQEAgLTAsMCArMSwxNyBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisjCisjIEdlbmVyYXRlcyBhICJzaW5nbGUgZmlsZSIgeW91IGNhbiB1c2UgdG8gcXVpY2tseQorIyBhZGQgdGhlIHdob2xlIHNvdXJjZSB3aXRob3V0IGFueSBtYWtlZmlsZSB0cm91YmxlcworIwordXNlIHN0cmljdDsKKworb3BlbiggT1VULCAiPm1waS5jIiApIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiBtcGkuYyBmb3Igd3JpdGluZzogJCEiOworZm9yZWFjaCBteSAkZmlsZW5hbWUgKGdsb2IgImJuKi5jIikgeworICAgb3BlbiggU1JDLCAiPCRmaWxlbmFtZSIgKSBvciBkaWUgIkNvdWxkbid0IG9wZW4gJGZpbGVuYW1lIGZvciByZWFkaW5nOiAkISI7CisgICBwcmludCBPVVQgIi8qIFN0YXJ0OiAkZmlsZW5hbWUgKi9cbiI7CisgICBwcmludCBPVVQgd2hpbGUgPFNSQz47CisgICBwcmludCBPVVQgIlxuLyogRW5kOiAkZmlsZW5hbWUgKi9cblxuIjsKKyAgIGNsb3NlIFNSQyBvciBkaWUgIkVycm9yIGNsb3NpbmcgJGZpbGVuYW1lIGFmdGVyIHJlYWRpbmc6ICQhIjsKK30KK3ByaW50IE9VVCAiXG4vKiBFT0YgKi9cbiI7CitjbG9zZSBPVVQgb3IgZGllICJFcnJvciBjbG9zaW5nIG1waS5jIGFmdGVyIHdyaXRpbmc6ICQhIjsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2xvZ3MvUkVBRE1FIGIvbGlidG9tbWF0aC9sb2dzL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTIwYzgxCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9sb2dzL1JFQURNRQpAQCAtMCwwICsxLDEzIEBACitUbyB1c2UgdGhlIHByZXR0eSBncmFwaHMgeW91IGhhdmUgdG8gZmlyc3QgYnVpbGQvcnVuIHRoZSBsdG10ZXN0IGZyb20gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBwYWNrYWdlLiAgDQorVG9kbyB0aGlzIHR5cGUgDQorDQorbWFrZSB0aW1pbmcgOyBsdG10ZXN0DQorDQoraW4gdGhlIHJvb3QuICBJdCB3aWxsIHJ1biBmb3IgYSB3aGlsZSBbYWJvdXQgdGVuIG1pbnV0ZXMgb24gbW9zdCBQQ3NdIGFuZCBwcm9kdWNlIGEgc2VyaWVzIG9mIC5sb2cgZmlsZXMgaW4gbG9ncy8uDQorDQorQWZ0ZXIgZG9pbmcgdGhhdCBydW4gImdudXBsb3QgZ3JhcGhzLmRlbSIgdG8gbWFrZSB0aGUgUE5Hcy4gIElmIHlvdSBtYW5hZ2VkIHRvZG8gdGhhdCBhbGwgc28gZmFyIGp1c3Qgb3BlbiBpbmRleC5odG1sIHRvIHZpZXcNCit0aGVtIGFsbCA6LSkNCisNCitIYXZlIGZ1bg0KKw0KK1RvbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvbG9ncy9hZGQubG9nIGIvbGlidG9tbWF0aC9sb2dzL2FkZC5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM1MDNhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvbG9ncy9hZGQubG9nCkBAIC0wLDAgKzEsMTYgQEAKKzQ4MCAgICAgICAgODcKKzk2MCAgICAgICAxMTEKKzE0NDAgICAgICAgMTM1CisxOTIwICAgICAgIDE1OQorMjQwMCAgICAgICAyMDAKKzI4ODAgICAgICAgMjI0CiszMzYwICAgICAgIDI0OAorMzg0MCAgICAgICAyNzIKKzQzMjAgICAgICAgMjk2Cis0ODAwICAgICAgIDMyMAorNTI4MCAgICAgICAzNDQKKzU3NjAgICAgICAgMzY4Cis2MjQwICAgICAgIDM5MgorNjcyMCAgICAgICA0MTYKKzcyMDAgICAgICAgNDQwCis3NjgwICAgICAgIDQ2NApkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9sb2dzL2FkZHN1Yi5wbmcgYi9saWJ0b21tYXRoL2xvZ3MvYWRkc3ViLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTY3OWFjCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9sb2dzL2FkZHN1Yi5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9sb2dzL2V4cHQubG9nIGIvbGlidG9tbWF0aC9sb2dzL2V4cHQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOTMyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2xvZ3MvZXhwdC5sb2cKQEAgLTAsMCArMSw3IEBACis1MTMgICAxNDM1ODY5Cis3NjkgICAzNTQ0OTcwCisxMDI1ICAgNzc5MTYzOAorMjA0OSAgNDY5MDIyMzgKKzI1NjEgIDg1MzM0ODk5CiszMDczIDE0MTQ1MTQxMgorNDA5NyAzMDg3NzAzMTAKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvbG9ncy9leHB0LnBuZyBiL2xpYnRvbW1hdGgvbG9ncy9leHB0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWU4YmI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9sb2dzL2V4cHQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvbG9ncy9leHB0XzJrLmxvZyBiL2xpYnRvbW1hdGgvbG9ncy9leHB0XzJrLmxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2QzMjVmCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9sb2dzL2V4cHRfMmsubG9nCkBAIC0wLDAgKzEsNSBAQAorNjA3ICAgMjEwOTIyNQorMTI3OSAgMTAxNDgzMTQKKzIyMDMgIDM0MTI2ODc3CiszMjE3ICA4MjcxNjQyNAorNDI1MyAxNjE1Njk2MDYKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvbG9ncy9leHB0XzJrbC5sb2cgYi9saWJ0b21tYXRoL2xvZ3MvZXhwdF8ya2wubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5YWQ0YmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2xvZ3MvZXhwdF8ya2wubG9nCkBAIC0wLDAgKzEsNCBAQAorMTAyNCAgIDc3MDUyNzEKKzIwNDggIDM0Mjg2ODUxCis0MDk2IDE2NTIwNzQ5MQorNTIxICAgMTYxODYzMQpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9sb2dzL2V4cHRfZHIubG9nIGIvbGlidG9tbWF0aC9sb2dzL2V4cHRfZHIubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YmJlMDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2xvZ3MvZXhwdF9kci5sb2cKQEAgLTAsMCArMSw3IEBACis1MzIgICAxOTI4NTUwCis3ODQgICAzNzYzOTA4CisxMDM2ICAgNzU2NDIyMQorMTU0MCAgMTY1NjYwNTkKKzIwNzIgIDMyMjgzNzg0CiszMDgwICA3OTg1MTU2NQorNDExNiAxNTc4NDM1MzAKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvbG9ncy9ncmFwaHMuZGVtIGIvbGlidG9tbWF0aC9sb2dzL2dyYXBocy5kZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZhZjYxMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvbG9ncy9ncmFwaHMuZGVtCkBAIC0wLDAgKzEsMTcgQEAKK3NldCB0ZXJtaW5hbCBwbmcKK3NldCBzaXplIDEuNzUKK3NldCB5bGFiZWwgIkN5Y2xlcyBwZXIgT3BlcmF0aW9uIgorc2V0IHhsYWJlbCAiT3BlcmFuZCBzaXplIChiaXRzKSIKKworc2V0IG91dHB1dCAiYWRkc3ViLnBuZyIKK3Bsb3QgJ2FkZC5sb2cnIHNtb290aCBiZXppZXIgdGl0bGUgIkFkZGl0aW9uIiwgJ3N1Yi5sb2cnIHNtb290aCBiZXppZXIgdGl0bGUgIlN1YnRyYWN0aW9uIgorCitzZXQgb3V0cHV0ICJtdWx0LnBuZyIKK3Bsb3QgJ3Nxci5sb2cnIHNtb290aCBiZXppZXIgdGl0bGUgIlNxdWFyaW5nICh3aXRob3V0IEthcmF0c3ViYSkiLCAnc3FyX2thcmEubG9nJyBzbW9vdGggYmV6aWVyIHRpdGxlICJTcXVhcmluZyAoS2FyYXRzdWJhKSIsICdtdWx0LmxvZycgc21vb3RoIGJlemllciB0aXRsZSAiTXVsdGlwbGljYXRpb24gKHdpdGhvdXQgS2FyYXRzdWJhKSIsICdtdWx0X2thcmEubG9nJyBzbW9vdGggYmV6aWVyIHRpdGxlICJNdWx0aXBsaWNhdGlvbiAoS2FyYXRzdWJhKSIKKworc2V0IG91dHB1dCAiZXhwdC5wbmciCitwbG90ICdleHB0LmxvZycgc21vb3RoIGJlemllciB0aXRsZSAiRXhwdG1vZCAoTW9udGdvbWVyeSkiLCAnZXhwdF9kci5sb2cnIHNtb290aCBiZXppZXIgdGl0bGUgIkV4cHRtb2QgKERpbW1pbmlzaGVkIFJhZGl4KSIsICdleHB0XzJrLmxvZycgc21vb3RoIGJlemllciB0aXRsZSAiRXhwdG1vZCAoMmsgUmVkdWN0aW9uKSIKKworc2V0IG91dHB1dCAiaW52bW9kLnBuZyIKK3Bsb3QgJ2ludm1vZC5sb2cnIHNtb290aCBiZXppZXIgdGl0bGUgIk1vZHVsYXIgSW52ZXJzZSIKKwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9sb2dzL2luZGV4Lmh0bWwgYi9saWJ0b21tYXRoL2xvZ3MvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjY4YzI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9sb2dzL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwyNyBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5MaWJUb21NYXRoIExvZyBQbG90czwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGgxPkFkZGl0aW9uIGFuZCBTdWJ0cmFjdGlvbjwvaDE+Cis8Y2VudGVyPjxpbWcgc3JjPWFkZHN1Yi5wbmc+PC9jZW50ZXI+Cis8aHI+CisKKzxoMT5NdWx0aXBsaWVyczwvaDE+Cis8Y2VudGVyPjxpbWcgc3JjPW11bHQucG5nPjwvY2VudGVyPgorPGhyPgorCis8aDE+RXhwdG1vZDwvaDE+Cis8Y2VudGVyPjxpbWcgc3JjPWV4cHQucG5nPjwvY2VudGVyPgorPGhyPgorCis8aDE+TW9kdWxhciBJbnZlcnNlPC9oMT4KKzxjZW50ZXI+PGltZyBzcmM9aW52bW9kLnBuZz48L2NlbnRlcj4KKzxocj4KKworPC9ib2R5PgorPC9odG1sPgorLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9sb2dzL2luZGV4Lmh0bWwsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozODo0NyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2xvZ3MvaW52bW9kLmxvZyBiL2xpYnRvbW1hdGgvbG9ncy9pbnZtb2QubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2xvZ3MvaW52bW9kLmxvZwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9sb2dzL2ludm1vZC5wbmcgYi9saWJ0b21tYXRoL2xvZ3MvaW52bW9kLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYThhNGFkCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9sb2dzL2ludm1vZC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9sb2dzL211bHQubG9nIGIvbGlidG9tbWF0aC9sb2dzL211bHQubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNTYzZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2xvZ3MvbXVsdC5sb2cKQEAgLTAsMCArMSw4NCBAQAorMjcxICAgICAgIDU1NQorMzkwICAgICAgIDg1NQorNTA4ICAgICAgMTE2MQorNjMxICAgICAgMTYwNQorNzQ5ICAgICAgMjExNworODcxICAgICAgMjY4NworOTkxICAgICAgMzMyOQorMTEwOCAgICAgIDQwODQKKzEyMzEgICAgICA0Nzg2CisxMzUxICAgICAgNTYyNAorMTQ3MCAgICAgIDYzOTIKKzE1ODYgICAgICA3MzY0CisxNzEwICAgICAgODIxOAorMTgzMCAgICAgIDkyNTUKKzE5NTEgICAgIDEwMjE3CisyMDY3ICAgICAxMTQ2MQorMjE5MSAgICAgMTI0NjMKKzIzMDggICAgIDEzNjc3CisyNDMwICAgICAxNDgwMAorMjU1MSAgICAgMTYyMzIKKzI2NzEgICAgIDE3NDYwCisyNzkxICAgICAxODg5OQorMjkwMiAgICAgMjAyNDcKKzMwMjggICAgIDIxOTAyCiszMTUxICAgICAyMzI0MAorMzI2NyAgICAgMjQ5MjcKKzMzOTEgICAgIDI2NDQxCiszNTExICAgICAyODI3NworMzYzMSAgICAgMjk4MzgKKzM3NDkgICAgIDMxNzUxCiszODY5ICAgICAzMzY3MworMzk4OSAgICAgMzU0MzEKKzQxMTEgICAgIDM3NTE4Cis0MjMxICAgICAzOTQyNgorNDM0OSAgICAgNDE1MDQKKzQ0NzEgICAgIDQzNTY3Cis0NTkxICAgICA0NTc4NgorNDcxMSAgICAgNDc4NzYKKzQ4MzEgICAgIDUwMjk5Cis0OTUxICAgICA1MjQyNworNTA3MSAgICAgNTQ3ODUKKzUxODkgICAgIDU3MjQxCis1MzA3ICAgICA1OTczMAorNTQzMSAgICAgNjIxOTQKKzU1NTEgICAgIDY0NzYxCis1NjcwICAgICA2NzMyMgorNTc4OSAgICAgNzAwNzMKKzU5MDcgICAgIDcyNjYzCis2MDMwICAgICA3NTQzNworNjE1MSAgICAgNzgyNDIKKzYyNjggICAgIDgxMjAyCis2Mzg5ICAgICA4Mzk0OAorNjUwOSAgICAgODY5ODUKKzY2MzEgICAgIDg5OTAzCis2NzQ3ICAgICA5MzE4NAorNjg2OSAgICAgOTYwNDQKKzY5OTEgICAgIDk5Mjg2Cis3MTA5ICAgIDEwMjM5NQorNzIyOSAgICAxMDU5MTcKKzczNTEgICAgMTA4OTQwCis3NDcwICAgIDExMjQ5MAorNzU4OSAgICAxMTU3MDIKKzc3MTEgICAgMTE5NTA4Cis3ODMxICAgIDEyMjYzMgorNzk1MSAgICAxMjY0MTAKKzgwNzEgICAgMTI5ODA4Cis4MTkwICAgIDEzMzg5NQorODMxMSAgICAxMzcxNDYKKzg0MzEgICAgMTQxMjE4Cis4NTQ5ICAgIDE0NDczMgorODY2NyAgICAxNDkxMzEKKzg3OTAgICAgMTUyNDYyCis4OTExICAgIDE1Njc1NAorOTAzMCAgICAxNjA0NzkKKzkxNDkgICAgMTY1MTM4Cis5MjcxICAgIDE2ODYwMQorOTM5MSAgICAxNzMxODUKKzk1MTEgICAgMTc2OTg4Cis5NjI3ICAgIDE4MTk3NgorOTc1MSAgICAxODU1MzkKKzk4NzAgICAgMTkwMzg4Cis5OTkxICAgIDE5NDMzNQorMTAxMTAgICAgMTk5NjA1CisxMDIyOCAgICAyMDMyOTgKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvbG9ncy9tdWx0LnBuZyBiL2xpYnRvbW1hdGgvbG9ncy9tdWx0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjdhNGVlCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9sb2dzL211bHQucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvbG9ncy9tdWx0X2thcmEubG9nIGIvbGlidG9tbWF0aC9sb2dzL211bHRfa2FyYS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzEzNmM3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvbG9ncy9tdWx0X2thcmEubG9nCkBAIC0wLDAgKzEsODQgQEAKKzI3MSAgICAgICA1NjAKKzM5MSAgICAgICA4NzAKKzUxMSAgICAgIDExNTkKKzYzMSAgICAgIDE2MDUKKzc1MCAgICAgIDIxMTEKKzg3MSAgICAgIDI3MzcKKzk5MSAgICAgIDMzNjEKKzExMTEgICAgICA0MDU0CisxMjMxICAgICAgNDc3OAorMTM1MSAgICAgIDU2MDAKKzE0NzEgICAgICA2NDA0CisxNTkxICAgICAgNzMyMworMTcxMCAgICAgIDgyNTUKKzE4MzEgICAgICA5MjM5CisxOTQ4ICAgICAxMDI1NworMjA3MCAgICAgMTEzOTcKKzIxOTAgICAgIDEyNTMxCisyMzA4ICAgICAxMzY2NQorMjQyOSAgICAgMTQ4NzAKKzI1NTAgICAgIDE2MTc1CisyNjcxICAgICAxNzUzOQorMjc4NyAgICAgMTg4NzkKKzI5MTEgICAgIDIwMzUwCiszMDMxICAgICAyMTgwNworMzE1MCAgICAgMjM0MTUKKzMyNzAgICAgIDI0ODk3CiszMzg4ICAgICAyNjU2NworMzUxMSAgICAgMjgyMDUKKzM2MjcgICAgIDMwMDc2CiszNzUxICAgICAzMTc0NAorMzg2OSAgICAgMzM2NTcKKzM5OTEgICAgIDM1NDI1Cis0MTExICAgICAzNzUyMgorNDIyOSAgICAgMzkzNjMKKzQzNTEgICAgIDQxNTAzCis0NDcwICAgICA0MzQ5MQorNDU5MCAgICAgNDU4MjcKKzQ3MTEgICAgIDQ3Nzk1Cis0ODI4ICAgICA1MDE2NgorNDk1MSAgICAgNTIzMTgKKzUwNzAgICAgIDU0OTExCis1MTkxICAgICA1NzAzNgorNTMwOCAgICAgNTgyMzcKKzU0MzEgICAgIDYwMjQ4Cis1NTUxICAgICA2MjY3OAorNTY3MSAgICAgNjQ3ODYKKzU3OTEgICAgIDY3Mjk0Cis1OTA4ICAgICA2OTM0MworNjAzMSAgICAgNzE2MDcKKzYxNTEgICAgIDc0MTY2Cis2MjcxICAgICA3NjU5MAorNjM5MSAgICAgNzg3MzQKKzY1MTEgICAgIDgxMTc1Cis2NjMxICAgICA4Mzc0MgorNjc1MCAgICAgODY0MDMKKzY4NjggICAgIDg4ODczCis2OTkwICAgICA5MTE1MAorNzExMCAgICAgOTQyMTEKKzcyMjggICAgIDk2OTIyCis3MzUxICAgICA5OTQ0NQorNzQ2OSAgICAxMDIyMTYKKzc1ODkgICAgMTA0OTY4Cis3NzExICAgIDEwODExMworNzgyNyAgICAxMTA3NTgKKzc5NTAgICAgMTEzNzE0Cis4MDcxICAgIDExNjUxMQorODE4NiAgICAxMTk2NDMKKzgzMTAgICAgMTIyNjc5Cis4NDI1ICAgIDEyNTU4MQorODU1MSAgICAxMjg3MTUKKzg2NjkgICAgMTMxNzc4Cis4Nzg4ICAgIDEzNTExNgorODkxMCAgICAxMzgxMzgKKzkwMzEgICAgMTQxNjI4Cis5MTQ4ICAgIDE0NDc1NAorOTI2OCAgICAxNDgzNjcKKzkzOTEgICAgMTUxNTUxCis5NTExICAgIDE1NTAzMworOTYzMSAgICAxNTg2NTIKKzk3NTEgICAgMTYyMTI1Cis5ODcxICAgIDE2NTI0OAorOTk4OCAgICAxNjg2MjcKKzEwMTExICAgIDE3MjQyNworMTAyMzEgICAgMTc2NDEyCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL2xvZ3Mvc3FyLmxvZyBiL2xpYnRvbW1hdGgvbG9ncy9zcXIubG9nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkMjlmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL2xvZ3Mvc3FyLmxvZwpAQCAtMCwwICsxLDg0IEBACisyNjUgICAgICAgNTYyCiszODkgICAgICAgODgyCis1MDkgICAgICAxMjA3Cis2MzEgICAgICAxNTcyCis3NTAgICAgICAxOTkwCis4NTkgICAgICAyNDMzCis5OTEgICAgICAyODk0CisxMTA5ICAgICAgMzU1NQorMTIzMCAgICAgIDQyMjgKKzEzNTAgICAgICA1MDE4CisxNDcxICAgICAgNTgwNQorMTU5MSAgICAgIDY1NzkKKzE3MDkgICAgICA3NDE1CisxODI5ICAgICAgODMyOQorMTk0OSAgICAgIDkyMjUKKzIwNzEgICAgIDEwMTM5CisyMTg4ICAgICAxMTIzOQorMjMwOSAgICAgMTIxNzgKKzI0MzEgICAgIDEzMjEyCisyNTUxICAgICAxNDI5NAorMjY3MSAgICAgMTU1NTEKKzI3OTEgICAgIDE2NTEyCisyOTExICAgICAxNzcxOAorMzAzMCAgICAgMTg4NzYKKzMxNTAgICAgIDIwMjU5CiszMjcwICAgICAyMTM3NAorMzM5MSAgICAgMjI2NTAKKzM1MTEgICAgIDIzOTQ4CiszNjMxICAgICAyNTQ5MworMzc1MCAgICAgMjY3NTYKKzM4NzAgICAgIDI4MjI1CiszOTg5ICAgICAyOTcwNQorNDExMCAgICAgMzE0MDkKKzQyMzAgICAgIDMyODM0Cis0MzUxICAgICAzNDMyNworNDQ3MSAgICAgMzU4MTgKKzQ1OTEgICAgIDM3NjM2Cis0NzExICAgICAzOTIyOAorNDgzMCAgICAgNDA4NjgKKzQ5NDkgICAgIDQyMzkzCis1MDcwICAgICA0NDU0MQorNTE5MSAgICAgNDYyNjkKKzUzMTAgICAgIDQ4MTYyCis1NDI5ICAgICA0OTcyOAorNTU0OCAgICAgNTE5ODUKKzU2NzEgICAgIDUzOTQ4Cis1NzkxICAgICA1NTg4NQorNTkxMCAgICAgNTc1ODQKKzYwMzEgICAgIDYwMDgyCis2MTUwICAgICA2MjIzOQorNjI3MCAgICAgNjQzMDkKKzYzOTAgICAgIDY2MDE0Cis2NTExICAgICA2ODc2NgorNjYzMSAgICAgNzEwMTIKKzY3NTAgICAgIDczMTcyCis2ODcxICAgICA3NDk1MgorNjk5MSAgICAgNzc5MDkKKzcxMTEgICAgIDgwMzcxCis3MjMxICAgICA4MjY2NgorNzM1MSAgICAgODQ1MzEKKzc0NjkgICAgIDg3Njk4Cis3NTg5ICAgICA5MDMxOAorNzcxMSAgICAyMjUzODQKKzc4MzAgICAgMjMyNDI4Cis3OTUwICAgIDI0MDAwOQorODA3MCAgICAyNDY1MjIKKzgxOTAgICAgMjUzNjYyCis4MzEwICAgIDI2MDk2MQorODQzMSAgICAyNjkyNTMKKzg1NDkgICAgMjc1NzQzCis4NjcxICAgIDI4Mzc2OQorODc4OSAgICAyOTA4MTEKKzg5MTEgICAgMzAwMDM0Cis5MDMwICAgIDMwNjg3MworOTE0OSAgICAzMTUwODUKKzkyNzAgICAgMzIzOTQ0Cis5MzkwICAgIDMzMjM5MAorOTUwOCAgICAzMzc1MTkKKzk2MzEgICAgMzQ4OTg2Cis5NzQ5ICAgIDM1NjkwNAorOTg3MSAgICAzNjcwMTMKKzk5ODkgICAgMzczODMxCisxMDEwOCAgICAzODEwMzMKKzEwMjMwICAgIDM5MzQ3NQpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9sb2dzL3Nxcl9rYXJhLmxvZyBiL2xpYnRvbW1hdGgvbG9ncy9zcXJfa2FyYS5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDYzNTVhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvbG9ncy9zcXJfa2FyYS5sb2cKQEAgLTAsMCArMSw4NCBAQAorMjcxICAgICAgIDU2MAorMzg4ICAgICAgIDg3OAorNTExICAgICAgMTE3OQorNjI5ICAgICAgMTYyNQorNzUxICAgICAgMTk4OAorODcxICAgICAgMjQyMworOTg5ICAgICAgMjg5NgorMTExMSAgICAgIDM1NjEKKzEyMzEgICAgICA0MjA5CisxMzUwICAgICAgNTAxNQorMTQ3MCAgICAgIDU4MDQKKzE1OTEgICAgICA2NTU2CisxNzA5ICAgICAgNzQyMAorMTgzMSAgICAgIDgyNjMKKzE5NTEgICAgICA5MTczCisyMDcwICAgICAxMDE1MworMjE5MSAgICAgMTEyMjkKKzIzMTAgICAgIDEyMTY3CisyNDMxICAgICAxMzIxMQorMjU1MCAgICAgMTQzMDkKKzI2NzEgICAgIDE1NTI0CisyNzg4ICAgICAxNjUyNQorMjkxMCAgICAgMTc3MTIKKzMwMjggICAgIDE4ODIyCiszMTQ4ICAgICAyMDIyMAorMzI3MSAgICAgMjEzNDMKKzMzOTEgICAgIDIyNjUyCiszNTExICAgICAyMzk0NAorMzYzMCAgICAgMjU0ODUKKzM3NTAgICAgIDI2Nzc4CiszODY4ICAgICAyODIwMQorMzk5MCAgICAgMjk2NTMKKzQxMTEgICAgIDMxMzkzCis0MjI1ICAgICAzMjg0MQorNDM1MCAgICAgMzQzMjgKKzQ0NzEgICAgIDM1Nzg2Cis0NTkwICAgICAzNzY1MgorNDcxMSAgICAgMzkyNDUKKzQ4MzAgICAgIDQwODc2Cis0OTUxICAgICA0MjQzMworNTA2OCAgICAgNDQ1NDcKKzUxOTEgICAgIDQ2MzIxCis1MzExICAgICA0ODE0MAorNTQzMCAgICAgNDk3MjcKKzU1NTAgICAgIDUyMDM0Cis1NjcxICAgICA1Mzk1NAorNTc5MSAgICAgNTU5MjEKKzU5MDggICAgIDU3NTk3Cis2MDMxICAgICA2MDA4NAorNjE0OCAgICAgNjIyMjYKKzYyNzAgICAgIDY0Mjk1Cis2MzkwICAgICA2NjA0NQorNjUxMSAgICAgNjg3NzkKKzY2MjkgICAgIDcxMDAzCis2NzUxICAgICA3MzE2OQorNjg3MSAgICAgNzQ5OTIKKzY5OTEgICAgIDc3ODk1Cis3MTEwICAgICA4MDM3NgorNzIzMSAgICAgODI2MjgKKzczNTEgICAgIDg0NDY4Cis3NDcwICAgICA4NzY2NAorNzU5MSAgICAgOTAyODQKKzc3MTEgICAgIDkxMzUyCis3ODI4ICAgICA5Mzk5NQorNzk1MCAgICAgOTYyNzYKKzgwNzEgICAgIDk4NjkxCis4MTkwICAgIDEwMTI1NgorODMwOCAgICAxMDM2MzEKKzg0MzEgICAgMTA1MjIyCis4NTUwICAgIDEwODM0MworODY3MSAgICAxMTAyODEKKzg3ODcgICAgMTEyNzY0Cis4OTExICAgIDExNTM5NworOTAzMSAgICAxMTc2OTAKKzkxNTEgICAgMTIwMjY2Cis5MjcxICAgIDEyMjcxNQorOTM5MSAgICAxMjQ2MjQKKzk1MTAgICAgMTI3OTM3Cis5NjMwICAgIDEzMDMxMworOTc1MCAgICAxMzI5MTQKKzk4NzEgICAgMTM2MTI5Cis5OTkxICAgIDEzODUxNworMTAxMDggICAgMTQxNTI1CisxMDIzMSAgICAxNDQyMjUKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvbG9ncy9zdWIubG9nIGIvbGlidG9tbWF0aC9sb2dzL3N1Yi5sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY4NGZhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvbG9ncy9zdWIubG9nCkBAIC0wLDAgKzEsMTYgQEAKKzQ4MCAgICAgICAgOTQKKzk2MCAgICAgICAxMTYKKzE0NDAgICAgICAgMTQwCisxOTIwICAgICAgIDE2NAorMjQwMCAgICAgICAyMDUKKzI4ODAgICAgICAgMjI5CiszMzYwICAgICAgIDI1MworMzg0MCAgICAgICAyNzcKKzQzMjAgICAgICAgMjk5Cis0ODAwICAgICAgIDMyMQorNTI4MCAgICAgICAzNDUKKzU3NjAgICAgICAgMzcxCis2MjQwICAgICAgIDM5NQorNjcyMCAgICAgICA0MTkKKzcyMDAgICAgICAgNDQxCis3NjgwICAgICAgIDQ2NQpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9tYWtlZmlsZS5iY2MgYi9saWJ0b21tYXRoL21ha2VmaWxlLmJjYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzc0M2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9tYWtlZmlsZS5iY2MKQEAgLTAsMCArMSw0NCBAQAorIworIyBCb3JsYW5kIEMrK0J1aWxkZXIgTWFrZWZpbGUgKG1ha2VmaWxlLmJjYykKKyMKKworCitMSUIgPSB0bGliCitDQyA9IGJjYzMyCitDRkxBR1MgPSAtYyAtTzIgLUkuCisKK09CSkVDVFM9Ym5jb3JlLm9iaiBibl9tcF9pbml0Lm9iaiBibl9tcF9jbGVhci5vYmogYm5fbXBfZXhjaC5vYmogYm5fbXBfZ3Jvdy5vYmogYm5fbXBfc2hyaW5rLm9iaiBcCitibl9tcF9jbGFtcC5vYmogYm5fbXBfemVyby5vYmogIGJuX21wX3NldC5vYmogYm5fbXBfc2V0X2ludC5vYmogYm5fbXBfaW5pdF9zaXplLm9iaiBibl9tcF9jb3B5Lm9iaiBcCitibl9tcF9pbml0X2NvcHkub2JqIGJuX21wX2Ficy5vYmogYm5fbXBfbmVnLm9iaiBibl9tcF9jbXBfbWFnLm9iaiBibl9tcF9jbXAub2JqIGJuX21wX2NtcF9kLm9iaiBcCitibl9tcF9yc2hkLm9iaiBibl9tcF9sc2hkLm9iaiBibl9tcF9tb2RfMmQub2JqIGJuX21wX2Rpdl8yZC5vYmogYm5fbXBfbXVsXzJkLm9iaiBibl9tcF9kaXZfMi5vYmogXAorYm5fbXBfbXVsXzIub2JqIGJuX3NfbXBfYWRkLm9iaiBibl9zX21wX3N1Yi5vYmogYm5fZmFzdF9zX21wX211bF9kaWdzLm9iaiBibl9zX21wX211bF9kaWdzLm9iaiBcCitibl9mYXN0X3NfbXBfbXVsX2hpZ2hfZGlncy5vYmogYm5fc19tcF9tdWxfaGlnaF9kaWdzLm9iaiBibl9mYXN0X3NfbXBfc3FyLm9iaiBibl9zX21wX3Nxci5vYmogXAorYm5fbXBfYWRkLm9iaiBibl9tcF9zdWIub2JqIGJuX21wX2thcmF0c3ViYV9tdWwub2JqIGJuX21wX211bC5vYmogYm5fbXBfa2FyYXRzdWJhX3Nxci5vYmogXAorYm5fbXBfc3FyLm9iaiBibl9tcF9kaXYub2JqIGJuX21wX21vZC5vYmogYm5fbXBfYWRkX2Qub2JqIGJuX21wX3N1Yl9kLm9iaiBibl9tcF9tdWxfZC5vYmogXAorYm5fbXBfZGl2X2Qub2JqIGJuX21wX21vZF9kLm9iaiBibl9tcF9leHB0X2Qub2JqIGJuX21wX2FkZG1vZC5vYmogYm5fbXBfc3VibW9kLm9iaiBcCitibl9tcF9tdWxtb2Qub2JqIGJuX21wX3Nxcm1vZC5vYmogYm5fbXBfZ2NkLm9iaiBibl9tcF9sY20ub2JqIGJuX2Zhc3RfbXBfaW52bW9kLm9iaiBibl9tcF9pbnZtb2Qub2JqIFwKK2JuX21wX3JlZHVjZS5vYmogYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5vYmogYm5fZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZS5vYmogYm5fbXBfbW9udGdvbWVyeV9yZWR1Y2Uub2JqIFwKK2JuX21wX2V4cHRtb2RfZmFzdC5vYmogYm5fbXBfZXhwdG1vZC5vYmogYm5fbXBfMmV4cHQub2JqIGJuX21wX25fcm9vdC5vYmogYm5fbXBfamFjb2JpLm9iaiBibl9yZXZlcnNlLm9iaiBcCitibl9tcF9jb3VudF9iaXRzLm9iaiBibl9tcF9yZWFkX3Vuc2lnbmVkX2Jpbi5vYmogYm5fbXBfcmVhZF9zaWduZWRfYmluLm9iaiBibl9tcF90b191bnNpZ25lZF9iaW4ub2JqIFwKK2JuX21wX3RvX3NpZ25lZF9iaW4ub2JqIGJuX21wX3Vuc2lnbmVkX2Jpbl9zaXplLm9iaiBibl9tcF9zaWduZWRfYmluX3NpemUub2JqICBcCitibl9tcF94b3Iub2JqIGJuX21wX2FuZC5vYmogYm5fbXBfb3Iub2JqIGJuX21wX3JhbmQub2JqIGJuX21wX21vbnRnb21lcnlfY2FsY19ub3JtYWxpemF0aW9uLm9iaiBcCitibl9tcF9wcmltZV9pc19kaXZpc2libGUub2JqIGJuX3ByaW1lX3RhYi5vYmogYm5fbXBfcHJpbWVfZmVybWF0Lm9iaiBibl9tcF9wcmltZV9taWxsZXJfcmFiaW4ub2JqIFwKK2JuX21wX3ByaW1lX2lzX3ByaW1lLm9iaiBibl9tcF9wcmltZV9uZXh0X3ByaW1lLm9iaiBibl9tcF9kcl9yZWR1Y2Uub2JqIFwKK2JuX21wX2RyX2lzX21vZHVsdXMub2JqIGJuX21wX2RyX3NldHVwLm9iaiBibl9tcF9yZWR1Y2Vfc2V0dXAub2JqIFwKK2JuX21wX3Rvb21fbXVsLm9iaiBibl9tcF90b29tX3Nxci5vYmogYm5fbXBfZGl2XzMub2JqIGJuX3NfbXBfZXhwdG1vZC5vYmogXAorYm5fbXBfcmVkdWNlXzJrLm9iaiBibl9tcF9yZWR1Y2VfaXNfMmsub2JqIGJuX21wX3JlZHVjZV8ya19zZXR1cC5vYmogXAorYm5fbXBfcmVkdWNlXzJrX2wub2JqIGJuX21wX3JlZHVjZV9pc18ya19sLm9iaiBibl9tcF9yZWR1Y2VfMmtfc2V0dXBfbC5vYmogXAorYm5fbXBfcmFkaXhfc21hcC5vYmogYm5fbXBfcmVhZF9yYWRpeC5vYmogYm5fbXBfdG9yYWRpeC5vYmogYm5fbXBfcmFkaXhfc2l6ZS5vYmogXAorYm5fbXBfZnJlYWQub2JqIGJuX21wX2Z3cml0ZS5vYmogYm5fbXBfY250X2xzYi5vYmogYm5fZXJyb3Iub2JqIFwKK2JuX21wX2luaXRfbXVsdGkub2JqIGJuX21wX2NsZWFyX211bHRpLm9iaiBibl9tcF9leHRldWNsaWQub2JqIGJuX21wX3RvcmFkaXhfbi5vYmogXAorYm5fbXBfcHJpbWVfcmFuZG9tX2V4Lm9iaiBibl9tcF9nZXRfaW50Lm9iaiBibl9tcF9zcXJ0Lm9iaiBibl9tcF9pc19zcXVhcmUub2JqIFwKK2JuX21wX2luaXRfc2V0Lm9iaiBibl9tcF9pbml0X3NldF9pbnQub2JqIGJuX21wX2ludm1vZF9zbG93Lm9iaiBibl9tcF9wcmltZV9yYWJpbl9taWxsZXJfdHJpYWxzLm9iaiBcCitibl9tcF90b19zaWduZWRfYmluX24ub2JqIGJuX21wX3RvX3Vuc2lnbmVkX2Jpbl9uLm9iagorCitUQVJHRVQgPSBsaWJ0b21tYXRoLmxpYgorCiskKFRBUkdFVCk6ICQoT0JKRUNUUykKKworLmMub2JqOgorCSQoQ0MpICQoQ0ZMQUdTKSAkPAorCSQoTElCKSAkKFRBUkdFVCkgLSskQApkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9tYWtlZmlsZS5jeWd3aW5fZGxsIGIvbGlidG9tbWF0aC9tYWtlZmlsZS5jeWd3aW5fZGxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YTliMjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL21ha2VmaWxlLmN5Z3dpbl9kbGwKQEAgLTAsMCArMSw1NSBAQAorI01ha2VmaWxlIGZvciBDeWd3aW4tR0NDCisjCisjVGhpcyBtYWtlZmlsZSB3aWxsIGJ1aWxkIGEgV2luZG93cyBETEwgW2RvZXNuJ3QgcmVxdWlyZSBjeWd3aW4gdG8gcnVuXSBpbiB0aGUgZmlsZQorI2xpYnRvbW1hdGguZGxsLiAgVGhlIGltcG9ydCBsaWJyYXJ5IGlzIGluIGxpYnRvbW1hdGguZGxsLmEuICBSZW1lbWJlciB0byBhZGQKKyMiLVdsLC0tZW5hYmxlLWF1dG8taW1wb3J0IiB0byB5b3VyIGNsaWVudCBidWlsZCB0byBhdm9pZCB0aGUgYXV0by1pbXBvcnQgd2FybmluZ3MKKyMKKyNUb20gU3QgRGVuaXMKK0NGTEFHUyAgKz0gIC1JLi8gLVdhbGwgLVcgLVdzaGFkb3cgLU8zIC1mdW5yb2xsLWxvb3BzIC1tbm8tY3lnd2luCisKKyN4ODYgb3B0aW1pemF0aW9ucyBbc2hvdWxkIGJlIHZhbGlkIGZvciBhbnkgR0NDIGluc3RhbGwgdGhvdWdoXQorQ0ZMQUdTICArPSAtZm9taXQtZnJhbWUtcG9pbnRlciAKKworZGVmYXVsdDogd2luZGxsCisKK09CSkVDVFM9Ym5jb3JlLm8gYm5fbXBfaW5pdC5vIGJuX21wX2NsZWFyLm8gYm5fbXBfZXhjaC5vIGJuX21wX2dyb3cubyBibl9tcF9zaHJpbmsubyBcCitibl9tcF9jbGFtcC5vIGJuX21wX3plcm8ubyAgYm5fbXBfc2V0Lm8gYm5fbXBfc2V0X2ludC5vIGJuX21wX2luaXRfc2l6ZS5vIGJuX21wX2NvcHkubyBcCitibl9tcF9pbml0X2NvcHkubyBibl9tcF9hYnMubyBibl9tcF9uZWcubyBibl9tcF9jbXBfbWFnLm8gYm5fbXBfY21wLm8gYm5fbXBfY21wX2QubyBcCitibl9tcF9yc2hkLm8gYm5fbXBfbHNoZC5vIGJuX21wX21vZF8yZC5vIGJuX21wX2Rpdl8yZC5vIGJuX21wX211bF8yZC5vIGJuX21wX2Rpdl8yLm8gXAorYm5fbXBfbXVsXzIubyBibl9zX21wX2FkZC5vIGJuX3NfbXBfc3ViLm8gYm5fZmFzdF9zX21wX211bF9kaWdzLm8gYm5fc19tcF9tdWxfZGlncy5vIFwKK2JuX2Zhc3Rfc19tcF9tdWxfaGlnaF9kaWdzLm8gYm5fc19tcF9tdWxfaGlnaF9kaWdzLm8gYm5fZmFzdF9zX21wX3Nxci5vIGJuX3NfbXBfc3FyLm8gXAorYm5fbXBfYWRkLm8gYm5fbXBfc3ViLm8gYm5fbXBfa2FyYXRzdWJhX211bC5vIGJuX21wX211bC5vIGJuX21wX2thcmF0c3ViYV9zcXIubyBcCitibl9tcF9zcXIubyBibl9tcF9kaXYubyBibl9tcF9tb2QubyBibl9tcF9hZGRfZC5vIGJuX21wX3N1Yl9kLm8gYm5fbXBfbXVsX2QubyBcCitibl9tcF9kaXZfZC5vIGJuX21wX21vZF9kLm8gYm5fbXBfZXhwdF9kLm8gYm5fbXBfYWRkbW9kLm8gYm5fbXBfc3VibW9kLm8gXAorYm5fbXBfbXVsbW9kLm8gYm5fbXBfc3FybW9kLm8gYm5fbXBfZ2NkLm8gYm5fbXBfbGNtLm8gYm5fZmFzdF9tcF9pbnZtb2QubyBibl9tcF9pbnZtb2QubyBcCitibl9tcF9yZWR1Y2UubyBibl9tcF9tb250Z29tZXJ5X3NldHVwLm8gYm5fZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZS5vIGJuX21wX21vbnRnb21lcnlfcmVkdWNlLm8gXAorYm5fbXBfZXhwdG1vZF9mYXN0Lm8gYm5fbXBfZXhwdG1vZC5vIGJuX21wXzJleHB0Lm8gYm5fbXBfbl9yb290Lm8gYm5fbXBfamFjb2JpLm8gYm5fcmV2ZXJzZS5vIFwKK2JuX21wX2NvdW50X2JpdHMubyBibl9tcF9yZWFkX3Vuc2lnbmVkX2Jpbi5vIGJuX21wX3JlYWRfc2lnbmVkX2Jpbi5vIGJuX21wX3RvX3Vuc2lnbmVkX2Jpbi5vIFwKK2JuX21wX3RvX3NpZ25lZF9iaW4ubyBibl9tcF91bnNpZ25lZF9iaW5fc2l6ZS5vIGJuX21wX3NpZ25lZF9iaW5fc2l6ZS5vICBcCitibl9tcF94b3IubyBibl9tcF9hbmQubyBibl9tcF9vci5vIGJuX21wX3JhbmQubyBibl9tcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbi5vIFwKK2JuX21wX3ByaW1lX2lzX2RpdmlzaWJsZS5vIGJuX3ByaW1lX3RhYi5vIGJuX21wX3ByaW1lX2Zlcm1hdC5vIGJuX21wX3ByaW1lX21pbGxlcl9yYWJpbi5vIFwKK2JuX21wX3ByaW1lX2lzX3ByaW1lLm8gYm5fbXBfcHJpbWVfbmV4dF9wcmltZS5vIGJuX21wX2RyX3JlZHVjZS5vIFwKK2JuX21wX2RyX2lzX21vZHVsdXMubyBibl9tcF9kcl9zZXR1cC5vIGJuX21wX3JlZHVjZV9zZXR1cC5vIFwKK2JuX21wX3Rvb21fbXVsLm8gYm5fbXBfdG9vbV9zcXIubyBibl9tcF9kaXZfMy5vIGJuX3NfbXBfZXhwdG1vZC5vIFwKK2JuX21wX3JlZHVjZV8yay5vIGJuX21wX3JlZHVjZV9pc18yay5vIGJuX21wX3JlZHVjZV8ya19zZXR1cC5vIFwKK2JuX21wX3JlZHVjZV8ya19sLm8gYm5fbXBfcmVkdWNlX2lzXzJrX2wubyBibl9tcF9yZWR1Y2VfMmtfc2V0dXBfbC5vIFwKK2JuX21wX3JhZGl4X3NtYXAubyBibl9tcF9yZWFkX3JhZGl4Lm8gYm5fbXBfdG9yYWRpeC5vIGJuX21wX3JhZGl4X3NpemUubyBcCitibl9tcF9mcmVhZC5vIGJuX21wX2Z3cml0ZS5vIGJuX21wX2NudF9sc2IubyBibl9lcnJvci5vIFwKK2JuX21wX2luaXRfbXVsdGkubyBibl9tcF9jbGVhcl9tdWx0aS5vIGJuX21wX2V4dGV1Y2xpZC5vIGJuX21wX3RvcmFkaXhfbi5vIFwKK2JuX21wX3ByaW1lX3JhbmRvbV9leC5vIGJuX21wX2dldF9pbnQubyBibl9tcF9zcXJ0Lm8gYm5fbXBfaXNfc3F1YXJlLm8gYm5fbXBfaW5pdF9zZXQubyBcCitibl9tcF9pbml0X3NldF9pbnQubyBibl9tcF9pbnZtb2Rfc2xvdy5vIGJuX21wX3ByaW1lX3JhYmluX21pbGxlcl90cmlhbHMubyBcCitibl9tcF90b19zaWduZWRfYmluX24ubyBibl9tcF90b191bnNpZ25lZF9iaW5fbi5vCisKKyMgbWFrZSBhIFdpbmRvd3MgRExMIHZpYSBDeWd3aW4KK3dpbmRsbDogICQoT0JKRUNUUykKKwlnY2MgLW1uby1jeWd3aW4gLW1kbGwgLW8gbGlidG9tbWF0aC5kbGwgLVdsLC0tb3V0LWltcGxpYj1saWJ0b21tYXRoLmRsbC5hIC1XbCwtLWV4cG9ydC1hbGwtc3ltYm9scyAqLm8KKwlyYW5saWIgbGlidG9tbWF0aC5kbGwuYQorCisjIGJ1aWxkIHRoZSB0ZXN0IHByb2dyYW0gdXNpbmcgdGhlIHdpbmRvd3MgRExMCit0ZXN0OiAkKE9CSkVDVFMpIHdpbmRsbAorCWdjYyAkKENGTEFHUykgZGVtby9kZW1vLmMgbGlidG9tbWF0aC5kbGwuYSAtV2wsLS1lbmFibGUtYXV0by1pbXBvcnQgLW8gdGVzdCAtcworCWNkIG10ZXN0IDsgJChDQykgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mdW5yb2xsLWxvb3BzIG10ZXN0LmMgLW8gbXRlc3QgLXMKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9tYWtlZmlsZS5jeWd3aW5fZGxsLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIgJCAqLworLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6Mzg6NDUgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9tYWtlZmlsZS5pY2MgYi9saWJ0b21tYXRoL21ha2VmaWxlLmljYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjcwYWIwCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9tYWtlZmlsZS5pY2MKQEAgLTAsMCArMSwxMTYgQEAKKyNNYWtlZmlsZSBmb3IgSUNDCisjCisjVG9tIFN0IERlbmlzCitDQz1pY2MKKworQ0ZMQUdTICArPSAgLUkuLworCisjIG9wdGltaXplIGZvciBTUEVFRAorIworIyAtbWNwdT0gY2FuIGJlIHBlbnRpdW0sIHBlbnRpdW1wcm8gKGNvdmVycyBQSUkgdGhyb3VnaCBQSUlJKSBvciBwZW50aXVtNAorIyAtYXg/ICAgc3BlY2lmaWVzIG1ha2UgY29kZSBzcGVjaWZpY2FsbHkgZm9yID8gYnV0IGNvbXBhdGlibGUgd2l0aCBJQS0zMgorIyAteD8gICAgc3BlY2lmaWVzIGNvbXBpbGUgc29sZWx5IGZvciA/IFtub3Qgc3BlY2lmaWNhbGx5IElBLTMyIGNvbXBhdGlibGVdCisjCisjIHdoZXJlID8gaXMgCisjICAgSyAtIFBJSUkKKyMgICBXIC0gZmlyc3QgUDQgW1dpbGxpYW1ldHRlXQorIyAgIE4gLSBQNCBOb3J0aHdvb2QKKyMgICBQIC0gUDQgUHJlc2NvdHQKKyMgICBCIC0gQmxlbmQgb2YgUDQgYW5kIFBNIFttb2JpbGVdCisjCisjIERlZmF1bHQgdG8ganVzdCBnZW5lcmljIG1heCBvcHRzCitDRkxBR1MgKz0gLU8zIC14UCAtaXAKKworI2luc3RhbGwgYXMgdGhpcyB1c2VyCitVU0VSPXJvb3QKK0dST1VQPXJvb3QKKworZGVmYXVsdDogbGlidG9tbWF0aC5hCisKKyNkZWZhdWx0IGZpbGVzIHRvIGluc3RhbGwKK0xJQk5BTUU9bGlidG9tbWF0aC5hCitIRUFERVJTPXRvbW1hdGguaAorCisjTElCUEFUSC1UaGUgZGlyZWN0b3J5IGZvciBsaWJ0b21jcnlwdCB0byBiZSBpbnN0YWxsZWQgdG8uCisjSU5DUEFUSC1UaGUgZGlyZWN0b3J5IHRvIGluc3RhbGwgdGhlIGhlYWRlciBmaWxlcyBmb3IgbGlidG9tbWF0aC4KKyNEQVRBUEFUSC1UaGUgZGlyZWN0b3J5IHRvIGluc3RhbGwgdGhlIHBkZiBkb2NzLgorREVTVERJUj0KK0xJQlBBVEg9L3Vzci9saWIKK0lOQ1BBVEg9L3Vzci9pbmNsdWRlCitEQVRBUEFUSD0vdXNyL3NoYXJlL2RvYy9saWJ0b21tYXRoL3BkZgorCitPQkpFQ1RTPWJuY29yZS5vIGJuX21wX2luaXQubyBibl9tcF9jbGVhci5vIGJuX21wX2V4Y2gubyBibl9tcF9ncm93Lm8gYm5fbXBfc2hyaW5rLm8gXAorYm5fbXBfY2xhbXAubyBibl9tcF96ZXJvLm8gIGJuX21wX3NldC5vIGJuX21wX3NldF9pbnQubyBibl9tcF9pbml0X3NpemUubyBibl9tcF9jb3B5Lm8gXAorYm5fbXBfaW5pdF9jb3B5Lm8gYm5fbXBfYWJzLm8gYm5fbXBfbmVnLm8gYm5fbXBfY21wX21hZy5vIGJuX21wX2NtcC5vIGJuX21wX2NtcF9kLm8gXAorYm5fbXBfcnNoZC5vIGJuX21wX2xzaGQubyBibl9tcF9tb2RfMmQubyBibl9tcF9kaXZfMmQubyBibl9tcF9tdWxfMmQubyBibl9tcF9kaXZfMi5vIFwKK2JuX21wX211bF8yLm8gYm5fc19tcF9hZGQubyBibl9zX21wX3N1Yi5vIGJuX2Zhc3Rfc19tcF9tdWxfZGlncy5vIGJuX3NfbXBfbXVsX2RpZ3MubyBcCitibl9mYXN0X3NfbXBfbXVsX2hpZ2hfZGlncy5vIGJuX3NfbXBfbXVsX2hpZ2hfZGlncy5vIGJuX2Zhc3Rfc19tcF9zcXIubyBibl9zX21wX3Nxci5vIFwKK2JuX21wX2FkZC5vIGJuX21wX3N1Yi5vIGJuX21wX2thcmF0c3ViYV9tdWwubyBibl9tcF9tdWwubyBibl9tcF9rYXJhdHN1YmFfc3FyLm8gXAorYm5fbXBfc3FyLm8gYm5fbXBfZGl2Lm8gYm5fbXBfbW9kLm8gYm5fbXBfYWRkX2QubyBibl9tcF9zdWJfZC5vIGJuX21wX211bF9kLm8gXAorYm5fbXBfZGl2X2QubyBibl9tcF9tb2RfZC5vIGJuX21wX2V4cHRfZC5vIGJuX21wX2FkZG1vZC5vIGJuX21wX3N1Ym1vZC5vIFwKK2JuX21wX211bG1vZC5vIGJuX21wX3Nxcm1vZC5vIGJuX21wX2djZC5vIGJuX21wX2xjbS5vIGJuX2Zhc3RfbXBfaW52bW9kLm8gYm5fbXBfaW52bW9kLm8gXAorYm5fbXBfcmVkdWNlLm8gYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5vIGJuX2Zhc3RfbXBfbW9udGdvbWVyeV9yZWR1Y2UubyBibl9tcF9tb250Z29tZXJ5X3JlZHVjZS5vIFwKK2JuX21wX2V4cHRtb2RfZmFzdC5vIGJuX21wX2V4cHRtb2QubyBibl9tcF8yZXhwdC5vIGJuX21wX25fcm9vdC5vIGJuX21wX2phY29iaS5vIGJuX3JldmVyc2UubyBcCitibl9tcF9jb3VudF9iaXRzLm8gYm5fbXBfcmVhZF91bnNpZ25lZF9iaW4ubyBibl9tcF9yZWFkX3NpZ25lZF9iaW4ubyBibl9tcF90b191bnNpZ25lZF9iaW4ubyBcCitibl9tcF90b19zaWduZWRfYmluLm8gYm5fbXBfdW5zaWduZWRfYmluX3NpemUubyBibl9tcF9zaWduZWRfYmluX3NpemUubyAgXAorYm5fbXBfeG9yLm8gYm5fbXBfYW5kLm8gYm5fbXBfb3IubyBibl9tcF9yYW5kLm8gYm5fbXBfbW9udGdvbWVyeV9jYWxjX25vcm1hbGl6YXRpb24ubyBcCitibl9tcF9wcmltZV9pc19kaXZpc2libGUubyBibl9wcmltZV90YWIubyBibl9tcF9wcmltZV9mZXJtYXQubyBibl9tcF9wcmltZV9taWxsZXJfcmFiaW4ubyBcCitibl9tcF9wcmltZV9pc19wcmltZS5vIGJuX21wX3ByaW1lX25leHRfcHJpbWUubyBibl9tcF9kcl9yZWR1Y2UubyBcCitibl9tcF9kcl9pc19tb2R1bHVzLm8gYm5fbXBfZHJfc2V0dXAubyBibl9tcF9yZWR1Y2Vfc2V0dXAubyBcCitibl9tcF90b29tX211bC5vIGJuX21wX3Rvb21fc3FyLm8gYm5fbXBfZGl2XzMubyBibl9zX21wX2V4cHRtb2QubyBcCitibl9tcF9yZWR1Y2VfMmsubyBibl9tcF9yZWR1Y2VfaXNfMmsubyBibl9tcF9yZWR1Y2VfMmtfc2V0dXAubyBcCitibl9tcF9yZWR1Y2VfMmtfbC5vIGJuX21wX3JlZHVjZV9pc18ya19sLm8gYm5fbXBfcmVkdWNlXzJrX3NldHVwX2wubyBcCitibl9tcF9yYWRpeF9zbWFwLm8gYm5fbXBfcmVhZF9yYWRpeC5vIGJuX21wX3RvcmFkaXgubyBibl9tcF9yYWRpeF9zaXplLm8gXAorYm5fbXBfZnJlYWQubyBibl9tcF9md3JpdGUubyBibl9tcF9jbnRfbHNiLm8gYm5fZXJyb3IubyBcCitibl9tcF9pbml0X211bHRpLm8gYm5fbXBfY2xlYXJfbXVsdGkubyBibl9tcF9leHRldWNsaWQubyBibl9tcF90b3JhZGl4X24ubyBcCitibl9tcF9wcmltZV9yYW5kb21fZXgubyBibl9tcF9nZXRfaW50Lm8gYm5fbXBfc3FydC5vIGJuX21wX2lzX3NxdWFyZS5vIGJuX21wX2luaXRfc2V0Lm8gXAorYm5fbXBfaW5pdF9zZXRfaW50Lm8gYm5fbXBfaW52bW9kX3Nsb3cubyBibl9tcF9wcmltZV9yYWJpbl9taWxsZXJfdHJpYWxzLm8gXAorYm5fbXBfdG9fc2lnbmVkX2Jpbl9uLm8gYm5fbXBfdG9fdW5zaWduZWRfYmluX24ubworCitsaWJ0b21tYXRoLmE6ICAkKE9CSkVDVFMpCisJJChBUikgJChBUkZMQUdTKSBsaWJ0b21tYXRoLmEgJChPQkpFQ1RTKQorCXJhbmxpYiBsaWJ0b21tYXRoLmEKKworI21ha2UgYSBwcm9maWxlZCBsaWJyYXJ5ICh0YWtlcyBhIHdoaWxlISEhKQorIworIyBUaGlzIHdpbGwgYnVpbGQgdGhlIGxpYnJhcnkgd2l0aCBwcm9maWxlIGdlbmVyYXRpb24KKyMgdGhlbiBydW4gdGhlIHRlc3QgZGVtbyBhbmQgcmVidWlsZCB0aGUgbGlicmFyeS4KKyMgCisjIFNvIGZhciBJJ3ZlIHNlZW4gaW1wcm92ZW1lbnRzIGluIHRoZSBNUCBtYXRoCitwcm9maWxlZDoKKwltYWtlIC1mIG1ha2VmaWxlLmljYyBDRkxBR1M9IiQoQ0ZMQUdTKSAtcHJvZl9nZW4gLURURVNUSU5HIiB0aW1pbmcKKwkuL2x0bXRlc3QKKwlybSAtZiAqLmEgKi5vIGx0bXRlc3QKKwltYWtlIC1mIG1ha2VmaWxlLmljYyBDRkxBR1M9IiQoQ0ZMQUdTKSAtcHJvZl91c2UiCisKKyNtYWtlIGEgc2luZ2xlIG9iamVjdCBwcm9maWxlZCBsaWJyYXJ5IAorcHJvZmlsZWRfc2luZ2xlOgorCXBlcmwgZ2VuLnBsCisJJChDQykgJChDRkxBR1MpIC1wcm9mX2dlbiAtRFRFU1RJTkcgLWMgbXBpLmMgLW8gbXBpLm8KKwkkKENDKSAkKENGTEFHUykgLURURVNUSU5HIC1EVElNRVIgZGVtby9kZW1vLmMgbXBpLm8gLW8gbHRtdGVzdAorCS4vbHRtdGVzdAorCXJtIC1mICoubyBsdG10ZXN0CisJJChDQykgJChDRkxBR1MpIC1wcm9mX3VzZSAtaXAgLURURVNUSU5HIC1jIG1waS5jIC1vIG1waS5vCisJJChBUikgJChBUkZMQUdTKSBsaWJ0b21tYXRoLmEgbXBpLm8KKwlyYW5saWIgbGlidG9tbWF0aC5hCQorCitpbnN0YWxsOiBsaWJ0b21tYXRoLmEKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoTElCUEFUSCkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoSU5DUEFUSCkKKwlpbnN0YWxsIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChMSUJOQU1FKSAkKERFU1RESVIpJChMSUJQQVRIKQorCWluc3RhbGwgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKEhFQURFUlMpICQoREVTVERJUikkKElOQ1BBVEgpCisKK3Rlc3Q6IGxpYnRvbW1hdGguYSBkZW1vL2RlbW8ubworCSQoQ0MpIGRlbW8vZGVtby5vIGxpYnRvbW1hdGguYSAtbyB0ZXN0CisJCittdGVzdDogdGVzdAkKKwljZCBtdGVzdCA7ICQoQ0MpICQoQ0ZMQUdTKSBtdGVzdC5jIC1vIG10ZXN0CisgICAgICAgIAordGltaW5nOiBsaWJ0b21tYXRoLmEKKwkkKENDKSAkKENGTEFHUykgLURUSU1FUiBkZW1vL3RpbWluZy5jIGxpYnRvbW1hdGguYSAtbyBsdG10ZXN0CisKK2NsZWFuOgorCXJtIC1mICouYmF0ICoucGRmICoubyAqLmEgKi5vYmogKi5saWIgKi5leGUgKi5kbGwgZXRjbGliLyoubyBkZW1vL2RlbW8ubyB0ZXN0IGx0bXRlc3QgbXBpdGVzdCBtdGVzdC9tdGVzdCBtdGVzdC9tdGVzdC5leGUgXAorICAgICAgICAqLmlkeCAqLnRvYyAqLmxvZyAqLmF1eCAqLmR2aSAqLmxvZiAqLmluZCAqLmlsZyAqLnBzICoubG9nICoucyBtcGkuYyAqLmlsIGV0Yy8qLmlsICouZHluCisJY2QgZXRjIDsgbWFrZSBjbGVhbgorCWNkIHBpY3MgOyBtYWtlIGNsZWFuCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL21ha2VmaWxlLm1zdmMgYi9saWJ0b21tYXRoL21ha2VmaWxlLm1zdmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkZWJlYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvbWFrZWZpbGUubXN2YwpAQCAtMCwwICsxLDQwIEBACisjTVNWQyBNYWtlZmlsZQorIworI1RvbSBTdCBEZW5pcworCitDRkxBR1MgPSAvSS4gL094IC9EV0lOMzIgL1czIC9GbyRACisKK2RlZmF1bHQ6IGxpYnJhcnkKKworT0JKRUNUUz1ibmNvcmUub2JqIGJuX21wX2luaXQub2JqIGJuX21wX2NsZWFyLm9iaiBibl9tcF9leGNoLm9iaiBibl9tcF9ncm93Lm9iaiBibl9tcF9zaHJpbmsub2JqIFwKK2JuX21wX2NsYW1wLm9iaiBibl9tcF96ZXJvLm9iaiAgYm5fbXBfc2V0Lm9iaiBibl9tcF9zZXRfaW50Lm9iaiBibl9tcF9pbml0X3NpemUub2JqIGJuX21wX2NvcHkub2JqIFwKK2JuX21wX2luaXRfY29weS5vYmogYm5fbXBfYWJzLm9iaiBibl9tcF9uZWcub2JqIGJuX21wX2NtcF9tYWcub2JqIGJuX21wX2NtcC5vYmogYm5fbXBfY21wX2Qub2JqIFwKK2JuX21wX3JzaGQub2JqIGJuX21wX2xzaGQub2JqIGJuX21wX21vZF8yZC5vYmogYm5fbXBfZGl2XzJkLm9iaiBibl9tcF9tdWxfMmQub2JqIGJuX21wX2Rpdl8yLm9iaiBcCitibl9tcF9tdWxfMi5vYmogYm5fc19tcF9hZGQub2JqIGJuX3NfbXBfc3ViLm9iaiBibl9mYXN0X3NfbXBfbXVsX2RpZ3Mub2JqIGJuX3NfbXBfbXVsX2RpZ3Mub2JqIFwKK2JuX2Zhc3Rfc19tcF9tdWxfaGlnaF9kaWdzLm9iaiBibl9zX21wX211bF9oaWdoX2RpZ3Mub2JqIGJuX2Zhc3Rfc19tcF9zcXIub2JqIGJuX3NfbXBfc3FyLm9iaiBcCitibl9tcF9hZGQub2JqIGJuX21wX3N1Yi5vYmogYm5fbXBfa2FyYXRzdWJhX211bC5vYmogYm5fbXBfbXVsLm9iaiBibl9tcF9rYXJhdHN1YmFfc3FyLm9iaiBcCitibl9tcF9zcXIub2JqIGJuX21wX2Rpdi5vYmogYm5fbXBfbW9kLm9iaiBibl9tcF9hZGRfZC5vYmogYm5fbXBfc3ViX2Qub2JqIGJuX21wX211bF9kLm9iaiBcCitibl9tcF9kaXZfZC5vYmogYm5fbXBfbW9kX2Qub2JqIGJuX21wX2V4cHRfZC5vYmogYm5fbXBfYWRkbW9kLm9iaiBibl9tcF9zdWJtb2Qub2JqIFwKK2JuX21wX211bG1vZC5vYmogYm5fbXBfc3FybW9kLm9iaiBibl9tcF9nY2Qub2JqIGJuX21wX2xjbS5vYmogYm5fZmFzdF9tcF9pbnZtb2Qub2JqIGJuX21wX2ludm1vZC5vYmogXAorYm5fbXBfcmVkdWNlLm9iaiBibl9tcF9tb250Z29tZXJ5X3NldHVwLm9iaiBibl9mYXN0X21wX21vbnRnb21lcnlfcmVkdWNlLm9iaiBibl9tcF9tb250Z29tZXJ5X3JlZHVjZS5vYmogXAorYm5fbXBfZXhwdG1vZF9mYXN0Lm9iaiBibl9tcF9leHB0bW9kLm9iaiBibl9tcF8yZXhwdC5vYmogYm5fbXBfbl9yb290Lm9iaiBibl9tcF9qYWNvYmkub2JqIGJuX3JldmVyc2Uub2JqIFwKK2JuX21wX2NvdW50X2JpdHMub2JqIGJuX21wX3JlYWRfdW5zaWduZWRfYmluLm9iaiBibl9tcF9yZWFkX3NpZ25lZF9iaW4ub2JqIGJuX21wX3RvX3Vuc2lnbmVkX2Jpbi5vYmogXAorYm5fbXBfdG9fc2lnbmVkX2Jpbi5vYmogYm5fbXBfdW5zaWduZWRfYmluX3NpemUub2JqIGJuX21wX3NpZ25lZF9iaW5fc2l6ZS5vYmogIFwKK2JuX21wX3hvci5vYmogYm5fbXBfYW5kLm9iaiBibl9tcF9vci5vYmogYm5fbXBfcmFuZC5vYmogYm5fbXBfbW9udGdvbWVyeV9jYWxjX25vcm1hbGl6YXRpb24ub2JqIFwKK2JuX21wX3ByaW1lX2lzX2RpdmlzaWJsZS5vYmogYm5fcHJpbWVfdGFiLm9iaiBibl9tcF9wcmltZV9mZXJtYXQub2JqIGJuX21wX3ByaW1lX21pbGxlcl9yYWJpbi5vYmogXAorYm5fbXBfcHJpbWVfaXNfcHJpbWUub2JqIGJuX21wX3ByaW1lX25leHRfcHJpbWUub2JqIGJuX21wX2RyX3JlZHVjZS5vYmogXAorYm5fbXBfZHJfaXNfbW9kdWx1cy5vYmogYm5fbXBfZHJfc2V0dXAub2JqIGJuX21wX3JlZHVjZV9zZXR1cC5vYmogXAorYm5fbXBfdG9vbV9tdWwub2JqIGJuX21wX3Rvb21fc3FyLm9iaiBibl9tcF9kaXZfMy5vYmogYm5fc19tcF9leHB0bW9kLm9iaiBcCitibl9tcF9yZWR1Y2VfMmsub2JqIGJuX21wX3JlZHVjZV9pc18yay5vYmogYm5fbXBfcmVkdWNlXzJrX3NldHVwLm9iaiBcCitibl9tcF9yZWR1Y2VfMmtfbC5vYmogYm5fbXBfcmVkdWNlX2lzXzJrX2wub2JqIGJuX21wX3JlZHVjZV8ya19zZXR1cF9sLm9iaiBcCitibl9tcF9yYWRpeF9zbWFwLm9iaiBibl9tcF9yZWFkX3JhZGl4Lm9iaiBibl9tcF90b3JhZGl4Lm9iaiBibl9tcF9yYWRpeF9zaXplLm9iaiBcCitibl9tcF9mcmVhZC5vYmogYm5fbXBfZndyaXRlLm9iaiBibl9tcF9jbnRfbHNiLm9iaiBibl9lcnJvci5vYmogXAorYm5fbXBfaW5pdF9tdWx0aS5vYmogYm5fbXBfY2xlYXJfbXVsdGkub2JqIGJuX21wX2V4dGV1Y2xpZC5vYmogYm5fbXBfdG9yYWRpeF9uLm9iaiBcCitibl9tcF9wcmltZV9yYW5kb21fZXgub2JqIGJuX21wX2dldF9pbnQub2JqIGJuX21wX3NxcnQub2JqIGJuX21wX2lzX3NxdWFyZS5vYmogXAorYm5fbXBfaW5pdF9zZXQub2JqIGJuX21wX2luaXRfc2V0X2ludC5vYmogYm5fbXBfaW52bW9kX3Nsb3cub2JqIGJuX21wX3ByaW1lX3JhYmluX21pbGxlcl90cmlhbHMub2JqIFwKK2JuX21wX3RvX3NpZ25lZF9iaW5fbi5vYmogYm5fbXBfdG9fdW5zaWduZWRfYmluX24ub2JqCisKK0hFQURFUlM9dG9tbWF0aC5oIHRvbW1hdGhfY2xhc3MuaCB0b21tYXRoX3N1cGVyY2xhc3MuaAorCitsaWJyYXJ5OiAkKE9CSkVDVFMpCisJbGliIC9vdXQ6dG9tbWF0aC5saWIgJChPQkpFQ1RTKQpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9tYWtlZmlsZS5zaGFyZWQgYi9saWJ0b21tYXRoL21ha2VmaWxlLnNoYXJlZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjMwZmI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9tYWtlZmlsZS5zaGFyZWQKQEAgLTAsMCArMSwxMDIgQEAKKyNNYWtlZmlsZSBmb3IgR0NDCisjCisjVG9tIFN0IERlbmlzCitWRVJTSU9OPTA6NDAKKworQ0MgPSBsaWJ0b29sIC0tbW9kZT1jb21waWxlIC0tdGFnPUNDIGdjYworCitDRkxBR1MgICs9ICAtSS4vIC1XYWxsIC1XIC1Xc2hhZG93IC1Xc2lnbi1jb21wYXJlCisKK2lmbmRlZiBJR05PUkVfU1BFRUQKKworI2ZvciBzcGVlZCAKK0NGTEFHUyArPSAtTzMgLWZ1bnJvbGwtbG9vcHMKKworI2ZvciBzaXplIAorI0NGTEFHUyArPSAtT3MKKworI3g4NiBvcHRpbWl6YXRpb25zIFtzaG91bGQgYmUgdmFsaWQgZm9yIGFueSBHQ0MgaW5zdGFsbCB0aG91Z2hdCitDRkxBR1MgICs9IC1mb21pdC1mcmFtZS1wb2ludGVyCisKK2VuZGlmCisKKyNpbnN0YWxsIGFzIHRoaXMgdXNlcgoraWZuZGVmIElOU1RBTExfR1JPVVAKKyAgIEdST1VQPXdoZWVsCitlbHNlCisgICBHUk9VUD0kKElOU1RBTExfR1JPVVApCitlbmRpZgorCitpZm5kZWYgSU5TVEFMTF9VU0VSCisgICBVU0VSPXJvb3QKK2Vsc2UKKyAgIFVTRVI9JChJTlNUQUxMX1VTRVIpCitlbmRpZgorCitkZWZhdWx0OiBsaWJ0b21tYXRoLmxhCisKKyNkZWZhdWx0IGZpbGVzIHRvIGluc3RhbGwKK2lmbmRlZiBMSUJOQU1FCisgICBMSUJOQU1FPWxpYnRvbW1hdGgubGEKK2VuZGlmCitpZm5kZWYgTElCTkFNRV9TCisgICBMSUJOQU1FX1M9bGlidG9tbWF0aC5hCitlbmRpZgorSEVBREVSUz10b21tYXRoLmggdG9tbWF0aF9jbGFzcy5oIHRvbW1hdGhfc3VwZXJjbGFzcy5oCisKKyNMSUJQQVRILVRoZSBkaXJlY3RvcnkgZm9yIGxpYnRvbW1hdGggdG8gYmUgaW5zdGFsbGVkIHRvLgorI0lOQ1BBVEgtVGhlIGRpcmVjdG9yeSB0byBpbnN0YWxsIHRoZSBoZWFkZXIgZmlsZXMgZm9yIGxpYnRvbW1hdGguCisjREFUQVBBVEgtVGhlIGRpcmVjdG9yeSB0byBpbnN0YWxsIHRoZSBwZGYgZG9jcy4KK0RFU1RESVI9CitMSUJQQVRIPS91c3IvbGliCitJTkNQQVRIPS91c3IvaW5jbHVkZQorREFUQVBBVEg9L3Vzci9zaGFyZS9kb2MvbGlidG9tbWF0aC9wZGYKKworT0JKRUNUUz1ibmNvcmUubyBibl9tcF9pbml0Lm8gYm5fbXBfY2xlYXIubyBibl9tcF9leGNoLm8gYm5fbXBfZ3Jvdy5vIGJuX21wX3Nocmluay5vIFwKK2JuX21wX2NsYW1wLm8gYm5fbXBfemVyby5vICBibl9tcF9zZXQubyBibl9tcF9zZXRfaW50Lm8gYm5fbXBfaW5pdF9zaXplLm8gYm5fbXBfY29weS5vIFwKK2JuX21wX2luaXRfY29weS5vIGJuX21wX2Ficy5vIGJuX21wX25lZy5vIGJuX21wX2NtcF9tYWcubyBibl9tcF9jbXAubyBibl9tcF9jbXBfZC5vIFwKK2JuX21wX3JzaGQubyBibl9tcF9sc2hkLm8gYm5fbXBfbW9kXzJkLm8gYm5fbXBfZGl2XzJkLm8gYm5fbXBfbXVsXzJkLm8gYm5fbXBfZGl2XzIubyBcCitibl9tcF9tdWxfMi5vIGJuX3NfbXBfYWRkLm8gYm5fc19tcF9zdWIubyBibl9mYXN0X3NfbXBfbXVsX2RpZ3MubyBibl9zX21wX211bF9kaWdzLm8gXAorYm5fZmFzdF9zX21wX211bF9oaWdoX2RpZ3MubyBibl9zX21wX211bF9oaWdoX2RpZ3MubyBibl9mYXN0X3NfbXBfc3FyLm8gYm5fc19tcF9zcXIubyBcCitibl9tcF9hZGQubyBibl9tcF9zdWIubyBibl9tcF9rYXJhdHN1YmFfbXVsLm8gYm5fbXBfbXVsLm8gYm5fbXBfa2FyYXRzdWJhX3Nxci5vIFwKK2JuX21wX3Nxci5vIGJuX21wX2Rpdi5vIGJuX21wX21vZC5vIGJuX21wX2FkZF9kLm8gYm5fbXBfc3ViX2QubyBibl9tcF9tdWxfZC5vIFwKK2JuX21wX2Rpdl9kLm8gYm5fbXBfbW9kX2QubyBibl9tcF9leHB0X2QubyBibl9tcF9hZGRtb2QubyBibl9tcF9zdWJtb2QubyBcCitibl9tcF9tdWxtb2QubyBibl9tcF9zcXJtb2QubyBibl9tcF9nY2QubyBibl9tcF9sY20ubyBibl9mYXN0X21wX2ludm1vZC5vIGJuX21wX2ludm1vZC5vIFwKK2JuX21wX3JlZHVjZS5vIGJuX21wX21vbnRnb21lcnlfc2V0dXAubyBibl9mYXN0X21wX21vbnRnb21lcnlfcmVkdWNlLm8gYm5fbXBfbW9udGdvbWVyeV9yZWR1Y2UubyBcCitibl9tcF9leHB0bW9kX2Zhc3QubyBibl9tcF9leHB0bW9kLm8gYm5fbXBfMmV4cHQubyBibl9tcF9uX3Jvb3QubyBibl9tcF9qYWNvYmkubyBibl9yZXZlcnNlLm8gXAorYm5fbXBfY291bnRfYml0cy5vIGJuX21wX3JlYWRfdW5zaWduZWRfYmluLm8gYm5fbXBfcmVhZF9zaWduZWRfYmluLm8gYm5fbXBfdG9fdW5zaWduZWRfYmluLm8gXAorYm5fbXBfdG9fc2lnbmVkX2Jpbi5vIGJuX21wX3Vuc2lnbmVkX2Jpbl9zaXplLm8gYm5fbXBfc2lnbmVkX2Jpbl9zaXplLm8gIFwKK2JuX21wX3hvci5vIGJuX21wX2FuZC5vIGJuX21wX29yLm8gYm5fbXBfcmFuZC5vIGJuX21wX21vbnRnb21lcnlfY2FsY19ub3JtYWxpemF0aW9uLm8gXAorYm5fbXBfcHJpbWVfaXNfZGl2aXNpYmxlLm8gYm5fcHJpbWVfdGFiLm8gYm5fbXBfcHJpbWVfZmVybWF0Lm8gYm5fbXBfcHJpbWVfbWlsbGVyX3JhYmluLm8gXAorYm5fbXBfcHJpbWVfaXNfcHJpbWUubyBibl9tcF9wcmltZV9uZXh0X3ByaW1lLm8gYm5fbXBfZHJfcmVkdWNlLm8gXAorYm5fbXBfZHJfaXNfbW9kdWx1cy5vIGJuX21wX2RyX3NldHVwLm8gYm5fbXBfcmVkdWNlX3NldHVwLm8gXAorYm5fbXBfdG9vbV9tdWwubyBibl9tcF90b29tX3Nxci5vIGJuX21wX2Rpdl8zLm8gYm5fc19tcF9leHB0bW9kLm8gXAorYm5fbXBfcmVkdWNlXzJrLm8gYm5fbXBfcmVkdWNlX2lzXzJrLm8gYm5fbXBfcmVkdWNlXzJrX3NldHVwLm8gXAorYm5fbXBfcmVkdWNlXzJrX2wubyBibl9tcF9yZWR1Y2VfaXNfMmtfbC5vIGJuX21wX3JlZHVjZV8ya19zZXR1cF9sLm8gXAorYm5fbXBfcmFkaXhfc21hcC5vIGJuX21wX3JlYWRfcmFkaXgubyBibl9tcF90b3JhZGl4Lm8gYm5fbXBfcmFkaXhfc2l6ZS5vIFwKK2JuX21wX2ZyZWFkLm8gYm5fbXBfZndyaXRlLm8gYm5fbXBfY250X2xzYi5vIGJuX2Vycm9yLm8gXAorYm5fbXBfaW5pdF9tdWx0aS5vIGJuX21wX2NsZWFyX211bHRpLm8gYm5fbXBfZXh0ZXVjbGlkLm8gYm5fbXBfdG9yYWRpeF9uLm8gXAorYm5fbXBfcHJpbWVfcmFuZG9tX2V4Lm8gYm5fbXBfZ2V0X2ludC5vIGJuX21wX3NxcnQubyBibl9tcF9pc19zcXVhcmUubyBibl9tcF9pbml0X3NldC5vIFwKK2JuX21wX2luaXRfc2V0X2ludC5vIGJuX21wX2ludm1vZF9zbG93Lm8gYm5fbXBfcHJpbWVfcmFiaW5fbWlsbGVyX3RyaWFscy5vIFwKK2JuX21wX3RvX3NpZ25lZF9iaW5fbi5vIGJuX21wX3RvX3Vuc2lnbmVkX2Jpbl9uLm8KKworb2JqczogJChPQkpFQ1RTKQorCiskKExJQk5BTUUpOiAgJChPQkpFQ1RTKQorCWxpYnRvb2wgLS1tb2RlPWxpbmsgZ2NjICoubG8gLW8gJChMSUJOQU1FKSAtcnBhdGggJChMSUJQQVRIKSAtdmVyc2lvbi1pbmZvICQoVkVSU0lPTikKKworaW5zdGFsbDogJChMSUJOQU1FKQorCWluc3RhbGwgLWQgLWcgJChHUk9VUCkgLW8gJChVU0VSKSAkKERFU1RESVIpJChMSUJQQVRIKQorCWxpYnRvb2wgLS1tb2RlPWluc3RhbGwgaW5zdGFsbCAtYyAkKExJQk5BTUUpICQoREVTVERJUikkKExJQlBBVEgpLyQoTElCTkFNRSkKKwlpbnN0YWxsIC1kIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChERVNURElSKSQoSU5DUEFUSCkKKwlpbnN0YWxsIC1nICQoR1JPVVApIC1vICQoVVNFUikgJChIRUFERVJTKSAkKERFU1RESVIpJChJTkNQQVRIKQorCit0ZXN0OiAkKExJQk5BTUUpIGRlbW8vZGVtby5vCisJZ2NjICQoQ0ZMQUdTKSAtYyBkZW1vL2RlbW8uYyAtbyBkZW1vL2RlbW8ubworCWxpYnRvb2wgLS1tb2RlPWxpbmsgZ2NjIC1vIHRlc3QgZGVtby9kZW1vLm8gJChMSUJOQU1FX1MpCisJCittdGVzdDogdGVzdAkKKwljZCBtdGVzdCA7IGdjYyAkKENGTEFHUykgbXRlc3QuYyAtbyBtdGVzdAorICAgICAgICAKK3RpbWluZzogJChMSUJOQU1FKQorCWdjYyAkKENGTEFHUykgLURUSU1FUiBkZW1vL3RpbWluZy5jICQoTElCTkFNRV9TKSAtbyBsdG10ZXN0CmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL21lc3Muc2ggYi9saWJ0b21tYXRoL21lc3Muc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2MzljZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvbWVzcy5zaApAQCAtMCwwICsxLDQgQEAKKyMhL2Jpbi9iYXNoCitpZiBjdnMgbG9nICQxID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4gZXhpdCAwOyBlbHNlIGVjaG8gIiQxIHNob3VsZG4ndCBiZSBoZXJlIiA7IGV4aXQgMTsgZmkKKworCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL210ZXN0L2xvZ3RhYi5oIGIvbGlidG9tbWF0aC9tdGVzdC9sb2d0YWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmVmYWVmCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9tdGVzdC9sb2d0YWIuaApAQCAtMCwwICsxLDI0IEBACitjb25zdCBmbG9hdCBzX2xvZ3ZfMltdID0geworICAgMC4wMDAwMDAwMDAsIDAuMDAwMDAwMDAwLCAxLjAwMDAwMDAwMCwgMC42MzA5Mjk3NTQsIAkvKiAgMCAgMSAgMiAgMyAqLworICAgMC41MDAwMDAwMDAsIDAuNDMwNjc2NTU4LCAwLjM4Njg1MjgwNywgMC4zNTYyMDcxODcsIAkvKiAgNCAgNSAgNiAgNyAqLworICAgMC4zMzMzMzMzMzMsIDAuMzE1NDY0ODc3LCAwLjMwMTAyOTk5NiwgMC4yODkwNjQ4MjYsIAkvKiAgOCAgOSAxMCAxMSAqLworICAgMC4yNzg5NDI5NDYsIDAuMjcwMjM4MTU0LCAwLjI2MjY0OTUzNSwgMC4yNTU5NTgwMjUsIAkvKiAxMiAxMyAxNCAxNSAqLworICAgMC4yNTAwMDAwMDAsIDAuMjQ0NjUwNTQyLCAwLjIzOTgxMjQ2NywgMC4yMzU0MDg5MTMsIAkvKiAxNiAxNyAxOCAxOSAqLworICAgMC4yMzEzNzgyMTMsIDAuMjI3NjcwMjQ5LCAwLjIyNDI0MzgyNCwgMC4yMjEwNjQ3MjksIAkvKiAyMCAyMSAyMiAyMyAqLworICAgMC4yMTgxMDQyOTIsIDAuMjE1MzM4Mjc5LCAwLjIxMjc0NjA1NCwgMC4yMTAzMDk5MTgsIAkvKiAyNCAyNSAyNiAyNyAqLworICAgMC4yMDgwMTQ1OTgsIDAuMjA1ODQ2ODMyLCAwLjIwMzc5NTA0NywgMC4yMDE4NDkwODcsIAkvKiAyOCAyOSAzMCAzMSAqLworICAgMC4yMDAwMDAwMDAsIDAuMTk4MjM5ODYzLCAwLjE5NjU2MTYzMiwgMC4xOTQ5NTkwMjIsIAkvKiAzMiAzMyAzNCAzNSAqLworICAgMC4xOTM0MjY0MDQsIDAuMTkxOTU4NzIwLCAwLjE5MDU1MTQxMiwgMC4xODkyMDAzNjAsIAkvKiAzNiAzNyAzOCAzOSAqLworICAgMC4xODc5MDE4MjUsIDAuMTg2NjUyNDExLCAwLjE4NTQ0OTAyMywgMC4xODQyODg4MzMsIAkvKiA0MCA0MSA0MiA0MyAqLworICAgMC4xODMxNjkyNTEsIDAuMTgyMDg3OTAwLCAwLjE4MTA0MjU5NywgMC4xODAwMzEzMjcsIAkvKiA0NCA0NSA0NiA0NyAqLworICAgMC4xNzkwNTIyMzIsIDAuMTc4MTAzNTk0LCAwLjE3NzE4MzgyMCwgMC4xNzYyOTE0MzQsIAkvKiA0OCA0OSA1MCA1MSAqLworICAgMC4xNzU0MjUwNjQsIDAuMTc0NTgzNDMwLCAwLjE3Mzc2NTM0MywgMC4xNzI5Njk2OTAsIAkvKiA1MiA1MyA1NCA1NSAqLworICAgMC4xNzIxOTU0MzQsIDAuMTcxNDQxNjAxLCAwLjE3MDcwNzI4MCwgMC4xNjk5OTE2MTYsIAkvKiA1NiA1NyA1OCA1OSAqLworICAgMC4xNjkyOTM4MDgsIDAuMTY4NjEzMDk5LCAwLjE2Nzk0ODc3OSwgMC4xNjczMDAxNzksIAkvKiA2MCA2MSA2MiA2MyAqLworICAgMC4xNjY2NjY2NjcKK307CisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9tdGVzdC9sb2d0YWIuaCx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM4OjQ3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvbXRlc3QvbXBpLWNvbmZpZy5oIGIvbGlidG9tbWF0aC9tdGVzdC9tcGktY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0OWMyNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvbXRlc3QvbXBpLWNvbmZpZy5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgTVBJIGxpYnJhcnkgKi8KKy8qICRJZDogbXBpLWNvbmZpZy5oLHYgMS4yIDIwMDUvMDUvMDUgMTQ6Mzg6NDcgdG9tIEV4cCAkICovCisKKyNpZm5kZWYgTVBJX0NPTkZJR19IXworI2RlZmluZSBNUElfQ09ORklHX0hfCisKKy8qCisgIEZvciBib29sZWFuIG9wdGlvbnMsIAorICAwID0gbm8KKyAgMSA9IHllcworCisgIE90aGVyIG9wdGlvbnMgYXJlIGRvY3VtZW50ZWQgaW5kaXZpZHVhbGx5LgorCisgKi8KKworI2lmbmRlZiBNUF9JT0ZVTkMKKyNkZWZpbmUgTVBfSU9GVU5DICAgICAwICAvKiBpbmNsdWRlIG1wX3ByaW50KCkgPyAgICAgICAgICAgICAgICAqLworI2VuZGlmCisKKyNpZm5kZWYgTVBfTU9EQVJJVEgKKyNkZWZpbmUgTVBfTU9EQVJJVEggICAxICAvKiBpbmNsdWRlIG1vZHVsYXIgYXJpdGhtZXRpYyA/ICAgICAgICAqLworI2VuZGlmCisKKyNpZm5kZWYgTVBfTlVNVEgKKyNkZWZpbmUgTVBfTlVNVEggICAgICAxICAvKiBpbmNsdWRlIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25zPyAqLworI2VuZGlmCisKKyNpZm5kZWYgTVBfTE9HVEFCCisjZGVmaW5lIE1QX0xPR1RBQiAgICAgMSAgLyogdXNlIHRhYmxlIG9mIGxvZ3MgaW5zdGVhZCBvZiBsb2coKT8gKi8KKyNlbmRpZgorCisjaWZuZGVmIE1QX01FTVNFVAorI2RlZmluZSBNUF9NRU1TRVQgICAgIDEgIC8qIHVzZSBtZW1zZXQoKSB0byB6ZXJvIGJ1ZmZlcnM/ICAgICAgICovCisjZW5kaWYKKworI2lmbmRlZiBNUF9NRU1DUFkKKyNkZWZpbmUgTVBfTUVNQ1BZICAgICAxICAvKiB1c2UgbWVtY3B5KCkgdG8gY29weSBidWZmZXJzPyAgICAgICAqLworI2VuZGlmCisKKyNpZm5kZWYgTVBfQ1JZUFRPCisjZGVmaW5lIE1QX0NSWVBUTyAgICAgMSAgLyogZXJhc2UgbWVtb3J5IG9uIGZyZWU/ICAgICAgICAgICAgICAgKi8KKyNlbmRpZgorCisjaWZuZGVmIE1QX0FSR0NISworLyoKKyAgMCA9IG5vIHBhcmFtZXRlciBjaGVja3MKKyAgMSA9IHJ1bnRpbWUgY2hlY2tzLCBjb250aW51ZSBleGVjdXRpb24gYW5kIHJldHVybiBhbiBlcnJvciB0byBjYWxsZXIKKyAgMiA9IGFzc2VydGlvbnM7IGR1bXAgY29yZSBvbiBwYXJhbWV0ZXIgZXJyb3JzCisgKi8KKyNkZWZpbmUgTVBfQVJHQ0hLICAgICAyICAvKiBob3cgdG8gY2hlY2sgaW5wdXQgYXJndW1lbnRzICAgICAgICAqLworI2VuZGlmCisKKyNpZm5kZWYgTVBfREVCVUcKKyNkZWZpbmUgTVBfREVCVUcgICAgICAwICAvKiBwcmludCBkaWFnbm9zdGljIG91dHB1dD8gICAgICAgICAgICAqLworI2VuZGlmCisKKyNpZm5kZWYgTVBfREVGUFJFQworI2RlZmluZSBNUF9ERUZQUkVDICAgIDY0IC8qIGRlZmF1bHQgcHJlY2lzaW9uLCBpbiBkaWdpdHMgICAgICAgICovCisjZW5kaWYKKworI2lmbmRlZiBNUF9NQUNSTworI2RlZmluZSBNUF9NQUNSTyAgICAgIDEgIC8qIHVzZSBtYWNyb3MgZm9yIGZyZXF1ZW50IGNhbGxzPyAgICAgICovCisjZW5kaWYKKworI2lmbmRlZiBNUF9TUVVBUkUKKyNkZWZpbmUgTVBfU1FVQVJFICAgICAxICAvKiB1c2Ugc2VwYXJhdGUgc3F1YXJpbmcgY29kZT8gICAgICAgICAqLworI2VuZGlmCisKKyNpZm5kZWYgTVBfUFRBQl9TSVpFCisvKgorICBXaGVuIGJ1aWxkaW5nIG1wcHJpbWUuYywgd2UgYnVpbGQgaW4gYSB0YWJsZSBvZiBzbWFsbCBwcmltZQorICB2YWx1ZXMgdG8gdXNlIGZvciBwcmltYWxpdHkgdGVzdGluZy4gIFRoZSBtb3JlIHlvdSBpbmNsdWRlLAorICB0aGUgbW9yZSBzcGFjZSB0aGV5IHRha2UgdXAuICBTZWUgcHJpbWVzLmMgZm9yIHRoZSBwb3NzaWJsZQorICB2YWx1ZXMgKGN1cnJlbnRseSAxNiwgMzIsIDY0LCAxMjgsIDI1NiwgYW5kIDY1NDIpCisgKi8KKyNkZWZpbmUgTVBfUFRBQl9TSVpFICAxMjggIC8qIGhvdyBtYW55IGJ1aWx0LWluIHByaW1lcz8gICAgICAgICAqLworI2VuZGlmCisKKyNpZm5kZWYgTVBfQ09NUEFUX01BQ1JPUworI2RlZmluZSBNUF9DT01QQVRfTUFDUk9TIDEgICAvKiBkZWZpbmUgY29tcGF0aWJpbGl0eSBtYWNyb3M/ICAgICovCisjZW5kaWYKKworI2VuZGlmIC8qIGlmbmRlZiBNUElfQ09ORklHX0hfICovCisKKworLyogY3JjPT0zMjg3NzYyODY5LCB2ZXJzaW9uPT0yLCBTYXQgRmViIDAyIDA2OjQzOjUzIDIwMDIgKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9tdGVzdC9tcGktY29uZmlnLmgsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozODo0NyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL210ZXN0L21waS10eXBlcy5oIGIvbGlidG9tbWF0aC9tdGVzdC9tcGktdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjZkZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9tdGVzdC9tcGktdHlwZXMuaApAQCAtMCwwICsxLDIwIEBACisvKiBUeXBlIGRlZmluaXRpb25zIGdlbmVyYXRlZCBieSAndHlwZXMucGwnICovCit0eXBlZGVmIGNoYXIgICAgICAgICAgICAgICBtcF9zaWduOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgbXBfZGlnaXQ7ICAvKiAyIGJ5dGUgdHlwZSAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgbXBfd29yZDsgICAvKiA0IGJ5dGUgdHlwZSAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgICAgbXBfc2l6ZTsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICAgIG1wX2VycjsKKworI2RlZmluZSBNUF9ESUdJVF9CSVQgICAgICAgKENIQVJfQklUKnNpemVvZihtcF9kaWdpdCkpCisjZGVmaW5lIE1QX0RJR0lUX01BWCAgICAgICBVU0hSVF9NQVgKKyNkZWZpbmUgTVBfV09SRF9CSVQgICAgICAgIChDSEFSX0JJVCpzaXplb2YobXBfd29yZCkpCisjZGVmaW5lIE1QX1dPUkRfTUFYICAgICAgICBVSU5UX01BWAorCisjZGVmaW5lIE1QX0RJR0lUX1NJWkUgICAgICAyCisjZGVmaW5lIERJR0lUX0ZNVCAgICAgICAgICAiJTA0WCIKKyNkZWZpbmUgUkFESVggICAgICAgICAgICAgIChNUF9ESUdJVF9NQVgrMSkKKworCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL210ZXN0L21waS10eXBlcy5oLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjIgJCAqLworLyogJERhdGU6IDIwMDUvMDUvMDUgMTQ6Mzg6NDcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC9tdGVzdC9tcGkuYyBiL2xpYnRvbW1hdGgvbXRlc3QvbXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M3MTJkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvbXRlc3QvbXBpLmMKQEAgLTAsMCArMSwzOTg1IEBACisvKgorICAgIG1waS5jCisKKyAgICBieSBNaWNoYWVsIEouIEZyb21iZXJnZXIgPHN0aW5nQGxpbmd1aXN0LmRhcnRtb3V0aC5lZHU+CisgICAgQ29weXJpZ2h0IChDKSAxOTk4IE1pY2hhZWwgSi4gRnJvbWJlcmdlciwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorCisgICAgQXJiaXRyYXJ5IHByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMgbGlicmFyeQorCisgICAgJElkOiBtcGkuYyx2IDEuMiAyMDA1LzA1LzA1IDE0OjM4OjQ3IHRvbSBFeHAgJAorICovCisKKyNpbmNsdWRlICJtcGkuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisjaWYgTVBfREVCVUcKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIERJQUcoVCxWKSB7ZnByaW50ZihzdGRlcnIsVCk7bXBfcHJpbnQoVixzdGRlcnIpO2ZwdXRjKCdcbicsc3RkZXJyKTt9CisjZWxzZQorI2RlZmluZSBESUFHKFQsVikKKyNlbmRpZgorCisvKiAKKyAgIElmIE1QX0xPR1RBQiBpcyBub3QgZGVmaW5lZCwgdXNlIHRoZSBtYXRoIGxpYnJhcnkgdG8gY29tcHV0ZSB0aGUKKyAgIGxvZ2FyaXRobXMgb24gdGhlIGZseS4gIE90aGVyd2lzZSwgdXNlIHRoZSBzdGF0aWMgdGFibGUgYmVsb3cuCisgICBQaWNrIHdoaWNoIHdvcmtzIGJlc3QgZm9yIHlvdXIgc3lzdGVtLgorICovCisjaWYgTVBfTE9HVEFCCisKKy8qIHt7eyBzX2xvZ3ZfMltdIC0gbG9nIHRhYmxlIGZvciAyIGluIHZhcmlvdXMgYmFzZXMgKi8KKworLyoKKyAgQSB0YWJsZSBvZiB0aGUgbG9ncyBvZiAyIGZvciB2YXJpb3VzIGJhc2VzICh0aGUgMCBhbmQgMSBlbnRyaWVzIG9mCisgIHRoaXMgdGFibGUgYXJlIG1lYW5pbmdsZXNzIGFuZCBzaG91bGQgbm90IGJlIHJlZmVyZW5jZWQpLiAgCisKKyAgVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGNvbXB1dGUgb3V0cHV0IGxlbmd0aHMgZm9yIHRoZSBtcF90b3JhZGl4KCkKKyAgZnVuY3Rpb24uICBTaW5jZSBhIG51bWJlciBuIGluIHJhZGl4IHIgdGFrZXMgdXAgYWJvdXQgbG9nX3IobikKKyAgZGlnaXRzLCB3ZSBlc3RpbWF0ZSB0aGUgb3V0cHV0IHNpemUgYnkgdGFraW5nIHRoZSBsZWFzdCBpbnRlZ2VyCisgIGdyZWF0ZXIgdGhhbiBsb2dfcihuKSwgd2hlcmU6CisKKyAgbG9nX3IobikgPSBsb2dfMihuKSAqIGxvZ19yKDIpCisKKyAgVGhpcyB0YWJsZSwgdGhlcmVmb3JlLCBpcyBhIHRhYmxlIG9mIGxvZ19yKDIpIGZvciAyIDw9IHIgPD0gMzYsCisgIHdoaWNoIGFyZSB0aGUgb3V0cHV0IGJhc2VzIHN1cHBvcnRlZC4gIAorICovCisKKyNpbmNsdWRlICJsb2d0YWIuaCIKKworLyogfX19ICovCisjZGVmaW5lIExPR19WXzIoUikgIHNfbG9ndl8yWyhSKV0KKworI2Vsc2UKKworI2luY2x1ZGUgPG1hdGguaD4KKyNkZWZpbmUgTE9HX1ZfMihSKSAgKGxvZygyLjApL2xvZyhSKSkKKworI2VuZGlmCisKKy8qIERlZmF1bHQgcHJlY2lzaW9uIGZvciBuZXdseSBjcmVhdGVkIG1wX2ludCdzICAgICAgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgc19tcF9kZWZwcmVjID0gTVBfREVGUFJFQzsKKworLyoge3t7IERpZ2l0IGFyaXRobWV0aWMgbWFjcm9zICovCisKKy8qCisgIFdoZW4gYWRkaW5nIGFuZCBtdWx0aXBseWluZyBkaWdpdHMsIHRoZSByZXN1bHRzIGNhbiBiZSBsYXJnZXIgdGhhbgorICBjYW4gYmUgY29udGFpbmVkIGluIGFuIG1wX2RpZ2l0LiAgVGh1cywgYW4gbXBfd29yZCBpcyB1c2VkLiAgVGhlc2UKKyAgbWFjcm9zIG1hc2sgb2ZmIHRoZSB1cHBlciBhbmQgbG93ZXIgZGlnaXRzIG9mIHRoZSBtcF93b3JkICh0aGUKKyAgbXBfd29yZCBtYXkgYmUgbW9yZSB0aGFuIDIgbXBfZGlnaXRzIHdpZGUsIGJ1dCB3ZSBvbmx5IGNvbmNlcm4KKyAgb3Vyc2VsdmVzIHdpdGggdGhlIGxvdy1vcmRlciAyIG1wX2RpZ2l0cykKKworICBJZiB5b3VyIG1wX3dvcmQgRE9FUyBoYXZlIG1vcmUgdGhhbiAyIG1wX2RpZ2l0cywgeW91IG5lZWQgdG8KKyAgdW5jb21tZW50IHRoZSBmaXJzdCBsaW5lLCBhbmQgY29tbWVudCBvdXQgdGhlIHNlY29uZC4KKyAqLworCisvKiAjZGVmaW5lICBDQVJSWU9VVChXKSAgKCgoVyk+PkRJR0lUX0JJVCkmTVBfRElHSVRfTUFYKSAqLworI2RlZmluZSAgQ0FSUllPVVQoVykgICgoVyk+PkRJR0lUX0JJVCkKKyNkZWZpbmUgIEFDQ1VNKFcpICAgICAoKFcpJk1QX0RJR0lUX01BWCkKKworLyogfX19ICovCisKKy8qIHt7eyBDb21wYXJpc29uIGNvbnN0YW50cyAqLworCisjZGVmaW5lICBNUF9MVCAgICAgICAtMQorI2RlZmluZSAgTVBfRVEgICAgICAgIDAKKyNkZWZpbmUgIE1QX0dUICAgICAgICAxCisKKy8qIH19fSAqLworCisvKiB7e3sgQ29uc3RhbnQgc3RyaW5ncyAqLworCisvKiBDb25zdGFudCBzdHJpbmdzIHJldHVybmVkIGJ5IG1wX3N0cmVycm9yKCkgKi8KK3N0YXRpYyBjb25zdCBjaGFyICptcF9lcnJfc3RyaW5nW10gPSB7CisgICJ1bmtub3duIHJlc3VsdCBjb2RlIiwgICAgIC8qIHNheSB3aGF0PyAgICAgICAgICAgICovCisgICJib29sZWFuIHRydWUiLCAgICAgICAgICAgIC8qIE1QX09LQVksIE1QX1lFUyAgICAgICovCisgICJib29sZWFuIGZhbHNlIiwgICAgICAgICAgIC8qIE1QX05PICAgICAgICAgICAgICAgICovCisgICJvdXQgb2YgbWVtb3J5IiwgICAgICAgICAgIC8qIE1QX01FTSAgICAgICAgICAgICAgICovCisgICJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiLCAgIC8qIE1QX1JBTkdFICAgICAgICAgICAgICovCisgICJpbnZhbGlkIGlucHV0IHBhcmFtZXRlciIsIC8qIE1QX0JBREFSRyAgICAgICAgICAgICovCisgICJyZXN1bHQgaXMgdW5kZWZpbmVkIiAgICAgIC8qIE1QX1VOREVGICAgICAgICAgICAgICovCit9OworCisvKiBWYWx1ZSB0byBkaWdpdCBtYXBzIGZvciByYWRpeCBjb252ZXJzaW9uICAgKi8KKworLyogc19kbWFwXzEgLSBzdGFuZGFyZCBkaWdpdHMgYW5kIGxldHRlcnMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpzX2RtYXBfMSA9IAorICAiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXorLyI7CisKKyNpZiAwCisvKiBzX2RtYXBfMiAtIGJhc2U2NCBvcmRlcmluZyBmb3IgZGlnaXRzICAqLworc3RhdGljIGNvbnN0IGNoYXIgKnNfZG1hcF8yID0KKyAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iOworI2VuZGlmCisKKy8qIH19fSAqLworCisvKiB7e3sgU3RhdGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLworCisvKiAKKyAgIElmIE1QX01BQ1JPIGlzIGZhbHNlLCB0aGVzZSB3aWxsIGJlIGRlZmluZWQgYXMgYWN0dWFsIGZ1bmN0aW9uczsKKyAgIG90aGVyd2lzZSwgc3VpdGFibGUgbWFjcm8gZGVmaW5pdGlvbnMgd2lsbCBiZSB1c2VkLiAgVGhpcyB3b3JrcworICAgYXJvdW5kIHRoZSBmYWN0IHRoYXQgQU5TSSBDODkgZG9lc24ndCBzdXBwb3J0IGFuICdpbmxpbmUnIGtleXdvcmQKKyAgIChhbHRob3VnaCBJIGhlYXIgQzl4IHdpbGwgLi4uIGFib3V0IGJsb29keSB0aW1lKS4gIEF0IHByZXNlbnQsIHRoZQorICAgbWFjcm8gZGVmaW5pdGlvbnMgYXJlIGlkZW50aWNhbCB0byB0aGUgZnVuY3Rpb24gYm9kaWVzLCBidXQgdGhleSdsbAorICAgZXhwYW5kIGluIHBsYWNlLCBpbnN0ZWFkIG9mIGdlbmVyYXRpbmcgYSBmdW5jdGlvbiBjYWxsLgorCisgICBJIGNob3NlIHRoZXNlIHBhcnRpY3VsYXIgZnVuY3Rpb25zIHRvIGJlIG1hZGUgaW50byBtYWNyb3MgYmVjYXVzZQorICAgc29tZSBwcm9maWxpbmcgc2hvd2VkIHRoZXkgYXJlIGNhbGxlZCBhIGxvdCBvbiBhIHR5cGljYWwgd29ya2xvYWQsCisgICBhbmQgeWV0IHRoZXkgYXJlIHByaW1hcmlseSBob3VzZWtlZXBpbmcuCisgKi8KKyNpZiBNUF9NQUNSTyA9PSAwCisgdm9pZCAgICAgc19tcF9zZXR6KG1wX2RpZ2l0ICpkcCwgbXBfc2l6ZSBjb3VudCk7IC8qIHplcm8gZGlnaXRzICAgICAgICAgICAqLworIHZvaWQgICAgIHNfbXBfY29weShtcF9kaWdpdCAqc3AsIG1wX2RpZ2l0ICpkcCwgbXBfc2l6ZSBjb3VudCk7IC8qIGNvcHkgICAgKi8KKyB2b2lkICAgICpzX21wX2FsbG9jKHNpemVfdCBuYiwgc2l6ZV90IG5pKTsgICAgICAgLyogZ2VuZXJhbCBhbGxvY2F0b3IgICAgICovCisgdm9pZCAgICAgc19tcF9mcmVlKHZvaWQgKnB0cik7ICAgICAgICAgICAgICAgICAgIC8qIGdlbmVyYWwgZnJlZSBmdW5jdGlvbiAqLworI2Vsc2UKKworIC8qIEV2ZW4gaWYgdGhlc2UgYXJlIGRlZmluZWQgYXMgbWFjcm9zLCB3ZSBuZWVkIHRvIHJlc3BlY3QgdGhlIHNldHRpbmdzCisgICAgb2YgdGhlIE1QX01FTVNFVCBhbmQgTVBfTUVNQ1BZIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4uLgorICAqLworICNpZiBNUF9NRU1TRVQgPT0gMAorICAjZGVmaW5lICBzX21wX3NldHooZHAsIGNvdW50KSBcCisgICAgICAge2ludCBpeDtmb3IoaXg9MDtpeDwoY291bnQpO2l4KyspKGRwKVtpeF09MDt9CisgI2Vsc2UKKyAgI2RlZmluZSAgc19tcF9zZXR6KGRwLCBjb3VudCkgbWVtc2V0KGRwLCAwLCAoY291bnQpICogc2l6ZW9mKG1wX2RpZ2l0KSkKKyAjZW5kaWYgLyogTVBfTUVNU0VUICovCisKKyAjaWYgTVBfTUVNQ1BZID09IDAKKyAgI2RlZmluZSAgc19tcF9jb3B5KHNwLCBkcCwgY291bnQpIFwKKyAgICAgICB7aW50IGl4O2ZvcihpeD0wO2l4PChjb3VudCk7aXgrKykoZHApW2l4XT0oc3ApW2l4XTt9CisgI2Vsc2UKKyAgI2RlZmluZSAgc19tcF9jb3B5KHNwLCBkcCwgY291bnQpIG1lbWNweShkcCwgc3AsIChjb3VudCkgKiBzaXplb2YobXBfZGlnaXQpKQorICNlbmRpZiAvKiBNUF9NRU1DUFkgKi8KKworICNkZWZpbmUgIHNfbXBfYWxsb2MobmIsIG5pKSAgY2FsbG9jKG5iLCBuaSkKKyAjZGVmaW5lICBzX21wX2ZyZWUocHRyKSB7aWYocHRyKSBmcmVlKHB0cik7fQorI2VuZGlmIC8qIE1QX01BQ1JPICovCisKK21wX2VyciAgIHNfbXBfZ3JvdyhtcF9pbnQgKm1wLCBtcF9zaXplIG1pbik7ICAgLyogaW5jcmVhc2UgYWxsb2NhdGVkIHNpemUgKi8KK21wX2VyciAgIHNfbXBfcGFkKG1wX2ludCAqbXAsIG1wX3NpemUgbWluKTsgICAgLyogbGVmdCBwYWQgd2l0aCB6ZXJvZXMgICAgKi8KKwordm9pZCAgICAgc19tcF9jbGFtcChtcF9pbnQgKm1wKTsgICAgICAgICAgICAgICAvKiBjbGlwIGxlYWRpbmcgemVyb2VzICAgICAqLworCit2b2lkICAgICBzX21wX2V4Y2gobXBfaW50ICphLCBtcF9pbnQgKmIpOyAgICAgIC8qIHN3YXAgYSBhbmQgYiBpbiBwbGFjZSAgICovCisKK21wX2VyciAgIHNfbXBfbHNoZChtcF9pbnQgKm1wLCBtcF9zaXplIHApOyAgICAgLyogbGVmdC1zaGlmdCBieSBwIGRpZ2l0cyAgKi8KK3ZvaWQgICAgIHNfbXBfcnNoZChtcF9pbnQgKm1wLCBtcF9zaXplIHApOyAgICAgLyogcmlnaHQtc2hpZnQgYnkgcCBkaWdpdHMgKi8KK3ZvaWQgICAgIHNfbXBfZGl2XzJkKG1wX2ludCAqbXAsIG1wX2RpZ2l0IGQpOyAgLyogZGl2aWRlIGJ5IDJeZCBpbiBwbGFjZSAgKi8KK3ZvaWQgICAgIHNfbXBfbW9kXzJkKG1wX2ludCAqbXAsIG1wX2RpZ2l0IGQpOyAgLyogbW9kdWxvIDJeZCBpbiBwbGFjZSAgICAgKi8KK21wX2VyciAgIHNfbXBfbXVsXzJkKG1wX2ludCAqbXAsIG1wX2RpZ2l0IGQpOyAgLyogbXVsdGlwbHkgYnkgMl5kIGluIHBsYWNlKi8KK3ZvaWQgICAgIHNfbXBfZGl2XzIobXBfaW50ICptcCk7ICAgICAgICAgICAgICAgLyogZGl2aWRlIGJ5IDIgaW4gcGxhY2UgICAgKi8KK21wX2VyciAgIHNfbXBfbXVsXzIobXBfaW50ICptcCk7ICAgICAgICAgICAgICAgLyogbXVsdGlwbHkgYnkgMiBpbiBwbGFjZSAgKi8KK21wX2RpZ2l0IHNfbXBfbm9ybShtcF9pbnQgKmEsIG1wX2ludCAqYik7ICAgICAgLyogbm9ybWFsaXplIGZvciBkaXZpc2lvbiAgKi8KK21wX2VyciAgIHNfbXBfYWRkX2QobXBfaW50ICptcCwgbXBfZGlnaXQgZCk7ICAgLyogdW5zaWduZWQgZGlnaXQgYWRkaXRpb24gKi8KK21wX2VyciAgIHNfbXBfc3ViX2QobXBfaW50ICptcCwgbXBfZGlnaXQgZCk7ICAgLyogdW5zaWduZWQgZGlnaXQgc3VidHJhY3QgKi8KK21wX2VyciAgIHNfbXBfbXVsX2QobXBfaW50ICptcCwgbXBfZGlnaXQgZCk7ICAgLyogdW5zaWduZWQgZGlnaXQgbXVsdGlwbHkgKi8KK21wX2VyciAgIHNfbXBfZGl2X2QobXBfaW50ICptcCwgbXBfZGlnaXQgZCwgbXBfZGlnaXQgKnIpOworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5zaWduZWQgZGlnaXQgZGl2aWRlICAgKi8KK21wX2VyciAgIHNfbXBfcmVkdWNlKG1wX2ludCAqeCwgbXBfaW50ICptLCBtcF9pbnQgKm11KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQmFycmV0dCByZWR1Y3Rpb24gICAgICAgKi8KK21wX2VyciAgIHNfbXBfYWRkKG1wX2ludCAqYSwgbXBfaW50ICpiKTsgICAgICAgLyogbWFnbml0dWRlIGFkZGl0aW9uICAgICAgKi8KK21wX2VyciAgIHNfbXBfc3ViKG1wX2ludCAqYSwgbXBfaW50ICpiKTsgICAgICAgLyogbWFnbml0dWRlIHN1YnRyYWN0ICAgICAgKi8KK21wX2VyciAgIHNfbXBfbXVsKG1wX2ludCAqYSwgbXBfaW50ICpiKTsgICAgICAgLyogbWFnbml0dWRlIG11bHRpcGx5ICAgICAgKi8KKyNpZiAwCit2b2lkICAgICBzX21wX2ttdWwobXBfZGlnaXQgKmEsIG1wX2RpZ2l0ICpiLCBtcF9kaWdpdCAqb3V0LCBtcF9zaXplIGxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG11bHRpcGx5IGJ1ZmZlcnMgaW4gcGxhY2UgKi8KKyNlbmRpZgorI2lmIE1QX1NRVUFSRQorbXBfZXJyICAgc19tcF9zcXIobXBfaW50ICphKTsgICAgICAgICAgICAgICAgICAvKiBtYWduaXR1ZGUgc3F1YXJlICAgICAgICAqLworI2Vsc2UKKyNkZWZpbmUgIHNfbXBfc3FyKGEpIHNfbXBfbXVsKGEsIGEpCisjZW5kaWYKK21wX2VyciAgIHNfbXBfZGl2KG1wX2ludCAqYSwgbXBfaW50ICpiKTsgICAgICAgLyogbWFnbml0dWRlIGRpdmlkZSAgICAgICAgKi8KK21wX2VyciAgIHNfbXBfMmV4cHQobXBfaW50ICphLCBtcF9kaWdpdCBrKTsgICAgLyogYSA9IDJeayAgICAgICAgICAgICAgICAgKi8KK2ludCAgICAgIHNfbXBfY21wKG1wX2ludCAqYSwgbXBfaW50ICpiKTsgICAgICAgLyogbWFnbml0dWRlIGNvbXBhcmlzb24gICAgKi8KK2ludCAgICAgIHNfbXBfY21wX2QobXBfaW50ICphLCBtcF9kaWdpdCBkKTsgICAgLyogbWFnbml0dWRlIGRpZ2l0IGNvbXBhcmUgKi8KK2ludCAgICAgIHNfbXBfaXNwb3cyKG1wX2ludCAqdik7ICAgICAgICAgICAgICAgLyogaXMgdiBhIHBvd2VyIG9mIDI/ICAgICAgKi8KK2ludCAgICAgIHNfbXBfaXNwb3cyZChtcF9kaWdpdCBkKTsgICAgICAgICAgICAgLyogaXMgZCBhIHBvd2VyIG9mIDI/ICAgICAgKi8KKworaW50ICAgICAgc19tcF90b3ZhbHVlKGNoYXIgY2gsIGludCByKTsgICAgICAgICAgLyogY29udmVydCBjaCB0byB2YWx1ZSAgICAqLworY2hhciAgICAgc19tcF90b2RpZ2l0KGludCB2YWwsIGludCByLCBpbnQgbG93KTsgLyogY29udmVydCB2YWwgdG8gZGlnaXQgICAqLworaW50ICAgICAgc19tcF9vdXRsZW4oaW50IGJpdHMsIGludCByKTsgICAgICAgICAgLyogb3V0cHV0IGxlbmd0aCBpbiBieXRlcyAqLworCisvKiB9fX0gKi8KKworLyoge3t7IERlZmF1bHQgcHJlY2lzaW9uIG1hbmlwdWxhdGlvbiAqLworCit1bnNpZ25lZCBpbnQgbXBfZ2V0X3ByZWModm9pZCkKK3sKKyAgcmV0dXJuIHNfbXBfZGVmcHJlYzsKKworfSAvKiBlbmQgbXBfZ2V0X3ByZWMoKSAqLworCit2b2lkICAgICAgICAgbXBfc2V0X3ByZWModW5zaWduZWQgaW50IHByZWMpCit7CisgIGlmKHByZWMgPT0gMCkKKyAgICBzX21wX2RlZnByZWMgPSBNUF9ERUZQUkVDOworICBlbHNlCisgICAgc19tcF9kZWZwcmVjID0gcHJlYzsKKworfSAvKiBlbmQgbXBfc2V0X3ByZWMoKSAqLworCisvKiB9fX0gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoge3t7IG1wX2luaXQobXApICovCisKKy8qCisgIG1wX2luaXQobXApCisKKyAgSW5pdGlhbGl6ZSBhIG5ldyB6ZXJvLXZhbHVlZCBtcF9pbnQuICBSZXR1cm5zIE1QX09LQVkgaWYgc3VjY2Vzc2Z1bCwKKyAgTVBfTUVNIGlmIG1lbW9yeSBjb3VsZCBub3QgYmUgYWxsb2NhdGVkIGZvciB0aGUgc3RydWN0dXJlLgorICovCisKK21wX2VyciBtcF9pbml0KG1wX2ludCAqbXApCit7CisgIHJldHVybiBtcF9pbml0X3NpemUobXAsIHNfbXBfZGVmcHJlYyk7CisKK30gLyogZW5kIG1wX2luaXQoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IG1wX2luaXRfYXJyYXkobXBbXSwgY291bnQpICovCisKK21wX2VyciBtcF9pbml0X2FycmF5KG1wX2ludCBtcFtdLCBpbnQgY291bnQpCit7CisgIG1wX2VyciAgcmVzOworICBpbnQgICAgIHBvczsKKworICBBUkdDSEsobXAgIT1OVUxMICYmIGNvdW50ID4gMCwgTVBfQkFEQVJHKTsKKworICBmb3IocG9zID0gMDsgcG9zIDwgY291bnQ7ICsrcG9zKSB7CisgICAgaWYoKHJlcyA9IG1wX2luaXQoJm1wW3Bvc10pKSAhPSBNUF9PS0FZKQorICAgICAgZ290byBDTEVBTlVQOworICB9CisKKyAgcmV0dXJuIE1QX09LQVk7CisKKyBDTEVBTlVQOgorICB3aGlsZSgtLXBvcyA+PSAwKSAKKyAgICBtcF9jbGVhcigmbXBbcG9zXSk7CisKKyAgcmV0dXJuIHJlczsKKworfSAvKiBlbmQgbXBfaW5pdF9hcnJheSgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfaW5pdF9zaXplKG1wLCBwcmVjKSAqLworCisvKgorICBtcF9pbml0X3NpemUobXAsIHByZWMpCisKKyAgSW5pdGlhbGl6ZSBhIG5ldyB6ZXJvLXZhbHVlZCBtcF9pbnQgd2l0aCBhdCBsZWFzdCB0aGUgZ2l2ZW4KKyAgcHJlY2lzaW9uOyByZXR1cm5zIE1QX09LQVkgaWYgc3VjY2Vzc2Z1bCwgb3IgTVBfTUVNIGlmIG1lbW9yeSBjb3VsZAorICBub3QgYmUgYWxsb2NhdGVkIGZvciB0aGUgc3RydWN0dXJlLgorICovCisKK21wX2VyciBtcF9pbml0X3NpemUobXBfaW50ICptcCwgbXBfc2l6ZSBwcmVjKQoreworICBBUkdDSEsobXAgIT0gTlVMTCAmJiBwcmVjID4gMCwgTVBfQkFEQVJHKTsKKworICBpZigoRElHSVRTKG1wKSA9IHNfbXBfYWxsb2MocHJlYywgc2l6ZW9mKG1wX2RpZ2l0KSkpID09IE5VTEwpCisgICAgcmV0dXJuIE1QX01FTTsKKworICBTSUdOKG1wKSA9IE1QX1pQT1M7CisgIFVTRUQobXApID0gMTsKKyAgQUxMT0MobXApID0gcHJlYzsKKworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgbXBfaW5pdF9zaXplKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9pbml0X2NvcHkobXAsIGZyb20pICovCisKKy8qCisgIG1wX2luaXRfY29weShtcCwgZnJvbSkKKworICBJbml0aWFsaXplIG1wIGFzIGFuIGV4YWN0IGNvcHkgb2YgZnJvbS4gIFJldHVybnMgTVBfT0tBWSBpZgorICBzdWNjZXNzZnVsLCBNUF9NRU0gaWYgbWVtb3J5IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBuZXcKKyAgc3RydWN0dXJlLgorICovCisKK21wX2VyciBtcF9pbml0X2NvcHkobXBfaW50ICptcCwgbXBfaW50ICpmcm9tKQoreworICBBUkdDSEsobXAgIT0gTlVMTCAmJiBmcm9tICE9IE5VTEwsIE1QX0JBREFSRyk7CisKKyAgaWYobXAgPT0gZnJvbSkKKyAgICByZXR1cm4gTVBfT0tBWTsKKworICBpZigoRElHSVRTKG1wKSA9IHNfbXBfYWxsb2MoVVNFRChmcm9tKSwgc2l6ZW9mKG1wX2RpZ2l0KSkpID09IE5VTEwpCisgICAgcmV0dXJuIE1QX01FTTsKKworICBzX21wX2NvcHkoRElHSVRTKGZyb20pLCBESUdJVFMobXApLCBVU0VEKGZyb20pKTsKKyAgVVNFRChtcCkgPSBVU0VEKGZyb20pOworICBBTExPQyhtcCkgPSBVU0VEKGZyb20pOworICBTSUdOKG1wKSA9IFNJR04oZnJvbSk7CisKKyAgcmV0dXJuIE1QX09LQVk7CisKK30gLyogZW5kIG1wX2luaXRfY29weSgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfY29weShmcm9tLCB0bykgKi8KKworLyoKKyAgbXBfY29weShmcm9tLCB0bykKKworICBDb3BpZXMgdGhlIG1wX2ludCAnZnJvbScgdG8gdGhlIG1wX2ludCAndG8nLiAgSXQgaXMgcHJlc3VtZWQgdGhhdAorICAndG8nIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgKGlmIG5vdCwgdXNlIG1wX2luaXRfY29weSgpCisgIGluc3RlYWQpLiBJZiAnZnJvbScgYW5kICd0bycgYXJlIGlkZW50aWNhbCwgbm90aGluZyBoYXBwZW5zLgorICovCisKK21wX2VyciBtcF9jb3B5KG1wX2ludCAqZnJvbSwgbXBfaW50ICp0bykKK3sKKyAgQVJHQ0hLKGZyb20gIT0gTlVMTCAmJiB0byAhPSBOVUxMLCBNUF9CQURBUkcpOworCisgIGlmKGZyb20gPT0gdG8pCisgICAgcmV0dXJuIE1QX09LQVk7CisKKyAgeyAvKiBjb3B5ICovCisgICAgbXBfZGlnaXQgICAqdG1wOworCisgICAgLyoKKyAgICAgIElmIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIGluICd0bycgYWxyZWFkeSBoYXMgZW5vdWdoIHNwYWNlIHRvIGhvbGQKKyAgICAgIGFsbCB0aGUgdXNlZCBkaWdpdHMgb2YgJ2Zyb20nLCB3ZSdsbCByZS11c2UgaXQgdG8gYXZvaWQgaGl0dGluZworICAgICAgdGhlIG1lbW9yeSBhbGxvY2F0ZXIgbW9yZSB0aGFuIG5lY2Vzc2FyeTsgb3RoZXJ3aXNlLCB3ZSdkIGhhdmUKKyAgICAgIHRvIGdyb3cgYW55d2F5LCBzbyB3ZSBqdXN0IGFsbG9jYXRlIGEgaHVuayBhbmQgbWFrZSB0aGUgY29weSBhcworICAgICAgdXN1YWwKKyAgICAgKi8KKyAgICBpZihBTExPQyh0bykgPj0gVVNFRChmcm9tKSkgeworICAgICAgc19tcF9zZXR6KERJR0lUUyh0bykgKyBVU0VEKGZyb20pLCBBTExPQyh0bykgLSBVU0VEKGZyb20pKTsKKyAgICAgIHNfbXBfY29weShESUdJVFMoZnJvbSksIERJR0lUUyh0byksIFVTRUQoZnJvbSkpOworICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgIGlmKCh0bXAgPSBzX21wX2FsbG9jKFVTRUQoZnJvbSksIHNpemVvZihtcF9kaWdpdCkpKSA9PSBOVUxMKQorCXJldHVybiBNUF9NRU07CisKKyAgICAgIHNfbXBfY29weShESUdJVFMoZnJvbSksIHRtcCwgVVNFRChmcm9tKSk7CisKKyAgICAgIGlmKERJR0lUUyh0bykgIT0gTlVMTCkgeworI2lmIE1QX0NSWVBUTworCXNfbXBfc2V0eihESUdJVFModG8pLCBBTExPQyh0bykpOworI2VuZGlmCisJc19tcF9mcmVlKERJR0lUUyh0bykpOworICAgICAgfQorCisgICAgICBESUdJVFModG8pID0gdG1wOworICAgICAgQUxMT0ModG8pID0gVVNFRChmcm9tKTsKKyAgICB9CisKKyAgICAvKiBDb3B5IHRoZSBwcmVjaXNpb24gYW5kIHNpZ24gZnJvbSB0aGUgb3JpZ2luYWwgKi8KKyAgICBVU0VEKHRvKSA9IFVTRUQoZnJvbSk7CisgICAgU0lHTih0bykgPSBTSUdOKGZyb20pOworICB9IC8qIGVuZCBjb3B5ICovCisKKyAgcmV0dXJuIE1QX09LQVk7CisKK30gLyogZW5kIG1wX2NvcHkoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IG1wX2V4Y2gobXAxLCBtcDIpICovCisKKy8qCisgIG1wX2V4Y2gobXAxLCBtcDIpCisKKyAgRXhjaGFuZ2UgbXAxIGFuZCBtcDIgd2l0aG91dCBhbGxvY2F0aW5nIGFueSBpbnRlcm1lZGlhdGUgbWVtb3J5CisgICh3ZWxsLCB1bmxlc3MgeW91IGNvdW50IHRoZSBzdGFjayBzcGFjZSBuZWVkZWQgZm9yIHRoaXMgY2FsbCBhbmQgdGhlCisgIGxvY2FscyBpdCBjcmVhdGVzLi4uKS4gIFRoaXMgY2Fubm90IGZhaWwuCisgKi8KKwordm9pZCBtcF9leGNoKG1wX2ludCAqbXAxLCBtcF9pbnQgKm1wMikKK3sKKyNpZiBNUF9BUkdDSEsgPT0gMgorICBhc3NlcnQobXAxICE9IE5VTEwgJiYgbXAyICE9IE5VTEwpOworI2Vsc2UKKyAgaWYobXAxID09IE5VTEwgfHwgbXAyID09IE5VTEwpCisgICAgcmV0dXJuOworI2VuZGlmCisKKyAgc19tcF9leGNoKG1wMSwgbXAyKTsKKworfSAvKiBlbmQgbXBfZXhjaCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfY2xlYXIobXApICovCisKKy8qCisgIG1wX2NsZWFyKG1wKQorCisgIFJlbGVhc2UgdGhlIHN0b3JhZ2UgdXNlZCBieSBhbiBtcF9pbnQsIGFuZCB2b2lkIGl0cyBmaWVsZHMgc28gdGhhdAorICBpZiBzb21lb25lIGNhbGxzIG1wX2NsZWFyKCkgYWdhaW4gZm9yIHRoZSBzYW1lIGludCBsYXRlciwgd2Ugd29uJ3QKKyAgZ2V0IHRvbGxjaG9ja2VkLgorICovCisKK3ZvaWQgICBtcF9jbGVhcihtcF9pbnQgKm1wKQoreworICBpZihtcCA9PSBOVUxMKQorICAgIHJldHVybjsKKworICBpZihESUdJVFMobXApICE9IE5VTEwpIHsKKyNpZiBNUF9DUllQVE8KKyAgICBzX21wX3NldHooRElHSVRTKG1wKSwgQUxMT0MobXApKTsKKyNlbmRpZgorICAgIHNfbXBfZnJlZShESUdJVFMobXApKTsKKyAgICBESUdJVFMobXApID0gTlVMTDsKKyAgfQorCisgIFVTRUQobXApID0gMDsKKyAgQUxMT0MobXApID0gMDsKKworfSAvKiBlbmQgbXBfY2xlYXIoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IG1wX2NsZWFyX2FycmF5KG1wW10sIGNvdW50KSAqLworCit2b2lkICAgbXBfY2xlYXJfYXJyYXkobXBfaW50IG1wW10sIGludCBjb3VudCkKK3sKKyAgQVJHQ0hLKG1wICE9IE5VTEwgJiYgY291bnQgPiAwLCBNUF9CQURBUkcpOworCisgIHdoaWxlKC0tY291bnQgPj0gMCkgCisgICAgbXBfY2xlYXIoJm1wW2NvdW50XSk7CisKK30gLyogZW5kIG1wX2NsZWFyX2FycmF5KCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF96ZXJvKG1wKSAqLworCisvKgorICBtcF96ZXJvKG1wKSAKKworICBTZXQgbXAgdG8gemVyby4gIERvZXMgbm90IGNoYW5nZSB0aGUgYWxsb2NhdGVkIHNpemUgb2YgdGhlIHN0cnVjdHVyZSwKKyAgYW5kIHRoZXJlZm9yZSBjYW5ub3QgZmFpbCAoZXhjZXB0IG9uIGEgYmFkIGFyZ3VtZW50LCB3aGljaCB3ZSBpZ25vcmUpCisgKi8KK3ZvaWQgICBtcF96ZXJvKG1wX2ludCAqbXApCit7CisgIGlmKG1wID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIHNfbXBfc2V0eihESUdJVFMobXApLCBBTExPQyhtcCkpOworICBVU0VEKG1wKSA9IDE7CisgIFNJR04obXApID0gTVBfWlBPUzsKKworfSAvKiBlbmQgbXBfemVybygpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfc2V0KG1wLCBkKSAqLworCit2b2lkICAgbXBfc2V0KG1wX2ludCAqbXAsIG1wX2RpZ2l0IGQpCit7CisgIGlmKG1wID09IE5VTEwpCisgICAgcmV0dXJuOworCisgIG1wX3plcm8obXApOworICBESUdJVChtcCwgMCkgPSBkOworCit9IC8qIGVuZCBtcF9zZXQoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IG1wX3NldF9pbnQobXAsIHopICovCisKK21wX2VyciBtcF9zZXRfaW50KG1wX2ludCAqbXAsIGxvbmcgeikKK3sKKyAgaW50ICAgICAgICAgICAgaXg7CisgIHVuc2lnbmVkIGxvbmcgIHYgPSBhYnMoeik7CisgIG1wX2VyciAgICAgICAgIHJlczsKKworICBBUkdDSEsobXAgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBtcF96ZXJvKG1wKTsKKyAgaWYoeiA9PSAwKQorICAgIHJldHVybiBNUF9PS0FZOyAgLyogc2hvcnRjdXQgZm9yIHplcm8gKi8KKworICBmb3IoaXggPSBzaXplb2YobG9uZykgLSAxOyBpeCA+PSAwOyBpeC0tKSB7CisKKyAgICBpZigocmVzID0gc19tcF9tdWxfMmQobXAsIENIQVJfQklUKSkgIT0gTVBfT0tBWSkKKyAgICAgIHJldHVybiByZXM7CisKKyAgICByZXMgPSBzX21wX2FkZF9kKG1wLCAKKwkJICAgICAobXBfZGlnaXQpKCh2ID4+IChpeCAqIENIQVJfQklUKSkgJiBVQ0hBUl9NQVgpKTsKKyAgICBpZihyZXMgIT0gTVBfT0tBWSkKKyAgICAgIHJldHVybiByZXM7CisKKyAgfQorCisgIGlmKHogPCAwKQorICAgIFNJR04obXApID0gTVBfTkVHOworCisgIHJldHVybiBNUF9PS0FZOworCit9IC8qIGVuZCBtcF9zZXRfaW50KCkgKi8KKworLyogfX19ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHt7eyBEaWdpdCBhcml0aG1ldGljICovCisKKy8qIHt7eyBtcF9hZGRfZChhLCBkLCBiKSAqLworCisvKgorICBtcF9hZGRfZChhLCBkLCBiKQorCisgIENvbXB1dGUgdGhlIHN1bSBiID0gYSArIGQsIGZvciBhIHNpbmdsZSBkaWdpdCBkLiAgUmVzcGVjdHMgdGhlIHNpZ24gb2YKKyAgaXRzIHByaW1hcnkgYWRkZW5kIChzaW5nbGUgZGlnaXRzIGFyZSB1bnNpZ25lZCBhbnl3YXkpLgorICovCisKK21wX2VyciBtcF9hZGRfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGQsIG1wX2ludCAqYikKK3sKKyAgbXBfZXJyICAgcmVzID0gTVBfT0tBWTsKKworICBBUkdDSEsoYSAhPSBOVUxMICYmIGIgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZigocmVzID0gbXBfY29weShhLCBiKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworCisgIGlmKFNJR04oYikgPT0gTVBfWlBPUykgeworICAgIHJlcyA9IHNfbXBfYWRkX2QoYiwgZCk7CisgIH0gZWxzZSBpZihzX21wX2NtcF9kKGIsIGQpID49IDApIHsKKyAgICByZXMgPSBzX21wX3N1Yl9kKGIsIGQpOworICB9IGVsc2UgeworICAgIFNJR04oYikgPSBNUF9aUE9TOworCisgICAgRElHSVQoYiwgMCkgPSBkIC0gRElHSVQoYiwgMCk7CisgIH0KKworICByZXR1cm4gcmVzOworCit9IC8qIGVuZCBtcF9hZGRfZCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfc3ViX2QoYSwgZCwgYikgKi8KKworLyoKKyAgbXBfc3ViX2QoYSwgZCwgYikKKworICBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGIgPSBhIC0gZCwgZm9yIGEgc2luZ2xlIGRpZ2l0IGQuICBSZXNwZWN0cyB0aGUKKyAgc2lnbiBvZiBpdHMgc3VidHJhaGVuZCAoc2luZ2xlIGRpZ2l0cyBhcmUgdW5zaWduZWQgYW55d2F5KS4KKyAqLworCittcF9lcnIgbXBfc3ViX2QobXBfaW50ICphLCBtcF9kaWdpdCBkLCBtcF9pbnQgKmIpCit7CisgIG1wX2VyciAgIHJlczsKKworICBBUkdDSEsoYSAhPSBOVUxMICYmIGIgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZigocmVzID0gbXBfY29weShhLCBiKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworCisgIGlmKFNJR04oYikgPT0gTVBfTkVHKSB7CisgICAgaWYoKHJlcyA9IHNfbXBfYWRkX2QoYiwgZCkpICE9IE1QX09LQVkpCisgICAgICByZXR1cm4gcmVzOworCisgIH0gZWxzZSBpZihzX21wX2NtcF9kKGIsIGQpID49IDApIHsKKyAgICBpZigocmVzID0gc19tcF9zdWJfZChiLCBkKSkgIT0gTVBfT0tBWSkKKyAgICAgIHJldHVybiByZXM7CisKKyAgfSBlbHNlIHsKKyAgICBtcF9uZWcoYiwgYik7CisKKyAgICBESUdJVChiLCAwKSA9IGQgLSBESUdJVChiLCAwKTsKKyAgICBTSUdOKGIpID0gTVBfTkVHOworICB9CisKKyAgaWYoc19tcF9jbXBfZChiLCAwKSA9PSAwKQorICAgIFNJR04oYikgPSBNUF9aUE9TOworCisgIHJldHVybiBNUF9PS0FZOworCit9IC8qIGVuZCBtcF9zdWJfZCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfbXVsX2QoYSwgZCwgYikgKi8KKworLyoKKyAgbXBfbXVsX2QoYSwgZCwgYikKKworICBDb21wdXRlIHRoZSBwcm9kdWN0IGIgPSBhICogZCwgZm9yIGEgc2luZ2xlIGRpZ2l0IGQuICBSZXNwZWN0cyB0aGUgc2lnbgorICBvZiBpdHMgbXVsdGlwbGljYW5kIChzaW5nbGUgZGlnaXRzIGFyZSB1bnNpZ25lZCBhbnl3YXkpCisgKi8KKworbXBfZXJyIG1wX211bF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgZCwgbXBfaW50ICpiKQoreworICBtcF9lcnIgIHJlczsKKworICBBUkdDSEsoYSAhPSBOVUxMICYmIGIgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZihkID09IDApIHsKKyAgICBtcF96ZXJvKGIpOworICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgaWYoKHJlcyA9IG1wX2NvcHkoYSwgYikpICE9IE1QX09LQVkpCisgICAgcmV0dXJuIHJlczsKKworICByZXMgPSBzX21wX211bF9kKGIsIGQpOworCisgIHJldHVybiByZXM7CisKK30gLyogZW5kIG1wX211bF9kKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9tdWxfMihhLCBjKSAqLworCittcF9lcnIgbXBfbXVsXzIobXBfaW50ICphLCBtcF9pbnQgKmMpCit7CisgIG1wX2VyciAgcmVzOworCisgIEFSR0NISyhhICE9IE5VTEwgJiYgYyAhPSBOVUxMLCBNUF9CQURBUkcpOworCisgIGlmKChyZXMgPSBtcF9jb3B5KGEsIGMpKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisKKyAgcmV0dXJuIHNfbXBfbXVsXzIoYyk7CisKK30gLyogZW5kIG1wX211bF8yKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9kaXZfZChhLCBkLCBxLCByKSAqLworCisvKgorICBtcF9kaXZfZChhLCBkLCBxLCByKQorCisgIENvbXB1dGUgdGhlIHF1b3RpZW50IHEgPSBhIC8gZCBhbmQgcmVtYWluZGVyIHIgPSBhIG1vZCBkLCBmb3IgYQorICBzaW5nbGUgZGlnaXQgZC4gIFJlc3BlY3RzIHRoZSBzaWduIG9mIGl0cyBkaXZpc29yIChzaW5nbGUgZGlnaXRzIGFyZQorICB1bnNpZ25lZCBhbnl3YXkpLgorICovCisKK21wX2VyciBtcF9kaXZfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGQsIG1wX2ludCAqcSwgbXBfZGlnaXQgKnIpCit7CisgIG1wX2VyciAgIHJlczsKKyAgbXBfZGlnaXQgcmVtOworICBpbnQgICAgICBwb3c7CisKKyAgQVJHQ0hLKGEgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZihkID09IDApCisgICAgcmV0dXJuIE1QX1JBTkdFOworCisgIC8qIFNob3J0Y3V0IGZvciBwb3dlcnMgb2YgdHdvIC4uLiAqLworICBpZigocG93ID0gc19tcF9pc3BvdzJkKGQpKSA+PSAwKSB7CisgICAgbXBfZGlnaXQgIG1hc2s7CisKKyAgICBtYXNrID0gKDEgPDwgcG93KSAtIDE7CisgICAgcmVtID0gRElHSVQoYSwgMCkgJiBtYXNrOworCisgICAgaWYocSkgeworICAgICAgbXBfY29weShhLCBxKTsKKyAgICAgIHNfbXBfZGl2XzJkKHEsIHBvdyk7CisgICAgfQorCisgICAgaWYocikKKyAgICAgICpyID0gcmVtOworCisgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICAvKgorICAgIElmIHRoZSBxdW90aWVudCBpcyBhY3R1YWxseSBnb2luZyB0byBiZSByZXR1cm5lZCwgd2UnbGwgdHJ5IHRvCisgICAgYXZvaWQgaGl0dGluZyB0aGUgbWVtb3J5IGFsbG9jYXRvciBieSBjb3B5aW5nIHRoZSBkaXZpZGVuZCBpbnRvIGl0CisgICAgYW5kIGRvaW5nIHRoZSBkaXZpc2lvbiB0aGVyZS4gIFRoaXMgY2FuJ3QgYmUgYW55IF93b3JzZV8gdGhhbgorICAgIGFsd2F5cyBjb3B5aW5nLCBhbmQgd2lsbCBzb21ldGltZXMgYmUgYmV0dGVyIChzaW5jZSBpdCB3b24ndCBtYWtlCisgICAgYW5vdGhlciBjb3B5KQorCisgICAgSWYgaXQncyBub3QgZ29pbmcgdG8gYmUgcmV0dXJuZWQsIHdlIG5lZWQgdG8gYWxsb2NhdGUgYSB0ZW1wb3JhcnkKKyAgICB0byBob2xkIHRoZSBxdW90aWVudCwgd2hpY2ggd2lsbCBqdXN0IGJlIGRpc2NhcmRlZC4KKyAgICovCisgIGlmKHEpIHsKKyAgICBpZigocmVzID0gbXBfY29weShhLCBxKSkgIT0gTVBfT0tBWSkKKyAgICAgIHJldHVybiByZXM7CisKKyAgICByZXMgPSBzX21wX2Rpdl9kKHEsIGQsICZyZW0pOworICAgIGlmKHNfbXBfY21wX2QocSwgMCkgPT0gTVBfRVEpCisgICAgICBTSUdOKHEpID0gTVBfWlBPUzsKKworICB9IGVsc2UgeworICAgIG1wX2ludCAgcXA7CisKKyAgICBpZigocmVzID0gbXBfaW5pdF9jb3B5KCZxcCwgYSkpICE9IE1QX09LQVkpCisgICAgICByZXR1cm4gcmVzOworCisgICAgcmVzID0gc19tcF9kaXZfZCgmcXAsIGQsICZyZW0pOworICAgIGlmKHNfbXBfY21wX2QoJnFwLCAwKSA9PSAwKQorICAgICAgU0lHTigmcXApID0gTVBfWlBPUzsKKworICAgIG1wX2NsZWFyKCZxcCk7CisgIH0KKworICBpZihyKQorICAgICpyID0gcmVtOworCisgIHJldHVybiByZXM7CisKK30gLyogZW5kIG1wX2Rpdl9kKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9kaXZfMihhLCBjKSAqLworCisvKgorICBtcF9kaXZfMihhLCBjKQorCisgIENvbXB1dGUgYyA9IGEgLyAyLCBkaXNyZWdhcmRpbmcgdGhlIHJlbWFpbmRlci4KKyAqLworCittcF9lcnIgbXBfZGl2XzIobXBfaW50ICphLCBtcF9pbnQgKmMpCit7CisgIG1wX2VyciAgcmVzOworCisgIEFSR0NISyhhICE9IE5VTEwgJiYgYyAhPSBOVUxMLCBNUF9CQURBUkcpOworCisgIGlmKChyZXMgPSBtcF9jb3B5KGEsIGMpKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisKKyAgc19tcF9kaXZfMihjKTsKKworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgbXBfZGl2XzIoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IG1wX2V4cHRfZChhLCBkLCBiKSAqLworCittcF9lcnIgbXBfZXhwdF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgZCwgbXBfaW50ICpjKQoreworICBtcF9pbnQgICBzLCB4OworICBtcF9lcnIgICByZXM7CisKKyAgQVJHQ0hLKGEgIT0gTlVMTCAmJiBjICE9IE5VTEwsIE1QX0JBREFSRyk7CisKKyAgaWYoKHJlcyA9IG1wX2luaXQoJnMpKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisgIGlmKChyZXMgPSBtcF9pbml0X2NvcHkoJngsIGEpKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDsKKworICBESUdJVCgmcywgMCkgPSAxOworCisgIHdoaWxlKGQgIT0gMCkgeworICAgIGlmKGQgJiAxKSB7CisgICAgICBpZigocmVzID0gc19tcF9tdWwoJnMsICZ4KSkgIT0gTVBfT0tBWSkKKwlnb3RvIENMRUFOVVA7CisgICAgfQorCisgICAgZCA+Pj0gMTsKKworICAgIGlmKChyZXMgPSBzX21wX3NxcigmeCkpICE9IE1QX09LQVkpCisgICAgICBnb3RvIENMRUFOVVA7CisgIH0KKworICBzX21wX2V4Y2goJnMsIGMpOworCitDTEVBTlVQOgorICBtcF9jbGVhcigmeCk7CitYOgorICBtcF9jbGVhcigmcyk7CisKKyAgcmV0dXJuIHJlczsKKworfSAvKiBlbmQgbXBfZXhwdF9kKCkgKi8KKworLyogfX19ICovCisKKy8qIH19fSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiB7e3sgRnVsbCBhcml0aG1ldGljICovCisKKy8qIHt7eyBtcF9hYnMoYSwgYikgKi8KKworLyoKKyAgbXBfYWJzKGEsIGIpCisKKyAgQ29tcHV0ZSBiID0gfGF8LiAgJ2EnIGFuZCAnYicgbWF5IGJlIGlkZW50aWNhbC4KKyAqLworCittcF9lcnIgbXBfYWJzKG1wX2ludCAqYSwgbXBfaW50ICpiKQoreworICBtcF9lcnIgICByZXM7CisKKyAgQVJHQ0hLKGEgIT0gTlVMTCAmJiBiICE9IE5VTEwsIE1QX0JBREFSRyk7CisKKyAgaWYoKHJlcyA9IG1wX2NvcHkoYSwgYikpICE9IE1QX09LQVkpCisgICAgcmV0dXJuIHJlczsKKworICBTSUdOKGIpID0gTVBfWlBPUzsKKworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgbXBfYWJzKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9uZWcoYSwgYikgKi8KKworLyoKKyAgbXBfbmVnKGEsIGIpCisKKyAgQ29tcHV0ZSBiID0gLWEuICAnYScgYW5kICdiJyBtYXkgYmUgaWRlbnRpY2FsLgorICovCisKK21wX2VyciBtcF9uZWcobXBfaW50ICphLCBtcF9pbnQgKmIpCit7CisgIG1wX2VyciAgIHJlczsKKworICBBUkdDSEsoYSAhPSBOVUxMICYmIGIgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZigocmVzID0gbXBfY29weShhLCBiKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworCisgIGlmKHNfbXBfY21wX2QoYiwgMCkgPT0gTVBfRVEpIAorICAgIFNJR04oYikgPSBNUF9aUE9TOworICBlbHNlIAorICAgIFNJR04oYikgPSAoU0lHTihiKSA9PSBNUF9ORUcpID8gTVBfWlBPUyA6IE1QX05FRzsKKworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgbXBfbmVnKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9hZGQoYSwgYiwgYykgKi8KKworLyoKKyAgbXBfYWRkKGEsIGIsIGMpCisKKyAgQ29tcHV0ZSBjID0gYSArIGIuICBBbGwgcGFyYW1ldGVycyBtYXkgYmUgaWRlbnRpY2FsLgorICovCisKK21wX2VyciBtcF9hZGQobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYykKK3sKKyAgbXBfZXJyICByZXM7CisgIGludCAgICAgY21wOworCisgIEFSR0NISyhhICE9IE5VTEwgJiYgYiAhPSBOVUxMICYmIGMgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZihTSUdOKGEpID09IFNJR04oYikpIHsgLyogc2FtZSBzaWduOiAgYWRkIHZhbHVlcywga2VlcCBzaWduICovCisKKyAgICAvKiBDb21tdXRhdGl2aXR5IG9mIGFkZGl0aW9uIGxldHMgdXMgZG8gdGhpcyBpbiBlaXRoZXIgb3JkZXIsCisgICAgICAgc28gd2UgYXZvaWQgaGF2aW5nIHRvIHVzZSBhIHRlbXBvcmFyeSBldmVuIGlmIHRoZSByZXN1bHQgCisgICAgICAgaXMgc3VwcG9zZWQgdG8gcmVwbGFjZSB0aGUgb3V0cHV0CisgICAgICovCisgICAgaWYoYyA9PSBiKSB7CisgICAgICBpZigocmVzID0gc19tcF9hZGQoYywgYSkpICE9IE1QX09LQVkpCisJcmV0dXJuIHJlczsKKyAgICB9IGVsc2UgeworICAgICAgaWYoYyAhPSBhICYmIChyZXMgPSBtcF9jb3B5KGEsIGMpKSAhPSBNUF9PS0FZKQorCXJldHVybiByZXM7CisKKyAgICAgIGlmKChyZXMgPSBzX21wX2FkZChjLCBiKSkgIT0gTVBfT0tBWSkgCisJcmV0dXJuIHJlczsKKyAgICB9CisKKyAgfSBlbHNlIGlmKChjbXAgPSBzX21wX2NtcChhLCBiKSkgPiAwKSB7ICAvKiBkaWZmZXJlbnQgc2lnbjogYSA+IGIgICAqLworCisgICAgLyogSWYgdGhlIG91dHB1dCBpcyBnb2luZyB0byBiZSBjbG9iYmVyZWQsIHdlIHdpbGwgdXNlIGEgdGVtcG9yYXJ5CisgICAgICAgdmFyaWFibGU7IG90aGVyd2lzZSwgd2UnbGwgZG8gaXQgd2l0aG91dCB0b3VjaGluZyB0aGUgbWVtb3J5IAorICAgICAgIGFsbG9jYXRvciBhdCBhbGwsIGlmIHBvc3NpYmxlCisgICAgICovCisgICAgaWYoYyA9PSBiKSB7CisgICAgICBtcF9pbnQgIHRtcDsKKworICAgICAgaWYoKHJlcyA9IG1wX2luaXRfY29weSgmdG1wLCBhKSkgIT0gTVBfT0tBWSkKKwlyZXR1cm4gcmVzOworICAgICAgaWYoKHJlcyA9IHNfbXBfc3ViKCZ0bXAsIGIpKSAhPSBNUF9PS0FZKSB7CisJbXBfY2xlYXIoJnRtcCk7CisJcmV0dXJuIHJlczsKKyAgICAgIH0KKworICAgICAgc19tcF9leGNoKCZ0bXAsIGMpOworICAgICAgbXBfY2xlYXIoJnRtcCk7CisKKyAgICB9IGVsc2UgeworCisgICAgICBpZihjICE9IGEgJiYgKHJlcyA9IG1wX2NvcHkoYSwgYykpICE9IE1QX09LQVkpCisJcmV0dXJuIHJlczsKKyAgICAgIGlmKChyZXMgPSBzX21wX3N1YihjLCBiKSkgIT0gTVBfT0tBWSkKKwlyZXR1cm4gcmVzOworCisgICAgfQorCisgIH0gZWxzZSBpZihjbXAgPT0gMCkgeyAgICAgICAgICAgICAvKiBkaWZmZXJlbnQgc2lnbiwgYSA9PSBiICAgKi8KKworICAgIG1wX3plcm8oYyk7CisgICAgcmV0dXJuIE1QX09LQVk7CisKKyAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpZmZlcmVudCBzaWduOiBhIDwgYiAgICAqLworCisgICAgLyogU2VlIGFib3ZlLi4uICovCisgICAgaWYoYyA9PSBhKSB7CisgICAgICBtcF9pbnQgIHRtcDsKKworICAgICAgaWYoKHJlcyA9IG1wX2luaXRfY29weSgmdG1wLCBiKSkgIT0gTVBfT0tBWSkKKwlyZXR1cm4gcmVzOworICAgICAgaWYoKHJlcyA9IHNfbXBfc3ViKCZ0bXAsIGEpKSAhPSBNUF9PS0FZKSB7CisJbXBfY2xlYXIoJnRtcCk7CisJcmV0dXJuIHJlczsKKyAgICAgIH0KKworICAgICAgc19tcF9leGNoKCZ0bXAsIGMpOworICAgICAgbXBfY2xlYXIoJnRtcCk7CisKKyAgICB9IGVsc2UgeworCisgICAgICBpZihjICE9IGIgJiYgKHJlcyA9IG1wX2NvcHkoYiwgYykpICE9IE1QX09LQVkpCisJcmV0dXJuIHJlczsKKyAgICAgIGlmKChyZXMgPSBzX21wX3N1YihjLCBhKSkgIT0gTVBfT0tBWSkKKwlyZXR1cm4gcmVzOworCisgICAgfQorICB9CisKKyAgaWYoVVNFRChjKSA9PSAxICYmIERJR0lUKGMsIDApID09IDApCisgICAgU0lHTihjKSA9IE1QX1pQT1M7CisKKyAgcmV0dXJuIE1QX09LQVk7CisKK30gLyogZW5kIG1wX2FkZCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfc3ViKGEsIGIsIGMpICovCisKKy8qCisgIG1wX3N1YihhLCBiLCBjKQorCisgIENvbXB1dGUgYyA9IGEgLSBiLiAgQWxsIHBhcmFtZXRlcnMgbWF5IGJlIGlkZW50aWNhbC4KKyAqLworCittcF9lcnIgbXBfc3ViKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpCit7CisgIG1wX2VyciAgcmVzOworICBpbnQgICAgIGNtcDsKKworICBBUkdDSEsoYSAhPSBOVUxMICYmIGIgIT0gTlVMTCAmJiBjICE9IE5VTEwsIE1QX0JBREFSRyk7CisKKyAgaWYoU0lHTihhKSAhPSBTSUdOKGIpKSB7CisgICAgaWYoYyA9PSBhKSB7CisgICAgICBpZigocmVzID0gc19tcF9hZGQoYywgYikpICE9IE1QX09LQVkpCisJcmV0dXJuIHJlczsKKyAgICB9IGVsc2UgeworICAgICAgaWYoYyAhPSBiICYmICgocmVzID0gbXBfY29weShiLCBjKSkgIT0gTVBfT0tBWSkpCisJcmV0dXJuIHJlczsKKyAgICAgIGlmKChyZXMgPSBzX21wX2FkZChjLCBhKSkgIT0gTVBfT0tBWSkKKwlyZXR1cm4gcmVzOworICAgICAgU0lHTihjKSA9IFNJR04oYSk7CisgICAgfQorCisgIH0gZWxzZSBpZigoY21wID0gc19tcF9jbXAoYSwgYikpID4gMCkgeyAvKiBTYW1lIHNpZ24sIGEgPiBiICovCisgICAgaWYoYyA9PSBiKSB7CisgICAgICBtcF9pbnQgIHRtcDsKKworICAgICAgaWYoKHJlcyA9IG1wX2luaXRfY29weSgmdG1wLCBhKSkgIT0gTVBfT0tBWSkKKwlyZXR1cm4gcmVzOworICAgICAgaWYoKHJlcyA9IHNfbXBfc3ViKCZ0bXAsIGIpKSAhPSBNUF9PS0FZKSB7CisJbXBfY2xlYXIoJnRtcCk7CisJcmV0dXJuIHJlczsKKyAgICAgIH0KKyAgICAgIHNfbXBfZXhjaCgmdG1wLCBjKTsKKyAgICAgIG1wX2NsZWFyKCZ0bXApOworCisgICAgfSBlbHNlIHsKKyAgICAgIGlmKGMgIT0gYSAmJiAoKHJlcyA9IG1wX2NvcHkoYSwgYykpICE9IE1QX09LQVkpKQorCXJldHVybiByZXM7CisKKyAgICAgIGlmKChyZXMgPSBzX21wX3N1YihjLCBiKSkgIT0gTVBfT0tBWSkKKwlyZXR1cm4gcmVzOworICAgIH0KKworICB9IGVsc2UgaWYoY21wID09IDApIHsgIC8qIFNhbWUgc2lnbiwgZXF1YWwgbWFnbml0dWRlICovCisgICAgbXBfemVybyhjKTsKKyAgICByZXR1cm4gTVBfT0tBWTsKKworICB9IGVsc2UgeyAgICAgICAgICAgICAgIC8qIFNhbWUgc2lnbiwgYiA+IGEgKi8KKyAgICBpZihjID09IGEpIHsKKyAgICAgIG1wX2ludCAgdG1wOworCisgICAgICBpZigocmVzID0gbXBfaW5pdF9jb3B5KCZ0bXAsIGIpKSAhPSBNUF9PS0FZKQorCXJldHVybiByZXM7CisKKyAgICAgIGlmKChyZXMgPSBzX21wX3N1YigmdG1wLCBhKSkgIT0gTVBfT0tBWSkgeworCW1wX2NsZWFyKCZ0bXApOworCXJldHVybiByZXM7CisgICAgICB9CisgICAgICBzX21wX2V4Y2goJnRtcCwgYyk7CisgICAgICBtcF9jbGVhcigmdG1wKTsKKworICAgIH0gZWxzZSB7CisgICAgICBpZihjICE9IGIgJiYgKChyZXMgPSBtcF9jb3B5KGIsIGMpKSAhPSBNUF9PS0FZKSkgCisJcmV0dXJuIHJlczsKKworICAgICAgaWYoKHJlcyA9IHNfbXBfc3ViKGMsIGEpKSAhPSBNUF9PS0FZKQorCXJldHVybiByZXM7CisgICAgfQorCisgICAgU0lHTihjKSA9ICFTSUdOKGIpOworICB9CisKKyAgaWYoVVNFRChjKSA9PSAxICYmIERJR0lUKGMsIDApID09IDApCisgICAgU0lHTihjKSA9IE1QX1pQT1M7CisKKyAgcmV0dXJuIE1QX09LQVk7CisKK30gLyogZW5kIG1wX3N1YigpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfbXVsKGEsIGIsIGMpICovCisKKy8qCisgIG1wX211bChhLCBiLCBjKQorCisgIENvbXB1dGUgYyA9IGEgKiBiLiAgQWxsIHBhcmFtZXRlcnMgbWF5IGJlIGlkZW50aWNhbC4KKyAqLworCittcF9lcnIgbXBfbXVsKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpCit7CisgIG1wX2VyciAgIHJlczsKKyAgbXBfc2lnbiAgc2duOworCisgIEFSR0NISyhhICE9IE5VTEwgJiYgYiAhPSBOVUxMICYmIGMgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBzZ24gPSAoU0lHTihhKSA9PSBTSUdOKGIpKSA/IE1QX1pQT1MgOiBNUF9ORUc7CisKKyAgaWYoYyA9PSBiKSB7CisgICAgaWYoKHJlcyA9IHNfbXBfbXVsKGMsIGEpKSAhPSBNUF9PS0FZKQorICAgICAgcmV0dXJuIHJlczsKKworICB9IGVsc2UgeworICAgIGlmKChyZXMgPSBtcF9jb3B5KGEsIGMpKSAhPSBNUF9PS0FZKQorICAgICAgcmV0dXJuIHJlczsKKworICAgIGlmKChyZXMgPSBzX21wX211bChjLCBiKSkgIT0gTVBfT0tBWSkKKyAgICAgIHJldHVybiByZXM7CisgIH0KKyAgCisgIGlmKHNnbiA9PSBNUF9aUE9TIHx8IHNfbXBfY21wX2QoYywgMCkgPT0gTVBfRVEpCisgICAgU0lHTihjKSA9IE1QX1pQT1M7CisgIGVsc2UKKyAgICBTSUdOKGMpID0gc2duOworICAKKyAgcmV0dXJuIE1QX09LQVk7CisKK30gLyogZW5kIG1wX211bCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfbXVsXzJkKGEsIGQsIGMpICovCisKKy8qCisgIG1wX211bF8yZChhLCBkLCBjKQorCisgIENvbXB1dGUgYyA9IGEgKiAyXmQuICBhIG1heSBiZSB0aGUgc2FtZSBhcyBjLgorICovCisKK21wX2VyciBtcF9tdWxfMmQobXBfaW50ICphLCBtcF9kaWdpdCBkLCBtcF9pbnQgKmMpCit7CisgIG1wX2VyciAgIHJlczsKKworICBBUkdDSEsoYSAhPSBOVUxMICYmIGMgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZigocmVzID0gbXBfY29weShhLCBjKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworCisgIGlmKGQgPT0gMCkKKyAgICByZXR1cm4gTVBfT0tBWTsKKworICByZXR1cm4gc19tcF9tdWxfMmQoYywgZCk7CisKK30gLyogZW5kIG1wX211bCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfc3FyKGEsIGIpICovCisKKyNpZiBNUF9TUVVBUkUKK21wX2VyciBtcF9zcXIobXBfaW50ICphLCBtcF9pbnQgKmIpCit7CisgIG1wX2VyciAgIHJlczsKKworICBBUkdDSEsoYSAhPSBOVUxMICYmIGIgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZigocmVzID0gbXBfY29weShhLCBiKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworCisgIGlmKChyZXMgPSBzX21wX3NxcihiKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworCisgIFNJR04oYikgPSBNUF9aUE9TOworCisgIHJldHVybiBNUF9PS0FZOworCit9IC8qIGVuZCBtcF9zcXIoKSAqLworI2VuZGlmCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfZGl2KGEsIGIsIHEsIHIpICovCisKKy8qCisgIG1wX2RpdihhLCBiLCBxLCByKQorCisgIENvbXB1dGUgcSA9IGEgLyBiIGFuZCByID0gYSBtb2QgYi4gIElucHV0IHBhcmFtZXRlcnMgbWF5IGJlIHJlLXVzZWQKKyAgYXMgb3V0cHV0IHBhcmFtZXRlcnMuICBJZiBxIG9yIHIgaXMgTlVMTCwgdGhhdCBwb3J0aW9uIG9mIHRoZQorICBjb21wdXRhdGlvbiB3aWxsIGJlIGRpc2NhcmRlZCAoYWx0aG91Z2ggaXQgd2lsbCBzdGlsbCBiZSBjb21wdXRlZCkKKworICBQYXkgbm8gYXR0ZW50aW9uIHRvIHRoZSBoYWNrZXIgYmVoaW5kIHRoZSBjdXJ0YWluLgorICovCisKK21wX2VyciBtcF9kaXYobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqcSwgbXBfaW50ICpyKQoreworICBtcF9lcnIgICByZXM7CisgIG1wX2ludCAgIHF0bXAsIHJ0bXA7CisgIGludCAgICAgIGNtcDsKKworICBBUkdDSEsoYSAhPSBOVUxMICYmIGIgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZihtcF9jbXBfeihiKSA9PSBNUF9FUSkKKyAgICByZXR1cm4gTVBfUkFOR0U7CisKKyAgLyogSWYgYSA8PSBiLCB3ZSBjYW4gY29tcHV0ZSB0aGUgc29sdXRpb24gd2l0aG91dCBkaXZpc2lvbiwgYW5kCisgICAgIGF2b2lkIGFueSBtZW1vcnkgYWxsb2NhdGlvbgorICAgKi8KKyAgaWYoKGNtcCA9IHNfbXBfY21wKGEsIGIpKSA8IDApIHsKKyAgICBpZihyKSB7CisgICAgICBpZigocmVzID0gbXBfY29weShhLCByKSkgIT0gTVBfT0tBWSkKKwlyZXR1cm4gcmVzOworICAgIH0KKworICAgIGlmKHEpIAorICAgICAgbXBfemVybyhxKTsKKworICAgIHJldHVybiBNUF9PS0FZOworCisgIH0gZWxzZSBpZihjbXAgPT0gMCkgeworCisgICAgLyogU2V0IHF1b3RpZW50IHRvIDEsIHdpdGggYXBwcm9wcmlhdGUgc2lnbiAqLworICAgIGlmKHEpIHsKKyAgICAgIGludCBxbmVnID0gKFNJR04oYSkgIT0gU0lHTihiKSk7CisKKyAgICAgIG1wX3NldChxLCAxKTsKKyAgICAgIGlmKHFuZWcpCisJU0lHTihxKSA9IE1QX05FRzsKKyAgICB9CisKKyAgICBpZihyKQorICAgICAgbXBfemVybyhyKTsKKworICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogSWYgd2UgZ2V0IGhlcmUsIGl0IG1lYW5zIHdlIGFjdHVhbGx5IGhhdmUgdG8gZG8gc29tZSBkaXZpc2lvbiAqLworCisgIC8qIFNldCB1cCBzb21lIHRlbXBvcmFyaWVzLi4uICovCisgIGlmKChyZXMgPSBtcF9pbml0X2NvcHkoJnF0bXAsIGEpKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisgIGlmKChyZXMgPSBtcF9pbml0X2NvcHkoJnJ0bXAsIGIpKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gQ0xFQU5VUDsKKworICBpZigocmVzID0gc19tcF9kaXYoJnF0bXAsICZydG1wKSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIENMRUFOVVA7CisKKyAgLyogQ29tcHV0ZSB0aGUgc2lnbnMgZm9yIHRoZSBvdXRwdXQgICovCisgIFNJR04oJnJ0bXApID0gU0lHTihhKTsgLyogU3IgPSBTYSAgICAgICAgICAgICAgKi8KKyAgaWYoU0lHTihhKSA9PSBTSUdOKGIpKQorICAgIFNJR04oJnF0bXApID0gTVBfWlBPUzsgIC8qIFNxID0gTVBfWlBPUyBpZiBTYSA9IFNiICovCisgIGVsc2UKKyAgICBTSUdOKCZxdG1wKSA9IE1QX05FRzsgICAvKiBTcSA9IE1QX05FRyBpZiBTYSAhPSBTYiAqLworCisgIGlmKHNfbXBfY21wX2QoJnF0bXAsIDApID09IE1QX0VRKQorICAgIFNJR04oJnF0bXApID0gTVBfWlBPUzsKKyAgaWYoc19tcF9jbXBfZCgmcnRtcCwgMCkgPT0gTVBfRVEpCisgICAgU0lHTigmcnRtcCkgPSBNUF9aUE9TOworCisgIC8qIENvcHkgb3V0cHV0LCBpZiBpdCBpcyBuZWVkZWQgICAgICAqLworICBpZihxKSAKKyAgICBzX21wX2V4Y2goJnF0bXAsIHEpOworCisgIGlmKHIpIAorICAgIHNfbXBfZXhjaCgmcnRtcCwgcik7CisKK0NMRUFOVVA6CisgIG1wX2NsZWFyKCZydG1wKTsKKyAgbXBfY2xlYXIoJnF0bXApOworCisgIHJldHVybiByZXM7CisKK30gLyogZW5kIG1wX2RpdigpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfZGl2XzJkKGEsIGQsIHEsIHIpICovCisKK21wX2VyciBtcF9kaXZfMmQobXBfaW50ICphLCBtcF9kaWdpdCBkLCBtcF9pbnQgKnEsIG1wX2ludCAqcikKK3sKKyAgbXBfZXJyICByZXM7CisKKyAgQVJHQ0hLKGEgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZihxKSB7CisgICAgaWYoKHJlcyA9IG1wX2NvcHkoYSwgcSkpICE9IE1QX09LQVkpCisgICAgICByZXR1cm4gcmVzOworCisgICAgc19tcF9kaXZfMmQocSwgZCk7CisgIH0KKworICBpZihyKSB7CisgICAgaWYoKHJlcyA9IG1wX2NvcHkoYSwgcikpICE9IE1QX09LQVkpCisgICAgICByZXR1cm4gcmVzOworCisgICAgc19tcF9tb2RfMmQociwgZCk7CisgIH0KKworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgbXBfZGl2XzJkKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9leHB0KGEsIGIsIGMpICovCisKKy8qCisgIG1wX2V4cHQoYSwgYiwgYykKKworICBDb21wdXRlIGMgPSBhICoqIGIsIHRoYXQgaXMsIHJhaXNlIGEgdG8gdGhlIGIgcG93ZXIuICBVc2VzIGEKKyAgc3RhbmRhcmQgaXRlcmF0aXZlIHNxdWFyZS1hbmQtbXVsdGlwbHkgdGVjaG5pcXVlLgorICovCisKK21wX2VyciBtcF9leHB0KG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpCit7CisgIG1wX2ludCAgIHMsIHg7CisgIG1wX2VyciAgIHJlczsKKyAgbXBfZGlnaXQgZDsKKyAgaW50ICAgICAgZGlnLCBiaXQ7CisKKyAgQVJHQ0hLKGEgIT0gTlVMTCAmJiBiICE9IE5VTEwgJiYgYyAhPSBOVUxMLCBNUF9CQURBUkcpOworCisgIGlmKG1wX2NtcF96KGIpIDwgMCkKKyAgICByZXR1cm4gTVBfUkFOR0U7CisKKyAgaWYoKHJlcyA9IG1wX2luaXQoJnMpKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisKKyAgbXBfc2V0KCZzLCAxKTsKKworICBpZigocmVzID0gbXBfaW5pdF9jb3B5KCZ4LCBhKSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFg7CisKKyAgLyogTG9vcCBvdmVyIGxvdy1vcmRlciBkaWdpdHMgaW4gYXNjZW5kaW5nIG9yZGVyICovCisgIGZvcihkaWcgPSAwOyBkaWcgPCAoVVNFRChiKSAtIDEpOyBkaWcrKykgeworICAgIGQgPSBESUdJVChiLCBkaWcpOworCisgICAgLyogTG9vcCBvdmVyIGJpdHMgb2YgZWFjaCBub24tbWF4aW1hbCBkaWdpdCAqLworICAgIGZvcihiaXQgPSAwOyBiaXQgPCBESUdJVF9CSVQ7IGJpdCsrKSB7CisgICAgICBpZihkICYgMSkgeworCWlmKChyZXMgPSBzX21wX211bCgmcywgJngpKSAhPSBNUF9PS0FZKSAKKwkgIGdvdG8gQ0xFQU5VUDsKKyAgICAgIH0KKworICAgICAgZCA+Pj0gMTsKKyAgICAgIAorICAgICAgaWYoKHJlcyA9IHNfbXBfc3FyKCZ4KSkgIT0gTVBfT0tBWSkKKwlnb3RvIENMRUFOVVA7CisgICAgfQorICB9CisKKyAgLyogQ29uc2lkZXIgbm93IHRoZSBsYXN0IGRpZ2l0Li4uICovCisgIGQgPSBESUdJVChiLCBkaWcpOworCisgIHdoaWxlKGQpIHsKKyAgICBpZihkICYgMSkgeworICAgICAgaWYoKHJlcyA9IHNfbXBfbXVsKCZzLCAmeCkpICE9IE1QX09LQVkpCisJZ290byBDTEVBTlVQOworICAgIH0KKworICAgIGQgPj49IDE7CisKKyAgICBpZigocmVzID0gc19tcF9zcXIoJngpKSAhPSBNUF9PS0FZKQorICAgICAgZ290byBDTEVBTlVQOworICB9CisgIAorICBpZihtcF9pc2V2ZW4oYikpCisgICAgU0lHTigmcykgPSBTSUdOKGEpOworCisgIHJlcyA9IG1wX2NvcHkoJnMsIGMpOworCitDTEVBTlVQOgorICBtcF9jbGVhcigmeCk7CitYOgorICBtcF9jbGVhcigmcyk7CisKKyAgcmV0dXJuIHJlczsKKworfSAvKiBlbmQgbXBfZXhwdCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfMmV4cHQoYSwgaykgKi8KKworLyogQ29tcHV0ZSBhID0gMl5rICovCisKK21wX2VyciBtcF8yZXhwdChtcF9pbnQgKmEsIG1wX2RpZ2l0IGspCit7CisgIEFSR0NISyhhICE9IE5VTEwsIE1QX0JBREFSRyk7CisKKyAgcmV0dXJuIHNfbXBfMmV4cHQoYSwgayk7CisKK30gLyogZW5kIG1wXzJleHB0KCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9tb2QoYSwgbSwgYykgKi8KKworLyoKKyAgbXBfbW9kKGEsIG0sIGMpCisKKyAgQ29tcHV0ZSBjID0gYSAobW9kIG0pLiAgUmVzdWx0IHdpbGwgYWx3YXlzIGJlIDAgPD0gYyA8IG0uCisgKi8KKworbXBfZXJyIG1wX21vZChtcF9pbnQgKmEsIG1wX2ludCAqbSwgbXBfaW50ICpjKQoreworICBtcF9lcnIgIHJlczsKKyAgaW50ICAgICBtYWc7CisKKyAgQVJHQ0hLKGEgIT0gTlVMTCAmJiBtICE9IE5VTEwgJiYgYyAhPSBOVUxMLCBNUF9CQURBUkcpOworCisgIGlmKFNJR04obSkgPT0gTVBfTkVHKQorICAgIHJldHVybiBNUF9SQU5HRTsKKworICAvKgorICAgICBJZiB8YXwgPiBtLCB3ZSBuZWVkIHRvIGRpdmlkZSB0byBnZXQgdGhlIHJlbWFpbmRlciBhbmQgdGFrZSB0aGUKKyAgICAgYWJzb2x1dGUgdmFsdWUuICAKKworICAgICBJZiB8YXwgPCBtLCB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueSBkaXZpc2lvbiwganVzdCBjb3B5IGFuZCBhZGp1c3QKKyAgICAgdGhlIHNpZ24gKGlmIGEgaXMgbmVnYXRpdmUpLgorCisgICAgIElmIHxhfCA9PSBtLCB3ZSBjYW4gc2ltcGx5IHNldCB0aGUgcmVzdWx0IHRvIHplcm8uCisKKyAgICAgVGhpcyBvcmRlciBpcyBpbnRlbmRlZCB0byBtaW5pbWl6ZSB0aGUgYXZlcmFnZSBwYXRoIGxlbmd0aCBvZiB0aGUKKyAgICAgY29tcGFyaXNvbiBjaGFpbiBvbiBjb21tb24gd29ya2xvYWRzIC0tIHRoZSBtb3N0IGZyZXF1ZW50IGNhc2VzIGFyZQorICAgICB0aGF0IHxhfCAhPSBtLCBzbyB3ZSBkbyB0aG9zZSBmaXJzdC4KKyAgICovCisgIGlmKChtYWcgPSBzX21wX2NtcChhLCBtKSkgPiAwKSB7CisgICAgaWYoKHJlcyA9IG1wX2RpdihhLCBtLCBOVUxMLCBjKSkgIT0gTVBfT0tBWSkKKyAgICAgIHJldHVybiByZXM7CisgICAgCisgICAgaWYoU0lHTihjKSA9PSBNUF9ORUcpIHsKKyAgICAgIGlmKChyZXMgPSBtcF9hZGQoYywgbSwgYykpICE9IE1QX09LQVkpCisJcmV0dXJuIHJlczsKKyAgICB9CisKKyAgfSBlbHNlIGlmKG1hZyA8IDApIHsKKyAgICBpZigocmVzID0gbXBfY29weShhLCBjKSkgIT0gTVBfT0tBWSkKKyAgICAgIHJldHVybiByZXM7CisKKyAgICBpZihtcF9jbXBfeihhKSA8IDApIHsKKyAgICAgIGlmKChyZXMgPSBtcF9hZGQoYywgbSwgYykpICE9IE1QX09LQVkpCisJcmV0dXJuIHJlczsKKworICAgIH0KKyAgICAKKyAgfSBlbHNlIHsKKyAgICBtcF96ZXJvKGMpOworCisgIH0KKworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgbXBfbW9kKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9tb2RfZChhLCBkLCBjKSAqLworCisvKgorICBtcF9tb2RfZChhLCBkLCBjKQorCisgIENvbXB1dGUgYyA9IGEgKG1vZCBkKS4gIFJlc3VsdCB3aWxsIGFsd2F5cyBiZSAwIDw9IGMgPCBkCisgKi8KK21wX2VyciBtcF9tb2RfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGQsIG1wX2RpZ2l0ICpjKQoreworICBtcF9lcnIgICByZXM7CisgIG1wX2RpZ2l0IHJlbTsKKworICBBUkdDSEsoYSAhPSBOVUxMICYmIGMgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZihzX21wX2NtcF9kKGEsIGQpID4gMCkgeworICAgIGlmKChyZXMgPSBtcF9kaXZfZChhLCBkLCBOVUxMLCAmcmVtKSkgIT0gTVBfT0tBWSkKKyAgICAgIHJldHVybiByZXM7CisKKyAgfSBlbHNlIHsKKyAgICBpZihTSUdOKGEpID09IE1QX05FRykKKyAgICAgIHJlbSA9IGQgLSBESUdJVChhLCAwKTsKKyAgICBlbHNlCisgICAgICByZW0gPSBESUdJVChhLCAwKTsKKyAgfQorCisgIGlmKGMpCisgICAgKmMgPSByZW07CisKKyAgcmV0dXJuIE1QX09LQVk7CisKK30gLyogZW5kIG1wX21vZF9kKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9zcXJ0KGEsIGIpICovCisKKy8qCisgIG1wX3NxcnQoYSwgYikKKworICBDb21wdXRlIHRoZSBpbnRlZ2VyIHNxdWFyZSByb290IG9mIGEsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIGIuCisgIFVzZXMgYW4gaW50ZWdlci1hcml0aG1ldGljIHZlcnNpb24gb2YgTmV3dG9uJ3MgaXRlcmF0aXZlIGxpbmVhcgorICBhcHByb3hpbWF0aW9uIHRlY2huaXF1ZSB0byBkZXRlcm1pbmUgdGhpcyB2YWx1ZTsgdGhlIHJlc3VsdCBoYXMgdGhlCisgIGZvbGxvd2luZyB0d28gcHJvcGVydGllczoKKworICAgICBiXjIgPD0gYQorICAgICAoYisxKV4yID49IGEKKworICBJdCBpcyBhIHJhbmdlIGVycm9yIHRvIHBhc3MgYSBuZWdhdGl2ZSB2YWx1ZS4KKyAqLworbXBfZXJyIG1wX3NxcnQobXBfaW50ICphLCBtcF9pbnQgKmIpCit7CisgIG1wX2ludCAgIHgsIHQ7CisgIG1wX2VyciAgIHJlczsKKworICBBUkdDSEsoYSAhPSBOVUxMICYmIGIgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICAvKiBDYW5ub3QgdGFrZSBzcXVhcmUgcm9vdCBvZiBhIG5lZ2F0aXZlIHZhbHVlICovCisgIGlmKFNJR04oYSkgPT0gTVBfTkVHKQorICAgIHJldHVybiBNUF9SQU5HRTsKKworICAvKiBTcGVjaWFsIGNhc2VzIGZvciB6ZXJvIGFuZCBvbmUsIHRyaXZpYWwgICAgICovCisgIGlmKG1wX2NtcF9kKGEsIDApID09IE1QX0VRIHx8IG1wX2NtcF9kKGEsIDEpID09IE1QX0VRKSAKKyAgICByZXR1cm4gbXBfY29weShhLCBiKTsKKyAgICAKKyAgLyogSW5pdGlhbGl6ZSB0aGUgdGVtcG9yYXJpZXMgd2UnbGwgdXNlIGJlbG93ICAqLworICBpZigocmVzID0gbXBfaW5pdF9zaXplKCZ0LCBVU0VEKGEpKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworCisgIC8qIENvbXB1dGUgYW4gaW5pdGlhbCBndWVzcyBmb3IgdGhlIGl0ZXJhdGlvbiBhcyBhIGl0c2VsZiAqLworICBpZigocmVzID0gbXBfaW5pdF9jb3B5KCZ4LCBhKSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFg7CisKK3NfbXBfcnNoZCgmeCwgKFVTRUQoJngpLzIpKzEpOworbXBfYWRkX2QoJngsIDEsICZ4KTsKKworICBmb3IoOzspIHsKKyAgICAvKiB0ID0gKHggKiB4KSAtIGEgKi8KKyAgICBtcF9jb3B5KCZ4LCAmdCk7ICAgICAgLyogY2FuJ3QgZmFpbCwgdCBpcyBiaWcgZW5vdWdoIGZvciBvcmlnaW5hbCB4ICovCisgICAgaWYoKHJlcyA9IG1wX3NxcigmdCwgJnQpKSAhPSBNUF9PS0FZIHx8CisgICAgICAgKHJlcyA9IG1wX3N1YigmdCwgYSwgJnQpKSAhPSBNUF9PS0FZKQorICAgICAgZ290byBDTEVBTlVQOworCisgICAgLyogdCA9IHQgLyAyeCAgICAgICAqLworICAgIHNfbXBfbXVsXzIoJngpOworICAgIGlmKChyZXMgPSBtcF9kaXYoJnQsICZ4LCAmdCwgTlVMTCkpICE9IE1QX09LQVkpCisgICAgICBnb3RvIENMRUFOVVA7CisgICAgc19tcF9kaXZfMigmeCk7CisKKyAgICAvKiBUZXJtaW5hdGUgdGhlIGxvb3AsIGlmIHRoZSBxdW90aWVudCBpcyB6ZXJvICovCisgICAgaWYobXBfY21wX3ooJnQpID09IE1QX0VRKQorICAgICAgYnJlYWs7CisKKyAgICAvKiB4ID0geCAtIHQgICAgICAgKi8KKyAgICBpZigocmVzID0gbXBfc3ViKCZ4LCAmdCwgJngpKSAhPSBNUF9PS0FZKQorICAgICAgZ290byBDTEVBTlVQOworCisgIH0KKworICAvKiBDb3B5IHJlc3VsdCB0byBvdXRwdXQgcGFyYW1ldGVyICovCisgIG1wX3N1Yl9kKCZ4LCAxLCAmeCk7CisgIHNfbXBfZXhjaCgmeCwgYik7CisKKyBDTEVBTlVQOgorICBtcF9jbGVhcigmeCk7CisgWDoKKyAgbXBfY2xlYXIoJnQpOyAKKworICByZXR1cm4gcmVzOworCit9IC8qIGVuZCBtcF9zcXJ0KCkgKi8KKworLyogfX19ICovCisKKy8qIH19fSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiB7e3sgTW9kdWxhciBhcml0aG1ldGljICovCisKKyNpZiBNUF9NT0RBUklUSAorLyoge3t7IG1wX2FkZG1vZChhLCBiLCBtLCBjKSAqLworCisvKgorICBtcF9hZGRtb2QoYSwgYiwgbSwgYykKKworICBDb21wdXRlIGMgPSAoYSArIGIpIG1vZCBtCisgKi8KKworbXBfZXJyIG1wX2FkZG1vZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICptLCBtcF9pbnQgKmMpCit7CisgIG1wX2VyciAgcmVzOworCisgIEFSR0NISyhhICE9IE5VTEwgJiYgYiAhPSBOVUxMICYmIG0gIT0gTlVMTCAmJiBjICE9IE5VTEwsIE1QX0JBREFSRyk7CisKKyAgaWYoKHJlcyA9IG1wX2FkZChhLCBiLCBjKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworICBpZigocmVzID0gbXBfbW9kKGMsIG0sIGMpKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisKKyAgcmV0dXJuIE1QX09LQVk7CisKK30KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9zdWJtb2QoYSwgYiwgbSwgYykgKi8KKworLyoKKyAgbXBfc3VibW9kKGEsIGIsIG0sIGMpCisKKyAgQ29tcHV0ZSBjID0gKGEgLSBiKSBtb2QgbQorICovCisKK21wX2VyciBtcF9zdWJtb2QobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqbSwgbXBfaW50ICpjKQoreworICBtcF9lcnIgIHJlczsKKworICBBUkdDSEsoYSAhPSBOVUxMICYmIGIgIT0gTlVMTCAmJiBtICE9IE5VTEwgJiYgYyAhPSBOVUxMLCBNUF9CQURBUkcpOworCisgIGlmKChyZXMgPSBtcF9zdWIoYSwgYiwgYykpICE9IE1QX09LQVkpCisgICAgcmV0dXJuIHJlczsKKyAgaWYoKHJlcyA9IG1wX21vZChjLCBtLCBjKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworCisgIHJldHVybiBNUF9PS0FZOworCit9CisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfbXVsbW9kKGEsIGIsIG0sIGMpICovCisKKy8qCisgIG1wX211bG1vZChhLCBiLCBtLCBjKQorCisgIENvbXB1dGUgYyA9IChhICogYikgbW9kIG0KKyAqLworCittcF9lcnIgbXBfbXVsbW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKm0sIG1wX2ludCAqYykKK3sKKyAgbXBfZXJyICByZXM7CisKKyAgQVJHQ0hLKGEgIT0gTlVMTCAmJiBiICE9IE5VTEwgJiYgbSAhPSBOVUxMICYmIGMgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZigocmVzID0gbXBfbXVsKGEsIGIsIGMpKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisgIGlmKChyZXMgPSBtcF9tb2QoYywgbSwgYykpICE9IE1QX09LQVkpCisgICAgcmV0dXJuIHJlczsKKworICByZXR1cm4gTVBfT0tBWTsKKworfQorCisvKiB9fX0gKi8KKworLyoge3t7IG1wX3Nxcm1vZChhLCBtLCBjKSAqLworCisjaWYgTVBfU1FVQVJFCittcF9lcnIgbXBfc3FybW9kKG1wX2ludCAqYSwgbXBfaW50ICptLCBtcF9pbnQgKmMpCit7CisgIG1wX2VyciAgcmVzOworCisgIEFSR0NISyhhICE9IE5VTEwgJiYgbSAhPSBOVUxMICYmIGMgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZigocmVzID0gbXBfc3FyKGEsIGMpKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisgIGlmKChyZXMgPSBtcF9tb2QoYywgbSwgYykpICE9IE1QX09LQVkpCisgICAgcmV0dXJuIHJlczsKKworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgbXBfc3FybW9kKCkgKi8KKyNlbmRpZgorCisvKiB9fX0gKi8KKworLyoge3t7IG1wX2V4cHRtb2QoYSwgYiwgbSwgYykgKi8KKworLyoKKyAgbXBfZXhwdG1vZChhLCBiLCBtLCBjKQorCisgIENvbXB1dGUgYyA9IChhICoqIGIpIG1vZCBtLiAgVXNlcyBhIHN0YW5kYXJkIHNxdWFyZS1hbmQtbXVsdGlwbHkKKyAgbWV0aG9kIHdpdGggbW9kdWxhciByZWR1Y3Rpb25zIGF0IGVhY2ggc3RlcC4gKFRoaXMgaXMgYmFzaWNhbGx5IHRoZQorICBzYW1lIGNvZGUgYXMgbXBfZXhwdCgpLCBleGNlcHQgZm9yIHRoZSBhZGRpdGlvbiBvZiB0aGUgcmVkdWN0aW9ucykKKyAgCisgIFRoZSBtb2R1bGFyIHJlZHVjdGlvbnMgYXJlIGRvbmUgdXNpbmcgQmFycmV0dCdzIGFsZ29yaXRobSAoc2VlCisgIHNfbXBfcmVkdWNlKCkgYmVsb3cgZm9yIGRldGFpbHMpCisgKi8KKworbXBfZXJyIG1wX2V4cHRtb2QobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqbSwgbXBfaW50ICpjKQoreworICBtcF9pbnQgICBzLCB4LCBtdTsKKyAgbXBfZXJyICAgcmVzOworICBtcF9kaWdpdCBkLCAqZGIgPSBESUdJVFMoYik7CisgIG1wX3NpemUgIHViID0gVVNFRChiKTsKKyAgaW50ICAgICAgZGlnLCBiaXQ7CisKKyAgQVJHQ0hLKGEgIT0gTlVMTCAmJiBiICE9IE5VTEwgJiYgYyAhPSBOVUxMLCBNUF9CQURBUkcpOworCisgIGlmKG1wX2NtcF96KGIpIDwgMCB8fCBtcF9jbXBfeihtKSA8PSAwKQorICAgIHJldHVybiBNUF9SQU5HRTsKKworICBpZigocmVzID0gbXBfaW5pdCgmcykpICE9IE1QX09LQVkpCisgICAgcmV0dXJuIHJlczsKKyAgaWYoKHJlcyA9IG1wX2luaXRfY29weSgmeCwgYSkpICE9IE1QX09LQVkpCisgICAgZ290byBYOworICBpZigocmVzID0gbXBfbW9kKCZ4LCBtLCAmeCkpICE9IE1QX09LQVkgfHwKKyAgICAgKHJlcyA9IG1wX2luaXQoJm11KSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIE1VOworCisgIG1wX3NldCgmcywgMSk7CisKKyAgLyogbXUgPSBiXjJrIC8gbSAqLworICBzX21wX2FkZF9kKCZtdSwgMSk7IAorICBzX21wX2xzaGQoJm11LCAyICogVVNFRChtKSk7CisgIGlmKChyZXMgPSBtcF9kaXYoJm11LCBtLCAmbXUsIE5VTEwpKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gQ0xFQU5VUDsKKworICAvKiBMb29wIG92ZXIgZGlnaXRzIG9mIGIgaW4gYXNjZW5kaW5nIG9yZGVyLCBleGNlcHQgaGlnaGVzdCBvcmRlciAqLworICBmb3IoZGlnID0gMDsgZGlnIDwgKHViIC0gMSk7IGRpZysrKSB7CisgICAgZCA9ICpkYisrOworCisgICAgLyogTG9vcCBvdmVyIHRoZSBiaXRzIG9mIHRoZSBsb3dlci1vcmRlciBkaWdpdHMgKi8KKyAgICBmb3IoYml0ID0gMDsgYml0IDwgRElHSVRfQklUOyBiaXQrKykgeworICAgICAgaWYoZCAmIDEpIHsKKwlpZigocmVzID0gc19tcF9tdWwoJnMsICZ4KSkgIT0gTVBfT0tBWSkKKwkgIGdvdG8gQ0xFQU5VUDsKKwlpZigocmVzID0gc19tcF9yZWR1Y2UoJnMsIG0sICZtdSkpICE9IE1QX09LQVkpCisJICBnb3RvIENMRUFOVVA7CisgICAgICB9CisKKyAgICAgIGQgPj49IDE7CisKKyAgICAgIGlmKChyZXMgPSBzX21wX3NxcigmeCkpICE9IE1QX09LQVkpCisJZ290byBDTEVBTlVQOworICAgICAgaWYoKHJlcyA9IHNfbXBfcmVkdWNlKCZ4LCBtLCAmbXUpKSAhPSBNUF9PS0FZKQorCWdvdG8gQ0xFQU5VUDsKKyAgICB9CisgIH0KKworICAvKiBOb3cgZG8gdGhlIGxhc3QgZGlnaXQuLi4gKi8KKyAgZCA9ICpkYjsKKworICB3aGlsZShkKSB7CisgICAgaWYoZCAmIDEpIHsKKyAgICAgIGlmKChyZXMgPSBzX21wX211bCgmcywgJngpKSAhPSBNUF9PS0FZKQorCWdvdG8gQ0xFQU5VUDsKKyAgICAgIGlmKChyZXMgPSBzX21wX3JlZHVjZSgmcywgbSwgJm11KSkgIT0gTVBfT0tBWSkKKwlnb3RvIENMRUFOVVA7CisgICAgfQorCisgICAgZCA+Pj0gMTsKKworICAgIGlmKChyZXMgPSBzX21wX3NxcigmeCkpICE9IE1QX09LQVkpCisgICAgICBnb3RvIENMRUFOVVA7CisgICAgaWYoKHJlcyA9IHNfbXBfcmVkdWNlKCZ4LCBtLCAmbXUpKSAhPSBNUF9PS0FZKQorICAgICAgZ290byBDTEVBTlVQOworICB9CisKKyAgc19tcF9leGNoKCZzLCBjKTsKKworIENMRUFOVVA6CisgIG1wX2NsZWFyKCZtdSk7CisgTVU6CisgIG1wX2NsZWFyKCZ4KTsKKyBYOgorICBtcF9jbGVhcigmcyk7CisKKyAgcmV0dXJuIHJlczsKKworfSAvKiBlbmQgbXBfZXhwdG1vZCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfZXhwdG1vZF9kKGEsIGQsIG0sIGMpICovCisKK21wX2VyciBtcF9leHB0bW9kX2QobXBfaW50ICphLCBtcF9kaWdpdCBkLCBtcF9pbnQgKm0sIG1wX2ludCAqYykKK3sKKyAgbXBfaW50ICAgcywgeDsKKyAgbXBfZXJyICAgcmVzOworCisgIEFSR0NISyhhICE9IE5VTEwgJiYgYyAhPSBOVUxMLCBNUF9CQURBUkcpOworCisgIGlmKChyZXMgPSBtcF9pbml0KCZzKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworICBpZigocmVzID0gbXBfaW5pdF9jb3B5KCZ4LCBhKSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFg7CisKKyAgbXBfc2V0KCZzLCAxKTsKKworICB3aGlsZShkICE9IDApIHsKKyAgICBpZihkICYgMSkgeworICAgICAgaWYoKHJlcyA9IHNfbXBfbXVsKCZzLCAmeCkpICE9IE1QX09LQVkgfHwKKwkgKHJlcyA9IG1wX21vZCgmcywgbSwgJnMpKSAhPSBNUF9PS0FZKQorCWdvdG8gQ0xFQU5VUDsKKyAgICB9CisKKyAgICBkIC89IDI7CisKKyAgICBpZigocmVzID0gc19tcF9zcXIoJngpKSAhPSBNUF9PS0FZIHx8CisgICAgICAgKHJlcyA9IG1wX21vZCgmeCwgbSwgJngpKSAhPSBNUF9PS0FZKQorICAgICAgZ290byBDTEVBTlVQOworICB9CisKKyAgc19tcF9leGNoKCZzLCBjKTsKKworQ0xFQU5VUDoKKyAgbXBfY2xlYXIoJngpOworWDoKKyAgbXBfY2xlYXIoJnMpOworCisgIHJldHVybiByZXM7CisKK30gLyogZW5kIG1wX2V4cHRtb2RfZCgpICovCisKKy8qIH19fSAqLworI2VuZGlmIC8qIGlmIE1QX01PREFSSVRIICovCisKKy8qIH19fSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiB7e3sgQ29tcGFyaXNvbiBmdW5jdGlvbnMgKi8KKworLyoge3t7IG1wX2NtcF96KGEpICovCisKKy8qCisgIG1wX2NtcF96KGEpCisKKyAgQ29tcGFyZSBhIDw9PiAwLiAgUmV0dXJucyA8MCBpZiBhPDAsIDAgaWYgYT0wLCA+MCBpZiBhPjAuCisgKi8KKworaW50ICAgIG1wX2NtcF96KG1wX2ludCAqYSkKK3sKKyAgaWYoU0lHTihhKSA9PSBNUF9ORUcpCisgICAgcmV0dXJuIE1QX0xUOworICBlbHNlIGlmKFVTRUQoYSkgPT0gMSAmJiBESUdJVChhLCAwKSA9PSAwKQorICAgIHJldHVybiBNUF9FUTsKKyAgZWxzZQorICAgIHJldHVybiBNUF9HVDsKKworfSAvKiBlbmQgbXBfY21wX3ooKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IG1wX2NtcF9kKGEsIGQpICovCisKKy8qCisgIG1wX2NtcF9kKGEsIGQpCisKKyAgQ29tcGFyZSBhIDw9PiBkLiAgUmV0dXJucyA8MCBpZiBhPGQsIDAgaWYgYT1kLCA+MCBpZiBhPmQKKyAqLworCitpbnQgICAgbXBfY21wX2QobXBfaW50ICphLCBtcF9kaWdpdCBkKQoreworICBBUkdDSEsoYSAhPSBOVUxMLCBNUF9FUSk7CisKKyAgaWYoU0lHTihhKSA9PSBNUF9ORUcpCisgICAgcmV0dXJuIE1QX0xUOworCisgIHJldHVybiBzX21wX2NtcF9kKGEsIGQpOworCit9IC8qIGVuZCBtcF9jbXBfZCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfY21wKGEsIGIpICovCisKK2ludCAgICBtcF9jbXAobXBfaW50ICphLCBtcF9pbnQgKmIpCit7CisgIEFSR0NISyhhICE9IE5VTEwgJiYgYiAhPSBOVUxMLCBNUF9FUSk7CisKKyAgaWYoU0lHTihhKSA9PSBTSUdOKGIpKSB7CisgICAgaW50ICBtYWc7CisKKyAgICBpZigobWFnID0gc19tcF9jbXAoYSwgYikpID09IE1QX0VRKQorICAgICAgcmV0dXJuIE1QX0VROworCisgICAgaWYoU0lHTihhKSA9PSBNUF9aUE9TKQorICAgICAgcmV0dXJuIG1hZzsKKyAgICBlbHNlCisgICAgICByZXR1cm4gLW1hZzsKKworICB9IGVsc2UgaWYoU0lHTihhKSA9PSBNUF9aUE9TKSB7CisgICAgcmV0dXJuIE1QX0dUOworICB9IGVsc2UgeworICAgIHJldHVybiBNUF9MVDsKKyAgfQorCit9IC8qIGVuZCBtcF9jbXAoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IG1wX2NtcF9tYWcoYSwgYikgKi8KKworLyoKKyAgbXBfY21wX21hZyhhLCBiKQorCisgIENvbXBhcmVzIHxhfCA8PT4gfGJ8LCBhbmQgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSBjb21wYXJpc29uIHJlc3VsdAorICovCisKK2ludCAgICBtcF9jbXBfbWFnKG1wX2ludCAqYSwgbXBfaW50ICpiKQoreworICBBUkdDSEsoYSAhPSBOVUxMICYmIGIgIT0gTlVMTCwgTVBfRVEpOworCisgIHJldHVybiBzX21wX2NtcChhLCBiKTsKKworfSAvKiBlbmQgbXBfY21wX21hZygpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfY21wX2ludChhLCB6KSAqLworCisvKgorICBUaGlzIGp1c3QgY29udmVydHMgeiB0byBhbiBtcF9pbnQsIGFuZCB1c2VzIHRoZSBleGlzdGluZyBjb21wYXJpc29uCisgIHJvdXRpbmVzLiAgVGhpcyBpcyBzb3J0IG9mIGluZWZmaWNpZW50LCBidXQgaXQncyBub3QgY2xlYXIgdG8gbWUgaG93CisgIGZyZXF1ZW50bHkgdGhpcyB3aWwgZ2V0IHVzZWQgYW55d2F5LiAgRm9yIHNtYWxsIHBvc2l0aXZlIGNvbnN0YW50cywKKyAgeW91IGNhbiBhbHdheXMgdXNlIG1wX2NtcF9kKCksIGFuZCBmb3IgemVybywgdGhlcmUgaXMgbXBfY21wX3ooKS4KKyAqLworaW50ICAgIG1wX2NtcF9pbnQobXBfaW50ICphLCBsb25nIHopCit7CisgIG1wX2ludCAgdG1wOworICBpbnQgICAgIG91dDsKKworICBBUkdDSEsoYSAhPSBOVUxMLCBNUF9FUSk7CisgIAorICBtcF9pbml0KCZ0bXApOyBtcF9zZXRfaW50KCZ0bXAsIHopOworICBvdXQgPSBtcF9jbXAoYSwgJnRtcCk7CisgIG1wX2NsZWFyKCZ0bXApOworCisgIHJldHVybiBvdXQ7CisKK30gLyogZW5kIG1wX2NtcF9pbnQoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IG1wX2lzb2RkKGEpICovCisKKy8qCisgIG1wX2lzb2RkKGEpCisKKyAgUmV0dXJucyBhIHRydWUgKG5vbi16ZXJvKSB2YWx1ZSBpZiBhIGlzIG9kZCwgZmFsc2UgKHplcm8pIG90aGVyd2lzZS4KKyAqLworaW50ICAgIG1wX2lzb2RkKG1wX2ludCAqYSkKK3sKKyAgQVJHQ0hLKGEgIT0gTlVMTCwgMCk7CisKKyAgcmV0dXJuIChESUdJVChhLCAwKSAmIDEpOworCit9IC8qIGVuZCBtcF9pc29kZCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfaXNldmVuKGEpICovCisKK2ludCAgICBtcF9pc2V2ZW4obXBfaW50ICphKQoreworICByZXR1cm4gIW1wX2lzb2RkKGEpOworCit9IC8qIGVuZCBtcF9pc2V2ZW4oKSAqLworCisvKiB9fX0gKi8KKworLyogfX19ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHt7eyBOdW1iZXIgdGhlb3JldGljIGZ1bmN0aW9ucyAqLworCisjaWYgTVBfTlVNVEgKKy8qIHt7eyBtcF9nY2QoYSwgYiwgYykgKi8KKworLyoKKyAgTGlrZSB0aGUgb2xkIG1wX2djZCgpIGZ1bmN0aW9uLCBleGNlcHQgY29tcHV0ZXMgdGhlIEdDRCB1c2luZyB0aGUKKyAgYmluYXJ5IGFsZ29yaXRobSBkdWUgdG8gSm9zZWYgU3RlaW4gaW4gMTk2MSAodmlhIEtudXRoKS4KKyAqLworbXBfZXJyIG1wX2djZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKQoreworICBtcF9lcnIgICByZXM7CisgIG1wX2ludCAgIHUsIHYsIHQ7CisgIG1wX3NpemUgIGsgPSAwOworCisgIEFSR0NISyhhICE9IE5VTEwgJiYgYiAhPSBOVUxMICYmIGMgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICBpZihtcF9jbXBfeihhKSA9PSBNUF9FUSAmJiBtcF9jbXBfeihiKSA9PSBNUF9FUSkKKyAgICAgIHJldHVybiBNUF9SQU5HRTsKKyAgaWYobXBfY21wX3ooYSkgPT0gTVBfRVEpIHsKKyAgICByZXR1cm4gbXBfY29weShiLCBjKTsKKyAgfSBlbHNlIGlmKG1wX2NtcF96KGIpID09IE1QX0VRKSB7CisgICAgcmV0dXJuIG1wX2NvcHkoYSwgYyk7CisgIH0KKworICBpZigocmVzID0gbXBfaW5pdCgmdCkpICE9IE1QX09LQVkpCisgICAgcmV0dXJuIHJlczsKKyAgaWYoKHJlcyA9IG1wX2luaXRfY29weSgmdSwgYSkpICE9IE1QX09LQVkpCisgICAgZ290byBVOworICBpZigocmVzID0gbXBfaW5pdF9jb3B5KCZ2LCBiKSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFY7CisKKyAgU0lHTigmdSkgPSBNUF9aUE9TOworICBTSUdOKCZ2KSA9IE1QX1pQT1M7CisKKyAgLyogRGl2aWRlIG91dCBjb21tb24gZmFjdG9ycyBvZiAyIHVudGlsIGF0IGxlYXN0IDEgb2YgYSwgYiBpcyBldmVuICovCisgIHdoaWxlKG1wX2lzZXZlbigmdSkgJiYgbXBfaXNldmVuKCZ2KSkgeworICAgIHNfbXBfZGl2XzIoJnUpOworICAgIHNfbXBfZGl2XzIoJnYpOworICAgICsrazsKKyAgfQorCisgIC8qIEluaXRpYWxpemUgdCAqLworICBpZihtcF9pc29kZCgmdSkpIHsKKyAgICBpZigocmVzID0gbXBfY29weSgmdiwgJnQpKSAhPSBNUF9PS0FZKQorICAgICAgZ290byBDTEVBTlVQOworICAgIAorICAgIC8qIHQgPSAtdiAqLworICAgIGlmKFNJR04oJnYpID09IE1QX1pQT1MpCisgICAgICBTSUdOKCZ0KSA9IE1QX05FRzsKKyAgICBlbHNlCisgICAgICBTSUdOKCZ0KSA9IE1QX1pQT1M7CisgICAgCisgIH0gZWxzZSB7CisgICAgaWYoKHJlcyA9IG1wX2NvcHkoJnUsICZ0KSkgIT0gTVBfT0tBWSkKKyAgICAgIGdvdG8gQ0xFQU5VUDsKKworICB9CisKKyAgZm9yKDs7KSB7CisgICAgd2hpbGUobXBfaXNldmVuKCZ0KSkgeworICAgICAgc19tcF9kaXZfMigmdCk7CisgICAgfQorCisgICAgaWYobXBfY21wX3ooJnQpID09IE1QX0dUKSB7CisgICAgICBpZigocmVzID0gbXBfY29weSgmdCwgJnUpKSAhPSBNUF9PS0FZKQorCWdvdG8gQ0xFQU5VUDsKKworICAgIH0gZWxzZSB7CisgICAgICBpZigocmVzID0gbXBfY29weSgmdCwgJnYpKSAhPSBNUF9PS0FZKQorCWdvdG8gQ0xFQU5VUDsKKworICAgICAgLyogdiA9IC10ICovCisgICAgICBpZihTSUdOKCZ0KSA9PSBNUF9aUE9TKQorCVNJR04oJnYpID0gTVBfTkVHOworICAgICAgZWxzZQorCVNJR04oJnYpID0gTVBfWlBPUzsKKyAgICB9CisKKyAgICBpZigocmVzID0gbXBfc3ViKCZ1LCAmdiwgJnQpKSAhPSBNUF9PS0FZKQorICAgICAgZ290byBDTEVBTlVQOworCisgICAgaWYoc19tcF9jbXBfZCgmdCwgMCkgPT0gTVBfRVEpCisgICAgICBicmVhazsKKyAgfQorCisgIHNfbXBfMmV4cHQoJnYsIGspOyAgICAgICAvKiB2ID0gMl5rICAgKi8KKyAgcmVzID0gbXBfbXVsKCZ1LCAmdiwgYyk7IC8qIGMgPSB1ICogdiAqLworCisgQ0xFQU5VUDoKKyAgbXBfY2xlYXIoJnYpOworIFY6CisgIG1wX2NsZWFyKCZ1KTsKKyBVOgorICBtcF9jbGVhcigmdCk7CisKKyAgcmV0dXJuIHJlczsKKworfSAvKiBlbmQgbXBfYmdjZCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfbGNtKGEsIGIsIGMpICovCisKKy8qIFdlIGNvbXB1dGUgdGhlIGxlYXN0IGNvbW1vbiBtdWx0aXBsZSB1c2luZyB0aGUgcnVsZToKKworICAgYWIgPSBbYSwgYl0oYSwgYikKKworICAgLi4uIGJ5IGNvbXB1dGluZyB0aGUgcHJvZHVjdCwgYW5kIGRpdmlkaW5nIG91dCB0aGUgZ2NkLgorICovCisKK21wX2VyciBtcF9sY20obXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYykKK3sKKyAgbXBfaW50ICBnY2QsIHByb2Q7CisgIG1wX2VyciAgcmVzOworCisgIEFSR0NISyhhICE9IE5VTEwgJiYgYiAhPSBOVUxMICYmIGMgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKworICAvKiBTZXQgdXAgdGVtcG9yYXJpZXMgKi8KKyAgaWYoKHJlcyA9IG1wX2luaXQoJmdjZCkpICE9IE1QX09LQVkpCisgICAgcmV0dXJuIHJlczsKKyAgaWYoKHJlcyA9IG1wX2luaXQoJnByb2QpKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gR0NEOworCisgIGlmKChyZXMgPSBtcF9tdWwoYSwgYiwgJnByb2QpKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gQ0xFQU5VUDsKKyAgaWYoKHJlcyA9IG1wX2djZChhLCBiLCAmZ2NkKSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIENMRUFOVVA7CisKKyAgcmVzID0gbXBfZGl2KCZwcm9kLCAmZ2NkLCBjLCBOVUxMKTsKKworIENMRUFOVVA6CisgIG1wX2NsZWFyKCZwcm9kKTsKKyBHQ0Q6CisgIG1wX2NsZWFyKCZnY2QpOworCisgIHJldHVybiByZXM7CisKK30gLyogZW5kIG1wX2xjbSgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfeGdjZChhLCBiLCBnLCB4LCB5KSAqLworCisvKgorICBtcF94Z2NkKGEsIGIsIGcsIHgsIHkpCisKKyAgQ29tcHV0ZSBnID0gKGEsIGIpIGFuZCB2YWx1ZXMgeCBhbmQgeSBzYXRpc2Z5aW5nIEJlem91dCdzIGlkZW50aXR5CisgICh0aGF0IGlzLCBheCArIGJ5ID0gZykuICBUaGlzIHVzZXMgdGhlIGV4dGVuZGVkIGJpbmFyeSBHQ0QgYWxnb3JpdGhtCisgIGJhc2VkIG9uIHRoZSBTdGVpbiBhbGdvcml0aG0gdXNlZCBmb3IgbXBfZ2NkKCkKKyAqLworCittcF9lcnIgbXBfeGdjZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpnLCBtcF9pbnQgKngsIG1wX2ludCAqeSkKK3sKKyAgbXBfaW50ICAgZ3gsIHhjLCB5YywgdSwgdiwgQSwgQiwgQywgRDsKKyAgbXBfaW50ICAqY2xlYW5bOV07CisgIG1wX2VyciAgIHJlczsKKyAgaW50ICAgICAgbGFzdCA9IC0xOworCisgIGlmKG1wX2NtcF96KGIpID09IDApCisgICAgcmV0dXJuIE1QX1JBTkdFOworCisgIC8qIEluaXRpYWxpemUgYWxsIHRoZXNlIHZhcmlhYmxlcyB3ZSBuZWVkICovCisgIGlmKChyZXMgPSBtcF9pbml0KCZ1KSkgIT0gTVBfT0tBWSkgZ290byBDTEVBTlVQOworICBjbGVhblsrK2xhc3RdID0gJnU7CisgIGlmKChyZXMgPSBtcF9pbml0KCZ2KSkgIT0gTVBfT0tBWSkgZ290byBDTEVBTlVQOworICBjbGVhblsrK2xhc3RdID0gJnY7CisgIGlmKChyZXMgPSBtcF9pbml0KCZneCkpICE9IE1QX09LQVkpIGdvdG8gQ0xFQU5VUDsKKyAgY2xlYW5bKytsYXN0XSA9ICZneDsKKyAgaWYoKHJlcyA9IG1wX2luaXQoJkEpKSAhPSBNUF9PS0FZKSBnb3RvIENMRUFOVVA7CisgIGNsZWFuWysrbGFzdF0gPSAmQTsKKyAgaWYoKHJlcyA9IG1wX2luaXQoJkIpKSAhPSBNUF9PS0FZKSBnb3RvIENMRUFOVVA7CisgIGNsZWFuWysrbGFzdF0gPSAmQjsKKyAgaWYoKHJlcyA9IG1wX2luaXQoJkMpKSAhPSBNUF9PS0FZKSBnb3RvIENMRUFOVVA7CisgIGNsZWFuWysrbGFzdF0gPSAmQzsKKyAgaWYoKHJlcyA9IG1wX2luaXQoJkQpKSAhPSBNUF9PS0FZKSBnb3RvIENMRUFOVVA7CisgIGNsZWFuWysrbGFzdF0gPSAmRDsKKyAgaWYoKHJlcyA9IG1wX2luaXRfY29weSgmeGMsIGEpKSAhPSBNUF9PS0FZKSBnb3RvIENMRUFOVVA7CisgIGNsZWFuWysrbGFzdF0gPSAmeGM7CisgIG1wX2FicygmeGMsICZ4Yyk7CisgIGlmKChyZXMgPSBtcF9pbml0X2NvcHkoJnljLCBiKSkgIT0gTVBfT0tBWSkgZ290byBDTEVBTlVQOworICBjbGVhblsrK2xhc3RdID0gJnljOworICBtcF9hYnMoJnljLCAmeWMpOworCisgIG1wX3NldCgmZ3gsIDEpOworCisgIC8qIERpdmlkZSBieSB0d28gdW50aWwgYXQgbGVhc3Qgb25lIG9mIHRoZW0gaXMgZXZlbiAqLworICB3aGlsZShtcF9pc2V2ZW4oJnhjKSAmJiBtcF9pc2V2ZW4oJnljKSkgeworICAgIHNfbXBfZGl2XzIoJnhjKTsKKyAgICBzX21wX2Rpdl8yKCZ5Yyk7CisgICAgaWYoKHJlcyA9IHNfbXBfbXVsXzIoJmd4KSkgIT0gTVBfT0tBWSkKKyAgICAgIGdvdG8gQ0xFQU5VUDsKKyAgfQorCisgIG1wX2NvcHkoJnhjLCAmdSk7CisgIG1wX2NvcHkoJnljLCAmdik7CisgIG1wX3NldCgmQSwgMSk7IG1wX3NldCgmRCwgMSk7CisKKyAgLyogTG9vcCB0aHJvdWdoIGJpbmFyeSBHQ0QgYWxnb3JpdGhtICovCisgIGZvcig7OykgeworICAgIHdoaWxlKG1wX2lzZXZlbigmdSkpIHsKKyAgICAgIHNfbXBfZGl2XzIoJnUpOworCisgICAgICBpZihtcF9pc2V2ZW4oJkEpICYmIG1wX2lzZXZlbigmQikpIHsKKwlzX21wX2Rpdl8yKCZBKTsgc19tcF9kaXZfMigmQik7CisgICAgICB9IGVsc2UgeworCWlmKChyZXMgPSBtcF9hZGQoJkEsICZ5YywgJkEpKSAhPSBNUF9PS0FZKSBnb3RvIENMRUFOVVA7CisJc19tcF9kaXZfMigmQSk7CisJaWYoKHJlcyA9IG1wX3N1YigmQiwgJnhjLCAmQikpICE9IE1QX09LQVkpIGdvdG8gQ0xFQU5VUDsKKwlzX21wX2Rpdl8yKCZCKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZShtcF9pc2V2ZW4oJnYpKSB7CisgICAgICBzX21wX2Rpdl8yKCZ2KTsKKworICAgICAgaWYobXBfaXNldmVuKCZDKSAmJiBtcF9pc2V2ZW4oJkQpKSB7CisJc19tcF9kaXZfMigmQyk7IHNfbXBfZGl2XzIoJkQpOworICAgICAgfSBlbHNlIHsKKwlpZigocmVzID0gbXBfYWRkKCZDLCAmeWMsICZDKSkgIT0gTVBfT0tBWSkgZ290byBDTEVBTlVQOworCXNfbXBfZGl2XzIoJkMpOworCWlmKChyZXMgPSBtcF9zdWIoJkQsICZ4YywgJkQpKSAhPSBNUF9PS0FZKSBnb3RvIENMRUFOVVA7CisJc19tcF9kaXZfMigmRCk7CisgICAgICB9CisgICAgfQorCisgICAgaWYobXBfY21wKCZ1LCAmdikgPj0gMCkgeworICAgICAgaWYoKHJlcyA9IG1wX3N1YigmdSwgJnYsICZ1KSkgIT0gTVBfT0tBWSkgZ290byBDTEVBTlVQOworICAgICAgaWYoKHJlcyA9IG1wX3N1YigmQSwgJkMsICZBKSkgIT0gTVBfT0tBWSkgZ290byBDTEVBTlVQOworICAgICAgaWYoKHJlcyA9IG1wX3N1YigmQiwgJkQsICZCKSkgIT0gTVBfT0tBWSkgZ290byBDTEVBTlVQOworCisgICAgfSBlbHNlIHsKKyAgICAgIGlmKChyZXMgPSBtcF9zdWIoJnYsICZ1LCAmdikpICE9IE1QX09LQVkpIGdvdG8gQ0xFQU5VUDsKKyAgICAgIGlmKChyZXMgPSBtcF9zdWIoJkMsICZBLCAmQykpICE9IE1QX09LQVkpIGdvdG8gQ0xFQU5VUDsKKyAgICAgIGlmKChyZXMgPSBtcF9zdWIoJkQsICZCLCAmRCkpICE9IE1QX09LQVkpIGdvdG8gQ0xFQU5VUDsKKworICAgIH0KKworICAgIC8qIElmIHdlJ3JlIGRvbmUsIGNvcHkgcmVzdWx0cyB0byBvdXRwdXQgKi8KKyAgICBpZihtcF9jbXBfeigmdSkgPT0gMCkgeworICAgICAgaWYoeCkKKwlpZigocmVzID0gbXBfY29weSgmQywgeCkpICE9IE1QX09LQVkpIGdvdG8gQ0xFQU5VUDsKKworICAgICAgaWYoeSkKKwlpZigocmVzID0gbXBfY29weSgmRCwgeSkpICE9IE1QX09LQVkpIGdvdG8gQ0xFQU5VUDsKKyAgICAgIAorICAgICAgaWYoZykKKwlpZigocmVzID0gbXBfbXVsKCZneCwgJnYsIGcpKSAhPSBNUF9PS0FZKSBnb3RvIENMRUFOVVA7CisKKyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorCisgQ0xFQU5VUDoKKyAgd2hpbGUobGFzdCA+PSAwKQorICAgIG1wX2NsZWFyKGNsZWFuW2xhc3QtLV0pOworCisgIHJldHVybiByZXM7CisKK30gLyogZW5kIG1wX3hnY2QoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IG1wX2ludm1vZChhLCBtLCBjKSAqLworCisvKgorICBtcF9pbnZtb2QoYSwgbSwgYykKKworICBDb21wdXRlIGMgPSBhXi0xIChtb2QgbSksIGlmIHRoZXJlIGlzIGFuIGludmVyc2UgZm9yIGEgKG1vZCBtKS4KKyAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBxdWVzdGlvbiBvZiB3aGV0aGVyIChhLCBtKSA9IDEuICBJZiBub3QsCisgIE1QX1VOREVGIGlzIHJldHVybmVkLCBhbmQgdGhlcmUgaXMgbm8gaW52ZXJzZS4KKyAqLworCittcF9lcnIgbXBfaW52bW9kKG1wX2ludCAqYSwgbXBfaW50ICptLCBtcF9pbnQgKmMpCit7CisgIG1wX2ludCAgZywgeDsKKyAgbXBfZXJyICByZXM7CisKKyAgQVJHQ0hLKGEgJiYgbSAmJiBjLCBNUF9CQURBUkcpOworCisgIGlmKG1wX2NtcF96KGEpID09IDAgfHwgbXBfY21wX3oobSkgPT0gMCkKKyAgICByZXR1cm4gTVBfUkFOR0U7CisKKyAgaWYoKHJlcyA9IG1wX2luaXQoJmcpKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisgIGlmKChyZXMgPSBtcF9pbml0KCZ4KSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFg7CisKKyAgaWYoKHJlcyA9IG1wX3hnY2QoYSwgbSwgJmcsICZ4LCBOVUxMKSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIENMRUFOVVA7CisKKyAgaWYobXBfY21wX2QoJmcsIDEpICE9IE1QX0VRKSB7CisgICAgcmVzID0gTVBfVU5ERUY7CisgICAgZ290byBDTEVBTlVQOworICB9CisKKyAgcmVzID0gbXBfbW9kKCZ4LCBtLCBjKTsKKyAgU0lHTihjKSA9IFNJR04oYSk7CisKK0NMRUFOVVA6CisgIG1wX2NsZWFyKCZ4KTsKK1g6CisgIG1wX2NsZWFyKCZnKTsKKworICByZXR1cm4gcmVzOworCit9IC8qIGVuZCBtcF9pbnZtb2QoKSAqLworCisvKiB9fX0gKi8KKyNlbmRpZiAvKiBpZiBNUF9OVU1USCAqLworCisvKiB9fX0gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoge3t7IG1wX3ByaW50KG1wLCBvZnApICovCisKKyNpZiBNUF9JT0ZVTkMKKy8qCisgIG1wX3ByaW50KG1wLCBvZnApCisKKyAgUHJpbnQgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBtcF9pbnQgb24gdGhlIG91dHB1dAorICBzdHJlYW0gJ29mcCcuICBPdXRwdXQgaXMgZ2VuZXJhdGVkIHVzaW5nIHRoZSBpbnRlcm5hbCByYWRpeC4KKyAqLworCit2b2lkICAgbXBfcHJpbnQobXBfaW50ICptcCwgRklMRSAqb2ZwKQoreworICBpbnQgICBpeDsKKworICBpZihtcCA9PSBOVUxMIHx8IG9mcCA9PSBOVUxMKQorICAgIHJldHVybjsKKworICBmcHV0YygoU0lHTihtcCkgPT0gTVBfTkVHKSA/ICctJyA6ICcrJywgb2ZwKTsKKworICBmb3IoaXggPSBVU0VEKG1wKSAtIDE7IGl4ID49IDA7IGl4LS0pIHsKKyAgICBmcHJpbnRmKG9mcCwgRElHSVRfRk1ULCBESUdJVChtcCwgaXgpKTsKKyAgfQorCit9IC8qIGVuZCBtcF9wcmludCgpICovCisKKyNlbmRpZiAvKiBpZiBNUF9JT0ZVTkMgKi8KKworLyogfX19ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHt7eyBNb3JlIEkvTyBGdW5jdGlvbnMgKi8KKworLyoge3t7IG1wX3JlYWRfc2lnbmVkX2JpbihtcCwgc3RyLCBsZW4pICovCisKKy8qIAorICAgbXBfcmVhZF9zaWduZWRfYmluKG1wLCBzdHIsIGxlbikKKworICAgUmVhZCBpbiBhIHJhdyB2YWx1ZSAoYmFzZSAyNTYpIGludG8gdGhlIGdpdmVuIG1wX2ludAorICovCisKK21wX2VyciAgbXBfcmVhZF9zaWduZWRfYmluKG1wX2ludCAqbXAsIHVuc2lnbmVkIGNoYXIgKnN0ciwgaW50IGxlbikKK3sKKyAgbXBfZXJyICAgICAgICAgcmVzOworCisgIEFSR0NISyhtcCAhPSBOVUxMICYmIHN0ciAhPSBOVUxMICYmIGxlbiA+IDAsIE1QX0JBREFSRyk7CisKKyAgaWYoKHJlcyA9IG1wX3JlYWRfdW5zaWduZWRfYmluKG1wLCBzdHIgKyAxLCBsZW4gLSAxKSkgPT0gTVBfT0tBWSkgeworICAgIC8qIEdldCBzaWduIGZyb20gZmlyc3QgYnl0ZSAqLworICAgIGlmKHN0clswXSkKKyAgICAgIFNJR04obXApID0gTVBfTkVHOworICAgIGVsc2UKKyAgICAgIFNJR04obXApID0gTVBfWlBPUzsKKyAgfQorCisgIHJldHVybiByZXM7CisKK30gLyogZW5kIG1wX3JlYWRfc2lnbmVkX2JpbigpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfc2lnbmVkX2Jpbl9zaXplKG1wKSAqLworCitpbnQgICAgbXBfc2lnbmVkX2Jpbl9zaXplKG1wX2ludCAqbXApCit7CisgIEFSR0NISyhtcCAhPSBOVUxMLCAwKTsKKworICByZXR1cm4gbXBfdW5zaWduZWRfYmluX3NpemUobXApICsgMTsKKworfSAvKiBlbmQgbXBfc2lnbmVkX2Jpbl9zaXplKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF90b19zaWduZWRfYmluKG1wLCBzdHIpICovCisKK21wX2VyciBtcF90b19zaWduZWRfYmluKG1wX2ludCAqbXAsIHVuc2lnbmVkIGNoYXIgKnN0cikKK3sKKyAgQVJHQ0hLKG1wICE9IE5VTEwgJiYgc3RyICE9IE5VTEwsIE1QX0JBREFSRyk7CisKKyAgLyogQ2FsbGVyIHJlc3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIGVub3VnaCBtZW1vcnkgKHVzZSBtcF9yYXdfc2l6ZShtcCkpICovCisgIHN0clswXSA9IChjaGFyKVNJR04obXApOworCisgIHJldHVybiBtcF90b191bnNpZ25lZF9iaW4obXAsIHN0ciArIDEpOworCit9IC8qIGVuZCBtcF90b19zaWduZWRfYmluKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9yZWFkX3Vuc2lnbmVkX2JpbihtcCwgc3RyLCBsZW4pICovCisKKy8qCisgIG1wX3JlYWRfdW5zaWduZWRfYmluKG1wLCBzdHIsIGxlbikKKworICBSZWFkIGluIGFuIHVuc2lnbmVkIHZhbHVlIChiYXNlIDI1NikgaW50byB0aGUgZ2l2ZW4gbXBfaW50CisgKi8KKworbXBfZXJyICBtcF9yZWFkX3Vuc2lnbmVkX2JpbihtcF9pbnQgKm1wLCB1bnNpZ25lZCBjaGFyICpzdHIsIGludCBsZW4pCit7CisgIGludCAgICAgaXg7CisgIG1wX2VyciAgcmVzOworCisgIEFSR0NISyhtcCAhPSBOVUxMICYmIHN0ciAhPSBOVUxMICYmIGxlbiA+IDAsIE1QX0JBREFSRyk7CisKKyAgbXBfemVybyhtcCk7CisKKyAgZm9yKGl4ID0gMDsgaXggPCBsZW47IGl4KyspIHsKKyAgICBpZigocmVzID0gc19tcF9tdWxfMmQobXAsIENIQVJfQklUKSkgIT0gTVBfT0tBWSkKKyAgICAgIHJldHVybiByZXM7CisKKyAgICBpZigocmVzID0gbXBfYWRkX2QobXAsIHN0cltpeF0sIG1wKSkgIT0gTVBfT0tBWSkKKyAgICAgIHJldHVybiByZXM7CisgIH0KKyAgCisgIHJldHVybiBNUF9PS0FZOworICAKK30gLyogZW5kIG1wX3JlYWRfdW5zaWduZWRfYmluKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF91bnNpZ25lZF9iaW5fc2l6ZShtcCkgKi8KKworaW50ICAgICBtcF91bnNpZ25lZF9iaW5fc2l6ZShtcF9pbnQgKm1wKSAKK3sKKyAgbXBfZGlnaXQgICB0b3BkaWc7CisgIGludCAgICAgICAgY291bnQ7CisKKyAgQVJHQ0hLKG1wICE9IE5VTEwsIDApOworCisgIC8qIFNwZWNpYWwgY2FzZSBmb3IgdGhlIHZhbHVlIHplcm8gKi8KKyAgaWYoVVNFRChtcCkgPT0gMSAmJiBESUdJVChtcCwgMCkgPT0gMCkKKyAgICByZXR1cm4gMTsKKworICBjb3VudCA9IChVU0VEKG1wKSAtIDEpICogc2l6ZW9mKG1wX2RpZ2l0KTsKKyAgdG9wZGlnID0gRElHSVQobXAsIFVTRUQobXApIC0gMSk7CisKKyAgd2hpbGUodG9wZGlnICE9IDApIHsKKyAgICArK2NvdW50OworICAgIHRvcGRpZyA+Pj0gQ0hBUl9CSVQ7CisgIH0KKworICByZXR1cm4gY291bnQ7CisKK30gLyogZW5kIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF90b191bnNpZ25lZF9iaW4obXAsIHN0cikgKi8KKworbXBfZXJyIG1wX3RvX3Vuc2lnbmVkX2JpbihtcF9pbnQgKm1wLCB1bnNpZ25lZCBjaGFyICpzdHIpCit7CisgIG1wX2RpZ2l0ICAgICAgKmRwLCAqZW5kLCBkOworICB1bnNpZ25lZCBjaGFyICpzcG9zOworCisgIEFSR0NISyhtcCAhPSBOVUxMICYmIHN0ciAhPSBOVUxMLCBNUF9CQURBUkcpOworCisgIGRwID0gRElHSVRTKG1wKTsKKyAgZW5kID0gZHAgKyBVU0VEKG1wKSAtIDE7CisgIHNwb3MgPSBzdHI7CisKKyAgLyogU3BlY2lhbCBjYXNlIGZvciB6ZXJvLCBxdWljayB0ZXN0ICovCisgIGlmKGRwID09IGVuZCAmJiAqZHAgPT0gMCkgeworICAgICpzdHIgPSAnXDAnOworICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogR2VuZXJhdGUgZGlnaXRzIGluIHJldmVyc2Ugb3JkZXIgKi8KKyAgd2hpbGUoZHAgPCBlbmQpIHsKKyAgICBpbnQgICAgICBpeDsKKworICAgIGQgPSAqZHA7CisgICAgZm9yKGl4ID0gMDsgaXggPCBzaXplb2YobXBfZGlnaXQpOyArK2l4KSB7CisgICAgICAqc3BvcyA9IGQgJiBVQ0hBUl9NQVg7CisgICAgICBkID4+PSBDSEFSX0JJVDsKKyAgICAgICsrc3BvczsKKyAgICB9CisKKyAgICArK2RwOworICB9CisKKyAgLyogTm93IGhhbmRsZSBsYXN0IGRpZ2l0IHNwZWNpYWxseSwgaGlnaCBvcmRlciB6ZXJvZXMgYXJlIG5vdCB3cml0dGVuICovCisgIGQgPSAqZW5kOworICB3aGlsZShkICE9IDApIHsKKyAgICAqc3BvcyA9IGQgJiBVQ0hBUl9NQVg7CisgICAgZCA+Pj0gQ0hBUl9CSVQ7CisgICAgKytzcG9zOworICB9CisKKyAgLyogUmV2ZXJzZSBldmVyeXRoaW5nIHRvIGdldCBkaWdpdHMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgKi8KKyAgd2hpbGUoLS1zcG9zID4gc3RyKSB7CisgICAgdW5zaWduZWQgY2hhciB0ID0gKnN0cjsKKyAgICAqc3RyID0gKnNwb3M7CisgICAgKnNwb3MgPSB0OworCisgICAgKytzdHI7CisgIH0KKworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgbXBfdG9fdW5zaWduZWRfYmluKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9jb3VudF9iaXRzKG1wKSAqLworCitpbnQgICAgbXBfY291bnRfYml0cyhtcF9pbnQgKm1wKQoreworICBpbnQgICAgICBsZW47CisgIG1wX2RpZ2l0IGQ7CisKKyAgQVJHQ0hLKG1wICE9IE5VTEwsIE1QX0JBREFSRyk7CisKKyAgbGVuID0gRElHSVRfQklUICogKFVTRUQobXApIC0gMSk7CisgIGQgPSBESUdJVChtcCwgVVNFRChtcCkgLSAxKTsKKworICB3aGlsZShkICE9IDApIHsKKyAgICArK2xlbjsKKyAgICBkID4+PSAxOworICB9CisKKyAgcmV0dXJuIGxlbjsKKyAgCit9IC8qIGVuZCBtcF9jb3VudF9iaXRzKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9yZWFkX3JhZGl4KG1wLCBzdHIsIHJhZGl4KSAqLworCisvKgorICBtcF9yZWFkX3JhZGl4KG1wLCBzdHIsIHJhZGl4KQorCisgIFJlYWQgYW4gaW50ZWdlciBmcm9tIHRoZSBnaXZlbiBzdHJpbmcsIGFuZCBzZXQgbXAgdG8gdGhlIHJlc3VsdGluZworICB2YWx1ZS4gIFRoZSBpbnB1dCBpcyBwcmVzdW1lZCB0byBiZSBpbiBiYXNlIDEwLiAgTGVhZGluZyBub24tZGlnaXQKKyAgY2hhcmFjdGVycyBhcmUgaWdub3JlZCwgYW5kIHRoZSBmdW5jdGlvbiByZWFkcyB1bnRpbCBhIG5vbi1kaWdpdAorICBjaGFyYWN0ZXIgb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgorICovCisKK21wX2VyciAgbXBfcmVhZF9yYWRpeChtcF9pbnQgKm1wLCB1bnNpZ25lZCBjaGFyICpzdHIsIGludCByYWRpeCkKK3sKKyAgaW50ICAgICBpeCA9IDAsIHZhbCA9IDA7CisgIG1wX2VyciAgcmVzOworICBtcF9zaWduIHNpZyA9IE1QX1pQT1M7CisKKyAgQVJHQ0hLKG1wICE9IE5VTEwgJiYgc3RyICE9IE5VTEwgJiYgcmFkaXggPj0gMiAmJiByYWRpeCA8PSBNQVhfUkFESVgsIAorCSBNUF9CQURBUkcpOworCisgIG1wX3plcm8obXApOworCisgIC8qIFNraXAgbGVhZGluZyBub24tZGlnaXQgY2hhcmFjdGVycyB1bnRpbCBhIGRpZ2l0IG9yICctJyBvciAnKycgKi8KKyAgd2hpbGUoc3RyW2l4XSAmJiAKKwkoc19tcF90b3ZhbHVlKHN0cltpeF0sIHJhZGl4KSA8IDApICYmIAorCXN0cltpeF0gIT0gJy0nICYmCisJc3RyW2l4XSAhPSAnKycpIHsKKyAgICArK2l4OworICB9CisKKyAgaWYoc3RyW2l4XSA9PSAnLScpIHsKKyAgICBzaWcgPSBNUF9ORUc7CisgICAgKytpeDsKKyAgfSBlbHNlIGlmKHN0cltpeF0gPT0gJysnKSB7CisgICAgc2lnID0gTVBfWlBPUzsgLyogdGhpcyBpcyB0aGUgZGVmYXVsdCBhbnl3YXkuLi4gKi8KKyAgICArK2l4OworICB9CisKKyAgd2hpbGUoKHZhbCA9IHNfbXBfdG92YWx1ZShzdHJbaXhdLCByYWRpeCkpID49IDApIHsKKyAgICBpZigocmVzID0gc19tcF9tdWxfZChtcCwgcmFkaXgpKSAhPSBNUF9PS0FZKQorICAgICAgcmV0dXJuIHJlczsKKyAgICBpZigocmVzID0gc19tcF9hZGRfZChtcCwgdmFsKSkgIT0gTVBfT0tBWSkKKyAgICAgIHJldHVybiByZXM7CisgICAgKytpeDsKKyAgfQorCisgIGlmKHNfbXBfY21wX2QobXAsIDApID09IE1QX0VRKQorICAgIFNJR04obXApID0gTVBfWlBPUzsKKyAgZWxzZQorICAgIFNJR04obXApID0gc2lnOworCisgIHJldHVybiBNUF9PS0FZOworCit9IC8qIGVuZCBtcF9yZWFkX3JhZGl4KCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF9yYWRpeF9zaXplKG1wLCByYWRpeCkgKi8KKworaW50ICAgIG1wX3JhZGl4X3NpemUobXBfaW50ICptcCwgaW50IHJhZGl4KQoreworICBpbnQgIGxlbjsKKyAgQVJHQ0hLKG1wICE9IE5VTEwsIDApOworCisgIGxlbiA9IHNfbXBfb3V0bGVuKG1wX2NvdW50X2JpdHMobXApLCByYWRpeCkgKyAxOyAvKiBmb3IgTlVMIHRlcm1pbmF0b3IgKi8KKworICBpZihtcF9jbXBfeihtcCkgPCAwKQorICAgICsrbGVuOyAvKiBmb3Igc2lnbiAqLworCisgIHJldHVybiBsZW47CisKK30gLyogZW5kIG1wX3JhZGl4X3NpemUoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IG1wX3ZhbHVlX3JhZGl4X3NpemUobnVtLCBxdHksIHJhZGl4KSAqLworCisvKiBudW0gPSBudW1iZXIgb2YgZGlnaXRzCisgICBxdHkgPSBudW1iZXIgb2YgYml0cyBwZXIgZGlnaXQKKyAgIHJhZGl4ID0gdGFyZ2V0IGJhc2UKKyAgIAorICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBzcGVjaWZpZWQgcmFkaXggdGhhdCB3b3VsZCBiZQorICAgbmVlZGVkIHRvIGV4cHJlc3MgJ251bScgZGlnaXRzIG9mICdxdHknIGJpdHMgZWFjaC4KKyAqLworaW50ICAgIG1wX3ZhbHVlX3JhZGl4X3NpemUoaW50IG51bSwgaW50IHF0eSwgaW50IHJhZGl4KQoreworICBBUkdDSEsobnVtID49IDAgJiYgcXR5ID4gMCAmJiByYWRpeCA+PSAyICYmIHJhZGl4IDw9IE1BWF9SQURJWCwgMCk7CisKKyAgcmV0dXJuIHNfbXBfb3V0bGVuKG51bSAqIHF0eSwgcmFkaXgpOworCit9IC8qIGVuZCBtcF92YWx1ZV9yYWRpeF9zaXplKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBtcF90b3JhZGl4KG1wLCBzdHIsIHJhZGl4KSAqLworCittcF9lcnIgbXBfdG9yYWRpeChtcF9pbnQgKm1wLCB1bnNpZ25lZCBjaGFyICpzdHIsIGludCByYWRpeCkKK3sKKyAgaW50ICBpeCwgcG9zID0gMDsKKworICBBUkdDSEsobXAgIT0gTlVMTCAmJiBzdHIgIT0gTlVMTCwgTVBfQkFEQVJHKTsKKyAgQVJHQ0hLKHJhZGl4ID4gMSAmJiByYWRpeCA8PSBNQVhfUkFESVgsIE1QX1JBTkdFKTsKKworICBpZihtcF9jbXBfeihtcCkgPT0gTVBfRVEpIHsKKyAgICBzdHJbMF0gPSAnMCc7CisgICAgc3RyWzFdID0gJ1wwJzsKKyAgfSBlbHNlIHsKKyAgICBtcF9lcnIgICByZXM7CisgICAgbXBfaW50ICAgdG1wOworICAgIG1wX3NpZ24gIHNnbjsKKyAgICBtcF9kaWdpdCByZW0sIHJkeCA9IChtcF9kaWdpdClyYWRpeDsKKyAgICBjaGFyICAgICBjaDsKKworICAgIGlmKChyZXMgPSBtcF9pbml0X2NvcHkoJnRtcCwgbXApKSAhPSBNUF9PS0FZKQorICAgICAgcmV0dXJuIHJlczsKKworICAgIC8qIFNhdmUgc2lnbiBmb3IgbGF0ZXIsIGFuZCB0YWtlIGFic29sdXRlIHZhbHVlICovCisgICAgc2duID0gU0lHTigmdG1wKTsgU0lHTigmdG1wKSA9IE1QX1pQT1M7CisKKyAgICAvKiBHZW5lcmF0ZSBvdXRwdXQgZGlnaXRzIGluIHJldmVyc2Ugb3JkZXIgICAgICAqLworICAgIHdoaWxlKG1wX2NtcF96KCZ0bXApICE9IDApIHsKKyAgICAgIGlmKChyZXMgPSBzX21wX2Rpdl9kKCZ0bXAsIHJkeCwgJnJlbSkpICE9IE1QX09LQVkpIHsKKwltcF9jbGVhcigmdG1wKTsKKwlyZXR1cm4gcmVzOworICAgICAgfQorCisgICAgICAvKiBHZW5lcmF0ZSBkaWdpdHMsIHVzZSBjYXBpdGFsIGxldHRlcnMgKi8KKyAgICAgIGNoID0gc19tcF90b2RpZ2l0KHJlbSwgcmFkaXgsIDApOworCisgICAgICBzdHJbcG9zKytdID0gY2g7CisgICAgfQorCisgICAgLyogQWRkIC0gc2lnbiBpZiBvcmlnaW5hbCB2YWx1ZSB3YXMgbmVnYXRpdmUgKi8KKyAgICBpZihzZ24gPT0gTVBfTkVHKQorICAgICAgc3RyW3BvcysrXSA9ICctJzsKKworICAgIC8qIEFkZCB0cmFpbGluZyBOVUwgdG8gZW5kIHRoZSBzdHJpbmcgICAgICAgICovCisgICAgc3RyW3Bvcy0tXSA9ICdcMCc7CisKKyAgICAvKiBSZXZlcnNlIHRoZSBkaWdpdHMgYW5kIHNpZ24gaW5kaWNhdG9yICAgICAqLworICAgIGl4ID0gMDsKKyAgICB3aGlsZShpeCA8IHBvcykgeworICAgICAgY2hhciB0bXAgPSBzdHJbaXhdOworCisgICAgICBzdHJbaXhdID0gc3RyW3Bvc107CisgICAgICBzdHJbcG9zXSA9IHRtcDsKKyAgICAgICsraXg7CisgICAgICAtLXBvczsKKyAgICB9CisgICAgCisgICAgbXBfY2xlYXIoJnRtcCk7CisgIH0KKworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgbXBfdG9yYWRpeCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfY2hhcjJ2YWx1ZShjaCwgcikgKi8KKworaW50ICAgIG1wX2NoYXIydmFsdWUoY2hhciBjaCwgaW50IHIpCit7CisgIHJldHVybiBzX21wX3RvdmFsdWUoY2gsIHIpOworCit9IC8qIGVuZCBtcF90b3ZhbHVlKCkgKi8KKworLyogfX19ICovCisKKy8qIH19fSAqLworCisvKiB7e3sgbXBfc3RyZXJyb3IoZWMpICovCisKKy8qCisgIG1wX3N0cmVycm9yKGVjKQorCisgIFJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBtZWFuaW5nIG9mIGVycm9yIGNvZGUgJ2VjJy4gIFRoZQorICBzdHJpbmcgcmV0dXJuZWQgaXMgYWxsb2NhdGVkIGluIHN0YXRpYyBtZW1vcnksIHNvIHRoZSBjYWxsZXIgc2hvdWxkCisgIG5vdCBhdHRlbXB0IHRvIG1vZGlmeSBvciBmcmVlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAgc3RyaW5nLgorICovCitjb25zdCBjaGFyICAqbXBfc3RyZXJyb3IobXBfZXJyIGVjKQoreworICBpbnQgICBhZWMgPSAoZWMgPCAwKSA/IC1lYyA6IGVjOworCisgIC8qIENvZGUgdmFsdWVzIGFyZSBuZWdhdGl2ZSwgc28gdGhlIHNlbnNlcyBvZiB0aGVzZSBjb21wYXJpc29ucworICAgICBhcmUgYWNjdXJhdGUgKi8KKyAgaWYoZWMgPCBNUF9MQVNUX0NPREUgfHwgZWMgPiBNUF9PS0FZKSB7CisgICAgcmV0dXJuIG1wX2Vycl9zdHJpbmdbMF07ICAvKiB1bmtub3duIGVycm9yIGNvZGUgKi8KKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gbXBfZXJyX3N0cmluZ1thZWMgKyAxXTsKKyAgfQorCit9IC8qIGVuZCBtcF9zdHJlcnJvcigpICovCisKKy8qIH19fSAqLworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBTdGF0aWMgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKGludGVybmFsIHVzZSBvbmx5KSAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIHt7eyBNZW1vcnkgbWFuYWdlbWVudCAqLworCisvKiB7e3sgc19tcF9ncm93KG1wLCBtaW4pICovCisKKy8qIE1ha2Ugc3VyZSB0aGVyZSBhcmUgYXQgbGVhc3QgJ21pbicgZGlnaXRzIGFsbG9jYXRlZCB0byBtcCAgICAgICAgICAgICAgKi8KK21wX2VyciAgIHNfbXBfZ3JvdyhtcF9pbnQgKm1wLCBtcF9zaXplIG1pbikKK3sKKyAgaWYobWluID4gQUxMT0MobXApKSB7CisgICAgbXBfZGlnaXQgICAqdG1wOworCisgICAgLyogU2V0IG1pbiB0byBuZXh0IG5lYXJlc3QgZGVmYXVsdCBwcmVjaXNpb24gYmxvY2sgc2l6ZSAqLworICAgIG1pbiA9ICgobWluICsgKHNfbXBfZGVmcHJlYyAtIDEpKSAvIHNfbXBfZGVmcHJlYykgKiBzX21wX2RlZnByZWM7CisKKyAgICBpZigodG1wID0gc19tcF9hbGxvYyhtaW4sIHNpemVvZihtcF9kaWdpdCkpKSA9PSBOVUxMKQorICAgICAgcmV0dXJuIE1QX01FTTsKKworICAgIHNfbXBfY29weShESUdJVFMobXApLCB0bXAsIFVTRUQobXApKTsKKworI2lmIE1QX0NSWVBUTworICAgIHNfbXBfc2V0eihESUdJVFMobXApLCBBTExPQyhtcCkpOworI2VuZGlmCisgICAgc19tcF9mcmVlKERJR0lUUyhtcCkpOworICAgIERJR0lUUyhtcCkgPSB0bXA7CisgICAgQUxMT0MobXApID0gbWluOworICB9CisKKyAgcmV0dXJuIE1QX09LQVk7CisKK30gLyogZW5kIHNfbXBfZ3JvdygpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgc19tcF9wYWQobXAsIG1pbikgKi8KKworLyogTWFrZSBzdXJlIHRoZSB1c2VkIHNpemUgb2YgbXAgaXMgYXQgbGVhc3QgJ21pbicsIGdyb3dpbmcgaWYgbmVlZGVkICAgICAqLworbXBfZXJyICAgc19tcF9wYWQobXBfaW50ICptcCwgbXBfc2l6ZSBtaW4pCit7CisgIGlmKG1pbiA+IFVTRUQobXApKSB7CisgICAgbXBfZXJyICByZXM7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhlcmUgaXMgcm9vbSB0byBpbmNyZWFzZSBwcmVjaXNpb24gICovCisgICAgaWYobWluID4gQUxMT0MobXApICYmIChyZXMgPSBzX21wX2dyb3cobXAsIG1pbikpICE9IE1QX09LQVkpCisgICAgICByZXR1cm4gcmVzOworCisgICAgLyogSW5jcmVhc2UgcHJlY2lzaW9uOyBzaG91bGQgYWxyZWFkeSBiZSAwLWZpbGxlZCAqLworICAgIFVTRUQobXApID0gbWluOworICB9CisKKyAgcmV0dXJuIE1QX09LQVk7CisKK30gLyogZW5kIHNfbXBfcGFkKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBzX21wX3NldHooZHAsIGNvdW50KSAqLworCisjaWYgTVBfTUFDUk8gPT0gMAorLyogU2V0ICdjb3VudCcgZGlnaXRzIHBvaW50ZWQgdG8gYnkgZHAgdG8gYmUgemVyb2VzICAgICAgICAgICAgICAgICAgICAgICAqLwordm9pZCBzX21wX3NldHoobXBfZGlnaXQgKmRwLCBtcF9zaXplIGNvdW50KQoreworI2lmIE1QX01FTVNFVCA9PSAwCisgIGludCAgaXg7CisKKyAgZm9yKGl4ID0gMDsgaXggPCBjb3VudDsgaXgrKykKKyAgICBkcFtpeF0gPSAwOworI2Vsc2UKKyAgbWVtc2V0KGRwLCAwLCBjb3VudCAqIHNpemVvZihtcF9kaWdpdCkpOworI2VuZGlmCisKK30gLyogZW5kIHNfbXBfc2V0eigpICovCisjZW5kaWYKKworLyogfX19ICovCisKKy8qIHt7eyBzX21wX2NvcHkoc3AsIGRwLCBjb3VudCkgKi8KKworI2lmIE1QX01BQ1JPID09IDAKKy8qIENvcHkgJ2NvdW50JyBkaWdpdHMgZnJvbSBzcCB0byBkcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3ZvaWQgc19tcF9jb3B5KG1wX2RpZ2l0ICpzcCwgbXBfZGlnaXQgKmRwLCBtcF9zaXplIGNvdW50KQoreworI2lmIE1QX01FTUNQWSA9PSAwCisgIGludCAgaXg7CisKKyAgZm9yKGl4ID0gMDsgaXggPCBjb3VudDsgaXgrKykKKyAgICBkcFtpeF0gPSBzcFtpeF07CisjZWxzZQorICBtZW1jcHkoZHAsIHNwLCBjb3VudCAqIHNpemVvZihtcF9kaWdpdCkpOworI2VuZGlmCisKK30gLyogZW5kIHNfbXBfY29weSgpICovCisjZW5kaWYKKworLyogfX19ICovCisKKy8qIHt7eyBzX21wX2FsbG9jKG5iLCBuaSkgKi8KKworI2lmIE1QX01BQ1JPID09IDAKKy8qIEFsbG9jYXRlIG5pIHJlY29yZHMgb2YgbmIgYnl0ZXMgZWFjaCwgYW5kIHJldHVybiBhIHBvaW50ZXIgdG8gdGhhdCAgICAgKi8KK3ZvaWQgICAgKnNfbXBfYWxsb2Moc2l6ZV90IG5iLCBzaXplX3QgbmkpCit7CisgIHJldHVybiBjYWxsb2MobmIsIG5pKTsKKworfSAvKiBlbmQgc19tcF9hbGxvYygpICovCisjZW5kaWYKKworLyogfX19ICovCisKKy8qIHt7eyBzX21wX2ZyZWUocHRyKSAqLworCisjaWYgTVBfTUFDUk8gPT0gMAorLyogRnJlZSB0aGUgbWVtb3J5IHBvaW50ZWQgdG8gYnkgcHRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwordm9pZCAgICAgc19tcF9mcmVlKHZvaWQgKnB0cikKK3sKKyAgaWYocHRyKQorICAgIGZyZWUocHRyKTsKKworfSAvKiBlbmQgc19tcF9mcmVlKCkgKi8KKyNlbmRpZgorCisvKiB9fX0gKi8KKworLyoge3t7IHNfbXBfY2xhbXAobXApICovCisKKy8qIFJlbW92ZSBsZWFkaW5nIHplcm9lcyBmcm9tIHRoZSBnaXZlbiB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3ZvaWQgICAgIHNfbXBfY2xhbXAobXBfaW50ICptcCkKK3sKKyAgbXBfc2l6ZSAgIGR1ID0gVVNFRChtcCk7CisgIG1wX2RpZ2l0ICp6cCA9IERJR0lUUyhtcCkgKyBkdSAtIDE7CisKKyAgd2hpbGUoZHUgPiAxICYmICEqenAtLSkKKyAgICAtLWR1OworCisgIFVTRUQobXApID0gZHU7CisKK30gLyogZW5kIHNfbXBfY2xhbXAoKSAqLworCisKKy8qIH19fSAqLworCisvKiB7e3sgc19tcF9leGNoKGEsIGIpICovCisKKy8qIEV4Y2hhbmdlIHRoZSBkYXRhIGZvciBhIGFuZCBiOyAoYiwgYSkgPSAoYSwgYikgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK3ZvaWQgICAgIHNfbXBfZXhjaChtcF9pbnQgKmEsIG1wX2ludCAqYikKK3sKKyAgbXBfaW50ICAgdG1wOworCisgIHRtcCA9ICphOworICAqYSA9ICpiOworICAqYiA9IHRtcDsKKworfSAvKiBlbmQgc19tcF9leGNoKCkgKi8KKworLyogfX19ICovCisKKy8qIH19fSAqLworCisvKiB7e3sgQXJpdGhtZXRpYyBoZWxwZXJzICovCisKKy8qIHt7eyBzX21wX2xzaGQobXAsIHApICovCisKKy8qIAorICAgU2hpZnQgbXAgbGVmdHdhcmQgYnkgcCBkaWdpdHMsIGdyb3dpbmcgaWYgbmVlZGVkLCBhbmQgemVyby1maWxsaW5nCisgICB0aGUgaW4tc2hpZnRlZCBkaWdpdHMgYXQgdGhlIHJpZ2h0IGVuZC4gIFRoaXMgaXMgYSBjb252ZW5pZW50CisgICBhbHRlcm5hdGl2ZSB0byBtdWx0aXBsaWNhdGlvbiBieSBwb3dlcnMgb2YgdGhlIHJhZGl4CisgKi8gICAKKworbXBfZXJyICAgc19tcF9sc2hkKG1wX2ludCAqbXAsIG1wX3NpemUgcCkKK3sKKyAgbXBfZXJyICAgcmVzOworICBtcF9zaXplICBwb3M7CisgIG1wX2RpZ2l0ICpkcDsKKyAgaW50ICAgICBpeDsKKworICBpZihwID09IDApCisgICAgcmV0dXJuIE1QX09LQVk7CisKKyAgaWYoKHJlcyA9IHNfbXBfcGFkKG1wLCBVU0VEKG1wKSArIHApKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisKKyAgcG9zID0gVVNFRChtcCkgLSAxOworICBkcCA9IERJR0lUUyhtcCk7CisKKyAgLyogU2hpZnQgYWxsIHRoZSBzaWduaWZpY2FudCBmaWd1cmVzIG92ZXIgYXMgbmVlZGVkICovCisgIGZvcihpeCA9IHBvcyAtIHA7IGl4ID49IDA7IGl4LS0pIAorICAgIGRwW2l4ICsgcF0gPSBkcFtpeF07CisKKyAgLyogRmlsbCB0aGUgYm90dG9tIGRpZ2l0cyB3aXRoIHplcm9lcyAqLworICBmb3IoaXggPSAwOyBpeCA8IHA7IGl4KyspCisgICAgZHBbaXhdID0gMDsKKworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgc19tcF9sc2hkKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBzX21wX3JzaGQobXAsIHApICovCisKKy8qIAorICAgU2hpZnQgbXAgcmlnaHR3YXJkIGJ5IHAgZGlnaXRzLiAgTWFpbnRhaW5zIHRoZSBpbnZhcmlhbnQgdGhhdAorICAgZGlnaXRzIGFib3ZlIHRoZSBwcmVjaXNpb24gYXJlIGFsbCB6ZXJvLiAgRGlnaXRzIHNoaWZ0ZWQgb2ZmIHRoZQorICAgZW5kIGFyZSBsb3N0LiAgQ2Fubm90IGZhaWwuCisgKi8KKwordm9pZCAgICAgc19tcF9yc2hkKG1wX2ludCAqbXAsIG1wX3NpemUgcCkKK3sKKyAgbXBfc2l6ZSAgaXg7CisgIG1wX2RpZ2l0ICpkcDsKKworICBpZihwID09IDApCisgICAgcmV0dXJuOworCisgIC8qIFNob3J0Y3V0IHdoZW4gYWxsIGRpZ2l0cyBhcmUgdG8gYmUgc2hpZnRlZCBvZmYgKi8KKyAgaWYocCA+PSBVU0VEKG1wKSkgeworICAgIHNfbXBfc2V0eihESUdJVFMobXApLCBBTExPQyhtcCkpOworICAgIFVTRUQobXApID0gMTsKKyAgICBTSUdOKG1wKSA9IE1QX1pQT1M7CisgICAgcmV0dXJuOworICB9CisKKyAgLyogU2hpZnQgYWxsIHRoZSBzaWduaWZpY2FudCBmaWd1cmVzIG92ZXIgYXMgbmVlZGVkICovCisgIGRwID0gRElHSVRTKG1wKTsKKyAgZm9yKGl4ID0gcDsgaXggPCBVU0VEKG1wKTsgaXgrKykKKyAgICBkcFtpeCAtIHBdID0gZHBbaXhdOworCisgIC8qIEZpbGwgdGhlIHRvcCBkaWdpdHMgd2l0aCB6ZXJvZXMgKi8KKyAgaXggLT0gcDsKKyAgd2hpbGUoaXggPCBVU0VEKG1wKSkKKyAgICBkcFtpeCsrXSA9IDA7CisKKyAgLyogU3RyaXAgb2ZmIGFueSBsZWFkaW5nIHplcm9lcyAgICAqLworICBzX21wX2NsYW1wKG1wKTsKKworfSAvKiBlbmQgc19tcF9yc2hkKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBzX21wX2Rpdl8yKG1wKSAqLworCisvKiBEaXZpZGUgYnkgdHdvIC0tIHRha2UgYWR2YW50YWdlIG9mIHJhZGl4IHByb3BlcnRpZXMgdG8gZG8gaXQgZmFzdCAgICAgICovCit2b2lkICAgICBzX21wX2Rpdl8yKG1wX2ludCAqbXApCit7CisgIHNfbXBfZGl2XzJkKG1wLCAxKTsKKworfSAvKiBlbmQgc19tcF9kaXZfMigpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgc19tcF9tdWxfMihtcCkgKi8KKworbXBfZXJyIHNfbXBfbXVsXzIobXBfaW50ICptcCkKK3sKKyAgaW50ICAgICAgaXg7CisgIG1wX2RpZ2l0IGtpbiA9IDAsIGtvdXQsICpkcCA9IERJR0lUUyhtcCk7CisgIG1wX2VyciAgIHJlczsKKworICAvKiBTaGlmdCBkaWdpdHMgbGVmdHdhcmQgYnkgMSBiaXQgKi8KKyAgZm9yKGl4ID0gMDsgaXggPCBVU0VEKG1wKTsgaXgrKykgeworICAgIGtvdXQgPSAoZHBbaXhdID4+IChESUdJVF9CSVQgLSAxKSkgJiAxOworICAgIGRwW2l4XSA9IChkcFtpeF0gPDwgMSkgfCBraW47CisKKyAgICBraW4gPSBrb3V0OworICB9CisKKyAgLyogRGVhbCB3aXRoIHJvbGxvdmVyIGZyb20gbGFzdCBkaWdpdCAqLworICBpZihraW4pIHsKKyAgICBpZihpeCA+PSBBTExPQyhtcCkpIHsKKyAgICAgIGlmKChyZXMgPSBzX21wX2dyb3cobXAsIEFMTE9DKG1wKSArIDEpKSAhPSBNUF9PS0FZKQorCXJldHVybiByZXM7CisgICAgICBkcCA9IERJR0lUUyhtcCk7CisgICAgfQorCisgICAgZHBbaXhdID0ga2luOworICAgIFVTRUQobXApICs9IDE7CisgIH0KKworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgc19tcF9tdWxfMigpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgc19tcF9tb2RfMmQobXAsIGQpICovCisKKy8qCisgIFJlbWFpbmRlciB0aGUgaW50ZWdlciBieSAyXmQsIHdoZXJlIGQgaXMgYSBudW1iZXIgb2YgYml0cy4gIFRoaXMKKyAgYW1vdW50cyB0byBhIGJpdHdpc2UgQU5EIG9mIHRoZSB2YWx1ZSwgYW5kIGRvZXMgbm90IHJlcXVpcmUgdGhlIGZ1bGwKKyAgZGl2aXNpb24gY29kZQorICovCit2b2lkICAgICBzX21wX21vZF8yZChtcF9pbnQgKm1wLCBtcF9kaWdpdCBkKQoreworICB1bnNpZ25lZCBpbnQgIG5kaWcgPSAoZCAvIERJR0lUX0JJVCksIG5iaXQgPSAoZCAlIERJR0lUX0JJVCk7CisgIHVuc2lnbmVkIGludCAgaXg7CisgIG1wX2RpZ2l0ICAgICAgZG1hc2ssICpkcCA9IERJR0lUUyhtcCk7CisKKyAgaWYobmRpZyA+PSBVU0VEKG1wKSkKKyAgICByZXR1cm47CisKKyAgLyogRmx1c2ggYWxsIHRoZSBiaXRzIGFib3ZlIDJeZCBpbiBpdHMgZGlnaXQgKi8KKyAgZG1hc2sgPSAoMSA8PCBuYml0KSAtIDE7CisgIGRwW25kaWddICY9IGRtYXNrOworCisgIC8qIEZsdXNoIGFsbCBkaWdpdHMgYWJvdmUgdGhlIG9uZSB3aXRoIDJeZCBpbiBpdCAqLworICBmb3IoaXggPSBuZGlnICsgMTsgaXggPCBVU0VEKG1wKTsgaXgrKykKKyAgICBkcFtpeF0gPSAwOworCisgIHNfbXBfY2xhbXAobXApOworCit9IC8qIGVuZCBzX21wX21vZF8yZCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgc19tcF9tdWxfMmQobXAsIGQpICovCisKKy8qCisgIE11bHRpcGx5IGJ5IHRoZSBpbnRlZ2VyIDJeZCwgd2hlcmUgZCBpcyBhIG51bWJlciBvZiBiaXRzLiAgVGhpcworICBhbW91bnRzIHRvIGEgYml0d2lzZSBzaGlmdCBvZiB0aGUgdmFsdWUsIGFuZCBkb2VzIG5vdCByZXF1aXJlIHRoZQorICBmdWxsIG11bHRpcGxpY2F0aW9uIGNvZGUuCisgKi8KK21wX2VyciAgICBzX21wX211bF8yZChtcF9pbnQgKm1wLCBtcF9kaWdpdCBkKQoreworICBtcF9lcnIgICByZXM7CisgIG1wX2RpZ2l0IHNhdmUsIG5leHQsIG1hc2ssICpkcDsKKyAgbXBfc2l6ZSAgdXNlZDsKKyAgaW50ICAgICAgaXg7CisKKyAgaWYoKHJlcyA9IHNfbXBfbHNoZChtcCwgZCAvIERJR0lUX0JJVCkpICE9IE1QX09LQVkpCisgICAgcmV0dXJuIHJlczsKKworICBkcCA9IERJR0lUUyhtcCk7IHVzZWQgPSBVU0VEKG1wKTsKKyAgZCAlPSBESUdJVF9CSVQ7CisKKyAgbWFzayA9ICgxIDw8IGQpIC0gMTsKKworICAvKiBJZiB0aGUgc2hpZnQgcmVxdWlyZXMgYW5vdGhlciBkaWdpdCwgbWFrZSBzdXJlIHdlJ3ZlIGdvdCBvbmUgdG8KKyAgICAgd29yayB3aXRoICovCisgIGlmKChkcFt1c2VkIC0gMV0gPj4gKERJR0lUX0JJVCAtIGQpKSAmIG1hc2spIHsKKyAgICBpZigocmVzID0gc19tcF9ncm93KG1wLCB1c2VkICsgMSkpICE9IE1QX09LQVkpCisgICAgICByZXR1cm4gcmVzOworICAgIGRwID0gRElHSVRTKG1wKTsKKyAgfQorCisgIC8qIERvIHRoZSBzaGlmdGluZy4uLiAqLworICBzYXZlID0gMDsKKyAgZm9yKGl4ID0gMDsgaXggPCB1c2VkOyBpeCsrKSB7CisgICAgbmV4dCA9IChkcFtpeF0gPj4gKERJR0lUX0JJVCAtIGQpKSAmIG1hc2s7CisgICAgZHBbaXhdID0gKGRwW2l4XSA8PCBkKSB8IHNhdmU7CisgICAgc2F2ZSA9IG5leHQ7CisgIH0KKworICAvKiBJZiwgYXQgdGhpcyBwb2ludCwgd2UgaGF2ZSBhIG5vbnplcm8gY2FycnlvdXQgaW50byB0aGUgbmV4dAorICAgICBkaWdpdCwgd2UnbGwgaW5jcmVhc2UgdGhlIHNpemUgYnkgb25lIGRpZ2l0LCBhbmQgc3RvcmUgaXQuLi4KKyAgICovCisgIGlmKHNhdmUpIHsKKyAgICBkcFt1c2VkXSA9IHNhdmU7CisgICAgVVNFRChtcCkgKz0gMTsKKyAgfQorCisgIHNfbXBfY2xhbXAobXApOworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgc19tcF9tdWxfMmQoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IHNfbXBfZGl2XzJkKG1wLCBkKSAqLworCisvKgorICBEaXZpZGUgdGhlIGludGVnZXIgYnkgMl5kLCB3aGVyZSBkIGlzIGEgbnVtYmVyIG9mIGJpdHMuICBUaGlzCisgIGFtb3VudHMgdG8gYSBiaXR3aXNlIHNoaWZ0IG9mIHRoZSB2YWx1ZSwgYW5kIGRvZXMgbm90IHJlcXVpcmUgdGhlCisgIGZ1bGwgZGl2aXNpb24gY29kZSAodXNlZCBpbiBCYXJyZXR0IHJlZHVjdGlvbiwgc2VlIGJlbG93KQorICovCit2b2lkICAgICBzX21wX2Rpdl8yZChtcF9pbnQgKm1wLCBtcF9kaWdpdCBkKQoreworICBpbnQgICAgICAgaXg7CisgIG1wX2RpZ2l0ICBzYXZlLCBuZXh0LCBtYXNrLCAqZHAgPSBESUdJVFMobXApOworCisgIHNfbXBfcnNoZChtcCwgZCAvIERJR0lUX0JJVCk7CisgIGQgJT0gRElHSVRfQklUOworCisgIG1hc2sgPSAoMSA8PCBkKSAtIDE7CisKKyAgc2F2ZSA9IDA7CisgIGZvcihpeCA9IFVTRUQobXApIC0gMTsgaXggPj0gMDsgaXgtLSkgeworICAgIG5leHQgPSBkcFtpeF0gJiBtYXNrOworICAgIGRwW2l4XSA9IChkcFtpeF0gPj4gZCkgfCAoc2F2ZSA8PCAoRElHSVRfQklUIC0gZCkpOworICAgIHNhdmUgPSBuZXh0OworICB9CisKKyAgc19tcF9jbGFtcChtcCk7CisKK30gLyogZW5kIHNfbXBfZGl2XzJkKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBzX21wX25vcm0oYSwgYikgKi8KKworLyoKKyAgc19tcF9ub3JtKGEsIGIpCisKKyAgTm9ybWFsaXplIGEgYW5kIGIgZm9yIGRpdmlzaW9uLCB3aGVyZSBiIGlzIHRoZSBkaXZpc29yLiAgSW4gb3JkZXIKKyAgdGhhdCB3ZSBtaWdodCBtYWtlIGdvb2QgZ3Vlc3NlcyBmb3IgcXVvdGllbnQgZGlnaXRzLCB3ZSB3YW50IHRoZQorICBsZWFkaW5nIGRpZ2l0IG9mIGIgdG8gYmUgYXQgbGVhc3QgaGFsZiB0aGUgcmFkaXgsIHdoaWNoIHdlCisgIGFjY29tcGxpc2ggYnkgbXVsdGlwbHlpbmcgYSBhbmQgYiBieSBhIGNvbnN0YW50LiAgVGhpcyBjb25zdGFudCBpcworICByZXR1cm5lZCAoc28gdGhhdCBpdCBjYW4gYmUgZGl2aWRlZCBiYWNrIG91dCBvZiB0aGUgcmVtYWluZGVyIGF0IHRoZQorICBlbmQgb2YgdGhlIGRpdmlzaW9uIHByb2Nlc3MpLgorCisgIFdlIG11bHRpcGx5IGJ5IHRoZSBzbWFsbGVzdCBwb3dlciBvZiAyIHRoYXQgZ2l2ZXMgdXMgYSBsZWFkaW5nIGRpZ2l0CisgIGF0IGxlYXN0IGhhbGYgdGhlIHJhZGl4LiAgQnkgY2hvb3NpbmcgYSBwb3dlciBvZiAyLCB3ZSBzaW1wbGlmeSB0aGUgCisgIG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpc2lvbiBzdGVwcyB0byBzaW1wbGUgc2hpZnRzLgorICovCittcF9kaWdpdCBzX21wX25vcm0obXBfaW50ICphLCBtcF9pbnQgKmIpCit7CisgIG1wX2RpZ2l0ICB0LCBkID0gMDsKKworICB0ID0gRElHSVQoYiwgVVNFRChiKSAtIDEpOworICB3aGlsZSh0IDwgKFJBRElYIC8gMikpIHsKKyAgICB0IDw8PSAxOworICAgICsrZDsKKyAgfQorICAgIAorICBpZihkICE9IDApIHsKKyAgICBzX21wX211bF8yZChhLCBkKTsKKyAgICBzX21wX211bF8yZChiLCBkKTsKKyAgfQorCisgIHJldHVybiBkOworCit9IC8qIGVuZCBzX21wX25vcm0oKSAqLworCisvKiB9fX0gKi8KKworLyogfX19ICovCisKKy8qIHt7eyBQcmltaXRpdmUgZGlnaXQgYXJpdGhtZXRpYyAqLworCisvKiB7e3sgc19tcF9hZGRfZChtcCwgZCkgKi8KKworLyogQWRkIGQgdG8gfG1wfCBpbiBwbGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworbXBfZXJyICAgc19tcF9hZGRfZChtcF9pbnQgKm1wLCBtcF9kaWdpdCBkKSAgICAvKiB1bnNpZ25lZCBkaWdpdCBhZGRpdGlvbiAqLworeworICBtcF93b3JkICAgdywgayA9IDA7CisgIG1wX3NpemUgICBpeCA9IDEsIHVzZWQgPSBVU0VEKG1wKTsKKyAgbXBfZGlnaXQgKmRwID0gRElHSVRTKG1wKTsKKworICB3ID0gZHBbMF0gKyBkOworICBkcFswXSA9IEFDQ1VNKHcpOworICBrID0gQ0FSUllPVVQodyk7CisKKyAgd2hpbGUoaXggPCB1c2VkICYmIGspIHsKKyAgICB3ID0gZHBbaXhdICsgazsKKyAgICBkcFtpeF0gPSBBQ0NVTSh3KTsKKyAgICBrID0gQ0FSUllPVVQodyk7CisgICAgKytpeDsKKyAgfQorCisgIGlmKGsgIT0gMCkgeworICAgIG1wX2VyciAgcmVzOworCisgICAgaWYoKHJlcyA9IHNfbXBfcGFkKG1wLCBVU0VEKG1wKSArIDEpKSAhPSBNUF9PS0FZKQorICAgICAgcmV0dXJuIHJlczsKKworICAgIERJR0lUKG1wLCBpeCkgPSBrOworICB9CisKKyAgcmV0dXJuIE1QX09LQVk7CisKK30gLyogZW5kIHNfbXBfYWRkX2QoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IHNfbXBfc3ViX2QobXAsIGQpICovCisKKy8qIFN1YnRyYWN0IGQgZnJvbSB8bXB8IGluIHBsYWNlLCBhc3N1bWVzIHxtcHwgPiBkICAgICAgICAgICAgICAgICAgICAgICAgKi8KK21wX2VyciAgIHNfbXBfc3ViX2QobXBfaW50ICptcCwgbXBfZGlnaXQgZCkgICAgLyogdW5zaWduZWQgZGlnaXQgc3VidHJhY3QgKi8KK3sKKyAgbXBfd29yZCAgIHcsIGIgPSAwOworICBtcF9zaXplICAgaXggPSAxLCB1c2VkID0gVVNFRChtcCk7CisgIG1wX2RpZ2l0ICpkcCA9IERJR0lUUyhtcCk7CisKKyAgLyogQ29tcHV0ZSBpbml0aWFsIHN1YnRyYWN0aW9uICAgICovCisgIHcgPSAoUkFESVggKyBkcFswXSkgLSBkOworICBiID0gQ0FSUllPVVQodykgPyAwIDogMTsKKyAgZHBbMF0gPSBBQ0NVTSh3KTsKKworICAvKiBQcm9wYWdhdGUgYm9ycm93cyBsZWZ0d2FyZCAgICAgKi8KKyAgd2hpbGUoYiAmJiBpeCA8IHVzZWQpIHsKKyAgICB3ID0gKFJBRElYICsgZHBbaXhdKSAtIGI7CisgICAgYiA9IENBUlJZT1VUKHcpID8gMCA6IDE7CisgICAgZHBbaXhdID0gQUNDVU0odyk7CisgICAgKytpeDsKKyAgfQorCisgIC8qIFJlbW92ZSBsZWFkaW5nIHplcm9lcyAgICAgICAgICAqLworICBzX21wX2NsYW1wKG1wKTsKKworICAvKiBJZiB3ZSBoYXZlIGEgYm9ycm93IG91dCwgaXQncyBhIHZpb2xhdGlvbiBvZiB0aGUgaW5wdXQgaW52YXJpYW50ICovCisgIGlmKGIpCisgICAgcmV0dXJuIE1QX1JBTkdFOworICBlbHNlCisgICAgcmV0dXJuIE1QX09LQVk7CisKK30gLyogZW5kIHNfbXBfc3ViX2QoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IHNfbXBfbXVsX2QoYSwgZCkgKi8KKworLyogQ29tcHV0ZSBhID0gYSAqIGQsIHNpbmdsZSBkaWdpdCBtdWx0aXBsaWNhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAqLworbXBfZXJyICAgc19tcF9tdWxfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGQpCit7CisgIG1wX3dvcmQgdywgayA9IDA7CisgIG1wX3NpemUgaXgsIG1heDsKKyAgbXBfZXJyICByZXM7CisgIG1wX2RpZ2l0ICpkcCA9IERJR0lUUyhhKTsKKworICAvKgorICAgIFNpbmdsZS1kaWdpdCBtdWx0aXBsaWNhdGlvbiB3aWxsIGluY3JlYXNlIHRoZSBwcmVjaXNpb24gb2YgdGhlCisgICAgb3V0cHV0IGJ5IGF0IG1vc3Qgb25lIGRpZ2l0LiAgSG93ZXZlciwgd2UgY2FuIGRldGVjdCB3aGVuIHRoaXMKKyAgICB3aWxsIGhhcHBlbiAtLSBpZiB0aGUgaGlnaC1vcmRlciBkaWdpdCBvZiBhLCB0aW1lcyBkLCBnaXZlcyBhCisgICAgdHdvLWRpZ2l0IHJlc3VsdCwgdGhlbiB0aGUgcHJlY2lzaW9uIG9mIHRoZSByZXN1bHQgd2lsbCBpbmNyZWFzZTsKKyAgICBvdGhlcndpc2UgaXQgd29uJ3QuICBXZSB1c2UgdGhpcyBmYWN0IHRvIGF2b2lkIGNhbGxpbmcgc19tcF9wYWQoKQorICAgIHVubGVzcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4KKyAgICovCisgIG1heCA9IFVTRUQoYSk7CisgIHcgPSBkcFttYXggLSAxXSAqIGQ7CisgIGlmKENBUlJZT1VUKHcpICE9IDApIHsKKyAgICBpZigocmVzID0gc19tcF9wYWQoYSwgbWF4ICsgMSkpICE9IE1QX09LQVkpCisgICAgICByZXR1cm4gcmVzOworICAgIGRwID0gRElHSVRTKGEpOworICB9CisKKyAgZm9yKGl4ID0gMDsgaXggPCBtYXg7IGl4KyspIHsKKyAgICB3ID0gKGRwW2l4XSAqIGQpICsgazsKKyAgICBkcFtpeF0gPSBBQ0NVTSh3KTsKKyAgICBrID0gQ0FSUllPVVQodyk7CisgIH0KKworICAvKiBJZiB0aGVyZSBpcyBhIHByZWNpc2lvbiBpbmNyZWFzZSwgdGFrZSBjYXJlIG9mIGl0IGhlcmU7IHRoZSBhYm92ZQorICAgICB0ZXN0IGd1YXJhbnRlZXMgd2UgaGF2ZSBlbm91Z2ggc3RvcmFnZSB0byBkbyB0aGlzIHNhZmVseS4KKyAgICovCisgIGlmKGspIHsKKyAgICBkcFttYXhdID0gazsgCisgICAgVVNFRChhKSA9IG1heCArIDE7CisgIH0KKworICBzX21wX2NsYW1wKGEpOworCisgIHJldHVybiBNUF9PS0FZOworICAKK30gLyogZW5kIHNfbXBfbXVsX2QoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IHNfbXBfZGl2X2QobXAsIGQsIHIpICovCisKKy8qCisgIHNfbXBfZGl2X2QobXAsIGQsIHIpCisKKyAgQ29tcHV0ZSB0aGUgcXVvdGllbnQgbXAgPSBtcCAvIGQgYW5kIHJlbWFpbmRlciByID0gbXAgbW9kIGQsIGZvciBhCisgIHNpbmdsZSBkaWdpdCBkLiAgSWYgciBpcyBudWxsLCB0aGUgcmVtYWluZGVyIHdpbGwgYmUgZGlzY2FyZGVkLgorICovCisKK21wX2VyciAgIHNfbXBfZGl2X2QobXBfaW50ICptcCwgbXBfZGlnaXQgZCwgbXBfZGlnaXQgKnIpCit7CisgIG1wX3dvcmQgICB3ID0gMCwgdDsKKyAgbXBfaW50ICAgIHF1b3Q7CisgIG1wX2VyciAgICByZXM7CisgIG1wX2RpZ2l0ICpkcCA9IERJR0lUUyhtcCksICpxcDsKKyAgaW50ICAgICAgIGl4OworCisgIGlmKGQgPT0gMCkKKyAgICByZXR1cm4gTVBfUkFOR0U7CisKKyAgLyogTWFrZSByb29tIGZvciB0aGUgcXVvdGllbnQgKi8KKyAgaWYoKHJlcyA9IG1wX2luaXRfc2l6ZSgmcXVvdCwgVVNFRChtcCkpKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisKKyAgVVNFRCgmcXVvdCkgPSBVU0VEKG1wKTsgLyogc28gY2xhbXBpbmcgd2lsbCB3b3JrIGJlbG93ICovCisgIHFwID0gRElHSVRTKCZxdW90KTsKKworICAvKiBEaXZpZGUgd2l0aG91dCBzdWJ0cmFjdGlvbiAqLworICBmb3IoaXggPSBVU0VEKG1wKSAtIDE7IGl4ID49IDA7IGl4LS0pIHsKKyAgICB3ID0gKHcgPDwgRElHSVRfQklUKSB8IGRwW2l4XTsKKworICAgIGlmKHcgPj0gZCkgeworICAgICAgdCA9IHcgLyBkOworICAgICAgdyA9IHcgJSBkOworICAgIH0gZWxzZSB7CisgICAgICB0ID0gMDsKKyAgICB9CisKKyAgICBxcFtpeF0gPSB0OworICB9CisKKyAgLyogRGVsaXZlciB0aGUgcmVtYWluZGVyLCBpZiBkZXNpcmVkICovCisgIGlmKHIpCisgICAgKnIgPSB3OworCisgIHNfbXBfY2xhbXAoJnF1b3QpOworICBtcF9leGNoKCZxdW90LCBtcCk7CisgIG1wX2NsZWFyKCZxdW90KTsKKworICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgc19tcF9kaXZfZCgpICovCisKKy8qIH19fSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IFByaW1pdGl2ZSBmdWxsIGFyaXRobWV0aWMgKi8KKworLyoge3t7IHNfbXBfYWRkKGEsIGIpICovCisKKy8qIENvbXB1dGUgYSA9IHxhfCArIHxifCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KK21wX2VyciAgIHNfbXBfYWRkKG1wX2ludCAqYSwgbXBfaW50ICpiKSAgICAgICAgLyogbWFnbml0dWRlIGFkZGl0aW9uICAgICAgKi8KK3sKKyAgbXBfd29yZCAgIHcgPSAwOworICBtcF9kaWdpdCAqcGEsICpwYjsKKyAgbXBfc2l6ZSAgIGl4LCB1c2VkID0gVVNFRChiKTsKKyAgbXBfZXJyICAgIHJlczsKKworICAvKiBNYWtlIHN1cmUgYSBoYXMgZW5vdWdoIHByZWNpc2lvbiBmb3IgdGhlIG91dHB1dCB2YWx1ZSAqLworICBpZigodXNlZCA+IFVTRUQoYSkpICYmIChyZXMgPSBzX21wX3BhZChhLCB1c2VkKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworCisgIC8qCisgICAgQWRkIHVwIGFsbCBkaWdpdHMgdXAgdG8gdGhlIHByZWNpc2lvbiBvZiBiLiAgSWYgYiBoYWQgaW5pdGlhbGx5CisgICAgdGhlIHNhbWUgcHJlY2lzaW9uIGFzIGEsIG9yIGdyZWF0ZXIsIHdlIHRvb2sgY2FyZSBvZiBpdCBieSB0aGUKKyAgICBwYWRkaW5nIHN0ZXAgYWJvdmUsIHNvIHRoZXJlIGlzIG5vIHByb2JsZW0uICBJZiBiIGhhZCBpbml0aWFsbHkKKyAgICBsZXNzIHByZWNpc2lvbiwgd2UnbGwgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIGNhcnJ5IG91dCBpcyBkdWx5CisgICAgcHJvcGFnYXRlZCB1cHdhcmQgYW1vbmcgdGhlIGhpZ2hlci1vcmRlciBkaWdpdHMgb2YgdGhlIHN1bS4KKyAgICovCisgIHBhID0gRElHSVRTKGEpOworICBwYiA9IERJR0lUUyhiKTsKKyAgZm9yKGl4ID0gMDsgaXggPCB1c2VkOyArK2l4KSB7CisgICAgdyArPSAqcGEgKyAqcGIrKzsKKyAgICAqcGErKyA9IEFDQ1VNKHcpOworICAgIHcgPSBDQVJSWU9VVCh3KTsKKyAgfQorCisgIC8qIElmIHdlIHJ1biBvdXQgb2YgJ2InIGRpZ2l0cyBiZWZvcmUgd2UncmUgYWN0dWFsbHkgZG9uZSwgbWFrZQorICAgICBzdXJlIHRoZSBjYXJyaWVzIGdldCBwcm9wYWdhdGVkIHVwd2FyZC4uLiAgCisgICAqLworICB1c2VkID0gVVNFRChhKTsKKyAgd2hpbGUodyAmJiBpeCA8IHVzZWQpIHsKKyAgICB3ICs9ICpwYTsKKyAgICAqcGErKyA9IEFDQ1VNKHcpOworICAgIHcgPSBDQVJSWU9VVCh3KTsKKyAgICArK2l4OworICB9CisKKyAgLyogSWYgdGhlcmUncyBhbiBvdmVyYWxsIGNhcnJ5IG91dCwgaW5jcmVhc2UgcHJlY2lzaW9uIGFuZCBpbmNsdWRlCisgICAgIGl0LiAgV2UgY291bGQgaGF2ZSBkb25lIHRoaXMgaW5pdGlhbGx5LCBidXQgd2h5IHRvdWNoIHRoZSBtZW1vcnkKKyAgICAgYWxsb2NhdG9yIHVubGVzcyB3ZSdyZSBzdXJlIHdlIGhhdmUgdG8/CisgICAqLworICBpZih3KSB7CisgICAgaWYoKHJlcyA9IHNfbXBfcGFkKGEsIHVzZWQgKyAxKSkgIT0gTVBfT0tBWSkKKyAgICAgIHJldHVybiByZXM7CisKKyAgICBESUdJVChhLCBpeCkgPSB3OyAgLyogcGEgbWF5IG5vdCBiZSB2YWxpZCBhZnRlciBzX21wX3BhZCgpIGNhbGwgKi8KKyAgfQorCisgIHJldHVybiBNUF9PS0FZOworCit9IC8qIGVuZCBzX21wX2FkZCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgc19tcF9zdWIoYSwgYikgKi8KKworLyogQ29tcHV0ZSBhID0gfGF8IC0gfGJ8LCBhc3N1bWVzIHxhfCA+PSB8YnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworbXBfZXJyICAgc19tcF9zdWIobXBfaW50ICphLCBtcF9pbnQgKmIpICAgICAgICAvKiBtYWduaXR1ZGUgc3VidHJhY3QgICAgICAqLworeworICBtcF93b3JkICAgdyA9IDA7CisgIG1wX2RpZ2l0ICpwYSwgKnBiOworICBtcF9zaXplICAgaXgsIHVzZWQgPSBVU0VEKGIpOworCisgIC8qCisgICAgU3VidHJhY3QgYW5kIHByb3BhZ2F0ZSBib3Jyb3cuICBVcCB0byB0aGUgcHJlY2lzaW9uIG9mIGIsIHRoaXMKKyAgICBhY2NvdW50cyBmb3IgdGhlIGRpZ2l0cyBvZiBiOyBhZnRlciB0aGF0LCB3ZSBqdXN0IG1ha2Ugc3VyZSB0aGUKKyAgICBjYXJyaWVzIGdldCB0byB0aGUgcmlnaHQgcGxhY2UuICBUaGlzIHNhdmVzIGhhdmluZyB0byBwYWQgYiBvdXQgdG8KKyAgICB0aGUgcHJlY2lzaW9uIG9mIGEganVzdCB0byBtYWtlIHRoZSBsb29wcyB3b3JrIHJpZ2h0Li4uCisgICAqLworICBwYSA9IERJR0lUUyhhKTsKKyAgcGIgPSBESUdJVFMoYik7CisKKyAgZm9yKGl4ID0gMDsgaXggPCB1c2VkOyArK2l4KSB7CisgICAgdyA9IChSQURJWCArICpwYSkgLSB3IC0gKnBiKys7CisgICAgKnBhKysgPSBBQ0NVTSh3KTsKKyAgICB3ID0gQ0FSUllPVVQodykgPyAwIDogMTsKKyAgfQorCisgIHVzZWQgPSBVU0VEKGEpOworICB3aGlsZShpeCA8IHVzZWQpIHsKKyAgICB3ID0gUkFESVggKyAqcGEgLSB3OworICAgICpwYSsrID0gQUNDVU0odyk7CisgICAgdyA9IENBUlJZT1VUKHcpID8gMCA6IDE7CisgICAgKytpeDsKKyAgfQorCisgIC8qIENsb2JiZXIgYW55IGxlYWRpbmcgemVyb2VzIHdlIGNyZWF0ZWQgICAgKi8KKyAgc19tcF9jbGFtcChhKTsKKworICAvKiAKKyAgICAgSWYgdGhlcmUgd2FzIGEgYm9ycm93IG91dCwgdGhlbiB8YnwgPiB8YXwgaW4gdmlvbGF0aW9uCisgICAgIG9mIG91ciBpbnB1dCBpbnZhcmlhbnQuICBXZSd2ZSBhbHJlYWR5IGRvbmUgdGhlIHdvcmssCisgICAgIGJ1dCB3ZSdsbCBhdCBsZWFzdCBjb21wbGFpbiBhYm91dCBpdC4uLgorICAgKi8KKyAgaWYodykKKyAgICByZXR1cm4gTVBfUkFOR0U7CisgIGVsc2UKKyAgICByZXR1cm4gTVBfT0tBWTsKKworfSAvKiBlbmQgc19tcF9zdWIoKSAqLworCisvKiB9fX0gKi8KKworbXBfZXJyICAgc19tcF9yZWR1Y2UobXBfaW50ICp4LCBtcF9pbnQgKm0sIG1wX2ludCAqbXUpCit7CisgIG1wX2ludCAgIHE7CisgIG1wX2VyciAgIHJlczsKKyAgbXBfc2l6ZSAgdW0gPSBVU0VEKG0pOworCisgIGlmKChyZXMgPSBtcF9pbml0X2NvcHkoJnEsIHgpKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisKKyAgc19tcF9yc2hkKCZxLCB1bSAtIDEpOyAgICAgICAvKiBxMSA9IHggLyBiXihrLTEpICAqLworICBzX21wX211bCgmcSwgbXUpOyAgICAgICAgICAgIC8qIHEyID0gcTEgKiBtdSAgICAgICovCisgIHNfbXBfcnNoZCgmcSwgdW0gKyAxKTsgICAgICAgLyogcTMgPSBxMiAvIGJeKGsrMSkgKi8KKworICAvKiB4ID0geCBtb2QgYl4oaysxKSwgcXVpY2sgKG5vIGRpdmlzaW9uKSAqLworICBzX21wX21vZF8yZCh4LCAobXBfZGlnaXQpKERJR0lUX0JJVCAqICh1bSArIDEpKSk7CisKKyAgLyogcSA9IHEgKiBtIG1vZCBiXihrKzEpLCBxdWljayAobm8gZGl2aXNpb24pLCB1c2VzIHRoZSBzaG9ydCBtdWx0aXBsaWVyICovCisjaWZuZGVmIFNIUlRfTVVMCisgIHNfbXBfbXVsKCZxLCBtKTsKKyAgc19tcF9tb2RfMmQoJnEsIChtcF9kaWdpdCkoRElHSVRfQklUICogKHVtICsgMSkpKTsKKyNlbHNlCisgIHNfbXBfbXVsX2RpZygmcSwgbSwgdW0gKyAxKTsKKyNlbmRpZiAgCisKKyAgLyogeCA9IHggLSBxICovCisgIGlmKChyZXMgPSBtcF9zdWIoeCwgJnEsIHgpKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gQ0xFQU5VUDsKKworICAvKiBJZiB4IDwgMCwgYWRkIGJeKGsrMSkgdG8gaXQgKi8KKyAgaWYobXBfY21wX3ooeCkgPCAwKSB7CisgICAgbXBfc2V0KCZxLCAxKTsKKyAgICBpZigocmVzID0gc19tcF9sc2hkKCZxLCB1bSArIDEpKSAhPSBNUF9PS0FZKQorICAgICAgZ290byBDTEVBTlVQOworICAgIGlmKChyZXMgPSBtcF9hZGQoeCwgJnEsIHgpKSAhPSBNUF9PS0FZKQorICAgICAgZ290byBDTEVBTlVQOworICB9CisKKyAgLyogQmFjayBvZmYgaWYgaXQncyB0b28gYmlnICovCisgIHdoaWxlKG1wX2NtcCh4LCBtKSA+PSAwKSB7CisgICAgaWYoKHJlcyA9IHNfbXBfc3ViKHgsIG0pKSAhPSBNUF9PS0FZKQorICAgICAgYnJlYWs7CisgIH0KKworIENMRUFOVVA6CisgIG1wX2NsZWFyKCZxKTsKKworICByZXR1cm4gcmVzOworCit9IC8qIGVuZCBzX21wX3JlZHVjZSgpICovCisKKworCisvKiB7e3sgc19tcF9tdWwoYSwgYikgKi8KKworLyogQ29tcHV0ZSBhID0gfGF8ICogfGJ8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworbXBfZXJyICAgc19tcF9tdWwobXBfaW50ICphLCBtcF9pbnQgKmIpCit7CisgIG1wX3dvcmQgICB3LCBrID0gMDsKKyAgbXBfaW50ICAgIHRtcDsKKyAgbXBfZXJyICAgIHJlczsKKyAgbXBfc2l6ZSAgIGl4LCBqeCwgdWEgPSBVU0VEKGEpLCB1YiA9IFVTRUQoYik7CisgIG1wX2RpZ2l0ICpwYSwgKnBiLCAqcHQsICpwYnQ7CisKKyAgaWYoKHJlcyA9IG1wX2luaXRfc2l6ZSgmdG1wLCB1YSArIHViKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworCisgIC8qIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgbGVmdC1wYWRkaW5nIHdpdGggemVyb2VzLi4uICovCisgIFVTRUQoJnRtcCkgPSB1YSArIHViOworCisgIC8qIFdlJ3JlIGdvaW5nIHRvIG5lZWQgdGhlIGJhc2UgdmFsdWUgZWFjaCBpdGVyYXRpb24gKi8KKyAgcGJ0ID0gRElHSVRTKCZ0bXApOworCisgIC8qIE91dGVyIGxvb3A6ICBEaWdpdHMgb2YgYiAqLworCisgIHBiID0gRElHSVRTKGIpOworICBmb3IoaXggPSAwOyBpeCA8IHViOyArK2l4LCArK3BiKSB7CisgICAgaWYoKnBiID09IDApIAorICAgICAgY29udGludWU7CisKKyAgICAvKiBJbm5lciBwcm9kdWN0OiAgRGlnaXRzIG9mIGEgKi8KKyAgICBwYSA9IERJR0lUUyhhKTsKKyAgICBmb3IoanggPSAwOyBqeCA8IHVhOyArK2p4LCArK3BhKSB7CisgICAgICBwdCA9IHBidCArIGl4ICsgang7CisgICAgICB3ID0gKnBiICogKnBhICsgayArICpwdDsKKyAgICAgICpwdCA9IEFDQ1VNKHcpOworICAgICAgayA9IENBUlJZT1VUKHcpOworICAgIH0KKworICAgIHBidFtpeCArIGp4XSA9IGs7CisgICAgayA9IDA7CisgIH0KKworICBzX21wX2NsYW1wKCZ0bXApOworICBzX21wX2V4Y2goJnRtcCwgYSk7CisKKyAgbXBfY2xlYXIoJnRtcCk7CisKKyAgcmV0dXJuIE1QX09LQVk7CisKK30gLyogZW5kIHNfbXBfbXVsKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBzX21wX2ttdWwoYSwgYiwgb3V0LCBsZW4pICovCisKKyNpZiAwCit2b2lkICAgc19tcF9rbXVsKG1wX2RpZ2l0ICphLCBtcF9kaWdpdCAqYiwgbXBfZGlnaXQgKm91dCwgbXBfc2l6ZSBsZW4pCit7CisgIG1wX3dvcmQgICB3LCBrID0gMDsKKyAgbXBfc2l6ZSAgIGl4LCBqeDsKKyAgbXBfZGlnaXQgKnBhLCAqcHQ7CisKKyAgZm9yKGl4ID0gMDsgaXggPCBsZW47ICsraXgsICsrYikgeworICAgIGlmKCpiID09IDApCisgICAgICBjb250aW51ZTsKKyAgICAKKyAgICBwYSA9IGE7CisgICAgZm9yKGp4ID0gMDsganggPCBsZW47ICsrangsICsrcGEpIHsKKyAgICAgIHB0ID0gb3V0ICsgaXggKyBqeDsKKyAgICAgIHcgPSAqYiAqICpwYSArIGsgKyAqcHQ7CisgICAgICAqcHQgPSBBQ0NVTSh3KTsKKyAgICAgIGsgPSBDQVJSWU9VVCh3KTsKKyAgICB9CisKKyAgICBvdXRbaXggKyBqeF0gPSBrOworICAgIGsgPSAwOworICB9CisKK30gLyogZW5kIHNfbXBfa211bCgpICovCisjZW5kaWYKKworLyogfX19ICovCisKKy8qIHt7eyBzX21wX3NxcihhKSAqLworCisvKgorICBDb21wdXRlcyB0aGUgc3F1YXJlIG9mIGEsIGluIHBsYWNlLiAgVGhpcyBjYW4gYmUgZG9uZSBtb3JlCisgIGVmZmljaWVudGx5IHRoYW4gYSBnZW5lcmFsIG11bHRpcGxpY2F0aW9uLCBiZWNhdXNlIG1hbnkgb2YgdGhlCisgIGNvbXB1dGF0aW9uIHN0ZXBzIGFyZSByZWR1bmRhbnQgd2hlbiBzcXVhcmluZy4gIFRoZSBpbm5lciBwcm9kdWN0CisgIHN0ZXAgaXMgYSBiaXQgbW9yZSBjb21wbGljYXRlZCwgYnV0IHdlIHNhdmUgYSBmYWlyIG51bWJlciBvZgorICBpdGVyYXRpb25zIG9mIHRoZSBtdWx0aXBsaWNhdGlvbiBsb29wLgorICovCisjaWYgTVBfU1FVQVJFCittcF9lcnIgICBzX21wX3NxcihtcF9pbnQgKmEpCit7CisgIG1wX3dvcmQgIHcsIGsgPSAwOworICBtcF9pbnQgICB0bXA7CisgIG1wX2VyciAgIHJlczsKKyAgbXBfc2l6ZSAgaXgsIGp4LCBreCwgdXNlZCA9IFVTRUQoYSk7CisgIG1wX2RpZ2l0ICpwYTEsICpwYTIsICpwdCwgKnBidDsKKworICBpZigocmVzID0gbXBfaW5pdF9zaXplKCZ0bXAsIDIgKiB1c2VkKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworCisgIC8qIExlZnQtcGFkIHdpdGggemVyb2VzICovCisgIFVTRUQoJnRtcCkgPSAyICogdXNlZDsKKworICAvKiBXZSBuZWVkIHRoZSBiYXNlIHZhbHVlIGVhY2ggdGltZSB0aHJvdWdoIHRoZSBsb29wICovCisgIHBidCA9IERJR0lUUygmdG1wKTsKKworICBwYTEgPSBESUdJVFMoYSk7CisgIGZvcihpeCA9IDA7IGl4IDwgdXNlZDsgKytpeCwgKytwYTEpIHsKKyAgICBpZigqcGExID09IDApCisgICAgICBjb250aW51ZTsKKworICAgIHcgPSBESUdJVCgmdG1wLCBpeCArIGl4KSArICgqcGExICogKnBhMSk7CisKKyAgICBwYnRbaXggKyBpeF0gPSBBQ0NVTSh3KTsKKyAgICBrID0gQ0FSUllPVVQodyk7CisKKyAgICAvKgorICAgICAgVGhlIGlubmVyIHByb2R1Y3QgaXMgY29tcHV0ZWQgYXM6CisKKyAgICAgICAgIChDLCBTKSA9IHRbaSxqXSArIDIgYVtpXSBhW2pdICsgQworCisgICAgICBUaGlzIGNhbiBvdmVyZmxvdyB3aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiBhbiBtcF93b3JkLCBhbmQKKyAgICAgIHNpbmNlIEMgYXJpdGhtZXRpYyBkb2VzIG5vdCBwcm92aWRlIGFueSB3YXkgdG8gY2hlY2sgZm9yCisgICAgICBvdmVyZmxvdywgd2UgaGF2ZSB0byBjaGVjayBleHBsaWNpdGx5IGZvciBvdmVyZmxvdyBjb25kaXRpb25zCisgICAgICBiZWZvcmUgdGhleSBoYXBwZW4uCisgICAgICovCisgICAgZm9yKGp4ID0gaXggKyAxLCBwYTIgPSBESUdJVFMoYSkgKyBqeDsganggPCB1c2VkOyArK2p4LCArK3BhMikgeworICAgICAgbXBfd29yZCAgdSA9IDAsIHY7CisgICAgICAKKyAgICAgIC8qIFN0b3JlIHRoaXMgaW4gYSB0ZW1wb3JhcnkgdG8gYXZvaWQgaW5kaXJlY3Rpb25zIGxhdGVyICovCisgICAgICBwdCA9IHBidCArIGl4ICsgang7CisKKyAgICAgIC8qIENvbXB1dGUgdGhlIG11bHRpcGxpY2F0aXZlIHN0ZXAgKi8KKyAgICAgIHcgPSAqcGExICogKnBhMjsKKworICAgICAgLyogSWYgdyBpcyBtb3JlIHRoYW4gaGFsZiBNUF9XT1JEX01BWCwgdGhlIGRvdWJsaW5nIHdpbGwKKwkgb3ZlcmZsb3csIGFuZCB3ZSBuZWVkIHRvIHJlY29yZCBhIGNhcnJ5IG91dCBpbnRvIHRoZSBuZXh0CisJIHdvcmQgKi8KKyAgICAgIHUgPSAodyA+PiAoTVBfV09SRF9CSVQgLSAxKSkgJiAxOworCisgICAgICAvKiBEb3VibGUgd2hhdCB3ZSd2ZSBnb3QsIG92ZXJmbG93IHdpbGwgYmUgaWdub3JlZCBhcyBkZWZpbmVkCisJIGZvciBDIGFyaXRobWV0aWMgKHdlJ3ZlIGFscmVhZHkgbm90ZWQgaWYgaXQgaXMgdG8gb2NjdXIpCisgICAgICAgKi8KKyAgICAgIHcgKj0gMjsKKworICAgICAgLyogQ29tcHV0ZSB0aGUgYWRkaXRpdmUgc3RlcCAqLworICAgICAgdiA9ICpwdCArIGs7CisKKyAgICAgIC8qIElmIHdlIGRvIG5vdCBhbHJlYWR5IGhhdmUgYW4gb3ZlcmZsb3cgY2FycnksIGNoZWNrIHRvIHNlZQorCSBpZiB0aGUgYWRkaXRpb24gd2lsbCBjYXVzZSBvbmUsIGFuZCBzZXQgdGhlIGNhcnJ5IG91dCBpZiBzbyAKKyAgICAgICAqLworICAgICAgdSB8PSAoKE1QX1dPUkRfTUFYIC0gdikgPCB3KTsKKworICAgICAgLyogQWRkIGluIHRoZSByZXN0LCBhZ2FpbiBpZ25vcmluZyBvdmVyZmxvdyAqLworICAgICAgdyArPSB2OworCisgICAgICAvKiBTZXQgdGhlIGksaiBkaWdpdCBvZiB0aGUgb3V0cHV0ICovCisgICAgICAqcHQgPSBBQ0NVTSh3KTsKKworICAgICAgLyogU2F2ZSBjYXJyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIG5leHQgaXRlcmF0aW9uIG9mIHRoZSBsb29wLgorCSBUaGlzIGlzIHdoeSBrIG11c3QgYmUgYW4gbXBfd29yZCwgaW5zdGVhZCBvZiBhbiBtcF9kaWdpdCAqLworICAgICAgayA9IENBUlJZT1VUKHcpIHwgKHUgPDwgRElHSVRfQklUKTsKKworICAgIH0gLyogZm9yKGp4IC4uLikgKi8KKworICAgIC8qIFNldCB0aGUgbGFzdCBkaWdpdCBpbiB0aGUgY3ljbGUgYW5kIHJlc2V0IHRoZSBjYXJyeSAqLworICAgIGsgPSBESUdJVCgmdG1wLCBpeCArIGp4KSArIGs7CisgICAgcGJ0W2l4ICsganhdID0gQUNDVU0oayk7CisgICAgayA9IENBUlJZT1VUKGspOworCisgICAgLyogSWYgd2UgYXJlIGNhcnJ5aW5nIG91dCwgcHJvcGFnYXRlIHRoZSBjYXJyeSB0byB0aGUgbmV4dCBkaWdpdAorICAgICAgIGluIHRoZSBvdXRwdXQuICBUaGlzIG1heSBjYXNjYWRlLCBzbyB3ZSBoYXZlIHRvIGJlIHNvbWV3aGF0CisgICAgICAgY2lyY3Vtc3BlY3QgLS0gYnV0IHdlIHdpbGwgaGF2ZSBlbm91Z2ggcHJlY2lzaW9uIGluIHRoZSBvdXRwdXQKKyAgICAgICB0aGF0IHdlIHdvbid0IG92ZXJmbG93IAorICAgICAqLworICAgIGt4ID0gMTsKKyAgICB3aGlsZShrKSB7CisgICAgICBrID0gcGJ0W2l4ICsganggKyBreF0gKyAxOworICAgICAgcGJ0W2l4ICsganggKyBreF0gPSBBQ0NVTShrKTsKKyAgICAgIGsgPSBDQVJSWU9VVChrKTsKKyAgICAgICsra3g7CisgICAgfQorICB9IC8qIGZvcihpeCAuLi4pICovCisKKyAgc19tcF9jbGFtcCgmdG1wKTsKKyAgc19tcF9leGNoKCZ0bXAsIGEpOworCisgIG1wX2NsZWFyKCZ0bXApOworCisgIHJldHVybiBNUF9PS0FZOworCit9IC8qIGVuZCBzX21wX3NxcigpICovCisjZW5kaWYKKworLyogfX19ICovCisKKy8qIHt7eyBzX21wX2RpdihhLCBiKSAqLworCisvKgorICBzX21wX2RpdihhLCBiKQorCisgIENvbXB1dGUgYSA9IGEgLyBiIGFuZCBiID0gYSBtb2QgYi4gIEFzc3VtZXMgYiA+IGEuCisgKi8KKworbXBfZXJyICAgc19tcF9kaXYobXBfaW50ICphLCBtcF9pbnQgKmIpCit7CisgIG1wX2ludCAgIHF1b3QsIHJlbSwgdDsKKyAgbXBfd29yZCAgcTsKKyAgbXBfZXJyICAgcmVzOworICBtcF9kaWdpdCBkOworICBpbnQgICAgICBpeDsKKworICBpZihtcF9jbXBfeihiKSA9PSAwKQorICAgIHJldHVybiBNUF9SQU5HRTsKKworICAvKiBTaG9ydGN1dCBpZiBiIGlzIHBvd2VyIG9mIHR3byAqLworICBpZigoaXggPSBzX21wX2lzcG93MihiKSkgPj0gMCkgeworICAgIG1wX2NvcHkoYSwgYik7ICAvKiBuZWVkIHRoaXMgZm9yIHJlbWFpbmRlciAqLworICAgIHNfbXBfZGl2XzJkKGEsIChtcF9kaWdpdClpeCk7CisgICAgc19tcF9tb2RfMmQoYiwgKG1wX2RpZ2l0KWl4KTsKKworICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogQWxsb2NhdGUgc3BhY2UgdG8gc3RvcmUgdGhlIHF1b3RpZW50ICovCisgIGlmKChyZXMgPSBtcF9pbml0X3NpemUoJnF1b3QsIFVTRUQoYSkpKSAhPSBNUF9PS0FZKQorICAgIHJldHVybiByZXM7CisKKyAgLyogQSB3b3JraW5nIHRlbXBvcmFyeSBmb3IgZGl2aXNpb24gICAgICovCisgIGlmKChyZXMgPSBtcF9pbml0X3NpemUoJnQsIFVTRUQoYSkpKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gVDsKKworICAvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHJlbWFpbmRlciAgICAgKi8KKyAgaWYoKHJlcyA9IG1wX2luaXRfc2l6ZSgmcmVtLCBVU0VEKGEpKSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFJFTTsKKworICAvKiBOb3JtYWxpemUgdG8gb3B0aW1pemUgZ3Vlc3NpbmcgICAgICAgKi8KKyAgZCA9IHNfbXBfbm9ybShhLCBiKTsKKworICAvKiBQZXJmb3JtIHRoZSBkaXZpc2lvbiBpdHNlbGYuLi53b28hICAgKi8KKyAgaXggPSBVU0VEKGEpIC0gMTsKKworICB3aGlsZShpeCA+PSAwKSB7CisgICAgLyogRmluZCBhIHBhcnRpYWwgc3Vic3RyaW5nIG9mIGEgd2hpY2ggaXMgYXQgbGVhc3QgYiAqLworICAgIHdoaWxlKHNfbXBfY21wKCZyZW0sIGIpIDwgMCAmJiBpeCA+PSAwKSB7CisgICAgICBpZigocmVzID0gc19tcF9sc2hkKCZyZW0sIDEpKSAhPSBNUF9PS0FZKSAKKwlnb3RvIENMRUFOVVA7CisKKyAgICAgIGlmKChyZXMgPSBzX21wX2xzaGQoJnF1b3QsIDEpKSAhPSBNUF9PS0FZKQorCWdvdG8gQ0xFQU5VUDsKKworICAgICAgRElHSVQoJnJlbSwgMCkgPSBESUdJVChhLCBpeCk7CisgICAgICBzX21wX2NsYW1wKCZyZW0pOworICAgICAgLS1peDsKKyAgICB9CisKKyAgICAvKiBJZiB3ZSBkaWRuJ3QgZmluZCBvbmUsIHdlJ3JlIGZpbmlzaGVkIGRpdmlkaW5nICAgICovCisgICAgaWYoc19tcF9jbXAoJnJlbSwgYikgPCAwKSAKKyAgICAgIGJyZWFrOyAgICAKKworICAgIC8qIENvbXB1dGUgYSBndWVzcyBmb3IgdGhlIG5leHQgcXVvdGllbnQgZGlnaXQgICAgICAgKi8KKyAgICBxID0gRElHSVQoJnJlbSwgVVNFRCgmcmVtKSAtIDEpOworICAgIGlmKHEgPD0gRElHSVQoYiwgVVNFRChiKSAtIDEpICYmIFVTRUQoJnJlbSkgPiAxKQorICAgICAgcSA9IChxIDw8IERJR0lUX0JJVCkgfCBESUdJVCgmcmVtLCBVU0VEKCZyZW0pIC0gMik7CisKKyAgICBxIC89IERJR0lUKGIsIFVTRUQoYikgLSAxKTsKKworICAgIC8qIFRoZSBndWVzcyBjYW4gYmUgYXMgbXVjaCBhcyBSQURJWCArIDEgKi8KKyAgICBpZihxID49IFJBRElYKQorICAgICAgcSA9IFJBRElYIC0gMTsKKworICAgIC8qIFNlZSB3aGF0IHRoYXQgbXVsdGlwbGllcyBvdXQgdG8gICAgICAgICAgICAgICAgICAgKi8KKyAgICBtcF9jb3B5KGIsICZ0KTsKKyAgICBpZigocmVzID0gc19tcF9tdWxfZCgmdCwgcSkpICE9IE1QX09LQVkpCisgICAgICBnb3RvIENMRUFOVVA7CisKKyAgICAvKiAKKyAgICAgICBJZiBpdCdzIHRvbyBiaWcsIGJhY2sgaXQgb2ZmLiAgV2Ugc2hvdWxkIG5vdCBoYXZlIHRvIGRvIHRoaXMKKyAgICAgICBtb3JlIHRoYW4gb25jZSwgb3IsIGluIHJhcmUgY2FzZXMsIHR3aWNlLiAgS251dGggZGVzY3JpYmVzIGEKKyAgICAgICBtZXRob2QgYnkgd2hpY2ggdGhpcyBjb3VsZCBiZSByZWR1Y2VkIHRvIGEgbWF4aW11bSBvZiBvbmNlLCBidXQKKyAgICAgICBJIGRpZG4ndCBpbXBsZW1lbnQgdGhhdCBoZXJlLgorICAgICAqLworICAgIHdoaWxlKHNfbXBfY21wKCZ0LCAmcmVtKSA+IDApIHsKKyAgICAgIC0tcTsKKyAgICAgIHNfbXBfc3ViKCZ0LCBiKTsKKyAgICB9CisKKyAgICAvKiBBdCB0aGlzIHBvaW50LCBxIHNob3VsZCBiZSB0aGUgcmlnaHQgbmV4dCBkaWdpdCAgICovCisgICAgaWYoKHJlcyA9IHNfbXBfc3ViKCZyZW0sICZ0KSkgIT0gTVBfT0tBWSkKKyAgICAgIGdvdG8gQ0xFQU5VUDsKKworICAgIC8qCisgICAgICBJbmNsdWRlIHRoZSBkaWdpdCBpbiB0aGUgcXVvdGllbnQuICBXZSBhbGxvY2F0ZWQgZW5vdWdoIG1lbW9yeQorICAgICAgZm9yIGFueSBxdW90aWVudCB3ZSBjb3VsZCBldmVyIHBvc3NpYmx5IGdldCwgc28gd2Ugc2hvdWxkIG5vdAorICAgICAgaGF2ZSB0byBjaGVjayBmb3IgZmFpbHVyZXMgaGVyZQorICAgICAqLworICAgIERJR0lUKCZxdW90LCAwKSA9IHE7CisgIH0KKworICAvKiBEZW5vcm1hbGl6ZSByZW1haW5kZXIgICAgICAgICAgICAgICAgKi8KKyAgaWYoZCAhPSAwKSAKKyAgICBzX21wX2Rpdl8yZCgmcmVtLCBkKTsKKworICBzX21wX2NsYW1wKCZxdW90KTsKKyAgc19tcF9jbGFtcCgmcmVtKTsKKworICAvKiBDb3B5IHF1b3RpZW50IGJhY2sgdG8gb3V0cHV0ICAgICAgICAgKi8KKyAgc19tcF9leGNoKCZxdW90LCBhKTsKKyAgCisgIC8qIENvcHkgcmVtYWluZGVyIGJhY2sgdG8gb3V0cHV0ICAgICAgICAqLworICBzX21wX2V4Y2goJnJlbSwgYik7CisKK0NMRUFOVVA6CisgIG1wX2NsZWFyKCZyZW0pOworUkVNOgorICBtcF9jbGVhcigmdCk7CitUOgorICBtcF9jbGVhcigmcXVvdCk7CisKKyAgcmV0dXJuIHJlczsKKworfSAvKiBlbmQgc19tcF9kaXYoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IHNfbXBfMmV4cHQoYSwgaykgKi8KKworbXBfZXJyICAgc19tcF8yZXhwdChtcF9pbnQgKmEsIG1wX2RpZ2l0IGspCit7CisgIG1wX2VyciAgICByZXM7CisgIG1wX3NpemUgICBkaWcsIGJpdDsKKworICBkaWcgPSBrIC8gRElHSVRfQklUOworICBiaXQgPSBrICUgRElHSVRfQklUOworCisgIG1wX3plcm8oYSk7CisgIGlmKChyZXMgPSBzX21wX3BhZChhLCBkaWcgKyAxKSkgIT0gTVBfT0tBWSkKKyAgICByZXR1cm4gcmVzOworICAKKyAgRElHSVQoYSwgZGlnKSB8PSAoMSA8PCBiaXQpOworCisgIHJldHVybiBNUF9PS0FZOworCit9IC8qIGVuZCBzX21wXzJleHB0KCkgKi8KKworLyogfX19ICovCisKKworLyogfX19ICovCisKKy8qIH19fSAqLworCisvKiB7e3sgUHJpbWl0aXZlIGNvbXBhcmlzb25zICovCisKKy8qIHt7eyBzX21wX2NtcChhLCBiKSAqLworCisvKiBDb21wYXJlIHxhfCA8PT4gfGJ8LCByZXR1cm4gMCBpZiBlcXVhbCwgPDAgaWYgYTxiLCA+MCBpZiBhPmIgICAgICAgICAgICovCitpbnQgICAgICBzX21wX2NtcChtcF9pbnQgKmEsIG1wX2ludCAqYikKK3sKKyAgbXBfc2l6ZSAgIHVhID0gVVNFRChhKSwgdWIgPSBVU0VEKGIpOworCisgIGlmKHVhID4gdWIpCisgICAgcmV0dXJuIE1QX0dUOworICBlbHNlIGlmKHVhIDwgdWIpCisgICAgcmV0dXJuIE1QX0xUOworICBlbHNlIHsKKyAgICBpbnQgICAgICBpeCA9IHVhIC0gMTsKKyAgICBtcF9kaWdpdCAqYXAgPSBESUdJVFMoYSkgKyBpeCwgKmJwID0gRElHSVRTKGIpICsgaXg7CisKKyAgICB3aGlsZShpeCA+PSAwKSB7CisgICAgICBpZigqYXAgPiAqYnApCisJcmV0dXJuIE1QX0dUOworICAgICAgZWxzZSBpZigqYXAgPCAqYnApCisJcmV0dXJuIE1QX0xUOworCisgICAgICAtLWFwOyAtLWJwOyAtLWl4OworICAgIH0KKworICAgIHJldHVybiBNUF9FUTsKKyAgfQorCit9IC8qIGVuZCBzX21wX2NtcCgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgc19tcF9jbXBfZChhLCBkKSAqLworCisvKiBDb21wYXJlIHxhfCA8PT4gZCwgcmV0dXJuIDAgaWYgZXF1YWwsIDwwIGlmIGE8ZCwgPjAgaWYgYT5kICAgICAgICAgICAgICovCitpbnQgICAgICBzX21wX2NtcF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgZCkKK3sKKyAgbXBfc2l6ZSAgdWEgPSBVU0VEKGEpOworICBtcF9kaWdpdCAqYXAgPSBESUdJVFMoYSk7CisKKyAgaWYodWEgPiAxKQorICAgIHJldHVybiBNUF9HVDsKKworICBpZigqYXAgPCBkKSAKKyAgICByZXR1cm4gTVBfTFQ7CisgIGVsc2UgaWYoKmFwID4gZCkKKyAgICByZXR1cm4gTVBfR1Q7CisgIGVsc2UKKyAgICByZXR1cm4gTVBfRVE7CisKK30gLyogZW5kIHNfbXBfY21wX2QoKSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IHNfbXBfaXNwb3cyKHYpICovCisKKy8qCisgIFJldHVybnMgLTEgaWYgdGhlIHZhbHVlIGlzIG5vdCBhIHBvd2VyIG9mIHR3bzsgb3RoZXJ3aXNlLCBpdCByZXR1cm5zCisgIGsgc3VjaCB0aGF0IHYgPSAyXmssIGkuZS4gbGcodikuCisgKi8KK2ludCAgICAgIHNfbXBfaXNwb3cyKG1wX2ludCAqdikKK3sKKyAgbXBfZGlnaXQgZCwgKmRwOworICBtcF9zaXplICB1diA9IFVTRUQodik7CisgIGludCAgICAgIGV4dHJhID0gMCwgaXg7CisKKyAgZCA9IERJR0lUKHYsIHV2IC0gMSk7IC8qIG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXQgb2YgdiAqLworCisgIHdoaWxlKGQgJiYgKChkICYgMSkgPT0gMCkpIHsKKyAgICBkID4+PSAxOworICAgICsrZXh0cmE7CisgIH0KKworICBpZihkID09IDEpIHsKKyAgICBpeCA9IHV2IC0gMjsKKyAgICBkcCA9IERJR0lUUyh2KSArIGl4OworCisgICAgd2hpbGUoaXggPj0gMCkgeworICAgICAgaWYoKmRwKQorCXJldHVybiAtMTsgLyogbm90IGEgcG93ZXIgb2YgdHdvICovCisKKyAgICAgIC0tZHA7IC0taXg7CisgICAgfQorCisgICAgcmV0dXJuICgodXYgLSAxKSAqIERJR0lUX0JJVCkgKyBleHRyYTsKKyAgfSAKKworICByZXR1cm4gLTE7CisKK30gLyogZW5kIHNfbXBfaXNwb3cyKCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBzX21wX2lzcG93MmQoZCkgKi8KKworaW50ICAgICAgc19tcF9pc3BvdzJkKG1wX2RpZ2l0IGQpCit7CisgIGludCAgIHBvdyA9IDA7CisKKyAgd2hpbGUoKGQgJiAxKSA9PSAwKSB7CisgICAgKytwb3c7IGQgPj49IDE7CisgIH0KKworICBpZihkID09IDEpCisgICAgcmV0dXJuIHBvdzsKKworICByZXR1cm4gLTE7CisKK30gLyogZW5kIHNfbXBfaXNwb3cyZCgpICovCisKKy8qIH19fSAqLworCisvKiB9fX0gKi8KKworLyoge3t7IFByaW1pdGl2ZSBJL08gaGVscGVycyAqLworCisvKiB7e3sgc19tcF90b3ZhbHVlKGNoLCByKSAqLworCisvKgorICBDb252ZXJ0IHRoZSBnaXZlbiBjaGFyYWN0ZXIgdG8gaXRzIGRpZ2l0IHZhbHVlLCBpbiB0aGUgZ2l2ZW4gcmFkaXguCisgIElmIHRoZSBnaXZlbiBjaGFyYWN0ZXIgaXMgbm90IHVuZGVyc3Rvb2QgaW4gdGhlIGdpdmVuIHJhZGl4LCAtMSBpcworICByZXR1cm5lZC4gIE90aGVyd2lzZSB0aGUgZGlnaXQncyBudW1lcmljIHZhbHVlIGlzIHJldHVybmVkLgorCisgIFRoZSByZXN1bHRzIHdpbGwgYmUgb2RkIGlmIHlvdSB1c2UgYSByYWRpeCA8IDIgb3IgPiA2MiwgeW91IGFyZQorICBleHBlY3RlZCB0byBrbm93IHdoYXQgeW91J3JlIHVwIHRvLgorICovCitpbnQgICAgICBzX21wX3RvdmFsdWUoY2hhciBjaCwgaW50IHIpCit7CisgIGludCAgICB2YWwsIHhjaDsKKyAgCisgIGlmKHIgPiAzNikKKyAgICB4Y2ggPSBjaDsKKyAgZWxzZQorICAgIHhjaCA9IHRvdXBwZXIoY2gpOworCisgIGlmKGlzZGlnaXQoeGNoKSkKKyAgICB2YWwgPSB4Y2ggLSAnMCc7CisgIGVsc2UgaWYoaXN1cHBlcih4Y2gpKQorICAgIHZhbCA9IHhjaCAtICdBJyArIDEwOworICBlbHNlIGlmKGlzbG93ZXIoeGNoKSkKKyAgICB2YWwgPSB4Y2ggLSAnYScgKyAzNjsKKyAgZWxzZSBpZih4Y2ggPT0gJysnKQorICAgIHZhbCA9IDYyOworICBlbHNlIGlmKHhjaCA9PSAnLycpCisgICAgdmFsID0gNjM7CisgIGVsc2UgCisgICAgcmV0dXJuIC0xOworCisgIGlmKHZhbCA8IDAgfHwgdmFsID49IHIpCisgICAgcmV0dXJuIC0xOworCisgIHJldHVybiB2YWw7CisKK30gLyogZW5kIHNfbXBfdG92YWx1ZSgpICovCisKKy8qIH19fSAqLworCisvKiB7e3sgc19tcF90b2RpZ2l0KHZhbCwgciwgbG93KSAqLworCisvKgorICBDb252ZXJ0IHZhbCB0byBhIHJhZGl4LXIgZGlnaXQsIGlmIHBvc3NpYmxlLiAgSWYgdmFsIGlzIG91dCBvZiByYW5nZQorICBmb3IgciwgcmV0dXJucyB6ZXJvLiAgT3RoZXJ3aXNlLCByZXR1cm5zIGFuIEFTQ0lJIGNoYXJhY3RlciBkZW5vdGluZworICB0aGUgdmFsdWUgaW4gdGhlIGdpdmVuIHJhZGl4LgorCisgIFRoZSByZXN1bHRzIG1heSBiZSBvZGQgaWYgeW91IHVzZSBhIHJhZGl4IDwgMiBvciA+IDY0LCB5b3UgYXJlCisgIGV4cGVjdGVkIHRvIGtub3cgd2hhdCB5b3UncmUgZG9pbmcuCisgKi8KKyAgCitjaGFyICAgICBzX21wX3RvZGlnaXQoaW50IHZhbCwgaW50IHIsIGludCBsb3cpCit7CisgIGNoYXIgICBjaDsKKworICBpZih2YWwgPCAwIHx8IHZhbCA+PSByKQorICAgIHJldHVybiAwOworCisgIGNoID0gc19kbWFwXzFbdmFsXTsKKworICBpZihyIDw9IDM2ICYmIGxvdykKKyAgICBjaCA9IHRvbG93ZXIoY2gpOworCisgIHJldHVybiBjaDsKKworfSAvKiBlbmQgc19tcF90b2RpZ2l0KCkgKi8KKworLyogfX19ICovCisKKy8qIHt7eyBzX21wX291dGxlbihiaXRzLCByYWRpeCkgKi8KKworLyogCisgICBSZXR1cm4gYW4gZXN0aW1hdGUgZm9yIGhvdyBsb25nIGEgc3RyaW5nIGlzIG5lZWRlZCB0byBob2xkIGEgcmFkaXgKKyAgIHIgcmVwcmVzZW50YXRpb24gb2YgYSBudW1iZXIgd2l0aCAnYml0cycgc2lnbmlmaWNhbnQgYml0cy4KKworICAgRG9lcyBub3QgaW5jbHVkZSBzcGFjZSBmb3IgYSBzaWduIG9yIGEgTlVMIHRlcm1pbmF0b3IuCisgKi8KK2ludCAgICAgIHNfbXBfb3V0bGVuKGludCBiaXRzLCBpbnQgcikKK3sKKyAgcmV0dXJuIChpbnQpKChkb3VibGUpYml0cyAqIExPR19WXzIocikpOworCit9IC8qIGVuZCBzX21wX291dGxlbigpICovCisKKy8qIH19fSAqLworCisvKiB9fX0gKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogSEVSRSBUSEVSRSBCRSBEUkFHT05TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogY3JjPT00MjQyMTMyMTIzLCB2ZXJzaW9uPT0yLCBTYXQgRmViIDAyIDA2OjQzOjUyIDIwMDIgKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9tdGVzdC9tcGkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM4OjQ3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvbXRlc3QvbXBpLmggYi9saWJ0b21tYXRoL210ZXN0L21waS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YWU4NzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL210ZXN0L21waS5oCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICAgIG1waS5oCisKKyAgICBieSBNaWNoYWVsIEouIEZyb21iZXJnZXIgPHN0aW5nQGxpbmd1aXN0LmRhcnRtb3V0aC5lZHU+CisgICAgQ29weXJpZ2h0IChDKSAxOTk4IE1pY2hhZWwgSi4gRnJvbWJlcmdlciwgQWxsIFJpZ2h0cyBSZXNlcnZlZAorCisgICAgQXJiaXRyYXJ5IHByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMgbGlicmFyeQorCisgICAgJElkOiBtcGkuaCx2IDEuMiAyMDA1LzA1LzA1IDE0OjM4OjQ3IHRvbSBFeHAgJAorICovCisKKyNpZm5kZWYgX0hfTVBJXworI2RlZmluZSBfSF9NUElfCisKKyNpbmNsdWRlICJtcGktY29uZmlnLmgiCisKKyNkZWZpbmUgIE1QX0xUICAgICAgIC0xCisjZGVmaW5lICBNUF9FUSAgICAgICAgMAorI2RlZmluZSAgTVBfR1QgICAgICAgIDEKKworI2lmIE1QX0RFQlVHCisjdW5kZWYgTVBfSU9GVU5DCisjZGVmaW5lIE1QX0lPRlVOQyAxCisjZW5kaWYKKworI2lmIE1QX0lPRlVOQworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNkZWZpbmUgIE1QX05FRyAgMQorI2RlZmluZSAgTVBfWlBPUyAwCisKKy8qIEluY2x1ZGVkIGZvciBjb21wYXRpYmlsaXR5Li4uICovCisjZGVmaW5lICBORUcgICAgIE1QX05FRworI2RlZmluZSAgWlBPUyAgICBNUF9aUE9TCisKKyNkZWZpbmUgIE1QX09LQVkgICAgICAgICAgMCAvKiBubyBlcnJvciwgYWxsIGlzIHdlbGwgKi8KKyNkZWZpbmUgIE1QX1lFUyAgICAgICAgICAgMCAvKiB5ZXMgKGJvb2xlYW4gcmVzdWx0KSAgKi8KKyNkZWZpbmUgIE1QX05PICAgICAgICAgICAtMSAvKiBubyAoYm9vbGVhbiByZXN1bHQpICAgKi8KKyNkZWZpbmUgIE1QX01FTSAgICAgICAgICAtMiAvKiBvdXQgb2YgbWVtb3J5ICAgICAgICAgKi8KKyNkZWZpbmUgIE1QX1JBTkdFICAgICAgICAtMyAvKiBhcmd1bWVudCBvdXQgb2YgcmFuZ2UgKi8KKyNkZWZpbmUgIE1QX0JBREFSRyAgICAgICAtNCAvKiBpbnZhbGlkIHBhcmFtZXRlciAgICAgKi8KKyNkZWZpbmUgIE1QX1VOREVGICAgICAgICAtNSAvKiBhbnN3ZXIgaXMgdW5kZWZpbmVkICAgKi8KKyNkZWZpbmUgIE1QX0xBU1RfQ09ERSAgICBNUF9VTkRFRgorCisjaW5jbHVkZSAibXBpLXR5cGVzLmgiCisKKy8qIEluY2x1ZGVkIGZvciBjb21wYXRpYmlsaXR5Li4uICovCisjZGVmaW5lIERJR0lUX0JJVCAgICAgICAgIE1QX0RJR0lUX0JJVAorI2RlZmluZSBESUdJVF9NQVggICAgICAgICBNUF9ESUdJVF9NQVgKKworLyogTWFjcm9zIGZvciBhY2Nlc3NpbmcgdGhlIG1wX2ludCBpbnRlcm5hbHMgICAgICAgICAgICovCisjZGVmaW5lICBTSUdOKE1QKSAgICAgKChNUCktPnNpZ24pCisjZGVmaW5lICBVU0VEKE1QKSAgICAgKChNUCktPnVzZWQpCisjZGVmaW5lICBBTExPQyhNUCkgICAgKChNUCktPmFsbG9jKQorI2RlZmluZSAgRElHSVRTKE1QKSAgICgoTVApLT5kcCkKKyNkZWZpbmUgIERJR0lUKE1QLE4pICAoTVApLT5kcFsoTildCisKKyNpZiBNUF9BUkdDSEsgPT0gMQorI2RlZmluZSAgQVJHQ0hLKFgsWSkgIHtpZighKFgpKXtyZXR1cm4gKFkpO319CisjZWxpZiBNUF9BUkdDSEsgPT0gMgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2RlZmluZSAgQVJHQ0hLKFgsWSkgIGFzc2VydChYKQorI2Vsc2UKKyNkZWZpbmUgIEFSR0NISyhYLFkpICAvKiAgKi8KKyNlbmRpZgorCisvKiBUaGlzIGRlZmluZXMgdGhlIG1heGltdW0gSS9PIGJhc2UgKG1pbmltdW0gaXMgMikgICAqLworI2RlZmluZSBNQVhfUkFESVggICAgICAgICA2NAorCit0eXBlZGVmIHN0cnVjdCB7CisgIG1wX3NpZ24gICAgICAgc2lnbjsgICAgLyogc2lnbiBvZiB0aGlzIHF1YW50aXR5ICAgICAgKi8KKyAgbXBfc2l6ZSAgICAgICBhbGxvYzsgICAvKiBob3cgbWFueSBkaWdpdHMgYWxsb2NhdGVkICAqLworICBtcF9zaXplICAgICAgIHVzZWQ7ICAgIC8qIGhvdyBtYW55IGRpZ2l0cyB1c2VkICAgICAgICovCisgIG1wX2RpZ2l0ICAgICAqZHA7ICAgICAgLyogdGhlIGRpZ2l0cyB0aGVtc2VsdmVzICAgICAgKi8KK30gbXBfaW50OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBEZWZhdWx0IHByZWNpc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK3Vuc2lnbmVkIGludCBtcF9nZXRfcHJlYyh2b2lkKTsKK3ZvaWQgICAgICAgICBtcF9zZXRfcHJlYyh1bnNpZ25lZCBpbnQgcHJlYyk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE1lbW9yeSBtYW5hZ2VtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworbXBfZXJyIG1wX2luaXQobXBfaW50ICptcCk7CittcF9lcnIgbXBfaW5pdF9hcnJheShtcF9pbnQgbXBbXSwgaW50IGNvdW50KTsKK21wX2VyciBtcF9pbml0X3NpemUobXBfaW50ICptcCwgbXBfc2l6ZSBwcmVjKTsKK21wX2VyciBtcF9pbml0X2NvcHkobXBfaW50ICptcCwgbXBfaW50ICpmcm9tKTsKK21wX2VyciBtcF9jb3B5KG1wX2ludCAqZnJvbSwgbXBfaW50ICp0byk7Cit2b2lkICAgbXBfZXhjaChtcF9pbnQgKm1wMSwgbXBfaW50ICptcDIpOwordm9pZCAgIG1wX2NsZWFyKG1wX2ludCAqbXApOwordm9pZCAgIG1wX2NsZWFyX2FycmF5KG1wX2ludCBtcFtdLCBpbnQgY291bnQpOwordm9pZCAgIG1wX3plcm8obXBfaW50ICptcCk7Cit2b2lkICAgbXBfc2V0KG1wX2ludCAqbXAsIG1wX2RpZ2l0IGQpOworbXBfZXJyIG1wX3NldF9pbnQobXBfaW50ICptcCwgbG9uZyB6KTsKK21wX2VyciBtcF9zaHJpbmsobXBfaW50ICphKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBTaW5nbGUgZGlnaXQgYXJpdGhtZXRpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK21wX2VyciBtcF9hZGRfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGQsIG1wX2ludCAqYik7CittcF9lcnIgbXBfc3ViX2QobXBfaW50ICphLCBtcF9kaWdpdCBkLCBtcF9pbnQgKmIpOworbXBfZXJyIG1wX211bF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgZCwgbXBfaW50ICpiKTsKK21wX2VyciBtcF9tdWxfMihtcF9pbnQgKmEsIG1wX2ludCAqYyk7CittcF9lcnIgbXBfZGl2X2QobXBfaW50ICphLCBtcF9kaWdpdCBkLCBtcF9pbnQgKnEsIG1wX2RpZ2l0ICpyKTsKK21wX2VyciBtcF9kaXZfMihtcF9pbnQgKmEsIG1wX2ludCAqYyk7CittcF9lcnIgbXBfZXhwdF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgZCwgbXBfaW50ICpjKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogU2lnbiBtYW5pcHVsYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCittcF9lcnIgbXBfYWJzKG1wX2ludCAqYSwgbXBfaW50ICpiKTsKK21wX2VyciBtcF9uZWcobXBfaW50ICphLCBtcF9pbnQgKmIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBGdWxsIGFyaXRobWV0aWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKK21wX2VyciBtcF9hZGQobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7CittcF9lcnIgbXBfc3ViKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworbXBfZXJyIG1wX211bChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKTsKK21wX2VyciBtcF9tdWxfMmQobXBfaW50ICphLCBtcF9kaWdpdCBkLCBtcF9pbnQgKmMpOworI2lmIE1QX1NRVUFSRQorbXBfZXJyIG1wX3NxcihtcF9pbnQgKmEsIG1wX2ludCAqYik7CisjZWxzZQorI2RlZmluZSBtcF9zcXIoYSwgYikgbXBfbXVsKGEsIGEsIGIpCisjZW5kaWYKK21wX2VyciBtcF9kaXYobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqcSwgbXBfaW50ICpyKTsKK21wX2VyciBtcF9kaXZfMmQobXBfaW50ICphLCBtcF9kaWdpdCBkLCBtcF9pbnQgKnEsIG1wX2ludCAqcik7CittcF9lcnIgbXBfZXhwdChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKTsKK21wX2VyciBtcF8yZXhwdChtcF9pbnQgKmEsIG1wX2RpZ2l0IGspOworbXBfZXJyIG1wX3NxcnQobXBfaW50ICphLCBtcF9pbnQgKmIpOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBNb2R1bGFyIGFyaXRobWV0aWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNpZiBNUF9NT0RBUklUSAorbXBfZXJyIG1wX21vZChtcF9pbnQgKmEsIG1wX2ludCAqbSwgbXBfaW50ICpjKTsKK21wX2VyciBtcF9tb2RfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGQsIG1wX2RpZ2l0ICpjKTsKK21wX2VyciBtcF9hZGRtb2QobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqbSwgbXBfaW50ICpjKTsKK21wX2VyciBtcF9zdWJtb2QobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqbSwgbXBfaW50ICpjKTsKK21wX2VyciBtcF9tdWxtb2QobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqbSwgbXBfaW50ICpjKTsKKyNpZiBNUF9TUVVBUkUKK21wX2VyciBtcF9zcXJtb2QobXBfaW50ICphLCBtcF9pbnQgKm0sIG1wX2ludCAqYyk7CisjZWxzZQorI2RlZmluZSBtcF9zcXJtb2QoYSwgbSwgYykgbXBfbXVsbW9kKGEsIGEsIG0sIGMpCisjZW5kaWYKK21wX2VyciBtcF9leHB0bW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKm0sIG1wX2ludCAqYyk7CittcF9lcnIgbXBfZXhwdG1vZF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgZCwgbXBfaW50ICptLCBtcF9pbnQgKmMpOworI2VuZGlmIC8qIE1QX01PREFSSVRIICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIENvbXBhcmlzb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworaW50ICAgIG1wX2NtcF96KG1wX2ludCAqYSk7CitpbnQgICAgbXBfY21wX2QobXBfaW50ICphLCBtcF9kaWdpdCBkKTsKK2ludCAgICBtcF9jbXAobXBfaW50ICphLCBtcF9pbnQgKmIpOworaW50ICAgIG1wX2NtcF9tYWcobXBfaW50ICphLCBtcF9pbnQgKmIpOworaW50ICAgIG1wX2NtcF9pbnQobXBfaW50ICphLCBsb25nIHopOworaW50ICAgIG1wX2lzb2RkKG1wX2ludCAqYSk7CitpbnQgICAgbXBfaXNldmVuKG1wX2ludCAqYSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIE51bWJlciB0aGVvcmV0aWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmIE1QX05VTVRICittcF9lcnIgbXBfZ2NkKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworbXBfZXJyIG1wX2xjbShtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKTsKK21wX2VyciBtcF94Z2NkKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmcsIG1wX2ludCAqeCwgbXBfaW50ICp5KTsKK21wX2VyciBtcF9pbnZtb2QobXBfaW50ICphLCBtcF9pbnQgKm0sIG1wX2ludCAqYyk7CisjZW5kaWYgLyogZW5kIE1QX05VTVRIICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIElucHV0IGFuZCBvdXRwdXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworI2lmIE1QX0lPRlVOQwordm9pZCAgIG1wX3ByaW50KG1wX2ludCAqbXAsIEZJTEUgKm9mcCk7CisjZW5kaWYgLyogZW5kIE1QX0lPRlVOQyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKiBCYXNlIGNvbnZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyNkZWZpbmUgQklUUyAgICAgMQorI2RlZmluZSBCWVRFUyAgICBDSEFSX0JJVAorCittcF9lcnIgbXBfcmVhZF9zaWduZWRfYmluKG1wX2ludCAqbXAsIHVuc2lnbmVkIGNoYXIgKnN0ciwgaW50IGxlbik7CitpbnQgICAgbXBfc2lnbmVkX2Jpbl9zaXplKG1wX2ludCAqbXApOworbXBfZXJyIG1wX3RvX3NpZ25lZF9iaW4obXBfaW50ICptcCwgdW5zaWduZWQgY2hhciAqc3RyKTsKKworbXBfZXJyIG1wX3JlYWRfdW5zaWduZWRfYmluKG1wX2ludCAqbXAsIHVuc2lnbmVkIGNoYXIgKnN0ciwgaW50IGxlbik7CitpbnQgICAgbXBfdW5zaWduZWRfYmluX3NpemUobXBfaW50ICptcCk7CittcF9lcnIgbXBfdG9fdW5zaWduZWRfYmluKG1wX2ludCAqbXAsIHVuc2lnbmVkIGNoYXIgKnN0cik7CisKK2ludCAgICBtcF9jb3VudF9iaXRzKG1wX2ludCAqbXApOworCisjaWYgTVBfQ09NUEFUX01BQ1JPUworI2RlZmluZSBtcF9yZWFkX3JhdyhtcCwgc3RyLCBsZW4pIG1wX3JlYWRfc2lnbmVkX2JpbigobXApLCAoc3RyKSwgKGxlbikpCisjZGVmaW5lIG1wX3Jhd19zaXplKG1wKSAgICAgICAgICAgbXBfc2lnbmVkX2Jpbl9zaXplKG1wKQorI2RlZmluZSBtcF90b3JhdyhtcCwgc3RyKSAgICAgICAgIG1wX3RvX3NpZ25lZF9iaW4oKG1wKSwgKHN0cikpCisjZGVmaW5lIG1wX3JlYWRfbWFnKG1wLCBzdHIsIGxlbikgbXBfcmVhZF91bnNpZ25lZF9iaW4oKG1wKSwgKHN0ciksIChsZW4pKQorI2RlZmluZSBtcF9tYWdfc2l6ZShtcCkgICAgICAgICAgIG1wX3Vuc2lnbmVkX2Jpbl9zaXplKG1wKQorI2RlZmluZSBtcF90b21hZyhtcCwgc3RyKSAgICAgICAgIG1wX3RvX3Vuc2lnbmVkX2JpbigobXApLCAoc3RyKSkKKyNlbmRpZgorCittcF9lcnIgbXBfcmVhZF9yYWRpeChtcF9pbnQgKm1wLCB1bnNpZ25lZCBjaGFyICpzdHIsIGludCByYWRpeCk7CitpbnQgICAgbXBfcmFkaXhfc2l6ZShtcF9pbnQgKm1wLCBpbnQgcmFkaXgpOworaW50ICAgIG1wX3ZhbHVlX3JhZGl4X3NpemUoaW50IG51bSwgaW50IHF0eSwgaW50IHJhZGl4KTsKK21wX2VyciBtcF90b3JhZGl4KG1wX2ludCAqbXAsIHVuc2lnbmVkIGNoYXIgKnN0ciwgaW50IHJhZGl4KTsKKworaW50ICAgIG1wX2NoYXIydmFsdWUoY2hhciBjaCwgaW50IHIpOworCisjZGVmaW5lIG1wX3RvYmluYXJ5KE0sIFMpICBtcF90b3JhZGl4KChNKSwgKFMpLCAyKQorI2RlZmluZSBtcF90b29jdGFsKE0sIFMpICAgbXBfdG9yYWRpeCgoTSksIChTKSwgOCkKKyNkZWZpbmUgbXBfdG9kZWNpbWFsKE0sIFMpIG1wX3RvcmFkaXgoKE0pLCAoUyksIDEwKQorI2RlZmluZSBtcF90b2hleChNLCBTKSAgICAgbXBfdG9yYWRpeCgoTSksIChTKSwgMTYpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEVycm9yIHN0cmluZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworY29uc3QgIGNoYXIgICptcF9zdHJlcnJvcihtcF9lcnIgZWMpOworCisjZW5kaWYgLyogZW5kIF9IX01QSV8gKi8KKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9tdGVzdC9tcGkuaCx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4yICQgKi8KKy8qICREYXRlOiAyMDA1LzA1LzA1IDE0OjM4OjQ3ICQgKi8KZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvbXRlc3QvbXRlc3QuYyBiL2xpYnRvbW1hdGgvbXRlc3QvbXRlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGZlNjEyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9tdGVzdC9tdGVzdC5jCkBAIC0wLDAgKzEsMzA4IEBACisvKiBtYWtlcyBhIGJpZ251bSB0ZXN0IGhhcm5lc3Mgd2l0aCBOVU0gdGVzdHMgcGVyIG9wZXJhdGlvbgorICoKKyAqIHRoZSBvdXRwdXQgaXMgbWFkZSBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdCBbb25lIHBhcmFtZXRlciBwZXIgbGluZV0KKworb3BlcmF0aW9uCitvcGVyYW5kMQorb3BlcmFuZDIKK1suLi4gb3BlcmFuZE5dCityZXN1bHQxCityZXN1bHQyCitbLi4uIHJlc3VsdE5dCisKK1NvIGZvciBleGFtcGxlICJhICogYiBtb2QgbiIgd291bGQgYmUKKworbXVsbW9kCithCitiCituCithKmIgbW9kIG4KKworZS5nLiBpZiBhPTMsIGI9NCBuPTExIHRoZW4KKworbXVsbW9kCiszCis0CisxMQorMQorCisgKi8KKworI2lmZGVmIE1QXzhCSVQKKyNkZWZpbmUgVEhFX01BU0sgMTI3CisjZWxzZQorI2RlZmluZSBUSEVfTUFTSyAzMjc2NworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlICJtcGkuYyIKKworRklMRSAqcm5nOworCit2b2lkIHJhbmRfbnVtKG1wX2ludCAqYSkKK3sKKyAgIGludCBuLCBzaXplOworICAgdW5zaWduZWQgY2hhciBidWZbMjA0OF07CisKKyAgIHNpemUgPSAxICsgKChmZ2V0YyhybmcpPDw4KSArIGZnZXRjKHJuZykpICUgMTAxOworICAgYnVmWzBdID0gKGZnZXRjKHJuZykmMSk/MTowOworICAgZnJlYWQoYnVmKzEsIDEsIHNpemUsIHJuZyk7CisgICB3aGlsZSAoYnVmWzFdID09IDApIGJ1ZlsxXSA9IGZnZXRjKHJuZyk7CisgICBtcF9yZWFkX3JhdyhhLCBidWYsIDErc2l6ZSk7Cit9CisKK3ZvaWQgcmFuZF9udW0yKG1wX2ludCAqYSkKK3sKKyAgIGludCBuLCBzaXplOworICAgdW5zaWduZWQgY2hhciBidWZbMjA0OF07CisKKyAgIHNpemUgPSAxMCArICgoZmdldGMocm5nKTw8OCkgKyBmZ2V0YyhybmcpKSAlIDEwMTsKKyAgIGJ1ZlswXSA9IChmZ2V0YyhybmcpJjEpPzE6MDsKKyAgIGZyZWFkKGJ1ZisxLCAxLCBzaXplLCBybmcpOworICAgd2hpbGUgKGJ1ZlsxXSA9PSAwKSBidWZbMV0gPSBmZ2V0YyhybmcpOworICAgbXBfcmVhZF9yYXcoYSwgYnVmLCAxK3NpemUpOworfQorCisjZGVmaW5lIG1wX3RvNjQoYSwgYikgbXBfdG9yYWRpeChhLCBiLCA2NCkKKworaW50IG1haW4odm9pZCkKK3sKKyAgIGludCBuLCB0bXA7CisgICBtcF9pbnQgYSwgYiwgYywgZCwgZTsKKyAgIGNsb2NrX3QgdDE7CisgICBjaGFyIGJ1Zls0MDk2XTsKKworICAgbXBfaW5pdCgmYSk7CisgICBtcF9pbml0KCZiKTsKKyAgIG1wX2luaXQoJmMpOworICAgbXBfaW5pdCgmZCk7CisgICBtcF9pbml0KCZlKTsKKworCisgICAvKiBpbml0aWFsICgyXm4gLSAxKV4yIHRlc3RpbmcsIG1ha2VzIHN1cmUgdGhlIGNvbWJhIG11bHRpcGxpZXIgd29ya3MgW2l0IGhhcyB0aGUgbmV3IGNhcnJ5IGNvZGVdICovCisvKgorICAgbXBfc2V0KCZhLCAxKTsKKyAgIGZvciAobiA9IDE7IG4gPCA4MTkyOyBuKyspIHsKKyAgICAgICBtcF9tdWwoJmEsICZhLCAmYyk7CisgICAgICAgcHJpbnRmKCJtdWxcbiIpOworICAgICAgIG1wX3RvNjQoJmEsIGJ1Zik7CisgICAgICAgcHJpbnRmKCIlc1xuJXNcbiIsIGJ1ZiwgYnVmKTsKKyAgICAgICBtcF90bzY0KCZjLCBidWYpOworICAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisKKyAgICAgICBtcF9hZGRfZCgmYSwgMSwgJmEpOworICAgICAgIG1wX211bF8yKCZhLCAmYSk7CisgICAgICAgbXBfc3ViX2QoJmEsIDEsICZhKTsKKyAgIH0KKyovCisKKyAgIHJuZyA9IGZvcGVuKCIvZGV2L3VyYW5kb20iLCAicmIiKTsKKyAgIGlmIChybmcgPT0gTlVMTCkgeworICAgICAgcm5nID0gZm9wZW4oIi9kZXYvcmFuZG9tIiwgInJiIik7CisgICAgICBpZiAocm5nID09IE5VTEwpIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5XYXJuaW5nOiAgc3RkaW4gdXNlZCBhcyByYW5kb20gc291cmNlXG5cbiIpOworICAgICAgICAgcm5nID0gc3RkaW47CisgICAgICB9CisgICB9CisKKyAgIHQxID0gY2xvY2soKTsKKyAgIGZvciAoOzspIHsKKyNpZiAwCisgICAgICBpZiAoY2xvY2soKSAtIHQxID4gQ0xPQ0tTX1BFUl9TRUMpIHsKKyAgICAgICAgIHNsZWVwKDIpOworICAgICAgICAgdDEgPSBjbG9jaygpOworICAgICAgfQorI2VuZGlmCisgICAgICAgbiA9IGZnZXRjKHJuZykgJSAxNTsKKworICAgaWYgKG4gPT0gMCkgeworICAgICAgIC8qIGFkZCB0ZXN0cyAqLworICAgICAgIHJhbmRfbnVtKCZhKTsKKyAgICAgICByYW5kX251bSgmYik7CisgICAgICAgbXBfYWRkKCZhLCAmYiwgJmMpOworICAgICAgIHByaW50ZigiYWRkXG4iKTsKKyAgICAgICBtcF90bzY0KCZhLCBidWYpOworICAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisgICAgICAgbXBfdG82NCgmYiwgYnVmKTsKKyAgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgICAgIG1wX3RvNjQoJmMsIGJ1Zik7CisgICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgIH0gZWxzZSBpZiAobiA9PSAxKSB7CisgICAgICAvKiBzdWIgdGVzdHMgKi8KKyAgICAgICByYW5kX251bSgmYSk7CisgICAgICAgcmFuZF9udW0oJmIpOworICAgICAgIG1wX3N1YigmYSwgJmIsICZjKTsKKyAgICAgICBwcmludGYoInN1YlxuIik7CisgICAgICAgbXBfdG82NCgmYSwgYnVmKTsKKyAgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgICAgIG1wX3RvNjQoJmIsIGJ1Zik7CisgICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgICAgICBtcF90bzY0KCZjLCBidWYpOworICAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisgICB9IGVsc2UgaWYgKG4gPT0gMikgeworICAgICAgIC8qIG11bCB0ZXN0cyAqLworICAgICAgIHJhbmRfbnVtKCZhKTsKKyAgICAgICByYW5kX251bSgmYik7CisgICAgICAgbXBfbXVsKCZhLCAmYiwgJmMpOworICAgICAgIHByaW50ZigibXVsXG4iKTsKKyAgICAgICBtcF90bzY0KCZhLCBidWYpOworICAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisgICAgICAgbXBfdG82NCgmYiwgYnVmKTsKKyAgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgICAgIG1wX3RvNjQoJmMsIGJ1Zik7CisgICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgIH0gZWxzZSBpZiAobiA9PSAzKSB7CisgICAgICAvKiBkaXYgdGVzdHMgKi8KKyAgICAgICByYW5kX251bSgmYSk7CisgICAgICAgcmFuZF9udW0oJmIpOworICAgICAgIG1wX2RpdigmYSwgJmIsICZjLCAmZCk7CisgICAgICAgcHJpbnRmKCJkaXZcbiIpOworICAgICAgIG1wX3RvNjQoJmEsIGJ1Zik7CisgICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgICAgICBtcF90bzY0KCZiLCBidWYpOworICAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisgICAgICAgbXBfdG82NCgmYywgYnVmKTsKKyAgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgICAgIG1wX3RvNjQoJmQsIGJ1Zik7CisgICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgIH0gZWxzZSBpZiAobiA9PSA0KSB7CisgICAgICAvKiBzcXIgdGVzdHMgKi8KKyAgICAgICByYW5kX251bSgmYSk7CisgICAgICAgbXBfc3FyKCZhLCAmYik7CisgICAgICAgcHJpbnRmKCJzcXJcbiIpOworICAgICAgIG1wX3RvNjQoJmEsIGJ1Zik7CisgICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgICAgICBtcF90bzY0KCZiLCBidWYpOworICAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisgICB9IGVsc2UgaWYgKG4gPT0gNSkgeworICAgICAgLyogbXVsXzJkIHRlc3QgKi8KKyAgICAgIHJhbmRfbnVtKCZhKTsKKyAgICAgIG1wX2NvcHkoJmEsICZiKTsKKyAgICAgIG4gPSBmZ2V0YyhybmcpICYgNjM7CisgICAgICBtcF9tdWxfMmQoJmIsIG4sICZiKTsKKyAgICAgIG1wX3RvNjQoJmEsIGJ1Zik7CisgICAgICBwcmludGYoIm11bDJkXG4iKTsKKyAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisgICAgICBwcmludGYoIiVkXG4iLCBuKTsKKyAgICAgIG1wX3RvNjQoJmIsIGJ1Zik7CisgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgfSBlbHNlIGlmIChuID09IDYpIHsKKyAgICAgIC8qIGRpdl8yZCB0ZXN0ICovCisgICAgICByYW5kX251bSgmYSk7CisgICAgICBtcF9jb3B5KCZhLCAmYik7CisgICAgICBuID0gZmdldGMocm5nKSAmIDYzOworICAgICAgbXBfZGl2XzJkKCZiLCBuLCAmYiwgTlVMTCk7CisgICAgICBtcF90bzY0KCZhLCBidWYpOworICAgICAgcHJpbnRmKCJkaXYyZFxuIik7CisgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgICAgcHJpbnRmKCIlZFxuIiwgbik7CisgICAgICBtcF90bzY0KCZiLCBidWYpOworICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgIH0gZWxzZSBpZiAobiA9PSA3KSB7CisgICAgICAvKiBnY2QgdGVzdCAqLworICAgICAgcmFuZF9udW0oJmEpOworICAgICAgcmFuZF9udW0oJmIpOworICAgICAgYS5zaWduID0gTVBfWlBPUzsKKyAgICAgIGIuc2lnbiA9IE1QX1pQT1M7CisgICAgICBtcF9nY2QoJmEsICZiLCAmYyk7CisgICAgICBwcmludGYoImdjZFxuIik7CisgICAgICBtcF90bzY0KCZhLCBidWYpOworICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgICAgIG1wX3RvNjQoJmIsIGJ1Zik7CisgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgICAgbXBfdG82NCgmYywgYnVmKTsKKyAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisgICB9IGVsc2UgaWYgKG4gPT0gOCkgeworICAgICAgLyogbGNtIHRlc3QgKi8KKyAgICAgIHJhbmRfbnVtKCZhKTsKKyAgICAgIHJhbmRfbnVtKCZiKTsKKyAgICAgIGEuc2lnbiA9IE1QX1pQT1M7CisgICAgICBiLnNpZ24gPSBNUF9aUE9TOworICAgICAgbXBfbGNtKCZhLCAmYiwgJmMpOworICAgICAgcHJpbnRmKCJsY21cbiIpOworICAgICAgbXBfdG82NCgmYSwgYnVmKTsKKyAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisgICAgICBtcF90bzY0KCZiLCBidWYpOworICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgICAgIG1wX3RvNjQoJmMsIGJ1Zik7CisgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgfSBlbHNlIGlmIChuID09IDkpIHsKKyAgICAgIC8qIGV4cHRtb2QgdGVzdCAqLworICAgICAgcmFuZF9udW0yKCZhKTsKKyAgICAgIHJhbmRfbnVtMigmYik7CisgICAgICByYW5kX251bTIoJmMpOworLy8gICAgICBpZiAoYy5kcFswXSYxKSBtcF9hZGRfZCgmYywgMSwgJmMpOworICAgICAgYS5zaWduID0gYi5zaWduID0gYy5zaWduID0gMDsKKyAgICAgIG1wX2V4cHRtb2QoJmEsICZiLCAmYywgJmQpOworICAgICAgcHJpbnRmKCJleHB0XG4iKTsKKyAgICAgIG1wX3RvNjQoJmEsIGJ1Zik7CisgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgICAgbXBfdG82NCgmYiwgYnVmKTsKKyAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisgICAgICBtcF90bzY0KCZjLCBidWYpOworICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgICAgIG1wX3RvNjQoJmQsIGJ1Zik7CisgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgfSBlbHNlIGlmIChuID09IDEwKSB7CisgICAgICAvKiBpbnZtb2QgdGVzdCAqLworICAgICAgcmFuZF9udW0yKCZhKTsKKyAgICAgIHJhbmRfbnVtMigmYik7CisgICAgICBiLnNpZ24gPSBNUF9aUE9TOworICAgICAgYS5zaWduID0gTVBfWlBPUzsKKyAgICAgIG1wX2djZCgmYSwgJmIsICZjKTsKKyAgICAgIGlmIChtcF9jbXBfZCgmYywgMSkgIT0gMCkgY29udGludWU7CisgICAgICBpZiAobXBfY21wX2QoJmIsIDEpID09IDApIGNvbnRpbnVlOworICAgICAgbXBfaW52bW9kKCZhLCAmYiwgJmMpOworICAgICAgcHJpbnRmKCJpbnZtb2RcbiIpOworICAgICAgbXBfdG82NCgmYSwgYnVmKTsKKyAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisgICAgICBtcF90bzY0KCZiLCBidWYpOworICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgICAgIG1wX3RvNjQoJmMsIGJ1Zik7CisgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgfSBlbHNlIGlmIChuID09IDExKSB7CisgICAgICByYW5kX251bSgmYSk7CisgICAgICBtcF9tdWxfMigmYSwgJmEpOworICAgICAgbXBfZGl2XzIoJmEsICZiKTsKKyAgICAgIHByaW50ZigiZGl2MlxuIik7CisgICAgICBtcF90bzY0KCZhLCBidWYpOworICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgICAgIG1wX3RvNjQoJmIsIGJ1Zik7CisgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgfSBlbHNlIGlmIChuID09IDEyKSB7CisgICAgICByYW5kX251bTIoJmEpOworICAgICAgbXBfbXVsXzIoJmEsICZiKTsKKyAgICAgIHByaW50ZigibXVsMlxuIik7CisgICAgICBtcF90bzY0KCZhLCBidWYpOworICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgICAgIG1wX3RvNjQoJmIsIGJ1Zik7CisgICAgICBwcmludGYoIiVzXG4iLCBidWYpOworICAgfSBlbHNlIGlmIChuID09IDEzKSB7CisgICAgICByYW5kX251bTIoJmEpOworICAgICAgdG1wID0gYWJzKHJhbmQoKSkgJiBUSEVfTUFTSzsKKyAgICAgIG1wX2FkZF9kKCZhLCB0bXAsICZiKTsKKyAgICAgIHByaW50ZigiYWRkX2RcbiIpOworICAgICAgbXBfdG82NCgmYSwgYnVmKTsKKyAgICAgIHByaW50ZigiJXNcbiVkXG4iLCBidWYsIHRtcCk7CisgICAgICBtcF90bzY0KCZiLCBidWYpOworICAgICAgcHJpbnRmKCIlc1xuIiwgYnVmKTsKKyAgIH0gZWxzZSBpZiAobiA9PSAxNCkgeworICAgICAgcmFuZF9udW0yKCZhKTsKKyAgICAgIHRtcCA9IGFicyhyYW5kKCkpICYgVEhFX01BU0s7CisgICAgICBtcF9zdWJfZCgmYSwgdG1wLCAmYik7CisgICAgICBwcmludGYoInN1Yl9kXG4iKTsKKyAgICAgIG1wX3RvNjQoJmEsIGJ1Zik7CisgICAgICBwcmludGYoIiVzXG4lZFxuIiwgYnVmLCB0bXApOworICAgICAgbXBfdG82NCgmYiwgYnVmKTsKKyAgICAgIHByaW50ZigiJXNcbiIsIGJ1Zik7CisgICB9CisgICB9CisgICBmY2xvc2Uocm5nKTsKKyAgIHJldHVybiAwOworfQorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL210ZXN0L210ZXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMiAkICovCisvKiAkRGF0ZTogMjAwNS8wNS8wNSAxNDozODo0NyAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL3BpY3MvZGVzaWduX3Byb2Nlc3Muc3hkIGIvbGlidG9tbWF0aC9waWNzL2Rlc2lnbl9wcm9jZXNzLnN4ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDE0ZGJiCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9waWNzL2Rlc2lnbl9wcm9jZXNzLnN4ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL3BpY3MvZGVzaWduX3Byb2Nlc3MudGlmIGIvbGlidG9tbWF0aC9waWNzL2Rlc2lnbl9wcm9jZXNzLnRpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTBjMDEyCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9waWNzL2Rlc2lnbl9wcm9jZXNzLnRpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL3BpY3MvZXhwdF9zdGF0ZS5zeGQgYi9saWJ0b21tYXRoL3BpY3MvZXhwdF9zdGF0ZS5zeGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxODQwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvcGljcy9leHB0X3N0YXRlLnN4ZApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL3BpY3MvZXhwdF9zdGF0ZS50aWYgYi9saWJ0b21tYXRoL3BpY3MvZXhwdF9zdGF0ZS50aWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwNmU4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvcGljcy9leHB0X3N0YXRlLnRpZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL3BpY3MvbWFrZWZpbGUgYi9saWJ0b21tYXRoL3BpY3MvbWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjYjAyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvcGljcy9tYWtlZmlsZQpAQCAtMCwwICsxLDM1IEBACisjIG1ha2VzIHRoZSBpbWFnZXMuLi4geWVhaAorCitkZWZhdWx0OiAgcHNlcworCitkZXNpZ25fcHJvY2Vzcy5wczogZGVzaWduX3Byb2Nlc3MudGlmCisJdGlmZjJwcyAtcyAtZSBkZXNpZ25fcHJvY2Vzcy50aWYgPiBkZXNpZ25fcHJvY2Vzcy5wcworCitzbGlkaW5nX3dpbmRvdy5wczogc2xpZGluZ193aW5kb3cudGlmCisJdGlmZjJwcyAtcyAtZSBzbGlkaW5nX3dpbmRvdy50aWYgPiBzbGlkaW5nX3dpbmRvdy5wcworCQorZXhwdF9zdGF0ZS5wczogZXhwdF9zdGF0ZS50aWYKKwl0aWZmMnBzIC1zIC1lIGV4cHRfc3RhdGUudGlmID4gZXhwdF9zdGF0ZS5wcworCitwcmltYWxpdHkucHM6IHByaW1hbGl0eS50aWYKKwl0aWZmMnBzIC1zIC1lIHByaW1hbGl0eS50aWYgPiBwcmltYWxpdHkucHMKKworZGVzaWduX3Byb2Nlc3MucGRmOiBkZXNpZ25fcHJvY2Vzcy5wcworCWVwc3RvcGRmIGRlc2lnbl9wcm9jZXNzLnBzCisKK3NsaWRpbmdfd2luZG93LnBkZjogc2xpZGluZ193aW5kb3cucHMKKwllcHN0b3BkZiBzbGlkaW5nX3dpbmRvdy5wcworCQorZXhwdF9zdGF0ZS5wZGY6IGV4cHRfc3RhdGUucHMKKwllcHN0b3BkZiBleHB0X3N0YXRlLnBzCisKK3ByaW1hbGl0eS5wZGY6IHByaW1hbGl0eS5wcworCWVwc3RvcGRmIHByaW1hbGl0eS5wcworCisKK3BzZXM6IHNsaWRpbmdfd2luZG93LnBzIGV4cHRfc3RhdGUucHMgcHJpbWFsaXR5LnBzIGRlc2lnbl9wcm9jZXNzLnBzCitwZGZlczogc2xpZGluZ193aW5kb3cucGRmIGV4cHRfc3RhdGUucGRmIHByaW1hbGl0eS5wZGYgZGVzaWduX3Byb2Nlc3MucGRmCisKK2NsZWFuOgorCXJtIC1yZiAqLnBzICoucGRmIC54dnBpY3MKKyAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvcGljcy9wcmltYWxpdHkudGlmIGIvbGlidG9tbWF0aC9waWNzL3ByaW1hbGl0eS50aWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkNmJlMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvcGljcy9wcmltYWxpdHkudGlmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvcGljcy9yYWRpeC5zeGQgYi9saWJ0b21tYXRoL3BpY3MvcmFkaXguc3hkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZWI5YTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL3BpY3MvcmFkaXguc3hkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvcGljcy9zbGlkaW5nX3dpbmRvdy5zeGQgYi9saWJ0b21tYXRoL3BpY3Mvc2xpZGluZ193aW5kb3cuc3hkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZTdjMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL3BpY3Mvc2xpZGluZ193aW5kb3cuc3hkCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvcGljcy9zbGlkaW5nX3dpbmRvdy50aWYgYi9saWJ0b21tYXRoL3BpY3Mvc2xpZGluZ193aW5kb3cudGlmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiNGNiOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL3BpY3Mvc2xpZGluZ193aW5kb3cudGlmCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvcG9zdGVyLm91dCBiL2xpYnRvbW1hdGgvcG9zdGVyLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC9wb3N0ZXIub3V0CmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL3Bvc3Rlci50ZXggYi9saWJ0b21tYXRoL3Bvc3Rlci50ZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTczODhmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvcG9zdGVyLnRleApAQCAtMCwwICsxLDM1IEBACitcZG9jdW1lbnRjbGFzc1tsYW5kc2NhcGUsMTFwdF17YXJ0aWNsZX0KK1x1c2VwYWNrYWdle2Ftc21hdGgsIGFtc3N5bWJ9CitcdXNlcGFja2FnZXtoeXBlcnJlZn0KK1xiZWdpbntkb2N1bWVudH0KK1xoc3BhY2Uqey0zaW59CitcYmVnaW57dGFidWxhcn17bGxsbGxsfQorJGMgPSBhICsgYiQgICYge1x0dCBtcFxfYWRkKFwmYSwgXCZiLCBcJmMpfSAmICRiID0gMmEkICAmIHtcdHQgbXBcX211bFxfMihcJmEsIFwmYil9ICYgXFwKKyRjID0gYSAtIGIkICAmIHtcdHQgbXBcX3N1YihcJmEsIFwmYiwgXCZjKX0gJiAkYiA9IGEvMiQgJiB7XHR0IG1wXF9kaXZcXzIoXCZhLCBcJmIpfSAmIFxcCiskYyA9IGFiICQgICAmIHtcdHQgbXBcX211bChcJmEsIFwmYiwgXCZjKX0gICYgJGMgPSAyXmJhJCAgJiB7XHR0IG1wXF9tdWxcXzJkKFwmYSwgYiwgXCZjKX0gIFxcCiskYiA9IGFeMiAkICAmIHtcdHQgbXBcX3NxcihcJmEsIFwmYil9ICAgICAgICYgJGMgPSBhLzJeYiwgZCA9IGEgXG1vZCAyXmIkICYge1x0dCBtcFxfZGl2XF8yZChcJmEsIGIsIFwmYywgXCZkKX0gXFwKKyRjID0gXGxmbG9vciBhL2IgXHJmbG9vciwgZCA9IGEgXG1vZCBiJCAmIHtcdHQgbXBcX2RpdihcJmEsIFwmYiwgXCZjLCBcJmQpfSAmICRjID0gYSBcbW9kIDJeYiAkICAmIHtcdHQgbXBcX21vZFxfMmQoXCZhLCBiLCBcJmMpfSAgXFwKKyAmJiBcXAorJGEgPSBiICQgICYge1x0dCBtcFxfc2V0XF9pbnQoXCZhLCBiKX0gICYgJGMgPSBhIFx2ZWUgYiQgICYge1x0dCBtcFxfb3IoXCZhLCBcJmIsIFwmYyl9ICBcXAorJGIgPSBhICQgICYge1x0dCBtcFxfY29weShcJmEsIFwmYil9ICYgJGMgPSBhIFx3ZWRnZSBiJCAgJiB7XHR0IG1wXF9hbmQoXCZhLCBcJmIsIFwmYyl9ICBcXAorICYmICRjID0gYSBcb3BsdXMgYiQgICYge1x0dCBtcFxfeG9yKFwmYSwgXCZiLCBcJmMpfSAgXFwKKyAmIFxcCiskYiA9IC1hICQgICYge1x0dCBtcFxfbmVnKFwmYSwgXCZiKX0gICYgJGQgPSBhICsgYiBcbW9kIGMkICAmIHtcdHQgbXBcX2FkZG1vZChcJmEsIFwmYiwgXCZjLCBcJmQpfSAgXFwKKyRiID0gfGF8ICQgICYge1x0dCBtcFxfYWJzKFwmYSwgXCZiKX0gJiAkZCA9IGEgLSBiIFxtb2QgYyQgICYge1x0dCBtcFxfc3VibW9kKFwmYSwgXCZiLCBcJmMsIFwmZCl9ICBcXAorICYmICRkID0gYWIgXG1vZCBjJCAgJiB7XHR0IG1wXF9tdWxtb2QoXCZhLCBcJmIsIFwmYywgXCZkKX0gIFxcCitDb21wYXJlICRhJCBhbmQgJGIkICYge1x0dCBtcFxfY21wKFwmYSwgXCZiKX0gJiAkYyA9IGFeMiBcbW9kIGIkICAmIHtcdHQgbXBcX3Nxcm1vZChcJmEsIFwmYiwgXCZjKX0gIFxcCitJcyBaZXJvPyAmIHtcdHQgbXBcX2lzemVybyhcJmEpfSAmICRjID0gYV57LTF9IFxtb2QgYiQgICYge1x0dCBtcFxfaW52bW9kKFwmYSwgXCZiLCBcJmMpfSBcXAorSXMgRXZlbj8gJiB7XHR0IG1wXF9pc2V2ZW4oXCZhKX0gJiAkZCA9IGFeYiBcbW9kIGMkICYge1x0dCBtcFxfZXhwdG1vZChcJmEsIFwmYiwgXCZjLCBcJmQpfSBcXAorSXMgT2RkID8gJiB7XHR0IG1wXF9pc29kZChcJmEpfSBcXAorJlxcCiskXHZlcnQgXHZlcnQgYSBcdmVydCBcdmVydCQgJiB7XHR0IG1wXF91bnNpZ25lZFxfYmluXF9zaXplKFwmYSl9ICYgJHJlcyQgPSAxIGlmICRhJCBwcmltZSB0byAkdCQgcm91bmRzPyAmIHtcdHQgbXBcX3ByaW1lXF9pc1xfcHJpbWUoXCZhLCB0LCBcJnJlcyl9IFxcCiskYnVmIFxsZWZ0YXJyb3cgYSQgICAgICAgICAgJiB7XHR0IG1wXF90b1xfdW5zaWduZWRcX2JpbihcJmEsIGJ1Zil9ICYgTmV4dCBwcmltZSBhZnRlciAkYSQgdG8gJHQkIHJvdW5kcy4gJiB7XHR0IG1wXF9wcmltZVxfbmV4dFxfcHJpbWUoXCZhLCB0LCBiYnNcX3N0eWxlKX0gXFwKKyRhIFxsZWZ0YXJyb3cgYnVmWzAuLmxlbi0xXSQgICAgICAgICAgJiB7XHR0IG1wXF9yZWFkXF91bnNpZ25lZFxfYmluKFwmYSwgYnVmLCBsZW4pfSBcXAorJlxcCiskYiA9IFxzcXJ0e2F9JCAmIHtcdHQgbXBcX3NxcnQoXCZhLCBcJmIpfSAgJiAkYyA9IFxtYm94e2djZH0oYSwgYikkICYge1x0dCBtcFxfZ2NkKFwmYSwgXCZiLCBcJmMpfSBcXAorJGMgPSBhXnsxL2J9JCAmIHtcdHQgbXBcX25cX3Jvb3QoXCZhLCBiLCBcJmMpfSAmICRjID0gXG1ib3h7bGNtfShhLCBiKSQgJiB7XHR0IG1wXF9sY20oXCZhLCBcJmIsIFwmYyl9IFxcCismXFwKK0dyZWF0ZXIgVGhhbiAmIE1QXF9HVCAmIEVxdWFsIFRvICYgTVBcX0VRIFxcCitMZXNzIFRoYW4gJiBNUFxfTFQgJiBCaXRzIHBlciBkaWdpdCAmIERJR0lUXF9CSVQgXFwKK1xlbmR7dGFidWxhcn0KK1xlbmR7ZG9jdW1lbnR9CmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL3ByZV9nZW4vbXBpLmMgYi9saWJ0b21tYXRoL3ByZV9nZW4vbXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1MTEzOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnRvbW1hdGgvcHJlX2dlbi9tcGkuYwpAQCAtMCwwICsxLDk1MTQgQEAKKy8qIFN0YXJ0OiBibl9lcnJvci5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX0VSUk9SX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworICAgICBpbnQgY29kZTsKKyAgICAgY2hhciAqbXNnOworfSBtc2dzW10gPSB7CisgICAgIHsgTVBfT0tBWSwgIlN1Y2Nlc3NmdWwiIH0sCisgICAgIHsgTVBfTUVNLCAgIk91dCBvZiBoZWFwIiB9LAorICAgICB7IE1QX1ZBTCwgICJWYWx1ZSBvdXQgb2YgcmFuZ2UiIH0KK307CisKKy8qIHJldHVybiBhIGNoYXIgKiBzdHJpbmcgZm9yIGEgZ2l2ZW4gY29kZSAqLworY2hhciAqbXBfZXJyb3JfdG9fc3RyaW5nKGludCBjb2RlKQoreworICAgaW50IHg7CisKKyAgIC8qIHNjYW4gdGhlIGxvb2t1cCB0YWJsZSBmb3IgdGhlIGdpdmVuIG1lc3NhZ2UgKi8KKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2YobXNncykgLyBzaXplb2YobXNnc1swXSkpOyB4KyspIHsKKyAgICAgICBpZiAobXNnc1t4XS5jb2RlID09IGNvZGUpIHsKKyAgICAgICAgICByZXR1cm4gbXNnc1t4XS5tc2c7CisgICAgICAgfQorICAgfQorCisgICAvKiBnZW5lcmljIHJlcGx5IGZvciBpbnZhbGlkIGNvZGUgKi8KKyAgIHJldHVybiAiSW52YWxpZCBlcnJvciBjb2RlIjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fZXJyb3IuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9lcnJvci5jICovCisKKy8qIFN0YXJ0OiBibl9mYXN0X21wX2ludm1vZC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX0ZBU1RfTVBfSU5WTU9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGNvbXB1dGVzIHRoZSBtb2R1bGFyIGludmVyc2UgdmlhIGJpbmFyeSBleHRlbmRlZCBldWNsaWRlYW4gYWxnb3JpdGhtLCAKKyAqIHRoYXQgaXMgYyA9IDEvYSBtb2QgYiAKKyAqCisgKiBCYXNlZCBvbiBzbG93IGludm1vZCBleGNlcHQgdGhpcyBpcyBvcHRpbWl6ZWQgZm9yIHRoZSBjYXNlIHdoZXJlIGIgaXMgCisgKiBvZGQgYXMgcGVyIEhBQyBOb3RlIDE0LjY0IG9uIHBwLiA2MTAKKyAqLworaW50IGZhc3RfbXBfaW52bW9kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBtcF9pbnQgIHgsIHksIHUsIHYsIEIsIEQ7CisgIGludCAgICAgcmVzLCBuZWc7CisKKyAgLyogMi4gW21vZGlmaWVkXSBiIG11c3QgYmUgb2RkICAgKi8KKyAgaWYgKG1wX2lzZXZlbiAoYikgPT0gMSkgeworICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworICAvKiBpbml0IGFsbCBvdXIgdGVtcHMgKi8KKyAgaWYgKChyZXMgPSBtcF9pbml0X211bHRpKCZ4LCAmeSwgJnUsICZ2LCAmQiwgJkQsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgIHJldHVybiByZXM7CisgIH0KKworICAvKiB4ID09IG1vZHVsdXMsIHkgPT0gdmFsdWUgdG8gaW52ZXJ0ICovCisgIGlmICgocmVzID0gbXBfY29weSAoYiwgJngpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfRVJSOworICB9CisKKyAgLyogd2UgbmVlZCB5ID0gfGF8ICovCisgIGlmICgocmVzID0gbXBfbW9kIChhLCBiLCAmeSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9FUlI7CisgIH0KKworICAvKiAzLiB1PXgsIHY9eSwgQT0xLCBCPTAsIEM9MCxEPTEgKi8KKyAgaWYgKChyZXMgPSBtcF9jb3B5ICgmeCwgJnUpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfRVJSOworICB9CisgIGlmICgocmVzID0gbXBfY29weSAoJnksICZ2KSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX0VSUjsKKyAgfQorICBtcF9zZXQgKCZELCAxKTsKKwordG9wOgorICAvKiA0LiAgd2hpbGUgdSBpcyBldmVuIGRvICovCisgIHdoaWxlIChtcF9pc2V2ZW4gKCZ1KSA9PSAxKSB7CisgICAgLyogNC4xIHUgPSB1LzIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmdSwgJnUpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIC8qIDQuMiBpZiBCIGlzIG9kZCB0aGVuICovCisgICAgaWYgKG1wX2lzb2RkICgmQikgPT0gMSkgeworICAgICAgaWYgKChyZXMgPSBtcF9zdWIgKCZCLCAmeCwgJkIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgIH0KKyAgICB9CisgICAgLyogQiA9IEIvMiAqLworICAgIGlmICgocmVzID0gbXBfZGl2XzIgKCZCLCAmQikpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisgIH0KKworICAvKiA1LiAgd2hpbGUgdiBpcyBldmVuIGRvICovCisgIHdoaWxlIChtcF9pc2V2ZW4gKCZ2KSA9PSAxKSB7CisgICAgLyogNS4xIHYgPSB2LzIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmdiwgJnYpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIC8qIDUuMiBpZiBEIGlzIG9kZCB0aGVuICovCisgICAgaWYgKG1wX2lzb2RkICgmRCkgPT0gMSkgeworICAgICAgLyogRCA9IChELXgpLzIgKi8KKyAgICAgIGlmICgocmVzID0gbXBfc3ViICgmRCwgJngsICZEKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICAgfQorICAgIC8qIEQgPSBELzIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmRCwgJkQpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICB9CisKKyAgLyogNi4gIGlmIHUgPj0gdiB0aGVuICovCisgIGlmIChtcF9jbXAgKCZ1LCAmdikgIT0gTVBfTFQpIHsKKyAgICAvKiB1ID0gdSAtIHYsIEIgPSBCIC0gRCAqLworICAgIGlmICgocmVzID0gbXBfc3ViICgmdSwgJnYsICZ1KSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfc3ViICgmQiwgJkQsICZCKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAvKiB2IC0gdiAtIHUsIEQgPSBEIC0gQiAqLworICAgIGlmICgocmVzID0gbXBfc3ViICgmdiwgJnUsICZ2KSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfc3ViICgmRCwgJkIsICZEKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgfQorCisgIC8qIGlmIG5vdCB6ZXJvIGdvdG8gc3RlcCA0ICovCisgIGlmIChtcF9pc3plcm8gKCZ1KSA9PSAwKSB7CisgICAgZ290byB0b3A7CisgIH0KKworICAvKiBub3cgYSA9IEMsIGIgPSBELCBnY2QgPT0gZyp2ICovCisKKyAgLyogaWYgdiAhPSAxIHRoZW4gdGhlcmUgaXMgbm8gaW52ZXJzZSAqLworICBpZiAobXBfY21wX2QgKCZ2LCAxKSAhPSBNUF9FUSkgeworICAgIHJlcyA9IE1QX1ZBTDsKKyAgICBnb3RvIExCTF9FUlI7CisgIH0KKworICAvKiBiIGlzIG5vdyB0aGUgaW52ZXJzZSAqLworICBuZWcgPSBhLT5zaWduOworICB3aGlsZSAoRC5zaWduID09IE1QX05FRykgeworICAgIGlmICgocmVzID0gbXBfYWRkICgmRCwgYiwgJkQpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICB9CisgIG1wX2V4Y2ggKCZELCBjKTsKKyAgYy0+c2lnbiA9IG5lZzsKKyAgcmVzID0gTVBfT0tBWTsKKworTEJMX0VSUjptcF9jbGVhcl9tdWx0aSAoJngsICZ5LCAmdSwgJnYsICZCLCAmRCwgTlVMTCk7CisgIHJldHVybiByZXM7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9mYXN0X21wX2ludm1vZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX2Zhc3RfbXBfaW52bW9kLmMgKi8KKworLyogU3RhcnQ6IGJuX2Zhc3RfbXBfbW9udGdvbWVyeV9yZWR1Y2UuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9GQVNUX01QX01PTlRHT01FUllfUkVEVUNFX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGNvbXB1dGVzIHhSKiotMSA9PSB4IChtb2QgTikgdmlhIE1vbnRnb21lcnkgUmVkdWN0aW9uCisgKgorICogVGhpcyBpcyBhbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gb2YgbW9udGdvbWVyeV9yZWR1Y2UKKyAqIHdoaWNoIHVzZXMgdGhlIGNvbWJhIG1ldGhvZCB0byBxdWlja2x5IGNhbGN1bGF0ZSB0aGUgY29sdW1ucyBvZiB0aGUKKyAqIHJlZHVjdGlvbi4KKyAqCisgKiBCYXNlZCBvbiBBbGdvcml0aG0gMTQuMzIgb24gcHAuNjAxIG9mIEhBQy4KKyovCitpbnQgZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZSAobXBfaW50ICogeCwgbXBfaW50ICogbiwgbXBfZGlnaXQgcmhvKQoreworICBpbnQgICAgIGl4LCByZXMsIG9sZHVzZTsKKyAgbXBfd29yZCBXW01QX1dBUlJBWV07CisKKyAgLyogZ2V0IG9sZCB1c2VkIGNvdW50ICovCisgIG9sZHVzZSA9IHgtPnVzZWQ7CisKKyAgLyogZ3JvdyBhIGFzIHJlcXVpcmVkICovCisgIGlmICh4LT5hbGxvYyA8IG4tPnVzZWQgKyAxKSB7CisgICAgaWYgKChyZXMgPSBtcF9ncm93ICh4LCBuLT51c2VkICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisKKyAgLyogZmlyc3Qgd2UgaGF2ZSB0byBnZXQgdGhlIGRpZ2l0cyBvZiB0aGUgaW5wdXQgaW50bworICAgKiBhbiBhcnJheSBvZiBkb3VibGUgcHJlY2lzaW9uIHdvcmRzIFdbLi4uXQorICAgKi8KKyAgeworICAgIHJlZ2lzdGVyIG1wX3dvcmQgKl9XOworICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXB4OworCisgICAgLyogYWxpYXMgZm9yIHRoZSBXW10gYXJyYXkgKi8KKyAgICBfVyAgID0gVzsKKworICAgIC8qIGFsaWFzIGZvciB0aGUgZGlnaXRzIG9mICB4Ki8KKyAgICB0bXB4ID0geC0+ZHA7CisKKyAgICAvKiBjb3B5IHRoZSBkaWdpdHMgb2YgYSBpbnRvIFdbMC4uYS0+dXNlZC0xXSAqLworICAgIGZvciAoaXggPSAwOyBpeCA8IHgtPnVzZWQ7IGl4KyspIHsKKyAgICAgICpfVysrID0gKnRtcHgrKzsKKyAgICB9CisKKyAgICAvKiB6ZXJvIHRoZSBoaWdoIHdvcmRzIG9mIFdbYS0+dXNlZC4ubS0+dXNlZCoyXSAqLworICAgIGZvciAoOyBpeCA8IG4tPnVzZWQgKiAyICsgMTsgaXgrKykgeworICAgICAgKl9XKysgPSAwOworICAgIH0KKyAgfQorCisgIC8qIG5vdyB3ZSBwcm9jZWVkIHRvIHplcm8gc3VjY2Vzc2l2ZSBkaWdpdHMKKyAgICogZnJvbSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgdXB3YXJkcworICAgKi8KKyAgZm9yIChpeCA9IDA7IGl4IDwgbi0+dXNlZDsgaXgrKykgeworICAgIC8qIG11ID0gYWkgKiBtJyBtb2QgYgorICAgICAqCisgICAgICogV2UgYXZvaWQgYSBkb3VibGUgcHJlY2lzaW9uIG11bHRpcGxpY2F0aW9uICh3aGljaCBpc24ndCByZXF1aXJlZCkKKyAgICAgKiBieSBjYXN0aW5nIHRoZSB2YWx1ZSBkb3duIHRvIGEgbXBfZGlnaXQuICBOb3RlIHRoaXMgcmVxdWlyZXMKKyAgICAgKiB0aGF0IFdbaXgtMV0gaGF2ZSAgdGhlIGNhcnJ5IGNsZWFyZWQgKHNlZSBhZnRlciB0aGUgaW5uZXIgbG9vcCkKKyAgICAgKi8KKyAgICByZWdpc3RlciBtcF9kaWdpdCBtdTsKKyAgICBtdSA9IChtcF9kaWdpdCkgKCgoV1tpeF0gJiBNUF9NQVNLKSAqIHJobykgJiBNUF9NQVNLKTsKKworICAgIC8qIGEgPSBhICsgbXUgKiBtICogYioqaQorICAgICAqCisgICAgICogVGhpcyBpcyBjb21wdXRlZCBpbiBwbGFjZSBhbmQgb24gdGhlIGZseS4gIFRoZSBtdWx0aXBsaWNhdGlvbgorICAgICAqIGJ5IGIqKmkgaXMgaGFuZGxlZCBieSBvZmZzZXRpbmcgd2hpY2ggY29sdW1ucyB0aGUgcmVzdWx0cworICAgICAqIGFyZSBhZGRlZCB0by4KKyAgICAgKgorICAgICAqIE5vdGUgdGhlIGNvbWJhIG1ldGhvZCBub3JtYWxseSBkb2Vzbid0IGhhbmRsZSBjYXJyaWVzIGluIHRoZQorICAgICAqIGlubmVyIGxvb3AgSW4gdGhpcyBjYXNlIHdlIGZpeCB0aGUgY2FycnkgZnJvbSB0aGUgcHJldmlvdXMKKyAgICAgKiBjb2x1bW4gc2luY2UgdGhlIE1vbnRnb21lcnkgcmVkdWN0aW9uIHJlcXVpcmVzIGRpZ2l0cyBvZiB0aGUKKyAgICAgKiByZXN1bHQgKHNvIGZhcikgW3NlZSBhYm92ZV0gdG8gd29yay4gIFRoaXMgaXMKKyAgICAgKiBoYW5kbGVkIGJ5IGZpeGluZyB1cCBvbmUgY2FycnkgYWZ0ZXIgdGhlIGlubmVyIGxvb3AuICBUaGUKKyAgICAgKiBjYXJyeSBmaXh1cHMgYXJlIGRvbmUgaW4gb3JkZXIgc28gYWZ0ZXIgdGhlc2UgbG9vcHMgdGhlCisgICAgICogZmlyc3QgbS0+dXNlZCB3b3JkcyBvZiBXW10gaGF2ZSB0aGUgY2FycmllcyBmaXhlZAorICAgICAqLworICAgIHsKKyAgICAgIHJlZ2lzdGVyIGludCBpeTsKKyAgICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXBuOworICAgICAgcmVnaXN0ZXIgbXBfd29yZCAqX1c7CisKKyAgICAgIC8qIGFsaWFzIGZvciB0aGUgZGlnaXRzIG9mIHRoZSBtb2R1bHVzICovCisgICAgICB0bXBuID0gbi0+ZHA7CisKKyAgICAgIC8qIEFsaWFzIGZvciB0aGUgY29sdW1ucyBzZXQgYnkgYW4gb2Zmc2V0IG9mIGl4ICovCisgICAgICBfVyA9IFcgKyBpeDsKKworICAgICAgLyogaW5uZXIgbG9vcCAqLworICAgICAgZm9yIChpeSA9IDA7IGl5IDwgbi0+dXNlZDsgaXkrKykgeworICAgICAgICAgICpfVysrICs9ICgobXBfd29yZCltdSkgKiAoKG1wX3dvcmQpKnRtcG4rKyk7CisgICAgICB9CisgICAgfQorCisgICAgLyogbm93IGZpeCBjYXJyeSBmb3IgbmV4dCBkaWdpdCwgV1tpeCsxXSAqLworICAgIFdbaXggKyAxXSArPSBXW2l4XSA+PiAoKG1wX3dvcmQpIERJR0lUX0JJVCk7CisgIH0KKworICAvKiBub3cgd2UgaGF2ZSB0byBwcm9wYWdhdGUgdGhlIGNhcnJpZXMgYW5kCisgICAqIHNoaWZ0IHRoZSB3b3JkcyBkb3dud2FyZCBbYWxsIHRob3NlIGxlYXN0CisgICAqIHNpZ25pZmljYW50IGRpZ2l0cyB3ZSB6ZXJvZWRdLgorICAgKi8KKyAgeworICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXB4OworICAgIHJlZ2lzdGVyIG1wX3dvcmQgKl9XLCAqX1cxOworCisgICAgLyogbm94IGZpeCByZXN0IG9mIGNhcnJpZXMgKi8KKworICAgIC8qIGFsaWFzIGZvciBjdXJyZW50IHdvcmQgKi8KKyAgICBfVzEgPSBXICsgaXg7CisKKyAgICAvKiBhbGlhcyBmb3IgbmV4dCB3b3JkLCB3aGVyZSB0aGUgY2FycnkgZ29lcyAqLworICAgIF9XID0gVyArICsraXg7CisKKyAgICBmb3IgKDsgaXggPD0gbi0+dXNlZCAqIDIgKyAxOyBpeCsrKSB7CisgICAgICAqX1crKyArPSAqX1cxKysgPj4gKChtcF93b3JkKSBESUdJVF9CSVQpOworICAgIH0KKworICAgIC8qIGNvcHkgb3V0LCBBID0gQS9iKipuCisgICAgICoKKyAgICAgKiBUaGUgcmVzdWx0IGlzIEEvYioqbiBidXQgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIGZyb20gYW4KKyAgICAgKiBhcnJheSBvZiBtcF93b3JkIHRvIG1wX2RpZ2l0IHRoYW4gY2FsbGluZyBtcF9yc2hkCisgICAgICogd2UganVzdCBjb3B5IHRoZW0gaW4gdGhlIHJpZ2h0IG9yZGVyCisgICAgICovCisKKyAgICAvKiBhbGlhcyBmb3IgZGVzdGluYXRpb24gd29yZCAqLworICAgIHRtcHggPSB4LT5kcDsKKworICAgIC8qIGFsaWFzIGZvciBzaGlmdGVkIGRvdWJsZSBwcmVjaXNpb24gcmVzdWx0ICovCisgICAgX1cgPSBXICsgbi0+dXNlZDsKKworICAgIGZvciAoaXggPSAwOyBpeCA8IG4tPnVzZWQgKyAxOyBpeCsrKSB7CisgICAgICAqdG1weCsrID0gKG1wX2RpZ2l0KSgqX1crKyAmICgobXBfd29yZCkgTVBfTUFTSykpOworICAgIH0KKworICAgIC8qIHplcm8gb2xkdXNlZCBkaWdpdHMsIGlmIHRoZSBpbnB1dCBhIHdhcyBsYXJnZXIgdGhhbgorICAgICAqIG0tPnVzZWQrMSB3ZSdsbCBoYXZlIHRvIGNsZWFyIHRoZSBkaWdpdHMKKyAgICAgKi8KKyAgICBmb3IgKDsgaXggPCBvbGR1c2U7IGl4KyspIHsKKyAgICAgICp0bXB4KysgPSAwOworICAgIH0KKyAgfQorCisgIC8qIHNldCB0aGUgbWF4IHVzZWQgYW5kIGNsYW1wICovCisgIHgtPnVzZWQgPSBuLT51c2VkICsgMTsKKyAgbXBfY2xhbXAgKHgpOworCisgIC8qIGlmIEEgPj0gbSB0aGVuIEEgPSBBIC0gbSAqLworICBpZiAobXBfY21wX21hZyAoeCwgbikgIT0gTVBfTFQpIHsKKyAgICByZXR1cm4gc19tcF9zdWIgKHgsIG4sIHgpOworICB9CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX2Zhc3RfbXBfbW9udGdvbWVyeV9yZWR1Y2UuYyAqLworCisvKiBTdGFydDogYm5fZmFzdF9zX21wX211bF9kaWdzLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fRkFTVF9TX01QX01VTF9ESUdTX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEZhc3QgKGNvbWJhKSBtdWx0aXBsaWVyCisgKgorICogVGhpcyBpcyB0aGUgZmFzdCBjb2x1bW4tYXJyYXkgW2NvbWJhXSBtdWx0aXBsaWVyLiAgSXQgaXMgCisgKiBkZXNpZ25lZCB0byBjb21wdXRlIHRoZSBjb2x1bW5zIG9mIHRoZSBwcm9kdWN0IGZpcnN0IAorICogdGhlbiBoYW5kbGUgdGhlIGNhcnJpZXMgYWZ0ZXJ3YXJkcy4gIFRoaXMgaGFzIHRoZSBlZmZlY3QgCisgKiBvZiBtYWtpbmcgdGhlIG5lc3RlZCBsb29wcyB0aGF0IGNvbXB1dGUgdGhlIGNvbHVtbnMgdmVyeQorICogc2ltcGxlIGFuZCBzY2hlZHVsYWJsZSBvbiBzdXBlci1zY2FsYXIgcHJvY2Vzc29ycy4KKyAqCisgKiBUaGlzIGhhcyBiZWVuIG1vZGlmaWVkIHRvIHByb2R1Y2UgYSB2YXJpYWJsZSBudW1iZXIgb2YgCisgKiBkaWdpdHMgb2Ygb3V0cHV0IHNvIGlmIHNheSBvbmx5IGEgaGFsZi1wcm9kdWN0IGlzIHJlcXVpcmVkIAorICogeW91IGRvbid0IGhhdmUgdG8gY29tcHV0ZSB0aGUgdXBwZXIgaGFsZiAoYSBmZWF0dXJlIAorICogcmVxdWlyZWQgZm9yIGZhc3QgQmFycmV0dCByZWR1Y3Rpb24pLgorICoKKyAqIEJhc2VkIG9uIEFsZ29yaXRobSAxNC4xMiBvbiBwcC41OTUgb2YgSEFDLgorICoKKyAqLworaW50IGZhc3Rfc19tcF9tdWxfZGlncyAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYywgaW50IGRpZ3MpCit7CisgIGludCAgICAgb2xkdXNlLCByZXMsIHBhLCBpeCwgaXo7CisgIG1wX2RpZ2l0IFdbTVBfV0FSUkFZXTsKKyAgcmVnaXN0ZXIgbXBfd29yZCAgX1c7CisKKyAgLyogZ3JvdyB0aGUgZGVzdGluYXRpb24gYXMgcmVxdWlyZWQgKi8KKyAgaWYgKGMtPmFsbG9jIDwgZGlncykgeworICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYywgZGlncykpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisKKyAgLyogbnVtYmVyIG9mIG91dHB1dCBkaWdpdHMgdG8gcHJvZHVjZSAqLworICBwYSA9IE1JTihkaWdzLCBhLT51c2VkICsgYi0+dXNlZCk7CisKKyAgLyogY2xlYXIgdGhlIGNhcnJ5ICovCisgIF9XID0gMDsKKyAgZm9yIChpeCA9IDA7IGl4IDwgcGE7IGl4KyspIHsgCisgICAgICBpbnQgICAgICB0eCwgdHk7CisgICAgICBpbnQgICAgICBpeTsKKyAgICAgIG1wX2RpZ2l0ICp0bXB4LCAqdG1weTsKKworICAgICAgLyogZ2V0IG9mZnNldHMgaW50byB0aGUgdHdvIGJpZ251bXMgKi8KKyAgICAgIHR5ID0gTUlOKGItPnVzZWQtMSwgaXgpOworICAgICAgdHggPSBpeCAtIHR5OworCisgICAgICAvKiBzZXR1cCB0ZW1wIGFsaWFzZXMgKi8KKyAgICAgIHRtcHggPSBhLT5kcCArIHR4OworICAgICAgdG1weSA9IGItPmRwICsgdHk7CisKKyAgICAgIC8qIHRoaXMgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgbG9vcCB3aWxsIGl0ZXJyYXRlLCBlc3NlbnRpYWxseSAKKyAgICAgICAgIHdoaWxlICh0eCsrIDwgYS0+dXNlZCAmJiB0eS0tID49IDApIHsgLi4uIH0KKyAgICAgICAqLworICAgICAgaXkgPSBNSU4oYS0+dXNlZC10eCwgdHkrMSk7CisKKyAgICAgIC8qIGV4ZWN1dGUgbG9vcCAqLworICAgICAgZm9yIChpeiA9IDA7IGl6IDwgaXk7ICsraXopIHsKKyAgICAgICAgIF9XICs9ICgobXBfd29yZCkqdG1weCsrKSooKG1wX3dvcmQpKnRtcHktLSk7CisKKyAgICAgIH0KKworICAgICAgLyogc3RvcmUgdGVybSAqLworICAgICAgV1tpeF0gPSAoKG1wX2RpZ2l0KV9XKSAmIE1QX01BU0s7CisKKyAgICAgIC8qIG1ha2UgbmV4dCBjYXJyeSAqLworICAgICAgX1cgPSBfVyA+PiAoKG1wX3dvcmQpRElHSVRfQklUKTsKKyB9CisKKyAgLyogc2V0dXAgZGVzdCAqLworICBvbGR1c2UgID0gYy0+dXNlZDsKKyAgYy0+dXNlZCA9IHBhOworCisgIHsKKyAgICByZWdpc3RlciBtcF9kaWdpdCAqdG1wYzsKKyAgICB0bXBjID0gYy0+ZHA7CisgICAgZm9yIChpeCA9IDA7IGl4IDwgcGErMTsgaXgrKykgeworICAgICAgLyogbm93IGV4dHJhY3QgdGhlIHByZXZpb3VzIGRpZ2l0IFtiZWxvdyB0aGUgY2FycnldICovCisgICAgICAqdG1wYysrID0gV1tpeF07CisgICAgfQorCisgICAgLyogY2xlYXIgdW51c2VkIGRpZ2l0cyBbdGhhdCBleGlzdGVkIGluIHRoZSBvbGQgY29weSBvZiBjXSAqLworICAgIGZvciAoOyBpeCA8IG9sZHVzZTsgaXgrKykgeworICAgICAgKnRtcGMrKyA9IDA7CisgICAgfQorICB9CisgIG1wX2NsYW1wIChjKTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9mYXN0X3NfbXBfbXVsX2RpZ3MuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS43ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9mYXN0X3NfbXBfbXVsX2RpZ3MuYyAqLworCisvKiBTdGFydDogYm5fZmFzdF9zX21wX211bF9oaWdoX2RpZ3MuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9GQVNUX1NfTVBfTVVMX0hJR0hfRElHU19DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiB0aGlzIGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBmYXN0X3NfbXVsX2RpZ3MgdGhhdCBvbmx5IHByb2R1Y2VzCisgKiBvdXRwdXQgZGlnaXRzICphYm92ZSogZGlncy4gIFNlZSB0aGUgY29tbWVudHMgZm9yIGZhc3Rfc19tdWxfZGlncworICogdG8gc2VlIGhvdyBpdCB3b3Jrcy4KKyAqCisgKiBUaGlzIGlzIHVzZWQgaW4gdGhlIEJhcnJldHQgcmVkdWN0aW9uIHNpbmNlIGZvciBvbmUgb2YgdGhlIG11bHRpcGxpY2F0aW9ucworICogb25seSB0aGUgaGlnaGVyIGRpZ2l0cyB3ZXJlIG5lZWRlZC4gIFRoaXMgZXNzZW50aWFsbHkgaGFsdmVzIHRoZSB3b3JrLgorICoKKyAqIEJhc2VkIG9uIEFsZ29yaXRobSAxNC4xMiBvbiBwcC41OTUgb2YgSEFDLgorICovCitpbnQgZmFzdF9zX21wX211bF9oaWdoX2RpZ3MgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIGludCBkaWdzKQoreworICBpbnQgICAgIG9sZHVzZSwgcmVzLCBwYSwgaXgsIGl6OworICBtcF9kaWdpdCBXW01QX1dBUlJBWV07CisgIG1wX3dvcmQgIF9XOworCisgIC8qIGdyb3cgdGhlIGRlc3RpbmF0aW9uIGFzIHJlcXVpcmVkICovCisgIHBhID0gYS0+dXNlZCArIGItPnVzZWQ7CisgIGlmIChjLT5hbGxvYyA8IHBhKSB7CisgICAgaWYgKChyZXMgPSBtcF9ncm93IChjLCBwYSkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisKKyAgLyogbnVtYmVyIG9mIG91dHB1dCBkaWdpdHMgdG8gcHJvZHVjZSAqLworICBwYSA9IGEtPnVzZWQgKyBiLT51c2VkOworICBfVyA9IDA7CisgIGZvciAoaXggPSBkaWdzOyBpeCA8IHBhOyBpeCsrKSB7IAorICAgICAgaW50ICAgICAgdHgsIHR5LCBpeTsKKyAgICAgIG1wX2RpZ2l0ICp0bXB4LCAqdG1weTsKKworICAgICAgLyogZ2V0IG9mZnNldHMgaW50byB0aGUgdHdvIGJpZ251bXMgKi8KKyAgICAgIHR5ID0gTUlOKGItPnVzZWQtMSwgaXgpOworICAgICAgdHggPSBpeCAtIHR5OworCisgICAgICAvKiBzZXR1cCB0ZW1wIGFsaWFzZXMgKi8KKyAgICAgIHRtcHggPSBhLT5kcCArIHR4OworICAgICAgdG1weSA9IGItPmRwICsgdHk7CisKKyAgICAgIC8qIHRoaXMgaXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgbG9vcCB3aWxsIGl0ZXJyYXRlLCBlc3NlbnRpYWxseSBpdHMgCisgICAgICAgICB3aGlsZSAodHgrKyA8IGEtPnVzZWQgJiYgdHktLSA+PSAwKSB7IC4uLiB9CisgICAgICAgKi8KKyAgICAgIGl5ID0gTUlOKGEtPnVzZWQtdHgsIHR5KzEpOworCisgICAgICAvKiBleGVjdXRlIGxvb3AgKi8KKyAgICAgIGZvciAoaXogPSAwOyBpeiA8IGl5OyBpeisrKSB7CisgICAgICAgICBfVyArPSAoKG1wX3dvcmQpKnRtcHgrKykqKChtcF93b3JkKSp0bXB5LS0pOworICAgICAgfQorCisgICAgICAvKiBzdG9yZSB0ZXJtICovCisgICAgICBXW2l4XSA9ICgobXBfZGlnaXQpX1cpICYgTVBfTUFTSzsKKworICAgICAgLyogbWFrZSBuZXh0IGNhcnJ5ICovCisgICAgICBfVyA9IF9XID4+ICgobXBfd29yZClESUdJVF9CSVQpOworICB9CisgIAorICAvKiBzZXR1cCBkZXN0ICovCisgIG9sZHVzZSAgPSBjLT51c2VkOworICBjLT51c2VkID0gcGE7CisKKyAgeworICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXBjOworCisgICAgdG1wYyA9IGMtPmRwICsgZGlnczsKKyAgICBmb3IgKGl4ID0gZGlnczsgaXggPCBwYTsgaXgrKykgeworICAgICAgLyogbm93IGV4dHJhY3QgdGhlIHByZXZpb3VzIGRpZ2l0IFtiZWxvdyB0aGUgY2FycnldICovCisgICAgICAqdG1wYysrID0gV1tpeF07CisgICAgfQorCisgICAgLyogY2xlYXIgdW51c2VkIGRpZ2l0cyBbdGhhdCBleGlzdGVkIGluIHRoZSBvbGQgY29weSBvZiBjXSAqLworICAgIGZvciAoOyBpeCA8IG9sZHVzZTsgaXgrKykgeworICAgICAgKnRtcGMrKyA9IDA7CisgICAgfQorICB9CisgIG1wX2NsYW1wIChjKTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9mYXN0X3NfbXBfbXVsX2hpZ2hfZGlncy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjUgJCAqLworLyogJERhdGU6IDIwMDYvMTEvMTQgMDM6NDY6MjUgJCAqLworCisvKiBFbmQ6IGJuX2Zhc3Rfc19tcF9tdWxfaGlnaF9kaWdzLmMgKi8KKworLyogU3RhcnQ6IGJuX2Zhc3Rfc19tcF9zcXIuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9GQVNUX1NfTVBfU1FSX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHRoZSBqaXN0IG9mIHNxdWFyaW5nLi4uCisgKiB5b3UgZG8gbGlrZSBtdWx0IGV4Y2VwdCB0aGUgb2Zmc2V0IG9mIHRoZSB0bXB4IFtvbmUgdGhhdCAKKyAqIHN0YXJ0cyBjbG9zZXIgdG8gemVyb10gY2FuJ3QgZXF1YWwgdGhlIG9mZnNldCBvZiB0bXB5LiAgCisgKiBTbyBiYXNpY2FsbHkgeW91IHNldCB1cCBpeSBsaWtlIGJlZm9yZSB0aGVuIHlvdSBtaW4gaXQgd2l0aAorICogKHR5LXR4KSBzbyB0aGF0IGl0IG5ldmVyIGhhcHBlbnMuICBZb3UgZG91YmxlIGFsbCB0aG9zZSAKKyAqIHlvdSBhZGQgaW4gdGhlIGlubmVyIGxvb3AKKworQWZ0ZXIgdGhhdCBsb29wIHlvdSBkbyB0aGUgc3F1YXJlcyBhbmQgYWRkIHRoZW0gaW4uCisqLworCitpbnQgZmFzdF9zX21wX3NxciAobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgaW50ICAgICAgIG9sZHVzZSwgcmVzLCBwYSwgaXgsIGl6OworICBtcF9kaWdpdCAgIFdbTVBfV0FSUkFZXSwgKnRtcHg7CisgIG1wX3dvcmQgICBXMTsKKworICAvKiBncm93IHRoZSBkZXN0aW5hdGlvbiBhcyByZXF1aXJlZCAqLworICBwYSA9IGEtPnVzZWQgKyBhLT51c2VkOworICBpZiAoYi0+YWxsb2MgPCBwYSkgeworICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYiwgcGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgfQorCisgIC8qIG51bWJlciBvZiBvdXRwdXQgZGlnaXRzIHRvIHByb2R1Y2UgKi8KKyAgVzEgPSAwOworICBmb3IgKGl4ID0gMDsgaXggPCBwYTsgaXgrKykgeyAKKyAgICAgIGludCAgICAgIHR4LCB0eSwgaXk7CisgICAgICBtcF93b3JkICBfVzsKKyAgICAgIG1wX2RpZ2l0ICp0bXB5OworCisgICAgICAvKiBjbGVhciBjb3VudGVyICovCisgICAgICBfVyA9IDA7CisKKyAgICAgIC8qIGdldCBvZmZzZXRzIGludG8gdGhlIHR3byBiaWdudW1zICovCisgICAgICB0eSA9IE1JTihhLT51c2VkLTEsIGl4KTsKKyAgICAgIHR4ID0gaXggLSB0eTsKKworICAgICAgLyogc2V0dXAgdGVtcCBhbGlhc2VzICovCisgICAgICB0bXB4ID0gYS0+ZHAgKyB0eDsKKyAgICAgIHRtcHkgPSBhLT5kcCArIHR5OworCisgICAgICAvKiB0aGlzIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGxvb3Agd2lsbCBpdGVycmF0ZSwgZXNzZW50aWFsbHkKKyAgICAgICAgIHdoaWxlICh0eCsrIDwgYS0+dXNlZCAmJiB0eS0tID49IDApIHsgLi4uIH0KKyAgICAgICAqLworICAgICAgaXkgPSBNSU4oYS0+dXNlZC10eCwgdHkrMSk7CisKKyAgICAgIC8qIG5vdyBmb3Igc3F1YXJpbmcgdHggY2FuIG5ldmVyIGVxdWFsIHR5IAorICAgICAgICogd2UgaGFsdmUgdGhlIGRpc3RhbmNlIHNpbmNlIHRoZXkgYXBwcm9hY2ggYXQgYSByYXRlIG9mIDJ4CisgICAgICAgKiBhbmQgd2UgaGF2ZSB0byByb3VuZCBiZWNhdXNlIG9kZCBjYXNlcyBuZWVkIHRvIGJlIGV4ZWN1dGVkCisgICAgICAgKi8KKyAgICAgIGl5ID0gTUlOKGl5LCAodHktdHgrMSk+PjEpOworCisgICAgICAvKiBleGVjdXRlIGxvb3AgKi8KKyAgICAgIGZvciAoaXogPSAwOyBpeiA8IGl5OyBpeisrKSB7CisgICAgICAgICBfVyArPSAoKG1wX3dvcmQpKnRtcHgrKykqKChtcF93b3JkKSp0bXB5LS0pOworICAgICAgfQorCisgICAgICAvKiBkb3VibGUgdGhlIGlubmVyIHByb2R1Y3QgYW5kIGFkZCBjYXJyeSAqLworICAgICAgX1cgPSBfVyArIF9XICsgVzE7CisKKyAgICAgIC8qIGV2ZW4gY29sdW1ucyBoYXZlIHRoZSBzcXVhcmUgdGVybSBpbiB0aGVtICovCisgICAgICBpZiAoKGl4JjEpID09IDApIHsKKyAgICAgICAgIF9XICs9ICgobXBfd29yZClhLT5kcFtpeD4+MV0pKigobXBfd29yZClhLT5kcFtpeD4+MV0pOworICAgICAgfQorCisgICAgICAvKiBzdG9yZSBpdCAqLworICAgICAgV1tpeF0gPSAobXBfZGlnaXQpKF9XICYgTVBfTUFTSyk7CisKKyAgICAgIC8qIG1ha2UgbmV4dCBjYXJyeSAqLworICAgICAgVzEgPSBfVyA+PiAoKG1wX3dvcmQpRElHSVRfQklUKTsKKyAgfQorCisgIC8qIHNldHVwIGRlc3QgKi8KKyAgb2xkdXNlICA9IGItPnVzZWQ7CisgIGItPnVzZWQgPSBhLT51c2VkK2EtPnVzZWQ7CisKKyAgeworICAgIG1wX2RpZ2l0ICp0bXBiOworICAgIHRtcGIgPSBiLT5kcDsKKyAgICBmb3IgKGl4ID0gMDsgaXggPCBwYTsgaXgrKykgeworICAgICAgKnRtcGIrKyA9IFdbaXhdICYgTVBfTUFTSzsKKyAgICB9CisKKyAgICAvKiBjbGVhciB1bnVzZWQgZGlnaXRzIFt0aGF0IGV4aXN0ZWQgaW4gdGhlIG9sZCBjb3B5IG9mIGNdICovCisgICAgZm9yICg7IGl4IDwgb2xkdXNlOyBpeCsrKSB7CisgICAgICAqdG1wYisrID0gMDsKKyAgICB9CisgIH0KKyAgbXBfY2xhbXAgKGIpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX2Zhc3Rfc19tcF9zcXIuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9mYXN0X3NfbXBfc3FyLmMgKi8KKworLyogU3RhcnQ6IGJuX21wXzJleHB0LmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfMkVYUFRfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY29tcHV0ZXMgYSA9IDIqKmIgCisgKgorICogU2ltcGxlIGFsZ29yaXRobSB3aGljaCB6ZXJvZXMgdGhlIGludCwgZ3Jvd3MgaXQgdGhlbiBqdXN0IHNldHMgb25lIGJpdAorICogYXMgcmVxdWlyZWQuCisgKi8KK2ludAorbXBfMmV4cHQgKG1wX2ludCAqIGEsIGludCBiKQoreworICBpbnQgICAgIHJlczsKKworICAvKiB6ZXJvIGEgYXMgcGVyIGRlZmF1bHQgKi8KKyAgbXBfemVybyAoYSk7CisKKyAgLyogZ3JvdyBhIHRvIGFjY29tb2RhdGUgdGhlIHNpbmdsZSBiaXQgKi8KKyAgaWYgKChyZXMgPSBtcF9ncm93IChhLCBiIC8gRElHSVRfQklUICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLyogc2V0IHRoZSB1c2VkIGNvdW50IG9mIHdoZXJlIHRoZSBiaXQgd2lsbCBnbyAqLworICBhLT51c2VkID0gYiAvIERJR0lUX0JJVCArIDE7CisKKyAgLyogcHV0IHRoZSBzaW5nbGUgYml0IGluIGl0cyBwbGFjZSAqLworICBhLT5kcFtiIC8gRElHSVRfQklUXSA9ICgobXBfZGlnaXQpMSkgPDwgKGIgJSBESUdJVF9CSVQpOworCisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfMmV4cHQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF8yZXhwdC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9hYnMuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9BQlNfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogYiA9IHxhfCAKKyAqCisgKiBTaW1wbGUgZnVuY3Rpb24gY29waWVzIHRoZSBpbnB1dCBhbmQgZml4ZXMgdGhlIHNpZ24gdG8gcG9zaXRpdmUKKyAqLworaW50CittcF9hYnMgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpCit7CisgIGludCAgICAgcmVzOworCisgIC8qIGNvcHkgYSB0byBiICovCisgIGlmIChhICE9IGIpIHsKKyAgICAgaWYgKChyZXMgPSBtcF9jb3B5IChhLCBiKSkgIT0gTVBfT0tBWSkgeworICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfQorCisgIC8qIGZvcmNlIHRoZSBzaWduIG9mIGIgdG8gcG9zaXRpdmUgKi8KKyAgYi0+c2lnbiA9IE1QX1pQT1M7CisKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9hYnMuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9hYnMuYyAqLworCisvKiBTdGFydDogYm5fbXBfYWRkLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfQUREX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGhpZ2ggbGV2ZWwgYWRkaXRpb24gKGhhbmRsZXMgc2lnbnMpICovCitpbnQgbXBfYWRkIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBpbnQgICAgIHNhLCBzYiwgcmVzOworCisgIC8qIGdldCBzaWduIG9mIGJvdGggaW5wdXRzICovCisgIHNhID0gYS0+c2lnbjsKKyAgc2IgPSBiLT5zaWduOworCisgIC8qIGhhbmRsZSB0d28gY2FzZXMsIG5vdCBmb3VyICovCisgIGlmIChzYSA9PSBzYikgeworICAgIC8qIGJvdGggcG9zaXRpdmUgb3IgYm90aCBuZWdhdGl2ZSAqLworICAgIC8qIGFkZCB0aGVpciBtYWduaXR1ZGVzLCBjb3B5IHRoZSBzaWduICovCisgICAgYy0+c2lnbiA9IHNhOworICAgIHJlcyA9IHNfbXBfYWRkIChhLCBiLCBjKTsKKyAgfSBlbHNlIHsKKyAgICAvKiBvbmUgcG9zaXRpdmUsIHRoZSBvdGhlciBuZWdhdGl2ZSAqLworICAgIC8qIHN1YnRyYWN0IHRoZSBvbmUgd2l0aCB0aGUgZ3JlYXRlciBtYWduaXR1ZGUgZnJvbSAqLworICAgIC8qIHRoZSBvbmUgb2YgdGhlIGxlc3NlciBtYWduaXR1ZGUuICBUaGUgcmVzdWx0IGdldHMgKi8KKyAgICAvKiB0aGUgc2lnbiBvZiB0aGUgb25lIHdpdGggdGhlIGdyZWF0ZXIgbWFnbml0dWRlLiAqLworICAgIGlmIChtcF9jbXBfbWFnIChhLCBiKSA9PSBNUF9MVCkgeworICAgICAgYy0+c2lnbiA9IHNiOworICAgICAgcmVzID0gc19tcF9zdWIgKGIsIGEsIGMpOworICAgIH0gZWxzZSB7CisgICAgICBjLT5zaWduID0gc2E7CisgICAgICByZXMgPSBzX21wX3N1YiAoYSwgYiwgYyk7CisgICAgfQorICB9CisgIHJldHVybiByZXM7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2FkZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2FkZC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9hZGRfZC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0FERF9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHNpbmdsZSBkaWdpdCBhZGRpdGlvbiAqLworaW50CittcF9hZGRfZCAobXBfaW50ICogYSwgbXBfZGlnaXQgYiwgbXBfaW50ICogYykKK3sKKyAgaW50ICAgICByZXMsIGl4LCBvbGR1c2VkOworICBtcF9kaWdpdCAqdG1wYSwgKnRtcGMsIG11OworCisgIC8qIGdyb3cgYyBhcyByZXF1aXJlZCAqLworICBpZiAoYy0+YWxsb2MgPCBhLT51c2VkICsgMSkgeworICAgICBpZiAoKHJlcyA9IG1wX2dyb3coYywgYS0+dXNlZCArIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfQorCisgIC8qIGlmIGEgaXMgbmVnYXRpdmUgYW5kIHxhfCA+PSBiLCBjYWxsIGMgPSB8YXwgLSBiICovCisgIGlmIChhLT5zaWduID09IE1QX05FRyAmJiAoYS0+dXNlZCA+IDEgfHwgYS0+ZHBbMF0gPj0gYikpIHsKKyAgICAgLyogdGVtcG9yYXJpbHkgZml4IHNpZ24gb2YgYSAqLworICAgICBhLT5zaWduID0gTVBfWlBPUzsKKworICAgICAvKiBjID0gfGF8IC0gYiAqLworICAgICByZXMgPSBtcF9zdWJfZChhLCBiLCBjKTsKKworICAgICAvKiBmaXggc2lnbiAgKi8KKyAgICAgYS0+c2lnbiA9IGMtPnNpZ24gPSBNUF9ORUc7CisKKyAgICAgLyogY2xhbXAgKi8KKyAgICAgbXBfY2xhbXAoYyk7CisKKyAgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIG9sZCBudW1iZXIgb2YgdXNlZCBkaWdpdHMgaW4gYyAqLworICBvbGR1c2VkID0gYy0+dXNlZDsKKworICAvKiBzaWduIGFsd2F5cyBwb3NpdGl2ZSAqLworICBjLT5zaWduID0gTVBfWlBPUzsKKworICAvKiBzb3VyY2UgYWxpYXMgKi8KKyAgdG1wYSAgICA9IGEtPmRwOworCisgIC8qIGRlc3RpbmF0aW9uIGFsaWFzICovCisgIHRtcGMgICAgPSBjLT5kcDsKKworICAvKiBpZiBhIGlzIHBvc2l0aXZlICovCisgIGlmIChhLT5zaWduID09IE1QX1pQT1MpIHsKKyAgICAgLyogYWRkIGRpZ2l0LCBhZnRlciB0aGlzIHdlJ3JlIHByb3BhZ2F0aW5nCisgICAgICAqIHRoZSBjYXJyeS4KKyAgICAgICovCisgICAgICp0bXBjICAgPSAqdG1wYSsrICsgYjsKKyAgICAgbXUgICAgICA9ICp0bXBjID4+IERJR0lUX0JJVDsKKyAgICAgKnRtcGMrKyAmPSBNUF9NQVNLOworCisgICAgIC8qIG5vdyBoYW5kbGUgcmVzdCBvZiB0aGUgZGlnaXRzICovCisgICAgIGZvciAoaXggPSAxOyBpeCA8IGEtPnVzZWQ7IGl4KyspIHsKKyAgICAgICAgKnRtcGMgICA9ICp0bXBhKysgKyBtdTsKKyAgICAgICAgbXUgICAgICA9ICp0bXBjID4+IERJR0lUX0JJVDsKKyAgICAgICAgKnRtcGMrKyAmPSBNUF9NQVNLOworICAgICB9CisgICAgIC8qIHNldCBmaW5hbCBjYXJyeSAqLworICAgICBpeCsrOworICAgICAqdG1wYysrICA9IG11OworCisgICAgIC8qIHNldHVwIHNpemUgKi8KKyAgICAgYy0+dXNlZCA9IGEtPnVzZWQgKyAxOworICB9IGVsc2UgeworICAgICAvKiBhIHdhcyBuZWdhdGl2ZSBhbmQgfGF8IDwgYiAqLworICAgICBjLT51c2VkICA9IDE7CisKKyAgICAgLyogdGhlIHJlc3VsdCBpcyBhIHNpbmdsZSBkaWdpdCAqLworICAgICBpZiAoYS0+dXNlZCA9PSAxKSB7CisgICAgICAgICp0bXBjKysgID0gIGIgLSBhLT5kcFswXTsKKyAgICAgfSBlbHNlIHsKKyAgICAgICAgKnRtcGMrKyAgPSAgYjsKKyAgICAgfQorCisgICAgIC8qIHNldHVwIGNvdW50IHNvIHRoZSBjbGVhcmluZyBvZiBvbGR1c2VkCisgICAgICAqIGNhbiBmYWxsIHRocm91Z2ggY29ycmVjdGx5CisgICAgICAqLworICAgICBpeCAgICAgICA9IDE7CisgIH0KKworICAvKiBub3cgemVybyB0byBvbGR1c2VkICovCisgIHdoaWxlIChpeCsrIDwgb2xkdXNlZCkgeworICAgICAqdG1wYysrID0gMDsKKyAgfQorICBtcF9jbGFtcChjKTsKKworICByZXR1cm4gTVBfT0tBWTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfYWRkX2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9hZGRfZC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9hZGRtb2QuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9BRERNT0RfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZCA9IGEgKyBiIChtb2QgYykgKi8KK2ludAorbXBfYWRkbW9kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjLCBtcF9pbnQgKiBkKQoreworICBpbnQgICAgIHJlczsKKyAgbXBfaW50ICB0OworCisgIGlmICgocmVzID0gbXBfaW5pdCAoJnQpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIGlmICgocmVzID0gbXBfYWRkIChhLCBiLCAmdCkpICE9IE1QX09LQVkpIHsKKyAgICBtcF9jbGVhciAoJnQpOworICAgIHJldHVybiByZXM7CisgIH0KKyAgcmVzID0gbXBfbW9kICgmdCwgYywgZCk7CisgIG1wX2NsZWFyICgmdCk7CisgIHJldHVybiByZXM7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9hZGRtb2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9hZGRtb2QuYyAqLworCisvKiBTdGFydDogYm5fbXBfYW5kLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfQU5EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEFORCB0d28gaW50cyB0b2dldGhlciAqLworaW50CittcF9hbmQgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpCit7CisgIGludCAgICAgcmVzLCBpeCwgcHg7CisgIG1wX2ludCAgdCwgKng7CisKKyAgaWYgKGEtPnVzZWQgPiBiLT51c2VkKSB7CisgICAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkgKCZ0LCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgcHggPSBiLT51c2VkOworICAgIHggPSBiOworICB9IGVsc2UgeworICAgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmdCwgYikpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHB4ID0gYS0+dXNlZDsKKyAgICB4ID0gYTsKKyAgfQorCisgIGZvciAoaXggPSAwOyBpeCA8IHB4OyBpeCsrKSB7CisgICAgdC5kcFtpeF0gJj0geC0+ZHBbaXhdOworICB9CisKKyAgLyogemVybyBkaWdpdHMgYWJvdmUgdGhlIGxhc3QgZnJvbSB0aGUgc21hbGxlc3QgbXBfaW50ICovCisgIGZvciAoOyBpeCA8IHQudXNlZDsgaXgrKykgeworICAgIHQuZHBbaXhdID0gMDsKKyAgfQorCisgIG1wX2NsYW1wICgmdCk7CisgIG1wX2V4Y2ggKGMsICZ0KTsKKyAgbXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9hbmQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9hbmQuYyAqLworCisvKiBTdGFydDogYm5fbXBfY2xhbXAuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9DTEFNUF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiB0cmltIHVudXNlZCBkaWdpdHMgCisgKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IGxlYWRpbmcgemVybyBkaWdpdHMgYXJlCisgKiB0cmltZWQgYW5kIHRoZSBsZWFkaW5nICJ1c2VkIiBkaWdpdCB3aWxsIGJlIG5vbi16ZXJvCisgKiBUeXBpY2FsbHkgdmVyeSBmYXN0LiAgQWxzbyBmaXhlcyB0aGUgc2lnbiBpZiB0aGVyZQorICogYXJlIG5vIG1vcmUgbGVhZGluZyBkaWdpdHMKKyAqLwordm9pZAorbXBfY2xhbXAgKG1wX2ludCAqIGEpCit7CisgIC8qIGRlY3JlYXNlIHVzZWQgd2hpbGUgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXQgaXMKKyAgICogemVyby4KKyAgICovCisgIHdoaWxlIChhLT51c2VkID4gMCAmJiBhLT5kcFthLT51c2VkIC0gMV0gPT0gMCkgeworICAgIC0tKGEtPnVzZWQpOworICB9CisKKyAgLyogcmVzZXQgdGhlIHNpZ24gZmxhZyBpZiB1c2VkID09IDAgKi8KKyAgaWYgKGEtPnVzZWQgPT0gMCkgeworICAgIGEtPnNpZ24gPSBNUF9aUE9TOworICB9Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9jbGFtcC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2NsYW1wLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2NsZWFyLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfQ0xFQVJfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY2xlYXIgb25lIChmcmVlcykgICovCit2b2lkCittcF9jbGVhciAobXBfaW50ICogYSkKK3sKKyAgaW50IGk7CisKKyAgLyogb25seSBkbyBhbnl0aGluZyBpZiBhIGhhc24ndCBiZWVuIGZyZWVkIHByZXZpb3VzbHkgKi8KKyAgaWYgKGEtPmRwICE9IE5VTEwpIHsKKyAgICAvKiBmaXJzdCB6ZXJvIHRoZSBkaWdpdHMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgYS0+dXNlZDsgaSsrKSB7CisgICAgICAgIGEtPmRwW2ldID0gMDsKKyAgICB9CisKKyAgICAvKiBmcmVlIHJhbSAqLworICAgIFhGUkVFKGEtPmRwKTsKKworICAgIC8qIHJlc2V0IG1lbWJlcnMgdG8gbWFrZSBkZWJ1Z2dpbmcgZWFzaWVyICovCisgICAgYS0+ZHAgICAgPSBOVUxMOworICAgIGEtPmFsbG9jID0gYS0+dXNlZCA9IDA7CisgICAgYS0+c2lnbiAgPSBNUF9aUE9TOworICB9Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9jbGVhci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2NsZWFyLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2NsZWFyX211bHRpLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfQ0xFQVJfTVVMVElfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKwordm9pZCBtcF9jbGVhcl9tdWx0aShtcF9pbnQgKm1wLCAuLi4pIAoreworICAgIG1wX2ludCogbmV4dF9tcCA9IG1wOworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBtcCk7CisgICAgd2hpbGUgKG5leHRfbXAgIT0gTlVMTCkgeworICAgICAgICBtcF9jbGVhcihuZXh0X21wKTsKKyAgICAgICAgbmV4dF9tcCA9IHZhX2FyZyhhcmdzLCBtcF9pbnQqKTsKKyAgICB9CisgICAgdmFfZW5kKGFyZ3MpOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfY2xlYXJfbXVsdGkuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9jbGVhcl9tdWx0aS5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9jbXAuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9DTVBfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY29tcGFyZSB0d28gaW50cyAoc2lnbmVkKSovCitpbnQKK21wX2NtcCAobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgLyogY29tcGFyZSBiYXNlZCBvbiBzaWduICovCisgIGlmIChhLT5zaWduICE9IGItPnNpZ24pIHsKKyAgICAgaWYgKGEtPnNpZ24gPT0gTVBfTkVHKSB7CisgICAgICAgIHJldHVybiBNUF9MVDsKKyAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIE1QX0dUOworICAgICB9CisgIH0KKyAgCisgIC8qIGNvbXBhcmUgZGlnaXRzICovCisgIGlmIChhLT5zaWduID09IE1QX05FRykgeworICAgICAvKiBpZiBuZWdhdGl2ZSBjb21wYXJlIG9wcG9zaXRlIGRpcmVjdGlvbiAqLworICAgICByZXR1cm4gbXBfY21wX21hZyhiLCBhKTsKKyAgfSBlbHNlIHsKKyAgICAgcmV0dXJuIG1wX2NtcF9tYWcoYSwgYik7CisgIH0KK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2NtcC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2NtcC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9jbXBfZC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0NNUF9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGNvbXBhcmUgYSBkaWdpdCAqLworaW50IG1wX2NtcF9kKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIpCit7CisgIC8qIGNvbXBhcmUgYmFzZWQgb24gc2lnbiAqLworICBpZiAoYS0+c2lnbiA9PSBNUF9ORUcpIHsKKyAgICByZXR1cm4gTVBfTFQ7CisgIH0KKworICAvKiBjb21wYXJlIGJhc2VkIG9uIG1hZ25pdHVkZSAqLworICBpZiAoYS0+dXNlZCA+IDEpIHsKKyAgICByZXR1cm4gTVBfR1Q7CisgIH0KKworICAvKiBjb21wYXJlIHRoZSBvbmx5IGRpZ2l0IG9mIGEgdG8gYiAqLworICBpZiAoYS0+ZHBbMF0gPiBiKSB7CisgICAgcmV0dXJuIE1QX0dUOworICB9IGVsc2UgaWYgKGEtPmRwWzBdIDwgYikgeworICAgIHJldHVybiBNUF9MVDsKKyAgfSBlbHNlIHsKKyAgICByZXR1cm4gTVBfRVE7CisgIH0KK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2NtcF9kLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfY21wX2QuYyAqLworCisvKiBTdGFydDogYm5fbXBfY21wX21hZy5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0NNUF9NQUdfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY29tcGFyZSBtYWdpbml0dWRlIG9mIHR3byBpbnRzICh1bnNpZ25lZCkgKi8KK2ludCBtcF9jbXBfbWFnIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQoreworICBpbnQgICAgIG47CisgIG1wX2RpZ2l0ICp0bXBhLCAqdG1wYjsKKworICAvKiBjb21wYXJlIGJhc2VkIG9uICMgb2Ygbm9uLXplcm8gZGlnaXRzICovCisgIGlmIChhLT51c2VkID4gYi0+dXNlZCkgeworICAgIHJldHVybiBNUF9HVDsKKyAgfQorICAKKyAgaWYgKGEtPnVzZWQgPCBiLT51c2VkKSB7CisgICAgcmV0dXJuIE1QX0xUOworICB9CisKKyAgLyogYWxpYXMgZm9yIGEgKi8KKyAgdG1wYSA9IGEtPmRwICsgKGEtPnVzZWQgLSAxKTsKKworICAvKiBhbGlhcyBmb3IgYiAqLworICB0bXBiID0gYi0+ZHAgKyAoYS0+dXNlZCAtIDEpOworCisgIC8qIGNvbXBhcmUgYmFzZWQgb24gZGlnaXRzICAqLworICBmb3IgKG4gPSAwOyBuIDwgYS0+dXNlZDsgKytuLCAtLXRtcGEsIC0tdG1wYikgeworICAgIGlmICgqdG1wYSA+ICp0bXBiKSB7CisgICAgICByZXR1cm4gTVBfR1Q7CisgICAgfQorCisgICAgaWYgKCp0bXBhIDwgKnRtcGIpIHsKKyAgICAgIHJldHVybiBNUF9MVDsKKyAgICB9CisgIH0KKyAgcmV0dXJuIE1QX0VROworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfY21wX21hZy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2NtcF9tYWcuYyAqLworCisvKiBTdGFydDogYm5fbXBfY250X2xzYi5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0NOVF9MU0JfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworc3RhdGljIGNvbnN0IGludCBsbnpbMTZdID0geyAKKyAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAKK307CisKKy8qIENvdW50cyB0aGUgbnVtYmVyIG9mIGxzYnMgd2hpY2ggYXJlIHplcm8gYmVmb3JlIHRoZSBmaXJzdCB6ZXJvIGJpdCAqLworaW50IG1wX2NudF9sc2IobXBfaW50ICphKQoreworICAgaW50IHg7CisgICBtcF9kaWdpdCBxLCBxcTsKKworICAgLyogZWFzeSBvdXQgKi8KKyAgIGlmIChtcF9pc3plcm8oYSkgPT0gMSkgeworICAgICAgcmV0dXJuIDA7CisgICB9CisKKyAgIC8qIHNjYW4gbG93ZXIgZGlnaXRzIHVudGlsIG5vbi16ZXJvICovCisgICBmb3IgKHggPSAwOyB4IDwgYS0+dXNlZCAmJiBhLT5kcFt4XSA9PSAwOyB4KyspOworICAgcSA9IGEtPmRwW3hdOworICAgeCAqPSBESUdJVF9CSVQ7CisKKyAgIC8qIG5vdyBzY2FuIHRoaXMgZGlnaXQgdW50aWwgYSAxIGlzIGZvdW5kICovCisgICBpZiAoKHEgJiAxKSA9PSAwKSB7CisgICAgICBkbyB7CisgICAgICAgICBxcSAgPSBxICYgMTU7CisgICAgICAgICB4ICArPSBsbnpbcXFdOworICAgICAgICAgcSA+Pj0gNDsKKyAgICAgIH0gd2hpbGUgKHFxID09IDApOworICAgfQorICAgcmV0dXJuIHg7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2NudF9sc2IuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9jbnRfbHNiLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2NvcHkuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9DT1BZX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGNvcHksIGIgPSBhICovCitpbnQKK21wX2NvcHkgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIpCit7CisgIGludCAgICAgcmVzLCBuOworCisgIC8qIGlmIGRzdCA9PSBzcmMgZG8gbm90aGluZyAqLworICBpZiAoYSA9PSBiKSB7CisgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICAvKiBncm93IGRlc3QgKi8KKyAgaWYgKGItPmFsbG9jIDwgYS0+dXNlZCkgeworICAgICBpZiAoKHJlcyA9IG1wX2dyb3cgKGIsIGEtPnVzZWQpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfQorCisgIC8qIHplcm8gYiBhbmQgY29weSB0aGUgcGFyYW1ldGVycyBvdmVyICovCisgIHsKKyAgICByZWdpc3RlciBtcF9kaWdpdCAqdG1wYSwgKnRtcGI7CisKKyAgICAvKiBwb2ludGVyIGFsaWFzZXMgKi8KKworICAgIC8qIHNvdXJjZSAqLworICAgIHRtcGEgPSBhLT5kcDsKKworICAgIC8qIGRlc3RpbmF0aW9uICovCisgICAgdG1wYiA9IGItPmRwOworCisgICAgLyogY29weSBhbGwgdGhlIGRpZ2l0cyAqLworICAgIGZvciAobiA9IDA7IG4gPCBhLT51c2VkOyBuKyspIHsKKyAgICAgICp0bXBiKysgPSAqdG1wYSsrOworICAgIH0KKworICAgIC8qIGNsZWFyIGhpZ2ggZGlnaXRzICovCisgICAgZm9yICg7IG4gPCBiLT51c2VkOyBuKyspIHsKKyAgICAgICp0bXBiKysgPSAwOworICAgIH0KKyAgfQorCisgIC8qIGNvcHkgdXNlZCBjb3VudCBhbmQgc2lnbiAqLworICBiLT51c2VkID0gYS0+dXNlZDsKKyAgYi0+c2lnbiA9IGEtPnNpZ247CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfY29weS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2NvcHkuYyAqLworCisvKiBTdGFydDogYm5fbXBfY291bnRfYml0cy5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0NPVU5UX0JJVFNfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYW4gaW50ICovCitpbnQKK21wX2NvdW50X2JpdHMgKG1wX2ludCAqIGEpCit7CisgIGludCAgICAgcjsKKyAgbXBfZGlnaXQgcTsKKworICAvKiBzaG9ydGN1dCAqLworICBpZiAoYS0+dXNlZCA9PSAwKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICAvKiBnZXQgbnVtYmVyIG9mIGRpZ2l0cyBhbmQgYWRkIHRoYXQgKi8KKyAgciA9IChhLT51c2VkIC0gMSkgKiBESUdJVF9CSVQ7CisgIAorICAvKiB0YWtlIHRoZSBsYXN0IGRpZ2l0IGFuZCBjb3VudCB0aGUgYml0cyBpbiBpdCAqLworICBxID0gYS0+ZHBbYS0+dXNlZCAtIDFdOworICB3aGlsZSAocSA+ICgobXBfZGlnaXQpIDApKSB7CisgICAgKytyOworICAgIHEgPj49ICgobXBfZGlnaXQpIDEpOworICB9CisgIHJldHVybiByOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfY291bnRfYml0cy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2NvdW50X2JpdHMuYyAqLworCisvKiBTdGFydDogYm5fbXBfZGl2LmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRElWX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKyNpZmRlZiBCTl9NUF9ESVZfU01BTEwKKworLyogc2xvd2VyIGJpdC1iYW5nIGRpdmlzaW9uLi4uIGFsc28gc21hbGxlciAqLworaW50IG1wX2RpdihtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjLCBtcF9pbnQgKiBkKQoreworICAgbXBfaW50IHRhLCB0YiwgdHEsIHE7CisgICBpbnQgICAgcmVzLCBuLCBuMjsKKworICAvKiBpcyBkaXZpc29yIHplcm8gPyAqLworICBpZiAobXBfaXN6ZXJvIChiKSA9PSAxKSB7CisgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIGlmIGEgPCBiIHRoZW4gcT0wLCByID0gYSAqLworICBpZiAobXBfY21wX21hZyAoYSwgYikgPT0gTVBfTFQpIHsKKyAgICBpZiAoZCAhPSBOVUxMKSB7CisgICAgICByZXMgPSBtcF9jb3B5IChhLCBkKTsKKyAgICB9IGVsc2UgeworICAgICAgcmVzID0gTVBfT0tBWTsKKyAgICB9CisgICAgaWYgKGMgIT0gTlVMTCkgeworICAgICAgbXBfemVybyAoYyk7CisgICAgfQorICAgIHJldHVybiByZXM7CisgIH0KKwkKKyAgLyogaW5pdCBvdXIgdGVtcHMgKi8KKyAgaWYgKChyZXMgPSBtcF9pbml0X211bHRpKCZ0YSwgJnRiLCAmdHEsICZxLCBOVUxMKSAhPSBNUF9PS0FZKSkgeworICAgICByZXR1cm4gcmVzOworICB9CisKKworICBtcF9zZXQoJnRxLCAxKTsKKyAgbiA9IG1wX2NvdW50X2JpdHMoYSkgLSBtcF9jb3VudF9iaXRzKGIpOworICBpZiAoKChyZXMgPSBtcF9hYnMoYSwgJnRhKSkgIT0gTVBfT0tBWSkgfHwKKyAgICAgICgocmVzID0gbXBfYWJzKGIsICZ0YikpICE9IE1QX09LQVkpIHx8IAorICAgICAgKChyZXMgPSBtcF9tdWxfMmQoJnRiLCBuLCAmdGIpKSAhPSBNUF9PS0FZKSB8fAorICAgICAgKChyZXMgPSBtcF9tdWxfMmQoJnRxLCBuLCAmdHEpKSAhPSBNUF9PS0FZKSkgeworICAgICAgZ290byBMQkxfRVJSOworICB9CisKKyAgd2hpbGUgKG4tLSA+PSAwKSB7CisgICAgIGlmIChtcF9jbXAoJnRiLCAmdGEpICE9IE1QX0dUKSB7CisgICAgICAgIGlmICgoKHJlcyA9IG1wX3N1YigmdGEsICZ0YiwgJnRhKSkgIT0gTVBfT0tBWSkgfHwKKyAgICAgICAgICAgICgocmVzID0gbXBfYWRkKCZxLCAmdHEsICZxKSkgIT0gTVBfT0tBWSkpIHsKKyAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICB9CisgICAgIH0KKyAgICAgaWYgKCgocmVzID0gbXBfZGl2XzJkKCZ0YiwgMSwgJnRiLCBOVUxMKSkgIT0gTVBfT0tBWSkgfHwKKyAgICAgICAgICgocmVzID0gbXBfZGl2XzJkKCZ0cSwgMSwgJnRxLCBOVUxMKSkgIT0gTVBfT0tBWSkpIHsKKyAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICB9CisgIH0KKworICAvKiBub3cgcSA9PSBxdW90aWVudCBhbmQgdGEgPT0gcmVtYWluZGVyICovCisgIG4gID0gYS0+c2lnbjsKKyAgbjIgPSAoYS0+c2lnbiA9PSBiLT5zaWduID8gTVBfWlBPUyA6IE1QX05FRyk7CisgIGlmIChjICE9IE5VTEwpIHsKKyAgICAgbXBfZXhjaChjLCAmcSk7CisgICAgIGMtPnNpZ24gID0gKG1wX2lzemVybyhjKSA9PSBNUF9ZRVMpID8gTVBfWlBPUyA6IG4yOworICB9CisgIGlmIChkICE9IE5VTEwpIHsKKyAgICAgbXBfZXhjaChkLCAmdGEpOworICAgICBkLT5zaWduID0gKG1wX2lzemVybyhkKSA9PSBNUF9ZRVMpID8gTVBfWlBPUyA6IG47CisgIH0KK0xCTF9FUlI6CisgICBtcF9jbGVhcl9tdWx0aSgmdGEsICZ0YiwgJnRxLCAmcSwgTlVMTCk7CisgICByZXR1cm4gcmVzOworfQorCisjZWxzZQorCisvKiBpbnRlZ2VyIHNpZ25lZCBkaXZpc2lvbi4gCisgKiBjKmIgKyBkID09IGEgW2UuZy4gYS9iLCBjPXF1b3RpZW50LCBkPXJlbWFpbmRlcl0KKyAqIEhBQyBwcC41OTggQWxnb3JpdGhtIDE0LjIwCisgKgorICogTm90ZSB0aGF0IHRoZSBkZXNjcmlwdGlvbiBpbiBIQUMgaXMgaG9ycmlibHkgCisgKiBpbmNvbXBsZXRlLiAgRm9yIGV4YW1wbGUsIGl0IGRvZXNuJ3QgY29uc2lkZXIgCisgKiB0aGUgY2FzZSB3aGVyZSBkaWdpdHMgYXJlIHJlbW92ZWQgZnJvbSAneCcgaW4gCisgKiB0aGUgaW5uZXIgbG9vcC4gIEl0IGFsc28gZG9lc24ndCBjb25zaWRlciB0aGUgCisgKiBjYXNlIHRoYXQgeSBoYXMgZmV3ZXIgdGhhbiB0aHJlZSBkaWdpdHMsIGV0Yy4uCisgKgorICogVGhlIG92ZXJhbGwgYWxnb3JpdGhtIGlzIGFzIGRlc2NyaWJlZCBhcyAKKyAqIDE0LjIwIGZyb20gSEFDIGJ1dCBmaXhlZCB0byB0cmVhdCB0aGVzZSBjYXNlcy4KKyovCitpbnQgbXBfZGl2IChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjLCBtcF9pbnQgKiBkKQoreworICBtcF9pbnQgIHEsIHgsIHksIHQxLCB0MjsKKyAgaW50ICAgICByZXMsIG4sIHQsIGksIG5vcm0sIG5lZzsKKworICAvKiBpcyBkaXZpc29yIHplcm8gPyAqLworICBpZiAobXBfaXN6ZXJvIChiKSA9PSAxKSB7CisgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIGlmIGEgPCBiIHRoZW4gcT0wLCByID0gYSAqLworICBpZiAobXBfY21wX21hZyAoYSwgYikgPT0gTVBfTFQpIHsKKyAgICBpZiAoZCAhPSBOVUxMKSB7CisgICAgICByZXMgPSBtcF9jb3B5IChhLCBkKTsKKyAgICB9IGVsc2UgeworICAgICAgcmVzID0gTVBfT0tBWTsKKyAgICB9CisgICAgaWYgKGMgIT0gTlVMTCkgeworICAgICAgbXBfemVybyAoYyk7CisgICAgfQorICAgIHJldHVybiByZXM7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXRfc2l6ZSAoJnEsIGEtPnVzZWQgKyAyKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKyAgcS51c2VkID0gYS0+dXNlZCArIDI7CisKKyAgaWYgKChyZXMgPSBtcF9pbml0ICgmdDEpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfUTsKKyAgfQorCisgIGlmICgocmVzID0gbXBfaW5pdCAoJnQyKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1QxOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkgKCZ4LCBhKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1QyOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkgKCZ5LCBiKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1g7CisgIH0KKworICAvKiBmaXggdGhlIHNpZ24gKi8KKyAgbmVnID0gKGEtPnNpZ24gPT0gYi0+c2lnbikgPyBNUF9aUE9TIDogTVBfTkVHOworICB4LnNpZ24gPSB5LnNpZ24gPSBNUF9aUE9TOworCisgIC8qIG5vcm1hbGl6ZSBib3RoIHggYW5kIHksIGVuc3VyZSB0aGF0IHkgPj0gYi8yLCBbYiA9PSAyKipESUdJVF9CSVRdICovCisgIG5vcm0gPSBtcF9jb3VudF9iaXRzKCZ5KSAlIERJR0lUX0JJVDsKKyAgaWYgKG5vcm0gPCAoaW50KShESUdJVF9CSVQtMSkpIHsKKyAgICAgbm9ybSA9IChESUdJVF9CSVQtMSkgLSBub3JtOworICAgICBpZiAoKHJlcyA9IG1wX211bF8yZCAoJngsIG5vcm0sICZ4KSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gTEJMX1k7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9tdWxfMmQgKCZ5LCBub3JtLCAmeSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIExCTF9ZOworICAgICB9CisgIH0gZWxzZSB7CisgICAgIG5vcm0gPSAwOworICB9CisKKyAgLyogbm90ZSBoYWMgZG9lcyAwIGJhc2VkLCBzbyBpZiB1c2VkPT01IHRoZW4gaXRzIDAsMSwyLDMsNCwgZS5nLiB1c2UgNCAqLworICBuID0geC51c2VkIC0gMTsKKyAgdCA9IHkudXNlZCAtIDE7CisKKyAgLyogd2hpbGUgKHggPj0geSpiKipuLXQpIGRvIHsgcVtuLXRdICs9IDE7IHggLT0geSpiKip7bi10fSB9ICovCisgIGlmICgocmVzID0gbXBfbHNoZCAoJnksIG4gLSB0KSkgIT0gTVBfT0tBWSkgeyAvKiB5ID0geSpiKip7bi10fSAqLworICAgIGdvdG8gTEJMX1k7CisgIH0KKworICB3aGlsZSAobXBfY21wICgmeCwgJnkpICE9IE1QX0xUKSB7CisgICAgKysocS5kcFtuIC0gdF0pOworICAgIGlmICgocmVzID0gbXBfc3ViICgmeCwgJnksICZ4KSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfWTsKKyAgICB9CisgIH0KKworICAvKiByZXNldCB5IGJ5IHNoaWZ0aW5nIGl0IGJhY2sgZG93biAqLworICBtcF9yc2hkICgmeSwgbiAtIHQpOworCisgIC8qIHN0ZXAgMy4gZm9yIGkgZnJvbSBuIGRvd24gdG8gKHQgKyAxKSAqLworICBmb3IgKGkgPSBuOyBpID49ICh0ICsgMSk7IGktLSkgeworICAgIGlmIChpID4geC51c2VkKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBzdGVwIDMuMSBpZiB4aSA9PSB5dCB0aGVuIHNldCBxe2ktdC0xfSB0byBiLTEsIAorICAgICAqIG90aGVyd2lzZSBzZXQgcXtpLXQtMX0gdG8gKHhpKmIgKyB4e2ktMX0pL3l0ICovCisgICAgaWYgKHguZHBbaV0gPT0geS5kcFt0XSkgeworICAgICAgcS5kcFtpIC0gdCAtIDFdID0gKCgoKG1wX2RpZ2l0KTEpIDw8IERJR0lUX0JJVCkgLSAxKTsKKyAgICB9IGVsc2UgeworICAgICAgbXBfd29yZCB0bXA7CisgICAgICB0bXAgPSAoKG1wX3dvcmQpIHguZHBbaV0pIDw8ICgobXBfd29yZCkgRElHSVRfQklUKTsKKyAgICAgIHRtcCB8PSAoKG1wX3dvcmQpIHguZHBbaSAtIDFdKTsKKyAgICAgIHRtcCAvPSAoKG1wX3dvcmQpIHkuZHBbdF0pOworICAgICAgaWYgKHRtcCA+IChtcF93b3JkKSBNUF9NQVNLKQorICAgICAgICB0bXAgPSBNUF9NQVNLOworICAgICAgcS5kcFtpIC0gdCAtIDFdID0gKG1wX2RpZ2l0KSAodG1wICYgKG1wX3dvcmQpIChNUF9NQVNLKSk7CisgICAgfQorCisgICAgLyogd2hpbGUgKHF7aS10LTF9ICogKHl0ICogYiArIHl7dC0xfSkpID4gCisgICAgICAgICAgICAgeGkgKiBiKioyICsgeGktMSAqIGIgKyB4aS0yIAorICAgICAKKyAgICAgICBkbyBxe2ktdC0xfSAtPSAxOyAKKyAgICAqLworICAgIHEuZHBbaSAtIHQgLSAxXSA9IChxLmRwW2kgLSB0IC0gMV0gKyAxKSAmIE1QX01BU0s7CisgICAgZG8geworICAgICAgcS5kcFtpIC0gdCAtIDFdID0gKHEuZHBbaSAtIHQgLSAxXSAtIDEpICYgTVBfTUFTSzsKKworICAgICAgLyogZmluZCBsZWZ0IGhhbmQgKi8KKyAgICAgIG1wX3plcm8gKCZ0MSk7CisgICAgICB0MS5kcFswXSA9ICh0IC0gMSA8IDApID8gMCA6IHkuZHBbdCAtIDFdOworICAgICAgdDEuZHBbMV0gPSB5LmRwW3RdOworICAgICAgdDEudXNlZCA9IDI7CisgICAgICBpZiAoKHJlcyA9IG1wX211bF9kICgmdDEsIHEuZHBbaSAtIHQgLSAxXSwgJnQxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9ZOworICAgICAgfQorCisgICAgICAvKiBmaW5kIHJpZ2h0IGhhbmQgKi8KKyAgICAgIHQyLmRwWzBdID0gKGkgLSAyIDwgMCkgPyAwIDogeC5kcFtpIC0gMl07CisgICAgICB0Mi5kcFsxXSA9IChpIC0gMSA8IDApID8gMCA6IHguZHBbaSAtIDFdOworICAgICAgdDIuZHBbMl0gPSB4LmRwW2ldOworICAgICAgdDIudXNlZCA9IDM7CisgICAgfSB3aGlsZSAobXBfY21wX21hZygmdDEsICZ0MikgPT0gTVBfR1QpOworCisgICAgLyogc3RlcCAzLjMgeCA9IHggLSBxe2ktdC0xfSAqIHkgKiBiKip7aS10LTF9ICovCisgICAgaWYgKChyZXMgPSBtcF9tdWxfZCAoJnksIHEuZHBbaSAtIHQgLSAxXSwgJnQxKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfWTsKKyAgICB9CisKKyAgICBpZiAoKHJlcyA9IG1wX2xzaGQgKCZ0MSwgaSAtIHQgLSAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfWTsKKyAgICB9CisKKyAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJngsICZ0MSwgJngpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9ZOworICAgIH0KKworICAgIC8qIGlmIHggPCAwIHRoZW4geyB4ID0geCArIHkqYioqe2ktdC0xfTsgcXtpLXQtMX0gLT0gMTsgfSAqLworICAgIGlmICh4LnNpZ24gPT0gTVBfTkVHKSB7CisgICAgICBpZiAoKHJlcyA9IG1wX2NvcHkgKCZ5LCAmdDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1k7CisgICAgICB9CisgICAgICBpZiAoKHJlcyA9IG1wX2xzaGQgKCZ0MSwgaSAtIHQgLSAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9ZOworICAgICAgfQorICAgICAgaWYgKChyZXMgPSBtcF9hZGQgKCZ4LCAmdDEsICZ4KSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9ZOworICAgICAgfQorCisgICAgICBxLmRwW2kgLSB0IC0gMV0gPSAocS5kcFtpIC0gdCAtIDFdIC0gMVVMKSAmIE1QX01BU0s7CisgICAgfQorICB9CisKKyAgLyogbm93IHEgaXMgdGhlIHF1b3RpZW50IGFuZCB4IGlzIHRoZSByZW1haW5kZXIgCisgICAqIFt3aGljaCB3ZSBoYXZlIHRvIG5vcm1hbGl6ZV0gCisgICAqLworICAKKyAgLyogZ2V0IHNpZ24gYmVmb3JlIHdyaXRpbmcgdG8gYyAqLworICB4LnNpZ24gPSB4LnVzZWQgPT0gMCA/IE1QX1pQT1MgOiBhLT5zaWduOworCisgIGlmIChjICE9IE5VTEwpIHsKKyAgICBtcF9jbGFtcCAoJnEpOworICAgIG1wX2V4Y2ggKCZxLCBjKTsKKyAgICBjLT5zaWduID0gbmVnOworICB9CisKKyAgaWYgKGQgIT0gTlVMTCkgeworICAgIG1wX2Rpdl8yZCAoJngsIG5vcm0sICZ4LCBOVUxMKTsKKyAgICBtcF9leGNoICgmeCwgZCk7CisgIH0KKworICByZXMgPSBNUF9PS0FZOworCitMQkxfWTptcF9jbGVhciAoJnkpOworTEJMX1g6bXBfY2xlYXIgKCZ4KTsKK0xCTF9UMjptcF9jbGVhciAoJnQyKTsKK0xCTF9UMTptcF9jbGVhciAoJnQxKTsKK0xCTF9ROm1wX2NsZWFyICgmcSk7CisgIHJldHVybiByZXM7Cit9CisKKyNlbmRpZgorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9kaXYuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9kaXYuYyAqLworCisvKiBTdGFydDogYm5fbXBfZGl2XzIuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9ESVZfMl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBiID0gYS8yICovCitpbnQgbXBfZGl2XzIobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgaW50ICAgICB4LCByZXMsIG9sZHVzZWQ7CisKKyAgLyogY29weSAqLworICBpZiAoYi0+YWxsb2MgPCBhLT51c2VkKSB7CisgICAgaWYgKChyZXMgPSBtcF9ncm93IChiLCBhLT51c2VkKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKworICBvbGR1c2VkID0gYi0+dXNlZDsKKyAgYi0+dXNlZCA9IGEtPnVzZWQ7CisgIHsKKyAgICByZWdpc3RlciBtcF9kaWdpdCByLCByciwgKnRtcGEsICp0bXBiOworCisgICAgLyogc291cmNlIGFsaWFzICovCisgICAgdG1wYSA9IGEtPmRwICsgYi0+dXNlZCAtIDE7CisKKyAgICAvKiBkZXN0IGFsaWFzICovCisgICAgdG1wYiA9IGItPmRwICsgYi0+dXNlZCAtIDE7CisKKyAgICAvKiBjYXJyeSAqLworICAgIHIgPSAwOworICAgIGZvciAoeCA9IGItPnVzZWQgLSAxOyB4ID49IDA7IHgtLSkgeworICAgICAgLyogZ2V0IHRoZSBjYXJyeSBmb3IgdGhlIG5leHQgaXRlcmF0aW9uICovCisgICAgICByciA9ICp0bXBhICYgMTsKKworICAgICAgLyogc2hpZnQgdGhlIGN1cnJlbnQgZGlnaXQsIGFkZCBpbiBjYXJyeSBhbmQgc3RvcmUgKi8KKyAgICAgICp0bXBiLS0gPSAoKnRtcGEtLSA+PiAxKSB8IChyIDw8IChESUdJVF9CSVQgLSAxKSk7CisKKyAgICAgIC8qIGZvcndhcmQgY2FycnkgdG8gbmV4dCBpdGVyYXRpb24gKi8KKyAgICAgIHIgPSBycjsKKyAgICB9CisKKyAgICAvKiB6ZXJvIGV4Y2VzcyBkaWdpdHMgKi8KKyAgICB0bXBiID0gYi0+ZHAgKyBiLT51c2VkOworICAgIGZvciAoeCA9IGItPnVzZWQ7IHggPCBvbGR1c2VkOyB4KyspIHsKKyAgICAgICp0bXBiKysgPSAwOworICAgIH0KKyAgfQorICBiLT5zaWduID0gYS0+c2lnbjsKKyAgbXBfY2xhbXAgKGIpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2Rpdl8yLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfZGl2XzIuYyAqLworCisvKiBTdGFydDogYm5fbXBfZGl2XzJkLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRElWXzJEX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHNoaWZ0IHJpZ2h0IGJ5IGEgY2VydGFpbiBiaXQgY291bnQgKHN0b3JlIHF1b3RpZW50IGluIGMsIG9wdGlvbmFsIHJlbWFpbmRlciBpbiBkKSAqLworaW50IG1wX2Rpdl8yZCAobXBfaW50ICogYSwgaW50IGIsIG1wX2ludCAqIGMsIG1wX2ludCAqIGQpCit7CisgIG1wX2RpZ2l0IEQsIHIsIHJyOworICBpbnQgICAgIHgsIHJlczsKKyAgbXBfaW50ICB0OworCisKKyAgLyogaWYgdGhlIHNoaWZ0IGNvdW50IGlzIDw9IDAgdGhlbiB3ZSBkbyBubyB3b3JrICovCisgIGlmIChiIDw9IDApIHsKKyAgICByZXMgPSBtcF9jb3B5IChhLCBjKTsKKyAgICBpZiAoZCAhPSBOVUxMKSB7CisgICAgICBtcF96ZXJvIChkKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIGlmICgocmVzID0gbXBfaW5pdCAoJnQpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIGdldCB0aGUgcmVtYWluZGVyICovCisgIGlmIChkICE9IE5VTEwpIHsKKyAgICBpZiAoKHJlcyA9IG1wX21vZF8yZCAoYSwgYiwgJnQpKSAhPSBNUF9PS0FZKSB7CisgICAgICBtcF9jbGVhciAoJnQpOworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKworICAvKiBjb3B5ICovCisgIGlmICgocmVzID0gbXBfY29weSAoYSwgYykpICE9IE1QX09LQVkpIHsKKyAgICBtcF9jbGVhciAoJnQpOworICAgIHJldHVybiByZXM7CisgIH0KKworICAvKiBzaGlmdCBieSBhcyBtYW55IGRpZ2l0cyBpbiB0aGUgYml0IGNvdW50ICovCisgIGlmIChiID49IChpbnQpRElHSVRfQklUKSB7CisgICAgbXBfcnNoZCAoYywgYiAvIERJR0lUX0JJVCk7CisgIH0KKworICAvKiBzaGlmdCBhbnkgYml0IGNvdW50IDwgRElHSVRfQklUICovCisgIEQgPSAobXBfZGlnaXQpIChiICUgRElHSVRfQklUKTsKKyAgaWYgKEQgIT0gMCkgeworICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXBjLCBtYXNrLCBzaGlmdDsKKworICAgIC8qIG1hc2sgKi8KKyAgICBtYXNrID0gKCgobXBfZGlnaXQpMSkgPDwgRCkgLSAxOworCisgICAgLyogc2hpZnQgZm9yIGxzYiAqLworICAgIHNoaWZ0ID0gRElHSVRfQklUIC0gRDsKKworICAgIC8qIGFsaWFzICovCisgICAgdG1wYyA9IGMtPmRwICsgKGMtPnVzZWQgLSAxKTsKKworICAgIC8qIGNhcnJ5ICovCisgICAgciA9IDA7CisgICAgZm9yICh4ID0gYy0+dXNlZCAtIDE7IHggPj0gMDsgeC0tKSB7CisgICAgICAvKiBnZXQgdGhlIGxvd2VyICBiaXRzIG9mIHRoaXMgd29yZCBpbiBhIHRlbXAgKi8KKyAgICAgIHJyID0gKnRtcGMgJiBtYXNrOworCisgICAgICAvKiBzaGlmdCB0aGUgY3VycmVudCB3b3JkIGFuZCBtaXggaW4gdGhlIGNhcnJ5IGJpdHMgZnJvbSB0aGUgcHJldmlvdXMgd29yZCAqLworICAgICAgKnRtcGMgPSAoKnRtcGMgPj4gRCkgfCAociA8PCBzaGlmdCk7CisgICAgICAtLXRtcGM7CisKKyAgICAgIC8qIHNldCB0aGUgY2FycnkgdG8gdGhlIGNhcnJ5IGJpdHMgb2YgdGhlIGN1cnJlbnQgd29yZCBmb3VuZCBhYm92ZSAqLworICAgICAgciA9IHJyOworICAgIH0KKyAgfQorICBtcF9jbGFtcCAoYyk7CisgIGlmIChkICE9IE5VTEwpIHsKKyAgICBtcF9leGNoICgmdCwgZCk7CisgIH0KKyAgbXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9kaXZfMmQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9kaXZfMmQuYyAqLworCisvKiBTdGFydDogYm5fbXBfZGl2XzMuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9ESVZfM19DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBkaXZpZGUgYnkgdGhyZWUgKGJhc2VkIG9uIHJvdXRpbmUgZnJvbSBNUEkgYW5kIHRoZSBHTVAgbWFudWFsKSAqLworaW50CittcF9kaXZfMyAobXBfaW50ICogYSwgbXBfaW50ICpjLCBtcF9kaWdpdCAqIGQpCit7CisgIG1wX2ludCAgIHE7CisgIG1wX3dvcmQgIHcsIHQ7CisgIG1wX2RpZ2l0IGI7CisgIGludCAgICAgIHJlcywgaXg7CisgIAorICAvKiBiID0gMioqRElHSVRfQklUIC8gMyAqLworICBiID0gKCgobXBfd29yZCkxKSA8PCAoKG1wX3dvcmQpRElHSVRfQklUKSkgLyAoKG1wX3dvcmQpMyk7CisKKyAgaWYgKChyZXMgPSBtcF9pbml0X3NpemUoJnEsIGEtPnVzZWQpKSAhPSBNUF9PS0FZKSB7CisgICAgIHJldHVybiByZXM7CisgIH0KKyAgCisgIHEudXNlZCA9IGEtPnVzZWQ7CisgIHEuc2lnbiA9IGEtPnNpZ247CisgIHcgPSAwOworICBmb3IgKGl4ID0gYS0+dXNlZCAtIDE7IGl4ID49IDA7IGl4LS0pIHsKKyAgICAgdyA9ICh3IDw8ICgobXBfd29yZClESUdJVF9CSVQpKSB8ICgobXBfd29yZClhLT5kcFtpeF0pOworCisgICAgIGlmICh3ID49IDMpIHsKKyAgICAgICAgLyogbXVsdGlwbHkgdyBieSBbMS8zXSAqLworICAgICAgICB0ID0gKHcgKiAoKG1wX3dvcmQpYikpID4+ICgobXBfd29yZClESUdJVF9CSVQpOworCisgICAgICAgIC8qIG5vdyBzdWJ0cmFjdCAzICogW3cvM10gZnJvbSB3LCB0byBnZXQgdGhlIHJlbWFpbmRlciAqLworICAgICAgICB3IC09IHQrdCt0OworCisgICAgICAgIC8qIGZpeHVwIHRoZSByZW1haW5kZXIgYXMgcmVxdWlyZWQgc2luY2UKKyAgICAgICAgICogdGhlIG9wdGltaXphdGlvbiBpcyBub3QgZXhhY3QuCisgICAgICAgICAqLworICAgICAgICB3aGlsZSAodyA+PSAzKSB7CisgICAgICAgICAgIHQgKz0gMTsKKyAgICAgICAgICAgdyAtPSAzOworICAgICAgICB9CisgICAgICB9IGVsc2UgeworICAgICAgICB0ID0gMDsKKyAgICAgIH0KKyAgICAgIHEuZHBbaXhdID0gKG1wX2RpZ2l0KXQ7CisgIH0KKworICAvKiBbb3B0aW9uYWxdIHN0b3JlIHRoZSByZW1haW5kZXIgKi8KKyAgaWYgKGQgIT0gTlVMTCkgeworICAgICAqZCA9IChtcF9kaWdpdCl3OworICB9CisKKyAgLyogW29wdGlvbmFsXSBzdG9yZSB0aGUgcXVvdGllbnQgKi8KKyAgaWYgKGMgIT0gTlVMTCkgeworICAgICBtcF9jbGFtcCgmcSk7CisgICAgIG1wX2V4Y2goJnEsIGMpOworICB9CisgIG1wX2NsZWFyKCZxKTsKKyAgCisgIHJldHVybiByZXM7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2Rpdl8zLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfZGl2XzMuYyAqLworCisvKiBTdGFydDogYm5fbXBfZGl2X2QuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9ESVZfRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCitzdGF0aWMgaW50IHNfaXNfcG93ZXJfb2ZfdHdvKG1wX2RpZ2l0IGIsIGludCAqcCkKK3sKKyAgIGludCB4OworCisgICBmb3IgKHggPSAxOyB4IDwgRElHSVRfQklUOyB4KyspIHsKKyAgICAgIGlmIChiID09ICgoKG1wX2RpZ2l0KTEpPDx4KSkgeworICAgICAgICAgKnAgPSB4OworICAgICAgICAgcmV0dXJuIDE7CisgICAgICB9CisgICB9CisgICByZXR1cm4gMDsKK30KKworLyogc2luZ2xlIGRpZ2l0IGRpdmlzaW9uIChiYXNlZCBvbiByb3V0aW5lIGZyb20gTVBJKSAqLworaW50IG1wX2Rpdl9kIChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiLCBtcF9pbnQgKiBjLCBtcF9kaWdpdCAqIGQpCit7CisgIG1wX2ludCAgcTsKKyAgbXBfd29yZCB3OworICBtcF9kaWdpdCB0OworICBpbnQgICAgIHJlcywgaXg7CisKKyAgLyogY2Fubm90IGRpdmlkZSBieSB6ZXJvICovCisgIGlmIChiID09IDApIHsKKyAgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIHF1aWNrIG91dHMgKi8KKyAgaWYgKGIgPT0gMSB8fCBtcF9pc3plcm8oYSkgPT0gMSkgeworICAgICBpZiAoZCAhPSBOVUxMKSB7CisgICAgICAgICpkID0gMDsKKyAgICAgfQorICAgICBpZiAoYyAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybiBtcF9jb3B5KGEsIGMpOworICAgICB9CisgICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogcG93ZXIgb2YgdHdvID8gKi8KKyAgaWYgKHNfaXNfcG93ZXJfb2ZfdHdvKGIsICZpeCkgPT0gMSkgeworICAgICBpZiAoZCAhPSBOVUxMKSB7CisgICAgICAgICpkID0gYS0+ZHBbMF0gJiAoKCgobXBfZGlnaXQpMSk8PGl4KSAtIDEpOworICAgICB9CisgICAgIGlmIChjICE9IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIG1wX2Rpdl8yZChhLCBpeCwgYywgTlVMTCk7CisgICAgIH0KKyAgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworI2lmZGVmIEJOX01QX0RJVl8zX0MKKyAgLyogdGhyZWU/ICovCisgIGlmIChiID09IDMpIHsKKyAgICAgcmV0dXJuIG1wX2Rpdl8zKGEsIGMsIGQpOworICB9CisjZW5kaWYKKworICAvKiBubyBlYXN5IGFuc3dlciBbYydlc3QgbGEgdmllXS4gIEp1c3QgZGl2aXNpb24gKi8KKyAgaWYgKChyZXMgPSBtcF9pbml0X3NpemUoJnEsIGEtPnVzZWQpKSAhPSBNUF9PS0FZKSB7CisgICAgIHJldHVybiByZXM7CisgIH0KKyAgCisgIHEudXNlZCA9IGEtPnVzZWQ7CisgIHEuc2lnbiA9IGEtPnNpZ247CisgIHcgPSAwOworICBmb3IgKGl4ID0gYS0+dXNlZCAtIDE7IGl4ID49IDA7IGl4LS0pIHsKKyAgICAgdyA9ICh3IDw8ICgobXBfd29yZClESUdJVF9CSVQpKSB8ICgobXBfd29yZClhLT5kcFtpeF0pOworICAgICAKKyAgICAgaWYgKHcgPj0gYikgeworICAgICAgICB0ID0gKG1wX2RpZ2l0KSh3IC8gYik7CisgICAgICAgIHcgLT0gKChtcF93b3JkKXQpICogKChtcF93b3JkKWIpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdCA9IDA7CisgICAgICB9CisgICAgICBxLmRwW2l4XSA9IChtcF9kaWdpdCl0OworICB9CisgIAorICBpZiAoZCAhPSBOVUxMKSB7CisgICAgICpkID0gKG1wX2RpZ2l0KXc7CisgIH0KKyAgCisgIGlmIChjICE9IE5VTEwpIHsKKyAgICAgbXBfY2xhbXAoJnEpOworICAgICBtcF9leGNoKCZxLCBjKTsKKyAgfQorICBtcF9jbGVhcigmcSk7CisgIAorICByZXR1cm4gcmVzOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9kaXZfZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2Rpdl9kLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2RyX2lzX21vZHVsdXMuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9EUl9JU19NT0RVTFVTX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGRldGVybWluZXMgaWYgYSBudW1iZXIgaXMgYSB2YWxpZCBEUiBtb2R1bHVzICovCitpbnQgbXBfZHJfaXNfbW9kdWx1cyhtcF9pbnQgKmEpCit7CisgICBpbnQgaXg7CisKKyAgIC8qIG11c3QgYmUgYXQgbGVhc3QgdHdvIGRpZ2l0cyAqLworICAgaWYgKGEtPnVzZWQgPCAyKSB7CisgICAgICByZXR1cm4gMDsKKyAgIH0KKworICAgLyogbXVzdCBiZSBvZiB0aGUgZm9ybSBiKiprIC0gYSBbYSA8PSBiXSBzbyBhbGwKKyAgICAqIGJ1dCB0aGUgZmlyc3QgZGlnaXQgbXVzdCBiZSBlcXVhbCB0byAtMSAobW9kIGIpLgorICAgICovCisgICBmb3IgKGl4ID0gMTsgaXggPCBhLT51c2VkOyBpeCsrKSB7CisgICAgICAgaWYgKGEtPmRwW2l4XSAhPSBNUF9NQVNLKSB7CisgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgfQorICAgfQorICAgcmV0dXJuIDE7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2RyX2lzX21vZHVsdXMuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9kcl9pc19tb2R1bHVzLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2RyX3JlZHVjZS5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0RSX1JFRFVDRV9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiByZWR1Y2UgIngiIGluIHBsYWNlIG1vZHVsbyAibiIgdXNpbmcgdGhlIERpbWluaXNoZWQgUmFkaXggYWxnb3JpdGhtLgorICoKKyAqIEJhc2VkIG9uIGFsZ29yaXRobSBmcm9tIHRoZSBwYXBlcgorICoKKyAqICJHZW5lcmF0aW5nIEVmZmljaWVudCBQcmltZXMgZm9yIERpc2NyZXRlIExvZyBDcnlwdG9zeXN0ZW1zIgorICogICAgICAgICAgICAgICAgIENoYWUgSG9vbiBMaW0sIFBpbCBKb29uZyBMZWUsCisgKiAgICAgICAgICBQT1NURUNIIEluZm9ybWF0aW9uIFJlc2VhcmNoIExhYm9yYXRvcmllcworICoKKyAqIFRoZSBtb2R1bHVzIG11c3QgYmUgb2YgYSBzcGVjaWFsIGZvcm1hdCBbc2VlIG1hbnVhbF0KKyAqCisgKiBIYXMgYmVlbiBtb2RpZmllZCB0byB1c2UgYWxnb3JpdGhtIDcuMTAgZnJvbSB0aGUgTFRNIGJvb2sgaW5zdGVhZAorICoKKyAqIElucHV0IHggbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMCA8PSB4IDw9IChuLTEpKioyCisgKi8KK2ludAorbXBfZHJfcmVkdWNlIChtcF9pbnQgKiB4LCBtcF9pbnQgKiBuLCBtcF9kaWdpdCBrKQoreworICBpbnQgICAgICBlcnIsIGksIG07CisgIG1wX3dvcmQgIHI7CisgIG1wX2RpZ2l0IG11LCAqdG1weDEsICp0bXB4MjsKKworICAvKiBtID0gZGlnaXRzIGluIG1vZHVsdXMgKi8KKyAgbSA9IG4tPnVzZWQ7CisKKyAgLyogZW5zdXJlIHRoYXQgIngiIGhhcyBhdCBsZWFzdCAybSBkaWdpdHMgKi8KKyAgaWYgKHgtPmFsbG9jIDwgbSArIG0pIHsKKyAgICBpZiAoKGVyciA9IG1wX2dyb3cgKHgsIG0gKyBtKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgIH0KKworLyogdG9wIG9mIGxvb3AsIHRoaXMgaXMgd2hlcmUgdGhlIGNvZGUgcmVzdW1lcyBpZgorICogYW5vdGhlciByZWR1Y3Rpb24gcGFzcyBpcyByZXF1aXJlZC4KKyAqLwordG9wOgorICAvKiBhbGlhc2VzIGZvciBkaWdpdHMgKi8KKyAgLyogYWxpYXMgZm9yIGxvd2VyIGhhbGYgb2YgeCAqLworICB0bXB4MSA9IHgtPmRwOworCisgIC8qIGFsaWFzIGZvciB1cHBlciBoYWxmIG9mIHgsIG9yIHgvQioqbSAqLworICB0bXB4MiA9IHgtPmRwICsgbTsKKworICAvKiBzZXQgY2FycnkgdG8gemVybyAqLworICBtdSA9IDA7CisKKyAgLyogY29tcHV0ZSAoeCBtb2QgQioqbSkgKyBrICogW3gvQioqbV0gaW5saW5lIGFuZCBpbnBsYWNlICovCisgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHsKKyAgICAgIHIgICAgICAgICA9ICgobXBfd29yZCkqdG1weDIrKykgKiAoKG1wX3dvcmQpaykgKyAqdG1weDEgKyBtdTsKKyAgICAgICp0bXB4MSsrICA9IChtcF9kaWdpdCkociAmIE1QX01BU0spOworICAgICAgbXUgICAgICAgID0gKG1wX2RpZ2l0KShyID4+ICgobXBfd29yZClESUdJVF9CSVQpKTsKKyAgfQorCisgIC8qIHNldCBmaW5hbCBjYXJyeSAqLworICAqdG1weDErKyA9IG11OworCisgIC8qIHplcm8gd29yZHMgYWJvdmUgbSAqLworICBmb3IgKGkgPSBtICsgMTsgaSA8IHgtPnVzZWQ7IGkrKykgeworICAgICAgKnRtcHgxKysgPSAwOworICB9CisKKyAgLyogY2xhbXAsIHN1YiBhbmQgcmV0dXJuICovCisgIG1wX2NsYW1wICh4KTsKKworICAvKiBpZiB4ID49IG4gdGhlbiBzdWJ0cmFjdCBhbmQgcmVkdWNlIGFnYWluCisgICAqIEVhY2ggc3VjY2Vzc2l2ZSAicmVjdXJzaW9uIiBtYWtlcyB0aGUgaW5wdXQgc21hbGxlciBhbmQgc21hbGxlci4KKyAgICovCisgIGlmIChtcF9jbXBfbWFnICh4LCBuKSAhPSBNUF9MVCkgeworICAgIHNfbXBfc3ViKHgsIG4sIHgpOworICAgIGdvdG8gdG9wOworICB9CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZHJfcmVkdWNlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfZHJfcmVkdWNlLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2RyX3NldHVwLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRFJfU0VUVVBfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZGV0ZXJtaW5lcyB0aGUgc2V0dXAgdmFsdWUgKi8KK3ZvaWQgbXBfZHJfc2V0dXAobXBfaW50ICphLCBtcF9kaWdpdCAqZCkKK3sKKyAgIC8qIHRoZSBjYXN0cyBhcmUgcmVxdWlyZWQgaWYgRElHSVRfQklUIGlzIG9uZSBsZXNzIHRoYW4KKyAgICAqIHRoZSBudW1iZXIgb2YgYml0cyBpbiBhIG1wX2RpZ2l0IFtlLmcuIERJR0lUX0JJVD09MzFdCisgICAgKi8KKyAgICpkID0gKG1wX2RpZ2l0KSgoKChtcF93b3JkKTEpIDw8ICgobXBfd29yZClESUdJVF9CSVQpKSAtIAorICAgICAgICAoKG1wX3dvcmQpYS0+ZHBbMF0pKTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZHJfc2V0dXAuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9kcl9zZXR1cC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9leGNoLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRVhDSF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBzd2FwIHRoZSBlbGVtZW50cyBvZiB0d28gaW50ZWdlcnMsIGZvciBjYXNlcyB3aGVyZSB5b3UgY2FuJ3Qgc2ltcGx5IHN3YXAgdGhlIAorICogbXBfaW50IHBvaW50ZXJzIGFyb3VuZAorICovCit2b2lkCittcF9leGNoIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQoreworICBtcF9pbnQgIHQ7CisKKyAgdCAgPSAqYTsKKyAgKmEgPSAqYjsKKyAgKmIgPSB0OworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZXhjaC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2V4Y2guYyAqLworCisvKiBTdGFydDogYm5fbXBfZXhwdF9kLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRVhQVF9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGNhbGN1bGF0ZSBjID0gYSoqYiAgdXNpbmcgYSBzcXVhcmUtbXVsdGlwbHkgYWxnb3JpdGhtICovCitpbnQgbXBfZXhwdF9kIChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiLCBtcF9pbnQgKiBjKQoreworICBpbnQgICAgIHJlcywgeDsKKyAgbXBfaW50ICBnOworCisgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmZywgYSkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLyogc2V0IGluaXRpYWwgcmVzdWx0ICovCisgIG1wX3NldCAoYywgMSk7CisKKyAgZm9yICh4ID0gMDsgeCA8IChpbnQpIERJR0lUX0JJVDsgeCsrKSB7CisgICAgLyogc3F1YXJlICovCisgICAgaWYgKChyZXMgPSBtcF9zcXIgKGMsIGMpKSAhPSBNUF9PS0FZKSB7CisgICAgICBtcF9jbGVhciAoJmcpOworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyAgICAvKiBpZiB0aGUgYml0IGlzIHNldCBtdWx0aXBseSAqLworICAgIGlmICgoYiAmIChtcF9kaWdpdCkgKCgobXBfZGlnaXQpMSkgPDwgKERJR0lUX0JJVCAtIDEpKSkgIT0gMCkgeworICAgICAgaWYgKChyZXMgPSBtcF9tdWwgKGMsICZnLCBjKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgbXBfY2xlYXIgKCZnKTsKKyAgICAgICAgIHJldHVybiByZXM7CisgICAgICB9CisgICAgfQorCisgICAgLyogc2hpZnQgdG8gbmV4dCBiaXQgKi8KKyAgICBiIDw8PSAxOworICB9CisKKyAgbXBfY2xlYXIgKCZnKTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9leHB0X2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9leHB0X2QuYyAqLworCisvKiBTdGFydDogYm5fbXBfZXhwdG1vZC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0VYUFRNT0RfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworCisvKiB0aGlzIGlzIGEgc2hlbGwgZnVuY3Rpb24gdGhhdCBjYWxscyBlaXRoZXIgdGhlIG5vcm1hbCBvciBNb250Z29tZXJ5CisgKiBleHB0bW9kIGZ1bmN0aW9ucy4gIE9yaWdpbmFsbHkgdGhlIGNhbGwgdG8gdGhlIG1vbnRnb21lcnkgY29kZSB3YXMKKyAqIGVtYmVkZGVkIGluIHRoZSBub3JtYWwgZnVuY3Rpb24gYnV0IHRoYXQgd2FzdGVkIGFsb3Qgb2Ygc3RhY2sgc3BhY2UKKyAqIGZvciBub3RoaW5nIChzaW5jZSA5OSUgb2YgdGhlIHRpbWUgdGhlIE1vbnRnb21lcnkgY29kZSB3b3VsZCBiZSBjYWxsZWQpCisgKi8KK2ludCBtcF9leHB0bW9kIChtcF9pbnQgKiBHLCBtcF9pbnQgKiBYLCBtcF9pbnQgKiBQLCBtcF9pbnQgKiBZKQoreworICBpbnQgZHI7CisKKyAgLyogbW9kdWx1cyBQIG11c3QgYmUgcG9zaXRpdmUgKi8KKyAgaWYgKFAtPnNpZ24gPT0gTVBfTkVHKSB7CisgICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworICAvKiBpZiBleHBvbmVudCBYIGlzIG5lZ2F0aXZlIHdlIGhhdmUgdG8gcmVjdXJzZSAqLworICBpZiAoWC0+c2lnbiA9PSBNUF9ORUcpIHsKKyNpZmRlZiBCTl9NUF9JTlZNT0RfQworICAgICBtcF9pbnQgdG1wRywgdG1wWDsKKyAgICAgaW50IGVycjsKKworICAgICAvKiBmaXJzdCBjb21wdXRlIDEvRyBtb2QgUCAqLworICAgICBpZiAoKGVyciA9IG1wX2luaXQoJnRtcEcpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgIH0KKyAgICAgaWYgKChlcnIgPSBtcF9pbnZtb2QoRywgUCwgJnRtcEcpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIG1wX2NsZWFyKCZ0bXBHKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgfQorCisgICAgIC8qIG5vdyBnZXQgfFh8ICovCisgICAgIGlmICgoZXJyID0gbXBfaW5pdCgmdG1wWCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgbXBfY2xlYXIoJnRtcEcpOworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisgICAgIGlmICgoZXJyID0gbXBfYWJzKFgsICZ0bXBYKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBtcF9jbGVhcl9tdWx0aSgmdG1wRywgJnRtcFgsIE5VTEwpOworICAgICAgICByZXR1cm4gZXJyOworICAgICB9CisKKyAgICAgLyogYW5kIG5vdyBjb21wdXRlICgxL0cpKip8WHwgaW5zdGVhZCBvZiBHKipYIFtYIDwgMF0gKi8KKyAgICAgZXJyID0gbXBfZXhwdG1vZCgmdG1wRywgJnRtcFgsIFAsIFkpOworICAgICBtcF9jbGVhcl9tdWx0aSgmdG1wRywgJnRtcFgsIE5VTEwpOworICAgICByZXR1cm4gZXJyOworI2Vsc2UgCisgICAgIC8qIG5vIGludm1vZCAqLworICAgICByZXR1cm4gTVBfVkFMOworI2VuZGlmCisgIH0KKworLyogbW9kaWZpZWQgZGltaW5pc2hlZCByYWRpeCByZWR1Y3Rpb24gKi8KKyNpZiBkZWZpbmVkKEJOX01QX1JFRFVDRV9JU18yS19MX0MpICYmIGRlZmluZWQoQk5fTVBfUkVEVUNFXzJLX0xfQykgJiYgZGVmaW5lZChCTl9TX01QX0VYUFRNT0RfQykKKyAgaWYgKG1wX3JlZHVjZV9pc18ya19sKFApID09IE1QX1lFUykgeworICAgICByZXR1cm4gc19tcF9leHB0bW9kKEcsIFgsIFAsIFksIDEpOworICB9CisjZW5kaWYKKworI2lmZGVmIEJOX01QX0RSX0lTX01PRFVMVVNfQworICAvKiBpcyBpdCBhIERSIG1vZHVsdXM/ICovCisgIGRyID0gbXBfZHJfaXNfbW9kdWx1cyhQKTsKKyNlbHNlCisgIC8qIGRlZmF1bHQgdG8gbm8gKi8KKyAgZHIgPSAwOworI2VuZGlmCisKKyNpZmRlZiBCTl9NUF9SRURVQ0VfSVNfMktfQworICAvKiBpZiBub3QsIGlzIGl0IGEgdW5yZXN0cmljdGVkIERSIG1vZHVsdXM/ICovCisgIGlmIChkciA9PSAwKSB7CisgICAgIGRyID0gbXBfcmVkdWNlX2lzXzJrKFApIDw8IDE7CisgIH0KKyNlbmRpZgorICAgIAorICAvKiBpZiB0aGUgbW9kdWx1cyBpcyBvZGQgb3IgZHIgIT0gMCB1c2UgdGhlIG1vbnRnb21lcnkgbWV0aG9kICovCisjaWZkZWYgQk5fTVBfRVhQVE1PRF9GQVNUX0MKKyAgaWYgKG1wX2lzb2RkIChQKSA9PSAxIHx8IGRyICE9ICAwKSB7CisgICAgcmV0dXJuIG1wX2V4cHRtb2RfZmFzdCAoRywgWCwgUCwgWSwgZHIpOworICB9IGVsc2UgeworI2VuZGlmCisjaWZkZWYgQk5fU19NUF9FWFBUTU9EX0MKKyAgICAvKiBvdGhlcndpc2UgdXNlIHRoZSBnZW5lcmljIEJhcnJldHQgcmVkdWN0aW9uIHRlY2huaXF1ZSAqLworICAgIHJldHVybiBzX21wX2V4cHRtb2QgKEcsIFgsIFAsIFksIDApOworI2Vsc2UKKyAgICAvKiBubyBleHB0bW9kIGZvciBldmVucyAqLworICAgIHJldHVybiBNUF9WQUw7CisjZW5kaWYKKyNpZmRlZiBCTl9NUF9FWFBUTU9EX0ZBU1RfQworICB9CisjZW5kaWYKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZXhwdG1vZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2V4cHRtb2QuYyAqLworCisvKiBTdGFydDogYm5fbXBfZXhwdG1vZF9mYXN0LmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRVhQVE1PRF9GQVNUX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGNvbXB1dGVzIFkgPT0gRyoqWCBtb2QgUCwgSEFDIHBwLjYxNiwgQWxnb3JpdGhtIDE0Ljg1CisgKgorICogVXNlcyBhIGxlZnQtdG8tcmlnaHQgay1hcnkgc2xpZGluZyB3aW5kb3cgdG8gY29tcHV0ZSB0aGUgbW9kdWxhciBleHBvbmVudGlhdGlvbi4KKyAqIFRoZSB2YWx1ZSBvZiBrIGNoYW5nZXMgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGV4cG9uZW50LgorICoKKyAqIFVzZXMgTW9udGdvbWVyeSBvciBEaW1pbmlzaGVkIFJhZGl4IHJlZHVjdGlvbiBbd2hpY2hldmVyIGFwcHJvcHJpYXRlXQorICovCisKKyNpZmRlZiBNUF9MT1dfTUVNCisgICAjZGVmaW5lIFRBQl9TSVpFIDMyCisjZWxzZQorICAgI2RlZmluZSBUQUJfU0laRSAyNTYKKyNlbmRpZgorCitpbnQgbXBfZXhwdG1vZF9mYXN0IChtcF9pbnQgKiBHLCBtcF9pbnQgKiBYLCBtcF9pbnQgKiBQLCBtcF9pbnQgKiBZLCBpbnQgcmVkbW9kZSkKK3sKKyAgbXBfaW50ICBNW1RBQl9TSVpFXSwgcmVzOworICBtcF9kaWdpdCBidWYsIG1wOworICBpbnQgICAgIGVyciwgYml0YnVmLCBiaXRjcHksIGJpdGNudCwgbW9kZSwgZGlnaWR4LCB4LCB5LCB3aW5zaXplOworCisgIC8qIHVzZSBhIHBvaW50ZXIgdG8gdGhlIHJlZHVjdGlvbiBhbGdvcml0aG0uICBUaGlzIGFsbG93cyB1cyB0byB1c2UKKyAgICogb25lIG9mIG1hbnkgcmVkdWN0aW9uIGFsZ29yaXRobXMgd2l0aG91dCBtb2RkaW5nIHRoZSBndXRzIG9mCisgICAqIHRoZSBjb2RlIHdpdGggaWYgc3RhdGVtZW50cyBldmVyeXdoZXJlLgorICAgKi8KKyAgaW50ICAgICAoKnJlZHV4KShtcF9pbnQqLG1wX2ludCosbXBfZGlnaXQpOworCisgIC8qIGZpbmQgd2luZG93IHNpemUgKi8KKyAgeCA9IG1wX2NvdW50X2JpdHMgKFgpOworICBpZiAoeCA8PSA3KSB7CisgICAgd2luc2l6ZSA9IDI7CisgIH0gZWxzZSBpZiAoeCA8PSAzNikgeworICAgIHdpbnNpemUgPSAzOworICB9IGVsc2UgaWYgKHggPD0gMTQwKSB7CisgICAgd2luc2l6ZSA9IDQ7CisgIH0gZWxzZSBpZiAoeCA8PSA0NTApIHsKKyAgICB3aW5zaXplID0gNTsKKyAgfSBlbHNlIGlmICh4IDw9IDEzMDMpIHsKKyAgICB3aW5zaXplID0gNjsKKyAgfSBlbHNlIGlmICh4IDw9IDM1MjkpIHsKKyAgICB3aW5zaXplID0gNzsKKyAgfSBlbHNlIHsKKyAgICB3aW5zaXplID0gODsKKyAgfQorCisjaWZkZWYgTVBfTE9XX01FTQorICBpZiAod2luc2l6ZSA+IDUpIHsKKyAgICAgd2luc2l6ZSA9IDU7CisgIH0KKyNlbmRpZgorCisgIC8qIGluaXQgTSBhcnJheSAqLworICAvKiBpbml0IGZpcnN0IGNlbGwgKi8KKyAgaWYgKChlcnIgPSBtcF9pbml0KCZNWzFdKSkgIT0gTVBfT0tBWSkgeworICAgICByZXR1cm4gZXJyOworICB9CisKKyAgLyogbm93IGluaXQgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBhcnJheSAqLworICBmb3IgKHggPSAxPDwod2luc2l6ZS0xKTsgeCA8ICgxIDw8IHdpbnNpemUpOyB4KyspIHsKKyAgICBpZiAoKGVyciA9IG1wX2luaXQoJk1beF0pKSAhPSBNUF9PS0FZKSB7CisgICAgICBmb3IgKHkgPSAxPDwod2luc2l6ZS0xKTsgeSA8IHg7IHkrKykgeworICAgICAgICBtcF9jbGVhciAoJk1beV0pOworICAgICAgfQorICAgICAgbXBfY2xlYXIoJk1bMV0pOworICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgIH0KKworICAvKiBkZXRlcm1pbmUgYW5kIHNldHVwIHJlZHVjdGlvbiBjb2RlICovCisgIGlmIChyZWRtb2RlID09IDApIHsKKyNpZmRlZiBCTl9NUF9NT05UR09NRVJZX1NFVFVQX0MgICAgIAorICAgICAvKiBub3cgc2V0dXAgbW9udGdvbWVyeSAgKi8KKyAgICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X3NldHVwIChQLCAmbXApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX007CisgICAgIH0KKyNlbHNlCisgICAgIGVyciA9IE1QX1ZBTDsKKyAgICAgZ290byBMQkxfTTsKKyNlbmRpZgorCisgICAgIC8qIGF1dG9tYXRpY2FsbHkgcGljayB0aGUgY29tYmEgb25lIGlmIGF2YWlsYWJsZSAoc2F2ZXMgcXVpdGUgYSBmZXcgY2FsbHMvaWZzKSAqLworI2lmZGVmIEJOX0ZBU1RfTVBfTU9OVEdPTUVSWV9SRURVQ0VfQworICAgICBpZiAoKChQLT51c2VkICogMiArIDEpIDwgTVBfV0FSUkFZKSAmJgorICAgICAgICAgIFAtPnVzZWQgPCAoMSA8PCAoKENIQVJfQklUICogc2l6ZW9mIChtcF93b3JkKSkgLSAoMiAqIERJR0lUX0JJVCkpKSkgeworICAgICAgICByZWR1eCA9IGZhc3RfbXBfbW9udGdvbWVyeV9yZWR1Y2U7CisgICAgIH0gZWxzZSAKKyNlbmRpZgorICAgICB7CisjaWZkZWYgQk5fTVBfTU9OVEdPTUVSWV9SRURVQ0VfQworICAgICAgICAvKiB1c2Ugc2xvd2VyIGJhc2VsaW5lIE1vbnRnb21lcnkgbWV0aG9kICovCisgICAgICAgIHJlZHV4ID0gbXBfbW9udGdvbWVyeV9yZWR1Y2U7CisjZWxzZQorICAgICAgICBlcnIgPSBNUF9WQUw7CisgICAgICAgIGdvdG8gTEJMX007CisjZW5kaWYKKyAgICAgfQorICB9IGVsc2UgaWYgKHJlZG1vZGUgPT0gMSkgeworI2lmIGRlZmluZWQoQk5fTVBfRFJfU0VUVVBfQykgJiYgZGVmaW5lZChCTl9NUF9EUl9SRURVQ0VfQykKKyAgICAgLyogc2V0dXAgRFIgcmVkdWN0aW9uIGZvciBtb2R1bGkgb2YgdGhlIGZvcm0gQioqayAtIGIgKi8KKyAgICAgbXBfZHJfc2V0dXAoUCwgJm1wKTsKKyAgICAgcmVkdXggPSBtcF9kcl9yZWR1Y2U7CisjZWxzZQorICAgICBlcnIgPSBNUF9WQUw7CisgICAgIGdvdG8gTEJMX007CisjZW5kaWYKKyAgfSBlbHNlIHsKKyNpZiBkZWZpbmVkKEJOX01QX1JFRFVDRV8yS19TRVRVUF9DKSAmJiBkZWZpbmVkKEJOX01QX1JFRFVDRV8yS19DKQorICAgICAvKiBzZXR1cCBEUiByZWR1Y3Rpb24gZm9yIG1vZHVsaSBvZiB0aGUgZm9ybSAyKiprIC0gYiAqLworICAgICBpZiAoKGVyciA9IG1wX3JlZHVjZV8ya19zZXR1cChQLCAmbXApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX007CisgICAgIH0KKyAgICAgcmVkdXggPSBtcF9yZWR1Y2VfMms7CisjZWxzZQorICAgICBlcnIgPSBNUF9WQUw7CisgICAgIGdvdG8gTEJMX007CisjZW5kaWYKKyAgfQorCisgIC8qIHNldHVwIHJlc3VsdCAqLworICBpZiAoKGVyciA9IG1wX2luaXQgKCZyZXMpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfTTsKKyAgfQorCisgIC8qIGNyZWF0ZSBNIHRhYmxlCisgICAqCisKKyAgICoKKyAgICogVGhlIGZpcnN0IGhhbGYgb2YgdGhlIHRhYmxlIGlzIG5vdCBjb21wdXRlZCB0aG91Z2ggYWNjZXB0IGZvciBNWzBdIGFuZCBNWzFdCisgICAqLworCisgIGlmIChyZWRtb2RlID09IDApIHsKKyNpZmRlZiBCTl9NUF9NT05UR09NRVJZX0NBTENfTk9STUFMSVpBVElPTl9DCisgICAgIC8qIG5vdyB3ZSBuZWVkIFIgbW9kIG0gKi8KKyAgICAgaWYgKChlcnIgPSBtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbiAoJnJlcywgUCkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIExCTF9SRVM7CisgICAgIH0KKyNlbHNlIAorICAgICBlcnIgPSBNUF9WQUw7CisgICAgIGdvdG8gTEJMX1JFUzsKKyNlbmRpZgorCisgICAgIC8qIG5vdyBzZXQgTVsxXSB0byBHICogUiBtb2QgbSAqLworICAgICBpZiAoKGVyciA9IG1wX211bG1vZCAoRywgJnJlcywgUCwgJk1bMV0pKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBMQkxfUkVTOworICAgICB9CisgIH0gZWxzZSB7CisgICAgIG1wX3NldCgmcmVzLCAxKTsKKyAgICAgaWYgKChlcnIgPSBtcF9tb2QoRywgUCwgJk1bMV0pKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgfQorICB9CisKKyAgLyogY29tcHV0ZSB0aGUgdmFsdWUgYXQgTVsxPDwod2luc2l6ZS0xKV0gYnkgc3F1YXJpbmcgTVsxXSAod2luc2l6ZS0xKSB0aW1lcyAqLworICBpZiAoKGVyciA9IG1wX2NvcHkgKCZNWzFdLCAmTVsxIDw8ICh3aW5zaXplIC0gMSldKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1JFUzsKKyAgfQorCisgIGZvciAoeCA9IDA7IHggPCAod2luc2l6ZSAtIDEpOyB4KyspIHsKKyAgICBpZiAoKGVyciA9IG1wX3NxciAoJk1bMSA8PCAod2luc2l6ZSAtIDEpXSwgJk1bMSA8PCAod2luc2l6ZSAtIDEpXSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICB9CisgICAgaWYgKChlcnIgPSByZWR1eCAoJk1bMSA8PCAod2luc2l6ZSAtIDEpXSwgUCwgbXApKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9SRVM7CisgICAgfQorICB9CisKKyAgLyogY3JlYXRlIHVwcGVyIHRhYmxlICovCisgIGZvciAoeCA9ICgxIDw8ICh3aW5zaXplIC0gMSkpICsgMTsgeCA8ICgxIDw8IHdpbnNpemUpOyB4KyspIHsKKyAgICBpZiAoKGVyciA9IG1wX211bCAoJk1beCAtIDFdLCAmTVsxXSwgJk1beF0pKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9SRVM7CisgICAgfQorICAgIGlmICgoZXJyID0gcmVkdXggKCZNW3hdLCBQLCBtcCkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICB9CisgIH0KKworICAvKiBzZXQgaW5pdGlhbCBtb2RlIGFuZCBiaXQgY250ICovCisgIG1vZGUgICA9IDA7CisgIGJpdGNudCA9IDE7CisgIGJ1ZiAgICA9IDA7CisgIGRpZ2lkeCA9IFgtPnVzZWQgLSAxOworICBiaXRjcHkgPSAwOworICBiaXRidWYgPSAwOworCisgIGZvciAoOzspIHsKKyAgICAvKiBncmFiIG5leHQgZGlnaXQgYXMgcmVxdWlyZWQgKi8KKyAgICBpZiAoLS1iaXRjbnQgPT0gMCkgeworICAgICAgLyogaWYgZGlnaWR4ID09IC0xIHdlIGFyZSBvdXQgb2YgZGlnaXRzIHNvIGJyZWFrICovCisgICAgICBpZiAoZGlnaWR4ID09IC0xKSB7CisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgLyogcmVhZCBuZXh0IGRpZ2l0IGFuZCByZXNldCBiaXRjbnQgKi8KKyAgICAgIGJ1ZiAgICA9IFgtPmRwW2RpZ2lkeC0tXTsKKyAgICAgIGJpdGNudCA9IChpbnQpRElHSVRfQklUOworICAgIH0KKworICAgIC8qIGdyYWIgdGhlIG5leHQgbXNiIGZyb20gdGhlIGV4cG9uZW50ICovCisgICAgeSAgICAgPSAobXBfZGlnaXQpKGJ1ZiA+PiAoRElHSVRfQklUIC0gMSkpICYgMTsKKyAgICBidWYgPDw9IChtcF9kaWdpdCkxOworCisgICAgLyogaWYgdGhlIGJpdCBpcyB6ZXJvIGFuZCBtb2RlID09IDAgdGhlbiB3ZSBpZ25vcmUgaXQKKyAgICAgKiBUaGVzZSByZXByZXNlbnQgdGhlIGxlYWRpbmcgemVybyBiaXRzIGJlZm9yZSB0aGUgZmlyc3QgMSBiaXQKKyAgICAgKiBpbiB0aGUgZXhwb25lbnQuICBUZWNobmljYWxseSB0aGlzIG9wdCBpcyBub3QgcmVxdWlyZWQgYnV0IGl0CisgICAgICogZG9lcyBsb3dlciB0aGUgIyBvZiB0cml2aWFsIHNxdWFyaW5nL3JlZHVjdGlvbnMgdXNlZAorICAgICAqLworICAgIGlmIChtb2RlID09IDAgJiYgeSA9PSAwKSB7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBpZiB0aGUgYml0IGlzIHplcm8gYW5kIG1vZGUgPT0gMSB0aGVuIHdlIHNxdWFyZSAqLworICAgIGlmIChtb2RlID09IDEgJiYgeSA9PSAwKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3NxciAoJnJlcywgJnJlcykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgfQorICAgICAgaWYgKChlcnIgPSByZWR1eCAoJnJlcywgUCwgbXApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgIH0KKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIGVsc2Ugd2UgYWRkIGl0IHRvIHRoZSB3aW5kb3cgKi8KKyAgICBiaXRidWYgfD0gKHkgPDwgKHdpbnNpemUgLSArK2JpdGNweSkpOworICAgIG1vZGUgICAgPSAyOworCisgICAgaWYgKGJpdGNweSA9PSB3aW5zaXplKSB7CisgICAgICAvKiBvayB3aW5kb3cgaXMgZmlsbGVkIHNvIHNxdWFyZSBhcyByZXF1aXJlZCBhbmQgbXVsdGlwbHkgICovCisgICAgICAvKiBzcXVhcmUgZmlyc3QgKi8KKyAgICAgIGZvciAoeCA9IDA7IHggPCB3aW5zaXplOyB4KyspIHsKKyAgICAgICAgaWYgKChlcnIgPSBtcF9zcXIgKCZyZXMsICZyZXMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgICB9CisgICAgICAgIGlmICgoZXJyID0gcmVkdXggKCZyZXMsIFAsIG1wKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiB0aGVuIG11bHRpcGx5ICovCisgICAgICBpZiAoKGVyciA9IG1wX211bCAoJnJlcywgJk1bYml0YnVmXSwgJnJlcykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgfQorICAgICAgaWYgKChlcnIgPSByZWR1eCAoJnJlcywgUCwgbXApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgIH0KKworICAgICAgLyogZW1wdHkgd2luZG93IGFuZCByZXNldCAqLworICAgICAgYml0Y3B5ID0gMDsKKyAgICAgIGJpdGJ1ZiA9IDA7CisgICAgICBtb2RlICAgPSAxOworICAgIH0KKyAgfQorCisgIC8qIGlmIGJpdHMgcmVtYWluIHRoZW4gc3F1YXJlL211bHRpcGx5ICovCisgIGlmIChtb2RlID09IDIgJiYgYml0Y3B5ID4gMCkgeworICAgIC8qIHNxdWFyZSB0aGVuIG11bHRpcGx5IGlmIHRoZSBiaXQgaXMgc2V0ICovCisgICAgZm9yICh4ID0gMDsgeCA8IGJpdGNweTsgeCsrKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3NxciAoJnJlcywgJnJlcykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgfQorICAgICAgaWYgKChlcnIgPSByZWR1eCAoJnJlcywgUCwgbXApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgIH0KKworICAgICAgLyogZ2V0IG5leHQgYml0IG9mIHRoZSB3aW5kb3cgKi8KKyAgICAgIGJpdGJ1ZiA8PD0gMTsKKyAgICAgIGlmICgoYml0YnVmICYgKDEgPDwgd2luc2l6ZSkpICE9IDApIHsKKyAgICAgICAgLyogdGhlbiBtdWx0aXBseSAqLworICAgICAgICBpZiAoKGVyciA9IG1wX211bCAoJnJlcywgJk1bMV0sICZyZXMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgICB9CisgICAgICAgIGlmICgoZXJyID0gcmVkdXggKCZyZXMsIFAsIG1wKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChyZWRtb2RlID09IDApIHsKKyAgICAgLyogZml4dXAgcmVzdWx0IGlmIE1vbnRnb21lcnkgcmVkdWN0aW9uIGlzIHVzZWQKKyAgICAgICogcmVjYWxsIHRoYXQgYW55IHZhbHVlIGluIGEgTW9udGdvbWVyeSBzeXN0ZW0gaXMKKyAgICAgICogYWN0dWFsbHkgbXVsdGlwbGllZCBieSBSIG1vZCBuLiAgU28gd2UgaGF2ZQorICAgICAgKiB0byByZWR1Y2Ugb25lIG1vcmUgdGltZSB0byBjYW5jZWwgb3V0IHRoZSBmYWN0b3IKKyAgICAgICogb2YgUi4KKyAgICAgICovCisgICAgIGlmICgoZXJyID0gcmVkdXgoJnJlcywgUCwgbXApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBMQkxfUkVTOworICAgICB9CisgIH0KKworICAvKiBzd2FwIHJlcyB3aXRoIFkgKi8KKyAgbXBfZXhjaCAoJnJlcywgWSk7CisgIGVyciA9IE1QX09LQVk7CitMQkxfUkVTOm1wX2NsZWFyICgmcmVzKTsKK0xCTF9NOgorICBtcF9jbGVhcigmTVsxXSk7CisgIGZvciAoeCA9IDE8PCh3aW5zaXplLTEpOyB4IDwgKDEgPDwgd2luc2l6ZSk7IHgrKykgeworICAgIG1wX2NsZWFyICgmTVt4XSk7CisgIH0KKyAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZXhwdG1vZF9mYXN0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfZXhwdG1vZF9mYXN0LmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2V4dGV1Y2xpZC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0VYVEVVQ0xJRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBFeHRlbmRlZCBldWNsaWRlYW4gYWxnb3JpdGhtIG9mIChhLCBiKSBwcm9kdWNlcyAKKyAgIGEqdTEgKyBiKnUyID0gdTMKKyAqLworaW50IG1wX2V4dGV1Y2xpZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpVMSwgbXBfaW50ICpVMiwgbXBfaW50ICpVMykKK3sKKyAgIG1wX2ludCB1MSx1Mix1Myx2MSx2Mix2Myx0MSx0Mix0MyxxLHRtcDsKKyAgIGludCBlcnI7CisKKyAgIGlmICgoZXJyID0gbXBfaW5pdF9tdWx0aSgmdTEsICZ1MiwgJnUzLCAmdjEsICZ2MiwgJnYzLCAmdDEsICZ0MiwgJnQzLCAmcSwgJnRtcCwgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiBlcnI7CisgICB9CisKKyAgIC8qIGluaXRpYWxpemUsICh1MSx1Mix1MykgPSAoMSwwLGEpICovCisgICBtcF9zZXQoJnUxLCAxKTsKKyAgIGlmICgoZXJyID0gbXBfY29weShhLCAmdTMpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQorCisgICAvKiBpbml0aWFsaXplLCAodjEsdjIsdjMpID0gKDAsMSxiKSAqLworICAgbXBfc2V0KCZ2MiwgMSk7CisgICBpZiAoKGVyciA9IG1wX2NvcHkoYiwgJnYzKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KKworICAgLyogbG9vcCB3aGlsZSB2MyAhPSAwICovCisgICB3aGlsZSAobXBfaXN6ZXJvKCZ2MykgPT0gTVBfTk8pIHsKKyAgICAgICAvKiBxID0gdTMvdjMgKi8KKyAgICAgICBpZiAoKGVyciA9IG1wX2RpdigmdTMsICZ2MywgJnEsIE5VTEwpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQorCisgICAgICAgLyogKHQxLHQyLHQzKSA9ICh1MSx1Mix1MykgLSAodjEsdjIsdjMpcSAqLworICAgICAgIGlmICgoZXJyID0gbXBfbXVsKCZ2MSwgJnEsICZ0bXApKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9CisgICAgICAgaWYgKChlcnIgPSBtcF9zdWIoJnUxLCAmdG1wLCAmdDEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KKyAgICAgICBpZiAoKGVyciA9IG1wX211bCgmdjIsICZxLCAmdG1wKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQorICAgICAgIGlmICgoZXJyID0gbXBfc3ViKCZ1MiwgJnRtcCwgJnQyKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9CisgICAgICAgaWYgKChlcnIgPSBtcF9tdWwoJnYzLCAmcSwgJnRtcCkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KKyAgICAgICBpZiAoKGVyciA9IG1wX3N1YigmdTMsICZ0bXAsICZ0MykpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQorCisgICAgICAgLyogKHUxLHUyLHUzKSA9ICh2MSx2Mix2MykgKi8KKyAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoJnYxLCAmdTEpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQorICAgICAgIGlmICgoZXJyID0gbXBfY29weSgmdjIsICZ1MikpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9CisgICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KCZ2MywgJnUzKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KKworICAgICAgIC8qICh2MSx2Mix2MykgPSAodDEsdDIsdDMpICovCisgICAgICAgaWYgKChlcnIgPSBtcF9jb3B5KCZ0MSwgJnYxKSkgIT0gTVBfT0tBWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBnb3RvIF9FUlI7IH0KKyAgICAgICBpZiAoKGVyciA9IG1wX2NvcHkoJnQyLCAmdjIpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gX0VSUjsgfQorICAgICAgIGlmICgoZXJyID0gbXBfY29weSgmdDMsICZ2MykpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgZ290byBfRVJSOyB9CisgICB9CisKKyAgIC8qIG1ha2Ugc3VyZSBVMyA+PSAwICovCisgICBpZiAodTMuc2lnbiA9PSBNUF9ORUcpIHsKKyAgICAgIG1wX25lZygmdTEsICZ1MSk7CisgICAgICBtcF9uZWcoJnUyLCAmdTIpOworICAgICAgbXBfbmVnKCZ1MywgJnUzKTsKKyAgIH0KKworICAgLyogY29weSByZXN1bHQgb3V0ICovCisgICBpZiAoVTEgIT0gTlVMTCkgeyBtcF9leGNoKFUxLCAmdTEpOyB9CisgICBpZiAoVTIgIT0gTlVMTCkgeyBtcF9leGNoKFUyLCAmdTIpOyB9CisgICBpZiAoVTMgIT0gTlVMTCkgeyBtcF9leGNoKFUzLCAmdTMpOyB9CisKKyAgIGVyciA9IE1QX09LQVk7CitfRVJSOiBtcF9jbGVhcl9tdWx0aSgmdTEsICZ1MiwgJnUzLCAmdjEsICZ2MiwgJnYzLCAmdDEsICZ0MiwgJnQzLCAmcSwgJnRtcCwgTlVMTCk7CisgICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZXh0ZXVjbGlkLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfZXh0ZXVjbGlkLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2ZyZWFkLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfRlJFQURfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogcmVhZCBhIGJpZ2ludCBmcm9tIGEgZmlsZSBzdHJlYW0gaW4gQVNDSUkgKi8KK2ludCBtcF9mcmVhZChtcF9pbnQgKmEsIGludCByYWRpeCwgRklMRSAqc3RyZWFtKQoreworICAgaW50IGVyciwgY2gsIG5lZywgeTsKKyAgIAorICAgLyogY2xlYXIgYSAqLworICAgbXBfemVybyhhKTsKKyAgIAorICAgLyogaWYgZmlyc3QgZGlnaXQgaXMgLSB0aGVuIHNldCBuZWdhdGl2ZSAqLworICAgY2ggPSBmZ2V0YyhzdHJlYW0pOworICAgaWYgKGNoID09ICctJykgeworICAgICAgbmVnID0gTVBfTkVHOworICAgICAgY2ggPSBmZ2V0YyhzdHJlYW0pOworICAgfSBlbHNlIHsKKyAgICAgIG5lZyA9IE1QX1pQT1M7CisgICB9CisgICAKKyAgIGZvciAoOzspIHsKKyAgICAgIC8qIGZpbmQgeSBpbiB0aGUgcmFkaXggbWFwICovCisgICAgICBmb3IgKHkgPSAwOyB5IDwgcmFkaXg7IHkrKykgeworICAgICAgICAgIGlmIChtcF9zX3JtYXBbeV0gPT0gY2gpIHsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoeSA9PSByYWRpeCkgeworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qIHNoaWZ0IHVwIGFuZCBhZGQgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsX2QoYSwgcmFkaXgsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICByZXR1cm4gZXJyOworICAgICAgfQorICAgICAgaWYgKChlcnIgPSBtcF9hZGRfZChhLCB5LCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgICAgIAorICAgICAgY2ggPSBmZ2V0YyhzdHJlYW0pOworICAgfQorICAgaWYgKG1wX2NtcF9kKGEsIDApICE9IE1QX0VRKSB7CisgICAgICBhLT5zaWduID0gbmVnOworICAgfQorICAgCisgICByZXR1cm4gTVBfT0tBWTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZnJlYWQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9mcmVhZC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9md3JpdGUuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9GV1JJVEVfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworaW50IG1wX2Z3cml0ZShtcF9pbnQgKmEsIGludCByYWRpeCwgRklMRSAqc3RyZWFtKQoreworICAgY2hhciAqYnVmOworICAgaW50IGVyciwgbGVuLCB4OworICAgCisgICBpZiAoKGVyciA9IG1wX3JhZGl4X3NpemUoYSwgcmFkaXgsICZsZW4pKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBidWYgPSBPUFRfQ0FTVChjaGFyKSBYTUFMTE9DIChsZW4pOworICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gTVBfTUVNOworICAgfQorICAgCisgICBpZiAoKGVyciA9IG1wX3RvcmFkaXgoYSwgYnVmLCByYWRpeCkpICE9IE1QX09LQVkpIHsKKyAgICAgIFhGUkVFIChidWYpOworICAgICAgcmV0dXJuIGVycjsKKyAgIH0KKyAgIAorICAgZm9yICh4ID0gMDsgeCA8IGxlbjsgeCsrKSB7CisgICAgICAgaWYgKGZwdXRjKGJ1Zlt4XSwgc3RyZWFtKSA9PSBFT0YpIHsKKyAgICAgICAgICBYRlJFRSAoYnVmKTsKKyAgICAgICAgICByZXR1cm4gTVBfVkFMOworICAgICAgIH0KKyAgIH0KKyAgIAorICAgWEZSRUUgKGJ1Zik7CisgICByZXR1cm4gTVBfT0tBWTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfZndyaXRlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfZndyaXRlLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2djZC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0dDRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBHcmVhdGVzdCBDb21tb24gRGl2aXNvciB1c2luZyB0aGUgYmluYXJ5IG1ldGhvZCAqLworaW50IG1wX2djZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK3sKKyAgbXBfaW50ICB1LCB2OworICBpbnQgICAgIGssIHVfbHNiLCB2X2xzYiwgcmVzOworCisgIC8qIGVpdGhlciB6ZXJvIHRoYW4gZ2NkIGlzIHRoZSBsYXJnZXN0ICovCisgIGlmIChtcF9pc3plcm8gKGEpID09IE1QX1lFUykgeworICAgIHJldHVybiBtcF9hYnMgKGIsIGMpOworICB9CisgIGlmIChtcF9pc3plcm8gKGIpID09IE1QX1lFUykgeworICAgIHJldHVybiBtcF9hYnMgKGEsIGMpOworICB9CisKKyAgLyogZ2V0IGNvcGllcyBvZiBhIGFuZCBiIHdlIGNhbiBtb2RpZnkgKi8KKyAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkgKCZ1LCBhKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnYsIGIpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfVTsKKyAgfQorCisgIC8qIG11c3QgYmUgcG9zaXRpdmUgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIGFsZ29yaXRobSAqLworICB1LnNpZ24gPSB2LnNpZ24gPSBNUF9aUE9TOworCisgIC8qIEIxLiAgRmluZCB0aGUgY29tbW9uIHBvd2VyIG9mIHR3byBmb3IgdSBhbmQgdiAqLworICB1X2xzYiA9IG1wX2NudF9sc2IoJnUpOworICB2X2xzYiA9IG1wX2NudF9sc2IoJnYpOworICBrICAgICA9IE1JTih1X2xzYiwgdl9sc2IpOworCisgIGlmIChrID4gMCkgeworICAgICAvKiBkaXZpZGUgdGhlIHBvd2VyIG9mIHR3byBvdXQgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9kaXZfMmQoJnUsIGssICZ1LCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9WOworICAgICB9CisKKyAgICAgaWYgKChyZXMgPSBtcF9kaXZfMmQoJnYsIGssICZ2LCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9WOworICAgICB9CisgIH0KKworICAvKiBkaXZpZGUgYW55IHJlbWFpbmluZyBmYWN0b3JzIG9mIHR3byBvdXQgKi8KKyAgaWYgKHVfbHNiICE9IGspIHsKKyAgICAgaWYgKChyZXMgPSBtcF9kaXZfMmQoJnUsIHVfbHNiIC0gaywgJnUsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1Y7CisgICAgIH0KKyAgfQorCisgIGlmICh2X2xzYiAhPSBrKSB7CisgICAgIGlmICgocmVzID0gbXBfZGl2XzJkKCZ2LCB2X2xzYiAtIGssICZ2LCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9WOworICAgICB9CisgIH0KKworICB3aGlsZSAobXBfaXN6ZXJvKCZ2KSA9PSAwKSB7CisgICAgIC8qIG1ha2Ugc3VyZSB2IGlzIHRoZSBsYXJnZXN0ICovCisgICAgIGlmIChtcF9jbXBfbWFnKCZ1LCAmdikgPT0gTVBfR1QpIHsKKyAgICAgICAgLyogc3dhcCB1IGFuZCB2IHRvIG1ha2Ugc3VyZSB2IGlzID49IHUgKi8KKyAgICAgICAgbXBfZXhjaCgmdSwgJnYpOworICAgICB9CisgICAgIAorICAgICAvKiBzdWJ0cmFjdCBzbWFsbGVzdCBmcm9tIGxhcmdlc3QgKi8KKyAgICAgaWYgKChyZXMgPSBzX21wX3N1YigmdiwgJnUsICZ2KSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9WOworICAgICB9CisgICAgIAorICAgICAvKiBEaXZpZGUgb3V0IGFsbCBmYWN0b3JzIG9mIHR3byAqLworICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yZCgmdiwgbXBfY250X2xzYigmdiksICZ2LCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9WOworICAgICB9IAorICB9IAorCisgIC8qIG11bHRpcGx5IGJ5IDIqKmsgd2hpY2ggd2UgZGl2aWRlZCBvdXQgYXQgdGhlIGJlZ2lubmluZyAqLworICBpZiAoKHJlcyA9IG1wX211bF8yZCAoJnUsIGssIGMpKSAhPSBNUF9PS0FZKSB7CisgICAgIGdvdG8gTEJMX1Y7CisgIH0KKyAgYy0+c2lnbiA9IE1QX1pQT1M7CisgIHJlcyA9IE1QX09LQVk7CitMQkxfVjptcF9jbGVhciAoJnUpOworTEJMX1U6bXBfY2xlYXIgKCZ2KTsKKyAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2djZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2djZC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9nZXRfaW50LmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfR0VUX0lOVF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBnZXQgdGhlIGxvd2VyIDMyLWJpdHMgb2YgYW4gbXBfaW50ICovCit1bnNpZ25lZCBsb25nIG1wX2dldF9pbnQobXBfaW50ICogYSkgCit7CisgIGludCBpOworICB1bnNpZ25lZCBsb25nIHJlczsKKworICBpZiAoYS0+dXNlZCA9PSAwKSB7CisgICAgIHJldHVybiAwOworICB9CisKKyAgLyogZ2V0IG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGxzYiB3ZSBoYXZlIHRvIHJlYWQgKi8KKyAgaSA9IE1JTihhLT51c2VkLChpbnQpKChzaXplb2YodW5zaWduZWQgbG9uZykqQ0hBUl9CSVQrRElHSVRfQklULTEpL0RJR0lUX0JJVCkpLTE7CisKKyAgLyogZ2V0IG1vc3Qgc2lnbmlmaWNhbnQgZGlnaXQgb2YgcmVzdWx0ICovCisgIHJlcyA9IERJR0lUKGEsaSk7CisgICAKKyAgd2hpbGUgKC0taSA+PSAwKSB7CisgICAgcmVzID0gKHJlcyA8PCBESUdJVF9CSVQpIHwgRElHSVQoYSxpKTsKKyAgfQorCisgIC8qIGZvcmNlIHJlc3VsdCB0byAzMi1iaXRzIGFsd2F5cyBzbyBpdCBpcyBjb25zaXN0ZW50IG9uIG5vbiAzMi1iaXQgcGxhdGZvcm1zICovCisgIHJldHVybiByZXMgJiAweEZGRkZGRkZGVUw7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9nZXRfaW50LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfZ2V0X2ludC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9ncm93LmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfR1JPV19DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBncm93IGFzIHJlcXVpcmVkICovCitpbnQgbXBfZ3JvdyAobXBfaW50ICogYSwgaW50IHNpemUpCit7CisgIGludCAgICAgaTsKKyAgbXBfZGlnaXQgKnRtcDsKKworICAvKiBpZiB0aGUgYWxsb2Mgc2l6ZSBpcyBzbWFsbGVyIGFsbG9jIG1vcmUgcmFtICovCisgIGlmIChhLT5hbGxvYyA8IHNpemUpIHsKKyAgICAvKiBlbnN1cmUgdGhlcmUgYXJlIGFsd2F5cyBhdCBsZWFzdCBNUF9QUkVDIGRpZ2l0cyBleHRyYSBvbiB0b3AgKi8KKyAgICBzaXplICs9IChNUF9QUkVDICogMikgLSAoc2l6ZSAlIE1QX1BSRUMpOworCisgICAgLyogcmVhbGxvY2F0ZSB0aGUgYXJyYXkgYS0+ZHAKKyAgICAgKgorICAgICAqIFdlIHN0b3JlIHRoZSByZXR1cm4gaW4gYSB0ZW1wb3JhcnkgdmFyaWFibGUKKyAgICAgKiBpbiBjYXNlIHRoZSBvcGVyYXRpb24gZmFpbGVkIHdlIGRvbid0IHdhbnQKKyAgICAgKiB0byBvdmVyd3JpdGUgdGhlIGRwIG1lbWJlciBvZiBhLgorICAgICAqLworICAgIHRtcCA9IE9QVF9DQVNUKG1wX2RpZ2l0KSBYUkVBTExPQyAoYS0+ZHAsIHNpemVvZiAobXBfZGlnaXQpICogc2l6ZSk7CisgICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICAvKiByZWFsbG9jYXRpb24gZmFpbGVkIGJ1dCAiYSIgaXMgc3RpbGwgdmFsaWQgW2NhbiBiZSBmcmVlZF0gKi8KKyAgICAgIHJldHVybiBNUF9NRU07CisgICAgfQorCisgICAgLyogcmVhbGxvY2F0aW9uIHN1Y2NlZWRlZCBzbyBzZXQgYS0+ZHAgKi8KKyAgICBhLT5kcCA9IHRtcDsKKworICAgIC8qIHplcm8gZXhjZXNzIGRpZ2l0cyAqLworICAgIGkgICAgICAgID0gYS0+YWxsb2M7CisgICAgYS0+YWxsb2MgPSBzaXplOworICAgIGZvciAoOyBpIDwgYS0+YWxsb2M7IGkrKykgeworICAgICAgYS0+ZHBbaV0gPSAwOworICAgIH0KKyAgfQorICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2dyb3cuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9ncm93LmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2luaXQuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9JTklUX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGluaXQgYSBuZXcgbXBfaW50ICovCitpbnQgbXBfaW5pdCAobXBfaW50ICogYSkKK3sKKyAgaW50IGk7CisKKyAgLyogYWxsb2NhdGUgbWVtb3J5IHJlcXVpcmVkIGFuZCBjbGVhciBpdCAqLworICBhLT5kcCA9IE9QVF9DQVNUKG1wX2RpZ2l0KSBYTUFMTE9DIChzaXplb2YgKG1wX2RpZ2l0KSAqIE1QX1BSRUMpOworICBpZiAoYS0+ZHAgPT0gTlVMTCkgeworICAgIHJldHVybiBNUF9NRU07CisgIH0KKworICAvKiBzZXQgdGhlIGRpZ2l0cyB0byB6ZXJvICovCisgIGZvciAoaSA9IDA7IGkgPCBNUF9QUkVDOyBpKyspIHsKKyAgICAgIGEtPmRwW2ldID0gMDsKKyAgfQorCisgIC8qIHNldCB0aGUgdXNlZCB0byB6ZXJvLCBhbGxvY2F0ZWQgZGlnaXRzIHRvIHRoZSBkZWZhdWx0IHByZWNpc2lvbgorICAgKiBhbmQgc2lnbiB0byBwb3NpdGl2ZSAqLworICBhLT51c2VkICA9IDA7CisgIGEtPmFsbG9jID0gTVBfUFJFQzsKKyAgYS0+c2lnbiAgPSBNUF9aUE9TOworCisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfaW5pdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2luaXQuYyAqLworCisvKiBTdGFydDogYm5fbXBfaW5pdF9jb3B5LmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfSU5JVF9DT1BZX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGNyZWF0ZXMgImEiIHRoZW4gY29waWVzIGIgaW50byBpdCAqLworaW50IG1wX2luaXRfY29weSAobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgaW50ICAgICByZXM7CisKKyAgaWYgKChyZXMgPSBtcF9pbml0IChhKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKyAgcmV0dXJuIG1wX2NvcHkgKGIsIGEpOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfaW5pdF9jb3B5LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfaW5pdF9jb3B5LmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2luaXRfbXVsdGkuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9JTklUX01VTFRJX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK2ludCBtcF9pbml0X211bHRpKG1wX2ludCAqbXAsIC4uLikgCit7CisgICAgbXBfZXJyIHJlcyA9IE1QX09LQVk7ICAgICAgLyogQXNzdW1lIG9rIHVudGlsIHByb3ZlbiBvdGhlcndpc2UgKi8KKyAgICBpbnQgbiA9IDA7ICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2Ygb2sgaW5pdHMgKi8KKyAgICBtcF9pbnQqIGN1cl9hcmcgPSBtcDsKKyAgICB2YV9saXN0IGFyZ3M7CisKKyAgICB2YV9zdGFydChhcmdzLCBtcCk7ICAgICAgICAvKiBpbml0IGFyZ3MgdG8gbmV4dCBhcmd1bWVudCBmcm9tIGNhbGxlciAqLworICAgIHdoaWxlIChjdXJfYXJnICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKG1wX2luaXQoY3VyX2FyZykgIT0gTVBfT0tBWSkgeworICAgICAgICAgICAgLyogT29wcyAtIGVycm9yISBCYWNrLXRyYWNrIGFuZCBtcF9jbGVhciB3aGF0IHdlIGFscmVhZHkKKyAgICAgICAgICAgICAgIHN1Y2NlZWRlZCBpbiBpbml0LWluZywgdGhlbiByZXR1cm4gZXJyb3IuCisgICAgICAgICAgICAqLworICAgICAgICAgICAgdmFfbGlzdCBjbGVhbl9hcmdzOworICAgICAgICAgICAgCisgICAgICAgICAgICAvKiBlbmQgdGhlIGN1cnJlbnQgbGlzdCAqLworICAgICAgICAgICAgdmFfZW5kKGFyZ3MpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvKiBub3cgc3RhcnQgY2xlYW5pbmcgdXAgKi8gICAgICAgICAgICAKKyAgICAgICAgICAgIGN1cl9hcmcgPSBtcDsKKyAgICAgICAgICAgIHZhX3N0YXJ0KGNsZWFuX2FyZ3MsIG1wKTsKKyAgICAgICAgICAgIHdoaWxlIChuLS0pIHsKKyAgICAgICAgICAgICAgICBtcF9jbGVhcihjdXJfYXJnKTsKKyAgICAgICAgICAgICAgICBjdXJfYXJnID0gdmFfYXJnKGNsZWFuX2FyZ3MsIG1wX2ludCopOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFfZW5kKGNsZWFuX2FyZ3MpOworICAgICAgICAgICAgcmVzID0gTVBfTUVNOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbisrOworICAgICAgICBjdXJfYXJnID0gdmFfYXJnKGFyZ3MsIG1wX2ludCopOworICAgIH0KKyAgICB2YV9lbmQoYXJncyk7CisgICAgcmV0dXJuIHJlczsgICAgICAgICAgICAgICAgLyogQXNzdW1lZCBvaywgaWYgZXJyb3IgZmxhZ2dlZCBhYm92ZS4gKi8KK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfaW5pdF9tdWx0aS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2luaXRfbXVsdGkuYyAqLworCisvKiBTdGFydDogYm5fbXBfaW5pdF9zZXQuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9JTklUX1NFVF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBpbml0aWFsaXplIGFuZCBzZXQgYSBkaWdpdCAqLworaW50IG1wX2luaXRfc2V0IChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiKQoreworICBpbnQgZXJyOworICBpZiAoKGVyciA9IG1wX2luaXQoYSkpICE9IE1QX09LQVkpIHsKKyAgICAgcmV0dXJuIGVycjsKKyAgfQorICBtcF9zZXQoYSwgYik7CisgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9pbml0X3NldC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2luaXRfc2V0LmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2luaXRfc2V0X2ludC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0lOSVRfU0VUX0lOVF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBpbml0aWFsaXplIGFuZCBzZXQgYSBkaWdpdCAqLworaW50IG1wX2luaXRfc2V0X2ludCAobXBfaW50ICogYSwgdW5zaWduZWQgbG9uZyBiKQoreworICBpbnQgZXJyOworICBpZiAoKGVyciA9IG1wX2luaXQoYSkpICE9IE1QX09LQVkpIHsKKyAgICAgcmV0dXJuIGVycjsKKyAgfQorICByZXR1cm4gbXBfc2V0X2ludChhLCBiKTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2luaXRfc2V0X2ludC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2luaXRfc2V0X2ludC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9pbml0X3NpemUuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9JTklUX1NJWkVfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogaW5pdCBhbiBtcF9pbml0IGZvciBhIGdpdmVuIHNpemUgKi8KK2ludCBtcF9pbml0X3NpemUgKG1wX2ludCAqIGEsIGludCBzaXplKQoreworICBpbnQgeDsKKworICAvKiBwYWQgc2l6ZSBzbyB0aGVyZSBhcmUgYWx3YXlzIGV4dHJhIGRpZ2l0cyAqLworICBzaXplICs9IChNUF9QUkVDICogMikgLSAoc2l6ZSAlIE1QX1BSRUMpOwkKKyAgCisgIC8qIGFsbG9jIG1lbSAqLworICBhLT5kcCA9IE9QVF9DQVNUKG1wX2RpZ2l0KSBYTUFMTE9DIChzaXplb2YgKG1wX2RpZ2l0KSAqIHNpemUpOworICBpZiAoYS0+ZHAgPT0gTlVMTCkgeworICAgIHJldHVybiBNUF9NRU07CisgIH0KKworICAvKiBzZXQgdGhlIG1lbWJlcnMgKi8KKyAgYS0+dXNlZCAgPSAwOworICBhLT5hbGxvYyA9IHNpemU7CisgIGEtPnNpZ24gID0gTVBfWlBPUzsKKworICAvKiB6ZXJvIHRoZSBkaWdpdHMgKi8KKyAgZm9yICh4ID0gMDsgeCA8IHNpemU7IHgrKykgeworICAgICAgYS0+ZHBbeF0gPSAwOworICB9CisKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9pbml0X3NpemUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9pbml0X3NpemUuYyAqLworCisvKiBTdGFydDogYm5fbXBfaW52bW9kLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfSU5WTU9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGhhYyAxNC42MSwgcHA2MDggKi8KK2ludCBtcF9pbnZtb2QgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpCit7CisgIC8qIGIgY2Fubm90IGJlIG5lZ2F0aXZlICovCisgIGlmIChiLT5zaWduID09IE1QX05FRyB8fCBtcF9pc3plcm8oYikgPT0gMSkgeworICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworI2lmZGVmIEJOX0ZBU1RfTVBfSU5WTU9EX0MKKyAgLyogaWYgdGhlIG1vZHVsdXMgaXMgb2RkIHdlIGNhbiB1c2UgYSBmYXN0ZXIgcm91dGluZSBpbnN0ZWFkICovCisgIGlmIChtcF9pc29kZCAoYikgPT0gMSkgeworICAgIHJldHVybiBmYXN0X21wX2ludm1vZCAoYSwgYiwgYyk7CisgIH0KKyNlbmRpZgorCisjaWZkZWYgQk5fTVBfSU5WTU9EX1NMT1dfQworICByZXR1cm4gbXBfaW52bW9kX3Nsb3coYSwgYiwgYyk7CisjZW5kaWYKKworICByZXR1cm4gTVBfVkFMOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfaW52bW9kLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfaW52bW9kLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2ludm1vZF9zbG93LmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfSU5WTU9EX1NMT1dfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogaGFjIDE0LjYxLCBwcDYwOCAqLworaW50IG1wX2ludm1vZF9zbG93IChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBtcF9pbnQgIHgsIHksIHUsIHYsIEEsIEIsIEMsIEQ7CisgIGludCAgICAgcmVzOworCisgIC8qIGIgY2Fubm90IGJlIG5lZ2F0aXZlICovCisgIGlmIChiLT5zaWduID09IE1QX05FRyB8fCBtcF9pc3plcm8oYikgPT0gMSkgeworICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworICAvKiBpbml0IHRlbXBzICovCisgIGlmICgocmVzID0gbXBfaW5pdF9tdWx0aSgmeCwgJnksICZ1LCAmdiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmQSwgJkIsICZDLCAmRCwgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIHggPSBhLCB5ID0gYiAqLworICBpZiAoKHJlcyA9IG1wX21vZChhLCBiLCAmeCkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgfQorICBpZiAoKHJlcyA9IG1wX2NvcHkgKGIsICZ5KSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX0VSUjsKKyAgfQorCisgIC8qIDIuIFttb2RpZmllZF0gaWYgeCx5IGFyZSBib3RoIGV2ZW4gdGhlbiByZXR1cm4gYW4gZXJyb3IhICovCisgIGlmIChtcF9pc2V2ZW4gKCZ4KSA9PSAxICYmIG1wX2lzZXZlbiAoJnkpID09IDEpIHsKKyAgICByZXMgPSBNUF9WQUw7CisgICAgZ290byBMQkxfRVJSOworICB9CisKKyAgLyogMy4gdT14LCB2PXksIEE9MSwgQj0wLCBDPTAsRD0xICovCisgIGlmICgocmVzID0gbXBfY29weSAoJngsICZ1KSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX0VSUjsKKyAgfQorICBpZiAoKHJlcyA9IG1wX2NvcHkgKCZ5LCAmdikpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9FUlI7CisgIH0KKyAgbXBfc2V0ICgmQSwgMSk7CisgIG1wX3NldCAoJkQsIDEpOworCit0b3A6CisgIC8qIDQuICB3aGlsZSB1IGlzIGV2ZW4gZG8gKi8KKyAgd2hpbGUgKG1wX2lzZXZlbiAoJnUpID09IDEpIHsKKyAgICAvKiA0LjEgdSA9IHUvMiAqLworICAgIGlmICgocmVzID0gbXBfZGl2XzIgKCZ1LCAmdSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisgICAgLyogNC4yIGlmIEEgb3IgQiBpcyBvZGQgdGhlbiAqLworICAgIGlmIChtcF9pc29kZCAoJkEpID09IDEgfHwgbXBfaXNvZGQgKCZCKSA9PSAxKSB7CisgICAgICAvKiBBID0gKEEreSkvMiwgQiA9IChCLXgpLzIgKi8KKyAgICAgIGlmICgocmVzID0gbXBfYWRkICgmQSwgJnksICZBKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgICAgaWYgKChyZXMgPSBtcF9zdWIgKCZCLCAmeCwgJkIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgICAgfQorICAgIC8qIEEgPSBBLzIsIEIgPSBCLzIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmQSwgJkEpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfZGl2XzIgKCZCLCAmQikpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisgIH0KKworICAvKiA1LiAgd2hpbGUgdiBpcyBldmVuIGRvICovCisgIHdoaWxlIChtcF9pc2V2ZW4gKCZ2KSA9PSAxKSB7CisgICAgLyogNS4xIHYgPSB2LzIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmdiwgJnYpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICAgIC8qIDUuMiBpZiBDIG9yIEQgaXMgb2RkIHRoZW4gKi8KKyAgICBpZiAobXBfaXNvZGQgKCZDKSA9PSAxIHx8IG1wX2lzb2RkICgmRCkgPT0gMSkgeworICAgICAgLyogQyA9IChDK3kpLzIsIEQgPSAoRC14KS8yICovCisgICAgICBpZiAoKHJlcyA9IG1wX2FkZCAoJkMsICZ5LCAmQykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICAgIH0KKyAgICAgIGlmICgocmVzID0gbXBfc3ViICgmRCwgJngsICZEKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorICAgIH0KKyAgICAvKiBDID0gQy8yLCBEID0gRC8yICovCisgICAgaWYgKChyZXMgPSBtcF9kaXZfMiAoJkMsICZDKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yICgmRCwgJkQpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICB9CisKKyAgLyogNi4gIGlmIHUgPj0gdiB0aGVuICovCisgIGlmIChtcF9jbXAgKCZ1LCAmdikgIT0gTVBfTFQpIHsKKyAgICAvKiB1ID0gdSAtIHYsIEEgPSBBIC0gQywgQiA9IEIgLSBEICovCisgICAgaWYgKChyZXMgPSBtcF9zdWIgKCZ1LCAmdiwgJnUpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorCisgICAgaWYgKChyZXMgPSBtcF9zdWIgKCZBLCAmQywgJkEpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorCisgICAgaWYgKChyZXMgPSBtcF9zdWIgKCZCLCAmRCwgJkIpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9FUlI7CisgICAgfQorICB9IGVsc2UgeworICAgIC8qIHYgLSB2IC0gdSwgQyA9IEMgLSBBLCBEID0gRCAtIEIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJnYsICZ1LCAmdikpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisKKyAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJkMsICZBLCAmQykpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisKKyAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJkQsICZCLCAmRCkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX0VSUjsKKyAgICB9CisgIH0KKworICAvKiBpZiBub3QgemVybyBnb3RvIHN0ZXAgNCAqLworICBpZiAobXBfaXN6ZXJvICgmdSkgPT0gMCkKKyAgICBnb3RvIHRvcDsKKworICAvKiBub3cgYSA9IEMsIGIgPSBELCBnY2QgPT0gZyp2ICovCisKKyAgLyogaWYgdiAhPSAxIHRoZW4gdGhlcmUgaXMgbm8gaW52ZXJzZSAqLworICBpZiAobXBfY21wX2QgKCZ2LCAxKSAhPSBNUF9FUSkgeworICAgIHJlcyA9IE1QX1ZBTDsKKyAgICBnb3RvIExCTF9FUlI7CisgIH0KKworICAvKiBpZiBpdHMgdG9vIGxvdyAqLworICB3aGlsZSAobXBfY21wX2QoJkMsIDApID09IE1QX0xUKSB7CisgICAgICBpZiAoKHJlcyA9IG1wX2FkZCgmQywgYiwgJkMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgIH0KKyAgCisgIC8qIHRvbyBiaWcgKi8KKyAgd2hpbGUgKG1wX2NtcF9tYWcoJkMsIGIpICE9IE1QX0xUKSB7CisgICAgICBpZiAoKHJlcyA9IG1wX3N1YigmQywgYiwgJkMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICBnb3RvIExCTF9FUlI7CisgICAgICB9CisgIH0KKyAgCisgIC8qIEMgaXMgbm93IHRoZSBpbnZlcnNlICovCisgIG1wX2V4Y2ggKCZDLCBjKTsKKyAgcmVzID0gTVBfT0tBWTsKK0xCTF9FUlI6bXBfY2xlYXJfbXVsdGkgKCZ4LCAmeSwgJnUsICZ2LCAmQSwgJkIsICZDLCAmRCwgTlVMTCk7CisgIHJldHVybiByZXM7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9pbnZtb2Rfc2xvdy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2ludm1vZF9zbG93LmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2lzX3NxdWFyZS5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0lTX1NRVUFSRV9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBDaGVjayBpZiByZW1haW5kZXJzIGFyZSBwb3NzaWJsZSBzcXVhcmVzIC0gZmFzdCBleGNsdWRlIG5vbi1zcXVhcmVzICovCitzdGF0aWMgY29uc3QgY2hhciByZW1fMTI4WzEyOF0gPSB7CisgMCwgMCwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwKKyAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLAorIDEsIDAsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsCisgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwKKyAwLCAwLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLAorIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsIDEsCisgMSwgMCwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwKKyAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAxCit9OworCitzdGF0aWMgY29uc3QgY2hhciByZW1fMTA1WzEwNV0gPSB7CisgMCwgMCwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMCwgMSwgMSwgMSwgMSwgMSwKKyAwLCAwLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLAorIDAsIDEsIDEsIDEsIDEsIDEsIDAsIDEsIDEsIDAsIDEsIDEsIDEsIDEsIDEsCisgMSwgMCwgMSwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwKKyAwLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLCAxLCAwLCAxLCAxLCAxLCAxLAorIDEsIDEsIDEsIDEsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDEsIDEsIDEsIDEsCisgMSwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMSwgMSwgMSwgMQorfTsKKworLyogU3RvcmUgbm9uLXplcm8gdG8gcmV0IGlmIGFyZyBpcyBzcXVhcmUsIGFuZCB6ZXJvIGlmIG5vdCAqLworaW50IG1wX2lzX3NxdWFyZShtcF9pbnQgKmFyZyxpbnQgKnJldCkgCit7CisgIGludCAgICAgICAgICAgcmVzOworICBtcF9kaWdpdCAgICAgIGM7CisgIG1wX2ludCAgICAgICAgdDsKKyAgdW5zaWduZWQgbG9uZyByOworCisgIC8qIERlZmF1bHQgdG8gTm9uLXNxdWFyZSA6KSAqLworICAqcmV0ID0gTVBfTk87IAorCisgIGlmIChhcmctPnNpZ24gPT0gTVBfTkVHKSB7CisgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIGRpZ2l0cyB1c2VkPyAgKFRTRCkgKi8KKyAgaWYgKGFyZy0+dXNlZCA9PSAwKSB7CisgICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogRmlyc3QgY2hlY2sgbW9kIDEyOCAoc3VwcG9zZSB0aGF0IERJR0lUX0JJVCBpcyBhdCBsZWFzdCA3KSAqLworICBpZiAocmVtXzEyOFsxMjcgJiBESUdJVChhcmcsMCldID09IDEpIHsKKyAgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICAvKiBOZXh0IGNoZWNrIG1vZCAxMDUgKDMqNSo3KSAqLworICBpZiAoKHJlcyA9IG1wX21vZF9kKGFyZywxMDUsJmMpKSAhPSBNUF9PS0FZKSB7CisgICAgIHJldHVybiByZXM7CisgIH0KKyAgaWYgKHJlbV8xMDVbY10gPT0gMSkgeworICAgICByZXR1cm4gTVBfT0tBWTsKKyAgfQorCisKKyAgaWYgKChyZXMgPSBtcF9pbml0X3NldF9pbnQoJnQsMTFMKjEzTCoxN0wqMTlMKjIzTCoyOUwqMzFMKSkgIT0gTVBfT0tBWSkgeworICAgICByZXR1cm4gcmVzOworICB9CisgIGlmICgocmVzID0gbXBfbW9kKGFyZywmdCwmdCkpICE9IE1QX09LQVkpIHsKKyAgICAgZ290byBFUlI7CisgIH0KKyAgciA9IG1wX2dldF9pbnQoJnQpOworICAvKiBDaGVjayBmb3Igb3RoZXIgcHJpbWUgbW9kdWxlcywgbm90ZSBpdCdzIG5vdCBhbiBFUlJPUiBidXQgd2UgbXVzdAorICAgKiBmcmVlICJ0IiBzbyB0aGUgZWFzaWVzdCB3YXkgaXMgdG8gZ290byBFUlIuICBXZSBrbm93IHRoYXQgcmVzCisgICAqIGlzIGFscmVhZHkgZXF1YWwgdG8gTVBfT0tBWSBmcm9tIHRoZSBtcF9tb2QgY2FsbCAKKyAgICovIAorICBpZiAoICgxTDw8KHIlMTEpKSAmIDB4NUM0TCApICAgICAgICAgICAgIGdvdG8gRVJSOworICBpZiAoICgxTDw8KHIlMTMpKSAmIDB4OUU0TCApICAgICAgICAgICAgIGdvdG8gRVJSOworICBpZiAoICgxTDw8KHIlMTcpKSAmIDB4NUNFOEwgKSAgICAgICAgICAgIGdvdG8gRVJSOworICBpZiAoICgxTDw8KHIlMTkpKSAmIDB4NEY1MENMICkgICAgICAgICAgIGdvdG8gRVJSOworICBpZiAoICgxTDw8KHIlMjMpKSAmIDB4N0FDQ0EwTCApICAgICAgICAgIGdvdG8gRVJSOworICBpZiAoICgxTDw8KHIlMjkpKSAmIDB4QzJFREQwQ0wgKSAgICAgICAgIGdvdG8gRVJSOworICBpZiAoICgxTDw8KHIlMzEpKSAmIDB4NkRFMkI4NDhMICkgICAgICAgIGdvdG8gRVJSOworCisgIC8qIEZpbmFsIGNoZWNrIC0gaXMgc3FyKHNxcnQoYXJnKSkgPT0gYXJnID8gKi8KKyAgaWYgKChyZXMgPSBtcF9zcXJ0KGFyZywmdCkpICE9IE1QX09LQVkpIHsKKyAgICAgZ290byBFUlI7CisgIH0KKyAgaWYgKChyZXMgPSBtcF9zcXIoJnQsJnQpKSAhPSBNUF9PS0FZKSB7CisgICAgIGdvdG8gRVJSOworICB9CisKKyAgKnJldCA9IChtcF9jbXBfbWFnKCZ0LGFyZykgPT0gTVBfRVEpID8gTVBfWUVTIDogTVBfTk87CitFUlI6bXBfY2xlYXIoJnQpOworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfaXNfc3F1YXJlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfaXNfc3F1YXJlLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2phY29iaS5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX0pBQ09CSV9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBjb21wdXRlcyB0aGUgamFjb2JpIGMgPSAoYSB8IG4pIChvciBMZWdlbmRyZSBpZiBuIGlzIHByaW1lKQorICogSEFDIHBwLiA3MyBBbGdvcml0aG0gMi4xNDkKKyAqLworaW50IG1wX2phY29iaSAobXBfaW50ICogYSwgbXBfaW50ICogcCwgaW50ICpjKQoreworICBtcF9pbnQgIGExLCBwMTsKKyAgaW50ICAgICBrLCBzLCByLCByZXM7CisgIG1wX2RpZ2l0IHJlc2lkdWU7CisKKyAgLyogaWYgcCA8PSAwIHJldHVybiBNUF9WQUwgKi8KKyAgaWYgKG1wX2NtcF9kKHAsIDApICE9IE1QX0dUKSB7CisgICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworICAvKiBzdGVwIDEuICBpZiBhID09IDAsIHJldHVybiAwICovCisgIGlmIChtcF9pc3plcm8gKGEpID09IDEpIHsKKyAgICAqYyA9IDA7CisgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICAvKiBzdGVwIDIuICBpZiBhID09IDEsIHJldHVybiAxICovCisgIGlmIChtcF9jbXBfZCAoYSwgMSkgPT0gTVBfRVEpIHsKKyAgICAqYyA9IDE7CisgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICAvKiBkZWZhdWx0ICovCisgIHMgPSAwOworCisgIC8qIHN0ZXAgMy4gIHdyaXRlIGEgPSBhMSAqIDIqKmsgICovCisgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmYTEsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIGlmICgocmVzID0gbXBfaW5pdCAoJnAxKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX0ExOworICB9CisKKyAgLyogZGl2aWRlIG91dCBsYXJnZXIgcG93ZXIgb2YgdHdvICovCisgIGsgPSBtcF9jbnRfbHNiKCZhMSk7CisgIGlmICgocmVzID0gbXBfZGl2XzJkKCZhMSwgaywgJmExLCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgICBnb3RvIExCTF9QMTsKKyAgfQorCisgIC8qIHN0ZXAgNC4gIGlmIGUgaXMgZXZlbiBzZXQgcz0xICovCisgIGlmICgoayAmIDEpID09IDApIHsKKyAgICBzID0gMTsKKyAgfSBlbHNlIHsKKyAgICAvKiBlbHNlIHNldCBzPTEgaWYgcCA9IDEvNyAobW9kIDgpIG9yIHM9LTEgaWYgcCA9IDMvNSAobW9kIDgpICovCisgICAgcmVzaWR1ZSA9IHAtPmRwWzBdICYgNzsKKworICAgIGlmIChyZXNpZHVlID09IDEgfHwgcmVzaWR1ZSA9PSA3KSB7CisgICAgICBzID0gMTsKKyAgICB9IGVsc2UgaWYgKHJlc2lkdWUgPT0gMyB8fCByZXNpZHVlID09IDUpIHsKKyAgICAgIHMgPSAtMTsKKyAgICB9CisgIH0KKworICAvKiBzdGVwIDUuICBpZiBwID09IDMgKG1vZCA0KSAqYW5kKiBhMSA9PSAzIChtb2QgNCkgdGhlbiBzID0gLXMgKi8KKyAgaWYgKCAoKHAtPmRwWzBdICYgMykgPT0gMykgJiYgKChhMS5kcFswXSAmIDMpID09IDMpKSB7CisgICAgcyA9IC1zOworICB9CisKKyAgLyogaWYgYTEgPT0gMSB3ZSdyZSBkb25lICovCisgIGlmIChtcF9jbXBfZCAoJmExLCAxKSA9PSBNUF9FUSkgeworICAgICpjID0gczsKKyAgfSBlbHNlIHsKKyAgICAvKiBuMSA9IG4gbW9kIGExICovCisgICAgaWYgKChyZXMgPSBtcF9tb2QgKHAsICZhMSwgJnAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfUDE7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfamFjb2JpICgmcDEsICZhMSwgJnIpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9QMTsKKyAgICB9CisgICAgKmMgPSBzICogcjsKKyAgfQorCisgIC8qIGRvbmUgKi8KKyAgcmVzID0gTVBfT0tBWTsKK0xCTF9QMTptcF9jbGVhciAoJnAxKTsKK0xCTF9BMTptcF9jbGVhciAoJmExKTsKKyAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2phY29iaS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2phY29iaS5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9rYXJhdHN1YmFfbXVsLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfS0FSQVRTVUJBX01VTF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBjID0gfGF8ICogfGJ8IHVzaW5nIEthcmF0c3ViYSBNdWx0aXBsaWNhdGlvbiB1c2luZyAKKyAqIHRocmVlIGhhbGYgc2l6ZSBtdWx0aXBsaWNhdGlvbnMKKyAqCisgKiBMZXQgQiByZXByZXNlbnQgdGhlIHJhZGl4IFtlLmcuIDIqKkRJR0lUX0JJVF0gYW5kIAorICogbGV0IG4gcmVwcmVzZW50IGhhbGYgb2YgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gCisgKiB0aGUgbWluKGEsYikKKyAqCisgKiBhID0gYTEgKiBCKipuICsgYTAKKyAqIGIgPSBiMSAqIEIqKm4gKyBiMAorICoKKyAqIFRoZW4sIGEgKiBiID0+IAorICAgYTFiMSAqIEIqKjJuICsgKChhMSArIGEwKShiMSArIGIwKSAtIChhMGIwICsgYTFiMSkpICogQiArIGEwYjAKKyAqCisgKiBOb3RlIHRoYXQgYTFiMSBhbmQgYTBiMCBhcmUgdXNlZCB0d2ljZSBhbmQgb25seSBuZWVkIHRvIGJlIAorICogY29tcHV0ZWQgb25jZS4gIFNvIGluIHRvdGFsIHRocmVlIGhhbGYgc2l6ZSAoaGFsZiAjIG9mIAorICogZGlnaXQpIG11bHRpcGxpY2F0aW9ucyBhcmUgcGVyZm9ybWVkLCBhMGIwLCBhMWIxIGFuZCAKKyAqIChhMStiMSkoYTArYjApCisgKgorICogTm90ZSB0aGF0IGEgbXVsdGlwbGljYXRpb24gb2YgaGFsZiB0aGUgZGlnaXRzIHJlcXVpcmVzCisgKiAxLzR0aCB0aGUgbnVtYmVyIG9mIHNpbmdsZSBwcmVjaXNpb24gbXVsdGlwbGljYXRpb25zIHNvIGluIAorICogdG90YWwgYWZ0ZXIgb25lIGNhbGwgMjUlIG9mIHRoZSBzaW5nbGUgcHJlY2lzaW9uIG11bHRpcGxpY2F0aW9ucyAKKyAqIGFyZSBzYXZlZC4gIE5vdGUgYWxzbyB0aGF0IHRoZSBjYWxsIHRvIG1wX211bCBjYW4gZW5kIHVwIGJhY2sgCisgKiBpbiB0aGlzIGZ1bmN0aW9uIGlmIHRoZSBhMCwgYTEsIGIwLCBvciBiMSBhcmUgYWJvdmUgdGhlIHRocmVzaG9sZC4gIAorICogVGhpcyBpcyBrbm93biBhcyBkaXZpZGUtYW5kLWNvbnF1ZXIgYW5kIGxlYWRzIHRvIHRoZSBmYW1vdXMgCisgKiBPKE4qKmxnKDMpKSBvciBPKE4qKjEuNTg0KSB3b3JrIHdoaWNoIGlzIGFzeW1wdG9waWNhbGx5IGxvd2VyIHRoYW4gCisgKiB0aGUgc3RhbmRhcmQgTyhOKioyKSB0aGF0IHRoZSBiYXNlbGluZS9jb21iYSBtZXRob2RzIHVzZS4gIAorICogR2VuZXJhbGx5IHRob3VnaCB0aGUgb3ZlcmhlYWQgb2YgdGhpcyBtZXRob2QgZG9lc24ndCBwYXkgb2ZmIAorICogdW50aWwgYSBjZXJ0YWluIHNpemUgKE4gfiA4MCkgaXMgcmVhY2hlZC4KKyAqLworaW50IG1wX2thcmF0c3ViYV9tdWwgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpCit7CisgIG1wX2ludCAgeDAsIHgxLCB5MCwgeTEsIHQxLCB4MHkwLCB4MXkxOworICBpbnQgICAgIEIsIGVycjsKKworICAvKiBkZWZhdWx0IHRoZSByZXR1cm4gY29kZSB0byBhbiBlcnJvciAqLworICBlcnIgPSBNUF9NRU07CisKKyAgLyogbWluICMgb2YgZGlnaXRzICovCisgIEIgPSBNSU4gKGEtPnVzZWQsIGItPnVzZWQpOworCisgIC8qIG5vdyBkaXZpZGUgaW4gdHdvICovCisgIEIgPSBCID4+IDE7CisKKyAgLyogaW5pdCBjb3B5IGFsbCB0aGUgdGVtcHMgKi8KKyAgaWYgKG1wX2luaXRfc2l6ZSAoJngwLCBCKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gRVJSOworICBpZiAobXBfaW5pdF9zaXplICgmeDEsIGEtPnVzZWQgLSBCKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDA7CisgIGlmIChtcF9pbml0X3NpemUgKCZ5MCwgQikgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxOworICBpZiAobXBfaW5pdF9zaXplICgmeTEsIGItPnVzZWQgLSBCKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWTA7CisKKyAgLyogaW5pdCB0ZW1wcyAqLworICBpZiAobXBfaW5pdF9zaXplICgmdDEsIEIgKiAyKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWTE7CisgIGlmIChtcF9pbml0X3NpemUgKCZ4MHkwLCBCICogMikgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFQxOworICBpZiAobXBfaW5pdF9zaXplICgmeDF5MSwgQiAqIDIpICE9IE1QX09LQVkpCisgICAgZ290byBYMFkwOworCisgIC8qIG5vdyBzaGlmdCB0aGUgZGlnaXRzICovCisgIHgwLnVzZWQgPSB5MC51c2VkID0gQjsKKyAgeDEudXNlZCA9IGEtPnVzZWQgLSBCOworICB5MS51c2VkID0gYi0+dXNlZCAtIEI7CisKKyAgeworICAgIHJlZ2lzdGVyIGludCB4OworICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXBhLCAqdG1wYiwgKnRtcHgsICp0bXB5OworCisgICAgLyogd2UgY29weSB0aGUgZGlnaXRzIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmcgaGlnaGVyIGxldmVsIGZ1bmN0aW9ucworICAgICAqIHNpbmNlIHdlIGFsc28gbmVlZCB0byBzaGlmdCB0aGUgZGlnaXRzCisgICAgICovCisgICAgdG1wYSA9IGEtPmRwOworICAgIHRtcGIgPSBiLT5kcDsKKworICAgIHRtcHggPSB4MC5kcDsKKyAgICB0bXB5ID0geTAuZHA7CisgICAgZm9yICh4ID0gMDsgeCA8IEI7IHgrKykgeworICAgICAgKnRtcHgrKyA9ICp0bXBhKys7CisgICAgICAqdG1weSsrID0gKnRtcGIrKzsKKyAgICB9CisKKyAgICB0bXB4ID0geDEuZHA7CisgICAgZm9yICh4ID0gQjsgeCA8IGEtPnVzZWQ7IHgrKykgeworICAgICAgKnRtcHgrKyA9ICp0bXBhKys7CisgICAgfQorCisgICAgdG1weSA9IHkxLmRwOworICAgIGZvciAoeCA9IEI7IHggPCBiLT51c2VkOyB4KyspIHsKKyAgICAgICp0bXB5KysgPSAqdG1wYisrOworICAgIH0KKyAgfQorCisgIC8qIG9ubHkgbmVlZCB0byBjbGFtcCB0aGUgbG93ZXIgd29yZHMgc2luY2UgYnkgZGVmaW5pdGlvbiB0aGUgCisgICAqIHVwcGVyIHdvcmRzIHgxL3kxIG11c3QgaGF2ZSBhIGtub3duIG51bWJlciBvZiBkaWdpdHMKKyAgICovCisgIG1wX2NsYW1wICgmeDApOworICBtcF9jbGFtcCAoJnkwKTsKKworICAvKiBub3cgY2FsYyB0aGUgcHJvZHVjdHMgeDB5MCBhbmQgeDF5MSAqLworICAvKiBhZnRlciB0aGlzIHgwIGlzIG5vIGxvbmdlciByZXF1aXJlZCwgZnJlZSB0ZW1wIFt4MD09dDJdISAqLworICBpZiAobXBfbXVsICgmeDAsICZ5MCwgJngweTApICE9IE1QX09LQVkpICAKKyAgICBnb3RvIFgxWTE7ICAgICAgICAgIC8qIHgweTAgPSB4MCp5MCAqLworICBpZiAobXBfbXVsICgmeDEsICZ5MSwgJngxeTEpICE9IE1QX09LQVkpCisgICAgZ290byBYMVkxOyAgICAgICAgICAvKiB4MXkxID0geDEqeTEgKi8KKworICAvKiBub3cgY2FsYyB4MSt4MCBhbmQgeTEreTAgKi8KKyAgaWYgKHNfbXBfYWRkICgmeDEsICZ4MCwgJnQxKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFZMTsgICAgICAgICAgLyogdDEgPSB4MSAtIHgwICovCisgIGlmIChzX21wX2FkZCAoJnkxLCAmeTAsICZ4MCkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWTE7ICAgICAgICAgIC8qIHQyID0geTEgLSB5MCAqLworICBpZiAobXBfbXVsICgmdDEsICZ4MCwgJnQxKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFZMTsgICAgICAgICAgLyogdDEgPSAoeDEgKyB4MCkgKiAoeTEgKyB5MCkgKi8KKworICAvKiBhZGQgeDB5MCAqLworICBpZiAobXBfYWRkICgmeDB5MCwgJngxeTEsICZ4MCkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWTE7ICAgICAgICAgIC8qIHQyID0geDB5MCArIHgxeTEgKi8KKyAgaWYgKHNfbXBfc3ViICgmdDEsICZ4MCwgJnQxKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFZMTsgICAgICAgICAgLyogdDEgPSAoeDEreDApKih5MSt5MCkgLSAoeDF5MSArIHgweTApICovCisKKyAgLyogc2hpZnQgYnkgQiAqLworICBpZiAobXBfbHNoZCAoJnQxLCBCKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFZMTsgICAgICAgICAgLyogdDEgPSAoeDB5MCArIHgxeTEgLSAoeDEteDApKih5MS15MCkpPDxCICovCisgIGlmIChtcF9sc2hkICgmeDF5MSwgQiAqIDIpICE9IE1QX09LQVkpCisgICAgZ290byBYMVkxOyAgICAgICAgICAvKiB4MXkxID0geDF5MSA8PCAyKkIgKi8KKworICBpZiAobXBfYWRkICgmeDB5MCwgJnQxLCAmdDEpICE9IE1QX09LQVkpCisgICAgZ290byBYMVkxOyAgICAgICAgICAvKiB0MSA9IHgweTAgKyB0MSAqLworICBpZiAobXBfYWRkICgmdDEsICZ4MXkxLCBjKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFZMTsgICAgICAgICAgLyogdDEgPSB4MHkwICsgdDEgKyB4MXkxICovCisKKyAgLyogQWxnb3JpdGhtIHN1Y2NlZWRlZCBzZXQgdGhlIHJldHVybiBjb2RlIHRvIE1QX09LQVkgKi8KKyAgZXJyID0gTVBfT0tBWTsKKworWDFZMTptcF9jbGVhciAoJngxeTEpOworWDBZMDptcF9jbGVhciAoJngweTApOworVDE6bXBfY2xlYXIgKCZ0MSk7CitZMTptcF9jbGVhciAoJnkxKTsKK1kwOm1wX2NsZWFyICgmeTApOworWDE6bXBfY2xlYXIgKCZ4MSk7CitYMDptcF9jbGVhciAoJngwKTsKK0VSUjoKKyAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX2thcmF0c3ViYV9tdWwuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9rYXJhdHN1YmFfbXVsLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2thcmF0c3ViYV9zcXIuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9LQVJBVFNVQkFfU1FSX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEthcmF0c3ViYSBzcXVhcmluZywgY29tcHV0ZXMgYiA9IGEqYSB1c2luZyB0aHJlZSAKKyAqIGhhbGYgc2l6ZSBzcXVhcmluZ3MKKyAqCisgKiBTZWUgY29tbWVudHMgb2Yga2FyYXRzdWJhX211bCBmb3IgZGV0YWlscy4gIEl0IAorICogaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYWxnb3JpdGhtIGJ1dCBtZXJlbHkgCisgKiB0dW5lZCB0byBwZXJmb3JtIHJlY3Vyc2l2ZSBzcXVhcmluZ3MuCisgKi8KK2ludCBtcF9rYXJhdHN1YmFfc3FyIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQoreworICBtcF9pbnQgIHgwLCB4MSwgdDEsIHQyLCB4MHgwLCB4MXgxOworICBpbnQgICAgIEIsIGVycjsKKworICBlcnIgPSBNUF9NRU07CisKKyAgLyogbWluICMgb2YgZGlnaXRzICovCisgIEIgPSBhLT51c2VkOworCisgIC8qIG5vdyBkaXZpZGUgaW4gdHdvICovCisgIEIgPSBCID4+IDE7CisKKyAgLyogaW5pdCBjb3B5IGFsbCB0aGUgdGVtcHMgKi8KKyAgaWYgKG1wX2luaXRfc2l6ZSAoJngwLCBCKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gRVJSOworICBpZiAobXBfaW5pdF9zaXplICgmeDEsIGEtPnVzZWQgLSBCKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDA7CisKKyAgLyogaW5pdCB0ZW1wcyAqLworICBpZiAobXBfaW5pdF9zaXplICgmdDEsIGEtPnVzZWQgKiAyKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDE7CisgIGlmIChtcF9pbml0X3NpemUgKCZ0MiwgYS0+dXNlZCAqIDIpICE9IE1QX09LQVkpCisgICAgZ290byBUMTsKKyAgaWYgKG1wX2luaXRfc2l6ZSAoJngweDAsIEIgKiAyKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gVDI7CisgIGlmIChtcF9pbml0X3NpemUgKCZ4MXgxLCAoYS0+dXNlZCAtIEIpICogMikgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgwWDA7CisKKyAgeworICAgIHJlZ2lzdGVyIGludCB4OworICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICpkc3QsICpzcmM7CisKKyAgICBzcmMgPSBhLT5kcDsKKworICAgIC8qIG5vdyBzaGlmdCB0aGUgZGlnaXRzICovCisgICAgZHN0ID0geDAuZHA7CisgICAgZm9yICh4ID0gMDsgeCA8IEI7IHgrKykgeworICAgICAgKmRzdCsrID0gKnNyYysrOworICAgIH0KKworICAgIGRzdCA9IHgxLmRwOworICAgIGZvciAoeCA9IEI7IHggPCBhLT51c2VkOyB4KyspIHsKKyAgICAgICpkc3QrKyA9ICpzcmMrKzsKKyAgICB9CisgIH0KKworICB4MC51c2VkID0gQjsKKyAgeDEudXNlZCA9IGEtPnVzZWQgLSBCOworCisgIG1wX2NsYW1wICgmeDApOworCisgIC8qIG5vdyBjYWxjIHRoZSBwcm9kdWN0cyB4MCp4MCBhbmQgeDEqeDEgKi8KKyAgaWYgKG1wX3NxciAoJngwLCAmeDB4MCkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWDE7ICAgICAgICAgICAvKiB4MHgwID0geDAqeDAgKi8KKyAgaWYgKG1wX3NxciAoJngxLCAmeDF4MSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWDE7ICAgICAgICAgICAvKiB4MXgxID0geDEqeDEgKi8KKworICAvKiBub3cgY2FsYyAoeDEreDApKioyICovCisgIGlmIChzX21wX2FkZCAoJngxLCAmeDAsICZ0MSkgIT0gTVBfT0tBWSkKKyAgICBnb3RvIFgxWDE7ICAgICAgICAgICAvKiB0MSA9IHgxIC0geDAgKi8KKyAgaWYgKG1wX3NxciAoJnQxLCAmdDEpICE9IE1QX09LQVkpCisgICAgZ290byBYMVgxOyAgICAgICAgICAgLyogdDEgPSAoeDEgLSB4MCkgKiAoeDEgLSB4MCkgKi8KKworICAvKiBhZGQgeDB5MCAqLworICBpZiAoc19tcF9hZGQgKCZ4MHgwLCAmeDF4MSwgJnQyKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFYMTsgICAgICAgICAgIC8qIHQyID0geDB4MCArIHgxeDEgKi8KKyAgaWYgKHNfbXBfc3ViICgmdDEsICZ0MiwgJnQxKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFYMTsgICAgICAgICAgIC8qIHQxID0gKHgxK3gwKSoqMiAtICh4MHgwICsgeDF4MSkgKi8KKworICAvKiBzaGlmdCBieSBCICovCisgIGlmIChtcF9sc2hkICgmdDEsIEIpICE9IE1QX09LQVkpCisgICAgZ290byBYMVgxOyAgICAgICAgICAgLyogdDEgPSAoeDB4MCArIHgxeDEgLSAoeDEteDApKih4MS14MCkpPDxCICovCisgIGlmIChtcF9sc2hkICgmeDF4MSwgQiAqIDIpICE9IE1QX09LQVkpCisgICAgZ290byBYMVgxOyAgICAgICAgICAgLyogeDF4MSA9IHgxeDEgPDwgMipCICovCisKKyAgaWYgKG1wX2FkZCAoJngweDAsICZ0MSwgJnQxKSAhPSBNUF9PS0FZKQorICAgIGdvdG8gWDFYMTsgICAgICAgICAgIC8qIHQxID0geDB4MCArIHQxICovCisgIGlmIChtcF9hZGQgKCZ0MSwgJngxeDEsIGIpICE9IE1QX09LQVkpCisgICAgZ290byBYMVgxOyAgICAgICAgICAgLyogdDEgPSB4MHgwICsgdDEgKyB4MXgxICovCisKKyAgZXJyID0gTVBfT0tBWTsKKworWDFYMTptcF9jbGVhciAoJngxeDEpOworWDBYMDptcF9jbGVhciAoJngweDApOworVDI6bXBfY2xlYXIgKCZ0Mik7CitUMTptcF9jbGVhciAoJnQxKTsKK1gxOm1wX2NsZWFyICgmeDEpOworWDA6bXBfY2xlYXIgKCZ4MCk7CitFUlI6CisgIHJldHVybiBlcnI7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9rYXJhdHN1YmFfc3FyLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNSAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfa2FyYXRzdWJhX3Nxci5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9sY20uYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9MQ01fQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY29tcHV0ZXMgbGVhc3QgY29tbW9uIG11bHRpcGxlIGFzIHxhKmJ8LyhhLCBiKSAqLworaW50IG1wX2xjbSAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK3sKKyAgaW50ICAgICByZXM7CisgIG1wX2ludCAgdDEsIHQyOworCisKKyAgaWYgKChyZXMgPSBtcF9pbml0X211bHRpICgmdDEsICZ0MiwgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLyogdDEgPSBnZXQgdGhlIEdDRCBvZiB0aGUgdHdvIGlucHV0cyAqLworICBpZiAoKHJlcyA9IG1wX2djZCAoYSwgYiwgJnQxKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1Q7CisgIH0KKworICAvKiBkaXZpZGUgdGhlIHNtYWxsZXN0IGJ5IHRoZSBHQ0QgKi8KKyAgaWYgKG1wX2NtcF9tYWcoYSwgYikgPT0gTVBfTFQpIHsKKyAgICAgLyogc3RvcmUgcXVvdGllbnQgaW4gdDIgc3VjaCB0aGF0IHQyICogYiBpcyB0aGUgTENNICovCisgICAgIGlmICgocmVzID0gbXBfZGl2KGEsICZ0MSwgJnQyLCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9UOworICAgICB9CisgICAgIHJlcyA9IG1wX211bChiLCAmdDIsIGMpOworICB9IGVsc2UgeworICAgICAvKiBzdG9yZSBxdW90aWVudCBpbiB0MiBzdWNoIHRoYXQgdDIgKiBhIGlzIHRoZSBMQ00gKi8KKyAgICAgaWYgKChyZXMgPSBtcF9kaXYoYiwgJnQxLCAmdDIsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1Q7CisgICAgIH0KKyAgICAgcmVzID0gbXBfbXVsKGEsICZ0MiwgYyk7CisgIH0KKworICAvKiBmaXggdGhlIHNpZ24gdG8gcG9zaXRpdmUgKi8KKyAgYy0+c2lnbiA9IE1QX1pQT1M7CisKK0xCTF9UOgorICBtcF9jbGVhcl9tdWx0aSAoJnQxLCAmdDIsIE5VTEwpOworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfbGNtLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfbGNtLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX2xzaGQuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9MU0hEX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHNoaWZ0IGxlZnQgYSBjZXJ0YWluIGFtb3VudCBvZiBkaWdpdHMgKi8KK2ludCBtcF9sc2hkIChtcF9pbnQgKiBhLCBpbnQgYikKK3sKKyAgaW50ICAgICB4LCByZXM7CisKKyAgLyogaWYgaXRzIGxlc3MgdGhhbiB6ZXJvIHJldHVybiAqLworICBpZiAoYiA8PSAwKSB7CisgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICAvKiBncm93IHRvIGZpdCB0aGUgbmV3IGRpZ2l0cyAqLworICBpZiAoYS0+YWxsb2MgPCBhLT51c2VkICsgYikgeworICAgICBpZiAoKHJlcyA9IG1wX2dyb3cgKGEsIGEtPnVzZWQgKyBiKSkgIT0gTVBfT0tBWSkgeworICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfQorCisgIHsKKyAgICByZWdpc3RlciBtcF9kaWdpdCAqdG9wLCAqYm90dG9tOworCisgICAgLyogaW5jcmVtZW50IHRoZSB1c2VkIGJ5IHRoZSBzaGlmdCBhbW91bnQgdGhlbiBjb3B5IHVwd2FyZHMgKi8KKyAgICBhLT51c2VkICs9IGI7CisKKyAgICAvKiB0b3AgKi8KKyAgICB0b3AgPSBhLT5kcCArIGEtPnVzZWQgLSAxOworCisgICAgLyogYmFzZSAqLworICAgIGJvdHRvbSA9IGEtPmRwICsgYS0+dXNlZCAtIDEgLSBiOworCisgICAgLyogbXVjaCBsaWtlIG1wX3JzaGQgdGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIHNsaWRpbmcgd2luZG93CisgICAgICogZXhjZXB0IHRoZSB3aW5kb3cgZ29lcyB0aGUgb3RoZXJ3YXkgYXJvdW5kLiAgQ29weWluZyBmcm9tCisgICAgICogdGhlIGJvdHRvbSB0byB0aGUgdG9wLiAgc2VlIGJuX21wX3JzaGQuYyBmb3IgbW9yZSBpbmZvLgorICAgICAqLworICAgIGZvciAoeCA9IGEtPnVzZWQgLSAxOyB4ID49IGI7IHgtLSkgeworICAgICAgKnRvcC0tID0gKmJvdHRvbS0tOworICAgIH0KKworICAgIC8qIHplcm8gdGhlIGxvd2VyIGRpZ2l0cyAqLworICAgIHRvcCA9IGEtPmRwOworICAgIGZvciAoeCA9IDA7IHggPCBiOyB4KyspIHsKKyAgICAgICp0b3ArKyA9IDA7CisgICAgfQorICB9CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfbHNoZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX2xzaGQuYyAqLworCisvKiBTdGFydDogYm5fbXBfbW9kLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfTU9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGMgPSBhIG1vZCBiLCAwIDw9IGMgPCBiICovCitpbnQKK21wX21vZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK3sKKyAgbXBfaW50ICB0OworICBpbnQgICAgIHJlczsKKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ0KSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2RpdiAoYSwgYiwgTlVMTCwgJnQpKSAhPSBNUF9PS0FZKSB7CisgICAgbXBfY2xlYXIgKCZ0KTsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgaWYgKHQuc2lnbiAhPSBiLT5zaWduKSB7CisgICAgcmVzID0gbXBfYWRkIChiLCAmdCwgYyk7CisgIH0gZWxzZSB7CisgICAgcmVzID0gTVBfT0tBWTsKKyAgICBtcF9leGNoICgmdCwgYyk7CisgIH0KKworICBtcF9jbGVhciAoJnQpOworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfbW9kLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfbW9kLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX21vZF8yZC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX01PRF8yRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBjYWxjIGEgdmFsdWUgbW9kIDIqKmIgKi8KK2ludAorbXBfbW9kXzJkIChtcF9pbnQgKiBhLCBpbnQgYiwgbXBfaW50ICogYykKK3sKKyAgaW50ICAgICB4LCByZXM7CisKKyAgLyogaWYgYiBpcyA8PSAwIHRoZW4gemVybyB0aGUgaW50ICovCisgIGlmIChiIDw9IDApIHsKKyAgICBtcF96ZXJvIChjKTsKKyAgICByZXR1cm4gTVBfT0tBWTsKKyAgfQorCisgIC8qIGlmIHRoZSBtb2R1bHVzIGlzIGxhcmdlciB0aGFuIHRoZSB2YWx1ZSB0aGFuIHJldHVybiAqLworICBpZiAoYiA+PSAoaW50KSAoYS0+dXNlZCAqIERJR0lUX0JJVCkpIHsKKyAgICByZXMgPSBtcF9jb3B5IChhLCBjKTsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgLyogY29weSAqLworICBpZiAoKHJlcyA9IG1wX2NvcHkgKGEsIGMpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIHplcm8gZGlnaXRzIGFib3ZlIHRoZSBsYXN0IGRpZ2l0IG9mIHRoZSBtb2R1bHVzICovCisgIGZvciAoeCA9IChiIC8gRElHSVRfQklUKSArICgoYiAlIERJR0lUX0JJVCkgPT0gMCA/IDAgOiAxKTsgeCA8IGMtPnVzZWQ7IHgrKykgeworICAgIGMtPmRwW3hdID0gMDsKKyAgfQorICAvKiBjbGVhciB0aGUgZGlnaXQgdGhhdCBpcyBub3QgY29tcGxldGVseSBvdXRzaWRlL2luc2lkZSB0aGUgbW9kdWx1cyAqLworICBjLT5kcFtiIC8gRElHSVRfQklUXSAmPQorICAgIChtcF9kaWdpdCkgKCgoKG1wX2RpZ2l0KSAxKSA8PCAoKChtcF9kaWdpdCkgYikgJSBESUdJVF9CSVQpKSAtICgobXBfZGlnaXQpIDEpKTsKKyAgbXBfY2xhbXAgKGMpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX21vZF8yZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX21vZF8yZC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9tb2RfZC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX01PRF9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKK2ludAorbXBfbW9kX2QgKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIsIG1wX2RpZ2l0ICogYykKK3sKKyAgcmV0dXJuIG1wX2Rpdl9kKGEsIGIsIE5VTEwsIGMpOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfbW9kX2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9tb2RfZC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbi5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX01PTlRHT01FUllfQ0FMQ19OT1JNQUxJWkFUSU9OX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qCisgKiBzaGlmdHMgd2l0aCBzdWJ0cmFjdGlvbnMgd2hlbiB0aGUgcmVzdWx0IGlzIGdyZWF0ZXIgdGhhbiBiLgorICoKKyAqIFRoZSBtZXRob2QgaXMgc2xpZ2h0bHkgbW9kaWZpZWQgdG8gc2hpZnQgQiB1bmNvbmRpdGlvbmFsbHkgdXB0byBqdXN0IHVuZGVyCisgKiB0aGUgbGVhZGluZyBiaXQgb2YgYi4gIFRoaXMgc2F2ZXMgYWxvdCBvZiBtdWx0aXBsZSBwcmVjaXNpb24gc2hpZnRpbmcuCisgKi8KK2ludCBtcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbiAobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgaW50ICAgICB4LCBiaXRzLCByZXM7CisKKyAgLyogaG93IG1hbnkgYml0cyBvZiBsYXN0IGRpZ2l0IGRvZXMgYiB1c2UgKi8KKyAgYml0cyA9IG1wX2NvdW50X2JpdHMgKGIpICUgRElHSVRfQklUOworCisgIGlmIChiLT51c2VkID4gMSkgeworICAgICBpZiAoKHJlcyA9IG1wXzJleHB0IChhLCAoYi0+dXNlZCAtIDEpICogRElHSVRfQklUICsgYml0cyAtIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfSBlbHNlIHsKKyAgICAgbXBfc2V0KGEsIDEpOworICAgICBiaXRzID0gMTsKKyAgfQorCisKKyAgLyogbm93IGNvbXB1dGUgQyA9IEEgKiBCIG1vZCBiICovCisgIGZvciAoeCA9IGJpdHMgLSAxOyB4IDwgKGludClESUdJVF9CSVQ7IHgrKykgeworICAgIGlmICgocmVzID0gbXBfbXVsXzIgKGEsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBpZiAobXBfY21wX21hZyAoYSwgYikgIT0gTVBfTFQpIHsKKyAgICAgIGlmICgocmVzID0gc19tcF9zdWIgKGEsIGIsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIHJldHVybiByZXM7CisgICAgICB9CisgICAgfQorICB9CisKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9tb250Z29tZXJ5X2NhbGNfbm9ybWFsaXphdGlvbi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX21vbnRnb21lcnlfY2FsY19ub3JtYWxpemF0aW9uLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX21vbnRnb21lcnlfcmVkdWNlLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfTU9OVEdPTUVSWV9SRURVQ0VfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogY29tcHV0ZXMgeFIqKi0xID09IHggKG1vZCBOKSB2aWEgTW9udGdvbWVyeSBSZWR1Y3Rpb24gKi8KK2ludAorbXBfbW9udGdvbWVyeV9yZWR1Y2UgKG1wX2ludCAqIHgsIG1wX2ludCAqIG4sIG1wX2RpZ2l0IHJobykKK3sKKyAgaW50ICAgICBpeCwgcmVzLCBkaWdzOworICBtcF9kaWdpdCBtdTsKKworICAvKiBjYW4gdGhlIGZhc3QgcmVkdWN0aW9uIFtjb21iYV0gbWV0aG9kIGJlIHVzZWQ/CisgICAqCisgICAqIE5vdGUgdGhhdCB1bmxpa2UgaW4gbXVsIHlvdSdyZSBzYWZlbHkgYWxsb3dlZCAqbGVzcyoKKyAgICogdGhhbiB0aGUgYXZhaWxhYmxlIGNvbHVtbnMgWzI1NSBwZXIgZGVmYXVsdF0gc2luY2UgY2FycmllcworICAgKiBhcmUgZml4ZWQgdXAgaW4gdGhlIGlubmVyIGxvb3AuCisgICAqLworICBkaWdzID0gbi0+dXNlZCAqIDIgKyAxOworICBpZiAoKGRpZ3MgPCBNUF9XQVJSQVkpICYmCisgICAgICBuLT51c2VkIDwKKyAgICAgICgxIDw8ICgoQ0hBUl9CSVQgKiBzaXplb2YgKG1wX3dvcmQpKSAtICgyICogRElHSVRfQklUKSkpKSB7CisgICAgcmV0dXJuIGZhc3RfbXBfbW9udGdvbWVyeV9yZWR1Y2UgKHgsIG4sIHJobyk7CisgIH0KKworICAvKiBncm93IHRoZSBpbnB1dCBhcyByZXF1aXJlZCAqLworICBpZiAoeC0+YWxsb2MgPCBkaWdzKSB7CisgICAgaWYgKChyZXMgPSBtcF9ncm93ICh4LCBkaWdzKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKyAgeC0+dXNlZCA9IGRpZ3M7CisKKyAgZm9yIChpeCA9IDA7IGl4IDwgbi0+dXNlZDsgaXgrKykgeworICAgIC8qIG11ID0gYWkgKiByaG8gbW9kIGIKKyAgICAgKgorICAgICAqIFRoZSB2YWx1ZSBvZiByaG8gbXVzdCBiZSBwcmVjYWxjdWxhdGVkIHZpYQorICAgICAqIG1vbnRnb21lcnlfc2V0dXAoKSBzdWNoIHRoYXQKKyAgICAgKiBpdCBlcXVhbHMgLTEvbjAgbW9kIGIgdGhpcyBhbGxvd3MgdGhlCisgICAgICogZm9sbG93aW5nIGlubmVyIGxvb3AgdG8gcmVkdWNlIHRoZQorICAgICAqIGlucHV0IG9uZSBkaWdpdCBhdCBhIHRpbWUKKyAgICAgKi8KKyAgICBtdSA9IChtcF9kaWdpdCkgKCgobXBfd29yZCl4LT5kcFtpeF0pICogKChtcF93b3JkKXJobykgJiBNUF9NQVNLKTsKKworICAgIC8qIGEgPSBhICsgbXUgKiBtICogYioqaSAqLworICAgIHsKKyAgICAgIHJlZ2lzdGVyIGludCBpeTsKKyAgICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICp0bXBuLCAqdG1weCwgdTsKKyAgICAgIHJlZ2lzdGVyIG1wX3dvcmQgcjsKKworICAgICAgLyogYWxpYXMgZm9yIGRpZ2l0cyBvZiB0aGUgbW9kdWx1cyAqLworICAgICAgdG1wbiA9IG4tPmRwOworCisgICAgICAvKiBhbGlhcyBmb3IgdGhlIGRpZ2l0cyBvZiB4IFt0aGUgaW5wdXRdICovCisgICAgICB0bXB4ID0geC0+ZHAgKyBpeDsKKworICAgICAgLyogc2V0IHRoZSBjYXJyeSB0byB6ZXJvICovCisgICAgICB1ID0gMDsKKworICAgICAgLyogTXVsdGlwbHkgYW5kIGFkZCBpbiBwbGFjZSAqLworICAgICAgZm9yIChpeSA9IDA7IGl5IDwgbi0+dXNlZDsgaXkrKykgeworICAgICAgICAvKiBjb21wdXRlIHByb2R1Y3QgYW5kIHN1bSAqLworICAgICAgICByICAgICAgID0gKChtcF93b3JkKW11KSAqICgobXBfd29yZCkqdG1wbisrKSArCisgICAgICAgICAgICAgICAgICAoKG1wX3dvcmQpIHUpICsgKChtcF93b3JkKSAqIHRtcHgpOworCisgICAgICAgIC8qIGdldCBjYXJyeSAqLworICAgICAgICB1ICAgICAgID0gKG1wX2RpZ2l0KShyID4+ICgobXBfd29yZCkgRElHSVRfQklUKSk7CisKKyAgICAgICAgLyogZml4IGRpZ2l0ICovCisgICAgICAgICp0bXB4KysgPSAobXBfZGlnaXQpKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKKyAgICAgIH0KKyAgICAgIC8qIEF0IHRoaXMgcG9pbnQgdGhlIGl4J3RoIGRpZ2l0IG9mIHggc2hvdWxkIGJlIHplcm8gKi8KKworCisgICAgICAvKiBwcm9wYWdhdGUgY2FycmllcyB1cHdhcmRzIGFzIHJlcXVpcmVkKi8KKyAgICAgIHdoaWxlICh1KSB7CisgICAgICAgICp0bXB4ICAgKz0gdTsKKyAgICAgICAgdSAgICAgICAgPSAqdG1weCA+PiBESUdJVF9CSVQ7CisgICAgICAgICp0bXB4KysgJj0gTVBfTUFTSzsKKyAgICAgIH0KKyAgICB9CisgIH0KKworICAvKiBhdCB0aGlzIHBvaW50IHRoZSBuLnVzZWQndGggbGVhc3QKKyAgICogc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHggYXJlIGFsbCB6ZXJvCisgICAqIHdoaWNoIG1lYW5zIHdlIGNhbiBzaGlmdCB4IHRvIHRoZQorICAgKiByaWdodCBieSBuLnVzZWQgZGlnaXRzIGFuZCB0aGUKKyAgICogcmVzaWR1ZSBpcyB1bmNoYW5nZWQuCisgICAqLworCisgIC8qIHggPSB4L2IqKm4udXNlZCAqLworICBtcF9jbGFtcCh4KTsKKyAgbXBfcnNoZCAoeCwgbi0+dXNlZCk7CisKKyAgLyogaWYgeCA+PSBuIHRoZW4geCA9IHggLSBuICovCisgIGlmIChtcF9jbXBfbWFnICh4LCBuKSAhPSBNUF9MVCkgeworICAgIHJldHVybiBzX21wX3N1YiAoeCwgbiwgeCk7CisgIH0KKworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX21vbnRnb21lcnlfcmVkdWNlLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfbW9udGdvbWVyeV9yZWR1Y2UuYyAqLworCisvKiBTdGFydDogYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX01PTlRHT01FUllfU0VUVVBfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogc2V0dXBzIHRoZSBtb250Z29tZXJ5IHJlZHVjdGlvbiBzdHVmZiAqLworaW50CittcF9tb250Z29tZXJ5X3NldHVwIChtcF9pbnQgKiBuLCBtcF9kaWdpdCAqIHJobykKK3sKKyAgbXBfZGlnaXQgeCwgYjsKKworLyogZmFzdCBpbnZlcnNpb24gbW9kIDIqKmsKKyAqCisgKiBCYXNlZCBvbiB0aGUgZmFjdCB0aGF0CisgKgorICogWEEgPSAxIChtb2QgMioqbikgID0+ICAoWCgyLVhBKSkgQSA9IDEgKG1vZCAyKioybikKKyAqICAgICAgICAgICAgICAgICAgICA9PiAgMipYKkEgLSBYKlgqQSpBID0gMQorICogICAgICAgICAgICAgICAgICAgID0+ICAyKigxKSAtICgxKSAgICAgPSAxCisgKi8KKyAgYiA9IG4tPmRwWzBdOworCisgIGlmICgoYiAmIDEpID09IDApIHsKKyAgICByZXR1cm4gTVBfVkFMOworICB9CisKKyAgeCA9ICgoKGIgKyAyKSAmIDQpIDw8IDEpICsgYjsgLyogaGVyZSB4KmE9PTEgbW9kIDIqKjQgKi8KKyAgeCAqPSAyIC0gYiAqIHg7ICAgICAgICAgICAgICAgLyogaGVyZSB4KmE9PTEgbW9kIDIqKjggKi8KKyNpZiAhZGVmaW5lZChNUF84QklUKQorICB4ICo9IDIgLSBiICogeDsgICAgICAgICAgICAgICAvKiBoZXJlIHgqYT09MSBtb2QgMioqMTYgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoTVBfNjRCSVQpIHx8ICEoZGVmaW5lZChNUF84QklUKSB8fCBkZWZpbmVkKE1QXzE2QklUKSkKKyAgeCAqPSAyIC0gYiAqIHg7ICAgICAgICAgICAgICAgLyogaGVyZSB4KmE9PTEgbW9kIDIqKjMyICovCisjZW5kaWYKKyNpZmRlZiBNUF82NEJJVAorICB4ICo9IDIgLSBiICogeDsgICAgICAgICAgICAgICAvKiBoZXJlIHgqYT09MSBtb2QgMioqNjQgKi8KKyNlbmRpZgorCisgIC8qIHJobyA9IC0xL20gbW9kIGIgKi8KKyAgKnJobyA9ICh1bnNpZ25lZCBsb25nKSgoKG1wX3dvcmQpMSA8PCAoKG1wX3dvcmQpIERJR0lUX0JJVCkpIC0geCkgJiBNUF9NQVNLOworCisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfbW9udGdvbWVyeV9zZXR1cC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMTIvMDQgMjE6MzQ6MDMgJCAqLworCisvKiBFbmQ6IGJuX21wX21vbnRnb21lcnlfc2V0dXAuYyAqLworCisvKiBTdGFydDogYm5fbXBfbXVsLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfTVVMX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGhpZ2ggbGV2ZWwgbXVsdGlwbGljYXRpb24gKGhhbmRsZXMgc2lnbikgKi8KK2ludCBtcF9tdWwgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpCit7CisgIGludCAgICAgcmVzLCBuZWc7CisgIG5lZyA9IChhLT5zaWduID09IGItPnNpZ24pID8gTVBfWlBPUyA6IE1QX05FRzsKKworICAvKiB1c2UgVG9vbS1Db29rPyAqLworI2lmZGVmIEJOX01QX1RPT01fTVVMX0MKKyAgaWYgKE1JTiAoYS0+dXNlZCwgYi0+dXNlZCkgPj0gVE9PTV9NVUxfQ1VUT0ZGKSB7CisgICAgcmVzID0gbXBfdG9vbV9tdWwoYSwgYiwgYyk7CisgIH0gZWxzZSAKKyNlbmRpZgorI2lmZGVmIEJOX01QX0tBUkFUU1VCQV9NVUxfQworICAvKiB1c2UgS2FyYXRzdWJhPyAqLworICBpZiAoTUlOIChhLT51c2VkLCBiLT51c2VkKSA+PSBLQVJBVFNVQkFfTVVMX0NVVE9GRikgeworICAgIHJlcyA9IG1wX2thcmF0c3ViYV9tdWwgKGEsIGIsIGMpOworICB9IGVsc2UgCisjZW5kaWYKKyAgeworICAgIC8qIGNhbiB3ZSB1c2UgdGhlIGZhc3QgbXVsdGlwbGllcj8KKyAgICAgKgorICAgICAqIFRoZSBmYXN0IG11bHRpcGxpZXIgY2FuIGJlIHVzZWQgaWYgdGhlIG91dHB1dCB3aWxsIAorICAgICAqIGhhdmUgbGVzcyB0aGFuIE1QX1dBUlJBWSBkaWdpdHMgYW5kIHRoZSBudW1iZXIgb2YgCisgICAgICogZGlnaXRzIHdvbid0IGFmZmVjdCBjYXJyeSBwcm9wYWdhdGlvbgorICAgICAqLworICAgIGludCAgICAgZGlncyA9IGEtPnVzZWQgKyBiLT51c2VkICsgMTsKKworI2lmZGVmIEJOX0ZBU1RfU19NUF9NVUxfRElHU19DCisgICAgaWYgKChkaWdzIDwgTVBfV0FSUkFZKSAmJgorICAgICAgICBNSU4oYS0+dXNlZCwgYi0+dXNlZCkgPD0gCisgICAgICAgICgxIDw8ICgoQ0hBUl9CSVQgKiBzaXplb2YgKG1wX3dvcmQpKSAtICgyICogRElHSVRfQklUKSkpKSB7CisgICAgICByZXMgPSBmYXN0X3NfbXBfbXVsX2RpZ3MgKGEsIGIsIGMsIGRpZ3MpOworICAgIH0gZWxzZSAKKyNlbmRpZgorI2lmZGVmIEJOX1NfTVBfTVVMX0RJR1NfQworICAgICAgcmVzID0gc19tcF9tdWwgKGEsIGIsIGMpOyAvKiB1c2VzIHNfbXBfbXVsX2RpZ3MgKi8KKyNlbHNlCisgICAgICByZXMgPSBNUF9WQUw7CisjZW5kaWYKKworICB9CisgIGMtPnNpZ24gPSAoYy0+dXNlZCA+IDApID8gbmVnIDogTVBfWlBPUzsKKyAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX211bC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX211bC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9tdWxfMi5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX01VTF8yX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGIgPSBhKjIgKi8KK2ludCBtcF9tdWxfMihtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQoreworICBpbnQgICAgIHgsIHJlcywgb2xkdXNlZDsKKworICAvKiBncm93IHRvIGFjY29tb2RhdGUgcmVzdWx0ICovCisgIGlmIChiLT5hbGxvYyA8IGEtPnVzZWQgKyAxKSB7CisgICAgaWYgKChyZXMgPSBtcF9ncm93IChiLCBhLT51c2VkICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisKKyAgb2xkdXNlZCA9IGItPnVzZWQ7CisgIGItPnVzZWQgPSBhLT51c2VkOworCisgIHsKKyAgICByZWdpc3RlciBtcF9kaWdpdCByLCByciwgKnRtcGEsICp0bXBiOworCisgICAgLyogYWxpYXMgZm9yIHNvdXJjZSAqLworICAgIHRtcGEgPSBhLT5kcDsKKyAgICAKKyAgICAvKiBhbGlhcyBmb3IgZGVzdCAqLworICAgIHRtcGIgPSBiLT5kcDsKKworICAgIC8qIGNhcnJ5ICovCisgICAgciA9IDA7CisgICAgZm9yICh4ID0gMDsgeCA8IGEtPnVzZWQ7IHgrKykgeworICAgIAorICAgICAgLyogZ2V0IHdoYXQgd2lsbCBiZSB0aGUgKm5leHQqIGNhcnJ5IGJpdCBmcm9tIHRoZSAKKyAgICAgICAqIE1TQiBvZiB0aGUgY3VycmVudCBkaWdpdCAKKyAgICAgICAqLworICAgICAgcnIgPSAqdG1wYSA+PiAoKG1wX2RpZ2l0KShESUdJVF9CSVQgLSAxKSk7CisgICAgICAKKyAgICAgIC8qIG5vdyBzaGlmdCB1cCB0aGlzIGRpZ2l0LCBhZGQgaW4gdGhlIGNhcnJ5IFtmcm9tIHRoZSBwcmV2aW91c10gKi8KKyAgICAgICp0bXBiKysgPSAoKCp0bXBhKysgPDwgKChtcF9kaWdpdCkxKSkgfCByKSAmIE1QX01BU0s7CisgICAgICAKKyAgICAgIC8qIGNvcHkgdGhlIGNhcnJ5IHRoYXQgd291bGQgYmUgZnJvbSB0aGUgc291cmNlIAorICAgICAgICogZGlnaXQgaW50byB0aGUgbmV4dCBpdGVyYXRpb24gCisgICAgICAgKi8KKyAgICAgIHIgPSBycjsKKyAgICB9CisKKyAgICAvKiBuZXcgbGVhZGluZyBkaWdpdD8gKi8KKyAgICBpZiAociAhPSAwKSB7CisgICAgICAvKiBhZGQgYSBNU0Igd2hpY2ggaXMgYWx3YXlzIDEgYXQgdGhpcyBwb2ludCAqLworICAgICAgKnRtcGIgPSAxOworICAgICAgKysoYi0+dXNlZCk7CisgICAgfQorCisgICAgLyogbm93IHplcm8gYW55IGV4Y2VzcyBkaWdpdHMgb24gdGhlIGRlc3RpbmF0aW9uIAorICAgICAqIHRoYXQgd2UgZGlkbid0IHdyaXRlIHRvIAorICAgICAqLworICAgIHRtcGIgPSBiLT5kcCArIGItPnVzZWQ7CisgICAgZm9yICh4ID0gYi0+dXNlZDsgeCA8IG9sZHVzZWQ7IHgrKykgeworICAgICAgKnRtcGIrKyA9IDA7CisgICAgfQorICB9CisgIGItPnNpZ24gPSBhLT5zaWduOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX211bF8yLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfbXVsXzIuYyAqLworCisvKiBTdGFydDogYm5fbXBfbXVsXzJkLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfTVVMXzJEX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHNoaWZ0IGxlZnQgYnkgYSBjZXJ0YWluIGJpdCBjb3VudCAqLworaW50IG1wX211bF8yZCAobXBfaW50ICogYSwgaW50IGIsIG1wX2ludCAqIGMpCit7CisgIG1wX2RpZ2l0IGQ7CisgIGludCAgICAgIHJlczsKKworICAvKiBjb3B5ICovCisgIGlmIChhICE9IGMpIHsKKyAgICAgaWYgKChyZXMgPSBtcF9jb3B5IChhLCBjKSkgIT0gTVBfT0tBWSkgeworICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfQorCisgIGlmIChjLT5hbGxvYyA8IChpbnQpKGMtPnVzZWQgKyBiL0RJR0lUX0JJVCArIDEpKSB7CisgICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYywgYy0+dXNlZCArIGIgLyBESUdJVF9CSVQgKyAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfQorCisgIC8qIHNoaWZ0IGJ5IGFzIG1hbnkgZGlnaXRzIGluIHRoZSBiaXQgY291bnQgKi8KKyAgaWYgKGIgPj0gKGludClESUdJVF9CSVQpIHsKKyAgICBpZiAoKHJlcyA9IG1wX2xzaGQgKGMsIGIgLyBESUdJVF9CSVQpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgfQorCisgIC8qIHNoaWZ0IGFueSBiaXQgY291bnQgPCBESUdJVF9CSVQgKi8KKyAgZCA9IChtcF9kaWdpdCkgKGIgJSBESUdJVF9CSVQpOworICBpZiAoZCAhPSAwKSB7CisgICAgcmVnaXN0ZXIgbXBfZGlnaXQgKnRtcGMsIHNoaWZ0LCBtYXNrLCByLCBycjsKKyAgICByZWdpc3RlciBpbnQgeDsKKworICAgIC8qIGJpdG1hc2sgZm9yIGNhcnJpZXMgKi8KKyAgICBtYXNrID0gKCgobXBfZGlnaXQpMSkgPDwgZCkgLSAxOworCisgICAgLyogc2hpZnQgZm9yIG1zYnMgKi8KKyAgICBzaGlmdCA9IERJR0lUX0JJVCAtIGQ7CisKKyAgICAvKiBhbGlhcyAqLworICAgIHRtcGMgPSBjLT5kcDsKKworICAgIC8qIGNhcnJ5ICovCisgICAgciAgICA9IDA7CisgICAgZm9yICh4ID0gMDsgeCA8IGMtPnVzZWQ7IHgrKykgeworICAgICAgLyogZ2V0IHRoZSBoaWdoZXIgYml0cyBvZiB0aGUgY3VycmVudCB3b3JkICovCisgICAgICByciA9ICgqdG1wYyA+PiBzaGlmdCkgJiBtYXNrOworCisgICAgICAvKiBzaGlmdCB0aGUgY3VycmVudCB3b3JkIGFuZCBPUiBpbiB0aGUgY2FycnkgKi8KKyAgICAgICp0bXBjID0gKCgqdG1wYyA8PCBkKSB8IHIpICYgTVBfTUFTSzsKKyAgICAgICsrdG1wYzsKKworICAgICAgLyogc2V0IHRoZSBjYXJyeSB0byB0aGUgY2FycnkgYml0cyBvZiB0aGUgY3VycmVudCB3b3JkICovCisgICAgICByID0gcnI7CisgICAgfQorICAgIAorICAgIC8qIHNldCBmaW5hbCBjYXJyeSAqLworICAgIGlmIChyICE9IDApIHsKKyAgICAgICBjLT5kcFsoYy0+dXNlZCkrK10gPSByOworICAgIH0KKyAgfQorICBtcF9jbGFtcCAoYyk7CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfbXVsXzJkLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfbXVsXzJkLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX211bF9kLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfTVVMX0RfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogbXVsdGlwbHkgYnkgYSBkaWdpdCAqLworaW50CittcF9tdWxfZCAobXBfaW50ICogYSwgbXBfZGlnaXQgYiwgbXBfaW50ICogYykKK3sKKyAgbXBfZGlnaXQgdSwgKnRtcGEsICp0bXBjOworICBtcF93b3JkICByOworICBpbnQgICAgICBpeCwgcmVzLCBvbGR1c2U7CisKKyAgLyogbWFrZSBzdXJlIGMgaXMgYmlnIGVub3VnaCB0byBob2xkIGEqYiAqLworICBpZiAoYy0+YWxsb2MgPCBhLT51c2VkICsgMSkgeworICAgIGlmICgocmVzID0gbXBfZ3JvdyAoYywgYS0+dXNlZCArIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgfQorCisgIC8qIGdldCB0aGUgb3JpZ2luYWwgZGVzdGluYXRpb25zIHVzZWQgY291bnQgKi8KKyAgb2xkdXNlID0gYy0+dXNlZDsKKworICAvKiBzZXQgdGhlIHNpZ24gKi8KKyAgYy0+c2lnbiA9IGEtPnNpZ247CisKKyAgLyogYWxpYXMgZm9yIGEtPmRwIFtzb3VyY2VdICovCisgIHRtcGEgPSBhLT5kcDsKKworICAvKiBhbGlhcyBmb3IgYy0+ZHAgW2Rlc3RdICovCisgIHRtcGMgPSBjLT5kcDsKKworICAvKiB6ZXJvIGNhcnJ5ICovCisgIHUgPSAwOworCisgIC8qIGNvbXB1dGUgY29sdW1ucyAqLworICBmb3IgKGl4ID0gMDsgaXggPCBhLT51c2VkOyBpeCsrKSB7CisgICAgLyogY29tcHV0ZSBwcm9kdWN0IGFuZCBjYXJyeSBzdW0gZm9yIHRoaXMgdGVybSAqLworICAgIHIgICAgICAgPSAoKG1wX3dvcmQpIHUpICsgKChtcF93b3JkKSp0bXBhKyspICogKChtcF93b3JkKWIpOworCisgICAgLyogbWFzayBvZmYgaGlnaGVyIGJpdHMgdG8gZ2V0IGEgc2luZ2xlIGRpZ2l0ICovCisgICAgKnRtcGMrKyA9IChtcF9kaWdpdCkgKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKKworICAgIC8qIHNlbmQgY2FycnkgaW50byBuZXh0IGl0ZXJhdGlvbiAqLworICAgIHUgICAgICAgPSAobXBfZGlnaXQpIChyID4+ICgobXBfd29yZCkgRElHSVRfQklUKSk7CisgIH0KKworICAvKiBzdG9yZSBmaW5hbCBjYXJyeSBbaWYgYW55XSBhbmQgaW5jcmVtZW50IGl4IG9mZnNldCAgKi8KKyAgKnRtcGMrKyA9IHU7CisgICsraXg7CisKKyAgLyogbm93IHplcm8gZGlnaXRzIGFib3ZlIHRoZSB0b3AgKi8KKyAgd2hpbGUgKGl4KysgPCBvbGR1c2UpIHsKKyAgICAgKnRtcGMrKyA9IDA7CisgIH0KKworICAvKiBzZXQgdXNlZCBjb3VudCAqLworICBjLT51c2VkID0gYS0+dXNlZCArIDE7CisgIG1wX2NsYW1wKGMpOworCisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfbXVsX2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9tdWxfZC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9tdWxtb2QuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9NVUxNT0RfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZCA9IGEgKiBiIChtb2QgYykgKi8KK2ludCBtcF9tdWxtb2QgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIG1wX2ludCAqIGQpCit7CisgIGludCAgICAgcmVzOworICBtcF9pbnQgIHQ7CisKKyAgaWYgKChyZXMgPSBtcF9pbml0ICgmdCkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9tdWwgKGEsIGIsICZ0KSkgIT0gTVBfT0tBWSkgeworICAgIG1wX2NsZWFyICgmdCk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorICByZXMgPSBtcF9tb2QgKCZ0LCBjLCBkKTsKKyAgbXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX211bG1vZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX211bG1vZC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9uX3Jvb3QuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9OX1JPT1RfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZmluZCB0aGUgbid0aCByb290IG9mIGFuIGludGVnZXIgCisgKgorICogUmVzdWx0IGZvdW5kIHN1Y2ggdGhhdCAoYykqKmIgPD0gYSBhbmQgKGMrMSkqKmIgPiBhIAorICoKKyAqIFRoaXMgYWxnb3JpdGhtIHVzZXMgTmV3dG9uJ3MgYXBwcm94aW1hdGlvbiAKKyAqIHhbaSsxXSA9IHhbaV0gLSBmKHhbaV0pL2YnKHhbaV0pIAorICogd2hpY2ggd2lsbCBmaW5kIHRoZSByb290IGluIGxvZyhOKSB0aW1lIHdoZXJlIAorICogZWFjaCBzdGVwIGludm9sdmVzIGEgZmFpciBiaXQuICBUaGlzIGlzIG5vdCBtZWFudCB0byAKKyAqIGZpbmQgaHVnZSByb290cyBbc3F1YXJlIGFuZCBjdWJlLCBldGNdLgorICovCitpbnQgbXBfbl9yb290IChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiLCBtcF9pbnQgKiBjKQoreworICBtcF9pbnQgIHQxLCB0MiwgdDM7CisgIGludCAgICAgcmVzLCBuZWc7CisKKyAgLyogaW5wdXQgbXVzdCBiZSBwb3NpdGl2ZSBpZiBiIGlzIGV2ZW4gKi8KKyAgaWYgKChiICYgMSkgPT0gMCAmJiBhLT5zaWduID09IE1QX05FRykgeworICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ0MSkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9pbml0ICgmdDIpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfVDE7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXQgKCZ0MykpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9UMjsKKyAgfQorCisgIC8qIGlmIGEgaXMgbmVnYXRpdmUgZnVkZ2UgdGhlIHNpZ24gYnV0IGtlZXAgdHJhY2sgKi8KKyAgbmVnICAgICA9IGEtPnNpZ247CisgIGEtPnNpZ24gPSBNUF9aUE9TOworCisgIC8qIHQyID0gMiAqLworICBtcF9zZXQgKCZ0MiwgMik7CisKKyAgZG8geworICAgIC8qIHQxID0gdDIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2NvcHkgKCZ0MiwgJnQxKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfVDM7CisgICAgfQorCisgICAgLyogdDIgPSB0MSAtICgodDEqKmIgLSBhKSAvIChiICogdDEqKihiLTEpKSkgKi8KKyAgICAKKyAgICAvKiB0MyA9IHQxKiooYi0xKSAqLworICAgIGlmICgocmVzID0gbXBfZXhwdF9kICgmdDEsIGIgLSAxLCAmdDMpKSAhPSBNUF9PS0FZKSB7ICAgCisgICAgICBnb3RvIExCTF9UMzsKKyAgICB9CisKKyAgICAvKiBudW1lcmF0b3IgKi8KKyAgICAvKiB0MiA9IHQxKipiICovCisgICAgaWYgKChyZXMgPSBtcF9tdWwgKCZ0MywgJnQxLCAmdDIpKSAhPSBNUF9PS0FZKSB7ICAgIAorICAgICAgZ290byBMQkxfVDM7CisgICAgfQorCisgICAgLyogdDIgPSB0MSoqYiAtIGEgKi8KKyAgICBpZiAoKHJlcyA9IG1wX3N1YiAoJnQyLCBhLCAmdDIpKSAhPSBNUF9PS0FZKSB7ICAKKyAgICAgIGdvdG8gTEJMX1QzOworICAgIH0KKworICAgIC8qIGRlbm9taW5hdG9yICovCisgICAgLyogdDMgPSB0MSoqKGItMSkgKiBiICAqLworICAgIGlmICgocmVzID0gbXBfbXVsX2QgKCZ0MywgYiwgJnQzKSkgIT0gTVBfT0tBWSkgeyAgICAKKyAgICAgIGdvdG8gTEJMX1QzOworICAgIH0KKworICAgIC8qIHQzID0gKHQxKipiIC0gYSkvKGIgKiB0MSoqKGItMSkpICovCisgICAgaWYgKChyZXMgPSBtcF9kaXYgKCZ0MiwgJnQzLCAmdDMsIE5VTEwpKSAhPSBNUF9PS0FZKSB7ICAKKyAgICAgIGdvdG8gTEJMX1QzOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfc3ViICgmdDEsICZ0MywgJnQyKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfVDM7CisgICAgfQorICB9ICB3aGlsZSAobXBfY21wICgmdDEsICZ0MikgIT0gTVBfRVEpOworCisgIC8qIHJlc3VsdCBjYW4gYmUgb2ZmIGJ5IGEgZmV3IHNvIGNoZWNrICovCisgIGZvciAoOzspIHsKKyAgICBpZiAoKHJlcyA9IG1wX2V4cHRfZCAoJnQxLCBiLCAmdDIpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9UMzsKKyAgICB9CisKKyAgICBpZiAobXBfY21wICgmdDIsIGEpID09IE1QX0dUKSB7CisgICAgICBpZiAoKHJlcyA9IG1wX3N1Yl9kICgmdDEsIDEsICZ0MSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgIGdvdG8gTEJMX1QzOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICAvKiByZXNldCB0aGUgc2lnbiBvZiBhIGZpcnN0ICovCisgIGEtPnNpZ24gPSBuZWc7CisKKyAgLyogc2V0IHRoZSByZXN1bHQgKi8KKyAgbXBfZXhjaCAoJnQxLCBjKTsKKworICAvKiBzZXQgdGhlIHNpZ24gb2YgdGhlIHJlc3VsdCAqLworICBjLT5zaWduID0gbmVnOworCisgIHJlcyA9IE1QX09LQVk7CisKK0xCTF9UMzptcF9jbGVhciAoJnQzKTsKK0xCTF9UMjptcF9jbGVhciAoJnQyKTsKK0xCTF9UMTptcF9jbGVhciAoJnQxKTsKKyAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX25fcm9vdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX25fcm9vdC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9uZWcuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9ORUdfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogYiA9IC1hICovCitpbnQgbXBfbmVnIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQoreworICBpbnQgICAgIHJlczsKKyAgaWYgKGEgIT0gYikgeworICAgICBpZiAoKHJlcyA9IG1wX2NvcHkgKGEsIGIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfQorCisgIGlmIChtcF9pc3plcm8oYikgIT0gTVBfWUVTKSB7CisgICAgIGItPnNpZ24gPSAoYS0+c2lnbiA9PSBNUF9aUE9TKSA/IE1QX05FRyA6IE1QX1pQT1M7CisgIH0gZWxzZSB7CisgICAgIGItPnNpZ24gPSBNUF9aUE9TOworICB9CisKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9uZWcuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9uZWcuYyAqLworCisvKiBTdGFydDogYm5fbXBfb3IuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9PUl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBPUiB0d28gaW50cyB0b2dldGhlciAqLworaW50IG1wX29yIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBpbnQgICAgIHJlcywgaXgsIHB4OworICBtcF9pbnQgIHQsICp4OworCisgIGlmIChhLT51c2VkID4gYi0+dXNlZCkgeworICAgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmdCwgYSkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHB4ID0gYi0+dXNlZDsKKyAgICB4ID0gYjsKKyAgfSBlbHNlIHsKKyAgICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnQsIGIpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBweCA9IGEtPnVzZWQ7CisgICAgeCA9IGE7CisgIH0KKworICBmb3IgKGl4ID0gMDsgaXggPCBweDsgaXgrKykgeworICAgIHQuZHBbaXhdIHw9IHgtPmRwW2l4XTsKKyAgfQorICBtcF9jbGFtcCAoJnQpOworICBtcF9leGNoIChjLCAmdCk7CisgIG1wX2NsZWFyICgmdCk7CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfb3IuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9vci5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9wcmltZV9mZXJtYXQuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9QUklNRV9GRVJNQVRfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogcGVyZm9ybXMgb25lIEZlcm1hdCB0ZXN0LgorICogCisgKiBJZiAiYSIgd2VyZSBwcmltZSB0aGVuIGIqKmEgPT0gYiAobW9kIGEpIHNpbmNlIHRoZSBvcmRlciBvZgorICogdGhlIG11bHRpcGxpY2F0aXZlIHN1Yi1ncm91cCB3b3VsZCBiZSBwaGkoYSkgPSBhLTEuICBUaGF0IG1lYW5zCisgKiBpdCB3b3VsZCBiZSB0aGUgc2FtZSBhcyBiKiooYSBtb2QgKGEtMSkpID09IGIqKjEgPT0gYiAobW9kIGEpLgorICoKKyAqIFNldHMgcmVzdWx0IHRvIDEgaWYgdGhlIGNvbmdydWVuY2UgaG9sZHMsIG9yIHplcm8gb3RoZXJ3aXNlLgorICovCitpbnQgbXBfcHJpbWVfZmVybWF0IChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBpbnQgKnJlc3VsdCkKK3sKKyAgbXBfaW50ICB0OworICBpbnQgICAgIGVycjsKKworICAvKiBkZWZhdWx0IHRvIGNvbXBvc2l0ZSAgKi8KKyAgKnJlc3VsdCA9IE1QX05POworCisgIC8qIGVuc3VyZSBiID4gMSAqLworICBpZiAobXBfY21wX2QoYiwgMSkgIT0gTVBfR1QpIHsKKyAgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIGluaXQgdCAqLworICBpZiAoKGVyciA9IG1wX2luaXQgKCZ0KSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiBlcnI7CisgIH0KKworICAvKiBjb21wdXRlIHQgPSBiKiphIG1vZCBhICovCisgIGlmICgoZXJyID0gbXBfZXhwdG1vZCAoYiwgYSwgYSwgJnQpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfVDsKKyAgfQorCisgIC8qIGlzIGl0IGVxdWFsIHRvIGI/ICovCisgIGlmIChtcF9jbXAgKCZ0LCBiKSA9PSBNUF9FUSkgeworICAgICpyZXN1bHQgPSBNUF9ZRVM7CisgIH0KKworICBlcnIgPSBNUF9PS0FZOworTEJMX1Q6bXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3ByaW1lX2Zlcm1hdC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3ByaW1lX2Zlcm1hdC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9wcmltZV9pc19kaXZpc2libGUuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9QUklNRV9JU19ESVZJU0lCTEVfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZGV0ZXJtaW5lcyBpZiBhbiBpbnRlZ2VycyBpcyBkaXZpc2libGUgYnkgb25lIAorICogb2YgdGhlIGZpcnN0IFBSSU1FX1NJWkUgcHJpbWVzIG9yIG5vdAorICoKKyAqIHNldHMgcmVzdWx0IHRvIDAgaWYgbm90LCAxIGlmIHllcworICovCitpbnQgbXBfcHJpbWVfaXNfZGl2aXNpYmxlIChtcF9pbnQgKiBhLCBpbnQgKnJlc3VsdCkKK3sKKyAgaW50ICAgICBlcnIsIGl4OworICBtcF9kaWdpdCByZXM7CisKKyAgLyogZGVmYXVsdCB0byBub3QgKi8KKyAgKnJlc3VsdCA9IE1QX05POworCisgIGZvciAoaXggPSAwOyBpeCA8IFBSSU1FX1NJWkU7IGl4KyspIHsKKyAgICAvKiB3aGF0IGlzIGEgbW9kIExCTF9wcmltZV90YWJbaXhdICovCisgICAgaWYgKChlcnIgPSBtcF9tb2RfZCAoYSwgbHRtX3ByaW1lX3RhYltpeF0sICZyZXMpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gZXJyOworICAgIH0KKworICAgIC8qIGlzIHRoZSByZXNpZHVlIHplcm8/ICovCisgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAqcmVzdWx0ID0gTVBfWUVTOworICAgICAgcmV0dXJuIE1QX09LQVk7CisgICAgfQorICB9CisKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9wcmltZV9pc19kaXZpc2libGUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9wcmltZV9pc19kaXZpc2libGUuYyAqLworCisvKiBTdGFydDogYm5fbXBfcHJpbWVfaXNfcHJpbWUuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9QUklNRV9JU19QUklNRV9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBwZXJmb3JtcyBhIHZhcmlhYmxlIG51bWJlciBvZiByb3VuZHMgb2YgTWlsbGVyLVJhYmluCisgKgorICogUHJvYmFiaWxpdHkgb2YgZXJyb3IgYWZ0ZXIgdCByb3VuZHMgaXMgbm8gbW9yZSB0aGFuCisKKyAqCisgKiBTZXRzIHJlc3VsdCB0byAxIGlmIHByb2JhYmx5IHByaW1lLCAwIG90aGVyd2lzZQorICovCitpbnQgbXBfcHJpbWVfaXNfcHJpbWUgKG1wX2ludCAqIGEsIGludCB0LCBpbnQgKnJlc3VsdCkKK3sKKyAgbXBfaW50ICBiOworICBpbnQgICAgIGl4LCBlcnIsIHJlczsKKworICAvKiBkZWZhdWx0IHRvIG5vICovCisgICpyZXN1bHQgPSBNUF9OTzsKKworICAvKiB2YWxpZCB2YWx1ZSBvZiB0PyAqLworICBpZiAodCA8PSAwIHx8IHQgPiBQUklNRV9TSVpFKSB7CisgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIGlzIHRoZSBpbnB1dCBlcXVhbCB0byBvbmUgb2YgdGhlIHByaW1lcyBpbiB0aGUgdGFibGU/ICovCisgIGZvciAoaXggPSAwOyBpeCA8IFBSSU1FX1NJWkU7IGl4KyspIHsKKyAgICAgIGlmIChtcF9jbXBfZChhLCBsdG1fcHJpbWVfdGFiW2l4XSkgPT0gTVBfRVEpIHsKKyAgICAgICAgICpyZXN1bHQgPSAxOworICAgICAgICAgcmV0dXJuIE1QX09LQVk7CisgICAgICB9CisgIH0KKworICAvKiBmaXJzdCBwZXJmb3JtIHRyaWFsIGRpdmlzaW9uICovCisgIGlmICgoZXJyID0gbXBfcHJpbWVfaXNfZGl2aXNpYmxlIChhLCAmcmVzKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiBlcnI7CisgIH0KKworICAvKiByZXR1cm4gaWYgaXQgd2FzIHRyaXZpYWxseSBkaXZpc2libGUgKi8KKyAgaWYgKHJlcyA9PSBNUF9ZRVMpIHsKKyAgICByZXR1cm4gTVBfT0tBWTsKKyAgfQorCisgIC8qIG5vdyBwZXJmb3JtIHRoZSBtaWxsZXItcmFiaW4gcm91bmRzICovCisgIGlmICgoZXJyID0gbXBfaW5pdCAoJmIpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIGVycjsKKyAgfQorCisgIGZvciAoaXggPSAwOyBpeCA8IHQ7IGl4KyspIHsKKyAgICAvKiBzZXQgdGhlIHByaW1lICovCisgICAgbXBfc2V0ICgmYiwgbHRtX3ByaW1lX3RhYltpeF0pOworCisgICAgaWYgKChlcnIgPSBtcF9wcmltZV9taWxsZXJfcmFiaW4gKGEsICZiLCAmcmVzKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfQjsKKyAgICB9CisKKyAgICBpZiAocmVzID09IE1QX05PKSB7CisgICAgICBnb3RvIExCTF9COworICAgIH0KKyAgfQorCisgIC8qIHBhc3NlZCB0aGUgdGVzdCAqLworICAqcmVzdWx0ID0gTVBfWUVTOworTEJMX0I6bXBfY2xlYXIgKCZiKTsKKyAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3ByaW1lX2lzX3ByaW1lLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfcHJpbWVfaXNfcHJpbWUuYyAqLworCisvKiBTdGFydDogYm5fbXBfcHJpbWVfbWlsbGVyX3JhYmluLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfUFJJTUVfTUlMTEVSX1JBQklOX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIE1pbGxlci1SYWJpbiB0ZXN0IG9mICJhIiB0byB0aGUgYmFzZSBvZiAiYiIgYXMgZGVzY3JpYmVkIGluIAorICogSEFDIHBwLiAxMzkgQWxnb3JpdGhtIDQuMjQKKyAqCisgKiBTZXRzIHJlc3VsdCB0byAwIGlmIGRlZmluaXRlbHkgY29tcG9zaXRlIG9yIDEgaWYgcHJvYmFibHkgcHJpbWUuCisgKiBSYW5kb21seSB0aGUgY2hhbmNlIG9mIGVycm9yIGlzIG5vIG1vcmUgdGhhbiAxLzQgYW5kIG9mdGVuIAorICogdmVyeSBtdWNoIGxvd2VyLgorICovCitpbnQgbXBfcHJpbWVfbWlsbGVyX3JhYmluIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBpbnQgKnJlc3VsdCkKK3sKKyAgbXBfaW50ICBuMSwgeSwgcjsKKyAgaW50ICAgICBzLCBqLCBlcnI7CisKKyAgLyogZGVmYXVsdCAqLworICAqcmVzdWx0ID0gTVBfTk87CisKKyAgLyogZW5zdXJlIGIgPiAxICovCisgIGlmIChtcF9jbXBfZChiLCAxKSAhPSBNUF9HVCkgeworICAgICByZXR1cm4gTVBfVkFMOworICB9ICAgICAKKworICAvKiBnZXQgbjEgPSBhIC0gMSAqLworICBpZiAoKGVyciA9IG1wX2luaXRfY29weSAoJm4xLCBhKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiBlcnI7CisgIH0KKyAgaWYgKChlcnIgPSBtcF9zdWJfZCAoJm4xLCAxLCAmbjEpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfTjE7CisgIH0KKworICAvKiBzZXQgMioqcyAqIHIgPSBuMSAqLworICBpZiAoKGVyciA9IG1wX2luaXRfY29weSAoJnIsICZuMSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9OMTsKKyAgfQorCisgIC8qIGNvdW50IHRoZSBudW1iZXIgb2YgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cworICAgKiB3aGljaCBhcmUgemVybworICAgKi8KKyAgcyA9IG1wX2NudF9sc2IoJnIpOworCisgIC8qIG5vdyBkaXZpZGUgbiAtIDEgYnkgMioqcyAqLworICBpZiAoKGVyciA9IG1wX2Rpdl8yZCAoJnIsIHMsICZyLCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX1I7CisgIH0KKworICAvKiBjb21wdXRlIHkgPSBiKipyIG1vZCBhICovCisgIGlmICgoZXJyID0gbXBfaW5pdCAoJnkpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBMQkxfUjsKKyAgfQorICBpZiAoKGVyciA9IG1wX2V4cHRtb2QgKGIsICZyLCBhLCAmeSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9ZOworICB9CisKKyAgLyogaWYgeSAhPSAxIGFuZCB5ICE9IG4xIGRvICovCisgIGlmIChtcF9jbXBfZCAoJnksIDEpICE9IE1QX0VRICYmIG1wX2NtcCAoJnksICZuMSkgIT0gTVBfRVEpIHsKKyAgICBqID0gMTsKKyAgICAvKiB3aGlsZSBqIDw9IHMtMSBhbmQgeSAhPSBuMSAqLworICAgIHdoaWxlICgoaiA8PSAocyAtIDEpKSAmJiBtcF9jbXAgKCZ5LCAmbjEpICE9IE1QX0VRKSB7CisgICAgICBpZiAoKGVyciA9IG1wX3Nxcm1vZCAoJnksIGEsICZ5KSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgZ290byBMQkxfWTsKKyAgICAgIH0KKworICAgICAgLyogaWYgeSA9PSAxIHRoZW4gY29tcG9zaXRlICovCisgICAgICBpZiAobXBfY21wX2QgKCZ5LCAxKSA9PSBNUF9FUSkgeworICAgICAgICAgZ290byBMQkxfWTsKKyAgICAgIH0KKworICAgICAgKytqOworICAgIH0KKworICAgIC8qIGlmIHkgIT0gbjEgdGhlbiBjb21wb3NpdGUgKi8KKyAgICBpZiAobXBfY21wICgmeSwgJm4xKSAhPSBNUF9FUSkgeworICAgICAgZ290byBMQkxfWTsKKyAgICB9CisgIH0KKworICAvKiBwcm9iYWJseSBwcmltZSBub3cgKi8KKyAgKnJlc3VsdCA9IE1QX1lFUzsKK0xCTF9ZOm1wX2NsZWFyICgmeSk7CitMQkxfUjptcF9jbGVhciAoJnIpOworTEJMX04xOm1wX2NsZWFyICgmbjEpOworICByZXR1cm4gZXJyOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfbWlsbGVyX3JhYmluLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfcHJpbWVfbWlsbGVyX3JhYmluLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3ByaW1lX25leHRfcHJpbWUuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9QUklNRV9ORVhUX1BSSU1FX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGZpbmRzIHRoZSBuZXh0IHByaW1lIGFmdGVyIHRoZSBudW1iZXIgImEiIHVzaW5nICJ0IiB0cmlhbHMKKyAqIG9mIE1pbGxlci1SYWJpbi4KKyAqCisgKiBiYnNfc3R5bGUgPSAxIG1lYW5zIHRoZSBwcmltZSBtdXN0IGJlIGNvbmdydWVudCB0byAzIG1vZCA0CisgKi8KK2ludCBtcF9wcmltZV9uZXh0X3ByaW1lKG1wX2ludCAqYSwgaW50IHQsIGludCBiYnNfc3R5bGUpCit7CisgICBpbnQgICAgICBlcnIsIHJlcywgeCwgeTsKKyAgIG1wX2RpZ2l0IHJlc190YWJbUFJJTUVfU0laRV0sIHN0ZXAsIGtzdGVwOworICAgbXBfaW50ICAgYjsKKworICAgLyogZW5zdXJlIHQgaXMgdmFsaWQgKi8KKyAgIGlmICh0IDw9IDAgfHwgdCA+IFBSSU1FX1NJWkUpIHsKKyAgICAgIHJldHVybiBNUF9WQUw7CisgICB9CisKKyAgIC8qIGZvcmNlIHBvc2l0aXZlICovCisgICBhLT5zaWduID0gTVBfWlBPUzsKKworICAgLyogc2ltcGxlIGFsZ28gaWYgYSBpcyBsZXNzIHRoYW4gdGhlIGxhcmdlc3QgcHJpbWUgaW4gdGhlIHRhYmxlICovCisgICBpZiAobXBfY21wX2QoYSwgbHRtX3ByaW1lX3RhYltQUklNRV9TSVpFLTFdKSA9PSBNUF9MVCkgeworICAgICAgLyogZmluZCB3aGljaCBwcmltZSBpdCBpcyBiaWdnZXIgdGhhbiAqLworICAgICAgZm9yICh4ID0gUFJJTUVfU0laRSAtIDI7IHggPj0gMDsgeC0tKSB7CisgICAgICAgICAgaWYgKG1wX2NtcF9kKGEsIGx0bV9wcmltZV90YWJbeF0pICE9IE1QX0xUKSB7CisgICAgICAgICAgICAgaWYgKGJic19zdHlsZSA9PSAxKSB7CisgICAgICAgICAgICAgICAgLyogb2sgd2UgZm91bmQgYSBwcmltZSBzbWFsbGVyIG9yCisgICAgICAgICAgICAgICAgICogZXF1YWwgW3NvIHRoZSBuZXh0IGlzIGxhcmdlcl0KKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAqIGhvd2V2ZXIsIHRoZSBwcmltZSBtdXN0IGJlCisgICAgICAgICAgICAgICAgICogY29uZ3J1ZW50IHRvIDMgbW9kIDQKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoKGx0bV9wcmltZV90YWJbeCArIDFdICYgMykgIT0gMykgeworICAgICAgICAgICAgICAgICAgIC8qIHNjYW4gdXB3YXJkcyBmb3IgYSBwcmltZSBjb25ncnVlbnQgdG8gMyBtb2QgNCAqLworICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IHggKyAxOyB5IDwgUFJJTUVfU0laRTsgeSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgIGlmICgobHRtX3ByaW1lX3RhYlt5XSAmIDMpID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbXBfc2V0KGEsIGx0bV9wcmltZV90YWJbeV0pOworICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTVBfT0tBWTsKKyAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtcF9zZXQoYSwgbHRtX3ByaW1lX3RhYlt4ICsgMV0pOworICAgICAgICAgICAgICAgIHJldHVybiBNUF9PS0FZOworICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICB9CisgICAgICAvKiBhdCB0aGlzIHBvaW50IGEgbWF5YmUgMSAqLworICAgICAgaWYgKG1wX2NtcF9kKGEsIDEpID09IE1QX0VRKSB7CisgICAgICAgICBtcF9zZXQoYSwgMik7CisgICAgICAgICByZXR1cm4gTVBfT0tBWTsKKyAgICAgIH0KKyAgICAgIC8qIGZhbGwgdGhyb3VnaCB0byB0aGUgc2lldmUgKi8KKyAgIH0KKworICAgLyogZ2VuZXJhdGUgYSBwcmltZSBjb25ncnVlbnQgdG8gMyBtb2QgNCBvciAxLzMgbW9kIDQ/ICovCisgICBpZiAoYmJzX3N0eWxlID09IDEpIHsKKyAgICAgIGtzdGVwICAgPSA0OworICAgfSBlbHNlIHsKKyAgICAgIGtzdGVwICAgPSAyOworICAgfQorCisgICAvKiBhdCB0aGlzIHBvaW50IHdlIHdpbGwgdXNlIGEgY29tYmluYXRpb24gb2YgYSBzaWV2ZSBhbmQgTWlsbGVyLVJhYmluICovCisKKyAgIGlmIChiYnNfc3R5bGUgPT0gMSkgeworICAgICAgLyogaWYgYSBtb2QgNCAhPSAzIHN1YnRyYWN0IHRoZSBjb3JyZWN0IHZhbHVlIHRvIG1ha2UgaXQgc28gKi8KKyAgICAgIGlmICgoYS0+ZHBbMF0gJiAzKSAhPSAzKSB7CisgICAgICAgICBpZiAoKGVyciA9IG1wX3N1Yl9kKGEsIChhLT5kcFswXSAmIDMpICsgMSwgYSkpICE9IE1QX09LQVkpIHsgcmV0dXJuIGVycjsgfTsKKyAgICAgIH0KKyAgIH0gZWxzZSB7CisgICAgICBpZiAobXBfaXNldmVuKGEpID09IDEpIHsKKyAgICAgICAgIC8qIGZvcmNlIG9kZCAqLworICAgICAgICAgaWYgKChlcnIgPSBtcF9zdWJfZChhLCAxLCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKworICAgLyogZ2VuZXJhdGUgdGhlIHJlc3RhYmxlICovCisgICBmb3IgKHggPSAxOyB4IDwgUFJJTUVfU0laRTsgeCsrKSB7CisgICAgICBpZiAoKGVyciA9IG1wX21vZF9kKGEsIGx0bV9wcmltZV90YWJbeF0sIHJlc190YWIgKyB4KSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAgIH0KKyAgIH0KKworICAgLyogaW5pdCB0ZW1wIHVzZWQgZm9yIE1pbGxlci1SYWJpbiBUZXN0aW5nICovCisgICBpZiAoKGVyciA9IG1wX2luaXQoJmIpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gZXJyOworICAgfQorCisgICBmb3IgKDs7KSB7CisgICAgICAvKiBza2lwIHRvIHRoZSBuZXh0IG5vbi10cml2aWFsbHkgZGl2aXNpYmxlIGNhbmRpZGF0ZSAqLworICAgICAgc3RlcCA9IDA7CisgICAgICBkbyB7CisgICAgICAgICAvKiB5ID09IDEgaWYgYW55IHJlc2lkdWUgd2FzIHplcm8gW2UuZy4gY2Fubm90IGJlIHByaW1lXSAqLworICAgICAgICAgeSAgICAgPSAgMDsKKworICAgICAgICAgLyogaW5jcmVhc2Ugc3RlcCB0byBuZXh0IGNhbmRpZGF0ZSAqLworICAgICAgICAgc3RlcCArPSBrc3RlcDsKKworICAgICAgICAgLyogY29tcHV0ZSB0aGUgbmV3IHJlc2lkdWUgd2l0aG91dCB1c2luZyBkaXZpc2lvbiAqLworICAgICAgICAgZm9yICh4ID0gMTsgeCA8IFBSSU1FX1NJWkU7IHgrKykgeworICAgICAgICAgICAgIC8qIGFkZCB0aGUgc3RlcCB0byBlYWNoIHJlc2lkdWUgKi8KKyAgICAgICAgICAgICByZXNfdGFiW3hdICs9IGtzdGVwOworCisgICAgICAgICAgICAgLyogc3VidHJhY3QgdGhlIG1vZHVsdXMgW2luc3RlYWQgb2YgdXNpbmcgZGl2aXNpb25dICovCisgICAgICAgICAgICAgaWYgKHJlc190YWJbeF0gPj0gbHRtX3ByaW1lX3RhYlt4XSkgeworICAgICAgICAgICAgICAgIHJlc190YWJbeF0gIC09IGx0bV9wcmltZV90YWJbeF07CisgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgLyogc2V0IGZsYWcgaWYgemVybyAqLworICAgICAgICAgICAgIGlmIChyZXNfdGFiW3hdID09IDApIHsKKyAgICAgICAgICAgICAgICB5ID0gMTsKKyAgICAgICAgICAgICB9CisgICAgICAgICB9CisgICAgICB9IHdoaWxlICh5ID09IDEgJiYgc3RlcCA8ICgoKChtcF9kaWdpdCkxKTw8RElHSVRfQklUKSAtIGtzdGVwKSk7CisKKyAgICAgIC8qIGFkZCB0aGUgc3RlcCAqLworICAgICAgaWYgKChlcnIgPSBtcF9hZGRfZChhLCBzdGVwLCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgfQorCisgICAgICAvKiBpZiBkaWRuJ3QgcGFzcyBzaWV2ZSBhbmQgc3RlcCA9PSBNQVggdGhlbiBza2lwIHRlc3QgKi8KKyAgICAgIGlmICh5ID09IDEgJiYgc3RlcCA+PSAoKCgobXBfZGlnaXQpMSk8PERJR0lUX0JJVCkgLSBrc3RlcCkpIHsKKyAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICAvKiBpcyB0aGlzIHByaW1lPyAqLworICAgICAgZm9yICh4ID0gMDsgeCA8IHQ7IHgrKykgeworICAgICAgICAgIG1wX3NldCgmYiwgbHRtX3ByaW1lX3RhYlt0XSk7CisgICAgICAgICAgaWYgKChlcnIgPSBtcF9wcmltZV9taWxsZXJfcmFiaW4oYSwgJmIsICZyZXMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICAgICAgZ290byBMQkxfRVJSOworICAgICAgICAgIH0KKyAgICAgICAgICBpZiAocmVzID09IE1QX05PKSB7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgfQorCisgICAgICBpZiAocmVzID09IE1QX1lFUykgeworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICB9CisKKyAgIGVyciA9IE1QX09LQVk7CitMQkxfRVJSOgorICAgbXBfY2xlYXIoJmIpOworICAgcmV0dXJuIGVycjsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfbmV4dF9wcmltZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3ByaW1lX25leHRfcHJpbWUuYyAqLworCisvKiBTdGFydDogYm5fbXBfcHJpbWVfcmFiaW5fbWlsbGVyX3RyaWFscy5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1BSSU1FX1JBQklOX01JTExFUl9UUklBTFNfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKyAgIGludCBrLCB0OworfSBzaXplc1tdID0geworeyAgIDEyOCwgICAgMjggfSwKK3sgICAyNTYsICAgIDE2IH0sCit7ICAgMzg0LCAgICAxMCB9LAoreyAgIDUxMiwgICAgIDcgfSwKK3sgICA2NDAsICAgICA2IH0sCit7ICAgNzY4LCAgICAgNSB9LAoreyAgIDg5NiwgICAgIDQgfSwKK3sgIDEwMjQsICAgICA0IH0KK307CisKKy8qIHJldHVybnMgIyBvZiBSTSB0cmlhbHMgcmVxdWlyZWQgZm9yIGEgZ2l2ZW4gYml0IHNpemUgKi8KK2ludCBtcF9wcmltZV9yYWJpbl9taWxsZXJfdHJpYWxzKGludCBzaXplKQoreworICAgaW50IHg7CisKKyAgIGZvciAoeCA9IDA7IHggPCAoaW50KShzaXplb2Yoc2l6ZXMpLyhzaXplb2Yoc2l6ZXNbMF0pKSk7IHgrKykgeworICAgICAgIGlmIChzaXplc1t4XS5rID09IHNpemUpIHsKKyAgICAgICAgICByZXR1cm4gc2l6ZXNbeF0udDsKKyAgICAgICB9IGVsc2UgaWYgKHNpemVzW3hdLmsgPiBzaXplKSB7CisgICAgICAgICAgcmV0dXJuICh4ID09IDApID8gc2l6ZXNbMF0udCA6IHNpemVzW3ggLSAxXS50OworICAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBzaXplc1t4LTFdLnQgKyAxOworfQorCisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3ByaW1lX3JhYmluX21pbGxlcl90cmlhbHMuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9wcmltZV9yYWJpbl9taWxsZXJfdHJpYWxzLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3ByaW1lX3JhbmRvbV9leC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1BSSU1FX1JBTkRPTV9FWF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBtYWtlcyBhIHRydWx5IHJhbmRvbSBwcmltZSBvZiBhIGdpdmVuIHNpemUgKGJpdHMpLAorICoKKyAqIEZsYWdzIGFyZSBhcyBmb2xsb3dzOgorICogCisgKiAgIExUTV9QUklNRV9CQlMgICAgICAtIG1ha2UgcHJpbWUgY29uZ3J1ZW50IHRvIDMgbW9kIDQKKyAqICAgTFRNX1BSSU1FX1NBRkUgICAgIC0gbWFrZSBzdXJlIChwLTEpLzIgaXMgcHJpbWUgYXMgd2VsbCAoaW1wbGllcyBMVE1fUFJJTUVfQkJTKQorICogICBMVE1fUFJJTUVfMk1TQl9PRkYgLSBtYWtlIHRoZSAybmQgaGlnaGVzdCBiaXQgemVybworICogICBMVE1fUFJJTUVfMk1TQl9PTiAgLSBtYWtlIHRoZSAybmQgaGlnaGVzdCBiaXQgb25lCisgKgorICogWW91IGhhdmUgdG8gc3VwcGx5IGEgY2FsbGJhY2sgd2hpY2ggZmlsbHMgaW4gYSBidWZmZXIgd2l0aCByYW5kb20gYnl0ZXMuICAiZGF0IiBpcyBhIHBhcmFtZXRlciB5b3UgY2FuCisgKiBoYXZlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgKGUuZy4gYSBzdGF0ZSBvciBzb21ldGhpbmcpLiAgVGhpcyBmdW5jdGlvbiBkb2Vzbid0IHVzZSAiZGF0IiBpdHNlbGYKKyAqIHNvIGl0IGNhbiBiZSBOVUxMCisgKgorICovCisKKy8qIFRoaXMgaXMgcG9zc2libHkgdGhlIG1vdGhlciBvZiBhbGwgcHJpbWUgZ2VuZXJhdGlvbiBmdW5jdGlvbnMsIG11YWhhaGFoYWhhaGEhICovCitpbnQgbXBfcHJpbWVfcmFuZG9tX2V4KG1wX2ludCAqYSwgaW50IHQsIGludCBzaXplLCBpbnQgZmxhZ3MsIGx0bV9wcmltZV9jYWxsYmFjayBjYiwgdm9pZCAqZGF0KQoreworICAgdW5zaWduZWQgY2hhciAqdG1wLCBtYXNrQU5ELCBtYXNrT1JfbXNiLCBtYXNrT1JfbHNiOworICAgaW50IHJlcywgZXJyLCBic2l6ZSwgbWFza09SX21zYl9vZmZzZXQ7CisKKyAgIC8qIHNhbml0eSBjaGVjayB0aGUgaW5wdXQgKi8KKyAgIGlmIChzaXplIDw9IDEgfHwgdCA8PSAwKSB7CisgICAgICByZXR1cm4gTVBfVkFMOworICAgfQorCisgICAvKiBMVE1fUFJJTUVfU0FGRSBpbXBsaWVzIExUTV9QUklNRV9CQlMgKi8KKyAgIGlmIChmbGFncyAmIExUTV9QUklNRV9TQUZFKSB7CisgICAgICBmbGFncyB8PSBMVE1fUFJJTUVfQkJTOworICAgfQorCisgICAvKiBjYWxjIHRoZSBieXRlIHNpemUgKi8KKyAgIGJzaXplID0gKHNpemU+PjMpICsgKChzaXplJjcpPzE6MCk7CisKKyAgIC8qIHdlIG5lZWQgYSBidWZmZXIgb2YgYnNpemUgYnl0ZXMgKi8KKyAgIHRtcCA9IE9QVF9DQVNUKHVuc2lnbmVkIGNoYXIpIFhNQUxMT0MoYnNpemUpOworICAgaWYgKHRtcCA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gTVBfTUVNOworICAgfQorCisgICAvKiBjYWxjIHRoZSBtYXNrQU5EIHZhbHVlIGZvciB0aGUgTVNieXRlKi8KKyAgIG1hc2tBTkQgPSAoKHNpemUmNykgPT0gMCkgPyAweEZGIDogKDB4RkYgPj4gKDggLSAoc2l6ZSAmIDcpKSk7CisKKyAgIC8qIGNhbGMgdGhlIG1hc2tPUl9tc2IgKi8KKyAgIG1hc2tPUl9tc2IgICAgICAgID0gMDsKKyAgIG1hc2tPUl9tc2Jfb2Zmc2V0ID0gKChzaXplICYgNykgPT0gMSkgPyAxIDogMDsKKyAgIGlmIChmbGFncyAmIExUTV9QUklNRV8yTVNCX09OKSB7CisgICAgICBtYXNrT1JfbXNiICAgICAgIHw9IDB4ODAgPj4gKCg5IC0gc2l6ZSkgJiA3KTsKKyAgIH0gIAorCisgICAvKiBnZXQgdGhlIG1hc2tPUl9sc2IgKi8KKyAgIG1hc2tPUl9sc2IgICAgICAgICA9IDE7CisgICBpZiAoZmxhZ3MgJiBMVE1fUFJJTUVfQkJTKSB7CisgICAgICBtYXNrT1JfbHNiICAgICB8PSAzOworICAgfQorCisgICBkbyB7CisgICAgICAvKiByZWFkIHRoZSBieXRlcyAqLworICAgICAgaWYgKGNiKHRtcCwgYnNpemUsIGRhdCkgIT0gYnNpemUpIHsKKyAgICAgICAgIGVyciA9IE1QX1ZBTDsKKyAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICB9CisgCisgICAgICAvKiB3b3JrIG92ZXIgdGhlIE1TYnl0ZSAqLworICAgICAgdG1wWzBdICAgICY9IG1hc2tBTkQ7CisgICAgICB0bXBbMF0gICAgfD0gMSA8PCAoKHNpemUgLSAxKSAmIDcpOworCisgICAgICAvKiBtaXggaW4gdGhlIG1hc2tPUnMgKi8KKyAgICAgIHRtcFttYXNrT1JfbXNiX29mZnNldF0gICB8PSBtYXNrT1JfbXNiOworICAgICAgdG1wW2JzaXplLTFdICAgICAgICAgICAgIHw9IG1hc2tPUl9sc2I7CisKKyAgICAgIC8qIHJlYWQgaXQgaW4gKi8KKyAgICAgIGlmICgoZXJyID0gbXBfcmVhZF91bnNpZ25lZF9iaW4oYSwgdG1wLCBic2l6ZSkpICE9IE1QX09LQVkpICAgICB7IGdvdG8gZXJyb3I7IH0KKworICAgICAgLyogaXMgaXQgcHJpbWU/ICovCisgICAgICBpZiAoKGVyciA9IG1wX3ByaW1lX2lzX3ByaW1lKGEsIHQsICZyZXMpKSAhPSBNUF9PS0FZKSAgICAgICAgICAgeyBnb3RvIGVycm9yOyB9CisgICAgICBpZiAocmVzID09IE1QX05PKSB7ICAKKyAgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgICBpZiAoZmxhZ3MgJiBMVE1fUFJJTUVfU0FGRSkgeworICAgICAgICAgLyogc2VlIGlmIChhLTEpLzIgaXMgcHJpbWUgKi8KKyAgICAgICAgIGlmICgoZXJyID0gbXBfc3ViX2QoYSwgMSwgYSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgICAgICAgIGlmICgoZXJyID0gbXBfZGl2XzIoYSwgYSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAKKyAgICAgICAgIC8qIGlzIGl0IHByaW1lPyAqLworICAgICAgICAgaWYgKChlcnIgPSBtcF9wcmltZV9pc19wcmltZShhLCB0LCAmcmVzKSkgIT0gTVBfT0tBWSkgICAgICAgIHsgZ290byBlcnJvcjsgfQorICAgICAgfQorICAgfSB3aGlsZSAocmVzID09IE1QX05PKTsKKworICAgaWYgKGZsYWdzICYgTFRNX1BSSU1FX1NBRkUpIHsKKyAgICAgIC8qIHJlc3RvcmUgYSB0byB0aGUgb3JpZ2luYWwgdmFsdWUgKi8KKyAgICAgIGlmICgoZXJyID0gbXBfbXVsXzIoYSwgYSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgICAgIGlmICgoZXJyID0gbXBfYWRkX2QoYSwgMSwgYSkpICE9IE1QX09LQVkpICAgICAgICAgICAgICAgICAgICAgICB7IGdvdG8gZXJyb3I7IH0KKyAgIH0KKworICAgZXJyID0gTVBfT0tBWTsKK2Vycm9yOgorICAgWEZSRUUodG1wKTsKKyAgIHJldHVybiBlcnI7Cit9CisKKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcHJpbWVfcmFuZG9tX2V4LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfcHJpbWVfcmFuZG9tX2V4LmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3JhZGl4X3NpemUuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SQURJWF9TSVpFX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHJldHVybnMgc2l6ZSBvZiBBU0NJSSByZXByZW5zZW50YXRpb24gKi8KK2ludCBtcF9yYWRpeF9zaXplIChtcF9pbnQgKiBhLCBpbnQgcmFkaXgsIGludCAqc2l6ZSkKK3sKKyAgaW50ICAgICByZXMsIGRpZ3M7CisgIG1wX2ludCAgdDsKKyAgbXBfZGlnaXQgZDsKKworICAqc2l6ZSA9IDA7CisKKyAgLyogc3BlY2lhbCBjYXNlIGZvciBiaW5hcnkgKi8KKyAgaWYgKHJhZGl4ID09IDIpIHsKKyAgICAqc2l6ZSA9IG1wX2NvdW50X2JpdHMgKGEpICsgKGEtPnNpZ24gPT0gTVBfTkVHID8gMSA6IDApICsgMTsKKyAgICByZXR1cm4gTVBfT0tBWTsKKyAgfQorCisgIC8qIG1ha2Ugc3VyZSB0aGUgcmFkaXggaXMgaW4gcmFuZ2UgKi8KKyAgaWYgKHJhZGl4IDwgMiB8fCByYWRpeCA+IDY0KSB7CisgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIGlmIChtcF9pc3plcm8oYSkgPT0gTVBfWUVTKSB7CisgICAgKnNpemUgPSAyOworICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgLyogZGlncyBpcyB0aGUgZGlnaXQgY291bnQgKi8KKyAgZGlncyA9IDA7CisKKyAgLyogaWYgaXQncyBuZWdhdGl2ZSBhZGQgb25lIGZvciB0aGUgc2lnbiAqLworICBpZiAoYS0+c2lnbiA9PSBNUF9ORUcpIHsKKyAgICArK2RpZ3M7CisgIH0KKworICAvKiBpbml0IGEgY29weSBvZiB0aGUgaW5wdXQgKi8KKyAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkgKCZ0LCBhKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICAvKiBmb3JjZSB0ZW1wIHRvIHBvc2l0aXZlICovCisgIHQuc2lnbiA9IE1QX1pQT1M7IAorCisgIC8qIGZldGNoIG91dCBhbGwgb2YgdGhlIGRpZ2l0cyAqLworICB3aGlsZSAobXBfaXN6ZXJvICgmdCkgPT0gTVBfTk8pIHsKKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl9kICgmdCwgKG1wX2RpZ2l0KSByYWRpeCwgJnQsICZkKSkgIT0gTVBfT0tBWSkgeworICAgICAgbXBfY2xlYXIgKCZ0KTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgICsrZGlnczsKKyAgfQorICBtcF9jbGVhciAoJnQpOworCisgIC8qIHJldHVybiBkaWdzICsgMSwgdGhlIDEgaXMgZm9yIHRoZSBOVUxMIGJ5dGUgdGhhdCB3b3VsZCBiZSByZXF1aXJlZC4gKi8KKyAgKnNpemUgPSBkaWdzICsgMTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JhZGl4X3NpemUuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS40ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9yYWRpeF9zaXplLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3JhZGl4X3NtYXAuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SQURJWF9TTUFQX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGNoYXJzIHVzZWQgaW4gcmFkaXggY29udmVyc2lvbnMgKi8KK2NvbnN0IGNoYXIgKm1wX3Nfcm1hcCA9ICIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eisvIjsKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JhZGl4X3NtYXAuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9yYWRpeF9zbWFwLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3JhbmQuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SQU5EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIG1ha2VzIGEgcHNldWRvLXJhbmRvbSBpbnQgb2YgYSBnaXZlbiBzaXplICovCitpbnQKK21wX3JhbmQgKG1wX2ludCAqIGEsIGludCBkaWdpdHMpCit7CisgIGludCAgICAgcmVzOworICBtcF9kaWdpdCBkOworCisgIG1wX3plcm8gKGEpOworICBpZiAoZGlnaXRzIDw9IDApIHsKKyAgICByZXR1cm4gTVBfT0tBWTsKKyAgfQorCisgIC8qIGZpcnN0IHBsYWNlIGEgcmFuZG9tIG5vbi16ZXJvIGRpZ2l0ICovCisgIGRvIHsKKyAgICBkID0gKChtcF9kaWdpdCkgYWJzIChyYW5kICgpKSkgJiBNUF9NQVNLOworICB9IHdoaWxlIChkID09IDApOworCisgIGlmICgocmVzID0gbXBfYWRkX2QgKGEsIGQsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIHdoaWxlICgtLWRpZ2l0cyA+IDApIHsKKyAgICBpZiAoKHJlcyA9IG1wX2xzaGQgKGEsIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfYWRkX2QgKGEsICgobXBfZGlnaXQpIGFicyAocmFuZCAoKSkpLCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgIH0KKworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JhbmQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9yYW5kLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3JlYWRfcmFkaXguYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SRUFEX1JBRElYX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHJlYWQgYSBzdHJpbmcgW0FTQ0lJXSBpbiBhIGdpdmVuIHJhZGl4ICovCitpbnQgbXBfcmVhZF9yYWRpeCAobXBfaW50ICogYSwgY29uc3QgY2hhciAqc3RyLCBpbnQgcmFkaXgpCit7CisgIGludCAgICAgeSwgcmVzLCBuZWc7CisgIGNoYXIgICAgY2g7CisKKyAgLyogemVybyB0aGUgZGlnaXQgYmlnbnVtICovCisgIG1wX3plcm8oYSk7CisKKyAgLyogbWFrZSBzdXJlIHRoZSByYWRpeCBpcyBvayAqLworICBpZiAocmFkaXggPCAyIHx8IHJhZGl4ID4gNjQpIHsKKyAgICByZXR1cm4gTVBfVkFMOworICB9CisKKyAgLyogaWYgdGhlIGxlYWRpbmcgZGlnaXQgaXMgYSAKKyAgICogbWludXMgc2V0IHRoZSBzaWduIHRvIG5lZ2F0aXZlLiAKKyAgICovCisgIGlmICgqc3RyID09ICctJykgeworICAgICsrc3RyOworICAgIG5lZyA9IE1QX05FRzsKKyAgfSBlbHNlIHsKKyAgICBuZWcgPSBNUF9aUE9TOworICB9CisKKyAgLyogc2V0IHRoZSBpbnRlZ2VyIHRvIHRoZSBkZWZhdWx0IG9mIHplcm8gKi8KKyAgbXBfemVybyAoYSk7CisgIAorICAvKiBwcm9jZXNzIGVhY2ggZGlnaXQgb2YgdGhlIHN0cmluZyAqLworICB3aGlsZSAoKnN0cikgeworICAgIC8qIGlmIHRoZSByYWRpeCA8IDM2IHRoZSBjb252ZXJzaW9uIGlzIGNhc2UgaW5zZW5zaXRpdmUKKyAgICAgKiB0aGlzIGFsbG93cyBudW1iZXJzIGxpa2UgMUFCIGFuZCAxYWIgdG8gcmVwcmVzZW50IHRoZSBzYW1lICB2YWx1ZQorICAgICAqIFtlLmcuIGluIGhleF0KKyAgICAgKi8KKyAgICBjaCA9IChjaGFyKSAoKHJhZGl4IDwgMzYpID8gdG91cHBlciAoKnN0cikgOiAqc3RyKTsKKyAgICBmb3IgKHkgPSAwOyB5IDwgNjQ7IHkrKykgeworICAgICAgaWYgKGNoID09IG1wX3Nfcm1hcFt5XSkgeworICAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorCisgICAgLyogaWYgdGhlIGNoYXIgd2FzIGZvdW5kIGluIHRoZSBtYXAgCisgICAgICogYW5kIGlzIGxlc3MgdGhhbiB0aGUgZ2l2ZW4gcmFkaXggYWRkIGl0CisgICAgICogdG8gdGhlIG51bWJlciwgb3RoZXJ3aXNlIGV4aXQgdGhlIGxvb3AuIAorICAgICAqLworICAgIGlmICh5IDwgcmFkaXgpIHsKKyAgICAgIGlmICgocmVzID0gbXBfbXVsX2QgKGEsIChtcF9kaWdpdCkgcmFkaXgsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICByZXR1cm4gcmVzOworICAgICAgfQorICAgICAgaWYgKChyZXMgPSBtcF9hZGRfZCAoYSwgKG1wX2RpZ2l0KSB5LCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgYnJlYWs7CisgICAgfQorICAgICsrc3RyOworICB9CisgIAorICAvKiBzZXQgdGhlIHNpZ24gb25seSBpZiBhICE9IDAgKi8KKyAgaWYgKG1wX2lzemVybyhhKSAhPSAxKSB7CisgICAgIGEtPnNpZ24gPSBuZWc7CisgIH0KKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9yZWFkX3JhZGl4LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfcmVhZF9yYWRpeC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9yZWFkX3NpZ25lZF9iaW4uYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SRUFEX1NJR05FRF9CSU5fQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogcmVhZCBzaWduZWQgYmluLCBiaWcgZW5kaWFuLCBmaXJzdCBieXRlIGlzIDA9PXBvc2l0aXZlIG9yIDE9PW5lZ2F0aXZlICovCitpbnQgbXBfcmVhZF9zaWduZWRfYmluIChtcF9pbnQgKiBhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgYykKK3sKKyAgaW50ICAgICByZXM7CisKKyAgLyogcmVhZCBtYWduaXR1ZGUgKi8KKyAgaWYgKChyZXMgPSBtcF9yZWFkX3Vuc2lnbmVkX2JpbiAoYSwgYiArIDEsIGMgLSAxKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICAvKiBmaXJzdCBieXRlIGlzIDAgZm9yIHBvc2l0aXZlLCBub24temVybyBmb3IgbmVnYXRpdmUgKi8KKyAgaWYgKGJbMF0gPT0gMCkgeworICAgICBhLT5zaWduID0gTVBfWlBPUzsKKyAgfSBlbHNlIHsKKyAgICAgYS0+c2lnbiA9IE1QX05FRzsKKyAgfQorCisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcmVhZF9zaWduZWRfYmluLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfcmVhZF9zaWduZWRfYmluLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3JlYWRfdW5zaWduZWRfYmluLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfUkVBRF9VTlNJR05FRF9CSU5fQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogcmVhZHMgYSB1bnNpZ25lZCBjaGFyIGFycmF5LCBhc3N1bWVzIHRoZSBtc2IgaXMgc3RvcmVkIGZpcnN0IFtiaWcgZW5kaWFuXSAqLworaW50IG1wX3JlYWRfdW5zaWduZWRfYmluIChtcF9pbnQgKiBhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgYykKK3sKKyAgaW50ICAgICByZXM7CisKKyAgLyogbWFrZSBzdXJlIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gZGlnaXRzICovCisgIGlmIChhLT5hbGxvYyA8IDIpIHsKKyAgICAgaWYgKChyZXMgPSBtcF9ncm93KGEsIDIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIHJldHVybiByZXM7CisgICAgIH0KKyAgfQorCisgIC8qIHplcm8gdGhlIGludCAqLworICBtcF96ZXJvIChhKTsKKworICAvKiByZWFkIHRoZSBieXRlcyBpbiAqLworICB3aGlsZSAoYy0tID4gMCkgeworICAgIGlmICgocmVzID0gbXBfbXVsXzJkIChhLCA4LCBhKSkgIT0gTVBfT0tBWSkgeworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisKKyNpZm5kZWYgTVBfOEJJVAorICAgICAgYS0+ZHBbMF0gfD0gKmIrKzsKKyAgICAgIGEtPnVzZWQgKz0gMTsKKyNlbHNlCisgICAgICBhLT5kcFswXSA9ICgqYiAmIE1QX01BU0spOworICAgICAgYS0+ZHBbMV0gfD0gKCgqYisrID4+IDdVKSAmIDEpOworICAgICAgYS0+dXNlZCArPSAyOworI2VuZGlmCisgIH0KKyAgbXBfY2xhbXAgKGEpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JlYWRfdW5zaWduZWRfYmluLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfcmVhZF91bnNpZ25lZF9iaW4uYyAqLworCisvKiBTdGFydDogYm5fbXBfcmVkdWNlLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfUkVEVUNFX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHJlZHVjZXMgeCBtb2QgbSwgYXNzdW1lcyAwIDwgeCA8IG0qKjIsIG11IGlzIAorICogcHJlY29tcHV0ZWQgdmlhIG1wX3JlZHVjZV9zZXR1cC4KKyAqIEZyb20gSEFDIHBwLjYwNCBBbGdvcml0aG0gMTQuNDIKKyAqLworaW50IG1wX3JlZHVjZSAobXBfaW50ICogeCwgbXBfaW50ICogbSwgbXBfaW50ICogbXUpCit7CisgIG1wX2ludCAgcTsKKyAgaW50ICAgICByZXMsIHVtID0gbS0+dXNlZDsKKworICAvKiBxID0geCAqLworICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnEsIHgpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIHExID0geCAvIGIqKihrLTEpICAqLworICBtcF9yc2hkICgmcSwgdW0gLSAxKTsgICAgICAgICAKKworICAvKiBhY2NvcmRpbmcgdG8gSEFDIHRoaXMgb3B0aW1pemF0aW9uIGlzIG9rICovCisgIGlmICgoKHVuc2lnbmVkIGxvbmcpIHVtKSA+ICgoKG1wX2RpZ2l0KTEpIDw8IChESUdJVF9CSVQgLSAxKSkpIHsKKyAgICBpZiAoKHJlcyA9IG1wX211bCAoJnEsIG11LCAmcSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gQ0xFQU5VUDsKKyAgICB9CisgIH0gZWxzZSB7CisjaWZkZWYgQk5fU19NUF9NVUxfSElHSF9ESUdTX0MKKyAgICBpZiAoKHJlcyA9IHNfbXBfbXVsX2hpZ2hfZGlncyAoJnEsIG11LCAmcSwgdW0pKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIENMRUFOVVA7CisgICAgfQorI2VsaWYgZGVmaW5lZChCTl9GQVNUX1NfTVBfTVVMX0hJR0hfRElHU19DKQorICAgIGlmICgocmVzID0gZmFzdF9zX21wX211bF9oaWdoX2RpZ3MgKCZxLCBtdSwgJnEsIHVtKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBDTEVBTlVQOworICAgIH0KKyNlbHNlIAorICAgIHsgCisgICAgICByZXMgPSBNUF9WQUw7CisgICAgICBnb3RvIENMRUFOVVA7CisgICAgfQorI2VuZGlmCisgIH0KKworICAvKiBxMyA9IHEyIC8gYioqKGsrMSkgKi8KKyAgbXBfcnNoZCAoJnEsIHVtICsgMSk7ICAgICAgICAgCisKKyAgLyogeCA9IHggbW9kIGIqKihrKzEpLCBxdWljayAobm8gZGl2aXNpb24pICovCisgIGlmICgocmVzID0gbXBfbW9kXzJkICh4LCBESUdJVF9CSVQgKiAodW0gKyAxKSwgeCkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIENMRUFOVVA7CisgIH0KKworICAvKiBxID0gcSAqIG0gbW9kIGIqKihrKzEpLCBxdWljayAobm8gZGl2aXNpb24pICovCisgIGlmICgocmVzID0gc19tcF9tdWxfZGlncyAoJnEsIG0sICZxLCB1bSArIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBDTEVBTlVQOworICB9CisKKyAgLyogeCA9IHggLSBxICovCisgIGlmICgocmVzID0gbXBfc3ViICh4LCAmcSwgeCkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIENMRUFOVVA7CisgIH0KKworICAvKiBJZiB4IDwgMCwgYWRkIGIqKihrKzEpIHRvIGl0ICovCisgIGlmIChtcF9jbXBfZCAoeCwgMCkgPT0gTVBfTFQpIHsKKyAgICBtcF9zZXQgKCZxLCAxKTsKKyAgICBpZiAoKHJlcyA9IG1wX2xzaGQgKCZxLCB1bSArIDEpKSAhPSBNUF9PS0FZKQorICAgICAgZ290byBDTEVBTlVQOworICAgIGlmICgocmVzID0gbXBfYWRkICh4LCAmcSwgeCkpICE9IE1QX09LQVkpCisgICAgICBnb3RvIENMRUFOVVA7CisgIH0KKworICAvKiBCYWNrIG9mZiBpZiBpdCdzIHRvbyBiaWcgKi8KKyAgd2hpbGUgKG1wX2NtcCAoeCwgbSkgIT0gTVBfTFQpIHsKKyAgICBpZiAoKHJlcyA9IHNfbXBfc3ViICh4LCBtLCB4KSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBDTEVBTlVQOworICAgIH0KKyAgfQorICAKK0NMRUFOVVA6CisgIG1wX2NsZWFyICgmcSk7CisKKyAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JlZHVjZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3JlZHVjZS5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9yZWR1Y2VfMmsuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SRURVQ0VfMktfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogcmVkdWNlcyBhIG1vZHVsbyBuIHdoZXJlIG4gaXMgb2YgdGhlIGZvcm0gMioqcCAtIGQgKi8KK2ludCBtcF9yZWR1Y2VfMmsobXBfaW50ICphLCBtcF9pbnQgKm4sIG1wX2RpZ2l0IGQpCit7CisgICBtcF9pbnQgcTsKKyAgIGludCAgICBwLCByZXM7CisgICAKKyAgIGlmICgocmVzID0gbXBfaW5pdCgmcSkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICB9CisgICAKKyAgIHAgPSBtcF9jb3VudF9iaXRzKG4pOyAgICAKK3RvcDoKKyAgIC8qIHEgPSBhLzIqKnAsIGEgPSBhIG1vZCAyKipwICovCisgICBpZiAoKHJlcyA9IG1wX2Rpdl8yZChhLCBwLCAmcSwgYSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gRVJSOworICAgfQorICAgCisgICBpZiAoZCAhPSAxKSB7CisgICAgICAvKiBxID0gcSAqIGQgKi8KKyAgICAgIGlmICgocmVzID0gbXBfbXVsX2QoJnEsIGQsICZxKSkgIT0gTVBfT0tBWSkgeyAKKyAgICAgICAgIGdvdG8gRVJSOworICAgICAgfQorICAgfQorICAgCisgICAvKiBhID0gYSArIHEgKi8KKyAgIGlmICgocmVzID0gc19tcF9hZGQoYSwgJnEsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIEVSUjsKKyAgIH0KKyAgIAorICAgaWYgKG1wX2NtcF9tYWcoYSwgbikgIT0gTVBfTFQpIHsKKyAgICAgIHNfbXBfc3ViKGEsIG4sIGEpOworICAgICAgZ290byB0b3A7CisgICB9CisgICAKK0VSUjoKKyAgIG1wX2NsZWFyKCZxKTsKKyAgIHJldHVybiByZXM7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV8yay5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3JlZHVjZV8yay5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9yZWR1Y2VfMmtfbC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1JFRFVDRV8yS19MX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHJlZHVjZXMgYSBtb2R1bG8gbiB3aGVyZSBuIGlzIG9mIHRoZSBmb3JtIDIqKnAgLSBkIAorICAgVGhpcyBkaWZmZXJzIGZyb20gcmVkdWNlXzJrIHNpbmNlICJkIiBjYW4gYmUgbGFyZ2VyCisgICB0aGFuIGEgc2luZ2xlIGRpZ2l0LgorKi8KK2ludCBtcF9yZWR1Y2VfMmtfbChtcF9pbnQgKmEsIG1wX2ludCAqbiwgbXBfaW50ICpkKQoreworICAgbXBfaW50IHE7CisgICBpbnQgICAgcCwgcmVzOworICAgCisgICBpZiAoKHJlcyA9IG1wX2luaXQoJnEpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgfQorICAgCisgICBwID0gbXBfY291bnRfYml0cyhuKTsgICAgCit0b3A6CisgICAvKiBxID0gYS8yKipwLCBhID0gYSBtb2QgMioqcCAqLworICAgaWYgKChyZXMgPSBtcF9kaXZfMmQoYSwgcCwgJnEsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIEVSUjsKKyAgIH0KKyAgIAorICAgLyogcSA9IHEgKiBkICovCisgICBpZiAoKHJlcyA9IG1wX211bCgmcSwgZCwgJnEpKSAhPSBNUF9PS0FZKSB7IAorICAgICAgZ290byBFUlI7CisgICB9CisgICAKKyAgIC8qIGEgPSBhICsgcSAqLworICAgaWYgKChyZXMgPSBzX21wX2FkZChhLCAmcSwgYSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gRVJSOworICAgfQorICAgCisgICBpZiAobXBfY21wX21hZyhhLCBuKSAhPSBNUF9MVCkgeworICAgICAgc19tcF9zdWIoYSwgbiwgYSk7CisgICAgICBnb3RvIHRvcDsKKyAgIH0KKyAgIAorRVJSOgorICAgbXBfY2xlYXIoJnEpOworICAgcmV0dXJuIHJlczsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcmVkdWNlXzJrX2wuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9yZWR1Y2VfMmtfbC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9yZWR1Y2VfMmtfc2V0dXAuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SRURVQ0VfMktfU0VUVVBfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZGV0ZXJtaW5lcyB0aGUgc2V0dXAgdmFsdWUgKi8KK2ludCBtcF9yZWR1Y2VfMmtfc2V0dXAobXBfaW50ICphLCBtcF9kaWdpdCAqZCkKK3sKKyAgIGludCByZXMsIHA7CisgICBtcF9pbnQgdG1wOworICAgCisgICBpZiAoKHJlcyA9IG1wX2luaXQoJnRtcCkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICB9CisgICAKKyAgIHAgPSBtcF9jb3VudF9iaXRzKGEpOworICAgaWYgKChyZXMgPSBtcF8yZXhwdCgmdG1wLCBwKSkgIT0gTVBfT0tBWSkgeworICAgICAgbXBfY2xlYXIoJnRtcCk7CisgICAgICByZXR1cm4gcmVzOworICAgfQorICAgCisgICBpZiAoKHJlcyA9IHNfbXBfc3ViKCZ0bXAsIGEsICZ0bXApKSAhPSBNUF9PS0FZKSB7CisgICAgICBtcF9jbGVhcigmdG1wKTsKKyAgICAgIHJldHVybiByZXM7CisgICB9CisgICAKKyAgICpkID0gdG1wLmRwWzBdOworICAgbXBfY2xlYXIoJnRtcCk7CisgICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV8ya19zZXR1cC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3JlZHVjZV8ya19zZXR1cC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9yZWR1Y2VfMmtfc2V0dXBfbC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1JFRFVDRV8yS19TRVRVUF9MX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGRldGVybWluZXMgdGhlIHNldHVwIHZhbHVlICovCitpbnQgbXBfcmVkdWNlXzJrX3NldHVwX2wobXBfaW50ICphLCBtcF9pbnQgKmQpCit7CisgICBpbnQgICAgcmVzOworICAgbXBfaW50IHRtcDsKKyAgIAorICAgaWYgKChyZXMgPSBtcF9pbml0KCZ0bXApKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgfQorICAgCisgICBpZiAoKHJlcyA9IG1wXzJleHB0KCZ0bXAsIG1wX2NvdW50X2JpdHMoYSkpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIEVSUjsKKyAgIH0KKyAgIAorICAgaWYgKChyZXMgPSBzX21wX3N1YigmdG1wLCBhLCBkKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBFUlI7CisgICB9CisgICAKK0VSUjoKKyAgIG1wX2NsZWFyKCZ0bXApOworICAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV8ya19zZXR1cF9sLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfcmVkdWNlXzJrX3NldHVwX2wuYyAqLworCisvKiBTdGFydDogYm5fbXBfcmVkdWNlX2lzXzJrLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfUkVEVUNFX0lTXzJLX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGRldGVybWluZXMgaWYgbXBfcmVkdWNlXzJrIGNhbiBiZSB1c2VkICovCitpbnQgbXBfcmVkdWNlX2lzXzJrKG1wX2ludCAqYSkKK3sKKyAgIGludCBpeCwgaXksIGl3OworICAgbXBfZGlnaXQgaXo7CisgICAKKyAgIGlmIChhLT51c2VkID09IDApIHsKKyAgICAgIHJldHVybiBNUF9OTzsKKyAgIH0gZWxzZSBpZiAoYS0+dXNlZCA9PSAxKSB7CisgICAgICByZXR1cm4gTVBfWUVTOworICAgfSBlbHNlIGlmIChhLT51c2VkID4gMSkgeworICAgICAgaXkgPSBtcF9jb3VudF9iaXRzKGEpOworICAgICAgaXogPSAxOworICAgICAgaXcgPSAxOworICAgIAorICAgICAgLyogVGVzdCBldmVyeSBiaXQgZnJvbSB0aGUgc2Vjb25kIGRpZ2l0IHVwLCBtdXN0IGJlIDEgKi8KKyAgICAgIGZvciAoaXggPSBESUdJVF9CSVQ7IGl4IDwgaXk7IGl4KyspIHsKKyAgICAgICAgICBpZiAoKGEtPmRwW2l3XSAmIGl6KSA9PSAwKSB7CisgICAgICAgICAgICAgcmV0dXJuIE1QX05POworICAgICAgICAgIH0KKyAgICAgICAgICBpeiA8PD0gMTsKKyAgICAgICAgICBpZiAoaXogPiAobXBfZGlnaXQpTVBfTUFTSykgeworICAgICAgICAgICAgICsraXc7CisgICAgICAgICAgICAgaXogPSAxOworICAgICAgICAgIH0KKyAgICAgIH0KKyAgIH0KKyAgIHJldHVybiBNUF9ZRVM7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JlZHVjZV9pc18yay5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3JlZHVjZV9pc18yay5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9yZWR1Y2VfaXNfMmtfbC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1JFRFVDRV9JU18yS19MX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGRldGVybWluZXMgaWYgcmVkdWNlXzJrX2wgY2FuIGJlIHVzZWQgKi8KK2ludCBtcF9yZWR1Y2VfaXNfMmtfbChtcF9pbnQgKmEpCit7CisgICBpbnQgaXgsIGl5OworICAgCisgICBpZiAoYS0+dXNlZCA9PSAwKSB7CisgICAgICByZXR1cm4gTVBfTk87CisgICB9IGVsc2UgaWYgKGEtPnVzZWQgPT0gMSkgeworICAgICAgcmV0dXJuIE1QX1lFUzsKKyAgIH0gZWxzZSBpZiAoYS0+dXNlZCA+IDEpIHsKKyAgICAgIC8qIGlmIG1vcmUgdGhhbiBoYWxmIG9mIHRoZSBkaWdpdHMgYXJlIC0xIHdlJ3JlIHNvbGQgKi8KKyAgICAgIGZvciAoaXkgPSBpeCA9IDA7IGl4IDwgYS0+dXNlZDsgaXgrKykgeworICAgICAgICAgIGlmIChhLT5kcFtpeF0gPT0gTVBfTUFTSykgeworICAgICAgICAgICAgICArK2l5OworICAgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHJldHVybiAoaXkgPj0gKGEtPnVzZWQvMikpID8gTVBfWUVTIDogTVBfTk87CisgICAgICAKKyAgIH0KKyAgIHJldHVybiBNUF9OTzsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfcmVkdWNlX2lzXzJrX2wuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9yZWR1Y2VfaXNfMmtfbC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9yZWR1Y2Vfc2V0dXAuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9SRURVQ0VfU0VUVVBfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogcHJlLWNhbGN1bGF0ZSB0aGUgdmFsdWUgcmVxdWlyZWQgZm9yIEJhcnJldHQgcmVkdWN0aW9uCisgKiBGb3IgYSBnaXZlbiBtb2R1bHVzICJiIiBpdCBjYWx1bGF0ZXMgdGhlIHZhbHVlIHJlcXVpcmVkIGluICJhIgorICovCitpbnQgbXBfcmVkdWNlX3NldHVwIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiKQoreworICBpbnQgICAgIHJlczsKKyAgCisgIGlmICgocmVzID0gbXBfMmV4cHQgKGEsIGItPnVzZWQgKiAyICogRElHSVRfQklUKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKyAgcmV0dXJuIG1wX2RpdiAoYSwgYiwgYSwgTlVMTCk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9yZWR1Y2Vfc2V0dXAuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9yZWR1Y2Vfc2V0dXAuYyAqLworCisvKiBTdGFydDogYm5fbXBfcnNoZC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1JTSERfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogc2hpZnQgcmlnaHQgYSBjZXJ0YWluIGFtb3VudCBvZiBkaWdpdHMgKi8KK3ZvaWQgbXBfcnNoZCAobXBfaW50ICogYSwgaW50IGIpCit7CisgIGludCAgICAgeDsKKworICAvKiBpZiBiIDw9IDAgdGhlbiBpZ25vcmUgaXQgKi8KKyAgaWYgKGIgPD0gMCkgeworICAgIHJldHVybjsKKyAgfQorCisgIC8qIGlmIGIgPiB1c2VkIHRoZW4gc2ltcGx5IHplcm8gaXQgYW5kIHJldHVybiAqLworICBpZiAoYS0+dXNlZCA8PSBiKSB7CisgICAgbXBfemVybyAoYSk7CisgICAgcmV0dXJuOworICB9CisKKyAgeworICAgIHJlZ2lzdGVyIG1wX2RpZ2l0ICpib3R0b20sICp0b3A7CisKKyAgICAvKiBzaGlmdCB0aGUgZGlnaXRzIGRvd24gKi8KKworICAgIC8qIGJvdHRvbSAqLworICAgIGJvdHRvbSA9IGEtPmRwOworCisgICAgLyogdG9wIFtvZmZzZXQgaW50byBkaWdpdHNdICovCisgICAgdG9wID0gYS0+ZHAgKyBiOworCisgICAgLyogdGhpcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHNsaWRpbmcgd2luZG93IHdoZXJlIAorICAgICAqIHRoZSB3aW5kb3cgaXMgYi1kaWdpdHMgbG9uZyBhbmQgZGlnaXRzIGZyb20gCisgICAgICogdGhlIHRvcCBvZiB0aGUgd2luZG93IGFyZSBjb3BpZWQgdG8gdGhlIGJvdHRvbQorICAgICAqCisgICAgICogZS5nLgorCisgICAgIGItMiB8IGItMSB8IGIwIHwgYjEgfCBiMiB8IC4uLiB8IGJiIHwgICAtLS0tPgorICAgICAgICAgICAgICAgICAvXCAgICAgICAgICAgICAgICAgICB8ICAgICAgLS0tLT4KKyAgICAgICAgICAgICAgICAgIFwtLS0tLS0tLS0tLS0tLS0tLS0tLyAgICAgIC0tLS0+CisgICAgICovCisgICAgZm9yICh4ID0gMDsgeCA8IChhLT51c2VkIC0gYik7IHgrKykgeworICAgICAgKmJvdHRvbSsrID0gKnRvcCsrOworICAgIH0KKworICAgIC8qIHplcm8gdGhlIHRvcCBkaWdpdHMgKi8KKyAgICBmb3IgKDsgeCA8IGEtPnVzZWQ7IHgrKykgeworICAgICAgKmJvdHRvbSsrID0gMDsKKyAgICB9CisgIH0KKyAgCisgIC8qIHJlbW92ZSBleGNlc3MgZGlnaXRzICovCisgIGEtPnVzZWQgLT0gYjsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3JzaGQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9yc2hkLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3NldC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1NFVF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBzZXQgdG8gYSBkaWdpdCAqLwordm9pZCBtcF9zZXQgKG1wX2ludCAqIGEsIG1wX2RpZ2l0IGIpCit7CisgIG1wX3plcm8gKGEpOworICBhLT5kcFswXSA9IGIgJiBNUF9NQVNLOworICBhLT51c2VkICA9IChhLT5kcFswXSAhPSAwKSA/IDEgOiAwOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfc2V0LmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfc2V0LmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3NldF9pbnQuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9TRVRfSU5UX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHNldCBhIDMyLWJpdCBjb25zdCAqLworaW50IG1wX3NldF9pbnQgKG1wX2ludCAqIGEsIHVuc2lnbmVkIGxvbmcgYikKK3sKKyAgaW50ICAgICB4LCByZXM7CisKKyAgbXBfemVybyAoYSk7CisgIAorICAvKiBzZXQgZm91ciBiaXRzIGF0IGEgdGltZSAqLworICBmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CisgICAgLyogc2hpZnQgdGhlIG51bWJlciB1cCBmb3VyIGJpdHMgKi8KKyAgICBpZiAoKHJlcyA9IG1wX211bF8yZCAoYSwgNCwgYSkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorCisgICAgLyogT1IgaW4gdGhlIHRvcCBmb3VyIGJpdHMgb2YgdGhlIHNvdXJjZSAqLworICAgIGEtPmRwWzBdIHw9IChiID4+IDI4KSAmIDE1OworCisgICAgLyogc2hpZnQgdGhlIHNvdXJjZSB1cCB0byB0aGUgbmV4dCBmb3VyIGJpdHMgKi8KKyAgICBiIDw8PSA0OworCisgICAgLyogZW5zdXJlIHRoYXQgZGlnaXRzIGFyZSBub3QgY2xhbXBlZCBvZmYgKi8KKyAgICBhLT51c2VkICs9IDE7CisgIH0KKyAgbXBfY2xhbXAgKGEpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3NldF9pbnQuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9zZXRfaW50LmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3Nocmluay5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1NIUklOS19DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBzaHJpbmsgYSBiaWdudW0gKi8KK2ludCBtcF9zaHJpbmsgKG1wX2ludCAqIGEpCit7CisgIG1wX2RpZ2l0ICp0bXA7CisgIGlmIChhLT5hbGxvYyAhPSBhLT51c2VkICYmIGEtPnVzZWQgPiAwKSB7CisgICAgaWYgKCh0bXAgPSBPUFRfQ0FTVChtcF9kaWdpdCkgWFJFQUxMT0MgKGEtPmRwLCBzaXplb2YgKG1wX2RpZ2l0KSAqIGEtPnVzZWQpKSA9PSBOVUxMKSB7CisgICAgICByZXR1cm4gTVBfTUVNOworICAgIH0KKyAgICBhLT5kcCAgICA9IHRtcDsKKyAgICBhLT5hbGxvYyA9IGEtPnVzZWQ7CisgIH0KKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF9zaHJpbmsuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9zaHJpbmsuYyAqLworCisvKiBTdGFydDogYm5fbXBfc2lnbmVkX2Jpbl9zaXplLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfU0lHTkVEX0JJTl9TSVpFX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGdldCB0aGUgc2l6ZSBmb3IgYW4gc2lnbmVkIGVxdWl2YWxlbnQgKi8KK2ludCBtcF9zaWduZWRfYmluX3NpemUgKG1wX2ludCAqIGEpCit7CisgIHJldHVybiAxICsgbXBfdW5zaWduZWRfYmluX3NpemUgKGEpOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfc2lnbmVkX2Jpbl9zaXplLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfc2lnbmVkX2Jpbl9zaXplLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3Nxci5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1NRUl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBjb21wdXRlcyBiID0gYSphICovCitpbnQKK21wX3NxciAobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgaW50ICAgICByZXM7CisKKyNpZmRlZiBCTl9NUF9UT09NX1NRUl9DCisgIC8qIHVzZSBUb29tLUNvb2s/ICovCisgIGlmIChhLT51c2VkID49IFRPT01fU1FSX0NVVE9GRikgeworICAgIHJlcyA9IG1wX3Rvb21fc3FyKGEsIGIpOworICAvKiBLYXJhdHN1YmE/ICovCisgIH0gZWxzZSAKKyNlbmRpZgorI2lmZGVmIEJOX01QX0tBUkFUU1VCQV9TUVJfQworaWYgKGEtPnVzZWQgPj0gS0FSQVRTVUJBX1NRUl9DVVRPRkYpIHsKKyAgICByZXMgPSBtcF9rYXJhdHN1YmFfc3FyIChhLCBiKTsKKyAgfSBlbHNlIAorI2VuZGlmCisgIHsKKyNpZmRlZiBCTl9GQVNUX1NfTVBfU1FSX0MKKyAgICAvKiBjYW4gd2UgdXNlIHRoZSBmYXN0IGNvbWJhIG11bHRpcGxpZXI/ICovCisgICAgaWYgKChhLT51c2VkICogMiArIDEpIDwgTVBfV0FSUkFZICYmIAorICAgICAgICAgYS0+dXNlZCA8IAorICAgICAgICAgKDEgPDwgKHNpemVvZihtcF93b3JkKSAqIENIQVJfQklUIC0gMipESUdJVF9CSVQgLSAxKSkpIHsKKyAgICAgIHJlcyA9IGZhc3Rfc19tcF9zcXIgKGEsIGIpOworICAgIH0gZWxzZQorI2VuZGlmCisjaWZkZWYgQk5fU19NUF9TUVJfQworICAgICAgcmVzID0gc19tcF9zcXIgKGEsIGIpOworI2Vsc2UKKyAgICAgIHJlcyA9IE1QX1ZBTDsKKyNlbmRpZgorICB9CisgIGItPnNpZ24gPSBNUF9aUE9TOworICByZXR1cm4gcmVzOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfc3FyLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfc3FyLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3Nxcm1vZC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1NRUk1PRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBjID0gYSAqIGEgKG1vZCBiKSAqLworaW50CittcF9zcXJtb2QgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpCit7CisgIGludCAgICAgcmVzOworICBtcF9pbnQgIHQ7CisKKyAgaWYgKChyZXMgPSBtcF9pbml0ICgmdCkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9zcXIgKGEsICZ0KSkgIT0gTVBfT0tBWSkgeworICAgIG1wX2NsZWFyICgmdCk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorICByZXMgPSBtcF9tb2QgKCZ0LCBiLCBjKTsKKyAgbXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3Nxcm1vZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3Nxcm1vZC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9zcXJ0LmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfU1FSVF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGxlc3MgZ2VuZXJpYyB0aGFuIG1wX25fcm9vdCwgc2ltcGxlciBhbmQgZmFzdGVyICovCitpbnQgbXBfc3FydChtcF9pbnQgKmFyZywgbXBfaW50ICpyZXQpIAoreworICBpbnQgcmVzOworICBtcF9pbnQgdDEsdDI7CisKKyAgLyogbXVzdCBiZSBwb3NpdGl2ZSAqLworICBpZiAoYXJnLT5zaWduID09IE1QX05FRykgeworICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworICAvKiBlYXN5IG91dCAqLworICBpZiAobXBfaXN6ZXJvKGFyZykgPT0gTVBfWUVTKSB7CisgICAgbXBfemVybyhyZXQpOworICAgIHJldHVybiBNUF9PS0FZOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkoJnQxLCBhcmcpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIGlmICgocmVzID0gbXBfaW5pdCgmdDIpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBFMjsKKyAgfQorCisgIC8qIEZpcnN0IGFwcHJveC4gKG5vdCB2ZXJ5IGJhZCBmb3IgbGFyZ2UgYXJnKSAqLworICBtcF9yc2hkICgmdDEsdDEudXNlZC8yKTsKKworICAvKiB0MSA+IDAgICovIAorICBpZiAoKHJlcyA9IG1wX2RpdihhcmcsJnQxLCZ0MixOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gRTE7CisgIH0KKyAgaWYgKChyZXMgPSBtcF9hZGQoJnQxLCZ0MiwmdDEpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBFMTsKKyAgfQorICBpZiAoKHJlcyA9IG1wX2Rpdl8yKCZ0MSwmdDEpKSAhPSBNUF9PS0FZKSB7CisgICAgZ290byBFMTsKKyAgfQorICAvKiBBbmQgbm93IHQxID4gc3FydChhcmcpICovCisgIGRvIHsgCisgICAgaWYgKChyZXMgPSBtcF9kaXYoYXJnLCZ0MSwmdDIsTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gRTE7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0MSwmdDIsJnQxKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBFMTsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9kaXZfMigmdDEsJnQxKSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBFMTsKKyAgICB9CisgICAgLyogdDEgPj0gc3FydChhcmcpID49IHQyIGF0IHRoaXMgcG9pbnQgKi8KKyAgfSB3aGlsZSAobXBfY21wX21hZygmdDEsJnQyKSA9PSBNUF9HVCk7CisKKyAgbXBfZXhjaCgmdDEscmV0KTsKKworRTE6IG1wX2NsZWFyKCZ0Mik7CitFMjogbXBfY2xlYXIoJnQxKTsKKyAgcmV0dXJuIHJlczsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfc3FydC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3NxcnQuYyAqLworCisvKiBTdGFydDogYm5fbXBfc3ViLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfU1VCX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIGhpZ2ggbGV2ZWwgc3VidHJhY3Rpb24gKGhhbmRsZXMgc2lnbnMpICovCitpbnQKK21wX3N1YiAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK3sKKyAgaW50ICAgICBzYSwgc2IsIHJlczsKKworICBzYSA9IGEtPnNpZ247CisgIHNiID0gYi0+c2lnbjsKKworICBpZiAoc2EgIT0gc2IpIHsKKyAgICAvKiBzdWJ0cmFjdCBhIG5lZ2F0aXZlIGZyb20gYSBwb3NpdGl2ZSwgT1IgKi8KKyAgICAvKiBzdWJ0cmFjdCBhIHBvc2l0aXZlIGZyb20gYSBuZWdhdGl2ZS4gKi8KKyAgICAvKiBJbiBlaXRoZXIgY2FzZSwgQUREIHRoZWlyIG1hZ25pdHVkZXMsICovCisgICAgLyogYW5kIHVzZSB0aGUgc2lnbiBvZiB0aGUgZmlyc3QgbnVtYmVyLiAqLworICAgIGMtPnNpZ24gPSBzYTsKKyAgICByZXMgPSBzX21wX2FkZCAoYSwgYiwgYyk7CisgIH0gZWxzZSB7CisgICAgLyogc3VidHJhY3QgYSBwb3NpdGl2ZSBmcm9tIGEgcG9zaXRpdmUsIE9SICovCisgICAgLyogc3VidHJhY3QgYSBuZWdhdGl2ZSBmcm9tIGEgbmVnYXRpdmUuICovCisgICAgLyogRmlyc3QsIHRha2UgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVpciAqLworICAgIC8qIG1hZ25pdHVkZXMsIHRoZW4uLi4gKi8KKyAgICBpZiAobXBfY21wX21hZyAoYSwgYikgIT0gTVBfTFQpIHsKKyAgICAgIC8qIENvcHkgdGhlIHNpZ24gZnJvbSB0aGUgZmlyc3QgKi8KKyAgICAgIGMtPnNpZ24gPSBzYTsKKyAgICAgIC8qIFRoZSBmaXJzdCBoYXMgYSBsYXJnZXIgb3IgZXF1YWwgbWFnbml0dWRlICovCisgICAgICByZXMgPSBzX21wX3N1YiAoYSwgYiwgYyk7CisgICAgfSBlbHNlIHsKKyAgICAgIC8qIFRoZSByZXN1bHQgaGFzIHRoZSAqb3Bwb3NpdGUqIHNpZ24gZnJvbSAqLworICAgICAgLyogdGhlIGZpcnN0IG51bWJlci4gKi8KKyAgICAgIGMtPnNpZ24gPSAoc2EgPT0gTVBfWlBPUykgPyBNUF9ORUcgOiBNUF9aUE9TOworICAgICAgLyogVGhlIHNlY29uZCBoYXMgYSBsYXJnZXIgbWFnbml0dWRlICovCisgICAgICByZXMgPSBzX21wX3N1YiAoYiwgYSwgYyk7CisgICAgfQorICB9CisgIHJldHVybiByZXM7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3N1Yi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3N1Yi5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9zdWJfZC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1NVQl9EX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHNpbmdsZSBkaWdpdCBzdWJ0cmFjdGlvbiAqLworaW50CittcF9zdWJfZCAobXBfaW50ICogYSwgbXBfZGlnaXQgYiwgbXBfaW50ICogYykKK3sKKyAgbXBfZGlnaXQgKnRtcGEsICp0bXBjLCBtdTsKKyAgaW50ICAgICAgIHJlcywgaXgsIG9sZHVzZWQ7CisKKyAgLyogZ3JvdyBjIGFzIHJlcXVpcmVkICovCisgIGlmIChjLT5hbGxvYyA8IGEtPnVzZWQgKyAxKSB7CisgICAgIGlmICgocmVzID0gbXBfZ3JvdyhjLCBhLT51c2VkICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgfQorICB9CisKKyAgLyogaWYgYSBpcyBuZWdhdGl2ZSBqdXN0IGRvIGFuIHVuc2lnbmVkCisgICAqIGFkZGl0aW9uIFt3aXRoIGZ1ZGdlZCBzaWduc10KKyAgICovCisgIGlmIChhLT5zaWduID09IE1QX05FRykgeworICAgICBhLT5zaWduID0gTVBfWlBPUzsKKyAgICAgcmVzICAgICA9IG1wX2FkZF9kKGEsIGIsIGMpOworICAgICBhLT5zaWduID0gYy0+c2lnbiA9IE1QX05FRzsKKworICAgICAvKiBjbGFtcCAqLworICAgICBtcF9jbGFtcChjKTsKKworICAgICByZXR1cm4gcmVzOworICB9CisKKyAgLyogc2V0dXAgcmVncyAqLworICBvbGR1c2VkID0gYy0+dXNlZDsKKyAgdG1wYSAgICA9IGEtPmRwOworICB0bXBjICAgID0gYy0+ZHA7CisKKyAgLyogaWYgYSA8PSBiIHNpbXBseSBmaXggdGhlIHNpbmdsZSBkaWdpdCAqLworICBpZiAoKGEtPnVzZWQgPT0gMSAmJiBhLT5kcFswXSA8PSBiKSB8fCBhLT51c2VkID09IDApIHsKKyAgICAgaWYgKGEtPnVzZWQgPT0gMSkgeworICAgICAgICAqdG1wYysrID0gYiAtICp0bXBhOworICAgICB9IGVsc2UgeworICAgICAgICAqdG1wYysrID0gYjsKKyAgICAgfQorICAgICBpeCAgICAgID0gMTsKKworICAgICAvKiBuZWdhdGl2ZS8xZGlnaXQgKi8KKyAgICAgYy0+c2lnbiA9IE1QX05FRzsKKyAgICAgYy0+dXNlZCA9IDE7CisgIH0gZWxzZSB7CisgICAgIC8qIHBvc2l0aXZlL3NpemUgKi8KKyAgICAgYy0+c2lnbiA9IE1QX1pQT1M7CisgICAgIGMtPnVzZWQgPSBhLT51c2VkOworCisgICAgIC8qIHN1YnRyYWN0IGZpcnN0IGRpZ2l0ICovCisgICAgICp0bXBjICAgID0gKnRtcGErKyAtIGI7CisgICAgIG11ICAgICAgID0gKnRtcGMgPj4gKHNpemVvZihtcF9kaWdpdCkgKiBDSEFSX0JJVCAtIDEpOworICAgICAqdG1wYysrICY9IE1QX01BU0s7CisKKyAgICAgLyogaGFuZGxlIHJlc3Qgb2YgdGhlIGRpZ2l0cyAqLworICAgICBmb3IgKGl4ID0gMTsgaXggPCBhLT51c2VkOyBpeCsrKSB7CisgICAgICAgICp0bXBjICAgID0gKnRtcGErKyAtIG11OworICAgICAgICBtdSAgICAgICA9ICp0bXBjID4+IChzaXplb2YobXBfZGlnaXQpICogQ0hBUl9CSVQgLSAxKTsKKyAgICAgICAgKnRtcGMrKyAmPSBNUF9NQVNLOworICAgICB9CisgIH0KKworICAvKiB6ZXJvIGV4Y2VzcyBkaWdpdHMgKi8KKyAgd2hpbGUgKGl4KysgPCBvbGR1c2VkKSB7CisgICAgICp0bXBjKysgPSAwOworICB9CisgIG1wX2NsYW1wKGMpOworICByZXR1cm4gTVBfT0tBWTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfc3ViX2QuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS41ICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF9zdWJfZC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF9zdWJtb2QuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9TVUJNT0RfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZCA9IGEgLSBiIChtb2QgYykgKi8KK2ludAorbXBfc3VibW9kIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjLCBtcF9pbnQgKiBkKQoreworICBpbnQgICAgIHJlczsKKyAgbXBfaW50ICB0OworCisKKyAgaWYgKChyZXMgPSBtcF9pbml0ICgmdCkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9zdWIgKGEsIGIsICZ0KSkgIT0gTVBfT0tBWSkgeworICAgIG1wX2NsZWFyICgmdCk7CisgICAgcmV0dXJuIHJlczsKKyAgfQorICByZXMgPSBtcF9tb2QgKCZ0LCBjLCBkKTsKKyAgbXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3N1Ym1vZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3N1Ym1vZC5jICovCisKKy8qIFN0YXJ0OiBibl9tcF90b19zaWduZWRfYmluLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfVE9fU0lHTkVEX0JJTl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBzdG9yZSBpbiBzaWduZWQgW2JpZyBlbmRpYW5dIGZvcm1hdCAqLworaW50IG1wX3RvX3NpZ25lZF9iaW4gKG1wX2ludCAqIGEsIHVuc2lnbmVkIGNoYXIgKmIpCit7CisgIGludCAgICAgcmVzOworCisgIGlmICgocmVzID0gbXBfdG9fdW5zaWduZWRfYmluIChhLCBiICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisgIGJbMF0gPSAodW5zaWduZWQgY2hhcikgKChhLT5zaWduID09IE1QX1pQT1MpID8gMCA6IDEpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3RvX3NpZ25lZF9iaW4uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF90b19zaWduZWRfYmluLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3RvX3NpZ25lZF9iaW5fbi5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1RPX1NJR05FRF9CSU5fTl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBzdG9yZSBpbiBzaWduZWQgW2JpZyBlbmRpYW5dIGZvcm1hdCAqLworaW50IG1wX3RvX3NpZ25lZF9iaW5fbiAobXBfaW50ICogYSwgdW5zaWduZWQgY2hhciAqYiwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgaWYgKCpvdXRsZW4gPCAodW5zaWduZWQgbG9uZyltcF9zaWduZWRfYmluX3NpemUoYSkpIHsKKyAgICAgIHJldHVybiBNUF9WQUw7CisgICB9CisgICAqb3V0bGVuID0gbXBfc2lnbmVkX2Jpbl9zaXplKGEpOworICAgcmV0dXJuIG1wX3RvX3NpZ25lZF9iaW4oYSwgYik7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF90b19zaWduZWRfYmluX24uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF90b19zaWduZWRfYmluX24uYyAqLworCisvKiBTdGFydDogYm5fbXBfdG9fdW5zaWduZWRfYmluLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfVE9fVU5TSUdORURfQklOX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHN0b3JlIGluIHVuc2lnbmVkIFtiaWcgZW5kaWFuXSBmb3JtYXQgKi8KK2ludCBtcF90b191bnNpZ25lZF9iaW4gKG1wX2ludCAqIGEsIHVuc2lnbmVkIGNoYXIgKmIpCit7CisgIGludCAgICAgeCwgcmVzOworICBtcF9pbnQgIHQ7CisKKyAgaWYgKChyZXMgPSBtcF9pbml0X2NvcHkgKCZ0LCBhKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKworICB4ID0gMDsKKyAgd2hpbGUgKG1wX2lzemVybyAoJnQpID09IDApIHsKKyNpZm5kZWYgTVBfOEJJVAorICAgICAgYlt4KytdID0gKHVuc2lnbmVkIGNoYXIpICh0LmRwWzBdICYgMjU1KTsKKyNlbHNlCisgICAgICBiW3grK10gPSAodW5zaWduZWQgY2hhcikgKHQuZHBbMF0gfCAoKHQuZHBbMV0gJiAweDAxKSA8PCA3KSk7CisjZW5kaWYKKyAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yZCAoJnQsIDgsICZ0LCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgICAgbXBfY2xlYXIgKCZ0KTsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisgIGJuX3JldmVyc2UgKGIsIHgpOworICBtcF9jbGVhciAoJnQpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3RvX3Vuc2lnbmVkX2Jpbi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3RvX3Vuc2lnbmVkX2Jpbi5jICovCisKKy8qIFN0YXJ0OiBibl9tcF90b191bnNpZ25lZF9iaW5fbi5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9OX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHN0b3JlIGluIHVuc2lnbmVkIFtiaWcgZW5kaWFuXSBmb3JtYXQgKi8KK2ludCBtcF90b191bnNpZ25lZF9iaW5fbiAobXBfaW50ICogYSwgdW5zaWduZWQgY2hhciAqYiwgdW5zaWduZWQgbG9uZyAqb3V0bGVuKQoreworICAgaWYgKCpvdXRsZW4gPCAodW5zaWduZWQgbG9uZyltcF91bnNpZ25lZF9iaW5fc2l6ZShhKSkgeworICAgICAgcmV0dXJuIE1QX1ZBTDsKKyAgIH0KKyAgICpvdXRsZW4gPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShhKTsKKyAgIHJldHVybiBtcF90b191bnNpZ25lZF9iaW4oYSwgYik7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF90b191bnNpZ25lZF9iaW5fbi5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3RvX3Vuc2lnbmVkX2Jpbl9uLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3Rvb21fbXVsLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfVE9PTV9NVUxfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogbXVsdGlwbGljYXRpb24gdXNpbmcgdGhlIFRvb20tQ29vayAzLXdheSBhbGdvcml0aG0gCisgKgorICogTXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gS2FyYXRzdWJhIGJ1dCBoYXMgYSBsb3dlciAKKyAqIGFzeW1wdG90aWMgcnVubmluZyB0aW1lIG9mIE8oTioqMS40NjQpLiAgVGhpcyBhbGdvcml0aG0gaXMgCisgKiBvbmx5IHBhcnRpY3VsYXJseSB1c2VmdWwgb24gVkVSWSBsYXJnZSBpbnB1dHMgCisgKiAod2UncmUgdGFsa2luZyAxMDAwcyBvZiBkaWdpdHMgaGVyZS4uLikuCisqLworaW50IG1wX3Rvb21fbXVsKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpCit7CisgICAgbXBfaW50IHcwLCB3MSwgdzIsIHczLCB3NCwgdG1wMSwgdG1wMiwgYTAsIGExLCBhMiwgYjAsIGIxLCBiMjsKKyAgICBpbnQgcmVzLCBCOworICAgICAgICAKKyAgICAvKiBpbml0IHRlbXBzICovCisgICAgaWYgKChyZXMgPSBtcF9pbml0X211bHRpKCZ3MCwgJncxLCAmdzIsICZ3MywgJnc0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmEwLCAmYTEsICZhMiwgJmIwLCAmYjEsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYjIsICZ0bXAxLCAmdG1wMiwgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICAKKyAgICAvKiBCICovCisgICAgQiA9IE1JTihhLT51c2VkLCBiLT51c2VkKSAvIDM7CisgICAgCisgICAgLyogYSA9IGEyICogQioqMiArIGExICogQiArIGEwICovCisgICAgaWYgKChyZXMgPSBtcF9tb2RfMmQoYSwgRElHSVRfQklUICogQiwgJmEwKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfY29weShhLCAmYTEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIG1wX3JzaGQoJmExLCBCKTsKKyAgICBtcF9tb2RfMmQoJmExLCBESUdJVF9CSVQgKiBCLCAmYTEpOworCisgICAgaWYgKChyZXMgPSBtcF9jb3B5KGEsICZhMikpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgbXBfcnNoZCgmYTIsIEIqMik7CisgICAgCisgICAgLyogYiA9IGIyICogQioqMiArIGIxICogQiArIGIwICovCisgICAgaWYgKChyZXMgPSBtcF9tb2RfMmQoYiwgRElHSVRfQklUICogQiwgJmIwKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfY29weShiLCAmYjEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIG1wX3JzaGQoJmIxLCBCKTsKKyAgICBtcF9tb2RfMmQoJmIxLCBESUdJVF9CSVQgKiBCLCAmYjEpOworCisgICAgaWYgKChyZXMgPSBtcF9jb3B5KGIsICZiMikpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgbXBfcnNoZCgmYjIsIEIqMik7CisgICAgCisgICAgLyogdzAgPSBhMCpiMCAqLworICAgIGlmICgocmVzID0gbXBfbXVsKCZhMCwgJmIwLCAmdzApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIAorICAgIC8qIHc0ID0gYTIgKiBiMiAqLworICAgIGlmICgocmVzID0gbXBfbXVsKCZhMiwgJmIyLCAmdzQpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIAorICAgIC8qIHcxID0gKGEyICsgMihhMSArIDJhMCkpKGIyICsgMihiMSArIDJiMCkpICovCisgICAgaWYgKChyZXMgPSBtcF9tdWxfMigmYTAsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmExLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9tdWxfMigmdG1wMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAxLCAmYTIsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICAKKyAgICBpZiAoKHJlcyA9IG1wX211bF8yKCZiMCwgJnRtcDIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAyLCAmYjEsICZ0bXAyKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX211bF8yKCZ0bXAyLCAmdG1wMikpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9hZGQoJnRtcDIsICZiMiwgJnRtcDIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIAorICAgIGlmICgocmVzID0gbXBfbXVsKCZ0bXAxLCAmdG1wMiwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICAKKyAgICAvKiB3MyA9IChhMCArIDIoYTEgKyAyYTIpKShiMCArIDIoYjEgKyAyYjIpKSAqLworICAgIGlmICgocmVzID0gbXBfbXVsXzIoJmEyLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9hZGQoJnRtcDEsICZhMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfbXVsXzIoJnRtcDEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmEwLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgCisgICAgaWYgKChyZXMgPSBtcF9tdWxfMigmYjIsICZ0bXAyKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMiwgJmIxLCAmdG1wMikpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9tdWxfMigmdG1wMiwgJnRtcDIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAyLCAmYjAsICZ0bXAyKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICAKKyAgICBpZiAoKHJlcyA9IG1wX211bCgmdG1wMSwgJnRtcDIsICZ3MykpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgCisKKyAgICAvKiB3MiA9IChhMiArIGExICsgYTApKGIyICsgYjEgKyBiMCkgKi8KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmYTIsICZhMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAxLCAmYTAsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmYjIsICZiMSwgJnRtcDIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAyLCAmYjAsICZ0bXAyKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX211bCgmdG1wMSwgJnRtcDIsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgCisgICAgLyogbm93IHNvbHZlIHRoZSBtYXRyaXggCisgICAgCisgICAgICAgMCAgMCAgMCAgMCAgMQorICAgICAgIDEgIDIgIDQgIDggIDE2CisgICAgICAgMSAgMSAgMSAgMSAgMQorICAgICAgIDE2IDggIDQgIDIgIDEKKyAgICAgICAxICAwICAwICAwICAwCisgICAgICAgCisgICAgICAgdXNpbmcgMTIgc3VidHJhY3Rpb25zLCA0IHNoaWZ0cywgCisgICAgICAgICAgICAgIDIgc21hbGwgZGl2aXNpb25zIGFuZCAxIHNtYWxsIG11bHRpcGxpY2F0aW9uIAorICAgICAqLworICAgICAKKyAgICAgLyogcjEgLSByNCAqLworICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzEsICZ3NCwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMyAtIHIwICovCisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MywgJncwLCAmdzMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIxLzIgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9kaXZfMigmdzEsICZ3MSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjMvMiAqLworICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yKCZ3MywgJnczKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMiAtIHIwIC0gcjQgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncyLCAmdzAsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncyLCAmdzQsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjEgLSByMiAqLworICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzEsICZ3MiwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMyAtIHIyICovCisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MywgJncyLCAmdzMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIxIC0gOHIwICovCisgICAgIGlmICgocmVzID0gbXBfbXVsXzJkKCZ3MCwgMywgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MSwgJnRtcDEsICZ3MSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjMgLSA4cjQgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9tdWxfMmQoJnc0LCAzLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJnczLCAmdG1wMSwgJnczKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiAzcjIgLSByMSAtIHIzICovCisgICAgIGlmICgocmVzID0gbXBfbXVsX2QoJncyLCAzLCAmdzIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MiwgJncxLCAmdzIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MiwgJnczLCAmdzIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIxIC0gcjIgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncxLCAmdzIsICZ3MSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjMgLSByMiAqLworICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzMsICZ3MiwgJnczKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMS8zICovCisgICAgIGlmICgocmVzID0gbXBfZGl2XzMoJncxLCAmdzEsIE5VTEwpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIzLzMgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9kaXZfMygmdzMsICZ3MywgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgCisgICAgIC8qIGF0IHRoaXMgcG9pbnQgc2hpZnQgV1tuXSBieSBCKm4gKi8KKyAgICAgaWYgKChyZXMgPSBtcF9sc2hkKCZ3MSwgMSpCKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX2xzaGQoJncyLCAyKkIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfbHNoZCgmdzMsIDMqQikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9sc2hkKCZ3NCwgNCpCKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfSAgICAgCisgICAgIAorICAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdzAsICZ3MSwgYykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9hZGQoJncyLCAmdzMsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdzQsICZ0bXAxLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9hZGQoJnRtcDEsIGMsIGMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9ICAgICAKKyAgICAgCitFUlI6CisgICAgIG1wX2NsZWFyX211bHRpKCZ3MCwgJncxLCAmdzIsICZ3MywgJnc0LCAKKyAgICAgICAgICAgICAgICAgICAgJmEwLCAmYTEsICZhMiwgJmIwLCAmYjEsIAorICAgICAgICAgICAgICAgICAgICAmYjIsICZ0bXAxLCAmdG1wMiwgTlVMTCk7CisgICAgIHJldHVybiByZXM7Cit9ICAgICAKKyAgICAgCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF90b29tX211bC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3Rvb21fbXVsLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3Rvb21fc3FyLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfVE9PTV9TUVJfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogc3F1YXJpbmcgdXNpbmcgVG9vbS1Db29rIDMtd2F5IGFsZ29yaXRobSAqLworaW50CittcF90b29tX3NxcihtcF9pbnQgKmEsIG1wX2ludCAqYikKK3sKKyAgICBtcF9pbnQgdzAsIHcxLCB3MiwgdzMsIHc0LCB0bXAxLCBhMCwgYTEsIGEyOworICAgIGludCByZXMsIEI7CisKKyAgICAvKiBpbml0IHRlbXBzICovCisgICAgaWYgKChyZXMgPSBtcF9pbml0X211bHRpKCZ3MCwgJncxLCAmdzIsICZ3MywgJnc0LCAmYTAsICZhMSwgJmEyLCAmdG1wMSwgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgICByZXR1cm4gcmVzOworICAgIH0KKworICAgIC8qIEIgKi8KKyAgICBCID0gYS0+dXNlZCAvIDM7CisKKyAgICAvKiBhID0gYTIgKiBCKioyICsgYTEgKiBCICsgYTAgKi8KKyAgICBpZiAoKHJlcyA9IG1wX21vZF8yZChhLCBESUdJVF9CSVQgKiBCLCAmYTApKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorCisgICAgaWYgKChyZXMgPSBtcF9jb3B5KGEsICZhMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgbXBfcnNoZCgmYTEsIEIpOworICAgIG1wX21vZF8yZCgmYTEsIERJR0lUX0JJVCAqIEIsICZhMSk7CisKKyAgICBpZiAoKHJlcyA9IG1wX2NvcHkoYSwgJmEyKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBtcF9yc2hkKCZhMiwgQioyKTsKKworICAgIC8qIHcwID0gYTAqYTAgKi8KKyAgICBpZiAoKHJlcyA9IG1wX3NxcigmYTAsICZ3MCkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisKKyAgICAvKiB3NCA9IGEyICogYTIgKi8KKyAgICBpZiAoKHJlcyA9IG1wX3NxcigmYTIsICZ3NCkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisKKyAgICAvKiB3MSA9IChhMiArIDIoYTEgKyAyYTApKSoqMiAqLworICAgIGlmICgocmVzID0gbXBfbXVsXzIoJmEwLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9hZGQoJnRtcDEsICZhMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfbXVsXzIoJnRtcDEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmEyLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisKKyAgICBpZiAoKHJlcyA9IG1wX3NxcigmdG1wMSwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKworICAgIC8qIHczID0gKGEwICsgMihhMSArIDJhMikpKioyICovCisgICAgaWYgKChyZXMgPSBtcF9tdWxfMigmYTIsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmExLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9tdWxfMigmdG1wMSwgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfYWRkKCZ0bXAxLCAmYTAsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKworICAgIGlmICgocmVzID0gbXBfc3FyKCZ0bXAxLCAmdzMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgZ290byBFUlI7CisgICAgfQorCisKKyAgICAvKiB3MiA9IChhMiArIGExICsgYTApKioyICovCisgICAgaWYgKChyZXMgPSBtcF9hZGQoJmEyLCAmYTEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgIGdvdG8gRVJSOworICAgIH0KKyAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgJmEwLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisgICAgaWYgKChyZXMgPSBtcF9zcXIoJnRtcDEsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICBnb3RvIEVSUjsKKyAgICB9CisKKyAgICAvKiBub3cgc29sdmUgdGhlIG1hdHJpeAorCisgICAgICAgMCAgMCAgMCAgMCAgMQorICAgICAgIDEgIDIgIDQgIDggIDE2CisgICAgICAgMSAgMSAgMSAgMSAgMQorICAgICAgIDE2IDggIDQgIDIgIDEKKyAgICAgICAxICAwICAwICAwICAwCisKKyAgICAgICB1c2luZyAxMiBzdWJ0cmFjdGlvbnMsIDQgc2hpZnRzLCAyIHNtYWxsIGRpdmlzaW9ucyBhbmQgMSBzbWFsbCBtdWx0aXBsaWNhdGlvbi4KKyAgICAgKi8KKworICAgICAvKiByMSAtIHI0ICovCisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MSwgJnc0LCAmdzEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIzIC0gcjAgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJnczLCAmdzAsICZ3MykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjEvMiAqLworICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8yKCZ3MSwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMy8yICovCisgICAgIGlmICgocmVzID0gbXBfZGl2XzIoJnczLCAmdzMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIyIC0gcjAgLSByNCAqLworICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzIsICZ3MCwgJncyKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzIsICZ3NCwgJncyKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMSAtIHIyICovCisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MSwgJncyLCAmdzEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIzIC0gcjIgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJnczLCAmdzIsICZ3MykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjEgLSA4cjAgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9tdWxfMmQoJncwLCAzLCAmdG1wMSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncxLCAmdG1wMSwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMyAtIDhyNCAqLworICAgICBpZiAoKHJlcyA9IG1wX211bF8yZCgmdzQsIDMsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzMsICZ0bXAxLCAmdzMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIDNyMiAtIHIxIC0gcjMgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9tdWxfZCgmdzIsIDMsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncyLCAmdzEsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9zdWIoJncyLCAmdzMsICZ3MikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjEgLSByMiAqLworICAgICBpZiAoKHJlcyA9IG1wX3N1YigmdzEsICZ3MiwgJncxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICAvKiByMyAtIHIyICovCisgICAgIGlmICgocmVzID0gbXBfc3ViKCZ3MywgJncyLCAmdzMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIC8qIHIxLzMgKi8KKyAgICAgaWYgKChyZXMgPSBtcF9kaXZfMygmdzEsICZ3MSwgTlVMTCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgLyogcjMvMyAqLworICAgICBpZiAoKHJlcyA9IG1wX2Rpdl8zKCZ3MywgJnczLCBOVUxMKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorCisgICAgIC8qIGF0IHRoaXMgcG9pbnQgc2hpZnQgV1tuXSBieSBCKm4gKi8KKyAgICAgaWYgKChyZXMgPSBtcF9sc2hkKCZ3MSwgMSpCKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX2xzaGQoJncyLCAyKkIpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfbHNoZCgmdzMsIDMqQikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKyAgICAgaWYgKChyZXMgPSBtcF9sc2hkKCZ3NCwgNCpCKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorCisgICAgIGlmICgocmVzID0gbXBfYWRkKCZ3MCwgJncxLCBiKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdzIsICZ3MywgJnRtcDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gRVJSOworICAgICB9CisgICAgIGlmICgocmVzID0gbXBfYWRkKCZ3NCwgJnRtcDEsICZ0bXAxKSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIEVSUjsKKyAgICAgfQorICAgICBpZiAoKHJlcyA9IG1wX2FkZCgmdG1wMSwgYiwgYikpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBFUlI7CisgICAgIH0KKworRVJSOgorICAgICBtcF9jbGVhcl9tdWx0aSgmdzAsICZ3MSwgJncyLCAmdzMsICZ3NCwgJmEwLCAmYTEsICZhMiwgJnRtcDEsIE5VTEwpOworICAgICByZXR1cm4gcmVzOworfQorCisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF90b29tX3Nxci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3Rvb21fc3FyLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3RvcmFkaXguYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9NUF9UT1JBRElYX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHN0b3JlcyBhIGJpZ251bSBhcyBhIEFTQ0lJIHN0cmluZyBpbiBhIGdpdmVuIHJhZGl4ICgyLi42NCkgKi8KK2ludCBtcF90b3JhZGl4IChtcF9pbnQgKiBhLCBjaGFyICpzdHIsIGludCByYWRpeCkKK3sKKyAgaW50ICAgICByZXMsIGRpZ3M7CisgIG1wX2ludCAgdDsKKyAgbXBfZGlnaXQgZDsKKyAgY2hhciAgICpfcyA9IHN0cjsKKworICAvKiBjaGVjayByYW5nZSBvZiB0aGUgcmFkaXggKi8KKyAgaWYgKHJhZGl4IDwgMiB8fCByYWRpeCA+IDY0KSB7CisgICAgcmV0dXJuIE1QX1ZBTDsKKyAgfQorCisgIC8qIHF1aWNrIG91dCBpZiBpdHMgemVybyAqLworICBpZiAobXBfaXN6ZXJvKGEpID09IDEpIHsKKyAgICAgKnN0cisrID0gJzAnOworICAgICAqc3RyID0gJ1wwJzsKKyAgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnQsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIGlmIGl0IGlzIG5lZ2F0aXZlIG91dHB1dCBhIC0gKi8KKyAgaWYgKHQuc2lnbiA9PSBNUF9ORUcpIHsKKyAgICArK19zOworICAgICpzdHIrKyA9ICctJzsKKyAgICB0LnNpZ24gPSBNUF9aUE9TOworICB9CisKKyAgZGlncyA9IDA7CisgIHdoaWxlIChtcF9pc3plcm8gKCZ0KSA9PSAwKSB7CisgICAgaWYgKChyZXMgPSBtcF9kaXZfZCAoJnQsIChtcF9kaWdpdCkgcmFkaXgsICZ0LCAmZCkpICE9IE1QX09LQVkpIHsKKyAgICAgIG1wX2NsZWFyICgmdCk7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICAqc3RyKysgPSBtcF9zX3JtYXBbZF07CisgICAgKytkaWdzOworICB9CisKKyAgLyogcmV2ZXJzZSB0aGUgZGlnaXRzIG9mIHRoZSBzdHJpbmcuICBJbiB0aGlzIGNhc2UgX3MgcG9pbnRzCisgICAqIHRvIHRoZSBmaXJzdCBkaWdpdCBbZXhsdWRpbmcgdGhlIHNpZ25dIG9mIHRoZSBudW1iZXJdCisgICAqLworICBibl9yZXZlcnNlICgodW5zaWduZWQgY2hhciAqKV9zLCBkaWdzKTsKKworICAvKiBhcHBlbmQgYSBOVUxMIHNvIHRoZSBzdHJpbmcgaXMgcHJvcGVybHkgdGVybWluYXRlZCAqLworICAqc3RyID0gJ1wwJzsKKworICBtcF9jbGVhciAoJnQpOworICByZXR1cm4gTVBfT0tBWTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfdG9yYWRpeC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3RvcmFkaXguYyAqLworCisvKiBTdGFydDogYm5fbXBfdG9yYWRpeF9uLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfVE9SQURJWF9OX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHN0b3JlcyBhIGJpZ251bSBhcyBhIEFTQ0lJIHN0cmluZyBpbiBhIGdpdmVuIHJhZGl4ICgyLi42NCkgCisgKgorICogU3RvcmVzIHVwdG8gbWF4bGVuLTEgY2hhcnMgYW5kIGFsd2F5cyBhIE5VTEwgYnl0ZSAKKyAqLworaW50IG1wX3RvcmFkaXhfbihtcF9pbnQgKiBhLCBjaGFyICpzdHIsIGludCByYWRpeCwgaW50IG1heGxlbikKK3sKKyAgaW50ICAgICByZXMsIGRpZ3M7CisgIG1wX2ludCAgdDsKKyAgbXBfZGlnaXQgZDsKKyAgY2hhciAgICpfcyA9IHN0cjsKKworICAvKiBjaGVjayByYW5nZSBvZiB0aGUgbWF4bGVuLCByYWRpeCAqLworICBpZiAobWF4bGVuIDwgMiB8fCByYWRpeCA8IDIgfHwgcmFkaXggPiA2NCkgeworICAgIHJldHVybiBNUF9WQUw7CisgIH0KKworICAvKiBxdWljayBvdXQgaWYgaXRzIHplcm8gKi8KKyAgaWYgKG1wX2lzemVybyhhKSA9PSBNUF9ZRVMpIHsKKyAgICAgKnN0cisrID0gJzAnOworICAgICAqc3RyID0gJ1wwJzsKKyAgICAgcmV0dXJuIE1QX09LQVk7CisgIH0KKworICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnQsIGEpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIGlmIGl0IGlzIG5lZ2F0aXZlIG91dHB1dCBhIC0gKi8KKyAgaWYgKHQuc2lnbiA9PSBNUF9ORUcpIHsKKyAgICAvKiB3ZSBoYXZlIHRvIHJldmVyc2Ugb3VyIGRpZ2l0cyBsYXRlci4uLiBidXQgbm90IHRoZSAtIHNpZ24hISAqLworICAgICsrX3M7CisKKyAgICAvKiBzdG9yZSB0aGUgZmxhZyBhbmQgbWFyayB0aGUgbnVtYmVyIGFzIHBvc2l0aXZlICovCisgICAgKnN0cisrID0gJy0nOworICAgIHQuc2lnbiA9IE1QX1pQT1M7CisgCisgICAgLyogc3VidHJhY3QgYSBjaGFyICovCisgICAgLS1tYXhsZW47CisgIH0KKworICBkaWdzID0gMDsKKyAgd2hpbGUgKG1wX2lzemVybyAoJnQpID09IDApIHsKKyAgICBpZiAoLS1tYXhsZW4gPCAxKSB7CisgICAgICAgLyogbm8gbW9yZSByb29tICovCisgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmICgocmVzID0gbXBfZGl2X2QgKCZ0LCAobXBfZGlnaXQpIHJhZGl4LCAmdCwgJmQpKSAhPSBNUF9PS0FZKSB7CisgICAgICBtcF9jbGVhciAoJnQpOworICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgKnN0cisrID0gbXBfc19ybWFwW2RdOworICAgICsrZGlnczsKKyAgfQorCisgIC8qIHJldmVyc2UgdGhlIGRpZ2l0cyBvZiB0aGUgc3RyaW5nLiAgSW4gdGhpcyBjYXNlIF9zIHBvaW50cworICAgKiB0byB0aGUgZmlyc3QgZGlnaXQgW2V4bHVkaW5nIHRoZSBzaWduXSBvZiB0aGUgbnVtYmVyCisgICAqLworICBibl9yZXZlcnNlICgodW5zaWduZWQgY2hhciAqKV9zLCBkaWdzKTsKKworICAvKiBhcHBlbmQgYSBOVUxMIHNvIHRoZSBzdHJpbmcgaXMgcHJvcGVybHkgdGVybWluYXRlZCAqLworICAqc3RyID0gJ1wwJzsKKworICBtcF9jbGVhciAoJnQpOworICByZXR1cm4gTVBfT0tBWTsKK30KKworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fbXBfdG9yYWRpeF9uLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuNCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fbXBfdG9yYWRpeF9uLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3Vuc2lnbmVkX2Jpbl9zaXplLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfVU5TSUdORURfQklOX1NJWkVfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogZ2V0IHRoZSBzaXplIGZvciBhbiB1bnNpZ25lZCBlcXVpdmFsZW50ICovCitpbnQgbXBfdW5zaWduZWRfYmluX3NpemUgKG1wX2ludCAqIGEpCit7CisgIGludCAgICAgc2l6ZSA9IG1wX2NvdW50X2JpdHMgKGEpOworICByZXR1cm4gKHNpemUgLyA4ICsgKChzaXplICYgNykgIT0gMCA/IDEgOiAwKSk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9tcF91bnNpZ25lZF9iaW5fc2l6ZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3Vuc2lnbmVkX2Jpbl9zaXplLmMgKi8KKworLyogU3RhcnQ6IGJuX21wX3hvci5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX01QX1hPUl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBYT1IgdHdvIGludHMgdG9nZXRoZXIgKi8KK2ludAorbXBfeG9yIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjKQoreworICBpbnQgICAgIHJlcywgaXgsIHB4OworICBtcF9pbnQgIHQsICp4OworCisgIGlmIChhLT51c2VkID4gYi0+dXNlZCkgeworICAgIGlmICgocmVzID0gbXBfaW5pdF9jb3B5ICgmdCwgYSkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIHB4ID0gYi0+dXNlZDsKKyAgICB4ID0gYjsKKyAgfSBlbHNlIHsKKyAgICBpZiAoKHJlcyA9IG1wX2luaXRfY29weSAoJnQsIGIpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBweCA9IGEtPnVzZWQ7CisgICAgeCA9IGE7CisgIH0KKworICBmb3IgKGl4ID0gMDsgaXggPCBweDsgaXgrKykgeworICAgICB0LmRwW2l4XSBePSB4LT5kcFtpeF07CisgIH0KKyAgbXBfY2xhbXAgKCZ0KTsKKyAgbXBfZXhjaCAoYywgJnQpOworICBtcF9jbGVhciAoJnQpOworICByZXR1cm4gTVBfT0tBWTsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3hvci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX21wX3hvci5jICovCisKKy8qIFN0YXJ0OiBibl9tcF96ZXJvLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fTVBfWkVST19DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBzZXQgdG8gemVybyAqLwordm9pZCBtcF96ZXJvIChtcF9pbnQgKiBhKQoreworICBpbnQgICAgICAgbjsKKyAgbXBfZGlnaXQgKnRtcDsKKworICBhLT5zaWduID0gTVBfWlBPUzsKKyAgYS0+dXNlZCA9IDA7CisKKyAgdG1wID0gYS0+ZHA7CisgIGZvciAobiA9IDA7IG4gPCBhLT5hbGxvYzsgbisrKSB7CisgICAgICp0bXArKyA9IDA7CisgIH0KK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX21wX3plcm8uYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9tcF96ZXJvLmMgKi8KKworLyogU3RhcnQ6IGJuX3ByaW1lX3RhYi5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX1BSSU1FX1RBQl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworY29uc3QgbXBfZGlnaXQgbHRtX3ByaW1lX3RhYltdID0geworICAweDAwMDIsIDB4MDAwMywgMHgwMDA1LCAweDAwMDcsIDB4MDAwQiwgMHgwMDBELCAweDAwMTEsIDB4MDAxMywKKyAgMHgwMDE3LCAweDAwMUQsIDB4MDAxRiwgMHgwMDI1LCAweDAwMjksIDB4MDAyQiwgMHgwMDJGLCAweDAwMzUsCisgIDB4MDAzQiwgMHgwMDNELCAweDAwNDMsIDB4MDA0NywgMHgwMDQ5LCAweDAwNEYsIDB4MDA1MywgMHgwMDU5LAorICAweDAwNjEsIDB4MDA2NSwgMHgwMDY3LCAweDAwNkIsIDB4MDA2RCwgMHgwMDcxLCAweDAwN0YsCisjaWZuZGVmIE1QXzhCSVQKKyAgMHgwMDgzLAorICAweDAwODksIDB4MDA4QiwgMHgwMDk1LCAweDAwOTcsIDB4MDA5RCwgMHgwMEEzLCAweDAwQTcsIDB4MDBBRCwKKyAgMHgwMEIzLCAweDAwQjUsIDB4MDBCRiwgMHgwMEMxLCAweDAwQzUsIDB4MDBDNywgMHgwMEQzLCAweDAwREYsCisgIDB4MDBFMywgMHgwMEU1LCAweDAwRTksIDB4MDBFRiwgMHgwMEYxLCAweDAwRkIsIDB4MDEwMSwgMHgwMTA3LAorICAweDAxMEQsIDB4MDEwRiwgMHgwMTE1LCAweDAxMTksIDB4MDExQiwgMHgwMTI1LCAweDAxMzMsIDB4MDEzNywKKworICAweDAxMzksIDB4MDEzRCwgMHgwMTRCLCAweDAxNTEsIDB4MDE1QiwgMHgwMTVELCAweDAxNjEsIDB4MDE2NywKKyAgMHgwMTZGLCAweDAxNzUsIDB4MDE3QiwgMHgwMTdGLCAweDAxODUsIDB4MDE4RCwgMHgwMTkxLCAweDAxOTksCisgIDB4MDFBMywgMHgwMUE1LCAweDAxQUYsIDB4MDFCMSwgMHgwMUI3LCAweDAxQkIsIDB4MDFDMSwgMHgwMUM5LAorICAweDAxQ0QsIDB4MDFDRiwgMHgwMUQzLCAweDAxREYsIDB4MDFFNywgMHgwMUVCLCAweDAxRjMsIDB4MDFGNywKKyAgMHgwMUZELCAweDAyMDksIDB4MDIwQiwgMHgwMjFELCAweDAyMjMsIDB4MDIyRCwgMHgwMjMzLCAweDAyMzksCisgIDB4MDIzQiwgMHgwMjQxLCAweDAyNEIsIDB4MDI1MSwgMHgwMjU3LCAweDAyNTksIDB4MDI1RiwgMHgwMjY1LAorICAweDAyNjksIDB4MDI2QiwgMHgwMjc3LCAweDAyODEsIDB4MDI4MywgMHgwMjg3LCAweDAyOEQsIDB4MDI5MywKKyAgMHgwMjk1LCAweDAyQTEsIDB4MDJBNSwgMHgwMkFCLCAweDAyQjMsIDB4MDJCRCwgMHgwMkM1LCAweDAyQ0YsCisKKyAgMHgwMkQ3LCAweDAyREQsIDB4MDJFMywgMHgwMkU3LCAweDAyRUYsIDB4MDJGNSwgMHgwMkY5LCAweDAzMDEsCisgIDB4MDMwNSwgMHgwMzEzLCAweDAzMUQsIDB4MDMyOSwgMHgwMzJCLCAweDAzMzUsIDB4MDMzNywgMHgwMzNCLAorICAweDAzM0QsIDB4MDM0NywgMHgwMzU1LCAweDAzNTksIDB4MDM1QiwgMHgwMzVGLCAweDAzNkQsIDB4MDM3MSwKKyAgMHgwMzczLCAweDAzNzcsIDB4MDM4QiwgMHgwMzhGLCAweDAzOTcsIDB4MDNBMSwgMHgwM0E5LCAweDAzQUQsCisgIDB4MDNCMywgMHgwM0I5LCAweDAzQzcsIDB4MDNDQiwgMHgwM0QxLCAweDAzRDcsIDB4MDNERiwgMHgwM0U1LAorICAweDAzRjEsIDB4MDNGNSwgMHgwM0ZCLCAweDAzRkQsIDB4MDQwNywgMHgwNDA5LCAweDA0MEYsIDB4MDQxOSwKKyAgMHgwNDFCLCAweDA0MjUsIDB4MDQyNywgMHgwNDJELCAweDA0M0YsIDB4MDQ0MywgMHgwNDQ1LCAweDA0NDksCisgIDB4MDQ0RiwgMHgwNDU1LCAweDA0NUQsIDB4MDQ2MywgMHgwNDY5LCAweDA0N0YsIDB4MDQ4MSwgMHgwNDhCLAorCisgIDB4MDQ5MywgMHgwNDlELCAweDA0QTMsIDB4MDRBOSwgMHgwNEIxLCAweDA0QkQsIDB4MDRDMSwgMHgwNEM3LAorICAweDA0Q0QsIDB4MDRDRiwgMHgwNEQ1LCAweDA0RTEsIDB4MDRFQiwgMHgwNEZELCAweDA0RkYsIDB4MDUwMywKKyAgMHgwNTA5LCAweDA1MEIsIDB4MDUxMSwgMHgwNTE1LCAweDA1MTcsIDB4MDUxQiwgMHgwNTI3LCAweDA1MjksCisgIDB4MDUyRiwgMHgwNTUxLCAweDA1NTcsIDB4MDU1RCwgMHgwNTY1LCAweDA1NzcsIDB4MDU4MSwgMHgwNThGLAorICAweDA1OTMsIDB4MDU5NSwgMHgwNTk5LCAweDA1OUYsIDB4MDVBNywgMHgwNUFCLCAweDA1QUQsIDB4MDVCMywKKyAgMHgwNUJGLCAweDA1QzksIDB4MDVDQiwgMHgwNUNGLCAweDA1RDEsIDB4MDVENSwgMHgwNURCLCAweDA1RTcsCisgIDB4MDVGMywgMHgwNUZCLCAweDA2MDcsIDB4MDYwRCwgMHgwNjExLCAweDA2MTcsIDB4MDYxRiwgMHgwNjIzLAorICAweDA2MkIsIDB4MDYyRiwgMHgwNjNELCAweDA2NDEsIDB4MDY0NywgMHgwNjQ5LCAweDA2NEQsIDB4MDY1MworI2VuZGlmCit9OworI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fcHJpbWVfdGFiLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fcHJpbWVfdGFiLmMgKi8KKworLyogU3RhcnQ6IGJuX3JldmVyc2UuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9SRVZFUlNFX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIHJldmVyc2UgYW4gYXJyYXksIHVzZWQgZm9yIHJhZGl4IGNvZGUgKi8KK3ZvaWQKK2JuX3JldmVyc2UgKHVuc2lnbmVkIGNoYXIgKnMsIGludCBsZW4pCit7CisgIGludCAgICAgaXgsIGl5OworICB1bnNpZ25lZCBjaGFyIHQ7CisKKyAgaXggPSAwOworICBpeSA9IGxlbiAtIDE7CisgIHdoaWxlIChpeCA8IGl5KSB7CisgICAgdCAgICAgPSBzW2l4XTsKKyAgICBzW2l4XSA9IHNbaXldOworICAgIHNbaXldID0gdDsKKyAgICArK2l4OworICAgIC0taXk7CisgIH0KK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX3JldmVyc2UuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9yZXZlcnNlLmMgKi8KKworLyogU3RhcnQ6IGJuX3NfbXBfYWRkLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fU19NUF9BRERfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogbG93IGxldmVsIGFkZGl0aW9uLCBiYXNlZCBvbiBIQUMgcHAuNTk0LCBBbGdvcml0aG0gMTQuNyAqLworaW50CitzX21wX2FkZCAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYykKK3sKKyAgbXBfaW50ICp4OworICBpbnQgICAgIG9sZHVzZSwgcmVzLCBtaW4sIG1heDsKKworICAvKiBmaW5kIHNpemVzLCB3ZSBsZXQgfGF8IDw9IHxifCB3aGljaCBtZWFucyB3ZSBoYXZlIHRvIHNvcnQKKyAgICogdGhlbS4gICJ4IiB3aWxsIHBvaW50IHRvIHRoZSBpbnB1dCB3aXRoIHRoZSBtb3N0IGRpZ2l0cworICAgKi8KKyAgaWYgKGEtPnVzZWQgPiBiLT51c2VkKSB7CisgICAgbWluID0gYi0+dXNlZDsKKyAgICBtYXggPSBhLT51c2VkOworICAgIHggPSBhOworICB9IGVsc2UgeworICAgIG1pbiA9IGEtPnVzZWQ7CisgICAgbWF4ID0gYi0+dXNlZDsKKyAgICB4ID0gYjsKKyAgfQorCisgIC8qIGluaXQgcmVzdWx0ICovCisgIGlmIChjLT5hbGxvYyA8IG1heCArIDEpIHsKKyAgICBpZiAoKHJlcyA9IG1wX2dyb3cgKGMsIG1heCArIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgfQorCisgIC8qIGdldCBvbGQgdXNlZCBkaWdpdCBjb3VudCBhbmQgc2V0IG5ldyBvbmUgKi8KKyAgb2xkdXNlID0gYy0+dXNlZDsKKyAgYy0+dXNlZCA9IG1heCArIDE7CisKKyAgeworICAgIHJlZ2lzdGVyIG1wX2RpZ2l0IHUsICp0bXBhLCAqdG1wYiwgKnRtcGM7CisgICAgcmVnaXN0ZXIgaW50IGk7CisKKyAgICAvKiBhbGlhcyBmb3IgZGlnaXQgcG9pbnRlcnMgKi8KKworICAgIC8qIGZpcnN0IGlucHV0ICovCisgICAgdG1wYSA9IGEtPmRwOworCisgICAgLyogc2Vjb25kIGlucHV0ICovCisgICAgdG1wYiA9IGItPmRwOworCisgICAgLyogZGVzdGluYXRpb24gKi8KKyAgICB0bXBjID0gYy0+ZHA7CisKKyAgICAvKiB6ZXJvIHRoZSBjYXJyeSAqLworICAgIHUgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBtaW47IGkrKykgeworICAgICAgLyogQ29tcHV0ZSB0aGUgc3VtIGF0IG9uZSBkaWdpdCwgVFtpXSA9IEFbaV0gKyBCW2ldICsgVSAqLworICAgICAgKnRtcGMgPSAqdG1wYSsrICsgKnRtcGIrKyArIHU7CisKKyAgICAgIC8qIFUgPSBjYXJyeSBiaXQgb2YgVFtpXSAqLworICAgICAgdSA9ICp0bXBjID4+ICgobXBfZGlnaXQpRElHSVRfQklUKTsKKworICAgICAgLyogdGFrZSBhd2F5IGNhcnJ5IGJpdCBmcm9tIFRbaV0gKi8KKyAgICAgICp0bXBjKysgJj0gTVBfTUFTSzsKKyAgICB9CisKKyAgICAvKiBub3cgY29weSBoaWdoZXIgd29yZHMgaWYgYW55LCB0aGF0IGlzIGluIEErQiAKKyAgICAgKiBpZiBBIG9yIEIgaGFzIG1vcmUgZGlnaXRzIGFkZCB0aG9zZSBpbiAKKyAgICAgKi8KKyAgICBpZiAobWluICE9IG1heCkgeworICAgICAgZm9yICg7IGkgPCBtYXg7IGkrKykgeworICAgICAgICAvKiBUW2ldID0gWFtpXSArIFUgKi8KKyAgICAgICAgKnRtcGMgPSB4LT5kcFtpXSArIHU7CisKKyAgICAgICAgLyogVSA9IGNhcnJ5IGJpdCBvZiBUW2ldICovCisgICAgICAgIHUgPSAqdG1wYyA+PiAoKG1wX2RpZ2l0KURJR0lUX0JJVCk7CisKKyAgICAgICAgLyogdGFrZSBhd2F5IGNhcnJ5IGJpdCBmcm9tIFRbaV0gKi8KKyAgICAgICAgKnRtcGMrKyAmPSBNUF9NQVNLOworICAgICAgfQorICAgIH0KKworICAgIC8qIGFkZCBjYXJyeSAqLworICAgICp0bXBjKysgPSB1OworCisgICAgLyogY2xlYXIgZGlnaXRzIGFib3ZlIG9sZHVzZWQgKi8KKyAgICBmb3IgKGkgPSBjLT51c2VkOyBpIDwgb2xkdXNlOyBpKyspIHsKKyAgICAgICp0bXBjKysgPSAwOworICAgIH0KKyAgfQorCisgIG1wX2NsYW1wIChjKTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9zX21wX2FkZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX3NfbXBfYWRkLmMgKi8KKworLyogU3RhcnQ6IGJuX3NfbXBfZXhwdG1vZC5jICovCisjaW5jbHVkZSA8dG9tbWF0aC5oPgorI2lmZGVmIEJOX1NfTVBfRVhQVE1PRF9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworI2lmZGVmIE1QX0xPV19NRU0KKyAgICNkZWZpbmUgVEFCX1NJWkUgMzIKKyNlbHNlCisgICAjZGVmaW5lIFRBQl9TSVpFIDI1NgorI2VuZGlmCisKK2ludCBzX21wX2V4cHRtb2QgKG1wX2ludCAqIEcsIG1wX2ludCAqIFgsIG1wX2ludCAqIFAsIG1wX2ludCAqIFksIGludCByZWRtb2RlKQoreworICBtcF9pbnQgIE1bVEFCX1NJWkVdLCByZXMsIG11OworICBtcF9kaWdpdCBidWY7CisgIGludCAgICAgZXJyLCBiaXRidWYsIGJpdGNweSwgYml0Y250LCBtb2RlLCBkaWdpZHgsIHgsIHksIHdpbnNpemU7CisgIGludCAoKnJlZHV4KShtcF9pbnQqLG1wX2ludCosbXBfaW50Kik7CisKKyAgLyogZmluZCB3aW5kb3cgc2l6ZSAqLworICB4ID0gbXBfY291bnRfYml0cyAoWCk7CisgIGlmICh4IDw9IDcpIHsKKyAgICB3aW5zaXplID0gMjsKKyAgfSBlbHNlIGlmICh4IDw9IDM2KSB7CisgICAgd2luc2l6ZSA9IDM7CisgIH0gZWxzZSBpZiAoeCA8PSAxNDApIHsKKyAgICB3aW5zaXplID0gNDsKKyAgfSBlbHNlIGlmICh4IDw9IDQ1MCkgeworICAgIHdpbnNpemUgPSA1OworICB9IGVsc2UgaWYgKHggPD0gMTMwMykgeworICAgIHdpbnNpemUgPSA2OworICB9IGVsc2UgaWYgKHggPD0gMzUyOSkgeworICAgIHdpbnNpemUgPSA3OworICB9IGVsc2UgeworICAgIHdpbnNpemUgPSA4OworICB9CisKKyNpZmRlZiBNUF9MT1dfTUVNCisgICAgaWYgKHdpbnNpemUgPiA1KSB7CisgICAgICAgd2luc2l6ZSA9IDU7CisgICAgfQorI2VuZGlmCisKKyAgLyogaW5pdCBNIGFycmF5ICovCisgIC8qIGluaXQgZmlyc3QgY2VsbCAqLworICBpZiAoKGVyciA9IG1wX2luaXQoJk1bMV0pKSAhPSBNUF9PS0FZKSB7CisgICAgIHJldHVybiBlcnI7IAorICB9CisKKyAgLyogbm93IGluaXQgdGhlIHNlY29uZCBoYWxmIG9mIHRoZSBhcnJheSAqLworICBmb3IgKHggPSAxPDwod2luc2l6ZS0xKTsgeCA8ICgxIDw8IHdpbnNpemUpOyB4KyspIHsKKyAgICBpZiAoKGVyciA9IG1wX2luaXQoJk1beF0pKSAhPSBNUF9PS0FZKSB7CisgICAgICBmb3IgKHkgPSAxPDwod2luc2l6ZS0xKTsgeSA8IHg7IHkrKykgeworICAgICAgICBtcF9jbGVhciAoJk1beV0pOworICAgICAgfQorICAgICAgbXBfY2xlYXIoJk1bMV0pOworICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisgIH0KKworICAvKiBjcmVhdGUgbXUsIHVzZWQgZm9yIEJhcnJldHQgcmVkdWN0aW9uICovCisgIGlmICgoZXJyID0gbXBfaW5pdCAoJm11KSkgIT0gTVBfT0tBWSkgeworICAgIGdvdG8gTEJMX007CisgIH0KKyAgCisgIGlmIChyZWRtb2RlID09IDApIHsKKyAgICAgaWYgKChlcnIgPSBtcF9yZWR1Y2Vfc2V0dXAgKCZtdSwgUCkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfTVU7CisgICAgIH0KKyAgICAgcmVkdXggPSBtcF9yZWR1Y2U7CisgIH0gZWxzZSB7CisgICAgIGlmICgoZXJyID0gbXBfcmVkdWNlXzJrX3NldHVwX2wgKFAsICZtdSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfTVU7CisgICAgIH0KKyAgICAgcmVkdXggPSBtcF9yZWR1Y2VfMmtfbDsKKyAgfSAgICAKKworICAvKiBjcmVhdGUgTSB0YWJsZQorICAgKgorICAgKiBUaGUgTSB0YWJsZSBjb250YWlucyBwb3dlcnMgb2YgdGhlIGJhc2UsIAorICAgKiBlLmcuIE1beF0gPSBHKip4IG1vZCBQCisgICAqCisgICAqIFRoZSBmaXJzdCBoYWxmIG9mIHRoZSB0YWJsZSBpcyBub3QgCisgICAqIGNvbXB1dGVkIHRob3VnaCBhY2NlcHQgZm9yIE1bMF0gYW5kIE1bMV0KKyAgICovCisgIGlmICgoZXJyID0gbXBfbW9kIChHLCBQLCAmTVsxXSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9NVTsKKyAgfQorCisgIC8qIGNvbXB1dGUgdGhlIHZhbHVlIGF0IE1bMTw8KHdpbnNpemUtMSldIGJ5IHNxdWFyaW5nIAorICAgKiBNWzFdICh3aW5zaXplLTEpIHRpbWVzIAorICAgKi8KKyAgaWYgKChlcnIgPSBtcF9jb3B5ICgmTVsxXSwgJk1bMSA8PCAod2luc2l6ZSAtIDEpXSkpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9NVTsKKyAgfQorCisgIGZvciAoeCA9IDA7IHggPCAod2luc2l6ZSAtIDEpOyB4KyspIHsKKyAgICAvKiBzcXVhcmUgaXQgKi8KKyAgICBpZiAoKGVyciA9IG1wX3NxciAoJk1bMSA8PCAod2luc2l6ZSAtIDEpXSwgCisgICAgICAgICAgICAgICAgICAgICAgICZNWzEgPDwgKHdpbnNpemUgLSAxKV0pKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9NVTsKKyAgICB9CisKKyAgICAvKiByZWR1Y2UgbW9kdWxvIFAgKi8KKyAgICBpZiAoKGVyciA9IHJlZHV4ICgmTVsxIDw8ICh3aW5zaXplIC0gMSldLCBQLCAmbXUpKSAhPSBNUF9PS0FZKSB7CisgICAgICBnb3RvIExCTF9NVTsKKyAgICB9CisgIH0KKworICAvKiBjcmVhdGUgdXBwZXIgdGFibGUsIHRoYXQgaXMgTVt4XSA9IE1beC0xXSAqIE1bMV0gKG1vZCBQKQorICAgKiBmb3IgeCA9ICgyKiood2luc2l6ZSAtIDEpICsgMSkgdG8gKDIqKndpbnNpemUgLSAxKQorICAgKi8KKyAgZm9yICh4ID0gKDEgPDwgKHdpbnNpemUgLSAxKSkgKyAxOyB4IDwgKDEgPDwgd2luc2l6ZSk7IHgrKykgeworICAgIGlmICgoZXJyID0gbXBfbXVsICgmTVt4IC0gMV0sICZNWzFdLCAmTVt4XSkpICE9IE1QX09LQVkpIHsKKyAgICAgIGdvdG8gTEJMX01VOworICAgIH0KKyAgICBpZiAoKGVyciA9IHJlZHV4ICgmTVt4XSwgUCwgJm11KSkgIT0gTVBfT0tBWSkgeworICAgICAgZ290byBMQkxfTVU7CisgICAgfQorICB9CisKKyAgLyogc2V0dXAgcmVzdWx0ICovCisgIGlmICgoZXJyID0gbXBfaW5pdCAoJnJlcykpICE9IE1QX09LQVkpIHsKKyAgICBnb3RvIExCTF9NVTsKKyAgfQorICBtcF9zZXQgKCZyZXMsIDEpOworCisgIC8qIHNldCBpbml0aWFsIG1vZGUgYW5kIGJpdCBjbnQgKi8KKyAgbW9kZSAgID0gMDsKKyAgYml0Y250ID0gMTsKKyAgYnVmICAgID0gMDsKKyAgZGlnaWR4ID0gWC0+dXNlZCAtIDE7CisgIGJpdGNweSA9IDA7CisgIGJpdGJ1ZiA9IDA7CisKKyAgZm9yICg7OykgeworICAgIC8qIGdyYWIgbmV4dCBkaWdpdCBhcyByZXF1aXJlZCAqLworICAgIGlmICgtLWJpdGNudCA9PSAwKSB7CisgICAgICAvKiBpZiBkaWdpZHggPT0gLTEgd2UgYXJlIG91dCBvZiBkaWdpdHMgKi8KKyAgICAgIGlmIChkaWdpZHggPT0gLTEpIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgICAvKiByZWFkIG5leHQgZGlnaXQgYW5kIHJlc2V0IHRoZSBiaXRjbnQgKi8KKyAgICAgIGJ1ZiAgICA9IFgtPmRwW2RpZ2lkeC0tXTsKKyAgICAgIGJpdGNudCA9IChpbnQpIERJR0lUX0JJVDsKKyAgICB9CisKKyAgICAvKiBncmFiIHRoZSBuZXh0IG1zYiBmcm9tIHRoZSBleHBvbmVudCAqLworICAgIHkgICAgID0gKGJ1ZiA+PiAobXBfZGlnaXQpKERJR0lUX0JJVCAtIDEpKSAmIDE7CisgICAgYnVmIDw8PSAobXBfZGlnaXQpMTsKKworICAgIC8qIGlmIHRoZSBiaXQgaXMgemVybyBhbmQgbW9kZSA9PSAwIHRoZW4gd2UgaWdub3JlIGl0CisgICAgICogVGhlc2UgcmVwcmVzZW50IHRoZSBsZWFkaW5nIHplcm8gYml0cyBiZWZvcmUgdGhlIGZpcnN0IDEgYml0CisgICAgICogaW4gdGhlIGV4cG9uZW50LiAgVGVjaG5pY2FsbHkgdGhpcyBvcHQgaXMgbm90IHJlcXVpcmVkIGJ1dCBpdAorICAgICAqIGRvZXMgbG93ZXIgdGhlICMgb2YgdHJpdmlhbCBzcXVhcmluZy9yZWR1Y3Rpb25zIHVzZWQKKyAgICAgKi8KKyAgICBpZiAobW9kZSA9PSAwICYmIHkgPT0gMCkgeworICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogaWYgdGhlIGJpdCBpcyB6ZXJvIGFuZCBtb2RlID09IDEgdGhlbiB3ZSBzcXVhcmUgKi8KKyAgICBpZiAobW9kZSA9PSAxICYmIHkgPT0gMCkgeworICAgICAgaWYgKChlcnIgPSBtcF9zcXIgKCZyZXMsICZyZXMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgIH0KKyAgICAgIGlmICgoZXJyID0gcmVkdXggKCZyZXMsIFAsICZtdSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgfQorICAgICAgY29udGludWU7CisgICAgfQorCisgICAgLyogZWxzZSB3ZSBhZGQgaXQgdG8gdGhlIHdpbmRvdyAqLworICAgIGJpdGJ1ZiB8PSAoeSA8PCAod2luc2l6ZSAtICsrYml0Y3B5KSk7CisgICAgbW9kZSAgICA9IDI7CisKKyAgICBpZiAoYml0Y3B5ID09IHdpbnNpemUpIHsKKyAgICAgIC8qIG9rIHdpbmRvdyBpcyBmaWxsZWQgc28gc3F1YXJlIGFzIHJlcXVpcmVkIGFuZCBtdWx0aXBseSAgKi8KKyAgICAgIC8qIHNxdWFyZSBmaXJzdCAqLworICAgICAgZm9yICh4ID0gMDsgeCA8IHdpbnNpemU7IHgrKykgeworICAgICAgICBpZiAoKGVyciA9IG1wX3NxciAoJnJlcywgJnJlcykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgICBnb3RvIExCTF9SRVM7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChlcnIgPSByZWR1eCAoJnJlcywgUCwgJm11KSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvKiB0aGVuIG11bHRpcGx5ICovCisgICAgICBpZiAoKGVyciA9IG1wX211bCAoJnJlcywgJk1bYml0YnVmXSwgJnJlcykpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgfQorICAgICAgaWYgKChlcnIgPSByZWR1eCAoJnJlcywgUCwgJm11KSkgIT0gTVBfT0tBWSkgeworICAgICAgICBnb3RvIExCTF9SRVM7CisgICAgICB9CisKKyAgICAgIC8qIGVtcHR5IHdpbmRvdyBhbmQgcmVzZXQgKi8KKyAgICAgIGJpdGNweSA9IDA7CisgICAgICBiaXRidWYgPSAwOworICAgICAgbW9kZSAgID0gMTsKKyAgICB9CisgIH0KKworICAvKiBpZiBiaXRzIHJlbWFpbiB0aGVuIHNxdWFyZS9tdWx0aXBseSAqLworICBpZiAobW9kZSA9PSAyICYmIGJpdGNweSA+IDApIHsKKyAgICAvKiBzcXVhcmUgdGhlbiBtdWx0aXBseSBpZiB0aGUgYml0IGlzIHNldCAqLworICAgIGZvciAoeCA9IDA7IHggPCBiaXRjcHk7IHgrKykgeworICAgICAgaWYgKChlcnIgPSBtcF9zcXIgKCZyZXMsICZyZXMpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgIH0KKyAgICAgIGlmICgoZXJyID0gcmVkdXggKCZyZXMsIFAsICZtdSkpICE9IE1QX09LQVkpIHsKKyAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgfQorCisgICAgICBiaXRidWYgPDw9IDE7CisgICAgICBpZiAoKGJpdGJ1ZiAmICgxIDw8IHdpbnNpemUpKSAhPSAwKSB7CisgICAgICAgIC8qIHRoZW4gbXVsdGlwbHkgKi8KKyAgICAgICAgaWYgKChlcnIgPSBtcF9tdWwgKCZyZXMsICZNWzFdLCAmcmVzKSkgIT0gTVBfT0tBWSkgeworICAgICAgICAgIGdvdG8gTEJMX1JFUzsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGVyciA9IHJlZHV4ICgmcmVzLCBQLCAmbXUpKSAhPSBNUF9PS0FZKSB7CisgICAgICAgICAgZ290byBMQkxfUkVTOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisKKyAgbXBfZXhjaCAoJnJlcywgWSk7CisgIGVyciA9IE1QX09LQVk7CitMQkxfUkVTOm1wX2NsZWFyICgmcmVzKTsKK0xCTF9NVTptcF9jbGVhciAoJm11KTsKK0xCTF9NOgorICBtcF9jbGVhcigmTVsxXSk7CisgIGZvciAoeCA9IDE8PCh3aW5zaXplLTEpOyB4IDwgKDEgPDwgd2luc2l6ZSk7IHgrKykgeworICAgIG1wX2NsZWFyICgmTVt4XSk7CisgIH0KKyAgcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX3NfbXBfZXhwdG1vZC5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX3NfbXBfZXhwdG1vZC5jICovCisKKy8qIFN0YXJ0OiBibl9zX21wX211bF9kaWdzLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fU19NUF9NVUxfRElHU19DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBtdWx0aXBsaWVzIHxhfCAqIHxifCBhbmQgb25seSBjb21wdXRlcyB1cHRvIGRpZ3MgZGlnaXRzIG9mIHJlc3VsdAorICogSEFDIHBwLiA1OTUsIEFsZ29yaXRobSAxNC4xMiAgTW9kaWZpZWQgc28geW91IGNhbiBjb250cm9sIGhvdyAKKyAqIG1hbnkgZGlnaXRzIG9mIG91dHB1dCBhcmUgY3JlYXRlZC4KKyAqLworaW50IHNfbXBfbXVsX2RpZ3MgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMsIGludCBkaWdzKQoreworICBtcF9pbnQgIHQ7CisgIGludCAgICAgcmVzLCBwYSwgcGIsIGl4LCBpeTsKKyAgbXBfZGlnaXQgdTsKKyAgbXBfd29yZCByOworICBtcF9kaWdpdCB0bXB4LCAqdG1wdCwgKnRtcHk7CisKKyAgLyogY2FuIHdlIHVzZSB0aGUgZmFzdCBtdWx0aXBsaWVyPyAqLworICBpZiAoKChkaWdzKSA8IE1QX1dBUlJBWSkgJiYKKyAgICAgIE1JTiAoYS0+dXNlZCwgYi0+dXNlZCkgPCAKKyAgICAgICAgICAoMSA8PCAoKENIQVJfQklUICogc2l6ZW9mIChtcF93b3JkKSkgLSAoMiAqIERJR0lUX0JJVCkpKSkgeworICAgIHJldHVybiBmYXN0X3NfbXBfbXVsX2RpZ3MgKGEsIGIsIGMsIGRpZ3MpOworICB9CisKKyAgaWYgKChyZXMgPSBtcF9pbml0X3NpemUgKCZ0LCBkaWdzKSkgIT0gTVBfT0tBWSkgeworICAgIHJldHVybiByZXM7CisgIH0KKyAgdC51c2VkID0gZGlnczsKKworICAvKiBjb21wdXRlIHRoZSBkaWdpdHMgb2YgdGhlIHByb2R1Y3QgZGlyZWN0bHkgKi8KKyAgcGEgPSBhLT51c2VkOworICBmb3IgKGl4ID0gMDsgaXggPCBwYTsgaXgrKykgeworICAgIC8qIHNldCB0aGUgY2FycnkgdG8gemVybyAqLworICAgIHUgPSAwOworCisgICAgLyogbGltaXQgb3Vyc2VsdmVzIHRvIG1ha2luZyBkaWdzIGRpZ2l0cyBvZiBvdXRwdXQgKi8KKyAgICBwYiA9IE1JTiAoYi0+dXNlZCwgZGlncyAtIGl4KTsKKworICAgIC8qIHNldHVwIHNvbWUgYWxpYXNlcyAqLworICAgIC8qIGNvcHkgb2YgdGhlIGRpZ2l0IGZyb20gYSB1c2VkIHdpdGhpbiB0aGUgbmVzdGVkIGxvb3AgKi8KKyAgICB0bXB4ID0gYS0+ZHBbaXhdOworICAgIAorICAgIC8qIGFuIGFsaWFzIGZvciB0aGUgZGVzdGluYXRpb24gc2hpZnRlZCBpeCBwbGFjZXMgKi8KKyAgICB0bXB0ID0gdC5kcCArIGl4OworICAgIAorICAgIC8qIGFuIGFsaWFzIGZvciB0aGUgZGlnaXRzIG9mIGIgKi8KKyAgICB0bXB5ID0gYi0+ZHA7CisKKyAgICAvKiBjb21wdXRlIHRoZSBjb2x1bW5zIG9mIHRoZSBvdXRwdXQgYW5kIHByb3BhZ2F0ZSB0aGUgY2FycnkgKi8KKyAgICBmb3IgKGl5ID0gMDsgaXkgPCBwYjsgaXkrKykgeworICAgICAgLyogY29tcHV0ZSB0aGUgY29sdW1uIGFzIGEgbXBfd29yZCAqLworICAgICAgciAgICAgICA9ICgobXBfd29yZCkqdG1wdCkgKworICAgICAgICAgICAgICAgICgobXBfd29yZCl0bXB4KSAqICgobXBfd29yZCkqdG1weSsrKSArCisgICAgICAgICAgICAgICAgKChtcF93b3JkKSB1KTsKKworICAgICAgLyogdGhlIG5ldyBjb2x1bW4gaXMgdGhlIGxvd2VyIHBhcnQgb2YgdGhlIHJlc3VsdCAqLworICAgICAgKnRtcHQrKyA9IChtcF9kaWdpdCkgKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKKworICAgICAgLyogZ2V0IHRoZSBjYXJyeSB3b3JkIGZyb20gdGhlIHJlc3VsdCAqLworICAgICAgdSAgICAgICA9IChtcF9kaWdpdCkgKHIgPj4gKChtcF93b3JkKSBESUdJVF9CSVQpKTsKKyAgICB9CisgICAgLyogc2V0IGNhcnJ5IGlmIGl0IGlzIHBsYWNlZCBiZWxvdyBkaWdzICovCisgICAgaWYgKGl4ICsgaXkgPCBkaWdzKSB7CisgICAgICAqdG1wdCA9IHU7CisgICAgfQorICB9CisKKyAgbXBfY2xhbXAgKCZ0KTsKKyAgbXBfZXhjaCAoJnQsIGMpOworCisgIG1wX2NsZWFyICgmdCk7CisgIHJldHVybiBNUF9PS0FZOworfQorI2VuZGlmCisKKy8qICRTb3VyY2U6IC9jdnMvbGlidG9tL2xpYnRvbW1hdGgvYm5fc19tcF9tdWxfZGlncy5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX3NfbXBfbXVsX2RpZ3MuYyAqLworCisvKiBTdGFydDogYm5fc19tcF9tdWxfaGlnaF9kaWdzLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fU19NUF9NVUxfSElHSF9ESUdTX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIG11bHRpcGxpZXMgfGF8ICogfGJ8IGFuZCBkb2VzIG5vdCBjb21wdXRlIHRoZSBsb3dlciBkaWdzIGRpZ2l0cworICogW21lYW50IHRvIGdldCB0aGUgaGlnaGVyIHBhcnQgb2YgdGhlIHByb2R1Y3RdCisgKi8KK2ludAorc19tcF9tdWxfaGlnaF9kaWdzIChtcF9pbnQgKiBhLCBtcF9pbnQgKiBiLCBtcF9pbnQgKiBjLCBpbnQgZGlncykKK3sKKyAgbXBfaW50ICB0OworICBpbnQgICAgIHJlcywgcGEsIHBiLCBpeCwgaXk7CisgIG1wX2RpZ2l0IHU7CisgIG1wX3dvcmQgcjsKKyAgbXBfZGlnaXQgdG1weCwgKnRtcHQsICp0bXB5OworCisgIC8qIGNhbiB3ZSB1c2UgdGhlIGZhc3QgbXVsdGlwbGllcj8gKi8KKyNpZmRlZiBCTl9GQVNUX1NfTVBfTVVMX0hJR0hfRElHU19DCisgIGlmICgoKGEtPnVzZWQgKyBiLT51c2VkICsgMSkgPCBNUF9XQVJSQVkpCisgICAgICAmJiBNSU4gKGEtPnVzZWQsIGItPnVzZWQpIDwgKDEgPDwgKChDSEFSX0JJVCAqIHNpemVvZiAobXBfd29yZCkpIC0gKDIgKiBESUdJVF9CSVQpKSkpIHsKKyAgICByZXR1cm4gZmFzdF9zX21wX211bF9oaWdoX2RpZ3MgKGEsIGIsIGMsIGRpZ3MpOworICB9CisjZW5kaWYKKworICBpZiAoKHJlcyA9IG1wX2luaXRfc2l6ZSAoJnQsIGEtPnVzZWQgKyBiLT51c2VkICsgMSkpICE9IE1QX09LQVkpIHsKKyAgICByZXR1cm4gcmVzOworICB9CisgIHQudXNlZCA9IGEtPnVzZWQgKyBiLT51c2VkICsgMTsKKworICBwYSA9IGEtPnVzZWQ7CisgIHBiID0gYi0+dXNlZDsKKyAgZm9yIChpeCA9IDA7IGl4IDwgcGE7IGl4KyspIHsKKyAgICAvKiBjbGVhciB0aGUgY2FycnkgKi8KKyAgICB1ID0gMDsKKworICAgIC8qIGxlZnQgaGFuZCBzaWRlIG9mIEFbaXhdICogQltpeV0gKi8KKyAgICB0bXB4ID0gYS0+ZHBbaXhdOworCisgICAgLyogYWxpYXMgdG8gdGhlIGFkZHJlc3Mgb2Ygd2hlcmUgdGhlIGRpZ2l0cyB3aWxsIGJlIHN0b3JlZCAqLworICAgIHRtcHQgPSAmKHQuZHBbZGlnc10pOworCisgICAgLyogYWxpYXMgZm9yIHdoZXJlIHRvIHJlYWQgdGhlIHJpZ2h0IGhhbmQgc2lkZSBmcm9tICovCisgICAgdG1weSA9IGItPmRwICsgKGRpZ3MgLSBpeCk7CisKKyAgICBmb3IgKGl5ID0gZGlncyAtIGl4OyBpeSA8IHBiOyBpeSsrKSB7CisgICAgICAvKiBjYWxjdWxhdGUgdGhlIGRvdWJsZSBwcmVjaXNpb24gcmVzdWx0ICovCisgICAgICByICAgICAgID0gKChtcF93b3JkKSp0bXB0KSArCisgICAgICAgICAgICAgICAgKChtcF93b3JkKXRtcHgpICogKChtcF93b3JkKSp0bXB5KyspICsKKyAgICAgICAgICAgICAgICAoKG1wX3dvcmQpIHUpOworCisgICAgICAvKiBnZXQgdGhlIGxvd2VyIHBhcnQgKi8KKyAgICAgICp0bXB0KysgPSAobXBfZGlnaXQpIChyICYgKChtcF93b3JkKSBNUF9NQVNLKSk7CisKKyAgICAgIC8qIGNhcnJ5IHRoZSBjYXJyeSAqLworICAgICAgdSAgICAgICA9IChtcF9kaWdpdCkgKHIgPj4gKChtcF93b3JkKSBESUdJVF9CSVQpKTsKKyAgICB9CisgICAgKnRtcHQgPSB1OworICB9CisgIG1wX2NsYW1wICgmdCk7CisgIG1wX2V4Y2ggKCZ0LCBjKTsKKyAgbXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9zX21wX211bF9oaWdoX2RpZ3MuYyx2ICQgKi8KKy8qICRSZXZpc2lvbjogMS4zICQgKi8KKy8qICREYXRlOiAyMDA2LzAzLzMxIDE0OjE4OjQ0ICQgKi8KKworLyogRW5kOiBibl9zX21wX211bF9oaWdoX2RpZ3MuYyAqLworCisvKiBTdGFydDogYm5fc19tcF9zcXIuYyAqLworI2luY2x1ZGUgPHRvbW1hdGguaD4KKyNpZmRlZiBCTl9TX01QX1NRUl9DCisvKiBMaWJUb21NYXRoLCBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBsaWJyYXJ5IC0tIFRvbSBTdCBEZW5pcworICoKKyAqIExpYlRvbU1hdGggaXMgYSBsaWJyYXJ5IHRoYXQgcHJvdmlkZXMgbXVsdGlwbGUtcHJlY2lzaW9uCisgKiBpbnRlZ2VyIGFyaXRobWV0aWMgYXMgd2VsbCBhcyBudW1iZXIgdGhlb3JldGljIGZ1bmN0aW9uYWxpdHkuCisgKgorICogVGhlIGxpYnJhcnkgd2FzIGRlc2lnbmVkIGRpcmVjdGx5IGFmdGVyIHRoZSBNUEkgbGlicmFyeSBieQorICogTWljaGFlbCBGcm9tYmVyZ2VyIGJ1dCBoYXMgYmVlbiB3cml0dGVuIGZyb20gc2NyYXRjaCB3aXRoCisgKiBhZGRpdGlvbmFsIG9wdGltaXphdGlvbnMgaW4gcGxhY2UuCisgKgorICogVGhlIGxpYnJhcnkgaXMgZnJlZSBmb3IgYWxsIHB1cnBvc2VzIHdpdGhvdXQgYW55IGV4cHJlc3MKKyAqIGd1YXJhbnRlZSBpdCB3b3Jrcy4KKyAqCisgKiBUb20gU3QgRGVuaXMsIHRvbXN0ZGVuaXNAZ21haWwuY29tLCBodHRwOi8vbWF0aC5saWJ0b21jcnlwdC5jb20KKyAqLworCisvKiBsb3cgbGV2ZWwgc3F1YXJpbmcsIGIgPSBhKmEsIEhBQyBwcC41OTYtNTk3LCBBbGdvcml0aG0gMTQuMTYgKi8KK2ludCBzX21wX3NxciAobXBfaW50ICogYSwgbXBfaW50ICogYikKK3sKKyAgbXBfaW50ICB0OworICBpbnQgICAgIHJlcywgaXgsIGl5LCBwYTsKKyAgbXBfd29yZCByOworICBtcF9kaWdpdCB1LCB0bXB4LCAqdG1wdDsKKworICBwYSA9IGEtPnVzZWQ7CisgIGlmICgocmVzID0gbXBfaW5pdF9zaXplICgmdCwgMipwYSArIDEpKSAhPSBNUF9PS0FZKSB7CisgICAgcmV0dXJuIHJlczsKKyAgfQorCisgIC8qIGRlZmF1bHQgdXNlZCBpcyBtYXhpbXVtIHBvc3NpYmxlIHNpemUgKi8KKyAgdC51c2VkID0gMipwYSArIDE7CisKKyAgZm9yIChpeCA9IDA7IGl4IDwgcGE7IGl4KyspIHsKKyAgICAvKiBmaXJzdCBjYWxjdWxhdGUgdGhlIGRpZ2l0IGF0IDIqaXggKi8KKyAgICAvKiBjYWxjdWxhdGUgZG91YmxlIHByZWNpc2lvbiByZXN1bHQgKi8KKyAgICByID0gKChtcF93b3JkKSB0LmRwWzIqaXhdKSArCisgICAgICAgICgobXBfd29yZClhLT5kcFtpeF0pKigobXBfd29yZClhLT5kcFtpeF0pOworCisgICAgLyogc3RvcmUgbG93ZXIgcGFydCBpbiByZXN1bHQgKi8KKyAgICB0LmRwW2l4K2l4XSA9IChtcF9kaWdpdCkgKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKKworICAgIC8qIGdldCB0aGUgY2FycnkgKi8KKyAgICB1ICAgICAgICAgICA9IChtcF9kaWdpdCkociA+PiAoKG1wX3dvcmQpIERJR0lUX0JJVCkpOworCisgICAgLyogbGVmdCBoYW5kIHNpZGUgb2YgQVtpeF0gKiBBW2l5XSAqLworICAgIHRtcHggICAgICAgID0gYS0+ZHBbaXhdOworCisgICAgLyogYWxpYXMgZm9yIHdoZXJlIHRvIHN0b3JlIHRoZSByZXN1bHRzICovCisgICAgdG1wdCAgICAgICAgPSB0LmRwICsgKDIqaXggKyAxKTsKKyAgICAKKyAgICBmb3IgKGl5ID0gaXggKyAxOyBpeSA8IHBhOyBpeSsrKSB7CisgICAgICAvKiBmaXJzdCBjYWxjdWxhdGUgdGhlIHByb2R1Y3QgKi8KKyAgICAgIHIgICAgICAgPSAoKG1wX3dvcmQpdG1weCkgKiAoKG1wX3dvcmQpYS0+ZHBbaXldKTsKKworICAgICAgLyogbm93IGNhbGN1bGF0ZSB0aGUgZG91YmxlIHByZWNpc2lvbiByZXN1bHQsIG5vdGUgd2UgdXNlCisgICAgICAgKiBhZGRpdGlvbiBpbnN0ZWFkIG9mICoyIHNpbmNlIGl0J3MgZWFzaWVyIHRvIG9wdGltaXplCisgICAgICAgKi8KKyAgICAgIHIgICAgICAgPSAoKG1wX3dvcmQpICp0bXB0KSArIHIgKyByICsgKChtcF93b3JkKSB1KTsKKworICAgICAgLyogc3RvcmUgbG93ZXIgcGFydCAqLworICAgICAgKnRtcHQrKyA9IChtcF9kaWdpdCkgKHIgJiAoKG1wX3dvcmQpIE1QX01BU0spKTsKKworICAgICAgLyogZ2V0IGNhcnJ5ICovCisgICAgICB1ICAgICAgID0gKG1wX2RpZ2l0KShyID4+ICgobXBfd29yZCkgRElHSVRfQklUKSk7CisgICAgfQorICAgIC8qIHByb3BhZ2F0ZSB1cHdhcmRzICovCisgICAgd2hpbGUgKHUgIT0gKChtcF9kaWdpdCkgMCkpIHsKKyAgICAgIHIgICAgICAgPSAoKG1wX3dvcmQpICp0bXB0KSArICgobXBfd29yZCkgdSk7CisgICAgICAqdG1wdCsrID0gKG1wX2RpZ2l0KSAociAmICgobXBfd29yZCkgTVBfTUFTSykpOworICAgICAgdSAgICAgICA9IChtcF9kaWdpdCkociA+PiAoKG1wX3dvcmQpIERJR0lUX0JJVCkpOworICAgIH0KKyAgfQorCisgIG1wX2NsYW1wICgmdCk7CisgIG1wX2V4Y2ggKCZ0LCBiKTsKKyAgbXBfY2xlYXIgKCZ0KTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisjZW5kaWYKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC9ibl9zX21wX3Nxci5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuX3NfbXBfc3FyLmMgKi8KKworLyogU3RhcnQ6IGJuX3NfbXBfc3ViLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5fU19NUF9TVUJfQworLyogTGliVG9tTWF0aCwgbXVsdGlwbGUtcHJlY2lzaW9uIGludGVnZXIgbGlicmFyeSAtLSBUb20gU3QgRGVuaXMKKyAqCisgKiBMaWJUb21NYXRoIGlzIGEgbGlicmFyeSB0aGF0IHByb3ZpZGVzIG11bHRpcGxlLXByZWNpc2lvbgorICogaW50ZWdlciBhcml0aG1ldGljIGFzIHdlbGwgYXMgbnVtYmVyIHRoZW9yZXRpYyBmdW5jdGlvbmFsaXR5LgorICoKKyAqIFRoZSBsaWJyYXJ5IHdhcyBkZXNpZ25lZCBkaXJlY3RseSBhZnRlciB0aGUgTVBJIGxpYnJhcnkgYnkKKyAqIE1pY2hhZWwgRnJvbWJlcmdlciBidXQgaGFzIGJlZW4gd3JpdHRlbiBmcm9tIHNjcmF0Y2ggd2l0aAorICogYWRkaXRpb25hbCBvcHRpbWl6YXRpb25zIGluIHBsYWNlLgorICoKKyAqIFRoZSBsaWJyYXJ5IGlzIGZyZWUgZm9yIGFsbCBwdXJwb3NlcyB3aXRob3V0IGFueSBleHByZXNzCisgKiBndWFyYW50ZWUgaXQgd29ya3MuCisgKgorICogVG9tIFN0IERlbmlzLCB0b21zdGRlbmlzQGdtYWlsLmNvbSwgaHR0cDovL21hdGgubGlidG9tY3J5cHQuY29tCisgKi8KKworLyogbG93IGxldmVsIHN1YnRyYWN0aW9uIChhc3N1bWVzIHxhfCA+IHxifCksIEhBQyBwcC41OTUgQWxnb3JpdGhtIDE0LjkgKi8KK2ludAorc19tcF9zdWIgKG1wX2ludCAqIGEsIG1wX2ludCAqIGIsIG1wX2ludCAqIGMpCit7CisgIGludCAgICAgb2xkdXNlLCByZXMsIG1pbiwgbWF4OworCisgIC8qIGZpbmQgc2l6ZXMgKi8KKyAgbWluID0gYi0+dXNlZDsKKyAgbWF4ID0gYS0+dXNlZDsKKworICAvKiBpbml0IHJlc3VsdCAqLworICBpZiAoYy0+YWxsb2MgPCBtYXgpIHsKKyAgICBpZiAoKHJlcyA9IG1wX2dyb3cgKGMsIG1heCkpICE9IE1QX09LQVkpIHsKKyAgICAgIHJldHVybiByZXM7CisgICAgfQorICB9CisgIG9sZHVzZSA9IGMtPnVzZWQ7CisgIGMtPnVzZWQgPSBtYXg7CisKKyAgeworICAgIHJlZ2lzdGVyIG1wX2RpZ2l0IHUsICp0bXBhLCAqdG1wYiwgKnRtcGM7CisgICAgcmVnaXN0ZXIgaW50IGk7CisKKyAgICAvKiBhbGlhcyBmb3IgZGlnaXQgcG9pbnRlcnMgKi8KKyAgICB0bXBhID0gYS0+ZHA7CisgICAgdG1wYiA9IGItPmRwOworICAgIHRtcGMgPSBjLT5kcDsKKworICAgIC8qIHNldCBjYXJyeSB0byB6ZXJvICovCisgICAgdSA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IG1pbjsgaSsrKSB7CisgICAgICAvKiBUW2ldID0gQVtpXSAtIEJbaV0gLSBVICovCisgICAgICAqdG1wYyA9ICp0bXBhKysgLSAqdG1wYisrIC0gdTsKKworICAgICAgLyogVSA9IGNhcnJ5IGJpdCBvZiBUW2ldCisgICAgICAgKiBOb3RlIHRoaXMgc2F2ZXMgcGVyZm9ybWluZyBhbiBBTkQgb3BlcmF0aW9uIHNpbmNlCisgICAgICAgKiBpZiBhIGNhcnJ5IGRvZXMgb2NjdXIgaXQgd2lsbCBwcm9wYWdhdGUgYWxsIHRoZSB3YXkgdG8gdGhlCisgICAgICAgKiBNU0IuICBBcyBhIHJlc3VsdCBhIHNpbmdsZSBzaGlmdCBpcyBlbm91Z2ggdG8gZ2V0IHRoZSBjYXJyeQorICAgICAgICovCisgICAgICB1ID0gKnRtcGMgPj4gKChtcF9kaWdpdCkoQ0hBUl9CSVQgKiBzaXplb2YgKG1wX2RpZ2l0KSAtIDEpKTsKKworICAgICAgLyogQ2xlYXIgY2FycnkgZnJvbSBUW2ldICovCisgICAgICAqdG1wYysrICY9IE1QX01BU0s7CisgICAgfQorCisgICAgLyogbm93IGNvcHkgaGlnaGVyIHdvcmRzIGlmIGFueSwgZS5nLiBpZiBBIGhhcyBtb3JlIGRpZ2l0cyB0aGFuIEIgICovCisgICAgZm9yICg7IGkgPCBtYXg7IGkrKykgeworICAgICAgLyogVFtpXSA9IEFbaV0gLSBVICovCisgICAgICAqdG1wYyA9ICp0bXBhKysgLSB1OworCisgICAgICAvKiBVID0gY2FycnkgYml0IG9mIFRbaV0gKi8KKyAgICAgIHUgPSAqdG1wYyA+PiAoKG1wX2RpZ2l0KShDSEFSX0JJVCAqIHNpemVvZiAobXBfZGlnaXQpIC0gMSkpOworCisgICAgICAvKiBDbGVhciBjYXJyeSBmcm9tIFRbaV0gKi8KKyAgICAgICp0bXBjKysgJj0gTVBfTUFTSzsKKyAgICB9CisKKyAgICAvKiBjbGVhciBkaWdpdHMgYWJvdmUgdXNlZCAoc2luY2Ugd2UgbWF5IG5vdCBoYXZlIGdyb3duIHJlc3VsdCBhYm92ZSkgKi8KKyAgICBmb3IgKGkgPSBjLT51c2VkOyBpIDwgb2xkdXNlOyBpKyspIHsKKyAgICAgICp0bXBjKysgPSAwOworICAgIH0KKyAgfQorCisgIG1wX2NsYW1wIChjKTsKKyAgcmV0dXJuIE1QX09LQVk7Cit9CisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuX3NfbXBfc3ViLmMsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCisKKy8qIEVuZDogYm5fc19tcF9zdWIuYyAqLworCisvKiBTdGFydDogYm5jb3JlLmMgKi8KKyNpbmNsdWRlIDx0b21tYXRoLmg+CisjaWZkZWYgQk5DT1JFX0MKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisKKy8qIEtub3duIG9wdGltYWwgY29uZmlndXJhdGlvbnMKKworIENQVSAgICAgICAgICAgICAgICAgICAgL0NvbXBpbGVyICAgICAvTVVMIENVVE9GRi9TUVIgQ1VUT0ZGCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgSW50ZWwgUDQgTm9ydGh3b29kICAgICAvR0NDIHYzLjQuMSAgIC8gICAgICAgIDg4LyAgICAgICAxMjgvTFRNIDAuMzIgOy0pCisgQU1EIEF0aGxvbjY0ICAgICAgICAgICAvR0NDIHYzLjQuNCAgIC8gICAgICAgIDgwLyAgICAgICAxMjAvTFRNIDAuMzUKKyAKKyovCisKK2ludCAgICAgS0FSQVRTVUJBX01VTF9DVVRPRkYgPSA4MCwgICAgICAvKiBNaW4uIG51bWJlciBvZiBkaWdpdHMgYmVmb3JlIEthcmF0c3ViYSBtdWx0aXBsaWNhdGlvbiBpcyB1c2VkLiAqLworICAgICAgICBLQVJBVFNVQkFfU1FSX0NVVE9GRiA9IDEyMCwgICAgIC8qIE1pbi4gbnVtYmVyIG9mIGRpZ2l0cyBiZWZvcmUgS2FyYXRzdWJhIHNxdWFyaW5nIGlzIHVzZWQuICovCisgICAgICAgIAorICAgICAgICBUT09NX01VTF9DVVRPRkYgICAgICA9IDM1MCwgICAgICAvKiBubyBvcHRpbWFsIHZhbHVlcyBvZiB0aGVzZSBhcmUga25vd24geWV0IHNvIHNldCBlbSBoaWdoICovCisgICAgICAgIFRPT01fU1FSX0NVVE9GRiAgICAgID0gNDAwOyAKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL2JuY29yZS5jLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjQgJCAqLworLyogJERhdGU6IDIwMDYvMDMvMzEgMTQ6MTg6NDQgJCAqLworCisvKiBFbmQ6IGJuY29yZS5jICovCisKKworLyogRU9GICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL3ByZXR0eS5idWlsZCBiL2xpYnRvbW1hdGgvcHJldHR5LmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MDhiOGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL3ByZXR0eS5idWlsZApAQCAtMCwwICsxLDY2IEBACisjIS9iaW4vcGVybCAtdworIworIyBDdXRlIGxpdHRsZSBidWlsZGVyIGZvciBwZXJsIAorIyBUb3RhbCB3YXN0ZSBvZiBkZXZlbG9wbWVudCB0aW1lLi4uCisjCisjIFRoaXMgd2lsbCBidWlsZCBhbGwgdGhlIG9iamVjdCBmaWxlcyBhbmQgdGhlbiB0aGUgYXJjaGl2ZSAuYSBmaWxlCisjIHJlcXVpcmVzIEdDQywgR05VIG1ha2UgYW5kIGEgc2Vuc2Ugb2YgaHVtb3VyLgorIworIyBUb20gU3QgRGVuaXMKK3VzZSBzdHJpY3Q7CisKK215ICRjb3VudCA9IDA7CitteSAkc3RhcnR0aW1lID0gdGltZTsKK215ICRyYXRlICA9IDA7CitwcmludCAiU2Nhbm5pbmcgZm9yIHNvdXJjZSBmaWxlcy4uLlxuIjsKK2ZvcmVhY2ggbXkgJGZpbGVuYW1lIChnbG9iICIqLmMiKSB7CisgICAgICAgKyskY291bnQ7Cit9CitwcmludCAiU291cmNlIGZpbGVzIHRvIGJ1aWxkOiAkY291bnRcbkJ1aWxkaW5nLi4uXG4iOworbXkgJGkgPSAwOworbXkgJGxpbmVzID0gMDsKK215ICRmaWxlc2J1aWx0ID0gMDsKK2ZvcmVhY2ggbXkgJGZpbGVuYW1lIChnbG9iICIqLmMiKSB7CisgICAgICAgcHJpbnRmKCJCdWlsZGluZyAlMy4yZiUlLCAiLCAoKyskaS8kY291bnQpKjEwMC4wKTsKKyAgICAgICBpZiAoJGkgJSA0ID09IDApIHsgcHJpbnQgIi8sICI7IH0KKyAgICAgICBpZiAoJGkgJSA0ID09IDEpIHsgcHJpbnQgIi0sICI7IH0KKyAgICAgICBpZiAoJGkgJSA0ID09IDIpIHsgcHJpbnQgIlxcLCAiOyB9CisgICAgICAgaWYgKCRpICUgNCA9PSAzKSB7IHByaW50ICJ8LCAiOyB9CisgICAgICAgaWYgKCRyYXRlID4gMCkgeworICAgICAgICAgICBteSAkdGxlZnQgPSAoJGNvdW50IC0gJGkpIC8gJHJhdGU7CisgICAgICAgICAgIG15ICR0c2VjICA9ICR0bGVmdCU2MDsKKyAgICAgICAgICAgbXkgJHRtaW4gID0gKCR0bGVmdC82MCklNjA7CisgICAgICAgICAgIG15ICR0aG91ciA9ICgkdGxlZnQvMzYwMCklNjA7CisgICAgICAgICAgIHByaW50ZigiJTJkOiUwMmQ6JTAyZCBsZWZ0LCAiLCAkdGhvdXIsICR0bWluLCAkdHNlYyk7CisgICAgICAgfQorICAgICAgIG15ICRjbnQgPSAoJGkvJGNvdW50KSozMC4wOworICAgICAgIG15ICR4ICAgPSAwOworICAgICAgIHByaW50ICJbIjsKKyAgICAgICBmb3IgKDsgJHggPCAkY250OyAkeCsrKSB7IHByaW50ICIjIjsgfQorICAgICAgIGZvciAoOyAkeCA8IDMwOyAkeCsrKSAgIHsgcHJpbnQgIiAiOyB9CisgICAgICAgcHJpbnQgIl1cciI7CisgICAgICAgbXkgJHRtcCA9ICRmaWxlbmFtZTsKKyAgICAgICAkdG1wID1+IHMvXC5jLyIubyIvZ2U7CisgICAgICAgaWYgKG9wZW4oU1JDLCAiPCR0bXAiKSkgeworICAgICAgICAgIGNsb3NlIFNSQzsKKyAgICAgICB9IGVsc2UgeworICAgICAgICAgICFzeXN0ZW0oIm1ha2UgJHRtcCA+IC9kZXYvbnVsbCAyPi9kZXYvbnVsbCIpIG9yIGRpZSAiXG5FUlJPUjogRmFpbGVkIHRvIG1ha2UgJHRtcCEhIVxuIjsKKyAgICAgICAgICBvcGVuKCBTUkMsICI8JGZpbGVuYW1lIiApIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiAkZmlsZW5hbWUgZm9yIHJlYWRpbmc6ICQhIjsKKyAgICAgICAgICArKyRsaW5lcyB3aGlsZSAoPFNSQz4pOworICAgICAgICAgIGNsb3NlIFNSQyBvciBkaWUgIkVycm9yIGNsb3NpbmcgJGZpbGVuYW1lIGFmdGVyIHJlYWRpbmc6ICQhIjsKKyAgICAgICAgICArKyRmaWxlc2J1aWx0OworICAgICAgIH0gICAgICAKKworICAgICAgICMgdXBkYXRlIHRpbWVyIAorICAgICAgIGlmICh0aW1lICE9ICRzdGFydHRpbWUpIHsKKyAgICAgICAgICBteSAkZGVsYXkgPSB0aW1lIC0gJHN0YXJ0dGltZTsKKyAgICAgICAgICAkcmF0ZSA9ICRpLyRkZWxheTsKKyAgICAgICB9Cit9CisKKyMgZmluaXNoIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5IAorcHJpbnRmKCJcbkZpbmlzaGVkIGJ1aWxkaW5nIHNvdXJjZSAoJWQgc2Vjb25kcywgJTMuMmYgZmlsZXMgcGVyIHNlY29uZCkuXG4iLCB0aW1lIC0gJHN0YXJ0dGltZSwgJHJhdGUpOworcHJpbnQgIkNvbXBpbGVkIGFwcHJveGltYXRlbHkgJGZpbGVzYnVpbHQgZmlsZXMgYW5kICRsaW5lcyBsaW5lcyBvZiBjb2RlLlxuIjsKK3ByaW50ICJEb2luZyBmaW5hbCBtYWtlIChidWlsZGluZyBhcmNoaXZlLi4uKVxuIjsKKyFzeXN0ZW0oIm1ha2UgPiAvZGV2L251bGwgMj4vZGV2L251bGwiKSBvciBkaWUgIlxuRVJST1I6IEZhaWxlZCB0byBwZXJmb3JtIGxhc3QgbWFrZSBjb21tYW5kISEhXG4iOworcHJpbnQgImRvbmUuXG4iOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYnRvbW1hdGgvdG9tYmMvZ3JhbW1hci50eHQgYi9saWJ0b21tYXRoL3RvbWJjL2dyYW1tYXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ODBlNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL3RvbWJjL2dyYW1tYXIudHh0CkBAIC0wLDAgKzEsMzUgQEAKK3Byb2dyYW0gICAgICAgOj0gcHJvZ3JhbSBzdGF0ZW1lbnQgfCBzdGF0ZW1lbnQgfCBlbXB0eQorc3RhdGVtZW50ICAgICA6PSB7IHN0YXRlbWVudCB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKKyAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IG51bWV4cHJlc3Npb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCisgICAgICAgICAgICAgICAgIGlkZW50aWZpZXJbbnVtZXhwcmVzc2lvbl0gPSBudW1leHByZXNzaW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGV4cHJlc3Npb25saXN0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorICAgICAgICAgICAgICAgICBmb3IgKGlkZW50aWZlciA9IG51bWV4cHJlc3Npb247IG51bWV4cHJlc3Npb247IGlkZW50aWZpZXIgPSBudW1leHByZXNzaW9uKSB7IHN0YXRlbWVudCB9ICAgfAorICAgICAgICAgICAgICAgICB3aGlsZSAobnVtZXhwcmVzc2lvbikgeyBzdGF0ZW1lbnQgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKKyAgICAgICAgICAgICAgICAgaWYgKG51bWV4cHJlc2lvbikgeyBzdGF0ZW1lbnQgfSBlbGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgCisgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorICAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIAorZWxpZiAgICAgICAgICA6PSBlbHNlIHN0YXRlbWVudCB8IGVtcHR5CitmdW5jdGlvbiAgICAgIDo9IGFicyB8IGNvdW50Yml0cyB8IGV4cHRtb2QgfCBqYWNvYmkgfCBwcmludCB8IGlzcHJpbWUgfCBuZXh0cHJpbWUgfCBpc3NxdWFyZSB8IHJlYWRpbnRlZ2VyIHwgZXhpdAorZXhwcmVzc2lvbmxpc3QgOj0gZXhwcmVzc2lvbmxpc3QsIGV4cHJlc3Npb24gfCBleHByZXNzaW9uCisKKy8vIExSKDEpICEhIT8KK2V4cHJlc3Npb24gICAgOj0gc3RyaW5nIHwgbnVtZXhwcmVzc2lvbgorbnVtZXhwcmVzc2lvbiA6PSBjbXBleHByICYmIGNtcGV4cHIgfCBjbXBleHByIFx8XHwgY21wZXhwciB8IGNtcGV4cHIKK2NtcGV4cHIgICAgICAgOj0gYm9vbGV4cHIgIDwgYm9vbGV4cHIgfCBib29sZXhwciAgPiBib29sZXhwciB8IGJvb2xleHByID09IGJvb2xleHByIHwgCisgICAgICAgICAgICAgICAgIGJvb2xleHByIDw9IGJvb2xleHByIHwgYm9vbGV4cHIgPj0gYm9vbGV4cHIgfCBib29sZXhwcgorYm9vbGV4cHIgICAgICA6PSBzaGlmdGV4cHIgJiBzaGlmdGV4cHIgfCBzaGlmdGV4cHIgXiBzaGlmdGV4cHIgfCBzaGlmdGV4cHIgXHwgc2hpZnRleHByIHwgc2hpZnRleHByCitzaGlmdGV4cHIgICAgIDo9IGFkZHN1YmV4cHIgPDwgYWRkc3ViZXhwciB8IGFkZHN1YmV4cHIgPj4gYWRkc3ViZXhwciB8IGFkZHN1YmV4cHIKK2FkZHN1YmV4cHIgICAgOj0gbXVsZXhwciArIG11bGV4cHIgfCBtdWxleHByIC0gbXVsZXhwciB8IG11bGV4cHIKK211bGV4cHIgICAgICAgOj0gZXhwciAqIGV4cHIgICAgICAgfCBleHByIC8gZXhwciB8IGV4cHIgJSBleHByIHwgZXhwcgorZXhwciAgICAgICAgICA6PSAtbmV4cHIgfCBuZXhwciAKK25leHByICAgICAgICAgOj0gaW50ZWdlciB8IGlkZW50aWZpZXIgfCAoIG51bWV4cHJlc3Npb24gKSB8IGlkZW50aWZpZXJbbnVtZXhwcmVzc2lvbl0gCisKK2lkZW50aWZpZXIgICAgOj0gaWRlbnRpZmVyIGRpZ2l0cyB8IGlkZW50aWZpZXIgYWxwaGEgfCBhbHBoYQorYWxwaGEgICAgICAgICA6PSBhIC4uLiB6IHwgQSAuLi4gWgoraW50ZWdlciAgICAgICA6PSBoZXhudW1iZXIgfCBkaWdpdHMgCitoZXhudW1iZXIgICAgIDo9IDB4aGV4ZGlnaXRzCitoZXhkaWdpdHMgICAgIDo9IGhleGRpZ2l0cyBoZXhkaWdpdCB8IGhleGRpZ2l0CitoZXhkaWdpdCAgICAgIDo9IDAgLi4uIDkgfCBhIC4uLiBmIHwgQSAuLi4gRgorZGlnaXRzICAgICAgICA6PSBkaWdpdHMgZGlnaXQgfCBkaWdpdCAKK2RpZ2l0ICAgICAgICAgOj0gMCAuLi4gOQpkaWZmIC0tZ2l0IGEvbGlidG9tbWF0aC90b21tYXRoLmggYi9saWJ0b21tYXRoL3RvbW1hdGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWFkM2QwCi0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC90b21tYXRoLmgKQEAgLTAsMCArMSw1ODQgQEAKKy8qIExpYlRvbU1hdGgsIG11bHRpcGxlLXByZWNpc2lvbiBpbnRlZ2VyIGxpYnJhcnkgLS0gVG9tIFN0IERlbmlzCisgKgorICogTGliVG9tTWF0aCBpcyBhIGxpYnJhcnkgdGhhdCBwcm92aWRlcyBtdWx0aXBsZS1wcmVjaXNpb24KKyAqIGludGVnZXIgYXJpdGhtZXRpYyBhcyB3ZWxsIGFzIG51bWJlciB0aGVvcmV0aWMgZnVuY3Rpb25hbGl0eS4KKyAqCisgKiBUaGUgbGlicmFyeSB3YXMgZGVzaWduZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIE1QSSBsaWJyYXJ5IGJ5CisgKiBNaWNoYWVsIEZyb21iZXJnZXIgYnV0IGhhcyBiZWVuIHdyaXR0ZW4gZnJvbSBzY3JhdGNoIHdpdGgKKyAqIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9ucyBpbiBwbGFjZS4KKyAqCisgKiBUaGUgbGlicmFyeSBpcyBmcmVlIGZvciBhbGwgcHVycG9zZXMgd2l0aG91dCBhbnkgZXhwcmVzcworICogZ3VhcmFudGVlIGl0IHdvcmtzLgorICoKKyAqIFRvbSBTdCBEZW5pcywgdG9tc3RkZW5pc0BnbWFpbC5jb20sIGh0dHA6Ly9tYXRoLmxpYnRvbWNyeXB0LmNvbQorICovCisjaWZuZGVmIEJOX0hfCisjZGVmaW5lIEJOX0hfCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpbmNsdWRlICJ0b21tYXRoX2NsYXNzLmgiCisKKyNpZm5kZWYgTUlOCisgICAjZGVmaW5lIE1JTih4LHkpICgoeCk8KHkpPyh4KTooeSkpCisjZW5kaWYKKworI2lmbmRlZiBNQVgKKyAgICNkZWZpbmUgTUFYKHgseSkgKCh4KT4oeSk/KHgpOih5KSkKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworCisvKiBDKysgY29tcGlsZXJzIGRvbid0IGxpa2UgYXNzaWduaW5nIHZvaWQgKiB0byBtcF9kaWdpdCAqICovCisjZGVmaW5lICBPUFRfQ0FTVCh4KSAgKHggKikKKworI2Vsc2UKKworLyogQyBvbiB0aGUgb3RoZXIgaGFuZCBkb2Vzbid0IGNhcmUgKi8KKyNkZWZpbmUgIE9QVF9DQVNUKHgpCisKKyNlbmRpZgorCisKKy8qIGRldGVjdCA2NC1iaXQgbW9kZSBpZiBwb3NzaWJsZSAqLworI2lmIGRlZmluZWQoX194ODZfNjRfXykgCisgICAjaWYgIShkZWZpbmVkKE1QXzY0QklUKSAmJiBkZWZpbmVkKE1QXzE2QklUKSAmJiBkZWZpbmVkKE1QXzhCSVQpKQorICAgICAgI2RlZmluZSBNUF82NEJJVAorICAgI2VuZGlmCisjZW5kaWYKKworLyogc29tZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLgorICoKKyAqIEEgIm1wX2RpZ2l0IiBtdXN0IGJlIGFibGUgdG8gaG9sZCBESUdJVF9CSVQgKyAxIGJpdHMKKyAqIEEgIm1wX3dvcmQiIG11c3QgYmUgYWJsZSB0byBob2xkIDIqRElHSVRfQklUICsgMSBiaXRzCisgKgorICogQXQgdGhlIHZlcnkgbGVhc3QgYSBtcF9kaWdpdCBtdXN0IGJlIGFibGUgdG8gaG9sZCA3IGJpdHMKKyAqIFthbnkgc2l6ZSBiZXlvbmQgdGhhdCBpcyBvayBwcm92aWRlZCBpdCBkb2Vzbid0IG92ZXJmbG93IHRoZSBkYXRhIHR5cGVdCisgKi8KKyNpZmRlZiBNUF84QklUCisgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgICAgICBtcF9kaWdpdDsKKyAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICAgIG1wX3dvcmQ7CisjZWxpZiBkZWZpbmVkKE1QXzE2QklUKQorICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgICAgbXBfZGlnaXQ7CisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICBtcF93b3JkOworI2VsaWYgZGVmaW5lZChNUF82NEJJVCkKKyAgIC8qIGZvciBHQ0Mgb25seSBvbiBzdXBwb3J0ZWQgcGxhdGZvcm1zICovCisjaWZuZGVmIENSWVBUCisgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bG9uZzY0OworICAgdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nICAgbG9uZzY0OworI2VuZGlmCisKKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgIG1wX2RpZ2l0OworICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbXBfd29yZCBfX2F0dHJpYnV0ZV9fICgobW9kZShUSSkpKTsKKworICAgI2RlZmluZSBESUdJVF9CSVQgICAgICAgICAgNjAKKyNlbHNlCisgICAvKiB0aGlzIGlzIHRoZSBkZWZhdWx0IGNhc2UsIDI4LWJpdCBkaWdpdHMgKi8KKyAgIAorICAgLyogdGhpcyBpcyB0byBtYWtlIHBvcnRpbmcgaW50byBMaWJUb21DcnlwdCBlYXNpZXIgOi0pICovCisjaWZuZGVmIENSWVBUCisgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pIAorICAgICAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0ICAgdWxvbmc2NDsKKyAgICAgIHR5cGVkZWYgc2lnbmVkIF9faW50NjQgICAgIGxvbmc2NDsKKyAgICNlbHNlCisgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bG9uZzY0OworICAgICAgdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nICAgbG9uZzY0OworICAgI2VuZGlmCisjZW5kaWYKKworICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbXBfZGlnaXQ7CisgICB0eXBlZGVmIHVsb25nNjQgICAgICAgICAgICBtcF93b3JkOworCisjaWZkZWYgTVBfMzFCSVQgICAKKyAgIC8qIHRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRoYXQgdXNlcyAzMS1iaXQgZGlnaXRzICovCisgICAjZGVmaW5lIERJR0lUX0JJVCAgICAgICAgICAzMQorI2Vsc2UKKyAgIC8qIGRlZmF1bHQgY2FzZSBpcyAyOC1iaXQgZGlnaXRzLCBkZWZpbmVzIE1QXzI4QklUIGFzIGEgaGFuZHkgbWFjcm8gdG8gdGVzdCAqLworICAgI2RlZmluZSBESUdJVF9CSVQgICAgICAgICAgMjgKKyAgICNkZWZpbmUgTVBfMjhCSVQKKyNlbmRpZiAgIAorI2VuZGlmCisKKy8qIGRlZmluZSBoZWFwIG1hY3JvcyAqLworI2lmbmRlZiBDUllQVAorICAgLyogZGVmYXVsdCB0byBsaWJjIHN0dWZmICovCisgICAjaWZuZGVmIFhNQUxMT0MgCisgICAgICAgI2RlZmluZSBYTUFMTE9DICBtYWxsb2MKKyAgICAgICAjZGVmaW5lIFhGUkVFICAgIGZyZWUKKyAgICAgICAjZGVmaW5lIFhSRUFMTE9DIHJlYWxsb2MKKyAgICAgICAjZGVmaW5lIFhDQUxMT0MgIGNhbGxvYworICAgI2Vsc2UKKyAgICAgIC8qIHByb3RvdHlwZXMgZm9yIG91ciBoZWFwIGZ1bmN0aW9ucyAqLworICAgICAgZXh0ZXJuIHZvaWQgKlhNQUxMT0Moc2l6ZV90IG4pOworICAgICAgZXh0ZXJuIHZvaWQgKlhSRUFMTE9DKHZvaWQgKnAsIHNpemVfdCBuKTsKKyAgICAgIGV4dGVybiB2b2lkICpYQ0FMTE9DKHNpemVfdCBuLCBzaXplX3Qgcyk7CisgICAgICBleHRlcm4gdm9pZCBYRlJFRSh2b2lkICpwKTsKKyAgICNlbmRpZgorI2VuZGlmCisKKworLyogb3RoZXJ3aXNlIHRoZSBiaXRzIHBlciBkaWdpdCBpcyBjYWxjdWxhdGVkIGF1dG9tYXRpY2FsbHkgZnJvbSB0aGUgc2l6ZSBvZiBhIG1wX2RpZ2l0ICovCisjaWZuZGVmIERJR0lUX0JJVAorICAgI2RlZmluZSBESUdJVF9CSVQgICAgICgoaW50KSgoQ0hBUl9CSVQgKiBzaXplb2YobXBfZGlnaXQpIC0gMSkpKSAgLyogYml0cyBwZXIgZGlnaXQgKi8KKyNlbmRpZgorCisjZGVmaW5lIE1QX0RJR0lUX0JJVCAgICAgRElHSVRfQklUCisjZGVmaW5lIE1QX01BU0sgICAgICAgICAgKCgoKG1wX2RpZ2l0KTEpPDwoKG1wX2RpZ2l0KURJR0lUX0JJVCkpLSgobXBfZGlnaXQpMSkpCisjZGVmaW5lIE1QX0RJR0lUX01BWCAgICAgTVBfTUFTSworCisvKiBlcXVhbGl0aWVzICovCisjZGVmaW5lIE1QX0xUICAgICAgICAtMSAgIC8qIGxlc3MgdGhhbiAqLworI2RlZmluZSBNUF9FUSAgICAgICAgIDAgICAvKiBlcXVhbCB0byAqLworI2RlZmluZSBNUF9HVCAgICAgICAgIDEgICAvKiBncmVhdGVyIHRoYW4gKi8KKworI2RlZmluZSBNUF9aUE9TICAgICAgIDAgICAvKiBwb3NpdGl2ZSBpbnRlZ2VyICovCisjZGVmaW5lIE1QX05FRyAgICAgICAgMSAgIC8qIG5lZ2F0aXZlICovCisKKyNkZWZpbmUgTVBfT0tBWSAgICAgICAwICAgLyogb2sgcmVzdWx0ICovCisjZGVmaW5lIE1QX01FTSAgICAgICAgLTIgIC8qIG91dCBvZiBtZW0gKi8KKyNkZWZpbmUgTVBfVkFMICAgICAgICAtMyAgLyogaW52YWxpZCBpbnB1dCAqLworI2RlZmluZSBNUF9SQU5HRSAgICAgIE1QX1ZBTAorCisjZGVmaW5lIE1QX1lFUyAgICAgICAgMSAgIC8qIHllcyByZXNwb25zZSAqLworI2RlZmluZSBNUF9OTyAgICAgICAgIDAgICAvKiBubyByZXNwb25zZSAqLworCisvKiBQcmltYWxpdHkgZ2VuZXJhdGlvbiBmbGFncyAqLworI2RlZmluZSBMVE1fUFJJTUVfQkJTICAgICAgMHgwMDAxIC8qIEJCUyBzdHlsZSBwcmltZSAqLworI2RlZmluZSBMVE1fUFJJTUVfU0FGRSAgICAgMHgwMDAyIC8qIFNhZmUgcHJpbWUgKHAtMSkvMiA9PSBwcmltZSAqLworI2RlZmluZSBMVE1fUFJJTUVfMk1TQl9PTiAgMHgwMDA4IC8qIGZvcmNlIDJuZCBNU0IgdG8gMSAqLworCit0eXBlZGVmIGludCAgICAgICAgICAgbXBfZXJyOworCisvKiB5b3UnbGwgaGF2ZSB0byB0dW5lIHRoZXNlLi4uICovCitleHRlcm4gaW50IEtBUkFUU1VCQV9NVUxfQ1VUT0ZGLAorICAgICAgICAgICBLQVJBVFNVQkFfU1FSX0NVVE9GRiwKKyAgICAgICAgICAgVE9PTV9NVUxfQ1VUT0ZGLAorICAgICAgICAgICBUT09NX1NRUl9DVVRPRkY7CisKKy8qIGRlZmluZSB0aGlzIHRvIHVzZSBsb3dlciBtZW1vcnkgdXNhZ2Ugcm91dGluZXMgKGV4cHRtb2RzIG1vc3RseSkgKi8KKy8qICNkZWZpbmUgTVBfTE9XX01FTSAqLworCisvKiBkZWZhdWx0IHByZWNpc2lvbiAqLworI2lmbmRlZiBNUF9QUkVDCisgICAjaWZuZGVmIE1QX0xPV19NRU0KKyAgICAgICNkZWZpbmUgTVBfUFJFQyAgICAgICAgICAgICAgICAgMzIgICAgIC8qIGRlZmF1bHQgZGlnaXRzIG9mIHByZWNpc2lvbiAqLworICAgI2Vsc2UKKyAgICAgICNkZWZpbmUgTVBfUFJFQyAgICAgICAgICAgICAgICAgOCAgICAgIC8qIGRlZmF1bHQgZGlnaXRzIG9mIHByZWNpc2lvbiAqLworICAgI2VuZGlmICAgCisjZW5kaWYKKworLyogc2l6ZSBvZiBjb21iYSBhcnJheXMsIHNob3VsZCBiZSBhdCBsZWFzdCAyICogMioqKEJJVFNfUEVSX1dPUkQgLSBCSVRTX1BFUl9ESUdJVCoyKSAqLworI2RlZmluZSBNUF9XQVJSQVkgICAgICAgICAgICAgICAoMSA8PCAoc2l6ZW9mKG1wX3dvcmQpICogQ0hBUl9CSVQgLSAyICogRElHSVRfQklUICsgMSkpCisKKy8qIHRoZSBpbmZhbW91cyBtcF9pbnQgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCAgeworICAgIGludCB1c2VkLCBhbGxvYywgc2lnbjsKKyAgICBtcF9kaWdpdCAqZHA7Cit9IG1wX2ludDsKKworLyogY2FsbGJhY2sgZm9yIG1wX3ByaW1lX3JhbmRvbSwgc2hvdWxkIGZpbGwgZHN0IHdpdGggcmFuZG9tIGJ5dGVzIGFuZCByZXR1cm4gaG93IG1hbnkgcmVhZCBbdXB0byBsZW5dICovCit0eXBlZGVmIGludCBsdG1fcHJpbWVfY2FsbGJhY2sodW5zaWduZWQgY2hhciAqZHN0LCBpbnQgbGVuLCB2b2lkICpkYXQpOworCisKKyNkZWZpbmUgVVNFRChtKSAgICAoKG0pLT51c2VkKQorI2RlZmluZSBESUdJVChtLGspICgobSktPmRwWyhrKV0pCisjZGVmaW5lIFNJR04obSkgICAgKChtKS0+c2lnbikKKworLyogZXJyb3IgY29kZSB0byBjaGFyKiBzdHJpbmcgKi8KK2NoYXIgKm1wX2Vycm9yX3RvX3N0cmluZyhpbnQgY29kZSk7CisKKy8qIC0tLT4gaW5pdCBhbmQgZGVpbml0IGJpZ251bSBmdW5jdGlvbnMgPC0tLSAqLworLyogaW5pdCBhIGJpZ251bSAqLworaW50IG1wX2luaXQobXBfaW50ICphKTsKKworLyogZnJlZSBhIGJpZ251bSAqLwordm9pZCBtcF9jbGVhcihtcF9pbnQgKmEpOworCisvKiBpbml0IGEgbnVsbCB0ZXJtaW5hdGVkIHNlcmllcyBvZiBhcmd1bWVudHMgKi8KK2ludCBtcF9pbml0X211bHRpKG1wX2ludCAqbXAsIC4uLik7CisKKy8qIGNsZWFyIGEgbnVsbCB0ZXJtaW5hdGVkIHNlcmllcyBvZiBhcmd1bWVudHMgKi8KK3ZvaWQgbXBfY2xlYXJfbXVsdGkobXBfaW50ICptcCwgLi4uKTsKKworLyogZXhjaGFuZ2UgdHdvIGludHMgKi8KK3ZvaWQgbXBfZXhjaChtcF9pbnQgKmEsIG1wX2ludCAqYik7CisKKy8qIHNocmluayByYW0gcmVxdWlyZWQgZm9yIGEgYmlnbnVtICovCitpbnQgbXBfc2hyaW5rKG1wX2ludCAqYSk7CisKKy8qIGdyb3cgYW4gaW50IHRvIGEgZ2l2ZW4gc2l6ZSAqLworaW50IG1wX2dyb3cobXBfaW50ICphLCBpbnQgc2l6ZSk7CisKKy8qIGluaXQgdG8gYSBnaXZlbiBudW1iZXIgb2YgZGlnaXRzICovCitpbnQgbXBfaW5pdF9zaXplKG1wX2ludCAqYSwgaW50IHNpemUpOworCisvKiAtLS0+IEJhc2ljIE1hbmlwdWxhdGlvbnMgPC0tLSAqLworI2RlZmluZSBtcF9pc3plcm8oYSkgKCgoYSktPnVzZWQgPT0gMCkgPyBNUF9ZRVMgOiBNUF9OTykKKyNkZWZpbmUgbXBfaXNldmVuKGEpICgoKGEpLT51c2VkID4gMCAmJiAoKChhKS0+ZHBbMF0gJiAxKSA9PSAwKSkgPyBNUF9ZRVMgOiBNUF9OTykKKyNkZWZpbmUgbXBfaXNvZGQoYSkgICgoKGEpLT51c2VkID4gMCAmJiAoKChhKS0+ZHBbMF0gJiAxKSA9PSAxKSkgPyBNUF9ZRVMgOiBNUF9OTykKKworLyogc2V0IHRvIHplcm8gKi8KK3ZvaWQgbXBfemVybyhtcF9pbnQgKmEpOworCisvKiBzZXQgdG8gYSBkaWdpdCAqLwordm9pZCBtcF9zZXQobXBfaW50ICphLCBtcF9kaWdpdCBiKTsKKworLyogc2V0IGEgMzItYml0IGNvbnN0ICovCitpbnQgbXBfc2V0X2ludChtcF9pbnQgKmEsIHVuc2lnbmVkIGxvbmcgYik7CisKKy8qIGdldCBhIDMyLWJpdCB2YWx1ZSAqLwordW5zaWduZWQgbG9uZyBtcF9nZXRfaW50KG1wX2ludCAqIGEpOworCisvKiBpbml0aWFsaXplIGFuZCBzZXQgYSBkaWdpdCAqLworaW50IG1wX2luaXRfc2V0IChtcF9pbnQgKiBhLCBtcF9kaWdpdCBiKTsKKworLyogaW5pdGlhbGl6ZSBhbmQgc2V0IDMyLWJpdCB2YWx1ZSAqLworaW50IG1wX2luaXRfc2V0X2ludCAobXBfaW50ICogYSwgdW5zaWduZWQgbG9uZyBiKTsKKworLyogY29weSwgYiA9IGEgKi8KK2ludCBtcF9jb3B5KG1wX2ludCAqYSwgbXBfaW50ICpiKTsKKworLyogaW5pdHMgYW5kIGNvcGllcywgYSA9IGIgKi8KK2ludCBtcF9pbml0X2NvcHkobXBfaW50ICphLCBtcF9pbnQgKmIpOworCisvKiB0cmltIHVudXNlZCBkaWdpdHMgKi8KK3ZvaWQgbXBfY2xhbXAobXBfaW50ICphKTsKKworLyogLS0tPiBkaWdpdCBtYW5pcHVsYXRpb24gPC0tLSAqLworCisvKiByaWdodCBzaGlmdCBieSAiYiIgZGlnaXRzICovCit2b2lkIG1wX3JzaGQobXBfaW50ICphLCBpbnQgYik7CisKKy8qIGxlZnQgc2hpZnQgYnkgImIiIGRpZ2l0cyAqLworaW50IG1wX2xzaGQobXBfaW50ICphLCBpbnQgYik7CisKKy8qIGMgPSBhIC8gMioqYiAqLworaW50IG1wX2Rpdl8yZChtcF9pbnQgKmEsIGludCBiLCBtcF9pbnQgKmMsIG1wX2ludCAqZCk7CisKKy8qIGIgPSBhLzIgKi8KK2ludCBtcF9kaXZfMihtcF9pbnQgKmEsIG1wX2ludCAqYik7CisKKy8qIGMgPSBhICogMioqYiAqLworaW50IG1wX211bF8yZChtcF9pbnQgKmEsIGludCBiLCBtcF9pbnQgKmMpOworCisvKiBiID0gYSoyICovCitpbnQgbXBfbXVsXzIobXBfaW50ICphLCBtcF9pbnQgKmIpOworCisvKiBjID0gYSBtb2QgMioqZCAqLworaW50IG1wX21vZF8yZChtcF9pbnQgKmEsIGludCBiLCBtcF9pbnQgKmMpOworCisvKiBjb21wdXRlcyBhID0gMioqYiAqLworaW50IG1wXzJleHB0KG1wX2ludCAqYSwgaW50IGIpOworCisvKiBDb3VudHMgdGhlIG51bWJlciBvZiBsc2JzIHdoaWNoIGFyZSB6ZXJvIGJlZm9yZSB0aGUgZmlyc3QgemVybyBiaXQgKi8KK2ludCBtcF9jbnRfbHNiKG1wX2ludCAqYSk7CisKKy8qIEkgTG92ZSBFYXJ0aCEgKi8KKworLyogbWFrZXMgYSBwc2V1ZG8tcmFuZG9tIGludCBvZiBhIGdpdmVuIHNpemUgKi8KK2ludCBtcF9yYW5kKG1wX2ludCAqYSwgaW50IGRpZ2l0cyk7CisKKy8qIC0tLT4gYmluYXJ5IG9wZXJhdGlvbnMgPC0tLSAqLworLyogYyA9IGEgWE9SIGIgICovCitpbnQgbXBfeG9yKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworCisvKiBjID0gYSBPUiBiICovCitpbnQgbXBfb3IobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7CisKKy8qIGMgPSBhIEFORCBiICovCitpbnQgbXBfYW5kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworCisvKiAtLS0+IEJhc2ljIGFyaXRobWV0aWMgPC0tLSAqLworCisvKiBiID0gLWEgKi8KK2ludCBtcF9uZWcobXBfaW50ICphLCBtcF9pbnQgKmIpOworCisvKiBiID0gfGF8ICovCitpbnQgbXBfYWJzKG1wX2ludCAqYSwgbXBfaW50ICpiKTsKKworLyogY29tcGFyZSBhIHRvIGIgKi8KK2ludCBtcF9jbXAobXBfaW50ICphLCBtcF9pbnQgKmIpOworCisvKiBjb21wYXJlIHxhfCB0byB8YnwgKi8KK2ludCBtcF9jbXBfbWFnKG1wX2ludCAqYSwgbXBfaW50ICpiKTsKKworLyogYyA9IGEgKyBiICovCitpbnQgbXBfYWRkKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworCisvKiBjID0gYSAtIGIgKi8KK2ludCBtcF9zdWIobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7CisKKy8qIGMgPSBhICogYiAqLworaW50IG1wX211bChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKTsKKworLyogYiA9IGEqYSAgKi8KK2ludCBtcF9zcXIobXBfaW50ICphLCBtcF9pbnQgKmIpOworCisvKiBhL2IgPT4gY2IgKyBkID09IGEgKi8KK2ludCBtcF9kaXYobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYywgbXBfaW50ICpkKTsKKworLyogYyA9IGEgbW9kIGIsIDAgPD0gYyA8IGIgICovCitpbnQgbXBfbW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworCisvKiAtLS0+IHNpbmdsZSBkaWdpdCBmdW5jdGlvbnMgPC0tLSAqLworCisvKiBjb21wYXJlIGFnYWluc3QgYSBzaW5nbGUgZGlnaXQgKi8KK2ludCBtcF9jbXBfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGIpOworCisvKiBjID0gYSArIGIgKi8KK2ludCBtcF9hZGRfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGIsIG1wX2ludCAqYyk7CisKKy8qIGMgPSBhIC0gYiAqLworaW50IG1wX3N1Yl9kKG1wX2ludCAqYSwgbXBfZGlnaXQgYiwgbXBfaW50ICpjKTsKKworLyogYyA9IGEgKiBiICovCitpbnQgbXBfbXVsX2QobXBfaW50ICphLCBtcF9kaWdpdCBiLCBtcF9pbnQgKmMpOworCisvKiBhL2IgPT4gY2IgKyBkID09IGEgKi8KK2ludCBtcF9kaXZfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGIsIG1wX2ludCAqYywgbXBfZGlnaXQgKmQpOworCisvKiBhLzMgPT4gM2MgKyBkID09IGEgKi8KK2ludCBtcF9kaXZfMyhtcF9pbnQgKmEsIG1wX2ludCAqYywgbXBfZGlnaXQgKmQpOworCisvKiBjID0gYSoqYiAqLworaW50IG1wX2V4cHRfZChtcF9pbnQgKmEsIG1wX2RpZ2l0IGIsIG1wX2ludCAqYyk7CisKKy8qIGMgPSBhIG1vZCBiLCAwIDw9IGMgPCBiICAqLworaW50IG1wX21vZF9kKG1wX2ludCAqYSwgbXBfZGlnaXQgYiwgbXBfZGlnaXQgKmMpOworCisvKiAtLS0+IG51bWJlciB0aGVvcnkgPC0tLSAqLworCisvKiBkID0gYSArIGIgKG1vZCBjKSAqLworaW50IG1wX2FkZG1vZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjLCBtcF9pbnQgKmQpOworCisvKiBkID0gYSAtIGIgKG1vZCBjKSAqLworaW50IG1wX3N1Ym1vZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjLCBtcF9pbnQgKmQpOworCisvKiBkID0gYSAqIGIgKG1vZCBjKSAqLworaW50IG1wX211bG1vZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjLCBtcF9pbnQgKmQpOworCisvKiBjID0gYSAqIGEgKG1vZCBiKSAqLworaW50IG1wX3Nxcm1vZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKTsKKworLyogYyA9IDEvYSAobW9kIGIpICovCitpbnQgbXBfaW52bW9kKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworCisvKiBjID0gKGEsIGIpICovCitpbnQgbXBfZ2NkKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworCisvKiBwcm9kdWNlcyB2YWx1ZSBzdWNoIHRoYXQgVTEqYSArIFUyKmIgPSBVMyAqLworaW50IG1wX2V4dGV1Y2xpZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpVMSwgbXBfaW50ICpVMiwgbXBfaW50ICpVMyk7CisKKy8qIGMgPSBbYSwgYl0gb3IgKGEqYikvKGEsIGIpICovCitpbnQgbXBfbGNtKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworCisvKiBmaW5kcyBvbmUgb2YgdGhlIGIndGggcm9vdCBvZiBhLCBzdWNoIHRoYXQgfGN8KipiIDw9IHxhfAorICoKKyAqIHJldHVybnMgZXJyb3IgaWYgYSA8IDAgYW5kIGIgaXMgZXZlbgorICovCitpbnQgbXBfbl9yb290KG1wX2ludCAqYSwgbXBfZGlnaXQgYiwgbXBfaW50ICpjKTsKKworLyogc3BlY2lhbCBzcXJ0IGFsZ28gKi8KK2ludCBtcF9zcXJ0KG1wX2ludCAqYXJnLCBtcF9pbnQgKnJldCk7CisKKy8qIGlzIG51bWJlciBhIHNxdWFyZT8gKi8KK2ludCBtcF9pc19zcXVhcmUobXBfaW50ICphcmcsIGludCAqcmV0KTsKKworLyogY29tcHV0ZXMgdGhlIGphY29iaSBjID0gKGEgfCBuKSAob3IgTGVnZW5kcmUgaWYgYiBpcyBwcmltZSkgICovCitpbnQgbXBfamFjb2JpKG1wX2ludCAqYSwgbXBfaW50ICpuLCBpbnQgKmMpOworCisvKiB1c2VkIHRvIHNldHVwIHRoZSBCYXJyZXR0IHJlZHVjdGlvbiBmb3IgYSBnaXZlbiBtb2R1bHVzIGIgKi8KK2ludCBtcF9yZWR1Y2Vfc2V0dXAobXBfaW50ICphLCBtcF9pbnQgKmIpOworCisvKiBCYXJyZXR0IFJlZHVjdGlvbiwgY29tcHV0ZXMgYSAobW9kIGIpIHdpdGggYSBwcmVjb21wdXRlZCB2YWx1ZSBjCisgKgorICogQXNzdW1lcyB0aGF0IDAgPCBhIDw9IGIqYiwgbm90ZSBpZiAwID4gYSA+IC0oYipiKSB0aGVuIHlvdSBjYW4gbWVyZWx5CisgKiBjb21wdXRlIHRoZSByZWR1Y3Rpb24gYXMgLTEgKiBtcF9yZWR1Y2UobXBfYWJzKGEpKSBbcHNldWRvIGNvZGVdLgorICovCitpbnQgbXBfcmVkdWNlKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworCisvKiBzZXR1cHMgdGhlIG1vbnRnb21lcnkgcmVkdWN0aW9uICovCitpbnQgbXBfbW9udGdvbWVyeV9zZXR1cChtcF9pbnQgKmEsIG1wX2RpZ2l0ICptcCk7CisKKy8qIGNvbXB1dGVzIGEgPSBCKipuIG1vZCBiIHdpdGhvdXQgZGl2aXNpb24gb3IgbXVsdGlwbGljYXRpb24gdXNlZnVsIGZvcgorICogbm9ybWFsaXppbmcgbnVtYmVycyBpbiBhIE1vbnRnb21lcnkgc3lzdGVtLgorICovCitpbnQgbXBfbW9udGdvbWVyeV9jYWxjX25vcm1hbGl6YXRpb24obXBfaW50ICphLCBtcF9pbnQgKmIpOworCisvKiBjb21wdXRlcyB4L1IgPT0geCAobW9kIE4pIHZpYSBNb250Z29tZXJ5IFJlZHVjdGlvbiAqLworaW50IG1wX21vbnRnb21lcnlfcmVkdWNlKG1wX2ludCAqYSwgbXBfaW50ICptLCBtcF9kaWdpdCBtcCk7CisKKy8qIHJldHVybnMgMSBpZiBhIGlzIGEgdmFsaWQgRFIgbW9kdWx1cyAqLworaW50IG1wX2RyX2lzX21vZHVsdXMobXBfaW50ICphKTsKKworLyogc2V0cyB0aGUgdmFsdWUgb2YgImQiIHJlcXVpcmVkIGZvciBtcF9kcl9yZWR1Y2UgKi8KK3ZvaWQgbXBfZHJfc2V0dXAobXBfaW50ICphLCBtcF9kaWdpdCAqZCk7CisKKy8qIHJlZHVjZXMgYSBtb2R1bG8gYiB1c2luZyB0aGUgRGltaW5pc2hlZCBSYWRpeCBtZXRob2QgKi8KK2ludCBtcF9kcl9yZWR1Y2UobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2RpZ2l0IG1wKTsKKworLyogcmV0dXJucyB0cnVlIGlmIGEgY2FuIGJlIHJlZHVjZWQgd2l0aCBtcF9yZWR1Y2VfMmsgKi8KK2ludCBtcF9yZWR1Y2VfaXNfMmsobXBfaW50ICphKTsKKworLyogZGV0ZXJtaW5lcyBrIHZhbHVlIGZvciAyayByZWR1Y3Rpb24gKi8KK2ludCBtcF9yZWR1Y2VfMmtfc2V0dXAobXBfaW50ICphLCBtcF9kaWdpdCAqZCk7CisKKy8qIHJlZHVjZXMgYSBtb2R1bG8gYiB3aGVyZSBiIGlzIG9mIHRoZSBmb3JtIDIqKnAgLSBrIFswIDw9IGFdICovCitpbnQgbXBfcmVkdWNlXzJrKG1wX2ludCAqYSwgbXBfaW50ICpuLCBtcF9kaWdpdCBkKTsKKworLyogcmV0dXJucyB0cnVlIGlmIGEgY2FuIGJlIHJlZHVjZWQgd2l0aCBtcF9yZWR1Y2VfMmtfbCAqLworaW50IG1wX3JlZHVjZV9pc18ya19sKG1wX2ludCAqYSk7CisKKy8qIGRldGVybWluZXMgayB2YWx1ZSBmb3IgMmsgcmVkdWN0aW9uICovCitpbnQgbXBfcmVkdWNlXzJrX3NldHVwX2wobXBfaW50ICphLCBtcF9pbnQgKmQpOworCisvKiByZWR1Y2VzIGEgbW9kdWxvIGIgd2hlcmUgYiBpcyBvZiB0aGUgZm9ybSAyKipwIC0gayBbMCA8PSBhXSAqLworaW50IG1wX3JlZHVjZV8ya19sKG1wX2ludCAqYSwgbXBfaW50ICpuLCBtcF9pbnQgKmQpOworCisvKiBkID0gYSoqYiAobW9kIGMpICovCitpbnQgbXBfZXhwdG1vZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjLCBtcF9pbnQgKmQpOworCisvKiAtLS0+IFByaW1lcyA8LS0tICovCisKKy8qIG51bWJlciBvZiBwcmltZXMgKi8KKyNpZmRlZiBNUF84QklUCisgICAjZGVmaW5lIFBSSU1FX1NJWkUgICAgICAzMQorI2Vsc2UKKyAgICNkZWZpbmUgUFJJTUVfU0laRSAgICAgIDI1NgorI2VuZGlmCisKKy8qIHRhYmxlIG9mIGZpcnN0IFBSSU1FX1NJWkUgcHJpbWVzICovCitleHRlcm4gY29uc3QgbXBfZGlnaXQgbHRtX3ByaW1lX3RhYltdOworCisvKiByZXN1bHQ9MSBpZiBhIGlzIGRpdmlzaWJsZSBieSBvbmUgb2YgdGhlIGZpcnN0IFBSSU1FX1NJWkUgcHJpbWVzICovCitpbnQgbXBfcHJpbWVfaXNfZGl2aXNpYmxlKG1wX2ludCAqYSwgaW50ICpyZXN1bHQpOworCisvKiBwZXJmb3JtcyBvbmUgRmVybWF0IHRlc3Qgb2YgImEiIHVzaW5nIGJhc2UgImIiLgorICogU2V0cyByZXN1bHQgdG8gMCBpZiBjb21wb3NpdGUgb3IgMSBpZiBwcm9iYWJsZSBwcmltZQorICovCitpbnQgbXBfcHJpbWVfZmVybWF0KG1wX2ludCAqYSwgbXBfaW50ICpiLCBpbnQgKnJlc3VsdCk7CisKKy8qIHBlcmZvcm1zIG9uZSBNaWxsZXItUmFiaW4gdGVzdCBvZiAiYSIgdXNpbmcgYmFzZSAiYiIuCisgKiBTZXRzIHJlc3VsdCB0byAwIGlmIGNvbXBvc2l0ZSBvciAxIGlmIHByb2JhYmxlIHByaW1lCisgKi8KK2ludCBtcF9wcmltZV9taWxsZXJfcmFiaW4obXBfaW50ICphLCBtcF9pbnQgKmIsIGludCAqcmVzdWx0KTsKKworLyogVGhpcyBnaXZlcyBbZm9yIGEgZ2l2ZW4gYml0IHNpemVdIHRoZSBudW1iZXIgb2YgdHJpYWxzIHJlcXVpcmVkCisgKiBzdWNoIHRoYXQgTWlsbGVyLVJhYmluIGdpdmVzIGEgcHJvYiBvZiBmYWlsdXJlIGxvd2VyIHRoYW4gMl4tOTYgCisgKi8KK2ludCBtcF9wcmltZV9yYWJpbl9taWxsZXJfdHJpYWxzKGludCBzaXplKTsKKworLyogcGVyZm9ybXMgdCByb3VuZHMgb2YgTWlsbGVyLVJhYmluIG9uICJhIiB1c2luZyB0aGUgZmlyc3QKKyAqIHQgcHJpbWUgYmFzZXMuICBBbHNvIHBlcmZvcm1zIGFuIGluaXRpYWwgc2lldmUgb2YgdHJpYWwKKyAqIGRpdmlzaW9uLiAgRGV0ZXJtaW5lcyBpZiAiYSIgaXMgcHJpbWUgd2l0aCBwcm9iYWJpbGl0eQorICogb2YgZXJyb3Igbm8gbW9yZSB0aGFuICgxLzQpKip0LgorICoKKyAqIFNldHMgcmVzdWx0IHRvIDEgaWYgcHJvYmFibHkgcHJpbWUsIDAgb3RoZXJ3aXNlCisgKi8KK2ludCBtcF9wcmltZV9pc19wcmltZShtcF9pbnQgKmEsIGludCB0LCBpbnQgKnJlc3VsdCk7CisKKy8qIGZpbmRzIHRoZSBuZXh0IHByaW1lIGFmdGVyIHRoZSBudW1iZXIgImEiIHVzaW5nICJ0IiB0cmlhbHMKKyAqIG9mIE1pbGxlci1SYWJpbi4KKyAqCisgKiBiYnNfc3R5bGUgPSAxIG1lYW5zIHRoZSBwcmltZSBtdXN0IGJlIGNvbmdydWVudCB0byAzIG1vZCA0CisgKi8KK2ludCBtcF9wcmltZV9uZXh0X3ByaW1lKG1wX2ludCAqYSwgaW50IHQsIGludCBiYnNfc3R5bGUpOworCisvKiBtYWtlcyBhIHRydWx5IHJhbmRvbSBwcmltZSBvZiBhIGdpdmVuIHNpemUgKGJ5dGVzKSwKKyAqIGNhbGwgd2l0aCBiYnMgPSAxIGlmIHlvdSB3YW50IGl0IHRvIGJlIGNvbmdydWVudCB0byAzIG1vZCA0IAorICoKKyAqIFlvdSBoYXZlIHRvIHN1cHBseSBhIGNhbGxiYWNrIHdoaWNoIGZpbGxzIGluIGEgYnVmZmVyIHdpdGggcmFuZG9tIGJ5dGVzLiAgImRhdCIgaXMgYSBwYXJhbWV0ZXIgeW91IGNhbgorICogaGF2ZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIChlLmcuIGEgc3RhdGUgb3Igc29tZXRoaW5nKS4gIFRoaXMgZnVuY3Rpb24gZG9lc24ndCB1c2UgImRhdCIgaXRzZWxmCisgKiBzbyBpdCBjYW4gYmUgTlVMTAorICoKKyAqIFRoZSBwcmltZSBnZW5lcmF0ZWQgd2lsbCBiZSBsYXJnZXIgdGhhbiAyXig4KnNpemUpLgorICovCisjZGVmaW5lIG1wX3ByaW1lX3JhbmRvbShhLCB0LCBzaXplLCBiYnMsIGNiLCBkYXQpIG1wX3ByaW1lX3JhbmRvbV9leChhLCB0LCAoKHNpemUpICogOCkgKyAxLCAoYmJzPT0xKT9MVE1fUFJJTUVfQkJTOjAsIGNiLCBkYXQpCisKKy8qIG1ha2VzIGEgdHJ1bHkgcmFuZG9tIHByaW1lIG9mIGEgZ2l2ZW4gc2l6ZSAoYml0cyksCisgKgorICogRmxhZ3MgYXJlIGFzIGZvbGxvd3M6CisgKiAKKyAqICAgTFRNX1BSSU1FX0JCUyAgICAgIC0gbWFrZSBwcmltZSBjb25ncnVlbnQgdG8gMyBtb2QgNAorICogICBMVE1fUFJJTUVfU0FGRSAgICAgLSBtYWtlIHN1cmUgKHAtMSkvMiBpcyBwcmltZSBhcyB3ZWxsIChpbXBsaWVzIExUTV9QUklNRV9CQlMpCisgKiAgIExUTV9QUklNRV8yTVNCX09GRiAtIG1ha2UgdGhlIDJuZCBoaWdoZXN0IGJpdCB6ZXJvCisgKiAgIExUTV9QUklNRV8yTVNCX09OICAtIG1ha2UgdGhlIDJuZCBoaWdoZXN0IGJpdCBvbmUKKyAqCisgKiBZb3UgaGF2ZSB0byBzdXBwbHkgYSBjYWxsYmFjayB3aGljaCBmaWxscyBpbiBhIGJ1ZmZlciB3aXRoIHJhbmRvbSBieXRlcy4gICJkYXQiIGlzIGEgcGFyYW1ldGVyIHlvdSBjYW4KKyAqIGhhdmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayAoZS5nLiBhIHN0YXRlIG9yIHNvbWV0aGluZykuICBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgdXNlICJkYXQiIGl0c2VsZgorICogc28gaXQgY2FuIGJlIE5VTEwKKyAqCisgKi8KK2ludCBtcF9wcmltZV9yYW5kb21fZXgobXBfaW50ICphLCBpbnQgdCwgaW50IHNpemUsIGludCBmbGFncywgbHRtX3ByaW1lX2NhbGxiYWNrIGNiLCB2b2lkICpkYXQpOworCisvKiAtLS0+IHJhZGl4IGNvbnZlcnNpb24gPC0tLSAqLworaW50IG1wX2NvdW50X2JpdHMobXBfaW50ICphKTsKKworaW50IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKG1wX2ludCAqYSk7CitpbnQgbXBfcmVhZF91bnNpZ25lZF9iaW4obXBfaW50ICphLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgYyk7CitpbnQgbXBfdG9fdW5zaWduZWRfYmluKG1wX2ludCAqYSwgdW5zaWduZWQgY2hhciAqYik7CitpbnQgbXBfdG9fdW5zaWduZWRfYmluX24gKG1wX2ludCAqIGEsIHVuc2lnbmVkIGNoYXIgKmIsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKK2ludCBtcF9zaWduZWRfYmluX3NpemUobXBfaW50ICphKTsKK2ludCBtcF9yZWFkX3NpZ25lZF9iaW4obXBfaW50ICphLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiLCBpbnQgYyk7CitpbnQgbXBfdG9fc2lnbmVkX2JpbihtcF9pbnQgKmEsICB1bnNpZ25lZCBjaGFyICpiKTsKK2ludCBtcF90b19zaWduZWRfYmluX24gKG1wX2ludCAqIGEsIHVuc2lnbmVkIGNoYXIgKmIsIHVuc2lnbmVkIGxvbmcgKm91dGxlbik7CisKK2ludCBtcF9yZWFkX3JhZGl4KG1wX2ludCAqYSwgY29uc3QgY2hhciAqc3RyLCBpbnQgcmFkaXgpOworaW50IG1wX3RvcmFkaXgobXBfaW50ICphLCBjaGFyICpzdHIsIGludCByYWRpeCk7CitpbnQgbXBfdG9yYWRpeF9uKG1wX2ludCAqIGEsIGNoYXIgKnN0ciwgaW50IHJhZGl4LCBpbnQgbWF4bGVuKTsKK2ludCBtcF9yYWRpeF9zaXplKG1wX2ludCAqYSwgaW50IHJhZGl4LCBpbnQgKnNpemUpOworCitpbnQgbXBfZnJlYWQobXBfaW50ICphLCBpbnQgcmFkaXgsIEZJTEUgKnN0cmVhbSk7CitpbnQgbXBfZndyaXRlKG1wX2ludCAqYSwgaW50IHJhZGl4LCBGSUxFICpzdHJlYW0pOworCisjZGVmaW5lIG1wX3JlYWRfcmF3KG1wLCBzdHIsIGxlbikgbXBfcmVhZF9zaWduZWRfYmluKChtcCksIChzdHIpLCAobGVuKSkKKyNkZWZpbmUgbXBfcmF3X3NpemUobXApICAgICAgICAgICBtcF9zaWduZWRfYmluX3NpemUobXApCisjZGVmaW5lIG1wX3RvcmF3KG1wLCBzdHIpICAgICAgICAgbXBfdG9fc2lnbmVkX2JpbigobXApLCAoc3RyKSkKKyNkZWZpbmUgbXBfcmVhZF9tYWcobXAsIHN0ciwgbGVuKSBtcF9yZWFkX3Vuc2lnbmVkX2JpbigobXApLCAoc3RyKSwgKGxlbikpCisjZGVmaW5lIG1wX21hZ19zaXplKG1wKSAgICAgICAgICAgbXBfdW5zaWduZWRfYmluX3NpemUobXApCisjZGVmaW5lIG1wX3RvbWFnKG1wLCBzdHIpICAgICAgICAgbXBfdG9fdW5zaWduZWRfYmluKChtcCksIChzdHIpKQorCisjZGVmaW5lIG1wX3RvYmluYXJ5KE0sIFMpICBtcF90b3JhZGl4KChNKSwgKFMpLCAyKQorI2RlZmluZSBtcF90b29jdGFsKE0sIFMpICAgbXBfdG9yYWRpeCgoTSksIChTKSwgOCkKKyNkZWZpbmUgbXBfdG9kZWNpbWFsKE0sIFMpIG1wX3RvcmFkaXgoKE0pLCAoUyksIDEwKQorI2RlZmluZSBtcF90b2hleChNLCBTKSAgICAgbXBfdG9yYWRpeCgoTSksIChTKSwgMTYpCisKKy8qIGxvd2xldmVsIGZ1bmN0aW9ucywgZG8gbm90IGNhbGwhICovCitpbnQgc19tcF9hZGQobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7CitpbnQgc19tcF9zdWIobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYyk7CisjZGVmaW5lIHNfbXBfbXVsKGEsIGIsIGMpIHNfbXBfbXVsX2RpZ3MoYSwgYiwgYywgKGEpLT51c2VkICsgKGIpLT51c2VkICsgMSkKK2ludCBmYXN0X3NfbXBfbXVsX2RpZ3MobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYywgaW50IGRpZ3MpOworaW50IHNfbXBfbXVsX2RpZ3MobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYywgaW50IGRpZ3MpOworaW50IGZhc3Rfc19tcF9tdWxfaGlnaF9kaWdzKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMsIGludCBkaWdzKTsKK2ludCBzX21wX211bF9oaWdoX2RpZ3MobXBfaW50ICphLCBtcF9pbnQgKmIsIG1wX2ludCAqYywgaW50IGRpZ3MpOworaW50IGZhc3Rfc19tcF9zcXIobXBfaW50ICphLCBtcF9pbnQgKmIpOworaW50IHNfbXBfc3FyKG1wX2ludCAqYSwgbXBfaW50ICpiKTsKK2ludCBtcF9rYXJhdHN1YmFfbXVsKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworaW50IG1wX3Rvb21fbXVsKG1wX2ludCAqYSwgbXBfaW50ICpiLCBtcF9pbnQgKmMpOworaW50IG1wX2thcmF0c3ViYV9zcXIobXBfaW50ICphLCBtcF9pbnQgKmIpOworaW50IG1wX3Rvb21fc3FyKG1wX2ludCAqYSwgbXBfaW50ICpiKTsKK2ludCBmYXN0X21wX2ludm1vZChtcF9pbnQgKmEsIG1wX2ludCAqYiwgbXBfaW50ICpjKTsKK2ludCBtcF9pbnZtb2Rfc2xvdyAobXBfaW50ICogYSwgbXBfaW50ICogYiwgbXBfaW50ICogYyk7CitpbnQgZmFzdF9tcF9tb250Z29tZXJ5X3JlZHVjZShtcF9pbnQgKmEsIG1wX2ludCAqbSwgbXBfZGlnaXQgbXApOworaW50IG1wX2V4cHRtb2RfZmFzdChtcF9pbnQgKkcsIG1wX2ludCAqWCwgbXBfaW50ICpQLCBtcF9pbnQgKlksIGludCBtb2RlKTsKK2ludCBzX21wX2V4cHRtb2QgKG1wX2ludCAqIEcsIG1wX2ludCAqIFgsIG1wX2ludCAqIFAsIG1wX2ludCAqIFksIGludCBtb2RlKTsKK3ZvaWQgYm5fcmV2ZXJzZSh1bnNpZ25lZCBjaGFyICpzLCBpbnQgbGVuKTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKm1wX3Nfcm1hcDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCisgICB9CisjZW5kaWYKKworI2VuZGlmCisKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC90b21tYXRoLmgsdiAkICovCisvKiAkUmV2aXNpb246IDEuOCAkICovCisvKiAkRGF0ZTogMjAwNi8wMy8zMSAxNDoxODo0NCAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL3RvbW1hdGgub3V0IGIvbGlidG9tbWF0aC90b21tYXRoLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjYyNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC90b21tYXRoLm91dApAQCAtMCwwICsxLDEzOSBAQAorXEJPT0tNQVJLIFswXVstXXtjaGFwdGVyLjF9e0ludHJvZHVjdGlvbn17fQorXEJPT0tNQVJLIFsxXVstXXtzZWN0aW9uLjEuMX17TXVsdGlwbGUgUHJlY2lzaW9uIEFyaXRobWV0aWN9e2NoYXB0ZXIuMX0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi4xLjEuMX17V2hhdCBpcyBNdWx0aXBsZSBQcmVjaXNpb24gQXJpdGhtZXRpYz99e3NlY3Rpb24uMS4xfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjEuMS4yfXtUaGUgTmVlZCBmb3IgTXVsdGlwbGUgUHJlY2lzaW9uIEFyaXRobWV0aWN9e3NlY3Rpb24uMS4xfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjEuMS4zfXtCZW5lZml0cyBvZiBNdWx0aXBsZSBQcmVjaXNpb24gQXJpdGhtZXRpY317c2VjdGlvbi4xLjF9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uMS4yfXtQdXJwb3NlIG9mIFRoaXMgVGV4dH17Y2hhcHRlci4xfQorXEJPT0tNQVJLIFsxXVstXXtzZWN0aW9uLjEuM317RGlzY3Vzc2lvbiBhbmQgTm90YXRpb259e2NoYXB0ZXIuMX0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi4xLjMuMX17Tm90YXRpb259e3NlY3Rpb24uMS4zfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjEuMy4yfXtQcmVjaXNpb24gTm90YXRpb259e3NlY3Rpb24uMS4zfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjEuMy4zfXtBbGdvcml0aG0gSW5wdXRzIGFuZCBPdXRwdXRzfXtzZWN0aW9uLjEuM30KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi4xLjMuNH17TWF0aGVtYXRpY2FsIEV4cHJlc3Npb25zfXtzZWN0aW9uLjEuM30KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi4xLjMuNX17V29yayBFZmZvcnR9e3NlY3Rpb24uMS4zfQorXEJPT0tNQVJLIFsxXVstXXtzZWN0aW9uLjEuNH17RXhlcmNpc2VzfXtjaGFwdGVyLjF9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uMS41fXtJbnRyb2R1Y3Rpb24gdG8gTGliVG9tTWF0aH17Y2hhcHRlci4xfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjEuNS4xfXtXaGF0IGlzIExpYlRvbU1hdGg/fXtzZWN0aW9uLjEuNX0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi4xLjUuMn17R29hbHMgb2YgTGliVG9tTWF0aH17c2VjdGlvbi4xLjV9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uMS42fXtDaG9pY2Ugb2YgTGliVG9tTWF0aH17Y2hhcHRlci4xfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjEuNi4xfXtDb2RlIEJhc2V9e3NlY3Rpb24uMS42fQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjEuNi4yfXtBUEkgU2ltcGxpY2l0eX17c2VjdGlvbi4xLjZ9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uMS42LjN9e09wdGltaXphdGlvbnN9e3NlY3Rpb24uMS42fQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjEuNi40fXtQb3J0YWJpbGl0eSBhbmQgU3RhYmlsaXR5fXtzZWN0aW9uLjEuNn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi4xLjYuNX17Q2hvaWNlfXtzZWN0aW9uLjEuNn0KK1xCT09LTUFSSyBbMF1bLV17Y2hhcHRlci4yfXtHZXR0aW5nIFN0YXJ0ZWR9e30KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi4yLjF9e0xpYnJhcnkgQmFzaWNzfXtjaGFwdGVyLjJ9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uMi4yfXtXaGF0IGlzIGEgTXVsdGlwbGUgUHJlY2lzaW9uIEludGVnZXI/fXtjaGFwdGVyLjJ9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uMi4yLjF9e1RoZSBtcFwxMzdpbnQgU3RydWN0dXJlfXtzZWN0aW9uLjIuMn0KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi4yLjN9e0FyZ3VtZW50IFBhc3Npbmd9e2NoYXB0ZXIuMn0KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi4yLjR9e1JldHVybiBWYWx1ZXN9e2NoYXB0ZXIuMn0KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi4yLjV9e0luaXRpYWxpemF0aW9uIGFuZCBDbGVhcmluZ317Y2hhcHRlci4yfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjIuNS4xfXtJbml0aWFsaXppbmcgYW4gbXBcMTM3aW50fXtzZWN0aW9uLjIuNX0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi4yLjUuMn17Q2xlYXJpbmcgYW4gbXBcMTM3aW50fXtzZWN0aW9uLjIuNX0KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi4yLjZ9e01haW50ZW5hbmNlIEFsZ29yaXRobXN9e2NoYXB0ZXIuMn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi4yLjYuMX17QXVnbWVudGluZyBhbiBtcFwxMzdpbnQncyBQcmVjaXNpb259e3NlY3Rpb24uMi42fQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjIuNi4yfXtJbml0aWFsaXppbmcgVmFyaWFibGUgUHJlY2lzaW9uIG1wXDEzN2ludHN9e3NlY3Rpb24uMi42fQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjIuNi4zfXtNdWx0aXBsZSBJbnRlZ2VyIEluaXRpYWxpemF0aW9ucyBhbmQgQ2xlYXJpbmdzfXtzZWN0aW9uLjIuNn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi4yLjYuNH17Q2xhbXBpbmcgRXhjZXNzIERpZ2l0c317c2VjdGlvbi4yLjZ9CitcQk9PS01BUksgWzBdWy1de2NoYXB0ZXIuM317QmFzaWMgT3BlcmF0aW9uc317fQorXEJPT0tNQVJLIFsxXVstXXtzZWN0aW9uLjMuMX17SW50cm9kdWN0aW9ufXtjaGFwdGVyLjN9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uMy4yfXtBc3NpZ25pbmcgVmFsdWVzIHRvIG1wXDEzN2ludCBTdHJ1Y3R1cmVzfXtjaGFwdGVyLjN9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uMy4yLjF9e0NvcHlpbmcgYW4gbXBcMTM3aW50fXtzZWN0aW9uLjMuMn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi4zLjIuMn17Q3JlYXRpbmcgYSBDbG9uZX17c2VjdGlvbi4zLjJ9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uMy4zfXtaZXJvaW5nIGFuIEludGVnZXJ9e2NoYXB0ZXIuM30KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi4zLjR9e1NpZ24gTWFuaXB1bGF0aW9ufXtjaGFwdGVyLjN9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uMy40LjF9e0Fic29sdXRlIFZhbHVlfXtzZWN0aW9uLjMuNH0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi4zLjQuMn17SW50ZWdlciBOZWdhdGlvbn17c2VjdGlvbi4zLjR9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uMy41fXtTbWFsbCBDb25zdGFudHN9e2NoYXB0ZXIuM30KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi4zLjUuMX17U2V0dGluZyBTbWFsbCBDb25zdGFudHN9e3NlY3Rpb24uMy41fQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjMuNS4yfXtTZXR0aW5nIExhcmdlIENvbnN0YW50c317c2VjdGlvbi4zLjV9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uMy42fXtDb21wYXJpc29uc317Y2hhcHRlci4zfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjMuNi4xfXtVbnNpZ25lZCBDb21wYXJpc2lvbnN9e3NlY3Rpb24uMy42fQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjMuNi4yfXtTaWduZWQgQ29tcGFyaXNvbnN9e3NlY3Rpb24uMy42fQorXEJPT0tNQVJLIFswXVstXXtjaGFwdGVyLjR9e0Jhc2ljIEFyaXRobWV0aWN9e30KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi40LjF9e0ludHJvZHVjdGlvbn17Y2hhcHRlci40fQorXEJPT0tNQVJLIFsxXVstXXtzZWN0aW9uLjQuMn17QWRkaXRpb24gYW5kIFN1YnRyYWN0aW9ufXtjaGFwdGVyLjR9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNC4yLjF9e0xvdyBMZXZlbCBBZGRpdGlvbn17c2VjdGlvbi40LjJ9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNC4yLjJ9e0xvdyBMZXZlbCBTdWJ0cmFjdGlvbn17c2VjdGlvbi40LjJ9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNC4yLjN9e0hpZ2ggTGV2ZWwgQWRkaXRpb259e3NlY3Rpb24uNC4yfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjQuMi40fXtIaWdoIExldmVsIFN1YnRyYWN0aW9ufXtzZWN0aW9uLjQuMn0KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi40LjN9e0JpdCBhbmQgRGlnaXQgU2hpZnRpbmd9e2NoYXB0ZXIuNH0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi40LjMuMX17TXVsdGlwbGljYXRpb24gYnkgVHdvfXtzZWN0aW9uLjQuM30KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi40LjMuMn17RGl2aXNpb24gYnkgVHdvfXtzZWN0aW9uLjQuM30KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi40LjR9e1BvbHlub21pYWwgQmFzaXMgT3BlcmF0aW9uc317Y2hhcHRlci40fQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjQuNC4xfXtNdWx0aXBsaWNhdGlvbiBieSB4fXtzZWN0aW9uLjQuNH0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi40LjQuMn17RGl2aXNpb24gYnkgeH17c2VjdGlvbi40LjR9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uNC41fXtQb3dlcnMgb2YgVHdvfXtjaGFwdGVyLjR9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNC41LjF9e011bHRpcGxpY2F0aW9uIGJ5IFBvd2VyIG9mIFR3b317c2VjdGlvbi40LjV9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNC41LjJ9e0RpdmlzaW9uIGJ5IFBvd2VyIG9mIFR3b317c2VjdGlvbi40LjV9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNC41LjN9e1JlbWFpbmRlciBvZiBEaXZpc2lvbiBieSBQb3dlciBvZiBUd299e3NlY3Rpb24uNC41fQorXEJPT0tNQVJLIFswXVstXXtjaGFwdGVyLjV9e011bHRpcGxpY2F0aW9uIGFuZCBTcXVhcmluZ317fQorXEJPT0tNQVJLIFsxXVstXXtzZWN0aW9uLjUuMX17VGhlIE11bHRpcGxpZXJzfXtjaGFwdGVyLjV9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uNS4yfXtNdWx0aXBsaWNhdGlvbn17Y2hhcHRlci41fQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjUuMi4xfXtUaGUgQmFzZWxpbmUgTXVsdGlwbGljYXRpb259e3NlY3Rpb24uNS4yfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjUuMi4yfXtGYXN0ZXIgTXVsdGlwbGljYXRpb24gYnkgdGhlIGBgQ29tYmEnJyBNZXRob2R9e3NlY3Rpb24uNS4yfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjUuMi4zfXtQb2x5bm9taWFsIEJhc2lzIE11bHRpcGxpY2F0aW9ufXtzZWN0aW9uLjUuMn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi41LjIuNH17S2FyYXRzdWJhIE11bHRpcGxpY2F0aW9ufXtzZWN0aW9uLjUuMn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi41LjIuNX17VG9vbS1Db29rIDMtV2F5IE11bHRpcGxpY2F0aW9ufXtzZWN0aW9uLjUuMn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi41LjIuNn17U2lnbmVkIE11bHRpcGxpY2F0aW9ufXtzZWN0aW9uLjUuMn0KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi41LjN9e1NxdWFyaW5nfXtjaGFwdGVyLjV9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNS4zLjF9e1RoZSBCYXNlbGluZSBTcXVhcmluZyBBbGdvcml0aG19e3NlY3Rpb24uNS4zfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjUuMy4yfXtGYXN0ZXIgU3F1YXJpbmcgYnkgdGhlIGBgQ29tYmEnJyBNZXRob2R9e3NlY3Rpb24uNS4zfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjUuMy4zfXtQb2x5bm9taWFsIEJhc2lzIFNxdWFyaW5nfXtzZWN0aW9uLjUuM30KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi41LjMuNH17S2FyYXRzdWJhIFNxdWFyaW5nfXtzZWN0aW9uLjUuM30KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi41LjMuNX17VG9vbS1Db29rIFNxdWFyaW5nfXtzZWN0aW9uLjUuM30KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi41LjMuNn17SGlnaCBMZXZlbCBTcXVhcmluZ317c2VjdGlvbi41LjN9CitcQk9PS01BUksgWzBdWy1de2NoYXB0ZXIuNn17TW9kdWxhciBSZWR1Y3Rpb259e30KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi42LjF9e0Jhc2ljcyBvZiBNb2R1bGFyIFJlZHVjdGlvbn17Y2hhcHRlci42fQorXEJPT0tNQVJLIFsxXVstXXtzZWN0aW9uLjYuMn17VGhlIEJhcnJldHQgUmVkdWN0aW9ufXtjaGFwdGVyLjZ9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNi4yLjF9e0ZpeGVkIFBvaW50IEFyaXRobWV0aWN9e3NlY3Rpb24uNi4yfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjYuMi4yfXtDaG9vc2luZyBhIFJhZGl4IFBvaW50fXtzZWN0aW9uLjYuMn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi42LjIuM317VHJpbW1pbmcgdGhlIFF1b3RpZW50fXtzZWN0aW9uLjYuMn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi42LjIuNH17VHJpbW1pbmcgdGhlIFJlc2lkdWV9e3NlY3Rpb24uNi4yfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjYuMi41fXtUaGUgQmFycmV0dCBBbGdvcml0aG19e3NlY3Rpb24uNi4yfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjYuMi42fXtUaGUgQmFycmV0dCBTZXR1cCBBbGdvcml0aG19e3NlY3Rpb24uNi4yfQorXEJPT0tNQVJLIFsxXVstXXtzZWN0aW9uLjYuM317VGhlIE1vbnRnb21lcnkgUmVkdWN0aW9ufXtjaGFwdGVyLjZ9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNi4zLjF9e0RpZ2l0IEJhc2VkIE1vbnRnb21lcnkgUmVkdWN0aW9ufXtzZWN0aW9uLjYuM30KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi42LjMuMn17QmFzZWxpbmUgTW9udGdvbWVyeSBSZWR1Y3Rpb259e3NlY3Rpb24uNi4zfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjYuMy4zfXtGYXN0ZXIgYGBDb21iYScnIE1vbnRnb21lcnkgUmVkdWN0aW9ufXtzZWN0aW9uLjYuM30KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi42LjMuNH17TW9udGdvbWVyeSBTZXR1cH17c2VjdGlvbi42LjN9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uNi40fXtUaGUgRGltaW5pc2hlZCBSYWRpeCBBbGdvcml0aG19e2NoYXB0ZXIuNn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi42LjQuMX17Q2hvaWNlIG9mIE1vZHVsaX17c2VjdGlvbi42LjR9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNi40LjJ9e0Nob2ljZSBvZiBrfXtzZWN0aW9uLjYuNH0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi42LjQuM317UmVzdHJpY3RlZCBEaW1pbmlzaGVkIFJhZGl4IFJlZHVjdGlvbn17c2VjdGlvbi42LjR9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNi40LjR9e1VucmVzdHJpY3RlZCBEaW1pbmlzaGVkIFJhZGl4IFJlZHVjdGlvbn17c2VjdGlvbi42LjR9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uNi41fXtBbGdvcml0aG0gQ29tcGFyaXNvbn17Y2hhcHRlci42fQorXEJPT0tNQVJLIFswXVstXXtjaGFwdGVyLjd9e0V4cG9uZW50aWF0aW9ufXt9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uNy4xfXtFeHBvbmVudGlhdGlvbiBCYXNpY3N9e2NoYXB0ZXIuN30KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi43LjEuMX17U2luZ2xlIERpZ2l0IEV4cG9uZW50aWF0aW9ufXtzZWN0aW9uLjcuMX0KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi43LjJ9e2stYXJ5IEV4cG9uZW50aWF0aW9ufXtjaGFwdGVyLjd9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNy4yLjF9e09wdGltYWwgVmFsdWVzIG9mIGt9e3NlY3Rpb24uNy4yfQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjcuMi4yfXtTbGlkaW5nLVdpbmRvdyBFeHBvbmVudGlhdGlvbn17c2VjdGlvbi43LjJ9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uNy4zfXtNb2R1bGFyIEV4cG9uZW50aWF0aW9ufXtjaGFwdGVyLjd9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uNy4zLjF9e0JhcnJldHQgTW9kdWxhciBFeHBvbmVudGlhdGlvbn17c2VjdGlvbi43LjN9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uNy40fXtRdWljayBQb3dlciBvZiBUd299e2NoYXB0ZXIuN30KK1xCT09LTUFSSyBbMF1bLV17Y2hhcHRlci44fXtIaWdoZXIgTGV2ZWwgQWxnb3JpdGhtc317fQorXEJPT0tNQVJLIFsxXVstXXtzZWN0aW9uLjguMX17SW50ZWdlciBEaXZpc2lvbiB3aXRoIFJlbWFpbmRlcn17Y2hhcHRlci44fQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjguMS4xfXtRdW90aWVudCBFc3RpbWF0aW9ufXtzZWN0aW9uLjguMX0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi44LjEuMn17Tm9ybWFsaXplZCBJbnRlZ2Vyc317c2VjdGlvbi44LjF9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uOC4xLjN9e1JhZGl4LSBEaXZpc2lvbiB3aXRoIFJlbWFpbmRlcn17c2VjdGlvbi44LjF9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uOC4yfXtTaW5nbGUgRGlnaXQgSGVscGVyc317Y2hhcHRlci44fQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjguMi4xfXtTaW5nbGUgRGlnaXQgQWRkaXRpb24gYW5kIFN1YnRyYWN0aW9ufXtzZWN0aW9uLjguMn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi44LjIuMn17U2luZ2xlIERpZ2l0IE11bHRpcGxpY2F0aW9ufXtzZWN0aW9uLjguMn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi44LjIuM317U2luZ2xlIERpZ2l0IERpdmlzaW9ufXtzZWN0aW9uLjguMn0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi44LjIuNH17U2luZ2xlIERpZ2l0IFJvb3QgRXh0cmFjdGlvbn17c2VjdGlvbi44LjJ9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uOC4zfXtSYW5kb20gTnVtYmVyIEdlbmVyYXRpb259e2NoYXB0ZXIuOH0KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi44LjR9e0Zvcm1hdHRlZCBSZXByZXNlbnRhdGlvbnN9e2NoYXB0ZXIuOH0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi44LjQuMX17UmVhZGluZyBSYWRpeC1uIElucHV0fXtzZWN0aW9uLjguNH0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi44LjQuMn17R2VuZXJhdGluZyBSYWRpeC1uIE91dHB1dH17c2VjdGlvbi44LjR9CitcQk9PS01BUksgWzBdWy1de2NoYXB0ZXIuOX17TnVtYmVyIFRoZW9yZXRpYyBBbGdvcml0aG1zfXt9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uOS4xfXtHcmVhdGVzdCBDb21tb24gRGl2aXNvcn17Y2hhcHRlci45fQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjkuMS4xfXtDb21wbGV0ZSBHcmVhdGVzdCBDb21tb24gRGl2aXNvcn17c2VjdGlvbi45LjF9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uOS4yfXtMZWFzdCBDb21tb24gTXVsdGlwbGV9e2NoYXB0ZXIuOX0KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi45LjN9e0phY29iaSBTeW1ib2wgQ29tcHV0YXRpb259e2NoYXB0ZXIuOX0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi45LjMuMX17SmFjb2JpIFN5bWJvbH17c2VjdGlvbi45LjN9CitcQk9PS01BUksgWzFdWy1de3NlY3Rpb24uOS40fXtNb2R1bGFyIEludmVyc2V9e2NoYXB0ZXIuOX0KK1xCT09LTUFSSyBbMl1bLV17c3Vic2VjdGlvbi45LjQuMX17R2VuZXJhbCBDYXNlfXtzZWN0aW9uLjkuNH0KK1xCT09LTUFSSyBbMV1bLV17c2VjdGlvbi45LjV9e1ByaW1hbGl0eSBUZXN0c317Y2hhcHRlci45fQorXEJPT0tNQVJLIFsyXVstXXtzdWJzZWN0aW9uLjkuNS4xfXtUcmlhbCBEaXZpc2lvbn17c2VjdGlvbi45LjV9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uOS41LjJ9e1RoZSBGZXJtYXQgVGVzdH17c2VjdGlvbi45LjV9CitcQk9PS01BUksgWzJdWy1de3N1YnNlY3Rpb24uOS41LjN9e1RoZSBNaWxsZXItUmFiaW4gVGVzdH17c2VjdGlvbi45LjV9CmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL3RvbW1hdGhfY2xhc3MuaCBiL2xpYnRvbW1hdGgvdG9tbWF0aF9jbGFzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZTI3NWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJ0b21tYXRoL3RvbW1hdGhfY2xhc3MuaApAQCAtMCwwICsxLDEwMDUgQEAKKyNpZiAhKGRlZmluZWQoTFRNMSkgJiYgZGVmaW5lZChMVE0yKSAmJiBkZWZpbmVkKExUTTMpKQorI2lmIGRlZmluZWQoTFRNMikKKyNkZWZpbmUgTFRNMworI2VuZGlmCisjaWYgZGVmaW5lZChMVE0xKQorI2RlZmluZSBMVE0yCisjZW5kaWYKKyNkZWZpbmUgTFRNMQorCisjaWYgZGVmaW5lZChMVE1fQUxMKQorI2RlZmluZSBCTl9FUlJPUl9DCisjZGVmaW5lIEJOX0ZBU1RfTVBfSU5WTU9EX0MKKyNkZWZpbmUgQk5fRkFTVF9NUF9NT05UR09NRVJZX1JFRFVDRV9DCisjZGVmaW5lIEJOX0ZBU1RfU19NUF9NVUxfRElHU19DCisjZGVmaW5lIEJOX0ZBU1RfU19NUF9NVUxfSElHSF9ESUdTX0MKKyNkZWZpbmUgQk5fRkFTVF9TX01QX1NRUl9DCisjZGVmaW5lIEJOX01QXzJFWFBUX0MKKyNkZWZpbmUgQk5fTVBfQUJTX0MKKyNkZWZpbmUgQk5fTVBfQUREX0MKKyNkZWZpbmUgQk5fTVBfQUREX0RfQworI2RlZmluZSBCTl9NUF9BRERNT0RfQworI2RlZmluZSBCTl9NUF9BTkRfQworI2RlZmluZSBCTl9NUF9DTEFNUF9DCisjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQworI2RlZmluZSBCTl9NUF9DTVBfQworI2RlZmluZSBCTl9NUF9DTVBfRF9DCisjZGVmaW5lIEJOX01QX0NNUF9NQUdfQworI2RlZmluZSBCTl9NUF9DTlRfTFNCX0MKKyNkZWZpbmUgQk5fTVBfQ09QWV9DCisjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQworI2RlZmluZSBCTl9NUF9ESVZfQworI2RlZmluZSBCTl9NUF9ESVZfMl9DCisjZGVmaW5lIEJOX01QX0RJVl8yRF9DCisjZGVmaW5lIEJOX01QX0RJVl8zX0MKKyNkZWZpbmUgQk5fTVBfRElWX0RfQworI2RlZmluZSBCTl9NUF9EUl9JU19NT0RVTFVTX0MKKyNkZWZpbmUgQk5fTVBfRFJfUkVEVUNFX0MKKyNkZWZpbmUgQk5fTVBfRFJfU0VUVVBfQworI2RlZmluZSBCTl9NUF9FWENIX0MKKyNkZWZpbmUgQk5fTVBfRVhQVF9EX0MKKyNkZWZpbmUgQk5fTVBfRVhQVE1PRF9DCisjZGVmaW5lIEJOX01QX0VYUFRNT0RfRkFTVF9DCisjZGVmaW5lIEJOX01QX0VYVEVVQ0xJRF9DCisjZGVmaW5lIEJOX01QX0ZSRUFEX0MKKyNkZWZpbmUgQk5fTVBfRldSSVRFX0MKKyNkZWZpbmUgQk5fTVBfR0NEX0MKKyNkZWZpbmUgQk5fTVBfR0VUX0lOVF9DCisjZGVmaW5lIEJOX01QX0dST1dfQworI2RlZmluZSBCTl9NUF9JTklUX0MKKyNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKKyNkZWZpbmUgQk5fTVBfSU5JVF9NVUxUSV9DCisjZGVmaW5lIEJOX01QX0lOSVRfU0VUX0MKKyNkZWZpbmUgQk5fTVBfSU5JVF9TRVRfSU5UX0MKKyNkZWZpbmUgQk5fTVBfSU5JVF9TSVpFX0MKKyNkZWZpbmUgQk5fTVBfSU5WTU9EX0MKKyNkZWZpbmUgQk5fTVBfSU5WTU9EX1NMT1dfQworI2RlZmluZSBCTl9NUF9JU19TUVVBUkVfQworI2RlZmluZSBCTl9NUF9KQUNPQklfQworI2RlZmluZSBCTl9NUF9LQVJBVFNVQkFfTVVMX0MKKyNkZWZpbmUgQk5fTVBfS0FSQVRTVUJBX1NRUl9DCisjZGVmaW5lIEJOX01QX0xDTV9DCisjZGVmaW5lIEJOX01QX0xTSERfQworI2RlZmluZSBCTl9NUF9NT0RfQworI2RlZmluZSBCTl9NUF9NT0RfMkRfQworI2RlZmluZSBCTl9NUF9NT0RfRF9DCisjZGVmaW5lIEJOX01QX01PTlRHT01FUllfQ0FMQ19OT1JNQUxJWkFUSU9OX0MKKyNkZWZpbmUgQk5fTVBfTU9OVEdPTUVSWV9SRURVQ0VfQworI2RlZmluZSBCTl9NUF9NT05UR09NRVJZX1NFVFVQX0MKKyNkZWZpbmUgQk5fTVBfTVVMX0MKKyNkZWZpbmUgQk5fTVBfTVVMXzJfQworI2RlZmluZSBCTl9NUF9NVUxfMkRfQworI2RlZmluZSBCTl9NUF9NVUxfRF9DCisjZGVmaW5lIEJOX01QX01VTE1PRF9DCisjZGVmaW5lIEJOX01QX05fUk9PVF9DCisjZGVmaW5lIEJOX01QX05FR19DCisjZGVmaW5lIEJOX01QX09SX0MKKyNkZWZpbmUgQk5fTVBfUFJJTUVfRkVSTUFUX0MKKyNkZWZpbmUgQk5fTVBfUFJJTUVfSVNfRElWSVNJQkxFX0MKKyNkZWZpbmUgQk5fTVBfUFJJTUVfSVNfUFJJTUVfQworI2RlZmluZSBCTl9NUF9QUklNRV9NSUxMRVJfUkFCSU5fQworI2RlZmluZSBCTl9NUF9QUklNRV9ORVhUX1BSSU1FX0MKKyNkZWZpbmUgQk5fTVBfUFJJTUVfUkFCSU5fTUlMTEVSX1RSSUFMU19DCisjZGVmaW5lIEJOX01QX1BSSU1FX1JBTkRPTV9FWF9DCisjZGVmaW5lIEJOX01QX1JBRElYX1NJWkVfQworI2RlZmluZSBCTl9NUF9SQURJWF9TTUFQX0MKKyNkZWZpbmUgQk5fTVBfUkFORF9DCisjZGVmaW5lIEJOX01QX1JFQURfUkFESVhfQworI2RlZmluZSBCTl9NUF9SRUFEX1NJR05FRF9CSU5fQworI2RlZmluZSBCTl9NUF9SRUFEX1VOU0lHTkVEX0JJTl9DCisjZGVmaW5lIEJOX01QX1JFRFVDRV9DCisjZGVmaW5lIEJOX01QX1JFRFVDRV8yS19DCisjZGVmaW5lIEJOX01QX1JFRFVDRV8yS19MX0MKKyNkZWZpbmUgQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0MKKyNkZWZpbmUgQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0xfQworI2RlZmluZSBCTl9NUF9SRURVQ0VfSVNfMktfQworI2RlZmluZSBCTl9NUF9SRURVQ0VfSVNfMktfTF9DCisjZGVmaW5lIEJOX01QX1JFRFVDRV9TRVRVUF9DCisjZGVmaW5lIEJOX01QX1JTSERfQworI2RlZmluZSBCTl9NUF9TRVRfQworI2RlZmluZSBCTl9NUF9TRVRfSU5UX0MKKyNkZWZpbmUgQk5fTVBfU0hSSU5LX0MKKyNkZWZpbmUgQk5fTVBfU0lHTkVEX0JJTl9TSVpFX0MKKyNkZWZpbmUgQk5fTVBfU1FSX0MKKyNkZWZpbmUgQk5fTVBfU1FSTU9EX0MKKyNkZWZpbmUgQk5fTVBfU1FSVF9DCisjZGVmaW5lIEJOX01QX1NVQl9DCisjZGVmaW5lIEJOX01QX1NVQl9EX0MKKyNkZWZpbmUgQk5fTVBfU1VCTU9EX0MKKyNkZWZpbmUgQk5fTVBfVE9fU0lHTkVEX0JJTl9DCisjZGVmaW5lIEJOX01QX1RPX1NJR05FRF9CSU5fTl9DCisjZGVmaW5lIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9DCisjZGVmaW5lIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9OX0MKKyNkZWZpbmUgQk5fTVBfVE9PTV9NVUxfQworI2RlZmluZSBCTl9NUF9UT09NX1NRUl9DCisjZGVmaW5lIEJOX01QX1RPUkFESVhfQworI2RlZmluZSBCTl9NUF9UT1JBRElYX05fQworI2RlZmluZSBCTl9NUF9VTlNJR05FRF9CSU5fU0laRV9DCisjZGVmaW5lIEJOX01QX1hPUl9DCisjZGVmaW5lIEJOX01QX1pFUk9fQworI2RlZmluZSBCTl9QUklNRV9UQUJfQworI2RlZmluZSBCTl9SRVZFUlNFX0MKKyNkZWZpbmUgQk5fU19NUF9BRERfQworI2RlZmluZSBCTl9TX01QX0VYUFRNT0RfQworI2RlZmluZSBCTl9TX01QX01VTF9ESUdTX0MKKyNkZWZpbmUgQk5fU19NUF9NVUxfSElHSF9ESUdTX0MKKyNkZWZpbmUgQk5fU19NUF9TUVJfQworI2RlZmluZSBCTl9TX01QX1NVQl9DCisjZGVmaW5lIEJOQ09SRV9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fRVJST1JfQykKKyAgICNkZWZpbmUgQk5fTVBfRVJST1JfVE9fU1RSSU5HX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9GQVNUX01QX0lOVk1PRF9DKQorICAgI2RlZmluZSBCTl9NUF9JU0VWRU5fQworICAgI2RlZmluZSBCTl9NUF9JTklUX01VTFRJX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX01PRF9DCisgICAjZGVmaW5lIEJOX01QX1NFVF9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8yX0MKKyAgICNkZWZpbmUgQk5fTVBfSVNPRERfQworICAgI2RlZmluZSBCTl9NUF9TVUJfQworICAgI2RlZmluZSBCTl9NUF9DTVBfQworICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9DTVBfRF9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fRkFTVF9NUF9NT05UR09NRVJZX1JFRFVDRV9DKQorICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKKyAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisgICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9GQVNUX1NfTVBfTVVMX0RJR1NfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9GQVNUX1NfTVBfTVVMX0hJR0hfRElHU19DKQorICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX0ZBU1RfU19NUF9TUVJfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF8yRVhQVF9DKQorICAgI2RlZmluZSBCTl9NUF9aRVJPX0MKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfQUJTX0MpCisgICAjZGVmaW5lIEJOX01QX0NPUFlfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0FERF9DKQorICAgI2RlZmluZSBCTl9TX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX0NNUF9NQUdfQworICAgI2RlZmluZSBCTl9TX01QX1NVQl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfQUREX0RfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX1NVQl9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0FERE1PRF9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfQUREX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworICAgI2RlZmluZSBCTl9NUF9NT0RfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0FORF9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfQ0xBTVBfQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9DTEVBUl9DKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0NMRUFSX01VTFRJX0MpCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9DTVBfQykKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfQ01QX0RfQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9DTVBfTUFHX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfQ05UX0xTQl9DKQorICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0NPUFlfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfQ09VTlRfQklUU19DKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0RJVl9DKQorICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9JTklUX01VTFRJX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09VTlRfQklUU19DCisgICAjZGVmaW5lIEJOX01QX0FCU19DCisgICAjZGVmaW5lIEJOX01QX01VTF8yRF9DCisgICAjZGVmaW5lIEJOX01QX0NNUF9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8yRF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfU0laRV9DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9MU0hEX0MKKyAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCisgICAjZGVmaW5lIEJOX01QX01VTF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfRElWXzJfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9ESVZfMkRfQykKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EXzJEX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworICAgI2RlZmluZSBCTl9NUF9SU0hEX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworICAgI2RlZmluZSBCTl9NUF9FWENIX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9ESVZfM19DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX1NJWkVfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfRElWX0RfQykKKyAgICNkZWZpbmUgQk5fTVBfSVNaRVJPX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8yRF9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8zX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9TSVpFX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworICAgI2RlZmluZSBCTl9NUF9FWENIX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0RSX0lTX01PRFVMVVNfQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9EUl9SRURVQ0VfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisgICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9EUl9TRVRVUF9DKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0VYQ0hfQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9FWFBUX0RfQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0MKKyAgICNkZWZpbmUgQk5fTVBfU1FSX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworICAgI2RlZmluZSBCTl9NUF9NVUxfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0VYUFRNT0RfQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCisgICAjZGVmaW5lIEJOX01QX0lOVk1PRF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyAgICNkZWZpbmUgQk5fTVBfQUJTX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfSVNfMktfTF9DCisgICAjZGVmaW5lIEJOX1NfTVBfRVhQVE1PRF9DCisgICAjZGVmaW5lIEJOX01QX0RSX0lTX01PRFVMVVNfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfSVNfMktfQworICAgI2RlZmluZSBCTl9NUF9JU09ERF9DCisgICAjZGVmaW5lIEJOX01QX0VYUFRNT0RfRkFTVF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfRVhQVE1PRF9GQVNUX0MpCisgICAjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQworICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworICAgI2RlZmluZSBCTl9NUF9NT05UR09NRVJZX1NFVFVQX0MKKyAgICNkZWZpbmUgQk5fRkFTVF9NUF9NT05UR09NRVJZX1JFRFVDRV9DCisgICAjZGVmaW5lIEJOX01QX01PTlRHT01FUllfUkVEVUNFX0MKKyAgICNkZWZpbmUgQk5fTVBfRFJfU0VUVVBfQworICAgI2RlZmluZSBCTl9NUF9EUl9SRURVQ0VfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfMktfU0VUVVBfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfMktfQworICAgI2RlZmluZSBCTl9NUF9NT05UR09NRVJZX0NBTENfTk9STUFMSVpBVElPTl9DCisgICAjZGVmaW5lIEJOX01QX01VTE1PRF9DCisgICAjZGVmaW5lIEJOX01QX1NFVF9DCisgICAjZGVmaW5lIEJOX01QX01PRF9DCisgICAjZGVmaW5lIEJOX01QX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9TUVJfQworICAgI2RlZmluZSBCTl9NUF9NVUxfQworICAgI2RlZmluZSBCTl9NUF9FWENIX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9FWFRFVUNMSURfQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9NVUxUSV9DCisgICAjZGVmaW5lIEJOX01QX1NFVF9DCisgICAjZGVmaW5lIEJOX01QX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9ESVZfQworICAgI2RlZmluZSBCTl9NUF9NVUxfQworICAgI2RlZmluZSBCTl9NUF9TVUJfQworICAgI2RlZmluZSBCTl9NUF9ORUdfQworICAgI2RlZmluZSBCTl9NUF9FWENIX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0ZSRUFEX0MpCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9TX1JNQVBfQworICAgI2RlZmluZSBCTl9NUF9NVUxfRF9DCisgICAjZGVmaW5lIEJOX01QX0FERF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX0RfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0ZXUklURV9DKQorICAgI2RlZmluZSBCTl9NUF9SQURJWF9TSVpFX0MKKyAgICNkZWZpbmUgQk5fTVBfVE9SQURJWF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfR0NEX0MpCisgICAjZGVmaW5lIEJOX01QX0lTWkVST19DCisgICAjZGVmaW5lIEJOX01QX0FCU19DCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9DTlRfTFNCX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWXzJEX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9TX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX01VTF8yRF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9HRVRfSU5UX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfR1JPV19DKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0lOSVRfQykKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9JTklUX0NPUFlfQykKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfSU5JVF9NVUxUSV9DKQorICAgI2RlZmluZSBCTl9NUF9FUlJfQworICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0lOSVRfU0VUX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9TRVRfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0lOSVRfU0VUX0lOVF9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0lOVF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfSU5JVF9TSVpFX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0lOVk1PRF9DKQorICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9JU09ERF9DCisgICAjZGVmaW5lIEJOX0ZBU1RfTVBfSU5WTU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5WTU9EX1NMT1dfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0lOVk1PRF9TTE9XX0MpCisgICAjZGVmaW5lIEJOX01QX0lTWkVST19DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfTVVMVElfQworICAgI2RlZmluZSBCTl9NUF9NT0RfQworICAgI2RlZmluZSBCTl9NUF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfSVNFVkVOX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWXzJfQworICAgI2RlZmluZSBCTl9NUF9JU09ERF9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX0NNUF9DCisgICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfSVNfU1FVQVJFX0MpCisgICAjZGVmaW5lIEJOX01QX01PRF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9TRVRfSU5UX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfR0VUX0lOVF9DCisgICAjZGVmaW5lIEJOX01QX1NRUlRfQworICAgI2RlZmluZSBCTl9NUF9TUVJfQworICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX0pBQ09CSV9DKQorICAgI2RlZmluZSBCTl9NUF9DTVBfRF9DCisgICAjZGVmaW5lIEJOX01QX0lTWkVST19DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX0NOVF9MU0JfQworICAgI2RlZmluZSBCTl9NUF9ESVZfMkRfQworICAgI2RlZmluZSBCTl9NUF9NT0RfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfS0FSQVRTVUJBX01VTF9DKQorICAgI2RlZmluZSBCTl9NUF9NVUxfQworICAgI2RlZmluZSBCTl9NUF9JTklUX1NJWkVfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX0xTSERfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfS0FSQVRTVUJBX1NRUl9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX1NJWkVfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisgICAjZGVmaW5lIEJOX01QX1NRUl9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX1NfTVBfQUREX0MKKyAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9MQ01fQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9NVUxUSV9DCisgICAjZGVmaW5lIEJOX01QX0dDRF9DCisgICAjZGVmaW5lIEJOX01QX0NNUF9NQUdfQworICAgI2RlZmluZSBCTl9NUF9ESVZfQworICAgI2RlZmluZSBCTl9NUF9NVUxfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfTFNIRF9DKQorICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKKyAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfTU9EX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9ESVZfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX01PRF8yRF9DKQorICAgI2RlZmluZSBCTl9NUF9aRVJPX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9NT0RfRF9DKQorICAgI2RlZmluZSBCTl9NUF9ESVZfRF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfTU9OVEdPTUVSWV9DQUxDX05PUk1BTElaQVRJT05fQykKKyAgICNkZWZpbmUgQk5fTVBfQ09VTlRfQklUU19DCisgICAjZGVmaW5lIEJOX01QXzJFWFBUX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMXzJfQworICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKKyAgICNkZWZpbmUgQk5fU19NUF9TVUJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX01PTlRHT01FUllfUkVEVUNFX0MpCisgICAjZGVmaW5lIEJOX0ZBU1RfTVBfTU9OVEdPTUVSWV9SRURVQ0VfQworICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworICAgI2RlZmluZSBCTl9NUF9SU0hEX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisgICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9NT05UR09NRVJZX1NFVFVQX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfTVVMX0MpCisgICAjZGVmaW5lIEJOX01QX1RPT01fTVVMX0MKKyAgICNkZWZpbmUgQk5fTVBfS0FSQVRTVUJBX01VTF9DCisgICAjZGVmaW5lIEJOX0ZBU1RfU19NUF9NVUxfRElHU19DCisgICAjZGVmaW5lIEJOX1NfTVBfTVVMX0MKKyAgICNkZWZpbmUgQk5fU19NUF9NVUxfRElHU19DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfTVVMXzJfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfTVVMXzJEX0MpCisgICAjZGVmaW5lIEJOX01QX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKKyAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9NVUxfRF9DKQorICAgI2RlZmluZSBCTl9NUF9HUk9XX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX01VTE1PRF9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworICAgI2RlZmluZSBCTl9NUF9NT0RfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX05fUk9PVF9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX0VYUFRfRF9DCisgICAjZGVmaW5lIEJOX01QX01VTF9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX01VTF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX0MKKyAgICNkZWZpbmUgQk5fTVBfU1VCX0RfQworICAgI2RlZmluZSBCTl9NUF9FWENIX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX05FR19DKQorICAgI2RlZmluZSBCTl9NUF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfSVNaRVJPX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9PUl9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUFJJTUVfRkVSTUFUX0MpCisgICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCisgICAjZGVmaW5lIEJOX01QX0VYUFRNT0RfQworICAgI2RlZmluZSBCTl9NUF9DTVBfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUFJJTUVfSVNfRElWSVNJQkxFX0MpCisgICAjZGVmaW5lIEJOX01QX01PRF9EX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9QUklNRV9JU19QUklNRV9DKQorICAgI2RlZmluZSBCTl9NUF9DTVBfRF9DCisgICAjZGVmaW5lIEJOX01QX1BSSU1FX0lTX0RJVklTSUJMRV9DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9TRVRfQworICAgI2RlZmluZSBCTl9NUF9QUklNRV9NSUxMRVJfUkFCSU5fQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUFJJTUVfTUlMTEVSX1JBQklOX0MpCisgICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfU1VCX0RfQworICAgI2RlZmluZSBCTl9NUF9DTlRfTFNCX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWXzJEX0MKKyAgICNkZWZpbmUgQk5fTVBfRVhQVE1PRF9DCisgICAjZGVmaW5lIEJOX01QX0NNUF9DCisgICAjZGVmaW5lIEJOX01QX1NRUk1PRF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9QUklNRV9ORVhUX1BSSU1FX0MpCisgICAjZGVmaW5lIEJOX01QX0NNUF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfU0VUX0MKKyAgICNkZWZpbmUgQk5fTVBfU1VCX0RfQworICAgI2RlZmluZSBCTl9NUF9JU0VWRU5fQworICAgI2RlZmluZSBCTl9NUF9NT0RfRF9DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9BRERfRF9DCisgICAjZGVmaW5lIEJOX01QX1BSSU1FX01JTExFUl9SQUJJTl9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9QUklNRV9SQUJJTl9NSUxMRVJfVFJJQUxTX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUFJJTUVfUkFORE9NX0VYX0MpCisgICAjZGVmaW5lIEJOX01QX1JFQURfVU5TSUdORURfQklOX0MKKyAgICNkZWZpbmUgQk5fTVBfUFJJTUVfSVNfUFJJTUVfQworICAgI2RlZmluZSBCTl9NUF9TVUJfRF9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8yX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMXzJfQworICAgI2RlZmluZSBCTl9NUF9BRERfRF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkFESVhfU0laRV9DKQorICAgI2RlZmluZSBCTl9NUF9DT1VOVF9CSVRTX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfSVNaRVJPX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWX0RfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkFESVhfU01BUF9DKQorICAgI2RlZmluZSBCTl9NUF9TX1JNQVBfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1JBTkRfQykKKyAgICNkZWZpbmUgQk5fTVBfWkVST19DCisgICAjZGVmaW5lIEJOX01QX0FERF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkVBRF9SQURJWF9DKQorICAgI2RlZmluZSBCTl9NUF9aRVJPX0MKKyAgICNkZWZpbmUgQk5fTVBfU19STUFQX0MKKyAgICNkZWZpbmUgQk5fTVBfUkFESVhfU01BUF9DCisgICAjZGVmaW5lIEJOX01QX01VTF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQUREX0RfQworICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1JFQURfU0lHTkVEX0JJTl9DKQorICAgI2RlZmluZSBCTl9NUF9SRUFEX1VOU0lHTkVEX0JJTl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkVBRF9VTlNJR05FRF9CSU5fQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9NVUxfMkRfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFX0MpCisgICAjZGVmaW5lIEJOX01QX1JFRFVDRV9TRVRVUF9DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX1JTSERfQworICAgI2RlZmluZSBCTl9NUF9NVUxfQworICAgI2RlZmluZSBCTl9TX01QX01VTF9ISUdIX0RJR1NfQworICAgI2RlZmluZSBCTl9GQVNUX1NfTVBfTVVMX0hJR0hfRElHU19DCisgICAjZGVmaW5lIEJOX01QX01PRF8yRF9DCisgICAjZGVmaW5lIEJOX1NfTVBfTVVMX0RJR1NfQworICAgI2RlZmluZSBCTl9NUF9TVUJfQworICAgI2RlZmluZSBCTl9NUF9DTVBfRF9DCisgICAjZGVmaW5lIEJOX01QX1NFVF9DCisgICAjZGVmaW5lIEJOX01QX0xTSERfQworICAgI2RlZmluZSBCTl9NUF9BRERfQworICAgI2RlZmluZSBCTl9NUF9DTVBfQworICAgI2RlZmluZSBCTl9TX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9SRURVQ0VfMktfQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCisgICAjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQworICAgI2RlZmluZSBCTl9NUF9ESVZfMkRfQworICAgI2RlZmluZSBCTl9NUF9NVUxfRF9DCisgICAjZGVmaW5lIEJOX1NfTVBfQUREX0MKKyAgICNkZWZpbmUgQk5fTVBfQ01QX01BR19DCisgICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1JFRFVDRV8yS19MX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9DT1VOVF9CSVRTX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWXzJEX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMX0MKKyAgICNkZWZpbmUgQk5fU19NUF9BRERfQworICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKKyAgICNkZWZpbmUgQk5fU19NUF9TVUJfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFXzJLX1NFVFVQX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQworICAgI2RlZmluZSBCTl9NUF9DT1VOVF9CSVRTX0MKKyAgICNkZWZpbmUgQk5fTVBfMkVYUFRfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisgICAjZGVmaW5lIEJOX1NfTVBfU1VCX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9SRURVQ0VfMktfU0VUVVBfTF9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfMkVYUFRfQworICAgI2RlZmluZSBCTl9NUF9DT1VOVF9CSVRTX0MKKyAgICNkZWZpbmUgQk5fU19NUF9TVUJfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFX0lTXzJLX0MpCisgICAjZGVmaW5lIEJOX01QX1JFRFVDRV8yS19DCisgICAjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1JFRFVDRV9JU18yS19MX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfUkVEVUNFX1NFVFVQX0MpCisgICAjZGVmaW5lIEJOX01QXzJFWFBUX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9SU0hEX0MpCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1NFVF9DKQorICAgI2RlZmluZSBCTl9NUF9aRVJPX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9TRVRfSU5UX0MpCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9NVUxfMkRfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfU0hSSU5LX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfU0lHTkVEX0JJTl9TSVpFX0MpCisgICAjZGVmaW5lIEJOX01QX1VOU0lHTkVEX0JJTl9TSVpFX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9TUVJfQykKKyAgICNkZWZpbmUgQk5fTVBfVE9PTV9TUVJfQworICAgI2RlZmluZSBCTl9NUF9LQVJBVFNVQkFfU1FSX0MKKyAgICNkZWZpbmUgQk5fRkFTVF9TX01QX1NRUl9DCisgICAjZGVmaW5lIEJOX1NfTVBfU1FSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9TUVJNT0RfQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCisgICAjZGVmaW5lIEJOX01QX1NRUl9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9TUVJUX0MpCisgICAjZGVmaW5lIEJOX01QX05fUk9PVF9DCisgICAjZGVmaW5lIEJOX01QX0lTWkVST19DCisgICAjZGVmaW5lIEJOX01QX1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9SU0hEX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWX0MKKyAgICNkZWZpbmUgQk5fTVBfQUREX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWXzJfQworICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKKyAgICNkZWZpbmUgQk5fTVBfRVhDSF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9TVUJfQykKKyAgICNkZWZpbmUgQk5fU19NUF9BRERfQworICAgI2RlZmluZSBCTl9NUF9DTVBfTUFHX0MKKyAgICNkZWZpbmUgQk5fU19NUF9TVUJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1NVQl9EX0MpCisgICAjZGVmaW5lIEJOX01QX0dST1dfQworICAgI2RlZmluZSBCTl9NUF9BRERfRF9DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9TVUJNT0RfQykKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9UT19TSUdORURfQklOX0MpCisgICAjZGVmaW5lIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfVE9fU0lHTkVEX0JJTl9OX0MpCisgICAjZGVmaW5lIEJOX01QX1NJR05FRF9CSU5fU0laRV9DCisgICAjZGVmaW5lIEJOX01QX1RPX1NJR05FRF9CSU5fQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1RPX1VOU0lHTkVEX0JJTl9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9ESVZfMkRfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfVE9fVU5TSUdORURfQklOX05fQykKKyAgICNkZWZpbmUgQk5fTVBfVU5TSUdORURfQklOX1NJWkVfQworICAgI2RlZmluZSBCTl9NUF9UT19VTlNJR05FRF9CSU5fQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX01QX1RPT01fTVVMX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfTVVMVElfQworICAgI2RlZmluZSBCTl9NUF9NT0RfMkRfQworICAgI2RlZmluZSBCTl9NUF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfUlNIRF9DCisgICAjZGVmaW5lIEJOX01QX01VTF9DCisgICAjZGVmaW5lIEJOX01QX01VTF8yX0MKKyAgICNkZWZpbmUgQk5fTVBfQUREX0MKKyAgICNkZWZpbmUgQk5fTVBfU1VCX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWXzJfQworICAgI2RlZmluZSBCTl9NUF9NVUxfMkRfQworICAgI2RlZmluZSBCTl9NUF9NVUxfRF9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8zX0MKKyAgICNkZWZpbmUgQk5fTVBfTFNIRF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX01VTFRJX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9UT09NX1NRUl9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX01VTFRJX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EXzJEX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX1JTSERfQworICAgI2RlZmluZSBCTl9NUF9TUVJfQworICAgI2RlZmluZSBCTl9NUF9NVUxfMl9DCisgICAjZGVmaW5lIEJOX01QX0FERF9DCisgICAjZGVmaW5lIEJOX01QX1NVQl9DCisgICAjZGVmaW5lIEJOX01QX0RJVl8yX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMXzJEX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMX0RfQworICAgI2RlZmluZSBCTl9NUF9ESVZfM19DCisgICAjZGVmaW5lIEJOX01QX0xTSERfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9NVUxUSV9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfVE9SQURJWF9DKQorICAgI2RlZmluZSBCTl9NUF9JU1pFUk9fQworICAgI2RlZmluZSBCTl9NUF9JTklUX0NPUFlfQworICAgI2RlZmluZSBCTl9NUF9ESVZfRF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyAgICNkZWZpbmUgQk5fTVBfU19STUFQX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9UT1JBRElYX05fQykKKyAgICNkZWZpbmUgQk5fTVBfSVNaRVJPX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9DT1BZX0MKKyAgICNkZWZpbmUgQk5fTVBfRElWX0RfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisgICAjZGVmaW5lIEJOX01QX1NfUk1BUF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfVU5TSUdORURfQklOX1NJWkVfQykKKyAgICNkZWZpbmUgQk5fTVBfQ09VTlRfQklUU19DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fTVBfWE9SX0MpCisgICAjZGVmaW5lIEJOX01QX0lOSVRfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyAgICNkZWZpbmUgQk5fTVBfRVhDSF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9NUF9aRVJPX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fUFJJTUVfVEFCX0MpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fUkVWRVJTRV9DKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX1NfTVBfQUREX0MpCisgICAjZGVmaW5lIEJOX01QX0dST1dfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fU19NUF9FWFBUTU9EX0MpCisgICAjZGVmaW5lIEJOX01QX0NPVU5UX0JJVFNfQworICAgI2RlZmluZSBCTl9NUF9JTklUX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfU0VUVVBfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfQworICAgI2RlZmluZSBCTl9NUF9SRURVQ0VfMktfU0VUVVBfTF9DCisgICAjZGVmaW5lIEJOX01QX1JFRFVDRV8yS19MX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQ09QWV9DCisgICAjZGVmaW5lIEJOX01QX1NRUl9DCisgICAjZGVmaW5lIEJOX01QX01VTF9DCisgICAjZGVmaW5lIEJOX01QX1NFVF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX1NfTVBfTVVMX0RJR1NfQykKKyAgICNkZWZpbmUgQk5fRkFTVF9TX01QX01VTF9ESUdTX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5JVF9TSVpFX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xBTVBfQworICAgI2RlZmluZSBCTl9NUF9FWENIX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEJOX1NfTVBfTVVMX0hJR0hfRElHU19DKQorICAgI2RlZmluZSBCTl9GQVNUX1NfTVBfTVVMX0hJR0hfRElHU19DCisgICAjZGVmaW5lIEJOX01QX0lOSVRfU0laRV9DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyAgICNkZWZpbmUgQk5fTVBfRVhDSF9DCisgICAjZGVmaW5lIEJOX01QX0NMRUFSX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTl9TX01QX1NRUl9DKQorICAgI2RlZmluZSBCTl9NUF9JTklUX1NJWkVfQworICAgI2RlZmluZSBCTl9NUF9DTEFNUF9DCisgICAjZGVmaW5lIEJOX01QX0VYQ0hfQworICAgI2RlZmluZSBCTl9NUF9DTEVBUl9DCisjZW5kaWYKKworI2lmIGRlZmluZWQoQk5fU19NUF9TVUJfQykKKyAgICNkZWZpbmUgQk5fTVBfR1JPV19DCisgICAjZGVmaW5lIEJOX01QX0NMQU1QX0MKKyNlbmRpZgorCisjaWYgZGVmaW5lZChCTkNPUkVfQykKKyNlbmRpZgorCisjaWZkZWYgTFRNMworI2RlZmluZSBMVE1fTEFTVAorI2VuZGlmCisjaW5jbHVkZSAidG9tbWF0aF9zdXBlcmNsYXNzLmgiCisjaW5jbHVkZSAidG9tbWF0aF9jbGFzcy5oIgorI2Vsc2UKKyNkZWZpbmUgTFRNX0xBU1QKKyNlbmRpZgorCisvKiBEcm9wYmVhciBkb2Vzbid0IG5lZWQgdGhlc2UuICovCisjdW5kZWYgQk5fTVBfS0FSQVRTVUJBX01VTF9DCisjdW5kZWYgQk5fTVBfS0FSQVRTVUJBX1NRUl9DCisjdW5kZWYgQk5fTVBfVE9PTV9NVUxfQworI3VuZGVmIEJOX01QX1RPT01fU1FSX0MKKworLyogJFNvdXJjZTogL2N2cy9saWJ0b20vbGlidG9tbWF0aC90b21tYXRoX2NsYXNzLmgsdiAkICovCisvKiAkUmV2aXNpb246IDEuMyAkICovCisvKiAkRGF0ZTogMjAwNS8wNy8yOCAxMTo1OTozMiAkICovCmRpZmYgLS1naXQgYS9saWJ0b21tYXRoL3RvbW1hdGhfc3VwZXJjbGFzcy5oIGIvbGlidG9tbWF0aC90b21tYXRoX3N1cGVyY2xhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmRlYmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGlidG9tbWF0aC90b21tYXRoX3N1cGVyY2xhc3MuaApAQCAtMCwwICsxLDc2IEBACisvKiBzdXBlciBjbGFzcyBmaWxlIGZvciBQSyBhbGdvcyAqLworCisvKiBkZWZhdWx0IC4uLiBpbmNsdWRlIGFsbCBNUEkgKi8KKyNkZWZpbmUgTFRNX0FMTAorCisvKiBSU0Egb25seSAoZG9lcyBub3Qgc3VwcG9ydCBESC9EU0EvRUNDKSAqLworLyogI2RlZmluZSBTQ19SU0FfMSAqLworCisvKiBGb3IgcmVmZXJlbmNlLi4uLiBPbiBhbiBBdGhsb242NCBvcHRpbWl6aW5nIGZvciBzcGVlZC4uLgorCisgICBMVE0ncyBtcGkubyB3aXRoIGFsbCBmdW5jdGlvbnMgW3N0cmlwZWRdIGlzIDE0MktpQiBpbiBzaXplLgorCisqLworCisvKiBXb3JrcyBmb3IgUlNBIG9ubHksIG1waS5vIGlzIDY4S2lCICovCisjaWZkZWYgU0NfUlNBXzEKKyAgICNkZWZpbmUgQk5fTVBfU0hSSU5LX0MKKyAgICNkZWZpbmUgQk5fTVBfTENNX0MKKyAgICNkZWZpbmUgQk5fTVBfUFJJTUVfUkFORE9NX0VYX0MKKyAgICNkZWZpbmUgQk5fTVBfSU5WTU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfR0NEX0MKKyAgICNkZWZpbmUgQk5fTVBfTU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfTVVMTU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfQURETU9EX0MKKyAgICNkZWZpbmUgQk5fTVBfRVhQVE1PRF9DCisgICAjZGVmaW5lIEJOX01QX1NFVF9JTlRfQworICAgI2RlZmluZSBCTl9NUF9JTklUX01VTFRJX0MKKyAgICNkZWZpbmUgQk5fTVBfQ0xFQVJfTVVMVElfQworICAgI2RlZmluZSBCTl9NUF9VTlNJR05FRF9CSU5fU0laRV9DCisgICAjZGVmaW5lIEJOX01QX1RPX1VOU0lHTkVEX0JJTl9DCisgICAjZGVmaW5lIEJOX01QX01PRF9EX0MKKyAgICNkZWZpbmUgQk5fTVBfUFJJTUVfUkFCSU5fTUlMTEVSX1RSSUFMU19DCisgICAjZGVmaW5lIEJOX1JFVkVSU0VfQworICAgI2RlZmluZSBCTl9QUklNRV9UQUJfQworCisgICAvKiBvdGhlciBtb2RpZmllcnMgKi8KKyAgICNkZWZpbmUgQk5fTVBfRElWX1NNQUxMICAgICAgICAgICAgICAgICAgICAvKiBTbG93ZXIgZGl2aXNpb24sIG5vdCBjcml0aWNhbCAqLworCisgICAvKiBoZXJlIHdlIGFyZSBvbiB0aGUgbGFzdCBwYXNzIHNvIHdlIHR1cm4gdGhpbmdzIG9mZi4gIFRoZSBmdW5jdGlvbnMgY2xhc3NlcyBhcmUgc3RpbGwgdGhlcmUKKyAgICAqIGJ1dCB3ZSByZW1vdmUgdGhlbSBzcGVjaWZpY2FsbHkgZnJvbSB0aGUgYnVpbGQuICBUaGlzIGFsc28gaW52b2tlcyB0d2Vha3MgaW4gZnVuY3Rpb25zCisgICAgKiBsaWtlIHJlbW92aW5nIHN1cHBvcnQgZm9yIGV2ZW4gbW9kdWxpLCBldGMuLi4KKyAgICAqLworI2lmZGVmIExUTV9MQVNUCisgICAjdW5kZWYgIEJOX01QX1RPT01fTVVMX0MKKyAgICN1bmRlZiAgQk5fTVBfVE9PTV9TUVJfQworICAgI3VuZGVmICBCTl9NUF9LQVJBVFNVQkFfTVVMX0MKKyAgICN1bmRlZiAgQk5fTVBfS0FSQVRTVUJBX1NRUl9DCisgICAjdW5kZWYgIEJOX01QX1JFRFVDRV9DCisgICAjdW5kZWYgIEJOX01QX1JFRFVDRV9TRVRVUF9DCisgICAjdW5kZWYgIEJOX01QX0RSX0lTX01PRFVMVVNfQworICAgI3VuZGVmICBCTl9NUF9EUl9TRVRVUF9DCisgICAjdW5kZWYgIEJOX01QX0RSX1JFRFVDRV9DCisgICAjdW5kZWYgIEJOX01QX1JFRFVDRV9JU18yS19DCisgICAjdW5kZWYgIEJOX01QX1JFRFVDRV8yS19TRVRVUF9DCisgICAjdW5kZWYgIEJOX01QX1JFRFVDRV8yS19DCisgICAjdW5kZWYgIEJOX1NfTVBfRVhQVE1PRF9DCisgICAjdW5kZWYgIEJOX01QX0RJVl8zX0MKKyAgICN1bmRlZiAgQk5fU19NUF9NVUxfSElHSF9ESUdTX0MKKyAgICN1bmRlZiAgQk5fRkFTVF9TX01QX01VTF9ISUdIX0RJR1NfQworICAgI3VuZGVmICBCTl9GQVNUX01QX0lOVk1PRF9DCisKKyAgIC8qIFRvIHNhZmVseSB1bmRlZmluZSB0aGVzZSB5b3UgaGF2ZSB0byBtYWtlIHN1cmUgeW91ciBSU0Ega2V5IHdvbid0IGV4Y2VlZCB0aGUgQ29tYmEgdGhyZXNob2xkCisgICAgKiB3aGljaCBpcyByb3VnaGx5IDI1NSBkaWdpdHMgWzcxNDAgYml0cyBmb3IgMzItYml0IG1hY2hpbmVzLCAxNTMwMCBiaXRzIGZvciA2NC1iaXQgbWFjaGluZXNdIAorICAgICogd2hpY2ggbWVhbnMgcm91Z2hseSBzcGVha2luZyB5b3UgY2FuIGhhbmRsZSB1cHRvIDI1MzYtYml0IFJTQSBrZXlzIHdpdGggdGhlc2UgZGVmaW5lZCB3aXRob3V0CisgICAgKiB0cm91YmxlLiAgCisgICAgKi8KKyAgICN1bmRlZiAgQk5fU19NUF9NVUxfRElHU19DCisgICAjdW5kZWYgIEJOX1NfTVBfU1FSX0MKKyAgICN1bmRlZiAgQk5fTVBfTU9OVEdPTUVSWV9SRURVQ0VfQworI2VuZGlmCisKKyNlbmRpZgorCisvKiAkU291cmNlOiAvY3ZzL2xpYnRvbS9saWJ0b21tYXRoL3RvbW1hdGhfc3VwZXJjbGFzcy5oLHYgJCAqLworLyogJFJldmlzaW9uOiAxLjMgJCAqLworLyogJERhdGU6IDIwMDUvMDUvMTQgMTM6Mjk6MTcgJCAqLwpkaWZmIC0tZ2l0IGEvbGlzdGVuZXIuYyBiL2xpc3RlbmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ5MGM2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpc3RlbmVyLmMKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBEcm9wYmVhciBTU0gKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgImxpc3RlbmVyLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorCit2b2lkIGxpc3RlbmVyc19pbml0aWFsaXNlKCkgeworCisJLyoganVzdCBvbmUgc2xvdCB0byBzdGFydCB3aXRoICovCisJc2VzLmxpc3RlbmVycyA9IChzdHJ1Y3QgTGlzdGVuZXIqKiltX21hbGxvYyhzaXplb2Yoc3RydWN0IExpc3RlbmVyKikpOworCXNlcy5saXN0ZW5zaXplID0gMTsKKwlzZXMubGlzdGVuZXJzWzBdID0gTlVMTDsKKworfQorCit2b2lkIHNldF9saXN0ZW5lcl9mZHMoZmRfc2V0ICogcmVhZGZkcykgeworCisJdW5zaWduZWQgaW50IGksIGo7CisJc3RydWN0IExpc3RlbmVyICpsaXN0ZW5lcjsKKworCS8qIGNoZWNrIGVhY2ggaW4gdHVybiAqLworCWZvciAoaSA9IDA7IGkgPCBzZXMubGlzdGVuc2l6ZTsgaSsrKSB7CisJCWxpc3RlbmVyID0gc2VzLmxpc3RlbmVyc1tpXTsKKwkJaWYgKGxpc3RlbmVyICE9IE5VTEwpIHsKKwkJCWZvciAoaiA9IDA7IGogPCBsaXN0ZW5lci0+bnNvY2tzOyBqKyspIHsKKwkJCQlGRF9TRVQobGlzdGVuZXItPnNvY2tzW2pdLCByZWFkZmRzKTsKKwkJCX0KKwkJfQorCX0KK30KKworCit2b2lkIGhhbmRsZV9saXN0ZW5lcnMoZmRfc2V0ICogcmVhZGZkcykgeworCisJdW5zaWduZWQgaW50IGksIGo7CisJc3RydWN0IExpc3RlbmVyICpsaXN0ZW5lcjsKKwlpbnQgc29jazsKKworCS8qIGNoZWNrIGVhY2ggaW4gdHVybiAqLworCWZvciAoaSA9IDA7IGkgPCBzZXMubGlzdGVuc2l6ZTsgaSsrKSB7CisJCWxpc3RlbmVyID0gc2VzLmxpc3RlbmVyc1tpXTsKKwkJaWYgKGxpc3RlbmVyICE9IE5VTEwpIHsKKwkJCWZvciAoaiA9IDA7IGogPCBsaXN0ZW5lci0+bnNvY2tzOyBqKyspIHsKKwkJCQlzb2NrID0gbGlzdGVuZXItPnNvY2tzW2pdOworCQkJCWlmIChGRF9JU1NFVChzb2NrLCByZWFkZmRzKSkgeworCQkJCQlsaXN0ZW5lci0+YWNjZXB0b3IobGlzdGVuZXIsIHNvY2spOworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30gLyogV29vIGJyYWNlIG1hdGNoaW5nICovCisKKworLyogYWNjZXB0b3IoaW50IGZkLCB2b2lkKiB0eXBlZGF0YSkgaXMgYSBmdW5jdGlvbiB0byBhY2NlcHQgY29ubmVjdGlvbnMsIAorICogY2xlYW51cCh2b2lkKiB0eXBlZGF0YSkgaGFwcGVucyB3aGVuIGNsZWFuaW5nIHVwICovCitzdHJ1Y3QgTGlzdGVuZXIqIG5ld19saXN0ZW5lcihpbnQgc29ja3NbXSwgdW5zaWduZWQgaW50IG5zb2NrcywKKwkJaW50IHR5cGUsIHZvaWQqIHR5cGVkYXRhLCAKKwkJdm9pZCAoKmFjY2VwdG9yKShzdHJ1Y3QgTGlzdGVuZXIqIGxpc3RlbmVyLCBpbnQgc29jayksIAorCQl2b2lkICgqY2xlYW51cCkoc3RydWN0IExpc3RlbmVyKikpIHsKKworCXVuc2lnbmVkIGludCBpLCBqOworCXN0cnVjdCBMaXN0ZW5lciAqbmV3bGlzdGVuID0gTlVMTDsKKwkvKiB0cnkgZ2V0IGEgbmV3IHN0cnVjdHVyZSB0byBob2xkIGl0ICovCisJZm9yIChpID0gMDsgaSA8IHNlcy5saXN0ZW5zaXplOyBpKyspIHsKKwkJaWYgKHNlcy5saXN0ZW5lcnNbaV0gPT0gTlVMTCkgeworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBvciBjcmVhdGUgYSBuZXcgb25lICovCisJaWYgKGkgPT0gc2VzLmxpc3RlbnNpemUpIHsKKwkJaWYgKHNlcy5saXN0ZW5zaXplID4gTUFYX0xJU1RFTkVSUykgeworCQkJVFJBQ0UoKCJsZWF2ZSBuZXdsaXN0ZW5lcjogdG9vIG1hbnkgYWxyZWFkeSIpKQorCQkJZm9yIChqID0gMDsgaiA8IG5zb2NrczsgaisrKSB7CisJCQkJY2xvc2Uoc29ja3NbaV0pOworCQkJfQorCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJCisJCXNlcy5saXN0ZW5lcnMgPSAoc3RydWN0IExpc3RlbmVyKiopbV9yZWFsbG9jKHNlcy5saXN0ZW5lcnMsCisJCQkJKHNlcy5saXN0ZW5zaXplK0xJU1RFTkVSX0VYVEVORF9TSVpFKQorCQkJCSpzaXplb2Yoc3RydWN0IExpc3RlbmVyKikpOworCisJCXNlcy5saXN0ZW5zaXplICs9IExJU1RFTkVSX0VYVEVORF9TSVpFOworCisJCWZvciAoaiA9IGk7IGogPCBzZXMubGlzdGVuc2l6ZTsgaisrKSB7CisJCQlzZXMubGlzdGVuZXJzW2pdID0gTlVMTDsKKwkJfQorCX0KKworCWZvciAoaiA9IDA7IGogPCBuc29ja3M7IGorKykgeworCQlzZXMubWF4ZmQgPSBNQVgoc2VzLm1heGZkLCBzb2Nrc1tqXSk7CisJfQorCisJVFJBQ0UoKCJuZXcgbGlzdGVuZXIgbnVtICVkICIsIGkpKQorCisJbmV3bGlzdGVuID0gKHN0cnVjdCBMaXN0ZW5lciopbV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBMaXN0ZW5lcikpOworCW5ld2xpc3Rlbi0+aW5kZXggPSBpOworCW5ld2xpc3Rlbi0+dHlwZSA9IHR5cGU7CisJbmV3bGlzdGVuLT50eXBlZGF0YSA9IHR5cGVkYXRhOworCW5ld2xpc3Rlbi0+bnNvY2tzID0gbnNvY2tzOworCW1lbWNweShuZXdsaXN0ZW4tPnNvY2tzLCBzb2NrcywgbnNvY2tzICogc2l6ZW9mKGludCkpOworCW5ld2xpc3Rlbi0+YWNjZXB0b3IgPSBhY2NlcHRvcjsKKwluZXdsaXN0ZW4tPmNsZWFudXAgPSBjbGVhbnVwOworCisJc2VzLmxpc3RlbmVyc1tpXSA9IG5ld2xpc3RlbjsKKwlyZXR1cm4gbmV3bGlzdGVuOworfQorCisvKiBSZXR1cm4gdGhlIGZpcnN0IGxpc3RlbmVyIHdoaWNoIG1hdGNoZXMgdGhlIHR5cGUtc3BlY2lmaWMgY29tcGFyaXNvbgorICogZnVuY3Rpb24uIFBhcnRpY3VsYXJseSBuZWVkZWQgZm9yIGdsb2JhbCByZXF1ZXN0cywgbGlrZSB0Y3AgKi8KK3N0cnVjdCBMaXN0ZW5lciAqIGdldF9saXN0ZW5lcihpbnQgdHlwZSwgdm9pZCogdHlwZWRhdGEsCisJCWludCAoKm1hdGNoKSh2b2lkKiwgdm9pZCopKSB7CisKKwl1bnNpZ25lZCBpbnQgaTsKKwlzdHJ1Y3QgTGlzdGVuZXIqIGxpc3RlbmVyOworCisJZm9yIChpID0gMCwgbGlzdGVuZXIgPSBzZXMubGlzdGVuZXJzW2ldOyBpIDwgc2VzLmxpc3RlbnNpemU7IGkrKykgeworCQlpZiAobGlzdGVuZXItPnR5cGUgPT0gdHlwZQorCQkJCSYmIG1hdGNoKHR5cGVkYXRhLCBsaXN0ZW5lci0+dHlwZWRhdGEpKSB7CisJCQlyZXR1cm4gbGlzdGVuZXI7CisJCX0KKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCByZW1vdmVfbGlzdGVuZXIoc3RydWN0IExpc3RlbmVyKiBsaXN0ZW5lcikgeworCisJdW5zaWduZWQgaW50IGo7CisKKwlpZiAobGlzdGVuZXItPmNsZWFudXApIHsKKwkJbGlzdGVuZXItPmNsZWFudXAobGlzdGVuZXIpOworCX0KKworCWZvciAoaiA9IDA7IGogPCBsaXN0ZW5lci0+bnNvY2tzOyBqKyspIHsKKwkJY2xvc2UobGlzdGVuZXItPnNvY2tzW2pdKTsKKwl9CisJc2VzLmxpc3RlbmVyc1tsaXN0ZW5lci0+aW5kZXhdID0gTlVMTDsKKwltX2ZyZWUobGlzdGVuZXIpOworCit9CmRpZmYgLS1naXQgYS9saXN0ZW5lci5oIGIvbGlzdGVuZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDkyZWZkCi0tLSAvZGV2L251bGwKKysrIGIvbGlzdGVuZXIuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogRHJvcGJlYXIgU1NICisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaWZuZGVmIF9MSVNURU5FUl9ICisjZGVmaW5lIF9MSVNURU5FUl9ICisKKyNkZWZpbmUgTUFYX0xJU1RFTkVSUyAyMAorI2RlZmluZSBMSVNURU5FUl9FWFRFTkRfU0laRSAxCisKK3N0cnVjdCBMaXN0ZW5lciB7CisKKwlpbnQgc29ja3NbRFJPUEJFQVJfTUFYX1NPQ0tTXTsKKwl1bnNpZ25lZCBpbnQgbnNvY2tzOworCisJaW50IGluZGV4OyAvKiBpbmRleCBpbiB0aGUgYXJyYXkgb2YgbGlzdGVuZXJzICovCisKKwl2b2lkICgqYWNjZXB0b3IpKHN0cnVjdCBMaXN0ZW5lciosIGludCBzb2NrKTsKKwl2b2lkICgqY2xlYW51cCkoc3RydWN0IExpc3RlbmVyKik7CisKKwlpbnQgdHlwZTsgLyogQ0hBTk5FTF9JRF9YMTEsIENIQU5ORUxfSURfQUdFTlQsIAorCQkJCSBDSEFOTkVMX0lEX1RDUERJUkVDVCAoZm9yIGNsaWVudHMpLAorCQkJCSBDSEFOTkVMX0lEX1RDUEZPUldBUkRFRCAoZm9yIHNlcnZlcnMpICovCisKKwl2b2lkICp0eXBlZGF0YTsKKworfTsKKwordm9pZCBsaXN0ZW5lcnNfaW5pdGlhbGlzZSgpOwordm9pZCBoYW5kbGVfbGlzdGVuZXJzKGZkX3NldCAqIHJlYWRmZHMpOwordm9pZCBzZXRfbGlzdGVuZXJfZmRzKGZkX3NldCAqIHJlYWRmZHMpOworCitzdHJ1Y3QgTGlzdGVuZXIqIG5ld19saXN0ZW5lcihpbnQgc29ja3NbXSwgdW5zaWduZWQgaW50IG5zb2NrcywgCisJCWludCB0eXBlLCB2b2lkKiB0eXBlZGF0YSwgCisJCXZvaWQgKCphY2NlcHRvcikoc3RydWN0IExpc3RlbmVyKiBsaXN0ZW5lciwgaW50IHNvY2spLCAKKwkJdm9pZCAoKmNsZWFudXApKHN0cnVjdCBMaXN0ZW5lciopKTsKKworc3RydWN0IExpc3RlbmVyICogZ2V0X2xpc3RlbmVyKGludCB0eXBlLCB2b2lkKiB0eXBlZGF0YSwKKwkJaW50ICgqbWF0Y2gpKHZvaWQqLCB2b2lkKikpOworCit2b2lkIHJlbW92ZV9saXN0ZW5lcihzdHJ1Y3QgTGlzdGVuZXIqIGxpc3RlbmVyKTsKKworI2VuZGlmIC8qIF9MSVNURU5FUl9IICovCmRpZmYgLS1naXQgYS9sb2dpbnJlYy5jIGIvbG9naW5yZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDg0NTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbG9naW5yZWMuYwpAQCAtMCwwICsxLDEzOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDAgQW5kcmUgTHVjYXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUG9ydGlvbnMgY29weXJpZ2h0IChjKSAxOTk4IFRvZGQgQy4gTWlsbGVyCisgKiBQb3J0aW9ucyBjb3B5cmlnaHQgKGMpIDE5OTYgSmFzb24gRG93bnMKKyAqIFBvcnRpb25zIGNvcHlyaWdodCAoYykgMTk5NiBUaGVvIGRlIFJhYWR0CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICoqIGxvZ2lucmVjLmM6ICBwbGF0Zm9ybS1pbmRlcGVuZGVudCBsb2dpbiByZWNvcmRpbmcgYW5kIGxhc3Rsb2cgcmV0cmlldmFsCisgKiovCisKKy8qIEZvciBub3cgbGFzdGxvZyBjb2RlIGhhcyBiZWVuIHJlbW92ZWQgYXMgaXQgd2Fzbid0IGJlaW5nIHVzZWQgYnkgRHJvcGJlYXIuICovCisKKy8qCisgIFRoZSBuZXcgbG9naW4gY29kZSBleHBsYWluZWQKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgIFRoaXMgY29kZSBhdHRlbXB0cyB0byBwcm92aWRlIGEgY29tbW9uIGludGVyZmFjZSB0byBsb2dpbiByZWNvcmRpbmcKKyAgKHV0bXAgYW5kIGZyaWVuZHMpIGFuZCBsYXN0IGxvZ2luIHRpbWUgcmV0cmlldmFsLgorCisgIEl0cyBwcmltYXJ5IG1lYW5zIG9mIGFjaGlldmluZyB0aGlzIGlzIHRvIHVzZSAnc3RydWN0IGxvZ2luaW5mbycsIGEKKyAgdW5pb24gb2YgYWxsIHRoZSB1c2VmdWwgZmllbGRzIGluIHRoZSB2YXJpb3VzIGRpZmZlcmVudCB0eXBlcyBvZgorICBzeXN0ZW0gbG9naW4gcmVjb3JkIHN0cnVjdHVyZXMgb25lIGZpbmRzIG9uIFVOSVggdmFyaWFudHMuCisKKyAgV2UgZGVwZW5kIG9uIGF1dG9jb25mIHRvIGRlZmluZSB3aGljaCByZWNvcmRpbmcgbWV0aG9kcyBhcmUgdG8gYmUKKyAgdXNlZCwgYW5kIHdoaWNoIGZpZWxkcyBhcmUgY29udGFpbmVkIGluIHRoZSByZWxldmFudCBkYXRhIHN0cnVjdHVyZXMKKyAgb24gdGhlIGxvY2FsIHN5c3RlbS4gTWFueSBDIHByZXByb2Nlc3NvciBzeW1ib2xzIGFmZmVjdCB3aGljaCBjb2RlCisgIGdldHMgY29tcGlsZWQgaGVyZS4KKworICBUaGUgY29kZSBpcyBkZXNpZ25lZCB0byBtYWtlIGl0IGVhc3kgdG8gbW9kaWZ5IGEgcGFydGljdWxhcgorICByZWNvcmRpbmcgbWV0aG9kLCB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBtZXRob2RzIG5vciByZXF1aXJpbmcgc28KKyAgbWFueSBuZXN0ZWQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2tzIGFzIHdlcmUgY29tbW9ucGxhY2UgaW4KKyAgdGhlIG9sZCBjb2RlLgorCisgIEZvciBsb2dpbiByZWNvcmRpbmcsIHdlIHRyeSB0byB1c2UgdGhlIGxvY2FsIHN5c3RlbSdzIGxpYnJhcmllcyBhcworICB0aGVzZSBhcmUgY2xlYXJseSBtb3N0IGxpa2VseSB0byB3b3JrIGNvcnJlY3RseS4gRm9yIHV0bXAgc3lzdGVtcworICB0aGlzIHVzdWFsbHkgbWVhbnMgbG9naW4oKSBhbmQgbG9nb3V0KCkgb3Igc2V0dXRlbnQoKSBldGMuLCBwcm9iYWJseQorICBpbiBsaWJ1dGlsLCBhbG9uZyB3aXRoIGxvZ3d0bXAoKSBldGMuIE9uIHRoZXNlIHN5c3RlbXMsIHdlIGZhbGwgYmFjaworICB0byB3cml0aW5nIHRoZSBmaWxlcyBkaXJlY3RseSBpZiB3ZSBoYXZlIHRvLCB0aG91Z2ggdGhpcyBtZXRob2QKKyAgcmVxdWlyZXMgdmVyeSB0aG9yb3VnaCB0ZXN0aW5nIHNvIHdlIGRvIG5vdCBjb3JydXB0IGxvY2FsIGF1ZGl0aW5nCisgIGluZm9ybWF0aW9uLiBUaGVzZSBmaWxlcyBhbmQgdGhlaXIgYWNjZXNzIG1ldGhvZHMgYXJlIHZlcnkgc3lzdGVtCisgIHNwZWNpZmljIGluZGVlZC4KKworICBGb3IgdXRtcHggc3lzdGVtcywgdGhlIGNvcnJlc3BvbmRpbmcgbGlicmFyeSBmdW5jdGlvbnMgYXJlCisgIHNldHV0eGVudCgpIGV0Yy4gVG8gdGhlIGF1dGhvcidzIGtub3dsZWRnZSwgYWxsIHV0bXB4IHN5c3RlbXMgaGF2ZQorICB0aGVzZSBsaWJyYXJ5IGZ1bmN0aW9ucyBhbmQgc28gbm8gZGlyZWN0IHdyaXRlIGlzIGF0dGVtcHRlZC4gSWYgc3VjaAorICBhIHN5c3RlbSBleGlzdHMgYW5kIG5lZWRzIHN1cHBvcnQsIGRpcmVjdCBhbmFsb2d1ZXMgb2YgdGhlIFt1d110bXAKKyAgY29kZSBzaG91bGQgc3VmZmljZS4KKworICBSZXRyaWV2aW5nIHRoZSB0aW1lIG9mIGxhc3QgbG9naW4gKCdsYXN0bG9nJykgaXMgaW4gc29tZSB3YXlzIGV2ZW4KKyAgbW9yZSBwcm9ibGVtbWF0aWMgdGhhbiBsb2dpbiByZWNvcmRpbmcuIFNvbWUgc3lzdGVtcyBwcm92aWRlIGEKKyAgc2ltcGxlIHRhYmxlIG9mIGFsbCB1c2VycyB3aGljaCB3ZSBzZWVrIGJhc2VkIG9uIHVpZCBhbmQgcmV0cmlldmUgYQorICByZWxhdGl2ZWx5IHN0YW5kYXJkIHN0cnVjdHVyZS4gT3RoZXJzIHJlY29yZCB0aGUgc2FtZSBpbmZvcm1hdGlvbiBpbgorICBhIGRpcmVjdG9yeSB3aXRoIGEgc2VwYXJhdGUgZmlsZSwgYW5kIG90aGVycyBkb24ndCByZWNvcmQgdGhlCisgIGluZm9ybWF0aW9uIHNlcGFyYXRlbHkgYXQgYWxsLiBGb3Igc3lzdGVtcyBpbiB0aGUgbGF0dGVyIGNhdGVnb3J5LAorICB3ZSBsb29rIGJhY2t3YXJkcyBpbiB0aGUgd3RtcCBvciB3dG1weCBmaWxlIGZvciB0aGUgbGFzdCBsb2dpbiBlbnRyeQorICBmb3Igb3VyIHVzZXIuIE5hdHVyYWxseSB0aGlzIGlzIHNsb3dlciBhbmQgb24gYnVzeSBzeXN0ZW1zIGNvdWxkCisgIGluY3VyIGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgcGVuYWx0eS4KKworICBDYWxsaW5nIHRoZSBuZXcgY29kZQorICAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEluIE9wZW5TU0ggYWxsIGxvZ2luIHJlY29yZGluZyBhbmQgcmV0cmlldmFsIGlzIHBlcmZvcm1lZCBpbgorICBsb2dpbi5jLiBIZXJlIHlvdSdsbCBmaW5kIHdvcmtpbmcgZXhhbXBsZXMuIEFsc28sIGluIHRoZSBsb2dpbnRlc3QuYworICBwcm9ncmFtIHRoZXJlIGFyZSBtb3JlIGV4YW1wbGVzLgorCisgIEludGVybmFsIGhhbmRsZXIgY2FsbGluZyBtZXRob2QKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFdoZW4gYSBjYWxsIGlzIG1hZGUgdG8gbG9naW5fbG9naW4oKSBvciBsb2dpbl9sb2dvdXQoKSwgYm90aAorICByb3V0aW5lcyBzZXQgYSBzdHJ1Y3QgbG9naW5pbmZvIGZsYWcgZGVmaW5pbmcgd2hpY2ggYWN0aW9uIChsb2cgaW4sCisgIG9yIGxvZyBvdXQpIGlzIHRvIGJlIHRha2VuLiBUaGV5IGJvdGggdGhlbiBjYWxsIGxvZ2luX3dyaXRlKCksIHdoaWNoCisgIGNhbGxzIHdoaWNoZXZlciBvZiB0aGUgbWFueSBzdHJ1Y3R1cmUtc3BlY2lmaWMgaGFuZGxlcnMgYXV0b2NvbmYKKyAgc2VsZWN0cyBmb3IgdGhlIGxvY2FsIHN5c3RlbS4KKworICBUaGUgaGFuZGxlcnMgdGhlbXNlbHZlcyBoYW5kbGUgc3lzdGVtIGRhdGEgc3RydWN0dXJlIHNwZWNpZmljcy4gQm90aAorICBzdHJ1Y3QgdXRtcCBhbmQgc3RydWN0IHV0bXB4IGhhdmUgdXRpbGl0eSBmdW5jdGlvbnMgKHNlZQorICBjb25zdHJ1Y3RfdXRtcCooKSkgdG8gdHJ5IHRvIG1ha2UgaXQgc2ltcGxlciB0byBhZGQgZXh0cmEgc3lzdGVtcworICB0aGF0IGludHJvZHVjZSBuZXcgZmVhdHVyZXMgdG8gZWl0aGVyIHN0cnVjdHVyZS4KKworICBXaGlsZSBpdCBtYXkgc2VlbSB0ZXJyaWJseSB3YXN0ZWZ1bCB0byByZXBsaWNhdGUgc28gbXVjaCBzaW1pbGFyCisgIGNvZGUgZm9yIGVhY2ggbWV0aG9kLCBleHBlcmllbmNlIGhhcyBzaG93biB0aGF0IG1haW50YWluaW5nIGNvZGUgdG8KKyAgd3JpdGUgYm90aCBzdHJ1Y3QgdXRtcCBhbmQgdXRtcHggaW4gb25lIGZ1bmN0aW9uLCB3aGlsc3QgbWFpbnRhaW5pbmcKKyAgc3VwcG9ydCBmb3IgYWxsIHN5c3RlbXMgd2hldGhlciB0aGV5IGhhdmUgbGlicmFyeSBzdXBwb3J0IG9yIG5vdCwgaXMKKyAgYSBkaWZmaWN1bHQgYW5kIHRpbWUtY29uc3VtaW5nIHRhc2suCisKKyAgTGFzdGxvZyBzdXBwb3J0IHByb2NlZWRzIHNpbWlsYXJseS4gRnVuY3Rpb25zIGxvZ2luX2dldF9sYXN0bG9nKCkKKyAgKGFuZCBpdHMgT3BlblNTSC10dW5lZCBmcmllbmQgbG9naW5fZ2V0X2xhc3Rsb2dfdGltZSgpKSBjYWxsCisgIGdldGxhc3RfZW50cnkoKSwgd2hpY2ggdHJpZXMgb25lIG9mIHRocmVlIG1ldGhvZHMgdG8gZmluZCB0aGUgbGFzdAorICBsb2dpbiB0aW1lLiBJdCB1c2VzIGxvY2FsIHN5c3RlbSBsYXN0bG9nIHN1cHBvcnQgaWYgaXQgY2FuLAorICBvdGhlcndpc2UgaXQgdHJpZXMgd3RtcCBvciB3dG1weCBiZWZvcmUgZ2l2aW5nIHVwIGFuZCByZXR1cm5pbmcgMCwKKyAgbWVhbmluZyAidGlsdCIuCisKKyAgTWFpbnRlbmFuY2UKKyAgLS0tLS0tLS0tLS0KKworICBJbiBtYW55IGNhc2VzIGl0J3MgcG9zc2libGUgdG8gdHdlYWsgYXV0b2NvbmYgdG8gc2VsZWN0IHRoZSBjb3JyZWN0CisgIG1ldGhvZHMgZm9yIGEgcGFydGljdWxhciBwbGF0Zm9ybSwgZWl0aGVyIGJ5IGltcHJvdmluZyB0aGUgZGV0ZWN0aW9uCisgIGNvZGUgKGJlc3QpLCBvciBieSBwcmVzZXR0aW5nIERJU0FCTEVfPG1ldGhvZD4gb3IgQ09ORl88bWV0aG9kPl9GSUxFCisgIHN5bWJvbHMgZm9yIHRoZSBwbGF0Zm9ybS4KKworICBVc2UgbG9naW50ZXN0IHRvIGNoZWNrIHdoaWNoIHN5bWJvbHMgYXJlIGRlZmluZWQgYmVmb3JlIG1vZGlmeWluZworICBjb25maWd1cmUuYWMgYW5kIGxvZ2lucmVjLmMuIChZb3UgaGF2ZSB0byBidWlsZCBsb2dpbnRlc3QgeW91cnNlbGYKKyAgd2l0aCAnbWFrZSBsb2dpbnRlc3QnIGFzIGl0J3Mgbm90IGJ1aWx0IGJ5IGRlZmF1bHQuKQorCisgIE90aGVyd2lzZSwgcGF0Y2hlcyB0byB0aGUgc3BlY2lmaWMgbWV0aG9kKHMpIGFyZSB2ZXJ5IGhlbHBmdWwhCisKKyovCisKKy8qKgorICoqIFRPRE86CisgKiogICBob21lZ3Jvd24gdHR5c2xvdCgpCisgKiogICB0ZXN0LCB0ZXN0LCB0ZXN0CisgKioKKyAqKiBQbGF0Zm9ybSBzdGF0dXM6CisgKiogLS0tLS0tLS0tLS0tLS0tLQorICoqCisgKiogS25vd24gZ29vZDoKKyAqKiAgIExpbnV4IChSZWRoYXQgNi4yLCBEZWJpYW4pCisgKiogICBTb2xhcmlzCisgKiogICBIUC1VWCAxMC4yMCAoZ2NjIG9ubHkpCisgKiogICBJUklYCisgKiogICBOZVhUIC0gTTY4ay9IUFBBL1NwYXJjICg0LjIvMy4zKQorICoqCisgKiogVGVzdGluZyByZXF1aXJlZDogUGxlYXNlIHNlbmQgcmVwb3J0cyEKKyAqKiAgIE5ldEJTRAorICoqICAgSFAtVVggMTEKKyAqKiAgIEFJWAorICoqCisgKiogUGxhdGZvcm1zIHdpdGgga25vd24gcHJvYmxlbXM6CisgKiogICBTb21lIHZhcmlhbnRzIG9mIFNsYWNrd2FyZSBMaW51eAorICoqCisgKiovCisKKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAibG9naW5yZWMuaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKyNpbmNsdWRlICJhdG9taWNpby5oIgorCisvKioKKyAqKiBwcm90b3R5cGVzIGZvciBoZWxwZXIgZnVuY3Rpb25zIGluIHRoaXMgZmlsZQorICoqLworCisjaWYgSEFWRV9VVE1QX0gKK3ZvaWQgc2V0X3V0bXBfdGltZShzdHJ1Y3QgbG9naW5pbmZvICpsaSwgc3RydWN0IHV0bXAgKnV0KTsKK3ZvaWQgY29uc3RydWN0X3V0bXAoc3RydWN0IGxvZ2luaW5mbyAqbGksIHN0cnVjdCB1dG1wICp1dCk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfVVRNUFhfSAordm9pZCBzZXRfdXRtcHhfdGltZShzdHJ1Y3QgbG9naW5pbmZvICpsaSwgc3RydWN0IHV0bXB4ICp1dCk7Cit2b2lkIGNvbnN0cnVjdF91dG1weChzdHJ1Y3QgbG9naW5pbmZvICpsaSwgc3RydWN0IHV0bXB4ICp1dCk7CisjZW5kaWYKKworaW50IHV0bXBfd3JpdGVfZW50cnkoc3RydWN0IGxvZ2luaW5mbyAqbGkpOworaW50IHV0bXB4X3dyaXRlX2VudHJ5KHN0cnVjdCBsb2dpbmluZm8gKmxpKTsKK2ludCB3dG1wX3dyaXRlX2VudHJ5KHN0cnVjdCBsb2dpbmluZm8gKmxpKTsKK2ludCB3dG1weF93cml0ZV9lbnRyeShzdHJ1Y3QgbG9naW5pbmZvICpsaSk7CitpbnQgbGFzdGxvZ193cml0ZV9lbnRyeShzdHJ1Y3QgbG9naW5pbmZvICpsaSk7CitpbnQgc3lzbG9naW5fd3JpdGVfZW50cnkoc3RydWN0IGxvZ2luaW5mbyAqbGkpOworCitpbnQgd3RtcF9nZXRfZW50cnkoc3RydWN0IGxvZ2luaW5mbyAqbGkpOworaW50IHd0bXB4X2dldF9lbnRyeShzdHJ1Y3QgbG9naW5pbmZvICpsaSk7CisKKy8qIHBpY2sgdGhlIHNob3J0ZXN0IHN0cmluZyAqLworI2RlZmluZSBNSU5fU0laRU9GKHMxLHMyKSAoIHNpemVvZihzMSkgPCBzaXplb2YoczIpID8gc2l6ZW9mKHMxKSA6IHNpemVvZihzMikgKQorCisvKioKKyAqKiBwbGF0Zm9ybS1pbmRlcGVuZGVudCBsb2dpbiBmdW5jdGlvbnMKKyAqKi8KKworLyogbG9naW5fbG9naW4oc3RydWN0IGxvZ2luaW5mbyAqKSAgICAgLVJlY29yZCBhIGxvZ2luCisgKgorICogQ2FsbCB3aXRoIGEgcG9pbnRlciB0byBhIHN0cnVjdCBsb2dpbmluZm8gaW5pdGlhbGlzZWQgd2l0aAorICogbG9naW5faW5pdF9lbnRyeSgpIG9yIGxvZ2luX2FsbG9jX2VudHJ5KCkKKyAqCisgKiBSZXR1cm5zOgorICogID4wIGlmIHN1Y2Nlc3NmdWwKKyAqICAwICBvbiBmYWlsdXJlICh3aWxsIHVzZSBPcGVuU1NIJ3MgbG9nZ2luZyBmYWNpbGl0aWVzIGZvciBkaWFnbm9zdGljcykKKyAqLworaW50Citsb2dpbl9sb2dpbiAoc3RydWN0IGxvZ2luaW5mbyAqbGkpCit7CisJbGktPnR5cGUgPSBMVFlQRV9MT0dJTjsKKwlyZXR1cm4gbG9naW5fd3JpdGUobGkpOworfQorCisKKy8qIGxvZ2luX2xvZ291dChzdHJ1Y3QgbG9naW5pbmZvICopICAgICAtIFJlY29yZCBhIGxvZ291dAorICoKKyAqIENhbGwgYXMgd2l0aCBsb2dpbl9sb2dpbigpCisgKgorICogUmV0dXJuczoKKyAqICA+MCBpZiBzdWNjZXNzZnVsCisgKiAgMCAgb24gZmFpbHVyZSAod2lsbCB1c2UgT3BlblNTSCdzIGxvZ2dpbmcgZmFjaWxpdGllcyBmb3IgZGlhZ25vc3RpY3MpCisgKi8KK2ludAorbG9naW5fbG9nb3V0KHN0cnVjdCBsb2dpbmluZm8gKmxpKQoreworCWxpLT50eXBlID0gTFRZUEVfTE9HT1VUOworCXJldHVybiBsb2dpbl93cml0ZShsaSk7Cit9CisKKworLyogbG9naW5fYWxsb2NfZW50cnkoaW50LCBjaGFyKiwgY2hhciosIGNoYXIqKSAgICAtIEFsbG9jYXRlIGFuZCBpbml0aWFsaXNlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBsb2dpbmluZm8gc3RydWN0dXJlCisgKgorICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IHN0cnVjdCBsb2dpbmluZm8sIGEgZGF0YSBzdHJ1Y3R1cmUKKyAqIG1lYW50IHRvIGNhcnJ5IHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBwb3J0YWJseSByZWNvcmQgbG9naW4gaW5mby4KKyAqCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGNyZWF0ZWQgc3RydWN0IGxvZ2luaW5mby4gSWYgbWVtb3J5CisgKiBhbGxvY2F0aW9uIGZhaWxzLCB0aGUgcHJvZ3JhbSBoYWx0cy4KKyAqLworc3RydWN0Citsb2dpbmluZm8gKmxvZ2luX2FsbG9jX2VudHJ5KGludCBwaWQsIGNvbnN0IGNoYXIgKnVzZXJuYW1lLAorCQkJICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwgY29uc3QgY2hhciAqbGluZSkKK3sKKwlzdHJ1Y3QgbG9naW5pbmZvICpuZXdsaTsKKworCW5ld2xpID0gKHN0cnVjdCBsb2dpbmluZm8gKikgbV9tYWxsb2MgKHNpemVvZigqbmV3bGkpKTsKKwkodm9pZClsb2dpbl9pbml0X2VudHJ5KG5ld2xpLCBwaWQsIHVzZXJuYW1lLCBob3N0bmFtZSwgbGluZSk7CisJcmV0dXJuIG5ld2xpOworfQorCisKKy8qIGxvZ2luX2ZyZWVfZW50cnkoc3RydWN0IGxvZ2luaW5mbyAqKSAgICAtIGZyZWUgc3RydWN0IG1lbW9yeSAqLwordm9pZAorbG9naW5fZnJlZV9lbnRyeShzdHJ1Y3QgbG9naW5pbmZvICpsaSkKK3sKKwltX2ZyZWUobGkpOworfQorCisKKy8qIGxvZ2luX2luaXRfZW50cnkoc3RydWN0IGxvZ2luaW5mbyAqLCBpbnQsIGNoYXIqLCBjaGFyKiwgY2hhciopCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGluaXRpYWxpc2UgYSBzdHJ1Y3QgbG9naW5pbmZvCisgKgorICogUG9wdWxhdGVzIGEgbmV3IHN0cnVjdCBsb2dpbmluZm8sIGEgZGF0YSBzdHJ1Y3R1cmUgbWVhbnQgdG8gY2FycnkKKyAqIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCB0byBwb3J0YWJseSByZWNvcmQgbG9naW4gaW5mby4KKyAqCisgKiBSZXR1cm5zOiAxCisgKi8KK2ludAorbG9naW5faW5pdF9lbnRyeShzdHJ1Y3QgbG9naW5pbmZvICpsaSwgaW50IHBpZCwgY29uc3QgY2hhciAqdXNlcm5hbWUsCisJCSBjb25zdCBjaGFyICpob3N0bmFtZSwgY29uc3QgY2hhciAqbGluZSkKK3sKKwlzdHJ1Y3QgcGFzc3dkICpwdzsKKworCW1lbXNldChsaSwgMCwgc2l6ZW9mKCpsaSkpOworCisJbGktPnBpZCA9IHBpZDsKKworCS8qIHNldCB0aGUgbGluZSBpbmZvcm1hdGlvbiAqLworCWlmIChsaW5lKQorCQlsaW5lX2Z1bGxuYW1lKGxpLT5saW5lLCBsaW5lLCBzaXplb2YobGktPmxpbmUpKTsKKworCWlmICh1c2VybmFtZSkgeworCQlzdHJsY3B5KGxpLT51c2VybmFtZSwgdXNlcm5hbWUsIHNpemVvZihsaS0+dXNlcm5hbWUpKTsKKwkJcHcgPSBnZXRwd25hbShsaS0+dXNlcm5hbWUpOworCQlpZiAocHcgPT0gTlVMTCkKKwkJCWRyb3BiZWFyX2V4aXQoImxvZ2luX2luaXRfZW50cnk6IENhbm5vdCBmaW5kIHVzZXIgXCIlc1wiIiwKKwkJCQkJbGktPnVzZXJuYW1lKTsKKwkJbGktPnVpZCA9IHB3LT5wd191aWQ7CisJfQorCisJaWYgKGhvc3RuYW1lKQorCQlzdHJsY3B5KGxpLT5ob3N0bmFtZSwgaG9zdG5hbWUsIHNpemVvZihsaS0+aG9zdG5hbWUpKTsKKworCXJldHVybiAxOworfQorCisvKiBsb2dpbl9zZXRfY3VycmVudF90aW1lKHN0cnVjdCBsb2dpbmluZm8gKikgICAgLSBzZXQgdGhlIGN1cnJlbnQgdGltZQorICoKKyAqIFNldCB0aGUgY3VycmVudCB0aW1lIGluIGEgbG9naW5pbmZvIHN0cnVjdHVyZS4gVGhpcyBmdW5jdGlvbiBpcworICogbWVhbnQgdG8gZWxpbWluYXRlIHRoZSBuZWVkIHRvIGRlYWwgd2l0aCBzeXN0ZW0gZGVwZW5kZW5jaWVzIGZvcgorICogdGltZSBoYW5kbGluZy4KKyAqLwordm9pZAorbG9naW5fc2V0X2N1cnJlbnRfdGltZShzdHJ1Y3QgbG9naW5pbmZvICpsaSkKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCisJbGktPnR2X3NlYyA9IHR2LnR2X3NlYzsKKwlsaS0+dHZfdXNlYyA9IHR2LnR2X3VzZWM7Cit9CisKKy8qIGNvcHkgYSBzb2NrYWRkcl8qIGludG8gb3VyIGxvZ2luaW5mbyAqLwordm9pZAorbG9naW5fc2V0X2FkZHIoc3RydWN0IGxvZ2luaW5mbyAqbGksIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsCisJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzYV9zaXplKQoreworCXVuc2lnbmVkIGludCBidWZzaXplID0gc2Ffc2l6ZTsKKworCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVycnVuIG91ciB1bmlvbiAqLworCWlmIChzaXplb2YobGktPmhvc3RhZGRyKSA8IHNhX3NpemUpCisJCWJ1ZnNpemUgPSBzaXplb2YobGktPmhvc3RhZGRyKTsKKworCW1lbWNweSgodm9pZCAqKSYobGktPmhvc3RhZGRyLnNhKSwgKGNvbnN0IHZvaWQgKilzYSwgYnVmc2l6ZSk7Cit9CisKKworLyoqCisgKiogbG9naW5fd3JpdGU6IENhbGwgbG93LWxldmVsIHJlY29yZGluZyBmdW5jdGlvbnMgYmFzZWQgb24gYXV0b2NvbmYKKyAqKiByZXN1bHRzCisgKiovCitpbnQKK2xvZ2luX3dyaXRlIChzdHJ1Y3QgbG9naW5pbmZvICpsaSkKK3sKKyNpZm5kZWYgSEFWRV9DWUdXSU4KKwlpZiAoKGludClnZXRldWlkKCkgIT0gMCkgeworCSAgZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLAorCQkJICAiQXR0ZW1wdCB0byB3cml0ZSBsb2dpbiByZWNvcmRzIGJ5IG5vbi1yb290IHVzZXIgKGFib3J0aW5nKSIpOworCSAgcmV0dXJuIDE7CisJfQorI2VuZGlmCisKKwkvKiBzZXQgdGhlIHRpbWVzdGFtcCAqLworCWxvZ2luX3NldF9jdXJyZW50X3RpbWUobGkpOworI2lmZGVmIFVTRV9MT0dJTgorCXN5c2xvZ2luX3dyaXRlX2VudHJ5KGxpKTsKKyNlbmRpZgorI2lmZGVmIFVTRV9MQVNUTE9HCisJaWYgKGxpLT50eXBlID09IExUWVBFX0xPR0lOKSB7CisJCWxhc3Rsb2dfd3JpdGVfZW50cnkobGkpOworCX0KKyNlbmRpZgorI2lmZGVmIFVTRV9VVE1QCisJdXRtcF93cml0ZV9lbnRyeShsaSk7CisjZW5kaWYKKyNpZmRlZiBVU0VfV1RNUAorCXd0bXBfd3JpdGVfZW50cnkobGkpOworI2VuZGlmCisjaWZkZWYgVVNFX1VUTVBYCisJdXRtcHhfd3JpdGVfZW50cnkobGkpOworI2VuZGlmCisjaWZkZWYgVVNFX1dUTVBYCisJd3RtcHhfd3JpdGVfZW50cnkobGkpOworI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBMT0dJTl9ORUVEU19VVE1QWAoraW50Citsb2dpbl91dG1wX29ubHkoc3RydWN0IGxvZ2luaW5mbyAqbGkpCit7CisJbGktPnR5cGUgPSBMVFlQRV9MT0dJTjsgCisJbG9naW5fc2V0X2N1cnJlbnRfdGltZShsaSk7CisjIGlmZGVmIFVTRV9VVE1QCisJdXRtcF93cml0ZV9lbnRyeShsaSk7CisjIGVuZGlmCisjIGlmZGVmIFVTRV9XVE1QCisJd3RtcF93cml0ZV9lbnRyeShsaSk7CisjIGVuZGlmCisjIGlmZGVmIFVTRV9VVE1QWAorCXV0bXB4X3dyaXRlX2VudHJ5KGxpKTsKKyMgZW5kaWYKKyMgaWZkZWYgVVNFX1dUTVBYCisJd3RtcHhfd3JpdGVfZW50cnkobGkpOworIyBlbmRpZgorCXJldHVybiAwOworfQorI2VuZGlmCisKKworCisvKgorICogJ2xpbmUnIHN0cmluZyB1dGlsaXR5IGZ1bmN0aW9ucworICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBwcm9jZXNzIHRoZSAnbGluZScgc3RyaW5nIGludG8gb25lIG9mIHRocmVlIGZvcm1zOgorICoKKyAqIDEuIFRoZSBmdWxsIGZpbGVuYW1lIChpbmNsdWRpbmcgJy9kZXYnKQorICogMi4gVGhlIHN0cmlwcGVkIG5hbWUgKGV4Y2x1ZGluZyAnL2RldicpCisgKiAzLiBUaGUgYWJicmV2aWF0ZWQgbmFtZSAoZS5nLiAvZGV2L3R0eXAwMCAtPiB5cDAwCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvZGV2L3B0cy8xICAtPiB0cy8xICkKKyAqCisgKiBGb3JtIDMgaXMgdXNlZCBvbiBzb21lIHN5c3RlbXMgdG8gaWRlbnRpZnkgYSAudG1wLj8gZW50cnkgd2hlbgorICogYXR0ZW1wdGluZyB0byByZW1vdmUgaXQuIFR5cGljYWxseSBib3RoIGFkZGl0aW9uIGFuZCByZW1vdmFsIGlzCisgKiBwZXJmb3JtZWQgYnkgb25lIGFwcGxpY2F0aW9uIC0gc2F5LCBzc2hkIC0gc28gYXMgbG9uZyBhcyB0aGUgY2hvaWNlCisgKiB1bmlxdWVseSBpZGVudGlmaWVzIGEgdGVybWluYWwgaXQncyBvay4KKyAqLworCisKKy8qIGxpbmVfZnVsbG5hbWUoKTogYWRkIHRoZSBsZWFkaW5nICcvZGV2LycgaWYgaXQgZG9lc24ndCBleGlzdCBtYWtlCisgKiBzdXJlIGRzdCBoYXMgZW5vdWdoIHNwYWNlLCBpZiBub3QganVzdCBjb3B5IHNyYyAodWdoKSAqLworY2hhciAqCitsaW5lX2Z1bGxuYW1lKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZHN0c2l6ZSkKK3sKKwltZW1zZXQoZHN0LCAnXDAnLCBkc3RzaXplKTsKKwlpZiAoKHN0cm5jbXAoc3JjLCAiL2Rldi8iLCA1KSA9PSAwKSB8fCAoZHN0c2l6ZSA8IChzdHJsZW4oc3JjKSArIDUpKSkgeworCQlzdHJsY3B5KGRzdCwgc3JjLCBkc3RzaXplKTsKKwl9IGVsc2UgeworCQlzdHJsY3B5KGRzdCwgIi9kZXYvIiwgZHN0c2l6ZSk7CisJCXN0cmxjYXQoZHN0LCBzcmMsIGRzdHNpemUpOworCX0KKwlyZXR1cm4gZHN0OworfQorCisvKiBsaW5lX3N0cmlwbmFtZSgpOiBzdHJpcCB0aGUgbGVhZGluZyAnL2RldicgaWYgaXQgZXhpc3RzLCByZXR1cm4gZHN0ICovCitjaGFyICoKK2xpbmVfc3RyaXBuYW1lKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZHN0c2l6ZSkKK3sKKwltZW1zZXQoZHN0LCAnXDAnLCBkc3RzaXplKTsKKwlpZiAoc3RybmNtcChzcmMsICIvZGV2LyIsIDUpID09IDApCisJCXN0cmxjcHkoZHN0LCBzcmMgKyA1LCBkc3RzaXplKTsKKwllbHNlCisJCXN0cmxjcHkoZHN0LCBzcmMsIGRzdHNpemUpOworCXJldHVybiBkc3Q7Cit9CisKKy8qIGxpbmVfYWJicmV2bmFtZSgpOiBSZXR1cm4gdGhlIGFiYnJldmlhdGVkICh1c3VhbGx5IGZvdXItY2hhcmFjdGVyKQorICogZm9ybSBvZiB0aGUgbGluZSAoSnVzdCB1c2UgdGhlIGxhc3QgPGRzdHNpemU+IGNoYXJhY3RlcnMgb2YgdGhlCisgKiBmdWxsIG5hbWUuKQorICoKKyAqIE5PVEU6IHVzZSBzdHJuY3B5IGJlY2F1c2Ugd2UgZG8gTk9UIG5lY2Vzc2FyaWx5IHdhbnQgemVybworICogdGVybWluYXRpb24gKi8KK2NoYXIgKgorbGluZV9hYmJyZXZuYW1lKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZHN0c2l6ZSkKK3sKKwlzaXplX3QgbGVuOworCisJbWVtc2V0KGRzdCwgJ1wwJywgZHN0c2l6ZSk7CisKKwkvKiBBbHdheXMgc2tpcCBwcmVmaXggaWYgcHJlc2VudCAqLworCWlmIChzdHJuY21wKHNyYywgIi9kZXYvIiwgNSkgPT0gMCkKKwkJc3JjICs9IDU7CisKKyNpZmRlZiBXSVRIX0FCQlJFVl9OT19UVFkKKwlpZiAoc3RybmNtcChzcmMsICJ0dHkiLCAzKSA9PSAwKQorCQlzcmMgKz0gMzsKKyNlbmRpZgorCisJbGVuID0gc3RybGVuKHNyYyk7CisKKwlpZiAobGVuID4gMCkgeworCQlpZiAoKChpbnQpbGVuIC0gZHN0c2l6ZSkgPiAwKQorCQkJc3JjICs9ICAoKGludClsZW4gLSBkc3RzaXplKTsKKworCQkvKiBub3RlOiBfZG9uJ3RfIGNoYW5nZSB0aGlzIHRvIHN0cmxjcHkgKi8KKwkJc3RybmNweShkc3QsIHNyYywgKHNpemVfdClkc3RzaXplKTsKKwl9CisKKwlyZXR1cm4gZHN0OworfQorCisvKioKKyAqKiB1dG1wIHV0aWxpdHkgZnVuY3Rpb25zCisgKioKKyAqKiBUaGVzZSBmdW5jdGlvbnMgbWFuaXB1bGF0ZSBzdHJ1Y3QgdXRtcCwgdGFraW5nIHN5c3RlbSBkaWZmZXJlbmNlcworICoqIGludG8gYWNjb3VudC4KKyAqKi8KKworI2lmIGRlZmluZWQoVVNFX1VUTVApIHx8IGRlZmluZWQgKFVTRV9XVE1QKSB8fCBkZWZpbmVkIChVU0VfTE9HSU4pCisKKy8qIGJ1aWxkIHRoZSB1dG1wIHN0cnVjdHVyZSAqLwordm9pZAorc2V0X3V0bXBfdGltZShzdHJ1Y3QgbG9naW5pbmZvICpsaSwgc3RydWN0IHV0bXAgKnV0KQoreworIyBpZmRlZiBIQVZFX1NUUlVDVF9VVE1QX1VUX1RWCisJdXQtPnV0X3R2LnR2X3NlYyA9IGxpLT50dl9zZWM7CisJdXQtPnV0X3R2LnR2X3VzZWMgPSBsaS0+dHZfdXNlYzsKKyMgZWxzZQorIyAgaWZkZWYgSEFWRV9TVFJVQ1RfVVRNUF9VVF9USU1FCisJdXQtPnV0X3RpbWUgPSBsaS0+dHZfc2VjOworIyAgZW5kaWYKKyMgZW5kaWYKK30KKwordm9pZAorY29uc3RydWN0X3V0bXAoc3RydWN0IGxvZ2luaW5mbyAqbGksCisJCSAgICBzdHJ1Y3QgdXRtcCAqdXQpCit7CisjIGlmZGVmIEhBVkVfQUREUl9WNl9JTl9VVE1QCisJc3RydWN0IHNvY2thZGRyX2luNiAqc2E2OworIyAgZW5kaWYKKwltZW1zZXQodXQsICdcMCcsIHNpemVvZigqdXQpKTsKKworCS8qIEZpcnN0IGZpbGwgb3V0IGZpZWxkcyB1c2VkIGZvciBib3RoIGxvZ2lucyBhbmQgbG9nb3V0cyAqLworCisjIGlmZGVmIEhBVkVfU1RSVUNUX1VUTVBfVVRfSUQKKwlsaW5lX2FiYnJldm5hbWUodXQtPnV0X2lkLCBsaS0+bGluZSwgc2l6ZW9mKHV0LT51dF9pZCkpOworIyBlbmRpZgorCisjIGlmZGVmIEhBVkVfU1RSVUNUX1VUTVBfVVRfVFlQRQorCS8qIFRoaXMgaXMgZG9uZSBoZXJlIHRvIGtlZXAgdXRtcCBjb25zdGFudHMgb3V0IG9mIHN0cnVjdCBsb2dpbmluZm8gKi8KKwlzd2l0Y2ggKGxpLT50eXBlKSB7CisJY2FzZSBMVFlQRV9MT0dJTjoKKwkJdXQtPnV0X3R5cGUgPSBVU0VSX1BST0NFU1M7CisjaWZkZWYgX1VOSUNPUworCQljcmF5X3NldF90bXBkaXIodXQpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgTFRZUEVfTE9HT1VUOgorCQl1dC0+dXRfdHlwZSA9IERFQURfUFJPQ0VTUzsKKyNpZmRlZiBfVU5JQ09TCisJCWNyYXlfcmV0YWluX3V0bXAodXQsIGxpLT5waWQpOworI2VuZGlmCisJCWJyZWFrOworCX0KKyMgZW5kaWYKKwlzZXRfdXRtcF90aW1lKGxpLCB1dCk7CisKKwlsaW5lX3N0cmlwbmFtZSh1dC0+dXRfbGluZSwgbGktPmxpbmUsIHNpemVvZih1dC0+dXRfbGluZSkpOworCisjIGlmZGVmIEhBVkVfU1RSVUNUX1VUTVBfVVRfUElECisJdXQtPnV0X3BpZCA9IGxpLT5waWQ7CisjIGVuZGlmCisKKwkvKiBJZiB3ZSdyZSBsb2dnaW5nIG91dCwgbGVhdmUgYWxsIG90aGVyIGZpZWxkcyBibGFuayAqLworCWlmIChsaS0+dHlwZSA9PSBMVFlQRV9MT0dPVVQpCisJICByZXR1cm47CisKKwkvKgorCSAqIFRoZXNlIGZpZWxkcyBhcmUgb25seSB1c2VkIHdoZW4gbG9nZ2luZyBpbiwgYW5kIGFyZSBibGFuaworCSAqIGZvciBsb2dvdXRzLgorCSAqLworCisJLyogVXNlIHN0cm5jcHkgYmVjYXVzZSB3ZSBkb24ndCBuZWNlc3NhcmlseSB3YW50IG51bGwgdGVybWluYXRpb24gKi8KKwlzdHJuY3B5KHV0LT51dF9uYW1lLCBsaS0+dXNlcm5hbWUsIE1JTl9TSVpFT0YodXQtPnV0X25hbWUsIGxpLT51c2VybmFtZSkpOworIyBpZmRlZiBIQVZFX1NUUlVDVF9VVE1QX1VUX0hPU1QKKwlzdHJuY3B5KHV0LT51dF9ob3N0LCBsaS0+aG9zdG5hbWUsIE1JTl9TSVpFT0YodXQtPnV0X2hvc3QsIGxpLT5ob3N0bmFtZSkpOworIyBlbmRpZgorIyBpZmRlZiBIQVZFX1NUUlVDVF9VVE1QX1VUX0FERFIKKwkvKiB0aGlzIGlzIGp1c3QgYSAzMi1iaXQgSVAgYWRkcmVzcyAqLworCWlmIChsaS0+aG9zdGFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisJCXV0LT51dF9hZGRyID0gbGktPmhvc3RhZGRyLnNhX2luLnNpbl9hZGRyLnNfYWRkcjsKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9BRERSX1Y2X0lOX1VUTVAKKwkvKiB0aGlzIGlzIGp1c3QgYSAxMjgtYml0IElQdjYgYWRkcmVzcyAqLworCWlmIChsaS0+aG9zdGFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCXNhNiA9ICgoc3RydWN0IHNvY2thZGRyX2luNiAqKSZsaS0+aG9zdGFkZHIuc2EpOworCQltZW1jcHkodXQtPnV0X2FkZHJfdjYsIHNhNi0+c2luNl9hZGRyLnM2X2FkZHIsIDE2KTsKKwkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzYTYtPnNpbjZfYWRkcikpIHsKKwkJCXV0LT51dF9hZGRyX3Y2WzBdID0gdXQtPnV0X2FkZHJfdjZbM107CisJCQl1dC0+dXRfYWRkcl92NlsxXSA9IDA7CisJCQl1dC0+dXRfYWRkcl92NlsyXSA9IDA7CisJCQl1dC0+dXRfYWRkcl92NlszXSA9IDA7CisJCX0KKwl9CisjIGVuZGlmCit9CisjZW5kaWYgLyogVVNFX1VUTVAgfHwgVVNFX1dUTVAgfHwgVVNFX0xPR0lOICovCisKKy8qKgorICoqIHV0bXB4IHV0aWxpdHkgZnVuY3Rpb25zCisgKioKKyAqKiBUaGVzZSBmdW5jdGlvbnMgbWFuaXB1bGF0ZSBzdHJ1Y3QgdXRtcHgsIGFjY291bnRpbmcgZm9yIHN5c3RlbQorICoqIHZhcmlhdGlvbnMuCisgKiovCisKKyNpZiBkZWZpbmVkKFVTRV9VVE1QWCkgfHwgZGVmaW5lZCAoVVNFX1dUTVBYKQorLyogYnVpbGQgdGhlIHV0bXB4IHN0cnVjdHVyZSAqLwordm9pZAorc2V0X3V0bXB4X3RpbWUoc3RydWN0IGxvZ2luaW5mbyAqbGksIHN0cnVjdCB1dG1weCAqdXR4KQoreworIyBpZmRlZiBIQVZFX1NUUlVDVF9VVE1QWF9VVF9UVgorCXV0eC0+dXRfdHYudHZfc2VjID0gbGktPnR2X3NlYzsKKwl1dHgtPnV0X3R2LnR2X3VzZWMgPSBsaS0+dHZfdXNlYzsKKyMgZWxzZSAvKiBIQVZFX1NUUlVDVF9VVE1QWF9VVF9UViAqLworIyAgaWZkZWYgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfVElNRQorCXV0eC0+dXRfdGltZSA9IGxpLT50dl9zZWM7CisjICBlbmRpZiAvKiBIQVZFX1NUUlVDVF9VVE1QWF9VVF9USU1FICovCisjIGVuZGlmIC8qIEhBVkVfU1RSVUNUX1VUTVBYX1VUX1RWICovCit9CisKK3ZvaWQKK2NvbnN0cnVjdF91dG1weChzdHJ1Y3QgbG9naW5pbmZvICpsaSwgc3RydWN0IHV0bXB4ICp1dHgpCit7CisjIGlmZGVmIEhBVkVfQUREUl9WNl9JTl9VVE1QCisJc3RydWN0IHNvY2thZGRyX2luNiAqc2E2OworIyAgZW5kaWYKKwltZW1zZXQodXR4LCAnXDAnLCBzaXplb2YoKnV0eCkpOworIyBpZmRlZiBIQVZFX1NUUlVDVF9VVE1QWF9VVF9JRAorCWxpbmVfYWJicmV2bmFtZSh1dHgtPnV0X2lkLCBsaS0+bGluZSwgc2l6ZW9mKHV0eC0+dXRfaWQpKTsKKyMgZW5kaWYKKworCS8qIHRoaXMgaXMgZG9uZSBoZXJlIHRvIGtlZXAgdXRtcCBjb25zdGFudHMgb3V0IG9mIGxvZ2lucmVjLmggKi8KKwlzd2l0Y2ggKGxpLT50eXBlKSB7CisJY2FzZSBMVFlQRV9MT0dJTjoKKwkJdXR4LT51dF90eXBlID0gVVNFUl9QUk9DRVNTOworCQlicmVhazsKKwljYXNlIExUWVBFX0xPR09VVDoKKwkJdXR4LT51dF90eXBlID0gREVBRF9QUk9DRVNTOworCQlicmVhazsKKwl9CisJbGluZV9zdHJpcG5hbWUodXR4LT51dF9saW5lLCBsaS0+bGluZSwgc2l6ZW9mKHV0eC0+dXRfbGluZSkpOworCXNldF91dG1weF90aW1lKGxpLCB1dHgpOworCXV0eC0+dXRfcGlkID0gbGktPnBpZDsKKwkvKiBzdHJuY3B5KCk6IERvbid0IG5lY2Vzc2FyaWx5IHdhbnQgbnVsbCB0ZXJtaW5hdGlvbiAqLworCXN0cm5jcHkodXR4LT51dF9uYW1lLCBsaS0+dXNlcm5hbWUsIE1JTl9TSVpFT0YodXR4LT51dF9uYW1lLCBsaS0+dXNlcm5hbWUpKTsKKworCWlmIChsaS0+dHlwZSA9PSBMVFlQRV9MT0dPVVQpCisJCXJldHVybjsKKworCS8qCisJICogVGhlc2UgZmllbGRzIGFyZSBvbmx5IHVzZWQgd2hlbiBsb2dnaW5nIGluLCBhbmQgYXJlIGJsYW5rCisJICogZm9yIGxvZ291dHMuCisJICovCisKKyMgaWZkZWYgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfSE9TVAorCXN0cm5jcHkodXR4LT51dF9ob3N0LCBsaS0+aG9zdG5hbWUsIE1JTl9TSVpFT0YodXR4LT51dF9ob3N0LCBsaS0+aG9zdG5hbWUpKTsKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfQUREUgorCS8qIHRoaXMgaXMganVzdCBhIDMyLWJpdCBJUCBhZGRyZXNzICovCisJaWYgKGxpLT5ob3N0YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKwkJdXR4LT51dF9hZGRyID0gbGktPmhvc3RhZGRyLnNhX2luLnNpbl9hZGRyLnNfYWRkcjsKKyMgZW5kaWYKKyMgaWZkZWYgSEFWRV9BRERSX1Y2X0lOX1VUTVAKKwkvKiB0aGlzIGlzIGp1c3QgYSAxMjgtYml0IElQdjYgYWRkcmVzcyAqLworCWlmIChsaS0+aG9zdGFkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCXNhNiA9ICgoc3RydWN0IHNvY2thZGRyX2luNiAqKSZsaS0+aG9zdGFkZHIuc2EpOworCQltZW1jcHkodXQtPnV0X2FkZHJfdjYsIHNhNi0+c2luNl9hZGRyLnM2X2FkZHIsIDE2KTsKKwkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzYTYtPnNpbjZfYWRkcikpIHsKKwkJCXV0LT51dF9hZGRyX3Y2WzBdID0gdXQtPnV0X2FkZHJfdjZbM107CisJCQl1dC0+dXRfYWRkcl92NlsxXSA9IDA7CisJCQl1dC0+dXRfYWRkcl92NlsyXSA9IDA7CisJCQl1dC0+dXRfYWRkcl92NlszXSA9IDA7CisJCX0KKwl9CisjIGVuZGlmCisjIGlmZGVmIEhBVkVfU1RSVUNUX1VUTVBYX1VUX1NZU0xFTgorCS8qIHV0X3N5c2xlbiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSB1dHhfaG9zdCBzdHJpbmcgKi8KKwl1dHgtPnV0X3N5c2xlbiA9IE1JTihzdHJsZW4obGktPmhvc3RuYW1lKSwgc2l6ZW9mKHV0eC0+dXRfaG9zdCkpOworIyBlbmRpZgorfQorI2VuZGlmIC8qIFVTRV9VVE1QWCB8fCBVU0VfV1RNUFggKi8KKworLyoqCisgKiogTG93LWxldmVsIHV0bXAgZnVuY3Rpb25zCisgKiovCisKKy8qIEZJWE1FOiAoQVRMKSB1dG1wX3dyaXRlX2RpcmVjdCBuZWVkcyB0ZXN0aW5nICovCisjaWZkZWYgVVNFX1VUTVAKKworLyogaWYgd2UgY2FuLCB1c2UgcHV0dXRsaW5lKCkgZXRjLiAqLworIyBpZiAhZGVmaW5lZChESVNBQkxFX1BVVFVUTElORSkgJiYgZGVmaW5lZChIQVZFX1NFVFVURU5UKSAmJiBcCisJZGVmaW5lZChIQVZFX1BVVFVUTElORSkKKyMgIGRlZmluZSBVVE1QX1VTRV9MSUJSQVJZCisjIGVuZGlmCisKKworLyogd3JpdGUgYSB1dG1wIGVudHJ5IHdpdGggdGhlIHN5c3RlbSdzIGhlbHAgKHB1dHV0bGluZSgpIGFuZCBwYWxzKSAqLworIyBpZmRlZiBVVE1QX1VTRV9MSUJSQVJZCitzdGF0aWMgaW50Cit1dG1wX3dyaXRlX2xpYnJhcnkoc3RydWN0IGxvZ2luaW5mbyAqbGksIHN0cnVjdCB1dG1wICp1dCkKK3sKKwlzZXR1dGVudCgpOworCXB1dHV0bGluZSh1dCk7CisKKyMgIGlmZGVmIEhBVkVfRU5EVVRFTlQKKwllbmR1dGVudCgpOworIyAgZW5kaWYKKwlyZXR1cm4gMTsKK30KKyMgZWxzZSAvKiBVVE1QX1VTRV9MSUJSQVJZICovCisKKy8qIHdyaXRlIGEgdXRtcCBlbnRyeSBkaXJlY3QgdG8gdGhlIGZpbGUgKi8KKy8qIFRoaXMgaXMgYSBzbGlnaHRseSBtb2RpZmljYXRpb24gb2YgY29kZSBpbiBPcGVuQlNEJ3MgbG9naW4uYyAqLworc3RhdGljIGludAordXRtcF93cml0ZV9kaXJlY3Qoc3RydWN0IGxvZ2luaW5mbyAqbGksIHN0cnVjdCB1dG1wICp1dCkKK3sKKwlzdHJ1Y3QgdXRtcCBvbGRfdXQ7CisJcmVnaXN0ZXIgaW50IGZkOworCWludCB0dHk7CisKKwkvKiBGSVhNRTogKEFUTCkgdHR5c2xvdCgpIG5lZWRzIGxvY2FsIGltcGxlbWVudGF0aW9uICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUVFRZRU5UKQorCXJlZ2lzdGVyIHN0cnVjdCB0dHllbnQgKnR5OworCisJdHR5PTA7CisKKwlzZXR0dHllbnQoKTsKKwl3aGlsZSAoKHN0cnVjdCB0dHllbnQgKikwICE9ICh0eSA9IGdldHR0eWVudCgpKSkgeworCQl0dHkrKzsKKwkJaWYgKCFzdHJuY21wKHR5LT50eV9uYW1lLCB1dC0+dXRfbGluZSwgc2l6ZW9mKHV0LT51dF9saW5lKSkpCisJCQlicmVhazsKKwl9CisJZW5kdHR5ZW50KCk7CisKKwlpZigoc3RydWN0IHR0eWVudCAqKTAgPT0gdHkpIHsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAidXRtcF93cml0ZV9lbnRyeTogdHR5IG5vdCBmb3VuZCIpOworCQlyZXR1cm4oMSk7CisJfQorI2Vsc2UgLyogRklYTUUgKi8KKworCXR0eSA9IHR0eXNsb3QoKTsgLyogc2VlbXMgb25seSB0byB3b3JrIGZvciAvZGV2L3R0eXA/IHN0eWxlIG5hbWVzICovCisKKyNlbmRpZiAvKiBIQVZFX0dFVFRUWUVOVCAqLworCisJaWYgKHR0eSA+IDAgJiYgKGZkID0gb3BlbihVVE1QX0ZJTEUsIE9fUkRXUnxPX0NSRUFULCAwNjQ0KSkgPj0gMCkgeworCQkodm9pZClsc2VlayhmZCwgKG9mZl90KSh0dHkgKiBzaXplb2Yoc3RydWN0IHV0bXApKSwgU0VFS19TRVQpOworCQkvKgorCQkgKiBQcmV2ZW50IGx1c2VyIGZyb20gemVybydpbmcgb3V0IHV0X2hvc3QuCisJCSAqIElmIHRoZSBuZXcgdXRfbGluZSBpcyBlbXB0eSBidXQgdGhlIG9sZCBvbmUgaXMgbm90CisJCSAqIGFuZCB1dF9saW5lIGFuZCB1dF9uYW1lIG1hdGNoLCBwcmVzZXJ2ZSB0aGUgb2xkIHV0X2xpbmUuCisJCSAqLworCQlpZiAoYXRvbWljaW8ocmVhZCwgZmQsICZvbGRfdXQsIHNpemVvZihvbGRfdXQpKSA9PSBzaXplb2Yob2xkX3V0KSAmJgorCQkJKHV0LT51dF9ob3N0WzBdID09ICdcMCcpICYmIChvbGRfdXQudXRfaG9zdFswXSAhPSAnXDAnKSAmJgorCQkJKHN0cm5jbXAob2xkX3V0LnV0X2xpbmUsIHV0LT51dF9saW5lLCBzaXplb2YodXQtPnV0X2xpbmUpKSA9PSAwKSAmJgorCQkJKHN0cm5jbXAob2xkX3V0LnV0X25hbWUsIHV0LT51dF9uYW1lLCBzaXplb2YodXQtPnV0X25hbWUpKSA9PSAwKSkgeworCQkJKHZvaWQpbWVtY3B5KHV0LT51dF9ob3N0LCBvbGRfdXQudXRfaG9zdCwgc2l6ZW9mKHV0LT51dF9ob3N0KSk7CisJCX0KKworCQkodm9pZClsc2VlayhmZCwgKG9mZl90KSh0dHkgKiBzaXplb2Yoc3RydWN0IHV0bXApKSwgU0VFS19TRVQpOworCQlpZiAoYXRvbWljaW8od3JpdGUsIGZkLCB1dCwgc2l6ZW9mKCp1dCkpICE9IHNpemVvZigqdXQpKQorCQkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAidXRtcF93cml0ZV9kaXJlY3Q6IGVycm9yIHdyaXRpbmcgJXM6ICVzIiwKKwkJCSAgICBVVE1QX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CisKKwkJKHZvaWQpY2xvc2UoZmQpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlyZXR1cm4gMDsKKwl9Cit9CisjIGVuZGlmIC8qIFVUTVBfVVNFX0xJQlJBUlkgKi8KKworc3RhdGljIGludAordXRtcF9wZXJmb3JtX2xvZ2luKHN0cnVjdCBsb2dpbmluZm8gKmxpKQoreworCXN0cnVjdCB1dG1wIHV0OworCisJY29uc3RydWN0X3V0bXAobGksICZ1dCk7CisjIGlmZGVmIFVUTVBfVVNFX0xJQlJBUlkKKwlpZiAoIXV0bXBfd3JpdGVfbGlicmFyeShsaSwgJnV0KSkgeworCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJ1dG1wX3BlcmZvcm1fbG9naW46IHV0bXBfd3JpdGVfbGlicmFyeSgpIGZhaWxlZCIpOworCQlyZXR1cm4gMDsKKwl9CisjIGVsc2UKKwlpZiAoIXV0bXBfd3JpdGVfZGlyZWN0KGxpLCAmdXQpKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInV0bXBfcGVyZm9ybV9sb2dpbjogdXRtcF93cml0ZV9kaXJlY3QoKSBmYWlsZWQiKTsKKwkJcmV0dXJuIDA7CisJfQorIyBlbmRpZgorCXJldHVybiAxOworfQorCisKK3N0YXRpYyBpbnQKK3V0bXBfcGVyZm9ybV9sb2dvdXQoc3RydWN0IGxvZ2luaW5mbyAqbGkpCit7CisJc3RydWN0IHV0bXAgdXQ7CisKKwljb25zdHJ1Y3RfdXRtcChsaSwgJnV0KTsKKyMgaWZkZWYgVVRNUF9VU0VfTElCUkFSWQorCWlmICghdXRtcF93cml0ZV9saWJyYXJ5KGxpLCAmdXQpKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInV0bXBfcGVyZm9ybV9sb2dvdXQ6IHV0bXBfd3JpdGVfbGlicmFyeSgpIGZhaWxlZCIpOworCQlyZXR1cm4gMDsKKwl9CisjIGVsc2UKKwlpZiAoIXV0bXBfd3JpdGVfZGlyZWN0KGxpLCAmdXQpKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInV0bXBfcGVyZm9ybV9sb2dvdXQ6IHV0bXBfd3JpdGVfZGlyZWN0KCkgZmFpbGVkIik7CisJCXJldHVybiAwOworCX0KKyMgZW5kaWYKKwlyZXR1cm4gMTsKK30KKworCitpbnQKK3V0bXBfd3JpdGVfZW50cnkoc3RydWN0IGxvZ2luaW5mbyAqbGkpCit7CisJc3dpdGNoKGxpLT50eXBlKSB7CisJY2FzZSBMVFlQRV9MT0dJTjoKKwkJcmV0dXJuIHV0bXBfcGVyZm9ybV9sb2dpbihsaSk7CisKKwljYXNlIExUWVBFX0xPR09VVDoKKwkJcmV0dXJuIHV0bXBfcGVyZm9ybV9sb2dvdXQobGkpOworCisJZGVmYXVsdDoKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAidXRtcF93cml0ZV9lbnRyeTogaW52YWxpZCB0eXBlIGZpZWxkIik7CisJCXJldHVybiAwOworCX0KK30KKyNlbmRpZiAvKiBVU0VfVVRNUCAqLworCisKKy8qKgorICoqIExvdy1sZXZlbCB1dG1weCBmdW5jdGlvbnMKKyAqKi8KKworLyogbm90IG11Y2ggcG9pbnQgaWYgd2UgZG9uJ3Qgd2FudCB1dG1weCBlbnRyaWVzICovCisjaWZkZWYgVVNFX1VUTVBYCisKKy8qIGlmIHdlIGhhdmUgdGhlIHdoZXJld2l0aGFsbCwgdXNlIHB1dHV0eGxpbmUgZXRjLiAqLworIyBpZiAhZGVmaW5lZChESVNBQkxFX1BVVFVUWExJTkUpICYmIGRlZmluZWQoSEFWRV9TRVRVVFhFTlQpICYmIFwKKwlkZWZpbmVkKEhBVkVfUFVUVVRYTElORSkKKyMgIGRlZmluZSBVVE1QWF9VU0VfTElCUkFSWQorIyBlbmRpZgorCisKKy8qIHdyaXRlIGEgdXRtcHggZW50cnkgd2l0aCB0aGUgc3lzdGVtJ3MgaGVscCAocHV0dXR4bGluZSgpIGFuZCBwYWxzKSAqLworIyBpZmRlZiBVVE1QWF9VU0VfTElCUkFSWQorc3RhdGljIGludAordXRtcHhfd3JpdGVfbGlicmFyeShzdHJ1Y3QgbG9naW5pbmZvICpsaSwgc3RydWN0IHV0bXB4ICp1dHgpCit7CisJc2V0dXR4ZW50KCk7CisJcHV0dXR4bGluZSh1dHgpOworCisjICBpZmRlZiBIQVZFX0VORFVUWEVOVAorCWVuZHV0eGVudCgpOworIyAgZW5kaWYKKwlyZXR1cm4gMTsKK30KKworIyBlbHNlIC8qIFVUTVBYX1VTRV9MSUJSQVJZICovCisKKy8qIHdyaXRlIGEgdXRtcCBlbnRyeSBkaXJlY3QgdG8gdGhlIGZpbGUgKi8KK3N0YXRpYyBpbnQKK3V0bXB4X3dyaXRlX2RpcmVjdChzdHJ1Y3QgbG9naW5pbmZvICpsaSwgc3RydWN0IHV0bXB4ICp1dHgpCit7CisJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAidXRtcHhfd3JpdGVfZGlyZWN0OiBub3QgaW1wbGVtZW50ZWQhIik7CisJcmV0dXJuIDA7Cit9CisjIGVuZGlmIC8qIFVUTVBYX1VTRV9MSUJSQVJZICovCisKK3N0YXRpYyBpbnQKK3V0bXB4X3BlcmZvcm1fbG9naW4oc3RydWN0IGxvZ2luaW5mbyAqbGkpCit7CisJc3RydWN0IHV0bXB4IHV0eDsKKworCWNvbnN0cnVjdF91dG1weChsaSwgJnV0eCk7CisjIGlmZGVmIFVUTVBYX1VTRV9MSUJSQVJZCisJaWYgKCF1dG1weF93cml0ZV9saWJyYXJ5KGxpLCAmdXR4KSkgeworCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJ1dG1weF9wZXJmb3JtX2xvZ2luOiB1dG1wX3dyaXRlX2xpYnJhcnkoKSBmYWlsZWQiKTsKKwkJcmV0dXJuIDA7CisJfQorIyBlbHNlCisJaWYgKCF1dG1weF93cml0ZV9kaXJlY3QobGksICZ1dCkpIHsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAidXRtcHhfcGVyZm9ybV9sb2dpbjogdXRtcF93cml0ZV9kaXJlY3QoKSBmYWlsZWQiKTsKKwkJcmV0dXJuIDA7CisJfQorIyBlbmRpZgorCXJldHVybiAxOworfQorCisKK3N0YXRpYyBpbnQKK3V0bXB4X3BlcmZvcm1fbG9nb3V0KHN0cnVjdCBsb2dpbmluZm8gKmxpKQoreworCXN0cnVjdCB1dG1weCB1dHg7CisKKwljb25zdHJ1Y3RfdXRtcHgobGksICZ1dHgpOworIyBpZmRlZiBIQVZFX1NUUlVDVF9VVE1QWF9VVF9JRAorCWxpbmVfYWJicmV2bmFtZSh1dHgudXRfaWQsIGxpLT5saW5lLCBzaXplb2YodXR4LnV0X2lkKSk7CisjIGVuZGlmCisjIGlmZGVmIEhBVkVfU1RSVUNUX1VUTVBYX1VUX1RZUEUKKwl1dHgudXRfdHlwZSA9IERFQURfUFJPQ0VTUzsKKyMgZW5kaWYKKworIyBpZmRlZiBVVE1QWF9VU0VfTElCUkFSWQorCXV0bXB4X3dyaXRlX2xpYnJhcnkobGksICZ1dHgpOworIyBlbHNlCisJdXRtcHhfd3JpdGVfZGlyZWN0KGxpLCAmdXR4KTsKKyMgZW5kaWYKKwlyZXR1cm4gMTsKK30KKworaW50Cit1dG1weF93cml0ZV9lbnRyeShzdHJ1Y3QgbG9naW5pbmZvICpsaSkKK3sKKwlzd2l0Y2gobGktPnR5cGUpIHsKKwljYXNlIExUWVBFX0xPR0lOOgorCQlyZXR1cm4gdXRtcHhfcGVyZm9ybV9sb2dpbihsaSk7CisJY2FzZSBMVFlQRV9MT0dPVVQ6CisJCXJldHVybiB1dG1weF9wZXJmb3JtX2xvZ291dChsaSk7CisJZGVmYXVsdDoKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAidXRtcHhfd3JpdGVfZW50cnk6IGludmFsaWQgdHlwZSBmaWVsZCIpOworCQlyZXR1cm4gMDsKKwl9Cit9CisjZW5kaWYgLyogVVNFX1VUTVBYICovCisKKworLyoqCisgKiogTG93LWxldmVsIHd0bXAgZnVuY3Rpb25zCisgKiovCisKKyNpZmRlZiBVU0VfV1RNUAorCisvKiB3cml0ZSBhIHd0bXAgZW50cnkgZGlyZWN0IHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUgKi8KKy8qIFRoaXMgaXMgYSBzbGlnaHQgbW9kaWZpY2F0aW9uIG9mIGNvZGUgaW4gT3BlbkJTRCdzIGxvZ3d0bXAuYyAqLworc3RhdGljIGludAord3RtcF93cml0ZShzdHJ1Y3QgbG9naW5pbmZvICpsaSwgc3RydWN0IHV0bXAgKnV0KQoreworCXN0cnVjdCBzdGF0IGJ1ZjsKKwlpbnQgZmQsIHJldCA9IDE7CisKKwlpZiAoKGZkID0gb3BlbihXVE1QX0ZJTEUsIE9fV1JPTkxZfE9fQVBQRU5ELCAwKSkgPCAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInd0bXBfd3JpdGU6IHByb2JsZW0gd3JpdGluZyAlczogJXMiLAorCQkgICAgV1RNUF9GSUxFLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGZzdGF0KGZkLCAmYnVmKSA9PSAwKQorCQlpZiAoYXRvbWljaW8od3JpdGUsIGZkLCB1dCwgc2l6ZW9mKCp1dCkpICE9IHNpemVvZigqdXQpKSB7CisJCQlmdHJ1bmNhdGUoZmQsIGJ1Zi5zdF9zaXplKTsKKwkJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInd0bXBfd3JpdGU6IHByb2JsZW0gd3JpdGluZyAlczogJXMiLAorCQkJICAgIFdUTVBfRklMRSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldCA9IDA7CisJCX0KKwkodm9pZCljbG9zZShmZCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludAord3RtcF9wZXJmb3JtX2xvZ2luKHN0cnVjdCBsb2dpbmluZm8gKmxpKQoreworCXN0cnVjdCB1dG1wIHV0OworCisJY29uc3RydWN0X3V0bXAobGksICZ1dCk7CisJcmV0dXJuIHd0bXBfd3JpdGUobGksICZ1dCk7Cit9CisKKworc3RhdGljIGludAord3RtcF9wZXJmb3JtX2xvZ291dChzdHJ1Y3QgbG9naW5pbmZvICpsaSkKK3sKKwlzdHJ1Y3QgdXRtcCB1dDsKKworCWNvbnN0cnVjdF91dG1wKGxpLCAmdXQpOworCXJldHVybiB3dG1wX3dyaXRlKGxpLCAmdXQpOworfQorCisKK2ludAord3RtcF93cml0ZV9lbnRyeShzdHJ1Y3QgbG9naW5pbmZvICpsaSkKK3sKKwlzd2l0Y2gobGktPnR5cGUpIHsKKwljYXNlIExUWVBFX0xPR0lOOgorCQlyZXR1cm4gd3RtcF9wZXJmb3JtX2xvZ2luKGxpKTsKKwljYXNlIExUWVBFX0xPR09VVDoKKwkJcmV0dXJuIHd0bXBfcGVyZm9ybV9sb2dvdXQobGkpOworCWRlZmF1bHQ6CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInd0bXBfd3JpdGVfZW50cnk6IGludmFsaWQgdHlwZSBmaWVsZCIpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKKworLyogTm90ZXMgb24gZmV0Y2hpbmcgbG9naW4gZGF0YSBmcm9tIHd0bXAvd3RtcHgKKyAqCisgKiBMb2dvdXRzIGFyZSB1c3VhbGx5IHJlY29yZGVkIHdpdGggKGFtb25nc3Qgb3RoZXIgdGhpbmdzKSBhIGJsYW5rCisgKiB1c2VybmFtZSBvbiBhIGdpdmVuIHR0eSBsaW5lLiAgSG93ZXZlciwgc29tZSBzeXN0ZW1zIChIUC1VWCBpcyBvbmUpCisgKiBsZWF2ZSBhbGwgZmllbGRzIHNldCwgYnV0IGNoYW5nZSB0aGUgdXRfdHlwZSBmaWVsZCB0byBERUFEX1BST0NFU1MuCisgKgorICogU2luY2Ugd2UncmUgb25seSBsb29raW5nIGZvciBsb2dpbnMgaGVyZSwgd2Uga25vdyB0aGF0IHRoZSB1c2VybmFtZQorICogbXVzdCBiZSBzZXQgY29ycmVjdGx5LiBPbiBzeXN0ZW1zIHRoYXQgbGVhdmUgaXQgaW4sIHdlIGNoZWNrIGZvcgorICogdXRfdHlwZT09VVNFUl9QUk9DRVNTIChpbmRpY2F0aW5nIGEgbG9naW4uKQorICoKKyAqIFBvcnRhYmlsaXR5OiBTb21lIHN5c3RlbXMgbWF5IHNldCBzb21ldGhpbmcgb3RoZXIgdGhhbiBVU0VSX1BST0NFU1MKKyAqIHRvIGluZGljYXRlIGEgbG9naW4gcHJvY2Vzcy4gSSBkb24ndCBrbm93IG9mIGFueSBhcyBJIHdyaXRlLiBBbHNvLAorICogaXQncyBwb3NzaWJsZSB0aGF0IHNvbWUgc3lzdGVtcyBtYXkgYm90aCBsZWF2ZSB0aGUgdXNlcm5hbWUgaW4KKyAqIHBsYWNlIGFuZCBub3QgaGF2ZSB1dF90eXBlLgorICovCisKKy8qIHJldHVybiB0cnVlIGlmIHRoaXMgd3RtcCBlbnRyeSBpbmRpY2F0ZXMgYSBsb2dpbiAqLworc3RhdGljIGludAord3RtcF9pc2xvZ2luKHN0cnVjdCBsb2dpbmluZm8gKmxpLCBzdHJ1Y3QgdXRtcCAqdXQpCit7CisJaWYgKHN0cm5jbXAobGktPnVzZXJuYW1lLCB1dC0+dXRfbmFtZSwKKwkJTUlOX1NJWkVPRihsaS0+dXNlcm5hbWUsIHV0LT51dF9uYW1lKSkgPT0gMCkgeworIyBpZmRlZiBIQVZFX1NUUlVDVF9VVE1QX1VUX1RZUEUKKwkJaWYgKHV0LT51dF90eXBlICYgVVNFUl9QUk9DRVNTKQorCQkJcmV0dXJuIDE7CisjIGVsc2UKKwkJcmV0dXJuIDE7CisjIGVuZGlmCisJfQorCXJldHVybiAwOworfQorCitpbnQKK3d0bXBfZ2V0X2VudHJ5KHN0cnVjdCBsb2dpbmluZm8gKmxpKQoreworCXN0cnVjdCBzdGF0IHN0OworCXN0cnVjdCB1dG1wIHV0OworCWludCBmZCwgZm91bmQ9MDsKKworCS8qIENsZWFyIHRoZSB0aW1lIGVudHJpZXMgaW4gb3VyIGxvZ2luaW5mbyAqLworCWxpLT50dl9zZWMgPSBsaS0+dHZfdXNlYyA9IDA7CisKKwlpZiAoKGZkID0gb3BlbihXVE1QX0ZJTEUsIE9fUkRPTkxZKSkgPCAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInd0bXBfZ2V0X2VudHJ5OiBwcm9ibGVtIG9wZW5pbmcgJXM6ICVzIiwKKwkJICAgIFdUTVBfRklMRSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChmc3RhdChmZCwgJnN0KSAhPSAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInd0bXBfZ2V0X2VudHJ5OiBjb3VsZG4ndCBzdGF0ICVzOiAlcyIsCisJCSAgICBXVE1QX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogU2VlayB0byB0aGUgc3RhcnQgb2YgdGhlIGxhc3Qgc3RydWN0IHV0bXAgKi8KKwlpZiAobHNlZWsoZmQsIC0ob2ZmX3Qpc2l6ZW9mKHN0cnVjdCB1dG1wKSwgU0VFS19FTkQpID09IC0xKSB7CisJCS8qIExvb2tzIGxpa2Ugd2UndmUgZ290IGEgZnJlc2ggd3RtcCBmaWxlICovCisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJd2hpbGUgKCFmb3VuZCkgeworCQlpZiAoYXRvbWljaW8ocmVhZCwgZmQsICZ1dCwgc2l6ZW9mKHV0KSkgIT0gc2l6ZW9mKHV0KSkgeworCQkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAid3RtcF9nZXRfZW50cnk6IHJlYWQgb2YgJXMgZmFpbGVkOiAlcyIsCisJCQkgICAgV1RNUF9GSUxFLCBzdHJlcnJvcihlcnJubykpOworCQkJY2xvc2UgKGZkKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmICggd3RtcF9pc2xvZ2luKGxpLCAmdXQpICkgeworCQkJZm91bmQgPSAxOworCQkJLyogV2UndmUgYWxyZWFkeSBjaGVja2VkIGZvciBhIHRpbWUgaW4gc3RydWN0CisJCQkgKiB1dG1wLCBpbiBsb2dpbl9nZXRsYXN0KCkuICovCisjIGlmZGVmIEhBVkVfU1RSVUNUX1VUTVBfVVRfVElNRQorCQkJbGktPnR2X3NlYyA9IHV0LnV0X3RpbWU7CisjIGVsc2UKKyMgIGlmIEhBVkVfU1RSVUNUX1VUTVBfVVRfVFYKKwkJCWxpLT50dl9zZWMgPSB1dC51dF90di50dl9zZWM7CisjICBlbmRpZgorIyBlbmRpZgorCQkJbGluZV9mdWxsbmFtZShsaS0+bGluZSwgdXQudXRfbGluZSwKKwkJCQkgICAgICBNSU5fU0laRU9GKGxpLT5saW5lLCB1dC51dF9saW5lKSk7CisjIGlmZGVmIEhBVkVfU1RSVUNUX1VUTVBfVVRfSE9TVAorCQkJc3RybGNweShsaS0+aG9zdG5hbWUsIHV0LnV0X2hvc3QsCisJCQkJTUlOX1NJWkVPRihsaS0+aG9zdG5hbWUsIHV0LnV0X2hvc3QpKTsKKyMgZW5kaWYKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIFNlZWsgYmFjayAyIHggc3RydWN0IHV0bXAgKi8KKwkJaWYgKGxzZWVrKGZkLCAtKG9mZl90KSgyICogc2l6ZW9mKHN0cnVjdCB1dG1wKSksIFNFRUtfQ1VSKSA9PSAtMSkgeworCQkJLyogV2UndmUgZm91bmQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLCBzbyBxdWl0ICovCisJCQljbG9zZSAoZmQpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwkvKiBXZSBmb3VuZCBhbiBlbnRyeS4gVGlkeSB1cCBhbmQgcmV0dXJuICovCisJY2xvc2UoZmQpOworCXJldHVybiAxOworfQorIyBlbmRpZiAvKiBVU0VfV1RNUCAqLworCisKKy8qKgorICoqIExvdy1sZXZlbCB3dG1weCBmdW5jdGlvbnMKKyAqKi8KKworI2lmZGVmIFVTRV9XVE1QWAorLyogd3JpdGUgYSB3dG1weCBlbnRyeSBkaXJlY3QgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSAqLworLyogVGhpcyBpcyBhIHNsaWdodCBtb2RpZmljYXRpb24gb2YgY29kZSBpbiBPcGVuQlNEJ3MgbG9nd3RtcC5jICovCitzdGF0aWMgaW50Cit3dG1weF93cml0ZShzdHJ1Y3QgbG9naW5pbmZvICpsaSwgc3RydWN0IHV0bXB4ICp1dHgpCit7CisJc3RydWN0IHN0YXQgYnVmOworCWludCBmZCwgcmV0ID0gMTsKKworCWlmICgoZmQgPSBvcGVuKFdUTVBYX0ZJTEUsIE9fV1JPTkxZfE9fQVBQRU5ELCAwKSkgPCAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInd0bXB4X3dyaXRlOiBwcm9ibGVtIG9wZW5pbmcgJXM6ICVzIiwKKwkJICAgIFdUTVBYX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAwOworCX0KKworCWlmIChmc3RhdChmZCwgJmJ1ZikgPT0gMCkKKwkJaWYgKGF0b21pY2lvKHdyaXRlLCBmZCwgdXR4LCBzaXplb2YoKnV0eCkpICE9IHNpemVvZigqdXR4KSkgeworCQkJZnRydW5jYXRlKGZkLCBidWYuc3Rfc2l6ZSk7CisJCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJ3dG1weF93cml0ZTogcHJvYmxlbSB3cml0aW5nICVzOiAlcyIsCisJCQkgICAgV1RNUFhfRklMRSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCXJldCA9IDA7CisJCX0KKwkodm9pZCljbG9zZShmZCk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQKK3d0bXB4X3BlcmZvcm1fbG9naW4oc3RydWN0IGxvZ2luaW5mbyAqbGkpCit7CisJc3RydWN0IHV0bXB4IHV0eDsKKworCWNvbnN0cnVjdF91dG1weChsaSwgJnV0eCk7CisJcmV0dXJuIHd0bXB4X3dyaXRlKGxpLCAmdXR4KTsKK30KKworCitzdGF0aWMgaW50Cit3dG1weF9wZXJmb3JtX2xvZ291dChzdHJ1Y3QgbG9naW5pbmZvICpsaSkKK3sKKwlzdHJ1Y3QgdXRtcHggdXR4OworCisJY29uc3RydWN0X3V0bXB4KGxpLCAmdXR4KTsKKwlyZXR1cm4gd3RtcHhfd3JpdGUobGksICZ1dHgpOworfQorCisKK2ludAord3RtcHhfd3JpdGVfZW50cnkoc3RydWN0IGxvZ2luaW5mbyAqbGkpCit7CisJc3dpdGNoKGxpLT50eXBlKSB7CisJY2FzZSBMVFlQRV9MT0dJTjoKKwkJcmV0dXJuIHd0bXB4X3BlcmZvcm1fbG9naW4obGkpOworCWNhc2UgTFRZUEVfTE9HT1VUOgorCQlyZXR1cm4gd3RtcHhfcGVyZm9ybV9sb2dvdXQobGkpOworCWRlZmF1bHQ6CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInd0bXB4X3dyaXRlX2VudHJ5OiBpbnZhbGlkIHR5cGUgZmllbGQiKTsKKwkJcmV0dXJuIDA7CisJfQorfQorCisvKiBQbGVhc2Ugc2VlIHRoZSBub3RlcyBhYm92ZSB3dG1wX2lzbG9naW4oKSBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlCisgICBuZXh0IHR3byBmdW5jdGlvbnMgKi8KKworLyogUmV0dXJuIHRydWUgaWYgdGhpcyB3dG1weCBlbnRyeSBpbmRpY2F0ZXMgYSBsb2dpbiAqLworc3RhdGljIGludAord3RtcHhfaXNsb2dpbihzdHJ1Y3QgbG9naW5pbmZvICpsaSwgc3RydWN0IHV0bXB4ICp1dHgpCit7CisJaWYgKCBzdHJuY21wKGxpLT51c2VybmFtZSwgdXR4LT51dF9uYW1lLAorCQlNSU5fU0laRU9GKGxpLT51c2VybmFtZSwgdXR4LT51dF9uYW1lKSkgPT0gMCApIHsKKyMgaWZkZWYgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfVFlQRQorCQlpZiAodXR4LT51dF90eXBlID09IFVTRVJfUFJPQ0VTUykKKwkJCXJldHVybiAxOworIyBlbHNlCisJCXJldHVybiAxOworIyBlbmRpZgorCX0KKwlyZXR1cm4gMDsKK30KKworCitpbnQKK3d0bXB4X2dldF9lbnRyeShzdHJ1Y3QgbG9naW5pbmZvICpsaSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlzdHJ1Y3QgdXRtcHggdXR4OworCWludCBmZCwgZm91bmQ9MDsKKworCS8qIENsZWFyIHRoZSB0aW1lIGVudHJpZXMgKi8KKwlsaS0+dHZfc2VjID0gbGktPnR2X3VzZWMgPSAwOworCisJaWYgKChmZCA9IG9wZW4oV1RNUFhfRklMRSwgT19SRE9OTFkpKSA8IDApIHsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAid3RtcHhfZ2V0X2VudHJ5OiBwcm9ibGVtIG9wZW5pbmcgJXM6ICVzIiwKKwkJICAgIFdUTVBYX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoZnN0YXQoZmQsICZzdCkgIT0gMCkgeworCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJ3dG1weF9nZXRfZW50cnk6IGNvdWxkbid0IHN0YXQgJXM6ICVzIiwKKwkJICAgIFdUTVBYX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogU2VlayB0byB0aGUgc3RhcnQgb2YgdGhlIGxhc3Qgc3RydWN0IHV0bXB4ICovCisJaWYgKGxzZWVrKGZkLCAtKG9mZl90KXNpemVvZihzdHJ1Y3QgdXRtcHgpLCBTRUVLX0VORCkgPT0gLTEgKSB7CisJCS8qIHByb2JhYmx5IGEgbmV3bHkgcm90YXRlZCB3dG1weCBmaWxlICovCisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIDA7CisJfQorCisJd2hpbGUgKCFmb3VuZCkgeworCQlpZiAoYXRvbWljaW8ocmVhZCwgZmQsICZ1dHgsIHNpemVvZih1dHgpKSAhPSBzaXplb2YodXR4KSkgeworCQkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAid3RtcHhfZ2V0X2VudHJ5OiByZWFkIG9mICVzIGZhaWxlZDogJXMiLAorCQkJICAgIFdUTVBYX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CisJCQljbG9zZSAoZmQpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJLyogTG9nb3V0cyBhcmUgcmVjb3JkZWQgYXMgYSBibGFuayB1c2VybmFtZSBvbiBhIHBhcnRpY3VsYXIgbGluZS4KKwkJICogU28sIHdlIGp1c3QgbmVlZCB0byBmaW5kIHRoZSB1c2VybmFtZSBpbiBzdHJ1Y3QgdXRtcHggKi8KKwkJaWYgKCB3dG1weF9pc2xvZ2luKGxpLCAmdXR4KSApIHsKKwkJCWZvdW5kID0gMTsKKyMgaWZkZWYgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfVFYKKwkJCWxpLT50dl9zZWMgPSB1dHgudXRfdHYudHZfc2VjOworIyBlbHNlCisjICBpZmRlZiBIQVZFX1NUUlVDVF9VVE1QWF9VVF9USU1FCisJCQlsaS0+dHZfc2VjID0gdXR4LnV0X3RpbWU7CisjICBlbmRpZgorIyBlbmRpZgorCQkJbGluZV9mdWxsbmFtZShsaS0+bGluZSwgdXR4LnV0X2xpbmUsIHNpemVvZihsaS0+bGluZSkpOworIyBpZmRlZiBIQVZFX1NUUlVDVF9VVE1QWF9VVF9IT1NUCisJCQlzdHJsY3B5KGxpLT5ob3N0bmFtZSwgdXR4LnV0X2hvc3QsCisJCQkJTUlOX1NJWkVPRihsaS0+aG9zdG5hbWUsIHV0eC51dF9ob3N0KSk7CisjIGVuZGlmCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobHNlZWsoZmQsIC0ob2ZmX3QpKDIgKiBzaXplb2Yoc3RydWN0IHV0bXB4KSksIFNFRUtfQ1VSKSA9PSAtMSkgeworCQkJY2xvc2UgKGZkKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJY2xvc2UoZmQpOworCXJldHVybiAxOworfQorI2VuZGlmIC8qIFVTRV9XVE1QWCAqLworCisvKioKKyAqKiBMb3ctbGV2ZWwgbGlidXRpbCBsb2dpbigpIGZ1bmN0aW9ucworICoqLworCisjaWZkZWYgVVNFX0xPR0lOCitzdGF0aWMgaW50CitzeXNsb2dpbl9wZXJmb3JtX2xvZ2luKHN0cnVjdCBsb2dpbmluZm8gKmxpKQoreworCXN0cnVjdCB1dG1wICp1dDsKKworCWlmICghICh1dCA9IChzdHJ1Y3QgdXRtcCAqKW1hbGxvYyhzaXplb2YoKnV0KSkpKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInN5c2xvZ2luX3BlcmZvcm1fbG9naW46IGNvdWxkbid0IG1hbGxvYygpIik7CisJCXJldHVybiAwOworCX0KKwljb25zdHJ1Y3RfdXRtcChsaSwgdXQpOworCWxvZ2luKHV0KTsKKwlmcmVlKHV0KTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitzeXNsb2dpbl9wZXJmb3JtX2xvZ291dChzdHJ1Y3QgbG9naW5pbmZvICpsaSkKK3sKKyMgaWZkZWYgSEFWRV9MT0dPVVQKKwljaGFyIGxpbmVbOF07CisKKwkodm9pZClsaW5lX3N0cmlwbmFtZShsaW5lLCBsaS0+bGluZSwgc2l6ZW9mKGxpbmUpKTsKKworCWlmICghbG9nb3V0KGxpbmUpKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInN5c2xvZ2luX3BlcmZvcm1fbG9nb3V0OiBsb2dvdXQoJXMpIHJldHVybmVkIGFuIGVycm9yOiAlcyIsIGxpbmUsIHN0cmVycm9yKGVycm5vKSk7CisjICBpZmRlZiBIQVZFX0xPR1dUTVAKKwl9IGVsc2UgeworCQlsb2d3dG1wKGxpbmUsICIiLCAiIik7CisjICBlbmRpZgorCX0KKwkvKiBGSVhNRTogKEFUTCAtIGlmIHRoZSBuZWVkIGFyaXNlcykgV2hhdCB0byBkbyBpZiB3ZSBoYXZlCisJICogbG9naW4sIGJ1dCBubyBsb2dvdXQ/ICB3aGF0IGlmIGxvZ291dCBidXQgbm8gbG9nd3RtcD8gQWxsCisJICogcm91dGluZXMgYXJlIGluIGxpYnV0aWwgc28gdGhleSBzaG91bGQgYWxsIGJlIHRoZXJlLAorCSAqIGJ1dC4uLiAqLworIyBlbmRpZgorCXJldHVybiAxOworfQorCitpbnQKK3N5c2xvZ2luX3dyaXRlX2VudHJ5KHN0cnVjdCBsb2dpbmluZm8gKmxpKQoreworCXN3aXRjaCAobGktPnR5cGUpIHsKKwljYXNlIExUWVBFX0xPR0lOOgorCQlyZXR1cm4gc3lzbG9naW5fcGVyZm9ybV9sb2dpbihsaSk7CisJY2FzZSBMVFlQRV9MT0dPVVQ6CisJCXJldHVybiBzeXNsb2dpbl9wZXJmb3JtX2xvZ291dChsaSk7CisJZGVmYXVsdDoKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAic3lzbG9naW5fd3JpdGVfZW50cnk6IEludmFsaWQgdHlwZSBmaWVsZCIpOworCQlyZXR1cm4gMDsKKwl9Cit9CisjZW5kaWYgLyogVVNFX0xPR0lOICovCisKKy8qIGVuZCBvZiBmaWxlIGxvZy1zeXNsb2dpbi5jICovCisKKy8qKgorICoqIExvdy1sZXZlbCBsYXN0bG9nIGZ1bmN0aW9ucworICoqLworCisjaWZkZWYgVVNFX0xBU1RMT0cKKyNkZWZpbmUgTExfRklMRSAxCisjZGVmaW5lIExMX0RJUiAyCisjZGVmaW5lIExMX09USEVSIDMKKworc3RhdGljIHZvaWQKK2xhc3Rsb2dfY29uc3RydWN0KHN0cnVjdCBsb2dpbmluZm8gKmxpLCBzdHJ1Y3QgbGFzdGxvZyAqbGFzdCkKK3sKKwkvKiBjbGVhciB0aGUgc3RydWN0dXJlICovCisJbWVtc2V0KGxhc3QsICdcMCcsIHNpemVvZigqbGFzdCkpOworCisJKHZvaWQpbGluZV9zdHJpcG5hbWUobGFzdC0+bGxfbGluZSwgbGktPmxpbmUsIHNpemVvZihsYXN0LT5sbF9saW5lKSk7CisJc3RybGNweShsYXN0LT5sbF9ob3N0LCBsaS0+aG9zdG5hbWUsCisJCU1JTl9TSVpFT0YobGFzdC0+bGxfaG9zdCwgbGktPmhvc3RuYW1lKSk7CisJbGFzdC0+bGxfdGltZSA9IGxpLT50dl9zZWM7Cit9CisKK3N0YXRpYyBpbnQKK2xhc3Rsb2dfZmlsZXR5cGUoY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoc3RhdChmaWxlbmFtZSwgJnN0KSAhPSAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgImxhc3Rsb2dfcGVyZm9ybV9sb2dpbjogQ291bGRuJ3Qgc3RhdCAlczogJXMiLCBmaWxlbmFtZSwKKwkJCXN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAwOworCX0KKwlpZiAoU19JU0RJUihzdC5zdF9tb2RlKSkKKwkJcmV0dXJuIExMX0RJUjsKKwllbHNlIGlmIChTX0lTUkVHKHN0LnN0X21vZGUpKQorCQlyZXR1cm4gTExfRklMRTsKKwllbHNlCisJCXJldHVybiBMTF9PVEhFUjsKK30KKworCisvKiBvcGVuIHRoZSBmaWxlICh1c2luZyBmaWxlbW9kZSkgYW5kIHNlZWsgdG8gdGhlIGxvZ2luIGVudHJ5ICovCitzdGF0aWMgaW50CitsYXN0bG9nX29wZW5zZWVrKHN0cnVjdCBsb2dpbmluZm8gKmxpLCBpbnQgKmZkLCBpbnQgZmlsZW1vZGUpCit7CisJb2ZmX3Qgb2Zmc2V0OworCWludCB0eXBlOworCWNoYXIgbGFzdGxvZ19maWxlWzEwMjRdOworCisJdHlwZSA9IGxhc3Rsb2dfZmlsZXR5cGUoTEFTVExPR19GSUxFKTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwkJY2FzZSBMTF9GSUxFOgorCQkJc3RybGNweShsYXN0bG9nX2ZpbGUsIExBU1RMT0dfRklMRSwgc2l6ZW9mKGxhc3Rsb2dfZmlsZSkpOworCQkJYnJlYWs7CisJCWNhc2UgTExfRElSOgorCQkJc25wcmludGYobGFzdGxvZ19maWxlLCBzaXplb2YobGFzdGxvZ19maWxlKSwgIiVzLyVzIiwKKwkJCQkgTEFTVExPR19GSUxFLCBsaS0+dXNlcm5hbWUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJsYXN0bG9nX29wZW5zZWVrOiAlLjEwMHMgaXMgbm90IGEgZmlsZSBvciBkaXJlY3RvcnkhIiwKKwkJCSAgICBMQVNUTE9HX0ZJTEUpOworCQkJcmV0dXJuIDA7CisJfQorCisJKmZkID0gb3BlbihsYXN0bG9nX2ZpbGUsIGZpbGVtb2RlKTsKKwlpZiAoICpmZCA8IDApIHsKKwkJZHJvcGJlYXJfbG9nKExPR19JTkZPLCAibGFzdGxvZ19vcGVuc2VlazogQ291bGRuJ3Qgb3BlbiAlczogJXMiLAorCQkgICAgbGFzdGxvZ19maWxlLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAodHlwZSA9PSBMTF9GSUxFKSB7CisJCS8qIGZpbmQgdGhpcyB1aWQncyBvZmZzZXQgaW4gdGhlIGxhc3Rsb2cgZmlsZSAqLworCQlvZmZzZXQgPSAob2ZmX3QpICgobG9uZylsaS0+dWlkICogc2l6ZW9mKHN0cnVjdCBsYXN0bG9nKSk7CisKKwkJaWYgKCBsc2VlaygqZmQsIG9mZnNldCwgU0VFS19TRVQpICE9IG9mZnNldCApIHsKKwkJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgImxhc3Rsb2dfb3BlbnNlZWs6ICVzLT5sc2VlaygpOiAlcyIsCisJCQkgbGFzdGxvZ19maWxlLCBzdHJlcnJvcihlcnJubykpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorbGFzdGxvZ19wZXJmb3JtX2xvZ2luKHN0cnVjdCBsb2dpbmluZm8gKmxpKQoreworCXN0cnVjdCBsYXN0bG9nIGxhc3Q7CisJaW50IGZkOworCisJLyogY3JlYXRlIG91ciBzdHJ1Y3QgbGFzdGxvZyAqLworCWxhc3Rsb2dfY29uc3RydWN0KGxpLCAmbGFzdCk7CisKKwlpZiAoIWxhc3Rsb2dfb3BlbnNlZWsobGksICZmZCwgT19SRFdSfE9fQ1JFQVQpKQorCQlyZXR1cm4oMCk7CisKKwkvKiB3cml0ZSB0aGUgZW50cnkgKi8KKwlpZiAoYXRvbWljaW8od3JpdGUsIGZkLCAmbGFzdCwgc2l6ZW9mKGxhc3QpKSAhPSBzaXplb2YobGFzdCkpIHsKKwkJY2xvc2UoZmQpOworCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJsYXN0bG9nX3dyaXRlX2ZpbGVtb2RlOiBFcnJvciB3cml0aW5nIHRvICVzOiAlcyIsCisJCSAgICBMQVNUTE9HX0ZJTEUsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAwOworCX0KKworCWNsb3NlKGZkKTsKKwlyZXR1cm4gMTsKK30KKworaW50CitsYXN0bG9nX3dyaXRlX2VudHJ5KHN0cnVjdCBsb2dpbmluZm8gKmxpKQoreworCXN3aXRjaChsaS0+dHlwZSkgeworCWNhc2UgTFRZUEVfTE9HSU46CisJCXJldHVybiBsYXN0bG9nX3BlcmZvcm1fbG9naW4obGkpOworCWRlZmF1bHQ6CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgImxhc3Rsb2dfd3JpdGVfZW50cnk6IEludmFsaWQgdHlwZSBmaWVsZCIpOworCQlyZXR1cm4gMDsKKwl9Cit9CisKKyNlbmRpZiAvKiBVU0VfTEFTVExPRyAqLwpkaWZmIC0tZ2l0IGEvbG9naW5yZWMuaCBiL2xvZ2lucmVjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNkMjZiOQotLS0gL2Rldi9udWxsCisrKyBiL2xvZ2lucmVjLmgKQEAgLTAsMCArMSwxODUgQEAKKyNpZm5kZWYgX0hBVkVfTE9HSU5SRUNfSF8KKyNkZWZpbmUgX0hBVkVfTE9HSU5SRUNfSF8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBBbmRyZSBMdWNhcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICoqIGxvZ2lucmVjLmg6ICBwbGF0Zm9ybS1pbmRlcGVuZGVudCBsb2dpbiByZWNvcmRpbmcgYW5kIGxhc3Rsb2cgcmV0cmlldmFsCisgKiovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorCisvKiBSQ1NJRCgiSWQ6IGxvZ2lucmVjLmgsdiAxLjIgMjAwNC8wNS8wNCAxMDoxNzo0MyBtYXR0IEV4cCAiKTsgKi8KKworLyogVGhlIGZvbGxvd2luZyAjZGVmaW5lcyBhcmUgZnJvbSBPcGVuU1NIJ3MgZGVmaW5lcy5oLCByZXF1aXJlZCBmb3IgbG9naW5yZWMgKi8KKworLyogRklYTUU6IHB1dCBkZWZhdWx0IHBhdGhzIGJhY2sgaW4gKi8KKyNpZm5kZWYgVVRNUF9GSUxFCisjICBpZmRlZiBfUEFUSF9VVE1QCisjICAgIGRlZmluZSBVVE1QX0ZJTEUgX1BBVEhfVVRNUAorIyAgZWxzZQorIyAgICBpZmRlZiBDT05GX1VUTVBfRklMRQorIyAgICAgIGRlZmluZSBVVE1QX0ZJTEUgQ09ORl9VVE1QX0ZJTEUKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNpZm5kZWYgV1RNUF9GSUxFCisjICBpZmRlZiBfUEFUSF9XVE1QCisjICAgIGRlZmluZSBXVE1QX0ZJTEUgX1BBVEhfV1RNUAorIyAgZWxzZQorIyAgICBpZmRlZiBDT05GX1dUTVBfRklMRQorIyAgICAgIGRlZmluZSBXVE1QX0ZJTEUgQ09ORl9XVE1QX0ZJTEUKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKy8qIHBpY2sgdXAgdGhlIHVzZXIncyBsb2NhdGlvbiBmb3IgbGFzdGxvZyBpZiBnaXZlbiAqLworI2lmbmRlZiBMQVNUTE9HX0ZJTEUKKyMgIGlmZGVmIF9QQVRIX0xBU1RMT0cKKyMgICAgZGVmaW5lIExBU1RMT0dfRklMRSBfUEFUSF9MQVNUTE9HCisjICBlbHNlCisjICAgIGlmZGVmIENPTkZfTEFTVExPR19GSUxFCisjICAgICAgZGVmaW5lIExBU1RMT0dfRklMRSBDT05GX0xBU1RMT0dfRklMRQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisKKy8qIFRoZSBsb2dpbigpIGxpYnJhcnkgZnVuY3Rpb24gaW4gbGlidXRpbCBpcyBmaXJzdCBjaG9pY2UgKi8KKyNpZiBkZWZpbmVkKEhBVkVfTE9HSU4pICYmICFkZWZpbmVkKERJU0FCTEVfTE9HSU4pCisjICBkZWZpbmUgVVNFX0xPR0lOCisKKyNlbHNlCisvKiBTaW1wbHkgc2VsZWN0IHlvdXIgZmF2b3VyaXRlIGxvZ2luIHR5cGVzLiAqLworLyogQ2FuJ3QgZG8gaWYtZWxzZSBiZWNhdXNlIHNvbWUgc3lzdGVtcyB1c2Ugc2V2ZXJhbC4uLiA8c2lnaD4gKi8KKyMgIGlmIGRlZmluZWQoVVRNUFhfRklMRSkgJiYgIWRlZmluZWQoRElTQUJMRV9VVE1QWCkKKyMgICAgZGVmaW5lIFVTRV9VVE1QWAorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoVVRNUF9GSUxFKSAmJiAhZGVmaW5lZChESVNBQkxFX1VUTVApCisjICAgIGRlZmluZSBVU0VfVVRNUAorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoV1RNUFhfRklMRSkgJiYgIWRlZmluZWQoRElTQUJMRV9XVE1QWCkKKyMgICAgZGVmaW5lIFVTRV9XVE1QWAorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoV1RNUF9GSUxFKSAmJiAhZGVmaW5lZChESVNBQkxFX1dUTVApCisjICAgIGRlZmluZSBVU0VfV1RNUAorIyAgZW5kaWYKKworI2VuZGlmCisKKy8qIEkgaG9wZSB0aGF0IHRoZSBwcmVzZW5jZSBvZiBMQVNUTE9HX0ZJTEUgaXMgZW5vdWdoIHRvIGRldGVjdCB0aGlzICovCisjaWYgZGVmaW5lZChMQVNUTE9HX0ZJTEUpICYmICFkZWZpbmVkKERJU0FCTEVfTEFTVExPRykKKyMgIGRlZmluZSBVU0VfTEFTVExPRworI2VuZGlmCisKKworLyoqCisgKiogeW91IHNob3VsZCB1c2UgdGhlIGxvZ2luXyogY2FsbHMgdG8gd29yayBhcm91bmQgcGxhdGZvcm0gZGVwZW5kZW5jaWVzCisgKiovCisKKy8qCisgKiBsb2dpbl9uZXRpbmZvIHN0cnVjdHVyZQorICovCisKK3VuaW9uIGxvZ2luX25ldGluZm8geworCXN0cnVjdCBzb2NrYWRkciBzYTsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FfaW47CisjaWZkZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRQorCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhX3N0b3JhZ2U7CisjZW5kaWYKK307CisKKy8qCisgKiAgICogbG9naW5pbmZvIHN0cnVjdHVyZSAgKgorICovCisvKiB0eXBlcyAtIGRpZmZlcmVudCB0byB1dG1wLmggJ3R5cGUnIG1hY3JvcyAqLworLyogKHRob3VnaCBzZXQgdG8gdGhlIHNhbWUgdmFsdWUgYXMgbGludXgsIG9wZW5ic2QgYW5kIG90aGVycy4uLikgKi8KKyNkZWZpbmUgTFRZUEVfTE9HSU4gICAgNworI2RlZmluZSBMVFlQRV9MT0dPVVQgICA4CisKKy8qIHN0cmluZyBsZW5ndGhzIC0gc2V0IHZlcnkgbG9uZyAqLworI2RlZmluZSBMSU5GT19QUk9HU0laRSA2NAorI2RlZmluZSBMSU5GT19MSU5FU0laRSA2NAorI2RlZmluZSBMSU5GT19OQU1FU0laRSA2NAorI2RlZmluZSBMSU5GT19IT1NUU0laRSAyNTYKKworc3RydWN0IGxvZ2luaW5mbyB7CisJY2hhciAgICAgICBwcm9nbmFtZVtMSU5GT19QUk9HU0laRV07ICAgICAvKiBuYW1lIG9mIHByb2dyYW0gKGZvciBQQU0pICovCisJaW50ICAgICAgICBwcm9nbmFtZV9udWxsOworCXNob3J0IGludCAgdHlwZTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHlwZSBvZiBsb2dpbiAoTFRZUEVfKikgKi8KKwlpbnQgICAgICAgIHBpZDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBJRCBvZiBsb2dpbiBwcm9jZXNzICovCisJaW50ICAgICAgICB1aWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVSUQgb2YgdGhpcyB1c2VyICovCisJY2hhciAgICAgICBsaW5lW0xJTkZPX0xJTkVTSVpFXTsgICAgICAgICAvKiB0dHkvcHR5IG5hbWUgKi8KKwljaGFyICAgICAgIHVzZXJuYW1lW0xJTkZPX05BTUVTSVpFXTsgICAgIC8qIGxvZ2luIHVzZXJuYW1lICovCisJY2hhciAgICAgICBob3N0bmFtZVtMSU5GT19IT1NUU0laRV07ICAgICAvKiByZW1vdGUgaG9zdG5hbWUgKi8KKwkvKiAnZXhpdF9zdGF0dXMnIHN0cnVjdHVyZSBjb21wb25lbnRzICovCisJaW50ICAgICAgICBleGl0OyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb2Nlc3MgZXhpdCBzdGF0dXMgKi8KKwlpbnQgICAgICAgIHRlcm1pbmF0aW9uOyAgICAgICAgICAgICAgICAgLyogcHJvY2VzcyB0ZXJtaW5hdGlvbiBzdGF0dXMgKi8KKwkvKiBzdHJ1Y3QgdGltZXZhbCAoc3lzL3RpbWUuaCkgaXNuJ3QgYWx3YXlzIGF2YWlsYWJsZSwgaWYgaXQgaXNuJ3Qgd2UnbGwKKwkgKiB1c2UgdGltZV90J3MgdmFsdWUgYXMgdHZfc2VjIGFuZCBzZXQgdHZfdXNlYyB0byAwCisJICovCisJdW5zaWduZWQgaW50IHR2X3NlYzsKKwl1bnNpZ25lZCBpbnQgdHZfdXNlYzsKKwl1bmlvbiBsb2dpbl9uZXRpbmZvIGhvc3RhZGRyOyAgICAgICAvKiBjYWxsZXIncyBob3N0IGFkZHJlc3MoZXMpICovCit9OyAvKiBzdHJ1Y3QgbG9naW5pbmZvICovCisKKy8qCisgKiBsb2dpbiByZWNvcmRpbmcgZnVuY3Rpb25zCisgKi8KKworLyoqICdwdWJsaWMnIGZ1bmN0aW9ucyAqLworCitzdHJ1Y3QgbG9naW5pbmZvICpsb2dpbl9hbGxvY19lbnRyeShpbnQgcGlkLCBjb25zdCBjaGFyICp1c2VybmFtZSwKKwkJCQkgICAgY29uc3QgY2hhciAqaG9zdG5hbWUsIGNvbnN0IGNoYXIgKmxpbmUpOworLyogZnJlZSBhIHN0cnVjdHVyZSAqLwordm9pZCBsb2dpbl9mcmVlX2VudHJ5KHN0cnVjdCBsb2dpbmluZm8gKmxpKTsKKy8qIGZpbGwgb3V0IGEgcHJlLWFsbG9jYXRlZCBzdHJ1Y3R1cmUgd2l0aCB1c2VmdWwgaW5mb3JtYXRpb24gKi8KK2ludCBsb2dpbl9pbml0X2VudHJ5KHN0cnVjdCBsb2dpbmluZm8gKmxpLCBpbnQgcGlkLCBjb25zdCBjaGFyICp1c2VybmFtZSwKKwkJICAgICBjb25zdCBjaGFyICpob3N0bmFtZSwgY29uc3QgY2hhciAqbGluZSk7CisvKiBwbGFjZSB0aGUgY3VycmVudCB0aW1lIGluIGEgbG9naW5pbmZvIHN0cnVjdCAqLwordm9pZCBsb2dpbl9zZXRfY3VycmVudF90aW1lKHN0cnVjdCBsb2dpbmluZm8gKmxpKTsKKworLyogcmVjb3JkIHRoZSBlbnRyeSAqLworaW50IGxvZ2luX2xvZ2luIChzdHJ1Y3QgbG9naW5pbmZvICpsaSk7CitpbnQgbG9naW5fbG9nb3V0KHN0cnVjdCBsb2dpbmluZm8gKmxpKTsKKyNpZmRlZiBMT0dJTl9ORUVEU19VVE1QWAoraW50IGxvZ2luX3V0bXBfb25seShzdHJ1Y3QgbG9naW5pbmZvICpsaSk7CisjZW5kaWYKKworLyoqIEVuZCBvZiBwdWJsaWMgZnVuY3Rpb25zICovCisKKy8qIHJlY29yZCB0aGUgZW50cnkgKi8KK2ludCBsb2dpbl93cml0ZSAoc3RydWN0IGxvZ2luaW5mbyAqbGkpOworaW50IGxvZ2luX2xvZ19lbnRyeShzdHJ1Y3QgbG9naW5pbmZvICpsaSk7CisKKy8qIHNldCB0aGUgbmV0d29yayBhZGRyZXNzIGJhc2VkIG9uIG5ldHdvcmsgYWRkcmVzcyB0eXBlICovCit2b2lkIGxvZ2luX3NldF9hZGRyKHN0cnVjdCBsb2dpbmluZm8gKmxpLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLAorCQkgICAgY29uc3QgdW5zaWduZWQgaW50IHNhX3NpemUpOworCisvKiBwcm9kdWNlIHZhcmlvdXMgZm9ybXMgb2YgdGhlIGxpbmUgZmlsZW5hbWUgKi8KK2NoYXIgKmxpbmVfZnVsbG5hbWUoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBkc3RzaXplKTsKK2NoYXIgKmxpbmVfc3RyaXBuYW1lKGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBzaXplX3QgZHN0c2l6ZSk7CitjaGFyICpsaW5lX2FiYnJldm5hbWUoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBkc3RzaXplKTsKKworI2VuZGlmIC8qIF9IQVZFX0xPR0lOUkVDX0hfICovCmRpZmYgLS1naXQgYS9uZXRic2RfZ2V0cGFzcy5jIGIvbmV0YnNkX2dldHBhc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTc5ZWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0YnNkX2dldHBhc3MuYwpAQCAtMCwwICsxLDExNCBAQAorLyoJJE5ldEJTRDogZ2V0cGFzcy5jLHYgMS4xNSAyMDAzLzA4LzA3IDE2OjQyOjUwIGFnYyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIDAKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZiAwCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpZ2V0cGFzcy5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogZ2V0cGFzcy5jLHYgMS4xNSAyMDAzLzA4LzA3IDE2OjQyOjUwIGFnYyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSAibmFtZXNwYWNlLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHBhdGhzLmg+CisjaW5jbHVkZSA8cHdkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZiAwCisjaWZkZWYgX193ZWFrX2FsaWFzCitfX3dlYWtfYWxpYXMoZ2V0cGFzcyxfZ2V0cGFzcykKKyNlbmRpZgorI2VuZGlmCisKK2NoYXIgKgorZ2V0cGFzcyhwcm9tcHQpCisJY29uc3QgY2hhciAqcHJvbXB0OworeworCXN0cnVjdCB0ZXJtaW9zIHRlcm07CisJaW50IGNoOworCWNoYXIgKnA7CisJRklMRSAqZnAsICpvdXRmcDsKKwlpbnQgZWNobzsKKwlzdGF0aWMgY2hhciBidWZbX1BBU1NXT1JEX0xFTiArIDFdOworCXNpZ3NldF90IG9zZXQsIG5zZXQ7CisKKyNpZiAwCisJX0RJQUdBU1NFUlQocHJvbXB0ICE9IE5VTEwpOworI2VuZGlmCisKKwkvKgorCSAqIHJlYWQgYW5kIHdyaXRlIHRvIC9kZXYvdHR5IGlmIHBvc3NpYmxlOyBlbHNlIHJlYWQgZnJvbQorCSAqIHN0ZGluIGFuZCB3cml0ZSB0byBzdGRlcnIuCisJICovCisJaWYgKChvdXRmcCA9IGZwID0gZm9wZW4oX1BBVEhfVFRZLCAidysiKSkgPT0gTlVMTCkgeworCQlvdXRmcCA9IHN0ZGVycjsKKwkJZnAgPSBzdGRpbjsKKwl9CisKKwkvKgorCSAqIG5vdGUgLSBibG9ja2luZyBzaWduYWxzIGlzbid0IG5lY2Vzc2FyaWx5IHRoZQorCSAqIHJpZ2h0IHRoaW5nLCBidXQgd2UgbGVhdmUgaXQgZm9yIG5vdy4KKwkgKi8KKwlzaWdlbXB0eXNldCgmbnNldCk7CisJc2lnYWRkc2V0KCZuc2V0LCBTSUdJTlQpOworCXNpZ2FkZHNldCgmbnNldCwgU0lHVFNUUCk7CisJKHZvaWQpc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbnNldCwgJm9zZXQpOworCisJKHZvaWQpdGNnZXRhdHRyKGZpbGVubyhmcCksICZ0ZXJtKTsKKwlpZiAoKGVjaG8gPSAodGVybS5jX2xmbGFnICYgRUNITykpICE9IDApIHsKKwkJdGVybS5jX2xmbGFnICY9IH5FQ0hPOworCQkodm9pZCl0Y3NldGF0dHIoZmlsZW5vKGZwKSwgVENTQUZMVVNIIC8qfFRDU0FTT0ZUKi8sICZ0ZXJtKTsKKwl9CisJaWYgKHByb21wdCAhPSBOVUxMKQorCQkodm9pZClmcHV0cyhwcm9tcHQsIG91dGZwKTsKKwlyZXdpbmQob3V0ZnApOwkJCS8qIGltcGxpZWQgZmx1c2ggKi8KKwlmb3IgKHAgPSBidWY7IChjaCA9IGdldGMoZnApKSAhPSBFT0YgJiYgY2ggIT0gJ1xuJzspCisJCWlmIChwIDwgYnVmICsgX1BBU1NXT1JEX0xFTikKKwkJCSpwKysgPSBjaDsKKwkqcCA9ICdcMCc7CisJKHZvaWQpd3JpdGUoZmlsZW5vKG91dGZwKSwgIlxuIiwgMSk7CisJaWYgKGVjaG8pIHsKKwkJdGVybS5jX2xmbGFnIHw9IEVDSE87CisJCSh2b2lkKXRjc2V0YXR0cihmaWxlbm8oZnApLCBUQ1NBRkxVU0gvKnxUQ1NBU09GVCovLCAmdGVybSk7CisJfQorCSh2b2lkKXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb3NldCwgTlVMTCk7CisJaWYgKGZwICE9IHN0ZGluKQorCQkodm9pZClmY2xvc2UoZnApOworCXJldHVybihidWYpOworfQpkaWZmIC0tZ2l0IGEvb3B0aW9ucy5oIGIvb3B0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MzNmMjQKLS0tIC9kZXYvbnVsbAorKysgYi9vcHRpb25zLmgKQEAgLTAsMCArMSw0MTMgQEAKKy8qIERyb3BiZWFyIFNTSAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gU2VlIExJQ0VOU0UgZm9yIHRoZSBsaWNlbnNlLiAqLworCisjaWZuZGVmIF9PUFRJT05TX0hfCisjZGVmaW5lIF9PUFRJT05TX0hfCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIERlZmluZSBjb21waWxlLXRpbWUgb3B0aW9ucyBiZWxvdyAtIHRoZSAiI2lmbmRlZiBEUk9QQkVBUl9YWFggLi4uLiAjZW5kaWYiCisgKiBwYXJ0cyBhcmUgdG8gYWxsb3cgZm9yIGNvbW1hbmRsaW5lIC1ERFJPUEJFQVJfWFhYIG9wdGlvbnMgZXRjLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBEUk9QQkVBUl9ERUZQT1JUCisjZGVmaW5lIERST1BCRUFSX0RFRlBPUlQgIjIyIgorI2VuZGlmCisKKyNpZm5kZWYgRFJPUEJFQVJfREVGQUREUkVTUworLyogTGlzdGVuIG9uIGFsbCBpbnRlcmZhY2VzICovCisjZGVmaW5lIERST1BCRUFSX0RFRkFERFJFU1MgIiIKKyNlbmRpZgorCisvKiBEZWZhdWx0IGhvc3RrZXkgcGF0aHMgLSB0aGVzZSBjYW4gYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgKi8KKyNpZm5kZWYgRFNTX1BSSVZfRklMRU5BTUUKKyNkZWZpbmUgRFNTX1BSSVZfRklMRU5BTUUgIi9ldGMvZHJvcGJlYXIvZHJvcGJlYXJfZHNzX2hvc3Rfa2V5IgorI2VuZGlmCisjaWZuZGVmIFJTQV9QUklWX0ZJTEVOQU1FCisjZGVmaW5lIFJTQV9QUklWX0ZJTEVOQU1FICIvZXRjL2Ryb3BiZWFyL2Ryb3BiZWFyX3JzYV9ob3N0X2tleSIKKyNlbmRpZgorCisvKiBTZXQgTk9OX0lORVREX01PREUgaWYgeW91IHJlcXVpcmUgZGFlbW9uIGZ1bmN0aW9uYWxpdHkgKGllIERyb3BiZWFyIGxpc3RlbnMKKyAqIG9uIGNob3NlbiBwb3J0cyBhbmQga2VlcHMgYWNjZXB0aW5nIGNvbm5lY3Rpb25zLiBUaGlzIGlzIHRoZSBkZWZhdWx0LgorICoKKyAqIFNldCBJTkVURF9NT0RFIGlmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gcnVuIERyb3BiZWFyIHdpdGggaW5ldGQgKG9yCisgKiBzaW1pbGFyKSwgd2hlcmUgaXQgd2lsbCB1c2Ugc3RkaW4vc3Rkb3V0IGZvciBjb25uZWN0aW9ucywgYW5kIGVhY2ggcHJvY2VzcworICogbGFzdHMgZm9yIGEgc2luZ2xlIGNvbm5lY3Rpb24uIERyb3BiZWFyIHNob3VsZCBiZSBpbnZva2VkIHdpdGggdGhlIC1pIGZsYWcKKyAqIGZvciBpbmV0ZCwgYW5kIGNhbiBvbmx5IGFjY2VwdCBJUHY0IGNvbm5lY3Rpb25zLgorICoKKyAqIEJvdGggb2YgdGhlc2UgZmxhZ3MgY2FuIGJlIGRlZmluZWQgYXQgb25jZSwgZG9uJ3QgY29tcGlsZSB3aXRob3V0IGF0IGxlYXN0CisgKiBvbmUgb2YgdGhlbS4gKi8KKyNkZWZpbmUgTk9OX0lORVREX01PREUKKyNkZWZpbmUgSU5FVERfTU9ERQorCisvKiBTZXR0aW5nIHRoaXMgZGlzYWJsZXMgdGhlIGZhc3QgZXhwdG1vZCBiaWdudW0gY29kZS4gSXQgc2F2ZXMgfjVrQiwgYnV0IGlzCisgKiBwZXJoYXBzIDIwJSBzbG93ZXIgZm9yIHB1YmtleSBvcGVyYXRpb25zIChpdCBpcyBwcm9iYWJseSB3b3J0aCBleHBlcmltZW50aW5nCisgKiBpZiB5b3Ugd2FudCB0byB1c2UgdGhpcykgKi8KKy8qI2RlZmluZSBOT19GQVNUX0VYUFRNT0QqLworCisvKiBTZXQgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIERST1BCRUFSX1NNQUxMX0NPREUgb3B0aW9uLiBUaGlzIGNhbiBzYXZlCitzZXZlcmFsIGtCIGluIGJpbmFyeSBzaXplLCBob3dldmVyIHdpbGwgbWFrZSB0aGUgc3ltbWV0cmljYWwgY2lwaGVycyAoQUVTLCBERVMKK2V0Yykgc2xvd2VyIChwZXJoYXBzIGJ5IDUwJSkuIFJlY29tbWVuZGVkIGZvciBtb3N0IHNtYWxsIHN5c3RlbXMuICovCisjZGVmaW5lIERST1BCRUFSX1NNQUxMX0NPREUKKworLyogRW5hYmxlIFgxMSBGb3J3YXJkaW5nIC0gc2VydmVyIG9ubHkgKi8KKyNkZWZpbmUgRU5BQkxFX1gxMUZXRAorCisvKiBFbmFibGUgVENQIEZvd2FyZGluZyAqLworLyogJ0xvY2FsJyBpcyAiLUwiIHN0eWxlIChjbGllbnQgbGlzdGVuaW5nIHBvcnQgZm9yd2FyZGVkIHZpYSBzZXJ2ZXIpCisgKiAnUmVtb3RlJyBpcyAiLVIiIHN0eWxlIChzZXJ2ZXIgbGlzdGVuaW5nIHBvcnQgZm9yd2FyZGVkIHZpYSBjbGllbnQpICovCisKKyNkZWZpbmUgRU5BQkxFX0NMSV9MT0NBTFRDUEZXRAorI2RlZmluZSBFTkFCTEVfQ0xJX1JFTU9URVRDUEZXRAorCisjZGVmaW5lIEVOQUJMRV9TVlJfTE9DQUxUQ1BGV0QKKyNkZWZpbmUgRU5BQkxFX1NWUl9SRU1PVEVUQ1BGV0QKKworLyogRW5hYmxlIEF1dGhlbnRpY2F0aW9uIEFnZW50IEZvcndhcmRpbmcgLSBzZXJ2ZXIgb25seSBmb3Igbm93ICovCisjZGVmaW5lIEVOQUJMRV9BR0VOVEZXRAorCisvKiBFbmNyeXB0aW9uIC0gYXQgbGVhc3Qgb25lIHJlcXVpcmVkLgorICogUkZDIERyYWZ0IHJlcXVpcmVzIDNERVMgYW5kIHJlY29tbWVuZHMgQUVTMTI4IGZvciBpbnRlcm9wZXJhYmlsaXR5LgorICogSW5jbHVkaW5nIG11bHRpcGxlIGtleXNpemUgdmFyaWFudHMgdGhlIHNhbWUgY2lwaGVyIAorICogKGVnIEFFUzI1NiBhcyB3ZWxsIGFzIEFFUzEyOCkgd2lsbCByZXN1bHQgaW4gYSBtaW5pbWFsIHNpemUgaW5jcmVhc2UuKi8KKyNkZWZpbmUgRFJPUEJFQVJfQUVTMTI4X0NCQworI2RlZmluZSBEUk9QQkVBUl8zREVTX0NCQworLy8jZGVmaW5lIERST1BCRUFSX0FFUzI1Nl9DQkMKKy8vI2RlZmluZSBEUk9QQkVBUl9CTE9XRklTSF9DQkMKKy8vI2RlZmluZSBEUk9QQkVBUl9UV09GSVNIMjU2X0NCQworLy8jZGVmaW5lIERST1BCRUFSX1RXT0ZJU0gxMjhfQ0JDCisKKy8qIE1lc3NhZ2UgSW50ZWdyaXR5IC0gYXQgbGVhc3Qgb25lIHJlcXVpcmVkLgorICogUkZDIERyYWZ0IHJlcXVpcmVzIHNoYTEgYW5kIHJlY29tbWVuZHMgc2hhMS05Ni4KKyAqIHNoYTEtOTYgbWF5IGJlIG9mIHVzZSBmb3Igc2xvdyBsaW5rcywgYXMgaXQgaGFzIGEgc21hbGxlciBvdmVyaGVhZC4KKyAqCisgKiBOb3RlOiB0aGVyZSdzIG5vIHBvaW50IGRpc2FibGluZyBzaGExIHRvIHNhdmUgc3BhY2UsIHNpbmNlIGl0J3MgdXNlZAorICogZm9yIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBhbmQgcHVibGljLWtleSBjcnlwdG9ncmFwaHkgYW55d2F5LgorICogRGlzYWJsaW5nIGl0IGhlcmUgd2lsbCBqdXN0IHN0b3AgaXQgZnJvbSBiZWluZyB1c2VkIGFzIHRoZSBpbnRlZ3JpdHkgcG9ydGlvbgorICogb2YgdGhlIHNzaCBwcm90b2NvbC4KKyAqCisgKiBUaGVzZSBoYXNoZXMgYXJlIGFsc28gdXNlZCBmb3IgcHVibGljIGtleSBmaW5nZXJwcmludHMgaW4gbG9ncy4KKyAqIElmIHlvdSBkaXNhYmxlIE1ENSwgRHJvcGJlYXIgd2lsbCBmYWxsIGJhY2sgdG8gU0hBMSBmaW5nZXJwcmludHMsCisgKiB3aGljaCBhcmUgbm90IHRoZSBzdGFuZGFyZCBmb3JtLiAqLworI2RlZmluZSBEUk9QQkVBUl9TSEExX0hNQUMKKyNkZWZpbmUgRFJPUEJFQVJfU0hBMV85Nl9ITUFDCisjZGVmaW5lIERST1BCRUFSX01ENV9ITUFDCisKKy8qIEhvc3RrZXkvcHVibGljIGtleSBhbGdvcml0aG1zIC0gYXQgbGVhc3Qgb25lIHJlcXVpcmVkLCB0aGVzZSBhcmUgdXNlZAorICogZm9yIGhvc3RrZXkgYXMgd2VsbCBhcyBmb3IgdmVyaWZ5aW5nIHNpZ25hdHVyZXMgd2l0aCBwdWJrZXkgYXV0aC4KKyAqIFJlbW92aW5nIGVpdGhlciBvZiB0aGVzZSB3b24ndCBzYXZlIHZlcnkgbXVjaCBzcGFjZS4KKyAqIFNTSDIgUkZDIERyYWZ0IHJlcXVpcmVzIGRzcywgcmVjb21tZW5kcyByc2EgKi8KKyNkZWZpbmUgRFJPUEJFQVJfUlNBCisjZGVmaW5lIERST1BCRUFSX0RTUworCisvKiBSU0EgY2FuIGJlIHZ1bG5lcmFibGUgdG8gdGltaW5nIGF0dGFja3Mgd2hpY2ggdXNlIHRoZSB0aW1lIHJlcXVpcmVkIGZvcgorICogc2lnbmluZyB0byBndWVzcyB0aGUgcHJpdmF0ZSBrZXkuIEJsaW5kaW5nIGF2b2lkcyB0aGlzIGF0dGFjaywgdGhvdWdoIG1ha2VzCisgKiBzaWduaW5nIG9wZXJhdGlvbnMgc2xpZ2h0bHkgc2xvd2VyLiAqLworI2RlZmluZSBSU0FfQkxJTkRJTkcKKworLyogRGVmaW5lIERTU19QUk9UT0sgdG8gdXNlIFB1VFRZJ3MgbWV0aG9kIG9mIGdlbmVyYXRpbmcgdGhlIHZhbHVlIGsgZm9yIGRzcywKKyAqIHJhdGhlciB0aGFuIGp1c3QgZnJvbSB0aGUgcmFuZG9tIGJ5dGUgc291cmNlLiBVbmRlZmluaW5nIHRoaXMgd2lsbCBzYXZlIHlvdQorICogfjRrIGluIGJpbmFyeSBzaXplIHdpdGggc3RhdGljIHVjbGliYywgYnV0IHlvdXIgRFNTIGhvc3RrZXkgY291bGQgYmUgZXhwb3NlZAorICogaWYgdGhlIHJhbmRvbSBudW1iZXIgc291cmNlIGlzbid0IGdvb2QuIEluIGdlbmVyYWwgdGhpcyBpc24ndCByZXF1aXJlZCAqLworLyogI2RlZmluZSBEU1NfUFJPVE9LICovCisKKy8qIFdoZXRoZXIgdG8gZG8gcmV2ZXJzZSBETlMgbG9va3Vwcy4gKi8KKyNkZWZpbmUgRE9fSE9TVF9MT09LVVAKKworLyogV2hldGhlciB0byBwcmludCB0aGUgbWVzc2FnZSBvZiB0aGUgZGF5IChNT1REKS4gVGhpcyBkb2Vzbid0IGFkZCBtdWNoIGNvZGUKKyAqIHNpemUgKi8KKyNkZWZpbmUgRE9fTU9URAorCisvKiBUaGUgTU9URCBmaWxlIHBhdGggKi8KKyNpZm5kZWYgTU9URF9GSUxFTkFNRQorI2RlZmluZSBNT1REX0ZJTEVOQU1FICIvZXRjL21vdGQiCisjZW5kaWYKKworLyogQXV0aGVudGljYXRpb24gVHlwZXMgLSBhdCBsZWFzdCBvbmUgcmVxdWlyZWQuCisgICBSRkMgRHJhZnQgcmVxdWlyZXMgcHVia2V5IGF1dGgsIGFuZCByZWNvbW1lbmRzIHBhc3N3b3JkICovCisKKy8qIE5vdGU6IFBBTSBhdXRoIGlzIHF1aXRlIHNpbXBsZSwgYW5kIG9ubHkgd29ya3MgZm9yIFBBTSBtb2R1bGVzIHdoaWNoIGp1c3QgZG8KKyAqIGEgc2ltcGxlICJMb2dpbjogIiAiUGFzc3dvcmQ6ICIgKHlvdSBjYW4gZWRpdCB0aGUgc3RyaW5ncyBpbiBzdnItYXV0aHBhbS5jKS4KKyAqIEl0J3MgdXNlZnVsIGZvciBzeXN0ZW1zIGxpa2UgT1MgWCB3aGVyZSBzdGFuZGFyZCBwYXNzd29yZCBjcnlwdHMgZG9uJ3Qgd29yaywKKyAqIGJ1dCB0aGVyZSdzIGFuIGludGVyZmFjZSB2aWEgYSBQQU0gbW9kdWxlIC0gZG9uJ3QgYm90aGVyIHVzaW5nIGl0IG90aGVyd2lzZS4KKyAqIFlvdSBjYW4ndCBlbmFibGUgYm90aCBQQVNTV09SRCBhbmQgUEFNLiAqLworCisjZGVmaW5lIEVOQUJMRV9TVlJfUEFTU1dPUkRfQVVUSAorLyojZGVmaW5lIEVOQUJMRV9TVlJfUEFNX0FVVEggKi8gLyogcmVxdWlyZXMgLi9jb25maWd1cmUgLS1lbmFibGUtcGFtICovCisjZGVmaW5lIEVOQUJMRV9TVlJfUFVCS0VZX0FVVEgKKworI2RlZmluZSBFTkFCTEVfQ0xJX1BBU1NXT1JEX0FVVEgKKyNkZWZpbmUgRU5BQkxFX0NMSV9QVUJLRVlfQVVUSAorI2RlZmluZSBFTkFCTEVfQ0xJX0lOVEVSQUNUX0FVVEgKKworLyogRGVmaW5lIHRoaXMgKGFzIHdlbGwgYXMgRU5BQkxFX0NMSV9QQVNTV09SRF9BVVRIKSB0byBhbGxvdyB0aGUgdXNlIG9mCisgKiBhIGhlbHBlciBwcm9ncmFtIGZvciB0aGUgc3NoIGNsaWVudC4gVGhlIGhlbHBlciBwcm9ncmFtIHNob3VsZCBiZQorICogc3BlY2lmaWVkIGluIHRoZSBTU0hfQVNLUEFTUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgYW5kIGRiY2xpZW50CisgKiBzaG91bGQgYmUgcnVuIHdpdGggRElTUExBWSBzZXQgYW5kIG5vIHR0eS4gVGhlIHByb2dyYW0gc2hvdWxkCisgKiByZXR1cm4gdGhlIHBhc3N3b3JkIG9uIHN0YW5kYXJkIG91dHB1dCAqLworLyojZGVmaW5lIEVOQUJMRV9DTElfQVNLUEFTU19IRUxQRVIqLworCisvKiBSYW5kb20gZGV2aWNlIHRvIHVzZSAtIGRlZmluZSBlaXRoZXIgRFJPUEJFQVJfUkFORE9NX0RFViBvcgorICogRFJPUEJFQVJfUFJOR0RfU09DS0VULgorICogRFJPUEJFQVJfUkFORE9NX0RFViBpcyByZWNvbW1lbmRlZCBvbiBob3N0cyB3aXRoIGEgZ29vZCAvZGV2Lyh1KXJhbmRvbSwKKyAqIG90aGVyd2lzZSB1c2UgcnVuIHBybmdkIChvciBlZ2QgaWYgeW91IHdhbnQpLCBzcGVjaWZ5aW5nIHRoZSBzb2NrZXQuIAorICogVGhlIGRldmljZSB3aWxsIGJlIHF1ZXJpZWQgZm9yIGEgZmV3IGRvemVuIGJ5dGVzIG9mIHNlZWQgYSBjb3VwbGUgb2YgdGltZXMKKyAqIHBlciBzZXNzaW9uIChvciBtb3JlIGZvciB2ZXJ5IGxvbmctbGl2ZWQgc2Vzc2lvbnMpLiAqLworCisvKiBJZiB5b3UgYXJlIGxhY2tpbmcgZW50cm9weSBvbiB0aGUgc3lzdGVtIHRoZW4gdXNpbmcgL2Rldi91cmFuZG9tCisgKiB3aWxsIHByZXZlbnQgRHJvcGJlYXIgZnJvbSBibG9ja2luZyBvbiB0aGUgZGV2aWNlLiBUaGlzIGNvdWxkCisgKiBob3dldmVyIHNpZ25pZmljYW50bHkgcmVkdWNlIHRoZSBzZWN1cml0eSBvZiB5b3VyIHNzaCBjb25uZWN0aW9ucworICogaWYgdGhlIFBSTkcgc3RhdGUgYmVjb21lcyBndWVzc2FibGUgLSBtYWtlIHN1cmUgeW91IGtub3cgd2hhdCB5b3UgYXJlCisgKiBkb2luZyBpZiB5b3UgY2hhbmdlIHRoaXMuICovCisjZGVmaW5lIERST1BCRUFSX1JBTkRPTV9ERVYgIi9kZXYvcmFuZG9tIgorCisvKiBwcm5nZCBtdXN0IGJlIG1hbnVhbGx5IHNldCB1cCB0byBwcm9kdWNlIG91dHB1dCAqLworLyojZGVmaW5lIERST1BCRUFSX1BSTkdEX1NPQ0tFVCAiL3Zhci9ydW4vZHJvcGJlYXItcm5nIiovCisKKy8qIFNwZWNpZnkgdGhlIG51bWJlciBvZiBjbGllbnRzIHdlIHdpbGwgYWxsb3cgdG8gYmUgY29ubmVjdGVkIGJ1dAorICogbm90IHlldCBhdXRoZW50aWNhdGVkLiBBZnRlciB0aGlzIGxpbWl0LCBjb25uZWN0aW9ucyBhcmUgcmVqZWN0ZWQgKi8KKy8qIFRoZSBmaXJzdCBzZXR0aW5nIGlzIHBlci1JUCwgdG8gYXZvaWQgZGVuaWFsIG9mIHNlcnZpY2UgKi8KKyNpZm5kZWYgTUFYX1VOQVVUSF9QRVJfSVAKKyNkZWZpbmUgTUFYX1VOQVVUSF9QRVJfSVAgNQorI2VuZGlmCisKKy8qIEFuZCB0aGVuIGEgZ2xvYmFsIGxpbWl0IHRvIGF2b2lkIGNoZXdpbmcgbWVtb3J5IGlmIGNvbm5lY3Rpb25zIAorICogY29tZSBmcm9tIG1hbnkgSVBzICovCisjaWZuZGVmIE1BWF9VTkFVVEhfQ0xJRU5UUworI2RlZmluZSBNQVhfVU5BVVRIX0NMSUVOVFMgMzAKKyNlbmRpZgorCisvKiBNYXhpbXVtIG51bWJlciBvZiBmYWlsZWQgYXV0aGVudGljYXRpb24gdHJpZXMgKHNlcnZlciBvcHRpb24pICovCisjaWZuZGVmIE1BWF9BVVRIX1RSSUVTCisjZGVmaW5lIE1BWF9BVVRIX1RSSUVTIDEwCisjZW5kaWYKKworLyogVGhlIGRlZmF1bHQgZmlsZSB0byBzdG9yZSB0aGUgZGFlbW9uJ3MgcHJvY2VzcyBJRCwgZm9yIHNodXRkb3duCisgICBzY3JpcHRzIGV0Yy4gVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSAtUCBmbGFnICovCisjaWZuZGVmIERST1BCRUFSX1BJREZJTEUKKyNkZWZpbmUgRFJPUEJFQVJfUElERklMRSAiL3Zhci9ydW4vZHJvcGJlYXIucGlkIgorI2VuZGlmCisKKy8qIFRoZSBjb21tYW5kIHRvIGludm9rZSBmb3IgeGF1dGggd2hlbiB1c2luZyBYMTEgZm9yd2FyZGluZy4KKyAqICItcSIgZm9yIHF1aWV0ICovCisjaWZuZGVmIFhBVVRIX0NPTU1BTkQKKyNkZWZpbmUgWEFVVEhfQ09NTUFORCAiL3Vzci9YMTFSNi9iaW4veGF1dGggLXEiCisjZW5kaWYKKworLyogaWYgeW91IHdhbnQgdG8gZW5hYmxlIHJ1bm5pbmcgYW4gc2Z0cCBzZXJ2ZXIgKHN1Y2ggYXMgdGhlIG9uZSBpbmNsdWRlZCB3aXRoCisgKiBPcGVuU1NIKSwgc2V0IHRoZSBwYXRoIGJlbG93LiBJZiB0aGUgcGF0aCBpc24ndCBkZWZpbmVkLCBzZnRwIHdpbGwgbm90CisgKiBiZSBlbmFibGVkICovCisjaWZuZGVmIFNGVFBTRVJWRVJfUEFUSAorI2RlZmluZSBTRlRQU0VSVkVSX1BBVEggIi91c3IvbGliZXhlYy9zZnRwLXNlcnZlciIKKyNlbmRpZgorCisvKiBUaGlzIGlzIHVzZWQgYnkgdGhlIHNjcCBiaW5hcnkgd2hlbiB1c2VkIGFzIGEgY2xpZW50IGJpbmFyeS4gSWYgeW91J3JlCisgKiBub3QgdXNpbmcgdGhlIERyb3BiZWFyIGNsaWVudCwgeW91J2xsIG5lZWQgdG8gY2hhbmdlIGl0ICovCisjZGVmaW5lIF9QQVRIX1NTSF9QUk9HUkFNICIvc3lzdGVtL2Jpbi9zc2giCisKKy8qIFdoZXRoZXIgdG8gbG9nIGNvbW1hbmRzIGV4ZWN1dGVkIGJ5IGEgY2xpZW50LiBUaGlzIG9ubHkgbG9ncyB0aGUgCisgKiAoc2luZ2xlKSBjb21tYW5kIHNlbnQgdG8gdGhlIHNlcnZlciwgbm90IHdoYXQgYSB1c2VyIGRpZCBpbiBhIAorICogc2hlbGwvc2Z0cCBzZXNzaW9uIGV0Yy4gKi8KKy8qICNkZWZpbmUgTE9HX0NPTU1BTkRTICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBZb3Ugc2hvdWxkbid0IGVkaXQgYmVsb3cgaGVyZSB1bmxlc3MgeW91IGtub3cgeW91IG5lZWQgdG8uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBEUk9QQkVBUl9WRVJTSU9OCisjZGVmaW5lIERST1BCRUFSX1ZFUlNJT04gIjAuNDkiCisjZW5kaWYKKworI2RlZmluZSBMT0NBTF9JREVOVCAiU1NILTIuMC1kcm9wYmVhcl8iIERST1BCRUFSX1ZFUlNJT04KKyNkZWZpbmUgUFJPR05BTUUgImRyb3BiZWFyIgorCisvKiBTcGVjIHJlY29tbWVuZHMgYWZ0ZXIgb25lIGhvdXIgb3IgMSBnaWdhYnl0ZSBvZiBkYXRhLiBPbmUgaG91cgorICogaXMgYSBiaXQgdG9vIHZlcmJvc2UsIHNvIHdlIHRyeSA4IGhvdXJzICovCisjaWZuZGVmIEtFWF9SRUtFWV9USU1FT1VUCisjZGVmaW5lIEtFWF9SRUtFWV9USU1FT1VUICgzNjAwICogOCkKKyNlbmRpZgorI2lmbmRlZiBLRVhfUkVLRVlfREFUQQorI2RlZmluZSBLRVhfUkVLRVlfREFUQSAoMTw8MzApIC8qIDJeMzAgPT0gMUdCLCB0aGlzIHZhbHVlIG11c3QgYmUgPCBJTlRfTUFYICovCisjZW5kaWYKKy8qIENsb3NlIGNvbm5lY3Rpb25zIHRvIGNsaWVudHMgd2hpY2ggaGF2ZW4ndCBhdXRob3Jpc2VkIGFmdGVyIEFVVEhfVElNRU9VVCAqLworI2lmbmRlZiBBVVRIX1RJTUVPVVQKKyNkZWZpbmUgQVVUSF9USU1FT1VUIDMwMCAvKiB3ZSBjaG9vc2UgNSBtaW51dGVzICovCisjZW5kaWYKKworLyogTWluaW11bSBrZXkgc2l6ZXMgZm9yIERTUyBhbmQgUlNBICovCisjaWZuZGVmIE1JTl9EU1NfS0VZTEVOCisjZGVmaW5lIE1JTl9EU1NfS0VZTEVOIDUxMgorI2VuZGlmCisjaWZuZGVmIE1JTl9SU0FfS0VZTEVOCisjZGVmaW5lIE1JTl9SU0FfS0VZTEVOIDUxMgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX0JBTk5FUl9TSVpFIDIwMDAgLyogdGhpcyBpcyAyNSo4MCBjaGFycywgYW55IG1vcmUgaXMgZm9vbGlzaCAqLworI2RlZmluZSBNQVhfQkFOTkVSX0xJTkVTIDIwIC8qIEhvdyBtYW55IGxpbmVzIHRoZSBjbGllbnQgd2lsbCBkaXNwbGF5ICovCisKKy8qIHRoZSBudW1iZXIgb2YgTkFNRT1WQUxVRSBwYWlycyB0byBtYWxsb2MgZm9yIGVudmlyb24sIGlmIHdlIGRvbid0IGhhdmUKKyAqIHRoZSBjbGVhcmVudigpIGZ1bmN0aW9uICovCisjZGVmaW5lIEVOVl9TSVpFIDEwMAorCisjZGVmaW5lIE1BWF9DTURfTEVOIDEwMjQgLyogbWF4IGxlbmd0aCBvZiBhIGNvbW1hbmQgKi8KKyNkZWZpbmUgTUFYX1RFUk1fTEVOIDIwMCAvKiBtYXggbGVuZ3RoIG9mIFRFUk0gbmFtZSAqLworCisjZGVmaW5lIE1BWF9IT1NUX0xFTiAyNTQgLyogbWF4IGhvc3RuYW1lIGxlbiBmb3IgdGNwIGZ3ZGluZyAqLworI2RlZmluZSBNQVhfSVBfTEVOIDE1IC8qIHN0cmxlbigiMjU1LjI1NS4yNTUuMjU1IikgPT0gMTUgKi8KKworI2RlZmluZSBEUk9QQkVBUl9NQVhfUE9SVFMgMTAgLyogbWF4IG51bWJlciBvZiBwb3J0cyB3aGljaCBjYW4gYmUgc3BlY2lmaWVkLAorCQkJCQkJCQkgaXB2NCBhbmQgaXB2NiBkb24ndCBjb3VudCB0d2ljZSAqLworCisvKiBFYWNoIHBvcnQgbWlnaHQgaGF2ZSBhdCBsZWFzdCBhIHY0IGFuZCBhIHY2IGFkZHJlc3MgKi8KKyNkZWZpbmUgTUFYX0xJU1RFTl9BRERSIChEUk9QQkVBUl9NQVhfUE9SVFMqMykKKworI2RlZmluZSBfUEFUSF9UVFkgIi9kZXYvdHR5IgorCisjZGVmaW5lIF9QQVRIX0NQICIvYmluL2NwIgorCisvKiBUaW1lb3V0cyBpbiBzZWNvbmRzICovCisjZGVmaW5lIFNFTEVDVF9USU1FT1VUIDIwCisKKy8qIHN1Y2Nlc3MvZmFpbHVyZSBkZWZpbmVzICovCisjZGVmaW5lIERST1BCRUFSX1NVQ0NFU1MgMAorI2RlZmluZSBEUk9QQkVBUl9GQUlMVVJFIC0xCisKKy8qIHZhcmlvdXMgYWxnb3JpdGhtIGlkZW50aWZpZXJzICovCisjZGVmaW5lIERST1BCRUFSX0tFWF9ESF9HUk9VUDEgMAorCisjZGVmaW5lIERST1BCRUFSX1NJR05LRVlfQU5ZIDAKKyNkZWZpbmUgRFJPUEJFQVJfU0lHTktFWV9SU0EgMQorI2RlZmluZSBEUk9QQkVBUl9TSUdOS0VZX0RTUyAyCisjZGVmaW5lIERST1BCRUFSX1NJR05LRVlfTk9ORSAzCisKKyNkZWZpbmUgRFJPUEJFQVJfQ09NUF9OT05FIDAKKyNkZWZpbmUgRFJPUEJFQVJfQ09NUF9aTElCIDEKKworLyogUmVxdWlyZWQgZm9yIHB1YmtleSBhdXRoICovCisjaWYgZGVmaW5lZChFTkFCTEVfU1ZSX1BVQktFWV9BVVRIKSB8fCBkZWZpbmVkKERST1BCRUFSX0NMSUVOVCkKKyNkZWZpbmUgRFJPUEJFQVJfU0lHTktFWV9WRVJJRlkKKyNlbmRpZgorCisvKiBTSEExIGlzIDIwIGJ5dGVzID09IDE2MCBiaXRzICovCisjZGVmaW5lIFNIQTFfSEFTSF9TSVpFIDIwCisvKiBTSEE1MTIgaXMgNjQgYnl0ZXMgPT0gNTEyIGJpdHMgKi8KKyNkZWZpbmUgU0hBNTEyX0hBU0hfU0laRSA2NAorLyogTUQ1IGlzIDE2IGJ5dGVzID0gMTI4IGJpdHMgKi8KKyNkZWZpbmUgTUQ1X0hBU0hfU0laRSAxNgorCisvKiBsYXJnZXN0IG9mIE1ENSBhbmQgU0hBMSAqLworI2RlZmluZSBNQVhfTUFDX0xFTiBTSEExX0hBU0hfU0laRQorCisKKyNkZWZpbmUgTUFYX0tFWV9MRU4gMzIgLyogMjU2IGJpdHMgZm9yIGFlczI1NiBldGMgKi8KKyNkZWZpbmUgTUFYX0lWX0xFTiAyMCAvKiBtdXN0IGJlIHNhbWUgYXMgbWF4IGJsb2Nrc2l6ZSwgCisJCQkJCQkgYW5kID49IFNIQTFfSEFTSF9TSVpFICovCisjZGVmaW5lIE1BWF9NQUNfS0VZIDIwCisKKyNkZWZpbmUgTUFYX05BTUVfTEVOIDY0IC8qIG1heGltdW0gbGVuZ3RoIG9mIGEgcHJvdG9jb2wgbmFtZSwgaXNuJ3QKKwkJCQkJCSAgIGV4cGxpY2l0bHkgc3BlY2lmaWVkIGZvciBhbGwgcHJvdG9jb2xzIChqdXN0CisJCQkJCQkgICBmb3IgYWxnb3MpIGJ1dCBzZWVtcyB2YWxpZCAqLworCisjZGVmaW5lIE1BWF9QUk9QT1NFRF9BTEdPIDIwCisKKy8qIHNpemUvY291bnQgbGltaXRzICovCisKKyNkZWZpbmUgTUFYX1BBQ0tFVF9MRU4gMzUwMDAKKyNkZWZpbmUgTUlOX1BBQ0tFVF9MRU4gMTYKKyNkZWZpbmUgTUFYX1BBWUxPQURfTEVOIDMyNzY4CisKKyNkZWZpbmUgTUFYX1RSQU5TX1BBWUxPQURfTEVOIDMyNzY4CisjZGVmaW5lIE1BWF9UUkFOU19QQUNLRVRfTEVOIChNQVhfVFJBTlNfUEFZTE9BRF9MRU4rNTApCisKKyNkZWZpbmUgTUFYX1RSQU5TX1dJTkRPVyA1MDAwMDAwMDAgLyogNTAwTUIgaXMgc3VmZmljaWVudCwgc3RvcHBpbmcgb3ZlcmZsb3cgKi8KKyNkZWZpbmUgTUFYX1RSQU5TX1dJTl9JTkNSIDUwMDAwMDAwMCAvKiBvdmVyZmxvdyBwcmV2ZW50aW9uICovCisKKyNkZWZpbmUgTUFYX1NUUklOR19MRU4gMTQwMCAvKiB+PSBNQVhfUFJPUE9TRURfQUxHTyAqIE1BWF9OQU1FX0xFTiwgYWxzbworCQkJCQkJCSAgIGlzIHRoZSBtYXggbGVuZ3RoIGZvciBhIHBhc3N3b3JkIGV0YyAqLworCisvKiBGb3IgYSA0MDk2IGJpdCBEU1Mga2V5LCBlbXBpcmljYWxseSBkZXRlcm1pbmVkICovCisjZGVmaW5lIE1BWF9QVUJLRVlfU0laRSAxNzAwCisvKiBGb3IgYSA0MDk2IGJpdCBEU1Mga2V5LCBlbXBpcmljYWxseSBkZXRlcm1pbmVkICovCisjZGVmaW5lIE1BWF9QUklWS0VZX1NJWkUgMTcwMAorCisvKiBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSBiaWdudW0gcG9ydGlvbiBvZiB0aGUga2V4aGFzaCBidWZmZXIgKi8KKy8qIFNlY3QuIDggb2YgdGhlIHRyYW5zcG9ydCBkcmFmdCwgS19TICsgZSArIGYgKyBLICovCisjZGVmaW5lIEtFWEhBU0hCVUZfTUFYX0lOVFMgKDE3MDAgKyAxMzAgKyAxMzAgKyAxMzApCisKKyNkZWZpbmUgRFJPUEJFQVJfTUFYX1NPQ0tTIDIgLyogSVB2NCwgSVB2NiBhcmUgYWxsIHdlJ2xsIGdldCBmb3Igbm93LiBSZXZpc2l0CisJCQkJCQkJCWluIGEgZmV3IHllYXJzIHRpbWUuLi4uICovCisKKyNkZWZpbmUgRFJPUEJFQVJfTUFYX0NMSV9QQVNTIDEwMjQKKworI2RlZmluZSBEUk9QQkVBUl9NQVhfQ0xJX0lOVEVSQUNUX1BST01QVFMgODAgLyogVGhlIG51bWJlciBvZiBwcm9tcHRzIHdlJ2xsIAorCQkJCQkJCQkJCQkJYWNjZXB0IGZvciBrZXliLWludGVyYWN0aXZlCisJCQkJCQkJCQkJCQlhdXRoICovCisKKyNpZiBkZWZpbmVkKERST1BCRUFSX0FFUzI1Nl9DQkMpIHx8IGRlZmluZWQoRFJPUEJFQVJfQUVTMTI4X0NCQykKKyNkZWZpbmUgRFJPUEJFQVJfQUVTX0NCQworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERST1BCRUFSX1RXT0ZJU0gyNTZfQ0JDKSB8fCBkZWZpbmVkKERST1BCRUFSX1RXT0ZJU0gxMjhfQ0JDKQorI2RlZmluZSBEUk9QQkVBUl9UV09GSVNIX0NCQworI2VuZGlmCisKKyNpZm5kZWYgRU5BQkxFX1gxMUZXRAorI2RlZmluZSBESVNBQkxFX1gxMUZXRAorI2VuZGlmCisKKyNpZm5kZWYgRU5BQkxFX0FHRU5URldECisjZGVmaW5lIERJU0FCTEVfQUdFTlRGV0QKKyNlbmRpZgorCisjaWYgZGVmaW5lZChFTkFCTEVfQ0xJX1JFTU9URVRDUEZXRCkgfHwgZGVmaW5lZChFTkFCTEVfQ0xJX0xPQ0FMVENQRldEKQorI2RlZmluZSBFTkFCTEVfQ0xJX0FOWVRDUEZXRCAKKyNlbmRpZgorCisjaWYgZGVmaW5lZChFTkFCTEVfQ0xJX0xPQ0FMVENQRldEKSB8fCBkZWZpbmVkKEVOQUJMRV9TVlJfUkVNT1RFVENQRldEKQorI2RlZmluZSBEUk9QQkVBUl9UQ1BfQUNDRVBUCisjZW5kaWYKKworI2lmIGRlZmluZWQoRU5BQkxFX0NMSV9SRU1PVEVUQ1BGV0QpIHx8IGRlZmluZWQoRU5BQkxFX0NMSV9MT0NBTFRDUEZXRCkgfHwgXAorCWRlZmluZWQoRU5BQkxFX1NWUl9SRU1PVEVUQ1BGV0QpIHx8IGRlZmluZWQoRU5BQkxFX1NWUl9MT0NBTFRDUEZXRCkgfHwgXAorCWRlZmluZWQoRU5BQkxFX0FHRU5URldEKSB8fCBkZWZpbmVkKEVOQUJMRV9YMTFGV0QpCisjZGVmaW5lIFVTSU5HX0xJU1RFTkVSUworI2VuZGlmCisKKyNpZiBkZWZpbmVkKERST1BCRUFSX0NMSUVOVCkgfHwgZGVmaW5lZChFTkFCTEVfU1ZSX1BVQktFWV9BVVRIKQorI2RlZmluZSBEUk9QQkVBUl9LRVlfTElORVMgLyogaWUgd2UncmUgdXNpbmcgYXV0aG9yaXplZF9rZXlzIG9yIGtub3duX2hvc3RzICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoRU5BQkxFX1NWUl9QQVNTV09SRF9BVVRIKSAmJiBkZWZpbmVkKEVOQUJMRV9TVlJfUEFNX0FVVEgpCisjZXJyb3IgIllvdSBjYW4ndCB0dXJuIG9uIFBBU1NXT1JEIGFuZCBQQU0gYXV0aCBib3RoIGF0IG9uY2UuIEZpeCBpdCBpbiBvcHRpb25zLmgiCisjZW5kaWYKKworI2lmIGRlZmluZWQoRFJPUEJFQVJfUkFORE9NX0RFVikgJiYgZGVmaW5lZChEUk9QQkVBUl9QUk5HRF9TT0NLRVQpCisjZXJyb3IgIllvdSBjYW4ndCB0dXJuIG9uIERST1BCRUFSX1BSTkdEX1NPQ0tFVCBhbmQgRFJPUEJFQVJfUkFORE9NX0RFViBhdCBvbmNlIgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChEUk9QQkVBUl9SQU5ET01fREVWKSAmJiAhZGVmaW5lZChEUk9QQkVBUl9QUk5HRF9TT0NLRVQpCisjZXJyb3IgIllvdSBtdXN0IGNob29zZSBvbmUgb2YgRFJPUEJFQVJfUFJOR0RfU09DS0VUIG9yIERST1BCRUFSX1JBTkRPTV9ERVYgaW4gb3B0aW9ucy5oIgorI2VuZGlmCisKKy8qIFdlIHVzZSBkcm9wYmVhcl9jbGllbnQgYW5kIGRyb3BiZWFyX3NlcnZlciBhcyBzaG9ydGN1dHMgdG8gYXZvaWQgcmVkdW5kYW50CisgKiBjb2RlLCBpZiB3ZSdyZSBqdXN0IGNvbXBpbGluZyBhcyBjbGllbnQgb3Igc2VydmVyICovCisjaWYgZGVmaW5lZChEUk9QQkVBUl9TRVJWRVIpICYmIGRlZmluZWQoRFJPUEJFQVJfQ0xJRU5UKQorCisjZGVmaW5lIElTX0RST1BCRUFSX1NFUlZFUiAoc2VzLmlzc2VydmVyID09IDEpCisjZGVmaW5lIElTX0RST1BCRUFSX0NMSUVOVCAoc2VzLmlzc2VydmVyID09IDApCisKKyNlbGlmIGRlZmluZWQoRFJPUEJFQVJfU0VSVkVSKQorCisjZGVmaW5lIElTX0RST1BCRUFSX1NFUlZFUiAxCisjZGVmaW5lIElTX0RST1BCRUFSX0NMSUVOVCAwCisKKyNlbGlmIGRlZmluZWQoRFJPUEJFQVJfQ0xJRU5UKQorCisjZGVmaW5lIElTX0RST1BCRUFSX1NFUlZFUiAwCisjZGVmaW5lIElTX0RST1BCRUFSX0NMSUVOVCAxCisKKyNlbHNlCisjZXJyb3IgWW91IG11c3QgY29tcGlsZWQgd2l0aCBlaXRoZXIgRFJPUEJFQVJfQ0xJRU5UIG9yIERST1BCRUFSX1NFUlZFUiBzZWxlY3RlZAorI2VuZGlmCisKKyNlbmRpZiAvKiBfT1BUSU9OU19IXyAqLwpkaWZmIC0tZ2l0IGEvcGFja2V0LmMgYi9wYWNrZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTdjNjdhCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2V0LmMKQEAgLTAsMCArMSw2MDkgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgInBhY2tldC5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJhbGdvLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAia2V4LmgiCisjaW5jbHVkZSAicmFuZG9tLmgiCisjaW5jbHVkZSAic2VydmljZS5oIgorI2luY2x1ZGUgImF1dGguaCIKKyNpbmNsdWRlICJjaGFubmVsLmgiCisKK3N0YXRpYyB2b2lkIHJlYWRfcGFja2V0X2luaXQoKTsKK3N0YXRpYyB2b2lkIHdyaXRlbWFjKGJ1ZmZlciAqIG91dHB1dGJ1ZmZlciwgYnVmZmVyICogY2xlYXJ3cml0ZWJ1Zik7CitzdGF0aWMgaW50IGNoZWNrbWFjKGJ1ZmZlciogaGFzaGJ1ZiwgYnVmZmVyKiByZWFkYnVmKTsKKworI2RlZmluZSBaTElCX0NPTVBSRVNTX0lOQ1IgMjAgLyogdGhpcyBpcyAxMiBieXRlcyArIDAuMSUgb2YgODAwMCBieXRlcyAqLworI2RlZmluZSBaTElCX0RFQ09NUFJFU1NfSU5DUiAxMDAKKyNpZm5kZWYgRElTQUJMRV9aTElCCitzdGF0aWMgYnVmZmVyKiBidWZfZGVjb21wcmVzcyhidWZmZXIqIGJ1ZiwgdW5zaWduZWQgaW50IGxlbik7CitzdGF0aWMgdm9pZCBidWZfY29tcHJlc3MoYnVmZmVyICogZGVzdCwgYnVmZmVyICogc3JjLCB1bnNpZ25lZCBpbnQgbGVuKTsKKyNlbmRpZgorCisvKiBub24tYmxvY2tpbmcgZnVuY3Rpb24gd3JpdGluZyBvdXQgYSBjdXJyZW50IGVuY3J5cHRlZCBwYWNrZXQgKi8KK3ZvaWQgd3JpdGVfcGFja2V0KCkgeworCisJaW50IGxlbiwgd3JpdHRlbjsKKwlidWZmZXIgKiB3cml0ZWJ1ZiA9IE5VTEw7CisJCisJVFJBQ0UoKCJlbnRlciB3cml0ZV9wYWNrZXQiKSkKKwlkcm9wYmVhcl9hc3NlcnQoIWlzZW1wdHkoJnNlcy53cml0ZXF1ZXVlKSk7CisKKwkvKiBHZXQgdGhlIG5leHQgYnVmZmVyIGluIHRoZSBxdWV1ZSBvZiBlbmNyeXB0ZWQgcGFja2V0cyB0byB3cml0ZSovCisJd3JpdGVidWYgPSAoYnVmZmVyKilleGFtaW5lKCZzZXMud3JpdGVxdWV1ZSk7CisKKwlsZW4gPSB3cml0ZWJ1Zi0+bGVuIC0gd3JpdGVidWYtPnBvczsKKwlkcm9wYmVhcl9hc3NlcnQobGVuID4gMCk7CisJLyogVHJ5IHRvIHdyaXRlIGFzIG11Y2ggYXMgcG9zc2libGUgKi8KKwl3cml0dGVuID0gd3JpdGUoc2VzLnNvY2ssIGJ1Zl9nZXRwdHIod3JpdGVidWYsIGxlbiksIGxlbik7CisKKwlpZiAod3JpdHRlbiA8IDApIHsKKwkJaWYgKGVycm5vID09IEVJTlRSKSB7CisJCQlUUkFDRSgoImxlYXZlIHdyaXRlcGFja2V0OiBFSU5UUiIpKQorCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJZHJvcGJlYXJfZXhpdCgiZXJyb3Igd3JpdGluZyIpOworCQl9CisJfSAKKworCWlmICh3cml0dGVuID09IDApIHsKKwkJc2VzLnJlbW90ZWNsb3NlZCgpOworCX0KKworCWlmICh3cml0dGVuID09IGxlbikgeworCQkvKiBXZSd2ZSBmaW5pc2hlZCB3aXRoIHRoZSBwYWNrZXQsIGZyZWUgaXQgKi8KKwkJZGVxdWV1ZSgmc2VzLndyaXRlcXVldWUpOworCQlidWZfZnJlZSh3cml0ZWJ1Zik7CisJCXdyaXRlYnVmID0gTlVMTDsKKwl9IGVsc2UgeworCQkvKiBNb3JlIHBhY2tldCBsZWZ0IHRvIHdyaXRlLCBsZWF2ZSBpdCBpbiB0aGUgcXVldWUgZm9yIGxhdGVyICovCisJCWJ1Zl9pbmNycG9zKHdyaXRlYnVmLCB3cml0dGVuKTsKKwl9CisKKwlUUkFDRSgoImxlYXZlIHdyaXRlX3BhY2tldCIpKQorfQorCisvKiBOb24tYmxvY2tpbmcgZnVuY3Rpb24gcmVhZGluZyBhdmFpbGFibGUgcG9ydGlvbiBvZiBhIHBhY2tldCBpbnRvIHRoZQorICogc2VzJ3MgYnVmZmVyLCBkZWNyeXB0aW5nIHRoZSBsZW5ndGggaWYgZW5jcnlwdGVkLCBkZWNyeXB0aW5nIHRoZQorICogZnVsbCBwb3J0aW9uIGlmIHBvc3NpYmxlICovCit2b2lkIHJlYWRfcGFja2V0KCkgeworCisJaW50IGxlbjsKKwl1bnNpZ25lZCBpbnQgbWF4bGVuOworCXVuc2lnbmVkIGNoYXIgYmxvY2tzaXplOworCisJVFJBQ0UoKCJlbnRlciByZWFkX3BhY2tldCIpKQorCWJsb2Nrc2l6ZSA9IHNlcy5rZXlzLT5yZWN2X2FsZ29fY3J5cHQtPmJsb2Nrc2l6ZTsKKwkKKwlpZiAoc2VzLnJlYWRidWYgPT0gTlVMTCB8fCBzZXMucmVhZGJ1Zi0+bGVuIDwgYmxvY2tzaXplKSB7CisJCS8qIEluIHRoZSBmaXJzdCBibG9ja3NpemUgb2YgYSBwYWNrZXQgKi8KKworCQkvKiBSZWFkIHRoZSBmaXJzdCBibG9ja3NpemUgb2YgdGhlIHBhY2tldCwgc28gd2UgY2FuIGRlY3J5cHQgaXQgYW5kCisJCSAqIGZpbmQgdGhlIGxlbmd0aCBvZiB0aGUgd2hvbGUgcGFja2V0ICovCisJCXJlYWRfcGFja2V0X2luaXQoKTsKKworCQkvKiBJZiB3ZSBkb24ndCBoYXZlIHRoZSBsZW5ndGggb2YgZGVjcnlwdHJlYWRidWYsIHdlIGRpZG4ndCByZWFkCisJCSAqIGEgd2hvbGUgYmxvY2tzaXplIGFuZCBzaG91bGQgZXhpdCAqLworCQlpZiAoc2VzLmRlY3J5cHRyZWFkYnVmLT5sZW4gPT0gMCkgeworCQkJVFJBQ0UoKCJsZWF2ZSByZWFkX3BhY2tldDogcGFja2V0aW5pdCBkb25lIikpCisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBBdHRlbXB0IHRvIHJlYWQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcGFja2V0LCBub3RlIHRoYXQgdGhlcmUKKwkgKiBtaWdodG4ndCBiZSBhbnkgYXZhaWxhYmxlIChFQUdBSU4pICovCisJZHJvcGJlYXJfYXNzZXJ0KHNlcy5yZWFkYnVmICE9IE5VTEwpOworCW1heGxlbiA9IHNlcy5yZWFkYnVmLT5sZW4gLSBzZXMucmVhZGJ1Zi0+cG9zOworCWxlbiA9IHJlYWQoc2VzLnNvY2ssIGJ1Zl9nZXRwdHIoc2VzLnJlYWRidWYsIG1heGxlbiksIG1heGxlbik7CisKKwlpZiAobGVuID09IDApIHsKKwkJc2VzLnJlbW90ZWNsb3NlZCgpOworCX0KKworCWlmIChsZW4gPCAwKSB7CisJCWlmIChlcnJubyA9PSBFSU5UUiB8fCBlcnJubyA9PSBFQUdBSU4pIHsKKwkJCVRSQUNFKCgibGVhdmUgcmVhZF9wYWNrZXQ6IEVJTlRSIG9yIEVBR0FJTiIpKQorCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJZHJvcGJlYXJfZXhpdCgiZXJyb3IgcmVhZGluZzogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQl9CisJfQorCisJYnVmX2luY3Jwb3Moc2VzLnJlYWRidWYsIGxlbik7CisKKwlpZiAoKHVuc2lnbmVkIGludClsZW4gPT0gbWF4bGVuKSB7CisJCS8qIFRoZSB3aG9sZSBwYWNrZXQgaGFzIGJlZW4gcmVhZCAqLworCQlkZWNyeXB0X3BhY2tldCgpOworCQkvKiBUaGUgbWFpbiBzZWxlY3QoKSBsb29wIHByb2Nlc3NfcGFja2V0KCkgdG8KKwkJICogaGFuZGxlIHRoZSBwYWNrZXQgY29udGVudHMuLi4gKi8KKwl9CisJVFJBQ0UoKCJsZWF2ZSByZWFkX3BhY2tldCIpKQorfQorCisvKiBGdW5jdGlvbiB1c2VkIHRvIHJlYWQgdGhlIGluaXRpYWwgcG9ydGlvbiBvZiBhIHBhY2tldCwgYW5kIGRldGVybWluZSB0aGUKKyAqIGxlbmd0aC4gT25seSBjYWxsZWQgZHVyaW5nIHRoZSBmaXJzdCBCTE9DS1NJWkUgb2YgYSBwYWNrZXQuICovCitzdGF0aWMgdm9pZCByZWFkX3BhY2tldF9pbml0KCkgeworCisJdW5zaWduZWQgaW50IG1heGxlbjsKKwlpbnQgbGVuOworCXVuc2lnbmVkIGNoYXIgYmxvY2tzaXplOworCXVuc2lnbmVkIGNoYXIgbWFjc2l6ZTsKKworCisJYmxvY2tzaXplID0gc2VzLmtleXMtPnJlY3ZfYWxnb19jcnlwdC0+YmxvY2tzaXplOworCW1hY3NpemUgPSBzZXMua2V5cy0+cmVjdl9hbGdvX21hYy0+aGFzaHNpemU7CisKKwlpZiAoc2VzLnJlYWRidWYgPT0gTlVMTCkgeworCQkvKiBzdGFydCBvZiBhIG5ldyBwYWNrZXQgKi8KKwkJc2VzLnJlYWRidWYgPSBidWZfbmV3KElOSVRfUkVBREJVRik7CisJCWRyb3BiZWFyX2Fzc2VydChzZXMuZGVjcnlwdHJlYWRidWYgPT0gTlVMTCk7CisJCXNlcy5kZWNyeXB0cmVhZGJ1ZiA9IGJ1Zl9uZXcoYmxvY2tzaXplKTsKKwl9CisKKwltYXhsZW4gPSBibG9ja3NpemUgLSBzZXMucmVhZGJ1Zi0+cG9zOworCQkJCisJLyogcmVhZCB0aGUgcmVzdCBvZiB0aGUgcGFja2V0IGlmIHBvc3NpYmxlICovCisJbGVuID0gcmVhZChzZXMuc29jaywgYnVmX2dldHdyaXRlcHRyKHNlcy5yZWFkYnVmLCBtYXhsZW4pLAorCQkJbWF4bGVuKTsKKwlpZiAobGVuID09IDApIHsKKwkJc2VzLnJlbW90ZWNsb3NlZCgpOworCX0KKwlpZiAobGVuIDwgMCkgeworCQlpZiAoZXJybm8gPT0gRUlOVFIpIHsKKwkJCVRSQUNFKCgibGVhdmUgcmVhZF9wYWNrZXRfaW5pdDogRUlOVFIiKSkKKwkJCXJldHVybjsKKwkJfQorCQlkcm9wYmVhcl9leGl0KCJlcnJvciByZWFkaW5nOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCisJYnVmX2luY3J3cml0ZXBvcyhzZXMucmVhZGJ1ZiwgbGVuKTsKKworCWlmICgodW5zaWduZWQgaW50KWxlbiAhPSBtYXhsZW4pIHsKKwkJLyogZG9uJ3QgaGF2ZSBlbm91Z2ggYnl0ZXMgdG8gZGV0ZXJtaW5lIGxlbmd0aCwgZ2V0IG5leHQgdGltZSAqLworCQlyZXR1cm47CisJfQorCisJLyogbm93IHdlIGhhdmUgdGhlIGZpcnN0IGJsb2NrLCBuZWVkIHRvIGdldCBwYWNrZXQgbGVuZ3RoLCBzbyB3ZSBkZWNyeXB0CisJICogdGhlIGZpcnN0IGJsb2NrIChvbmx5IG5lZWQgZmlyc3QgNCBieXRlcykgKi8KKwlidWZfc2V0cG9zKHNlcy5yZWFkYnVmLCAwKTsKKwlpZiAoc2VzLmtleXMtPnJlY3ZfYWxnb19jcnlwdC0+Y2lwaGVyZGVzYyA9PSBOVUxMKSB7CisJCS8qIGNvcHkgaXQgKi8KKwkJbWVtY3B5KGJ1Zl9nZXR3cml0ZXB0cihzZXMuZGVjcnlwdHJlYWRidWYsIGJsb2Nrc2l6ZSksCisJCQkJYnVmX2dldHB0cihzZXMucmVhZGJ1ZiwgYmxvY2tzaXplKSwKKwkJCQlibG9ja3NpemUpOworCX0gZWxzZSB7CisJCS8qIGRlY3J5cHQgaXQgKi8KKwkJaWYgKGNiY19kZWNyeXB0KGJ1Zl9nZXRwdHIoc2VzLnJlYWRidWYsIGJsb2Nrc2l6ZSksIAorCQkJCQlidWZfZ2V0d3JpdGVwdHIoc2VzLmRlY3J5cHRyZWFkYnVmLGJsb2Nrc2l6ZSksCisJCQkJCWJsb2Nrc2l6ZSwKKwkJCQkJJnNlcy5rZXlzLT5yZWN2X3N5bW1ldHJpY19zdHJ1Y3QpICE9IENSWVBUX09LKSB7CisJCQlkcm9wYmVhcl9leGl0KCJlcnJvciBkZWNyeXB0aW5nIik7CisJCX0KKwl9CisJYnVmX3NldGxlbihzZXMuZGVjcnlwdHJlYWRidWYsIGJsb2Nrc2l6ZSk7CisJbGVuID0gYnVmX2dldGludChzZXMuZGVjcnlwdHJlYWRidWYpICsgNCArIG1hY3NpemU7CisKKwlidWZfc2V0cG9zKHNlcy5yZWFkYnVmLCBibG9ja3NpemUpOworCisJLyogY2hlY2sgcGFja2V0IGxlbmd0aCAqLworCWlmICgobGVuID4gTUFYX1BBQ0tFVF9MRU4pIHx8CisJCShsZW4gPCBNSU5fUEFDS0VUX0xFTiArIG1hY3NpemUpIHx8CisJCSgobGVuIC0gbWFjc2l6ZSkgJSBibG9ja3NpemUgIT0gMCkpIHsKKwkJZHJvcGJlYXJfZXhpdCgiYmFkIHBhY2tldCBzaXplICVkIiwgbGVuKTsKKwl9CisKKwlidWZfcmVzaXplKHNlcy5yZWFkYnVmLCBsZW4pOworCWJ1Zl9zZXRsZW4oc2VzLnJlYWRidWYsIGxlbik7CisKK30KKworLyogaGFuZGxlIHRoZSByZWNlaXZlZCBwYWNrZXQgKi8KK3ZvaWQgZGVjcnlwdF9wYWNrZXQoKSB7CisKKwl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIG1hY3NpemU7CisJdW5zaWduZWQgaW50IHBhZGxlbjsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJVFJBQ0UoKCJlbnRlciBkZWNyeXB0X3BhY2tldCIpKQorCWJsb2Nrc2l6ZSA9IHNlcy5rZXlzLT5yZWN2X2FsZ29fY3J5cHQtPmJsb2Nrc2l6ZTsKKwltYWNzaXplID0gc2VzLmtleXMtPnJlY3ZfYWxnb19tYWMtPmhhc2hzaXplOworCisJc2VzLmtleHN0YXRlLmRhdGFyZWN2ICs9IHNlcy5yZWFkYnVmLT5sZW47CisKKwkvKiB3ZSd2ZSBhbHJlYWR5IGRlY3J5cHRlZCB0aGUgZmlyc3QgYmxvY2tzaXplIGluIHJlYWRfcGFja2V0X2luaXQgKi8KKwlidWZfc2V0cG9zKHNlcy5yZWFkYnVmLCBibG9ja3NpemUpOworCisJYnVmX3Jlc2l6ZShzZXMuZGVjcnlwdHJlYWRidWYsIHNlcy5yZWFkYnVmLT5sZW4gLSBtYWNzaXplKTsKKwlidWZfc2V0bGVuKHNlcy5kZWNyeXB0cmVhZGJ1Ziwgc2VzLmRlY3J5cHRyZWFkYnVmLT5zaXplKTsKKwlidWZfc2V0cG9zKHNlcy5kZWNyeXB0cmVhZGJ1ZiwgYmxvY2tzaXplKTsKKworCS8qIGRlY3J5cHQgaWYgZW5jcnlwdGlvbiBpcyBzZXQsIG1lbWNweSBvdGhlcndpc2UgKi8KKwlpZiAoc2VzLmtleXMtPnJlY3ZfYWxnb19jcnlwdC0+Y2lwaGVyZGVzYyA9PSBOVUxMKSB7CisJCS8qIGNvcHkgaXQgKi8KKwkJbGVuID0gc2VzLnJlYWRidWYtPmxlbiAtIG1hY3NpemUgLSBibG9ja3NpemU7CisJCW1lbWNweShidWZfZ2V0d3JpdGVwdHIoc2VzLmRlY3J5cHRyZWFkYnVmLCBsZW4pLAorCQkJCWJ1Zl9nZXRwdHIoc2VzLnJlYWRidWYsIGxlbiksIGxlbik7CisJfSBlbHNlIHsKKwkJLyogZGVjcnlwdCAqLworCQl3aGlsZSAoc2VzLnJlYWRidWYtPnBvcyA8IHNlcy5yZWFkYnVmLT5sZW4gLSBtYWNzaXplKSB7CisJCQlpZiAoY2JjX2RlY3J5cHQoYnVmX2dldHB0cihzZXMucmVhZGJ1ZiwgYmxvY2tzaXplKSwgCisJCQkJCQlidWZfZ2V0d3JpdGVwdHIoc2VzLmRlY3J5cHRyZWFkYnVmLCBibG9ja3NpemUpLAorCQkJCQkJYmxvY2tzaXplLAorCQkJCQkJJnNlcy5rZXlzLT5yZWN2X3N5bW1ldHJpY19zdHJ1Y3QpICE9IENSWVBUX09LKSB7CisJCQkJZHJvcGJlYXJfZXhpdCgiZXJyb3IgZGVjcnlwdGluZyIpOworCQkJfQorCQkJYnVmX2luY3Jwb3Moc2VzLnJlYWRidWYsIGJsb2Nrc2l6ZSk7CisJCQlidWZfaW5jcndyaXRlcG9zKHNlcy5kZWNyeXB0cmVhZGJ1ZiwgYmxvY2tzaXplKTsKKwkJfQorCX0KKworCS8qIGNoZWNrIHRoZSBobWFjICovCisJYnVmX3NldHBvcyhzZXMucmVhZGJ1Ziwgc2VzLnJlYWRidWYtPmxlbiAtIG1hY3NpemUpOworCWlmIChjaGVja21hYyhzZXMucmVhZGJ1Ziwgc2VzLmRlY3J5cHRyZWFkYnVmKSAhPSBEUk9QQkVBUl9TVUNDRVNTKSB7CisJCWRyb3BiZWFyX2V4aXQoIkludGVncml0eSBlcnJvciIpOworCX0KKworCS8qIHJlYWRidWYgbm8gbG9uZ2VyIHJlcXVpcmVkICovCisJYnVmX2ZyZWUoc2VzLnJlYWRidWYpOworCXNlcy5yZWFkYnVmID0gTlVMTDsKKworCS8qIGdldCBwYWRkaW5nIGxlbmd0aCAqLworCWJ1Zl9zZXRwb3Moc2VzLmRlY3J5cHRyZWFkYnVmLCBQQUNLRVRfUEFERElOR19PRkYpOworCXBhZGxlbiA9IGJ1Zl9nZXRieXRlKHNlcy5kZWNyeXB0cmVhZGJ1Zik7CisJCQorCS8qIHBheWxvYWQgbGVuZ3RoICovCisJLyogLSA0IC0gMSBpcyBmb3IgTEVOIGFuZCBQQURMRU4gdmFsdWVzICovCisJbGVuID0gc2VzLmRlY3J5cHRyZWFkYnVmLT5sZW4gLSBwYWRsZW4gLSA0IC0gMTsKKwlpZiAoKGxlbiA+IE1BWF9QQVlMT0FEX0xFTikgfHwgKGxlbiA8IDEpKSB7CisJCWRyb3BiZWFyX2V4aXQoImJhZCBwYWNrZXQgc2l6ZSIpOworCX0KKworCWJ1Zl9zZXRwb3Moc2VzLmRlY3J5cHRyZWFkYnVmLCBQQUNLRVRfUEFZTE9BRF9PRkYpOworCisjaWZuZGVmIERJU0FCTEVfWkxJQgorCWlmIChzZXMua2V5cy0+cmVjdl9hbGdvX2NvbXAgPT0gRFJPUEJFQVJfQ09NUF9aTElCKSB7CisJCS8qIGRlY29tcHJlc3MgKi8KKwkJc2VzLnBheWxvYWQgPSBidWZfZGVjb21wcmVzcyhzZXMuZGVjcnlwdHJlYWRidWYsIGxlbik7CisKKwl9IGVsc2UgCisjZW5kaWYKKwl7CisJCS8qIGNvcHkgcGF5bG9hZCAqLworCQlzZXMucGF5bG9hZCA9IGJ1Zl9uZXcobGVuKTsKKwkJbWVtY3B5KHNlcy5wYXlsb2FkLT5kYXRhLCBidWZfZ2V0cHRyKHNlcy5kZWNyeXB0cmVhZGJ1ZiwgbGVuKSwgbGVuKTsKKwkJYnVmX2luY3JsZW4oc2VzLnBheWxvYWQsIGxlbik7CisJfQorCisJYnVmX2ZyZWUoc2VzLmRlY3J5cHRyZWFkYnVmKTsKKwlzZXMuZGVjcnlwdHJlYWRidWYgPSBOVUxMOworCWJ1Zl9zZXRwb3Moc2VzLnBheWxvYWQsIDApOworCisJc2VzLnJlY3ZzZXErKzsKKworCVRSQUNFKCgibGVhdmUgZGVjcnlwdF9wYWNrZXQiKSkKK30KKworLyogQ2hlY2tzIHRoZSBtYWMgaW4gaGFzaGJ1ZiwgZm9yIHRoZSBkYXRhIGluIHJlYWRidWYuCisgKiBSZXR1cm5zIERST1BCRUFSX1NVQ0NFU1Mgb3IgRFJPUEJFQVJfRkFJTFVSRSAqLworc3RhdGljIGludCBjaGVja21hYyhidWZmZXIqIG1hY2J1ZiwgYnVmZmVyKiBzb3VyY2VidWYpIHsKKworCXVuc2lnbmVkIGludCBtYWNzaXplOworCWhtYWNfc3RhdGUgaG1hYzsKKwl1bnNpZ25lZCBjaGFyIHRlbXBidWZbTUFYX01BQ19MRU5dOworCXVuc2lnbmVkIGxvbmcgYnVmc2l6ZTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJbWFjc2l6ZSA9IHNlcy5rZXlzLT5yZWN2X2FsZ29fbWFjLT5oYXNoc2l6ZTsKKwlpZiAobWFjc2l6ZSA9PSAwKSB7CisJCXJldHVybiBEUk9QQkVBUl9TVUNDRVNTOworCX0KKworCS8qIGNhbGN1bGF0ZSB0aGUgbWFjICovCisJaWYgKGhtYWNfaW5pdCgmaG1hYywgCisJCQkJZmluZF9oYXNoKHNlcy5rZXlzLT5yZWN2X2FsZ29fbWFjLT5oYXNoZGVzYy0+bmFtZSksIAorCQkJCXNlcy5rZXlzLT5yZWN2bWFja2V5LCAKKwkJCQlzZXMua2V5cy0+cmVjdl9hbGdvX21hYy0+a2V5c2l6ZSkgCisJCQkJIT0gQ1JZUFRfT0spIHsKKwkJZHJvcGJlYXJfZXhpdCgiSE1BQyBlcnJvciIpOworCX0KKwkKKwkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KKwlTVE9SRTMySChzZXMucmVjdnNlcSwgdGVtcGJ1Zik7CisJaWYgKGhtYWNfcHJvY2VzcygmaG1hYywgdGVtcGJ1ZiwgNCkgIT0gQ1JZUFRfT0spIHsKKwkJZHJvcGJlYXJfZXhpdCgiSE1BQyBlcnJvciIpOworCX0KKworCWJ1Zl9zZXRwb3Moc291cmNlYnVmLCAwKTsKKwlsZW4gPSBzb3VyY2VidWYtPmxlbjsKKwlpZiAoaG1hY19wcm9jZXNzKCZobWFjLCBidWZfZ2V0cHRyKHNvdXJjZWJ1ZiwgbGVuKSwgbGVuKSAhPSBDUllQVF9PSykgeworCQlkcm9wYmVhcl9leGl0KCJITUFDIGVycm9yIik7CisJfQorCisJYnVmc2l6ZSA9IHNpemVvZih0ZW1wYnVmKTsKKwlpZiAoaG1hY19kb25lKCZobWFjLCB0ZW1wYnVmLCAmYnVmc2l6ZSkgIT0gQ1JZUFRfT0spIHsKKwkJZHJvcGJlYXJfZXhpdCgiSE1BQyBlcnJvciIpOworCX0KKworCS8qIGNvbXBhcmUgdGhlIGhhc2ggKi8KKwlpZiAobWVtY21wKHRlbXBidWYsIGJ1Zl9nZXRwdHIobWFjYnVmLCBtYWNzaXplKSwgbWFjc2l6ZSkgIT0gMCkgeworCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9IGVsc2UgeworCQlyZXR1cm4gRFJPUEJFQVJfU1VDQ0VTUzsKKwl9Cit9CisKKyNpZm5kZWYgRElTQUJMRV9aTElCCisvKiByZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGNyZWF0ZWQgYnVmZmVyICovCitzdGF0aWMgYnVmZmVyKiBidWZfZGVjb21wcmVzcyhidWZmZXIqIGJ1ZiwgdW5zaWduZWQgaW50IGxlbikgeworCisJaW50IHJlc3VsdDsKKwlidWZmZXIgKiByZXQ7CisJel9zdHJlYW1wIHpzdHJlYW07CisKKwl6c3RyZWFtID0gc2VzLmtleXMtPnJlY3ZfenN0cmVhbTsKKwlyZXQgPSBidWZfbmV3KGxlbik7CisKKwl6c3RyZWFtLT5hdmFpbF9pbiA9IGxlbjsKKwl6c3RyZWFtLT5uZXh0X2luID0gYnVmX2dldHB0cihidWYsIGxlbik7CisKKwkvKiBkZWNvbXByZXNzIHRoZSBwYXlsb2FkLCBpbmNyZW1lbnRhbGx5IHJlc2l6aW5nIHRoZSBvdXRwdXQgYnVmZmVyICovCisJd2hpbGUgKDEpIHsKKworCQl6c3RyZWFtLT5hdmFpbF9vdXQgPSByZXQtPnNpemUgLSByZXQtPnBvczsKKwkJenN0cmVhbS0+bmV4dF9vdXQgPSBidWZfZ2V0d3JpdGVwdHIocmV0LCB6c3RyZWFtLT5hdmFpbF9vdXQpOworCisJCXJlc3VsdCA9IGluZmxhdGUoenN0cmVhbSwgWl9TWU5DX0ZMVVNIKTsKKworCQlidWZfc2V0bGVuKHJldCwgcmV0LT5zaXplIC0genN0cmVhbS0+YXZhaWxfb3V0KTsKKwkJYnVmX3NldHBvcyhyZXQsIHJldC0+bGVuKTsKKworCQlpZiAocmVzdWx0ICE9IFpfQlVGX0VSUk9SICYmIHJlc3VsdCAhPSBaX09LKSB7CisJCQlkcm9wYmVhcl9leGl0KCJ6bGliIGVycm9yIik7CisJCX0KKworCQlpZiAoenN0cmVhbS0+YXZhaWxfaW4gPT0gMCAmJgorCQkgICAJCSh6c3RyZWFtLT5hdmFpbF9vdXQgIT0gMCB8fCByZXN1bHQgPT0gWl9CVUZfRVJST1IpKSB7CisJCQkvKiB3ZSBjYW4gb25seSBleGl0IGlmIGF2YWlsX291dCBoYXNuJ3QgYWxsIGJlZW4gdXNlZCwKKwkJCSAqIGFuZCB0aGVyZSdzIG5vIHJlbWFpbmluZyBpbnB1dCAqLworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlmICh6c3RyZWFtLT5hdmFpbF9vdXQgPT0gMCkgeworCQkJYnVmX3Jlc2l6ZShyZXQsIHJldC0+c2l6ZSArIFpMSUJfREVDT01QUkVTU19JTkNSKTsKKwkJfQorCX0KK30KKyNlbmRpZgorCisKKworCQorLyogZW5jcnlwdCB0aGUgd3JpdGVwYXlsb2FkLCBwdXR0aW5nIGludG8gd3JpdGVidWYsIHJlYWR5IGZvciB3cml0ZV9wYWNrZXQoKQorICogdG8gcHV0IG9uIHRoZSB3aXJlICovCit2b2lkIGVuY3J5cHRfcGFja2V0KCkgeworCisJdW5zaWduZWQgY2hhciBwYWRsZW47CisJdW5zaWduZWQgY2hhciBibG9ja3NpemUsIG1hY3NpemU7CisJYnVmZmVyICogd3JpdGVidWY7IC8qIHRoZSBwYWNrZXQgd2hpY2ggd2lsbCBnbyBvbiB0aGUgd2lyZSAqLworCWJ1ZmZlciAqIGNsZWFyd3JpdGVidWY7IC8qIHVuZW5jcnlwdGVkLCBwb3NzaWJseSBjb21wcmVzc2VkICovCisJCisJVFJBQ0UoKCJlbnRlciBlbmNyeXB0X3BhY2tldCgpIikpCisJVFJBQ0UoKCJlbmNyeXB0X3BhY2tldCB0eXBlIGlzICVkIiwgc2VzLndyaXRlcGF5bG9hZC0+ZGF0YVswXSkpCisJYmxvY2tzaXplID0gc2VzLmtleXMtPnRyYW5zX2FsZ29fY3J5cHQtPmJsb2Nrc2l6ZTsKKwltYWNzaXplID0gc2VzLmtleXMtPnRyYW5zX2FsZ29fbWFjLT5oYXNoc2l6ZTsKKworCS8qIEVuY3J5cHRlZCBwYWNrZXQgbGVuIGlzIHBheWxvYWQrNSwgdGhlbiB3b3JzdCBjYXNlIGlzIGlmIHdlIGFyZSAzIGF3YXkKKwkgKiBmcm9tIGEgYmxvY2tzaXplIG11bHRpcGxlLiBJbiB3aGljaCBjYXNlIHdlIG5lZWQgdG8gcGFkIHRvIHRoZQorCSAqIG11bHRpcGxlLCB0aGVuIGFkZCBhbm90aGVyIGJsb2Nrc2l6ZSAob3IgTUlOX1BBQ0tFVF9MRU4pICovCisJY2xlYXJ3cml0ZWJ1ZiA9IGJ1Zl9uZXcoKHNlcy53cml0ZXBheWxvYWQtPmxlbis0KzEpICsgTUlOX1BBQ0tFVF9MRU4gKyAzCisjaWZuZGVmIERJU0FCTEVfWkxJQgorCQkJKyBaTElCX0NPTVBSRVNTX0lOQ1IgLyogYml0IG9mIGEga2x1ZGdlLCBidXQgd2UgY2FuJ3Qga25vdyBsZW4qLworI2VuZGlmCisJCQkpOworCWJ1Zl9zZXRsZW4oY2xlYXJ3cml0ZWJ1ZiwgUEFDS0VUX1BBWUxPQURfT0ZGKTsKKwlidWZfc2V0cG9zKGNsZWFyd3JpdGVidWYsIFBBQ0tFVF9QQVlMT0FEX09GRik7CisKKwlidWZfc2V0cG9zKHNlcy53cml0ZXBheWxvYWQsIDApOworCisjaWZuZGVmIERJU0FCTEVfWkxJQgorCS8qIGNvbXByZXNzaW9uICovCisJaWYgKHNlcy5rZXlzLT50cmFuc19hbGdvX2NvbXAgPT0gRFJPUEJFQVJfQ09NUF9aTElCKSB7CisJCWJ1Zl9jb21wcmVzcyhjbGVhcndyaXRlYnVmLCBzZXMud3JpdGVwYXlsb2FkLCBzZXMud3JpdGVwYXlsb2FkLT5sZW4pOworCX0gZWxzZQorI2VuZGlmCisJeworCQltZW1jcHkoYnVmX2dldHdyaXRlcHRyKGNsZWFyd3JpdGVidWYsIHNlcy53cml0ZXBheWxvYWQtPmxlbiksCisJCQkJYnVmX2dldHB0cihzZXMud3JpdGVwYXlsb2FkLCBzZXMud3JpdGVwYXlsb2FkLT5sZW4pLAorCQkJCXNlcy53cml0ZXBheWxvYWQtPmxlbik7CisJCWJ1Zl9pbmNyd3JpdGVwb3MoY2xlYXJ3cml0ZWJ1Ziwgc2VzLndyaXRlcGF5bG9hZC0+bGVuKTsKKwl9CisKKwkvKiBmaW5pc2hlZCB3aXRoIHBheWxvYWQgKi8KKwlidWZfc2V0cG9zKHNlcy53cml0ZXBheWxvYWQsIDApOworCWJ1Zl9zZXRsZW4oc2VzLndyaXRlcGF5bG9hZCwgMCk7CisKKwkvKiBsZW5ndGggb2YgcGFkZGluZyAtIHBhY2tldCBsZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIGJsb2Nrc2l6ZSwKKwkgKiB3aXRoIGEgbWluaW11bSBvZiA0IGJ5dGVzIG9mIHBhZGRpbmcgKi8KKwlwYWRsZW4gPSBibG9ja3NpemUgLSAoY2xlYXJ3cml0ZWJ1Zi0+bGVuKSAlIGJsb2Nrc2l6ZTsKKwlpZiAocGFkbGVuIDwgNCkgeworCQlwYWRsZW4gKz0gYmxvY2tzaXplOworCX0KKwkvKiBjaGVjayBmb3IgbWluIHBhY2tldCBsZW5ndGggKi8KKwlpZiAoY2xlYXJ3cml0ZWJ1Zi0+bGVuICsgcGFkbGVuIDwgTUlOX1BBQ0tFVF9MRU4pIHsKKwkJcGFkbGVuICs9IGJsb2Nrc2l6ZTsKKwl9CisKKwlidWZfc2V0cG9zKGNsZWFyd3JpdGVidWYsIDApOworCS8qIHBhY2tldCBsZW5ndGggZXhjbHVkaW5nIHRoZSBwYWNrZXRsZW5ndGggdWludDMyICovCisJYnVmX3B1dGludChjbGVhcndyaXRlYnVmLCBjbGVhcndyaXRlYnVmLT5sZW4gKyBwYWRsZW4gLSA0KTsKKworCS8qIHBhZGRpbmcgbGVuICovCisJYnVmX3B1dGJ5dGUoY2xlYXJ3cml0ZWJ1ZiwgcGFkbGVuKTsKKwkvKiBhY3R1YWwgcGFkZGluZyAqLworCWJ1Zl9zZXRwb3MoY2xlYXJ3cml0ZWJ1ZiwgY2xlYXJ3cml0ZWJ1Zi0+bGVuKTsKKwlidWZfaW5jcmxlbihjbGVhcndyaXRlYnVmLCBwYWRsZW4pOworCWdlbnJhbmRvbShidWZfZ2V0cHRyKGNsZWFyd3JpdGVidWYsIHBhZGxlbiksIHBhZGxlbik7CisKKwkvKiBkbyB0aGUgYWN0dWFsIGVuY3J5cHRpb24gKi8KKwlidWZfc2V0cG9zKGNsZWFyd3JpdGVidWYsIDApOworCS8qIGNyZWF0ZSBhIG5ldyB3cml0ZWJ1ZmZlciwgdGhpcyBpcyBmcmVlZCB3aGVuIGl0IGhhcyBiZWVuIHB1dCBvbiB0aGUgCisJICogd2lyZSBieSB3cml0ZXBhY2tldCgpICovCisJd3JpdGVidWYgPSBidWZfbmV3KGNsZWFyd3JpdGVidWYtPmxlbiArIG1hY3NpemUpOworCisJaWYgKHNlcy5rZXlzLT50cmFuc19hbGdvX2NyeXB0LT5jaXBoZXJkZXNjID09IE5VTEwpIHsKKwkJLyogY29weSBpdCAqLworCQltZW1jcHkoYnVmX2dldHdyaXRlcHRyKHdyaXRlYnVmLCBjbGVhcndyaXRlYnVmLT5sZW4pLAorCQkJCWJ1Zl9nZXRwdHIoY2xlYXJ3cml0ZWJ1ZiwgY2xlYXJ3cml0ZWJ1Zi0+bGVuKSwKKwkJCQljbGVhcndyaXRlYnVmLT5sZW4pOworCQlidWZfaW5jcndyaXRlcG9zKHdyaXRlYnVmLCBjbGVhcndyaXRlYnVmLT5sZW4pOworCX0gZWxzZSB7CisJCS8qIGVuY3J5cHQgaXQgKi8KKwkJd2hpbGUgKGNsZWFyd3JpdGVidWYtPnBvcyA8IGNsZWFyd3JpdGVidWYtPmxlbikgeworCQkJaWYgKGNiY19lbmNyeXB0KGJ1Zl9nZXRwdHIoY2xlYXJ3cml0ZWJ1ZiwgYmxvY2tzaXplKSwKKwkJCQkJCWJ1Zl9nZXR3cml0ZXB0cih3cml0ZWJ1ZiwgYmxvY2tzaXplKSwKKwkJCQkJCWJsb2Nrc2l6ZSwKKwkJCQkJCSZzZXMua2V5cy0+dHJhbnNfc3ltbWV0cmljX3N0cnVjdCkgIT0gQ1JZUFRfT0spIHsKKwkJCQlkcm9wYmVhcl9leGl0KCJlcnJvciBlbmNyeXB0aW5nIik7CisJCQl9CisJCQlidWZfaW5jcnBvcyhjbGVhcndyaXRlYnVmLCBibG9ja3NpemUpOworCQkJYnVmX2luY3J3cml0ZXBvcyh3cml0ZWJ1ZiwgYmxvY2tzaXplKTsKKwkJfQorCX0KKworCS8qIG5vdyBhZGQgYSBobWFjIGFuZCB3ZSdyZSBkb25lICovCisJd3JpdGVtYWMod3JpdGVidWYsIGNsZWFyd3JpdGVidWYpOworCisJLyogY2xlYXJ3cml0ZWJ1ZiBpcyBmaW5pc2hlZCB3aXRoICovCisJYnVmX2ZyZWUoY2xlYXJ3cml0ZWJ1Zik7CisJY2xlYXJ3cml0ZWJ1ZiA9IE5VTEw7CisKKwkvKiBlbnF1ZXVlIHRoZSBwYWNrZXQgZm9yIHNlbmRpbmcgKi8KKwlidWZfc2V0cG9zKHdyaXRlYnVmLCAwKTsKKwllbnF1ZXVlKCZzZXMud3JpdGVxdWV1ZSwgKHZvaWQqKXdyaXRlYnVmKTsKKworCS8qIFVwZGF0ZSBjb3VudHMgKi8KKwlzZXMua2V4c3RhdGUuZGF0YXRyYW5zICs9IHdyaXRlYnVmLT5sZW47CisJc2VzLnRyYW5zc2VxKys7CisKKwlUUkFDRSgoImxlYXZlIGVuY3J5cHRfcGFja2V0KCkiKSkKK30KKworCisvKiBDcmVhdGUgdGhlIHBhY2tldCBtYWMsIGFuZCBhcHBlbmQgSChzZXFub3xjbGVhcmJ1ZikgdG8gdGhlIG91dHB1dCAqLworc3RhdGljIHZvaWQgd3JpdGVtYWMoYnVmZmVyICogb3V0cHV0YnVmZmVyLCBidWZmZXIgKiBjbGVhcndyaXRlYnVmKSB7CisKKwl1bnNpZ25lZCBpbnQgbWFjc2l6ZTsKKwl1bnNpZ25lZCBjaGFyIHNlcWJ1Zls0XTsKKwl1bnNpZ25lZCBjaGFyIHRlbXBidWZbTUFYX01BQ19MRU5dOworCXVuc2lnbmVkIGxvbmcgYnVmc2l6ZTsKKwlobWFjX3N0YXRlIGhtYWM7CisKKwlUUkFDRSgoImVudGVyIHdyaXRlbWFjIikpCisKKwltYWNzaXplID0gc2VzLmtleXMtPnRyYW5zX2FsZ29fbWFjLT5oYXNoc2l6ZTsKKwlpZiAobWFjc2l6ZSA+IDApIHsKKwkJLyogY2FsY3VsYXRlIHRoZSBtYWMgKi8KKwkJaWYgKGhtYWNfaW5pdCgmaG1hYywgCisJCQkJCWZpbmRfaGFzaChzZXMua2V5cy0+dHJhbnNfYWxnb19tYWMtPmhhc2hkZXNjLT5uYW1lKSwgCisJCQkJCXNlcy5rZXlzLT50cmFuc21hY2tleSwgCisJCQkJCXNlcy5rZXlzLT50cmFuc19hbGdvX21hYy0+a2V5c2l6ZSkgIT0gQ1JZUFRfT0spIHsKKwkJCWRyb3BiZWFyX2V4aXQoIkhNQUMgZXJyb3IiKTsKKwkJfQorCQorCQkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KKwkJU1RPUkUzMkgoc2VzLnRyYW5zc2VxLCBzZXFidWYpOworCQlpZiAoaG1hY19wcm9jZXNzKCZobWFjLCBzZXFidWYsIDQpICE9IENSWVBUX09LKSB7CisJCQlkcm9wYmVhcl9leGl0KCJITUFDIGVycm9yIik7CisJCX0KKwkKKwkJLyogdGhlIGFjdHVhbCBjb250ZW50cyAqLworCQlidWZfc2V0cG9zKGNsZWFyd3JpdGVidWYsIDApOworCQlpZiAoaG1hY19wcm9jZXNzKCZobWFjLCAKKwkJCQkJYnVmX2dldHB0cihjbGVhcndyaXRlYnVmLCAKKwkJCQkJCWNsZWFyd3JpdGVidWYtPmxlbiksCisJCQkJCWNsZWFyd3JpdGVidWYtPmxlbikgIT0gQ1JZUFRfT0spIHsKKwkJCWRyb3BiZWFyX2V4aXQoIkhNQUMgZXJyb3IiKTsKKwkJfQorCQorCQlidWZzaXplID0gc2l6ZW9mKHRlbXBidWYpOworCQlpZiAoaG1hY19kb25lKCZobWFjLCB0ZW1wYnVmLCAmYnVmc2l6ZSkgCisJCQkJIT0gQ1JZUFRfT0spIHsKKwkJCWRyb3BiZWFyX2V4aXQoIkhNQUMgZXJyb3IiKTsKKwkJfQorCQlidWZfcHV0Ynl0ZXMob3V0cHV0YnVmZmVyLCB0ZW1wYnVmLCBtYWNzaXplKTsKKwl9CisJVFJBQ0UoKCJsZWF2ZSB3cml0ZW1hYyIpKQorfQorCisjaWZuZGVmIERJU0FCTEVfWkxJQgorLyogY29tcHJlc3NlcyBsZW4gYnl0ZXMgZnJvbSBzcmMsIG91dHB1dHRpbmcgdG8gZGVzdCAoc3RhcnRpbmcgZnJvbSB0aGUKKyAqIHJlc3BlY3RpdmUgY3VycmVudCBwb3NpdGlvbnMuICovCitzdGF0aWMgdm9pZCBidWZfY29tcHJlc3MoYnVmZmVyICogZGVzdCwgYnVmZmVyICogc3JjLCB1bnNpZ25lZCBpbnQgbGVuKSB7CisKKwl1bnNpZ25lZCBpbnQgZW5kcG9zID0gc3JjLT5wb3MgKyBsZW47CisJaW50IHJlc3VsdDsKKworCVRSQUNFKCgiZW50ZXIgYnVmX2NvbXByZXNzIikpCisKKwl3aGlsZSAoMSkgeworCisJCXNlcy5rZXlzLT50cmFuc196c3RyZWFtLT5hdmFpbF9pbiA9IGVuZHBvcyAtIHNyYy0+cG9zOworCQlzZXMua2V5cy0+dHJhbnNfenN0cmVhbS0+bmV4dF9pbiA9IAorCQkJYnVmX2dldHB0cihzcmMsIHNlcy5rZXlzLT50cmFuc196c3RyZWFtLT5hdmFpbF9pbik7CisKKwkJc2VzLmtleXMtPnRyYW5zX3pzdHJlYW0tPmF2YWlsX291dCA9IGRlc3QtPnNpemUgLSBkZXN0LT5wb3M7CisJCXNlcy5rZXlzLT50cmFuc196c3RyZWFtLT5uZXh0X291dCA9CisJCQlidWZfZ2V0d3JpdGVwdHIoZGVzdCwgc2VzLmtleXMtPnRyYW5zX3pzdHJlYW0tPmF2YWlsX291dCk7CisKKwkJcmVzdWx0ID0gZGVmbGF0ZShzZXMua2V5cy0+dHJhbnNfenN0cmVhbSwgWl9TWU5DX0ZMVVNIKTsKKworCQlidWZfc2V0cG9zKHNyYywgZW5kcG9zIC0gc2VzLmtleXMtPnRyYW5zX3pzdHJlYW0tPmF2YWlsX2luKTsKKwkJYnVmX3NldGxlbihkZXN0LCBkZXN0LT5zaXplIC0gc2VzLmtleXMtPnRyYW5zX3pzdHJlYW0tPmF2YWlsX291dCk7CisJCWJ1Zl9zZXRwb3MoZGVzdCwgZGVzdC0+bGVuKTsKKworCQlpZiAocmVzdWx0ICE9IFpfT0spIHsKKwkJCWRyb3BiZWFyX2V4aXQoInpsaWIgZXJyb3IiKTsKKwkJfQorCisJCWlmIChzZXMua2V5cy0+dHJhbnNfenN0cmVhbS0+YXZhaWxfaW4gPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKworCQlkcm9wYmVhcl9hc3NlcnQoc2VzLmtleXMtPnRyYW5zX3pzdHJlYW0tPmF2YWlsX291dCA9PSAwKTsKKworCQkvKiB0aGUgYnVmZmVyIGhhcyBiZWVuIGZpbGxlZCwgd2UgbXVzdCBleHRlbmQuIFRoaXMgb25seSBoYXBwZW5zIGluCisJCSAqIHVudXN1YWwgY2lyY3Vtc3RhbmNlcyB3aGVyZSB0aGUgZGF0YSBncm93cyBpbiBzaXplIGFmdGVyIGRlZmxhdGUoKSwKKwkJICogYnV0IGl0IGlzIHBvc3NpYmxlICovCisJCWJ1Zl9yZXNpemUoZGVzdCwgZGVzdC0+c2l6ZSArIFpMSUJfQ09NUFJFU1NfSU5DUik7CisKKwl9CisJVFJBQ0UoKCJsZWF2ZSBidWZfY29tcHJlc3MiKSkKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcGFja2V0LmggYi9wYWNrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTc2OGNkCi0tLSAvZGV2L251bGwKKysrIGIvcGFja2V0LmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfUEFDS0VUX0hfCisKKyNkZWZpbmUgX1BBQ0tFVF9IXworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKwordm9pZCB3cml0ZV9wYWNrZXQoKTsKK3ZvaWQgcmVhZF9wYWNrZXQoKTsKK3ZvaWQgZGVjcnlwdF9wYWNrZXQoKTsKK3ZvaWQgZW5jcnlwdF9wYWNrZXQoKTsKKwordm9pZCBwcm9jZXNzX3BhY2tldCgpOworCit0eXBlZGVmIHN0cnVjdCBQYWNrZXRUeXBlIHsKKwl1bnNpZ25lZCBjaGFyIHR5cGU7IC8qIFNTSF9NU0dfRk9PICovCisJdm9pZCAoKmhhbmRsZXIpKCk7Cit9IHBhY2tldHR5cGU7CisKKyNkZWZpbmUgUEFDS0VUX1BBRERJTkdfT0ZGIDQKKyNkZWZpbmUgUEFDS0VUX1BBWUxPQURfT0ZGIDUKKworI2RlZmluZSBJTklUX1JFQURCVUYgMjAwCisKKyNlbmRpZiAvKiBfUEFDS0VUX0hfICovCmRpZmYgLS1naXQgYS9wcm9jZXNzLXBhY2tldC5jIGIvcHJvY2Vzcy1wYWNrZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTM5ZDlmCi0tLSAvZGV2L251bGwKKysrIGIvcHJvY2Vzcy1wYWNrZXQuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAicGFja2V0LmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgImFsZ28uaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJrZXguaCIKKyNpbmNsdWRlICJyYW5kb20uaCIKKyNpbmNsdWRlICJzZXJ2aWNlLmgiCisjaW5jbHVkZSAiYXV0aC5oIgorI2luY2x1ZGUgImNoYW5uZWwuaCIKKworI2RlZmluZSBNQVhfVU5BVVRIX1BBQ0tFVF9UWVBFIFNTSF9NU0dfVVNFUkFVVEhfUEtfT0sKKworc3RhdGljIHZvaWQgcmVjdl91bmltcGxlbWVudGVkKCk7CisKKy8qIHByb2Nlc3MgYSBkZWNyeXB0ZWQgcGFja2V0LCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBoYW5kbGVyICovCit2b2lkIHByb2Nlc3NfcGFja2V0KCkgeworCisJdW5zaWduZWQgY2hhciB0eXBlOworCXVuc2lnbmVkIGludCBpOworCisJVFJBQ0UoKCJlbnRlciBwcm9jZXNzX3BhY2tldCIpKQorCisJdHlwZSA9IGJ1Zl9nZXRieXRlKHNlcy5wYXlsb2FkKTsKKwlUUkFDRSgoInByb2Nlc3NfcGFja2V0OiBwYWNrZXQgdHlwZSA9ICVkIiwgdHlwZSkpCisKKwlzZXMubGFzdHBhY2tldCA9IHR5cGU7CisKKwkvKiBUaGVzZSBwYWNrZXRzIHdlIGNhbiByZWNlaXZlIGF0IGFueSB0aW1lICovCisJc3dpdGNoKHR5cGUpIHsKKworCQljYXNlIFNTSF9NU0dfSUdOT1JFOgorCQljYXNlIFNTSF9NU0dfREVCVUc6CisJCQlUUkFDRSgoInJlY2VpdmVkIFNTSF9NU0dfSUdOT1JFIG9yIFNTSF9NU0dfREVCVUciKSkKKwkJCWdvdG8gb3V0OworCisJCWNhc2UgU1NIX01TR19VTklNUExFTUVOVEVEOgorCQkJLyogZGVidWdnaW5nIFhYWCAqLworCQkJVFJBQ0UoKCJTU0hfTVNHX1VOSU1QTEVNRU5URUQiKSkKKwkJCWRyb3BiZWFyX2V4aXQoInJlY2VpdmVkIFNTSF9NU0dfVU5JTVBMRU1FTlRFRCIpOworCQkJCisJCWNhc2UgU1NIX01TR19ESVNDT05ORUNUOgorCQkJLyogVE9ETyBjbGVhbnVwPyAqLworCQkJZHJvcGJlYXJfY2xvc2UoIkRpc2Nvbm5lY3QgcmVjZWl2ZWQiKTsKKwl9CisKKworCS8qIFRoaXMgYXBwbGllcyBmb3IgS0VYLCB3aGVyZSB0aGUgc3BlYyBzYXlzIHRoZSBuZXh0IHBhY2tldCBNVVNUIGJlCisJICogTkVXS0VZUyAqLworCWlmIChzZXMucmVxdWlyZW5leHQgIT0gMCkgeworCQlpZiAoc2VzLnJlcXVpcmVuZXh0ICE9IHR5cGUpIHsKKwkJCS8qIFRPRE8gc2VuZCBkaXNjb25uZWN0PyAqLworCQkJZHJvcGJlYXJfZXhpdCgidW5leHBlY3RlZCBwYWNrZXQgdHlwZSAlZCwgZXhwZWN0ZWQgJWQiLCB0eXBlLAorCQkJCQlzZXMucmVxdWlyZW5leHQpOworCQl9IGVsc2UgeworCQkJLyogR290IHdoYXQgd2UgZXhwZWN0ZWQgKi8KKwkJCXNlcy5yZXF1aXJlbmV4dCA9IDA7CisJCX0KKwl9CisKKwkvKiBDaGVjayBpZiB3ZSBzaG91bGQgaWdub3JlIHRoaXMgcGFja2V0LiBVc2VkIGN1cnJlbnRseSBvbmx5IGZvcgorCSAqIEtFWCBjb2RlLCB3aXRoIGZpcnN0X2tleF9wYWNrZXRfZm9sbG93cyAqLworCWlmIChzZXMuaWdub3JlbmV4dCkgeworCQlUUkFDRSgoIklnbm9yaW5nIHBhY2tldCwgdHlwZSA9ICVkIiwgdHlwZSkpCisJCXNlcy5pZ25vcmVuZXh0ID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisKKwkvKiBLaW5kbHkgdGhlIHByb3RvY29sIGF1dGhvcnMgZ2F2ZSBhbGwgdGhlIHByZWF1dGggcGFja2V0cyB0eXBlIHZhbHVlcworCSAqIGxlc3MtdGhhbi1vci1lcXVhbC10byA2MCAoID09IE1BWF9VTkFVVEhfUEFDS0VUX1RZUEUgKS4KKwkgKiBOT1RFOiBpZiB0aGUgcHJvdG9jb2wgY2hhbmdlcyBhbmQgbmV3IHR5cGVzIGFyZSBhZGRlZCwgcmV2aXNpdCB0aGlzIAorCSAqIGFzc3VtcHRpb24gKi8KKwlpZiAoICFzZXMuYXV0aHN0YXRlLmF1dGhkb25lICYmIHR5cGUgPiBNQVhfVU5BVVRIX1BBQ0tFVF9UWVBFICkgeworCQlkcm9wYmVhcl9leGl0KCJyZWNlaXZlZCBtZXNzYWdlICVkIGJlZm9yZSB1c2VyYXV0aCIsIHR5cGUpOworCX0KKworCWZvciAoaSA9IDA7IDsgaSsrKSB7CisJCWlmIChzZXMucGFja2V0dHlwZXNbaV0udHlwZSA9PSAwKSB7CisJCQkvKiBlbmQgb2YgbGlzdCAqLworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc2VzLnBhY2tldHR5cGVzW2ldLnR5cGUgPT0gdHlwZSkgeworCQkJc2VzLnBhY2tldHR5cGVzW2ldLmhhbmRsZXIoKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJCisJLyogVE9ETyBkbyBzb21ldGhpbmcgbW9yZSBoZXJlPyAqLworCVRSQUNFKCgicHJlYXV0aCB1bmtub3duIHBhY2tldCIpKQorCXJlY3ZfdW5pbXBsZW1lbnRlZCgpOworCitvdXQ6CisJYnVmX2ZyZWUoc2VzLnBheWxvYWQpOworCXNlcy5wYXlsb2FkID0gTlVMTDsKKworCVRSQUNFKCgibGVhdmUgcHJvY2Vzc19wYWNrZXQiKSkKK30KKworCisKKy8qIFRoaXMgbXVzdCBiZSBjYWxsZWQgZGlyZWN0bHkgYWZ0ZXIgcmVjZWl2aW5nIHRoZSB1bmltcGxlbWVudGVkIHBhY2tldC4KKyAqIElzbid0IHRoZSBtb3N0IGNsZWFuIGltcGxlbWVudGF0aW9uLCBpdCByZWxpZXMgb24gcGFja2V0IHByb2Nlc3NpbmcKKyAqIG9jY3VycmluZyBkaXJlY3RseSBhZnRlciBkZWNyeXB0aW9uIChkaXJlY3QgdXNlIG9mIHNlcy5yZWN2c2VxKS4KKyAqIFRoaXMgaXMgcmVhc29uYWJseSB2YWxpZCwgc2luY2UgdGhlcmUgaXMgb25seSBhIHNpbmdsZSBkZWNyeXB0aW9uIGJ1ZmZlciAqLworc3RhdGljIHZvaWQgcmVjdl91bmltcGxlbWVudGVkKCkgeworCisJQ0hFQ0tDTEVBUlRPV1JJVEUoKTsKKworCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIFNTSF9NU0dfVU5JTVBMRU1FTlRFRCk7CisJLyogdGhlIGRlY3J5cHRpb24gcm91dGluZSBpbmNyZW1lbnRzIHRoZSBzZXF1ZW5jZSBudW1iZXIsIHdlIG11c3QKKwkgKiBkZWNyZW1lbnQgKi8KKwlidWZfcHV0aW50KHNlcy53cml0ZXBheWxvYWQsIHNlcy5yZWN2c2VxIC0gMSk7CisKKwllbmNyeXB0X3BhY2tldCgpOworfQpkaWZmIC0tZ2l0IGEvcHJvZ3Jlc3NtZXRlci5jIGIvcHJvZ3Jlc3NtZXRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZjZjYjUKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9ncmVzc21ldGVyLmMKQEAgLTAsMCArMSwyOTQgQEAKKyNpZmRlZiBQUk9HUkVTU19NRVRFUgorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMyBOaWxzIE5vcmRtYW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKy8qUkNTSUQoIiRPcGVuQlNEOiBwcm9ncmVzc21ldGVyLmMsdiAxLjI0IDIwMDUvMDYvMDcgMTM6MjU6MjMgamFyZWR5IEV4cCAkIik7Ki8KKworI2luY2x1ZGUgInByb2dyZXNzbWV0ZXIuaCIKKyNpbmNsdWRlICJhdG9taWNpby5oIgorI2luY2x1ZGUgInNjcG1pc2MuaCIKKworI2RlZmluZSBERUZBVUxUX1dJTlNJWkUgNDAKKyNkZWZpbmUgTUFYX1dJTlNJWkUgNTEyCisjZGVmaW5lIFBBRERJTkcgMQkJLyogcGFkZGluZyBiZXR3ZWVuIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3JzICovCisjZGVmaW5lIFVQREFURV9JTlRFUlZBTCAxCS8qIHVwZGF0ZSB0aGUgcHJvZ3Jlc3MgbWV0ZXIgZXZlcnkgc2Vjb25kICovCisjZGVmaW5lIFNUQUxMX1RJTUUgNQkJLyogd2UncmUgc3RhbGxlZCBhZnRlciB0aGlzIG1hbnkgc2Vjb25kcyAqLworCisvKiBkZXRlcm1pbmVzIHdoZXRoZXIgd2UgY2FuIG91dHB1dCB0byB0aGUgdGVybWluYWwgKi8KK3N0YXRpYyBpbnQgY2FuX291dHB1dCh2b2lkKTsKKworLyogZm9ybWF0cyBhbmQgaW5zZXJ0cyB0aGUgc3BlY2lmaWVkIHNpemUgaW50byB0aGUgZ2l2ZW4gYnVmZmVyICovCitzdGF0aWMgdm9pZCBmb3JtYXRfc2l6ZShjaGFyICosIGludCwgb2ZmX3QpOworc3RhdGljIHZvaWQgZm9ybWF0X3JhdGUoY2hhciAqLCBpbnQsIG9mZl90KTsKKworLyogd2luZG93IHJlc2l6aW5nICovCitzdGF0aWMgdm9pZCBzaWdfd2luY2goaW50KTsKK3N0YXRpYyB2b2lkIHNldHNjcmVlbnNpemUodm9pZCk7CisKKy8qIHVwZGF0ZXMgdGhlIHByb2dyZXNzbWV0ZXIgdG8gcmVmbGVjdCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdHJhbnNmZXIgKi8KK3ZvaWQgcmVmcmVzaF9wcm9ncmVzc19tZXRlcih2b2lkKTsKKworLyogc2lnbmFsIGhhbmRsZXIgZm9yIHVwZGF0aW5nIHRoZSBwcm9ncmVzcyBtZXRlciAqLworc3RhdGljIHZvaWQgdXBkYXRlX3Byb2dyZXNzX21ldGVyKGludCk7CisKK3N0YXRpYyB0aW1lX3Qgc3RhcnQ7CQkvKiBzdGFydCBwcm9ncmVzcyAqLworc3RhdGljIHRpbWVfdCBsYXN0X3VwZGF0ZTsJLyogbGFzdCBwcm9ncmVzcyB1cGRhdGUgKi8KK3N0YXRpYyBjaGFyICpmaWxlOwkJLyogbmFtZSBvZiB0aGUgZmlsZSBiZWluZyB0cmFuc2ZlcnJlZCAqLworc3RhdGljIG9mZl90IGVuZF9wb3M7CQkvKiBlbmRpbmcgcG9zaXRpb24gb2YgdHJhbnNmZXIgKi8KK3N0YXRpYyBvZmZfdCBjdXJfcG9zOwkJLyogdHJhbnNmZXIgcG9zaXRpb24gYXMgb2YgbGFzdCByZWZyZXNoICovCitzdGF0aWMgdm9sYXRpbGUgb2ZmX3QgKmNvdW50ZXI7CS8qIHByb2dyZXNzIGNvdW50ZXIgKi8KK3N0YXRpYyBsb25nIHN0YWxsZWQ7CQkvKiBob3cgbG9uZyB3ZSBoYXZlIGJlZW4gc3RhbGxlZCAqLworc3RhdGljIGludCBieXRlc19wZXJfc2Vjb25kOwkvKiBjdXJyZW50IHNwZWVkIGluIGJ5dGVzIHBlciBzZWNvbmQgKi8KK3N0YXRpYyBpbnQgd2luX3NpemU7CQkvKiB0ZXJtaW5hbCB3aW5kb3cgc2l6ZSAqLworc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCB3aW5fcmVzaXplZDsgLyogZm9yIHdpbmRvdyByZXNpemluZyAqLworCisvKiB1bml0cyBmb3IgZm9ybWF0X3NpemUgKi8KK3N0YXRpYyBjb25zdCBjaGFyIHVuaXRbXSA9ICIgS01HVCI7CisKK3N0YXRpYyBpbnQKK2Nhbl9vdXRwdXQodm9pZCkKK3sKKwlyZXR1cm4gKGdldHBncnAoKSA9PSB0Y2dldHBncnAoU1RET1VUX0ZJTEVOTykpOworfQorCitzdGF0aWMgdm9pZAorZm9ybWF0X3JhdGUoY2hhciAqYnVmLCBpbnQgc2l6ZSwgb2ZmX3QgYnl0ZXMpCit7CisJaW50IGk7CisKKwlieXRlcyAqPSAxMDA7CisJZm9yIChpID0gMDsgYnl0ZXMgPj0gMTAwKjEwMDAgJiYgdW5pdFtpXSAhPSAnVCc7IGkrKykKKwkJYnl0ZXMgPSAoYnl0ZXMgKyA1MTIpIC8gMTAyNDsKKwlpZiAoaSA9PSAwKSB7CisJCWkrKzsKKwkJYnl0ZXMgPSAoYnl0ZXMgKyA1MTIpIC8gMTAyNDsKKwl9CisJc25wcmludGYoYnVmLCBzaXplLCAiJTNsbGQuJTFsbGQlYyVzIiwKKwkgICAgKGxvbmcgbG9uZykgKGJ5dGVzICsgNSkgLyAxMDAsCisJICAgIChsb25nIGxvbmcpIChieXRlcyArIDUpIC8gMTAgJSAxMCwKKwkgICAgdW5pdFtpXSwKKwkgICAgaSA/ICJCIiA6ICIgIik7Cit9CisKK3N0YXRpYyB2b2lkCitmb3JtYXRfc2l6ZShjaGFyICpidWYsIGludCBzaXplLCBvZmZfdCBieXRlcykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGJ5dGVzID49IDEwMDAwICYmIHVuaXRbaV0gIT0gJ1QnOyBpKyspCisJCWJ5dGVzID0gKGJ5dGVzICsgNTEyKSAvIDEwMjQ7CisJc25wcmludGYoYnVmLCBzaXplLCAiJTRsbGQlYyVzIiwKKwkgICAgKGxvbmcgbG9uZykgYnl0ZXMsCisJICAgIHVuaXRbaV0sCisJICAgIGkgPyAiQiIgOiAiICIpOworfQorCit2b2lkCityZWZyZXNoX3Byb2dyZXNzX21ldGVyKHZvaWQpCit7CisJY2hhciBidWZbTUFYX1dJTlNJWkUgKyAxXTsKKwl0aW1lX3Qgbm93OworCW9mZl90IHRyYW5zZmVycmVkOworCWRvdWJsZSBlbGFwc2VkOworCWludCBwZXJjZW50OworCW9mZl90IGJ5dGVzX2xlZnQ7CisJaW50IGN1cl9zcGVlZDsKKwlpbnQgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHM7CisJaW50IGksIGxlbjsKKwlpbnQgZmlsZV9sZW47CisKKwl0cmFuc2ZlcnJlZCA9ICpjb3VudGVyIC0gY3VyX3BvczsKKwljdXJfcG9zID0gKmNvdW50ZXI7CisJbm93ID0gdGltZShOVUxMKTsKKwlieXRlc19sZWZ0ID0gZW5kX3BvcyAtIGN1cl9wb3M7CisKKwlpZiAoYnl0ZXNfbGVmdCA+IDApCisJCWVsYXBzZWQgPSBub3cgLSBsYXN0X3VwZGF0ZTsKKwllbHNlIHsKKwkJZWxhcHNlZCA9IG5vdyAtIHN0YXJ0OworCQkvKiBDYWxjdWxhdGUgdHJ1ZSB0b3RhbCBzcGVlZCB3aGVuIGRvbmUgKi8KKwkJdHJhbnNmZXJyZWQgPSBlbmRfcG9zOworCQlieXRlc19wZXJfc2Vjb25kID0gMDsKKwl9CisKKwkvKiBjYWxjdWxhdGUgc3BlZWQgKi8KKwlpZiAoZWxhcHNlZCAhPSAwKQorCQljdXJfc3BlZWQgPSAodHJhbnNmZXJyZWQgLyBlbGFwc2VkKTsKKwllbHNlCisJCWN1cl9zcGVlZCA9IHRyYW5zZmVycmVkOworCisjZGVmaW5lIEFHRV9GQUNUT1IgMC45CisJaWYgKGJ5dGVzX3Blcl9zZWNvbmQgIT0gMCkgeworCQlieXRlc19wZXJfc2Vjb25kID0gKGJ5dGVzX3Blcl9zZWNvbmQgKiBBR0VfRkFDVE9SKSArCisJCSAgICAoY3VyX3NwZWVkICogKDEuMCAtIEFHRV9GQUNUT1IpKTsKKwl9IGVsc2UKKwkJYnl0ZXNfcGVyX3NlY29uZCA9IGN1cl9zcGVlZDsKKworCS8qIGZpbGVuYW1lICovCisJYnVmWzBdID0gJ1wwJzsKKwlmaWxlX2xlbiA9IHdpbl9zaXplIC0gMzU7CisJaWYgKGZpbGVfbGVuID4gMCkgeworCQlsZW4gPSBzbnByaW50ZihidWYsIGZpbGVfbGVuICsgMSwgIlxyJXMiLCBmaWxlKTsKKwkJaWYgKGxlbiA8IDApCisJCQlsZW4gPSAwOworCQlpZiAobGVuID49IGZpbGVfbGVuICsgMSkKKwkJCWxlbiA9IGZpbGVfbGVuOworCQlmb3IgKGkgPSBsZW47ICBpIDwgZmlsZV9sZW47IGkrKyApCisJCQlidWZbaV0gPSAnICc7CisJCWJ1ZltmaWxlX2xlbl0gPSAnXDAnOworCX0KKworCS8qIHBlcmNlbnQgb2YgdHJhbnNmZXIgZG9uZSAqLworCWlmIChlbmRfcG9zICE9IDApCisJCXBlcmNlbnQgPSAoKGZsb2F0KWN1cl9wb3MgLyBlbmRfcG9zKSAqIDEwMDsKKwllbHNlCisJCXBlcmNlbnQgPSAxMDA7CisJc25wcmludGYoYnVmICsgc3RybGVuKGJ1ZiksIHdpbl9zaXplIC0gc3RybGVuKGJ1ZiksCisJICAgICIgJTNkJSUgIiwgcGVyY2VudCk7CisKKwkvKiBhbW91bnQgdHJhbnNmZXJyZWQgKi8KKwlmb3JtYXRfc2l6ZShidWYgKyBzdHJsZW4oYnVmKSwgd2luX3NpemUgLSBzdHJsZW4oYnVmKSwKKwkgICAgY3VyX3Bvcyk7CisJc3RybGNhdChidWYsICIgIiwgd2luX3NpemUpOworCisJLyogYmFuZHdpZHRoIHVzYWdlICovCisJZm9ybWF0X3JhdGUoYnVmICsgc3RybGVuKGJ1ZiksIHdpbl9zaXplIC0gc3RybGVuKGJ1ZiksCisJICAgIChvZmZfdClieXRlc19wZXJfc2Vjb25kKTsKKwlzdHJsY2F0KGJ1ZiwgIi9zICIsIHdpbl9zaXplKTsKKworCS8qIEVUQSAqLworCWlmICghdHJhbnNmZXJyZWQpCisJCXN0YWxsZWQgKz0gZWxhcHNlZDsKKwllbHNlCisJCXN0YWxsZWQgPSAwOworCisJaWYgKHN0YWxsZWQgPj0gU1RBTExfVElNRSkKKwkJc3RybGNhdChidWYsICItIHN0YWxsZWQgLSIsIHdpbl9zaXplKTsKKwllbHNlIGlmIChieXRlc19wZXJfc2Vjb25kID09IDAgJiYgYnl0ZXNfbGVmdCkKKwkJc3RybGNhdChidWYsICIgIC0tOi0tIEVUQSIsIHdpbl9zaXplKTsKKwllbHNlIHsKKwkJaWYgKGJ5dGVzX2xlZnQgPiAwKQorCQkJc2Vjb25kcyA9IGJ5dGVzX2xlZnQgLyBieXRlc19wZXJfc2Vjb25kOworCQllbHNlCisJCQlzZWNvbmRzID0gZWxhcHNlZDsKKworCQlob3VycyA9IHNlY29uZHMgLyAzNjAwOworCQlzZWNvbmRzIC09IGhvdXJzICogMzYwMDsKKwkJbWludXRlcyA9IHNlY29uZHMgLyA2MDsKKwkJc2Vjb25kcyAtPSBtaW51dGVzICogNjA7CisKKwkJaWYgKGhvdXJzICE9IDApCisJCQlzbnByaW50ZihidWYgKyBzdHJsZW4oYnVmKSwgd2luX3NpemUgLSBzdHJsZW4oYnVmKSwKKwkJCSAgICAiJWQ6JTAyZDolMDJkIiwgaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpOworCQllbHNlCisJCQlzbnByaW50ZihidWYgKyBzdHJsZW4oYnVmKSwgd2luX3NpemUgLSBzdHJsZW4oYnVmKSwKKwkJCSAgICAiICAlMDJkOiUwMmQiLCBtaW51dGVzLCBzZWNvbmRzKTsKKworCQlpZiAoYnl0ZXNfbGVmdCA+IDApCisJCQlzdHJsY2F0KGJ1ZiwgIiBFVEEiLCB3aW5fc2l6ZSk7CisJCWVsc2UKKwkJCXN0cmxjYXQoYnVmLCAiICAgICIsIHdpbl9zaXplKTsKKwl9CisKKwlhdG9taWNpbyh2d3JpdGUsIFNURE9VVF9GSUxFTk8sIGJ1Ziwgd2luX3NpemUgLSAxKTsKKwlsYXN0X3VwZGF0ZSA9IG5vdzsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0ZV9wcm9ncmVzc19tZXRlcihpbnQgaWdub3JlKQoreworCWludCBzYXZlX2Vycm5vOworCisJc2F2ZV9lcnJubyA9IGVycm5vOworCisJaWYgKHdpbl9yZXNpemVkKSB7CisJCXNldHNjcmVlbnNpemUoKTsKKwkJd2luX3Jlc2l6ZWQgPSAwOworCX0KKwlpZiAoY2FuX291dHB1dCgpKQorCQlyZWZyZXNoX3Byb2dyZXNzX21ldGVyKCk7CisKKwlzaWduYWwoU0lHQUxSTSwgdXBkYXRlX3Byb2dyZXNzX21ldGVyKTsKKwlhbGFybShVUERBVEVfSU5URVJWQUwpOworCWVycm5vID0gc2F2ZV9lcnJubzsKK30KKwordm9pZAorc3RhcnRfcHJvZ3Jlc3NfbWV0ZXIoY2hhciAqZiwgb2ZmX3QgZmlsZXNpemUsIG9mZl90ICpjdHIpCit7CisJc3RhcnQgPSBsYXN0X3VwZGF0ZSA9IHRpbWUoTlVMTCk7CisJZmlsZSA9IGY7CisJZW5kX3BvcyA9IGZpbGVzaXplOworCWN1cl9wb3MgPSAwOworCWNvdW50ZXIgPSBjdHI7CisJc3RhbGxlZCA9IDA7CisJYnl0ZXNfcGVyX3NlY29uZCA9IDA7CisKKwlzZXRzY3JlZW5zaXplKCk7CisJaWYgKGNhbl9vdXRwdXQoKSkKKwkJcmVmcmVzaF9wcm9ncmVzc19tZXRlcigpOworCisJc2lnbmFsKFNJR0FMUk0sIHVwZGF0ZV9wcm9ncmVzc19tZXRlcik7CisJc2lnbmFsKFNJR1dJTkNILCBzaWdfd2luY2gpOworCWFsYXJtKFVQREFURV9JTlRFUlZBTCk7Cit9CisKK3ZvaWQKK3N0b3BfcHJvZ3Jlc3NfbWV0ZXIodm9pZCkKK3sKKwlhbGFybSgwKTsKKworCWlmICghY2FuX291dHB1dCgpKQorCQlyZXR1cm47CisKKwkvKiBFbnN1cmUgd2UgY29tcGxldGUgdGhlIHByb2dyZXNzICovCisJaWYgKGN1cl9wb3MgIT0gZW5kX3BvcykKKwkJcmVmcmVzaF9wcm9ncmVzc19tZXRlcigpOworCisJYXRvbWljaW8odndyaXRlLCBTVERPVVRfRklMRU5PLCAiXG4iLCAxKTsKK30KKworc3RhdGljIHZvaWQKK3NpZ193aW5jaChpbnQgc2lnKQoreworCXdpbl9yZXNpemVkID0gMTsKK30KKworc3RhdGljIHZvaWQKK3NldHNjcmVlbnNpemUodm9pZCkKK3sKKwlzdHJ1Y3Qgd2luc2l6ZSB3aW5zaXplOworCisJaWYgKGlvY3RsKFNURE9VVF9GSUxFTk8sIFRJT0NHV0lOU1osICZ3aW5zaXplKSAhPSAtMSAmJgorCSAgICB3aW5zaXplLndzX2NvbCAhPSAwKSB7CisJCWlmICh3aW5zaXplLndzX2NvbCA+IE1BWF9XSU5TSVpFKQorCQkJd2luX3NpemUgPSBNQVhfV0lOU0laRTsKKwkJZWxzZQorCQkJd2luX3NpemUgPSB3aW5zaXplLndzX2NvbDsKKwl9IGVsc2UKKwkJd2luX3NpemUgPSBERUZBVUxUX1dJTlNJWkU7CisJd2luX3NpemUgKz0gMTsJCQkJCS8qIHRyYWlsaW5nIFwwICovCit9CisjZW5kaWYgLyogUFJPR1JFU1NfTUVURVIgKi8KZGlmZiAtLWdpdCBhL3Byb2dyZXNzbWV0ZXIuaCBiL3Byb2dyZXNzbWV0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmI5YTBiCi0tLSAvZGV2L251bGwKKysrIGIvcHJvZ3Jlc3NtZXRlci5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCSRPcGVuQlNEOiBwcm9ncmVzc21ldGVyLmgsdiAxLjEgMjAwMy8wMS8xMCAwODoxOTowNyBmZ3NjaCBFeHAgJAkqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMiBOaWxzIE5vcmRtYW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCit2b2lkCXN0YXJ0X3Byb2dyZXNzX21ldGVyKGNoYXIgKiwgb2ZmX3QsIG9mZl90ICopOwordm9pZAlzdG9wX3Byb2dyZXNzX21ldGVyKHZvaWQpOwpkaWZmIC0tZ2l0IGEvcXVldWUuYyBiL3F1ZXVlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E4MDEyNAotLS0gL2Rldi9udWxsCisrKyBiL3F1ZXVlLmMKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAicXVldWUuaCIKKwordm9pZCBpbml0cXVldWUoc3RydWN0IFF1ZXVlKiBxdWV1ZSkgeworCisJcXVldWUtPmhlYWQgPSBOVUxMOworCXF1ZXVlLT50YWlsID0gTlVMTDsKKwlxdWV1ZS0+Y291bnQgPSAwOworfQorCitpbnQgaXNlbXB0eShzdHJ1Y3QgUXVldWUqIHF1ZXVlKSB7CisKKwlyZXR1cm4gKHF1ZXVlLT5oZWFkID09IE5VTEwpOworfQorCQordm9pZCogZGVxdWV1ZShzdHJ1Y3QgUXVldWUqIHF1ZXVlKSB7CisKKwl2b2lkKiByZXQ7CisJc3RydWN0IExpbmsqIG9sZGhlYWQ7CisJZHJvcGJlYXJfYXNzZXJ0KCFpc2VtcHR5KHF1ZXVlKSk7CisJCisJcmV0ID0gcXVldWUtPmhlYWQtPml0ZW07CisJb2xkaGVhZCA9IHF1ZXVlLT5oZWFkOworCQorCWlmIChvbGRoZWFkLT5saW5rICE9IE5VTEwpIHsKKwkJcXVldWUtPmhlYWQgPSBvbGRoZWFkLT5saW5rOworCX0gZWxzZSB7CisJCXF1ZXVlLT5oZWFkID0gTlVMTDsKKwkJcXVldWUtPnRhaWwgPSBOVUxMOworCQlUUkFDRSgoImVtcHR5IHF1ZXVlIGRlcXVlaW5nIikpCisJfQorCisJbV9mcmVlKG9sZGhlYWQpOworCXF1ZXVlLT5jb3VudC0tOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgKmV4YW1pbmUoc3RydWN0IFF1ZXVlKiBxdWV1ZSkgeworCisJZHJvcGJlYXJfYXNzZXJ0KCFpc2VtcHR5KHF1ZXVlKSk7CisJcmV0dXJuIHF1ZXVlLT5oZWFkLT5pdGVtOworfQorCit2b2lkIGVucXVldWUoc3RydWN0IFF1ZXVlKiBxdWV1ZSwgdm9pZCogaXRlbSkgeworCisJc3RydWN0IExpbmsqIG5ld2xpbms7CisKKwlUUkFDRSgoImVudGVyIGVucXVldWUiKSkKKwluZXdsaW5rID0gKHN0cnVjdCBMaW5rKiltX21hbGxvYyhzaXplb2Yoc3RydWN0IExpbmspKTsKKworCW5ld2xpbmstPml0ZW0gPSBpdGVtOworCW5ld2xpbmstPmxpbmsgPSBOVUxMOworCisJaWYgKHF1ZXVlLT50YWlsICE9IE5VTEwpIHsKKwkJcXVldWUtPnRhaWwtPmxpbmsgPSBuZXdsaW5rOworCX0KKwlxdWV1ZS0+dGFpbCA9IG5ld2xpbms7CisKKwlpZiAocXVldWUtPmhlYWQgPT0gTlVMTCkgeworCQlxdWV1ZS0+aGVhZCA9IG5ld2xpbms7CisJfQorCXF1ZXVlLT5jb3VudCsrOworCVRSQUNFKCgibGVhdmUgZW5xdWV1ZSIpKQorfQpkaWZmIC0tZ2l0IGEvcXVldWUuaCBiL3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBmYmI5ZAotLS0gL2Rldi9udWxsCisrKyBiL3F1ZXVlLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfUVVFVUVfSF8KKyNkZWZpbmUgX1FVRVVFX0hfCisKK3N0cnVjdCBMaW5rIHsKKworCXZvaWQqIGl0ZW07CisJc3RydWN0IExpbmsqIGxpbms7CisKK307CisKK3N0cnVjdCBRdWV1ZSB7CisKKwlzdHJ1Y3QgTGluayogaGVhZDsKKwlzdHJ1Y3QgTGluayogdGFpbDsKKwl1bnNpZ25lZCBpbnQgY291bnQ7IC8qIHNhZmV0eSB2YWx1ZSAqLworCit9OworCit2b2lkIGluaXRxdWV1ZShzdHJ1Y3QgUXVldWUqIHF1ZXVlKTsKK2ludCBpc2VtcHR5KHN0cnVjdCBRdWV1ZSogcXVldWUpOwordm9pZCogZGVxdWV1ZShzdHJ1Y3QgUXVldWUqIHF1ZXVlKTsKK3ZvaWQgKmV4YW1pbmUoc3RydWN0IFF1ZXVlKiBxdWV1ZSk7Cit2b2lkIGVucXVldWUoc3RydWN0IFF1ZXVlKiBxdWV1ZSwgdm9pZCogaXRlbSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvcmFuZG9tLmMgYi9yYW5kb20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTQ3NWVkCi0tLSAvZGV2L251bGwKKysrIGIvcmFuZG9tLmMKQEAgLTAsMCArMSwyNDAgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgImJpZ251bS5oIgorCitzdGF0aWMgaW50IGRvbmVyYW5kaW5pdCA9IDA7CisKKy8qIHRoaXMgaXMgdXNlZCB0byBnZW5lcmF0ZSB1bmlxdWUgb3V0cHV0IGZyb20gdGhlIHNhbWUgaGFzaHBvb2wgKi8KK3N0YXRpYyB1aW50MzJfdCBjb3VudGVyID0gMDsKKy8qIHRoZSBtYXggdmFsdWUgZm9yIHRoZSBjb3VudGVyLCBzbyBpdCB3b24ndCBpbnRlZ2VyIG92ZXJmbG93ICovCisjZGVmaW5lIE1BWF9DT1VOVEVSIDE8PDMwIAorCitzdGF0aWMgdW5zaWduZWQgY2hhciBoYXNocG9vbFtTSEExX0hBU0hfU0laRV07CisKKyNkZWZpbmUgSU5JVF9TRUVEX1NJWkUgMzIgLyogMjU2IGJpdHMgKi8KKworc3RhdGljIHZvaWQgcmVhZHJhbmQodW5zaWduZWQgY2hhciogYnVmLCB1bnNpZ25lZCBpbnQgYnVmbGVuKTsKKworLyogVGhlIGJhc2ljIHNldHVwIGlzIHdlIHJlYWQgc29tZSBkYXRhIGZyb20gL2Rldi8odSlyYW5kb20gb3IgcHJuZ2QgYW5kIGhhc2ggaXQKKyAqIGludG8gaGFzaHBvb2wuIFRvIHJlYWQgZGF0YSwgd2UgaGFzaCB0b2dldGhlciBjdXJyZW50IGhhc2hwb29sIGNvbnRlbnRzLAorICogYW5kIGEgY291bnRlci4gV2UgZmVlZCBtb3JlIGRhdGEgaW4gYnkgaGFzaGluZyB0aGUgY3VycmVudCBwb29sIGFuZCBuZXcKKyAqIGRhdGEgaW50byB0aGUgcG9vbC4KKyAqCisgKiBJdCBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoYXQgY291bnRlciBkb2Vzbid0IHdyYXAgYXJvdW5kIGJlZm9yZSB3ZQorICogZmVlZCBpbiBuZXcgZW50cm9weS4KKyAqCisgKi8KKworc3RhdGljIHZvaWQgcmVhZHJhbmQodW5zaWduZWQgY2hhciogYnVmLCB1bnNpZ25lZCBpbnQgYnVmbGVuKSB7CisKKwlzdGF0aWMgaW50IGFscmVhZHlfYmxvY2tlZCA9IDA7CisJaW50IHJlYWRmZDsKKwl1bnNpZ25lZCBpbnQgcmVhZHBvczsKKwlpbnQgcmVhZGxlbjsKKyNpZmRlZiBEUk9QQkVBUl9QUk5HRF9TT0NLRVQKKwlzdHJ1Y3Qgc29ja2FkZHJfdW4gZWdkc29jazsKKwljaGFyIGVnZGNtZFsyXTsKKyNlbmRpZgorCisjaWZkZWYgRFJPUEJFQVJfUkFORE9NX0RFVgorCXJlYWRmZCA9IG9wZW4oRFJPUEJFQVJfUkFORE9NX0RFViwgT19SRE9OTFkpOworCWlmIChyZWFkZmQgPCAwKSB7CisJCWRyb3BiZWFyX2V4aXQoImNvdWxkbid0IG9wZW4gcmFuZG9tIGRldmljZSIpOworCX0KKyNlbmRpZgorCisjaWZkZWYgRFJPUEJFQVJfUFJOR0RfU09DS0VUCisJbWVtc2V0KCh2b2lkKikmZWdkc29jaywgMHgwLCBzaXplb2YoZWdkc29jaykpOworCWVnZHNvY2suc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisJc3RybGNweShlZ2Rzb2NrLnN1bl9wYXRoLCBEUk9QQkVBUl9QUk5HRF9TT0NLRVQsCisJCQlzaXplb2YoZWdkc29jay5zdW5fcGF0aCkpOworCisJcmVhZGZkID0gc29ja2V0KFBGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKwlpZiAocmVhZGZkIDwgMCkgeworCQlkcm9wYmVhcl9leGl0KCJjb3VsZG4ndCBvcGVuIHJhbmRvbSBkZXZpY2UiKTsKKwl9CisJLyogdG9kbyAtIHRyeSB2YXJpb3VzIGNvbW1vbiBsb2NhdGlvbnMgKi8KKwlpZiAoY29ubmVjdChyZWFkZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZlZ2Rzb2NrLCAKKwkJCXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pKSA8IDApIHsKKwkJZHJvcGJlYXJfZXhpdCgiY291bGRuJ3Qgb3BlbiByYW5kb20gZGV2aWNlIik7CisJfQorCisJaWYgKGJ1ZmxlbiA+IDI1NSkKKwkJZHJvcGJlYXJfZXhpdCgiY2FuJ3QgcmVxdWVzdCBtb3JlIHRoYW4gMjU1IGJ5dGVzIGZyb20gZWdkIik7CisJZWdkY21kWzBdID0gMHgwMjsJLyogYmxvY2tpbmcgcmVhZCAqLworCWVnZGNtZFsxXSA9ICh1bnNpZ25lZCBjaGFyKWJ1ZmxlbjsKKwlpZiAod3JpdGUocmVhZGZkLCBlZ2RjbWQsIDIpIDwgMCkKKwkJZHJvcGJlYXJfZXhpdCgiY2FuJ3Qgc2VuZCBjb21tYW5kIHRvIGVnZCIpOworI2VuZGlmCisKKwkvKiByZWFkIHRoZSBhY3R1YWwgcmFuZG9tIGRhdGEgKi8KKwlyZWFkcG9zID0gMDsKKwlkbyB7CisJCWlmICghYWxyZWFkeV9ibG9ja2VkKQorCQl7CisJCQlpbnQgcmV0OworCQkJc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKwkJCWZkX3NldCByZWFkX2ZkczsKKworCQkJdGltZW91dC50dl9zZWMgPSAyOyAvKiB0d28gc2Vjb25kcyBzaG91bGQgYmUgZW5vdWdoICovCisJCQl0aW1lb3V0LnR2X3VzZWMgPSAwOworCisJCQlGRF9aRVJPKCZyZWFkX2Zkcyk7CisJCQlGRF9TRVQocmVhZGZkLCAmcmVhZF9mZHMpOworCQkJcmV0ID0gc2VsZWN0KHJlYWRmZCArIDEsICZyZWFkX2ZkcywgTlVMTCwgTlVMTCwgJnRpbWVvdXQpOworCQkJaWYgKHJldCA9PSAwKQorCQkJeworCQkJCWRyb3BiZWFyX2xvZyhMT0dfSU5GTywgIldhcm5pbmc6IFJlYWRpbmcgdGhlIHJhbmRvbSBzb3VyY2Ugc2VlbXMgdG8gaGF2ZSBibG9ja2VkLlxuSWYgeW91IGV4cGVyaWVuY2UgcHJvYmxlbXMsIHlvdSBwcm9iYWJseSBuZWVkIHRvIGZpbmQgYSBiZXR0ZXIgZW50cm9weSBzb3VyY2UuIik7CisJCQkJYWxyZWFkeV9ibG9ja2VkID0gMTsKKwkJCX0KKwkJfQorCQlyZWFkbGVuID0gcmVhZChyZWFkZmQsICZidWZbcmVhZHBvc10sIGJ1ZmxlbiAtIHJlYWRwb3MpOworCQlpZiAocmVhZGxlbiA8PSAwKSB7CisJCQlpZiAocmVhZGxlbiA8IDAgJiYgZXJybm8gPT0gRUlOVFIpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWRyb3BiZWFyX2V4aXQoImVycm9yIHJlYWRpbmcgcmFuZG9tIHNvdXJjZSIpOworCQl9CisJCXJlYWRwb3MgKz0gcmVhZGxlbjsKKwl9IHdoaWxlIChyZWFkcG9zIDwgYnVmbGVuKTsKKworCWNsb3NlIChyZWFkZmQpOworfQorCisvKiBpbml0aWFsaXNlIHRoZSBwcm5nIGZyb20gL2Rldi8odSlyYW5kb20gb3IgcHJuZ2QgKi8KK3ZvaWQgc2VlZHJhbmRvbSgpIHsKKwkJCisJdW5zaWduZWQgY2hhciByZWFkYnVmW0lOSVRfU0VFRF9TSVpFXTsKKworCWhhc2hfc3RhdGUgaHM7CisKKwkvKiBpbml0aWFsaXNlIHNvIHRoYXQgdGhpbmdzIHdvbid0IHdhcm4gYWJvdXQKKwkgKiBoYXNoaW5nIGFuIHVuZGVmaW5lZCBidWZmZXIgKi8KKwlpZiAoIWRvbmVyYW5kaW5pdCkgeworCQltX2J1cm4oaGFzaHBvb2wsIHNpemVvZihoYXNocG9vbCkpOworCX0KKworCS8qIGdldCB0aGUgc2VlZCBkYXRhICovCisJcmVhZHJhbmQocmVhZGJ1Ziwgc2l6ZW9mKHJlYWRidWYpKTsKKworCS8qIGhhc2ggaW4gdGhlIG5ldyBzZWVkIGRhdGEgKi8KKwlzaGExX2luaXQoJmhzKTsKKwlzaGExX3Byb2Nlc3MoJmhzLCAodm9pZCopaGFzaHBvb2wsIHNpemVvZihoYXNocG9vbCkpOworCXNoYTFfcHJvY2VzcygmaHMsICh2b2lkKilyZWFkYnVmLCBzaXplb2YocmVhZGJ1ZikpOworCXNoYTFfZG9uZSgmaHMsIGhhc2hwb29sKTsKKworCWNvdW50ZXIgPSAwOworCWRvbmVyYW5kaW5pdCA9IDE7Cit9CisKKy8qIGhhc2ggdGhlIGN1cnJlbnQgcmFuZG9tIHBvb2wgd2l0aCBzb21lIHVuaXF1ZSBpZGVudGlmaWVycworICogZm9yIHRoaXMgcHJvY2VzcyBhbmQgcG9pbnQtaW4tdGltZS4gdGhpcyBpcyB1c2VkIHRvIHNlcGFyYXRlCisgKiB0aGUgcmFuZG9tIHBvb2xzIGZvciBmb3JrKCllZCBwcm9jZXNzZXMuICovCit2b2lkIHJlc2VlZHJhbmRvbSgpIHsKKworCXBpZF90IHBpZDsKKwloYXNoX3N0YXRlIGhzOworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJaWYgKCFkb25lcmFuZGluaXQpIHsKKwkJZHJvcGJlYXJfZXhpdCgic2VlZHJhbmRvbSBub3QgZG9uZSIpOworCX0KKworCXBpZCA9IGdldHBpZCgpOworCWdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworCisJc2hhMV9pbml0KCZocyk7CisJc2hhMV9wcm9jZXNzKCZocywgKHZvaWQqKWhhc2hwb29sLCBzaXplb2YoaGFzaHBvb2wpKTsKKwlzaGExX3Byb2Nlc3MoJmhzLCAodm9pZCopJnBpZCwgc2l6ZW9mKHBpZCkpOworCXNoYTFfcHJvY2VzcygmaHMsICh2b2lkKikmdHYsIHNpemVvZih0dikpOworCXNoYTFfZG9uZSgmaHMsIGhhc2hwb29sKTsKK30KKworLyogcmV0dXJuIGxlbiBieXRlcyBvZiBwc2V1ZG8tcmFuZG9tIGRhdGEgKi8KK3ZvaWQgZ2VucmFuZG9tKHVuc2lnbmVkIGNoYXIqIGJ1ZiwgdW5zaWduZWQgaW50IGxlbikgeworCisJaGFzaF9zdGF0ZSBoczsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbU0hBMV9IQVNIX1NJWkVdOworCXVuc2lnbmVkIGludCBjb3B5bGVuOworCisJaWYgKCFkb25lcmFuZGluaXQpIHsKKwkJZHJvcGJlYXJfZXhpdCgic2VlZHJhbmRvbSBub3QgZG9uZSIpOworCX0KKworCXdoaWxlIChsZW4gPiAwKSB7CisJCXNoYTFfaW5pdCgmaHMpOworCQlzaGExX3Byb2Nlc3MoJmhzLCAodm9pZCopaGFzaHBvb2wsIHNpemVvZihoYXNocG9vbCkpOworCQlzaGExX3Byb2Nlc3MoJmhzLCAodm9pZCopJmNvdW50ZXIsIHNpemVvZihjb3VudGVyKSk7CisJCXNoYTFfZG9uZSgmaHMsIGhhc2gpOworCisJCWNvdW50ZXIrKzsKKwkJaWYgKGNvdW50ZXIgPiBNQVhfQ09VTlRFUikgeworCQkJc2VlZHJhbmRvbSgpOworCQl9CisKKwkJY29weWxlbiA9IE1JTihsZW4sIFNIQTFfSEFTSF9TSVpFKTsKKwkJbWVtY3B5KGJ1ZiwgaGFzaCwgY29weWxlbik7CisJCWxlbiAtPSBjb3B5bGVuOworCQlidWYgKz0gY29weWxlbjsKKwl9CisJbV9idXJuKGhhc2gsIHNpemVvZihoYXNoKSk7Cit9CisKKy8qIEdlbmVyYXRlcyBhIHJhbmRvbSBtcF9pbnQuIAorICogbWF4IGlzIGEgKm1wX2ludCBzcGVjaWZ5aW5nIGFuIHVwcGVyIGJvdW5kLgorICogcmFuZCBtdXN0IGJlIGFuIGluaXRpYWxpc2VkICptcF9pbnQgZm9yIHRoZSByZXN1bHQuCisgKiB0aGUgcmVzdWx0IHJhbmQgc2F0aXNmaWVzOiAgMCA8IHJhbmQgPCBtYXggCisgKiAqLwordm9pZCBnZW5fcmFuZG9tX21waW50KG1wX2ludCAqbWF4LCBtcF9pbnQgKnJhbmQpIHsKKworCXVuc2lnbmVkIGNoYXIgKnJhbmRidWYgPSBOVUxMOworCXVuc2lnbmVkIGludCBsZW4gPSAwOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgbWFza3NbXSA9IHsweGZmLCAweDAxLCAweDAzLCAweDA3LCAweDBmLCAweDFmLCAweDNmLCAweDdmfTsKKworCWNvbnN0IGludCBzaXplX2JpdHMgPSBtcF9jb3VudF9iaXRzKG1heCk7CisKKwlsZW4gPSBzaXplX2JpdHMgLyA4OworCWlmICgoc2l6ZV9iaXRzICUgOCkgIT0gMCkgeworCQlsZW4gKz0gMTsKKwl9CisKKwlyYW5kYnVmID0gKHVuc2lnbmVkIGNoYXIqKW1fbWFsbG9jKGxlbik7CisJZG8geworCQlnZW5yYW5kb20ocmFuZGJ1ZiwgbGVuKTsKKwkJLyogTWFzayBvdXQgdGhlIHVucmVxdWlyZWQgYml0cyAtIG1wX3JlYWRfdW5zaWduZWRfYmluIGV4cGVjdHMKKwkJICogTVNCIGZpcnN0LiovCisJCXJhbmRidWZbMF0gJj0gbWFza3Nbc2l6ZV9iaXRzICUgOF07CisKKwkJYnl0ZXNfdG9fbXAocmFuZCwgcmFuZGJ1ZiwgbGVuKTsKKworCQkvKiBrZWVwIHJlZ2VuZXJhdGluZyB1bnRpbCB3ZSBnZXQgb25lIHNhdGlzZnlpbmcKKwkJICogMCA8IHJhbmQgPCBtYXggICAgKi8KKwl9IHdoaWxlIChtcF9jbXAocmFuZCwgbWF4KSAhPSBNUF9MVCk7CisJbV9idXJuKHJhbmRidWYsIGxlbik7CisJbV9mcmVlKHJhbmRidWYpOworfQpkaWZmIC0tZ2l0IGEvcmFuZG9tLmggYi9yYW5kb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGEwYTM5Ci0tLSAvZGV2L251bGwKKysrIGIvcmFuZG9tLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfUkFORE9NX0hfCisjZGVmaW5lIF9SQU5ET01fSF8KKworc3RydWN0IG1wX2ludDsKKwordm9pZCBzZWVkcmFuZG9tKCk7Cit2b2lkIHJlc2VlZHJhbmRvbSgpOwordm9pZCBnZW5yYW5kb20odW5zaWduZWQgY2hhciogYnVmLCBpbnQgbGVuKTsKK3ZvaWQgYWRkcmFuZG9tKHVuc2lnbmVkIGNoYXIqIGJ1ZiwgaW50IGxlbik7Cit2b2lkIGdlbl9yYW5kb21fbXBpbnQobXBfaW50ICptYXgsIG1wX2ludCAqcmFuZCk7CisKKyNlbmRpZiAvKiBfUkFORE9NX0hfICovCmRpZmYgLS1naXQgYS9yc2EuYyBiL3JzYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNjY1ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9yc2EuYwpAQCAtMCwwICsxLDQyNCBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworLyogUGVyZm9ybSBSU0Egb3BlcmF0aW9ucyBvbiBkYXRhLCBpbmNsdWRpbmcgcmVhZGluZyBrZXlzLCBzaWduaW5nIGFuZAorICogdmVyaWZpY2F0aW9uLgorICoKKyAqIFRoZSBmb3JtYXQgaXMgc3BlY2lmaWVkIGluIHJmYzI0MzcsIEFwcGxpZWQgQ3J5cHRvZ3JhcGh5IG9yIFRoZSBIYW5kYm9vayBvZgorICogQXBwbGllZCBDcnlwdG9ncmFwaHkgZGV0YWlsIHRoZSBnZW5lcmFsIGFsZ29yaXRobS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAiYmlnbnVtLmgiCisjaW5jbHVkZSAicnNhLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAicmFuZG9tLmgiCisKKyNpZmRlZiBEUk9QQkVBUl9SU0EgCisKK3N0YXRpYyB2b2lkIHJzYV9wYWRfZW0ocnNhX2tleSAqIGtleSwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqIGRhdGEsIHVuc2lnbmVkIGludCBsZW4sCisJCW1wX2ludCAqIHJzYV9lbSk7CisKKy8qIExvYWQgYSBwdWJsaWMgcnNhIGtleSBmcm9tIGEgYnVmZmVyLCBpbml0aWFsaXNpbmcgdGhlIHZhbHVlcy4KKyAqIFRoZSBrZXkgd2lsbCBoYXZlIHRoZSBzYW1lIGZvcm1hdCBhcyBidWZfcHV0X3JzYV9rZXkuCisgKiBUaGVzZSBzaG91bGQgYmUgZnJlZWQgd2l0aCByc2Ffa2V5X2ZyZWUuCisgKiBSZXR1cm5zIERST1BCRUFSX1NVQ0NFU1Mgb3IgRFJPUEJFQVJfRkFJTFVSRSAqLworaW50IGJ1Zl9nZXRfcnNhX3B1Yl9rZXkoYnVmZmVyKiBidWYsIHJzYV9rZXkgKmtleSkgeworCisgICAgaW50IHJldCA9IERST1BCRUFSX0ZBSUxVUkU7CisJVFJBQ0UoKCJlbnRlciBidWZfZ2V0X3JzYV9wdWJfa2V5IikpCisJZHJvcGJlYXJfYXNzZXJ0KGtleSAhPSBOVUxMKTsKKwlrZXktPmUgPSBtX21hbGxvYyhzaXplb2YobXBfaW50KSk7CisJa2V5LT5uID0gbV9tYWxsb2Moc2l6ZW9mKG1wX2ludCkpOworCW1fbXBfaW5pdF9tdWx0aShrZXktPmUsIGtleS0+biwgTlVMTCk7CisJa2V5LT5kID0gTlVMTDsKKwlrZXktPnAgPSBOVUxMOworCWtleS0+cSA9IE5VTEw7CisKKwlidWZfaW5jcnBvcyhidWYsIDQrU1NIX1NJR05LRVlfUlNBX0xFTik7IC8qIGludCArICJzc2gtcnNhIiAqLworCisJaWYgKGJ1Zl9nZXRtcGludChidWYsIGtleS0+ZSkgPT0gRFJPUEJFQVJfRkFJTFVSRQorCSB8fCBidWZfZ2V0bXBpbnQoYnVmLCBrZXktPm4pID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJVFJBQ0UoKCJsZWF2ZSBidWZfZ2V0X3JzYV9wdWJfa2V5OiBmYWlsdXJlIikpCisJICAgIGdvdG8gb3V0OworCX0KKworCWlmIChtcF9jb3VudF9iaXRzKGtleS0+bikgPCBNSU5fUlNBX0tFWUxFTikgeworCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJyc2Ega2V5IHRvbyBzaG9ydCIpOworCSAgICBnb3RvIG91dDsKKwl9CisKKwlUUkFDRSgoImxlYXZlIGJ1Zl9nZXRfcnNhX3B1Yl9rZXk6IHN1Y2Nlc3MiKSkKKyAgICByZXQgPSBEUk9QQkVBUl9TVUNDRVNTOworb3V0OgorICAgIGlmIChyZXQgPT0gRFJPUEJFQVJfRkFJTFVSRSkgeworICAgICAgICBtX2ZyZWUoa2V5LT5lKTsKKyAgICAgICAgbV9mcmVlKGtleS0+bik7CisgICAgfQorCXJldHVybiByZXQ7Cit9CisKKy8qIFNhbWUgYXMgYnVmX2dldF9yc2FfcHViX2tleSwgYnV0IHJlYWRzIHByaXZhdGUgYml0cyBhdCB0aGUgZW5kLgorICogTG9hZHMgYSBwcml2YXRlIHJzYSBrZXkgZnJvbSBhIGJ1ZmZlcgorICogUmV0dXJucyBEUk9QQkVBUl9TVUNDRVNTIG9yIERST1BCRUFSX0ZBSUxVUkUgKi8KK2ludCBidWZfZ2V0X3JzYV9wcml2X2tleShidWZmZXIqIGJ1ZiwgcnNhX2tleSAqa2V5KSB7CisgICAgaW50IHJldCA9IERST1BCRUFSX0ZBSUxVUkU7CisKKwlUUkFDRSgoImVudGVyIGJ1Zl9nZXRfcnNhX3ByaXZfa2V5IikpCisJZHJvcGJlYXJfYXNzZXJ0KGtleSAhPSBOVUxMKTsKKworCWlmIChidWZfZ2V0X3JzYV9wdWJfa2V5KGJ1Ziwga2V5KSA9PSBEUk9QQkVBUl9GQUlMVVJFKSB7CisJCVRSQUNFKCgibGVhdmUgYnVmX2dldF9yc2FfcHJpdl9rZXk6IHB1YjogcmV0ID09IERST1BCRUFSX0ZBSUxVUkUiKSkKKwkJcmV0dXJuIERST1BCRUFSX0ZBSUxVUkU7CisJfQorCQorCWtleS0+ZCA9IE5VTEw7CisJa2V5LT5wID0gTlVMTDsKKwlrZXktPnEgPSBOVUxMOworCisJa2V5LT5kID0gbV9tYWxsb2Moc2l6ZW9mKG1wX2ludCkpOworCW1fbXBfaW5pdChrZXktPmQpOworCWlmIChidWZfZ2V0bXBpbnQoYnVmLCBrZXktPmQpID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJVFJBQ0UoKCJsZWF2ZSBidWZfZ2V0X3JzYV9wcml2X2tleTogZDogcmV0ID09IERST1BCRUFSX0ZBSUxVUkUiKSkKKwkgICAgZ290byBvdXQ7CisJfQorCisJaWYgKGJ1Zi0+cG9zID09IGJ1Zi0+bGVuKSB7CisgICAgCS8qIG9sZCBEcm9wYmVhciBwcml2YXRlIGtleXMgZGlkbid0IGtlZXAgcCBhbmQgcSwgc28gd2Ugd2lsbCBpZ25vcmUgdGhlbSovCisJfSBlbHNlIHsKKwkJa2V5LT5wID0gbV9tYWxsb2Moc2l6ZW9mKG1wX2ludCkpOworCQlrZXktPnEgPSBtX21hbGxvYyhzaXplb2YobXBfaW50KSk7CisJCW1fbXBfaW5pdF9tdWx0aShrZXktPnAsIGtleS0+cSwgTlVMTCk7CisKKwkJaWYgKGJ1Zl9nZXRtcGludChidWYsIGtleS0+cCkgPT0gRFJPUEJFQVJfRkFJTFVSRSkgeworCQkJVFJBQ0UoKCJsZWF2ZSBidWZfZ2V0X3JzYV9wcml2X2tleTogcDogcmV0ID09IERST1BCRUFSX0ZBSUxVUkUiKSkKKwkJICAgIGdvdG8gb3V0OworCQl9CisKKwkJaWYgKGJ1Zl9nZXRtcGludChidWYsIGtleS0+cSkgPT0gRFJPUEJFQVJfRkFJTFVSRSkgeworCQkJVFJBQ0UoKCJsZWF2ZSBidWZfZ2V0X3JzYV9wcml2X2tleTogcTogcmV0ID09IERST1BCRUFSX0ZBSUxVUkUiKSkKKwkJICAgIGdvdG8gb3V0OworCQl9CisJfQorCisgICAgcmV0ID0gRFJPUEJFQVJfU1VDQ0VTUzsKK291dDoKKyAgICBpZiAocmV0ID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKyAgICAgICAgbV9mcmVlKGtleS0+ZCk7CisgICAgICAgIG1fZnJlZShrZXktPnApOworICAgICAgICBtX2ZyZWUoa2V5LT5xKTsKKyAgICB9CisJVFJBQ0UoKCJsZWF2ZSBidWZfZ2V0X3JzYV9wcml2X2tleSIpKQorICAgIHJldHVybiByZXQ7Cit9CisJCisKKy8qIENsZWFyIGFuZCBmcmVlIHRoZSBtZW1vcnkgdXNlZCBieSBhIHB1YmxpYyBvciBwcml2YXRlIGtleSAqLwordm9pZCByc2Ffa2V5X2ZyZWUocnNhX2tleSAqa2V5KSB7CisKKwlUUkFDRSgoImVudGVyIHJzYV9rZXlfZnJlZSIpKQorCisJaWYgKGtleSA9PSBOVUxMKSB7CisJCVRSQUNFKCgibGVhdmUgcnNhX2tleV9mcmVlOiBrZXkgPT0gTlVMTCIpKQorCQlyZXR1cm47CisJfQorCWlmIChrZXktPmQpIHsKKwkJbXBfY2xlYXIoa2V5LT5kKTsKKwkJbV9mcmVlKGtleS0+ZCk7CisJfQorCWlmIChrZXktPmUpIHsKKwkJbXBfY2xlYXIoa2V5LT5lKTsKKwkJbV9mcmVlKGtleS0+ZSk7CisJfQorCWlmIChrZXktPm4pIHsKKwkJIG1wX2NsZWFyKGtleS0+bik7CisJCSBtX2ZyZWUoa2V5LT5uKTsKKwl9CisJaWYgKGtleS0+cCkgeworCQltcF9jbGVhcihrZXktPnApOworCQltX2ZyZWUoa2V5LT5wKTsKKwl9CisJaWYgKGtleS0+cSkgeworCQltcF9jbGVhcihrZXktPnEpOworCQltX2ZyZWUoa2V5LT5xKTsKKwl9CisJbV9mcmVlKGtleSk7CisJVFJBQ0UoKCJsZWF2ZSByc2Ffa2V5X2ZyZWUiKSkKK30KKworLyogUHV0IHRoZSBwdWJsaWMgcnNhIGtleSBpbnRvIHRoZSBidWZmZXIgaW4gdGhlIHJlcXVpcmVkIGZvcm1hdDoKKyAqCisgKiBzdHJpbmcJInNzaC1yc2EiCisgKiBtcF9pbnQJZQorICogbXBfaW50CW4KKyAqLwordm9pZCBidWZfcHV0X3JzYV9wdWJfa2V5KGJ1ZmZlciogYnVmLCByc2Ffa2V5ICprZXkpIHsKKworCVRSQUNFKCgiZW50ZXIgYnVmX3B1dF9yc2FfcHViX2tleSIpKQorCWRyb3BiZWFyX2Fzc2VydChrZXkgIT0gTlVMTCk7CisKKwlidWZfcHV0c3RyaW5nKGJ1ZiwgU1NIX1NJR05LRVlfUlNBLCBTU0hfU0lHTktFWV9SU0FfTEVOKTsKKwlidWZfcHV0bXBpbnQoYnVmLCBrZXktPmUpOworCWJ1Zl9wdXRtcGludChidWYsIGtleS0+bik7CisKKwlUUkFDRSgoImxlYXZlIGJ1Zl9wdXRfcnNhX3B1Yl9rZXkiKSkKKworfQorCisvKiBTYW1lIGFzIGJ1Zl9wdXRfcnNhX3B1Yl9rZXksIGJ1dCB3aXRoIHRoZSBwcml2YXRlICJ4IiBrZXkgYXBwZW5kZWQgKi8KK3ZvaWQgYnVmX3B1dF9yc2FfcHJpdl9rZXkoYnVmZmVyKiBidWYsIHJzYV9rZXkgKmtleSkgeworCisJVFJBQ0UoKCJlbnRlciBidWZfcHV0X3JzYV9wcml2X2tleSIpKQorCisJZHJvcGJlYXJfYXNzZXJ0KGtleSAhPSBOVUxMKTsKKwlidWZfcHV0X3JzYV9wdWJfa2V5KGJ1Ziwga2V5KTsKKwlidWZfcHV0bXBpbnQoYnVmLCBrZXktPmQpOworCisJLyogbmV3IHZlcnNpb25zIGhhdmUgcCBhbmQgcSwgb2xkIHZlcnNpb25zIGRvbid0ICovCisJaWYgKGtleS0+cCkgeworCQlidWZfcHV0bXBpbnQoYnVmLCBrZXktPnApOworCX0KKwlpZiAoa2V5LT5xKSB7CisJCWJ1Zl9wdXRtcGludChidWYsIGtleS0+cSk7CisJfQorCisKKwlUUkFDRSgoImxlYXZlIGJ1Zl9wdXRfcnNhX3ByaXZfa2V5IikpCisKK30KKworI2lmZGVmIERST1BCRUFSX1NJR05LRVlfVkVSSUZZCisvKiBWZXJpZnkgYSBzaWduYXR1cmUgaW4gYnVmLCBtYWRlIG9uIGRhdGEgYnkgdGhlIGtleSBnaXZlbi4KKyAqIFJldHVybnMgRFJPUEJFQVJfU1VDQ0VTUyBvciBEUk9QQkVBUl9GQUlMVVJFICovCitpbnQgYnVmX3JzYV92ZXJpZnkoYnVmZmVyICogYnVmLCByc2Ffa2V5ICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsCisJCXVuc2lnbmVkIGludCBsZW4pIHsKKworCXVuc2lnbmVkIGludCBzbGVuOworCURFRl9NUF9JTlQocnNhX3MpOworCURFRl9NUF9JTlQocnNhX21kYXNoKTsKKwlERUZfTVBfSU5UKHJzYV9lbSk7CisJaW50IHJldCA9IERST1BCRUFSX0ZBSUxVUkU7CisKKwlUUkFDRSgoImVudGVyIGJ1Zl9yc2FfdmVyaWZ5IikpCisKKwlkcm9wYmVhcl9hc3NlcnQoa2V5ICE9IE5VTEwpOworCisJbV9tcF9pbml0X211bHRpKCZyc2FfbWRhc2gsICZyc2FfcywgJnJzYV9lbSwgTlVMTCk7CisKKwlzbGVuID0gYnVmX2dldGludChidWYpOworCWlmIChzbGVuICE9ICh1bnNpZ25lZCBpbnQpbXBfdW5zaWduZWRfYmluX3NpemUoa2V5LT5uKSkgeworCQlUUkFDRSgoImJhZCBzaXplIikpCisJCWdvdG8gb3V0OworCX0KKworCWlmIChtcF9yZWFkX3Vuc2lnbmVkX2JpbigmcnNhX3MsIGJ1Zl9nZXRwdHIoYnVmLCBidWYtPmxlbiAtIGJ1Zi0+cG9zKSwKKwkJCQlidWYtPmxlbiAtIGJ1Zi0+cG9zKSAhPSBNUF9PS0FZKSB7CisJCVRSQUNFKCgiZmFpbGVkIHJlYWRpbmcgcnNhX3MiKSkKKwkJZ290byBvdXQ7CisJfQorCisJLyogY2hlY2sgdGhhdCBzIDw9IG4tMSAqLworCWlmIChtcF9jbXAoJnJzYV9zLCBrZXktPm4pICE9IE1QX0xUKSB7CisJCVRSQUNFKCgicyA+IG4tMSIpKQorCQlnb3RvIG91dDsKKwl9CisKKwkvKiBjcmVhdGUgdGhlIG1hZ2ljIFBLQ1MgcGFkZGVkIHZhbHVlICovCisJcnNhX3BhZF9lbShrZXksIGRhdGEsIGxlbiwgJnJzYV9lbSk7CisKKwlpZiAobXBfZXhwdG1vZCgmcnNhX3MsIGtleS0+ZSwga2V5LT5uLCAmcnNhX21kYXNoKSAhPSBNUF9PS0FZKSB7CisJCVRSQUNFKCgiZmFpbGVkIGV4cHRtb2QgcnNhX3MiKSkKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKG1wX2NtcCgmcnNhX2VtLCAmcnNhX21kYXNoKSA9PSBNUF9FUSkgeworCQkvKiBzaWduYXR1cmUgaXMgdmFsaWQgKi8KKwkJVFJBQ0UoKCJzdWNjZXNzISIpKQorCQlyZXQgPSBEUk9QQkVBUl9TVUNDRVNTOworCX0KKworb3V0OgorCW1wX2NsZWFyX211bHRpKCZyc2FfbWRhc2gsICZyc2FfcywgJnJzYV9lbSwgTlVMTCk7CisJVFJBQ0UoKCJsZWF2ZSBidWZfcnNhX3ZlcmlmeTogcmV0ICVkIiwgcmV0KSkKKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYgLyogRFJPUEJFQVJfU0lHTktFWV9WRVJJRlkgKi8KKworLyogU2lnbiB0aGUgZGF0YSBwcmVzZW50ZWQgd2l0aCBrZXksIHdyaXRpbmcgdGhlIHNpZ25hdHVyZSBjb250ZW50cworICogdG8gdGhlIGJ1ZmZlciAqLwordm9pZCBidWZfcHV0X3JzYV9zaWduKGJ1ZmZlciogYnVmLCByc2Ffa2V5ICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsCisJCXVuc2lnbmVkIGludCBsZW4pIHsKKworCXVuc2lnbmVkIGludCBuc2l6ZSwgc3NpemU7CisJdW5zaWduZWQgaW50IGk7CisJREVGX01QX0lOVChyc2Ffcyk7CisJREVGX01QX0lOVChyc2FfdG1wMSk7CisJREVGX01QX0lOVChyc2FfdG1wMik7CisJREVGX01QX0lOVChyc2FfdG1wMyk7CisJCisJVFJBQ0UoKCJlbnRlciBidWZfcHV0X3JzYV9zaWduIikpCisJZHJvcGJlYXJfYXNzZXJ0KGtleSAhPSBOVUxMKTsKKworCW1fbXBfaW5pdF9tdWx0aSgmcnNhX3MsICZyc2FfdG1wMSwgJnJzYV90bXAyLCAmcnNhX3RtcDMsIE5VTEwpOworCisJcnNhX3BhZF9lbShrZXksIGRhdGEsIGxlbiwgJnJzYV90bXAxKTsKKworCS8qIHRoZSBhY3R1YWwgc2lnbmluZyBvZiB0aGUgcGFkZGVkIGRhdGEgKi8KKworI2lmZGVmIFJTQV9CTElORElORworCisJLyogV2l0aCBibGluZGluZywgcyA9IChyXigtMSkpKChlbSkqcl5lKV5kIG1vZCBuICovCisKKwkvKiBnZW5lcmF0ZSB0aGUgciBibGluZGluZyB2YWx1ZSAqLworCS8qIHJzYV90bXAyIGlzIHIgKi8KKwlnZW5fcmFuZG9tX21waW50KGtleS0+biwgJnJzYV90bXAyKTsKKworCS8qIHJzYV90bXAxIGlzIGVtICovCisJLyogZW0nID0gZW0gKiByXmUgbW9kIG4gKi8KKworCS8qIHJzYV9zIHVzZWQgYXMgYSB0ZW1wIHZhciovCisJaWYgKG1wX2V4cHRtb2QoJnJzYV90bXAyLCBrZXktPmUsIGtleS0+biwgJnJzYV9zKSAhPSBNUF9PS0FZKSB7CisJCWRyb3BiZWFyX2V4aXQoInJzYSBlcnJvciIpOworCX0KKwlpZiAobXBfaW52bW9kKCZyc2FfdG1wMiwga2V5LT5uLCAmcnNhX3RtcDMpICE9IE1QX09LQVkpIHsKKwkJZHJvcGJlYXJfZXhpdCgicnNhIGVycm9yIik7CisJfQorCWlmIChtcF9tdWxtb2QoJnJzYV90bXAxLCAmcnNhX3MsIGtleS0+biwgJnJzYV90bXAyKSAhPSBNUF9PS0FZKSB7CisJCWRyb3BiZWFyX2V4aXQoInJzYSBlcnJvciIpOworCX0KKworCS8qIHJzYV90bXAyIGlzIGVtJyAqLworCS8qIHMnID0gKGVtJyleZCBtb2QgbiAqLworCWlmIChtcF9leHB0bW9kKCZyc2FfdG1wMiwga2V5LT5kLCBrZXktPm4sICZyc2FfdG1wMSkgIT0gTVBfT0tBWSkgeworCQlkcm9wYmVhcl9leGl0KCJyc2EgZXJyb3IiKTsKKwl9CisKKwkvKiByc2FfdG1wMSBpcyBzJyAqLworCS8qIHJzYV90bXAzIGlzIHJeKC0xKSBtb2QgbiAqLworCS8qIHMgPSAocycpcl4oLTEpIG1vZCBuICovCisJaWYgKG1wX211bG1vZCgmcnNhX3RtcDEsICZyc2FfdG1wMywga2V5LT5uLCAmcnNhX3MpICE9IE1QX09LQVkpIHsKKwkJZHJvcGJlYXJfZXhpdCgicnNhIGVycm9yIik7CisJfQorCisjZWxzZQorCisJLyogcyA9IGVtXmQgbW9kIG4gKi8KKwkvKiByc2FfdG1wMSBpcyBlbSAqLworCWlmIChtcF9leHB0bW9kKCZyc2FfdG1wMSwga2V5LT5kLCBrZXktPm4sICZyc2FfcykgIT0gTVBfT0tBWSkgeworCQlkcm9wYmVhcl9leGl0KCJyc2EgZXJyb3IiKTsKKwl9CisKKyNlbmRpZiAvKiBSU0FfQkxJTkRJTkcgKi8KKworCW1wX2NsZWFyX211bHRpKCZyc2FfdG1wMSwgJnJzYV90bXAyLCAmcnNhX3RtcDMsIE5VTEwpOworCQorCS8qIGNyZWF0ZSB0aGUgc2lnbmF0dXJlIHRvIHJldHVybiAqLworCWJ1Zl9wdXRzdHJpbmcoYnVmLCBTU0hfU0lHTktFWV9SU0EsIFNTSF9TSUdOS0VZX1JTQV9MRU4pOworCisJbnNpemUgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZShrZXktPm4pOworCisJLyogc3RyaW5nIHJzYV9zaWduYXR1cmVfYmxvYiBsZW5ndGggKi8KKwlidWZfcHV0aW50KGJ1ZiwgbnNpemUpOworCS8qIHBhZCBvdXQgcyB0byBzYW1lIGxlbmd0aCBhcyBuICovCisJc3NpemUgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZSgmcnNhX3MpOworCWRyb3BiZWFyX2Fzc2VydChzc2l6ZSA8PSBuc2l6ZSk7CisJZm9yIChpID0gMDsgaSA8IG5zaXplLXNzaXplOyBpKyspIHsKKwkJYnVmX3B1dGJ5dGUoYnVmLCAweDAwKTsKKwl9CisKKwlpZiAobXBfdG9fdW5zaWduZWRfYmluKCZyc2FfcywgYnVmX2dldHdyaXRlcHRyKGJ1Ziwgc3NpemUpKSAhPSBNUF9PS0FZKSB7CisJCWRyb3BiZWFyX2V4aXQoInJzYSBlcnJvciIpOworCX0KKwlidWZfaW5jcndyaXRlcG9zKGJ1Ziwgc3NpemUpOworCW1wX2NsZWFyKCZyc2Ffcyk7CisKKyNpZiBkZWZpbmVkKERFQlVHX1JTQSkgJiYgZGVmaW5lZChERUJVR19UUkFDRSkKKwlwcmludGhleCgiUlNBIHNpZyIsIGJ1Zi0+ZGF0YSwgYnVmLT5sZW4pOworI2VuZGlmCisJCisKKwlUUkFDRSgoImxlYXZlIGJ1Zl9wdXRfcnNhX3NpZ24iKSkKK30KKworLyogQ3JlYXRlcyB0aGUgbWVzc2FnZSB2YWx1ZSBhcyBleHBlY3RlZCBieSBQS0NTLCBzZWUgcmZjMjQzNyBldGMgKi8KKy8qIGZvcm1hdCB0byBiZSBwYWRkZWQgdG8gaXM6CisgKiBFTSA9IDAxIHwgRkYqIHwgMDAgfCBwcmVmaXggfCBoYXNoCisgKgorICogd2hlcmUgRkYgaXMgcmVwZWF0ZWQgZW5vdWdoIHRpbWVzIHRvIG1ha2UgRU0gb25lIGJ5dGUKKyAqIHNob3J0ZXIgdGhhbiB0aGUgc2l6ZSBvZiBrZXktPm4KKyAqCisgKiBwcmVmaXggaXMgdGhlIEFTTjEgZGVzaWduYXRvciBwcmVmaXgsCisgKiBoZXggMzAgMjEgMzAgMDkgMDYgMDUgMkIgMEUgMDMgMDIgMUEgMDUgMDAgMDQgMTQKKyAqCisgKiByc2FfZW0gbXVzdCBiZSBhIHBvaW50ZXIgdG8gYW4gaW5pdGlhbGlzZWQgbXBfaW50LgorICovCitzdGF0aWMgdm9pZCByc2FfcGFkX2VtKHJzYV9rZXkgKiBrZXksCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKiBkYXRhLCB1bnNpZ25lZCBpbnQgbGVuLCAKKwkJbXBfaW50ICogcnNhX2VtKSB7CisKKwkvKiBBU04xIGRlc2lnbmF0b3IgKGluY2x1ZGluZyB0aGUgMHgwMCBwcmVjZWRpbmcpICovCisJY29uc3QgdW5zaWduZWQgY2hhciByc2FfYXNuMV9tYWdpY1tdID0gCisJCXsweDAwLCAweDMwLCAweDIxLCAweDMwLCAweDA5LCAweDA2LCAweDA1LCAweDJiLCAKKwkJIDB4MGUsIDB4MDMsIDB4MDIsIDB4MWEsIDB4MDUsIDB4MDAsIDB4MDQsIDB4MTR9OworCWNvbnN0IHVuc2lnbmVkIGludCBSU0FfQVNOMV9NQUdJQ19MRU4gPSAxNjsKKworCWJ1ZmZlciAqIHJzYV9FTSA9IE5VTEw7CisJaGFzaF9zdGF0ZSBoczsKKwl1bnNpZ25lZCBpbnQgbnNpemU7CisJCisJZHJvcGJlYXJfYXNzZXJ0KGtleSAhPSBOVUxMKTsKKwlkcm9wYmVhcl9hc3NlcnQoZGF0YSAhPSBOVUxMKTsKKwluc2l6ZSA9IG1wX3Vuc2lnbmVkX2Jpbl9zaXplKGtleS0+bik7CisKKwlyc2FfRU0gPSBidWZfbmV3KG5zaXplLTEpOworCS8qIHR5cGUgYnl0ZSAqLworCWJ1Zl9wdXRieXRlKHJzYV9FTSwgMHgwMSk7CisJLyogUGFkZGluZyB3aXRoIDB4RkYgYnl0ZXMgKi8KKwl3aGlsZShyc2FfRU0tPnBvcyAhPSByc2FfRU0tPnNpemUgLSBSU0FfQVNOMV9NQUdJQ19MRU4gLSBTSEExX0hBU0hfU0laRSkgeworCQlidWZfcHV0Ynl0ZShyc2FfRU0sIDB4ZmYpOworCX0KKwkvKiBNYWdpYyBBU04xIHN0dWZmICovCisJbWVtY3B5KGJ1Zl9nZXR3cml0ZXB0cihyc2FfRU0sIFJTQV9BU04xX01BR0lDX0xFTiksCisJCQlyc2FfYXNuMV9tYWdpYywgUlNBX0FTTjFfTUFHSUNfTEVOKTsKKwlidWZfaW5jcndyaXRlcG9zKHJzYV9FTSwgUlNBX0FTTjFfTUFHSUNfTEVOKTsKKworCS8qIFRoZSBoYXNoIG9mIHRoZSBkYXRhICovCisJc2hhMV9pbml0KCZocyk7CisJc2hhMV9wcm9jZXNzKCZocywgZGF0YSwgbGVuKTsKKwlzaGExX2RvbmUoJmhzLCBidWZfZ2V0d3JpdGVwdHIocnNhX0VNLCBTSEExX0hBU0hfU0laRSkpOworCWJ1Zl9pbmNyd3JpdGVwb3MocnNhX0VNLCBTSEExX0hBU0hfU0laRSk7CisKKwlkcm9wYmVhcl9hc3NlcnQocnNhX0VNLT5wb3MgPT0gcnNhX0VNLT5zaXplKTsKKworCS8qIENyZWF0ZSB0aGUgbXBfaW50IGZyb20gdGhlIGVuY29kZWQgYnl0ZXMgKi8KKwlidWZfc2V0cG9zKHJzYV9FTSwgMCk7CisJYnl0ZXNfdG9fbXAocnNhX2VtLCBidWZfZ2V0cHRyKHJzYV9FTSwgcnNhX0VNLT5zaXplKSwKKwkJCXJzYV9FTS0+c2l6ZSk7CisJYnVmX2ZyZWUocnNhX0VNKTsKK30KKworI2VuZGlmIC8qIERST1BCRUFSX1JTQSAqLwpkaWZmIC0tZ2l0IGEvcnNhLmggYi9yc2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDViYTliCi0tLSAvZGV2L251bGwKKysrIGIvcnNhLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfUlNBX0hfCisjZGVmaW5lIF9SU0FfSF8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisKKyNpZmRlZiBEUk9QQkVBUl9SU0EgCisKKyNkZWZpbmUgUlNBX1NJR05BVFVSRV9TSVpFIDQrNys0KzQwCisKK3N0cnVjdCBSU0Ffa2V5IHsKKworCW1wX2ludCogbjsKKwltcF9pbnQqIGU7CisJbXBfaW50KiBkOworCW1wX2ludCogcDsKKwltcF9pbnQqIHE7CisKK307CisKK3R5cGVkZWYgc3RydWN0IFJTQV9rZXkgcnNhX2tleTsKKwordm9pZCBidWZfcHV0X3JzYV9zaWduKGJ1ZmZlciogYnVmLCByc2Ffa2V5ICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsCisJCXVuc2lnbmVkIGludCBsZW4pOworI2lmZGVmIERST1BCRUFSX1NJR05LRVlfVkVSSUZZCitpbnQgYnVmX3JzYV92ZXJpZnkoYnVmZmVyICogYnVmLCByc2Ffa2V5ICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsCisJCXVuc2lnbmVkIGludCBsZW4pOworI2VuZGlmCitpbnQgYnVmX2dldF9yc2FfcHViX2tleShidWZmZXIqIGJ1ZiwgcnNhX2tleSAqa2V5KTsKK2ludCBidWZfZ2V0X3JzYV9wcml2X2tleShidWZmZXIqIGJ1ZiwgcnNhX2tleSAqa2V5KTsKK3ZvaWQgYnVmX3B1dF9yc2FfcHViX2tleShidWZmZXIqIGJ1ZiwgcnNhX2tleSAqa2V5KTsKK3ZvaWQgYnVmX3B1dF9yc2FfcHJpdl9rZXkoYnVmZmVyKiBidWYsIHJzYV9rZXkgKmtleSk7Cit2b2lkIHJzYV9rZXlfZnJlZShyc2Ffa2V5ICprZXkpOworCisjZW5kaWYgLyogRFJPUEJFQVJfUlNBICovCisKKyNlbmRpZiAvKiBfUlNBX0hfICovCmRpZmYgLS1naXQgYS9ydW5vcHRzLmggYi9ydW5vcHRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQzNDY1OAotLS0gL2Rldi9udWxsCisrKyBiL3J1bm9wdHMuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfUlVOT1BUU19IXworI2RlZmluZSBfUlVOT1BUU19IXworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJzaWdua2V5LmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAiYXV0aC5oIgorI2luY2x1ZGUgInRjcGZ3ZC5oIgorCit0eXBlZGVmIHN0cnVjdCBydW5vcHRzIHsKKworI2lmIGRlZmluZWQoRU5BQkxFX1NWUl9SRU1PVEVUQ1BGV0QpIHx8IGRlZmluZWQoRU5BQkxFX0NMSV9MT0NBTFRDUEZXRCkKKwlpbnQgbGlzdGVuX2Z3ZF9hbGw7CisjZW5kaWYKKworfSBydW5vcHRzOworCitleHRlcm4gcnVub3B0cyBvcHRzOworCitpbnQgcmVhZGhvc3RrZXkoY29uc3QgY2hhciAqIGZpbGVuYW1lLCBzaWduX2tleSAqIGhvc3RrZXksIGludCAqdHlwZSk7CisKK3R5cGVkZWYgc3RydWN0IHN2cl9ydW5vcHRzIHsKKworCWNoYXIgKiByc2FrZXlmaWxlOworCWNoYXIgKiBkc3NrZXlmaWxlOworCWNoYXIgKiBiYW5uZXJmaWxlOworCisJaW50IGZvcmtiZzsKKwlpbnQgdXNpbmdzeXNsb2c7CisKKwkvKiBwb3J0cyBpcyBhbiBhcnJheSBvZiB0aGUgcG9ydGNvdW50IGxpc3RlbmluZyBwb3J0cyAqLworCWNoYXIgKnBvcnRzW0RST1BCRUFSX01BWF9QT1JUU107CisJdW5zaWduZWQgaW50IHBvcnRjb3VudDsKKwljaGFyICphZGRyZXNzZXNbRFJPUEJFQVJfTUFYX1BPUlRTXTsKKworCWludCBpbmV0ZG1vZGU7CisKKwkvKiBGbGFncyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gdXNlIGlwdjQgYW5kIGlwdjYgKi8KKwkvKiBub3QgdXNlZCB5ZXQKKwlpbnQgaXB2NDsKKwlpbnQgaXB2NjsKKwkqLworCisjaWZkZWYgRE9fTU9URAorCS8qIHdoZXRoZXIgdG8gcHJpbnQgdGhlIE1PVEQgKi8KKwlpbnQgZG9tb3RkOworI2VuZGlmCisKKwlpbnQgbm9yb290bG9naW47CisKKwlpbnQgbm9hdXRocGFzczsKKwlpbnQgbm9yb290cGFzczsKKworI2lmZGVmIEVOQUJMRV9TVlJfUkVNT1RFVENQRldECisJaW50IG5vcmVtb3RldGNwOworI2VuZGlmCisjaWZkZWYgRU5BQkxFX1NWUl9MT0NBTFRDUEZXRAorCWludCBub2xvY2FsdGNwOworI2VuZGlmCisKKwlzaWduX2tleSAqaG9zdGtleTsKKwlidWZmZXIgKiBiYW5uZXI7CisJY2hhciAqIHBpZGZpbGU7CisKK30gc3ZyX3J1bm9wdHM7CisKK2V4dGVybiBzdnJfcnVub3B0cyBzdnJfb3B0czsKKwordm9pZCBzdnJfZ2V0b3B0cyhpbnQgYXJnYywgY2hhciAqKiBhcmd2KTsKK3ZvaWQgbG9hZGhvc3RrZXlzKCk7CisKK3R5cGVkZWYgc3RydWN0IGNsaV9ydW5vcHRzIHsKKworCWNoYXIgKnByb2duYW1lOworCWNoYXIgKnJlbW90ZWhvc3Q7CisJY2hhciAqcmVtb3RlcG9ydDsKKworCWNoYXIgKnVzZXJuYW1lOworCisJY2hhciAqY21kOworCWludCB3YW50cHR5OworCWludCBhbHdheXNfYWNjZXB0X2tleTsKKwlpbnQgbm9fY21kOworCWludCBiYWNrZ3JvdW5kZWQ7CisjaWZkZWYgRU5BQkxFX0NMSV9QVUJLRVlfQVVUSAorCXN0cnVjdCBTaWduS2V5TGlzdCAqcHJpdmtleXM7IC8qIEtleXMgdG8gdXNlIGZvciBwdWJsaWMta2V5IGF1dGggKi8KKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9DTElfUkVNT1RFVENQRldECisJc3RydWN0IFRDUEZ3ZExpc3QgKiByZW1vdGVmd2RzOworI2VuZGlmCisjaWZkZWYgRU5BQkxFX0NMSV9MT0NBTFRDUEZXRAorCXN0cnVjdCBUQ1BGd2RMaXN0ICogbG9jYWxmd2RzOworI2VuZGlmCisKK30gY2xpX3J1bm9wdHM7CisKK2V4dGVybiBjbGlfcnVub3B0cyBjbGlfb3B0czsKK3ZvaWQgY2xpX2dldG9wdHMoaW50IGFyZ2MsIGNoYXIgKiogYXJndik7CisKKyNlbmRpZiAvKiBfUlVOT1BUU19IXyAqLwpkaWZmIC0tZ2l0IGEvc2NwLmMgYi9zY3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2UzOWJlCi0tLSAvZGV2L251bGwKKysrIGIvc2NwLmMKQEAgLTAsMCArMSwxMjU3IEBACisvKgorICogc2NwIC0gc2VjdXJlIHJlbW90ZSBjb3B5LiAgVGhpcyBpcyBiYXNpY2FsbHkgcGF0Y2hlZCBCU0QgcmNwIHdoaWNoCisgKiB1c2VzIHNzaCB0byBkbyB0aGUgZGF0YSB0cmFuc2ZlciAoaW5zdGVhZCBvZiB1c2luZyByY21kKS4KKyAqCisgKiBOT1RFOiBUaGlzIHZlcnNpb24gc2hvdWxkIE5PVCBiZSBzdWlkIHJvb3QuICAoVGhpcyB1c2VzIHNzaCB0bworICogZG8gdGhlIHRyYW5zZmVyIGFuZCBzc2ggaGFzIHRoZSBuZWNlc3NhcnkgcHJpdmlsZWdlcy4pCisgKgorICogMTk5NSBUaW1vIFJpbm5lIDx0cmlAaWtpLmZpPiwgVGF0dSBZbG9uZW4gPHlsb0Bjcy5odXQuZmk+CisgKgorICogQXMgZmFyIGFzIEkgYW0gY29uY2VybmVkLCB0aGUgY29kZSBJIGhhdmUgd3JpdHRlbiBmb3IgdGhpcyBzb2Z0d2FyZQorICogY2FuIGJlIHVzZWQgZnJlZWx5IGZvciBhbnkgcHVycG9zZS4gIEFueSBkZXJpdmVkIHZlcnNpb25zIG9mIHRoaXMKKyAqIHNvZnR3YXJlIG11c3QgYmUgY2xlYXJseSBtYXJrZWQgYXMgc3VjaCwgYW5kIGlmIHRoZSBkZXJpdmVkIHdvcmsgaXMKKyAqIGluY29tcGF0aWJsZSB3aXRoIHRoZSBwcm90b2NvbCBkZXNjcmlwdGlvbiBpbiB0aGUgUkZDIGZpbGUsIGl0IG11c3QgYmUKKyAqIGNhbGxlZCBieSBhIG5hbWUgb3RoZXIgdGhhbiAic3NoIiBvciAiU2VjdXJlIFNoZWxsIi4KKyAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5OSBUaGVvIGRlIFJhYWR0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMTk5OSBBYXJvbiBDYW1wYmVsbC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBQYXJ0cyBmcm9tOgorICoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MCwgMTk5MiwgMTk5MywgMTk5NQorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjZGVmaW5lIFNfSVdSSVRFIDAyMDAKKyNkZWZpbmUgSEFWRV9CV0xJTUlUIDAKKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisvKlJDU0lEKCIkT3BlbkJTRDogc2NwLmMsdiAxLjEzMCAyMDA2LzAxLzMxIDEwOjM1OjQzIGRqbSBFeHAgJCIpOyovCisKKyNpbmNsdWRlICJhdG9taWNpby5oIgorI2luY2x1ZGUgImNvbXBhdC5oIgorI2luY2x1ZGUgInNjcG1pc2MuaCIKKyNpbmNsdWRlICJwcm9ncmVzc21ldGVyLmgiCisKK3ZvaWQgYndsaW1pdChpbnQpOworCisvKiBTdHJ1Y3QgZm9yIGFkZGFyZ3MgKi8KK2FyZ2xpc3QgYXJnczsKKworLyogQmFuZHdpZHRoIGxpbWl0ICovCitvZmZfdCBsaW1pdF9yYXRlID0gMDsKKworLyogTmFtZSBvZiBjdXJyZW50IGZpbGUgYmVpbmcgdHJhbnNmZXJyZWQuICovCitjaGFyICpjdXJmaWxlOworCisvKiBUaGlzIGlzIHNldCB0byBub24temVybyB0byBlbmFibGUgdmVyYm9zZSBtb2RlLiAqLworaW50IHZlcmJvc2VfbW9kZSA9IDA7CisKKy8qIFRoaXMgaXMgc2V0IHRvIHplcm8gaWYgdGhlIHByb2dyZXNzbWV0ZXIgaXMgbm90IGRlc2lyZWQuICovCitpbnQgc2hvd3Byb2dyZXNzID0gMTsKKworLyogVGhpcyBpcyB0aGUgcHJvZ3JhbSB0byBleGVjdXRlIGZvciB0aGUgc2VjdXJlZCBjb25uZWN0aW9uLiAoInNzaCIgb3IgLVMpICovCitjaGFyICpzc2hfcHJvZ3JhbSA9IF9QQVRIX1NTSF9QUk9HUkFNOworCisvKiBUaGlzIGlzIHVzZWQgdG8gc3RvcmUgdGhlIHBpZCBvZiBzc2hfcHJvZ3JhbSAqLworcGlkX3QgZG9fY21kX3BpZCA9IC0xOworCitzdGF0aWMgdm9pZAora2lsbGNoaWxkKGludCBzaWdubykKK3sKKwlpZiAoZG9fY21kX3BpZCA+IDEpIHsKKwkJa2lsbChkb19jbWRfcGlkLCBzaWdubyA/IHNpZ25vIDogU0lHVEVSTSk7CisJCXdhaXRwaWQoZG9fY21kX3BpZCwgTlVMTCwgMCk7CisJfQorCisJaWYgKHNpZ25vKQorCQlfZXhpdCgxKTsKKwlleGl0KDEpOworfQorCitzdGF0aWMgaW50Citkb19sb2NhbF9jbWQoYXJnbGlzdCAqYSkKK3sKKwl1X2ludCBpOworCWludCBzdGF0dXM7CisJcGlkX3QgcGlkOworCisJaWYgKGEtPm51bSA9PSAwKQorCQlmYXRhbCgiZG9fbG9jYWxfY21kOiBubyBhcmd1bWVudHMiKTsKKworCWlmICh2ZXJib3NlX21vZGUpIHsKKwkJZnByaW50ZihzdGRlcnIsICJFeGVjdXRpbmc6Iik7CisJCWZvciAoaSA9IDA7IGkgPCBhLT5udW07IGkrKykKKwkJCWZwcmludGYoc3RkZXJyLCAiICVzIiwgYS0+bGlzdFtpXSk7CisJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl9CisJaWYgKChwaWQgPSBmb3JrKCkpID09IC0xKQorCQlmYXRhbCgiZG9fbG9jYWxfY21kOiBmb3JrOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisKKwlpZiAocGlkID09IDApIHsKKwkJZXhlY3ZwKGEtPmxpc3RbMF0sIGEtPmxpc3QpOworCQlwZXJyb3IoYS0+bGlzdFswXSk7CisJCWV4aXQoMSk7CisJfQorCisJZG9fY21kX3BpZCA9IHBpZDsKKwlzaWduYWwoU0lHVEVSTSwga2lsbGNoaWxkKTsKKwlzaWduYWwoU0lHSU5ULCBraWxsY2hpbGQpOworCXNpZ25hbChTSUdIVVAsIGtpbGxjaGlsZCk7CisKKwl3aGlsZSAod2FpdHBpZChwaWQsICZzdGF0dXMsIDApID09IC0xKQorCQlpZiAoZXJybm8gIT0gRUlOVFIpCisJCQlmYXRhbCgiZG9fbG9jYWxfY21kOiB3YWl0cGlkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisKKwlkb19jbWRfcGlkID0gLTE7CisKKwlpZiAoIVdJRkVYSVRFRChzdGF0dXMpIHx8IFdFWElUU1RBVFVTKHN0YXR1cykgIT0gMCkKKwkJcmV0dXJuICgtMSk7CisKKwlyZXR1cm4gKDApOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBleGVjdXRlcyB0aGUgZ2l2ZW4gY29tbWFuZCBhcyB0aGUgc3BlY2lmaWVkIHVzZXIgb24gdGhlCisgKiBnaXZlbiBob3N0LiAgVGhpcyByZXR1cm5zIDwgMCBpZiBleGVjdXRpb24gZmFpbHMsIGFuZCA+PSAwIG90aGVyd2lzZS4gVGhpcworICogYXNzaWducyB0aGUgaW5wdXQgYW5kIG91dHB1dCBmaWxlIGRlc2NyaXB0b3JzIG9uIHN1Y2Nlc3MuCisgKi8KKworaW50Citkb19jbWQoY2hhciAqaG9zdCwgY2hhciAqcmVtdXNlciwgY2hhciAqY21kLCBpbnQgKmZkaW4sIGludCAqZmRvdXQsIGludCBhcmdjKQoreworCWludCBwaW5bMl0sIHBvdXRbMl0sIHJlc2VydmVkWzJdOworCisJaWYgKHZlcmJvc2VfbW9kZSkKKwkJZnByaW50ZihzdGRlcnIsCisJCSAgICAiRXhlY3V0aW5nOiBwcm9ncmFtICVzIGhvc3QgJXMsIHVzZXIgJXMsIGNvbW1hbmQgJXNcbiIsCisJCSAgICBzc2hfcHJvZ3JhbSwgaG9zdCwKKwkJICAgIHJlbXVzZXIgPyByZW11c2VyIDogIih1bnNwZWNpZmllZCkiLCBjbWQpOworCisJLyoKKwkgKiBSZXNlcnZlIHR3byBkZXNjcmlwdG9ycyBzbyB0aGF0IHRoZSByZWFsIHBpcGVzIHdvbid0IGdldAorCSAqIGRlc2NyaXB0b3JzIDAgYW5kIDEgYmVjYXVzZSB0aGF0IHdpbGwgc2NyZXcgdXAgZHVwMiBiZWxvdy4KKwkgKi8KKwlwaXBlKHJlc2VydmVkKTsKKworCS8qIENyZWF0ZSBhIHNvY2tldCBwYWlyIGZvciBjb21tdW5pY2F0aW5nIHdpdGggc3NoLiAqLworCWlmIChwaXBlKHBpbikgPCAwKQorCQlmYXRhbCgicGlwZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCWlmIChwaXBlKHBvdXQpIDwgMCkKKwkJZmF0YWwoInBpcGU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKworCS8qIEZyZWUgdGhlIHJlc2VydmVkIGRlc2NyaXB0b3JzLiAqLworCWNsb3NlKHJlc2VydmVkWzBdKTsKKwljbG9zZShyZXNlcnZlZFsxXSk7CisKKyAgICAvKiB1Q2xpbnV4IG5lZWRzIHRvIGJ1aWxkIHRoZSBhcmdzIGhlcmUgYmVmb3JlIHZmb3JraW5nLAorICAgICAgIG90aGVyd2lzZSB3ZSBkbyBpdCBsYXRlciBvbi4gKi8KKyNpZmRlZiBfX3VDbGludXhfXworCQlyZXBsYWNlYXJnKCZhcmdzLCAwLCAiJXMiLCBzc2hfcHJvZ3JhbSk7CisJCWlmIChyZW11c2VyICE9IE5VTEwpCisJCQlhZGRhcmdzKCZhcmdzLCAiLWwlcyIsIHJlbXVzZXIpOworCQlhZGRhcmdzKCZhcmdzLCAiJXMiLCBob3N0KTsKKwkJYWRkYXJncygmYXJncywgIiVzIiwgY21kKTsKKyNlbmRpZiAvKiBfX3VDbGludXhfXyAqLworCisJLyogRm9yayBhIGNoaWxkIHRvIGV4ZWN1dGUgdGhlIGNvbW1hbmQgb24gdGhlIHJlbW90ZSBob3N0IHVzaW5nIHNzaC4gKi8KKyNpZm5kZWYgX191Q2xpbnV4X18KKwlkb19jbWRfcGlkID0gdmZvcmsoKTsKKyNlbHNlCisJZG9fY21kX3BpZCA9IGZvcmsoKTsKKyNlbmRpZiAvKiBfX3VDbGludXhfXyAqLworCisJaWYgKGRvX2NtZF9waWQgPT0gMCkgeworCQkvKiBDaGlsZC4gKi8KKwkJY2xvc2UocGluWzFdKTsKKwkJY2xvc2UocG91dFswXSk7CisJCWR1cDIocGluWzBdLCAwKTsKKwkJZHVwMihwb3V0WzFdLCAxKTsKKwkJY2xvc2UocGluWzBdKTsKKwkJY2xvc2UocG91dFsxXSk7CisKKyNpZm5kZWYgX191Q2xpbnV4X18KKwkJcmVwbGFjZWFyZygmYXJncywgMCwgIiVzIiwgc3NoX3Byb2dyYW0pOworCQlpZiAocmVtdXNlciAhPSBOVUxMKQorCQkJYWRkYXJncygmYXJncywgIi1sJXMiLCByZW11c2VyKTsKKwkJYWRkYXJncygmYXJncywgIiVzIiwgaG9zdCk7CisJCWFkZGFyZ3MoJmFyZ3MsICIlcyIsIGNtZCk7CisjZW5kaWYgLyogX191Q2xpbnV4X18gKi8KKworCQlleGVjdnAoc3NoX3Byb2dyYW0sIGFyZ3MubGlzdCk7CisJCXBlcnJvcihzc2hfcHJvZ3JhbSk7CisJCWV4aXQoMSk7CisJfSBlbHNlIGlmIChkb19jbWRfcGlkID09IC0xKSB7CisJCWZhdGFsKCJmb3JrOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJfQorCisKKyNpZmRlZiBfX3VDbGludXhfXworCS8qIGNsZWFuIHVwIGNvbW1hbmQgKi8KKwkvKiBwb3AgY21kICovCisJeGZyZWUoYXJncy5saXN0W2FyZ3MubnVtLTFdKTsKKwlhcmdzLmxpc3RbYXJncy5udW0tMV09TlVMTDsKKwlhcmdzLm51bS0tOworCS8qIHBvcCBob3N0ICovCisJeGZyZWUoYXJncy5saXN0W2FyZ3MubnVtLTFdKTsKKwlhcmdzLmxpc3RbYXJncy5udW0tMV09TlVMTDsKKwlhcmdzLm51bS0tOworCS8qIHBvcCB1c2VyICovCisJaWYgKHJlbXVzZXIgIT0gTlVMTCkgeworCQl4ZnJlZShhcmdzLmxpc3RbYXJncy5udW0tMV0pOworCQlhcmdzLmxpc3RbYXJncy5udW0tMV09TlVMTDsKKwkJYXJncy5udW0tLTsKKwl9CisjZW5kaWYgLyogX191Q2xpbnV4X18gKi8KKworCS8qIFBhcmVudC4gIENsb3NlIHRoZSBvdGhlciBzaWRlLCBhbmQgcmV0dXJuIHRoZSBsb2NhbCBzaWRlLiAqLworCWNsb3NlKHBpblswXSk7CisJKmZkb3V0ID0gcGluWzFdOworCWNsb3NlKHBvdXRbMV0pOworCSpmZGluID0gcG91dFswXTsKKwlzaWduYWwoU0lHVEVSTSwga2lsbGNoaWxkKTsKKwlzaWduYWwoU0lHSU5ULCBraWxsY2hpbGQpOworCXNpZ25hbChTSUdIVVAsIGtpbGxjaGlsZCk7CisJcmV0dXJuIDA7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKwlzaXplX3QgY250OworCWNoYXIgKmJ1ZjsKK30gQlVGOworCitCVUYgKmFsbG9jYnVmKEJVRiAqLCBpbnQsIGludCk7Cit2b2lkIGxvc3Rjb25uKGludCk7Cit2b2lkIG5vc3BhY2Uodm9pZCk7CitpbnQgb2tuYW1lKGNoYXIgKik7Cit2b2lkIHJ1bl9lcnIoY29uc3QgY2hhciAqLC4uLik7Cit2b2lkIHZlcmlmeWRpcihjaGFyICopOworCitzdHJ1Y3QgcGFzc3dkICpwd2Q7Cit1aWRfdCB1c2VyaWQ7CitpbnQgZXJycywgcmVtaW4sIHJlbW91dDsKK2ludCBwZmxhZywgaWFtcmVtb3RlLCBpYW1yZWN1cnNpdmUsIHRhcmdldHNob3VsZGJlZGlyZWN0b3J5OworCisjZGVmaW5lCUNNRE5FRURTCTY0CitjaGFyIGNtZFtDTURORUVEU107CQkvKiBtdXN0IGhvbGQgInJjcCAtciAtcCAtZFwwIiAqLworCitpbnQgcmVzcG9uc2Uodm9pZCk7Cit2b2lkIHJzb3VyY2UoY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKK3ZvaWQgc2luayhpbnQsIGNoYXIgKltdKTsKK3ZvaWQgc291cmNlKGludCwgY2hhciAqW10pOwordm9pZCB0b2xvY2FsKGludCwgY2hhciAqW10pOwordm9pZCB0b3JlbW90ZShjaGFyICosIGludCwgY2hhciAqW10pOwordm9pZCB1c2FnZSh2b2lkKTsKKworI2lmIGRlZmluZWQoREJNVUxUSV9zY3ApIHx8ICFkZWZpbmVkKERST1BCRUFSX01VTFRJKQorI2lmIGRlZmluZWQoREJNVUxUSV9zY3ApICYmIGRlZmluZWQoRFJPUEJFQVJfTVVMVEkpCitpbnQgc2NwX21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQorI2Vsc2UKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCisjZW5kaWYKK3sKKwlpbnQgY2gsIGZmbGFnLCB0ZmxhZywgc3RhdHVzOworCWRvdWJsZSBzcGVlZDsKKwljaGFyICp0YXJnLCAqZW5kcDsKKwlleHRlcm4gY2hhciAqb3B0YXJnOworCWV4dGVybiBpbnQgb3B0aW5kOworCisJLyogRW5zdXJlIHRoYXQgZmRzIDAsIDEgYW5kIDIgYXJlIG9wZW4gb3IgZGlyZWN0ZWQgdG8gL2Rldi9udWxsICovCisJc2FuaXRpc2Vfc3RkZmQoKTsKKworCW1lbXNldCgmYXJncywgJ1wwJywgc2l6ZW9mKGFyZ3MpKTsKKwlhcmdzLmxpc3QgPSBOVUxMOworCWFkZGFyZ3MoJmFyZ3MsICIlcyIsIHNzaF9wcm9ncmFtKTsKKyNpZiAwIC8qIGRyb3BiZWFyIHNzaCBjbGllbnQgZG9lc24ndCB1bmRlcnN0YW5kIHRoZXNlICovCisJYWRkYXJncygmYXJncywgIi14Iik7CisJYWRkYXJncygmYXJncywgIi1vRm9yd2FyZEFnZW50IG5vIik7CisJYWRkYXJncygmYXJncywgIi1vUGVybWl0TG9jYWxDb21tYW5kIG5vIik7CisJYWRkYXJncygmYXJncywgIi1vQ2xlYXJBbGxGb3J3YXJkaW5ncyB5ZXMiKTsKKyNlbmRpZgorCisJZmZsYWcgPSB0ZmxhZyA9IDA7CisJd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAiZGZsOnBydHZCQ2M6aTpQOnExMjQ2UzpvOkY6IikpICE9IC0xKQorCQlzd2l0Y2ggKGNoKSB7CisJCS8qIFVzZXItdmlzaWJsZSBmbGFncy4gKi8KKwkJY2FzZSAnMSc6CisJCWNhc2UgJzInOgorCQljYXNlICc0JzoKKwkJY2FzZSAnNic6CisJCWNhc2UgJ0MnOgorCQkJYWRkYXJncygmYXJncywgIi0lYyIsIGNoKTsKKwkJCWJyZWFrOworCQljYXNlICdvJzoKKwkJY2FzZSAnYyc6CisJCWNhc2UgJ2knOgorCQljYXNlICdGJzoKKwkJCWFkZGFyZ3MoJmFyZ3MsICItJWMlcyIsIGNoLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ1AnOgorCQkJYWRkYXJncygmYXJncywgIi1wJXMiLCBvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ0InOgorCQkJYWRkYXJncygmYXJncywgIi1vQmF0Y2htb2RlIHllcyIpOworCQkJYnJlYWs7CisJCWNhc2UgJ2wnOgorCQkJc3BlZWQgPSBzdHJ0b2Qob3B0YXJnLCAmZW5kcCk7CisJCQlpZiAoc3BlZWQgPD0gMCB8fCAqZW5kcCAhPSAnXDAnKQorCQkJCXVzYWdlKCk7CisJCQlsaW1pdF9yYXRlID0gc3BlZWQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJcGZsYWcgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3InOgorCQkJaWFtcmVjdXJzaXZlID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdTJzoKKwkJCXNzaF9wcm9ncmFtID0geHN0cmR1cChvcHRhcmcpOworCQkJYnJlYWs7CisJCWNhc2UgJ3YnOgorCQkJYWRkYXJncygmYXJncywgIi12Iik7CisJCQl2ZXJib3NlX21vZGUgPSAxOworCQkJYnJlYWs7CisjaWZkZWYgUFJPR1JFU1NfTUVURVIKKwkJY2FzZSAncSc6CisJCQlhZGRhcmdzKCZhcmdzLCAiLXEiKTsKKwkJCXNob3dwcm9ncmVzcyA9IDA7CisJCQlicmVhazsKKyNlbmRpZgorCisJCS8qIFNlcnZlciBvcHRpb25zLiAqLworCQljYXNlICdkJzoKKwkJCXRhcmdldHNob3VsZGJlZGlyZWN0b3J5ID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdmJzoJLyogImZyb20iICovCisJCQlpYW1yZW1vdGUgPSAxOworCQkJZmZsYWcgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3QnOgkvKiAidG8iICovCisJCQlpYW1yZW1vdGUgPSAxOworCQkJdGZsYWcgPSAxOworI2lmZGVmIEhBVkVfQ1lHV0lOCisJCQlzZXRtb2RlKDAsIE9fQklOQVJZKTsKKyNlbmRpZgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl1c2FnZSgpOworCQl9CisJYXJnYyAtPSBvcHRpbmQ7CisJYXJndiArPSBvcHRpbmQ7CisKKwlpZiAoKHB3ZCA9IGdldHB3dWlkKHVzZXJpZCA9IGdldHVpZCgpKSkgPT0gTlVMTCkKKwkJZmF0YWwoInVua25vd24gdXNlciAldSIsICh1X2ludCkgdXNlcmlkKTsKKworCWlmICghaXNhdHR5KFNUREVSUl9GSUxFTk8pKQorCQlzaG93cHJvZ3Jlc3MgPSAwOworCisJcmVtaW4gPSBTVERJTl9GSUxFTk87CisJcmVtb3V0ID0gU1RET1VUX0ZJTEVOTzsKKworCWlmIChmZmxhZykgeworCQkvKiBGb2xsb3cgInByb3RvY29sIiwgc2VuZCBkYXRhLiAqLworCQkodm9pZCkgcmVzcG9uc2UoKTsKKwkJc291cmNlKGFyZ2MsIGFyZ3YpOworCQlleGl0KGVycnMgIT0gMCk7CisJfQorCWlmICh0ZmxhZykgeworCQkvKiBSZWNlaXZlIGRhdGEuICovCisJCXNpbmsoYXJnYywgYXJndik7CisJCWV4aXQoZXJycyAhPSAwKTsKKwl9CisJaWYgKGFyZ2MgPCAyKQorCQl1c2FnZSgpOworCWlmIChhcmdjID4gMikKKwkJdGFyZ2V0c2hvdWxkYmVkaXJlY3RvcnkgPSAxOworCisJcmVtaW4gPSByZW1vdXQgPSAtMTsKKwlkb19jbWRfcGlkID0gLTE7CisJLyogQ29tbWFuZCB0byBiZSBleGVjdXRlZCBvbiByZW1vdGUgc3lzdGVtIHVzaW5nICJzc2giLiAqLworCSh2b2lkKSBzbnByaW50ZihjbWQsIHNpemVvZiBjbWQsICJzY3AlcyVzJXMlcyIsCisJICAgIHZlcmJvc2VfbW9kZSA/ICIgLXYiIDogIiIsCisJICAgIGlhbXJlY3Vyc2l2ZSA/ICIgLXIiIDogIiIsIHBmbGFnID8gIiAtcCIgOiAiIiwKKwkgICAgdGFyZ2V0c2hvdWxkYmVkaXJlY3RvcnkgPyAiIC1kIiA6ICIiKTsKKworCSh2b2lkKSBzaWduYWwoU0lHUElQRSwgbG9zdGNvbm4pOworCisJaWYgKCh0YXJnID0gY29sb24oYXJndlthcmdjIC0gMV0pKSkJLyogRGVzdCBpcyByZW1vdGUgaG9zdC4gKi8KKwkJdG9yZW1vdGUodGFyZywgYXJnYywgYXJndik7CisJZWxzZSB7CisJCWlmICh0YXJnZXRzaG91bGRiZWRpcmVjdG9yeSkKKwkJCXZlcmlmeWRpcihhcmd2W2FyZ2MgLSAxXSk7CisJCXRvbG9jYWwoYXJnYywgYXJndik7CS8qIERlc3QgaXMgbG9jYWwgaG9zdC4gKi8KKwl9CisJLyoKKwkgKiBGaW5hbGx5IGNoZWNrIHRoZSBleGl0IHN0YXR1cyBvZiB0aGUgc3NoIHByb2Nlc3MsIGlmIG9uZSB3YXMgZm9ya2VkCisJICogYW5kIG5vIGVycm9yIGhhcyBvY2N1cmVkIHlldAorCSAqLworCWlmIChkb19jbWRfcGlkICE9IC0xICYmIGVycnMgPT0gMCkgeworCQlpZiAocmVtaW4gIT0gLTEpCisJCSAgICAodm9pZCkgY2xvc2UocmVtaW4pOworCQlpZiAocmVtb3V0ICE9IC0xKQorCQkgICAgKHZvaWQpIGNsb3NlKHJlbW91dCk7CisJCWlmICh3YWl0cGlkKGRvX2NtZF9waWQsICZzdGF0dXMsIDApID09IC0xKQorCQkJZXJycyA9IDE7CisJCWVsc2UgeworCQkJaWYgKCFXSUZFWElURUQoc3RhdHVzKSB8fCBXRVhJVFNUQVRVUyhzdGF0dXMpICE9IDApCisJCQkJZXJycyA9IDE7CisJCX0KKwl9CisJZXhpdChlcnJzICE9IDApOworfQorI2VuZGlmIC8qIERCTVVMVElfc2NwIHN0dWZmICovCisKK3ZvaWQKK3RvcmVtb3RlKGNoYXIgKnRhcmcsIGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgbGVuOworCWNoYXIgKmJwLCAqaG9zdCwgKnNyYywgKnN1c2VyLCAqdGhvc3QsICp0dXNlciwgKmFyZzsKKwlhcmdsaXN0IGFsaXN0OworCisJbWVtc2V0KCZhbGlzdCwgJ1wwJywgc2l6ZW9mKGFsaXN0KSk7CisJYWxpc3QubGlzdCA9IE5VTEw7CisKKwkqdGFyZysrID0gMDsKKwlpZiAoKnRhcmcgPT0gMCkKKwkJdGFyZyA9ICIuIjsKKworCWFyZyA9IHhzdHJkdXAoYXJndlthcmdjIC0gMV0pOworCWlmICgodGhvc3QgPSBzdHJyY2hyKGFyZywgJ0AnKSkpIHsKKwkJLyogdXNlckBob3N0ICovCisJCSp0aG9zdCsrID0gMDsKKwkJdHVzZXIgPSBhcmc7CisJCWlmICgqdHVzZXIgPT0gJ1wwJykKKwkJCXR1c2VyID0gTlVMTDsKKwl9IGVsc2UgeworCQl0aG9zdCA9IGFyZzsKKwkJdHVzZXIgPSBOVUxMOworCX0KKworCWlmICh0dXNlciAhPSBOVUxMICYmICFva25hbWUodHVzZXIpKSB7CisJCXhmcmVlKGFyZyk7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYXJnYyAtIDE7IGkrKykgeworCQlzcmMgPSBjb2xvbihhcmd2W2ldKTsKKwkJaWYgKHNyYykgewkvKiByZW1vdGUgdG8gcmVtb3RlICovCisJCQlmcmVlYXJncygmYWxpc3QpOworCQkJYWRkYXJncygmYWxpc3QsICIlcyIsIHNzaF9wcm9ncmFtKTsKKwkJCWlmICh2ZXJib3NlX21vZGUpCisJCQkJYWRkYXJncygmYWxpc3QsICItdiIpOworCQkJYWRkYXJncygmYWxpc3QsICIteCIpOworCQkJYWRkYXJncygmYWxpc3QsICItb0NsZWFyQWxsRm9yd2FyZGluZ3MgeWVzIik7CisJCQlhZGRhcmdzKCZhbGlzdCwgIi1uIik7CisKKwkJCSpzcmMrKyA9IDA7CisJCQlpZiAoKnNyYyA9PSAwKQorCQkJCXNyYyA9ICIuIjsKKwkJCWhvc3QgPSBzdHJyY2hyKGFyZ3ZbaV0sICdAJyk7CisKKwkJCWlmIChob3N0KSB7CisJCQkJKmhvc3QrKyA9IDA7CisJCQkJaG9zdCA9IGNsZWFuaG9zdG5hbWUoaG9zdCk7CisJCQkJc3VzZXIgPSBhcmd2W2ldOworCQkJCWlmICgqc3VzZXIgPT0gJ1wwJykKKwkJCQkJc3VzZXIgPSBwd2QtPnB3X25hbWU7CisJCQkJZWxzZSBpZiAoIW9rbmFtZShzdXNlcikpCisJCQkJCWNvbnRpbnVlOworCQkJCWFkZGFyZ3MoJmFsaXN0LCAiLWwiKTsKKwkJCQlhZGRhcmdzKCZhbGlzdCwgIiVzIiwgc3VzZXIpOworCQkJfSBlbHNlIHsKKwkJCQlob3N0ID0gY2xlYW5ob3N0bmFtZShhcmd2W2ldKTsKKwkJCX0KKwkJCWFkZGFyZ3MoJmFsaXN0LCAiJXMiLCBob3N0KTsKKwkJCWFkZGFyZ3MoJmFsaXN0LCAiJXMiLCBjbWQpOworCQkJYWRkYXJncygmYWxpc3QsICIlcyIsIHNyYyk7CisJCQlhZGRhcmdzKCZhbGlzdCwgIiVzJXMlczolcyIsCisJCQkgICAgdHVzZXIgPyB0dXNlciA6ICIiLCB0dXNlciA/ICJAIiA6ICIiLAorCQkJICAgIHRob3N0LCB0YXJnKTsKKwkJCWlmIChkb19sb2NhbF9jbWQoJmFsaXN0KSAhPSAwKQorCQkJCWVycnMgPSAxOworCQl9IGVsc2UgewkvKiBsb2NhbCB0byByZW1vdGUgKi8KKwkJCWlmIChyZW1pbiA9PSAtMSkgeworCQkJCWxlbiA9IHN0cmxlbih0YXJnKSArIENNRE5FRURTICsgMjA7CisJCQkJYnAgPSB4bWFsbG9jKGxlbik7CisJCQkJKHZvaWQpIHNucHJpbnRmKGJwLCBsZW4sICIlcyAtdCAlcyIsIGNtZCwgdGFyZyk7CisJCQkJaG9zdCA9IGNsZWFuaG9zdG5hbWUodGhvc3QpOworCQkJCWlmIChkb19jbWQoaG9zdCwgdHVzZXIsIGJwLCAmcmVtaW4sCisJCQkJICAgICZyZW1vdXQsIGFyZ2MpIDwgMCkKKwkJCQkJZXhpdCgxKTsKKwkJCQlpZiAocmVzcG9uc2UoKSA8IDApCisJCQkJCWV4aXQoMSk7CisJCQkJKHZvaWQpIHhmcmVlKGJwKTsKKwkJCX0KKwkJCXNvdXJjZSgxLCBhcmd2ICsgaSk7CisJCX0KKwl9Cit9CisKK3ZvaWQKK3RvbG9jYWwoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCWludCBpLCBsZW47CisJY2hhciAqYnAsICpob3N0LCAqc3JjLCAqc3VzZXI7CisJYXJnbGlzdCBhbGlzdDsKKworCW1lbXNldCgmYWxpc3QsICdcMCcsIHNpemVvZihhbGlzdCkpOworCWFsaXN0Lmxpc3QgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2MgLSAxOyBpKyspIHsKKwkJaWYgKCEoc3JjID0gY29sb24oYXJndltpXSkpKSB7CS8qIExvY2FsIHRvIGxvY2FsLiAqLworCQkJZnJlZWFyZ3MoJmFsaXN0KTsKKwkJCWFkZGFyZ3MoJmFsaXN0LCAiJXMiLCBfUEFUSF9DUCk7CisJCQlpZiAoaWFtcmVjdXJzaXZlKQorCQkJCWFkZGFyZ3MoJmFsaXN0LCAiLXIiKTsKKwkJCWlmIChwZmxhZykKKwkJCQlhZGRhcmdzKCZhbGlzdCwgIi1wIik7CisJCQlhZGRhcmdzKCZhbGlzdCwgIiVzIiwgYXJndltpXSk7CisJCQlhZGRhcmdzKCZhbGlzdCwgIiVzIiwgYXJndlthcmdjLTFdKTsKKwkJCWlmIChkb19sb2NhbF9jbWQoJmFsaXN0KSkKKwkJCQkrK2VycnM7CisJCQljb250aW51ZTsKKwkJfQorCQkqc3JjKysgPSAwOworCQlpZiAoKnNyYyA9PSAwKQorCQkJc3JjID0gIi4iOworCQlpZiAoKGhvc3QgPSBzdHJyY2hyKGFyZ3ZbaV0sICdAJykpID09IE5VTEwpIHsKKwkJCWhvc3QgPSBhcmd2W2ldOworCQkJc3VzZXIgPSBOVUxMOworCQl9IGVsc2UgeworCQkJKmhvc3QrKyA9IDA7CisJCQlzdXNlciA9IGFyZ3ZbaV07CisJCQlpZiAoKnN1c2VyID09ICdcMCcpCisJCQkJc3VzZXIgPSBwd2QtPnB3X25hbWU7CisJCX0KKwkJaG9zdCA9IGNsZWFuaG9zdG5hbWUoaG9zdCk7CisJCWxlbiA9IHN0cmxlbihzcmMpICsgQ01ETkVFRFMgKyAyMDsKKwkJYnAgPSB4bWFsbG9jKGxlbik7CisJCSh2b2lkKSBzbnByaW50ZihicCwgbGVuLCAiJXMgLWYgJXMiLCBjbWQsIHNyYyk7CisJCWlmIChkb19jbWQoaG9zdCwgc3VzZXIsIGJwLCAmcmVtaW4sICZyZW1vdXQsIGFyZ2MpIDwgMCkgeworCQkJKHZvaWQpIHhmcmVlKGJwKTsKKwkJCSsrZXJyczsKKwkJCWNvbnRpbnVlOworCQl9CisJCXhmcmVlKGJwKTsKKwkJc2luaygxLCBhcmd2ICsgYXJnYyAtIDEpOworCQkodm9pZCkgY2xvc2UocmVtaW4pOworCQlyZW1pbiA9IHJlbW91dCA9IC0xOworCX0KK30KKwordm9pZAorc291cmNlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3Qgc3RhdCBzdGI7CisJc3RhdGljIEJVRiBidWZmZXI7CisJQlVGICpicDsKKwlvZmZfdCBpLCBhbXQsIHN0YXRieXRlczsKKwlzaXplX3QgcmVzdWx0OworCWludCBmZCA9IC0xLCBoYWRlcnIsIGluZHg7CisJY2hhciAqbGFzdCwgKm5hbWUsIGJ1ZlsyMDQ4XTsKKwlpbnQgbGVuOworCisJZm9yIChpbmR4ID0gMDsgaW5keCA8IGFyZ2M7ICsraW5keCkgeworCQluYW1lID0gYXJndltpbmR4XTsKKwkJc3RhdGJ5dGVzID0gMDsKKwkJbGVuID0gc3RybGVuKG5hbWUpOworCQl3aGlsZSAobGVuID4gMSAmJiBuYW1lW2xlbi0xXSA9PSAnLycpCisJCQluYW1lWy0tbGVuXSA9ICdcMCc7CisJCWlmIChzdHJjaHIobmFtZSwgJ1xuJykgIT0gTlVMTCkgeworCQkJcnVuX2VycigiJXM6IHNraXBwaW5nLCBmaWxlbmFtZSBjb250YWlucyBhIG5ld2xpbmUiLAorCQkJICAgIG5hbWUpOworCQkJZ290byBuZXh0OworCQl9CisJCWlmICgoZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZLCAwKSkgPCAwKQorCQkJZ290byBzeXNlcnI7CisJCWlmIChmc3RhdChmZCwgJnN0YikgPCAwKSB7CitzeXNlcnI6CQkJcnVuX2VycigiJXM6ICVzIiwgbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCQlzd2l0Y2ggKHN0Yi5zdF9tb2RlICYgU19JRk1UKSB7CisJCWNhc2UgU19JRlJFRzoKKwkJCWJyZWFrOworCQljYXNlIFNfSUZESVI6CisJCQlpZiAoaWFtcmVjdXJzaXZlKSB7CisJCQkJcnNvdXJjZShuYW1lLCAmc3RiKTsKKwkJCQlnb3RvIG5leHQ7CisJCQl9CisJCQkvKiBGQUxMVEhST1VHSCAqLworCQlkZWZhdWx0OgorCQkJcnVuX2VycigiJXM6IG5vdCBhIHJlZ3VsYXIgZmlsZSIsIG5hbWUpOworCQkJZ290byBuZXh0OworCQl9CisJCWlmICgobGFzdCA9IHN0cnJjaHIobmFtZSwgJy8nKSkgPT0gTlVMTCkKKwkJCWxhc3QgPSBuYW1lOworCQllbHNlCisJCQkrK2xhc3Q7CisJCWN1cmZpbGUgPSBsYXN0OworCQlpZiAocGZsYWcpIHsKKwkJCS8qCisJCQkgKiBNYWtlIGl0IGNvbXBhdGlibGUgd2l0aCBwb3NzaWJsZSBmdXR1cmUKKwkJCSAqIHZlcnNpb25zIGV4cGVjdGluZyBtaWNyb3NlY29uZHMuCisJCQkgKi8KKwkJCSh2b2lkKSBzbnByaW50ZihidWYsIHNpemVvZiBidWYsICJUJWx1IDAgJWx1IDBcbiIsCisJCQkgICAgKHVfbG9uZykgc3RiLnN0X210aW1lLAorCQkJICAgICh1X2xvbmcpIHN0Yi5zdF9hdGltZSk7CisJCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsIGJ1Ziwgc3RybGVuKGJ1ZikpOworCQkJaWYgKHJlc3BvbnNlKCkgPCAwKQorCQkJCWdvdG8gbmV4dDsKKwkJfQorI2RlZmluZQlGSUxFTU9ERU1BU0sJKFNfSVNVSUR8U19JU0dJRHxTX0lSV1hVfFNfSVJXWEd8U19JUldYTykKKwkJc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiQyUwNG8gJWxsZCAlc1xuIiwKKwkJICAgICh1X2ludCkgKHN0Yi5zdF9tb2RlICYgRklMRU1PREVNQVNLKSwKKwkJICAgIChsb25nIGxvbmcpc3RiLnN0X3NpemUsIGxhc3QpOworCQlpZiAodmVyYm9zZV9tb2RlKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlNlbmRpbmcgZmlsZSBtb2RlczogJXMiLCBidWYpOworCQl9CisJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgYnVmLCBzdHJsZW4oYnVmKSk7CisJCWlmIChyZXNwb25zZSgpIDwgMCkKKwkJCWdvdG8gbmV4dDsKKwkJaWYgKChicCA9IGFsbG9jYnVmKCZidWZmZXIsIGZkLCAyMDQ4KSkgPT0gTlVMTCkgeworbmV4dDoJCQlpZiAoZmQgIT0gLTEpIHsKKwkJCQkodm9pZCkgY2xvc2UoZmQpOworCQkJCWZkID0gLTE7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorI2lmIFBST0dSRVNTX01FVEVSCisJCWlmIChzaG93cHJvZ3Jlc3MpCisJCQlzdGFydF9wcm9ncmVzc19tZXRlcihjdXJmaWxlLCBzdGIuc3Rfc2l6ZSwgJnN0YXRieXRlcyk7CisjZW5kaWYKKwkJLyogS2VlcCB3cml0aW5nIGFmdGVyIGFuIGVycm9yIHNvIHRoYXQgd2Ugc3RheSBzeW5jJ2QgdXAuICovCisJCWZvciAoaGFkZXJyID0gaSA9IDA7IGkgPCBzdGIuc3Rfc2l6ZTsgaSArPSBicC0+Y250KSB7CisJCQlhbXQgPSBicC0+Y250OworCQkJaWYgKGkgKyBhbXQgPiBzdGIuc3Rfc2l6ZSkKKwkJCQlhbXQgPSBzdGIuc3Rfc2l6ZSAtIGk7CisJCQlpZiAoIWhhZGVycikgeworCQkJCXJlc3VsdCA9IGF0b21pY2lvKHJlYWQsIGZkLCBicC0+YnVmLCBhbXQpOworCQkJCWlmIChyZXN1bHQgIT0gYW10KQorCQkJCQloYWRlcnIgPSBlcnJubzsKKwkJCX0KKwkJCWlmIChoYWRlcnIpCisJCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCBicC0+YnVmLCBhbXQpOworCQkJZWxzZSB7CisJCQkJcmVzdWx0ID0gYXRvbWljaW8odndyaXRlLCByZW1vdXQsIGJwLT5idWYsIGFtdCk7CisJCQkJaWYgKHJlc3VsdCAhPSBhbXQpCisJCQkJCWhhZGVyciA9IGVycm5vOworCQkJCXN0YXRieXRlcyArPSByZXN1bHQ7CisJCQl9CisjaWYgSEFWRV9CV0xJTUlUCisJCQlpZiAobGltaXRfcmF0ZSkKKwkJCQlid2xpbWl0KGFtdCk7CisjZW5kaWYKKwkJfQorI2lmZGVmIFBST0dSRVNTX01FVEVSCisJCWlmIChzaG93cHJvZ3Jlc3MpCisJCQlzdG9wX3Byb2dyZXNzX21ldGVyKCk7CisjZW5kaWYKKworCQlpZiAoZmQgIT0gLTEpIHsKKwkJCWlmIChjbG9zZShmZCkgPCAwICYmICFoYWRlcnIpCisJCQkJaGFkZXJyID0gZXJybm87CisJCQlmZCA9IC0xOworCQl9CisJCWlmICghaGFkZXJyKQorCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7CisJCWVsc2UKKwkJCXJ1bl9lcnIoIiVzOiAlcyIsIG5hbWUsIHN0cmVycm9yKGhhZGVycikpOworCQkodm9pZCkgcmVzcG9uc2UoKTsKKwl9Cit9CisKK3ZvaWQKK3Jzb3VyY2UoY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0YXRwKQoreworCURJUiAqZGlycDsKKwlzdHJ1Y3QgZGlyZW50ICpkcDsKKwljaGFyICpsYXN0LCAqdmVjdFsxXSwgcGF0aFsxMTAwXTsKKworCWlmICghKGRpcnAgPSBvcGVuZGlyKG5hbWUpKSkgeworCQlydW5fZXJyKCIlczogJXMiLCBuYW1lLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm47CisJfQorCWxhc3QgPSBzdHJyY2hyKG5hbWUsICcvJyk7CisJaWYgKGxhc3QgPT0gMCkKKwkJbGFzdCA9IG5hbWU7CisJZWxzZQorCQlsYXN0Kys7CisJaWYgKHBmbGFnKSB7CisJCSh2b2lkKSBzbnByaW50ZihwYXRoLCBzaXplb2YocGF0aCksICJUJWx1IDAgJWx1IDBcbiIsCisJCSAgICAodV9sb25nKSBzdGF0cC0+c3RfbXRpbWUsCisJCSAgICAodV9sb25nKSBzdGF0cC0+c3RfYXRpbWUpOworCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsIHBhdGgsIHN0cmxlbihwYXRoKSk7CisJCWlmIChyZXNwb25zZSgpIDwgMCkgeworCQkJY2xvc2VkaXIoZGlycCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJKHZvaWQpIHNucHJpbnRmKHBhdGgsIHNpemVvZiBwYXRoLCAiRCUwNG8gJWQgJS4xMDI0c1xuIiwKKwkgICAgKHVfaW50KSAoc3RhdHAtPnN0X21vZGUgJiBGSUxFTU9ERU1BU0spLCAwLCBsYXN0KTsKKwlpZiAodmVyYm9zZV9tb2RlKQorCQlmcHJpbnRmKHN0ZGVyciwgIkVudGVyaW5nIGRpcmVjdG9yeTogJXMiLCBwYXRoKTsKKwkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsIHBhdGgsIHN0cmxlbihwYXRoKSk7CisJaWYgKHJlc3BvbnNlKCkgPCAwKSB7CisJCWNsb3NlZGlyKGRpcnApOworCQlyZXR1cm47CisJfQorCXdoaWxlICgoZHAgPSByZWFkZGlyKGRpcnApKSAhPSBOVUxMKSB7CisJCWlmIChkcC0+ZF9pbm8gPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXN0cmNtcChkcC0+ZF9uYW1lLCAiLiIpIHx8ICFzdHJjbXAoZHAtPmRfbmFtZSwgIi4uIikpCisJCQljb250aW51ZTsKKwkJaWYgKHN0cmxlbihuYW1lKSArIDEgKyBzdHJsZW4oZHAtPmRfbmFtZSkgPj0gc2l6ZW9mKHBhdGgpIC0gMSkgeworCQkJcnVuX2VycigiJXMvJXM6IG5hbWUgdG9vIGxvbmciLCBuYW1lLCBkcC0+ZF9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCSh2b2lkKSBzbnByaW50ZihwYXRoLCBzaXplb2YgcGF0aCwgIiVzLyVzIiwgbmFtZSwgZHAtPmRfbmFtZSk7CisJCXZlY3RbMF0gPSBwYXRoOworCQlzb3VyY2UoMSwgdmVjdCk7CisJfQorCSh2b2lkKSBjbG9zZWRpcihkaXJwKTsKKwkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsICJFXG4iLCAyKTsKKwkodm9pZCkgcmVzcG9uc2UoKTsKK30KKworI2lmIEhBVkVfQldMSU1JVAordm9pZAorYndsaW1pdChpbnQgYW1vdW50KQoreworCXN0YXRpYyBzdHJ1Y3QgdGltZXZhbCBid3N0YXJ0LCBid2VuZDsKKwlzdGF0aWMgaW50IGxhbXQsIHRocmVzaCA9IDE2Mzg0OworCXVfaW50NjRfdCB3YWl0bGVuOworCXN0cnVjdCB0aW1lc3BlYyB0cywgcm07CisKKwlpZiAoIXRpbWVyaXNzZXQoJmJ3c3RhcnQpKSB7CisJCWdldHRpbWVvZmRheSgmYndzdGFydCwgTlVMTCk7CisJCXJldHVybjsKKwl9CisKKwlsYW10ICs9IGFtb3VudDsKKwlpZiAobGFtdCA8IHRocmVzaCkKKwkJcmV0dXJuOworCisJZ2V0dGltZW9mZGF5KCZid2VuZCwgTlVMTCk7CisJdGltZXJzdWIoJmJ3ZW5kLCAmYndzdGFydCwgJmJ3ZW5kKTsKKwlpZiAoIXRpbWVyaXNzZXQoJmJ3ZW5kKSkKKwkJcmV0dXJuOworCisJbGFtdCAqPSA4OworCXdhaXRsZW4gPSAoZG91YmxlKTEwMDAwMDBMICogbGFtdCAvIGxpbWl0X3JhdGU7CisKKwlid3N0YXJ0LnR2X3NlYyA9IHdhaXRsZW4gLyAxMDAwMDAwTDsKKwlid3N0YXJ0LnR2X3VzZWMgPSB3YWl0bGVuICUgMTAwMDAwMEw7CisKKwlpZiAodGltZXJjbXAoJmJ3c3RhcnQsICZid2VuZCwgPikpIHsKKwkJdGltZXJzdWIoJmJ3c3RhcnQsICZid2VuZCwgJmJ3ZW5kKTsKKworCQkvKiBBZGp1c3QgdGhlIHdhaXQgdGltZSAqLworCQlpZiAoYndlbmQudHZfc2VjKSB7CisJCQl0aHJlc2ggLz0gMjsKKwkJCWlmICh0aHJlc2ggPCAyMDQ4KQorCQkJCXRocmVzaCA9IDIwNDg7CisJCX0gZWxzZSBpZiAoYndlbmQudHZfdXNlYyA8IDEwMCkgeworCQkJdGhyZXNoICo9IDI7CisJCQlpZiAodGhyZXNoID4gMzI3NjgpCisJCQkJdGhyZXNoID0gMzI3Njg7CisJCX0KKworCQlUSU1FVkFMX1RPX1RJTUVTUEVDKCZid2VuZCwgJnRzKTsKKwkJd2hpbGUgKG5hbm9zbGVlcCgmdHMsICZybSkgPT0gLTEpIHsKKwkJCWlmIChlcnJubyAhPSBFSU5UUikKKwkJCQlicmVhazsKKwkJCXRzID0gcm07CisJCX0KKwl9CisKKwlsYW10ID0gMDsKKwlnZXR0aW1lb2ZkYXkoJmJ3c3RhcnQsIE5VTEwpOworfQorI2VuZGlmCisKK3ZvaWQKK3NpbmsoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworCXN0YXRpYyBCVUYgYnVmZmVyOworCXN0cnVjdCBzdGF0IHN0YjsKKwllbnVtIHsKKwkJWUVTLCBOTywgRElTUExBWUVECisJfSB3cmVycjsKKwlCVUYgKmJwOworCW9mZl90IGk7CisJc2l6ZV90IGosIGNvdW50OworCWludCBhbXQsIGV4aXN0cywgZmlyc3QsIG1hc2ssIG1vZGUsIG9mZCwgb21vZGU7CisJb2ZmX3Qgc2l6ZSwgc3RhdGJ5dGVzOworCWludCBzZXRpbWVzLCB0YXJnaXNkaXIsIHdyZXJybm8gPSAwOworCWNoYXIgY2gsICpjcCwgKm5wLCAqdGFyZywgKndoeSwgKnZlY3RbMV0sIGJ1ZlsyMDQ4XTsKKwlzdHJ1Y3QgdGltZXZhbCB0dlsyXTsKKworI2RlZmluZQlhdGltZQl0dlswXQorI2RlZmluZQltdGltZQl0dlsxXQorI2RlZmluZQlTQ1JFV1VQKHN0cikJeyB3aHkgPSBzdHI7IGdvdG8gc2NyZXd1cDsgfQorCisJc2V0aW1lcyA9IHRhcmdpc2RpciA9IDA7CisJbWFzayA9IHVtYXNrKDApOworCWlmICghcGZsYWcpCisJCSh2b2lkKSB1bWFzayhtYXNrKTsKKwlpZiAoYXJnYyAhPSAxKSB7CisJCXJ1bl9lcnIoImFtYmlndW91cyB0YXJnZXQiKTsKKwkJZXhpdCgxKTsKKwl9CisJdGFyZyA9ICphcmd2OworCWlmICh0YXJnZXRzaG91bGRiZWRpcmVjdG9yeSkKKwkJdmVyaWZ5ZGlyKHRhcmcpOworCisJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7CisJaWYgKHN0YXQodGFyZywgJnN0YikgPT0gMCAmJiBTX0lTRElSKHN0Yi5zdF9tb2RlKSkKKwkJdGFyZ2lzZGlyID0gMTsKKwlmb3IgKGZpcnN0ID0gMTs7IGZpcnN0ID0gMCkgeworCQljcCA9IGJ1ZjsKKwkJaWYgKGF0b21pY2lvKHJlYWQsIHJlbWluLCBjcCwgMSkgIT0gMSkKKwkJCXJldHVybjsKKwkJaWYgKCpjcCsrID09ICdcbicpCisJCQlTQ1JFV1VQKCJ1bmV4cGVjdGVkIDxuZXdsaW5lPiIpOworCQlkbyB7CisJCQlpZiAoYXRvbWljaW8ocmVhZCwgcmVtaW4sICZjaCwgc2l6ZW9mKGNoKSkgIT0gc2l6ZW9mKGNoKSkKKwkJCQlTQ1JFV1VQKCJsb3N0IGNvbm5lY3Rpb24iKTsKKwkJCSpjcCsrID0gY2g7CisJCX0gd2hpbGUgKGNwIDwgJmJ1ZltzaXplb2YoYnVmKSAtIDFdICYmIGNoICE9ICdcbicpOworCQkqY3AgPSAwOworCQlpZiAodmVyYm9zZV9tb2RlKQorCQkJZnByaW50ZihzdGRlcnIsICJTaW5rOiAlcyIsIGJ1Zik7CisKKwkJaWYgKGJ1ZlswXSA9PSAnXDAxJyB8fCBidWZbMF0gPT0gJ1wwMicpIHsKKwkJCWlmIChpYW1yZW1vdGUgPT0gMCkKKwkJCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCBTVERFUlJfRklMRU5PLAorCQkJCSAgICBidWYgKyAxLCBzdHJsZW4oYnVmICsgMSkpOworCQkJaWYgKGJ1ZlswXSA9PSAnXDAyJykKKwkJCQlleGl0KDEpOworCQkJKytlcnJzOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGJ1ZlswXSA9PSAnRScpIHsKKwkJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgIiIsIDEpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChjaCA9PSAnXG4nKQorCQkJKi0tY3AgPSAwOworCisJCWNwID0gYnVmOworCQlpZiAoKmNwID09ICdUJykgeworCQkJc2V0aW1lcysrOworCQkJY3ArKzsKKwkJCW10aW1lLnR2X3NlYyA9IHN0cnRvbChjcCwgJmNwLCAxMCk7CisJCQlpZiAoIWNwIHx8ICpjcCsrICE9ICcgJykKKwkJCQlTQ1JFV1VQKCJtdGltZS5zZWMgbm90IGRlbGltaXRlZCIpOworCQkJbXRpbWUudHZfdXNlYyA9IHN0cnRvbChjcCwgJmNwLCAxMCk7CisJCQlpZiAoIWNwIHx8ICpjcCsrICE9ICcgJykKKwkJCQlTQ1JFV1VQKCJtdGltZS51c2VjIG5vdCBkZWxpbWl0ZWQiKTsKKwkJCWF0aW1lLnR2X3NlYyA9IHN0cnRvbChjcCwgJmNwLCAxMCk7CisJCQlpZiAoIWNwIHx8ICpjcCsrICE9ICcgJykKKwkJCQlTQ1JFV1VQKCJhdGltZS5zZWMgbm90IGRlbGltaXRlZCIpOworCQkJYXRpbWUudHZfdXNlYyA9IHN0cnRvbChjcCwgJmNwLCAxMCk7CisJCQlpZiAoIWNwIHx8ICpjcCsrICE9ICdcMCcpCisJCQkJU0NSRVdVUCgiYXRpbWUudXNlYyBub3QgZGVsaW1pdGVkIik7CisJCQkodm9pZCkgYXRvbWljaW8odndyaXRlLCByZW1vdXQsICIiLCAxKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgqY3AgIT0gJ0MnICYmICpjcCAhPSAnRCcpIHsKKwkJCS8qCisJCQkgKiBDaGVjayBmb3IgdGhlIGNhc2UgInJjcCByZW1vdGU6Zm9vXCogbG9jYWw6YmFyIi4KKwkJCSAqIEluIHRoaXMgY2FzZSwgdGhlIGxpbmUgIk5vIG1hdGNoLiIgY2FuIGJlIHJldHVybmVkCisJCQkgKiBieSB0aGUgc2hlbGwgYmVmb3JlIHRoZSByY3AgY29tbWFuZCBvbiB0aGUgcmVtb3RlIGlzCisJCQkgKiBleGVjdXRlZCBzbyB0aGUgXkFlcnJvcl9tZXNzYWdlIGNvbnZlbnRpb24gaXNuJ3QKKwkJCSAqIGZvbGxvd2VkLgorCQkJICovCisJCQlpZiAoZmlyc3QpIHsKKwkJCQlydW5fZXJyKCIlcyIsIGNwKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJU0NSRVdVUCgiZXhwZWN0ZWQgY29udHJvbCByZWNvcmQiKTsKKwkJfQorCQltb2RlID0gMDsKKwkJZm9yICgrK2NwOyBjcCA8IGJ1ZiArIDU7IGNwKyspIHsKKwkJCWlmICgqY3AgPCAnMCcgfHwgKmNwID4gJzcnKQorCQkJCVNDUkVXVVAoImJhZCBtb2RlIik7CisJCQltb2RlID0gKG1vZGUgPDwgMykgfCAoKmNwIC0gJzAnKTsKKwkJfQorCQlpZiAoKmNwKysgIT0gJyAnKQorCQkJU0NSRVdVUCgibW9kZSBub3QgZGVsaW1pdGVkIik7CisKKwkJZm9yIChzaXplID0gMDsgaXNkaWdpdCgqY3ApOykKKwkJCXNpemUgPSBzaXplICogMTAgKyAoKmNwKysgLSAnMCcpOworCQlpZiAoKmNwKysgIT0gJyAnKQorCQkJU0NSRVdVUCgic2l6ZSBub3QgZGVsaW1pdGVkIik7CisJCWlmICgoc3RyY2hyKGNwLCAnLycpICE9IE5VTEwpIHx8IChzdHJjbXAoY3AsICIuLiIpID09IDApKSB7CisJCQlydW5fZXJyKCJlcnJvcjogdW5leHBlY3RlZCBmaWxlbmFtZTogJXMiLCBjcCk7CisJCQlleGl0KDEpOworCQl9CisJCWlmICh0YXJnaXNkaXIpIHsKKwkJCXN0YXRpYyBjaGFyICpuYW1lYnVmOworCQkJc3RhdGljIHNpemVfdCBjdXJzaXplOworCQkJc2l6ZV90IG5lZWQ7CisKKwkJCW5lZWQgPSBzdHJsZW4odGFyZykgKyBzdHJsZW4oY3ApICsgMjUwOworCQkJaWYgKG5lZWQgPiBjdXJzaXplKSB7CisJCQkJaWYgKG5hbWVidWYpCisJCQkJCXhmcmVlKG5hbWVidWYpOworCQkJCW5hbWVidWYgPSB4bWFsbG9jKG5lZWQpOworCQkJCWN1cnNpemUgPSBuZWVkOworCQkJfQorCQkJKHZvaWQpIHNucHJpbnRmKG5hbWVidWYsIG5lZWQsICIlcyVzJXMiLCB0YXJnLAorCQkJICAgIHN0cmNtcCh0YXJnLCAiLyIpID8gIi8iIDogIiIsIGNwKTsKKwkJCW5wID0gbmFtZWJ1ZjsKKwkJfSBlbHNlCisJCQlucCA9IHRhcmc7CisJCWN1cmZpbGUgPSBjcDsKKwkJZXhpc3RzID0gc3RhdChucCwgJnN0YikgPT0gMDsKKwkJaWYgKGJ1ZlswXSA9PSAnRCcpIHsKKwkJCWludCBtb2RfZmxhZyA9IHBmbGFnOworCQkJaWYgKCFpYW1yZWN1cnNpdmUpCisJCQkJU0NSRVdVUCgicmVjZWl2ZWQgZGlyZWN0b3J5IHdpdGhvdXQgLXIiKTsKKwkJCWlmIChleGlzdHMpIHsKKwkJCQlpZiAoIVNfSVNESVIoc3RiLnN0X21vZGUpKSB7CisJCQkJCWVycm5vID0gRU5PVERJUjsKKwkJCQkJZ290byBiYWQ7CisJCQkJfQorCQkJCWlmIChwZmxhZykKKwkJCQkJKHZvaWQpIGNobW9kKG5wLCBtb2RlKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogSGFuZGxlIGNvcHlpbmcgZnJvbSBhIHJlYWQtb25seQorCQkJCSAgIGRpcmVjdG9yeSAqLworCQkJCW1vZF9mbGFnID0gMTsKKwkJCQlpZiAobWtkaXIobnAsIG1vZGUgfCBTX0lSV1hVKSA8IDApCisJCQkJCWdvdG8gYmFkOworCQkJfQorCQkJdmVjdFswXSA9IHhzdHJkdXAobnApOworCQkJc2luaygxLCB2ZWN0KTsKKwkJCWlmIChzZXRpbWVzKSB7CisJCQkJc2V0aW1lcyA9IDA7CisJCQkJaWYgKHV0aW1lcyh2ZWN0WzBdLCB0dikgPCAwKQorCQkJCQlydW5fZXJyKCIlczogc2V0IHRpbWVzOiAlcyIsCisJCQkJCSAgICB2ZWN0WzBdLCBzdHJlcnJvcihlcnJubykpOworCQkJfQorCQkJaWYgKG1vZF9mbGFnKQorCQkJCSh2b2lkKSBjaG1vZCh2ZWN0WzBdLCBtb2RlKTsKKwkJCWlmICh2ZWN0WzBdKQorCQkJCXhmcmVlKHZlY3RbMF0pOworCQkJY29udGludWU7CisJCX0KKwkJb21vZGUgPSBtb2RlOworCQltb2RlIHw9IFNfSVdSSVRFOworCQlpZiAoKG9mZCA9IG9wZW4obnAsIE9fV1JPTkxZfE9fQ1JFQVQsIG1vZGUpKSA8IDApIHsKK2JhZDoJCQlydW5fZXJyKCIlczogJXMiLCBucCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCSh2b2lkKSBhdG9taWNpbyh2d3JpdGUsIHJlbW91dCwgIiIsIDEpOworCQlpZiAoKGJwID0gYWxsb2NidWYoJmJ1ZmZlciwgb2ZkLCA0MDk2KSkgPT0gTlVMTCkgeworCQkJKHZvaWQpIGNsb3NlKG9mZCk7CisJCQljb250aW51ZTsKKwkJfQorCQljcCA9IGJwLT5idWY7CisJCXdyZXJyID0gTk87CisKKwkJc3RhdGJ5dGVzID0gMDsKKyNpZmRlZiBQUk9HUkVTU19NRVRFUgorCQlpZiAoc2hvd3Byb2dyZXNzKQorCQkJc3RhcnRfcHJvZ3Jlc3NfbWV0ZXIoY3VyZmlsZSwgc2l6ZSwgJnN0YXRieXRlcyk7CisjZW5kaWYKKwkJZm9yIChjb3VudCA9IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0MDk2KSB7CisJCQlhbXQgPSA0MDk2OworCQkJaWYgKGkgKyBhbXQgPiBzaXplKQorCQkJCWFtdCA9IHNpemUgLSBpOworCQkJY291bnQgKz0gYW10OworCQkJZG8geworCQkJCWogPSBhdG9taWNpbyhyZWFkLCByZW1pbiwgY3AsIGFtdCk7CisJCQkJaWYgKGogPT0gMCkgeworCQkJCQlydW5fZXJyKCIlcyIsIGogPyBzdHJlcnJvcihlcnJubykgOgorCQkJCQkgICAgImRyb3BwZWQgY29ubmVjdGlvbiIpOworCQkJCQlleGl0KDEpOworCQkJCX0KKwkJCQlhbXQgLT0gajsKKwkJCQljcCArPSBqOworCQkJCXN0YXRieXRlcyArPSBqOworCQkJfSB3aGlsZSAoYW10ID4gMCk7CisKKyNpZiBIQVZFX0JXTElNSVQKKwkJCWlmIChsaW1pdF9yYXRlKQorCQkJCWJ3bGltaXQoNDA5Nik7CisjZW5kaWYKKworCQkJaWYgKGNvdW50ID09IGJwLT5jbnQpIHsKKwkJCQkvKiBLZWVwIHJlYWRpbmcgc28gd2Ugc3RheSBzeW5jJ2QgdXAuICovCisJCQkJaWYgKHdyZXJyID09IE5PKSB7CisJCQkJCWlmIChhdG9taWNpbyh2d3JpdGUsIG9mZCwgYnAtPmJ1ZiwKKwkJCQkJICAgIGNvdW50KSAhPSBjb3VudCkgeworCQkJCQkJd3JlcnIgPSBZRVM7CisJCQkJCQl3cmVycm5vID0gZXJybm87CisJCQkJCX0KKwkJCQl9CisJCQkJY291bnQgPSAwOworCQkJCWNwID0gYnAtPmJ1ZjsKKwkJCX0KKwkJfQorI2lmZGVmIFBST0dSRVNTX01FVEVSCisJCWlmIChzaG93cHJvZ3Jlc3MpCisJCQlzdG9wX3Byb2dyZXNzX21ldGVyKCk7CisjZW5kaWYKKwkJaWYgKGNvdW50ICE9IDAgJiYgd3JlcnIgPT0gTk8gJiYKKwkJICAgIGF0b21pY2lvKHZ3cml0ZSwgb2ZkLCBicC0+YnVmLCBjb3VudCkgIT0gY291bnQpIHsKKwkJCXdyZXJyID0gWUVTOworCQkJd3JlcnJubyA9IGVycm5vOworCQl9CisJCWlmICh3cmVyciA9PSBOTyAmJiBmdHJ1bmNhdGUob2ZkLCBzaXplKSAhPSAwKSB7CisJCQlydW5fZXJyKCIlczogdHJ1bmNhdGU6ICVzIiwgbnAsIHN0cmVycm9yKGVycm5vKSk7CisJCQl3cmVyciA9IERJU1BMQVlFRDsKKwkJfQorCQlpZiAocGZsYWcpIHsKKwkJCWlmIChleGlzdHMgfHwgb21vZGUgIT0gbW9kZSkKKyNpZmRlZiBIQVZFX0ZDSE1PRAorCQkJCWlmIChmY2htb2Qob2ZkLCBvbW9kZSkpIHsKKyNlbHNlIC8qIEhBVkVfRkNITU9EICovCisJCQkJaWYgKGNobW9kKG5wLCBvbW9kZSkpIHsKKyNlbmRpZiAvKiBIQVZFX0ZDSE1PRCAqLworCQkJCQlydW5fZXJyKCIlczogc2V0IG1vZGU6ICVzIiwKKwkJCQkJICAgIG5wLCBzdHJlcnJvcihlcnJubykpOworCQkJCQl3cmVyciA9IERJU1BMQVlFRDsKKwkJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoIWV4aXN0cyAmJiBvbW9kZSAhPSBtb2RlKQorI2lmZGVmIEhBVkVfRkNITU9ECisJCQkJaWYgKGZjaG1vZChvZmQsIG9tb2RlICYgfm1hc2spKSB7CisjZWxzZSAvKiBIQVZFX0ZDSE1PRCAqLworCQkJCWlmIChjaG1vZChucCwgb21vZGUgJiB+bWFzaykpIHsKKyNlbmRpZiAvKiBIQVZFX0ZDSE1PRCAqLworCQkJCQlydW5fZXJyKCIlczogc2V0IG1vZGU6ICVzIiwKKwkJCQkJICAgIG5wLCBzdHJlcnJvcihlcnJubykpOworCQkJCQl3cmVyciA9IERJU1BMQVlFRDsKKwkJCQl9CisJCX0KKwkJaWYgKGNsb3NlKG9mZCkgPT0gLTEpIHsKKwkJCXdyZXJyID0gWUVTOworCQkJd3JlcnJubyA9IGVycm5vOworCQl9CisJCSh2b2lkKSByZXNwb25zZSgpOworCQlpZiAoc2V0aW1lcyAmJiB3cmVyciA9PSBOTykgeworCQkJc2V0aW1lcyA9IDA7CisJCQlpZiAodXRpbWVzKG5wLCB0dikgPCAwKSB7CisJCQkJcnVuX2VycigiJXM6IHNldCB0aW1lczogJXMiLAorCQkJCSAgICBucCwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQl3cmVyciA9IERJU1BMQVlFRDsKKwkJCX0KKwkJfQorCQlzd2l0Y2ggKHdyZXJyKSB7CisJCWNhc2UgWUVTOgorCQkJcnVuX2VycigiJXM6ICVzIiwgbnAsIHN0cmVycm9yKHdyZXJybm8pKTsKKwkJCWJyZWFrOworCQljYXNlIE5POgorCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgcmVtb3V0LCAiIiwgMSk7CisJCQlicmVhazsKKwkJY2FzZSBESVNQTEFZRUQ6CisJCQlicmVhazsKKwkJfQorCX0KK3NjcmV3dXA6CisJcnVuX2VycigicHJvdG9jb2wgZXJyb3I6ICVzIiwgd2h5KTsKKwlleGl0KDEpOworfQorCitpbnQKK3Jlc3BvbnNlKHZvaWQpCit7CisJY2hhciBjaCwgKmNwLCByZXNwLCByYnVmWzIwNDhdOworCisJaWYgKGF0b21pY2lvKHJlYWQsIHJlbWluLCAmcmVzcCwgc2l6ZW9mKHJlc3ApKSAhPSBzaXplb2YocmVzcCkpCisJCWxvc3Rjb25uKDApOworCisJY3AgPSByYnVmOworCXN3aXRjaCAocmVzcCkgeworCWNhc2UgMDoJCS8qIG9rICovCisJCXJldHVybiAoMCk7CisJZGVmYXVsdDoKKwkJKmNwKysgPSByZXNwOworCQkvKiBGQUxMVEhST1VHSCAqLworCWNhc2UgMToJCS8qIGVycm9yLCBmb2xsb3dlZCBieSBlcnJvciBtc2cgKi8KKwljYXNlIDI6CQkvKiBmYXRhbCBlcnJvciwgIiIgKi8KKwkJZG8geworCQkJaWYgKGF0b21pY2lvKHJlYWQsIHJlbWluLCAmY2gsIHNpemVvZihjaCkpICE9IHNpemVvZihjaCkpCisJCQkJbG9zdGNvbm4oMCk7CisJCQkqY3ArKyA9IGNoOworCQl9IHdoaWxlIChjcCA8ICZyYnVmW3NpemVvZihyYnVmKSAtIDFdICYmIGNoICE9ICdcbicpOworCisJCWlmICghaWFtcmVtb3RlKQorCQkJKHZvaWQpIGF0b21pY2lvKHZ3cml0ZSwgU1RERVJSX0ZJTEVOTywgcmJ1ZiwgY3AgLSByYnVmKTsKKwkJKytlcnJzOworCQlpZiAocmVzcCA9PSAxKQorCQkJcmV0dXJuICgtMSk7CisJCWV4aXQoMSk7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KKwordm9pZAordXNhZ2Uodm9pZCkKK3sKKwkodm9pZCkgZnByaW50ZihzdGRlcnIsCisJICAgICJ1c2FnZTogc2NwIFstMTI0NkJDcHFydl0gWy1jIGNpcGhlcl0gWy1GIHNzaF9jb25maWddIFstaSBpZGVudGl0eV9maWxlXVxuIgorCSAgICAiICAgICAgICAgICBbLWwgbGltaXRdIFstbyBzc2hfb3B0aW9uXSBbLVAgcG9ydF0gWy1TIHByb2dyYW1dXG4iCisJICAgICIgICAgICAgICAgIFtbdXNlckBdaG9zdDE6XWZpbGUxIFsuLi5dIFtbdXNlckBdaG9zdDI6XWZpbGUyXG4iKTsKKwlleGl0KDEpOworfQorCit2b2lkCitydW5fZXJyKGNvbnN0IGNoYXIgKmZtdCwuLi4pCit7CisJc3RhdGljIEZJTEUgKmZwOworCXZhX2xpc3QgYXA7CisKKwkrK2VycnM7CisJaWYgKGZwID09IE5VTEwgJiYgIShmcCA9IGZkb3BlbihyZW1vdXQsICJ3IikpKQorCQlyZXR1cm47CisJKHZvaWQpIGZwcmludGYoZnAsICIlYyIsIDB4MDEpOworCSh2b2lkKSBmcHJpbnRmKGZwLCAic2NwOiAiKTsKKwl2YV9zdGFydChhcCwgZm10KTsKKwkodm9pZCkgdmZwcmludGYoZnAsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJKHZvaWQpIGZwcmludGYoZnAsICJcbiIpOworCSh2b2lkKSBmZmx1c2goZnApOworCisJaWYgKCFpYW1yZW1vdGUpIHsKKwkJdmFfc3RhcnQoYXAsIGZtdCk7CisJCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisJCXZhX2VuZChhcCk7CisJCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl9Cit9CisKK3ZvaWQKK3ZlcmlmeWRpcihjaGFyICpjcCkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdGI7CisKKwlpZiAoIXN0YXQoY3AsICZzdGIpKSB7CisJCWlmIChTX0lTRElSKHN0Yi5zdF9tb2RlKSkKKwkJCXJldHVybjsKKwkJZXJybm8gPSBFTk9URElSOworCX0KKwlydW5fZXJyKCIlczogJXMiLCBjcCwgc3RyZXJyb3IoZXJybm8pKTsKKwlraWxsY2hpbGQoMCk7Cit9CisKK2ludAorb2tuYW1lKGNoYXIgKmNwMCkKK3sKKwlpbnQgYzsKKwljaGFyICpjcDsKKworCWNwID0gY3AwOworCWRvIHsKKwkJYyA9IChpbnQpKmNwOworCQlpZiAoYyAmIDAyMDApCisJCQlnb3RvIGJhZDsKKwkJaWYgKCFpc2FscGhhKGMpICYmICFpc2RpZ2l0KGMpKSB7CisJCQlzd2l0Y2ggKGMpIHsKKwkJCWNhc2UgJ1wnJzoKKwkJCWNhc2UgJyInOgorCQkJY2FzZSAnYCc6CisJCQljYXNlICcgJzoKKwkJCWNhc2UgJyMnOgorCQkJCWdvdG8gYmFkOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gd2hpbGUgKCorK2NwKTsKKwlyZXR1cm4gKDEpOworCitiYWQ6CWZwcmludGYoc3RkZXJyLCAiJXM6IGludmFsaWQgdXNlciBuYW1lXG4iLCBjcDApOworCXJldHVybiAoMCk7Cit9CisKK0JVRiAqCithbGxvY2J1ZihCVUYgKmJwLCBpbnQgZmQsIGludCBibGtzaXplKQoreworCXNpemVfdCBzaXplOworI2lmZGVmIEhBVkVfU1RSVUNUX1NUQVRfU1RfQkxLU0laRQorCXN0cnVjdCBzdGF0IHN0YjsKKworCWlmIChmc3RhdChmZCwgJnN0YikgPCAwKSB7CisJCXJ1bl9lcnIoImZzdGF0OiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAoMCk7CisJfQorCXNpemUgPSByb3VuZHVwKHN0Yi5zdF9ibGtzaXplLCBibGtzaXplKTsKKwlpZiAoc2l6ZSA9PSAwKQorCQlzaXplID0gYmxrc2l6ZTsKKyNlbHNlIC8qIEhBVkVfU1RSVUNUX1NUQVRfU1RfQkxLU0laRSAqLworCXNpemUgPSBibGtzaXplOworI2VuZGlmIC8qIEhBVkVfU1RSVUNUX1NUQVRfU1RfQkxLU0laRSAqLworCWlmIChicC0+Y250ID49IHNpemUpCisJCXJldHVybiAoYnApOworCWlmIChicC0+YnVmID09IE5VTEwpCisJCWJwLT5idWYgPSB4bWFsbG9jKHNpemUpOworCWVsc2UKKwkJYnAtPmJ1ZiA9IHhyZWFsbG9jKGJwLT5idWYsIHNpemUpOworCW1lbXNldChicC0+YnVmLCAwLCBzaXplKTsKKwlicC0+Y250ID0gc2l6ZTsKKwlyZXR1cm4gKGJwKTsKK30KKwordm9pZAorbG9zdGNvbm4oaW50IHNpZ25vKQoreworCWlmICghaWFtcmVtb3RlKQorCQl3cml0ZShTVERFUlJfRklMRU5PLCAibG9zdCBjb25uZWN0aW9uXG4iLCAxNik7CisJaWYgKHNpZ25vKQorCQlfZXhpdCgxKTsKKwllbHNlCisJCWV4aXQoMSk7Cit9CmRpZmYgLS1naXQgYS9zY3BtaXNjLmMgYi9zY3BtaXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiMDlhNQotLS0gL2Rldi9udWxsCisrKyBiL3NjcG1pc2MuYwpAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBNYXJrdXMgRnJpZWRsLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLypSQ1NJRCgiT3BlbkJTRDogbWlzYy5jLHYgMS4yMiAyMDAzLzA5LzE4IDA4OjQ5OjQ1IG1hcmt1cyBFeHAgIik7Ki8KKworLyogRm9yIHhtYWxsb2MsIHhmcmVlIGV0YzoKKyAqIEF1dGhvcjogVGF0dSBZbG9uZW4gPHlsb0Bjcy5odXQuZmk+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTUgVGF0dSBZbG9uZW4gPHlsb0Bjcy5odXQuZmk+LCBFc3BvbywgRmlubGFuZAorICogICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIFZlcnNpb25zIG9mIG1hbGxvYyBhbmQgZnJpZW5kcyB0aGF0IGNoZWNrIHRoZWlyIHJlc3VsdHMsIGFuZCBuZXZlciByZXR1cm4KKyAqIGZhaWx1cmUgKHRoZXkgY2FsbCBmYXRhbCBpZiB0aGV5IGVuY291bnRlciBhbiBlcnJvcikuCisgKgorICogQXMgZmFyIGFzIEkgYW0gY29uY2VybmVkLCB0aGUgY29kZSBJIGhhdmUgd3JpdHRlbiBmb3IgdGhpcyBzb2Z0d2FyZQorICogY2FuIGJlIHVzZWQgZnJlZWx5IGZvciBhbnkgcHVycG9zZS4gIEFueSBkZXJpdmVkIHZlcnNpb25zIG9mIHRoaXMKKyAqIHNvZnR3YXJlIG11c3QgYmUgY2xlYXJseSBtYXJrZWQgYXMgc3VjaCwgYW5kIGlmIHRoZSBkZXJpdmVkIHdvcmsgaXMKKyAqIGluY29tcGF0aWJsZSB3aXRoIHRoZSBwcm90b2NvbCBkZXNjcmlwdGlvbiBpbiB0aGUgUkZDIGZpbGUsIGl0IG11c3QgYmUKKyAqIGNhbGxlZCBieSBhIG5hbWUgb3RoZXIgdGhhbiAic3NoIiBvciAiU2VjdXJlIFNoZWxsIi4KKyAqLworCisvKlJDU0lEKCJPcGVuQlNEOiB4bWFsbG9jLmMsdiAxLjE2IDIwMDEvMDcvMjMgMTg6MjE6NDYgc3RldmVzayBFeHAgIik7Ki8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAic2NwbWlzYy5oIgorCit2b2lkICoKK3htYWxsb2Moc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcHRyOworCisJaWYgKHNpemUgPT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgInhtYWxsb2M6IHplcm8gc2l6ZVxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJcHRyID0gbWFsbG9jKHNpemUpOworCWlmIChwdHIgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgInhtYWxsb2M6IG91dCBvZiBtZW1vcnkgKGFsbG9jYXRpbmcgJWx1IGJ5dGVzKVxuIiwgKHVfbG9uZykgc2l6ZSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJcmV0dXJuIHB0cjsKK30KKwordm9pZCAqCit4cmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKwl2b2lkICpuZXdfcHRyOworCisJaWYgKG5ld19zaXplID09IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJ4cmVhbGxvYzogemVybyBzaXplXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAocHRyID09IE5VTEwpCisJCW5ld19wdHIgPSBtYWxsb2MobmV3X3NpemUpOworCWVsc2UKKwkJbmV3X3B0ciA9IHJlYWxsb2MocHRyLCBuZXdfc2l6ZSk7CisJaWYgKG5ld19wdHIgPT0gTlVMTCkgeworCQlmcHJpbnRmKHN0ZGVyciwgInhyZWFsbG9jOiBvdXQgb2YgbWVtb3J5IChuZXdfc2l6ZSAlbHUgYnl0ZXMpXG4iLCAodV9sb25nKSBuZXdfc2l6ZSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJcmV0dXJuIG5ld19wdHI7Cit9CisKK3ZvaWQKK3hmcmVlKHZvaWQgKnB0cikKK3sKKwlpZiAocHRyID09IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICJ4ZnJlZTogTlVMTCBwb2ludGVyIGdpdmVuIGFzIGFyZ3VtZW50XG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlmcmVlKHB0cik7Cit9CisKK2NoYXIgKgoreHN0cmR1cChjb25zdCBjaGFyICpzdHIpCit7CisJc2l6ZV90IGxlbjsKKwljaGFyICpjcDsKKworCWxlbiA9IHN0cmxlbihzdHIpICsgMTsKKwljcCA9IHhtYWxsb2MobGVuKTsKKwlzdHJuY3B5KGNwLCBzdHIsIGxlbik7CisJcmV0dXJuIGNwOworfQorCitjaGFyICoKK2NsZWFuaG9zdG5hbWUoY2hhciAqaG9zdCkKK3sKKwlpZiAoKmhvc3QgPT0gJ1snICYmIGhvc3Rbc3RybGVuKGhvc3QpIC0gMV0gPT0gJ10nKSB7CisJCWhvc3Rbc3RybGVuKGhvc3QpIC0gMV0gPSAnXDAnOworCQlyZXR1cm4gKGhvc3QgKyAxKTsKKwl9IGVsc2UKKwkJcmV0dXJuIGhvc3Q7Cit9CisKK2NoYXIgKgorY29sb24oY2hhciAqY3ApCit7CisJaW50IGZsYWcgPSAwOworCisJaWYgKCpjcCA9PSAnOicpCQkvKiBMZWFkaW5nIGNvbG9uIGlzIHBhcnQgb2YgZmlsZSBuYW1lLiAqLworCQlyZXR1cm4gKDApOworCWlmICgqY3AgPT0gJ1snKQorCQlmbGFnID0gMTsKKworCWZvciAoOyAqY3A7ICsrY3ApIHsKKwkJaWYgKCpjcCA9PSAnQCcgJiYgKihjcCsxKSA9PSAnWycpCisJCQlmbGFnID0gMTsKKwkJaWYgKCpjcCA9PSAnXScgJiYgKihjcCsxKSA9PSAnOicgJiYgZmxhZykKKwkJCXJldHVybiAoY3ArMSk7CisJCWlmICgqY3AgPT0gJzonICYmICFmbGFnKQorCQkJcmV0dXJuIChjcCk7CisJCWlmICgqY3AgPT0gJy8nKQorCQkJcmV0dXJuICgwKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworLyogZnVuY3Rpb24gdG8gYXNzaXN0IGJ1aWxkaW5nIGV4ZWN2KCkgYXJndW1lbnRzICovCit2b2lkCithZGRhcmdzKGFyZ2xpc3QgKmFyZ3MsIGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJY2hhciAqY3A7CisJdV9pbnQgbmFsbG9jOworCWludCByOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJciA9IHZhc3ByaW50ZigmY3AsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKHIgPT0gLTEpCisJCWZhdGFsKCJhZGRhcmdzOiBhcmd1bWVudCB0b28gbG9uZyIpOworCisJbmFsbG9jID0gYXJncy0+bmFsbG9jOworCWlmIChhcmdzLT5saXN0ID09IE5VTEwpIHsKKwkJbmFsbG9jID0gMzI7CisJCWFyZ3MtPm51bSA9IDA7CisJfSBlbHNlIGlmIChhcmdzLT5udW0rMiA+PSBuYWxsb2MpCisJCW5hbGxvYyAqPSAyOworCisJYXJncy0+bGlzdCA9IHhyZWFsbG9jKGFyZ3MtPmxpc3QsIG5hbGxvYyAqIHNpemVvZihjaGFyICopKTsKKwlhcmdzLT5uYWxsb2MgPSBuYWxsb2M7CisJYXJncy0+bGlzdFthcmdzLT5udW0rK10gPSBjcDsKKwlhcmdzLT5saXN0W2FyZ3MtPm51bV0gPSBOVUxMOworfQorCit2b2lkCityZXBsYWNlYXJnKGFyZ2xpc3QgKmFyZ3MsIHVfaW50IHdoaWNoLCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNoYXIgKmNwOworCWludCByOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJciA9IHZhc3ByaW50ZigmY3AsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKHIgPT0gLTEpCisJCWZhdGFsKCJyZXBsYWNlYXJnOiBhcmd1bWVudCB0b28gbG9uZyIpOworCisJaWYgKHdoaWNoID49IGFyZ3MtPm51bSkKKwkJZmF0YWwoInJlcGxhY2Vhcmc6IHRyaWVkIHRvIHJlcGxhY2UgaW52YWxpZCBhcmcgJWQgPj0gJWQiLAorCQkgICAgd2hpY2gsIGFyZ3MtPm51bSk7CisJeGZyZWUoYXJncy0+bGlzdFt3aGljaF0pOworCWFyZ3MtPmxpc3Rbd2hpY2hdID0gY3A7Cit9CisKK3ZvaWQKK2ZyZWVhcmdzKGFyZ2xpc3QgKmFyZ3MpCit7CisJdV9pbnQgaTsKKworCWlmIChhcmdzLT5saXN0ICE9IE5VTEwpIHsKKwkJZm9yIChpID0gMDsgaSA8IGFyZ3MtPm51bTsgaSsrKQorCQkJeGZyZWUoYXJncy0+bGlzdFtpXSk7CisJCXhmcmVlKGFyZ3MtPmxpc3QpOworCQlhcmdzLT5uYWxsb2MgPSBhcmdzLT5udW0gPSAwOworCQlhcmdzLT5saXN0ID0gTlVMTDsKKwl9Cit9CisKKy8qCisgKiBOQi4gZHVwbGljYXRlIF9fcHJvZ25hbWUgaW4gY2FzZSBpdCBpcyBhbiBhbGlhcyBmb3IgYXJndlswXQorICogT3RoZXJ3aXNlIGl0IG1heSBnZXQgY2xvYmJlcmVkIGJ5IHNldHByb2N0aXRsZSgpCisgKi8KK2NoYXIgKnNzaF9nZXRfcHJvZ25hbWUoY2hhciAqYXJndjApCit7CisJY2hhciAqcDsKKworCWlmIChhcmd2MCA9PSBOVUxMKQorCQlyZXR1cm4gKCJ1bmtub3duIik7CS8qIFhYWCAqLworCXAgPSBzdHJyY2hyKGFyZ3YwLCAnLycpOworCWlmIChwID09IE5VTEwpCisJCXAgPSBhcmd2MDsKKwllbHNlCisJCXArKzsKKworCXJldHVybiAoeHN0cmR1cChwKSk7Cit9CisKK3ZvaWQgZmF0YWwoY2hhciogZm10LC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJdmFfc3RhcnQoYXJncywgZm10KTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWV4aXQoMjU1KTsKK30KKwordm9pZAorc2FuaXRpc2Vfc3RkZmQodm9pZCkKK3sKKwlpbnQgbnVsbGZkLCBkdXBmZDsKKworCWlmICgobnVsbGZkID0gZHVwZmQgPSBvcGVuKF9QQVRIX0RFVk5VTEwsIE9fUkRXUikpID09IC0xKSB7CisJCWZwcmludGYoc3RkZXJyLCAiQ291bGRuJ3Qgb3BlbiAvZGV2L251bGw6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9CisJd2hpbGUgKCsrZHVwZmQgPD0gMikgeworCQkvKiBPbmx5IGNsb2JiZXIgY2xvc2VkIGZkcyAqLworCQlpZiAoZmNudGwoZHVwZmQsIEZfR0VURkwsIDApID49IDApCisJCQljb250aW51ZTsKKwkJaWYgKGR1cDIobnVsbGZkLCBkdXBmZCkgPT0gLTEpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiZHVwMjogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQkJZXhpdCgxKTsKKwkJfQorCX0KKwlpZiAobnVsbGZkID4gMikKKwkJY2xvc2UobnVsbGZkKTsKK30KZGlmZiAtLWdpdCBhL3NjcG1pc2MuaCBiL3NjcG1pc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDBiMzI2Ci0tLSAvZGV2L251bGwKKysrIGIvc2NwbWlzYy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCSRPcGVuQlNEOiBtaXNjLmgsdiAxLjEyIDIwMDIvMDMvMTkgMTA6NDk6MzUgbWFya3VzIEV4cCAkCSovCisKKy8qCisgKiBBdXRob3I6IFRhdHUgWWxvbmVuIDx5bG9AY3MuaHV0LmZpPgorICogQ29weXJpZ2h0IChjKSAxOTk1IFRhdHUgWWxvbmVuIDx5bG9AY3MuaHV0LmZpPiwgRXNwb28sIEZpbmxhbmQKKyAqICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkCisgKgorICogQXMgZmFyIGFzIEkgYW0gY29uY2VybmVkLCB0aGUgY29kZSBJIGhhdmUgd3JpdHRlbiBmb3IgdGhpcyBzb2Z0d2FyZQorICogY2FuIGJlIHVzZWQgZnJlZWx5IGZvciBhbnkgcHVycG9zZS4gIEFueSBkZXJpdmVkIHZlcnNpb25zIG9mIHRoaXMKKyAqIHNvZnR3YXJlIG11c3QgYmUgY2xlYXJseSBtYXJrZWQgYXMgc3VjaCwgYW5kIGlmIHRoZSBkZXJpdmVkIHdvcmsgaXMKKyAqIGluY29tcGF0aWJsZSB3aXRoIHRoZSBwcm90b2NvbCBkZXNjcmlwdGlvbiBpbiB0aGUgUkZDIGZpbGUsIGl0IG11c3QgYmUKKyAqIGNhbGxlZCBieSBhIG5hbWUgb3RoZXIgdGhhbiAic3NoIiBvciAiU2VjdXJlIFNoZWxsIi4KKyAqLworCisvKiBhY3R1YWxseSBmcm9tIGF0b21pY2lvLCBidXQgaXMgb25seSB1c2VkIGluIHNjcCBjb2RlICovCisjZGVmaW5lIHZ3cml0ZSAoc3NpemVfdCAoKikoaW50LCB2b2lkICosIHNpemVfdCkpd3JpdGUKKworY2hhcgkqY2hvcChjaGFyICopOworY2hhcgkqc3RyZGVsaW0oY2hhciAqKik7Cit2b2lkCSBzZXRfbm9uYmxvY2soaW50KTsKK3ZvaWQJIHVuc2V0X25vbmJsb2NrKGludCk7Cit2b2lkCSBzZXRfbm9kZWxheShpbnQpOworaW50CSBhMnBvcnQoY29uc3QgY2hhciAqKTsKK2NoYXIJKmNsZWFuaG9zdG5hbWUoY2hhciAqKTsKK2NoYXIJKmNvbG9uKGNoYXIgKik7Citsb25nCSBjb252dGltZShjb25zdCBjaGFyICopOworCitzdHJ1Y3QgcGFzc3dkICpwd2NvcHkoc3RydWN0IHBhc3N3ZCAqKTsKKwordHlwZWRlZiBzdHJ1Y3QgYXJnbGlzdCBhcmdsaXN0Oworc3RydWN0IGFyZ2xpc3QgeworCWNoYXIgICAgKipsaXN0OworCWludCAgICAgbnVtOworCWludCAgICAgbmFsbG9jOworfTsKK3ZvaWQJIGFkZGFyZ3MoYXJnbGlzdCAqLCBjaGFyICosIC4uLik7Cit2b2lkCSByZXBsYWNlYXJnKGFyZ2xpc3QgKiwgdV9pbnQsIGNoYXIgKiwgLi4uKTsKK3ZvaWQJIGZyZWVhcmdzKGFyZ2xpc3QgKik7CisKKy8qIGZyb20geG1hbGxvYy5oICovCit2b2lkCSp4bWFsbG9jKHNpemVfdCk7Cit2b2lkCSp4cmVhbGxvYyh2b2lkICosIHNpemVfdCk7Cit2b2lkICAgICB4ZnJlZSh2b2lkICopOworY2hhcgkqeHN0cmR1cChjb25zdCBjaGFyICopOworCitjaGFyICpzc2hfZ2V0X3Byb2duYW1lKGNoYXIgKik7Cit2b2lkIGZhdGFsKGNoYXIqIGZtdCwuLi4pOwordm9pZCBzYW5pdGlzZV9zdGRmZCh2b2lkKTsKKworLyogUmVxdWlyZWQgZm9yIG5vbi1CU0QgcGxhdGZvcm1zLCBmcm9tIE9wZW5TU0gncyBkZWZpbmVzLmggKi8KKyNpZm5kZWYgdGltZXJzdWIKKyNkZWZpbmUgdGltZXJzdWIoYSwgYiwgcmVzdWx0KSAgICAgICAgICAgICAgICAgIFwKKyAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChyZXN1bHQpLT50dl9zZWMgPSAoYSktPnR2X3NlYyAtIChiKS0+dHZfc2VjOyAgICAgXAorICAgICAgKHJlc3VsdCktPnR2X3VzZWMgPSAoYSktPnR2X3VzZWMgLSAoYiktPnR2X3VzZWM7ICAgICAgXAorICAgICAgaWYgKChyZXN1bHQpLT50dl91c2VjIDwgMCkgeyAgICAgICAgICAgICAgXAorICAgICAtLShyZXN1bHQpLT50dl9zZWM7ICAgICAgICAgICAgICAgICAgICBcCisgICAgIChyZXN1bHQpLT50dl91c2VjICs9IDEwMDAwMDA7ICAgICAgICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgVElNRVZBTF9UT19USU1FU1BFQworI2RlZmluZSBUSU1FVkFMX1RPX1RJTUVTUEVDKHR2LCB0cykgeyAgICAgICAgICAgICAgICAgICBcCisgICAgKHRzKS0+dHZfc2VjID0gKHR2KS0+dHZfc2VjOyAgICAgICAgICAgICAgICAgICAgXAorICAgICh0cyktPnR2X25zZWMgPSAodHYpLT50dl91c2VjICogMTAwMDsgICAgICAgICAgICAgICBcCit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvc2VydmljZS5oIGIvc2VydmljZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5N2Q4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zZXJ2aWNlLmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfU0VSVklDRV9IXworI2RlZmluZSBfU0VSVklDRV9IXworCit2b2lkIHJlY3ZfbXNnX3NlcnZpY2VfcmVxdWVzdCgpOyAvKiBTZXJ2ZXIgKi8KK3ZvaWQgc2VuZF9tc2dfc2VydmljZV9yZXF1ZXN0KCk7IC8qIENsaWVudCAqLwordm9pZCByZWN2X21zZ19zZXJ2aWNlX2FjY2VwdCgpOyAvKiBDbGllbnQgKi8KKworI2VuZGlmIC8qIF9TRVJWSUNFX0hfICovCmRpZmYgLS1naXQgYS9zZXNzaW9uLmggYi9zZXNzaW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5ZmUyOQotLS0gL2Rldi9udWxsCisrKyBiL3Nlc3Npb24uaApAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfU0VTU0lPTl9IXworI2RlZmluZSBfU0VTU0lPTl9IXworCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJvcHRpb25zLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAic2lnbmtleS5oIgorI2luY2x1ZGUgImtleC5oIgorI2luY2x1ZGUgImF1dGguaCIKKyNpbmNsdWRlICJjaGFubmVsLmgiCisjaW5jbHVkZSAicXVldWUuaCIKKyNpbmNsdWRlICJsaXN0ZW5lci5oIgorI2luY2x1ZGUgInBhY2tldC5oIgorI2luY2x1ZGUgInRjcGZ3ZC5oIgorI2luY2x1ZGUgImNoYW5zZXNzaW9uLmgiCisKK2V4dGVybiBpbnQgc2Vzc2luaXRkb25lOyAvKiBJcyBzZXQgdG8gMCBzb21ld2hlcmUgKi8KK2V4dGVybiBpbnQgZXhpdGZsYWc7CisKK3ZvaWQgY29tbW9uX3Nlc3Npb25faW5pdChpbnQgc29jaywgY2hhciogcmVtb3RlaG9zdCk7Cit2b2lkIHNlc3Npb25fbG9vcCh2b2lkKCpsb29waGFuZGxlcikoKSk7Cit2b2lkIGNvbW1vbl9zZXNzaW9uX2NsZWFudXAoKTsKK3ZvaWQgc2Vzc2lvbl9pZGVudGlmaWNhdGlvbigpOworCisKKy8qIFNlcnZlciAqLwordm9pZCBzdnJfc2Vzc2lvbihpbnQgc29jaywgaW50IGNoaWxkcGlwZSwgY2hhciAqcmVtb3RlaG9zdCwgY2hhciAqYWRkcnN0cmluZyk7Cit2b2lkIHN2cl9kcm9wYmVhcl9leGl0KGludCBleGl0Y29kZSwgY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IHBhcmFtKTsKK3ZvaWQgc3ZyX2Ryb3BiZWFyX2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCBwYXJhbSk7CisKKy8qIENsaWVudCAqLwordm9pZCBjbGlfc2Vzc2lvbihpbnQgc29jaywgY2hhciAqcmVtb3RlaG9zdCk7Cit2b2lkIGNsaV9zZXNzaW9uX2NsZWFudXAoKTsKK3ZvaWQgY2xlYW50ZXh0KHVuc2lnbmVkIGNoYXIqIGRpcnR5dGV4dCk7CisKK3N0cnVjdCBrZXlfY29udGV4dCB7CisKKwljb25zdCBzdHJ1Y3QgZHJvcGJlYXJfY2lwaGVyICpyZWN2X2FsZ29fY3J5cHQ7IC8qIE5VTEwgZm9yIG5vbmUgKi8KKwljb25zdCBzdHJ1Y3QgZHJvcGJlYXJfY2lwaGVyICp0cmFuc19hbGdvX2NyeXB0OyAvKiBOVUxMIGZvciBub25lICovCisJY29uc3Qgc3RydWN0IGRyb3BiZWFyX2hhc2ggKnJlY3ZfYWxnb19tYWM7IC8qIE5VTEwgZm9yIG5vbmUgKi8KKwljb25zdCBzdHJ1Y3QgZHJvcGJlYXJfaGFzaCAqdHJhbnNfYWxnb19tYWM7IC8qIE5VTEwgZm9yIG5vbmUgKi8KKwljaGFyIGFsZ29fa2V4OworCWNoYXIgYWxnb19ob3N0a2V5OworCisJY2hhciByZWN2X2FsZ29fY29tcDsgLyogY29tcHJlc3Npb24gKi8KKwljaGFyIHRyYW5zX2FsZ29fY29tcDsKKyNpZm5kZWYgRElTQUJMRV9aTElCCisJel9zdHJlYW1wIHJlY3ZfenN0cmVhbTsKKwl6X3N0cmVhbXAgdHJhbnNfenN0cmVhbTsKKyNlbmRpZgorCisJLyogYWN0dWFsIGtleXMgKi8KKwlzeW1tZXRyaWNfQ0JDIHJlY3Zfc3ltbWV0cmljX3N0cnVjdDsKKwlzeW1tZXRyaWNfQ0JDIHRyYW5zX3N5bW1ldHJpY19zdHJ1Y3Q7CisJdW5zaWduZWQgY2hhciByZWN2bWFja2V5W01BWF9NQUNfS0VZXTsKKwl1bnNpZ25lZCBjaGFyIHRyYW5zbWFja2V5W01BWF9NQUNfS0VZXTsKKworfTsKKworc3RydWN0IHNzaHNlc3Npb24geworCisJLyogSXMgaXQgYSBjbGllbnQgb3Igc2VydmVyPyAqLworCXVuc2lnbmVkIGNoYXIgaXNzZXJ2ZXI7CisKKwlsb25nIGNvbm5lY3R0aW1lb3V0OyAvKiB0aW1lIHRvIGRpc2Nvbm5lY3QgaWYgd2UgaGF2ZSBhIHRpbWVvdXQgKGZvcgorCQkJCQkJCXVzZXJhdXRoIGV0YyksIG9yIDAgZm9yIG5vIHRpbWVvdXQgKi8KKworCWludCBzb2NrOworCisJdW5zaWduZWQgY2hhciAqcmVtb3RlaG9zdDsgLyogdGhlIHBlZXIgaG9zdG5hbWUgKi8KKworCXVuc2lnbmVkIGNoYXIgKnJlbW90ZWlkZW50OworCisJaW50IG1heGZkOyAvKiB0aGUgbWF4aW11bSBmaWxlIGRlc2NyaXB0b3IgdG8gY2hlY2sgd2l0aCBzZWxlY3QoKSAqLworCisKKwkvKiBQYWNrZXQgYnVmZmVycy92YWx1ZXMgZXRjICovCisJYnVmZmVyICp3cml0ZXBheWxvYWQ7IC8qIFVuZW5jcnlwdGVkIHBheWxvYWQgdG8gd3JpdGUgLSB0aGlzIGlzIHVzZWQKKwkJCQkJCQkgdGhyb3VnaG91dCB0aGUgY29kZSwgYXMgaGFuZGxlcnMgZmlsbCBvdXQgdGhpcworCQkJCQkJCSBidWZmZXIgd2l0aCB0aGUgcGFja2V0IHRvIHNlbmQuICovCisJc3RydWN0IFF1ZXVlIHdyaXRlcXVldWU7IC8qIEEgcXVldWUgb2YgZW5jcnlwdGVkIHBhY2tldHMgdG8gc2VuZCAqLworCWJ1ZmZlciAqcmVhZGJ1ZjsgLyogRW5jcnlwdGVkICovCisJYnVmZmVyICpkZWNyeXB0cmVhZGJ1ZjsgLyogUG9zdC1kZWNyeXB0aW9uICovCisJYnVmZmVyICpwYXlsb2FkOyAvKiBQb3N0LWRlY29tcHJlc3Npb24sIHRoZSBhY3R1YWwgU1NIIHBhY2tldCAqLworCXVuc2lnbmVkIGludCB0cmFuc3NlcSwgcmVjdnNlcTsgLyogU2VxdWVuY2UgSURzICovCisKKwkvKiBQYWNrZXQtaGFuZGxpbmcgZmxhZ3MgKi8KKwljb25zdCBwYWNrZXR0eXBlICogcGFja2V0dHlwZXM7IC8qIFBhY2tldCBoYW5kbGVyIG1hcHBpbmdzIGZvciB0aGlzCisJCQkJCQkJCQkJc2Vzc2lvbiwgc2VlIHByb2Nlc3MtcGFja2V0LmMgKi8KKworCXVuc2lnbmVkIGRhdGFhbGxvd2VkIDogMTsgLyogd2hldGhlciB3ZSBjYW4gc2VuZCBkYXRhIHBhY2tldHMgb3Igd2UgYXJlIGluCisJCQkJCQkJCSB0aGUgbWlkZGxlIG9mIGEgS0VYIG9yIHNvbWV0aGluZyAqLworCisJdW5zaWduZWQgY2hhciByZXF1aXJlbmV4dDsgLyogYnl0ZSBpbmRpY2F0aW5nIHdoYXQgcGFja2V0IHdlIHJlcXVpcmUgbmV4dCwgCisJCQkJCQkJCW9yIDB4MDAgZm9yIGFueSAqLworCisJdW5zaWduZWQgY2hhciBpZ25vcmVuZXh0OyAvKiB3aGV0aGVyIHRvIGlnbm9yZSB0aGUgbmV4dCBwYWNrZXQsCisJCQkJCQkJCSB1c2VkIGZvciBrZXhfZm9sbG93cyBzdHVmZiAqLworCisJdW5zaWduZWQgY2hhciBsYXN0cGFja2V0OyAvKiBXaGF0IHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldCB0eXBlIHdhcyAqLworCQorICAgIGludCBzaWduYWxfcGlwZVsyXTsgLyogc3RvcmVzIGVuZHBvaW50cyBvZiBhIHNlbGYtcGlwZSB1c2VkIGZvcgorCQkJCQkJICAgcmFjZS1mcmVlIHNpZ25hbCBoYW5kbGluZyAqLworCisJLyogS0VYL2VuY3J5cHRpb24gcmVsYXRlZCAqLworCXN0cnVjdCBLRVhTdGF0ZSBrZXhzdGF0ZTsKKwlzdHJ1Y3Qga2V5X2NvbnRleHQgKmtleXM7CisJc3RydWN0IGtleV9jb250ZXh0ICpuZXdrZXlzOworCXVuc2lnbmVkIGNoYXIgKnNlc3Npb25faWQ7IC8qIHRoaXMgaXMgdGhlIGhhc2ggZnJvbSB0aGUgZmlyc3Qga2V4ICovCisJLyogVGhlIGJlbG93IGFyZSB1c2VkIHRlbW9yYXJpbHkgZHVyaW5nIGtleCwgYXJlIGZyZWVkIGFmdGVyIHVzZSAqLworCW1wX2ludCAqIGRoX0s7IC8qIFNTSF9NU0dfS0VYREhfUkVQTFkgYW5kIHNlbmRpbmcgU1NIX01TSF9ORVdLRVlTICovCisJdW5zaWduZWQgY2hhciBoYXNoW1NIQTFfSEFTSF9TSVpFXTsgLyogdGhlIGhhc2gqLworCWJ1ZmZlcioga2V4aGFzaGJ1ZjsgLyogc2Vzc2lvbiBoYXNoIGJ1ZmZlciBjYWxjdWxhdGVkIGZyb20gdmFyaW91cyBwYWNrZXRzKi8KKwlidWZmZXIqIHRyYW5za2V4aW5pdDsgLyogdGhlIGtleGluaXQgcGFja2V0IHdlIHNlbmQgc2hvdWxkIGJlIGtlcHQgc28gd2UKKwkJCQkJCQkgY2FuIGFkZCBpdCB0byB0aGUgaGFzaCB3aGVuIGdlbmVyYXRpbmcga2V5cyAqLworCisJYWxnb190eXBlKigqYnVmX21hdGNoX2FsZ28pKGJ1ZmZlcipidWYsIGFsZ29fdHlwZSBsb2NhbGFsZ29zW10sCisJCQlpbnQgKmdvb2RndWVzcyk7IC8qIFRoZSBmdW5jdGlvbiB0byB1c2UgdG8gY2hvb3NlIHdoaWNoIGFsZ29yaXRobQorCQkJCQkJCQl0byB1c2UgZnJvbSB0aGUgb25lcyBwcmVzZW50ZWQgYnkgdGhlIHJlbW90ZQorCQkJCQkJCQlzaWRlLiBJcyBzcGVjaWZpYyB0byB0aGUgY2xpZW50L3NlcnZlciBtb2RlLAorCQkJCQkJCQloZW5jZSB0aGUgZnVuY3Rpb24tcG9pbnRlciBjYWxsYmFjay4qLworCisJdm9pZCgqcmVtb3RlY2xvc2VkKSgpOyAvKiBBIGNhbGxiYWNrIHRvIGhhbmRsZSBjbG9zdXJlIG9mIHRoZQorCQkJCQkJCQkJICByZW1vdGUgY29ubmVjdGlvbiAqLworCisKKwlzdHJ1Y3QgQXV0aFN0YXRlIGF1dGhzdGF0ZTsgLyogQ29tbW9uIGFtb25nc3QgY2xpZW50IGFuZCBzZXJ2ZXIsIHNpbmNlIG1vc3QKKwkJCQkJCQkJICAgc3RydWN0IGVsZW1lbnRzIGFyZSBjb21tb24gKi8KKworCS8qIENoYW5uZWwgcmVsYXRlZCAqLworCXN0cnVjdCBDaGFubmVsICoqIGNoYW5uZWxzOyAvKiB0aGVzZSBwb2ludGVycyBtYXkgYmUgbnVsbCAqLworCXVuc2lnbmVkIGludCBjaGFuc2l6ZTsgLyogdGhlIG51bWJlciBvZiBDaGFubmVsKnMgYWxsb2NhdGVkIGZvciBjaGFubmVscyAqLworCXVuc2lnbmVkIGludCBjaGFuY291bnQ7IC8qIHRoZSBudW1iZXIgb2YgQ2hhbm5lbCpzIGluIHVzZSAqLworCWNvbnN0IHN0cnVjdCBDaGFuVHlwZSAqKmNoYW50eXBlczsgLyogVGhlIHZhbGlkIGNoYW5uZWwgdHlwZXMgKi8KKworCQorCS8qIFRDUCBmb3J3YXJkaW5nIC0gd2hlcmUgbWFuYWdlIGxpc3RlbmVycyAqLworCXN0cnVjdCBMaXN0ZW5lciAqKiBsaXN0ZW5lcnM7CisJdW5zaWduZWQgaW50IGxpc3RlbnNpemU7CisKKwkvKiBXaGV0aGVyIHRvIGFsbG93IGJpbmRpbmcgdG8gcHJpdmlsZWdlZCBwb3J0cyAoPDEwMjQpLiBUaGlzIGRvZXNuJ3QKKwkgKiByZWFsbHkgYmVsb25nIGhlcmUsIGJ1dCBub3doZXJlIGVsc2UgZml0cyBuaWNlbHkgKi8KKwlpbnQgYWxsb3dwcml2cG9ydDsKKworfTsKKworc3RydWN0IHNlcnZlcnNlc3Npb24geworCisJLyogU2VydmVyIHNwZWNpZmljIG9wdGlvbnMgKi8KKwlpbnQgY2hpbGRwaXBlOyAvKiBrZXB0IG9wZW4gdW50aWwgd2Ugc3VjY2Vzc2Z1bGx5IGF1dGhlbnRpY2F0ZSAqLworCS8qIHVzZXJhdXRoICovCisKKwlzdHJ1Y3QgQ2hpbGRQaWQgKiBjaGlsZHBpZHM7IC8qIGFycmF5IG9mIG1hcHBpbmdzIGNoaWxkcGlkPC0+Y2hhbm5lbCAqLworCXVuc2lnbmVkIGludCBjaGlsZHBpZHNpemU7CisKKwkvKiBVc2VkIHRvIGF2b2lkIGEgcmFjZSBpbiB0aGUgZXhpdCByZXR1cm5jb2RlIGhhbmRsaW5nIC0gc2VlCisJICogc3ZyLWNoYW5zZXNzaW9uLmMgZm9yIGRldGFpbHMgKi8KKwlzdHJ1Y3QgZXhpdGluZm8gbGFzdGV4aXQ7CisKKwkvKiBUaGUgbnVtZXJpYyBhZGRyZXNzIHRoZXkgY29ubmVjdGVkIGZyb20sIHVzZWQgZm9yIGxvZ2dpbmcgKi8KKwljaGFyICogYWRkcnN0cmluZzsKKworfTsKKwordHlwZWRlZiBlbnVtIHsKKwlLRVhfTk9USElORywKKwlLRVhJTklUX1JDVkQsCisJS0VYREhfSU5JVF9TRU5ULAorCUtFWERPTkUKK30gY2xpX2tleF9zdGF0ZTsKKwordHlwZWRlZiBlbnVtIHsKKwlTVEFURV9OT1RISU5HLAorCVNFUlZJQ0VfQVVUSF9SRVFfU0VOVCwKKwlTRVJWSUNFX0FVVEhfQUNDRVBUX1JDVkQsCisJU0VSVklDRV9DT05OX1JFUV9TRU5ULAorCVNFUlZJQ0VfQ09OTl9BQ0NFUFRfUkNWRCwKKwlVU0VSQVVUSF9SRVFfU0VOVCwKKwlVU0VSQVVUSF9GQUlMX1JDVkQsCisJVVNFUkFVVEhfU1VDQ0VTU19SQ1ZELAorCVNFU1NJT05fUlVOTklORworfSBjbGlfc3RhdGU7CisKK3N0cnVjdCBjbGllbnRzZXNzaW9uIHsKKworCW1wX2ludCAqZGhfZSwgKmRoX3g7IC8qIFVzZWQgZHVyaW5nIEtFWCAqLworCWNsaV9rZXhfc3RhdGUga2V4X3N0YXRlOyAvKiBVc2VkIGZvciBwcm9ncmVzc2luZyBLRVggKi8KKwljbGlfc3RhdGUgc3RhdGU7IC8qIFVzZWQgdG8gcHJvZ3Jlc3MgYXV0aC9jaGFubmVsc2Vzc2lvbiBldGMgKi8KKwl1bnNpZ25lZCBkb25lZmlyc3RrZXggOiAxOyAvKiBTZXQgd2hlbiB3ZSBzZXQgc2VudG5ld2tleXMsIG5ldmVyIHJlc2V0ICovCisKKwlpbnQgdHR5X3Jhd19tb2RlOyAvKiBXaGV0aGVyIHdlJ3JlIGluIHJhdyBtb2RlIChhbmQgaGF2ZSB0byBjbGVhbiB1cCkgKi8KKwlzdHJ1Y3QgdGVybWlvcyBzYXZlZF90aW87CisJaW50IHN0ZGluY29weTsKKwlpbnQgc3RkaW5mbGFnczsKKwlpbnQgc3Rkb3V0Y29weTsKKwlpbnQgc3Rkb3V0ZmxhZ3M7CisJaW50IHN0ZGVycmNvcHk7CisJaW50IHN0ZGVycmZsYWdzOworCisJaW50IHdpbmNoYW5nZTsgLyogU2V0IHRvIDEgd2hlbiBhIHdpbmRvd2NoYW5nZSBzaWduYWwgaGFwcGVucyAqLworCisJaW50IGxhc3RhdXRodHlwZTsgLyogZWl0aGVyIEFVVEhfVFlQRV9QVUJLRVkgb3IgQVVUSF9UWVBFX1BBU1NXT1JELAorCQkJCQkJIGZvciB0aGUgbGFzdCB0eXBlIG9mIGF1dGggd2UgdHJpZWQgKi8KKyNpZmRlZiBFTkFCTEVfQ0xJX0lOVEVSQUNUX0FVVEgKKwlpbnQgYXV0aF9pbnRlcmFjdF9mYWlsZWQ7IC8qIGZsYWcgd2hldGhlciBpbnRlcmFjdGl2ZSBhdXRoIGNhbiBzdGlsbAorCQkJCQkJCQkgYmUgdXNlZCAqLworCWludCBpbnRlcmFjdF9yZXF1ZXN0X3JlY2VpdmVkOyAvKiBmbGFnIHdoZXRoZXIgd2UndmUgcmVjZWl2ZWQgYW4gCisJCQkJCQkJCQkgIGluZm8gcmVxdWVzdCBmcm9tIHRoZSBzZXJ2ZXIgZm9yCisJCQkJCQkJCQkgIGludGVyYWN0aXZlIGF1dGguKi8KKyNlbmRpZgorCXN0cnVjdCBTaWduS2V5TGlzdCAqbGFzdHByaXZrZXk7CisKKwlpbnQgcmV0dmFsOyAvKiBXaGF0IHRoZSBjb21tYW5kIGV4aXQgc3RhdHVzIHdhcyAtIHdlIGVtdWxhdGUgaXQgKi8KKyNpZiAwCisJVE9ETworCXN0cnVjdCBBZ2VudGtleUxpc3QgKmFnZW50a2V5czsgLyogS2V5cyB0byB1c2UgZm9yIHB1YmxpYy1rZXkgYXV0aCAqLworI2VuZGlmCisKK307CisKKy8qIEdsb2JhbCBzdHJ1Y3RzIHN0b3JpbmcgdGhlIHN0YXRlICovCitleHRlcm4gc3RydWN0IHNzaHNlc3Npb24gc2VzOworCisjaWZkZWYgRFJPUEJFQVJfU0VSVkVSCitleHRlcm4gc3RydWN0IHNlcnZlcnNlc3Npb24gc3ZyX3NlczsKKyNlbmRpZiAvKiBEUk9QQkVBUl9TRVJWRVIgKi8KKworI2lmZGVmIERST1BCRUFSX0NMSUVOVAorZXh0ZXJuIHN0cnVjdCBjbGllbnRzZXNzaW9uIGNsaV9zZXM7CisjZW5kaWYgLyogRFJPUEJFQVJfQ0xJRU5UICovCisKKyNlbmRpZiAvKiBfU0VTU0lPTl9IXyAqLwpkaWZmIC0tZ2l0IGEvc2lnbmtleS5jIGIvc2lnbmtleS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZWY1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdua2V5LmMKQEAgLTAsMCArMSw0OTEgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgInNpZ25rZXkuaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJzc2guaCIKKworLyogbWFsbG9jIGEgbmV3IHNpZ25fa2V5IGFuZCBzZXQgdGhlIGRzcyBhbmQgcnNhIGtleXMgdG8gTlVMTCAqLworc2lnbl9rZXkgKiBuZXdfc2lnbl9rZXkoKSB7CisKKwlzaWduX2tleSAqIHJldDsKKworCXJldCA9IChzaWduX2tleSopbV9tYWxsb2Moc2l6ZW9mKHNpZ25fa2V5KSk7CisjaWZkZWYgRFJPUEJFQVJfRFNTCisJcmV0LT5kc3NrZXkgPSBOVUxMOworI2VuZGlmCisjaWZkZWYgRFJPUEJFQVJfUlNBCisJcmV0LT5yc2FrZXkgPSBOVUxMOworI2VuZGlmCisJcmV0dXJuIHJldDsKKworfQorCisvKiBSZXR1cm5zICJzc2gtZHNzIiBvciAic3NoLXJzYSIgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gRXhpdHMgZmF0YWxseQorICogaWYgdGhlIHR5cGUgaXMgaW52YWxpZCAqLworY29uc3QgY2hhciogc2lnbmtleV9uYW1lX2Zyb21fdHlwZShpbnQgdHlwZSwgaW50ICpuYW1lbGVuKSB7CisKKyNpZmRlZiBEUk9QQkVBUl9SU0EKKwlpZiAodHlwZSA9PSBEUk9QQkVBUl9TSUdOS0VZX1JTQSkgeworCQkqbmFtZWxlbiA9IFNTSF9TSUdOS0VZX1JTQV9MRU47CisJCXJldHVybiBTU0hfU0lHTktFWV9SU0E7CisJfQorI2VuZGlmCisjaWZkZWYgRFJPUEJFQVJfRFNTCisJaWYgKHR5cGUgPT0gRFJPUEJFQVJfU0lHTktFWV9EU1MpIHsKKwkJKm5hbWVsZW4gPSBTU0hfU0lHTktFWV9EU1NfTEVOOworCQlyZXR1cm4gU1NIX1NJR05LRVlfRFNTOworCX0KKyNlbmRpZgorCWRyb3BiZWFyX2V4aXQoImJhZCBrZXkgdHlwZSAlZCIsIHR5cGUpOworCXJldHVybiBOVUxMOyAvKiBub3RyZWFjaGVkICovCit9CisKKy8qIFJldHVybnMgRFJPUEJFQVJfU0lHTktFWV9SU0EsIERST1BCRUFSX1NJR05LRVlfRFNTLCAKKyAqIG9yIERST1BCRUFSX1NJR05LRVlfTk9ORSAqLworaW50IHNpZ25rZXlfdHlwZV9mcm9tX25hbWUoY29uc3QgY2hhciogbmFtZSwgaW50IG5hbWVsZW4pIHsKKworI2lmZGVmIERST1BCRUFSX1JTQQorCWlmIChuYW1lbGVuID09IFNTSF9TSUdOS0VZX1JTQV9MRU4KKwkJCSYmIG1lbWNtcChuYW1lLCBTU0hfU0lHTktFWV9SU0EsIFNTSF9TSUdOS0VZX1JTQV9MRU4pID09IDApIHsKKwkJcmV0dXJuIERST1BCRUFSX1NJR05LRVlfUlNBOworCX0KKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX0RTUworCWlmIChuYW1lbGVuID09IFNTSF9TSUdOS0VZX0RTU19MRU4KKwkJCSYmIG1lbWNtcChuYW1lLCBTU0hfU0lHTktFWV9EU1MsIFNTSF9TSUdOS0VZX0RTU19MRU4pID09IDApIHsKKwkJcmV0dXJuIERST1BCRUFSX1NJR05LRVlfRFNTOworCX0KKyNlbmRpZgorCisJcmV0dXJuIERST1BCRUFSX1NJR05LRVlfTk9ORTsKK30KKworLyogcmV0dXJucyBEUk9QQkVBUl9TVUNDRVNTIG9uIHN1Y2Nlc3MsIERST1BCRUFSX0ZBSUxVUkUgb24gZmFpbC4KKyAqIHR5cGUgc2hvdWxkIGJlIHNldCBieSB0aGUgY2FsbGVyIHRvIHNwZWNpZnkgdGhlIHR5cGUgdG8gcmVhZCwgYW5kCisgKiBvbiByZXR1cm4gaXMgc2V0IHRvIHRoZSB0eXBlIHJlYWQgKHVzZWZ1bCB3aGVuIHR5cGUgPSBfQU5ZKSAqLworaW50IGJ1Zl9nZXRfcHViX2tleShidWZmZXIgKmJ1Ziwgc2lnbl9rZXkgKmtleSwgaW50ICp0eXBlKSB7CisKKwl1bnNpZ25lZCBjaGFyKiBpZGVudDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCBrZXl0eXBlOworCWludCByZXQgPSBEUk9QQkVBUl9GQUlMVVJFOworCisJVFJBQ0UoKCJlbnRlciBidWZfZ2V0X3B1Yl9rZXkiKSkKKworCWlkZW50ID0gYnVmX2dldHN0cmluZyhidWYsICZsZW4pOworCWtleXR5cGUgPSBzaWdua2V5X3R5cGVfZnJvbV9uYW1lKGlkZW50LCBsZW4pOworCW1fZnJlZShpZGVudCk7CisKKwlpZiAoKnR5cGUgIT0gRFJPUEJFQVJfU0lHTktFWV9BTlkgJiYgKnR5cGUgIT0ga2V5dHlwZSkgeworCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9CisKKwkqdHlwZSA9IGtleXR5cGU7CisKKwkvKiBSZXdpbmQgdGhlIGJ1ZmZlciBiYWNrIGJlZm9yZSAic3NoLXJzYSIgZXRjICovCisJYnVmX2luY3Jwb3MoYnVmLCAtbGVuIC0gNCk7CisKKyNpZmRlZiBEUk9QQkVBUl9EU1MKKwlpZiAoa2V5dHlwZSA9PSBEUk9QQkVBUl9TSUdOS0VZX0RTUykgeworCQlkc3Nfa2V5X2ZyZWUoa2V5LT5kc3NrZXkpOworCQlrZXktPmRzc2tleSA9IChkc3Nfa2V5KiltX21hbGxvYyhzaXplb2YoZHNzX2tleSkpOworCQlyZXQgPSBidWZfZ2V0X2Rzc19wdWJfa2V5KGJ1Ziwga2V5LT5kc3NrZXkpOworCQlpZiAocmV0ID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJCW1fZnJlZShrZXktPmRzc2tleSk7CisJCX0KKwl9CisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl9SU0EKKwlpZiAoa2V5dHlwZSA9PSBEUk9QQkVBUl9TSUdOS0VZX1JTQSkgeworCQlyc2Ffa2V5X2ZyZWUoa2V5LT5yc2FrZXkpOworCQlrZXktPnJzYWtleSA9IChyc2Ffa2V5KiltX21hbGxvYyhzaXplb2YocnNhX2tleSkpOworCQlyZXQgPSBidWZfZ2V0X3JzYV9wdWJfa2V5KGJ1Ziwga2V5LT5yc2FrZXkpOworCQlpZiAocmV0ID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJCW1fZnJlZShrZXktPnJzYWtleSk7CisJCX0KKwl9CisjZW5kaWYKKworCVRSQUNFKCgibGVhdmUgYnVmX2dldF9wdWJfa2V5IikpCisKKwlyZXR1cm4gcmV0OworCQorfQorCisvKiByZXR1cm5zIERST1BCRUFSX1NVQ0NFU1Mgb24gc3VjY2VzcywgRFJPUEJFQVJfRkFJTFVSRSBvbiBmYWlsLgorICogdHlwZSBzaG91bGQgYmUgc2V0IGJ5IHRoZSBjYWxsZXIgdG8gc3BlY2lmeSB0aGUgdHlwZSB0byByZWFkLCBhbmQKKyAqIG9uIHJldHVybiBpcyBzZXQgdG8gdGhlIHR5cGUgcmVhZCAodXNlZnVsIHdoZW4gdHlwZSA9IF9BTlkpICovCitpbnQgYnVmX2dldF9wcml2X2tleShidWZmZXIgKmJ1Ziwgc2lnbl9rZXkgKmtleSwgaW50ICp0eXBlKSB7CisKKwl1bnNpZ25lZCBjaGFyKiBpZGVudDsKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCBrZXl0eXBlOworCWludCByZXQgPSBEUk9QQkVBUl9GQUlMVVJFOworCisJVFJBQ0UoKCJlbnRlciBidWZfZ2V0X3ByaXZfa2V5IikpCisKKwlpZGVudCA9IGJ1Zl9nZXRzdHJpbmcoYnVmLCAmbGVuKTsKKwlrZXl0eXBlID0gc2lnbmtleV90eXBlX2Zyb21fbmFtZShpZGVudCwgbGVuKTsKKwltX2ZyZWUoaWRlbnQpOworCisJaWYgKCp0eXBlICE9IERST1BCRUFSX1NJR05LRVlfQU5ZICYmICp0eXBlICE9IGtleXR5cGUpIHsKKwkJVFJBQ0UoKCJ3cm9uZyBrZXkgdHlwZTogJWQgJWQiLCAqdHlwZSwga2V5dHlwZSkpCisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0KKworCSp0eXBlID0ga2V5dHlwZTsKKworCS8qIFJld2luZCB0aGUgYnVmZmVyIGJhY2sgYmVmb3JlICJzc2gtcnNhIiBldGMgKi8KKwlidWZfaW5jcnBvcyhidWYsIC1sZW4gLSA0KTsKKworI2lmZGVmIERST1BCRUFSX0RTUworCWlmIChrZXl0eXBlID09IERST1BCRUFSX1NJR05LRVlfRFNTKSB7CisJCWRzc19rZXlfZnJlZShrZXktPmRzc2tleSk7CisJCWtleS0+ZHNza2V5ID0gKGRzc19rZXkqKW1fbWFsbG9jKHNpemVvZihkc3Nfa2V5KSk7CisJCXJldCA9IGJ1Zl9nZXRfZHNzX3ByaXZfa2V5KGJ1Ziwga2V5LT5kc3NrZXkpOworCQlpZiAocmV0ID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJCW1fZnJlZShrZXktPmRzc2tleSk7CisJCX0KKwl9CisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl9SU0EKKwlpZiAoa2V5dHlwZSA9PSBEUk9QQkVBUl9TSUdOS0VZX1JTQSkgeworCQlyc2Ffa2V5X2ZyZWUoa2V5LT5yc2FrZXkpOworCQlrZXktPnJzYWtleSA9IChyc2Ffa2V5KiltX21hbGxvYyhzaXplb2YocnNhX2tleSkpOworCQlyZXQgPSBidWZfZ2V0X3JzYV9wcml2X2tleShidWYsIGtleS0+cnNha2V5KTsKKwkJaWYgKHJldCA9PSBEUk9QQkVBUl9GQUlMVVJFKSB7CisJCQltX2ZyZWUoa2V5LT5yc2FrZXkpOworCQl9CisJfQorI2VuZGlmCisKKwlUUkFDRSgoImxlYXZlIGJ1Zl9nZXRfcHJpdl9rZXkiKSkKKworCXJldHVybiByZXQ7CisJCit9CisKKy8qIHR5cGUgaXMgZWl0aGVyIERST1BCRUFSX1NJR05LRVlfRFNTIG9yIERST1BCRUFSX1NJR05LRVlfUlNBICovCit2b2lkIGJ1Zl9wdXRfcHViX2tleShidWZmZXIqIGJ1Ziwgc2lnbl9rZXkgKmtleSwgaW50IHR5cGUpIHsKKworCWJ1ZmZlciAqcHVia2V5czsKKworCVRSQUNFKCgiZW50ZXIgYnVmX3B1dF9wdWJfa2V5IikpCisJcHVia2V5cyA9IGJ1Zl9uZXcoTUFYX1BVQktFWV9TSVpFKTsKKwkKKyNpZmRlZiBEUk9QQkVBUl9EU1MKKwlpZiAodHlwZSA9PSBEUk9QQkVBUl9TSUdOS0VZX0RTUykgeworCQlidWZfcHV0X2Rzc19wdWJfa2V5KHB1YmtleXMsIGtleS0+ZHNza2V5KTsKKwl9CisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl9SU0EKKwlpZiAodHlwZSA9PSBEUk9QQkVBUl9TSUdOS0VZX1JTQSkgeworCQlidWZfcHV0X3JzYV9wdWJfa2V5KHB1YmtleXMsIGtleS0+cnNha2V5KTsKKwl9CisjZW5kaWYKKwlpZiAocHVia2V5cy0+bGVuID09IDApIHsKKwkJZHJvcGJlYXJfZXhpdCgiYmFkIGtleSB0eXBlcyBpbiBidWZfcHV0X3B1Yl9rZXkiKTsKKwl9CisKKwlidWZfc2V0cG9zKHB1YmtleXMsIDApOworCWJ1Zl9wdXRzdHJpbmcoYnVmLCBidWZfZ2V0cHRyKHB1YmtleXMsIHB1YmtleXMtPmxlbiksCisJCQlwdWJrZXlzLT5sZW4pOworCQorCWJ1Zl9mcmVlKHB1YmtleXMpOworCVRSQUNFKCgibGVhdmUgYnVmX3B1dF9wdWJfa2V5IikpCit9CisKKy8qIHR5cGUgaXMgZWl0aGVyIERST1BCRUFSX1NJR05LRVlfRFNTIG9yIERST1BCRUFSX1NJR05LRVlfUlNBICovCit2b2lkIGJ1Zl9wdXRfcHJpdl9rZXkoYnVmZmVyKiBidWYsIHNpZ25fa2V5ICprZXksIGludCB0eXBlKSB7CisKKwlUUkFDRSgoImVudGVyIGJ1Zl9wdXRfcHJpdl9rZXkiKSkKKwlUUkFDRSgoInR5cGUgaXMgJWQiLCB0eXBlKSkKKworI2lmZGVmIERST1BCRUFSX0RTUworCWlmICh0eXBlID09IERST1BCRUFSX1NJR05LRVlfRFNTKSB7CisJCWJ1Zl9wdXRfZHNzX3ByaXZfa2V5KGJ1Ziwga2V5LT5kc3NrZXkpOworCVRSQUNFKCgibGVhdmUgYnVmX3B1dF9wcml2X2tleTogZHNzIGRvbmUiKSkKKwlyZXR1cm47CisJfQorI2VuZGlmCisjaWZkZWYgRFJPUEJFQVJfUlNBCisJaWYgKHR5cGUgPT0gRFJPUEJFQVJfU0lHTktFWV9SU0EpIHsKKwkJYnVmX3B1dF9yc2FfcHJpdl9rZXkoYnVmLCBrZXktPnJzYWtleSk7CisJVFJBQ0UoKCJsZWF2ZSBidWZfcHV0X3ByaXZfa2V5OiByc2EgZG9uZSIpKQorCXJldHVybjsKKwl9CisjZW5kaWYKKwlkcm9wYmVhcl9leGl0KCJiYWQga2V5IHR5cGVzIGluIHB1dCBwdWIga2V5Iik7Cit9CisKK3ZvaWQgc2lnbl9rZXlfZnJlZShzaWduX2tleSAqa2V5KSB7CisKKwlUUkFDRSgoImVudGVyIHNpZ25fa2V5X2ZyZWUiKSkKKworI2lmZGVmIERST1BCRUFSX0RTUworCWRzc19rZXlfZnJlZShrZXktPmRzc2tleSk7CisJa2V5LT5kc3NrZXkgPSBOVUxMOworI2VuZGlmCisjaWZkZWYgRFJPUEJFQVJfUlNBCisJcnNhX2tleV9mcmVlKGtleS0+cnNha2V5KTsKKwlrZXktPnJzYWtleSA9IE5VTEw7CisjZW5kaWYKKworCW1fZnJlZShrZXkpOworCVRSQUNFKCgibGVhdmUgc2lnbl9rZXlfZnJlZSIpKQorfQorCitzdGF0aWMgY2hhciBoZXhkaWcodW5zaWduZWQgY2hhciB4KSB7CisKKwlpZiAoeCA+IDB4ZikKKwkJcmV0dXJuICdYJzsKKworCWlmICh4IDwgMTApCisJCXJldHVybiAnMCcgKyB4OworCWVsc2UKKwkJcmV0dXJuICdhJyArIHggLSAxMDsKK30KKworLyogU2luY2Ugd2UncmUgbm90IHN1cmUgaWYgd2UnbGwgaGF2ZSBtZDUgb3Igc2hhMSwgd2UgcHJlc2VudCBib3RoLgorICogTUQ1IGlzIHVzZWQgaW4gcHJlZmVyZW5jZSwgYnV0IHNoYTEgY291bGQgc3RpbGwgYmUgdXNlZnVsICovCisjaWZkZWYgRFJPUEJFQVJfTUQ1X0hNQUMKK3N0YXRpYyBjaGFyICogc2lnbl9rZXlfbWQ1X2ZpbmdlcnByaW50KHVuc2lnbmVkIGNoYXIqIGtleWJsb2IsCisJCXVuc2lnbmVkIGludCBrZXlibG9ibGVuKSB7CisKKwljaGFyICogcmV0OworCWhhc2hfc3RhdGUgaHM7CisJdW5zaWduZWQgY2hhciBoYXNoW01ENV9IQVNIX1NJWkVdOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBidWZsZW47CisKKwltZDVfaW5pdCgmaHMpOworCisJLyogc2tpcCB0aGUgc2l6ZSBpbnQgb2YgdGhlIHN0cmluZyAtIHRoaXMgaXMgYSBiaXQgbWVzc3kgKi8KKwltZDVfcHJvY2VzcygmaHMsIGtleWJsb2IsIGtleWJsb2JsZW4pOworCisJbWQ1X2RvbmUoJmhzLCBoYXNoKTsKKworCS8qICJtZDUgaGV4ZmluZ2VycHJpbnRoZXJlXDAiLCBlYWNoIGhleCBkaWdpdCBpcyAiQUI6IiBldGMgKi8KKwlidWZsZW4gPSA0ICsgMypNRDVfSEFTSF9TSVpFOworCXJldCA9IChjaGFyKiltX21hbGxvYyhidWZsZW4pOworCisJbWVtc2V0KHJldCwgJ1onLCBidWZsZW4pOworCXN0cmNweShyZXQsICJtZDUgIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUQ1X0hBU0hfU0laRTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBwb3MgPSA0ICsgaSozOworCQlyZXRbcG9zXSA9IGhleGRpZyhoYXNoW2ldID4+IDQpOworCQlyZXRbcG9zKzFdID0gaGV4ZGlnKGhhc2hbaV0gJiAweDBmKTsKKwkJcmV0W3BvcysyXSA9ICc6JzsKKwl9CisJcmV0W2J1Zmxlbi0xXSA9IDB4MDsKKworCXJldHVybiByZXQ7Cit9CisKKyNlbHNlIC8qIHVzZSBTSEExIHJhdGhlciB0aGFuIE1ENSBmb3IgZmluZ2VycHJpbnQgKi8KK3N0YXRpYyBjaGFyICogc2lnbl9rZXlfc2hhMV9maW5nZXJwcmludCh1bnNpZ25lZCBjaGFyKiBrZXlibG9iLCAKKwkJdW5zaWduZWQgaW50IGtleWJsb2JsZW4pIHsKKworCWNoYXIgKiByZXQ7CisJaGFzaF9zdGF0ZSBoczsKKwl1bnNpZ25lZCBjaGFyIGhhc2hbU0hBMV9IQVNIX1NJWkVdOworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBidWZsZW47CisKKwlzaGExX2luaXQoJmhzKTsKKworCS8qIHNraXAgdGhlIHNpemUgaW50IG9mIHRoZSBzdHJpbmcgLSB0aGlzIGlzIGEgYml0IG1lc3N5ICovCisJc2hhMV9wcm9jZXNzKCZocywga2V5YmxvYiwga2V5YmxvYmxlbik7CisKKwlzaGExX2RvbmUoJmhzLCBoYXNoKTsKKworCS8qICJzaGExIGhleGZpbmdlcnByaW50aGVyZVwwIiwgZWFjaCBoZXggZGlnaXQgaXMgIkFCOiIgZXRjICovCisJYnVmbGVuID0gNSArIDMqU0hBMV9IQVNIX1NJWkU7CisJcmV0ID0gKGNoYXIqKW1fbWFsbG9jKGJ1Zmxlbik7CisKKwlzdHJjcHkocmV0LCAic2hhMSAiKTsKKworCWZvciAoaSA9IDA7IGkgPCBTSEExX0hBU0hfU0laRTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBwb3MgPSA1ICsgMyppOworCQlyZXRbcG9zXSA9IGhleGRpZyhoYXNoW2ldID4+IDQpOworCQlyZXRbcG9zKzFdID0gaGV4ZGlnKGhhc2hbaV0gJiAweDBmKTsKKwkJcmV0W3BvcysyXSA9ICc6JzsKKwl9CisJcmV0W2J1Zmxlbi0xXSA9IDB4MDsKKworCXJldHVybiByZXQ7Cit9CisKKyNlbmRpZiAvKiBNRDUvU0hBMSBzd2l0Y2ggKi8KKworLyogVGhpcyB3aWxsIHJldHVybiBhIGZyZXNobHkgbWFsbG9jZWQgc3RyaW5nLCBjb250YWluaW5nIGEgZmluZ2VycHJpbnQKKyAqIGluIGVpdGhlciBzaGExIG9yIG1kNSAqLworY2hhciAqIHNpZ25fa2V5X2ZpbmdlcnByaW50KHVuc2lnbmVkIGNoYXIqIGtleWJsb2IsIHVuc2lnbmVkIGludCBrZXlibG9ibGVuKSB7CisKKyNpZmRlZiBEUk9QQkVBUl9NRDVfSE1BQworCXJldHVybiBzaWduX2tleV9tZDVfZmluZ2VycHJpbnQoa2V5YmxvYiwga2V5YmxvYmxlbik7CisjZWxzZQorCXJldHVybiBzaWduX2tleV9zaGExX2ZpbmdlcnByaW50KGtleWJsb2IsIGtleWJsb2JsZW4pOworI2VuZGlmCit9CisKK3ZvaWQgYnVmX3B1dF9zaWduKGJ1ZmZlciogYnVmLCBzaWduX2tleSAqa2V5LCBpbnQgdHlwZSwgCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pIHsKKworCWJ1ZmZlciAqc2lnYmxvYjsKKworCXNpZ2Jsb2IgPSBidWZfbmV3KE1BWF9QVUJLRVlfU0laRSk7CisKKyNpZmRlZiBEUk9QQkVBUl9EU1MKKwlpZiAodHlwZSA9PSBEUk9QQkVBUl9TSUdOS0VZX0RTUykgeworCQlidWZfcHV0X2Rzc19zaWduKHNpZ2Jsb2IsIGtleS0+ZHNza2V5LCBkYXRhLCBsZW4pOworCX0KKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX1JTQQorCWlmICh0eXBlID09IERST1BCRUFSX1NJR05LRVlfUlNBKSB7CisJCWJ1Zl9wdXRfcnNhX3NpZ24oc2lnYmxvYiwga2V5LT5yc2FrZXksIGRhdGEsIGxlbik7CisJfQorI2VuZGlmCisJaWYgKHNpZ2Jsb2ItPmxlbiA9PSAwKSB7CisJCWRyb3BiZWFyX2V4aXQoIm5vbi1tYXRjaGluZyBzaWduaW5nIHR5cGUiKTsKKwl9CisKKwlidWZfc2V0cG9zKHNpZ2Jsb2IsIDApOworCWJ1Zl9wdXRzdHJpbmcoYnVmLCBidWZfZ2V0cHRyKHNpZ2Jsb2IsIHNpZ2Jsb2ItPmxlbiksCisJCQlzaWdibG9iLT5sZW4pOworCQkJCisJYnVmX2ZyZWUoc2lnYmxvYik7CisKK30KKworI2lmZGVmIERST1BCRUFSX1NJR05LRVlfVkVSSUZZCisvKiBSZXR1cm4gRFJPUEJFQVJfU1VDQ0VTUyBvciBEUk9QQkVBUl9GQUlMVVJFLgorICogSWYgRkFJTFVSRSBpcyByZXR1cm5lZCwgdGhlIHBvc2l0aW9uIG9mCisgKiBidWYgaXMgdW5kZWZpbmVkLiBJZiBTVUNDRVNTIGlzIHJldHVybmVkLCBidWYgd2lsbCBiZSBwb3NpdGlvbmVkIGFmdGVyIHRoZQorICogc2lnbmF0dXJlIGJsb2IgKi8KK2ludCBidWZfdmVyaWZ5KGJ1ZmZlciAqIGJ1Ziwgc2lnbl9rZXkgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJdW5zaWduZWQgaW50IGxlbikgeworCQorCXVuc2lnbmVkIGludCBibG9ibGVuOworCXVuc2lnbmVkIGNoYXIgKiBpZGVudCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGlkZW50bGVuID0gMDsKKworCVRSQUNFKCgiZW50ZXIgYnVmX3ZlcmlmeSIpKQorCisJYmxvYmxlbiA9IGJ1Zl9nZXRpbnQoYnVmKTsKKwlpZGVudCA9IGJ1Zl9nZXRzdHJpbmcoYnVmLCAmaWRlbnRsZW4pOworCisjaWZkZWYgRFJPUEJFQVJfRFNTCisJaWYgKGJsb2JsZW4gPT0gRFNTX1NJR05BVFVSRV9TSVpFICYmCisJCQltZW1jbXAoaWRlbnQsIFNTSF9TSUdOS0VZX0RTUywgaWRlbnRsZW4pID09IDApIHsKKwkJbV9mcmVlKGlkZW50KTsKKwkJaWYgKGtleS0+ZHNza2V5ID09IE5VTEwpIHsKKwkJCWRyb3BiZWFyX2V4aXQoIm5vIGRzcyBrZXkgdG8gdmVyaWZ5IHNpZ25hdHVyZSIpOworCQl9CisJCXJldHVybiBidWZfZHNzX3ZlcmlmeShidWYsIGtleS0+ZHNza2V5LCBkYXRhLCBsZW4pOworCX0KKyNlbmRpZgorCisjaWZkZWYgRFJPUEJFQVJfUlNBCisJaWYgKG1lbWNtcChpZGVudCwgU1NIX1NJR05LRVlfUlNBLCBpZGVudGxlbikgPT0gMCkgeworCQltX2ZyZWUoaWRlbnQpOworCQlpZiAoa2V5LT5yc2FrZXkgPT0gTlVMTCkgeworCQkJZHJvcGJlYXJfZXhpdCgibm8gcnNhIGtleSB0byB2ZXJpZnkgc2lnbmF0dXJlIik7CisJCX0KKwkJcmV0dXJuIGJ1Zl9yc2FfdmVyaWZ5KGJ1Ziwga2V5LT5yc2FrZXksIGRhdGEsIGxlbik7CisJfQorI2VuZGlmCisKKwltX2ZyZWUoaWRlbnQpOworCWRyb3BiZWFyX2V4aXQoIm5vbi1tYXRjaGluZyBzaWduaW5nIHR5cGUiKTsKKwlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKK30KKyNlbmRpZiAvKiBEUk9QQkVBUl9TSUdOS0VZX1ZFUklGWSAqLworCisjaWZkZWYgRFJPUEJFQVJfS0VZX0xJTkVTIC8qIGllIHdlJ3JlIHVzaW5nIGF1dGhvcml6ZWRfa2V5cyBvciBrbm93bl9ob3N0cyAqLworCisvKiBSZXR1cm5zIERST1BCRUFSX1NVQ0NFU1Mgb3IgRFJPUEJFQVJfRkFJTFVSRSB3aGVuIGdpdmVuIGEgYnVmZmVyIGNvbnRhaW5pbmcKKyAqIGEga2V5LCBhIGtleSwgYW5kIGEgdHlwZS4gVGhlIGJ1ZmZlciBpcyBwb3NpdGlvbmVkIGF0IHRoZSBzdGFydCBvZiB0aGUKKyAqIGJhc2U2NCBkYXRhLCBhbmQgY29udGFpbnMgbm8gdHJhaWxpbmcgZGF0YSAqLworLyogSWYgZmluZ2VycHJpbnQgaXMgbm9uLU5VTEwsIGl0IHdpbGwgYmUgc2V0IHRvIGEgbWFsbG9jKCllZCBmaW5nZXJwcmludAorICAgb2YgdGhlIGtleSBpZiBpdCBpcyBzdWNjZXNzZnVsbHkgZGVjb2RlZCAqLworaW50IGNtcF9iYXNlNjRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGtleWJsb2IsIHVuc2lnbmVkIGludCBrZXlibG9ibGVuLCAKKwkJCQkJY29uc3QgdW5zaWduZWQgY2hhciogYWxnb25hbWUsIHVuc2lnbmVkIGludCBhbGdvbGVuLCAKKwkJCQkJYnVmZmVyICogbGluZSwgY2hhciAqKiBmaW5nZXJwcmludCkgeworCisJYnVmZmVyICogZGVjb2Rla2V5ID0gTlVMTDsKKwlpbnQgcmV0ID0gRFJPUEJFQVJfRkFJTFVSRTsKKwl1bnNpZ25lZCBpbnQgbGVuLCBmaWxlYWxnb2xlbjsKKwl1bnNpZ25lZCBsb25nIGRlY29kZWtleWxlbjsKKwl1bnNpZ25lZCBjaGFyKiBmaWxlYWxnbyA9IE5VTEw7CisKKwkvKiBub3cgd2UgaGF2ZSB0aGUgYWN0dWFsIGRhdGEgKi8KKwlsZW4gPSBsaW5lLT5sZW4gLSBsaW5lLT5wb3M7CisJZGVjb2Rla2V5bGVuID0gbGVuICogMjsgLyogYmlnIHRvIGJlIHNhZmUgKi8KKwlkZWNvZGVrZXkgPSBidWZfbmV3KGRlY29kZWtleWxlbik7CisKKwlpZiAoYmFzZTY0X2RlY29kZShidWZfZ2V0cHRyKGxpbmUsIGxlbiksIGxlbiwKKwkJCQlidWZfZ2V0d3JpdGVwdHIoZGVjb2Rla2V5LCBkZWNvZGVrZXktPnNpemUpLAorCQkJCSZkZWNvZGVrZXlsZW4pICE9IENSWVBUX09LKSB7CisJCVRSQUNFKCgiY2hlY2twdWJrZXk6IGJhc2U2NCBkZWNvZGUgZmFpbGVkIikpCisJCWdvdG8gb3V0OworCX0KKwlUUkFDRSgoImNoZWNrcHVia2V5OiBiYXNlNjRfZGVjb2RlIHN1Y2Nlc3MiKSkKKwlidWZfaW5jcmxlbihkZWNvZGVrZXksIGRlY29kZWtleWxlbik7CisJCisJaWYgKGZpbmdlcnByaW50KSB7CisJCSpmaW5nZXJwcmludCA9IHNpZ25fa2V5X2ZpbmdlcnByaW50KGJ1Zl9nZXRwdHIoZGVjb2Rla2V5LCBkZWNvZGVrZXlsZW4pLAorCQkJCQkJCQkJCQlkZWNvZGVrZXlsZW4pOworCX0KKwkKKwkvKiBjb21wYXJlIHRoZSBrZXlzICovCisJaWYgKCAoIGRlY29kZWtleWxlbiAhPSBrZXlibG9ibGVuICkKKwkJCXx8IG1lbWNtcCggYnVmX2dldHB0cihkZWNvZGVrZXksIGRlY29kZWtleS0+bGVuKSwKKwkJCQkJCWtleWJsb2IsIGRlY29kZWtleS0+bGVuKSAhPSAwKSB7CisJCVRSQUNFKCgiY2hlY2twdWJrZXk6IGNvbXBhcmUgZmFpbGVkIikpCisJCWdvdG8gb3V0OworCX0KKworCS8qIC4uLiBhbmQgYWxzbyBjaGVjayB0aGF0IHRoZSBhbGdvIHNwZWNpZmllZCBhbmQgdGhlIGFsZ28gaW4gdGhlIGtleQorCSAqIGl0c2VsZiBtYXRjaCAqLworCWZpbGVhbGdvbGVuID0gYnVmX2dldGludChkZWNvZGVrZXkpOworCWZpbGVhbGdvID0gYnVmX2dldHB0cihkZWNvZGVrZXksIGZpbGVhbGdvbGVuKTsKKwlpZiAoZmlsZWFsZ29sZW4gIT0gYWxnb2xlbiB8fCBtZW1jbXAoZmlsZWFsZ28sIGFsZ29uYW1lLCBhbGdvbGVuKSAhPSAwKSB7CisJCVRSQUNFKCgiY2hlY2twdWJrZXk6IGFsZ28gbWF0Y2ggZmFpbGVkIikpIAorCQlnb3RvIG91dDsKKwl9CisKKwkvKiBBbGwgY2hlY2tzIHBhc3NlZCAqLworCXJldCA9IERST1BCRUFSX1NVQ0NFU1M7CisKK291dDoKKwlidWZfZnJlZShkZWNvZGVrZXkpOworCWRlY29kZWtleSA9IE5VTEw7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc2lnbmtleS5oIGIvc2lnbmtleS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwMzhiMmQKLS0tIC9kZXYvbnVsbAorKysgYi9zaWdua2V5LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2lmbmRlZiBfU0lHTktFWV9IXworI2RlZmluZSBfU0lHTktFWV9IXworCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAiZHNzLmgiCisjaW5jbHVkZSAicnNhLmgiCisKK3N0cnVjdCBTSUdOX2tleSB7CisKKyNpZmRlZiBEUk9QQkVBUl9EU1MKKwlkc3Nfa2V5ICogZHNza2V5OworI2VuZGlmCisjaWZkZWYgRFJPUEJFQVJfUlNBCisJcnNhX2tleSAqIHJzYWtleTsKKyNlbmRpZgorfTsKKwordHlwZWRlZiBzdHJ1Y3QgU0lHTl9rZXkgc2lnbl9rZXk7CisKK3NpZ25fa2V5ICogbmV3X3NpZ25fa2V5KCk7Citjb25zdCBjaGFyKiBzaWdua2V5X25hbWVfZnJvbV90eXBlKGludCB0eXBlLCBpbnQgKm5hbWVsZW4pOworaW50IHNpZ25rZXlfdHlwZV9mcm9tX25hbWUoY29uc3QgY2hhciogbmFtZSwgaW50IG5hbWVsZW4pOworaW50IGJ1Zl9nZXRfcHViX2tleShidWZmZXIgKmJ1Ziwgc2lnbl9rZXkgKmtleSwgaW50ICp0eXBlKTsKK2ludCBidWZfZ2V0X3ByaXZfa2V5KGJ1ZmZlciogYnVmLCBzaWduX2tleSAqa2V5LCBpbnQgKnR5cGUpOwordm9pZCBidWZfcHV0X3B1Yl9rZXkoYnVmZmVyKiBidWYsIHNpZ25fa2V5ICprZXksIGludCB0eXBlKTsKK3ZvaWQgYnVmX3B1dF9wcml2X2tleShidWZmZXIqIGJ1Ziwgc2lnbl9rZXkgKmtleSwgaW50IHR5cGUpOwordm9pZCBzaWduX2tleV9mcmVlKHNpZ25fa2V5ICprZXkpOwordm9pZCBidWZfcHV0X3NpZ24oYnVmZmVyKiBidWYsIHNpZ25fa2V5ICprZXksIGludCB0eXBlLCAKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwgdW5zaWduZWQgaW50IGxlbik7CisjaWZkZWYgRFJPUEJFQVJfU0lHTktFWV9WRVJJRlkKK2ludCBidWZfdmVyaWZ5KGJ1ZmZlciAqIGJ1Ziwgc2lnbl9rZXkgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSwKKwkJdW5zaWduZWQgaW50IGxlbik7CitjaGFyICogc2lnbl9rZXlfZmluZ2VycHJpbnQodW5zaWduZWQgY2hhcioga2V5YmxvYiwgdW5zaWduZWQgaW50IGtleWJsb2JsZW4pOworI2VuZGlmCitpbnQgY21wX2Jhc2U2NF9rZXkoY29uc3QgdW5zaWduZWQgY2hhcioga2V5YmxvYiwgdW5zaWduZWQgaW50IGtleWJsb2JsZW4sIAorCQkJCQljb25zdCB1bnNpZ25lZCBjaGFyKiBhbGdvbmFtZSwgdW5zaWduZWQgaW50IGFsZ29sZW4sIAorCQkJCQlidWZmZXIgKiBsaW5lLCBjaGFyICoqIGZpbmdlcnByaW50KTsKKworI2VuZGlmIC8qIF9TSUdOS0VZX0hfICovCmRpZmYgLS1naXQgYS9zc2guaCBiL3NzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjUxYmYKLS0tIC9kZXYvbnVsbAorKysgYi9zc2guaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB2YXJpb3VzIG51bWJlcnMgaW4gdGhlIHByb3RvY29sICovCisKKworLyogbWVzc2FnZSBudW1iZXJzICovCisjZGVmaW5lIFNTSF9NU0dfRElTQ09OTkVDVCAgICAgICAgICAgICAxCisjZGVmaW5lIFNTSF9NU0dfSUdOT1JFICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFNTSF9NU0dfVU5JTVBMRU1FTlRFRCAgICAgICAgICAzCisjZGVmaW5lIFNTSF9NU0dfREVCVUcgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIFNTSF9NU0dfU0VSVklDRV9SRVFVRVNUICAgICAgICA1CisjZGVmaW5lIFNTSF9NU0dfU0VSVklDRV9BQ0NFUFQgICAgICAgICA2CisjZGVmaW5lIFNTSF9NU0dfS0VYSU5JVCAgICAgICAgICAgICAgICAyMAorI2RlZmluZSBTU0hfTVNHX05FV0tFWVMgICAgICAgICAgICAgICAgMjEKKyNkZWZpbmUgU1NIX01TR19LRVhESF9JTklUICAgICAgICAgICAgIDMwCisjZGVmaW5lIFNTSF9NU0dfS0VYREhfUkVQTFkgICAgICAgICAgICAzMQorCisvKiB1c2VyYXV0aCBtZXNzYWdlIG51bWJlcnMgKi8KKyNkZWZpbmUgU1NIX01TR19VU0VSQVVUSF9SRVFVRVNUICAgICAgICAgICAgNTAKKyNkZWZpbmUgU1NIX01TR19VU0VSQVVUSF9GQUlMVVJFICAgICAgICAgICAgNTEKKyNkZWZpbmUgU1NIX01TR19VU0VSQVVUSF9TVUNDRVNTICAgICAgICAgICAgNTIKKyNkZWZpbmUgU1NIX01TR19VU0VSQVVUSF9CQU5ORVIgICAgICAgICAgICAgNTMKKworLyogcGFja2V0cyA2MC03OSBhcmUgbWV0aG9kLXNwZWNpZmljLCBhcmVuJ3Qgb25lLW9uZSBtYXBwaW5nICovCisjZGVmaW5lIFNTSF9NU0dfVVNFUkFVVEhfU1BFQ0lGSUNfNjAgICA2MAorCisjZGVmaW5lIFNTSF9NU0dfVVNFUkFVVEhfUEFTU1dEX0NIQU5HRVJFUSAgIDYwCisKKyNkZWZpbmUgU1NIX01TR19VU0VSQVVUSF9QS19PSwkJCQk2MAorCisvKiBrZXlib2FyZCBpbnRlcmFjdGl2ZSBhdXRoICovCisjZGVmaW5lIFNTSF9NU0dfVVNFUkFVVEhfSU5GT19SRVFVRVNUICAgICAgICAgICA2MAorI2RlZmluZSBTU0hfTVNHX1VTRVJBVVRIX0lORk9fUkVTUE9OU0UgICAgICAgICAgNjEKKworCisvKiBJZiBhZGRpbmcgbnVtYmVycyBoZXJlLCBjaGVjayBNQVhfVU5BVVRIX1BBQ0tFVF9UWVBFIGluIHByb2Nlc3MtcGFja2V0LmMKKyAqIGlzIHN0aWxsIHZhbGlkICovCisKKy8qIGNvbm5lY3QgbWVzc2FnZSBudW1iZXJzICovCisjZGVmaW5lIFNTSF9NU0dfR0xPQkFMX1JFUVVFU1QgICAgICAgICAgICAgICAgICA4MAorI2RlZmluZSBTU0hfTVNHX1JFUVVFU1RfU1VDQ0VTUyAgICAgICAgICAgICAgICAgODEKKyNkZWZpbmUgU1NIX01TR19SRVFVRVNUX0ZBSUxVUkUgICAgICAgICAgICAgICAgIDgyCisjZGVmaW5lIFNTSF9NU0dfQ0hBTk5FTF9PUEVOICAgICAgICAgICAgICAgICAgICA5MAorI2RlZmluZSBTU0hfTVNHX0NIQU5ORUxfT1BFTl9DT05GSVJNQVRJT04gICAgICAgOTEgCisjZGVmaW5lIFNTSF9NU0dfQ0hBTk5FTF9PUEVOX0ZBSUxVUkUgICAgICAgICAgICA5MgorI2RlZmluZSBTU0hfTVNHX0NIQU5ORUxfV0lORE9XX0FESlVTVCAgICAgICAgICAgOTMKKyNkZWZpbmUgU1NIX01TR19DSEFOTkVMX0RBVEEgICAgICAgICAgICAgICAgICAgIDk0CisjZGVmaW5lIFNTSF9NU0dfQ0hBTk5FTF9FWFRFTkRFRF9EQVRBICAgICAgICAgICA5NQorI2RlZmluZSBTU0hfTVNHX0NIQU5ORUxfRU9GICAgICAgICAgICAgICAgICAgICAgOTYKKyNkZWZpbmUgU1NIX01TR19DSEFOTkVMX0NMT1NFICAgICAgICAgICAgICAgICAgIDk3CisjZGVmaW5lIFNTSF9NU0dfQ0hBTk5FTF9SRVFVRVNUICAgICAgICAgICAgICAgICA5OAorI2RlZmluZSBTU0hfTVNHX0NIQU5ORUxfU1VDQ0VTUyAgICAgICAgICAgICAgICAgOTkKKyNkZWZpbmUgU1NIX01TR19DSEFOTkVMX0ZBSUxVUkUgICAgICAgICAgICAgICAgIDEwMAorCisvKiBleHRlbmRlZCBkYXRhIHR5cGVzICovCisjZGVmaW5lIFNTSF9FWFRFTkRFRF9EQVRBX1NUREVSUgkxCisKKy8qIGRpc2Nvbm5lY3QgY29kZXMgKi8KKyNkZWZpbmUgU1NIX0RJU0NPTk5FQ1RfSE9TVF9OT1RfQUxMT1dFRF9UT19DT05ORUNUICAgICAgMQorI2RlZmluZSBTU0hfRElTQ09OTkVDVF9QUk9UT0NPTF9FUlJPUiAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIFNTSF9ESVNDT05ORUNUX0tFWV9FWENIQU5HRV9GQUlMRUQgICAgICAgICAgICAgIDMKKyNkZWZpbmUgU1NIX0RJU0NPTk5FQ1RfUkVTRVJWRUQgICAgICAgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBTU0hfRElTQ09OTkVDVF9NQUNfRVJST1IgICAgICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFNTSF9ESVNDT05ORUNUX0NPTVBSRVNTSU9OX0VSUk9SICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgU1NIX0RJU0NPTk5FQ1RfU0VSVklDRV9OT1RfQVZBSUxBQkxFICAgICAgICAgICAgNworI2RlZmluZSBTU0hfRElTQ09OTkVDVF9QUk9UT0NPTF9WRVJTSU9OX05PVF9TVVBQT1JURUQgICA4CisjZGVmaW5lIFNTSF9ESVNDT05ORUNUX0hPU1RfS0VZX05PVF9WRVJJRklBQkxFICAgICAgICAgIDkKKyNkZWZpbmUgU1NIX0RJU0NPTk5FQ1RfQ09OTkVDVElPTl9MT1NUICAgICAgICAgICAgICAgICAxMAorI2RlZmluZSBTU0hfRElTQ09OTkVDVF9CWV9BUFBMSUNBVElPTiAgICAgICAgICAgICAgICAgIDExCisjZGVmaW5lIFNTSF9ESVNDT05ORUNUX1RPT19NQU5ZX0NPTk5FQ1RJT05TICAgICAgICAgICAgMTIKKyNkZWZpbmUgU1NIX0RJU0NPTk5FQ1RfQVVUSF9DQU5DRUxMRURfQllfVVNFUiAgICAgICAgICAxMworI2RlZmluZSBTU0hfRElTQ09OTkVDVF9OT19NT1JFX0FVVEhfTUVUSE9EU19BVkFJTEFCTEUgIDE0CisjZGVmaW5lIFNTSF9ESVNDT05ORUNUX0lMTEVHQUxfVVNFUl9OQU1FICAgICAgICAgICAgICAgMTUKKworLyogc2VydmljZSB0eXBlcyAqLworI2RlZmluZSBTU0hfU0VSVklDRV9VU0VSQVVUSCAic3NoLXVzZXJhdXRoIgorI2RlZmluZSBTU0hfU0VSVklDRV9VU0VSQVVUSF9MRU4gMTIKKyNkZWZpbmUgU1NIX1NFUlZJQ0VfQ09OTkVDVElPTiAic3NoLWNvbm5lY3Rpb24iCisjZGVmaW5lIFNTSF9TRVJWSUNFX0NPTk5FQ1RJT05fTEVOIDE0CisKKy8qIHB1YmxpYyBrZXkgdHlwZXMgKi8KKyNkZWZpbmUgU1NIX1NJR05LRVlfRFNTICJzc2gtZHNzIgorI2RlZmluZSBTU0hfU0lHTktFWV9EU1NfTEVOIDcKKyNkZWZpbmUgU1NIX1NJR05LRVlfUlNBICJzc2gtcnNhIgorI2RlZmluZSBTU0hfU0lHTktFWV9SU0FfTEVOIDcKZGlmZiAtLWdpdCBhL3NzaHB0eS5jIGIvc3NocHR5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzUyNmZmMAotLS0gL2Rldi9udWxsCisrKyBiL3NzaHB0eS5jCkBAIC0wLDAgKzEsNDEyIEBACisvKgorICogRHJvcGJlYXIgLSBhIFNTSDIgc2VydmVyCisgKgorICogQ29waWVkIGZyb20gT3BlblNTSC0zLjVwMSBzb3VyY2UsIG1vZGlmaWVkIGJ5IE1hdHQgSm9obnN0b24gMjAwMworICogCisgKiBBdXRob3I6IFRhdHUgWWxvbmVuIDx5bG9AY3MuaHV0LmZpPgorICogQ29weXJpZ2h0IChjKSAxOTk1IFRhdHUgWWxvbmVuIDx5bG9AY3MuaHV0LmZpPiwgRXNwb28sIEZpbmxhbmQKKyAqICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkCisgKiBBbGxvY2F0aW5nIGEgcHNldWRvLXRlcm1pbmFsLCBhbmQgbWFraW5nIGl0IHRoZSBjb250cm9sbGluZyB0dHkuCisgKgorICogQXMgZmFyIGFzIEkgYW0gY29uY2VybmVkLCB0aGUgY29kZSBJIGhhdmUgd3JpdHRlbiBmb3IgdGhpcyBzb2Z0d2FyZQorICogY2FuIGJlIHVzZWQgZnJlZWx5IGZvciBhbnkgcHVycG9zZS4gIEFueSBkZXJpdmVkIHZlcnNpb25zIG9mIHRoaXMKKyAqIHNvZnR3YXJlIG11c3QgYmUgY2xlYXJseSBtYXJrZWQgYXMgc3VjaCwgYW5kIGlmIHRoZSBkZXJpdmVkIHdvcmsgaXMKKyAqIGluY29tcGF0aWJsZSB3aXRoIHRoZSBwcm90b2NvbCBkZXNjcmlwdGlvbiBpbiB0aGUgUkZDIGZpbGUsIGl0IG11c3QgYmUKKyAqIGNhbGxlZCBieSBhIG5hbWUgb3RoZXIgdGhhbiAic3NoIiBvciAiU2VjdXJlIFNoZWxsIi4KKyAqLworCisvKlJDU0lEKCJPcGVuQlNEOiBzc2hwdHkuYyx2IDEuNyAyMDAyLzA2LzI0IDE3OjU3OjIwIGRlcmFhZHQgRXhwICIpOyovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgImVycm5vLmgiCisjaW5jbHVkZSAic3NocHR5LmgiCisKKy8qIFB0eSBhbGxvY2F0ZWQgd2l0aCBfZ2V0cHR5IGdldHMgYnJva2VuIGlmIHdlIGRvIElfUFVTSDplcyB0byBpdC4gKi8KKyNpZiBkZWZpbmVkKEhBVkVfX0dFVFBUWSkgfHwgZGVmaW5lZChIQVZFX09QRU5QVFkpCisjdW5kZWYgSEFWRV9ERVZfUFRNWAorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BUWV9ICisjIGluY2x1ZGUgPHB0eS5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChVU0VfREVWX1BUTVgpICYmIGRlZmluZWQoSEFWRV9TVFJPUFRTX0gpCisjIGluY2x1ZGUgPHN0cm9wdHMuaD4KKyNlbmRpZgorCisjaWZuZGVmIE9fTk9DVFRZCisjZGVmaW5lIE9fTk9DVFRZIDAKKyNlbmRpZgorCisvKgorICogQWxsb2NhdGVzIGFuZCBvcGVucyBhIHB0eS4gIFJldHVybnMgMCBpZiBubyBwdHkgY291bGQgYmUgYWxsb2NhdGVkLCBvcgorICogbm9uemVybyBpZiBhIHB0eSB3YXMgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZC4gIE9uIHN1Y2Nlc3MsIG9wZW4gZmlsZQorICogZGVzY3JpcHRvcnMgZm9yIHRoZSBwdHkgYW5kIHR0eSBzaWRlcyBhbmQgdGhlIG5hbWUgb2YgdGhlIHR0eSBzaWRlIGFyZQorICogcmV0dXJuZWQgKHRoZSBidWZmZXIgbXVzdCBiZSBhYmxlIHRvIGhvbGQgYXQgbGVhc3QgNjQgY2hhcmFjdGVycykuCisgKi8KKworaW50CitwdHlfYWxsb2NhdGUoaW50ICpwdHlmZCwgaW50ICp0dHlmZCwgY2hhciAqbmFtZWJ1ZiwgaW50IG5hbWVidWZsZW4pCit7CisjaWYgZGVmaW5lZChIQVZFX09QRU5QVFkpCisJLyogZXhpc3RzIGluIHJlY2VudCAoNC40KSBCU0RzIGFuZCBPU0YvMSAqLworCWNoYXIgKm5hbWU7CisJaW50IGk7CisKKwlpID0gb3BlbnB0eShwdHlmZCwgdHR5ZmQsIE5VTEwsIE5VTEwsIE5VTEwpOworCWlmIChpIDwgMCkgeworCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsIAorCQkJCSJwdHlfYWxsb2NhdGU6IG9wZW5wdHk6ICUuMTAwcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAwOworCX0KKwluYW1lID0gdHR5bmFtZSgqdHR5ZmQpOworCWlmICghbmFtZSkgeworCQlkcm9wYmVhcl9leGl0KCJ0dHluYW1lIGZhaWxzIGZvciBvcGVucHR5IGRldmljZSIpOworCX0KKworCXN0cmxjcHkobmFtZWJ1ZiwgbmFtZSwgbmFtZWJ1Zmxlbik7CS8qIHBvc3NpYmxlIHRydW5jYXRpb24gKi8KKwlyZXR1cm4gMTsKKyNlbHNlIC8qIEhBVkVfT1BFTlBUWSAqLworI2lmZGVmIEhBVkVfX0dFVFBUWQorCS8qCisJICogX2dldHB0eSgzKSBleGlzdHMgaW4gU0dJIElyaXggNC54LCA1LnggJiA2LnggLS0gaXQgZ2VuZXJhdGVzIG1vcmUKKwkgKiBwdHkncyBhdXRvbWFnaWNhbGx5IHdoZW4gbmVlZGVkCisJICovCisJY2hhciAqc2xhdmU7CisKKwlzbGF2ZSA9IF9nZXRwdHkocHR5ZmQsIE9fUkRXUiwgMDYyMiwgMCk7CisJaWYgKHNsYXZlID09IE5VTEwpIHsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLAorCQkJCSJwdHlfYWxsb2NhdGU6IF9nZXRwdHk6ICUuMTAwcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCXJldHVybiAwOworCX0KKwlzdHJsY3B5KG5hbWVidWYsIHNsYXZlLCBuYW1lYnVmbGVuKTsKKwkvKiBPcGVuIHRoZSBzbGF2ZSBzaWRlLiAqLworCSp0dHlmZCA9IG9wZW4obmFtZWJ1ZiwgT19SRFdSIHwgT19OT0NUVFkpOworCWlmICgqdHR5ZmQgPCAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywKKwkJCQkicHR5X2FsbG9jYXRlIGVycm9yOiB0dHlmdGQgb3BlbiBlcnJvciIpOworCQljbG9zZSgqcHR5ZmQpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7CisjZWxzZSAvKiBIQVZFX19HRVRQVFkgKi8KKyNpZiBkZWZpbmVkKFVTRV9ERVZfUFRNWCkKKwkvKgorCSAqIFRoaXMgY29kZSBpcyB1c2VkIGUuZy4gb24gU29sYXJpcyAyLnguICAoTm90ZSB0aGF0IFNvbGFyaXMgMi4zCisJICogYWxzbyBoYXMgYnNkLXN0eWxlIHB0eXMsIGJ1dCB0aGV5IHNpbXBseSBkbyBub3Qgd29yay4pCisJICoKKwkgKiBMaW51eCBzeXN0ZW1zIG1heSBoYXZlIHRoZSAvZGV2L3B0bXggZGV2aWNlLCBidXQgdGhpcyBjb2RlIHdvbid0IHdvcmsuCisJICovCisJaW50IHB0bTsKKwljaGFyICpwdHM7CisKKwlwdG0gPSBvcGVuKCIvZGV2L3B0bXgiLCBPX1JEV1IgfCBPX05PQ1RUWSk7CisJaWYgKHB0bSA8IDApIHsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLAorCQkJCSJwdHlfYWxsb2NhdGU6IC9kZXYvcHRteDogJS4xMDBzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChncmFudHB0KHB0bSkgPCAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywKKwkJCQkiZ3JhbnRwdDogJS4xMDBzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICh1bmxvY2twdChwdG0pIDwgMCkgeworCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsCisJCQkJInVubG9ja3B0OiAlLjEwMHMiLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gMDsKKwl9CisJcHRzID0gcHRzbmFtZShwdG0pOworCWlmIChwdHMgPT0gTlVMTCkgeworCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsCisJCQkJIlNsYXZlIHB0eSBzaWRlIG5hbWUgY291bGQgbm90IGJlIG9idGFpbmVkLiIpOworCX0KKwlzdHJsY3B5KG5hbWVidWYsIHB0cywgbmFtZWJ1Zmxlbik7CisJKnB0eWZkID0gcHRtOworCisJLyogT3BlbiB0aGUgc2xhdmUgc2lkZS4gKi8KKwkqdHR5ZmQgPSBvcGVuKG5hbWVidWYsIE9fUkRXUiB8IE9fTk9DVFRZKTsKKwlpZiAoKnR0eWZkIDwgMCkgeworCQlkcm9wYmVhcl9sb2coTE9HX0VSUiwKKwkJCSJlcnJvciBvcGVuaW5nIHB0cyAlLjEwMHM6ICUuMTAwcyIsIG5hbWVidWYsIHN0cmVycm9yKGVycm5vKSk7CisJCWNsb3NlKCpwdHlmZCk7CisJCXJldHVybiAwOworCX0KKyNpZm5kZWYgSEFWRV9DWUdXSU4KKwkvKgorCSAqIFB1c2ggdGhlIGFwcHJvcHJpYXRlIHN0cmVhbXMgbW9kdWxlcywgYXMgZGVzY3JpYmVkIGluIFNvbGFyaXMgcHRzKDcpLgorCSAqIEhQLVVYIHB0cyg3KSBkb2Vzbid0IGhhdmUgdHRjb21wYXQgbW9kdWxlLgorCSAqLworCWlmIChpb2N0bCgqdHR5ZmQsIElfUFVTSCwgInB0ZW0iKSA8IDApIHsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLAorCQkJCSJpb2N0bCBJX1BVU0ggcHRlbTogJS4xMDBzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisJaWYgKGlvY3RsKCp0dHlmZCwgSV9QVVNILCAibGR0ZXJtIikgPCAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywKKwkJCSJpb2N0bCBJX1BVU0ggbGR0ZXJtOiAlLjEwMHMiLCBzdHJlcnJvcihlcnJubykpOworCX0KKyNpZm5kZWYgX19ocHV4CisJaWYgKGlvY3RsKCp0dHlmZCwgSV9QVVNILCAidHRjb21wYXQiKSA8IDApIHsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLAorCQkJImlvY3RsIElfUFVTSCB0dGNvbXBhdDogJS4xMDBzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisjZW5kaWYKKyNlbmRpZgorCXJldHVybiAxOworI2Vsc2UgLyogVVNFX0RFVl9QVE1YICovCisjaWZkZWYgSEFWRV9ERVZfUFRTX0FORF9QVEMKKwkvKiBBSVgtc3R5bGUgcHR5IGNvZGUuICovCisJY29uc3QgY2hhciAqbmFtZTsKKworCSpwdHlmZCA9IG9wZW4oIi9kZXYvcHRjIiwgT19SRFdSIHwgT19OT0NUVFkpOworCWlmICgqcHR5ZmQgPCAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfRVJSLAorCQkJIkNvdWxkIG5vdCBvcGVuIC9kZXYvcHRjOiAlLjEwMHMiLCBzdHJlcnJvcihlcnJubykpOworCQlyZXR1cm4gMDsKKwl9CisJbmFtZSA9IHR0eW5hbWUoKnB0eWZkKTsKKwlpZiAoIW5hbWUpIHsKKwkJZHJvcGJlYXJfZXhpdCgidHR5bmFtZSBmYWlscyBmb3IgL2Rldi9wdGMgZGV2aWNlIik7CisJfQorCXN0cmxjcHkobmFtZWJ1ZiwgbmFtZSwgbmFtZWJ1Zmxlbik7CisJKnR0eWZkID0gb3BlbihuYW1lLCBPX1JEV1IgfCBPX05PQ1RUWSk7CisJaWYgKCp0dHlmZCA8IDApIHsKKwkJZHJvcGJlYXJfbG9nKExPR19FUlIsCisJCQkiQ291bGQgbm90IG9wZW4gcHR5IHNsYXZlIHNpZGUgJS4xMDBzOiAlLjEwMHMiLAorCQkgICAgbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJY2xvc2UoKnB0eWZkKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworI2Vsc2UgLyogSEFWRV9ERVZfUFRTX0FORF9QVEMgKi8KKworCS8qIEJTRC1zdHlsZSBwdHkgY29kZS4gKi8KKwljaGFyIGJ1Zls2NF07CisJaW50IGk7CisJY29uc3QgY2hhciAqcHR5bWFqb3JzID0gInBxcnN0dXZ3eHl6YWJjZGVmZ2hpamtsbW5vQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiOworCWNvbnN0IGNoYXIgKnB0eW1pbm9ycyA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKKwlpbnQgbnVtX21pbm9ycyA9IHN0cmxlbihwdHltaW5vcnMpOworCWludCBudW1fcHR5cyA9IHN0cmxlbihwdHltYWpvcnMpICogbnVtX21pbm9yczsKKwlzdHJ1Y3QgdGVybWlvcyB0aW87CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3B0eXM7IGkrKykgeworCQlzbnByaW50ZihidWYsIHNpemVvZiBidWYsICIvZGV2L3B0eSVjJWMiLCBwdHltYWpvcnNbaSAvIG51bV9taW5vcnNdLAorCQkJIHB0eW1pbm9yc1tpICUgbnVtX21pbm9yc10pOworCQlzbnByaW50ZihuYW1lYnVmLCBuYW1lYnVmbGVuLCAiL2Rldi90dHklYyVjIiwKKwkJICAgIHB0eW1ham9yc1tpIC8gbnVtX21pbm9yc10sIHB0eW1pbm9yc1tpICUgbnVtX21pbm9yc10pOworCisJCSpwdHlmZCA9IG9wZW4oYnVmLCBPX1JEV1IgfCBPX05PQ1RUWSk7CisJCWlmICgqcHR5ZmQgPCAwKSB7CisJCQkvKiBUcnkgU0NPIHN0eWxlIG5hbWluZyAqLworCQkJc25wcmludGYoYnVmLCBzaXplb2YgYnVmLCAiL2Rldi9wdHlwJWQiLCBpKTsKKwkJCXNucHJpbnRmKG5hbWVidWYsIG5hbWVidWZsZW4sICIvZGV2L3R0eXAlZCIsIGkpOworCQkJKnB0eWZkID0gb3BlbihidWYsIE9fUkRXUiB8IE9fTk9DVFRZKTsKKwkJCWlmICgqcHR5ZmQgPCAwKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKworCQkvKiBPcGVuIHRoZSBzbGF2ZSBzaWRlLiAqLworCQkqdHR5ZmQgPSBvcGVuKG5hbWVidWYsIE9fUkRXUiB8IE9fTk9DVFRZKTsKKwkJaWYgKCp0dHlmZCA8IDApIHsKKwkJCWRyb3BiZWFyX2xvZyhMT0dfRVJSLAorCQkJCSJwdHlfYWxsb2NhdGU6ICUuMTAwczogJS4xMDBzIiwgbmFtZWJ1Ziwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWNsb3NlKCpwdHlmZCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQkvKiBzZXQgdHR5IG1vZGVzIHRvIGEgc2FuZSBzdGF0ZSBmb3IgYnJva2VuIGNsaWVudHMgKi8KKwkJaWYgKHRjZ2V0YXR0cigqcHR5ZmQsICZ0aW8pIDwgMCkgeworCQkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLAorCQkJCSJwdHlhbGxvY2F0ZTogdHR5IG1vZGVzIGZhaWxlZDogJS4xMDBzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJfSBlbHNlIHsKKwkJCXRpby5jX2xmbGFnIHw9IChFQ0hPIHwgSVNJRyB8IElDQU5PTik7CisJCQl0aW8uY19vZmxhZyB8PSAoT1BPU1QgfCBPTkxDUik7CisJCQl0aW8uY19pZmxhZyB8PSBJQ1JOTDsKKworCQkJLyogU2V0IHRoZSBuZXcgbW9kZXMgZm9yIHRoZSB0ZXJtaW5hbC4gKi8KKwkJCWlmICh0Y3NldGF0dHIoKnB0eWZkLCBUQ1NBTk9XLCAmdGlvKSA8IDApIHsKKwkJCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsCisJCQkJCSJTZXR0aW5nIHR0eSBtb2RlcyBmb3IgcHR5IGZhaWxlZDogJS4xMDBzIiwKKwkJCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJCX0KKwkJfQorCisJCXJldHVybiAxOworCX0KKwlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJmYWlsZWQgdG8gb3BlbiBhbnkgL2Rldi9wdHk/PyBkZXZpY2VzIik7CisJcmV0dXJuIDA7CisjZW5kaWYgLyogSEFWRV9ERVZfUFRTX0FORF9QVEMgKi8KKyNlbmRpZiAvKiBVU0VfREVWX1BUTVggKi8KKyNlbmRpZiAvKiBIQVZFX19HRVRQVFkgKi8KKyNlbmRpZiAvKiBIQVZFX09QRU5QVFkgKi8KK30KKworLyogUmVsZWFzZXMgdGhlIHR0eS4gIEl0cyBvd25lcnNoaXAgaXMgcmV0dXJuZWQgdG8gcm9vdCwgYW5kIHBlcm1pc3Npb25zIHRvIDA2NjYuICovCisKK3ZvaWQKK3B0eV9yZWxlYXNlKGNvbnN0IGNoYXIgKnR0eV9uYW1lKQoreworCWlmIChjaG93bih0dHlfbmFtZSwgKHVpZF90KSAwLCAoZ2lkX3QpIDApIDwgMAorCQkJJiYgKGVycm5vICE9IEVOT0VOVCkpIHsKKwkJZHJvcGJlYXJfbG9nKExPR19FUlIsCisJCQkJImNob3duICUuMTAwcyAwIDAgZmFpbGVkOiAlLjEwMHMiLCB0dHlfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisJaWYgKGNobW9kKHR0eV9uYW1lLCAobW9kZV90KSAwNjY2KSA8IDAKKwkJCSYmIChlcnJubyAhPSBFTk9FTlQpKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfRVJSLAorCQkJImNobW9kICUuMTAwcyAwNjY2IGZhaWxlZDogJS4xMDBzIiwgdHR5X25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJfQorfQorCisvKiBNYWtlcyB0aGUgdHR5IHRoZSBwcm9jZXNzZXMgY29udHJvbGxpbmcgdHR5IGFuZCBzZXRzIGl0IHRvIHNhbmUgbW9kZXMuICovCisKK3ZvaWQKK3B0eV9tYWtlX2NvbnRyb2xsaW5nX3R0eShpbnQgKnR0eWZkLCBjb25zdCBjaGFyICp0dHlfbmFtZSkKK3sKKwlpbnQgZmQ7CisjaWZkZWYgVVNFX1ZIQU5HVVAKKwl2b2lkICpvbGQ7CisjZW5kaWYgLyogVVNFX1ZIQU5HVVAgKi8KKworCS8qIFNvbGFyaXMgaGFzIGEgcHJvYmxlbSB3aXRoIFRJT0NOT1RUWSBmb3IgYSBiZyBwcm9jZXNzLCBzbworCSAqIHdlIGRpc2FibGUgdGhlIHNpZ25hbCB3aGljaCB3b3VsZCBTVE9QIHRoZSBwcm9jZXNzIC0gbWF0dCAqLworCXNpZ25hbChTSUdUVE9VLCBTSUdfSUdOKTsKKworCS8qIEZpcnN0IGRpc2Nvbm5lY3QgZnJvbSB0aGUgb2xkIGNvbnRyb2xsaW5nIHR0eS4gKi8KKyNpZmRlZiBUSU9DTk9UVFkKKwlmZCA9IG9wZW4oX1BBVEhfVFRZLCBPX1JEV1IgfCBPX05PQ1RUWSk7CisJaWYgKGZkID49IDApIHsKKwkJKHZvaWQpIGlvY3RsKGZkLCBUSU9DTk9UVFksIE5VTEwpOworCQljbG9zZShmZCk7CisJfQorI2VuZGlmIC8qIFRJT0NOT1RUWSAqLworCWlmIChzZXRzaWQoKSA8IDApIHsKKwkJZHJvcGJlYXJfbG9nKExPR19FUlIsCisJCQkic2V0c2lkOiAlLjEwMHMiLCBzdHJlcnJvcihlcnJubykpOworCX0KKworCS8qCisJICogVmVyaWZ5IHRoYXQgd2UgYXJlIHN1Y2Nlc3NmdWxseSBkaXNjb25uZWN0ZWQgZnJvbSB0aGUgY29udHJvbGxpbmcKKwkgKiB0dHkuCisJICovCisJZmQgPSBvcGVuKF9QQVRIX1RUWSwgT19SRFdSIHwgT19OT0NUVFkpOworCWlmIChmZCA+PSAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfRVJSLAorCQkJCSJGYWlsZWQgdG8gZGlzY29ubmVjdCBmcm9tIGNvbnRyb2xsaW5nIHR0eS5cbiIpOworCQljbG9zZShmZCk7CisJfQorCS8qIE1ha2UgaXQgb3VyIGNvbnRyb2xsaW5nIHR0eS4gKi8KKyNpZmRlZiBUSU9DU0NUVFkKKwlpZiAoaW9jdGwoKnR0eWZkLCBUSU9DU0NUVFksIE5VTEwpIDwgMCkgeworCQlkcm9wYmVhcl9sb2coTE9HX0VSUiwKKwkJCSJpb2N0bChUSU9DU0NUVFkpOiAlLjEwMHMiLCBzdHJlcnJvcihlcnJubykpOworCX0KKyNlbmRpZiAvKiBUSU9DU0NUVFkgKi8KKyNpZmRlZiBIQVZFX05FV1M0CisJaWYgKHNldHBncnAoMCwwKSA8IDApIHsKKwkJZHJvcGJlYXJfbG9nKExPR19FUlIsCisJCQllcnJvcigiU0VUUEdSUCAlcyIsc3RyZXJyb3IoZXJybm8pKSk7CisJfQorI2VuZGlmIC8qIEhBVkVfTkVXUzQgKi8KKyNpZmRlZiBVU0VfVkhBTkdVUAorCW9sZCA9IG15c2lnbmFsKFNJR0hVUCwgU0lHX0lHTik7CisJdmhhbmd1cCgpOworCW15c2lnbmFsKFNJR0hVUCwgb2xkKTsKKyNlbmRpZiAvKiBVU0VfVkhBTkdVUCAqLworCWZkID0gb3Blbih0dHlfbmFtZSwgT19SRFdSKTsKKwlpZiAoZmQgPCAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfRVJSLAorCQkJIiUuMTAwczogJS4xMDBzIiwgdHR5X25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJfSBlbHNlIHsKKyNpZmRlZiBVU0VfVkhBTkdVUAorCQljbG9zZSgqdHR5ZmQpOworCQkqdHR5ZmQgPSBmZDsKKyNlbHNlIC8qIFVTRV9WSEFOR1VQICovCisJCWNsb3NlKGZkKTsKKyNlbmRpZiAvKiBVU0VfVkhBTkdVUCAqLworCX0KKwkvKiBWZXJpZnkgdGhhdCB3ZSBub3cgaGF2ZSBhIGNvbnRyb2xsaW5nIHR0eS4gKi8KKwlmZCA9IG9wZW4oX1BBVEhfVFRZLCBPX1dST05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlkcm9wYmVhcl9sb2coTE9HX0VSUiwKKwkJCSJvcGVuIC9kZXYvdHR5IGZhaWxlZCAtIGNvdWxkIG5vdCBzZXQgY29udHJvbGxpbmcgdHR5OiAlLjEwMHMiLAorCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwl9IGVsc2UgeworCQljbG9zZShmZCk7CisJfQorfQorCisvKiBDaGFuZ2VzIHRoZSB3aW5kb3cgc2l6ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHB0eS4gKi8KKwordm9pZAorcHR5X2NoYW5nZV93aW5kb3dfc2l6ZShpbnQgcHR5ZmQsIGludCByb3csIGludCBjb2wsCisJaW50IHhwaXhlbCwgaW50IHlwaXhlbCkKK3sKKwlzdHJ1Y3Qgd2luc2l6ZSB3OworCisJdy53c19yb3cgPSByb3c7CisJdy53c19jb2wgPSBjb2w7CisJdy53c194cGl4ZWwgPSB4cGl4ZWw7CisJdy53c195cGl4ZWwgPSB5cGl4ZWw7CisJKHZvaWQpIGlvY3RsKHB0eWZkLCBUSU9DU1dJTlNaLCAmdyk7Cit9CisKK3ZvaWQKK3B0eV9zZXRvd25lcihzdHJ1Y3QgcGFzc3dkICpwdywgY29uc3QgY2hhciAqdHR5X25hbWUpCit7CisJc3RydWN0IGdyb3VwICpncnA7CisJZ2lkX3QgZ2lkOworCW1vZGVfdCBtb2RlOworCXN0cnVjdCBzdGF0IHN0OworCisJLyogRGV0ZXJtaW5lIHRoZSBncm91cCB0byBtYWtlIHRoZSBvd25lciBvZiB0aGUgdHR5LiAqLworCWdycCA9IGdldGdybmFtKCJ0dHkiKTsKKwlpZiAoZ3JwKSB7CisJCWdpZCA9IGdycC0+Z3JfZ2lkOworCQltb2RlID0gU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lXR1JQOworCX0gZWxzZSB7CisJCWdpZCA9IHB3LT5wd19naWQ7CisJCW1vZGUgPSBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVdHUlAgfCBTX0lXT1RIOworCX0KKworCS8qCisJICogQ2hhbmdlIG93bmVyIGFuZCBtb2RlIG9mIHRoZSB0dHkgYXMgcmVxdWlyZWQuCisJICogV2FybiBidXQgY29udGludWUgaWYgZmlsZXN5c3RlbSBpcyByZWFkLW9ubHkgYW5kIHRoZSB1aWRzIG1hdGNoLworCSAqIHR0eSBpcyBvd25lZCBieSByb290LgorCSAqLworCWlmIChzdGF0KHR0eV9uYW1lLCAmc3QpKSB7CisJCWRyb3BiZWFyX2V4aXQoInB0eV9zZXRvd25lcjogc3RhdCglLjEwMXMpIGZhaWxlZDogJS4xMDBzIiwKKwkJCQl0dHlfbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisKKwlpZiAoc3Quc3RfdWlkICE9IHB3LT5wd191aWQgfHwgc3Quc3RfZ2lkICE9IGdpZCkgeworCQlpZiAoY2hvd24odHR5X25hbWUsIHB3LT5wd191aWQsIGdpZCkgPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRVJPRlMgJiYKKwkJCSAgICAoc3Quc3RfdWlkID09IHB3LT5wd191aWQgfHwgc3Quc3RfdWlkID09IDApKSB7CisJCQkJZHJvcGJlYXJfbG9nKExPR19FUlIsCisJCQkJCSJjaG93biglLjEwMHMsICV1LCAldSkgZmFpbGVkOiAlLjEwMHMiLAorCQkJCQkJdHR5X25hbWUsICh1bnNpZ25lZCBpbnQpcHctPnB3X3VpZCwgKHVuc2lnbmVkIGludClnaWQsCisJCQkJCQlzdHJlcnJvcihlcnJubykpOworCQkJfSBlbHNlIHsKKwkJCQlkcm9wYmVhcl9leGl0KCJjaG93biglLjEwMHMsICV1LCAldSkgZmFpbGVkOiAlLjEwMHMiLAorCQkJCSAgICB0dHlfbmFtZSwgKHVuc2lnbmVkIGludClwdy0+cHdfdWlkLCAodW5zaWduZWQgaW50KWdpZCwKKwkJCQkgICAgc3RyZXJyb3IoZXJybm8pKTsKKwkJCX0KKwkJfQorCX0KKworCWlmICgoc3Quc3RfbW9kZSAmIChTX0lSV1hVfFNfSVJXWEd8U19JUldYTykpICE9IG1vZGUpIHsKKwkJaWYgKGNobW9kKHR0eV9uYW1lLCBtb2RlKSA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFUk9GUyAmJgorCQkJICAgIChzdC5zdF9tb2RlICYgKFNfSVJHUlAgfCBTX0lST1RIKSkgPT0gMCkgeworCQkJCWRyb3BiZWFyX2xvZyhMT0dfRVJSLAorCQkJCQkiY2htb2QoJS4xMDBzLCAwJW8pIGZhaWxlZDogJS4xMDBzIiwKKwkJCQkJdHR5X25hbWUsIG1vZGUsIHN0cmVycm9yKGVycm5vKSk7CisJCQl9IGVsc2UgeworCQkJCWRyb3BiZWFyX2V4aXQoImNobW9kKCUuMTAwcywgMCVvKSBmYWlsZWQ6ICUuMTAwcyIsCisJCQkJICAgIHR0eV9uYW1lLCBtb2RlLCBzdHJlcnJvcihlcnJubykpOworCQkJfQorCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvc3NocHR5LmggYi9zc2hwdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjcyMDcyCi0tLSAvZGV2L251bGwKKysrIGIvc3NocHR5LmgKQEAgLTAsMCArMSwyOCBAQAorLyoJJE9wZW5CU0Q6IHNzaHB0eS5oLHYgMS40IDIwMDIvMDMvMDQgMTc6Mjc6Mzkgc3RldmVzayBFeHAgJAkqLworCisvKgorICogQ29waWVkIGZyb20gb3BlbnNzaC0zLjVwMSBzb3VyY2UgYnkgTWF0dCBKb2huc3RvbiAyMDAzCisgKgorICogQXV0aG9yOiBUYXR1IFlsb25lbiA8eWxvQGNzLmh1dC5maT4KKyAqIENvcHlyaWdodCAoYykgMTk5NSBUYXR1IFlsb25lbiA8eWxvQGNzLmh1dC5maT4sIEVzcG9vLCBGaW5sYW5kCisgKiAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZAorICogRnVuY3Rpb25zIGZvciBhbGxvY2F0aW5nIGEgcHNldWRvLXRlcm1pbmFsIGFuZCBtYWtpbmcgaXQgdGhlIGNvbnRyb2xsaW5nCisgKiB0dHkuCisgKgorICogQXMgZmFyIGFzIEkgYW0gY29uY2VybmVkLCB0aGUgY29kZSBJIGhhdmUgd3JpdHRlbiBmb3IgdGhpcyBzb2Z0d2FyZQorICogY2FuIGJlIHVzZWQgZnJlZWx5IGZvciBhbnkgcHVycG9zZS4gIEFueSBkZXJpdmVkIHZlcnNpb25zIG9mIHRoaXMKKyAqIHNvZnR3YXJlIG11c3QgYmUgY2xlYXJseSBtYXJrZWQgYXMgc3VjaCwgYW5kIGlmIHRoZSBkZXJpdmVkIHdvcmsgaXMKKyAqIGluY29tcGF0aWJsZSB3aXRoIHRoZSBwcm90b2NvbCBkZXNjcmlwdGlvbiBpbiB0aGUgUkZDIGZpbGUsIGl0IG11c3QgYmUKKyAqIGNhbGxlZCBieSBhIG5hbWUgb3RoZXIgdGhhbiAic3NoIiBvciAiU2VjdXJlIFNoZWxsIi4KKyAqLworCisjaWZuZGVmIFNTSFBUWV9ICisjZGVmaW5lIFNTSFBUWV9ICisKK2ludAkgcHR5X2FsbG9jYXRlKGludCAqLCBpbnQgKiwgY2hhciAqLCBpbnQpOwordm9pZAkgcHR5X3JlbGVhc2UoY29uc3QgY2hhciAqKTsKK3ZvaWQJIHB0eV9tYWtlX2NvbnRyb2xsaW5nX3R0eShpbnQgKiwgY29uc3QgY2hhciAqKTsKK3ZvaWQJIHB0eV9jaGFuZ2Vfd2luZG93X3NpemUoaW50LCBpbnQsIGludCwgaW50LCBpbnQpOwordm9pZAkgcHR5X3NldG93bmVyKHN0cnVjdCBwYXNzd2QgKiwgY29uc3QgY2hhciAqKTsKKworI2VuZGlmIC8qIFNTSFBUWV9IICovCmRpZmYgLS1naXQgYS9zdnItYWdlbnRmd2QuYyBiL3N2ci1hZ2VudGZ3ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMjcxNTgKLS0tIC9kZXYvbnVsbAorKysgYi9zdnItYWdlbnRmd2QuYwpAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworLyogVGhpcyBmaWxlIChhZ2VudGZ3ZC5jKSBoYW5kbGVzIGF1dGhlbnRpY2F0aW9uIGFnZW50IGZvcndhcmRpbmcsIGZvciBPcGVuU1NICisgKiBzdHlsZSBhZ2VudHMuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorCisjaWZuZGVmIERJU0FCTEVfQUdFTlRGV0QKKworI2luY2x1ZGUgImFnZW50ZndkLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgImNoYW5zZXNzaW9uLmgiCisjaW5jbHVkZSAiY2hhbm5lbC5oIgorI2luY2x1ZGUgInBhY2tldC5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgInJhbmRvbS5oIgorI2luY2x1ZGUgImxpc3RlbmVyLmgiCisKKyNkZWZpbmUgQUdFTlRESVJQUkVGSVggIi90bXAvZHJvcGJlYXItIgorCitzdGF0aWMgaW50IHNlbmRfbXNnX2NoYW5uZWxfb3Blbl9hZ2VudChpbnQgZmQpOworc3RhdGljIGludCBiaW5kYWdlbnQoaW50IGZkLCBzdHJ1Y3QgQ2hhblNlc3MgKiBjaGFuc2Vzcyk7CitzdGF0aWMgdm9pZCBhZ2VudGFjY2VwdChzdHJ1Y3QgTGlzdGVuZXIgKiBsaXN0ZW5lciwgaW50IHNvY2spOworCisvKiBIYW5kbGVzIGNsaWVudCByZXF1ZXN0cyB0byBzdGFydCBhZ2VudCBmb3J3YXJkaW5nLCBzZXRzIHVwIGxpc3RlbmluZyBzb2NrZXQuCisgKiBSZXR1cm5zIERST1BCRUFSX1NVQ0NFU1Mgb3IgRFJPUEJFQVJfRkFJTFVSRSAqLworaW50IGFnZW50cmVxKHN0cnVjdCBDaGFuU2VzcyAqIGNoYW5zZXNzKSB7CisKKwlpbnQgZmQ7CisKKwlpZiAoY2hhbnNlc3MtPmFnZW50bGlzdGVuZXIgIT0gTlVMTCkgeworCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9CisKKwkvKiBjcmVhdGUgbGlzdGVuaW5nIHNvY2tldCAqLworCWZkID0gc29ja2V0KFBGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKwlpZiAoZmQgPCAwKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBjcmVhdGUgdGhlIHVuaXggc29ja2V0IGRpciBhbmQgZmlsZSAqLworCWlmIChiaW5kYWdlbnQoZmQsIGNoYW5zZXNzKSA9PSBEUk9QQkVBUl9GQUlMVVJFKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBsaXN0ZW4gKi8KKwlpZiAobGlzdGVuKGZkLCAyMCkgPCAwKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBzZXQgbm9uLWJsb2NraW5nICovCisJc2V0bm9uYmxvY2tpbmcoZmQpOworCisJLyogcGFzcyBpZiBvZmYgdG8gbGlzdGVuZXIgKi8KKwljaGFuc2Vzcy0+YWdlbnRsaXN0ZW5lciA9IG5ld19saXN0ZW5lciggJmZkLCAxLCAwLCBjaGFuc2VzcywgCisJCQkJCQkJCWFnZW50YWNjZXB0LCBOVUxMKTsKKworCWlmIChjaGFuc2Vzcy0+YWdlbnRsaXN0ZW5lciA9PSBOVUxMKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXR1cm4gRFJPUEJFQVJfU1VDQ0VTUzsKKworZmFpbDoKKwkvKiBjbGVhbnVwICovCisJYWdlbnRjbGVhbnVwKGNoYW5zZXNzKTsKKworCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworfQorCisvKiBhY2NlcHRzIGEgY29ubmVjdGlvbiBvbiB0aGUgZm9yd2FyZGVkIHNvY2tldCBhbmQgb3BlbnMgYSBuZXcgY2hhbm5lbCBmb3IgaXQKKyAqIGJhY2sgdG8gdGhlIGNsaWVudCAqLworLyogcmV0dXJucyBEUk9QQkVBUl9TVUNDRVNTIG9yIERST1BCRUFSX0ZBSUxVUkUgKi8KK3N0YXRpYyB2b2lkIGFnZW50YWNjZXB0KHN0cnVjdCBMaXN0ZW5lciAqVU5VU0VEKGxpc3RlbmVyKSwgaW50IHNvY2spIHsKKworCWludCBmZDsKKworCWZkID0gYWNjZXB0KHNvY2ssIE5VTEwsIE5VTEwpOworCWlmIChmZCA8IDApIHsKKwkJVFJBQ0UoKCJhY2NlcHQgZmFpbGVkIikpCisJCXJldHVybjsKKwl9CisKKwlpZiAoc2VuZF9tc2dfY2hhbm5lbF9vcGVuX2FnZW50KGZkKSAhPSBEUk9QQkVBUl9TVUNDRVNTKSB7CisJCWNsb3NlKGZkKTsKKwl9CisKK30KKworLyogc2V0IHVwIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBwb2ludGluZyB0byB0aGUgc29ja2V0LiBUaGlzIGlzIGNhbGxlZAorICoganVzdCBiZWZvcmUgY29tbWFuZC9zaGVsbCBleGVjdXRpb24sIGFmdGVyIGRyb3BwaW5nIHByaXZlbGVnZXMgKi8KK3ZvaWQgYWdlbnRzZXQoc3RydWN0IENoYW5TZXNzICogY2hhbnNlc3MpIHsKKworCWNoYXIgKnBhdGggPSBOVUxMOworCWludCBsZW47CisKKwlpZiAoY2hhbnNlc3MtPmFnZW50bGlzdGVuZXIgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCisJLyogMiBmb3IgIi8iIGFuZCAiXDAiICovCisJbGVuID0gc3RybGVuKGNoYW5zZXNzLT5hZ2VudGRpcikgKyBzdHJsZW4oY2hhbnNlc3MtPmFnZW50ZmlsZSkgKyAyOworCisJcGF0aCA9IG1fbWFsbG9jKGxlbik7CisJc25wcmludGYocGF0aCwgbGVuLCAiJXMvJXMiLCBjaGFuc2Vzcy0+YWdlbnRkaXIsIGNoYW5zZXNzLT5hZ2VudGZpbGUpOworCWFkZG5ld3ZhcigiU1NIX0FVVEhfU09DSyIsIHBhdGgpOworCW1fZnJlZShwYXRoKTsKK30KKworLyogY2xvc2UgdGhlIHNvY2tldCwgcmVtb3ZlIHRoZSBzb2NrZXQtZmlsZSAqLwordm9pZCBhZ2VudGNsZWFudXAoc3RydWN0IENoYW5TZXNzICogY2hhbnNlc3MpIHsKKworCWNoYXIgKnBhdGggPSBOVUxMOworCXVpZF90IHVpZDsKKwlnaWRfdCBnaWQ7CisJaW50IGxlbjsKKworCWlmIChjaGFuc2Vzcy0+YWdlbnRsaXN0ZW5lciAhPSBOVUxMKSB7CisJCXJlbW92ZV9saXN0ZW5lcihjaGFuc2Vzcy0+YWdlbnRsaXN0ZW5lcik7CisJCWNoYW5zZXNzLT5hZ2VudGxpc3RlbmVyID0gTlVMTDsKKwl9CisKKwlpZiAoY2hhbnNlc3MtPmFnZW50ZmlsZSAhPSBOVUxMICYmIGNoYW5zZXNzLT5hZ2VudGRpciAhPSBOVUxMKSB7CisKKwkJLyogUmVtb3ZlIHRoZSBkaXIgYXMgdGhlIHVzZXIuIFRoYXQgd2F5IHRoZXkgY2FuJ3QgY2F1c2UgcHJvYmxlbXMgZXhjZXB0CisJCSAqIGZvciB0aGVtc2VsdmVzICovCisJCXVpZCA9IGdldHVpZCgpOworCQlnaWQgPSBnZXRnaWQoKTsKKwkJaWYgKChzZXRlZ2lkKHNlcy5hdXRoc3RhdGUucHctPnB3X2dpZCkpIDwgMCB8fAorCQkJKHNldGV1aWQoc2VzLmF1dGhzdGF0ZS5wdy0+cHdfdWlkKSkgPCAwKSB7CisJCQlkcm9wYmVhcl9leGl0KCJmYWlsZWQgdG8gc2V0IGV1aWQiKTsKKwkJfQorCisJCS8qIDIgZm9yICIvIiBhbmQgIlwwIiAqLworCQlsZW4gPSBzdHJsZW4oY2hhbnNlc3MtPmFnZW50ZGlyKSArIHN0cmxlbihjaGFuc2Vzcy0+YWdlbnRmaWxlKSArIDI7CisKKwkJcGF0aCA9IG1fbWFsbG9jKGxlbik7CisJCXNucHJpbnRmKHBhdGgsIGxlbiwgIiVzLyVzIiwgY2hhbnNlc3MtPmFnZW50ZGlyLCBjaGFuc2Vzcy0+YWdlbnRmaWxlKTsKKwkJdW5saW5rKHBhdGgpOworCQltX2ZyZWUocGF0aCk7CisKKwkJcm1kaXIoY2hhbnNlc3MtPmFnZW50ZGlyKTsKKworCQlpZiAoKHNldGV1aWQodWlkKSkgPCAwIHx8CisJCQkoc2V0ZWdpZChnaWQpKSA8IDApIHsKKwkJCWRyb3BiZWFyX2V4aXQoImZhaWxlZCB0byByZXZlcnQgZXVpZCIpOworCQl9CisKKwkJbV9mcmVlKGNoYW5zZXNzLT5hZ2VudGZpbGUpOworCQltX2ZyZWUoY2hhbnNlc3MtPmFnZW50ZGlyKTsKKwl9CisKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDaGFuVHlwZSBjaGFuX2FnZW50ID0geworCTAsIC8qIHNlcGZkcyAqLworCSJhdXRoLWFnZW50QG9wZW5zc2guY29tIiwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMCit9OworCisKKy8qIGhlbHBlciBmb3IgYWNjZXB0aW5nIGFuIGFnZW50IHJlcXVlc3QgKi8KK3N0YXRpYyBpbnQgc2VuZF9tc2dfY2hhbm5lbF9vcGVuX2FnZW50KGludCBmZCkgeworCisJaWYgKHNlbmRfbXNnX2NoYW5uZWxfb3Blbl9pbml0KGZkLCAmY2hhbl9hZ2VudCkgPT0gRFJPUEJFQVJfU1VDQ0VTUykgeworCQllbmNyeXB0X3BhY2tldCgpOworCQlyZXR1cm4gRFJPUEJFQVJfU1VDQ0VTUzsKKwl9IGVsc2UgeworCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9Cit9CisKKy8qIGhlbHBlciBmb3IgY3JlYXRpbmcgdGhlIGFnZW50IHNvY2tldC1maWxlCisgICByZXR1cm5zIERST1BCRUFSX1NVQ0NFU1Mgb3IgRFJPUEJFQVJfRkFJTFVSRSAqLworc3RhdGljIGludCBiaW5kYWdlbnQoaW50IGZkLCBzdHJ1Y3QgQ2hhblNlc3MgKiBjaGFuc2VzcykgeworCisJc3RydWN0IHNvY2thZGRyX3VuIGFkZHI7CisJdW5zaWduZWQgaW50IHByZWZpeDsKKwljaGFyIHBhdGhbc2l6ZW9mKGFkZHIuc3VuX3BhdGgpXSwgc29ja2ZpbGVbc2l6ZW9mKGFkZHIuc3VuX3BhdGgpXTsKKwltb2RlX3QgbW9kZTsKKwlpbnQgaTsKKwl1aWRfdCB1aWQ7CisJZ2lkX3QgZ2lkOworCWludCByZXQgPSBEUk9QQkVBUl9GQUlMVVJFOworCisJLyogZHJvcCB0byB1c2VyIHByaXZzIHRvIG1ha2UgdGhlIGRpci9maWxlICovCisJdWlkID0gZ2V0dWlkKCk7CisJZ2lkID0gZ2V0Z2lkKCk7CisJaWYgKChzZXRlZ2lkKHNlcy5hdXRoc3RhdGUucHctPnB3X2dpZCkpIDwgMCB8fAorCQkoc2V0ZXVpZChzZXMuYXV0aHN0YXRlLnB3LT5wd191aWQpKSA8IDApIHsKKwkJZHJvcGJlYXJfZXhpdCgiZmFpbGVkIHRvIHNldCBldWlkIik7CisJfQorCisJbWVtc2V0KCh2b2lkKikmYWRkciwgMHgwLCBzaXplb2YoYWRkcikpOworCWFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisKKwltb2RlID0gU19JUldYVTsKKworCWZvciAoaSA9IDA7IGkgPCAyMDsgaSsrKSB7CisJCWdlbnJhbmRvbSgodW5zaWduZWQgY2hhciopJnByZWZpeCwgc2l6ZW9mKHByZWZpeCkpOworCQkvKiB3ZSB3YW50IDMyIGJpdHMgKDggaGV4IGRpZ2l0cykgLSAiL3RtcC9kcm9wYmVhci1mMTljNjJjMCIgKi8KKwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBBR0VOVERJUlBSRUZJWCAiJS44eCIsIHByZWZpeCk7CisKKwkJaWYgKG1rZGlyKHBhdGgsIG1vZGUpID09IDApIHsKKwkJCWdvdG8gYmluZHNvY2tldDsKKwkJfQorCQlpZiAoZXJybm8gIT0gRUVYSVNUKSB7CisJCQlicmVhazsKKwkJfQorCX0KKwkvKiBjb3VsZG4ndCBtYWtlIGEgZGlyICovCisJZ290byBvdXQ7CisKK2JpbmRzb2NrZXQ6CisJLyogRm9ybWF0IGlzICIvdG1wL2Ryb3BiZWFyLTAyNDZkZWFkL2F1dGgtZDAwZjc2NTQtMjMiLgorCSAqIFRoZSAiMjMiIGlzIHRoZSBmaWxlIGRlc2MsIHRoZSByYW5kb20gZGF0YSBpcyB0byBhdm9pZCBjb2xsaXNpb25zCisJICogYmV0d2VlbiBzdWJzZXF1ZW50IHVzZXIgcHJvY2Vzc2VzIHJldXNpbmcgc29ja2V0IGZkcyAob2RkcyBhcmUgbm93CisJICogMS8oMl42NCkgKi8KKwlnZW5yYW5kb20oKHVuc2lnbmVkIGNoYXIqKSZwcmVmaXgsIHNpemVvZihwcmVmaXgpKTsKKwlzbnByaW50Zihzb2NrZmlsZSwgc2l6ZW9mKHNvY2tmaWxlKSwgImF1dGgtJS44eC0lZCIsIHByZWZpeCwgZmQpOworCQkJCisJc25wcmludGYoYWRkci5zdW5fcGF0aCwgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpLCAiJXMvJXMiLCBwYXRoLCBzb2NrZmlsZSk7CisKKwlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciopJmFkZHIsIHNpemVvZihhZGRyKSkgPT0gMCkgeworCQljaGFuc2Vzcy0+YWdlbnRkaXIgPSBtX3N0cmR1cChwYXRoKTsKKwkJY2hhbnNlc3MtPmFnZW50ZmlsZSA9IG1fc3RyZHVwKHNvY2tmaWxlKTsKKwkJcmV0ID0gRFJPUEJFQVJfU1VDQ0VTUzsKKwl9CisKKworb3V0OgorCWlmICgoc2V0ZXVpZCh1aWQpKSA8IDAgfHwKKwkJKHNldGVnaWQoZ2lkKSkgPCAwKSB7CisJCWRyb3BiZWFyX2V4aXQoImZhaWxlZCB0byByZXZlcnQgZXVpZCIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL3N2ci1hbGdvLmMgYi9zdnItYWxnby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjc4MjMKLS0tIC9kZXYvbnVsbAorKysgYi9zdnItYWxnby5jCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogRHJvcGJlYXIgLSBhIFNTSDIgc2VydmVyCisgKiBTU0ggY2xpZW50IGltcGxlbWVudGF0aW9uCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBNaWhuZWEgU3RvZW5lc2N1CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImFsZ28uaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKworLyogbWF0Y2ggdGhlIGZpcnN0IGFsZ29yaXRobSBpbiB0aGUgY29tbWEtc2VwYXJhdGVkIGxpc3QgaW4gYnVmIHdoaWNoIGlzCisgKiBhbHNvIGluIGxvY2FsYWxnb3NbXSwgb3IgcmV0dXJuIE5VTEwgb24gZmFpbHVyZS4KKyAqICgqZ29vZGd1ZXNzKSBpcyBzZXQgdG8gMSBpZiB0aGUgcHJlZmVycmVkIGNsaWVudC9zZXJ2ZXIgYWxnb3MgbWF0Y2gsCisgKiAwIG90aGVyd2lzZS4gVGhpcyBpcyB1c2VkIGZvciBjaGVja2luZyBpZiB0aGUga2V4YWxnby9ob3N0a2V5YWxnb3MgYXJlCisgKiBndWVzc2VkIGNvcnJlY3RseSAqLworYWxnb190eXBlICogc3ZyX2J1Zl9tYXRjaF9hbGdvKGJ1ZmZlciogYnVmLCBhbGdvX3R5cGUgbG9jYWxhbGdvc1tdLAorCQlpbnQgKmdvb2RndWVzcykKK3sKKworCXVuc2lnbmVkIGNoYXIgKiBhbGdvbGlzdCA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqIHJlbW90ZWFsZ29zW01BWF9QUk9QT1NFRF9BTEdPXTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCXVuc2lnbmVkIGludCBjb3VudCwgaSwgajsKKwlhbGdvX3R5cGUgKiByZXQgPSBOVUxMOworCisJKmdvb2RndWVzcyA9IDA7CisKKwkvKiBnZXQgdGhlIGNvbW1hLXNlcGFyYXRlZCBsaXN0IGZyb20gdGhlIGJ1ZmZlciBpZSAiYWxnbzEsYWxnbzIsYWxnbzMiICovCisJYWxnb2xpc3QgPSBidWZfZ2V0c3RyaW5nKGJ1ZiwgJmxlbik7CisJLyogRGVidWcgdGhpcyAqLworCVRSQUNFKCgiYnVmX21hdGNoX2FsZ286ICVzIiwgYWxnb2xpc3QpKQorCWlmIChsZW4gPiBNQVhfUFJPUE9TRURfQUxHTyooTUFYX05BTUVfTEVOKzEpKSB7CisJCWdvdG8gb3V0OyAvKiBqdXN0IGEgc2FuaXR5IGNoZWNrLCBubyBvdGhlciB1c2UgKi8KKwl9CisKKwkvKiByZW1vdGVhbGdvcyB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBzdHJpbmdzIHBhcnNlZCBvdXQgKi8KKwkvKiBXZSB3aWxsIGhhdmUgYXQgbGVhc3Qgb25lIHN0cmluZyAoZXZlbiBpZiBpdCdzIGp1c3QgIiIpICovCisJcmVtb3RlYWxnb3NbMF0gPSBhbGdvbGlzdDsKKwljb3VudCA9IDE7CisJLyogSXRlcmF0ZSB0aHJvdWdoLCByZXBsYWNpbmcgJywncyB3aXRoIE5VTHMsIHRvIHNwbGl0IGl0IGludG8KKwkgKiB3b3Jkcy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKGFsZ29saXN0W2ldID09ICdcMCcpIHsKKwkJCS8qIHNvbWVvbmUgaXMgdHJ5aW5nIHNvbWV0aGluZyBzdHJhbmdlICovCisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoYWxnb2xpc3RbaV0gPT0gJywnKSB7CisJCQlhbGdvbGlzdFtpXSA9ICdcMCc7CisJCQlyZW1vdGVhbGdvc1tjb3VudF0gPSAmYWxnb2xpc3RbaSsxXTsKKwkJCWNvdW50Kys7CisJCX0KKwkJaWYgKGNvdW50ID09IE1BWF9QUk9QT1NFRF9BTEdPKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIGl0ZXJhdGUgYW5kIGZpbmQgdGhlIGZpcnN0IG1hdGNoICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKworCQlsZW4gPSBzdHJsZW4ocmVtb3RlYWxnb3NbaV0pOworCisJCWZvciAoaiA9IDA7IGxvY2FsYWxnb3Nbal0ubmFtZSAhPSBOVUxMOyBqKyspIHsKKwkJCWlmIChsb2NhbGFsZ29zW2pdLnVzYWJsZSkgeworCQkJCWlmIChsZW4gPT0gc3RybGVuKGxvY2FsYWxnb3Nbal0ubmFtZSkgJiYKKwkJCQkJCXN0cm5jbXAobG9jYWxhbGdvc1tqXS5uYW1lLCByZW1vdGVhbGdvc1tpXSwgbGVuKSA9PSAwKSB7CisJCQkJCS8qIHNldCBpZiBpdCB3YXMgYSBnb29kIGd1ZXNzICovCisJCQkJCWlmIChpID09IDAgJiYgaiA9PSAwKSB7CisJCQkJCQkqZ29vZGd1ZXNzID0gMTsKKwkJCQkJfQorCQkJCQkvKiBzZXQgdGhlIGFsZ28gdG8gcmV0dXJuICovCisJCQkJCXJldCA9ICZsb2NhbGFsZ29zW2pdOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKK291dDoKKwltX2ZyZWUoYWxnb2xpc3QpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9zdnItYXV0aC5jIGIvc3ZyLWF1dGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGViYTliCi0tLSAvZGV2L251bGwKKysrIGIvc3ZyLWF1dGguYwpAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworLyogVGhpcyBmaWxlIChhdXRoLmMpIGhhbmRsZXMgYXV0aGVudGljYXRpb24gcmVxdWVzdHMsIHBhc3NpbmcgaXQgdG8gdGhlCisgKiBwYXJ0aWN1bGFyIHR5cGUgKGF1dGgtcGFzc3dkLCBhdXRoLXB1YmtleSkuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJwYWNrZXQuaCIKKyNpbmNsdWRlICJhdXRoLmgiCisjaW5jbHVkZSAicnVub3B0cy5oIgorCitzdGF0aWMgdm9pZCBhdXRoY2xlYXIoKTsKK3N0YXRpYyBpbnQgY2hlY2t1c2VybmFtZSh1bnNpZ25lZCBjaGFyICp1c2VybmFtZSwgdW5zaWduZWQgaW50IHVzZXJsZW4pOworc3RhdGljIHZvaWQgc2VuZF9tc2dfdXNlcmF1dGhfYmFubmVyKCk7CisKKy8qIGluaXRpYWxpc2UgdGhlIGZpcnN0IHRpbWUgZm9yIGEgc2Vzc2lvbiwgcmVzZXR0aW5nIGFsbCBwYXJhbWV0ZXJzICovCit2b2lkIHN2cl9hdXRoaW5pdGlhbGlzZSgpIHsKKworCXNlcy5hdXRoc3RhdGUuZmFpbGNvdW50ID0gMDsKKwlhdXRoY2xlYXIoKTsKKwkKK30KKworLyogUmVzZXQgdGhlIGF1dGggc3RhdGUsIGJ1dCBkb24ndCByZXNldCB0aGUgZmFpbGNvdW50LiBUaGlzIGlzIGZvciBpZiB0aGUKKyAqIHVzZXIgZGVjaWRlcyB0byB0cnkgd2l0aCBhIGRpZmZlcmVudCB1c2VybmFtZSBldGMsIGFuZCBpcyBhbHNvIGludm9rZWQKKyAqIG9uIGluaXRpYWxpc2F0aW9uICovCitzdGF0aWMgdm9pZCBhdXRoY2xlYXIoKSB7CisJCisJbWVtc2V0KCZzZXMuYXV0aHN0YXRlLCAwLCBzaXplb2Yoc2VzLmF1dGhzdGF0ZSkpOworI2lmZGVmIEVOQUJMRV9TVlJfUFVCS0VZX0FVVEgKKwlzZXMuYXV0aHN0YXRlLmF1dGh0eXBlcyB8PSBBVVRIX1RZUEVfUFVCS0VZOworI2VuZGlmCisjaWYgZGVmaW5lZChFTkFCTEVfU1ZSX1BBU1NXT1JEX0FVVEgpIHx8IGRlZmluZWQoRU5BQkxFX1NWUl9QQU1fQVVUSCkKKwlpZiAoIXN2cl9vcHRzLm5vYXV0aHBhc3MpIHsKKwkJc2VzLmF1dGhzdGF0ZS5hdXRodHlwZXMgfD0gQVVUSF9UWVBFX1BBU1NXT1JEOworCX0KKyNlbmRpZgorCit9CisKKy8qIFNlbmQgYSBiYW5uZXIgbWVzc2FnZSBpZiBzcGVjaWZpZWQgdG8gdGhlIGNsaWVudC4gVGhlIGNsaWVudCBtaWdodAorICogaWdub3JlIHRoaXMsIGJ1dCBwb3NzaWJseSBzZXJ2ZXMgYXMgYSBsZWdhbCAibm8gdHJlc3Bhc3NpbmciIHNpZ24gKi8KK3N0YXRpYyB2b2lkIHNlbmRfbXNnX3VzZXJhdXRoX2Jhbm5lcigpIHsKKworCVRSQUNFKCgiZW50ZXIgc2VuZF9tc2dfdXNlcmF1dGhfYmFubmVyIikpCisJaWYgKHN2cl9vcHRzLmJhbm5lciA9PSBOVUxMKSB7CisJCVRSQUNFKCgibGVhdmUgc2VuZF9tc2dfdXNlcmF1dGhfYmFubmVyOiBiYW5uZXIgaXMgTlVMTCIpKQorCQlyZXR1cm47CisJfQorCisJQ0hFQ0tDTEVBUlRPV1JJVEUoKTsKKworCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIFNTSF9NU0dfVVNFUkFVVEhfQkFOTkVSKTsKKwlidWZfcHV0c3RyaW5nKHNlcy53cml0ZXBheWxvYWQsIGJ1Zl9nZXRwdHIoc3ZyX29wdHMuYmFubmVyLAorCQkJCXN2cl9vcHRzLmJhbm5lci0+bGVuKSwgc3ZyX29wdHMuYmFubmVyLT5sZW4pOworCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgImVuIiwgMik7CisKKwllbmNyeXB0X3BhY2tldCgpOworCWJ1Zl9mcmVlKHN2cl9vcHRzLmJhbm5lcik7CisJc3ZyX29wdHMuYmFubmVyID0gTlVMTDsKKworCVRSQUNFKCgibGVhdmUgc2VuZF9tc2dfdXNlcmF1dGhfYmFubmVyIikpCit9CisKKy8qIGhhbmRsZSBhIHVzZXJhdXRoIHJlcXVlc3QsIGNoZWNrIHZhbGlkaXR5LCBwYXNzIHRvIHBhc3N3b3JkIG9yIHB1YmtleQorICogY2hlY2tpbmcsIGFuZCBoYW5kbGUgc3VjY2VzcyBvciBmYWlsdXJlICovCit2b2lkIHJlY3ZfbXNnX3VzZXJhdXRoX3JlcXVlc3QoKSB7CisKKwl1bnNpZ25lZCBjaGFyICp1c2VybmFtZSA9IE5VTEwsICpzZXJ2aWNlbmFtZSA9IE5VTEwsICptZXRob2RuYW1lID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgdXNlcmxlbiwgc2VydmljZWxlbiwgbWV0aG9kbGVuOworCisJVFJBQ0UoKCJlbnRlciByZWN2X21zZ191c2VyYXV0aF9yZXF1ZXN0IikpCisKKwkvKiBpZ25vcmUgcGFja2V0cyBpZiBhdXRoIGlzIGFscmVhZHkgZG9uZSAqLworCWlmIChzZXMuYXV0aHN0YXRlLmF1dGhkb25lID09IDEpIHsKKwkJVFJBQ0UoKCJsZWF2ZSByZWN2X21zZ191c2VyYXV0aF9yZXF1ZXN0OiBhdXRoZG9uZSBhbHJlYWR5IikpCisJCXJldHVybjsKKwl9CisKKwkvKiBzZW5kIHRoZSBiYW5uZXIgaWYgaXQgZXhpc3RzLCBpdCB3aWxsIG9ubHkgZXhpc3Qgb25jZSAqLworCWlmIChzdnJfb3B0cy5iYW5uZXIpIHsKKwkJc2VuZF9tc2dfdXNlcmF1dGhfYmFubmVyKCk7CisJfQorCisJCisJdXNlcm5hbWUgPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCAmdXNlcmxlbik7CisJc2VydmljZW5hbWUgPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCAmc2VydmljZWxlbik7CisJbWV0aG9kbmFtZSA9IGJ1Zl9nZXRzdHJpbmcoc2VzLnBheWxvYWQsICZtZXRob2RsZW4pOworCisJLyogb25seSBoYW5kbGUgJ3NzaC1jb25uZWN0aW9uJyBjdXJyZW50bHkgKi8KKwlpZiAoc2VydmljZWxlbiAhPSBTU0hfU0VSVklDRV9DT05ORUNUSU9OX0xFTgorCQkJJiYgKHN0cm5jbXAoc2VydmljZW5hbWUsIFNTSF9TRVJWSUNFX0NPTk5FQ1RJT04sCisJCQkJCVNTSF9TRVJWSUNFX0NPTk5FQ1RJT05fTEVOKSAhPSAwKSkgeworCQkKKwkJLyogVE9ETyAtIGRpc2Nvbm5lY3QgaGVyZSAqLworCQltX2ZyZWUodXNlcm5hbWUpOworCQltX2ZyZWUoc2VydmljZW5hbWUpOworCQltX2ZyZWUobWV0aG9kbmFtZSk7CisJCWRyb3BiZWFyX2V4aXQoInVua25vd24gc2VydmljZSBpbiBhdXRoIik7CisJfQorCisJLyogdXNlciB3YW50cyB0byBrbm93IHdoYXQgbWV0aG9kcyBhcmUgc3VwcG9ydGVkICovCisJaWYgKG1ldGhvZGxlbiA9PSBBVVRIX01FVEhPRF9OT05FX0xFTiAmJgorCQkJc3RybmNtcChtZXRob2RuYW1lLCBBVVRIX01FVEhPRF9OT05FLAorCQkJCUFVVEhfTUVUSE9EX05PTkVfTEVOKSA9PSAwKSB7CisJCVRSQUNFKCgicmVjdl9tc2dfdXNlcmF1dGhfcmVxdWVzdDogJ25vbmUnIHJlcXVlc3QiKSkKKwkJc2VuZF9tc2dfdXNlcmF1dGhfZmFpbHVyZSgwLCAwKTsKKwkJZ290byBvdXQ7CisJfQorCQorCS8qIGNoZWNrIHVzZXJuYW1lIGlzIGdvb2QgYmVmb3JlIGNvbnRpbnVpbmcgKi8KKwlpZiAoY2hlY2t1c2VybmFtZSh1c2VybmFtZSwgdXNlcmxlbikgPT0gRFJPUEJFQVJfRkFJTFVSRSkgeworCQkvKiB1c2VybmFtZSBpcyBpbnZhbGlkL25vIHNoZWxsL2V0YyAtIHNlbmQgZmFpbHVyZSAqLworCQlUUkFDRSgoInNlbmRpbmcgY2hlY2t1c2VybmFtZSBmYWlsdXJlIikpCisJCXNlbmRfbXNnX3VzZXJhdXRoX2ZhaWx1cmUoMCwgMSk7CisJCWdvdG8gb3V0OworCX0KKworI2lmZGVmIEVOQUJMRV9TVlJfUEFTU1dPUkRfQVVUSAorCWlmICghc3ZyX29wdHMubm9hdXRocGFzcyAmJgorCQkJIShzdnJfb3B0cy5ub3Jvb3RwYXNzICYmIHNlcy5hdXRoc3RhdGUucHctPnB3X3VpZCA9PSAwKSApIHsKKwkJLyogdXNlciB3YW50cyB0byB0cnkgcGFzc3dvcmQgYXV0aCAqLworCQlpZiAobWV0aG9kbGVuID09IEFVVEhfTUVUSE9EX1BBU1NXT1JEX0xFTiAmJgorCQkJCXN0cm5jbXAobWV0aG9kbmFtZSwgQVVUSF9NRVRIT0RfUEFTU1dPUkQsCisJCQkJCUFVVEhfTUVUSE9EX1BBU1NXT1JEX0xFTikgPT0gMCkgeworCQkJc3ZyX2F1dGhfcGFzc3dvcmQoKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfU1ZSX1BBTV9BVVRICisJaWYgKCFzdnJfb3B0cy5ub2F1dGhwYXNzICYmCisJCQkhKHN2cl9vcHRzLm5vcm9vdHBhc3MgJiYgc2VzLmF1dGhzdGF0ZS5wdy0+cHdfdWlkID09IDApICkgeworCQkvKiB1c2VyIHdhbnRzIHRvIHRyeSBwYXNzd29yZCBhdXRoICovCisJCWlmIChtZXRob2RsZW4gPT0gQVVUSF9NRVRIT0RfUEFTU1dPUkRfTEVOICYmCisJCQkJc3RybmNtcChtZXRob2RuYW1lLCBBVVRIX01FVEhPRF9QQVNTV09SRCwKKwkJCQkJQVVUSF9NRVRIT0RfUEFTU1dPUkRfTEVOKSA9PSAwKSB7CisJCQlzdnJfYXV0aF9wYW0oKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorI2VuZGlmCisKKyNpZmRlZiBFTkFCTEVfU1ZSX1BVQktFWV9BVVRICisJLyogdXNlciB3YW50cyB0byB0cnkgcHVia2V5IGF1dGggKi8KKwlpZiAobWV0aG9kbGVuID09IEFVVEhfTUVUSE9EX1BVQktFWV9MRU4gJiYKKwkJCXN0cm5jbXAobWV0aG9kbmFtZSwgQVVUSF9NRVRIT0RfUFVCS0VZLAorCQkJCUFVVEhfTUVUSE9EX1BVQktFWV9MRU4pID09IDApIHsKKwkJc3ZyX2F1dGhfcHVia2V5KCk7CisJCWdvdG8gb3V0OworCX0KKyNlbmRpZgorCisJLyogbm90aGluZyBtYXRjaGVkLCB3ZSBqdXN0IGZhaWwgKi8KKwlzZW5kX21zZ191c2VyYXV0aF9mYWlsdXJlKDAsIDEpOworCitvdXQ6CisKKwltX2ZyZWUodXNlcm5hbWUpOworCW1fZnJlZShzZXJ2aWNlbmFtZSk7CisJbV9mcmVlKG1ldGhvZG5hbWUpOworfQorCisvKiBDaGVjayB0aGF0IHRoZSB1c2VybmFtZSBleGlzdHMsIGhhcyBhIG5vbi1lbXB0eSBwYXNzd29yZCwgYW5kIGhhcyBhIHZhbGlkCisgKiBzaGVsbC4KKyAqIHJldHVybnMgRFJPUEJFQVJfU1VDQ0VTUyBvbiB2YWxpZCB1c2VybmFtZSwgRFJPUEJFQVJfRkFJTFVSRSBvbiBmYWlsdXJlICovCitzdGF0aWMgaW50IGNoZWNrdXNlcm5hbWUodW5zaWduZWQgY2hhciAqdXNlcm5hbWUsIHVuc2lnbmVkIGludCB1c2VybGVuKSB7CisKKwljaGFyKiBsaXN0c2hlbGwgPSBOVUxMOworCWNoYXIqIHVzZXJzaGVsbCA9IE5VTEw7CisJCisJVFJBQ0UoKCJlbnRlciBjaGVja3VzZXJuYW1lIikpCisJaWYgKHVzZXJsZW4gPiBNQVhfVVNFUk5BTUVfTEVOKSB7CisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0KKworCS8qIG5ldyB1c2VyIG9yIHVzZXJuYW1lIGhhcyBjaGFuZ2VkICovCisJaWYgKHNlcy5hdXRoc3RhdGUudXNlcm5hbWUgPT0gTlVMTCB8fAorCQlzdHJjbXAodXNlcm5hbWUsIHNlcy5hdXRoc3RhdGUudXNlcm5hbWUpICE9IDApIHsKKwkJCS8qIHRoZSB1c2VybmFtZSBuZWVkcyByZXNldHRpbmcgKi8KKwkJCWlmIChzZXMuYXV0aHN0YXRlLnVzZXJuYW1lICE9IE5VTEwpIHsKKwkJCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJjbGllbnQgdHJ5aW5nIG11bHRpcGxlIHVzZXJuYW1lcyBmcm9tICVzIiwKKwkJCQkJCQlzdnJfc2VzLmFkZHJzdHJpbmcpOworCQkJCW1fZnJlZShzZXMuYXV0aHN0YXRlLnVzZXJuYW1lKTsKKwkJCX0KKwkJCWF1dGhjbGVhcigpOworCQkJc2VzLmF1dGhzdGF0ZS5wdyA9IGdldHB3bmFtKChjaGFyKil1c2VybmFtZSk7CisJCQlzZXMuYXV0aHN0YXRlLnVzZXJuYW1lID0gbV9zdHJkdXAodXNlcm5hbWUpOworCQkJbV9mcmVlKHNlcy5hdXRoc3RhdGUucHJpbnRhYmxldXNlcik7CisJfQorCisJLyogY2hlY2sgdGhhdCB1c2VyIGV4aXN0cyAqLworCWlmIChzZXMuYXV0aHN0YXRlLnB3ID09IE5VTEwpIHsKKwkJVFJBQ0UoKCJsZWF2ZSBjaGVja3VzZXJuYW1lOiB1c2VyICclcycgZG9lc24ndCBleGlzdCIsIHVzZXJuYW1lKSkKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLAorCQkJCSJsb2dpbiBhdHRlbXB0IGZvciBub25leGlzdGVudCB1c2VyIGZyb20gJXMiLAorCQkJCXN2cl9zZXMuYWRkcnN0cmluZyk7CisJCXNlbmRfbXNnX3VzZXJhdXRoX2ZhaWx1cmUoMCwgMSk7CisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0KKworCS8qIFdlIGNhbiBzZXQgaXQgb25jZSB3ZSBrbm93IGl0cyBhIHJlYWwgdXNlciAqLworCXNlcy5hdXRoc3RhdGUucHJpbnRhYmxldXNlciA9IG1fc3RyZHVwKHNlcy5hdXRoc3RhdGUucHctPnB3X25hbWUpOworCisJLyogY2hlY2sgZm9yIG5vbi1yb290IGlmIGRlc2lyZWQgKi8KKwlpZiAoc3ZyX29wdHMubm9yb290bG9naW4gJiYgc2VzLmF1dGhzdGF0ZS5wdy0+cHdfdWlkID09IDApIHsKKwkJVFJBQ0UoKCJsZWF2ZSBjaGVja3VzZXJuYW1lOiByb290IGxvZ2luIGRpc2FibGVkIikpCisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInJvb3QgbG9naW4gcmVqZWN0ZWQiKTsKKwkJc2VuZF9tc2dfdXNlcmF1dGhfZmFpbHVyZSgwLCAxKTsKKwkJcmV0dXJuIERST1BCRUFSX0ZBSUxVUkU7CisJfQorCisJLyogY2hlY2sgZm9yIGFuIGVtcHR5IHBhc3N3b3JkICovCisJaWYgKHNlcy5hdXRoc3RhdGUucHctPnB3X3Bhc3N3ZFswXSA9PSAnXDAnKSB7CisJCVRSQUNFKCgibGVhdmUgY2hlY2t1c2VybmFtZTogZW1wdHkgcHdvcmQiKSkKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAidXNlciAnJXMnIGhhcyBibGFuayBwYXNzd29yZCwgcmVqZWN0ZWQiLAorCQkJCXNlcy5hdXRoc3RhdGUucHJpbnRhYmxldXNlcik7CisJCXNlbmRfbXNnX3VzZXJhdXRoX2ZhaWx1cmUoMCwgMSk7CisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0KKworCVRSQUNFKCgic2hlbGwgaXMgJXMiLCBzZXMuYXV0aHN0YXRlLnB3LT5wd19zaGVsbCkpCisKKwkvKiBjaGVjayB0aGF0IHRoZSBzaGVsbCBpcyBzZXQgKi8KKwl1c2Vyc2hlbGwgPSBzZXMuYXV0aHN0YXRlLnB3LT5wd19zaGVsbDsKKwlpZiAodXNlcnNoZWxsWzBdID09ICdcMCcpIHsKKwkJLyogZW1wdHkgc2hlbGwgaW4gL2V0Yy9wYXNzd2QgbWVhbnMgL2Jpbi9zaCBhY2NvcmRpbmcgdG8gcGFzc3dkKDUpICovCisJCXVzZXJzaGVsbCA9ICIvYmluL3NoIjsKKwl9CisKKwkvKiBjaGVjayB0aGUgc2hlbGwgaXMgdmFsaWQuIElmIC9ldGMvc2hlbGxzIGRvZXNuJ3QgZXhpc3QsIGdldHVzZXJzaGVsbCgpCisJICogc2hvdWxkIHJldHVybiBzb21lIHN0YW5kYXJkIHNoZWxscyBsaWtlICIvYmluL3NoIiBhbmQgIi9iaW4vY3NoIiAodGhpcworCSAqIGlzIHBsYXRmb3JtLXNwZWNpZmljKSAqLworCXNldHVzZXJzaGVsbCgpOworCXdoaWxlICgobGlzdHNoZWxsID0gZ2V0dXNlcnNoZWxsKCkpICE9IE5VTEwpIHsKKwkJVFJBQ0UoKCJ0ZXN0IHNoZWxsIGlzICclcyciLCBsaXN0c2hlbGwpKQorCQlpZiAoc3RyY21wKGxpc3RzaGVsbCwgdXNlcnNoZWxsKSA9PSAwKSB7CisJCQkvKiBoYXZlIGEgbWF0Y2ggKi8KKwkJCWdvdG8gZ29vZHNoZWxsOworCQl9CisJfQorCS8qIG5vIG1hdGNoaW5nIHNoZWxsICovCisJZW5kdXNlcnNoZWxsKCk7CisJVFJBQ0UoKCJubyBtYXRjaGluZyBzaGVsbCIpKQorCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInVzZXIgJyVzJyBoYXMgaW52YWxpZCBzaGVsbCwgcmVqZWN0ZWQiLAorCQkJCXNlcy5hdXRoc3RhdGUucHJpbnRhYmxldXNlcik7CisJc2VuZF9tc2dfdXNlcmF1dGhfZmFpbHVyZSgwLCAxKTsKKwlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwkKK2dvb2RzaGVsbDoKKwllbmR1c2Vyc2hlbGwoKTsKKwlUUkFDRSgoIm1hdGNoaW5nIHNoZWxsIikpCisKKwlUUkFDRSgoInVpZCA9ICVkIiwgc2VzLmF1dGhzdGF0ZS5wdy0+cHdfdWlkKSkKKwlUUkFDRSgoImxlYXZlIGNoZWNrdXNlcm5hbWUiKSkKKwlyZXR1cm4gRFJPUEJFQVJfU1VDQ0VTUzsKKworfQorCisvKiBTZW5kIGEgZmFpbHVyZSBtZXNzYWdlIHRvIHRoZSBjbGllbnQsIGluIHJlc3BvbmRzIHRvIGEgdXNlcmF1dGhfcmVxdWVzdC4KKyAqIFBhcnRpYWwgaW5kaWNhdGVzIHdoZXRoZXIgdG8gc2V0IHRoZSAicGFydGlhbCBzdWNjZXNzIiBmbGFnLAorICogaW5jcmZhaWwgaXMgd2hldGhlciB0byBjb3VudCB0aGlzIGZhaWx1cmUgaW4gdGhlIGZhaWx1cmUgY291bnQgKHdoaWNoCisgKiBpcyBsaW1pdGVkLiBUaGlzIGZ1bmN0aW9uIGFsc28gaGFuZGxlcyBkaXNjb25uZWN0aW9uIGFmdGVyIHRvbyBtYW55CisgKiBmYWlsdXJlcyAqLwordm9pZCBzZW5kX21zZ191c2VyYXV0aF9mYWlsdXJlKGludCBwYXJ0aWFsLCBpbnQgaW5jcmZhaWwpIHsKKworCWJ1ZmZlciAqdHlwZWJ1ZiA9IE5VTEw7CisKKwlUUkFDRSgoImVudGVyIHNlbmRfbXNnX3VzZXJhdXRoX2ZhaWx1cmUiKSkKKworCUNIRUNLQ0xFQVJUT1dSSVRFKCk7CisJCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgU1NIX01TR19VU0VSQVVUSF9GQUlMVVJFKTsKKworCS8qIHB1dCBhIGxpc3Qgb2YgYWxsb3dlZCB0eXBlcyAqLworCXR5cGVidWYgPSBidWZfbmV3KDMwKTsgLyogbG9uZyBlbm91Z2ggZm9yIFBVQktFWSBhbmQgUEFTU1dPUkQgKi8KKworCWlmIChzZXMuYXV0aHN0YXRlLmF1dGh0eXBlcyAmIEFVVEhfVFlQRV9QVUJLRVkpIHsKKwkJYnVmX3B1dGJ5dGVzKHR5cGVidWYsIEFVVEhfTUVUSE9EX1BVQktFWSwgQVVUSF9NRVRIT0RfUFVCS0VZX0xFTik7CisJCWlmIChzZXMuYXV0aHN0YXRlLmF1dGh0eXBlcyAmIEFVVEhfVFlQRV9QQVNTV09SRCkgeworCQkJYnVmX3B1dGJ5dGUodHlwZWJ1ZiwgJywnKTsKKwkJfQorCX0KKwkKKwlpZiAoc2VzLmF1dGhzdGF0ZS5hdXRodHlwZXMgJiBBVVRIX1RZUEVfUEFTU1dPUkQpIHsKKwkJYnVmX3B1dGJ5dGVzKHR5cGVidWYsIEFVVEhfTUVUSE9EX1BBU1NXT1JELCBBVVRIX01FVEhPRF9QQVNTV09SRF9MRU4pOworCX0KKworCWJ1Zl9zZXRwb3ModHlwZWJ1ZiwgMCk7CisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCBidWZfZ2V0cHRyKHR5cGVidWYsIHR5cGVidWYtPmxlbiksCisJCQl0eXBlYnVmLT5sZW4pOworCisJVFJBQ0UoKCJhdXRoIGZhaWw6IG1ldGhvZHMgJWQsICclcyciLCBzZXMuYXV0aHN0YXRlLmF1dGh0eXBlcywKKwkJCQlidWZfZ2V0cHRyKHR5cGVidWYsIHR5cGVidWYtPmxlbikpKTsKKworCWJ1Zl9mcmVlKHR5cGVidWYpOworCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgcGFydGlhbCA/IDEgOiAwKTsKKwllbmNyeXB0X3BhY2tldCgpOworCisJaWYgKGluY3JmYWlsKSB7CisJCXVzbGVlcCgzMDAwMDApOyAvKiBYWFggaW1wcm92ZSB0aGlzICovCisJCXNlcy5hdXRoc3RhdGUuZmFpbGNvdW50Kys7CisJfQorCisJaWYgKHNlcy5hdXRoc3RhdGUuZmFpbGNvdW50ID49IE1BWF9BVVRIX1RSSUVTKSB7CisJCWNoYXIgKiB1c2Vyc3RyOworCQkvKiBYWFggLSBzZW5kIGRpc2Nvbm5lY3QgPyAqLworCQlUUkFDRSgoIk1heCBhdXRoIHRyaWVzIHJlYWNoZWQsIGV4aXRpbmciKSkKKworCQlpZiAoc2VzLmF1dGhzdGF0ZS5wcmludGFibGV1c2VyID09IE5VTEwpIHsKKwkJCXVzZXJzdHIgPSAiaXMgaW52YWxpZCI7CisJCX0gZWxzZSB7CisJCQl1c2Vyc3RyID0gc2VzLmF1dGhzdGF0ZS5wcmludGFibGV1c2VyOworCQl9CisJCWRyb3BiZWFyX2V4aXQoIk1heCBhdXRoIHRyaWVzIHJlYWNoZWQgLSB1c2VyICclcycgZnJvbSAlcyIsCisJCQkJdXNlcnN0ciwgc3ZyX3Nlcy5hZGRyc3RyaW5nKTsKKwl9CisJCisJVFJBQ0UoKCJsZWF2ZSBzZW5kX21zZ191c2VyYXV0aF9mYWlsdXJlIikpCit9CisKKy8qIFNlbmQgYSBzdWNjZXNzIG1lc3NhZ2UgdG8gdGhlIHVzZXIsIGFuZCBzZXQgdGhlICJhdXRoZG9uZSIgZmxhZyAqLwordm9pZCBzZW5kX21zZ191c2VyYXV0aF9zdWNjZXNzKCkgeworCisJVFJBQ0UoKCJlbnRlciBzZW5kX21zZ191c2VyYXV0aF9zdWNjZXNzIikpCisKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgU1NIX01TR19VU0VSQVVUSF9TVUNDRVNTKTsKKwllbmNyeXB0X3BhY2tldCgpOworCisJc2VzLmF1dGhzdGF0ZS5hdXRoZG9uZSA9IDE7CisJc2VzLmNvbm5lY3R0aW1lb3V0ID0gMDsKKworCisJaWYgKHNlcy5hdXRoc3RhdGUucHctPnB3X3VpZCA9PSAwKSB7CisJCXNlcy5hbGxvd3ByaXZwb3J0ID0gMTsKKwl9CisKKwkvKiBSZW1vdmUgZnJvbSB0aGUgbGlzdCBvZiBwcmUtYXV0aCBzb2NrZXRzLiBTaG91bGQgYmUgbV9jbG9zZSgpLCBzaW5jZSBpZgorCSAqIHdlIGZhaWwsIHdlIG1pZ2h0IGVuZCB1cCBsZWFraW5nIGNvbm5lY3Rpb24gc2xvdHMsIGFuZCBkaXNhbGxvdyBuZXcKKwkgKiBsb2dpbnMgLSBhIG5hc3R5IHNpdHVhdGlvbi4gKi8JCQkJCQkJCisJbV9jbG9zZShzdnJfc2VzLmNoaWxkcGlwZSk7CisKKwlUUkFDRSgoImxlYXZlIHNlbmRfbXNnX3VzZXJhdXRoX3N1Y2Nlc3MiKSkKKworfQpkaWZmIC0tZ2l0IGEvc3ZyLWF1dGhwYW0uYyBiL3N2ci1hdXRocGFtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU3ZDZiYQotLS0gL2Rldi9udWxsCisrKyBiL3N2ci1hdXRocGFtLmMKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBEcm9wYmVhciBTU0gKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDA0IE1hcnRpbiBDYXJsc3NvbgorICogUG9ydGlvbnMgKGMpIDIwMDQgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKy8qIFZhbGlkYXRlcyBhIHVzZXIgcGFzc3dvcmQgdXNpbmcgUEFNICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKyNpbmNsdWRlICJhdXRoLmgiCisKKyNpZmRlZiBFTkFCTEVfU1ZSX1BBTV9BVVRICisKKyNpZiBkZWZpbmVkKEhBVkVfU0VDVVJJVFlfUEFNX0FQUExfSCkKKyNpbmNsdWRlIDxzZWN1cml0eS9wYW1fYXBwbC5oPgorI2VsaWYgZGVmaW5lZCAoSEFWRV9QQU1fUEFNX0FQUExfSCkKKyNpbmNsdWRlIDxwYW0vcGFtX2FwcGwuaD4KKyNlbmRpZgorCitzdHJ1Y3QgVXNlckRhdGFTIHsKKwljaGFyKiB1c2VyOworCWNoYXIqIHBhc3N3ZDsKK307CisKKy8qIFBBTSBjb252ZXJzYXRpb24gZnVuY3Rpb24gLSBmb3Igbm93IHdlIG9ubHkgaGFuZGxlIG9uZSBtZXNzYWdlICovCitpbnQgCitwYW1Db252RnVuYyhpbnQgbnVtX21zZywgCisJCWNvbnN0IHN0cnVjdCBwYW1fbWVzc2FnZSAqKm1zZywKKwkJc3RydWN0IHBhbV9yZXNwb25zZSAqKnJlc3BwLCAKKwkJdm9pZCAqYXBwZGF0YV9wdHIpIHsKKworCWludCByYyA9IFBBTV9TVUNDRVNTOworCXN0cnVjdCBwYW1fcmVzcG9uc2UqIHJlc3AgPSBOVUxMOworCXN0cnVjdCBVc2VyRGF0YVMqIHVzZXJEYXRhcCA9IChzdHJ1Y3QgVXNlckRhdGFTKikgYXBwZGF0YV9wdHI7CisJdW5zaWduZWQgaW50IG1zZ19sZW4gPSAwOworCXVuc2lnbmVkIGludCBpID0gMDsKKworCWNvbnN0IGNoYXIqIG1lc3NhZ2UgPSAoKm1zZyktPm1zZzsKKworCS8qIG1ha2UgYSBjb3B5IHdlIGNhbiBzdHJpcCAqLworCWNoYXIgKiBjb21wYXJlX21lc3NhZ2UgPSBtX3N0cmR1cChtZXNzYWdlKTsKKworCVRSQUNFKCgiZW50ZXIgcGFtQ29udkZ1bmMiKSkKKworCWlmIChudW1fbXNnICE9IDEpIHsKKwkJLyogSWYgeW91J3JlIGdldHRpbmcgaGVyZSAtIERyb3BiZWFyIHByb2JhYmx5IGNhbid0IHN1cHBvcnQgeW91ciBwYW0KKwkJICogbW9kdWxlcy4gVGhpcyB3aG9sZSBmaWxlIGlzIGEgYml0IG9mIGEgaGFjayBhcm91bmQgbGFjayBvZgorCQkgKiBhc3luY2hyb25vY2l0eSBpbiBQQU0gYW55d2F5LiAqLworCQlkcm9wYmVhcl9sb2coTE9HX0lORk8sICJwYW1Db252RnVuYygpIGNhbGxlZCB3aXRoID4xIG1lc3NhZ2VzOiBub3Qgc3VwcG9ydGVkLiIpOworCQlyZXR1cm4gUEFNX0NPTlZfRVJSOworCX0KKwkKKwlUUkFDRSgoIm1zZ19zdHlsZSBpcyAlZCIsICgqbXNnKS0+bXNnX3N0eWxlKSkKKwlpZiAoY29tcGFyZV9tZXNzYWdlKSB7CisJCVRSQUNFKCgibWVzc2FnZSBpcyAnJXMnIiwgY29tcGFyZV9tZXNzYWdlKSkKKwl9IGVsc2UgeworCQlUUkFDRSgoIm51bGwgbWVzc2FnZSIpKQorCX0KKworCisJLyogTWFrZSB0aGUgc3RyaW5nIGxvd2VyY2FzZS4gKi8KKwltc2dfbGVuID0gc3RybGVuKGNvbXBhcmVfbWVzc2FnZSk7CisJZm9yIChpID0gMDsgaSA8IG1zZ19sZW47IGkrKykgeworCQljb21wYXJlX21lc3NhZ2VbaV0gPSB0b2xvd2VyKGNvbXBhcmVfbWVzc2FnZVtpXSk7CisJfQorCisJLyogSWYgdGhlIHN0cmluZyBlbmRzIHdpdGggIjogIiwgcmVtb3ZlIHRoZSBzcGFjZS4gCisJICAgaWUgImxvZ2luOiAiIHZzICJsb2dpbjoiICovCisJaWYgKG1zZ19sZW4gPiAyIAorCQkJJiYgY29tcGFyZV9tZXNzYWdlW21zZ19sZW4tMl0gPT0gJzonIAorCQkJJiYgY29tcGFyZV9tZXNzYWdlW21zZ19sZW4tMV0gPT0gJyAnKSB7CisJCWNvbXBhcmVfbWVzc2FnZVttc2dfbGVuLTFdID0gJ1wwJzsKKwl9CisKKwlzd2l0Y2goKCptc2cpLT5tc2dfc3R5bGUpIHsKKworCQljYXNlIFBBTV9QUk9NUFRfRUNIT19PRkY6CisKKwkJCWlmICghKHN0cmNtcChjb21wYXJlX21lc3NhZ2UsICJwYXNzd29yZDoiKSA9PSAwKSkgeworCQkJCS8qIFdlIGRvbid0IHJlY29nbmlzZSB0aGUgcHJvbXB0IGFzIGFza2luZyBmb3IgYSBwYXNzd29yZCwKKwkJCQkgICBzbyBjYW4ndCBoYW5kbGUgaXQuIEFkZCBtb3JlIGFib3ZlIGFzIHJlcXVpcmVkIGZvcgorCQkJCSAgIGRpZmZlcmVudCBwYW0gbW9kdWxlcy9pbXBsZW1lbnRhdGlvbnMgKi8KKwkJCQlkcm9wYmVhcl9sb2coTE9HX05PVElDRSwgIlBBTSB1bmtub3duIHByb21wdCAlcyAobm8gZWNobykiLAorCQkJCQkJY29tcGFyZV9tZXNzYWdlKTsKKwkJCQlyYyA9IFBBTV9DT05WX0VSUjsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyogWW91IGhhdmUgdG8gcmVhZCB0aGUgUEFNIG1vZHVsZS13cml0ZXJzJyBkb2NzIChkbyB3ZSBsb29rIGxpa2UKKwkJCSAqIG1vZHVsZSB3cml0ZXJzPyBuby4pIHRvIGZpbmQgb3V0IHRoYXQgdGhlIG1vZHVsZSB3aWxsCisJCQkgKiBmcmVlIHRoZSBwYW1fcmVzcG9uc2UgYW5kIGl0cyByZXNwIGVsZW1lbnQgLSBpZSB3ZSBfbXVzdF8gbWFsbG9jCisJCQkgKiBpdCBoZXJlICovCisJCQlyZXNwID0gKHN0cnVjdCBwYW1fcmVzcG9uc2UqKSBtX21hbGxvYyhzaXplb2Yoc3RydWN0IHBhbV9yZXNwb25zZSkpOworCQkJbWVtc2V0KHJlc3AsIDAsIHNpemVvZihzdHJ1Y3QgcGFtX3Jlc3BvbnNlKSk7CisKKwkJCXJlc3AtPnJlc3AgPSBtX3N0cmR1cCh1c2VyRGF0YXAtPnBhc3N3ZCk7CisJCQltX2J1cm4odXNlckRhdGFwLT5wYXNzd2QsIHN0cmxlbih1c2VyRGF0YXAtPnBhc3N3ZCkpOworCQkJKCpyZXNwcCkgPSByZXNwOworCQkJYnJlYWs7CisKKworCQljYXNlIFBBTV9QUk9NUFRfRUNIT19PTjoKKworCQkJaWYgKCEoKHN0cmNtcChjb21wYXJlX21lc3NhZ2UsICJsb2dpbjoiICkgPT0gMCkgCisJCQkJfHwgKHN0cmNtcChjb21wYXJlX21lc3NhZ2UsICJwbGVhc2UgZW50ZXIgdXNlcm5hbWU6IikgPT0gMCkpKSB7CisJCQkJLyogV2UgZG9uJ3QgcmVjb2duaXNlIHRoZSBwcm9tcHQgYXMgYXNraW5nIGZvciBhIHVzZXJuYW1lLAorCQkJCSAgIHNvIGNhbid0IGhhbmRsZSBpdC4gQWRkIG1vcmUgYWJvdmUgYXMgcmVxdWlyZWQgZm9yCisJCQkJICAgZGlmZmVyZW50IHBhbSBtb2R1bGVzL2ltcGxlbWVudGF0aW9ucyAqLworCQkJCWRyb3BiZWFyX2xvZyhMT0dfTk9USUNFLCAiUEFNIHVua25vd24gcHJvbXB0ICVzICh3aXRoIGVjaG8pIiwKKwkJCQkJCWNvbXBhcmVfbWVzc2FnZSk7CisJCQkJcmMgPSBQQU1fQ09OVl9FUlI7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIFlvdSBoYXZlIHRvIHJlYWQgdGhlIFBBTSBtb2R1bGUtd3JpdGVycycgZG9jcyAoZG8gd2UgbG9vayBsaWtlCisJCQkgKiBtb2R1bGUgd3JpdGVycz8gbm8uKSB0byBmaW5kIG91dCB0aGF0IHRoZSBtb2R1bGUgd2lsbAorCQkJICogZnJlZSB0aGUgcGFtX3Jlc3BvbnNlIGFuZCBpdHMgcmVzcCBlbGVtZW50IC0gaWUgd2UgX211c3RfIG1hbGxvYworCQkJICogaXQgaGVyZSAqLworCQkJcmVzcCA9IChzdHJ1Y3QgcGFtX3Jlc3BvbnNlKikgbV9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBwYW1fcmVzcG9uc2UpKTsKKwkJCW1lbXNldChyZXNwLCAwLCBzaXplb2Yoc3RydWN0IHBhbV9yZXNwb25zZSkpOworCisJCQlyZXNwLT5yZXNwID0gbV9zdHJkdXAodXNlckRhdGFwLT51c2VyKTsKKwkJCVRSQUNFKCgidXNlckRhdGFwLT51c2VyPSclcyciLCB1c2VyRGF0YXAtPnVzZXIpKQorCQkJKCpyZXNwcCkgPSByZXNwOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCVRSQUNFKCgiVW5rbm93biBtZXNzYWdlIHR5cGUiKSkKKwkJCXJjID0gUEFNX0NPTlZfRVJSOworCQkJYnJlYWs7ICAgICAgCisJfQorCisJbV9mcmVlKGNvbXBhcmVfbWVzc2FnZSk7CisJVFJBQ0UoKCJsZWF2ZSBwYW1Db252RnVuYywgcmMgJWQiLCByYykpCisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIFByb2Nlc3MgYSBwYXNzd29yZCBhdXRoIHJlcXVlc3QsIHNlbmRpbmcgc3VjY2VzcyBvciBmYWlsdXJlIG1lc3NhZ2VzIGFzCisgKiBhcHByb3ByaWF0ZS4gVG8gdGhlIGNsaWVudCBpdCBsb29rcyBsaWtlIGl0J3MgZG9pbmcgbm9ybWFsIHBhc3N3b3JkIGF1dGggKGFzCisgKiBvcHBvc2VkIHRvIGtleWJvYXJkLWludGVyYWN0aXZlIG9yIHNvbWV0aGluZyksIHNvIHRoZSBwYW0gbW9kdWxlIGhhcyB0byBiZQorICogZmFpcmx5IHN0YW5kYXJkIChpZSBqdXN0ICJ3aGF0J3MgeW91ciB1c2VybmFtZSwgd2hhdCdzIHlvdXIgcGFzc3dvcmQsIE9LIikuCisgKgorICogS2V5Ym9hcmQgaW50ZXJhY3RpdmUgd291bGQgYmUgYSBsb3QgbmljZXIsIGJ1dCBzaW5jZSBQQU0gaXMgc3luY2hyb25vdXMsIGl0CisgKiBnZXRzIHZlcnkgbWVzc3kgdHJ5aW5nIHRvIHNlbmQgdGhlIGludGVyYWN0aXZlIGNoYWxsZW5nZXMsIGFuZCByZWFkIHRoZQorICogaW50ZXJhY3RpdmUgcmVzcG9uc2VzLCBvdmVyIHRoZSBuZXR3b3JrLiAqLwordm9pZCBzdnJfYXV0aF9wYW0oKSB7CisKKwlzdHJ1Y3QgVXNlckRhdGFTIHVzZXJEYXRhID0ge05VTEwsIE5VTEx9OworCXN0cnVjdCBwYW1fY29udiBwYW1Db252ID0geworCQlwYW1Db252RnVuYywKKwkJJnVzZXJEYXRhIC8qIHN1Ym1pdHRlZCB0byBwYW12Q29udkZ1bmMgYXMgYXBwZGF0YV9wdHIgKi8gCisJfTsKKworCXBhbV9oYW5kbGVfdCogcGFtSGFuZGxlcCA9IE5VTEw7CisKKwl1bnNpZ25lZCBjaGFyICogcGFzc3dvcmQgPSBOVUxMOworCXVuc2lnbmVkIGludCBwYXNzd29yZGxlbjsKKworCWludCByYyA9IFBBTV9TVUNDRVNTOworCXVuc2lnbmVkIGNoYXIgY2hhbmdlcHc7CisKKwkvKiBjaGVjayBpZiBjbGllbnQgd2FudHMgdG8gY2hhbmdlIHBhc3N3b3JkICovCisJY2hhbmdlcHcgPSBidWZfZ2V0Ym9vbChzZXMucGF5bG9hZCk7CisJaWYgKGNoYW5nZXB3KSB7CisJCS8qIG5vdCBpbXBsZW1lbnRlZCBieSB0aGlzIHNlcnZlciAqLworCQlzZW5kX21zZ191c2VyYXV0aF9mYWlsdXJlKDAsIDEpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJcGFzc3dvcmQgPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCAmcGFzc3dvcmRsZW4pOworCisJLyogdXNlZCB0byBwYXNzIGRhdGEgdG8gdGhlIFBBTSBjb252ZXJzYXRpb24gZnVuY3Rpb24gLSBkb24ndCBib3RoZXIgd2l0aAorCSAqIHN0cmR1cCgpIGV0YyBzaW5jZSB0aGVzZSBhcmUgdG91Y2hlZCBvbmx5IGJ5IG91ciBvd24gY29udmVyc2F0aW9uCisJICogZnVuY3Rpb24gKGFib3ZlKSB3aGljaCB0YWtlcyBjYXJlIG9mIGl0ICovCisJdXNlckRhdGEudXNlciA9IHNlcy5hdXRoc3RhdGUucHJpbnRhYmxldXNlcjsKKwl1c2VyRGF0YS5wYXNzd2QgPSBwYXNzd29yZDsKKworCS8qIEluaXQgcGFtICovCisJaWYgKChyYyA9IHBhbV9zdGFydCgic3NoZCIsIE5VTEwsICZwYW1Db252LCAmcGFtSGFuZGxlcCkpICE9IFBBTV9TVUNDRVNTKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgInBhbV9zdGFydCgpIGZhaWxlZCwgcmM9JWQsICVzXG4iLCAKKwkJCQlyYywgcGFtX3N0cmVycm9yKHBhbUhhbmRsZXAsIHJjKSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwkvKiBqdXN0IHRvIHNldCBpdCB0byBzb21ldGhpbmcgKi8KKwlpZiAoKHJjID0gcGFtX3NldF9pdGVtKHBhbUhhbmRsZXAsIFBBTV9UVFksICJzc2giKSAhPSBQQU1fU1VDQ0VTUykpIHsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAicGFtX3NldF9pdGVtKCkgZmFpbGVkLCByYz0lZCwgJXNcbiIsIAorCQkJCXJjLCBwYW1fc3RyZXJyb3IocGFtSGFuZGxlcCwgcmMpKTsKKwkJZ290byBjbGVhbnVwOworCX0KKworCSh2b2lkKSBwYW1fZmFpbF9kZWxheShwYW1IYW5kbGVwLCAwIC8qIG11c2VjX2RlbGF5ICovKTsKKworCS8qICh2b2lkKSBwYW1fc2V0X2l0ZW0ocGFtSGFuZGxlcCwgUEFNX0ZBSUxfREVMQVksICh2b2lkKikgcGFtRGVsYXlGdW5jKTsgKi8KKworCWlmICgocmMgPSBwYW1fYXV0aGVudGljYXRlKHBhbUhhbmRsZXAsIDApKSAhPSBQQU1fU1VDQ0VTUykgeworCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJwYW1fYXV0aGVudGljYXRlKCkgZmFpbGVkLCByYz0lZCwgJXNcbiIsIAorCQkJCXJjLCBwYW1fc3RyZXJyb3IocGFtSGFuZGxlcCwgcmMpKTsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLAorCQkJCSJiYWQgUEFNIHBhc3N3b3JkIGF0dGVtcHQgZm9yICclcycgZnJvbSAlcyIsCisJCQkJc2VzLmF1dGhzdGF0ZS5wcmludGFibGV1c2VyLAorCQkJCXN2cl9zZXMuYWRkcnN0cmluZyk7CisJCXNlbmRfbXNnX3VzZXJhdXRoX2ZhaWx1cmUoMCwgMSk7CisJCWdvdG8gY2xlYW51cDsKKwl9CisKKwlpZiAoKHJjID0gcGFtX2FjY3RfbWdtdChwYW1IYW5kbGVwLCAwKSkgIT0gUEFNX1NVQ0NFU1MpIHsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAicGFtX2FjY3RfbWdtdCgpIGZhaWxlZCwgcmM9JWQsICVzXG4iLCAKKwkJCQlyYywgcGFtX3N0cmVycm9yKHBhbUhhbmRsZXAsIHJjKSk7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywKKwkJCQkiYmFkIFBBTSBwYXNzd29yZCBhdHRlbXB0IGZvciAnJXMnIGZyb20gJXMiLAorCQkJCXNlcy5hdXRoc3RhdGUucHJpbnRhYmxldXNlciwKKwkJCQlzdnJfc2VzLmFkZHJzdHJpbmcpOworCQlzZW5kX21zZ191c2VyYXV0aF9mYWlsdXJlKDAsIDEpOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJLyogc3VjY2Vzc2Z1bCBhdXRoZW50aWNhdGlvbiAqLworCWRyb3BiZWFyX2xvZyhMT0dfTk9USUNFLCAiUEFNIHBhc3N3b3JkIGF1dGggc3VjY2VlZGVkIGZvciAnJXMnIGZyb20gJXMiLAorCQkJc2VzLmF1dGhzdGF0ZS5wcmludGFibGV1c2VyLAorCQkJc3ZyX3Nlcy5hZGRyc3RyaW5nKTsKKwlzZW5kX21zZ191c2VyYXV0aF9zdWNjZXNzKCk7CisKK2NsZWFudXA6CisJaWYgKHBhc3N3b3JkICE9IE5VTEwpIHsKKwkJbV9idXJuKHBhc3N3b3JkLCBwYXNzd29yZGxlbik7CisJCW1fZnJlZShwYXNzd29yZCk7CisJfQorCWlmIChwYW1IYW5kbGVwICE9IE5VTEwpIHsKKwkJVFJBQ0UoKCJwYW1fZW5kIikpCisJCSh2b2lkKSBwYW1fZW5kKHBhbUhhbmRsZXAsIDAgLyogcGFtX3N0YXR1cyAqLyk7CisJfQorfQorCisjZW5kaWYgLyogRU5BQkxFX1NWUl9QQU1fQVVUSCAqLwpkaWZmIC0tZ2l0IGEvc3ZyLWF1dGhwYXNzd2QuYyBiL3N2ci1hdXRocGFzc3dkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJlMWUyYQotLS0gL2Rldi9udWxsCisrKyBiL3N2ci1hdXRocGFzc3dkLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKy8qIFZhbGlkYXRlcyBhIHVzZXIgcGFzc3dvcmQgKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgImF1dGguaCIKKworI2lmZGVmIEVOQUJMRV9TVlJfUEFTU1dPUkRfQVVUSAorCisvKiBQcm9jZXNzIGEgcGFzc3dvcmQgYXV0aCByZXF1ZXN0LCBzZW5kaW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBtZXNzYWdlcyBhcworICogYXBwcm9wcmlhdGUgKi8KK3ZvaWQgc3ZyX2F1dGhfcGFzc3dvcmQoKSB7CisJCisjaWZkZWYgSEFWRV9TSEFET1dfSAorCXN0cnVjdCBzcHdkICpzcGFzc3dkID0gTlVMTDsKKyNlbmRpZgorCWNoYXIgKiBwYXNzd2RjcnlwdCA9IE5VTEw7IC8qIHRoZSBjcnlwdCBmcm9tIC9ldGMvcGFzc3dkIG9yIC9ldGMvc2hhZG93ICovCisJY2hhciAqIHRlc3RjcnlwdCA9IE5VTEw7IC8qIGNyeXB0IGdlbmVyYXRlZCBmcm9tIHRoZSB1c2VyJ3MgcGFzc3dvcmQgc2VudCAqLworCXVuc2lnbmVkIGNoYXIgKiBwYXNzd29yZDsKKwl1bnNpZ25lZCBpbnQgcGFzc3dvcmRsZW47CisKKwl1bnNpZ25lZCBpbnQgY2hhbmdlcHc7CisKKwlwYXNzd2RjcnlwdCA9IHNlcy5hdXRoc3RhdGUucHctPnB3X3Bhc3N3ZDsKKyNpZmRlZiBIQVZFX1NIQURPV19ICisJLyogZ2V0IHRoZSBzaGFkb3cgcGFzc3dvcmQgaWYgcG9zc2libGUgKi8KKwlzcGFzc3dkID0gZ2V0c3BuYW0oc2VzLmF1dGhzdGF0ZS5wcmludGFibGV1c2VyKTsKKwlpZiAoc3Bhc3N3ZCAhPSBOVUxMICYmIHNwYXNzd2QtPnNwX3B3ZHAgIT0gTlVMTCkgeworCQlwYXNzd2RjcnlwdCA9IHNwYXNzd2QtPnNwX3B3ZHA7CisJfQorI2VuZGlmCisKKyNpZmRlZiBERUJVR19IQUNLQ1JZUFQKKwkvKiBkZWJ1Z2dpbmcgY3J5cHQgZm9yIG5vbi1yb290IHRlc3Rpbmcgd2l0aCBzaGFkb3dzICovCisJcGFzc3dkY3J5cHQgPSBERUJVR19IQUNLQ1JZUFQ7CisjZW5kaWYKKworCS8qIGNoZWNrIGZvciBlbXB0eSBwYXNzd29yZCAtIG5lZWQgdG8gZG8gdGhpcyBhZ2FpbiBoZXJlCisJICogc2luY2UgdGhlIHNoYWRvdyBwYXNzd29yZCBtYXkgZGlmZmVyIHRvIHRoYXQgdGVzdGVkCisJICogaW4gYXV0aC5jICovCisJaWYgKHBhc3N3ZGNyeXB0WzBdID09ICdcMCcpIHsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAidXNlciAnJXMnIGhhcyBibGFuayBwYXNzd29yZCwgcmVqZWN0ZWQiLAorCQkJCXNlcy5hdXRoc3RhdGUucHJpbnRhYmxldXNlcik7CisJCXNlbmRfbXNnX3VzZXJhdXRoX2ZhaWx1cmUoMCwgMSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBjaGVjayBpZiBjbGllbnQgd2FudHMgdG8gY2hhbmdlIHBhc3N3b3JkICovCisJY2hhbmdlcHcgPSBidWZfZ2V0Ym9vbChzZXMucGF5bG9hZCk7CisJaWYgKGNoYW5nZXB3KSB7CisJCS8qIG5vdCBpbXBsZW1lbnRlZCBieSB0aGlzIHNlcnZlciAqLworCQlzZW5kX21zZ191c2VyYXV0aF9mYWlsdXJlKDAsIDEpOworCQlyZXR1cm47CisJfQorCisJcGFzc3dvcmQgPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCAmcGFzc3dvcmRsZW4pOworCisJLyogdGhlIGZpcnN0IGJ5dGVzIG9mIHBhc3N3ZGNyeXB0IGFyZSB0aGUgc2FsdCAqLworCXRlc3RjcnlwdCA9IGNyeXB0KChjaGFyKilwYXNzd29yZCwgcGFzc3dkY3J5cHQpOworCW1fYnVybihwYXNzd29yZCwgcGFzc3dvcmRsZW4pOworCW1fZnJlZShwYXNzd29yZCk7CisKKwlpZiAoc3RyY21wKHRlc3RjcnlwdCwgcGFzc3dkY3J5cHQpID09IDApIHsKKwkJLyogc3VjY2Vzc2Z1bCBhdXRoZW50aWNhdGlvbiAqLworCQlkcm9wYmVhcl9sb2coTE9HX05PVElDRSwgCisJCQkJInBhc3N3b3JkIGF1dGggc3VjY2VlZGVkIGZvciAnJXMnIGZyb20gJXMiLAorCQkJCXNlcy5hdXRoc3RhdGUucHJpbnRhYmxldXNlciwKKwkJCQlzdnJfc2VzLmFkZHJzdHJpbmcpOworCQlzZW5kX21zZ191c2VyYXV0aF9zdWNjZXNzKCk7CisJfSBlbHNlIHsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLAorCQkJCSJiYWQgcGFzc3dvcmQgYXR0ZW1wdCBmb3IgJyVzJyBmcm9tICVzIiwKKwkJCQlzZXMuYXV0aHN0YXRlLnByaW50YWJsZXVzZXIsCisJCQkJc3ZyX3Nlcy5hZGRyc3RyaW5nKTsKKwkJc2VuZF9tc2dfdXNlcmF1dGhfZmFpbHVyZSgwLCAxKTsKKwl9CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zdnItYXV0aHB1YmtleS5jIGIvc3ZyLWF1dGhwdWJrZXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjExYzg5Ci0tLSAvZGV2L251bGwKKysrIGIvc3ZyLWF1dGhwdWJrZXkuYwpAQCAtMCwwICsxLDM0NyBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworLyogUHJvY2VzcyBhIHB1YmtleSBhdXRoIHJlcXVlc3QgKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgInNpZ25rZXkuaCIKKyNpbmNsdWRlICJhdXRoLmgiCisjaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAicGFja2V0LmgiCisjaW5jbHVkZSAiYWxnby5oIgorCisjaWZkZWYgRU5BQkxFX1NWUl9QVUJLRVlfQVVUSAorCisjZGVmaW5lIE1JTl9BVVRIS0VZU19MSU5FIDEwIC8qICJzc2gtcnNhIEFCIiAtIHNob3J0IGJ1dCBkb2Vzbid0IG1hdHRlciAqLworI2RlZmluZSBNQVhfQVVUSEtFWVNfTElORSA0MjAwIC8qIG1heCBsZW5ndGggb2YgYSBsaW5lIGluIGF1dGhrZXlzICovCisKK3N0YXRpYyBpbnQgY2hlY2twdWJrZXkodW5zaWduZWQgY2hhciogYWxnbywgdW5zaWduZWQgaW50IGFsZ29sZW4sCisJCXVuc2lnbmVkIGNoYXIqIGtleWJsb2IsIHVuc2lnbmVkIGludCBrZXlibG9ibGVuKTsKK3N0YXRpYyBpbnQgY2hlY2twdWJrZXlwZXJtcygpOworc3RhdGljIHZvaWQgc2VuZF9tc2dfdXNlcmF1dGhfcGtfb2sodW5zaWduZWQgY2hhciogYWxnbywgdW5zaWduZWQgaW50IGFsZ29sZW4sCisJCXVuc2lnbmVkIGNoYXIqIGtleWJsb2IsIHVuc2lnbmVkIGludCBrZXlibG9ibGVuKTsKK3N0YXRpYyBpbnQgY2hlY2tmaWxlcGVybShjaGFyICogZmlsZW5hbWUpOworCisvKiBwcm9jZXNzIGEgcHVia2V5IGF1dGggcmVxdWVzdCwgc2VuZGluZyBzdWNjZXNzIG9yIGZhaWx1cmUgbWVzc2FnZSBhcworICogYXBwcm9wcmlhdGUgKi8KK3ZvaWQgc3ZyX2F1dGhfcHVia2V5KCkgeworCisJdW5zaWduZWQgY2hhciB0ZXN0a2V5OyAvKiB3aGV0aGVyIHdlJ3JlIGp1c3QgY2hlY2tpbmcgaWYgYSBrZXkgaXMgdXNhYmxlICovCisJdW5zaWduZWQgY2hhciogYWxnbyA9IE5VTEw7IC8qIHB1YmtleSBhbGdvICovCisJdW5zaWduZWQgaW50IGFsZ29sZW47CisJdW5zaWduZWQgY2hhcioga2V5YmxvYiA9IE5VTEw7CisJdW5zaWduZWQgaW50IGtleWJsb2JsZW47CisJYnVmZmVyICogc2lnbmJ1ZiA9IE5VTEw7CisJc2lnbl9rZXkgKiBrZXkgPSBOVUxMOworCWNoYXIqIGZwID0gTlVMTDsKKwlpbnQgdHlwZSA9IC0xOworCisJVFJBQ0UoKCJlbnRlciBwdWJrZXlhdXRoIikpCisKKwkvKiAwIGluZGljYXRlcyB1c2VyIGp1c3Qgd2FudHMgdG8gY2hlY2sgaWYga2V5IGNhbiBiZSB1c2VkLCAxIGlzIGFuCisJICogYWN0dWFsIGF0dGVtcHQqLworCXRlc3RrZXkgPSAoYnVmX2dldGJvb2woc2VzLnBheWxvYWQpID09IDApOworCisJYWxnbyA9IGJ1Zl9nZXRzdHJpbmcoc2VzLnBheWxvYWQsICZhbGdvbGVuKTsKKwlrZXlibG9ibGVuID0gYnVmX2dldGludChzZXMucGF5bG9hZCk7CisJa2V5YmxvYiA9IGJ1Zl9nZXRwdHIoc2VzLnBheWxvYWQsIGtleWJsb2JsZW4pOworCisJLyogY2hlY2sgaWYgdGhlIGtleSBpcyB2YWxpZCAqLworCWlmIChjaGVja3B1YmtleShhbGdvLCBhbGdvbGVuLCBrZXlibG9iLCBrZXlibG9ibGVuKSA9PSBEUk9QQkVBUl9GQUlMVVJFKSB7CisJCXNlbmRfbXNnX3VzZXJhdXRoX2ZhaWx1cmUoMCwgMCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGxldCB0aGVtIGtub3cgdGhhdCB0aGUga2V5IGlzIG9rIHRvIHVzZSAqLworCWlmICh0ZXN0a2V5KSB7CisJCXNlbmRfbXNnX3VzZXJhdXRoX3BrX29rKGFsZ28sIGFsZ29sZW4sIGtleWJsb2IsIGtleWJsb2JsZW4pOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBub3cgd2UgY2FuIGFjdHVhbGx5IHZlcmlmeSB0aGUgc2lnbmF0dXJlICovCisJCisJLyogZ2V0IHRoZSBrZXkgKi8KKwlrZXkgPSBuZXdfc2lnbl9rZXkoKTsKKwl0eXBlID0gRFJPUEJFQVJfU0lHTktFWV9BTlk7CisJaWYgKGJ1Zl9nZXRfcHViX2tleShzZXMucGF5bG9hZCwga2V5LCAmdHlwZSkgPT0gRFJPUEJFQVJfRkFJTFVSRSkgeworCQlzZW5kX21zZ191c2VyYXV0aF9mYWlsdXJlKDAsIDEpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBjcmVhdGUgdGhlIGRhdGEgd2hpY2ggaGFzIGJlZW4gc2lnbmVkIC0gdGhpcyBhIHN0cmluZyBjb250YWluaW5nCisJICogc2Vzc2lvbl9pZCwgY29uY2F0ZW5hdGVkIHdpdGggdGhlIHBheWxvYWQgcGFja2V0IHVwIHRvIHRoZSBzaWduYXR1cmUgKi8KKwlzaWduYnVmID0gYnVmX25ldyhzZXMucGF5bG9hZC0+cG9zICsgNCArIFNIQTFfSEFTSF9TSVpFKTsKKwlidWZfcHV0c3RyaW5nKHNpZ25idWYsIHNlcy5zZXNzaW9uX2lkLCBTSEExX0hBU0hfU0laRSk7CisJYnVmX3B1dGJ5dGVzKHNpZ25idWYsIHNlcy5wYXlsb2FkLT5kYXRhLCBzZXMucGF5bG9hZC0+cG9zKTsKKwlidWZfc2V0cG9zKHNpZ25idWYsIDApOworCisJLyogLi4uIGFuZCBmaW5hbGx5IHZlcmlmeSB0aGUgc2lnbmF0dXJlICovCisJZnAgPSBzaWduX2tleV9maW5nZXJwcmludChrZXlibG9iLCBrZXlibG9ibGVuKTsKKwlpZiAoYnVmX3ZlcmlmeShzZXMucGF5bG9hZCwga2V5LCBidWZfZ2V0cHRyKHNpZ25idWYsIHNpZ25idWYtPmxlbiksCisJCQkJc2lnbmJ1Zi0+bGVuKSA9PSBEUk9QQkVBUl9TVUNDRVNTKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfTk9USUNFLAorCQkJCSJwdWJrZXkgYXV0aCBzdWNjZWVkZWQgZm9yICclcycgd2l0aCBrZXkgJXMgZnJvbSAlcyIsCisJCQkJc2VzLmF1dGhzdGF0ZS5wcmludGFibGV1c2VyLCBmcCwgc3ZyX3Nlcy5hZGRyc3RyaW5nKTsKKwkJc2VuZF9tc2dfdXNlcmF1dGhfc3VjY2VzcygpOworCX0gZWxzZSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywKKwkJCQkicHVia2V5IGF1dGggYmFkIHNpZ25hdHVyZSBmb3IgJyVzJyB3aXRoIGtleSAlcyBmcm9tICVzIiwKKwkJCQlzZXMuYXV0aHN0YXRlLnByaW50YWJsZXVzZXIsIGZwLCBzdnJfc2VzLmFkZHJzdHJpbmcpOworCQlzZW5kX21zZ191c2VyYXV0aF9mYWlsdXJlKDAsIDEpOworCX0KKwltX2ZyZWUoZnApOworCitvdXQ6CisJLyogY2xlYW51cCBzdHVmZiAqLworCWlmIChzaWduYnVmKSB7CisJCWJ1Zl9mcmVlKHNpZ25idWYpOworCX0KKwlpZiAoYWxnbykgeworCQltX2ZyZWUoYWxnbyk7CisJfQorCWlmIChrZXkpIHsKKwkJc2lnbl9rZXlfZnJlZShrZXkpOworCQlrZXkgPSBOVUxMOworCX0KKwlUUkFDRSgoImxlYXZlIHB1YmtleWF1dGgiKSkKK30KKworLyogUmVwbHkgdGhhdCB0aGUga2V5IGlzIHZhbGlkIGZvciBhdXRoLCB0aGlzIGlzIHNlbnQgd2hlbiB0aGUgdXNlciBzZW5kcworICogYSBzdHJhaWdodCBjb3B5IG9mIHRoZWlyIHB1YmtleSB0byB0ZXN0LCB0byBhdm9pZCBoYXZpbmcgdG8gcGVyZm9ybQorICogZXhwZW5zaXZlIHNpZ25pbmcgb3BlcmF0aW9ucyB3aXRoIGEgd29ydGhsZXNzIGtleSAqLworc3RhdGljIHZvaWQgc2VuZF9tc2dfdXNlcmF1dGhfcGtfb2sodW5zaWduZWQgY2hhciogYWxnbywgdW5zaWduZWQgaW50IGFsZ29sZW4sCisJCXVuc2lnbmVkIGNoYXIqIGtleWJsb2IsIHVuc2lnbmVkIGludCBrZXlibG9ibGVuKSB7CisKKwlUUkFDRSgoImVudGVyIHNlbmRfbXNnX3VzZXJhdXRoX3BrX29rIikpCisJQ0hFQ0tDTEVBUlRPV1JJVEUoKTsKKworCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIFNTSF9NU0dfVVNFUkFVVEhfUEtfT0spOworCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgYWxnbywgYWxnb2xlbik7CisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCBrZXlibG9iLCBrZXlibG9ibGVuKTsKKworCWVuY3J5cHRfcGFja2V0KCk7CisJVFJBQ0UoKCJsZWF2ZSBzZW5kX21zZ191c2VyYXV0aF9wa19vayIpKQorCit9CisKKy8qIENoZWNrcyB3aGV0aGVyIGEgc3BlY2lmaWVkIHB1YmxpY2tleSAoYW5kIGFzc29jaWF0ZWQgYWxnb3JpdGhtKSBpcyBhbgorICogYWNjZXB0YWJsZSBrZXkgZm9yIGF1dGhlbnRpY2F0aW9uICovCisvKiBSZXR1cm5zIERST1BCRUFSX1NVQ0NFU1MgaWYga2V5IGlzIG9rIGZvciBhdXRoLCBEUk9QQkVBUl9GQUlMVVJFIG90aGVyd2lzZSAqLworc3RhdGljIGludCBjaGVja3B1YmtleSh1bnNpZ25lZCBjaGFyKiBhbGdvLCB1bnNpZ25lZCBpbnQgYWxnb2xlbiwKKwkJdW5zaWduZWQgY2hhcioga2V5YmxvYiwgdW5zaWduZWQgaW50IGtleWJsb2JsZW4pIHsKKworCUZJTEUgKiBhdXRoZmlsZSA9IE5VTEw7CisJY2hhciAqIGZpbGVuYW1lID0gTlVMTDsKKwlpbnQgcmV0ID0gRFJPUEJFQVJfRkFJTFVSRTsKKwlidWZmZXIgKiBsaW5lID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgbGVuLCBwb3M7CisJCisJVFJBQ0UoKCJlbnRlciBjaGVja3B1YmtleSIpKQorCisJLyogY2hlY2sgdGhhdCB3ZSBjYW4gdXNlIHRoZSBhbGdvICovCisJaWYgKGhhdmVfYWxnbyhhbGdvLCBhbGdvbGVuLCBzc2hob3N0a2V5KSA9PSBEUk9QQkVBUl9GQUlMVVJFKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywKKwkJCQkicHVia2V5IGF1dGggYXR0ZW1wdCB3aXRoIHVua25vd24gYWxnbyBmb3IgJyVzJyBmcm9tICVzIiwKKwkJCQlzZXMuYXV0aHN0YXRlLnByaW50YWJsZXVzZXIsIHN2cl9zZXMuYWRkcnN0cmluZyk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGNoZWNrIGZpbGUgcGVybWlzc2lvbnMsIGFsc28gd2hldGhlciBmaWxlIGV4aXN0cyAqLworCWlmIChjaGVja3B1YmtleXBlcm1zKCkgPT0gRFJPUEJFQVJfRkFJTFVSRSkgeworCQlUUkFDRSgoImJhZCBhdXRob3JpemVkX2tleXMgcGVybWlzc2lvbnMsIG9yIGZpbGUgZG9lc24ndCBleGlzdCIpKQorCQlnb3RvIG91dDsKKwl9CisKKwkvKiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHB3IGFuZCBwd19kaXIgZm9yIHZhbGlkaXR5LCBzaW5jZQorCSAqIGl0cyBiZWVuIGRvbmUgaW4gY2hlY2twdWJrZXlwZXJtcy4gKi8KKwlsZW4gPSBzdHJsZW4oc2VzLmF1dGhzdGF0ZS5wdy0+cHdfZGlyKTsKKwkvKiBhbGxvY2F0ZSBtYXggcmVxdWlyZWQgcGF0aG5hbWUgc3RvcmFnZSwKKwkgKiA9IHBhdGggKyAiLy5zc2gvYXV0aG9yaXplZF9rZXlzIiArICdcMCcgPSBwYXRobGVuICsgMjIgKi8KKwlmaWxlbmFtZSA9IG1fbWFsbG9jKGxlbiArIDIyKTsKKwlzbnByaW50ZihmaWxlbmFtZSwgbGVuICsgMjIsICIlcy8uc3NoL2F1dGhvcml6ZWRfa2V5cyIsIAorCQkJCXNlcy5hdXRoc3RhdGUucHctPnB3X2Rpcik7CisKKwkvKiBvcGVuIHRoZSBmaWxlICovCisJYXV0aGZpbGUgPSBmb3BlbihmaWxlbmFtZSwgInIiKTsKKwlpZiAoYXV0aGZpbGUgPT0gTlVMTCkgeworCQlnb3RvIG91dDsKKwl9CisJVFJBQ0UoKCJjaGVja3B1YmtleTogb3BlbmVkIGF1dGhvcml6ZWRfa2V5cyBPSyIpKQorCisJbGluZSA9IGJ1Zl9uZXcoTUFYX0FVVEhLRVlTX0xJTkUpOworCisJLyogaXRlcmF0ZSB0aHJvdWdoIHRoZSBsaW5lcyAqLworCWRvIHsKKworCQlpZiAoYnVmX2dldGxpbmUobGluZSwgYXV0aGZpbGUpID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJCS8qIEVPRiByZWFjaGVkICovCisJCQlUUkFDRSgoImNoZWNrcHVia2V5OiBhdXRob3JpemVkX2tleXMgRU9GIHJlYWNoZWQiKSkKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGxpbmUtPmxlbiA8IE1JTl9BVVRIS0VZU19MSU5FKSB7CisJCQlUUkFDRSgoImNoZWNrcHVia2V5OiBsaW5lIHRvbyBzaG9ydCIpKQorCQkJY29udGludWU7IC8qIGxpbmUgaXMgdG9vIHNob3J0IGZvciBpdCB0byBiZSBhIHZhbGlkIGtleSAqLworCQl9CisKKwkJLyogY2hlY2sgdGhlIGtleSB0eXBlIC0gdGhpcyBhbHNvIHN0b3BzIHVzIGZyb20gdXNpbmcga2V5cworCQkgKiB3aGljaCBoYXZlIG9wdGlvbnMgd2l0aCB0aGVtICovCisJCWlmIChzdHJuY21wKGJ1Zl9nZXRwdHIobGluZSwgYWxnb2xlbiksIGFsZ28sIGFsZ29sZW4pICE9IDApIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJ1Zl9pbmNycG9zKGxpbmUsIGFsZ29sZW4pOworCQkKKwkJLyogY2hlY2sgZm9yIHNwYWNlICgnICcpIGNoYXJhY3RlciAqLworCQlpZiAoYnVmX2dldGJ5dGUobGluZSkgIT0gJyAnKSB7CisJCQlUUkFDRSgoImNoZWNrcHVia2V5OiBzcGFjZSBjaGFyYWN0ZXIgZXhwZWN0ZWQsIGlzbid0IHRoZXJlIikpCisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIHRydW5jYXRlIHRoZSBsaW5lIGF0IHRoZSBzcGFjZSBhZnRlciB0aGUgYmFzZTY0IGRhdGEgKi8KKwkJcG9zID0gbGluZS0+cG9zOworCQlmb3IgKGxlbiA9IDA7IGxpbmUtPnBvcyA8IGxpbmUtPmxlbjsgbGVuKyspIHsKKwkJCWlmIChidWZfZ2V0Ynl0ZShsaW5lKSA9PSAnICcpIGJyZWFrOworCQl9CQorCQlidWZfc2V0cG9zKGxpbmUsIHBvcyk7CisJCWJ1Zl9zZXRsZW4obGluZSwgbGluZS0+cG9zICsgbGVuKTsKKworCQlUUkFDRSgoImNoZWNrcHVia2V5OiBsaW5lIHBvcyA9ICVkIGxlbiA9ICVkIiwgbGluZS0+cG9zLCBsaW5lLT5sZW4pKQorCisJCXJldCA9IGNtcF9iYXNlNjRfa2V5KGtleWJsb2IsIGtleWJsb2JsZW4sIGFsZ28sIGFsZ29sZW4sIGxpbmUsIE5VTEwpOworCQlpZiAocmV0ID09IERST1BCRUFSX1NVQ0NFU1MpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyogV2UgY29udGludWUgdG8gdGhlIG5leHQgbGluZSBvdGhlcndpc2UgKi8KKwkJCisJfSB3aGlsZSAoMSk7CisKK291dDoKKwlpZiAoYXV0aGZpbGUpIHsKKwkJZmNsb3NlKGF1dGhmaWxlKTsKKwl9CisJaWYgKGxpbmUpIHsKKwkJYnVmX2ZyZWUobGluZSk7CisJfQorCW1fZnJlZShmaWxlbmFtZSk7CisJVFJBQ0UoKCJsZWF2ZSBjaGVja3B1YmtleTogcmV0PSVkIiwgcmV0KSkKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIFJldHVybnMgRFJPUEJFQVJfU1VDQ0VTUyBpZiBmaWxlIHBlcm1pc3Npb25zIGZvciBwdWJrZXlzIGFyZSBvaywKKyAqIERST1BCRUFSX0ZBSUxVUkUgb3RoZXJ3aXNlLgorICogQ2hlY2tzIHRoYXQgdGhlIHVzZXIncyBob21lZGlyLCB+Ly5zc2gsIGFuZAorICogfi8uc3NoL2F1dGhvcml6ZWRfa2V5cyBhcmUgYWxsIG93bmVkIGJ5IGVpdGhlciByb290IG9yIHRoZSB1c2VyLCBhbmQgYXJlCisgKiBnLXcsIG8tdyAqLworc3RhdGljIGludCBjaGVja3B1YmtleXBlcm1zKCkgeworCisJY2hhciogZmlsZW5hbWUgPSBOVUxMOyAKKwlpbnQgcmV0ID0gRFJPUEJFQVJfRkFJTFVSRTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJVFJBQ0UoKCJlbnRlciBjaGVja3B1YmtleXBlcm1zIikpCisKKwlpZiAoc2VzLmF1dGhzdGF0ZS5wdy0+cHdfZGlyID09IE5VTEwpIHsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKChsZW4gPSBzdHJsZW4oc2VzLmF1dGhzdGF0ZS5wdy0+cHdfZGlyKSkgPT0gMCkgeworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBhbGxvY2F0ZSBtYXggcmVxdWlyZWQgcGF0aG5hbWUgc3RvcmFnZSwKKwkgKiA9IHBhdGggKyAiLy5zc2gvYXV0aG9yaXplZF9rZXlzIiArICdcMCcgPSBwYXRobGVuICsgMjIgKi8KKwlmaWxlbmFtZSA9IG1fbWFsbG9jKGxlbiArIDIyKTsKKwlzdHJuY3B5KGZpbGVuYW1lLCBzZXMuYXV0aHN0YXRlLnB3LT5wd19kaXIsIGxlbisxKTsKKworCS8qIGNoZWNrIH4gKi8KKwlpZiAoY2hlY2tmaWxlcGVybShmaWxlbmFtZSkgIT0gRFJPUEJFQVJfU1VDQ0VTUykgeworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBjaGVjayB+Ly5zc2ggKi8KKwlzdHJuY2F0KGZpbGVuYW1lLCAiLy5zc2giLCA1KTsgLyogc3RybGVuKCIvLnNzaCIpID09IDUgKi8KKwlpZiAoY2hlY2tmaWxlcGVybShmaWxlbmFtZSkgIT0gRFJPUEJFQVJfU1VDQ0VTUykgeworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBub3cgY2hlY2sgfi8uc3NoL2F1dGhvcml6ZWRfa2V5cyAqLworCXN0cm5jYXQoZmlsZW5hbWUsICIvYXV0aG9yaXplZF9rZXlzIiwgMTYpOworCWlmIChjaGVja2ZpbGVwZXJtKGZpbGVuYW1lKSAhPSBEUk9QQkVBUl9TVUNDRVNTKSB7CisJCWdvdG8gb3V0OworCX0KKworCS8qIGZpbGUgbG9va3Mgb2ssIHJldHVybiBzdWNjZXNzICovCisJcmV0ID0gRFJPUEJFQVJfU1VDQ0VTUzsKKwkKK291dDoKKwltX2ZyZWUoZmlsZW5hbWUpOworCisJVFJBQ0UoKCJsZWF2ZSBjaGVja3B1YmtleXBlcm1zIikpCisJcmV0dXJuIHJldDsKK30KKworLyogQ2hlY2tzIHRoYXQgYSBmaWxlIGlzIG93bmVkIGJ5IHRoZSB1c2VyIG9yIHJvb3QsIGFuZCBpc24ndCB3cml0YWJsZSBieQorICogZ3JvdXAgb3Igb3RoZXIgKi8KKy8qIHJldHVybnMgRFJPUEJFQVJfU1VDQ0VTUyBvciBEUk9QQkVBUl9GQUlMVVJFICovCitzdGF0aWMgaW50IGNoZWNrZmlsZXBlcm0oY2hhciAqIGZpbGVuYW1lKSB7CisJc3RydWN0IHN0YXQgZmlsZXN0YXQ7CisJaW50IGJhZHBlcm0gPSAwOworCisJVFJBQ0UoKCJlbnRlciBjaGVja2ZpbGVwZXJtKCVzKSIsIGZpbGVuYW1lKSkKKworCWlmIChzdGF0KGZpbGVuYW1lLCAmZmlsZXN0YXQpICE9IDApIHsKKwkJVFJBQ0UoKCJsZWF2ZSBjaGVja2ZpbGVwZXJtOiBzdGF0KCkgIT0gMCIpKQorCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9CisJLyogY2hlY2sgb3duZXJzaGlwIC0gdXNlciBvciByb290IG9ubHkqLworCWlmIChmaWxlc3RhdC5zdF91aWQgIT0gc2VzLmF1dGhzdGF0ZS5wdy0+cHdfdWlkCisJCQkmJiBmaWxlc3RhdC5zdF91aWQgIT0gMCkgeworCQliYWRwZXJtID0gMTsKKwkJVFJBQ0UoKCJ3cm9uZyBvd25lcnNoaXAiKSkKKwl9CisJLyogY2hlY2sgcGVybWlzc2lvbnMgLSBkb24ndCB3YW50IGdyb3VwIG9yIG90aGVycyArdyAqLworCWlmIChmaWxlc3RhdC5zdF9tb2RlICYgKFNfSVdHUlAgfCBTX0lXT1RIKSkgeworCQliYWRwZXJtID0gMTsKKwkJVFJBQ0UoKCJ3cm9uZyBwZXJtcyIpKQorCX0KKwlpZiAoYmFkcGVybSkgeworCQlpZiAoIXNlcy5hdXRoc3RhdGUucGVybV93YXJuKSB7CisJCQlzZXMuYXV0aHN0YXRlLnBlcm1fd2FybiA9IDE7CisJCQlkcm9wYmVhcl9sb2coTE9HX0lORk8sICIlcyBtdXN0IGJlIG93bmVkIGJ5IHVzZXIgb3Igcm9vdCwgYW5kIG5vdCB3cml0YWJsZSBieSBvdGhlcnMiLCBmaWxlbmFtZSk7CisJCX0KKwkJVFJBQ0UoKCJsZWF2ZSBjaGVja2ZpbGVwZXJtOiBmYWlsdXJlIHBlcm1zL293bmVyIikpCisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0KKworCVRSQUNFKCgibGVhdmUgY2hlY2tmaWxlcGVybTogc3VjY2VzcyIpKQorCXJldHVybiBEUk9QQkVBUl9TVUNDRVNTOworfQorCisKKyNlbmRpZiAKZGlmZiAtLWdpdCBhL3N2ci1jaGFuc2Vzc2lvbi5jIGIvc3ZyLWNoYW5zZXNzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5YTQ1MQotLS0gL2Rldi9udWxsCisrKyBiL3N2ci1jaGFuc2Vzc2lvbi5jCkBAIC0wLDAgKzEsMTA0MSBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAicGFja2V0LmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgImNoYW5uZWwuaCIKKyNpbmNsdWRlICJjaGFuc2Vzc2lvbi5oIgorI2luY2x1ZGUgInNzaHB0eS5oIgorI2luY2x1ZGUgInRlcm1jb2Rlcy5oIgorI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgInJhbmRvbS5oIgorI2luY2x1ZGUgInV0bXAuaCIKKyNpbmNsdWRlICJ4MTFmd2QuaCIKKyNpbmNsdWRlICJhZ2VudGZ3ZC5oIgorI2luY2x1ZGUgInJ1bm9wdHMuaCIKKworLyogSGFuZGxlcyBzZXNzaW9ucyAoZWl0aGVyIHNoZWxscyBvciBwcm9ncmFtcykgcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQgKi8KKworc3RhdGljIGludCBzZXNzaW9uY29tbWFuZChzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCwgc3RydWN0IENoYW5TZXNzICpjaGFuc2VzcywKKwkJaW50IGlzY21kLCBpbnQgaXNzdWJzeXMpOworc3RhdGljIGludCBzZXNzaW9ucHR5KHN0cnVjdCBDaGFuU2VzcyAqIGNoYW5zZXNzKTsKK3N0YXRpYyBpbnQgc2Vzc2lvbnNpZ25hbChzdHJ1Y3QgQ2hhblNlc3MgKmNoYW5zZXNzKTsKK3N0YXRpYyBpbnQgbm9wdHljb21tYW5kKHN0cnVjdCBDaGFubmVsICpjaGFubmVsLCBzdHJ1Y3QgQ2hhblNlc3MgKmNoYW5zZXNzKTsKK3N0YXRpYyBpbnQgcHR5Y29tbWFuZChzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCwgc3RydWN0IENoYW5TZXNzICpjaGFuc2Vzcyk7CitzdGF0aWMgaW50IHNlc3Npb253aW5jaGFuZ2Uoc3RydWN0IENoYW5TZXNzICpjaGFuc2Vzcyk7CitzdGF0aWMgdm9pZCBleGVjY2hpbGQoc3RydWN0IENoYW5TZXNzICpjaGFuc2Vzcyk7CitzdGF0aWMgdm9pZCBhZGRjaGlsZHBpZChzdHJ1Y3QgQ2hhblNlc3MgKmNoYW5zZXNzLCBwaWRfdCBwaWQpOworc3RhdGljIHZvaWQgc2Vzc3NpZ2NoaWxkX2hhbmRsZXIoaW50IHZhbCk7CitzdGF0aWMgdm9pZCBjbG9zZWNoYW5zZXNzKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKTsKK3N0YXRpYyBpbnQgbmV3Y2hhbnNlc3Moc3RydWN0IENoYW5uZWwgKmNoYW5uZWwpOworc3RhdGljIHZvaWQgY2hhbnNlc3Npb25yZXF1ZXN0KHN0cnVjdCBDaGFubmVsICpjaGFubmVsKTsKKworc3RhdGljIHZvaWQgc2VuZF9leGl0c2lnbmFsc3RhdHVzKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKTsKK3N0YXRpYyB2b2lkIHNlbmRfbXNnX2NoYW5zZXNzX2V4aXRzdGF0dXMoc3RydWN0IENoYW5uZWwgKiBjaGFubmVsLAorCQlzdHJ1Y3QgQ2hhblNlc3MgKiBjaGFuc2Vzcyk7CitzdGF0aWMgdm9pZCBzZW5kX21zZ19jaGFuc2Vzc19leGl0c2lnbmFsKHN0cnVjdCBDaGFubmVsICogY2hhbm5lbCwKKwkJc3RydWN0IENoYW5TZXNzICogY2hhbnNlc3MpOworc3RhdGljIHZvaWQgZ2V0X3Rlcm1tb2RlcyhzdHJ1Y3QgQ2hhblNlc3MgKmNoYW5zZXNzKTsKKworCisvKiByZXF1aXJlZCB0byBjbGVhciBlbnZpcm9ubWVudCAqLworZXh0ZXJuIGNoYXIqKiBlbnZpcm9uOworCitzdGF0aWMgaW50IHNlc3NjaGVja2Nsb3NlKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKSB7CisJc3RydWN0IENoYW5TZXNzICpjaGFuc2VzcyA9IChzdHJ1Y3QgQ2hhblNlc3MqKWNoYW5uZWwtPnR5cGVkYXRhOworCVRSQUNFKCgic2Vzc2NoZWNrY2xvc2UsIHBpZCBpcyAlZCIsIGNoYW5zZXNzLT5leGl0LmV4aXRwaWQpKQorCXJldHVybiBjaGFuc2Vzcy0+ZXhpdC5leGl0cGlkICE9IC0xOworfQorCisvKiBIYW5kbGVyIGZvciBjaGlsZHMgZXhpdGluZywgc3RvcmUgdGhlIHN0YXRlIGZvciByZXR1cm4gdG8gdGhlIGNsaWVudCAqLworCisvKiBUaGVyZSdzIGEgcGFydGljdWxhciByYWNlIHdlIGhhdmUgdG8gd2F0Y2ggb3V0IGZvcjogaWYgdGhlIGZvcmtlZCBjaGlsZAorICogZXhlY3V0ZXMsIGV4aXRzLCBhbmQgdGhpcyBzaWduYWwtaGFuZGxlciBpcyBjYWxsZWQsIGFsbCBiZWZvcmUgdGhlIHBhcmVudAorICogZ2V0cyB0byBydW4sIHRoZW4gdGhlIGNoaWxkcGlkc1tdIGFycmF5IHdvbid0IGhhdmUgdGhlIHBpZCBpbiBpdC4gSGVuY2Ugd2UKKyAqIHVzZSB0aGUgc3ZyX3Nlcy5sYXN0ZXhpdCBzdHJ1Y3QgdG8gaG9sZCB0aGUgZXhpdCwgd2hpY2ggaXMgdGhlbiBjb21wYXJlZCBieQorICogdGhlIHBhcmVudCB3aGVuIGl0IHJ1bnMuIFRoaXMgd29yayBjb3JyZWN0bHkgYXQgbGVhc3QgaW4gdGhlIGNhc2Ugb2YgYQorICogc2luZ2xlIHNoZWxsIHNwYXduZWQgKGllIHRoZSB1c3VhbCBjYXNlKSAqLworc3RhdGljIHZvaWQgc2Vzc3NpZ2NoaWxkX2hhbmRsZXIoaW50IFVOVVNFRChkdW1teSkpIHsKKworCWludCBzdGF0dXM7CisJcGlkX3QgcGlkOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBzaWdhY3Rpb24gc2FfY2hsZDsKKwlzdHJ1Y3QgZXhpdGluZm8gKmV4aXQgPSBOVUxMOworCisJVFJBQ0UoKCJlbnRlciBzaWdjaGxkIGhhbmRsZXIiKSkKKwl3aGlsZSAoKHBpZCA9IHdhaXRwaWQoLTEsICZzdGF0dXMsIFdOT0hBTkcpKSA+IDApIHsKKwkJVFJBQ0UoKCJzaWdjaGxkIGhhbmRsZXI6IHBpZCAlZCIsIHBpZCkpCisKKwkJZXhpdCA9IE5VTEw7CisJCS8qIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2hhbnNlc3MgKi8KKwkJZm9yIChpID0gMDsgaSA8IHN2cl9zZXMuY2hpbGRwaWRzaXplOyBpKyspIHsKKwkJCWlmIChzdnJfc2VzLmNoaWxkcGlkc1tpXS5waWQgPT0gcGlkKSB7CisJCQkJVFJBQ0UoKCJmb3VuZCBtYXRjaCBzZXNzaW9uIikpOworCQkJCWV4aXQgPSAmc3ZyX3Nlcy5jaGlsZHBpZHNbaV0uY2hhbnNlc3MtPmV4aXQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBJZiB0aGUgcGlkIHdhc24ndCBtYXRjaGVkLCB0aGVuIHdlIG1pZ2h0IGhhdmUgaGl0IHRoZSByYWNlIG1lbnRpb25lZAorCQkgKiBhYm92ZS4gU28gd2UganVzdCBzdG9yZSB0aGUgaW5mbyBmb3IgdGhlIHBhcmVudCB0byBkZWFsIHdpdGggKi8KKwkJaWYgKGV4aXQgPT0gTlVMTCkgeworCQkJVFJBQ0UoKCJ1c2luZyBsYXN0ZXhpdCIpKTsKKwkJCWV4aXQgPSAmc3ZyX3Nlcy5sYXN0ZXhpdDsKKwkJfQorCisJCWV4aXQtPmV4aXRwaWQgPSBwaWQ7CisJCWlmIChXSUZFWElURUQoc3RhdHVzKSkgeworCQkJZXhpdC0+ZXhpdHN0YXR1cyA9IFdFWElUU1RBVFVTKHN0YXR1cyk7CisJCX0KKwkJaWYgKFdJRlNJR05BTEVEKHN0YXR1cykpIHsKKwkJCWV4aXQtPmV4aXRzaWduYWwgPSBXVEVSTVNJRyhzdGF0dXMpOworI2lmICFkZWZpbmVkKEFJWCkgJiYgZGVmaW5lZChXQ09SRURVTVApCisJCQlleGl0LT5leGl0Y29yZSA9IFdDT1JFRFVNUChzdGF0dXMpOworI2Vsc2UKKwkJCWV4aXQtPmV4aXRjb3JlID0gMDsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJLyogd2UgdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIGhvdyBwaWQgZXhpdGVkICovCisJCQlleGl0LT5leGl0c2lnbmFsID0gLTE7CisJCX0KKwkJCisJCS8qIE1ha2Ugc3VyZSB0aGF0IHRoZSBtYWluIHNlbGVjdCgpIGxvb3Agd2FrZXMgdXAgKi8KKwkJd2hpbGUgKDEpIHsKKwkJCS8qIGlzc2VydmVyIGlzIGp1c3QgYSByYW5kb20gYnl0ZSB0byB3cml0ZS4gV2UgY2FuJ3QgZG8gYW55dGhpbmcKKwkJCWFib3V0IGFuIGVycm9yIHNvIHNob3VsZCBqdXN0IGlnbm9yZSBpdCAqLworCQkJaWYgKHdyaXRlKHNlcy5zaWduYWxfcGlwZVsxXSwgJnNlcy5pc3NlcnZlciwgMSkgPT0gMQorCQkJCQl8fCBlcnJubyAhPSBFSU5UUikgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJc2FfY2hsZC5zYV9oYW5kbGVyID0gc2Vzc3NpZ2NoaWxkX2hhbmRsZXI7CisJc2FfY2hsZC5zYV9mbGFncyA9IFNBX05PQ0xEU1RPUDsKKwlzaWdhY3Rpb24oU0lHQ0hMRCwgJnNhX2NobGQsIE5VTEwpOworCVRSQUNFKCgibGVhdmUgc2lnY2hsZCBoYW5kbGVyIikpCit9CisKKy8qIHNlbmQgdGhlIGV4aXQgc3RhdHVzIG9yIHRoZSBzaWduYWwgY2F1c2luZyB0ZXJtaW5hdGlvbiBmb3IgYSBzZXNzaW9uICovCitzdGF0aWMgdm9pZCBzZW5kX2V4aXRzaWduYWxzdGF0dXMoc3RydWN0IENoYW5uZWwgKmNoYW5uZWwpIHsKKworCXN0cnVjdCBDaGFuU2VzcyAqY2hhbnNlc3MgPSAoc3RydWN0IENoYW5TZXNzKiljaGFubmVsLT50eXBlZGF0YTsKKworCWlmIChjaGFuc2Vzcy0+ZXhpdC5leGl0cGlkID49IDApIHsKKwkJaWYgKGNoYW5zZXNzLT5leGl0LmV4aXRzaWduYWwgPiAwKSB7CisJCQlzZW5kX21zZ19jaGFuc2Vzc19leGl0c2lnbmFsKGNoYW5uZWwsIGNoYW5zZXNzKTsKKwkJfSBlbHNlIHsKKwkJCXNlbmRfbXNnX2NoYW5zZXNzX2V4aXRzdGF0dXMoY2hhbm5lbCwgY2hhbnNlc3MpOworCQl9CisJfQorfQorCisvKiBzZW5kIHRoZSBleGl0c3RhdHVzIHRvIHRoZSBjbGllbnQgKi8KK3N0YXRpYyB2b2lkIHNlbmRfbXNnX2NoYW5zZXNzX2V4aXRzdGF0dXMoc3RydWN0IENoYW5uZWwgKiBjaGFubmVsLAorCQlzdHJ1Y3QgQ2hhblNlc3MgKiBjaGFuc2VzcykgeworCisJZHJvcGJlYXJfYXNzZXJ0KGNoYW5zZXNzLT5leGl0LmV4aXRwaWQgIT0gLTEpOworCWRyb3BiZWFyX2Fzc2VydChjaGFuc2Vzcy0+ZXhpdC5leGl0c2lnbmFsID09IC0xKTsKKworCUNIRUNLQ0xFQVJUT1dSSVRFKCk7CisKKwlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCBTU0hfTVNHX0NIQU5ORUxfUkVRVUVTVCk7CisJYnVmX3B1dGludChzZXMud3JpdGVwYXlsb2FkLCBjaGFubmVsLT5yZW1vdGVjaGFuKTsKKwlidWZfcHV0c3RyaW5nKHNlcy53cml0ZXBheWxvYWQsICJleGl0LXN0YXR1cyIsIDExKTsKKwlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCAwKTsgLyogYm9vbGVhbiBGQUxTRSAqLworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgY2hhbnNlc3MtPmV4aXQuZXhpdHN0YXR1cyk7CisKKwllbmNyeXB0X3BhY2tldCgpOworCit9CisKKy8qIHNlbmQgdGhlIHNpZ25hbCBjYXVzaW5nIHRoZSBleGl0IHRvIHRoZSBjbGllbnQgKi8KK3N0YXRpYyB2b2lkIHNlbmRfbXNnX2NoYW5zZXNzX2V4aXRzaWduYWwoc3RydWN0IENoYW5uZWwgKiBjaGFubmVsLAorCQlzdHJ1Y3QgQ2hhblNlc3MgKiBjaGFuc2VzcykgeworCisJaW50IGk7CisJY2hhciogc2lnbmFtZSA9IE5VTEw7CisJZHJvcGJlYXJfYXNzZXJ0KGNoYW5zZXNzLT5leGl0LmV4aXRwaWQgIT0gLTEpOworCWRyb3BiZWFyX2Fzc2VydChjaGFuc2Vzcy0+ZXhpdC5leGl0c2lnbmFsID4gMCk7CisKKwlUUkFDRSgoInNlbmRfbXNnX2NoYW5zZXNzX2V4aXRzaWduYWwgJWQiLCBjaGFuc2Vzcy0+ZXhpdC5leGl0c2lnbmFsKSkKKworCUNIRUNLQ0xFQVJUT1dSSVRFKCk7CisKKwkvKiB3ZSBjaGVjayB0aGF0IHdlIGNhbiBtYXRjaCBhIHNpZ25hbCBuYW1lLCBvdGhlcndpc2UKKwkgKiBkb24ndCBzZW5kIGFueXRoaW5nICovCisJZm9yIChpID0gMDsgc2lnbmFtZXNbaV0ubmFtZSAhPSBOVUxMOyBpKyspIHsKKwkJaWYgKHNpZ25hbWVzW2ldLnNpZ25hbCA9PSBjaGFuc2Vzcy0+ZXhpdC5leGl0c2lnbmFsKSB7CisJCQlzaWduYW1lID0gc2lnbmFtZXNbaV0ubmFtZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHNpZ25hbWUgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgU1NIX01TR19DSEFOTkVMX1JFUVVFU1QpOworCWJ1Zl9wdXRpbnQoc2VzLndyaXRlcGF5bG9hZCwgY2hhbm5lbC0+cmVtb3RlY2hhbik7CisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCAiZXhpdC1zaWduYWwiLCAxMSk7CisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgMCk7IC8qIGJvb2xlYW4gRkFMU0UgKi8KKwlidWZfcHV0c3RyaW5nKHNlcy53cml0ZXBheWxvYWQsIHNpZ25hbWUsIHN0cmxlbihzaWduYW1lKSk7CisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgY2hhbnNlc3MtPmV4aXQuZXhpdGNvcmUpOworCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgIiIsIDApOyAvKiBlcnJvciBtc2cgKi8KKwlidWZfcHV0c3RyaW5nKHNlcy53cml0ZXBheWxvYWQsICIiLCAwKTsgLyogbGFuZyAqLworCisJZW5jcnlwdF9wYWNrZXQoKTsKK30KKworLyogc2V0IHVwIGEgc2Vzc2lvbiBjaGFubmVsICovCitzdGF0aWMgaW50IG5ld2NoYW5zZXNzKHN0cnVjdCBDaGFubmVsICpjaGFubmVsKSB7CisKKwlzdHJ1Y3QgQ2hhblNlc3MgKmNoYW5zZXNzOworCisJZHJvcGJlYXJfYXNzZXJ0KGNoYW5uZWwtPnR5cGVkYXRhID09IE5VTEwpOworCisJY2hhbnNlc3MgPSAoc3RydWN0IENoYW5TZXNzKiltX21hbGxvYyhzaXplb2Yoc3RydWN0IENoYW5TZXNzKSk7CisJY2hhbnNlc3MtPmNtZCA9IE5VTEw7CisJY2hhbnNlc3MtPnBpZCA9IDA7CisKKwkvKiBwdHkgZGV0YWlscyAqLworCWNoYW5zZXNzLT5tYXN0ZXIgPSAtMTsKKwljaGFuc2Vzcy0+c2xhdmUgPSAtMTsKKwljaGFuc2Vzcy0+dHR5ID0gTlVMTDsKKwljaGFuc2Vzcy0+dGVybSA9IE5VTEw7CisKKwljaGFuc2Vzcy0+ZXhpdC5leGl0cGlkID0gLTE7CisKKwljaGFubmVsLT50eXBlZGF0YSA9IGNoYW5zZXNzOworCisjaWZuZGVmIERJU0FCTEVfWDExRldECisJY2hhbnNlc3MtPngxMWxpc3RlbmVyID0gTlVMTDsKKwljaGFuc2Vzcy0+eDExYXV0aHByb3QgPSBOVUxMOworCWNoYW5zZXNzLT54MTFhdXRoY29va2llID0gTlVMTDsKKyNlbmRpZgorCisjaWZuZGVmIERJU0FCTEVfQUdFTlRGV0QKKwljaGFuc2Vzcy0+YWdlbnRsaXN0ZW5lciA9IE5VTEw7CisJY2hhbnNlc3MtPmFnZW50ZmlsZSA9IE5VTEw7CisJY2hhbnNlc3MtPmFnZW50ZGlyID0gTlVMTDsKKyNlbmRpZgorCisJcmV0dXJuIDA7CisKK30KKworLyogY2xlYW4gYSBzZXNzaW9uIGNoYW5uZWwgKi8KK3N0YXRpYyB2b2lkIGNsb3NlY2hhbnNlc3Moc3RydWN0IENoYW5uZWwgKmNoYW5uZWwpIHsKKworCXN0cnVjdCBDaGFuU2VzcyAqY2hhbnNlc3M7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGxvZ2luaW5mbyAqbGk7CisKKwlUUkFDRSgoImVudGVyIGNsb3NlY2hhbnNlc3MiKSkKKworCWNoYW5zZXNzID0gKHN0cnVjdCBDaGFuU2VzcyopY2hhbm5lbC0+dHlwZWRhdGE7CisKKwlpZiAoY2hhbnNlc3MgPT0gTlVMTCkgeworCQlUUkFDRSgoImxlYXZlIGNsb3NlY2hhbnNlc3M6IGNoYW5zZXNzID09IE5VTEwiKSkKKwkJcmV0dXJuOworCX0KKworCXNlbmRfZXhpdHNpZ25hbHN0YXR1cyhjaGFubmVsKTsKKworCW1fZnJlZShjaGFuc2Vzcy0+Y21kKTsKKwltX2ZyZWUoY2hhbnNlc3MtPnRlcm0pOworCisJaWYgKGNoYW5zZXNzLT50dHkpIHsKKwkJLyogd3JpdGUgdGhlIHV0bXAvd3RtcCBsb2dpbiByZWNvcmQgKi8KKwkJbGkgPSBsb2dpbl9hbGxvY19lbnRyeShjaGFuc2Vzcy0+cGlkLCBzZXMuYXV0aHN0YXRlLnVzZXJuYW1lLAorCQkJCXNlcy5yZW1vdGVob3N0LCBjaGFuc2Vzcy0+dHR5KTsKKwkJbG9naW5fbG9nb3V0KGxpKTsKKwkJbG9naW5fZnJlZV9lbnRyeShsaSk7CisKKwkJcHR5X3JlbGVhc2UoY2hhbnNlc3MtPnR0eSk7CisJCW1fZnJlZShjaGFuc2Vzcy0+dHR5KTsKKwl9CisKKyNpZm5kZWYgRElTQUJMRV9YMTFGV0QKKwl4MTFjbGVhbnVwKGNoYW5zZXNzKTsKKyNlbmRpZgorCisjaWZuZGVmIERJU0FCTEVfQUdFTlRGV0QKKwlhZ2VudGNsZWFudXAoY2hhbnNlc3MpOworI2VuZGlmCisKKwkvKiBjbGVhciBjaGlsZCBwaWQgZW50cmllcyAqLworCWZvciAoaSA9IDA7IGkgPCBzdnJfc2VzLmNoaWxkcGlkc2l6ZTsgaSsrKSB7CisJCWlmIChzdnJfc2VzLmNoaWxkcGlkc1tpXS5jaGFuc2VzcyA9PSBjaGFuc2VzcykgeworCQkJZHJvcGJlYXJfYXNzZXJ0KHN2cl9zZXMuY2hpbGRwaWRzW2ldLnBpZCA+IDApOworCQkJVFJBQ0UoKCJjbG9zaW5nIHBpZCAlZCIsIHN2cl9zZXMuY2hpbGRwaWRzW2ldLnBpZCkpCisJCQlUUkFDRSgoImV4aXRwaWQgaXMgJWQiLCBjaGFuc2Vzcy0+ZXhpdC5leGl0cGlkKSkKKwkJCXN2cl9zZXMuY2hpbGRwaWRzW2ldLnBpZCA9IC0xOworCQkJc3ZyX3Nlcy5jaGlsZHBpZHNbaV0uY2hhbnNlc3MgPSBOVUxMOworCQl9CisJfQorCQkJCQorCW1fZnJlZShjaGFuc2Vzcyk7CisKKwlUUkFDRSgoImxlYXZlIGNsb3NlY2hhbnNlc3MiKSkKK30KKworLyogSGFuZGxlIHJlcXVlc3RzIGZvciBhIGNoYW5uZWwuIFRoZXNlIGNhbiBiZSBleGVjdXRpb24gcmVxdWVzdHMsCisgKiBvciB4MTEvYXV0aGFnZW50IGZvcndhcmRpbmcuIFRoZXNlIGFyZSBwYXNzZWQgdG8gYXBwcm9wcmlhdGUgaGFuZGxlcnMgKi8KK3N0YXRpYyB2b2lkIGNoYW5zZXNzaW9ucmVxdWVzdChzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCkgeworCisJdW5zaWduZWQgY2hhciAqIHR5cGUgPSBOVUxMOworCXVuc2lnbmVkIGludCB0eXBlbGVuOworCXVuc2lnbmVkIGNoYXIgd2FudHJlcGx5OworCWludCByZXQgPSAxOworCXN0cnVjdCBDaGFuU2VzcyAqY2hhbnNlc3M7CisKKwlUUkFDRSgoImVudGVyIGNoYW5zZXNzaW9ucmVxdWVzdCIpKQorCisJdHlwZSA9IGJ1Zl9nZXRzdHJpbmcoc2VzLnBheWxvYWQsICZ0eXBlbGVuKTsKKwl3YW50cmVwbHkgPSBidWZfZ2V0Ym9vbChzZXMucGF5bG9hZCk7CisKKwlpZiAodHlwZWxlbiA+IE1BWF9OQU1FX0xFTikgeworCQlUUkFDRSgoImxlYXZlIGNoYW5zZXNzaW9ucmVxdWVzdDogdHlwZSB0b28gbG9uZyIpKSAvKiBYWFggc2VuZCBlcnJvcj8qLworCQlnb3RvIG91dDsKKwl9CisKKwljaGFuc2VzcyA9IChzdHJ1Y3QgQ2hhblNlc3MqKWNoYW5uZWwtPnR5cGVkYXRhOworCWRyb3BiZWFyX2Fzc2VydChjaGFuc2VzcyAhPSBOVUxMKTsKKwlUUkFDRSgoInR5cGUgaXMgJXMiLCB0eXBlKSkKKworCWlmIChzdHJjbXAodHlwZSwgIndpbmRvdy1jaGFuZ2UiKSA9PSAwKSB7CisJCXJldCA9IHNlc3Npb253aW5jaGFuZ2UoY2hhbnNlc3MpOworCX0gZWxzZSBpZiAoc3RyY21wKHR5cGUsICJzaGVsbCIpID09IDApIHsKKwkJcmV0ID0gc2Vzc2lvbmNvbW1hbmQoY2hhbm5lbCwgY2hhbnNlc3MsIDAsIDApOworCX0gZWxzZSBpZiAoc3RyY21wKHR5cGUsICJwdHktcmVxIikgPT0gMCkgeworCQlyZXQgPSBzZXNzaW9ucHR5KGNoYW5zZXNzKTsKKwl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlLCAiZXhlYyIpID09IDApIHsKKwkJcmV0ID0gc2Vzc2lvbmNvbW1hbmQoY2hhbm5lbCwgY2hhbnNlc3MsIDEsIDApOworCX0gZWxzZSBpZiAoc3RyY21wKHR5cGUsICJzdWJzeXN0ZW0iKSA9PSAwKSB7CisJCXJldCA9IHNlc3Npb25jb21tYW5kKGNoYW5uZWwsIGNoYW5zZXNzLCAxLCAxKTsKKyNpZm5kZWYgRElTQUJMRV9YMTFGV0QKKwl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlLCAieDExLXJlcSIpID09IDApIHsKKwkJcmV0ID0geDExcmVxKGNoYW5zZXNzKTsKKyNlbmRpZgorI2lmbmRlZiBESVNBQkxFX0FHRU5URldECisJfSBlbHNlIGlmIChzdHJjbXAodHlwZSwgImF1dGgtYWdlbnQtcmVxQG9wZW5zc2guY29tIikgPT0gMCkgeworCQlyZXQgPSBhZ2VudHJlcShjaGFuc2Vzcyk7CisjZW5kaWYKKwl9IGVsc2UgaWYgKHN0cmNtcCh0eXBlLCAic2lnbmFsIikgPT0gMCkgeworCQlyZXQgPSBzZXNzaW9uc2lnbmFsKGNoYW5zZXNzKTsKKwl9IGVsc2UgeworCQkvKiBldGMsIHRvZG8gImVudiIsICJzdWJzeXN0ZW0iICovCisJfQorCitvdXQ6CisKKwlpZiAod2FudHJlcGx5KSB7CisJCWlmIChyZXQgPT0gRFJPUEJFQVJfU1VDQ0VTUykgeworCQkJc2VuZF9tc2dfY2hhbm5lbF9zdWNjZXNzKGNoYW5uZWwpOworCQl9IGVsc2UgeworCQkJc2VuZF9tc2dfY2hhbm5lbF9mYWlsdXJlKGNoYW5uZWwpOworCQl9CisJfQorCisJbV9mcmVlKHR5cGUpOworCVRSQUNFKCgibGVhdmUgY2hhbnNlc3Npb25yZXF1ZXN0IikpCit9CisKKworLyogU2VuZCBhIHNpZ25hbCB0byBhIHNlc3Npb24ncyBwcm9jZXNzIGFzIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50Ki8KK3N0YXRpYyBpbnQgc2Vzc2lvbnNpZ25hbChzdHJ1Y3QgQ2hhblNlc3MgKmNoYW5zZXNzKSB7CisKKwlpbnQgc2lnID0gMDsKKwl1bnNpZ25lZCBjaGFyKiBzaWduYW1lID0gTlVMTDsKKwlpbnQgaTsKKworCWlmIChjaGFuc2Vzcy0+cGlkID09IDApIHsKKwkJLyogaGF2ZW4ndCBnb3QgYSBwcm9jZXNzIHBpZCB5ZXQgKi8KKwkJcmV0dXJuIERST1BCRUFSX0ZBSUxVUkU7CisJfQorCisJc2lnbmFtZSA9IGJ1Zl9nZXRzdHJpbmcoc2VzLnBheWxvYWQsIE5VTEwpOworCisJaSA9IDA7CisJd2hpbGUgKHNpZ25hbWVzW2ldLm5hbWUgIT0gMCkgeworCQlpZiAoc3RyY21wKHNpZ25hbWVzW2ldLm5hbWUsIHNpZ25hbWUpID09IDApIHsKKwkJCXNpZyA9IHNpZ25hbWVzW2ldLnNpZ25hbDsKKwkJCWJyZWFrOworCQl9CisJCWkrKzsKKwl9CisKKwltX2ZyZWUoc2lnbmFtZSk7CisKKwlpZiAoc2lnID09IDApIHsKKwkJLyogZmFpbGVkICovCisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0KKwkJCQorCWlmIChraWxsKGNoYW5zZXNzLT5waWQsIHNpZykgPCAwKSB7CisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0gCisKKwlyZXR1cm4gRFJPUEJFQVJfU1VDQ0VTUzsKK30KKworLyogTGV0IHRoZSBwcm9jZXNzIGtub3cgdGhhdCB0aGUgd2luZG93IHNpemUgaGFzIGNoYW5nZWQsIGFzIG5vdGlmaWVkIGZyb20gdGhlCisgKiBjbGllbnQuIFJldHVybnMgRFJPUEJFQVJfU1VDQ0VTUyBvciBEUk9QQkVBUl9GQUlMVVJFICovCitzdGF0aWMgaW50IHNlc3Npb253aW5jaGFuZ2Uoc3RydWN0IENoYW5TZXNzICpjaGFuc2VzcykgeworCisJaW50IHRlcm1jLCB0ZXJtciwgdGVybXcsIHRlcm1oOworCisJaWYgKGNoYW5zZXNzLT5tYXN0ZXIgPCAwKSB7CisJCS8qIGhhdmVuJ3QgZ290IGEgcHR5IHlldCAqLworCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9CisJCQkKKwl0ZXJtYyA9IGJ1Zl9nZXRpbnQoc2VzLnBheWxvYWQpOworCXRlcm1yID0gYnVmX2dldGludChzZXMucGF5bG9hZCk7CisJdGVybXcgPSBidWZfZ2V0aW50KHNlcy5wYXlsb2FkKTsKKwl0ZXJtaCA9IGJ1Zl9nZXRpbnQoc2VzLnBheWxvYWQpOworCQorCXB0eV9jaGFuZ2Vfd2luZG93X3NpemUoY2hhbnNlc3MtPm1hc3RlciwgdGVybXIsIHRlcm1jLCB0ZXJtdywgdGVybWgpOworCisJcmV0dXJuIERST1BCRUFSX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkIGdldF90ZXJtbW9kZXMoc3RydWN0IENoYW5TZXNzICpjaGFuc2VzcykgeworCisJc3RydWN0IHRlcm1pb3MgdGVybWlvOworCXVuc2lnbmVkIGNoYXIgb3Bjb2RlOworCXVuc2lnbmVkIGludCB2YWx1ZTsKKwljb25zdCBzdHJ1Y3QgVGVybUNvZGUgKiB0ZXJtY29kZTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJVFJBQ0UoKCJlbnRlciBnZXRfdGVybW1vZGVzIikpCisKKwkvKiBUZXJtIG1vZGVzICovCisJLyogV2UnbGwgaWdub3JlIGVycm9ycyBhbmQgY29udGludWUgaWYgd2UgY2FuJ3Qgc2V0IG1vZGVzLgorCSAqIFdlJ3JlIGlnbm9yaW5nIGJhdWQgcmF0ZXMgc2luY2UgdGhleSBzZWVtIGV2aWwgKi8KKwlpZiAodGNnZXRhdHRyKGNoYW5zZXNzLT5tYXN0ZXIsICZ0ZXJtaW8pID09IC0xKSB7CisJCXJldHVybjsKKwl9CisKKwlsZW4gPSBidWZfZ2V0aW50KHNlcy5wYXlsb2FkKTsKKwlUUkFDRSgoInRlcm0gbW9kZSBzdHIgJWQgcC0+bCAlZCBwLT5wICVkIiwgCisJCQkJbGVuLCBzZXMucGF5bG9hZC0+bGVuICwgc2VzLnBheWxvYWQtPnBvcykpOworCWlmIChsZW4gIT0gc2VzLnBheWxvYWQtPmxlbiAtIHNlcy5wYXlsb2FkLT5wb3MpIHsKKwkJZHJvcGJlYXJfZXhpdCgiYmFkIHRlcm0gbW9kZSBzdHJpbmciKTsKKwl9CisKKwlpZiAobGVuID09IDApIHsKKwkJVFJBQ0UoKCJsZWF2ZSBnZXRfdGVybW1vZGVzOiBlbXB0eSB0ZXJtaW5hbCBtb2RlcyBzdHJpbmciKSkKKwkJcmV0dXJuOworCX0KKworCXdoaWxlICgoKG9wY29kZSA9IGJ1Zl9nZXRieXRlKHNlcy5wYXlsb2FkKSkgIT0gMHgwMCkgJiYgb3Bjb2RlIDw9IDE1OSkgeworCisJCS8qIG11c3QgYmUgYmVmb3JlIGNoZWNraW5nIHR5cGUsIHNvIHRoYXQgdmFsdWUgaXMgY29uc3VtZWQgZXZlbiBpZgorCQkgKiB3ZSBkb24ndCB1c2UgaXQgKi8KKwkJdmFsdWUgPSBidWZfZ2V0aW50KHNlcy5wYXlsb2FkKTsKKworCQkvKiBoYW5kbGUgdHlwZXMgb2YgY29kZSAqLworCQlpZiAob3Bjb2RlID4gTUFYX1RFUk1DT0RFKSB7CisJCQljb250aW51ZTsKKwkJfQorCQl0ZXJtY29kZSA9ICZ0ZXJtY29kZXNbKHVuc2lnbmVkIGludClvcGNvZGVdOworCQkKKworCQlzd2l0Y2ggKHRlcm1jb2RlLT50eXBlKSB7CisKKwkJCWNhc2UgVEVSTUNPREVfTk9ORToKKwkJCQlicmVhazsKKworCQkJY2FzZSBURVJNQ09ERV9DT05UUk9MQ0hBUjoKKwkJCQl0ZXJtaW8uY19jY1t0ZXJtY29kZS0+bWFwY29kZV0gPSB2YWx1ZTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBURVJNQ09ERV9JTlBVVDoKKwkJCQlpZiAodmFsdWUpIHsKKwkJCQkJdGVybWlvLmNfaWZsYWcgfD0gdGVybWNvZGUtPm1hcGNvZGU7CisJCQkJfSBlbHNlIHsKKwkJCQkJdGVybWlvLmNfaWZsYWcgJj0gfih0ZXJtY29kZS0+bWFwY29kZSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFRFUk1DT0RFX09VVFBVVDoKKwkJCQlpZiAodmFsdWUpIHsKKwkJCQkJdGVybWlvLmNfb2ZsYWcgfD0gdGVybWNvZGUtPm1hcGNvZGU7CisJCQkJfSBlbHNlIHsKKwkJCQkJdGVybWlvLmNfb2ZsYWcgJj0gfih0ZXJtY29kZS0+bWFwY29kZSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIFRFUk1DT0RFX0xPQ0FMOgorCQkJCWlmICh2YWx1ZSkgeworCQkJCQl0ZXJtaW8uY19sZmxhZyB8PSB0ZXJtY29kZS0+bWFwY29kZTsKKwkJCQl9IGVsc2UgeworCQkJCQl0ZXJtaW8uY19sZmxhZyAmPSB+KHRlcm1jb2RlLT5tYXBjb2RlKTsKKwkJCQl9CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgVEVSTUNPREVfQ09OVFJPTDoKKwkJCQlpZiAodmFsdWUpIHsKKwkJCQkJdGVybWlvLmNfY2ZsYWcgfD0gdGVybWNvZGUtPm1hcGNvZGU7CisJCQkJfSBlbHNlIHsKKwkJCQkJdGVybWlvLmNfY2ZsYWcgJj0gfih0ZXJtY29kZS0+bWFwY29kZSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJCQorCQl9CisJfQorCWlmICh0Y3NldGF0dHIoY2hhbnNlc3MtPm1hc3RlciwgVENTQU5PVywgJnRlcm1pbykgPCAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfSU5GTywgImVycm9yIHNldHRpbmcgdGVybWluYWwgYXR0cmlidXRlcyIpOworCX0KKwlUUkFDRSgoImxlYXZlIGdldF90ZXJtbW9kZXMiKSkKK30KKworLyogU2V0IHVwIGEgc2Vzc2lvbiBwdHkgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhlIHNoZWxsIG9yIHByb2dyYW0uCisgKiBUaGUgcHR5IGlzIGFsbG9jYXRlZCBub3csIGFuZCBrZXB0IGZvciB3aGVuIHRoZSBzaGVsbC9wcm9ncmFtIGV4ZWN1dGVzLgorICogUmV0dXJucyBEUk9QQkVBUl9TVUNDRVNTIG9yIERST1BCRUFSX0ZBSUxVUkUgKi8KK3N0YXRpYyBpbnQgc2Vzc2lvbnB0eShzdHJ1Y3QgQ2hhblNlc3MgKiBjaGFuc2VzcykgeworCisJdW5zaWduZWQgaW50IHRlcm1sZW47CisJdW5zaWduZWQgY2hhciBuYW1lYnVmWzY1XTsKKworCVRSQUNFKCgiZW50ZXIgc2Vzc2lvbnB0eSIpKQorCWNoYW5zZXNzLT50ZXJtID0gYnVmX2dldHN0cmluZyhzZXMucGF5bG9hZCwgJnRlcm1sZW4pOworCWlmICh0ZXJtbGVuID4gTUFYX1RFUk1fTEVOKSB7CisJCS8qIFRPRE8gc2VuZCBkaXNjb25uZWN0ID8gKi8KKwkJVFJBQ0UoKCJsZWF2ZSBzZXNzaW9ucHR5OiB0ZXJtIGxlbiB0b28gbG9uZyIpKQorCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9CisKKwkvKiBhbGxvY2F0ZSB0aGUgcHR5ICovCisJaWYgKGNoYW5zZXNzLT5tYXN0ZXIgIT0gLTEpIHsKKwkJZHJvcGJlYXJfZXhpdCgibXVsdGlwbGUgcHR5IHJlcXVlc3RzIik7CisJfQorCWlmIChwdHlfYWxsb2NhdGUoJmNoYW5zZXNzLT5tYXN0ZXIsICZjaGFuc2Vzcy0+c2xhdmUsIG5hbWVidWYsIDY0KSA9PSAwKSB7CisJCVRSQUNFKCgibGVhdmUgc2Vzc2lvbnB0eTogZmFpbGVkIHRvIGFsbG9jYXRlIHB0eSIpKQorCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9CisJCisJY2hhbnNlc3MtPnR0eSA9IChjaGFyKiltX3N0cmR1cChuYW1lYnVmKTsKKwlpZiAoIWNoYW5zZXNzLT50dHkpIHsKKwkJZHJvcGJlYXJfZXhpdCgib3V0IG9mIG1lbW9yeSIpOyAvKiBUT0RPIGRpc2Nvbm5lY3QgKi8KKwl9CisKKwlwdHlfc2V0b3duZXIoc2VzLmF1dGhzdGF0ZS5wdywgY2hhbnNlc3MtPnR0eSk7CisKKwkvKiBTZXQgdXAgdGhlIHJvd3MvY29sIGNvdW50cyAqLworCXNlc3Npb253aW5jaGFuZ2UoY2hhbnNlc3MpOworCisJLyogUmVhZCB0aGUgdGVybWluYWwgbW9kZXMgKi8KKwlnZXRfdGVybW1vZGVzKGNoYW5zZXNzKTsKKworCVRSQUNFKCgibGVhdmUgc2Vzc2lvbnB0eSIpKQorCXJldHVybiBEUk9QQkVBUl9TVUNDRVNTOworfQorCisvKiBIYW5kbGUgYSBjb21tYW5kIHJlcXVlc3QgZnJvbSB0aGUgY2xpZW50LiBUaGlzIGlzIHVzZWQgZm9yIGJvdGggc2hlbGwKKyAqIGFuZCBjb21tYW5kLWV4ZWN1dGlvbiByZXF1ZXN0cywgYW5kIHBhc3NlcyB0aGUgY29tbWFuZCB0bworICogbm9wdHljb21tYW5kIG9yIHB0eWNvbW1hbmQgYXMgYXBwcm9wcmlhdGUuCisgKiBSZXR1cm5zIERST1BCRUFSX1NVQ0NFU1Mgb3IgRFJPUEJFQVJfRkFJTFVSRSAqLworc3RhdGljIGludCBzZXNzaW9uY29tbWFuZChzdHJ1Y3QgQ2hhbm5lbCAqY2hhbm5lbCwgc3RydWN0IENoYW5TZXNzICpjaGFuc2VzcywKKwkJaW50IGlzY21kLCBpbnQgaXNzdWJzeXMpIHsKKworCXVuc2lnbmVkIGludCBjbWRsZW47CisJaW50IHJldDsKKworCVRSQUNFKCgiZW50ZXIgc2Vzc2lvbmNvbW1hbmQiKSkKKworCWlmIChjaGFuc2Vzcy0+Y21kICE9IE5VTEwpIHsKKwkJLyogTm90ZSB0aGF0IG9ubHkgb25lIGNvbW1hbmQgY2FuIF9zdWNjZWVkXy4gVGhlIGNsaWVudCBtaWdodCB0cnkKKwkJICogb25lIGNvbW1hbmQgKHdoaWNoIGZhaWxzKSwgdGhlbiB0cnkgYW5vdGhlci4gSWUgZmFsbGJhY2sKKwkJICogZnJvbSBzZnRwIHRvIHNjcCAqLworCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9CisKKwlpZiAoaXNjbWQpIHsKKwkJLyogImV4ZWMiICovCisJCWNoYW5zZXNzLT5jbWQgPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCAmY21kbGVuKTsKKworCQlpZiAoY21kbGVuID4gTUFYX0NNRF9MRU4pIHsKKwkJCW1fZnJlZShjaGFuc2Vzcy0+Y21kKTsKKwkJCS8qIFRPRE8gLSBzZW5kIGVycm9yIC0gdG9vIGxvbmcgPyAqLworCQkJcmV0dXJuIERST1BCRUFSX0ZBSUxVUkU7CisJCX0KKwkJaWYgKGlzc3Vic3lzKSB7CisjaWZkZWYgU0ZUUFNFUlZFUl9QQVRICisJCQlpZiAoKGNtZGxlbiA9PSA0KSAmJiBzdHJuY21wKGNoYW5zZXNzLT5jbWQsICJzZnRwIiwgNCkgPT0gMCkgeworCQkJCW1fZnJlZShjaGFuc2Vzcy0+Y21kKTsKKwkJCQljaGFuc2Vzcy0+Y21kID0gbV9zdHJkdXAoU0ZUUFNFUlZFUl9QQVRIKTsKKwkJCX0gZWxzZSAKKyNlbmRpZgorCQkJeworCQkJCW1fZnJlZShjaGFuc2Vzcy0+Y21kKTsKKwkJCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwkJCX0KKwkJfQorCX0KKworI2lmZGVmIExPR19DT01NQU5EUworCWlmIChjaGFuc2Vzcy0+Y21kKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfSU5GTywgInVzZXIgJXMgZXhlY3V0aW5nICclcyciLCAKKwkJCQkJCXNlcy5hdXRoc3RhdGUucHJpbnRhYmxldXNlciwgY2hhbnNlc3MtPmNtZCk7CisJfSBlbHNlIHsKKwkJZHJvcGJlYXJfbG9nKExPR19JTkZPLCAidXNlciAlcyBleGVjdXRpbmcgbG9naW4gc2hlbGwiLCAKKwkJCQkJCXNlcy5hdXRoc3RhdGUucHJpbnRhYmxldXNlcik7CisJfQorI2VuZGlmCisKKwlpZiAoY2hhbnNlc3MtPnRlcm0gPT0gTlVMTCkgeworCQkvKiBubyBwdHkgKi8KKwkJcmV0ID0gbm9wdHljb21tYW5kKGNoYW5uZWwsIGNoYW5zZXNzKTsKKwl9IGVsc2UgeworCQkvKiB3YW50IHB0eSAqLworCQlyZXQgPSBwdHljb21tYW5kKGNoYW5uZWwsIGNoYW5zZXNzKTsKKwl9CisKKwlpZiAocmV0ID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJbV9mcmVlKGNoYW5zZXNzLT5jbWQpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiBFeGVjdXRlIGEgY29tbWFuZCBhbmQgc2V0IHVwIHJlZGlyZWN0aW9uIG9mIHN0ZGluL3N0ZG91dC9zdGRlcnIgd2l0aG91dCBhCisgKiBwdHkuCisgKiBSZXR1cm5zIERST1BCRUFSX1NVQ0NFU1Mgb3IgRFJPUEJFQVJfRkFJTFVSRSAqLworc3RhdGljIGludCBub3B0eWNvbW1hbmQoc3RydWN0IENoYW5uZWwgKmNoYW5uZWwsIHN0cnVjdCBDaGFuU2VzcyAqY2hhbnNlc3MpIHsKKworCWludCBpbmZkc1syXTsKKwlpbnQgb3V0ZmRzWzJdOworCWludCBlcnJmZHNbMl07CisJcGlkX3QgcGlkOworCXVuc2lnbmVkIGludCBpOworCisJVFJBQ0UoKCJlbnRlciBub3B0eWNvbW1hbmQiKSkKKworCS8qIHJlZGlyZWN0IHN0ZGluL3N0ZG91dC9zdGRlcnIgKi8KKwlpZiAocGlwZShpbmZkcykgIT0gMCkKKwkJcmV0dXJuIERST1BCRUFSX0ZBSUxVUkU7CisJaWYgKHBpcGUob3V0ZmRzKSAhPSAwKQorCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwlpZiAocGlwZShlcnJmZHMpICE9IDApCisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCisjaWZkZWYgX191Q2xpbnV4X18KKwlwaWQgPSB2Zm9yaygpOworI2Vsc2UKKwlwaWQgPSBmb3JrKCk7CisjZW5kaWYKKworCWlmIChwaWQgPCAwKQorCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKworCWlmICghcGlkKSB7CisJCS8qIGNoaWxkICovCisKKwkJVFJBQ0UoKCJiYWNrIHRvIG5vcm1hbCBzaWdjaGxkIikpCisJCS8qIFJldmVydCB0byBub3JtYWwgc2lnY2hsZCBoYW5kbGluZyAqLworCQlpZiAoc2lnbmFsKFNJR0NITEQsIFNJR19ERkwpID09IFNJR19FUlIpIHsKKwkJCWRyb3BiZWFyX2V4aXQoInNpZ25hbCgpIGVycm9yIik7CisJCX0KKworCQkvKiByZWRpcmVjdCBzdGRpbi9zdGRvdXQgKi8KKyNkZWZpbmUgRkRJTiAwCisjZGVmaW5lIEZET1VUIDEKKwkJaWYgKChkdXAyKGluZmRzW0ZESU5dLCBTVERJTl9GSUxFTk8pIDwgMCkgfHwKKwkJCShkdXAyKG91dGZkc1tGRE9VVF0sIFNURE9VVF9GSUxFTk8pIDwgMCkgfHwKKwkJCShkdXAyKGVycmZkc1tGRE9VVF0sIFNUREVSUl9GSUxFTk8pIDwgMCkpIHsKKwkJCVRSQUNFKCgibGVhdmUgbm9wdHljb21tYW5kOiBlcnJvciByZWRpcmVjdGluZyBGRHMiKSkKKwkJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCQl9CisKKwkJY2xvc2UoaW5mZHNbRkRPVVRdKTsKKwkJY2xvc2UoaW5mZHNbRkRJTl0pOworCQljbG9zZShvdXRmZHNbRkRJTl0pOworCQljbG9zZShvdXRmZHNbRkRPVVRdKTsKKwkJY2xvc2UoZXJyZmRzW0ZESU5dKTsKKwkJY2xvc2UoZXJyZmRzW0ZET1VUXSk7CisKKwkJZXhlY2NoaWxkKGNoYW5zZXNzKTsKKwkJLyogbm90IHJlYWNoZWQgKi8KKworCX0gZWxzZSB7CisJCS8qIHBhcmVudCAqLworCQlUUkFDRSgoImNvbnRpbnVlIG5vcHR5Y29tbWFuZDogcGFyZW50IikpCisJCWNoYW5zZXNzLT5waWQgPSBwaWQ7CisJCVRSQUNFKCgiY2hpbGQgcGlkIGlzICVkIiwgcGlkKSkKKworCQlhZGRjaGlsZHBpZChjaGFuc2VzcywgcGlkKTsKKworCQlpZiAoc3ZyX3Nlcy5sYXN0ZXhpdC5leGl0cGlkICE9IC0xKSB7CisJCQlUUkFDRSgoInBhcmVudCBzaWRlOiBsYXN0ZXhpdHBpZCBpcyAlZCIsIHN2cl9zZXMubGFzdGV4aXQuZXhpdHBpZCkpCisJCQkvKiBUaGUgY2hpbGQgcHJvYmFibHkgZXhpdGVkIGFuZCB0aGUgc2lnbmFsIGhhbmRsZXIgdHJpZ2dlcmVkCisJCQkgKiBwb3NzaWJseSBiZWZvcmUgd2UgZ290IGFyb3VuZCB0byBhZGRpbmcgdGhlIGNoaWxkcGlkLiBTbyB3ZSBmaWxsCisJCQkgKiBvdXQgaXRzIGRhdGEgbWFudWFsbHkgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBzdnJfc2VzLmNoaWxkcGlkc2l6ZTsgaSsrKSB7CisJCQkJaWYgKHN2cl9zZXMuY2hpbGRwaWRzW2ldLnBpZCA9PSBzdnJfc2VzLmxhc3RleGl0LmV4aXRwaWQpIHsKKwkJCQkJVFJBQ0UoKCJmb3VuZCBtYXRjaCBmb3IgbGFzdGV4aXRwaWQiKSkKKwkJCQkJc3ZyX3Nlcy5jaGlsZHBpZHNbaV0uY2hhbnNlc3MtPmV4aXQgPSBzdnJfc2VzLmxhc3RleGl0OworCQkJCQlzdnJfc2VzLmxhc3RleGl0LmV4aXRwaWQgPSAtMTsKKwkJCQl9CisJCQl9CisJCX0KKworCQljbG9zZShpbmZkc1tGRElOXSk7CisJCWNsb3NlKG91dGZkc1tGRE9VVF0pOworCQljbG9zZShlcnJmZHNbRkRPVVRdKTsKKwkJY2hhbm5lbC0+d3JpdGVmZCA9IGluZmRzW0ZET1VUXTsKKwkJY2hhbm5lbC0+cmVhZGZkID0gb3V0ZmRzW0ZESU5dOworCQljaGFubmVsLT5lcnJmZCA9IGVycmZkc1tGRElOXTsKKwkJc2VzLm1heGZkID0gTUFYKHNlcy5tYXhmZCwgY2hhbm5lbC0+d3JpdGVmZCk7CisJCXNlcy5tYXhmZCA9IE1BWChzZXMubWF4ZmQsIGNoYW5uZWwtPnJlYWRmZCk7CisJCXNlcy5tYXhmZCA9IE1BWChzZXMubWF4ZmQsIGNoYW5uZWwtPmVycmZkKTsKKworCQlzZXRub25ibG9ja2luZyhjaGFubmVsLT5yZWFkZmQpOworCQlzZXRub25ibG9ja2luZyhjaGFubmVsLT53cml0ZWZkKTsKKwkJc2V0bm9uYmxvY2tpbmcoY2hhbm5lbC0+ZXJyZmQpOworCisJfQorI3VuZGVmIEZESU4KKyN1bmRlZiBGRE9VVAorCisJVFJBQ0UoKCJsZWF2ZSBub3B0eWNvbW1hbmQiKSkKKwlyZXR1cm4gRFJPUEJFQVJfU1VDQ0VTUzsKK30KKworLyogRXhlY3V0ZSBhIGNvbW1hbmQgb3Igc2hlbGwgd2l0aGluIGEgcHR5IGVudmlyb25tZW50LCBhbmQgc2V0IHVwCisgKiByZWRpcmVjdGlvbiBhcyBhcHByb3ByaWF0ZS4KKyAqIFJldHVybnMgRFJPUEJFQVJfU1VDQ0VTUyBvciBEUk9QQkVBUl9GQUlMVVJFICovCitzdGF0aWMgaW50IHB0eWNvbW1hbmQoc3RydWN0IENoYW5uZWwgKmNoYW5uZWwsIHN0cnVjdCBDaGFuU2VzcyAqY2hhbnNlc3MpIHsKKworCXBpZF90IHBpZDsKKwlzdHJ1Y3QgbG9naW5pbmZvICpsaSA9IE5VTEw7CisjaWZkZWYgRE9fTU9URAorCWJ1ZmZlciAqIG1vdGRidWYgPSBOVUxMOworCWludCBsZW47CisJc3RydWN0IHN0YXQgc2I7CisJY2hhciAqaHVzaHBhdGggPSBOVUxMOworI2VuZGlmCisKKwlUUkFDRSgoImVudGVyIHB0eWNvbW1hbmQiKSkKKworCS8qIHdlIG5lZWQgdG8gaGF2ZSBhIHB0eSBhbGxvY2F0ZWQgKi8KKwlpZiAoY2hhbnNlc3MtPm1hc3RlciA9PSAtMSB8fCBjaGFuc2Vzcy0+dHR5ID09IE5VTEwpIHsKKwkJZHJvcGJlYXJfbG9nKExPR19XQVJOSU5HLCAibm8gcHR5IHdhcyBhbGxvY2F0ZWQsIGNvdWxkbid0IGV4ZWN1dGUiKTsKKwkJcmV0dXJuIERST1BCRUFSX0ZBSUxVUkU7CisJfQorCQorI2lmZGVmIF9fdUNsaW51eF9fCisJcGlkID0gdmZvcmsoKTsKKyNlbHNlCisJcGlkID0gZm9yaygpOworI2VuZGlmCisJaWYgKHBpZCA8IDApCisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCisJaWYgKHBpZCA9PSAwKSB7CisJCS8qIGNoaWxkICovCisJCQorCQlUUkFDRSgoImJhY2sgdG8gbm9ybWFsIHNpZ2NobGQiKSkKKwkJLyogUmV2ZXJ0IHRvIG5vcm1hbCBzaWdjaGxkIGhhbmRsaW5nICovCisJCWlmIChzaWduYWwoU0lHQ0hMRCwgU0lHX0RGTCkgPT0gU0lHX0VSUikgeworCQkJZHJvcGJlYXJfZXhpdCgic2lnbmFsKCkgZXJyb3IiKTsKKwkJfQorCQkKKwkJLyogcmVkaXJlY3Qgc3RkaW4vc3Rkb3V0L3N0ZGVyciAqLworCQljbG9zZShjaGFuc2Vzcy0+bWFzdGVyKTsKKworCQlwdHlfbWFrZV9jb250cm9sbGluZ190dHkoJmNoYW5zZXNzLT5zbGF2ZSwgY2hhbnNlc3MtPnR0eSk7CisJCQorCQlpZiAoKGR1cDIoY2hhbnNlc3MtPnNsYXZlLCBTVERJTl9GSUxFTk8pIDwgMCkgfHwKKwkJCShkdXAyKGNoYW5zZXNzLT5zbGF2ZSwgU1RERVJSX0ZJTEVOTykgPCAwKSB8fAorCQkJKGR1cDIoY2hhbnNlc3MtPnNsYXZlLCBTVERPVVRfRklMRU5PKSA8IDApKSB7CisJCQlUUkFDRSgoImxlYXZlIHB0eWNvbW1hbmQ6IGVycm9yIHJlZGlyZWN0aW5nIGZpbGVkZXNjIikpCisJCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwkJfQorCisJCWNsb3NlKGNoYW5zZXNzLT5zbGF2ZSk7CisKKwkJLyogd3JpdGUgdGhlIHV0bXAvd3RtcCBsb2dpbiByZWNvcmQgLSBtdXN0IGJlIGFmdGVyIGNoYW5naW5nIHRoZQorCQkgKiB0ZXJtaW5hbCB1c2VkIGZvciBzdGRvdXQgd2l0aCB0aGUgZHVwMiBhYm92ZSAqLworCQlsaT0gbG9naW5fYWxsb2NfZW50cnkoZ2V0cGlkKCksIHNlcy5hdXRoc3RhdGUudXNlcm5hbWUsCisJCQkJc2VzLnJlbW90ZWhvc3QsIGNoYW5zZXNzLT50dHkpOworCQlsb2dpbl9sb2dpbihsaSk7CisJCWxvZ2luX2ZyZWVfZW50cnkobGkpOworCisJCW1fZnJlZShjaGFuc2Vzcy0+dHR5KTsKKworI2lmZGVmIERPX01PVEQKKwkJaWYgKHN2cl9vcHRzLmRvbW90ZCkgeworCQkJLyogZG9uJ3Qgc2hvdyB0aGUgbW90ZCBpZiB+Ly5odXNobG9naW4gZXhpc3RzICovCisKKwkJCS8qIDExID09IHN0cmxlbigiL2h1c2hsb2dpblwwIikgKi8KKwkJCWxlbiA9IHN0cmxlbihzZXMuYXV0aHN0YXRlLnB3LT5wd19kaXIpICsgMTE7IAorCisJCQlodXNocGF0aCA9IG1fbWFsbG9jKGxlbik7CisJCQlzbnByaW50ZihodXNocGF0aCwgbGVuLCAiJXMvaHVzaGxvZ2luIiwgc2VzLmF1dGhzdGF0ZS5wdy0+cHdfZGlyKTsKKworCQkJaWYgKHN0YXQoaHVzaHBhdGgsICZzYikgPCAwKSB7CisJCQkJLyogbW9yZSB0aGFuIGEgc2NyZWVuZnVsIGlzIHN0dXBpZCBJTUhPICovCisJCQkJbW90ZGJ1ZiA9IGJ1Zl9uZXcoODAgKiAyNSk7CisJCQkJaWYgKGJ1Zl9yZWFkZmlsZShtb3RkYnVmLCBNT1REX0ZJTEVOQU1FKSA9PSBEUk9QQkVBUl9TVUNDRVNTKSB7CisJCQkJCWJ1Zl9zZXRwb3MobW90ZGJ1ZiwgMCk7CisJCQkJCXdoaWxlIChtb3RkYnVmLT5wb3MgIT0gbW90ZGJ1Zi0+bGVuKSB7CisJCQkJCQlsZW4gPSBtb3RkYnVmLT5sZW4gLSBtb3RkYnVmLT5wb3M7CisJCQkJCQlsZW4gPSB3cml0ZShTVERPVVRfRklMRU5PLCAKKwkJCQkJCQkJYnVmX2dldHB0cihtb3RkYnVmLCBsZW4pLCBsZW4pOworCQkJCQkJYnVmX2luY3Jwb3MobW90ZGJ1ZiwgbGVuKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlidWZfZnJlZShtb3RkYnVmKTsKKwkJCX0KKwkJCW1fZnJlZShodXNocGF0aCk7CisJCX0KKyNlbmRpZiAvKiBET19NT1REICovCisKKwkJZXhlY2NoaWxkKGNoYW5zZXNzKTsKKwkJLyogbm90IHJlYWNoZWQgKi8KKworCX0gZWxzZSB7CisJCS8qIHBhcmVudCAqLworCQlUUkFDRSgoImNvbnRpbnVlIHB0eWNvbW1hbmQ6IHBhcmVudCIpKQorCQljaGFuc2Vzcy0+cGlkID0gcGlkOworCisJCS8qIGFkZCBhIGNoaWxkIHBpZCAqLworCQlhZGRjaGlsZHBpZChjaGFuc2VzcywgcGlkKTsKKworCQljbG9zZShjaGFuc2Vzcy0+c2xhdmUpOworCQljaGFubmVsLT53cml0ZWZkID0gY2hhbnNlc3MtPm1hc3RlcjsKKwkJY2hhbm5lbC0+cmVhZGZkID0gY2hhbnNlc3MtPm1hc3RlcjsKKwkJLyogZG9uJ3QgbmVlZCB0byBzZXQgc3RkZXJyIGhlcmUgKi8KKwkJc2VzLm1heGZkID0gTUFYKHNlcy5tYXhmZCwgY2hhbnNlc3MtPm1hc3Rlcik7CisKKwkJc2V0bm9uYmxvY2tpbmcoY2hhbnNlc3MtPm1hc3Rlcik7CisKKwl9CisKKwlUUkFDRSgoImxlYXZlIHB0eWNvbW1hbmQiKSkKKwlyZXR1cm4gRFJPUEJFQVJfU1VDQ0VTUzsKK30KKworLyogQWRkIHRoZSBwaWQgb2YgYSBjaGlsZCB0byB0aGUgbGlzdCBmb3IgZXhpdC1oYW5kbGluZyAqLworc3RhdGljIHZvaWQgYWRkY2hpbGRwaWQoc3RydWN0IENoYW5TZXNzICpjaGFuc2VzcywgcGlkX3QgcGlkKSB7CisKKwl1bnNpZ25lZCBpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgc3ZyX3Nlcy5jaGlsZHBpZHNpemU7IGkrKykgeworCQlpZiAoc3ZyX3Nlcy5jaGlsZHBpZHNbaV0ucGlkID09IC0xKSB7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIG5lZWQgdG8gaW5jcmVhc2Ugc2l6ZSAqLworCWlmIChpID09IHN2cl9zZXMuY2hpbGRwaWRzaXplKSB7CisJCXN2cl9zZXMuY2hpbGRwaWRzID0gKHN0cnVjdCBDaGlsZFBpZCopbV9yZWFsbG9jKHN2cl9zZXMuY2hpbGRwaWRzLAorCQkJCXNpemVvZihzdHJ1Y3QgQ2hpbGRQaWQpICogKHN2cl9zZXMuY2hpbGRwaWRzaXplKzEpKTsKKwkJc3ZyX3Nlcy5jaGlsZHBpZHNpemUrKzsKKwl9CisJCisJc3ZyX3Nlcy5jaGlsZHBpZHNbaV0ucGlkID0gcGlkOworCXN2cl9zZXMuY2hpbGRwaWRzW2ldLmNoYW5zZXNzID0gY2hhbnNlc3M7CisKK30KKworLyogQ2xlYW4gdXAsIGRyb3AgdG8gdXNlciBwcml2aWxlZ2VzLCBzZXQgdXAgdGhlIGVudmlyb25tZW50IGFuZCBleGVjdXRlCisgKiB0aGUgY29tbWFuZC9zaGVsbC4gVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4uICovCitzdGF0aWMgdm9pZCBleGVjY2hpbGQoc3RydWN0IENoYW5TZXNzICpjaGFuc2VzcykgeworCisJY2hhciAqYXJndls0XTsKKwljaGFyICogdXNlcnNoZWxsID0gTlVMTDsKKwljaGFyICogYmFzZXNoZWxsID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgaTsKKworICAgIC8qIHdpdGggdUNsaW51eCB3ZSdsbCBoYXZlIHZmb3JrKCllZCwgc28gZG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUgdGhlCisgICAgICogaG9zdGtleS4gY2FuJ3QgdGhpbmsgb2YgYSB3b3JrYXJvdW5kIHRvIGNsZWFyIGl0ICovCisjaWZuZGVmIF9fdUNsaW51eF9fCisJLyogd2lwZSB0aGUgaG9zdGtleSAqLworCXNpZ25fa2V5X2ZyZWUoc3ZyX29wdHMuaG9zdGtleSk7CisJc3ZyX29wdHMuaG9zdGtleSA9IE5VTEw7CisKKwkvKiBvdmVyd3JpdGUgdGhlIHBybmcgc3RhdGUgKi8KKwlyZXNlZWRyYW5kb20oKTsKKyNlbmRpZgorCisJLyogY2xvc2UgZmlsZSBkZXNjcmlwdG9ycyBleGNlcHQgc3RkaW4vc3Rkb3V0L3N0ZGVycgorCSAqIE5lZWQgdG8gYmUgc3VyZSBGRHMgYXJlIGNsb3NlZCBoZXJlIHRvIGF2b2lkIHJlYWRpbmcgZmlsZXMgYXMgcm9vdCAqLworCWZvciAoaSA9IDM7IGkgPD0gKHVuc2lnbmVkIGludClzZXMubWF4ZmQ7IGkrKykgeworCQltX2Nsb3NlKGkpOworCX0KKworCS8qIGNsZWFyIGVudmlyb25tZW50ICovCisJLyogaWYgd2UncmUgZGVidWdnaW5nIHVzaW5nIHZhbGdyaW5kIGV0Yywgd2UgbmVlZCB0byBrZWVwIHRoZSBMRF9QUkVMT0FECisJICogZXRjLiBUaGlzIGlzIGhhemFyZG91cywgc28gc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgZGVidWdnaW5nLiAqLworI2lmbmRlZiBERUJVR19WQUxHUklORAorI2lmZGVmIEhBVkVfQ0xFQVJFTlYKKwljbGVhcmVudigpOworI2Vsc2UgLyogZG9uJ3QgSEFWRV9DTEVBUkVOViAqLworCS8qIFlheSBmb3IgcG9zaXguICovCisJaWYgKGVudmlyb24pIHsKKwkJZW52aXJvblswXSA9IE5VTEw7CisJfQorI2VuZGlmIC8qIEhBVkVfQ0xFQVJFTlYgKi8KKyNlbmRpZiAvKiBERUJVR19WQUxHUklORCAqLworCisJLyogV2UgY2FuIG9ubHkgY2hhbmdlIHVpZC9naWQgYXMgcm9vdCAuLi4gKi8KKwlpZiAoZ2V0dWlkKCkgPT0gMCkgeworCisJCWlmICgoc2V0Z2lkKHNlcy5hdXRoc3RhdGUucHctPnB3X2dpZCkgPCAwKSB8fAorCQkJKGluaXRncm91cHMoc2VzLmF1dGhzdGF0ZS5wdy0+cHdfbmFtZSwgCisJCQkJCQlzZXMuYXV0aHN0YXRlLnB3LT5wd19naWQpIDwgMCkpIHsKKwkJCWRyb3BiZWFyX2V4aXQoImVycm9yIGNoYW5naW5nIHVzZXIgZ3JvdXAiKTsKKwkJfQorCQlpZiAoc2V0dWlkKHNlcy5hdXRoc3RhdGUucHctPnB3X3VpZCkgPCAwKSB7CisJCQlkcm9wYmVhcl9leGl0KCJlcnJvciBjaGFuZ2luZyB1c2VyIik7CisJCX0KKwl9IGVsc2UgeworCQkvKiAuLi4gYnV0IGlmIHRoZSBkYWVtb24gaXMgdGhlIHNhbWUgdWlkIGFzIHRoZSByZXF1ZXN0ZWQgdWlkLCB3ZSBkb24ndAorCQkgKiBuZWVkIHRvICovCisKKwkJLyogWFhYIC0gdGhlcmUgaXMgYSBtaW5vciBpc3N1ZSBoZXJlLCBpbiB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZQorCQkgKiB1c2VybmFtZXMgd2l0aCB0aGUgc2FtZSB1aWQsIGJ1dCBkaWZmZXJpbmcgZ3JvdXBzLCB0aGVuIHRoZQorCQkgKiBkaWZmZXJpbmcgZ3JvdXBzIHdvbid0IGJlIHNldCAoYXMgd2l0aCBpbml0Z3JvdXBzKCkpLiBUaGUgc29sdXRpb24KKwkJICogaXMgZm9yIHRoZSBzeXNhZG1pbiBub3QgdG8gZ2l2ZSBvdXQgdGhlIFVJRCB0d2ljZSAqLworCQlpZiAoZ2V0dWlkKCkgIT0gc2VzLmF1dGhzdGF0ZS5wdy0+cHdfdWlkKSB7CisJCQlkcm9wYmVhcl9leGl0KCJjb3VsZG4ndAljaGFuZ2UgdXNlciBhcyBub24tcm9vdCIpOworCQl9CisJfQorCisJLyogYW4gZW1wdHkgc2hlbGwgc2hvdWxkIGJlIGludGVycHJldGVkIGFzICIvYmluL3NoIiAqLworCWlmIChzZXMuYXV0aHN0YXRlLnB3LT5wd19zaGVsbFswXSA9PSAnXDAnKSB7CisJCXVzZXJzaGVsbCA9ICIvYmluL3NoIjsKKwl9IGVsc2UgeworCQl1c2Vyc2hlbGwgPSBzZXMuYXV0aHN0YXRlLnB3LT5wd19zaGVsbDsKKwl9CisKKwkvKiBzZXQgZW52IHZhcnMgKi8KKwlhZGRuZXd2YXIoIlVTRVIiLCBzZXMuYXV0aHN0YXRlLnB3LT5wd19uYW1lKTsKKwlhZGRuZXd2YXIoIkxPR05BTUUiLCBzZXMuYXV0aHN0YXRlLnB3LT5wd19uYW1lKTsKKwlhZGRuZXd2YXIoIkhPTUUiLCBzZXMuYXV0aHN0YXRlLnB3LT5wd19kaXIpOworCWFkZG5ld3ZhcigiU0hFTEwiLCB1c2Vyc2hlbGwpOworCWlmIChjaGFuc2Vzcy0+dGVybSAhPSBOVUxMKSB7CisJCWFkZG5ld3ZhcigiVEVSTSIsIGNoYW5zZXNzLT50ZXJtKTsKKwl9CisKKwkvKiBjaGFuZ2UgZGlyZWN0b3J5ICovCisJaWYgKGNoZGlyKHNlcy5hdXRoc3RhdGUucHctPnB3X2RpcikgPCAwKSB7CisJCWRyb3BiZWFyX2V4aXQoImVycm9yIGNoYW5naW5nIGRpcmVjdG9yeSIpOworCX0KKworI2lmbmRlZiBESVNBQkxFX1gxMUZXRAorCS8qIHNldCB1cCBYMTEgZm9yd2FyZGluZyBpZiBlbmFibGVkICovCisJeDExc2V0YXV0aChjaGFuc2Vzcyk7CisjZW5kaWYKKyNpZm5kZWYgRElTQUJMRV9BR0VOVEZXRAorCS8qIHNldCB1cCBhZ2VudCBlbnYgdmFyaWFibGUgKi8KKwlhZ2VudHNldChjaGFuc2Vzcyk7CisjZW5kaWYKKworCS8qIFJlLWVuYWJsZSBTSUdQSVBFIGZvciB0aGUgZXhlY3V0ZWQgcHJvY2VzcyAqLworCWlmIChzaWduYWwoU0lHUElQRSwgU0lHX0RGTCkgPT0gU0lHX0VSUikgeworCQlkcm9wYmVhcl9leGl0KCJzaWduYWwoKSBlcnJvciIpOworCX0KKworCWJhc2VzaGVsbCA9IGJhc2VuYW1lKHVzZXJzaGVsbCk7CisKKwlpZiAoY2hhbnNlc3MtPmNtZCAhPSBOVUxMKSB7CisJCWFyZ3ZbMF0gPSBiYXNlc2hlbGw7CisJfSBlbHNlIHsKKwkJLyogYSBsb2dpbiBzaGVsbCBzaG91bGQgYmUgIi1iYXNoIiBmb3IgIi9iaW4vYmFzaCIgZXRjICovCisJCWludCBsZW4gPSBzdHJsZW4oYmFzZXNoZWxsKSArIDI7IC8qIDIgZm9yICItIiAqLworCQlhcmd2WzBdID0gKGNoYXIqKW1fbWFsbG9jKGxlbik7CisJCXNucHJpbnRmKGFyZ3ZbMF0sIGxlbiwgIi0lcyIsIGJhc2VzaGVsbCk7CisJfQorCisJaWYgKGNoYW5zZXNzLT5jbWQgIT0gTlVMTCkgeworCQlhcmd2WzFdID0gIi1jIjsKKwkJYXJndlsyXSA9IGNoYW5zZXNzLT5jbWQ7CisJCWFyZ3ZbM10gPSBOVUxMOworCX0gZWxzZSB7CisJCS8qIGNvbnN0cnVjdCBhIHNoZWxsIG9mIHRoZSBmb3JtICItYmFzaCIgZXRjICovCisJCWFyZ3ZbMV0gPSBOVUxMOworCX0KKworCWV4ZWN2KHVzZXJzaGVsbCwgYXJndik7CisKKwkvKiBvbmx5IHJlYWNoZWQgb24gZXJyb3IgKi8KKwlkcm9wYmVhcl9leGl0KCJjaGlsZCBmYWlsZWQiKTsKK30KKworY29uc3Qgc3RydWN0IENoYW5UeXBlIHN2cmNoYW5zZXNzID0geworCTAsIC8qIHNlcGZkcyAqLworCSJzZXNzaW9uIiwgLyogbmFtZSAqLworCW5ld2NoYW5zZXNzLCAvKiBpbml0aGFuZGxlciAqLworCXNlc3NjaGVja2Nsb3NlLCAvKiBjaGVja2Nsb3NlaGFuZGxlciAqLworCWNoYW5zZXNzaW9ucmVxdWVzdCwgLyogcmVxaGFuZGxlciAqLworCWNsb3NlY2hhbnNlc3MsIC8qIGNsb3NlaGFuZGxlciAqLworfTsKKworCisvKiBTZXQgdXAgdGhlIGdlbmVyYWwgY2hhbnNlc3Npb24gZW52aXJvbm1lbnQsIGluIHBhcnRpY3VsYXIgY2hpbGQtZXhpdAorICogaGFuZGxpbmcgKi8KK3ZvaWQgc3ZyX2NoYW5zZXNzaW5pdGlhbGlzZSgpIHsKKworCXN0cnVjdCBzaWdhY3Rpb24gc2FfY2hsZDsKKworCS8qIHNpbmdsZSBjaGlsZCBwcm9jZXNzIGludGlhbGx5ICovCisJc3ZyX3Nlcy5jaGlsZHBpZHMgPSAoc3RydWN0IENoaWxkUGlkKiltX21hbGxvYyhzaXplb2Yoc3RydWN0IENoaWxkUGlkKSk7CisJc3ZyX3Nlcy5jaGlsZHBpZHNbMF0ucGlkID0gLTE7IC8qIHVudXNlZCAqLworCXN2cl9zZXMuY2hpbGRwaWRzWzBdLmNoYW5zZXNzID0gTlVMTDsKKwlzdnJfc2VzLmNoaWxkcGlkc2l6ZSA9IDE7CisJc3ZyX3Nlcy5sYXN0ZXhpdC5leGl0cGlkID0gLTE7IC8qIE5vdGhpbmcgaGFzIGV4aXRlZCB5ZXQgKi8KKwlzYV9jaGxkLnNhX2hhbmRsZXIgPSBzZXNzc2lnY2hpbGRfaGFuZGxlcjsKKwlzYV9jaGxkLnNhX2ZsYWdzID0gU0FfTk9DTERTVE9QOworCWlmIChzaWdhY3Rpb24oU0lHQ0hMRCwgJnNhX2NobGQsIE5VTEwpIDwgMCkgeworCQlkcm9wYmVhcl9leGl0KCJzaWduYWwoKSBlcnJvciIpOworCX0KKwkKK30KKworLyogYWRkIGEgbmV3IGVudmlyb25tZW50IHZhcmlhYmxlLCBhbGxvY2F0aW5nIHNwYWNlIGZvciB0aGUgZW50cnkgKi8KK3ZvaWQgYWRkbmV3dmFyKGNvbnN0IGNoYXIqIHBhcmFtLCBjb25zdCBjaGFyKiB2YXIpIHsKKworCWNoYXIqIG5ld3ZhciA9IE5VTEw7CisJaW50IHBsZW4sIHZsZW47CisKKwlwbGVuID0gc3RybGVuKHBhcmFtKTsKKwl2bGVuID0gc3RybGVuKHZhcik7CisKKwluZXd2YXIgPSBtX21hbGxvYyhwbGVuICsgdmxlbiArIDIpOyAvKiAyIGlzIGZvciAnPScgYW5kICdcMCcgKi8KKwltZW1jcHkobmV3dmFyLCBwYXJhbSwgcGxlbik7CisJbmV3dmFyW3BsZW5dID0gJz0nOworCW1lbWNweSgmbmV3dmFyW3BsZW4rMV0sIHZhciwgdmxlbik7CisJbmV3dmFyW3BsZW4rdmxlbisxXSA9ICdcMCc7CisJLyogbmV3dmFyIGlzIGxlYWtlZCBoZXJlLCBidXQgdGhhdCdzIHBhcnQgb2YgcHV0ZW52KCkncyBzZW1hbnRpY3MgKi8KKwlpZiAocHV0ZW52KG5ld3ZhcikgPCAwKSB7CisJCWRyb3BiZWFyX2V4aXQoImVudmlyb24gZXJyb3IiKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zdnIta2V4LmMgYi9zdnIta2V4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVjYjA5MAotLS0gL2Rldi9udWxsCisrKyBiL3N2ci1rZXguYwpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgTWlobmVhIFN0b2VuZXNjdQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgImFsZ28uaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJzZXNzaW9uLmgiCisjaW5jbHVkZSAia2V4LmgiCisjaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAicGFja2V0LmgiCisjaW5jbHVkZSAiYmlnbnVtLmgiCisjaW5jbHVkZSAicmFuZG9tLmgiCisjaW5jbHVkZSAicnVub3B0cy5oIgorCisKK3N0YXRpYyB2b2lkIHNlbmRfbXNnX2tleGRoX3JlcGx5KG1wX2ludCAqZGhfZSk7CisKKy8qIEhhbmRsZSBhIGRpZmZpZS1oZWxsbWFuIGtleSBleGNoYW5nZSBpbml0aWFsaXNhdGlvbi4gVGhpcyBpbnZvbHZlcworICogY2FsY3VsYXRpbmcgYSBzZXNzaW9uIGtleSByZXBseSB2YWx1ZSwgYW5kIGNvcnJlc3BvbmRpbmcgaGFzaC4gVGhlc2UKKyAqIGFyZSBjYXJyaWVkIG91dCBieSBzZW5kX21zZ19rZXhkaF9yZXBseSgpLiByZWN2X21zZ19rZXhkaF9pbml0KCkgY2FsbHMKKyAqIHRoYXQgZnVuY3Rpb24sIHRoZW4gYnJpbmdzIHRoZSBuZXcga2V5cyBpbnRvIHVzZSAqLwordm9pZCByZWN2X21zZ19rZXhkaF9pbml0KCkgeworCisJREVGX01QX0lOVChkaF9lKTsKKworCVRSQUNFKCgiZW50ZXIgcmVjdl9tc2dfa2V4ZGhfaW5pdCIpKQorCWlmICghc2VzLmtleHN0YXRlLnJlY3ZrZXhpbml0KSB7CisJCWRyb3BiZWFyX2V4aXQoIlByZW1hdHVyZSBrZXhkaF9pbml0IG1lc3NhZ2UgcmVjZWl2ZWQiKTsKKwl9CisKKwltX21wX2luaXQoJmRoX2UpOworCWlmIChidWZfZ2V0bXBpbnQoc2VzLnBheWxvYWQsICZkaF9lKSAhPSBEUk9QQkVBUl9TVUNDRVNTKSB7CisJCWRyb3BiZWFyX2V4aXQoIkZhaWxlZCB0byBnZXQga2V4IHZhbHVlIik7CisJfQorCisJc2VuZF9tc2dfa2V4ZGhfcmVwbHkoJmRoX2UpOworCisJbXBfY2xlYXIoJmRoX2UpOworCisJc2VuZF9tc2dfbmV3a2V5cygpOworCXNlcy5yZXF1aXJlbmV4dCA9IFNTSF9NU0dfTkVXS0VZUzsKKwlUUkFDRSgoImxlYXZlIHJlY3ZfbXNnX2tleGRoX2luaXQiKSkKK30KKwkKKy8qIEdlbmVyYXRlIG91ciBzaWRlIG9mIHRoZSBkaWZmaWUtaGVsbG1hbiBrZXkgZXhjaGFuZ2UgdmFsdWUgKGRoX2YpLCBhbmQKKyAqIGNhbGN1bGF0ZSB0aGUgc2Vzc2lvbiBrZXkgdXNpbmcgdGhlIGRpZmZpZS1oZWxsbWFuIGFsZ29yaXRobS4gRm9sbG93aW5nCisgKiB0aGF0LCB0aGUgc2Vzc2lvbiBoYXNoIGlzIGNhbGN1bGF0ZWQsIGFuZCBzaWduZWQgd2l0aCBSU0Egb3IgRFNTLiBUaGUKKyAqIHJlc3VsdCBpcyBzZW50IHRvIHRoZSBjbGllbnQuIAorICoKKyAqIFNlZSB0aGUgaWV0Zi1zZWNzaC10cmFuc3BvcnQgZHJhZnQsIHNlY3Rpb24gNiwgZm9yIGRldGFpbHMgKi8KK3N0YXRpYyB2b2lkIHNlbmRfbXNnX2tleGRoX3JlcGx5KG1wX2ludCAqZGhfZSkgeworCisJREVGX01QX0lOVChkaF95KTsKKwlERUZfTVBfSU5UKGRoX2YpOworCisJVFJBQ0UoKCJlbnRlciBzZW5kX21zZ19rZXhkaF9yZXBseSIpKQorCW1fbXBfaW5pdF9tdWx0aSgmZGhfeSwgJmRoX2YsIE5VTEwpOworCQorCWdlbl9rZXhkaF92YWxzKCZkaF9mLCAmZGhfeSk7CisKKwlrZXhkaF9jb21iX2tleSgmZGhfZiwgJmRoX3ksIGRoX2UsIHN2cl9vcHRzLmhvc3RrZXkpOworCW1wX2NsZWFyKCZkaF95KTsKKworCS8qIHdlIGNhbiBzdGFydCBjcmVhdGluZyB0aGUga2V4ZGhfcmVwbHkgcGFja2V0ICovCisJQ0hFQ0tDTEVBUlRPV1JJVEUoKTsKKwlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCBTU0hfTVNHX0tFWERIX1JFUExZKTsKKwlidWZfcHV0X3B1Yl9rZXkoc2VzLndyaXRlcGF5bG9hZCwgc3ZyX29wdHMuaG9zdGtleSwKKwkJCXNlcy5uZXdrZXlzLT5hbGdvX2hvc3RrZXkpOworCisJLyogcHV0IGYgKi8KKwlidWZfcHV0bXBpbnQoc2VzLndyaXRlcGF5bG9hZCwgJmRoX2YpOworCW1wX2NsZWFyKCZkaF9mKTsKKworCS8qIGNhbGMgdGhlIHNpZ25hdHVyZSAqLworCWJ1Zl9wdXRfc2lnbihzZXMud3JpdGVwYXlsb2FkLCBzdnJfb3B0cy5ob3N0a2V5LCAKKwkJCXNlcy5uZXdrZXlzLT5hbGdvX2hvc3RrZXksIHNlcy5oYXNoLCBTSEExX0hBU0hfU0laRSk7CisKKwkvKiB0aGUgU1NIX01TR19LRVhESF9SRVBMWSBpcyBkb25lICovCisJZW5jcnlwdF9wYWNrZXQoKTsKKworCVRSQUNFKCgibGVhdmUgc2VuZF9tc2dfa2V4ZGhfcmVwbHkiKSkKK30KKwpkaWZmIC0tZ2l0IGEvc3ZyLW1haW4uYyBiL3N2ci1tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI2NWE0NQotLS0gL2Rldi9udWxsCisrKyBiL3N2ci1tYWluLmMKQEAgLTAsMCArMSw0MjMgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDYgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJidWZmZXIuaCIKKyNpbmNsdWRlICJzaWdua2V5LmgiCisjaW5jbHVkZSAicnVub3B0cy5oIgorI2luY2x1ZGUgInJhbmRvbS5oIgorCitzdGF0aWMgc2l6ZV90IGxpc3RlbnNvY2tldHMoaW50ICpzb2NrLCBzaXplX3Qgc29ja2NvdW50LCBpbnQgKm1heGZkKTsKK3N0YXRpYyB2b2lkIHNpZ2NobGRfaGFuZGxlcihpbnQgZHVtbXkpOworc3RhdGljIHZvaWQgc2lnc2Vndl9oYW5kbGVyKGludCk7CitzdGF0aWMgdm9pZCBzaWdpbnR0ZXJtX2hhbmRsZXIoaW50IGZpc2gpOworI2lmZGVmIElORVREX01PREUKK3N0YXRpYyB2b2lkIG1haW5faW5ldGQoKTsKKyNlbmRpZgorI2lmZGVmIE5PTl9JTkVURF9NT0RFCitzdGF0aWMgdm9pZCBtYWluX25vaW5ldGQoKTsKKyNlbmRpZgorc3RhdGljIHZvaWQgY29tbW9uc2V0dXAoKTsKKworI2lmIGRlZmluZWQoREJNVUxUSV9kcm9wYmVhcikgfHwgIWRlZmluZWQoRFJPUEJFQVJfTVVMVEkpCisjaWYgZGVmaW5lZChEQk1VTFRJX2Ryb3BiZWFyKSAmJiBkZWZpbmVkKERST1BCRUFSX01VTFRJKQoraW50IGRyb3BiZWFyX21haW4oaW50IGFyZ2MsIGNoYXIgKiogYXJndikKKyNlbHNlCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKiBhcmd2KQorI2VuZGlmCit7CisJX2Ryb3BiZWFyX2V4aXQgPSBzdnJfZHJvcGJlYXJfZXhpdDsKKwlfZHJvcGJlYXJfbG9nID0gc3ZyX2Ryb3BiZWFyX2xvZzsKKworCWRpc2FsbG93X2NvcmUoKTsKKworCS8qIGdldCBjb21tYW5kbGluZSBvcHRpb25zICovCisJc3ZyX2dldG9wdHMoYXJnYywgYXJndik7CisKKyNpZmRlZiBJTkVURF9NT0RFCisJLyogc2VydmljZSBwcm9ncmFtIG1vZGUgKi8KKwlpZiAoc3ZyX29wdHMuaW5ldGRtb2RlKSB7CisJCW1haW5faW5ldGQoKTsKKwkJLyogbm90cmVhY2hlZCAqLworCX0KKyNlbmRpZgorCisjaWZkZWYgTk9OX0lORVREX01PREUKKwltYWluX25vaW5ldGQoKTsKKwkvKiBub3RyZWFjaGVkICovCisjZW5kaWYKKworCWRyb3BiZWFyX2V4aXQoIkNvbXBpbGVkIHdpdGhvdXQgbm9ybWFsIG1vZGUsIGNhbid0IHJ1biB3aXRob3V0IC1pXG4iKTsKKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYKKworI2lmZGVmIElORVREX01PREUKK3N0YXRpYyB2b2lkIG1haW5faW5ldGQoKSB7CisKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSByZW1vdGVhZGRyOworCXNvY2tsZW5fdCByZW1vdGVhZGRybGVuOworCWNoYXIgKiBhZGRyc3RyaW5nID0gTlVMTDsKKworCS8qIFNldCB1cCBoYW5kbGVycywgc3lzbG9nLCBzZWVkIHJhbmRvbSAqLworCWNvbW1vbnNldHVwKCk7CisKKwlyZW1vdGVhZGRybGVuID0gc2l6ZW9mKHJlbW90ZWFkZHIpOworCWlmIChnZXRwZWVybmFtZSgwLCAoc3RydWN0IHNvY2thZGRyKikmcmVtb3RlYWRkciwgJnJlbW90ZWFkZHJsZW4pIDwgMCkgeworCQlkcm9wYmVhcl9leGl0KCJVbmFibGUgdG8gZ2V0cGVlcm5hbWU6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKwl9CisKKwkvKiBJbiBjYXNlIG91ciBpbmV0ZCB3YXMgbGF4IGluIGxvZ2dpbmcgc291cmNlIGFkZHJlc3NlcyAqLworCWFkZHJzdHJpbmcgPSBnZXRhZGRyc3RyaW5nKCZyZW1vdGVhZGRyLCAxKTsKKwlkcm9wYmVhcl9sb2coTE9HX0lORk8sICJDaGlsZCBjb25uZWN0aW9uIGZyb20gJXMiLCBhZGRyc3RyaW5nKTsKKworCS8qIERvbid0IGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgLSBpdCBtYXkganVzdCBmYWlsIHNpbmNlIGluZXRkIGhhcworCSAqIGFscmVhZHkgZG9uZSBzZXRzaWQoKSBhZnRlciBmb3JraW5nICh4aW5ldGQgb24gRGFyd2luIGFwcGVhcnMgdG8gZG8KKwkgKiB0aGlzICovCisJc2V0c2lkKCk7CisKKwkvKiBTdGFydCBzZXJ2aWNlIHByb2dyYW0gCisJICogLTEgaXMgYSBkdW1teSBjaGlsZHBpcGUsIGp1c3Qgc29tZXRoaW5nIHdlIGNhbiBjbG9zZSgpIHdpdGhvdXQgCisJICogbWF0dGVyaW5nLiAqLworCXN2cl9zZXNzaW9uKDAsIC0xLCBnZXRhZGRyaG9zdG5hbWUoJnJlbW90ZWFkZHIpLCBhZGRyc3RyaW5nKTsKKworCS8qIG5vdHJlYWNoZWQgKi8KK30KKyNlbmRpZiAvKiBJTkVURF9NT0RFICovCisKKyNpZmRlZiBOT05fSU5FVERfTU9ERQordm9pZCBtYWluX25vaW5ldGQoKSB7CisJZmRfc2V0IGZkczsKKwlzdHJ1Y3QgdGltZXZhbCBzZWx0aW1lb3V0OworCXVuc2lnbmVkIGludCBpLCBqOworCWludCB2YWw7CisJaW50IG1heHNvY2sgPSAtMTsKKwlpbnQgbGlzdGVuc29ja3NbTUFYX0xJU1RFTl9BRERSXTsKKwlzaXplX3QgbGlzdGVuc29ja2NvdW50ID0gMDsKKwlGSUxFICpwaWRmaWxlID0gTlVMTDsKKworCWludCBjaGlsZHBpcGVzW01BWF9VTkFVVEhfQ0xJRU5UU107CisJY2hhciAqIHByZWF1dGhfYWRkcnNbTUFYX1VOQVVUSF9DTElFTlRTXTsKKworCWludCBjaGlsZHNvY2s7CisJaW50IGNoaWxkcGlwZVsyXTsKKworCS8qIE5vdGU6IGNvbW1vbnNldHVwKCkgbXVzdCBoYXBwZW4gYmVmb3JlIHdlIGRhZW1vbigpaXNlLiBPdGhlcndpc2UKKwkgICBkYWVtb24oKSB3aWxsIGNoZGlyKCIvIiksIGFuZCB3ZSB3b24ndCBiZSBhYmxlIHRvIGZpbmQgbG9jYWwtZGlyCisJICAgaG9zdGtleXMuICovCisJY29tbW9uc2V0dXAoKTsKKworCS8qIGZvcmsgKi8KKwlpZiAoc3ZyX29wdHMuZm9ya2JnKSB7CisJCWludCBjbG9zZWZkcyA9IDA7CisjaWZuZGVmIERFQlVHX1RSQUNFCisJCWlmICghc3ZyX29wdHMudXNpbmdzeXNsb2cpIHsKKwkJCWNsb3NlZmRzID0gMTsKKwkJfQorI2VuZGlmCisJCWlmIChkYWVtb24oMCwgY2xvc2VmZHMpIDwgMCkgeworCQkJZHJvcGJlYXJfZXhpdCgiRmFpbGVkIHRvIGRhZW1vbml6ZTogJXMiLCBzdHJlcnJvcihlcnJubykpOworCQl9CisJfQorCisJLyogc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgc3lzbG9nIGlzIHdvcmtpbmcgKi8KKwlpZiAoc3ZyX29wdHMuZm9ya2JnKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfSU5GTywgIlJ1bm5pbmcgaW4gYmFja2dyb3VuZCIpOworCX0gZWxzZSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfSU5GTywgIk5vdCBmb3JraW5nIik7CisJfQorCisJLyogY3JlYXRlIGEgUElEIGZpbGUgc28gdGhhdCB3ZSBjYW4gYmUga2lsbGVkIGVhc2lseSAqLworCXBpZGZpbGUgPSBmb3BlbihzdnJfb3B0cy5waWRmaWxlLCAidyIpOworCWlmIChwaWRmaWxlKSB7CisJCWZwcmludGYocGlkZmlsZSwgIiVkXG4iLCBnZXRwaWQoKSk7CisJCWZjbG9zZShwaWRmaWxlKTsKKwl9CisKKwkvKiBzb2NrZXRzIHRvIGlkZW50aWZ5IHByZS1hdXRoZW50aWNhdGVkIGNsaWVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTUFYX1VOQVVUSF9DTElFTlRTOyBpKyspIHsKKwkJY2hpbGRwaXBlc1tpXSA9IC0xOworCX0KKwliemVybyhwcmVhdXRoX2FkZHJzLCBzaXplb2YocHJlYXV0aF9hZGRycykpOworCQorCS8qIFNldCB1cCB0aGUgbGlzdGVuaW5nIHNvY2tldHMgKi8KKwlsaXN0ZW5zb2NrY291bnQgPSBsaXN0ZW5zb2NrZXRzKGxpc3RlbnNvY2tzLCBNQVhfTElTVEVOX0FERFIsICZtYXhzb2NrKTsKKwlpZiAobGlzdGVuc29ja2NvdW50ID09IDApCisJeworCQlkcm9wYmVhcl9leGl0KCJObyBsaXN0ZW5pbmcgcG9ydHMgYXZhaWxhYmxlLiIpOworCX0KKworCS8qIGluY29taW5nIGNvbm5lY3Rpb24gc2VsZWN0IGxvb3AgKi8KKwlmb3IoOzspIHsKKworCQlGRF9aRVJPKCZmZHMpOworCQkKKwkJc2VsdGltZW91dC50dl9zZWMgPSA2MDsKKwkJc2VsdGltZW91dC50dl91c2VjID0gMDsKKwkJCisJCS8qIGxpc3RlbmluZyBzb2NrZXRzICovCisJCWZvciAoaSA9IDA7IGkgPCBsaXN0ZW5zb2NrY291bnQ7IGkrKykgeworCQkJRkRfU0VUKGxpc3RlbnNvY2tzW2ldLCAmZmRzKTsKKwkJfQorCisJCS8qIHByZS1hdXRoZW50aWNhdGlvbiBjbGllbnRzICovCisJCWZvciAoaSA9IDA7IGkgPCBNQVhfVU5BVVRIX0NMSUVOVFM7IGkrKykgeworCQkJaWYgKGNoaWxkcGlwZXNbaV0gPj0gMCkgeworCQkJCUZEX1NFVChjaGlsZHBpcGVzW2ldLCAmZmRzKTsKKwkJCQltYXhzb2NrID0gTUFYKG1heHNvY2ssIGNoaWxkcGlwZXNbaV0pOworCQkJfQorCQl9CisKKwkJdmFsID0gc2VsZWN0KG1heHNvY2srMSwgJmZkcywgTlVMTCwgTlVMTCwgJnNlbHRpbWVvdXQpOworCisJCWlmIChleGl0ZmxhZykgeworCQkJdW5saW5rKHN2cl9vcHRzLnBpZGZpbGUpOworCQkJZHJvcGJlYXJfZXhpdCgiVGVybWluYXRlZCBieSBzaWduYWwiKTsKKwkJfQorCQkKKwkJaWYgKHZhbCA9PSAwKSB7CisJCQkvKiB0aW1lb3V0IHJlYWNoZWQgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHZhbCA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFSU5UUikgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJZHJvcGJlYXJfZXhpdCgiTGlzdGVuaW5nIHNvY2tldCBlcnJvciIpOworCQl9CisKKwkJLyogY2xvc2UgZmRzIHdoaWNoIGhhdmUgYmVlbiBhdXRoZWQgb3IgY2xvc2VkIC0gc3ZyLWF1dGguYyBoYW5kbGVzCisJCSAqIGNsb3NpbmcgdGhlIGF1dGggc29ja2V0cyBvbiBzdWNjZXNzICovCisJCWZvciAoaSA9IDA7IGkgPCBNQVhfVU5BVVRIX0NMSUVOVFM7IGkrKykgeworCQkJaWYgKGNoaWxkcGlwZXNbaV0gPj0gMCAmJiBGRF9JU1NFVChjaGlsZHBpcGVzW2ldLCAmZmRzKSkgeworCQkJCW1fY2xvc2UoY2hpbGRwaXBlc1tpXSk7CisJCQkJY2hpbGRwaXBlc1tpXSA9IC0xOworCQkJCW1fZnJlZShwcmVhdXRoX2FkZHJzW2ldKTsKKwkJCX0KKwkJfQorCisJCS8qIGhhbmRsZSBlYWNoIHNvY2tldCB3aGljaCBoYXMgc29tZXRoaW5nIHRvIHNheSAqLworCQlmb3IgKGkgPSAwOyBpIDwgbGlzdGVuc29ja2NvdW50OyBpKyspIHsKKworCQkJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgcmVtb3RlYWRkcjsKKwkJCXNvY2tsZW5fdCByZW1vdGVhZGRybGVuID0gMDsKKwkJCXNpemVfdCBudW1fdW5hdXRoZWRfZm9yX2FkZHIgPSAwOworCQkJc2l6ZV90IG51bV91bmF1dGhlZF90b3RhbCA9IDA7CisJCQljaGFyICogcmVtb3RlX2FkZHJfc3RyID0gTlVMTDsKKwkJCXBpZF90IGZvcmtfcmV0ID0gMDsKKwkJCXNpemVfdCBjb25uX2lkeCA9IDA7CisKKwkJCWlmICghRkRfSVNTRVQobGlzdGVuc29ja3NbaV0sICZmZHMpKSAKKwkJCQljb250aW51ZTsKKworCQkJcmVtb3RlYWRkcmxlbiA9IHNpemVvZihyZW1vdGVhZGRyKTsKKwkJCWNoaWxkc29jayA9IGFjY2VwdChsaXN0ZW5zb2Nrc1tpXSwgCisJCQkJCShzdHJ1Y3Qgc29ja2FkZHIqKSZyZW1vdGVhZGRyLCAmcmVtb3RlYWRkcmxlbik7CisKKwkJCWlmIChjaGlsZHNvY2sgPCAwKSB7CisJCQkJLyogYWNjZXB0IGZhaWxlZCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQkvKiBMaW1pdCB0aGUgbnVtYmVyIG9mIHVuYXV0aGVudGljYXRlZCBjb25uZWN0aW9ucyBwZXIgSVAgKi8KKwkJCXJlbW90ZV9hZGRyX3N0ciA9IGdldGFkZHJzdHJpbmcoJnJlbW90ZWFkZHIsIDApOworCisJCQludW1fdW5hdXRoZWRfZm9yX2FkZHIgPSAwOworCQkJbnVtX3VuYXV0aGVkX3RvdGFsID0gMDsKKwkJCWZvciAoaiA9IDA7IGogPCBNQVhfVU5BVVRIX0NMSUVOVFM7IGorKykgeworCQkJCWlmIChjaGlsZHBpcGVzW2pdID49IDApIHsKKwkJCQkJbnVtX3VuYXV0aGVkX3RvdGFsKys7CisJCQkJCWlmIChzdHJjbXAocmVtb3RlX2FkZHJfc3RyLCBwcmVhdXRoX2FkZHJzW2pdKSA9PSAwKSB7CisJCQkJCQludW1fdW5hdXRoZWRfZm9yX2FkZHIrKzsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8qIGEgZnJlZSBzbG90ICovCisJCQkJCWNvbm5faWR4ID0gajsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChudW1fdW5hdXRoZWRfdG90YWwgPj0gTUFYX1VOQVVUSF9DTElFTlRTCisJCQkJCXx8IG51bV91bmF1dGhlZF9mb3JfYWRkciA+PSBNQVhfVU5BVVRIX1BFUl9JUCkgeworCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlpZiAocGlwZShjaGlsZHBpcGUpIDwgMCkgeworCQkJCVRSQUNFKCgiZXJyb3IgY3JlYXRpbmcgY2hpbGQgcGlwZSIpKQorCQkJCWdvdG8gb3V0OworCQkJfQorCisJCQlmb3JrX3JldCA9IGZvcmsoKTsKKwkJCWlmIChmb3JrX3JldCA8IDApIHsKKwkJCQlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJlcnJvciBmb3JraW5nOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZ290byBvdXQ7CisKKwkJCX0gZWxzZSBpZiAoZm9ya19yZXQgPiAwKSB7CisKKwkJCQkvKiBwYXJlbnQgKi8KKwkJCQljaGlsZHBpcGVzW2Nvbm5faWR4XSA9IGNoaWxkcGlwZVswXTsKKwkJCQltX2Nsb3NlKGNoaWxkcGlwZVsxXSk7CisJCQkJcHJlYXV0aF9hZGRyc1tjb25uX2lkeF0gPSByZW1vdGVfYWRkcl9zdHI7CisJCQkJcmVtb3RlX2FkZHJfc3RyID0gTlVMTDsKKworCQkJfSBlbHNlIHsKKworCQkJCS8qIGNoaWxkICovCisJCQkJY2hhciAqIGFkZHJzdHJpbmcgPSBOVUxMOworI2lmZGVmIERFQlVHX0ZPUktHUFJPRgorCQkJCWV4dGVybiB2b2lkIF9zdGFydCh2b2lkKSwgZXRleHQodm9pZCk7CisJCQkJbW9uc3RhcnR1cCgodV9sb25nKSZfc3RhcnQsICh1X2xvbmcpJmV0ZXh0KTsKKyNlbmRpZiAvKiBERUJVR19GT1JLR1BST0YgKi8KKworCQkJCW1fZnJlZShyZW1vdGVfYWRkcl9zdHIpOworCQkJCWFkZHJzdHJpbmcgPSBnZXRhZGRyc3RyaW5nKCZyZW1vdGVhZGRyLCAxKTsKKwkJCQlkcm9wYmVhcl9sb2coTE9HX0lORk8sICJDaGlsZCBjb25uZWN0aW9uIGZyb20gJXMiLCBhZGRyc3RyaW5nKTsKKworCQkJCWlmIChzZXRzaWQoKSA8IDApIHsKKwkJCQkJZHJvcGJlYXJfZXhpdCgic2V0c2lkOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7CisJCQkJfQorCisJCQkJLyogbWFrZSBzdXJlIHdlIGNsb3NlIHNvY2tldHMgKi8KKwkJCQlmb3IgKGkgPSAwOyBpIDwgbGlzdGVuc29ja2NvdW50OyBpKyspIHsKKwkJCQkJbV9jbG9zZShsaXN0ZW5zb2Nrc1tpXSk7CisJCQkJfQorCisJCQkJbV9jbG9zZShjaGlsZHBpcGVbMF0pOworCisJCQkJLyogc3RhcnQgdGhlIHNlc3Npb24gKi8KKwkJCQlzdnJfc2Vzc2lvbihjaGlsZHNvY2ssIGNoaWxkcGlwZVsxXSwgCisJCQkJCQkJCWdldGFkZHJob3N0bmFtZSgmcmVtb3RlYWRkciksCisJCQkJCQkJCWFkZHJzdHJpbmcpOworCQkJCS8qIGRvbid0IHJldHVybiAqLworCQkJCWRyb3BiZWFyX2Fzc2VydCgwKTsKKwkJCX0KKworb3V0OgorCQkJLyogVGhpcyBzZWN0aW9uIGlzIGltcG9ydGFudCBmb3IgdGhlIHBhcmVudCB0b28gKi8KKwkJCW1fY2xvc2UoY2hpbGRzb2NrKTsKKwkJCWlmIChyZW1vdGVfYWRkcl9zdHIpIHsKKwkJCQltX2ZyZWUocmVtb3RlX2FkZHJfc3RyKTsKKwkJCX0KKwkJfQorCX0gLyogZm9yKDs7KSBsb29wICovCisKKwkvKiBkb24ndCByZWFjaCBoZXJlICovCit9CisjZW5kaWYgLyogTk9OX0lORVREX01PREUgKi8KKworCisvKiBjYXRjaCArIHJlYXAgem9tYmllIGNoaWxkcmVuICovCitzdGF0aWMgdm9pZCBzaWdjaGxkX2hhbmRsZXIoaW50IFVOVVNFRCh1bnVzZWQpKSB7CisJc3RydWN0IHNpZ2FjdGlvbiBzYV9jaGxkOworCisJd2hpbGUod2FpdHBpZCgtMSwgTlVMTCwgV05PSEFORykgPiAwKTsgCisKKwlzYV9jaGxkLnNhX2hhbmRsZXIgPSBzaWdjaGxkX2hhbmRsZXI7CisJc2FfY2hsZC5zYV9mbGFncyA9IFNBX05PQ0xEU1RPUDsKKwlpZiAoc2lnYWN0aW9uKFNJR0NITEQsICZzYV9jaGxkLCBOVUxMKSA8IDApIHsKKwkJZHJvcGJlYXJfZXhpdCgic2lnbmFsKCkgZXJyb3IiKTsKKwl9Cit9CisKKy8qIGNhdGNoIGFueSBzZWd2cyAqLworc3RhdGljIHZvaWQgc2lnc2Vndl9oYW5kbGVyKGludCBVTlVTRUQodW51c2VkKSkgeworCWZwcmludGYoc3RkZXJyLCAiQWllZSwgc2VnZmF1bHQhIFlvdSBzaG91bGQgcHJvYmFibHkgcmVwb3J0ICIKKwkJCSJ0aGlzIGFzIGEgYnVnIHRvIHRoZSBkZXZlbG9wZXJcbiIpOworCWV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworLyogY2F0Y2ggY3RybC1jIG9yIHNpZ3Rlcm0gKi8KK3N0YXRpYyB2b2lkIHNpZ2ludHRlcm1faGFuZGxlcihpbnQgVU5VU0VEKHVudXNlZCkpIHsKKworCWV4aXRmbGFnID0gMTsKK30KKworLyogVGhpbmdzIHVzZWQgYnkgaW5ldGQgYW5kIG5vbi1pbmV0ZCBtb2RlcyAqLworc3RhdGljIHZvaWQgY29tbW9uc2V0dXAoKSB7CisKKwlzdHJ1Y3Qgc2lnYWN0aW9uIHNhX2NobGQ7CisjaWZuZGVmIERJU0FCTEVfU1lTTE9HCisJaWYgKHN2cl9vcHRzLnVzaW5nc3lzbG9nKSB7CisJCXN0YXJ0c3lzbG9nKCk7CisJfQorI2VuZGlmCisKKwkvKiBzZXQgdXAgY2xlYW51cCBoYW5kbGVyICovCisJaWYgKHNpZ25hbChTSUdJTlQsIHNpZ2ludHRlcm1faGFuZGxlcikgPT0gU0lHX0VSUiB8fCAKKyNpZm5kZWYgREVCVUdfVkFMR1JJTkQKKwkJc2lnbmFsKFNJR1RFUk0sIHNpZ2ludHRlcm1faGFuZGxlcikgPT0gU0lHX0VSUiB8fAorI2VuZGlmCisJCXNpZ25hbChTSUdQSVBFLCBTSUdfSUdOKSA9PSBTSUdfRVJSKSB7CisJCWRyb3BiZWFyX2V4aXQoInNpZ25hbCgpIGVycm9yIik7CisJfQorCisJLyogY2F0Y2ggYW5kIHJlYXAgem9tYmllIGNoaWxkcmVuICovCisJc2FfY2hsZC5zYV9oYW5kbGVyID0gc2lnY2hsZF9oYW5kbGVyOworCXNhX2NobGQuc2FfZmxhZ3MgPSBTQV9OT0NMRFNUT1A7CisJaWYgKHNpZ2FjdGlvbihTSUdDSExELCAmc2FfY2hsZCwgTlVMTCkgPCAwKSB7CisJCWRyb3BiZWFyX2V4aXQoInNpZ25hbCgpIGVycm9yIik7CisJfQorCWlmIChzaWduYWwoU0lHU0VHViwgc2lnc2Vndl9oYW5kbGVyKSA9PSBTSUdfRVJSKSB7CisJCWRyb3BiZWFyX2V4aXQoInNpZ25hbCgpIGVycm9yIik7CisJfQorCisJLyogTm93IHdlIGNhbiBzZXR1cCB0aGUgaG9zdGtleXMgLSBuZWVkcyB0byBiZSBhZnRlciBsb2dnaW5nIGlzIG9uLAorCSAqIG90aGVyd2lzZSB3ZSBtaWdodCBlbmQgdXAgYmxhdHRpbmcgZXJyb3IgbWVzc2FnZXMgdG8gdGhlIHNvY2tldCAqLworCWxvYWRob3N0a2V5cygpOworCisgICAgc2VlZHJhbmRvbSgpOworfQorCisvKiBTZXQgdXAgbGlzdGVuaW5nIHNvY2tldHMgZm9yIGFsbCB0aGUgcmVxdWVzdGVkIHBvcnRzICovCitzdGF0aWMgc2l6ZV90IGxpc3RlbnNvY2tldHMoaW50ICpzb2NrLCBzaXplX3Qgc29ja2NvdW50LCBpbnQgKm1heGZkKSB7CisJCisJdW5zaWduZWQgaW50IGk7CisJY2hhciogZXJyc3RyaW5nID0gTlVMTDsKKwlzaXplX3Qgc29ja3BvcyA9IDA7CisJaW50IG5zb2NrOworCisJVFJBQ0UoKCJsaXN0ZW5zb2NrZXRzOiAlZCB0byB0cnlcbiIsIHN2cl9vcHRzLnBvcnRjb3VudCkpCisKKwlmb3IgKGkgPSAwOyBpIDwgc3ZyX29wdHMucG9ydGNvdW50OyBpKyspIHsKKworCQlUUkFDRSgoImxpc3RlbmluZyBvbiAnJXM6JXMnIiwgc3ZyX29wdHMuYWRkcmVzc2VzW2ldLCBzdnJfb3B0cy5wb3J0c1tpXSkpCisKKwkJbnNvY2sgPSBkcm9wYmVhcl9saXN0ZW4oc3ZyX29wdHMuYWRkcmVzc2VzW2ldLCBzdnJfb3B0cy5wb3J0c1tpXSwgJnNvY2tbc29ja3Bvc10sIAorCQkJCXNvY2tjb3VudCAtIHNvY2twb3MsCisJCQkJJmVycnN0cmluZywgbWF4ZmQpOworCisJCWlmIChuc29jayA8IDApIHsKKwkJCWRyb3BiZWFyX2xvZyhMT0dfV0FSTklORywgIkZhaWxlZCBsaXN0ZW5pbmcgb24gJyVzJzogJXMiLCAKKwkJCQkJCQlzdnJfb3B0cy5wb3J0c1tpXSwgZXJyc3RyaW5nKTsKKwkJCW1fZnJlZShlcnJzdHJpbmcpOworCQkJY29udGludWU7CisJCX0KKworCQlzb2NrcG9zICs9IG5zb2NrOworCisJfQorCXJldHVybiBzb2NrcG9zOworfQpkaWZmIC0tZ2l0IGEvc3ZyLXJ1bm9wdHMuYyBiL3N2ci1ydW5vcHRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY1MTA5NgotLS0gL2Rldi9udWxsCisrKyBiL3N2ci1ydW5vcHRzLmMKQEAgLTAsMCArMSwzNTYgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgInJ1bm9wdHMuaCIKKyNpbmNsdWRlICJzaWdua2V5LmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAiYWxnby5oIgorCitzdnJfcnVub3B0cyBzdnJfb3B0czsgLyogR0xPQkFMICovCisKK3N0YXRpYyB2b2lkIHByaW50aGVscChjb25zdCBjaGFyICogcHJvZ25hbWUpOworc3RhdGljIHZvaWQgYWRkcG9ydGFuZGFkZHJlc3MoY2hhciogc3BlYyk7CisKK3N0YXRpYyB2b2lkIHByaW50aGVscChjb25zdCBjaGFyICogcHJvZ25hbWUpIHsKKworCWZwcmludGYoc3RkZXJyLCAiRHJvcGJlYXIgc3NoZCB2JXNcbiIKKwkJCQkJIlVzYWdlOiAlcyBbb3B0aW9uc11cbiIKKwkJCQkJIk9wdGlvbnMgYXJlOlxuIgorCQkJCQkiLWIgYmFubmVyZmlsZQlEaXNwbGF5IHRoZSBjb250ZW50cyBvZiBiYW5uZXJmaWxlIgorCQkJCQkiIGJlZm9yZSB1c2VyIGxvZ2luXG4iCisJCQkJCSIJCShkZWZhdWx0OiBub25lKVxuIgorI2lmZGVmIERST1BCRUFSX0RTUworCQkJCQkiLWQgZHNza2V5ZmlsZQlVc2UgZHNza2V5ZmlsZSBmb3IgdGhlIGRzcyBob3N0IGtleVxuIgorCQkJCQkiCQkoZGVmYXVsdDogJXMpXG4iCisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl9SU0EKKwkJCQkJIi1yIHJzYWtleWZpbGUJVXNlIHJzYWtleWZpbGUgZm9yIHRoZSByc2EgaG9zdCBrZXlcbiIKKwkJCQkJIgkJKGRlZmF1bHQ6ICVzKVxuIgorI2VuZGlmCisJCQkJCSItRgkJRG9uJ3QgZm9yayBpbnRvIGJhY2tncm91bmRcbiIKKyNpZmRlZiBESVNBQkxFX1NZU0xPRworCQkJCQkiKFN5c2xvZyBzdXBwb3J0IG5vdCBjb21waWxlZCBpbiwgdXNpbmcgc3RkZXJyKVxuIgorI2Vsc2UKKwkJCQkJIi1FCQlMb2cgdG8gc3RkZXJyIHJhdGhlciB0aGFuIHN5c2xvZ1xuIgorI2VuZGlmCisjaWZkZWYgRE9fTU9URAorCQkJCQkiLW0JCURvbid0IGRpc3BsYXkgdGhlIG1vdGQgb24gbG9naW5cbiIKKyNlbmRpZgorCQkJCQkiLXcJCURpc2FsbG93IHJvb3QgbG9naW5zXG4iCisjaWYgZGVmaW5lZChFTkFCTEVfU1ZSX1BBU1NXT1JEX0FVVEgpIHx8IGRlZmluZWQoRU5BQkxFX1NWUl9QQU1fQVVUSCkKKwkJCQkJIi1zCQlEaXNhYmxlIHBhc3N3b3JkIGxvZ2luc1xuIgorCQkJCQkiLWcJCURpc2FibGUgcGFzc3dvcmQgbG9naW5zIGZvciByb290XG4iCisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfU1ZSX0xPQ0FMVENQRldECisJCQkJCSItagkJRGlzYWJsZSBsb2NhbCBwb3J0IGZvcndhcmRpbmdcbiIKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9TVlJfUkVNT1RFVENQRldECisJCQkJCSItawkJRGlzYWJsZSByZW1vdGUgcG9ydCBmb3J3YXJkaW5nXG4iCisJCQkJCSItYQkJQWxsb3cgY29ubmVjdGlvbnMgdG8gZm9yd2FyZGVkIHBvcnRzIGZyb20gYW55IGhvc3RcbiIKKyNlbmRpZgorCQkJCQkiLXAgW2FkZHJlc3M6XXBvcnRcbiIKKwkJCQkJIgkJTGlzdGVuIG9uIHNwZWNpZmllZCB0Y3AgcG9ydCAoYW5kIG9wdGlvbmFsbHkgYWRkcmVzcyksXG4iCisJCQkJCSIJCXVwIHRvICVkIGNhbiBiZSBzcGVjaWZpZWRcbiIKKwkJCQkJIgkJKGRlZmF1bHQgcG9ydCBpcyAlcyBpZiBub25lIHNwZWNpZmllZClcbiIKKwkJCQkJIi1QIFBpZEZpbGUJQ3JlYXRlIHBpZCBmaWxlIFBpZEZpbGVcbiIKKwkJCQkJIgkJKGRlZmF1bHQgJXMpXG4iCisjaWZkZWYgSU5FVERfTU9ERQorCQkJCQkiLWkJCVN0YXJ0IGZvciBpbmV0ZFxuIgorI2VuZGlmCisjaWZkZWYgREVCVUdfVFJBQ0UKKwkJCQkJIi12CQl2ZXJib3NlXG4iCisjZW5kaWYKKwkJCQkJLERST1BCRUFSX1ZFUlNJT04sIHByb2duYW1lLAorI2lmZGVmIERST1BCRUFSX0RTUworCQkJCQlEU1NfUFJJVl9GSUxFTkFNRSwKKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX1JTQQorCQkJCQlSU0FfUFJJVl9GSUxFTkFNRSwKKyNlbmRpZgorCQkJCQlEUk9QQkVBUl9NQVhfUE9SVFMsIERST1BCRUFSX0RFRlBPUlQsIERST1BCRUFSX1BJREZJTEUpOworfQorCit2b2lkIHN2cl9nZXRvcHRzKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpIHsKKworCXVuc2lnbmVkIGludCBpOworCWNoYXIgKiogbmV4dCA9IDA7CisJaW50IG5leHRpc3BvcnQgPSAwOworCisJLyogc2VlIHByaW50aGVscCgpIGZvciBvcHRpb25zICovCisJc3ZyX29wdHMucnNha2V5ZmlsZSA9IE5VTEw7CisJc3ZyX29wdHMuZHNza2V5ZmlsZSA9IE5VTEw7CisJc3ZyX29wdHMuYmFubmVyZmlsZSA9IE5VTEw7CisJc3ZyX29wdHMuYmFubmVyID0gTlVMTDsKKwlzdnJfb3B0cy5mb3JrYmcgPSAxOworCXN2cl9vcHRzLm5vcm9vdGxvZ2luID0gMDsKKwlzdnJfb3B0cy5ub2F1dGhwYXNzID0gMDsKKwlzdnJfb3B0cy5ub3Jvb3RwYXNzID0gMDsKKwlzdnJfb3B0cy5pbmV0ZG1vZGUgPSAwOworCXN2cl9vcHRzLnBvcnRjb3VudCA9IDA7CisJc3ZyX29wdHMuaG9zdGtleSA9IE5VTEw7CisJc3ZyX29wdHMucGlkZmlsZSA9IERST1BCRUFSX1BJREZJTEU7CisjaWZkZWYgRU5BQkxFX1NWUl9MT0NBTFRDUEZXRAorCXN2cl9vcHRzLm5vbG9jYWx0Y3AgPSAwOworI2VuZGlmCisjaWZkZWYgRU5BQkxFX1NWUl9SRU1PVEVUQ1BGV0QKKwlzdnJfb3B0cy5ub3JlbW90ZXRjcCA9IDA7CisjZW5kaWYKKwkvKiBub3QgeWV0CisJb3B0cy5pcHY0ID0gMTsKKwlvcHRzLmlwdjYgPSAxOworCSovCisjaWZkZWYgRE9fTU9URAorCXN2cl9vcHRzLmRvbW90ZCA9IDE7CisjZW5kaWYKKyNpZm5kZWYgRElTQUJMRV9TWVNMT0cKKwlzdnJfb3B0cy51c2luZ3N5c2xvZyA9IDE7CisjZW5kaWYKKyNpZmRlZiBFTkFCTEVfU1ZSX1JFTU9URVRDUEZXRAorCW9wdHMubGlzdGVuX2Z3ZF9hbGwgPSAwOworI2VuZGlmCisKKwlmb3IgKGkgPSAxOyBpIDwgKHVuc2lnbmVkIGludClhcmdjOyBpKyspIHsKKwkJaWYgKG5leHRpc3BvcnQpIHsKKwkJCWFkZHBvcnRhbmRhZGRyZXNzKGFyZ3ZbaV0pOworCQkJbmV4dGlzcG9ydCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCSAgCisJCWlmIChuZXh0KSB7CisJCQkqbmV4dCA9IGFyZ3ZbaV07CisJCQlpZiAoKm5leHQgPT0gTlVMTCkgeworCQkJCWRyb3BiZWFyX2V4aXQoIkludmFsaWQgbnVsbCBhcmd1bWVudCIpOworCQkJfQorCQkJbmV4dCA9IDB4MDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChhcmd2W2ldWzBdID09ICctJykgeworCQkJc3dpdGNoIChhcmd2W2ldWzFdKSB7CisJCQkJY2FzZSAnYic6CisJCQkJCW5leHQgPSAmc3ZyX29wdHMuYmFubmVyZmlsZTsKKwkJCQkJYnJlYWs7CisjaWZkZWYgRFJPUEJFQVJfRFNTCisJCQkJY2FzZSAnZCc6CisJCQkJCW5leHQgPSAmc3ZyX29wdHMuZHNza2V5ZmlsZTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBEUk9QQkVBUl9SU0EKKwkJCQljYXNlICdyJzoKKwkJCQkJbmV4dCA9ICZzdnJfb3B0cy5yc2FrZXlmaWxlOworCQkJCQlicmVhazsKKyNlbmRpZgorCQkJCWNhc2UgJ0YnOgorCQkJCQlzdnJfb3B0cy5mb3JrYmcgPSAwOworCQkJCQlicmVhazsKKyNpZm5kZWYgRElTQUJMRV9TWVNMT0cKKwkJCQljYXNlICdFJzoKKwkJCQkJc3ZyX29wdHMudXNpbmdzeXNsb2cgPSAwOworCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9TVlJfTE9DQUxUQ1BGV0QKKwkJCQljYXNlICdqJzoKKwkJCQkJc3ZyX29wdHMubm9sb2NhbHRjcCA9IDE7CisJCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgRU5BQkxFX1NWUl9SRU1PVEVUQ1BGV0QKKwkJCQljYXNlICdrJzoKKwkJCQkJc3ZyX29wdHMubm9yZW1vdGV0Y3AgPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlICdhJzoKKwkJCQkJb3B0cy5saXN0ZW5fZndkX2FsbCA9IDE7CisJCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVERfTU9ERQorCQkJCWNhc2UgJ2knOgorCQkJCQlzdnJfb3B0cy5pbmV0ZG1vZGUgPSAxOworCQkJCQlicmVhazsKKyNlbmRpZgorCQkJCWNhc2UgJ3AnOgorCQkJCSAgbmV4dGlzcG9ydCA9IDE7CisJCQkJICBicmVhazsKKwkJCQljYXNlICdQJzoKKwkJCQkJbmV4dCA9ICZzdnJfb3B0cy5waWRmaWxlOworCQkJCQlicmVhazsKKyNpZmRlZiBET19NT1RECisJCQkJLyogbW90ZCBpcyBkaXNwbGF5ZWQgYnkgZGVmYXVsdCwgLW0gdHVybnMgaXQgb2ZmICovCisJCQkJY2FzZSAnbSc6CisJCQkJCXN2cl9vcHRzLmRvbW90ZCA9IDA7CisJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJY2FzZSAndyc6CisJCQkJCXN2cl9vcHRzLm5vcm9vdGxvZ2luID0gMTsKKwkJCQkJYnJlYWs7CisjaWYgZGVmaW5lZChFTkFCTEVfU1ZSX1BBU1NXT1JEX0FVVEgpIHx8IGRlZmluZWQoRU5BQkxFX1NWUl9QQU1fQVVUSCkKKwkJCQljYXNlICdzJzoKKwkJCQkJc3ZyX29wdHMubm9hdXRocGFzcyA9IDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ2cnOgorCQkJCQlzdnJfb3B0cy5ub3Jvb3RwYXNzID0gMTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQljYXNlICdoJzoKKwkJCQkJcHJpbnRoZWxwKGFyZ3ZbMF0pOworCQkJCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJCQkJCWJyZWFrOworI2lmZGVmIERFQlVHX1RSQUNFCisJCQkJY2FzZSAndic6CisJCQkJCWRlYnVnX3RyYWNlID0gMTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQlkZWZhdWx0OgorCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gYXJndW1lbnQgJXNcbiIsIGFyZ3ZbaV0pOworCQkJCQlwcmludGhlbHAoYXJndlswXSk7CisJCQkJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwkvKiBTZXQgdXAgbGlzdGVuaW5nIHBvcnRzICovCisJaWYgKHN2cl9vcHRzLnBvcnRjb3VudCA9PSAwKSB7CisJCXN2cl9vcHRzLnBvcnRzWzBdID0gbV9zdHJkdXAoRFJPUEJFQVJfREVGUE9SVCk7CisJCXN2cl9vcHRzLmFkZHJlc3Nlc1swXSA9IG1fc3RyZHVwKERST1BCRUFSX0RFRkFERFJFU1MpOworCQlzdnJfb3B0cy5wb3J0Y291bnQgPSAxOworCX0KKyAgICAgICAgCisJaWYgKHN2cl9vcHRzLmRzc2tleWZpbGUgPT0gTlVMTCkgeworCQlzdnJfb3B0cy5kc3NrZXlmaWxlID0gRFNTX1BSSVZfRklMRU5BTUU7CisJfQorCWlmIChzdnJfb3B0cy5yc2FrZXlmaWxlID09IE5VTEwpIHsKKwkJc3ZyX29wdHMucnNha2V5ZmlsZSA9IFJTQV9QUklWX0ZJTEVOQU1FOworCX0KKworCWlmIChzdnJfb3B0cy5iYW5uZXJmaWxlKSB7CisJCXN0cnVjdCBzdGF0IGJ1ZjsKKwkJaWYgKHN0YXQoc3ZyX29wdHMuYmFubmVyZmlsZSwgJmJ1ZikgIT0gMCkgeworCQkJZHJvcGJlYXJfZXhpdCgiRXJyb3Igb3BlbmluZyBiYW5uZXIgZmlsZSAnJXMnIiwKKwkJCQkJc3ZyX29wdHMuYmFubmVyZmlsZSk7CisJCX0KKwkJCisJCWlmIChidWYuc3Rfc2l6ZSA+IE1BWF9CQU5ORVJfU0laRSkgeworCQkJZHJvcGJlYXJfZXhpdCgiQmFubmVyIGZpbGUgdG9vIGxhcmdlLCBtYXggaXMgJWQgYnl0ZXMiLAorCQkJCQlNQVhfQkFOTkVSX1NJWkUpOworCQl9CisKKwkJc3ZyX29wdHMuYmFubmVyID0gYnVmX25ldyhidWYuc3Rfc2l6ZSk7CisJCWlmIChidWZfcmVhZGZpbGUoc3ZyX29wdHMuYmFubmVyLCBzdnJfb3B0cy5iYW5uZXJmaWxlKSE9RFJPUEJFQVJfU1VDQ0VTUykgeworCQkJZHJvcGJlYXJfZXhpdCgiRXJyb3IgcmVhZGluZyBiYW5uZXIgZmlsZSAnJXMnIiwKKwkJCQkJc3ZyX29wdHMuYmFubmVyZmlsZSk7CisJCX0KKwkJYnVmX3NldHBvcyhzdnJfb3B0cy5iYW5uZXIsIDApOworCX0KKworfQorCitzdGF0aWMgdm9pZCBhZGRwb3J0YW5kYWRkcmVzcyhjaGFyKiBzcGVjKSB7CisKKwljaGFyICpteXNwZWMgPSBOVUxMOworCisJaWYgKHN2cl9vcHRzLnBvcnRjb3VudCA8IERST1BCRUFSX01BWF9QT1JUUykgeworCisJCS8qIFdlIGRvbid0IGZyZWUgaXQsIGl0IGJlY29tZXMgcGFydCBvZiB0aGUgcnVub3B0IHN0YXRlICovCisJCW15c3BlYyA9IG1fc3RyZHVwKHNwZWMpOworCisJCS8qIHNlYXJjaCBmb3IgJzonLCB0aGF0IHNlcGFyYXRlcyBhZGRyZXNzIGFuZCBwb3J0ICovCisJCXN2cl9vcHRzLnBvcnRzW3N2cl9vcHRzLnBvcnRjb3VudF0gPSBzdHJjaHIobXlzcGVjLCAnOicpOworCisJCWlmIChzdnJfb3B0cy5wb3J0c1tzdnJfb3B0cy5wb3J0Y291bnRdID09IE5VTEwpIHsKKwkJCS8qIG5vICc6JyAtPiB0aGUgd2hvbGUgc3RyaW5nIHNwZWNpZmllcyBqdXN0IGEgcG9ydCAqLworCQkJc3ZyX29wdHMucG9ydHNbc3ZyX29wdHMucG9ydGNvdW50XSA9IG15c3BlYzsKKwkJfSBlbHNlIHsKKwkJCS8qIFNwbGl0IHRoZSBhZGRyZXNzL3BvcnQgKi8KKwkJCXN2cl9vcHRzLnBvcnRzW3N2cl9vcHRzLnBvcnRjb3VudF1bMF0gPSAnXDAnOyAKKwkJCXN2cl9vcHRzLnBvcnRzW3N2cl9vcHRzLnBvcnRjb3VudF0rKzsKKwkJCXN2cl9vcHRzLmFkZHJlc3Nlc1tzdnJfb3B0cy5wb3J0Y291bnRdID0gbXlzcGVjOworCQl9CisKKwkJaWYgKHN2cl9vcHRzLmFkZHJlc3Nlc1tzdnJfb3B0cy5wb3J0Y291bnRdID09IE5VTEwpIHsKKwkJCS8qIG5vIGFkZHJlc3MgZ2l2ZW4gLT4gZmlsbCBpbiB0aGUgZGVmYXVsdCBhZGRyZXNzICovCisJCQlzdnJfb3B0cy5hZGRyZXNzZXNbc3ZyX29wdHMucG9ydGNvdW50XSA9IG1fc3RyZHVwKERST1BCRUFSX0RFRkFERFJFU1MpOworCQl9CisKKwkJaWYgKHN2cl9vcHRzLnBvcnRzW3N2cl9vcHRzLnBvcnRjb3VudF1bMF0gPT0gJ1wwJykgeworCQkJLyogZW1wdHkgcG9ydCAtPiBleGl0ICovCisJCQlkcm9wYmVhcl9leGl0KCJCYWQgcG9ydCIpOworCQl9CisKKwkJc3ZyX29wdHMucG9ydGNvdW50Kys7CisJfQorfQorCitzdGF0aWMgdm9pZCBkaXNhYmxla2V5KGludCB0eXBlLCBjb25zdCBjaGFyKiBmaWxlbmFtZSkgeworCisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBzc2hob3N0a2V5W2ldLm5hbWUgIT0gTlVMTDsgaSsrKSB7CisJCWlmIChzc2hob3N0a2V5W2ldLnZhbCA9PSB0eXBlKSB7CisJCQlzc2hob3N0a2V5W2ldLnVzYWJsZSA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlkcm9wYmVhcl9sb2coTE9HX1dBUk5JTkcsICJGYWlsZWQgcmVhZGluZyAnJXMnLCBkaXNhYmxpbmcgJXMiLCBmaWxlbmFtZSwKKwkJCXR5cGUgPT0gRFJPUEJFQVJfU0lHTktFWV9EU1MgPyAiRFNTIiA6ICJSU0EiKTsKK30KKworLyogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgc3lzbG9nL2V0YyBpcyB3b3JraW5nICovCit2b2lkIGxvYWRob3N0a2V5cygpIHsKKworCWludCByZXQ7CisJaW50IHR5cGU7CisKKwlUUkFDRSgoImVudGVyIGxvYWRob3N0a2V5cyIpKQorCisJc3ZyX29wdHMuaG9zdGtleSA9IG5ld19zaWduX2tleSgpOworCisjaWZkZWYgRFJPUEJFQVJfUlNBCisJdHlwZSA9IERST1BCRUFSX1NJR05LRVlfUlNBOworCXJldCA9IHJlYWRob3N0a2V5KHN2cl9vcHRzLnJzYWtleWZpbGUsIHN2cl9vcHRzLmhvc3RrZXksICZ0eXBlKTsKKwlpZiAocmV0ID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJZGlzYWJsZWtleShEUk9QQkVBUl9TSUdOS0VZX1JTQSwgc3ZyX29wdHMucnNha2V5ZmlsZSk7CisJfQorI2VuZGlmCisjaWZkZWYgRFJPUEJFQVJfRFNTCisJdHlwZSA9IERST1BCRUFSX1NJR05LRVlfRFNTOworCXJldCA9IHJlYWRob3N0a2V5KHN2cl9vcHRzLmRzc2tleWZpbGUsIHN2cl9vcHRzLmhvc3RrZXksICZ0eXBlKTsKKwlpZiAocmV0ID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJZGlzYWJsZWtleShEUk9QQkVBUl9TSUdOS0VZX0RTUywgc3ZyX29wdHMuZHNza2V5ZmlsZSk7CisJfQorI2VuZGlmCisKKwlpZiAoIDEKKyNpZmRlZiBEUk9QQkVBUl9EU1MKKwkJJiYgc3ZyX29wdHMuaG9zdGtleS0+ZHNza2V5ID09IE5VTEwKKyNlbmRpZgorI2lmZGVmIERST1BCRUFSX1JTQQorCQkmJiBzdnJfb3B0cy5ob3N0a2V5LT5yc2FrZXkgPT0gTlVMTAorI2VuZGlmCisJCSkgeworCQlkcm9wYmVhcl9leGl0KCJObyBob3N0a2V5cyBhdmFpbGFibGUiKTsKKwl9CisKKwlUUkFDRSgoImxlYXZlIGxvYWRob3N0a2V5cyIpKQorfQpkaWZmIC0tZ2l0IGEvc3ZyLXNlcnZpY2UuYyBiL3N2ci1zZXJ2aWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3OGU3ZAotLS0gL2Rldi9udWxsCisrKyBiL3N2ci1zZXJ2aWNlLmMKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAic2VydmljZS5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJwYWNrZXQuaCIKKyNpbmNsdWRlICJzc2guaCIKKyNpbmNsdWRlICJhdXRoLmgiCisKK3N0YXRpYyB2b2lkIHNlbmRfbXNnX3NlcnZpY2VfYWNjZXB0KHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBsZW4pOworCisvKiBwcm9jZXNzZXMgYSBTU0hfTVNHX1NFUlZJQ0VfUkVRVUVTVCwgcmV0dXJuaW5nIDAgaWYgZmluaXNoZWQsCisgKiAxIGlmIG5vdCAqLwordm9pZCByZWN2X21zZ19zZXJ2aWNlX3JlcXVlc3QoKSB7CisKKwl1bnNpZ25lZCBjaGFyICogbmFtZTsKKwl1bnNpZ25lZCBpbnQgbGVuOworCisJVFJBQ0UoKCJlbnRlciByZWN2X21zZ19zZXJ2aWNlX3JlcXVlc3QiKSkKKworCW5hbWUgPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCAmbGVuKTsKKworCS8qIHNzaC11c2VyYXV0aCAqLworCWlmIChsZW4gPT0gU1NIX1NFUlZJQ0VfVVNFUkFVVEhfTEVOICYmIAorCQkJc3RybmNtcChTU0hfU0VSVklDRV9VU0VSQVVUSCwgbmFtZSwgbGVuKSA9PSAwKSB7CisKKwkJc2VuZF9tc2dfc2VydmljZV9hY2NlcHQobmFtZSwgbGVuKTsKKwkJbV9mcmVlKG5hbWUpOworCQlUUkFDRSgoImxlYXZlIHJlY3ZfbXNnX3NlcnZpY2VfcmVxdWVzdDogZG9uZSBzc2gtdXNlcmF1dGgiKSkKKwkJcmV0dXJuOworCX0KKworCS8qIHNzaC1jb25uZWN0aW9uICovCisJaWYgKGxlbiA9PSBTU0hfU0VSVklDRV9DT05ORUNUSU9OX0xFTiAmJgorCQkJKHN0cm5jbXAoU1NIX1NFUlZJQ0VfQ09OTkVDVElPTiwgbmFtZSwgbGVuKSA9PSAwKSkgeworCQlpZiAoc2VzLmF1dGhzdGF0ZS5hdXRoZG9uZSAhPSAxKSB7CisJCQlkcm9wYmVhcl9leGl0KCJyZXF1ZXN0IGZvciBjb25uZWN0aW9uIGJlZm9yZSBhdXRoIik7CisJCX0KKworCQlzZW5kX21zZ19zZXJ2aWNlX2FjY2VwdChuYW1lLCBsZW4pOworCQltX2ZyZWUobmFtZSk7CisJCVRSQUNFKCgibGVhdmUgcmVjdl9tc2dfc2VydmljZV9yZXF1ZXN0OiBkb25lIHNzaC1jb25uZWN0aW9uIikpCisJCXJldHVybjsKKwl9CisKKwltX2ZyZWUobmFtZSk7CisJLyogVE9ETyB0aGlzIHNob3VsZCBiZSBhIE1TR19ESVNDT05ORUNUICovCisJZHJvcGJlYXJfZXhpdCgidW5yZWNvZ25pc2VkIFNTSF9NU0dfU0VSVklDRV9SRVFVRVNUIik7CisKKworfQorCitzdGF0aWMgdm9pZCBzZW5kX21zZ19zZXJ2aWNlX2FjY2VwdCh1bnNpZ25lZCBjaGFyICpuYW1lLCBpbnQgbGVuKSB7CisKKwlUUkFDRSgoImFjY2VwdGluZyBzZXJ2aWNlICVzIiwgbmFtZSkpCisKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCisJYnVmX3B1dGJ5dGUoc2VzLndyaXRlcGF5bG9hZCwgU1NIX01TR19TRVJWSUNFX0FDQ0VQVCk7CisJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCBuYW1lLCBsZW4pOworCisJZW5jcnlwdF9wYWNrZXQoKTsKKworfQpkaWZmIC0tZ2l0IGEvc3ZyLXNlc3Npb24uYyBiL3N2ci1zZXNzaW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcwMTU5NwotLS0gL2Rldi9udWxsCisrKyBiL3N2ci1zZXNzaW9uLmMKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgInNlc3Npb24uaCIKKyNpbmNsdWRlICJkYnV0aWwuaCIKKyNpbmNsdWRlICJwYWNrZXQuaCIKKyNpbmNsdWRlICJhbGdvLmgiCisjaW5jbHVkZSAiYnVmZmVyLmgiCisjaW5jbHVkZSAiZHNzLmgiCisjaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAicmFuZG9tLmgiCisjaW5jbHVkZSAia2V4LmgiCisjaW5jbHVkZSAiY2hhbm5lbC5oIgorI2luY2x1ZGUgImNoYW5zZXNzaW9uLmgiCisjaW5jbHVkZSAiYXRvbWljaW8uaCIKKyNpbmNsdWRlICJ0Y3Bmd2QuaCIKKyNpbmNsdWRlICJzZXJ2aWNlLmgiCisjaW5jbHVkZSAiYXV0aC5oIgorI2luY2x1ZGUgInJ1bm9wdHMuaCIKKworc3RhdGljIHZvaWQgc3ZyX3JlbW90ZWNsb3NlZCgpOworCitzdHJ1Y3Qgc2VydmVyc2Vzc2lvbiBzdnJfc2VzOyAvKiBHTE9CQUwgKi8KKworc3RhdGljIGNvbnN0IHBhY2tldHR5cGUgc3ZyX3BhY2tldHR5cGVzW10gPSB7CisJe1NTSF9NU0dfQ0hBTk5FTF9EQVRBLCByZWN2X21zZ19jaGFubmVsX2RhdGF9LAorCXtTU0hfTVNHX0NIQU5ORUxfV0lORE9XX0FESlVTVCwgcmVjdl9tc2dfY2hhbm5lbF93aW5kb3dfYWRqdXN0fSwKKwl7U1NIX01TR19VU0VSQVVUSF9SRVFVRVNULCByZWN2X21zZ191c2VyYXV0aF9yZXF1ZXN0fSwgLyogc2VydmVyICovCisJe1NTSF9NU0dfU0VSVklDRV9SRVFVRVNULCByZWN2X21zZ19zZXJ2aWNlX3JlcXVlc3R9LCAvKiBzZXJ2ZXIgKi8KKwl7U1NIX01TR19LRVhJTklULCByZWN2X21zZ19rZXhpbml0fSwKKwl7U1NIX01TR19LRVhESF9JTklULCByZWN2X21zZ19rZXhkaF9pbml0fSwgLyogc2VydmVyICovCisJe1NTSF9NU0dfTkVXS0VZUywgcmVjdl9tc2dfbmV3a2V5c30sCisjaWZkZWYgRU5BQkxFX1NWUl9SRU1PVEVUQ1BGV0QKKwl7U1NIX01TR19HTE9CQUxfUkVRVUVTVCwgcmVjdl9tc2dfZ2xvYmFsX3JlcXVlc3RfcmVtb3RldGNwfSwKKyNlbmRpZgorCXtTU0hfTVNHX0NIQU5ORUxfUkVRVUVTVCwgcmVjdl9tc2dfY2hhbm5lbF9yZXF1ZXN0fSwKKwl7U1NIX01TR19DSEFOTkVMX09QRU4sIHJlY3ZfbXNnX2NoYW5uZWxfb3Blbn0sCisJe1NTSF9NU0dfQ0hBTk5FTF9FT0YsIHJlY3ZfbXNnX2NoYW5uZWxfZW9mfSwKKwl7U1NIX01TR19DSEFOTkVMX0NMT1NFLCByZWN2X21zZ19jaGFubmVsX2Nsb3NlfSwKKyNpZmRlZiBVU0lOR19MSVNURU5FUlMKKwl7U1NIX01TR19DSEFOTkVMX09QRU5fQ09ORklSTUFUSU9OLCByZWN2X21zZ19jaGFubmVsX29wZW5fY29uZmlybWF0aW9ufSwKKwl7U1NIX01TR19DSEFOTkVMX09QRU5fRkFJTFVSRSwgcmVjdl9tc2dfY2hhbm5lbF9vcGVuX2ZhaWx1cmV9LAorI2VuZGlmCisJezAsIDB9IC8qIEVuZCAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBDaGFuVHlwZSAqc3ZyX2NoYW50eXBlc1tdID0geworCSZzdnJjaGFuc2VzcywKKyNpZmRlZiBFTkFCTEVfU1ZSX0xPQ0FMVENQRldECisJJnN2cl9jaGFuX3RjcGRpcmVjdCwKKyNlbmRpZgorCU5VTEwgLyogTnVsbCB0ZXJtaW5hdGlvbiBpcyBtYW5kYXRvcnkuICovCit9OworCit2b2lkIHN2cl9zZXNzaW9uKGludCBzb2NrLCBpbnQgY2hpbGRwaXBlLCAKKwkJY2hhciogcmVtb3RlaG9zdCwgY2hhciAqYWRkcnN0cmluZykgeworCisJc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKworICAgIHJlc2VlZHJhbmRvbSgpOworCisJY3J5cHRvX2luaXQoKTsKKwljb21tb25fc2Vzc2lvbl9pbml0KHNvY2ssIHJlbW90ZWhvc3QpOworCisJLyogSW5pdGlhbGlzZSBzZXJ2ZXIgc3BlY2lmaWMgcGFydHMgb2YgdGhlIHNlc3Npb24gKi8KKwlzdnJfc2VzLmNoaWxkcGlwZSA9IGNoaWxkcGlwZTsKKwlzdnJfc2VzLmFkZHJzdHJpbmcgPSBhZGRyc3RyaW5nOworCXN2cl9hdXRoaW5pdGlhbGlzZSgpOworCWNoYW5pbml0aWFsaXNlKHN2cl9jaGFudHlwZXMpOworCXN2cl9jaGFuc2Vzc2luaXRpYWxpc2UoKTsKKworCWlmIChnZXR0aW1lb2ZkYXkoJnRpbWVvdXQsIDApIDwgMCkgeworCQlkcm9wYmVhcl9leGl0KCJFcnJvciBnZXR0aW5nIHRpbWUiKTsKKwl9CisKKwlzZXMuY29ubmVjdHRpbWVvdXQgPSB0aW1lb3V0LnR2X3NlYyArIEFVVEhfVElNRU9VVDsKKworCS8qIHNldCB1cCBtZXNzYWdlcyBldGMgKi8KKwlzZXMucmVtb3RlY2xvc2VkID0gc3ZyX3JlbW90ZWNsb3NlZDsKKworCS8qIHBhY2tldCBoYW5kbGVycyAqLworCXNlcy5wYWNrZXR0eXBlcyA9IHN2cl9wYWNrZXR0eXBlczsKKwlzZXMuYnVmX21hdGNoX2FsZ28gPSBzdnJfYnVmX21hdGNoX2FsZ287CisKKwlzZXMuaXNzZXJ2ZXIgPSAxOworCisJLyogV2UncmUgcmVhZHkgdG8gZ28gbm93ICovCisJc2Vzc2luaXRkb25lID0gMTsKKworCS8qIGV4Y2hhbmdlIGlkZW50aWZpY2F0aW9uLCB2ZXJzaW9uIGV0YyAqLworCXNlc3Npb25faWRlbnRpZmljYXRpb24oKTsKKworCS8qIHN0YXJ0IG9mZiB3aXRoIGtleSBleGNoYW5nZSAqLworCXNlbmRfbXNnX2tleGluaXQoKTsKKworCS8qIFJ1biB0aGUgbWFpbiBmb3IgbG9vcC4gTlVMTCBpcyBmb3IgdGhlIGRpc3BhdGNoZXIgLSBvbmx5IHRoZSBjbGllbnQKKwkgKiBjb2RlIG1ha2VzIHVzZSBvZiBpdCAqLworCXNlc3Npb25fbG9vcChOVUxMKTsKKworCS8qIE5vdCByZWFjaGVkICovCisKK30KKworLyogZmFpbHVyZSBleGl0IC0gZm9ybWF0IG11c3QgYmUgPD0gMTAwIGNoYXJzICovCit2b2lkIHN2cl9kcm9wYmVhcl9leGl0KGludCBleGl0Y29kZSwgY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0IHBhcmFtKSB7CisKKwljaGFyIGZtdGJ1ZlszMDBdOworCisJaWYgKCFzZXNzaW5pdGRvbmUpIHsKKwkJLyogYmVmb3JlIHNlc3Npb24gaW5pdCAqLworCQlzbnByaW50ZihmbXRidWYsIHNpemVvZihmbXRidWYpLCAKKwkJCQkicHJlbWF0dXJlIGV4aXQ6ICVzIiwgZm9ybWF0KTsKKwl9IGVsc2UgaWYgKHNlcy5hdXRoc3RhdGUuYXV0aGRvbmUpIHsKKwkJLyogdXNlciBoYXMgYXV0aGVudGljYXRlZCAqLworCQlzbnByaW50ZihmbXRidWYsIHNpemVvZihmbXRidWYpLAorCQkJCSJleGl0IGFmdGVyIGF1dGggKCVzKTogJXMiLCAKKwkJCQlzZXMuYXV0aHN0YXRlLnByaW50YWJsZXVzZXIsIGZvcm1hdCk7CisJfSBlbHNlIGlmIChzZXMuYXV0aHN0YXRlLnByaW50YWJsZXVzZXIpIHsKKwkJLyogd2UgaGF2ZSBhIHBvdGVudGlhbCB1c2VyICovCisJCXNucHJpbnRmKGZtdGJ1Ziwgc2l6ZW9mKGZtdGJ1ZiksIAorCQkJCSJleGl0IGJlZm9yZSBhdXRoICh1c2VyICclcycsICVkIGZhaWxzKTogJXMiLAorCQkJCXNlcy5hdXRoc3RhdGUucHJpbnRhYmxldXNlciwgc2VzLmF1dGhzdGF0ZS5mYWlsY291bnQsIGZvcm1hdCk7CisJfSBlbHNlIHsKKwkJLyogYmVmb3JlIHVzZXJhdXRoICovCisJCXNucHJpbnRmKGZtdGJ1Ziwgc2l6ZW9mKGZtdGJ1ZiksIAorCQkJCSJleGl0IGJlZm9yZSBhdXRoOiAlcyIsIGZvcm1hdCk7CisJfQorCisJX2Ryb3BiZWFyX2xvZyhMT0dfSU5GTywgZm10YnVmLCBwYXJhbSk7CisKKwkvKiBtdXN0IGJlIGFmdGVyIHdlJ3ZlIGRvbmUgd2l0aCB1c2VybmFtZSBldGMgKi8KKwljb21tb25fc2Vzc2lvbl9jbGVhbnVwKCk7CisKKwlleGl0KGV4aXRjb2RlKTsKKworfQorCisvKiBwcmlvcml0eSBpcyBwcmlvcml0eSBhcyB3aXRoIHN5c2xvZygpICovCit2b2lkIHN2cl9kcm9wYmVhcl9sb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QgcGFyYW0pIHsKKworCWNoYXIgcHJpbnRidWZbMTAyNF07CisJY2hhciBkYXRlc3RyWzIwXTsKKwl0aW1lX3QgdGltZXNlYzsKKwlpbnQgaGF2ZXRyYWNlID0gMDsKKworCXZzbnByaW50ZihwcmludGJ1Ziwgc2l6ZW9mKHByaW50YnVmKSwgZm9ybWF0LCBwYXJhbSk7CisKKyNpZm5kZWYgRElTQUJMRV9TWVNMT0cKKwlpZiAoc3ZyX29wdHMudXNpbmdzeXNsb2cpIHsKKwkJc3lzbG9nKHByaW9yaXR5LCAiJXMiLCBwcmludGJ1Zik7CisJfQorI2VuZGlmCisKKwkvKiBpZiB3ZSBhcmUgdXNpbmcgREVCVUdfVFJBQ0UsIHdlIHdhbnQgdG8gcHJpbnQgdG8gc3RkZXJyIGV2ZW4gaWYKKwkgKiBzeXNsb2cgaXMgdXNlZCwgc28gaXQgaXMgaW5jbHVkZWQgaW4gZXJyb3IgcmVwb3J0cyAqLworI2lmZGVmIERFQlVHX1RSQUNFCisJaGF2ZXRyYWNlID0gZGVidWdfdHJhY2U7CisjZW5kaWYKKworCWlmICghc3ZyX29wdHMudXNpbmdzeXNsb2cgfHwgaGF2ZXRyYWNlKQorCXsKKwkJc3RydWN0IHRtICogbG9jYWxfdG0gPSBOVUxMOworCQl0aW1lc2VjID0gdGltZShOVUxMKTsKKwkJbG9jYWxfdG0gPSBsb2NhbHRpbWUoJnRpbWVzZWMpOworCQlpZiAobG9jYWxfdG0gPT0gTlVMTAorCQkJfHwgc3RyZnRpbWUoZGF0ZXN0ciwgc2l6ZW9mKGRhdGVzdHIpLCAiJWIgJWQgJUg6JU06JVMiLCAKKwkJCQkJCWxvY2FsdGltZSgmdGltZXNlYykpID09IDApCisJCXsKKwkJCS8qIHVwb24gZmFpbHVyZSwganVzdCBwcmludCB0aGUgZXBvY2gtc2Vjb25kcyB0aW1lLiAqLworCQkJc25wcmludGYoZGF0ZXN0ciwgc2l6ZW9mKGRhdGVzdHIpLCAiJWQiLCB0aW1lc2VjKTsKKwkJfQorCQlmcHJpbnRmKHN0ZGVyciwgIlslZF0gJXMgJXNcbiIsIGdldHBpZCgpLCBkYXRlc3RyLCBwcmludGJ1Zik7CisJfQorfQorCisvKiBjYWxsZWQgd2hlbiB0aGUgcmVtb3RlIHNpZGUgY2xvc2VzIHRoZSBjb25uZWN0aW9uICovCitzdGF0aWMgdm9pZCBzdnJfcmVtb3RlY2xvc2VkKCkgeworCisJY2xvc2Uoc2VzLnNvY2spOworCXNlcy5zb2NrID0gLTE7CisJZHJvcGJlYXJfY2xvc2UoIkV4aXRlZCBub3JtYWxseSIpOworCit9CisKZGlmZiAtLWdpdCBhL3N2ci10Y3Bmd2QuYyBiL3N2ci10Y3Bmd2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGRjYTZiCi0tLSAvZGV2L251bGwKKysrIGIvc3ZyLXRjcGZ3ZC5jCkBAIC0wLDAgKzEsMjkwIEBACisvKgorICogRHJvcGJlYXIgU1NICisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBNaWhuZWEgU3RvZW5lc2N1CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAidGNwZndkLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgInBhY2tldC5oIgorI2luY2x1ZGUgImxpc3RlbmVyLmgiCisjaW5jbHVkZSAicnVub3B0cy5oIgorCisjaWZkZWYgRU5BQkxFX1NWUl9SRU1PVEVUQ1BGV0QKKworc3RhdGljIHZvaWQgc2VuZF9tc2dfcmVxdWVzdF9zdWNjZXNzKCk7CitzdGF0aWMgdm9pZCBzZW5kX21zZ19yZXF1ZXN0X2ZhaWx1cmUoKTsKK3N0YXRpYyBpbnQgc3ZyX2NhbmNlbHJlbW90ZXRjcCgpOworc3RhdGljIGludCBzdnJfcmVtb3RldGNwcmVxKCk7CitzdGF0aWMgaW50IG5ld3RjcGRpcmVjdChzdHJ1Y3QgQ2hhbm5lbCAqIGNoYW5uZWwpOworCisKK2NvbnN0IHN0cnVjdCBDaGFuVHlwZSBzdnJfY2hhbl90Y3BkaXJlY3QgPSB7CisJMSwgLyogc2VwZmRzICovCisJImRpcmVjdC10Y3BpcCIsCisJbmV3dGNwZGlyZWN0LCAvKiBpbml0ICovCisJTlVMTCwgLyogY2hlY2tjbG9zZSAqLworCU5VTEwsIC8qIHJlcWhhbmRsZXIgKi8KKwlOVUxMIC8qIGNsb3NlaGFuZGxlciAqLworfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBDaGFuVHlwZSBzdnJfY2hhbl90Y3ByZW1vdGUgPSB7CisJMSwgLyogc2VwZmRzICovCisJImZvcndhcmRlZC10Y3BpcCIsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTAorfTsKKworLyogQXQgdGhlIG1vbWVudCB0aGlzIGlzIGNvbXBsZXRlbHkgdXNlZCBmb3IgdGNwIGNvZGUgKHdpdGggdGhlIG5hbWUgcmVmbGVjdGluZworICogdGhhdCkuIElmIG5ldyByZXF1ZXN0IHR5cGVzIGFyZSBhZGRlZCwgdGhpcyBzaG91bGQgYmUgcmVwbGFjZWQgd2l0aCBjb2RlCisgKiBzaW1pbGFyIHRvIHRoZSByZXF1ZXN0LXN3aXRjaGluZyBpbiBjaGFuc2Vzc2lvbi5jICovCit2b2lkIHJlY3ZfbXNnX2dsb2JhbF9yZXF1ZXN0X3JlbW90ZXRjcCgpIHsKKworCXVuc2lnbmVkIGNoYXIqIHJlcW5hbWUgPSBOVUxMOworCXVuc2lnbmVkIGludCBuYW1lbGVuOworCXVuc2lnbmVkIGludCB3YW50cmVwbHkgPSAwOworCWludCByZXQgPSBEUk9QQkVBUl9GQUlMVVJFOworCisJVFJBQ0UoKCJlbnRlciByZWN2X21zZ19nbG9iYWxfcmVxdWVzdF9yZW1vdGV0Y3AiKSkKKworCWlmIChzdnJfb3B0cy5ub3JlbW90ZXRjcCkgeworCQlUUkFDRSgoImxlYXZlIHJlY3ZfbXNnX2dsb2JhbF9yZXF1ZXN0X3JlbW90ZXRjcDogcmVtb3RlIHRjcCBmb3J3YXJkaW5nIGRpc2FibGVkIikpCisJCWdvdG8gb3V0OworCX0KKworCXJlcW5hbWUgPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCAmbmFtZWxlbik7CisJd2FudHJlcGx5ID0gYnVmX2dldGJvb2woc2VzLnBheWxvYWQpOworCisJaWYgKG5hbWVsZW4gPiBNQVhfTkFNRV9MRU4pIHsKKwkJVFJBQ0UoKCJuYW1lIGxlbiBpcyB3cm9uZzogJWQiLCBuYW1lbGVuKSkKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHN0cmNtcCgidGNwaXAtZm9yd2FyZCIsIHJlcW5hbWUpID09IDApIHsKKwkJcmV0ID0gc3ZyX3JlbW90ZXRjcHJlcSgpOworCX0gZWxzZSBpZiAoc3RyY21wKCJjYW5jZWwtdGNwaXAtZm9yd2FyZCIsIHJlcW5hbWUpID09IDApIHsKKwkJcmV0ID0gc3ZyX2NhbmNlbHJlbW90ZXRjcCgpOworCX0gZWxzZSB7CisJCVRSQUNFKCgicmVxbmFtZSBpc24ndCB0Y3BpcC1mb3J3YXJkOiAnJXMnIiwgcmVxbmFtZSkpCisJfQorCitvdXQ6CisJaWYgKHdhbnRyZXBseSkgeworCQlpZiAocmV0ID09IERST1BCRUFSX1NVQ0NFU1MpIHsKKwkJCXNlbmRfbXNnX3JlcXVlc3Rfc3VjY2VzcygpOworCQl9IGVsc2UgeworCQkJc2VuZF9tc2dfcmVxdWVzdF9mYWlsdXJlKCk7CisJCX0KKwl9CisKKwltX2ZyZWUocmVxbmFtZSk7CisKKwlUUkFDRSgoImxlYXZlIHJlY3ZfbXNnX2dsb2JhbF9yZXF1ZXN0IikpCit9CisKKworc3RhdGljIHZvaWQgc2VuZF9tc2dfcmVxdWVzdF9zdWNjZXNzKCkgeworCisJQ0hFQ0tDTEVBUlRPV1JJVEUoKTsKKwlidWZfcHV0Ynl0ZShzZXMud3JpdGVwYXlsb2FkLCBTU0hfTVNHX1JFUVVFU1RfU1VDQ0VTUyk7CisJZW5jcnlwdF9wYWNrZXQoKTsKKworfQorCitzdGF0aWMgdm9pZCBzZW5kX21zZ19yZXF1ZXN0X2ZhaWx1cmUoKSB7CisKKwlDSEVDS0NMRUFSVE9XUklURSgpOworCWJ1Zl9wdXRieXRlKHNlcy53cml0ZXBheWxvYWQsIFNTSF9NU0dfUkVRVUVTVF9GQUlMVVJFKTsKKwllbmNyeXB0X3BhY2tldCgpOworCit9CisKK3N0YXRpYyBpbnQgbWF0Y2h0Y3Aodm9pZCogdHlwZWRhdGExLCB2b2lkKiB0eXBlZGF0YTIpIHsKKworCWNvbnN0IHN0cnVjdCBUQ1BMaXN0ZW5lciAqaW5mbzEgPSAoc3RydWN0IFRDUExpc3RlbmVyKil0eXBlZGF0YTE7CisJY29uc3Qgc3RydWN0IFRDUExpc3RlbmVyICppbmZvMiA9IChzdHJ1Y3QgVENQTGlzdGVuZXIqKXR5cGVkYXRhMjsKKworCXJldHVybiAoaW5mbzEtPmxpc3RlbnBvcnQgPT0gaW5mbzItPmxpc3RlbnBvcnQpCisJCQkmJiAoaW5mbzEtPmNoYW50eXBlID09IGluZm8yLT5jaGFudHlwZSkKKwkJCSYmIChzdHJjbXAoaW5mbzEtPmxpc3RlbmFkZHIsIGluZm8yLT5saXN0ZW5hZGRyKSA9PSAwKTsKK30KKworc3RhdGljIGludCBzdnJfY2FuY2VscmVtb3RldGNwKCkgeworCisJaW50IHJldCA9IERST1BCRUFSX0ZBSUxVUkU7CisJdW5zaWduZWQgY2hhciAqIGJpbmRhZGRyID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgYWRkcmxlbjsKKwl1bnNpZ25lZCBpbnQgcG9ydDsKKwlzdHJ1Y3QgTGlzdGVuZXIgKiBsaXN0ZW5lciA9IE5VTEw7CisJc3RydWN0IFRDUExpc3RlbmVyIHRjcGluZm87CisKKwlUUkFDRSgoImVudGVyIGNhbmNlbHJlbW90ZXRjcCIpKQorCisJYmluZGFkZHIgPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCAmYWRkcmxlbik7CisJaWYgKGFkZHJsZW4gPiBNQVhfSVBfTEVOKSB7CisJCVRSQUNFKCgiYWRkciBsZW4gdG9vIGxvbmc6ICVkIiwgYWRkcmxlbikpCisJCWdvdG8gb3V0OworCX0KKworCXBvcnQgPSBidWZfZ2V0aW50KHNlcy5wYXlsb2FkKTsKKworCXRjcGluZm8uc2VuZGFkZHIgPSBOVUxMOworCXRjcGluZm8uc2VuZHBvcnQgPSAwOworCXRjcGluZm8ubGlzdGVuYWRkciA9IGJpbmRhZGRyOworCXRjcGluZm8ubGlzdGVucG9ydCA9IHBvcnQ7CisJbGlzdGVuZXIgPSBnZXRfbGlzdGVuZXIoQ0hBTk5FTF9JRF9UQ1BGT1JXQVJERUQsICZ0Y3BpbmZvLCBtYXRjaHRjcCk7CisJaWYgKGxpc3RlbmVyKSB7CisJCXJlbW92ZV9saXN0ZW5lciggbGlzdGVuZXIgKTsKKwkJcmV0ID0gRFJPUEJFQVJfU1VDQ0VTUzsKKwl9CisKK291dDoKKwltX2ZyZWUoYmluZGFkZHIpOworCVRSQUNFKCgibGVhdmUgY2FuY2VscmVtb3RldGNwIikpCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzdnJfcmVtb3RldGNwcmVxKCkgeworCisJaW50IHJldCA9IERST1BCRUFSX0ZBSUxVUkU7CisJdW5zaWduZWQgY2hhciAqIGJpbmRhZGRyID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgYWRkcmxlbjsKKwlzdHJ1Y3QgVENQTGlzdGVuZXIgKnRjcGluZm8gPSBOVUxMOworCXVuc2lnbmVkIGludCBwb3J0OworCisJVFJBQ0UoKCJlbnRlciByZW1vdGV0Y3ByZXEiKSkKKworCWJpbmRhZGRyID0gYnVmX2dldHN0cmluZyhzZXMucGF5bG9hZCwgJmFkZHJsZW4pOworCWlmIChhZGRybGVuID4gTUFYX0lQX0xFTikgeworCQlUUkFDRSgoImFkZHIgbGVuIHRvbyBsb25nOiAlZCIsIGFkZHJsZW4pKQorCQlnb3RvIG91dDsKKwl9CisKKwlwb3J0ID0gYnVmX2dldGludChzZXMucGF5bG9hZCk7CisKKwlpZiAocG9ydCA9PSAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfSU5GTywgIlNlcnZlciBjaG9zZW4gdGNwZndkIHBvcnRzIGFyZSB1bnN1cHBvcnRlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocG9ydCA8IDEgfHwgcG9ydCA+IDY1NTM1KSB7CisJCVRSQUNFKCgiaW52YWxpZCBwb3J0OiAlZCIsIHBvcnQpKQorCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIXNlcy5hbGxvd3ByaXZwb3J0ICYmIHBvcnQgPCBJUFBPUlRfUkVTRVJWRUQpIHsKKwkJVFJBQ0UoKCJjYW4ndCBhc3NpZ24gcG9ydCA8IDEwMjQgZm9yIG5vbi1yb290IikpCisJCWdvdG8gb3V0OworCX0KKworCXRjcGluZm8gPSAoc3RydWN0IFRDUExpc3RlbmVyKiltX21hbGxvYyhzaXplb2Yoc3RydWN0IFRDUExpc3RlbmVyKSk7CisJdGNwaW5mby0+c2VuZGFkZHIgPSBOVUxMOworCXRjcGluZm8tPnNlbmRwb3J0ID0gMDsKKwl0Y3BpbmZvLT5saXN0ZW5hZGRyID0gYmluZGFkZHI7CisJdGNwaW5mby0+bGlzdGVucG9ydCA9IHBvcnQ7CisJdGNwaW5mby0+Y2hhbnR5cGUgPSAmc3ZyX2NoYW5fdGNwcmVtb3RlOworCXRjcGluZm8tPnRjcF90eXBlID0gZm9yd2FyZGVkOworCisJcmV0ID0gbGlzdGVuX3RjcGZ3ZCh0Y3BpbmZvKTsKKworb3V0OgorCWlmIChyZXQgPT0gRFJPUEJFQVJfRkFJTFVSRSkgeworCQkvKiB3ZSBvbmx5IGZyZWUgaXQgaWYgYSBsaXN0ZW5lciB3YXNuJ3QgY3JlYXRlZCwgc2luY2UgdGhlIGxpc3RlbmVyCisJCSAqIGhhcyB0byByZW1lbWJlciBpdCBpZiBpdCdzIHRvIGJlIGNhbmNlbGxlZCAqLworCQltX2ZyZWUoYmluZGFkZHIpOworCQltX2ZyZWUodGNwaW5mbyk7CisJfQorCVRSQUNFKCgibGVhdmUgcmVtb3RldGNwcmVxIikpCisJcmV0dXJuIHJldDsKK30KKworLyogQ2FsbGVkIHVwb24gY3JlYXRpbmcgYSBuZXcgZGlyZWN0IHRjcCBjaGFubmVsIChpZSB3ZSBjb25uZWN0IG91dCB0byBhbgorICogYWRkcmVzcyAqLworc3RhdGljIGludCBuZXd0Y3BkaXJlY3Qoc3RydWN0IENoYW5uZWwgKiBjaGFubmVsKSB7CisKKwl1bnNpZ25lZCBjaGFyKiBkZXN0aG9zdCA9IE5VTEw7CisJdW5zaWduZWQgaW50IGRlc3Rwb3J0OworCXVuc2lnbmVkIGNoYXIqIG9yaWdob3N0ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgb3JpZ3BvcnQ7CisJY2hhciBwb3J0c3RyaW5nW05JX01BWFNFUlZdOworCWludCBzb2NrOworCWludCBsZW47CisJaW50IGVyciA9IFNTSF9PUEVOX0FETUlOSVNUUkFUSVZFTFlfUFJPSElCSVRFRDsKKworCWlmIChzdnJfb3B0cy5ub2xvY2FsdGNwKSB7CisJCVRSQUNFKCgibGVhdmUgbmV3dGNwZGlyZWN0OiBsb2NhbCB0Y3AgZm9yd2FyZGluZyBkaXNhYmxlZCIpKQorCQlnb3RvIG91dDsKKwl9CisKKwlkZXN0aG9zdCA9IGJ1Zl9nZXRzdHJpbmcoc2VzLnBheWxvYWQsICZsZW4pOworCWlmIChsZW4gPiBNQVhfSE9TVF9MRU4pIHsKKwkJVFJBQ0UoKCJsZWF2ZSBuZXd0Y3BkaXJlY3Q6IGRlc3Rob3N0IHRvbyBsb25nIikpCisJCWdvdG8gb3V0OworCX0KKworCWRlc3Rwb3J0ID0gYnVmX2dldGludChzZXMucGF5bG9hZCk7CisJCisJb3JpZ2hvc3QgPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCAmbGVuKTsKKwlpZiAobGVuID4gTUFYX0hPU1RfTEVOKSB7CisJCVRSQUNFKCgibGVhdmUgbmV3dGNwZGlyZWN0OiBvcmlnaG9zdCB0b28gbG9uZyIpKQorCQlnb3RvIG91dDsKKwl9CisKKwlvcmlncG9ydCA9IGJ1Zl9nZXRpbnQoc2VzLnBheWxvYWQpOworCisJLyogYmVzdCBiZSBzdXJlICovCisJaWYgKG9yaWdwb3J0ID4gNjU1MzUgfHwgZGVzdHBvcnQgPiA2NTUzNSkgeworCQlUUkFDRSgoImxlYXZlIG5ld3RjcGRpcmVjdDogcG9ydCA+IDY1NTM1IikpCisJCWdvdG8gb3V0OworCX0KKworCXNucHJpbnRmKHBvcnRzdHJpbmcsIHNpemVvZihwb3J0c3RyaW5nKSwgIiVkIiwgZGVzdHBvcnQpOworCXNvY2sgPSBjb25uZWN0X3JlbW90ZShkZXN0aG9zdCwgcG9ydHN0cmluZywgMSwgTlVMTCk7CisJaWYgKHNvY2sgPCAwKSB7CisJCWVyciA9IFNTSF9PUEVOX0NPTk5FQ1RfRkFJTEVEOworCQlUUkFDRSgoImxlYXZlIG5ld3RjcGRpcmVjdDogc29jayBmYWlsZWQiKSkKKwkJZ290byBvdXQ7CisJfQorCisJc2VzLm1heGZkID0gTUFYKHNlcy5tYXhmZCwgc29jayk7CisKKwkgLyogV2UgZG9uJ3Qgc2V0IHJlYWRmZCwgdGhhdCB3aWxsIGdldCBzZXQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24ncworCSAqIHByb2dyZXNzIHN1Y2NlZWRzICovCisJY2hhbm5lbC0+d3JpdGVmZCA9IHNvY2s7CisJY2hhbm5lbC0+aW5pdGNvbm4gPSAxOworCQorCWVyciA9IFNTSF9PUEVOX0lOX1BST0dSRVNTOworCitvdXQ6CisJbV9mcmVlKGRlc3Rob3N0KTsKKwltX2ZyZWUob3JpZ2hvc3QpOworCVRSQUNFKCgibGVhdmUgbmV3dGNwZGlyZWN0OiBlcnIgJWQiLCBlcnIpKQorCXJldHVybiBlcnI7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3ZyLXgxMWZ3ZC5jIGIvc3ZyLXgxMWZ3ZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYzhhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9zdnIteDExZndkLmMKQEAgLTAsMCArMSwyMzYgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorCisjaWZuZGVmIERJU0FCTEVfWDExRldECisjaW5jbHVkZSAieDExZndkLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgInNzaC5oIgorI2luY2x1ZGUgImRidXRpbC5oIgorI2luY2x1ZGUgImNoYW5zZXNzaW9uLmgiCisjaW5jbHVkZSAiY2hhbm5lbC5oIgorI2luY2x1ZGUgInBhY2tldC5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorCisjZGVmaW5lIFgxMUJBU0VQT1JUIDYwMDAKKyNkZWZpbmUgWDExQklOREJBU0UgNjAxMAorCitzdGF0aWMgdm9pZCB4MTFhY2NlcHQoc3RydWN0IExpc3RlbmVyKiBsaXN0ZW5lciwgaW50IHNvY2spOworc3RhdGljIGludCBiaW5kcG9ydChpbnQgZmQpOworc3RhdGljIGludCBzZW5kX21zZ19jaGFubmVsX29wZW5feDExKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2luKiBhZGRyKTsKKworLyogY2FsbGVkIGFzIGEgcmVxdWVzdCBmb3IgYSBzZXNzaW9uIGNoYW5uZWwsIHNldHMgdXAgbGlzdGVuaW5nIFgxMSAqLworLyogcmV0dXJucyBEUk9QQkVBUl9TVUNDRVNTIG9yIERST1BCRUFSX0ZBSUxVUkUgKi8KK2ludCB4MTFyZXEoc3RydWN0IENoYW5TZXNzICogY2hhbnNlc3MpIHsKKworCWludCBmZDsKKworCS8qIHdlIGFscmVhZHkgaGF2ZSBhbiB4MTEgY29ubmVjdGlvbiAqLworCWlmIChjaGFuc2Vzcy0+eDExbGlzdGVuZXIgIT0gTlVMTCkgeworCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9CisKKwljaGFuc2Vzcy0+eDExc2luZ2xlY29ubiA9IGJ1Zl9nZXRib29sKHNlcy5wYXlsb2FkKTsKKwljaGFuc2Vzcy0+eDExYXV0aHByb3QgPSBidWZfZ2V0c3RyaW5nKHNlcy5wYXlsb2FkLCBOVUxMKTsKKwljaGFuc2Vzcy0+eDExYXV0aGNvb2tpZSA9IGJ1Zl9nZXRzdHJpbmcoc2VzLnBheWxvYWQsIE5VTEwpOworCWNoYW5zZXNzLT54MTFzY3JlZW5udW0gPSBidWZfZ2V0aW50KHNlcy5wYXlsb2FkKTsKKworCS8qIGNyZWF0ZSBsaXN0ZW5pbmcgc29ja2V0ICovCisJZmQgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIDApOworCWlmIChmZCA8IDApIHsKKwkJZ290byBmYWlsOworCX0KKworCS8qIGFsbG9jYXRlIHBvcnQgYW5kIGJpbmQgKi8KKwljaGFuc2Vzcy0+eDExcG9ydCA9IGJpbmRwb3J0KGZkKTsKKwlpZiAoY2hhbnNlc3MtPngxMXBvcnQgPCAwKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBsaXN0ZW4gKi8KKwlpZiAobGlzdGVuKGZkLCAyMCkgPCAwKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKiBzZXQgbm9uLWJsb2NraW5nICovCisJc2V0bm9uYmxvY2tpbmcoZmQpOworCisJLyogbGlzdGVuZXIgY29kZSB3aWxsIGhhbmRsZSB0aGUgc29ja2V0IG5vdy4KKwkgKiBObyBjbGVhbnVwIGhhbmRsZXIgbmVlZGVkLCBzaW5jZSBsaXN0ZW5lcl9yZW1vdmUgb25seSBoYXBwZW5zCisJICogZnJvbSBvdXIgY2xlYW51cCBhbnl3YXkgKi8KKwljaGFuc2Vzcy0+eDExbGlzdGVuZXIgPSBuZXdfbGlzdGVuZXIoICZmZCwgMSwgMCwgY2hhbnNlc3MsIHgxMWFjY2VwdCwgTlVMTCk7CisJaWYgKGNoYW5zZXNzLT54MTFsaXN0ZW5lciA9PSBOVUxMKSB7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXR1cm4gRFJPUEJFQVJfU1VDQ0VTUzsKKworZmFpbDoKKwkvKiBjbGVhbnVwICovCisJbV9mcmVlKGNoYW5zZXNzLT54MTFhdXRocHJvdCk7CisJbV9mcmVlKGNoYW5zZXNzLT54MTFhdXRoY29va2llKTsKKwljbG9zZShmZCk7CisKKwlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKK30KKworLyogYWNjZXB0cyBhIG5ldyBYMTEgc29ja2V0ICovCisvKiByZXR1cm5zIERST1BCRUFSX0ZBSUxVUkUgb3IgRFJPUEJFQVJfU1VDQ0VTUyAqLworc3RhdGljIHZvaWQgeDExYWNjZXB0KHN0cnVjdCBMaXN0ZW5lciogbGlzdGVuZXIsIGludCBzb2NrKSB7CisKKwlpbnQgZmQ7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJaW50IGxlbjsKKwlpbnQgcmV0OworCXN0cnVjdCBDaGFuU2VzcyAqIGNoYW5zZXNzID0gKHN0cnVjdCBDaGFuU2VzcyAqKShsaXN0ZW5lci0+dHlwZWRhdGEpOworCisJbGVuID0gc2l6ZW9mKGFkZHIpOworCisJZmQgPSBhY2NlcHQoc29jaywgKHN0cnVjdCBzb2NrYWRkciopJmFkZHIsICZsZW4pOworCWlmIChmZCA8IDApIHsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHNpbmdsZS1jb25uZWN0aW9uIHdlIGNsb3NlIGl0IHVwICovCisJaWYgKGNoYW5zZXNzLT54MTFzaW5nbGVjb25uKSB7CisJCXgxMWNsZWFudXAoY2hhbnNlc3MpOworCX0KKworCXJldCA9IHNlbmRfbXNnX2NoYW5uZWxfb3Blbl94MTEoZmQsICZhZGRyKTsKKwlpZiAocmV0ID09IERST1BCRUFSX0ZBSUxVUkUpIHsKKwkJY2xvc2UoZmQpOworCX0KK30KKworLyogVGhpcyBpcyBjYWxsZWQgYWZ0ZXIgc3dpdGNoaW5nIHRvIHRoZSB1c2VyLCBhbmQgc2V0cyB1cCB0aGUgeGF1dGgKKyAqIGFuZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICAqLwordm9pZCB4MTFzZXRhdXRoKHN0cnVjdCBDaGFuU2VzcyAqY2hhbnNlc3MpIHsKKworCWNoYXIgZGlzcGxheVsyMF07IC8qIHNwYWNlIGZvciAibG9jYWxob3N0OjEyMzQ1LjEyMyIgKi8KKwlGSUxFICogYXV0aHByb2cgPSBOVUxMOworCWludCB2YWw7CisKKwlpZiAoY2hhbnNlc3MtPngxMWxpc3RlbmVyID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKworCS8qIGNyZWF0ZSB0aGUgRElTUExBWSBzdHJpbmcgKi8KKwl2YWwgPSBzbnByaW50ZihkaXNwbGF5LCBzaXplb2YoZGlzcGxheSksICJsb2NhbGhvc3Q6JWQuJWQiLAorCQkJY2hhbnNlc3MtPngxMXBvcnQgLSBYMTFCQVNFUE9SVCwgY2hhbnNlc3MtPngxMXNjcmVlbm51bSk7CisJaWYgKHZhbCA8IDAgfHwgdmFsID49IChpbnQpc2l6ZW9mKGRpc3BsYXkpKSB7CisJCS8qIHN0cmluZyB3YXMgdHJ1bmNhdGVkICovCisJCXJldHVybjsKKwl9CisKKwlhZGRuZXd2YXIoIkRJU1BMQVkiLCBkaXNwbGF5KTsKKworCS8qIGNyZWF0ZSB0aGUgeGF1dGggc3RyaW5nICovCisJdmFsID0gc25wcmludGYoZGlzcGxheSwgc2l6ZW9mKGRpc3BsYXkpLCAidW5peDolZC4lZCIsCisJCQljaGFuc2Vzcy0+eDExcG9ydCAtIFgxMUJBU0VQT1JULCBjaGFuc2Vzcy0+eDExc2NyZWVubnVtKTsKKwlpZiAodmFsIDwgMCB8fCB2YWwgPj0gKGludClzaXplb2YoZGlzcGxheSkpIHsKKwkJLyogc3RyaW5nIHdhcyB0cnVuY2F0ZWQgKi8KKwkJcmV0dXJuOworCX0KKworCS8qIHBvcGVuIGlzIGEgbmljZSBmdW5jdGlvbiAtIGNvZGUgaXMgc3Ryb25nbHkgYmFzZWQgb24gT3BlblNTSCdzICovCisJYXV0aHByb2cgPSBwb3BlbihYQVVUSF9DT01NQU5ELCAidyIpOworCWlmIChhdXRocHJvZykgeworCQlmcHJpbnRmKGF1dGhwcm9nLCAiYWRkICVzICVzICVzXG4iLAorCQkJCWRpc3BsYXksIGNoYW5zZXNzLT54MTFhdXRocHJvdCwgY2hhbnNlc3MtPngxMWF1dGhjb29raWUpOworCQlwY2xvc2UoYXV0aHByb2cpOworCX0gZWxzZSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJ1biAlc1xuIiwgWEFVVEhfQ09NTUFORCk7CisJfQorfQorCit2b2lkIHgxMWNsZWFudXAoc3RydWN0IENoYW5TZXNzICpjaGFuc2VzcykgeworCisJbV9mcmVlKGNoYW5zZXNzLT54MTFhdXRocHJvdCk7CisJbV9mcmVlKGNoYW5zZXNzLT54MTFhdXRoY29va2llKTsKKworCVRSQUNFKCgiY2hhbnNlc3MgJXMiLCBjaGFuc2VzcykpCisJaWYgKGNoYW5zZXNzLT54MTFsaXN0ZW5lciAhPSBOVUxMKSB7CisJCXJlbW92ZV9saXN0ZW5lcihjaGFuc2Vzcy0+eDExbGlzdGVuZXIpOworCQljaGFuc2Vzcy0+eDExbGlzdGVuZXIgPSBOVUxMOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBDaGFuVHlwZSBjaGFuX3gxMSA9IHsKKwkwLCAvKiBzZXBmZHMgKi8KKwkieDExIiwKKwlOVUxMLCAvKiBpbml0aGFuZGxlciAqLworCU5VTEwsIC8qIGNoZWNrY2xvc2UgKi8KKwlOVUxMLCAvKiByZXFoYW5kbGVyICovCisJTlVMTCAvKiBjbG9zZWhhbmRsZXIgKi8KK307CisKKworc3RhdGljIGludCBzZW5kX21zZ19jaGFubmVsX29wZW5feDExKGludCBmZCwgc3RydWN0IHNvY2thZGRyX2luKiBhZGRyKSB7CisKKwljaGFyKiBpcHN0cmluZyA9IE5VTEw7CisKKwlpZiAoc2VuZF9tc2dfY2hhbm5lbF9vcGVuX2luaXQoZmQsICZjaGFuX3gxMSkgPT0gRFJPUEJFQVJfU1VDQ0VTUykgeworCQlpcHN0cmluZyA9IGluZXRfbnRvYShhZGRyLT5zaW5fYWRkcik7CisJCWJ1Zl9wdXRzdHJpbmcoc2VzLndyaXRlcGF5bG9hZCwgaXBzdHJpbmcsIHN0cmxlbihpcHN0cmluZykpOworCQlidWZfcHV0aW50KHNlcy53cml0ZXBheWxvYWQsIGFkZHItPnNpbl9wb3J0KTsKKworCQllbmNyeXB0X3BhY2tldCgpOworCQlyZXR1cm4gRFJPUEJFQVJfU1VDQ0VTUzsKKwl9IGVsc2UgeworCQlyZXR1cm4gRFJPUEJFQVJfRkFJTFVSRTsKKwl9CisKK30KKworLyogcmV0dXJucyB0aGUgcG9ydCBib3VuZCB0bywgb3IgLTEgb24gZmFpbHVyZS4KKyAqIFdpbGwgYXR0ZW1wdCB0byBiaW5kIHRvIGEgcG9ydCBYMTFCSU5EQkFTRSAoNjAxMCB1c3VhbGx5KSBvciB1cHdhcmRzICovCitzdGF0aWMgaW50IGJpbmRwb3J0KGludCBmZCkgeworCisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJdWludDE2X3QgcG9ydDsKKworCW1lbXNldCgodm9pZCopJmFkZHIsIDB4MCwgc2l6ZW9mKGFkZHIpKTsKKwlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKworCS8qIGlmIHdlIGNhbid0IGZpbmQgb25lIGluIDIwMDAgcG9ydHMgZnJlZSwgc29tZXRoaW5nJ3Mgd3JvbmcgKi8KKwlmb3IgKHBvcnQgPSBYMTFCSU5EQkFTRTsgcG9ydCA8IFgxMUJJTkRCQVNFICsgMjAwMDsgcG9ydCsrKSB7CisJCWFkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKwkJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLCAKKwkJCQkJc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IDApIHsKKwkJCS8qIHN1Y2Nlc3MgKi8KKwkJCXJldHVybiBwb3J0OworCQl9CisJCWlmIChlcnJubyA9PSBFQUREUklOVVNFKSB7CisJCQkvKiB0cnkgdGhlIG5leHQgcG9ydCAqLworCQkJY29udGludWU7CisJCX0KKwkJLyogb3RoZXJ3aXNlIGl0IHdhcyBhbiBlcnJvciB3ZSBkb24ndCBrbm93IGFib3V0ICovCisJCWRyb3BiZWFyX2xvZyhMT0dfREVCVUcsICJmYWlsZWQgdG8gYmluZCB4MTEgc29ja2V0Iik7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gLTE7Cit9CisjZW5kaWYgLyogRFJPUEJFQVJfWDExRldEICovCmRpZmYgLS1naXQgYS90Y3AtYWNjZXB0LmMgYi90Y3AtYWNjZXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ1N2M5YgotLS0gL2Rldi9udWxsCisrKyBiL3RjcC1hY2NlcHQuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIERyb3BiZWFyIFNTSAorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKworI2luY2x1ZGUgImluY2x1ZGVzLmgiCisjaW5jbHVkZSAic3NoLmgiCisjaW5jbHVkZSAidGNwZndkLmgiCisjaW5jbHVkZSAiZGJ1dGlsLmgiCisjaW5jbHVkZSAic2Vzc2lvbi5oIgorI2luY2x1ZGUgImJ1ZmZlci5oIgorI2luY2x1ZGUgInBhY2tldC5oIgorI2luY2x1ZGUgImxpc3RlbmVyLmgiCisjaW5jbHVkZSAicnVub3B0cy5oIgorCisjaWZkZWYgRFJPUEJFQVJfVENQX0FDQ0VQVAorCitzdGF0aWMgdm9pZCBjbGVhbnVwX3RjcChzdHJ1Y3QgTGlzdGVuZXIgKmxpc3RlbmVyKSB7CisKKwlzdHJ1Y3QgVENQTGlzdGVuZXIgKnRjcGluZm8gPSAoc3RydWN0IFRDUExpc3RlbmVyKikobGlzdGVuZXItPnR5cGVkYXRhKTsKKworCW1fZnJlZSh0Y3BpbmZvLT5zZW5kYWRkcik7CisJbV9mcmVlKHRjcGluZm8tPmxpc3RlbmFkZHIpOworCW1fZnJlZSh0Y3BpbmZvKTsKK30KKworc3RhdGljIHZvaWQgdGNwX2FjY2VwdG9yKHN0cnVjdCBMaXN0ZW5lciAqbGlzdGVuZXIsIGludCBzb2NrKSB7CisKKwlpbnQgZmQ7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjsKKwlzb2NrbGVuX3QgbGVuOworCWNoYXIgaXBzdHJpbmdbTklfTUFYSE9TVF0sIHBvcnRzdHJpbmdbTklfTUFYU0VSVl07CisJc3RydWN0IFRDUExpc3RlbmVyICp0Y3BpbmZvID0gKHN0cnVjdCBUQ1BMaXN0ZW5lciopKGxpc3RlbmVyLT50eXBlZGF0YSk7CisKKwlsZW4gPSBzaXplb2YoYWRkcik7CisKKwlmZCA9IGFjY2VwdChzb2NrLCAoc3RydWN0IHNvY2thZGRyKikmYWRkciwgJmxlbik7CisJaWYgKGZkIDwgMCkgeworCQlyZXR1cm47CisJfQorCisJaWYgKGdldG5hbWVpbmZvKChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLCBsZW4sIGlwc3RyaW5nLCBzaXplb2YoaXBzdHJpbmcpLAorCQkJCXBvcnRzdHJpbmcsIHNpemVvZihwb3J0c3RyaW5nKSwgCisJCQkJTklfTlVNRVJJQ0hPU1QgfCBOSV9OVU1FUklDU0VSVikgIT0gMCkgeworCQlyZXR1cm47CisJfQorCisJaWYgKHNlbmRfbXNnX2NoYW5uZWxfb3Blbl9pbml0KGZkLCB0Y3BpbmZvLT5jaGFudHlwZSkgPT0gRFJPUEJFQVJfU1VDQ0VTUykgeworCQl1bnNpZ25lZCBjaGFyKiBhZGRyID0gTlVMTDsKKwkJdW5zaWduZWQgaW50IHBvcnQgPSAwOworCisJCWlmICh0Y3BpbmZvLT50Y3BfdHlwZSA9PSBkaXJlY3QpIHsKKwkJCS8qICJkaXJlY3QtdGNwaXAiICovCisJCQkvKiBob3N0IHRvIGNvbm5lY3QsIHBvcnQgdG8gY29ubmVjdCAqLworCQkJYWRkciA9IHRjcGluZm8tPnNlbmRhZGRyOworCQkJcG9ydCA9IHRjcGluZm8tPnNlbmRwb3J0OworCQl9IGVsc2UgeworCQkJZHJvcGJlYXJfYXNzZXJ0KHRjcGluZm8tPnRjcF90eXBlID09IGZvcndhcmRlZCk7CisJCQkvKiAiZm9yd2FyZGVkLXRjcGlwIiAqLworCQkJLyogYWRkcmVzcyB0aGF0IHdhcyBjb25uZWN0ZWQsIHBvcnQgdGhhdCB3YXMgY29ubmVjdGVkICovCisJCQlhZGRyID0gdGNwaW5mby0+bGlzdGVuYWRkcjsKKwkJCXBvcnQgPSB0Y3BpbmZvLT5saXN0ZW5wb3J0OworCQl9CisKKwkJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCBhZGRyLCBzdHJsZW4oYWRkcikpOworCQlidWZfcHV0aW50KHNlcy53cml0ZXBheWxvYWQsIHBvcnQpOworCisJCS8qIG9yaWdpbmF0b3IgaXAgKi8KKwkJYnVmX3B1dHN0cmluZyhzZXMud3JpdGVwYXlsb2FkLCBpcHN0cmluZywgc3RybGVuKGlwc3RyaW5nKSk7CisJCS8qIG9yaWdpbmF0b3IgcG9ydCAqLworCQlidWZfcHV0aW50KHNlcy53cml0ZXBheWxvYWQsIGF0b2wocG9ydHN0cmluZykpOworCisJCWVuY3J5cHRfcGFja2V0KCk7CisKKwl9IGVsc2UgeworCQkvKiBYWFggZGVidWc/ICovCisJCWNsb3NlKGZkKTsKKwl9Cit9CisKK2ludCBsaXN0ZW5fdGNwZndkKHN0cnVjdCBUQ1BMaXN0ZW5lciogdGNwaW5mbykgeworCisJY2hhciBwb3J0c3RyaW5nW05JX01BWFNFUlZdOworCWludCBzb2Nrc1tEUk9QQkVBUl9NQVhfU09DS1NdOworCXN0cnVjdCBMaXN0ZW5lciAqbGlzdGVuZXIgPSBOVUxMOworCWludCBuc29ja3M7CisJY2hhciogZXJyc3RyaW5nID0gTlVMTDsKKwkvKiBsaXN0ZW5fc3BlYyA9IE5VTEwgaW5kaWNhdGVzIGxvY2FsaG9zdCAqLworCWNvbnN0IGNoYXIqIGxpc3Rlbl9zcGVjID0gTlVMTDsKKworCVRSQUNFKCgiZW50ZXIgbGlzdGVuX3RjcGZ3ZCIpKQorCisJLyogZmlyc3Qgd2UgdHJ5IHRvIGJpbmQsIHNvIGRvbid0IG5lZWQgdG8gZG8gc28gbXVjaCBjbGVhbnVwIG9uIGZhaWx1cmUgKi8KKwlzbnByaW50Zihwb3J0c3RyaW5nLCBzaXplb2YocG9ydHN0cmluZyksICIlZCIsIHRjcGluZm8tPmxpc3RlbnBvcnQpOworCisJLyogYSBsaXN0ZW5hZGRyIG9mICIiIHdpbGwgaW5kaWNhdGUgYWxsIGludGVyZmFjZXMgKi8KKwlpZiAob3B0cy5saXN0ZW5fZndkX2FsbCAKKwkJCSYmIChzdHJjbXAodGNwaW5mby0+bGlzdGVuYWRkciwgImxvY2FsaG9zdCIpICE9IDApICkgeworCQlsaXN0ZW5fc3BlYyA9IHRjcGluZm8tPmxpc3RlbmFkZHI7CisJfQorCisJbnNvY2tzID0gZHJvcGJlYXJfbGlzdGVuKGxpc3Rlbl9zcGVjLCBwb3J0c3RyaW5nLCBzb2NrcywgCisJCQlEUk9QQkVBUl9NQVhfU09DS1MsICZlcnJzdHJpbmcsICZzZXMubWF4ZmQpOworCWlmIChuc29ja3MgPCAwKSB7CisJCWRyb3BiZWFyX2xvZyhMT0dfSU5GTywgIlRDUCBmb3J3YXJkIGZhaWxlZDogJXMiLCBlcnJzdHJpbmcpOworCQltX2ZyZWUoZXJyc3RyaW5nKTsKKwkJVFJBQ0UoKCJsZWF2ZSBsaXN0ZW5fdGNwZndkOiBkcm9wYmVhcl9saXN0ZW4gZmFpbGVkIikpCisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0KKwltX2ZyZWUoZXJyc3RyaW5nKTsKKwkKKwkvKiBuZXdfbGlzdGVuZXIgd2lsbCBjbG9zZSB0aGUgc29ja3MgaWYgaXQgZmFpbHMgKi8KKwlsaXN0ZW5lciA9IG5ld19saXN0ZW5lcihzb2NrcywgbnNvY2tzLCBDSEFOTkVMX0lEX1RDUEZPUldBUkRFRCwgdGNwaW5mbywgCisJCQl0Y3BfYWNjZXB0b3IsIGNsZWFudXBfdGNwKTsKKworCWlmIChsaXN0ZW5lciA9PSBOVUxMKSB7CisJCVRSQUNFKCgibGVhdmUgbGlzdGVuX3RjcGZ3ZDogbGlzdGVuZXIgZmFpbGVkIikpCisJCXJldHVybiBEUk9QQkVBUl9GQUlMVVJFOworCX0KKworCVRSQUNFKCgibGVhdmUgbGlzdGVuX3RjcGZ3ZDogc3VjY2VzcyIpKQorCXJldHVybiBEUk9QQkVBUl9TVUNDRVNTOworfQorCisjZW5kaWYgLyogRFJPUEJFQVJfVENQX0FDQ0VQVCAqLwpkaWZmIC0tZ2l0IGEvdGNwZndkLmggYi90Y3Bmd2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGFmMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGNwZndkLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIERyb3BiZWFyIC0gYSBTU0gyIHNlcnZlcgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIsMjAwMyBNYXR0IEpvaG5zdG9uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4gKi8KKyNpZm5kZWYgX1RDUEZXRF9ICisjZGVmaW5lIF9UQ1BGV0RfSAorCisjaW5jbHVkZSAiY2hhbm5lbC5oIgorCitzdHJ1Y3QgVENQTGlzdGVuZXIgeworCisJLyogRm9yIGEgZGlyZWN0LXRjcGlwIHJlcXVlc3QsIGl0J3MgdGhlIGFkZHIvcG9ydCB3ZSB3YW50IHRoZSBvdGhlcgorCSAqIGVuZCB0byBjb25uZWN0IHRvICovCisJdW5zaWduZWQgY2hhciAqc2VuZGFkZHI7CisJdW5zaWduZWQgaW50IHNlbmRwb3J0OworCisJLyogVGhpcyBpcyB0aGUgYWRkcmVzcy9wb3J0IHRoYXQgd2UgbGlzdGVuIG9uLiBUaGUgYWRkcmVzcyBoYXMgc3BlY2lhbAorCSAqIG1lYW5pbmdzIGFzIHBlciB0aGUgcmZjLCAiIiBmb3IgYWxsIGludGVyZmFjZXMsICJsb2NhbGhvc3QiIGZvciAKKwkgKiBsb2NhbGhvc3QsIG9yIGEgbm9ybWFsIGludGVyZmFjZSBuYW1lLiAqLworCXVuc2lnbmVkIGNoYXIgKmxpc3RlbmFkZHI7CisJdW5zaWduZWQgaW50IGxpc3RlbnBvcnQ7CisKKwljb25zdCBzdHJ1Y3QgQ2hhblR5cGUgKmNoYW50eXBlOworCWVudW0ge2RpcmVjdCwgZm9yd2FyZGVkfSB0Y3BfdHlwZTsKK307CisKKy8qIEEgbGluayBpbiBhIGxpc3Qgb2YgZm9yd2FyZHMgKi8KK3N0cnVjdCBUQ1BGd2RMaXN0IHsKKworCWNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbm5lY3RhZGRyOworCXVuc2lnbmVkIGludCBjb25uZWN0cG9ydDsKKwl1bnNpZ25lZCBpbnQgbGlzdGVucG9ydDsKKwlzdHJ1Y3QgVENQRndkTGlzdCAqIG5leHQ7CisKK307CisKKy8qIFNlcnZlciAqLwordm9pZCByZWN2X21zZ19nbG9iYWxfcmVxdWVzdF9yZW1vdGV0Y3AoKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgQ2hhblR5cGUgc3ZyX2NoYW5fdGNwZGlyZWN0OworCisvKiBDbGllbnQgKi8KK3ZvaWQgc2V0dXBfbG9jYWx0Y3AoKTsKK3ZvaWQgc2V0dXBfcmVtb3RldGNwKCk7CitleHRlcm4gY29uc3Qgc3RydWN0IENoYW5UeXBlIGNsaV9jaGFuX3RjcHJlbW90ZTsKKworLyogQ29tbW9uICovCitpbnQgbGlzdGVuX3RjcGZ3ZChzdHJ1Y3QgVENQTGlzdGVuZXIqIHRjcGluZm8pOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdGVybWNvZGVzLmMgYi90ZXJtY29kZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTk1MDVjCi0tLSAvZGV2L251bGwKKysrIGIvdGVybWNvZGVzLmMKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisKKyNpbmNsdWRlICJpbmNsdWRlcy5oIgorI2luY2x1ZGUgInRlcm1jb2Rlcy5oIgorCitjb25zdCBzdHJ1Y3QgVGVybUNvZGUgdGVybWNvZGVzW01BWF9URVJNQ09ERSsxXSA9IHsKKworCQl7MCwgMH0sIC8qIFRUWV9PUF9FTkQgKi8KKwkJe1ZJTlRSLCBURVJNQ09ERV9DT05UUk9MQ0hBUn0sIC8qIGNvbnRyb2wgY2hhcmFjdGVyIGNvZGVzICovCisJCXtWUVVJVCwgVEVSTUNPREVfQ09OVFJPTENIQVJ9LAorCQl7VkVSQVNFLCBURVJNQ09ERV9DT05UUk9MQ0hBUn0sCisJCXtWS0lMTCwgVEVSTUNPREVfQ09OVFJPTENIQVJ9LAorCQl7VkVPRiwgVEVSTUNPREVfQ09OVFJPTENIQVJ9LAorCQl7VkVPTCwgVEVSTUNPREVfQ09OVFJPTENIQVJ9LAorCQl7VkVPTDIsIFRFUk1DT0RFX0NPTlRST0xDSEFSfSwKKwkJe1ZTVEFSVCwgVEVSTUNPREVfQ09OVFJPTENIQVJ9LAorCQl7VlNUT1AsIFRFUk1DT0RFX0NPTlRST0xDSEFSfSwKKwkJe1ZTVVNQLCBURVJNQ09ERV9DT05UUk9MQ0hBUn0sCisjaWZkZWYgVkRTVVNQCisJCXtWRFNVU1AsIFRFUk1DT0RFX0NPTlRST0xDSEFSfSwKKyNlbHNlCisJCXswLCAwfSwKKyNlbmRpZgorI2lmZGVmIFZSRVBSSU5UCisJCXtWUkVQUklOVCwgVEVSTUNPREVfQ09OVFJPTENIQVJ9LAorI2Vsc2UKKwkJezAsIDB9LAorI2VuZGlmCisjaWZkZWYgQUlYCisJCXtDRVJBU0UsIFRFUk1DT0RFX0NPTlRST0xDSEFSfSwKKyNlbHNlCisJCXtWV0VSQVNFLCBURVJNQ09ERV9DT05UUk9MQ0hBUn0sCisjZW5kaWYKKwkJe1ZMTkVYVCwgVEVSTUNPREVfQ09OVFJPTENIQVJ9LAorI2lmZGVmIFZGTFVTSAorCQl7VkZMVVNILCBURVJNQ09ERV9DT05UUk9MQ0hBUn0sCisjZWxzZQkKKwkJezAsIDB9LAorI2VuZGlmCisjaWZkZWYgVlNXVENICisJCXtWU1dUQ0gsIFRFUk1DT0RFX0NPTlRST0xDSEFSfSwKKyNlbHNlCQorCQl7MCwgMH0sCisjZW5kaWYKKyNpZmRlZiBWU1RBVFVTCisJCXtWU1RBVFVTLCBURVJNQ09ERV9DT05UUk9MQ0hBUn0sCisjZWxzZQorCQl7MCwgMH0sCisjZW5kaWYKKyNpZmRlZiBBSVgKKwkJe0NLSUxMLCBURVJNQ09ERV9DT05UUk9MQ0hBUn0sCisjZWxpZiBkZWZpbmVkKFZESVNDQVJEKQorCQl7VkRJU0NBUkQsIFRFUk1DT0RFX0NPTlRST0xDSEFSfSwKKyNlbHNlCisJCXswLCAwfSwKKyNlbmRpZgorCQl7MCwgMH0sIC8qIDE5ICovCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0sCisJCXswLCAwfSwgLyogMjkgKi8KKwkJe0lHTlBBUiwgVEVSTUNPREVfSU5QVVR9LCAvKiBpbnB1dCBmbGFncyAqLworCQl7UEFSTVJLLCBURVJNQ09ERV9JTlBVVH0sCisJCXtJTlBDSywgVEVSTUNPREVfSU5QVVR9LAorCQl7SVNUUklQLCBURVJNQ09ERV9JTlBVVH0sCisJCXtJTkxDUiwgVEVSTUNPREVfSU5QVVR9LAorCQl7SUdOQ1IsIFRFUk1DT0RFX0lOUFVUfSwKKwkJe0lDUk5MLCBURVJNQ09ERV9JTlBVVH0sCisjaWZkZWYgSVVDTEMKKwkJe0lVQ0xDLCBURVJNQ09ERV9JTlBVVH0sCisjZWxzZQorCQl7MCwgMH0sCisjZW5kaWYKKwkJe0lYT04sIFRFUk1DT0RFX0lOUFVUfSwKKwkJe0lYQU5ZLCBURVJNQ09ERV9JTlBVVH0sCisJCXtJWE9GRiwgVEVSTUNPREVfSU5QVVR9LAorI2lmZGVmIElNQVhCRUwKKwkJe0lNQVhCRUwsIFRFUk1DT0RFX0lOUFVUfSwKKyNlbHNlCisJCXswLCAwfSwKKyNlbmRpZgorCQl7MCwgMH0sIC8qIDQyICovCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0sCisJCXswLCAwfSwgLyogNDkgKi8KKwkJe0lTSUcsIFRFUk1DT0RFX0xPQ0FMfSwgLyogbG9jYWwgZmxhZ3MgKi8KKwkJe0lDQU5PTiwgVEVSTUNPREVfTE9DQUx9LAorI2lmZGVmIFhDQVNFCisJCXtYQ0FTRSwgVEVSTUNPREVfTE9DQUx9LAorI2Vsc2UKKwkJezAsIDB9LAorI2VuZGlmCisJCXtFQ0hPLCBURVJNQ09ERV9MT0NBTH0sCisJCXtFQ0hPRSwgVEVSTUNPREVfTE9DQUx9LAorCQl7RUNIT0ssIFRFUk1DT0RFX0xPQ0FMfSwKKwkJe0VDSE9OTCwgVEVSTUNPREVfTE9DQUx9LAorCQl7Tk9GTFNILCBURVJNQ09ERV9MT0NBTH0sCisJCXtUT1NUT1AsIFRFUk1DT0RFX0xPQ0FMfSwKKwkJe0lFWFRFTiwgVEVSTUNPREVfTE9DQUx9LAorCQl7RUNIT0NUTCwgVEVSTUNPREVfTE9DQUx9LAorCQl7RUNIT0tFLCBURVJNQ09ERV9MT0NBTH0sCisjaWZkZWYgUEVORElOCisJCXtQRU5ESU4sIFRFUk1DT0RFX0xPQ0FMfSwKKyNlbHNlCisJCXswLCAwfSwKKyNlbmRpZgorCQl7MCwgMH0sIC8qIDYzICovCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0sIC8qIDY5ICovCisJCXtPUE9TVCwgVEVSTUNPREVfT1VUUFVUfSwgLyogb3V0cHV0IGZsYWdzICovCisjaWZkZWYgT0xDVUMKKwkJe09MQ1VDLCBURVJNQ09ERV9PVVRQVVR9LAorI2Vsc2UKKwkJezAsIDB9LAorI2VuZGlmCisJCXtPTkxDUiwgVEVSTUNPREVfT1VUUFVUfSwKKyNpZmRlZiBPQ1JOTAorCQl7T0NSTkwsIFRFUk1DT0RFX09VVFBVVH0sCisjZWxzZQorCQl7MCwgMH0sCisjZW5kaWYKKyNpZmRlZiBPTk9DUgorCQl7T05PQ1IsIFRFUk1DT0RFX09VVFBVVH0sCisjZWxzZQorCQl7MCwgMH0sCisjZW5kaWYKKyNpZmRlZiBPTkxSRVQKKwkJe09OTFJFVCwgVEVSTUNPREVfT1VUUFVUfSwKKyNlbHNlCisJCXswLCAwfSwKKyNlbmRpZgorCQl7MCwgMH0sIC8qIDc2ICovCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0sCisJCXswLCAwfSwgLyogODkgKi8KKwkJe0NTNywgVEVSTUNPREVfQ09OVFJPTH0sCisJCXtDUzgsIFRFUk1DT0RFX0NPTlRST0x9LAorCQl7UEFSRU5CLCBURVJNQ09ERV9DT05UUk9MfSwKKwkJe1BBUk9ERCwgVEVSTUNPREVfQ09OVFJPTH0KKwkJLyogOTQgKi8KK307CmRpZmYgLS1naXQgYS90ZXJtY29kZXMuaCBiL3Rlcm1jb2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNzkyZWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXJtY29kZXMuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogRHJvcGJlYXIgLSBhIFNTSDIgc2VydmVyCisgKiAKKyAqIENvcHlyaWdodCAoYykgMjAwMiwyMDAzIE1hdHQgSm9obnN0b24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLiAqLworCisjaWZuZGVmIF9URVJNQ09ERVNfSF8KKyNkZWZpbmUgX1RFUk1DT0RFU19IXworCisjZGVmaW5lIFRFUk1DT0RFX05PTkUgMAorI2RlZmluZSBURVJNQ09ERV9DT05UUk9MIDEKKyNkZWZpbmUgVEVSTUNPREVfSU5QVVQgMgorI2RlZmluZSBURVJNQ09ERV9PVVRQVVQgMworI2RlZmluZSBURVJNQ09ERV9MT0NBTCA0CisjZGVmaW5lIFRFUk1DT0RFX0NPTlRST0xDSEFSIDUKKworI2RlZmluZSBNQVhfVEVSTUNPREUgOTMKKworc3RydWN0IFRlcm1Db2RlIHsKKworCXVuc2lnbmVkIGludCBtYXBjb2RlOworCXVuc2lnbmVkIGNoYXIgdHlwZTsKKworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBUZXJtQ29kZSB0ZXJtY29kZXNbXTsKKworI2VuZGlmIC8qIF9URVJNQ09ERVNfSF8gKi8KZGlmZiAtLWdpdCBhL3gxMWZ3ZC5oIGIveDExZndkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1NWE2OAotLS0gL2Rldi9udWxsCisrKyBiL3gxMWZ3ZC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBEcm9wYmVhciAtIGEgU1NIMiBzZXJ2ZXIKKyAqIAorICogQ29weXJpZ2h0IChjKSAyMDAyLDIwMDMgTWF0dCBKb2huc3RvbgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuICovCisjaWZuZGVmIF9YMTFGV0RfSF8KKyNkZWZpbmUgX1gxMUZXRF9IXworI2lmbmRlZiBESVNBQkxFX1gxMUZXRAorCisjaW5jbHVkZSAiaW5jbHVkZXMuaCIKKyNpbmNsdWRlICJjaGFuc2Vzc2lvbi5oIgorI2luY2x1ZGUgImNoYW5uZWwuaCIKKworaW50IHgxMXJlcShzdHJ1Y3QgQ2hhblNlc3MgKiBjaGFuc2Vzcyk7Cit2b2lkIHgxMXNldGF1dGgoc3RydWN0IENoYW5TZXNzICpjaGFuc2Vzcyk7Cit2b2lkIHgxMWNsZWFudXAoc3RydWN0IENoYW5TZXNzICpjaGFuc2Vzcyk7CisKKyNlbmRpZiAvKiBEUk9QQkVBUl9YMTFGV0QgKi8KKyNlbmRpZiAvKiBfWDExRldEX0hfICovCg==