From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v6 07/24] arm/x86/vmap: Add vmalloc_type and vm_init_type Date: Wed, 6 Apr 2016 23:49:26 -0400 Message-ID: <1460000983-28170-8-git-send-email-konrad.wilk@oracle.com> References: <1460000983-28170-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ao0xL-0004rb-EH for xen-devel@lists.xenproject.org; Thu, 07 Apr 2016 03:50:07 +0000 In-Reply-To: <1460000983-28170-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org, konrad@kernel.org, ross.lagerwall@citrix.com, mpohlack@amazon.de, sasha.levin@oracle.com, andrew.cooper3@citrix.com Cc: Stefano Stabellini , Keir Fraser , Konrad Rzeszutek Wilk , Ian Jackson , Tim Deegan , Julien Grall , Jan Beulich List-Id: xen-devel@lists.xenproject.org Rm9yIHRob3NlIHVzZXJzIHdobyB3YW50IHRvIHVzZSB0aGUgdmlydHVhbCBhZGRyZXNzZXMgdGhh dAphcmUgaW4gdGhlIGh5cGVydmlzb3IncyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgLSB0aGVzZSB0 d28gbmV3CmZ1bmN0aW9ucyBhbGxvdyB0aGF0LiBBbG9uZyB3aXRoIHByb3ZpZGluZyB0aGUgdW5k ZXJsYXlpbmcKTUZOcyBmb3IgdGhlIHVzZXIncyAoc3VjaCBhcyBjaGFuZ2luZyBwYWdlIHRhYmxl IHBlcm1pc3Npb25zKS4KCkltcGxlbWVudGF0aW9uIHdpc2UgdGhlIHZtYXAgQVBJIGtlZXBzIHRy YWNrIG9mIHR3byB2aXJ0dWFsCmFkZHJlc3MgcmVnaW9ucyBub3c6CiBhKSBWTUFQX1ZJUlRfU1RB UlQKIGIpIEFueSBwcm92aWRlZCB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgKG5lZWQgc3RhcnQgYW5k IGVuZCkuCgpUaGUgYSkgb25lIGlzIHRoZSBkZWZhdWx0IG9uZSBhbmQgdGhlIGV4aXN0aW5nIGJl aGF2aW9yCmZvciB1c2VycyBvZiB2bWFsbG9jLCB2bWFwLCBldGMgaXMgdGhlIHNhbWUuCgpJZiBo b3dldmVyIG9uZSB3aXNoZXMgdG8gdXNlIHRoZSBiKSBvbmUgb25seSBoYXMgdG8gdXNlCnRoZSB2 bV9pbml0X3R5cGUgdG8gaW5pdGFsaXplIGFuZCB0aGUgdm1hbGxvY190eXBlIHRvIHV0aWxpemUg aXQuCgpUaGlzIGFsbG93cyB1c2VycyAoc3VjaCBhcyB4U3BsaWNlKSB0byBwcm92aWRlIHRoZWly IG93bgptZWNoYW5pc20gdG8gY2hhbmdlIHRoZSB0aGUgcGFnZSBmbGFncywgYW5kIGFsc28gdXNl IHZpcnR1YWwKYWRkcmVzc2VzIGNsb3NlciB0byB0aGUgaHlwZXJ2aXNvciB2aXJ0dWFsIGFkZHJl c3NlcyAoYXQgbGVhc3QKb24geDg2KSB3aGlsZSBub3QgaGF2aW5nIHRvIGRlYWwgd2l0aCB0aGUg YWxsb2NhdGlvbiBvZgpwYWdlcy4KCkZvciBleGFtcGxlIG9mIHVzZXJzLCBzZWUgcGF0Y2ggdGl0 bGVkICJ4c3BsaWNlOiBJbXBsZW1lbnQgcGF5bG9hZApsb2FkaW5nIiwgd2hlcmUgd2UgcGFyc2Ug dGhlIHBheWxvYWQncyBFTEYgcmVsb2NhdGlvbnMgLSB3aGljaAppcyBkZWZpbmVkIHRvIGJlIHNp Z25lZCAzMi1iaXQgKHNvIG1heCBkaXNwbGFjZW1lbnQgaXMgMkdCIHZpcnR1YWwKc3BhY0UpLiBU aGUgZGlzcGxhY2VtZW50IG9mIHRoZSBoeXBlcnZpc29yIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHRo ZQp2bWFsbG9jIChvbiB4ODYpIGlzIG1vcmUgdGhhbiAzMi1iaXRzIC0gd2hpY2ggbWVhbnMgdGhh dCBFTEYgcmVsb2NhdGlvbnMKd291bGQgdHJ1bmNhdGUgdGhlIDM0IGFuZCAzM3RoIGJpdC4gSGVu Y2UgdGhpcyBhbHRlcm5hdGUgQVBJCgpXZSBhbHNvIGFkZCBhZGQgZXh0cmEgY2hlY2tzIGluIGNh c2UgdGhlIGIpIHJhbmdlIGhhcyBub3QgYmVlbiBpbml0aWFsaXplZC4KClNpZ25lZC1vZmYtYnk6 IEtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KU3VnZ2VzdGVk LWJ5OiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+Ci0tLQpDYzogSWFuIEphY2tzb24g PGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNjOiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3Vz ZS5jb20+CkNjOiBLZWlyIEZyYXNlciA8a2VpckB4ZW4ub3JnPgpDYzogVGltIERlZWdhbiA8dGlt QHhlbi5vcmc+CkNjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+ CkNjOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgoKdjQ6IE5ldyBwYXRjaC4K djU6IFVwZGF0ZSBwZXIgSmFuJ3MgY29tbWVudHMuCnY2OiBEcm9wIHRoZSBzdHJheSBwYXJlbnRo ZXNlcyBvbiB0eXBlZGVmcy4KICAgIERpdGNoIHRoZSB2dW5tYXAgY2FsbGJhY2suIFN0YXNoIGF3 YXkgdGhlIHZpcnR1YWwgYWRkcmVzc2VzIGluIGxpc3RzLgogICAgRGl0Y2ggdGhlIHZtYXAgY2Fs bGJhY2suIEp1c3QgcHJvdmlkZSB2aXJ0dWFsIGFkZHJlc3MuCiAgICBEaXRjaCB0aGUgdm1hbGxv Y19yYW5nZS4gUmVxdWlyZSB1c2VycyBvZiBhbHRlcm5hdGl2ZSB2aXJ0dWFsIGFkZHJlc3MKICAg IHRvIGNhbGwgdm1hcF9pbml0X3R5cGUgZmlyc3QuCi0tLQotLS0KIHhlbi9hcmNoL2FybS9rZXJu ZWwuYyAgfCAgIDIgKy0KIHhlbi9hcmNoL2FybS9tbS5jICAgICAgfCAgIDIgKy0KIHhlbi9hcmNo L3g4Ni9tbS5jICAgICAgfCAgIDIgKy0KIHhlbi9jb21tb24vdm1hcC5jICAgICAgfCAxNjAgKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogeGVuL2RyaXZl cnMvYWNwaS9vc2wuYyB8ICAgMiArLQogeGVuL2luY2x1ZGUveGVuL3ZtYXAuaCB8ICA0NyArKysr KysrKysrKystLS0KIDYgZmlsZXMgY2hhbmdlZCwgMTM0IGluc2VydGlvbnMoKyksIDgxIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9rZXJuZWwuYyBiL3hlbi9hcmNoL2Fy bS9rZXJuZWwuYwppbmRleCA2MTgwOGFjLi45ODcxYmQ5IDEwMDY0NAotLS0gYS94ZW4vYXJjaC9h cm0va2VybmVsLmMKKysrIGIveGVuL2FyY2gvYXJtL2tlcm5lbC5jCkBAIC0yOTksNyArMjk5LDcg QEAgc3RhdGljIF9faW5pdCBpbnQga2VybmVsX2RlY29tcHJlc3Moc3RydWN0IGJvb3Rtb2R1bGUg Km1vZCkKICAgICAgICAgcmV0dXJuIC1FTk9NRU07CiAgICAgfQogICAgIG1mbiA9IF9tZm4ocGFn ZV90b19tZm4ocGFnZXMpKTsKLSAgICBvdXRwdXQgPSBfX3ZtYXAoJm1mbiwgMSA8PCBrZXJuZWxf b3JkZXJfb3V0LCAxLCAxLCBQQUdFX0hZUEVSVklTT1IpOworICAgIG91dHB1dCA9IF9fdm1hcCgm bWZuLCAxIDw8IGtlcm5lbF9vcmRlcl9vdXQsIDEsIDEsIFBBR0VfSFlQRVJWSVNPUiwgVk1BUF9E RUZBVUxUKTsKIAogICAgIHJjID0gcGVyZm9ybV9ndW56aXAob3V0cHV0LCBpbnB1dCwgc2l6ZSk7 CiAgICAgY2xlYW5fZGNhY2hlX3ZhX3JhbmdlKG91dHB1dCwgb3V0cHV0X3NpemUpOwpkaWZmIC0t Z2l0IGEveGVuL2FyY2gvYXJtL21tLmMgYi94ZW4vYXJjaC9hcm0vbW0uYwppbmRleCAwYWFlNmM1 Li44MjQ4YzNiIDEwMDY0NAotLS0gYS94ZW4vYXJjaC9hcm0vbW0uYworKysgYi94ZW4vYXJjaC9h cm0vbW0uYwpAQCAtODA0LDcgKzgwNCw3IEBAIHZvaWQgKmlvcmVtYXBfYXR0cihwYWRkcl90IHBh LCBzaXplX3QgbGVuLCB1bnNpZ25lZCBpbnQgYXR0cmlidXRlcykKICAgICBtZm5fdCBtZm4gPSBf bWZuKFBGTl9ET1dOKHBhKSk7CiAgICAgdW5zaWduZWQgaW50IG9mZnMgPSBwYSAmIChQQUdFX1NJ WkUgLSAxKTsKICAgICB1bnNpZ25lZCBpbnQgbnIgPSBQRk5fVVAob2ZmcyArIGxlbik7Ci0gICAg dm9pZCAqcHRyID0gX192bWFwKCZtZm4sIG5yLCAxLCAxLCBhdHRyaWJ1dGVzKTsKKyAgICB2b2lk ICpwdHIgPSBfX3ZtYXAoJm1mbiwgbnIsIDEsIDEsIGF0dHJpYnV0ZXMsIFZNQVBfREVGQVVMVCk7 CiAKICAgICBpZiAoIHB0ciA9PSBOVUxMICkKICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1n aXQgYS94ZW4vYXJjaC94ODYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9tbS5jCmluZGV4IGJjYTc1MzIu LmNhMmQwYmIgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS5jCisrKyBiL3hlbi9hcmNoL3g4 Ni9tbS5jCkBAIC02MTI0LDcgKzYxMjQsNyBAQCB2b2lkIF9faW9tZW0gKmlvcmVtYXAocGFkZHJf dCBwYSwgc2l6ZV90IGxlbikKICAgICAgICAgdW5zaWduZWQgaW50IG9mZnMgPSBwYSAmIChQQUdF X1NJWkUgLSAxKTsKICAgICAgICAgdW5zaWduZWQgaW50IG5yID0gUEZOX1VQKG9mZnMgKyBsZW4p OwogCi0gICAgICAgIHZhID0gX192bWFwKCZtZm4sIG5yLCAxLCAxLCBQQUdFX0hZUEVSVklTT1Jf Tk9DQUNIRSkgKyBvZmZzOworICAgICAgICB2YSA9IF9fdm1hcCgmbWZuLCBuciwgMSwgMSwgUEFH RV9IWVBFUlZJU09SX05PQ0FDSEUsIFZNQVBfREVGQVVMVCkgKyBvZmZzOwogICAgIH0KIAogICAg IHJldHVybiAodm9pZCBfX2ZvcmNlIF9faW9tZW0gKil2YTsKZGlmZiAtLWdpdCBhL3hlbi9jb21t b24vdm1hcC5jIGIveGVuL2NvbW1vbi92bWFwLmMKaW5kZXggMTM0ZWRhMC4uMjk0YmQ1MCAxMDA2 NDQKLS0tIGEveGVuL2NvbW1vbi92bWFwLmMKKysrIGIveGVuL2NvbW1vbi92bWFwLmMKQEAgLTEw LDQwICsxMCw0MyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIHN0YXRpYyBERUZJTkVfU1BJ TkxPQ0sodm1fbG9jayk7Ci1zdGF0aWMgdm9pZCAqX19yZWFkX21vc3RseSB2bV9iYXNlOwotI2Rl ZmluZSB2bV9iaXRtYXAgKCh1bnNpZ25lZCBsb25nICopdm1fYmFzZSkKK3N0YXRpYyB2b2lkICpf X3JlYWRfbW9zdGx5IHZtX2Jhc2VbVk1BUF9ucl07CisjZGVmaW5lIHZtX2JpdG1hcCh4KSAoKHVu c2lnbmVkIGxvbmcgKil2bV9iYXNlW3hdKQogLyogaGlnaGVzdCBhbGxvY2F0ZWQgYml0IGluIHRo ZSBiaXRtYXAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSB2bV90b3A7Citz dGF0aWMgdW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkgdm1fdG9wW1ZNQVBfbnJdOwogLyogdG90 YWwgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGJpdG1hcCAqLwotc3RhdGljIHVuc2lnbmVkIGludCBf X3JlYWRfbW9zdGx5IHZtX2VuZDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19yZWFkX21vc3RseSB2 bV9lbmRbVk1BUF9ucl07CiAvKiBsb3dlc3Qga25vd24gY2xlYXIgYml0IGluIHRoZSBiaXRtYXAg Ki8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdm1fbG93Oworc3RhdGljIHVuc2lnbmVkIGludCB2bV9s b3dbVk1BUF9ucl07CiAKLXZvaWQgX19pbml0IHZtX2luaXQodm9pZCkKK3ZvaWQgX19pbml0IHZt X2luaXRfdHlwZShlbnVtIHZtYXBfdHlwZSB0eXBlLCB2b2lkICpzdGFydCwgdm9pZCAqZW5kKQog ewogICAgIHVuc2lnbmVkIGludCBpLCBucjsKICAgICB1bnNpZ25lZCBsb25nIHZhOwogCi0gICAg dm1fYmFzZSA9ICh2b2lkICopVk1BUF9WSVJUX1NUQVJUOwotICAgIHZtX2VuZCA9IFBGTl9ET1dO KGFyY2hfdm1hcF92aXJ0X2VuZCgpIC0gdm1fYmFzZSk7Ci0gICAgdm1fbG93ID0gUEZOX1VQKCh2 bV9lbmQgKyA3KSAvIDgpOwotICAgIG5yID0gUEZOX1VQKCh2bV9sb3cgKyA3KSAvIDgpOwotICAg IHZtX3RvcCA9IG5yICogUEFHRV9TSVpFICogODsKKyAgICBBU1NFUlQoIXZtX2Jhc2VbdHlwZV0p OwogCi0gICAgZm9yICggaSA9IDAsIHZhID0gKHVuc2lnbmVkIGxvbmcpdm1fYml0bWFwOyBpIDwg bnI7ICsraSwgdmEgKz0gUEFHRV9TSVpFICkKKyAgICB2bV9iYXNlW3R5cGVdID0gc3RhcnQ7Cisg ICAgdm1fZW5kW3R5cGVdID0gUEZOX0RPV04oZW5kIC0gc3RhcnQpOworICAgIHZtX2xvd1t0eXBl XT0gUEZOX1VQKCh2bV9lbmRbdHlwZV0gKyA3KSAvIDgpOworICAgIG5yID0gUEZOX1VQKCh2bV9s b3dbdHlwZV0gKyA3KSAvIDgpOworICAgIHZtX3RvcFt0eXBlXSA9IG5yICogUEFHRV9TSVpFICog ODsKKworICAgIGZvciAoIGkgPSAwLCB2YSA9ICh1bnNpZ25lZCBsb25nKXZtX2JpdG1hcCh0eXBl KTsgaSA8IG5yOyArK2ksIHZhICs9IFBBR0VfU0laRSApCiAgICAgewogICAgICAgICBzdHJ1Y3Qg cGFnZV9pbmZvICpwZyA9IGFsbG9jX2RvbWhlYXBfcGFnZShOVUxMLCAwKTsKIAogICAgICAgICBt YXBfcGFnZXNfdG9feGVuKHZhLCBwYWdlX3RvX21mbihwZyksIDEsIFBBR0VfSFlQRVJWSVNPUik7 CiAgICAgICAgIGNsZWFyX3BhZ2UoKHZvaWQgKil2YSk7CiAgICAgfQotICAgIGJpdG1hcF9maWxs KHZtX2JpdG1hcCwgdm1fbG93KTsKKyAgICBiaXRtYXBfZmlsbCh2bV9iaXRtYXAodHlwZSksIHZt X2xvd1t0eXBlXSk7CiAKICAgICAvKiBQb3B1bGF0ZSBwYWdlIHRhYmxlcyBmb3IgdGhlIGJpdG1h cCBpZiBuZWNlc3NhcnkuICovCi0gICAgcG9wdWxhdGVfcHRfcmFuZ2UodmEsIDAsIHZtX2xvdyAt IG5yKTsKKyAgICBwb3B1bGF0ZV9wdF9yYW5nZSh2YSwgMCwgdm1fbG93W3R5cGVdIC0gbnIpOwog fQogCi12b2lkICp2bV9hbGxvYyh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGludCBhbGlnbikK K3N0YXRpYyB2b2lkICp2bV9hbGxvY190eXBlKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50 IGFsaWduLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB2bWFwX3R5cGUgdCkKIHsK ICAgICB1bnNpZ25lZCBpbnQgc3RhcnQsIGJpdDsKIApAQCAtNTIsMjcgKzU1LDMwIEBAIHZvaWQg KnZtX2FsbG9jKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50IGFsaWduKQogICAgIGVsc2Ug aWYgKCBhbGlnbiAmIChhbGlnbiAtIDEpICkKICAgICAgICAgYWxpZ24gJj0gLWFsaWduOwogCisg ICAgaWYgKCAhdm1fYmFzZVt0XSApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgc3Bpbl9s b2NrKCZ2bV9sb2NrKTsKICAgICBmb3IgKCA7IDsgKQogICAgIHsKICAgICAgICAgc3RydWN0IHBh Z2VfaW5mbyAqcGc7CiAKLSAgICAgICAgQVNTRVJUKHZtX2xvdyA9PSB2bV90b3AgfHwgIXRlc3Rf Yml0KHZtX2xvdywgdm1fYml0bWFwKSk7Ci0gICAgICAgIGZvciAoIHN0YXJ0ID0gdm1fbG93OyBz dGFydCA8IHZtX3RvcDsgKQorICAgICAgICBBU1NFUlQodm1fbG93W3RdID09IHZtX3RvcFt0XSB8 fCAhdGVzdF9iaXQodm1fbG93W3RdLCB2bV9iaXRtYXAodCkpKTsKKyAgICAgICAgZm9yICggc3Rh cnQgPSB2bV9sb3dbdF07IHN0YXJ0IDwgdm1fdG9wW3RdOyApCiAgICAgICAgIHsKLSAgICAgICAg ICAgIGJpdCA9IGZpbmRfbmV4dF9iaXQodm1fYml0bWFwLCB2bV90b3AsIHN0YXJ0ICsgMSk7Ci0g ICAgICAgICAgICBpZiAoIGJpdCA+IHZtX3RvcCApCi0gICAgICAgICAgICAgICAgYml0ID0gdm1f dG9wOworICAgICAgICAgICAgYml0ID0gZmluZF9uZXh0X2JpdCh2bV9iaXRtYXAodCksIHZtX3Rv cFt0XSwgc3RhcnQgKyAxKTsKKyAgICAgICAgICAgIGlmICggYml0ID4gdm1fdG9wW3RdICkKKyAg ICAgICAgICAgICAgICBiaXQgPSB2bV90b3BbdF07CiAgICAgICAgICAgICAvKgogICAgICAgICAg ICAgICogTm90ZSB0aGF0IHRoaXMgc2tpcHMgdGhlIGZpcnN0IGJpdCwgbWFraW5nIHRoZQogICAg ICAgICAgICAgICogY29ycmVzcG9uZGluZyBwYWdlIGEgZ3VhcmQgb25lLgogICAgICAgICAgICAg ICovCiAgICAgICAgICAgICBzdGFydCA9IChzdGFydCArIGFsaWduKSAmIH4oYWxpZ24gLSAxKTsK LSAgICAgICAgICAgIGlmICggYml0IDwgdm1fdG9wICkKKyAgICAgICAgICAgIGlmICggYml0IDwg dm1fdG9wW3RdICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpZiAoIHN0YXJ0ICsg bnIgPCBiaXQgKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBz dGFydCA9IGZpbmRfbmV4dF96ZXJvX2JpdCh2bV9iaXRtYXAsIHZtX3RvcCwgYml0ICsgMSk7Cisg ICAgICAgICAgICAgICAgc3RhcnQgPSBmaW5kX25leHRfemVyb19iaXQodm1fYml0bWFwKHQpLCB2 bV90b3BbdF0sIGJpdCArIDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgewpAQCAtODIsMTIgKzg4LDEyIEBAIHZvaWQgKnZtX2FsbG9jKHVuc2lnbmVkIGlu dCBuciwgdW5zaWduZWQgaW50IGFsaWduKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAg ICAgICAgaWYgKCBzdGFydCA8IHZtX3RvcCApCisgICAgICAgIGlmICggc3RhcnQgPCB2bV90b3Bb dF0gKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgc3Bpbl91bmxvY2soJnZtX2xvY2sp OwogCi0gICAgICAgIGlmICggdm1fdG9wID49IHZtX2VuZCApCisgICAgICAgIGlmICggdm1fdG9w W3RdID49IHZtX2VuZFt0XSApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgICAgICBw ZyA9IGFsbG9jX2RvbWhlYXBfcGFnZShOVUxMLCAwKTsKQEAgLTk2LDIzICsxMDIsMjMgQEAgdm9p ZCAqdm1fYWxsb2ModW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBpbnQgYWxpZ24pCiAKICAgICAg ICAgc3Bpbl9sb2NrKCZ2bV9sb2NrKTsKIAotICAgICAgICBpZiAoIHN0YXJ0ID49IHZtX3RvcCAp CisgICAgICAgIGlmICggc3RhcnQgPj0gdm1fdG9wW3RdICkKICAgICAgICAgewotICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyB2YSA9ICh1bnNpZ25lZCBsb25nKXZtX2JpdG1hcCArIHZtX3RvcCAv IDg7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhID0gKHVuc2lnbmVkIGxvbmcpdm1fYml0 bWFwKHQpICsgdm1fdG9wW3RdIC8gODsKIAogICAgICAgICAgICAgaWYgKCAhbWFwX3BhZ2VzX3Rv X3hlbih2YSwgcGFnZV90b19tZm4ocGcpLCAxLCBQQUdFX0hZUEVSVklTT1IpICkKICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICBjbGVhcl9wYWdlKCh2b2lkICopdmEpOwotICAgICAgICAg ICAgICAgIHZtX3RvcCArPSBQQUdFX1NJWkUgKiA4OwotICAgICAgICAgICAgICAgIGlmICggdm1f dG9wID4gdm1fZW5kICkKLSAgICAgICAgICAgICAgICAgICAgdm1fdG9wID0gdm1fZW5kOworICAg ICAgICAgICAgICAgIHZtX3RvcFt0XSArPSBQQUdFX1NJWkUgKiA4OworICAgICAgICAgICAgICAg IGlmICggdm1fdG9wW3RdID4gdm1fZW5kW3RdICkKKyAgICAgICAgICAgICAgICAgICAgdm1fdG9w W3RdID0gdm1fZW5kW3RdOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg fQogICAgICAgICB9CiAKICAgICAgICAgZnJlZV9kb21oZWFwX3BhZ2UocGcpOwogCi0gICAgICAg IGlmICggc3RhcnQgPj0gdm1fdG9wICkKKyAgICAgICAgaWYgKCBzdGFydCA+PSB2bV90b3BbdF0g KQogICAgICAgICB7CiAgICAgICAgICAgICBzcGluX3VubG9jaygmdm1fbG9jayk7CiAgICAgICAg ICAgICByZXR1cm4gTlVMTDsKQEAgLTEyMCw0NyArMTI2LDU2IEBAIHZvaWQgKnZtX2FsbG9jKHVu c2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50IGFsaWduKQogICAgIH0KIAogICAgIGZvciAoIGJp dCA9IHN0YXJ0OyBiaXQgPCBzdGFydCArIG5yOyArK2JpdCApCi0gICAgICAgIF9fc2V0X2JpdChi aXQsIHZtX2JpdG1hcCk7Ci0gICAgaWYgKCBiaXQgPCB2bV90b3AgKQotICAgICAgICBBU1NFUlQo IXRlc3RfYml0KGJpdCwgdm1fYml0bWFwKSk7CisgICAgICAgIF9fc2V0X2JpdChiaXQsIHZtX2Jp dG1hcCh0KSk7CisgICAgaWYgKCBiaXQgPCB2bV90b3BbdF0gKQorICAgICAgICBBU1NFUlQoIXRl c3RfYml0KGJpdCwgdm1fYml0bWFwKHQpKSk7CiAgICAgZWxzZQotICAgICAgICBBU1NFUlQoYml0 ID09IHZtX3RvcCk7Ci0gICAgaWYgKCBzdGFydCA8PSB2bV9sb3cgKyAyICkKLSAgICAgICAgdm1f bG93ID0gYml0OworICAgICAgICBBU1NFUlQoYml0ID09IHZtX3RvcFt0XSk7CisgICAgaWYgKCBz dGFydCA8PSB2bV9sb3dbdF0gKyAyICkKKyAgICAgICAgdm1fbG93W3RdID0gYml0OwogICAgIHNw aW5fdW5sb2NrKCZ2bV9sb2NrKTsKIAotICAgIHJldHVybiB2bV9iYXNlICsgc3RhcnQgKiBQQUdF X1NJWkU7CisgICAgcmV0dXJuIHZtX2Jhc2VbdF0gKyBzdGFydCAqIFBBR0VfU0laRTsKK30KKwor dm9pZCAqdm1fYWxsb2ModW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBpbnQgYWxpZ24pCit7Cisg ICAgcmV0dXJuIHZtX2FsbG9jX3R5cGUobnIsIGFsaWduLCBWTUFQX0RFRkFVTFQpOwogfQogCi1z dGF0aWMgdW5zaWduZWQgaW50IHZtX2luZGV4KGNvbnN0IHZvaWQgKnZhKQorc3RhdGljIHVuc2ln bmVkIGludCB2bV9pbmRleChjb25zdCB2b2lkICp2YSwgZW51bSB2bWFwX3R5cGUgdHlwZSkKIHsK ICAgICB1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl2YSAmIH4oUEFHRV9TSVpF IC0gMSk7CiAgICAgdW5zaWduZWQgaW50IGlkeDsKKyAgICB1bnNpZ25lZCBsb25nIHN0YXJ0ID0g KHVuc2lnbmVkIGxvbmcpdm1fYmFzZVt0eXBlXTsKKworICAgIGlmICggIXN0YXJ0KQorICAgICAg ICByZXR1cm4gMDsKIAotICAgIGlmICggYWRkciA8IFZNQVBfVklSVF9TVEFSVCArICh2bV9lbmQg LyA4KSB8fAotICAgICAgICAgYWRkciA+PSBWTUFQX1ZJUlRfU1RBUlQgKyB2bV90b3AgKiBQQUdF X1NJWkUgKQorICAgIGlmICggYWRkciA8IHN0YXJ0ICsgKHZtX2VuZFt0eXBlXSAvIDgpIHx8Cisg ICAgICAgICBhZGRyID49IHN0YXJ0ICsgdm1fdG9wW3R5cGVdICogUEFHRV9TSVpFICkKICAgICAg ICAgcmV0dXJuIDA7CiAKLSAgICBpZHggPSBQRk5fRE9XTih2YSAtIHZtX2Jhc2UpOwotICAgIHJl dHVybiAhdGVzdF9iaXQoaWR4IC0gMSwgdm1fYml0bWFwKSAmJgotICAgICAgICAgICB0ZXN0X2Jp dChpZHgsIHZtX2JpdG1hcCkgPyBpZHggOiAwOworICAgIGlkeCA9IFBGTl9ET1dOKHZhIC0gdm1f YmFzZVt0eXBlXSk7CisgICAgcmV0dXJuICF0ZXN0X2JpdChpZHggLSAxLCB2bV9iaXRtYXAodHlw ZSkpICYmCisgICAgICAgICAgIHRlc3RfYml0KGlkeCwgdm1fYml0bWFwKHR5cGUpKSA/IGlkeCA6 IDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdm1fc2l6ZShjb25zdCB2b2lkICp2YSkKK3N0 YXRpYyB1bnNpZ25lZCBpbnQgdm1fc2l6ZShjb25zdCB2b2lkICp2YSwgZW51bSB2bWFwX3R5cGUg dHlwZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgc3RhcnQgPSB2bV9pbmRleCh2YSksIGVuZDsKKyAg ICB1bnNpZ25lZCBpbnQgc3RhcnQgPSB2bV9pbmRleCh2YSwgdHlwZSksIGVuZDsKIAogICAgIGlm ICggIXN0YXJ0ICkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBlbmQgPSBmaW5kX25leHRfemVy b19iaXQodm1fYml0bWFwLCB2bV90b3AsIHN0YXJ0ICsgMSk7CisgICAgZW5kID0gZmluZF9uZXh0 X3plcm9fYml0KHZtX2JpdG1hcCh0eXBlKSwgdm1fdG9wW3R5cGVdLCBzdGFydCArIDEpOwogCi0g ICAgcmV0dXJuIG1pbihlbmQsIHZtX3RvcCkgLSBzdGFydDsKKyAgICByZXR1cm4gbWluKGVuZCwg dm1fdG9wW3R5cGVdKSAtIHN0YXJ0OwogfQogCi12b2lkIHZtX2ZyZWUoY29uc3Qgdm9pZCAqdmEp Cit2b2lkIHZtX2ZyZWVfdHlwZShjb25zdCB2b2lkICp2YSwgZW51bSB2bWFwX3R5cGUgdHlwZSkK IHsKLSAgICB1bnNpZ25lZCBpbnQgYml0ID0gdm1faW5kZXgodmEpOworICAgIHVuc2lnbmVkIGlu dCBiaXQgPSB2bV9pbmRleCh2YSwgdHlwZSk7CiAKICAgICBpZiAoICFiaXQgKQogICAgIHsKQEAg LTE2OSwyOSArMTg0LDMwIEBAIHZvaWQgdm1fZnJlZShjb25zdCB2b2lkICp2YSkKICAgICB9CiAK ICAgICBzcGluX2xvY2soJnZtX2xvY2spOwotICAgIGlmICggYml0IDwgdm1fbG93ICkKKyAgICBp ZiAoIGJpdCA8IHZtX2xvd1t0eXBlXSApCiAgICAgewotICAgICAgICB2bV9sb3cgPSBiaXQgLSAx OwotICAgICAgICB3aGlsZSAoICF0ZXN0X2JpdCh2bV9sb3cgLSAxLCB2bV9iaXRtYXApICkKLSAg ICAgICAgICAgIC0tdm1fbG93OworICAgICAgICB2bV9sb3dbdHlwZV0gPSBiaXQgLSAxOworICAg ICAgICB3aGlsZSAoICF0ZXN0X2JpdCh2bV9sb3dbdHlwZV0gLSAxLCB2bV9iaXRtYXAodHlwZSkp ICkKKyAgICAgICAgICAgIC0tdm1fbG93W3R5cGVdOwogICAgIH0KLSAgICB3aGlsZSAoIF9fdGVz dF9hbmRfY2xlYXJfYml0KGJpdCwgdm1fYml0bWFwKSApCi0gICAgICAgIGlmICggKytiaXQgPT0g dm1fdG9wICkKKyAgICB3aGlsZSAoIF9fdGVzdF9hbmRfY2xlYXJfYml0KGJpdCwgdm1fYml0bWFw KHR5cGUpKSApCisgICAgICAgIGlmICggKytiaXQgPT0gdm1fdG9wW3R5cGVdICkKICAgICAgICAg ICAgIGJyZWFrOwogICAgIHNwaW5fdW5sb2NrKCZ2bV9sb2NrKTsKIH0KIAogdm9pZCAqX192bWFw KGNvbnN0IG1mbl90ICptZm4sIHVuc2lnbmVkIGludCBncmFudWxhcml0eSwKLSAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGludCBhbGlnbiwgdW5zaWduZWQgaW50IGZsYWdz KQorICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50IGFsaWduLCB1bnNp Z25lZCBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgZW51bSB2bWFwX3R5cGUgdHlwZSkKIHsKLSAg ICB2b2lkICp2YSA9IHZtX2FsbG9jKG5yICogZ3JhbnVsYXJpdHksIGFsaWduKTsKKyAgICB2b2lk ICp2YSA9IHZtX2FsbG9jX3R5cGUobnIgKiBncmFudWxhcml0eSwgYWxpZ24sIHR5cGUpOwogICAg IHVuc2lnbmVkIGxvbmcgY3VyID0gKHVuc2lnbmVkIGxvbmcpdmE7CiAKICAgICBmb3IgKCA7IHZh ICYmIG5yLS07ICsrbWZuLCBjdXIgKz0gUEFHRV9TSVpFICogZ3JhbnVsYXJpdHkgKQogICAgIHsK ICAgICAgICAgaWYgKCBtYXBfcGFnZXNfdG9feGVuKGN1ciwgbWZuX3goKm1mbiksIGdyYW51bGFy aXR5LCBmbGFncykgKQogICAgICAgICB7Ci0gICAgICAgICAgICB2dW5tYXAodmEpOworICAgICAg ICAgICAgdnVubWFwX3R5cGUodmEsIHR5cGUpOwogICAgICAgICAgICAgdmEgPSBOVUxMOwogICAg ICAgICB9CiAgICAgfQpAQCAtMjAxLDIyICsyMTcsMjMgQEAgdm9pZCAqX192bWFwKGNvbnN0IG1m bl90ICptZm4sIHVuc2lnbmVkIGludCBncmFudWxhcml0eSwKIAogdm9pZCAqdm1hcChjb25zdCBt Zm5fdCAqbWZuLCB1bnNpZ25lZCBpbnQgbnIpCiB7Ci0gICAgcmV0dXJuIF9fdm1hcChtZm4sIDEs IG5yLCAxLCBQQUdFX0hZUEVSVklTT1IpOworICAgIHJldHVybiBfX3ZtYXAobWZuLCAxLCBuciwg MSwgUEFHRV9IWVBFUlZJU09SLCBWTUFQX0RFRkFVTFQpOwogfQogCi12b2lkIHZ1bm1hcChjb25z dCB2b2lkICp2YSkKK3ZvaWQgdnVubWFwX3R5cGUoY29uc3Qgdm9pZCAqdmEsIGVudW0gdm1hcF90 eXBlIHR5cGUpCiB7CisgICAgdW5zaWduZWQgaW50IHNpemUgPSB2bV9zaXplKHZhLCB0eXBlKTsK ICNpZm5kZWYgX1BBR0VfTk9ORQogICAgIHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBs b25nKXZhOwogCi0gICAgZGVzdHJveV94ZW5fbWFwcGluZ3MoYWRkciwgYWRkciArIFBBR0VfU0la RSAqIHZtX3NpemUodmEpKTsKKyAgICBkZXN0cm95X3hlbl9tYXBwaW5ncyhhZGRyLCBhZGRyICsg UEFHRV9TSVpFICogc2l6ZSk7CiAjZWxzZSAvKiBBdm9pZCB0ZWFyaW5nIGRvd24gaW50ZXJtZWRp YXRlIHBhZ2UgdGFibGVzLiAqLwotICAgIG1hcF9wYWdlc190b194ZW4oKHVuc2lnbmVkIGxvbmcp dmEsIDAsIHZtX3NpemUodmEpLCBfUEFHRV9OT05FKTsKKyAgICBtYXBfcGFnZXNfdG9feGVuKCh1 bnNpZ25lZCBsb25nKXZhLCAwLCBzaXplLCBfUEFHRV9OT05FKTsKICNlbmRpZgotICAgIHZtX2Zy ZWUodmEpOworICAgIHZtX2ZyZWVfdHlwZSh2YSwgdHlwZSk7CiB9CiAKLXZvaWQgKnZtYWxsb2Mo c2l6ZV90IHNpemUpCit2b2lkICp2bWFsbG9jX3R5cGUoc2l6ZV90IHNpemUsIGVudW0gdm1hcF90 eXBlIHR5cGUsIG1mbl90ICoqbWZuX2FycmF5KQogewogICAgIG1mbl90ICptZm47CiAgICAgc2l6 ZV90IHBhZ2VzLCBpOwpAQCAtMjM4LDExICsyNTUsMTUgQEAgdm9pZCAqdm1hbGxvYyhzaXplX3Qg c2l6ZSkKICAgICAgICAgbWZuW2ldID0gX21mbihwYWdlX3RvX21mbihwZykpOwogICAgIH0KIAot ICAgIHZhID0gdm1hcChtZm4sIHBhZ2VzKTsKKyAgICB2YSA9IF9fdm1hcChtZm4sIDEsIHBhZ2Vz LCAxLCBQQUdFX0hZUEVSVklTT1IsIHR5cGUpOwogICAgIGlmICggdmEgPT0gTlVMTCApCiAgICAg ICAgIGdvdG8gZXJyb3I7CiAKLSAgICB4ZnJlZShtZm4pOworICAgIGlmICggbWZuX2FycmF5ICkK KyAgICAgICAgKm1mbl9hcnJheSA9IG1mbjsKKyAgICBlbHNlCisgICAgICAgIHhmcmVlKG1mbik7 CisKICAgICByZXR1cm4gdmE7CiAKICBlcnJvcjoKQEAgLTI2Niw3ICsyODcsNyBAQCB2b2lkICp2 emFsbG9jKHNpemVfdCBzaXplKQogICAgIHJldHVybiBwOwogfQogCi12b2lkIHZmcmVlKHZvaWQg KnZhKQordm9pZCB2ZnJlZV90eXBlKHZvaWQgKnZhLCBlbnVtIHZtYXBfdHlwZSB0eXBlKQogewog ICAgIHVuc2lnbmVkIGludCBpLCBwYWdlczsKICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwZzsKQEAg LTI3NSw3ICsyOTYsOCBAQCB2b2lkIHZmcmVlKHZvaWQgKnZhKQogICAgIGlmICggIXZhICkKICAg ICAgICAgcmV0dXJuOwogCi0gICAgcGFnZXMgPSB2bV9zaXplKHZhKTsKKyAgICBwYWdlcyA9IHZt X3NpemUodmEsIHR5cGUpOworCiAgICAgQVNTRVJUKHBhZ2VzKTsKIAogICAgIGZvciAoIGkgPSAw OyBpIDwgcGFnZXM7IGkrKyApCkBAIC0yODUsNyArMzA3LDcgQEAgdm9pZCB2ZnJlZSh2b2lkICp2 YSkKICAgICAgICAgQVNTRVJUKHBhZ2UpOwogICAgICAgICBwYWdlX2xpc3RfYWRkKHBhZ2UsICZw Z19saXN0KTsKICAgICB9Ci0gICAgdnVubWFwKHZhKTsKKyAgICB2dW5tYXBfdHlwZSh2YSwgdHlw ZSk7CiAKICAgICB3aGlsZSAoIChwZyA9IHBhZ2VfbGlzdF9yZW1vdmVfaGVhZCgmcGdfbGlzdCkp ICE9IE5VTEwgKQogICAgICAgICBmcmVlX2RvbWhlYXBfcGFnZShwZyk7CmRpZmYgLS1naXQgYS94 ZW4vZHJpdmVycy9hY3BpL29zbC5jIGIveGVuL2RyaXZlcnMvYWNwaS9vc2wuYwppbmRleCA4YTI4 ZDg3Li45YTQ5MDI5IDEwMDY0NAotLS0gYS94ZW4vZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL3hl bi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTk3LDcgKzk3LDcgQEAgYWNwaV9vc19tYXBfbWVtb3J5 KGFjcGlfcGh5c2ljYWxfYWRkcmVzcyBwaHlzLCBhY3BpX3NpemUgc2l6ZSkKIAkJaWYgKElTX0VO QUJMRUQoQ09ORklHX1g4NikgJiYgISgocGh5cyArIHNpemUgLSAxKSA+PiAyMCkpCiAJCQlyZXR1 cm4gX192YShwaHlzKTsKIAkJcmV0dXJuIF9fdm1hcCgmbWZuLCBQRk5fVVAob2ZmcyArIHNpemUp LCAxLCAxLAotCQkJICAgICAgQUNQSV9NQVBfTUVNX0FUVFIpICsgb2ZmczsKKwkJCSAgICAgIEFD UElfTUFQX01FTV9BVFRSLCBWTUFQX0RFRkFVTFQpICsgb2ZmczsKIAl9CiAJcmV0dXJuIF9fYWNw aV9tYXBfdGFibGUocGh5cywgc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS94ZW4v dm1hcC5oIGIveGVuL2luY2x1ZGUveGVuL3ZtYXAuaAppbmRleCA1NjcxYWM4Li4wN2ZhM2I0IDEw MDY0NAotLS0gYS94ZW4vaW5jbHVkZS94ZW4vdm1hcC5oCisrKyBiL3hlbi9pbmNsdWRlL3hlbi92 bWFwLmgKQEAgLTQsMTYgKzQsNDQgQEAKICNpbmNsdWRlIDx4ZW4vbW0uaD4KICNpbmNsdWRlIDxh c20vcGFnZS5oPgogCitlbnVtIHZtYXBfdHlwZSB7CisgICAgVk1BUF9ERUZBVUxULAorICAgIFZN QVBfWEVOLAorICAgIFZNQVBfbnIsCit9OworCit2b2lkIHZtX2ZyZWVfdHlwZShjb25zdCB2b2lk ICosIGVudW0gdm1hcF90eXBlKTsKK3ZvaWQgdnVubWFwX3R5cGUoY29uc3Qgdm9pZCAqLCBlbnVt IHZtYXBfdHlwZSk7Cit2b2lkICp2bWFsbG9jX3R5cGUoc2l6ZV90IHNpemUsIGVudW0gdm1hcF90 eXBlIHR5cGUsIG1mbl90ICoqbWZuX2FycmF5KTsKK3ZvaWQgdm1faW5pdF90eXBlKGVudW0gdm1h cF90eXBlIHR5cGUsIHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpOwordm9pZCB2ZnJlZV90eXBlKHZv aWQgKnZhLCBlbnVtIHZtYXBfdHlwZSB0eXBlKTsKKwogdm9pZCAqdm1fYWxsb2ModW5zaWduZWQg aW50IG5yLCB1bnNpZ25lZCBpbnQgYWxpZ24pOwotdm9pZCB2bV9mcmVlKGNvbnN0IHZvaWQgKik7 CiAKLXZvaWQgKl9fdm1hcChjb25zdCBtZm5fdCAqbWZuLCB1bnNpZ25lZCBpbnQgZ3JhbnVsYXJp dHksCi0gICAgICAgICAgICAgdW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBpbnQgYWxpZ24sIHVu c2lnbmVkIGludCBmbGFncyk7CitzdGF0aWMgaW5saW5lIHZvaWQgdm1fZnJlZShjb25zdCB2b2lk ICp2YSkKK3sKKyAgICB2bV9mcmVlX3R5cGUodmEsIFZNQVBfREVGQVVMVCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZCB2dW5tYXAoY29uc3Qgdm9pZCAqdmEpCit7CisgICAgdnVubWFwX3R5cGUo dmEsIFZNQVBfREVGQVVMVCk7Cit9CisKK3ZvaWQgKl9fdm1hcChjb25zdCBtZm5fdCAqbWZuLCB1 bnNpZ25lZCBpbnQgZ3JhbnVsYXJpdHksIHVuc2lnbmVkIGludCBuciwKKyAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgYWxpZ24sIHVuc2lnbmVkIGludCBmbGFncywgZW51bSB2bWFwX3R5cGUpOwog dm9pZCAqdm1hcChjb25zdCBtZm5fdCAqbWZuLCB1bnNpZ25lZCBpbnQgbnIpOwotdm9pZCB2dW5t YXAoY29uc3Qgdm9pZCAqKTsKLXZvaWQgKnZtYWxsb2Moc2l6ZV90IHNpemUpOworCitzdGF0aWMg aW5saW5lIHZvaWQgKnZtYWxsb2Moc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIHZtYWxsb2Nf dHlwZShzaXplLCBWTUFQX0RFRkFVTFQsIE5VTEwpOworfQorCiB2b2lkICp2emFsbG9jKHNpemVf dCBzaXplKTsKLXZvaWQgdmZyZWUodm9pZCAqdmEpOworc3RhdGljIGlubGluZSB2b2lkIHZmcmVl KHZvaWQgKnZhKQoreworICAgIHZmcmVlX3R5cGUodmEsIFZNQVBfREVGQVVMVCk7Cit9CiAKIHZv aWQgX19pb21lbSAqaW9yZW1hcChwYWRkcl90LCBzaXplX3QpOwogCkBAIC0yMSwxMCArNDksMTMg QEAgc3RhdGljIGlubGluZSB2b2lkIGlvdW5tYXAodm9pZCBfX2lvbWVtICp2YSkKIHsKICAgICB1 bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykodm9pZCBfX2ZvcmNlICopdmE7CiAK LSAgICB2dW5tYXAoKHZvaWQgKikoYWRkciAmIFBBR0VfTUFTSykpOworICAgIHZ1bm1hcF90eXBl KCh2b2lkICopKGFkZHIgJiBQQUdFX01BU0spLCBWTUFQX0RFRkFVTFQpOwogfQogCi12b2lkIHZt X2luaXQodm9pZCk7CiB2b2lkICphcmNoX3ZtYXBfdmlydF9lbmQodm9pZCk7CitzdGF0aWMgaW5s aW5lIHZvaWQgdm1faW5pdCh2b2lkKQoreworICAgIHZtX2luaXRfdHlwZShWTUFQX0RFRkFVTFQs ICh2b2lkICopVk1BUF9WSVJUX1NUQVJULCBhcmNoX3ZtYXBfdmlydF9lbmQoKSk7Cit9CiAKICNl bmRpZiAvKiBfX1hFTl9WTUFQX0hfXyAqLwotLSAKMi41LjAKCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1k ZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=